[
  {
    "path": ".bumpversion.cfg",
    "content": "[bumpversion]\ncurrent_version = 0.81-test\nparse = (?P<major>\\d+)\\.(?P<minor>\\d+)(-(?P<release>.*))?\nmessage = Bump version: {current_version} -> {new_version}\nserialize = \n\t{major}.{minor}-{release}\n\t{major}.{minor}\n\n[bumpversion:part:release]\noptional_value = release\nvalues = \n\ttest\n\trelease\n\n[bumpversion:file:gcpdiag/config.py]\nsearch = VERSION = '{current_version}'\nreplace = VERSION = '{new_version}'\n"
  },
  {
    "path": ".coveragerc",
    "content": "[run]\nomit =\n    *_test.py\n    *_stub.py\n"
  },
  {
    "path": ".devcontainer/README.md",
    "content": "# Remote Container\n\n[Remote Container](https://code.visualstudio.com/docs/remote/containers) (aka Development Container)\nenables development fully inside a container, which allows for reproducible environments.\nBesides allowing for an easier getting started experience, the environment can be rebuild with\n`git reset --hard` and a container rebuild.\n\n## Setup\n\n### Requirements\n\nInstall the requirements on a Linux host:\n\n1. Install podman on the machine with `apt-get install podman -y`\n    1. Ensure you follow all the instructions for correct setup of podman on Debian-like distros.\n    Please consult any public (or internal) documentation for the setup\n2. Link podman as docker executable to avoid any overseen issues `ln -s /usr/bin/podman /usr/bin/docker`\n3. Clone the repository in a folder of your choice on your host\n\n### Open on a Workstation\n\nTo open the project in a remote container please follow the official\n[documentation](https://code.visualstudio.com/docs/remote/containers#_open-an-existing-workspace-in-a-container)\nor the short-listed steps:\n\n1. Ensure you have [VS Code](https://code.visualstudio.com/) installed\n2. Ensure the [Remote - Container](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)\n    extension is installed in VS Code\n3. Open the source code folder in VS Code and click the pop-up \"Reopen in Container\"\n    - If the pop-up does not show up by default, please consult the\n    [documentation](https://code.visualstudio.com/docs/remote/containers#_open-an-existing-workspace-in-a-container)\n\n### Open on a Remote Instance via SSH\n\nThe advantage of development via SSH (especially from non-Linux workstations) are a local UI renderer (VS Code),\nwithout having to rely on graphical remoting protocols such as Chrome Remote Desktop.\nAdditionally, it gives the power of any possible instance and still has a local UX even though the code execution happens in the Cloud.\n\nFor more details please consult the\n[documentation](https://code.visualstudio.com/remote/advancedcontainers/develop-remote-host#_connect-using-the-remote-ssh-extension-recommended)\nor the following short-listed steps:\n\n1. Ensure you have [VS Code](https://code.visualstudio.com/) installed locally\n2. Ensure the [Remote - Container](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) &\n    [Remote - SSH](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-ssh)\n    extensions are installed in VS Code\n3. Connect to the remote machine via SSH following the\n    [documentation](https://code.visualstudio.com/remote/advancedcontainers/develop-remote-host#_connect-using-the-remote-ssh-extension-recommended)\n4. Open the container on the remote similar to a local [workstation setup](#open-on-a-workstation)\n   - If any issue occurs please consult the\n      [documentation](https://code.visualstudio.com/remote/advancedcontainers/develop-remote-host)\n\nThe `git push` operation will need to be executed over SSH connection on the host (not in the container).\n\n## Known Issues\n\n- On the first start it might happen that VS Code does not correctly pick up the `pipenv` venv\n  - As a workaround, restarting the container might help. Otherwise, please follow the\n    [documentation](https://code.visualstudio.com/remote/advancedcontainers/develop-remote-host#_connect-using-the-remote-ssh-extension-recommended)\n    to manually select an interpreter\n\n- On the first start it might happen that VS Code does not correctly source the `pipenv` venv for new terminals\n  - As a workaround, restarting the container might help.\n    Otherwise, please execute `pipenv shell` manually\n\n## Limitations\n\n- `git commit` needs to be run in the container to allow correct execution of git hooks\n- `git push` needs to be run on the host for authentication (especially in Google internal environments)\n\n## Possible future improvements\n\n- [ ] Install a Python linter (i.e. pylint) in the container to enable it by default for all developers\n- [ ] Install a Python formatter in the container to enable it by default for all developers\n"
  },
  {
    "path": ".devcontainer/devcontainer.json",
    "content": "{\n\t\"name\": \"gcpdiag\",\n\t\"image\": \"us-docker.pkg.dev/gcpdiag-dist/common/gcpdiag-pipenv-python-3.12:0.87\", // Using our current test image - \"latest\"/\"stable\" tags do not exist at the moment\n\t// Use the following snippet for building the image locally and not pulling it from the remote\n\t//\"build\": {\n\t//\t\"dockerfile\": \"../docker/pipenv-python-3.12/Dockerfile\",\n\t//\t\"context\": \"../docker/pipenv-python-3.12\",\n\t//\t\"args\": {}\n\t//},\n\t\"customizations\": {\n\t\t\"vscode\": {\n\t\t\t\"settings\": {\n\t\t\t\t\"python.defaultInterpreterPath\": \"/usr/local/bin/python\",\n\t\t\t\t\"python.linting.enabled\": true,\n\t\t\t\t\"python.linting.pylintEnabled\": true,\n\t\t\t\t\"python.envFile\": \"${workspaceFolder}/.devcontainer/.env\" // Forcing some specific env settings for debugging any dynamic python file - normal env vars are not correctly picked up\n\t\t\t},\n\t\t\t\"extensions\": [\n\t\t\t\t\"ms-python.python\",\n\t\t\t\t\"ms-python.vscode-pylance\"\n\t\t\t]\n\t\t}\n\t},\n\t\"remoteEnv\": {\n\t\t\"PYTHONPATH\": \"/workspace\" // required for bin/gcpdiag to correctly locate the modules / duplication of the .env file - no other workaround found\n\t},\n\t\"onCreateCommand\": \"PATH=$HOME/.local/bin:$PATH && pipenv install --dev\", // We need to execute the commands very early to allow VS Code (-extensions) to correctly pick up the pipenv venv\n\t\"postCreateCommand\": \"pipenv run pre-commit install\",\n\t\"remoteUser\": \"root\",\n\t// Podman specific settings\n\t\"workspaceMount\": \"source=${localWorkspaceFolder},target=/workspace,type=bind,Z\",\n\t\"workspaceFolder\": \"/workspace\",\n\t//\"runArgs\": [\n\t//\t\"--userns=keep-id\"\t// Causes issue with uid mappings on host, which we need for git to work properly - files are owned by random uids due to the uid mapping\n\t//],\n\t\"containerUser\": \"root\"\n}\n"
  },
  {
    "path": ".gitallowed",
    "content": "gcpdiag/queries/client_secrets.json\nwebsite/content/en/docs/authentication.md\n"
  },
  {
    "path": ".github/workflows/code-analysis.yml",
    "content": "name: Code analysis\non:\n  pull_request:\n  push:\n\n# Declare default permissions as Read only.\npermissions: read-all\n\nenv:\n  PIPENV_VENV_IN_PROJECT: enabled\njobs:\n  pre-commit:\n    runs-on: ubuntu-latest\n    timeout-minutes: 10\n    permissions:\n      contents: read\n      # Required for actions/cache to save and restore caches\n      actions: write\n    steps:\n    - name: Install Graphviz\n      run: sudo apt-get install -y graphviz\n\n    - name: Install Ruby\n      run: |\n        sudo apt-get install -y ruby\n\n    - name: Checkout repository\n      uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 #v4\n\n    - name: Set up Python\n      id: setup-python\n      uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 #v5\n      with:\n        python-version: 3.12\n\n    - name: Set up Terraform\n      uses: hashicorp/setup-terraform@b9cd54a3c349d3f38e8881555d616ced269862dd # v3.1.2\n      with:\n        terraform_version: 1.0.6\n\n    - name: Install pipenv\n      run: python -m pip install --require-hashes -r requirements.txt\n\n    - name: Restore pipenv cache\n      id: cache-pipenv\n      uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 #v4\n      with:\n        path: ./.venv\n        key: codeanaysis-${{ runner.os }}-python-${{ steps.setup-python.outputs.python-version }}-pipenv-${{ hashFiles('Pipfile.lock') }}\n\n    - name: Install dependencies\n      if: steps.cache-pipenv.outputs.cache-hit != 'true'\n      run: pipenv install --deploy --dev\n\n    - name: Run pre-commit\n      uses: pre-commit/action@2c7b3805fd2a0fd8c1884dcaebf91fc102a13ecd # v3.0.1\n"
  },
  {
    "path": ".github/workflows/scorecard.yml",
    "content": "# This workflow uses actions that are not certified by GitHub. They are provided\n# by a third-party and are governed by separate terms of service, privacy\n# policy, and support documentation.\n\nname: Scorecard supply-chain security\non:\n  # For Branch-Protection check. Only the default branch is supported. See\n  # https://github.com/ossf/scorecard/blob/main/docs/checks.md#branch-protection\n  branch_protection_rule:\n  # To guarantee Maintained check is occasionally updated. See\n  # https://github.com/ossf/scorecard/blob/main/docs/checks.md#maintained\n  schedule:\n    - cron: '33 12 * * 0'\n  push:\n    branches: [ \"main\" ]\n\n# Declare default permissions as read only.\npermissions: read-all\n\njobs:\n  analysis:\n    name: Scorecard analysis\n    runs-on: ubuntu-latest\n    permissions:\n      # Needed to upload the results to code-scanning dashboard.\n      security-events: write\n      # Needed to publish results and get a badge (see publish_results below).\n      id-token: write\n\n\n    steps:\n      - name: \"Checkout code\"\n        uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1\n        with:\n          persist-credentials: false\n\n      - name: \"Run analysis\"\n        uses: ossf/scorecard-action@0864cf19026789058feabb7e87baa5f140aac736 # v2.3.1\n        with:\n          results_file: gcpdiag-scorecard-results.sarif\n          results_format: sarif\n\n          # Public repositories:\n          #   - Publish results to OpenSSF REST API for easy access by consumers\n          #   - Allows the repository to include the Scorecard badge.\n          #   - See https://github.com/ossf/scorecard-action#publishing-results.\n          publish_results: true\n\n      # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF\n      # format to the repository Actions tab.\n      - name: \"Upload artifact\"\n        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4\n        with:\n          name: gcpdiag-scorecard-results\n          path: gcpdiag-scorecard-results.sarif\n          retention-days: 5\n\n      # Upload the results to GitHub's code scanning dashboard (optional).\n      # Commenting out will disable upload of results to your repo's Code Scanning dashboard\n      - name: \"Upload to code-scanning\"\n        uses: github/codeql-action/upload-sarif@df559355d593797519d70b90fc8edd5db049e7a2 # v3\n        with:\n          sarif_file: gcpdiag-scorecard-results.sarif\n"
  },
  {
    "path": ".github/workflows/test.yml",
    "content": "name: Test\non:\n  pull_request:\n  push:\n\n# Declare default permissions as read only.\npermissions: read-all\n\nenv:\n  PIPENV_VENV_IN_PROJECT: enabled\njobs:\n  make-test:\n    runs-on: ubuntu-latest\n    timeout-minutes: 10\n    permissions:\n      contents: read\n      # Required for actions/cache to save and restore caches\n      actions: write\n    steps:\n    - name: Checkout repository\n      uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 #v4\n\n    - name: Set up Python\n      id: setup-python\n      uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 #v5\n      with:\n        python-version: 3.12\n\n    - name: Install pipenv\n      run:  python -m pip install --require-hashes --no-deps -r requirements.txt\n\n    - name: Restore pipenv cache\n      id: cache-pipenv\n      uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 #v4\n      with:\n        path: ./.venv\n        key: test-${{ runner.os }}-python-${{ steps.setup-python.outputs.python-version }}-pipenv-${{ hashFiles('Pipfile.lock') }}\n\n    - name: Install dependencies\n      if: steps.cache-pipenv.outputs.cache-hit != 'true'\n      run: pipenv install --deploy --dev\n\n    - name: Run make test\n      run: pipenv run make test\n\n    # The gcpdiag.dev website is no longer on github pages, but it's still good to build it in an action to find errors.\n    - name: Hugo build\n      run: |\n        docker run --rm \\\n          --user \"$(id -u):$(id -g)\" \\\n          -e HUGO_CACHEDIR=/src/.hugo_cache \\\n          -v \"${{ github.workspace }}/website:/src\" \\\n          -w /src \\\n          us-docker.pkg.dev/gcpdiag-dist/common/gcpdiag-hugo:0.3 \\\n          build\n"
  },
  {
    "path": ".gitignore",
    "content": ".coverage\ndist\n.pipenv-dockerized\n*.pyc\n__pycache__\n.terraform\nterraform.tfstate\nterraform.tfstate.backup\nterraform.tfstate.*.backup\n.terraform.tfstate.lock.info\n.venv\n*.lock.hcl\n.pyinstaller.build\n.*.swp\nwebsite/public\nwebsite/resources\ncrash.*.log\ngcpdiag-config\ngcpdiag/testpsa.py\n.vscode/launch.json\n**/.DS_STORE\nvenv/\n"
  },
  {
    "path": ".isort.cfg",
    "content": "[settings]\nprofile=\n"
  },
  {
    "path": ".pre-commit-config.yaml",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nexclude: '/snapshots/'\nrepos:\n- repo: https://github.com/pre-commit/pre-commit-hooks\n  rev: v5.0.0\n  hooks:\n  - id: check-added-large-files\n    args: ['--maxkb=600']\n  - id: check-ast\n  - id: check-case-conflict\n  - id: check-executables-have-shebangs\n  - id: check-merge-conflict\n  - id: check-toml\n  - id: check-vcs-permalinks\n  - id: check-yaml\n  - id: detect-private-key\n  - id: end-of-file-fixer\n  - id: mixed-line-ending\n  - id: trailing-whitespace\n    exclude: .bumpversion.cfg\n\n- repo: https://github.com/asottile/pyupgrade\n  rev: v2.29.0\n  hooks:\n  - id: pyupgrade\n    args: [--py36-plus]\n\n- repo: https://github.com/codespell-project/codespell\n  rev: v2.3.0\n  hooks:\n  - id: codespell\n    exclude: (^test-data/.*|^.*_test\\.py$|^.*_unittest\\.py$|^.*\\.lock$|^pyinstaller/.*$|^.*\\.spec$|^website/content/en/runbook/.*$|^gcpdiag/lint/snapshots/.*$|^gcpdiag/runbook/snapshots/.*$)\n\n- repo: https://github.com/pre-commit/mirrors-mypy\n  rev: v1.2.0\n  hooks:\n  - id: mypy\n    exclude: bin/gcpdiag\n    args: ['--ignore-missing-imports', '--scripts-are-modules',\n      '--implicit-optional', '--no-namespace-packages', '--install-types',\n      '--non-interactive']\n\n- repo: https://github.com/timothycrosley/isort\n  rev: 5.12.0\n  hooks:\n  - id: isort\n\n- repo: https://github.com/google/yapf\n  rev: v0.40.2\n  hooks:\n  - id: yapf\n\n- repo: https://github.com/pylint-dev/pylint\n  rev: v3.3.1\n  hooks:\n  - id: pylint\n\n- repo: https://github.com/antonbabenko/pre-commit-terraform\n  rev: v1.96.1\n  hooks:\n  - id: terraform_fmt\n  - id: terraform_validate\n\n- repo: local\n  hooks:\n  - id: gcpdiag-custom-rule\n    name: Check that there are required files for each lint rule\n    entry: ./bin/precommit-required-files-wrapper lint\n    language: script\n    files: ^gcpdiag/lint/[^/]+/(bp|warn|err|sec)_.*.py\n    exclude: .*_test.py\n- repo: local\n  hooks:\n  - id: gcpdiag-custom-runbook-rule\n    name: Check and generate runbook docs\n    entry: ./bin/precommit-required-files-wrapper runbook\n    language: script\n    files: ^gcpdiag/runbook/[^/]+/.*.py\n    exclude: >\n      .*_test.py|\n      ^gcpdiag/runbook/(output|report)|\n      ^gcpdiag/runbook/[^/]+/snapshots/|\n      ^gcpdiag/runbook/[^/]+/(constants|command|flags|util).py|\n      ^gcpdiag/runbook/(constants|command|flags|exceptions|report|util).py\n- repo: local\n  hooks:\n  - id: todo-annotations\n    name: Check presence of \"TODO:\" comments\n    entry: ./bin/precommit-todo-annotations\n    language: script\n- repo: https://github.com/markdownlint/markdownlint\n  rev: v0.13.0\n  hooks:\n  - id: markdownlint\n    files: \\.(jinja)$\n    entry: mdl --rules MD034\n"
  },
  {
    "path": ".pylint-dictionary.txt",
    "content": "ack\naiohttp\naiplatform\nallowedPolicyMemberDomains\napi\napigee\nApigee\nApigee's\nApigeeX\napis\nAPIs\napiserver\nAPIState\nargs\nArgs\nargv\nASM\nasync\nasyncio\natleast\nattr\nauth\nautoscaler\nAutoscaler\nautoscaling\nAutoscaling\nautoscalingpolicy\nbackend\nBackend\nbackends\nbalancer\nBalancer\nbalancers\nbehaviour\nBFD\nbigquery\nBigquery\nbigquerydatatransfer\nbool\nboolen\nbootable\nBQ\nbyol\ncamelcase\ncb\nCDF\nCDN\ncgroup\nChrony\ncidr\ncli\ncloudaudit\ncloudbuild\ncloudfunctions\ncloudrun\ncloudsql\nCLUSTERHASH\nCLUSTERNAME\nCNI\ncomputeProfiles\nconfig\nconfigs\nconntrack\ncontainerd\ncoroutine\nCrashloopbackoff\nCRD\ncrm\nCRM\nCrypto\nCryptoKey\nCSV\ndaemonset\ndataflow\nDataflow\ndatafusion\nDatafusion\ndataplane\nDataplane\ndataproc\nDataproc\nDataTime\ndatatypes\ndatetime\ndateutil\ndebian\ndecrypt\nDecrypter\ndeque\ndev\nDiagnosticTree\ndicts\ndiskcache\nDLQ\ndml\nDML\ndns\nDNS\ndocstring\nDT\nEe\nEFI\neg\nelif\nEnablement\nEncrypter\nendstep\nEnum\nenv\nenvironmentId\nenvs\neol\nEOL\neval\nexampledagname\nfailureInfo\nfeaturestore\nfeaturestores\nFeaturestores\nfilesystem\nfilesystems\nfluentd\nformater\nformatter\nfrozenset\nfuncton\nfw\ngae\nGAE\ngcb\ngce\nGCE\ngcf\nGCF\ngcfs\ngcloud\ngcp\nGCP\nGcpApiError\ngcpbackendpolicies\ngcpdiag\ngcpdiag's\ngcpgatewaypolicies\ngcr\nGCR\ngcs\nGCS\nGeneratlized\ngetIamPolicy\ngke\nGKE\nGKE's\nGKEs\nGLB\nGlobals\ngoogleapiclient\ngoogleapis\ngserviceaccount\ngzip\nhealthcheck\nhealthcheckpolicies\nHEC\nhostname\nHPA\nhttp\nHttp\nHttpError\niam\nIAM\nIAP\niff\nIInvestigates\niLB\ninlined\ninlining\ninstanceId\ninstantiation\nintranode\nio\nip\nIPAddrOrNet\nips\nIPs\nisclose\nistio\nIstio\nistiod\nIterable\nJinja\njson\njupyter\nJupyter\nJupyterlab\nKerberos\nKeybased\nkeyname\nkeyvalue\nkms\nKMS\nKSA\nkube\nkubeclt\nkubeconfig\nkubectl\nKubectl\nKubelet\nkubernetes\nKubernetes\nkwargs\nlifecycle\nlinters\nLintRuleRepository\nlinux\nlistPolicy\nliveness\nLLC\nloadbalancing\nlocationId\nLogsQuery\nlogWriter\nlse\nmasq\nmaxPartittions\nmetaclass\nMetaclass\nmetricWriter\nmig\nmigs\nMIG's\nMIGs\nmisconfiguration\nmisconfigurations\nmisconfigured\nMQL\nmyapp\nmysql\nnamespace\nnamespaces\nnat\nNegsignal\nnetworkmanagement\nnic\nnodepool\nnodepools\nnotpresent\nNTP\nOAuth\noccuring\nok\nonboarding\nonload\nOOM\norganizationAdmin\nos\nosconfig\nOSS\nouma\noverlayfs\nParamaters\nparens\nparseable\npartitionSizeBytes\nPCollection\nPCollections\nPeerings\nperformnce\npermisssion\nPGA\nphp\nPID\npre\nprecommit\npreemptible\nprefetch\nPrefetch\nprogrammatically\nprojectId\nProjectPolicy\nPSA\npubsub\nPubsub\npvpanic\npy\npyinstaller\nRDP\nrecommender\nrecommened\nregexes\nrepo\nRepor\nrepr\nreq\nrequireShieldedVm\nresourcemanager\nretryable\nru\nrunbook\nrunbook's\nrunbooks\nrunnable\nruntimeId\nruntimes\nsa\nSafemode\nSA's\nSAs\nscaleup\nscheduler's\nschedulers\nSDK\nServerless\nserviceaccounts\nserviceAgent\nserviceId\nservicenetworking\nshouldnot\nSIGKILL\nskanzhelev\nSLA\nSLO\nSplunk\nSSD\nSSL\nstackdriver\nStackdriver\nstateful\nStateful\nStatsd\nStatsD\nstderr\nstdout\nstockout\nstr\nstringification\nsubagent\nsubagents\nsubclassed\nsubclasses\nsubmodules\nsubnet\nSubnet\nsubnets\nsubnetwork\nSubnetwork\nsubnetworks\nsubpackages\nsubprocess\nsubqueries\nsupernet\nsys\nsyslog\nsyslogs\nsystemd\ntargetResources\nTBD\nTCP\nTerraform\ntestfiles\ntestproject\ntestuser\ntimeframe\ntmp\ntmux\ntoml\nTP\nTPC\nTPU\nTruthy\nTypcial\nudp\nUDP\nUI\nunacked\nUnacked\nundeliverable\nunhandled\nunittest\nunknowd\nuntrusted\nupdateing\nupgradability\nupgradable\nuptime\nUptime\nuri\nURI\nurl\nURLMap\nurls\nuseExternalIp\nusuage\nutil\nUtil\nutils\nverifications\nvm\nVM\nvmCanIpForward\nvmExternalIpAccess\nVM's\nVMs\nvpc\nVPC\nVpcFirewallRule\nwebhook\nwhitespaces\nworklaods\nwriteable\nXLB\nXSS\nxz\nyaml\nYaml\n"
  },
  {
    "path": ".pylintrc",
    "content": "# This Pylint rcfile contains a best-effort configuration to uphold the\n# best-practices and style described in the Google Python style guide:\n#   https://google.github.io/styleguide/pyguide.html\n#\n# Its canonical open-source location is:\n#   https://google.github.io/styleguide/pylintrc\n\n[MASTER]\n\n# Add files or directories. They should be base names, not\n# paths.\nignore=third_party\n\n# Files or directories matching the regex patterns are skipped. The regex\n# matches against base names, not paths.\nignore-patterns=\n\n# Add files or directories matching the regex patterns to the ignore-list.\n# The regex matches against paths.\nignore-paths=cookiecutter-gcpdiag-rule/.*\n\n# Pickle collected data for later comparisons.\npersistent=no\n\n# List of plugins (as comma separated values of python modules names) to load,\n# usually to register additional checkers.\nload-plugins=\n\n# Use multiple processes to speed up Pylint.\njobs=4\n\n# Allow loading of arbitrary C extensions. Extensions are imported into the\n# active Python interpreter and may run arbitrary code.\nunsafe-load-any-extension=no\n\n\n[MESSAGES CONTROL]\n\n# Only show warnings with the listed confidence levels. Leave empty to show\n# all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED\nconfidence=\n\n# Enable the message, report, category or checker with the given id(s). You can\n# either give multiple identifier separated by comma (,) or put this option\n# multiple time (only on the command line, not in the configuration file where\n# it should appear only once). See also the \"--disable\" option for examples.\n#enable=\n\n# Disable the message, report, category or checker with the given id(s). You\n# can either give multiple identifiers separated by comma (,) or put this\n# option multiple times (only on the command line, not in the configuration\n# file where it should appear only once).You can also use \"--disable=all\" to\n# disable everything first and then reenable specific checks. For example, if\n# you want to run only the similarities checker, you can use \"--disable=all\n# --enable=similarities\". If you want to run only the classes checker, but have\n# no Warning level messages displayed, use\"--disable=all --enable=classes\n# --disable=W\"\ndisable=abstract-method,\n        apply-builtin,\n        arguments-differ,\n        attribute-defined-outside-init,\n        backtick,\n        bad-option-value,\n        basestring-builtin,\n        buffer-builtin,\n        c-extension-no-member,\n        consider-using-enumerate,\n        cmp-builtin,\n        cmp-method,\n        coerce-builtin,\n        coerce-method,\n        consider-using-f-string,\n        delslice-method,\n        div-method,\n        duplicate-code,\n        eq-without-hash,\n        execfile-builtin,\n        file-builtin,\n        filter-builtin-not-iterating,\n        fixme,\n        getslice-method,\n        global-statement,\n        hex-method,\n        idiv-method,\n        implicit-str-concat-in-sequence,\n        import-error,\n        import-self,\n        import-star-module-level,\n        inconsistent-return-statements,\n        input-builtin,\n        intern-builtin,\n        invalid-str-codec,\n        locally-disabled,\n        long-builtin,\n        long-suffix,\n        map-builtin-not-iterating,\n        misplaced-comparison-constant,\n        missing-function-docstring,\n        metaclass-assignment,\n        next-method-called,\n        next-method-defined,\n        no-absolute-import,\n        no-else-break,\n        no-else-continue,\n        no-else-raise,\n        no-else-return,\n        no-init,  # added\n        no-member,\n        no-name-in-module,\n        no-self-use,\n        nonzero-method,\n        oct-method,\n        old-division,\n        old-ne-operator,\n        old-octal-literal,\n        old-raise-syntax,\n        parameter-unpacking,\n        print-statement,\n        raising-string,\n        range-builtin-not-iterating,\n        raw_input-builtin,\n        rdiv-method,\n        reduce-builtin,\n        relative-import,\n        reload-builtin,\n        round-builtin,\n        setslice-method,\n        signature-differs,\n\tspelling,\n        standarderror-builtin,\n        suppressed-message,\n        sys-max-int,\n        too-few-public-methods,\n        too-many-ancestors,\n        too-many-arguments,\n        too-many-boolean-expressions,\n        too-many-branches,\n        too-many-instance-attributes,\n        too-many-locals,\n        too-many-nested-blocks,\n        too-many-public-methods,\n        too-many-return-statements,\n        too-many-statements,\n        trailing-newlines,\n        unichr-builtin,\n        unicode-builtin,\n        unnecessary-pass,\n        unpacking-in-except,\n        useless-else-on-loop,\n        useless-object-inheritance,\n        useless-suppression,\n        using-cmp-argument,\n        wrong-import-order,\n        xrange-builtin,\n        zip-builtin-not-iterating,\n\n\n[REPORTS]\n\n# Set the output format. Available formats are text, parseable, colorized, msvs\n# (visual studio) and html. You can also give a reporter class, eg\n# mypackage.mymodule.MyReporterClass.\noutput-format=text\n\n# Tells whether to display a full report or only the messages\nreports=no\n\n# Python expression which should return a note less than 10 (10 is the highest\n# note). You have access to the variables errors warning, statement which\n# respectively contain the number of errors / warnings messages and the total\n# number of statements analyzed. This is used by the global evaluation report\n# (RP0004).\nevaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10)\n\n# Template used to display messages. This is a python new-style format string\n# used to format the message information. See doc for all details\n#msg-template=\n\n\n[BASIC]\n\n# Good variable names which should always be accepted, separated by a comma\ngood-names=main,_\n\n# Bad variable names which should always be refused, separated by a comma\nbad-names=\n\n# Colon-delimited sets of names that determine each other's naming style when\n# the name regexes allow several styles.\nname-group=\n\n# Include a hint for the correct naming format with invalid-name\ninclude-naming-hint=no\n\n# List of decorators that produce properties, such as abc.abstractproperty. Add\n# to this list to register other decorators that produce valid properties.\nproperty-classes=abc.abstractproperty,cached_property.cached_property,cached_property.threaded_cached_property,cached_property.cached_property_with_ttl,cached_property.threaded_cached_property_with_ttl\n\n# Regular expression matching correct function names\nfunction-rgx=^(?:(?P<exempt>setUp|tearDown|setUpModule|tearDownModule)|(?P<camel_case>_?[A-Z][a-zA-Z0-9]*)|(?P<snake_case>_?[a-z][a-z0-9_]*))$\n\n# Regular expression matching correct variable names\nvariable-rgx=^[a-z][a-z0-9_]*$\n\n# Regular expression matching correct constant names\nconst-rgx=^(_?[A-Z][A-Z0-9_]*|__[a-z0-9_]+__|_?[a-z][a-z0-9_]*)$\n\n# Regular expression matching correct attribute names\nattr-rgx=^_{0,2}[a-z][a-z0-9_]*$\n\n# Regular expression matching correct argument names\nargument-rgx=^[a-z][a-z0-9_]*$\n\n# Regular expression matching correct class attribute names\nclass-attribute-rgx=^(_?[A-Z][A-Z0-9_]*|__[a-z0-9_]+__|_?[a-z][a-z0-9_]*)$\n\n# Regular expression matching correct inline iteration names\ninlinevar-rgx=^[a-z][a-z0-9_]*$\n\n# Regular expression matching correct class names\nclass-rgx=^_?[A-Z][a-zA-Z0-9]*$\n\n# Regular expression matching correct module names\nmodule-rgx=^(_?[a-z][a-z0-9_]*|__init__)$\n\n# Regular expression matching correct method names\nmethod-rgx=(?x)^(?:(?P<exempt>_[a-z0-9_]+__|runTest|setUp|tearDown|setUpTestCase|tearDownTestCase|setupSelf|tearDownClass|setUpClass|(test|assert)_*[A-Z0-9][a-zA-Z0-9_]*|next)|(?P<camel_case>_{0,2}[A-Z][a-zA-Z0-9_]*)|(?P<snake_case>_{0,2}[a-z][a-z0-9_]*))$\n\n# Regular expression which should only match function or class names that do\n# not require a docstring.\nno-docstring-rgx=(__.*__|main|test.*|.*test|.*Test)$\n\n# Minimum line length for functions/classes that require docstrings, shorter\n# ones are exempt.\ndocstring-min-length=10\n\n\n[TYPECHECK]\n\n# List of decorators that produce context managers, such as\n# contextlib.contextmanager. Add to this list to register other decorators that\n# produce valid context managers.\ncontextmanager-decorators=contextlib.contextmanager,contextlib2.contextmanager\n\n# Tells whether missing members accessed in mixin class should be ignored. A\n# mixin class is detected if its name ends with \"mixin\" (case insensitive).\nignore-mixin-members=yes\n\n# List of module names for which member attributes should not be checked\n# (useful for modules/projects where namespaces are manipulated during runtime\n# and thus existing member attributes cannot be deduced by static analysis. It\n# supports qualified module names, as well as Unix pattern matching.\nignored-modules=\n\n# List of class names for which member attributes should not be checked (useful\n# for classes with dynamically set attributes). This supports the use of\n# qualified names.\nignored-classes=optparse.Values,thread._local,_thread._local\n\n# List of members which are set dynamically and missed by pylint inference\n# system, and so shouldn't trigger E1101 when accessed. Python regular\n# expressions are accepted.\ngenerated-members=\n\n\n[FORMAT]\n\n# Maximum number of characters on a single line.\nmax-line-length=100\n\n# TODO(https://github.com/PyCQA/pylint/issues/3352): Direct pylint to exempt\n# lines made too long by directives to pytype.\n\n# Regexp for a line that is allowed to be longer than the limit.\nignore-long-lines=(?x)(\n  ^\\s*(\\#\\ )?<?https?://\\S+>?$|\n  ^\\s*(from\\s+\\S+\\s+)?import\\s+.+$)\n\n# Allow the body of an if to be on the same line as the test if there is no\n# else.\nsingle-line-if-stmt=yes\n\n# Maximum number of lines in a module\nmax-module-lines=99999\n\n# String used as indentation unit.  The internal Google style guide mandates 2\n# spaces.  Google's externally-published style guide says 4, consistent with\n# PEP 8.  Here, we use 2 spaces, for conformity with many open-sourced Google\n# projects (like TensorFlow).\nindent-string='  '\n\n# Number of spaces of indent required inside a hanging  or continued line.\nindent-after-paren=4\n\n# Expected format of line ending, e.g. empty (any line ending), LF or CRLF.\nexpected-line-ending-format=\n\n\n[MISCELLANEOUS]\n\n# List of note tags to take in consideration, separated by a comma.\nnotes=TODO\n\n\n[STRING]\n\n# This flag controls whether inconsistent-quotes generates a warning when the\n# character used as a quote delimiter is used inconsistently within a module.\ncheck-quote-consistency=yes\n\n\n[VARIABLES]\n\n# Tells whether we should check for unused import in __init__ files.\ninit-import=no\n\n# A regular expression matching the name of dummy variables (i.e. expectedly\n# not used).\ndummy-variables-rgx=^\\*{0,2}(_$|unused_|dummy_)\n\n# List of additional names supposed to be defined in builtins. Remember that\n# you should avoid to define new builtins when possible.\nadditional-builtins=\n\n# List of strings which can identify a callback function by name. A callback\n# name must start or end with one of those strings.\ncallbacks=cb_,_cb\n\n# List of qualified module names which can have objects that can redefine\n# builtins.\nredefining-builtins-modules=six,six.moves,past.builtins,future.builtins,functools\n\n\n[LOGGING]\n\n# Logging modules to check that the string format arguments are in logging\n# function parameter format\nlogging-modules=logging,absl.logging,tensorflow.io.logging\n\n\n[SIMILARITIES]\n\n# Minimum lines number of a similarity.\nmin-similarity-lines=4\n\n# Ignore comments when computing similarities.\nignore-comments=yes\n\n# Ignore docstrings when computing similarities.\nignore-docstrings=yes\n\n# Ignore imports when computing similarities.\nignore-imports=no\n\n\n[SPELLING]\n# run with \"make spelling\" or a command like:\n#  pip install PyEnchant\n#  pylint --disable all --enable spelling --spelling-dict en_US gcpdiag\n#\n# Spelling dictionary name. Available dictionaries: none. To make it working\n# install python-enchant package.\nspelling-dict=\n\n# List of comma separated words that should not be checked.\nspelling-ignore-words=\n\n# A path to a file that contains private dictionary; one word per line.\nspelling-private-dict-file=.pylint-dictionary.txt\n\n# Tells whether to store unknown words to indicated private dictionary in\n# --spelling-private-dict-file option instead of raising a message.\nspelling-store-unknown-words=no\n\n\n[IMPORTS]\n\n# Deprecated modules which should not be used, separated by a comma\ndeprecated-modules=regsub,\n                   TERMIOS,\n                   Bastion,\n                   rexec,\n                   sets\n\n# Create a graph of every (i.e. internal and external) dependencies in the\n# given file (report RP0402 must not be disabled)\nimport-graph=\n\n# Create a graph of external dependencies in the given file (report RP0402 must\n# not be disabled)\next-import-graph=\n\n# Create a graph of internal dependencies in the given file (report RP0402 must\n# not be disabled)\nint-import-graph=\n\n# Force import order to recognize a module as part of the standard\n# compatibility libraries.\nknown-standard-library=\n\n# Force import order to recognize a module as part of a third party library.\nknown-third-party=enchant, absl\n\n# Analyse import fallback blocks. This can be used to support both Python 2 and\n# 3 compatible code, which means that the block might have code that exists\n# only in one or another interpreter, leading to false positives when analysed.\nanalyse-fallback-blocks=no\n\n\n[CLASSES]\n\n# List of method names used to declare (i.e. assign) instance attributes.\ndefining-attr-methods=__init__,\n                      __new__,\n                      setUp\n\n# List of member names, which should be excluded from the protected access\n# warning.\nexclude-protected=_asdict,\n                  _fields,\n                  _replace,\n                  _source,\n                  _make\n\n# List of valid names for the first argument in a class method.\nvalid-classmethod-first-arg=cls,\n                            class_\n\n# List of valid names for the first argument in a metaclass class method.\nvalid-metaclass-classmethod-first-arg=mcs\n\n\n[EXCEPTIONS]\n\n# Exceptions that will emit a warning when being caught. Defaults to\n# \"Exception\"\novergeneral-exceptions=builtins.StandardError,\n                       builtins.Exception,\n                       builtins.BaseException\n\n[DESIGN]\n# Increase allowed positional arguments from default (5)\nmax-positional-arguments=8\n"
  },
  {
    "path": ".safety-policy.yml",
    "content": "security:\n  ignore-vulnerabilities:\n    # Waiting for upstream fix for CVE-2025-69872 in diskcache\n    \"86338\":\n"
  },
  {
    "path": ".style.yapf",
    "content": "[style]\nbased_on_style = google\nindent_width = 2\n"
  },
  {
    "path": ".vscode/extensions.json",
    "content": "{\n  \"recommendations\": [\n    \"ms-python.pylint\",\n    \"ms-python.mypy-type-checker\",\n    \"eeyore.yapf\"\n  ]\n}\n"
  },
  {
    "path": ".vscode/settings.json",
    "content": "{\n    \"editor.formatOnSave\": true,\n    \"editor.insertSpaces\": true,\n    \"editor.tabSize\": 2,\n    \"files.insertFinalNewline\": true,\n    \"files.trimTrailingWhitespace\": true,\n    \"[python]\": {\n        \"editor.defaultFormatter\": \"eeyore.yapf\",\n        \"editor.codeActionsOnSave\": {\n            \"source.organizeImports\": \"always\"\n        },\n    },\n    \"pylint.severity\": {\n        \"refactor\": \"Warning\",\n    },\n    \"mypy-type-checker.args\": [\n        \"--follow-imports=silent\",\n        \"--ignore-missing-imports\",\n        \"--show-column-numbers\",\n        \"--no-pretty\",\n        \"--scripts-are-modules\"\n    ],\n    \"python.terminal.activateEnvInCurrentTerminal\": true,\n    \"python.testing.pytestArgs\": [\n        \"gcpdiag\"\n    ],\n    \"python.testing.unittestEnabled\": false,\n    \"python.testing.pytestEnabled\": true,\n}\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "\n# Changelog\n\n## 0.79 (2025-05-27)\n\n### New Lints\n\n- lb/bp/2025\\_003: new rule: lint rule for best practices for load balancer backend service connection draining setting.\n- lb/bp/2025\\_002: new rule: Lint rule for backend service timeout best practice on load balancer.\n- interconnect/warn/2025\\_001: interconnect rule: check interconnect MTU mismatch\n\n### New Runbooks\n\n- interconnect/bgp-down-flap: interconnect BGP down flap runbook\n- gce/vm-creation: \\[New Runbook\\] GCE VM Creation runbook\n- gce/guestos-boot-up: \\[New Runbook\\] Guest OS boot-up issues\n\n### New Queries\n\n- orgpolicy.\\_get\\_available\\_org\\_constraints: list all the org constraints available for a particular resource. Args: resource\\_id: The resource ID. resource\\_type: The resource type (project or organization). Returns: A list of available org policy constraints. Raises: utils.GcpApiError: on API errors.\n- billing.get\\_billing\\_info: Get Billing Information for a project, caching the result.\n- orgpolicy.get\\_all\\_project\\_org\\_policies: list all the org policies set for a particular resource. Args: project\\_id: The project ID. Returns: A dictionary of PolicyConstraint objects, keyed by constraint name. Raises: utils.GcpApiError: on API errors.\n- network.get\\_router\\_by\\_name\n\n### New Features\n\n- Implement \\--test-release flag in gcpdiag docker\n- Improved output message quality for all runbooks.\n- Add Bundle execution usage details to internal \\+ external docs\n- Adding exceptions in constructing API endpoints for different services.\n- Add markdownlint precommit and graphviz dependencies\n- Add ossf scorecard Github Action and update pre-commit hooks\n\n### Fixes\n\n- Update `job_id` parameter.\n- Update service name parameter.\n- Update output messages for interconnect and dataproc runbooks.\n- Update `cluster_name` parameter.\n- Disambiguate `name` parameter for GKE and GCF runbooks; fix GCF failed deployments template bug.\n- Update dataflow/dataproc jinja templates.\n- \\[Bundles\\] Fix missing `runbook_name` error.\n- \\[gcpdiag runbook cli\\] Fix missing json report error.\n- Fix missing import errors.\n- Fix `report.run_start_time` error.\n- Update pipenv to use the latest version to fix import errors.\n- Update Github Actions workflow to use a newer python version to fix tests.\n- Create exception for missing runbook parameters.\n- Update `README.md`.\n- Fix dataproc runbook parameter bug.\n- Improve Runbooks Response handling.\n- Use the diagnostic engines runbook loader for tests.\n- Update ops agent onboarding parameters.\n- Update artifact config.\n- Update artifact upload version.\n- Use scope instead of region wording in the unhealthy backends runbook.\n- Fix ossf scorecard action filename in config; re-enable pylint now that sub dependency setuptools is fixed ([https://github.com/pypa/setuptools/issues/4892\\#issuecomment-2740696126](https://github.com/pypa/setuptools/issues/4892#issuecomment-2740696126)).\n- Migrate info logs to debug logs for messages with PII / SPII.\n- Disable py lint.\n- Deprecate unused gh-pages github action ([https://github.com/GoogleCloudPlatform/gcpdiag/actions/runs/13902316282/job/38976483921](https://github.com/GoogleCloudPlatform/gcpdiag/actions/runs/13902316282/job/38976483921)).\n- Improve the message when HC logs are not enabled.\n- github: Bump jinja2 from 3.1.5 to 3.1.6.\n\n## 0.78 (2025-03-04)\n\n#### New Lints\n\ngke/warn/2025\\_001: new rule: GKE external LB services are successfully created without encountering IP allocation failures due to external IPv6 subnet configurations.\nasm/warn/2025\\_002: new rule: Upstream connection established successfully with no protocol errors\nasm/warn/2025\\_001: new rule: ASM: Envoy doesn't report connection failure\ngke/err/2025\\_001: GKE cluster complies with the serial port logging organization policy.\n\n#### New Runbooks\n\ngcf/failed-deployments: Cloud Run Functions runbook to assist users to check reasons for failed deployments of Gen2 cloud functions\nnat/public-nat-ip-allocation-failed: public nat ip allocation failed runbook\ndataproc/spark-job-failures: Dataproc Spark Job Runbook\nlb/latency: new runbook: Load Balancer Latency v1\n\n#### New Queries\n\ngce.get\\_global\\_operations: Returns global operations object in the given project id.\ncloudasset.search\\_all\\_resources: Searches all cloud asset inventory in the project.\nlb.get\\_load\\_balancer\\_type\\_name: Returns a human-readable name for the given load balancer type.\ndataproc.list\\_auto\\_scaling\\_policies: Lists all autoscaling policies in the given project and region.\n\n### New Features\n\npre-commit codespell check eliminate typos in the repositories\nStep class attributes interpolation in step names\nCheck deprecated parameters in runbooks\nMigrate repository to python 3.12\noutput/api\\_output.py: implement api output module\nCreate threading.local() in op.py for data isolation.\n\n#### Fixes\n\nUpdate gke/err/2024\\_003 to check for `container.defaultNodeServiceAccount` role\nUpdate formatting/style of all runbooks.\nfix runbook functionality to properly detect pod IP exhaustion and node IP exhaustion\nExplicitly handle HTTP 401 errors - Add step_error for exceptions caused by GcpApiError - Handle edge case where\nImprove error handling for iam.roles()\n\n## 0.77 (2024-11-13)\n\n#### New Lint Rules\n\n- gke/err/2024\\_002: gke webhook failure endpoints not available\n- gke/warn/2024\\_007: GKE cluster in a dual-stack with external IPv6 access\n\n#### New Runbooks\n\n- lb/ssl-certificate: Runbook for troubleshooting LB SSL certificates issues\n- gke/node-unavailablity: Identifies the reasons for a GKE node being unavailable\n\n#### New Queries\n\n- gke.get\\_cluster: Retrieve a single GKE cluster using its project, region, and cluster name.\n- dns.find\\_dns\\_records: Resolves DNS records for a given domain and returns a set of IP addresses.\n- lb.get\\_ssl\\_certifcate: Returns object matching certificate name and region\n- lb.get\\_target\\_https\\_proxies: Retrieves the list of all TargetHttpProxy resources, regional and global, available to the specified project.\n- lb.get\\_forwarding\\_rule: Returns the specified ForwardingRule resource.\n\n#### Enhancements\n\n- Functionality to auto suggest correct runbook names for misspelled runbooks\n- Updated docker images to ubuntu:24.04 (python 3.12)\n- Updated devcontainer to python 3.12\n- Migrated crm queries from v1 to v3\n- gce/vm-performance: Added PD performance health check\n- gce/vm-performance: Implemented disk average\\_io\\_latency check\n- Removed apis\\_utils.batch\\_execute\\_all call from orgpolicy query\n- Enabled gcpdiag.dev page indexing\n- Reduced API retries to 3 attempts\n- Improved START\\_TIME\\_UTC inconsistency & Error parsing date string fix\n- pubsub/pull-subscription-delivery: removed cold cache checks\n- Add functionality to disable query caching for edge cases\n- Improve error handling within gcpdiag library to raise errors for handling rather than exiting.\n\n#### Fixes\n\n- lb.get\\_backend\\_service: Improved calls to fetch global backend\n- Added project_id parameters for the runbook tests without  valid project ids\n\n#### Deprecation\n\n- Flag `--project`: Full deprecation in **runbook command** to allow multiple project ids/numbers to be specified via `--parameter`\n\n## 0.76 (2024-10-1)\n\n#### New Lint Rules\n\n- dataproc/warn/2024\\_005: Investigates if Data Fusion version is compatible with Dataproc version from the CDAP Preferences settings\n\n#### New Runbooks\n\n- pubsub/pull-subscription-delivery: Investigates common Cloud Pub/Sub pull delivery issues related to delivery latency, quotas, pull rate and throughput rate\n\n#### New Queries\n\n- pubsub.get\\_subscription: Retrieves a single pubsub subscription resource\n- apis.is\\_all\\_enabled: Check if a list of services are enabled on a given project\n- gke.get\\_release\\_schedule: Fetch GKE cluster release schedule\n\n#### Enhancements\n\n- `make new-rule`: A make rule with a [cookiecutter](https://www.cookiecutter.io/) recipe to generate new lint rule templates\n- gce.get\\_gce\\_public\\_images: Improved gce\\_stub query to correctly fetch all image licenses during test.\n- Runbooks metrics generation for Google Internal Users\n- New flag `--reason`: argument primarily used by Google internal users to specify rational for executing the tool\n- Bundles: A runbook feature to allow execution of a collection of steps\n- Runbook operation (op.add_metadata) to create or retrieve metadata related to steps\n\n#### Fixes\n\n- Enforce explicit parameter configuration in gce generalized steps.\n- dataflow/dataflow-permission: Refactored runbook to `dataflow/job-permission`\n- dataflow/bp/2024\\_002: Fixed resource filtering bug for forwarding rule (internal LB)\n- gce/vm-performance: Fixed disk performance benchmark lookup\n\n#### Deprecation\n\n- apis\\_utils.batch\\_list\\_all: Replaced by apis\\utils.multi\\_list\\_all\n- Flag `--project`: Soft deprecation in **runbook command** to allow multiple project ids/numbers to be specified via `--parameter`\n- Deprecated pre-commit hook gke-eol-file\n\n## 0.75 (2024-9-2)\n\n#### New Lint Rules\n\n- bigquery/WARN/2024\\_005: Checks BigQuery table does not exceed number of partition modifications\n  to a column partitioned table\n- bigquery/WARN/2024\\_006: Checks BigQuery job does not exceed tabledata.list bytes\n  per second per project\n- dataflow/ERR/2024\\_006: Checks Dataflow job does not fail during execution due\n  to resource exhaustion in zone\n- datafusion/WARN\\_2024\\_004: Checks Data Fusion version is compatible with Dataproc\n  version from the corresponding compute profiles\n- gke/WARN/2024\\_003: Checks Ingress traffic is successful if service is correctly mapped\n- gke/WARN/2024\\_004: Checks Ingress is successful if backendconfig crd is correctly mapped\n- gke/WARN/2024\\_005: Checks GKE Ingress successfully routes external traffic to NodePort service\n- gce/BP_EXT/2024\\_002: Calculate a GCE VM's IOPS and Throughput Limits\n\n#### New Runbooks\n\n- lb/unhealthy-backends: Diagnose Unhealthy Backends of a Load Balancer\n- gke/resource-quota: Diagnose quota related issues related to gke clusters.\n- gce/vm-performance: Diagnose GCE VM performance\n- gke/image-pull: Diagnose Image Pull Failures related GKE clusters.\n- gke/node-auto-repair: RCA Node auto-repaired incidents\n- gke/gke-ip-masq-standard: Diagnose IP Masquerading issues on GKE clusters\n- dataflow/dataflow-permission: Diagnose Permission required for cluster creation and operation\n\n#### New Query\n\n- lb.get\\_backend\\_service: Fetch instances matching compute backend service name and/or region\n- lb.get\\_backend\\_service_health: Fetch compute backend service health data\n- generic\\_api/datafusion: Re-implementation of how to call and test generic apis\n\n#### Enhancements\n\n- cloudrun/service-deployment: 2 additional checks for image not found and image permissions failure\n- bigquery/WARN/2022\\_001: Updated lint rule  diagnostic steps documentation\n- Implement ignorecase for input parameters\n- gce/ssh and gce/serial-log-analyzer: Include Auth failure checks in  runbooks\n- Updated GKE version End of Life tracker\n- New API Stub for Recommender API\n\n#### Fixes\n\n- gce/vm-termination: Made vm name and zone mandatory fields\n- Updated dependencies:\n  - aiohttp: 3.9.5 -> 3.10.3\n  - attrs: 23.2.0 -> 24.2.0\n  - cachetools: 5.3.3 -> 5.4.0\n  - certifi: 2024.6.2 -> 2024.7.4\n  - exceptiongroup: 1.2.1 -> 1.2.2\n  - google-api-python-client: 2.134.0 -> 2.141.0\n  - google-auth: 2.30.0 -> 2.33.0\n  - google-auth-oauthlib: 1.2.0 -> 1.2.1\n  - importlib-resources: 6.4.0 -> 6.4.2\n  - protobuf: 5.27.2 -> 5.27.3\n  - pyyaml: 6.0.1 -> 6.0.2\n  - soupsieve: 2.5 -> 2.6\n- Fix lint output and GCE query functions for multi-region resources\n- Removed deprecated option skip\\_delete from TF code\n\n## 0.74 (2024-7-10)\n\n#### Fixes\n\n- Re-roll of v0.72 after correcting pip module issue with the docker image build\n\n#### New Lint Rule\n\ndatafusion/warn\\_2024\\_002 Data Fusion instance is in a running state\n\n#### New Runbook\n\ndataproc/cluster\\_creation Dataproc cluster creation diagnostic tree\n\n## 0.73 (2024-7-8)\n\n#### New Feature\n\n- Added search command to scale the docstrings for lint rules or runbooks to\n  match keywords\n- added runbook check step outcome: step\\_ok, step\\_failed, etc.\n- Added a zonal endpoint in osconfig library. It returns inventories for all VMs under a certain zone\n\n#### Fixes\n\n- Create runbook report regardless of the number of failed steps\n- Improve introductory error message for new runbooks\n- Update lint command API return value for display of resources in each rule\n- General spelling corrections\n- Add documentation for runbook operator methods\n- Remove unneeded google path reference in loading template block contenta\n- Update runbook name validation\n- Handle when gcloud command is not installed when running runbook generator\n- Allow to query logs for each test data separately in logs\\_stub\n- Update GKE EOL date\n- Relax constraints on location of end steps in runbook\n- Update pip dependencies; security fix for pdoc\n- Added monitoring to the list of supported products runbook steps\n- generic\\_api/datafusion apis.make\\_request() re-implementation\n- Update and improve runbook error handling\n\n#### New Lint Rule\n\n- gke/err\\_2024\\_001\\_psa\\_violations Checking for no Pod Security Admission violations in the project\n- bigquery/warn\\_2024\\_002\\_invalid\\_external\\_connection BigQuery external\n  connection with Cloud SQL does not fail\n- pubsub/err\\_2024\\_003\\_snapshot\\_creation\\_fails snapshot creation fails if\n  backlog is too old\n- pubsub/err\\_2024\\_002\\_vpc\\_sc\\_new\\_subs\\_create\\_policy\\_violated check for\n  pubsub error due to organization policy\n- bigquery/warn\\_2024\\_0003 BigQuery job does not fail due to Maximum API requests per user per method exceeded\n\n#### New Runbook\n\n- gce/ops\\_agent Ops Agent Onboarding runbook\n- gcp/serial\\_log\\_analyzer runbook to analyse known issues logged into Serial Console logs\n- vertex/workbench\\_instance\\_stuck\\_in\\_provisioning Runbook to Troubleshoot Issue: Vertex AI Workbench Instance Stuck in Provisioning State\n- cloudrun/service\\_deployment Cloud Run deployment runbook\n- gke/ip\\_exhaustion gke ip exhaustion runbook\n- dataflow/failed\\_streaming\\_pipeline Diagnostic checks for failed Dataflow Streaming Pipelines\n- nat/out\\_of\\_resources vm external ip connectivity runbook\n\n## 0.72 (2024-5-30)\n\n#### Fixes\n\n- update pyinstaller to include runbook command and templates in x20 binary\n  build\n- Update pylint configuration files\n- Update GKE EOL file\n- fix case sensitive runbook bug with bool value interpretation\n- Revert \"new rule: datafusion\\_cdap\\_api\\_call\\_implementation\"\n- Revert \"new rule:check scale down disabled for the compute profiles in the\n  datafusion instance\n- Update pipenv dependencies.\n- pipenv upgrade idna and aiohttp per reported security vulnerabilities\n- Removed cloud resource manager dependency from gce/bp\\_2024\\_001 and\n  gce/bp\\_2024\\_002 Rules. Improved error reporting.\n- default universe\\_domain, credentials for runbook API, handle template path\n  for runbook from API service\n- fix title for BP\\_EXT/2024\\_001.md conflict with BP/2024\\_001.md\n- GCE lint legacy monitoring and agent: Report ok when VM manager (os config\n  API) does not detect legacy agent packages on the GCE VM.\n\n#### New Features\n\n- added spell check and corrections of existing misspelled words\n\n#### New Runbook\n\n- new runbook: GKE logs\n- new runbook: GKE cluster autoscaler\n\n#### New Lint Rule\n\n- dataflow/err\\_2024\\_004\\_missing\\_gce\\_permission\\_temp\\_bucket The Dataflow\n  job has the necessary GCS permissions for the temporary bucket\n- gce/err\\_2024\\_003\\_dataflow\\_write\\_truncate\\_unbounded streaming dataflow\n  jobs are not using write\\_truncate when working with unbounded pcollections\n- gce/err\\_2024\\_004\\_ops\\_agent In additional to access scope and iam roles,\n  the monitoring API and logging API should also be enabled on the project, for\n  Ops Agent to send metrics and logs respectively.\n- gce/err\\_2024\\_004\\_ops\\_agent The rules verifies that the Ops Agent is\n  installed on a GCE VM and is sending logs and metrics to gcloud backend.\n- gke/warn\\_2024\\_002\\_ksa\\_exceeded GKE KSA exceeded 3000 in WI enabled\n  clusters.\n\n## 0.71 (2024-4-17)\n\n#### New lint rules\n\n- datafusion/err\\_2024\\_001\\_delete\\_operation\\_failing datafusion\n  deletion operation\n- gce/err\\_2024\\_003\\_vm\\_secure\\_boot\\_failures GCE Lint rule for boot\n  failures for Shielded VM\n- gce/bp\\_2024\\_001\\_legacy\\_monitoring\\_agent GCE Legacy Monitoring Agent\n  is not installed\n- gce/bp\\_2024\\_002\\_legacy\\_logging\\_agent GCE Legacy Logging Agent is not\n  be installed\n- gce/bp\\_ext\\_2024\\_001\\_no\\_public\\_ip.py GCE SSH in Browser: SSH Button\n  Disabled\n- pubsub/bp\\_2024\\_001\\_ouma\\_less\\_one\\_day Oldest Unacked Message Age\n  Value less than 24 hours\n- bigquery/err\\_2024\\_001\\_query\\_too\\_complex query is too complex\n- bigquery/warn\\_2024\\_001\\_imports\\_or\\_query\\_appends\\_per\\_table table\n  exceeds limit for imports or query appends\n\n#### New query\n\n- osconfig\n\n  \"OS management tools that can be used for patch management, patch compliance,\n  and configuration management on VM instances.\"\n    <https://cloud.google.com/compute/docs/osconfig/rest>\n\n#### New runbook\n\n- gce/vm\\_termination assist investigating underlying reasons behind\n  termination or reboot\n- gke/cluster\\_autoscaler GKE Cluster autoscaler error messages check\n\n#### New features\n\n- Add cache bypass option for runbook steps\n- Add runbook starter code generator; updates to code generator\n- Add API for runbook command\n\n#### Fixes\n\n- Add mock data for datafusion API testing\n- Correct runbook documentation generation output\n- Improve runbook operator functions usage\n- Add dataflow and other components to supported runbook component list\n- Remove duplicate vm\\_termination.py script\n- Add jinja templates to docker image on cloud shell\n- correct argv passed for parsing in runbook command\n- Adding pipenv and git checks to help beginners get started easily on runbook\n  generator\n- update idna pipenv CVE-2024-3651 Moderate severity\n- SSH runbook enhancements\n- runbook fixes - catch missing template errors, include project id when no\n  parameters\n\n## 0.70 (2024-3-27)\n\n#### New lint rules\n\n- pubsub/ERR\\_2024\\_001 bq subscription table not found\n- composer/WARN\\_2024\\_001 low scheduler cpu usage\n- datafusion/WARN\\_2024\\_001 data fusion version\n- composer/WARN\\_2024\\_002 worker pod eviction\n- gce/ERR\\_2024\\_002 performance\n- notebooks/ERR\\_2024\\_001 executor explicit project permissions\n- dataflow/WARN\\_2024\\_001 dataflow operation ongoing\n- dataflow/ERR\\_2024\\_001 dataflow gce quotas\n- dataflow/WARN\\_2024\\_002 dataflow streaming appliance commit failed\n- dataflow/ERR\\_2024\\_002 dataflow key commit\n- gke/WARN\\_2024\\_001 cluster nap limits prevent autoscaling\n\n#### New query\n\n- datafusion\\_cdap API query implementation - provides CDAP profile metadata\n\n#### Fixes\n\n- Updated pipenv packages, Pipenv.lock dependencies\n- Updated github action workflow versions to stop warnings about node v10 and v10\n- Refactor Runbook: Implemented a modular, class-based design to facilitate a\n  more configurable method for tree construction.\n\n## 0.69 (2024-2-21)\n\n#### New feature\n\n- add universe\\_domain for Trusted Partner Client (TPC)\n\n#### New rules\n\n- asm/WARN\\_2024\\_001 Webhook failed\n- lb/BP\\_2024\\_002 Check if global access is on for the regional iLB\n- pubsub/WARN\\_2024\\_003 Pub/Sub rule: CMEK - Topic Permissions\n- dataproc/WARN\\_2024\\_001 dataproc check hdfs safemode status\n- dataproc/WARN\\_2024\\_002 dataproc hdfs write issues\n- gce/ERR\\_2024\\_001 GCE rule:Snapshot creation rate limit\n- lb/BP\\_2024\\_001 session affinity enabled on load balancer\n- pubsub/WARN\\_2024\\_002 GCS subscription has the apt permissions\n- dataflow/ERR\\_2023\\_010 missing required field\n- pubsub/WARN\\_2024\\_001 DLQ Subscription has apt permissions\n\n#### Fixes\n\n- Update Pull Request and Merge to only run when an update was committed\n- Creating a github action Workflow to automatically update the gke/eol.yaml file\n- Update gke/eol.yaml file\n\n## 0.68 (2024-1-17)\n\n#### New Rules\n\n- gke/bp\\_2023\\_002 Gke cluster is a private cluster\n- composer/err\\_2023\\_002 Use allowed IP ranges to create Private IP Cluster\n- compoer/err\\_2023\\_004 DAG is detected as zombie\n- composer/err\\_2023\\_003 DAG timeout issue\n- composer/err\\_2023\\_005 Check NAT config for environment deletion fail\n- bigquery/err\\_2023\\_009 BigQuery job not failed due to Schedule query with multiple DML\n- gce/warn\\_2023\\_002 Serial logs don’t contain out-of-memory message due to airflow task run\n- dataflow/err\\_2023\\_011 Streaming insert mismatch column type\n- dataflow/err\\_2023\\_012 Spanner OOM\n- dataflow/err\\_2023\\_013 Spanner deadline error\n- pubsub/warn\\_2023\\_006 Pubsub push subscriptions have no push errors\n- dataproc/err\\_2023\\_008 Dataproc cluster disk space issues check and web page\n- composer/err\\_2024\\_001 Composer not failed due to 'no error was surfaced' error\n- lb/bp\\_2023\\_002 check that logging is enabled on health checks for load balancer backend\n  services\n- vpc/warn\\_2024\\_001 Check Unused Reserved IP addresses\n- iam/sec\\_2024\\_001 Detect unused service accounts\n\n#### New module\n\n- Add billing module query and lint rules\n\n#### Fixes\n\n- Skip notebook instances query if API is not enabled\n- Update MD formatting for gke/WARN/2023\\_004.md\n- Update conflicting credentials import name\n- Updating EOL rule snapshot to match new schedule\n- Update gke eol.yaml\n- add str repr of RuleModule for more info in exceptions loading rules\n- fixed bug in billing change 1673236 - added checks for correct permissions\n- fixed bug in change id 2113602 - updated condition for check NAT config rule\n\n#### Features and Improvements\n\n- Improved report generation for runbook\n- refactor lint.command.run to return a dict when run from API service\n- Add set\\_credentials() method\n- Clear credentials used in API service after request\n- Updated gke eol.yaml\n- Added the id label to filter the Dataflow jobs using the job i\n\n## 0.67 (2023-11-17)\n\n#### Fixes\n\n- Updating GKE EOL file and snapshot\n- Rewording message triggering internal leak test\n\n#### New Command and Rules\n\n- Runbook POC with ssh runbook and terraform scripts\n\n#### New rules\n\n- GKE cluster has workload identity enabled\n- Splunk job uses valid certificate\n\n## 0.66 (2023-10-13)\n\n#### Fixes\n\n- Handle app failure when project policy contains cross-project service accounts\n- Update the version skew for modern versions of Kubernetes. <https://kubernetes.io/blog/2023/08/15/kubernetes-v1-28-release/#changes-to-supported-skew-between-control-plane-and-node-versions>\n- Updating working and typos in multiple files\n- Update gke test snapshot.\n- added content in md file for rule apigee\\_err\\_2023\\_003\n\n#### New rules\n\n- bigquery/ERR/2023\\_008: user not authorized to perform this action\n- pubsub/WARN/2023\\_005: bigquery subscription has apt permissions\n- asm/ERR/2023\\_001, asm/ERR/2023\\_002: Anthos Service mesh\n- gke/BP/2022\\_003: Make GKE EOL detection more robust and less hardcoded\n- gke/WARN/2023\\_004: Add a check for too low `maxPodsPerNode` number\n- gke/ERR/2023\\_012: missing memory request for hpa\n- bigquery/ERR/2023\\_006: bigquery policy does not belong to user\n- pubsub/WARN/2023\\_00[14]: no subscription without attached topic\n- composer/WARN/2023\\_009: Cloud Composer Intermittent Task Failure during Scheduling\n\n#### New module\n\n- Anthos Service mash\n\n## 0.65 (2023-09-18)\n\n#### New rules\n\n- apigee/ERR/2023\\_006: Multiple migs for multiple regions\n- vertex/WARN/2023\\_001: New product: Vertex AI / new rule: check featurestores state\n- pubsub/WARN/2023\\_001: Check that the project does not have a detached subscription\n- gke/ERR/2023\\_011: GKE Metadata Server isn’t reporting errors for pod IP not found\n- dataflow/WARN/2023\\_006: Dataflow job stuck in canceling state for more than half hour\n- vpc/WARN/2023\\_001: Private service access not exporting custom routes\n- interconnect/WARN/2023\\_001: Interconnect attachment is not using dataplane v1\n- interconnect/WARN/2023\\_002: Checking if the VLAN attachment is in a non functional state\n- pubsub/WARN/2023\\_003: Topic has at least one attached subscription\n- bigquery/ERR/2023\\_007: Data Transfer Service Agent exists and has the required roles\n- bigquery/WARN/2023\\_002: BigQuery subscriptions have deadletter topic attached\n- dataproc/ERR/2023\\_007: Enough resources in region for dataproc cluster creation\n- interconnect/WARN/2023\\_003: Interconnect link is under maintenance\n\n#### Fixes\n\n- Account for GKE zones in vpc/WARN/2023\\_002\n- Refactor GCE label reference\n- Update pipenv\n- Fix typing Union in notebooks\n- Add prefetch\\_rule to notebooks rules\n- Use more descriptive name for get-subscriptions method and account for deleted topics\n\n## 0.64 (2023-08-14)\n\n#### New rules\n\n- gke/bp\\_2023\\_005\\_gateway\\_crd: manually installed gateway crd GKE\n- gke/err\\_2023\\_010\\_nodelocal\\_timeout: nodelocal dns timeout GKE\n- gke/err\\_2023\\_009\\_missing\\_cpu\\_req: Missing CPU request GKE\n- gke/err\\_2023\\_008\\_crashloopbackoff: gke cluster had pods in crashloopbackoff error GKE\n- gke/err\\_2023\\_006\\_gw\\_controller\\_annotation\\_error: GKE Gateway controller reporting misconfigured annotations in Gateway resource GKE\n- gke/err\\_2023\\_007\\_gw\\_controller\\_http\\_route\\_misconfig: GKE Gateway controller reporting invalid HTTPRoute for Gateway GKE\n- dataflow/bp\\_2023\\_001\\_dataflow\\_supported\\_sdk\\_version\\_check: Dataflow job using supported sdk version dataflow\n- cloudsql/warn\\_2023\\_003\\_high\\_mem\\_usage: Cloud SQL instance's memory usage does not exceed 90%\n- cloudsql/bp\\_ext\\_2023\\_003\\_auto\\_storage\\_increases: Cloud SQL instance autoscaling is enabled\n- gke/warn\\_2023\\_003\\_monitoring\\_api\\_disabled: Cloud Monitoring API enabled when GKE monitoring is enabled\n\n#### Fixes\n\n- Remove references to deprecated oauth option in docs b/281956212\n- Update diagram titles to remove “gcp doctor” reference\n- Fix wrong cloudsql/WARN/2023\\_003 MQL query cloudsql (external submission)\n- gcs/bp\\_2022\\_001\\_bucket\\_access\\_uniform: skip cloud build and dataproc buckets issue/61 b/293951741\n- gce/warn\\_2022\\_001\\_iap\\_tcp\\_forwarding: skip check for dataproc cluster vm instances\n- gce/bp\\_2021\\_001\\_serial\\_logging\\_enabled: skip check for dataproc cluster vm instances\n- gke/bp\\_2022\\_003\\_cluster\\_eol: end of life version list dates updated\n\n## 0.63 (2023-07-10)\n\n#### Fixes\n\n- Fix futures timeout error.\n\n## 0.62 (2023-07-10)\n\n#### New rules\n\n- cloudsql/SEC/2023\\_001: Cloud SQL is not publicly accessible (github #73)\n- dataproc/ERR/2023\\_002: Orphaned YARN application\n- dataflow/ERR/2023\\_007: Streaming Dataflow doesn't report being stuck because of firewall rules\n\n#### Fixes\n\n- Fix GCE API being erroneously required to run gcpdiag\n- Fix locking issues in multi-threaded code\n- Improve caching of API exceptions\n\n## 0.61 (2023-06-30)\n\n#### Fixes\n\n- Fix attribute error on dnssec API call\n\n## 0.60 (2023-06-29)\n\n#### New rules\n\n- apigee/ERR/2023\\_003: Private Google Access (PGA) for subnet of Managed Instance Group is enabled\n- apigee/ERR/2023\\_004: Service Networking API is enabled and SA account has the required role\n- apigee/ERR/2023\\_005: External Load Balancer (XLB) is able to connect to the MIG\n- bigquery/ERR/2023\\_001: Jobs called via the API are all found\n- bigquery/ERR/2023\\_002: BigQuery hasn't reported any unknown datasets\n- bigquery/ERR/2023\\_003: BigQuery query job do not encounter resource exceeded error\n- bigquery/ERR/2023\\_004: BigQuery query job do not encounter dml concurrency issue\n- bigquery/ERR/2023\\_005: Scheduled query not failing due to outdated credentials\n- bigquery/WARN/2023\\_003: BigQuery query job does not fail with too many output columns error\n- bigquery/WARN/2023\\_004: BigQuery CMEK-related operations do not fail due to missing permissions\n- bigquery/WARN/2023\\_005: No errors querying wildcard tables\n- cloudsql/BP/2023\\_001: Cloud SQL is not assigned Public IP (github #65)\n- cloudsql/BP/2023\\_002: Cloud SQL is configured with automated backup\n- cloudsql/BP\\_EXT/2023\\_001: Cloud SQL is defined with Maintenance Window as any (github #67)\n- cloudsql/BP\\_EXT/2023\\_002: Cloud SQL is configured with Deletion Protection (github #68)\n- cloudsql/BP\\_EXT/2023\\_003: Cloud SQL enables automatic storage increases feature\n- cloudsql/BP\\_EXT/2023\\_004: Cloud SQL instance is covered by the SLA\n- cloudsql/ERR/2023\\_001: Cloud SQL instance should not be in SUSPENDED state\n- cloudsql/WARN/2023\\_001: Cloud SQL instance's log_output flag is not configured as TABLE\n- cloudsql/WARN/2023\\_002: Cloud SQL instance's avg CPU utilization is not over 98% for 6 hours\n- cloudsql/WARN/2023\\_003: Cloud SQL instance's memory usage does not exceed 90%\n- composer/BP/2023\\_001: Cloud Composer logging level is set to INFO\n- composer/BP/2023\\_002: Cloud Composer's worker concurrency is not limited by parallelism\n- composer/BP/2023\\_003: Cloud Composer does not override the StatsD configurations\n- composer/BP\\_EXT/2023\\_001: Cloud Composer has no more than 2 Airflow schedulers\n- composer/BP\\_EXT/2023\\_002: Cloud Composer has higher version than airflow-2.2.3\n- composer/ERR/2023\\_001: Cloud Composer is not in ERROR state\n- composer/WARN/2023\\_001: Cloud Composer does not override Kerberos configurations\n- composer/WARN/2023\\_002: Cloud Composer tasks are not interrupted by SIGKILL\n- composer/WARN/2023\\_003: Cloud Composer tasks are not failed due to resource pressure\n- composer/WARN/2023\\_004: Cloud Composer database CPU usage does not exceed 80%\n- composer/WARN/2023\\_005: Cloud Composer is consistently in healthy state\n- composer/WARN/2023\\_006: Airflow schedulers are healthy for the last hour\n- composer/WARN/2023\\_007: Cloud Composer Scheduler CPU limit exceeded\n- composer/WARN/2023\\_008: Cloud Composer Airflow database is in healthy state\n- dataflow/ERR/2023\\_001: Dataflow service account has dataflow.serviceAgent role\n- dataflow/ERR/2023\\_002: Dataflow job does not fail during execution due to IP space exhaustion\n- dataflow/ERR/2023\\_003: Dataflow job does not fail during execution due to incorrect subnet\n- dataflow/ERR/2023\\_004: Dataflow job does not fail due to organization policy constraints\n- dataflow/ERR/2023\\_005: Dataflow job does not fail during execution due credential or permission issue\n- dataflow/ERR/2023\\_006: Dataflow job fails if Private Google Access is disabled on subnetwork\n- dataflow/WARN/2023\\_001: Dataflow job does not have a hot key\n- dataproc/ERR/2023\\_002: No orphaned YARN application found\n- dataproc/ERR/2023\\_003: Dataproc cluster service account permissions\n- dataproc/ERR/2023\\_004: Dataproc firewall rules for connectivity between master and worker nodes\n- dataproc/ERR/2023\\_005: Dataproc cluster has sufficient quota\n- dataproc/ERR/2023\\_006: DataProc cluster user has networking permissions on host project\n- gce/WARN/2023\\_001: GCE snapshot policies are defined only for used disks\n- gke/ERR/2023\\_004: GKE ingresses are well configured\n- gke/ERR/2023\\_005: Workloads not reporting misconfigured CNI plugins\n- iam/BP/2023\\_001: Policy constraint 'AutomaticIamGrantsForDefaultServiceAccounts' enforced\n- interconnect/BP/2023\\_001: VLAN attachments deployed in same metro are in different EADs\n- lb/BP/2023\\_001: Cloud CDN is enabled on backends for global external load balancers\n- notebooks/BP/2023\\_001: Vertex AI Workbench instance enables system health report\n- notebooks/BP/2023\\_003: Vertex AI Workbench runtimes for managed notebooks are up to date\n- notebooks/ERR/2023\\_002: Vertex AI Workbench account has compute.subnetworks permissions\n- notebooks/ERR/2023\\_003: Vertex AI Workbench account has permissions to create and use notebooks\n- notebooks/ERR/2023\\_004: Vertex AI Workbench runtimes for managed notebooks are healthy\n- notebooks/WARN/2023\\_001: Vertex AI Workbench instance is not being OOMKilled\n- notebooks/WARN/2023\\_002: Vertex AI Workbench instance is in healthy data disk space status\n- notebooks/WARN/2023\\_003: Vertex AI Workbench instance is in healthy boot disk space status\n- vpc/SEC/2023\\_001: DNSSEC is enabled for public zones\n- vpc/WARN/2023\\_002: Private zone is attached to a VPC\n\n#### Enhancements\n\n- Support for sub project resource filtering (`--name`, `--location`, `--label`)\n- Support fetching serial port output logs from Compute API (`--enable-gce-serial-buffer`)\n- New product: Cloud Dataflow\n- New product: Cloud Interconnect\n- Add kubectl query module\n- Optimizations for logging based composer rules\n\n#### Fixes\n\n- gke/BP/2022\\_003: updated EOL schedule for GKE\n- Fix billing project id not set at startup (github #58)\n- Fix JSON format with --output=json (github #62)\n- Fix GCS uniform bucket access detection (github #69)\n- dataproc/WARN/2022\\_002: fix attribute lookup error (github #57)\n- gke/WARN/2021\\_003: update GKE pod cidr rule to report values per pod cidr range\n\n## 0.59 (2023-04-14)\n\n#### New rules\n\n- apigee/ERR/2023\\_001: Customer's network is peered to Apigee's network\n- apigee/ERR/2023\\_002: Network bridge managed instance group is correctly configured\n- bigquery/WARN/2022\\_003: BigQuery copy job does not exceed the daily copy quota\n- bigquery/WARN/2022\\_004: BigQuery copy job does not exceed the cross-region daily copy quota\n- bigquery/WARN/2023\\_001: BigQuery query job does not time out during execution\n- composer/WARN/2022\\_003: Composer scheduler parses all DAG files without overloading\n- datafusion/ERR/2022\\_008: Cloud Data Fusion SA has Service Account User permissions on the Dataproc SA\n- datafusion/ERR/2022\\_009: Cloud Dataproc Service Account has a Cloud Data Fusion Runner role\n- datafusion/ERR/2022\\_010: Cloud Dataproc Service Account has a Dataproc Worker role\n- datafusion/ERR/2022\\_011: The Dataproc SA for a CDF instance with version > 6.2.0 has Storage Admin role\n- dataproc/ERR/2022\\_004: Dataproc on GCE master VM is able to communicate with at least one worker VM\n- dataproc/ERR/2023\\_001: Dataproc cluster initialization completed by the end of the timeout period\n- dataproc/WARN/2022\\_004: Cluster should normally spend most of the time in RUNNING state\n- dataproc/WARN/2023\\_001: Concurrent Job limit was not exceeded\n- dataproc/WARN/2023\\_002: Master Node System Memory utilization under threshold\n- gae/ERR/2023\\_001: App Engine: VPC Connector creation failure due to Org Policy\n- gae/ERR/2023\\_002: App Engine: VPC Connector creation due to subnet overlap\n- gcb/ERR/2022\\_004: Cloud Build Service Agent has the cloudbuild.serviceAgent role\n- gce/BP/2023\\_001: GCE Instances follows access scope best practice\n- gce/BP/2023\\_001: Instance time source is configured with Google NTP server\n- gce/ERR/2022\\_002: Serial logs don't contain Guest OS activation errors\n- gce/WARN/2022\\_010: GCE has enough resources available to fulfill requests\n- gce/WARN/2022\\_011: GCE VM service account is valid\n- gce/WARN/2022\\_012: Validate if a Microsoft Windows instance is able to activate using GCP PAYG licence\n- gke/BP/2023\\_001: GKE network policy minimum requirements\n- gke/BP/2023\\_002: Stateful workloads do not run on preemptible node\n- gke/BP/2023\\_004: GKE clusters are VPC-native\n- gke/BP_EXT/2023\\_003: GKE maintenance windows are defined\n- gke/ERR/2023\\_001: Container File System API quota not exceeded\n- gke/ERR/2023\\_002: GKE private clusters are VPC-native\n- gke/ERR/2023\\_003: containerd config.toml is valid\n- gke/WARN/2023\\_001: Container File System has the required scopes for Image Streaming\n- gke/WARN/2023\\_002: GKE workload timeout to Compute Engine metadata server\n- lb/BP/2022\\_001: LocalityLbPolicy compatible with sessionAffinity\n- notebooks/ERR/2023\\_001: Vertex AI Workbench user-managed notebook instances are healthy\n- vpc/BP/2022\\_001: Explicit routes for Google APIs if the default route is modified\n- vpc/BP/2023\\_001: DNS logging is enabled for public zones\n\n#### Enhancements\n\n- New product: Cloud Load Balancing\n- New product: Vertex AI Workbench Notebooks\n- Experimental asynchronous IO execution (not enabled by default)\n- gcb/ERR/2022\\_002: Check access to images hosted in gcr.io repositories\n- Add support for interconnect API\n- Extract project id from email when fetching service accounts instead of using\n  wildcard, making IAM service account checks more reliable.\n- --project now accepts project numbers in addition to project ids\n\n#### Fixes\n\n- gke/BP/2022\\_003: updated EOL schedule for GKE\n- Fix 403 error on userinfo API call\n\n## 0.58 (2022-11-08)\n\n#### Deprecation\n\n- Python 3.9+ is required for gcpdiag. Python 3.8 and older versions support is deprecated.\n- Deprecated authentication using OAuth (`--auth-oauth`) has been removed.\n\n#### New rules\n\n- apigee/ERR/2022\\_002: Verify whether Cloud KMS key is enabled and could be accessed by Apigee Service Agent\n- datafusion/ERR/2022\\_003: Private Data Fusion instance is peered to the tenant project\n- datafusion/ERR/2022\\_004: Cloud Data Fusion Service Account has necessary permissions\n- datafusion/ERR/2022\\_005: Private Data Fusion instance has networking permissions\n- datafusion/ERR/2022\\_006: Private Google Access enabled for private Data Fusion instance subnetwork\n- datafusion/ERR/2022\\_007: Cloud Data Fusion Service Account exists at a Project\n- gke/BP/2022\\_004: GKE clusters should have HTTP load balancing enabled to use GKE ingress\n\n#### Enhancements\n\n- Python dependencies updated\n\n#### Fixes\n\n- gke/ERR/2021\\_002: skip if there are no GKE clusters\n\n## 0.57 (2022-09-29)\n\n#### Deprecation\n\n- Default authentication using OAuth (`--auth-oauth`) is now deprecated and Application Default Credentials (`--auth-adc`) will be used instead. Alternatively you can use Service Account private key (`--auth-key FILE`).\n\n#### New rules\n\n- apigee/WARN/2022\\_001: Verify whether all environments has been attached to Apigee X instances\n- apigee/WARN/2022\\_002: Environment groups are created in the Apigee runtime plane\n- cloudrun/ERR/2022\\_001: Cloud Run service agent has the run.serviceAgent role\n- datafusion/ERR/2022\\_001: Firewall rules allow for Data Fusion to communicate to Dataproc VMs\n- datafusion/ERR/2022\\_002: Private Data Fusion instance has valid host VPC IP range\n- dataproc/WARN/2022\\_001: Dataproc VM Service Account has necessary permissions\n- dataproc/WARN/2022\\_002: Job rate limit was not exceeded\n- gcf/ERR/2022\\_002: Cloud Function deployment failure due to Resource Location Constraint\n- gcf/ERR/2022\\_003: Function invocation interrupted due to memory limit exceeded\n- gke/WARN/2022/\\_008: GKE connectivity: possible dns timeout in some gke versions\n- gke/WARN/2022\\_007: GKE nodes need Storage API access scope to retrieve build artifacts\n- gke/WARN/2022\\_008: GKE connectivity: possible dns timeout in some gke versions\n\n#### Enhancements\n\n- New product: Cloud Run\n- New product: Data Fusion\n\n#### Fixes\n\n- gcf/WARN/2021\\_002: Added check for MATCH_STR\n- gcs/BP/2022\\_001: KeyError: 'iamConfiguration'\n- gke/ERR/2022\\_003: unhandled exception\n- gke/WARN/2022\\_005: Incorrectly report missing \"nvidia-driver-installer\" daemonset\n- iam/SEC/2021\\_001: unhandled exception\n\n## 0.56 (2022-07-18)\n\n#### New rules\n\n- bigquery/ERR/2022\\_001: BigQuery is not exceeding rate limits\n- bigquery/ERR/2022\\_001: BigQuery jobs not failing due to concurrent DML updates on the same table\n- bigquery/ERR/2022\\_002: BigQuery jobs are not failing due to results being larger than the maximum response size\n- bigquery/ERR/2022\\_003: BigQuery jobs are not failing while accessing data in Drive due to a permission issue\n- bigquery/ERR/2022\\_004: BigQuery jobs are not failing due to shuffle operation resources exceeded\n- bigquery/WARN/2022\\_002: BigQuery does not violate column level security\n- cloudsql/WARN/2022\\_001: Docker bridge network should be avoided\n- composer/WARN/2022\\_002: fluentd pods in Composer environments are not crashing\n- dataproc/ERR/2022\\_003: Dataproc Service Account permissions\n- dataproc/WARN/2022\\_001: Dataproc clusters are not failed to stop due to the local SSDs\n- gae/WARN/2022\\_002: App Engine Flexible versions don't use deprecated runtimes\n- gcb/ERR/2022\\_002: Cloud Build service account registry permissions\n- gcb/ERR/2022\\_003: Builds don't fail because of retention policy set on logs bucket\n- gce/BP/2022\\_003: detect orphaned disks\n- gce/ERR/2022\\_001: Project limits were not exceeded\n- gce/WARN/2022\\_004: Cloud SQL Docker bridge network should be avoided\n- gce/WARN/2022\\_005: GCE CPU quota is not near the limit\n- gce/WARN/2022\\_006: GCE GPU quota is not near the limit\n- gce/WARN/2022\\_007: VM has the proper scope to connect using the Cloud SQL Admin API\n- gce/WARN/2022\\_008: GCE External IP addresses quota is not near the limit\n- gce/WARN/2022\\_009: GCE disk quota is not near the limit\n- gcf/ERR/2022\\_001: Cloud Functions service agent has the cloudfunctions.serviceAgent role\n- gcf/WARN/2021\\_002: Cloud Functions have no scale up issues\n- gke/BP\\_EXT/2022\\_001: Google Groups for RBAC enabled (github #12)\n- gke/WARN/2022\\_006: GKE NAP nodes use a containerd image\n- tpu/WARN/2022\\_001: Cloud TPU resource availability\n- vpc/WARN/2022\\_001: Cross Project Networking Service projects quota is not near the limit\n\n#### Updated rules\n\n- dataproc/ERR/2022\\_002: fix os version detection (github #26)\n- gke/BP/2022\\_003: update GKE EOL schedule\n- gke/ERR/2022\\_001: fix KeyError exception\n- gke/BP/2022\\_002: skip legacy VPC\n\n#### Enhancements\n\n- Add support for multiple output formats (--output=csv, --output=json)\n- Better handle CTRL-C signal\n- Org policy support\n- New product: CloudSQL\n- New product: VPC\n- Renamed product \"GAES\" to \"GAE\" (Google App Engine)\n- Publish internal API documentation on <https://gcpdiag.dev/docs/development/api/>\n- Update Python dependencies\n\n## 0.55 (2022-04-25)\n\nVersion 0.55 was released with the same code as 0.54. The release was used\nto facilitate the transition of binaries to another location.\n\n## 0.54 (2022-04-25)\n\n#### New rules\n\n- apigee/ERR/2022_001: Apigee Service Agent permissions\n\n#### Enhancements\n\n- dynamically load gcpdiag lint rules for all products\n- support IAM policy retrieval for Artifact Registry\n- move gcpdiag release buckets to new location\n\n#### Fixes\n\n- gke/ERR/2022_002: use correct network for shared VPC scenario (#24)\n- error out early if service accounts of inspected projects can't be retrieved\n- fix docker wrapper script for --config and --auth-key options\n- allow to create test projects in an org folder\n- ignore more system service accounts (ignore all accounts starting with gcp-sa)\n\n## 0.53 (2022-03-30)\n\n#### New rules\n\n- composer/ERR/2022_001: Composer Service Agent permissions\n- composer/ERR/2022_002: Composer Environment Service Account permissions\n- composer/WARN/2022_001: Composer Service Agent permissions for Composer 2.x\n- gce/BP_EXT/2022_001: GCP project has VM Manager enabled\n- gce/WARN/2022_003: GCE VM instances quota is not near the limit\n- gke/BP/2022_002: GKE clusters are using unique subnets\n- gke/BP/2022_003: GKE cluster is not near to end of life\n- gke/WARN/2022_003: GKE service account permissions to manage project firewall rules\n- gke/WARN/2022_004: Cloud Logging API enabled when GKE logging is enabled\n- gke/WARN/2022_005: NVIDIA GPU device drivers are installed on GKE nodes with GPU\n\n#### Enhancements\n\n- Support IAM policies for service accounts and subnetworks\n- Skip rules using logs if Cloud Logging API is disabled\n- New option: --logs-query-timeout\n- Add support for configuration files\n  (see <https://gcpdiag.dev/docs/usage/#configuration-file>)\n\n#### Fixes\n\n- Fix various unhandled exceptions\n\n## 0.52 (2022-02-11)\n\n#### New rules\n\n- dataproc/BP/2022_001: Cloud Monitoring agent is enabled.\n- dataproc/ERR/2022_002: Dataproc is not using deprecated images.\n- gce/WARN/2022_001: IAP service can connect to SSH/RDP port on instances.\n- gce/WARN/2022_002: Instance groups named ports are using unique names.\n- gke/ERR/2022_002: GKE nodes of private clusters can access Google APIs and services.\n- gke/ERR/2022_003: GKE connectivity: load balancer to node communication (ingress).\n\n#### Updated rules\n\n- gcb/ERR/2022_001: Fix false positive when no build is configured.\n- gke/WARN/2021_008: Improve Istio deprecation message\n\n#### Enhancements\n\n- Introduce \"extended\" rules (BP_EXT, ERR_EXT, etc.), disabled by default\n  and which can be enabled with --include-extended.\n- Large IAM policy code refactorings in preparation for org-level IAM\n  policy support.\n\n#### Fixes\n\n- More API retry fixes.\n- Fix --billing-project which had no effect before.\n- Fix exception related to GCE instance scopes.\n\n## 0.51 (2022-01-21)\n\n#### Fixes\n\n- Update Python dependencies, and add 'packaging', missing in the docker image.\n\n## 0.50 (2022-01-21)\n\n#### New rules\n\n- gcb/ERR/2022_001: The Cloud Build logs do not report permission issues\n- gce/BP/2021_002: GCE nodes have an up to date ops agent\n- gce/BP/2021_003: Secure Boot is enabled\n- gce/ERR/2021_004: Serial logs don’t contain Secure Boot errors\n- gce/ERR/2021_005: Serial logs don't contain mount error messages\n- gce/WARN/2021_005: Serial logs don't contain out-of-memory messages\n- gce/WARN/2021_006: Serial logs don't contain \"Kernel panic\" messages\n- gce/WARN/2021_007: Serial logs don't contain \"BSOD\" messages\n- gcs/BP/2022_001: Buckets are using uniform access\n- gke/BP/2022_001: GKE clusters are regional\n- gke/ERR/2022_001: GKE connectivity: pod to pod communication\n- gke/WARN/2022_001: GKE clusters with workload identity are regional\n- gke/WARN/2022_002: GKE metadata concealment is not in use\n\n#### Updated rules\n\n- gcf/WARN/2021_001: add one more deprecated runtime Nodejs6 (github #17)\n\n#### Enhancements\n\n- New product: App Engine Standard\n- New product: Cloud Build\n- New product: Cloud Pub/Sub\n- New product: Cloud Storage\n\n#### Fixes\n\n- Verify early that IAM API is enabled\n- Catch API errors in prefetch_rule\n- Disable italic in Cloud Shell\n- Implement retry logic for batch API failures\n\n## 0.49 (2021-12-20)\n\n#### New / updated rules\n\n- dataproc/BP/2021_001: Dataproc Job driver logs are enabled\n- composer/WARN/2021_001: Composer environment status is running (b/207615409)\n- gke/ERR/2021_013: GKE cluster firewall rules are configured. (b/210407018)\n- gke/ERR/2021_014: GKE masters of can reach the nodes. (b/210407018)\n- gke/ERR/2021_015: GKE connectivity: node to pod communication. (b/210407018)\n- gce/WARN/2021_001: verify logging access scopes (b/210711351)\n- gce/WARN/2021_003: verify monitoring access scopes (b/210711351)\n\n#### Enhancements\n\n- New product: Cloud Composer (b/207615409)\n- Simplify API testing by using ephemeral projects (b/207484323)\n- gcpdiag.sh wrapper script now verifies the minimum version of current script\n- Add support for client-side firewall connectivity tests (b/210407018)\n\n#### Fixes\n\n## 0.48 (2021-11-15)\n\n#### New rules\n\n- apigee/WARN/2021_001: Every env. group has at least one env. (b/193733957)\n- dataproc/WARN/2021_001: Dataproc cluster is in RUNNING state (b/204850980)\n\n#### Enhancements\n\n- Use OAuth authentication by default (b/195908593)\n- New product: Dataproc (b/204850980)\n- New product: Apigee (b/193733957)\n\n#### Fixes\n\n- Fix GitHub actions with newest pipenv\n\n## 0.47 (2021-11-01)\n\n#### New rules\n\n- gce/WARN/2021_004: check serial output for 'disk full' messages (b/193383069)\n\n#### Enhancements\n\n- Add podman support in wrapper script\n\n#### Fixes\n\n- Fix gcf KeyError when API enabled but no functions defined (b/204516746)\n\n## 0.46 (2021-10-27)\n\n#### New rules\n\n- gce/WARN/2021_003: gce service account monitoring permissions (b/199277342)\n- gcf/WARN/2021_001: cloud functions deprecated runtimes\n- gke/WARN/2021_009: deprecated node image types (b/202405661)\n\n#### Enhancements\n\n- New website! <https://gcpdiag.dev>\n- Rule documentation permalinks added to lint output (b/191612825)\n- Added --include and --exclude arguments to filter rules to run (b/183490284)\n\n## 0.45 (2021-10-08)\n\n#### Enhancements\n\n- Use --auth-adc by default for all non-google.com users (b/202488675)\n\n## 0.44 (2021-10-07)\n\n#### New rules\n\n- gke/ERR/2021_009: gke cluster and node pool version skew (b/200559114)\n- gke/ERR/2021_010: clusters are not facing ILB quota issues (b/193382041)\n- gke/ERR/2021_011: ip-masq-agent errors (b/199480284)\n- iam/SEC/2021_001: no service account has owner role (b/201526416)\n\n#### Enhancements\n\n- Improve error message for --auth-adc authentication errors (b/202091830)\n- Suggest gcloud command if CRM API is not enabled\n- Use --auth-adc by default in Cloud Shell (b/201996404)\n- Improve output with hidden items\n- Update docker image to python:3.9-slim\n\n#### Fixes\n\n- Make the docker wrapper macos-compatible (GH-10)\n- Exclude fleet workload identities from SA disabled check (b/201631248)\n"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "content": "# Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, we as\ncontributors and maintainers pledge to making participation in our project and\nour community a harassment-free experience for everyone, regardless of age, body\nsize, disability, ethnicity, gender identity and expression, level of\nexperience, education, socioeconomic status, nationality, personal appearance,\nrace, religion, or sexual identity and orientation.\n\n## Our Standards\n\nExamples of behavior that contributes to creating a positive environment\ninclude:\n\n*   Using welcoming and inclusive language\n*   Being respectful of differing viewpoints and experiences\n*   Gracefully accepting constructive criticism\n*   Focusing on what is best for the community\n*   Showing empathy towards other community members\n\nExamples of unacceptable behavior by participants include:\n\n*   The use of sexualized language or imagery and unwelcome sexual attention or\n    advances\n*   Trolling, insulting/derogatory comments, and personal or political attacks\n*   Public or private harassment\n*   Publishing others' private information, such as a physical or electronic\n    address, without explicit permission\n*   Other conduct which could reasonably be considered inappropriate in a\n    professional setting\n\n## Our Responsibilities\n\nProject maintainers are responsible for clarifying the standards of acceptable\nbehavior and are expected to take appropriate and fair corrective action in\nresponse to any instances of unacceptable behavior.\n\nProject maintainers have the right and responsibility to remove, edit, or reject\ncomments, commits, code, wiki edits, issues, and other contributions that are\nnot aligned to this Code of Conduct, or to ban temporarily or permanently any\ncontributor for other behaviors that they deem inappropriate, threatening,\noffensive, or harmful.\n\n## Scope\n\nThis Code of Conduct applies both within project spaces and in public spaces\nwhen an individual is representing the project or its community. Examples of\nrepresenting a project or community include using an official project e-mail\naddress, posting via an official social media account, or acting as an appointed\nrepresentative at an online or offline event. Representation of a project may be\nfurther defined and clarified by project maintainers.\n\nThis Code of Conduct also applies outside the project spaces when the Project\nSteward has a reasonable belief that an individual's behavior may have a\nnegative impact on the project or its community.\n\n## Conflict Resolution\n\nWe do not believe that all conflict is bad; healthy debate and disagreement\noften yield positive results. However, it is never okay to be disrespectful or\nto engage in behavior that violates the project’s code of conduct.\n\nIf you see someone violating the code of conduct, you are encouraged to address\nthe behavior directly with those involved. Many issues can be resolved quickly\nand easily, and this gives people more control over the outcome of their\ndispute. If you are unable to resolve the matter for any reason, or if the\nbehavior is threatening or harassing, report it. We are dedicated to providing\nan environment where participants feel welcome and safe.\n\nReports should be directed to David Schweikert <dwes@google.com>, the\nProject Steward(s) for gcpdiag. It is the Project Steward’s duty to\nreceive and address reported violations of the code of conduct. They will then\nwork with a committee consisting of representatives from the Open Source\nPrograms Office and the Google Open Source Strategy team. If for any reason you\nare uncomfortable reaching out to the Project Steward, please email\nopensource@google.com.\n\nWe will investigate every complaint, but you may not receive a direct response.\nWe will use our discretion in determining when and how to follow up on reported\nincidents, which may range from not taking action to permanent expulsion from\nthe project and project-sponsored spaces. We will notify the accused of the\nreport and provide them an opportunity to discuss it before any action is taken.\nThe identity of the reporter will be omitted from the details of the report\nsupplied to the accused. In potentially harmful situations, such as ongoing\nharassment or threats to anyone's safety, we may take action without notice.\n\n## Attribution\n\nThis Code of Conduct is adapted from the Contributor Covenant, version 1.4,\navailable at\nhttps://www.contributor-covenant.org/version/1/4/code-of-conduct.html\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# How to Contribute\n\nWe'd love to accept your patches and contributions to this project. There are\njust a few small guidelines you need to follow.\n\n## Contributor License Agreement\n\nContributions to this project must be accompanied by a Contributor License\nAgreement (CLA). You (or your employer) retain the copyright to your\ncontribution; this simply gives us permission to use and redistribute your\ncontributions as part of the project. Head over to\n<https://cla.developers.google.com/> to see your current agreements on file or\nto sign a new one.\n\nYou generally only need to submit a CLA once, so if you've already submitted one\n(even if it was for a different project), you probably don't need to do it\nagain.\n\n## Code Reviews\n\nAll submissions, including submissions by project members, require review. We\nuse GitHub pull requests for this purpose. Consult\n[GitHub Help](https://help.github.com/articles/about-pull-requests/) for more\ninformation on using pull requests.\n\n## Community Guidelines\n\nThis project follows\n[Google's Open Source Community Guidelines](https://opensource.google/conduct/).\n"
  },
  {
    "path": "LICENSE",
    "content": "\n                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "Makefile",
    "content": "VERSION=$(shell sed -n 's/^current_version\\s*=\\s*//p' <.bumpversion.cfg)\nDIST_NAME=gcpdiag-$(VERSION)\nSHELL=/bin/bash\n\n.PHONY: test coverage-report version build bump-version tarfile release runbook-docs runbook-starter-code spelling\n\n# Comprehensive environment check.\ncheck-environment:\n\t@command -v pipenv >/dev/null 2>&1 || { echo >&2 \"ERROR: pipenv is not installed. Please run 'pip install pipenv' and try again.\"; exit 1; }\n\t@if [ -z \"$$(pipenv --venv)\" ]; then \\\n\t\techo \"Pipenv environment not created. Please run 'pipenv install --dev'.\"; \\\n\t\texit 1; \\\n\tfi\n\t@pipenv check || { \\\n\t\tREQUIRED_PYTHON_VERSION=$$(sed -n 's/^python_version\\s*=\\s*\"\\(.*\\)\"/\\\\1/p' < Pipfile); \\\n\t\techo >&2 \"ERROR: Pipenv check failed. Your Python version might be incorrect.\"; \\\n\t\techo >&2 \"Please run 'pipenv --rm && pipenv --python $$REQUIRED_PYTHON_VERSION install --dev' to fix this.\"; \\\n\t\texit 1; \\\n\t}\n\ntest: check-environment\n\tpipenv run pytest -o log_level=DEBUG --cov-config=.coveragerc --cov=gcpdiag --forked\n\ncoverage-report:\n\tpipenv run pytest --cov-config=.coveragerc --cov=gcpdiag --forked --cov-report html --cov-report term-missing\n\t@echo \"\"\n\t@echo \"To view the report, run the following command in your terminal:\"\n\t@echo \"python3 -m http.server 8080\"\n\t@echo \"Then open http://localhost:8080/htmlcov/ in your browser.\"\n\ntest_async_api:\n\tpython -m unittest gcpdiag.async_queries.api.api_slowtest\n\ntest-mocked:\n\t# run gcpdiag-mocked and verify that the exit status is what we expect\n\tbin/gcpdiag-mocked lint --auth-adc --project=gcpdiag-gke1-aaaa; \\\n\t  EXIT_CODE=$$?; \\\n\t  if [ $$EXIT_CODE != 2 ]; then echo \"incorrect exit code $$EXIT_CODE\" >&2; exit 1; fi; \\\n\t  exit 0\n\nspelling:\n\t pip install -U PyEnchant; pylint --disable all --enable spelling --spelling-dict en_US gcpdiag\n\nsnapshots:\n\tpytest --snapshot-update --forked -v -v\n\ngke-eol-file:\n\t./gcpdiag/lint/gke/eol_parser.sh > gcpdiag/lint/gke/eol.yaml\n\nversion:\n\t@echo $(VERSION)\n\nbuild:\n\trm -f dist/gcpdiag\n\tpyinstaller --workpath=.pyinstaller.build pyinstaller.spec\n\nbump-version:\n\tbumpversion --commit minor\n\nnew-rule:\n\tpython cookiecutter-gcpdiag-rule/cookiecutter_runner.py\n\ntarfile:\n\t# TODO: replace with something based on setuptools?\n\trm -rf dist-tmp\n\tmkdir -p dist-tmp/$(DIST_NAME)/bin\n\tcp Pipfile Pipfile.lock README.md dist-tmp/$(DIST_NAME)\n\tcp bin/gcpdiag dist-tmp/$(DIST_NAME)/bin\n\tchmod +x dist-tmp/$(DIST_NAME)/bin/gcpdiag\n\tcp --parents gcpdiag/queries/client_secrets.json dist-tmp/$(DIST_NAME)\n\tfind gcpdiag -name '*.py' -exec cp --parents '{}' dist-tmp/$(DIST_NAME) ';'\n\tfind gcpdiag -name '*.jinja' -exec cp --parents '{}' dist-tmp/$(DIST_NAME) ';'\n\tfind gcpdiag/runbook/gce/disk_performance_benchmark -name '*.json' -exec cp --parents '{}' dist-tmp/$(DIST_NAME) ';'\n\tchmod -R a+rX dist-tmp\n\tmkdir -p dist\n\ttar -C dist-tmp -czf dist/gcpdiag-$(VERSION).tar.gz --owner=0 --group=0 gcpdiag-$(VERSION)\n\trm -rf dist-tmp\n\nrelease:\n\t# Make sure we are using the latest submitted code.\n\tgit fetch\n\tgit checkout origin/master\n\t# Remove '-test' in the version.\n\t# Note: this will fail if we have already a release tag, in which case\n\t# you should first increase the minor version with a code review.\n\tbumpversion --commit --tag --tag-message \"Release v{new_version}\" release\n\t# Push to the release branch and tag the release.\n\t# Note: We want ff-only because otherwise the commit ids will be different\n\t# between master and release, and that causes problems with tags\n\t# (and in particular the version tag pointing to a commit in the release\n\t# branch, so that git describe doesn't work correctly in master, which\n\t# itself disrupts the creation of tags in GitHub by Copybara),\n\t# If this fails, you probably should force-push from master to the\n\t# release branch. The release branch is only used to kick off releases\n\t# in Kokoro.\n\tgit merge --ff-only origin/release\n\tgit push origin HEAD:release\n\tgit push --tags\n\t# increment the version (and add back '-test')\n\tbumpversion --commit minor\n\tgit push origin HEAD:refs/for/master\n\nrunbook-docs:\n  # Help developers generate and update docs before actually running full precommit\n\tpre-commit run gcpdiag-custom-runbook-rule\n\nrunbook-starter-code:\n\t@[ \"$(name)\" ] || (echo \"name is not set. Usage: make $@ name=product/runbook-id\" && false)\n\t@PYTHON=`which python3 || which python`;\\\n\tif [ -z \"$$PYTHON\" ]; then \\\n\t\techo \"Python is not installed or not found in PATH\"; \\\n\t\texit 1; \\\n\tfi;\\\n\techo \"Using Python at $$PYTHON\"; \\\n\t$$PYTHON bin/runbook-starter-code-generator py_path=$$PYTHON name=$(name) prepenv=$(prepenv)\n"
  },
  {
    "path": "PRIVACY.md",
    "content": "See: https://gcpdiag.dev/privacy\n"
  },
  {
    "path": "Pipfile",
    "content": "[[source]]\nurl = \"https://pypi.python.org/simple\"\nverify_ssl = true\nname = \"pypi\"\n\n[requires]\npython_version = \"3.12\"\n\n[packages]\naiohttp = \"*\"\nappdirs = \"*\"\nboltons = \"*\"\nblessings = \"*\"\ndataclasses = \"==0.6\"\ndiskcache = \"*\"\ndnspython = \"*\"\ngoogle-api-python-client = \"*\"\ngoogle-auth-oauthlib = \"*\"\nimportlib-resources = \"*\"\njinja2 = \">=3.0.0\"\npackaging = \"==23.*\"\npython-dateutil = \"*\"\npyyaml = \"*\"\nratelimit = \"*\"\nsix = \"==1.16.0\"\n# Python 3.7 compatibility\ntyping-extensions = \"*\"\n# Python 3.9 compatibility\nexceptiongroup = \"*\"\nbeautifulsoup4 = \"*\"\nasync-timeout = \"*\"\nbs4 = \"*\"\n\n[dev-packages]\nabsl-py = \"*\"\nastunparse = \"*\"\nbump2version = \"*\"\ncoverage = \"*\"\ndnspython = \"*\"\nimportlib-metadata = \"*\"\nisort = \"==5.12.0\"\nmypy = \"*\"\npdoc = \"*\"\npre-commit = \"*\"\npyinstaller = \"*\"\npytest = \"*\"\npytest-cov = \"*\"\npytest-forked = \"*\"\npytest-snapshot = \"*\"\nyapf = \"*\"\npylint = \"*\"\n# for vim:\n# pip install 'python-language-server[yapf,pyflakes,mccabe]'\nsafety = \"*\"\ntypes-pyyaml = \"*\"\ncookiecutter = \"*\"\n"
  },
  {
    "path": "README.md",
    "content": "# gcpdiag - Diagnostics for Google Cloud Platform\n\n[![code analysis badge](https://github.com/GoogleCloudPlatform/gcpdiag/actions/workflows/code-analysis.yml/badge.svg?branch=main&event=push)](https://github.com/GoogleCloudPlatform/gcpdiag/actions/workflows/code-analysis.yml?query=branch%3Amain+event%3Apush)\n[![test badge](https://github.com/GoogleCloudPlatform/gcpdiag/actions/workflows/test.yml/badge.svg?branch=main&event=push)](https://github.com/GoogleCloudPlatform/gcpdiag/actions/workflows/test.yml?query=branch%3Amain+event%3Apush)\n[![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/GoogleCloudPlatform/gcpdiag/badge)](https://scorecard.dev/viewer/?uri=github.com/GoogleCloudPlatform/gcpdiag)\n\n\n**gcpdiag** is a command-line diagnostics tool for GCP customers. It finds and\nhelps to fix common issues in Google Cloud Platform projects. It is used to test\nprojects against a wide range of best practices and frequent mistakes, based on\nthe troubleshooting experience of the Google Cloud Support team.\n\ngcpdiag is open-source and contributions are welcome! Note that this is not an\nofficially supported Google product, but a community effort. The Google Cloud\nSupport team maintains this code and we do our best to avoid causing any\nproblems in your projects, but we give no guarantees to that end.\n\n<img src=\"docs/gcpdiag-demo-2021-10-01.gif\" alt=\"gcpdiag demo\" width=\"800\"/>\n\n## Installation\n\nYou can run gcpdiag using a shell wrapper that starts gcpdiag in a Docker\ncontainer. This should work on any machine with Docker or Podman installed,\nincluding Cloud Shell.\n\n```\ncurl https://gcpdiag.dev/gcpdiag.sh >gcpdiag\nchmod +x gcpdiag\n./gcpdiag lint --project=MYPROJECT\n```\n\n## Usage\n\nCurrently gcpdiag mainly supports subcommand: `lint` and `Runbooks`, which is\nused to run diagnostics on one or more GCP projects.\n\n### LINT\n\n```\nusage:\n\ngcpdiag lint --project P [OPTIONS]\ngcpdiag lint --project P [--name faulty-vm --location us-central1-a --label key:value]\n\nRun diagnostics in GCP projects.\n\noptional arguments:\n  -h, --help            show this help message and exit\n  --auth-adc            Authenticate using Application Default Credentials (default)\n  --auth-key FILE       Authenticate using a service account private key file\n  --project P           Project ID of project to inspect\n  --name n [n ...]      Resource Name(s) to inspect (e.g.: bastion-host,prod-*)\n  --location R [R ...]  Valid GCP region/zone to scope inspection (e.g.: us-central1-a,us-central1)\n  --label key:value     One or more resource labels as key-value pair(s) to scope inspection\n                        (e.g.:  env:prod, type:frontend or env=prod type=frontend)\n  --billing-project P   Project used for billing/quota of API calls done by gcpdiag (default is the inspected project, requires\n                        'serviceusage.services.use' permission)\n  --show-skipped        Show skipped rules\n  --hide-ok             Hide rules with result OK\n  --enable-gce-serial-buffer\n                        Fetch serial port one output directly from the Compute API. Use this flag when not exporting\n                        serial port output to cloud logging.\n  --include INCLUDE     Include rule pattern (e.g.: `gke`, `gke/*/2021*`). Multiple pattern can be specified (comma separated, or with multiple\n                        arguments)\n  --exclude EXCLUDE     Exclude rule pattern (e.g.: `BP`, `*/*/2022*`)\n  --include-extended    Include extended rules. Additional rules might generate false positives (default: False)\n  -v, --verbose         Increase log verbosity\n  --within-days D       How far back to search logs and metrics (default: 3 days)\n  --config FILE         Read configuration from FILE\n  --logging-ratelimit-requests R\n                        Configure rate limit for logging queries (default: 60)\n  --logging-ratelimit-period-seconds S\n                        Configure rate limit period for logging queries (default: 60 seconds)\n  --logging-page-size P\n                        Configure page size for logging queries (default: 500)\n  --logging-fetch-max-entries E\n                        Configure max entries to fetch by logging queries (default: 10000)\n  --logging-fetch-max-time-seconds S\n                        Configure timeout for logging queries (default: 120 seconds)\n  --output FORMATTER    Format output as one of [terminal, json, csv] (default: terminal)\n  --test-release        Runs the latest gcpdiag test release. (e.g.: --test-release=staging)\n```\n\n#### RUNBOOK\n\n```\nusage:\n\ngcpdiag runbook --project=project_id -p \"param_name=param_value\" [OPTIONS]\n\nexample:\ngcpdiag runbook gce/ssh --project \"project_id\" -p \"name=vm-id\" -p \"zone=us-central1-a\"\n\noptional arguments:\n  -h, --help                              show this help message and exit\n  --auth-adc                              Authenticate using Application Default Credentials\n  --auth-key FILE                         Authenticate using a service account private key file\n  --billing-project P                     Project used for billing/quota of API calls done by\n                                          gcpdiag (default is the inspected project, requires 'serviceusage.services.use' permission)\n  -v                                      Increase log verbosity\n  --test-release                          Runs the latest gcpdiag test release. (e.g.: --test-release=staging)\n\n  Descriptions for Logging Options logging-related options:\n  --logging-ratelimit-requests R`:        rate limit for API requests.\n  --logging-ratelimit-period-seconds S`:  period in seconds for the API rate limit.\n  --logging-page-size P`:                 page size for API requests.\n  --logging-fetch-max-entries E`:         maximum number of entries to fetch.\n  --logging-fetch-max-time-seconds S`:    maximum time in seconds to fetch logs.\n```\n\n##### BUNDLE\n\nCreate a YAML file to execute a \"bundle\" of individual runbook steps. This YAML\nfile allows you to define multiple bundles, each containing specific parameters\nand steps to execute.\n\n***Ex: test.yaml***\n\n```\n- bundle:\n  # Define the parameters that will be used in the steps.\n  parameter:\n    project_id: \"project_name\"\n    zone: \"zone_name\"\n    instance_name: \"instance_name\"\n  # Define the steps that will be executed.\n  steps:\n    - gcpdiag.runbook.gce.generalized_steps.VmLifecycleState\n    - gcpdiag.runbook.gce.ops_agent.VmHasAServiceAccount\n    - gcpdiag.runbook.gce.ssh.PosixUserHasValidSshKeyCheck\n\n- bundle:\n  # Define the parameters that will be used in the steps.\n  parameter:\n    project_id: \"project_name\"\n    principal: \"project_name@appspot.gserviceaccount.com\"\n  # Define the steps that will be executed.\n  steps:\n    - gcpdiag.runbook.iam.generalized_steps.IamPolicyCheck\n    - gcpdiag.runbook.gcf.failed_deployments.DefaultServiceAccountCheck\n```\n\nIn this example, two bundles are defined:\n\n*   The first bundle includes parameters for a GCE instance and executes three\n    steps related to VM lifecycle, Ops Agent, and SSH key validation.\n*   The second bundle includes parameters for a service account and executes two\n    steps related to IAM policy and GCF default service account.\n\n***Executing a yaml file :***\n\n```\ngcpdiag runbook --bundle-spec  test.yaml\n```\n\n## Development\n\n### Coverage Report\n\nTo generate a coverage report, run:\n\n```\nmake coverage-report\n```\n\nThis will run tests and generate an HTML coverage report. At the end of\nthe execution, it will give you instructions on how to view the report in your\nbrowser.\n\n## Further Information\n\nSee <http://gcpdiag.dev> for more information:\n\n-   [Documentation](https://gcpdiag.dev/docs/)\n-   [Lint rule description](https://gcpdiag.dev/rules/)\n-   [Runbook description](https://gcpdiag.dev/runbook/)\n-   [Development guides](https://gcpdiag.dev/docs/development/)\n\n## Authentication\n\ngcpdiag supports authentication using multiple mechanisms:\n\n1.  Application default credentials\n\n    gcpdiag can use Cloud SDK's\n    [Application Default Credentials](https://google-auth.readthedocs.io/en/latest/reference/google.auth.html#google.auth.default).\n    This might require that you first run `gcloud auth login --update-adc` to\n    update the cached credentials. This is the default in Cloud Shell because in\n    that environment, ADC credentials are automatically provisioned.\n\n1.  Service account key\n\n    You can also use the `--auth-key` parameter to specify the\n    [private key](https://cloud.google.com/iam/docs/creating-managing-service-account-keys)\n    of a service account.\n\nThe authenticated principal will need as minimum the following roles granted\n(both of them):\n\n-   `Viewer` on the inspected project\n-   `Service Usage Consumer` on the project used for billing/quota enforcement,\n    which is per default the project being inspected, but can be explicitly set\n    using the `--billing-project` option\n\nThe Editor and Owner roles include all the required permissions, but if you use\nservice account authentication (`--auth-key`), we recommend to only grant the\nViewer+Service Usage Consumer on that service account.\n\n## Test Products, Classes, and IDs\n\nTests are organized by product, class, and ID.\n\nThe **product** is the GCP service that is being tested. Examples: GKE or GCE.\n\nThe **class** is what kind of test it is, currently we have:\n\nClass name | Description\n---------- | -----------------------------------------------\nBP         | Best practice, opinionated recommendations\nWARN       | Warnings: things that are possibly wrong\nERR        | Errors: things that are very likely to be wrong\nSEC        | Potential security issues\n\nThe **ID** is currently formatted as YYYY_NNN, where YYYY is the year the test\nwas written, and NNN is a counter. The ID must be unique per product/class\ncombination.\n\nEach test also has a **short_description** and a **long_description**. The short\ndescription is a statement about the **good state** that is being verified to be\ntrue (i.e. we don't test for errors, we test for compliance, i.e. an problem not\nto be present).\n\n## Adding Support for New GCP Products\n\nWhen adding lint rules or runbooks for a new GCP product that gcpdiag doesn't\ncurrently support, you need to update the following files to register the new\nproduct modules:\n\n[gcpdiag/product_list.py](https://github.com/GoogleCloudPlatform/gcpdiag/blob/main/gcpdiag/product_list.py):\nAdd the new product identifier to the central list used by gcpdiag. Update the\nlist of known products for the runbook code generator script.\n\n[pyinstaller/hook-gcpdiag.runbook.py](https://github.com/GoogleCloudPlatform/gcpdiag/blob/main/pyinstaller/hook-gcpdiag.runbook.py):\nEnsure PyInstaller includes the new runbook modules during the build process.\n\n[pyinstaller/hook-gcpdiag.lint.py](https://github.com/GoogleCloudPlatform/gcpdiag/blob/main/pyinstaller/hook-gcpdiag.lint.py):\nEnsure PyInstaller includes the new lint rule modules during the build process.\n\n[bin/runbook-starter-code-generator](https://github.com/GoogleCloudPlatform/gcpdiag/blob/main/bin/runbook-starter-code-generator):\nUpdate product set in the starter code generator script.\n"
  },
  {
    "path": "bin/changelog_generator.py",
    "content": "#!/usr/bin/env python3\n\n# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Changelog Generator\"\"\"\n\nimport ast\nimport os\nimport re\nimport subprocess\nimport sys\n\n\ndef lint_name_generator(file_path):\n  \"\"\"Lint name regex generator\"\"\"\n  parts = file_path.split('/')\n  if len(parts) >= 4:\n    group3 = parts[3]\n    prefix = ''.join(c for c in group3 if c.isalpha() or c == '_').split(\n        '__', maxsplit=1)[0]\n    numbers = ''.join(\n        c for c in group3 if c.isdigit() or c == '_').strip('_').split(\n            '__', maxsplit=1)[0]\n    return f\"{parts[2]}/{prefix}/{numbers.rstrip('_')}\"\n\n\ndef find_queries(file, commit):\n  \"\"\"find new queries and respective docstring\"\"\"\n  if os.path.exists(file):\n    with open(file, encoding='utf-8') as f:\n      tree = ast.parse(f.read())\n    f.close()\n    content_changed = subprocess.check_output(\n        ['git', 'show', '-p', f'{commit}',\n         f'{file}']).decode('utf-8').split('\\n')\n    i = 0\n    for item in content_changed:\n      i = i + 1\n      if item.startswith('+def '):\n        file = file.split('/')[-1].split('.py')[0]\n        match = re.search(r'def\\s+(.+?)\\(', item)\n        function_name = ''\n        if match:\n          function_name = match.group(1)\n          message = ''\n          for node in ast.walk(tree):\n            if isinstance(node, ast.FunctionDef) and node.name == function_name:\n              message = ast.get_docstring(node) or 'No Message found'\n\n          final = file + '.' + function_name + ': ' + ' '.join(message.split())\n          if final:\n            return final\n          else:\n            return file + ': No function implemented'\n  else:\n    return file + ': No file found'\n\n\ndef generate_release_notes(old_commit, new_commit, current_version):\n  \"\"\"Generates release notes for version change\"\"\"\n\n  commits = subprocess.check_output([\n      'git', 'log', '--pretty=format:\"%h %s\"', '--no-merges',\n      f'{old_commit}..{new_commit}'\n  ]).decode('utf-8').split('\\n')\n\n  commits_dict = {}\n  for commit in commits:\n    if commit.strip():\n      commit_id, commit_msg = commit.strip('\"').split(' ', 1)\n      commits_dict[commit_id] = commit_msg\n\n  fixes = []\n  new_runbooks = []\n  new_lints = []\n  new_queries = []\n\n  for commit_item in commits_dict.items():\n    commit = commit_item[0]\n    commit_msg = commit_item[1]\n    if commit_msg.startswith('Bump version:'):\n      pass\n    else:\n      try:\n        # Get the files changed in this commit\n        files_changed = subprocess.check_output(\n            ['git', 'show', '--name-status', '--pretty=format:\"\"',\n             f'{commit}']).decode('utf-8').split('\\n')\n        if len(files_changed) > 2:\n          files_changed_dict = {}\n          for file_info in files_changed:\n            if file_info.strip():\n              match = re.match(r'([AM])\\t(.*)', file_info.strip('\"'))\n              if match:\n                status, filename = match.groups()\n                files_changed_dict[filename] = status\n\n          all_files_existed = []\n          all_new_files = []\n          # Check if all changed files existed before this commit\n          for file in files_changed_dict.items():\n            if file[1] in ['M', 'T']:\n              all_files_existed.append(file[0])\n            elif file[1] == 'A':\n              all_new_files.append(file[0])\n\n          ignored_files = [\n              'utils.py', 'generalized_steps.py', '__init__.py', 'constants.py',\n              'flags.py', 'utils_test.py'\n          ]\n\n          if all_files_existed and not all_new_files:\n            fixes.append(commit_msg)\n          else:\n            new_runbooks.extend([\n                (re.sub(r'gcpdiag/runbook/|_|\\.py', '-', f).strip('-') + ': ' +\n                 commit_msg)\n                for f in all_new_files\n                if f.startswith('gcpdiag/runbook/') and f.endswith('.py') and\n                f.split('/')[-1] not in ignored_files and\n                not f.endswith('_test.py')\n            ])\n            new_lints.extend([\n                (lint_name_generator(f) + ': ' + commit_msg)\n                for f in all_new_files\n                if f.startswith('gcpdiag/lint/') and f.endswith('.py') and\n                f.split('/')[-1] not in ignored_files and\n                not f.endswith('_test.py')\n            ])\n          all_files = all_files_existed + all_new_files\n          new_queries.extend([\n              find_queries(f, commit)\n              for f in all_files\n              if f.startswith('gcpdiag/queries/') and f.endswith('.py') and\n              f.split('/')[-1] not in ignored_files and\n              not f.endswith('_test.py') and not f.endswith('_stub.py')\n          ])\n\n      except subprocess.CalledProcessError:\n        pass\n\n  new_runbooks = list(dict.fromkeys(new_runbooks))\n  new_lints = list(dict.fromkeys(new_lints))\n  new_queries = list(dict.fromkeys(new_queries))\n  new_queries = list(filter(None, new_queries))\n\n  new_runbooks = [item.replace('_', r'\\_') for item in new_runbooks]\n  new_lints = [item.replace('_', r'\\_') for item in new_lints]\n  new_queries = [item.replace('_', r'\\_') for item in new_queries]\n\n  # Format release notes\n  release_notes = f'\\n\\n# Release Notes for v{current_version}\\n\\n'  # Removed tag from title\n  if new_lints:\n    release_notes += '## New Lints\\n\\n' + '\\n'.join(new_lints) + '\\n\\n'\n  if new_runbooks:\n    release_notes += '## New Runbooks\\n\\n' + '\\n'.join(new_runbooks) + '\\n\\n'\n  if new_queries:\n    release_notes += '## New Queries\\n\\n' + '\\n'.join(new_queries) + '\\n\\n'\n  if fixes:\n    release_notes += '## Fixes\\n\\n' + '\\n'.join(fixes) + '\\n\\n'\n  return release_notes\n\n\nif __name__ == '__main__':\n\n  with open('gcpdiag/config.py', encoding='utf-8') as fcg:\n    for line in fcg:\n      if line.startswith('VERSION ='):\n        match_var = re.match(r\"VERSION = '([\\d.]+)\", line)\n        if match_var:\n          current_ver = match_var.group(1)\n          previous_version = f'v{float(current_ver) - 0.01}'\n        else:\n          print('Current version information is missing from gcpdiag/config.py')\n          current_ver = input(\n              'Please enter the current version e.g 0.77 or 0.76: ')\n          if current_ver and re.match(r'^\\d+\\.\\d{2}$', current_ver):\n            previous_version = f'v{float(current_ver) - 0.01}'\n            break\n          else:\n            print('No Current Version information found, exiting!!')\n            sys.exit(1)\n\n  fcg.close()\n  #old_commit_id = \"0fc34e64\"\n  #old_commit_id = 'v0.73'\n  old_commit_id = previous_version\n  new_commit_id = 'HEAD'\n  release_notes_final = generate_release_notes(old_commit_id, new_commit_id,\n                                               current_ver)\n  print(release_notes_final)\n"
  },
  {
    "path": "bin/curl-wrap.sh",
    "content": "#!/bin/sh\n# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\n# send a curl request with gcloud default app credentials\n\nif [ -z \"$ACCESS_TOKEN\" ]; then\n  ACCESS_TOKEN=$(gcloud auth application-default print-access-token)\nfi\n\nexec curl \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n  \"$@\"\n"
  },
  {
    "path": "bin/gcpdiag",
    "content": "#!/usr/bin/env python3\n\n# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"gcpdiag main script.\"\"\"\n\n# pylint: disable=invalid-name\n\nimport sys\n\nfrom gcpdiag import config\nfrom gcpdiag.lint import command as lint_command\nfrom gcpdiag.runbook import command as runbook_command\nfrom gcpdiag.search import command as search_command\n\n\ndef main(argv):\n  # A very simple command-line parser to determine what subcommand is called.\n  # Proper argument parsing will be done in the subcommands.\n\n  # make sure we always output UTF-8, even if the terminal falls back to ascii\n  if sys.version_info >= (3, 7):\n    sys.stdout.reconfigure(encoding='utf-8')\n\n  if len(argv) == 1 or argv[1] == '--help' or argv[1] == 'help':\n    print_help()\n  elif argv[1] == 'version' or argv[1] == '--version':\n    print(f'gcpdiag {config.VERSION}\\nCopyright 2021 Google LLC')\n  elif argv[1] == 'lint':\n    # Replace argv[0:1] with only argv[0] so that argparse works correctly.\n    sys.argv.pop(0)\n    sys.argv[0] = 'gcpdiag lint'\n    try:\n      lint_command.run(argv)\n    except KeyboardInterrupt:\n      print(\n          '\\n[WARNING] KeyboardInterrupt: Application was interrupted (terminated)',\n          file=sys.stderr)\n      sys.exit(1)\n  elif argv[1] == 'runbook':\n    # Replace argv[0:1] with only argv[0] so that argparse works correctly.\n    sys.argv.pop(0)\n    sys.argv[0] = 'gcpdiag runbook'\n    try:\n      runbook_command.run(argv)\n    except KeyboardInterrupt:\n      print(\n          '\\n[WARNING] KeyboardInterrupt: Application was interrupted (terminated)',\n          file=sys.stderr)\n      sys.exit(1)\n  elif argv[1] == 'search':\n    # Replace argv[0:1] with only argv[0] so that argparse works correctly.\n    sys.argv.pop(0)\n    sys.argv[0] = 'gcpdiag search'\n    try:\n      search_command.run(argv)\n    except KeyboardInterrupt:\n      print(\n          '\\n[WARNING] KeyboardInterrupt: Application was interrupted (terminated)',\n          file=sys.stderr)\n      sys.exit(1)\n  else:\n    print(f'ERROR: unknown command {argv[1]}. Use --help for help.',\n          file=sys.stderr)\n    sys.exit(1)\n\n\ndef print_help():\n  print(\"\"\"gcpdiag 🩺 - Diagnostics for Google Cloud Platform\n\nUsage:\n        gcpdiag COMMAND [OPTIONS]\n\nCommands:\n        help     Print this help text.\n        lint     Run diagnostics on GCP projects.\n        runbook  Run diagnostics tree to deep dive into GCP issue.\n        search   Find gcpdiag rules related to search terms.\n        version  Print gcpdiag version.\n\nSee: gcpdiag COMMAND --help for command-specific usage.\"\"\")\n\n\nif __name__ == '__main__':\n  main(sys.argv)\n"
  },
  {
    "path": "bin/gcpdiag-dockerized",
    "content": "#!/bin/bash\nset -e\nTHIS_WRAPPER_VERSION=0.11\nSUPPORTED_RUNTIME=\"docker podman\"\nDEFAULT_OUTPUT_DIR=\"$HOME/tmp\"\n\n# Initialize variables for wrapper arguments\nCONFIG_FILE=\"\"\nAUTH_KEY=\"\"\nTEST_RELEASE=\"\"\nREPORT_DIR=\"\"\nBUNDLE_SPEC_FILE=\"\"\n# Array to hold arguments intended for the gcpdiag command\ndeclare -a gcpdiag_args=()\n\n# Parse arguments, separating wrapper flags from gcpdiag flags\nwhile [[ $# -gt 0 ]]; do\n  case \"$1\" in\n    --config=*)\n      CONFIG_FILE=\"${1#*=}\"\n      gcpdiag_args+=(\"$1\")\n      shift # consume argument\n      ;;\n    --config)\n      CONFIG_FILE=\"$2\"\n       gcpdiag_args+=(\"$1\" \"$2\")\n      shift 2 # consume flag\n      ;;\n    --auth-key=*)\n      AUTH_KEY=\"${1#*=}\"\n      gcpdiag_args+=(\"$1\")\n      shift # consume argument\n      ;;\n    --auth-key)\n      AUTH_KEY=\"$2\"\n      gcpdiag_args+=(\"$1\" \"$2\")\n      shift 2 # consume flag\n      ;;\n    --test-release=*)\n      TEST_RELEASE=\"${1#*=}\"\n      shift # consume argument\n      ;;\n    --test-release)\n       TEST_RELEASE=\"$2\"\n       shift 2 # consume flag\n      ;;\n    --report-dir=*)\n      REPORT_DIR=\"${1#*=}\"\n      gcpdiag_args+=(\"$1\")\n      shift # consume argument\n      ;;\n    --report-dir)\n      REPORT_DIR=\"$2\"\n      gcpdiag_args+=(\"$1\" \"$2\")\n      shift 2 # consume flag\n      ;;\n    --bundle-spec=*)\n      BUNDLE_SPEC_FILE=\"${1#*=}\"\n      gcpdiag_args+=(\"$1\")\n      shift # consume argument\n      ;;\n    --bundle-spec)\n      BUNDLE_SPEC_FILE=\"$2\"\n      gcpdiag_args+=(\"$1\" \"$2\")\n      shift 2 # consume flag\n      ;;\n    *)\n      # Assume anything else is an argument for gcpdiag\n      gcpdiag_args+=(\"$1\")\n      shift # consume argument\n      ;;\n  esac\ndone\n\neval $(curl -sf https://storage.googleapis.com/gcpdiag-dist/release-version|grep -Ei '^\\w*=[0-9a-z/\\._-]*$')\n\n# Modify image and tag if --test-release was used\nif [[ \"$TEST_RELEASE\" == \"staging\" ]]; then\n  echo \"test-release specified: $TEST_RELEASE\"\n  # Using bash parameter expansion for potentially safer version increment\n  if [[ \"$DOCKER_IMAGE_VERSION\" =~ ^([0-9]+)\\.([0-9]+)$ ]]; then\n      major=\"${BASH_REMATCH[1]}\"\n      minor=\"${BASH_REMATCH[2]}\"\n      DOCKER_IMAGE_VERSION=\"${major}.$((minor + 1))-test\"\n  else\n      echo \"Warning: Could not parse DOCKER_IMAGE_VERSION ($DOCKER_IMAGE_VERSION) for incrementing.\"\n      # Fallback or alternative logic might be needed here\n      DOCKER_IMAGE_VERSION+=\"-test\" # Simple append as fallback\n  fi\n  # Using bash parameter expansion for safer replacement\n  DOCKER_IMAGE=\"${DOCKER_IMAGE/release/staging}\"\n  echo \"DOCKER_IMAGE_VERSION: $DOCKER_IMAGE_VERSION\"\n  echo \"DOCKER_IMAGE: $DOCKER_IMAGE\"\nfi\n\n# Test whether 1st arg is greater than or equal to the 2nd, when compared as version numbers (bash-only)\nversion_ge () {\n  # Note: implementation is rather crude and will treat missing numbers as `0`\n  # so e.g. \"1\" and \"1.0.0\" compare equal; even worse, \"..1\" is accepted and\n  # less than \"0.0.2\", and the empty string is equal to \"0.0\"\n  local -a V1=(${1//./ })\n  local -a V2=(${2//./ })\n  if (( ${#V1[@]} > ${#V2[@]} )); then\n    local -i len=${#V1[@]}\n  else\n    local -i len=${#V2[@]}\n  fi\n  for i in $(seq 0 ${len}); do\n    if (( \"${V1[$i]:-0}\" < \"${V2[$i]:-0}\")); then\n      return 1  # V1[i] < V2[i]\n    fi\n  done\n  return 0  # V1 >= V2\n}\n\n# Test whether a file was provided and exists, then prepare its mount path\n# and update its path in gcpdiag_args for the container context.\n# The mount path is returned via the global variable MOUNT_RESULT.\nhandle_mount_path () {\n  local FILE=\"$1\"\n  MOUNT_RESULT=\"\"\n\n  if [ -n \"$FILE\" ]; then\n    if [ -f \"$FILE\" ]; then\n      if [[ \"$FILE\" = /* ]]; then\n        # absolute path shall be mounted as is\n        MOUNT_RESULT=\"-v $FILE:$FILE\"\n      else\n        # local path need to be mounted inside root folder\n        MOUNT_RESULT=\"-v $PWD/$FILE:/$FILE\"\n        # We also need to update the path in gcpdiag_args to be absolute\n        # so the container finds it at /<file>\n        for i in \"${!gcpdiag_args[@]}\"; do\n          if [[ \"${gcpdiag_args[$i]}\" == \"$FILE\" ]]; then\n            gcpdiag_args[$i]=\"/$FILE\"\n            break\n          # Handle --arg=file case, ensuring we match the exact value\n          elif [[ \"${gcpdiag_args[$i]}\" == *\"=$FILE\" ]]; then\n            gcpdiag_args[$i]=\"${gcpdiag_args[$i]%%$FILE*}/$FILE\"\n            break\n          fi\n        done\n      fi\n    else\n      return 1\n    fi\n  fi\n  # Success\n  return 0\n}\n# Test whether 1st arg (abs path to mount) was provided and exists, then prepare mount path\n# If no custom mount point was provided, create and mount the DEFAULT_OUTPUT_DIR\n# that will be used inside container with the same path\nhandle_mount_dir() {\n  local DIR_TO_MOUNT=\"$1\"\n  local MOUNT=\"\"\n\n  if [ -z \"$DIR_TO_MOUNT\" ]; then\n    DIR_TO_MOUNT=\"$DEFAULT_OUTPUT_DIR\"\n\n    if [ -z \"$DIR_TO_MOUNT\" ]; then\n      # Return an error code if DIR_TO_MOUNT is empty or does not exist\n      return 1\n    else\n      mkdir -p \"$DIR_TO_MOUNT\"\n    fi\n  elif [ ! -d \"$DIR_TO_MOUNT\" ] && [[ \"$DIR_TO_MOUNT\" = /* ]]; then\n    # Create the directory if it doesn't exist and an absolute path is provided\n    mkdir -p \"$DIR_TO_MOUNT\"\n  fi\n\n  # If it's a directory, mount the entire directory\n  [ -d \"$DIR_TO_MOUNT\" ] && MOUNT=\"-v $DIR_TO_MOUNT:$DIR_TO_MOUNT\"\n  echo \"$MOUNT\"\n  return 0\n}\n\n# Check this script version and compare with the minimum required version\n# defined in the release-version file. This allows us to force an upgrade\n# of the wrapper script.\nif ! version_ge \"$THIS_WRAPPER_VERSION\" \"$WRAPPER_VERSION\"; then\n  echo\n  echo \"## ERROR:\"\n  echo \"## This gcpdiag wrapper script is obsolete (version $THIS_WRAPPER_VERSION, minimum required: $WRAPPER_VERSION).\"\n  echo \"## Please update the wrapper script to the latest version as follows:\"\n  echo\n  echo \"curl https://gcpdiag.dev/gcpdiag.sh >gcpdiag\"\n  echo \"chmod +x gcpdiag\"\n  echo\n  exit 1\nfi\n\n[ -t 0 ] && USE_TTY=\"-it\" || USE_TTY=\"\"\n\n# Ensure necessary host directories exist with correct ownership\nmkdir -p \"$HOME/.cache/gcpdiag\" \\\n         \"$HOME/.cache/gcpdiag-dockerized\" \\\n         \"$HOME/.config/gcloud\"\n\n# Set RUNTIME based on available container runtime cmd\nRUNTIME=\"\" # Initialize RUNTIME\nfor r in $SUPPORTED_RUNTIME; do\n  if command -v \"$r\" >/dev/null; then\n    RUNTIME=\"$r\"\n    break\n  fi\ndone\n\nif [ -z \"$RUNTIME\" ]; then\n  echo >&2 \"ERROR: No container runtime found - supported: $SUPPORTED_RUNTIME\"\n  exit 1\nfi\n\n# Configure Podman if used\nif [ \"$RUNTIME\" = podman ]; then\n  export PODMAN_USERNS=keep-id\nfi\n\n# Prepare config file mount\nCONFIG_MOUNT=\"\"\nMOUNT_RESULT=\"\"\nif [ -n \"$CONFIG_FILE\" ]; then\n    if ! handle_mount_path \"$CONFIG_FILE\"; then\n        echo >&2 # Print errors to stderr\n        echo >&2 \"## ERROR:\"\n        echo >&2 \"## Configuration file: '$CONFIG_FILE' does not exist or is not a regular file!\"\n        echo >&2\n        exit 1\n    fi\n    CONFIG_MOUNT=$MOUNT_RESULT\nfi\n# Prepare auth key mount\nAUTH_KEY_MOUNT=\"\"\nMOUNT_RESULT=\"\"\nif [ -n \"$AUTH_KEY\" ]; then\n    if ! handle_mount_path \"$AUTH_KEY\"; then\n        echo >&2 # Print errors to stderr\n        echo >&2 \"## ERROR:\"\n        echo >&2 \"## Authentication key file: '$AUTH_KEY' does not exist or is not a regular file!\"\n        echo >&2\n        exit 1\n    fi\n    AUTH_KEY_MOUNT=$MOUNT_RESULT\nfi\n\nBUNDLE_SPEC_MOUNT=\"\"\nMOUNT_RESULT=\"\"\nif [ -n \"$BUNDLE_SPEC_FILE\" ]; then\n    if ! handle_mount_path \"$BUNDLE_SPEC_FILE\"; then\n        echo >&2 # Print errors to stderr\n        echo >&2 \"## ERROR:\"\n        echo >&2 \"## Bundle spec file: '$BUNDLE_SPEC_FILE' does not exist or is not a regular file!\"\n        echo >&2\n        exit 1\n    fi\n    BUNDLE_SPEC_MOUNT=$MOUNT_RESULT\nfi\n\n# Prepare report dir mount\nif ! REPORT_DIR_MOUNT=$(handle_mount_dir \"$REPORT_DIR\"); then\n  echo >&2\n  echo >&2 \"## ERROR:\"\n  echo >&2 \"## Error creating report dir: $REPORT_DIR\"\n  echo >&2\n  exit 1\nfi\n\n# shellcheck disable=SC2086\nexec \"$RUNTIME\" run --rm $USE_TTY \\\n  --rm \\\n  -u \"$(id -u):$(id -g)\" \\\n  -e \"USER=$(id -n -u)\" \\\n  -e \"GROUP=$(id -n -g)\" \\\n  -e \"SHELL=/bin/bash\" \\\n  -e HOME -e LANG -e GOOGLE_AUTH_TOKEN -e CLOUD_SHELL \\\n  -v \"$HOME/.cache/gcpdiag-dockerized:$HOME/.cache/gcpdiag\" \\\n  -v \"$HOME/.config/gcloud:$HOME/.config/gcloud\" \\\n  $CONFIG_MOUNT \\\n  $AUTH_KEY_MOUNT \\\n  $BUNDLE_SPEC_MOUNT \\\n  $REPORT_DIR_MOUNT \\\n  \"$DOCKER_IMAGE:$DOCKER_IMAGE_VERSION\" /opt/gcpdiag/bin/gcpdiag \"${gcpdiag_args[@]}\"\n"
  },
  {
    "path": "bin/gcpdiag-mocked",
    "content": "#!/usr/bin/env python3\n\n# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"gcpdiag test script using data from test-data.\"\"\"\n\n# pylint: disable=invalid-name\n\nimport sys\nfrom unittest import mock\n\nfrom gcpdiag import config\nfrom gcpdiag.lint import command as lint_command\nfrom gcpdiag.queries import apis_stub, kubectl_stub\nfrom gcpdiag.queries.generic_api.api_build import generic_api_stub\n\n\ndef noop(*args):\n  del args\n  pass\n\n\n@mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)\n@mock.patch('gcpdiag.hooks.post_lint_hook', new=noop)\n@mock.patch('gcpdiag.queries.kubectl.verify_auth', new=kubectl_stub.verify_auth)\n@mock.patch('gcpdiag.queries.kubectl.check_gke_ingress',\n            new=kubectl_stub.check_gke_ingress)\n@mock.patch(\n    'gcpdiag.queries.generic_api.api_build.get_generic.get_generic_api',\n    new=generic_api_stub.get_generic_api_stub,\n)\ndef main(argv):\n  # A very simple command-line parser to determine what subcommand is called.\n  # Proper argument parsing will be done in the subcommands.\n\n  # make sure we always output UTF-8, even if the terminal falls back to ascii\n  if sys.version_info >= (3, 7):\n    sys.stdout.reconfigure(encoding='utf-8')\n\n  if len(argv) == 1 or argv[1] == '--help' or argv[1] == 'help':\n    print_help()\n  elif argv[1] == 'version' or argv[1] == '--version':\n    print(f'gcpdiag {config.VERSION}\\nCopyright 2021 Google LLC')\n  elif argv[1] == 'lint':\n    # Replace argv[0:1] with only argv[0] so that argparse works correctly.\n    sys.argv.pop(0)\n    sys.argv[0] = 'gcpdiag lint'\n    lint_command.run(argv)\n  else:\n    print(f'ERROR: unknown command {argv[1]}. Use --help for help.',\n          file=sys.stderr)\n    sys.exit(1)\n\n\ndef print_help():\n  print(\"\"\"gcpdiag 🩺 - Diagnostics for Google Cloud Platform\n\nUsage:\n        gcpdiag COMMAND [OPTIONS]\n\nCommands:\n        help     Print this help text.\n        lint     Run diagnostics on GCP projects.\n        version  Print gcpdiag version.\n\nSee: gcpdiag COMMAND --help for command-specific usage.\"\"\")\n\n\nif __name__ == '__main__':\n  main(sys.argv)\n"
  },
  {
    "path": "bin/generate_steps.py",
    "content": "#!/usr/bin/env python3\n\"\"\"Generate a markdown table with all gcpdiag runbook steps.\"\"\"\n\nimport importlib\nimport inspect\nimport os\nimport pathlib\nimport textwrap\nfrom typing import List, Sequence\n\nfrom absl import app, flags\n\nfrom gcpdiag import runbook\nfrom gcpdiag.runbook import constants\n\n_URL_BASE_PREFIX = flags.DEFINE_string(\n    \"url_base_prefix\",\n    \"https://github.com/GoogleCloudPlatform/gcpdiag/tree/main\",\n    \"Base URL prefix for the files in the table.\",\n)\n\n\ndef fetch_and_list_steps(output_file_path: str, base_url_path: str):\n  \"\"\"Fetches all Step subclasses and generates a Markdown table.\"\"\"\n  table_rows = []\n  modules_with_files: List[tuple[str, str]] = []\n  for root, _, files in os.walk(\"gcpdiag/runbook\"):\n    for file in files:\n      if file.endswith(\".py\") and not file.startswith(\"__\"):\n        module_path = os.path.join(root, file)\n        # Prepare path for URL\n        url_path = module_path.replace(\"\\\\\", \"/\")\n        file_url = f\"{base_url_path}/{url_path}\"\n        module_path = module_path.replace(\"/\", \".\")[:-3]\n        modules_with_files.append(\n            (module_path, file_url))  # gcpdiag.runbook.nameofrunbook.nameoffile\n\n  rows_data = []\n  for module_path, file_url in modules_with_files:\n    try:\n      module = importlib.import_module(module_path)\n      file_name = module_path.split(\".\")[-1]\n    except ImportError:\n      continue\n    for _, obj in inspect.getmembers(module,\n                                     inspect.isclass):  # returns Only class\n      if issubclass(obj, runbook.Step) and obj is not runbook.Step:\n        try:\n          step_instance = obj()  # obj of the Class\n          if hasattr(step_instance, \"type\") and isinstance(\n              step_instance.type, constants.StepType):\n            step_type = step_instance.type.value\n          else:\n            step_type = \"ERROR: Invalid Step Type\"\n        except TypeError:\n          step_type = \"ERROR: Could not instantiate Step\"\n        step_id = f\"google.cloud.{obj.id}\"\n\n        rows_data.append({\n            \"file_name\": file_name,\n            \"file_url\": file_url,\n            \"step_name\": obj.__name__,\n            \"step_type\": step_type,\n            \"step_id\": step_id\n        })\n\n  # Sort the rows data\n  rows_data.sort(key=lambda x: (x[\"file_name\"], x[\"step_name\"]))\n\n  for row in rows_data:\n    row_values = {\n        \"file_name\": row[\"file_name\"],\n        \"file_url\": row[\"file_url\"],\n        \"step_name\": row[\"step_name\"],\n        \"step_type\": row[\"step_type\"],\n        \"step_id\": row[\"step_id\"],\n    }\n    table_rows.append(\n        \"|[{file_name}]({file_url}) | **{step_name}** | {step_type} |\"\n        \" `{step_id}` |\".format(**row_values))\n\n  markdown_table = textwrap.dedent(\"\"\"\n        |Runbook name| **Runbook Step** | stepType | `StepId` |\n        |:------------|:----------- |:----------- |:----------- |\n    \"\"\")\n  markdown_table += \"\\n\".join(table_rows)\n\n  # Create the parent directory if it doesn't exist\n  pathlib.Path(output_file_path).parent.mkdir(parents=True, exist_ok=True)\n\n  with open(output_file_path, \"w\", encoding=\"utf-8\") as f:\n    f.write(markdown_table)\n\n\ndef main(argv: Sequence[str]) -> None:\n  if len(argv) > 1:\n    raise app.UsageError(\"Too many command-line arguments.\")\n  output_file = os.path.join(os.path.dirname(os.path.abspath(__file__)),\n                             \"steps_table.md\")\n  base_url = _URL_BASE_PREFIX.value\n  fetch_and_list_steps(output_file_path=output_file, base_url_path=base_url)\n\n\nif __name__ == \"__main__\":\n  app.run(main)\n"
  },
  {
    "path": "bin/json-cleaner",
    "content": "#!/usr/bin/env python3\n\"\"\"Development script to strip out any sensitive data from GCP API responses.\"\"\"\n\n# pylint: disable=invalid-name\n\nimport json\nimport re\nimport sys\n\nclean_maps = {\n    'apigee': {\n        '.caCertificate': 'REDACTED',\n        '.apigeeProjectId': 'REDACTED',\n    },\n    'cloudrun': {\n        '.services.[].creator': 'REDACTED',\n        '.services.[].binaryAuthorization': 'REDACTED'\n    },\n    'cloudfunctions': {\n        '.cloudfunctions.[].sourceToken': 'REDACTED'\n    },\n    'appengine_versions': {\n        '.versions.[].createdBy': 'REDACTED'\n    },\n    'clusters': {\n        '.clusters.[].endpoint': '192.168.1.1',\n        '.clusters.[].masterAuth.clusterCaCertificate': 'REDACTED',\n    },\n    'instances': {\n        # not really sensitive, but we don't care about it...\n        '.items.[].disks.[].shieldedInstanceInitialState.dbs.[].content':\n            'REDACTED',\n        '.items.[].disks.[].shieldedInstanceInitialState.dbxs.[].content':\n            'REDACTED',\n        '.items.[].disks.[].shieldedInstanceInitialState.keks.[].content':\n            'REDACTED',\n        '.items.[].disks.[].shieldedInstanceInitialState.pk.content':\n            'REDACTED',\n        '.items.[].fingerprint':\n            'REDACTED',\n        '.items.[].metadata.fingerprint':\n            'REDACTED',\n        '.items.[].metadata.items.configure-sh':\n            'REDACTED',\n        '.items.[].metadata.items.kube-env':\n            'REDACTED',\n        '.items.[].metadata.items.user-data':\n            'REDACTED',\n        '.items.[].networkInterfaces.[].fingerprint':\n            'REDACTED',\n        '.items.[].tags.fingerprint':\n            'REDACTED',\n    },\n    'compute-templates': {\n        '.items.[].properties.metadata.fingerprint': 'REDACTED',\n        '.items.[].properties.metadata.items.configure-sh': 'REDACTED',\n        '.items.[].properties.metadata.items.kube-env': 'REDACTED',\n        '.items.[].properties.metadata.items.user-data': 'REDACTED',\n    },\n    'compute-project': {\n        '.commonInstanceMetadata.items.sshKeys': 'REDACTED'\n    },\n    'compute-network': {\n        '.peerings.[].network':\n            'https://www.googleapis.com/compute/v1/projects/'\n            'REDACTED/global/networks/servicenetworking'\n    },\n    'service-accounts': {\n        '.accounts.[].oauth2ClientId': 'REDACTED'\n    },\n    'other': {}\n}\n\n\ndef traverse_and_clean(path: str, data, clean_map: dict):\n  if path in clean_map:\n    return clean_map[path]\n\n  if isinstance(data, dict):\n    for key in list(data.keys()):\n      key_path = path + '.' + key\n      data[key] = traverse_and_clean(key_path, data[key], clean_map)\n  elif isinstance(data, list):\n\n    for i in range(len(data)):\n      # special case: \"key\", \"value\" list -> lookup as dict\n      if isinstance(data[i], dict) and 'key' in data[i] and 'value' in data[i]:\n        key_path = path + '.' + data[i]['key']\n        if key_path in clean_map:\n          data[i]['value'] = clean_map[key_path]\n      else:\n        data[i] = traverse_and_clean(path + '.[]', data[i], clean_map)\n  elif isinstance(data, str):\n    # obfuscate real email addresses\n    data = re.sub(r'[a-z]+@google\\.com', 'testuser@example.com', data)\n  return data\n\n\ndef main():\n  data = json.load(sys.stdin)\n\n  if len(sys.argv) != 2:\n    print('usage: json-cleaner RESOURCE_TYPE')\n    sys.exit(1)\n\n  resource_type = sys.argv[1]\n  if resource_type not in clean_maps:\n    print('first argument must be one of: ' +\n          ', '.join(sorted(clean_maps.keys())),\n          file=sys.stderr)\n    sys.exit(1)\n\n  # transform using clean_maps\n  data = traverse_and_clean('', data, clean_maps[resource_type])\n  print(json.dumps(data, indent=2, sort_keys=True))\n\n\nmain()\n"
  },
  {
    "path": "bin/pipenv-dockerized",
    "content": "#!/bin/bash\n\nif [ \"$#\" == \"0\" ]; then\n  echo \"usage: $0 PYTHON_VERSION COMMAND ARG1 ARG2 ARG3\" >&2\n  exit 1\nfi\nPYTHON_VERSION=\"$1\"\nIMAGE_TAG=\"$2\"\nshift 2\n\nIMAGE=\"us-docker.pkg.dev/gcpdiag-dist/common/gcpdiag-pipenv-python-${PYTHON_VERSION}:${IMAGE_TAG}\"\n\nUSE_TTY=\"\"\nCWD=$(pwd)\n[ -t 0 ] && USE_TTY=\"-it\"\n\n#mkdir -p \"$HOME/.cache/pre-commit\"\n#mkdir -p \"$HOME/.cache/pipenv\"\n#mkdir -p \"$HOME/.local/share/virtualenv\"\nmkdir -p \"$HOME/.config/gcloud\"\nmkdir -p .pipenv-dockerized/venv-$PYTHON_VERSION\nmkdir -p .pipenv-dockerized/home\nmkdir -p .venv\nexec docker run $USE_TTY \\\n  --rm \\\n  -u \"$(id -u):$(id -g)\" \\\n  -e \"USER=$(id -n -u)\" \\\n  -e \"GROUP=$(id -n -g)\" \\\n  -e \"HOME=$HOME\" \\\n  -e \"LANG=$LANG\" \\\n  -e \"SHELL=/bin/bash\" \\\n  -e \"KOKORO_BUILD_NUMBER=$KOKORO_BUILD_NUMBER\" \\\n  -v \"$CWD:$CWD\" \\\n  -v \"$HOME/.config/gcloud:$HOME/.config/gcloud\" \\\n  -v \"$CWD/.pipenv-dockerized/home:$HOME\" \\\n  -v \"$CWD/.pipenv-dockerized/venv-$PYTHON_VERSION:$CWD/.venv\" \\\n  -w \"$CWD\" \\\n  $IMAGE pipenv \"$@\"\n"
  },
  {
    "path": "bin/precommit-gke-eol-file.sh",
    "content": "#!/bin/sh\n\n# WARNING: This script is deprecated and may be removed in a future release.\n# Please use 'gcpdiag/queries/gke.get_release_schedule' instead.\n\n# Checks if gcpdiag/lint/gke/eol.yaml file contains the up to date list of\n# GKE Releases with corresponding EOL (end-of-life) dates\n\nif ! ./gcpdiag/lint/gke/eol_parser.sh | diff - gcpdiag/lint/gke/eol.yaml > /dev/null\nthen\n  echo 'GKE eol.yaml file is outdated. Please run `make gke-eol-file` from the top level directory'\n  exit 1\nfi\n"
  },
  {
    "path": "bin/precommit-required-files",
    "content": "#!/usr/bin/env python3\n\"\"\"Verify that the lint rules are documented in the website.\"\"\"\n\n# pylint: disable=invalid-name\n\nimport importlib\nimport inspect\nimport os\nimport pathlib\nimport re\nimport subprocess\nimport sys\nimport textwrap\nfrom os import path\nfrom typing import List\n\nfrom jinja2 import TemplateNotFound, UndefinedError\n\nfrom gcpdiag import lint, runbook\nfrom gcpdiag.product_list import get_product_list\nfrom gcpdiag.rule_classes import get_rule_classes\nfrom gcpdiag.runbook import DiagnosticTree, util\n\n#Lint Rules Doc\nWEBSITE_RULES_DIR = 'website/content/en/rules'\nLINT_RULES_DIR = 'gcpdiag/lint'\n# Runbook Docs\nWEBSITE_RUNBOOK_DIR = 'website/content/en/runbook'\n\n# update also pyinstaller/hook-gcpdiag.lint.py\nPRODUCTS = get_product_list()\n\nPRODUCTS_EXCEPTIONS = ['gcpdiag', 'gcp']\n\nRULE_CLASSES = get_rule_classes()\n\n\ndef usage():\n  print('usage: gcpdiag-website-rules FILE1.py FILE2.py', file=sys.stderr)\n  sys.exit(1)\n\n\ndef gen_rule_page(rule, rule_page_path):\n  # Create product directory\n  try:\n    class_dir = pathlib.Path(f'{WEBSITE_RULES_DIR}/{rule.product}')\n    class_dir.mkdir()\n    with open(class_dir / '_index.md', 'w', encoding='utf-8') as f:\n      print(textwrap.dedent(f'''\\\n          ---\n          title: \"{rule.product.upper()}\"\n          linkTitle: \"{rule.product}\"\n          type: docs\n          ---\n          '''),\n            file=f)\n  except FileExistsError:\n    pass\n\n  # Create rule class directory\n  try:\n    class_dir = pathlib.Path(\n        f'{WEBSITE_RULES_DIR}/{rule.product}/{rule.rule_class}')\n    class_dir.mkdir()\n  except FileExistsError:\n    pass\n\n  with open(rule_page_path, 'w', encoding='utf-8') as f:\n    print(textwrap.dedent(f'''\\\n    ---\n    title: \"{rule.product}/{rule.rule_class}/{rule.rule_id}\"\n    linkTitle: \"{rule.rule_class}/{rule.rule_id}\"\n    weight: 1\n    type: docs\n    description: >\n      {rule.short_desc}\n    ---\n\n    **Product**: {PRODUCTS[rule.product]}\\\\\n    **Rule class**: {rule.rule_class} - {RULE_CLASSES[str(rule.rule_class)]}\n\n    ### Description\n    '''),\n          file=f)\n    print(rule.long_desc, file=f)\n    print(textwrap.dedent('''\\\n\n    ### Remediation\n\n    ### Further information'''),\n          file=f)\n\n\ndef check_runbook(files):\n  \"\"\"Check runbook files to automatically update or generate docs for DTs and it steps.\"\"\"\n  # Initialize variables to hold the diagnostic tree and in-scope steps.\n  inscope_dts: List[DiagnosticTree] = []\n  in_scope_steps = {}\n\n  # Process each file path provided.\n  for file_path in files:\n    # Use regular expression to parse relevant information from the file path.\n    match = re.match(r'gcpdiag/runbook/([^/]+)/(.*)\\.py', file_path)\n    if not match:\n      continue\n\n    rule_dir, rule_basename = match.groups()\n    rule_module_name = f'gcpdiag.runbook.{rule_dir}.{rule_basename}'\n    try:\n      module = importlib.import_module(rule_module_name)\n    except ImportError:\n      continue\n\n    mod_dt_count = 0\n    for name, obj in inspect.getmembers(module, inspect.isclass):\n      # Handle DiagnosticTree classes.\n      if issubclass(\n          obj, runbook.DiagnosticTree) and obj is not runbook.DiagnosticTree:\n        mod_dt_count += 1\n        if mod_dt_count > 1:\n          raise RuntimeError(\n              f'Multiple Diagnostic Trees found in {file_path}\\n'\n              f'For readability each Diagnostic Tree should have it own file'\n              f'Only keep custom steps for this Diagnostic Tree in the file')\n        inscope_dts.append(obj)\n\n      # Store Step classes that have possibly been modified.\n      elif issubclass(obj, runbook.Step) and obj is not runbook.Step:\n        in_scope_steps[name] = obj\n\n  for dt in inscope_dts:\n    gen_dt_rule_and_steps_page(dt(None), in_scope_steps)\n\n\ndef gen_dt_rule_and_steps_page(dt, in_scope_steps):\n  \"\"\"Generate documentation pages for a diagnostic tree and its steps.\n\n  Args:\n    dt: The diagnostic tree object to process.\n    in_scope_steps: A dictionary of steps that are in scope for documentation.\n  \"\"\"\n  if dt.product not in PRODUCTS and dt.product not in PRODUCTS_EXCEPTIONS:\n    print(\n        f'ERROR: Product \"{dt.product}\" for Diagnostic Tree '\n        f'\"{dt.__class__.__name__}\" is not defined in the \"PRODUCTS\" '\n        'dictionary.',\n        file=sys.stderr)\n    print(\n        'To resolve this pre-commit error, you must add the new product to '\n        '\"bin/precommit-required-files.py\".',\n        file=sys.stderr)\n    print(\n        'Specifically, update the `PRODUCTS` dictionary in the '\n        '`get_product_list()` function.',\n        file=sys.stderr)\n    print(\n        'Example: \"your_new_product\": \"[Your New Product Name]\"'\n        '(https://cloud.google.com/your-new-product-url)',\n        file=sys.stderr)\n    sys.exit(1)\n\n  # Expand the full diagnostic tree from the AST nodes.\n  # Used to draw graphviz images and document the child steps.\n  builder = runbook.ExpandTreeFromAst(dt.__class__)\n  expanded_dt = builder.visit_ast_nodes(dt.build_tree)\n\n  # Function to recursively traverse and generate documentation for all steps in the tree.\n  def traverse_all_steps(step):\n    gen_step_page(step)\n    # Remove generated steps from the in_scope_steps dict.\n    in_scope_steps.pop(step.__class__.__name__, None)\n    for child in step.steps:\n      traverse_all_steps(child)\n\n  traverse_all_steps(expanded_dt.start)\n  # Generate pages for any remaining steps not directly part of the diagnostic tree.\n  for step in in_scope_steps.values():\n    gen_step_page(step())\n\n  # Create dt product directory if doesn't exist and sub folder images.\n  try:\n    dt_dir = pathlib.Path(f'{WEBSITE_RUNBOOK_DIR}/diagnostic-trees')\n    # Make both diagnostic-trees\n    dt_dir.mkdir(parents=True)\n    with open(dt_dir / '_index.md', 'w', encoding='utf-8') as f:\n      print(textwrap.dedent('''\\\n          ---\n          title: \"Debugging Trees\"\n          linkTitle: \"Debugging Trees\"\n          type: docs\n          weight: 1\n          ---\n          '''),\n            file=f,\n            end='')\n  except FileExistsError:\n    pass\n\n  # Create dt product directory if doesn't exist and sub folder images.\n  try:\n    product_dt_dir = pathlib.Path(\n        f'{WEBSITE_RUNBOOK_DIR}/diagnostic-trees/{dt.product}')\n    # Make both diagnostic-trees\n    product_dt_dir.mkdir(parents=True)\n    with open(product_dt_dir / '_index.md', 'w', encoding='utf-8') as f:\n      print(textwrap.dedent(f'''\\\n          ---\n          title: \"{dt.product.upper()}\"\n          linkTitle: \"{dt.product}\"\n          type: docs\n          weight: 2\n          ---\n\n          All diagnostic tree available in {dt.product}\n          '''),\n            file=f,\n            end='')\n  except FileExistsError:\n    pass\n\n  try:\n    img_dir = pathlib.Path(f'{str(product_dt_dir)}/images')\n    img_dir.mkdir(parents=True)\n  except FileExistsError:\n    pass\n\n  context = {\n      'rule': expanded_dt,\n      'util': util,\n      'title': util.pascal_case_to_title(dt.__class__.__name__),\n      'PRODUCTS': PRODUCTS,\n      'ROOT_DIR': WEBSITE_RUNBOOK_DIR\n  }\n  # Render the template with the context\n  rendered_content = runbook.util.render_template('bin/templates',\n                                                  'diagnostic-tree.jinja',\n                                                  context).rstrip('\\n')\n  dt_path = f'{dt_dir}/{expanded_dt.name}.md'\n  md_page_content = ''\n  if os.path.exists(dt_path):\n    # Check if the content changed.\n    md_page_content = runbook.util.render_template(dt_dir,\n                                                   f'{expanded_dt.name}.md', {})\n  if rendered_content != md_page_content:\n    with open(dt_path, 'w', encoding='utf-8') as f:\n      f.write(rendered_content)\n      f.write('\\n')\n\n\ndef gen_step_page(step: runbook.Step):\n  \"\"\"Generates a Markdown page for a given diagnostic step.\n\n  Creates a Markdown file for the specified step in the\n  diagnostic process, using a template to render the step's details into a\n  human-readable format. It ensures that each step has its own dedicated page.\n\n  Args:\n    step (runbook.Step): The diagnostic step instance to generate the page.\n  \"\"\"\n  if step.product not in PRODUCTS and step.product not in PRODUCTS_EXCEPTIONS:\n    print(\n        f'ERROR: Product \"{step.product}\" for Diagnostic Tree '\n        f'\"{step.__class__.__name__}\" is not defined in the \"PRODUCTS\" '\n        f'dictionary.',\n        file=sys.stderr)\n    print(\n        'To resolve this pre-commit error, you must add the new product to '\n        '\"bin/precommit-required-files.py\".',\n        file=sys.stderr)\n    print(\n        'Specifically, update the `PRODUCTS` dictionary in the '\n        '`get_product_list()` function.',\n        file=sys.stderr)\n    print(\n        'Example: \"your_new_product\": \"[Your New Product Name]\"'\n        '(https://cloud.google.com/your-new-product-url)',\n        file=sys.stderr)\n    sys.exit(1)  # Exit with an error to prevent further issues\n\n  try:\n    steps_dir = pathlib.Path(f'{WEBSITE_RUNBOOK_DIR}/steps')\n    steps_dir.mkdir(parents=True)\n    with open(steps_dir / '_index.md', 'w', encoding='utf-8') as f:\n      print(textwrap.dedent('''\\\n          ---\n          title: \"All Steps\"\n          linkTitle: \"steps\"\n          type: docs\n          weight: 1\n          ---\n\n          All steps available in the runbook by products\n          '''),\n            file=f,\n            end='')\n  except FileExistsError:\n    pass\n\n  try:\n    product_steps_dir = pathlib.Path(\n        f'{WEBSITE_RUNBOOK_DIR}/steps/{step.product}')\n    product_steps_dir.mkdir()\n    with open(product_steps_dir / '_index.md', 'w', encoding='utf-8') as f:\n      print(textwrap.dedent(f'''\\\n          ---\n          title: \"{step.product.upper()}\"\n          linkTitle: \"{step.product}\"\n          type: docs\n          weight: 2\n          ---\n\n          All steps available in {step.product}\n          '''),\n            file=f,\n            end='')\n  except FileExistsError:\n    pass\n\n  msgs = {}\n  try:\n    filepath, block_prefix = step.template.split('::')\n    msgs = runbook.util.load_template_block(module_name=step.__module__,\n                                            file_name=filepath.strip(),\n                                            block_name=block_prefix.strip())\n  except UndefinedError as e:\n    print(f'Encounted a block error while parsing {e} used in step {step.id}')\n  except TemplateNotFound as e:\n    print(\n        f'Step \"{step.id}\" is using a non-existent jinja file with the name: {e}'\n    )\n  except AttributeError as e:\n    pass\n  except ValueError as e:\n    print('Ensure that your template string uses '\n          f'the following format \"template_file::block_name\":{e}')\n\n  context = {'step': step, 'msgs': msgs, 'PRODUCTS': PRODUCTS}\n  step_page = f'{product_steps_dir}/{step.doc_file_name}.md'\n  rendered_content = runbook.util.render_template('bin/templates/',\n                                                  'steps.jinja', context)\n  # For some reason there are \\n at the end despite striping new line and block lines\n  # Many strip it if any still exists at the end.\n  rendered_content = rendered_content.rstrip('\\n')\n  md_page_content = ''\n\n  if os.path.exists(step_page):\n    # Check if the content changed.\n    md_page_content = runbook.util.render_template(product_steps_dir,\n                                                   f'{step.doc_file_name}.md',\n                                                   {})\n\n  if rendered_content != md_page_content:\n    with open(step_page, 'w', encoding='utf-8') as f:\n      f.write(rendered_content)\n      f.write('\\n')\n\n\ndef check_rule_page(rule):\n  rule_page_path = f'{WEBSITE_RULES_DIR}/{rule.product}/{rule.rule_class}/{rule.rule_id}.md'\n  # check that rule page exists and is staged\n  lsfiles = subprocess.run(['git', 'ls-files', '-s', rule_page_path],\n                           stdout=subprocess.PIPE,\n                           check=False)\n  if len(lsfiles.stdout) > 0:\n    return True\n  elif path.exists(rule_page_path):\n    print(f'rule page not staged: {rule_page_path}', file=sys.stderr)\n    return False\n  else:\n    print(f'generated initial rule page: {rule_page_path}', file=sys.stderr)\n    gen_rule_page(rule, rule_page_path)\n    return False\n\n\ndef check_rule_snapshot(rule):\n  rule_snapshot_path = (f'{LINT_RULES_DIR}/{rule.product}/snapshots/'\n                        f'{rule.rule_class}_{rule.rule_id}.txt')\n\n  # check that rule snapshot exists and is staged\n  lsfiles = subprocess.run(['git', 'ls-files', '-s', rule_snapshot_path],\n                           stdout=subprocess.PIPE,\n                           check=False)\n  if len(lsfiles.stdout) > 0:\n    return True\n  elif path.exists(rule_snapshot_path):\n    print(f'rule snapshot not staged: {rule_snapshot_path}', file=sys.stderr)\n    return False\n  else:\n    print(\n        f'run \"make snapshots\" to generate rule snapshot: {rule_snapshot_path} ',\n        file=sys.stderr)\n    return False\n\n\ndef check(files):\n  rules_repo = lint.LintRuleRepository()\n  seen_rule_ids = {}\n  exit_fail = False\n  for arg in sorted(files):\n    # only process gcpdiag lint rules\n    m = re.match(r'gcpdiag/lint/([^/]+)/(.*)\\.py', arg)\n    if not m:\n      continue\n    rule_dir = m.group(1)\n    rule_basename = m.group(2)\n    rule_module_name = f'gcpdiag.lint.{rule_dir}.{rule_basename}'\n    try:\n      rule = rules_repo.get_rule_by_module_name(rule_module_name)\n      # Verify that the rule id is unique\n      if str(rule) in seen_rule_ids:\n        print(f'ERROR: rule id {str(rule)} is not unique!', file=sys.stderr)\n        exit_fail = True\n      seen_rule_ids[str(rule)] = 1\n      if not check_rule_page(rule):\n        exit_fail = True\n      if not check_rule_snapshot(rule):\n        exit_fail = True\n    except lint.NotLintRule:\n      continue\n  if exit_fail:\n    sys.exit(1)\n\n\nif __name__ == '__main__':\n  if len(sys.argv) < 2:\n    usage()\n  elif sys.argv[1] == 'lint':\n    check(sys.argv[2:])\n  elif sys.argv[1] == 'runbook':\n    check_runbook(sys.argv[2:])\n"
  },
  {
    "path": "bin/precommit-required-files-wrapper",
    "content": "#!/bin/sh\n\n# wrapper to call precommit-required-files with correct environment set\n# (this is particularly problematic in GitHub Actions and I couldn't get\n# it to work without this wrapper)\n\n# note: the script assumes to be running in the root directory of the git\n# repository\n\nexport PATH=$(pipenv --venv)/bin:$PATH\nexport PYTHONPATH=$(pwd)\npython bin/precommit-required-files \"$@\"\n"
  },
  {
    "path": "bin/precommit-todo-annotations",
    "content": "#!/bin/sh\n\n# An hook script to verify changes to be committed do not contain\n# any 'TODO:' comments.\n\n# To bypass this hook, use the \"--no-verify\" parameter when committing.\n\n# Redirect output to stderr.\nexec 1>&2\n\n# Define colors\nRED='\\033[0;31m'\nNC='\\033[0m'\n\n# Define what term will be searched for.\nSEARCH_TERM_TODO=\"TODO:\"\n\n# Check for the presence of the SEARCH_TERM in updated files.\nif [[ $(git diff --cached | grep -E \"^\\+\" | grep -v '+++ b/' | cut -c 2-) == *$SEARCH_TERM_TODO* ]]\nthen\n\tprintf \"${RED}Error:${NC} Found ${SEARCH_TERM_TODO} in attempted commit.\\n\"\n\tprintf \"Please remove all occurrences of ${SEARCH_TERM_TODO} before committing.\\n\"\n\texit 1\nfi\n"
  },
  {
    "path": "bin/runbook-starter-code-generator",
    "content": "#!/usr/bin/env python3\n\"\"\"Generate runbook starter code\"\"\"\n\nimport os\nimport re\nimport subprocess\nimport sys\nimport textwrap\nfrom datetime import datetime\n\n# update pyinstaller/hook-gcpdiag-runbook.py when adding any new modules\nSUPPORTED_PRODUCTS = {\n    'apigee', 'billing', 'bigquery', 'cdn', 'cloudrun', 'crm', 'composer',\n    'datafusion', 'dataflow', 'dataproc', 'kms', 'gar', 'gke', 'gcb', 'gcf',\n    'gae', 'gce', 'iam', 'interconnect', 'gcs', 'lb', 'logs', 'tpu', 'pubsub',\n    'sql', 'vertex', 'vpc', 'nat', 'monitoring', 'vpn'\n}\n\n\ndef _get_active_gcloud_project():\n  \"\"\"Best effort check to retrieve the project id currently configured on gcloud.\"\"\"\n  try:\n    # Run the gcloud command to get the current project\n    result = subprocess.run(['gcloud', 'config', 'get-value', 'project'],\n                            check=True,\n                            stdout=subprocess.PIPE,\n                            stderr=subprocess.PIPE,\n                            text=True)\n    project_id = result.stdout.strip()\n  except (subprocess.CalledProcessError, OSError, FileNotFoundError):\n    return None\n  else:\n    print(\n        f'Found project {_color(project_id,\"blue\")}; will use it arg for `--project`'\n    )\n    return project_id\n\n\ndef _color(text, color):\n  colors = {\n      'green': '\\033[92m',\n      'blue': '\\033[94m',\n      'magenta': '\\033[95m',\n      'cyan': '\\033[96m',\n      'reset': '\\033[0m'\n  }\n  return f\"{colors[color]}{text}{colors['reset']}\"\n\n\ndef _git_operations(runbook_name):\n  try:\n    current_branch = _get_current_branch()\n    _stash_changes(runbook_name)\n\n    if current_branch not in (runbook_name, 'master'):\n      _switch_to_master(current_branch)\n      current_branch = _get_current_branch()\n\n    _update_repository(current_branch)\n\n    if current_branch != runbook_name:\n      _create_new_or_switch_branch(runbook_name)\n      current_branch = _get_current_branch()\n\n    print(\n        f'You can run `git stash pop` if you want the stashed changes in branch {runbook_name}'\n    )\n  except subprocess.CalledProcessError as e:\n    print('An error occurred during git operations:')\n    print(e)\n  except OSError:\n    pass\n\n\ndef _get_current_branch():\n  result = subprocess.run(['git', 'rev-parse', '--abbrev-ref', 'HEAD'],\n                          check=True,\n                          text=True,\n                          capture_output=True)\n  branch = result.stdout.strip()\n  print(f'Currently on branch \"{branch}\"')\n  return branch\n\n\ndef _stash_changes(runbook_name):\n  try:\n    # Attempt to stash changes\n    result = subprocess.run([\n        'git', 'stash', 'push', '-m',\n        f'Auto-stash during {runbook_name} generation'\n    ],\n                            text=True,\n                            capture_output=True,\n                            check=True).stdout.strip()\n    if 'no local changes to save' in result.lower():\n      print('No changes to stash.')\n    else:\n      print(\n          'Detected uncommitted changes in the working directory and stashed them!'\n      )\n\n  except subprocess.CalledProcessError as e:\n    print('Failed to stash changes:')\n    print(e)\n\n\ndef _switch_to_master(current_branch):\n  print(\n      f'Switching from branch \"{current_branch}\" to \"master\" to sync environment.'\n  )\n  subprocess.run(['git', 'checkout', 'master'],\n                 check=True,\n                 text=True,\n                 capture_output=True).stdout.strip()\n\n\ndef _update_repository(current_branch):\n  print(\n      f'On \"{current_branch}\" branch; syncing with remote branch `origin/master`.'\n  )\n  subprocess.run(['git', 'pull', 'origin', 'master', '--rebase'],\n                 check=True,\n                 text=True,\n                 capture_output=True)\n  print('Repository updated with: `git pull origin master --rebase`')\n\n\ndef _create_new_or_switch_branch(runbook_name):\n  command = ['git', 'checkout', '-b', runbook_name]\n  # First, check if the branch already exists\n  existing_branches = subprocess.run(['git', 'branch', '--list', runbook_name],\n                                     check=False,\n                                     text=True,\n                                     capture_output=True).stdout.strip()\n\n  # If the branch already exists, print a message and do not attempt to create it\n  if existing_branches:\n    print(\n        f'Branch \"{runbook_name}\" already exists. Switching to existing branch')\n    command.remove('-b')\n  else:\n    print(f'Creating new branch \"{runbook_name}\".')\n  try:\n    # Attempt to create the branch since it does not exist\n    subprocess.run(command, check=True, text=True,\n                   capture_output=True).stdout.strip()\n  except subprocess.CalledProcessError as e:\n    # Handle possible errors during branch creation (e.g., due to local modifications)\n    print('Failed to create new branch:')\n    print(e)\n\n\ndef check_and_activate_shell(command, py_path, name, prepenv):\n  # Check if the VIRTUAL_ENV environment variable is set\n  print(_color('\\nPreparing your python virtual environment', 'blue'))\n  print(_color('=========================================', 'blue'))\n  if 'VIRTUAL_ENV' in os.environ:\n    print('Virtual environment is already activated. Generating starter code.')\n    gen_starter_code({'name': name, 'prepenv': prepenv})\n  else:\n    # Check current directory and subfolders\n    current_directory = os.getcwd()\n    if 'gcpdiag' in current_directory and os.path.isdir(\n        'gcpdiag') and os.path.isdir('bin'):\n      print('Attempting to activate the virtual environment for \"gcpdiag\".')\n      print('Virtual environment activated.')\n      gen_starter_code({'name': name, 'prepenv': prepenv})\n      if not _activate_virtual_environment():\n        print('Failed to activate the venv. Manually run it `pipenv shell`.')\n    else:\n      print(\n          'Not in an appropriate location to activate the virtual environment.')\n      print('Current directory:', current_directory)\n\n\ndef _activate_virtual_environment():\n  try:\n    # Using 'pipenv run' instead of 'pipenv shell' as it's better suited for scripts\n    subprocess.run('pipenv shell', shell=True, check=True)\n    return True\n  except subprocess.CalledProcessError:\n    return False\n\n\ndef gen_starter_code(args_: dict):\n  # Extract product and Runbook ID\n  runbook_name = args_['name']\n  parts = runbook_name.split('/')\n  product = parts[0]\n  id_ = parts[1]\n\n  if product not in SUPPORTED_PRODUCTS:\n    print(f\"Product '{product}' is not supported yet or registered.\", file=sys.stderr)\n    print('Please ensure this product is added to all necessary configuration files.', file=sys.stderr)\n    print(f'Specifically, you need to update:')\n    print(f\"  1. The `SUPPORTED_PRODUCTS` set in '{__file__}'\", file=sys.stderr)\n    print(f\"  2. The `PRODUCTS` dictionary in 'bin/precommit-required-files.py'\", file=sys.stderr)\n    print(\"Example for `bin/precommit-required-files.py`: 'your_new_product': '[Your New Product Name](https://cloud.google.com/your-new-product-url)'\", file=sys.stderr)\n    return\n\n  if args_['prepenv']:\n    print(_color('\\nPreparing your local git repository', 'blue'))\n    print(_color('===================================', 'blue'))\n    _git_operations(runbook_name)\n  dir_path = f'gcpdiag/runbook/{product}'\n  filename = id_.replace('-', '_')\n  dt_name = re.sub(r'(^|-)([a-z0-9])', lambda match: match.group(2).upper(),\n                   id_)\n\n  # Create necessary directories\n  os.makedirs(os.path.join(dir_path, 'templates'), exist_ok=True)\n  os.makedirs(os.path.join(dir_path, 'snapshots'), exist_ok=True)\n  open(os.path.join(dir_path, '__init__.py'), 'a', encoding='utf-8').close()\n\n  file_path = os.path.join(dir_path, f'{filename}.py')\n  print(_color('\\nGenerating Your Runbook', 'blue'))\n  print(_color('=======================', 'blue'))\n  if not os.path.exists(file_path):\n    # Process the runbook starter code template\n    with open('bin/templates/runbook-starter-code.py.tpl',\n              'r',\n              encoding='utf-8') as template_file:\n      template_content = template_file.read()\n\n    template_content = template_content.replace('TreeName', dt_name)\n    template_content = template_content.replace('[YEAR]',\n                                                str(datetime.now().year))\n\n    with open(file_path, 'w', encoding='utf-8') as output_file:\n      output_file.write(template_content)\n      print(\n          f'Created runbook in {_color(f\"{dir_path}/{filename}.py\", \"magenta\")}. Happy Coding! 💻 🚀'\n      )\n  else:\n    print(\n        f'{file_path} already exists. Will not be generating starter code for: {runbook_name}'\n    )\n    print('Verify if runbook already exist')\n    print(f'Doc: https://gcpdiag.dev/runbook/diagnostic-trees/{product}/{id_}')\n    print(f'File: gcpdiag/runbook/{product}/{id_}.py')\n\n  print(_color('\\nVerifying & Generating runbook product files', 'blue'))\n  print(_color('============================================', 'blue'))\n  # Process additional template files\n  for file in [\n      'constants', 'flags', 'generalized_steps', 'generalized_steps_test'\n  ]:\n    file_path = os.path.join(dir_path, f'{file}.py')\n    if not os.path.exists(file_path):\n      with open('bin/templates/python-file.py.tpl', 'r',\n                encoding='utf-8') as template_file:\n        content = template_file.read()\n\n      content = content.replace('[YEAR]', str(datetime.now().year))\n\n      with open(file_path, 'w', encoding='utf-8') as output_file:\n        output_file.write(content)\n        print(f'Created {file_path}.')\n      if file in ('constants', 'flags'):\n        with open(file_path, 'a', encoding='utf-8') as output_file:\n          output_file.write(\n              textwrap.dedent(f'''\\\n                            # pylint: disable=unused-wildcard-import, wildcard-import\n                            from gcpdiag.runbook.iam.{file} import *\n                            '''))\n  print('Ok!')\n\n  print(_color('\\nGenerating Test Class', 'blue'))\n  print(_color('=====================', 'blue'))\n  file_path = os.path.join(dir_path, f'{filename}_test.py')\n  if not os.path.exists(file_path):\n    # Process the runbook starter code template\n    with open('bin/templates/runbook-test.py.tpl', 'r',\n              encoding='utf-8') as template_file:\n      template_content = template_file.read()\n\n    template_content = template_content.replace('TreeName', dt_name)\n    template_content = template_content.replace('PRODUCT', product)\n    template_content = template_content.replace('RULE', runbook_name)\n    template_content = template_content.replace('[YEAR]',\n                                                str(datetime.now().year))\n\n    with open(file_path, 'w', encoding='utf-8') as output_file:\n      output_file.write(template_content)\n      print(f'Created runbook test in {_color(f\"{file_path}\", \"magenta\")}. ✅ 🎉')\n  else:\n    print(f'Strange, test class {file_path} already exists.')\n\n  print(_color(f'\\nHow to run {runbook_name} in local development', 'blue'))\n  print(_color('===============================================', 'blue'))\n  proj = _get_active_gcloud_project() or 'REPLACE_PROJECT_ID'\n  print('Run the runbook in interactive mode')\n  print(\n      _color(\n          f'bin/gcpdiag runbook {runbook_name} -p custom_flag={product} --project={proj}',\n          'green'))\n  print(\n      f'Use {_color(\"--auto\", \"magenta\")} to run the runbook in a non-interactive mode'\n  )\n  print(\n      _color(\n          f'bin/gcpdiag runbook {runbook_name} -p custom_flag={product} --project={proj} --auto',\n          'green'))\n\n\ndef _parse_kwargs(argv):\n  kwargs = {}\n  for arg in argv:\n    if '=' in arg:\n      key, value = arg.split('=', 1)\n      kwargs[key] = value.strip()\n  return kwargs\n\n\nif __name__ == '__main__':\n  args = _parse_kwargs(sys.argv[1::])\n  args['command'] = sys.argv[1]\n  if args.get('prepenv').lower() in ('0', 'n', 'no', 'false', ''):\n    args['prepenv'] = False\n    gen_starter_code(args)\n  elif args.get('prepenv').lower() in ('1', 'y', 'yes', 'true'):\n    args['prepenv'] = True\n    check_and_activate_shell(**args)\n  else:\n    print(\n        'Usage: python runbook-starter-code-generator name=product/runbook-id prepenv=true'\n    )\n"
  },
  {
    "path": "bin/steps_table.md",
    "content": "\n|Runbook name| **Runbook Step** | stepType | `StepId` |\n|:------------|:----------- |:----------- |:----------- |\n|[bgp_down_flap](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/interconnect/bgp_down_flap.py) | **BgpDownFlapEnd** | END | `google.cloud.gcpdiag.runbook.interconnect.bgp_down_flap.BgpDownFlapEnd` |\n|[bgp_down_flap](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/interconnect/bgp_down_flap.py) | **BgpDownFlapStart** | START | `google.cloud.gcpdiag.runbook.interconnect.bgp_down_flap.BgpDownFlapStart` |\n|[bgp_down_flap](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/interconnect/bgp_down_flap.py) | **CheckBgpDown** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.interconnect.bgp_down_flap.CheckBgpDown` |\n|[bgp_down_flap](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/interconnect/bgp_down_flap.py) | **CheckBgpFlap** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.interconnect.bgp_down_flap.CheckBgpFlap` |\n|[bgp_down_flap](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/interconnect/bgp_down_flap.py) | **CheckCloudRouterMaintenance** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.interconnect.bgp_down_flap.CheckCloudRouterMaintenance` |\n|[bgp_down_flap](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/interconnect/bgp_down_flap.py) | **CheckInterconnectMaintenance** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.interconnect.bgp_down_flap.CheckInterconnectMaintenance` |\n|[cluster_autoscaler](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/cluster_autoscaler.py) | **CaDisabledAnnotation** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.cluster_autoscaler.CaDisabledAnnotation` |\n|[cluster_autoscaler](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/cluster_autoscaler.py) | **CaFailedToEvictPods** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.cluster_autoscaler.CaFailedToEvictPods` |\n|[cluster_autoscaler](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/cluster_autoscaler.py) | **CaInstanceTimeout** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.cluster_autoscaler.CaInstanceTimeout` |\n|[cluster_autoscaler](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/cluster_autoscaler.py) | **CaIpSpaceExhausted** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.cluster_autoscaler.CaIpSpaceExhausted` |\n|[cluster_autoscaler](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/cluster_autoscaler.py) | **CaMinResourceLimitExceeded** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.cluster_autoscaler.CaMinResourceLimitExceeded` |\n|[cluster_autoscaler](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/cluster_autoscaler.py) | **CaMinSizeReached** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.cluster_autoscaler.CaMinSizeReached` |\n|[cluster_autoscaler](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/cluster_autoscaler.py) | **CaNoPlaceToMovePods** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.cluster_autoscaler.CaNoPlaceToMovePods` |\n|[cluster_autoscaler](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/cluster_autoscaler.py) | **CaNotSafeToEvictAnnotation** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.cluster_autoscaler.CaNotSafeToEvictAnnotation` |\n|[cluster_autoscaler](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/cluster_autoscaler.py) | **CaOutOfResources** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.cluster_autoscaler.CaOutOfResources` |\n|[cluster_autoscaler](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/cluster_autoscaler.py) | **CaPodControllerNotFound** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.cluster_autoscaler.CaPodControllerNotFound` |\n|[cluster_autoscaler](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/cluster_autoscaler.py) | **CaPodKubeSystemUnmovable** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.cluster_autoscaler.CaPodKubeSystemUnmovable` |\n|[cluster_autoscaler](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/cluster_autoscaler.py) | **CaPodNotEnoughPdb** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.cluster_autoscaler.CaPodNotEnoughPdb` |\n|[cluster_autoscaler](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/cluster_autoscaler.py) | **CaPodUnexpectedError** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.cluster_autoscaler.CaPodUnexpectedError` |\n|[cluster_autoscaler](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/cluster_autoscaler.py) | **CaPodsNotBackedByController** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.cluster_autoscaler.CaPodsNotBackedByController` |\n|[cluster_autoscaler](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/cluster_autoscaler.py) | **CaQuotaExceeded** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.cluster_autoscaler.CaQuotaExceeded` |\n|[cluster_autoscaler](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/cluster_autoscaler.py) | **CaServiceAccountDeleted** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.cluster_autoscaler.CaServiceAccountDeleted` |\n|[cluster_autoscaler](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/cluster_autoscaler.py) | **ClusterAutoscalerEnd** | END | `google.cloud.gcpdiag.runbook.gke.cluster_autoscaler.ClusterAutoscalerEnd` |\n|[cluster_autoscaler](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/cluster_autoscaler.py) | **ClusterAutoscalerStart** | START | `google.cloud.gcpdiag.runbook.gke.cluster_autoscaler.ClusterAutoscalerStart` |\n|[cluster_creation](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/cluster_creation.py) | **CheckClusterNetwork** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.dataproc.cluster_creation.CheckClusterNetwork` |\n|[cluster_creation](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/cluster_creation.py) | **CheckInitScriptFailure** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.dataproc.cluster_creation.CheckInitScriptFailure` |\n|[cluster_creation](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/cluster_creation.py) | **CheckPrivateGoogleAccess** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.dataproc.cluster_creation.CheckPrivateGoogleAccess` |\n|[cluster_creation](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/cluster_creation.py) | **CheckSharedVPCRoles** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.dataproc.cluster_creation.CheckSharedVPCRoles` |\n|[cluster_creation](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/cluster_creation.py) | **ClusterCreationEnd** | END | `google.cloud.gcpdiag.runbook.dataproc.cluster_creation.ClusterCreationEnd` |\n|[cluster_creation](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/cluster_creation.py) | **ClusterCreationQuota** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.dataproc.cluster_creation.ClusterCreationQuota` |\n|[cluster_creation](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/cluster_creation.py) | **ClusterCreationStart** | START | `google.cloud.gcpdiag.runbook.dataproc.cluster_creation.ClusterCreationStart` |\n|[cluster_creation](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/cluster_creation.py) | **ClusterCreationStockout** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.dataproc.cluster_creation.ClusterCreationStockout` |\n|[cluster_creation](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/cluster_creation.py) | **ClusterDetailsDependencyGateway** | GATEWAY | `google.cloud.gcpdiag.runbook.dataproc.cluster_creation.ClusterDetailsDependencyGateway` |\n|[cluster_creation](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/cluster_creation.py) | **InternalIpGateway** | GATEWAY | `google.cloud.gcpdiag.runbook.dataproc.cluster_creation.InternalIpGateway` |\n|[cluster_creation](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/cluster_creation.py) | **ServiceAccountExists** | GATEWAY | `google.cloud.gcpdiag.runbook.dataproc.cluster_creation.ServiceAccountExists` |\n|[failed_deployments](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gcf/failed_deployments.py) | **DefaultServiceAccountCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gcf.failed_deployments.DefaultServiceAccountCheck` |\n|[failed_deployments](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gcf/failed_deployments.py) | **FailedDeploymentEndStep** | END | `google.cloud.gcpdiag.runbook.gcf.failed_deployments.FailedDeploymentEndStep` |\n|[failed_deployments](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gcf/failed_deployments.py) | **FailedDeploymentsStart** | START | `google.cloud.gcpdiag.runbook.gcf.failed_deployments.FailedDeploymentsStart` |\n|[failed_deployments](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gcf/failed_deployments.py) | **FunctionGlobalScopeCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gcf.failed_deployments.FunctionGlobalScopeCheck` |\n|[failed_deployments](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gcf/failed_deployments.py) | **LocationConstraintCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gcf.failed_deployments.LocationConstraintCheck` |\n|[failed_deployments](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gcf/failed_deployments.py) | **UserServiceAccountCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gcf.failed_deployments.UserServiceAccountCheck` |\n|[failed_streaming_pipeline](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataflow/failed_streaming_pipeline.py) | **FailedStreamingPipelineEnd** | END | `google.cloud.gcpdiag.runbook.dataflow.failed_streaming_pipeline.FailedStreamingPipelineEnd` |\n|[failed_streaming_pipeline](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataflow/failed_streaming_pipeline.py) | **FailedStreamingPipelineStart** | START | `google.cloud.gcpdiag.runbook.dataflow.failed_streaming_pipeline.FailedStreamingPipelineStart` |\n|[failed_streaming_pipeline](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataflow/failed_streaming_pipeline.py) | **JobGraphIsConstructed** | GATEWAY | `google.cloud.gcpdiag.runbook.dataflow.failed_streaming_pipeline.JobGraphIsConstructed` |\n|[failed_streaming_pipeline](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataflow/failed_streaming_pipeline.py) | **JobIsStreaming** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.dataflow.failed_streaming_pipeline.JobIsStreaming` |\n|[failed_streaming_pipeline](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataflow/failed_streaming_pipeline.py) | **JobLogsVisible** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.dataflow.failed_streaming_pipeline.JobLogsVisible` |\n|[failed_streaming_pipeline](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataflow/failed_streaming_pipeline.py) | **JobState** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.dataflow.failed_streaming_pipeline.JobState` |\n|[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/generalized_steps.py) | **CheckClusterNetworkConnectivity** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.dataproc.generalized_steps.CheckClusterNetworkConnectivity` |\n|[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/logs/generalized_steps.py) | **CheckIssueLogEntry** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.logs.generalized_steps.CheckIssueLogEntry` |\n|[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/generalized_steps.py) | **CheckLogsExist** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.dataproc.generalized_steps.CheckLogsExist` |\n|[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/vertex/generalized_steps.py) | **CheckWorkbenchInstanceCustomScripts** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.vertex.generalized_steps.CheckWorkbenchInstanceCustomScripts` |\n|[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/vertex/generalized_steps.py) | **CheckWorkbenchInstanceExternalIpDisabled** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.vertex.generalized_steps.CheckWorkbenchInstanceExternalIpDisabled` |\n|[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/vertex/generalized_steps.py) | **CheckWorkbenchInstanceIsUsingLatestEnvVersion** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.vertex.generalized_steps.CheckWorkbenchInstanceIsUsingLatestEnvVersion` |\n|[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/vertex/generalized_steps.py) | **CheckWorkbenchInstancePerformance** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.vertex.generalized_steps.CheckWorkbenchInstancePerformance` |\n|[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/vertex/generalized_steps.py) | **CheckWorkbenchInstanceSyslogsJupyterRunningOnPort8080** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.vertex.generalized_steps.CheckWorkbenchInstanceSyslogsJupyterRunningOnPort8080` |\n|[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/vertex/generalized_steps.py) | **CheckWorkbenchInstanceUsingOfficialImage** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.vertex.generalized_steps.CheckWorkbenchInstanceUsingOfficialImage` |\n|[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/generalized_steps.py) | **GceVpcConnectivityCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gce.generalized_steps.GceVpcConnectivityCheck` |\n|[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/generalized_steps.py) | **HighVmCpuUtilization** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gce.generalized_steps.HighVmCpuUtilization` |\n|[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/generalized_steps.py) | **HighVmDiskUtilization** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gce.generalized_steps.HighVmDiskUtilization` |\n|[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/generalized_steps.py) | **HighVmMemoryUtilization** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gce.generalized_steps.HighVmMemoryUtilization` |\n|[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gcp/generalized_steps.py) | **HumanTask** | MANUAL STEP | `google.cloud.gcpdiag.runbook.gcp.generalized_steps.HumanTask` |\n|[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/iam/generalized_steps.py) | **IamPolicyCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.iam.generalized_steps.IamPolicyCheck` |\n|[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/nat/generalized_steps.py) | **NatDroppedReceivedPacketCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.nat.generalized_steps.NatDroppedReceivedPacketCheck` |\n|[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/nat/generalized_steps.py) | **NatIpExhaustionCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.nat.generalized_steps.NatIpExhaustionCheck` |\n|[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/nat/generalized_steps.py) | **NatResourceExhaustionCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.nat.generalized_steps.NatResourceExhaustionCheck` |\n|[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/crm/generalized_steps.py) | **OrgPolicyCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.crm.generalized_steps.OrgPolicyCheck` |\n|[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/pubsub/generalized_steps.py) | **PubsubQuotas** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.pubsub.generalized_steps.PubsubQuotas` |\n|[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gcp/generalized_steps.py) | **ResourceAttributeCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gcp.generalized_steps.ResourceAttributeCheck` |\n|[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gcp/generalized_steps.py) | **ServiceApiStatusCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gcp.generalized_steps.ServiceApiStatusCheck` |\n|[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/monitoring/generalized_steps.py) | **TimeSeriesCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.monitoring.generalized_steps.TimeSeriesCheck` |\n|[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataflow/generalized_steps.py) | **ValidSdk** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.dataflow.generalized_steps.ValidSdk` |\n|[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/vpc/generalized_steps.py) | **VmExternalIpConnectivityTest** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.vpc.generalized_steps.VmExternalIpConnectivityTest` |\n|[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/iam/generalized_steps.py) | **VmHasAnActiveServiceAccount** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.iam.generalized_steps.VmHasAnActiveServiceAccount` |\n|[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/generalized_steps.py) | **VmHasOpsAgent** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gce.generalized_steps.VmHasOpsAgent` |\n|[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/generalized_steps.py) | **VmLifecycleState** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gce.generalized_steps.VmLifecycleState` |\n|[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/generalized_steps.py) | **VmMetadataCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gce.generalized_steps.VmMetadataCheck` |\n|[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/generalized_steps.py) | **VmScope** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gce.generalized_steps.VmScope` |\n|[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/generalized_steps.py) | **VmSerialLogsCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gce.generalized_steps.VmSerialLogsCheck` |\n|[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/vpc/generalized_steps.py) | **VpcFirewallCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.vpc.generalized_steps.VpcFirewallCheck` |\n|[generalized_steps](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/vpc/generalized_steps.py) | **VpcRouteCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.vpc.generalized_steps.VpcRouteCheck` |\n|[gke_ip_masq_standard](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/gke_ip_masq_standard.py) | **CheckConfigMap** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.gke_ip_masq_standard.CheckConfigMap` |\n|[gke_ip_masq_standard](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/gke_ip_masq_standard.py) | **CheckDaemonSet** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.gke_ip_masq_standard.CheckDaemonSet` |\n|[gke_ip_masq_standard](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/gke_ip_masq_standard.py) | **CheckDestinationIP** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.gke_ip_masq_standard.CheckDestinationIP` |\n|[gke_ip_masq_standard](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/gke_ip_masq_standard.py) | **CheckNodeIP** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.gke_ip_masq_standard.CheckNodeIP` |\n|[gke_ip_masq_standard](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/gke_ip_masq_standard.py) | **CheckPodIP** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.gke_ip_masq_standard.CheckPodIP` |\n|[gke_ip_masq_standard](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/gke_ip_masq_standard.py) | **GkeIpMasqStandardEnd** | END | `google.cloud.gcpdiag.runbook.gke.gke_ip_masq_standard.GkeIpMasqStandardEnd` |\n|[gke_ip_masq_standard](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/gke_ip_masq_standard.py) | **GkeIpMasqStandardStart** | START | `google.cloud.gcpdiag.runbook.gke.gke_ip_masq_standard.GkeIpMasqStandardStart` |\n|[gke_ip_masq_standard](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/gke_ip_masq_standard.py) | **Nodeproblem** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.gke_ip_masq_standard.Nodeproblem` |\n|[guestos_bootup](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/guestos_bootup.py) | **CloudInitChecks** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.gce.guestos_bootup.CloudInitChecks` |\n|[guestos_bootup](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/guestos_bootup.py) | **GuestosBootupStart** | START | `google.cloud.gcpdiag.runbook.gce.guestos_bootup.GuestosBootupStart` |\n|[image_pull](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/image_pull.py) | **ImageConnectionTimeout** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.image_pull.ImageConnectionTimeout` |\n|[image_pull](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/image_pull.py) | **ImageConnectionTimeoutRestrictedPrivate** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.image_pull.ImageConnectionTimeoutRestrictedPrivate` |\n|[image_pull](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/image_pull.py) | **ImageDnsIssue** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.image_pull.ImageDnsIssue` |\n|[image_pull](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/image_pull.py) | **ImageForbidden** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.image_pull.ImageForbidden` |\n|[image_pull](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/image_pull.py) | **ImageNotFound** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.image_pull.ImageNotFound` |\n|[image_pull](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/image_pull.py) | **ImageNotFoundInsufficientScope** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.image_pull.ImageNotFoundInsufficientScope` |\n|[image_pull](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/image_pull.py) | **ImagePullEnd** | END | `google.cloud.gcpdiag.runbook.gke.image_pull.ImagePullEnd` |\n|[image_pull](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/image_pull.py) | **ImagePullStart** | START | `google.cloud.gcpdiag.runbook.gke.image_pull.ImagePullStart` |\n|[ip_exhaustion](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/ip_exhaustion.py) | **IpExhaustionEnd** | END | `google.cloud.gcpdiag.runbook.gke.ip_exhaustion.IpExhaustionEnd` |\n|[ip_exhaustion](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/ip_exhaustion.py) | **IpExhaustionStart** | START | `google.cloud.gcpdiag.runbook.gke.ip_exhaustion.IpExhaustionStart` |\n|[ip_exhaustion](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/ip_exhaustion.py) | **NodeIpRangeExhaustion** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.ip_exhaustion.NodeIpRangeExhaustion` |\n|[ip_exhaustion](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/ip_exhaustion.py) | **PodIpRangeExhaustion** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.ip_exhaustion.PodIpRangeExhaustion` |\n|[job_permissions](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataflow/job_permissions.py) | **DataflowPermissionsEnd** | END | `google.cloud.gcpdiag.runbook.dataflow.job_permissions.DataflowPermissionsEnd` |\n|[job_permissions](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataflow/job_permissions.py) | **DataflowResourcePermissions** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.dataflow.job_permissions.DataflowResourcePermissions` |\n|[job_permissions](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataflow/job_permissions.py) | **DataflowUserAccountPermissions** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.dataflow.job_permissions.DataflowUserAccountPermissions` |\n|[job_permissions](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataflow/job_permissions.py) | **DataflowWorkerServiceAccountPermissions** | GATEWAY | `google.cloud.gcpdiag.runbook.dataflow.job_permissions.DataflowWorkerServiceAccountPermissions` |\n|[job_permissions](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataflow/job_permissions.py) | **StartStep** | START | `google.cloud.gcpdiag.runbook.StartStep` |\n|[latency](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/latency.py) | **LatencyEnd** | END | `google.cloud.gcpdiag.runbook.lb.latency.LatencyEnd` |\n|[latency](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/latency.py) | **LbBackendLatencyCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.lb.latency.LbBackendLatencyCheck` |\n|[latency](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/latency.py) | **LbErrorRateCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.lb.latency.LbErrorRateCheck` |\n|[latency](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/latency.py) | **LbLatencyStart** | START | `google.cloud.gcpdiag.runbook.lb.latency.LbLatencyStart` |\n|[latency](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/latency.py) | **LbRequestCountCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.lb.latency.LbRequestCountCheck` |\n|[logs](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/logs.py) | **ClusterLevelLoggingEnabled** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.logs.ClusterLevelLoggingEnabled` |\n|[logs](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/logs.py) | **LoggingApiEnabled** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.logs.LoggingApiEnabled` |\n|[logs](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/logs.py) | **LoggingWriteApiQuotaExceeded** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.logs.LoggingWriteApiQuotaExceeded` |\n|[logs](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/logs.py) | **LogsEnd** | END | `google.cloud.gcpdiag.runbook.gke.logs.LogsEnd` |\n|[logs](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/logs.py) | **LogsStart** | START | `google.cloud.gcpdiag.runbook.gke.logs.LogsStart` |\n|[logs](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/logs.py) | **NodePoolCloudLoggingAccessScope** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.logs.NodePoolCloudLoggingAccessScope` |\n|[logs](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/logs.py) | **ServiceAccountLoggingPermission** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.logs.ServiceAccountLoggingPermission` |\n|[node_auto_repair](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/node_auto_repair.py) | **NodeAutoRepairEnd** | END | `google.cloud.gcpdiag.runbook.gke.node_auto_repair.NodeAutoRepairEnd` |\n|[node_auto_repair](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/node_auto_repair.py) | **NodeAutoRepairStart** | START | `google.cloud.gcpdiag.runbook.gke.node_auto_repair.NodeAutoRepairStart` |\n|[node_auto_repair](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/node_auto_repair.py) | **NodeDiskFull** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.node_auto_repair.NodeDiskFull` |\n|[node_auto_repair](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/node_auto_repair.py) | **NodeNotReady** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.node_auto_repair.NodeNotReady` |\n|[node_auto_repair](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/node_auto_repair.py) | **UnallocatableGpu** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.node_auto_repair.UnallocatableGpu` |\n|[node_auto_repair](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/node_auto_repair.py) | **UnallocatableTpu** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.node_auto_repair.UnallocatableTpu` |\n|[node_bootstrapping](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/node_bootstrapping.py) | **NodeBootstrappingEnd** | END | `google.cloud.gcpdiag.runbook.gke.node_bootstrapping.NodeBootstrappingEnd` |\n|[node_bootstrapping](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/node_bootstrapping.py) | **NodeBootstrappingStart** | START | `google.cloud.gcpdiag.runbook.gke.node_bootstrapping.NodeBootstrappingStart` |\n|[node_bootstrapping](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/node_bootstrapping.py) | **NodeInsertCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.node_bootstrapping.NodeInsertCheck` |\n|[node_bootstrapping](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/node_bootstrapping.py) | **NodeRegistrationSuccess** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.node_bootstrapping.NodeRegistrationSuccess` |\n|[node_unavailability](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/node_unavailability.py) | **LiveMigration** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.node_unavailability.LiveMigration` |\n|[node_unavailability](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/node_unavailability.py) | **NodePoolUpgrade** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.node_unavailability.NodePoolUpgrade` |\n|[node_unavailability](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/node_unavailability.py) | **NodeRemovedByAutoscaler** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.node_unavailability.NodeRemovedByAutoscaler` |\n|[node_unavailability](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/node_unavailability.py) | **NodeUnavailabilityEnd** | END | `google.cloud.gcpdiag.runbook.gke.node_unavailability.NodeUnavailabilityEnd` |\n|[node_unavailability](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/node_unavailability.py) | **NodeUnavailabilityStart** | START | `google.cloud.gcpdiag.runbook.gke.node_unavailability.NodeUnavailabilityStart` |\n|[node_unavailability](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/node_unavailability.py) | **PreemptionCondition** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.node_unavailability.PreemptionCondition` |\n|[ops_agent](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/ops_agent.py) | **CheckSerialPortLogging** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.gce.ops_agent.CheckSerialPortLogging` |\n|[ops_agent](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/ops_agent.py) | **InvestigateLoggingMonitoring** | GATEWAY | `google.cloud.gcpdiag.runbook.gce.ops_agent.InvestigateLoggingMonitoring` |\n|[ops_agent](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/ops_agent.py) | **OpsAgentEnd** | END | `google.cloud.gcpdiag.runbook.gce.ops_agent.OpsAgentEnd` |\n|[ops_agent](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/ops_agent.py) | **OpsAgentStart** | START | `google.cloud.gcpdiag.runbook.gce.ops_agent.OpsAgentStart` |\n|[ops_agent](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/ops_agent.py) | **VmHasAServiceAccount** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gce.ops_agent.VmHasAServiceAccount` |\n|[public_nat_ip_allocation_failed](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/nat/public_nat_ip_allocation_failed.py) | **NatAllocationFailedCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.nat.public_nat_ip_allocation_failed.NatAllocationFailedCheck` |\n|[public_nat_ip_allocation_failed](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/nat/public_nat_ip_allocation_failed.py) | **NatIpAllocationAutoOnly** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.nat.public_nat_ip_allocation_failed.NatIpAllocationAutoOnly` |\n|[public_nat_ip_allocation_failed](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/nat/public_nat_ip_allocation_failed.py) | **NatIpAllocationFailedEnd** | END | `google.cloud.gcpdiag.runbook.nat.public_nat_ip_allocation_failed.NatIpAllocationFailedEnd` |\n|[public_nat_ip_allocation_failed](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/nat/public_nat_ip_allocation_failed.py) | **NatIpAllocationFailedStart** | START | `google.cloud.gcpdiag.runbook.nat.public_nat_ip_allocation_failed.NatIpAllocationFailedStart` |\n|[public_nat_ip_allocation_failed](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/nat/public_nat_ip_allocation_failed.py) | **NatIpAllocationManualOnly** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.nat.public_nat_ip_allocation_failed.NatIpAllocationManualOnly` |\n|[public_nat_ip_allocation_failed](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/nat/public_nat_ip_allocation_failed.py) | **NatIpAllocationMethodCheck** | GATEWAY | `google.cloud.gcpdiag.runbook.nat.public_nat_ip_allocation_failed.NatIpAllocationMethodCheck` |\n|[pull_subscription_delivery](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/pubsub/pull_subscription_delivery.py) | **PullRate** | GATEWAY | `google.cloud.gcpdiag.runbook.pubsub.pull_subscription_delivery.PullRate` |\n|[pull_subscription_delivery](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/pubsub/pull_subscription_delivery.py) | **PullSubscriptionDeliveryEnd** | END | `google.cloud.gcpdiag.runbook.pubsub.pull_subscription_delivery.PullSubscriptionDeliveryEnd` |\n|[pull_subscription_delivery](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/pubsub/pull_subscription_delivery.py) | **PullSubscriptionDeliveryStart** | START | `google.cloud.gcpdiag.runbook.pubsub.pull_subscription_delivery.PullSubscriptionDeliveryStart` |\n|[pull_subscription_delivery](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/pubsub/pull_subscription_delivery.py) | **ThroughputQualification** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.pubsub.pull_subscription_delivery.ThroughputQualification` |\n|[resource_quotas](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/resource_quotas.py) | **ClusterVersion** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.resource_quotas.ClusterVersion` |\n|[resource_quotas](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/resource_quotas.py) | **ResourceQuotaExceeded** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gke.resource_quotas.ResourceQuotaExceeded` |\n|[resource_quotas](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/resource_quotas.py) | **ResourceQuotasEnd** | END | `google.cloud.gcpdiag.runbook.gke.resource_quotas.ResourceQuotasEnd` |\n|[resource_quotas](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gke/resource_quotas.py) | **ResourceQuotasStart** | START | `google.cloud.gcpdiag.runbook.gke.resource_quotas.ResourceQuotasStart` |\n|[serial_log_analyzer](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/serial_log_analyzer.py) | **AnalysingSerialLogsEnd** | END | `google.cloud.gcpdiag.runbook.gce.serial_log_analyzer.AnalysingSerialLogsEnd` |\n|[serial_log_analyzer](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/serial_log_analyzer.py) | **CloudInitChecks** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.gce.serial_log_analyzer.CloudInitChecks` |\n|[serial_log_analyzer](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/serial_log_analyzer.py) | **SerialLogAnalyzerStart** | START | `google.cloud.gcpdiag.runbook.gce.serial_log_analyzer.SerialLogAnalyzerStart` |\n|[service_deployment](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/cloudrun/service_deployment.py) | **ContainerFailedToStartStep** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.cloudrun.service_deployment.ContainerFailedToStartStep` |\n|[service_deployment](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/cloudrun/service_deployment.py) | **ImageWasNotFoundStep** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.cloudrun.service_deployment.ImageWasNotFoundStep` |\n|[service_deployment](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/cloudrun/service_deployment.py) | **NoPermissionForImageStep** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.cloudrun.service_deployment.NoPermissionForImageStep` |\n|[service_deployment](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/cloudrun/service_deployment.py) | **ServiceDeploymentCodeStep** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.cloudrun.service_deployment.ServiceDeploymentCodeStep` |\n|[service_deployment](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/cloudrun/service_deployment.py) | **ServiceDeploymentStart** | START | `google.cloud.gcpdiag.runbook.cloudrun.service_deployment.ServiceDeploymentStart` |\n|[spark_job_failures](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/spark_job_failures.py) | **CheckAutoscalingPolicy** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.dataproc.spark_job_failures.CheckAutoscalingPolicy` |\n|[spark_job_failures](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/spark_job_failures.py) | **CheckBQConnector** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.dataproc.spark_job_failures.CheckBQConnector` |\n|[spark_job_failures](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/spark_job_failures.py) | **CheckClusterVersion** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.dataproc.spark_job_failures.CheckClusterVersion` |\n|[spark_job_failures](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/spark_job_failures.py) | **CheckGCPause** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.dataproc.spark_job_failures.CheckGCPause` |\n|[spark_job_failures](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/spark_job_failures.py) | **CheckGCSConnector** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.dataproc.spark_job_failures.CheckGCSConnector` |\n|[spark_job_failures](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/spark_job_failures.py) | **CheckIfJobFailed** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.dataproc.spark_job_failures.CheckIfJobFailed` |\n|[spark_job_failures](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/spark_job_failures.py) | **CheckJobThrottling** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.dataproc.spark_job_failures.CheckJobThrottling` |\n|[spark_job_failures](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/spark_job_failures.py) | **CheckKillingOrphanedApplication** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.dataproc.spark_job_failures.CheckKillingOrphanedApplication` |\n|[spark_job_failures](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/spark_job_failures.py) | **CheckMasterOOM** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.dataproc.spark_job_failures.CheckMasterOOM` |\n|[spark_job_failures](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/spark_job_failures.py) | **CheckPermissions** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.dataproc.spark_job_failures.CheckPermissions` |\n|[spark_job_failures](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/spark_job_failures.py) | **CheckPortExhaustion** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.dataproc.spark_job_failures.CheckPortExhaustion` |\n|[spark_job_failures](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/spark_job_failures.py) | **CheckPreemptible** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.dataproc.spark_job_failures.CheckPreemptible` |\n|[spark_job_failures](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/spark_job_failures.py) | **CheckPythonImportFailure** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.dataproc.spark_job_failures.CheckPythonImportFailure` |\n|[spark_job_failures](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/spark_job_failures.py) | **CheckSWPreemption** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.dataproc.spark_job_failures.CheckSWPreemption` |\n|[spark_job_failures](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/spark_job_failures.py) | **CheckShuffleFailures** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.dataproc.spark_job_failures.CheckShuffleFailures` |\n|[spark_job_failures](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/spark_job_failures.py) | **CheckShuffleServiceKill** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.dataproc.spark_job_failures.CheckShuffleServiceKill` |\n|[spark_job_failures](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/spark_job_failures.py) | **CheckStackdriverSetting** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.dataproc.spark_job_failures.CheckStackdriverSetting` |\n|[spark_job_failures](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/spark_job_failures.py) | **CheckTaskNotFound** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.dataproc.spark_job_failures.CheckTaskNotFound` |\n|[spark_job_failures](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/spark_job_failures.py) | **CheckWorkerDiskUsageIssue** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.dataproc.spark_job_failures.CheckWorkerDiskUsageIssue` |\n|[spark_job_failures](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/spark_job_failures.py) | **CheckWorkerOOM** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.dataproc.spark_job_failures.CheckWorkerOOM` |\n|[spark_job_failures](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/spark_job_failures.py) | **CheckYarnRuntimeException** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.dataproc.spark_job_failures.CheckYarnRuntimeException` |\n|[spark_job_failures](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/spark_job_failures.py) | **DataProcClusterExists** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.dataproc.spark_job_failures.DataProcClusterExists` |\n|[spark_job_failures](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/spark_job_failures.py) | **JobExists** | START | `google.cloud.gcpdiag.runbook.dataproc.spark_job_failures.JobExists` |\n|[spark_job_failures](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/dataproc/spark_job_failures.py) | **SparkJobEnd** | END | `google.cloud.gcpdiag.runbook.dataproc.spark_job_failures.SparkJobEnd` |\n|[ssh](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/ssh.py) | **GceFirewallAllowsSsh** | GATEWAY | `google.cloud.gcpdiag.runbook.gce.ssh.GceFirewallAllowsSsh` |\n|[ssh](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/ssh.py) | **GcpSshPermissions** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.gce.ssh.GcpSshPermissions` |\n|[ssh](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/ssh.py) | **LinuxGuestOsChecks** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.gce.ssh.LinuxGuestOsChecks` |\n|[ssh](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/ssh.py) | **OsLoginStatusCheck** | GATEWAY | `google.cloud.gcpdiag.runbook.gce.ssh.OsLoginStatusCheck` |\n|[ssh](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/ssh.py) | **PosixUserHasValidSshKeyCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gce.ssh.PosixUserHasValidSshKeyCheck` |\n|[ssh](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/ssh.py) | **SshEnd** | END | `google.cloud.gcpdiag.runbook.gce.ssh.SshEnd` |\n|[ssh](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/ssh.py) | **SshInBrowserCheck** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.gce.ssh.SshInBrowserCheck` |\n|[ssh](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/ssh.py) | **SshStart** | START | `google.cloud.gcpdiag.runbook.gce.ssh.SshStart` |\n|[ssh](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/ssh.py) | **VmGuestOsType** | GATEWAY | `google.cloud.gcpdiag.runbook.gce.ssh.VmGuestOsType` |\n|[ssh](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/ssh.py) | **VmPerformanceChecks** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.gce.ssh.VmPerformanceChecks` |\n|[ssh](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/ssh.py) | **WindowsGuestOsChecks** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.gce.ssh.WindowsGuestOsChecks` |\n|[ssl_certificates](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/ssl_certificates.py) | **AnalyzeCertificateStatus** | GATEWAY | `google.cloud.gcpdiag.runbook.lb.ssl_certificates.AnalyzeCertificateStatus` |\n|[ssl_certificates](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/ssl_certificates.py) | **AnalyzeDomainStatuses** | GATEWAY | `google.cloud.gcpdiag.runbook.lb.ssl_certificates.AnalyzeDomainStatuses` |\n|[ssl_certificates](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/ssl_certificates.py) | **AnalyzeFailedCaaCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.lb.ssl_certificates.AnalyzeFailedCaaCheck` |\n|[ssl_certificates](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/ssl_certificates.py) | **AnalyzeFailedNotVisibleDomains** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.lb.ssl_certificates.AnalyzeFailedNotVisibleDomains` |\n|[ssl_certificates](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/ssl_certificates.py) | **AnalyzeProvisioningDomains** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.lb.ssl_certificates.AnalyzeProvisioningDomains` |\n|[ssl_certificates](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/ssl_certificates.py) | **AnalyzeRateLimitedDomains** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.lb.ssl_certificates.AnalyzeRateLimitedDomains` |\n|[ssl_certificates](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/ssl_certificates.py) | **CheckCertificateAttachment** | GATEWAY | `google.cloud.gcpdiag.runbook.lb.ssl_certificates.CheckCertificateAttachment` |\n|[ssl_certificates](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/ssl_certificates.py) | **CheckProvisioningTime** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.lb.ssl_certificates.CheckProvisioningTime` |\n|[ssl_certificates](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/ssl_certificates.py) | **SslCertificatesEnd** | END | `google.cloud.gcpdiag.runbook.lb.ssl_certificates.SslCertificatesEnd` |\n|[ssl_certificates](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/ssl_certificates.py) | **SslCertificatesStart** | START | `google.cloud.gcpdiag.runbook.lb.ssl_certificates.SslCertificatesStart` |\n|[ssl_certificates](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/ssl_certificates.py) | **VerifyDnsRecords** | GATEWAY | `google.cloud.gcpdiag.runbook.lb.ssl_certificates.VerifyDnsRecords` |\n|[ssl_certificates](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/ssl_certificates.py) | **VerifyForwardingRulesPort** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.lb.ssl_certificates.VerifyForwardingRulesPort` |\n|[ssl_certificates](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/ssl_certificates.py) | **VerifyNoCertificateMapConflict** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.lb.ssl_certificates.VerifyNoCertificateMapConflict` |\n|[unhealthy_backends](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/unhealthy_backends.py) | **AnalyzeLatestHealthCheckLog** | GATEWAY | `google.cloud.gcpdiag.runbook.lb.unhealthy_backends.AnalyzeLatestHealthCheckLog` |\n|[unhealthy_backends](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/unhealthy_backends.py) | **AnalyzeTimeoutHealthCheckLog** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.lb.unhealthy_backends.AnalyzeTimeoutHealthCheckLog` |\n|[unhealthy_backends](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/unhealthy_backends.py) | **AnalyzeUnhealthyHealthCheckLog** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.lb.unhealthy_backends.AnalyzeUnhealthyHealthCheckLog` |\n|[unhealthy_backends](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/unhealthy_backends.py) | **AnalyzeUnknownHealthCheckLog** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.lb.unhealthy_backends.AnalyzeUnknownHealthCheckLog` |\n|[unhealthy_backends](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/unhealthy_backends.py) | **CheckPastHealthCheckSuccess** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.lb.unhealthy_backends.CheckPastHealthCheckSuccess` |\n|[unhealthy_backends](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/unhealthy_backends.py) | **CheckVmPerformance** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.lb.unhealthy_backends.CheckVmPerformance` |\n|[unhealthy_backends](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/unhealthy_backends.py) | **UnhealthyBackendsEnd** | END | `google.cloud.gcpdiag.runbook.lb.unhealthy_backends.UnhealthyBackendsEnd` |\n|[unhealthy_backends](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/unhealthy_backends.py) | **UnhealthyBackendsStart** | START | `google.cloud.gcpdiag.runbook.lb.unhealthy_backends.UnhealthyBackendsStart` |\n|[unhealthy_backends](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/unhealthy_backends.py) | **ValidateBackendServicePortConfiguration** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.lb.unhealthy_backends.ValidateBackendServicePortConfiguration` |\n|[unhealthy_backends](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/unhealthy_backends.py) | **ValidateBackendServiceProtocolConfiguration** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.lb.unhealthy_backends.ValidateBackendServiceProtocolConfiguration` |\n|[unhealthy_backends](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/unhealthy_backends.py) | **VerifyFirewallRules** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.lb.unhealthy_backends.VerifyFirewallRules` |\n|[unhealthy_backends](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/lb/unhealthy_backends.py) | **VerifyHealthCheckLoggingEnabled** | GATEWAY | `google.cloud.gcpdiag.runbook.lb.unhealthy_backends.VerifyHealthCheckLoggingEnabled` |\n|[vm_creation](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/vm_creation.py) | **InvestigateVmCreationLogFailure** | GATEWAY | `google.cloud.gcpdiag.runbook.gce.vm_creation.InvestigateVmCreationLogFailure` |\n|[vm_external_ip_connectivity](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/vpc/vm_external_ip_connectivity.py) | **ExternalInterfaceCheck** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.vpc.vm_external_ip_connectivity.ExternalInterfaceCheck` |\n|[vm_external_ip_connectivity](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/vpc/vm_external_ip_connectivity.py) | **InternalInterfaceCheck** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.vpc.vm_external_ip_connectivity.InternalInterfaceCheck` |\n|[vm_external_ip_connectivity](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/vpc/vm_external_ip_connectivity.py) | **VmExternalIpConnectivityEnd** | END | `google.cloud.gcpdiag.runbook.vpc.vm_external_ip_connectivity.VmExternalIpConnectivityEnd` |\n|[vm_external_ip_connectivity](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/vpc/vm_external_ip_connectivity.py) | **VmExternalIpConnectivityStart** | START | `google.cloud.gcpdiag.runbook.vpc.vm_external_ip_connectivity.VmExternalIpConnectivityStart` |\n|[vm_external_ip_connectivity](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/vpc/vm_external_ip_connectivity.py) | **VmHasExternalIp** | GATEWAY | `google.cloud.gcpdiag.runbook.vpc.vm_external_ip_connectivity.VmHasExternalIp` |\n|[vm_performance](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/vm_performance.py) | **CheckLiveMigrations** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gce.vm_performance.CheckLiveMigrations` |\n|[vm_performance](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/vm_performance.py) | **CpuOvercommitmentCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gce.vm_performance.CpuOvercommitmentCheck` |\n|[vm_performance](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/vm_performance.py) | **DiskAvgIOLatencyCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gce.vm_performance.DiskAvgIOLatencyCheck` |\n|[vm_performance](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/vm_performance.py) | **DiskHealthCheck** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gce.vm_performance.DiskHealthCheck` |\n|[vm_performance](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/vm_performance.py) | **DiskIopsThroughputUtilisationChecks** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gce.vm_performance.DiskIopsThroughputUtilisationChecks` |\n|[vm_performance](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/vm_performance.py) | **VmPerformanceEnd** | END | `google.cloud.gcpdiag.runbook.gce.vm_performance.VmPerformanceEnd` |\n|[vm_performance](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/vm_performance.py) | **VmPerformanceStart** | START | `google.cloud.gcpdiag.runbook.gce.vm_performance.VmPerformanceStart` |\n|[vm_termination](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/vm_termination.py) | **ComputeClusterManagerTermination** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gce.vm_termination.ComputeClusterManagerTermination` |\n|[vm_termination](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/vm_termination.py) | **GuestOsIssuedShutdown** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gce.vm_termination.GuestOsIssuedShutdown` |\n|[vm_termination](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/vm_termination.py) | **HostError** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gce.vm_termination.HostError` |\n|[vm_termination](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/vm_termination.py) | **ManagedInstanceGroupRecreation** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gce.vm_termination.ManagedInstanceGroupRecreation` |\n|[vm_termination](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/vm_termination.py) | **PreemptibleInstance** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gce.vm_termination.PreemptibleInstance` |\n|[vm_termination](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/vm_termination.py) | **ScheduledStopPolicy** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gce.vm_termination.ScheduledStopPolicy` |\n|[vm_termination](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/vm_termination.py) | **StopOperationGateway** | GATEWAY | `google.cloud.gcpdiag.runbook.gce.vm_termination.StopOperationGateway` |\n|[vm_termination](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/vm_termination.py) | **TerminateOnHostMaintenance** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gce.vm_termination.TerminateOnHostMaintenance` |\n|[vm_termination](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/vm_termination.py) | **TerminationOperationType** | GATEWAY | `google.cloud.gcpdiag.runbook.gce.vm_termination.TerminationOperationType` |\n|[vm_termination](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/vm_termination.py) | **UserOrServiceAccountInitiatedStop** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.gce.vm_termination.UserOrServiceAccountInitiatedStop` |\n|[vm_termination](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/vm_termination.py) | **VmTerminationEnd** | END | `google.cloud.gcpdiag.runbook.gce.vm_termination.VmTerminationEnd` |\n|[vm_termination](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/gce/vm_termination.py) | **VmTerminationStart** | START | `google.cloud.gcpdiag.runbook.gce.vm_termination.VmTerminationStart` |\n|[workbench_instance_stuck_in_provisioning](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/vertex/workbench_instance_stuck_in_provisioning.py) | **CheckWorkbenchInstanceComputeEngineSSH** | COMPOSITE STEP | `google.cloud.gcpdiag.runbook.vertex.workbench_instance_stuck_in_provisioning.CheckWorkbenchInstanceComputeEngineSSH` |\n|[workbench_instance_stuck_in_provisioning](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/vertex/workbench_instance_stuck_in_provisioning.py) | **CheckWorkbenchInstanceJupyterSpace** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.vertex.workbench_instance_stuck_in_provisioning.CheckWorkbenchInstanceJupyterSpace` |\n|[workbench_instance_stuck_in_provisioning](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/vertex/workbench_instance_stuck_in_provisioning.py) | **CheckWorkbenchInstanceUsingCustomContainer** | AUTOMATED STEP | `google.cloud.gcpdiag.runbook.vertex.workbench_instance_stuck_in_provisioning.CheckWorkbenchInstanceUsingCustomContainer` |\n|[workbench_instance_stuck_in_provisioning](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/vertex/workbench_instance_stuck_in_provisioning.py) | **DecisionCheckWorkbenchInstanceSystemLogging** | GATEWAY | `google.cloud.gcpdiag.runbook.vertex.workbench_instance_stuck_in_provisioning.DecisionCheckWorkbenchInstanceSystemLogging` |\n|[workbench_instance_stuck_in_provisioning](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/vertex/workbench_instance_stuck_in_provisioning.py) | **WorkbenchInstanceStuckInProvisioningEnd** | END | `google.cloud.gcpdiag.runbook.vertex.workbench_instance_stuck_in_provisioning.WorkbenchInstanceStuckInProvisioningEnd` |\n|[workbench_instance_stuck_in_provisioning](https://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/runbook/vertex/workbench_instance_stuck_in_provisioning.py) | **WorkbenchInstanceStuckInProvisioningStart** | START | `google.cloud.gcpdiag.runbook.vertex.workbench_instance_stuck_in_provisioning.WorkbenchInstanceStuckInProvisioningStart` |\n"
  },
  {
    "path": "bin/templates/diagnostic-tree.jinja",
    "content": "{#- Prepare the tree traversal part -#}\n{% macro traverse_dt(step, ROOT_DIR) %}\n  {% set dt_path = '/steps/' ~ step.product ~ '/' ~ step.doc_file_name %}\n  {% if ROOT_DIR ~ '/' ~ dt_path %}\n  - [{{ util.pascal_case_to_title(step.__class__.__name__)}}](/runbook{{ dt_path }})\n  {% endif %}\n\n  {% for child in step.steps %}\n    {{- traverse_dt(child, ROOT_DIR) -}}\n  {% endfor %}\n{% endmacro %}\n\n{#- The main part of the template -#}\n---\ntitle: \"{{ rule.product }}/{{ title }}\"\nlinkTitle: \"{{ rule.name }}\"\nweight: 3\ntype: docs\ndescription: >\n  {{ rule.short_desc|trim }}\n---\n\n**Product**: {{ PRODUCTS[rule.product]|trim }}\n**Kind**: Debugging Tree\n\n### Description\n\n{{ rule.long_desc|trim }}\n\n### Executing this runbook\n\n```shell\ngcpdiag runbook {{rule.name}} \\\n{% for name, _ in rule.parameters.items() %}\n  {% if not loop.last %}\n  -p {{ name }}=value \\\n  {% else %}\n  -p {{ name }}=value\n  {% endif %}\n{% endfor %}\n```\n\n#### Parameters\n\n| Name | Required | Default | Type | Help |\n|------|----------|---------|------|------|\n{% for n, d in rule.parameters.items() %}\n| `{{ n }}` | {{ d.get('required', False) }} | {{ d.get('default', 'None') }} | {{ d['type'].__name__ }} | {{ d['help']\n}} |\n{% endfor %}\n\nGet help on available commands\n\n```shell\ngcpdiag runbook --help\n```\n\n### Potential Steps\n\n{{ traverse_dt(rule.start, ROOT_DIR) }}\n<!--\nThis file is auto-generated. DO NOT EDIT.\n-->\n"
  },
  {
    "path": "bin/templates/python-file.py.tpl",
    "content": "# Copyright [YEAR] Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"TODO: String doc\"\"\"\n"
  },
  {
    "path": "bin/templates/runbook-starter-code.py.tpl",
    "content": "# Copyright [YEAR] Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"TODO: Overview of classes contained in file\"\"\"\n\nfrom datetime import datetime\n\nfrom gcpdiag import runbook\nfrom gcpdiag.runbook import op\nfrom gcpdiag.queries import crm, gce, gke, iam, logs, pubsub\nfrom gcpdiag.runbook.gce import flags\nfrom gcpdiag.runbook.iam import generalized_steps as iam_gs\n\nCUSTOM_FLAG = 'custom_flag'\n\n\nclass TreeName(runbook.DiagnosticTree):\n  \"\"\"TODO: Single line explaining runbook's purpose.\n\n  Overview message for end user alignment with runbook capabilities\n\n  - Subheading: We check X product domain\n  - Subheading: We check Y product domain\n  - ...\n  \"\"\"\n  parameters = {\n      flags.PROJECT_ID: {\n          'type': str,\n          'help': 'The Project ID of the resource under investigation',\n          'required': True\n      },\n      CUSTOM_FLAG: {\n          'type': str,\n          'help': 'Help text for the parameter',\n          'default': 'gce'\n      }\n  }\n\n  def build_tree(self):\n    \"\"\"Construct the diagnostic tree with appropriate steps.\"\"\"\n    # Instantiate your step classes\n    start = TreeNameStart()\n    # add them to your tree\n    self.add_start(start)\n    # you can create custom steps to define unique logic\n    custom = CustomStep()\n    # Describe the step relationships\n    self.add_step(parent=start, child=custom)\n    # Type of steps: a Gateway i.e Decision point.\n    self.add_step(parent=custom, child=TreeNameGateway())\n    # Type of steps: a composite step i.e a group of related steps\n    self.add_step(parent=custom, child=TreeNameCompositeStep())\n    # Ending your runbook\n    self.add_end(TreeNameEnd())\n\n\nclass TreeNameStart(runbook.StartStep):\n  \"\"\"TODO: Write a one line overview of this step\n\n  Detailed explanation of how this works and what it checks.\n  \"\"\"\n\n  def execute(self):\n    \"\"\"TODO: One line string for the checks being performed by start step\"\"\"\n    proj = crm.get_project(op.get(flags.PROJECT_ID))\n    if proj:\n      op.info(f'name: {proj.name}, id: {proj.id}, number: {proj.number}')\n    product = self.__module__.split('.')[-2]\n    op.put(CUSTOM_FLAG, product)\n\n\nclass CustomStep(runbook.Step):\n  \"\"\"TODO: Write a one line overview of this step\n\n  Detailed explanation of how this works and what it checks.\n  \"\"\"\n\n  def _project_helper(self, project):\n    return project.id == project.name\n\n  def execute(self):\n    \"\"\"TODO: One line string for the checks being performed by custom step\"\"\"\n    project = crm.get_project(op.get(flags.PROJECT_ID))\n    if self._project_helper(project):\n      op.add_ok(\n          project,\n          reason='Nice! your project has the same string for name and id')\n    else:\n      op.add_failed(project,\n                         reason='Your project name and id are different',\n                         remediation='Different name and id is fine too. Please enter \"c\" to continue. ')\n\n\nclass TreeNameGateway(runbook.Gateway):\n  \"\"\"TODO: Write a one line overview of this this decision point\n\n  Detailed explanation of how this works and what it checks.\n  \"\"\"\n\n  def execute(self):\n    \"\"\"TODO: One line string for the decision being performed at this split point.\"\"\"\n    # Decision points.\n    if op.get(CUSTOM_FLAG) == 'gce':\n      num = len(gce.get_instances(op.context))\n      op.info(f'Your project has {num} GCE instance{\"\" if num==1 else \"s\"} 🔥')\n    elif op.get(CUSTOM_FLAG) == 'gke':\n      num = len(gke.get_clusters(op.context))\n      op.info(f'Your project has {num} GKE cluster{\"\" if num==1 else \"s\"} 🔥')\n    elif op.get(CUSTOM_FLAG) == 'pubsub':\n      num = len(pubsub.get_topics(op.context))\n      op.info(f'Your project has {num} Pubsub Topic{\"\" if num==1 else \"s\"} 🔥')\n    else:\n      num = len(iam.get_service_account_list(op.context.project_id))\n      op.info(f'Your project has {num} service account{\"\" if num==1 else \"s\"} 🔥')\n\n\nclass TreeNameCompositeStep(runbook.CompositeStep):\n  \"\"\"TODO: Write a one line overview of this composite step\n\n  Explain the collection of steps in a composite step\n  \"\"\"\n\n  def execute(self):\n    \"\"\"TODO: One line string for the collection of step grouped in this Composite Step.\"\"\"\n    using_a_generalized_class = iam_gs.IamPolicyCheck()\n    using_a_generalized_class.project = op.get(flags.PROJECT_ID)\n    using_a_generalized_class.permissions = ['test.perm.one', 'test.perm.two']\n    using_a_generalized_class.principal = 'user:user_one@example.com'\n    using_a_generalized_class.require_all = False\n    self.add_child(using_a_generalized_class)\n\n    using_another_generalized_class = iam_gs.IamPolicyCheck(name='unique_name')\n    using_another_generalized_class.project = op.get(flags.PROJECT_ID)\n    using_another_generalized_class.roles = [\n        'roles/test.one', 'role/test.two'\n    ]\n    using_another_generalized_class.principal = 'user:user_two@example.com'\n    using_another_generalized_class.require_all = True\n    self.add_child(using_another_generalized_class)\n\n\nclass TreeNameEnd(runbook.EndStep):\n  \"\"\"TODO: Write a one line overview of this end step\n\n  TODO: Explain the the checks done by the end step whether automatic assessment or manual.\n  \"\"\"\n\n  def execute(self):\n    \"\"\"TODO: Write checks being performed by end step\"\"\"\n    log_entries = logs.realtime_query(\n        project_id=op.get(flags.PROJECT_ID),\n        filter_str=f'log_name=~\"projects/{op.get(flags.PROJECT_ID)}\"',\n        start_time_utc=datetime.now(),\n        end_time_utc=op.get(flags.END_TIME_UTC))\n    if log_entries:\n      op.info((f'You\\'ve got new logs in {op.get(flags.PROJECT_ID)} ',\n                    f'since {op.get(flags.END_TIME_UTC)} 🚀'))\n    else:\n      op.info(f'No new logs in {op.get(flags.PROJECT_ID)} '\n                   f'since {op.get(flags.END_TIME_UTC)} 😎. Nice!')\n\n\n# TODO: Remove all template boilerplate before submitting your runbook.\n"
  },
  {
    "path": "bin/templates/runbook-test.py.tpl",
    "content": "# Copyright [YEAR] Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Test class for PRODUCT/TreeName\"\"\"\n\nfrom gcpdiag import config\nfrom gcpdiag.runbook import PRODUCT, snapshot_test_base\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = PRODUCT\n  runbook_name = 'RULE'\n  project_id = ''\n  config.init({'auto': True, 'interface': 'cli'}, project_id)\n\n  rule_parameters = [{\n      'custom_flag': 'PRODUCT'\n  }]\n"
  },
  {
    "path": "bin/templates/steps.jinja",
    "content": "---\ntitle: \"{{ step.product }}/{{ step.label }}\"\nlinkTitle: \"{{ step.label }}\"\nweight: 3\ntype: docs\ndescription: >\n  {{ step.short_desc|trim }}\n---\n\n**Product**: {{ PRODUCTS[step.product] }}\\\n**Step Type**: {{ step.type.value }}\n\n### Description\n\n{{ step.long_desc|trim }}\n\n{% if msgs['failure_reason'] %}\n### Failure Reason\n\n{{ msgs['failure_reason'] }}\n{% endif %}\n{% if msgs['failure_remediation'] %}\n### Failure Remediation\n\n{{ msgs['failure_remediation'] }}\n{% endif %}\n{% if msgs['success_reason'] %}\n### Success Reason\n\n{{ msgs['success_reason'] }}\n{% endif %}\n{% if msgs['uncertain_reason'] %}\n### Uncertain Reason\n\n{{ msgs['uncertain_reason'] }}\n{% endif %}\n{% if msgs['uncertain_remediation'] %}\n### Uncertain Remediation\n\n{{ msgs['uncertain_remediation'] }}\n{% endif %}\n{% if msgs['skipped_reason'] %}\n### Skipped Reason\n\n{{ msgs['skipped_reason'] }}\n{% endif %}\n\n{% if msgs['failure_reason_a2'] %}\n### Failure Reason [Alternative 2]\n\n{{ msgs['failure_reason_a2'] }}\n{% endif %}\n{% if msgs['failure_remediation_a2'] %}\n### Failure Remediation [Alternative 2]\n\n{{ msgs['failure_remediation_a2'] }}\n{% endif %}\n{% if msgs['success_reason_a2'] %}\n### Success Reason [Alternative 2]\n\n{{ msgs['success_reason_a2'] }}\n{% endif %}\n{% if msgs['uncertain_reason_a2'] %}\n### Uncertain Reason [Alternative 2]\n\n{{ msgs['uncertain_reason_a2'] }}\n{% endif %}\n{% if msgs['uncertain_remediation_a2'] %}\n### Uncertain Remediation [Alternative 2]\n\n{{ msgs['uncertain_remediation_a2'] }}\n{% endif %}\n{% if msgs['skipped_reason_a2'] %}\n### Skipped Reason [Alternative 2]\n\n{{ msgs['skipped_reason_a2'] }}\n{% endif %}\n\n{% if msgs['failure_reason_a3'] %}\n### Failure Reason [Alternative 3]\n\n{{ msgs['failure_reason_a3'] }}\n{% endif %}\n{% if msgs['failure_remediation_a3'] %}\n### Failure Remediation [Alternative 3]\n\n{{ msgs['failure_remediation_a3'] }}\n{% endif %}\n{% if msgs['success_reason_a3'] %}\n### Success Reason [Alternative 3]\n\n{{ msgs['success_reason_a3'] }}\n{% endif %}\n{% if msgs['uncertain_reason_a3'] %}\n### Uncertain Reason [Alternative 3]\n\n{{ msgs['uncertain_reason_a3'] }}\n{% endif %}\n{% if msgs['uncertain_remediation_a3'] %}\n### Uncertain Remediation [Alternative 3]\n\n{{ msgs['uncertain_remediation_a3'] }}\n{% endif %}\n{% if msgs['skipped_reason_a3'] %}\n### Skipped Reason [Alternative 3]\n\n{{ msgs['skipped_reason_a3'] }}\n{% endif %}\n{#- End of template -#}\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "bin/terraform",
    "content": "#!/bin/sh\n\n# terraform wrapper using docker\n\nUSE_TTY=\"\"\nCWD=$(pwd)\n[ -t 0 ] && USE_TTY=\"-it\"\n\nexec docker run $USE_TTY \\\n  --rm \\\n  -u \"$(id -u):$(id -g)\" \\\n  -e \"USER=$(id -n -u)\" \\\n  -e \"GROUP=$(id -n -g)\" \\\n  -e \"HOME=$HOME\" \\\n  -e \"LANG=$LANG\" \\\n  -e \"SHELL=/bin/bash\" \\\n  -v \"$CWD:$CWD\" \\\n  -v \"$HOME/.config/gcloud:/home/.config/gcloud\" \\\n  -w \"$CWD\" \\\n  mirror.gcr.io/hashicorp/terraform:light \"$@\"\n"
  },
  {
    "path": "cookiecutter-gcpdiag-rule/cookiecutter.json",
    "content": "{\n  \"rule_name\": \"\",\n  \"__name\": \"{{ cookiecutter.rule_name.lower().replace(' ', '_').replace('-', '_') }}\",\n  \"year\": \"{% now 'utc', '%Y' %}\",\n  \"severity\": \"\",\n  \"__products\": \"\",\n  \"product\": \"\",\n  \"__rule_numbers\": \"\",\n  \"number\": \"{{ '001' if cookiecutter.__rule_numbers[cookiecutter.product][cookiecutter.year] is undefined else cookiecutter.__rule_numbers[cookiecutter.product][cookiecutter.year][cookiecutter.severity] | default('001') }}\",\n  \"title\": \"\",\n  \"description\": \"\",\n  \"__rule_classes\": \"\",\n  \"__prompts__\": {\n    \"rule_name\": \"short description of the lint rule\",\n    \"title\": \"a one-line description of the rule, that states the GOOD/EXPECTED state of the product/feature\",\n    \"description\": \"3-4 sentences that explain the issue in greater details\"\n  }\n}\n"
  },
  {
    "path": "cookiecutter-gcpdiag-rule/cookiecutter_runner.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"\nPopulates a dictionary of product rules with the next consecutive number of a rule.\n\nThis script scans the 'gcpdiag/lint' directory for products and their associated rule files.\nIt parses rule file names to extract severity, year, and rule number information.\nThen, it organizes rules by product, year, and severity, and determines the next\nconsecutive rule number for each severity within a year. Finally, it uses Cookiecutter\nto generate new rule files based on this information.\n\"\"\"\n\nimport sys\nfrom os import path, scandir\nfrom re import match\nfrom typing import Dict, Set\n\nfrom cookiecutter.main import cookiecutter\n\nSCRIPT_DIR = path.dirname(path.abspath('./gcpdiag/gcpdiag'))\nsys.path.append(path.dirname(SCRIPT_DIR))\n\n# pylint: disable=wrong-import-position\nfrom gcpdiag.product_list import get_product_list\nfrom gcpdiag.rule_classes import get_rule_classes\n\n# pylint: enable=wrong-import-position\n\n# Initialize rule numbers dictionary\n# {\"product\": {\"year\": {\"severity\": \"rule_number\"}}}\nrule_numbers: Dict[str, Dict[int, Dict[str, str]]] = {}\n\n# Scan lint directory for products\nfor product_dir in scandir('./gcpdiag/lint/'):\n  if product_dir.is_dir() and not product_dir.name.startswith('__'):\n    rule_numbers[product_dir.name] = {}\n\n# Iterate over each product\nfor product, rule in rule_numbers.items():\n  product_path = f'./gcpdiag/lint/{product}'\n  # {\"year\": {\"severity\": {\"001\", \"002\", \"...\"}}}\n  years: Dict[int, Dict[str, Set[int]]] = {}\n\n  # Scan files within each product directory\n  for file in scandir(product_path):\n    if file.is_file():\n      # Sample filenames:\n      #   - warn_2022_003_firewall_rules_permission.py\n      #   - bp_2021_001_cloudops_enabled.py\n      m = match(r'([a-z]{2,4})_(\\d{4})_(\\d{3})_([^.]+)\\.(py)', file.name)\n      if m:\n        severity = m.group(1).upper()\n        year = int(m.group(2))\n        rule_number = int(m.group(3))\n\n        # Organize rules by year and severity\n        years.setdefault(year, {}).setdefault(severity, set()).add(rule_number)\n\n  # Update rule numbers dictionary\n  for year, severities in years.items():\n    for severity, rules in severities.items():\n      next_rule_number = f'{max(rules) + 1:03d}'\n      rule.setdefault(year, {})[severity] = next_rule_number\n\n# Use cookiecutter with the generated rule numbers\ncookiecutter('./cookiecutter-gcpdiag-rule',\n             extra_context={\n                 '__products': get_product_list(),\n                 '__rule_classes': get_rule_classes(),\n                 '__rule_numbers': rule_numbers,\n                 'severity': list(get_rule_classes().keys()),\n                 'product': list(get_product_list().keys())\n             })\n"
  },
  {
    "path": "cookiecutter-gcpdiag-rule/hooks/post_gen_project.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"\nPlaces generated lint rule files under their target directories\n\nThis cookiecutter hook moves the generated files to thir respective directories\nand removes a temporary directory.\n\"\"\"\nimport os\nimport pathlib\nimport shutil\n\nsource_dir = '.'\ntarget_dir = '..'\n\ncontent = os.walk(source_dir)\n\nfor root, dirs, files in content:\n  if files:\n    # move pre-populated files to their target directories\n    for file in files:\n      pathlib.Path(os.path.dirname(os.path.join(target_dir, root,\n                                                file))).mkdir(parents=True,\n                                                              exist_ok=True)\n      os.rename(os.path.join(root, file), os.path.join(target_dir, root, file))\n\n# delete the temporary cookiecutter directory\nshutil.rmtree(os.path.join(target_dir, '{{ cookiecutter.__name }}'))\n"
  },
  {
    "path": "cookiecutter-gcpdiag-rule/{{cookiecutter.__name}}/gcpdiag/lint/{{cookiecutter.product}}/{{cookiecutter.severity.lower()}}_{{cookiecutter.year}}_{{cookiecutter.number}}_{{cookiecutter.__name}}.py",
    "content": "# Copyright {{cookiecutter.year}} Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"{{cookiecutter.title}}\n\n{{cookiecutter.description}}\n\"\"\"\n\nfrom gcpdiag import lint, models\n\n\ndef prepare_rule(context: models.Context):\n  # TODO: DELETE/REPLACE this comment and the function's body\n  #\n  # The prepare_rule() function is an OPTIONAL one and is executed before\n  # prefetch_rule() and run_rule(). It is called serially for each lint rule\n  # and supposed to be quick to execute\n  #\n  # Currently the only use-case is for defining/preparing logs queries\n  #\n  # Example:\n  #\n  # # logs_by_project is to be defined on the global scope and will be used\n  # # in run_rule() later\n  # logs_by_project = {}\n  # ...\n  # # Prepares a log query (the actual query execution happens later)\n  # logs_by_project[context.project_id] = logs.query(\n  #     project_id=context.project_id,\n  #     resource_type='k8s_cluster',\n  #     log_name='log_id(\"events\")',\n  #     filter_str=f'jsonPayload.message:\"{MATCH_STR_1}\"'\n  # )\n  pass\n\n\ndef prefetch_rule(context: models.Context):\n  # TODO: DELETE/REPLACE this comment and the function's body\n  #\n  # The prefetch_rule() function is an OPTIONAL one and is executed after\n  # prefetch_rule() and BEFORE run_rule(). It is called in parallel\n  # with prefetch_rule() functions defined by other lint rules.\n  #\n  # It's a good place to fetch/prepare/filter/pre-process data that is going\n  # to be used in run_rule(), e.g., to fetch metrics from Cloud Monitoring or\n  # some auxiliary data from a relevant GCP API.\n  #\n  #  Example:\n  #\n  # # _query_results_per_project_id is to be defined on the global scope and\n  # # will be used in run_rule() later\n  # _query_results_per_project_id = {}\n  # ...\n  # # Fetches data from Cloud Monitoring\n  # # (the actual query execution happens right here)\n  # _query_results_per_project_id[context.project_id] = monitoring.query(\n  #     context.project_id, f\"\"\"\n  # fetch gce_instance\n  # | metric 'compute.googleapis.com/guest/disk/bytes_used'\n  # | filter metric.device_name == 'sda1'\n  # | {within_str}\n  # | next_older 5m\n  # | filter_ratio_by [resource.instance_id], metric.state == 'free'\n  # | every 5m\n  # \"\"\")\n  pass\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # TODO: DELETE/REPLACE this comment and the function's body\n  #\n  # The run_rule() function is a MANDATORY one. The rule's logic is to be\n  # implemented here. All reporting has to be implemented within run_rule()\n  #\n  # Note: In most cases, there is no need to check if a particular API is\n  # enabled or not, as all error handling happens inside the \"queries\"\n  # library and an empty object will be returned if some API is disabled.\n  pass\n"
  },
  {
    "path": "cookiecutter-gcpdiag-rule/{{cookiecutter.__name}}/website/content/en/rules/{{cookiecutter.product}}/{{cookiecutter.severity}}/{{cookiecutter.year}}_{{cookiecutter.number}}.md",
    "content": "---\ntitle: \"{{cookiecutter.product}}/{{cookiecutter.severity}}/{{cookiecutter.year}}_{{cookiecutter.number}}\"\nlinkTitle: \"{{cookiecutter.severity}}/{{cookiecutter.year}}_{{cookiecutter.number}}\"\nweight: 1\ntype: docs\ndescription: >\n  {{cookiecutter.title}}\n---\n\n**Product**: {{ cookiecutter.__products[cookiecutter.product] | default(\"\") }}\\\n**Rule class**: {{ cookiecutter.__rule_classes[cookiecutter.severity] | default(\"\") }}\n\n### Description\n\n{{cookiecutter.description}}\n\nAdd a more detailed description here. Preferably, refer to an existing public page that provides detailed information and briefly explain the issue here.\n\nRemember, gcpdiag findings **must** be actionable. If there's no way to remediate/fix the issue, the linter rule shouldn't be created in the first place.\n\nUse [`Code Blocks`](https://www.markdownguide.org/extended-syntax/#fenced-code-blocks) MD formatting for logging/monitoring queries and `gcloud` commands. For logging queries, be as specific as possible and follow the [Logging Query best practices](https://cloud.google.com/logging/docs/view/logging-query-language#finding-quickly).\n\n\nSample logging query:\n```\nresource.type=\"k8s_cluster\"\nseverity=\"WARNING\"\njsonPayload.message:\"Please enable the gateway API for your cluster using gcloud\"\n```\n\nSample gcloud command:\n```\ngcloud compute disks list --filter=\"-users:*\"\n```\n\nYou can use tables if needed. Sample table:\n\n| \\#  | DeamonSet name | GKE Feature       |\n| --- | -------------- | ----------------- |\n| 1   | kube-proxy     | non-DPv2 clusters |\n| 2   | fluentbit-gke  | GKE Logging       |\n\n### Remediation\n\nExplain how to remediate the issue. Make sure the steps are clear and very specific. Prefer `gcloud` commands over a set of steps for the Cloud Console (Web UI). The user should be able to mitigate the issue independently by following the steps provided here.\n\nPreferably, refer to existing public web pages with troubleshooting steps instead of copying that information here.\n\n**Sample troubleshooting public page:** https://cloud.google.com/kubernetes-engine/docs/troubleshooting#CrashLoopBackOff\n\n\n### Further information\n\n- [Link title 1](https://cloud.google.com/link-1)\n- [Link title 2](https://cloud.google.com/link-2)\n"
  },
  {
    "path": "docker/gcpdiag/Dockerfile",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Python 3.12\nFROM ubuntu:24.04@sha256:a08e551cb33850e4740772b38217fc1796a66da2506d312abe51acda354ff061\n\n# Update apt-get and install required packages.\nRUN apt-get update && apt-get install --no-install-recommends -y \\\n\tpython3 \\\n\tpython3-pip \\\n\tpipenv \\\n\tcurl \\\n\tpublicsuffix \\\n\tgnupg2\n\n# Add an entrypoint to create a user in /etc/passwd and /etc/group.\nCOPY entrypoint.sh /usr/bin/entrypoint.sh\nRUN chmod 755 /usr/bin/entrypoint.sh; \\\n    chmod 666 /etc/passwd /etc/group\nENTRYPOINT [\"/usr/bin/entrypoint.sh\"]\n\n# Install gcpdiag + dependencies.\nCOPY dist /opt/gcpdiag\nRUN cd /opt/gcpdiag && env PIPENV_VENV_IN_PROJECT=1 pipenv install --ignore-pipfile\n\n# Grant write permission to write kubeconfig file in the directory.\nRUN chmod a+w /opt/gcpdiag\n\n# Install Google Cloud CLI and google-cloud-sdk-gke-gcloud-auth-plugin.\nRUN echo \"deb [signed-by=/usr/share/keyrings/cloud.google.gpg] http://packages.cloud.google.com/apt cloud-sdk main\" | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list && curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | gpg --dearmor -o /usr/share/keyrings/cloud.google.gpg\nRUN export CLOUD_SDK_VERSION=\"494.0.0\" && \\\n    curl -O https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-${CLOUD_SDK_VERSION}-linux-x86_64.tar.gz && \\\n    tar xf google-cloud-sdk-${CLOUD_SDK_VERSION}-linux-x86_64.tar.gz && \\\n    rm google-cloud-sdk-${CLOUD_SDK_VERSION}-linux-x86_64.tar.gz && \\\n    ln -s /google-cloud-sdk/bin/gcloud /usr/bin/gcloud && \\\n    gcloud config set component_manager/disable_update_check true && \\\n    gcloud components remove bq gsutil && \\\n    rm -rf \\\n      /google-cloud-sdk/platform/bundledpythonunix \\\n      /google-cloud-sdk/.install/.backup \\\n      /google-cloud-sdk/data/cli/*.json \\\n      /google-cloud-sdk/lib/googlecloudsdk/third_party/apis/*.json \\\n      /google-cloud-sdk/lib/third_party/botocore/data \\\n      /google-cloud-sdk/lib/googlecloudsdk/generated_clients/apis/compute \\\n      /google-cloud-sdk/lib/googlecloudsdk/generated_clients/apis/aiplatform\n\nRUN apt-get update && apt-get install -y google-cloud-sdk-gke-gcloud-auth-plugin\n\n# Install kubectl\nRUN curl -LO https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl && chmod +x ./kubectl && mv ./kubectl /usr/local/bin\n\n# Install kubectl check-gke-ingress\nRUN ln -s /opt/gcpdiag/kubectl-check_gke_ingress /usr/local/bin/kubectl-check_gke_ingress\n"
  },
  {
    "path": "docker/gcpdiag/Makefile",
    "content": "BIN_DIR=../../bin\nVERSION=$(shell sed -n 's/^current_version\\s*=\\s*//p' <../../.bumpversion.cfg)\nifneq (,$(findstring test,$(VERSION)))\nREPO_NAME=staging\nelse\nREPO_NAME=release\nendif\nIMAGE=us-docker.pkg.dev/gcpdiag-dist/$(REPO_NAME)/gcpdiag\nRELEASE_BUCKET_NAME=gcpdiag-dist\nSHELL=/bin/bash\n\nOBJECT_NAME_RELEASE_VERSION=release-version\nWRAPPER_VERSION=0.11\nVERSION_FILE_URL=https://storage.googleapis.com/$(RELEASE_BUCKET_NAME)/$(OBJECT_NAME_RELEASE_VERSION)\n\nbuild:\n\tmake -C ../.. tarfile\n\trm -rf dist\n\tmkdir dist\n\tcd dist && tar -xf ../../../dist/gcpdiag-$(VERSION).tar.gz --strip 1\n\tcd dist && gcloud storage cp gs://check-gke-ingress-push/kubectl-check_gke_ingress ./ && chmod +x kubectl-check_gke_ingress\n\tchmod -R a+rX dist\n\tdocker build --pull -t $(IMAGE):$(VERSION) .\n\trm -rf dist\n\npush:\n\tdocker push $(IMAGE):$(VERSION)\n\n# We mark in Cloud Storage what version clients should use by default. This is\n# much faster than running 'docker pull' every time (and also avoids the bad\n# practice of using generic docker image tags like 'default')\nupdate-default:\n\techo -e \"DOCKER_IMAGE=$(IMAGE)\\nDOCKER_IMAGE_VERSION=$(VERSION)\\nWRAPPER_VERSION=$(WRAPPER_VERSION)\" | gcloud storage cp --content-type=\"text/plain\" --cache-control=\"max-age=300\" - \"gs://$(RELEASE_BUCKET_NAME)/$(OBJECT_NAME_RELEASE_VERSION)\"\n"
  },
  {
    "path": "docker/gcpdiag/entrypoint.sh",
    "content": "#!/bin/bash\n# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\n# If the container is running as non-root (as it should), make sure that we have\n# an entry for this UID and GID in passwd and group.\nif [[ $UID -ne 0 ]]; then\n  GID=$(id -g)\n  USER=${USER:-local}\n  GROUP=${GROUP:-local}\n  echo \"${USER}:x:${UID}:${GID}::${HOME}:/bin/bash\" >>/etc/passwd\n  echo \"${GROUP}:x:${GID}:\" >>/etc/group\nfi\n\n# activate the venv for gcpdiag\n. /opt/gcpdiag/.venv/bin/activate\n\nexport PYTHONPATH=/opt/gcpdiag\n\nexec \"$@\"\n"
  },
  {
    "path": "docker/hugo/Dockerfile",
    "content": "# Use the official extended Hugo image. The versioned tag provides the extended build.\nFROM ghcr.io/gohugoio/hugo:v0.148.2@sha256:a3181fa2e96bd11f69f55a23c19f1898a5e337f56e2a85ed4ff10cd57d1a8afb\n\n# Switch to the root user to install global npm packages.\nUSER root\n\n# Install postcss-cli and autoprefixer globally, pinned to specific versions.\n# These are required by the docsy theme for processing CSS.\nRUN npm install -g postcss-cli@11.0.1 autoprefixer@10.4.21\n\n# Set the NODE_PATH environment variable so that Hugo's PostCSS processor\n# can find the globally installed modules.\nENV NODE_PATH=/usr/local/lib/node_modules\n\n# Switch back to the default, non-privileged hugo user.\nUSER hugo\n\n# Set the working directory to /src, where the website source will be mounted.\nWORKDIR /src\n"
  },
  {
    "path": "docker/hugo/Makefile",
    "content": "VERSION=0.3\nIMAGE=us-docker.pkg.dev/gcpdiag-dist/common/gcpdiag-hugo\n\nbuild:\n\tdocker build --pull --no-cache -t $(IMAGE):$(VERSION) .\n\npush:\n\tdocker push $(IMAGE):$(VERSION)\n"
  },
  {
    "path": "docker/hugo/README.md",
    "content": "This image is used to build the gcpdiag.dev website on gcpdiag.dev and includes\nHugo + the Docsy template.\n"
  },
  {
    "path": "docker/pipenv-python-3.12/Dockerfile",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Python 3.12\nFROM ubuntu:24.04@sha256:353675e2a41babd526e2b837d7ec780c2a05bca0164f7ea5dbbd433d21d166fc\n\n# Update apt-get and install required packages.\n# binutils is for pyinstaller\nRUN apt-get update && apt-get install --no-install-recommends -y \\\n\tpython3 \\\n\tpython3-pip \\\n\tpython3-dev \\\n\tpipenv \\\n\tcurl \\\n\tgnupg2 \\\n\tbinutils \\\n\tmake \\\n\tgit \\\n\tbash \\\n\tunzip \\\n\tpublicsuffix \\\n\tbuild-essential \\\n\t# dependency for pydot\n\tgraphviz \\\n\t# dependency for markdownlint\n\truby\n\n\n# terraform\nRUN curl https://releases.hashicorp.com/terraform/1.9.6/terraform_1.9.6_linux_386.zip -O \\\n\t&& unzip -o *.zip -d /usr/bin/ terraform \\\n\t&& chmod +x /usr/bin/terraform \\\n\t&& rm *.zip\n\n# gcloud CLI https://cloud.google.com/sdk/docs/install#installation_instructions\n# We need the gcloud CLI to use this image as devcontainer, see: ../../.devcontainer/README.md\nRUN echo \"deb [signed-by=/usr/share/keyrings/cloud.google.gpg] http://packages.cloud.google.com/apt cloud-sdk main\" | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list && curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key --keyring /usr/share/keyrings/cloud.google.gpg  add - && apt-get update -y && apt-get install google-cloud-cli -y\n\n# Add an entrypoint to create a user in /etc/passwd and /etc/group.\nCOPY entrypoint.sh /usr/bin/entrypoint.sh\nRUN chmod 755 /usr/bin/entrypoint.sh; \\\n\tchmod 666 /etc/passwd /etc/group\nENTRYPOINT [\"/usr/bin/entrypoint.sh\"]\n"
  },
  {
    "path": "docker/pipenv-python-3.12/Makefile",
    "content": "VERSION=0.87\nIMAGE=us-docker.pkg.dev/gcpdiag-dist/common/gcpdiag-pipenv-python-3.12\n\nbuild:\n\tdocker build --pull --no-cache -t $(IMAGE):$(VERSION) .\n\npush:\n\tdocker push $(IMAGE):$(VERSION)\n"
  },
  {
    "path": "docker/pipenv-python-3.12/entrypoint.sh",
    "content": "#!/bin/bash\n# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\n# If the container is running as non-root (as it should), make sure that we have\n# an entry for this UID and GID in passwd and group.\nif [[ $UID -ne 0 ]]; then\n  GID=$(id -g)\n  USER=${USER:-local}\n  GROUP=${GROUP:-local}\n  echo \"${USER}:x:${UID}:${GID}::${HOME}:/bin/bash\" >>/etc/passwd\n  echo \"${GROUP}:x:${GID}:\" >>/etc/group\nfi\nexec \"$@\"\n"
  },
  {
    "path": "docker/pipenv-python-3.7/Dockerfile",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nFROM python:3.7-slim@sha256:b53f496ca43e5af6994f8e316cf03af31050bf7944e0e4a308ad86c001cf028b\n\n# Copy the pinned requirements file from the root directory\nCOPY requirements.txt /tmp/requirements.txt\n\n# Install from the file, ensuring all hashes match\nRUN pip install --require-hashes -r /tmp/requirements.txt\n\n# Debian packages.\n# binutils is for pyinstaller\nRUN apt-get update && \\\n    apt-get -y install \\\n        bash \\\n        curl \\\n        git \\\n        gnupg \\\n        binutils \\\n        make\n\n# terraform\nRUN curl https://releases.hashicorp.com/terraform/1.0.8/terraform_1.0.8_linux_amd64.zip | \\\n    gunzip - >/usr/bin/terraform && \\\n    chmod +x /usr/bin/terraform\n\n# Note: we install Cloud SDK in the python-3.9 image because we\n# use that image also for interactive development, but we don't need that\n# for the python-3.7 image (and adding Cloud SDK considerably increases the\n# image size).\n\n# Add an entrypoint to create a user in /etc/passwd and /etc/group.\nCOPY entrypoint.sh /usr/bin/entrypoint.sh\nRUN chmod 755 /usr/bin/entrypoint.sh; \\\n    chmod 666 /etc/passwd /etc/group\nENTRYPOINT [\"/usr/bin/entrypoint.sh\"]\n"
  },
  {
    "path": "docker/pipenv-python-3.7/Makefile",
    "content": "VERSION=0.8\nIMAGE=us-docker.pkg.dev/gcpdiag-dist/common/gcpdiag-pipenv-python-3.7\n\nbuild:\n\tdocker build --pull --no-cache -t $(IMAGE):$(VERSION) .\n\npush:\n\tdocker push $(IMAGE):$(VERSION)\n"
  },
  {
    "path": "docker/pipenv-python-3.7/entrypoint.sh",
    "content": "#!/bin/bash\n# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\n# If the container is running as non-root (as it should), make sure that we have\n# an entry for this UID and GID in passwd and group.\nif [[ $UID -ne 0 ]]; then\n  GID=$(id -g)\n  USER=${USER:-local}\n  GROUP=${GROUP:-local}\n  echo \"${USER}:x:${UID}:${GID}::${HOME}:/bin/bash\" >>/etc/passwd\n  echo \"${GROUP}:x:${GID}:\" >>/etc/group\nfi\nexec \"$@\"\n"
  },
  {
    "path": "docker/pipenv-python-3.9/Dockerfile",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nFROM python:3.9-slim@sha256:914169c7c8398b1b90c0b0ff921c8027445e39d7c25dc440337e56ce0f2566e6\n\n# Copy the pinned requirements file from the root directory\nCOPY requirements.txt /tmp/requirements.txt\n\n# Install from the file, ensuring all hashes match\nRUN pip install --require-hashes -r /tmp/requirements.txt\n\n# Debian packages.\n# binutils is for pyinstaller\nRUN apt-get update && \\\n    apt-get -y install \\\n        bash \\\n        curl \\\n        git \\\n        gnupg \\\n        binutils \\\n        make\n\n# terraform\nRUN curl https://releases.hashicorp.com/terraform/1.0.8/terraform_1.0.8_linux_amd64.zip | \\\n    gunzip - >/usr/bin/terraform && \\\n    chmod +x /usr/bin/terraform\n\n# gcloud CLI https://cloud.google.com/sdk/docs/install#installation_instructions\n# We need the gcloud CLI to use this image as devcontainer, see: ../../.devcontainer/README.md\nRUN echo \"deb [signed-by=/usr/share/keyrings/cloud.google.gpg] http://packages.cloud.google.com/apt cloud-sdk main\" | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list && curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key --keyring /usr/share/keyrings/cloud.google.gpg  add - && apt-get update -y && apt-get install google-cloud-cli -y\n\n# Add an entrypoint to create a user in /etc/passwd and /etc/group.\nCOPY entrypoint.sh /usr/bin/entrypoint.sh\nRUN chmod 755 /usr/bin/entrypoint.sh; \\\n    chmod 666 /etc/passwd /etc/group\nENTRYPOINT [\"/usr/bin/entrypoint.sh\"]\n"
  },
  {
    "path": "docker/pipenv-python-3.9/Makefile",
    "content": "VERSION=0.8\nIMAGE=us-docker.pkg.dev/gcpdiag-dist/common/gcpdiag-pipenv-python-3.9\n\nbuild:\n\tdocker build --pull --no-cache -t $(IMAGE):$(VERSION) .\n\npush:\n\tdocker push $(IMAGE):$(VERSION)\n"
  },
  {
    "path": "docker/pipenv-python-3.9/entrypoint.sh",
    "content": "#!/bin/bash\n# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\n# If the container is running as non-root (as it should), make sure that we have\n# an entry for this UID and GID in passwd and group.\nif [[ $UID -ne 0 ]]; then\n  GID=$(id -g)\n  USER=${USER:-local}\n  GROUP=${GROUP:-local}\n  echo \"${USER}:x:${UID}:${GID}::${HOME}:/bin/bash\" >>/etc/passwd\n  echo \"${GROUP}:x:${GID}:\" >>/etc/group\nfi\nexec \"$@\"\n"
  },
  {
    "path": "gcpdiag/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/async_queries/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/async_queries/api/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/async_queries/api/api.py",
    "content": "\"\"\" Make REST API requests \"\"\"\nfrom typing import Any, Dict, Iterable, Optional, Protocol\n\nimport aiohttp\n\nfrom gcpdiag.queries import apis_utils\n\n\nclass Creds(Protocol):\n\n  def update_headers(self, headers: Dict[str, str]) -> None:\n    pass\n\n\nclass Sleeper(Protocol):\n\n  async def sleep(self, seconds: float) -> None:\n    pass\n\n\nclass RetryStrategy(Protocol):\n\n  def get_sleep_intervals(self) -> Iterable[float]:\n    pass\n\n\nclass API:\n  \"\"\" Class abstracting aspects of REST API requests \"\"\"\n\n  def __init__(self, creds: Creds, retry_strategy: RetryStrategy,\n               sleeper: Sleeper) -> None:\n    self._creds = creds\n    self._retry_strategy = retry_strategy\n    self._sleeper = sleeper\n\n  async def call(self,\n                 method: str,\n                 url: str,\n                 json: Optional[Any] = None) -> Any:\n    for timeout in self._retry_strategy.get_sleep_intervals():\n      async with aiohttp.request(method,\n                                 url,\n                                 headers=self._get_headers(),\n                                 json=json) as resp:\n        if resp.status == 200:\n          return await resp.json()\n        if not apis_utils.should_retry(resp.status):\n          raise RuntimeError(\n              f'http status {resp.status} calling {method} {url}')\n      await self._sleeper.sleep(timeout)\n    raise RuntimeError('failed to get an API response')\n\n  def _get_headers(self) -> Dict[str, str]:\n    headers: Dict[str, str] = {}\n    self._creds.update_headers(headers)\n    return headers\n"
  },
  {
    "path": "gcpdiag/async_queries/api/api_slowtest.py",
    "content": "\"\"\"\n  Tests for API\n  python -m unittest gcpdiag.async_queries.api_test\n\"\"\"\nimport asyncio\nimport os\nimport unittest\nfrom typing import Dict, List\n\nfrom gcpdiag.async_queries.api import (api, constant_time_retry_strategy,\n                                       test_webserver)\n\n\nclass FakeCreds:\n  _token: str\n\n  def __init__(self, token: str) -> None:\n    self._token = token\n\n  def update_headers(self, headers: Dict[str, str]) -> None:\n    headers['test_auth'] = f'test_auth {self._token}'\n\n\nclass FakeSleeper:\n  slept: List[float]\n\n  def __init__(self) -> None:\n    self.slept = []\n\n  async def sleep(self, seconds: float) -> None:\n    await asyncio.sleep(0)\n    self.slept.append(seconds)\n\n\nclass TestAPI(unittest.IsolatedAsyncioTestCase):\n  \"\"\" Tests for async API \"\"\"\n\n  async def asyncSetUp(self) -> None:\n    self._token = 'fake token'\n    self._port = int(os.environ['GCPDIAG_TEST_ASYNC_API_PORT'])\n\n    self._server = test_webserver.WebServer(port=self._port,\n                                            expected_auth_token=self._token)\n    self._sleeper = FakeSleeper()\n    self._api = api.API(creds=FakeCreds(self._token),\n                        sleeper=self._sleeper,\n                        retry_strategy=constant_time_retry_strategy.\n                        ConstantTimeoutRetryStrategy(timeout=42, retries=3))\n    await self._server.start()\n\n  async def asyncTearDown(self) -> None:\n    await self._server.stop()\n\n  async def test_get_response(self) -> None:\n    self._server.responses = [test_webserver.Success({'hello': 'world'})]\n    result = await self._api.call(method='GET',\n                                  url=f'http://localhost:{self._port}/test')\n    self.assertEqual(result, {'hello': 'world'})\n\n  async def test_enough_retries(self) -> None:\n    self._server.responses = [\n        test_webserver.Failure(),\n        test_webserver.Failure(),\n        test_webserver.Success({'hello': 'world'})\n    ]\n    result = await self._api.call(method='GET',\n                                  url=f'http://localhost:{self._port}/test')\n    self.assertEqual(result, {'hello': 'world'})\n    self.assertListEqual(self._sleeper.slept, [42, 42])\n\n  async def test_not_enough_retries(self) -> None:\n    self._server.responses = [\n        test_webserver.Failure(),\n        test_webserver.Failure(),\n        test_webserver.Failure(),\n        test_webserver.Success({'hello': 'world'})\n    ]\n    with self.assertRaises(RuntimeError):\n      await self._api.call(method='GET',\n                           url=f'http://localhost:{self._port}/test')\n    self.assertListEqual(self._sleeper.slept, [42, 42, 42])\n\n  async def test_http_429_retried(self) -> None:\n    self._server.responses = [\n        test_webserver.Failure(429),\n        test_webserver.Failure(429),\n        test_webserver.Success({'hello': 'world'})\n    ]\n    result = await self._api.call(method='GET',\n                                  url=f'http://localhost:{self._port}/test')\n    self.assertEqual(result, {'hello': 'world'})\n    self.assertListEqual(self._sleeper.slept, [42, 42])\n\n  async def test_other_4xx_http_not_retried(self) -> None:\n    self._server.responses = [\n        test_webserver.Failure(408),\n        test_webserver.Failure(408),\n        test_webserver.Success({'hello': 'world'})\n    ]\n    with self.assertRaises(RuntimeError):\n      await self._api.call(method='GET',\n                           url=f'http://localhost:{self._port}/test')\n    self.assertListEqual(self._sleeper.slept, [])\n"
  },
  {
    "path": "gcpdiag/async_queries/api/constant_time_retry_strategy.py",
    "content": "\"\"\" Retry strategy: n retries with fixed timeout between them \"\"\"\nfrom typing import Iterator\n\n\nclass ConstantTimeoutRetryStrategy:\n  \"\"\" Retry strategy: n retries with fixed timeout between them \"\"\"\n\n  _retries: int\n  _timeout: int\n\n  def __init__(self, retries: int, timeout: int) -> None:\n    self._retries = retries\n    self._timeout = timeout\n\n  def get_sleep_intervals(self) -> Iterator[float]:\n    for _ in range(self._retries):\n      yield self._timeout\n"
  },
  {
    "path": "gcpdiag/async_queries/api/default_random.py",
    "content": "\"\"\" Generate random numbers between 0 and 1 \"\"\"\nimport random\n\n\nclass Random:\n  \"\"\" Generate random numbers between 0 and 1 \"\"\"\n\n  def generate(self) -> float:\n    return random.random()\n"
  },
  {
    "path": "gcpdiag/async_queries/api/exponential_random_retry_strategy.py",
    "content": "\"\"\"\n  Retry strategy:\n    n retries with exponential timeout plus some random deviations\n\"\"\"\nfrom typing import Iterator, Protocol\n\nfrom gcpdiag.queries import apis_utils\n\n\nclass Random(Protocol):\n\n  def generate(self) -> float:\n    pass\n\n\nclass ExponentialRandomTimeoutRetryStrategy:\n  \"\"\"\n    Retry strategy:\n      n retries with exponential timeout plus some random deviations\n  \"\"\"\n\n  _retries: int\n  _random_pct: float\n  _multiplier: float\n  _random: Random\n\n  def __init__(self, retries: int, random_pct: float, multiplier: float,\n               random: Random) -> None:\n    self._retries = retries\n    self._random_pct = random_pct\n    self._multiplier = multiplier\n    self._random = random\n\n  def get_sleep_intervals(self) -> Iterator[float]:\n    for i in range(self._retries):\n      yield apis_utils.get_nth_exponential_random_retry(\n          n=i,\n          random_pct=self._random_pct,\n          multiplier=self._multiplier,\n          random_fn=self._random.generate)\n"
  },
  {
    "path": "gcpdiag/async_queries/api/exponential_random_retry_strategy_test.py",
    "content": "\"\"\" Tests for ExponentialRandomTimeoutRetryStrategy \"\"\"\n\nfrom typing import List\n\nimport pytest\n\nfrom gcpdiag.async_queries.api import exponential_random_retry_strategy\n\n\nclass FakeRandom:\n  \"\"\" Test double for random numbers generator \"\"\"\n  _numbers: List[float]\n\n  def __init__(self, numbers: List[float]) -> None:\n    self._numbers = numbers\n\n  def generate(self) -> float:\n    return self._numbers.pop(0)\n\n\ndef test_retries() -> None:\n  strategy = exponential_random_retry_strategy.ExponentialRandomTimeoutRetryStrategy(\n      retries=5,\n      random_pct=0.2,\n      multiplier=1.4,\n      random=FakeRandom([0.1, 0.2, 0.3, 0.4, 0.5]))\n  # floats should be compared with some allowed error\n  assert list(strategy.get_sleep_intervals()) == pytest.approx(\n      [0.98, 1.344, 1.842, 2.524, 3.457], 0.001)\n"
  },
  {
    "path": "gcpdiag/async_queries/api/gcpdiag_creds.py",
    "content": "\"\"\"\n  Adapter between gcpdiag.async_queries.api.Creds protocol and\n  gcpdiag.queries.apis.get_credentials\n\"\"\"\n\nfrom typing import Any, Dict\n\nimport google.auth.transport.requests  # type: ignore\n\nfrom gcpdiag.queries import apis\n\n\ndef refresh_google_auth_creds(creds: Any) -> None:\n  request = google.auth.transport.requests.Request()\n  creds.refresh(request)\n\n\nclass GcpdiagCreds:\n  \"\"\"\n    Adapter between gcpdiag.async_queries.api.Creds protocol and\n    gcpdiag.queries.apis.get_credentials\n  \"\"\"\n\n  def update_headers(self, headers: Dict[str, str]) -> None:\n    creds = apis.get_credentials()\n    if not creds.token:\n      refresh_google_auth_creds(creds)\n    headers['Authorization'] = f'Bearer {creds.token}'\n"
  },
  {
    "path": "gcpdiag/async_queries/api/get_api.py",
    "content": "\"\"\" Helper method to initialize API object \"\"\"\nfrom gcpdiag import config\nfrom gcpdiag.async_queries.api import (api, default_random,\n                                       exponential_random_retry_strategy,\n                                       gcpdiag_creds, sleeper)\n\n\ndef pick_creds_implementation() -> api.Creds:\n  try:\n    # This is for Google-internal use only and allows us to modify the request\n    # to make it work also internally. The import will fail for the public\n    # version of gcpdiag.\n    # pylint: disable=import-outside-toplevel\n    from gcpdiag_google_internal import async_api_creds_internal\n    return async_api_creds_internal.GcpdiagInternalCreds()\n  except ImportError:\n    return gcpdiag_creds.GcpdiagCreds()\n\n\ndef get_api() -> api.API:\n  return api.API(creds=pick_creds_implementation(),\n                 retry_strategy=exponential_random_retry_strategy.\n                 ExponentialRandomTimeoutRetryStrategy(\n                     retries=config.API_RETRIES,\n                     random_pct=config.API_RETRY_SLEEP_RANDOMNESS_PCT,\n                     multiplier=config.API_RETRY_SLEEP_MULTIPLIER,\n                     random=default_random.Random()),\n                 sleeper=sleeper.Sleeper())\n"
  },
  {
    "path": "gcpdiag/async_queries/api/sleeper.py",
    "content": "\"\"\"\n  Simple wrapper for asyncio.sleep\n  (mostly needed to replace it with testing double during unit testing)\n\"\"\"\nimport asyncio\n\n\nclass Sleeper:\n\n  async def sleep(self, seconds: float) -> None:\n    await asyncio.sleep(seconds)\n"
  },
  {
    "path": "gcpdiag/async_queries/api/test_webserver.py",
    "content": "\"\"\" Simple web server used for testing \"\"\"\nfrom typing import Any, List, Protocol\n\nfrom aiohttp import web\n\n\nclass Response(Protocol):\n\n  def get_response(self) -> Any:\n    pass\n\n\nclass Success:\n  \"\"\" Canned successful response \"\"\"\n\n  def __init__(self, data: Any) -> None:\n    self.data = data\n\n  def get_response(self) -> Any:\n    return web.json_response(self.data)\n\n\nAIOHTTP_EXCEPTIONS_BY_CODE = {\n    408: web.HTTPRequestTimeout,\n    429: web.HTTPTooManyRequests,\n    500: web.HTTPInternalServerError\n}\n\n\nclass Failure:\n  \"\"\" Canned failed response \"\"\"\n  _status: int\n\n  def __init__(self, status: int = 500) -> None:\n    self._status = status\n\n  def get_response(self) -> Any:\n    assert self._status in AIOHTTP_EXCEPTIONS_BY_CODE\n    # aiohttp uses a separate exception for every HTTP status code\n    # https://docs.aiohttp.org/en/latest/web_exceptions.html\n    # you might need to add another exception if you want to use a\n    # new status code\n    raise AIOHTTP_EXCEPTIONS_BY_CODE[self._status]()\n\n\nclass WebServer:\n  \"\"\" Simple web server used for testing \"\"\"\n\n  responses: List[Response]\n\n  def __init__(self, port: int, expected_auth_token: str) -> None:\n    self.port = port\n    self.responses = []\n    self.expected_auth_token = expected_auth_token\n\n  async def start(self) -> None:\n    routes = web.RouteTableDef()\n\n    @routes.get('/test')\n    # pylint: disable=unused-argument\n    async def hello(request: Any) -> Any:\n      assert len(self.responses) > 0\n      assert request.headers[\n          'test_auth'] == f'test_auth {self.expected_auth_token}'\n      return self.responses.pop(0).get_response()\n\n    app = web.Application()\n    app.add_routes(routes)\n\n    self.runner = web.AppRunner(app)\n    await self.runner.setup()\n    site = web.TCPSite(self.runner, 'localhost', self.port)\n    await site.start()\n\n  async def stop(self) -> None:\n    await self.runner.cleanup()\n"
  },
  {
    "path": "gcpdiag/async_queries/dataproc/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/async_queries/dataproc/dataproc.py",
    "content": "\"\"\" Gateway for Dataproc service \"\"\"\nimport asyncio\nimport functools\nfrom typing import Any, Dict, Iterable, List, Mapping, Optional, Protocol\n\nfrom gcpdiag.async_queries.utils import loader, protocols\nfrom gcpdiag.queries import dataproc\n\n\nclass Region:\n  \"\"\" Helper class encapsulating Dataproc operations within a region \"\"\"\n  _api: protocols.API\n  _project_id: str\n  _region: str\n  _data: Optional[Any]\n\n  def __init__(self, api: protocols.API, project_id: str, region: str):\n    self._api = api\n    self._project_id = project_id\n    self._region = region\n    self._data = None\n\n  async def load(self) -> None:\n    assert self._data is None\n    self._data = await self._api.call(\n        method='GET',\n        url=\n        'https://dataproc.googleapis.com/v1/projects/{project_id}/regions/{region}/clusters'\n        .format(project_id=self._project_id, region=self._region))\n\n  @functools.cached_property\n  def clusters(self) -> List[dataproc.Cluster]:\n    return [self._mk_cluster(d) for d in self._clusters_descriptions]\n\n  @property\n  def _clusters_descriptions(self) -> List[Any]:\n    assert isinstance(self._data, Mapping)\n    descs = self._data.get('clusters', [])\n    assert isinstance(descs, List)\n    return descs\n\n  def _mk_cluster(self, desc: Any) -> dataproc.Cluster:\n    assert isinstance(desc, Mapping)\n    assert 'clusterName' in desc\n    assert isinstance(desc['clusterName'], str)\n    return dataproc.Cluster(name=desc['clusterName'],\n                            project_id=self._project_id,\n                            resource_data=desc)\n\n\nclass ProjectRegions(Protocol):\n\n  async def get_all(self) -> Iterable[str]:\n    pass\n\n\nclass Dataproc:\n  \"\"\" Gateway for Dataproc service \"\"\"\n  _api: protocols.API\n  _project_id: str\n  _project_regions: ProjectRegions\n  _clusters_by_name: Dict[str, dataproc.Cluster]\n  _loader: loader.Loader\n\n  def __init__(self, api: protocols.API, project_id: str,\n               project_regions: ProjectRegions) -> None:\n    self._api = api\n    self._project_id = project_id\n    self._project_regions = project_regions\n    self._clusters_by_name = {}\n    self._loader = loader.Loader(self._load)\n\n  async def list_clusters(self) -> List[str]:\n    await self._loader.ensure_loaded()\n    return list(self._clusters_by_name.keys())\n\n  async def get_cluster_by_name(self, cluster_name: str) -> dataproc.Cluster:\n    await self._loader.ensure_loaded()\n    return self._clusters_by_name[cluster_name]\n\n  async def _load(self) -> None:\n    regions_names = await self._project_regions.get_all()\n    regions = [self._mk_region(r) for r in regions_names]\n    await asyncio.gather(*[r.load() for r in regions])\n    for r in regions:\n      for cluster in r.clusters:\n        self._clusters_by_name[cluster.name] = cluster\n\n  def _mk_region(self, region: str) -> Region:\n    return Region(api=self._api, project_id=self._project_id, region=region)\n"
  },
  {
    "path": "gcpdiag/async_queries/dataproc/dataproc_test.py",
    "content": "'Tests for gcpdiag.async_queries.dataproc.Dataproc'\nimport asyncio\nimport unittest\nfrom typing import List\n\nimport yaml  # type: ignore\n\nfrom gcpdiag.async_queries.dataproc import dataproc\nfrom gcpdiag.async_queries.utils import fake_api\n\n\nclass FakeProjectRegions:\n\n  def __init__(self, regions: List[str]) -> None:\n    self.regions = regions\n\n  async def get_all(self) -> List[str]:\n    return self.regions\n\n\nclass TestProjectRegions(unittest.IsolatedAsyncioTestCase):\n  'Tests for gcpdiag.async_queries.dataproc.Dataproc'\n\n  def setUp(self) -> None:\n    self.project_regions = FakeProjectRegions(\n        regions=['westeros-central1', 'essos-east2'])\n    self.westeros_list_call = fake_api.APICall(\n        method='GET',\n        url=('https://dataproc.googleapis.com/v1/projects/test-project/regions/'\n             'westeros-central1/clusters'))\n    self.essos_list_call = fake_api.APICall(\n        'GET',\n        'https://dataproc.googleapis.com/v1/projects/test-project/regions/essos-east2/clusters'\n    )\n\n    self.api = fake_api.FakeAPI(responses=[(self.westeros_list_call,\n                                            yaml.safe_load(\"\"\"\n        clusters:\n          - clusterName: westeros1\n            status:\n              state: RUNNING\n          - clusterName: westeros2\n            status:\n              state: UNKNOWN\n        \"\"\")),\n                                           (self.essos_list_call,\n                                            yaml.safe_load(\"\"\"\n        clusters:\n          - clusterName: essos1\n            status:\n              state: RUNNING\n        \"\"\"))])\n    self.dataproc = dataproc.Dataproc(api=self.api,\n                                      project_id='test-project',\n                                      project_regions=self.project_regions)\n\n  async def test_list_clusters(self) -> None:\n    clusters = await self.dataproc.list_clusters()\n    self.assertListEqual(['westeros1', 'westeros2', 'essos1'], clusters)\n\n  async def test_cluster_status(self) -> None:\n    westeros1, westeros2, essos1 = await asyncio.gather(*[\n        self.dataproc.get_cluster_by_name(n)\n        for n in ['westeros1', 'westeros2', 'essos1']\n    ])\n    self.assertEqual('RUNNING', westeros1.status)\n    self.assertEqual('UNKNOWN', westeros2.status)\n    self.assertEqual('RUNNING', essos1.status)\n\n  async def test_deduplication(self) -> None:\n    await asyncio.gather(self.dataproc.get_cluster_by_name('westeros1'),\n                         self.dataproc.get_cluster_by_name('westeros1'))\n    self.assertEqual(1, self.api.count_calls(self.westeros_list_call))\n"
  },
  {
    "path": "gcpdiag/async_queries/project/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/async_queries/project/get_project.py",
    "content": "\"\"\" Helper method to initialize Project object \"\"\"\nfrom gcpdiag.async_queries.api import get_api\nfrom gcpdiag.async_queries.project import project\n\n_api = get_api.get_api()\n\n\ndef get_project(project_id: str) -> project.Project:\n  return project.Project(project_id=project_id, api=_api)\n"
  },
  {
    "path": "gcpdiag/async_queries/project/project.py",
    "content": "\"\"\" Class representing different services available within a GCP project \"\"\"\nimport functools\n\nfrom gcpdiag.async_queries import project_regions\nfrom gcpdiag.async_queries.dataproc import dataproc\nfrom gcpdiag.async_queries.utils import protocols\n\n\nclass Project:\n  \"\"\" Class representing different services available within a GCP project \"\"\"\n  _project_id: str\n  _api: protocols.API\n\n  def __init__(self, api: protocols.API, project_id: str) -> None:\n    self._project_id = project_id\n    self._api = api\n\n  @functools.cached_property\n  def dataproc(self) -> dataproc.Dataproc:\n    return dataproc.Dataproc(api=self._api,\n                             project_id=self._project_id,\n                             project_regions=self._project_regions)\n\n  @functools.cached_property\n  def _project_regions(self) -> project_regions.ProjectRegions:\n    return project_regions.ProjectRegions(project_id=self._project_id,\n                                          api=self._api)\n"
  },
  {
    "path": "gcpdiag/async_queries/project_regions.py",
    "content": "\"\"\" Gateway for extracting available GCP regions \"\"\"\nfrom typing import Any, Iterable, List, Mapping, Optional\n\nfrom gcpdiag.async_queries.utils import loader, protocols\n\n\nclass ProjectRegions:\n  \"\"\" Gateway for extracting available GCP regions \"\"\"\n  api: protocols.API\n  project_id: str\n  loader: loader.Loader\n  regions: Optional[List[str]]\n\n  def __init__(self, api: protocols.API, project_id: str) -> None:\n    self.api = api\n    self.project_id = project_id\n    self.loader = loader.Loader(self.load)\n    self.regions = None\n\n  async def get_all(self) -> List[str]:\n    await self.loader.ensure_loaded()\n    assert self.regions is not None\n    return self.regions\n\n  async def load(self) -> None:\n    resp = await self.call_api()\n    self.regions = self.parse_resp(resp)\n\n  async def call_api(self) -> Any:\n    return await self.api.call(\n        method='GET',\n        url=\n        'https://compute.googleapis.com/compute/v1/projects/{project_id}/regions'\n        .format(project_id=self.project_id))\n\n  def parse_resp(self, resp: Any) -> List[str]:\n    assert isinstance(resp, Mapping)\n    assert 'items' in resp\n    assert isinstance(resp['items'], Iterable)\n    return [r['name'] for r in resp.get('items', [])]\n"
  },
  {
    "path": "gcpdiag/async_queries/project_regions_test.py",
    "content": "'Tests for gcpdiag.async_queries.ProjectRegions'\nfrom asyncio import gather\nfrom unittest import IsolatedAsyncioTestCase\n\nfrom gcpdiag.async_queries.utils import fake_api\n\nfrom .project_regions import ProjectRegions\n\n\nclass TestProjectRegions(IsolatedAsyncioTestCase):\n  'Tests for gcpdiag.async_queries.ProjectRegions'\n\n  def setUp(self) -> None:\n    self.call = fake_api.APICall(\n        'GET',\n        'https://compute.googleapis.com/compute/v1/projects/test-project/regions',\n        None)\n    self.api = fake_api.FakeAPI(responses=[(self.call, {\n        'items': [{\n            'name': 'westeros-central1'\n        }, {\n            'name': 'essos-east2'\n        }]\n    })])\n    self.project_regions = ProjectRegions(api=self.api,\n                                          project_id='test-project')\n\n  async def test_happy_path(self) -> None:\n    result = await self.project_regions.get_all()\n    self.assertListEqual(['westeros-central1', 'essos-east2'], result)\n\n  async def test_deduplication(self) -> None:\n    await gather(self.project_regions.get_all(), self.project_regions.get_all())\n    self.assertEqual(self.api.count_calls(self.call), 1)\n"
  },
  {
    "path": "gcpdiag/async_queries/py.typed",
    "content": ""
  },
  {
    "path": "gcpdiag/async_queries/utils/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/async_queries/utils/fake_api.py",
    "content": "'Testing double for gcpdiag.async_queries.api.API'\nfrom asyncio import sleep\nfrom typing import Any, List, Optional, Tuple\n\n\nclass APICall:\n  'Helper class representing an API call'\n  method: str\n  url: str\n  json: Any\n\n  def __init__(self, method: str, url: str, json: Any = None) -> None:\n    self.method = method\n    self.url = url\n    self.json = json\n\n  def __eq__(self, other: Any) -> bool:\n    assert isinstance(other, APICall)\n    return self.method == other.method and self.url == other.url and self.json == other.json\n\n  def __repr__(self) -> str:\n    return f'<Call: {self.method} {self.url} {self.json}>'\n\n\nclass FakeAPI:\n  'Testing double for gcpdiag.async_queries.api.API'\n  responses: List[Tuple[APICall, Any]]\n  calls: List[APICall]\n\n  def __init__(self, responses: List[Tuple[APICall, Any]]) -> None:\n    self.responses = responses\n    self.calls = []\n\n  async def call(self,\n                 method: str,\n                 url: str,\n                 json: Optional[Any] = None) -> Any:\n    call = APICall(method, url, json)\n    await sleep(0)\n    self.calls.append(call)\n    return self.get_response(call)\n\n  def get_response(self, call: APICall) -> Any:\n    for c, r in self.responses:\n      if c == call:\n        return r\n    raise RuntimeError(f'Canned response not found for {call}')\n\n  def count_calls(self, call: APICall) -> int:\n    count = 0\n    for c in self.calls:\n      if c == call:\n        count += 1\n    return count\n"
  },
  {
    "path": "gcpdiag/async_queries/utils/loader.py",
    "content": "\"\"\"\n  Helper class to optimize gateway objects loading\n  so that data only loaded once\n\"\"\"\nimport asyncio\nfrom typing import Callable, Coroutine, Optional\n\n\nclass Loader:\n  \"\"\"\n    Helper class to optimize gateway objects loading\n    so that data only loaded once\n\n    Initialized with coroutine (async method) that should be run only once\n    All clients are expected to await ensure_loaded method\n\n    class MyGateway:\n      def __init__(self):\n        self.loader = Loader(self.load)\n        ...\n\n      async def get_response(self):\n        await self.loader.ensure_loaded()\n        return self.api_response\n\n      async def load(self) -> None:\n        ...\n        self.api_response = await expensive_api_call()\n        ...\n\n    my_gateway = MyGateway()\n\n    In this case, it doesn't matter how many clients call\n    my_gateway.get_response() concurrently, expensive_api_call() only executed\n    once (and all clients receive results of this call)\n  \"\"\"\n  _load_task: Optional[asyncio.Task]\n  _load_coroutine: Optional[Callable[[], Coroutine]]\n\n  def __init__(self, load_coroutine: Callable[[], Coroutine]) -> None:\n    self._load_coroutine = load_coroutine\n    self._load_task = None\n\n  async def ensure_loaded(self) -> None:\n    assert self._load_coroutine is not None\n    if self._load_task is None:\n      self._load_task = asyncio.create_task(self._load_coroutine())\n    await self._load_task\n"
  },
  {
    "path": "gcpdiag/async_queries/utils/protocols.py",
    "content": "\"\"\" Common protocols used by async queries \"\"\"\n\nfrom typing import Any, Iterable, Optional, Protocol\n\n\nclass API(Protocol):\n\n  async def call(self,\n                 method: str,\n                 url: str,\n                 json: Optional[Any] = None) -> Any:\n    pass\n\n\nclass ProjectRegions(Protocol):\n\n  async def get_all(self) -> Iterable[str]:\n    pass\n"
  },
  {
    "path": "gcpdiag/caching.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Persistent caching using diskcache.\"\"\"\n\nimport atexit\nimport collections\nimport contextlib\nimport functools\nimport hashlib\nimport logging\nimport pickle\nimport shutil\nimport tempfile\nimport threading\nfrom typing import List\n\nimport diskcache\nimport googleapiclient.http\n\nfrom gcpdiag import config\n\n_cache = None\n_bypass_cache = False\n_use_cache = True\n\n\ndef _set_bypass_cache(value: bool):\n  \"\"\"Sets the cache bypass flag for the current thread.\n  Only set this for code that need to re-fetch fresh data\n  regardless or expiry and state of cached data.\n  \"\"\"\n  thread = threading.current_thread()\n  setattr(thread, '_bypass_cache', value)\n\n\ndef _get_bypass_cache():\n  \"\"\"Gets the cache bypass flag for the current thread. By default should always use cache\"\"\"\n  # if cache is permanently disabled always bypass cache\n  if not _use_cache:\n    return False\n  return getattr(threading.current_thread(), '_bypass_cache', False)\n\n\ndef configure_global_cache(enabled: bool):\n  \"\"\" Used to enable or disable the use of caching in the application.\"\"\"\n  global _use_cache\n  _use_cache = enabled\n\n\n@contextlib.contextmanager\ndef bypass_cache():\n  \"\"\"\n  A thread-safe context manager to temporarily set the cache bypass to True\n  for the current thread, ensuring it is reverted back when the context exits.\n  \"\"\"\n  original_value = _get_bypass_cache()\n  _set_bypass_cache(True)\n  try:\n    yield\n  finally:\n    _set_bypass_cache(original_value)\n\n\ndef _clean_cache():\n  \"\"\"Remove all cached items with tag 'tmp'.\n\n  We use 'tmp' to store data that should be cached only during a single\n  execution of the script.\n  \"\"\"\n  if _cache:\n    count = _cache.evict('tmp')\n    count += _cache.expire()\n    if count:\n      logging.debug('removed %d items from cache', count)\n\n\ndef _close_cache():\n  if _cache:\n    _clean_cache()\n    _cache.close()\n\n\ndef get_disk_cache() -> diskcache.Cache:\n  \"\"\"Get a Diskcache.Cache object that can be used to cache data.\"\"\"\n  global _cache\n  if _use_cache and not _cache:\n    _cache = diskcache.Cache(config.get_cache_dir(), tag_index=True)\n    # Make sure that we remove any data that wasn't cleaned up correctly for\n    # some reason.\n    _clean_cache()\n    # Cleanup the cache at program exit.\n    atexit.register(_close_cache)\n  return _cache\n\n\ndeque_tmpdirs: List[str] = []\n\n\ndef _clean_tmp_deque():\n  for d in deque_tmpdirs:\n    logging.debug('deleting dequeue tempdir: %s', d)\n    shutil.rmtree(d, ignore_errors=True)\n\n\ndef get_tmp_deque(prefix='tmp-deque-') -> diskcache.Deque:\n  \"\"\"Get a Diskcache.Deque object useful to temporarily store data (like logs).\n\n  arguments:\n    prefix: prefix to be added to the temporary directory (default: tmp-deque)\n  \"\"\"\n  tempdir = tempfile.mkdtemp(prefix=prefix, dir=config.get_cache_dir())\n  if not deque_tmpdirs:\n    atexit.register(_clean_tmp_deque)\n  deque_tmpdirs.append(tempdir)\n  deque = diskcache.Deque(directory=tempdir)\n  return deque\n\n\n# Write our own implementation instead of using private function\n# functtools._make_key, so that there is no breakage if that\n# private function changes with a newer Python version.\ndef _make_key(func, args, kwargs):\n  h = hashlib.sha256()\n  func_name = bytes(func.__module__ + '.' + func.__name__ + ':', 'utf-8')\n  h.update(pickle.dumps(args))\n  h.update(pickle.dumps(kwargs))\n  # we don't hash the function name so that it's easier to debug\n  key = func_name + h.digest()\n  return key\n\n\n@contextlib.contextmanager\ndef _acquire_timeout(lock, timeout, name):\n  thread = threading.current_thread()\n  orig_thread_name = thread.name\n  thread.name = orig_thread_name + f'(waiting:{name})'\n  result = lock.acquire(timeout=timeout)\n  if not result:\n    raise RuntimeError(f\"Couldn't acquire lock for {name}.\")\n  try:\n    thread.name = orig_thread_name + f'(lock:{name})'\n    yield\n  finally:\n    thread.name = orig_thread_name\n    if result:\n      lock.release()\n\n\ndef cached_api_call(expire=None, in_memory=False):\n  \"\"\"Caching decorator optimized for API calls.\n\n  This is very similar to functools.lru_cache, with the following differences:\n  - uses diskcache so that the memory footprint doesn't grow uncontrollably (the\n    API results might be big).\n  - uses a lock so that if the function is called from two threads\n    simultaneously, only one API call will be done and the other will wait until\n    the result is available in the cache.\n\n  Parameters:\n  - expire: number of seconds until the key expires (default: expire when the\n    process ends)\n  - in_memory: if true the result will be kept in memory, similarly to\n    lru_cache (but with the locking).\n  \"\"\"\n\n  def _cached_api_call_decorator(func):\n    lockdict = collections.defaultdict(threading.Lock)\n    if in_memory:\n      lru_cached_func = functools.lru_cache()(func)\n\n    @functools.wraps(func)\n    def _cached_api_call_wrapper(*args, **kwargs):\n      key = None\n      if _use_cache:\n        logging.debug('looking up cache for %s', func.__name__)\n        key = _make_key(func, args, kwargs)\n        lock = lockdict[key]\n        with _acquire_timeout(lock, config.CACHE_LOCK_TIMEOUT, func.__name__):\n          if in_memory:\n            if _get_bypass_cache():\n              logging.debug('bypassing cache for %s, fetching fresh data.',\n                            func.__name__)\n              lru_cached_func.cache_clear()\n            return lru_cached_func(*args, **kwargs)\n          else:\n            api_cache = get_disk_cache()\n            if _get_bypass_cache():\n              logging.debug('bypassing cache for %s, fetching fresh data.',\n                            func.__name__)\n            else:\n              # We use 'no data' to be able to cache calls that returned None.\n              cached_result = api_cache.get(key, default='no data')\n              if cached_result != 'no data':\n                logging.debug('returning cached result for %s', func.__name__)\n                if isinstance(cached_result, Exception):\n                  raise cached_result\n                return cached_result\n      else:\n        logging.debug('caching is disabled for %s', func.__name__)\n      # Call the function\n      logging.debug('calling function %s (expire=%s, key=%s)', func.__name__,\n                    str(expire), str(key))\n      result = None\n      try:\n        result = func(*args, **kwargs)\n        logging.debug('DONE calling function %s (expire=%s, key=%s)',\n                      func.__name__, str(expire), str(key))\n      except googleapiclient.errors.HttpError as err:\n        # cache API errors as well\n        result = err\n      if _use_cache:\n        if expire:\n          api_cache.set(key, result, expire=expire)\n        else:\n          api_cache.set(key, result, tag='tmp')\n      if isinstance(result, Exception):\n        raise result\n      return result\n\n    return _cached_api_call_wrapper\n\n  # Decorator without parens -> called with function as first parameter\n  if callable(expire):\n    func = expire\n    expire = None\n    return _cached_api_call_decorator(func)\n  else:\n    return _cached_api_call_decorator\n"
  },
  {
    "path": "gcpdiag/caching_test.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test code in caching.py.\"\"\"\n\nimport secrets\nimport string\nimport threading\nimport unittest\nfrom unittest import mock\n\nfrom googleapiclient import errors\n\nfrom gcpdiag import caching\n\n\ndef simple_function(mixer_arg):\n  # Generate a unique string of 10 characters\n  return mixer_arg.join(\n      secrets.choice(string.ascii_letters + string.digits) for _ in range(10))\n\n\n# Decorated versions of the simple_function for in-memory and disk cache testing\ncached_in_memory = caching.cached_api_call(in_memory=True)(simple_function)\ncached_on_disk = caching.cached_api_call(simple_function)\n\n\nclass CacheBypassTests(unittest.TestCase):\n  \"\"\"Testing cache bypass test\"\"\"\n\n  def test_cache_bypass_in_memory(self):\n    with caching.bypass_cache():\n      result_cached = cached_in_memory('same-arg')\n    self.assertIsInstance(result_cached, str)\n    # Another call not bypassing the cache should return originally cached result\n    result_cached_two = cached_in_memory('same-arg')\n    # String should be the same given bypass is not turned on\n    self.assertEqual(result_cached, result_cached_two)\n    # memory id should be the same\n    self.assertEqual(id(result_cached), id(result_cached_two))\n\n    with caching.bypass_cache():\n      result_bypass = cached_in_memory('same-arg')\n    self.assertNotEqual(result_cached, result_bypass)\n\n    result_after_bypass = cached_in_memory('same-arg')\n    self.assertNotEqual(result_cached, result_after_bypass)\n\n  def test_cache_bypass_disk_cache(self):\n    with caching.bypass_cache():\n      result_cached = cached_on_disk('same-arg')\n    self.assertIsInstance(result_cached, str)\n\n    # Another call should return originally cached result\n    result_cached_two = cached_on_disk('same-arg')\n    self.assertEqual(result_cached, result_cached_two)\n\n    with caching.bypass_cache():\n      result_bypass = cached_on_disk('same-arg')\n    self.assertNotEqual(result_cached, result_bypass)\n\n    result_after_bypass = cached_on_disk('same-arg')\n    self.assertNotEqual(result_cached, result_after_bypass)\n\n  def test_thread_safe_caching(self):\n    results = set()\n\n    def worker(arg, result):\n      with caching.bypass_cache():\n        result = cached_on_disk(arg)\n      results.add(result)\n\n    threads = [\n        threading.Thread(target=worker, args=(\n            arg,\n            results,\n        )) for arg in ['a', 'a', 'b', 'c']\n    ]\n    for t in threads:\n      t.start()\n      t.join()\n    self.assertEqual(len(results), 4, 'All threads should get different result')\n\n\nclass UseCacheTests(unittest.TestCase):\n  \"\"\"Testing configuring cache use\"\"\"\n\n  def test_enable_use_cache(self):\n    caching.configure_global_cache(enabled=True)\n    result_cached = cached_in_memory('same-arg')\n    result_cached_two = cached_in_memory('same-arg')\n    # memory id should be the same\n    self.assertEqual(id(result_cached), id(result_cached_two))\n\n    # Disk cache\n    disk_result_cached = cached_on_disk('same-arg')\n    next_disk_result_cached = cached_on_disk('same-arg')\n    self.assertEqual(disk_result_cached, next_disk_result_cached)\n\n  def test_disable_use_cache(self):\n    caching.configure_global_cache(enabled=False)\n    result_cached = cached_in_memory('same-arg')\n    next_call_result = cached_in_memory('same-arg')\n    self.assertNotEqual(id(result_cached), id(next_call_result))\n\n    disk_result = cached_on_disk('same-arg-but-different-result')\n    next_disk_result = cached_on_disk('same-arg-but-different-result')\n    self.assertNotEqual(disk_result, next_disk_result)\n\n  def test_exception_raised_when_cache_disabled(self):\n    caching.configure_global_cache(enabled=False)\n\n    @caching.cached_api_call()\n    def failing_function():\n      resp = mock.Mock()\n      resp.status = 403\n      raise errors.HttpError(resp, b'Forbidden')\n\n    with self.assertRaises(errors.HttpError):\n      failing_function()\n"
  },
  {
    "path": "gcpdiag/config.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Globals that will be potentially user-configurable in future.\"\"\"\n\nimport os\nimport sys\nfrom typing import Any, Dict\n\nimport appdirs\nimport yaml\n\n# gcpdiag version (not configurable, but useful to have here)\n#\nVERSION = '0.81-test'\n\"\"\"\nConfiguration properties are divided into 3 main categories:\n- static (class properties) which values cannot be changed or provided\n- options which values can be provided as command arguments\n- options which values can be provided as yaml configuration\n\nIn addition yaml configuration can contains global configuration which will\nbe applied to all inspected projects or we can provide strict configuration\ndedicated to particular project:\n\n```\n---\nlogging_fetch_max_time_seconds: 300\nverbose: 3\nwithin_days: 5\n\nprojects:\n  myproject:\n    billing_project: sample\n    include:\n    - '*BP*'\n    exclude:\n    - '*SEC*'\n    - '*ERR*'\n    include_extended: True\n```\n\nYaml configuration defined per project takes precedence over global\nconfiguration. Global configuration takes precedence over configuration\nprovided as a command arguments.\n\"\"\"\n\n#\n# Static properties\n#\n\n# Default Number of Retries for API Calls.\nAPI_RETRIES = 3\nAPI_RETRY_SLEEP_MULTIPLIER = 1.4\nAPI_RETRY_SLEEP_RANDOMNESS_PCT = 0.2\n\n_cache_dir = appdirs.user_cache_dir('gcpdiag')\n\n\ndef set_cache_dir(path: str):\n  \"\"\"Set temporary directory for cache.\"\"\"\n  global _cache_dir\n  _cache_dir = path\n\n\n# Cache directory for diskcache.\ndef get_cache_dir():\n  \"\"\"Get temporary directory for cache.\"\"\"\n  return _cache_dir\n\n\n# Number of seconds to wait for the gcpdiag.cache API cache lock to be freed.\nCACHE_LOCK_TIMEOUT = 120\n\n# How long to cache documents that rarely change (e.g. predefined IAM roles).\nSTATIC_DOCUMENTS_EXPIRY_SECONDS = 3600 * 24\n\n# Prefetch worker threads\nMAX_WORKERS = 20\n\n_args: Dict[str, Any] = {}\n_config: Dict[str, Any] = {}\n_project_id: str = ''\n\n\ndef _get_default_report_dir():\n  \"\"\"Dynamically determine default report dir, using $HOME in Cloud Shell.\"\"\"\n  default_path = '/tmp'\n\n  if os.getenv('CLOUD_SHELL'):\n    try:\n      home_path = os.path.expanduser('~')\n      return os.path.join(home_path, default_path.lstrip(os.sep))\n\n    except OSError:\n      return default_path\n  return default_path\n\n\n_defaults: Dict[str, Any] = {\n    'auth_adc': False,\n    'auth_key': None,\n    'billing_project': None,\n    'show_skipped': False,\n    'hide_ok': False,\n    'include': None,\n    'exclude': None,\n    'include_extended': False,\n    'verbose': 0,\n    'within_days': 3,\n    'hide_skipped': True,\n    'show_ok': True,\n    'logging_ratelimit_requests': 60,\n    'logging_ratelimit_period_seconds': 60,\n    'logging_page_size': 500,\n    'logging_fetch_max_entries': 10000,\n    'logging_fetch_max_time_seconds': 120,\n    'enable_gce_serial_buffer': False,\n    'auto': False,\n    'report_dir': _get_default_report_dir(),\n    'interface': 'cli',\n    'universe_domain': 'googleapis.com',\n    'reason': None\n}\n\n#\n# externally used methods\n#\n\n\ndef init(args, is_cloud_shell=False):\n  \"\"\"Load configuration based on provided CLI args.\n\n  Args:\n      args (Dict): Configuration dictionary.\n      project_id (str): Current project id\n      is_cloud_shell (bool, optional): Whether cloud shell is used. Defaults to False.\n  \"\"\"\n  global _args\n  global _config\n  _args = args if args else {}\n  _args.update({'is_cloud_shell': is_cloud_shell})\n\n  file = args.get('config', None)\n  if file:\n    # Read the file contents\n    if os.path.exists(file):\n      with open(file, encoding='utf-8') as f:\n        content = f.read()\n    else:\n      print(f'ERROR: Configuration file: {file} does not exist!',\n            file=sys.stderr)\n      raise FileNotFoundError\n\n    # Parse the content of the file as YAML\n    if content:\n      try:\n        _config = yaml.safe_load(content)\n      except yaml.YAMLError as err:\n        print(f\"ERROR: can't parse content of the file as YAML: {err}\",\n              file=sys.stderr)\n        raise err\n\n\ndef set_project_id(project_id):\n  \"\"\"Configure project id so that project-id-specific configuration can be retrieved.\"\"\"\n  global _project_id\n  _project_id = project_id\n\n\ndef get_project_id():\n  \"\"\"Session project-id.\"\"\"\n  return _project_id\n\n\ndef get(key):\n  \"\"\"Find property value for provided key inside CLI args or yaml configuration\n  (including global and per project configuration).\n\n  Yaml configuration defined per project takes precedence over global\n  configuration. Global configuration takes precedence over configuration\n  provided as a command argument.\n\n  Args:\n      key (str): property key name\n\n  Returns:\n      Any: return value for provided key\n  \"\"\"\n  if _project_id and _project_id in _config.get('projects', {}).keys():\n    if key in _config['projects'][_project_id].keys():\n      # return property from configuration per project if provided\n      return _config['projects'][_project_id][key]\n  if key in _config:\n    # return property from global configuration if provided\n    return _config[key]\n  if key in _args and _args[key]:\n    # return property from args if provided and not None\n    return _args[key]\n  # return property form defaults\n  return _defaults.get(key, None)\n"
  },
  {
    "path": "gcpdiag/config_test.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test code in config.py.\"\"\"\n\nfrom tempfile import NamedTemporaryFile\n\nimport pytest\n\nfrom gcpdiag import config\n\nSAMPLE_CONFIG = '''\n---\nbilling_project: sample\ninclude:\n- '*BP*'\nexclude:\n- '*SEC*'\n- '*ERR*'\ninclude_extended: True\nverbose: 3\nwithin_days: 5\n'''\n\nLOGGING_CONFIG = '''\n---\nlogging_ratelimit_requests: 120\nlogging_ratelimit_period_seconds: 120\nlogging_page_size: 1000\nlogging_fetch_max_entries: 20000\nlogging_fetch_max_time_seconds: 300\n'''\n\nEMPTY_CONFIG = ''\n\nPER_PROJECT_CONFIG = '''\n---\nlogging_fetch_max_time_seconds: 300\nverbose: 3\nwithin_days: 5\n\nprojects:\n  myproject:\n    billing_project: perproject\n    include:\n    - '*BP*'\n    exclude:\n    - '*SEC*'\n    - '*ERR*'\n    include_extended: True\n'''\n\n\nclass Test:\n  \"\"\"Unit tests for Configuration.\"\"\"\n\n  @pytest.fixture(autouse=True)\n  def clear_globals(self):\n    \"\"\"These tests modify global state, so it is important to clean it.\"\"\"\n    # pylint: disable=protected-access\n    yield\n    config._args = {}\n    config._config = {}\n    config._project_id = ''\n\n  def test_static_properties(self):\n    assert config.CACHE_LOCK_TIMEOUT == 120\n    assert config.STATIC_DOCUMENTS_EXPIRY_SECONDS == 3600 * 24\n    assert config.MAX_WORKERS == 20\n\n  def test_default_dynamic_properties(self):\n    config.init({})\n    assert config.get('auth_adc') is False\n    assert config.get('include_extended') is False\n    assert config.get('config') is None\n    assert config.get('verbose') == 0\n    assert config.get('within_days') == 3\n    assert config.get('enable_gce_serial_buffer') is False\n    assert config.get('reason') is None\n\n  def test_overwrite_dynamic_properties(self):\n    config.init({\n        'auth_adc': True,\n        'include_extended': True,\n        'verbose': 3,\n        'within_days': 7\n    })\n    assert config.get('auth_adc') is True\n    assert config.get('include_extended') is True\n    assert config.get('verbose') == 3\n    assert config.get('within_days') == 7\n\n  def test_include(self):\n    config.init({})\n    assert config.get('include') is None\n    config.init({'include': ['*BP*']})\n    assert config.get('include') == ['*BP*']\n    config.init({'include': ['*BP*', '*ERR*', '*WARN*']})\n    assert config.get('include') == ['*BP*', '*ERR*', '*WARN*']\n\n  def test_exclude(self):\n    config.init({})\n    assert config.get('exclude') is None\n    config.init({'exclude': ['*BP*']})\n    assert config.get('exclude') == ['*BP*']\n    config.init({'exclude': ['*BP*', '*ERR*', '*WARN*']})\n    assert config.get('exclude') == ['*BP*', '*ERR*', '*WARN*']\n\n  def test_empty_config(self):\n    # create temporary config file\n    with NamedTemporaryFile() as fp:\n      fp.write(EMPTY_CONFIG.encode())\n      fp.seek(0)\n\n      # load config from file\n      config.init({'config': fp.name})\n      assert config.get('config') == fp.name\n      # read value available only from config\n      assert config.get('logging_ratelimit_requests') == 60\n      assert config.get('logging_fetch_max_time_seconds') == 120\n\n  def test_sample_config(self):\n    # create temporary config file\n    with NamedTemporaryFile() as fp:\n      fp.write(SAMPLE_CONFIG.encode())\n      fp.seek(0)\n\n      # load config from file\n      config.init({'config': fp.name})\n      assert config.get('config') == fp.name\n      assert config.get('billing_project') == 'sample'\n      assert config.get('include_extended') is True\n      assert config.get('verbose') == 3\n      assert config.get('within_days') == 5\n      assert config.get('include') == ['*BP*']\n      assert config.get('exclude') == ['*SEC*', '*ERR*']\n\n  def test_logging_config(self):\n    # create temporary config file\n    with NamedTemporaryFile() as fp:\n      fp.write(LOGGING_CONFIG.encode())\n      fp.seek(0)\n\n      # load config from file\n      config.init({'config': fp.name}, 'x')\n      assert config.get('config') == fp.name\n      assert config.get('logging_ratelimit_requests') == 120\n      assert config.get('logging_ratelimit_period_seconds') == 120\n      assert config.get('logging_page_size') == 1000\n      assert config.get('logging_fetch_max_entries') == 20000\n      assert config.get('logging_fetch_max_time_seconds') == 300\n\n  def test_per_project_config(self):\n    # create temporary config file\n    with NamedTemporaryFile() as fp:\n      fp.write(PER_PROJECT_CONFIG.encode())\n      fp.seek(0)\n\n      # load config from file\n      config.init({'config': fp.name})\n      config.set_project_id('myproject')\n      assert config.get('config') == fp.name\n      assert config.get('billing_project') == 'perproject'\n      assert config.get('include_extended') is True\n      assert config.get('include') == ['*BP*']\n      assert config.get('exclude') == ['*SEC*', '*ERR*']\n\n      assert config.get('verbose') == 3\n      assert config.get('logging_fetch_max_time_seconds') == 300\n      assert config.get('within_days') == 5\n"
  },
  {
    "path": "gcpdiag/context.py",
    "content": "# Copyright 2025 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Abstract interface for providing execution context.\"\"\"\n\nimport abc\n\n\nclass ContextProvider(abc.ABC):\n  \"\"\"Abstract interface for managing execution context for threads.\"\"\"\n\n  @abc.abstractmethod\n  def setup_thread_context(self) -> None:\n    \"\"\"Set up the necessary context for the current thread.\"\"\"\n    pass\n\n  @abc.abstractmethod\n  def teardown_thread_context(self) -> None:\n    \"\"\"Clean up the thread context.\"\"\"\n    pass\n"
  },
  {
    "path": "gcpdiag/executor.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"ThreadPoolExecutor instance that can be used to run tasks in parallel\"\"\"\n\nimport concurrent.futures\nfrom typing import Any, Callable, Iterable, Optional\n\nfrom gcpdiag import config, models\n\n_real_executor: Optional[concurrent.futures.ThreadPoolExecutor] = None\n\n\ndef _get_real_executor() -> concurrent.futures.ThreadPoolExecutor:\n  global _real_executor\n  if _real_executor is None:\n    _real_executor = concurrent.futures.ThreadPoolExecutor(\n        max_workers=config.MAX_WORKERS)\n  return _real_executor\n\n\ndef _context_wrapper(fn, context: models.Context):\n\n  def wrapped(*args, **kwargs):\n    provider = context.context_provider\n    if provider:\n      provider.setup_thread_context()\n    try:\n      return fn(*args, **kwargs)\n    finally:\n      if provider:\n        provider.teardown_thread_context()\n\n  return wrapped\n\n\nclass ContextAwareExecutor:\n  \"\"\"A ThreadPoolExecutor wrapper that propagates the gcpdiag context.\n\n  This executor ensures that the thread-local context (e.g., for API clients)\n  is properly set up and torn down for each task executed in the thread pool.\n  \"\"\"\n\n  def __init__(self, context: models.Context):\n    self._context = context\n    self._executor = _get_real_executor()\n\n  def submit(self, fn: Callable[..., Any], *args: Any,\n             **kwargs: Any) -> concurrent.futures.Future[Any]:\n    wrapped_fn = _context_wrapper(fn, self._context)\n    return self._executor.submit(wrapped_fn, *args, **kwargs)\n\n  def map(\n      self,\n      fn: Callable[..., Any],\n      *iterables: Iterable[Any],\n      timeout: Optional[float] = None,\n      chunksize: int = 1,\n  ):\n    wrapped_fn = _context_wrapper(fn, self._context)\n    return self._executor.map(wrapped_fn,\n                              *iterables,\n                              timeout=timeout,\n                              chunksize=chunksize)\n\n  def shutdown(self, wait: bool = True):\n    # We don't shut down the underlying global executor here\n    pass\n\n  def __enter__(self):\n    return self\n\n  def __exit__(self, exc_type, exc_val, exc_tb):\n    self.shutdown(wait=True)\n\n\ndef get_executor(context: models.Context) -> ContextAwareExecutor:\n  return ContextAwareExecutor(context)\n"
  },
  {
    "path": "gcpdiag/executor_test.py",
    "content": "# Copyright 2025 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Unit tests for executor.py.\"\"\"\n\nimport unittest\nfrom unittest import mock\n\nfrom gcpdiag import executor, models\n\n\nclass ContextAwareExecutorTest(unittest.TestCase):\n\n  def test_context_propagation_with_submit(self):\n    \"\"\"Test that context is setup and torn down with submit().\"\"\"\n    mock_provider = mock.Mock()\n    mock_context = mock.Mock(spec=models.Context)\n    mock_context.context_provider = mock_provider\n\n    with executor.ContextAwareExecutor(context=mock_context) as ex:\n      future = ex.submit(lambda: 'test')\n      self.assertEqual('test', future.result())\n\n    mock_provider.setup_thread_context.assert_called_once()\n    mock_provider.teardown_thread_context.assert_called_once()\n\n  def test_context_propagation_with_map(self):\n    \"\"\"Test that context is setup and torn down with map().\"\"\"\n    mock_provider = mock.Mock()\n    mock_context = mock.Mock(spec=models.Context)\n    mock_context.context_provider = mock_provider\n\n    with executor.ContextAwareExecutor(context=mock_context) as ex:\n      results = list(ex.map(lambda x: x, ['test']))\n      self.assertEqual(['test'], results)\n\n    mock_provider.setup_thread_context.assert_called_once()\n    mock_provider.teardown_thread_context.assert_called_once()\n\n\nif __name__ == '__main__':\n  unittest.main()\n"
  },
  {
    "path": "gcpdiag/hooks.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Hooks function definitions.\n\nHooks are functions that are called in different parts of the code base,\nand used to execute some functionality that might be only required in\ncertain environments.\n\"\"\"\n\n\ndef set_lint_args_hook(args):\n  \"\"\"Called after lint command arguments were parsed.\"\"\"\n  try:\n    # This is for Google-internal use only and allows us to modify\n    # default options for internal use.\n    # pylint: disable=import-outside-toplevel\n    from gcpdiag_google_internal import hooks as google_internal\n    google_internal.set_lint_args_hook(args)\n  except ImportError:\n    pass\n\n\ndef set_runbook_args_hook(args):\n  \"\"\"Called after runbook command arguments were parsed.\"\"\"\n  try:\n    # This is for Google-internal use only and allows us to modify\n    # default options for internal use.\n    # pylint: disable=import-outside-toplevel\n    from gcpdiag_google_internal import hooks as google_internal\n    google_internal.set_runbook_args_hook(args)\n  except ImportError:\n    pass\n\n\ndef verify_access_hook(project_id: str):\n  \"\"\"Called to do additional authorization verifications.\"\"\"\n  try:\n    # gcpdiag_google_internal contains code that we run only internally\n    # at Google, so this import will fail in the public version.\n    # pylint: disable=import-outside-toplevel\n    from gcpdiag_google_internal import hooks as google_internal\n    google_internal.verify_access_hook(project_id)\n  except ImportError:\n    pass\n\n\ndef request_builder_hook(*args, **kwargs):\n  \"\"\"Called when creating HTTP requests.\"\"\"\n  try:\n    # This is for Google-internal use only and allows us to modify the request\n    # to make it work also internally. The import will fail for the public\n    # version of gcpdiag.\n    # pylint: disable=import-outside-toplevel\n    from gcpdiag_google_internal import hooks\n    hooks.request_builder_hook(*args, **kwargs)\n  except ImportError:\n    pass\n\n\ndef post_lint_hook(report):\n  \"\"\"Called after lint command has run.\"\"\"\n  try:\n    # gcpdiag_google_internal contains code that we run only internally\n    # at Google, so this import will fail in the public version.\n    # pylint: disable=import-outside-toplevel\n    from gcpdiag_google_internal import hooks as google_internal\n    google_internal.post_lint_hook(report)\n  except ImportError:\n    pass\n\n\ndef post_runbook_hook(report):\n  \"\"\"Called after runbook command has run.\"\"\"\n  try:\n    # gcpdiag_google_internal contains code that we run only internally\n    # at Google, so this import will fail in the public version.\n    # pylint: disable=import-outside-toplevel\n    from gcpdiag_google_internal import hooks as google_internal\n    google_internal.post_runbook_hook(report)\n  except ImportError:\n    pass\n"
  },
  {
    "path": "gcpdiag/lint/__init__.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"lint command: find potential issues in GCP projects.\"\"\"\n\nimport abc\nimport asyncio\nimport concurrent.futures\nimport dataclasses\nimport enum\nimport importlib\nimport inspect\nimport logging\nimport os\nimport pkgutil\nimport re\nimport sys\nimport threading\nimport time\nimport types\nfrom collections.abc import Callable\nfrom typing import Any, Dict, Iterable, Iterator, List, Optional, Protocol, Set\n\nimport googleapiclient.errors\n\nfrom gcpdiag import config, models, utils\nfrom gcpdiag.executor import get_executor\n# to avoid confusion with gcpdiag.lint.gce\nfrom gcpdiag.queries import gce as gce_mod\nfrom gcpdiag.queries import logs\n\n\nclass LintRuleClass(enum.Enum):\n  \"\"\"Identifies rule class.\"\"\"\n  ERR = 'ERR'\n  BP = 'BP'\n  SEC = 'SEC'\n  WARN = 'WARN'\n  # classes for extended rules\n  ERR_EXT = 'ERR_EXT'\n  BP_EXT = 'BP_EXT'\n  SEC_EXT = 'SEC_EXT'\n  WARN_EXT = 'WARN_EXT'\n\n  def __str__(self):\n    return str(self.value)\n\n\n@dataclasses.dataclass\nclass LintRule:\n  \"\"\"Identifies a lint rule.\"\"\"\n  product: str\n  rule_class: LintRuleClass\n  rule_id: str\n  short_desc: str\n  long_desc: str\n  keywords: List[str]\n  run_rule_f: Optional[Callable] = None\n  async_run_rule_f: Optional[Callable] = None\n  prepare_rule_f: Optional[Callable] = None\n  prefetch_rule_f: Optional[Callable] = None\n  prefetch_rule_future: Optional[concurrent.futures.Future] = None\n\n  def __hash__(self):\n    return str(self.product + self.rule_class.value + self.rule_id).__hash__()\n\n  def __str__(self):\n    return self.product + '/' + self.rule_class.value + '/' + self.rule_id\n\n  @property\n  def doc_url(self) -> str:\n    return f'https://gcpdiag.dev/rules/{self.product}/{self.rule_class}/{self.rule_id}'\n\n\n@dataclasses.dataclass\nclass LintRuleResult:\n  status: str\n  resource: Optional[models.Resource]\n  reason: Optional[str]\n  short_info: Optional[str]\n\n\nclass LintReportRuleInterface:\n  \"\"\"LintRule objects use this interface to report their results.\"\"\"\n  rule: LintRule\n  results: List[LintRuleResult]\n  _lint_result: 'LintResults'\n\n  def __init__(self, rule: LintRule, lint_result: 'LintResults') -> None:\n    self.rule = rule\n    self._lint_result = lint_result\n    self.results = []\n\n  @property\n  def overall_status(self) -> str:\n    if self._any_result_with_status('failed'):\n      return 'failed'\n    elif self._any_result_with_status('ok'):\n      return 'ok'\n    else:\n      return 'skipped'\n\n  def _any_result_with_status(self, status: str) -> bool:\n    return any(r.status == status for r in self.results)\n\n  def add_skipped(self,\n                  resource: Optional[models.Resource],\n                  reason: str,\n                  short_info: str = None) -> None:\n    self.results.append(\n        LintRuleResult(status='skipped',\n                       resource=resource,\n                       reason=reason,\n                       short_info=short_info))\n\n  def add_ok(self, resource: models.Resource, short_info: str = '') -> None:\n    self.results.append(\n        LintRuleResult(status='ok',\n                       resource=resource,\n                       reason=None,\n                       short_info=short_info))\n\n  def add_failed(self,\n                 resource: models.Resource,\n                 reason: str = None,\n                 short_info: str = None) -> None:\n    self.results.append(\n        LintRuleResult(status='failed',\n                       resource=resource,\n                       reason=reason,\n                       short_info=short_info))\n\n  def finish(self) -> None:\n    self._lint_result.register_finished_rule_report(self)\n\n\nclass LintResultsHandler(Protocol):\n  \"\"\"\n  Protocol representing object capable of handling lint results (handlers).\n  Handlers can be registered with LintResults and react on each rule added\n  to the LintResults: each time a rule is added to the LintResults\n  process_rule_report method of each registered handler is called with\n  LintReportRuleInterface, so that handler have access to the results of\n  the rule execution.\n  \"\"\"\n\n  def process_rule_report(self, rule_report: LintReportRuleInterface) -> None:\n    pass\n\n\nclass LintResults:\n  \"\"\" Class representing results of lint \"\"\"\n  _result_handlers: List[LintResultsHandler]\n  _rule_reports: List[LintReportRuleInterface]\n\n  def __init__(self) -> None:\n    self._result_handlers = []\n    self._rule_reports = []\n\n  def get_rule_reports(self) -> List[LintReportRuleInterface]:\n    return self._rule_reports\n\n  def add_result_handler(self, handler: LintResultsHandler) -> None:\n    \"\"\"\n    Handlers can be registered with LintResults and react on each rule added\n    to the LintResults: each time a rule is added to theLintResults\n    process_rule_report method of each registered handler is called with\n    LintReportRuleInterface, so that handler have access to the results of\n    the rule execution.\n    \"\"\"\n    self._result_handlers.append(handler)\n\n  def create_rule_report(self, rule: LintRule) -> LintReportRuleInterface:\n    return LintReportRuleInterface(rule=rule, lint_result=self)\n\n  def register_finished_rule_report(\n      self, rule_report: LintReportRuleInterface) -> None:\n    self._rule_reports.append(rule_report)\n    self._notify_result_handlers(rule_report)\n\n  def _notify_result_handlers(self,\n                              rule_report: LintReportRuleInterface) -> None:\n    for handler in self._result_handlers:\n      handler.process_rule_report(rule_report)\n\n  def get_totals_by_status(self) -> Dict[str, int]:\n    totals: Dict[str, int]\n    totals = {}\n    for rule_report in self._rule_reports:\n      totals[rule_report.overall_status] = totals.get(\n          rule_report.overall_status, 0) + 1\n    return totals\n\n  def get_rule_statuses(self) -> Dict[str, str]:\n    return {str(r.rule): r.overall_status for r in self._rule_reports}\n\n  @property\n  def any_failed(self) -> bool:\n    return any(r.overall_status == 'failed' for r in self._rule_reports)\n\n\nclass LintRulesPattern:\n  \"\"\"Filter to include/exclude rules to run.\n\n  Rule inclusion/exclusion patterns are written with the following\n  format: PRODUCT/CLASS/ID, e.g. gke/WARN/2021_001.\n\n  `*` can be used as a wildcard:\n  - `gke/*` for all gke rules\n  - `gke/WARN/*` for all GKE WARN rules\n  - `gke/WARN/2021_*` for all GKE WARN rules written in 2021\n  - `*/WARN/*` for all WARN rules, for any product\n\n  Additionally, you can also write just a product like `gke` or\n  a rule class like `WARN`.\n  \"\"\"\n\n  product: Optional[str]\n  rule_class: Optional[LintRuleClass]\n  rule_id: Optional[re.Pattern]\n\n  def __init__(self, pattern_str: str):\n    self.product = None\n    self.rule_class = None\n    self.rule_id = None\n\n    pattern_elems = pattern_str.split('/')\n    if len(pattern_elems) == 1:\n      # if there are no '/', assume this is either a product name\n      # or a rule class.\n      if pattern_str == '*':\n        pass\n      elif pattern_str.upper() in LintRuleClass.__members__:\n        self.rule_class = LintRuleClass(pattern_str.upper())\n      else:\n        self.product = pattern_str\n    elif 1 < len(pattern_elems) <= 3:\n      # product\n      if pattern_elems[0] != '' and pattern_elems[0] != '*':\n        self.product = pattern_elems[0]\n      # rule class\n      if pattern_elems[1] != '' and pattern_elems[1] != '*':\n        self.rule_class = LintRuleClass(pattern_elems[1].upper())\n      # rule id\n      if len(pattern_elems) == 3:\n        # convert wildcard match to regex pattern\n        self.rule_id = re.compile(re.sub(r'\\*', '.*', pattern_elems[2]))\n    else:\n      raise ValueError(\n          f\"rule pattern doesn't look like a pattern: {pattern_str}\")\n\n  def __str__(self):\n    # pylint: disable=consider-using-f-string\n    return '{}/{}/{}'.format(self.product or '*', self.rule_class or '*',\n                             self.rule_id or '*')\n\n  def match_rule(self, rule: LintRule) -> bool:\n    if self.product:\n      if self.product != rule.product:\n        return False\n    if self.rule_class:\n      if self.rule_class != rule.rule_class:\n        return False\n    if self.rule_id:\n      if not self.rule_id.match(rule.rule_id):\n        return False\n    return True\n\n\nclass NotLintRule(Exception):\n  pass\n\n\n# pylint: disable=unsubscriptable-object\ndef is_function_named(name: str) -> Callable[[Any], bool]:\n  return lambda obj: inspect.isfunction(obj) and obj.__name__ == name\n\n\ndef get_module_function_or_none(module: types.ModuleType,\n                                name: str) -> Optional[Callable]:\n  members = inspect.getmembers(module, is_function_named(name))\n  assert 0 <= len(members) <= 1\n  return None if len(members) < 1 else members[0][1]\n\n\nclass ExecutionStrategy(Protocol):\n\n  def run_rules(self, context: models.Context, result: LintResults,\n                rules: Iterable[LintRule]) -> None:\n    pass\n\n  def filter_runnable_rules(self,\n                            rules: Iterable[LintRule]) -> Iterable[LintRule]:\n    pass\n\n\nclass SequentialExecutionStrategy:\n  \"\"\"\n  Execution strategy that groups multiple execution strategies\n  and runs them sequentially one after another.\n  \"\"\"\n  strategies: List[ExecutionStrategy]\n\n  def __init__(self, strategies: List[ExecutionStrategy]) -> None:\n    self.strategies = strategies\n\n  def filter_runnable_rules(self, rules: Iterable[LintRule]) -> List[LintRule]:\n    runnable_rules: Set[LintRule]\n    runnable_rules = set()\n    for strategy in self.strategies:\n      runnable_rules = runnable_rules.union(\n          strategy.filter_runnable_rules(rules))\n    return list(runnable_rules)\n\n  def run_rules(self, context: models.Context, result: LintResults,\n                rules: Iterable[LintRule]) -> None:\n    for strategy in self.strategies:\n      strategy.run_rules(context, result, rules)\n\n\nclass RuleModule:\n  \"\"\" Encapsulate actions related to a specific python rule module \"\"\"\n  _module: types.ModuleType\n\n  def __init__(self, python_module: types.ModuleType) -> None:\n    self._module = python_module\n\n  def __repr__(self) -> str:\n    return f'RuleModule:{self._module}'\n\n  def get_method(self, method_name: str) -> Optional[Callable]:\n    return get_module_function_or_none(self._module, method_name)\n\n  def get_attr(self, attribute_name: str) -> Optional[Any]:\n    return getattr(self._module, attribute_name, None)\n\n  def get_module_doc(self) -> Optional[str]:\n    return inspect.getdoc(self._module)\n\n\nclass DefaultPythonModulesGateway:\n  \"\"\" Encapsulate actions related to python rule modules \"\"\"\n\n  def list_pkg_modules(self, pkg: Any) -> List[str]:\n    prefix = pkg.__name__ + '.'\n    return [p[1] for p in pkgutil.iter_modules(pkg.__path__, prefix)]\n\n  def get_module(self, name: str) -> RuleModule:\n    python_module = importlib.import_module(name)\n    return RuleModule(python_module)\n\n\nclass PythonModulesGateway(Protocol):\n\n  def list_pkg_modules(self, pkg: Any) -> Iterable[str]:\n    pass\n\n  def get_module(self, name: str) -> RuleModule:\n    pass\n\n\ndef pick_default_execution_strategy(run_async: bool) -> ExecutionStrategy:\n  if run_async:\n    return SequentialExecutionStrategy(\n        strategies=[SyncExecutionStrategy(),\n                    AsyncExecutionStrategy()])\n  else:\n    return SyncExecutionStrategy()\n\n\nclass LintRuleRepository:\n  \"\"\"Repository of Lint rule which is also used to run the rules.\"\"\"\n  rules: List[LintRule]\n  execution_strategy: ExecutionStrategy\n  modules_gateway: PythonModulesGateway\n  _loaded_rules: List[LintRule]\n\n  def __init__(self,\n               load_extended: bool = False,\n               run_async: bool = False,\n               execution_strategy: ExecutionStrategy = None,\n               modules_gateway: Optional[PythonModulesGateway] = None,\n               include: Iterable[LintRulesPattern] = None,\n               exclude: Iterable[LintRulesPattern] = None) -> None:\n    self._exclude = exclude\n    self._include = include\n    self._loaded_rules = []\n    self.load_extended = load_extended\n    self.execution_strategy = execution_strategy or pick_default_execution_strategy(\n        run_async)\n    self.modules_gateway = modules_gateway or DefaultPythonModulesGateway()\n    self.result = LintResults()\n\n  @property\n  def rules_to_run(self) -> Iterable[LintRule]:\n    rules_filtered = list(self._rules_filtered())\n    return self.execution_strategy.filter_runnable_rules(rules_filtered)\n\n  def _rules_filtered(self) -> Iterator[LintRule]:\n    exclude = self._exclude\n    include = self._include\n    for rule in self._loaded_rules:\n      if include:\n        if not any(x.match_rule(rule) for x in include):\n          continue\n      if exclude:\n        if any(x.match_rule(rule) for x in exclude):\n          continue\n      yield rule\n\n  def get_rule_by_module_name(self, name: str) -> LintRule:\n    # Skip code tests\n    if name.endswith('_test'):\n      raise NotLintRule()\n\n    # Determine Lint Rule parameters based on the module name.\n    m = re.search(\n        r\"\"\"\n         \\.\n         (?P<product>[^\\.]+)                 # product path, e.g.: .gke.\n         \\.\n         (?P<class_prefix>[a-z]+(?:_ext)?)   # class prefix, e.g.: 'err_' or 'err_ext'\n         _\n         (?P<rule_id>\\d+_\\d+)                # id: 2020_001\n      \"\"\", name, re.VERBOSE)\n    if not m:\n      # Assume this is not a rule (e.g. could be a \"utility\" module)\n      raise NotLintRule()\n\n    product, rule_class, rule_id = m.group('product', 'class_prefix', 'rule_id')\n\n    module = self.modules_gateway.get_module(name)\n\n    # Get a reference to the run_rule() function.\n    run_rule_f = module.get_method('run_rule')\n\n    # Get a reference to the async_run_rule() function.\n    async_run_rule_f = module.get_method('async_run_rule')\n\n    if not (run_rule_f or async_run_rule_f):\n      raise RuntimeError(\n          f'module {module} doesn\\'t have a run_rule or an async_run_rule function'\n      )\n\n    # Get a reference to the prepare_rule() function.\n    prepare_rule_f = module.get_method('prepare_rule')\n\n    # Get a reference to the prefetch_rule() function.\n    prefetch_rule_f = module.get_method('prefetch_rule')\n\n    # Get a reference to the keywords list.\n    keywords: List = module.get_attr('keywords') or []\n\n    # Get module docstring.\n    doc = module.get_module_doc()\n    if not doc:\n      raise RuntimeError(f'module {module} doesn\\'t provide a module docstring')\n    # The first line is the short \"good state description\"\n    doc_lines = doc.splitlines()\n    short_desc = doc_lines[0]\n    long_desc = ''\n    if len(doc_lines) >= 3:\n      if doc_lines[1]:\n        raise RuntimeError(\n            f'module {module} has a non-empty second line in the module docstring'\n        )\n      long_desc = '\\n'.join(doc_lines[2:])\n\n    # Instantiate the LintRule object and register it\n    rule = LintRule(product=product,\n                    rule_class=LintRuleClass(rule_class.upper()),\n                    rule_id=rule_id,\n                    run_rule_f=run_rule_f,\n                    async_run_rule_f=async_run_rule_f,\n                    prepare_rule_f=prepare_rule_f,\n                    prefetch_rule_f=prefetch_rule_f,\n                    short_desc=short_desc,\n                    long_desc=long_desc,\n                    keywords=keywords)\n    return rule\n\n  def load_rules(self, pkg: types.ModuleType) -> None:\n    for name in self.modules_gateway.list_pkg_modules(pkg):\n      try:\n        if '_ext_' in name and not self.load_extended:\n          continue\n        rule = self.get_rule_by_module_name(name)\n      except NotLintRule:\n        continue\n\n      self._register_rule(rule)\n\n  def _register_rule(self, rule: LintRule):\n    self._loaded_rules.append(rule)\n\n  def run_rules(self, context: models.Context) -> None:\n    # Make sure the rules are sorted alphabetically\n    self._loaded_rules.sort(key=str)\n    rules_to_run = self.rules_to_run\n    self.execution_strategy.run_rules(context, self.result, rules_to_run)\n\n\nclass AsyncRunner:\n  \"\"\" Helper class to represent single execution operation \"\"\"\n\n  def __init__(self, context: models.Context, result: LintResults,\n               rules: Iterable[LintRule]):\n    self._context = context\n    self._result = result\n    self._rules = rules\n\n  def run(self) -> None:\n    asyncio.run(self._run_all())\n\n  async def _run_all(self) -> None:\n    awaitables = [self._run_async_rule(r) for r in self._rules]\n    await asyncio.gather(*awaitables)\n\n  async def _run_async_rule(self, rule: LintRule) -> None:\n    rule_report = self._result.create_rule_report(rule)\n    assert rule.async_run_rule_f is not None\n    await rule.async_run_rule_f(self._context, rule_report)\n    rule_report.finish()\n\n\nclass AsyncExecutionStrategy:\n  \"\"\" Execute async rules \"\"\"\n\n  def run_rules(self, context: models.Context, result: LintResults,\n                rules: Iterable[LintRule]) -> None:\n    rules = self.filter_runnable_rules(rules)\n    AsyncRunner(context, result, rules).run()\n\n  def filter_runnable_rules(self, rules: Iterable[LintRule]) -> List[LintRule]:\n    return [r for r in rules if r.async_run_rule_f]\n\n\ndef wrap_prefetch_rule_f(rule_name, prefetch_rule_f, context):\n  logging.debug('prefetch_rule_f: %s', rule_name)\n  thread = threading.current_thread()\n  thread.name = f'prefetch_rule_f:{rule_name}'\n  prefetch_rule_f(context)\n\n\nclass SyncExecutionStrategy:\n  \"\"\" Execute rules using thread pool \"\"\"\n\n  def filter_runnable_rules(self, rules: Iterable[LintRule]) -> List[LintRule]:\n    return [r for r in rules if r.run_rule_f]\n\n  def run_rules(self, context: models.Context, result: LintResults,\n                rules: Iterable[LintRule]) -> None:\n\n    rules_to_run = self.filter_runnable_rules(rules)\n\n    # Run the \"prepare_rule\" functions first, in a single thread.\n    for rule in rules_to_run:\n      if rule.prepare_rule_f:\n        logging.debug('prepare_rule_f: %s', rule)\n        rule.prepare_rule_f(context)\n\n    # Start multiple threads for logs fetching and prefetch functions.\n    executor = get_executor(context)\n    # Start fetching any logs queries that were defined in prepare_rule\n    # functions.\n    logs.execute_queries(executor, context)\n    # Start fetching any serial output logs if serial output to cloud logging\n    # is not enabled on the project/ instance\n    if config.get('enable_gce_serial_buffer'):\n      # execute fetch job\n      gce_mod.execute_fetch_serial_port_outputs(executor)\n\n    # Run the \"prefetch_rule\" functions with multiple worker threads to speed up\n    # execution of the \"run_rule\" executions later.\n    for rule in rules_to_run:\n      if rule.prefetch_rule_f:\n        rule.prefetch_rule_future = executor.submit(wrap_prefetch_rule_f,\n                                                    str(rule),\n                                                    rule.prefetch_rule_f,\n                                                    context)\n\n    # While the prefetch_rule functions are still being executed in multiple\n    # threads, start executing the rules, but block and wait in case the\n    # prefetch for a specific rule is still running.\n    last_threads_dump = time.time()\n    for rule in rules_to_run:\n      rule_report = result.create_rule_report(rule)\n\n      # make sure prefetch_rule_f completed\n      try:\n        if rule.prefetch_rule_future:\n          if rule.prefetch_rule_future.running():\n            logging.info('waiting for query results (%s)', rule)\n          while True:\n            try:\n              rule.prefetch_rule_future.result(10)\n              break\n            except concurrent.futures.TimeoutError:\n              pass\n            if config.get('verbose') >= 2:\n              now = time.time()\n              if now - last_threads_dump > 10:\n                logging.debug(\n                    'THREADS: %s',\n                    ', '.join([t.name for t in threading.enumerate()]))\n                last_threads_dump = now\n        # run the rule\n        assert rule.run_rule_f is not None\n        rule.run_rule_f(context, rule_report)\n      except (utils.GcpApiError, googleapiclient.errors.HttpError) as err:\n        if isinstance(err, googleapiclient.errors.HttpError):\n          err = utils.GcpApiError(err)\n        logging.warning('%s: %s while processing rule: %s',\n                        type(err).__name__, err, rule)\n        rule_report.add_skipped(None, f'API error: {err}', None)\n      except (RuntimeError, ValueError, KeyError, TypeError) as err:\n        logging.warning('%s: %s while processing rule: %s',\n                        type(err).__name__, err, rule)\n        rule_report.add_skipped(None, f'Error: {err}', None)\n      rule_report.finish()\n"
  },
  {
    "path": "gcpdiag/lint/apigee/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/lint/apigee/apigee_rules_snapshot_test.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\" Generalize rule snapshot testing \"\"\"\n\nfrom gcpdiag.lint import apigee, snapshot_test_base\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = apigee\n  project_id = 'gcpdiag-apigee1-aaaa'\n"
  },
  {
    "path": "gcpdiag/lint/apigee/err_2022_001_p4sa_perm.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Apigee Service Agent permissions\n\nVerify that the Apigee Service Agent account exists and has\nthe Apigee Service Agent role on the project.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apigee, crm, iam\n\nSA = 'service-{project_number}@gcp-sa-apigee.iam.gserviceaccount.com'\nROLE = 'roles/apigee.serviceAgent'\n\n\ndef prefetch_rule(context: models.Context):\n  iam.get_project_policy(context)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  apigee_org = apigee.get_org(context)\n  if apigee_org is None:\n    report.add_skipped(None, 'no Apigee organizations found')\n    return\n\n  project = crm.get_project(context.project_id)\n  service_account = SA.format(project_number=project.number)\n\n  iam_policy = iam.get_project_policy(context)\n  if not iam_policy.has_role_permissions(f'serviceAccount:{service_account}',\n                                         ROLE):\n    report.add_failed(project, (f'service account: {service_account}\\n'\n                                f'missing role: {ROLE}'))\n  else:\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/apigee/err_2022_002_p4sa_kms_key_perm.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Cloud KMS key is enabled and could be accessed by Apigee Service Agent\n\nVerify that the runtime database encryption key and disk encryption key\nare not disabled or destroyed and the Apigee Service Agent account has the permission\nto access the KMS keys\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apigee, crm, kms\n\nSA = 'service-{project_number}@gcp-sa-apigee.iam.gserviceaccount.com'\nROLE = 'roles/cloudkms.cryptoKeyEncrypterDecrypter'\n\nRUNTIME_DATABASE_ENCRYPTION_KEY_STRING = 'runtime database encryption key'\nDISK_ENCRYPTION_KEY_STRING = 'disk encryption key'\n\n\ndef _run_rule_kms_key(context: models.Context,\n                      report: lint.LintReportRuleInterface, kms_key_name: str,\n                      kms_key_mode: str, service_account: str):\n  if kms_key_name:\n    kms_key = kms.get_crypto_key(kms_key_name)\n    if _is_valid_kms_key(kms_key):\n      if not _apigee_sa_has_role_permissions(context, kms_key_name,\n                                             service_account):\n        report.add_failed(\n            kms_key,\n            (f'service account: {service_account}\\n'\n             f'missing role: {ROLE} for {kms_key_mode} {kms_key_name}'))\n      else:\n        report.add_ok(kms_key)\n    else:\n      report.add_failed(\n          kms_key, f'Key {kms_key_name} is not valid (destroyed or disabled)')\n  else:\n    report.add_skipped(None, f'{kms_key_mode} is not configured')\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  apigee_org = apigee.get_org(context)\n  if apigee_org is None:\n    report.add_skipped(None, 'no Apigee organizations found')\n    return\n\n  if apigee_org.runtime_type == 'HYBRID':\n    report.add_skipped(None, 'This rule only applies to Apigee X product')\n    return\n\n  project = crm.get_project(context.project_id)\n  service_account = SA.format(project_number=project.number)\n\n  # Verify permissions on runtime database encryption key\n  kms_key_name = apigee_org.runtime_database_encryption_key_name\n  _run_rule_kms_key(context, report, kms_key_name,\n                    RUNTIME_DATABASE_ENCRYPTION_KEY_STRING, service_account)\n\n  # Verify permissions on disk encryption key\n  instances_list = apigee.get_instances(apigee_org)\n  for instance in sorted(instances_list.values(),\n                         key=lambda instance: instance.name):\n    kms_key_name = instance.disk_encryption_key_name\n    _run_rule_kms_key(context, report, kms_key_name, DISK_ENCRYPTION_KEY_STRING,\n                      service_account)\n\n\ndef _is_valid_kms_key(kms_key):\n  return not kms_key.is_destroyed() and kms_key.is_enabled()\n\n\ndef _apigee_sa_has_role_permissions(context: models.Context, kms_key_name,\n                                    service_account):\n  iam_policy = kms.get_crypto_key_iam_policy(context, kms_key_name)\n  return iam_policy.has_role_permissions(f'serviceAccount:{service_account}',\n                                         ROLE)\n"
  },
  {
    "path": "gcpdiag/lint/apigee/err_2023_001_vpc_peering_created.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Customer's network is peered to Apigee's network\n\nThere should be a VPC peering connection between customer's network and the Apigee X\ninstance runs in a Google managed tenant project\n\"\"\"\nimport re\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apigee\n\nAPIGEE_NETWORK = 'servicenetworking'\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  apigee_org = apigee.get_org(context)\n  if apigee_org is None:\n    report.add_skipped(None, 'no Apigee organizations found')\n    return\n\n  if apigee_org.runtime_type == 'HYBRID':\n    report.add_skipped(None, 'This rule only applies to Apigee X product')\n    return\n\n  # Check whether there is a VPC peering connection with Apigee runtime instances or not\n  is_peered_to_apigee = False\n\n  for peer in apigee_org.network.peerings:\n    match = re.match(\n        r'https://www.googleapis.com/compute/([^/]+)/'\n        'projects/([^/]+)/([^/]+)/networks/(?P<network>[^/]+)$', peer.url)\n\n    if not match:\n      raise ValueError(f\"can't parse peering network url: {peer.url!r}\")\n\n    peered_network = match.group('network')\n\n    if peered_network == APIGEE_NETWORK:\n      if peer.state == 'ACTIVE':\n        is_peered_to_apigee = True\n        break\n\n      else:\n        report.add_failed(\n            apigee_org, (f'peered connection to Apigee {peer.name} in network '\n                         f'{apigee_org.network.short_path} is not active.'))\n        return\n\n  if is_peered_to_apigee:\n    report.add_ok(apigee_org)\n  else:\n    report.add_failed(\n        apigee_org, (f'Customer VPC network {apigee_org.network.short_path} is '\n                     'not correctly peered to Apigee\\'s network'))\n"
  },
  {
    "path": "gcpdiag/lint/apigee/err_2023_002_routing_with_mig.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Network bridge managed instance group is correctly configured.\n\nIf a managed instance group (MIG) is being used to route traffic to Apigee X instance\nruns in a Google managed tenant project. The MIG should be created in the network which\nis peered with the Apigee X instance. The MIG should also point to the correct Apigee X\ninstance IP.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apigee\n\nnetwork_bridge_migs = {}\n\n\ndef prefetch_rule(context: models.Context):\n  network_bridge_migs[\n      context.project_id] = apigee.get_network_bridge_instance_groups(\n          context.project_id)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n\n  if not network_bridge_migs[context.project_id]:\n    report.add_skipped(None, 'no Apigee network bridge MIGs found')\n    return\n\n  apigee_org = apigee.get_org(context)\n  if apigee_org is None:\n    report.add_skipped(None, 'no Apigee organizations found')\n    return\n\n  if apigee_org.runtime_type == 'HYBRID':\n    report.add_skipped(None, 'This rule only applies to Apigee X product')\n    return\n\n  all_instance_ips = {i.host for i in apigee.get_instances(apigee_org).values()}\n\n  apigee_org_network_path = apigee_org.network.short_path\n  apigee_org_ok_flag = True\n  for mig in network_bridge_migs[context.project_id]:\n    if mig.template.network.short_path != apigee_org_network_path:\n      report.add_failed(\n          mig,\n          f'Managed instance group {mig.name} is not being created under the correct network\\n'\n          f'{mig.name}\\'s network: {mig.template.network.short_path}\\n'\n          f'The network peered with Apigee: {apigee_org_network_path}')\n      apigee_org_ok_flag = False\n    if not mig.template.get_metadata('ENDPOINT') in all_instance_ips:\n      report.add_failed(\n          mig,\n          f'Managed instance group {mig.name} is not pointing to any Apigee X instance.'\n      )\n      apigee_org_ok_flag = False\n\n  if apigee_org_ok_flag:\n    report.add_ok(apigee_org)\n"
  },
  {
    "path": "gcpdiag/lint/apigee/err_2023_003_pga_on_mig_subnet.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Private Google Access (PGA) for subnet of Managed Instance Group is enabled.\n\nIf a managed instance group (MIG) is being used to route traffic to Apigee X instance\nrunning in a Google managed tenant project, the MIG's subnet should have Private\nGoogle Access (PGA) enabled.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apigee\n\nnetwork_bridge_migs = {}\n\n\ndef prefetch_rule(context: models.Context):\n  network_bridge_migs[\n      context.project_id] = apigee.get_network_bridge_instance_groups(\n          context.project_id)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n\n  if not network_bridge_migs[context.project_id]:\n    report.add_skipped(None, 'no Apigee network bridge MIGs found')\n    return\n\n  apigee_org = apigee.get_org(context)\n  if apigee_org is None:\n    report.add_skipped(None, 'no Apigee organization found')\n    return\n\n  if apigee_org.runtime_type == 'HYBRID':\n    report.add_skipped(None, 'This rule only applies to Apigee X product')\n    return\n\n  for mig in network_bridge_migs[context.project_id]:\n    network = mig.template.network\n\n    # find subnets connected to Apigee via Managed Instance Group\n    for subnet in network.subnetworks.values():\n      if subnet.region == mig.region:\n        is_private_ip_google_access = subnet.is_private_ip_google_access()\n\n        if not is_private_ip_google_access:\n          report.add_failed(\n              mig, (f'Private Google Access is not enabled on '\n                    f'subnetwork {subnet.short_path} with region {mig.region} '\n                    f'in network {network.short_path}'))\n        else:\n          report.add_ok(mig)\n"
  },
  {
    "path": "gcpdiag/lint/apigee/err_2023_004_p4nsa_perm.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Service Networking API is enabled and SA account has the required role\n\n\n1. Service networking API needs to be enabled\n2. Service Agent(SA) account\n[service-{project_number}@service-networking.iam.gserviceaccount.com]\nneeds to have the Networking Service Agent role\n[roles/servicenetworking.serviceAgent] on the project.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apigee, apis, crm, iam\n\nSA = 'service-{project_number}@service-networking.iam.gserviceaccount.com'\nROLE = 'roles/servicenetworking.serviceAgent'\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  apigee_org = apigee.get_org(context)\n  if apigee_org is None:\n    report.add_skipped(None, 'no Apigee organizations found')\n    return\n\n  project_id = context.project_id\n  project = crm.get_project(context.project_id)\n  service_account = SA.format(project_number=project.number)\n\n  # Check if Service Networking API is enabled\n  if not apis.is_enabled(project_id, 'servicenetworking'):\n    report.add_failed(project, 'Service Networking API is not enabled')\n\n  else:\n    # Check if Service Agent role is assigned to the SA account\n    iam_policy = iam.get_project_policy(context)\n    if not iam_policy.has_role_permissions(f'serviceAccount:{service_account}',\n                                           ROLE):\n      report.add_failed(\n          project, f'service account: {service_account}\\nmissing role: {ROLE}')\n    else:\n      report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/apigee/err_2023_005_fw_rule_xlb_to_mig.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"External Load Balancer (XLB) is able to connect to the Managed Instance Group(MIG).\n\nIn order for the Apigee Managed Instance Group (MIG) to work correctly,\nthe External Load Balancer (XLB) network connection to the MIG must be allowed\n\"\"\"\n\nimport ipaddress\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apigee\n\nnetwork_bridge_migs = {}\n\n\n# Fetch the MIGs that are communicating with the ApigeeX instances\ndef prefetch_rule(context: models.Context):\n  network_bridge_migs[context.project_id] = (\n      apigee.get_network_bridge_instance_groups(context.project_id))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n\n  apigee_org = apigee.get_org(context)\n  if not apigee_org:\n    report.add_skipped(None, 'no Apigee organization found')\n    return\n  if not network_bridge_migs[context.project_id]:\n    report.add_skipped(\n        None, 'no Apigee network bridge Managed Instance Group (MIGs) found')\n    return\n\n  if apigee_org.runtime_type == 'HYBRID':\n    report.add_skipped(None, 'This rule only applies to Apigee X product')\n    return\n\n  for mig in network_bridge_migs[context.project_id]:\n\n    networks = apigee_org.network\n    # Identify tags used by the MIG instances\n    tags = mig.template.tags\n\n    # Check connectivity from GLB to MIG instance\n    ip_ranges = ['130.211.0.0/22', '35.191.0.0/16']\n\n    for ip in ip_ranges:\n      result = networks.firewall.check_connectivity_ingress(\n          src_ip=ipaddress.ip_network(ip),\n          ip_protocol='tcp',\n          port=443,\n          target_tags=tags,\n      )\n\n      if result.action == 'deny':\n        report.add_failed(\n            mig, f'Network connection from {ip} blocked to MIG'\n            f'{mig.short_path} on port 443')\n        break\n\n    else:\n      report.add_ok(mig)\n"
  },
  {
    "path": "gcpdiag/lint/apigee/err_2023_006_multiple_migs_for_multiple_regions.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"A multi-region setup requires a separate MIG for each region.\n\nEach Apigee X region should have a MIG created in the same region.\nOtherwise the traffic will only be routed to one region.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apigee\n\nnetwork_bridge_migs = {}\n\n\ndef prefetch_rule(context: models.Context):\n  network_bridge_migs[\n      context.project_id] = apigee.get_network_bridge_instance_groups(\n          context.project_id)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n\n  if not network_bridge_migs[context.project_id]:\n    report.add_skipped(None, 'no Apigee network bridge MIGs found')\n    return\n\n  apigee_org = apigee.get_org(context)\n  if apigee_org is None:\n    report.add_skipped(None, 'no Apigee organization found')\n    return\n\n  if apigee_org.runtime_type == 'HYBRID':\n    report.add_skipped(None, 'This rule only applies to Apigee X product')\n    return\n\n  instances_list = apigee.get_instances(apigee_org)\n  mig_regions = []\n\n  for mig in network_bridge_migs[context.project_id]:\n    mig_regions.append(mig.region)\n\n  for instance in sorted(instances_list.values(),\n                         key=lambda instance: instance.name):\n    curr_instance_location = instance.location\n\n    if not curr_instance_location in mig_regions:\n      report.add_failed(\n          instance,\n          (f'Instance {instance.name} in region {curr_instance_location} '\n           f'has no MIG in the region {curr_instance_location}'))\n    else:\n      report.add_ok(instance)\n"
  },
  {
    "path": "gcpdiag/lint/apigee/snapshots/ERR_2022_001.txt",
    "content": "*  apigee/ERR/2022_001: Apigee Service Agent permissions\n   - projects/gcpdiag-apigee1-aaaa                                        [FAIL]\n     service account: service-12340005@gcp-sa-apigee.iam.gserviceaccount.com\n     missing role: roles/apigee.serviceAgent\n\n   Verify that the Apigee Service Agent account exists and has the Apigee\n   Service Agent role on the project.\n\n   https://gcpdiag.dev/rules/apigee/ERR/2022_001\n\n"
  },
  {
    "path": "gcpdiag/lint/apigee/snapshots/ERR_2022_002.txt",
    "content": "*  apigee/ERR/2022_002: Cloud KMS key is enabled and could be accessed by Apigee Service Agent\n   - projects/gcpdiag-apigee1-aaaa/locations/us-central1/keyRings/apigee-keyring/cryptoKeys/apigee-key [ OK ]\n   - projects/gcpdiag-apigee1-aaaa/locations/us-central1/keyRings/apigee-keyring/cryptoKeys/apigee-key [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/apigee/snapshots/ERR_2023_001.txt",
    "content": "*  apigee/ERR/2023_001: Customer's network is peered to Apigee's network\n   - organizations/gcpdiag-apigee1-aaaa                                   [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/apigee/snapshots/ERR_2023_002.txt",
    "content": "*  apigee/ERR/2023_002: Network bridge managed instance group is correctly configured.\n   - organizations/gcpdiag-apigee1-aaaa                                   [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/apigee/snapshots/ERR_2023_003.txt",
    "content": "*  apigee/ERR/2023_003: Private Google Access (PGA) for subnet of Managed Instance Group is enabled.\n   - projects/gcpdiag-apigee1-aaaa/regions/us-central1/instanceGroupManagers/mig-bridge-manager-us-central1 [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/apigee/snapshots/ERR_2023_004.txt",
    "content": "*  apigee/ERR/2023_004: Service Networking API is enabled and SA account has the required role\n   - projects/gcpdiag-apigee1-aaaa                                        [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/apigee/snapshots/ERR_2023_005.txt",
    "content": "*  apigee/ERR/2023_005: External Load Balancer (XLB) is able to connect to the Managed Instance Group(MIG).\n   - projects/gcpdiag-apigee1-aaaa/regions/us-central1/instanceGroupManagers/mig-bridge-manager-us-central1 [FAIL]\n     Network connection from 130.211.0.0/22 blocked to MIGgcpdiag-apigee1-aaaa/mig-bridge-manager-us-central1 on port 443\n\n   In order for the Apigee Managed Instance Group (MIG) to work correctly, the\n   External Load Balancer (XLB) network connection to the MIG must be allowed\n\n   https://gcpdiag.dev/rules/apigee/ERR/2023_005\n\n"
  },
  {
    "path": "gcpdiag/lint/apigee/snapshots/ERR_2023_006.txt",
    "content": "*  apigee/ERR/2023_006: A multi-region setup requires a separate MIG for each region.\n   - organizations/gcpdiag-apigee1-aaaa/instances/gcpdiag-apigee1-inst1-aaaa [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/apigee/snapshots/WARN_2021_001.txt",
    "content": "*  apigee/WARN/2021_001: Every environment group contains at least one environment.\n   - organizations/gcpdiag-apigee1-aaaa/envgroups/gcpdiag-demo-envgroup   [FAIL]\n     No environment is attached to the environment group: gcpdiag-demo-envgroup\n     All of the requests to the hostname list below will receive 404 errors: \n     ['gcpdiag.apigee.example.com']\n   - organizations/gcpdiag-apigee1-aaaa/envgroups/gcpdiag-demo-envgroup-1 [ OK ]\n\n   An environment must be a member of at least one environment group before you\n   can access resources defined within it. In other words, you must assign an\n   environment to a group before you can use it. Or you would receive 404 errors\n   while accessing every hostname in the environment group.\n\n   https://gcpdiag.dev/rules/apigee/WARN/2021_001\n\n"
  },
  {
    "path": "gcpdiag/lint/apigee/snapshots/WARN_2022_001.txt",
    "content": "*  apigee/WARN/2022_001: Environment groups are created in the Apigee runtime plane.\n   (logging api is disabled)                                              [SKIP]\n\n"
  },
  {
    "path": "gcpdiag/lint/apigee/snapshots/WARN_2022_002.txt",
    "content": "*  apigee/WARN/2022_002: Environments are attached to Apigee X instances\n   - organizations/gcpdiag-apigee1-aaaa/environments/gcpdiag-demo-env     [ OK ]\n   - organizations/gcpdiag-apigee1-aaaa/environments/gcpdiag-demo-env-1   [FAIL]\n     Environment: gcpdiag-demo-env-1 is not being attached to any Apigee X instance \n     All API proxy deployment will fail in this environment\n\n   Verify that environments are attached to Apigee X instances.\n\n   https://gcpdiag.dev/rules/apigee/WARN/2022_002\n\n"
  },
  {
    "path": "gcpdiag/lint/apigee/warn_2021_001_empty_env.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Every environment group contains at least one environment.\n\nAn environment must be a member of at least one environment group\nbefore you can access resources defined within it.\nIn other words, you must assign an environment to a group before\nyou can use it. Or you would receive 404 errors while accessing\nevery hostname in the environment group.\n\"\"\"\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apigee\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  apigee_org = apigee.get_org(context)\n  if apigee_org is None:\n    report.add_skipped(None, 'no Apigee organizations found')\n    return\n  envgroup_list = apigee.get_envgroups(apigee_org)\n  for envgroup in sorted(envgroup_list.values(),\n                         key=lambda envgroup: envgroup.name):\n    environments = apigee.get_envgroups_attachments(envgroup.full_path)\n    if environments:\n      report.add_ok(envgroup)\n    else:\n      report.add_failed(\n          envgroup,\n          f'No environment is attached to the environment group: {envgroup.name}\\nAll of the '\n          f'requests to the hostname list below will receive 404 errors: \\n{envgroup.host_names}'\n      )\n"
  },
  {
    "path": "gcpdiag/lint/apigee/warn_2022_001_env_groups_created.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# Lint as: python3\n\"\"\"Environment groups are created in the Apigee runtime plane.\n\nVerify that environment groups are created in the runtime plane.\nIf not, we should make sure every environment group is included\nin all override files where the environment is used.\n\"\"\"\nimport re\nfrom typing import Dict\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apigee, apis, crm, logs\n\nMATCH_STR = 'INTERNAL: NOT_FOUND: failed to create ApigeeRoute'\n\nk8s_container_logs_by_project = {}\n\nAPIGEE_WATCHER_FILTER = [\n    'severity=ERROR', 'resource.labels.container_name= \"apigee-watcher\"',\n    f'jsonPayload.error: \"{MATCH_STR}\"'\n]\n\n\ndef prepare_rule(context: models.Context):\n  k8s_container_logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='k8s_container',\n      log_name='log_id(\"stdout\")',\n      filter_str=' AND '.join(APIGEE_WATCHER_FILTER))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(None, 'logging api is disabled')\n    return\n\n  # Apigee Connect is enabled by default for any Kubernetes cluster running Apigee service.\n  if not apis.is_enabled(context.project_id, 'apigeeconnect'):\n    report.add_skipped(None, 'Apigee connect api is disabled')\n    return\n\n  project = crm.get_project(context.project_id)\n  env_group_errors: Dict[str, Dict[str, str]] = {}\n  # Process apigee_watcher container logs and search for env group creation errors\n  if k8s_container_logs_by_project.get(context.project_id) and \\\n    k8s_container_logs_by_project[context.project_id].entries:\n    for log_entry in k8s_container_logs_by_project[context.project_id].entries:\n      # Determine the problematic environment group name\n      m = re.findall(\n          r'cannot find ApigeeRouteConfig for environment group \"([^\"]*)\":',\n          get_path(log_entry, ('jsonPayload', 'error'), default=''))\n      if not m:\n        continue\n      for env_group_name in m:\n        cluster_name = get_path(log_entry,\n                                ('resource', 'labels', 'cluster_name'),\n                                default='Unknown')\n        location = get_path(log_entry, ('resource', 'labels', 'location'),\n                            default='Unknown')\n        organization = get_path(log_entry, ('labels', 'k8s-pod/org'),\n                                default='Unknown')\n        if organization not in env_group_errors:\n          env_group_errors[organization] = {}\n        if env_group_name not in env_group_errors[organization].keys():\n          env_group_errors[organization][env_group_name] = (\n              f'Environment group {env_group_name} in '\n              f'organization {organization}: is not created in cluster: '\n              f'{cluster_name}, location: {location}')\n\n    for org_name, env_group_error in env_group_errors.items():\n      apigee_org = apigee.ApigeeOrganization(project_id=context.project_id,\n                                             org_name=org_name)\n      if env_group_error:\n        report.add_failed(apigee_org, 'Environment group creation issue detected: \\n. '+\\\n                          '\\n. '.join(err for _, err in env_group_error.items()))\n  else:\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/apigee/warn_2022_002_env_not_attached.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Environments are attached to Apigee X instances\n\nVerify that environments are attached to Apigee X instances.\n\"\"\"\n\nfrom typing import Set\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apigee\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  apigee_org = apigee.get_org(context)\n  if apigee_org is None:\n    report.add_skipped(None, 'no Apigee organizations found')\n    return\n\n  if apigee_org.runtime_type == 'HYBRID':\n    report.add_skipped(None, 'This rule only applies to Apigee X product')\n    return\n\n  all_envs_list = apigee_org.environments\n  if not all_envs_list:\n    report.add_skipped(None, 'no Apigee environments found')\n    return\n\n  all_attached_envs_list: Set[str] = set()\n  instances_list = apigee.get_instances(apigee_org)\n  for instance in sorted(instances_list.values(),\n                         key=lambda instance: instance.name):\n    instance_envs = set(apigee.get_instances_attachments(instance.full_path))\n    if instance_envs:\n      all_attached_envs_list = all_attached_envs_list.union(instance_envs)\n\n  for env in all_envs_list:\n    if env.name not in all_attached_envs_list:\n      report.add_failed(\n          env,\n          f'Environment: {env.name} is not being attached to any Apigee X instance \\n'\n          f'All API proxy deployment will fail in this environment')\n    else:\n      report.add_ok(env)\n"
  },
  {
    "path": "gcpdiag/lint/asm/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/lint/asm/asm_rules_snapshot_test.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\" Generalize rule snapshot testing \"\"\"\n\nfrom gcpdiag.lint import asm, snapshot_test_base\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = asm\n  project_id = 'gcpdiag-gke1-aaaa'\n"
  },
  {
    "path": "gcpdiag/lint/asm/err_2023_001_traffic_4xx.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"ASM traffic indicates Client side requests failure\n\nServer side logs from ASM proxies are having requests failing with 4XX errors\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.lint.gke import util\nfrom gcpdiag.queries import apis, gke, logs\n\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  clusters = gke.get_clusters(context)\n  for project_id in {c.project_id for c in clusters.values()}:\n    logs_by_project[project_id] = logs.query(\n        project_id=project_id,\n        resource_type='k8s_container',\n        log_name='log_id(\"server-accesslog-stackdriver\")',\n        filter_str='httpRequest.status>=400 AND httpRequest.status<500',\n    )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # Skip entire rule if Cloud Logging is disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(None, 'logging api is disabled')\n    return\n\n  # Any work to do?\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n\n  # Search the logs.\n  def filter_f(log_entry):\n    try:\n      if (log_entry['httpRequest']['status'] >= 400 or\n          log_entry['httpRequest']['status'] < 500):\n        return True\n    except KeyError:\n      return False\n\n  bad_nodes_by_cluster = util.gke_logs_find_bad_clusters(\n      context=context, logs_by_project=logs_by_project, filter_f=filter_f)\n\n  # Create the report.\n  for _, c in sorted(clusters.items()):\n    if c in bad_nodes_by_cluster:\n      report.add_failed(c)\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/asm/err_2023_002_traffic_5xx.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"ASM traffic indicates Client side requests failure\n\nServer side logs from ASM proxies are having requests failing with 5XX errors\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.lint.gke import util\nfrom gcpdiag.queries import apis, gke, logs\n\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  clusters = gke.get_clusters(context)\n  for project_id in {c.project_id for c in clusters.values()}:\n    logs_by_project[project_id] = logs.query(\n        project_id=project_id,\n        resource_type='k8s_pod',\n        log_name='log_id(\"client-accesslog-stackdriver\")',\n        filter_str='httpRequest.status>=500 AND httpRequest.status<600',\n    )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # Skip entire rule if Cloud Logging is disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(None, 'logging api is disabled')\n    return\n\n  # Any work to do?\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n\n  # Search the logs.\n  def filter_f(log_entry):\n    try:\n      if (log_entry['httpRequest']['status'] >= 500 or\n          log_entry['httpRequest']['status'] < 600):\n        return True\n    except KeyError:\n      return False\n\n  bad_nodes_by_cluster = util.gke_logs_find_bad_clusters(\n      context=context, logs_by_project=logs_by_project, filter_f=filter_f)\n\n  # Create the report.\n  for _, c in sorted(clusters.items()):\n    if c in bad_nodes_by_cluster:\n      report.add_failed(c)\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/asm/err_2024_001_secret_not_found.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"\n\nGetting timed out error for secret not found for ingress gateway\n\ngRPC config: initial fetch timed out for\ntype.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret\n\nThis means Ingress gateway is trying to get certs but failing. This could mean\nistiod is denying the requests or otherwise cannot access them.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.lint.gke import util\nfrom gcpdiag.queries import apis, gke, logs\n\nMATCH_STR_1 = (\n    'gRPC config: initial fetch timed out for'\n    ' type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret')\n\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  clusters = gke.get_clusters(context)\n  for project_id in {c.project_id for c in clusters.values()}:\n    logs_by_project[project_id] = logs.query(\n        project_id=project_id,\n        resource_type='k8s_container',\n        log_name='log_id(\"stderr\")',\n        filter_str=f'textPayload:\"{MATCH_STR_1}\"',\n    )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(None, 'logging api is disabled')\n    return\n  # Any work to do?\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n    # Search the logs.\n\n  def filter_f(log_entry):\n    try:\n      if MATCH_STR_1 in log_entry['textPayload']:\n        return True\n    except KeyError:\n      return False\n\n  bad_clusters = util.gke_logs_find_bad_clusters(\n      context=context, logs_by_project=logs_by_project, filter_f=filter_f)\n  # Create the report.\n  for _, c in sorted(clusters.items()):\n    if c in bad_clusters:\n      report.add_failed(c, logs.format_log_entry(bad_clusters[c]))\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/asm/err_2024_002_istiod_resource_issues.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"\n\nSufficient resources (CPU and memory) then Istiod pods are scheduled.\n\nInsufficient memory or CPU resources can prevent Istiod pods from being\nscheduled, potentially leading to control plane malfunctions and disruptions in\nAnthos Service Mesh (ASM) functionality.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.lint.gke import util\nfrom gcpdiag.queries import apis, gke, logs\n\nMATCH_STR_1 = 'Insufficient cpu'\nMATCH_STR_3 = 'Insufficient memory'\nMATCH_STR_2 = 'istiod-asm'\n\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  clusters = gke.get_clusters(context)\n  for project_id in {c.project_id for c in clusters.values()}:\n    logs_by_project[project_id] = logs.query(\n        project_id=project_id,\n        resource_type='k8s_pod',\n        log_name='log_id(\"events\")',\n        filter_str=(f'jsonPayload.message=~\"{MATCH_STR_1}\" OR '\n                    f'jsonPayload.message=~\"{MATCH_STR_3}\" AND  '\n                    f'jsonPayload.involvedObject.name:\"{MATCH_STR_2}\" '),\n    )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # skip entire rule is logging disabled\n\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(None, 'logging api is disabled')\n    return\n  # Any work to do?\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n    # Search the logs.\n\n  def filter_f(log_entry):\n    try:\n      if MATCH_STR_1 in log_entry['jsonPayload']['message']:\n        if MATCH_STR_2 in log_entry['jsonPayload']['involvedObject']['name']:\n          return True\n    except KeyError:\n      return False\n\n  bad_clusters = util.gke_logs_find_bad_clusters(\n      context=context, logs_by_project=logs_by_project, filter_f=filter_f)\n  # Create the report.\n  for _, c in sorted(clusters.items()):\n    if c in bad_clusters:\n      report.add_failed(c, logs.format_log_entry(bad_clusters[c]))\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/asm/snapshots/ERR_2023_001.txt",
    "content": "*  asm/ERR/2023_001: ASM traffic indicates Client side requests failure\n   (logging api is disabled)                                              [SKIP]\n\n"
  },
  {
    "path": "gcpdiag/lint/asm/snapshots/ERR_2023_002.txt",
    "content": "*  asm/ERR/2023_002: ASM traffic indicates Client side requests failure\n   (logging api is disabled)                                              [SKIP]\n\n"
  },
  {
    "path": "gcpdiag/lint/asm/snapshots/ERR_2024_001.txt",
    "content": "*  asm/ERR/2024_001: Getting timed out error for secret not found for ingress gateway\n   (logging api is disabled)                                              [SKIP]\n\n"
  },
  {
    "path": "gcpdiag/lint/asm/snapshots/ERR_2024_002.txt",
    "content": "*  asm/ERR/2024_002: Sufficient resources (CPU and memory) then Istiod pods are scheduled.\n   (logging api is disabled)                                              [SKIP]\n\n"
  },
  {
    "path": "gcpdiag/lint/asm/snapshots/WARN_2023_001.txt",
    "content": "*  asm/WARN/2023_001: gRCP Config stream reset event detected in istio proxies\n   (logging api is disabled)                                              [SKIP]\n\n"
  },
  {
    "path": "gcpdiag/lint/asm/snapshots/WARN_2024_001.txt",
    "content": "*  asm/WARN/2024_001: No webhook creation failures were found.\n   (logging api is disabled)                                              [SKIP]\n\n"
  },
  {
    "path": "gcpdiag/lint/asm/snapshots/WARN_2025_001.txt",
    "content": "*  asm/WARN/2025_001: ASM: Envoy doesn't report connection failure\n   (logging api is disabled)                                              [SKIP]\n\n"
  },
  {
    "path": "gcpdiag/lint/asm/snapshots/WARN_2025_002.txt",
    "content": "*  asm/WARN/2025_002: Upstream connection established successfully with no protocol errors\n   (logging api is disabled)                                              [SKIP]\n\n"
  },
  {
    "path": "gcpdiag/lint/asm/warn_2023_001_grpc_reset.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"gRCP Config stream reset event detected in istio proxies\n\nIf the warning occur every 30sec it's expected behaviour, however for a more\nfrequent frequency of these warning indicate issue with control plane.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.lint.gke import util\nfrom gcpdiag.queries import apis, gke, logs\n\nlogs_by_project = {}\nMATCH_STRING = 'StreamAggregatedResources gRPC config stream closed'\n\n\ndef prepare_rule(context: models.Context):\n  clusters = gke.get_clusters(context)\n  for project_id in {c.project_id for c in clusters.values()}:\n    logs_by_project[project_id] = logs.query(\n        project_id=project_id,\n        resource_type='k8s_container',\n        log_name='log_id(\"stderr\")',\n        filter_str=\n        'textPayload=~\"StreamAggregatedResources gRPC config stream closed\"',\n    )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # Skip entire rule if Cloud Logging is disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(None, 'logging api is disabled')\n    return\n\n  # Any work to do?\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n\n  # Search the logs.\n  def filter_f(log_entry):\n    try:\n      if MATCH_STRING in log_entry['textPayload']:\n        return True\n    except KeyError:\n      return False\n\n  bad_nodes_by_cluster = util.gke_logs_find_bad_clusters(\n      context=context, logs_by_project=logs_by_project, filter_f=filter_f)\n\n  # Create the report.\n  for _, c in sorted(clusters.items()):\n    if c in bad_nodes_by_cluster:\n      report.add_failed(c)\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/asm/warn_2024_001_webhook.py",
    "content": "#Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"No webhook creation failures were found.\n\nError calling webhook namespace.sidecar-injector.istio.io. Make sure endpoints\nare present for the service.\n\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.lint.gke import util\nfrom gcpdiag.queries import apis, gke, logs\n\nMATCH_STR_1 = 'Error creating: Internal error occurred: failed calling webhook '\nMATCH_STR_2 = 'namespace.sidecar-injector.istio.io'\nMATCH_STR_3 = 'no endpoints available for service'\n\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  clusters = gke.get_clusters(context)\n  for project_id in {c.project_id for c in clusters.values()}:\n    logs_by_project[project_id] = logs.query(\n        project_id=project_id,\n        resource_type='k8s_cluster',\n        log_name='log_id(\"events\")',\n        filter_str=(f'jsonPayload.message=~\"{MATCH_STR_1}\" AND '\n                    f'jsonPayload.message=~\"{MATCH_STR_2}\" AND '\n                    f'jsonPayload.message=~\"{MATCH_STR_3}\"'))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(None, 'logging api is disabled')\n    return\n  # Any work to do?\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n    # Search the logs.\n  def filter_f(log_entry):\n    try:\n      if MATCH_STR_1 in log_entry['jsonPayload']['message']:\n        if MATCH_STR_2 in log_entry['jsonPayload']['message']:\n          if MATCH_STR_3 in log_entry['jsonPayload']['message']:\n            return True\n    except KeyError:\n      return False\n\n  bad_clusters = util.gke_logs_find_bad_clusters(\n      context=context, logs_by_project=logs_by_project, filter_f=filter_f)\n  # Create the report.\n  for _, c in sorted(clusters.items()):\n    if c in bad_clusters:\n      report.add_failed(c, logs.format_log_entry(bad_clusters[c]))\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/asm/warn_2025_001_delayedconnect111.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"ASM: Envoy doesn't report connection failure\n\nThe error upstream_reset_before_response_started{remote_connection_failure,\ndelayed_connect_error:_111} occurs when Envoy fails to establish a connection with the\nupstream service\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.lint.gke import util\nfrom gcpdiag.queries import apis, gke, logs\n\nMATCH_STR_1 = (\n    'upstream_reset_before_response_started{remote_connection_failure,'\n    'delayed_connect_error:_111}')\nMATCH_STR_2 = 'delayed connect error: 111'\n\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  clusters = gke.get_clusters(context)\n  for project_id in {c.project_id for c in clusters.values()}:\n    logs_by_project[project_id] = logs.query(\n        project_id=project_id,\n        resource_type='k8s_container',\n        log_name='log_id(\"server-accesslog-stackdriver\")',\n        filter_str=(\n            f'labels.response_details:\"{MATCH_STR_1}\" AND '\n            f'labels.upstream_transport_failure_reason=~\"{MATCH_STR_2}\"'))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(None, 'logging api is disabled')\n    return\n  # Any work to do?\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n    # Search the logs.\n\n  def filter_f(log_entry):\n    try:\n      if MATCH_STR_1 in log_entry['labels']['response_details']:\n        if MATCH_STR_2 in log_entry['labels'][\n            'upstream_transport_failure_reason']:\n          return True\n    except KeyError:\n      return False\n\n  bad_clusters = util.gke_logs_find_bad_clusters(\n      context=context, logs_by_project=logs_by_project, filter_f=filter_f)\n  # Create the report.\n  for _, c in sorted(clusters.items()):\n    if c in bad_clusters:\n      report.add_failed(c, logs.format_log_entry(bad_clusters[c]))\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/asm/warn_2025_002_protocolerror.py",
    "content": "# Copyright 2025 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Upstream connection established successfully with no protocol errors\n\nThe error \"upstream connect error or disconnect/reset before headers. reset\nreason: protocol error\" typically occurs due to invalid/Duplicate headers\nbeing sent by backend application/pod.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.lint.gke import util\nfrom gcpdiag.queries import apis, gke, logs\n\nMATCH_STR_1 = 'upstream_reset_before_response_started{protocol_error}'\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  project_id = context.project_id\n  logs_by_project[project_id] = logs.query(\n      project_id=project_id,\n      resource_type='k8s_container',\n      log_name='log_id(\"server-accesslog-stackdriver\")',\n      filter_str=f'labels.response_details:\"{MATCH_STR_1}\"',\n  )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(None, 'logging api is disabled')\n    return\n  # Any work to do?\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n    # Search the logs.\n\n  def filter_f(log_entry):\n    try:\n      if MATCH_STR_1 in log_entry['labels']['response_details']:\n        return True\n    except KeyError:\n      return False\n\n  bad_clusters = util.gke_logs_find_bad_clusters(\n      context=context, logs_by_project=logs_by_project, filter_f=filter_f)\n  # Create the report.\n  for _, c in clusters.items():\n    if c in bad_clusters:\n      report.add_failed(c, logs.format_log_entry(bad_clusters[c]))\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/lint/bigquery/bigquery_rules_snapshot_test.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\" Generalize rule snapshot testing \"\"\"\n\nfrom gcpdiag.lint import bigquery, snapshot_test_base\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = bigquery\n  project_id = 'gcpdiag-bigquery1-aaaa'\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/err_2022_001_concurrent_dml_updates.py",
    "content": "#\n# Copyright 2022 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# Lint as: python3\n\"\"\"BigQuery jobs not failing due to concurrent DML updates on the same table\n\nMultiple DML queries running concurrently are conflicting with each other.\n\"\"\"\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nMATCH_STR_1 = 'Could not serialize access to table'\nMATCH_STR_2 = 'due to concurrent update'\n\nCONCURRENT_DML_FILTER = [\n    'severity=ERROR',\n    'protoPayload.@type=\"type.googleapis.com/google.cloud.audit.AuditLog\"',\n    f'protoPayload.status.message:(\"{MATCH_STR_1}\" AND \"{MATCH_STR_2}\")',\n]\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='bigquery_resource',\n      log_name='log_id(\"cloudaudit.googleapis.com/data_access\")',\n      filter_str=' AND '.join(CONCURRENT_DML_FILTER))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n  # skip entire rule if logging is disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'Logging api is disabled')\n    return\n  # skip entire rule if the BigQuery API is disabled\n  if not apis.is_enabled(context.project_id, 'bigquery'):\n    report.add_skipped(project, 'bigquery api is disabled')\n    return\n  if logs_by_project.get(context.project_id) and \\\n     logs_by_project[context.project_id].entries:\n    for log_entry in logs_by_project[context.project_id].entries:\n      project_ok_flag = True\n      logging_check_path = get_path(log_entry,\n                                    ('protoPayload', 'status', 'message'),\n                                    default='')\n      if ((MATCH_STR_1 not in logging_check_path) or\n          (MATCH_STR_2 not in logging_check_path)):\n        continue\n      else:\n        report.add_failed(\n            project,\n            'has BigQuery jobs failing due to concurrent DML updates to table')\n        project_ok_flag = False\n        break\n    if project_ok_flag:\n      report.add_ok(project)\n  else:\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/err_2022_002_response_too_large.py",
    "content": "#\n# Copyright 2022 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# Lint as: python3\n\"\"\"BigQuery jobs are not failing due to results being larger than the maximum response size\n\nQuery results for SQL queries in BigQuery that generate excessively large results and don't\nset a destination table fail with job error \"responseTooLarge\"\n\"\"\"\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nMATCH_STR = 'Response too large to return'\n\nRESPONSE_TOO_LARGE = [\n    'severity=ERROR',\n    'protoPayload.@type=\"type.googleapis.com/google.cloud.audit.AuditLog\"',\n    f'protoPayload.status.message:(\"{MATCH_STR}\")',\n]\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='bigquery_resource',\n      log_name='log_id(\"cloudaudit.googleapis.com/data_access\")',\n      filter_str=' AND '.join(RESPONSE_TOO_LARGE))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'Logging api is disabled')\n    return\n  if not apis.is_enabled(context.project_id, 'bigquery'):\n    report.add_skipped(project, 'bigquery api is disabled')\n    return\n  if logs_by_project.get(context.project_id) and \\\n     logs_by_project[context.project_id].entries:\n    for log_entry in logs_by_project[context.project_id].entries:\n      project_ok_flag = True\n      if MATCH_STR not in get_path(log_entry,\n                                   ('protoPayload', 'status', 'message'),\n                                   default=''):\n        continue\n      else:\n        report.add_failed(\n            project,\n            'has BigQuery jobs failing because query results are larger than the '\n            'maximum response size')\n        project_ok_flag = False\n        break\n    if project_ok_flag:\n      report.add_ok(project)\n  else:\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/err_2022_003_permission_denied_drive_credentials.py",
    "content": "#\n# Copyright 2022 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# Lint as: python3\n\"\"\"BigQuery jobs not failing while accessing data in Drive due to a permission issue\n\nBigQuery jobs are failing because the authentication token is missing the Google\nDrive access scope or the user/service account is not granted at least the Viewer\nrole on the Drive file.\n\"\"\"\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nMATCH_STR = 'Permission denied while getting Drive credentials'\n\nMISSING_DRIVE_SCOPE = [\n    'severity=ERROR',\n    'protoPayload.@type=\"type.googleapis.com/google.cloud.audit.AuditLog\"',\n    f'protoPayload.status.message:(\"{MATCH_STR}\")',\n]\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='bigquery_resource',\n      log_name='log_id(\"cloudaudit.googleapis.com/data_access\")',\n      filter_str=' AND '.join(MISSING_DRIVE_SCOPE))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'Logging api is disabled')\n    return\n  if not apis.is_enabled(context.project_id, 'bigquery'):\n    report.add_skipped(project, 'bigquery api is disabled')\n    return\n  if logs_by_project.get(context.project_id) and \\\n     logs_by_project[context.project_id].entries:\n    for log_entry in logs_by_project[context.project_id].entries:\n      project_ok_flag = True\n      if MATCH_STR not in get_path(log_entry,\n                                   ('protoPayload', 'status', 'message'),\n                                   default=''):\n        continue\n      else:\n        report.add_failed(\n            project,\n            'has BigQuery jobs failing due to issues while accessing a file in Drive '\n            'due to missing permissions on the file or missing Drive access scope'\n        )\n        project_ok_flag = False\n        break\n    if project_ok_flag:\n      report.add_ok(project)\n  else:\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/err_2022_004_exceeded_limit_shuffle.py",
    "content": "#\n# Copyright 2022 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# Lint as: python3\n\"\"\"BigQuery jobs are not failing due to shuffle operation resources exceeded\n\nThe query job failed because the maximum disk and memory limit available for\nshuffle operations was exceeded for the project or organization.\n\"\"\"\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nMATCH_STR = ('Your project or organization exceeded the maximum disk and mem'\n             'ory limit available for shuffle operations')\n\nSHUFFLE_EXCEEDED = [\n    'severity=ERROR',\n    'protoPayload.@type=\"type.googleapis.com/google.cloud.audit.AuditLog\"',\n    f'protoPayload.status.message:(\"{MATCH_STR}\")',\n]\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='bigquery_resource',\n      log_name='log_id(\"cloudaudit.googleapis.com/data_access\")',\n      filter_str=' AND '.join(SHUFFLE_EXCEEDED))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'Logging api is disabled')\n    return\n  if not apis.is_enabled(context.project_id, 'bigquery'):\n    report.add_skipped(project, 'BigQuery api is disabled')\n    return\n  if logs_by_project.get(context.project_id) and \\\n     logs_by_project[context.project_id].entries:\n    for log_entry in logs_by_project[context.project_id].entries:\n      project_ok_flag = True\n      if MATCH_STR not in get_path(log_entry,\n                                   ('protoPayload', 'status', 'message'),\n                                   default=''):\n        continue\n      else:\n        report.add_failed(\n            project,\n            'has BigQuery jobs failing due to shuffle operation resources '\n            'exceeded during query execution')\n        project_ok_flag = False\n        break\n    if project_ok_flag:\n      report.add_ok(project)\n  else:\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/err_2023_001_job_not_found_error.py",
    "content": "#\n# Copyright 2022 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# Lint as: python3\n\"\"\"Jobs called via the API are all found\n\nBigQuery jobs have been requested via the API and they have not been found,\nthis can be due to giving incorrect information in the call, such as jobID or location\n\"\"\"\nimport itertools\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\n#String the is unique to this error\nMATCH_STR = 'Not found: Job'\n\n#Where to look for the error\nJOB_NOT_FOUND = [\n    'severity=ERROR',\n    'protoPayload.@type=\"type.googleapis.com/google.cloud.audit.AuditLog\"',\n    'protoPayload.methodName=\"jobservice.getqueryresults\"',\n    f'protoPayload.status.message:(\"{MATCH_STR}\")'\n]\nlogs_by_project = {}\n\n\n#Get the logs for the error\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='bigquery_resource',\n      log_name='log_id(\"cloudaudit.googleapis.com%2Fdata_access\")',\n      filter_str=' AND '.join(JOB_NOT_FOUND))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'Logging api is disabled')\n    return\n  # skip the rule if bigquery is not enabled\n  if not apis.is_enabled(context.project_id, 'bigquery'):\n    report.add_skipped(project, 'bigquery api is disabled')\n    return\n  #list of all found errors\n  error_entries = set()\n\n  #loop through the errors\n  if logs_by_project.get(context.project_id) and \\\n     logs_by_project[context.project_id].entries:\n    for log_entry in logs_by_project[context.project_id].entries:\n      #make sure we found the correct errors\n      if MATCH_STR not in get_path(log_entry,\n                                   ('protoPayload', 'status', 'message'),\n                                   default=''):\n        continue\n      else:\n        #add the error to the error list\n        msg = log_entry['protoPayload']['status']['message']\n        job_id = msg.replace('Not found: Job ', '')\n        error_entries.add(job_id)\n\n    error_msg = ', '.join(itertools.islice(error_entries, 10))\n    if len(error_entries) > 10:\n      error_msg += ', ...'\n    #if there are no errors, report success\n    if len(error_entries) == 0:\n      report.add_ok(project)\n    #if there are more than 10 errors, report failure\n    else:\n      #if there are errors, report them and what jobs had the error\n      report.add_failed(\n          project,\n          'This happens when calls to the API to find a job, that comeback with no answers.',\n          (' Make sure to provide the correct region in the API call.'\n           f'There were {len(error_entries)} jobs not found: {error_msg}'))\n  else:\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/err_2023_002_dataset_not_found.py",
    "content": "#\n# Copyright 2022 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# Lint as: python3\n\"\"\"BigQuery hasn't reported any unknown datasets while performing copy tables operations\n\nWhile trying to copy a table, the dataset was not found\n\"\"\"\nimport itertools\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\n#String the is unique to this error\nMATCH_STR = 'Not found: Dataset'\n\n#Where to look for the error\nDS_NOT_FOUND = [\n    'severity=ERROR',\n    'protoPayload.@type=\"type.googleapis.com/google.cloud.audit.AuditLog\"',\n    'protoPayload.methodName=\"jobservice.insert\"',\n    f'protoPayload.status.message:(\"{MATCH_STR}\")',\n    ('protoPayload.serviceData.jobInsertRequest.resource'\n     '.jobConfiguration.tableCopy.createDisposition=\"CREATE_IF_NEEDED\"')\n]\nlogs_by_project = {}\n\n\n#Get the logs for the error\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='bigquery_resource',\n      log_name='log_id(\"cloudaudit.googleapis.com%2Fdata_access\")',\n      filter_str=' AND '.join(DS_NOT_FOUND))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'Logging api is disabled')\n    return\n  # skip the rule if bigquery is not enabled\n  if not apis.is_enabled(context.project_id, 'bigquery'):\n    report.add_skipped(project, 'bigquery api is disabled')\n    return\n  #list of all found errors\n  error_entries = set()\n\n  #loop through the errors\n  if logs_by_project.get(context.project_id) and \\\n     logs_by_project[context.project_id].entries:\n    for log_entry in logs_by_project[context.project_id].entries:\n      #make sure we found the correct errors\n      if MATCH_STR not in get_path(log_entry,\n                                   ('protoPayload', 'status', 'message'),\n                                   default=''):\n        continue\n      else:\n        #add the error to the error list\n        msg = log_entry['protoPayload']['status']['message']\n        dataset_id = msg.replace(MATCH_STR, '')\n        error_entries.add(dataset_id)\n\n    error_msg = ', '.join(itertools.islice(error_entries, 10))\n    if len(error_entries) > 10:\n      error_msg += ', ...'\n\n    #if there are no errors, report success\n    if len(error_entries) == 0:\n      report.add_ok(project)\n\n    else:\n      #if there are errors, report them and what jobs had the error\n      report.add_failed(\n          project,\n          ('While trying to copy a table a dataset'\n           ' was not found. It may not exist or might be in a different region'\n          ),\n          (' Make sure the dataset exists and is in the same region'\n           f'There were {len(error_entries)} datasets not found: {error_msg}'))\n  else:\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/err_2023_003_resource_exceeded.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"BigQuery query job do not encounter resource exceeded error\n\nA BigQuery query sometimes could not be executed in the allotted memory\n\"\"\"\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nMATCH_STR = (\n    'Resources exceeded during query execution: The query could not be executed'\n    ' in the allotted memory.')\n\nRESOURCE_EXCEEDED_FILTER = [\n    'severity=ERROR',\n    'protoPayload.methodName=\"jobservice.jobcompleted\"',\n    f'protoPayload.status.message:(\"{MATCH_STR}\")',\n]\n\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='bigquery_resource',\n      log_name='log_id(\"cloudaudit.googleapis.com/data_access\")',\n      filter_str=' AND '.join(RESOURCE_EXCEEDED_FILTER),\n  )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'logging api is disabled')\n    return\n\n  if not apis.is_enabled(context.project_id, 'bigquery'):\n    report.add_skipped(project, 'bigquery api is disabled')\n    return\n\n  if (logs_by_project.get(context.project_id) and\n      logs_by_project[context.project_id].entries):\n    for log_entry in logs_by_project[context.project_id].entries:\n      # Filter out non-relevant log entries.\n      if log_entry['severity'] != 'ERROR' or MATCH_STR not in get_path(\n          log_entry, ('protoPayload', 'status', 'message'), default=''):\n        continue\n      job_id = get_path(\n          log_entry,\n          (\n              'protoPayload',\n              'serviceData',\n              'jobCompletedEvent',\n              'job',\n              'jobName',\n              'jobId',\n          ),\n      )\n      report.add_failed(\n          project,\n          'Some BigQuery query failed with Resource Exceeded Error : ' + job_id,\n      )\n      return\n\n  # in case of there is no log or all logs are non-relevant\n  report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/err_2023_004_concurrent_dml.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"BigQuery query job do not encounter dml concurrency issue when mutating concurrently.\n\nMutating DML Queries that run concurrently, end up conflicting with each other.\nFor these DML queries to maintain consistency, in case there are multiple\nqueries that run at roughly the same time, it's possible that one of them\nfailed.\n\"\"\"\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nMATCH_STR = 'Could not serialize access to'\n\nCONCURRENT_MUTATION_FILTER = [\n    'severity=ERROR',\n    'protoPayload.methodName=\"jobservice.jobcompleted\"',\n    f'protoPayload.status.message=~\"{MATCH_STR}\"',\n]\n\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='bigquery_resource',\n      log_name='log_id(\"cloudaudit.googleapis.com/data_access\")',\n      filter_str=' AND '.join(CONCURRENT_MUTATION_FILTER),\n  )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'logging api is disabled')\n    return\n\n  if not apis.is_enabled(context.project_id, 'bigquery'):\n    report.add_skipped(project, 'bigquery api is disabled')\n    return\n\n  if (logs_by_project.get(context.project_id) and\n      logs_by_project[context.project_id].entries):\n    for log_entry in logs_by_project[context.project_id].entries:\n      # Filter out non-relevant log entries.\n      if log_entry['severity'] != 'ERROR' or MATCH_STR not in get_path(\n          log_entry, ('protoPayload', 'status', 'message'), default=''):\n        continue\n      job_id = get_path(\n          log_entry,\n          (\n              'protoPayload',\n              'serviceData',\n              'jobCompletedEvent',\n              'job',\n              'jobName',\n              'jobId',\n          ),\n      )\n      report.add_failed(\n          project,\n          'Some BigQuery dml operations fail that run concurrently, as they end'\n          ' up conflicting with each other : ' + job_id,\n      )\n      return\n\n  # in case of there is no log or all logs are non-relevant\n  report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/err_2023_005_outdated_credentials_for_scheduled_queries.py",
    "content": "#\n# Copyright 2022 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# Lint as: python3\n\"\"\"Scheduled query not failing due to outdated credentials.\n\nIf scheduled queries are failing with an INVALID_USER error, you might need to\nupdate the user credentials on the query. Credentials are automatically up to\ndate for new scheduled queries.\n\"\"\"\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nMATCH_STR = 'Error code 5 : Authentication failure: User Id not found. Error code: INVALID_USERID'\n\nOUTDATED_CREDENTIAL_SCOPE = [\n    'severity=ERROR',\n    'protoPayload.@type=\"type.googleapis.com/google.cloud.audit.AuditLog\"',\n    f'protoPayload.status.message:(\"{MATCH_STR}\")',\n]\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='bigquery_resource',\n      log_name='log_id(\"cloudaudit.googleapis.com/data_access\")',\n      filter_str=' AND '.join(OUTDATED_CREDENTIAL_SCOPE))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n  # skip entire rule if logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'Logging api is disabled')\n    return\n  if not apis.is_enabled(context.project_id, 'bigquery'):\n    report.add_skipped(project, 'bigquery api is disabled')\n    return\n  if logs_by_project.get(context.project_id) and \\\n     logs_by_project[context.project_id].entries:\n    project_ok_flag = True\n    for log_entry in logs_by_project[context.project_id].entries:\n      if MATCH_STR not in get_path(log_entry,\n                                   ('protoPayload', 'status', 'message'),\n                                   default=''):\n        continue\n      else:\n        report.add_failed(\n            project,\n            'has outdated credentials for scheduled query. Please update the '\n            'user credentials for the scheduled query')\n        project_ok_flag = False\n        break\n    if project_ok_flag:\n      report.add_ok(project)\n  else:\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/err_2023_006_bigquery_policy_do_not_belong_to_user.py",
    "content": "#\n# Copyright 2022 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# Lint as: python3\n\"\"\"An organization's policy doesn't block the BigQuery user domain.\n\nThere can be domain restriction policies applied to customer's organization.\nThe domain of the user that you are trying to share the BigQuery dataset with\nshould be present in the list of \"Allowed\" fields for the constraint\nconstraints/iam.allowedPolicyMemberDomains.\n\"\"\"\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nMATCH_STR = (\n    'One or more users named in the policy do not belong to a permitted'\n    ' customer')\n\nPOLICY_DO_NOT_BELONG_TO_USER_FILTER = [\n    'severity=ERROR',\n    'protoPayload.@type=\"type.googleapis.com/google.cloud.audit.AuditLog\"',\n    f'protoPayload.status.message:(\"{MATCH_STR}\")',\n]\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='bigquery_dataset',\n      log_name='log_id(\"cloudaudit.googleapis.com/activity\")',\n      filter_str=' AND '.join(POLICY_DO_NOT_BELONG_TO_USER_FILTER),\n  )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n  # skip entire rule if logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'Logging api is disabled')\n    return\n  if not apis.is_enabled(context.project_id, 'bigquery'):\n    report.add_skipped(project, 'bigquery api is disabled')\n    return\n  project_ok_flag = True\n  datasets = set()\n  if (logs_by_project.get(context.project_id) and\n      logs_by_project[context.project_id].entries):\n    for log_entry in logs_by_project[context.project_id].entries:\n      if MATCH_STR in get_path(log_entry, ('protoPayload', 'status', 'message'),\n                               default=''):\n        datasets.add(get_path(\n            log_entry,\n            (\n                'protoPayload',\n                'resourceName',\n            ),\n        ))\n        project_ok_flag = False\n\n  if project_ok_flag:\n    report.add_ok(project)\n  else:\n    report.add_failed(\n        project,\n        \"\"\"The following datasets cannot be shared with some users due to\n'Domain restricted sharing' organization policy constraint: \\n\"\"\" +\n        '\\n'.join(str(d) for d in datasets),\n    )\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/err_2023_007_data_transfer_service_agent_does_not_exist.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Data Transfer Service Agent exists and has the required roles.\n\nVerify that the BigQuery Data Transfer service agent exists and has been granted\nthe roles/bigquerydatatransfer.serviceAgent role.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, iam\n\nROLE = 'roles/bigquerydatatransfer.serviceAgent'\n\n\ndef run_rule(context: models.Context,\n             report: lint.LintReportRuleInterface) -> None:\n  project = crm.get_project(context.project_id)\n\n  if not apis.is_enabled(context.project_id, 'bigquery'):\n    report.add_skipped(project, 'bigquery api is disabled')\n    return\n\n  if not apis.is_enabled(context.project_id, 'bigquerydatatransfer'):\n    report.add_skipped(project, 'bigquery data transfer api is disabled')\n    return\n\n  policy = iam.get_project_policy(context)\n  dts_sa = f'service-{project.number}@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com'\n\n  if iam.is_service_account_existing(dts_sa, context):\n    if policy.has_role_permissions(f'serviceAccount:{dts_sa}', ROLE):\n      report.add_ok(project)\n    else:\n      report.add_failed(project, (f'service account: {dts_sa}\\n'\n                                  f'missing role: {ROLE}'))\n  else:\n    report.add_failed(project, (f'service account: {dts_sa} is missing'))\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/err_2023_008_user_not_authorized_to_perform_this_action.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"User has the required roles to create or modify scheduled queries.\n\nVerify that the user trying to create or modify scheduled queries has the role\nroles/bigquery.admin. If pub sub notification is configured, then user should\nalso have permission pubsub.topics.getIamPolicy which is part of the role\nroles/pubsub.admin.\n\"\"\"\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nMATCH_STR = 'User not authorized to perform this action'\n\nUSER_NOT_AUTHORIZED = [\n    'severity=ERROR',\n    'protoPayload.@type=\"type.googleapis.com/google.cloud.audit.AuditLog\"',\n    f'protoPayload.status.message:(\"{MATCH_STR}\")',\n]\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='audited_resource',\n      log_name='log_id(\"cloudaudit.googleapis.com/activity\")',\n      filter_str=' AND '.join(USER_NOT_AUTHORIZED),\n  )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n  # skip entire rule if logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'Logging api is disabled')\n    return\n  if not apis.is_enabled(context.project_id, 'bigquery'):\n    report.add_skipped(project, 'bigquery api is disabled')\n    return\n  project_ok_flag = True\n  useremail = ''\n  pubsub = None\n  if (logs_by_project.get(context.project_id) and\n      logs_by_project[context.project_id].entries):\n    for log_entry in logs_by_project[context.project_id].entries:\n      if MATCH_STR in get_path(log_entry, ('protoPayload', 'status', 'message'),\n                               default=''):\n        useremail = get_path(\n            log_entry,\n            (\n                'protoPayload',\n                'authenticationInfo',\n                'principalEmail',\n            ),\n        )\n\n        pubsub = get_path(\n            log_entry,\n            (\n                'protoPayload',\n                'request',\n                'transferConfig',\n                'notificationPubsubTopic',\n            ),\n        )\n        project_ok_flag = False\n\n  if project_ok_flag:\n    report.add_ok(project)\n  elif project_ok_flag is False and pubsub is not None:\n    report.add_failed(\n        project,\n        'User with principalEmail ' + useremail +\n        ' does not have enough permissions to create or modify scheduled'\n        ' queries with pub sub notifications.',\n    )\n  else:\n    report.add_failed(\n        project,\n        'User with principalEmail ' + useremail +\n        ' does not have enough permissions to create or modify scheduled'\n        ' queries.',\n    )\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/err_2023_009_not_consistent_with_destination_dataset.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"BigQuery job not failed due to Scheduled query with multiple DML\n\nDestination/Target dataset can only be set up for scheduled queries with one\nsingle DML statement. When two DML statements are present the second DML\nstatement will not pick up the correct destination/target dataset and will throw\nan error.\n\"\"\"\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nMATCH_STR = (\n    \"Dataset specified in the query ('') is not consistent with Destination\"\n    ' dataset')\n\nFILTER = [\n    'severity=ERROR',\n]\n\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='bigquery_dts_config',\n      log_name=(\n          'log_id(\"bigquerydatatransfer.googleapis.com%2Ftransfer_config\")'),\n      filter_str=' AND '.join(FILTER),\n  )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n\n  project = crm.get_project(context.project_id)\n\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'logging api is disabled')\n    return\n\n  if not apis.is_enabled(context.project_id, 'bigquery'):\n    report.add_skipped(project, 'bigquery api is disabled')\n    return\n\n  project_ok_flag = True\n  config_id_set = set()\n\n  if (logs_by_project.get(context.project_id) and\n      logs_by_project[context.project_id].entries):\n    #loop through the errors\n    for log_entry in logs_by_project[context.project_id].entries:\n      # Filter out non-relevant log entries.\n      if MATCH_STR not in get_path(log_entry, ('jsonPayload', 'message'),\n                                   default=''):\n        continue\n\n      config_id = get_path(log_entry, ('resource', 'labels', 'config_id'))\n      if config_id not in config_id_set:\n        report.add_failed(\n            project,\n            'Scheduled Query failed due to Scheduled query with multiple DML \\n'\n            + config_id)\n        config_id_set.add(config_id)\n        project_ok_flag = False\n\n    if project_ok_flag:\n      report.add_ok(project)\n  else:\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/err_2024_001_query_too_complex.py",
    "content": "#\n# Copyright 2024 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# Lint as: python3\n\"\"\"BigQuery jobs are not failing due to too many subqueries or query is too complex\n\nThe query is failing with Resources exceeded during query execution. This\nusually happens when VIEWs, WITH clauses and SQL UDFs are inlined/expanded in\nquery and then we measure query complexity. Nested inlining could cause\nexponential growth in complexity,Sometimes customers use WITH clause as\nsubstitution for temp tables. It is not a good practice and they could use\nscripts and temp tables instead.\n\"\"\"\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nMATCH_STR = (\n    'Not enough resources for query planning - too many subqueries or query is'\n    ' too complex')\n\nQUERY_COMPLEX = [\n    'severity=ERROR',\n    'protoPayload.@type=\"type.googleapis.com/google.cloud.audit.AuditLog\"',\n    f'protoPayload.status.message:(\"{MATCH_STR}\")',\n]\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='bigquery_resource',\n      log_name='log_id(\"cloudaudit.googleapis.com/data_access\")',\n      filter_str=' AND '.join(QUERY_COMPLEX),\n  )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'Logging api is disabled')\n    return\n  if not apis.is_enabled(context.project_id, 'bigquery'):\n    report.add_skipped(project, 'BigQuery api is disabled')\n    return\n  if (logs_by_project.get(context.project_id) and\n      logs_by_project[context.project_id].entries):\n    for log_entry in logs_by_project[context.project_id].entries:\n      project_ok_flag = True\n      if MATCH_STR not in get_path(log_entry,\n                                   ('protoPayload', 'status', 'message'),\n                                   default=''):\n        continue\n      else:\n        report.add_failed(\n            project,\n            'has BigQuery jobs failing due to high complexity. Please optimize'\n            ' the query',\n        )\n        project_ok_flag = False\n        break\n    if project_ok_flag:\n      report.add_ok(project)\n  else:\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/snapshots/ERR_2022_001.txt",
    "content": "*  bigquery/ERR/2022_001: BigQuery jobs not failing due to concurrent DML updates on the same table\n   - projects/gcpdiag-cloudsql1-aaaa                                      [SKIP]\n     Logging api is disabled\n\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/snapshots/ERR_2022_002.txt",
    "content": "*  bigquery/ERR/2022_002: BigQuery jobs are not failing due to results being larger than the maximum response size\n   - projects/gcpdiag-cloudsql1-aaaa                                      [SKIP]\n     Logging api is disabled\n\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/snapshots/ERR_2022_003.txt",
    "content": "*  bigquery/ERR/2022_003: BigQuery jobs not failing while accessing data in Drive due to a permission issue\n   - projects/gcpdiag-cloudsql1-aaaa                                      [SKIP]\n     Logging api is disabled\n\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/snapshots/ERR_2022_004.txt",
    "content": "*  bigquery/ERR/2022_004: BigQuery jobs are not failing due to shuffle operation resources exceeded\n   - projects/gcpdiag-cloudsql1-aaaa                                      [SKIP]\n     Logging api is disabled\n\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/snapshots/ERR_2023_001.txt",
    "content": "*  bigquery/ERR/2023_001: Jobs called via the API are all found\n   - projects/gcpdiag-cloudsql1-aaaa                                      [SKIP]\n     Logging api is disabled\n\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/snapshots/ERR_2023_002.txt",
    "content": "*  bigquery/ERR/2023_002: BigQuery hasn't reported any unknown datasets while performing copy tables operations\n   - projects/gcpdiag-cloudsql1-aaaa                                      [SKIP]\n     Logging api is disabled\n\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/snapshots/ERR_2023_003.txt",
    "content": "*  bigquery/ERR/2023_003: BigQuery query job do not encounter resource exceeded error\n   - projects/gcpdiag-cloudsql1-aaaa                                      [SKIP]\n     logging api is disabled\n\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/snapshots/ERR_2023_004.txt",
    "content": "*  bigquery/ERR/2023_004: BigQuery query job do not encounter dml concurrency issue when mutating concurrently.\n   - projects/gcpdiag-cloudsql1-aaaa                                      [SKIP]\n     logging api is disabled\n\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/snapshots/ERR_2023_005.txt",
    "content": "*  bigquery/ERR/2023_005: Scheduled query not failing due to outdated credentials.\n   - projects/gcpdiag-cloudsql1-aaaa                                      [SKIP]\n     Logging api is disabled\n\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/snapshots/ERR_2023_006.txt",
    "content": "*  bigquery/ERR/2023_006: An organization's policy doesn't block the BigQuery user domain.\n   - projects/gcpdiag-cloudsql1-aaaa                                      [SKIP]\n     Logging api is disabled\n\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/snapshots/ERR_2023_007.txt",
    "content": "*  bigquery/ERR/2023_007: Data Transfer Service Agent exists and has the required roles.\n   - projects/gcpdiag-cloudsql1-aaaa                                      [SKIP]\n     bigquery data transfer api is disabled\n\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/snapshots/ERR_2023_008.txt",
    "content": "*  bigquery/ERR/2023_008: User has the required roles to create or modify scheduled queries.\n   - projects/gcpdiag-cloudsql1-aaaa                                      [SKIP]\n     Logging api is disabled\n\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/snapshots/ERR_2023_009.txt",
    "content": "*  bigquery/ERR/2023_009: BigQuery job not failed due to Scheduled query with multiple DML\n   - projects/gcpdiag-cloudsql1-aaaa                                      [SKIP]\n     logging api is disabled\n\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/snapshots/ERR_2024_001.txt",
    "content": "*  bigquery/ERR/2024_001: BigQuery jobs are not failing due to too many subqueries or query is too complex\n   - projects/gcpdiag-cloudsql1-aaaa                                      [SKIP]\n     Logging api is disabled\n\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/snapshots/WARN_2022_001.txt",
    "content": "*  bigquery/WARN/2022_001: BigQuery does not exceed rate limits\n   - projects/gcpdiag-cloudsql1-aaaa                                      [SKIP]\n     logging api is disabled\n\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/snapshots/WARN_2022_002.txt",
    "content": "*  bigquery/WARN/2022_002: BigQuery does not violate column level security\n   - projects/gcpdiag-cloudsql1-aaaa                                      [SKIP]\n     logging api is disabled\n\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/snapshots/WARN_2022_003.txt",
    "content": "*  bigquery/WARN/2022_003: BigQuery copy job does not exceed the daily copy quota\n   - projects/gcpdiag-cloudsql1-aaaa                                      [SKIP]\n     Logging api is disabled\n\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/snapshots/WARN_2022_004.txt",
    "content": "*  bigquery/WARN/2022_004: BigQuery copy job does not exceed the cross-region daily copy quota\n   - projects/gcpdiag-cloudsql1-aaaa                                      [SKIP]\n     Logging api is disabled\n\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/snapshots/WARN_2023_001.txt",
    "content": "*  bigquery/WARN/2023_001: BigQuery query job does not time out during execution\n   - projects/gcpdiag-cloudsql1-aaaa                                      [SKIP]\n     logging api is disabled\n\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/snapshots/WARN_2023_002.txt",
    "content": "*  bigquery/WARN/2023_002: No errors querying wildcard tables\n   - projects/gcpdiag-cloudsql1-aaaa                                      [SKIP]\n     Logging api is disabled\n\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/snapshots/WARN_2023_003.txt",
    "content": "*  bigquery/WARN/2023_003: BigQuery query job does not fail with too many output columns error\n   - projects/gcpdiag-cloudsql1-aaaa                                      [SKIP]\n     logging api is disabled\n\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/snapshots/WARN_2023_004.txt",
    "content": "*  bigquery/WARN/2023_004: BigQuery CMEK-related operations do not fail due to missing permissions\n   - projects/gcpdiag-cloudsql1-aaaa                                      [SKIP]\n     logging api is disabled\n\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/snapshots/WARN_2024_001.txt",
    "content": "*  bigquery/WARN/2024_001: BigQuery table does not exceed import or query appends per table\n   - projects/gcpdiag-cloudsql1-aaaa                                      [SKIP]\n     Logging api is disabled\n\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/snapshots/WARN_2024_002.txt",
    "content": "*  bigquery/WARN/2024_002: BigQuery external connection with Cloud SQL does not fail\n   - projects/gcpdiag-cloudsql1-aaaa                                      [SKIP]\n     Logging api is disabled\n\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/snapshots/WARN_2024_003.txt",
    "content": "*  bigquery/WARN/2024_003: BigQuery job does not fail due to Maximum API requests per user per method exceeded.\n   - projects/gcpdiag-cloudsql1-aaaa                                      [SKIP]\n     logging api is disabled\n\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/snapshots/WARN_2024_004.txt",
    "content": "*  bigquery/WARN/2024_004: BigQuery job not exceeding the concurrent queries limit for remote functions.\n   - projects/gcpdiag-cloudsql1-aaaa                                      [SKIP]\n     Logging api is disabled\n\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/snapshots/WARN_2024_005.txt",
    "content": "*  bigquery/WARN/2024_005: BigQuery table does not exceed number of partition modifications to a column partitioned table\n   - projects/gcpdiag-cloudsql1-aaaa                                      [SKIP]\n     logging api is disabled\n\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/snapshots/WARN_2024_006.txt",
    "content": "*  bigquery/WARN/2024_006: BigQuery job does not exceed tabledata.list bytes per second per project\n   - projects/gcpdiag-cloudsql1-aaaa                                      [SKIP]\n     Logging api is disabled\n\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/warn_2022_001_exceeded_rate_limits.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"BigQuery does not exceed rate limits\n\nBigQuery has various quotas that limit the rate and volume of incoming\nrequests. These quotas exist both to protect the backend systems, and to help\nguard against unexpected billing if you submit large jobs.\n\"\"\"\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nMATCH_STR = 'xceeded rate limits'\n\nRATE_LIMITS_FILTER = [\n    'severity=ERROR',\n    'protoPayload.@type=\"type.googleapis.com/google.cloud.audit.AuditLog\"',\n    'protoPayload.serviceData.jobCompletedEvent.job.jobStatus.'\n    f'additionalErrors.message:\"{MATCH_STR}\"'\n]\n\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='bigquery_resource',\n      log_name='log_id(\"cloudaudit.googleapis.com/data_access\")',\n      filter_str=' AND '.join(RATE_LIMITS_FILTER))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'logging api is disabled')\n    return\n\n  if not apis.is_enabled(context.project_id, 'bigquery'):\n    report.add_skipped(project, 'bigquery api is disabled')\n    return\n\n  if (logs_by_project.get(context.project_id) and\n      logs_by_project[context.project_id].entries):\n    for log_entry in logs_by_project[context.project_id].entries:\n      # Filter out non-relevant log entries.\n      if log_entry['severity'] != 'ERROR' or MATCH_STR not in get_path(\n          log_entry, ('protoPayload', 'status', 'message'), default=''):\n        continue\n      report.add_failed(\n          project, 'exceeded rate limits. Kindly slow down the request rate.')\n      return\n\n  # in case of there is no log or all logs are non-relevant\n  report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/warn_2022_002_column_level_security.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"BigQuery does not violate column level security\n\nBigQuery provides fine-grained access to sensitive columns using policy tags.\nUsing BigQuery column-level security, you can create policies that check, at\nquery time, whether a user has proper access.\n\n\"\"\"\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nMATCH_STR = ('Access Denied: BigQuery BigQuery: User does not have permission '\n             'to access data protected by policy tag')\n\nCOLUMN_LEVEL_SECURITY_FILTER = [\n    'severity=ERROR', f'protoPayload.status.message:\"{MATCH_STR}\"'\n]\n\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='bigquery_resource',\n      log_name='log_id(\"cloudaudit.googleapis.com/data_access\")',\n      filter_str=' AND '.join(COLUMN_LEVEL_SECURITY_FILTER))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'logging api is disabled')\n    return\n\n  if not apis.is_enabled(context.project_id, 'bigquery'):\n    report.add_skipped(project, 'bigquery api is disabled')\n    return\n\n  if logs_by_project.get(context.project_id) and \\\n     logs_by_project[context.project_id].entries:\n    for log_entry in logs_by_project[context.project_id].entries:\n      # Filter out non-relevant log entries.\n      if log_entry['severity'] != 'ERROR' or \\\n         MATCH_STR not in get_path(log_entry,\n                     ('protoPayload', 'status', 'message'), default=''):\n        continue\n      report.add_failed(project,\n                        'found viloations on BigQuery column level security')\n      return\n\n  # in case of there is no log or all logs are non-relevant\n  report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/warn_2022_003_copy_job_quota.py",
    "content": "#\n# Copyright 2022 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# Lint as: python3\n\"\"\"BigQuery copy job does not exceed the daily copy quota\n\nThis rule verifies that there are no log entries reporting that the number of copy jobs\nrunning in a project exceeded the daily limit\n\n\"\"\"\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nMATCH_STR = 'Quota exceeded: Your project exceeded quota for copies per project.'\n\nCOPY_QUOTA_EXCEEDED = [\n    'severity=ERROR',\n    'protoPayload.@type=\"type.googleapis.com/google.cloud.audit.AuditLog\"',\n    f'protoPayload.status.message:(\"{MATCH_STR}\")',\n]\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='bigquery_resource',\n      log_name='log_id(\"cloudaudit.googleapis.com/data_access\")',\n      filter_str=' AND '.join(COPY_QUOTA_EXCEEDED))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n  # skip entire rule if logging is disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'Logging api is disabled')\n    return\n  # skip entire rule if the BigQuery API is disabled\n  if not apis.is_enabled(context.project_id, 'bigquery'):\n    report.add_skipped(project, 'BigQuery api is disabled')\n    return\n  if logs_by_project.get(context.project_id) and \\\n     logs_by_project[context.project_id].entries:\n    for log_entry in logs_by_project[context.project_id].entries:\n      project_ok_flag = True\n      logging_check_path = get_path(log_entry,\n                                    ('protoPayload', 'status', 'message'),\n                                    default='')\n      if MATCH_STR not in logging_check_path:\n        continue\n      else:\n        report.add_failed(\n            project,\n            'Quota exceeded: Your project exceeded quota for copies per project.'\n        )\n        project_ok_flag = False\n        break\n    if project_ok_flag:\n      report.add_ok(project)\n  else:\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/warn_2022_004_cross_region_copy_job_quota.py",
    "content": "#\n# Copyright 2022 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# Lint as: python3\n\"\"\"BigQuery copy job does not exceed the cross-region daily copy quota\n\nThis rule verifies that there are no log entries reporting that\nthe number of cross-region copy jobs running in a project exceeded the daily limit.\n\"\"\"\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nMATCH_STR1 = 'Quota exceeded: Your project exceeded quota for cross region copies per project.'\nMATCH_STR2 = 'Quota exceeded: Your table exceeded quota for cross region copies per table.'\n\nCROSS_REGION_COPY_QUOTA_EXCEEDED = [\n    'severity=ERROR',\n    'protoPayload.@type=\"type.googleapis.com/google.cloud.audit.AuditLog\"',\n    f'protoPayload.status.message:(\"{MATCH_STR1}\" OR \"{MATCH_STR2}\")',\n]\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='bigquery_resource',\n      log_name='log_id(\"cloudaudit.googleapis.com/data_access\")',\n      filter_str=' AND '.join(CROSS_REGION_COPY_QUOTA_EXCEEDED))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n  # skip entire rule if logging is disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'Logging api is disabled')\n    return\n  # skip entire rule if the BigQuery API is disabled\n  if not apis.is_enabled(context.project_id, 'bigquery'):\n    report.add_skipped(project, 'BigQuery api is disabled')\n    return\n  if logs_by_project.get(context.project_id) and \\\n     logs_by_project[context.project_id].entries:\n    for log_entry in logs_by_project[context.project_id].entries:\n      project_ok_flag = True\n      logging_check_path = get_path(log_entry,\n                                    ('protoPayload', 'status', 'message'),\n                                    default='')\n      if (MATCH_STR1 and MATCH_STR2) not in logging_check_path:\n        continue\n      elif (MATCH_STR1 or MATCH_STR2) in logging_check_path:\n        error_message = MATCH_STR1 if MATCH_STR1 in logging_check_path else MATCH_STR2\n        report.add_failed(\n            project,\n            logs.format_log_entry(log_entry)[:25] + ' ' + error_message)\n        project_ok_flag = False\n        break\n    if project_ok_flag:\n      report.add_ok(project)\n  else:\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/warn_2023_001_query_job_timed_out.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"BigQuery query job does not time out during execution\n\nA BigQuery query or multi-statement query job can execute for up to six hours,\nafter which it times out and fails.\n\"\"\"\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nMATCH_STR = 'Operation timed out after 6.0 hours'\n\nOPERATION_TIMED_OUT_FILTER = [\n    'severity=ERROR',\n    'protoPayload.methodName=\"jobservice.jobcompleted\"',\n    f'protoPayload.status.message:(\"{MATCH_STR}\")',\n]\n\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='bigquery_resource',\n      log_name='log_id(\"cloudaudit.googleapis.com/data_access\")',\n      filter_str=' AND '.join(OPERATION_TIMED_OUT_FILTER),\n  )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'logging api is disabled')\n    return\n\n  if not apis.is_enabled(context.project_id, 'bigquery'):\n    report.add_skipped(project, 'bigquery api is disabled')\n    return\n\n  if (logs_by_project.get(context.project_id) and\n      logs_by_project[context.project_id].entries):\n    for log_entry in logs_by_project[context.project_id].entries:\n      # Filter out non-relevant log entries.\n      if log_entry['severity'] != 'ERROR' or MATCH_STR not in get_path(\n          log_entry, ('protoPayload', 'status', 'message'), default=''):\n        continue\n      job_id = get_path(\n          log_entry,\n          (\n              'protoPayload',\n              'serviceData',\n              'jobCompletedEvent',\n              'job',\n              'jobName',\n              'jobId',\n          ),\n      )\n      report.add_failed(\n          project,\n          'Some BigQuery query jobs timed out. A sample failed job : ' + job_id)\n      return\n\n  # in case of there is no log or all logs are non-relevant\n  report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/warn_2023_002_wildcard_tables_query.py",
    "content": "#\n# Copyright 2022 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# Lint as: python3\n\"\"\"No errors querying wildcard tables\n\nA query has been used on a wildcard table and the field was not found\n\"\"\"\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\n#String the is unique to this error\nMATCH_STR = 'Unrecognized name:'\n\n#Where to look for the error\nERROR_IN_LOGGING = [\n    'severity=ERROR',\n    'protoPayload.@type=\"type.googleapis.com/google.cloud.audit.AuditLog\"',\n    r'protoPayload.serviceData.jobCompletedEvent.job.jobStatistics.referencedTables.tableId=~\"\\*$\"',\n    f'protoPayload.serviceData.jobCompletedEvent.job.jobStatus.error.message:\"{MATCH_STR}\"'\n]\nlogs_by_project = {}\n\n\n#Get the logs for the error\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='bigquery_resource',\n      log_name='log_id(\"cloudaudit.googleapis.com%2Fdata_access\")',\n      filter_str=' AND '.join(ERROR_IN_LOGGING))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'Logging api is disabled')\n    return\n  # skip the rule if bigquery is not enabled\n  if not apis.is_enabled(context.project_id, 'bigquery'):\n    report.add_skipped(project, 'bigquery api is disabled')\n    return\n  #list of all found errors\n  error_entries = []\n\n  #loop through the errors\n  if logs_by_project.get(context.project_id) and \\\n     logs_by_project[context.project_id].entries:\n    for log_entry in logs_by_project[context.project_id].entries:\n      #make sure we found the correct errors\n      if MATCH_STR not in get_path(log_entry,\n                                   ('protoPayload', 'status', 'message'),\n                                   default=''):\n        continue\n      else:\n        #add the error to the error list\n        error_entries.append(log_entry['protoPayload']['status']['message'])\n\n    #if there are no errors, report success\n    if len(error_entries) == 0:\n      report.add_ok(project)\n    #if there are more than 10 errors, report failure\n    elif len(error_entries) >= 1:\n      report.add_failed(\n          project,\n          ('There have been errors in your project'\n           ' where a field was not found in a query using a wildcard table'),\n          '  to prevent this, please rewrite your query or change the tables schema'\n      )\n  else:\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/warn_2023_003_too_many_output_column.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"BigQuery query job does not fail with too many output columns error\n\nThis issue is caused when a job cannot be completed within a memory budget\n because of the possibility of user's schema being too large and nested.\n\"\"\"\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nMATCH_STR = 'Resources exceeded during query execution: Too many output columns'\n\nTOO_MANY_OUTPUT_COLUMNS_FILTER = [\n    'severity=ERROR',\n    f'protoPayload.status.message:(\"{MATCH_STR}\")',\n]\n\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='bigquery_resource',\n      log_name='log_id(\"cloudaudit.googleapis.com/data_access\")',\n      filter_str=' AND '.join(TOO_MANY_OUTPUT_COLUMNS_FILTER),\n  )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'logging api is disabled')\n    return\n\n  if not apis.is_enabled(context.project_id, 'bigquery'):\n    report.add_skipped(project, 'bigquery api is disabled')\n    return\n\n  if (logs_by_project.get(context.project_id) and\n      logs_by_project[context.project_id].entries):\n    for log_entry in logs_by_project[context.project_id].entries:\n      # Filter out non-relevant log entries.\n      if log_entry['severity'] != 'ERROR' or MATCH_STR not in get_path(\n          log_entry, ('protoPayload', 'status', 'message'), default=''):\n        continue\n      job_id = get_path(\n          log_entry,\n          (\n              'protoPayload',\n              'serviceData',\n              'jobCompletedEvent',\n              'job',\n              'jobName',\n              'jobId',\n          ),\n      )\n      report.add_failed(\n          project,\n          'BigQuery job failed with Too many output columns. A sample failed job : '\n          + job_id)\n      return\n\n  # in case of there is no log or all logs are non-relevant\n  report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/warn_2023_004_bigquery_kms_errors.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"BigQuery CMEK-related operations do not fail due to missing permissions\n\nBigQuery CMEK-related operations will fail if the BigQuery encryption service\naccount for that project does not have the permission to encrypt and decrypt\nusing\nthat CMEK KMS key.\n\"\"\"\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nMATCH_STR = (\n    'Please grant Cloud KMS CryptoKey Encrypter/Decrypter role to BigQuery'\n    ' service account')\n\nBQ_KMS_ERROR_FILTER = [\n    'severity=ERROR',\n    f'protoPayload.status.message:(\"{MATCH_STR}\")',\n]\n\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='bigquery_resource',\n      log_name='log_id(\"cloudaudit.googleapis.com/data_access\")',\n      filter_str=' AND '.join(BQ_KMS_ERROR_FILTER),\n  )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n\n  # skip entire rule if logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'logging api is disabled')\n    return\n\n  if not apis.is_enabled(context.project_id, 'bigquery'):\n    report.add_skipped(project, 'bigquery api is disabled')\n    return\n\n  if context.project_id in logs_by_project:\n    logs_ = logs_by_project.get(context.project_id)\n    if logs_:\n      for log_entry in logs_.entries:\n        # Filter out non-relevant log entries.\n        if log_entry['severity'] != 'ERROR' or MATCH_STR not in get_path(\n            log_entry, ('protoPayload', 'status', 'message'), default=''):\n          continue\n        error_message = get_path(\n            log_entry,\n            ('protoPayload', 'status', 'message'),\n        )\n\n        bq_sa = error_message.split(\n            'Please grant Cloud KMS CryptoKey Encrypter/Decrypter role to'\n            ' BigQuery service account: ')[-1]\n\n        report.add_failed(\n            project,\n            'BigQuery encryption service account missing Cloud KMS CryptoKey'\n            ' Encrypter/Decrypter IAM role : ' + bq_sa,\n        )\n        return\n\n  # in case of there is no log or all logs are non-relevant\n  report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/warn_2024_001_imports_or_query_appends_per_table.py",
    "content": "#\n# Copyright 2024 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# Lint as: python3\n\"\"\"BigQuery table does not exceed import or query appends per table\n\nBigQuery returns this error message when your table reaches the limit for table\noperations per day for Standard tables. Table operations include the combined\ntotal of all load jobs, copy jobs, and query jobs that append or overwrite a\ndestination table.\n\"\"\"\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nMATCH_STR = 'Your table exceeded quota for imports or query appends per table'\n\nIMPORTS_APPENDS_EXCEEDED = [\n    'severity=ERROR',\n    'protoPayload.@type=\"type.googleapis.com/google.cloud.audit.AuditLog\"',\n    f'protoPayload.status.message:(\"{MATCH_STR}\")',\n]\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='bigquery_resource',\n      log_name='log_id(\"cloudaudit.googleapis.com/data_access\")',\n      filter_str=' AND '.join(IMPORTS_APPENDS_EXCEEDED),\n  )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n  # skip entire rule if logging is disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'Logging api is disabled')\n    return\n  # skip entire rule if the BigQuery API is disabled\n  if not apis.is_enabled(context.project_id, 'bigquery'):\n    report.add_skipped(project, 'BigQuery api is disabled')\n    return\n  if (logs_by_project.get(context.project_id) and\n      logs_by_project[context.project_id].entries):\n    for log_entry in logs_by_project[context.project_id].entries:\n      project_ok_flag = True\n      logging_check_path = get_path(log_entry,\n                                    ('protoPayload', 'status', 'message'),\n                                    default='')\n      if MATCH_STR not in logging_check_path:\n        continue\n      else:\n        report.add_failed(\n            project,\n            'Quota exceeded: Your table exceeded quota for imports or query'\n            ' appends per table',\n        )\n        project_ok_flag = False\n        break\n    if project_ok_flag:\n      report.add_ok(project)\n  else:\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/warn_2024_002_invalid_external_connection.py",
    "content": "#\n# Copyright 2024 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# Lint as: python3\n\"\"\"BigQuery external connection with Cloud SQL does not fail\n\nWhen connecting with Cloud SQL external connection using bigquery the BigQuery\nConnection Service Agent is automatically created and given an IAM role as Cloud\nSQL client. If the role doesn't exists, query over the associated data source\nconnection fails.\n\"\"\"\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nMATCH_STR = 'Invalid table-valued function EXTERNAL_QUERY\\nFailed to connect to'\n\nEXTERNAL_CONNECTION_ERROR = [\n    'severity=ERROR',\n    'protoPayload.@type=\"type.googleapis.com/google.cloud.audit.AuditLog\"',\n    f'protoPayload.status.message:(\"{MATCH_STR}\")',\n]\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='bigquery_resource',\n      log_name='log_id(\"cloudaudit.googleapis.com/data_access\")',\n      filter_str=' AND '.join(EXTERNAL_CONNECTION_ERROR),\n  )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n  # skip entire rule if logging is disabled\n  project_ok_flag = True\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'Logging api is disabled')\n    return\n  # skip entire rule if the BigQuery API is disabled\n  if not apis.is_enabled(context.project_id, 'bigquery'):\n    report.add_skipped(project, 'BigQuery api is disabled')\n    return\n  if (logs_by_project.get(context.project_id) and\n      logs_by_project[context.project_id].entries):\n    for log_entry in logs_by_project[context.project_id].entries:\n      logging_check_path = get_path(log_entry,\n                                    ('protoPayload', 'status', 'message'),\n                                    default='')\n      if MATCH_STR not in logging_check_path:\n        continue\n      else:\n        report.add_failed(\n            project,\n            'BigQuery external connection with Cloud SQL failed due to missing '\n            'permissions of BigQuery connection service agent',\n        )\n        project_ok_flag = False\n        break\n    if project_ok_flag:\n      report.add_ok(project)\n  else:\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/warn_2024_003_too_many_concurrent_api_requests.py",
    "content": "#\n# Copyright 2024 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"BigQuery job does not fail due to Maximum API requests per user per method exceeded.\n\nBigQuery returns Quota exceeded or Exceeded rate limits error when you hit the\nrate limit for the number of API requests to a BigQuery API per user per method.\n\"\"\"\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nMATCH_STR = 'too many API requests per user per method for this user_method'\n\nTOO_MANY_API_REQUESTS_FILTER = [\n    'severity=ERROR',\n    f'protoPayload.status.message =~ (\"{MATCH_STR}\")',\n]\n\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='bigquery_resource',\n      log_name='log_id(\"cloudaudit.googleapis.com/activity\")',\n      filter_str=' AND '.join(TOO_MANY_API_REQUESTS_FILTER),\n  )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n\n  project = crm.get_project(context.project_id)\n\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'logging api is disabled')\n    return\n\n  if not apis.is_enabled(context.project_id, 'bigquery'):\n    report.add_skipped(project, 'bigquery api is disabled')\n    return\n\n  if (logs_by_project.get(context.project_id) and\n      logs_by_project[context.project_id].entries):\n    for log_entry in logs_by_project[context.project_id].entries:\n      # Filter out non-relevant log entries.\n      if log_entry['severity'] != 'ERROR' or MATCH_STR not in get_path(\n          log_entry, ('protoPayload', 'status', 'message'), default=''):\n        continue\n      method_name = get_path(log_entry, ('protoPayload', 'methodName'))\n      report.add_failed(\n          project,\n          f'BigQuery user_method ({method_name}) exceeded quota for concurrent'\n          ' api requests per user per method',\n      )\n      return\n\n  # in case of there is no log or all logs are non-relevant\n  report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/warn_2024_004_too_many_concurrent_queries.py",
    "content": "#\n# Copyright 2024 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# Lint as: python3\n\"\"\"BigQuery job not exceeding the concurrent queries limit for remote functions.\n\nBigQuery encountered a \"Exceeded rate limits\" error. This means the number of\nqueries simultaneously using remote functions surpassed a predefined\nthreshold to ensure system stability. To avoid overloading the system,\nBigQuery restricts the number of concurrent operations.\n\"\"\"\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nMATCH_STR = 'too many concurrent queries with remote functions for this project'\n\nRATE_LIMITS_FILTER = [\n    'severity=ERROR',\n    'protoPayload.@type=\"type.googleapis.com/google.cloud.audit.AuditLog\"',\n    f'protoPayload.status.message:(\"{MATCH_STR}\")',\n]\n\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='bigquery_resource',\n      log_name='log_id(\"cloudaudit.googleapis.com/data_access\")',\n      filter_str=' AND '.join(RATE_LIMITS_FILTER),\n  )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n  # skip entire rule if logging is disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'Logging api is disabled')\n    return\n  # skip entire rule if the BigQuery API is disabled\n  if not apis.is_enabled(context.project_id, 'bigquery'):\n    report.add_skipped(project, 'BigQuery api is disabled')\n    return\n  if (logs_by_project.get(context.project_id) and\n      logs_by_project[context.project_id].entries):\n    for log_entry in logs_by_project[context.project_id].entries:\n      # Filter out non-relevant log entries.\n      if log_entry['severity'] != 'ERROR' or MATCH_STR not in get_path(\n          log_entry, ('protoPayload', 'status', 'message'), default=''):\n        continue\n\n      report.add_failed(\n          project,\n          'Exceeded rate limits: too many concurrent queries with remote'\n          ' functions for this project',\n      )\n      return\n\n  # in case of there is no log or all logs are non-relevant\n  report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/warn_2024_005_exceeded_partition_modifications.py",
    "content": "#\n# Copyright 2024 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# Lint as: python3\n\"\"\"BigQuery table does not exceed number of partition modifications to a column partitioned table\n\nBigQuery returns this error when your column-partitioned table reaches the quota\nof the number of partition modifications permitted per day. Partition\nmodifications include the total of all load jobs, copy jobs, and query jobs that\nappend or overwrite a destination partition.\n\"\"\"\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nMATCH_STR = 'Your table exceeded quota for Number of partition modifications'\n\nQUOTA_EXCEEDED = [\n    'severity=ERROR',\n    'protoPayload.methodName=\"jobservice.jobcompleted\"',\n    'protoPayload.@type=\"type.googleapis.com/google.cloud.audit.AuditLog\"',\n    f'protoPayload.status.message:(\"{MATCH_STR}\")',\n]\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='bigquery_resource',\n      log_name='log_id(\"cloudaudit.googleapis.com/data_access\")',\n      filter_str=' AND '.join(QUOTA_EXCEEDED),\n  )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'logging api is disabled')\n    return\n\n  if not apis.is_enabled(context.project_id, 'bigquery'):\n    report.add_skipped(project, 'bigquery api is disabled')\n    return\n\n  if (logs_by_project.get(context.project_id) and\n      logs_by_project[context.project_id].entries):\n    for log_entry in logs_by_project[context.project_id].entries:\n      # Filter out non-relevant log entries.\n      if log_entry['severity'] != 'ERROR' or MATCH_STR not in get_path(\n          log_entry, ('protoPayload', 'status', 'message'), default=''):\n        continue\n      job_id = get_path(\n          log_entry,\n          (\n              'protoPayload',\n              'serviceData',\n              'jobCompletedEvent',\n              'job',\n              'jobName',\n              'jobId',\n          ),\n      )\n      report.add_failed(\n          project,\n          'Exceeded quota for number of partition modifications per'\n          ' column-partitioned table per day. Please check failed job ' +\n          job_id + ' for more details.',\n      )\n      return\n  # in case of there is no log or all logs are non-relevant\n  report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/bigquery/warn_2024_006_tabledata_list_bytes_exceeded.py",
    "content": "#\n# Copyright 2024 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# Lint as: python3\n\"\"\"BigQuery job does not exceed tabledata.list bytes per second per project\n\nBigQuery returns this error when the project number mentioned in the error\nmessage reaches the maximum size of data that can be read through the\ntabledata.list API call in a project per second.\n\"\"\"\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nMATCH_STR = 'tabledata.list bytes per second per project'\nLOG_FILTER = [\n    'severity>=ERROR',\n    'protoPayload.@type=\"type.googleapis.com/google.cloud.audit.AuditLog\"',\n    f'protoPayload.status.message:(\"{MATCH_STR}\")',\n]\n\nproject_logs = {}\n\n\ndef prepare_rule(context: models.Context):\n  project_logs[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='bigquery_resource',\n      log_name='log_id(\"cloudaudit.googleapis.com/data_access\")',\n      filter_str=' AND '.join(LOG_FILTER),\n  )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n  # skip entire rule if logging is disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'Logging api is disabled')\n    return\n  # skip entire rule if the BigQuery API is disabled\n  if not apis.is_enabled(context.project_id, 'bigquery'):\n    report.add_skipped(project, 'BigQuery api is disabled')\n    return\n  if (project_logs.get(context.project_id) and\n      project_logs[context.project_id].entries):\n\n    for log_entry in project_logs[context.project_id].entries:\n      # Filter out non-relevant log entries.\n      if log_entry['severity'] != 'ERROR' or MATCH_STR not in get_path(\n          log_entry, ('protoPayload', 'status', 'message'), default=''):\n        continue\n\n      job_id = get_path(\n          log_entry,\n          (\n              'protoPayload',\n              'serviceData',\n              'jobGetQueryResultsResponse',\n              'job',\n              'jobName',\n              'jobId',\n          ),\n      )\n\n      report.add_failed(\n          project,\n          'Exceeded maximum tabledata.list bytes per second per project'\n          ' limit. Try spacing out requests over a longer period with'\n          ' delays. Please check failed job ' + job_id + ' for more details.',\n      )\n      return\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/billing/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/lint/billing/billing_rules_snapshot_test.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\" Generalize rule snapshot testing \"\"\"\n\nfrom unittest import mock\n\nfrom gcpdiag.lint import billing, snapshot_test_base\nfrom gcpdiag.queries import apis_stub\n\n\n@mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = billing\n  project_id = 'gcpdiag-billing1-aaaa'\n"
  },
  {
    "path": "gcpdiag/lint/billing/snapshots/WARN_2022_001.txt",
    "content": "*  billing/WARN/2022_001: Projects have billing enabled\n   - projects/gcpdiag-billing1-aaaa                                       [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/billing/snapshots/WARN_2022_002.txt",
    "content": "*  billing/WARN/2022_002: Billing Accounts have at least one project associated with them\n   - projects/gcpdiag-billing1-aaaa                                       [ OK ] Billing account has projects linked correctly.\n\n"
  },
  {
    "path": "gcpdiag/lint/billing/snapshots/WARN_2022_003.txt",
    "content": "*  billing/WARN/2022_003: Check for any billing anomalies using cost insights\n   - projects/gcpdiag-billing1-aaaa                                       [FAIL] This is a cost anomaly. The aggregated gross cost for the specified target resource list and cost slice is significantly different from the aggregated forecasted cost.\nCost Below forecast, Forecasted: 80 USD, Actual: 16 USD\nAnomaly Period From: 2021-04-20T07:00:00Z, To: 2021-04-21T07:00:00Z\n     Cost Anomaly Found\n\n   Cost insights are part of the Recommender service, and you can use them to\n   find important patterns in your costs. For example, you see a cost insight in\n   the Insights API if your costs for a day are significantly higher or lower\n   than your typical daily costs. You can use this information to find out if\n   some of your resources are getting more usage than expected, and take action\n   to optimize your costs.\n\n   https://gcpdiag.dev/rules/billing/WARN/2022_003\n\n"
  },
  {
    "path": "gcpdiag/lint/billing/warn_2022_001_project_billing_enabled.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Projects have billing enabled\n\nCheck whether all projects the user has permission to view have billing enabled.\n\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, billing, crm\n\nall_project_billing_info = []\n\n\ndef prepare_rule(context: models.Context):\n  all_project_billing_info.extend(\n      crm.get_all_projects_in_parent(context.project_id))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  if not apis.is_enabled(context.project_id, 'cloudbilling'):\n    # an API error is raised\n    billing.get_billing_info(context.project_id)\n    return\n  if len(all_project_billing_info) == 0:\n    report.add_skipped(None, 'Permission Denied')\n    return\n  for project_billing_info in all_project_billing_info:\n    project = crm.get_project(project_billing_info.project_id)\n    if not project_billing_info.is_billing_enabled():\n      report.add_failed(project)\n      return\n  # all projects have billing enabled\n  report.add_ok(crm.get_project(context.project_id))\n"
  },
  {
    "path": "gcpdiag/lint/billing/warn_2022_002_stray_billing_accounts.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Billing Accounts have at least one project associated with them\n\nCheck whether all active billing accounts the user has permission to view have\nat least one project associated with them.\n\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, billing, crm\n\nall_account_billing_info = []\n\n\ndef prepare_rule(context: models.Context):\n  billing_accounts = billing.get_all_billing_accounts(context.project_id)\n  if billing_accounts:\n    all_account_billing_info.extend(billing_accounts)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  if not apis.is_enabled(context.project_id, 'cloudbilling'):\n    # an API error is raised\n    billing.get_billing_info(context.project_id)\n    return\n  if len(all_account_billing_info) == 0:\n    report.add_skipped(None, 'Billing Account Permission Denied')\n    return\n  project = crm.get_project(context.project_id)\n  for billing_account in all_account_billing_info:\n    if not len(billing_account.list_projects(context)) > 0:\n      report.add_failed(billing_account, 'billing account does not have any '\n                        'projects')\n      return\n  # all billing account have projects associated with them\n  report.add_ok(project, 'Billing account has projects linked correctly.')\n"
  },
  {
    "path": "gcpdiag/lint/billing/warn_2022_003_cost_anomalies.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Check for any billing anomalies using cost insights\n\nCost insights are part of the Recommender service, and you can use them to find important patterns\nin your costs. For example, you see a cost insight in the Insights API if your costs for a day are\nsignificantly higher or lower than your typical daily costs. You can use this information to find\nout if some of your resources are getting more usage than expected, and take action to optimize\nyour costs.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, billing, crm\n\ncost_insights = {}\n\n\ndef prepare_rule(context: models.Context):\n  billing_account = billing.get_billing_account(context.project_id)\n  if billing_account:\n    cost_insights['insights'] = billing.get_cost_insights_for_a_project(\n        context.project_id)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  if not apis.is_enabled(context.project_id, 'cloudbilling'):\n    # an API error is raised\n    billing.get_billing_info(context.project_id)\n    return\n  if not cost_insights:\n    report.add_skipped(\n        None, 'Billing Account Permission Denied or Project Billing Disabled')\n    return\n  project = crm.get_project(context.project_id)\n  cost_insight = cost_insights['insights']\n  anomaly_found = False\n  for cost_insight in cost_insights['insights']:\n    if cost_insight.is_anomaly():\n      report.add_failed(project, 'Cost Anomaly Found',\n                        cost_insight.build_anomaly_description())\n      anomaly_found = True\n  if not anomaly_found:\n    # no cost anomalies found\n    report.add_ok(project, 'No cost anomalies found.')\n"
  },
  {
    "path": "gcpdiag/lint/cloudrun/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/lint/cloudrun/cloud_rules_snapshot_test.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\" Generalize rule snapshot testing \"\"\"\n\nfrom gcpdiag.lint import cloudrun, snapshot_test_base\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = cloudrun\n  project_id = 'gcpdiag-cloudrun1-aaaa'\n"
  },
  {
    "path": "gcpdiag/lint/cloudrun/err_2022_001_missing_cloudrun_serviceagent_role.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Cloud Run service agent has the run.serviceAgent role.\n\nThe Cloud Run Service Agent is missing the run.serviceAgent role,\nwhich gives Cloud Run service account access to managed resources.\nYou can resolve this error by granting the run.serviceAgent IAM role\nto service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import cloudrun, crm, iam\n\nROLE = 'roles/run.serviceAgent'\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  services = cloudrun.get_services(context)\n  if not services:\n    report.add_skipped(None, f'no services found {context}')\n    return\n\n  project = crm.get_project(context.project_id)\n  sa_email = f'service-{project.number}@serverless-robot-prod.iam.gserviceaccount.com'\n  iam_policy = iam.get_project_policy(context)\n  if not iam_policy.has_role_permissions(f'serviceAccount:{sa_email}', ROLE):\n    report.add_failed(project,\n                      f'service account: {sa_email}\\nmissing role: {ROLE}')\n  else:\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/cloudrun/snapshots/ERR_2022_001.txt",
    "content": "*  cloudrun/ERR/2022_001: Cloud Run service agent has the run.serviceAgent role.\n   - projects/gcpdiag-cloudrun1-aaaa                                      [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/cloudsql/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/lint/cloudsql/bp_2023_001_public_ip.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Cloud SQL is not assigned Public IP.\n\nTo lower your attack surface, Cloud SQL databases should not have public IPs.\nPrivate IPs provide improved network security and lower latency for your application.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, cloudsql\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  if not apis.is_enabled(context.project_id, 'sqladmin'):\n    report.add_skipped(None, 'sqladmin is disabled')\n    return\n\n  instances = cloudsql.get_instances(context)\n\n  if not instances:\n    report.add_skipped(None, 'no CloudSQL instances found')\n    return\n\n  for instance in instances:\n    if instance.has_public_ip:\n      report.add_failed(instance, f'{instance.name} is having Public  IP')\n    else:\n      report.add_ok(instance)\n"
  },
  {
    "path": "gcpdiag/lint/cloudsql/bp_2023_002_automated_backup.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Cloud SQL is configured with automated backup\n\nBackups help you restore lost data to your Cloud SQL instance. Additionally,\nif an instance is having a problem, you can restore it to a previous state by\nusing the backup to overwrite it. Enable automated backups for any instance that\ncontains necessary data. Backups protect your data from loss or damage.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, cloudsql\n\ninstances_by_project = {}\n\n\ndef prefetch_rule(context: models.Context):\n  instances_by_project[context.project_id] = cloudsql.get_instances(context)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  if not apis.is_enabled(context.project_id, 'sqladmin'):\n    report.add_skipped(None, 'sqladmin is disabled')\n    return\n\n  instances = instances_by_project[context.project_id]\n\n  if not instances:\n    report.add_skipped(None, 'no CloudSQL instances found')\n    return\n\n  for instance in instances:\n    if not instance.is_automated_backup_enabled:\n      report.add_failed(instance)\n    else:\n      report.add_ok(instance)\n"
  },
  {
    "path": "gcpdiag/lint/cloudsql/bp_2023_003_log_output_flag.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Cloud SQL instance's log_output flag is not configured as TABLE\n\nIf you set log_output to TABLE, the log output is placed in a table in the mysql\nsystem database. It might consume a considerable amount of disk space. If this\ntable becomes large, it can affect instance restart time or cause the instance\nto lose its SLA coverage. For this reason, the TABLE option is not recommended.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, cloudsql\n\ninstances_by_project = {}\n\n\ndef prefetch_rule(context: models.Context):\n  instances_by_project[context.project_id] = cloudsql.get_instances(context)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  if not apis.is_enabled(context.project_id, 'sqladmin'):\n    report.add_skipped(None, 'sqladmin is disabled')\n    return\n\n  instances = instances_by_project[context.project_id]\n\n  if not instances:\n    report.add_skipped(None, 'no CloudSQL instances found')\n    return\n\n  for instance in instances:\n    if instance.is_log_output_configured_as_table:\n      report.add_failed(instance)\n    else:\n      report.add_ok(instance)\n"
  },
  {
    "path": "gcpdiag/lint/cloudsql/bp_ext_2023_001_maint_window.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Cloud SQL is defined with Maintenance Window as any.\n\nConfigure a maintenance window for your primary instance\nto control when disruptive updates can occur.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, cloudsql\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  if not apis.is_enabled(context.project_id, 'sqladmin'):\n    report.add_skipped(None, 'sqladmin is disabled')\n    return\n\n  instances = cloudsql.get_instances(context)\n\n  if not instances:\n    report.add_skipped(None, 'no CloudSQL instances found')\n    return\n\n  for instance in instances:\n    if instance.has_maint_window == 0:\n      report.add_failed(\n          instance,\n          f'{instance.name} is defined with Maintenance Window as Any')\n    else:\n      report.add_ok(instance)\n"
  },
  {
    "path": "gcpdiag/lint/cloudsql/bp_ext_2023_002_del_protection.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Cloud SQL should be configured with Deletion Protection\n\nProtect your CloudSQL instance and backups from accidental deletion\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, cloudsql\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  if not apis.is_enabled(context.project_id, 'sqladmin'):\n    report.add_skipped(None, 'sqladmin is disabled')\n    return\n\n  instances = cloudsql.get_instances(context)\n\n  if not instances:\n    report.add_skipped(None, 'no CloudSQL instances found')\n    return\n\n  for instance in instances:\n    if not instance.has_del_protection:\n      report.add_failed(instance)\n    else:\n      report.add_ok(instance)\n"
  },
  {
    "path": "gcpdiag/lint/cloudsql/bp_ext_2023_003_auto_storage_increases.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Cloud SQL enables automatic storage increases feature\n\nConfigure storage to accommodate critical database maintenance by enabling the\nautomatic storage increases feature. Otherwise, ensure that you have at least\n20% available space to accommodate any critical database maintenance operations\nthat Cloud SQL may perform. Keep in mind that when an instance becomes unable to\nadd storage that it needs, the instance likely stops accepting incoming\nconnections and could go offline.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, cloudsql\n\ninstances_by_project = {}\n\n\ndef prefetch_rule(context: models.Context):\n  instances_by_project[context.project_id] = cloudsql.get_instances(context)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  if not apis.is_enabled(context.project_id, 'sqladmin'):\n    report.add_skipped(None, 'sqladmin is disabled')\n    return\n\n  instances = instances_by_project[context.project_id]\n\n  if not instances:\n    report.add_skipped(None, 'no CloudSQL instances found')\n    return\n\n  for instance in instances:\n    if not instance.is_storage_auto_resize_enabled:\n      report.add_failed(instance)\n    else:\n      report.add_ok(instance)\n"
  },
  {
    "path": "gcpdiag/lint/cloudsql/bp_ext_2023_004_sla.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Cloud SQL instance is covered by the SLA\n\nOnly Cloud SQL instances configured for high availability with at least one\ndedicated CPU are covered by the Cloud SQL SLA. Shared-core instances and\nsingle-zone instances are not covered by the SLA. These machine types are\nconfigured to use a shared-core CPU, and are designed to provide low-cost test\nand development instances only. Don't use them for production instances.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, cloudsql\n\ninstances_by_project = {}\n\n\ndef prefetch_rule(context: models.Context):\n  instances_by_project[context.project_id] = cloudsql.get_instances(context)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  if not apis.is_enabled(context.project_id, 'sqladmin'):\n    report.add_skipped(None, 'sqladmin is disabled')\n    return\n\n  instances = instances_by_project[context.project_id]\n\n  if not instances:\n    report.add_skipped(None, 'no CloudSQL instances found')\n    return\n\n  for instance in instances:\n    if instance.is_shared_core or not instance.is_high_available:\n      report.add_failed(instance)\n    else:\n      report.add_ok(instance)\n"
  },
  {
    "path": "gcpdiag/lint/cloudsql/cloudsql_rules_snapshot_test.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\" Generalize rule snapshot testing \"\"\"\n\nfrom gcpdiag.lint import cloudsql, snapshot_test_base\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = cloudsql\n  project_id = 'gcpdiag-cloudsql1-aaaa'\n"
  },
  {
    "path": "gcpdiag/lint/cloudsql/err_2023_001_instance_in_suspended.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Cloud SQL instance should not be in SUSPENDED state\n\nThe SUSPENDED state indicates a billing issue with your Google Cloud account.\nYou can determine your billing status by filing a Billing Support Request.\nAfter the billing issue is resolved, the instance returns to runnable status\nwithin a few hours. Note that suspended MySQL instances are deleted after 90\ndays.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, cloudsql\n\ninstances_by_project = {}\n\n\ndef prefetch_rule(context: models.Context):\n  instances_by_project[context.project_id] = cloudsql.get_instances(context)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  if not apis.is_enabled(context.project_id, 'sqladmin'):\n    report.add_skipped(None, 'sqladmin is disabled')\n    return\n\n  instances = instances_by_project[context.project_id]\n\n  if not instances:\n    report.add_skipped(None, 'no CloudSQL instances found')\n    return\n\n  for instance in instances:\n    if instance.is_suspended_state:\n      report.add_failed(instance)\n    else:\n      report.add_ok(instance)\n"
  },
  {
    "path": "gcpdiag/lint/cloudsql/sec_2023_001_public_acess.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Cloud SQL is not publicly accessible.\n\nYour SQL instance has 0.0.0.0/0 as an allowed network.\nThis occurrence means that any IPv4 client can pass the network firewall\nand make login attempts to your instance,\nincluding clients you might not have intended to allow.\nClients still need valid credentials to successfully log in to your instance.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, cloudsql\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  if not apis.is_enabled(context.project_id, 'sqladmin'):\n    report.add_skipped(None, 'sqladmin is disabled')\n    return\n\n  instances = cloudsql.get_instances(context)\n\n  if not instances:\n    report.add_skipped(None, 'no CloudSQL instances found')\n    return\n\n  for instance in instances:\n    if '0.0.0.0/0' in instance.is_publically_accessible:\n      report.add_failed(\n          instance,\n          f'{instance.name} is having 0.0.0.0/0 as an allowed network')\n    else:\n      report.add_ok(instance)\n"
  },
  {
    "path": "gcpdiag/lint/cloudsql/snapshots/BP_2023_001.txt",
    "content": "*  cloudsql/BP/2023_001: Cloud SQL is not assigned Public IP.\n   - https://sqladmin.googleapis.com/v1/projects/gcpdiag-cloudsql1-aaaa/instances/sql1 [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/cloudsql/snapshots/BP_2023_002.txt",
    "content": "*  cloudsql/BP/2023_002: Cloud SQL is configured with automated backup\n   - https://sqladmin.googleapis.com/v1/projects/gcpdiag-cloudsql1-aaaa/instances/sql1 [FAIL]\n\n   Backups help you restore lost data to your Cloud SQL instance. Additionally,\n   if an instance is having a problem, you can restore it to a previous state by\n   using the backup to overwrite it. Enable automated backups for any instance\n   that contains necessary data. Backups protect your data from loss or damage.\n\n   https://gcpdiag.dev/rules/cloudsql/BP/2023_002\n\n"
  },
  {
    "path": "gcpdiag/lint/cloudsql/snapshots/BP_2023_003.txt",
    "content": "*  cloudsql/BP/2023_003: Cloud SQL instance's log_output flag is not configured as TABLE\n   - https://sqladmin.googleapis.com/v1/projects/gcpdiag-cloudsql1-aaaa/instances/sql1 [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/cloudsql/snapshots/BP_EXT_2023_001.txt",
    "content": "*  cloudsql/BP_EXT/2023_001: Cloud SQL is defined with Maintenance Window as any.\n   - https://sqladmin.googleapis.com/v1/projects/gcpdiag-cloudsql1-aaaa/instances/sql1 [FAIL]\n     sql1 is defined with Maintenance Window as Any\n\n   Configure a maintenance window for your primary instance to control when\n   disruptive updates can occur.\n\n   https://gcpdiag.dev/rules/cloudsql/BP_EXT/2023_001\n\n"
  },
  {
    "path": "gcpdiag/lint/cloudsql/snapshots/BP_EXT_2023_002.txt",
    "content": "*  cloudsql/BP_EXT/2023_002: Cloud SQL should be configured with Deletion Protection\n   - https://sqladmin.googleapis.com/v1/projects/gcpdiag-cloudsql1-aaaa/instances/sql1 [FAIL]\n\n   Protect your CloudSQL instance and backups from accidental deletion\n\n   https://gcpdiag.dev/rules/cloudsql/BP_EXT/2023_002\n\n"
  },
  {
    "path": "gcpdiag/lint/cloudsql/snapshots/BP_EXT_2023_003.txt",
    "content": "*  cloudsql/BP_EXT/2023_003: Cloud SQL enables automatic storage increases feature\n   - https://sqladmin.googleapis.com/v1/projects/gcpdiag-cloudsql1-aaaa/instances/sql1 [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/cloudsql/snapshots/BP_EXT_2023_004.txt",
    "content": "*  cloudsql/BP_EXT/2023_004: Cloud SQL instance is covered by the SLA\n   - https://sqladmin.googleapis.com/v1/projects/gcpdiag-cloudsql1-aaaa/instances/sql1 [FAIL]\n\n   Only Cloud SQL instances configured for high availability with at least one\n   dedicated CPU are covered by the Cloud SQL SLA. Shared-core instances and\n   single-zone instances are not covered by the SLA. These machine types are\n   configured to use a shared-core CPU, and are designed to provide low-cost\n   test and development instances only. Don't use them for production instances.\n\n   https://gcpdiag.dev/rules/cloudsql/BP_EXT/2023_004\n\n"
  },
  {
    "path": "gcpdiag/lint/cloudsql/snapshots/ERR_2023_001.txt",
    "content": "*  cloudsql/ERR/2023_001: Cloud SQL instance should not be in SUSPENDED state\n   - https://sqladmin.googleapis.com/v1/projects/gcpdiag-cloudsql1-aaaa/instances/sql1 [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/cloudsql/snapshots/SEC_2023_001.txt",
    "content": "*  cloudsql/SEC/2023_001: Cloud SQL is not publicly accessible.\n   - https://sqladmin.googleapis.com/v1/projects/gcpdiag-cloudsql1-aaaa/instances/sql1 [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/cloudsql/snapshots/WARN_2022_001.txt",
    "content": "*  cloudsql/WARN/2022_001: Cloud SQL is not using Docker bridge network.\n   - https://sqladmin.googleapis.com/v1/projects/gcpdiag-cloudsql1-aaaa/instances/sql1 [FAIL]\n     sql1 is inside of Docker bridge network\n\n   The IP range 172.17.0.0/16 is reserved for the Docker bridge network. Any\n   Cloud SQL instances created with an IP in that range will be unreachable.\n   Connections from any IP within that range to Cloud SQL instances using\n   private IP fail.\n\n   https://gcpdiag.dev/rules/cloudsql/WARN/2022_001\n\n"
  },
  {
    "path": "gcpdiag/lint/cloudsql/snapshots/WARN_2023_002.txt",
    "content": "*  cloudsql/WARN/2023_002: Cloud SQL instance's avg CPU utilization is not over 98% for 6 hours\n   - https://sqladmin.googleapis.com/v1/projects/gcpdiag-cloudsql1-aaaa/instances/sql1 [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/cloudsql/snapshots/WARN_2023_003.txt",
    "content": "*  cloudsql/WARN/2023_003: Cloud SQL instance's memory usage does not exceed 90%\n   - https://sqladmin.googleapis.com/v1/projects/gcpdiag-cloudsql1-aaaa/instances/sql1 [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/cloudsql/warn_2022_001_docker_bridge_network.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Cloud SQL is not using Docker bridge network.\n\nThe IP range 172.17.0.0/16 is reserved for the Docker bridge network.\nAny Cloud SQL instances created with an IP in that range will be unreachable.\nConnections from any IP within that range to Cloud SQL instances using private\nIP fail.\n\"\"\"\n\nimport ipaddress\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, cloudsql\n\nDOCKER_BRIDGE_NETWORK = ipaddress.ip_network('172.17.0.0/16')\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  if not apis.is_enabled(context.project_id, 'sqladmin'):\n    report.add_skipped(None, 'sqladmin is disabled')\n    return\n\n  instances = cloudsql.get_instances(context)\n\n  if not instances:\n    report.add_skipped(None, 'no CloudSQL instances found')\n    return\n\n  for instance in instances:\n    if any(_is_docker_bridge_ip(ip) for ip in instance.ip_addresses):\n      report.add_failed(instance,\n                        f'{instance.name} is inside of Docker bridge network')\n    else:\n      report.add_ok(instance)\n\n\ndef _is_docker_bridge_ip(ip: ipaddress.IPv4Address) -> bool:\n  return ip in DOCKER_BRIDGE_NETWORK\n"
  },
  {
    "path": "gcpdiag/lint/cloudsql/warn_2023_002_high_cpu_usage.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Cloud SQL instance's avg CPU utilization is not over 98% for 6 hours\n\nIf CPU utilization is over 98% for six hours, your instance is not properly\nsized for your workload, and it is not covered by the SLA.\n\"\"\"\nfrom typing import Dict\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, cloudsql, monitoring\n\nCPU_USAGE_THRESHOLD = 0.98\n\n_query_results_per_project_id: Dict[str, monitoring.TimeSeriesCollection] = {}\ninstances_by_project = {}\n\n\ndef prefetch_rule(context: models.Context):\n  instances_by_project[context.project_id] = cloudsql.get_instances(context)\n\n  if not instances_by_project[context.project_id]:\n    return\n\n  _query_results_per_project_id[context.project_id] = \\\n    monitoring.query(\n      context.project_id,\n      f\"\"\"\n      fetch cloudsql_database\n       | metric 'cloudsql.googleapis.com/database/cpu/utilization'\n       | group_by 6h, [value_utilization_mean: mean(value.utilization)]\n       | every 5m\n       | filter val() >= {CPU_USAGE_THRESHOLD}\n      \"\"\")\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  if not apis.is_enabled(context.project_id, 'sqladmin'):\n    report.add_skipped(None, 'sqladmin is disabled')\n    return\n\n  instances = instances_by_project[context.project_id]\n\n  if not instances:\n    report.add_skipped(None, 'no CloudSQL instances found')\n    return\n\n  overloaded_instances = set()\n\n  for ts in _query_results_per_project_id[context.project_id].values():\n    try:\n      # project_id:instance_name\n      full_name = get_path(ts, ('labels', 'resource.database_id'))\n      overloaded_instances.add(full_name.split(':')[1])\n    except (KeyError, IndexError):\n      continue\n\n  for instance in instances:\n    if instance.name in overloaded_instances:\n      report.add_failed(instance)\n    else:\n      report.add_ok(instance)\n"
  },
  {
    "path": "gcpdiag/lint/cloudsql/warn_2023_003_high_mem_usage.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Cloud SQL instance's memory usage does not exceed 90%\n\nIf you have less than 10% memory in database/memory/components.cache and\ndatabase/memory/components.free combined, the risk of an OOM event is high.\n\"\"\"\nfrom typing import Dict\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import config, lint, models\nfrom gcpdiag.queries import apis, cloudsql, monitoring\n\nMEM_USAGE_THRESHOLD = 90  # 0 ~ 100 scale\n\n_query_results_per_project_id: Dict[str, monitoring.TimeSeriesCollection] = {}\ninstances_by_project = {}\n\n\ndef prefetch_rule(context: models.Context):\n  instances_by_project[context.project_id] = cloudsql.get_instances(context)\n\n  if not instances_by_project[context.project_id]:\n    return\n\n  within_str = 'within %dd, d\\'%s\\'' % (config.get('within_days'),\n                                        monitoring.period_aligned_now(60))\n\n  _query_results_per_project_id[context.project_id] = \\\n    monitoring.query(\n      context.project_id,\n      f\"\"\"\n      fetch cloudsql_database\n        | metric 'cloudsql.googleapis.com/database/memory/components'\n        | group_by 6h, [value_components_max: max(value.components)]\n        | filter metric.component = 'Usage'\n        | every 6h\n        | filter val() >= {MEM_USAGE_THRESHOLD}\n        | {within_str}\n      \"\"\")\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  if not apis.is_enabled(context.project_id, 'sqladmin'):\n    report.add_skipped(None, 'sqladmin is disabled')\n    return\n\n  instances = instances_by_project[context.project_id]\n\n  if not instances:\n    report.add_skipped(None, 'no CloudSQL instances found')\n    return\n\n  overloaded_instances = set()\n\n  for ts in _query_results_per_project_id[context.project_id].values():\n    try:\n      # project_id:instance_name\n      full_name = get_path(ts, ('labels', 'resource.database_id'))\n      overloaded_instances.add(full_name.split(':')[1])\n    except (KeyError, IndexError):\n      continue\n\n  for instance in instances:\n    if instance.name in overloaded_instances:\n      report.add_failed(instance)\n    else:\n      report.add_ok(instance)\n"
  },
  {
    "path": "gcpdiag/lint/command.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"gcpdiag lint command.\"\"\"\n\nimport argparse\nimport importlib\nimport logging\nimport pkgutil\nimport re\nimport sys\nfrom typing import List, Optional\n\nfrom google.auth import exceptions\n\nfrom gcpdiag import config, hooks, lint, models, utils\nfrom gcpdiag.lint.output import (api_output, csv_output, json_output,\n                                 terminal_output)\nfrom gcpdiag.queries import apis, crm, gce, kubectl\n\n\nclass ParseMappingArg(argparse.Action):\n  \"\"\"Takes a string argument and parse argument\"\"\"\n\n  def __call__(self, parser, namespace, values, option_string):\n    if values:\n      if values[0] == '{' and values[-1] == '}':\n        values = values[1:-1]\n      values = re.split('[ ,]', values)\n      parsed_dict = {}\n      for value in values:\n        if value:\n          try:\n            k, v = re.split('[:=]', value)\n            parsed_dict[k] = v\n          except ValueError:\n            parser.error(\n                f'argument {option_string} expected key:value, received {value}'\n            )\n    setattr(namespace, self.dest, parsed_dict)\n\n\ndef _flatten_multi_arg(arg_list):\n  \"\"\"Flatten a list of comma-separated values, like:\n  ['a', 'b, c'] -> ['a','b','c']\n  \"\"\"\n  for arg in arg_list:\n    yield from re.split(r'\\s*,\\s*', arg)\n\n\ndef init_args_parser():\n  parser = argparse.ArgumentParser(\n      description='Run diagnostics in GCP projects.', prog='gcpdiag lint')\n\n  parser.add_argument(\n      '--auth-adc',\n      help='Authenticate using Application Default Credentials (default)',\n      action='store_true')\n\n  parser.add_argument(\n      '--auth-key',\n      help='Authenticate using a service account private key file',\n      metavar='FILE')\n\n  parser.add_argument('--auth-oauth',\n                      help=argparse.SUPPRESS,\n                      action='store_true')\n\n  parser.add_argument('--universe-domain',\n                      type=str,\n                      default=config.get('universe_domain'),\n                      help='Domain name of APIs')\n\n  parser.add_argument('--project',\n                      metavar='P',\n                      required=True,\n                      help='Project ID of project to inspect')\n\n  parser.add_argument(\n      '--name',\n      nargs='+',\n      metavar='n',\n      help='Resource Name(s) to inspect (e.g.: bastion-host,prod-*)')\n\n  parser.add_argument(\n      '--location',\n      nargs='+',\n      metavar='R',\n      help=\n      'Valid GCP region/zone to scope inspection (e.g.: us-central1-a,us-central1)'\n  )\n\n  parser.add_argument(\n      '--label',\n      action=ParseMappingArg,\n      metavar='key:value',\n      help=(\n          'One or more resource labels as key-value pair(s) to scope inspection '\n          '(e.g.: env:prod, type:frontend or env=prod type=frontend)'))\n\n  parser.add_argument(\n      '--billing-project',\n      metavar='P',\n      help='Project used for billing/quota of API calls done by gcpdiag '\n      '(default is the inspected project, requires '\n      '\\'serviceusage.services.use\\' permission)')\n\n  parser.add_argument('--show-skipped',\n                      help='Show skipped rules',\n                      action='store_true',\n                      default=config.get('show_skipped'))\n\n  parser.add_argument('--hide-skipped',\n                      help=argparse.SUPPRESS,\n                      action='store_false',\n                      dest='show_skipped')\n\n  parser.add_argument('--hide-ok',\n                      help='Hide rules with result OK',\n                      action='store_true',\n                      default=config.get('hide_ok'))\n\n  parser.add_argument('--show-ok',\n                      help=argparse.SUPPRESS,\n                      action='store_false',\n                      dest='hide_ok')\n\n  parser.add_argument(\n      '--enable-gce-serial-buffer',\n      help='Fetch serial port one output directly from the Compute API. '\n      'Use this flag when not exporting serial port output to cloud logging.',\n      action='store_true',\n      dest='enable_gce_serial_buffer')\n\n  parser.add_argument(\n      '--include',\n      help=('Include rule pattern (e.g.: `gke`, `gke/*/2021*`). '\n            'Multiple pattern can be specified (comma separated, '\n            'or with multiple arguments)'),\n      action='append')\n\n  parser.add_argument('--exclude',\n                      help=('Exclude rule pattern (e.g.: `BP`, `*/*/2022*`)'),\n                      action='append')\n\n  parser.add_argument('--include-extended',\n                      help=('Include extended rules. Additional rules might '\n                            'generate false positives (default: False)'),\n                      default=config.get('include_extended'),\n                      action='store_true')\n\n  parser.add_argument('--experimental-enable-async-rules',\n                      help='Run experimental async rules (default: False)',\n                      default=config.get('experimental_enable_async_rules'),\n                      action='store_true')\n\n  parser.add_argument('-v',\n                      '--verbose',\n                      action='count',\n                      default=config.get('verbose'),\n                      help='Increase log verbosity')\n\n  parser.add_argument('--within-days',\n                      metavar='D',\n                      type=int,\n                      help=(f'How far back to search logs and metrics (default:'\n                            f\" {config.get('within_days')} days)\"),\n                      default=config.get('within_days'))\n\n  parser.add_argument('--config',\n                      metavar='FILE',\n                      type=str,\n                      help='Read configuration from FILE')\n\n  parser.add_argument('--logging-ratelimit-requests',\n                      metavar='R',\n                      type=int,\n                      help=('Configure rate limit for logging queries (default:'\n                            f\" {config.get('logging_ratelimit_requests')})\"))\n\n  parser.add_argument(\n      '--logging-ratelimit-period-seconds',\n      metavar='S',\n      type=int,\n      help=('Configure rate limit period for logging queries (default:'\n            f\" {config.get('logging_ratelimit_period_seconds')} seconds)\"))\n\n  parser.add_argument('--logging-page-size',\n                      metavar='P',\n                      type=int,\n                      help=('Configure page size for logging queries (default:'\n                            f\" {config.get('logging_page_size')})\"))\n\n  parser.add_argument(\n      '--logging-fetch-max-entries',\n      metavar='E',\n      type=int,\n      help=('Configure max entries to fetch by logging queries (default:'\n            f\" {config.get('logging_fetch_max_entries')})\"))\n\n  parser.add_argument(\n      '--logging-fetch-max-time-seconds',\n      metavar='S',\n      type=int,\n      help=('Configure timeout for logging queries (default:'\n            f\" {config.get('logging_fetch_max_time_seconds')} seconds)\"))\n\n  parser.add_argument(\n      '--output',\n      metavar='FORMATTER',\n      default='terminal',\n      type=str,\n      help=(\n          'Format output as one of [terminal, json, csv] (default: terminal)'))\n\n  parser.add_argument('--interface',\n                      metavar='FORMATTER',\n                      default=config.get('interface'),\n                      type=str,\n                      help='What interface as one of [cli, api] (default: cli)')\n\n  parser.add_argument('--reason',\n                      type=str,\n                      default=config.get('reason'),\n                      help='The reason for running gcpdiag')\n  return parser\n\n\ndef _parse_rule_pattern(\n    patterns: Optional[List[str]],) -> Optional[List[lint.LintRulesPattern]]:\n  if patterns:\n    rules = []\n    for arg in _flatten_multi_arg(patterns):\n      try:\n        rules.append(lint.LintRulesPattern(arg))\n      except ValueError as e:\n        print(f\"ERROR: can't parse rule pattern: {arg}\", file=sys.stderr)\n        raise e from None\n    return rules\n  return None\n\n\ndef _load_repository_rules(repo: lint.LintRuleRepository):\n  \"\"\"Find and load all lint rule modules dynamically\"\"\"\n  for module in pkgutil.walk_packages(\n      lint.__path__,  # type: ignore\n      lint.__name__ + '.'):\n    if module.ispkg:\n      try:\n        m = importlib.import_module(f'{module.name}')\n        repo.load_rules(m)\n      except ImportError as err:\n        print(f\"ERROR: can't import module: {err}\", file=sys.stderr)\n        continue\n\n\ndef _get_output_constructor(output_parameter_value, interface):\n  if interface == 'api':\n    return api_output.APIOutput\n  elif output_parameter_value == 'json':\n    return json_output.JSONOutput\n  elif output_parameter_value == 'csv':\n    return csv_output.CSVOutput\n  else:\n    return terminal_output.TerminalOutput\n\n\ndef _initialize_output(output_order):\n  \"\"\"Initialize output formatter.\"\"\"\n  constructor = _get_output_constructor(config.get('output'),\n                                        config.get('interface'))\n  kwargs = {\n      'log_info_for_progress_only': config.get('verbose') == 0,\n      'show_ok': not config.get('hide_ok'),\n      'show_skipped': config.get('show_skipped'),\n  }\n  if config.get('interface') == 'cli':\n    if config.get('output') == 'terminal':\n      kwargs['output_order'] = output_order\n  output = constructor(**kwargs)\n  return output\n\n\ndef create_and_load_repos(\n    include: Optional[List[str]],\n    exclude: Optional[List[str]],\n    load_extended: bool,\n) -> lint.LintRuleRepository:\n  \"\"\"Helper function to initialize the repository and load rules.\"\"\"\n  include_patterns = _parse_rule_pattern(include)\n  exclude_patterns = _parse_rule_pattern(exclude)\n\n  repo = lint.LintRuleRepository(\n      load_extended=load_extended,\n      run_async=config.get('experimental_enable_async_rules'),\n      exclude=exclude_patterns,\n      include=include_patterns,\n  )\n  _load_repository_rules(repo)\n  return repo\n\n\ndef run_rules_for_context(context: models.Context,\n                          repo: lint.LintRuleRepository):\n  \"\"\"Core function to execute lint rules against a context.\"\"\"\n  repo.run_rules(context)\n\n\ndef run(argv) -> int:\n  \"\"\"Run the overall command line gcpdiag lint command.\n\n  Parsing the sys.argv and sys.exit on error for failed.\n\n  Args:\n    argv: Command line arguments.\n\n  Returns:\n    The exit code of the command.\n  \"\"\"\n  del argv\n\n  try:\n    # 1. Initialize argument parser and configuration\n    parser = init_args_parser()\n    args = parser.parse_args()\n    hooks.set_lint_args_hook(args)\n    config.init(vars(args), terminal_output.is_cloud_shell())\n    config.set_project_id(args.project)\n\n    # 2. Perform CLI-specific validation checks\n    try:\n      crm.get_project(args.project)\n      apis.verify_access(args.project)\n    except (utils.GcpApiError, exceptions.GoogleAuthError) as e:\n      print(f'[ERROR]:{e}. exiting program', file=sys.stderr)\n      sys.exit(2)\n\n    # 3. Create the linting context\n    context = models.Context(\n        project_id=args.project,\n        locations=args.location,\n        resources=args.name,\n        labels=args.label,\n    )\n\n    # 4. Create and load the rule repository\n    repo = create_and_load_repos(\n        include=config.get('include'),\n        exclude=config.get('exclude'),\n        load_extended=config.get('include_extended'),\n    )\n\n    # 5. Set up logging and output for the terminal\n    output_order = sorted(str(r) for r in repo.rules_to_run)\n    output = _initialize_output(output_order=output_order)\n    repo.result.add_result_handler(output.result_handler)\n    logging_handler = output.get_logging_handler()\n    logger = logging.getLogger()\n    logger.handlers = []\n    logger.addHandler(logging_handler)\n    if config.get('verbose') >= 2:\n      logger.setLevel(logging.DEBUG)\n    else:\n      logger.setLevel(logging.INFO)\n    if config.get('verbose') == 0:\n      gac_http_logger = logging.getLogger('apiclient.http')\n      gac_http_logger.setLevel(logging.ERROR)\n\n    if config.get('auth_oauth'):\n      logger.error(\n          'The oauth authentication has been deprecated and does not work'\n          ' anymore. Consider using other authentication methods.')\n      raise ValueError('oauth authentication is no longer supported')\n\n    # 6. Display CLI Banner\n    output.display_banner()\n    output.display_header(context)\n\n    # Warn user to fallback on serial logs buffer if project isn't storing in\n    # cloud logging\n    if (not gce.is_project_serial_port_logging_enabled(context.project_id) and\n        not config.get('enable_gce_serial_buffer')):\n      # Only print the warning if GCE is enabled in the first place\n      if apis.is_enabled(context.project_id, 'compute'):\n        logger.warning(\n            '''Serial output to cloud logging maybe disabled for certain GCE instances.\n            Fallback on serial output buffers by using flag --enable-gce-serial-buffer \\n'''\n        )\n\n    # 7. Run the rules\n    run_rules_for_context(context, repo)\n\n    # 8. Display CLI Footer and clean up\n    output.display_footer(repo.result)\n    hooks.post_lint_hook(repo.result.get_rule_statuses())\n    kubectl.clean_up()\n\n    # 9. Exit with the correct status code\n    sys.exit(2 if repo.result.any_failed else 0)\n\n  except (utils.GcpApiError, exceptions.GoogleAuthError) as e:\n    print(f'[ERROR]:{e}. exiting program', file=sys.stderr)\n    sys.exit(2)\n"
  },
  {
    "path": "gcpdiag/lint/command_test.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test code in command.py.\"\"\"\n\nimport sys\nfrom unittest import TestCase, mock\n\nfrom gcpdiag import lint\nfrom gcpdiag.lint import command\nfrom gcpdiag.queries import apis, apis_stub\n\nMUST_HAVE_MODULES = {\n    'gke', 'gcb', 'gae', 'gce', 'iam', 'apigee', 'composer', 'datafusion',\n    'dataproc', 'gcs', 'vpc', 'lb', 'gcf'\n}\n\n\n@mock.patch('sys.exit', side_effect=lambda x: None)\n@mock.patch.object(apis, 'get_user_email', return_value='someone@company.com')\n@mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)\nclass TestCommand(TestCase):\n  \"\"\"Unit tests for overall command execution.\"\"\"\n\n  def test_run(self, mock_email, mock_api):\n    # pylint: disable=W0613\n\n    sys.argv = [\n        'gcpdiag lint',\n        '--project',\n        '12340001',\n        '--include',\n        'dataproc/BP/2021_001',\n    ]\n    command.run([])\n    assert True\n\n\nclass Test(TestCase):\n  \"\"\"Unit tests for command.\"\"\"\n\n  # pylint: disable=protected-access\n  def test_flatten_multi_arg(self):\n    assert not list(command._flatten_multi_arg([]))\n    assert list(command._flatten_multi_arg(['*BP*'])) == ['*BP*']\n    assert list(command._flatten_multi_arg(['*BP*',\n                                            '*ERR*'])) == ['*BP*', '*ERR*']\n    assert list(command._flatten_multi_arg(['*BP*,*ERR*'])) == ['*BP*', '*ERR*']\n    assert list(command._flatten_multi_arg(['*BP*, *ERR*'\n                                           ])) == ['*BP*', '*ERR*']\n\n  # pylint: disable=protected-access\n  def test_init_args_parser(self):\n    parser = command.init_args_parser()\n    args = parser.parse_args(['--project', 'myproject'])\n    assert args.project == 'myproject'\n    assert args.billing_project is None\n    assert args.auth_adc is False\n    assert args.auth_key is None\n    assert args.verbose == 0\n    assert args.within_days == 3\n    assert args.include is None\n    assert args.exclude is None\n    assert args.include_extended is False\n    assert args.config is None\n    assert args.show_skipped is False\n    assert args.hide_ok is False\n    assert args.logging_ratelimit_requests is None\n    assert args.logging_ratelimit_period_seconds is None\n    assert args.logging_page_size is None\n    assert args.logging_fetch_max_entries is None\n    assert args.logging_fetch_max_time_seconds is None\n    assert args.output == 'terminal'\n    assert args.enable_gce_serial_buffer is False\n\n  # pylint: disable=protected-access\n  def test_provided_init_args_parser(self):\n    parser = command.init_args_parser()\n    args = parser.parse_args(['--project', 'myproject', '--include', '*ERR*'])\n    assert args.include == ['*ERR*']\n    args = parser.parse_args(['--project', 'myproject', '--exclude', '*BP*'])\n    assert args.exclude == ['*BP*']\n    args = parser.parse_args(['--project', 'myproject', '--include-extended'])\n    assert args.include_extended is True\n    args = parser.parse_args(\n        ['--project', 'myproject', '--config', '/path/to/file'])\n    assert args.config == '/path/to/file'\n\n  # pylint: disable=protected-access\n  def test_load_repository_rules(self):\n    repo = lint.LintRuleRepository()\n    command._load_repository_rules(repo)\n    modules = {r.product for r in repo.rules_to_run}\n    assert MUST_HAVE_MODULES.issubset(modules)\n\n  def test_create_and_load_repos(self):\n    \"\"\"Test the public repo creation function.\"\"\"\n    repo = command.create_and_load_repos(\n        include=['gke/*'],\n        exclude=['iam/*'],\n        load_extended=True,\n    )\n    self.assertIsInstance(repo, lint.LintRuleRepository)\n    # Check if rules are loaded\n    self.assertTrue(any(r.product == 'gke' for r in repo.rules_to_run))\n    # Check if excluded rules are not present\n    self.assertFalse(any(r.product == 'iam' for r in repo.rules_to_run))\n\n  def test_parse_label(self):\n    parser = command.init_args_parser()\n    # Test with a single value\n    args = parser.parse_args(['--project', 'x', '--label', 'key=value'])\n    assert args.label == {'key': 'value'}\n\n    # Test with multiple values\n    args = parser.parse_args(\n        ['--project', 'x', '--label', 'key1:value1,  key2=value2'])\n    assert args.label == {'key1': 'value1', 'key2': 'value2'}\n\n    # Test with curly braces\n    args = parser.parse_args(\n        ['--project', 'x', '--label', '{ key1=value1, key2=value2 }'])\n    assert args.label == {'key1': 'value1', 'key2': 'value2'}\n\n    # Test with mapping separated by commas\n    args = parser.parse_args(\n        ['--project', 'x', '--label', 'key1=value1,key2:value2'])\n    assert args.label == {'key1': 'value1', 'key2': 'value2'}\n\n    # Test with values separated by spaces\n    args = parser.parse_args(\n        ['--project', 'x', '--label', '  key1=value1 key2:value2  '])\n    assert args.label == {'key1': 'value1', 'key2': 'value2'}\n\n    # exit if invalid --label value is provided.\n    try:\n      args = parser.parse_args(['--project', 'x', '--label', 'invalid'])\n    except SystemExit as e:\n      assert e.code == 2\n"
  },
  {
    "path": "gcpdiag/lint/composer/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/lint/composer/bp_2023_001_debug_logging_level.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Cloud Composer logging level is set to INFO\n\nLogging level of Airflow may have been set to DEBUG for troubleshooting\npurposes. However, it is highly recommended to revert the logging level\nback to INFO after the troubleshooting is completed. Leaving the logging\nlevel at DEBUG might increase costs associated with Cloud Storage. Logging\nlevels higher than INFO (WARNING, ERROR) could suppress logs that are useful\nto troubleshooting, so it also not recommended.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, composer\n\nenvs_by_project = {}\n\n\ndef _check_info_logging_level(config) -> bool:\n  # logging section in airflow2, core section in airflow1\n  return config.get('logging-logging_level', 'INFO') == 'INFO' or \\\n         config.get('core-logging_level', 'INFO') == 'INFO'\n\n\ndef prefetch_rule(context: models.Context):\n  envs_by_project[context.project_id] = composer.get_environments(context)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  if not apis.is_enabled(context.project_id, 'composer'):\n    report.add_skipped(None, 'composer is disabled')\n    return\n\n  envs = envs_by_project[context.project_id]\n\n  if not envs:\n    report.add_skipped(None, 'no Cloud Composer environments found')\n    return\n\n  for env in envs:\n    if not _check_info_logging_level(env.airflow_config_overrides):\n      report.add_failed(env)\n    else:\n      report.add_ok(env)\n"
  },
  {
    "path": "gcpdiag/lint/composer/bp_2023_002_parallelism.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Cloud Composer's worker concurrency is not limited by parallelism parameter\n\nThe parallelism defines the maximum number of task instances that can run\nconcurrently in Airflow. Generally, the parameter should be equal or higher than\nthe product of maximum number of workers and worker_concurrency. Otherwise,\nresources in workers could not be fully-utilized.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, composer\n\nenvs_by_project = {}\n\n\ndef prefetch_rule(context: models.Context):\n  envs_by_project[context.project_id] = composer.get_environments(context)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  if not apis.is_enabled(context.project_id, 'composer'):\n    report.add_skipped(None, 'composer is disabled')\n    return\n\n  envs = envs_by_project[context.project_id]\n\n  if not envs:\n    report.add_skipped(None, 'no Cloud Composer environments found')\n    return\n\n  for env in envs:\n    if not env.is_composer2:\n      report.add_skipped(env, 'not applicable for composer1')\n      continue\n\n    if env.parallelism < (env.worker_max_count * env.worker_concurrency):\n      report.add_failed(env)\n    else:\n      report.add_ok(env)\n"
  },
  {
    "path": "gcpdiag/lint/composer/bp_2023_003_statsd.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Cloud Composer does not override the StatsD configurations\n\nMetrics from Cloud Composer like scheduler heartbeat, number of completed tasks\nand pods are collected via the StatsD daemon. If you override the default StatsD\nconfiguration, it will cause missing metrics in the monitoring pages and\ncomponents including airflow-scheduler that depend on Statsd metrics for\nhealthcheck will be marked as unhealthy.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, composer\n\nenvs_by_project = {}\n\n\ndef prefetch_rule(context: models.Context):\n  envs_by_project[context.project_id] = composer.get_environments(context)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  if not apis.is_enabled(context.project_id, 'composer'):\n    report.add_skipped(None, 'composer is disabled')\n    return\n\n  envs = envs_by_project[context.project_id]\n\n  if not envs:\n    report.add_skipped(None, 'no Cloud Composer environments found')\n    return\n\n  for env in envs:\n    if any(\n        key.startswith('metrics-statsd_')\n        for key in env.airflow_config_overrides.keys()):\n      report.add_failed(env)\n    else:\n      report.add_ok(env)\n"
  },
  {
    "path": "gcpdiag/lint/composer/bp_ext_2023_001_number_of_schedulers.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Cloud Composer has no more than 2 Airflow schedulers\n\nIn general, extra schedulers more than 2 consumes resources of your environment\nwithout contributing to overall performance. We recommend starting with two\nschedulers and then monitoring the performance of your environment.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, composer\n\nenvs_by_project = {}\n\n\ndef prefetch_rule(context: models.Context):\n  envs_by_project[context.project_id] = composer.get_environments(context)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  if not apis.is_enabled(context.project_id, 'composer'):\n    report.add_skipped(None, 'composer is disabled')\n    return\n\n  envs = envs_by_project[context.project_id]\n\n  if not envs:\n    report.add_skipped(None, 'no Cloud Composer environments found')\n    return\n\n  for env in envs:\n    if env.num_schedulers > 2:\n      report.add_failed(\n          env, f'{env.name} is configured more than 2 Airflow schedulers'\n          ' (number_of_schedulers: {env.num_schedulers})')\n    else:\n      report.add_ok(env)\n"
  },
  {
    "path": "gcpdiag/lint/composer/bp_ext_2023_002_xss_vulnerable_versions.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Cloud Composer has higher version than airflow-2.2.3\n\nAirflow UI in Airflow 2.2.3 or earlier versions is vulnerable to CVE-2021-45229.\n\"Trigger DAG with config\" screen was susceptible to XSS attacks through the\norigin query argument. Highly recommended to upgrade to the latest Cloud Composer\nversion that supports Airflow 2.2.5.\n\"\"\"\n\nfrom packaging import version\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, composer\n\nenvs_by_project = {}\n\n\ndef prefetch_rule(context: models.Context):\n  envs_by_project[context.project_id] = composer.get_environments(context)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  if not apis.is_enabled(context.project_id, 'composer'):\n    report.add_skipped(None, 'composer is disabled')\n    return\n\n  envs = envs_by_project[context.project_id]\n\n  if not envs:\n    report.add_skipped(None, 'no Cloud Composer environments found')\n    return\n\n  xss_fixed_version = version.parse('2.2.5')\n\n  for env in envs:\n    if version.parse(env.airflow_version) < xss_fixed_version:\n      report.add_failed(\n          env, f'{env.name} image is {env.image_version}, which is vulnerable '\n          'to XSS attack. Upgrade to the latest Cloud Composer version')\n    else:\n      report.add_ok(env)\n"
  },
  {
    "path": "gcpdiag/lint/composer/composer_rules_snapshot_test.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\" Generalize rule snapshot testing \"\"\"\n\nfrom gcpdiag.lint import composer, snapshot_test_base\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = composer\n  project_id = 'gcpdiag-composer1-aaaa'\n"
  },
  {
    "path": "gcpdiag/lint/composer/err_2022_001_composer_p4sa_permissions.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Composer Service Agent permissions\n\nVerify that the Cloud Composer Service Agent account exists and has\nthe Cloud Composer Service Agent role on the project.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, iam\n\nSA = 'service-{project_number}@cloudcomposer-accounts.iam.gserviceaccount.com'\nROLE = 'roles/composer.serviceAgent'\n\nprojects = {}\npolicy_by_project = {}\n\n\ndef prefetch_rule(context: models.Context):\n  projects[context.project_id] = crm.get_project(context.project_id)\n  policy_by_project[context.project_id] = iam.get_project_policy(context)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  if not apis.is_enabled(context.project_id, 'composer'):\n    report.add_skipped(None, 'composer is disabled')\n    return\n\n  project = projects[context.project_id]\n  service_account = SA.format(project_number=project.number)\n\n  project_policy = policy_by_project[context.project_id]\n  if not project_policy.has_role_permissions(\n      f'serviceAccount:{service_account}', ROLE):\n    report.add_failed(project, (f'service account: {service_account}\\n'\n                                f'missing role: {ROLE}'))\n    return\n\n  report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/composer/err_2022_002_composer_sa_permissions.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Composer Environment Service Account permissions\n\nVerify that the Composer Environment Service Account exists and has\nthe Composer Worker role on the project.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import composer, iam\n\n# `composer.worker` role has broader permissions than `editor`, but any of them\n# is sufficient to run a composer environment\nROLE = 'roles/composer.worker'\nALT_ROLES = ['roles/editor']\n\n# `iam.serviceAccountUser` is only required for private IP environments\nPRIVATE_IP_ROLE = 'roles/iam.serviceAccountUser'\n\nenvironments_by_project = {}\n\npolicy_by_project = {}\npolicy_by_service_account = {}\n\n\ndef prefetch_rule(context: models.Context):\n  environments_by_project[context.project_id] = composer.get_environments(\n      context)\n\n  policy_by_project[context.project_id] = iam.get_project_policy(context)\n  for environment in environments_by_project[context.project_id]:\n    # Service account policy is needed for private IP envs only\n    if not environment.is_private_ip():\n      continue\n\n    if environment.service_account in policy_by_service_account:\n      continue\n\n    policy_by_service_account[\n        environment.service_account] = iam.get_service_account_iam_policy(\n            context, environment.service_account)\n\n\ndef run_rule(context: models.Context,\n             report: lint.LintReportRuleInterface) -> None:\n  environments = environments_by_project[context.project_id]\n  if len(environments) == 0:\n    report.add_skipped(None, 'no composer environments found')\n    return\n\n  for environment in environments:\n    has_failed = False\n    service_account = environment.service_account\n\n    project_policy = policy_by_project[environment.project_id]\n    for role in [ROLE] + ALT_ROLES:\n      if project_policy.has_role_permissions(\n          f'serviceAccount:{service_account}', role):\n        break\n    else:\n      has_failed = True\n      # `composer.worker` is preferred, using it in error messages\n      report.add_failed(environment, (f'service account: {service_account}\\n'\n                                      f'missing role: {ROLE}'))\n\n    if environment.is_private_ip():\n      service_account_policy = policy_by_service_account[\n          environment.service_account]\n      for scope in (service_account_policy, project_policy):\n        if scope.has_role_permissions(f'serviceAccount:{service_account}',\n                                      PRIVATE_IP_ROLE):\n          break\n      else:\n        has_failed = True\n        report.add_failed(environment, (f'service account: {service_account}\\n'\n                                        f'missing role: {PRIVATE_IP_ROLE}'))\n\n    if not has_failed:\n      report.add_ok(environment)\n"
  },
  {
    "path": "gcpdiag/lint/composer/err_2023_001_composer_not_in_error_state.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Cloud Composer is not in ERROR state\n\nThe ERROR state indicates that the environment has encountered an error and\ncannot be used. Creating/updating environment through misconfigured Terraform\nconfig, errors in PyPI Package or etc could be the cause of the issue.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, composer\n\nenvs_by_project = {}\n\n\ndef prefetch_rule(context: models.Context):\n  envs_by_project[context.project_id] = composer.get_environments(context)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  if not apis.is_enabled(context.project_id, 'composer'):\n    report.add_skipped(None, 'composer is disabled')\n    return\n\n  envs = envs_by_project[context.project_id]\n\n  if not envs:\n    report.add_skipped(None, 'no Cloud Composer environments found')\n    return\n\n  for env in envs:\n    if env.state == 'ERROR':\n      report.add_failed(env)\n    else:\n      report.add_ok(env)\n"
  },
  {
    "path": "gcpdiag/lint/composer/err_2023_002_verify_ip_range.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Cloud Composer private IP Cluster non-RFC1918 IP range.\n\nPrivate IP cluster (Pods, Services) Should use ALLOWED IP RANGES\nto create the environment.Make sure you are using ALLOWED IP RANGES\nduring environment Creation.\n\"\"\"\n\nimport re\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nlogs_by_project = {}\n\nMATCH_STR1 = (\n    'type.googleapis.com/google.cloud.orchestration.airflow.service.v1.CreateEnvironmentRequest'\n)\nMATCH_STR2 = (\n    'type.googleapis.com/google.cloud.orchestration.'\\\n    'airflow.service.v1beta1.CreateEnvironmentRequest'\n)\npattern = (\n    r'(Cluster|Services|GKE master) CIDR range (\\d+\\.\\d+\\.\\d+\\.\\d+/\\d+) is not'\n    r' within allowed ranges.')\nip_pattern = r'(\\d+\\.\\d+\\.\\d+\\.\\d+/\\d+)'\n\nFILTER_1 = [f'protoPayload.request.@type={MATCH_STR1} OR {MATCH_STR2}']\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='cloud_composer_environment',\n      log_name='log_id(\"cloudaudit.googleapis.com%2Factivity\")',\n      filter_str=' AND '.join(FILTER_1),\n  )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n\n  project = crm.get_project(context.project_id)\n\n  if not apis.is_enabled(context.project_id, 'composer'):\n    report.add_skipped(None, 'composer is disabled')\n    return\n\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(None, 'logging api is disabled')\n    return\n\n  # Log entries\n  log_entries = logs_by_project.get(context.project_id)\n\n  if not log_entries:\n    report.add_skipped(None, 'No log entries found')\n    return\n\n  project_ok_flag = True\n\n  # Start Iteration from the latest log entries\n  for log_entry in reversed(log_entries.entries):\n    # Check for the not allowed IP Range Error Entry\n    if (log_entry['severity'] == 'ERROR' and\n        log_entry['protoPayload']['status']['code'] == 3):\n      message_body = log_entry['protoPayload']['status']['message']\n      match = re.search(pattern, message_body)\n      if not match:\n        continue\n      else:\n        matches = re.findall(ip_pattern, message_body)\n        ip_ranges = set(matches)\n        report.add_failed(\n            project,\n            f'{ip_ranges} outsides the ALLOWED IP RANGE \\n'\n            'Try Creating private IP cluster using ALLOWED IP RANGES',\n        )\n      project_ok_flag = False\n      break\n\n    # Check for the latest successful environment creation\n    if log_entry['severity'] == 'NOTICE':\n      report.add_ok(project)\n      return\n\n  if project_ok_flag:\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/composer/err_2023_003_dag_timeout_killing.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Cloud Composer Dags are not getting timed out by the Dag Processor\n\nSometimes we can see dag processor logs with task time out error. \"Processor\nfor/home/airflow/gcs/dags/exampledagname.py with PID 12345678 started at\n<DataTime>has timed out, killing it.\" In an ideal composer environment this\nerror shouldnot occur as it is a cause of scheduler resource constraint and\ncomplex DAGparsing implementation.\n\"\"\"\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, composer, logs\n\nMATCH_STR = 'has timed out, killing it.'\nLOG_FILTER = ['severity=ERROR', f'textPayload:\"{MATCH_STR}\"']\nlogs_by_project = {}\nenvs_by_project = {}\n\n\ndef prefetch_rule(context: models.Context):\n  envs_by_project[context.project_id] = composer.get_environments(context)\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='cloud_composer_environment',\n      log_name='log_id(\"dag-processor-manager\")',\n      filter_str=' AND '.join(LOG_FILTER),\n  )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  if not apis.is_enabled(context.project_id, 'composer'):\n    report.add_skipped(None, 'composer is disabled')\n    return\n\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(None, 'logging api is disabled')\n    return\n\n  envs = envs_by_project[context.project_id]\n\n  if not envs:\n    report.add_skipped(None, 'no Cloud Composer environments found')\n    return\n\n  sigkilled_envs = set()\n\n  if (logs_by_project.get(context.project_id) and\n      logs_by_project[context.project_id].entries):\n    for log_entry in logs_by_project[context.project_id].entries:\n      # Filter out non-relevant log entries.\n      if log_entry['severity'] != 'ERROR' or MATCH_STR not in log_entry.get(\n          'textPayload', ''):\n        continue\n\n      env_name = get_path(log_entry, ('resource', 'labels', 'environment_name'))\n      sigkilled_envs.add(env_name)\n\n  for env in envs:\n    if env.name in sigkilled_envs:\n      report.add_failed(env)\n    else:\n      report.add_ok(env)\n"
  },
  {
    "path": "gcpdiag/lint/composer/err_2023_004_zombie_detection.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Cloud Composer Dags are not getting zombie error\n\nBased on heartbeat, the Airflow scheduler is able to detect abnormally\nterminated tasks - if they're missing for extended period of time, a task will\nbe detected as a zombie and the similar message will be written in logs.\n\"\"\"\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, composer, logs\n\nMATCH_STR = 'Detected zombie job'\nLOG_FILTER = ['severity=ERROR', f'textPayload:\"{MATCH_STR}\"']\nlogs_by_project = {}\nenvs_by_project = {}\n\n\ndef prefetch_rule(context: models.Context):\n  envs_by_project[context.project_id] = composer.get_environments(context)\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='cloud_composer_environment',\n      log_name='log_id(\"airflow-scheduler\")',\n      filter_str=' AND '.join(LOG_FILTER),\n  )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  if not apis.is_enabled(context.project_id, 'composer'):\n    report.add_skipped(None, 'composer is disabled')\n    return\n\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(None, 'logging api is disabled')\n    return\n\n  envs = envs_by_project[context.project_id]\n\n  if not envs:\n    report.add_skipped(None, 'no Cloud Composer environments found')\n    return\n\n  sigkilled_envs = set()\n\n  if (logs_by_project.get(context.project_id) and\n      logs_by_project[context.project_id].entries):\n    for log_entry in logs_by_project[context.project_id].entries:\n      # Filter out non-relevant log entries.\n      if log_entry['severity'] != 'ERROR' or MATCH_STR not in log_entry.get(\n          'textPayload', ''):\n        continue\n\n      env_name = get_path(log_entry, ('resource', 'labels', 'environment_name'))\n      sigkilled_envs.add(env_name)\n\n  for env in envs:\n    if env.name in sigkilled_envs:\n      report.add_failed(env)\n    else:\n      report.add_ok(env)\n"
  },
  {
    "path": "gcpdiag/lint/composer/err_2023_005_environment_delete_fail_nat_config.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Composer environment deletion not failed due to NAT configuration\n\nHaving Composer automatically create pods and services' secondary IP ranges and\nthen configuring Cloud NAT for the subnet and these ranges makes it so the\nenvironment deletion will fail. Verify a Composer environment deletion attempt\nfailed due to a Cloud NAT configuration\n\"\"\"\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, composer, logs\n\nMATCH_STR_1 = 'Google Compute Engine: The subnetwork resource'\nMATCH_STR_2 = 'is already being used by'\nMATCH_STR_3 = '-Nat'\nMATCH_STR_4 = 'Composer Backend timed out'\n\nMATCH_METHOD = 'google.cloud.orchestration.airflow.service.v1.Environments.DeleteEnvironment'\nFILTER_1 = [\n    'severity=ERROR',\n    ('protoPayload.methodName=\"google.cloud.orchestration.airflow.service.'\n     'v1.Environments.DeleteEnvironment\"'),\n    (f'protoPayload.status.message:((\"{MATCH_STR_1}\" AND \"{MATCH_STR_2}\" AND'\n     f' \"{MATCH_STR_3}\") OR (\"{MATCH_STR_4}\"))'),\n]\n\nlogs_by_project = {}\nenvs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  envs_by_project[context.project_id] = composer.get_environments(context)\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='cloud_composer_environment',\n      log_name='log_id(\"cloudaudit.googleapis.com%2Factivity\")',\n      filter_str=' AND '.join(FILTER_1),\n  )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n\n  if not apis.is_enabled(context.project_id, 'composer'):\n    report.add_skipped(None, 'composer is disabled')\n    return\n\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(None, 'logging api is disabled')\n    return\n\n  envs = envs_by_project[context.project_id]\n\n  if not envs:\n    report.add_skipped(None, 'no Cloud Composer environments found')\n    return\n\n  env_name_set = set()\n\n  if logs_by_project.get(context.project_id) and \\\n     logs_by_project[context.project_id].entries:\n    for log_entry in logs_by_project[context.project_id].entries:\n      # filter out non -relevant entries\n      logging_check_path = get_path(log_entry,\n                                    ('protoPayload', 'status', 'message'),\n                                    default='')\n      if (log_entry['severity'] != 'ERROR' or\n          log_entry['protoPayload']['methodName'] != MATCH_METHOD or\n          (((MATCH_STR_1 not in logging_check_path) or\n            (MATCH_STR_2 not in logging_check_path) or\n            (MATCH_STR_3 not in logging_check_path)) and\n           (MATCH_STR_4 not in logging_check_path))):\n        continue\n      env_name = get_path(log_entry, ('resource', 'labels', 'environment_name'))\n      env_name_set.add(env_name)\n\n  for env in envs:\n    if (env.state == 'ERROR') and (env.name in env_name_set):\n      report.add_failed(env)\n    else:\n      report.add_ok(env)\n"
  },
  {
    "path": "gcpdiag/lint/composer/err_2024_001_no_error_surfaced.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Composer Creation not failed due to 'no error was surfaced' Error.\n\n'no error was surfaced' error when creating a private IP composer\nenvironment. This can happen due to a number of different reasons, possibly\nmissing IAM permissions, misconfigured firewall rules or\ninsufficient/incompatible IP ranges used in GKE clusters.\n\"\"\"\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, composer, logs\n\nMATCH_STR = 'but no error was surfaced'\n\nFILTER_1 = ['severity=ERROR', f'protoPayload.status.message:(\"{MATCH_STR}\")']\n\nlogs_by_project = {}\nenvs_by_project = {}\n\n\ndef prefetch_rule(context: models.Context):\n  envs_by_project[context.project_id] = composer.get_environments(context)\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='cloud_composer_environment',\n      log_name='log_id(\"cloudaudit.googleapis.com%2Factivity\")',\n      filter_str=' AND '.join(FILTER_1),\n  )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  if not apis.is_enabled(context.project_id, 'composer'):\n    report.add_skipped(None, 'composer is disabled')\n    return\n\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(None, 'logging api is disabled')\n    return\n\n  envs = envs_by_project[context.project_id]\n\n  if not envs:\n    report.add_skipped(None, 'no Cloud Composer environments found')\n    return\n\n  env_name_set = set()\n\n  if (logs_by_project.get(context.project_id) and\n      logs_by_project[context.project_id].entries):\n    for log_entry in logs_by_project[context.project_id].entries:\n      # Filter out non-relevant log entries.\n      if log_entry['severity'] != 'ERROR' or MATCH_STR not in get_path(\n          log_entry, ('protoPayload', 'status', 'message'), ''):\n        continue\n      env_name = get_path(log_entry, ('resource', 'labels', 'environment_name'))\n      env_name_set.add(env_name)\n\n  for env in envs:\n    if (env.state == 'ERROR') and (env.name in env_name_set):\n      report.add_failed(env)\n    else:\n      report.add_ok(env)\n"
  },
  {
    "path": "gcpdiag/lint/composer/snapshots/BP_2023_001.txt",
    "content": "*  composer/BP/2023_001: Cloud Composer logging level is set to INFO\n   - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env2 [ OK ]\n   - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env1 [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/composer/snapshots/BP_2023_002.txt",
    "content": "*  composer/BP/2023_002: Cloud Composer's worker concurrency is not limited by parallelism parameter\n   - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env2 [SKIP]\n     not applicable for composer1\n   - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env1 [SKIP]\n     not applicable for composer1\n\n"
  },
  {
    "path": "gcpdiag/lint/composer/snapshots/BP_2023_003.txt",
    "content": "*  composer/BP/2023_003: Cloud Composer does not override the StatsD configurations\n   - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env2 [ OK ]\n   - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env1 [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/composer/snapshots/BP_EXT_2023_001.txt",
    "content": "*  composer/BP_EXT/2023_001: Cloud Composer has no more than 2 Airflow schedulers\n   - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env2 [ OK ]\n   - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env1 [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/composer/snapshots/BP_EXT_2023_002.txt",
    "content": "*  composer/BP_EXT/2023_002: Cloud Composer has higher version than airflow-2.2.3\n   - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env2 [FAIL]\n     env2 image is composer-1.17.10-airflow-1.10.15, which is vulnerable to XSS attack. Upgrade to the latest Cloud Composer version\n   - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env1 [FAIL]\n     env1 image is composer-1.17.10-airflow-1.10.15, which is vulnerable to XSS attack. Upgrade to the latest Cloud Composer version\n\n   Airflow UI in Airflow 2.2.3 or earlier versions is vulnerable to\n   CVE-2021-45229. \"Trigger DAG with config\" screen was susceptible to XSS\n   attacks through the origin query argument. Highly recommended to upgrade to\n   the latest Cloud Composer version that supports Airflow 2.2.5.\n\n   https://gcpdiag.dev/rules/composer/BP_EXT/2023_002\n\n"
  },
  {
    "path": "gcpdiag/lint/composer/snapshots/ERR_2022_001.txt",
    "content": "*  composer/ERR/2022_001: Composer Service Agent permissions\n   - projects/gcpdiag-composer1-aaaa                                      [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/composer/snapshots/ERR_2022_002.txt",
    "content": "*  composer/ERR/2022_002: Composer Environment Service Account permissions\n   - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env2 [FAIL]\n     service account: env2sa@gcpdiag-composer1-aaaa.iam.gserviceaccount.com\n     missing role: roles/iam.serviceAccountUser\n   - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env1 [ OK ]\n\n   Verify that the Composer Environment Service Account exists and has the\n   Composer Worker role on the project.\n\n   https://gcpdiag.dev/rules/composer/ERR/2022_002\n\n"
  },
  {
    "path": "gcpdiag/lint/composer/snapshots/ERR_2023_001.txt",
    "content": "*  composer/ERR/2023_001: Cloud Composer is not in ERROR state\n   - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env2 [ OK ]\n   - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env1 [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/composer/snapshots/ERR_2023_002.txt",
    "content": "*  composer/ERR/2023_002: Cloud Composer private IP Cluster non-RFC1918 IP range.\n   - projects/gcpdiag-composer1-aaaa                                      [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/composer/snapshots/ERR_2023_003.txt",
    "content": "*  composer/ERR/2023_003: Cloud Composer Dags are not getting timed out by the Dag Processor\n   - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env2 [ OK ]\n   - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env1 [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/composer/snapshots/ERR_2023_004.txt",
    "content": "*  composer/ERR/2023_004: Cloud Composer Dags are not getting zombie error\n   - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env2 [ OK ]\n   - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env1 [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/composer/snapshots/ERR_2023_005.txt",
    "content": "*  composer/ERR/2023_005: Composer environment deletion not failed due to NAT configuration\n   - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env2 [ OK ]\n   - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env1 [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/composer/snapshots/ERR_2024_001.txt",
    "content": "*  composer/ERR/2024_001: Composer Creation not failed due to 'no error was surfaced' Error.\n   - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env2 [ OK ]\n   - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env1 [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/composer/snapshots/WARN_2022_001.txt",
    "content": "*  composer/WARN/2022_001: Composer Service Agent permissions for Composer 2.x\n   - projects/gcpdiag-composer1-aaaa                                      [FAIL]\n     service account: service-12340005@cloudcomposer-accounts.iam.gserviceaccount.com\n     missing role: roles/composer.ServiceAgentV2Ext\n\n   Verify that the Cloud Composer Service Agent account exists and has the Cloud\n   Composer v2 API Service Agent Extension role on the project.\n\n   https://gcpdiag.dev/rules/composer/WARN/2022_001\n\n"
  },
  {
    "path": "gcpdiag/lint/composer/snapshots/WARN_2022_002.txt",
    "content": "*  composer/WARN/2022_002: fluentd pods in Composer environments are not crashing\n   - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env2 [ OK ]\n   - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env1 [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/composer/snapshots/WARN_2022_003.txt",
    "content": "*  composer/WARN/2022_003: Composer scheduler parses all DAG files without overloading\n   - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env2 [SKIP]\n     no metrics\n   - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env1 [SKIP]\n     no metrics\n\n"
  },
  {
    "path": "gcpdiag/lint/composer/snapshots/WARN_2023_001.txt",
    "content": "*  composer/WARN/2023_001: Cloud Composer does not override Kerberos configurations\n   - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env2 [ OK ]\n   - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env1 [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/composer/snapshots/WARN_2023_002.txt",
    "content": "*  composer/WARN/2023_002: Cloud Composer tasks are not interrupted by SIGKILL\n   - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env2 [ OK ]\n   - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env1 [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/composer/snapshots/WARN_2023_003.txt",
    "content": "*  composer/WARN/2023_003: Cloud Composer tasks are not failed due to resource pressure\n   - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env2 [ OK ]\n   - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env1 [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/composer/snapshots/WARN_2023_004.txt",
    "content": "*  composer/WARN/2023_004: Cloud Composer database CPU usage does not exceed 80%\n   - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env2 [ OK ]\n   - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env1 [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/composer/snapshots/WARN_2023_005.txt",
    "content": "*  composer/WARN/2023_005: Cloud Composer is consistently in healthy state\n   - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env2 [ OK ]\n   - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env1 [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/composer/snapshots/WARN_2023_006.txt",
    "content": "*  composer/WARN/2023_006: Airflow schedulers are healthy for the last hour\n   - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env2 [ OK ]\n   - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env1 [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/composer/snapshots/WARN_2023_007.txt",
    "content": "*  composer/WARN/2023_007: Cloud Composer Scheduler CPU limit exceeded.\n   - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env2 [ OK ]\n   - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env1 [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/composer/snapshots/WARN_2023_008.txt",
    "content": "*  composer/WARN/2023_008: Cloud Composer Airflow database is in healthy state\n   - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env2 [ OK ]\n   - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env1 [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/composer/snapshots/WARN_2023_009.txt",
    "content": "*  composer/WARN/2023_009: Cloud Composer task isn't failing intermittently during scheduling\n\n"
  },
  {
    "path": "gcpdiag/lint/composer/snapshots/WARN_2024_001.txt",
    "content": "*  composer/WARN/2024_001: Cloud Composer Scheduler CPU usage above 30%-35%.\n   - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env2 [FAIL]\n     Scheduler CPU usage below 30-35%\n   - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env1 [ OK ]\n\n   Scheduler CPU usage is consistently below 30%-35%, Recommended to Reduce the\n   number of schedulers and Reduce the CPU of schedulers for Optimize\n   environment performance and costs\n\n   https://gcpdiag.dev/rules/composer/WARN/2024_001\n\n"
  },
  {
    "path": "gcpdiag/lint/composer/snapshots/WARN_2024_002.txt",
    "content": "*  composer/WARN/2024_002: Cloud Composer Airflow Worker Pods not in Eviction state.\n   - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env2 [ OK ]\n   - projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env1 [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/composer/snapshots/WARN_2024_003.txt",
    "content": "*  composer/WARN/2024_003: Having the composer API enabled ensures the environment remains in a healthy state.\n   - projects/gcpdiag-composer1-aaaa                                      [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/composer/warn_2022_001_composer2_p4sa_permissions.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Composer Service Agent permissions for Composer 2.x\n\nVerify that the Cloud Composer Service Agent account exists and has\nthe Cloud Composer v2 API Service Agent Extension role on the project.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, iam\n\nSA = 'service-{project_number}@cloudcomposer-accounts.iam.gserviceaccount.com'\nROLE = 'roles/composer.ServiceAgentV2Ext'\n\nprojects = {}\npolicy_by_project = {}\n\n\ndef prefetch_rule(context: models.Context):\n  projects[context.project_id] = crm.get_project(context.project_id)\n  policy_by_project[context.project_id] = iam.get_project_policy(context)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  if not apis.is_enabled(context.project_id, 'composer'):\n    report.add_skipped(None, 'composer is disabled')\n    return\n\n  project = projects[context.project_id]\n  service_account = SA.format(project_number=project.number)\n\n  project_policy = policy_by_project[context.project_id]\n  if not project_policy.has_role_permissions(\n      f'serviceAccount:{service_account}', ROLE):\n    report.add_failed(project, (f'service account: {service_account}\\n'\n                                f'missing role: {ROLE}'))\n    return\n\n  report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/composer/warn_2022_002_fluentd_pod_crashloop.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"fluentd pods in Composer environments are not crashing\n\nThe fluentd runs as a daemonset and collects logs from all environment\ncomponents and uploads the logs to Cloud Logging. All fluentd pods in an\nenvironment could be stuck in a CrashLoopBackOff state after upgrading the\nenvironment and no logs appear in the Cloud Logging.\n\"\"\"\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, composer, crm, logs\n\nMATCH_STR = 'unexpected error error_class=NoMethodError'\nMATCH_STR2 = \"undefined method `subscription' for nil:NilClass\"\nPOD_NAME = 'composer-builder-fluentd'\n\nLOG_FILTER = [\n    'severity=INFO',\n    f'labels.k8s-pod/name=\"{POD_NAME}\"',\n    f'textPayload:\"{MATCH_STR}\"',\n    f'textPayload:\"{MATCH_STR2}\"',\n]\n\nlogs_by_project = {}\nenvs_by_project = {}\n\n\ndef prefetch_rule(context: models.Context):\n  envs_by_project[context.project_id] = composer.get_environments(context)\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='k8s_container',\n      log_name='log_id(\"stdout\")',\n      filter_str=' AND '.join(LOG_FILTER))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'logging api is disabled')\n    return\n\n  envs = envs_by_project[context.project_id]\n  name_to_env = {env.name: env for env in envs}\n\n  if not envs:\n    report.add_skipped(project, 'no envs found')\n    return\n\n  stuck_in_crashloop_envs = []\n\n  if logs_by_project.get(context.project_id) and \\\n     logs_by_project[context.project_id].entries:\n    for log_entry in logs_by_project[context.project_id].entries:\n      # Filter out non-relevant log entries.\n      if log_entry['severity'] != 'INFO' or \\\n         POD_NAME != get_path(log_entry,\n                     ('labels', 'k8s-pod/name'), default='') or \\\n         MATCH_STR not in log_entry.get('textPayload', '') or \\\n         MATCH_STR2 not in log_entry.get('textPayload', ''):\n        continue\n\n      # region-name-suffix-gke format (us-east4-composer-stg-v2-a106130c-gke)\n      cluster_name = get_path(log_entry, ('resource', 'labels', 'cluster_name'),\n                              default='')\n\n      env_name = '-'.join(cluster_name.split('-')[2:-2])\n      if env_name and env_name not in stuck_in_crashloop_envs:\n        stuck_in_crashloop_envs.append(env_name)\n\n  for env_name in stuck_in_crashloop_envs:\n    report.add_failed(name_to_env[env_name],\n                      'has fluentd pods stuck in the crashloop')\n\n  for env_name in [\n      env_name for env_name in name_to_env\n      if env_name not in stuck_in_crashloop_envs\n  ]:\n    report.add_ok(name_to_env[env_name])\n"
  },
  {
    "path": "gcpdiag/lint/composer/warn_2022_003_total_dag_parse_time.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Composer scheduler parses all DAG files without overloading\n\nIf the total DAG parse time exceeds about 10 seconds, the schedulers might\nbe overloaded with DAG parsing and cannot run DAGs effectively.\n\"\"\"\n\nfrom typing import Dict\n\nfrom gcpdiag import config, lint, models\nfrom gcpdiag.queries import apis, composer, crm, monitoring\n\nTOTAL_DAG_PARSE_SECONDS = 10\n\n_query_results_per_project_id: Dict[str, monitoring.TimeSeriesCollection] = {}\nenvs_by_project = {}\n\n\ndef prefetch_rule(context: models.Context):\n  envs_by_project[context.project_id] = composer.get_environments(context)\n  if not envs_by_project[context.project_id]:\n    return\n\n  within_str = 'within %dd, d\\'%s\\'' % (config.get('within_days'),\n                                        monitoring.period_aligned_now(60))\n  _query_results_per_project_id[context.project_id] = \\\n    monitoring.query(\n      context.project_id,\n      # maximum total DAG parse time during config.get('within_days')\n      f\"\"\"\n      fetch cloud_composer_environment\n      | metric 'composer.googleapis.com/environment/dag_processing/total_parse_time'\n      | {within_str}\n      | every 1m\n      | group_by {config.get('within_days')}d,\n                [value_total_parse_time_max: max(value.total_parse_time)]\n      \"\"\")\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n  if not apis.is_enabled(context.project_id, 'composer'):\n    report.add_skipped(None, 'composer is disabled')\n    return\n\n  envs = envs_by_project[context.project_id]\n  if not envs:\n    report.add_skipped(project, 'no environments found')\n    return\n\n  metric_values = {}\n  for query_result in \\\n  _query_results_per_project_id[context.project_id].values():\n    try:\n      metric_values[query_result['labels']['resource.environment_name']] = \\\n      query_result['values'][0][0]\n    except KeyError:\n      continue\n\n  for env in envs:\n    try:\n      if metric_values[env.name] >= TOTAL_DAG_PARSE_SECONDS:\n        report.add_failed(\n            env,\n            f'max total DAG parse time: {metric_values[env.name]:.2f} seconds')\n      else:\n        report.add_ok(env)\n    except KeyError:\n      report.add_skipped(env, 'no metrics')\n"
  },
  {
    "path": "gcpdiag/lint/composer/warn_2023_001_kerberos_support.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Cloud Composer does not override Kerberos configurations\n\nCloud Composer does not support Airflow Kerberos configuration yet.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, composer\n\nenvs_by_project = {}\n\n\ndef _check_kerberos_overrides(config) -> bool:\n  return config.get('core-security', '') == 'kerberos' or \\\n     any(key.startswith('kerberos-') for key in config.keys())\n\n\ndef prefetch_rule(context: models.Context):\n  envs_by_project[context.project_id] = composer.get_environments(context)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  if not apis.is_enabled(context.project_id, 'composer'):\n    report.add_skipped(None, 'composer is disabled')\n    return\n\n  envs = envs_by_project[context.project_id]\n\n  if not envs:\n    report.add_skipped(None, 'no Cloud Composer environments found')\n    return\n\n  for env in envs:\n    if _check_kerberos_overrides(env.airflow_config_overrides):\n      report.add_failed(\n          env,\n          'has Airflow kerberos configurations, which is not supported yet.')\n    else:\n      report.add_ok(env)\n"
  },
  {
    "path": "gcpdiag/lint/composer/warn_2023_002_task_sigkill.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Cloud Composer tasks are not interrupted by SIGKILL\n\nSometimes your task might be using more memory than Airflow worker is allocated.\nIn such a situation it might be interrupted by Negsignal.SIGKILL. The system\nsends this signal to avoid further memory consumption which might impact the\nexecution of other Airflow tasks.\n\"\"\"\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, composer, logs\n\nMATCH_STR = 'Task exited with return code Negsignal.SIGKILL'\nLOG_FILTER = ['severity=INFO', f'textPayload:\"{MATCH_STR}\"']\nlogs_by_project = {}\nenvs_by_project = {}\n\n\ndef prefetch_rule(context: models.Context):\n  envs_by_project[context.project_id] = composer.get_environments(context)\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='cloud_composer_environment',\n      log_name='log_id(\"airflow-worker\")',\n      filter_str=' AND '.join(LOG_FILTER))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  if not apis.is_enabled(context.project_id, 'composer'):\n    report.add_skipped(None, 'composer is disabled')\n    return\n\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(None, 'logging api is disabled')\n    return\n\n  envs = envs_by_project[context.project_id]\n\n  if not envs:\n    report.add_skipped(None, 'no Cloud Composer environments found')\n    return\n\n  sigkilled_envs = set()\n\n  if logs_by_project.get(context.project_id) and \\\n     logs_by_project[context.project_id].entries:\n    for log_entry in logs_by_project[context.project_id].entries:\n      # Filter out non-relevant log entries.\n      if log_entry['severity'] != 'INFO' or \\\n          MATCH_STR not in log_entry.get('textPayload', ''):\n        continue\n\n      env_name = get_path(log_entry, ('resource', 'labels', 'environment_name'))\n      sigkilled_envs.add(env_name)\n\n  for env in envs:\n    if env.name in sigkilled_envs:\n      report.add_failed(env)\n    else:\n      report.add_ok(env)\n"
  },
  {
    "path": "gcpdiag/lint/composer/warn_2023_003_task_fail_resource_pressure.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Cloud Composer tasks are not failed due to resource pressure\n\nDuring execution of a task, Airflow worker's subprocess responsible for Airflow\ntask execution could be interrupted abruptly due to resource pressure. In this\ncase, the task would be failed without emitting logs.\n\"\"\"\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, composer, logs\n\nMATCH_STR = 'Celery command failed on host'\nLOG_FILTER = ['severity=ERROR', f'textPayload:\"{MATCH_STR}\"']\nenvs_by_project = {}\nlogs_by_project = {}\n\n\ndef prefetch_rule(context: models.Context):\n  envs_by_project[context.project_id] = composer.get_environments(context)\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='cloud_composer_environment',\n      log_name='log_id(\"airflow-worker\")',\n      filter_str=' AND '.join(LOG_FILTER))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  if not apis.is_enabled(context.project_id, 'composer'):\n    report.add_skipped(None, 'composer is disabled')\n    return\n\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(None, 'logging api is disabled')\n    return\n\n  envs = envs_by_project[context.project_id]\n\n  if not envs:\n    report.add_skipped(None, 'no Cloud Composer environments found')\n    return\n\n  resource_pressure_envs = set()\n\n  if logs_by_project.get(context.project_id) and \\\n     logs_by_project[context.project_id].entries:\n    for log_entry in logs_by_project[context.project_id].entries:\n      # Filter out non-relevant log entries.\n      if log_entry['severity'] != 'ERROR' or \\\n          MATCH_STR not in log_entry.get('textPayload', ''):\n        continue\n\n      env_name = get_path(log_entry, ('resource', 'labels', 'environment_name'))\n      resource_pressure_envs.add(env_name)\n\n  for env in envs:\n    if env.name in resource_pressure_envs:\n      report.add_failed(env)\n    else:\n      report.add_ok(env)\n"
  },
  {
    "path": "gcpdiag/lint/composer/warn_2023_004_high_database_cpu_usage.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Cloud Composer database CPU usage does not exceed 80%\n\nAirflow database performance issues can lead to overall DAG execution issues.\nIf the database CPU usage exceeds 80% for more than a few percent of the total\ntime, the database is overloaded and requires scaling.\n\"\"\"\nfrom typing import Dict\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, composer, monitoring\n\nCPU_USAGE_THRESHOLD = 0.8\n\n_query_results_per_project_id: Dict[str, monitoring.TimeSeriesCollection] = {}\nenvs_by_project = {}\n\n\ndef prefetch_rule(context: models.Context):\n  envs_by_project[context.project_id] = composer.get_environments(context)\n  if not envs_by_project[context.project_id]:\n    return\n\n  _query_results_per_project_id[context.project_id] = \\\n    monitoring.query(\n      context.project_id,\n      f\"\"\"\n      fetch cloud_composer_environment\n       | metric 'composer.googleapis.com/environment/database/cpu/utilization'\n       | within 1h\n       | filter val() >= {CPU_USAGE_THRESHOLD}\n      \"\"\")\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  if not apis.is_enabled(context.project_id, 'composer'):\n    report.add_skipped(None, 'composer is disabled')\n    return\n\n  envs = envs_by_project[context.project_id]\n\n  if not envs:\n    report.add_skipped(None, 'no Cloud Composer environments found')\n    return\n\n  overloaded_envs = {}\n\n  for ts in _query_results_per_project_id[context.project_id].values():\n    try:\n      env = get_path(ts, ('labels', 'resource.environment_name'))\n      cpu_usage = ts['values'][0][0]\n      overloaded_envs[env] = cpu_usage\n    except KeyError:\n      continue\n\n  for env in envs:\n    if env.name in overloaded_envs:\n      report.add_failed(\n          env,\n          f'database CPU usage exceeded 80% ({overloaded_envs[env.name]:.2f})')\n    else:\n      report.add_ok(env)\n"
  },
  {
    "path": "gcpdiag/lint/composer/warn_2023_005_environment_is_consistently_healthy.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Cloud Composer is consistently in healthy state\n\nCloud Composer runs a liveness DAG named airflow_monitoring, which runs on a\nschedule and reports environment health. If the liveness DAG run finishes\nsuccessfully, the health status is True, which means healthy. Otherwise, the\nhealth status is False. Note that the environment health could be intermittently\nunhealthy due to events like scheduled maintenance. However, overall it should\nbe healthy.\n\"\"\"\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, composer, monitoring\n\n_query_results_per_project_id: dict[str, monitoring.TimeSeriesCollection] = {}\nenvs_by_project = {}\n\n\ndef prefetch_rule(context: models.Context):\n  envs_by_project[context.project_id] = composer.get_environments(context)\n  if not envs_by_project[context.project_id]:\n    return\n\n  _query_results_per_project_id[context.project_id] = monitoring.query(\n      context.project_id, \"\"\"\n      fetch cloud_composer_environment\n      | metric 'composer.googleapis.com/environment/healthy'\n      | align fraction_true_aligner(30m)\n      | within 6h\n      | filter val() == 0\n      \"\"\")\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  if not apis.is_enabled(context.project_id, 'composer'):\n    report.add_skipped(None, 'composer is disabled')\n    return\n\n  envs = envs_by_project[context.project_id]\n\n  if not envs:\n    report.add_skipped(None, 'no Cloud Composer environments found')\n    return\n\n  unhealthy_envs = set()\n\n  for ts in _query_results_per_project_id[context.project_id].values():\n    try:\n      unhealthy_envs.add(get_path(ts, ('labels', 'resource.environment_name')))\n    except KeyError:\n      continue\n\n  for env in envs:\n    if env.name in unhealthy_envs:\n      report.add_failed(env)\n    else:\n      report.add_ok(env)\n"
  },
  {
    "path": "gcpdiag/lint/composer/warn_2023_006_schedulers_are_healthy.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Airflow schedulers are healthy for the last hour\n\nAirflow schedulers report heartbeat signals every predefined interval called\nscheduler_heartbeat_sec (default: 5 seconds). If any heartbeats are received\nwithin the threshold time (default: 30 seconds), the Scheduler heartbeat from\nthe monitoring dashboard is marked as Green, which means healthy. Otherwise the\nstatus is unhealthy. Note that if your environment has more than one scheduler,\nthen the status is healthy as long as at least one of schedulers is responding.\n\"\"\"\nfrom typing import Dict\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, composer, monitoring\n\n_query_results_per_project_id: Dict[str, monitoring.TimeSeriesCollection] = {}\nenvs_by_project = {}\n\n\ndef prefetch_rule(context: models.Context):\n  envs_by_project[context.project_id] = composer.get_environments(context)\n  if not envs_by_project[context.project_id]:\n    return\n\n  _query_results_per_project_id[context.project_id] = \\\n    monitoring.query(\n      context.project_id,\n      \"\"\"\n      fetch cloud_composer_environment\n      | metric 'composer.googleapis.com/environment/scheduler_heartbeat_count'\n      | group_by 1m,\n          [value_scheduler_heartbeat_count_mean:\n             mean(value.scheduler_heartbeat_count)]\n      | every 1m\n      | within 1h\n      | filter val() == 0\n      \"\"\")\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  if not apis.is_enabled(context.project_id, 'composer'):\n    report.add_skipped(None, 'composer is disabled')\n    return\n\n  envs = envs_by_project[context.project_id]\n\n  if not envs:\n    report.add_skipped(None, 'no Cloud Composer environments found')\n    return\n\n  unhealthy_schedulers_envs = set()\n\n  for ts in _query_results_per_project_id[context.project_id].values():\n    try:\n      unhealthy_schedulers_envs.add(\n          get_path(ts, ('labels', 'resource.environment_name')))\n    except KeyError:\n      continue\n\n  for env in envs:\n    if env.name in unhealthy_schedulers_envs:\n      report.add_failed(env)\n    else:\n      report.add_ok(env)\n"
  },
  {
    "path": "gcpdiag/lint/composer/warn_2023_007_high_scheduler_cpu_usage.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Cloud Composer Scheduler CPU limit exceeded.\n\nAirflow scheduler's CPU and memory metrics help you check whether the\nscheduler's performance is a bottleneck in the overall Airflow performance.\n\"\"\"\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, composer, monitoring\n\nCPU_USAGE_THRESHOLD = 1\n\n_query_results_per_project_id: dict[str, monitoring.TimeSeriesCollection] = {}\nenvs_by_project = {}\n\n\ndef prefetch_rule(context: models.Context):\n  envs_by_project[context.project_id] = composer.get_environments(context)\n  if not envs_by_project[context.project_id]:\n    return\n\n  _query_results_per_project_id[context.project_id] = monitoring.query(\n      context.project_id,\n      f\"\"\"\n      fetch k8s_container\n       | metric 'kubernetes.io/container/cpu/limit_utilization'\n       | filter (resource.container_name == 'airflow-scheduler')\n       | within 1h\n       | filter val() >= {CPU_USAGE_THRESHOLD}\n      \"\"\",\n  )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  if not apis.is_enabled(context.project_id, 'composer'):\n    report.add_skipped(None, 'composer is disabled')\n    return\n\n  envs = envs_by_project[context.project_id]\n\n  if not envs:\n    report.add_skipped(None, 'no Cloud Composer environments found')\n    return\n\n  overloaded_envs = {}\n\n  for ts in _query_results_per_project_id[context.project_id].values():\n    try:\n      env = get_path(ts, ('labels', 'resource.container_name'))\n      cpu_usage = ts['values'][0][0]\n      overloaded_envs[env] = cpu_usage\n    except KeyError:\n      continue\n\n  for env in envs:\n    if env.name in overloaded_envs:\n      report.add_failed(\n          env, f'Scheduler CPU limit exceeded({overloaded_envs[env.name]:.2f})')\n    else:\n      report.add_ok(env)\n"
  },
  {
    "path": "gcpdiag/lint/composer/warn_2023_008_composer_airflow_db_is_healthy.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Cloud Composer Airflow database is in healthy state\n\nThe Airflow monitoring pod pings the database every minute and reports health\nstatus as True if a SQL connection can be established or False if not.\n\"\"\"\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, composer, monitoring\n\nenvs_by_project = {}\n_query_results_per_project_id: dict[str, monitoring.TimeSeriesCollection] = {}\n\n\ndef prefetch_rule(context: models.Context):\n  envs_by_project[context.project_id] = composer.get_environments(context)\n  if not envs_by_project[context.project_id]:\n    return\n\n  _query_results_per_project_id[context.project_id] = monitoring.query(\n      context.project_id, \"\"\"\n      fetch cloud_composer_environment\n      | metric 'composer.googleapis.com/environment/database_health'\n      | align fraction_true_aligner(30m)\n      | within 6h\n      | filter val() == 0\n      \"\"\")\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  if not apis.is_enabled(context.project_id, 'composer'):\n    report.add_skipped(None, 'composer is disabled')\n    return\n\n  envs = envs_by_project[context.project_id]\n  if not envs:\n    report.add_skipped(None, 'no Cloud Composer environments found')\n    return\n\n  unhealthy_db = set()\n\n  for ts in _query_results_per_project_id[context.project_id].values():\n    try:\n      unhealthy_db.add(get_path(ts, ('labels', 'resource.environment_name')))\n    except KeyError:\n      continue\n\n  for env in envs:\n    if env.name in unhealthy_db:\n      report.add_failed(env)\n    else:\n      report.add_ok(env)\n"
  },
  {
    "path": "gcpdiag/lint/composer/warn_2023_009_composer_intermittent_task_failure_issue.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Cloud Composer task isn't failing intermittently during scheduling\n\nThe user may encounter an error caused by multiple reasons like intermittent\ntask failures during scheduling, hit the dag parsing timeout,\nunhandled exception, dynamic DAG generation or Out of Memory.\n\nTo minimize the impact of such errors, it is recommended to check the\ncommon issues from our public documentation and follow the best practices.\n\"\"\"\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, composer, crm, logs\n\nMATCH_STRING = (\n    '[queued]> finished (failed) although the task says its queued. ' +\n    '(Info: None) Was the task killed externally?')\n\nFILTER = ['severity=ERROR', f'textPayload:(\"{MATCH_STRING}\")']\n\nlogs_by_project = {}\nenvs_by_project = {}\n\n\ndef find_env(arr_of_composer_envs: list, search_str: str):\n  \"\"\"Compares the environment name from the error log with the list of composer environment objects\n\n  Args:\n    arr_of_composer_envs: list of composer environment objects\n    search_str: string containing the name of composer search_str extracted from\n      the error log\n\n  Returns:\n    environment: composer environment object\n  \"\"\"\n\n  for environment in arr_of_composer_envs:\n    if environment.name == search_str:\n      return environment\n\n\ndef get_dag_task(error_message: str):\n  \"\"\"Extracts the airflow dag and task name from the error log message\n\n  Args:\n    error_message: string containing the error log message\n\n  Returns:\n    dag, task: airflow dag name and airflow task name\n  \"\"\"\n\n  parts = error_message.split()\n  start_index = None\n\n  try:\n    start_index = parts.index('<TaskInstance:') + 1\n    full_task_name = parts[start_index]\n    dag, task = full_task_name.split('.', 1)\n    return dag, task\n  except ValueError:\n    return full_task_name, ''\n\n\ndef prefetch_rule(context: models.Context):\n  envs_by_project[context.project_id] = composer.get_environments(context)\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='cloud_composer_environment',\n      log_name='log_id(\"airflow-scheduler\")',\n      filter_str=' AND '.join(FILTER),\n  )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(None, 'cloud logging api is disabled')\n    return\n\n  if not apis.is_enabled(context.project_id, 'composer'):\n    report.add_skipped(None, 'cloud composer api is disabled')\n    return\n\n  if context.project_id in logs_by_project:\n    logs_ = logs_by_project.get(context.project_id)\n    if logs_:\n      dag_task_list = set()\n      env_list = envs_by_project[context.project_id]\n\n      for log_entry in logs_.entries:\n        if log_entry['severity'] != 'ERROR' or MATCH_STRING not in get_path(\n            log_entry, 'textPayload', default=''):\n          continue\n\n        error_message = get_path(log_entry, 'textPayload')\n\n        dag_name, task_name = get_dag_task(error_message)\n\n        environment = get_path(log_entry, ('resource', 'labels'))\n\n        environment_detials = find_env(env_list,\n                                       environment['environment_name'])\n\n        if (dag_name, task_name, environment_detials) not in dag_task_list:\n          report.add_failed(\n              environment_detials,\n              f'Task \"{dag_name}/{task_name}\" is failing intermittently',\n          )\n          dag_task_list.add((dag_name, task_name, environment_detials))\n\n      return\n\n  report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/composer/warn_2024_001_low_scheduler_cpu_usuage.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Cloud Composer Scheduler CPU usage above 30%-35%.\n\nScheduler CPU usage is consistently below 30%-35%, Recommended to Reduce the\nnumber of schedulers and Reduce the CPU of schedulers for Optimize environment\nperformance and costs\n\"\"\"\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, composer, monitoring\n\nCPU_USAGE_THRESHOLD = 0.35\n\n_query_results_per_project_id: dict[str, monitoring.TimeSeriesCollection] = {}\nenvs_by_project = {}\n\n\ndef prefetch_rule(context: models.Context):\n  envs_by_project[context.project_id] = composer.get_environments(context)\n  if not envs_by_project[context.project_id]:\n    return\n\n  _query_results_per_project_id[context.project_id] = monitoring.query(\n      context.project_id,\n      f\"\"\"\n      fetch k8s_container\n       | metric 'kubernetes.io/container/cpu/limit_utilization'\n       | filter (resource.container_name == 'airflow-scheduler')\n       | within 3d\n       | group_by 3d, [value_limit_utilization: max(value.limit_utilization)]\n       | filter val() <= {CPU_USAGE_THRESHOLD}\n      \"\"\",\n  )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  if not apis.is_enabled(context.project_id, 'composer'):\n    report.add_skipped(None, 'composer is disabled')\n    return\n\n  envs = envs_by_project[context.project_id]\n\n  if not envs:\n    report.add_skipped(None, 'no Cloud Composer environments found')\n    return\n\n  under_usuage_envs = set()\n\n  for ts in _query_results_per_project_id[context.project_id].values():\n    try:\n      env = get_path(ts, ('labels', 'resource.cluster_name'))\n      under_usuage_envs.add(env)\n    except KeyError:\n      continue\n\n  for env in envs:\n    env_cluster_name = env.gke_cluster.split('/')[-1]\n    if env_cluster_name in under_usuage_envs:\n      report.add_failed(env, 'Scheduler CPU usage below 30-35%')\n    else:\n      report.add_ok(env)\n"
  },
  {
    "path": "gcpdiag/lint/composer/warn_2024_002_worker_pod_eviction.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Cloud Composer Airflow Worker Pods not in Eviction state.\n\nPod eviction can happen when a particular pod in your environment's cluster\nreaches its resource limits.If an Airflow worker pod is evicted, all task\ninstances running on that pod are interrupted, and later marked as failed by\nAirflow.\n\"\"\"\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, composer, monitoring\n\n_query_results_per_project_id: dict[str, monitoring.TimeSeriesCollection] = {}\nenvs_by_project = {}\n\n\ndef prefetch_rule(context: models.Context):\n  envs_by_project[context.project_id] = composer.get_environments(context)\n  if not envs_by_project[context.project_id]:\n    return\n\n  _query_results_per_project_id[context.project_id] = monitoring.query(\n      context.project_id,\n      \"\"\"\n       fetch cloud_composer_environment\n       | metric 'composer.googleapis.com/environment/worker/pod_eviction_count'\n       | within 6h\n       | align delta(1m)\n       | every 1m\n       | filter val() > 0\n      \"\"\",\n  )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n\n  if not apis.is_enabled(context.project_id, 'composer'):\n    report.add_skipped(None, 'composer is disabled')\n    return\n\n  envs = envs_by_project[context.project_id]\n\n  if not envs:\n    report.add_skipped(None, 'no Cloud Composer environments found')\n    return\n\n  pod_evicted_envs = set()\n\n  for ts in _query_results_per_project_id[context.project_id].values():\n    try:\n      env = get_path(ts, ('labels', 'resource.environment_name'))\n      pod_evicted_envs.add(env)\n    except KeyError:\n      continue\n\n  for env in envs:\n    if env.name in pod_evicted_envs:\n      report.add_failed(env, 'Airflow Worker Pod(s) evicted')\n    else:\n      report.add_ok(env)\n"
  },
  {
    "path": "gcpdiag/lint/composer/warn_2024_003_composer_api_disabled.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Having the composer API enabled ensures the environment remains in a healthy state.\n\nDisabling the Cloud Composer's service (API) puts Composer environments into a\npermanent failed state, and permanently deletes the Composer tenant project.\nMake sure that all Cloud Composer environments in your project are deleted.\n\"\"\"\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, composer, crm, logs\n\nMATCH_STR1 = 'google.api.serviceusage.v1.ServiceUsage.DisableService'\nMATCH_STR2 = 'google.api.serviceusage.v1.ServiceUsage.EnableService'\nMATCH_STR3 = '/services/composer.googleapis.com'\n\nFILTER_1 = [\n    f'protoPayload.methodName = (\"{MATCH_STR1}\" OR \"{MATCH_STR2}\")',\n    f'protoPayload.request.name=~ (\"{MATCH_STR3}\")',\n]\n\nlogs_by_project = {}\nenvs_by_project = {}\n\n\ndef prefetch_rule(context: models.Context):\n  envs_by_project[context.project_id] = composer.get_environments(context)\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='audited_resource',\n      log_name='log_id(\"cloudaudit.googleapis.com/activity\")',\n      filter_str=' AND '.join(FILTER_1),\n  )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  \"\"\"Run the rule.\"\"\"\n  project = crm.get_project(context.project_id)\n\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(None, 'logging api is disabled')\n    return\n\n  if (logs_by_project.get(context.project_id) and\n      logs_by_project[context.project_id].entries):\n    for log_entry in logs_by_project[context.project_id].entries:\n      # Filter out non-relevant log entries.\n      if MATCH_STR1 in get_path(log_entry, ('protoPayload', 'methodName'),\n                                '') and MATCH_STR3 in get_path(\n                                    log_entry,\n                                    ('protoPayload', 'request', 'name'), ''):\n        report.add_failed(project,\n                          'Request to disable the composer API recently done')\n        return\n\n      if MATCH_STR2 in get_path(log_entry, ('protoPayload', 'methodName'),\n                                '') and MATCH_STR3 in get_path(\n                                    log_entry,\n                                    ('protoPayload', 'request', 'name'), ''):\n\n        envs = envs_by_project[context.project_id]\n\n        if envs:\n          report.add_failed(\n              project,\n              'Re-enabling the composer API (after disabling),You may see the '\n              ' the active environment entered into an error state.',\n          )\n          return\n\n  # in case of there is no log or all logs are non-relevant\n  report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/dataflow/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/lint/dataflow/bp_2023_001_dataflow_supported_sdk_version_check.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Dataflow job is using supported Apache Beam SDK version\n\nApache Beam SDK versions are supported by Dataflow from\ntheir release date until their deprecation date.\n\"\"\"\nimport itertools\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, dataflow\n\ndataflow_jobs_by_project = {}\n\n\ndef prefetch_rule(context: models.Context):\n  dataflow_jobs_by_project[context.project_id] = dataflow.get_all_dataflow_jobs(\n      context)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n\n  if not apis.is_enabled(context.project_id, 'dataflow'):\n    report.add_skipped(project, 'dataflow api is disabled')\n    return\n\n  jobs = dataflow_jobs_by_project[context.project_id]\n\n  failed_jobs = set()\n\n  if not jobs:\n    report.add_skipped(None, 'no jobs found')\n\n  for job in jobs:\n    try:\n      if job.sdk_support_status in ['DEPRECATED', 'UNSUPPORTED']:\n        failed_jobs.add(job.id)\n      else:\n        continue\n    except KeyError:\n      report.add_skipped(project, f'Dataflow job {job.id} has no metrics')\n      continue\n\n  if failed_jobs:\n    report.add_failed(\n        project,\n        'Some Dataflow jobs using deprecated Apache Beam SDK version: ' +\n        ', '.join(itertools.islice(failed_jobs, 20)),\n    )\n  else:\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/dataflow/dataflow_rules_snapshot_test.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\" Generalize rule snapshot testing \"\"\"\n\nfrom gcpdiag.lint import dataflow, snapshot_test_base\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = dataflow\n  project_id = 'gcpdiag-dataflow1-aaaa'\n"
  },
  {
    "path": "gcpdiag/lint/dataflow/err_2023_001_dataflow_sa_perm_check.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Dataflow service account has dataflow.serviceAgent role\n\nCheck that the service account\nservice-<project-number>@dataflow-service-producer-prod.iam.gserviceaccount.com\nhas the following role: roles/dataflow.serviceAgent\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import crm, iam\n\n\ndef prefetch_rule(context: models.Context):\n  # Make sure that we have the IAM policy in cache.\n  iam.get_project_policy(context)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n\n  role = 'roles/dataflow.serviceAgent'\n\n  project = crm.get_project(context.project_id)\n  iam_policy = iam.get_project_policy(context)\n\n  project_nr = crm.get_project(context.project_id).number\n\n  for member in sorted(iam_policy.get_members()):\n    if member.startswith(\n        'serviceAccount:service-' + str(project_nr) +\n        '@dataflow-service-producer-prod.iam.gserviceaccount.com'):\n\n      if iam_policy.has_role_permissions(member, role):\n        report.add_ok(project)\n        break\n      else:\n        report.add_failed(project, member + f' does not has the role {role}')\n"
  },
  {
    "path": "gcpdiag/lint/dataflow/err_2023_002_dataflow_ip_space_exhausted.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Dataflow job does not fail during execution due to IP space exhaustion\n\nA dataflow job runs successfully if subnet has enough ip space for all workers in job,\notherwise it fails with IP_SPACE_EXHAUSTED error.\n\"\"\"\n\nimport itertools\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nMATCH_STR = 'IP_SPACE_EXHAUSTED'\n\n# Criteria to filter for logs\nLOG_FILTER = ['severity=ERROR', f'textPayload=~\"{MATCH_STR}\"']\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='dataflow_step',\n      log_name='log_id(\"dataflow.googleapis.com/job-message\")',\n      filter_str=' AND '.join(LOG_FILTER))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'logging api is disabled')\n    return\n\n  if not apis.is_enabled(context.project_id, 'dataflow'):\n    report.add_skipped(project, 'dataflow api is disabled')\n    return\n\n  if (logs_by_project.get(context.project_id) and\n      logs_by_project[context.project_id].entries):\n    failed_jobs = set()\n    for log_entry in logs_by_project[context.project_id].entries:\n      # Filter out non-relevant log entries.\n      if log_entry['severity'] != 'ERROR' or \\\n        MATCH_STR not in get_path(log_entry,\n                     ('textPayload'), default=''):\n        continue\n\n      job_id = get_path(\n          log_entry,\n          ('resource', 'labels', 'job_id'),\n      )\n\n      failed_jobs.add(job_id)\n\n    if failed_jobs:\n      report.add_failed(\n          project, 'Some Dataflow jobs failed due to exhaustion of IP Space: ' +\n          ', '.join(itertools.islice(failed_jobs, 20)))\n    else:\n      report.add_ok(project)\n  else:\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/dataflow/err_2023_003_dataflow_subnet_format_check.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Dataflow job does not fail during execution due to incorrect specification of subnet\n\nA dataflow job runs successfully if subnet is properly specified while launching the job,\notherwise it fails with Invalid subnetwork specified error.\n\"\"\"\n\nimport itertools\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nMATCH_STR = 'Workflow failed. Causes: Invalid subnetwork specified'\n\n# Criteria to filter for logs\nLOG_FILTER = ['severity=ERROR', f'textPayload=~\"{MATCH_STR}\"']\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='dataflow_step',\n      log_name='log_id(\"dataflow.googleapis.com/job-message\")',\n      filter_str=' AND '.join(LOG_FILTER))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'logging api is disabled')\n    return\n\n  if not apis.is_enabled(context.project_id, 'dataflow'):\n    report.add_skipped(project, 'dataflow api is disabled')\n    return\n\n  if (logs_by_project.get(context.project_id) and\n      logs_by_project[context.project_id].entries):\n    failed_jobs = set()\n    for log_entry in logs_by_project[context.project_id].entries:\n      # Filter out non-relevant log entries.\n      if log_entry['severity'] != 'ERROR' or \\\n        MATCH_STR not in get_path(log_entry,\n                     ('textPayload'), default=''):\n        continue\n\n      job_id = get_path(\n          log_entry,\n          ('resource', 'labels', 'job_id'),\n      )\n\n      failed_jobs.add(job_id)\n\n    if failed_jobs:\n      report.add_failed(\n          project, 'Some Dataflow jobs failed due to ' +\n          'incorrect formatting of subnet specified while launching: ' +\n          ', '.join(itertools.islice(failed_jobs, 20)))\n    else:\n      report.add_ok(project)\n  else:\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/dataflow/err_2023_004_dataflow_org_policy_violated.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Dataflow job does not fail due to violating an organization policy constraint in project\n\nA dataflow job might fail if there are constraints for any\n(eg compute.vmExternalIpAccess, compute.requireShieldedVm etc.)\nthat might limit VM instance creation in their project\n\"\"\"\n\nimport itertools\nimport re\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nMATCH_STR = 'Constraint constraints/.* violated for project'\ncontains_required_pattern = re.compile(MATCH_STR)\n\n# Criteria to filter for logs\nLOG_FILTER = ['severity=ERROR', f'textPayload=~\"{MATCH_STR}\"']\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='dataflow_step',\n      log_name='log_id(\"dataflow.googleapis.com/job-message\")',\n      filter_str=' AND '.join(LOG_FILTER))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'logging api is disabled')\n    return\n\n  if not apis.is_enabled(context.project_id, 'dataflow'):\n    report.add_skipped(project, 'dataflow api is disabled')\n    return\n\n  if (logs_by_project.get(context.project_id) and\n      logs_by_project[context.project_id].entries):\n    failed_jobs = set()\n    for log_entry in logs_by_project[context.project_id].entries:\n      # Filter out non-relevant log entries.\n      msg = get_path(log_entry, ('textPayload'), default='')\n\n      contains_required = contains_required_pattern.search(msg)\n\n      # Filter out non-relevant log entries.\n      if not (log_entry['severity'] == 'ERROR' and contains_required):\n        continue\n\n      job_id = get_path(\n          log_entry,\n          ('resource', 'labels', 'job_id'),\n      )\n\n      failed_jobs.add(job_id)\n\n    if failed_jobs:\n      report.add_failed(\n          project, 'Some Dataflow jobs are unable to start workers ' +\n          'due to violating an organization policy constraint in project: ' +\n          ', '.join(itertools.islice(failed_jobs, 20)))\n    else:\n      report.add_ok(project)\n  else:\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/dataflow/err_2023_005_dataflow_credential_perm_issue.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Dataflow job does not fail during execution due credential or permission issue\n\nA dataflow job runs successfully if dataflow api is enabled and\ndataflow service account and controller service account have sufficient\npermission\n\"\"\"\n\nimport itertools\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nMATCH_STR = (\n    'Workflow failed. Causes: There was a problem refreshing your credentials.')\n\n# Criteria to filter for logs\nLOG_FILTER = ['severity=ERROR', f'textPayload=~\"{MATCH_STR}\"']\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='dataflow_step',\n      log_name='log_id(\"dataflow.googleapis.com/job-message\")',\n      filter_str=' AND '.join(LOG_FILTER),\n  )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'logging api is disabled')\n    return\n\n  if not apis.is_enabled(context.project_id, 'dataflow'):\n    report.add_skipped(project, 'dataflow api is disabled')\n    return\n\n  if (logs_by_project.get(context.project_id) and\n      logs_by_project[context.project_id].entries):\n    failed_jobs = set()\n    for log_entry in logs_by_project[context.project_id].entries:\n      # Filter out non-relevant log entries.\n      if log_entry['severity'] != 'ERROR' or MATCH_STR not in get_path(\n          log_entry, 'textPayload', default=''):\n        continue\n\n      job_id = get_path(\n          log_entry,\n          ('resource', 'labels', 'job_id'),\n      )\n\n      failed_jobs.add(job_id)\n\n    if failed_jobs:\n      report.add_failed(\n          project,\n          'Some Dataflow jobs failed due to credential or permission issue: ' +\n          ', '.join(itertools.islice(failed_jobs, 20)),\n      )\n    else:\n      report.add_ok(project)\n  else:\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/dataflow/err_2023_006_dataflow_private_google_access_check.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Dataflow job fails if Private Google Access is disabled on Subnetwork\n\nDataflow job fails when the subnetwork does not have Private Google Access which is\nrequired for usage of private IP addresses by the Dataflow workers for accessing\nGoogle APIs & Services\n\"\"\"\n\nimport itertools\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nMATCH_STR = 'does not have Private Google Access'\n\n# Criteria to filter for logs\nLOG_FILTER = ['severity=ERROR', f'textPayload=~\"{MATCH_STR}\"']\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='dataflow_step',\n      log_name='log_id(\"dataflow.googleapis.com/job-message\")',\n      filter_str=' AND '.join(LOG_FILTER))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'logging api is disabled')\n    return\n\n  if not apis.is_enabled(context.project_id, 'dataflow'):\n    report.add_skipped(project, 'dataflow api is disabled')\n    return\n\n  if (logs_by_project.get(context.project_id) and\n      logs_by_project[context.project_id].entries):\n    failed_jobs = set()\n    for log_entry in logs_by_project[context.project_id].entries:\n      # Filter out non-relevant log entries.\n      if log_entry['severity'] != 'ERROR' or \\\n        MATCH_STR not in get_path(log_entry,\n                     ('textPayload'), default=''):\n        continue\n\n      job_id = get_path(\n          log_entry,\n          ('resource', 'labels', 'job_id'),\n      )\n\n      failed_jobs.add(job_id)\n\n    if failed_jobs:\n      report.add_failed(\n          project,\n          'Some Dataflow jobs failed because Private Google Access is disabled: '\n          + ', '.join(itertools.islice(failed_jobs, 20)))\n    else:\n      report.add_ok(project)\n  else:\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/dataflow/err_2023_007_dataflow_missing_firewall_issue.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Streaming Dataflow job gets stuck when firewall rules are not configured\n\nJob is stuck because the firewall rules to allow communication between\ndataflow workers over port 12345 are missing.\n\"\"\"\n\nimport itertools\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nMATCH_STR = 'failed to connect to all addresses'\n\n# Criteria to filter for logs\nLOG_FILTER = ['severity=WARNING', f'jsonPayload.message=~\"{MATCH_STR}\"']\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='dataflow_step',\n      log_name='log_id(\"dataflow.googleapis.com/shuffler\")',\n      filter_str=' AND '.join(LOG_FILTER))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n\n  # skip entire rule if Logging or Dataflow APIs are disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'logging api is disabled')\n    return\n\n  if not apis.is_enabled(context.project_id, 'dataflow'):\n    report.add_skipped(project, 'dataflow api is disabled')\n    return\n\n  if context.project_id in logs_by_project:\n    failed_jobs = set()\n    for log_entry in logs_by_project[context.project_id].entries:\n      # Filter out non-relevant log entries.\n      if log_entry['severity'] != 'WARNING' or \\\n        MATCH_STR not in get_path(log_entry,\n                     ('jsonPayload.message'), default=''):\n        continue\n\n      job_id = get_path(\n          log_entry,\n          ('resource', 'labels', 'job_id'),\n      )\n\n      failed_jobs.add(job_id)\n\n    if failed_jobs:\n      report.add_failed(\n          project,\n          'Some Dataflow jobs are stuck due to missing firewall rules: ' +\n          ', '.join(itertools.islice(failed_jobs, 20)))\n    else:\n      report.add_ok(project)\n  else:\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/dataflow/err_2023_008_dataflow_sa_worker_perm_check.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Dataflow worker service account has roles/dataflow.worker role\n\nCheck that the worker service account used in dataflow job\nhas the following role: roles/dataflow.worker role\n\"\"\"\n\nimport itertools\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, iam, logs\n\n# Criteria to filter for logs\nLOG_FILTER = [\n    'protoPayload.@type=\"type.googleapis.com/google.cloud.audit.AuditLog\"',\n    ('protoPayload.methodName=\"dataflow.jobs.updateContents\" OR'\n     ' \"dataflow.jobs.create\"'),\n]\nlogs_by_project = {}\npolicies_by_project = {}\n\nWORKER_ROLE = 'roles/dataflow.worker'\nEDITOR_ROLE = 'roles/editor'\nOWNER_ROLE = 'roles/owner'\n\n\ndef prefetch_rule(context: models.Context):\n  # Make sure that we have the IAM policy in cache.\n  iam.get_project_policy(context)\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='dataflow_step',\n      log_name='log_id(\"cloudaudit.googleapis.com/activity\")',\n      filter_str=' AND '.join(LOG_FILTER),\n  )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  has_role = True\n\n  project = crm.get_project(context.project_id)\n  policies_by_project[context.project_id] = iam.get_project_policy(context)\n\n  # skip entire rule if logging is disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'logging api is disabled')\n    return\n\n  # skip entire rule if dataflow API is disabled\n  if not apis.is_enabled(context.project_id, 'dataflow'):\n    report.add_skipped(project, 'dataflow api is disabled')\n    return\n\n  if context.project_id in logs_by_project:\n    failed_jobs = set()\n    for log_entry in logs_by_project[context.project_id].entries:\n      service_account = get_path(\n          log_entry,\n          ('protoPayload', 'request', 'serviceAccount'),\n      )\n\n      job_id = get_path(\n          log_entry,\n          ('protoPayload', 'request', 'job_id'),\n      )\n\n      sa_dataflow_worker_role = policies_by_project[\n          context.project_id].has_role_permissions(\n              member=f'serviceAccount:{service_account}', role=WORKER_ROLE)\n\n      sa_owner_role = policies_by_project[\n          context.project_id].has_role_permissions(\n              member=f'serviceAccount:{service_account}', role=OWNER_ROLE)\n\n      sa_editor_role = policies_by_project[\n          context.project_id].has_role_permissions(\n              member=f'serviceAccount:{service_account}', role=EDITOR_ROLE)\n\n      if sa_dataflow_worker_role or sa_owner_role or sa_editor_role:\n        continue\n      else:\n        has_role = False\n        failed_jobs.add('SA ' + service_account + ' used in ' + job_id + ' ' +\n                        'does not has the role roles/dataflow.worker \\n')\n\n    if failed_jobs:\n      report.add_failed(\n          project,\n          'Some Dataflow jobs in which worker SA did not have Dataflow Worker'\n          ' role: ' + ', '.join(itertools.islice(failed_jobs, 100)),\n      )\n\n  if has_role:\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/dataflow/err_2023_009_splunk_err_invalid_cert.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Splunk HEC endpoint uses a valid public SSL certificate, or a correct root-CA certificate.\n\nThe Dataflow job will fail if the root-CA certificate provided is not the\ncorrect one or if the endpoint is not signed by a valid issuer.\nCheck that the issuer for the certificate is\nvalid and the correct certificate is provided.\n\"\"\"\n# pylint: enable=line-too-long\n\nfrom itertools import islice\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nMATCH_STRINGS = [\n    'Error writing to Splunk',\n    'unable to find valid certification path to requested target',\n]\nLOG_FILTER = [\n    'severity=ERROR',\n    'jsonPayload.message: (\"{}\")'.format('\" AND \"'.join(MATCH_STRINGS)),\n]\n\nproject_logs = {}\nMAX_JOBS_TO_DISPLAY = 10\n\n\ndef prepare_rule(context: models.Context):\n  project_id = context.project_id\n  log_name = 'log_id(\"dataflow.googleapis.com/worker\")'\n  # f'projects/{project_id}/logs/dataflow.googleapis.com%2Fworker'\n  project_logs[project_id] = logs.query(\n      project_id=project_id,\n      resource_type='dataflow_step',\n      log_name=log_name,\n      filter_str=' AND '.join(LOG_FILTER))  # \"returns LogsQuery object\"\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  \"\"\"Check that no (Splunk) job has invalid certification path error.\"\"\"\n  project = crm.get_project(context.project_id)\n\n  # skip entire rule if logging is disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'logging api is disabled')\n    return\n\n  # skip entire rule if dataflow API is disabled\n  if not apis.is_enabled(context.project_id, 'dataflow'):\n    report.add_skipped(project, 'dataflow api is disabled')\n    return\n\n  if (context.project_id in project_logs and\n      project_logs[context.project_id].entries):\n    failed_jobs = set()\n    for log_entry in project_logs[context.project_id].entries:\n      current_entry = get_path(log_entry, ('jsonPayload', 'message'), '')\n\n      if log_entry['severity'] != 'ERROR' or all(\n          m not in current_entry for m in MATCH_STRINGS):\n        continue\n\n      job_id = get_path(log_entry, ('resource', 'labels', 'job_id'))\n      failed_jobs.add(job_id)\n\n    if failed_jobs:\n      extra_jobs = (f', and {len(failed_jobs) - MAX_JOBS_TO_DISPLAY} more jobs'\n                    if len(failed_jobs) > MAX_JOBS_TO_DISPLAY else '')\n\n      report.add_failed(\n          project,\n          f'{len(failed_jobs)} job(s) contain invalid certification path'\n          f\" errors: {', '.join(islice(failed_jobs, 20))} {extra_jobs}\",\n      )\n    else:\n      # only irrelevant logs were fetched\n      report.add_ok(project)\n\n  else:\n    # no logs matched the filter\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/dataflow/err_2023_010_bq_streaming_insert_missing_field.py",
    "content": "#\n# Copyright 2023 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Dataflow job with streaming inserts did not fail due to missing required field.\n\nThe Dataflow job writing to bigquery using streaming inserts can fail due to\nmissing required column.\n\"\"\"\n\nfrom itertools import islice\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nMATCH_STRINGS = [\n    ' java.io.IOException: Insert failed:', 'Insert failed',\n    'Missing required field:'\n]\nLOG_FILTER = [\n    'severity=ERROR',\n    'jsonPayload.message: (\"{}\")'.format('\" AND \"'.join(MATCH_STRINGS)),\n]\n\nproject_logs = {}\nMAX_JOBS_TO_DISPLAY = 10\n\n\ndef prepare_rule(context: models.Context):\n  project_id = context.project_id\n  log_name = 'log_id(\"dataflow.googleapis.com/worker\")'\n  # f'projects/{project_id}/logs/dataflow.googleapis.com%2Fworker'\n  project_logs[project_id] = logs.query(\n      project_id=project_id,\n      resource_type='dataflow_step',\n      log_name=log_name,\n      filter_str=' AND '.join(LOG_FILTER))  # \"returns LogsQuery object\"\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  \"\"\"Check that no (dataflow) job failed due to missing bigquery field during streaming inserts.\"\"\"\n  project = crm.get_project(context.project_id)\n\n  # skip entire rule if logging is disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'logging api is disabled')\n    return\n\n  # skip entire rule if dataflow API is disabled\n  if not apis.is_enabled(context.project_id, 'dataflow'):\n    report.add_skipped(project, 'dataflow api is disabled')\n    return\n\n  if (context.project_id in project_logs and\n      project_logs[context.project_id].entries):\n    failed_jobs = set()\n    for log_entry in project_logs[context.project_id].entries:\n      current_entry = get_path(log_entry, ('jsonPayload', 'message'), '')\n\n      if log_entry['severity'] != 'ERROR' or all(\n          m not in current_entry for m in MATCH_STRINGS):\n        continue\n\n      job_id = get_path(log_entry, ('resource', 'labels', 'job_id'))\n      failed_jobs.add(job_id)\n\n    if failed_jobs:\n      extra_jobs = (f', and {len(failed_jobs) - MAX_JOBS_TO_DISPLAY} more jobs'\n                    if len(failed_jobs) > MAX_JOBS_TO_DISPLAY else '')\n\n      report.add_failed(\n          project,\n          f'{len(failed_jobs)} job(s) failed due to Required field missing'\n          f\" errors: {', '.join(islice(failed_jobs, MAX_JOBS_TO_DISPLAY))} {extra_jobs}\",\n      )\n    else:\n      # only irrelevant logs were fetched\n      report.add_ok(project)\n\n  else:\n    # no logs matched the filter\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/dataflow/err_2023_011_bq_streaming_insert_mismatch_column.py",
    "content": "#\n# Copyright 2023 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Dataflow job using streaming insert did not fail due to mismatched column type.\n\nThe Dataflow job writing to bigquery using streaming inserts can fail due to mismatched column type.\n\"\"\"\n\nfrom itertools import islice\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nMATCH_STRINGS = [\n    ' java.io.IOException: Insert failed:', 'Insert failed',\n    'Cannot convert value to integer (bad value):str_for_int_column'\n]\nLOG_FILTER = [\n    'severity=ERROR',\n    'jsonPayload.message: (\"{}\")'.format('\" AND \"'.join(MATCH_STRINGS)),\n]\n\nproject_logs = {}\nMAX_JOBS_TO_DISPLAY = 10\n\n\ndef prepare_rule(context: models.Context):\n  project_id = context.project_id\n  log_name = 'log_id(\"dataflow.googleapis.com/worker\")'\n  project_logs[project_id] = logs.query(\n      project_id=project_id,\n      resource_type='dataflow_step',\n      log_name=log_name,\n      filter_str=' AND '.join(LOG_FILTER))  # \"returns LogsQuery object\"\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  \"\"\"Check that no (dataflow) job failed due to mismatched column type error.\"\"\"\n  project = crm.get_project(context.project_id)\n\n  # skip entire rule if logging is disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'logging api is disabled')\n    return\n\n  # skip entire rule if dataflow API is disabled\n  if not apis.is_enabled(context.project_id, 'dataflow'):\n    report.add_skipped(project, 'dataflow api is disabled')\n    return\n\n  if (context.project_id in project_logs and\n      project_logs[context.project_id].entries):\n    failed_jobs = set()\n    for log_entry in project_logs[context.project_id].entries:\n      current_entry = get_path(log_entry, ('jsonPayload', 'message'), '')\n\n      if log_entry['severity'] != 'ERROR' or all(\n          m not in current_entry for m in MATCH_STRINGS):\n        continue\n\n      job_id = get_path(log_entry, ('resource', 'labels', 'job_id'))\n      failed_jobs.add(job_id)\n\n    if failed_jobs:\n      extra_jobs = (f', and {len(failed_jobs) - MAX_JOBS_TO_DISPLAY} more jobs'\n                    if len(failed_jobs) > MAX_JOBS_TO_DISPLAY else '')\n\n      report.add_failed(\n          project,\n          f'{len(failed_jobs)} job(s) failed due to mismatched column type'\n          f\" errors: {', '.join(islice(failed_jobs, MAX_JOBS_TO_DISPLAY))} {extra_jobs}\",\n      )\n    else:\n      # only irrelevant logs were fetched\n      report.add_ok(project)\n\n  else:\n    # no logs matched the filter\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/dataflow/err_2023_012_dataflow_spanner_oom.py",
    "content": "#\n# Copyright 2023 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Dataflow job writing to spanner did not fail due to OOM.\n\n\nDataflow jobs that write to Spanner can potentially fail due to out-of-memory\n(OOM) errors. This is because the SpannerIO.write() transform, used to write\ndata to Spanner, buffers mutations in memory to improve efficiency, and\nexcessive memory use for buffering can lead to OOM errors.\n\n\"\"\"\n\nfrom itertools import islice\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nMATCH_STRINGS = [\n    'Error message from worker: Processing stuck in step SpannerIO.Write/Write'\n]\nLOG_FILTER = [\n    'severity=ERROR',\n    'jsonPayload.message: (\"{}\")'.format('\" AND \"'.join(MATCH_STRINGS)),\n]\n\nproject_logs = {}\nMAX_JOBS_TO_DISPLAY = 10\n\n\ndef prepare_rule(context: models.Context):\n  project_id = context.project_id\n  log_name = 'log_id(\"dataflow.googleapis.com/worker\")'\n  # f'projects/{project_id}/logs/dataflow.googleapis.com%2Fworker'\n  project_logs[project_id] = logs.query(\n      project_id=project_id,\n      resource_type='dataflow_step',\n      log_name=log_name,\n      filter_str=' AND '.join(LOG_FILTER))  # \"returns LogsQuery object\"\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  \"\"\"Check that no (dataflow) job writing to spanner failed due to OOM.\"\"\"\n  project = crm.get_project(context.project_id)\n\n  # skip entire rule if logging is disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'logging api is disabled')\n    return\n\n  # skip entire rule if dataflow API is disabled\n  if not apis.is_enabled(context.project_id, 'dataflow'):\n    report.add_skipped(project, 'dataflow api is disabled')\n    return\n\n  if (context.project_id in project_logs and\n      project_logs[context.project_id].entries):\n    failed_jobs = set()\n    for log_entry in project_logs[context.project_id].entries:\n      current_entry = get_path(log_entry, ('jsonPayload', 'message'), '')\n\n      if log_entry['severity'] != 'ERROR' or all(\n          m not in current_entry for m in MATCH_STRINGS):\n        continue\n\n      job_id = get_path(log_entry, ('resource', 'labels', 'job_id'))\n      failed_jobs.add(job_id)\n\n    if failed_jobs:\n      extra_jobs = (f', and {len(failed_jobs) - MAX_JOBS_TO_DISPLAY} more jobs'\n                    if len(failed_jobs) > MAX_JOBS_TO_DISPLAY else '')\n\n      report.add_failed(\n          project,\n          f'{len(failed_jobs)} job(s) failed due to OOM'\n          f\" errors: {', '.join(islice(failed_jobs, MAX_JOBS_TO_DISPLAY))} {extra_jobs}\",\n      )\n    else:\n      # only irrelevant logs were fetched\n      report.add_ok(project)\n\n  else:\n    # no logs matched the filter\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/dataflow/err_2023_013_dataflow_spanner_deadline_exceeded.py",
    "content": "#\n# Copyright 2023 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Dataflow job reading from spanner did not fail due to deadline exceeded error.\n\nThe Dataflow job reading from spanner, failed with deadline exceeded error\n\na. If the job is not already using shuffle service, try enabling shuffle service.\nb. Timeouts are caused by too large work items.\nTo make sure there are no timeouts, it is recommended trying to tweak\nsome configurations in Spanner Read such as “maxPartittions” and “partitionSizeBytes”.\nc. If the CPU utilization is high, might have to scale up the metadata database.\n\n\"\"\"\n# pylint: enable=line-too-long\n\nfrom itertools import islice\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nMATCH_STRINGS = ['com.google.cloud.spanner.SpannerException: DEADLINE_EXCEEDED']\nLOG_FILTER = [\n    'severity=ERROR',\n    'jsonPayload.message: (\"{}\")'.format('\" AND \"'.join(MATCH_STRINGS)),\n]\n\nproject_logs = {}\nMAX_JOBS_TO_DISPLAY = 10\n\n\ndef prepare_rule(context: models.Context):\n  project_id = context.project_id\n  log_name = 'log_id(\"dataflow.googleapis.com/worker\")'\n  # f'projects/{project_id}/logs/dataflow.googleapis.com%2Fworker'\n  project_logs[project_id] = logs.query(\n      project_id=project_id,\n      resource_type='dataflow_step',\n      log_name=log_name,\n      filter_str=' AND '.join(LOG_FILTER))  # \"returns LogsQuery object\"\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  \"\"\"Check that no (dataflow) job reading from spanner failed with error.\"\"\"\n  project = crm.get_project(context.project_id)\n\n  # skip entire rule if logging is disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'logging api is disabled')\n    return\n\n  # skip entire rule if dataflow API is disabled\n  if not apis.is_enabled(context.project_id, 'dataflow'):\n    report.add_skipped(project, 'dataflow api is disabled')\n    return\n\n  if (context.project_id in project_logs and\n      project_logs[context.project_id].entries):\n    failed_jobs = set()\n    for log_entry in project_logs[context.project_id].entries:\n      current_entry = get_path(log_entry, ('jsonPayload', 'message'), '')\n\n      if log_entry['severity'] != 'ERROR' or all(\n          m not in current_entry for m in MATCH_STRINGS):\n        continue\n\n      job_id = get_path(log_entry, ('resource', 'labels', 'job_id'))\n      failed_jobs.add(job_id)\n\n    if failed_jobs:\n      extra_jobs = (f', and {len(failed_jobs) - MAX_JOBS_TO_DISPLAY} more jobs'\n                    if len(failed_jobs) > MAX_JOBS_TO_DISPLAY else '')\n\n      report.add_failed(\n          project,\n          f'{len(failed_jobs)} job(s) failed due to deadline exceeded'\n          f\" errors: {', '.join(islice(failed_jobs, 20))} {extra_jobs}\",\n      )\n    else:\n      # only irrelevant logs were fetched\n      report.add_ok(project)\n\n  else:\n    # no logs matched the filter\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/dataflow/err_2024_001_dataflow_gce_quotas.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Dataflow job is not facing GCE resource constraints.\n\nThe Dataflow job will return these errors when you are hitting GCE resource\nquotas due to which workers will not be successfully launched.\n\"\"\"\n# pylint: enable=line-too-long\n\nfrom itertools import islice\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nMATCH_STRINGS = [\n    'has insufficient quota(s) to execute this workflow',\n    'The quota check has failed',\n    'Quota exceeded',\n    'Compute Engine API has not fully initialized',\n    'Throttling logger worker',\n    'This workload is drawing too much egress bandwidth from Cloud Storage',\n    'Per-customer shuffle size limit exceeded',\n    'RESOURCE_EXHAUSTED: Exceeds \\'AppendRows throughput\\' quota',\n    'RESOURCE_EXHAUSTED: Exceeds \\'Concurrent connections\\'',\n    'RESOURCE_EXHAUSTED: Exceeds \\'CreateWriteStream requests\\'',\n]\nLOG_FILTER = [\n    'severity>=WARNING',\n    'textPayload: (\"{}\")'.format('\" OR \"'.join(MATCH_STRINGS)),\n]\n\nproject_logs = {}\nMAX_JOBS_TO_DISPLAY = 10\n\n\ndef prepare_rule(context: models.Context):\n  project_id = context.project_id\n  log_name = 'log_id(\"dataflow.googleapis.com/job-message\")'\n  project_logs[project_id] = logs.query(\n      project_id=project_id,\n      resource_type='dataflow_step',\n      log_name=log_name,\n      filter_str=' AND '.join(LOG_FILTER),\n  )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n\n  # skip entire rule if logging is disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'logging api is disabled')\n    return\n\n  # skip entire rule if dataflow API is disabled\n  if not apis.is_enabled(context.project_id, 'dataflow'):\n    report.add_skipped(project, 'dataflow api is disabled')\n    return\n\n  if (context.project_id in project_logs and\n      project_logs[context.project_id].entries):\n    failed_jobs = set()\n    for log_entry in project_logs[context.project_id].entries:\n      current_entry = get_path(log_entry, 'textPayload', '')\n      if (log_entry['severity'] != 'WARNING' or\n          log_entry['severity'] != 'ERROR' or\n          not any(m not in current_entry for m in MATCH_STRINGS)):\n        continue\n\n      job_id = get_path(log_entry, ('resource', 'labels', 'job_id'))\n      failed_jobs.add(job_id)\n\n    if failed_jobs:\n      extra_jobs = (f', and {len(failed_jobs) - MAX_JOBS_TO_DISPLAY} more jobs'\n                    if len(failed_jobs) > MAX_JOBS_TO_DISPLAY else '')\n\n      report.add_failed(\n          project,\n          f'{len(failed_jobs)} job(s) are unable to start due to insufficient'\n          ' quota(s). Please verify corresponding GCE quotas being exceeded'\n          ' and have the customer request an increase.'\n          f\" {', '.join(islice(failed_jobs, 20))} {extra_jobs}\",\n      )\n    else:\n      # only irrelevant logs were fetched\n      report.add_ok(project)\n\n  else:\n    # no logs matched the filter\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/dataflow/err_2024_002_dataflow_key_commit.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Dataflow job is not returning KeyCommitTooLargeException errors.\n\nThe Dataflow job will return this error due to grouping of a very large amount\nof data in a single window without using Combine, or by producing a large amount\nof data from a single input element.\n\"\"\"\n\nfrom itertools import islice\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nMATCH_STRINGS = [\n    'KeyCommitTooLargeException',\n    ('This may be caused by grouping a very large amount of data in a single'\n     ' window without using Combine, or by producing a large amount of data'\n     ' from a single input element'),\n]\nLOG_FILTER = [\n    'severity=ERROR',\n    'jsonPayload.message: (\"{}\")'.format('\" OR \"'.join(MATCH_STRINGS)),\n]\n\nproject_logs = {}\nMAX_JOBS_TO_DISPLAY = 10\n\n\ndef prepare_rule(context: models.Context):\n  project_id = context.project_id\n  log_name = 'log_id(\"dataflow.googleapis.com/worker\")'\n  # f'projects/{project_id}/logs/dataflow.googleapis.com%2Fjob-message'\n  project_logs[project_id] = logs.query(\n      project_id=project_id,\n      resource_type='dataflow_step',\n      log_name=log_name,\n      filter_str=' AND '.join(LOG_FILTER),\n  )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n\n  # skip entire rule if logging is disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'logging api is disabled')\n    return\n\n  # skip entire rule if dataflow API is disabled\n  if not apis.is_enabled(context.project_id, 'dataflow'):\n    report.add_skipped(project, 'dataflow api is disabled')\n    return\n\n  if (context.project_id in project_logs and\n      project_logs[context.project_id].entries):\n    failed_jobs = set()\n    for log_entry in project_logs[context.project_id].entries:\n      current_entry = get_path(log_entry, 'textPayload', '')\n      if log_entry['severity'] != 'ERROR' or not any(m not in current_entry\n                                                     for m in MATCH_STRINGS):\n        continue\n\n      job_id = get_path(log_entry, ('resource', 'labels', 'job_id'))\n      failed_jobs.add(job_id)\n\n    if failed_jobs:\n      extra_jobs = (f', and {len(failed_jobs) - MAX_JOBS_TO_DISPLAY} more jobs'\n                    if len(failed_jobs) > MAX_JOBS_TO_DISPLAY else '')\n\n      report.add_failed(\n          project,\n          f'{len(failed_jobs)} job(s) contain `KeyCommitTooLargeException`'\n          f\" errors: {', '.join(islice(failed_jobs, 20))} {extra_jobs}\",\n      )\n    else:\n      # only irrelevant logs were fetched\n      report.add_ok(project)\n\n  else:\n    # no logs matched the filter\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/dataflow/err_2024_003_dataflow_write_truncate_unbounded.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Streaming Dataflow jobs are not using WRITE_TRUNCATE when working with unbounded PCollections.\n\nDataflow jobs when using WRITE_TRUNCATE with unbounded PCollections sources\nwould return the warning 'WriteDisposition.WRITE_TRUNCATE is not supported for\nan unbounded PCollection'. When setting this via Dataflow SQL on the console,\nthis option would not appear.\n\"\"\"\n\nimport itertools\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nMATCH_STR = ('WriteDisposition.WRITE_TRUNCATE is not supported for an unbounded'\n             ' PCollection')\n\n# Criteria to filter for logs\nLOG_FILTER = ['severity=WARNING', f'jsonPayload.message=~\"{MATCH_STR}\"']\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='dataflow_step',\n      log_name='log_id(\"dataflow.googleapis.com/job-message\")',\n      filter_str=' AND '.join(LOG_FILTER),\n  )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n\n  # skip entire rule if Logging or Dataflow APIs are disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'logging api is disabled')\n    return\n\n  if not apis.is_enabled(context.project_id, 'dataflow'):\n    report.add_skipped(project, 'dataflow api is disabled')\n    return\n\n  if context.project_id in logs_by_project:\n    failed_jobs = set()\n    for log_entry in logs_by_project[context.project_id].entries:\n      # Filter out non-relevant log entries.\n      if log_entry['severity'] != 'WARNING' or MATCH_STR not in get_path(\n          log_entry, 'jsonPayload.message', default=''):\n        continue\n\n      job_id = get_path(\n          log_entry,\n          ('resource', 'labels', 'job_id'),\n      )\n\n      failed_jobs.add(job_id)\n\n    if failed_jobs:\n      report.add_failed(\n          project,\n          'Dataflow jobs are using WRITE_TRUNCATE which does not work with'\n          ' unbounded PCollection: ' +\n          ', '.join(itertools.islice(failed_jobs, 20)),\n      )\n    else:\n      report.add_ok(project)\n  else:\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/dataflow/err_2024_004_missing_gcs_permission_temp_bucket.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"The Dataflow job has the necessary GCS permissions for the temporary bucket.\n\nTwo primary reasons cause Dataflow jobs to fail when writing to a storage\nbucket: either the specified bucket does not exist within the targeted Google\nCloud project, or the associated service account lacks the necessary permissions\nto write to it.\n\"\"\"\n\nimport re\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nMATCH_STR = 'Failed to write a file to temp location'\n\n# Criteria to filter for logs\nLOG_FILTER = ['severity=ERROR', f'textPayload=~\"{MATCH_STR}\"']\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='dataflow_step',\n      log_name='log_id(\"dataflow.googleapis.com/job-message\")',\n      filter_str=' AND '.join(LOG_FILTER),\n  )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  \"\"\"Runs the rule and reports any failed checks.\n\n  Args:\n    context: Context of the rule.\n    report: A report object to report fail findings.\n  \"\"\"\n  project = crm.get_project(context.project_id)\n\n  # skip entire rule if Logging or Dataflow APIs are disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'logging api is disabled')\n    return\n\n  if not apis.is_enabled(context.project_id, 'dataflow'):\n    report.add_skipped(project, 'dataflow api is disabled')\n    return\n\n  project_ok_flag = True\n\n  if logs_by_project.get(context.project_id) and \\\n     logs_by_project[context.project_id].entries:\n    failed_jobs = set()\n    for log_entry in logs_by_project[context.project_id].entries:\n      # Filter out non-relevant log entries.\n      if log_entry['severity'] != 'ERROR' or MATCH_STR not in get_path(\n          log_entry, 'textPayload', default=''):\n        continue\n\n      project_ok_flag = False\n\n      job_name = get_path(\n          log_entry,\n          ('resource', 'labels', 'job_name'),\n      )\n\n      message = get_path(log_entry, 'textPayload')\n      bucket_name_pattern = r\"'([^']+)'\"\n      match = re.search(bucket_name_pattern, message)\n      bucket_name = None\n\n      if match:\n        bucket_name = match.group(1)\n\n      if job_name not in failed_jobs:\n        failed_jobs.add(job_name)\n        report.add_failed(\n            project,\n            f'Check {bucket_name} bucket exists and\\nCheck {job_name} Dataflow'\n            ' job Missing GCS permissions for temp bucket',\n        )\n\n  if project_ok_flag:\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/dataflow/err_2024_005_dataflow_not_creating_pubsub_subscription.py",
    "content": "#\n# Copyright 2024 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n# pylint: disable=line-too-long\n\"\"\"Dataflow and its controller service account have the necessary permissions to interact with Pub/Sub topics.\n\nThis rule ensures your Dataflow jobs have the `pubsub.subscriber` role to read messages,\nand the controller service account has the `pubsub.topics.get` permission (typically included in `pubsub.viewer`)\nto manage subscriptions. Without the correct permissions, Dataflow jobs will fail to create subscriptions,\nresulting in `GETTING_PUBSUB_SUBSCRIPTION_FAILED` errors and disrupting your data pipelines.\n\"\"\"\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nMATCH_STR1 = 'GETTING_PUBSUB_SUBSCRIPTION_FAILED'\nMATCH_STR2 = 'User not authorized to perform this action'\n\n# Criteria to filter for logs\nLOG_FILTER = [\n    'severity>=WARNING', f'textPayload=~(\"{MATCH_STR1}\" AND \"{MATCH_STR2}\")'\n]\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='dataflow_step',\n      log_name='log_id(\"dataflow.googleapis.com/job-message\")',\n      filter_str=' AND '.join(LOG_FILTER),\n  )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  \"\"\"The method first checks if the Logging or Dataflow APIs are enabled for the project.\n\n  If either API is disabled, the method skips the rule and returns.\n  If both APIs are enabled, the method checks for the log entries in the project.\n  If the log entries are found, the method reports the failed resources.\n\n  Args:\n    context: The context for the rule, including the project_id and other info.\n    report: The report to which any failed resources will be added.\n  \"\"\"\n  project = crm.get_project(context.project_id)\n\n  # skip entire rule if Logging or Dataflow APIs are disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'logging api is disabled')\n    return\n\n  if not apis.is_enabled(context.project_id, 'dataflow'):\n    report.add_skipped(project, 'dataflow api is disabled')\n    return\n\n  project_ok_flag = True\n\n  if context.project_id in logs_by_project:\n    failed_jobs = set()\n    for log_entry in logs_by_project[context.project_id].entries:\n      # Filter out non-relevant log entries.\n      if log_entry['severity'] != 'WARNING' or MATCH_STR1 not in get_path(\n          log_entry, 'textPayload', default=''):\n        continue\n\n      project_ok_flag = False\n\n      job_id = get_path(\n          log_entry,\n          ('resource', 'labels', 'job_id'),\n      )\n\n      if job_id not in failed_jobs:\n        failed_jobs.add(job_id)\n        report.add_failed(\n            project,\n            f'Dataflow not creating Pub/Sub subscriptions for the job id:{job_id}'\n        )\n\n  if project_ok_flag:\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/dataflow/snapshots/BP_2023_001.txt",
    "content": "*  dataflow/BP/2023_001: Dataflow job is using supported Apache Beam SDK version\n   - projects/gcpdiag-datafusion1-aaaa                                    [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/dataflow/snapshots/ERR_2023_001.txt",
    "content": "*  dataflow/ERR/2023_001: Dataflow service account has dataflow.serviceAgent role\n\n"
  },
  {
    "path": "gcpdiag/lint/dataflow/snapshots/ERR_2023_002.txt",
    "content": "*  dataflow/ERR/2023_002: Dataflow job does not fail during execution due to IP space exhaustion\n   - projects/gcpdiag-datafusion1-aaaa                                    [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/dataflow/snapshots/ERR_2023_003.txt",
    "content": "*  dataflow/ERR/2023_003: Dataflow job does not fail during execution due to incorrect specification of subnet\n   - projects/gcpdiag-datafusion1-aaaa                                    [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/dataflow/snapshots/ERR_2023_004.txt",
    "content": "*  dataflow/ERR/2023_004: Dataflow job does not fail due to violating an organization policy constraint in project\n   - projects/gcpdiag-datafusion1-aaaa                                    [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/dataflow/snapshots/ERR_2023_005.txt",
    "content": "*  dataflow/ERR/2023_005: Dataflow job does not fail during execution due credential or permission issue\n   - projects/gcpdiag-datafusion1-aaaa                                    [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/dataflow/snapshots/ERR_2023_006.txt",
    "content": "*  dataflow/ERR/2023_006: Dataflow job fails if Private Google Access is disabled on Subnetwork\n   - projects/gcpdiag-datafusion1-aaaa                                    [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/dataflow/snapshots/ERR_2023_007.txt",
    "content": "*  dataflow/ERR/2023_007: Streaming Dataflow job gets stuck when firewall rules are not configured\n   - projects/gcpdiag-datafusion1-aaaa                                    [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/dataflow/snapshots/ERR_2023_008.txt",
    "content": "*  dataflow/ERR/2023_008: Dataflow worker service account has roles/dataflow.worker role\n   - projects/gcpdiag-datafusion1-aaaa                                    [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/dataflow/snapshots/ERR_2023_009.txt",
    "content": "*  dataflow/ERR/2023_009: Splunk HEC endpoint uses a valid public SSL certificate, or a correct root-CA certificate.\n   - projects/gcpdiag-datafusion1-aaaa                                    [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/dataflow/snapshots/ERR_2023_010.txt",
    "content": "*  dataflow/ERR/2023_010: Dataflow job with streaming inserts did not fail due to missing required field.\n   - projects/gcpdiag-datafusion1-aaaa                                    [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/dataflow/snapshots/ERR_2023_011.txt",
    "content": "*  dataflow/ERR/2023_011: Dataflow job using streaming insert did not fail due to mismatched column type.\n   - projects/gcpdiag-datafusion1-aaaa                                    [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/dataflow/snapshots/ERR_2023_012.txt",
    "content": "*  dataflow/ERR/2023_012: Dataflow job writing to spanner did not fail due to OOM.\n   - projects/gcpdiag-datafusion1-aaaa                                    [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/dataflow/snapshots/ERR_2023_013.txt",
    "content": "*  dataflow/ERR/2023_013: Dataflow job reading from spanner did not fail due to deadline exceeded error.\n   - projects/gcpdiag-datafusion1-aaaa                                    [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/dataflow/snapshots/ERR_2024_001.txt",
    "content": "*  dataflow/ERR/2024_001: Dataflow job is not facing GCE resource constraints.\n   - projects/gcpdiag-datafusion1-aaaa                                    [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/dataflow/snapshots/ERR_2024_002.txt",
    "content": "*  dataflow/ERR/2024_002: Dataflow job is not returning KeyCommitTooLargeException errors.\n   - projects/gcpdiag-datafusion1-aaaa                                    [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/dataflow/snapshots/ERR_2024_003.txt",
    "content": "*  dataflow/ERR/2024_003: Streaming Dataflow jobs are not using WRITE_TRUNCATE when working with unbounded PCollections.\n   - projects/gcpdiag-datafusion1-aaaa                                    [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/dataflow/snapshots/ERR_2024_004.txt",
    "content": "*  dataflow/ERR/2024_004: The Dataflow job has the necessary GCS permissions for the temporary bucket.\n   - projects/gcpdiag-datafusion1-aaaa                                    [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/dataflow/snapshots/ERR_2024_005.txt",
    "content": "*  dataflow/ERR/2024_005: Dataflow and its controller service account have the necessary permissions to interact with Pub/Sub topics.\n   - projects/gcpdiag-datafusion1-aaaa                                    [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/dataflow/snapshots/WARN_2023_001.txt",
    "content": "*  dataflow/WARN/2023_001: Dataflow job does not have a hot key\n   - projects/gcpdiag-datafusion1-aaaa                                    [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/dataflow/snapshots/WARN_2023_003.txt",
    "content": "*  dataflow/WARN/2023_003: Dataflow worker logs are not Throttled\n   - projects/gcpdiag-datafusion1-aaaa                                    [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/dataflow/snapshots/WARN_2023_004.txt",
    "content": "*  dataflow/WARN/2023_004: Dataflow job are not stuck at draining state for more than 3 hours\n   - projects/gcpdiag-datafusion1-aaaa                                    [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/dataflow/snapshots/WARN_2023_006.txt",
    "content": "*  dataflow/WARN/2023_006: A Dataflow job is not stuck in the canceling state\n   - projects/gcpdiag-datafusion1-aaaa                                    [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/dataflow/snapshots/WARN_2024_001.txt",
    "content": "*  dataflow/WARN/2024_001: Dataflow job is not returning Operation ongoing or Processing Stuck logs.\n   - projects/gcpdiag-datafusion1-aaaa                                    [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/dataflow/snapshots/WARN_2024_002.txt",
    "content": "*  dataflow/WARN/2024_002: Dataflow job using Streaming Appliance is not getting stuck due to Commit failed: computation doesn't have the state family.\n   - projects/gcpdiag-datafusion1-aaaa                                    [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/dataflow/warn_2023_001_dataflow_hot_key.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Dataflow job does not have a hot key\n\nA Dataflow job might have hot key which can limit the ability of Dataflow\nto process elements in parallel, which increases execution time.\n\"\"\"\n\nimport itertools\nimport re\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nMATCH_STR1 = r'A hot key(\\s' '.*' ')? was detected in step'\nMATCH_STR2 = 'A hot key was detected'\ncontains_required_pattern1 = re.compile(MATCH_STR1)\ncontains_required_pattern2 = re.compile(MATCH_STR2)\n\n# Criteria to filter for logs\nLOG_FILTER = [\n    'severity>=WARNING',\n    f'textPayload=~\"{MATCH_STR1}\" OR \"{MATCH_STR2}\"',\n]\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='dataflow_step',\n      log_name=('log_id(\"dataflow.googleapis.com/worker\") OR'\n                ' log_id(\"dataflow.googleapis.com/harness\")'),\n      filter_str=' AND '.join(LOG_FILTER),\n  )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'logging api is disabled')\n    return\n\n  if not apis.is_enabled(context.project_id, 'dataflow'):\n    report.add_skipped(project, 'dataflow api is disabled')\n    return\n\n  if (logs_by_project.get(context.project_id) and\n      logs_by_project[context.project_id].entries):\n    failed_jobs = set()\n    for log_entry in logs_by_project[context.project_id].entries:\n      # Filter out non-relevant log entries.\n\n      msg = get_path(log_entry, 'textPayload', default='')\n\n      contains_required1 = contains_required_pattern1.search(msg)\n      contains_required2 = contains_required_pattern2.search(msg)\n\n      if not (log_entry['severity'] >= 'WARNING' and\n              (contains_required1 or contains_required2)):\n        continue\n\n      job_id = get_path(\n          log_entry,\n          ('resource', 'labels', 'job_id'),\n      )\n\n      failed_jobs.add(job_id)\n\n    if failed_jobs:\n      report.add_failed(\n          project,\n          'Some Dataflow jobs having hot key are: ' +\n          ', '.join(itertools.islice(failed_jobs, 20)),\n      )\n    else:\n      report.add_ok(project)\n  else:\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/dataflow/warn_2023_003_dataflow_worker_logs_throttled.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Dataflow worker logs are not Throttled\n\nCheck that worker logs are not throttled in Dataflow jobs.\n\"\"\"\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm\nfrom gcpdiag.queries.logs_helper import Equals, LogsQuery, REFound\n\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = LogsQuery(\n      project_id=context.project_id,\n      resource_type='dataflow_step',\n      log_name='log_id(\"dataflow.googleapis.com/worker\")',\n      search_exprs=[\n          Equals(field='severity', value='WARNING'),\n          REFound(\n              field='jsonPayload.message',\n              re_exp='Throttling logger worker',\n          )\n      ])\n  logs_by_project[context.project_id].mk_query()\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n\n  # skip entire rule if Logging or Dataflow API is disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'logging api is disabled')\n    return\n\n  if not apis.is_enabled(context.project_id, 'dataflow'):\n    report.add_skipped(project, 'dataflow api is disabled')\n    return\n\n  logs_query = logs_by_project[context.project_id]\n\n  if logs_query.has_matching_entries:\n    unique_jobs = logs_query.get_unique(lambda e: get_path(\n        e, ('resource', 'labels', 'job_name'), default='unknown job'))\n    report.add_failed(project,\n                      f'Dataflow worker logs are throttled: {unique_jobs}')\n  else:\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/dataflow/warn_2023_004_dataflow_stuck_at_draining.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Dataflow job are not stuck at draining state for more than 3 hours\n\nA Dataflow job might got stuck at draining as\ndraining doesn't fix stuck pipelines.\n\"\"\"\n\nimport itertools\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, dataflow\n\ndataflow_jobs_by_project = {}\n\n\ndef prefetch_rule(context: models.Context):\n  dataflow_jobs_by_project[context.project_id] = dataflow.get_all_dataflow_jobs(\n      context)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n\n  if not apis.is_enabled(context.project_id, 'dataflow'):\n    report.add_skipped(project, 'dataflow api is disabled')\n    return\n\n  jobs = dataflow_jobs_by_project[context.project_id]\n\n  failed_jobs = set()\n\n  if not jobs:\n    report.add_skipped(None, 'no jobs found')\n\n  for job in jobs:\n    if job.state == 'JOB_STATE_DRAINING':\n      if job.minutes_in_current_state > 180:\n        failed_jobs.add(job.id)\n      else:\n        continue\n    else:\n      continue\n\n  if failed_jobs:\n    report.add_failed(\n        project,\n        'Some Dataflow jobs stuck in draining for more than 3 hours are: ' +\n        ', '.join(itertools.islice(failed_jobs, 20)),\n    )\n  else:\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/dataflow/warn_2023_006_dataflow_stuck_at_cancelling.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"A Dataflow job is not stuck in the canceling state\n\nA Dataflow job may get stuck in the canceling state if\nit is requested to cancel while a snapshot is in progress.\n\"\"\"\n\nimport itertools\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, dataflow\n\ndataflow_jobs_by_project = {}\n\n\ndef prefetch_rule(context: models.Context):\n  dataflow_jobs_by_project[context.project_id] = dataflow.get_all_dataflow_jobs(\n      context)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n\n  if not apis.is_enabled(context.project_id, 'dataflow'):\n    report.add_skipped(project, 'dataflow api is disabled')\n    return\n\n  jobs = dataflow_jobs_by_project[context.project_id]\n\n  failed_jobs = set()\n\n  if not jobs:\n    report.add_skipped(None, 'no jobs found')\n\n  for job in jobs:\n    if job.state == 'JOB_STATE_CANCELLING':\n      if job.minutes_in_current_state > 30:\n        failed_jobs.add(job.id)\n\n  if failed_jobs:\n    report.add_failed(\n        project,\n        'Some Dataflow jobs stuck in the cancelling state for more than 30 minutes: '\n        + ', '.join(itertools.islice(failed_jobs, 20)),\n    )\n  else:\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/dataflow/warn_2024_001_dataflow_operation_ongoing.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n# pylint: disable=line-too-long\n\"\"\"Dataflow job is not returning Operation ongoing or Processing Stuck logs.\n\nThe Dataflow job will return this warning when your DoFn code is slow, or\nwaiting for some slow external operation to complete or when your DoFn code\nmight be stuck, deadlocked, or abnormally slow to finish processing.\n\"\"\"\n# pylint: enable=line-too-long\n\nfrom itertools import islice\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nMATCH_STRINGS = [\n    'Operation ongoing',\n    'Processing Stuck',\n]\nLOG_FILTER = [\n    'severity=WARNING',\n    'jsonPayload.message: (\"{}\")'.format('\" OR \"'.join(MATCH_STRINGS)),\n]\n\nproject_logs = {}\nMAX_JOBS_TO_DISPLAY = 10\n\n\ndef prepare_rule(context: models.Context):\n  project_id = context.project_id\n  log_name = 'log_id(\"dataflow.googleapis.com/worker\")'\n  # f'projects/{project_id}/logs/dataflow.googleapis.com%2Fworker'\n  project_logs[project_id] = logs.query(\n      project_id=project_id,\n      resource_type='dataflow_step',\n      log_name=log_name,\n      filter_str=' AND '.join(LOG_FILTER),\n  )  # \"returns LogsQuery object\"\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n\n  # skip entire rule if logging is disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'logging api is disabled')\n    return\n\n  # skip entire rule if dataflow API is disabled\n  if not apis.is_enabled(context.project_id, 'dataflow'):\n    report.add_skipped(project, 'dataflow api is disabled')\n    return\n\n  if (context.project_id in project_logs and\n      project_logs[context.project_id].entries):\n    failed_jobs = set()\n    for log_entry in project_logs[context.project_id].entries:\n      current_entry = get_path(log_entry, ('jsonPayload', 'message'), '')\n      if log_entry['severity'] != 'WARNING' or not any(m not in current_entry\n                                                       for m in MATCH_STRINGS):\n        continue\n\n      job_id = get_path(log_entry, ('resource', 'labels', 'job_id'))\n      failed_jobs.add(job_id)\n\n    if failed_jobs:\n      extra_jobs = (f', and {len(failed_jobs) - MAX_JOBS_TO_DISPLAY} more jobs'\n                    if len(failed_jobs) > MAX_JOBS_TO_DISPLAY else '')\n\n      report.add_failed(\n          project,\n          f'{len(failed_jobs)} job(s) contain `Operation ongoing` or'\n          ' `Processing Stuck` logs errors:'\n          f\" {', '.join(islice(failed_jobs, 20))} {extra_jobs}\",\n      )\n    else:\n      # only irrelevant logs were fetched\n      report.add_ok(project)\n\n  else:\n    # no logs matched the filter\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/dataflow/warn_2024_002_dataflow_streaming_appliance_commit_failed.py",
    "content": "#\n# Copyright 2023 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n# pylint: disable=line-too-long\n\"\"\"Dataflow job using Streaming Appliance is not getting stuck due to Commit failed: computation doesn't have the state family.\n\nFlatten operations should not be followed by a ParDo that uses a side input,\ndoing so will return the above warning and cause the job to get stuck while\nrunning. The recommendation is restructuring the pipeline so that the ParDos\nwith side inputs should come before any flatten operations.\n\"\"\"\n# pylint: enable=line-too-long\n\nfrom itertools import islice\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nMATCH_STRINGS = ['Commit failed: computation', 'have the state family']\nLOG_FILTER = [\n    'severity=WARNING',\n    'jsonPayload.message: (\"{}\")'.format('\" AND \"'.join(MATCH_STRINGS)),\n]\n\nproject_logs = {}\nMAX_JOBS_TO_DISPLAY = 10\n\n\ndef prepare_rule(context: models.Context):\n  project_id = context.project_id\n  log_name = 'log_id(\"dataflow.googleapis.com/shuffler\")'\n  project_logs[project_id] = logs.query(\n      project_id=project_id,\n      resource_type='dataflow_step',\n      log_name=log_name,\n      filter_str=' AND '.join(LOG_FILTER),\n  )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n\n  # skip entire rule if logging is disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'logging api is disabled')\n    return\n\n  # skip entire rule if dataflow API is disabled\n  if not apis.is_enabled(context.project_id, 'dataflow'):\n    report.add_skipped(project, 'dataflow api is disabled')\n    return\n\n  if (context.project_id in project_logs and\n      project_logs[context.project_id].entries):\n    failed_jobs = set()\n    for log_entry in project_logs[context.project_id].entries:\n      current_entry = get_path(log_entry, ('jsonPayload', 'message'), '')\n\n      if log_entry['severity'] != 'WARNING' or all(\n          m not in current_entry for m in MATCH_STRINGS):\n        continue\n\n      job_id = get_path(log_entry, ('resource', 'labels', 'job_id'))\n      failed_jobs.add(job_id)\n\n    if failed_jobs:\n      extra_jobs = (f', and {len(failed_jobs) - MAX_JOBS_TO_DISPLAY} more jobs'\n                    if len(failed_jobs) > MAX_JOBS_TO_DISPLAY else '')\n\n      report.add_failed(\n          project,\n          f'{len(failed_jobs)} job(s) are stuck due to computation does not'\n          ' have the state family warnings:'\n          f\" {', '.join(islice(failed_jobs, 20))} {extra_jobs}\",\n      )\n    else:\n      # only irrelevant logs were fetched\n      report.add_ok(project)\n\n  else:\n    # no logs matched the filter\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/datafusion/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/lint/datafusion/datafusion_rules_snapshot_test.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Generalize rule snapshot testing\"\"\"\n\nfrom unittest import mock\n\nfrom gcpdiag.lint import datafusion, snapshot_test_base\nfrom gcpdiag.queries import datafusion_test\n\n\n@mock.patch(\n    'gcpdiag.queries.datafusion.extract_support_datafusion_version',\n    new=lambda: datafusion_test.SUPPORTED_VERSIONS_DICT,\n)\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = datafusion\n  project_id = 'gcpdiag-datafusion1-aaaa'\n"
  },
  {
    "path": "gcpdiag/lint/datafusion/err_2022_001_connectivity_dataproc_vms.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# Note that we don't have a general rule that checks this for all products,\n# because the grant is done lazily, as soon as it is needed. So check that the\n# grant is there only when resources of a certain product (like GKE clusters)\n# are present, and we know that the grant is necessary for the correct\n# operation of that product. Copy the rule for other products, as necessary.\n\"\"\"\nData Fusion instance firewall rules are configured.\n\nPrivate Data Fusion instances and Data Fusion versions below 6.2.0\nrequire a firewall rule allowing incoming connections on TCP port 22\nfrom the Data Fusion service to Dataproc VMs in the configured network.\n\"\"\"\nimport ipaddress\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import datafusion\nfrom gcpdiag.queries.datafusion import Version\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  instances = datafusion.get_instances(context)\n  if not instances:\n    report.add_skipped(None, 'no instances found')\n\n  for instance in instances.values():\n\n    if instance.is_private:\n      # Private INGRESS i.network (Dataproc) <-- i.tp_ipv4_cidr:22 (Data Fusion TP)\n      result = instance.network.firewall.check_connectivity_ingress(\n          src_ip=instance.tp_ipv4_cidr, ip_protocol='tcp', port=22)\n\n      if result.action == 'deny':\n        if result.matched_by_str is None:\n          report.add_failed(\n              instance,\n              'network %s is missing firewall rule allowing connections from %s over port %s.'\n              % (instance.network.short_path, instance.tp_ipv4_cidr, 22))\n        else:\n          report.add_failed(\n              instance,\n              'connections from %s over port %s blocked by %s in network %s' %\n              (instance.tp_ipv4_cidr, 22, result.matched_by_str,\n               instance.network.short_path))\n\n        continue\n\n    elif instance.version < Version('6.2.0'):\n      # Public INGRESS i.network (Dataproc) <-- 0.0.0.0/0:22 (Data Fusion TP)\n      result = instance.network.firewall.check_connectivity_ingress(\n          src_ip=ipaddress.ip_network('0.0.0.0/0'), ip_protocol='tcp', port=22)\n\n      if result.action == 'deny':\n        if result.matched_by_str is None:\n          report.add_failed(\n              instance,\n              'network %s is missing firewall rule allowing connections from 0.0.0.0/0 over port %s'\n              % (instance.network.short_path, 22))\n        else:\n          report.add_failed(\n              instance,\n              'connections from 0.0.0.0/0 over port %s blocked by %s in network %s'\n              % (22, result.matched_by_str, instance.network.short_path))\n\n        continue\n\n    report.add_ok(instance)\n"
  },
  {
    "path": "gcpdiag/lint/datafusion/err_2022_002_shared_vpc_ip_range.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Note that we don't have a general rule that checks this for all products,\n# because the grant is done lazily, as soon as it is needed. So check that the\n# grant is there only when resources of a certain product (like GKE clusters)\n# are present, and we know that the grant is necessary for the correct\n# operation of that product. Copy the rule for other products, as necessary.\n\"\"\"\nPrivate Data Fusion instance has valid host VPC IP range.\n\nPrivate Data Fusion instance using Shared VPC requires\n'Service Networking API' to be enabled, and an IP range of at least /22.\n\"\"\"\n\nimport re\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, datafusion\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  instances = datafusion.get_instances(context)\n  if not instances:\n    report.add_skipped(None, 'no instances found')\n\n  for instance in instances.values():\n    if instance.is_private and instance.uses_shared_vpc:\n      match = re.match(r'([^/]+)/([^/]+)$', instance.network.short_path)\n      if match:\n        host_project = match.group(1)\n        if apis.is_enabled(host_project, 'servicenetworking'):\n          if instance.tp_ipv4_cidr is not None:\n            if instance.tp_ipv4_cidr.prefixlen > 22:\n              report.add_failed(\n                  instance,\n                  'Allocated IP range %s in host VPC network %s is too small.' %\n                  (instance.tp_ipv4_cidr, instance.network.short_path))\n          else:\n            report.add_failed(\n                instance,\n                'Host VPC network %s has no Data Fusion allocated IP range.' %\n                (instance.network.short_path))\n\n        else:\n          report.add_failed(\n              instance,\n              'Service Networking API disabled in host VPC project %s.' %\n              (host_project))\n      else:\n        report.add_failed(\n            instance, 'failed to extract project id from network path %s.' %\n            (instance.network.short_path))\n\n    report.add_ok(instance)\n"
  },
  {
    "path": "gcpdiag/lint/datafusion/err_2022_003_private_peering.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Note that we don't have a general rule that checks this for all products,\n# because the grant is done lazily, as soon as it is needed. So check that the\n# grant is there only when resources of a certain product (like GKE clusters)\n# are present, and we know that the grant is necessary for the correct\n# operation of that product. Copy the rule for other products, as necessary.\n\"\"\"\nPrivate Data Fusion instance is peered to the tenant project.\n\nPrivate Data Fusion instance requires peered connection to\nData Fusion tenant project.\n\"\"\"\n\nimport re\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import datafusion\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  instances = datafusion.get_instances(context)\n  if not instances:\n    report.add_skipped(None, 'no instances found')\n\n  for instance in instances.values():\n\n    if instance.is_private:\n\n      is_peered_to_tp = False\n\n      if instance.network.peerings is not None:\n\n        #Check all peered connections for the correct Data Fusion one.\n        for peer in instance.network.peerings:\n          match = re.match(\n              r'https://www.googleapis.com/compute/([^/]+)/'\n              'projects/([^/]+)/([^/]+)/networks/([^/]+)$', peer.url)\n\n          if match:\n            peered_project = match.group(2)\n            peered_network = match.group(4)\n\n            if peered_project == instance.tenant_project_id:\n              if instance.location in peered_network:\n\n                #Data Fusion peered VPC network name = INSTANCE_REGION-INSTANCE_ID\n                peer_instance_name = peered_network.removeprefix(\n                    instance.location)\n                peer_instance_name = peer_instance_name.removeprefix('-')\n\n                if peer_instance_name == instance.name:\n                  if peer.state == 'ACTIVE':\n                    if peer.exports_custom_routes:\n                      if peer.imports_custom_routes:\n\n                        is_peered_to_tp = True\n                        break\n\n                      else:\n                        report.add_failed(\n                            instance,\n                            (f'peered connection {peer.name} in network '\n                             f'{instance.network.short_path} '\n                             f'is not importing custom routes.'))\n\n                    else:\n                      report.add_failed(\n                          instance,\n                          (f'peered connection {peer.name} in network '\n                           f'{instance.network.short_path} '\n                           f'is not exporting custom routes.'))\n\n                  else:\n                    report.add_failed(\n                        instance,\n                        (f'peered connection {peer.name} in network '\n                         f'{instance.network.short_path} is not active.'))\n\n          else:\n            report.add_failed(\n                instance,\n                (f'failed to extract project id and network id from peer url '\n                 f'{peer.url}.'))\n\n      if not is_peered_to_tp:\n        report.add_failed(\n            instance,\n            (f'private instance network {instance.network.short_path} '\n             f'is not correctly peered to tenant project '\n             f'{instance.tenant_project_id}.'))\n      else:\n        report.add_ok(instance)\n\n    else:\n      report.add_ok(instance)\n"
  },
  {
    "path": "gcpdiag/lint/datafusion/err_2022_004_cloud_datafusion_sa_permissions.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Cloud Data Fusion Service Account permissions\n\nVerify that the Cloud Data Fusion Service Agent account exists and has\nthe Cloud Data Fusion Service Agent role on the project.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, iam\n\nDATAFUSION_ROLE = 'roles/datafusion.serviceAgent'\n\npolicies_by_project = {}\n\n\ndef prefetch_rule(context: models.Context):\n  policies_by_project[context.project_id] = iam.get_project_policy(context)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project_id = context.project_id\n  project = crm.get_project(project_id)\n  datafusion_sa = f'service-{project.number}@gcp-sa-datafusion.iam.gserviceaccount.com'\n  if not apis.is_enabled(project_id, 'datafusion'):\n    report.add_skipped(None,\n                       f'Cloud Data Fusion API is not enabled in {project}')\n    return\n  if not policies_by_project[project_id].has_role_permissions(\n      f'serviceAccount:{datafusion_sa}', DATAFUSION_ROLE):\n    report.add_failed(\n        project,\n        f'The Cloud Data Fusion Service Account is missing {DATAFUSION_ROLE} or does not exist'\n    )\n  else:\n    report.add_ok(project, f'\\n{datafusion_sa} has {DATAFUSION_ROLE}')\n"
  },
  {
    "path": "gcpdiag/lint/datafusion/err_2022_005_host_vpc_permissions.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Note that we don't have a general rule that checks this for all products,\n# because the grant is done lazily, as soon as it is needed. So check that the\n# grant is there only when resources of a certain product (like GKE clusters)\n# are present, and we know that the grant is necessary for the correct\n# operation of that product. Copy the rule for other products, as necessary.\n\"\"\"\nPrivate Data Fusion instance has networking permissions.\n\nPrivate Data Fusion instance requires networking permissions.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import crm, datafusion, iam, network\n\nCOMPUTE_NETWORK_USER_ROLE = 'roles/compute.networkUser'\nCOMPUTE_NETWORK_VIEWER_ROLE = 'roles/compute.networkViewer'\n\n\ndef validate_iam_roles(context: models.Context, service_account: str,\n                       service_account_name: str, host_project: str,\n                       host_iam_policy: iam.BaseIAMPolicy,\n                       instance: datafusion.Instance,\n                       report: lint.LintReportRuleInterface) -> bool:\n\n  # Project Level Check\n  sa_has_net_user = host_iam_policy.has_role_permissions(\n      f'serviceAccount:{service_account}', COMPUTE_NETWORK_USER_ROLE)\n\n  if not sa_has_net_user:\n    sa_has_net_viewer = host_iam_policy.has_role_permissions(\n        f'serviceAccount:{service_account}', COMPUTE_NETWORK_VIEWER_ROLE)\n\n    # Subnet Level Check\n    for subnet in instance.network.subnetworks.values():\n      if subnet.region == instance.location:\n        subnet_iam_policy = network.get_subnetwork_iam_policy(\n            context, instance.location, subnet.name)\n\n        sa_has_net_user = subnet_iam_policy.has_role_permissions(\n            f'serviceAccount:{service_account}', COMPUTE_NETWORK_USER_ROLE)\n        if sa_has_net_user:\n          break\n\n    if not sa_has_net_viewer and sa_has_net_user:\n      report.add_failed(instance,\n                        (f'{service_account_name} {service_account} '\n                         f'missing {COMPUTE_NETWORK_VIEWER_ROLE} IAM role on '\n                         f'host project {host_project}.'))\n      return False\n    elif sa_has_net_viewer and not sa_has_net_user:\n      report.add_failed(instance,\n                        (f'{service_account_name} {service_account} '\n                         f'missing {COMPUTE_NETWORK_USER_ROLE} IAM role on '\n                         f'subnetwork with region {instance.location} '\n                         f'in host network {instance.network.short_path}'))\n      return False\n    elif not sa_has_net_viewer and not sa_has_net_user:\n      report.add_failed(instance,\n                        (f'{service_account_name} {service_account} '\n                         f'missing {COMPUTE_NETWORK_USER_ROLE} IAM role on '\n                         f'host project {host_project}.'))\n      return False\n\n  return True\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n\n  instances = datafusion.get_instances(context)\n  if not instances:\n    report.add_skipped(None, 'no instances found')\n\n  service_project = crm.get_project(context.project_id)\n  datafusion_service_agent = (f'service-{service_project.number}'\n                              f'@gcp-sa-datafusion.iam.gserviceaccount.com')\n  dataproc_service_agent = (f'service-{service_project.number}'\n                            f'@dataproc-accounts.iam.gserviceaccount.com')\n\n  for instance in instances.values():\n    if instance.uses_shared_vpc and not instance.is_deleting:\n\n      host_project = instance.network.project_id\n      host_project_context = context.copy_with(project_id=host_project)\n      host_iam_policy = iam.get_project_policy(host_project_context)\n\n      datafusion_sa_is_valid = validate_iam_roles(\n          host_project_context,\n          datafusion_service_agent,\n          'Cloud Data Fusion API Service Agent',\n          host_project,\n          host_iam_policy,\n          instance,\n          report,\n      )\n\n      dataproc_sa_is_valid = validate_iam_roles(\n          host_project_context,\n          dataproc_service_agent,\n          'Dataproc Service Agent service account',\n          host_project,\n          host_iam_policy,\n          instance,\n          report,\n      )\n\n      if datafusion_sa_is_valid and dataproc_sa_is_valid:\n        report.add_ok(instance)\n\n    else:\n      report.add_ok(instance)\n"
  },
  {
    "path": "gcpdiag/lint/datafusion/err_2022_006_private_google_access.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Note that we don't have a general rule that checks this for all products,\n# because the grant is done lazily, as soon as it is needed. So check that the\n# grant is there only when resources of a certain product (like GKE clusters)\n# are present, and we know that the grant is necessary for the correct\n# operation of that product. Copy the rule for other products, as necessary.\n\"\"\"\nPrivate Google Access enabled for private Data Fusion instance subnetwork.\n\nPrivate Google Access required on private Data Fusion instance subnetwork.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import datafusion\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  instances = datafusion.get_instances(context)\n  if not instances:\n    report.add_skipped(None, 'no instances found')\n\n  for instance in instances.values():\n\n    if instance.is_private:\n\n      is_private_ip_google_access = False\n\n      for subnet in instance.network.subnetworks.values():\n        if subnet.region == instance.location:\n          is_private_ip_google_access = subnet.is_private_ip_google_access()\n          if is_private_ip_google_access:\n            break\n\n      if not is_private_ip_google_access:\n        report.add_failed(instance,\n                          (f'Private Google Access is not enabled on '\n                           f'subnetwork with region {instance.location} '\n                           f'in network {instance.network.short_path}'))\n      else:\n        report.add_ok(instance)\n\n    else:\n      report.add_ok(instance)\n"
  },
  {
    "path": "gcpdiag/lint/datafusion/err_2022_007_cloud_datafusion_sa_permissions.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"\nCloud Data Fusion Service Account exists\n\nCloud Data Fusion Service Account fetched from a Cloud Data Fusion instance\nis missing at a Project's IAM policy\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, datafusion, iam\n\nprojects_instances = {}\nIAM_ROLE = 'roles/iam.serviceAccountUser'\n\n\ndef prefetch_rule(context: models.Context):\n  projects_instances[context.project_id] = datafusion.get_instances(context)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  if not apis.is_enabled(context.project_id, 'datafusion'):\n    report.add_skipped(\n        None,\n        f'Cloud Data Fusion API is not enabled in {crm.get_project(context.project_id)}'\n    )\n    return\n  datafusion_instances = projects_instances[context.project_id]\n  if not datafusion_instances:\n    report.add_skipped(None, 'Cloud Data Fusion instances were not found')\n    return\n\n  for _, datafusion_instance in sorted(datafusion_instances.items()):\n    iam_policy = iam.get_project_policy(context)\n\n    p4sa = datafusion_instance.api_service_agent\n    if not p4sa:\n      report.add_skipped(\n          None, f'{datafusion_instance.name} '\n          f'does not have Cloud Data Fusion Service Account')\n      continue\n    datafusion_sa = 'serviceAccount:' + p4sa\n    members = iam_policy.get_members()\n    result = datafusion_sa in members\n    if not result:\n      report.add_failed(\n          datafusion_instance,\n          f'{datafusion_sa} missing or does not exist at project')\n    else:\n      report.add_ok(datafusion_instance)\n"
  },
  {
    "path": "gcpdiag/lint/datafusion/err_2022_008_cloud_datafusion_sa_permissions.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"\nCloud Data Fusion SA has Service Account User permissions on the Dataproc SA.\n\nCloud Data Fusion Service Account is missing Service Account User permissions\non the Dataproc service account associated with the Data Fusion instance.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, datafusion, iam\n\nIAM_ROLE = 'roles/iam.serviceAccountUser'\n\nprojects_instances = {}\n\n\ndef prefetch_rule(context: models.Context):\n  projects_instances[context.project_id] = datafusion.get_instances(context)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  if not apis.is_enabled(context.project_id, 'datafusion'):\n    report.add_skipped(\n        None,\n        f'Cloud Data Fusion API is not enabled in {crm.get_project(context.project_id)}'\n    )\n    return\n  datafusion_instances = projects_instances[context.project_id]\n  if not datafusion_instances:\n    report.add_skipped(None,\n                       f'no Cloud Data Fusion instances were found {context}')\n    return\n\n  iam_policy = iam.get_project_policy(context)\n  constructed_datafusion_sa = ('serviceAccount:service-{project_number}'\n                               '@gcp-sa-datafusion.iam.gserviceaccount.com')\n  project_iam_policy_result = iam_policy.has_role_permissions(\n      constructed_datafusion_sa, IAM_ROLE)\n\n  for _, datafusion_instance in sorted(datafusion_instances.items()):\n    dataproc_service_account = datafusion_instance.dataproc_service_account\n    if not dataproc_service_account:\n      report.add_skipped(\n          None, f'{datafusion_instance.name} '\n          'does not have DataProc Service Account')\n      continue\n    service_account_iam_policy = iam.get_service_account_iam_policy(\n        context, dataproc_service_account)\n    p4sa = datafusion_instance.api_service_agent\n    datafusion_sa = 'serviceAccount:' + p4sa\n    sa_iam_policy_result = service_account_iam_policy.has_role_permissions(\n        datafusion_sa, IAM_ROLE)\n    if project_iam_policy_result or sa_iam_policy_result:\n      report.add_ok(datafusion_instance)\n    else:\n      report.add_failed(\n          datafusion_instance, f'{datafusion_sa}\\nlacks {IAM_ROLE} '\n          f'on DataProc SA ({dataproc_service_account}) associated with '\n          f'{datafusion_instance.name}')\n"
  },
  {
    "path": "gcpdiag/lint/datafusion/err_2022_009_cloud_dataproc_sa_permissions.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"\nCloud Dataproc Service Account has a Cloud Data Fusion Runner role.\n\nCloud Dataproc Service Account is missing a Cloud Data Fusion Runner role\nat the Project's IAM policy.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, datafusion, iam\n\nDF_RUNNER = 'roles/datafusion.runner'\n\nprojects_instances = {}\n\n\ndef prefetch_rule(context: models.Context):\n  projects_instances[context.project_id] = datafusion.get_instances(context)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  if not apis.is_enabled(context.project_id, 'datafusion'):\n    report.add_skipped(\n        None,\n        f'Cloud Data Fusion API is not enabled in {crm.get_project(context.project_id)}'\n    )\n    return\n  datafusion_instances = projects_instances[context.project_id]\n  if not datafusion_instances:\n    report.add_skipped(None,\n                       f'no Cloud Data Fusion instances not found {context}')\n    return\n\n  iam_policy = iam.get_project_policy(context)\n\n  for _, datafusion_instance in sorted(datafusion_instances.items()):\n    instance_dataproc_sa = datafusion_instance.dataproc_service_account\n    if not instance_dataproc_sa:\n      report.add_skipped(\n          None, f'{datafusion_instance.name} '\n          'does not have DataProc Service Account')\n      continue\n    dataproc_sa = 'serviceAccount:' + instance_dataproc_sa\n    project_policy_result = iam_policy.has_role_permissions(\n        dataproc_sa, DF_RUNNER)\n    if project_policy_result:\n      report.add_ok(datafusion_instance)\n    else:\n      report.add_failed(datafusion_instance, f'{dataproc_sa} lacks {DF_RUNNER}')\n"
  },
  {
    "path": "gcpdiag/lint/datafusion/err_2022_010_cloud_datafusion_sa_permissions.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"\nCloud Dataproc Service Account has a Dataproc Worker role.\n\nCloud Dataproc Service Account associated with a Cloud DataFusion instance is\nmissing a Dataproc Worker role at the Project's IAM policy.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, datafusion, iam\n\nDP_WORKER = 'roles/dataproc.worker'\n\nprojects_instances = {}\n\n\ndef prefetch_rule(context: models.Context):\n  projects_instances[context.project_id] = datafusion.get_instances(context)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  if not apis.is_enabled(context.project_id, 'datafusion'):\n    report.add_skipped(\n        None,\n        f'Cloud Data Fusion API is not enabled in {crm.get_project(context.project_id)}'\n    )\n    return\n  datafusion_instances = projects_instances[context.project_id]\n  if not datafusion_instances:\n    report.add_skipped(None,\n                       f'no Cloud Data Fusion instances not found {context}')\n    return\n\n  iam_policy = iam.get_project_policy(context)\n\n  for _, datafusion_instance in sorted(datafusion_instances.items()):\n    instance_dataproc_sa = datafusion_instance.dataproc_service_account\n    if not instance_dataproc_sa:\n      report.add_skipped(\n          None, f'{datafusion_instance.name} '\n          'does not have Dataproc Service Account')\n      continue\n    dataproc_sa = 'serviceAccount:' + instance_dataproc_sa\n    project_policy_result = iam_policy.has_role_permissions(\n        dataproc_sa, DP_WORKER)\n    if project_policy_result:\n      report.add_ok(datafusion_instance)\n    else:\n      report.add_failed(datafusion_instance, f'{dataproc_sa} lacks {DP_WORKER}')\n"
  },
  {
    "path": "gcpdiag/lint/datafusion/err_2022_011_cloud_datafusion_sa_permissions.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"\nThe Dataproc SA for a CDF instance with version > 6.2.0 has Storage Admin role.\n\nThe Dataproc Service Account associated with a Cloud Data Fusion instance with\nversion > 6.2.0 is missing the Cloud Storage Admin role\n\"\"\"\n\nfrom packaging import version\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, datafusion, iam\n\nSTORAGE_ADMIN = 'roles/storage.admin'\n\nprojects_instances = {}\n\n\ndef prefetch_rule(context: models.Context):\n  projects_instances[context.project_id] = datafusion.get_instances(context)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  if not apis.is_enabled(context.project_id, 'datafusion'):\n    report.add_skipped(\n        None,\n        f'Cloud Data Fusion API is not enabled in {crm.get_project(context.project_id)}'\n    )\n    return\n  datafusion_instances = projects_instances[context.project_id]\n  if not datafusion_instances:\n    report.add_skipped(None,\n                       f'Cloud Data Fusion instances were not found {context}')\n    return\n  iam_policy = iam.get_project_policy(context)\n  for datafusion_instance in sorted(datafusion_instances.values()):\n    instance_dataproc_sa = datafusion_instance.dataproc_service_account\n    if not instance_dataproc_sa:\n      report.add_skipped(\n          None, f'{datafusion_instance.name} '\n          f'does not have DataProc Service Account')\n    df_instance_version = datafusion_instance.version\n    if version.parse(str(df_instance_version)) < version.parse('6.2.0'):\n      report.add_skipped(None,\n                         'Rule only applicable for datafusion version >=6.2.0')\n      continue\n    dataproc_sa = 'serviceAccount:' + instance_dataproc_sa\n    project_policy_result = iam_policy.has_role_permissions(\n        dataproc_sa, STORAGE_ADMIN)\n    if project_policy_result:\n      report.add_ok(datafusion_instance)\n    else:\n      report.add_failed(datafusion_instance,\n                        f'{dataproc_sa} lacks {STORAGE_ADMIN}')\n"
  },
  {
    "path": "gcpdiag/lint/datafusion/err_2024_001_delete_operation_failing.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Datafusion delete operation not failing.\n\nDuring the instance deletion process there are cases wherein a networking\nresource (i.e route) in the tenant project might not get deleted due to which\nthe process gets stalled in Deleting, and other reasons include missing IAM\nroles in Google managed datafusion serviceAccount.\n\"\"\"\nimport re\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, datafusion, iam, logs\n\nSERVICE_NAME = 'datafusion.googleapis.com'\nMETHOD_NAME = 'google.cloud.datafusion.v1.DataFusion.DeleteInstance'\n\nlogs_by_project = {}\nprojects_instances = {}\nprojects = {}\nIAM_ROLE = 'roles/datafusion.serviceAgent'\nFILTER_1 = [\n    'severity=ERROR',\n    f'protoPayload.serviceName:(\"{SERVICE_NAME}\")',\n    f'protoPayload.methodName:(\"{METHOD_NAME}\")',\n]\n\n\ndef find_instance(arr_of_datafusion_envs: dict, search_str: str):\n  for instance in arr_of_datafusion_envs.values():\n    if instance.full_path == search_str:\n      return instance\n\n\ndef prefetch_rule(context: models.Context):\n  projects[context.project_id] = crm.get_project(context.project_id)\n  projects_instances[context.project_id] = datafusion.get_instances(context)\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='audited_resource',\n      log_name='log_id(\"cloudaudit.googleapis.com/activity\")',\n      filter_str=' AND '.join(FILTER_1),\n  )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  \"\"\"Checks if Data Fusion instance delete operation is failing.\n\n  Args:\n    context: The context for the rule, including the project_id, credentials,\n      and other info.\n    report: The report to which to report results.\n  \"\"\"\n  if not apis.is_enabled(context.project_id, 'datafusion'):\n    report.add_skipped(\n        None,\n        'Cloud Data Fusion API is not enabled in'\n        f' { projects[context.project_id]}',\n    )\n    return\n\n  datafusion_instances = projects_instances[context.project_id]\n  project = projects[context.project_id]\n\n  if not datafusion_instances:\n    report.add_skipped(None,\n                       f'Cloud Data Fusion instances were not found {context}')\n    return\n\n  instance_full_path_set = set()\n  deleting_instance_flag = False\n\n  for datafusion_instance in sorted(datafusion_instances.values()):\n    instance_full_path_set.add(datafusion_instance.full_path)\n    if datafusion_instance.is_deleting:\n      deleting_instance_flag = True\n\n  if (logs_by_project.get(context.project_id) and \\\n     logs_by_project[context.project_id].entries) or deleting_instance_flag:\n\n    iam_policy = iam.get_project_policy(context)\n    datafusion_sa = (\n        f'serviceAccount:service-{project.number}@gcp-sa-datafusion.iam.gserviceaccount.com'\n    )\n    project_iam_policy_result = iam_policy.has_role_permissions(\n        datafusion_sa, IAM_ROLE)\n    if not project_iam_policy_result:\n      report.add_failed(project, f'{datafusion_sa}\\nLacks {IAM_ROLE}')\n      return\n\n  project_ok_flag = True\n\n  for log_entry in logs_by_project[context.project_id].entries:\n    if (log_entry['protoPayload']['methodName'] == METHOD_NAME and\n        log_entry['severity'] == 'ERROR' and\n        log_entry['protoPayload']['resourceName'] in instance_full_path_set):\n\n      message = log_entry['protoPayload']['status']['message']\n      match = re.search(r'::(.*?):([^:]+)\\.', message)\n      instance_name = find_instance(datafusion_instances,\n                                    log_entry['protoPayload']['resourceName'])\n      if match:\n        message = match.group(2)\n      report.add_failed(instance_name, f'{message}')\n      project_ok_flag = False\n      instance_full_path_set.remove(log_entry['protoPayload']['resourceName'])\n\n  if project_ok_flag:\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/datafusion/snapshots/ERR_2022_001.txt",
    "content": "*  datafusion/ERR/2022_001: Data Fusion instance firewall rules are configured.\n   - projects/gcpdiag-datafusion1-aaaa/locations/us-central1/instances/my-instance [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/datafusion/snapshots/ERR_2022_002.txt",
    "content": "*  datafusion/ERR/2022_002: Private Data Fusion instance has valid host VPC IP range.\n   - projects/gcpdiag-datafusion1-aaaa/locations/us-central1/instances/my-instance [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/datafusion/snapshots/ERR_2022_003.txt",
    "content": "*  datafusion/ERR/2022_003: Private Data Fusion instance is peered to the tenant project.\n   - projects/gcpdiag-datafusion1-aaaa/locations/us-central1/instances/my-instance [FAIL]\n     private instance network gcpdiag-datafusion1-aaaa/default is not correctly peered to tenant project fd736090192f24d58-tp.\n\n   Private Data Fusion instance requires peered connection to Data Fusion tenant\n   project.\n\n   https://gcpdiag.dev/rules/datafusion/ERR/2022_003\n\n"
  },
  {
    "path": "gcpdiag/lint/datafusion/snapshots/ERR_2022_004.txt",
    "content": "*  datafusion/ERR/2022_004: Cloud Data Fusion Service Account permissions\n   - projects/gcpdiag-datafusion1-aaaa                                    [ OK ] \nservice-12340010@gcp-sa-datafusion.iam.gserviceaccount.com has roles/datafusion.serviceAgent\n\n"
  },
  {
    "path": "gcpdiag/lint/datafusion/snapshots/ERR_2022_005.txt",
    "content": "*  datafusion/ERR/2022_005: Private Data Fusion instance has networking permissions.\n   - projects/gcpdiag-datafusion1-aaaa/locations/us-central1/instances/my-instance [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/datafusion/snapshots/ERR_2022_006.txt",
    "content": "*  datafusion/ERR/2022_006: Private Google Access enabled for private Data Fusion instance subnetwork.\n   (Error: 'regions/us-east7')                                            [SKIP]\n\n"
  },
  {
    "path": "gcpdiag/lint/datafusion/snapshots/ERR_2022_007.txt",
    "content": "*  datafusion/ERR/2022_007: Cloud Data Fusion Service Account exists\n   - projects/gcpdiag-datafusion1-aaaa/locations/us-central1/instances/my-instance [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/datafusion/snapshots/ERR_2022_008.txt",
    "content": "*  datafusion/ERR/2022_008: Cloud Data Fusion SA has Service Account User permissions on the Dataproc SA.\n   - projects/gcpdiag-datafusion1-aaaa/locations/us-central1/instances/my-instance [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/datafusion/snapshots/ERR_2022_009.txt",
    "content": "*  datafusion/ERR/2022_009: Cloud Dataproc Service Account has a Cloud Data Fusion Runner role.\n   - projects/gcpdiag-datafusion1-aaaa/locations/us-central1/instances/my-instance [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/datafusion/snapshots/ERR_2022_010.txt",
    "content": "*  datafusion/ERR/2022_010: Cloud Dataproc Service Account has a Dataproc Worker role.\n   - projects/gcpdiag-datafusion1-aaaa/locations/us-central1/instances/my-instance [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/datafusion/snapshots/ERR_2022_011.txt",
    "content": "*  datafusion/ERR/2022_011: The Dataproc SA for a CDF instance with version > 6.2.0 has Storage Admin role.\n   - projects/gcpdiag-datafusion1-aaaa/locations/us-central1/instances/my-instance [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/datafusion/snapshots/ERR_2024_001.txt",
    "content": "*  datafusion/ERR/2024_001: Datafusion delete operation not failing.\n   - projects/gcpdiag-datafusion1-aaaa                                    [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/datafusion/snapshots/WARN_2024_001.txt",
    "content": "*  datafusion/WARN/2024_001: Data Fusion version is supported.\n   - projects/gcpdiag-datafusion1-aaaa/locations/us-central1/instances/my-instance [FAIL]\n\n     \tDatafusion Version: 6.7.1\n     \tSupported till 2023-02-28(Upgrade DataFusion Environment)\n\n   A major or minor version of Cloud Data Fusion environment is supported for a\n   specific period of time after it is released.After that period, instances\n   that continue to use the environment version are no longer supported.\n\n   https://gcpdiag.dev/rules/datafusion/WARN/2024_001\n\n"
  },
  {
    "path": "gcpdiag/lint/datafusion/snapshots/WARN_2024_002.txt",
    "content": "*  datafusion/WARN/2024_002: Data Fusion instance is in a running state.\n   - projects/gcpdiag-datafusion1-aaaa/locations/us-central1/instances/my-instance [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/datafusion/snapshots/WARN_2024_003.txt",
    "content": "*  datafusion/WARN/2024_003: Scaling down is disabled for the Compute Profile for Dataproc.\n   - projects/gcpdiag-datafusion1-aaaa/locations/us-central1/instances/my-instance [ OK ] \n\tprojects/gcpdiag-datafusion1-aaaa/instances/my-instance/computeProfiles/autoscaling-dataproc\n\n   - projects/gcpdiag-datafusion1-aaaa/locations/us-central1/instances/my-instance [ OK ] \n\tprojects/gcpdiag-datafusion1-aaaa/instances/my-instance/computeProfiles/dataproc\n\n   - projects/gcpdiag-datafusion1-aaaa/locations/us-central1/instances/my-instance [FAIL]\n       projects/gcpdiag-datafusion1-aaaa/instances/my-instance/computeProfiles/namespace_profile : autoscaling down enabled\n\n\n   Autoscaling is not recommended for scaling down. Decreasing the cluster size\n   with autoscaling removes nodes that hold intermediate data, which might cause\n   your pipelines to run slowly or fail in datafusion.\n\n   https://gcpdiag.dev/rules/datafusion/WARN/2024_003\n\n"
  },
  {
    "path": "gcpdiag/lint/datafusion/snapshots/WARN_2024_004.txt",
    "content": "*  datafusion/WARN/2024_004: Data Fusion version is compatible with Dataproc version from the corresponding compute profiles.\n   - projects/gcpdiag-datafusion1-aaaa/locations/us-central1/instances/my-instance [ OK ] \n\tprojects/gcpdiag-datafusion1-aaaa/instances/my-instance/computeProfiles/autoscaling-dataproc\n\t(No imageVersion defined)\n\n   - projects/gcpdiag-datafusion1-aaaa/locations/us-central1/instances/my-instance [ OK ] \n\tprojects/gcpdiag-datafusion1-aaaa/instances/my-instance/computeProfiles/dataproc\n\t(No imageVersion defined)\n\n   - projects/gcpdiag-datafusion1-aaaa/locations/us-central1/instances/my-instance [FAIL]\n     \tprojects/gcpdiag-datafusion1-aaaa/instances/my-instance/computeProfiles/namespace_profile\n     \tDatafusion version : 6.7.1\n     \tDataproc version : 2.0\n\n\n   The version of your Cloud Data Fusion environment might not be compatible\n   with the version of your Dataproc cluster from the corresponding compute\n   profiles.\n\n   https://gcpdiag.dev/rules/datafusion/WARN/2024_004\n\n"
  },
  {
    "path": "gcpdiag/lint/datafusion/snapshots/WARN_2024_005.txt",
    "content": "*  datafusion/WARN/2024_005: Data Fusion version is compatible with Dataproc version from the CDAP Preferences settings.\n   - projects/gcpdiag-datafusion1-aaaa/locations/us-central1/instances/my-instance [FAIL]\n     Application preferences found\n     pipeline name : pipeline1\n     \tDatafusion version : 6.7.1\n     \tDataproc version : 2.2\n     \tCheck Datafusion version is compatible with Dataproc version (VERSION INCOMPATIBILITY FOUND)\n\n   - projects/gcpdiag-datafusion1-aaaa/locations/us-central1/instances/my-instance [FAIL]\n     \tNamespace preferences found\n     \tnamespace name : default\n     \tDatafusion version : 6.7.1\n     \tDataproc version : 2.1\n     \tCheck Datafusion version is compatible with Dataproc version (VERSION INCOMPATIBILITY FOUND)\n\n   - projects/gcpdiag-datafusion1-aaaa/locations/us-central1/instances/my-instance [FAIL]\n     \tSystem preferences found\n     \tDatafusion version : 6.7.1\n     \tDataproc version : 2.1\n     \tCheck Datafusion version compatible with Dataproc version (VERSION INCOMPATIBILITY FOUND)\n\n\n   The version of your Cloud Data Fusion environment might not be compatible\n   with the version of your Dataproc cluster from the CDAP Preferences\n   settings.Check image version set in the Compute Configurations, Namespace\n   Preferences, or Pipeline Runtime Arguments.\n\n   https://gcpdiag.dev/rules/datafusion/WARN/2024_005\n\n"
  },
  {
    "path": "gcpdiag/lint/datafusion/warn_2024_001_data_fusion_version.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Data Fusion version is supported.\n\nA major or minor version of Cloud Data Fusion environment is supported for a\nspecific period of time after it is released.After that period, instances that\ncontinue to use the environment version are no longer supported.\n\"\"\"\n\nfrom datetime import datetime\n\nfrom packaging import version\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, datafusion\n\nprojects_instances = {}\n\n\ndef prefetch_rule(context: models.Context):\n  projects_instances[context.project_id] = datafusion.get_instances(context)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  \"\"\"Checks if the datafusion version is supported.\n\n  Args:\n    context: The context for the rule, containing the project_id.\n    report: The report to which to report results.\n  \"\"\"\n  version_policy = datafusion.extract_support_datafusion_version()\n\n  if not version_policy:\n    report.add_skipped(None, 'No Supported Versions Data Obtained')\n    return\n\n  if not apis.is_enabled(context.project_id, 'datafusion'):\n    report.add_skipped(\n        None,\n        'Cloud Data Fusion API is not enabled in'\n        f' {crm.get_project(context.project_id)}',\n    )\n    return\n\n  datafusion_instances = projects_instances[context.project_id]\n  if not datafusion_instances:\n    report.add_skipped(None,\n                       f'Cloud Data Fusion instances were not found {context}')\n    return\n\n  current_date = datetime.now().strftime('%Y-%m-%d')\n\n  for datafusion_instance in sorted(datafusion_instances.values()):\n\n    df_instance_parsed_version = version.parse(str(datafusion_instance.version))\n\n    version_to_compare = (\n        f'{df_instance_parsed_version.major}.{df_instance_parsed_version.minor}'\n    )\n\n    if version_to_compare in version_policy:\n      if current_date <= version_policy[version_to_compare]:\n        report.add_ok(\n            datafusion_instance,\n            f'\\n\\tDatafusion Version: {datafusion_instance.version}'\n            f'\\n\\tSupports till {version_policy[version_to_compare]}',\n        )\n      else:\n        report.add_failed(\n            datafusion_instance,\n            '\\n\\tDatafusion Version:'\n            f' {datafusion_instance.version}\\n\\tSupported till'\n            f' {version_policy[version_to_compare]}(Upgrade DataFusion'\n            ' Environment)',\n        )\n"
  },
  {
    "path": "gcpdiag/lint/datafusion/warn_2024_002_instance_state_running.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# Note that we don't have a general rule that checks this for all products,\n# because the grant is done lazily, as soon as it is needed. So check that the\n# grant is there only when resources of a certain product (like GKE clusters)\n# are present, and we know that the grant is necessary for the correct\n# operation of that product. Copy the rule for other products, as necessary.\n\"\"\"Data Fusion instance is in a running state.\n\nData Fusion instance is not in a running state, The datafusion state is either\nDisabled or Failed, The reason for this disabled or Failed state could be due to\nconfiguration errors, KMS key disabled/denied access or key revoked etc...\n\"\"\"\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import datafusion\n\ninstances_by_project = {}\n\n\ndef prefetch_rule(context: models.Context):\n  instances_by_project[context.project_id] = datafusion.get_instances(context)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  instances = instances_by_project[context.project_id]\n  if len(instances) == 0:\n    report.add_skipped(None, 'no instances found')\n  for instance in instances.values():\n    if instance.status not in ('FAILED', 'DISABLED'):\n      report.add_ok(instance)\n    else:\n      if instance.status_details is not None:\n        report.add_failed(\n            instance,\n            (f'Instance is in state {instance.status} '\n             f'with reason: `{instance.status_details}`'),\n        )\n      else:\n        report.add_failed(instance, f'Instance is in state {instance.status} ')\n"
  },
  {
    "path": "gcpdiag/lint/datafusion/warn_2024_003_cluster_scaling_down_disabled.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Scaling down is disabled for the Compute Profile for Dataproc.\n\nAutoscaling is not recommended for scaling down. Decreasing the cluster\nsize with autoscaling removes nodes that hold intermediate data, which might\ncause your pipelines to run slowly or fail in datafusion.\n\"\"\"\nimport re\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, datafusion, dataproc\n\nprojects_instances = {}\n\n\ndef prefetch_rule(context: models.Context):\n  projects_instances[context.project_id] = datafusion.get_instances(context)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  \"\"\"Checks if the autoscaling down is enabled for the compute profile.\"\"\"\n  if not apis.is_enabled(context.project_id, 'datafusion'):\n    report.add_skipped(\n        None,\n        'Cloud Data Fusion API is not enabled in'\n        f' {crm.get_project(context.project_id)}',\n    )\n    return\n\n  datafusion_instances = projects_instances[context.project_id]\n\n  if not datafusion_instances:\n    report.add_skipped(None, f'no Cloud Data Fusion instances found {context}')\n    return\n\n  for _, datafusion_instance in sorted(datafusion_instances.items()):\n    compute_profiles = []\n    # fetch compute profiles of the instance\n    compute_profiles.extend(\n        datafusion.get_instance_system_compute_profile(context,\n                                                       datafusion_instance))\n    compute_profiles.extend(\n        datafusion.get_instance_user_compute_profile(context,\n                                                     datafusion_instance))\n    if not compute_profiles:\n      report.add_skipped(None, 'No compute profile found')\n\n    #Check the autoscaling property\n    for profile in compute_profiles:\n      if profile.autoscaling_enabled:\n        report.add_ok(datafusion_instance, f'\\n\\t{profile}\\n')\n      elif profile.auto_scaling_policy != 'No autoScalingPolicy defined':\n        uri = profile.auto_scaling_policy\n        match = re.match(\n            r'projects/([^/]+)/regions/([^/]+)/autoscalingPolicies/([^/]+)',\n            uri)\n        if match:\n          project_id = match.group(1)\n          region = match.group(2)\n          policy_id = match.group(3)\n          policy = dataproc.get_auto_scaling_policy(project_id, region,\n                                                    policy_id)\n          if policy.scale_down_factor != 0.0:\n            report.add_failed(datafusion_instance,\n                              f'  {profile} : autoscaling down enabled\\n')\n          else:\n            report.add_ok(datafusion_instance, f'\\n\\t{profile}\\n')\n      else:\n        report.add_ok(datafusion_instance, f'\\n\\t{profile}\\n')\n"
  },
  {
    "path": "gcpdiag/lint/datafusion/warn_2024_004_datafusion_dataproc_compatabillity.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Data Fusion version is compatible with Dataproc version from the corresponding compute profiles.\n\nThe version of your Cloud Data Fusion environment might not be compatible with\nthe version of your Dataproc cluster from the corresponding compute profiles.\n\"\"\"\n\nimport re\n\nfrom packaging import version\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, datafusion\n\nprojects_instances = {}\n\n\ndef prefetch_rule(context: models.Context):\n  projects_instances[context.project_id] = datafusion.get_instances(context)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  \"\"\"\n    Checks if the datafusion version is compatible with dataproc version\n    from the corresponding compute profiles.\n  \"\"\"\n  if not apis.is_enabled(context.project_id, 'datafusion'):\n    report.add_skipped(\n        None,\n        'Cloud Data Fusion API is not enabled in'\n        f' {crm.get_project(context.project_id)}',\n    )\n    return\n\n  datafusion_instances = projects_instances[context.project_id]\n\n  if not datafusion_instances:\n    report.add_skipped(None, f'no Cloud Data Fusion instances found {context}')\n    return\n\n  for _, datafusion_instance in sorted(datafusion_instances.items()):\n    compute_profiles = []\n    # fetch compute profiles of the instance\n    compute_profiles.extend(\n        datafusion.get_instance_system_compute_profile(context,\n                                                       datafusion_instance))\n    compute_profiles.extend(\n        datafusion.get_instance_user_compute_profile(context,\n                                                     datafusion_instance))\n    if not compute_profiles:\n      report.add_skipped(None, 'No compute profile found')\n      return\n\n    datafusion_dataproc_version = datafusion.extract_datafusion_dataproc_version(\n    )\n\n    if not datafusion_dataproc_version:\n      report.add_skipped(None,\n                         \"No datafusion and dataproc version's data obtained\")\n\n    # Check the autoscaling property\n    for profile in compute_profiles:\n      if profile.image_version != 'No imageVersion defined':\n        dataproc_version = profile.image_version\n        dataproc_parsed_version = re.match(r'(\\d+\\.\\d+)', dataproc_version)\n        if not dataproc_parsed_version:\n          report.add_skipped(\n              None, f'Dataproc version : {dataproc_version} is not valid')\n          return\n        datafusion_version = version.parse(str(datafusion_instance.version))\n        version_to_compare = (\n            f'{datafusion_version.major}.{datafusion_version.minor}')\n        if version_to_compare in datafusion_dataproc_version:\n          if (dataproc_parsed_version.group(1)\n              in datafusion_dataproc_version[version_to_compare]):\n            report.add_ok(\n                datafusion_instance,\n                f'\\n\\t{profile}\\n\\tDatafusion version :'\n                f' {datafusion_version}\\n\\tDataproc version :'\n                f' {dataproc_version}\\n',\n            )\n          else:\n            report.add_failed(\n                datafusion_instance,\n                f'\\t{profile}\\n\\tDatafusion version :'\n                f' {datafusion_version}\\n\\tDataproc version :'\n                f' {dataproc_version}\\n',\n            )\n      else:\n        report.add_ok(datafusion_instance,\n                      f'\\n\\t{profile}\\n\\t(No imageVersion defined)\\n')\n"
  },
  {
    "path": "gcpdiag/lint/datafusion/warn_2024_005_datafusion_dataproc_compatability_preference.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Data Fusion version is compatible with Dataproc version from the CDAP Preferences settings.\n\nThe version of your Cloud Data Fusion environment might not be compatible with\nthe version of your Dataproc cluster from the CDAP Preferences settings.Check\nimage version set in the Compute Configurations, Namespace Preferences, or\nPipeline Runtime Arguments.\n\"\"\"\n\nimport re\n\nfrom packaging import version\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, datafusion\n\nprojects_instances = {}\n\ndatafusion_dataproc_version = datafusion.extract_datafusion_dataproc_version()\n\n\ndef prefetch_rule(context: models.Context):\n  projects_instances[context.project_id] = datafusion.get_instances(context)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  \"\"\"Checks if the datafusion version is compatible with dataproc version\n\n  from the corresponding compute profiles.\n  \"\"\"\n  if not apis.is_enabled(context.project_id, 'datafusion'):\n    report.add_skipped(\n        None,\n        'Cloud Data Fusion API is not enabled in'\n        f' {crm.get_project(context.project_id)}',\n    )\n    return\n\n  datafusion_instances = projects_instances[context.project_id]\n\n  if not datafusion_instances:\n    report.add_skipped(None, f'no Cloud Data Fusion instances found {context}')\n    return\n\n  if not datafusion_dataproc_version:\n    report.add_skipped(None,\n                       \"No datafusion and dataproc version's data obtained\")\n\n  for _, datafusion_instance in sorted(datafusion_instances.items()):\n    system_preferences = datafusion.get_system_preferences(\n        context, datafusion_instance)\n    namespace_preferences = datafusion.get_namespace_preferences(\n        context, datafusion_instance)\n    application_preferences = datafusion.get_application_preferences(\n        context, datafusion_instance)\n    datafusion_version = datafusion_instance.version\n    if application_preferences:\n      for (\n          application_name,\n          application_preference,\n      ) in application_preferences.items():\n        if application_preference.image_version:\n          dataproc_version = application_preference.image_version\n          dataproc_valid_version = check_dataproc_version_valid(\n              dataproc_version)\n          if not dataproc_valid_version:\n            report.add_skipped(\n                None, f'Dataproc version : {dataproc_version} is not valid')\n          else:\n            compatible = check_datafusion_dataproc_version_compatibility(\n                datafusion_version, dataproc_valid_version)\n            if compatible:\n              report.add_ok(\n                  datafusion_instance,\n                  'Application preferences found\\npipeline name :'\n                  f' {application_name}\\n\\tDatafusion version :'\n                  f' {datafusion_version}\\n\\tDataproc version :'\n                  f' {dataproc_version}\\n',\n              )\n            else:\n              report.add_failed(\n                  datafusion_instance,\n                  'Application preferences found\\npipeline name :'\n                  f' {application_name}\\n\\tDatafusion version :'\n                  f' {datafusion_version}\\n\\tDataproc version :'\n                  f' {dataproc_version}\\n\\tCheck Datafusion version is'\n                  ' compatible with Dataproc version (VERSION INCOMPATIBILITY'\n                  ' FOUND)\\n',\n              )\n    if namespace_preferences:\n      for namespace_name, namespace_preference in namespace_preferences.items():\n        if namespace_preference.image_version:\n          dataproc_version = namespace_preference.image_version\n          dataproc_valid_version = check_dataproc_version_valid(\n              dataproc_version)\n          if not dataproc_valid_version:\n            report.add_skipped(\n                None, f'Dataproc version : {dataproc_version} is not valid')\n          else:\n            compatible = check_datafusion_dataproc_version_compatibility(\n                datafusion_version, dataproc_valid_version)\n            if compatible:\n              report.add_ok(\n                  datafusion_instance,\n                  '\\n\\tNamespace preferences found'\n                  f'\\n\\tnamespace name : {namespace_name}'\n                  '\\n\\tDatafusion version :'\n                  f' {datafusion_version}\\n\\tDataproc version :'\n                  f' {dataproc_version}\\n',\n              )\n            else:\n              report.add_failed(\n                  datafusion_instance,\n                  '\\tNamespace preferences found\\n\\tnamespace name :'\n                  f' {namespace_name}\\n\\tDatafusion version :'\n                  f' {datafusion_version}\\n\\tDataproc version :'\n                  f' {dataproc_version}\\n\\tCheck Datafusion version is'\n                  ' compatible with Dataproc version (VERSION INCOMPATIBILITY'\n                  ' FOUND)\\n',\n              )\n    if system_preferences.image_version:\n      dataproc_version = system_preferences.image_version\n      dataproc_valid_version = check_dataproc_version_valid(dataproc_version)\n      if not dataproc_valid_version:\n        report.add_skipped(\n            None, f'Dataproc version : {dataproc_version} is not valid')\n      else:\n        compatible = check_datafusion_dataproc_version_compatibility(\n            datafusion_version, dataproc_valid_version)\n        if compatible:\n          report.add_ok(\n              datafusion_instance,\n              '\\n\\tSystem preferences found\\n\\tDatafusion version :'\n              f' {datafusion_version}\\n\\tDataproc version :'\n              f' {dataproc_version}\\n',\n          )\n        else:\n          report.add_failed(\n              datafusion_instance,\n              '\\tSystem preferences found\\n\\tDatafusion version :'\n              f' {datafusion_version}\\n\\tDataproc version :'\n              f' {dataproc_version}\\n'\n              '\\tCheck Datafusion version compatible with Dataproc'\n              ' version (VERSION INCOMPATIBILITY FOUND)\\n',\n          )\n\n\ndef check_dataproc_version_valid(preference_image_version: str):\n  dataproc_version = preference_image_version\n  dataproc_parsed_version = re.match(r'(\\d+\\.\\d+)', dataproc_version)\n  if not dataproc_parsed_version:\n    return None\n  return dataproc_parsed_version.group(1)\n\n\ndef check_datafusion_dataproc_version_compatibility(\n    datafusion_version: version,\n    dataproc_version: str,\n) -> bool:\n  \"\"\"Checks if the datafusion version is compatible with dataproc version.\"\"\"\n  datafusion_version = version.parse(str(datafusion_version))\n  version_to_compare = f'{datafusion_version.major}.{datafusion_version.minor}'\n  if version_to_compare in datafusion_dataproc_version:\n    if dataproc_version in datafusion_dataproc_version[version_to_compare]:\n      return True\n  return False\n"
  },
  {
    "path": "gcpdiag/lint/dataproc/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/lint/dataproc/bp_2021_001_logging_enabled.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\" Check if logging is enabled : Stackdriver Logging enabled\n\nEnabling stackdriver logging for your Dataproc cluster impacts the ability\nto troubleshoot any issues that you might have.\n\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import dataproc\n\nclusters_by_project = {}\n\n\ndef prefetch_rule(context: models.Context):\n  clusters_by_project[context.project_id] = dataproc.get_clusters(context)\n\n\ndef run_rule(context: models.Context,\n             report: lint.LintReportRuleInterface) -> None:\n  # clusters = dataproc.get_clusters(context)\n  clusters = clusters_by_project[context.project_id]\n  if not clusters:\n    report.add_skipped(None, 'no dataproc clusters found')\n\n  for cluster in clusters:\n    if cluster.is_stackdriver_logging_enabled():\n      report.add_ok(cluster)\n    else:\n      report.add_failed(cluster)\n"
  },
  {
    "path": "gcpdiag/lint/dataproc/bp_2022_001_monitoring_enabled.py",
    "content": "# Lint as: python3\n\"\"\"Cloud Monitoring agent is enabled.\n\nMemory and disk usage metrics are often useful when troubleshooting,\nhowever, the Cloud Monitoring agent is not enabled by default when\nwhen a cluster is created.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import dataproc\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  clusters = dataproc.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no dataproc clusters found')\n  else:\n    for cluster in clusters:\n      if cluster.is_stackdriver_monitoring_enabled():\n        report.add_ok(cluster)\n      else:\n        report.add_failed(cluster)\n"
  },
  {
    "path": "gcpdiag/lint/dataproc/bp_2022_098_another_dummy_async_rule.py",
    "content": "\"\"\"Another dummy async rule\n\nAnother dummy async rule\n\"\"\"\n\nimport asyncio\n\nfrom gcpdiag import lint, models\n\n\nclass FakeResource(models.Resource):\n\n  def __init__(self, text):\n    super().__init__(project_id=None)\n    self.text = text\n\n  @property\n  def full_path(self):\n    return self.text\n\n\n# pylint: disable=unused-argument\nasync def async_run_rule(context: models.Context,\n                         report: lint.LintReportRuleInterface) -> None:\n  # Some async sleep calls to pretend we're doing some work\n  await asyncio.sleep(1)\n  report.add_ok(FakeResource(text='fake resource 4'), 'test ok')\n  await asyncio.sleep(1)\n  report.add_skipped(FakeResource(text='fake resource 5'), 'test skipped')\n  await asyncio.sleep(1)\n  report.add_failed(FakeResource(text='fake resource 6'), 'test failed')\n"
  },
  {
    "path": "gcpdiag/lint/dataproc/bp_2022_099_dummy_async_rule.py",
    "content": "\"\"\"Dummy async rule\n\nDummy async rule\n\"\"\"\n\nimport asyncio\n\nfrom gcpdiag import lint, models\n\n\nclass FakeResource(models.Resource):\n\n  def __init__(self, text):\n    super().__init__(project_id=None)\n    self.text = text\n\n  @property\n  def full_path(self):\n    return self.text\n\n\n# pylint: disable=unused-argument\nasync def async_run_rule(context: models.Context,\n                         report: lint.LintReportRuleInterface) -> None:\n  # Some async sleep calls to pretend we're doing some work\n  await asyncio.sleep(1)\n  report.add_ok(FakeResource(text='fake resource 1'), 'test ok')\n  await asyncio.sleep(1)\n  report.add_skipped(FakeResource(text='fake resource 2'), 'test skipped')\n  await asyncio.sleep(1)\n  report.add_failed(FakeResource(text='fake resource 3'), 'test failed')\n"
  },
  {
    "path": "gcpdiag/lint/dataproc/dataproc_rules_snapshot_test.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\" Generalize rule snapshot testing \"\"\"\n\nfrom gcpdiag.lint import dataproc, snapshot_test_base\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = dataproc\n  project_id = 'gcpdiag-dataproc1-aaaa'\n"
  },
  {
    "path": "gcpdiag/lint/dataproc/err_2022_002_image_versions.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Dataproc cluster doesn't use deprecated images\n\nWe should expect problems if cluster runs one of the known deprecated and unsupported images.\n\"\"\"\n\nimport re\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import dataproc\n\nclusters_by_project = {}\n\n\nclass VersionParser:\n  \"\"\"\n  Example: 2.0.24-debian10\n  \"\"\"\n\n  def __init__(self, s):\n    self.str = s\n    self.match = None\n    self.matches_format = False\n    self.major = None\n    self.minor = None\n    self.os = None\n    self.os_ver = None\n\n  def parse(self):\n    self.match_re()\n    if not self.match:\n      return\n    self.fill_properties_from_match()\n\n  def match_re(self):\n    self.match = re.match((r'^(?P<major>\\d+).(?P<minor>\\d+)(?:.\\d+)?'\n                           r'(?:-(?P<os_n>[a-zA-Z]+)?(?P<os_v>\\d+)?)$'),\n                          self.str)\n\n  def fill_properties_from_match(self):\n    self.matches_format = True\n    try:\n      self.major = int(self.match.group('major'))\n      self.minor = int(self.match.group('minor'))\n      self.os = self.match.group('os_n')\n      self.os_ver = int(self.match.group('os_v'))\n    except TypeError:\n      self.matches_format = False\n\n\nclass ImageVersion:\n  \"\"\"Information about dataproc image version\"\"\"\n\n  def __init__(self, version_str):\n    self.version = VersionParser(version_str)\n    self.version.parse()\n\n  def is_deprecated(self):\n    if not self.version.matches_format:\n      return False\n    if self.version.major < 1:\n      return True\n    if self.version.major == 1 and self.version.minor < 4:\n      return True\n    if self.version.major == 1 and 4 <= self.version.minor <= 5:\n      if self.version.os == 'debian' and self.version.os_ver < 10:\n        return True\n      if self.version.os == 'ubuntu' and self.version.os_ver < 18:\n        return True\n    return False\n\n\ndef prefetch_rule(context: models.Context):\n  clusters_by_project[context.project_id] = dataproc.get_clusters(context)\n\n\ndef run_rule(context: models.Context,\n             report: lint.LintReportRuleInterface) -> None:\n  clusters = clusters_by_project[context.project_id]\n  if not clusters:\n    report.add_skipped(None, 'no dataproc clusters found')\n\n  for cluster in clusters:\n    if ImageVersion(cluster.image_version).is_deprecated():\n      report.add_failed(cluster)\n    else:\n      report.add_ok(cluster)\n"
  },
  {
    "path": "gcpdiag/lint/dataproc/err_2022_002_image_versions_test.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test code in dataproc.py.\"\"\"\n\nfrom gcpdiag.lint.dataproc.err_2022_002_image_versions import ImageVersion\n\n\nclass TestDataprocImageVersions:\n  \"\"\"Test deprecated version detection\"\"\"\n\n  def dotest(self, versions, expected):\n    for v in versions:\n      assert ImageVersion(v).is_deprecated() is expected\n\n  def test_not_deprecated(self):\n    self.dotest(['2.0.24-debian10', '2.0-debian10'], False)\n\n  def test_deprecated(self):\n    self.dotest(['1.2.3-debian10', '1.2-debian10'], True)\n\n  def test_something_completely_wrong(self):\n    self.dotest(['something'], False)\n\n  def test_something_close_but_wrong_parts(self):\n    self.dotest(['2.x.24-debian10', 'x.0.24-debian10', '2.0.x-debian10'], False)\n\n  def test_missing_parts(self):\n    self.dotest([\n        '2', '2.0', '2.0.24', '2.0.24-42', '2.0.24-msdos', '.0.24-msdos42',\n        '2.0.-msdos42'\n    ], False)\n"
  },
  {
    "path": "gcpdiag/lint/dataproc/err_2022_003_dataproc_sa_permissions.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Dataproc Service Account permissions\n\nVerify that the Dataproc Service Account exists and has the Dataproc Service\nAgent role on the project.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import crm, dataproc, iam\n\nROLE = 'roles/dataproc.serviceAgent'\nALT_ROLE = 'roles/editor'\n\n\ndef run_rule(context: models.Context,\n             report: lint.LintReportRuleInterface) -> None:\n  project = crm.get_project(context.project_id)\n\n  if not dataproc.get_clusters(context):\n    report.add_skipped(project, 'no dataproc clusters found')\n    return\n\n  policy = iam.get_project_policy(context)\n  dp_sa = f'service-{project.number}@dataproc-accounts.iam.gserviceaccount.com'\n  alt_sa = f'{project.number}@cloudservices.gserviceaccount.com'\n\n  if iam.is_service_account_existing(dp_sa, context):\n    if policy.has_role_permissions(f'serviceAccount:{dp_sa}', ROLE):\n      report.add_ok(project)\n    else:\n      report.add_failed(project, (f'service account: {dp_sa}\\n'\n                                  f'missing role: {ROLE}'))\n  else:\n    if any(\n        policy.has_role_permissions(f'serviceAccount:{alt_sa}', ROLE) or\n        policy.has_role_permissions(f'serviceAccount:{alt_sa}', ALT_ROLE)):\n      report.add_ok(project)\n    else:\n      report.add_failed(project, (f'service account: {alt_sa}\\n'\n                                  f'missing role: {ROLE}'))\n"
  },
  {
    "path": "gcpdiag/lint/dataproc/err_2022_004_dpgce_connectivity.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Dataproc on GCE master VM is able to communicate with at least one worker VM\n\nThe Compute Engine Virtual Machine instances (VMs) in a Dataproc cluster\nmust be able to communicate with each other using ICMP, TCP (all ports),\nand UDP (all ports) protocols.\n\"\"\"\nimport random\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import dataproc, gce\n\ncluster_details = []\n\n\ndef prefetch_rule(context: models.Context):\n  clusters = dataproc.get_clusters(context)\n  for cluster in clusters:\n    # Skip clusters in error state\n    if cluster.status != 'ERROR':\n      cluster_details.append({\n          'cluster': cluster,\n          'skipped': True,\n          'reason': 'Cluster not in error state'\n      })\n      continue\n\n    # Skip DPGKE clusters\n    if not cluster.is_gce_cluster:\n      cluster_details.append({\n          'cluster': cluster,\n          'skipped': True,\n          'reason': 'Dataproc on GKE cluster'\n      })\n      continue\n\n    # Skip single node clusters\n    if cluster.is_single_node_cluster:\n      cluster_details.append({\n          'cluster': cluster,\n          'skipped': True,\n          'reason': 'Single node cluster'\n      })\n      continue\n\n    # target\n    target = gce.get_instance(project_id=context.project_id,\n                              zone=cluster.zone,\n                              instance_name=f'{cluster.name}-m')\n    nic = None\n\n    # get nic for network on target\n    for interface in target.get_network_interfaces:\n      if interface.get('network') == cluster.gce_network_uri:\n        nic = interface.get('name')\n\n    if nic:\n      effective_firewalls = gce.get_instance_interface_effective_firewalls(\n          target, nic)\n    else:\n      # log error\n      continue\n\n    # source\n    source = gce.get_instance(project_id=context.project_id,\n                              zone=cluster.zone,\n                              instance_name=f'{cluster.name}-w-1')\n\n    cluster_details.append({\n        'cluster':\n            cluster,\n        'firewalls':\n            effective_firewalls,\n        'source_ip':\n            source.get_network_ip_for_instance_interface(cluster.gce_network_uri\n                                                        ),\n        'source_sa':\n            source.service_account,\n        'source_tags':\n            source.tags,\n    })\n\n\ndef run_rule(context: models.Context,\n             report: lint.LintReportRuleInterface) -> None:\n\n  # pylint: disable=unused-argument\n  for detail in cluster_details:\n    cluster = detail['cluster']\n\n    if detail.get('skipped'):\n      report.add_skipped(cluster, detail['reason'])\n      continue\n\n    firewalls = detail['firewalls']\n    source_ip = detail['source_ip']\n    source_sa = detail['source_sa']\n    source_tags = detail['source_tags']\n\n    # check ICMP\n    icmp = firewalls.check_connectivity_ingress(\n        src_ip=source_ip,\n        ip_protocol='ICMP',\n        source_service_account=source_sa,\n        source_tags=source_tags)\n    if icmp.action == 'deny':\n      report.add_failed(\n          cluster,\n          f'ICMP connections must be allowed, blocked by: {icmp.matched_by_str}'\n      )\n      continue\n\n    port = random.randint(0, 65535)\n\n    # check random TCP port\n    tcp = firewalls.check_connectivity_ingress(src_ip=source_ip,\n                                               ip_protocol='TCP',\n                                               port=port,\n                                               source_service_account=source_sa,\n                                               source_tags=source_tags)\n    if tcp.action == 'deny':\n      report.add_failed(\n          cluster,\n          f'TCP connections must be allowed on all ports, blocked by: {tcp.matched_by_str}'\n      )\n      continue\n\n    # check random udp port\n    udp = firewalls.check_connectivity_ingress(src_ip=source_ip,\n                                               ip_protocol='UDP',\n                                               port=port,\n                                               source_service_account=source_sa,\n                                               source_tags=source_tags)\n    if udp.action == 'deny':\n      report.add_failed(\n          cluster,\n          f'UDP connections must be allowed on all ports, blocked by: {udp.matched_by_str}'\n      )\n      continue\n\n    report.add_ok(cluster)\n"
  },
  {
    "path": "gcpdiag/lint/dataproc/err_2023_001_initialization_action_timeout.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Dataproc cluster initialization completed by the end of the timeout period.\n\nWhen creating a cluster with initialization action, it should be completed by the end\nof the timeout period. If the initialization has not completed then dataproc cancels\nthe initialization action and fails with time out error. The default timeout value is 10 minutes.\n\"\"\"\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, dataproc, logs\n\nCLASS_NAME = 'com.google.cloud.hadoop.services.agent.AgentMain'\nMATCH_STR = 'Initialization action timed out'\nRESOURCE_TYPE = 'cloud_dataproc_cluster'\n\n# Criteria to filter for logs\nLOG_FILTER = ['severity=ERROR', f'jsonPayload.message=~\"{MATCH_STR}\"']\n\nlogs_by_project = {}\nclusters_by_project = []\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type=RESOURCE_TYPE,\n      log_name='log_id(\"google.dataproc.agent\")',\n      filter_str=' AND '.join(LOG_FILTER))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'logging api is disabled')\n    return\n\n  clusters = dataproc.get_clusters(context)\n  name_to_cluster = {cluster.name: cluster for cluster in clusters}\n\n  if not clusters:\n    report.add_skipped(project, 'no clusters found')\n    return\n\n\n  if logs_by_project.get(context.project_id) and \\\n    logs_by_project[context.project_id].entries:\n    for log_entry in logs_by_project[context.project_id].entries:\n      # Filter out non-relevant log entries.\n      if log_entry['severity'] != 'ERROR' or \\\n         CLASS_NAME not in get_path(log_entry,\n                     ('jsonPayload', 'class'), default='') or \\\n         MATCH_STR not in get_path(log_entry,\n                     ('jsonPayload',  'message'), default=''):\n        continue\n\n      cluster_name = get_path(log_entry, ('resource', 'labels', 'cluster_name'),\n                              default='')\n\n      if cluster_name and cluster_name not in clusters_by_project:\n        clusters_by_project.append(cluster_name)\n\n  for cluster_name in clusters_by_project:\n    report.add_failed(name_to_cluster[cluster_name], MATCH_STR)\n  for cluster_name in [\n      cluster_name for cluster_name in name_to_cluster\n      if cluster_name not in clusters_by_project\n  ]:\n    report.add_ok(name_to_cluster[cluster_name])\n"
  },
  {
    "path": "gcpdiag/lint/dataproc/err_2023_002_orphaned_yarn_application.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Orphaned YARN application!\n\nThis rule will look if any Orphaned YARN application are killed by dataproc\nagent in the cluster.\n\"\"\"\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, dataproc, logs\n\nCLASS_NAME = 'com.google.cloud.hadoop.services.agent.job.YarnJobUpdater'\nMATCH_STR = 'Killing orphaned yarn application'\nRESOURCE_TYPE = 'cloud_dataproc_cluster'\n\n# Criteria to filter for logs\nLOG_FILTER = ['severity=ERROR', f'jsonPayload.message=~\"{MATCH_STR}\"']\n\nlogs_by_project = {}\nclusters_by_project = set()\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type=RESOURCE_TYPE,\n      log_name='log_id(\"google.dataproc.agent\")',\n      filter_str=' AND '.join(LOG_FILTER))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n\n  # skip entire rule if logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'logging api is disabled')\n    return\n\n  clusters = dataproc.get_clusters(context)\n  name_to_cluster = {cluster.name: cluster for cluster in clusters}\n\n  if not clusters:\n    report.add_skipped(project, 'no clusters found')\n    return\n\n  logs_entries = logs_by_project[context.project_id]\n  entries = logs_entries.entries\n  for log_entry in entries:\n    if (log_entry['severity'] != 'ERROR' or CLASS_NAME not in get_path(\n        log_entry, ('jsonPayload', 'class'), default='') or\n        MATCH_STR not in get_path(log_entry, ('jsonPayload', 'message'),\n                                  default='')):\n      continue\n\n    cluster_name = get_path(log_entry, ('resource', 'labels', 'cluster_name'),\n                            default='')\n\n    if cluster_name:\n      clusters_by_project.add(cluster_name)\n\n  for cluster_name in clusters_by_project:\n    report.add_failed(name_to_cluster[cluster_name], MATCH_STR)\n  for cluster_name in name_to_cluster:\n    if cluster_name not in name_to_cluster:\n      report.add_ok(name_to_cluster[cluster_name])\n"
  },
  {
    "path": "gcpdiag/lint/dataproc/err_2023_003_dataproc_permission.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Dataproc cluster service account has required permissions to launch a cluster.\n\nThis module checks on the log messages for permission errors and provides input\non the missing permissions.\n\"\"\"\n\nimport re\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, dataproc, logs\n\nMATCH_STR = 'Required .*permission for'\nRESOURCE_TYPE = 'cloud_dataproc_cluster'\n\ncontains_required_pattern = re.compile(MATCH_STR)\n#contains_permission_for_pattern = re.compile('\"permission for\"')\n\n# Criteria to filter for logs\nLOG_FILTER = ['severity=ERROR', f'protoPayload.status.message=~\"{MATCH_STR}\"']\n\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type=RESOURCE_TYPE,\n      log_name='log_id(\"cloudaudit.googleapis.com/activity\")',\n      filter_str=' AND '.join(LOG_FILTER))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'logging api is disabled')\n    return\n\n  clusters = dataproc.get_clusters(context)\n\n  if not clusters:\n    report.add_skipped(project, 'no clusters found')\n    return\n\n  failed_clusters = set()\n  if logs_by_project.get(context.project_id) and \\\n    logs_by_project[context.project_id].entries:\n    for log_entry in logs_by_project[context.project_id].entries:\n\n      msg = get_path(log_entry, ('protoPayload', 'status', 'message'),\n                     default='')\n\n      contains_required = contains_required_pattern.search(msg)\n\n      # Filter out non-relevant log entries.\n      if not (log_entry['severity'] == 'ERROR' and contains_required):\n        continue\n\n      entry_clusters = get_path(log_entry,\n                                ('resource', 'labels', 'cluster_name'),\n                                default='Unknown Cluster')\n\n      failed_clusters.add(entry_clusters)\n\n    if failed_clusters:\n      report.add_failed(\n          project, 'The following clusters failed : {}'.format(\n              ', '.join(failed_clusters)))\n    else:\n      report.add_ok(project)\n  else:\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/dataproc/err_2023_004_dataproc_firewall_issue.py",
    "content": "#\n# Copyright 2022 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Dataproc cluster firewall rules for connectivity between master and worker nodes established!\n\nThe master node needs to communicate with the worker nodes during cluster\ncreation. Sometimes VM to VM communications are blocked by firewall rules.\n\"\"\"\n\nimport re\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, dataproc, logs\n\nMATCH_STR = 'This usually happens when VM to VM communications are blocked'\n\nRESOURCE_TYPE = 'cloud_dataproc_cluster'\n\ncontains_required_pattern = re.compile(MATCH_STR)\n\n# Criteria to filter for logs\nLOG_FILTER = ['severity=ERROR', f'protoPayload.status.message=~\"{MATCH_STR}\"']\n\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type=RESOURCE_TYPE,\n      log_name='log_id(\"cloudaudit.googleapis.com/activity\")',\n      filter_str=' AND '.join(LOG_FILTER),\n  )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n\n  # skip entire rule if logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'logging api is disabled')\n    return\n\n  clusters = dataproc.get_clusters(context)\n\n  if not clusters:\n    report.add_skipped(project, 'no clusters found')\n    return\n\n  failed_clusters = set()\n  if (logs_by_project.get(context.project_id) and\n      logs_by_project[context.project_id].entries):\n    for log_entry in logs_by_project[context.project_id].entries:\n      msg = get_path(log_entry, ('protoPayload', 'status', 'message'),\n                     default='')\n\n      contains_required = contains_required_pattern.search(msg)\n\n      # Filter out non-relevant log entries.\n      if not (log_entry['severity'] == 'ERROR' and contains_required):\n        continue\n\n      entry_clusters = get_path(\n          log_entry,\n          ('resource', 'labels', 'cluster_name'),\n          default='Unknown Cluster',\n      )\n      failed_clusters.add(entry_clusters)\n\n    if failed_clusters:\n      report.add_failed(\n          project,\n          'The following clusters failed : {}'.format(\n              ', '.join(failed_clusters)),\n      )\n    else:\n      report.add_ok(project)\n  else:\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/dataproc/err_2023_005_dataproc_quota.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Dataproc cluster has sufficient quota.\n\nWhen creating a Dataproc cluster, the project must have available quotas for\nthe resources you request, such as CPU, disk, and IP addresses.\n\"\"\"\n\nimport re\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, dataproc, logs\n\nMATCH_STR = 'Insufficient .* quota'\nRESOURCE_TYPE = 'cloud_dataproc_cluster'\n\n# Criteria to filter for logs\nLOG_FILTER = f\"\"\"\nprotoPayload.status.message=~(\"{MATCH_STR}\")\nseverity=ERROR\n\"\"\"\n\nlogs_by_project = {}\nlog_search_pattern = re.compile(MATCH_STR)\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type=RESOURCE_TYPE,\n      log_name='log_id(\"cloudaudit.googleapis.com/activity\")',\n      filter_str=LOG_FILTER,\n  )\n\n\ndef format_cluster(cluster_name, uuid):\n  return cluster_name + (f'(UUID: {uuid})' if uuid else '')\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'logging api is disabled')\n    return\n\n  clusters = dataproc.get_clusters(context)\n\n  if not clusters:\n    report.add_skipped(project, 'no clusters found')\n    return\n\n  failed_clusters = set()\n  if logs_by_project.get(context.project_id):\n    entries = logs_by_project[context.project_id].entries\n    for log_entry in entries:\n      msg = get_path(log_entry, ('protoPayload', 'status', 'message'),\n                     default='')\n      is_pattern_found = log_search_pattern.search(msg)\n      # Filter out non-relevant log entries.\n      if not (log_entry['severity'] == 'ERROR' and is_pattern_found):\n        continue\n\n      cluster_name = get_path(\n          log_entry,\n          ('resource', 'labels', 'cluster_name'),\n          default='Unknown Cluster',\n      )\n      uuid = get_path(log_entry, ('resource', 'labels', 'cluster_uuid'),\n                      default='')\n      failed_clusters.add((cluster_name, uuid))\n\n    if failed_clusters:\n      report.add_failed(\n          project,\n          'The following clusters failed because of quota errors : {}'.format(\n              ', '.join(\n                  format_cluster(cluster_name, uuid)\n                  for cluster_name, uuid in failed_clusters)),\n      )\n    else:\n      report.add_ok(project)\n  else:\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/dataproc/err_2023_006_shared_vpc_permission.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Note that we don't have a general rule that checks this for all products,\n# because the grant is done lazily, as soon as it is needed. So check that the\n# grant is there only when resources of a certain product (like GKE clusters)\n# are present, and we know that the grant is necessary for the correct\n# operation of that product. Copy the rule for other products, as necessary.\n\"\"\"DataProc Cluster user has networking permissions on host project.\n\nDataproc cluster launched on a shared VPC requires permission on the Host Subnet\nthat is used to create the cluster. If the required set of permissions are not\navailable, the cluster launch operation fails.\nThe permission is to be set for DataProc service agent from service project.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import crm, dataproc, gce, iam, network\n\nCOMPUTE_NETWORK_USER_ROLE = 'roles/compute.networkUser'\nCOMPUTE_NETWORK_VIEWER_ROLE = 'roles/compute.networkViewer'\n\n\ndef validate_iam_roles(\n    context: models.Context,\n    service_account: str,\n    service_account_name: str,\n    host_project: str,\n    host_iam_policy: iam.BaseIAMPolicy,\n    cluster: dataproc.Cluster,\n    report: lint.LintReportRuleInterface,\n    master_vm: gce.Instance,\n) -> bool:\n  # Project Level Check\n  sa_has_net_user = host_iam_policy.has_role_permissions(\n      f'serviceAccount:{service_account}', COMPUTE_NETWORK_USER_ROLE)\n\n  # Subnet level check\n  if not sa_has_net_user:\n    for subnet in master_vm.subnetworks:\n      if subnet.region == cluster.region:\n        subnet_iam_policy = network.get_subnetwork_iam_policy(\n            context, subnet.region, subnet.name)\n        sa_has_net_user = subnet_iam_policy.has_role_permissions(\n            f'serviceAccount:{service_account}',\n            COMPUTE_NETWORK_USER_ROLE,\n        )\n        if sa_has_net_user:\n          return True\n\n      if not sa_has_net_user:\n        report.add_failed(\n            cluster,\n            (f'{service_account_name} {service_account} '\n             f'missing {COMPUTE_NETWORK_USER_ROLE} IAM role '\n             f'in host project {host_project}'),\n        )\n        return False\n\n  return True\n\n\ndef shared_vpc_check(host_project, service_project):\n  return host_project == service_project\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  clusters = dataproc.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'No Clusters Found')\n\n  service_project = crm.get_project(context.project_id)\n  dataproc_service_agent = (f'service-{service_project.number}'\n                            '@dataproc-accounts.iam.gserviceaccount.com')\n\n  for cluster in clusters:\n    if cluster.is_gce_cluster:\n      cluster_network = cluster.gce_network_uri\n      host_project = str(\n          str(cluster_network).rsplit('/projects/',\n                                      maxsplit=1)[1]).rsplit('/global/networks',\n                                                             maxsplit=1)[0]\n\n      no_shared_vpc = shared_vpc_check(host_project, context.project_id)\n      if not no_shared_vpc:\n        try:\n          if cluster.is_ha_cluster:\n            master_vm = gce.get_instance(\n                project_id=context.project_id,\n                zone=cluster.zone,\n                instance_name=f'{cluster.name}-m-0',\n            )\n          else:\n            master_vm = gce.get_instance(\n                project_id=context.project_id,\n                zone=cluster.zone,\n                instance_name=f'{cluster.name}-m',\n            )\n        except:  # pylint: disable=bare-except\n          report.add_skipped(\n              cluster, 'Master VM is not running. Not able to check Network')\n          continue\n\n        host_project_context = context.copy_with(project_id=host_project)\n        host_iam_policy = iam.get_project_policy(host_project_context)\n        dataproc_sa_is_valid = validate_iam_roles(\n            host_project_context,\n            dataproc_service_agent,\n            'Dataproc Service Agent service account',\n            host_project,\n            host_iam_policy,\n            cluster,\n            report,\n            master_vm,\n        )\n        if dataproc_sa_is_valid:\n          report.add_ok(cluster)\n      else:\n        report.add_skipped(cluster, f'Not on Shared VPC : {cluster}')\n    else:\n      report.add_skipped(cluster, f'Not a GCE cluster : {cluster}')\n"
  },
  {
    "path": "gcpdiag/lint/dataproc/err_2023_007_cluster_creation_stockout.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# Lint as: python3\n\"\"\"Region has sufficient resources for user to create a cluster\n\nRegion is experiencing a resource stockout while creating the cluster. \\n Kindly\ntry creating the cluster in another zone or region. \\n If the specified\nRegion/Zone is a must, please reach out to GCP support team with the \\n previous\ndetails provided.\n\"\"\"\nimport re\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, dataproc, logs\n\n# For pattern matching regex in logs\nerr_messages = [\n    'ZONE_RESOURCE_POOL_EXHAUSTED',\n    'does not have enough resources available to fulfill the request',\n    'resource pool exhausted',\n    'does not exist in zone',\n]\n\nlogs_by_project = {}\nlog_search_pattern = re.compile('|'.join(err_messages))\nlogging_filter = '\"' + '\" OR \"'.join(err_messages) + '\"'\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='cloud_dataproc_cluster',\n      log_name='log_id(\"cloudaudit.googleapis.com/activity\")',\n      filter_str=logging_filter,\n  )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'logging api is disabled')\n    return\n  clusters = dataproc.get_clusters(context)\n  if not clusters:\n    report.add_skipped(project, 'no clusters found')\n    return\n  if logs_by_project.get(context.project_id):\n    entries = logs_by_project[context.project_id].entries\n    stockout = False\n    for log_entry in entries:\n      msg = get_path(log_entry, ('protoPayload', 'status', 'message'),\n                     default='')\n\n      is_pattern_found = log_search_pattern.search(msg)\n\n      # Filter out non-relevant log entries.\n      if not (log_entry['severity'] == 'ERROR' and is_pattern_found):\n        continue\n      stockout = True\n      cluster_name = get_path(\n          log_entry,\n          ('resource', 'labels', 'cluster_name'),\n          default='Unknown Cluster',\n      )\n      uuid = get_path(log_entry, ('resource', 'labels', 'cluster_uuid'),\n                      default='')\n      region = get_path(log_entry, ('resource', 'labels', 'region'), default='')\n      insert_id = get_path(log_entry, 'insertId', default='')\n      message = (\n          'The cluster \"{}\" with UUID \"{}\" failed \\n while getting created due'\n          ' to not having enough resources in designated region \"{}\" \\n '\n          ' Kindly check cloud logging insertId \"{}\" for more details')\n\n      report.add_failed(project,\n                        message.format(cluster_name, uuid, region, insert_id))\n\n    # There wasn't a stockout messages in logs, project should\n    # only be ok if there isn't any stockout detected\n    if not stockout:\n      report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/dataproc/err_2023_008_bad_dirs.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"\nDisk space of YARN NodeManagers is okay.\n\nYARN ResourceManager has reported UNHEALTHY YARN NodeManagers\ndue to exceeding the maximum percentage of disk space utilization allowed.\nCheck the following documentation to address the issue:\nhttps://cloud.google.com/dataproc/docs/support/spark-job-tuning#yarn_nodes_are_unhealthy\n\"\"\"\n\nimport re\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, dataproc, logs\n\nRE_PATTERN = (\n    '(.*dirs usable space is below configured utilization percentage.*)|'\n    '(.*reported UNHEALTHY with details: .*dirs are bad.*)')\n\nLOG_NAME = 'hadoop-yarn-resourcemanager'\nSEVERITY = 'INFO'\nLOG_FILTER = [f'severity=\"{SEVERITY}\"', f'jsonPayload.message=~\"{RE_PATTERN}\"']\n\nMSG_RE = re.compile(RE_PATTERN)\n\nlogs_by_project = {}\nclusters_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='cloud_dataproc_cluster',\n      log_name=f'log_id(\"{LOG_NAME}\")',\n      filter_str=' AND '.join(LOG_FILTER))\n\n\ndef prefetch_rule(context: models.Context):\n  clusters_by_project[context.project_id] = dataproc.get_clusters(context)\n\n\ndef is_relevant(entry, context):\n  return all([\n      get_path(entry,\n               ('resource', 'labels', 'project_id')) == context.project_id,\n      get_path(entry, ('resource', 'type')) == 'cloud_dataproc_cluster',\n      get_path(entry,\n               'logName') == f'projects/{context.project_id}/logs/{LOG_NAME}',\n      get_path(entry, 'severity') == SEVERITY,\n      MSG_RE.match(get_path(entry, ('jsonPayload', 'message')))\n  ])\n\n\ndef get_clusters_having_relevant_log_entries(context):\n  return {\n      get_path(e, ('resource', 'labels', 'cluster_name'), default=None)\n      for e in logs_by_project[context.project_id].entries\n      if is_relevant(e, context)\n  }\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(None, 'logging api is disabled')\n    return\n\n  clusters_with_low_disk_space = get_clusters_having_relevant_log_entries(\n      context)\n\n  for cluster in clusters_by_project[context.project_id]:\n    if cluster.name in clusters_with_low_disk_space:\n      report.add_failed(\n          cluster,\n          'High disk space utilization reported for some YARN NodeManagers.')\n    else:\n      report.add_ok(cluster)\n"
  },
  {
    "path": "gcpdiag/lint/dataproc/snapshots/BP_2021_001.txt",
    "content": "*  dataproc/BP/2021_001: Check if logging is enabled : Stackdriver Logging enabled\n   - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/good    [ OK ]\n   - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/test-best-practices-disabled [FAIL]\n   - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/test-best-practices-enabled [ OK ]\n   - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/test-deny-icmp [ OK ]\n\n   Enabling stackdriver logging for your Dataproc cluster impacts the ability to\n   troubleshoot any issues that you might have.\n\n   https://gcpdiag.dev/rules/dataproc/BP/2021_001\n\n"
  },
  {
    "path": "gcpdiag/lint/dataproc/snapshots/BP_2022_001.txt",
    "content": "*  dataproc/BP/2022_001: Cloud Monitoring agent is enabled.\n   - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/good    [FAIL]\n   - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/test-best-practices-disabled [FAIL]\n   - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/test-best-practices-enabled [ OK ]\n   - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/test-deny-icmp [FAIL]\n\n   Memory and disk usage metrics are often useful when troubleshooting, however,\n   the Cloud Monitoring agent is not enabled by default when when a cluster is\n   created.\n\n   https://gcpdiag.dev/rules/dataproc/BP/2022_001\n\n"
  },
  {
    "path": "gcpdiag/lint/dataproc/snapshots/BP_2022_098.txt",
    "content": "\n"
  },
  {
    "path": "gcpdiag/lint/dataproc/snapshots/BP_2022_099.txt",
    "content": "\n"
  },
  {
    "path": "gcpdiag/lint/dataproc/snapshots/ERR_2022_002.txt",
    "content": "*  dataproc/ERR/2022_002: Dataproc cluster doesn't use deprecated images\n   - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/good    [ OK ]\n   - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/test-best-practices-disabled [ OK ]\n   - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/test-best-practices-enabled [ OK ]\n   - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/test-deny-icmp [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/dataproc/snapshots/ERR_2022_003.txt",
    "content": "*  dataproc/ERR/2022_003: Dataproc Service Account permissions\n   - projects/gcpdiag-dataproc1-aaaa                                      [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/dataproc/snapshots/ERR_2022_004.txt",
    "content": "*  dataproc/ERR/2022_004: Dataproc on GCE master VM is able to communicate with at least one worker VM\n   - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/good    [SKIP]\n     Cluster not in error state\n   - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/test-best-practices-disabled [SKIP]\n     Cluster not in error state\n   - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/test-best-practices-enabled [SKIP]\n     Cluster not in error state\n   - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/test-deny-icmp [FAIL]\n     ICMP connections must be allowed, blocked by: None\n\n   The Compute Engine Virtual Machine instances (VMs) in a Dataproc cluster must\n   be able to communicate with each other using ICMP, TCP (all ports), and UDP\n   (all ports) protocols.\n\n   https://gcpdiag.dev/rules/dataproc/ERR/2022_004\n\n"
  },
  {
    "path": "gcpdiag/lint/dataproc/snapshots/ERR_2023_001.txt",
    "content": "*  dataproc/ERR/2023_001: Dataproc cluster initialization completed by the end of the timeout period.\n   - projects/gcpdiag-dataproc1-aaaa                                      [SKIP]\n     logging api is disabled\n\n"
  },
  {
    "path": "gcpdiag/lint/dataproc/snapshots/ERR_2023_002.txt",
    "content": "*  dataproc/ERR/2023_002: Orphaned YARN application!\n   - projects/gcpdiag-dataproc1-aaaa                                      [SKIP]\n     logging api is disabled\n\n"
  },
  {
    "path": "gcpdiag/lint/dataproc/snapshots/ERR_2023_003.txt",
    "content": "*  dataproc/ERR/2023_003: Dataproc cluster service account has required permissions to launch a cluster.\n   - projects/gcpdiag-dataproc1-aaaa                                      [SKIP]\n     logging api is disabled\n\n"
  },
  {
    "path": "gcpdiag/lint/dataproc/snapshots/ERR_2023_004.txt",
    "content": "*  dataproc/ERR/2023_004: Dataproc cluster firewall rules for connectivity between master and worker nodes established!\n   - projects/gcpdiag-dataproc1-aaaa                                      [SKIP]\n     logging api is disabled\n\n"
  },
  {
    "path": "gcpdiag/lint/dataproc/snapshots/ERR_2023_005.txt",
    "content": "*  dataproc/ERR/2023_005: Dataproc cluster has sufficient quota.\n   - projects/gcpdiag-dataproc1-aaaa                                      [SKIP]\n     logging api is disabled\n\n"
  },
  {
    "path": "gcpdiag/lint/dataproc/snapshots/ERR_2023_006.txt",
    "content": "*  dataproc/ERR/2023_006: DataProc Cluster user has networking permissions on host project.\n   - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/good    [SKIP]\n     Not on Shared VPC : gcpdiag-dataproc1-aaaa/us-central1/good\n   - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/test-best-practices-disabled [SKIP]\n     Not on Shared VPC : gcpdiag-dataproc1-aaaa/us-central1/test-best-practices-disabled\n   - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/test-best-practices-enabled [SKIP]\n     Not on Shared VPC : gcpdiag-dataproc1-aaaa/us-central1/test-best-practices-enabled\n   - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/test-deny-icmp [SKIP]\n     Not on Shared VPC : gcpdiag-dataproc1-aaaa/us-central1/test-deny-icmp\n\n"
  },
  {
    "path": "gcpdiag/lint/dataproc/snapshots/ERR_2023_007.txt",
    "content": "*  dataproc/ERR/2023_007: Region has sufficient resources for user to create a cluster\n   - projects/gcpdiag-dataproc1-aaaa                                      [SKIP]\n     logging api is disabled\n\n"
  },
  {
    "path": "gcpdiag/lint/dataproc/snapshots/ERR_2023_008.txt",
    "content": "*  dataproc/ERR/2023_008: Disk space of YARN NodeManagers is okay.\n   (logging api is disabled)                                              [SKIP]\n\n"
  },
  {
    "path": "gcpdiag/lint/dataproc/snapshots/WARN_2021_001.txt",
    "content": "*  dataproc/WARN/2021_001: Dataproc cluster is in RUNNING state\n   - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/good    [ OK ]\n   - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/test-best-practices-disabled [ OK ]\n   - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/test-best-practices-enabled [ OK ]\n   - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/test-deny-icmp [FAIL]\n\n   Cluster should normally spend most of the time in RUNNING state.\n\n   https://gcpdiag.dev/rules/dataproc/WARN/2021_001\n\n"
  },
  {
    "path": "gcpdiag/lint/dataproc/snapshots/WARN_2022_001.txt",
    "content": "*  dataproc/WARN/2022_001: Dataproc clusters are not failed to stop due to the local SSDs\n   - projects/gcpdiag-dataproc1-aaaa                                      [SKIP]\n     logging api is disabled\n\n"
  },
  {
    "path": "gcpdiag/lint/dataproc/snapshots/WARN_2022_002.txt",
    "content": "*  dataproc/WARN/2022_002: Job rate limit was not exceeded\n   (logging api is disabled)                                              [SKIP]\n\n"
  },
  {
    "path": "gcpdiag/lint/dataproc/snapshots/WARN_2022_003.txt",
    "content": "*  dataproc/WARN/2022_003: Dataproc VM Service Account has necessary permissions\n   - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/good    [FAIL]\n     Service account 12340005-compute@developer.gserviceaccount.com does not have enough permissions\n   - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/test-best-practices-disabled [FAIL]\n     Service account 12340005-compute@developer.gserviceaccount.com does not have enough permissions\n   - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/test-best-practices-enabled [ OK ]\n   - projects/gcpdiag-dataproc1-aaaa/regions/us-central1/clusters/test-deny-icmp [FAIL]\n     Service account 12340005-compute@developer.gserviceaccount.com does not have enough permissions\n\n   VM Service Account should have required permissions to function correctly.\n   Though required permission may be granted via user-managed role or primitive\n   roles, it is recommended to grant roles/dataproc.worker on project level.\n\n   https://gcpdiag.dev/rules/dataproc/WARN/2022_003\n\n"
  },
  {
    "path": "gcpdiag/lint/dataproc/snapshots/WARN_2022_004.txt",
    "content": "\n"
  },
  {
    "path": "gcpdiag/lint/dataproc/snapshots/WARN_2023_001.txt",
    "content": "*  dataproc/WARN/2023_001: Concurrent Job limit was not exceeded\n   - projects/gcpdiag-dataproc1-aaaa                                      [SKIP]\n     logging api is disabled\n\n"
  },
  {
    "path": "gcpdiag/lint/dataproc/snapshots/WARN_2023_002.txt",
    "content": "*  dataproc/WARN/2023_002: Master Node System Memory utilization under threshold\n   - projects/gcpdiag-dataproc1-aaaa                                      [SKIP]\n     logging api is disabled\n\n"
  },
  {
    "path": "gcpdiag/lint/dataproc/snapshots/WARN_2024_001.txt",
    "content": "*  dataproc/WARN/2024_001: HDFS NameNode Safemode is disabled.\n   (logging api is disabled)                                              [SKIP]\n\n"
  },
  {
    "path": "gcpdiag/lint/dataproc/snapshots/WARN_2024_002.txt",
    "content": "*  dataproc/WARN/2024_002: HDFS can write file(s) to DataNode(s).\n   (logging api is disabled)                                              [SKIP]\n\n"
  },
  {
    "path": "gcpdiag/lint/dataproc/warn_2021_001_cluster_status_running.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Dataproc cluster is in RUNNING state\n\nCluster should normally spend most of the time in RUNNING state.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import dataproc\n\nclusters_by_project = {}\n\n\ndef prefetch_rule(context: models.Context):\n  clusters_by_project[context.project_id] = dataproc.get_clusters(context)\n\n\ndef run_rule(context: models.Context,\n             report: lint.LintReportRuleInterface) -> None:\n  # clusters = dataproc.get_clusters(context)\n  clusters = clusters_by_project[context.project_id]\n  if not clusters:\n    report.add_skipped(None, 'no dataproc clusters found')\n\n  for cluster in clusters:\n    if cluster.is_running():\n      report.add_ok(cluster)\n    else:\n      report.add_failed(cluster)\n"
  },
  {
    "path": "gcpdiag/lint/dataproc/warn_2022_001_cluster_local_ssd_failed_stop.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Dataproc clusters are not failed to stop due to the local SSDs\n\nYou cannot stop clusters with local SSDs attached since it triggers shutdown to\nthe VM. However, if you do shut down a VM using local SSDs, then you can't\nstart the VM again later, and the data on the local SSD is lost.\n\"\"\"\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, dataproc, logs\n\nMETHOD_NAME = 'google.cloud.dataproc.v1.ClusterController.StopCluster'\nMATCH_STR = 'Clusters that have local SSDs cannot be stopped.'\n\nLOG_FILTER = [\n    'severity=ERROR', f'protoPayload.methodName=\"{METHOD_NAME}\"',\n    f'protoPayload.status.message:\"{MATCH_STR}\"'\n]\n\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='cloud_dataproc_cluster',\n      log_name='log_id(\"cloudaudit.googleapis.com/activity\")',\n      filter_str=' AND '.join(LOG_FILTER))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'logging api is disabled')\n    return\n\n  clusters = dataproc.get_clusters(context)\n  name_to_cluster = {cluster.name: cluster for cluster in clusters}\n\n  if not clusters:\n    report.add_skipped(project, 'no clusters found')\n    return\n\n  failed_to_stop_clusters = []\n\n  if logs_by_project.get(context.project_id) and \\\n     logs_by_project[context.project_id].entries:\n    for log_entry in logs_by_project[context.project_id].entries:\n      # Filter out non-relevant log entries.\n      if log_entry['severity'] != 'ERROR' or \\\n         METHOD_NAME not in get_path(log_entry,\n                     ('protoPayload', 'methodName'), default='') or \\\n         MATCH_STR not in get_path(log_entry,\n                     ('protoPayload', 'status', 'message'), default=''):\n        continue\n\n      cluster_name = get_path(log_entry,\n                              ('protoPayload', 'request', 'clusterName'),\n                              default='')\n      if cluster_name and cluster_name not in failed_to_stop_clusters:\n        failed_to_stop_clusters.append(cluster_name)\n\n  for cluster_name in failed_to_stop_clusters:\n    report.add_failed(name_to_cluster[cluster_name],\n                      'failed to stop due to local SSDs')\n  for cluster_name in [\n      cluster_name for cluster_name in name_to_cluster\n      if cluster_name not in failed_to_stop_clusters\n  ]:\n    report.add_ok(name_to_cluster[cluster_name])\n"
  },
  {
    "path": "gcpdiag/lint/dataproc/warn_2022_002_job_throttling_rate_limit.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Job rate limit was not exceeded\n\nIf the Dataproc agent reach the job submission rate limit, Dataproc job\nscheduling delays can be observed.\n\"\"\"\n\nimport re\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, dataproc, logs\n\nRE_PATTERN = '.*Throttling job .*: Rate limit.*'\n\nLOG_FILTER = ['severity=WARNING', f'jsonPayload.message=~\"{RE_PATTERN}\"']\n\nMSG_RE = re.compile(RE_PATTERN)\n\nlogs_by_project = {}\nclusters_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='cloud_dataproc_cluster',\n      log_name='log_id(\"google.dataproc.agent\")',\n      filter_str=' AND '.join(LOG_FILTER))\n\n\ndef prefetch_rule(context: models.Context):\n  clusters_by_project[context.project_id] = dataproc.get_clusters(context)\n\n\ndef is_relevant(entry, context):\n  return all([\n      get_path(entry,\n               ('resource', 'labels', 'project_id')) == context.project_id,\n      get_path(entry, ('resource', 'type')) == 'cloud_dataproc_cluster',\n      get_path(entry, ('logName')) ==\n      f'projects/{context.project_id}/logs/google.dataproc.agent',\n      get_path(entry, ('severity')) == 'WARNING',\n      MSG_RE.match(get_path(entry, ('jsonPayload', 'message')))\n  ])\n\n\ndef get_clusters_having_relevant_log_entries(context):\n  return {\n      get_path(e, ('resource', 'labels', 'cluster_name'), default=None)\n      for e in logs_by_project[context.project_id].entries\n      if is_relevant(e, context)\n  }\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(None, 'logging api is disabled')\n    return\n\n  clusters_with_throttling = get_clusters_having_relevant_log_entries(context)\n\n  for cluster in clusters_by_project[context.project_id]:\n    if cluster.name in clusters_with_throttling:\n      report.add_failed(cluster, 'some jobs were throttled due to rate limit')\n    else:\n      report.add_ok(cluster)\n"
  },
  {
    "path": "gcpdiag/lint/dataproc/warn_2022_003_sa_permissions.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Dataproc VM Service Account has necessary permissions\n\nVM Service Account should have required permissions to function correctly.\nThough required permission may be granted via user-managed role or primitive\nroles, it is recommended to grant roles/dataproc.worker on project level.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import dataproc, iam\n\nWORKER_ROLE = 'roles/dataproc.worker'\n\nclusters_by_project = {}\npolicies_by_project = {}\n\n\ndef prefetch_rule(context: models.Context):\n  clusters_by_project[context.project_id] = dataproc.get_clusters(context)\n  policies_by_project[context.project_id] = iam.get_project_policy(context)\n\n\ndef run_rule(context: models.Context,\n             report: lint.LintReportRuleInterface) -> None:\n\n  clusters = clusters_by_project[context.project_id]\n  if not clusters:\n    report.add_skipped(None, 'no dataproc clusters found')\n\n  for cluster in clusters:\n    sa_email = cluster.vm_service_account_email\n    sa_exists = iam.is_service_account_existing(email=sa_email, context=context)\n    if not sa_exists:\n      # Non-existent SA is also a non-normal situation, however our intent was to\n      # have a separate rule for that, so that one rule has more-or-less one\n      # reason to fail\n      report.add_skipped(\n          cluster,\n          'VM Service Account associated with Dataproc cluster was not found')\n      continue\n\n    sa_has_role = policies_by_project[context.project_id].has_role_permissions(\n        member=f'serviceAccount:{sa_email}', role=WORKER_ROLE)\n\n    if sa_has_role:\n      report.add_ok(cluster)\n    else:\n      report.add_failed(\n          cluster,\n          f'Service account {sa_email} does not have enough permissions')\n"
  },
  {
    "path": "gcpdiag/lint/dataproc/warn_2022_004_cluster_status_running_async.py",
    "content": "\"\"\"Dataproc cluster is in RUNNING state\n\nCluster should normally spend most of the time in RUNNING state.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.async_queries.project import get_project\n\n\nasync def async_run_rule(context: models.Context,\n                         report: lint.LintReportRuleInterface) -> None:\n  project = get_project.get_project(project_id=context.project_id)\n  cluster_names = await project.dataproc.list_clusters()\n  for cluster_name in cluster_names:\n    cluster = await project.dataproc.get_cluster_by_name(cluster_name)\n    if cluster.status == 'RUNNING':\n      report.add_ok(cluster)\n    else:\n      report.add_failed(cluster, 'cluster is not running')\n"
  },
  {
    "path": "gcpdiag/lint/dataproc/warn_2023_001_job_throttling_too_many.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Concurrent Job limit was not exceeded\n\nIf Dataproc agent is already running more than allowed concurrent job,\nDataproc job scheduling delays can be observed\n\"\"\"\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, dataproc, logs\n\nCLASS_NAME = 'com.google.cloud.hadoop.services.agent.JobSubmissionLimiterImpl'\nMATCH_STR = 'Too many running jobs'\n\nLOG_FILTER = ['severity=WARNING', f'jsonPayload.message=~\"{MATCH_STR}\"']\n\nlogs_by_project = {}\nclusters_by_project = []\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='cloud_dataproc_cluster',\n      log_name='log_id(\"google.dataproc.agent\")',\n      filter_str=' AND '.join(LOG_FILTER))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'logging api is disabled')\n    return\n\n  clusters = dataproc.get_clusters(context)\n  name_to_cluster = {cluster.name: cluster for cluster in clusters}\n\n  if not clusters:\n    report.add_skipped(project, 'no clusters found')\n    return\n\n\n  if logs_by_project.get(context.project_id) and \\\n    logs_by_project[context.project_id].entries:\n    for log_entry in logs_by_project[context.project_id].entries:\n      # Filter out non-relevant log entries.\n      if log_entry['severity'] != 'WARNING' or \\\n         CLASS_NAME not in get_path(log_entry,\n                     ('jsonPayload', 'class'), default='') or \\\n         MATCH_STR not in get_path(log_entry,\n                     ('jsonPayload',  'message'), default=''):\n        continue\n\n      cluster_name = get_path(log_entry, ('resource', 'labels', 'cluster_name'),\n                              default='')\n\n      if cluster_name and cluster_name not in clusters_by_project:\n        clusters_by_project.append(cluster_name)\n\n  for cluster_name in clusters_by_project:\n    report.add_failed(name_to_cluster[cluster_name],\n                      'Concurrent Job limit exceeded')\n  for cluster_name in [\n      cluster_name for cluster_name in name_to_cluster\n      if cluster_name not in clusters_by_project\n  ]:\n    report.add_ok(name_to_cluster[cluster_name])\n"
  },
  {
    "path": "gcpdiag/lint/dataproc/warn_2023_002_high_system_memory_usage.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Master Node System Memory utilization under threshold\n\nBy default, the Dataproc agent throttles job submission when\nmemory use reaches 90% (0.9). When this limit is reached, new jobs cannot be scheduled.\nThe amount of free memory needed to schedule another job on the cluster is not sufficient.\n\"\"\"\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, dataproc, logs\n\nCLASS_NAME = 'com.google.cloud.hadoop.services.agent.JobSubmissionLimiterImpl'\nMATCH_STR = 'High system memory usage'\n\nLOG_FILTER = ['severity=WARNING', f'jsonPayload.message=~\"{MATCH_STR}\"']\n\nlogs_by_project = {}\nclusters_by_project = []\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='cloud_dataproc_cluster',\n      log_name='log_id(\"google.dataproc.agent\")',\n      filter_str=' AND '.join(LOG_FILTER))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'logging api is disabled')\n    return\n\n  clusters = dataproc.get_clusters(context)\n  name_to_cluster = {cluster.name: cluster for cluster in clusters}\n\n  if not clusters:\n    report.add_skipped(project, 'no clusters found')\n    return\n\n\n  if logs_by_project.get(context.project_id) and \\\n    logs_by_project[context.project_id].entries:\n    for log_entry in logs_by_project[context.project_id].entries:\n      # Filter out non-relevant log entries.\n      if log_entry['severity'] != 'WARNING' or \\\n         CLASS_NAME not in get_path(log_entry,\n                     ('jsonPayload', 'class'), default='') or \\\n         MATCH_STR not in get_path(log_entry,\n                     ('jsonPayload',  'message'), default=''):\n        continue\n\n      cluster_name = get_path(log_entry, ('resource', 'labels', 'cluster_name'),\n                              default='')\n\n      if cluster_name and cluster_name not in clusters_by_project:\n        clusters_by_project.append(cluster_name)\n\n  for cluster_name in clusters_by_project:\n    report.add_failed(\n        name_to_cluster[cluster_name],\n        'some jobs were throttled due to High system memory usage')\n  for cluster_name in [\n      cluster_name for cluster_name in name_to_cluster\n      if cluster_name not in clusters_by_project\n  ]:\n    report.add_ok(name_to_cluster[cluster_name])\n"
  },
  {
    "path": "gcpdiag/lint/dataproc/warn_2024_001_safemode.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"HDFS NameNode Safemode is disabled.\n\nWhen HDFS NameNode Safemode is enabled,\nthe HDFS filesystem is in read-only mode and no changes are allowed.\n\"\"\"\n\nimport re\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, dataproc, logs\n\nRE_PATTERN = '.*SafeModeException.* Name node is in safe mode.*'\n\nLOG_NAME = 'hadoop-hdfs-namenode'\nSEVERITY = 'INFO'\nLOG_FILTER = [f'severity=\"{SEVERITY}\"', f'jsonPayload.message=~\"{RE_PATTERN}\"']\n\nMSG_RE = re.compile(RE_PATTERN)\n\nlogs_by_project = {}\nclusters_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='cloud_dataproc_cluster',\n      log_name=f'log_id(\"{LOG_NAME}\")',\n      filter_str=' AND '.join(LOG_FILTER))\n\n\ndef prefetch_rule(context: models.Context):\n  clusters_by_project[context.project_id] = dataproc.get_clusters(context)\n\n\ndef is_relevant(entry, context):\n  return all([\n      get_path(entry,\n               ('resource', 'labels', 'project_id')) == context.project_id,\n      get_path(entry, ('resource', 'type')) == 'cloud_dataproc_cluster',\n      get_path(entry,\n               'logName') == f'projects/{context.project_id}/logs/{LOG_NAME}',\n      get_path(entry, 'severity') == SEVERITY,\n      MSG_RE.match(get_path(entry, ('jsonPayload', 'message')))\n  ])\n\n\ndef get_clusters_having_relevant_log_entries(context):\n  return {\n      get_path(e, ('resource', 'labels', 'cluster_name'), default=None)\n      for e in logs_by_project[context.project_id].entries\n      if is_relevant(e, context)\n  }\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  \"\"\"RUN the rule.\"\"\"\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(None, 'logging api is disabled')\n    return\n\n  clusters_with_safemode_enabled = get_clusters_having_relevant_log_entries(\n      context)\n\n  for cluster in clusters_by_project[context.project_id]:\n    if cluster.name in clusters_with_safemode_enabled:\n      report.add_failed(\n          cluster,\n          'The HDFS NameNode Safemode was reported as enabled.',\n      )\n    else:\n      report.add_ok(cluster)\n"
  },
  {
    "path": "gcpdiag/lint/dataproc/warn_2024_002_hdfs_write_issue.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"HDFS can write file(s) to DataNode(s).\n\nHDFS had issues writing file(s) to DataNode(s).\n\"\"\"\n\nimport re\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, dataproc, logs\n\nRE_PATTERN = (\n    '(.*could only be written to .*are excluded in this operation.*)|'\n    '(.*could only be replicated to .*are excluded in this operation.*)')\n\nLOG_NAME = 'hadoop-hdfs-namenode'\nSEVERITY = 'DEFAULT'\nLOG_FILTER = [f'severity=\"{SEVERITY}\"', f'jsonPayload.message=~\"{RE_PATTERN}\"']\n\nMSG_RE = re.compile(RE_PATTERN)\n\nlogs_by_project = {}\nclusters_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='cloud_dataproc_cluster',\n      log_name=f'log_id(\"{LOG_NAME}\")',\n      filter_str=' AND '.join(LOG_FILTER),\n  )\n\n\ndef prefetch_rule(context: models.Context):\n  clusters_by_project[context.project_id] = dataproc.get_clusters(context)\n\n\ndef is_relevant(entry, context):\n  return all([\n      get_path(entry,\n               ('resource', 'labels', 'project_id')) == context.project_id,\n      get_path(entry, ('resource', 'type')) == 'cloud_dataproc_cluster',\n      get_path(entry,\n               'logName') == f'projects/{context.project_id}/logs/{LOG_NAME}',\n      MSG_RE.match(get_path(entry, ('jsonPayload', 'message'))),\n  ])\n\n\ndef get_clusters_having_relevant_log_entries(context):\n  return {\n      get_path(e, ('resource', 'labels', 'cluster_name'), default=None)\n      for e in logs_by_project[context.project_id].entries\n      if is_relevant(e, context)\n  }\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  \"\"\"RUN the rule.\"\"\"\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(None, 'logging api is disabled')\n    return\n\n  clusters_with_issues = get_clusters_having_relevant_log_entries(context)\n\n  for cluster in clusters_by_project[context.project_id]:\n    if cluster.name in clusters_with_issues:\n      report.add_failed(\n          cluster,\n          'HDFS could not write file(s) to DataNode(s).',\n      )\n    else:\n      report.add_ok(cluster)\n"
  },
  {
    "path": "gcpdiag/lint/gae/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/lint/gae/err_2023_001_appengine_vpc_connector_policy.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"App Engine: VPC Connector creation failure due to Org Policy\n\nOrganizational policy is preventing the creation of a Serverless VPC Access Connector.\n\"\"\"\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nSEVERITY = 'ERROR'\nMETHOD_NAME = 'google.cloud.vpcaccess.v1.VpcAccessService.CreateConnector'\nMESSAGE = 'An internal error occurred: VPC Access connector failed to get healthy'\nLOG_ID = 'log_id(\"cloudaudit.googleapis.com/activity\")'\nRESOURCE_TYPE = 'audited_resource'\n\nLOG_FILTER = [\n    f'severity={SEVERITY}',\n    f'protoPayload.methodName=\"{METHOD_NAME}\"',\n    f'protoPayload.status.message:\"{MESSAGE}\"',\n]\n\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type=RESOURCE_TYPE,\n      log_name=LOG_ID,\n      filter_str=' AND '.join(LOG_FILTER))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n\n  # skip entire rule if Logging API is disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'logging api is disabled')\n    return\n\n  # skip entire rule if VPC Access API is disabled\n  if not apis.is_enabled(context.project_id, 'vpcaccess'):\n    report.add_skipped(project, 'vpc access api is disabled')\n    return\n\n  if logs_by_project.get(context.project_id) and \\\n     logs_by_project[context.project_id].entries:\n    for log_entry in logs_by_project[context.project_id].entries:\n      # Filter out non-relevant log entries.\n      if log_entry['severity'] != 'ERROR' or \\\n          METHOD_NAME not in get_path(log_entry,\n                     ('protoPayload', 'methodName'), default='') or \\\n          MESSAGE not in get_path(log_entry,\n                     ('protoPayload', 'status', 'message'), default=''):\n        continue\n      report.add_failed(\n          project, 'There may have been a failed VPC \\\n        connector creation issue on App Engine due to the org policy')\n      return\n\n  # in case of there is no log or all logs are non-relevant\n  report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/gae/err_2023_002_appengine_vpc_connector_subnet_overlap.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"App Engine: VPC Connector creation due to subnet overlap\n\nWhen creating a VPC connector it fails to create a subnet overlapping with\nthe auto subnet networks in the range 10.128.0.0/9\n\"\"\"\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nSEVERITY = 'ERROR'\nMETHOD_NAME = 'v1.compute.subnetworks.insert'\nSERVICE_NAME = 'compute.googleapis.com'\nPRINCIPAL_EMAIL = '%projectNumber%@cloudservices.gserviceaccount.com'\nMESSAGE = 'networks cannot overlap with 10.128.0.0/9'\nLOG_ID = 'log_id(\"cloudaudit.googleapis.com/activity\")'\nRESOURCE_TYPE = 'audited_resource'\n\nLOG_FILTER = [\n    f'severity={SEVERITY}', f'protoPayload.methodName=\"{METHOD_NAME}\"',\n    f'protoPayload.serviceName=\"{SERVICE_NAME}\"',\n    f'protoPayload.authenticationInfo.principalEmail=\"{PRINCIPAL_EMAIL}\"',\n    f'\"{MESSAGE}\"'\n]\n\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type=RESOURCE_TYPE,\n      log_name=LOG_ID,\n      filter_str=' AND '.join(LOG_FILTER))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n\n  # skip entire rule if Logging API is disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'logging api is disabled')\n    return\n\n  # skip entire rule if VPC Access API is disabled\n  if not apis.is_enabled(context.project_id, 'vpcaccess'):\n    report.add_skipped(project, 'vpc access api is disabled')\n    return\n\n  if logs_by_project.get(context.project_id) and \\\n     logs_by_project[context.project_id].entries:\n    for log_entry in logs_by_project[context.project_id].entries:\n      # Filter out non-relevant log entries.\n      if log_entry['severity'] != 'ERROR' or \\\n          METHOD_NAME not in get_path(log_entry,\n                     ('protoPayload', \\\n                      'methodName'), default='') or \\\n          SERVICE_NAME not in get_path(log_entry,\n                     ('protoPayload', \\\n                      'serviceName'), default='') or \\\n          PRINCIPAL_EMAIL not in get_path(log_entry,\n                     ('protoPayload', \\\n                      'authenticationInfo', \\\n                      'principalEmail'), default='') or \\\n          MESSAGE not in log_entry:\n        continue\n      report.add_failed(\n          project, 'There may have been a failed VPC \\\n            connector creation issue on App Engine due to overlapping subnetworks \\\n              in the range 10.128.0.0/9 [auto-subnetworks]')\n      return\n\n  # in case of there is no log or all logs are non-relevant\n  report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/gae/err_2025_001_gae_default_service_account_is_deleted.py",
    "content": "# Copyright 2025 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GAE default service account is deleted\n\nGAE default service account (@appspot.gserviceaccount.com) by default is used\nfor GAE applications deployment when user-defined service account is not declared\n\nIf it's recently deleted, recover the SA otherwise use user-defined service account\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\ndelete_sa_logs, failed_deploy_logs = {}, {}\n\n\ndef prepare_rule(context: models.Context):\n  log_id = 'log_id(\"cloudaudit.googleapis.com/activity\")'\n  status_message = 'The AppEngine default service account might have been manually deleted'\n  email = f\"{context.project_id}@appspot.gserviceaccount.com\"\n\n  failed_deploy_logs[context.project_id] = logs.query(\n      project_id=context.project_id,\n      log_name=log_id,\n      resource_type='gae_app',\n      filter_str=\n      f'severity=\"ERROR\" AND protoPayload.status.message:\"{status_message}\"')\n\n  delete_sa_logs[context.project_id] = logs.query(\n      project_id=context.project_id,\n      log_name=log_id,\n      resource_type='service_account',\n      filter_str=f'resource.labels.email_id=\"{email}\" \\\n      AND protoPayload.methodName=\"google.iam.admin.v1.DeleteServiceAccount\"')\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n  # skip entire rule if Logging API is disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'Logging api is disabled')\n    return\n\n  # If the customer recently deleted their GAE default SA\n  if delete_sa_logs.get(context.project_id) and \\\n      delete_sa_logs[context.project_id].entries:\n    report.add_failed(\n        project, 'The App Engine default service account was recently deleted. \\\n    Please follow the steps at \\\n    https://cloud.google.com/iam/docs/service-accounts-delete-undelete#undeleting \\\n    to recover it.')\n\n  # If the customer tried to deploy and failed due to the default service account\n  if failed_deploy_logs.get(context.project_id) and \\\n    failed_deploy_logs[context.project_id].entries:\n    report.add_failed(\n        project,\n        'Failure deploying to App Engine: The App Engine default service account is deleted. \\\n    Please use a user-managed service account instead.')\n  else:\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/gae/gae_rules_snapshot_test.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\" Generalize rule snapshot testing \"\"\"\n\nfrom gcpdiag.lint import gae, snapshot_test_base\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = gae\n  project_id = 'gcpdiag-gaes1-aaaa'\n"
  },
  {
    "path": "gcpdiag/lint/gae/snapshots/ERR_2023_001.txt",
    "content": "*  gae/ERR/2023_001: App Engine: VPC Connector creation failure due to Org Policy\n   - projects/gcpdiag-gaes1-aaaa                                          [SKIP]\n     vpc access api is disabled\n\n"
  },
  {
    "path": "gcpdiag/lint/gae/snapshots/ERR_2023_002.txt",
    "content": "*  gae/ERR/2023_002: App Engine: VPC Connector creation due to subnet overlap\n   - projects/gcpdiag-gaes1-aaaa                                          [SKIP]\n     vpc access api is disabled\n\n"
  },
  {
    "path": "gcpdiag/lint/gae/snapshots/ERR_2025_001.txt",
    "content": "*  gae/ERR/2025_001: GAE default service account is deleted\n   - projects/gcpdiag-gaes1-aaaa                                          [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/gae/snapshots/WARN_2022_001.txt",
    "content": "*  gae/WARN/2022_001: App Engine Standard versions don't use deprecated runtimes.\n   - apps/gcpdiag-gaes1-aaaa/services/default/versions/v1                 [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/gae/snapshots/WARN_2022_002.txt",
    "content": "*  gae/WARN/2022_002: App Engine Flexible versions don't use deprecated runtimes.\n   (no versions found for flexible environment)                           [SKIP]\n\n"
  },
  {
    "path": "gcpdiag/lint/gae/warn_2022_001_appengine_standard_deprecated_runtimes.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"App Engine Standard versions don't use deprecated runtimes.\n\nThe following runtimes are deprecated: 'go16', 'go18', 'go19', 'java7', 'php'.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gae\n\nDEPRECATED_RUNTIMES = ['go16', 'go18', 'go19', 'java7', 'php']\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  versions = gae.get_versions(context)\n  if not versions:\n    report.add_skipped(None, 'no versions found for standard environment')\n    return\n\n  for version in sorted(versions.values(), key=lambda version: version.id):\n    if version.env != 'standard':\n      report.add_skipped(None, 'no versions found for standard environment')\n      return\n    if version.runtime in DEPRECATED_RUNTIMES:\n      report.add_failed(\n          version, f'the version \\'{version.id}\\' for '\n          f'the service \\'{version.service.name}\\' '\n          f'uses deprecated runtime {version.runtime}')\n    else:\n      report.add_ok(version)\n"
  },
  {
    "path": "gcpdiag/lint/gae/warn_2022_002_appengine_flexible_deprecated_runtimes.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"App Engine Flexible versions don't use deprecated runtimes.\n\nThe following runtimes are deprecated: 'go16', 'go18', 'python27'.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gae\n\nDEPRECATED_RUNTIMES = ['go16', 'go18', 'python27']\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  versions = gae.get_versions(context)\n  if not versions:\n    report.add_skipped(None, 'no versions found for flexible environment')\n    return\n\n  for version in sorted(versions.values(), key=lambda version: version.id):\n    if version.env != 'flexible':\n      report.add_skipped(None, 'no versions found for flexible environment')\n      return\n    if version.runtime in DEPRECATED_RUNTIMES:\n      report.add_failed(\n          version, f'the version \\'{version.id}\\' for '\n          f'the service \\'{version.service.name}\\' '\n          f'uses deprecated runtime {version.runtime}')\n    else:\n      report.add_ok(version)\n"
  },
  {
    "path": "gcpdiag/lint/gcb/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/lint/gcb/err_2022_001_missing_cloudbuild_editor_role.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Cloud Build service account has the cloudbuild.builds.builder role.\n\nThe Cloud Build service account is missing the cloudbuild.builds.builder role,\nwhich is required for the service account to run a build trigger.\nYou can resolve this error by granting the Cloud Build Service Account IAM role\nto [PROJECT_NUMBER]@cloudbuild.gserviceaccount.com.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import crm, gcb, iam\n\nROLE = 'roles/cloudbuild.builds.builder'\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  triggers = gcb.get_triggers(context)\n  if not triggers:\n    report.add_skipped(None, 'no triggers found')\n    return\n  project = crm.get_project(context.project_id)\n  sa_email = f'{project.number}@cloudbuild.gserviceaccount.com'\n  iam_policy = iam.get_project_policy(context)\n  if not iam_policy.has_role_permissions(f'serviceAccount:{sa_email}', ROLE):\n    report.add_failed(project,\n                      f'service account: {sa_email}\\nmissing role: {ROLE}')\n  else:\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/gcb/err_2022_002_build_failed_whithout_artifact_registry_permission.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Builds don't fail because of failed registry permissions.\n\nBuilds configured to upload image to Artifact Registry must use service account  that has write\npermission for it.\n\"\"\"\nimport abc\nimport dataclasses\nimport re\nfrom typing import Iterable, Set\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import artifact_registry, crm, gcb, iam\n\nPERMISSION = 'artifactregistry.repositories.uploadArtifacts'\nGCR_LOCATION_MAP = {\n    'gcr.io': 'us',\n    'asia.gcr.io': 'asia',\n    'eu.gcr.io': 'europe',\n    'us.gcr.io': 'us',\n}\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  builds = gcb.get_builds(context)\n  if len(builds) == 0:\n    report.add_skipped(None, 'no recent builds')\n    return\n  project = crm.get_project(context.project_id)\n  found = list(\n      find_builds_without_image_upload_permission(\n          context,\n          builds.values(),\n          default_sa=f'{project.number}@cloudbuild.gserviceaccount.com',\n      ))\n  if len(found) == 0:\n    report.add_ok(project)\n  for status in found:\n    report.add_failed(\n        status.build,\n        reason=f'{status.service_account} can not '\n        f'read {status.repository.format_message()}',\n    )\n\n\n@dataclasses.dataclass\nclass FailedBuildStatus:\n  build: gcb.Build\n  service_account: str\n  repository: 'Repository'\n\n\nclass Repository(abc.ABC):\n\n  @abc.abstractmethod\n  def can_read_registry(self, context: models.Context,\n                        service_account_email: str) -> bool:\n    pass\n\n  @abc.abstractmethod\n  def format_message(self) -> str:\n    pass\n\n\nclass GcrRepository(Repository):\n  \"\"\"Represents AR or GCR docker repository that can be accessed by gcr.io domain.\"\"\"\n\n  def __init__(self, project_id: str, repository: str):\n    self.project_id = project_id\n    self.repository = repository\n\n  def can_read_registry(self, context: models.Context,\n                        service_account_email: str) -> bool:\n    if not artifact_registry.get_project_settings(\n        self.project_id).legacy_redirect:\n      # In case of failure to upload to gcr.io cloud build provides useful information.\n      return True\n    location = GCR_LOCATION_MAP[self.repository]\n    return ArtifactRepository(self.project_id, location, self.repository) \\\n        .can_read_registry(context, service_account_email)\n\n  def format_message(self) -> str:\n    return f'{self.repository} registry in {self.project_id} project.'\n\n\nclass ArtifactRepository(Repository):\n  \"\"\"Represents AR docker repository that can be accessed by pkg.dev domain.\"\"\"\n\n  def __init__(self, project_id: str, location: str, repository: str):\n    self.project_id = project_id\n    self.location = location\n    self.repository = repository\n\n  def can_read_registry(self, context: models.Context,\n                        service_account_email: str) -> bool:\n    project_policy = iam.get_project_policy(context)\n    member = f'serviceAccount:{service_account_email}'\n    if project_policy.has_permission(member, PERMISSION):\n      return True\n    registry_policy = artifact_registry.get_registry_iam_policy(\n        context, self.location, self.repository)\n    return registry_policy.has_permission(member, PERMISSION)\n\n  def format_message(self) -> str:\n    return (f'{self.repository} registry in {self.location} in'\n            f' {self.project_id} project.')\n\n\ndef find_builds_without_image_upload_permission(\n    context: models.Context,\n    builds: Iterable[gcb.Build],\n    default_sa: str,\n) -> Iterable[FailedBuildStatus]:\n  for build in builds:\n    sa = (build.service_account or default_sa).split('/')[-1]\n    if build.status != 'FAILURE':\n      continue\n    for repository in get_used_registries(build.images):\n      if not repository.can_read_registry(context, sa):\n        yield FailedBuildStatus(build, sa, repository)\n\n\ndef get_used_registries(images: Iterable[str]) -> Iterable[Repository]:\n  result: Set[Repository] = set()\n  for image in images:\n    m = re.match('([^.]+)-docker.pkg.dev/([^/]+)/([^/]+)/(?:[^.]+)', image)\n    if m:\n      result.add(\n          ArtifactRepository(\n              project_id=m.group(2),\n              location=m.group(1),\n              repository=m.group(3),\n          ))\n    m = re.match('((?:[^.]+-)?gcr.io)/([^/]+)/(?:[^.]+)', image)\n    if m:\n      result.add(GcrRepository(\n          project_id=m.group(2),\n          repository=m.group(1),\n      ))\n  return result\n"
  },
  {
    "path": "gcpdiag/lint/gcb/err_2022_003_build_failed_with_logs_bucket_retention_policy.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Builds don't fail because of retention policy set on logs bucket.\n\nBuilds that upload logs to bucket with retention policy must do that once build is finished instead\nof streaming them.\n\"\"\"\nimport dataclasses\nimport re\nfrom typing import Iterable\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import crm, gcb, gcs\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  builds = gcb.get_builds(context)\n  if len(builds) == 0:\n    report.add_skipped(None, 'no recent builds')\n    return\n  project = crm.get_project(context.project_id)\n  found = list(find_builds_failing_to_upload_logs(context, builds.values()))\n  if len(found) == 0:\n    report.add_ok(project)\n  for status in found:\n    report.add_failed(\n        status.build,\n        reason=f'Build can not stream logs to bucket'\n        f' {status.bucket} because it has retention policy set.',\n    )\n\n\n@dataclasses.dataclass\nclass FailedBuildStatus:\n  build: gcb.Build\n  bucket: str\n\n\ndef find_builds_failing_to_upload_logs(\n    context: models.Context,\n    builds: Iterable[gcb.Build]) -> Iterable[FailedBuildStatus]:\n  for build in builds:\n    if build.failure_info.failure_type != 'LOGGING_FAILURE':\n      continue\n    bucket_match = re.match('gs://(.*)$', build.logs_bucket or '')\n    if bucket_match and build.options.is_bucket_streaming_enabled():\n      bucket_name = bucket_match.group(1)\n      bucket_data = gcs.get_bucket(context, bucket_name)\n      if bucket_data.retention_policy.retention_period > 0:\n        yield FailedBuildStatus(build, bucket_name)\n"
  },
  {
    "path": "gcpdiag/lint/gcb/err_2022_004_missing_cloudbuild_service_agent_role.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Cloud Build Service Agent has the cloudbuild.serviceAgent role.\n\nThe Cloud Build Service Agent is missing the cloudbuild.serviceAgent role,\nwhich gives Cloud Build service account access to managed resources.\nYou can resolve this error by granting the Cloud Build Service Agent\n(roles/cloudbuild.serviceAgent) IAM role\nto service-[PROJECT_NUMBER]@gcp-sa-cloudbuild.iam.gserviceaccount.com.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import crm, gcb, iam\n\nROLE = 'roles/cloudbuild.serviceAgent'\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  triggers = gcb.get_triggers(context)\n  if not triggers:\n    report.add_skipped(None, 'no triggers found')\n    return\n  project = crm.get_project(context.project_id)\n  sa_email = f'service-{project.number}@gcp-sa-cloudbuild.iam.gserviceaccount.com'\n  iam_policy = iam.get_project_policy(context)\n  if not iam_policy.has_role_permissions(f'serviceAccount:{sa_email}', ROLE):\n    report.add_failed(project,\n                      f'service account: {sa_email}\\nmissing role: {ROLE}')\n  else:\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/gcb/gcb_rules_snapshot_test.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\" Generalize rule snapshot testing \"\"\"\n\nfrom gcpdiag.lint import gcb, snapshot_test_base\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = gcb\n  project_id = 'gcpdiag-gcb1-aaaa'\n"
  },
  {
    "path": "gcpdiag/lint/gcb/snapshots/ERR_2022_001.txt",
    "content": "*  gcb/ERR/2022_001: Cloud Build service account has the cloudbuild.builds.builder role.\n   - projects/gcpdiag-gcb1-aaaa                                           [FAIL]\n     service account: 12340005@cloudbuild.gserviceaccount.com\n     missing role: roles/cloudbuild.builds.builder\n\n   The Cloud Build service account is missing the cloudbuild.builds.builder\n   role, which is required for the service account to run a build trigger. You\n   can resolve this error by granting the Cloud Build Service Account IAM role\n   to [PROJECT_NUMBER]@cloudbuild.gserviceaccount.com.\n\n   https://gcpdiag.dev/rules/gcb/ERR/2022_001\n\n"
  },
  {
    "path": "gcpdiag/lint/gcb/snapshots/ERR_2022_002.txt",
    "content": "*  gcb/ERR/2022_002: Builds don't fail because of failed registry permissions.\n   - projects/gcpdiag-gcb1-aaaa/locations/-/builds/db540598-5a45-46f3-a716-39d834e884c6 [FAIL]\n     gcb-custom1@gcpdiag-gcb1-aaaa.iam.gserviceaccount.com can not read gcb1-repository registry in us-central1 in gcpdiag-gcb1-aaaa project.\n   - projects/gcpdiag-gcb1-aaaa/locations/-/builds/d2a2f7f0-f660-40cb-8cb1-574d29832e74 [FAIL]\n     gcb-custom1@gcpdiag-gcb1-aaaa.iam.gserviceaccount.com can not read gcr.io registry in gcpdiag-gcb1-aaaa project.\n\n   Builds configured to upload image to Artifact Registry must use service\n   account  that has write permission for it.\n\n   https://gcpdiag.dev/rules/gcb/ERR/2022_002\n\n"
  },
  {
    "path": "gcpdiag/lint/gcb/snapshots/ERR_2022_003.txt",
    "content": "*  gcb/ERR/2022_003: Builds don't fail because of retention policy set on logs bucket.\n   - projects/gcpdiag-gcb1-aaaa/locations/-/builds/58c22070-5629-480e-b822-cd8eff7befb8 [FAIL]\n     Build can not stream logs to bucket gcpdiag-gcb1-bucket1-aaaa because it has retention policy set.\n\n   Builds that upload logs to bucket with retention policy must do that once\n   build is finished instead of streaming them.\n\n   https://gcpdiag.dev/rules/gcb/ERR/2022_003\n\n"
  },
  {
    "path": "gcpdiag/lint/gcb/snapshots/ERR_2022_004.txt",
    "content": "*  gcb/ERR/2022_004: Cloud Build Service Agent has the cloudbuild.serviceAgent role.\n   - projects/gcpdiag-gcb1-aaaa                                           [FAIL]\n     service account: service-12340005@gcp-sa-cloudbuild.iam.gserviceaccount.com\n     missing role: roles/cloudbuild.serviceAgent\n\n   The Cloud Build Service Agent is missing the cloudbuild.serviceAgent role,\n   which gives Cloud Build service account access to managed resources. You can\n   resolve this error by granting the Cloud Build Service Agent\n   (roles/cloudbuild.serviceAgent) IAM role to service-[PROJECT_NUMBER]@gcp-sa-\n   cloudbuild.iam.gserviceaccount.com.\n\n   https://gcpdiag.dev/rules/gcb/ERR/2022_004\n\n"
  },
  {
    "path": "gcpdiag/lint/gce/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/lint/gce/bp_2021_001_serial_logging_enabled.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Serial port logging is enabled.\n\nSerial port output can be often useful for troubleshooting, and enabling serial\nlogging makes sure that you don't lose the information when the VM is restarted.\nAdditionally, serial port logs are timestamped, which is useful to determine\nwhen a particular serial output line was printed.\n\"\"\"\n\nimport operator as op\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gce\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  instances = gce.get_instances(context)\n  instances_count = 0\n  for i in sorted(instances.values(),\n                  key=op.attrgetter('project_id', 'full_path')):\n    instances_count += 1\n    if i.is_dataproc_instance():\n      report.add_skipped(i, 'skipping dataproc instance')\n      continue\n    if i.is_serial_port_logging_enabled():\n      report.add_ok(i)\n    else:\n      report.add_failed(i)\n  if not instances_count:\n    report.add_skipped(None, 'no instances found')\n"
  },
  {
    "path": "gcpdiag/lint/gce/bp_2022_003_unused_boot_disks.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GCE unattached bootable disk.\n\nUnattached bootable disks are abandoned or orphaned resources that are detached\nfrom a instance or service.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import crm, gce\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  disks = gce.get_all_disks(context)\n\n  if not disks:\n    report.add_skipped(None, 'no disks found')\n    return\n\n  all_ok = True\n  for d in sorted(disks, key=lambda d: d.name):\n    if d.bootable and not d.in_use:\n      report.add_failed(\n          d, f'Unattached bootable disk: {d.name} in zone: {d.zone}')\n      all_ok = False\n  if all_ok:\n    project = crm.get_project(context.project_id)\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/gce/bp_2023_001_ntp_config.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Instance time source is configured with Google NTP server\n\nGoogle recommends Compute Engine instances to be configured with\nGoogle NTP servers to facilitate reliable time sync. Google can't predict how\nexternal NTP services behave. If at all possible, it is recommended that you do\nnot use external NTP sources with Compute Engine virtual machines.\n\"\"\"\n\nfrom typing import Optional\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.lint.gce import utils\nfrom gcpdiag.queries import gce\nfrom gcpdiag.queries.logs import LogEntryShort\n\nNTP_TIME_SYNC_MESSAGES = ['Time synchronized with', 'Selected source']\nRECOMMENDED_NTP_SERVERS = [\n    'metadata.google.internal', '169.254.169.254', 'metadata.google'\n]\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  filter_str = '''textPayload:(\"chronyd\" OR \"ntpd\")\n   AND (\"Selected source\" OR \"Time synchronized with\")'''\n  logs_by_project[context.project_id] = utils.SerialOutputSearch(\n      context, search_strings=NTP_TIME_SYNC_MESSAGES, custom_filter=filter_str)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # skip entire rule if serial outputs are unavailable\n  if not utils.is_serial_port_one_logs_available(context):\n    report.add_skipped(None, 'serial port output is unavailable')\n    return\n\n  search = logs_by_project[context.project_id]\n\n  instances = gce.get_instances(context).values()\n\n  if instances:\n    for instance in sorted(instances, key=lambda i: i.name):\n      match: Optional[LogEntryShort] = search.get_last_match(\n          instance_id=instance.id)\n      if not match:\n        report.add_skipped(instance, 'No indication of NTP Service time sync')\n      elif not any(server in match.text for server in RECOMMENDED_NTP_SERVERS):\n        report.add_failed(instance, (f\"{match.text.split(']:')[1][:-4]}\"\n                                     'is not a GCP recommended NTP server'))\n      else:\n        report.add_ok(instance)\n  else:\n    report.add_skipped(None, 'No instances found')\n"
  },
  {
    "path": "gcpdiag/lint/gce/bp_2024_001_legacy_monitoring_agent.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Verify that GCE VM Instances Don't Have Legacy Monitoring Agent Installed.\n\nPlease uninstall the legacy monitoring agent from any VMs where it's\ndetected and install the Ops Agent.\n\nTo uninstall legacy monitoring agent, please follow:\nhttps://cloud.google.com/monitoring/agent/monitoring/installation#uninstall.\n\nTo install the latest version of Ops Agent, please follow:\nhttps://cloud.google.com/stackdriver/docs/solutions/agents/ops-agent/installation#install-latest-version.\n\"\"\"\n\nimport operator as op\nfrom typing import Dict\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gce, monitoring, osconfig\n\n_query_results_project_id: Dict[str, monitoring.TimeSeriesCollection] = {}\n\nLEGACY_MONITORING_AGENT_PACKAGE_NAME = 'stackdriver-agent'\nLEGACY_MONITORING_AGENT_METRICS_LABEL = 'stackdriver_agent'\nLEGACY_AGENT_NOT_DETECTED = 'Legacy monitoring agent not installed on the VM'\nUNABLE_TO_DETECT = 'Unable to confirm legacy monitoring agent installation'\nUNABLE_TO_DETECT_EXPLANATION = (\n    'VM Manager is needed for the legacy agent detection. Please enable it at:'\n    ' https://cloud.google.com/compute/docs/manage-os#automatic and run this'\n    ' check again.')\nLEGACY_AGENT_DETECTED = 'Legacy monitoring agent installed on the VM'\n\n\ndef prefetch_rule(context: models.Context):\n  _query_results_project_id[context.project_id] = monitoring.query(\n      context.project_id,\n      \"\"\"\nfetch gce_instance\n| metric 'agent.googleapis.com/agent/uptime'\n| align rate(4m)\n| every 4m\n  \"\"\",\n  )\n  # Fetch os inventory info for all VM instances.\n  for i in gce.get_instances(context).values():\n    osconfig.get_inventory(context, i.zone, i.name)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  instances = list(gce.get_instances(context).values())\n  if not instances:\n    report.add_skipped(\n        None, f'No VM instances found in project: {context.project_id}.')\n    return\n\n  instances_without_osinventory = []\n  for i in sorted(instances, key=op.attrgetter('project_id', 'full_path')):\n    if i.is_gke_node():\n      continue\n    inventory = osconfig.get_inventory(context, i.zone, i.name)\n    if inventory is None:\n      instances_without_osinventory.append(i)\n      continue\n    legacy_agent_found = False\n    for pkg_name in inventory.installed_packages:\n      if LEGACY_MONITORING_AGENT_PACKAGE_NAME in pkg_name:\n        report.add_failed(\n            i,\n            '',\n            LEGACY_AGENT_DETECTED,\n        )\n        legacy_agent_found = True\n        break\n    if not legacy_agent_found:\n      report.add_ok(i, LEGACY_AGENT_NOT_DETECTED)\n\n  query = _query_results_project_id[context.project_id]\n  try:\n    vms_agents = {\n        e['labels']['resource.instance_id']: e['labels']['metric.version']\n        for e in query.values()\n    }\n  except KeyError:\n    for i in instances_without_osinventory:\n      report.add_skipped(\n          i,\n          UNABLE_TO_DETECT_EXPLANATION,\n          UNABLE_TO_DETECT,\n      )\n    return\n\n  for i in sorted(\n      instances_without_osinventory,\n      key=op.attrgetter('project_id', 'name'),\n  ):\n    if i.is_gke_node():\n      continue\n    if i.id in vms_agents:\n      if LEGACY_MONITORING_AGENT_METRICS_LABEL in vms_agents[i.id]:\n        report.add_failed(\n            i,\n            '',\n            LEGACY_AGENT_DETECTED,\n        )\n      else:\n        report.add_ok(i, LEGACY_AGENT_NOT_DETECTED)\n    else:\n      report.add_skipped(\n          i,\n          UNABLE_TO_DETECT_EXPLANATION,\n          UNABLE_TO_DETECT,\n      )\n"
  },
  {
    "path": "gcpdiag/lint/gce/bp_2024_002_legacy_logging_agent.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Verify that GCE VM Instances Don't Have Legacy Logging Agent Installed.\n\nPlease uninstall the legacy Logging Agent from any VMs where it's\ndetected and install the Ops Agent.\n\nTo uninstall legacy Logging Agent, please follow:\nhttps://cloud.google.com/stackdriver/docs/solutions/agents/logging/installation#uninstall.\n\nTo install the latest version of Ops Agent, please follow:\nhttps://cloud.google.com/stackdriver/docs/solutions/agents/ops-agent/installation#install-latest-version.\n\"\"\"\n\nimport operator as op\nfrom typing import Dict\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gce, monitoring, osconfig\n\n_query_results_project_id: Dict[str, monitoring.TimeSeriesCollection] = {}\n\nLEGACY_LOGGING_AGENT = 'google-fluentd'\nLEGACY_AGENT_NOT_DETECTED = 'Legacy logging agent not installed on the VM'\nUNABLE_TO_DETECT = 'Unable to detect legacy logging agent'\nUNABLE_TO_DETECT_EXPLANATION = (\n    'VM Manager is needed for the legacy agent detection. Please enable it at:'\n    ' https://cloud.google.com/compute/docs/manage-os#automatic and run this'\n    ' check again.')\nLEGACY_AGENT_DETECTED = 'Legacy logging agent installed on the VM'\n\n\ndef prefetch_rule(context: models.Context):\n  # Fetch agent uptime metrics.\n  _query_results_project_id[context.project_id] = monitoring.query(\n      context.project_id,\n      \"\"\"\nfetch gce_instance\n| metric 'agent.googleapis.com/agent/uptime'\n| align rate(4m)\n| every 4m\n  \"\"\",\n  )\n  # Fetch os inventory info for all VM instances.\n  for i in gce.get_instances(context).values():\n    osconfig.get_inventory(context, i.zone, i.name)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  instances = list(gce.get_instances(context).values())\n  if not instances:\n    report.add_skipped(\n        None, f'No VM instances found in project: {context.project_id}.')\n    return\n\n  instances_without_osinventory = []\n  for i in sorted(instances, key=op.attrgetter('project_id', 'full_path')):\n    if i.is_gke_node():\n      continue\n    inventory = osconfig.get_inventory(context, i.zone, i.name)\n    if inventory is None:\n      instances_without_osinventory.append(i)\n      continue\n    legacy_agent_found = False\n    for pkg_name in inventory.installed_packages:\n      if LEGACY_LOGGING_AGENT in pkg_name:\n        report.add_failed(\n            i,\n            '',\n            LEGACY_AGENT_DETECTED,\n        )\n        legacy_agent_found = True\n        break\n    if not legacy_agent_found:\n      report.add_ok(i, LEGACY_AGENT_NOT_DETECTED)\n  query = _query_results_project_id[context.project_id]\n  try:\n    vms_agents = {\n        e['labels']['resource.instance_id']: e['labels']['metric.version']\n        for e in query.values()\n    }\n  except KeyError:\n    for i in instances_without_osinventory:\n      report.add_skipped(\n          i,\n          UNABLE_TO_DETECT_EXPLANATION,\n          UNABLE_TO_DETECT,\n      )\n    return\n\n  for i in sorted(\n      instances_without_osinventory,\n      key=op.attrgetter('project_id', 'name'),\n  ):\n    if i.is_gke_node():\n      continue\n    if i.id in vms_agents:\n      if LEGACY_LOGGING_AGENT in vms_agents[i.id]:\n        report.add_failed(\n            i,\n            '',\n            LEGACY_AGENT_DETECTED,\n        )\n      else:\n        report.add_ok(i, LEGACY_AGENT_NOT_DETECTED)\n    else:\n      report.add_skipped(\n          i,\n          UNABLE_TO_DETECT_EXPLANATION,\n          UNABLE_TO_DETECT,\n      )\n"
  },
  {
    "path": "gcpdiag/lint/gce/bp_ext_2021_003_secure_boot_enabled.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Secure Boot is enabled\n\nGoogle recommends enabling Secure Boot if you can ensure that it doesn't\nprevent a representative test VM from booting and if it is appropriate\nfor your workload. Compute Engine does not enable Secure Boot by default\nbecause unsigned drivers and other low-level software might not be compatible.\n\"\"\"\nimport operator as op\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gce\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  instances = gce.get_instances(context)\n  instances_count = 0\n  for i in sorted(instances.values(),\n                  key=op.attrgetter('project_id', 'full_path')):\n    # GKE nodes are not checked by this rule\n    if i.is_gke_node():\n      continue\n    instances_count += 1\n    if i.secure_boot_enabled():\n      report.add_ok(i)\n    else:\n      report.add_failed(i)\n  if not instances_count:\n    report.add_skipped(None, 'no instances found')\n"
  },
  {
    "path": "gcpdiag/lint/gce/bp_ext_2022_001_vm_manager_enabled.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"GCP project has VM Manager enabled\n\nGoogle recommends enabling VM Manager. It provides visibility on software vulnerabilities,\nmissing updates and enables to set configuration management policies\n\"\"\"\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n  if apis.is_enabled(context.project_id, 'osconfig'):\n    report.add_ok(project)\n  else:\n    report.add_failed(project,\n                      'it is recommended to enable VM Manager on your project')\n"
  },
  {
    "path": "gcpdiag/lint/gce/bp_ext_2023_001_gce_scopes.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"GCE Instances follows access scope best practice\n\nGoogle recommends not to rely on access scopes but instead set the cloud-platform access\nscope and control the service account access by granting fine-grained IAM roles.\nEnabling a custom service account with very coarse-grained permissions\nand a very restricted access scope will ensure the connection\nto or from the VM is limited and implements a security-in-depth strategy where multiple\nlayers of security are used for holistic protection.\n\"\"\"\n\nimport operator as op\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import crm, gce, iam\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n\n  #Fetching the list of instances and declaring an IAM policy object\n  instances = gce.get_instances(context)\n  iam_policy = iam.get_project_policy(context)\n  project_number = crm.get_project(context.project_id).number\n  cloud_platform_scope = \"https://www.googleapis.com/auth/cloud-platform\"\n\n  #Defining list of pre-defined roles that a default SA must not have\n  roles = [\"roles/editor\", \"roles/owner\", \"roles/viewer\", \"roles/browser\"]\n\n  if not instances:\n    report.add_skipped(None, \"no instances found\")\n    return\n\n  for i in sorted(instances.values(),\n                  key=op.attrgetter(\"project_id\", \"full_path\")):\n    service_account = f\"serviceAccount:{i.service_account}\"\n    basic_roles_granted = [\n        iam_policy.has_role_permissions(service_account, role) for role in roles\n    ]\n    # GKE nodes are not checked by this rule\n    if i.is_gke_node():\n      continue\n\n    if (cloud_platform_scope in i.access_scopes) and any(basic_roles_granted):\n      report.add_failed(\n          i,\n          f\"{i.service_account} has a basic role granted along with cloud-platform scope.\"\n      )\n\n    elif any(basic_roles_granted):\n      report.add_failed(i, f\"{i.service_account} has a basic role granted.\")\n\n    elif (f\"{project_number}-compute@developer.gserviceaccount.com\"\n          not in service_account) and not any(basic_roles_granted):\n      report.add_ok(i)\n"
  },
  {
    "path": "gcpdiag/lint/gce/bp_ext_2024_001_no_public_ip.py",
    "content": "#\n# Copyright 2024 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Instance has a public ip address\n\nIf the Compute Engine instance does not have a public ip address, then\nthe SSH button will be disabled in the SSH in browser UI.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gce\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  instances = gce.get_instances(context).values()\n\n  if instances:\n    for instance in sorted(instances, key=lambda i: i.full_path):\n      if not instance.is_public_machine():\n        report.add_failed(instance, \"Instance does not have a public address.\")\n      else:\n        report.add_ok(instance)\n  else:\n    report.add_skipped(None, \"No instances found\")\n"
  },
  {
    "path": "gcpdiag/lint/gce/bp_ext_2024_002_calculate_vm_iops_throughput.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\" Calculate Google Compute Engine VM's IOPS and Throughput Limits\n\nThis lint rules provide an easy method to calculate the Instance's\ndisk IOPS and Throughput applicable max limits.\n\"\"\"\n\nimport json\nfrom datetime import datetime, timedelta, timezone\n\nimport googleapiclient\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gce, monitoring\n\nvms = None\nproject = None\ninstances: list\n\n\ndef prepare_rule(context: models.Context):\n  global instances\n  instances = [\n      vms for vms in gce.get_instances(context).values()\n      if not vms.is_gke_node()\n  ]\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  \"\"\"Calculating Instance's disk IOPS and Throughput limits\"\"\"\n  if not instances:\n    report.add_skipped(None, 'no instances found')\n    return\n\n  vm: gce.Instance\n  for vm in sorted(instances):\n    if not vm.is_running:\n      report.add_skipped(vm, reason=f'VM {vm.name} is in {vm.status} state')\n    else:\n      # IOPS and Throughput calculation is based on -\n      # https://cloud.google.com/compute/docs/disks/performance\n\n      start_dt_pst = datetime.strptime(vm.laststarttimestamp(),\n                                       '%Y-%m-%dT%H:%M:%S.%f%z')\n      start_dt_utc = start_dt_pst.astimezone(timezone.utc)\n      start_dt_utc_plus_10_mins = start_dt_utc + timedelta(minutes=5)\n      current_time_utc = datetime.now(timezone.utc)\n      within_hours = 9\n      if start_dt_utc_plus_10_mins > current_time_utc and (isinstance(\n          vm.laststoptimestamp(), str)):\n        # Instance just starting up, CpuCount might not be available currently via metrics.\n        # Use instance's last stop time as EndTime for monitoring query\n        stop_dt_pst = datetime.strptime(vm.laststoptimestamp(),\n                                        '%Y-%m-%dT%H:%M:%S.%f%z')\n        stop_dt_utc = stop_dt_pst.astimezone(timezone.utc)\n        end_formatted_string = stop_dt_utc.strftime('%Y/%m/%d %H:%M:%S')\n        within_str = 'within %dh, d\\'%s\\'' % (within_hours,\n                                              end_formatted_string)\n      else:\n        within_str = 'within %dh, d\\'%s\\'' % (within_hours,\n                                              monitoring.period_aligned_now(5))\n      try:\n        cpu_count_query = monitoring.query(\n            context.project_id, \"\"\"\n                  fetch gce_instance\n                  | metric 'compute.googleapis.com/instance/cpu/guest_visible_vcpus'\n                  | filter (resource.instance_id == '{}')\n                  | group_by 1m, [value_guest_visible_vcpus_mean:\n                      mean(value.guest_visible_vcpus)]\n                  | every 1m\n                  | group_by [],\n                      [value_guest_visible_vcpus_mean_aggregate:\n                      aggregate(value_guest_visible_vcpus_mean)]\n                  | {}\n              \"\"\".format(vm.id, within_str))\n      except googleapiclient.errors.HttpError:\n        report.add_skipped(\n            resource=None,\n            reason=('Not able to pull CPU count for instance {}').format(vm))\n\n      if cpu_count_query:\n        cpu_count = int(list(cpu_count_query.values())[0]['values'][0][0])\n      else:\n        report.add_skipped(\n            vm,\n            reason='\\tCPU count info is not available for the instance via'\n            ' Monitoring metric \"guest_visible_vcpus\"',\n            short_info=(\n                '\\n\\tPlease first start the VM {}, if it is not in running state'\n            ).format(vm.short_path))\n        return\n\n      # Fetch list of disks for the instance\n      disk_list = gce.get_all_disks_of_instance(context, vm.zone, vm.name)\n\n      # Load limits per GB data from json file\n      limits_per_gb_file = 'gcpdiag/runbook/gce/disk_performance_benchmark/limits_per_gb.json'\n      with open(limits_per_gb_file, encoding='utf-8') as file:\n        limits_data = json.load(file)\n      file.close()\n\n      vm_family = vm.machine_type()[0]\n\n      # Load instance level iops/throughput limits from json file\n      machine_family_json_file = (\n          'gcpdiag/runbook/gce/disk_performance_benchmark/{}-family.json'\n      ).format(vm_family)\n      with open(machine_family_json_file, encoding='utf-8') as f:\n        mach_fam_json_data = json.load(f)\n      f.close()\n\n      # Fetch disk sizes attached to the VM:\n      total_disk_size = {\n          'pd-balanced': 0,\n          'pd-ssd': 0,\n          'pd-standard': 0,\n          'pd-extreme': 0\n      }\n      provisions_iops = {\n          'pd-balanced': 0,\n          'pd-ssd': 0,\n          'pd-standard': 0,\n          'pd-extreme': 0\n      }\n      disk: gce.Disk\n      for disk_name in disk_list.items():\n        disk = disk_name[1]\n        if disk.type == 'pd-balanced':\n          total_disk_size['pd-balanced'] += int(disk.size)\n        elif disk.type == 'pd-ssd':\n          total_disk_size['pd-ssd'] += int(disk.size)\n        elif disk.type == 'pd-standard':\n          total_disk_size['pd-standard'] += int(disk.size)\n        elif disk.type == 'pd-extreme':\n          total_disk_size['pd-extreme'] += int(disk.size)\n          provisions_iops['pd-extreme'] += int(disk.provisionediops or 0)\n        else:\n          report.add_skipped(\n              vm,\n              reason=('Disk-Type {} is not supported with this gcpdiag runbook,'\n                      ' disk name - {}').format(disk.type, disk.name))\n\n      # Getting dirty with logic based on different disk types, Machine types, CPU counts etc.\n      for disktypes in total_disk_size.items():\n        disktype = disktypes[0]\n        if total_disk_size[disktype] > 0 and cpu_count > 0:\n\n          if vm_family in ['a', 'f', 'g', 'm']:\n            if vm.machine_type().split('-')[0].upper() in [\n                'A2', 'A3', 'F1', 'G1', 'G2', 'M1', 'M2', 'M3'\n            ]:\n              next_hop = 'Machine type'\n              next_hop_val = vm.machine_type()\n              search_str = vm.machine_type().split('-')[0].upper()\n              if search_str == 'A2' and 'ultragpu' in next_hop_val:\n                search_str = search_str + ' Ultra VMs'\n              elif search_str == 'A2' and 'highgpu' in next_hop_val:\n                search_str = search_str + ' Ultra VMs'\n              else:\n                search_str = search_str + ' VMs'\n\n              data = limit_calculator(limits_data, mach_fam_json_data, disktype,\n                                      int(total_disk_size[disktype]),\n                                      search_str, next_hop, next_hop_val)\n\n              # upto first 100GB, pd-standard disks have fixed IO limits\n              if disktype == 'pd-standard' and int(\n                  total_disk_size[disktype]) < 100:\n                report.add_ok(\n                    vm,\n                    short_info=\n                    ('\\n\\tIOPS and Throughput limits available for VM DiskType - {},'\n                     '\\n\\tTotal DiskSize: {}:'\n                     '\\n\\n\\t Max Read-IOPS Count: {}, \\n\\t Max Read-Throughput: {} MB/s,'\n                     '\\n\\t Max Write-IOPS Count: {}, \\n\\t Max Write-Throughput: {} MB/s\\n'\n                    ).format(disktype, int(total_disk_size[disktype]), 75, 12,\n                             150, 12))\n\n              elif disktype == 'pd-extreme' and vm.machine_type() in [\n                  'g1-small', 'f1-micro'\n              ]:\n                report.add_skipped(\n                    vm,\n                    reason=('The script do not support '\n                            'pd-extreme disk type with machine type {} \\n'\n                           ).format(next_hop_val))\n              else:\n                report.add_ok(\n                    vm,\n                    short_info=\n                    ('\\n\\tIOPS and Throughput limits available for VM DiskType - {},'\n                     '\\n\\tTotal DiskSize: {}:'\n                     '\\n\\n\\t Max Read-IOPS Count: {}, \\n\\t Max Read-Throughput: {} MB/s,'\n                     '\\n\\t Max Write-IOPS Count: {}, \\n\\t Max Write-Throughput: {} MB/s\\n'\n                    ).format(disktype, int(total_disk_size[disktype]),\n                             min(data[0], data[1]), min(data[2], data[3]),\n                             min(data[4], data[5]), min(data[6], data[7])))\n\n            else:\n              report.add_skipped(\n                  vm,\n                  reason=\n                  ('The machine type {} is not supported with this gcpdiag Lint rule'\n                   'You may only run this runbook for any of the below machine family:'\n                   'A2, A3, C2, C2D, C3, C3D, E2, F1, G1, G2, H3, N1, N2, N2D, M1,'\n                   ' M2, M3, T2D, T2A, Z3').format(vm.machine_type()))\n\n          elif vm_family in ['c', 'h', 'z']:\n            if vm.machine_type().split('-')[0].upper() in [\n                'C2', 'C2D', 'C3', 'C3D', 'H3', 'Z3'\n            ]:\n              next_hop = 'VM vCPU count'\n              next_hop_val = str(cpu_count)\n              search_str = vm.machine_type().split('-')[0].upper() + ' VMs'\n\n              data = limit_calculator(limits_data, mach_fam_json_data, disktype,\n                                      int(total_disk_size[disktype]),\n                                      search_str, next_hop, next_hop_val)\n              # upto first 100GB, pd-standard disks have fixed IO limits\n              if disktype == 'pd-standard' and int(\n                  total_disk_size[disktype]) < 100:\n                report.add_ok(\n                    vm,\n                    short_info=\n                    ('\\n\\tIOPS and Throughput limits available for VM DiskType - {},'\n                     '\\n\\tTotal DiskSize: {}:'\n                     '\\n\\n\\t Max Read-IOPS Count: {}, \\n\\t Max Read-Throughput: {} MB/s,'\n                     '\\n\\t Max Write-IOPS Count: {}, \\n\\t Max Write-Throughput: {} MB/s\\n'\n                    ).format(disktype, int(total_disk_size[disktype]), 75, 12,\n                             150, 12))\n              elif disktype == 'pd-extreme':\n                # https://cloud.google.com/compute/docs/disks/extreme-persistent-disk#machine_shape_support\n                data = limit_calculator(limits_data, mach_fam_json_data,\n                                        'pd-ssd',\n                                        int(total_disk_size['pd-extreme']),\n                                        search_str, next_hop, next_hop_val)\n\n                report.add_ok(\n                    vm,\n                    short_info=\n                    ('IOPS and Throughput limits available for VM DiskType - {},'\n                     '\\n\\tTotal DiskSize: {}:'\n                     '\\n\\n\\t Max Read-IOPS Count: {},'\n                     '\\n\\t Max Read-Throughput: {} MB/s,'\n                     '\\n\\t Max Write-IOPS Count: {},'\n                     '\\n\\t Max Write-Throughput: {} MB/s\\n').format(\n                         disktype, int(total_disk_size[disktype]),\n                         min(data[1], provisions_iops['pd-extreme']),\n                         min(data[2], data[3]),\n                         min(data[5], provisions_iops['pd-extreme']),\n                         min(data[6], data[7])))\n              else:\n                report.add_ok(\n                    vm,\n                    short_info=\n                    ('\\n\\tIOPS and Throughput limits available for VM DiskType - {},'\n                     '\\n\\tTotal DiskSize: {}:'\n                     '\\n\\n\\t Max Read-IOPS Count: {}, \\n\\t Max Read-Throughput: {} MB/s,'\n                     '\\n\\t Max Write-IOPS Count: {}, \\n\\t Max Write-Throughput: {} MB/s\\n'\n                    ).format(disktype, int(total_disk_size[disktype]),\n                             min(data[0], data[1]), min(data[2], data[3]),\n                             min(data[4], data[5]), min(data[6], data[7])))\n\n            else:\n              report.add_skipped(\n                  vm,\n                  reason=\n                  ('The machine type {} is not supported with this gcpdiag Lint rule'\n                   'You may only run this runbook for any of the below machine family:'\n                   'A2, A3, C2, C2D, C3, C3D, E2, F1, G1, G2, H3, N1, N2, N2D, M1,'\n                   ' M2, M3, T2D, T2A, Z3').format(vm.machine_type()))\n\n          elif vm_family == 't':\n            # Logic to fetch details for T2 family type\n            if vm.machine_type().split('-')[0].upper() in ['T2D', 'T2A']:\n              next_hop = 'VM vCPU count'\n              if vm.machine_type().split('-')[0].upper() == 'T2D':\n                # T2D Family\n                if disktype == 'pd-standard':\n                  if cpu_count == 1:\n                    next_hop_val = '1'\n                  elif cpu_count in range(2, 8):\n                    next_hop_val = '2-7'\n                  elif cpu_count in range(8, 16):\n                    next_hop_val = '8-15'\n                  elif cpu_count > 15:\n                    next_hop_val = '16 or more'\n                else:\n                  if cpu_count == 1:\n                    next_hop_val = '1'\n                  elif cpu_count in range(2, 8):\n                    next_hop_val = '2-7'\n                  elif cpu_count in range(8, 16):\n                    next_hop_val = '8-15'\n                  elif cpu_count in range(16, 32):\n                    next_hop_val = '16-31'\n                  elif cpu_count > 31:\n                    next_hop_val = '32-60'\n              else:\n                # T2A Family\n                if disktype == 'pd-standard':\n                  if cpu_count == 1:\n                    next_hop_val = '1'\n                  elif cpu_count in range(2, 4):\n                    next_hop_val = '2-3'\n                  elif cpu_count in range(4, 8):\n                    next_hop_val = '4-7'\n                  elif cpu_count in range(8, 16):\n                    next_hop_val = '8-15'\n                  elif cpu_count > 15:\n                    next_hop_val = '16 or more'\n                else:\n                  if cpu_count == 1:\n                    next_hop_val = '1'\n                  elif cpu_count in range(2, 8):\n                    next_hop_val = '2-7'\n                  elif cpu_count in range(8, 16):\n                    next_hop_val = '8-15'\n                  elif cpu_count in range(16, 32):\n                    next_hop_val = '16-31'\n                  elif cpu_count in range(32, 48):\n                    next_hop_val = '32-47'\n                  elif cpu_count > 47:\n                    next_hop_val = '48'\n\n              search_str = vm.machine_type().split('-')[0].upper() + ' VMs'\n\n              if disktype == 'pd-extreme':\n                # https://cloud.google.com/compute/docs/disks/extreme-persistent-disk#machine_shape_support\n\n                data = limit_calculator(limits_data, mach_fam_json_data,\n                                        'pd-ssd',\n                                        int(total_disk_size['pd-extreme']),\n                                        search_str, next_hop, next_hop_val)\n\n                report.add_ok(\n                    vm,\n                    short_info=\n                    ('\\n\\tIOPS and Throughput limits available for VM DiskType - {},'\n                     '\\n\\tTotal DiskSize: {}:'\n                     '\\n\\n\\t Max Read-IOPS Count: {}, \\n\\t Max Read-Throughput: {} MB/s,'\n                     '\\n\\t Max Write-IOPS Count: {}, \\n\\t Max Write-Throughput: {} MB/s\\n'\n                    ).format(disktype, int(total_disk_size[disktype]),\n                             min(data[1], provisions_iops['pd-extreme']),\n                             min(data[2], data[3]),\n                             min(data[5], provisions_iops['pd-extreme']),\n                             min(data[6], data[7])))\n\n              else:\n                data = limit_calculator(limits_data,\n                                        mach_fam_json_data, disktype,\n                                        int(total_disk_size[disktype]),\n                                        search_str, next_hop, next_hop_val)\n                # upto first 100GB, pd-standard disks have fixed IO limits\n                if disktype == 'pd-standard' and int(\n                    total_disk_size[disktype]) < 100:\n                  report.add_ok(\n                      vm,\n                      short_info=\n                      ('\\n\\tIOPS and Throughput limits available for VM DiskType - {},'\n                       '\\n\\tTotal DiskSize: {}:'\n                       '\\n\\n\\t Max Read-IOPS Count: {},\\n\\t Max Read-Throughput: {} MB/s,'\n                       '\\n\\t Max Write-IOPS Count: {}, \\n\\t Max Write-Throughput: {} MB/s \\n'\n                      ).format(disktype, int(total_disk_size[disktype]), 75, 12,\n                               150, 12))\n                else:\n                  report.add_ok(\n                      vm,\n                      short_info=\n                      ('\\n\\tIOPS and Throughput limits available for VM DiskType - {},'\n                       '\\n\\tTotal DiskSize: {}:'\n                       '\\n\\n\\t Max Read-IOPS Count: {},\\n\\t Max Read-Throughput: {} MB/s,'\n                       '\\n\\t Max Write-IOPS Count: {}, \\n\\t Max Write-Throughput: {} MB/s\\n'\n                      ).format(disktype, int(total_disk_size[disktype]),\n                               min(data[0], data[1]), min(data[2], data[3]),\n                               min(data[4], data[5]), min(data[6], data[7])))\n            else:\n              report.add_skipped(\n                  vm,\n                  reason=\n                  ('The machine type {} is not supported with this gcpdiag Lint rule'\n                   'You may only run this runbook for any of the below machine family:'\n                   'A2, A3, C2, C2D, C3, C3D, E2, F1, G1, G2, H3, N1, N2, N2D, M1,'\n                   ' M2, M3, T2D, T2A, Z3').format(vm.machine_type()))\n\n          elif vm_family == 'e':\n            # Logic to fetch details for E2 family type\n            if vm.machine_type().split('-')[0].upper() in ['E2']:\n              next_hop = 'VM vCPU count'\n              if 'e2-medium' in vm.machine_type():\n                next_hop_val = 'e2-medium*'\n              else:\n                if cpu_count == 1:\n                  next_hop_val = '1'\n                elif cpu_count in range(2, 8):\n                  next_hop_val = '2-7'\n                elif cpu_count in range(8, 16):\n                  next_hop_val = '8-15'\n                elif cpu_count in range(16, 32):\n                  next_hop_val = '16-31'\n                elif cpu_count > 31:\n                  next_hop_val = '32 or more'\n              search_str = vm.machine_type().split('-')[0].upper() + ' VMs'\n\n              if disktype == 'pd-extreme':\n                # https://cloud.google.com/compute/docs/disks/extreme-persistent-disk#machine_shape_support\n\n                data = limit_calculator(limits_data, mach_fam_json_data,\n                                        'pd-ssd',\n                                        int(total_disk_size['pd-extreme']),\n                                        search_str, next_hop, next_hop_val)\n\n                report.add_ok(\n                    vm,\n                    short_info=\n                    ('\\n\\tIOPS and Throughput limits available for VM DiskType - {},'\n                     '\\n\\tTotal DiskSize: {}:'\n                     '\\n\\n\\t Max Read-IOPS Count: {}, \\n\\t Max Read-Throughput: {} MB/s,'\n                     '\\n\\t Max Write-IOPS Count: {}, \\n\\t Max Write-Throughput: {} MB/s\\n'\n                    ).format(disktype, int(total_disk_size[disktype]),\n                             min(data[0], provisions_iops['pd-extreme']),\n                             min(data[2], data[3]),\n                             min(data[4], provisions_iops['pd-extreme']),\n                             min(data[6], data[7])))\n\n              else:\n                data = limit_calculator(limits_data,\n                                        mach_fam_json_data, disktype,\n                                        int(total_disk_size[disktype]),\n                                        search_str, next_hop, next_hop_val)\n\n                if disktype == 'pd-standard' and int(\n                    total_disk_size[disktype]) < 100:\n                  report.add_ok(\n                      vm,\n                      short_info=\n                      ('\\n\\tIOPS and Throughput limits available for VM DiskType - {},'\n                       '\\n\\tTotal DiskSize: {}:'\n                       '\\n\\n\\t Max Read-IOPS Count: {}, \\n\\t Max Read-Throughput: {} MB/s,'\n                       '\\n\\t Max Write-IOPS Count: {}, \\n\\t Max Write-Throughput: {} MB/s\\n'\n                      ).format(disktype, int(total_disk_size[disktype]), 75, 12,\n                               150, 12))\n                else:\n                  report.add_ok(\n                      vm,\n                      short_info=\n                      ('\\n\\tIOPS and Throughput limits available for VM DiskType - {},'\n                       '\\n\\tTotal DiskSize: {}:'\n                       '\\n\\n\\t Max Read-IOPS Count: {},\\n\\t Max Read-Throughput: {} MB/s,'\n                       '\\n\\t Max Write-IOPS Count: {}, \\n\\t Max Write-Throughput: {} MB/s\\n'\n                      ).format(disktype, int(total_disk_size[disktype]),\n                               min(data[0], data[1]), min(data[2], data[3]),\n                               min(data[4], data[5]), min(data[6], data[7])))\n            else:\n              report.add_skipped(\n                  vm,\n                  reason=\n                  ('The machine type {} is not supported with this gcpdiag Lint rule'\n                   'You may only run this runbook for any of the below machine family:'\n                   'A2, A3, C2, C2D, C3, C3D, E2, F1, G1, G2, H3, N1, N2, N2D, M1,'\n                   ' M2, M3, T2D, T2A, Z3').format(vm.machine_type()))\n\n          elif vm_family == 'n':\n            if vm.machine_type().split('-')[0].upper() in ['N1', 'N2', 'N2D']:\n              next_hop = 'VM vCPU count'\n              search_str = vm.machine_type().split('-')[0].upper() + ' VMs'\n              if disktype in ['pd-balanced', 'pd-ssd']:\n                if cpu_count == 1:\n                  next_hop_val = '1'\n                elif cpu_count in range(2, 8):\n                  next_hop_val = '2-7'\n                elif cpu_count in range(8, 16):\n                  next_hop_val = '8-15'\n                elif cpu_count in range(16, 32):\n                  next_hop_val = '16-31'\n                elif cpu_count in range(32, 64):\n                  next_hop_val = '32-63'\n                elif cpu_count > 63:\n                  next_hop_val = '64 or more'\n\n                data = limit_calculator(limits_data,\n                                        mach_fam_json_data, disktype,\n                                        int(total_disk_size[disktype]),\n                                        search_str, next_hop, next_hop_val)\n                report.add_ok(\n                    vm,\n                    short_info=\n                    ('\\n\\tIOPS and Throughput limits available for VM DiskType - {},'\n                     '\\n\\tTotal DiskSize: {}:'\n                     '\\n\\n\\t Max Read-IOPS Count: {}, \\n\\t Max Read-Throughput: {} MB/s,'\n                     '\\n\\t Max Write-IOPS Count: {}, \\n\\t Max Write-Throughput: {} MB/s\\n'\n                    ).format(disktype, int(total_disk_size[disktype]),\n                             min(data[0], data[1]), min(data[2], data[3]),\n                             min(data[4], data[5]), min(data[6], data[7])))\n\n              elif disktype == 'pd-standard':\n                if cpu_count == 1:\n                  next_hop_val = '1'\n                elif cpu_count in range(2, 8):\n                  next_hop_val = '2-7'\n                elif cpu_count in range(8, 16):\n                  next_hop_val = '8-15'\n                elif cpu_count > 15:\n                  next_hop_val = '16 or more'\n\n                data = limit_calculator(limits_data,\n                                        mach_fam_json_data, disktype,\n                                        int(total_disk_size[disktype]),\n                                        search_str, next_hop, next_hop_val)\n\n                if int(total_disk_size[disktype]) < 100:\n                  report.add_ok(\n                      vm,\n                      short_info=\n                      ('\\n\\tIOPS and Throughput limits available for VM DiskType - {},'\n                       '\\n\\tTotal DiskSize: {}:'\n                       '\\n\\n\\t Max Read-IOPS Count: {}, \\n\\t Max Read-Throughput: {} MB/s,'\n                       '\\n\\t Max Write-IOPS Count: {}, \\n\\t Max Write-Throughput: {} MB/s \\n'\n                      ).format(disktype, int(total_disk_size[disktype]), 75, 12,\n                               150, 12))\n                else:\n                  report.add_ok(\n                      vm,\n                      short_info=\n                      ('\\n\\tIOPS and Throughput limits available for VM DiskType - {},'\n                       '\\n\\tTotal DiskSize: {}:'\n                       '\\n\\n\\t Max Read-IOPS Count: {}, \\n\\t Max Read-Throughput: {} MB/s,'\n                       '\\n\\t Max Write-IOPS Count: {}, \\n\\t Max Write-Throughput: {} MB/s\\n'\n                      ).format(disktype, int(total_disk_size[disktype]),\n                               min(data[0], data[1]), min(data[2], data[3]),\n                               min(data[4], data[5]), min(data[6], data[7])))\n\n              elif disktype == 'pd-extreme':\n                if search_str == 'N2 VMs' and cpu_count > 63:\n                  next_hop = 'Machine type'\n                  next_hop_val = vm.machine_type()\n                  data = limit_calculator(limits_data, mach_fam_json_data,\n                                          disktype,\n                                          int(total_disk_size[disktype]),\n                                          search_str, next_hop, next_hop_val)\n\n                  report.add_ok(\n                      vm,\n                      short_info=\n                      ('\\n\\tIOPS and Throughput limits available for VM DiskType - {},'\n                       '\\n\\tTotal DiskSize: {}:'\n                       '\\n\\n\\t Max Read-IOPS Count: {}, \\n\\t Max Read-Throughput: {} MB/s'\n                       '\\n\\t Max Write-IOPS Count: {}, \\n\\t Max Write-Throughput: {} MB/s\\n'\n                      ).format(disktype, int(total_disk_size[disktype]),\n                               min(data[1], provisions_iops['pd-extreme']),\n                               max(data[2], data[3]),\n                               min(data[5], provisions_iops['pd-extreme']),\n                               max(data[6], data[7])))\n\n                else:\n                  next_hop = 'VM vCPU count'\n                  data = limit_calculator(limits_data, mach_fam_json_data,\n                                          'pd-ssd',\n                                          int(total_disk_size['pd-extreme']),\n                                          search_str, next_hop, next_hop_val)\n                  # https://cloud.google.com/compute/docs/disks/extreme-persistent-disk#machine_shape_support\n                  report.add_ok(\n                      vm,\n                      short_info=\n                      ('\\n\\tIOPS and Throughput limits available for VM DiskType - {},'\n                       '\\n\\tTotal DiskSize: {}:'\n                       '\\n\\n\\t Max Read-IOPS Count: {}, \\n\\t Max Read-Throughput: {} MB/s'\n                       '\\n\\t Max Write-IOPS Count: {}, \\n\\t Max Write-Throughput: {} MB/s\\n'\n                      ).format(disktype, int(total_disk_size[disktype]),\n                               min(data[1], provisions_iops['pd-extreme']),\n                               max(data[2], data[3]),\n                               min(data[5], provisions_iops['pd-extreme']),\n                               max(data[6], data[7])))\n\n            else:\n              report.add_skipped(\n                  vm,\n                  reason=\n                  ('The machine type {} is not supported with this gcpdiag Lint rule'\n                   'You may only run this runbook for any of the below machine family:'\n                   'A2, A3, C2, C2D, C3, C3D, E2, F1, G1, G2, H3, N1, N2, N2D, M1,'\n                   ' M2, M3, T2D, T2A, Z3').format(vm.machine_type()))\n          else:\n            report.add_skipped(\n                vm,\n                reason=\n                ('The machine type {} is not supported with this gcpdiag Lint rule'\n                 'You may only run this runbook for any of the below machine family:'\n                 'A2, A3, C2, C2D, C3, C3D, E2, F1, G1, G2, H3, N1, N2, N2D, M1,'\n                 ' M2, M3, T2D, T2A, Z3').format(vm.machine_type()))\n\n\ndef limit_calculator(limits_data, mach_fam_json_data, disktype: str,\n                     total_disk_size: int, search_str: str, next_hop: str,\n                     next_hop_val: str):\n\n  # Data fetch for limits per GB and Baseline\n  r_iops_limit_per_gb = float(\n      limits_data['iops'][disktype]['Read IOPS per GiB'])\n  w_iops_limit_per_gb = float(\n      limits_data['iops'][disktype]['Write IOPS per GiB'])\n  r_throughput_limit_per_gb = float(\n      limits_data['throughput'][disktype]['Throughput per GiB (MiBps)'])\n  w_throughput_limit_per_gb = float(\n      limits_data['throughput'][disktype]['Throughput per GiB (MiBps)'])\n  baseline_iops = float(\n      limits_data['baseline'][disktype]['Baseline IOPS per VM'])\n  baseline_throughput = float(\n      limits_data['baseline'][disktype]['Baseline Throughput (MiBps) per VM'])\n\n  # Calculating VM Baseline performance\n  vm_baseline_performance_r_iops = baseline_iops + (r_iops_limit_per_gb *\n                                                    total_disk_size)\n  vm_baseline_performance_w_iops = baseline_iops + (w_iops_limit_per_gb *\n                                                    total_disk_size)\n  vm_baseline_performance_r_throughput = baseline_throughput + (\n      r_throughput_limit_per_gb * total_disk_size)\n  vm_baseline_performance_w_throughput = baseline_throughput + (\n      w_throughput_limit_per_gb * total_disk_size)\n\n  max_read_throuput = 10000000\n  max_write_throuput = 10000000\n  max_read_iops = 10000000\n  max_write_iops = 10000000\n  for mach_fam_catagory in mach_fam_json_data:\n    if search_str and search_str in mach_fam_catagory:\n      for item in mach_fam_json_data[mach_fam_catagory][disktype]:\n        if item[next_hop] == next_hop_val:\n          max_write_iops = item['Maximum write IOPS']\n          max_read_iops = item['Maximum read IOPS']\n          max_read_throuput = item['Maximum read throughput (MiBps)']\n          max_write_throuput = item['Maximum write throughput (MiBps)']\n\n  return (vm_baseline_performance_r_iops, max_read_iops,\n          vm_baseline_performance_r_throughput, max_read_throuput,\n          vm_baseline_performance_w_iops, max_write_iops,\n          vm_baseline_performance_w_throughput, max_write_throuput)\n"
  },
  {
    "path": "gcpdiag/lint/gce/err_2021_001_mig_scaleup_failed.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Managed instance groups do not report scaleup failures.\n\nThe managed instance group autoscaler will report via Cloud Logging any scale\nup failures, and the logs can help you determine why a scale up didn't succeed.\n\"\"\"\n\nimport operator\nimport re\nfrom typing import List\n\nfrom gcpdiag import lint, models, utils\nfrom gcpdiag.queries import apis, gce, logs\n\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  migs = [\n      m for m in gce.get_managed_instance_groups(context).values()\n      if not m.is_gke()\n  ]\n  for project_id in {m.project_id for m in migs}:\n    logs_by_project[project_id] = logs.query(\n        project_id=project_id,\n        resource_type='gce_instance',\n        log_name='log_id(\"cloudaudit.googleapis.com/activity\")',\n        filter_str='severity=ERROR AND '\n        'protoPayload.methodName=\"v1.compute.instances.insert\"')\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(None, 'logging api is disabled')\n    return\n\n  # Note: we exclude GKE MIGs because we have a separate lint rule for this\n  # (gke/ERR/2021_006)\n  migs: List[gce.ManagedInstanceGroup] = [\n      mi for mi in gce.get_managed_instance_groups(context).values()\n      if not mi.is_gke()\n  ]\n  if not migs:\n    report.add_skipped(None, 'no non-GKE managed instance groups found')\n\n  # Process gce_instance logs and search for insert errors\n  errors_by_mig = {}\n  for query in logs_by_project.values():\n    for log_entry in query.entries:\n      try:\n        # Filter out non-relevant log entries.\n        if log_entry['severity']!='ERROR' or \\\n          log_entry['protoPayload']['methodName']!='v1.compute.instances.insert' or \\\n          log_entry['protoPayload']['requestMetadata']['callerSuppliedUserAgent']!= \\\n          'GCE Managed Instance Group':\n          continue\n\n        # Determine to what mig this instance belongs.\n        m = re.search(r'/instances/([^/]+)$',\n                      log_entry['protoPayload']['resourceName'])\n        if not m:\n          continue\n        instance_name = m.group(1)\n        region = utils.zone_region(log_entry['resource']['labels']['zone'])\n        # pylint: disable=cell-var-from-loop\n        mig_list = list(\n            filter(\n                lambda x: x.is_instance_member(\n                    log_entry['resource']['labels']['project_id'], region,\n                    instance_name), migs))\n        if not mig_list:\n          continue\n        if log_entry['protoPayload']['status']['message'] == 'LIMIT_EXCEEDED':\n          errors_by_mig[mig_list[0]] = 'LIMIT_EXCEEDED, possibly IP exhaustion'\n        else:\n          errors_by_mig[\n              mig_list[0]] = log_entry['protoPayload']['status']['message']\n      except KeyError:\n        continue\n\n  # Create the report.\n  for mi in sorted(migs, key=operator.attrgetter('project_id', 'name')):\n    if mi in errors_by_mig:\n      report.add_failed(mi, errors_by_mig[mi])\n    else:\n      report.add_ok(mi)\n"
  },
  {
    "path": "gcpdiag/lint/gce/err_2021_002_osconfig_perm.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"OS Config service account has the required permissions.\n\nThe OS Config service account (@gcp-sa-osconfig.iam.gserviceaccount.com) must\nhave the osconfig.serviceAgent role.\n\"\"\"\nimport operator\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import crm, gce, iam\n\nROLE = 'roles/osconfig.serviceAgent'\n\n\n#check metadata on project first if not per instance and skip get_metadata\ndef prefetch_rule(context: models.Context):\n  # Make sure that we have the IAM policy in cache.\n  project_ids = {i.project_id for i in gce.get_instances(context).values()}\n  for pid in project_ids:\n    iam.get_project_policy(context.copy_with(project_id=pid))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  instances = gce.get_instances(context)\n  instances_count = 0\n  for i in sorted(instances.values(),\n                  key=operator.attrgetter('project_id', 'name')):\n    # GKE nodes never have OS Config enabled\n    if i.is_gke_node():\n      continue\n    if i.get_metadata('enable-osconfig'):\n      osconfig_service_account = 'service-{}@gcp-sa-osconfig.iam.gserviceaccount.com'.format(\n          crm.get_project(i.project_id).number)\n      instances_count += 1\n      iam_policy = iam.get_project_policy(\n          context.copy_with(project_id=i.project_id))\n      sa = i.service_account\n      if not sa:\n        # if an SA is not attached to the vm check if the service agent has the correct role\n        if not iam_policy.has_role_permissions(\n            f'serviceAccount:{osconfig_service_account}', ROLE):\n          report.add_failed(\n              i,\n              f'service account: {osconfig_service_account}\\nmissing role: {ROLE}'\n          )\n        else:\n          report.add_ok(i)\n      else:\n        report.add_ok(i)\n  if not instances_count:\n    report.add_skipped(None, 'no instances found with OS Config enabled')\n"
  },
  {
    "path": "gcpdiag/lint/gce/err_2021_003_api_service_agent.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Note that we don't have a general rule that checks this for all products,\n# because the grant is done lazily, as soon as it is needed. So check that the\n# grant is there only when resources of a certain product (like GKE clusters)\n# are present, and we know that the grant is necessary for the correct\n# operation of that product. Copy the rule for other products, as necessary.\n\"\"\"Google APIs service agent has the Editor role.\n\nThe Google API service agent project-number@cloudservices.gserviceaccount.com\nruns internal Google processes on your behalf. It is automatically granted the\nEditor role on the project.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import crm, gce, iam\n\nROLE = 'roles/editor'\n\n\ndef prefetch_rule(context: models.Context):\n  # Make sure that we have the IAM policy in cache.\n  project_ids = {i.project_id for i in gce.get_instances(context).values()}\n  for pid in project_ids:\n    iam.get_project_policy(context.copy_with(project_id=pid))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  instances = gce.get_instances(context)\n  if not instances:\n    report.add_skipped(None, 'no instances found')\n    return\n\n  for project_id in sorted({i.project_id for i in instances.values()}):\n    project = crm.get_project(project_id)\n    sa_email = f'{project.number}@cloudservices.gserviceaccount.com'\n    iam_policy = iam.get_project_policy(\n        context.copy_with(project_id=project_id))\n    if not iam_policy.has_role_permissions(f'serviceAccount:{sa_email}', ROLE):\n      report.add_failed(project,\n                        f'service account: {sa_email}\\nmissing role: {ROLE}')\n    else:\n      report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/gce/err_2021_004_secure_boot_failed.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Serial logs don't contain Secure Boot error messages\n\nThe messages: \"Security Violation\" / \"Binary is blacklisted\" /\n\"UEFI: Failed to start image\" / \"UEFI: Failed to load image\"\nin serial output usually indicate that the Secure Boot doesn't pass its\npre-checks.\n\"\"\"\n\nfrom typing import Optional\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.lint.gce import utils\nfrom gcpdiag.queries import gce\nfrom gcpdiag.queries.logs import LogEntryShort\n\nSECURE_BOOT_ERR_MESSAGES = [\n    'UEFI: Failed to load image.',\n    'UEFI: Failed to start image.',\n    'Status: Security Violation',\n    'Binary is blacklisted ',\n    'Verification failed: (0x1A) Security Violation',\n]\n\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = utils.SerialOutputSearch(\n      context, search_strings=SECURE_BOOT_ERR_MESSAGES)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # skip entire rule if serial outputs are unavailable\n  if not utils.is_serial_port_one_logs_available(context):\n    report.add_skipped(None, 'serial port output is unavailable')\n    return\n\n  search = logs_by_project[context.project_id]\n\n  instances = gce.get_instances(context).values()\n  if len(instances) == 0:\n    report.add_skipped(None, 'No instances found')\n  for instance in sorted(instances, key=lambda i: i.name):\n    # this lint rule isn't relevant to GKE nodes\n    if instance.is_gke_node():\n      continue\n\n    match: Optional[LogEntryShort] = search.get_last_match(\n        instance_id=instance.id)\n    if match:\n      report.add_failed(\n          instance,\n          ('There are messages indicating that the Secure Boot violations'\n           ' prevent booting {}\\n{}: \"{}\"').format(instance.name,\n                                                   match.timestamp_iso,\n                                                   match.text))\n    else:\n      report.add_ok(instance)\n"
  },
  {
    "path": "gcpdiag/lint/gce/err_2021_005_mount_errors.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Serial logs don't contain mount error messages\n\nThe messages:\n\"You are in emergency mode\" / \"Failed to mount\" / \"Unrecognized mount option\"\nin serial output usually indicate that a Linux instance cannot mount the root\npartition.\n\"\"\"\nfrom typing import Optional\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.lint.gce import utils\nfrom gcpdiag.queries import gce\nfrom gcpdiag.queries.logs import LogEntryShort\n\nMOUNT_ERROR_MESSAGES = [\n    'You are in emergency mode',  #\n    'Failed to mount',\n    'Unrecognized mount option',\n]\n\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = utils.SerialOutputSearch(\n      context, search_strings=MOUNT_ERROR_MESSAGES)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # skip entire rule if serial outputs are unavailable\n  if not utils.is_serial_port_one_logs_available(context):\n    report.add_skipped(None, 'serial port output is unavailable')\n    return\n\n  search = logs_by_project[context.project_id]\n\n  instances = gce.get_instances(context).values()\n  if len(instances) == 0:\n    report.add_skipped(None, 'No instances found')\n  else:\n    for instance in sorted(instances, key=lambda i: i.name):\n      match: Optional[LogEntryShort] = search.get_last_match(\n          instance_id=instance.id)\n      if match:\n        report.add_failed(\n            instance,\n            ('There are messages indicating that '\n             'the instance is unable to mount disk {}\\n{}: \"{}\"').format(\n                 instance.name, match.timestamp_iso, match.text))\n      else:\n        report.add_ok(instance)\n"
  },
  {
    "path": "gcpdiag/lint/gce/err_2022_001_quota_exceeded.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Project limits were not exceeded.\n\nCloud Monitoring will record the event when any service in your project is\nreporting a quota exceeded error.\n\nRule will start failing if there is any quota exceeded event during the given\ntimeframe.\n\"\"\"\n\nfrom typing import Dict\n\nfrom gcpdiag import config, lint, models\nfrom gcpdiag.queries import crm, monitoring, quotas\n\n_query_results_per_project_id: Dict[str, monitoring.TimeSeriesCollection] = {}\n\n\ndef prefetch_rule(context: models.Context):\n\n  params = {'within_days': config.get('within_days')}\n  _query_results_per_project_id[context.project_id] = \\\n      monitoring.query(\n          context.project_id,\n          quotas.QUOTA_EXCEEDED_QUERY_TEMPLATE.format_map(params))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n\n  if len(_query_results_per_project_id[context.project_id]) == 0:\n    #no quota exceeded event during the period of time\n    report.add_ok(project)\n    return\n  else:\n    exceeded_quotas = []\n    for i in _query_results_per_project_id[context.project_id].values():\n      try:\n        exceeded_quotas.append(i['labels']['metric.limit_name'])\n      except KeyError:\n        report.add_skipped(project, 'no data')\n        #invalid query result\n        return\n    exceeded_quota_names = ', '.join(exceeded_quotas)\n    report.add_failed(\n        project,\n        f'Project has recently exceeded the following quotas: {exceeded_quota_names}.'\n    )\n"
  },
  {
    "path": "gcpdiag/lint/gce/err_2022_002_premium_guestos_activation_failed.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Serial logs don't contain Guest OS activation errors\n\nPremium Guest OSes need to activate their license when created and\nrefreshed regularly after activation. In an event that guest OS cannot\ncommunicate with the license servers, the messages:\n\"Could not contact activation server.\" /\n\"Server needs to be activated by a KMS Server\" /\n\"Exiting without registration\" in the serial output would\nindicate license activation failures.\n\"\"\"\n\nfrom typing import Optional\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.lint.gce import utils\nfrom gcpdiag.queries import gce\nfrom gcpdiag.queries.logs import LogEntryShort\n\nGUEST_OS_ACTIVATION_ERR_MESSAGES = [\n    'needs to be activated by a KMS Server',  # Windows\n    'Could not contact activation server. Will retry activation later',\n    'Exiting without registration'  # SLES\n]\n\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = utils.SerialOutputSearch(\n      context, search_strings=GUEST_OS_ACTIVATION_ERR_MESSAGES)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # skip entire rule if serial outputs are unavailable\n  if not utils.is_serial_port_one_logs_available(context):\n    report.add_skipped(None, 'serial port output is unavailable')\n    return\n\n  search = logs_by_project[context.project_id]\n\n  instances = gce.get_instances(context).values()\n  if not instances:\n    report.add_skipped(None, 'no instances found')\n  for instance in sorted(instances, key=lambda i: i.name):\n    # this lint rule isn't relevant to GKE nodes\n    if instance.is_gke_node():\n      continue\n\n    match: Optional[LogEntryShort] = search.get_last_match(\n        instance_id=instance.id)\n    if match:\n      report.add_failed(\n          instance,\n          f'There are messages indicating that {instance.name} can\\'t be activated: '\n          f'{match.text}')\n    else:\n      report.add_ok(instance)\n"
  },
  {
    "path": "gcpdiag/lint/gce/err_2024_001_snapshot_rate_limit.py",
    "content": "# Copyright 2024 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Snapshot creation not failed due to rate limit.\n\nWhen you try to snapshot your disk more than once during a ten minute period, or\nissue more than six burst snapshot requests in 60 minutes, you will encounter\nrate exceeded error. Follow best practices for disk snapshots.\n\"\"\"\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nERROR_MSG = 'RESOURCE_OPERATION_RATE_EXCEEDED'\nMETHOD_NAME_MATCH = 'v1.compute.snapshots.insert'\nLOG_FILTER = f\"\"\"\nseverity=ERROR\nprotoPayload.status.message=\"{ERROR_MSG}\"\nprotoPayload.methodName=\"{METHOD_NAME_MATCH}\"\n\"\"\"\n\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='gce_snapshot',\n      log_name='log_id(\"cloudaudit.googleapis.com/activity\")',\n      filter_str=LOG_FILTER,\n  )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n  # skip entire rule if gce api is disabled\n  if not apis.is_enabled(context.project_id, 'compute'):\n    report.add_skipped(project, 'compute api is disabled')\n    return\n\n  # skip entire rule if logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'logging api is disabled')\n    return\n\n  project_ok_flag = True\n\n  if (logs_by_project.get(context.project_id) and\n      logs_by_project[context.project_id].entries):\n    #Start the Iteration of Log entries\n    for entry in logs_by_project[context.project_id].entries:\n      msg = get_path(entry, ('protoPayload', 'status', 'message'), default='')\n      method = get_path(entry, ('protoPayload', 'methodName'), default='')\n      # find the relevant entries\n      if (entry['severity'] == 'ERROR' and METHOD_NAME_MATCH in method and\n          ERROR_MSG in msg):\n        report.add_failed(project, 'Snapshot Creation limit exceeded')\n        project_ok_flag = False\n\n  if project_ok_flag:\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/gce/err_2024_002_performance.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\" GCE VM is operating within optimal performance thresholds\n\nChecks the performance of the GCE instances in a project -\nCPU Usage, Memory Usage, Disk Usage and Serial port logs errors.\nThreshold for CPU Usage, Memory Usage, Disk Usage is 95%.\n\"\"\"\n\nimport operator as op\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.lint.gce import utils\nfrom gcpdiag.queries import gce, monitoring\n\nvm = None\nproject = None\nwithin_hours = 9\nwithin_str = 'within %dh, d\\'%s\\'' % (within_hours,\n                                      monitoring.period_aligned_now(5))\n\nUTILIZATION_THRESHOLD = 0.95\nIO_LATENCY_THRESHOLD = 1500\n\nmem_search = None\ndisk_search = None\ninstances = []\n\n\ndef prepare_rule(context: models.Context):\n\n  vm_oom_pattern = [\n      'Out of memory: Kill process', 'Kill process',\n      'Memory cgroup out of memory'\n  ]\n\n  filter_oom_str = '''textPayload:(\"oom\" OR \"Out of memory\")\n  AND (\"Out of memory: Kill\" OR \"invoked oom-killer\" OR \"Memory cgroup out of memory\")'''\n\n  vm_disk_space_error_pattern = [\n      'No space left on device', 'No usable temporary directory found in',\n      'A stop job is running for Security ...', 'disk is at or near capacity'\n  ]\n\n  filter_disk_str = '''textPayload:(\"No space left\" OR \"No usable temporary directory\")\n  AND (\"No space left on device\" OR \"No usable temporary directory found in\"\n  OR \"disk is at or near capacity\"\n  OR \"A stop job is running for Security ...ing Service \"\n  OR \"A stop job is running for Security ...ng Service \"\n  OR \"A stop job is running for Security ...diting Service \"\n  OR \"A stop job is running for Security ...Auditing Service \")'''\n\n  global mem_search\n  mem_search = utils.SerialOutputSearch(context,\n                                        search_strings=vm_oom_pattern,\n                                        custom_filter=filter_oom_str)\n\n  global disk_search\n  disk_search = utils.SerialOutputSearch(\n      context,\n      search_strings=vm_disk_space_error_pattern,\n      custom_filter=filter_disk_str)\n\n  # Fetching the list of instances in the project\n  global instances\n  instances = [\n      vm for vm in gce.get_instances(context).values() if not vm.is_gke_node()\n  ]\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  \"\"\"Checking VM performance\"\"\"\n\n  if not instances:\n    report.add_skipped(None, 'no instances found')\n    return\n\n  for i in sorted(instances, key=op.attrgetter('project_id', 'full_path')):\n    if not i.is_running:\n      report.add_skipped(i, reason=f'VM {i.name} is in {i.status} state')\n    else:\n      disk_usage = None\n      mem_usage = None\n      cpu_usage = None\n      ops_agent_installed = None\n      ops_agent_installed = monitoring.query(\n          context.project_id, \"\"\"\n                fetch gce_instance\n                | metric 'agent.googleapis.com/agent/uptime'\n                | filter (resource.instance_id == '{}')\n                | align rate(5m)\n                | every 5m\n                | {}\n              \"\"\".format(i.name, within_str))\n\n      if ops_agent_installed:\n        cpu_usage = monitoring.query(\n            context.project_id, \"\"\"\n          fetch gce_instance\n            | metric 'agent.googleapis.com/cpu/utilization'\n            | filter (resource.instance_id == '{}') && (metric.cpu_state != 'idle')\n            | group_by [resource.instance_id], 30m, [value_utilization_mean: mean(value.utilization)]\n            | filter (cast_units(value_utilization_mean,\"\")/100) >= {}\n            | {}\n          \"\"\".format(i.id, UTILIZATION_THRESHOLD, within_str))\n\n        mem_usage = monitoring.query(\n            context.project_id, \"\"\"\n          fetch gce_instance\n            | metric 'agent.googleapis.com/memory/percent_used'\n            | filter (resource.instance_id == '{}')\n            | group_by [resource.instance_id], 30m, [percent_used: mean(value.percent_used)]\n            | filter (cast_units(percent_used,\"\")/100) >= {}\n            | {}\n          \"\"\".format(i.id, UTILIZATION_THRESHOLD, within_str))\n\n        disk_usage = monitoring.query(\n            context.project_id, \"\"\"\n          fetch gce_instance\n            | metric 'agent.googleapis.com/disk/percent_used'\n            | filter (resource.instance_id == '{}')\n            | filter (metric.device !~ '/dev/loop.*' && metric.state == 'used')\n            | group_by [resource.instance_id], 30m, [percent_used: max(value.percent_used)]\n            | group_by [], [value_percent_used_max: max(percent_used)]\n            | filter (cast_units(value_percent_used_max,\"\")/100) >= {}\n            | {}\n          \"\"\".format(i.id, UTILIZATION_THRESHOLD, within_str))\n\n      else:\n        cpu_usage = monitoring.query(\n            context.project_id, \"\"\"\n          fetch gce_instance\n            | metric 'compute.googleapis.com/instance/cpu/utilization'\n            | filter (resource.instance_id == '{}')\n            | group_by 30m, [value_utilization_max: mean(value.utilization)]\n            | filter value_utilization_max >= {}\n            | {}\n          \"\"\".format(i.id, UTILIZATION_THRESHOLD, within_str))\n\n        if 'e2' in i.machine_type():\n          mem_usage = monitoring.query(\n              context.project_id, \"\"\"\n              fetch gce_instance\n                | {{ metric 'compute.googleapis.com/instance/memory/balloon/ram_used'\n                ; metric 'compute.googleapis.com/instance/memory/balloon/ram_size' }}\n                | outer_join 0\n                | div\n                | filter (resource.instance_id == '{}')\n                | group_by [resource.instance_id], 3m, [ram_left: mean(val())]\n                | filter ram_left >= {}\n                | {}\n              \"\"\".format(i.id, UTILIZATION_THRESHOLD, within_str))\n\n      # fallback on serial logs to see if there are any OOM logs, defined as vm_oom_pattern\n      mem_errors = None\n      if mem_search:\n        mem_errors = mem_search.get_last_match(i.id)\n\n      # fallback on serial logs to see if there are any Disk related errors/events,\n      # defined as vm_disk_space_error_pattern\n      disk_errors = None\n      if disk_search:\n        disk_errors = disk_search.get_last_match(i.id)\n\n      # Checking Disk IO latency for the instance -\n      disk_list = gce.get_all_disks_of_instance(context, i.zone, i.name)\n      disk: gce.Disk\n      for disks in disk_list.items():\n        disk = disks[1]\n        if disk.type in ['pd-balanced', 'pd-ssd', 'pd-standard', 'pd-extreme']:\n          disk_io_latency = monitoring.query(\n              context.project_id, \"\"\"\n              fetch gce_instance\n              | metric 'compute.googleapis.com/instance/disk/average_io_latency'\n              | filter (resource.instance_id == '{}')\n                &&\n                  (metric.device_name == '{}'\n                  && metric.storage_type == '{}')\n              | group_by 1m, [value_average_io_latency_mean: mean(value.average_io_latency)]\n              | every 1m\n              | group_by [metric.storage_type],\n                [value_average_io_latency_mean_percentile:\n                percentile(value_average_io_latency_mean, 99)]\n              | filter(cast_units(value_average_io_latency_mean_percentile,\"\")/1000) >= {}\n              | {}\n            \"\"\".format(i.id, disk.name, disk.type, IO_LATENCY_THRESHOLD,\n                       within_str))\n\n          if disk_io_latency:\n            report.add_failed(\n                i,\n                reason=\n                ('Disk IO Latency for disk {} is exceeding optimal levels, potentially '\n                 'impacting performance of the instance.').format(disk.name))\n          else:\n            report.add_ok(i,\n                          ('Disk {} IO Latency is under optimal levels').format(\n                              disk.name))\n        else:\n          report.add_skipped(\n              i,\n              reason=('Disk-Type {} is not supported with this gcpdiag runbook,'\n                      ' disk name - {}').format(disk.type, disk.name))\n\n      if cpu_usage:\n        report.add_failed(\n            i, ('CPU utilization is exceeding optimal levels, potentially '\n                'impacting performance of the instance.'))\n      else:\n        report.add_ok(i, 'CPU utilization is under optimal levels')\n\n      if mem_usage:\n        report.add_failed(\n            i,\n            ('Memory utilization is exceeding optimal levels(95%), potentially '\n             'impacting performance of the instance.'))\n      elif mem_errors:\n        # fallback on serial logs to see if there are any OOM logs, defined as vm_oom_pattern\n        report.add_failed(\n            i, ('Found OOM related events in Serial console logs, potentially '\n                'impacting performance of the instance.'))\n      else:\n        report.add_ok(i, 'Memory utilization is under optimal levels')\n\n      if disk_usage:\n        report.add_failed(\n            i,\n            ('Disk utilization is exceeding optimal levels(95%), potentially '\n             'impacting performance of the instance.'))\n      elif disk_errors:\n        report.add_failed(\n            i, ('Found Disk related errors/events in Serial console logs, '\n                'could be causing issue with instance'))\n      else:\n        report.add_ok(i, 'Disk utilization is under optimal levels')\n"
  },
  {
    "path": "gcpdiag/lint/gce/err_2024_003_vm_secure_boot_failures.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\" GCE Shielded VM secure boot validations\n\nIdentifies if Shielded VMs are facing boot issues due to Secure boot\nconfigurations or if there are Secure boot related fail events in\ncloud logging.\n\"\"\"\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.lint.gce import utils\nfrom gcpdiag.queries import gce\n\nshutdown_logs: utils.QueryCloudLogs\nboot_fail_event: utils.SerialOutputSearch\n\n\ndef prepare_rule(context: models.Context):\n  # Fetching the list of instances in the project\n  resource_type = 'gce_instance'\n  filter_log = ['severity=ERROR']\n  logid = ['compute.googleapis.com%2Fshielded_vm_integrity']\n  global shutdown_logs\n  shutdown_logs = utils.QueryCloudLogs(context.project_id, resource_type,\n                                       filter_log, logid)\n\n  boot_fail_str = [\n      'Failed to start image', 'Failed to load image',\n      'Verification failed: (0x1A) Security Violation', 'Binary is blacklisted'\n  ]\n\n  global boot_fail_event\n  boot_fail_event = utils.SerialOutputSearch(context,\n                                             search_strings=boot_fail_str)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # Analyzing logs for all the instances\n  instances = gce.get_instances(context).values()\n  if not instances:\n    report.add_skipped(None, 'no instances found')\n    return\n\n  for i in sorted(instances):\n    if i.secure_boot_enabled():\n      temp = None\n      if shutdown_logs:\n        temp = shutdown_logs.get_entries(i.id).values()\n      if temp:\n        for log_entry in temp:\n          earlybootreportevent: str = ''\n          latebootreportevent: str = ''\n          earlybootreportevent = get_path(\n              log_entry,\n              ('jsonPayload', 'earlyBootReportEvent', 'policyEvaluationPassed'),\n              default='')\n          latebootreportevent = get_path(\n              log_entry,\n              ('jsonPayload', 'lateBootReportEvent', 'policyEvaluationPassed'),\n              default='')\n\n          if earlybootreportevent is False or latebootreportevent is False:\n            if (i.startrestricted is True) or (boot_fail_event.get_last_match(\n                i.id)):\n              report.add_failed(\n                  i,\n                  'Instance has been restricted to boot due to Shielded VM policy violations'\n              )\n            else:\n              report.add_failed(\n                  i, 'Instance is Shielded VM, has Secure boot failures events')\n      else:\n        report.add_ok(i)\n    else:\n      report.add_skipped(i, reason='Secure Boot is disabled for the instance')\n"
  },
  {
    "path": "gcpdiag/lint/gce/err_2024_004_ops_agent.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Verify Ops Agent is installed on GCE VMs and is sending logs and metrics.\n\nWhy isn't the Ops Agent transmitting logs and metrics?\n\nPlease run the Agent health check\n(https://cloud.google.com/stackdriver/docs/solutions/agents/\\\n    ops-agent/troubleshoot-find-info#start-checks)\nto find out,\nand look up the error code table\n(https://cloud.google.com/stackdriver/docs/solutions/agents/\\\n    ops-agent/troubleshoot-find-info#health-checks)\nto locate the corresponding fix.\n\nTo install the latest version of Ops Agent, please follow:\nhttps://cloud.google.com/stackdriver/docs/solutions/agents/ops-agent/\\\n    installation#install-latest-version.\n\nTo troubleshoot Ops Agent installation failure, please follow:\nhttps://cloud.google.com/stackdriver/docs/solutions/agents/ops-agent/\\\n    troubleshoot-install-startup#install-failed.\n\n\nTop Reasons Why Ops Agent Fails to Send Logs and Metrics:\n1. VM Access Scopes: The VM needs \"logging.write\" and \"monitoring.write\" scopes.\n2. Service Account IAM Roles: The Service Account associated with the VM\nrequires \"roles/monitoring.metricWriter\" and \"roles/logging.logWriter\".\n3. GCP API Enablement: Ops Agent requires Cloud Monitoring API and Cloud Logging\nAPI enabled on the project.\n\"\"\"\nimport logging\nimport operator as op\nfrom datetime import datetime, timedelta, timezone\nfrom typing import Dict, List, Sequence\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gce, logs, monitoring, osconfig\n\n_query_results_project_id: Dict[str, monitoring.TimeSeriesCollection] = {}\n_syslog_query = {}\n_windows_event_log_query = {}\n_health_log_query = {}\nOPS_AGENT_PACKAGE_NAME = 'google-cloud-ops-agent'\nOPS_AGENT_LOGGING_METRICS_VERSION = 'google-cloud-ops-agent-metrics'\nOPS_AGENT_MONITORING_METRICS_VERSION = 'google-cloud-ops-agent-logging'\nOPS_AGENT_NOT_INSTALLED_TEXT = 'Ops Agent not installed on the VM'\nOPS_AGENT_UNDETECTABLE_TEXT = 'Unable to confirm Ops Agent installation'\n\nUNABLE_TO_DETECT_EXPLANATION = (\n    'VM Manager is needed for the ops agent detection. Please enable it at:'\n    ' https://cloud.google.com/compute/docs/manage-os#automatic and run this'\n    ' check again.')\nOPS_AGENT_OK_TEXT = (\n    'Ops Agent installed on the VM, and is successfully sending logs and'\n    ' metrics.')\nOPS_AGENT_FAILS_TO_SEND_TELEMETRY_TEXT = (\n    \"Ops Agent is installed, but it's failing to send both logs and metrics\"\n    ' to Google Cloud.')\n\nOPS_AGENT_FAILS_TO_SEND_TELEMETRY_EXPLANATION = (\n    \"\"\"\\tIs Ops Agent sending logs? (%s) \\tIs Ops Agent sending metrics? (%s)\"\"\"\n)\n\n\nclass Instance:\n  \"\"\"Instance represents a Google Compute Engine (GCE) instance,\n\n  storing its associated project ID and providing flags to track the Ops Agent\n  installation status, OS inventory availability, and Ops Agent liveliness.\n  \"\"\"\n\n  _gce_instance: gce.Instance\n  _project_id: str\n  _ops_agent_installed: bool\n  _has_os_inventory: bool\n  _has_recent_log_pings: bool\n  _has_recent_log_entries: bool\n  _has_logging_uptime_metrics: bool\n  _has_monitoring_uptime_metrics: bool\n\n  def __init__(self, project_id, gce_instance):\n\n    self._gce_instance = gce_instance\n    self._project_id = project_id\n    self._ops_agent_installed = False\n    self._has_os_inventory = False\n    self._has_recent_log_pings = False\n    self._has_recent_log_entries = False\n    self._has_logging_uptime_metrics = False\n    self._has_monitoring_uptime_metrics = False\n\n  @property\n  def project_id(self) -> str:\n    return self._project_id\n\n  @property\n  def gce_instance(self) -> gce.Instance:\n    return self._gce_instance\n\n  @property\n  def is_gke_node(self) -> bool:\n    return self._gce_instance.is_gke_node()\n\n  @property\n  def id(self) -> str:\n    return self._gce_instance.id\n\n  @property\n  def zone(self) -> str:\n    return self._gce_instance.zone\n\n  @property\n  def name(self) -> str:\n    return self._gce_instance.name\n\n  @property\n  def has_os_inventory(self) -> bool:\n    return self._has_os_inventory\n\n  @has_os_inventory.setter\n  def has_os_inventory(self, new_value: bool):\n    self._has_os_inventory = new_value\n\n  @property\n  def ops_agent_installed(self) -> bool:\n    return self._ops_agent_installed\n\n  @ops_agent_installed.setter\n  def ops_agent_installed(self, new_value: bool):\n    self._ops_agent_installed = new_value\n\n  @property\n  def has_recent_log_pings(self) -> bool:\n    return self._has_recent_log_pings\n\n  @has_recent_log_pings.setter\n  def has_recent_log_pings(self, new_value: bool):\n    self._has_recent_log_pings = new_value\n\n  @property\n  def has_recent_log_entries(self) -> bool:\n    return self._has_recent_log_entries\n\n  @has_recent_log_entries.setter\n  def has_recent_log_entries(self, new_value: bool):\n    self._has_recent_log_entries = new_value\n\n  @property\n  def has_logging_uptime_metrics(self) -> bool:\n    return self._has_logging_uptime_metrics\n\n  @has_logging_uptime_metrics.setter\n  def has_logging_uptime_metrics(self, new_value: bool):\n    self._has_logging_uptime_metrics = new_value\n\n  @property\n  def has_monitoring_uptime_metrics(self) -> bool:\n    return self._has_monitoring_uptime_metrics\n\n  @has_monitoring_uptime_metrics.setter\n  def has_monitoring_uptime_metrics(self, new_value: bool):\n    self._has_monitoring_uptime_metrics = new_value\n\n\ndef prepare_rule(context: models.Context):\n  # Fetch agent uptime metrics.\n  _query_results_project_id[context.project_id] = monitoring.query(\n      context.project_id,\n      \"\"\"\nfetch gce_instance\n| metric 'agent.googleapis.com/agent/uptime'\n| align rate(4m)\n| every 4m\n  \"\"\",\n  )\n  unique_zones = set()\n  # Fetch os inventory info for all VM instances by zones.\n  for i in gce.get_instances(context).values():\n    unique_zones.add(i.zone)\n  for zone in unique_zones:\n    osconfig.list_inventories(context, zone)\n\n  # Fetch logs from syslog, windows event log, and ops agent health log.\n  now = datetime.now(timezone.utc)\n  # We need log entries within the past 20-minute timeframe.\n  start_time = now - timedelta(minutes=20)\n  time_filter = (\n      f\"timestamp>=\\\"{start_time.isoformat(timespec='seconds')}\\\" AND timestamp\"\n      f\" <= \\\"{now.isoformat(timespec='seconds')}\\\"\")\n  _syslog_query[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='gce_instance',\n      log_name=f'projects/{context.project_id}/logs/syslog',\n      filter_str=time_filter,\n  )\n\n  _windows_event_log_query[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='gce_instance',\n      log_name=f'projects/{context.project_id}/logs/windows_event_log',\n      filter_str=time_filter,\n  )\n  # we retrieve only the 'LogPing' entries from Ops Agent health log.\n  _health_log_query[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='gce_instance',\n      log_name=f'projects/{context.project_id}/logs/ops-agent-health',\n      filter_str='\"LogPingOpsAgent\" AND ' + time_filter,\n  )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # Fetch all GCE VM instances from the inspected project.\n  instances = list(gce.get_instances(context).values())\n  if not instances:\n    report.add_skipped(\n        None, f'No VM instances found in project: {context.project_id}.')\n    return\n\n  instances = [\n      Instance(context.project_id, i)\n      for i in sorted(instances, key=op.attrgetter('project_id', 'full_path'))\n  ]\n\n  confirm_agent_installation_via_os_config(context, report, instances)\n  confirm_agent_installation_via_uptime_metrics(context, report, instances)\n  log_entries = format_log_entries(\n      _syslog_query[context.project_id].entries,\n      _windows_event_log_query[context.project_id].entries,\n      _health_log_query[context.project_id].entries,\n  )\n\n  uptime_metric_entries = format_metric_entries(\n      _query_results_project_id[context.project_id])\n  populate_sub_agents_uptime_metrics_status(instances, uptime_metric_entries)\n  populate_log_type_status(instances, log_entries)\n  confirm_agent_telemetry_transmission(report, instances)\n\n\ndef confirm_agent_installation_via_os_config(\n    context: models.Context,\n    report: lint.LintReportRuleInterface,\n    instances: List[Instance],\n):\n  unique_zones = set()\n  for i in instances:\n    unique_zones.add(i.zone)\n\n  inventories: Dict[str, osconfig.Inventory] = {}\n  for zone in unique_zones:\n    inventories.update(osconfig.list_inventories(context, zone))\n\n  for i in sorted(instances, key=op.attrgetter('project_id', 'name')):\n    if i.is_gke_node:\n      continue\n\n    inventory = inventories.get(i.id)\n    if inventory is None:\n      i.has_os_inventory = False\n      continue\n\n    i.has_os_inventory = True\n    for pkg_name in inventory.installed_packages:\n      if OPS_AGENT_PACKAGE_NAME in pkg_name:\n        i.ops_agent_installed = True\n        break\n    if not i.ops_agent_installed:\n      report.add_failed(\n          i.gce_instance,\n          '',\n          OPS_AGENT_NOT_INSTALLED_TEXT,\n      )\n\n\ndef format_metric_entries(\n    query_entry: monitoring.TimeSeriesCollection,) -> Dict[str, List[str]]:\n  formatted_query_entries: Dict[str, List[str]] = {}\n  for e in query_entry.values():\n    try:\n      instance_id = e['labels']['resource.instance_id']\n      metric_version = e['labels']['metric.version']\n      if instance_id in formatted_query_entries:\n        formatted_query_entries[instance_id].append(metric_version)\n      else:\n        formatted_query_entries[instance_id] = [metric_version]\n    except KeyError:\n      logging.warning(\n          'query entry without required label:resource.instance_id,'\n          ' metric.version: %s',\n          e,\n      )\n  return formatted_query_entries\n\n\ndef confirm_agent_installation_via_uptime_metrics(\n    context: models.Context,\n    report: lint.LintReportRuleInterface,\n    instances: List[Instance],\n):\n  # Fetch Agent Uptime metrics.\n  query = _query_results_project_id[context.project_id]\n  try:\n    vms_agents: Dict[str, List[str]] = {}\n    for e in query.values():\n      instance_id = e['labels']['resource.instance_id']\n      metric_version = e['labels']['metric.version']\n      if instance_id in vms_agents:\n        vms_agents[instance_id].append(metric_version)\n      else:\n        vms_agents[instance_id] = [metric_version]\n  except KeyError:\n    for i in instances:\n      if not i.has_os_inventory:\n        report.add_skipped(\n            i.gce_instance,\n            UNABLE_TO_DETECT_EXPLANATION,\n            OPS_AGENT_UNDETECTABLE_TEXT,\n        )\n    return\n\n  # Verify Ops Agent installation for VMs that don't have OS Inventory.\n  for i in sorted(\n      instances,\n      key=op.attrgetter('project_id', 'name'),\n  ):\n    if i.is_gke_node:\n      continue\n    # Skip VMs with confirmed Ops Agent installations via OS Config API.\n    if i.has_os_inventory:\n      continue\n    if i.id in vms_agents:\n      for metric_version in vms_agents[i.id]:\n        if OPS_AGENT_PACKAGE_NAME in metric_version:\n          i.ops_agent_installed = True\n          break\n      if not i.ops_agent_installed:\n        report.add_failed(\n            i.gce_instance,\n            '',\n            OPS_AGENT_NOT_INSTALLED_TEXT,\n        )\n    else:\n      report.add_skipped(\n          i.gce_instance,\n          UNABLE_TO_DETECT_EXPLANATION,\n          OPS_AGENT_UNDETECTABLE_TEXT,\n      )\n\n\ndef populate_sub_agents_uptime_metrics_status(\n    instances: List[Instance], formatted_metrics_entry: Dict[str, List[str]]):\n  for i in sorted(\n      instances,\n      key=op.attrgetter('project_id', 'name'),\n  ):\n    if i.is_gke_node:\n      continue\n    if not i.ops_agent_installed:\n      continue\n    if i.id not in formatted_metrics_entry:\n      continue\n    for metric_version in formatted_metrics_entry[i.id]:\n      if OPS_AGENT_LOGGING_METRICS_VERSION in metric_version:\n        i.has_logging_uptime_metrics = True\n      if OPS_AGENT_MONITORING_METRICS_VERSION in metric_version:\n        i.has_monitoring_uptime_metrics = True\n\n\ndef populate_log_type_status(instances: List[Instance],\n                             formatted_log_entry: Dict[str, Dict[str, bool]]):\n  for i in sorted(\n      instances,\n      key=op.attrgetter('project_id', 'name'),\n  ):\n    if i.id in formatted_log_entry:\n      e = formatted_log_entry[i.id]\n      i.has_recent_log_pings = 'logPing' in e\n      i.has_recent_log_entries = ('syslog' in e) or ('windowsEventLog' in e)\n    else:\n      i.has_recent_log_pings = False\n      i.has_recent_log_entries = False\n\n\ndef format_log_entries(\n    syslog_entries: Sequence,\n    windows_event_log_entries: Sequence,\n    agent_health_log_entries: Sequence,\n) -> Dict[str, Dict[str, bool]]:\n  formatted_log_entry: Dict[str, Dict[str, bool]] = {}\n  for e in syslog_entries:\n    try:\n      instance_id = e['resource']['labels']['instance_id']\n      if instance_id not in formatted_log_entry:\n        formatted_log_entry[instance_id] = {}\n      formatted_log_entry[instance_id]['syslog'] = True\n    except KeyError:\n      logging.warning('log entry without instance_id label: %s', e)\n\n  for e in agent_health_log_entries:\n    try:\n      text_payload = e['jsonPayload']['code']\n      if text_payload.lower() != 'logpingopsagent':\n        continue\n      instance_id = e['resource']['labels']['instance_id']\n      if instance_id not in formatted_log_entry:\n        formatted_log_entry[instance_id] = {}\n      formatted_log_entry[instance_id]['logPing'] = True\n    except KeyError:\n      logging.warning(\n          'log entry does not have required keys: jsonPayload.code and'\n          ' resource.labels.instance_id: %s',\n          e,\n      )\n\n  for e in windows_event_log_entries:\n    try:\n      instance_id = e['resource']['labels']['instance_id']\n      if instance_id not in formatted_log_entry:\n        formatted_log_entry[instance_id] = {}\n      formatted_log_entry[instance_id]['windowsEventLog'] = True\n    except KeyError:\n      logging.warning('windows event log entry without instance_id label: %s',\n                      e)\n  return formatted_log_entry\n\n\ndef confirm_agent_telemetry_transmission(\n    report: lint.LintReportRuleInterface,\n    instances: List[Instance],\n):\n  # For all VMs with Ops Agent installed, verify both subagents are transmitting\n  # telemetry.\n  for i in sorted(\n      instances,\n      key=op.attrgetter('project_id', 'name'),\n  ):\n    if i.is_gke_node:\n      continue\n    if not i.ops_agent_installed:\n      continue\n    logging_subagent_up = (i.has_recent_log_pings) or (\n        i.has_recent_log_entries and i.has_logging_uptime_metrics)\n    monitoring_subagent_up = i.has_monitoring_uptime_metrics\n    if logging_subagent_up and monitoring_subagent_up:\n      report.add_ok(\n          i.gce_instance,\n          OPS_AGENT_OK_TEXT,\n      )\n    else:\n      logging_subagent_up_text = 'Yes' if logging_subagent_up else 'No'\n      monitoring_subagent_up_text = 'Yes' if monitoring_subagent_up else 'No'\n      report.add_failed(\n          i.gce_instance,\n          OPS_AGENT_FAILS_TO_SEND_TELEMETRY_EXPLANATION % (\n              logging_subagent_up_text,\n              monitoring_subagent_up_text,\n          ),\n          OPS_AGENT_FAILS_TO_SEND_TELEMETRY_TEXT,\n      )\n"
  },
  {
    "path": "gcpdiag/lint/gce/gce_rules_snapshot_test.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Generalize rule snapshot testing\"\"\"\n\nfrom gcpdiag.lint import gce, snapshot_test_base\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = gce\n  project_id = 'gcpdiag-gce1-aaaa'\n"
  },
  {
    "path": "gcpdiag/lint/gce/snapshots/BP_2021_001.txt",
    "content": "*  gce/BP/2021_001: Serial port logging is enabled.\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1       [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2       [FAIL]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gke-gke1-default-pool-35923fbc-2xxp [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-bzvx   [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-l40g   [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1       [ OK ]\n\n   Serial port output can be often useful for troubleshooting, and enabling\n   serial logging makes sure that you don't lose the information when the VM is\n   restarted. Additionally, serial port logs are timestamped, which is useful to\n   determine when a particular serial output line was printed.\n\n   https://gcpdiag.dev/rules/gce/BP/2021_001\n\n"
  },
  {
    "path": "gcpdiag/lint/gce/snapshots/BP_2022_003.txt",
    "content": "*  gce/BP/2022_003: GCE unattached bootable disk.\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/unattached-disk [FAIL]\n     Unattached bootable disk: unattached-disk in zone: europe-west4-a\n\n   Unattached bootable disks are abandoned or orphaned resources that are\n   detached from a instance or service.\n\n   https://gcpdiag.dev/rules/gce/BP/2022_003\n\n"
  },
  {
    "path": "gcpdiag/lint/gce/snapshots/BP_2023_001.txt",
    "content": "*  gce/BP/2023_001: Instance time source is configured with Google NTP server\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1       [SKIP]\n     No indication of NTP Service time sync\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1       [SKIP]\n     No indication of NTP Service time sync\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2       [SKIP]\n     No indication of NTP Service time sync\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gke-gke1-default-pool-35923fbc-2xxp [SKIP]\n     No indication of NTP Service time sync\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-bzvx   [SKIP]\n     No indication of NTP Service time sync\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-l40g   [SKIP]\n     No indication of NTP Service time sync\n\n"
  },
  {
    "path": "gcpdiag/lint/gce/snapshots/BP_2024_001.txt",
    "content": "*  gce/BP/2024_001: Verify that GCE VM Instances Don't Have Legacy Monitoring Agent Installed.\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1       [SKIP] Unable to confirm legacy monitoring agent installation\n     VM Manager is needed for the legacy agent detection. Please enable it at: https://cloud.google.com/compute/docs/manage-os#automatic and run this check again.\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2       [SKIP] Unable to confirm legacy monitoring agent installation\n     VM Manager is needed for the legacy agent detection. Please enable it at: https://cloud.google.com/compute/docs/manage-os#automatic and run this check again.\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-bzvx   [SKIP] Unable to confirm legacy monitoring agent installation\n     VM Manager is needed for the legacy agent detection. Please enable it at: https://cloud.google.com/compute/docs/manage-os#automatic and run this check again.\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-l40g   [SKIP] Unable to confirm legacy monitoring agent installation\n     VM Manager is needed for the legacy agent detection. Please enable it at: https://cloud.google.com/compute/docs/manage-os#automatic and run this check again.\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1       [SKIP] Unable to confirm legacy monitoring agent installation\n     VM Manager is needed for the legacy agent detection. Please enable it at: https://cloud.google.com/compute/docs/manage-os#automatic and run this check again.\n\n"
  },
  {
    "path": "gcpdiag/lint/gce/snapshots/BP_2024_002.txt",
    "content": "*  gce/BP/2024_002: Verify that GCE VM Instances Don't Have Legacy Logging Agent Installed.\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1       [SKIP] Unable to detect legacy logging agent\n     VM Manager is needed for the legacy agent detection. Please enable it at: https://cloud.google.com/compute/docs/manage-os#automatic and run this check again.\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2       [SKIP] Unable to detect legacy logging agent\n     VM Manager is needed for the legacy agent detection. Please enable it at: https://cloud.google.com/compute/docs/manage-os#automatic and run this check again.\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-bzvx   [SKIP] Unable to detect legacy logging agent\n     VM Manager is needed for the legacy agent detection. Please enable it at: https://cloud.google.com/compute/docs/manage-os#automatic and run this check again.\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-l40g   [SKIP] Unable to detect legacy logging agent\n     VM Manager is needed for the legacy agent detection. Please enable it at: https://cloud.google.com/compute/docs/manage-os#automatic and run this check again.\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1       [SKIP] Unable to detect legacy logging agent\n     VM Manager is needed for the legacy agent detection. Please enable it at: https://cloud.google.com/compute/docs/manage-os#automatic and run this check again.\n\n"
  },
  {
    "path": "gcpdiag/lint/gce/snapshots/BP_EXT_2021_003.txt",
    "content": "*  gce/BP_EXT/2021_003: Secure Boot is enabled\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1       [FAIL]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2       [FAIL]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-bzvx   [FAIL]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-l40g   [FAIL]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1       [FAIL]\n\n   Google recommends enabling Secure Boot if you can ensure that it doesn't\n   prevent a representative test VM from booting and if it is appropriate for\n   your workload. Compute Engine does not enable Secure Boot by default because\n   unsigned drivers and other low-level software might not be compatible.\n\n   https://gcpdiag.dev/rules/gce/BP_EXT/2021_003\n\n"
  },
  {
    "path": "gcpdiag/lint/gce/snapshots/BP_EXT_2022_001.txt",
    "content": "*  gce/BP_EXT/2022_001: GCP project has VM Manager enabled\n   - projects/gcpdiag-gce1-aaaa                                           [FAIL]\n     it is recommended to enable VM Manager on your project\n\n   Google recommends enabling VM Manager. It provides visibility on software\n   vulnerabilities, missing updates and enables to set configuration management\n   policies\n\n   https://gcpdiag.dev/rules/gce/BP_EXT/2022_001\n\n"
  },
  {
    "path": "gcpdiag/lint/gce/snapshots/BP_EXT_2023_001.txt",
    "content": "*  gce/BP_EXT/2023_001: GCE Instances follows access scope best practice\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1       [FAIL]\n     12340001-compute@developer.gserviceaccount.com has a basic role granted.\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2       [FAIL]\n     12340001-compute@developer.gserviceaccount.com has a basic role granted.\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-bzvx   [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-l40g   [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1       [FAIL]\n     12340001-compute@developer.gserviceaccount.com has a basic role granted.\n\n   Google recommends not to rely on access scopes but instead set the cloud-\n   platform access scope and control the service account access by granting\n   fine-grained IAM roles. Enabling a custom service account with very coarse-\n   grained permissions and a very restricted access scope will ensure the\n   connection to or from the VM is limited and implements a security-in-depth\n   strategy where multiple layers of security are used for holistic protection.\n\n   https://gcpdiag.dev/rules/gce/BP_EXT/2023_001\n\n"
  },
  {
    "path": "gcpdiag/lint/gce/snapshots/BP_EXT_2024_001.txt",
    "content": "*  gce/BP_EXT/2024_001: Instance has a public ip address\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1       [FAIL]\n     Instance does not have a public address.\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2       [FAIL]\n     Instance does not have a public address.\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gke-gke1-default-pool-35923fbc-2xxp [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-bzvx   [FAIL]\n     Instance does not have a public address.\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-l40g   [FAIL]\n     Instance does not have a public address.\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1       [FAIL]\n     Instance does not have a public address.\n\n   If the Compute Engine instance does not have a public ip address, then the\n   SSH button will be disabled in the SSH in browser UI.\n\n   https://gcpdiag.dev/rules/gce/BP_EXT/2024_001\n\n"
  },
  {
    "path": "gcpdiag/lint/gce/snapshots/BP_EXT_2024_002.txt",
    "content": "*  gce/BP_EXT/2024_002: Calculate Google Compute Engine VM's IOPS and Throughput Limits\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1       [ OK ] \n\tIOPS and Throughput limits available for VM DiskType - pd-standard,\n\tTotal DiskSize: 32:\n\n\t Max Read-IOPS Count: 75, \n\t Max Read-Throughput: 12 MB/s,\n\t Max Write-IOPS Count: 150, \n\t Max Write-Throughput: 12 MB/s\n\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2       [ OK ] \n\tIOPS and Throughput limits available for VM DiskType - pd-standard,\n\tTotal DiskSize: 10:\n\n\t Max Read-IOPS Count: 75, \n\t Max Read-Throughput: 12 MB/s,\n\t Max Write-IOPS Count: 150, \n\t Max Write-Throughput: 12 MB/s\n\n\n"
  },
  {
    "path": "gcpdiag/lint/gce/snapshots/BP_EXT_2024_003.txt",
    "content": "*  gce/BP_EXT/2024_003: Calculate GCE VM's IOPS and Throughput Limits\n   - gcpdiag-gce1-aaaa/gce1                                               [ OK ] \n\tIOPS and Throughput limits available for VM DiskType - pd-standard,\n\tTotal DiskSize: 32:\n\n\t Read-IOPS Count: 24.0,\n\t Read-Throughput: 3.84 MB/s, \n\t Write-IOPS Count: 48.0, \n\t Write-Throughput: 3.84 MB/s \n\n\n   - gcpdiag-gce1-aaaa/gce2                                               [ OK ] \n\tIOPS and Throughput limits available for VM DiskType - pd-standard,\n\tTotal DiskSize: 10:\n\n\t Read-IOPS Count: 7.5,\n\t Read-Throughput: 1.2 MB/s, \n\t Write-IOPS Count: 15.0, \n\t Write-Throughput: 1.2 MB/s \n\n\n\n"
  },
  {
    "path": "gcpdiag/lint/gce/snapshots/ERR_2021_001.txt",
    "content": "*  gce/ERR/2021_001: Managed instance groups do not report scaleup failures.\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroupManagers/mig [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/gce/snapshots/ERR_2021_002.txt",
    "content": "*  gce/ERR/2021_002: OS Config service account has the required permissions.\n   (no instances found with OS Config enabled)                            [SKIP]\n\n"
  },
  {
    "path": "gcpdiag/lint/gce/snapshots/ERR_2021_003.txt",
    "content": "*  gce/ERR/2021_003: Google APIs service agent has the Editor role.\n   - projects/gcpdiag-gce1-aaaa                                           [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/gce/snapshots/ERR_2021_004.txt",
    "content": "*  gce/ERR/2021_004: Serial logs don't contain Secure Boot error messages\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1       [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1       [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2       [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-bzvx   [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-l40g   [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/gce/snapshots/ERR_2021_005.txt",
    "content": "*  gce/ERR/2021_005: Serial logs don't contain mount error messages\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1       [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1       [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2       [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gke-gke1-default-pool-35923fbc-2xxp [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-bzvx   [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-l40g   [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/gce/snapshots/ERR_2022_001.txt",
    "content": "*  gce/ERR/2022_001: Project limits were not exceeded.\n   - projects/gcpdiag-gce1-aaaa                                           [SKIP]\n     no data\n\n"
  },
  {
    "path": "gcpdiag/lint/gce/snapshots/ERR_2022_002.txt",
    "content": "*  gce/ERR/2022_002: Serial logs don't contain Guest OS activation errors\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1       [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1       [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2       [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-bzvx   [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-l40g   [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/gce/snapshots/ERR_2024_001.txt",
    "content": "*  gce/ERR/2024_001: Snapshot creation not failed due to rate limit.\n   - projects/gcpdiag-gce1-aaaa                                           [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/gce/snapshots/ERR_2024_002.txt",
    "content": "*  gce/ERR/2024_002: GCE VM is operating within optimal performance thresholds\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1       [FAIL]\n     Disk IO Latency for disk gce1 is exceeding optimal levels, potentially impacting performance of the instance.\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1       [FAIL]\n     CPU utilization is exceeding optimal levels, potentially impacting performance of the instance.\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1       [FAIL]\n     Memory utilization is exceeding optimal levels(95%), potentially impacting performance of the instance.\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1       [FAIL]\n     Disk utilization is exceeding optimal levels(95%), potentially impacting performance of the instance.\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2       [FAIL]\n     Disk IO Latency for disk gce2 is exceeding optimal levels, potentially impacting performance of the instance.\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2       [FAIL]\n     CPU utilization is exceeding optimal levels, potentially impacting performance of the instance.\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2       [FAIL]\n     Memory utilization is exceeding optimal levels(95%), potentially impacting performance of the instance.\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2       [FAIL]\n     Disk utilization is exceeding optimal levels(95%), potentially impacting performance of the instance.\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-bzvx   [FAIL]\n     CPU utilization is exceeding optimal levels, potentially impacting performance of the instance.\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-bzvx   [FAIL]\n     Memory utilization is exceeding optimal levels(95%), potentially impacting performance of the instance.\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-bzvx   [FAIL]\n     Disk utilization is exceeding optimal levels(95%), potentially impacting performance of the instance.\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-l40g   [FAIL]\n     CPU utilization is exceeding optimal levels, potentially impacting performance of the instance.\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-l40g   [FAIL]\n     Memory utilization is exceeding optimal levels(95%), potentially impacting performance of the instance.\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-l40g   [FAIL]\n     Disk utilization is exceeding optimal levels(95%), potentially impacting performance of the instance.\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1       [FAIL]\n     CPU utilization is exceeding optimal levels, potentially impacting performance of the instance.\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1       [FAIL]\n     Memory utilization is exceeding optimal levels(95%), potentially impacting performance of the instance.\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1       [FAIL]\n     Disk utilization is exceeding optimal levels(95%), potentially impacting performance of the instance.\n\n   Checks the performance of the GCE instances in a project - CPU Usage, Memory\n   Usage, Disk Usage and Serial port logs errors. Threshold for CPU Usage,\n   Memory Usage, Disk Usage is 95%.\n\n   https://gcpdiag.dev/rules/gce/ERR/2024_002\n\n"
  },
  {
    "path": "gcpdiag/lint/gce/snapshots/ERR_2024_003.txt",
    "content": "*  gce/ERR/2024_003: GCE Shielded VM secure boot validations\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1       [SKIP]\n     Secure Boot is disabled for the instance\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2       [SKIP]\n     Secure Boot is disabled for the instance\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gke-gke1-default-pool-35923fbc-2xxp [SKIP]\n     Secure Boot is disabled for the instance\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-bzvx   [SKIP]\n     Secure Boot is disabled for the instance\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-l40g   [SKIP]\n     Secure Boot is disabled for the instance\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1       [SKIP]\n     Secure Boot is disabled for the instance\n\n"
  },
  {
    "path": "gcpdiag/lint/gce/snapshots/ERR_2024_004.txt",
    "content": "*  gce/ERR/2024_004: Verify Ops Agent is installed on GCE VMs and is sending logs and metrics.\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1       [SKIP] Unable to confirm Ops Agent installation\n     VM Manager is needed for the ops agent detection. Please enable it at: https://cloud.google.com/compute/docs/manage-os#automatic and run this check again.\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2       [SKIP] Unable to confirm Ops Agent installation\n     VM Manager is needed for the ops agent detection. Please enable it at: https://cloud.google.com/compute/docs/manage-os#automatic and run this check again.\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gke-gke1-default-pool-35923fbc-2xxp [SKIP] Unable to confirm Ops Agent installation\n     VM Manager is needed for the ops agent detection. Please enable it at: https://cloud.google.com/compute/docs/manage-os#automatic and run this check again.\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-bzvx   [SKIP] Unable to confirm Ops Agent installation\n     VM Manager is needed for the ops agent detection. Please enable it at: https://cloud.google.com/compute/docs/manage-os#automatic and run this check again.\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-l40g   [SKIP] Unable to confirm Ops Agent installation\n     VM Manager is needed for the ops agent detection. Please enable it at: https://cloud.google.com/compute/docs/manage-os#automatic and run this check again.\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1       [SKIP] Unable to confirm Ops Agent installation\n     VM Manager is needed for the ops agent detection. Please enable it at: https://cloud.google.com/compute/docs/manage-os#automatic and run this check again.\n\n"
  },
  {
    "path": "gcpdiag/lint/gce/snapshots/WARN_2021_001.txt",
    "content": "*  gce/WARN/2021_001: GCE VM Instance Access Scope, GCE VM Attached Service Account Permissions and APIs Required for Logging.\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1       [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2       [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-bzvx   [FAIL] VM does not have a Service Account attached\n     Follow https://cloud.google.com/compute/docs/instances/change-service-account\n     to attach a Service Account to the VM mig-bzvx.\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-l40g   [FAIL] VM does not have a Service Account attached\n     Follow https://cloud.google.com/compute/docs/instances/change-service-account\n     to attach a Service Account to the VM mig-l40g.\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1       [ OK ]\n\n   A GCP project should have Cloud Logging API enabled. The service account\n   attached to the GCE VM instances should have the logging.logWriter IAM role\n   permission. Also, a GCE instance should have the logging.write access scope.\n   Without these, Ops Agent won't be able to collect logs from GCE VMs and\n   display on Logs Explorer.\n\n   https://gcpdiag.dev/rules/gce/WARN/2021_001\n\n"
  },
  {
    "path": "gcpdiag/lint/gce/snapshots/WARN_2021_002.txt",
    "content": "*  gce/WARN/2021_002: GCE nodes have good disk performance.\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1       [SKIP]\n     no data\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2       [SKIP]\n     no data\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gke-gke1-default-pool-35923fbc-2xxp [SKIP]\n     no data\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-bzvx   [SKIP]\n     no data\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-l40g   [SKIP]\n     no data\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1       [SKIP]\n     no data\n\n"
  },
  {
    "path": "gcpdiag/lint/gce/snapshots/WARN_2021_003.txt",
    "content": "*  gce/WARN/2021_003: GCE VM Instance Access Scope, GCE VM Attached Service Account Permissions and APIs Required for Monitoring.\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1       [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2       [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-bzvx   [FAIL] VM does not have a Service Account attached\n     Follow https://cloud.google.com/compute/docs/instances/change-service-account\n     to attach a Service Account to the VM mig-bzvx.\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-l40g   [FAIL] VM does not have a Service Account attached\n     Follow https://cloud.google.com/compute/docs/instances/change-service-account\n     to attach a Service Account to the VM mig-l40g.\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1       [ OK ]\n\n   A GCP project should have Cloud Monitoring API enabled. The service account\n   attached to the GCE VM instances should have the monitoring.metricWriter IAM\n   role permission. Also, a GCE instance should have the monitoring.write access\n   scope. Without these, Ops Agent won't be able to collect metrics from GCE VMs\n   and display on Metrics Explorer.\n\n   https://gcpdiag.dev/rules/gce/WARN/2021_003\n\n"
  },
  {
    "path": "gcpdiag/lint/gce/snapshots/WARN_2021_004.txt",
    "content": "*  gce/WARN/2021_004: Serial logs don't contain disk full messages\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1       [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2       [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gke-gke1-default-pool-35923fbc-2xxp [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-bzvx   [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-l40g   [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1       [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/gce/snapshots/WARN_2021_005.txt",
    "content": "*  gce/WARN/2021_005: Serial logs don't contain out-of-memory messages\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1       [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2       [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gke-gke1-default-pool-35923fbc-2xxp [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-bzvx   [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-l40g   [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1       [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/gce/snapshots/WARN_2021_006.txt",
    "content": "*  gce/WARN/2021_006: Serial logs don't contain \"Kernel panic\" messages\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1       [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1       [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2       [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gke-gke1-default-pool-35923fbc-2xxp [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-bzvx   [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-l40g   [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/gce/snapshots/WARN_2021_007.txt",
    "content": "*  gce/WARN/2021_007: Serial logs don't contain \"BSOD\" messages\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1       [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1       [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2       [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gke-gke1-default-pool-35923fbc-2xxp [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-bzvx   [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-l40g   [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/gce/snapshots/WARN_2022_001.txt",
    "content": "*  gce/WARN/2022_001: GCE connectivity: IAP service can connect to SSH/RDP port on instances.\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1       [FAIL]\n     connections from 35.235.240.0/20 to tcp:3389 blocked by vpc firewall rule: gce-secured-instance-test-deny (instance: gce1)\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2       [FAIL]\n     connections from 35.235.240.0/20 to tcp:3389 blocked by vpc firewall rule: gce-secured-instance-test-deny (instance: gce2)\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gke-gke1-default-pool-35923fbc-2xxp [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-bzvx   [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-l40g   [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1       [FAIL]\n     connections from 35.235.240.0/20 to tcp:3389 blocked by vpc firewall rule: gce-secured-instance-test-deny (instance: gce1)\n\n   Traffic from the IP range 35.235.240.0/20 to VM instances is necessary for\n   IAP TCP forwarding to establish an encrypted tunnel over which you can\n   forward SSH, RDP traffic to VM instances.\n\n   https://gcpdiag.dev/rules/gce/WARN/2022_001\n\n"
  },
  {
    "path": "gcpdiag/lint/gce/snapshots/WARN_2022_002.txt",
    "content": "*  gce/WARN/2022_002: Instance groups named ports are using unique names.\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups/instance-group-1 [FAIL]\n     Instance group contains multiple ports with the same name\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups/instance-group-2 [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups/mig   [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instanceGroups/instance-group-1 [FAIL]\n     Instance group contains multiple ports with the same name\n\n   Named ports are key-value pairs that represent a port's name and number. It\n   is recommended to use unique port name for the same application, so that\n   backend service can only forward traffic to one named port at a time.\n\n   https://gcpdiag.dev/rules/gce/WARN/2022_002\n\n"
  },
  {
    "path": "gcpdiag/lint/gce/snapshots/WARN_2022_003.txt",
    "content": "*  gce/WARN/2022_003: GCE VM instances quota is not near the limit.\n   - projects/gcpdiag-gce1-aaaa/regions/europe-west4                      [SKIP]\n     no data\n\n"
  },
  {
    "path": "gcpdiag/lint/gce/snapshots/WARN_2022_004.txt",
    "content": "*  gce/WARN/2022_004: Cloud SQL Docker bridge network should be avoided.\n   (no Cloud SQL peered vpc found)                                        [SKIP]\n\n"
  },
  {
    "path": "gcpdiag/lint/gce/snapshots/WARN_2022_005.txt",
    "content": "*  gce/WARN/2022_005: GCE CPU quota is not near the limit.\n   - projects/gcpdiag-gce1-aaaa/regions/europe-west4                      [SKIP]\n     no data\n\n"
  },
  {
    "path": "gcpdiag/lint/gce/snapshots/WARN_2022_006.txt",
    "content": "*  gce/WARN/2022_006: GCE GPU quota is not near the limit.\n   - projects/gcpdiag-gce1-aaaa/regions/europe-west4                      [SKIP]\n     no data\n\n"
  },
  {
    "path": "gcpdiag/lint/gce/snapshots/WARN_2022_007.txt",
    "content": "*  gce/WARN/2022_007: Compute Engine VM has the proper scope to connect using the Cloud SQL Admin API\n   (no Cloud SQL peered vpc found)                                        [SKIP]\n\n"
  },
  {
    "path": "gcpdiag/lint/gce/snapshots/WARN_2022_008.txt",
    "content": "*  gce/WARN/2022_008: GCE External IP addresses quota is not near the limit.\n   - projects/gcpdiag-gce1-aaaa/regions/europe-west4                      [SKIP]\n     no data\n\n"
  },
  {
    "path": "gcpdiag/lint/gce/snapshots/WARN_2022_009.txt",
    "content": "*  gce/WARN/2022_009: GCE disk quota is not near the limit.\n   - projects/gcpdiag-gce1-aaaa/regions/europe-west4                      [SKIP]\n     no data\n\n"
  },
  {
    "path": "gcpdiag/lint/gce/snapshots/WARN_2022_010.txt",
    "content": "*  gce/WARN/2022_010: GCE has enough resources available to fulfill requests\n   - projects/gcpdiag-gce1-aaaa                                           [FAIL]\n     Resource exhaustion in zones: {'us-central1-a'}\n\n   Resource availability errors can occur when using GCE resource on demand and\n   a zone cannot accommodate your request due to resource exhaustion for the\n   specific VM configuration  Consider trying your request in other zones,\n   requesting again with a different VM hardware configuration or at a later\n   time. For more information, see the troubleshooting documentation.\n\n   https://gcpdiag.dev/rules/gce/WARN/2022_010\n\n"
  },
  {
    "path": "gcpdiag/lint/gce/snapshots/WARN_2022_011.txt",
    "content": "*  gce/WARN/2022_011: GCE VM service account is valid\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1       [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2       [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-bzvx   [SKIP]\n     instance does not have a service account\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-l40g   [SKIP]\n     instance does not have a service account\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1       [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/gce/snapshots/WARN_2022_012.txt",
    "content": "*  gce/WARN/2022_012: PAYG licensed Windows instance can reach KMS to activate\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1       [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2       [ OK ]\n   - projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1       [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/gce/snapshots/WARN_2023_001.txt",
    "content": "*  gce/WARN/2023_001: GCE snapshot policies are defined only for used disks.\n   - projects/gcpdiag-gce1-aaaa                                           [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/gce/snapshots/WARN_2023_002.txt",
    "content": "*  gce/WARN/2023_002: Serial logs don't contain out-of-memory message due to Airflow task run\n\n"
  },
  {
    "path": "gcpdiag/lint/gce/snapshots/WARN_2024_001.txt",
    "content": "*  gce/WARN/2024_001: Checks disks\n\n"
  },
  {
    "path": "gcpdiag/lint/gce/utils.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Various utility functions for GCE linters.\"\"\"\n\nimport re\nfrom typing import Dict, Iterable, Optional\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import config, models\nfrom gcpdiag.queries import apis, gce, logs\n\n\nclass SerialOutputSearch:\n  \"\"\" Search any of strings in instance's serial output \"\"\"\n\n  search_strings: Iterable[str]\n  query: logs.LogsQuery\n  instances_with_match: Dict[str, logs.LogEntryShort]\n  search_is_done: bool\n  serial_port_outputs: gce.SerialOutputQuery\n\n  def __init__(self,\n               context: models.Context,\n               search_strings: Iterable[str],\n               custom_filter: str = None):\n    self.search_strings = search_strings\n    self.query = logs.query(\n        project_id=context.project_id,\n        resource_type='gce_instance',\n        log_name='log_id(\"serialconsole.googleapis.com/serial_port_1_output\")',\n        filter_str=custom_filter if custom_filter else self._mk_filter())\n    if config.get('enable_gce_serial_buffer'):\n      self.serial_port_outputs = gce.fetch_serial_port_outputs(context)\n\n    self.instances_with_match = {}\n    self.search_is_done = False\n\n  def _mk_filter(self) -> str:\n    combined_filter = ' OR '.join([f'\"{s}\"' for s in self.search_strings])\n    return f'textPayload:({combined_filter})'\n\n  def get_last_match(self, instance_id: str) -> Optional[logs.LogEntryShort]:\n    if not self.search_is_done:\n      self.get_all_instance_with_match()\n    return self.instances_with_match.get(instance_id, None)\n\n  def get_all_instance_with_match(self):\n    for raw_entry in self.query.entries:\n      entry_id = get_path(raw_entry, ('resource', 'labels', 'instance_id'),\n                          default=None)\n      if not entry_id:\n        continue\n      entry = logs.LogEntryShort(raw_entry)\n      if any(f in entry.text for f in self.search_strings):\n        self.instances_with_match[entry_id] = entry\n\n    # If user has enabled direct serial port log fetching\n    if config.get('enable_gce_serial_buffer'):\n      for output in self.serial_port_outputs.entries:\n        # there is no reliable timestamps so we rely on the order the contents were delivered\n        # the order of the output contents is always consistent\n        # start from the button for the most recent entry\n        for serial_entry in reversed(output.contents):\n          if not self.instances_with_match.get(output.instance_id):\n            if any(f in serial_entry for f in self.search_strings):\n              self.instances_with_match[\n                  output.instance_id] = logs.LogEntryShort(serial_entry)\n\n    self.search_is_done = True\n\n\nclass QueryCloudLogs:\n  \"\"\" Query Cloud Logging for strings/methods/payloads etc. \"\"\"\n\n  query: logs.LogsQuery\n  instances_with_match: Dict[str, logs.LogEntryShort]\n\n  def __init__(self,\n               project_id: str,\n               resource_type: str,\n               filter_log: Iterable[str],\n               logid: Iterable[str] = None):\n\n    self.filter_log = ' OR '.join([f'{s}' for s in filter_log])\n    self.log_id = self._mk_filter(logid)\n\n    self.log_query = logs.query(project_id=project_id,\n                                resource_type=resource_type,\n                                log_name=self.log_id,\n                                filter_str=self.filter_log)\n\n  def _mk_filter(self, logid) -> str:\n    combined_filter = ' OR '.join([f'\"{s}\"' for s in logid])\n    return f'log_id({combined_filter})'\n\n  def get_entries(self, instance_id: str) -> dict:\n    self.instances_with_match = {}\n    raw_entry = None\n    for raw_entry in self.log_query.entries:\n      entry_id = get_path(raw_entry, ('resource', 'labels', 'instance_id'),\n                          default=None)\n      if entry_id == instance_id:\n        self.instances_with_match[instance_id] = raw_entry\n    return self.instances_with_match\n\n\ndef is_cloudsql_peer_network(url: str) -> bool:\n  prefix = 'https://www.googleapis.com/compute/v1/projects'\n  pattern_non_tu = f'{prefix}/speckle-umbrella.*/cloud-sql-network-.*'\n  pattern_tu = f'{prefix}/.*-tp/servicenetworking'\n  return re.match(pattern_non_tu, url) is not None or \\\n         re.match(pattern_tu, url) is not None\n\n\ndef is_serial_port_one_logs_available(context: models.Context):\n  return (apis.is_enabled(context.project_id, 'logging') and \\\n    gce.is_project_serial_port_logging_enabled(context.project_id)) or \\\n    gce.is_serial_port_buffer_enabled()\n"
  },
  {
    "path": "gcpdiag/lint/gce/utils_test.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Test utility functions for GCE linters.\"\"\"\n\nfrom collections import deque\nfrom unittest.mock import PropertyMock, patch\n\nfrom gcpdiag import config, models\nfrom gcpdiag.lint.gce.utils import SerialOutputSearch\nfrom gcpdiag.queries import logs\nfrom gcpdiag.queries.gce import SerialOutputQuery, SerialPortOutput\n\n\nclass TestUtils:\n  \"\"\"Test for GCE lint Util\"\"\"\n  context = models.Context(project_id='x')\n  cl_logs = [{\n      'resource': {\n          'labels': {\n              'instance_id': '1'\n          },\n      },\n      'textPayload': 'entry_one',\n      'receiveTimestamp': '2022-03-24T13:26:37.370862686Z'\n  }, {\n      'resource': {\n          'labels': {\n              'instance_id': '1'\n          },\n      },\n      'textPayload': 'entry_x',\n      'receiveTimestamp': '2022-03-25T13:26:37.370862686Z'\n  }]\n\n  serial_logs: deque = deque()\n  serial_logs.appendleft(SerialPortOutput('x', '1', ['entry_one', 'entry_x']))\n  serial_logs.appendleft(SerialPortOutput('x', '2', ['entry_x', 'entry_two']))\n\n  @patch.object(SerialOutputQuery,\n                'entries',\n                new_callable=PropertyMock,\n                return_value=serial_logs)\n  @patch.object(logs.LogsQuery,\n                'entries',\n                new_callable=PropertyMock,\n                return_value=cl_logs)\n  def test_query_order_with_buffer_enabled(self, mock_logs_query_entries,\n                                           mock_serial_output_query_entries):\n\n    # Test when customer has provided the `--enable_gce_serial_buffer` flag\n    config.init({'enable_gce_serial_buffer': True}, 'x')\n    search = SerialOutputSearch(context=self.context,\n                                search_strings=['entry_one', 'entry_two'])\n    entry = search.get_last_match('1')\n    assert entry.text == 'entry_one'\n    entry = search.get_last_match('2')\n    assert entry.text == 'entry_two'\n    assert entry.timestamp is None\n    assert entry.timestamp_iso is None\n    #instance doesn't have any serial output and not cloud logging entry\n    entry = search.get_last_match('3')\n    assert entry is None\n    # When cloud logging doesn't have the entry direct outputs should be checked\n    assert mock_logs_query_entries.called\n    # Check that serial logs entries where check with the buffer enabled.\n    assert mock_serial_output_query_entries.called\n\n  # Patch the `entries()` method of `LogsQuery` and `SerialOutputQuery`.\n  @patch.object(SerialOutputQuery,\n                'entries',\n                new_callable=PropertyMock,\n                return_value=serial_logs)\n  @patch.object(logs.LogsQuery,\n                'entries',\n                new_callable=PropertyMock,\n                return_value=cl_logs)\n  def test_query_order_buffer_disabled(self, mock_logs_query_entries,\n                                       mock_serial_output_query_entries):\n    # `--enable_gce_serial_buffer` not provided\n    config.init({'enable_gce_serial_buffer': False}, 'x')\n    search = SerialOutputSearch(context=self.context,\n                                search_strings=['entry_one', 'entry_two'])\n    search.query.entries = self.cl_logs\n    # Check that serial logs are not fetched if the buffer is not enabled.\n    # With the default config, `enable_gce_serial_buffer` is `False`.\n    # There are logs in cloud logging so should use that\n    entry = search.get_last_match('1')\n    assert entry.text == 'entry_one'\n    assert entry.timestamp == logs.log_entry_timestamp(self.cl_logs[0])\n\n    entry = search.get_last_match('2')\n    assert entry is None\n    #instance doesn't have any serial output and not cloud logging entry\n    entry = search.get_last_match('3')\n    assert entry is None\n\n    assert mock_logs_query_entries.called\n    #serial entries should not be fetched.\n    assert not mock_serial_output_query_entries.called\n\n\ndef test_is_serial_logs_available():\n  config.init({'enable_gce_serial_buffer': False}, 'x')\n"
  },
  {
    "path": "gcpdiag/lint/gce/warn_2021_001_logging_perm.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"GCE VM Instance Access Scope, GCE VM Attached Service Account Permissions \\\nand APIs Required for Logging.\n\nA GCP project should have Cloud Logging API enabled.\nThe service account attached to the GCE VM instances should have the\nlogging.logWriter IAM role permission.\nAlso, a GCE instance should have the logging.write access scope.\nWithout these, Ops Agent won't be able to collect logs from GCE VMs and\ndisplay on Logs Explorer.\n\"\"\"\n\nimport operator as op\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, gce, iam\n\nROLE = 'roles/logging.logWriter'\nLOGGING_SCOPES = [\n    'https://www.googleapis.com/auth/cloud-platform',\n    'https://www.googleapis.com/auth/logging.admin',\n    'https://www.googleapis.com/auth/logging.write',\n]\nENABLE_LOGGING_API_PROMOT = \"\"\"Please \\\nenable Cloud Logging API on the project with the command: \\n\\\ngcloud services enable logging.googleapis.com --project=%s\\n\\\nOps Agent requires the API to collect \\\nlogs from GCE VMs and display on Logs Explorer\"\"\"\n\nVM_NO_LOGGING_SCOPE = \"\"\"Follow \\\nhttps://cloud.google.com/compute/docs/instances/change-service-account\\\n#changeserviceaccountandscopes\\nto enable logging.write VM Access Scope.\"\"\"\n\nSA_NO_LOGS_WRITER = \"\"\"Follow \\\nhttps://cloud.google.com/logging/docs/access-control#grant-roles\\n\\\nto grant roles/logging.logWriter to the VM attached Service Account %s\"\"\"\n\nVM_NO_SA = \"\"\"Follow \\\nhttps://cloud.google.com/compute/docs/instances/change-service-account\\n\\\nto attach a Service Account to the VM %s.\"\"\"\n\n\ndef prefetch_rule(context: models.Context):\n  # Make sure that we have the IAM policy in cache.\n  project_ids = {i.project_id for i in gce.get_instances(context).values()}\n  for pid in project_ids:\n    iam.get_project_policy(context.copy_with(project_id=pid))\n  crm.get_project(context.project_id)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_failed(\n        crm.get_project(context.project_id),\n        ENABLE_LOGGING_API_PROMOT % (context.project_id),\n        'Cloud Logging API Not Enabled on project %s' % (context.project_id),\n    )\n    return\n\n  instances = gce.get_instances(context)\n  if not instances:\n    report.add_skipped(\n        None, '', f'No VM instances found in project: {context.project_id}.')\n    return\n\n  for i in sorted(instances.values(),\n                  key=op.attrgetter('project_id', 'full_path')):\n    # GKE nodes are checked by another test.\n    if i.is_gke_node():\n      continue\n\n    sa = i.service_account\n    if not sa:\n      report.add_failed(i, VM_NO_SA % (i.name),\n                        'VM does not have a Service Account attached')\n      continue\n\n    has_scope = set(LOGGING_SCOPES) & set(i.access_scopes)\n    if not has_scope:\n      report.add_failed(\n          i,\n          VM_NO_LOGGING_SCOPE,\n          'VM does not have logging.write Access Scope',\n      )\n      continue\n\n    iam_policy = iam.get_project_policy(\n        context.copy_with(project_id=i.project_id))\n    if not iam_policy.has_role_permissions(f'serviceAccount:{sa}', ROLE):\n      report.add_failed(\n          i,\n          SA_NO_LOGS_WRITER % (sa),\n          'The attached Service Account of the VM does not have the required'\n          ' IAM role: roles/logging.logWriter',\n      )\n      continue\n    report.add_ok(i)\n"
  },
  {
    "path": "gcpdiag/lint/gce/warn_2021_002_disk_latency.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"GCE nodes have good disk performance.\n\nVerify that the persistent disks used by the GCE instances provide a \"good\"\nperformance, where good is defined to be less than 100ms IO queue time. If it's\nmore than that, it probably means that the instance would benefit from a faster\ndisk (changing the type or making it larger).\n\"\"\"\n\nimport operator as op\nfrom typing import Dict\n\nfrom gcpdiag import config, lint, models\nfrom gcpdiag.queries import gce, monitoring\n\nSLO_LATENCY_MS = 100\n# SLO: at least 99.5% of minutes are good (7 minutes in a day)\nSLO_BAD_MINUTES_RATIO = 0.005\n# If we have less than this minutes measured, skip\nSLO_VALID_MINUTES_PER_DAY = 12 * 60\n\n_query_results_per_project_id: Dict[str, monitoring.TimeSeriesCollection] = {}\n\n\ndef prefetch_rule(context: models.Context):\n  # Fetch the metrics for all instances.\n  instances = gce.get_instances(context)\n  if not instances:\n    return\n\n  within_str = 'within %dd, d\\'%s\\'' % (config.get('within_days'),\n                                        monitoring.period_aligned_now(60))\n  _query_results_per_project_id[context.project_id] = \\\n      monitoring.query(\n          context.project_id, f\"\"\"\nfetch gce_instance\n| {{ metric 'agent.googleapis.com/disk/operation_time'\n     | align rate(1m) ;\n     metric 'agent.googleapis.com/disk/operation_count'\n     | align delta(1m) }}\n| {within_str}\n| filter metric.device !~ '.*\\\\\\\\d'\n| join\n| value [val(0)*val(1), val(1)]\n| group_by [resource.instance_id], [sum(val(0)), sum(val(1))]\n| value [val(0)/val(1)]\n| every 1m\n| value(val() > cast_units({SLO_LATENCY_MS}, \"ms/s\"))\n| group_by 1d, [ .count_true, .count ]\n  \"\"\")\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  instances = gce.get_instances(context)\n  if not instances:\n    report.add_skipped(None, 'no instances found')\n    return\n\n  for i in sorted(instances.values(),\n                  key=op.attrgetter('project_id', 'full_path')):\n    ts_key = frozenset({f'resource.instance_id:{i.id}'})\n    try:\n      ts = _query_results_per_project_id[context.project_id][ts_key]\n    except KeyError:\n      report.add_skipped(i, 'no data')\n      continue\n\n    # Did we miss the SLO on any day?\n    # note: we don't calculate the SLO for the whole \"WITHIN_DAYS\" period\n    # because otherwise you would get different results depending on how that\n    # period is defined.\n    total_minutes_bad = 0\n    total_minutes = 0\n    slo_missed = 0\n    slo_valid = 0\n    for day_value in ts['values']:\n      total_minutes_bad += day_value[0]\n      total_minutes += day_value[1]\n      if day_value[1] >= SLO_VALID_MINUTES_PER_DAY:\n        slo_valid = 1\n        if day_value[0] / day_value[1] > SLO_BAD_MINUTES_RATIO:\n          slo_missed = 1\n    if slo_missed:\n      report.add_failed(\n          i, f'disk latency >{SLO_LATENCY_MS}ms during {total_minutes_bad} ' +\n          f'out of {total_minutes} minutes')\n    elif not slo_valid:\n      report.add_skipped(i, 'not enough data')\n    else:\n      report.add_ok(i)\n"
  },
  {
    "path": "gcpdiag/lint/gce/warn_2021_003_monitoring_permissions.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GCE VM Instance Access Scope, GCE VM Attached Service Account Permissions \\\nand APIs Required for Monitoring.\n\nA GCP project should have Cloud Monitoring API enabled.\nThe service account attached to the GCE VM instances should have the\nmonitoring.metricWriter IAM role permission.\nAlso, a GCE instance should have the monitoring.write access scope.\nWithout these, Ops Agent won't be able to collect metrics from GCE VMs and\ndisplay on Metrics Explorer.\n\"\"\"\n\nimport operator as op\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, gce, iam\n\nROLE = 'roles/monitoring.metricWriter'\nMONITORING_SCOPES = [\n    'https://www.googleapis.com/auth/cloud-platform',\n    'https://www.googleapis.com/auth/monitoring',\n    'https://www.googleapis.com/auth/monitoring.write',\n]\n\nENABLE_MONITORING_API_PROMOT = (\n    \"\"\"Please enable Cloud Monitoring API on the project with the command:\\\n\\ngcloud services enable monitoring.googleapis.com --project=%s\\nOps \\\nAgent requires the API to collect metrics from GCE VMs and display on \\\nMetrics Explorer\"\"\")\nVM_NO_MONITORING_SCOPE = \"\"\"Follow \\\nhttps://cloud.google.com/compute/docs/instances/change-service-account\\\n#changeserviceaccountandscopes\\nto enable monitoring.write VM Access Scope.\"\"\"\nSA_NO_METRICS_WRITER = \"\"\"Follow \\\nhttps://cloud.google.com/monitoring/access-control#grant-monitoring-access\\n\\\nto grant roles/monitoring.metricWriter to the VM attached Service Account %s\"\"\"\nVM_NO_SA = \"\"\"Follow \\\nhttps://cloud.google.com/compute/docs/instances/change-service-account\\n\\\nto attach a Service Account to the VM %s.\"\"\"\n\n\ndef prefetch_rule(context: models.Context):\n  # Make sure that we have the IAM policy in cache.\n  project_ids = {i.project_id for i in gce.get_instances(context).values()}\n  for pid in project_ids:\n    iam.get_project_policy(context.copy_with(project_id=pid))\n  crm.get_project(context.project_id)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  if not apis.is_enabled(context.project_id, 'monitoring'):\n    report.add_failed(\n        crm.get_project(context.project_id),\n        ENABLE_MONITORING_API_PROMOT % (context.project_id),\n        'Cloud Monitoring API Not Enabled on project %s' % (context.project_id),\n    )\n    return\n\n  instances = gce.get_instances(context)\n  if not instances:\n    report.add_skipped(\n        None, '', f'No VM instances found in project: {context.project_id}.')\n    return\n\n  for i in sorted(instances.values(),\n                  key=op.attrgetter('project_id', 'full_path')):\n    # GKE nodes are checked by another test.\n    if i.is_gke_node():\n      continue\n\n    sa = i.service_account\n    if not sa:\n      report.add_failed(i, VM_NO_SA % (i.name),\n                        'VM does not have a Service Account attached')\n      continue\n\n    has_scope = set(MONITORING_SCOPES) & set(i.access_scopes)\n    if not has_scope:\n      report.add_failed(\n          i,\n          VM_NO_MONITORING_SCOPE,\n          'VM does not have monitoring.write Access Scope',\n      )\n      continue\n\n    iam_policy = iam.get_project_policy(\n        context.copy_with(project_id=i.project_id))\n    if not iam_policy.has_role_permissions(f'serviceAccount:{sa}', ROLE):\n      report.add_failed(\n          i,\n          SA_NO_METRICS_WRITER % (sa),\n          'The attached Service Account of the VM does not have the required'\n          ' IAM role: roles/monitoring.metricWriter',\n      )\n      continue\n    report.add_ok(i)\n"
  },
  {
    "path": "gcpdiag/lint/gce/warn_2021_004_disk_full_serial_messages.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Serial logs don't contain disk full messages\n\nThe messages:\n\"No space left on device\" / \"I/O error\" / \"No usable temporary directory found\"\nin serial output usually indicate that the disk is full.\n\"\"\"\nfrom typing import Optional\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.lint.gce import utils\nfrom gcpdiag.queries import gce\nfrom gcpdiag.queries.logs import LogEntryShort\n\nNO_SPACE_LEFT_MESSAGES = [\n    'I/O error',  #\n    'No space left on device',\n    'No usable temporary directory found'\n]\n\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = utils.SerialOutputSearch(\n      context, search_strings=NO_SPACE_LEFT_MESSAGES)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # skip entire rule if serial outputs are unavailable\n  if not utils.is_serial_port_one_logs_available(context):\n    report.add_skipped(None, 'serial port output is unavailable')\n    return\n\n  search = logs_by_project[context.project_id]\n\n  instances = gce.get_instances(context).values()\n  if len(instances) == 0:\n    report.add_skipped(None, 'No instances found')\n  else:\n    for instance in sorted(instances, key=lambda i: i.full_path):\n      match: Optional[LogEntryShort] = search.get_last_match(\n          instance_id=instance.id)\n      if match:\n        report.add_failed(instance,\n                          ('There are messages indicating that the disk might'\n                           ' be full in serial output of {}\\n{}: \"{}\"').format(\n                               instance.name, match.timestamp_iso, match.text))\n      else:\n        report.add_ok(instance)\n"
  },
  {
    "path": "gcpdiag/lint/gce/warn_2021_005_out_of_memory.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Serial logs don't contain out-of-memory messages\n\nThe messages:\n\"Out of memory: Kill process\" / \"sacrifice child\" / \"Killed process\" /\n\"Memory cgroup out of memory\" in serial output usually indicate that\na Linux instance is under memory pressure.\n\"\"\"\nfrom typing import Optional\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.lint.gce import utils\nfrom gcpdiag.queries import gce\nfrom gcpdiag.queries.logs import LogEntryShort\n\nOOM_MESSAGES = [\n    'Out of memory: Kill process',  #\n    'sacrifice child',\n    'Killed process',\n    'Memory cgroup out of memory'\n]\n\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = utils.SerialOutputSearch(\n      context, search_strings=OOM_MESSAGES)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # skip entire rule if serial outputs are unavailable\n  if not utils.is_serial_port_one_logs_available(context):\n    report.add_skipped(None, 'serial port output is unavailable')\n    return\n\n  search = logs_by_project[context.project_id]\n\n  instances = gce.get_instances(context).values()\n  if len(instances) == 0:\n    report.add_skipped(None, 'No instances found')\n  else:\n    for instance in sorted(instances, key=lambda i: i.full_path):\n      match: Optional[LogEntryShort] = search.get_last_match(\n          instance_id=instance.id)\n      if match:\n        report.add_failed(instance,\n                          ('There are messages indicating that OS is running'\n                           ' out of memory for {}\\n{}: \"{}\"').format(\n                               instance.name, match.timestamp_iso, match.text))\n      else:\n        report.add_ok(instance)\n"
  },
  {
    "path": "gcpdiag/lint/gce/warn_2021_006_kernel_panic.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Serial logs don't contain \"Kernel panic\" messages\n\nThe \"Kernel panic\" messages in serial output usually indicate that some\nfatal error occurred on a Linux instance.\n\"\"\"\nfrom typing import Optional\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.lint.gce import utils\nfrom gcpdiag.queries import gce\nfrom gcpdiag.queries.logs import LogEntryShort\n\nPANIC_MESSAGES = [\n    'Kernel panic',  #\n]\n\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = utils.SerialOutputSearch(\n      context, search_strings=PANIC_MESSAGES)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # skip entire rule if serial outputs are unavailable\n  if not utils.is_serial_port_one_logs_available(context):\n    report.add_skipped(None, 'serial port output is unavailable')\n    return\n\n  search = logs_by_project[context.project_id]\n\n  instances = gce.get_instances(context).values()\n  if len(instances) == 0:\n    report.add_skipped(None, 'No instances found')\n  else:\n    for instance in sorted(instances, key=lambda i: i.name):\n      match: Optional[LogEntryShort] = search.get_last_match(\n          instance_id=instance.id)\n      if match:\n        report.add_failed(\n            instance, ('There are messages indicating that '\n                       '\"Kernel panic\" event occurred for {}\\n{}: \"{}\"').format(\n                           instance.name, match.timestamp_iso, match.text))\n      else:\n        report.add_ok(instance)\n"
  },
  {
    "path": "gcpdiag/lint/gce/warn_2021_007_bsod.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Serial logs don't contain \"BSOD\" messages\n\nThe messages:\n\"Dumping stack trace\" / \"pvpanic.sys\" in serial output usually indicate that some\nfatal error occurred on a Windows instance.\n\"\"\"\nfrom typing import Optional\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.lint.gce import utils\nfrom gcpdiag.queries import gce\nfrom gcpdiag.queries.logs import LogEntryShort\n\nPANIC_MESSAGES = [\n    'Dumping stack trace',  #\n    'pvpanic.sys'\n]\n\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = utils.SerialOutputSearch(\n      context, search_strings=PANIC_MESSAGES)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # skip entire rule if serial outputs are unavailable\n  if not utils.is_serial_port_one_logs_available(context):\n    report.add_skipped(None, 'serial port output is unavailable')\n    return\n\n  search = logs_by_project[context.project_id]\n\n  instances = gce.get_instances(context).values()\n  if len(instances) == 0:\n    report.add_skipped(None, 'No instances found')\n  else:\n    for instance in sorted(instances, key=lambda i: i.name):\n      match: Optional[LogEntryShort] = search.get_last_match(\n          instance_id=instance.id)\n      if match:\n        report.add_failed(instance,\n                          ('There are messages indicating that '\n                           '\"BSOD\" event occurred for {}\\n{}: \"{}\"').format(\n                               instance.name, match.timestamp_iso, match.text))\n      else:\n        report.add_ok(instance)\n"
  },
  {
    "path": "gcpdiag/lint/gce/warn_2022_001_iap_tcp_forwarding.py",
    "content": "#\n# Copyright 2022 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GCE connectivity: IAP service can connect to SSH/RDP port on instances.\n\nTraffic from the IP range 35.235.240.0/20 to VM instances is necessary for\nIAP TCP forwarding to establish an encrypted tunnel over which you can forward\nSSH, RDP traffic to VM instances.\n\"\"\"\nimport ipaddress\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gce\n\nVERIFY_PORTS = {  #\n    'ssh': 22,\n    'rdp': 3389\n}\n\nIAP_SOURCE_NETWORK = ipaddress.ip_network('35.235.240.0/20')\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  instances = gce.get_instances(context).values()\n  if len(instances) == 0:\n    report.add_skipped(None, 'No instances found')\n  else:\n    for instance in sorted(instances, key=lambda i: i.full_path):\n      if instance.is_dataproc_instance():\n        report.add_skipped(instance, 'skipped dataproc vm instance')\n        continue\n      network = instance.network\n      port = VERIFY_PORTS['ssh']\n      if instance.is_windows_machine():\n        port = VERIFY_PORTS['rdp']\n      result = network.firewall.check_connectivity_ingress(\n          src_ip=IAP_SOURCE_NETWORK,\n          ip_protocol='tcp',\n          port=port,\n          target_service_account=instance.service_account,\n          target_tags=instance.tags)\n      if result.action == 'deny':\n        report.add_failed(\n            instance,\n            (f'connections from {IAP_SOURCE_NETWORK} to tcp:{port} blocked by '\n             f'{result.matched_by_str} (instance: {instance.name})'))\n      else:\n        report.add_ok(instance)\n"
  },
  {
    "path": "gcpdiag/lint/gce/warn_2022_002_duplicated_named_ports.py",
    "content": "#\n# Copyright 2022 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Instance groups named ports are using unique names.\n\nNamed ports are key-value pairs that represent a port's name and number.\nIt is recommended to use unique port name for the same application, so that\nbackend service can only forward traffic to one named port at a time.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gce\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  groups = gce.get_instance_groups(context).values()\n  if len(groups) == 0:\n    report.add_skipped(None, 'No instance groups found')\n  for g in sorted(groups):\n    if g.has_named_ports():\n      names = [n['name'] for n in g.named_ports]\n      if len(names) > len(set(names)):\n        report.add_failed(\n            g, 'Instance group contains multiple ports with the same name')\n      else:\n        report.add_ok(g)\n    else:\n      report.add_ok(g)\n"
  },
  {
    "path": "gcpdiag/lint/gce/warn_2022_003_vm_instances_quota.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GCE VM instances quota is not near the limit.\n\nVM instances quota is a regional quota and limits the number of VM instances\nthat can exist in a given region.\n\nRule will start failing if quota usage will be higher then configured threshold (80%).\n\"\"\"\n\nfrom typing import Dict\n\nfrom gcpdiag import config, lint, models\nfrom gcpdiag.queries import gce, monitoring, quotas\n\nGCE_SERVICE_NAME = 'compute.googleapis.com'\n# name of the quota limit\nQUOTA_LIMIT_NAME = 'INSTANCES-per-project-region'\n# name of the quota metric\nQUOTA_METRIC_NAME = 'compute.googleapis.com/instances'\n# percentage of the quota limit usage\nQUOTA_LIMIT_THRESHOLD = 0.80\n\n_query_results_per_project_id: Dict[str, monitoring.TimeSeriesCollection] = {}\n\n\ndef prefetch_rule(context: models.Context):\n  # fetch the metrics if we have any instances\n  regions_with_instances = gce.get_regions_with_instances(context)\n  if not regions_with_instances:\n    return\n\n  params = {\n      'service_name': GCE_SERVICE_NAME,\n      'limit_name': QUOTA_LIMIT_NAME,\n      'within_days': config.get('within_days')\n  }\n\n  _query_results_per_project_id[context.project_id] = \\\n      monitoring.query(\n          context.project_id,\n          quotas.CONSUMER_QUOTA_QUERY_TEMPLATE.format_map(params))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  regions_with_instances = gce.get_regions_with_instances(context)\n  if not regions_with_instances:\n    report.add_skipped(None, 'no instances found')\n    return\n\n  for region in sorted(regions_with_instances, key=lambda r: r.name):\n    ts_key = frozenset({\n        f'resource.project_id:{context.project_id}',\n        f'metric.quota_metric:{QUOTA_METRIC_NAME}',\n        f'resource.location:{region.name}'\n    })\n    try:\n      ts = _query_results_per_project_id[context.project_id][ts_key]\n    except KeyError:\n      report.add_skipped(region, 'no data')\n      continue\n\n    # did we exceeded threshold on any day?\n    exceeded = False\n    for day_value in ts['values']:\n      ratio = day_value[0]\n      limit = day_value[1]\n      if ratio > QUOTA_LIMIT_THRESHOLD:\n        exceeded = True\n\n    if exceeded:\n      report.add_failed(region,\n                        (f'Region has reached {ratio:.0%} of {limit} limit:\\n'\n                         f' quota limit: {QUOTA_LIMIT_NAME}\\n'\n                         f' quota metric: {QUOTA_METRIC_NAME}'))\n    else:\n      report.add_ok(region)\n"
  },
  {
    "path": "gcpdiag/lint/gce/warn_2022_004_docker_bridge_network.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Cloud SQL Docker bridge network should be avoided.\n\nThe IP range 172.17.0.0/16 is reserved for the Docker bridge network.\nConnections from any IP within that range to Cloud SQL instances using private\nIP fail.\n\"\"\"\n\nimport ipaddress\nimport operator as op\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.lint.gce import utils\nfrom gcpdiag.queries import apis, gce, network\n\nDOCKER_BRIDGE_NETWORK = ipaddress.ip_network('172.17.0.0/16')\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  if not apis.is_enabled(context.project_id, 'compute'):\n    report.add_skipped(None, 'compute API is disabled')\n    return\n\n  instances = gce.get_instances(context)\n\n  if not instances:\n    report.add_skipped(None, 'no instances found')\n    return\n\n  cloudsql_peered_networks = {}\n\n  for vpc in network.get_networks(context):\n    if any(utils.is_cloudsql_peer_network(peer.url) for peer in vpc.peerings):\n      cloudsql_peered_networks[vpc.self_link] = vpc\n\n  if not cloudsql_peered_networks:\n    report.add_skipped(None, 'no Cloud SQL peered vpc found')\n    return\n\n  for instance in sorted(instances.values(),\n                         key=op.attrgetter('project_id', 'name')):\n    if instance.network.self_link not in cloudsql_peered_networks:\n      continue\n\n    if any(_is_docker_bridge_ip(ip) for ip in instance.network_ips):\n      report.add_failed(instance,\n                        f'{instance.name} is inside of Docker bridge network')\n    else:\n      report.add_ok(instance)\n\n\ndef _is_docker_bridge_ip(ip: ipaddress.IPv4Address) -> bool:\n  return ip in DOCKER_BRIDGE_NETWORK\n"
  },
  {
    "path": "gcpdiag/lint/gce/warn_2022_005_cpu_quota.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GCE CPU quota is not near the limit.\n\nCPU quota is a regional quota and limits the number of CPU\nthat can exist in a given region.\n\nRule will start failing if quota usage will be higher then configured threshold (80%).\n\"\"\"\n\nfrom typing import Dict\n\nfrom gcpdiag import config, lint, models\nfrom gcpdiag.queries import gce, monitoring, quotas\n\nGCE_SERVICE_NAME = 'compute.googleapis.com'\n# name of the quota limit\nQUOTA_LIMIT_NAME = '.*CPUS-per-project-region'\n# name of the quota metric\nQUOTA_METRIC_NAMES = (\n    'compute.googleapis.com/cpus',\n    'compute.googleapis.com/n2_cpus',\n    'compute.googleapis.com/n2d_cpus',\n    'compute.googleapis.com/m1_cpus',\n    'compute.googleapis.com/m2_cpus',\n    'compute.googleapis.com/c2_cpus',\n    'compute.googleapis.com/a2_cpus',\n    'compute.googleapis.com/c2d_cpus',\n    'compute.googleapis.com/n2d_cpus',\n    'compute.googleapis.com/t2d_cpus',\n)\n# percentage of the quota limit usage\nQUOTA_LIMIT_THRESHOLD = 0.80\n_query_results_per_project_id: Dict[str, monitoring.TimeSeriesCollection] = {}\n\n\ndef prefetch_rule(context: models.Context):\n\n  # fetch the metrics if we have any instances\n  regions_with_instances = gce.get_regions_with_instances(context)\n  if not regions_with_instances:\n    return\n\n  params = {\n      'service_name': GCE_SERVICE_NAME,\n      'limit_name': QUOTA_LIMIT_NAME,\n      'within_days': config.get('within_days')\n  }\n\n  _query_results_per_project_id[context.project_id] = \\\n      monitoring.query(\n          context.project_id,\n          quotas.CONSUMER_QUOTA_QUERY_TEMPLATE.format_map(params))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  regions_with_instances = gce.get_regions_with_instances(context)\n  if not regions_with_instances:\n    report.add_skipped(None, 'no instances found')\n    return\n\n  for region in sorted(regions_with_instances, key=lambda r: r.name):\n    all_skipped = True\n    for quota_metric_name in QUOTA_METRIC_NAMES:\n\n      ts_key = frozenset({\n          f'resource.project_id:{context.project_id}',\n          f'metric.quota_metric:{quota_metric_name}',\n          f'resource.location:{region.name}'\n      })\n      try:\n        ts = _query_results_per_project_id[context.project_id][ts_key]\n        all_skipped = False\n      except KeyError:\n        # silently skip\n        continue\n\n      # did we exceeded threshold on any day?\n      exceeded = False\n      for day_value in ts['values']:\n        ratio = day_value[0]\n        limit = day_value[1]\n        if ratio > QUOTA_LIMIT_THRESHOLD:\n          exceeded = True\n\n      if exceeded:\n        report.add_failed(region,\n                          (f'Region has reached {ratio:.0%} of {limit} limit:\\n'\n                           f' quota metric: {quota_metric_name}'))\n      else:\n        report.add_ok(region)\n\n    # report skip if all data for region not available\n    if all_skipped:\n      report.add_skipped(region, 'no data')\n"
  },
  {
    "path": "gcpdiag/lint/gce/warn_2022_006_gpu_quota.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GCE GPU quota is not near the limit.\n\nGPU quota is a regional quota and limits the number of GPU\nthat can exist in a given region.\n\nRule will start failing if quota usage will be higher then configured threshold (80%).\n\"\"\"\n\nfrom typing import Dict\n\nfrom gcpdiag import config, lint, models\nfrom gcpdiag.queries import gce, monitoring, quotas\n\nGCE_SERVICE_NAME = 'compute.googleapis.com'\n# name of the quota limit\nQUOTA_LIMIT_NAME = '.*GPUS-per-project-region'\n# name of the quota metric\nQUOTA_METRIC_NAMES = (\n    'compute.googleapis.com/nvidia_k80_gpus',\n    'compute.googleapis.com/nvidia_p100_gpus',\n    'compute.googleapis.com/nvidia_a100_gpus',\n    'compute.googleapis.com/nvidia_p4_gpus',\n    'compute.googleapis.com/nvidia_t4_gpus',\n    'compute.googleapis.com/nvidia_v100_gpus',\n)\n# percentage of the quota limit usage\nQUOTA_LIMIT_THRESHOLD = 0.80\n_query_results_per_project_id: Dict[str, monitoring.TimeSeriesCollection] = {}\n\n\ndef prefetch_rule(context: models.Context):\n\n  # fetch the metrics if we have any instances\n  regions_with_instances = gce.get_regions_with_instances(context)\n  if not regions_with_instances:\n    return\n\n  params = {\n      'service_name': GCE_SERVICE_NAME,\n      'limit_name': QUOTA_LIMIT_NAME,\n      'within_days': config.get('within_days')\n  }\n\n  _query_results_per_project_id[context.project_id] = \\\n      monitoring.query(\n          context.project_id,\n          quotas.CONSUMER_QUOTA_QUERY_TEMPLATE.format_map(params))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  regions_with_instances = gce.get_regions_with_instances(context)\n  if not regions_with_instances:\n    report.add_skipped(None, 'no instances found')\n    return\n\n  for region in sorted(regions_with_instances, key=lambda r: r.name):\n    all_skipped = True\n    for quota_metric_name in QUOTA_METRIC_NAMES:\n\n      ts_key = frozenset({\n          f'resource.project_id:{context.project_id}',\n          f'metric.quota_metric:{quota_metric_name}',\n          f'resource.location:{region.name}'\n      })\n      try:\n        ts = _query_results_per_project_id[context.project_id][ts_key]\n        all_skipped = False\n      except KeyError:\n        # silently skip\n        continue\n\n      # did we exceeded threshold on any day?\n      exceeded = False\n      for day_value in ts['values']:\n        ratio = day_value[0]\n        limit = day_value[1]\n        if ratio > QUOTA_LIMIT_THRESHOLD:\n          exceeded = True\n\n      if exceeded:\n        report.add_failed(region,\n                          (f'Region has reached {ratio:.0%} of {limit} limit:\\n'\n                           f' quota metric: {quota_metric_name}'))\n      else:\n        report.add_ok(region)\n\n    # report skip if all data for region not available\n    if all_skipped:\n      report.add_skipped(region, 'no data')\n"
  },
  {
    "path": "gcpdiag/lint/gce/warn_2022_007_cloudsql_admin_scope.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Compute Engine VM has the proper scope to connect using the Cloud SQL Admin API\n\nThe service account used by Compute Engine VM should have permission\n(roles/cloudsql.client) to connect to the Cloud SQL using the Cloud SQL Admin\nAPI, otherwise connection won't work.\n\"\"\"\n\nimport operator as op\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.lint.gce import utils\nfrom gcpdiag.queries import apis, gce, iam, network\n\nROLE = 'roles/cloudsql.client'\nCLOUDSQL_ADMIN_SCOPES = [\n    'https://www.googleapis.com/auth/cloud-platform',\n    'https://www.googleapis.com/auth/sqlservice.admin'\n]\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  if not apis.is_enabled(context.project_id, 'compute'):\n    report.add_skipped(None, 'compute API is disabled')\n    return\n\n  instances = gce.get_instances(context)\n\n  if not instances:\n    report.add_skipped(None, 'no instances found')\n    return\n\n  cloudsql_peered_networks = {}\n\n  for vpc in network.get_networks(context):\n    if any(utils.is_cloudsql_peer_network(peer.url) for peer in vpc.peerings):\n      cloudsql_peered_networks[vpc.self_link] = vpc\n\n  if not cloudsql_peered_networks:\n    report.add_skipped(None, 'no Cloud SQL peered vpc found')\n    return\n\n  for instance in sorted(instances.values(),\n                         key=op.attrgetter('project_id', 'name')):\n    if instance.network.self_link not in cloudsql_peered_networks:\n      continue\n\n    iam_policy = iam.get_project_policy(instance.project_id)\n    service_account = instance.service_account\n    has_scope = set(CLOUDSQL_ADMIN_SCOPES) & set(instance.access_scopes)\n\n    message = []\n\n    if not has_scope:\n      message.append('missing scope: sqlservice.admin')\n\n    if not service_account:\n      message.append('no service account')\n    elif not iam_policy.has_role_permissions(\n        f'serviceAccount:{service_account}', ROLE):\n      message.append(\n          f'service_account: {service_account}\\nmissing role: {ROLE}')\n\n    if message:\n      report.add_failed(instance, '\\n'.join(message))\n    else:\n      report.add_ok(instance)\n"
  },
  {
    "path": "gcpdiag/lint/gce/warn_2022_008_ip_address_quota.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GCE External IP addresses quota is not near the limit.\n\nRegional IP quota is for assigning IPv4 addresses to VMs in that region.\nGlobal IP quota is for assigning IPv4 addresses to global networking resources\nsuch as load balancers.\n\nRule will start failing if quota usage will be higher then configured threshold (80%).\n\"\"\"\n\nfrom typing import Dict\n\nfrom gcpdiag import config, lint, models\nfrom gcpdiag.queries import gce, monitoring, quotas\n\nGCE_SERVICE_NAME = 'compute.googleapis.com'\n# name of the quota limit\nQUOTA_LIMIT_NAME = '.*-ADDRESSES-per-project.*'\n# name of the quota metric\nQUOTA_METRIC_NAMES = (\n    'compute.googleapis.com/regional_in_use_addresses',\n    'compute.googleapis.com/global_in_use_addresses',\n    'compute.googleapis.com/regional_static_addresses',\n    'compute.googleapis.com/global_static_addresses',\n    'compute.googleapis.com/regional_static_byoip_addresses',\n    'compute.googleapis.com/global_static_byoip_addresses',\n)\n# percentage of the quota limit usage\nQUOTA_LIMIT_THRESHOLD = 0.80\n_query_results_per_project_id: Dict[str, monitoring.TimeSeriesCollection] = {}\n\n\ndef prefetch_rule(context: models.Context):\n\n  # fetch the metrics if we have any instances\n  regions_with_instances = gce.get_regions_with_instances(context)\n  if not regions_with_instances:\n    return\n\n  params = {\n      'service_name': GCE_SERVICE_NAME,\n      'limit_name': QUOTA_LIMIT_NAME,\n      'within_days': config.get('within_days')\n  }\n\n  _query_results_per_project_id[context.project_id] = \\\n      monitoring.query(\n          context.project_id,\n          quotas.CONSUMER_QUOTA_QUERY_TEMPLATE.format_map(params))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  regions_with_instances = gce.get_regions_with_instances(context)\n  if not regions_with_instances:\n    report.add_skipped(None, 'no instances found')\n    return\n\n  for region in sorted(regions_with_instances, key=lambda r: r.name):\n    all_skipped = True\n    for quota_metric_name in QUOTA_METRIC_NAMES:\n\n      ts_key = frozenset({\n          f'resource.project_id:{context.project_id}',\n          f'metric.quota_metric:{quota_metric_name}',\n          f'resource.location:{region.name}'\n      })\n      try:\n        ts = _query_results_per_project_id[context.project_id][ts_key]\n        all_skipped = False\n      except KeyError:\n        # silently skip\n        continue\n\n      # did we exceeded threshold on any day?\n      exceeded = False\n      for day_value in ts['values']:\n        ratio = day_value[0]\n        limit = day_value[1]\n        if ratio > QUOTA_LIMIT_THRESHOLD:\n          exceeded = True\n\n      if exceeded:\n        report.add_failed(region,\n                          (f'Region has reached {ratio:.0%} of {limit} limit:\\n'\n                           f' quota metric: {quota_metric_name}'))\n      else:\n        report.add_ok(region)\n\n    # report skip if all data for region not available\n    if all_skipped:\n      report.add_skipped(region, 'no data')\n"
  },
  {
    "path": "gcpdiag/lint/gce/warn_2022_009_disk_quota.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GCE disk quota is not near the limit.\n\nThe following persistent disk and local SSD quotas apply on a per-region basis:\n- Local SSD (GB)\n- Persistent disk standard (GB)\n- Persistent disk SSD (GB)\n\nRule will start failing if quota usage will be higher then configured threshold (80%).\n\"\"\"\n\nfrom typing import Dict\n\nfrom gcpdiag import config, lint, models\nfrom gcpdiag.queries import gce, monitoring, quotas\n\nGCE_SERVICE_NAME = 'compute.googleapis.com'\n# name of the quota limit\nQUOTA_LIMIT_NAME = '.*-TOTAL-GB-per-project-region.*'\n# name of the quota metric\nQUOTA_METRIC_NAMES = (\n    'compute.googleapis.com/local_ssd_total_storage',\n    'compute.googleapis.com/disks_total_storage',\n    'compute.googleapis.com/ssd_total_storage',\n)\n# percentage of the quota limit usage\nQUOTA_LIMIT_THRESHOLD = 0.80\n_query_results_per_project_id: Dict[str, monitoring.TimeSeriesCollection] = {}\n\n\ndef prefetch_rule(context: models.Context):\n\n  # fetch the metrics if we have any instances\n  regions_with_instances = gce.get_regions_with_instances(context)\n  if not regions_with_instances:\n    return\n\n  params = {\n      'service_name': GCE_SERVICE_NAME,\n      'limit_name': QUOTA_LIMIT_NAME,\n      'within_days': config.get('within_days')\n  }\n\n  _query_results_per_project_id[context.project_id] = \\\n      monitoring.query(\n          context.project_id,\n          quotas.CONSUMER_QUOTA_QUERY_TEMPLATE.format_map(params))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  regions_with_instances = gce.get_regions_with_instances(context)\n  if not regions_with_instances:\n    report.add_skipped(None, 'no instances found')\n    return\n\n  for region in sorted(regions_with_instances, key=lambda r: r.name):\n    all_skipped = True\n    for quota_metric_name in QUOTA_METRIC_NAMES:\n\n      ts_key = frozenset({\n          f'resource.project_id:{context.project_id}',\n          f'metric.quota_metric:{quota_metric_name}',\n          f'resource.location:{region.name}'\n      })\n      try:\n        ts = _query_results_per_project_id[context.project_id][ts_key]\n        all_skipped = False\n      except KeyError:\n        # silently skip\n        continue\n\n      # did we exceeded threshold on any day?\n      exceeded = False\n      for day_value in ts['values']:\n        ratio = day_value[0]\n        limit = day_value[1]\n        if ratio > QUOTA_LIMIT_THRESHOLD:\n          exceeded = True\n\n      if exceeded:\n        report.add_failed(region,\n                          (f'Region has reached {ratio:.0%} of {limit} limit:\\n'\n                           f' quota metric: {quota_metric_name}'))\n      else:\n        report.add_ok(region)\n\n    # report skip if all data for region not available\n    if all_skipped:\n      report.add_skipped(region, 'no data')\n"
  },
  {
    "path": "gcpdiag/lint/gce/warn_2022_010_resource_availability.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"GCE has enough resources available to fulfill requests\n\nResource availability errors can occur when using GCE resource on demand and a zone\ncannot accommodate your request due to resource exhaustion for the specific VM configuration\n\nConsider trying your request in other zones, requesting again with\na different VM hardware configuration or at a later time.\nFor more information, see the troubleshooting documentation.\n\"\"\"\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nMETHOD_NAME_MATCH = 'compute.instances.'\nSTOCKOUT_MESSAGE = 'ZONE_RESOURCE_POOL_EXHAUSTED'\nRESOURCE_EXHAUSTED = 'resource pool exhausted'\nINSUFFICIENT_RESOURCES = 'does not have enough resources available'\nLOG_FILTER = (\n    '(protoPayload.methodName =~ \"compute.instances.*insert\" OR'\n    ' protoPayload.methodName = \"compute.instances.resume\") AND'\n    f' (protoPayload.status.message:\"{STOCKOUT_MESSAGE}\" OR'\n    f' protoPayload.status.message:\"{INSUFFICIENT_RESOURCES}\" OR'\n    f' protoPayload.status.message:\"{RESOURCE_EXHAUSTED}\") AND severity=ERROR')\n\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='gce_instance',\n      log_name='log_id(\"cloudaudit.googleapis.com/activity\")',\n      filter_str=LOG_FILTER)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n  # skip entire rule if gce api is disabled\n  if not apis.is_enabled(context.project_id, 'compute'):\n    report.add_skipped(project, 'compute api is disabled')\n    return\n\n  # skip entire rule if logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'logging api is disabled')\n    return\n\n  # To hold affected zones\n  stockout_zones = set()\n  if logs_by_project.get(context.project_id) and \\\n     logs_by_project[context.project_id].entries:\n    for entry in logs_by_project[context.project_id].entries:\n\n      msg = get_path(entry, ('protoPayload', 'status', 'message'), default='')\n      method = get_path(entry, ('protoPayload', 'methodName'), default='')\n\n      if (entry['severity'] == 'ERROR' and\n          METHOD_NAME_MATCH in method) and (STOCKOUT_MESSAGE in msg or\n                                            INSUFFICIENT_RESOURCES in msg or\n                                            RESOURCE_EXHAUSTED in msg):\n        zone = get_path(entry, ('resource', 'labels', 'zone'), default='')\n        if zone:\n          stockout_zones.add(zone)\n\n  if stockout_zones:\n    report.add_failed(project,\n                      f'Resource exhaustion in zones: {stockout_zones}')\n  else:\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/gce/warn_2022_011_valid_sa.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GCE VM service account is valid\n\nDisabling or deleting the service account used by a GCE VM will results in\nauthentication issues for gcloud components and dependent apps.\nRestore/enable the service account use by the VM.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gce, iam\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # Find all instances which match the context.\n  instances = gce.get_instances(context).values()\n  gke_node_counter = 0\n\n  if not instances:\n    report.add_skipped(None, 'No instances found')\n    return\n\n  for instance in sorted(instances, key=lambda i: i.full_path):\n    if instance.is_gke_node():\n      gke_node_counter += 1\n      continue\n\n    # Verify instance has a service account as it may be created without one.\n    sa = instance.service_account\n    if sa:\n      # Verify service account exists for VM\n      if not iam.is_service_account_existing(sa, context):\n        report.add_failed(instance,\n                          f'attached service account is deleted: {sa}')\n      elif not iam.is_service_account_enabled(sa, context):\n        report.add_failed(instance,\n                          f'attached service account is disabled: {sa}')\n      else:\n        report.add_ok(instance)\n    else:\n      report.add_skipped(instance, 'instance does not have a service account')\n\n  if gke_node_counter == len(instances):\n    report.add_skipped(None, 'No relevant GCE instances found')\n"
  },
  {
    "path": "gcpdiag/lint/gce/warn_2022_012_windows_kms.py",
    "content": "# Copyright 2022 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"PAYG licensed Windows instance can reach KMS to activate\n\nValidate if a Microsoft Windows instance is able to activate using GCP PAYG license.\n\"\"\"\nimport ipaddress\nimport operator as op\n\nfrom gcpdiag import lint, models, utils\nfrom gcpdiag.queries import gce\n\nKMS_FW_RULE = ipaddress.ip_network('35.190.247.13/32')\nKMS_PORT = 1688\nDEFAULT_FW_RULE = ipaddress.ip_network('0.0.0.0/0')\nNEXT_HOP = 'default-internet-gateway'\nKMS_ROUTE = ipaddress.ip_network('35.190.247.13/32')\n\n\n# verify KMS is accessible for a given route\ndef kms_route_access(instance) -> bool:\n  for route in instance.routes:\n    if route.next_hop_gateway == (\n        f'https://www.googleapis.com/compute/v1/projects/'\n        f'{route.project_id}/global/gateways/{NEXT_HOP}'\n    ) and route.check_route_match(KMS_ROUTE, route.dest_range):\n      return True\n  return False\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n\n  # skip entire rule if no instances\n  instances = gce.get_instances(context).values()\n  if len(instances) == 0:\n    report.add_skipped(None, 'No instances found')\n    return\n\n  # Load gcp non-byol licenses\n  licenses = gce.get_gce_public_licences('windows-cloud')\n  payg_licenses = [x for x in licenses if not x.endswith('-byol')]\n\n  # Add windows to new list and skip entire rule if no Windows instances\n  for instance in sorted(instances,\n                         key=op.attrgetter('project_id', 'full_path')):\n    fault_list = []\n    is_faulty = False\n    # Skip non-Windows machines\n    if not instance.is_windows_machine():\n      continue\n    # Skip BYOL instances\n    if not instance.check_license(payg_licenses):\n      report.add_skipped(instance, 'No PAYG licence attached to this instance')\n      continue\n    # Check for public IP instances\n    if instance.is_public_machine():\n      # Firewall rule check\n      result = instance.network.firewall.check_connectivity_egress(\n          src_ip=KMS_FW_RULE,\n          ip_protocol='tcp',\n          port=KMS_PORT,\n          target_service_account=instance.service_account,\n          target_tags=instance.tags)\n      if result.action == 'deny':\n        # Implied deny is a pass for external IP instances\n        if result.matched_by_str is not None:\n          fault_list.append(\n              f'connections from {KMS_FW_RULE} to tcp:{KMS_PORT} blocked by '\n              f'{result.matched_by_str}')\n          is_faulty = True\n    # Check for private IP instances\n    else:\n      # PGA check\n      for subnetwork in instance.subnetworks:\n        if not subnetwork.is_private_ip_google_access():\n          fault_list.append(\n              f'Subnetwork {subnetwork.name} does not have Private Google Access enabled.'\n          )\n          is_faulty = True\n      # Firewall rule check\n      result = instance.network.firewall.check_connectivity_egress(\n          src_ip=KMS_FW_RULE,\n          ip_protocol='tcp',\n          port=KMS_PORT,\n          target_service_account=instance.service_account,\n          target_tags=instance.tags)\n      if result.action == 'deny':\n        if result.matched_by_str is None:\n          fault_list.append(\n              f'Connectivity to {KMS_FW_RULE} and port tcp:{KMS_PORT} not found '\n              f'in VPC.')\n        else:\n          fault_list.append(\n              f'connections from {KMS_FW_RULE} to tcp:{KMS_PORT} blocked by '\n              f'{result.matched_by_str}.')\n        is_faulty = True\n    # Routes Check\n    if not kms_route_access(instance):\n      fault_list.append(\n          f'Route {KMS_ROUTE} with next hop {NEXT_HOP} not found in VPC.')\n      is_faulty = True\n    if is_faulty:\n      report.add_failed(instance, utils.format_fault_list(fault_list))\n    else:\n      report.add_ok(instance)\n"
  },
  {
    "path": "gcpdiag/lint/gce/warn_2023_001_snapshot_policies_on_unused_disks.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"\nGCE snapshot policies are defined only for used disks.\n\nGCE scheduled snapshot policies are defined only for used disks,\nUnused disks should be backed up using manual snapshots.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import crm, gce\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  disks = gce.get_all_disks(context)\n\n  if not disks:\n    report.add_skipped(None, 'no disks found')\n    return\n  rule_ok = True\n  for d in sorted(disks, key=lambda d: d.full_path):\n    if d.has_snapshot_schedule and not d.in_use:\n      report.add_failed(d)\n      rule_ok = False\n  if rule_ok:\n    project = crm.get_project(context.project_id)\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/gce/warn_2023_002_airflowtask_oom.py",
    "content": "# Copyright 2023 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Serial logs don't contain out-of-memory message due to Airflow task run\n\nSometimes Composer Airflow task might be using more memory and no proper logs\nwill be seen\nin task log. In such cases we can observe out of memory messages in the k8s node\nlog in the following way:\n\"Memory cgroup out of memory: Killed process 123456 (airflow task ru)\".\n\"\"\"\nfrom typing import Optional\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.lint.gce import utils\nfrom gcpdiag.queries import gce\nfrom gcpdiag.queries.logs import LogEntryShort\n\nOOM_MESSAGES = ['(airflow task ru)']\n\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = utils.SerialOutputSearch(\n      context, search_strings=OOM_MESSAGES)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  search = logs_by_project[context.project_id]\n\n  instances = gce.get_instances(context).values()\n  if len(instances) == 0:\n    report.add_skipped(None, 'No instances found')\n  else:\n    for instance in sorted(instances, key=lambda i: i.full_path):\n      match: Optional[LogEntryShort] = search.get_last_match(\n          instance_id=instance.id)\n      if match:\n        report.add_failed(\n            instance,\n            ('There are messages indicating that OS is running'\n             ' out of memory for {}\\n{}: \"{}\" due to Airflow task run').format(\n                 instance.name, match.timestamp_iso, match.text),\n        )\n"
  },
  {
    "path": "gcpdiag/lint/gcf/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/lint/gcf/err_2022_001_missing_cloudfunctions_serviceagent_role.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Cloud Functions service agent has the cloudfunctions.serviceAgent role.\n\nThe Cloud Functions Service Agent is missing the cloudfunctions.serviceAgent role,\nwhich gives Cloud Functions Service Agent access to managed resources.\nYou can resolve this error by granting the cloudfunctions.serviceAgent IAM role\nto service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import crm, gcf, iam\n\nROLE = 'roles/cloudfunctions.serviceAgent'\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  cloudfunctions = gcf.get_cloudfunctions(context)\n  if not cloudfunctions:\n    report.add_skipped(None, f'no functions found {context}')\n    return\n\n  project = crm.get_project(context.project_id)\n  sa_email = f'service-{project.number}@gcf-admin-robot.iam.gserviceaccount.com'\n  iam_policy = iam.get_project_policy(context)\n  if not iam_policy.has_role_permissions(f'serviceAccount:{sa_email}', ROLE):\n    report.add_failed(project,\n                      f'service account: {sa_email}\\nmissing role: {ROLE}')\n  else:\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/gcf/err_2022_002_cloudfunctions_org_policy_violation.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Successful Cloud Function deployments.\n\nLog entries indicate a Cloud Functions deployment failure at a region due to a\nResource Location restriction not allowing the region.\n\"\"\"\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import crm, logs\n\nMATCH_STR = 'The request has violated one or more Org Policies. \\\nPlease refer to the respective violations for more information.'\n\nMETHOD_NAME = 'google.cloud.functions.v1.CloudFunctionsService.GenerateUploadUrl'\n\nlogs_by_project = {}\n\nLOG_FILTER = [\n    'severity=ERROR',\n    'protoPayload.@type=\"type.googleapis.com/google.cloud.audit.AuditLog\"',\n    f'protoPayload.methodName=\"{METHOD_NAME}\"',\n    f'protoPayload.status.message:\"{MATCH_STR}\"'\n]\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='cloud_function',\n      log_name='log_id(\"cloudaudit.googleapis.com/data_access\")',\n      filter_str=' AND '.join(LOG_FILTER))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project_id = context.project_id\n  project_resource = crm.get_project(project_id)\n  if not project_resource:\n    report.add_skipped(None, f'no projects found {context}')\n    return\n  query = logs_by_project[context.project_id]\n  for log_entry in query.entries:\n    message = get_path(log_entry, ('protoPayload', 'status', 'message'),\n                       default='')\n    severity = get_path(log_entry, ('severity'), default='')\n    if MATCH_STR not in message or severity != 'ERROR':\n      continue\n    entry_project_id = get_path(log_entry, ('resource', 'labels', 'project_id'),\n                                default='')\n    if entry_project_id == project_id:\n      deployment_region = log_entry.get('resource').get('labels').get('region')\n      report.add_failed(\n          project_resource,\n          f'{project_id} had a Cloud Function deployment failure at {deployment_region}'\n      )\n      break\n  else:\n    report.add_ok(project_resource)\n"
  },
  {
    "path": "gcpdiag/lint/gcf/err_2022_003_cloudfunctions_memory_limit_exceeded.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Cloud Functions do not exceed memory limits.\n\nLog entries indicating Cloud Functions exceeding memory limits have been found.\n\"\"\"\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gcf, logs\n\nMATCH_STR = 'Error: memory limit exceeded.'\n\nlogs_by_project = {}\n\nLOG_FILTER = ['severity=ERROR', f'textPayload:\"{MATCH_STR}\"']\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='cloud_function',\n      log_name='log_id(\"cloudfunctions.googleapis.com/cloud-functions\")',\n      filter_str=' AND '.join(LOG_FILTER))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  cloudfunctions = gcf.get_cloudfunctions(context)\n  if not cloudfunctions:\n    report.add_skipped(None, 'no functions found')\n    return\n\n  failed_functions = set()\n\n  query = logs_by_project[context.project_id]\n  for log_entry in query.entries:\n    if MATCH_STR not in get_path(log_entry,\n                                 ('textPayload'), default='') or get_path(\n                                     log_entry,\n                                     ('severity'), default='') != 'ERROR':\n      continue\n    function_name = get_path(log_entry, ('resource', 'labels', 'function_name'),\n                             default='')\n    if function_name:\n      failed_functions.add(function_name)\n  for _, cloudfunction in sorted(cloudfunctions.items()):\n    if cloudfunction.name in failed_functions:\n      available_memory = cloudfunction.memory\n      report.add_failed(\n          cloudfunction,\n          f'{cloudfunction.name} exceeded {available_memory} MB memory limit')\n    else:\n      report.add_ok(cloudfunction)\n"
  },
  {
    "path": "gcpdiag/lint/gcf/gcf_rules_snapshot_test.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\" Generalize rule snapshot testing \"\"\"\n\nfrom gcpdiag.lint import gcf, snapshot_test_base\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = gcf\n  project_id = 'gcpdiag-gcf1-aaaa'\n"
  },
  {
    "path": "gcpdiag/lint/gcf/snapshots/ERR_2022_001.txt",
    "content": "*  gcf/ERR/2022_001: Cloud Functions service agent has the cloudfunctions.serviceAgent role.\n   - projects/gcpdiag-gcf1-aaaa                                           [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/gcf/snapshots/ERR_2022_002.txt",
    "content": "*  gcf/ERR/2022_002: Successful Cloud Function deployments.\n   - projects/gcpdiag-gcf1-aaaa                                           [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/gcf/snapshots/ERR_2022_003.txt",
    "content": "*  gcf/ERR/2022_003: Cloud Functions do not exceed memory limits.\n   - projects/gcpdiag-gcf1-aaaa/locations/us-central1/functions/gcf1      [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/gcf/snapshots/WARN_2021_001.txt",
    "content": "*  gcf/WARN/2021_001: Cloud Functions don't use deprecated runtimes.\n   - projects/gcpdiag-gcf1-aaaa/locations/us-central1/functions/gcf1      [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/gcf/snapshots/WARN_2021_002.txt",
    "content": "*  gcf/WARN/2021_002: Cloud Functions have no scale up issues.\n   - projects/gcpdiag-gcf1-aaaa/locations/us-central1/functions/gcf1      [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/gcf/warn_2021_001_cloudfunctions_deprecated_runtimes.py",
    "content": "# Lint as: python3\n\"\"\"Cloud Functions don't use deprecated runtimes.\n\nThe following runtimes are deprecated: Go111, Nodejs6, Nodejs8.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gcf\n\nDEPRECATED_RUNTIMES = ['go111', 'nodejs6', 'nodejs8']\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  cloudfunctions = gcf.get_cloudfunctions(context)\n  if not cloudfunctions:\n    report.add_skipped(None, 'no functions found')\n  for cloudfunction in sorted(cloudfunctions.values(),\n                              key=lambda cloudfunction: cloudfunction.name):\n    if cloudfunction.runtime in DEPRECATED_RUNTIMES:\n      report.add_failed(\n          cloudfunction,\n          f'cloudfunction with deprecated runtime {cloudfunction.runtime}')\n    else:\n      report.add_ok(cloudfunction)\n"
  },
  {
    "path": "gcpdiag/lint/gcf/warn_2021_002_cloudfunctions_request_aborted.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Cloud Functions have no scale up issues.\n\nLog entries with Cloud Functions having scale up issues have been found.\n\"\"\"\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gcf, logs\n\n#pylint: disable=line-too-long\n\nMATCH_STR = 'The request was aborted because there was no available instance.'\n\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='cloud_function',\n      log_name='log_id(\"cloudfunctions.googleapis.com/cloud-functions\")',\n      filter_str=f'textPayload:\"{MATCH_STR}\"')\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  cloudfunctions = gcf.get_cloudfunctions(context)\n  if not cloudfunctions:\n    report.add_skipped(None, f'no functions found {context}')\n    return\n\n  failed_functions = set()\n\n  for query in logs_by_project.values():\n    for log_entry in query.entries:\n      if MATCH_STR not in get_path(log_entry, ('textPayload'), default=''):\n        continue\n      function_name = get_path(log_entry,\n                               ('resource', 'labels', 'function_name'),\n                               default='')\n      status = get_path(log_entry, ('httpRequest', 'status'), default=0)\n      if status in [429, 500] and function_name:\n        failed_functions.add(function_name)\n\n  for _, cloudfunction in sorted(cloudfunctions.items()):\n    if cloudfunction.name in failed_functions:\n      report.add_failed(cloudfunction,\n                        f'{cloudfunction.name} failed to scale up.')\n    else:\n      report.add_ok(cloudfunction)\n"
  },
  {
    "path": "gcpdiag/lint/gcs/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/lint/gcs/bp_2022_001_bucket_access_uniform.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Buckets are using uniform access\n\nGoogle recommends using uniform access for a\nCloud Storage bucket IAM policy\n\nhttps://cloud.google.com/storage/docs/access-control#choose_between_uniform_and_fine-grained_access\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gcs\n\nIGNORE_WITH_LABELS = {'goog-composer-environment', 'goog-dataproc-location'}\nIGNORE_WITH_NAME = ['{project}_cloudbuild', 'artifacts.{project}.appspot.com']\n\n\ndef _is_google_managed(bucket):\n  for t in IGNORE_WITH_NAME:\n    if bucket.name == t.format(project=bucket.project_id):\n      return True\n  return bool(set(bucket.labels.keys()) & IGNORE_WITH_LABELS)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  buckets = gcs.get_buckets(context)\n  bucket_count = 0\n  for b in buckets.values():\n    bucket_count += 1\n    if _is_google_managed(b):\n      report.add_skipped(b, 'Google-managed bucket')\n    elif b.is_uniform_access():\n      report.add_ok(b)\n    else:\n      report.add_failed(b,\n                        'it is recommend to use uniform access on your bucket')\n\n  if bucket_count == 0:\n    report.add_skipped(None, 'no buckets found')\n"
  },
  {
    "path": "gcpdiag/lint/gcs/gcs_rules_snapshot_test.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\" Generalize rule snapshot testing \"\"\"\n\nfrom gcpdiag.lint import gcs, snapshot_test_base\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = gcs\n  project_id = 'gcpdiag-gcs1-aaaa'\n"
  },
  {
    "path": "gcpdiag/lint/gcs/snapshots/BP_2022_001.txt",
    "content": "*  gcs/BP/2022_001: Buckets are using uniform access\n   - b/gcpdiag-gcs1bucket-aaaa                                            [FAIL]\n     it is recommend to use uniform access on your bucket\n   - b/gcpdiag-gcs1bucket-labels-aaaa                                     [FAIL]\n     it is recommend to use uniform access on your bucket\n   - b/gcpdiag-gcs1bucket2-aaaa                                           [FAIL]\n     it is recommend to use uniform access on your bucket\n\n   Google recommends using uniform access for a Cloud Storage bucket IAM policy\n   https://cloud.google.com/storage/docs/access-\n   control#choose_between_uniform_and_fine-grained_access\n\n   https://gcpdiag.dev/rules/gcs/BP/2022_001\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/lint/gke/bp_2021_001_cloudops_enabled.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GKE logging and monitoring enabled.\n\nDisabling either one of logging (SYSTEM, WORKLOADS) and\nmonitoring (aka \"GKE Cloud Operations\") impacts the\nability to effectively and efficiently troubleshoot cluster issues.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gke\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n  for _, c in sorted(clusters.items()):\n    if not c.is_autopilot:\n      disabled: list[str] = []\n      if c.has_logging_enabled() and \\\n        'WORKLOADS' not in c.enabled_logging_components():\n        disabled.append('workload logs')\n      elif not c.has_logging_enabled():\n        disabled.append('logging')\n\n      if not c.has_monitoring_enabled():\n        disabled.append('monitoring')\n\n      if disabled:\n        report.add_failed(c, ' and '.join(disabled) + ' are disabled')\n      else:\n        report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/gke/bp_2022_001_regional_cluster.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GKE clusters are regional.\n\nThe availability of regional clusters (both control plane and nodes) is higher\nfor regional clusters as they are replicated across zones in the region. It is\nrecommended to use regional clusters for the production workload.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gke\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n  for _, c in sorted(clusters.items()):\n    if not c.is_regional:\n      report.add_failed(c, ' is not regional')\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/gke/bp_2022_002_unique_subnets.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GKE clusters are using unique subnets.\n\nVerify that the Google Kubernetes Engine clusters are not sharing subnets. It\nis recommended to use unique subnet for each cluster.\n\nKeep in mind that subnets may be also reused in other projects.\n\"\"\"\n\nfrom typing import Dict\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gke\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n  subnets: Dict[str, str] = {}\n  for c in sorted(clusters.values(), key=lambda cluster: cluster.short_path):\n    subnetwork_config = c.subnetwork\n    if subnetwork_config is None:\n      report.add_skipped(\n          c, (f'Cluster \"{c.name}\" is using Legacy VPC with no'\n              f' support for subnets. Suggest change to modern VPC.'))\n      continue\n    if subnetwork_config.short_path not in subnets:\n      subnets[subnetwork_config.short_path] = c.short_path\n      report.add_ok(c)\n    else:\n      report.add_failed(c, (f'Subnet \"{c.subnetwork.short_path}\" is used by'\n                            f' \"{subnets[c.subnetwork.short_path]}\" cluster'))\n"
  },
  {
    "path": "gcpdiag/lint/gke/bp_2022_003_cluster_eol.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GKE cluster is not near to end of life\n\nThe GKE clusters should be updated regularly. It is recommended to keep your\nGKE cluster version up to date and avoid reaching end of life.\n\nRule will start failing if scheduled end of life is in less than 30 days.\n\"\"\"\n\nfrom datetime import date, timedelta\nfrom typing import Dict\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gke\nfrom gcpdiag.utils import Version\n\n# how many days before eol rule will start to failing\nNOTIFY_PERIOD_IN_DAYS = 30\nBASE_OSS_K8S_VERSION = Version('1.23')\nBASE_OSS_K8S_RELEASE_DATE = date(2021, 12, 7)\nFUTURE_OSS_K8S_RELEASE_DATE = date(2200, 1, 1)\nMINOR_RELEASE_PACE_IN_DAYS = 122  # every 4 months\nGKE_REGULAR_SUPPORT_PERIOD_IN_DAYS = 426  # 14 months\nGKE_TIME_TO_RAPID_IN_DAYS = 30  # ~1 month\nGKE_TIME_TO_REGULAR_IN_DAYS = 91  # ~3 months\nTBD = 'TBD'\n\n\ndef _estimate_oss_release_date(version: Version) -> date:\n  \"\"\"\n  Estimate a release date of K8s OSS for a given K8s version\n\n  Since K8s v1.22 the release pace is 3 versions a year or every 4 month\n  https://kubernetes.io/blog/2021/07/20/new-kubernetes-release-cadence/\n\n  This function doesn't return a valid date for K8s versions older that v1.23.\n  The precision of the function is +-30days and could be bigger for v1.100+\n  \"\"\"\n  # Return a date of already EOLed version for versions older than BASE_OSS_K8S_VERSION\n  if version.major <= BASE_OSS_K8S_VERSION.major and version.minor <= BASE_OSS_K8S_VERSION.minor:\n    return BASE_OSS_K8S_RELEASE_DATE\n  # K8s v2 isn't planned at the moment\n  if version.major > BASE_OSS_K8S_VERSION.major:\n    return FUTURE_OSS_K8S_RELEASE_DATE\n  # Calculate a possible release date\n  return BASE_OSS_K8S_RELEASE_DATE + timedelta(\n      days=(version.minor - BASE_OSS_K8S_VERSION.minor) *\n      MINOR_RELEASE_PACE_IN_DAYS)\n\n\ndef _estimate_gke_eol_date(version: Version, eol_schedule: Dict):\n  \"\"\"\n  Estimate End Of Life date for a given GKE version\n\n  After a OSS K8s version is released it hits GKE Rapid channel in ~30 days.\n  It's being promoted to GKE Regular channel in ~90 days.\n  After a version hits Regular channel it's supported for 14 months.\n  \"\"\"\n\n  short_version = f'{version.major}.{version.minor}'\n\n  regular_release = get_path(eol_schedule, (short_version, 'regular_avail'),\n                             None)\n  rapid_release = get_path(eol_schedule, (short_version, 'rapid_avail'), None)\n  oss_release = get_path(eol_schedule, (short_version, 'oss_release'), None)\n\n  if regular_release and regular_release != TBD:\n    return regular_release + timedelta(days=GKE_REGULAR_SUPPORT_PERIOD_IN_DAYS)\n  if rapid_release and rapid_release != TBD:\n    return rapid_release + timedelta(days=GKE_TIME_TO_REGULAR_IN_DAYS +\n                                     GKE_REGULAR_SUPPORT_PERIOD_IN_DAYS)\n\n  if oss_release and oss_release != TBD:\n    base_oss_release = oss_release\n  else:\n    base_oss_release = _estimate_oss_release_date(version)\n  return base_oss_release + timedelta(days=GKE_TIME_TO_RAPID_IN_DAYS +\n                                      GKE_TIME_TO_REGULAR_IN_DAYS +\n                                      GKE_REGULAR_SUPPORT_PERIOD_IN_DAYS)\n\n\ndef _notification_required(version: Version, eol_schedule: Dict) -> bool:\n  \"\"\"Validate if notification is required based on the static channel schedule\"\"\"\n\n  short_version = f'{version.major}.{version.minor}'\n\n  # Check if the version is older that the oldest version in the EOL file\n  lowest_version = None\n  if eol_schedule.keys():\n    lowest_version = sorted(eol_schedule.keys())[0]\n  if lowest_version and version < Version(lowest_version):\n    eol_schedule[short_version] = {'eol': 'already reached EOL', 'eoled': True}\n    return True\n\n  if not eol_schedule or (short_version not in eol_schedule) or (\n      eol_schedule[short_version]['eol'] == TBD):\n    # The version is NOT defined in the static EOL versions file or is unknowd (TBD)\n    eol_date = _estimate_gke_eol_date(version, eol_schedule)\n    # Update the EOL date in the `eol_schedule` dict\n    eol_schedule[short_version] = {'eol': eol_date, 'estimated': True}\n  else:\n    eol_date = eol_schedule[short_version]['eol']\n\n  return date.today() > eol_date - timedelta(days=NOTIFY_PERIOD_IN_DAYS)\n\n\ndef _get_notification_msg(version: Version, eol_schedule: Dict) -> str:\n  short_version = f'{version.major}.{version.minor}'\n  msg = f\"GKE version {short_version} scheduled end of life: {eol_schedule[short_version]['eol']}\"\n  if 'estimated' in eol_schedule[short_version]:\n    msg += ' (estimation)'\n  return msg\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n\n  eol_schedule = gke.get_release_schedule()\n\n  for _, c in sorted(clusters.items()):\n    if c.release_channel:\n      report.add_skipped(c, 'release channel: ' + c.release_channel)\n      continue\n    if _notification_required(c.master_version, eol_schedule):\n      report.add_failed(c, _get_notification_msg(c.master_version,\n                                                 eol_schedule))\n      continue\n    for np in c.nodepools:\n      if _notification_required(np.version, eol_schedule):\n        report.add_failed(np, _get_notification_msg(np.version, eol_schedule))\n      else:\n        report.add_ok(np)\n"
  },
  {
    "path": "gcpdiag/lint/gke/bp_2022_004_http_load_balancing_disabled.py",
    "content": "# Lint as: python3\n\"\"\"Enable http load balancing on clusters to use GKE ingress and container-native load balancing.\n\nIf this is disabled GKE ingresses will be stuck in the creating state. Similarly if\nthis is disabled after GKE ingresses have been created but before they are deleted the GKE ingresses\nwill be stuck in the deleting state.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gke\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n  for _, c in sorted(clusters.items()):\n    if not c.has_http_load_balancing_enabled():\n      report.add_failed(c)\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/gke/bp_2023_001_network_policy_minimum_requirements.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GKE network policy minimum requirements\n\nThe recommended minimum cluster size to run network policy enforcement is three e2-medium\ninstances to ensure redundancy, high availability and to avoid down time due to maintenance\nactivities.\n\nNetwork policy is not supported for clusters whose nodes are f1-micro or g1-small instances,\nas the resource requirements are too high. Enabling this feature on such machines might lead\nto user worklaods not getting scheduled or having very little resources available as\nkube-system workloads will be consuming all or most resources.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gke\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n\n  for _, c in sorted(clusters.items()):\n    # Skipping check for autopilot clusters as beginning from version 1.22.7-gke.1500\n    # and later and versions 1.23.4-gke.1500 and later have Dataplane V2 enabled by default\n\n    # Check if cluster has dataplane V2 which has network policy enabled\n    if c.has_dpv2_enabled():\n      report.add_skipped(c, 'Dataplane V2 is enabled in the cluster')\n      continue\n\n    if not c.has_network_policy_enabled():\n      report.add_skipped(\n          c, 'network policy enforcement is disabled in the cluster')\n      continue\n\n    # check for number of nodes in the cluster\n    if c.current_node_count < 3:\n      report.add_failed(c, 'Node count: ' + str(c.current_node_count))\n      continue\n\n    # check nodepool node's machine type\n    node_failure = False\n    for n in c.nodepools:\n      machine_type = n.get_machine_type()\n      if machine_type in ('f1-micro', 'g1-small'):\n        report.add_failed(n, 'node\\'s machine type is: ' + machine_type)\n        node_failure = True\n\n    if not node_failure:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/gke/bp_2023_002_stateful_workloads_not_on_preemptible_node.py",
    "content": "# Lint as: python3\n\"\"\"Stateful workloads not run on preemptible node\n\nStateful workloads run on preemptible node are likely to be more frequently\ndisrupted by node termination with a short grace period. Please fully test\nbefore you decide to run stateful workloads on preemptible node to avoid app\nlevel service interruption or data corruption. Visit site below for more info:\nhttps://cloud.google.com/kubernetes-engine/docs/concepts/spot-vms#best-practices\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gce, gke\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n\n  instances = gce.get_instances(context=context)\n  clusters = gke.get_clusters(context=context)\n\n  # A 'failed cluster' in this rule is defined as a GKE cluster that:\n  # 1. has at least one preemptible node\n  # 2. the preemptible node has at least one writeable non-boot PD attached\n  failed_clusters = set()\n  for i in instances.values():\n    if i.is_gke_node() and i.is_preemptible_vm():\n      for d in i.disks:\n        # Skip checking if the disk is not PD (e.g. localSSD)\n        if 'type' in d and d['type'] != 'PERSISTENT':\n          continue\n        # Skip checking if the PD is not writeable\n        if 'mode' in d and 'WRITE' not in d['mode']:\n          continue\n        # A writeable non-boot PD indicates stateful workloads on this node.\n        if 'boot' in d and not d['boot']:\n          instance_cluster_name = i.get_metadata('cluster-name')\n          instance_zone = i.zone\n          for c in clusters.values():\n            if instance_cluster_name == c.name and c.location in instance_zone:\n              failed_clusters.add(c)\n\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n    return\n\n  for c in sorted(clusters.values(), key=lambda cluster: cluster.short_path):\n    if c not in failed_clusters:\n      report.add_ok(c)\n    else:\n      report.add_failed(c, (\n          f'Stateful workload is running on preemptible/spot node(s) \"{c.name}\"'\n      ))\n"
  },
  {
    "path": "gcpdiag/lint/gke/bp_2023_004_vpc_native_cluster.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GKE clusters are VPC-native.\n\nIt's recommended to use VPC-native clusters.\nVPC-native clusters use alias IP address ranges on GKE nodes and are required\nfor private GKE clusters and for creating clusters on Shared VPCs, as well as\nmany other features.\n\nVPC-native clusters scale more easily than routes-based clusters without consuming\nGoogle Cloud routes and so are less susceptible to hitting routing limits.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gke\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n  for _, c in sorted(clusters.items()):\n    if not c.is_vpc_native:\n      report.add_failed(c, ' is not VPC-native')\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/gke/bp_2023_005_gateway_crd.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"\nEnable gateway resources through Gateway API.\n\nThere is a possibility that healthcheckpolicies.networking.gke.io,\ngcpbackendpolicies.networking.gke.io, or gcpgatewaypolicies.networking.gke.io\nCRD are notpresent.\n\"\"\"\nfrom gcpdiag import lint, models\nfrom gcpdiag.lint.gke import util\nfrom gcpdiag.queries import apis, gke, logs\n\nMATCH_STR_1 = 'Your cluster is using manually installed CRDs for enablement'\n\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  clusters = gke.get_clusters(context)\n  for project_id in {c.project_id for c in clusters.values()}:\n    logs_by_project[project_id] = logs.query(\n        project_id=project_id,\n        resource_type='k8s_cluster',\n        log_name='log_id(\"events\")',\n        filter_str=f'jsonPayload.message:\"{MATCH_STR_1}\"',\n    )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(None, 'logging api is disabled')\n    return\n  # Any work to do?\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n    # Search the logs.\n  def filter_f(log_entry):\n    try:\n      if MATCH_STR_1 in log_entry['jsonPayload']['message']:\n        return True\n    except KeyError:\n      return False\n\n  bad_clusters = util.gke_logs_find_bad_clusters(\n      context=context, logs_by_project=logs_by_project, filter_f=filter_f)\n  # Create the report.\n  for _, c in sorted(clusters.items()):\n    if c in bad_clusters:\n      report.add_failed(c, logs.format_log_entry(bad_clusters[c]))\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/gke/bp_2025_001_gke_nodelocal_dnscache_enabled.py",
    "content": "# Copyright 2025 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GKE clusters should have NodeLocal DNSCache enabled.\n\nNodeLocal DNSCache improves DNS reliability and performance within the cluster\nby running a local DNS cache on each node. This reduces latency and load on\nkube-dns. It is a recommended best practice for most Standard clusters.\nAutopilot clusters have this enabled by default.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gke as gke_queries\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  \"\"\"Run the lint rule.\"\"\"\n\n  clusters = gke_queries.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, \"no clusters found\")\n    return\n\n  for _, cluster in sorted(clusters.items()):\n\n    if cluster.status != \"RUNNING\":\n      report.add_skipped(\n          cluster, f\"Cluster is not in RUNNING state (state: {cluster.status})\")\n      continue\n\n    if cluster.is_autopilot:\n      report.add_skipped(cluster, \"NodeLocal DNSCache is default in Autopilot\")\n      continue\n\n    if cluster.is_nodelocal_dnscache_enabled:\n      report.add_ok(cluster)\n    else:\n      reason = (\n          \"NodeLocal DNSCache is not enabled.\\n\"\n          \"Enable it to improve DNS performance and reliability.\\n\"\n          \"You can enable it with the command:\\n\"\n          f\"  gcloud container clusters update {cluster.name} --location={cluster.location}\"\n          \" --update-addons=NodeLocalDNS=ENABLED\\n\"\n          \"See also: https://cloud.google.com/kubernetes-engine/docs/how-to/nodelocal-dns-cache\"\n      )\n      report.add_failed(cluster, reason=reason)\n"
  },
  {
    "path": "gcpdiag/lint/gke/bp_ext_2022_001_groups_enabled.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Google Groups for RBAC enabled.\n\nEnable Google Groups for RBAC so cluster administrators do not need to\nmanage permissions manually for each user on the cluster and so Workspace\nadministrators can manage user accounts, such as revoking access when\nsomeone leaves your organization.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gke\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n  for _, c in sorted(clusters.items()):\n    if not c.has_authenticator_group_enabled():\n      report.add_failed(c, ' does not have Google Groups for RBAC enabled')\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/gke/bp_ext_2023_001_maintenance_window.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GKE maintenance windows are defined\n\nMaintenance windows give you fine-grained control over when automatic\nmaintenance can occur on GKE clusters. They allow administrators to\ncontrol the timing and impact of these updates, ensuring minimal disruption\nto running workloads.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gke\n\nclusters_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  clusters_by_project[context.project_id] = gke.get_clusters(context)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  clusters = clusters_by_project[context.project_id]\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n  for _, c in sorted(clusters.items()):\n    if not c.has_maintenance_window():\n      report.add_failed(c, ' does not configure a maintenance window')\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/gke/bp_ext_2023_002_private_cluster.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\" GKE clusters are private clusters.\n\nA private cluster is a type of VPC-native cluster that only depends on internal IP addresses.\nNodes, Pods, and Services in a private cluster require unique subnet IP address ranges.\n\nPrivate clusters are used when the applications and services are needed to be isolated from\nthe outside connections completely.\nThis ensures the workloads are private and not exposed to untrusted sources.\n\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gke\n\nclusters_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  clusters_by_project[context.project_id] = gke.get_clusters(context)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  clusters = clusters_by_project[context.project_id]\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n  for _, c in sorted(clusters.items()):\n    if not c.is_private:\n      report.add_failed(c, ' is a public cluster')\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/gke/eol_parser.sh",
    "content": "#!/bin/bash\n\n# WARNING: This script is deprecated and may be removed in a future release.\n# Please use 'gcpdiag/queries/gke.get_release_schedule' instead.\n\n# Parses the public GKE Schedule page and extratct EOL (end-of-life) dates\n# for currently available GKE versions\n\ncurl -s https://cloud.google.com/kubernetes-engine/docs/release-schedule |\n  sed -n '/<tbody>/,/<\\/tbody>/p' |\n  grep -vE 'tbody>|tr>' |\n  sed -e 's/<\\/td.*//g' -e 's/<sup.*//g' -e 's/^.*>//g' |\n  tr '\\n' ' ' |\n  (read -a GKE_REL\n\necho '# Auto-generated, DO NOT edit manually'\necho '# Use `make gke-eol-file` from the top level directory'\n\nlen=${#GKE_REL[@]}\nfor (( i=0; i<$len; i+=12 ))\ndo\n  echo \"'${GKE_REL[$i]}':\"\n  echo \"  oss_release: ${GKE_REL[$((i + 1))]}\"\n  echo \"  rapid_avail: ${GKE_REL[$((i + 2))]}\"\n  echo \"  regular_avail: ${GKE_REL[$((i + 4))]}\"\n  echo \"  stable_avail: ${GKE_REL[$((i + 6))]}\"\n  echo \"  eol: ${GKE_REL[$((i + 10))]}\"\ndone)\n"
  },
  {
    "path": "gcpdiag/lint/gke/err_2021_001_logging_perm.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GKE nodes service account permissions for logging.\n\nThe service account used by GKE nodes should have the logging.logWriter\nrole, otherwise ingestion of logs won't work.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gke, iam\n\nROLE = 'roles/logging.logWriter'\n\n\ndef prefetch_rule(context: models.Context):\n  # Make sure that we have the IAM policy in cache.\n  project_ids = {c.project_id for c in gke.get_clusters(context).values()}\n  for pid in project_ids:\n    iam.get_project_policy(context.copy_with(project_id=pid))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # Find all clusters with logging enabled.\n  clusters = gke.get_clusters(context)\n  iam_policy = iam.get_project_policy(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n  for _, c in sorted(clusters.items()):\n    if not c.has_logging_enabled():\n      report.add_skipped(c, 'logging disabled')\n    else:\n      # Verify service-account permissions for every nodepool.\n      for np in c.nodepools:\n        sa = np.service_account\n        if not iam.is_service_account_enabled(sa, context):\n          report.add_failed(np, f'service account disabled or deleted: {sa}')\n        elif not iam_policy.has_role_permissions(f'serviceAccount:{sa}', ROLE):\n          report.add_failed(np, f'service account: {sa}\\nmissing role: {ROLE}')\n        else:\n          report.add_ok(np)\n"
  },
  {
    "path": "gcpdiag/lint/gke/err_2021_002_monitoring_perm.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GKE nodes service account permissions for monitoring.\n\nThe service account used by GKE nodes should have the monitoring.metricWriter\nrole, otherwise ingestion of metrics won't work.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gke, iam\n\nROLE = 'roles/monitoring.metricWriter'\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # Find all clusters with monitoring enabled.\n  clusters = gke.get_clusters(context)\n  iam_policy = iam.get_project_policy(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n  for _, c in sorted(clusters.items()):\n    if not c.has_monitoring_enabled():\n      report.add_skipped(c, 'monitoring disabled')\n    else:\n      # Verify service-account permissions for every nodepool.\n      for np in c.nodepools:\n        sa = np.service_account\n        if not iam.is_service_account_enabled(sa, context):\n          report.add_failed(np, f'service account disabled or deleted: {sa}')\n        elif not iam_policy.has_role_permissions(f'serviceAccount:{sa}', ROLE):\n          report.add_failed(np, f'service account: {sa}\\nmissing role: {ROLE}')\n        else:\n          report.add_ok(np)\n"
  },
  {
    "path": "gcpdiag/lint/gke/err_2021_003_kms_key_enabled.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"App-layer secrets encryption is activated and Cloud KMS key is enabled.\n\nGKE's default service account cannot use a disabled or destroyed Cloud KMS key\nfor application-level secrets encryption.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gke, kms\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n  for _, c in sorted(clusters.items()):\n    if not c.has_app_layer_enc_enabled():\n      report.add_skipped(c, 'App-layer secrets encryption isn\\'t enabled')\n    else:\n      crypto_key = kms.get_crypto_key(c.app_layer_sec_key)\n      if crypto_key.is_destroyed():\n        report.add_failed(c, f'Key {crypto_key} is destroyed')\n      elif not crypto_key.is_enabled():\n        report.add_failed(c, f'Key {crypto_key} is disabled')\n      else:\n        report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/gke/err_2021_004_node_connection_apiserver.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GKE nodes aren't reporting connection issues to apiserver.\n\nGKE nodes need to connect to the control plane to register and to report status\nregularly. If connection errors are found in the logs, possibly there is a\nconnectivity issue, like a firewall rule blocking access.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.lint.gke import util\nfrom gcpdiag.queries import apis, gke, logs\n\nMATCH_STR = 'Failed to connect to apiserver'\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  clusters = gke.get_clusters(context)\n  for project_id in {c.project_id for c in clusters.values()}:\n    logs_by_project[project_id] = logs.query(\n        project_id=project_id,\n        resource_type='k8s_node',\n        log_name='log_id(\"kubelet\")',\n        filter_str=f'jsonPayload.MESSAGE:\"{MATCH_STR}\"')\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(None, 'logging api is disabled')\n    return\n\n  # Any work to do?\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n\n  # Search the logs.\n  def filter_f(log_entry):\n    try:\n      return MATCH_STR in log_entry['jsonPayload']['MESSAGE']\n    except KeyError:\n      return False\n\n  bad_nodes_by_cluster = util.gke_logs_find_bad_nodes(\n      context=context, logs_by_project=logs_by_project, filter_f=filter_f)\n\n  # Create the report.\n  for _, c in sorted(clusters.items()):\n    if c in bad_nodes_by_cluster:\n      report.add_failed(\n          c, 'Connectivity issues detected. Nodes:\\n. ' +\n          '\\n. '.join(bad_nodes_by_cluster[c]))\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/gke/err_2021_005_node_connection_storage.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GKE nodes aren't reporting connection issues to storage.google.com.\n\nGKE node need to download artifacts from storage.google.com:443 when\nbooting. If a node reports that it can't connect to storage.google.com,\nit probably means that it can't boot correctly.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.lint.gke import util\nfrom gcpdiag.queries import apis, gke, logs\n\nMATCH_STR = 'Failed to connect to storage.googleapis.com'\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  clusters = gke.get_clusters(context)\n  for project_id in {c.project_id for c in clusters.values()}:\n    logs_by_project[project_id] = logs.query(\n        project_id=project_id,\n        resource_type='gce_instance',\n        log_name='log_id(\"serialconsole.googleapis.com/serial_port_1_output\")',\n        filter_str=f'textPayload:\"{MATCH_STR}\"')\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(None, 'logging api is disabled')\n    return\n\n  # Any work to do?\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n\n  # Search the logs.\n  def filter_f(log_entry):\n    try:\n      return MATCH_STR in log_entry['textPayload']\n    except KeyError:\n      return False\n\n  bad_nodes_by_cluster = util.gke_logs_find_bad_nodes(\n      context=context, logs_by_project=logs_by_project, filter_f=filter_f)\n\n  # Create the report.\n  for _, c in sorted(clusters.items()):\n    if c in bad_nodes_by_cluster:\n      report.add_failed(\n          c, 'Connectivity issues detected. Nodes:\\n. ' +\n          '\\n. '.join(bad_nodes_by_cluster[c]))\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/gke/err_2021_006_scaleup_failed.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GKE Autoscaler isn't reporting scaleup failures.\n\nIf the GKE autoscaler reported a problem when trying to add nodes to a cluster,\nit could mean that you don't have enough resources to accommodate for new nodes.\nE.g. you might not have enough free IP addresses in the GKE cluster network.\n\"\"\"\n\nimport collections\nimport re\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, gke, logs\n\n# k8s_cluster, container.googleapis.com/cluster-autoscaler-visibility\nca_logs_by_project = {}\n# gce_instance, cloudaudit.googleapis.com/activity\ngce_logs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  clusters = gke.get_clusters(context)\n  for project_id in {c.project_id for c in clusters.values()}:\n    ca_logs_by_project[project_id] = logs.query(\n        project_id=project_id,\n        resource_type='k8s_cluster',\n        log_name=\n        'log_id(\"container.googleapis.com/cluster-autoscaler-visibility\")',\n        filter_str=\n        'jsonPayload.resultInfo.results.errorMsg.messageId:\"scale.up.error\"')\n    gce_logs_by_project[project_id] = logs.query(\n        project_id=project_id,\n        resource_type='gce_instance',\n        log_name='log_id(\"cloudaudit.googleapis.com/activity\")',\n        filter_str='severity=ERROR AND '\n        'protoPayload.methodName=\"v1.compute.instances.insert\"')\n    # Note: we don't filter by callerSuppliedUserAgent because this will be\n    # removed anyway because of search job aggregation.\n    #AND '\n    #'protoPayload.requestMetadata.callerSuppliedUserAgent=\"GCE Managed Instance Group for GKE\"'\n\n\ndef is_mig_instance(mig_name: str, instance_name: str):\n  \"\"\"Verify that an instance is part of a mig using naming conventions.\"\"\"\n  if mig_name.endswith('-grp'):\n    mig_prefix = mig_name[:-4]\n    if instance_name.startswith(mig_prefix):\n      return True\n  return False\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(None, 'logging api is disabled')\n    return\n\n  # Any work to do?\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n\n  # Correlation dicts, so that we can determine resources based on log labels:\n  try:\n    cluster_by_mig = {}\n    cluster_migs = collections.defaultdict(set)\n    for c in clusters.values():\n      for np in c.nodepools:\n        for mig in np.instance_groups:\n          cluster_by_mig[mig.name] = c\n          cluster_migs[c].add(mig.name)\n  except KeyError:\n    pass\n\n  # Collect errors by mig name.\n  mig_errors = {}\n\n  # Process gce_instance logs and search for VM creation errors\n  for query in gce_logs_by_project.values():\n    for log_entry in query.entries:\n      try:\n        # Filter out non-relevant log entries.\n        if log_entry['severity']!='ERROR' or \\\n          log_entry['protoPayload']['methodName']!='v1.compute.instances.insert' or \\\n          log_entry['protoPayload']['requestMetadata']['callerSuppliedUserAgent']!= \\\n          'GCE Managed Instance Group for GKE':\n          continue\n        # Determine mig name.\n        m = re.search(r'/instances/([^/]+)$',\n                      log_entry['protoPayload']['resourceName'])\n        if not m:\n          continue\n        instance_name = m.group(1)\n        # pylint: disable=cell-var-from-loop\n        mig = list(\n            filter(lambda x: is_mig_instance(x, instance_name),\n                   cluster_by_mig.keys()))\n        if not mig:\n          continue\n        if log_entry['protoPayload']['status']['message'] == 'LIMIT_EXCEEDED':\n          mig_errors[mig[0]] = 'LIMIT_EXCEEDED, possibly IP exhaustion'\n        else:\n          mig_errors[mig[0]] = log_entry['protoPayload']['status']['message']\n      except KeyError:\n        pass\n\n  # Process cluster autoscaler logs\n  for query in ca_logs_by_project.values():\n    for log_entry in query.entries:\n      try:\n        for r in log_entry['jsonPayload']['resultInfo']['results']:\n          if r['errorMsg']['messageId'].startswith('scale.up.error'):\n            for p in r['errorMsg']['parameters']:\n              m = re.search(r'/instanceGroups/([^/]+)$', p)\n              if m:\n                mig_errors.setdefault(m.group(1), r['errorMsg']['messageId'])\n      except KeyError:\n        pass\n\n  # Create the report.\n  for _, c in sorted(clusters.items()):\n    cluster_mig_errors = cluster_migs.get(c,\n                                          set()).intersection(mig_errors.keys())\n    if cluster_mig_errors:\n      report.add_failed(\n          c, 'Scale up failures detected on managed instance groups:\\n. '+\\\n              '\\n. '.join(f'{mig} ({mig_errors[mig]})' for mig in cluster_mig_errors))\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/gke/err_2021_007_gke_sa.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GKE service account permissions.\n\nVerify that the Google Kubernetes Engine service account exists and has\nthe Kubernetes Engine Service Agent role on the project.\n\"\"\"\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import crm, gke, iam\n\n# defining role\nROLE = 'roles/container.serviceAgent'\n\n\n# creating rule to report if default SA exists\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n    return\n\n  project = crm.get_project(context.project_id)\n  sa = 'service-{}@container-engine-robot.iam.gserviceaccount.com'.format(\n      project.number)\n  iam_policy = iam.get_project_policy(context)\n  if iam_policy.has_role_permissions(f'serviceAccount:{sa}', ROLE):\n    report.add_ok(project)\n  else:\n    report.add_failed(project,\n                      reason=f'service account: {sa}\\nmissing role: {ROLE}')\n"
  },
  {
    "path": "gcpdiag/lint/gke/err_2021_008_api_service_agent.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Note that we don't have a general rule that checks this for all products,\n# because the grant is done lazily, as soon as it is needed. So check that the\n# grant is there only when resources of a certain product (like GKE clusters)\n# are present, and we know that the grant is necessary for the correct\n# operation of that product. Copy the rule for other products, as necessary.\n\"\"\"Google APIs service agent has Editor role.\n\nThe Google API service agent project-number@cloudservices.gserviceaccount.com\nruns internal Google processes on your behalf. It is automatically granted the\nEditor role on the project.\n\nReference: https://cloud.google.com/iam/docs/service-accounts#google-managed\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import crm, gke, iam\n\nROLE = 'roles/editor'\n\n\ndef prefetch_rule(context: models.Context):\n  # Make sure that we have the IAM policy in cache.\n  project_ids = {c.project_id for c in gke.get_clusters(context).values()}\n  for pid in project_ids:\n    iam.get_project_policy(context.copy_with(project_id=pid))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n    return\n\n  for project_id in sorted({c.project_id for c in clusters.values()}):\n    project = crm.get_project(project_id)\n    sa_email = f'{project.number}@cloudservices.gserviceaccount.com'\n    iam_policy = iam.get_project_policy(\n        context.copy_with(project_id=project_id))\n    if not iam_policy.has_role_permissions(f'serviceAccount:{sa_email}', ROLE):\n      report.add_failed(project,\n                        f'service account: {sa_email}\\nmissing role: {ROLE}')\n    else:\n      report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/gke/err_2021_009_nodepool_version_skew.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Version skew between cluster and node pool.\n\nDifference between cluster version and node pools version should be no more\nthan 2 (K8s <v1.28) or 3 (K8s v1.28+) minor versions.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gke\n\nK8S_MAJOR_WITH_3_VERSIONS_SKEW = 1\nK8S_MINOR_WITH_3_VERSIONS_SKEW = 28\nLEGACY_SKEW = 2\nCURRENT_SKEW = 3\n\nfail_reason_template = (\n    \"Difference between versions of the node pool ({np_ver}) and cluster ({c_ver}) is\"\n    \" more than {skew} minor versions\")\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  clusters = gke.get_clusters(context).values()\n\n  if not clusters:\n    report.add_skipped(None, \"No GKE clusters found\")\n\n  for cluster in clusters:\n    for nodepool in cluster.nodepools:\n\n      c_ver = cluster.master_version\n      np_ver = nodepool.version\n\n      skew = LEGACY_SKEW\n      if c_ver.minor >= K8S_MINOR_WITH_3_VERSIONS_SKEW or \\\n          c_ver.major > K8S_MAJOR_WITH_3_VERSIONS_SKEW:\n        skew = CURRENT_SKEW\n      major_ok = c_ver.same_major(np_ver)\n      minor_ok = c_ver.diff_minor(np_ver) <= skew\n\n      if major_ok and minor_ok:\n        report.add_ok(nodepool)\n      else:\n        report.add_failed(nodepool,\n                          reason=fail_reason_template.format(c_ver=c_ver,\n                                                             np_ver=np_ver,\n                                                             skew=skew))\n"
  },
  {
    "path": "gcpdiag/lint/gke/err_2021_010_internal_forwarding_rule_limits.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Check internal peering forwarding limits which affect GKE.\n\nInternal Load Balancer creation can fail due to VPC internal forwarding rules limits.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.lint.gke import util\nfrom gcpdiag.queries import apis, gke, logs\n\nMATCH_STR_1 = 'INTERNAL_FORWARDING_RULES_WITH_PEERING_LIMITS_EXCEEDED'\nMATCH_STR_2 = 'SyncLoadBalancerFailed'\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='k8s_cluster',\n      log_name='log_id(\"events\")',\n      filter_str=\n      f'jsonPayload.message:\"{MATCH_STR_1}\" AND jsonPayload.reason:\"{MATCH_STR_2}\"'\n  )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(None, 'logging api is disabled')\n    return\n\n  # Any work to do?\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n\n    # Search the logs.\n  def filter_f(log_entry):\n    try:\n      if (MATCH_STR_1 in log_entry['jsonPayload']['message']) and (\n          MATCH_STR_2 in log_entry['jsonPayload']['reason']):\n        return True\n    except KeyError:\n      return False\n\n  bad_clusters = util.gke_logs_find_bad_clusters(\n      context=context, logs_by_project=logs_by_project, filter_f=filter_f)\n\n  # Create the report.\n  for _, c in sorted(clusters.items()):\n    if c in bad_clusters:\n      report.add_failed(c, logs.format_log_entry(bad_clusters[c]))\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/gke/err_2021_011_ip_masq_not_reporting_errors.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"ip-masq-agent not reporting errors\n\nIf ip-masq-agent is reporting errors, it is possible that the config received\nis invalid. In that case, it is possible that the applied config is not\nreflecting the desired masquerading behavior, which could lead to unexpected\nconnectivity issues.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.lint.gke import util\nfrom gcpdiag.queries import apis, gke, logs\n\nIP_MASQ_AGENT_CONTAINER_NAME = 'ip-masq-agent'\n\n# k8s_container\nip_masq_container_errors = {}\n\n\ndef prepare_rule(context: models.Context):\n  ip_masq_container_errors[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='k8s_container',\n      log_name='log_id(\"stderr\")',\n      filter_str='severity=ERROR AND '+\\\n      f'resource.labels.container_name=\"{IP_MASQ_AGENT_CONTAINER_NAME}\"')\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(None, 'logging api is disabled')\n    return\n\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n\n  def filter_f(log_entry):\n    try:\n      container_name = log_entry['resource']['labels']['container_name']\n      if (log_entry['severity'] == 'ERROR' and\n          container_name == IP_MASQ_AGENT_CONTAINER_NAME):\n        return True\n    except KeyError:\n      return False\n\n  clusters_with_errors = util.gke_logs_find_bad_clusters(\n      context=context,\n      logs_by_project=ip_masq_container_errors,\n      filter_f=filter_f)\n\n  # Generate report\n  for c in clusters.values():\n    if c in clusters_with_errors:\n      report.add_failed(c, logs.format_log_entry(clusters_with_errors[c]))\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/gke/err_2021_012_np_sa_enabled.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Node pool service account exists and not is disabled.\n\nDisabling or deleting the service account used by a node pool will render the\nnode pool not functional. To fix - restore the default compute account or\nservice account that was specified when the node pool was created.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gke, iam\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # Find all clusters.\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n\n  for _, c in sorted(clusters.items()):\n    # Verify service-account exists for every nodepool.\n    for np in c.nodepools:\n      sa = np.service_account\n      default_prefix = ''\n      if np.has_default_service_account():\n        default_prefix = 'default '\n      if not iam.is_service_account_existing(sa, context):\n        report.add_failed(np,\n                          f'{default_prefix}service account is deleted: {sa}')\n      elif not iam.is_service_account_enabled(sa, context):\n        report.add_failed(np,\n                          f'{default_prefix}service account is disabled: {sa}')\n      else:\n        report.add_ok(np)\n"
  },
  {
    "path": "gcpdiag/lint/gke/err_2021_013_connectivity_cluster_rules.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GKE cluster firewall rules are configured.\n\nGKE automatically creates firewall rules for cluster\ncommunication. We verify that the VPC firewall rules\nare present.\n\"\"\"\n\n# Note that this rule is separate from the other rules that\n# do the connectivity check so that it can be excluded more\n# easily if somebody takes into account that the automatic\n# rule creation fails, but provisions the firewall on their own.\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gke\n\n\ndef _run_rule_cluster(report: lint.LintReportRuleInterface, c: gke.Cluster):\n  try:\n    cluster_fw_rules_names = [\n        f'gke-{c.name}-{c.cluster_hash}-vms',\n        f'gke-{c.name}-{c.cluster_hash}-all',\n    ]\n    if c.is_private:\n      cluster_fw_rules_names.append(f'gke-{c.name}-{c.cluster_hash}-master')\n\n    missing_rules = [\n        rule_name for rule_name in cluster_fw_rules_names \\\n            if not c.network.firewall.verify_ingress_rule_exists(rule_name)\n        ]\n    if missing_rules:\n      report.add_failed(c,\n                        'missing firewall rules: ' + ', '.join(missing_rules))\n    else:\n      report.add_ok(c)\n  except gke.UndefinedClusterPropertyError as err:\n    report.add_skipped(c, str(err))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n    return\n\n  for _, c in sorted(clusters.items()):\n    _run_rule_cluster(report, c)\n"
  },
  {
    "path": "gcpdiag/lint/gke/err_2021_014_connectivity_master.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GKE masters of private clusters can reach the nodes.\n\nMasters must be allowed to reach the nodes via tcp:443 and tcp10250.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gke\n\n\ndef _run_rule_cluster(report: lint.LintReportRuleInterface, c: gke.Cluster):\n  network = c.network\n  if not c.nodepools:\n    report.add_skipped(c, 'no nodepools')\n    return\n  np = next(iter(c.nodepools))\n  if not c.is_private:\n    report.add_skipped(c, 'public cluster')\n    return\n\n  tags = np.node_tags\n  if c.is_autopilot:\n    # use default tags for autopilot clusters\n    tags = [f'gke-{c.name}-{c.cluster_hash}-node']\n\n  # Verify connectivity\n  for masters_net in c.masters_cidr_list:\n    for p in [443, 10250]:\n      result = network.firewall.check_connectivity_ingress(\n          src_ip=masters_net,\n          ip_protocol='tcp',\n          port=p,\n          target_service_account=np.service_account,\n          target_tags=tags)\n      if result.action == 'deny':\n        report.add_failed(\n            c, 'connections from %s to port %s blocked by %s' %\n            (masters_net, p, result.matched_by_str))\n        return\n  report.add_ok(c)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n    return\n\n  for _, c in sorted(clusters.items()):\n    _run_rule_cluster(report, c)\n"
  },
  {
    "path": "gcpdiag/lint/gke/err_2021_015_connectivity_vms.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GKE connectivity: node to pod communication.\n\nAgents and host-network pods from a node must be able to communicate with all\npods on all nodes.\n\"\"\"\n\nfrom gcpdiag import lint, models, utils\nfrom gcpdiag.queries import gke\n\n# All ports must be allowed, but only verify a fixed set.\nVERIFY_PORTS = {  #\n    'tcp': [53, 80, 443, 8080, 10000],\n    'udp': [53, 1000, 10000]\n}\n\n\ndef prefetch_rule(context: models.Context):\n  # Prefetch networks and subnetworks\n  clusters = gke.get_clusters(context)\n  for c in clusters.values():\n    subnets = c.network.subnetworks\n    del subnets\n\n\ndef _run_rule_cluster(report: lint.LintReportRuleInterface, c: gke.Cluster):\n  network = c.network\n  if not c.nodepools:\n    report.add_skipped(c, 'no nodepools')\n    return\n\n  for np in c.nodepools:\n    src_nets = {\n        mig.template.subnetwork.ip_network for mig in np.instance_groups\n    }\n\n    for src_net in src_nets:\n      for (proto, port) in utils.iter_dictlist(VERIFY_PORTS):\n        result = network.firewall.check_connectivity_ingress(\n            src_ip=src_net,\n            ip_protocol=proto,\n            port=port,\n            target_service_account=np.service_account,\n            target_tags=np.node_tags)\n\n        if result.action == 'deny':\n          report.add_failed(\n              c, (f'connections from {src_net} to {proto}:{port} blocked by '\n                  f'{result.matched_by_str} (node pool: {np.name})'))\n          return\n  report.add_ok(c)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n    return\n\n  for _, c in sorted(clusters.items()):\n    _run_rule_cluster(report, c)\n"
  },
  {
    "path": "gcpdiag/lint/gke/err_2022_001_connectivity_pod_to_pod.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GKE connectivity: pod to pod communication.\n\nTraffic between all pods on a cluster is required by the Kubernetes networking\nmodel. Following protocols must be allowed: TCP, UDP, SCTP, ICMP, ESP, AH.\n\"\"\"\n\nfrom gcpdiag import lint, models, utils\nfrom gcpdiag.queries import gke\n\n# All ports must be allowed, but only verify a fixed set.\nVERIFY_PORTS = {  #\n    'tcp': [53, 80, 443, 8080, 10000],\n    'udp': [53, 1000, 10000]\n}\n\n\ndef prefetch_rule(context: models.Context):\n  # Prefetch networks and subnetworks\n  clusters = gke.get_clusters(context)\n  for c in clusters.values():\n    subnets = c.network.subnetworks\n    del subnets\n\n\ndef _run_rule_cluster(report: lint.LintReportRuleInterface, c: gke.Cluster):\n  network = c.network\n  if not c.nodepools:\n    report.add_skipped(c, 'no nodepools')\n    return\n\n  src_net = c.pod_ipv4_cidr\n\n  for np in c.nodepools:\n    tags = np.node_tags\n    if c.is_autopilot:\n      # use default tags for autopilot clusters\n      tags = [f'gke-{c.name}-{c.cluster_hash}-node']\n    for (proto, port) in utils.iter_dictlist(VERIFY_PORTS):\n      result = network.firewall.check_connectivity_ingress(\n          src_ip=src_net,\n          ip_protocol=proto,\n          port=port,\n          target_service_account=np.service_account,\n          target_tags=tags)\n\n      if result.action == 'deny':\n        report.add_failed(\n            c, (f'connections from {src_net} to {proto}:{port} blocked by '\n                f'{result.matched_by_str} (node pool: {np.name})'))\n        return\n  report.add_ok(c)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n    return\n\n  for _, c in sorted(clusters.items()):\n    _run_rule_cluster(report, c)\n"
  },
  {
    "path": "gcpdiag/lint/gke/err_2022_002_private_google_access.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GKE nodes of private clusters can access Google APIs and services.\n\nPrivate GKE clusters must have Private Google Access enabled on the subnet where\ncluster is deployed.\n\"\"\"\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gke, network\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n    return\n\n  for _, c in sorted(clusters.items()):\n    # fetch project number\n    p: str = c.project_id\n    if c.project_id != c.network.project_id:\n      # shared vpc\n      p = c.network.project_id\n    if c.is_private and not c.subnetwork.is_private_ip_google_access():\n\n      router = network.get_router(project_id=p,\n                                  region=c.subnetwork.region,\n                                  network=c.network)\n\n      if router.subnet_has_nat(c.subnetwork):\n        # Cloud NAT configured for subnet\n        report.add_ok(c)\n      else:\n        # no Cloud NAT configured for subnet\n        report.add_failed(c, (f' subnet {c.subnetwork.name} has'\n                              ' Private Google Access disabled and Cloud NAT'\n                              ' is not available'))\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/gke/err_2022_003_ingress_healthcheck.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GKE connectivity: load balancer to node communication (ingress).\n\nIn order for the Ingress service to work correctly, the network connection from\nthe load balancer must be allowed.\n\"\"\"\nimport re\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gke\nfrom gcpdiag.queries.network import VpcFirewallRule\n\nFIREWALL_RULE_NAME_PATTERN = re.compile(r'k8s-fw-l7-.*')\n\n\ndef _get_rule_allowed_ports(rule: VpcFirewallRule):\n  \"\"\"Return list of tuples defined in the rule\n\n  For example:\n  [\n    (IPv4Network('130.211.0.0/22'), '30000')\n    (IPv4Network('35.191.0.0/16'), '30000')\n  ]\n  \"\"\"\n  result = []\n  for a in rule.allowed:\n    for port in a.get('ports', []):\n      # in the rule definition we might have one port or port range\n      # in the 2nd case we will use first value of the range to test connectivity\n      # finally we need to combine ports with source ranges\n      for source in rule.source_ranges:\n        result.append((source, port.split('-')[0]))\n        if '-' in port:\n          result.append((source, port.split('-')[1]))\n  return result\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n    return\n\n  for _, c in sorted(clusters.items()):\n    for np in c.nodepools:\n      tags = np.node_tags\n      if c.is_autopilot:\n        # use default tags for autopilot clusters\n        tags = [f'gke-{c.name}-{c.cluster_hash}-node']\n      rules = c.network.firewall.get_vpc_ingress_rules(\n          name_pattern=FIREWALL_RULE_NAME_PATTERN, target_tags=tags)\n      if not rules:\n        report.add_skipped(np, 'no ingress detected')\n        break\n      failed = False\n      for r in rules:\n        for src_range, port in _get_rule_allowed_ports(r):\n          result = c.network.firewall.check_connectivity_ingress(\n              src_ip=src_range,\n              ip_protocol='tcp',\n              port=int(port),\n              target_service_account=np.service_account,\n              target_tags=np.node_tags)\n          if result.action == 'deny':\n            failed = True\n            report.add_failed(\n                np,\n                f'connections from {src_range} to port {port} blocked by {result.matched_by_str}'\n            )\n            break\n      if not failed:\n        report.add_ok(np)\n"
  },
  {
    "path": "gcpdiag/lint/gke/err_2023_001_containerfilesystem_quota.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Container File System API quota not exceeded\n\nVerify that Image Streaming has not exceeded the Container File System API quota.\nThat might cause a CrashLoopBackOff error on your pods.\nSee https://cloud.google.com/kubernetes-engine/docs/how-to/image-streaming#quota_exceeded\n\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.lint.gke import util\nfrom gcpdiag.queries import apis, gke, logs\n\nMATCH_STR = 'Quota exceeded for quota metric'\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  clusters = gke.get_clusters(context)\n  for project_id in {c.project_id for c in clusters.values()}:\n    logs_by_project[project_id] = logs.query(\n        project_id=project_id,\n        resource_type='k8s_node',\n        log_name='log_id(\"gcfsd\")',\n        filter_str=f'jsonPayload.MESSAGE:\"{MATCH_STR}\"')\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(None, 'logging api is disabled')\n    return\n\n  # Any work to do?\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n    return\n\n  has_image_streaming = False\n\n  # skip entire rule is gcfs is disabled in all clusters\n  for _, c in sorted(clusters.items()):\n    # check if any of the clusters has image streaming\n    has_image_streaming = has_image_streaming or c.has_image_streaming_enabled()\n\n  if not has_image_streaming:\n    report.add_skipped(None, 'image streaming disabled')\n    return\n\n  # Search the logs.\n  def filter_f(log_entry):\n    try:\n      return MATCH_STR in log_entry['jsonPayload']['MESSAGE']\n    except KeyError:\n      return False\n\n  bad_nodes_by_cluster = util.gke_logs_find_bad_nodes(\n      context=context, logs_by_project=logs_by_project, filter_f=filter_f)\n\n  # Create the report.\n  for _, c in sorted(clusters.items()):\n    if c in bad_nodes_by_cluster:\n      report.add_failed(\n          c, 'Container File System API quota exceeded detected. Nodes:\\n. ' +\n          '\\n. '.join(bad_nodes_by_cluster[c]))\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/gke/err_2023_002_private_routes_based.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GKE private clusters are VPC-native.\n\nPrivate cluster is a type of VPC-native cluster and must not be Routes-based.\nVPC-native clusters use alias IP address ranges on GKE nodes and are required\nfor private GKE clusters and for creating clusters on Shared VPCs, as well as many\nother features.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gke\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n  for _, c in sorted(clusters.items()):\n    if c.is_private and not c.is_vpc_native:\n      report.add_failed(c, ' is private and not VPC-native')\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/gke/err_2023_003_containerd_bad_config_file.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"containerd config.toml is valid\n\n`containerd` container runtime is a crucial component of a GKE cluster that\nruns on all nodes. If its configuration file was customized and became\ninvalid, `containerd` can't be started and its node will stay in `NotReady`\nstate.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.lint.gke import util\nfrom gcpdiag.queries import apis, gke, logs\n\nMAX_NODES_TO_REPORT = 10\nMATCH_STR = 'containerd: failed to load TOML'\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  clusters = gke.get_clusters(context)\n  for project_id in {c.project_id for c in clusters.values()}:\n    logs_by_project[project_id] = logs.query(\n        project_id=project_id,\n        resource_type='k8s_node',\n        log_name='log_id(\"container-runtime\")',\n        filter_str=f'jsonPayload.MESSAGE:\"{MATCH_STR}\"')\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # Skip entire rule if Cloud Logging is disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(None, 'logging api is disabled')\n    return\n\n  # Any work to do?\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n\n  # Search the logs.\n  def filter_f(log_entry):\n    try:\n      return MATCH_STR in log_entry['jsonPayload']['MESSAGE']\n    except KeyError:\n      return False\n\n  bad_nodes_by_cluster = util.gke_logs_find_bad_nodes(\n      context=context, logs_by_project=logs_by_project, filter_f=filter_f)\n\n  # Create the report.\n  for _, c in sorted(clusters.items()):\n    if c in bad_nodes_by_cluster:\n      # Report only MAX_NODES_TO_REPORT nodes to limit the output for big clusters\n      report.add_failed(\n          c,\n          'Invalid config.toml configuration for containerd is detected. Nodes:\\n. '\n          + '\\n. '.join(list(bad_nodes_by_cluster[c])[:MAX_NODES_TO_REPORT]) +\n          ('\\n. + ' + str(len(bad_nodes_by_cluster[c]) - MAX_NODES_TO_REPORT) +\n           ' more node(s)') *\n          (len(bad_nodes_by_cluster[c]) > MAX_NODES_TO_REPORT))\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/gke/err_2023_004_ingress_config.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GKE ingresses are well configured.\n\nVerify that the Google Kubernetes Engine ingresses are well configured.\nThis rule will run a command line tool check-gke-ingress to inspect the ingresses.\n\"\"\"\n\nimport json\nimport logging\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gke, kubectl\n\nexecutor_dict = {}\n\n\ndef prepare_rule(context: models.Context):\n  clusters = gke.get_clusters(context)\n  for _, c in sorted(clusters.items()):\n    executor = kubectl.get_kubectl_executor(c)\n    if executor is None:\n      continue\n    executor_dict[c] = executor\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n    return\n  for _, c in sorted(clusters.items()):\n    if c not in executor_dict:\n      report.add_skipped(c, 'failed to access k8s cluster')\n      continue\n    try:\n      stdout, stderr = kubectl.check_gke_ingress(executor_dict[c])\n    except FileNotFoundError as err:\n      logging.warning('Can not inspect Kubernetes resources: %s: %s',\n                      type(err).__name__, err)\n      report.add_skipped(c, 'failed to access k8s cluster')\n      continue\n\n    if stderr:\n      report.add_skipped(c,\n                         'failed to run kubectl check-gke-ingress: ' + stderr)\n      continue\n    result = json.loads(stdout)\n\n    failed = False\n    message = ''\n    for resource in result['resources']:\n      for check in resource['checks']:\n        if check['result'] == 'FAILED':\n          failed = True\n          message += kubectl.error_message(check['name'], resource['kind'],\n                                           resource['namespace'],\n                                           resource['name'], check['message'])\n    if not failed:\n      report.add_ok(c)\n    else:\n      report.add_failed(c, message[:-1])\n"
  },
  {
    "path": "gcpdiag/lint/gke/err_2023_005_gke_cni_issue.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Workloads not reporting misconfigured CNI plugins\n\nCNI plugins assist underlying Container Runtime Interface during\nsetup and tear down of pod networks.Kubelet logs during creation\nand deletion of pods may indicate issue with CNI plugin if pods are\nfailing.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.lint.gke import util\nfrom gcpdiag.queries import apis, gke, logs\n\nMATCH_STR_1 = 'CreatePodSandbox for pod failed'\nMATCH_STR_2 = 'failed to setup network for sandbox'\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  clusters = gke.get_clusters(context)\n  for project_id in {c.project_id for c in clusters.values()}:\n    logs_by_project[project_id] = logs.query(\n        project_id=project_id,\n        resource_type='k8s_node',\n        log_name='log_id(\"kubelet\")',\n        filter_str=f'jsonPayload.MESSAGE:\"{MATCH_STR_1}\"',\n    )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # Skip entire rule if Cloud Logging is disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(None, 'logging api is disabled')\n    return\n\n  # Any work to do?\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n\n  # Search the logs.\n  def filter_f(log_entry):\n    try:\n      if MATCH_STR_1 in log_entry['jsonPayload']['MESSAGE']:\n        if MATCH_STR_2 in log_entry['jsonPayload']['MESSAGE']:\n          return True\n    except KeyError:\n      return False\n\n  bad_nodes_by_cluster = util.gke_logs_find_bad_nodes(\n      context=context, logs_by_project=logs_by_project, filter_f=filter_f)\n\n  # Create the report.\n  for _, c in sorted(clusters.items()):\n    if c in bad_nodes_by_cluster:\n      report.add_failed(c)\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/gke/err_2023_006_gw_controller_annotation_error.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GKE Gateway controller reporting misconfigured annotations in Gateway resource\n\nGateway controller creates loadbalancing resources based on annotations\nspecified in gateway resources. It expects the user to use correct set of\nsupported annotations name and values.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.lint.gke import util\nfrom gcpdiag.queries import apis, gke, logs\n\nMATCH_STR = 'Error GWCER101: Annotation'\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  clusters = gke.get_clusters(context)\n  for project_id in {c.project_id for c in clusters.values()}:\n    logs_by_project[project_id] = logs.query(\n        project_id=project_id,\n        resource_type='k8s_cluster',\n        log_name='log_id(\"events\")',\n        filter_str=f'jsonPayload.message:\"{MATCH_STR}\"',\n    )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # Skip entire rule if Cloud Logging is disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(None, 'logging api is disabled')\n    return\n\n  # Any work to do?\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n\n  # Search the logs.\n  def filter_f(log_entry):\n    try:\n      if MATCH_STR in log_entry['jsonPayload']['message']:\n        return True\n    except KeyError:\n      return False\n\n  bad_nodes_by_cluster = util.gke_logs_find_bad_clusters(\n      context=context, logs_by_project=logs_by_project, filter_f=filter_f)\n\n  # Create the report\n  for _, c in sorted(clusters.items()):\n    if c in bad_nodes_by_cluster:\n      report.add_failed(c)\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/gke/err_2023_007_gw_controller_http_route_misconfig.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GKE Gateway controller reporting invalid HTTPRoute for Gateway\n\nGateway controller creates urls maps based on HTTPRoute resources.\nIf the HTTP route has invalid reference to gateway or invalid spec,\ncontroller will not be able create url maps.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.lint.gke import util\nfrom gcpdiag.queries import apis, gke, logs\n\nMATCH_STR = 'Error GWCER106: Gateway'\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  clusters = gke.get_clusters(context)\n  for project_id in {c.project_id for c in clusters.values()}:\n    logs_by_project[project_id] = logs.query(\n        project_id=project_id,\n        resource_type='k8s_cluster',\n        log_name='log_id(\"events\")',\n        filter_str=f'jsonPayload.message:\"{MATCH_STR}\"',\n    )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # Skip entire rule if Cloud Logging is disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(None, 'logging api is disabled')\n    return\n\n  # Any work to do?\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n\n  # Search the logs.\n  def filter_f(log_entry):\n    try:\n      if MATCH_STR in log_entry['jsonPayload']['message']:\n        return True\n    except KeyError:\n      return False\n\n  bad_nodes_by_cluster = util.gke_logs_find_bad_clusters(\n      context=context, logs_by_project=logs_by_project, filter_f=filter_f)\n\n  # Create the report\n  for _, c in sorted(clusters.items()):\n    if c in bad_nodes_by_cluster:\n      report.add_failed(c)\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/gke/err_2023_008_crashloopbackoff.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\" GKE Cluster does not have any pods in Crashloopbackoff state.\n\nCrashLoopBackOff indicates that a container is repeatedly crashing after restarting.\nA container might crash for many reasons, and checking a Pod's logs might aid in\ntroubleshooting the root cause.\n\"\"\"\nimport logging\nimport re\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.lint.gke import util\nfrom gcpdiag.queries import apis, gke, logs\n\nMATCH_STR = 'CrashLoopBackOff'\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  clusters = gke.get_clusters(context)\n  for project_id in {c.project_id for c in clusters.values()}:\n    logs_by_project[project_id] = logs.query(\n        project_id=project_id,\n        resource_type='k8s_node',\n        log_name='log_id(\"kubelet\")',\n        filter_str=f'jsonPayload.MESSAGE:\"{MATCH_STR}\"')\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(None, 'logging api is disabled')\n    return\n\n  # Any work to do?\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n    return\n\n  # Search the logs.\n  def filter_f(log_entry):\n    try:\n      return MATCH_STR in log_entry['jsonPayload']['MESSAGE']\n    except KeyError:\n      return False\n\n  bad_clusters = util.gke_logs_find_bad_clusters(\n      context=context, logs_by_project=logs_by_project, filter_f=filter_f)\n\n  for _, c in sorted(clusters.items()):\n    if c in bad_clusters:\n      pod_names = set()\n      for query in logs_by_project.values():\n        for log_entry in query.entries:\n          try:\n            log_cluster_name = log_entry['resource']['labels']['cluster_name']\n            log_cluster_location = log_entry['resource']['labels']['location']\n          except KeyError:\n            logging.warning(\n                'Skip: Failed to get cluster name/location from log entry %s',\n                log_entry)\n            continue\n\n          if (log_cluster_location == c.location and\n              log_cluster_name == c.name):\n            pod_name = re.search(r'pod=\\\"(.*?\\/.*?)-.*?\\\"',\n                                 log_entry['jsonPayload']['MESSAGE'])\n            if pod_name:\n              pod_names.add(pod_name.group(1))\n      report.add_failed(c,\n                        reason='Failing pods in namespace/workload: ' +\n                        ', '.join(pod_names))\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/gke/err_2023_009_missing_cpu_req.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"\nMissing request for CPU resources.\n\nError means that HPA is unable to calculate the number of replicas\nthat should be scaled up or down based on the current metrics\nbecause there is no request for CPU resources specified in the deployment\nor pod.The HPA requires at least one metric to be specified to scale the\ndeployment or replica set.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.lint.gke import util\nfrom gcpdiag.queries import apis, gke, logs\n\nMATCH_STR_1 = 'missing request for cpu'\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  clusters = gke.get_clusters(context)\n  for project_id in {c.project_id for c in clusters.values()}:\n    logs_by_project[project_id] = logs.query(\n        project_id=project_id,\n        resource_type='k8s_cluster',\n        log_name='log_id(\"events\")',\n        filter_str=f'jsonPayload.message:\"{MATCH_STR_1}\"',\n    )\n\n\ndef _filter_f(log_entry):\n  try:\n    return MATCH_STR_1 in log_entry['jsonPayload']['message']\n  except KeyError:\n    return False\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(None, 'logging api is disabled')\n    return\n  # Any work to do?\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n    # Search the logs.\n\n  bad_clusters = util.gke_logs_find_bad_clusters(\n      context=context, logs_by_project=logs_by_project, filter_f=_filter_f)\n  # Create the report.\n  for _, c in sorted(clusters.items()):\n    if c in bad_clusters:\n      report.add_failed(c, logs.format_log_entry(bad_clusters[c]))\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/gke/err_2023_010_nodelocal_timeout.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"\nNodeLocal DNSCache timeout errors.\n\nOn clusters with NodeLocal DNSCache enabled sometimes response to a DNS\nrequest was not received from kube-dns in 2 seconds and hence the DNS\ntimeout errors crop up.\n\"\"\"\nfrom gcpdiag import lint, models\nfrom gcpdiag.lint.gke import util\nfrom gcpdiag.queries import apis, gke, logs\n\nMATCH_STR_1 = '[ERROR] plugin/errors: 2'\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  clusters = gke.get_clusters(context)\n  for project_id in {c.project_id for c in clusters.values()}:\n    logs_by_project[project_id] = logs.query(\n        project_id=project_id,\n        resource_type='k8s_container',\n        log_name='log_id(\"stdout\")',\n        filter_str=f'textPayload:\"{MATCH_STR_1}\"',\n    )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(None, 'logging api is disabled')\n    return\n\n  # Any work to do?\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n\n    # Search the logs.\n  def filter_f(log_entry):\n    try:\n      if MATCH_STR_1 in log_entry['textPayload']:\n        return True\n    except KeyError:\n      return False\n\n  bad_clusters = util.gke_logs_find_bad_clusters(\n      context=context, logs_by_project=logs_by_project, filter_f=filter_f)\n\n  # Create the report.\n  for _, c in sorted(clusters.items()):\n    if c in bad_clusters:\n      report.add_failed(c, logs.format_log_entry(bad_clusters[c]))\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/gke/err_2023_011_wi_pod_ip_not_found.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GKE Metadata Server isn't reporting errors for pod IP not found.\n\nThe gke-metadata-server DaemonSet uses pod IP addresses to match client\nrequests to Kubernetes Service Accounts. Pod IP not found errors may indicate\na misconfiguration or a workload that is not compatible with GKE Workload Identity.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.lint.gke import util\nfrom gcpdiag.queries import crm, gce, gke, logs\n\nGKE_METADATA_SERVER_CONTAINER_NAME = 'gke-metadata-server'\nMATCH_STR = 'Unable to find pod: generic::not_found: retry budget exhausted'\nMATCH_STR_END = 'not recorded in the snapshot'\n\n# https://cloud.google.com/container-optimized-os/docs/how-to/logging\nGCE_METADATA_COS_LOGGING_ENABLED = 'google-logging-enabled'\nGCE_METADATA_COS_FLUENT_BIT = 'google-logging-use-fluentbit'\nCOS_LEGACY_AGENT_WARNING = \"\"\"Project metadata contains google-logging-enabled=true but not\ngoogle-logging-use-fluentbit=true. COS VMs before Milestone 109 will use the deprecated\nlegacy logging agent, which is not compatible with GKE Workload Identity.\nSee https://cloud.google.com/container-optimized-os/docs/how-to/logging\"\"\"\n\n# k8s_container\nmetadata_server_errors = {}\n\n\ndef prepare_rule(context: models.Context):\n  metadata_server_errors[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='k8s_container',\n      log_name='log_id(\"stderr\")',\n      filter_str='severity=ERROR AND '+\\\n      f'resource.labels.container_name=\"{GKE_METADATA_SERVER_CONTAINER_NAME}\"')\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n    return\n\n  # Check if GCP Project metadata is configured for legacy agent or fluent-bit\n  project_metadata = gce.get_project_metadata(context.project_id)\n  if project_metadata.get(GCE_METADATA_COS_LOGGING_ENABLED) == 'true' and \\\n    not project_metadata.get(GCE_METADATA_COS_FLUENT_BIT) == 'true':\n    report.add_failed(crm.get_project(context.project_id),\n                      COS_LEGACY_AGENT_WARNING)\n\n  # Search the logs.\n  def filter_f(log_entry):\n    try:\n      if log_entry['jsonPayload']['message'].endswith(\n          MATCH_STR_END) and MATCH_STR in log_entry['jsonPayload']['message']:\n        return True\n    except KeyError:\n      return False\n\n  clusters_with_errors = util.gke_logs_find_bad_clusters(\n      context=context,\n      logs_by_project=metadata_server_errors,\n      filter_f=filter_f)\n\n  for _, c in sorted(clusters.items()):\n    if not c.has_workload_identity_enabled():\n      report.add_skipped(c, 'GKE Workload Identity is disabled')\n    elif c in clusters_with_errors:\n      report.add_failed(c, logs.format_log_entry(clusters_with_errors[c]))\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/gke/err_2023_012_missing_mem_request.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"\nMissing request for memory resources.\n\nError means that HPA is unable to calculate the number of replicas\nthat should be scaled up or down based on the current metrics\nbecause there is no request for memory resources specified in the deployment\nor pod. The HPA requires at least one metric to be specified to scale the\ndeployment or replica set.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.lint.gke import util\nfrom gcpdiag.queries import apis, gke, logs\n\nMATCH_STR_1 = 'missing request for memory'\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  clusters = gke.get_clusters(context)\n  for project_id in {c.project_id for c in clusters.values()}:\n    logs_by_project[project_id] = logs.query(\n        project_id=project_id,\n        resource_type='k8s_cluster',\n        log_name='log_id(\"events\")',\n        filter_str=f'jsonPayload.message:\"{MATCH_STR_1}\"',\n    )\n\n\ndef _filter_f(log_entry):\n  try:\n    return MATCH_STR_1 in log_entry['jsonPayload']['message']\n  except KeyError:\n    return False\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(None, 'logging api is disabled')\n    return\n  # Any work to do?\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n    # Search the logs.\n\n  bad_clusters = util.gke_logs_find_bad_clusters(\n      context=context, logs_by_project=logs_by_project, filter_f=_filter_f)\n  # Create the report.\n  for _, c in sorted(clusters.items()):\n    if c in bad_clusters:\n      report.add_failed(c, logs.format_log_entry(bad_clusters[c]))\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/gke/err_2024_001_psa_violoations.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Checking for no Pod Security Admission violations in the project.\n\nVerify that there are no PSA violations in any namespace of any cluster in the\nproject.\nIf there are any violations inspect the logs to find what caused the violation\nand if required adjust the policy or pod manifest.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.lint.gke import util\nfrom gcpdiag.queries import apis, gke, logs\n\n_MATCH_STR = 'Forbidden'\n_LOG_RESOURCE_TYPE = 'k8s_cluster'\n_LOG_NAME = 'log_id(\"cloudaudit.googleapis.com/activity\")'\n_LOG_FILTER_STR = ('severity=DEFAULT AND ' +\n                   'protoPayload.response.message:\"violates PodSecurity\"')\n\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  clusters = gke.get_clusters(context)\n  for project_id in {c.project_id for c in clusters.values()}:\n    logs_by_project[project_id] = logs.query(\n        project_id=project_id,\n        resource_type=_LOG_RESOURCE_TYPE,\n        log_name=_LOG_NAME,\n        filter_str=_LOG_FILTER_STR,\n    )\n\n\ndef _filter_f(log_entry):\n  try:\n    return _MATCH_STR in log_entry['protoPayload']['response']['reason']\n  except KeyError:\n    return False\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # skip entire rule if logging is disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(None, 'logging api is disabled')\n    return\n\n  clusters = gke.get_clusters(context)\n\n  # Check: if no projects then skip\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n    return\n\n  # Check for Forbidden logs\n  bad_pods_by_cluster = util.gke_logs_find_bad_pods(\n      context=context, logs_by_project=logs_by_project, filter_f=_filter_f)\n\n  # Create the report.\n  for _, c in sorted(clusters.items()):\n    if c in bad_pods_by_cluster:\n      report.add_failed(\n          c,\n          'PodSecurity Admission policy violation identified for pods:\\n. ' +\n          '\\n. '.join(bad_pods_by_cluster[c]),\n      )\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/gke/err_2024_002_webhook_failure_no_endpoint.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GKE Webhook failures can seriously impact GKE Cluster.\n\nImpact typically depends on the webhook failure policy and what type of GKE API\nare handled by the webhook.\n\nIn some cases, a failing customer created webhook can render a cluster unusable\nuntil corrected. Inability to create Pod (and similar)can lead to system pod not\ngetting scheduled / new pod not reaching a healthy state.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.lint.gke import util\nfrom gcpdiag.queries import apis, gke, logs\n\n_MATCH_STR_1 = 'failed calling webhook'\n_MATCH_STR_2 = 'no endpoints available for service'\n\n# gce_instance, cloudaudit.googleapis.com/activity\ngke_logs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  clusters = gke.get_clusters(context)\n  for project_id in {c.project_id for c in clusters.values()}:\n    # k8s_cluster, api server logs\n    gke_logs_by_project[project_id] = logs.query(\n        project_id=project_id,\n        resource_type='k8s_cluster',\n        log_name='log_id(\"cloudaudit.googleapis.com/activity\")',\n        filter_str=f'protoPayload.response.message:\"{_MATCH_STR_1}\"')\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(None, 'logging api is disabled')\n    return\n\n  # Any work to do?\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n\n  # skip entire rule if no logs found\n  if not gke_logs_by_project:\n    report.add_skipped(None, 'no logs found')\n    return\n\n  # Process gke_logs_by_project and search for failed webhook calls\n  def filter_f(log_entry):\n    try:\n      if _MATCH_STR_1 in log_entry['protoPayload']['response']['message']:\n        return bool(\n            _MATCH_STR_2 in log_entry['protoPayload']['response']['message'])\n    except KeyError:\n      return False\n\n  bad_clusters = util.gke_logs_find_bad_clusters(\n      context=context, logs_by_project=gke_logs_by_project, filter_f=filter_f)\n\n  # Create the report.\n  for _, c in sorted(clusters.items()):\n    if c in bad_clusters:\n      report.add_failed(c, logs.format_log_entry(bad_clusters[c]))\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/gke/err_2024_003_default_node_serviceaccount_perm.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GKE nodes service account permissions fit container.defaultNodeServiceAccount role\n\nThe service account used by GKE nodes should possess the permissions of the\ncontainer.defaultNodeServiceAccount role, otherwise ingestion of logs or metrics\nwon't work.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gke, iam\n\nROLE = 'roles/container.defaultNodeServiceAccount'\n\n\ndef prefetch_rule(context: models.Context):\n  # Make sure that we have the IAM policy in cache.\n  project_ids = {c.project_id for c in gke.get_clusters(context).values()}\n  for pid in project_ids:\n    iam.get_project_policy(context.copy_with(project_id=pid))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # Find all clusters with logging and metrics enabled.\n  clusters = gke.get_clusters(context)\n  iam_policy = iam.get_project_policy(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n  for _, c in sorted(clusters.items()):\n    if not c.has_logging_enabled():\n      report.add_skipped(c, 'logging disabled')\n    elif not c.has_monitoring_enabled():\n      report.add_skipped(c, 'monitoring disabled')\n    else:\n      # Verify service-account permissions for every nodepool.\n      for np in c.nodepools:\n        sa = np.service_account\n        if not iam_policy.has_role_permissions(f'serviceAccount:{sa}', ROLE):\n          report.add_failed(np, f'service account: {sa}\\nmissing role: {ROLE}')\n        else:\n          report.add_ok(np)\n"
  },
  {
    "path": "gcpdiag/lint/gke/err_2025_001_serial_port_logging.py",
    "content": "# Copyright 2025 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\" GKE cluster complies with the serial port logging organization policy.\n\nWhen the constraints/compute.disableSerialPortLogging policy is enabled,\nGKE clusters must be created with logging disabled (serial-port-logging-enable: 'false'),\notherwise the creation of new nodes in Nodepool will fail.\n\"\"\"\n\nfrom typing import List\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gke, orgpolicy\n\n\ndef get_non_compliant_pools(cluster: gke.Cluster) -> List[str]:\n  \"\"\"\n        Checks if org serial port logging policy is enforced and if cluster complies with it.\n\n        Args:\n            cluster: The GKE cluster to check.\n\n        Returns:\n            List[str]: List of non-compliant nodepool names\n        \"\"\"\n  # Get the policy constraint status\n  constraint = orgpolicy.get_effective_org_policy(\n      cluster.project_id, 'constraints/compute.disableSerialPortLogging')\n\n  # If policy is not enforced, return None (no compliance check needed) and empty list\n  if not isinstance(\n      constraint,\n      orgpolicy.BooleanPolicyConstraint) or not constraint.is_enforced():\n    return []\n\n  # Get cluster node pools\n  return [\n      nodepool.name\n      for nodepool in cluster.nodepools\n      if nodepool.config.has_serial_port_logging_enabled\n  ]\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'No clusters found')\n    return\n\n  for cluster in clusters.values():\n    # Skip Autopilot clusters as they are managed by Google\n    if cluster.is_autopilot:\n      report.add_skipped(\n          cluster,\n          'Skipping Autopilot cluster - serial port logging managed by Google')\n      continue\n\n    # find list of non compliant node pools.\n    non_compliant_pools = get_non_compliant_pools(cluster)\n    if not non_compliant_pools:\n      report.add_ok(cluster)\n    else:\n      report.add_failed(\n          cluster,\n          'The following nodepools do not comply with the serial port logging org policy:\\n. '\n          + '\\n. '.join(non_compliant_pools),\n      )\n"
  },
  {
    "path": "gcpdiag/lint/gke/gke_rules_snapshot_test.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\" Generalize rule snapshot testing \"\"\"\n\nfrom gcpdiag.lint import gke, snapshot_test_base\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = gke\n  project_id = 'gcpdiag-gke1-aaaa'\n"
  },
  {
    "path": "gcpdiag/lint/gke/sec_2021_001_np_uses_default_sa.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GKE nodes don't use the GCE default service account.\n\nThe GCE default service account has more permissions than are required to run\nyour Kubernetes Engine cluster. You should either use GKE Workload Identity or\ncreate and use a minimally privileged service account.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gke\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # Find all clusters.\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n    return\n\n  for _, c in sorted(clusters.items()):\n    # Verify service-account for every standard nodepool.\n    for np in c.nodepools:\n      if np.has_workload_identity_enabled():\n        report.add_skipped(np, 'workload identity enabled')\n      elif np.has_default_service_account():\n        report.add_failed(np, 'node pool uses the GCE default service account')\n      else:\n        report.add_ok(np)\n"
  },
  {
    "path": "gcpdiag/lint/gke/sec_2023_001_worload_id.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GKE Workload Identity is enabled\n\nWorkload Identity is the recommended way for your workloads running on\nGoogle Kubernetes Engine (GKE) to access Google Cloud services in a secure\nand manageable way. It lets you assign distinct, fine-grained identities\nand authorization for each application in your cluster.\nThe sensitive node's metadata is also protected by Workload Identity.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gke\n\nclusters_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  clusters_by_project[context.project_id] = gke.get_clusters(context)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  clusters = clusters_by_project[context.project_id]\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n  for _, c in sorted(clusters.items()):\n    if c.is_autopilot or c.has_workload_identity_enabled():\n      report.add_ok(c)\n    else:\n      report.add_failed(c)\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/BP_2021_001.txt",
    "content": "*  gke/BP/2021_001: GKE logging and monitoring enabled.\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2      [FAIL]\n     workload logs are disabled\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3      [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1        [FAIL]\n     logging and monitoring are disabled\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4        [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6        [ OK ]\n\n   Disabling either one of logging (SYSTEM, WORKLOADS) and monitoring (aka \"GKE\n   Cloud Operations\") impacts the ability to effectively and efficiently\n   troubleshoot cluster issues.\n\n   https://gcpdiag.dev/rules/gke/BP/2021_001\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/BP_2022_001.txt",
    "content": "*  gke/BP/2022_001: GKE clusters are regional.\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2      [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3      [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1        [FAIL]\n      is not regional\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4        [FAIL]\n      is not regional\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6        [FAIL]\n      is not regional\n\n   The availability of regional clusters (both control plane and nodes) is\n   higher for regional clusters as they are replicated across zones in the\n   region. It is recommended to use regional clusters for the production\n   workload.\n\n   https://gcpdiag.dev/rules/gke/BP/2022_001\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/BP_2022_002.txt",
    "content": "*  gke/BP/2022_002: GKE clusters are using unique subnets.\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1        [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4        [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6        [FAIL]\n     Subnet \"gcpdiag-gke1-aaaa/default\" is used by \"gcpdiag-gke1-aaaa/europe-west4-a/gke4\" cluster\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [FAIL]\n     Subnet \"gcpdiag-gke1-aaaa/default\" is used by \"gcpdiag-gke1-aaaa/europe-west4-a/gke4\" cluster\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [FAIL]\n     Subnet \"gcpdiag-gke1-aaaa/default\" is used by \"gcpdiag-gke1-aaaa/europe-west4-a/gke4\" cluster\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2      [FAIL]\n     Subnet \"gcpdiag-gke1-aaaa/default\" is used by \"gcpdiag-gke1-aaaa/europe-west4-a/gke4\" cluster\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3      [FAIL]\n     Subnet \"gcpdiag-gke1-aaaa/default\" is used by \"gcpdiag-gke1-aaaa/europe-west4-a/gke4\" cluster\n\n   Verify that the Google Kubernetes Engine clusters are not sharing subnets. It\n   is recommended to use unique subnet for each cluster.  Keep in mind that\n   subnets may be also reused in other projects.\n\n   https://gcpdiag.dev/rules/gke/BP/2022_002\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/BP_2022_003.txt",
    "content": "*  gke/BP/2022_003: GKE cluster is not near to end of life\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [SKIP]\n     release channel: REGULAR\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [SKIP]\n     release channel: REGULAR\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2      [FAIL]\n     GKE version 1.24 scheduled end of life: already reached EOL\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3      [SKIP]\n     release channel: REGULAR\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1        [FAIL]\n     GKE version 1.25 scheduled end of life: 2024-02-06 (estimation)\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4        [SKIP]\n     release channel: REGULAR\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6        [SKIP]\n     release channel: REGULAR\n\n   The GKE clusters should be updated regularly. It is recommended to keep your\n   GKE cluster version up to date and avoid reaching end of life.  Rule will\n   start failing if scheduled end of life is in less than 30 days.\n\n   https://gcpdiag.dev/rules/gke/BP/2022_003\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/BP_2022_004.txt",
    "content": "*  gke/BP/2022_004: Enable http load balancing on clusters to use GKE ingress and container-native load balancing.\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2      [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3      [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1        [FAIL]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4        [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6        [ OK ]\n\n   If this is disabled GKE ingresses will be stuck in the creating state.\n   Similarly if this is disabled after GKE ingresses have been created but\n   before they are deleted the GKE ingresses will be stuck in the deleting\n   state.\n\n   https://gcpdiag.dev/rules/gke/BP/2022_004\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/BP_2023_001.txt",
    "content": "*  gke/BP/2023_001: GKE network policy minimum requirements\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [SKIP]\n     Dataplane V2 is enabled in the cluster\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [SKIP]\n     Dataplane V2 is enabled in the cluster\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2      [SKIP]\n     network policy enforcement is disabled in the cluster\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3      [SKIP]\n     network policy enforcement is disabled in the cluster\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1        [SKIP]\n     network policy enforcement is disabled in the cluster\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4        [SKIP]\n     network policy enforcement is disabled in the cluster\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6        [SKIP]\n     network policy enforcement is disabled in the cluster\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/BP_2023_002.txt",
    "content": "*  gke/BP/2023_002: Stateful workloads not run on preemptible node\n   (Error: 'bool' object is not callable)                                 [SKIP]\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/BP_2023_004.txt",
    "content": "*  gke/BP/2023_004: GKE clusters are VPC-native.\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2      [FAIL]\n      is not VPC-native\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3      [FAIL]\n      is not VPC-native\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1        [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4        [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6        [FAIL]\n      is not VPC-native\n\n   It's recommended to use VPC-native clusters. VPC-native clusters use alias IP\n   address ranges on GKE nodes and are required for private GKE clusters and for\n   creating clusters on Shared VPCs, as well as many other features.  VPC-native\n   clusters scale more easily than routes-based clusters without consuming\n   Google Cloud routes and so are less susceptible to hitting routing limits.\n\n   https://gcpdiag.dev/rules/gke/BP/2023_004\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/BP_2023_005.txt",
    "content": "*  gke/BP/2023_005: Enable gateway resources through Gateway API.\n   (logging api is disabled)                                              [SKIP]\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/BP_2025_001.txt",
    "content": "*  gke/BP/2025_001: GKE clusters should have NodeLocal DNSCache enabled.\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [SKIP]\n     NodeLocal DNSCache is default in Autopilot\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [SKIP]\n     NodeLocal DNSCache is default in Autopilot\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2      [FAIL]\n     NodeLocal DNSCache is not enabled.\n     Enable it to improve DNS performance and reliability.\n     You can enable it with the command:\n       gcloud container clusters update gke2 --location=europe-west4 --update-addons=NodeLocalDNS=ENABLED\n     See also: https://cloud.google.com/kubernetes-engine/docs/how-to/nodelocal-dns-cache\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3      [FAIL]\n     NodeLocal DNSCache is not enabled.\n     Enable it to improve DNS performance and reliability.\n     You can enable it with the command:\n       gcloud container clusters update gke3 --location=europe-west4 --update-addons=NodeLocalDNS=ENABLED\n     See also: https://cloud.google.com/kubernetes-engine/docs/how-to/nodelocal-dns-cache\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1        [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4        [FAIL]\n     NodeLocal DNSCache is not enabled.\n     Enable it to improve DNS performance and reliability.\n     You can enable it with the command:\n       gcloud container clusters update gke4 --location=europe-west4-a --update-addons=NodeLocalDNS=ENABLED\n     See also: https://cloud.google.com/kubernetes-engine/docs/how-to/nodelocal-dns-cache\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6        [FAIL]\n     NodeLocal DNSCache is not enabled.\n     Enable it to improve DNS performance and reliability.\n     You can enable it with the command:\n       gcloud container clusters update gke6 --location=europe-west4-a --update-addons=NodeLocalDNS=ENABLED\n     See also: https://cloud.google.com/kubernetes-engine/docs/how-to/nodelocal-dns-cache\n\n   NodeLocal DNSCache improves DNS reliability and performance within the\n   cluster by running a local DNS cache on each node. This reduces latency and\n   load on kube-dns. It is a recommended best practice for most Standard\n   clusters. Autopilot clusters have this enabled by default.\n\n   https://gcpdiag.dev/rules/gke/BP/2025_001\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/BP_EXT_2022_001.txt",
    "content": "*  gke/BP_EXT/2022_001: Google Groups for RBAC enabled.\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [FAIL]\n      does not have Google Groups for RBAC enabled\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [FAIL]\n      does not have Google Groups for RBAC enabled\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2      [FAIL]\n      does not have Google Groups for RBAC enabled\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3      [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1        [FAIL]\n      does not have Google Groups for RBAC enabled\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4        [FAIL]\n      does not have Google Groups for RBAC enabled\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6        [FAIL]\n      does not have Google Groups for RBAC enabled\n\n   Enable Google Groups for RBAC so cluster administrators do not need to manage\n   permissions manually for each user on the cluster and so Workspace\n   administrators can manage user accounts, such as revoking access when someone\n   leaves your organization.\n\n   https://gcpdiag.dev/rules/gke/BP_EXT/2022_001\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/BP_EXT_2023_001.txt",
    "content": "*  gke/BP_EXT/2023_001: GKE maintenance windows are defined\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [FAIL]\n      does not configure a maintenance window\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [FAIL]\n      does not configure a maintenance window\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2      [FAIL]\n      does not configure a maintenance window\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3      [FAIL]\n      does not configure a maintenance window\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1        [FAIL]\n      does not configure a maintenance window\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4        [FAIL]\n      does not configure a maintenance window\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6        [ OK ]\n\n   Maintenance windows give you fine-grained control over when automatic\n   maintenance can occur on GKE clusters. They allow administrators to control\n   the timing and impact of these updates, ensuring minimal disruption to\n   running workloads.\n\n   https://gcpdiag.dev/rules/gke/BP_EXT/2023_001\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/BP_EXT_2023_002.txt",
    "content": "*  gke/BP_EXT/2023_002: GKE clusters are private clusters.\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [FAIL]\n      is a public cluster\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2      [FAIL]\n      is a public cluster\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3      [FAIL]\n      is a public cluster\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1        [FAIL]\n      is a public cluster\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4        [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6        [FAIL]\n      is a public cluster\n\n   A private cluster is a type of VPC-native cluster that only depends on\n   internal IP addresses. Nodes, Pods, and Services in a private cluster require\n   unique subnet IP address ranges.  Private clusters are used when the\n   applications and services are needed to be isolated from the outside\n   connections completely. This ensures the workloads are private and not\n   exposed to untrusted sources.\n\n   https://gcpdiag.dev/rules/gke/BP_EXT/2023_002\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/ERR_2021_001.txt",
    "content": "*  gke/ERR/2021_001: GKE nodes service account permissions for logging.\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/default-pool [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/low-pod-per-node-pool [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3/nodePools/default-pool [FAIL]\n     service account: gke3sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com\n     missing role: roles/logging.logWriter\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1        [SKIP]\n     logging disabled\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4/nodePools/default-pool [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6/nodePools/default-pool [ OK ]\n\n   The service account used by GKE nodes should have the logging.logWriter role,\n   otherwise ingestion of logs won't work.\n\n   https://gcpdiag.dev/rules/gke/ERR/2021_001\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/ERR_2021_002.txt",
    "content": "*  gke/ERR/2021_002: GKE nodes service account permissions for monitoring.\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/default-pool [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/low-pod-per-node-pool [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3/nodePools/default-pool [FAIL]\n     service account: gke3sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com\n     missing role: roles/monitoring.metricWriter\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1        [SKIP]\n     monitoring disabled\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4/nodePools/default-pool [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6/nodePools/default-pool [ OK ]\n\n   The service account used by GKE nodes should have the monitoring.metricWriter\n   role, otherwise ingestion of metrics won't work.\n\n   https://gcpdiag.dev/rules/gke/ERR/2021_002\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/ERR_2021_003.txt",
    "content": "*  gke/ERR/2021_003: App-layer secrets encryption is activated and Cloud KMS key is enabled.\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [SKIP]\n     App-layer secrets encryption isn't enabled\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [SKIP]\n     App-layer secrets encryption isn't enabled\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2      [SKIP]\n     App-layer secrets encryption isn't enabled\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3      [SKIP]\n     App-layer secrets encryption isn't enabled\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1        [SKIP]\n     App-layer secrets encryption isn't enabled\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4        [SKIP]\n     App-layer secrets encryption isn't enabled\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6        [SKIP]\n     App-layer secrets encryption isn't enabled\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/ERR_2021_004.txt",
    "content": "*  gke/ERR/2021_004: GKE nodes aren't reporting connection issues to apiserver.\n   (logging api is disabled)                                              [SKIP]\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/ERR_2021_005.txt",
    "content": "*  gke/ERR/2021_005: GKE nodes aren't reporting connection issues to storage.google.com.\n   (logging api is disabled)                                              [SKIP]\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/ERR_2021_006.txt",
    "content": "*  gke/ERR/2021_006: GKE Autoscaler isn't reporting scaleup failures.\n   (logging api is disabled)                                              [SKIP]\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/ERR_2021_007.txt",
    "content": "*  gke/ERR/2021_007: GKE service account permissions.\n   - projects/gcpdiag-gke1-aaaa                                           [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/ERR_2021_008.txt",
    "content": "*  gke/ERR/2021_008: Google APIs service agent has Editor role.\n   - projects/gcpdiag-gke1-aaaa                                           [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/ERR_2021_009.txt",
    "content": "*  gke/ERR/2021_009: Version skew between cluster and node pool.\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/default-pool [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/low-pod-per-node-pool [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3/nodePools/default-pool [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1/nodePools/default-pool [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4/nodePools/default-pool [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6/nodePools/default-pool [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/ERR_2021_010.txt",
    "content": "*  gke/ERR/2021_010: Check internal peering forwarding limits which affect GKE.\n   (logging api is disabled)                                              [SKIP]\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/ERR_2021_011.txt",
    "content": "*  gke/ERR/2021_011: ip-masq-agent not reporting errors\n   (logging api is disabled)                                              [SKIP]\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/ERR_2021_012.txt",
    "content": "*  gke/ERR/2021_012: Node pool service account exists and not is disabled.\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/default-pool [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/low-pod-per-node-pool [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3/nodePools/default-pool [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1/nodePools/default-pool [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4/nodePools/default-pool [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6/nodePools/default-pool [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/ERR_2021_013.txt",
    "content": "*  gke/ERR/2021_013: GKE cluster firewall rules are configured.\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2      [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3      [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1        [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4        [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6        [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/ERR_2021_014.txt",
    "content": "*  gke/ERR/2021_014: GKE masters of private clusters can reach the nodes.\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [SKIP]\n     no nodepools\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [SKIP]\n     no nodepools\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2      [SKIP]\n     public cluster\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3      [SKIP]\n     public cluster\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1        [SKIP]\n     public cluster\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4        [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6        [SKIP]\n     public cluster\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/ERR_2021_015.txt",
    "content": "*  gke/ERR/2021_015: GKE connectivity: node to pod communication.\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [SKIP]\n     no nodepools\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [SKIP]\n     no nodepools\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2      [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3      [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1        [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4        [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6        [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/ERR_2022_001.txt",
    "content": "*  gke/ERR/2022_001: GKE connectivity: pod to pod communication.\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [SKIP]\n     no nodepools\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [SKIP]\n     no nodepools\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2      [FAIL]\n     connections from 10.4.0.0/14 to tcp:53 blocked by None (node pool: default-pool)\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3      [FAIL]\n     connections from 10.1.0.0/19 to tcp:53 blocked by None (node pool: default-pool)\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1        [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4        [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6        [FAIL]\n     connections from 10.12.0.0/14 to tcp:53 blocked by None (node pool: default-pool)\n\n   Traffic between all pods on a cluster is required by the Kubernetes\n   networking model. Following protocols must be allowed: TCP, UDP, SCTP, ICMP,\n   ESP, AH.\n\n   https://gcpdiag.dev/rules/gke/ERR/2022_001\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/ERR_2022_002.txt",
    "content": "*  gke/ERR/2022_002: GKE nodes of private clusters can access Google APIs and services.\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2      [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3      [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1        [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4        [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6        [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/ERR_2022_003.txt",
    "content": "*  gke/ERR/2022_003: GKE connectivity: load balancer to node communication (ingress).\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/default-pool [FAIL]\n     connections from 130.211.0.0/22 to port 30000 blocked by None\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/default-pool [FAIL]\n     connections from 130.211.0.0/22 to port 8080 blocked by None\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/low-pod-per-node-pool [FAIL]\n     connections from 130.211.0.0/22 to port 30000 blocked by None\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/low-pod-per-node-pool [FAIL]\n     connections from 130.211.0.0/22 to port 8080 blocked by None\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3/nodePools/default-pool [FAIL]\n     connections from 130.211.0.0/22 to port 30000 blocked by None\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3/nodePools/default-pool [FAIL]\n     connections from 130.211.0.0/22 to port 8080 blocked by None\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1/nodePools/default-pool [SKIP]\n     no ingress detected\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4/nodePools/default-pool [FAIL]\n     connections from 35.191.0.0/16 to port 8080 blocked by vpc firewall rule: gke-gke4-ingress-test-deny\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6/nodePools/default-pool [FAIL]\n     connections from 130.211.0.0/22 to port 30000 blocked by None\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6/nodePools/default-pool [FAIL]\n     connections from 130.211.0.0/22 to port 8080 blocked by None\n\n   In order for the Ingress service to work correctly, the network connection\n   from the load balancer must be allowed.\n\n   https://gcpdiag.dev/rules/gke/ERR/2022_003\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/ERR_2023_001.txt",
    "content": "*  gke/ERR/2023_001: Container File System API quota not exceeded\n   (logging api is disabled)                                              [SKIP]\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/ERR_2023_002.txt",
    "content": "*  gke/ERR/2023_002: GKE private clusters are VPC-native.\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2      [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3      [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1        [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4        [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6        [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/ERR_2023_003.txt",
    "content": "*  gke/ERR/2023_003: containerd config.toml is valid\n   (logging api is disabled)                                              [SKIP]\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/ERR_2023_004.txt",
    "content": "*  gke/ERR/2023_004: GKE ingresses are well configured.\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [FAIL]\n     Check rule BackendConfigExistenceCheck on Ingress default/ingress-1 failed: BackendConfig default/my-backendconfig in service default/svc-1 does not exist\n     Check rule ServiceExistenceCheck on Ingress default/ingress-2 failed: Service default/svc-2 does not exist\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [SKIP]\n     failed to access k8s cluster\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2      [SKIP]\n     failed to access k8s cluster\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3      [SKIP]\n     failed to access k8s cluster\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1        [SKIP]\n     failed to access k8s cluster\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4        [SKIP]\n     failed to access k8s cluster\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6        [SKIP]\n     failed to access k8s cluster\n\n   Verify that the Google Kubernetes Engine ingresses are well configured. This\n   rule will run a command line tool check-gke-ingress to inspect the ingresses.\n\n   https://gcpdiag.dev/rules/gke/ERR/2023_004\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/ERR_2023_005.txt",
    "content": "*  gke/ERR/2023_005: Workloads not reporting misconfigured CNI plugins\n   (logging api is disabled)                                              [SKIP]\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/ERR_2023_006.txt",
    "content": "*  gke/ERR/2023_006: GKE Gateway controller reporting misconfigured annotations in Gateway resource\n   (logging api is disabled)                                              [SKIP]\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/ERR_2023_007.txt",
    "content": "*  gke/ERR/2023_007: GKE Gateway controller reporting invalid HTTPRoute for Gateway\n   (logging api is disabled)                                              [SKIP]\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/ERR_2023_008.txt",
    "content": "*  gke/ERR/2023_008: GKE Cluster does not have any pods in Crashloopbackoff state.\n   (logging api is disabled)                                              [SKIP]\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/ERR_2023_009.txt",
    "content": "*  gke/ERR/2023_009: Missing request for CPU resources.\n   (logging api is disabled)                                              [SKIP]\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/ERR_2023_010.txt",
    "content": "*  gke/ERR/2023_010: NodeLocal DNSCache timeout errors.\n   (logging api is disabled)                                              [SKIP]\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/ERR_2023_011.txt",
    "content": "*  gke/ERR/2023_011: GKE Metadata Server isn't reporting errors for pod IP not found.\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2      [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3      [SKIP]\n     GKE Workload Identity is disabled\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1        [SKIP]\n     GKE Workload Identity is disabled\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4        [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6        [SKIP]\n     GKE Workload Identity is disabled\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/ERR_2023_012.txt",
    "content": "*  gke/ERR/2023_012: Missing request for memory resources.\n   (logging api is disabled)                                              [SKIP]\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/ERR_2024_001.txt",
    "content": "*  gke/ERR/2024_001: Checking for no Pod Security Admission violations in the project.\n   (logging api is disabled)                                              [SKIP]\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/ERR_2024_002.txt",
    "content": "*  gke/ERR/2024_002: GKE Webhook failures can seriously impact GKE Cluster.\n   (logging api is disabled)                                              [SKIP]\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/ERR_2024_003.txt",
    "content": "*  gke/ERR/2024_003: GKE nodes service account permissions fit container.defaultNodeServiceAccount role\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/default-pool [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/low-pod-per-node-pool [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3/nodePools/default-pool [FAIL]\n     service account: gke3sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com\n     missing role: roles/container.defaultNodeServiceAccount\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1        [SKIP]\n     logging disabled\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4/nodePools/default-pool [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6/nodePools/default-pool [ OK ]\n\n   The service account used by GKE nodes should possess the permissions of the\n   container.defaultNodeServiceAccount role, otherwise ingestion of logs or\n   metrics won't work.\n\n   https://gcpdiag.dev/rules/gke/ERR/2024_003\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/ERR_2025_001.txt",
    "content": "*  gke/ERR/2025_001: GKE cluster complies with the serial port logging organization policy.\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [SKIP]\n     Skipping Autopilot cluster - serial port logging managed by Google\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [SKIP]\n     Skipping Autopilot cluster - serial port logging managed by Google\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2      [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3      [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1        [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4        [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6        [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/SEC_2021_001.txt",
    "content": "*  gke/SEC/2021_001: GKE nodes don't use the GCE default service account.\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/default-pool [SKIP]\n     workload identity enabled\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/low-pod-per-node-pool [SKIP]\n     workload identity enabled\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3/nodePools/default-pool [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1/nodePools/default-pool [FAIL]\n     node pool uses the GCE default service account\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4/nodePools/default-pool [SKIP]\n     workload identity enabled\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6/nodePools/default-pool [FAIL]\n     node pool uses the GCE default service account\n\n   The GCE default service account has more permissions than are required to run\n   your Kubernetes Engine cluster. You should either use GKE Workload Identity\n   or create and use a minimally privileged service account.\n\n   https://gcpdiag.dev/rules/gke/SEC/2021_001\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/SEC_2023_001.txt",
    "content": "*  gke/SEC/2023_001: GKE Workload Identity is enabled\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2      [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3      [FAIL]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1        [FAIL]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4        [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6        [FAIL]\n\n   Workload Identity is the recommended way for your workloads running on Google\n   Kubernetes Engine (GKE) to access Google Cloud services in a secure and\n   manageable way. It lets you assign distinct, fine-grained identities and\n   authorization for each application in your cluster. The sensitive node's\n   metadata is also protected by Workload Identity.\n\n   https://gcpdiag.dev/rules/gke/SEC/2023_001\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/WARN_2021_001.txt",
    "content": "*  gke/WARN/2021_001: GKE master version available for new clusters.\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [SKIP]\n     release channel: REGULAR\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [SKIP]\n     release channel: REGULAR\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2      [ OK ] 1.24.10-gke.2300\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3      [SKIP]\n     release channel: REGULAR\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1        [ OK ] 1.25.7-gke.1000\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4        [SKIP]\n     release channel: REGULAR\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6        [SKIP]\n     release channel: REGULAR\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/WARN_2021_002.txt",
    "content": "*  gke/WARN/2021_002: GKE nodes version available for new clusters.\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [SKIP]\n     release channel: REGULAR\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [SKIP]\n     release channel: REGULAR\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/default-pool [ OK ] 1.24.10-gke.2300\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/low-pod-per-node-pool [ OK ] 1.24.10-gke.2300\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3      [SKIP]\n     release channel: REGULAR\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1/nodePools/default-pool [ OK ] 1.25.7-gke.1000\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4        [SKIP]\n     release channel: REGULAR\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6        [SKIP]\n     release channel: REGULAR\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/WARN_2021_003.txt",
    "content": "*  gke/WARN/2021_003: GKE pod CIDR range utilization close to 100%.\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2      [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3      [FAIL]\n     10.1.0.0/19(94% IPs used): all node pools\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1        [FAIL]\n     192.168.1.0/24(100% IPs used): default-pool\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4        [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6        [ OK ]\n\n   The maximum amount of nodes in a GKE cluster is limited based on its pod CIDR\n   range. This test checks if any of the pod CIDRs in use in the cluster has 80%\n   or more utilization. Note, this is limited to a single cluster although the\n   pod CIDR can be shared across clusters. Enable the network management API to\n   see GKE IP address utilization insights in Network Analyzer.\n\n   https://gcpdiag.dev/rules/gke/WARN/2021_003\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/WARN_2021_004.txt",
    "content": "*  gke/WARN/2021_004: GKE system workloads are running stable.\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2      [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3      [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1        [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4        [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6        [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/WARN_2021_005.txt",
    "content": "*  gke/WARN/2021_005: GKE nodes have good disk performance.\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [SKIP]\n     no data\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [SKIP]\n     no data\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2      [SKIP]\n     no data\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3      [SKIP]\n     no data\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1        [SKIP]\n     no data\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4        [SKIP]\n     no data\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6        [SKIP]\n     no data\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/WARN_2021_006.txt",
    "content": "*  gke/WARN/2021_006: GKE nodes aren't reporting conntrack issues.\n   (logging api is disabled)                                              [SKIP]\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/WARN_2021_007.txt",
    "content": "*  gke/WARN/2021_007: GKE nodes have enough free space on the boot disk.\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [SKIP]\n     no data\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [SKIP]\n     no data\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2      [SKIP]\n     no data\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3      [SKIP]\n     no data\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1        [SKIP]\n     no data\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4        [SKIP]\n     no data\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6        [SKIP]\n     no data\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/WARN_2021_008.txt",
    "content": "*  gke/WARN/2021_008: Istio/ASM version not deprecated nor close to deprecation in GKE\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [ OK ] GKE 1.24.10-gke.2300\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [ OK ] GKE 1.24.10-gke.2300\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2      [ OK ] GKE 1.24.10-gke.2300\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3      [ OK ] GKE 1.25.7-gke.1000\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1        [ OK ] GKE 1.25.7-gke.1000\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4        [ OK ] GKE 1.24.10-gke.2300\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6        [ OK ] GKE 1.25.7-gke.1000\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/WARN_2021_009.txt",
    "content": "*  gke/WARN/2021_009: GKE nodes use a containerd image.\n   (no nodepools found)                                                   [SKIP]\n   (no nodepools found)                                                   [SKIP]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/default-pool [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/low-pod-per-node-pool [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3/nodePools/default-pool [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1/nodePools/default-pool [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4/nodePools/default-pool [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6/nodePools/default-pool [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/WARN_2022_001.txt",
    "content": "*  gke/WARN/2022_001: GKE clusters with workload identity are regional.\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2      [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3      [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1        [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4        [FAIL]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6        [ OK ]\n\n   Workload Identity is highly dependent of the availability of the cluster\n   control plane during token fetches. It is recommended to use regional\n   clusters for the production workload with Workload Identity enabled.\n\n   https://gcpdiag.dev/rules/gke/WARN/2022_001\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/WARN_2022_002.txt",
    "content": "*  gke/WARN/2022_002: GKE metadata concealment is not in use\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/default-pool [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/low-pod-per-node-pool [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3/nodePools/default-pool [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1/nodePools/default-pool [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4/nodePools/default-pool [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6/nodePools/default-pool [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/WARN_2022_003.txt",
    "content": "*  gke/WARN/2022_003: GKE service account permissions to manage project VPC firewall rules.\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2      [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3      [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1        [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4        [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6        [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/WARN_2022_004.txt",
    "content": "*  gke/WARN/2022_004: Cloud Logging API enabled when GKE logging is enabled\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [FAIL]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [FAIL]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2      [FAIL]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3      [FAIL]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1        [SKIP]\n     GKE logging is disabled\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4        [FAIL]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6        [FAIL]\n\n   If Cloud Logging API is disabled, while GKE logging is enabled the Workload\n   and Node logs won't be ingested, and thus, won't be visible in Logs Explorer.\n\n   https://gcpdiag.dev/rules/gke/WARN/2022_004\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/WARN_2022_005.txt",
    "content": "*  gke/WARN/2022_005: NVIDIA GPU device drivers are installed on GKE nodes with GPU\n   (no nodepools found)                                                   [SKIP]\n   (no nodepools found)                                                   [SKIP]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/default-pool [SKIP]\n     no nodes with GPU found\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/low-pod-per-node-pool [SKIP]\n     no nodes with GPU found\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3/nodePools/default-pool [SKIP]\n     no nodes with GPU found\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1        [SKIP]\n     monitoring disabled\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4/nodePools/default-pool [SKIP]\n     no nodes with GPU found\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6        [FAIL]\n     The DaemonSet of nvidia-driver-installer is not found in the GKE cluster.\n\n   After adding GPU nodes to the GKE cluster, the NVIDIA's device drivers should\n   be installed in the nodes. Google provides a DaemonSet that will install the\n   drivers.\n\n   https://gcpdiag.dev/rules/gke/WARN/2022_005\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/WARN_2022_006.txt",
    "content": "*  gke/WARN/2022_006: GKE NAP nodes use a containerd image.\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [ OK ] Node Type: COS_CONTAINERD\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [ OK ] Node Type: COS_CONTAINERD\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2      [SKIP]\n     Node Auto Provisioning Disabled\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3      [SKIP]\n     Node Auto Provisioning Disabled\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1        [SKIP]\n     Node Auto Provisioning Disabled\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4        [SKIP]\n     Node Auto Provisioning Disabled\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6        [SKIP]\n     Node Auto Provisioning Disabled\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/WARN_2022_007.txt",
    "content": "*  gke/WARN/2022_007: GKE nodes have Storage API access scope to retrieve build artifacts\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/default-pool [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/low-pod-per-node-pool [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3/nodePools/default-pool [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1/nodePools/default-pool [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4/nodePools/default-pool [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6/nodePools/default-pool [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/WARN_2022_008.txt",
    "content": "*  gke/WARN/2022_008: GKE connectivity: possible dns timeout in some gke versions.\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [ OK ] gke version >= 1.23 unaffected\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [ OK ] gke version >= 1.23 unaffected\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2      [ OK ] intra node visibility disabled -> unaffected\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3      [ OK ] intra node visibility disabled -> unaffected\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1        [ OK ] intra node visibility disabled -> unaffected\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4        [ OK ] intra node visibility disabled -> unaffected\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6        [ OK ] intra node visibility disabled -> unaffected\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/WARN_2023_001.txt",
    "content": "*  gke/WARN/2023_001: Container File System has the required scopes for Image Streaming\n   (logging api is disabled)                                              [SKIP]\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/WARN_2023_002.txt",
    "content": "*  gke/WARN/2023_002: GKE workload timeout to Compute Engine metadata server.\n   (logging api is disabled)                                              [SKIP]\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/WARN_2023_003.txt",
    "content": "*  gke/WARN/2023_003: Cloud Monitoring API enabled when GKE monitoring is enabled\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2      [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3      [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1        [SKIP]\n     GKE monitoring is disabled\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4        [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6        [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/WARN_2023_004.txt",
    "content": "*  gke/WARN/2023_004: A Node Pool doesn't have too low `maxPodsPerNode` number\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/default-pool [ OK ]\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/low-pod-per-node-pool [FAIL]\n     the nodepool has too low `maxPodsPerNode` number: 8\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3/nodePools/default-pool [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1/nodePools/default-pool [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4/nodePools/default-pool [ OK ]\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6/nodePools/default-pool [ OK ]\n\n   Modern GKE clusters could run multiple system DaemonSets, and enabling a GKE\n   feature could add another DaemonSet or two. 7+ DaemonSets is the norm for an\n   average GKE cluster. Low `maxPodsPerNode` number could prevent normal\n   workload scheduling as all the available slots could be occupied by system or\n   custom DaemonSet pods. `maxPodsPerNode` >= 16 should be a safer option.\n\n   https://gcpdiag.dev/rules/gke/WARN/2023_004\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/WARN_2024_001.txt",
    "content": "*  gke/WARN/2024_001: GKE Node Auto Provisioning scales nodes to match workload demands.\n   (logging api is disabled)                                              [SKIP]\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/WARN_2024_002.txt",
    "content": "*  gke/WARN/2024_002: Number of Kubernetes service accounts not above 3000.\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1 [SKIP]\n     API Server metrics are disabled\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2 [SKIP]\n     API Server metrics are disabled\n   - projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2      [SKIP]\n     API Server metrics are disabled\n   - projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4        [SKIP]\n     API Server metrics are disabled\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/WARN_2024_003.txt",
    "content": "*  gke/WARN/2024_003: Ingress creation is successful if service is correctly mapped\n   (logging api is disabled)                                              [SKIP]\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/WARN_2024_004.txt",
    "content": "*  gke/WARN/2024_004: Ingress creation is successful if backendconfig crd is correctly mapped\n   (logging api is disabled)                                              [SKIP]\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/WARN_2024_005.txt",
    "content": "*  gke/WARN/2024_005: GKE Ingress successfully routes external traffic to NodePort service\n   (logging api is disabled)                                              [SKIP]\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/WARN_2024_007.txt",
    "content": "*  gke/WARN/2024_007: GKE dual-stack with IPv6 enabled uses an internal IP address for the Internal LB\n   (logging api is disabled)                                              [SKIP]\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/snapshots/WARN_2025_001.txt",
    "content": "*  gke/WARN/2025_001: GKE external LB services are successfully created without encountering IP allocation failures due to external IPv6 subnet configurations.\n   (logging api is disabled)                                              [SKIP]\n\n"
  },
  {
    "path": "gcpdiag/lint/gke/util.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Utilities functions to make writing GKE lint rules easier.\"\"\"\n\nimport collections\nimport logging\nfrom typing import Any, Callable, Dict, Set, Tuple\n\nfrom gcpdiag import models\nfrom gcpdiag.queries import gce, gke, logs\n\n\nclass _CantMapLogEntry(BaseException):\n  pass\n\n\n# We also use context as index just to be sure, in case one day we have\n# situations where this code is running multiple times with different context\n# objects.\n_clusters_by_name: Dict[models.Context, Dict[Tuple[str, str, str],\n                                             gke.Cluster]] = {}\n_clusters_by_instance_id: Dict[models.Context, Dict[str, Tuple[gke.Cluster,\n                                                               str]]] = {}\n\n\ndef _initialize_clusters_by_name(context: models.Context):\n  if not context in _clusters_by_name:\n    _clusters_by_name[context] = {}\n    clusters = gke.get_clusters(context)\n    for c in clusters.values():\n      _clusters_by_name[context][(c.project_id, c.location, c.name)] = c\n\n\ndef _initialize_clusters_by_instance_id(context: models.Context):\n  # Don't assume that _initialize_clusters_by_name is called first,\n  # so make sure here, even though actually it was already called.\n  _initialize_clusters_by_name(context)\n  if not context in _clusters_by_instance_id:\n    _clusters_by_instance_id[context] = {}\n    for instance_id, instance in gce.get_instances(context).items():\n      try:\n        c = _clusters_by_name[context][(\n            instance.project_id,\n            instance.get_metadata('cluster-location'),\n            instance.get_metadata('cluster-name'),\n        )]\n        # Also store the instance name because that's not available in the\n        # logs sometimes.\n        _clusters_by_instance_id[context][instance_id] = (c, instance.name)\n      except KeyError:\n        # Filter out non-GKE nodes.\n        continue\n\n\ndef _gke_node_of_log_entry(context, log_entry):\n  try:\n    labels = log_entry['resource']['labels']\n    project_id = labels['project_id']\n  except KeyError:\n    logging.warning('log entry without project_id label: %s', log_entry)\n    raise _CantMapLogEntry() from KeyError\n\n  if 'node_name' in labels:\n    # GKE node log\n    try:\n      c = _clusters_by_name[context][(project_id, labels['location'],\n                                      labels['cluster_name'])]\n      return (c, labels['node_name'])\n    except KeyError as err:\n      # log entry for a node that wasn't selected by context\n      raise _CantMapLogEntry() from err\n  elif 'instance_id' in labels:\n    # GCE instance log\n    # Note that once the instance is deleted, we can't determine anymore to what\n    # cluster a GCE instance belonged. I wish we had GKE node labels in GCE\n    # instance logs of GKE nodes...\n    try:\n      return _clusters_by_instance_id[context][labels['instance_id']]\n    except KeyError as err:\n      raise _CantMapLogEntry from err\n  else:\n    raise _CantMapLogEntry()\n\n\ndef _gke_pod_of_log_entry(context, log_entry):\n  \"\"\"Retrieves a GKE Pod name from a log entry.\n\n  Args:\n      context: The context object.\n      log_entry: A log entry.\n\n  Returns:\n      A tuple of GKE Cluster and Pod objects.\n\n  Raises:\n      _CantMapLogEntry: If the log entry cannot be mapped to a GKE Pod.\n  \"\"\"\n  try:\n    labels = log_entry['resource']['labels']\n    project_id = labels['project_id']\n\n    # using entire resource name as it contains namespace as well as pod name\n    pod_name = log_entry['protoPayload']['resourceName']\n  except KeyError:\n    logging.warning('log entry without project_id label: %s', log_entry)\n    raise _CantMapLogEntry() from KeyError\n\n  try:\n    c = _clusters_by_name[context][(project_id, labels['location'],\n                                    labels['cluster_name'])]\n    return (c, pod_name)\n  except KeyError as err:\n    raise _CantMapLogEntry() from err\n\n\ndef _gke_cluster_of_log_entry(context, log_entry):\n\n  try:\n    labels = log_entry['resource']['labels']\n    project_id = labels['project_id']\n  except KeyError:\n    logging.warning('log entry without project_id label: %s', log_entry)\n    raise _CantMapLogEntry() from KeyError\n\n  try:\n    c = _clusters_by_name[context][(project_id, labels['location'],\n                                    labels['cluster_name'])]\n    return c\n  except KeyError as err:\n    raise _CantMapLogEntry() from err\n\n\ndef gke_logs_find_bad_nodes(context: models.Context,\n                            logs_by_project: Dict[str, logs.LogsQuery],\n                            filter_f: Callable) -> Dict[gke.Cluster, Set[str]]:\n  \"\"\"Go through logs and find GKE node-level issues.\n\n  Returns dict with clusters as key and node list of \"bad nodes\" as\n  value.\n  \"\"\"\n  _initialize_clusters_by_name(context)\n  _initialize_clusters_by_instance_id(context)\n\n  # Process the log entries.\n  bad_nodes_by_cluster = collections.defaultdict(set)\n  for query in logs_by_project.values():\n    for log_entry in query.entries:\n      # Retrieved logs are not guaranteed to only contain what we defined as\n      # \"filter_str\", so we need to filter out what isn't ours.\n      if not filter_f(log_entry):\n        continue\n\n      try:\n        (c, node_name) = _gke_node_of_log_entry(context, log_entry)\n        bad_nodes_by_cluster[c].add(node_name)\n      except _CantMapLogEntry:\n        continue\n  return bad_nodes_by_cluster\n\n\ndef gke_logs_find_bad_clusters(context: models.Context,\n                               logs_by_project: Dict[str, logs.LogsQuery],\n                               filter_f: Callable) -> Dict[gke.Cluster, Any]:\n  \"\"\"Go through logs and find GKE cluster-level issues.\n\n  Returns dict with clusters as key and first matched log entry as\n  value.\n  \"\"\"\n\n  _initialize_clusters_by_name(context)\n\n  # Process the log entries.\n  bad_clusters = {}\n  for query in logs_by_project.values():\n    for log_entry in query.entries:\n      # Retrieved logs are not guaranteed to only contain what we defined as\n      # \"filter_str\", so we need to filter out what isn't ours.\n      if not filter_f(log_entry):\n        continue\n\n      try:\n        c = _gke_cluster_of_log_entry(context, log_entry)\n        if c in bad_clusters:\n          # only store the first log message\n          continue\n        bad_clusters[c] = log_entry\n      except _CantMapLogEntry:\n        continue\n  return bad_clusters\n\n\ndef get_cluster_object(cluster_dict, partial_path):\n  \"\"\"Retrieves a GKE Cluster object from a dictionary based on a partial path.\n\n  Args:\n      cluster_dict: A dictionary where keys are full GCP resource paths and\n      values are Cluster objects.\n      partial_path: A string representing the partial path to the cluster.\n\n  Returns:\n      The matching GKE Cluster object, or None if not found.\n  \"\"\"\n\n  for full_path, cluster_obj in cluster_dict.items():\n    if partial_path in full_path:\n      return cluster_obj\n\n  return None  # Cluster not found\n\n\ndef gke_logs_find_bad_pods(\n    context: models.Context,\n    logs_by_project: Dict[str, logs.LogsQuery],\n    filter_f: Callable,\n) -> Dict[gke.Cluster, Any]:\n  \"\"\"Go through logs and find GKE pod-level issues.\n\n  Args:\n      context: The context object.\n      logs_by_project: A dictionary of logs.LogsQuery objects.\n      filter_f: A function that takes a log entry and returns True if it\n        matches the filter.\n\n  Returns:\n      A dictionary of GKE Cluster objects to a list of \"bad pods\".\n  \"\"\"\n\n  _initialize_clusters_by_name(context)\n\n  # Process the log entries.\n  bad_pods_by_cluster = collections.defaultdict(set)\n  for query in logs_by_project.values():\n    for log_entry in query.entries:\n      # Retrieved logs may not contain what we defined as\n      # \"filter_str\", so we need to filter out what isn't ours.\n      if not filter_f(log_entry):\n        continue\n      try:\n        (c, pod_name) = _gke_pod_of_log_entry(context, log_entry)\n        bad_pods_by_cluster[c].add(pod_name)\n      except _CantMapLogEntry:\n        continue\n\n  return bad_pods_by_cluster\n"
  },
  {
    "path": "gcpdiag/lint/gke/warn_2021_001_cluster_version.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GKE master version available for new clusters.\n\nThe GKE master version should be a version that is available for new clusters.\nIf a version is not available it could mean that it is deprecated, or possibly\nretired due to issues with it.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gke\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n    return\n\n  for _, c in sorted(clusters.items()):\n    if c.release_channel:\n      report.add_skipped(c, 'release channel: ' + c.release_channel)\n      continue\n\n    valid_master_versions = gke.get_valid_master_versions(\n        c.project_id, c.location)\n    if c.master_version not in valid_master_versions:\n      report.add_failed(c,\n                        'valid versions: ' + ', '.join(valid_master_versions),\n                        c.master_version)\n    else:\n      report.add_ok(c, c.master_version)\n"
  },
  {
    "path": "gcpdiag/lint/gke/warn_2021_002_nodes_version.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GKE nodes version available for new clusters.\n\nThe GKE nodes version should be a version that is available\nfor new clusters. If a version is not available it could mean\nthat it is deprecated, or possibly retired due to issues with\nit.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gke\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n    return\n\n  for _, c in sorted(clusters.items()):\n    if c.release_channel:\n      report.add_skipped(c, 'release channel: ' + c.release_channel)\n      continue\n\n    valid_node_versions = gke.get_valid_node_versions(c.project_id, c.location)\n    for np in c.nodepools:\n      if np.version not in valid_node_versions:\n        report.add_failed(np,\n                          'valid versions: ' + ', '.join(valid_node_versions),\n                          np.version)\n      else:\n        report.add_ok(np, np.version)\n"
  },
  {
    "path": "gcpdiag/lint/gke/warn_2021_003_pod_cidr_cluster_size.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"GKE pod CIDR range utilization close to 100%.\n\nThe maximum amount of nodes in a GKE cluster is limited based on its pod CIDR\nrange. This test checks if any of the pod CIDRs in use in the cluster has 80%\nor more utilization. Note, this is limited to a single cluster although the pod\nCIDR can be shared across clusters.\nEnable the network management API to see GKE IP address utilization insights\nin Network Analyzer.\n\"\"\"\nfrom typing import Dict, List, Tuple\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gke\n\n#Test fails if pod cidr usage is above FAIL_THRESHOLD (.8 similar to GKE IP utilization insights)\nFAIL_THRESHOLD_RATIO = .8\nMAX_NODEPOOLS_TO_REPORT = 10\n\n\ndef nodepool_calc(cluster) -> Tuple[dict, dict]:\n  \"\"\"Calculates the number of used ips per pod cidr range\n   and the number of nodes in each node pool\"\"\"\n\n  cidr_used_ips: Dict[str, int] = {}\n  nodepools_by_range: Dict[str, List[str]] = {}\n  nodepool_nodes: Dict[str, int] = {}\n\n  for np in cluster.nodepools:\n\n    pod_range = np.pod_ipv4_cidr_block\n\n    migs = np.instance_groups\n    total_nodes = 0\n    for mig in migs:\n      # approximation assuming that only running instances actually use pod cidr ranges\n      nodes = mig.count_no_action_instances()\n      total_nodes += nodes\n\n    nodepool_nodes[np.name] = total_nodes\n\n    if pod_range not in cidr_used_ips:\n\n      cidr_used_ips[pod_range] = 0\n      nodepools_by_range[pod_range] = []\n\n    #sum up used IPs per pod range - running nodes*pod ip addresses allocated per node\n    cidr_used_ips[pod_range] = cidr_used_ips[pod_range] + (\n        total_nodes * (2**(32 - np.pod_ipv4_cidr_size)))\n\n    nodepools_by_range[pod_range].append(np.name)\n\n  return cidr_used_ips, nodepools_by_range\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n  for _, cluster in sorted(clusters.items()):\n\n    if cluster.is_vpc_native:\n      cidr_used_ips, nodepools_by_range = nodepool_calc(cluster)\n\n      high_use = False\n      summary = ''\n\n      for pod_range, ips in cidr_used_ips.items():\n\n        used_ips = ips\n        total_ip_addresses = pod_range.num_addresses\n\n        nodepools = nodepools_by_range[pod_range]\n\n        threshold_ips_used = total_ip_addresses * FAIL_THRESHOLD_RATIO\n\n        if used_ips > threshold_ips_used:\n          high_use = True\n\n          if summary:\n            summary += '\\n'\n\n          summary += (\n              f'{pod_range}({round(used_ips/total_ip_addresses*100)}% IPs used): '\n              f\"{','.join(nodepools[:MAX_NODEPOOLS_TO_REPORT])}\")\n\n          if len(nodepools) > MAX_NODEPOOLS_TO_REPORT:\n            summary += f' ({len(nodepools) - MAX_NODEPOOLS_TO_REPORT} more node pool(s))'\n\n      if high_use:\n        report.add_failed(cluster, summary)\n      else:\n        report.add_ok(cluster)\n\n    else:\n      #route-based: https://cloud.google.com/kubernetes-engine/docs/how-to/routes-based-cluster\n\n      size = cluster.current_node_count\n      pod_range = cluster.pod_ipv4_cidr\n      #4096 IPs reserved for services range\n      total_ip_addresses = pod_range.num_addresses - 4096\n\n      #256 because each node is assigned /24 from the pod CIDR range\n      used_ips = size * 256\n\n      threshold_ips_used = (total_ip_addresses) * FAIL_THRESHOLD_RATIO\n\n      if used_ips > threshold_ips_used:\n        report.add_failed(\n            cluster,\n            f'{pod_range}({round(used_ips/total_ip_addresses*100)}% IPs used): all node pools'\n        )\n      else:\n        report.add_ok(cluster)\n"
  },
  {
    "path": "gcpdiag/lint/gke/warn_2021_004_system_workloads_stable.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GKE system workloads are running stable.\n\nGKE includes some system workloads running in the user-managed nodes which are\nessential for the correct operation of the cluster. We verify that restart count\nof containers in one of the system namespaces (kube-system, istio-system,\ncustom-metrics) stayed stable in the last 24 hours.\n\"\"\"\n\n# To add to the online description of the rule:\n#\n# To find the pod names with the containers that are restarting, you can use this\n# MQL query in Metrics explorer:\n#\n#     fetch k8s_container\n#     | metric 'kubernetes.io/container/restart_count'\n#     | filter (resource.namespace_name == 'kube-system' ||\n#               resource.namespace_name == 'istio-system')\n#     | align delta(1h)\n#     | every 1h\n#     | group_by [resource.pod_name], .sum\n#     | filter val() > 0\n\nfrom typing import Dict\n\nfrom gcpdiag import config, lint, models\nfrom gcpdiag.queries import gke, monitoring\n\n# SLO: at least 99.8% of minutes are good (3 minutes in a day)\nSLO_BAD_MINUTES = 3\n\n_query_results_per_project_id: Dict[str, monitoring.TimeSeriesCollection] = {}\n\n\ndef prefetch_rule(context: models.Context):\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    return\n\n  # Fetch the metrics for all clusters.\n  within_str = 'within %dd, d\\'%s\\'' % (config.get('within_days'),\n                                        monitoring.period_aligned_now(60))\n  _query_results_per_project_id[context.project_id] = monitoring.query(\n      context.project_id, f\"\"\"\nfetch k8s_container\n| metric 'kubernetes.io/container/restart_count'\n| filter (resource.namespace_name == 'kube-system' ||\n          resource.namespace_name == 'istio-system' ||\n          resource.namespace_name == 'custom-metrics') &&\n         metadata.system.top_level_controller_type != 'Node'\n| {within_str}\n| align delta(1m)\n| filter val() >= 1\n| group_by 1d, .count\n| filter val() > {SLO_BAD_MINUTES}\n| group_by [resource.project_id,\n    cluster_name: resource.cluster_name,\n    location: resource.location,\n    controller: metadata.system.top_level_controller_name], [ .count ]\n  \"\"\")\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n    return\n\n  # Organize the metrics per-cluster.\n  per_cluster_results: Dict[tuple, Dict[str, int]] = {}\n  for ts in _query_results_per_project_id[context.project_id].values():\n    try:\n      cluster_key = (ts['labels']['resource.project_id'],\n                     ts['labels']['location'], ts['labels']['cluster_name'])\n      cluster_values = per_cluster_results.setdefault(cluster_key, {})\n      cluster_values[ts['labels']['controller']] = ts\n    except KeyError:\n      # Ignore time series that don't have the required labels.\n      pass\n\n  # Go over the list of reported clusters\n  for _, c in sorted(clusters.items()):\n    ts_cluster_key = (c.project_id, c.location, c.name)\n    if ts_cluster_key not in per_cluster_results:\n      report.add_ok(c)\n    else:\n      report.add_failed(\n          c, 'restarting: ' +\n          ', '.join(per_cluster_results[ts_cluster_key].keys()))\n"
  },
  {
    "path": "gcpdiag/lint/gke/warn_2021_005_disk_latency.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"GKE nodes have good disk performance.\n\nDisk performance is essential for the proper operation of GKE nodes. If\ntoo much IO is done and the disk latency gets too high, system components\ncan start to misbehave. Often the boot disk is a bottleneck because it is\nused for multiple things: the operating system, docker images, container\nfilesystems (usually including /tmp, etc.), and EmptyDir volumes.\n\"\"\"\n\nfrom typing import Any, Dict\n\nfrom gcpdiag import config, lint, models\nfrom gcpdiag.queries import gke, monitoring\n\nSLO_LATENCY_MS = 100\n# SLO: at least 99.5% of minutes are good (7 minutes in a day)\nSLO_BAD_MINUTES_RATIO = 0.005\n# If we have less than this minutes measured, skip\nSLO_VALID_MINUTES_PER_DAY = 12 * 60\n\n_query_results_per_project_id: Dict[str, monitoring.TimeSeriesCollection] = {}\n\n\ndef prefetch_rule(context: models.Context):\n  # Fetch the metrics for all nodes.\n  #\n  # Note: we only group_by instance_id because of performance reasons (it gets\n  # much slower if you group_by multiple labels)\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    return\n\n  within_str = 'within %dd, d\\'%s\\'' % (config.get('within_days'),\n                                        monitoring.period_aligned_now(60))\n  _query_results_per_project_id[context.project_id] = monitoring.query(\n      context.project_id, f\"\"\"\nfetch gce_instance\n  | {{ metric 'compute.googleapis.com/guest/disk/operation_time' ;\n      metric 'compute.googleapis.com/guest/disk/operation_count' }}\n  | {within_str}\n  | filter metric.device_name = 'sda'\n  | group_by [resource.instance_id], .sum()\n  | every 1m\n  | ratio\n  | value(val() > cast_units({SLO_LATENCY_MS}, \"ms\"))\n  | group_by 1d, [ .count_true, .count ]\n  \"\"\")\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n    return\n\n  # Organize data per-cluster.\n  per_cluster_results: Dict[gke.Cluster, Dict[str, Any]] = {}\n  for ts in _query_results_per_project_id[context.project_id].values():\n    try:\n      instance_id = ts['labels']['resource.instance_id']\n      node = gke.get_node_by_instance_id(context, instance_id)\n    except KeyError:\n      continue\n    cluster_results = per_cluster_results.setdefault(node.nodepool.cluster, {\n        'bad_instances': [],\n        'valid': False\n    })\n    # Did we miss the SLO on any day?\n    # note: we don't calculate the SLO for the whole \"WITHIN_DAYS\" period\n    # because otherwise you would get different results depending on how that\n    # period is defined.\n    total_minutes_bad = 0\n    total_minutes = 0\n    slo_missed = 0\n    for day_value in ts['values']:\n      total_minutes_bad += day_value[0]\n      total_minutes += day_value[1]\n      if day_value[1] > SLO_VALID_MINUTES_PER_DAY:\n        cluster_results['valid'] = 1\n        if day_value[0] / day_value[1] > SLO_BAD_MINUTES_RATIO:\n          slo_missed = 1\n\n    if slo_missed:\n      cluster_results['bad_instances'].append(\n          (node.instance.name, total_minutes, total_minutes_bad))\n\n  # Go over all selected clusters and report results.\n  for _, c in sorted(clusters.items()):\n    if c not in per_cluster_results or not per_cluster_results[c]['valid']:\n      report.add_skipped(c, 'no data')\n    elif not per_cluster_results[c]['bad_instances']:\n      report.add_ok(c)\n    else:\n      report.add_failed(\n          c, (f'disk latency >{SLO_LATENCY_MS}ms (1 min. avg., within'\n              f\" {config.get('within_days')} days): \\n. \") + '\\n. '.join([\n                  f'{i[0]} ({i[2]} out of {i[1]} minutes bad)'\n                  for i in sorted(per_cluster_results[c]['bad_instances'])\n              ]))\n"
  },
  {
    "path": "gcpdiag/lint/gke/warn_2021_006_node_conntrack_full.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GKE nodes aren't reporting conntrack issues.\n\nThe following string was found in the serial logs:\nnf_conntrack: table full\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.lint.gke import util\nfrom gcpdiag.queries import apis, gke, logs\n\nMATCH_STR = 'nf_conntrack: table full'\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  clusters = gke.get_clusters(context)\n  for project_id in {c.project_id for c in clusters.values()}:\n    logs_by_project[project_id] = logs.query(\n        project_id=project_id,\n        resource_type='gce_instance',\n        log_name='log_id(\"serialconsole.googleapis.com/serial_port_1_output\")',\n        filter_str=f'textPayload:\"{MATCH_STR}\"')\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(None, 'logging api is disabled')\n    return\n\n  # Any work to do?\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n    return\n\n  # Search the logs.\n  def filter_f(log_entry):\n    try:\n      return MATCH_STR in log_entry['textPayload']\n    except KeyError:\n      return False\n\n  bad_nodes_by_cluster = util.gke_logs_find_bad_nodes(\n      context=context, logs_by_project=logs_by_project, filter_f=filter_f)\n\n  # Create the report.\n  for _, c in sorted(clusters.items()):\n    if c in bad_nodes_by_cluster:\n      report.add_failed(\n          c, 'Full conntrack table detected. Nodes:\\n. ' +\n          '\\n. '.join(bad_nodes_by_cluster[c]))\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/gke/warn_2021_007_disk_full.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GKE nodes have enough free space on the boot disk.\n\nGKE nodes need free space on their boot disks to be able to function properly.\nIf /var is getting full, it might be because logs are not being rotated\ncorrectly, or maybe a container is creating too much data in the overlayfs.\n\"\"\"\n\nfrom collections import defaultdict\nfrom typing import Dict, List, Set\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gke, monitoring\n\n# Verify that free/(free + used) is above this threshold\nMIN_FREE_THRESHOLD = 0.05\n\n_query_results_per_project_id: Dict[str, monitoring.TimeSeriesCollection] = {}\n\n\ndef prefetch_rule(context: models.Context):\n  # Fetch the metrics for all nodes.\n  #\n  # Note: we only group_by instance_id because of performance reasons (it gets\n  # much slower if you group_by multiple labels)\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    return\n\n  # Only check the latest usage values\n  within_str = 'within 5m, d\\'%s\\'' % (monitoring.period_aligned_now(300))\n  _query_results_per_project_id[context.project_id] = monitoring.query(\n      context.project_id, f\"\"\"\n  fetch gce_instance\n  | metric 'compute.googleapis.com/guest/disk/bytes_used'\n  | filter metric.device_name == 'sda1'\n  | {within_str}\n  | next_older 5m\n  | filter_ratio_by [resource.instance_id], metric.state == 'free'\n  | every 5m\n  \"\"\")\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n    return\n\n  # Organize data per-cluster.\n  clusters_with_data: Set[gke.Cluster] = set()\n  bad_nodes_per_cluster: Dict[gke.Cluster, List[gke.Node]] = defaultdict(list)\n  for ts in _query_results_per_project_id[context.project_id].values():\n    try:\n      instance_id = ts['labels']['resource.instance_id']\n      node = gke.get_node_by_instance_id(context, instance_id)\n      cluster = node.nodepool.cluster\n      clusters_with_data.add(cluster)\n      value = ts['values'][0][0]\n      if value < MIN_FREE_THRESHOLD:\n        bad_nodes_per_cluster[cluster].append(node)\n    except KeyError:\n      continue\n\n  # Go over all selected clusters and report results.\n  for _, c in sorted(clusters.items()):\n    if c not in clusters_with_data:\n      report.add_skipped(c, 'no data')\n    elif c not in bad_nodes_per_cluster:\n      report.add_ok(c)\n    else:\n      report.add_failed(\n          c,\n          'nodes found founds with boot disk free space less than %d%%:\\n. ' %\n          (MIN_FREE_THRESHOLD * 100) + '\\n. '.join(\n              [node.instance.name for node in bad_nodes_per_cluster[c]]))\n"
  },
  {
    "path": "gcpdiag/lint/gke/warn_2021_008_gke_istio_incompatible_versions.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Istio/ASM version not deprecated nor close to deprecation in GKE\n\nAt the end of 2021, those Istio/ASM versions of 1.10.2 and below reached\nend of life and not supported. It is recommended that you upgrade to\nASM Managed Control Plane or Istio version 1.10.3+ to avoid outages.\n\"\"\"\n\nfrom typing import Dict\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gke, monitoring\nfrom gcpdiag.queries.gke import Version\n\n_query_results_per_project_id: Dict[str, monitoring.TimeSeriesCollection] = {}\n\n\ndef prefetch_rule(context: models.Context):\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    return\n\n  # Fetch the metrics for all clusters.\n  _query_results_per_project_id[context.project_id] = \\\n      monitoring.query(\n          context.project_id, \"\"\"\nfetch k8s_container\n| metric 'kubernetes.io/container/uptime'\n| filter (metadata.system_labels.container_image =~ '.*pilot.*')\n| within 1h\n| group_by [resource.project_id,\n    cluster_name: resource.cluster_name,\n    location: resource.location,\n    container_image: metadata.system_labels.container_image]\n  \"\"\")\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n    return\n\n  # Skip querying metrics if no cluster is in 1.21+\n  check_clusters = []\n  for _, c in sorted(clusters.items()):\n    current_version = c.master_version\n    if Version('1.21') < current_version < Version('1.23'):\n      check_clusters.append(c)\n    else:\n      report.add_ok(c, f'GKE {c.master_version}')\n\n  if len(check_clusters) == 0:\n    return\n\n  # Organize the metrics per-cluster.\n  per_cluster_results: Dict[tuple, Dict[str, str]] = {}\n  for ts in _query_results_per_project_id[context.project_id].values():\n    try:\n      cluster_key = (ts['labels']['resource.project_id'],\n                     ts['labels']['location'], ts['labels']['cluster_name'])\n      cluster_values = per_cluster_results.setdefault(cluster_key, {})\n      cluster_values['container_image'] = ts['labels']['container_image']\n    except KeyError:\n      # Ignore metrics that don't have those labels\n      pass\n\n  # Go over the list of reported clusters\n  for c in check_clusters:\n    ts_cluster_key = (c.project_id, c.location, c.name)\n    if ts_cluster_key not in per_cluster_results:\n      report.add_skipped(c, 'no Istio/ASM reported')\n    else:\n      container_image = per_cluster_results[ts_cluster_key]['container_image']\n      (_, istio_version) = container_image.split(':')\n      if Version(istio_version) > Version('1.10.2'):\n        report.add_ok(c, f'Istio/ASM {istio_version}')\n        return\n      else:\n        report.add_failed(\n            c,\n            f'Current GKE version: {c.master_version} (Release channel: '+\\\n            f'{c.release_channel})\\nIn-cluster Istio/ASM control plane ' +\\\n            f'version: {istio_version}'\n        )\n"
  },
  {
    "path": "gcpdiag/lint/gke/warn_2021_009_node_deprecated_image_types.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GKE nodes use a containerd image.\n\nNode images with the Docker runtime are deprecated. Switch to the containerd\nimage types.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gke\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n    return\n\n  for _, cluster in sorted(clusters.items()):\n    if not cluster.nodepools:\n      report.add_skipped(None, 'no nodepools found')\n      continue\n    for nodepool in cluster.nodepools:\n      if nodepool.config.image_type.find('CONTAINERD') != -1:\n        report.add_ok(nodepool)\n      elif nodepool.config.image_type.find('WINDOWS') != -1:\n        if nodepool.version < gke.Version('1.21.1'):\n          report.add_skipped(\n              nodepool, f'GKE windows node pool {nodepool.version}. '\n              f'the Docker container runtime is deprecated '\n              f'only with windows image versions >= 1.21.1')\n        else:\n          report.add_failed(\n              nodepool,\n              f'nodepool is using the deprecated Docker container runtime '\n              f'(nodepool version: {nodepool.version}, image type: {nodepool.config.image_type})'\n          )\n      else:\n        if nodepool.version < gke.Version('1.19.0'):\n          report.add_skipped(\n              nodepool, f'GKE node pool {nodepool.version}. '\n              f'the Docker container runtime is deprecated '\n              f'only with image versions >= 1.19')\n        else:\n          report.add_failed(\n              nodepool,\n              f'nodepool is using the deprecated Docker container runtime '\n              f'(nodepool version: {nodepool.version}, image type: {nodepool.config.image_type})'\n          )\n"
  },
  {
    "path": "gcpdiag/lint/gke/warn_2022_001_wi_with_regional_cluster.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GKE clusters with workload identity are regional.\n\nWorkload Identity is highly dependent of the availability of the cluster control\nplane during token fetches. It is recommended to use regional clusters for the\nproduction workload with Workload Identity enabled.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gke\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n    return\n\n  for _, c in sorted(clusters.items()):\n    if c.has_workload_identity_enabled() and not c.is_regional:\n      report.add_failed(c)\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/gke/warn_2022_002_md_concealment.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GKE metadata concealment is not in use\n\nMetadata concealment is scheduled to be deprecated and removed in the future.\nWorkload Identity replaces the need to use metadata concealment and the two\napproaches are incompatible. It is recommended that you use Workload Identity\ninstead of metadata concealment.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gke\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # Find all clusters.\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n    return\n\n  for _, c in sorted(clusters.items()):\n    # Verify MD concealment for every standard nodepool.\n    for np in c.nodepools:\n      if np.has_md_concealment_enabled():\n        report.add_failed(np, 'metadata concealment is in use')\n      else:\n        report.add_ok(np)\n"
  },
  {
    "path": "gcpdiag/lint/gke/warn_2022_003_firewall_rules_permission.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GKE service account permissions to manage project VPC firewall rules.\n\nVerify that the Google Kubernetes Engine service account has the Compute Network\nAdmin role or custom role with sufficient fine-grained permissions to manage firewall rules\nin the current or host project with Shared VPC.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import crm, gke, iam\n\n# defining permissions\nPERMISSIONS = [\n    'compute.firewalls.create',\n    'compute.firewalls.delete',\n    'compute.firewalls.get',\n    'compute.firewalls.list',\n    'compute.firewalls.update',\n    'compute.networks.updatePolicy',\n]\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # Find all clusters.\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n    return\n\n  for _, c in sorted(clusters.items()):\n    # fetch project number\n    p: str = c.project_id\n    project = crm.get_project(p)\n    if c.project_id != c.network.project_id:\n      # shared vpc\n      p = c.network.project_id\n    sa = (f'serviceAccount:service-{project.number}'\n          '@container-engine-robot.iam.gserviceaccount.com')\n    # get iam policy\n    iam_policy = iam.get_project_policy(context.copy_with(project_id=p))\n    failed = False\n    missing = []\n    for permission in PERMISSIONS:\n      if not iam_policy.has_permission(sa, permission):\n        failed = True\n        missing.append(permission)\n    if failed:\n      report.add_failed(c, (f'service account: {sa}\\n'\n                            f'VPC network: {c.network.short_path}\\n'\n                            f\"missing permissions: {','.join(missing)})\"))\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/gke/warn_2022_004_logging_api_disabled.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Cloud Logging API enabled when GKE logging is enabled\n\nIf Cloud Logging API is disabled, while GKE logging is enabled the Workload\nand Node logs won't be ingested, and thus, won't be visible in Logs Explorer.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, gke\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n    return\n\n  for _, c in sorted(clusters.items()):\n    if not c.has_logging_enabled():\n      report.add_skipped(c, 'GKE logging is disabled')\n    elif c.has_logging_enabled() and \\\n        not apis.is_enabled(context.project_id, 'logging'):\n      report.add_failed(c)\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/gke/warn_2022_005_nvdia_gpu.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"NVIDIA GPU device drivers are installed on GKE nodes with GPU\n\nAfter adding GPU nodes to the GKE cluster, the NVIDIA's device drivers\nshould be installed in the nodes. Google provides a DaemonSet that will\ninstall the drivers.\n\"\"\"\n\nfrom typing import Dict\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gke, monitoring\n\n_query_results_per_project_id: Dict[str, monitoring.TimeSeriesCollection] = {}\n\n\ndef prefetch_rule(context: models.Context):\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    return\n\n  # Fetch the metrics for all clusters.\n  _query_results_per_project_id[context.project_id] = \\\n      monitoring.query(\n          context.project_id, \"\"\"\nfetch k8s_container\n| metric 'kubernetes.io/container/uptime'\n| filter (metadata.user.c'k8s-app' = \"nvidia-driver-installer\")\n| within 1h\n| group_by [resource.project_id,\n    cluster_name: resource.cluster_name,\n    location: resource.location,\n    container_image: metadata.system_labels.container_image]\n  \"\"\")\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n    return\n\n  # Skip GKE cluster without GPU\n  check_clusters = []\n  for _, cluster in sorted(clusters.items()):\n    if not cluster.has_monitoring_enabled():\n      report.add_skipped(cluster, 'monitoring disabled')\n      continue\n    if not cluster.nodepools:\n      report.add_skipped(None, 'no nodepools found')\n      continue\n    for nodepool in cluster.nodepools:\n      if nodepool.config.has_accelerators() and nodepool.node_count > 0:\n        check_clusters.append(cluster)\n        break\n      else:\n        report.add_skipped(nodepool, 'no nodes with GPU found')\n\n  if len(check_clusters) == 0:\n    return\n\n  # Organize the metrics per-cluster.\n  per_cluster_results: Dict[tuple, Dict[str, str]] = {}\n  for ts in _query_results_per_project_id[context.project_id].values():\n    try:\n      cluster_key = (ts['labels']['resource.project_id'],\n                     ts['labels']['location'], ts['labels']['cluster_name'])\n      per_cluster_results.setdefault(cluster_key, {})\n    except KeyError:\n      # Ignore metrics that don't have those labels\n      pass\n\n  # Go over the list of reported clusters\n  for c in check_clusters:\n    ts_cluster_key = (c.project_id, c.location, c.name)\n    if ts_cluster_key in per_cluster_results:\n      report.add_ok(c)\n      return\n    else:\n      report.add_failed(\n          c,\n          'The DaemonSet of nvidia-driver-installer is not found in the GKE cluster.'\n      )\n"
  },
  {
    "path": "gcpdiag/lint/gke/warn_2022_006_nap_node_image_types.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GKE NAP nodes use a containerd image.\n\nNode images with the docker runtime are deprecated. Please switch to the\ncontainerd image types.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gke\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n    return\n\n  for _, c in sorted(clusters.items()):\n    if c.nap_node_image_type is None:\n      report.add_skipped(c, 'Node Auto Provisioning Disabled')\n      continue\n    if 'CONTAINERD' in c.nap_node_image_type:\n      report.add_ok(c, 'Node Type: ' + c.nap_node_image_type)\n    else:\n      report.add_failed(c, 'Node Type: ' + c.nap_node_image_type)\n"
  },
  {
    "path": "gcpdiag/lint/gke/warn_2022_007_storage_scope.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GKE nodes have Storage API access scope to retrieve build artifacts\n\nGKE nodes must have access to storage.googleapis.com to pull binaries/configs for\nnode bootstrapping process and/or pull build artifacts from private Container\nor Artifact Registry repositories. Nodes may report connection timeouts during node bootstrapping\nor `401 Unauthorized` if they cannot pull from a private repositories.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gke\n\nrequired_storage_scope = [\n    'https://www.googleapis.com/auth/devstorage.read_only',\n    'https://www.googleapis.com/auth/devstorage.read_write',\n    'https://www.googleapis.com/auth/devstorage.full_control',\n    'https://www.googleapis.com/auth/cloud-platform',\n    'https://www.googleapis.com/auth/cloud-platform.read-only'\n]\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n    return\n\n  for cluster in sorted(clusters.values()):\n    for nodepool in cluster.nodepools:\n\n      if not cluster.nodepools:\n        report.add_skipped(None, 'no nodepools found')\n\n      if any(s in nodepool.config.oauth_scopes for s in required_storage_scope):\n        report.add_ok(nodepool)\n      else:\n        report.add_failed(nodepool, None)\n"
  },
  {
    "path": "gcpdiag/lint/gke/warn_2022_008_dns_lookup_timeout_intra_node_visibility.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n###\n\"\"\"GKE connectivity: possible dns timeout in some gke versions.\n\nSome GKE versions (starting with 1.18.16-gke.300) have DNS timeout issues\nwhen intranode visibility is enabled and\nif the client Pod and kube-dns Pod are located on the same node.\nSee: https://cloud.google.com/kubernetes-engine/docs/how-to/intranode-visibility#dns_timeouts\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gke\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n    return\n\n  for _, cluster in sorted(clusters.items()):\n    guarded_for_unaffected_versions = _guard_for_unaffected_versions(\n        cluster, report)\n    if guarded_for_unaffected_versions:\n      continue\n\n    _check_for_affected_version(cluster, report)\n\n\ndef _guard_for_unaffected_versions(\n    cluster: gke.Cluster, report: lint.LintReportRuleInterface) -> bool:\n  if not cluster.has_intra_node_visibility_enabled():\n    report.add_ok(cluster, 'intra node visibility disabled -> unaffected')\n    return True\n  elif cluster.master_version.major != 1:\n    report.add_ok(cluster, 'gke major version != 1 unaffected')\n    return True\n  elif cluster.master_version.minor >= 23:\n    report.add_ok(cluster, 'gke version >= 1.23 unaffected')\n    return True\n  else:\n    return False\n\n\ndef _check_for_affected_version(cluster: gke.Cluster,\n                                report: lint.LintReportRuleInterface):\n  if (cluster.master_version.minor == 18 and\n      cluster.master_version.minor >= 16):\n    report.add_failed(\n        cluster,\n        'gke version ' + cluster.master_version.version_str + ' is affected')\n  elif (cluster.master_version.minor == 19 and\n        cluster.master_version.patch >= 7 and\n        cluster.master_version.patch < 16):\n    report.add_failed(\n        cluster,\n        'gke version ' + cluster.master_version.version_str + ' is affected')\n  elif (cluster.master_version.minor == 20 and\n        cluster.master_version.patch >= 2 and\n        cluster.master_version.patch < 13):\n    report.add_failed(\n        cluster,\n        'gke version ' + cluster.master_version.version_str + ' is affected')\n  elif (cluster.master_version.minor == 21 and\n        cluster.master_version.patch < 5):\n    report.add_failed(\n        cluster,\n        'gke version ' + cluster.master_version.version_str + ' is affected')\n  elif (cluster.master_version.minor == 22 and\n        cluster.master_version.patch < 2):\n    report.add_failed(\n        cluster,\n        'gke version ' + cluster.master_version.version_str + ' is affected')\n  else:\n    report.add_ok(cluster, 'no affected version detected')\n"
  },
  {
    "path": "gcpdiag/lint/gke/warn_2023_001_containerfilesystem_scope.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Container File System has the required scopes for Image Streaming\n\nVerify GKE nodes have the required scopes to use Image Streaming.\nSee https://cloud.google.com/kubernetes-engine/docs/how-to/image-streaming#permissiondenied\n\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.lint.gke import util\nfrom gcpdiag.queries import apis, gke, logs\n\nMATCH_STR = 'Request had insufficient authentication scopes'\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  clusters = gke.get_clusters(context)\n  for project_id in {c.project_id for c in clusters.values()}:\n    logs_by_project[project_id] = logs.query(\n        project_id=project_id,\n        resource_type='k8s_node',\n        log_name='log_id(\"gcfsd\")',\n        filter_str=f'jsonPayload.MESSAGE:\"{MATCH_STR}\"')\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(None, 'logging api is disabled')\n    return\n\n  # Any work to do?\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n    return\n\n  # skip entire rule is gcfs is disabled in all clusters\n  has_image_streaming = any(\n      c.has_image_streaming_enabled() for c in clusters.values())\n\n  if not has_image_streaming:\n    report.add_skipped(None, 'image streaming disabled')\n    return\n\n  # Search the logs.\n  def filter_f(log_entry):\n    try:\n      return MATCH_STR in log_entry['jsonPayload']['MESSAGE']\n    except KeyError:\n      return False\n\n  bad_nodes_by_cluster = util.gke_logs_find_bad_nodes(\n      context=context, logs_by_project=logs_by_project, filter_f=filter_f)\n\n  # Create the report.\n  for _, c in sorted(clusters.items()):\n    if c in bad_nodes_by_cluster:\n      report.add_failed(\n          c, \"Nodes don't have required scopes for Image Streaming:\\n. \" +\n          '\\n. '.join(bad_nodes_by_cluster[c]))\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/gke/warn_2023_002_metadata_server_timeout.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GKE workload timeout to Compute Engine metadata server.\n\nIf the workload uses a Google Authentication library, the default timeout\nfor requests to the Compute Engine Metadata server might be too aggressive.\n\nFailed requests may return something like 'DefaultCredentialsError'.\n\"\"\"\n\nfrom collections import defaultdict\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, gke, logs\n\nCREDENTIALS_ERROR_LOG_FILTER = [\n    'severity=ERROR',\n    ('textPayload: \"google.auth.exceptions.DefaultCredentialsError: '\n     'Your default credentials were not found.\"')\n]\ncredential_logs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n\n  credential_logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='k8s_container',\n      log_name='log_id(\"stderr\")',\n      filter_str=' AND '.join(CREDENTIALS_ERROR_LOG_FILTER))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n\n  # Skip entire rule if logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(None, 'logging api is disabled')\n    return\n\n  clusters = gke.get_clusters(context)\n\n  # Skip if no clusters found\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n    return\n\n  # Clusters/containers with error from logs\n  error_clusters: dict[tuple[str, str], set] = defaultdict(set)\n\n  for log_entry in credential_logs_by_project[context.project_id].entries:\n    cluster_name = get_path(log_entry, ('resource', 'labels', 'cluster_name'))\n    location = get_path(log_entry, ('resource', 'labels', 'location'))\n    container_name = get_path(log_entry,\n                              ('resource', 'labels', 'container_name'))\n\n    # Add container name to report failure\n    if container_name:\n      error_clusters[cluster_name, location].add(container_name)\n\n  # Report final results\n  for _, c in sorted(clusters.items()):\n    if (c.name, c.location) in error_clusters:\n      report.add_failed(\n          c, 'Failed containers: %s' %\n          ', '.join(error_clusters[(c.name, c.location)]))\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/gke/warn_2023_003_monitoring_api_disabled.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Cloud Monitoring API enabled when GKE monitoring is enabled\n\nIf Cloud Monitoring API is disabled, while GKE monitoring is enabled the\nmonitoring metrics won't be ingested, and thus, won't be visible in Cloud\nMonitoring.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, gke\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n    return\n\n  for _, c in sorted(clusters.items()):\n    if not c.has_monitoring_enabled():\n      report.add_skipped(c, 'GKE monitoring is disabled')\n    elif c.has_monitoring_enabled() and \\\n        not apis.is_enabled(context.project_id, 'monitoring'):\n      report.add_failed(c)\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/gke/warn_2023_004_too_few_pods_per_node.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"A Node Pool doesn't have too low `maxPodsPerNode` number\n\nModern GKE clusters could run multiple system DaemonSets, and enabling a GKE\nfeature could add another DaemonSet or two. 7+ DaemonSets is the norm for an\naverage GKE cluster. Low `maxPodsPerNode` number could prevent normal workload\nscheduling as all the available slots could be occupied by system or custom\nDaemonSet pods. `maxPodsPerNode` >= 16 should be a safer option.\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gke\n\nTOO_FEW_PODS_PER_NODE_THRESHOLD = 15\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  clusters = gke.get_clusters(context).values()\n\n  if not clusters:\n    report.add_skipped(None, \"No GKE clusters found\")\n\n  for cluster in clusters:\n    for nodepool in cluster.nodepools:\n\n      if nodepool.max_pod_per_node > TOO_FEW_PODS_PER_NODE_THRESHOLD:\n        report.add_ok(nodepool)\n      else:\n        report.add_failed(\n            nodepool,\n            reason=\n            f\"the nodepool has too low `maxPodsPerNode` number: {nodepool.max_pod_per_node}\"\n        )\n"
  },
  {
    "path": "gcpdiag/lint/gke/warn_2024_001_cluster_nap_limits_prevent_autoscaling.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GKE Node Auto Provisioning scales nodes to match workload demands.\n\nIf a GKE cluster has Node Auto Provisioning (NAP) enabled, resource limits\nare configured to support workload scaling. Increased demand triggers\nsuccessful node creation, ensuring application continuity.\n\nIf NAP resource limits (CPU, memory) are configured too low, the autoscaler\nmay be unable to add new nodes during high demand. This could potentially\ncause application disruptions.  To prevent this, ensure NAP resource limits\nare set appropriately or consider manually scaling node pools as needed.\n\"\"\"\n\nfrom typing import Optional, Tuple\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.lint.gke import util\nfrom gcpdiag.queries import apis, gke, logs\n\n_LOG_RESOURCE_TYPE = 'k8s_cluster'\n_LOG_NAME = (\n    'log_id(\"container.googleapis.com%2Fcluster-autoscaler-visibility\")')\n_LOG_FILTER_STR = (\n    'jsonPayload.noDecisionStatus.noScaleUp.unhandledPodGroups.'\n    'napFailureReasons.messageId=\"no.scale.up.nap.pod.zonal.resources.exceeded\"'\n)\n\nMATCH_STR_1 = 'no.scale.up.nap.pod.zonal.resources.exceeded'\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  clusters = gke.get_clusters(context)\n  for project_id in {c.project_id for c in clusters.values()}:\n    logs_by_project[project_id] = logs.query(\n        project_id=project_id,\n        resource_type=_LOG_RESOURCE_TYPE,\n        log_name=_LOG_NAME,\n        filter_str=_LOG_FILTER_STR,\n    )\n\n\ndef _filter_f(log_entry: logs.LogEntryShort) -> bool:\n  try:\n    return MATCH_STR_1 in get_path(\n        log_entry,\n        (\n            'jsonPayload',\n            'noDecisionStatus',\n            'noScaleUp',\n            'unhandledPodGroups',\n            0,\n            'napFailureReasons',\n            0,\n            'messageId',\n        ),\n    )\n  except KeyError:\n    return False\n\n\ndef _extract_sample_affected_pod(\n    log_entry: logs.LogEntryShort,) -> Tuple[Optional[str], Optional[str]]:\n  try:\n    pod_group = get_path(\n        log_entry,\n        (\n            'jsonPayload',\n            'noDecisionStatus',\n            'noScaleUp',\n            'unhandledPodGroups',\n            0,\n            'podGroup',\n            'samplePod',\n        ),\n    )\n    return (pod_group['namespace'], pod_group['name'])\n  except KeyError:\n    return (None, None)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # skip entire rule if logging is disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(None, 'logging api is disabled')\n    return\n\n  # Any work to do?\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n\n  # Search the logs.\n  bad_clusters = util.gke_logs_find_bad_clusters(\n      context=context, logs_by_project=logs_by_project, filter_f=_filter_f)\n\n  # Create the report.\n  for _, c in sorted(clusters.items()):\n    if c in bad_clusters:\n      namespace, name = _extract_sample_affected_pod(bad_clusters[c])\n      message = (\n          'NAP cannot scale-up since cluster-wide cpu and/or memory limits'\n          ' would be exceeded.')\n      if namespace and name:\n        message += f' Sample affected pod: {namespace}/{name}.'\n      report.add_failed(c, message)\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/gke/warn_2024_002_ksa_exceed.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Number of Kubernetes service accounts not above 3000.\n\nFail the rule if WI is enabled and number of KSAs > `3000`\n\"\"\"\n\nfrom typing import Dict\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gke, monitoring\n\n_query_results_per_project_id: Dict[str, monitoring.TimeSeriesCollection] = {}\n\n\ndef prefetch_rule(context: models.Context):\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    return\n\n  # Fetch the metrics for all clusters.\n  _query_results_per_project_id[context.project_id] = monitoring.query(\n      context.project_id, \"\"\"\nfetch prometheus_target\n| metric 'prometheus.googleapis.com/apiserver_storage_objects/gauge'\n| filter (metric.resource == 'serviceaccounts')\n| group_by 1m,\n    [value_apiserver_storage_objects_mean:\n       mean(value.apiserver_storage_objects)]\n| every 1m\n| group_by [resource.cluster],\n    [value_apiserver_storage_objects_mean_aggregate:\n       aggregate(value_apiserver_storage_objects_mean)]\n  \"\"\")\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n    return\n\n  per_cluster_results = {}\n\n  # Organize the metrics per-cluster to get cluster name and KSA count.\n  for ts in _query_results_per_project_id[context.project_id].values():\n    try:\n      cluster_name = ts['labels']['resource.cluster']\n      sa_count = int(ts['values'][0][0])\n      per_cluster_results[cluster_name] = sa_count\n    except KeyError:\n      # Ignore time series that don't have the required labels.\n      pass\n\n  for _, c in sorted(clusters.items()):\n    if c.is_autopilot or c.has_workload_identity_enabled(\n    ) and c.has_monitoring_enabled:\n      if 'APISERVER' not in c.enabled_monitoring_components():\n        report.add_skipped(c, 'API Server metrics are disabled')\n        continue\n      if c.name not in per_cluster_results:\n        report.add_skipped(\n            c, 'Unable to find serviceaccount count from APISERVER metrics')\n      elif per_cluster_results[c.name] < 3000:\n        report.add_ok(c)\n      else:\n        report.add_failed(\n            c, 'Cluster has more than 3,000 Kubernetes service accounts.')\n"
  },
  {
    "path": "gcpdiag/lint/gke/warn_2024_003_ingress_svc_notfound.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Ingress creation is successful if service is correctly mapped\n\nFor an existing ingress, if the service is deleted somehow then ingress is left\nin the dangling state as service is not found.\nAlso If the service mapped to GKE Ingress is not present Ingress will not be\nable to route the Requests to the service\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.lint.gke import util\nfrom gcpdiag.queries import apis, gke, logs\n\nMATCH_STR_1 = 'Translation failed: invalid ingress spec: could not find service'\n\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  clusters = gke.get_clusters(context)\n  for project_id in {c.project_id for c in clusters.values()}:\n    logs_by_project[project_id] = logs.query(\n        project_id=project_id,\n        resource_type='k8s_cluster',\n        log_name='log_id(\"events\")',\n        filter_str=f'jsonPayload.message:\"{MATCH_STR_1}\"',\n    )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(None, 'logging api is disabled')\n    return\n  # Any work to do?\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n    # Search the logs.\n\n  def filter_f(log_entry):\n    try:\n      if MATCH_STR_1 in log_entry['jsonPayload']['message']:\n        return True\n    except KeyError:\n      return False\n\n  bad_clusters = util.gke_logs_find_bad_clusters(\n      context=context, logs_by_project=logs_by_project, filter_f=filter_f)\n  # Create the report.\n  for _, c in sorted(clusters.items()):\n    if c in bad_clusters:\n      report.add_failed(c, logs.format_log_entry(bad_clusters[c]))\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/gke/warn_2024_004_ingress_backendcrd.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Ingress creation is successful if backendconfig crd is correctly mapped\n\nFor an existing ingress, if the backendconfig is deleted somehow then ingress is\nleft in the dangling state as backendcrd is not found.\nAlso If the backendconfig crd is not  mapped to GKE Ingress. Ingress health\ncheck will\nnot pass and ingress will not be able to route the Requests\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.lint.gke import util\nfrom gcpdiag.queries import apis, gke, logs\n\nMATCH_STR_1 = (\n    'Translation failed: invalid ingress spec: error getting BackendConfig for'\n    ' port')\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  clusters = gke.get_clusters(context)\n  for project_id in {c.project_id for c in clusters.values()}:\n    logs_by_project[project_id] = logs.query(\n        project_id=project_id,\n        resource_type='k8s_cluster',\n        log_name='log_id(\"events\")',\n        filter_str=f'jsonPayload.message:\"{MATCH_STR_1}\"',\n    )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(None, 'logging api is disabled')\n    return\n  # Any work to do?\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n    # Search the logs.\n\n  def filter_f(log_entry):\n    try:\n      if MATCH_STR_1 in log_entry['jsonPayload']['message']:\n        return True\n    except KeyError:\n      return False\n\n  bad_clusters = util.gke_logs_find_bad_clusters(\n      context=context, logs_by_project=logs_by_project, filter_f=filter_f)\n  # Create the report.\n  for _, c in sorted(clusters.items()):\n    if c in bad_clusters:\n      report.add_failed(c, logs.format_log_entry(bad_clusters[c]))\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/gke/warn_2024_005_ingress_servicetype.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GKE Ingress successfully routes external traffic to NodePort service\n\nIngress translation errors occur when Service type mismatches load balancing.\nNon-container-native load balancing requires Service type: NodePort for external\naccess. Container-native load balancing needs Service type: ClusterIP, handled\ninternally. Correct Service type ensures Ingress functionality and prevents\nrouting issues.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.lint.gke import util\nfrom gcpdiag.queries import apis, gke, logs\n\nMATCH_STR_1 = 'Translation failed: invalid ingress spec: service'\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  clusters = gke.get_clusters(context)\n  for project_id in {c.project_id for c in clusters.values()}:\n    logs_by_project[project_id] = logs.query(\n        project_id=project_id,\n        resource_type='k8s_cluster',\n        log_name='log_id(\"events\")',\n        filter_str=f'jsonPayload.message:\"{MATCH_STR_1}\"',\n    )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(None, 'logging api is disabled')\n    return\n  # Any work to do?\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n    # Search the logs.\n\n  def filter_f(log_entry):\n    try:\n      if MATCH_STR_1 in log_entry['jsonPayload']['message']:\n        return True\n    except KeyError:\n      return False\n\n  bad_clusters = util.gke_logs_find_bad_clusters(\n      context=context, logs_by_project=logs_by_project, filter_f=filter_f)\n  # Create the report.\n  for _, c in sorted(clusters.items()):\n    if c in bad_clusters:\n      report.add_failed(c, logs.format_log_entry(bad_clusters[c]))\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/gke/warn_2024_007_loadbalancer_ipv6_no_internal_range.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GKE dual-stack with IPv6 enabled uses an internal IP address for the Internal LB\n\nWhen using a GKE cluster with a dual-stack subnet and external IPv6 addresses,\ncreating or updating an internal load balancer service is not possible.  The\nexternal IPv6 configuration forces the system to prioritize external IP addresses,\nmaking internal IP addresses unavailable for the load balancer.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.lint.gke import util\nfrom gcpdiag.queries import apis, gke, logs\n\nMATCH_STR = 'does not have internal IPv6 ranges, required for an internal IPv6 Service'\n\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  clusters = gke.get_clusters(context)\n\n  for project_id in {c.project_id for c in clusters.values()}:\n    logs_by_project[context.project_id] = logs.query(\n        project_id=project_id,\n        resource_type='k8s_cluster',\n        log_name='log_id(\"events\")',\n        filter_str=('severity=\"WARNING\"' + ' AND ' +\n                    f'jsonPayload.message:\"{MATCH_STR}\"'))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # Skip entire rule if logging is disabled.\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(None, 'logging api is disabled')\n    return\n  # Any work to do?\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n    # Search the logs.\n\n  def filter_f(log_entry):\n    try:\n      if MATCH_STR in log_entry['jsonPayload']['message']:\n        return True\n    except KeyError:\n      return False\n\n  bad_clusters = util.gke_logs_find_bad_clusters(\n      context=context, logs_by_project=logs_by_project, filter_f=filter_f)\n  # Create the report.\n  for _, c in sorted(clusters.items()):\n    if c in bad_clusters:\n      report.add_failed(c, logs.format_log_entry(bad_clusters[c]))\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/gke/warn_2025_001_loadbalancer_ipv6_no_external_range.py",
    "content": "# Copyright 2025 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# pylint: disable=line-too-long\n\"\"\"GKE external LB services are successfully created without encountering IP allocation failures due to external IPv6 subnet configurations.\n\nIf you're using a Google Kubernetes Engine (GKE) cluster with a\n\ndual-stack subnet configured for internal IPv6 access, you won't\nbe able to create or update an external load balancer service.\n\nExternal load balancers need an external IP address. This address is normally\ntaken from the GKE subnet.\n\nInternal IPv6 access prevents external IP allocation. When your subnet is\nsetup for internal IPv6 access, the system prioritizes internal IPs, making it\nimpossible to get an external IPv6 address for the load balancer.\n\nThis limitation applies to services without the annotation\n\"networking.gke.io/load-balancer-type: \"Internal\", which specifically instructs\nGKE to create an external load balancer.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.lint.gke import util\nfrom gcpdiag.queries import apis, gke, logs\n\nMATCH_STR_1 = 'Error ensuring Resource for L4 External LoadBalancer, err: subnet'\nMATCH_STR_2 = 'does not have external IPv6 ranges, required for an external IPv6 Service'\nMATCH_STR_3 = 'You can specify an external IPv6 subnet using the'\n\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  clusters = gke.get_clusters(context)\n  for project_id in {c.project_id for c in clusters.values()}:\n    logs_by_project[project_id] = logs.query(\n        project_id=project_id,\n        resource_type='k8s_cluster',\n        log_name='log_id(\"events\")',\n        filter_str=(f'jsonPayload.message=~\"{MATCH_STR_1}\" AND '\n                    f'jsonPayload.message=~\"{MATCH_STR_2}\" AND '\n                    f'jsonPayload.message=~\"{MATCH_STR_3}\" '),\n    )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(None, 'logging api is disabled')\n    return\n  # Any work to do?\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n    # Search the logs.\n\n  def filter_f(log_entry):\n    try:\n      if MATCH_STR_2 in log_entry['jsonPayload']['message']:\n        return True\n    except KeyError:\n      return False\n\n  bad_clusters = util.gke_logs_find_bad_clusters(\n      context=context, logs_by_project=logs_by_project, filter_f=filter_f)\n  # Create the report.\n  for _, c in sorted(clusters.items()):\n    if c in bad_clusters:\n      report.add_failed(c, logs.format_log_entry(bad_clusters[c]))\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/iam/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/lint/iam/bp_2023_001_auto_grant_editor_role_default_sa.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Policy constraint AutomaticIamGrantsForDefaultServiceAccounts is enforced\n\nPolicy constraint AutomaticIamGrantsForDefaultServiceAccounts is strongly recommended to be\nenforced in production projects according to security best practices.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import crm, orgpolicy\n\nconstraints = None\n\n\ndef prefetch_rule(context: models.Context):\n  global constraints\n  constraints = orgpolicy.get_effective_org_policy(\n      context.project_id,\n      \"constraints/iam.automaticIamGrantsForDefaultServiceAccounts\")\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n  if not constraints:\n    report.add_failed(project)\n  elif constraints.is_enforced():\n    report.add_ok(project)\n  else:\n    report.add_failed(project)\n"
  },
  {
    "path": "gcpdiag/lint/iam/iam_rules_snapshot_test.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\" Generalize rule snapshot testing \"\"\"\n\nfrom gcpdiag.lint import iam, snapshot_test_base\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = iam\n  project_id = 'gcpdiag-iam1-aaaa'\n"
  },
  {
    "path": "gcpdiag/lint/iam/sec_2021_001_sa_permissions.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"No service accounts have the Owner role\n\nA Service account should not have a role that could potentially increase the security risk\nto the project to malicious activity\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import crm, iam\n\nROLE = 'roles/owner'\n\n\ndef prefetch_rule(context: models.Context):\n  # Make sure that we have the IAM policy in cache.\n  iam.get_project_policy(context)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n  iam_policy = iam.get_project_policy(context)\n\n  for member in sorted(iam_policy.get_members()):\n    if member.startswith('serviceAccount:'):\n      if iam_policy.has_role_permissions(member, ROLE):\n        report.add_failed(project, member + f' has the role {ROLE}')\n        break\n  else:\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/iam/sec_2024_001_unused_sa.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\" No Unused Service Accounts Found\n\nUnused service accounts create an unnecessary security risk,\nso we recommend disabling unused service accounts then deleting the service\naccounts when you are sure that you no longer need them\n\"\"\"\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import iam, monitoring\n\nservice_accounts = {}\nquery_results_per_project_id: dict[str, monitoring.TimeSeriesCollection] = {}\nunique_id_set = set()\n\n\ndef prefetch_rule(context: models.Context):\n  iam.get_service_account_list(context.project_id)\n  query_results_per_project_id[context.project_id] = monitoring.query(\n      context.project_id,\n      \"\"\"\n      fetch iam_service_account\n      | metric 'iam.googleapis.com/service_account/authn_events_count'\n      | within 12w\n      \"\"\",\n  )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  service_accounts[context.project_id] = iam.get_service_account_list(\n      context.project_id)\n  accounts = service_accounts[context.project_id]\n  if len(accounts) == 0:\n    report.add_skipped(None, 'No Service accounts found')\n    return\n\n  for que in query_results_per_project_id[context.project_id].values():\n    try:\n      val = get_path(que, ('labels', 'resource.unique_id'))\n      unique_id_set.add(val)\n    except KeyError:\n      continue\n\n  for account in accounts:\n    if account.unique_id not in unique_id_set:\n      report.add_failed(account, 'Unused Service Account Found')\n    else:\n      report.add_ok(account)\n"
  },
  {
    "path": "gcpdiag/lint/iam/snapshots/BP_2023_001.txt",
    "content": "*  iam/BP/2023_001: Policy constraint AutomaticIamGrantsForDefaultServiceAccounts is enforced\n   - projects/gcpdiag-iam1-aaaa                                           [FAIL]\n\n   Policy constraint AutomaticIamGrantsForDefaultServiceAccounts is strongly\n   recommended to be enforced in production projects according to security best\n   practices.\n\n   https://gcpdiag.dev/rules/iam/BP/2023_001\n\n"
  },
  {
    "path": "gcpdiag/lint/iam/snapshots/SEC_2021_001.txt",
    "content": "*  iam/SEC/2021_001: No service accounts have the Owner role\n   - projects/gcpdiag-iam1-aaaa                                           [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/iam/snapshots/SEC_2024_001.txt",
    "content": "*  iam/SEC/2024_001: No Unused Service Accounts Found\n   - projects/gcpdiag-iam1-aaaa/serviceAccounts/demo2sa@gcpdiag-iam1-aaaa.iam.gserviceaccount.com [FAIL]\n     Unused Service Account Found\n   - projects/gcpdiag-iam1-aaaa/serviceAccounts/12340002-compute@developer.gserviceaccount.com [FAIL]\n     Unused Service Account Found\n   - projects/gcpdiag-iam1-aaaa/serviceAccounts/demo1@gcpdiag-iam1-aaaa.iam.gserviceaccount.com [FAIL]\n     Unused Service Account Found\n   - projects/gcpdiag-iam1-aaaa/serviceAccounts/demo3@gcpdiag-iam1-aaaa.iam.gserviceaccount.com [FAIL]\n     Unused Service Account Found\n\n   Unused service accounts create an unnecessary security risk, so we recommend\n   disabling unused service accounts then deleting the service accounts when you\n   are sure that you no longer need them\n\n   https://gcpdiag.dev/rules/iam/SEC/2024_001\n\n"
  },
  {
    "path": "gcpdiag/lint/interconnect/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/lint/interconnect/bp_2023_001_high_availability.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"VLAN attachments deployed in same metro are in different EADs (Edge Availability Domains).\n\nTo establish 99.99% high availability for interconnects, please ensure the following conditions:\n      - Two metros are required, each metro has two attachments;\n      - Attachments in same metro are in different EADs;\n      - Two regions are required with four cloud router TASKS evenly distributed;\n      - Global routing must be enabled on those cloud routers.\n\"\"\"\n\nfrom typing import Dict\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import crm, interconnect\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n  attachments = interconnect.get_vlan_attachments(context.project_id)\n  lookup: Dict[tuple[str, str], Dict] = {}\n  ha_pairs: Dict[tuple[str, str], Dict] = {}\n\n  if len(attachments) == 0:\n    report.add_skipped(None, 'no vlan attachments found')\n    return\n\n  for attachment in attachments:\n    region_metro = (attachment.region, attachment.metro)\n    eads = lookup.setdefault(region_metro, {})\n    eads.setdefault(attachment.ead, []).append(attachment.name)\n\n  # filter the region_metro that don't have EADs > 1 with attachments\n  ha_pairs = {k: v for k, v in lookup.items() if len(v) > 1}\n\n  if len(ha_pairs) < 2:\n    report.add_failed(\n        project,\n        'There are no vlan attachment pairs that can establish 99.99% high availability.'\n    )\n  else:\n    result = (\n        'The following vlan attachments could be used to establish 99.99% high avaiablibility:\\n'\n    )\n    for region_metro, attachment_list in ha_pairs.items():\n      region, metro = region_metro\n      result = result + (\n          f'\\n * region:{region} and metro:{metro} '\n          f'have the following attachments in different EADs: {attachment_list}'\n      )\n    note = '''\n      \\nYou can use vlan attachments from above list to establsh 99.99% high availability for interconnects, please ensure the following conditions:\n          - Two metros are required, each metro has two attachments;\n          - Attachments in same metro are in different EADs;\n          - Two regions are required with four cloud router TASKS evenly distributed;\n          - Global routing must be enabled on those cloud routers.'''\n    report.add_ok(project, result + note)\n"
  },
  {
    "path": "gcpdiag/lint/interconnect/interconnect_rules_snapshot_test.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\" Generalize rule snapshot testing \"\"\"\n\nfrom gcpdiag.lint import interconnect, snapshot_test_base\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = interconnect\n  project_id = 'gcpdiag-gke1-aaaa'\n"
  },
  {
    "path": "gcpdiag/lint/interconnect/snapshots/BP_2023_001.txt",
    "content": "*  interconnect/BP/2023_001: VLAN attachments deployed in same metro are in different EADs (Edge Availability Domains).\n   - projects/gcpdiag-gke1-aaaa                                           [ OK ] The following vlan attachments could be used to establish 99.99% high avaiablibility:\n\n * region:us-east4 and metro:bos have the following attachments in different EADs: {'bos-zone1-219': ['dummy-attachment1', 'dummy-attachment2'], 'bos-zone2-219': ['dummy-attachment3', 'dummy-attachment4']}\n * region:us-west2 and metro:sjc have the following attachments in different EADs: {'sjc-zone1-6': ['dummy-attachment5'], 'sjc-zone2-6': ['dummy-attachment6', 'dummy-attachment7', 'dummy-attachment8', 'dummy-attachment9', 'dummy-attachment10']}\n      \nYou can use vlan attachments from above list to establsh 99.99% high availability for interconnects, please ensure the following conditions:\n          - Two metros are required, each metro has two attachments;\n          - Attachments in same metro are in different EADs;\n          - Two regions are required with four cloud router TASKS evenly distributed;\n          - Global routing must be enabled on those cloud routers.\n\n"
  },
  {
    "path": "gcpdiag/lint/interconnect/snapshots/WARN_2023_001.txt",
    "content": "*  interconnect/WARN/2023_001: VLAN attachment is using Dataplane V1.\n   - projects/gcpdiag-gke1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment1 [ OK ]\n   - projects/gcpdiag-gke1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment2 [ OK ]\n   - projects/gcpdiag-gke1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment3 [ OK ]\n   - projects/gcpdiag-gke1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment4 [ OK ]\n   - projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment5 [ OK ]\n   - projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6 [ OK ]\n   - projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6 [FAIL]  this VLAN attachment is using Dataplane V1\n   - projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6 [ OK ]\n   - projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6 [ OK ]\n   - projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6 [ OK ]\n\n   Dataplane V1 doesn't support certain feature such as BFD, consider upgrading\n   to Dataplane V2. For more information: https://cloud.google.com/network-\n   connectivity/docs/interconnect/concepts/terminology#dataplaneVersion\n\n   https://gcpdiag.dev/rules/interconnect/WARN/2023_001\n\n"
  },
  {
    "path": "gcpdiag/lint/interconnect/snapshots/WARN_2023_002.txt",
    "content": "*  interconnect/WARN/2023_002: VLAN attachment is in a non-functional state.\n   - projects/gcpdiag-gke1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment1 [ OK ]\n   - projects/gcpdiag-gke1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment2 [ OK ]\n   - projects/gcpdiag-gke1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment3 [ OK ]\n   - projects/gcpdiag-gke1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment4 [ OK ]\n   - projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment5 [ OK ]\n   - projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6 [ OK ]\n   - projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6 [ OK ]\n   - projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6 [ OK ]\n   - projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6 [ OK ]\n   - projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6 [FAIL]  this VLAN attachment is in a non-functional state\n\n   This could be because the associated Interconnect was removed, or because the\n   other side of a Partner attachment was deleted.\n\n   https://gcpdiag.dev/rules/interconnect/WARN/2023_002\n\n"
  },
  {
    "path": "gcpdiag/lint/interconnect/snapshots/WARN_2023_003.txt",
    "content": "*  interconnect/WARN/2023_003: The interconnect link is undergoing a maintenance window.\n   - projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect1  [ OK ]\n   - projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect2  [ OK ]\n   - projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect3  [ OK ]\n   - projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect4  [ OK ]\n   - projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect4  [ OK ]\n   - projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect4  [FAIL]  this Interconnect link is currently under maintenance\n\n   Please check the email sent to the technical contacts for further details\n   about the maintenance.\n\n   https://gcpdiag.dev/rules/interconnect/WARN/2023_003\n\n"
  },
  {
    "path": "gcpdiag/lint/interconnect/snapshots/WARN_2025_001.txt",
    "content": "*  interconnect/WARN/2025_001: VLAN attachment MTU matches VPC MTU\n   - projects/gcpdiag-gke1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment1 [ OK ]\n   - projects/gcpdiag-gke1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment2 [ OK ]\n   - projects/gcpdiag-gke1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment3 [ OK ]\n   - projects/gcpdiag-gke1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment4 [ OK ]\n   - projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment5 [FAIL]  MTU mismatch: 1450 vs VPC MTU 1460\n   - projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6 [FAIL]  MTU mismatch: 1440 vs VPC MTU 1460\n   - projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6 [FAIL]  MTU mismatch: 1440 vs VPC MTU 1460\n   - projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6 [FAIL]  MTU mismatch: 1440 vs VPC MTU 1460\n   - projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6 [FAIL]  MTU mismatch: 1440 vs VPC MTU 1460\n   - projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6 [FAIL]  MTU mismatch: 1440 vs VPC MTU 1460\n\n   Mismatched MTU may cause potential connection issues. Please check VLAN\n   attachment and VPC network MTU configurations.\n\n   https://gcpdiag.dev/rules/interconnect/WARN/2025_001\n\n"
  },
  {
    "path": "gcpdiag/lint/interconnect/warn_2023_001_legacy_dataplane.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"VLAN attachment is using Dataplane V1.\n\nDataplane V1 doesn't support certain feature such as BFD, consider upgrading to Dataplane V2.\nFor more information:\nhttps://cloud.google.com/network-connectivity/docs/interconnect/concepts/terminology#dataplaneVersion\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import interconnect\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  attachments = interconnect.get_vlan_attachments(context.project_id)\n  if not attachments:\n    report.add_skipped(None, 'no vlan attachments found')\n    return\n  for c in attachments:\n    if c.legacy_dataplane:\n      report.add_failed(c, None, ' this VLAN attachment is using Dataplane V1')\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/interconnect/warn_2023_002_defunct_attachment.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"VLAN attachment is in a non-functional state.\n\nThis could be because the associated Interconnect was removed,\nor because the other side of a Partner attachment was deleted.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import interconnect\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  attachments = interconnect.get_vlan_attachments(context.project_id)\n  if not attachments:\n    report.add_skipped(None, 'no vlan attachments found')\n    return\n  for c in attachments:\n    if c.defunct_state:\n      report.add_failed(c, None,\n                        ' this VLAN attachment is in a non-functional state')\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/interconnect/warn_2023_003_link_maintenance.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"The interconnect link is undergoing a maintenance window.\n\nPlease check the email sent to the technical contacts for further details about the maintenance.\n\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import interconnect\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  interconnects = interconnect.get_links(context.project_id)\n  if not interconnects:\n    report.add_skipped(None, 'no Inteconnect links found')\n    return\n  for c in interconnects:\n    if c.under_maintenance:\n      report.add_failed(\n          c, None, ' this Interconnect link is currently under maintenance')\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/interconnect/warn_2025_001_check_interconnect_mtu.py",
    "content": "# Copyright 2025 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"VLAN attachment MTU matches VPC MTU\n\nMismatched MTU may cause potential connection issues.\nPlease check VLAN attachment and VPC network MTU configurations.\n\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import interconnect, network\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  attachments = interconnect.get_vlan_attachments(context.project_id)\n  if not attachments:\n    report.add_skipped(None, 'no vlan attachments found')\n    return\n\n  for vlan in attachments:\n    vlan_router = network.get_router_by_name(project_id=context.project_id,\n                                             region=vlan.region,\n                                             router_name=vlan.router)\n\n    if not vlan_router:\n      report.add_skipped(vlan, 'no vlan router found')\n      continue\n\n    vlan_network_name = vlan_router.get_network_name()\n    vlan_network = network.get_network(project_id=context.project_id,\n                                       network_name=vlan_network_name,\n                                       context=context)\n    if not vlan_network:\n      report.add_skipped(vlan, 'no vlan network found')\n\n    if vlan.mtu != vlan_network.mtu:\n      report.add_failed(\n          vlan, None,\n          f' MTU mismatch: {vlan.mtu} vs VPC MTU {vlan_network.mtu}')\n    else:\n      report.add_ok(vlan)\n"
  },
  {
    "path": "gcpdiag/lint/lb/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/lint/lb/bp_2022_001_lbpolicy_for_sessionaffinity.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"LocalityLbPolicy compatible with sessionAffinity\n\nLocalityLbPolicy field need to be MAGLEV or RING_HASH, when sessionAffinity is not NONE.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import crm, lb\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n  bs_list = lb.get_backend_services(context.project_id)\n  report_list = []\n\n  if len(bs_list) == 0:\n    report.add_skipped(None, 'no backend services found')\n    return\n\n  for bs in bs_list:\n    if bs.session_affinity != 'NONE':\n      if bs.locality_lb_policy not in ('MAGLEV', 'RING_HASH'):\n        report_list.append(bs.name)\n\n  if len(report_list) == 0:\n    report.add_ok(project)\n  else:\n    result = 'Session affinity might not work in the following backend services: ' + ', '.join(\n        report_list)\n    report.add_failed(project, result)\n"
  },
  {
    "path": "gcpdiag/lint/lb/bp_2023_001_cloudcdn_for_lb_backend_services.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Cloud CDN is enabled on backends for global external load balancers\n\nPerformance best practices recommend that CloudCDN is enabled on backend services\nfor Global External HTTP(S) load balancers.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import lb\n\nEXTERNAL_MANAGED = 'EXTERNAL_MANAGED'\nMAX_BACKENDSERVICES_TO_REPORT = 10\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n\n  bs_list = lb.get_backend_services(context.project_id)\n\n  # return if there are no BackendServices found in the project\n  if not bs_list:\n    report.add_skipped(None, 'no backend services found')\n    return\n\n  for bs in bs_list:\n    # fail for backend services for Global HTTP(S) LB which have CloudCDN enabled\n    if (bs.load_balancing_scheme == EXTERNAL_MANAGED and not bs.region and\n        not bs.is_enable_cdn and not bs.region):\n      report.add_failed(bs)\n\n    # pass for backend services for Global HTTP(S) LB which have CloudCDN enabled\n    elif (bs.load_balancing_scheme == EXTERNAL_MANAGED and not bs.region and\n          bs.is_enable_cdn and not bs.region):\n      report.add_ok(bs)\n    else:\n      # skip for non-global HTTP(S) LB backend services\n      report.add_skipped(bs, 'Non Global HTTP(S) Load balancer backend service')\n"
  },
  {
    "path": "gcpdiag/lint/lb/bp_2023_002_healthcheck_logging_for_backend_services.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Health check logging is enabled on health checks for load balancer backend services\n\nBest practice recommends that health check logging is enabled on health checks\nfor load balancer backend services.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import gce, lb\n\nbs_health_checks = set()\nbs_list = {}\n\n\ndef prefetch_rule(context: models.Context):\n  bs_list[context.project_id] = lb.get_backend_services(context.project_id)\n  if not bs_list[context.project_id]:\n    return\n  # prefetch health checks\n  for bs in bs_list[context.project_id]:\n    if bs.health_check:\n      health_check = gce.get_health_check(context.project_id, bs.health_check)\n      del health_check\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  # return if there are no BackendServices found in the project\n  backend_services = bs_list[context.project_id]\n  if not backend_services:\n    report.add_skipped(None, 'no backend services found')\n    return\n  # get the health check resource object for each backend service\n  for bs in backend_services:\n    if bs.health_check:\n      health_check = gce.get_health_check(context.project_id, bs.health_check)\n      bs_health_checks.add(health_check)\n    else:\n      report.add_skipped(bs, 'No health check configured on backend service')\n  # check that logging is enabled on the health check.\n  for health_check in bs_health_checks:\n    if health_check.is_log_enabled:\n      report.add_ok(health_check)\n    else:\n      report.add_failed(health_check)\n"
  },
  {
    "path": "gcpdiag/lint/lb/bp_2024_001_sessionaffinity_for_lb_backendservices.py",
    "content": "# Copyright 2022 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# You may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Session affinity is configured on backends for global external application load balancers\n\nPerformance best practices recommend that configuring session affinity\nmight be beneficial in some scenarios.\n\"\"\"\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import lb\n\nEXTERNAL_MANAGED = 'EXTERNAL_MANAGED'\nMAX_BACKENDSERVICES_TO_REPORT = 10\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n\n  bs_list = lb.get_backend_services(context.project_id)\n\n  # return if there are no BackendServices found in the project\n  if not bs_list:\n    report.add_skipped(None, 'no backend services found')\n    return\n\n  for bs in bs_list:\n    # fail for backend services for GXLB which don't have session affinity configured\n    if (bs.load_balancing_scheme == EXTERNAL_MANAGED and not bs.region and\n        bs.session_affinity == 'NONE' and not bs.region):\n      report.add_failed(bs)\n\n    # pass for backend services for GXLB which have session affinity configured\n    elif (bs.load_balancing_scheme == EXTERNAL_MANAGED and not bs.region and\n          bs.session_affinity != 'NONE' and not bs.region):\n      report.add_ok(bs)\n    else:\n      # skip for non-global application LB backend services\n      report.add_skipped(\n          bs, 'Non Global application Load balancer backend service')\n"
  },
  {
    "path": "gcpdiag/lint/lb/bp_2024_002_global_access_for_regional_ilb.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Global Access enabled on forwarding rule for Regional Internal Load Balancer.\n\nWhen global access is not on, resources/clients in other location might not be\nable to visit the Internal Load Balancer(iLB). It's recommended to enable the\nglobal access in regional iLB.\n\"\"\"\n\nimport re\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import lb\n\nINTERNAL = 'INTERNAL'\nINTERNAL_MANAGED = 'INTERNAL_MANAGED'\n\nforwarding_rules_list = {}\n\n\ndef prefetch_rule(context: models.Context):\n  forwarding_rules_list[context.project_id] = lb.get_forwarding_rules(\n      context.project_id)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  \"\"\"Checks if global access is enabled on regional forwarding rule.\"\"\"\n\n  forwarding_rules = forwarding_rules_list[context.project_id]\n  # return if there is no forwarding_rule found in the project\n  if not forwarding_rules:\n    report.add_skipped(None, 'no Forwarding Rules found')\n    return\n\n  for forwarding_rule in forwarding_rules:\n    forwarding_rule_regional = re.match(\n        r'projects/([^/]+)/regions/([^/]+)/forwardingRules/([^/]+)',\n        forwarding_rule.full_path,\n    )\n    if forwarding_rule_regional and forwarding_rule.load_balancing_scheme in [\n        INTERNAL,\n        INTERNAL_MANAGED,\n    ]:\n      if not forwarding_rule.global_access_allowed:\n        report.add_failed(forwarding_rule)\n      else:\n        report.add_ok(forwarding_rule)\n"
  },
  {
    "path": "gcpdiag/lint/lb/bp_2025_001_protocol_for_lb_backendservices.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"HTTP/2 between load balancer and backend may increase TCP connections.\n\nConnection pooling is not available with HTTP/2 which can lead to high backend\nlatencies, so wisely select backend protocol\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import lb\n\nMAX_BACKENDSERVICES_TO_REPORT = 10\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n\n  bs_list = lb.get_backend_services(context.project_id)\n\n  # return if there are no BackendServices found in the project\n  if not bs_list:\n    report.add_skipped(None, 'no backend services found')\n    return\n\n  for bs in bs_list:\n    # fail for backend services which have HTTP/2 as backend service protocol\n    if bs.protocol == 'HTTP2':\n      report.add_failed(bs)\n\n    # pass for backend services which have HTTP(S) as backend service protocol\n    else:\n      report.add_ok(bs)\n"
  },
  {
    "path": "gcpdiag/lint/lb/bp_2025_002_timeout_sec_for_lb_backendservices.py",
    "content": "# Copyright 2022 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# You may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Backend Service Timeout for Global External Application Load Balancers.\n\nThe default timeout is 30 seconds for external application load balancers\nand we don't recommend backend service timeout values greater than 24 hours\n(86,400 seconds) because Google Cloud periodically restarts GFEs for software\nupdates and other routine maintenance. The longer the backend service timeout\nvalue, the more likely it is that Google Cloud terminates TCP connections for\nmaintenance.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import lb\n\nMAX_BACKENDSERVICES_TO_REPORT = 10\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n\n  bs_list = lb.get_backend_services(context.project_id)\n\n  # return if there are no BackendServices found in the project\n  if not bs_list:\n    report.add_skipped(None, 'no backend services found')\n    return\n\n  for bs in bs_list:\n    # fail for backend services where backend service timeout is greater than 24\n    # hours for external application load balancers\n    if (bs.load_balancing_scheme in ('EXTERNAL_MANAGED', 'EXTERNAL') and\n        bs.timeout_sec > 86400):\n      report.add_failed(bs)\n\n    # pass for backend services with timeout less than 24 hours.\n    elif (bs.load_balancing_scheme in ('EXTERNAL_MANAGED', 'EXTERNAL') and\n          bs.timeout_sec < 86400):\n      report.add_ok(bs)\n\n    else:\n      # skip for others\n      report.add_skipped(bs, 'No external load balancer backend services found')\n"
  },
  {
    "path": "gcpdiag/lint/lb/bp_2025_003_connection_draining_backend_services.py",
    "content": "# Copyright 2025 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# You may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#       http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Connection draining timeout is configured for proxy load balancers.\n\nPerformance best practices recommend configuring connection draining\ntimeout to allow existing requests to complete when instances are removed\nfrom a backend service.\n\"\"\"\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import lb\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n\n  bs_list = lb.get_backend_services(context.project_id)\n\n  # return if there are no BackendServices found in the project\n  if not bs_list:\n    report.add_skipped(None, 'No backend services found in this project.')\n    return\n\n  # Define load balancer types for which connection draining is applicable.\n  proxy_lb_types = [\n      lb.LoadBalancerType.GLOBAL_EXTERNAL_PROXY_NETWORK_LB,\n      lb.LoadBalancerType.REGIONAL_INTERNAL_PROXY_NETWORK_LB,\n      lb.LoadBalancerType.REGIONAL_EXTERNAL_PROXY_NETWORK_LB,\n      lb.LoadBalancerType.CROSS_REGION_INTERNAL_PROXY_NETWORK_LB,\n      lb.LoadBalancerType.CLASSIC_PROXY_NETWORK_LB,\n      lb.LoadBalancerType.GLOBAL_EXTERNAL_APPLICATION_LB,\n      lb.LoadBalancerType.REGIONAL_INTERNAL_APPLICATION_LB,\n      lb.LoadBalancerType.REGIONAL_EXTERNAL_APPLICATION_LB,\n      lb.LoadBalancerType.CROSS_REGION_INTERNAL_APPLICATION_LB,\n      lb.LoadBalancerType.CLASSIC_APPLICATION_LB,\n  ]\n\n  for bs in bs_list:\n    if bs.load_balancer_type in proxy_lb_types:\n      if bs.draining_timeout_sec > 0:\n        report.add_ok(\n            bs,\n            'Connection draining timeout is configured:'\n            f' {bs.draining_timeout_sec} seconds.',\n        )\n      else:\n        report.add_failed(\n            bs,\n            'Connection draining timeout is not configured (set to 0 seconds).',\n        )\n    else:\n      report.add_skipped(\n          bs,\n          'Connection draining timeout not applicable to this load balancer'\n          ' type.',\n      )\n"
  },
  {
    "path": "gcpdiag/lint/lb/lb_rules_snapshot_test.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\" Generalize rule snapshot testing \"\"\"\n\nfrom gcpdiag.lint import lb, snapshot_test_base\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = lb\n  project_id = 'gcpdiag-lb1-aaaa'\n"
  },
  {
    "path": "gcpdiag/lint/lb/snapshots/BP_2022_001.txt",
    "content": "*  lb/BP/2022_001: LocalityLbPolicy compatible with sessionAffinity\n   - projects/gcpdiag-lb1-aaaa                                            [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/lb/snapshots/BP_2023_001.txt",
    "content": "*  lb/BP/2023_001: Cloud CDN is enabled on backends for global external load balancers\n   - projects/gcpdiag-lb1-aaaa/global/backendServices/web-backend-service [SKIP]\n     Non Global HTTP(S) Load balancer backend service\n\n"
  },
  {
    "path": "gcpdiag/lint/lb/snapshots/BP_2023_002.txt",
    "content": "*  lb/BP/2023_002: Health check logging is enabled on health checks for load balancer backend services\n   - projects/gcpdiag-lb1-aaaa/global/healthChecks/http-basic-check       [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/lb/snapshots/BP_2024_001.txt",
    "content": "*  lb/BP/2024_001: Session affinity is configured on backends for global external application load balancers\n   - projects/gcpdiag-lb1-aaaa/global/backendServices/web-backend-service [SKIP]\n     Non Global application Load balancer backend service\n\n"
  },
  {
    "path": "gcpdiag/lint/lb/snapshots/BP_2024_002.txt",
    "content": "*  lb/BP/2024_002: Global Access enabled on forwarding rule for Regional Internal Load Balancer.\n   - projects/gcpdiag-lb1-aaaa/regions/us-west1/forwardingRules/forwardingRule1 [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/lb/snapshots/BP_2025_001.txt",
    "content": "*  lb/BP/2025_001: HTTP/2 between load balancer and backend may increase TCP connections.\n   - projects/gcpdiag-lb1-aaaa/global/backendServices/web-backend-service [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/lb/snapshots/BP_2025_002.txt",
    "content": "*  lb/BP/2025_002: Backend Service Timeout for Global External Application Load Balancers.\n   - projects/gcpdiag-lb1-aaaa/global/backendServices/web-backend-service [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/lb/snapshots/BP_2025_003.txt",
    "content": "*  lb/BP/2025_003: Connection draining timeout is configured for proxy load balancers.\n   - projects/gcpdiag-lb1-aaaa/global/backendServices/web-backend-service [FAIL]\n     Connection draining timeout is not configured (set to 0 seconds).\n\n   Performance best practices recommend configuring connection draining timeout\n   to allow existing requests to complete when instances are removed from a\n   backend service.\n\n   https://gcpdiag.dev/rules/lb/BP/2025_003\n\n"
  },
  {
    "path": "gcpdiag/lint/lint_rule_repository_test.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Tests for LintRuleRepository\"\"\"\n\nfrom functools import cached_property\n\nimport pytest\n\nfrom gcpdiag.lint import LintRuleRepository, LintRulesPattern\n\n\nclass FakePyPkg:\n\n  def __init__(self, name, path):\n    self.__name__ = name\n    self.__path__ = path\n\n\nclass FakeModulesGateway:\n  'Testing double to mock interactions with python modules'\n\n  def __init__(self, modules_by_name):\n    self.modules_by_name = modules_by_name\n\n  def list_pkg_modules(self, pkg):\n    return [\n        k for k in self.modules_by_name.keys() if k.startswith(pkg.__name__)\n    ]\n\n  def get_module(self, name):\n    return self.modules_by_name[name]\n\n\nclass FakeModule:\n  'Testing double to mock interactions with python module'\n\n  def __init__(self, methods, doc):\n    self.methods_by_name = methods\n    self.doc = doc\n\n  def get_method(self, name):\n    return self.methods_by_name.get(name)\n\n  def get_module_doc(self):\n    return self.doc\n\n  def get_attr(self, attribute):\n    return attribute\n\n\nclass FakeExecutionStrategy:\n  \"\"\" Simple testing double for ExecutionStrategy \"\"\"\n\n  def __init__(self):\n    self.executed_rules = None\n\n  def filter_runnable_rules(self, rules):\n    return rules\n\n  def run_rules(self, context, result, rules):\n    del context, result\n    self.executed_rules = rules\n\n\nclass Setup:\n  'Helper class to instantiate testing subj and its dependencies'\n\n  def __init__(self,\n               modules_by_name,\n               load_extended=None,\n               include=None,\n               exclude=None):\n    self.modules_by_name = modules_by_name\n    self.load_extended = load_extended\n    self.include = include\n    self.exclude = exclude\n\n  @cached_property\n  def repo(self):\n    return LintRuleRepository(load_extended=self.load_extended,\n                              modules_gateway=self.modules_gw,\n                              execution_strategy=self.execution_strategy,\n                              exclude=self.exclude,\n                              include=self.include)\n\n  @cached_property\n  def modules_gw(self):\n    return FakeModulesGateway(self.modules_by_name)\n\n  @cached_property\n  def execution_strategy(self):\n    return FakeExecutionStrategy()\n\n\ndef mk_simple_rule_module(methods=None, doc=None):\n  methods = methods or {'run_rule': lambda context, rule_report: None}\n  doc = doc or 'hello world, fake module'\n  return FakeModule(methods=methods, doc=doc)\n\n\ndef mk_simple_async_rule_module(methods=None, doc=None):\n  methods = methods or {'async_run_rule': lambda context, rule_report: None}\n  doc = doc or 'hello world, fake module'\n  return FakeModule(methods=methods, doc=doc)\n\n\ndef test_sync_happy_path():\n  fake_module1 = mk_simple_rule_module()\n  fake_module2 = mk_simple_rule_module()\n\n  setup = Setup(\n      modules_by_name={\n          'gcpdiag.lint.fakeprod.err_2022_001_hello': fake_module1,\n          'gcpdiag.lint.fakeprod.err_2022_002_world': fake_module2\n      })\n\n  setup.repo.load_rules(FakePyPkg('gcpdiag.lint.fakeprod', 'fake.path'))\n  setup.repo.run_rules(context=None)\n\n  assert len(setup.execution_strategy.executed_rules) == 2\n  executed_run_rule_fs = [\n      r.run_rule_f for r in setup.execution_strategy.executed_rules\n  ]\n  assert fake_module1.get_method('run_rule') in executed_run_rule_fs\n  assert fake_module2.get_method('run_rule') in executed_run_rule_fs\n\n\ndef test_async_happy_path():\n  fake_module1 = mk_simple_async_rule_module()\n  fake_module2 = mk_simple_async_rule_module()\n\n  setup = Setup(\n      modules_by_name={\n          'gcpdiag.lint.fakeprod.err_2022_001_hello': fake_module1,\n          'gcpdiag.lint.fakeprod.err_2022_002_world': fake_module2\n      })\n\n  setup.repo.load_rules(FakePyPkg('gcpdiag.lint.fakeprod', 'fake.path'))\n  setup.repo.run_rules(context=None)\n\n  assert len(setup.execution_strategy.executed_rules) == 2\n  executed_run_rule_fs = [\n      r.async_run_rule_f for r in setup.execution_strategy.executed_rules\n  ]\n  assert fake_module1.get_method('async_run_rule') in executed_run_rule_fs\n  assert fake_module2.get_method('async_run_rule') in executed_run_rule_fs\n\n\ndef test_no_entrypoint_raises():\n  fake_module1 = mk_simple_rule_module(methods={'dummy': lambda: None})\n\n  setup = Setup(modules_by_name={\n      'gcpdiag.lint.fakeprod.err_2022_001_hello': fake_module1,\n  })\n\n  with pytest.raises(RuntimeError):\n    setup.repo.load_rules(FakePyPkg('gcpdiag.lint.fakeprod', 'fake.path'))\n\n\ndef test_wrong_rule_class_raises():\n  fake_module1 = mk_simple_rule_module()\n\n  setup = Setup(modules_by_name={\n      'gcpdiag.lint.fakeprod.hello_2022_001_hello': fake_module1,\n  })\n\n  with pytest.raises(ValueError):\n    setup.repo.load_rules(FakePyPkg('gcpdiag.lint.fakeprod', 'fake.path'))\n\n\ndef test_wrong_module_names_ignored():\n  fake_module1 = mk_simple_rule_module()\n\n  setup = Setup(modules_by_name={\n      'gcpdiag.lint.fakeprod.err_hello': fake_module1,\n  })\n\n  setup.repo.load_rules(FakePyPkg('gcpdiag.lint.fakeprod', 'fake.path'))\n  setup.repo.run_rules(context=None)\n\n  assert len(setup.execution_strategy.executed_rules) == 0\n\n\ndef test_tests_ignored():\n  fake_module1 = mk_simple_rule_module()\n\n  setup = Setup(modules_by_name={\n      'gcpdiag.lint.fakeprod.err_2022_001_hello_test': fake_module1,\n  })\n\n  setup.repo.load_rules(FakePyPkg('gcpdiag.lint.fakeprod', 'fake.path'))\n  setup.repo.run_rules(context=None)\n\n  assert len(setup.execution_strategy.executed_rules) == 0\n\n\ndef test_empty_doc_raises():\n  fake_module1 = FakeModule(\n      methods={'run_rule': lambda context, rule_report: None}, doc='')\n\n  setup = Setup(modules_by_name={\n      'gcpdiag.lint.fakeprod.err_2022_001_hello': fake_module1,\n  })\n\n  with pytest.raises(RuntimeError):\n    setup.repo.load_rules(FakePyPkg('gcpdiag.lint.fakeprod', 'fake.path'))\n\n\ndef test_singleline_doc_happy_path():\n  fake_module1 = FakeModule(\n      methods={'run_rule': lambda context, rule_report: None}, doc='first line')\n\n  setup = Setup(modules_by_name={\n      'gcpdiag.lint.fakeprod.err_2022_001_hello': fake_module1,\n  })\n\n  setup.repo.load_rules(FakePyPkg('gcpdiag.lint.fakeprod', 'fake.path'))\n  setup.repo.run_rules(context=None)\n\n  assert len(setup.execution_strategy.executed_rules) == 1\n  assert setup.execution_strategy.executed_rules[0].short_desc == 'first line'\n  assert setup.execution_strategy.executed_rules[0].long_desc == ''\n\n\ndef test_multiline_doc_happy_path():\n  fake_module1 = FakeModule(\n      methods={'run_rule': lambda context, rule_report: None},\n      doc='first line \\n\\n third line \\n fourth line')\n\n  setup = Setup(modules_by_name={\n      'gcpdiag.lint.fakeprod.err_2022_001_hello': fake_module1,\n  })\n\n  setup.repo.load_rules(FakePyPkg('gcpdiag.lint.fakeprod', 'fake.path'))\n  setup.repo.run_rules(context=None)\n\n  assert len(setup.execution_strategy.executed_rules) == 1\n  assert setup.execution_strategy.executed_rules[0].short_desc == 'first line '\n  assert setup.execution_strategy.executed_rules[\n      0].long_desc == ' third line \\n fourth line'\n\n\ndef test_non_empty_second_doc_line_raises():\n  fake_module1 = FakeModule(\n      methods={'run_rule': lambda context, rule_report: None},\n      doc='first line \\n second line \\n third line \\n fourth line')\n\n  setup = Setup(modules_by_name={\n      'gcpdiag.lint.fakeprod.err_2022_001_hello': fake_module1,\n  })\n\n  with pytest.raises(RuntimeError):\n    setup.repo.load_rules(FakePyPkg('gcpdiag.lint.fakeprod', 'fake.path'))\n\n\ndef test_ext_ignored():\n  fake_module1 = mk_simple_rule_module()\n\n  setup = Setup(modules_by_name={\n      'gcpdiag.lint.fakeprod.err_ext_2022_001_hello': fake_module1,\n  })\n\n  setup.repo.load_rules(FakePyPkg('gcpdiag.lint.fakeprod', 'fake.path'))\n  setup.repo.run_rules(context=None)\n\n  assert len(setup.execution_strategy.executed_rules) == 0\n\n\ndef test_ext_loaded():\n  fake_module1 = mk_simple_rule_module()\n\n  setup = Setup(load_extended=True,\n                modules_by_name={\n                    'gcpdiag.lint.fakeprod.err_ext_2022_001_hello':\n                        fake_module1,\n                })\n\n  setup.repo.load_rules(FakePyPkg('gcpdiag.lint.fakeprod', 'fake.path'))\n  setup.repo.run_rules(context=None)\n\n  assert len(setup.execution_strategy.executed_rules) == 1\n\n\ndef test_include_id():\n  fake_module1 = mk_simple_rule_module()\n  fake_module2 = mk_simple_rule_module()\n\n  setup = Setup(include=[LintRulesPattern('fakeprod/ERR/2022_001')],\n                modules_by_name={\n                    'gcpdiag.lint.fakeprod.err_2022_001_hello': fake_module1,\n                    'gcpdiag.lint.fakeprod.err_2022_002_world': fake_module2\n                })\n\n  setup.repo.load_rules(FakePyPkg('gcpdiag.lint.fakeprod', 'fake.path'))\n  setup.repo.run_rules(context=None)\n\n  assert len(setup.execution_strategy.executed_rules) == 1\n  executed_run_rule_fs = [\n      r.run_rule_f for r in setup.execution_strategy.executed_rules\n  ]\n  assert fake_module1.get_method('run_rule') in executed_run_rule_fs\n  assert fake_module2.get_method('run_rule') not in executed_run_rule_fs\n\n\ndef test_include_class():\n  fake_module1 = mk_simple_rule_module()\n  fake_module2 = mk_simple_rule_module()\n\n  setup = Setup(include=[LintRulesPattern('fakeprod/ERR/*')],\n                modules_by_name={\n                    'gcpdiag.lint.fakeprod.err_2022_001_hello': fake_module1,\n                    'gcpdiag.lint.fakeprod.warn_2022_002_world': fake_module2\n                })\n\n  setup.repo.load_rules(FakePyPkg('gcpdiag.lint.fakeprod', 'fake.path'))\n  setup.repo.run_rules(context=None)\n\n  assert len(setup.execution_strategy.executed_rules) == 1\n  executed_run_rule_fs = [\n      r.run_rule_f for r in setup.execution_strategy.executed_rules\n  ]\n  assert fake_module1.get_method('run_rule') in executed_run_rule_fs\n  assert fake_module2.get_method('run_rule') not in executed_run_rule_fs\n\n\ndef test_include_product():\n  fake_module1 = mk_simple_rule_module()\n  fake_module2 = mk_simple_rule_module()\n  fake_module3 = mk_simple_rule_module()\n\n  setup = Setup(\n      include=[LintRulesPattern('fakeprod/*/*')],\n      modules_by_name={\n          'gcpdiag.lint.fakeprod.err_2022_001_hello': fake_module1,\n          'gcpdiag.lint.fakeprod.err_2022_002_world': fake_module2,\n          'gcpdiag.lint.anotherfakeprod.err_2022_001_hihi': fake_module3\n      })\n\n  setup.repo.load_rules(FakePyPkg('gcpdiag.lint.fakeprod', 'fake.path'))\n  setup.repo.load_rules(FakePyPkg('gcpdiag.lint.anotherfakeprod', 'fake.path'))\n  setup.repo.run_rules(context=None)\n\n  assert len(setup.execution_strategy.executed_rules) == 2\n  executed_run_rule_fs = [\n      r.run_rule_f for r in setup.execution_strategy.executed_rules\n  ]\n  assert fake_module1.get_method('run_rule') in executed_run_rule_fs\n  assert fake_module2.get_method('run_rule') in executed_run_rule_fs\n\n\ndef test_exclude_id():\n  fake_module1 = mk_simple_rule_module()\n  fake_module2 = mk_simple_rule_module()\n\n  setup = Setup(exclude=[LintRulesPattern('fakeprod/ERR/2022_002')],\n                modules_by_name={\n                    'gcpdiag.lint.fakeprod.err_2022_001_hello': fake_module1,\n                    'gcpdiag.lint.fakeprod.err_2022_002_world': fake_module2\n                })\n\n  setup.repo.load_rules(FakePyPkg('gcpdiag.lint.fakeprod', 'fake.path'))\n  setup.repo.run_rules(context=None)\n\n  assert len(setup.execution_strategy.executed_rules) == 1\n  executed_run_rule_fs = [\n      r.run_rule_f for r in setup.execution_strategy.executed_rules\n  ]\n  assert fake_module1.get_method('run_rule') in executed_run_rule_fs\n  assert fake_module2.get_method('run_rule') not in executed_run_rule_fs\n\n\ndef test_exclude_class():\n  fake_module1 = mk_simple_rule_module()\n  fake_module2 = mk_simple_rule_module()\n\n  setup = Setup(exclude=[LintRulesPattern('fakeprod/WARN/*')],\n                modules_by_name={\n                    'gcpdiag.lint.fakeprod.err_2022_001_hello': fake_module1,\n                    'gcpdiag.lint.fakeprod.warn_2022_002_world': fake_module2\n                })\n\n  setup.repo.load_rules(FakePyPkg('gcpdiag.lint.fakeprod', 'fake.path'))\n  setup.repo.run_rules(context=None)\n\n  assert len(setup.execution_strategy.executed_rules) == 1\n  executed_run_rule_fs = [\n      r.run_rule_f for r in setup.execution_strategy.executed_rules\n  ]\n  assert fake_module1.get_method('run_rule') in executed_run_rule_fs\n  assert fake_module2.get_method('run_rule') not in executed_run_rule_fs\n\n\ndef test_exclude_product():\n  fake_module1 = mk_simple_rule_module()\n  fake_module2 = mk_simple_rule_module()\n  fake_module3 = mk_simple_rule_module()\n\n  setup = Setup(\n      exclude=[LintRulesPattern('fakeprod/*/*')],\n      modules_by_name={\n          'gcpdiag.lint.fakeprod.err_2022_001_hello': fake_module1,\n          'gcpdiag.lint.fakeprod.err_2022_002_world': fake_module2,\n          'gcpdiag.lint.anotherfakeprod.err_2022_001_hihi': fake_module3\n      })\n\n  setup.repo.load_rules(FakePyPkg('gcpdiag.lint.fakeprod', 'fake.path'))\n  setup.repo.load_rules(FakePyPkg('gcpdiag.lint.anotherfakeprod', 'fake.path'))\n  setup.repo.run_rules(context=None)\n\n  assert len(setup.execution_strategy.executed_rules) == 1\n  executed_run_rule_fs = [\n      r.run_rule_f for r in setup.execution_strategy.executed_rules\n  ]\n  assert fake_module1.get_method('run_rule') not in executed_run_rule_fs\n  assert fake_module2.get_method('run_rule') not in executed_run_rule_fs\n  assert fake_module3.get_method('run_rule') in executed_run_rule_fs\n"
  },
  {
    "path": "gcpdiag/lint/looker/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/lint/looker/bp_2025_001_get_all_instances.py",
    "content": "# Copyright 2025 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"List all Looker Core instances in given GCP project.\nProbable reasons for failure would be insufficient permissions or corrupted state of instances.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import looker\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  instances = looker.get_instances(context)\n  if not instances:\n    report.add_skipped(None, 'No instances found')\n  for _, c in sorted(instances.items()):\n    if c.name == '':\n      report.add_failed(c)\n    else:\n      report.add_ok(c, c.status)\n"
  },
  {
    "path": "gcpdiag/lint/looker/bp_2025_002_lsp_high_intensity_queries_bq.py",
    "content": "# Copyright 2025 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#       http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# Lint as: python3\n\"\"\"Number of expensive Looker Studio bigquery job.\nChecking BigQuery jobs associated with Looker Studio which are billed over 1 GB\"\"\"\nfrom boltons.iterutils import get_path  # type: ignore\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nHIGHLY_EXTENSIVE_FILTER = [\n    'protoPayload.methodName=\"jobservice.jobcompleted\"',\n    ('protoPayload.serviceData.jobCompletedEvent.job.'\n     'jobStatistics.totalBilledBytes>=\"1073741824\"'),\n    ('protoPayload.serviceData.jobCompletedEvent.job.'\n     'jobConfiguration.labels.reques'\n     'tor=\"looker_studio\"')\n]\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='bigquery_resource',\n      log_name='log_id(\"cloudaudit.googleapis.com/data_access\")',\n      filter_str=' '.join(HIGHLY_EXTENSIVE_FILTER),\n  )\n\n\ndef run_rule(\n    context: models.Context,\n    report: lint.LintReportRuleInterface,\n):\n  job_counts: dict[str, int] = {}\n\n  project = crm.get_project(context.project_id)\n  # skip entire rule if logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'logging api is disabled')\n    return\n  if not apis.is_enabled(context.project_id, 'bigquery'):\n    report.add_skipped(project, 'bigquery api is disabled')\n    return\n  if logs_by_project.get(\n      context.project_id) and logs_by_project[context.project_id].entries:\n    for log_entry in logs_by_project[context.project_id].entries:\n      email_id = get_path(\n          log_entry,\n          (\n              'protoPayload',\n              'authenticationInfo',\n              'principalEmail',\n          ),\n      )\n      if email_id:\n        job_counts[email_id] = job_counts.get(email_id, 0) + 1\n    for email_id, count in job_counts.items():\n      report.add_failed(\n          project,\n          f'The user {email_id} ran {count} BigQuery jobs in LSP billed over 1 GB'\n      )\n    return\n  # in case of there is no log or all logs are non-relevant\n  else:\n    report.add_ok(\n        project,\n        'No BigQuery jobs billed over 1 GB from Looker Studio were found.')\n"
  },
  {
    "path": "gcpdiag/lint/looker/bp_2025_003_get_all_lags_operations.py",
    "content": "# Lint as: python3\n\"\"\"\n\nThis module contains linting rules to confirm all Looker\n(Google Cloud core) instance operations are inventoried\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import looker\n\n\ndef format_operation_message(operation):\n  \"\"\"Helper function to format the operation message.\"\"\"\n  if operation.status == 'In Progress':\n    action_message = (\n        f'Activity: {operation.operation_type} | Status: {operation.status}.')\n\n  else:\n    action_message = (\n        f'Activity: {operation.operation_type} | Action: {operation.action} | '\n        f'Status: {operation.status}.')\n\n  return (f'\\n  Location: {operation.location_id}\\n'\n          f'  Instance: {operation.instance_name}\\n'\n          f'    - {action_message}')\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  operations_by_location = looker.get_operations(context)\n\n  if not operations_by_location:\n    report.add_skipped(None, 'No operations found')\n    return\n\n  for _, instances in operations_by_location.items():\n    for _, operations in instances.items():\n      for operation in operations:\n        message = format_operation_message(operation)\n        if operation.status == 'In Progress':\n          report.add_failed(operation, message)\n        else:\n          report.add_ok(operation, message)\n"
  },
  {
    "path": "gcpdiag/lint/looker/looker_rules_snapshot_test.py",
    "content": "# Copyright 2025 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\" Generalize rule snapshot testing \"\"\"\n\nfrom gcpdiag.lint import looker, snapshot_test_base\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = looker\n  project_id = 'gcpdiag-looker1-aaaa'\n"
  },
  {
    "path": "gcpdiag/lint/looker/snapshots/BP_2025_001.txt",
    "content": "*  looker/BP/2025_001: List all Looker Core instances in given GCP project.\n   - projects/gcpdiag-looker1-aaaa/locations/us-central1/instances/gcpdiag-test-01 [ OK ] ACTIVE\n\n"
  },
  {
    "path": "gcpdiag/lint/looker/snapshots/BP_2025_002.txt",
    "content": "*  looker/BP/2025_002: Number of expensive Looker Studio bigquery job.\n   - projects/gcpdiag-looker1-ijtqsckn                                    [FAIL]\n     The user user@google.com ran 2 BigQuery jobs in LSP billed over 1 GB\n\n\n\n   https://gcpdiag.dev/rules/looker/BP/2025_002\n\n"
  },
  {
    "path": "gcpdiag/lint/looker/snapshots/BP_2025_003.txt",
    "content": "*  looker/BP/2025_003: This module contains linting rules to confirm all Looker\n   - projects/gcpdiag-looker1-aaaa/locations/us-central1/operations/operation-1 [ OK ] \n  Location: us-central1\n  Instance: gcpdiag-test-01\n    - Activity: update | Action: databases | Status: Completed.\n\n"
  },
  {
    "path": "gcpdiag/lint/notebooks/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/lint/notebooks/bp_2023_001_enable_report_system_health.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Vertex AI Workbench instance enables system health report\n\nUser-managed notebooks instances can report the system health of the core\nservices like Docker service, Docker reverse proxy agent, Jupyter service and\nJupyter API.\n\n\"\"\"\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, notebooks\n\nGUEST_ATTRIBUTES = {\n    'enable-guest-attributes': 'true',\n    'report-system-health': 'true'\n}\n\ninstances_by_project = {}\n\n\ndef prefetch_rule(context: models.Context):\n  instances_by_project[context.project_id] = notebooks.get_instances(context)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n\n  if not apis.is_enabled(context.project_id, 'notebooks'):\n    report.add_skipped(None, 'Notebooks API is disabled')\n    return\n\n  instances = instances_by_project[context.project_id]\n\n  if not instances:\n    report.add_skipped(None, 'No instances found')\n    return\n\n  for instance in instances.values():\n    if all(\n        instance.metadata.get(k, 'false').casefold() == v.casefold()\n        for k, v in GUEST_ATTRIBUTES.items()):\n      report.add_ok(instance)\n    else:\n      report.add_failed(instance)\n"
  },
  {
    "path": "gcpdiag/lint/notebooks/bp_2023_002_instances_upgrade_available.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Vertex AI Workbench user-managed notebook instances are up to date\n\nVertex AI Workbench user-managed notebook instance can be upgraded to have\nlatest bug fixes, new capabilities, framework and package updates\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, notebooks\n\ninstances_by_project = {}\n\n\ndef prefetch_rule(context: models.Context):\n  instances_by_project[context.project_id] = notebooks.get_instances(context)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n\n  if not apis.is_enabled(context.project_id, 'notebooks'):\n    report.add_skipped(None, 'Notebooks API is disabled')\n    return\n\n  instances = instances_by_project[context.project_id]\n\n  if not instances:\n    report.add_skipped(None, 'No instances found')\n    return\n\n  for instance in instances.values():\n    is_upgradeable = notebooks.instance_is_upgradeable(context, instance.name)\n    upgradeable_message = (\n        'Instance is upgradeable - '\n        f\"upgradeVersion: {is_upgradeable.get('upgradeVersion', 'unknown')}, \"\n        f\"upgradeInfo: {is_upgradeable.get('upgradeInfo', 'unknown')}, \"\n        f\"upgradeImage: {is_upgradeable.get('upgradeImage', 'unknown')}\")\n    if is_upgradeable.get('upgradeable', False):\n      report.add_failed(instance, upgradeable_message)\n    else:\n      report.add_ok(instance)\n"
  },
  {
    "path": "gcpdiag/lint/notebooks/bp_2023_003_runtimes_upgrade_available.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Vertex AI Workbench runtimes for managed notebooks are up to date\n\nMaintaining runtimes up to date is generally beneficial thanks to new\ncapabilities, framework updates, package updates, and bug fixes that have been\nimplemented in newer versions of your environment.\n\"\"\"\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, notebooks\n\nruntimes_by_project = {}\n\n\ndef prefetch_rule(context: models.Context):\n  runtimes_by_project[context.project_id] = notebooks.get_runtimes(context)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  if not apis.is_enabled(context.project_id, 'notebooks'):\n    report.add_skipped(None, 'Notebooks API is disabled')\n    return\n\n  runtimes = runtimes_by_project[context.project_id]\n\n  if not runtimes:\n    report.add_skipped(None, 'No runtimes found')\n    return\n\n  for runtime in runtimes.values():\n    if runtime.is_upgradeable:\n      report.add_failed(runtime)\n    else:\n      report.add_ok(runtime)\n"
  },
  {
    "path": "gcpdiag/lint/notebooks/bp_2023_004_runtime_idle_shutdown.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Vertex AI Workbench runtimes for managed notebooks enable idle shutdown\n\nTo help manage costs, you can set your managed notebooks instance to shut down\nafter being idle for a specific time period. You can change the amount of time.\n\"\"\"\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, notebooks\n\nruntimes_by_project = {}\n\n\ndef prefetch_rule(context: models.Context):\n  runtimes_by_project[context.project_id] = notebooks.get_runtimes(context)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  if not apis.is_enabled(context.project_id, 'notebooks'):\n    report.add_skipped(None, 'Notebooks API is disabled')\n    return\n\n  runtimes = runtimes_by_project[context.project_id]\n\n  if not runtimes:\n    report.add_skipped(None, 'No runtimes found')\n    return\n\n  for runtime in runtimes.values():\n    if not runtime.idle_shutdown:\n      report.add_failed(runtime)\n    else:\n      report.add_ok(runtime)\n"
  },
  {
    "path": "gcpdiag/lint/notebooks/err_2023_001_instances_health_state.py",
    "content": "# Copyright 2023 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Vertex AI Workbench user-managed notebook instances are healthy\n\nRule which verifies the Vertex AI Workbench user-managed notebook instances have\na healthy state\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, notebooks\n\ninstances_by_project = {}\n\n\ndef prefetch_rule(context: models.Context):\n  instances_by_project[context.project_id] = notebooks.get_instances(context)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n\n  if not apis.is_enabled(context.project_id, 'notebooks'):\n    report.add_skipped(None, 'Notebooks API is disabled')\n    return\n\n  instances = instances_by_project[context.project_id]\n\n  if not instances:\n    report.add_skipped(None, 'No instances found')\n    return\n\n  for instance in instances.values():\n    if not instance.name:\n      report.add_skipped(instance, 'Instance name not found')\n      continue\n\n    health_state = notebooks.get_instance_health_state(context, instance.name)\n    health_state_message = f'Health state = {health_state}'\n    if health_state == notebooks.HealthStateEnum.HEALTHY:\n      report.add_ok(instance)\n    if health_state == notebooks.HealthStateEnum.UNHEALTHY:\n      report.add_failed(instance, health_state_message)\n    else:\n      report.add_skipped(instance, health_state_message)\n"
  },
  {
    "path": "gcpdiag/lint/notebooks/err_2023_002_create_notebook_compute_subnetworks_permissions_missing.py",
    "content": "# Copyright 2023 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Vertex AI Workbench account has compute.subnetworks permissions to create notebook in VPC\n\nCreating notebook inside VPC requires user and service-*@gcp-sa-notebooks.iam.gserviceaccount.com\nto have compute.subnetworks.use and compute.subnetworks.useExternalIp permissions in VPC project\n\"\"\"\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\n# used by check for relevant logs\nMATCH_STRING = 'Required \\'compute.subnetworks'\n# to get .use and .useExternalIp errors\nMATCH_STRING_REGEX = f'{MATCH_STRING}.*\\' permission for'\n\nNOTEBOOKS_SA = '^service-.*@gcp-sa-notebooks.iam.gserviceaccount.com$'\n\nNOTEBOOKS_MISSING_PERMISSIONS_FILTER = [\n    'severity=ERROR',\n    'protoPayload.serviceName = \"notebooks.googleapis.com\"',\n    f'protoPayload.status.message =~ \"{MATCH_STRING_REGEX}\"',\n]\n\nCOMPUTE_ENGINE_MISSING_PERMISSIONS_FILTER = [\n    'severity=ERROR',\n    f'protoPayload.authenticationInfo.principalEmail =~ \"{NOTEBOOKS_SA}\"',\n    f'protoPayload.status.message =~ \"{MATCH_STRING_REGEX}\"',\n]\n\nlogs_by_project_notebooks = {}\nlogs_by_project_compute = {}\n\n\ndef prepare_rule(context: models.Context):\n  project_id = context.project_id\n\n  log_name = 'log_id(\"cloudaudit.googleapis.com/activity\")'\n\n  logs_by_project_notebooks[context.project_id] = logs.query(\n      project_id=project_id,\n      log_name=log_name,\n      resource_type='audited_resource',\n      filter_str=' AND '.join(NOTEBOOKS_MISSING_PERMISSIONS_FILTER))\n\n  logs_by_project_compute[context.project_id] = logs.query(\n      project_id=project_id,\n      log_name=log_name,\n      resource_type='gce_instance',\n      filter_str=' AND '.join(COMPUTE_ENGINE_MISSING_PERMISSIONS_FILTER))\n\n\ndef find_logs_with_permission_errors(context: models.Context,\n                                     logs_by_project: dict,\n                                     principals_with_error: set):\n  if (logs_by_project.get(context.project_id) and\n      logs_by_project[context.project_id].entries):\n    for log_entry in logs_by_project[context.project_id].entries:\n      principal_email = get_path(\n          log_entry, ('protoPayload', 'authenticationInfo', 'principalEmail'),\n          default='')\n      if not principal_email:  # filter out entries with no affected account\n        continue\n      # Filter out non-relevant and repeated log entries.\n      if (log_entry['severity'] == 'ERROR' and MATCH_STRING in get_path(\n          log_entry, ('protoPayload', 'status', 'message'), default='') and\n          principal_email not in principals_with_error):\n        principals_with_error.add(principal_email)\n  return principals_with_error\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'Logging API is disabled')\n    return\n\n  if not apis.is_enabled(context.project_id, 'notebooks'):\n    report.add_skipped(project, 'Notebooks API is disabled')\n    return\n\n  principals_with_error = find_logs_with_permission_errors(\n      context, logs_by_project_notebooks, set())\n\n  principals_with_error.update(\n      find_logs_with_permission_errors(context, logs_by_project_compute,\n                                       principals_with_error))\n\n  if principals_with_error:\n    for principal_email in principals_with_error:\n      report.add_failed(\n          project,\n          (f'{principal_email} account is missing mandatory'\n           ' compute.subnetworks.use and compute.subnetworks.useExternalIp'\n           ' permissions to create notebook'),\n      )\n  else:\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/notebooks/err_2023_003_create_notebook_permissions_missing.py",
    "content": "# Copyright 2023 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Vertex AI Workbench account has required permissions to create and use notebooks\n\nCreating and using a notebook requires service-*@gcp-sa-notebooks.iam.gserviceaccount.com\nto have \"AI Platform Notebooks Service Agent\" role and for user to have \"Service Account User\" role\n\"\"\"\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nMATCH_STRING = 'permission'\n\nNOTEBOOKS_SA = '^service-.*@gcp-sa-notebooks.iam.gserviceaccount.com$'\n\nNOTEBOOKS_MISSING_PERMISSIONS_FILTER = [\n    'severity=ERROR',\n    'protoPayload.serviceName = \"notebooks.googleapis.com\"',\n    f'protoPayload.status.message =~ \"{MATCH_STRING}\"',\n    'protoPayload.status.code = 7',\n]\n\nCOMPUTE_ENGINE_MISSING_PERMISSIONS_FILTER = [\n    'severity=ERROR',\n    'protoPayload.serviceName = \"compute.googleapis.com\"',\n    'protoPayload.authorizationInfo.granted != True',\n    f'protoPayload.authenticationInfo.principalEmail =~ \"{NOTEBOOKS_SA}\"',\n    f'protoPayload.status.message =~ \"{MATCH_STRING}\"',\n    'protoPayload.status.code = 7',\n]\n\nlogs_by_project_notebooks = {}\nlogs_by_project_compute = {}\n\n\ndef prepare_rule(context: models.Context):\n  project_id = context.project_id\n\n  log_name = 'log_id(\"cloudaudit.googleapis.com/activity\")'\n\n  logs_by_project_notebooks[context.project_id] = logs.query(\n      project_id=project_id,\n      log_name=log_name,\n      resource_type='audited_resource',\n      filter_str=' AND '.join(NOTEBOOKS_MISSING_PERMISSIONS_FILTER))\n\n  logs_by_project_compute[context.project_id] = logs.query(\n      project_id=project_id,\n      log_name=log_name,\n      resource_type='gce_instance',\n      filter_str=' AND '.join(COMPUTE_ENGINE_MISSING_PERMISSIONS_FILTER))\n\n\ndef find_logs_with_permission_errors(context: models.Context,\n                                     logs_by_project: dict):\n  if (logs_by_project.get(context.project_id) and\n      logs_by_project[context.project_id].entries):\n    for log_entry in logs_by_project[context.project_id].entries:\n      # Filter out non-relevant and repeated log entries.\n      if (log_entry['severity'] == 'ERROR' and MATCH_STRING in get_path(\n          log_entry, ('protoPayload', 'status', 'message'), default='')):\n        return True\n  return False\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'Logging API is disabled')\n    return\n\n  if not apis.is_enabled(context.project_id, 'notebooks'):\n    report.add_skipped(project, 'Notebooks API is disabled')\n    return\n\n  # Logs-based rule as any user account or SA can create/use/own notebooks\n  if (find_logs_with_permission_errors(context, logs_by_project_notebooks) or\n      find_logs_with_permission_errors(context, logs_by_project_compute)):\n    report.add_failed(\n        project,\n        ('Missing permissions: '\n         '@gcp-sa-notebooks.iam.gserviceaccount.com Service Account must '\n         'have \"AI Platform Notebooks Service Agent\" role and user account '\n         'must have \"Service Account User\" role'))\n  else:\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/notebooks/err_2023_004_runtimes_health_state.py",
    "content": "# Copyright 2023 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Vertex AI Workbench runtimes for managed notebooks are healthy\n\nRule which verifies the Vertex AI Workbench runtimes for managed notebooks have\na healthy state\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, notebooks\n\nruntimes_by_project = {}\n\n\ndef prefetch_rule(context: models.Context):\n  runtimes_by_project[context.project_id] = notebooks.get_runtimes(context)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  if not apis.is_enabled(context.project_id, 'notebooks'):\n    report.add_skipped(None, 'Notebooks API is disabled')\n    return\n\n  runtimes = runtimes_by_project[context.project_id]\n\n  if not runtimes:\n    report.add_skipped(None, 'No runtimes for managed notebooks found')\n    return\n  for runtime in runtimes.values():\n    if not runtime.name:\n      report.add_skipped(runtime, 'Runtime name not found')\n      continue\n    health_state = runtime.health_state\n    health_state_message = f'Health state = {health_state}'\n    if health_state == notebooks.HealthStateEnum.HEALTHY:\n      report.add_ok(runtime)\n    if health_state == notebooks.HealthStateEnum.UNHEALTHY:\n      report.add_failed(runtime, health_state_message)\n    else:\n      report.add_skipped(runtime, health_state_message)\n"
  },
  {
    "path": "gcpdiag/lint/notebooks/err_2024_001_executor_explicit_project_permissions.py",
    "content": "# Copyright 2024 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Vertex AI Workbench Notebooks Executor code uses explicit project selection\n\nRunning a notebook code execution requires user to explicitly set client\nlibraries with the user's project to avoid 40X errors with the executor project\n\"\"\"\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nERROR_CODE = '40'\nERROR_MESSAGE = 'permission'\n\nERROR_MESSAGE_MATCH_STRING_1 = (\n    f'{ERROR_CODE}[4,3] (GET|POST) '\n    r'https:\\/\\/bigquery.googleapis.com\\/bigquery\\/[a-z0-9.]*\\/projects\\/[a-z0-9]{1,20}-tp'\n)\n\nERROR_MESSAGE_MATCH_STRING_2 = (\n    'does not have '\n    f'[a-z.]* {ERROR_MESSAGE} in project [a-z0-9]{1,20}-tp')\n\nERROR_MESSAGE_MATCH_STRING_3 = fr'{ERROR_CODE}[3,4] gs:\\/\\/[a-z0-9]{1,20}-tp'\n\nERROR_MESSAGES = (\n    f'(jsonPayload.message =~ \"{ERROR_MESSAGE_MATCH_STRING_1}\" OR '\n    f'jsonPayload.message =~ \"{ERROR_MESSAGE_MATCH_STRING_2}\" OR '\n    f'jsonPayload.message =~ \"{ERROR_MESSAGE_MATCH_STRING_3}\")')\n\nNOTEBOOKS_EXECUTOR_PERMISSIONS_ERRORS_FILTER = [\n    'severity=ERROR',\n    'labels.\"compute.googleapis.com/resource_name\" =~ \"training\"',\n    ERROR_MESSAGES\n]\n\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  project_id = context.project_id\n\n  log_name = 'log_id(\"workerpool0-0\")'\n\n  logs_by_project[context.project_id] = logs.query(\n      project_id=project_id,\n      log_name=log_name,\n      resource_type='ml_job',\n      filter_str=' AND '.join(NOTEBOOKS_EXECUTOR_PERMISSIONS_ERRORS_FILTER),\n  )\n\n\ndef find_logs_with_permission_errors(context: models.Context):\n  if (logs_by_project.get(context.project_id) and\n      logs_by_project[context.project_id].entries):\n    for log_entry in logs_by_project[context.project_id].entries:\n      # Filter out non-relevant and repeated log entries.\n      path_message = get_path(log_entry, ('jsonPayload', 'message'), default='')\n      if log_entry['severity'] == 'ERROR' and (ERROR_CODE in path_message or\n                                               ERROR_MESSAGE in path_message):\n        return True\n  return False\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n\n  # skip entire rule if logging is disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'Logging API is disabled')\n    return\n\n  if not apis.is_enabled(context.project_id, 'notebooks'):\n    report.add_skipped(project, 'Notebooks API is disabled')\n    return\n\n  if not apis.is_enabled(context.project_id, 'aiplatform'):\n    # Notebooks executor depends on Vertex AI API\n    report.add_skipped(project, 'Vertex API is disabled')\n    return\n\n  # Logs-based rule as error only occurs at runtime and depends on user code\n  if find_logs_with_permission_errors(context):\n    report.add_failed(\n        project,\n        ('Missing permissions in executor project: You did not specify your'\n         'own project id explicitly in your notebook code'),\n    )\n  else:\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/notebooks/notebooks_rules_snapshot_test.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\" Generalize rule snapshot testing \"\"\"\n\nfrom gcpdiag.lint import notebooks, snapshot_test_base\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = notebooks\n  project_id = 'gcpdiag-notebooks1-aaaa'\n"
  },
  {
    "path": "gcpdiag/lint/notebooks/snapshots/BP_2023_001.txt",
    "content": "*  notebooks/BP/2023_001: Vertex AI Workbench instance enables system health report\n   - projects/gcpdiag-notebooks1-aaaa/locations/us-west1-a/instances/gcpdiag-notebooks1instance-aaaa [FAIL]\n\n   User-managed notebooks instances can report the system health of the core\n   services like Docker service, Docker reverse proxy agent, Jupyter service and\n   Jupyter API.\n\n   https://gcpdiag.dev/rules/notebooks/BP/2023_001\n\n"
  },
  {
    "path": "gcpdiag/lint/notebooks/snapshots/BP_2023_002.txt",
    "content": "*  notebooks/BP/2023_002: Vertex AI Workbench user-managed notebook instances are up to date\n   - projects/gcpdiag-notebooks1-aaaa/locations/us-west1-a/instances/gcpdiag-notebooks1instance-aaaa [FAIL]\n     Instance is upgradeable - upgradeVersion: m109, upgradeInfo: A new image is available for upgrade. Backup user data before upgrading, upgradeImage: https://www.googleapis.com/compute/v1/projects/deeplearning-platform-release/global/images/tf-latest-cpu-v20230615\n\n   Vertex AI Workbench user-managed notebook instance can be upgraded to have\n   latest bug fixes, new capabilities, framework and package updates\n\n   https://gcpdiag.dev/rules/notebooks/BP/2023_002\n\n"
  },
  {
    "path": "gcpdiag/lint/notebooks/snapshots/BP_2023_003.txt",
    "content": "*  notebooks/BP/2023_003: Vertex AI Workbench runtimes for managed notebooks are up to date\n   - projects/gcpdiag-notebooks1-aaaa/locations/us-west1/runtimes/gcpdiag-notebooks1runtime-aaaa [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/notebooks/snapshots/BP_2023_004.txt",
    "content": "*  notebooks/BP/2023_004: Vertex AI Workbench runtimes for managed notebooks enable idle shutdown\n   - projects/gcpdiag-notebooks1-aaaa/locations/us-west1/runtimes/gcpdiag-notebooks1runtime-aaaa [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/notebooks/snapshots/ERR_2023_001.txt",
    "content": "*  notebooks/ERR/2023_001: Vertex AI Workbench user-managed notebook instances are healthy\n   - projects/gcpdiag-notebooks1-aaaa/locations/us-west1-a/instances/gcpdiag-notebooks1instance-aaaa [FAIL]\n     Health state = UNHEALTHY\n\n   Rule which verifies the Vertex AI Workbench user-managed notebook instances\n   have a healthy state\n\n   https://gcpdiag.dev/rules/notebooks/ERR/2023_001\n\n"
  },
  {
    "path": "gcpdiag/lint/notebooks/snapshots/ERR_2023_002.txt",
    "content": "*  notebooks/ERR/2023_002: Vertex AI Workbench account has compute.subnetworks permissions to create notebook in VPC\n   - projects/gcpdiag-notebooks1-aaaa                                     [SKIP]\n     Logging API is disabled\n\n"
  },
  {
    "path": "gcpdiag/lint/notebooks/snapshots/ERR_2023_003.txt",
    "content": "*  notebooks/ERR/2023_003: Vertex AI Workbench account has required permissions to create and use notebooks\n   - projects/gcpdiag-notebooks1-aaaa                                     [SKIP]\n     Logging API is disabled\n\n"
  },
  {
    "path": "gcpdiag/lint/notebooks/snapshots/ERR_2023_004.txt",
    "content": "*  notebooks/ERR/2023_004: Vertex AI Workbench runtimes for managed notebooks are healthy\n   - projects/gcpdiag-notebooks1-aaaa/locations/us-west1/runtimes/gcpdiag-notebooks1runtime-aaaa [SKIP]\n     Health state = HEALTH_STATE_UNSPECIFIED\n\n"
  },
  {
    "path": "gcpdiag/lint/notebooks/snapshots/ERR_2024_001.txt",
    "content": "*  notebooks/ERR/2024_001: Vertex AI Workbench Notebooks Executor code uses explicit project selection\n   - projects/gcpdiag-notebooks1-aaaa                                     [SKIP]\n     Logging API is disabled\n\n"
  },
  {
    "path": "gcpdiag/lint/notebooks/snapshots/WARN_2023_001.txt",
    "content": "*  notebooks/WARN/2023_001: Vertex AI Workbench instance is not being OOMKilled\n   (serial port output is unavailable)                                    [SKIP]\n\n"
  },
  {
    "path": "gcpdiag/lint/notebooks/snapshots/WARN_2023_002.txt",
    "content": "*  notebooks/WARN/2023_002: Vertex AI Workbench instance is in healthy data disk space status\n   - projects/gcpdiag-notebooks1-aaaa/locations/us-west1-a/instances/gcpdiag-notebooks1instance-aaaa [SKIP]\n     No health info found\n\n"
  },
  {
    "path": "gcpdiag/lint/notebooks/snapshots/WARN_2023_003.txt",
    "content": "*  notebooks/WARN/2023_003: Vertex AI Workbench instance is in healthy boot disk space status\n   - projects/gcpdiag-notebooks1-aaaa/locations/us-west1-a/instances/gcpdiag-notebooks1instance-aaaa [SKIP]\n     No health info found\n\n"
  },
  {
    "path": "gcpdiag/lint/notebooks/warn_2023_001_notebooks_oom.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Vertex AI Workbench instance is not being OOMKilled\n\nHigh memory utilization more than 85% in the user-managed notebooks instance\ncould be a cause of 524 (A Timeout Occurred) errors while opening Jupyterlab.\n\"\"\"\nimport re\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.lint.gce import utils\nfrom gcpdiag.queries import apis, gce, notebooks\n\nOOMKILLED_MESSAGES = [\n    'Out of memory: Kill process', 'oom_reaper: reaped process'\n]\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = utils.SerialOutputSearch(\n      context, search_strings=OOMKILLED_MESSAGES)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  if not apis.is_enabled(context.project_id, 'notebooks'):\n    report.add_skipped(None, 'Notebooks API is disabled')\n    return\n\n  instances = notebooks.get_instances(context)\n  if not instances:\n    report.add_skipped(None, 'No instances found')\n    return\n\n  if not utils.is_serial_port_one_logs_available(context):\n    report.add_skipped(None, 'serial port output is unavailable')\n    return\n\n  search = logs_by_project[context.project_id]\n  p_gce_vm = re.compile(r'projects/.+/locations/(.+)/instances/(.+)')\n\n  for instance in instances.values():\n    result = p_gce_vm.match(instance.name)\n    if not result:\n      continue\n\n    zone, vm_name = result.group(1), result.group(2)\n    gce_vm = gce.get_instance(context.project_id, zone, vm_name)\n\n    if search.get_last_match(instance_id=gce_vm.id):\n      report.add_failed(instance)\n    else:\n      report.add_ok(instance)\n"
  },
  {
    "path": "gcpdiag/lint/notebooks/warn_2023_002_data_disk_utilization.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Vertex AI Workbench instance is in healthy data disk space status\n\nThe data disk space status is unhealthy if the disk space is greater than 85%\nfull.\n\"\"\"\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, notebooks\n\ninstances_by_project = {}\n\n\ndef prefetch_rule(context: models.Context):\n  instances_by_project[context.project_id] = notebooks.get_instances(context)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n\n  if not apis.is_enabled(context.project_id, 'notebooks'):\n    report.add_skipped(None, 'Notebooks API is disabled')\n    return\n\n  instances = instances_by_project[context.project_id]\n\n  if not instances:\n    report.add_skipped(None, 'No instances found')\n    return\n\n  for instance in instances.values():\n    health_info = notebooks.get_instance_health_info(context, instance.name)\n\n    if not health_info:\n      report.add_skipped(instance, 'No health info found')\n      continue\n\n    disk_util = int(health_info.get('data_disk_utilization_percent', '0'))\n\n    if disk_util > 85:\n      report.add_failed(instance)\n    else:\n      report.add_ok(instance)\n"
  },
  {
    "path": "gcpdiag/lint/notebooks/warn_2023_003_boot_disk_utilization.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Vertex AI Workbench instance is in healthy boot disk space status\n\nThe boot disk space status is unhealthy if the disk space is greater than 85%\nfull.\n\"\"\"\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, notebooks\n\ninstances_by_project = {}\n\n\ndef prefetch_rule(context: models.Context):\n  instances_by_project[context.project_id] = notebooks.get_instances(context)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n\n  if not apis.is_enabled(context.project_id, 'notebooks'):\n    report.add_skipped(None, 'Notebooks API is disabled')\n    return\n\n  instances = instances_by_project[context.project_id]\n\n  if not instances:\n    report.add_skipped(None, 'No instances found')\n    return\n\n  for instance in instances.values():\n    health_info = notebooks.get_instance_health_info(context, instance.name)\n\n    if not health_info:\n      report.add_skipped(instance, 'No health info found')\n      continue\n\n    disk_util = int(health_info.get('boot_disk_utilization_percent', '0'))\n\n    if disk_util > 85:\n      report.add_failed(instance)\n    else:\n      report.add_ok(instance)\n"
  },
  {
    "path": "gcpdiag/lint/output/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/lint/output/api_output.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"API class for api output implementations \"\"\"\nimport logging\nimport sys\n\nfrom gcpdiag import lint\nfrom gcpdiag.lint.output import base_output\n\n\nclass APIOutput(base_output.BaseOutput):\n  \"\"\"API output implementation.\"\"\"\n\n  @property\n  def result_handler(self) -> 'lint.LintResultsHandler':\n    return self\n\n  def process_rule_report(self,\n                          rule_report: lint.LintReportRuleInterface) -> None:\n    pass\n\n  def get_logging_handler(self) -> logging.Handler:\n    stream_handler = logging.StreamHandler(stream=sys.stdout)\n    formatter = logging.Formatter('%(levelname)-6s: %(message)s')\n    stream_handler.setFormatter(formatter)\n    return stream_handler\n"
  },
  {
    "path": "gcpdiag/lint/output/base_output.py",
    "content": "\"\"\" Base class for different output implementations \"\"\"\nimport logging\nimport sys\nimport threading\nfrom typing import TextIO\n\n# pylint: disable=unused-import (lint is used in type annotations)\nfrom gcpdiag import config, lint, models\n\n\nclass BaseOutput:\n  \"\"\" Base class for different output implementations \"\"\"\n  file: TextIO\n  show_ok: bool\n  show_skipped: bool\n  log_info_for_progress_only: bool\n  lock: threading.Lock\n\n  def __init__(self,\n               file: TextIO = sys.stdout,\n               log_info_for_progress_only: bool = True,\n               show_ok: bool = True,\n               show_skipped: bool = False) -> None:\n    self.file = file\n    self.show_ok = show_ok\n    self.show_skipped = show_skipped\n    self.log_info_for_progress_only = log_info_for_progress_only\n    self.lock = threading.Lock()\n\n  def display_banner(self) -> None:\n    print(f'gcpdiag {config.VERSION}\\n', file=sys.stderr)\n\n  def display_header(self, context: models.Context) -> None:\n    print(f'Starting lint inspection ({context})...\\n', file=sys.stderr)\n\n  def display_footer(self, result: 'lint.LintResults') -> None:\n    totals = result.get_totals_by_status()\n    state_strs = [\n        f'{totals.get(state, 0)} {state}'\n        for state in ['skipped', 'ok', 'failed']\n    ]\n    print(f\"Rules summary: {', '.join(state_strs)}\", file=sys.stderr)\n\n  def get_logging_handler(self) -> logging.Handler:\n    return _LoggingHandler(self)\n\n  def print_line(self, text: str = '') -> None:\n    \"\"\"Write a line to the desired output provided as self.file.\"\"\"\n    print(text, file=self.file, flush=True)\n\n  def _should_result_be_skipped(self, result: 'lint.LintRuleResult') -> bool:\n    skipped = result.status == 'skipped' and not self.show_skipped\n    ok = result.status == 'ok' and not self.show_ok\n    return skipped or ok\n\n  def _should_rule_be_skipped(\n      self, rule_report: 'lint.LintReportRuleInterface') -> bool:\n    skipped = rule_report.overall_status == 'skipped' and not self.show_skipped\n    ok = rule_report.overall_status == 'ok' and not self.show_ok\n    return skipped or ok\n\n\nclass _LoggingHandler(logging.Handler):\n  \"\"\"logging.Handler implementation used when producing a lint report.\"\"\"\n  output: BaseOutput\n\n  def __init__(self, output: BaseOutput):\n    super().__init__()\n    self.output = output\n\n  def format(self, record: logging.LogRecord) -> str:\n    return record.getMessage()\n\n  def emit(self, record: logging.LogRecord) -> None:\n    if record.levelno == logging.INFO:\n      # Do not output anything, assuming that the\n      # interesting output will be passed via print_line\n      return\n    else:\n      msg = f'[{record.levelname}] ' + self.format(record) + ' '\n      # workaround for bug:\n      # https://github.com/googleapis/google-api-python-client/issues/1116\n      if 'Invalid JSON content from response' in msg:\n        return\n    with self.output.lock:\n      sys.stdout.flush()\n      print(msg, file=sys.stderr)\n"
  },
  {
    "path": "gcpdiag/lint/output/csv_output.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Output implementation that prints result in CSV format.\"\"\"\n\nimport csv\nimport sys\nfrom typing import Optional, TextIO\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.lint.output import base_output\n\n\nclass CSVOutput(base_output.BaseOutput):\n  \"\"\" Output implementation that prints result in CSV format. \"\"\"\n\n  columns = ['rule', 'resource', 'status', 'message', 'doc_url']\n\n  def __init__(self,\n               file: TextIO = sys.stdout,\n               log_info_for_progress_only: bool = True,\n               show_ok: bool = True,\n               show_skipped: bool = False):\n    super().__init__(file, log_info_for_progress_only, show_ok, show_skipped)\n    self.writer = csv.DictWriter(sys.stdout, fieldnames=self.columns)\n\n  @property\n  def result_handler(self) -> 'lint.LintResultsHandler':\n    return self\n\n  def process_rule_report(self,\n                          rule_report: lint.LintReportRuleInterface) -> None:\n    with self.lock:\n      self._print_rule_report(rule_report)\n\n  def _print_rule_report(self,\n                         rule_report: lint.LintReportRuleInterface) -> None:\n    for result in rule_report.results:\n      if not self._should_result_be_skipped(result):\n        self._add_result(rule=rule_report.rule,\n                         resource=result.resource,\n                         status=result.status,\n                         reason=result.reason,\n                         short_info=result.short_info)\n\n  def _add_result(self,\n                  rule: lint.LintRule,\n                  resource: Optional[models.Resource],\n                  status: str,\n                  short_info: Optional[str] = None,\n                  reason: Optional[str] = None) -> None:\n    self.rule_has_results = True\n    rule_id = f'{rule.product}/{rule.rule_class}/{rule.rule_id}'\n    if reason:\n      message = '' + reason\n    elif short_info:\n      message = '' + short_info\n    else:\n      message = '-'\n    self.writer.writerow({\n        'rule': rule_id,\n        'resource': resource.full_path if resource else '-',\n        'status': status,\n        'message': message,\n        'doc_url': rule.doc_url\n    })\n\n  def display_header(self, context):\n    super().display_header(context)\n    self.writer.writeheader()\n\n  def display_footer(self, result) -> None:\n    # add extra line\n    self.print_line()\n    return super().display_footer(result)\n"
  },
  {
    "path": "gcpdiag/lint/output/json_output.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\" Output implementation that prints result in JSON format. \"\"\"\n\nimport json\nfrom typing import Optional\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.lint.output import base_output\n\n\nclass JSONOutput(base_output.BaseOutput):\n  \"\"\" Output implementation that prints result in JSON format. \"\"\"\n\n  _printed_first_result = False\n\n  def display_header(self, context: models.Context) -> None:\n    super().display_header(context)\n    # group output as list - start\n    self.print_line('[')\n\n  def display_footer(self, result: lint.LintResults) -> None:\n    # group output as list - end\n    self.print_line(']')\n    # add extra line\n    self.print_line()\n    return super().display_footer(result)\n\n  @property\n  def result_handler(self) -> 'lint.LintResultsHandler':\n    return self\n\n  def process_rule_report(self,\n                          rule_report: lint.LintReportRuleInterface) -> None:\n    with self.lock:\n      self._print_rule_report(rule_report)\n\n  def _print_rule_report(self,\n                         rule_report: lint.LintReportRuleInterface) -> None:\n    for result in rule_report.results:\n      if not self._should_result_be_skipped(result):\n        self._add_result(rule=rule_report.rule,\n                         resource=result.resource,\n                         status=result.status,\n                         reason=result.reason,\n                         short_info=result.short_info)\n\n  def _add_result(self,\n                  rule: lint.LintRule,\n                  resource: Optional[models.Resource],\n                  status: str,\n                  short_info: Optional[str] = None,\n                  reason: Optional[str] = None) -> None:\n    self.rule_has_results = True\n    rule_id = f'{rule.product}/{rule.rule_class}/{rule.rule_id}'\n    if reason:\n      message = '' + reason\n    elif short_info:\n      message = '' + short_info\n    else:\n      message = '-'\n    if self._printed_first_result:\n      self.print_line(',')\n    else:\n      self._printed_first_result = True\n    self.print_line(\n        json.dumps(\n            {\n                'rule': rule_id,\n                'resource': resource.full_path if resource else '-',\n                'status': status,\n                'message': message,\n                'doc_url': rule.doc_url\n            },\n            ensure_ascii=False,\n            indent=2))\n"
  },
  {
    "path": "gcpdiag/lint/output/terminal_output.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\" Output implementation that prints result in human-readable format. \"\"\"\n\nimport functools\nimport logging\nimport os\nimport sys\nimport textwrap\nfrom typing import Any, Dict, List, Optional, TextIO\n\nimport blessings\n\n# pylint: disable=unused-import (lint is used in type hints)\nfrom gcpdiag import config, lint, models\nfrom gcpdiag.lint.output import base_output\n\nOUTPUT_WIDTH = 68\n\n\ndef is_cloud_shell():\n  return os.getenv('CLOUD_SHELL')\n\n\ndef emoji_wrap(char):\n  if is_cloud_shell():\n    # emoji not displayed as double width in Cloud Shell (bug?)\n    return char + ' '\n  else:\n    return char\n\n\nclass OutputOrderer:\n  \"\"\" Helper to maintain sorting order of the rules \"\"\"\n\n  _result_handler: 'lint.LintResultsHandler'\n  _output_order: List[str]\n  _next_rule_idx: int\n  _rule_reports_ready: Dict[str, 'lint.LintReportRuleInterface']\n\n  def __init__(self, result_handler: 'lint.LintResultsHandler',\n               output_order: List[str]) -> None:\n    self._result_handler = result_handler\n    self._output_order = output_order\n    self._next_rule_idx = 0\n    self._rule_reports_ready = {}\n\n  def process_rule_report(self, rule_report: Any) -> None:\n    rule_id = str(rule_report.rule)\n    self._rule_reports_ready[rule_id] = rule_report\n    self._output_ready()\n\n  def _output_ready(self) -> None:\n    while self._has_more_work and self._is_next_rule_ready:\n      rule_report = self._rule_reports_ready[self._next_rule_id]\n      self._result_handler.process_rule_report(rule_report)\n      self._next_rule_idx += 1\n\n  @property\n  def _has_more_work(self) -> bool:\n    return self._next_rule_idx < len(self._output_order)\n\n  @property\n  def _is_next_rule_ready(self) -> bool:\n    return self._next_rule_id in self._rule_reports_ready\n\n  @property\n  def _next_rule_id(self) -> str:\n    return self._output_order[self._next_rule_idx]\n\n\nclass TerminalOutput(base_output.BaseOutput):\n  \"\"\" Output implementation that prints result in human-readable format. \"\"\"\n  _output_order: Optional[List[str]]\n  line_unfinished: bool\n  term: blessings.Terminal\n\n  def __init__(self,\n               file: TextIO = sys.stdout,\n               log_info_for_progress_only: bool = True,\n               show_ok: bool = True,\n               show_skipped: bool = False,\n               output_order: Optional[List[str]] = None):\n    super().__init__(file, log_info_for_progress_only, show_ok, show_skipped)\n    self._output_order = output_order\n    self.line_unfinished = False\n    self.term = blessings.Terminal()\n\n  @functools.cached_property\n  def result_handler(self) -> 'lint.LintResultsHandler':\n    default_handler = self\n    if self._output_order is None:\n      return default_handler\n    else:\n      return OutputOrderer(result_handler=default_handler,\n                           output_order=self._output_order)\n\n  def process_rule_report(self,\n                          rule_report: 'lint.LintReportRuleInterface') -> None:\n    if not self._should_rule_be_skipped(rule_report):\n      with self.lock:\n        self._print_rule_report(rule_report)\n\n  def _print_rule_report(self,\n                         rule_report: 'lint.LintReportRuleInterface') -> None:\n    self._print_rule_header(rule=rule_report.rule)\n    for check_result in rule_report.results:\n      self._handle_rule_report_result(check_result)\n    if rule_report.overall_status == 'failed':\n      self._print_long_desc(rule=rule_report.rule)\n    self.terminal_print_line()\n\n  def _handle_rule_report_result(self,\n                                 check_result: 'lint.LintRuleResult') -> None:\n    if check_result.status == 'failed':\n      self._print_failed(resource=check_result.resource,\n                         reason=check_result.reason,\n                         short_info=check_result.short_info)\n    elif check_result.status == 'skipped':\n      self._print_skipped(resource=check_result.resource,\n                          reason=check_result.reason,\n                          short_info=check_result.short_info)\n    elif check_result.status == 'ok':\n      self._print_ok(resource=check_result.resource,\n                     short_info=check_result.short_info)\n    else:\n      raise RuntimeError('Unknown rule report status')\n\n  def _wrap_indent(self, text: str, prefix: str) -> str:\n    width = self.term.width or 80\n    width = min(width, 80)\n    return textwrap.indent(textwrap.fill(text, width - len(prefix)), prefix)\n\n  def _italic(self, text: str) -> str:\n    if is_cloud_shell():\n      # TODO(b/201958597): Cloud Shell with tmux doesn't format italic properly at the moment\n      return text\n    else:\n      return self.term.italic(text)\n\n  def terminal_update_line(self, text: str) -> None:\n    \"\"\"Update the current line on the terminal.\"\"\"\n    if self.term.width:\n      print(self.term.move_x(0) + self.term.clear_eol() + text,\n            end='',\n            flush=True,\n            file=self.file)\n      self.line_unfinished = True\n    else:\n      # If it's a stream, do not output anything, assuming that the\n      # interesting output will be passed via terminal_print_line\n      pass\n\n  def terminal_erase_line(self) -> None:\n    \"\"\"Remove the current content on the line.\"\"\"\n    if self.line_unfinished and self.term.width:\n      print(self.term.move_x(0) + self.term.clear_eol(),\n            flush=True,\n            end='',\n            file=self.file)\n    self.line_unfinished = False\n\n  def terminal_print_line(self, text: str = '') -> None:\n    \"\"\"Write a line to the terminal, replacing any current line content, and add a line feed.\"\"\"\n    if self.line_unfinished and self.term.width:\n      self.terminal_update_line(text)\n      print(file=self.file)\n    else:\n      print(text, file=self.file)\n      # flush the output, so that we can more easily grep, tee, etc.\n      sys.stdout.flush()\n    self.line_unfinished = False\n\n  def display_banner(self) -> None:\n    if self.term.does_styling:\n      print(self.term.bold(f\"gcpdiag {emoji_wrap('🩺')} {config.VERSION}\\n\"))\n    else:\n      print(f'gcpdiag {config.VERSION}\\n', file=sys.stderr)\n\n  def _print_rule_header(self, rule: 'lint.LintRule') -> None:\n    bullet = ''\n    if self.term.does_styling:\n      bullet = emoji_wrap('🔎') + ' '\n    else:\n      bullet = '*  '\n    self.terminal_print_line(\n        bullet +\n        self.term.yellow(f'{rule.product}/{rule.rule_class}/{rule.rule_id}') +\n        ': ' + f'{rule.short_desc}')\n\n  def _print_long_desc(self, rule: 'lint.LintRule') -> None:\n    self.terminal_print_line()\n    long_desc = rule.long_desc or ''\n    self.terminal_print_line(self._italic(self._wrap_indent(long_desc, '   ')))\n    self.terminal_print_line()\n    self.terminal_print_line('   ' + rule.doc_url)\n\n  def _print_skipped(self, resource: Optional[models.Resource],\n                     reason: Optional[str], short_info: Optional[str]) -> None:\n    if not self.show_skipped:\n      return\n    if short_info:\n      short_info = ' ' + short_info\n    else:\n      short_info = ''\n    reason = reason or ''\n    if resource:\n      self.terminal_print_line('   - ' +\n                               resource.full_path.ljust(OUTPUT_WIDTH) +\n                               ' [SKIP]' + short_info)\n      self.terminal_print_line(textwrap.indent(reason, '     '))\n    else:\n      self.terminal_print_line('   ' +\n                               ('(' + reason + ')').ljust(OUTPUT_WIDTH + 2) +\n                               ' [SKIP]' + short_info)\n\n  def _print_ok(self, resource: Optional[models.Resource],\n                short_info: Optional[str]) -> None:\n    if not self.show_ok:\n      return\n    if short_info:\n      short_info = ' ' + str(short_info)\n    else:\n      short_info = ''\n    full_path = resource.full_path if resource is not None \\\n                 and resource.full_path is not None else ''\n    self.terminal_print_line('   - ' + full_path.ljust(OUTPUT_WIDTH) + ' [' +\n                             self.term.green(' OK ') + ']' + short_info)\n\n  def _print_failed(self, resource: Optional[models.Resource],\n                    reason: Optional[str], short_info: Optional[str]) -> None:\n    if short_info:\n      short_info = ' ' + short_info\n    else:\n      short_info = ''\n    full_path = resource.full_path if resource is not None \\\n                 and resource.full_path is not None else ''\n    self.terminal_print_line('   - ' + full_path.ljust(OUTPUT_WIDTH) + ' [' +\n                             self.term.red('FAIL') + ']' + short_info)\n    if reason:\n      self.terminal_print_line(textwrap.indent(reason, '     '))\n\n  def get_logging_handler(self) -> logging.Handler:\n    return _LoggingHandler(self)\n\n\nclass _LoggingHandler(logging.Handler):\n  \"\"\"logging.Handler implementation used when producing a lint report.\"\"\"\n  output: TerminalOutput\n\n  def __init__(self, output: TerminalOutput) -> None:\n    super().__init__()\n    self.output = output\n\n  def format(self, record: logging.LogRecord) -> str:\n    return record.getMessage()\n\n  def emit(self, record: logging.LogRecord) -> None:\n    if record.levelno == logging.INFO and self.output.log_info_for_progress_only:\n      msg = '   ... ' + self.format(record)\n      # make sure we don't go beyond the terminal width\n      if self.output.term.width:\n        term_overflow = len(msg) - self.output.term.width\n        if term_overflow > 0:\n          msg = msg[:-term_overflow]\n      with self.output.lock:\n        self.output.terminal_update_line(msg)\n    else:\n      msg = f'[{record.levelname}] ' + self.format(record) + ' '\n      # workaround for bug:\n      # https://github.com/googleapis/google-api-python-client/issues/1116\n      if 'Invalid JSON content from response' in msg:\n        return\n      with self.output.lock:\n        self.output.terminal_print_line(msg)\n"
  },
  {
    "path": "gcpdiag/lint/pubsub/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/lint/pubsub/bp_2024_001_ouma_less_one_day.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Oldest Unacked Message Age Value less than 24 hours.\n\nFailing to pull messages and ack them within 24 hours could lead to additional\nstorage charges, as well as potentially overwhelm subscribers who are not\nflow-controlled when delivery is begun at a high backlog.\n\"\"\"\n\nfrom itertools import islice\nfrom typing import Dict\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import crm, monitoring, pubsub\n\n# ouma == oldest_unacked_message_age\nouma_tracker: Dict[str, monitoring.TimeSeriesCollection] = {}\nMAX_SUBSCRIPTIONS_TO_DISPLAY = 10\n\n\ndef prefetch_rule(context: models.Context):\n  \"\"\"Gathers the metric values for the ouma for all subscriptions.\"\"\"\n  subscription_name = ''\n  query_ouma = (\n      'fetch pubsub_subscription | metric'\n      ' \"pubsub.googleapis.com/subscription/oldest_unacked_message_age\" |'\n      ' filter resource.project_id == \"{}\" &&'\n      ' (resource.subscription_id == \"{}\") | group_by 1m,'\n      ' [value_oldest_unacked_message_age_mean:'\n      ' mean(value.oldest_unacked_message_age)]| every 1m')\n\n  subscriptions = pubsub.get_subscriptions(context)\n\n  for _, subscription in subscriptions.items():\n    subscription_name = subscription.name\n    ouma_tracker[subscription_name] = monitoring.query(\n        context.project_id,\n        query_ouma.format(context.project_id, subscription_name),\n    )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  \"\"\"Checks for ouma value as more than 24 h to get FAIL.\"\"\"\n  project = crm.get_project(context.project_id)\n\n  if not ouma_tracker:\n    report.add_skipped(None, 'no subscription metrics found')\n\n  failing_subs = set()\n  for subscription_name, ouma_metric in ouma_tracker.items():\n    for metric_values in ouma_metric.values():\n      # eval needs to unwrap Dict result similar to {..., 'values': [[0.0]]}\n      if get_path(metric_values, ('values'))[0][0] > 24:\n        failing_subs.add(subscription_name)\n\n  # reporting\n  if failing_subs:\n    extra_subs = ''\n    if len(failing_subs) > MAX_SUBSCRIPTIONS_TO_DISPLAY:\n      extra_subs = (', and'\n                    f' {len(failing_subs) - MAX_SUBSCRIPTIONS_TO_DISPLAY} more'\n                    ' subscriptions')\n\n    # pylint: disable=line-too-long\n    report.add_failed(\n        project,\n        f'{len(failing_subs)} subscriptions have an'\n        ' oldest_unacked_message_age of more than 24 hours'\n        f\" {', '.join(islice(failing_subs, MAX_SUBSCRIPTIONS_TO_DISPLAY))}{extra_subs}\",\n    )\n  # pylint: enable=line-too-long\n  else:\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/pubsub/err_2024_001_bq_subscription_table_not_found.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Pub/Sub Bigquery Subscription Created using Exist BigQuery table.\n\nUnable to Create the BigQuery Subscription using  BigQuery table does not\nalready exist, Check If the table you are trying to use for Bigquery\nSubscription creation  is already existed in the BigQuery or not.\n\"\"\"\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nMATCH_STR = 'Not found: Table'\n\nTABLE_EXIST_CHECK_FILTER = [\n    'severity=ERROR',\n    f'protoPayload.status.message:\"{MATCH_STR}\"',\n]\n\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='pubsub_subscription',\n      log_name='log_id(\"cloudaudit.googleapis.com/activity\")',\n      filter_str=' AND '.join(TABLE_EXIST_CHECK_FILTER))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'logging api is disabled')\n    return\n\n  if not apis.is_enabled(context.project_id, 'bigquery'):\n    report.add_skipped(project, 'bigquery api is disabled')\n    return\n\n  if (logs_by_project.get(context.project_id) and\n      logs_by_project[context.project_id].entries):\n    for log_entry in logs_by_project[context.project_id].entries:\n      # Filter out non-relevant log entries.\n      if log_entry['severity'] != 'ERROR' or MATCH_STR not in get_path(\n          log_entry, ('protoPayload', 'status', 'message'), default=''):\n        continue\n      report.add_failed(\n          project,\n          'The BigQuery \"' +\n          log_entry['protoPayload']['request']['bigqueryConfig']['table'] +\n          '\" table does not already exist, which is required for '\n          'setting up a BigQuery subscription.',\n      )\n      return\n\n  # in case of there is no log or all logs are non-relevant\n  report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/pubsub/err_2024_002_vpc_sc_new_subs_create_policy_violated.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\" Creating Pub/Sub Push didn't fail because of organization policy.\n\nCreating a New Pub/Sub Push Subscription in VPC-SC enabled project is not allowed\ndue to violation of organization policies. This is by design in VPC-SC setup.\n\n\"\"\"\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nMATCH_STR = \"Request is prohibited by organization's policy\"\n\nNEW_PUSH_SUBSCRIPTION_CREATE_CHECK_FILTER = [\n    'severity=ERROR',\n    'protoPayload.methodName=\"google.pubsub.v1.Subscriber.CreateSubscription\"',\n    f'protoPayload.status.message:\"{MATCH_STR}\"',\n]\n\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='pubsub_subscription',\n      log_name='log_id(\"cloudaudit.googleapis.com/activity\")',\n      filter_str=' AND '.join(NEW_PUSH_SUBSCRIPTION_CREATE_CHECK_FILTER))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'logging api is disabled')\n    return\n\n  if (logs_by_project.get(context.project_id) and\n      logs_by_project[context.project_id].entries):\n    for log_entry in logs_by_project[context.project_id].entries:\n      # Filter out non-relevant log entries.\n      if log_entry['severity'] != 'ERROR' or MATCH_STR not in get_path(\n          log_entry, ('protoPayload', 'status', 'message'), default=''):\n        continue\n      report.add_failed(\n          project,\n          'Found matching log line for endpoint \"' +\n          log_entry['protoPayload']['request']['pushConfig']['pushEndpoint'] +\n          '\" is not allowed as the project is configured in VPC-SC perimeter ',\n      )\n      return\n\n  # in case of there is no log or all logs are non-relevant\n  report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/pubsub/err_2024_003_snapshot_creation_fails.py",
    "content": "#\n# Copyright 2024 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Snapshot should be created before it expires in less than 1hour of creation.\n\nUnable to create snapshot if the subscription backlog is too old and message of\n'subscription's backlog is too old' is displayed on the cloud console.\n\"\"\"\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nMATCH_STR = ('The operation could not be completed because the requested '\n             'source subscription\\'s backlog is too old')\n\nSNAPSHOT_CREATION_FAIL_CHECK_FILTER = [\n    'severity=ERROR',\n    f'protoPayload.status.message:\"{MATCH_STR}\"',\n]\n\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='pubsub_snapshot',\n      log_name='log_id(\"cloudaudit.googleapis.com/activity\")',\n      filter_str=' AND '.join(SNAPSHOT_CREATION_FAIL_CHECK_FILTER))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'logging api is disabled')\n    return\n\n  if (logs_by_project.get(context.project_id) and\n      logs_by_project[context.project_id].entries):\n    for log_entry in logs_by_project[context.project_id].entries:\n      # Filter out non-relevant log entries.\n      if log_entry['severity'] != 'ERROR' or MATCH_STR not in get_path(\n          log_entry, ('protoPayload', 'status', 'message'), default=''):\n        continue\n      report.add_failed(\n          project,\n          'The snapshot creation fails since backlog in subscription is greater than 6days23hours'\n          + 'which makes it eligible to expire in 1hour after creation',\n      )\n      return\n\n  # in case of there is no log or all logs are non-relevant\n  report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/pubsub/err_2025_001_push_service_agent_permission.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Pub/Sub push subscription service agent has the Service Account Token Creator Role.\n\nThe Pub/Sub service agent\n(service-{project-number}@gcp-sa-pubsub.iam.gserviceaccount.com) requires the\nService Account Token Creator Role (roles/iam.serviceAccountTokenCreator)\non the service account configured for a push subscription with authentication\nenabled. This allows Pub/Sub to generate tokens for authenticating to the\npush endpoint.\n\"\"\"\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import crm, iam, pubsub\n\nTOKEN_CREATOR_ROLE = 'roles/iam.serviceAccountTokenCreator'\nPUBSUB_SERVICE_AGENT_ROLE = 'roles/pubsub.serviceAgent'\nsubscriptions = {}\n\n\ndef prefetch_rule(context: models.Context):\n  subscriptions[context.project_id] = pubsub.get_subscriptions(context)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  \"\"\"Run the rule.\"\"\"\n  project = crm.get_project(context.project_id)\n  project_subscriptions = subscriptions.get(context.project_id)\n\n  if not project_subscriptions:\n    report.add_skipped(project, 'no Pub/Sub subscriptions found')\n    return\n\n  project_number = crm.get_project(context.project_id).number\n  pubsub_service_agent = (\n      f'serviceAccount:service-{project_number}@gcp-sa-pubsub.iam.gserviceaccount.com'\n  )\n  project_iam_policy = iam.get_project_policy(context)\n\n  for sub in project_subscriptions.values():\n    if not sub.is_push_subscription() or 'oidcToken' not in sub.push_config:\n      report.add_ok(sub)\n      continue\n\n    service_account_email = sub.push_config['oidcToken']['serviceAccountEmail']\n    sa_iam_policy = iam.get_service_account_iam_policy(\n        context=context, service_account=service_account_email)\n\n    has_permission = sa_iam_policy.has_role_permissions(\n        pubsub_service_agent,\n        TOKEN_CREATOR_ROLE) or project_iam_policy.has_role_permissions(\n            pubsub_service_agent, TOKEN_CREATOR_ROLE)\n\n    if not has_permission:\n      report.add_failed(\n          sub,\n          (f'The Pub/Sub service agent ({pubsub_service_agent}) is missing the'\n           f' {TOKEN_CREATOR_ROLE} role on the service account'\n           f' {service_account_email} or on the project.'),\n      )\n    else:\n      report.add_ok(sub)\n"
  },
  {
    "path": "gcpdiag/lint/pubsub/pubsub_rules_snapshot_test.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Generalize rule snapshot testing.\"\"\"\n\nfrom gcpdiag.lint import pubsub, snapshot_test_base\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = pubsub\n  project_id = 'gcpdiag-pubsub1-aaaa'\n"
  },
  {
    "path": "gcpdiag/lint/pubsub/snapshots/BP_2024_001.txt",
    "content": "*  pubsub/BP/2024_001: Oldest Unacked Message Age Value less than 24 hours.\n   - projects/gcpdiag-pubsub1-aaaa                                        [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/pubsub/snapshots/ERR_2024_001.txt",
    "content": "*  pubsub/ERR/2024_001: Pub/Sub Bigquery Subscription Created using Exist BigQuery table.\n   - projects/gcpdiag-pubsub1-aaaa                                        [SKIP]\n     logging api is disabled\n\n"
  },
  {
    "path": "gcpdiag/lint/pubsub/snapshots/ERR_2024_002.txt",
    "content": "*  pubsub/ERR/2024_002: Creating Pub/Sub Push didn't fail because of organization policy.\n   - projects/gcpdiag-pubsub1-aaaa                                        [SKIP]\n     logging api is disabled\n\n"
  },
  {
    "path": "gcpdiag/lint/pubsub/snapshots/ERR_2024_003.txt",
    "content": "*  pubsub/ERR/2024_003: Snapshot should be created before it expires in less than 1hour of creation.\n   - projects/gcpdiag-pubsub1-aaaa                                        [SKIP]\n     logging api is disabled\n\n"
  },
  {
    "path": "gcpdiag/lint/pubsub/snapshots/ERR_2025_001.txt",
    "content": "*  pubsub/ERR/2025_001: Pub/Sub push subscription service agent has the Service Account Token Creator Role.\n   - projects/gcpdiag-pubsub1-aaaa/subscriptions/gcpdiag-pubsub1subscription3gcs-9pm6hng1 [ OK ]\n   - projects/gcpdiag-pubsub1-aaaa/subscriptions/gcpdiag-pubsub1subscription2-9pm6hng1 [ OK ]\n   - projects/gcpdiag-pubsub1-aaaa/subscriptions/gcpdiag-pubsub1subscription-9pm6hng1 [ OK ]\n   - projects/gcpdiag-pubsub1-aaaa/subscriptions/gcpdiag-bqdlqsubscription-9pm6hng1 [ OK ]\n   - projects/gcpdiag-pubsub1-aaaa/subscriptions/gcpdiag-gcsdlqsubscription-9pm6hng1 [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/pubsub/snapshots/WARN_2023_001.txt",
    "content": "*  pubsub/WARN/2023_001: Project should not have a detached subscription.\n   - projects/gcpdiag-pubsub1-aaaa                                        [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/pubsub/snapshots/WARN_2023_002.txt",
    "content": "*  pubsub/WARN/2023_002: BigQuery subscription should have a dead-letter topic attached.\n   - projects/gcpdiag-pubsub1-aaaa/subscriptions/gcpdiag-bqdlqsubscription-9pm6hng1 [SKIP]\n     is not a BigQuery Subscription\n   - projects/gcpdiag-pubsub1-aaaa/subscriptions/gcpdiag-gcsdlqsubscription-9pm6hng1 [SKIP]\n     is not a BigQuery Subscription\n   - projects/gcpdiag-pubsub1-aaaa/subscriptions/gcpdiag-pubsub1subscription-9pm6hng1 [SKIP]\n     is not a BigQuery Subscription\n   - projects/gcpdiag-pubsub1-aaaa/subscriptions/gcpdiag-pubsub1subscription2-9pm6hng1 [ OK ]\n   - projects/gcpdiag-pubsub1-aaaa/subscriptions/gcpdiag-pubsub1subscription3gcs-9pm6hng1 [SKIP]\n     is not a BigQuery Subscription\n\n"
  },
  {
    "path": "gcpdiag/lint/pubsub/snapshots/WARN_2023_003.txt",
    "content": "*  pubsub/WARN/2023_003: Each topic has at least one subscription attached.\n   - projects/gcpdiag-pubsub1-aaaa                                        [ OK ] All active topics have subscriptions\n\n"
  },
  {
    "path": "gcpdiag/lint/pubsub/snapshots/WARN_2023_004.txt",
    "content": "*  pubsub/WARN/2023_004: Project should not have a subscription without a topic attached.\n   - projects/gcpdiag-pubsub1-aaaa                                        [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/pubsub/snapshots/WARN_2023_005.txt",
    "content": "*  pubsub/WARN/2023_005: Pub/Sub service account has BigQuery Permissions if BigQuery Subscription(s) exist.\n   - projects/gcpdiag-pubsub1-aaaa                                        [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/pubsub/snapshots/WARN_2023_006.txt",
    "content": "*  pubsub/WARN/2023_006: Push delivery requests for push subscriptions are not failing.\n   - projects/gcpdiag-pubsub1-aaaa                                        [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/pubsub/snapshots/WARN_2024_001.txt",
    "content": "*  pubsub/WARN/2024_001: Pub/Sub service account has the Publisher and Subscriber Permissions if DLQ exist.\n   - projects/gcpdiag-pubsub1-aaaa                                        [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/pubsub/snapshots/WARN_2024_002.txt",
    "content": "*  pubsub/WARN/2024_002: Pub/Sub service account has GCS permissions if GCS subscription(s) exist.\n   - projects/gcpdiag-pubsub1-aaaa                                        [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/pubsub/snapshots/WARN_2024_003.txt",
    "content": "*  pubsub/WARN/2024_003: Pub/Sub service account has the Encrypter and Decrypter Role if CMEK exist.\n   (CloudKMS api is disabled)                                             [SKIP]\n\n"
  },
  {
    "path": "gcpdiag/lint/pubsub/warn_2023_001_detached_subscription_exists.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Project should not have a detached subscription.\n\nA detached subscription is one whose reading privilege from the topic\nhas been revoked; it's retained messages are also deleted.\nTo free up the quota, it should be deleted.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import crm, pubsub\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  \"\"\"Check if the project has a detached subscription.\"\"\"\n  subscriptions = pubsub.get_subscriptions(context)\n  detached_subscription_exists = False\n\n  if not subscriptions:\n    report.add_skipped(None, \"no subscriptions found\")\n  for _, subscription in sorted(subscriptions.items()):\n    if subscription.is_detached():\n      report.add_failed(subscription)\n      detached_subscription_exists = True\n\n  if not detached_subscription_exists:\n    report.add_ok(crm.get_project(context.project_id))\n"
  },
  {
    "path": "gcpdiag/lint/pubsub/warn_2023_002_bq_subscription_has_dlq_topic.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"BigQuery subscription should have a dead-letter topic attached.\n\nA BigQuery subscription could be configured to forward undeliverable/failed\nmessages to a special dead-letter topic for further analysis/handling.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import pubsub\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  \"\"\"Check if the BigQuery subscription has dead-letter topic .\"\"\"\n  subscriptions = pubsub.get_subscriptions(context)\n  if not subscriptions:\n    report.add_skipped(None, \"no subscriptions found\")\n  for _, subscription in sorted(subscriptions.items()):\n    if subscription.is_big_query_subscription():\n      if subscription.has_dead_letter_topic():\n        report.add_ok(subscription)\n      else:\n        report.add_failed(subscription, \"has no dead-letter topic attached\")\n    else:\n      report.add_skipped(subscription, \"is not a BigQuery Subscription\")\n"
  },
  {
    "path": "gcpdiag/lint/pubsub/warn_2023_003_topic_atleastone_sub.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Each topic has at least one subscription attached.\n\nWithout a subscription, subscribers cannot pull messages or receive pushed\nmessages published to the topic. At the end of the max message retention period,\nthe messages will be discarded from Pub/Sub regardless, resulting in loss of\ndata published to the topic.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import crm, pubsub\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  \"\"\"Check if a valid topic has a subscription attached.\"\"\"\n  topics = pubsub.get_topics(context)\n  subscriptions = pubsub.get_subscriptions(context)\n\n  for _, subscription in subscriptions.items():\n    if (subscription.topic != \"_deleted_topic_\" and\n        subscription.topic.full_path in topics):\n      del topics[subscription.topic.full_path]\n\n  if topics:\n    for _, topic in topics.items():\n      report.add_failed(topic)\n  else:\n    report.add_ok(\n        crm.get_project(context.project_id),\n        \"All active topics have subscriptions\",\n    )\n"
  },
  {
    "path": "gcpdiag/lint/pubsub/warn_2023_004_orphaned_subscription_exists.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Project should not have a subscription without a topic attached.\n\nFor a subscription whose topic is deleted, it cannot be reattached to a new\ntopic and thus cannot receive new published messages. Messages in the\nsubscription will expire after the message retention period if unacked,\nand discarded from Pub/Sub which may lead to data loss.\nThe subscription is then counting as quota consumed for an unusable resource.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import crm, pubsub\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  \"\"\"Check if subscription is attached to a valid topic.\"\"\"\n  subscriptions = pubsub.get_subscriptions(context)\n  orphaned_subscription_exists = False\n  if not subscriptions:\n    report.add_skipped(None, \"no subscriptions found\")\n\n  for _, subscription in subscriptions.items():\n    if subscription.topic == \"_deleted_topic_\":\n      report.add_failed(subscription)\n      orphaned_subscription_exists = True\n\n  if not orphaned_subscription_exists:\n    report.add_ok(crm.get_project(context.project_id))\n"
  },
  {
    "path": "gcpdiag/lint/pubsub/warn_2023_005_bq_subscription_permisions.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Pub/Sub service account has BigQuery Permissions if BigQuery Subscription(s) exist.\n\nFor any BigQuery subscriptions to deliver messages successfully, they should\nhave the appropriate BigQuery Editor permissions to the appropriate service.\n\"\"\"\n\nimport re\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import crm, iam, pubsub\n\npolicies = {}\n\n\ndef prefetch_rule(context: models.Context):\n  policies[context.project_id] = iam.get_project_policy(context)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  \"\"\"Check if subscription has relevant BQ permissions.\"\"\"\n\n  role_bq_data_editor = 'roles/bigquery.dataEditor'\n  project = crm.get_project(context.project_id)\n  project_nr = crm.get_project(context.project_id).number\n\n  bq_subscriptions_exist = False\n\n  subscriptions = pubsub.get_subscriptions(context)\n  if not subscriptions:\n    report.add_skipped(None, 'no subscriptions found')\n\n  for _, subscription in subscriptions.items():\n    if bq_subscriptions_exist:\n      break\n    elif subscription.is_big_query_subscription():\n      bq_subscriptions_exist = True\n\n  if not bq_subscriptions_exist:\n    report.add_skipped(None, 'no BQ subscriptions found')\n  else:\n    service_account_re = re.compile('serviceAccount:service-' +\n                                    str(project_nr) +\n                                    '@gcp-sa-pubsub.iam.gserviceaccount.com')\n    member = next(\n        filter(\n            service_account_re.match,\n            policies[context.project_id].get_members(),\n        ),\n        None,\n    )\n\n    if not member:\n      report.add_failed(project, 'no Pub/Sub Service Account found')\n    elif bq_subscriptions_exist and not policies[\n        context.project_id].has_role_permissions(member, role_bq_data_editor):\n      report.add_failed(\n          project,\n          f'{member} does not have permissions for the role'\n          f' {role_bq_data_editor}',\n      )\n    else:\n      report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/pubsub/warn_2023_006_push_requests_failing.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Push delivery requests for push subscriptions are not failing.\n\nFor any push subscription, delivery to the endpoint should return an ack\nresponse for successfully processed messages.\n\"\"\"\n\nfrom itertools import islice\nfrom typing import Dict\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import crm, monitoring, pubsub\n\npush_request_count: Dict[str, monitoring.TimeSeriesCollection] = {}\nDURATION = '10m'  # 10 minutes - also used to measure delivery latency health\nMAX_SUBSCRIPTIONS_TO_DISPLAY = 10\n\n\ndef prefetch_rule(context: models.Context):\n  subscription_name = ''\n  query_push_request_count = (\n      'fetch pubsub_subscription| metric'\n      ' \"pubsub.googleapis.com/subscription/push_request_count\"| filter'\n      ' resource.project_id == \"{}\" &&'\n      ' (resource.subscription_id == \"{}\") | align rate(1m)|'\n      ' every 1m| group_by'\n      ' [metric.response_class],[value_push_request_count_aggregate:'\n      ' aggregate(value.push_request_count)] | within {}')\n\n  subscriptions = pubsub.get_subscriptions(context)\n\n  for _, subscription in subscriptions.items():\n    if subscription.is_push_subscription():\n      subscription_name = subscription.name\n      push_request_count[subscription_name] = monitoring.query(\n          context.project_id,\n          query_push_request_count.format(context.project_id, subscription_name,\n                                          DURATION),\n      )\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n\n  if not push_request_count:\n    report.add_skipped(None, 'no subscription metrics found')\n\n  failing_subs = set()\n  for subscription_name, push_metric in push_request_count.items():\n    if (not push_metric\n       ):  # empty for subscription without traffic for the duration\n      continue\n    else:\n      for metric_values in push_metric.values():\n        # one of ['ack', 'deadline_exceeded', 'internal', 'invalid',\n        # 'remote_server_4xx', 'remote_server_5xx', 'unreachable']\n        response_class = get_path(metric_values,\n                                  ('labels', 'metric.response_class'))\n\n        if response_class != 'ack':\n          failing_subs.add(subscription_name)\n\n  # reporting\n  if failing_subs:\n    extra_subs = ''\n    if len(failing_subs) > MAX_SUBSCRIPTIONS_TO_DISPLAY:\n      extra_subs = (', and'\n                    f' {len(failing_subs) - MAX_SUBSCRIPTIONS_TO_DISPLAY} more'\n                    ' subscriptions')\n\n  # pylint: disable=line-too-long\n    report.add_failed(\n        project,\n        f'{len(failing_subs)} subscriptions have non-ack responses'\n        ' from the endpoint:'\n        f\" {', '.join(islice(failing_subs, MAX_SUBSCRIPTIONS_TO_DISPLAY))}{extra_subs}\",\n    )\n  # pylint: enable=line-too-long\n  else:\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/pubsub/warn_2024_001_dead_letter_queues_permissions.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Pub/Sub service account has the Publisher and Subscriber Permissions if DLQ exist.\n\nTo forward undeliverable messages to a dead-letter topic, Pub/Sub must have the\n'roles/pubsub.subscriber' and 'roles/pubsub.publisher' permissions enabled on the\nautomatically created Pub/Sub service account.\n\"\"\"\n\nimport re\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import crm, iam, pubsub\n\nrole_publisher = 'roles/pubsub.publisher'\nrole_subscriber = 'roles/pubsub.subscriber'\n\npolicy_by_project = {}\nprojects = {}\n\n\ndef prefetch_rule(context: models.Context):\n  projects[context.project_id] = crm.get_project(context.project_id)\n  policy_by_project[context.project_id] = iam.get_project_policy(context)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  \"\"\"Check if the subscription has dead-letter topic .\"\"\"\n\n  subscriptions = pubsub.get_subscriptions(context)\n\n  if not subscriptions:\n    report.add_skipped(None, 'no subscriptions found')\n    return\n\n  project = projects[context.project_id]\n\n  dlq_subscriptions_exist = False\n  required_permission = True\n\n  for _, subscription in subscriptions.items():\n    if subscription.has_dead_letter_topic():\n      dlq_subscriptions_exist = True\n      break\n\n  if not dlq_subscriptions_exist:\n    report.add_skipped(None, 'has no dead-letter topic attached')\n    return\n\n  else:\n    project_policy = policy_by_project[context.project_id]\n    service_account_re = re.compile('serviceAccount:service-' +\n                                    str(project.number) +\n                                    '@gcp-sa-pubsub.iam.gserviceaccount.com')\n    service_account = next(\n        filter(\n            service_account_re.match,\n            project_policy.get_members(),\n        ),\n        None,\n    )\n\n    if not service_account:\n      report.add_failed(project, 'no Pub/Sub Service Account found')\n\n    if not project_policy.has_role_permissions(service_account, role_publisher):\n      report.add_failed(\n          project,\n          f'{service_account}\\nmissing role: {role_publisher}',\n      )\n      required_permission = False\n\n    if not project_policy.has_role_permissions(service_account,\n                                               role_subscriber):\n      report.add_failed(\n          project,\n          f'{service_account}\\nmissing role: {role_subscriber}',\n      )\n      required_permission = False\n\n  if dlq_subscriptions_exist and required_permission:\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/pubsub/warn_2024_002_gcs_subscription_permissions.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Pub/Sub service account has GCS permissions if GCS subscription(s) exist.\n\nFor any GCS subscriptions to deliver messages successfully, they should\nhave the appropriate permissions at the project or bucket level.\n\"\"\"\n\nimport re\nfrom typing import Dict\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import crm, gcs, iam, pubsub\n\npolicies: Dict[str, Dict] = {'projects': {}, 'buckets': {}}\nROLE_GCS_STORAGE_ADMIN = 'roles/storage.admin'\nROLE_LEGACY_BUCKET_READER = 'roles/storage.legacyBucketReader'\nROLE_OBJECT_CREATOR = 'roles/storage.objectCreator'\n\n\ndef prefetch_rule(context: models.Context):\n  \"\"\"Collect project & unique bucket policies.\"\"\"\n  policies['projects'][context.project_id] = iam.get_project_policy(context)\n\n  gcs_subscription_buckets = set()\n  subscriptions = pubsub.get_subscriptions(context)\n\n  if subscriptions:\n    for _, subscription in subscriptions.items():\n      if subscription.is_gcs_subscription():\n        gcs_subscription_buckets.add(subscription.gcs_subscription_bucket())\n\n  if gcs_subscription_buckets:\n    for bucket in gcs_subscription_buckets:\n      policies['buckets'][bucket] = gcs.get_bucket_iam_policy(context, bucket)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  \"\"\"Check if subscription has relevant GCS permissions.\"\"\"\n\n  project = crm.get_project(context.project_id)\n  project_nr = crm.get_project(context.project_id).number\n\n  if not policies['buckets']:\n    report.add_skipped(None, 'no GCS subscriptions found')\n  else:\n    service_account_re = re.compile('serviceAccount:service-' +\n                                    str(project_nr) +\n                                    '@gcp-sa-pubsub.iam.gserviceaccount.com')\n    member = next(\n        filter(\n            service_account_re.match,\n            policies['projects'][context.project_id].get_members(),\n        ),\n        None,\n    )\n\n    if not member:\n      report.add_failed(project, 'no Pub/Sub Service Account found')\n    # Check at project level for role_gcs_storage_admin\n    # and at bucket level for all(role_legacy_bucket_reader,role_object_creator)\n    elif not check_policy_project(context,\n                                  member) and not check_policy_buckets(member):\n      report.add_failed(\n          project,\n          f'{member} does not have GCS subscription permissions for the role',\n      )\n    else:\n      report.add_ok(project)\n\n\ndef check_policy_project(context, member) -> bool:\n  \"\"\"Check if a member is assigned the (one) apt role at project level.\"\"\"\n  if not policies['projects'][context.project_id].has_role_permissions(\n      member, ROLE_GCS_STORAGE_ADMIN):\n    return False\n  return True\n\n\ndef check_policy_buckets(member) -> bool:\n  \"\"\"Check if a member is assigned the (two) apt roles at bucket level.\"\"\"\n  for bucket_policy in policies['buckets'].values():\n    if not bucket_policy.has_role_permissions(\n        member,\n        ROLE_LEGACY_BUCKET_READER) or not bucket_policy.has_role_permissions(\n            member, ROLE_OBJECT_CREATOR):\n      return False\n  return True\n"
  },
  {
    "path": "gcpdiag/lint/pubsub/warn_2024_003_cmek_topic_permissions.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Pub/Sub service account has the Encrypter and Decrypter Role if CMEK exist.\n\nAs long as the service account has the CyptoKey Encrypter/Decrypter role, the\nservice can encrypt and decrypt its data. If you revoke this role, or if you\ndisable or destroy the CMEK key, that data can't be accessed.\n\"\"\"\n\nimport re\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, iam, pubsub\n\nrole_encrypter_decrypter = 'roles/cloudkms.cryptoKeyEncrypterDecrypter'\n\npolicy_by_project = {}\nprojects = {}\n\n\ndef prefetch_rule(context: models.Context):\n  projects[context.project_id] = crm.get_project(context.project_id)\n  policy_by_project[context.project_id] = iam.get_project_policy(context)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  \"\"\"Check if the topic has CMEK .\"\"\"\n\n  if not apis.is_enabled(context.project_id, 'pubsub'):\n    report.add_skipped(None, 'PubSub is disabled')\n    return\n\n  if not apis.is_enabled(context.project_id, 'cloudkms'):\n    report.add_skipped(None, 'CloudKMS api is disabled')\n    return\n\n  topics = pubsub.get_topics(context)\n\n  if not topics:\n    report.add_skipped(None, 'no topics found')\n    return\n\n  project = projects[context.project_id]\n  required_permission = True\n  customer_encryption_key_exist = False\n  for _, topic in topics.items():\n    try:\n      kms_key = topic.kms_key_name.split('/')\n      if context.project_id == kms_key[1]:\n        customer_encryption_key_exist = True\n        break\n    except KeyError:\n      continue\n\n  if not customer_encryption_key_exist:\n    report.add_skipped(None, 'no customer managed encryption topic found')\n  else:\n    project_policy = policy_by_project[context.project_id]\n    service_account_re = re.compile('serviceAccount:service-' +\n                                    str(project.number) +\n                                    '@gcp-sa-pubsub.iam.gserviceaccount.com')\n    service_account = next(\n        filter(\n            service_account_re.match,\n            project_policy.get_members(),\n        ),\n        None,\n    )\n\n    if not service_account:\n      report.add_failed(project, 'no Pub/Sub Service Account found')\n\n    if not project_policy.has_role_permissions(service_account,\n                                               role_encrypter_decrypter):\n      report.add_failed(\n          project,\n          f'{service_account}\\nmissing role: {role_encrypter_decrypter}',\n      )\n      required_permission = False\n  if required_permission:\n    report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/snapshot_test_base.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Base class for snapshot tests\"\"\"\n\nimport io\nfrom os import path\nfrom unittest import mock\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.lint.output import terminal_output\nfrom gcpdiag.queries import apis_stub, kubectl_stub, web_stub\nfrom gcpdiag.queries.generic_api.api_build import generic_api_stub\n\n\n@mock.patch('gcpdiag.queries.web.get', new=web_stub.get)\n@mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)\n@mock.patch('gcpdiag.queries.kubectl.verify_auth', new=kubectl_stub.verify_auth)\n@mock.patch(\n    'gcpdiag.queries.kubectl.check_gke_ingress',\n    new=kubectl_stub.check_gke_ingress,\n)\n@mock.patch(\n    'gcpdiag.queries.generic_api.api_build.get_generic.get_generic_api',\n    new=generic_api_stub.get_generic_api_stub,\n)\nclass RulesSnapshotTestBase:\n  \"\"\"Run snapshot test\"\"\"\n\n  def test_all_rules(self, snapshot):\n    for rule in self._list_rules():\n      snapshot.snapshot_dir = path.join(path.dirname(self.rule_pkg.__file__),\n                                        'snapshots')\n      repo = self._mk_repo(rule)\n      output_stream = io.StringIO()\n      repo.result.add_result_handler(\n          self._mk_output(output_stream).result_handler)\n      repo.run_rules(self._mk_context())\n      snapshot.assert_match(\n          output_stream.getvalue(),\n          path.join(snapshot.snapshot_dir,\n                    f'{rule.rule_class}_{rule.rule_id}.txt'),\n      )\n\n  def _list_rules(self):\n    return self._mk_repo().rules_to_run\n\n  def _mk_context(self):\n    return models.Context(project_id=self.project_id)\n\n  def _mk_output(self, output_stream):\n    return terminal_output.TerminalOutput(file=output_stream, show_skipped=True)\n\n  def _mk_repo(self, rule=None):\n    if rule is None:\n      include = None\n    else:\n      include = [\n          lint.LintRulesPattern(\n              f'{rule.product}/{rule.rule_class}/{rule.rule_id}')\n      ]\n    repo = lint.LintRuleRepository(load_extended=True, include=include)\n    repo.load_rules(self.rule_pkg)\n    return repo\n"
  },
  {
    "path": "gcpdiag/lint/tpu/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/lint/tpu/snapshots/WARN_2022_001.txt",
    "content": "*  tpu/WARN/2022_001: Cloud TPU resource availability\n   - projects/gcpdiag-tpu1-aaaa                                           [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/tpu/tpu_rules_snapshot_test.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\" Generalize rule snapshot testing \"\"\"\n\nfrom gcpdiag.lint import snapshot_test_base, tpu\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = tpu\n  project_id = 'gcpdiag-tpu1-aaaa'\n"
  },
  {
    "path": "gcpdiag/lint/tpu/warn_2022_001_stockout.py",
    "content": "#\n# Copyright 2021 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Cloud TPU resource availability\n\nResource errors occur when you try to request new resources in a zone that\ncannot accommodate your request due to the current unavailability of a Cloud\nTPU resource.\n\"\"\"\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, crm, logs\n\nMATCH_STR = 'There is no more capacity in the zone'\nMATCH_STR2 = 'you can try in another zone where Cloud TPU Nodes'\nMETHOD_NAME = 'google.cloud.tpu.v1.Tpu.CreateNode'\n\nLOG_FILTER = [\n    'severity=ERROR',\n    f'protoPayload.methodName=\"{METHOD_NAME}\"',\n    f'protoPayload.status.message:\"{MATCH_STR}\"',\n    f'protoPayload.status.message:\"{MATCH_STR2}\"',\n]\n\nlogs_by_project = {}\n\n\ndef prepare_rule(context: models.Context):\n  logs_by_project[context.project_id] = logs.query(\n      project_id=context.project_id,\n      resource_type='audited_resource',\n      log_name='log_id(\"cloudaudit.googleapis.com/activity\")',\n      filter_str=' AND '.join(LOG_FILTER))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n\n  if not apis.is_enabled(context.project_id, 'tpu'):\n    report.add_skipped(project, 'tpu api is disabled')\n    return\n\n  # skip entire rule is logging disabled\n  if not apis.is_enabled(context.project_id, 'logging'):\n    report.add_skipped(project, 'logging api is disabled')\n    return\n\n  if logs_by_project.get(context.project_id) and \\\n     logs_by_project[context.project_id].entries:\n    for log_entry in logs_by_project[context.project_id].entries:\n      # Filter out non-relevant log entries.\n      if log_entry['severity'] != 'ERROR' or \\\n         METHOD_NAME not in get_path(log_entry,\n                     ('protoPayload', 'methodName'), default='') or \\\n         MATCH_STR not in get_path(log_entry,\n                     ('protoPayload', 'status', 'message'), default='') or \\\n         MATCH_STR2 not in get_path(log_entry,\n                     ('protoPayload', 'status', 'message'), default=''):\n        continue\n      report.add_failed(project,\n                        'TPU failed to create due to resource availability')\n      return\n\n  # in case of there is no log or all logs are non-relevant\n  report.add_ok(project)\n"
  },
  {
    "path": "gcpdiag/lint/vertex/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/lint/vertex/snapshots/WARN_2023_001.txt",
    "content": "*  vertex/WARN/2023_001: Vertex AI Feature Store has a known state\n   - projects/12340015/locations/us-west1/featurestores/gcpdiag_vertex1featurestore_aaaa [ OK ]\n\n"
  },
  {
    "path": "gcpdiag/lint/vertex/vertex_rules_snapshot_test.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\" Generalize rule snapshot testing \"\"\"\n\nfrom gcpdiag.lint import snapshot_test_base, vertex\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = vertex\n  project_id = 'gcpdiag-vertex1-aaaa'\n"
  },
  {
    "path": "gcpdiag/lint/vertex/warn_2023_001_featurestores_state.py",
    "content": "# Copyright 2023 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Vertex AI Feature Store has a known state\n\nVertex AI featurestores should have a known state\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import apis, vertex\n\nfeaturestores_by_project = {}\n\n\ndef prefetch_rule(context: models.Context):\n  featurestores_by_project[context.project_id] = vertex.get_featurestores(\n      context)\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n\n  if not apis.is_enabled(context.project_id, 'aiplatform'):\n    report.add_skipped(None, 'Vertex API is disabled')\n    return\n\n  featurestores = featurestores_by_project[context.project_id]\n\n  if not featurestores:\n    report.add_skipped(None, 'No featurestores found')\n    return\n\n  for featurestore in featurestores.values():\n    state = vertex.FeaturestoreStateEnum.STATE_UNSPECIFIED\n    if featurestore.state:\n      state = vertex.FeaturestoreStateEnum(featurestore.state)\n    if state != vertex.FeaturestoreStateEnum.STATE_UNSPECIFIED:\n      report.add_ok(featurestore)\n    else:\n      state_message = f'Featurestore state is unknown. State = {state}'\n      report.add_failed(featurestore, state_message)\n"
  },
  {
    "path": "gcpdiag/lint/vpc/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/lint/vpc/bp_2022_001_pga_next_hop.py",
    "content": "\"\"\"Explicit routes for Google APIs if the default route is modified.\n\nIf you need to modify the default route, then add explicit routes\nfor Google API destination IP ranges.\n\nhttps://cloud.google.com/architecture/best-practices-vpc-design#explicit-routes\n\nNote: This does not consider tagged routes or shadowed default routes.\nValidate with a Connectivity Test.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import crm, network\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n  networks = network.get_networks(context)\n  misconfigured_networks = ''\n  if not networks:\n    report.add_skipped(None, 'rule networks found')\n\n  # Which networks have a subnet with PGA?\n  pga_networks = {}\n  for net in networks:\n    for subnet in net.subnetworks.values():\n      if subnet.is_private_ip_google_access():\n        pga_networks[net.name] = 'missing'  # Starts with missing def route\n        continue\n\n  if not pga_networks:\n    all_skipped = True  # There are no subnets with PGA, no need to run the rule\n\n  else:\n    all_skipped = False\n    explicit_routes = ['199.36.153.8/30', '199.36.153.4/30']\n    default_internet_gateway = 'default-internet-gateway'\n    routes = network.get_routes(context.project_id)\n    best_routes: dict[tuple[str, str], network.Route] = {}\n    for route in routes:\n      if route.dest_range != '0.0.0.0/0' and route.dest_range not in explicit_routes:\n        continue\n\n      current_network = route.network.split('/')[-1]\n      key = (current_network, route.dest_range)\n\n      if key not in best_routes or route.priority < best_routes[key].priority:\n        best_routes[key] = route\n\n    for route in best_routes.values():\n      current_network = route.network.split('/')[-1]\n\n      if current_network not in pga_networks:\n        continue\n\n      if route.dest_range in explicit_routes:\n        if route.next_hop_gateway and default_internet_gateway in route.next_hop_gateway:\n          if pga_networks[current_network] != 'misconfig':\n            pga_networks[current_network] = 'ok'\n          continue  # OK: Next Hop for PGA routes is default-internet-gateway\n        else:\n          pga_networks[current_network] = 'misconfig'\n          continue\n      elif route.dest_range == '0.0.0.0/0':\n        if route.next_hop_gateway and default_internet_gateway in route.next_hop_gateway:\n          if pga_networks[current_network] != 'misconfig':\n            pga_networks[current_network] = 'ok'\n          continue  # OK: Next Hop for 0.0.0.0/0 is default-internet-gateway\n        else:\n          if pga_networks[current_network] != 'misconfig':\n            pga_networks[current_network] = 'modified'\n          continue\n\n    # Dump all the networks and their status\n    for p_net, status in pga_networks.items():\n      if status == 'modified':\n        missing_text = 'might be missing explicit routes'\n        misconfigured_networks += f' - Network: {p_net} -> {missing_text} \\n'\n        all_skipped = False\n        continue\n      elif status == 'misconfig':\n        explicit_text = 'explicit routes not pointing to Default Internet \\\nGateway'\n\n        misconfigured_networks += f' - Network: {p_net} -> \\\n{explicit_text} \\n'\n\n      elif status == 'missing':\n        missing_text = 'might be missing a default route for Google APIs'\n        misconfigured_networks += f' - Network: {p_net} -> {missing_text} \\n'\n        all_skipped = False\n        continue\n\n  # Results\n  text = 'The following networks have a modified default route and might \\\nbe missing explicit routes to Google APIs:\\n'\n\n  if misconfigured_networks:\n    report.add_failed(project, text + misconfigured_networks)\n  else:\n    report.add_ok(project)\n\n  if all_skipped:\n    report.add_skipped(project, 'no data')\n"
  },
  {
    "path": "gcpdiag/lint/vpc/bp_2023_001_public_zone_logging.py",
    "content": "\"\"\"DNS logging is enabled for public zones.\n\nIf not enabled, customers wouldn't have visibility to what queries are being made to the zone.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import network\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  #  project = crm.get_project(context.project_id)\n  zones = network.get_zones(context.project_id)\n  if not zones:\n    report.add_skipped(None, 'no zones found')\n    return\n  for c in zones:\n    if (c.is_public and not c.cloud_logging_config):\n      report.add_failed(c, None, ' logging is disabled for this public zone')\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/vpc/sec_2023_001_public_zone_dnssec.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"DNSSEC is enabled for public zones.\n\nIt is recommended to enable DNSSEC for public zones.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import network\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  zones = network.get_zones(context.project_id)\n  if not zones:\n    report.add_skipped(None, 'no zones found')\n    return\n  for c in zones:\n    if (c.is_public and not c.dnssec_config_state):\n      report.add_failed(c, None, ' DNSSEC is disabled for this public zone')\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/vpc/snapshots/BP_2022_001.txt",
    "content": "*  vpc/BP/2022_001: Explicit routes for Google APIs if the default route is modified.\n   (rule networks found)                                                  [SKIP]\n   - projects/gcpdiag-vpc1-aaaa                                           [ OK ]\n   - projects/gcpdiag-vpc1-aaaa                                           [SKIP]\n     no data\n\n"
  },
  {
    "path": "gcpdiag/lint/vpc/snapshots/BP_2023_001.txt",
    "content": "*  vpc/BP/2023_001: DNS logging is enabled for public zones.\n   (Error: unsupported service: dns)                                      [SKIP]\n\n"
  },
  {
    "path": "gcpdiag/lint/vpc/snapshots/SEC_2023_001.txt",
    "content": "*  vpc/SEC/2023_001: DNSSEC is enabled for public zones.\n   (Error: unsupported service: dns)                                      [SKIP]\n\n"
  },
  {
    "path": "gcpdiag/lint/vpc/snapshots/WARN_2022_001.txt",
    "content": "*  vpc/WARN/2022_001: Per-project quotas are not near the limit.\n   - projects/gcpdiag-vpc1-aaaa                                           [SKIP]\n     no data\n\n"
  },
  {
    "path": "gcpdiag/lint/vpc/snapshots/WARN_2023_001.txt",
    "content": "*  vpc/WARN/2023_001: On-premises hosts can communicate with the service producer's network\n   (no networks found)                                                    [SKIP]\n\n"
  },
  {
    "path": "gcpdiag/lint/vpc/snapshots/WARN_2023_002.txt",
    "content": "*  vpc/WARN/2023_002: Private zone is attached to a VPC.\n   (Error: unsupported service: dns)                                      [SKIP]\n\n"
  },
  {
    "path": "gcpdiag/lint/vpc/snapshots/WARN_2024_001.txt",
    "content": "*  vpc/WARN/2024_001: No Unused reserved IP addresses are found.\n   - projects/gcpdiag-vpc1-aaaa/regions/us-central1/addresses/address1    [ OK ]\n   - projects/gcpdiag-vpc1-aaaa/regions/us-central1/addresses/address2    [FAIL]\n     Unused Reserved IP address found\n   - projects/gcpdiag-vpc1-aaaa/regions/us-central1/addresses/address3    [FAIL]\n     Unused Reserved IP address found\n   - projects/gcpdiag-vpc1-aaaa/regions/asia-east1/addresses/address4     [FAIL]\n     Unused Reserved IP address found\n\n   We can reserve IP addresses and persists until we explicitly release it.\n   Unused reserved IP addresses over the time will cause extra money. Make sure\n   you identify and release those IP addresses.\n\n   https://gcpdiag.dev/rules/vpc/WARN/2024_001\n\n"
  },
  {
    "path": "gcpdiag/lint/vpc/vpc_rules_snapshot_test.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\" Generalize rule snapshot testing \"\"\"\n\nfrom gcpdiag.lint import snapshot_test_base, vpc\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = vpc\n  project_id = 'gcpdiag-vpc1-aaaa'\n"
  },
  {
    "path": "gcpdiag/lint/vpc/warn_2022_001_project_level_quota.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Per-project quotas are not near the limit.\n\nA project level quota restricts how much of a particular shared Google Cloud\nresource you can use in a given Cloud project, including hardware, software,\nand network components.\n\nRule will start failing if any project level quota usage is higher than 80%.\n\"\"\"\n\nfrom typing import Dict\n\nfrom gcpdiag import config, lint, models\nfrom gcpdiag.queries import crm, gce, monitoring, quotas\n\nGCE_SERVICE_NAME = 'compute.googleapis.com'\n# name of the quota limit : name of the quota metric\nQUOTA_LIST = {\n    'BACKEND-BUCKETS-per-project':\n        'compute.googleapis.com/backend_buckets',\n    'BACKEND-SERVICES-per-project':\n        'compute.googleapis.com/backend_services',\n    'FIREWALLS-per-project':\n        'compute.googleapis.com/firewalls',\n    'FORWARDING-RULES-per-project':\n        'compute.googleapis.com/forwarding_rules',\n    'GLOBAL-EXTERNAL-MANAGED-FORWARDING-RULES-per-project':\n        'compute.googleapis.com/global_external_managed_forwarding_rules',\n    'INTERNAL-TRAFFIC-DIRECTOR-FORWARDING-RULES-per-project':\n        'compute.googleapis.com/internal_traffic_director_forwarding_rules',\n    'GLOBAL-INTERNAL-ADDRESSES-per-project':\n        'compute.googleapis.com/global_internal_addresses',\n    'HEALTH-CHECK-SERVICES-per-project':\n        'compute.googleapis.com/health_check_services',\n    'HEALTH-CHECKS-per-project':\n        'compute.googleapis.com/health_checks',\n    'IMAGES-per-project':\n        'compute.googleapis.com/images',\n    'MACHINE-IMAGES-per-project':\n        'compute.googleapis.com/machine_images',\n    'INSTANCE-TEMPLATES-per-project':\n        'compute.googleapis.com/instance_templates',\n    'INTERCONNECTS-per-project':\n        'compute.googleapis.com/interconnects',\n    'INTERCONNECT-TOTAL-GBPS-per-project':\n        'compute.googleapis.com/interconnect_total_gbps',\n    'IN-USE-ADDRESSES-per-project':\n        'compute.googleapis.com/global_in_use_addresses',\n    'NETWORKS-per-project':\n        'compute.googleapis.com/networks',\n    'NETWORK-FIREWALL-POLICIES-per-project':\n        'compute.googleapis.com/network_firewall_policies',\n    'NETWORK-ENDPOINT-GROUPS-per-project':\n        'compute.googleapis.com/global_network_endpoint_groups',\n    'NOTIFICATION-ENDPOINTS-per-project':\n        'compute.googleapis.com/notification_endpoints',\n    'PUBLIC-ADVERTISED-PREFIXES-per-project':\n        'compute.googleapis.com/public_advertised_prefixes',\n    'PUBLIC-DELEGATED-PREFIXES-per-project':\n        'compute.googleapis.com/global_public_delegated_prefixes',\n    'ROUTERS-per-project':\n        'compute.googleapis.com/routers',\n    'ROUTES-per-project':\n        'compute.googleapis.com/routes',\n    'PACKET-MIRRORINGS-per-project':\n        'compute.googleapis.com/packet_mirrorings',\n    'SECURITY-POLICIES-per-project':\n        'compute.googleapis.com/security_policies',\n    'SECURITY-POLICY-CEVAL-RULES-per-project':\n        'compute.googleapis.com/security_policy_ceval_rules',\n    'SECURITY-POLICY-RULES-per-project':\n        'compute.googleapis.com/security_policy_rules',\n    'SNAPSHOTS-per-project':\n        'compute.googleapis.com/snapshots',\n    'SSL-CERTIFICATES-per-project':\n        'compute.googleapis.com/ssl_certificates',\n    'SSL-POLICIES-per-project':\n        'compute.googleapis.com/ssl_policies',\n    'STATIC-ADDRESSES-per-project':\n        'compute.googleapis.com/global_static_addresses',\n    'STATIC-BYOIP-ADDRESSES-per-project':\n        'compute.googleapis.com/global_static_byoip_addresses',\n    'EXTERNAL-IPV6-SPACES-per-project':\n        'compute.googleapis.com/global_external_ipv6_spaces',\n    'SUBNETWORKS-per-project':\n        'compute.googleapis.com/subnetworks',\n    'PRIVATE-V6-ACCESS-SUBNETWORKS-per-project':\n        'compute.googleapis.com/private_v6_access_subnetworks',\n    'SUBNETWORK-RANGES-UNDER-ALL-AGGREGATES-per-project':\n        'compute.googleapis.com/subnetwork_ranges_under_all_aggregates',\n    'TARGET-GRPC-PROXIES-per-project':\n        'compute.googleapis.com/target_grpc_proxies',\n    'TARGET-HTTP-PROXIES-per-project':\n        'compute.googleapis.com/target_http_proxies',\n    'TARGET-HTTPS-PROXIES-per-project':\n        'compute.googleapis.com/target_https_proxies',\n    'TARGET-INSTANCES-per-project':\n        'compute.googleapis.com/target_instances',\n    'TARGET-POOLS-per-project':\n        'compute.googleapis.com/target_pools',\n    'TARGET-SSL-PROXIES-per-project':\n        'compute.googleapis.com/target_ssl_proxies',\n    'TARGET-TCP-PROXIES-per-project':\n        'compute.googleapis.com/target_tcp_proxies',\n    'TARGET-VPN-GATEWAYS-per-project':\n        'compute.googleapis.com/target_vpn_gateways',\n    'CPUS-ALL-REGIONS-per-project':\n        'compute.googleapis.com/cpus_all_regions',\n    'GPUS-ALL-REGIONS-per-project':\n        'compute.googleapis.com/gpus_all_regions',\n    'URL-MAPS-per-project':\n        'compute.googleapis.com/url_maps',\n    'VPN-GATEWAYS-per-project':\n        'compute.googleapis.com/vpn_gateways',\n    'EXTERNAL-VPN-GATEWAYS-per-project':\n        'compute.googleapis.com/external_vpn_gateways',\n    'VPN-TUNNELS-per-project':\n        'compute.googleapis.com/vpn_tunnels',\n    'XPN-SERVICE-PROJECTS-per-project':\n        'compute.googleapis.com/xpn_service_projects'\n}\n# percentage of the quota limit usage\nQUOTA_LIMIT_THRESHOLD = 0.80\n_query_results_per_project_id: Dict[str, monitoring.TimeSeriesCollection] = {}\n\n\ndef prefetch_rule(context: models.Context):\n  quota_limit_names = '|'.join(QUOTA_LIST.keys())\n  params = {\n      'service_name': GCE_SERVICE_NAME,\n      'limit_name': quota_limit_names,\n      'within_days': config.get('within_days')\n  }\n  _query_results_per_project_id[context.project_id] = \\\n      monitoring.query(\n          context.project_id,\n          quotas.CONSUMER_QUOTA_QUERY_TEMPLATE.format_map(params))\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  project = crm.get_project(context.project_id)\n  region = gce.Region(context.project_id, {'name': 'global', 'selfLink': ''})\n  #set region to global as this is project level quota\n\n  if len(_query_results_per_project_id[context.project_id]) == 0:\n    report.add_skipped(project, 'no data')\n    return\n\n  all_skipped = True\n  exceeded_quotas = ''\n  for quota_metrics_name in QUOTA_LIST.values():\n    ts_key = frozenset({\n        f'resource.project_id:{context.project_id}',\n        f'metric.quota_metric:{quota_metrics_name}',\n        f'resource.location:{region.name}'\n    })\n    try:\n      ts = _query_results_per_project_id[context.project_id][ts_key]\n      all_skipped = False\n    except KeyError:\n      # silently skip\n      continue\n\n    # did we exceeded threshold on any day?\n    ratio = 0\n    for day_value in ts['values']:\n      ratio = max(ratio, day_value[0])\n    if ratio > QUOTA_LIMIT_THRESHOLD:\n      exceeded_quotas += f'  - quota metric: {quota_metrics_name}.\\n'\n\n  #verify and report the result\n  if len(exceeded_quotas) > 0:\n    report.add_failed(\n        project,\n        ('The following quotas in this project have been exceeded recently:\\n' +\n         exceeded_quotas))\n  else:\n    report.add_ok(project)\n\n  # report skip if all data for region not available\n  if all_skipped:\n    report.add_skipped(project, 'no data')\n"
  },
  {
    "path": "gcpdiag/lint/vpc/warn_2023_001_psa_no_export_custom_routes.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"On-premises hosts can communicate with the service producer's network\n\nWhen you create a private connection,  the VPC network and service producer's\nnetwork only exchange subnet routes by default.\n\nEnabling the export of custom routes to this private connection allows\non-premises hosts to access the service producer's network via private\nservices access.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import interconnect, network\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  networks = network.get_networks(context)\n\n  if not networks:\n    report.add_skipped(None, 'no networks found')\n    return\n\n  for net in networks:\n    peerings = net.peerings\n    all_custom_routes_exported = True\n\n    for peering in peerings:\n      if peering.name == 'servicenetworking-googleapis-com':\n        if not peering.exports_custom_routes:\n          all_custom_routes_exported = False\n          break\n        else:\n          report.add_ok(net)\n\n    if not all_custom_routes_exported:\n      routes = network.get_routes(context.project_id)\n      for route in routes:\n        if ((route.next_hop_hub or route.next_hop_vpn_tunnel) and\n            (net.full_path in route.network)):\n          report.add_failed(\n              net, 'Private Service Access not exporting custom routes.')\n          break\n      attachments = interconnect.get_vlan_attachments(context.project_id)\n      if attachments:\n        report.add_failed(\n            net, 'Private Service Access not exporting custom routes.')\n        break\n"
  },
  {
    "path": "gcpdiag/lint/vpc/warn_2023_002_private_zone_attachment.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Private zone is attached to a VPC.\n\nIf not attached to a VPC, Private zones will not be usable.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import network\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  zones = network.get_zones(context.project_id)\n  if not zones:\n    report.add_skipped(None, 'no zones found')\n    return\n  for c in zones:\n    if (not c.is_public and not c.vpc_attached):\n      report.add_failed(c, None, ' Private zone that is not attached to a VPC')\n    else:\n      report.add_ok(c)\n"
  },
  {
    "path": "gcpdiag/lint/vpc/warn_2024_001_unused_reserved_ip_addresses.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"No Unused reserved IP addresses are found.\n\nWe can reserve IP addresses and persists until we explicitly release it.\nUnused reserved IP addresses over the time will cause extra money.\nMake sure you identify and release those IP addresses.\n\"\"\"\n\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import network\n\nip_addresses = {}\n\n\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n\n  ip_addresses[context.project_id] = network.get_addresses(context.project_id)\n\n  addresses = ip_addresses[context.project_id]\n\n  if not addresses:\n    report.add_skipped(None, 'no Reserved IP addresses found')\n    return\n\n  for address in addresses:\n    if address.status == 'RESERVED':\n      report.add_failed(address, 'Unused Reserved IP address found')\n    else:\n      report.add_ok(address)\n"
  },
  {
    "path": "gcpdiag/models.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Data structures representing generic objects in GCP.\"\"\"\n\nimport abc\nimport dataclasses\nimport re\nfrom types import MappingProxyType\nfrom typing import Any, Generic, Iterable, List, Mapping, Optional, TypeVar\n\nfrom gcpdiag import context as gcpdiag_context\nfrom gcpdiag import utils\n\n\ndef _mapping_str(mapping: Mapping[str, str]) -> str:\n  return ','.join(f'{k}={v}' for k, v in sorted(mapping.items()))\n\n\nclass Messages(dict):\n\n  def get_msg(self, template: str, **kwargs):\n    return self.get(\n        template,\n        'NOTICE: No message available to parse for this step').format(**kwargs)\n\n\nT = TypeVar('T')\nV = TypeVar('V', bound=Any)\n\n\nclass Parameter(dict[T, V], Generic[T, V]):\n  \"\"\"Class to store parameters\"\"\"\n\n  def __init__(self, *args, **kwargs):\n    super().__init__()\n    for dict_arg in args:\n      for key, value in dict_arg.items():\n        self[key] = value\n    for key, value in kwargs.items():\n      self[key] = value\n\n  def _parse_value(self, value: str) -> Any:\n    \"\"\"Make all values lower string and strip whitespaces.\"\"\"\n    if isinstance(value, str):\n      return value.strip()\n    return value\n\n  def __setitem__(self, key: T, value: V) -> None:\n    super().__setitem__(key, self._parse_value(value))\n\n  def update(self, *args, **kwargs) -> None:\n    for k, v in dict(*args, **kwargs).items():\n      self[k] = v\n\n  def setdefault(self, key: T, default: V = None) -> V:\n    if key not in self:\n      converted_default = self._parse_value(default) if isinstance(\n          default, str) else default\n      self[key] = converted_default\n    return super().setdefault(key, self[key])\n\n  def __str__(self):\n    return _mapping_str(self)\n\n\n@dataclasses.dataclass\nclass Context:\n  \"\"\"List of resource groups / scopes that should be analyzed.\"\"\"\n  # project_id of project that is being analyzed, mandatory\n  project_id: str\n  # a pattern of sub project resources that match\n  resources_pattern: Optional[re.Pattern]\n  # list of GCP all locations to use as linting scope\n  # i.e. regions (e.g.: 'us-central1') or zone (e.g.: 'us-central1-a').\n  # a compiled project resources provided by user\n  locations_pattern: Optional[re.Pattern]\n\n  # list of \"label sets\" that must match.\n  labels: Optional[Mapping[str, str]]\n  # list of \"runbook parameters sets\" that must match.\n  parameters: Parameter[str, Any]\n  # Optional provider for context-specific operations (e.g., thread setup)\n  context_provider: Optional[gcpdiag_context.ContextProvider] = None\n\n  def copy_with(self, **changes) -> 'Context':\n    \"\"\"Returns a new Context instance with the specified attributes changed.\"\"\"\n    return dataclasses.replace(self, **changes)\n\n  # the selected resources are the intersection of project_id, locations,\n  # and labels(i.e. all must match), but each value in locations, and\n  # labels is a OR, so it means:\n  # project_id AND\n  # (region1 OR region2) AND\n  # ({label1=value1,label2=value2} OR {label3=value3})\n\n  def __init__(\n      self,\n      project_id: str,\n      locations: Optional[Iterable[str]] = None,\n      labels: Optional[Mapping[str, str]] = None,\n      parameters: Optional[Parameter[str, str]] = None,\n      resources: Optional[Iterable[str]] = None,\n      context_provider: Optional[gcpdiag_context.ContextProvider] = None,\n      **kwargs,\n  ):\n    \"\"\"Args:\n\n    project: project_id of project that should be inspected.\n    locations: only include resources in these GCP locations.\n    labels: only include resources with these labels. Expected\n      is a dict, is a set of key=value pairs that must match.\n\n      Example: `{'key1'='bla', 'key2'='baz'}`. This\n      will match resources that either have key1=bla or key2=baz.\n    resources: only include sub project resources with this name attribute.\n    context_provider: Optional provider for context-specific operations.\n    \"\"\"\n\n    self.project_id = project_id\n    self.context_provider = context_provider\n\n    if 'locations_pattern' in kwargs:\n      self.locations_pattern = kwargs['locations_pattern']\n    elif locations:\n      if not isinstance(locations, List):\n        raise ValueError(\n            str(locations) + ' did not supply full list of locations')\n      for location in locations:\n        if not (utils.is_region(location) or utils.is_zone(location)):\n          raise ValueError(location + ' does not look like a valid region/zone')\n\n      self.locations_pattern = re.compile('|'.join(locations), re.IGNORECASE)\n    else:\n      self.locations_pattern = None\n\n    if labels:\n      if not isinstance(labels, Mapping):\n        raise ValueError('labels must be Mapping[str,str]]')\n\n      self.labels = labels\n    else:\n      self.labels = None\n\n    if 'resources_pattern' in kwargs:\n      self.resources_pattern = kwargs['resources_pattern']\n    elif resources:\n      if not isinstance(resources, List):\n        raise ValueError(\n            str(resources) + ' did not supply full list of resources')\n\n      self.resources_pattern = re.compile('|'.join(resources), re.IGNORECASE)\n\n    else:\n      self.resources_pattern = None\n\n    if parameters:\n      if not isinstance(parameters, Mapping):\n        raise ValueError('parameters must be Mapping[str,str]]')\n\n      self.parameters = Parameter(parameters)\n    else:\n      self.parameters = Parameter()\n    self.parameters['project_id'] = self.project_id\n\n  def __str__(self):\n    string = 'project: ' + self.project_id\n    if self.resources_pattern:\n      string += ', resources: ' + self.resources_pattern.pattern\n    if self.locations_pattern:\n      string += ', locations (regions/zones): ' + self.locations_pattern.pattern\n    if self.labels:\n      string += ', labels: {' + _mapping_str(self.labels) + '}'\n    if self.parameters:\n      string += ', parameters: {' + _mapping_str(self.parameters) + '}'\n    return string\n\n  def __hash__(self):\n    return self.__str__().__hash__()\n\n  IGNORELOCATION = 'IGNORELOCATION'\n  IGNORELABEL = MappingProxyType({'IGNORELABEL': 'IGNORELABEL'})\n\n  def match_project_resource(\n      self,\n      resource: Optional[str],\n      location: Optional[str] = IGNORELOCATION,\n      labels: Optional[Mapping[str, str]] = IGNORELABEL,\n  ) -> bool:\n    \"\"\"Compare resource fields to the name and/or location and/or labels supplied\n    by the user and return a boolean outcome depending on the context.\n\n    Args:\n      resource: name of the resource under analysis. Always inspected if user\n      supplied a name criteria\n\n      location: region or zone of the resource. IGNORELOCATION completely skips analysis\n      of the location even if user has supplied location criteria\n\n      labels: labels in the resource under inspection. Functions which do not\n      support labels can completely skip checks by providing the IGNORELABEL constant\n\n    Returns:\n      A boolean which indicates the outcome of the analysis\n    \"\"\"\n\n    # Match resources.\n    if self.resources_pattern:\n      if not resource or not self.resources_pattern.match(resource):\n        return False\n\n    # Match location.\n    if self.locations_pattern and location is not self.IGNORELOCATION:\n      if not location or not self.locations_pattern.match(location):\n        return False\n\n    # Match labels.\n    if self.labels and labels is not self.IGNORELABEL:\n      if not labels:\n        return False\n\n      if any(labels.get(k) == v for k, v in self.labels.items()):\n        pass\n      else:\n        return False\n\n    # Everything matched.\n    return True\n\n\nclass Resource(abc.ABC):\n  \"\"\"Represents a single resource in GCP.\"\"\"\n  _project_id: str\n\n  def __init__(self, project_id):\n    self._project_id = project_id\n\n  def __str__(self):\n    return self.full_path\n\n  def __hash__(self):\n    return self.full_path.__hash__()\n\n  def __lt__(self, other):\n    return self.full_path < other.full_path\n\n  def __eq__(self, other):\n    if self.__class__ == other.__class__:\n      return self.full_path == other.full_path\n    else:\n      return False\n\n  @property\n  def project_id(self) -> str:\n    \"\"\"Project id (not project number).\"\"\"\n    return self._project_id\n\n  @property\n  @abc.abstractmethod\n  def full_path(self) -> str:\n    \"\"\"Returns the full path of this resource.\n\n    Example: 'projects/gcpdiag-gke-1-9b90/zones/europe-west4-a/clusters/gke1'\n    \"\"\"\n    pass\n\n  @property\n  def short_path(self) -> str:\n    \"\"\"Returns the short name for this resource.\n\n    Note that it isn't clear from this name what kind of resource it is.\n\n    Example: 'gke1'\n    \"\"\"\n    return self.full_path\n"
  },
  {
    "path": "gcpdiag/models_test.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Unit tests for test.py.\"\"\"\n\nimport pytest\n\nfrom gcpdiag import models\n\n\ndef test_context_region_exception():\n  \"\"\"Context constructor with non-list regions should raise an exception.\"\"\"\n  with pytest.raises(ValueError):\n    models.Context(project_id='project1', locations='us-central1-b')\n\n\ndef test_context_to_string():\n  \"\"\"Verify stringification of Context with and without regions/labels.\"\"\"\n  c = models.Context(project_id='project1')\n  assert str(c) == 'project: project1, parameters: {project_id=project1}'\n\n  c = models.Context(project_id='project1', locations=[])\n  assert str(c) == 'project: project1, parameters: {project_id=project1}'\n\n  c = models.Context(project_id='project1', locations=['us-central1'])\n  assert str(c) == (\n      'project: project1, locations (regions/zones): us-central1, '\n      'parameters: {project_id=project1}')\n\n  c = models.Context(project_id='project1',\n                     locations=['us-west1', 'us-west2'],\n                     resources=['dev-1', 'prod-1'])\n  assert str(c) == (\n      'project: project1, resources: dev-1|prod-1, locations '\n      '(regions/zones): us-west1|us-west2, parameters: {project_id=project1}')\n\n  c = models.Context(project_id='project1', labels={'A': 'B', 'X': 'Y'})\n  assert str(\n      c\n  ) == 'project: project1, labels: {A=B,X=Y}, parameters: {project_id=project1}'\n\n  c = models.Context(project_id='project1',\n                     locations=['us-central1'],\n                     labels={'X': 'Y'},\n                     resources=['name'])\n  assert str(c) == (\n      'project: project1, resources: name, locations (regions/zones): us-central1, '\n      'labels: {X=Y}, parameters: {project_id=project1}')\n\n\ndef test_match_project_resource():\n  \"\"\"Verify Context matching evaluations\"\"\"\n\n  # common use case simply lint one resource.\n  c = models.Context(project_id='project1', resources=['gke-prod'])\n  assert c.match_project_resource(resource='gke-prod', location='', labels={})\n  assert c.match_project_resource(resource='gke-prod',\n                                  location='us-central1',\n                                  labels={'X': 'Y'})\n  assert not c.match_project_resource(\n      resource='', location='us-central1', labels={'X': 'Y'})\n\n  # More complex context scope\n  c = models.Context(project_id='project1',\n                     locations=['us-central1', 'us-central2'],\n                     labels={\n                         'X': 'Y',\n                         'A': 'B'\n                     },\n                     resources=['dev-*', '^bastion-(host|machine)$'])\n\n  assert c.match_project_resource(resource='bastion-host',\n                                  location='us-central1',\n                                  labels={'X': 'Y'})\n  assert c.match_project_resource(resource='dev-frontend',\n                                  location='us-central1',\n                                  labels={'X': 'Y'})\n  assert c.match_project_resource(resource='dev-backend',\n                                  location='us-central1',\n                                  labels={'X': 'Y'})\n  assert not c.match_project_resource(\n      resource='', location='us-central1', labels={'X': 'Y'})\n  assert not c.match_project_resource(\n      resource='bastion-host', location='', labels={'X': 'Y'})\n  assert not c.match_project_resource(\n      resource='bastion-host', location='us-central1', labels={'X': 'B'})\n  assert not c.match_project_resource(\n      resource='name', labels={'X': 'Y'}, location='us-central3')\n  assert not c.match_project_resource(\n      location='us-central3', labels={'X': 'Y'}, resource='uninterested-name')\n  assert not c.match_project_resource(resource='', location='', labels={})\n\n  # allow some products to ignore locations or labels if there are tricky to support\n  assert c.match_project_resource(resource='bastion-host')\n  assert c.match_project_resource(resource='BASTION-machine')\n\n  assert c.match_project_resource(resource='dev-backend', labels={'X': 'Y'})\n  assert c.match_project_resource(resource='dev-frontend', labels={'X': 'Y'})\n  # Zones under a region should be considered if user set's on it's region\n  assert c.match_project_resource(resource='bastion-host',\n                                  location='us-central2-a')\n\n  # Test IGNORELOCATION AND IGNORELABEL\n  assert c.match_project_resource(resource='bastion-host',\n                                  location=c.IGNORELOCATION,\n                                  labels=c.IGNORELABEL)\n\n  # If for some strange coincidence customer's label is IGNORELABEL evaluation\n  # should fail if it doesn't match context.\n  assert not c.match_project_resource(resource='bastion-host',\n                                      labels={'IGNORELABEL': 'IGNORELABEL'})\n\n\ndef test_generic_declaration():\n  param = models.Parameter({'key': True})\n  assert param.get('key')\n\n\ndef test_string_strip():\n  param = models.Parameter()\n  param['bool_value_true'] = ' TRUE '\n  assert param['bool_value_true'] == 'TRUE'\n\n\ndef test_update_method():\n  param = models.Parameter()\n  updates = {'new_string': 'world'}\n  param.update(updates)\n  assert param['new_string'] == 'world'\n\n\ndef test_setdefault_existing_key():\n  param = models.Parameter({'existing_key': '100'})\n  old_val = param.setdefault('existing_key', '200')\n  assert old_val == '100'\n\n\ndef test_setdefault_non_existing_key():\n  param = models.Parameter()\n  param.setdefault('new_key', '300')\n  assert param['new_key'] == '300'\n"
  },
  {
    "path": "gcpdiag/product_list.py",
    "content": "\"\"\"\nReturns project-wide product list\n\"\"\"\nfrom typing import Dict\n\n\ndef get_product_list() -> Dict:\n\n  return {\n      'apigee':\n          '[Apigee API Management](https://cloud.google.com/apigee)',\n      'asm':\n          '[Anthos Service Mesh](https://cloud.google.com/anthos)',\n      'bigquery':\n          '[BigQuery](https://cloud.google.com/bigquery)',\n      'billing':\n          '[Cloud Billing](https://cloud.google.com/billing)',\n      'cloudrun':\n          '[Cloud Run](https://cloud.google.com/run)',\n      'cloudsql':\n          '[CloudSQL](https://cloud.google.com/sql)',\n      'composer':\n          '[Cloud Composer](https://cloud.google.com/composer)',\n      'crm':\n          '[Cloud Resource Manager](https://cloud.google.com/resource-manager)',\n      'dataflow':\n          '[Dataflow](https://cloud.google.com/dataflow)',\n      'datafusion':\n          '[Cloud Data Fusion](https://cloud.google.com/data-fusion)',\n      'dataproc':\n          '[Cloud Dataproc](https://cloud.google.com/dataproc)',\n      'gae':\n          '[App Engine](https://cloud.google.com/appengine)',\n      'gcb':\n          '[Cloud Build](https://cloud.google.com/build)',\n      'gce':\n          '[Compute Engine](https://cloud.google.com/compute)',\n      'gcf':\n          '[Cloud Functions](https://cloud.google.com/functions)',\n      'gcs':\n          '[Cloud Storage](https://cloud.google.com/storage)',\n      'gke':\n          '[Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)',\n      'iam':\n          '[Identity and Access Management (IAM)](https://cloud.google.com/iam)',\n      'interconnect':\n          '[Interconnect](https://cloud.google.com/network-connectivity/docs/interconnect)',\n      'lb':\n          '[Load balancing](https://cloud.google.com/load-balancing)',\n      'logs':\n          '[Cloud Logging](https://cloud.google.com/logging)',\n      'monitoring':\n          'https://cloud.google.com/monitoring',\n      'notebooks':\n          '[Vertex AI Workbench](https://cloud.google.com/vertex-ai-workbench)',\n      'nat':\n          '[Cloud NAT](https://cloud.google.com/nat)',\n      'pubsub':\n          '[Cloud Pub/Sub](https://cloud.google.com/pubsub/)',\n      'tpu':\n          '[Cloud TPU](https://cloud.google.com/tpu)',\n      'vertex':\n          '[Vertex AI](https://cloud.google.com/vertex-ai)',\n      'vpc':\n          '[Virtual Private Cloud](https://cloud.google.com/vpc)',\n      'vpn':\n          '[Vpn](https://cloud.google.com/hybrid-connectivity)',\n  }\n"
  },
  {
    "path": "gcpdiag/queries/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/queries/apigee.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Queries related to Apigee.\"\"\"\n\nimport functools\nimport re\nfrom typing import Dict, Iterable, List, Mapping, Optional\n\nimport googleapiclient.errors\n\nfrom gcpdiag import caching, config, models\nfrom gcpdiag.queries import apis, apis_utils, gce, network\nfrom gcpdiag.utils import GcpApiError\n\nMIG_STARTUP_SCRIPT_URL = \\\n    'gs://apigee-5g-saas/apigee-envoy-proxy-release/latest/conf/startup-script.sh'\n\n\nclass ApigeeEnvironment(models.Resource):\n  \"\"\"Represents an Apigee Environment\n    https://cloud.google.com/apigee/docs/reference/apis/apigee/rest/v1/organizations.environments#Environment\n    \"\"\"\n\n  def __init__(self, apigee_org, env_name: str):\n    super().__init__(project_id=apigee_org.project_id)\n    self.org_name = apigee_org.name\n    self.name = env_name\n\n  @property\n  def full_path(self) -> str:\n    return f'organizations/{self.org_name}/environments/{self.name}'\n\n\nclass ApigeeOrganization(models.Resource):\n  \"\"\"Represents an Apigee Organization\n    https://cloud.google.com/apigee/docs/reference/apis/apigee/rest/v1/organizations#Organization\n    \"\"\"\n  _resource_data: Optional[dict]\n  _environments: List[ApigeeEnvironment]\n\n  # It is possible to create an Apigee organization resource in another GCP project,\n  # set the resource_data as optional to avoid permission issues while accessing another GCP project\n  def __init__(self,\n               project_id: str,\n               org_name: str,\n               resource_data: Optional[dict] = None):\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n    self.name = org_name\n\n  @property\n  def full_path(self) -> str:\n    return f'organizations/{self.name}'\n\n  @property\n  def environments(self) -> Iterable[ApigeeEnvironment]:\n    if self._resource_data is None:\n      return []\n\n    return [\n        ApigeeEnvironment(self, env)\n        for env in self._resource_data.get('environments', [])\n    ]\n\n  @property\n  def runtime_type(self) -> str:\n    if self._resource_data is None:\n      return ''\n    return self._resource_data['runtimeType']\n\n  @property\n  def runtime_database_encryption_key_name(self) -> str:\n    if self._resource_data is None:\n      return ''\n\n    return self._resource_data.get('runtimeDatabaseEncryptionKeyName', '')\n\n  @property\n  def authorized_network(self) -> str:\n    if self._resource_data is None:\n      return ''\n\n    return self._resource_data.get('authorizedNetwork', '')\n\n  @property\n  def network(self) -> network.Network:\n    if self.authorized_network:\n      match = re.match(\n          r'projects/(?P<project>[^/]+)/([^/]+)/networks/(?P<network>[^/]+)$',\n          self.authorized_network)\n      # Check whether the authorized network is a shared VPC network\n      # A shared VPC network is using following format:\n      # `projects/{host-project-id}/{region}/networks/{network-name}`\n      if match:\n        return network.get_network(\n            match.group('project'), match.group('network'),\n            models.Context(project_id=match.group('project')))\n      else:\n        return network.get_network(self.project_id, self.authorized_network,\n                                   models.Context(project_id=self.project_id))\n\n    return network.get_network(self.project_id, 'default',\n                               models.Context(project_id=self.project_id))\n\n\nclass EnvironmentGroup(models.Resource):\n  \"\"\"Represents an Apigee Environment Group\n    https://cloud.google.com/apigee/docs/reference/apis/apigee/rest/v1/organizations.envgroups#resource:-environmentgroup\n    \"\"\"\n  _resource_data: dict\n\n  def __init__(self, apigee_org: ApigeeOrganization, resource_data):\n    super().__init__(project_id=apigee_org.project_id)\n    self._resource_data = resource_data\n    self.org_name = apigee_org.name\n\n  @property\n  def name(self) -> str:\n    return self._resource_data['name']\n\n  @property\n  def full_path(self) -> str:\n    return f'organizations/{self.org_name}/envgroups/{self.name}'\n\n  @property\n  def host_names(self) -> List[str]:\n    return self._resource_data['hostnames']\n\n\nclass ApigeeInstance(models.Resource):\n  \"\"\"Represents an Apigee Runtime Instance\n    https://cloud.google.com/apigee/docs/reference/apis/apigee/rest/v1/organizations.instances#Instance\n    \"\"\"\n  _resource_data: dict\n\n  def __init__(self, apigee_org: ApigeeOrganization, resource_data):\n    super().__init__(project_id=apigee_org.project_id)\n    self._resource_data = resource_data\n    self.org_name = apigee_org.name\n\n  @property\n  def name(self) -> str:\n    return self._resource_data['name']\n\n  @property\n  def full_path(self) -> str:\n    return f'organizations/{self.org_name}/instances/{self.name}'\n\n  @property\n  def disk_encryption_key_name(self) -> str:\n    return self._resource_data.get('diskEncryptionKeyName', '')\n\n  @property\n  def host(self) -> str:\n    return self._resource_data.get('host', '')\n\n  @property\n  def location(self) -> str:\n    return self._resource_data.get('location', '')\n\n\n@caching.cached_api_call\ndef get_org(context: models.Context) -> Optional[ApigeeOrganization]:\n  \"\"\"Get Apigee organizations matching the GCP Project Id\"\"\"\n  if not apis.is_enabled(context.project_id, 'apigee'):\n    return None\n  apigee_api = apis.get_api('apigee', 'v1', context.project_id)\n  # Apigee Organization : GCP Project = 1 : 1\n  org_list_query = apigee_api.organizations().list(parent='organizations')\n  try:\n    resp = org_list_query.execute(num_retries=config.API_RETRIES)\n    if 'organizations' not in resp:\n      return None\n    for resp_o in resp['organizations']:\n      if 'organization' not in resp_o or 'projectId' not in resp_o:\n        raise RuntimeError('missing data in organizations.list response')\n      if context.project_id == resp_o['projectId']:\n        org_name = resp_o['organization']\n        get_org_query = apigee_api.organizations().get(\n            name=f'organizations/{org_name}')\n        get_org_resp = get_org_query.execute(num_retries=config.API_RETRIES)\n        return ApigeeOrganization(context.project_id, resp_o['organization'],\n                                  get_org_resp)\n  except googleapiclient.errors.HttpError as err:\n    raise GcpApiError(err) from err\n  return None\n\n\n@caching.cached_api_call\ndef get_envgroups(\n    apigee_org: ApigeeOrganization) -> Mapping[str, EnvironmentGroup]:\n  \"\"\"Get Environment group list by organization name, caching the result.\"\"\"\n  envgroups: Dict[str, EnvironmentGroup] = {}\n  apigee_api = apis.get_api('apigee', 'v1')\n\n  request = apigee_api.organizations().envgroups().list(\n      parent=f'organizations/{apigee_org.name}')\n  for envgroup in apis_utils.list_all(\n      request,\n      next_function=apigee_api.organizations().envgroups().list_next,\n      response_keyword='environmentGroups'):\n    envgroups[envgroup['name']] = EnvironmentGroup(apigee_org=apigee_org,\n                                                   resource_data=envgroup)\n  return envgroups\n\n\n@caching.cached_api_call\ndef get_envgroups_attachments(envgroup_name: str) -> List[str]:\n  \"\"\"Get Environment group attachments by environment group name, caching the result.\"\"\"\n  environments: List[str] = []\n  apigee_api = apis.get_api('apigee', 'v1')\n\n  request = apigee_api.organizations().envgroups().attachments().list(\n      parent=envgroup_name)\n  for attachments in apis_utils.list_all(\n      request,\n      next_function=apigee_api.organizations().envgroups().attachments(\n      ).list_next,\n      response_keyword='environmentGroupAttachments'):\n    environments.append(attachments['environment'])\n  return environments\n\n\n@caching.cached_api_call\ndef get_instances(\n    apigee_org: ApigeeOrganization) -> Mapping[str, ApigeeInstance]:\n  \"\"\"Get instance list from Apigee Organization, caching the result.\"\"\"\n  instances: Dict[str, ApigeeInstance] = {}\n  # Not supported for Apigee hybrid.\n  if apigee_org.runtime_type == 'HYBRID':\n    return instances\n\n  apigee_api = apis.get_api('apigee', 'v1')\n  request = apigee_api.organizations().instances().list(\n      parent=f'organizations/{apigee_org.name}')\n  for instance in apis_utils.list_all(\n      request,\n      next_function=apigee_api.organizations().instances().list_next,\n      response_keyword='instances'):\n    instances[instance['name']] = ApigeeInstance(apigee_org=apigee_org,\n                                                 resource_data=instance)\n  return instances\n\n\n@caching.cached_api_call\ndef get_instances_attachments(instance_name: str) -> List[str]:\n  \"\"\"Get instance attachments by instance name, caching the result.\"\"\"\n  environments: List[str] = []\n  if not instance_name:\n    return environments\n\n  apigee_api = apis.get_api('apigee', 'v1')\n  request = apigee_api.organizations().instances().attachments().list(\n      parent=instance_name)\n  for attachments in apis_utils.list_all(request,\n                                         next_function=apigee_api.organizations(\n                                         ).instances().attachments().list_next,\n                                         response_keyword='attachments'):\n    environments.append(attachments['environment'])\n  return environments\n\n\n@functools.lru_cache()\ndef get_network_bridge_instance_groups(\n    project_id: str) -> List[gce.ManagedInstanceGroup]:\n  \"\"\"Get a list of managed instance groups used by Apigee for routing purposes.\"\"\"\n  migs: List[gce.ManagedInstanceGroup] = []\n  for m in gce.get_region_managed_instance_groups(\n      models.Context(project_id=project_id)).values():\n    if m.template.get_metadata('startup-script-url') == MIG_STARTUP_SCRIPT_URL:\n      migs.append(m)\n  return migs\n"
  },
  {
    "path": "gcpdiag/queries/apigee_stub.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Stub API calls used in apigee.py for testing.\n\nInstead of doing real API calls, we return test JSON data.\n\"\"\"\n\nimport re\n\nfrom gcpdiag.queries import apis_stub\n\n# pylint: disable=unused-argument\n\nDUMMY_PROJECT_ID = 'gcpdiag-apigee1-aaaa'\n\n\nclass ApigeeApiStub:\n  \"\"\"Mock object to simulate apigee api calls.\"\"\"\n\n  def __init__(self, project_id=DUMMY_PROJECT_ID):\n    self.project_id = project_id\n\n  def organizations(self):\n    return ApigeeOraganizationsApiStub()\n\n\nclass ApigeeOraganizationsApiStub(ApigeeApiStub):\n  \"\"\"Mock object to simulate apigee organizations api calls\"\"\"\n\n  def list(self, parent):\n    return apis_stub.RestCallStub(self.project_id, 'apigee-organizations')\n\n  def get(self, name):\n    return apis_stub.RestCallStub(self.project_id, 'apigee-organization')\n\n  def envgroups(self):\n    return ApigeeEnvgroupsApiStub(self.project_id)\n\n  def instances(self):\n    return ApigeeInstancesApiStub(self.project_id)\n\n\nclass ApigeeEnvgroupsApiStub(ApigeeApiStub):\n  \"\"\"Mock object to simulate apigee environment groups api calls\"\"\"\n\n  def list(self, parent):\n    return apis_stub.RestCallStub(\n        self.project_id,\n        'apigee-envgroups',\n        default_json_basename='apigee-envgroups-empty')\n\n  def attachments(self):\n    return ApigeeEnvGroupsAttachmentsApiStub(self.project_id)\n\n  def list_next(self, previous_request, previous_response):\n    return None\n\n\nclass ApigeeInstancesApiStub(ApigeeApiStub):\n  \"\"\"Mock object to simulate apigee instances api calls\"\"\"\n\n  def list(self, parent):\n    return apis_stub.RestCallStub(\n        self.project_id,\n        'apigee-instances',\n        default_json_basename='apigee-instances-empty')\n\n  def attachments(self):\n    return ApigeeInstancesAttachmentsApiStub(self.project_id)\n\n  def list_next(self, previous_request, previous_response):\n    return None\n\n\nclass ApigeeEnvGroupsAttachmentsApiStub(ApigeeApiStub):\n  \"\"\"Mock object to simulate apigee environment groups attachments api calls\"\"\"\n\n  def list(self, parent):\n    m = re.match(r'organizations/([^/]+)/envgroups/(.*)', parent)\n    if m:\n      envgroup_name = m.group(2)\n      return apis_stub.RestCallStub(\n          self.project_id,\n          f'apigee-envgroups-{envgroup_name}-attachments',\n          default_json_basename='apigee-envgroups-attachments-empty')\n\n  def list_next(self, previous_request, previous_response):\n    return None\n\n\nclass ApigeeInstancesAttachmentsApiStub(ApigeeApiStub):\n  \"\"\"Mock object to simulate apigee instances attachments api calls\"\"\"\n\n  def list(self, parent):\n    m = re.match(r'organizations/([^/]+)/instances/(.*)', parent)\n    if m:\n      instance_name = m.group(2)\n      return apis_stub.RestCallStub(\n          self.project_id,\n          f'apigee-instances-{instance_name}-attachments',\n          default_json_basename='apigee-instances-attachments-empty')\n\n  def list_next(self, previous_request, previous_response):\n    return None\n"
  },
  {
    "path": "gcpdiag/queries/apigee_test.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Test code in apigee.py.\"\"\"\n\nfrom unittest import mock\n\nfrom gcpdiag import models\nfrom gcpdiag.queries import apigee, apis_stub\n\nDUMMY_PROJECT_NAME = 'gcpdiag-apigee1-aaaa'\nDUMMY_APIGEE_ORG_NAME = 'gcpdiag-apigee1-aaaa'\nDUMMY_APIGEE_ORG_RUNTIME_TYPE = 'CLOUD'\nDUMMY_APIGEE_NETWORK_NAME = 'apigee-network'\nDUMMY_APIGEE_ENVGROUP_NAME = 'gcpdiag-demo-envgroup'\nDUMMY_APIGEE_ENVGROUP_FULL_PATH = \\\n        f'organizations/{DUMMY_APIGEE_ORG_NAME}/envgroups/{DUMMY_APIGEE_ENVGROUP_NAME}'\nDUMMY_APIGEE_ENVGROUP_HOST_NAMES = ['gcpdiag.apigee.example.com']\nDUMMY_APIGEE_ENVGROUP1_ATTACHMENTS_ENV = 'gcpdiag-demo-env-1'\nDUMMY_APIGEE_ENVGROUP1_NAME = 'gcpdiag-demo-envgroup-1'\nDUMMY_APIGEE_ENVGROUP1_FULL_PATH = \\\n       f'organizations/{DUMMY_APIGEE_ORG_NAME}/envgroups/{DUMMY_APIGEE_ENVGROUP1_NAME}'\nDUMMY_APIGEE_INSTANCE1_NAME = 'gcpdiag-apigee1-inst1-aaaa'\nDUMMY_APIGEE_INSTANCE1_FULL_PATH = \\\n        f'organizations/{DUMMY_APIGEE_ORG_NAME}/instances/{DUMMY_APIGEE_INSTANCE1_NAME}'\nDUMMY_APIGEE_INSTANCE1_ATTACHMENTS_ENV = 'gcpdiag-demo-env'\nDUMMY_APIGEE_NETWORK_BRIDGE_INSTANCE_GROUP1_NAME = 'mig-bridge-manager-us-central1'\n\n\n@mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)\nclass TestOrganization:\n  \"\"\"Test apigee.Organization.\"\"\"\n\n  def test_get_org(self):\n    \"\"\" get_org returns the right apigee organization by project name \"\"\"\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    apigee_org = apigee.get_org(context=context)\n\n    assert apigee_org.name == DUMMY_APIGEE_ORG_NAME\n    assert apigee_org.runtime_type == DUMMY_APIGEE_ORG_RUNTIME_TYPE\n    assert apigee_org.network.project_id == DUMMY_PROJECT_NAME\n    assert apigee_org.network.name == DUMMY_APIGEE_NETWORK_NAME\n\n    apigee_envs = [e.name for e in apigee_org.environments]\n    assert DUMMY_APIGEE_ENVGROUP1_ATTACHMENTS_ENV in apigee_envs\n    assert DUMMY_APIGEE_INSTANCE1_ATTACHMENTS_ENV in apigee_envs\n\n  def test_get_envgroups(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    apigee_org = apigee.get_org(context=context)\n    apigee_envgroups = apigee.get_envgroups(apigee_org)\n    assert len(apigee_envgroups) == 2\n    assert DUMMY_APIGEE_ENVGROUP_NAME in apigee_envgroups\n\n    e = apigee_envgroups[DUMMY_APIGEE_ENVGROUP_NAME]\n    assert e.full_path == DUMMY_APIGEE_ENVGROUP_FULL_PATH\n    assert e.host_names == DUMMY_APIGEE_ENVGROUP_HOST_NAMES\n\n  def test_get_envgroups_attachments(self):\n    apigee_envgroups_attachments = apigee.get_envgroups_attachments(\n        envgroup_name=DUMMY_APIGEE_ENVGROUP1_FULL_PATH)\n    assert DUMMY_APIGEE_ENVGROUP1_ATTACHMENTS_ENV in apigee_envgroups_attachments\n\n  def test_get_instances(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    apigee_org = apigee.get_org(context=context)\n    apigee_instances = apigee.get_instances(apigee_org)\n\n    assert len(apigee_instances) == 1\n    assert DUMMY_APIGEE_INSTANCE1_NAME in apigee_instances\n\n    i = apigee_instances[DUMMY_APIGEE_INSTANCE1_NAME]\n    assert i.full_path == DUMMY_APIGEE_INSTANCE1_FULL_PATH\n\n  def test_get_instances_attachments(self):\n    apigee_instances_attachments = apigee.get_instances_attachments(\n        instance_name=DUMMY_APIGEE_INSTANCE1_FULL_PATH)\n    assert DUMMY_APIGEE_INSTANCE1_ATTACHMENTS_ENV in apigee_instances_attachments\n\n  def test_get_network_bridge_instance_groups(self):\n    apigee_network_bridge_migs = apigee.get_network_bridge_instance_groups(\n        project_id=DUMMY_PROJECT_NAME)\n\n    assert len(apigee_network_bridge_migs) == 1\n    assert apigee_network_bridge_migs[\n        0].name == DUMMY_APIGEE_NETWORK_BRIDGE_INSTANCE_GROUP1_NAME\n"
  },
  {
    "path": "gcpdiag/queries/apis.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Build and cache GCP APIs + handle authentication.\"\"\"\n\nimport json\nimport logging\nimport os\nfrom typing import Dict, Optional, Set\n\nimport google.auth\nimport google_auth_httplib2\nimport googleapiclient.http\nimport httplib2\nfrom google.api_core.client_options import ClientOptions\nfrom google.auth import exceptions\nfrom google.oauth2 import credentials as oauth2_credentials\nfrom googleapiclient import discovery\n\nfrom gcpdiag import caching, config, hooks, utils\n\n_credentials = None\n\nAUTH_SCOPES = [\n    'openid',\n    'https://www.googleapis.com/auth/cloud-platform',\n    'https://www.googleapis.com/auth/userinfo.email',\n]\n\n\ndef _auth_method():\n  \"\"\"Calculate proper authentication method based on provided configuration\n\n  Returns:\n      str: Return type of authentication method\n  \"\"\"\n  if config.get('auth_key'):\n    auth_method = 'key'\n  elif config.get('auth_adc'):\n    auth_method = 'adc'\n  else:\n    # use ADC by default\n    auth_method = 'adc'\n  return auth_method\n\n\ndef _get_credentials_adc():\n  logging.debug('auth: using application default credentials')\n\n  global _credentials\n  if not _credentials:\n    # workaround to avoid log message:\n    # \"WARNING:google.auth._default:No project ID could be determined.\"\n    os.environ.setdefault('GOOGLE_CLOUD_PROJECT', '...fake project id...')\n    _credentials, _ = google.auth.default(scopes=AUTH_SCOPES)\n  return _credentials\n\n\ndef _get_credentials_key():\n  filename = config.get('auth_key')\n  logging.debug('auth: using service account key')\n\n  global _credentials\n  if not _credentials:\n    _credentials, _ = google.auth.load_credentials_from_file(filename=filename,\n                                                             scopes=AUTH_SCOPES)\n  return _credentials\n\n\ndef set_credentials(cred_json):\n  global _credentials\n  if not cred_json:\n    _credentials = None\n  else:\n    _credentials = oauth2_credentials.Credentials.from_authorized_user_info(\n        json.loads(cred_json))\n\n\ndef get_credentials():\n  if _auth_method() == 'adc':\n    return _get_credentials_adc()\n  elif _auth_method() == 'key':\n    return _get_credentials_key()\n  else:\n    raise AssertionError(\n        'BUG: AUTH_METHOD method should be one of `adc` or `key`, '\n        f'but got `{_auth_method()}` instead.'\n        ' Please report at https://gcpdiag.dev/issues/')\n\n\ndef _get_project_or_billing_id(project_id: str) -> str:\n  \"\"\"Return project or billing project id (if defined)\"\"\"\n  if config.get('billing_project'):\n    return config.get('billing_project')\n  return project_id\n\n\ndef login():\n  \"\"\"Force GCP login (this otherwise happens on the first get_api call).\"\"\"\n  get_credentials()\n\n\ndef get_user_email() -> str:\n  if config.get('universe_domain') != 'googleapis.com':\n    return 'TPC user'\n  credentials = get_credentials().with_quota_project(None)\n\n  http = google_auth_httplib2.AuthorizedHttp(credentials, http=httplib2.Http())\n  resp, content = http.request('https://www.googleapis.com/userinfo/v2/me')\n  if resp['status'] != '200':\n    raise RuntimeError(f\"can't determine user email. status={resp['status']}\")\n  data = json.loads(content)\n  logging.debug('determined my email address: %s', data['email'])\n  return data['email']\n\n\n@caching.cached_api_call(in_memory=True)\ndef get_api(service_name: str,\n            version: str,\n            project_id: Optional[str] = None,\n            region: Optional[str] = None):\n  \"\"\"Get an API object, as returned by googleapiclient.discovery.build.\n\n  If project_id is specified, this will be used as the billed project, and usually\n  you should put there the project id of the project that you are inspecting.\"\"\"\n  credentials = get_credentials()\n\n  def _request_builder(http, *args, **kwargs):\n    del http\n\n    if 'headers' in kwargs:\n      # thread safety: make sure that original dictionary isn't modified\n      kwargs['headers'] = kwargs['headers'].copy()\n\n      headers = kwargs.get('headers', {})\n      headers['user-agent'] = f'gcpdiag/{config.VERSION} (gzip)'\n      if project_id:\n        headers['x-goog-user-project'] = _get_project_or_billing_id(project_id)\n\n    hooks.request_builder_hook(*args, **kwargs)\n\n    # thread safety: create a new AuthorizedHttp object for every request\n    # https://github.com/googleapis/google-api-python-client/blob/master/docs/thread_safety.md\n    new_http = google_auth_httplib2.AuthorizedHttp(credentials,\n                                                   http=httplib2.Http())\n    return googleapiclient.http.HttpRequest(new_http, *args, **kwargs)\n\n  universe_domain = config.get('universe_domain')\n  cred_universe = getattr(credentials, 'universe_domain', 'googleapis.com')\n  if cred_universe != universe_domain:\n    raise ValueError('credential universe_domain mismatch '\n                     f'{cred_universe} != {universe_domain}')\n  client_options = ClientOptions()\n  if universe_domain != 'googleapis.com':\n    client_options.universe_domain = universe_domain\n  if region:\n    client_options.api_endpoint = f'https://{region}-{service_name}.{universe_domain}'\n  else:\n    client_options.api_endpoint = f'https://{service_name}.{universe_domain}'\n  if service_name in ['compute', 'bigquery', 'storage', 'dns']:\n    client_options.api_endpoint += f'/{service_name}/{version}'\n  api = discovery.build(service_name,\n                        version,\n                        cache_discovery=False,\n                        credentials=credentials,\n                        requestBuilder=_request_builder,\n                        client_options=client_options)\n  return api\n\n\n@caching.cached_api_call(in_memory=True)\ndef _list_enabled_apis(project_id: str) -> Set[str]:\n  \"\"\"List all enabled services available to the specified project\"\"\"\n  logging.debug('listing enabled APIs')\n  serviceusage = get_api('serviceusage', 'v1', project_id)\n  request = serviceusage.services().list(parent=f'projects/{project_id}',\n                                         filter='state:ENABLED')\n  enabled_apis: Set[str] = set()\n  try:\n    while request is not None:\n      response = request.execute(num_retries=config.API_RETRIES)\n      if not response:\n        logging.debug(\"No 'services' found in the response for project: %s\",\n                      project_id)\n        break\n      services = response.get('services', [])\n      if services is None:\n        logging.debug(\"No 'services' found in the response for project: %s\",\n                      project_id)\n        break\n      for service in services:\n        if 'config' in service and 'name' in service['config']:\n          enabled_apis.add(service['config']['name'])\n      request = serviceusage.services().list_next(request, response)\n  except googleapiclient.errors.HttpError as err:\n    raise utils.GcpApiError(err) from err\n  return enabled_apis\n\n\ndef is_enabled(project_id: str, service_name: str) -> bool:\n  universe_domain = config.get('universe_domain')\n  return f'{service_name}.{universe_domain}' in _list_enabled_apis(project_id)\n\n\ndef is_all_enabled(project_id: str, services: list) -> Dict[str, str]:\n  service_state = {}\n  for service in services:\n    if not is_enabled(project_id, service):\n      service_state[service] = 'DISABLED'\n    else:\n      service_state[service] = 'ENABLED'\n  return service_state\n\n\n@caching.cached_api_call(in_memory=True)\ndef list_services_with_state(project_id: str) -> Dict[str, str]:\n  logging.debug('listing all APIs with their state')\n  serviceusage = get_api('serviceusage', 'v1', project_id)\n  request = serviceusage.services().list(parent=f'projects/{project_id}')\n  apis_state: Dict[str, str] = {}\n  try:\n    while request is not None:\n      response = request.execute(num_retries=config.API_RETRIES)\n      for service in response['services']:\n        apis_state.setdefault(service['config']['name'], service['state'])\n      request = serviceusage.services().list_next(request, response)\n  except googleapiclient.errors.HttpError as err:\n    raise utils.GcpApiError(err) from err\n  return apis_state\n\n\ndef verify_access(project_id: str):\n  \"\"\"Verify that the user has access to the project, exit with an error otherwise.\"\"\"\n\n  try:\n    if not is_enabled(project_id, 'cloudresourcemanager'):\n      service = f\"cloudresourcemanager.{config.get('universe_domain')}\"\n      error_msg = (\n          'Cloud Resource Manager API must be enabled. To enable, execute:\\n'\n          f'gcloud services enable {service} --project={project_id}')\n      raise utils.GcpApiError(response=error_msg,\n                              service=service,\n                              reason='SERVICE_DISABLED')\n    if not is_enabled(project_id, 'iam'):\n      service = f\"iam.{config.get('universe_domain')}\"\n      error_msg = (\n          'Identity and Access Management (IAM) API must be enabled. To enable, execute:\\n'\n          f\"gcloud services enable iam.{config.get('universe_domain')} --project={project_id}\"\n      )\n      raise utils.GcpApiError(response=error_msg,\n                              service=service,\n                              reason='SERVICE_DISABLED')\n    if not is_enabled(project_id, 'logging'):\n      service = f\"logging.{config.get('universe_domain')}\"\n      warning_msg = (\n          'Cloud Logging API is not enabled (related rules will be skipped).'\n          ' To enable, execute:\\n'\n          f\"gcloud services enable logging.{config.get('universe_domain')} --project={project_id}\\n\"\n      )\n      raise utils.GcpApiError(response=warning_msg,\n                              service=service,\n                              reason='SERVICE_DISABLED')\n  except utils.GcpApiError as err:\n    if 'SERVICE_DISABLED' == err.reason:\n      if f\"serviceusage.{config.get('universe_domain')}\" == err.service:\n        err.response += (\n            '\\nService Usage API must be enabled. To enable, execute:\\n'\n            f\"gcloud services enable serviceusage.{config.get('universe_domain')} \"\n            f'--project={project_id}')\n    else:\n      logging.error('can\\'t access project %s: %s', project_id, err.message)\n    raise err\n  except exceptions.GoogleAuthError as err:\n    logging.error(err)\n    if _auth_method() == 'adc':\n      logging.error('Error using application default credentials. '\n                    'Try running: gcloud auth login --update-adc')\n    raise err\n  # Plug-in additional authorization verifications\n  hooks.verify_access_hook(project_id)\n"
  },
  {
    "path": "gcpdiag/queries/apis_stub.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# pylint: disable=cyclic-import\n\"\"\"Stub API calls used in apis.py for testing.\"\"\"\n\nimport json\nimport pathlib\nimport re\nfrom typing import Optional\n\nimport googleapiclient\nimport httplib2\n\n# pylint: disable=unused-argument\nJSON_PROJECT_DIR = {\n    'gcpdiag-apigee1-aaaa':\n        pathlib.Path(__file__).parents[2] / 'test-data/apigee1/json-dumps',\n    '12340005':\n        pathlib.Path(__file__).parents[2] / 'test-data/apigee1/json-dumps',\n    'gcpdiag-gce1-aaaa':\n        pathlib.Path(__file__).parents[2] / 'test-data/gce1/json-dumps',\n    '12340001':\n        pathlib.Path(__file__).parents[2] / 'test-data/gce1/json-dumps',\n    'test-project':\n        pathlib.Path(__file__).parents[2] / 'test-data/gce1/json-dumps',\n    'gcpdiag-gce-faultyssh-runbook':\n        pathlib.Path(__file__).parents[2] / 'test-data/gce2/json-dumps',\n    '12345601':\n        pathlib.Path(__file__).parents[2] / 'test-data/gce2/json-dumps',\n    'gcpdiag-gce-vm-performance':\n        pathlib.Path(__file__).parents[2] / 'test-data/gce4/json-dumps',\n    '123456270':\n        pathlib.Path(__file__).parents[2] / 'test-data/gce4/json-dumps',\n    'gcpdiag-bigquery1-aaaa':\n        pathlib.Path(__file__).parents[2] / 'test-data/bigquery1/json-dumps',\n    'gcpdiag-gke1-aaaa':\n        pathlib.Path(__file__).parents[2] / 'test-data/gke1/json-dumps',\n    '12340002':\n        pathlib.Path(__file__).parents[2] / 'test-data/gke1/json-dumps',\n    'gcpdiag-gcf1-aaaa':\n        pathlib.Path(__file__).parents[2] / 'test-data/gcf1/json-dumps',\n    '12340003':\n        pathlib.Path(__file__).parents[2] / 'test-data/gcf1/json-dumps',\n    'gcpdiag-gcs1-aaaa':\n        pathlib.Path(__file__).parents[2] / 'test-data/gcs1/json-dumps',\n    'gcpdiag-datafusion1-aaaa':\n        pathlib.Path(__file__).parents[2] / 'test-data/datafusion1/json-dumps',\n    '12340010':\n        pathlib.Path(__file__).parents[2] / 'test-data/datafusion1/json-dumps',\n    'gcpdiag-dataproc1-aaaa':\n        pathlib.Path(__file__).parents[2] / 'test-data/dataproc1/json-dumps',\n    'gcpdiag-dataproc2-aaaa':\n        pathlib.Path(__file__).parents[2] / 'test-data/dataproc2/json-dumps',\n    'gcpdiag-dataproc3-aaaa':\n        pathlib.Path(__file__).parents[2] / 'test-data/dataproc3/json-dumps',\n    'gcpdiag-composer1-aaaa':\n        pathlib.Path(__file__).parents[2] / 'test-data/composer1/json-dumps',\n    'gcpdiag-cloudsql1-aaaa':\n        pathlib.Path(__file__).parents[2] / 'test-data/cloudsql1/json-dumps',\n    'gcpdiag-cloudasset1-aaaa':\n        pathlib.Path(__file__).parents[2] / 'test-data/cloudasset1/json-dumps',\n    '12340071':\n        pathlib.Path(__file__).parents[2] / 'test-data/cloudasset1/json-dumps',\n    'gcpdiag-fw-policy-aaaa':\n        pathlib.Path(__file__).parents[2] / 'test-data/fw-policy/json-dumps',\n    '12340004':\n        pathlib.Path(__file__).parents[2] / 'test-data/fw-policy/json-dumps',\n    'gcpdiag-pubsub1-aaaa':\n        pathlib.Path(__file__).parents[2] / 'test-data/pubsub1/json-dumps',\n    '12340014':\n        pathlib.Path(__file__).parents[2] / 'test-data/pubsub1/json-dumps',\n    'gcpdiag-gaes1-aaaa':\n        pathlib.Path(__file__).parents[2] / 'test-data/gaes1/json-dumps',\n    'gcpdiag-gcb1-aaaa':\n        pathlib.Path(__file__).parents[2] / 'test-data/gcb1/json-dumps',\n    'gcpdiag-vpc1-aaaa':\n        pathlib.Path(__file__).parents[2] / 'test-data/vpc1/json-dumps',\n    'gcpdiag-lb1-aaaa':\n        pathlib.Path(__file__).parents[2] / 'test-data/lb1/json-dumps',\n    'gcpdiag-lb2-aaaa':\n        pathlib.Path(__file__).parents[2] / 'test-data/lb2/json-dumps',\n    'gcpdiag-lb3-aaaa':\n        pathlib.Path(__file__).parents[2] / 'test-data/lb3/json-dumps',\n    'gcpdiag-tpu1-aaaa':\n        pathlib.Path(__file__).parents[2] / 'test-data/tpu1/json-dumps',\n    'gcpdiag-iam1-aaaa':\n        pathlib.Path(__file__).parents[2] / 'test-data/iam1/json-dumps',\n    'gcpdiag-cloudrun1-aaaa':\n        pathlib.Path(__file__).parents[2] / 'test-data/cloudrun1/json-dumps',\n    '123400010':\n        pathlib.Path(__file__).parents[2] / 'test-data/cloudrun1/json-dumps',\n    'gcpdiag-cloudrun2-aaaa':\n        pathlib.Path(__file__).parents[2] / 'test-data/cloudrun2/json-dumps',\n    'gcpdiag-notebooks1-aaaa':\n        pathlib.Path(__file__).parents[2] / 'test-data/notebooks1/json-dumps',\n    'gcpdiag-notebooks2-aaaa':\n        pathlib.Path(__file__).parents[2] / 'test-data/notebooks2/json-dumps',\n    'gcpdiag-dataflow1-aaaa':\n        pathlib.Path(__file__).parents[2] / 'test-data/dataflow1/json-dumps',\n    'gcpdiag-vertex1-aaaa':\n        pathlib.Path(__file__).parents[2] / 'test-data/vertex1/json-dumps',\n    'gcpdiag-billing1-aaaa':\n        pathlib.Path(__file__).parents[2] / 'test-data/billing1/json-dumps',\n    'gcpdiag-billing2-aaaa':\n        pathlib.Path(__file__).parents[2] / 'test-data/billing1/json-dumps',\n    'gcpdiag-billing3-aaaa':\n        pathlib.Path(__file__).parents[2] / 'test-data/billing1/json-dumps',\n    'gcpdiag-osconfig1-aaaa':\n        pathlib.Path(__file__).parents[2] / 'test-data/osconfig1/json-dumps',\n    'gcpdiag-gke-cluster-autoscaler-rrrr':\n        pathlib.Path(__file__).parents[2] / 'test-data/gke2/json-dumps',\n    '1234000173':\n        pathlib.Path(__file__).parents[2] / 'test-data/gke2/json-dumps',\n    'gcpdiag-vpc2-runbook':\n        pathlib.Path(__file__).parents[2] / 'test-data/vpc2/json-dumps',\n    '12345602':\n        pathlib.Path(__file__).parents[2] / 'test-data/vpc2/json-dumps',\n    'gcpdiag-gce3-aaaa':\n        pathlib.Path(__file__).parents[2] / 'test-data/gce3/json-dumps',\n    '12345001':\n        pathlib.Path(__file__).parents[2] / 'test-data/gce3/json-dumps',\n    'gcpdiag-gke3-gggg':\n        pathlib.Path(__file__).parents[2] / 'test-data/gke3/json-dumps',\n    'gcpdiag-interconnect1-aaaa':\n        pathlib.Path(__file__).parents[2] /\n        'test-data/interconnect1/json-dumps',\n    '12340032':\n        pathlib.Path(__file__).parents[2] / 'test-data/gke3/json-dumps',\n    'gcpdiag-gke4-runbook':\n        pathlib.Path(__file__).parents[2] / 'test-data/gke4/json-dumps',\n    'gcpdiag-nat1-aaaa':\n        pathlib.Path(__file__).parents[2] / 'test-data/nat1/json-dumps',\n    '12340033':\n        pathlib.Path(__file__).parents[2] / 'test-data/gke4/json-dumps',\n    'centos-cloud':\n        pathlib.Path(__file__).parents[2] /\n        'test-data/gce-image-license/json-dumps',\n    'cos-cloud':\n        pathlib.Path(__file__).parents[2] /\n        'test-data/gce-image-license/json-dumps',\n    'debian-cloud':\n        pathlib.Path(__file__).parents[2] /\n        'test-data/gce-image-license/json-dumps',\n    'fedora-cloud':\n        pathlib.Path(__file__).parents[2] /\n        'test-data/gce-image-license/json-dumps',\n    'fedora-coreos-cloud':\n        pathlib.Path(__file__).parents[2] /\n        'test-data/gce-image-license/json-dumps',\n    'opensuse-cloud':\n        pathlib.Path(__file__).parents[2] /\n        'test-data/gce-image-license/json-dumps',\n    'rhel-cloud':\n        pathlib.Path(__file__).parents[2] /\n        'test-data/gce-image-license/json-dumps',\n    'rhel-sap-cloud':\n        pathlib.Path(__file__).parents[2] /\n        'test-data/gce-image-license/json-dumps',\n    'rocky-linux-cloud':\n        pathlib.Path(__file__).parents[2] /\n        'test-data/gce-image-license/json-dumps',\n    'suse-cloud':\n        pathlib.Path(__file__).parents[2] /\n        'test-data/gce-image-license/json-dumps',\n    'suse-sap-cloud':\n        pathlib.Path(__file__).parents[2] /\n        'test-data/gce-image-license/json-dumps',\n    'ubuntu-os-cloud':\n        pathlib.Path(__file__).parents[2] /\n        'test-data/gce-image-license/json-dumps',\n    'ubuntu-os-pro-cloud':\n        pathlib.Path(__file__).parents[2] /\n        'test-data/gce-image-license/json-dumps',\n    'windows-cloud':\n        pathlib.Path(__file__).parents[2] /\n        'test-data/gce-image-license/json-dumps',\n    'windows-sql-cloud':\n        pathlib.Path(__file__).parents[2] /\n        'test-data/gce-image-license/json-dumps',\n    'gcpdiag-gce5-aaaa':\n        pathlib.Path(__file__).parents[2] / 'test-data/gce5/json-dumps',\n    '123456012345':\n        pathlib.Path(__file__).parents[2] / 'test-data/gce5/json-dumps',\n    'gcpdiag-looker1-aaaa':\n        pathlib.Path(__file__).parents[2] / 'test-data/looker1/json-dumps',\n    'gcpdiag-gce6-aaaa':\n        pathlib.Path(__file__).parents[2] / 'test-data/gce6/json-dumps',\n    '1234560123456':\n        pathlib.Path(__file__).parents[2] / 'test-data/gce6/json-dumps',\n    'gcpdiag-vpn1-aaaa':\n        pathlib.Path(__file__).parents[2] / 'test-data/vpn/json-dumps',\n}\n\n# set to a value higher than 0 to emulate API temp. failure\nfail_next_execute_count = 0\n\n\ndef get_json_dir(project_id: str):\n  return JSON_PROJECT_DIR[project_id]\n\n\nclass ApiStub:\n  \"\"\"Base class for \"API Stubs\", i.e. objects that mock what is returned\n  by the googleapiclient modules. This base class makes it easier to\n  implement testing of failure modes on API failures thanks to the\n  fail_next() and _maybe_raise_api_exception() methods.\"\"\"\n\n  _fail_count: int = 0\n\n  def fail_next(self, fail_count: int, fail_status: int = 429):\n    self._fail_count = fail_count\n    self._fail_status = fail_status\n\n  def _maybe_raise_api_exception(self):\n    \"\"\"Simulate API errors by possibly raising an exception, if\n    fail_next() was called before to do that.\n\n    Raises: googleapiclient.errors.HttpError exception.\"\"\"\n\n    if self._fail_count > 0:\n      self._fail_count -= 1\n      raise googleapiclient.errors.HttpError(\n          httplib2.Response({'status': self._fail_status}),\n          b'mocking API error')\n\n\nclass RestCallStub(ApiStub):\n  \"\"\"Generic mock object to simulate executable api request.\"\"\"\n\n  def __init__(self,\n               project_id: str,\n               json_basename: str,\n               *,\n               page: int = 1,\n               default: Optional[dict] = None,\n               default_json_basename: Optional[str] = None,\n               request_uri: str = ''):\n    self.project_id = project_id\n    self.json_dir = get_json_dir(project_id)\n    self.json_basename = json_basename\n    self.page = page\n    self.default = default\n    self.default_json_basename = default_json_basename\n    self.uri = request_uri\n\n  def execute(self, num_retries: int = 0) -> dict:\n    self._maybe_raise_api_exception()\n    try:\n      filename = str(self.json_dir / self.json_basename)\n      if self.page > 1:\n        filename += f'-{self.page}'\n      filename += '.json'\n      with open(filename, encoding='utf-8') as json_file:\n        return json.load(json_file)\n    except FileNotFoundError:\n      if self.default is not None:\n        return self.default\n      if self.default_json_basename is not None:\n        with open(str(self.json_dir / self.default_json_basename) + '.json',\n                  encoding='utf-8') as json_file:\n          return json.load(json_file)\n      raise\n\n\nclass ServiceUsageApiStub(ApiStub):\n  \"\"\"Mock object to simulate api calls.\"\"\"\n\n  def __init__(self, mock_state=None, project_id=None, service=None):\n    self._mock_state = mock_state\n    self._project_id = project_id\n    self._service = service\n\n  def services(self):\n    return self\n\n  # pylint: disable=redefined-builtin\n  def list(self, parent, filter):\n    m = re.match(r'projects/([^/]+)', parent)\n    if not m:\n      raise ValueError(f\"can't parse parent: {parent}\")\n    project_id = m.group(1)\n    return RestCallStub(project_id, 'services')\n\n  def list_next(self, request, response):\n    return None\n\n  def get(self, name):\n    m = re.match(r'projects/([^/]+)/services/([^/]+)', name)\n    if not m:\n      raise ValueError(f\"can't parse name: {name}\")\n    return ServiceUsageApiStub(mock_state='get',\n                               project_id=m.group(1),\n                               service=m.group(2))\n\n  def execute(self, num_retries=0):\n    self._maybe_raise_api_exception()\n    json_dir = get_json_dir(self._project_id)\n    with open(json_dir / 'services.json', encoding='utf-8') as json_file:\n      services_list = json.load(json_file)\n      if self._mock_state == 'get':\n        for service in services_list.get('services', []):\n          if service.get('config', {}).get('name') \\\n              == f'{self._service}':\n            return service\n        return {'state': 'DISABLED'}\n\n\ndef _batch_request_default_callback(req_id, response, exception):\n  \"\"\"Make sure we catch when there is no callback defined.\"\"\"\n  raise RuntimeError(f'no callback defined for request {req_id}!')\n\n\nclass BatchRequestStub(ApiStub):\n  \"\"\"Mock object returned by new_batch_http_request().\"\"\"\n\n  def __init__(self, callback=_batch_request_default_callback):\n    self.queue = []\n    self.callback = callback\n\n  def add(self, request, callback=None, request_id=None):\n    self.queue.append({\n        'request': request,\n        'cb': callback or self.callback,\n        'request_id': request_id\n    })\n    return self\n\n  def execute(self):\n    self._maybe_raise_api_exception()\n\n    for op in self.queue:\n      try:\n        response = op['request'].execute()\n        op['cb'](op['request_id'], response, None)\n      except googleapiclient.errors.HttpError as err:\n        op['cb'](op['request_id'], None, err)\n\n\ndef get_api_stub(service_name: str,\n                 version: str,\n                 project_id: Optional[str] = None,\n                 regional_service_endpoint: Optional[str] = None):\n\n  # Avoid circular import dependencies by importing the required modules here.\n  # pylint: disable=import-outside-toplevel\n\n  if service_name == 'cloudresourcemanager':\n    from gcpdiag.queries import crm_stub\n    return crm_stub.CrmApiStub()\n  elif service_name == 'container':\n    from gcpdiag.queries import gke_stub\n    return gke_stub.ContainerApiStub()\n  elif service_name == 'cloudkms':\n    from gcpdiag.queries import kms_stub\n    return kms_stub.KmsApiStub()\n  elif service_name == 'compute':\n    from gcpdiag.queries import gce_stub\n    return gce_stub.ComputeEngineApiStub()\n  elif service_name == 'iam':\n    from gcpdiag.queries import iam_stub\n\n    # project_id isn't required in serviceaccounts.get requests\n    # and it cannot be easily extracted from a service account name\n    # thus passing api_project_id to determine the correct test-data\n    return iam_stub.IamApiStub(project_id)\n  elif service_name == 'logging':\n    from gcpdiag.queries import logs_stub\n    return logs_stub.LoggingApiStub()\n  elif service_name == 'monitoring':\n    from gcpdiag.queries import monitoring_stub\n    return monitoring_stub.MonitoringApiStub()\n  elif service_name == 'serviceusage':\n    return ServiceUsageApiStub()\n  elif service_name == 'cloudfunctions':\n    from gcpdiag.queries import gcf_stub\n    return gcf_stub.CloudFunctionsApiStub()\n  elif service_name == 'datafusion':\n    from gcpdiag.queries import datafusion_stub\n    return datafusion_stub.DataFusionApiStub()\n  elif service_name == 'dataproc':\n    from gcpdiag.queries import dataproc_stub\n    return dataproc_stub.DataprocApiStub()\n  elif service_name == 'apigee':\n    from gcpdiag.queries import apigee_stub\n    return apigee_stub.ApigeeApiStub()\n  elif service_name == 'composer':\n    from gcpdiag.queries import composer_stub\n    return composer_stub.ComposerApiStub()\n  elif service_name == 'sqladmin':\n    from gcpdiag.queries import cloudsql_stub\n    return cloudsql_stub.CloudSQLApiStub()\n  elif service_name == 'storage':\n    from gcpdiag.queries import gcs_stub\n\n    # project_id isn't required in buckets.get and buckets.getIamPolicy requests\n    # and it cannot be extracted from bucket name\n    # thus passing api_project_id to determine the correct test-data\n    return gcs_stub.BucketApiStub(project_id)\n  elif service_name == 'cloudbuild':\n    from gcpdiag.queries import gcb_stub\n    return gcb_stub.CloudBuildApiStub()\n  elif service_name == 'pubsub':\n    from gcpdiag.queries import pubsub_stub\n    return pubsub_stub.PubsubApiStub()\n  elif service_name == 'appengine':\n    from gcpdiag.queries import gae_stub\n    return gae_stub.AppEngineApiStub()\n  elif service_name == 'artifactregistry':\n    from gcpdiag.queries import artifact_registry_stub\n    return artifact_registry_stub.ArtifactRegistryApiStub()\n  elif service_name == 'run':\n    from gcpdiag.queries import cloudrun_stub\n    return cloudrun_stub.CloudRunApiStub()\n  elif service_name == 'notebooks':\n    from gcpdiag.queries import notebooks_stub\n    return notebooks_stub.NotebooksApiStub()\n  elif service_name == 'dataflow':\n    from gcpdiag.queries import dataflow_stub\n    return dataflow_stub.DataflowApiStub()\n  elif service_name == 'bigquery':\n    from gcpdiag.queries import bigquery_stub\n    return bigquery_stub.BigQueryApiStub()\n  elif 'aiplatform' in service_name:\n    from gcpdiag.queries import vertex_stub\n    return vertex_stub.VertexApiStub()\n  elif service_name == 'recommender':\n    from gcpdiag.queries import recommender_stub\n    return recommender_stub.RecommenderApiStub()\n  elif service_name == 'cloudbilling':\n    from gcpdiag.queries import billing_stub\n    return billing_stub.BillingApiStub()\n  elif service_name == 'osconfig':\n    from gcpdiag.queries import osconfig_stub\n    return osconfig_stub.OSConfigStub()\n  elif service_name == 'networkmanagement':\n    from gcpdiag.queries import networkmanagement_stub\n    return networkmanagement_stub.NetworkManagementApiStub()\n  elif service_name == 'cloudasset':\n    from gcpdiag.queries import cloudasset_stub\n    return cloudasset_stub.CloudAssetApiStub()\n  elif service_name == 'looker':\n    from gcpdiag.queries import looker_stub\n    return looker_stub.LookerApiStub()\n  else:\n    raise ValueError('unsupported service: %s' % service_name)\n"
  },
  {
    "path": "gcpdiag/queries/apis_test.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test code in apis.py.\"\"\"\n\nfrom unittest import TestCase, mock\n\nfrom gcpdiag import config\nfrom gcpdiag.queries import apis, apis_stub\n\nDUMMY_PROJECT_NAME = 'gcpdiag-gke1-aaaa'\n\n\nclass TestCredential:\n  \"\"\"Test apis set_credentials.\"\"\"\n\n  def test_set_credential_null(self):\n    # pylint:disable=protected-access\n    apis._credentials = 'something to clear'\n    apis.set_credentials(None)\n    assert apis._credentials is None\n    # pylint:enable=protected-access\n\n  @mock.patch('google.oauth2.credentials.Credentials.from_authorized_user_info')\n  def test_set_credential(self, mock_cred):\n    mock_cred.return_value = 'credential_data'\n    apis.set_credentials('\"some json data\"')\n    # pylint:disable=protected-access\n    assert apis._credentials == 'credential_data'\n    # pylint:enable=protected-access\n\n\n@mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)\nclass Test:\n  \"\"\"Test apis.\"\"\"\n\n  def test_is_enabled(self):\n    assert apis.is_enabled(DUMMY_PROJECT_NAME, 'container')\n    assert not apis.is_enabled(DUMMY_PROJECT_NAME, 'containerxyz')\n\n  def test_is_all_enabled(self):\n    for value in apis.is_all_enabled(DUMMY_PROJECT_NAME,\n                                     ['container', 'compute']).values():\n      assert value == 'ENABLED'\n    for val in apis.is_all_enabled(DUMMY_PROJECT_NAME,\n                                   ['containerxyz', 'computelol']).values():\n      assert val == 'DISABLED'\n\n\nclass TestTPC(TestCase):\n  \"\"\"testing for TPC universe domain settings.\"\"\"\n\n  @mock.patch('gcpdiag.queries.apis.get_credentials')\n  @mock.patch('googleapiclient.discovery.build')\n  def test_tpc_endpoint(self, mock_build, mock_cred):\n    mock_cred.return_value.universe_domain = 'test_domain.goog'\n    config.init({'universe_domain': 'test_domain.goog'}, 'x')\n    _ = apis.get_api('dataproc', 'v1', 'test_project')\n    endpoint = mock_build.call_args[1]['client_options'].api_endpoint\n    assert endpoint.endswith('test_domain.goog')\n\n  @mock.patch('gcpdiag.queries.apis.get_credentials')\n  @mock.patch('googleapiclient.discovery.build')\n  def test_not_tpc_endpoint(self, mock_build, mock_cred):\n    mock_cred.return_value.universe_domain = 'googleapis.com'\n    config.init({'universe_domain': ''}, 'x')\n    _ = apis.get_api('composer', 'v1', 'test_project')\n    endpoint = mock_build.call_args[1]['client_options'].api_endpoint\n    assert endpoint == 'https://composer.googleapis.com'\n\n  @mock.patch('gcpdiag.queries.apis._get_credentials_adc')\n  @mock.patch('googleapiclient.discovery.build')\n  def test_universe_mismatch(self, mock_build, mock_cred):\n    del mock_build\n    mock_cred.return_value.universe_domain = 'googleapis.com.not'\n    config.init({'universe_domain': 'a_mismatching_universe'}, 'x')\n    with self.assertRaises(ValueError):\n      _ = apis.get_api('composer', 'v1', 'test_project')\n"
  },
  {
    "path": "gcpdiag/queries/apis_utils.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GCP API-related utility functions.\"\"\"\n\nimport concurrent.futures\nimport logging\nimport random\nimport time\nfrom typing import Any, Callable, Iterator, List, Optional, Tuple\n\nimport apiclient\nimport googleapiclient.errors\nimport httplib2\n\nfrom gcpdiag import config, executor, models, utils\n\n\ndef execute_concurrently(\n    api: Any, requests: List[Any], context: models.Context\n) -> Iterator[Tuple[Any, Optional[Any], Optional[Exception]]]:\n  \"\"\"\n  Executes a list of API requests concurrently.\n  Uses ThreadPoolExecutor in API server context, batch_execute_all in CLI context.\n  Yields: (request, response, exception)\n  \"\"\"\n  if not requests:\n    return\n\n  if context.context_provider:\n    # API Server context: Use ThreadPoolExecutor\n    exec_ = executor.get_executor(context)\n    future_to_request = {\n        exec_.submit(execute_single_request, req): req for req in requests\n    }\n\n    for future in concurrent.futures.as_completed(future_to_request):\n      request = future_to_request[future]\n      try:\n        response, exception = future.result()\n        yield (request, response, exception)\n      except googleapiclient.errors.HttpError as e:\n        yield (request, None, e)\n  else:\n    # CLI context: Use original batch_execute_all\n    yield from batch_execute_all(api, requests)\n\n\ndef _execute_with_pagination_in_api_context(\n    api: Any,\n    requests: List[Any],\n    next_function: Callable,\n    context: models.Context,\n    response_keyword: str = 'items') -> Iterator[Any]:\n  \"\"\"\n  Executes and paginates a list of API 'list' requests concurrently in an API context.\n  \"\"\"\n  pending_requests = list(requests)\n  while pending_requests:\n    next_page_requests = []\n    results_iterator = execute_concurrently(api=api,\n                                            requests=pending_requests,\n                                            context=context)\n\n    for request, response, exception in results_iterator:\n      if exception:\n        if (isinstance(exception, apiclient.errors.HttpError) and\n            exception.resp.status == 404):\n          continue\n        raise utils.GcpApiError(exception) from exception\n\n      if not response:\n        continue\n\n      yield from response.get(response_keyword, [])\n\n      if 'nextPageToken' in response:\n        next_req = next_function(previous_request=request,\n                                 previous_response=response)\n        if next_req:\n          next_page_requests.append(next_req)\n\n    pending_requests = next_page_requests\n\n\ndef execute_concurrently_with_pagination(\n    api: Any,\n    requests: List[Any],\n    next_function: Callable,\n    context: models.Context,\n    log_text: Optional[str] = None,\n    response_keyword: str = 'items') -> Iterator[Any]:\n  \"\"\"\n  Executes and paginates a list of API 'list' requests concurrently.\n  \"\"\"\n  if not context.context_provider:\n    yield from batch_list_all(api, requests, next_function, log_text,\n                              response_keyword)\n    return\n\n  yield from _execute_with_pagination_in_api_context(api, requests,\n                                                     next_function, context,\n                                                     response_keyword)\n\n\ndef list_all(request,\n             next_function: Callable,\n             response_keyword='items') -> Iterator[Any]:\n  \"\"\"Execute GCP API `request` and subsequently call `next_function` until\n  there are no more results. Assumes that it is a list method and that\n  the results are under a `items` key.\"\"\"\n\n  while True:\n    try:\n      response = request.execute(num_retries=config.API_RETRIES)\n    except googleapiclient.errors.HttpError as err:\n      raise utils.GcpApiError(err) from err\n\n    # Empty lists are omitted in GCP API responses\n    if response_keyword in response:\n      yield from response[response_keyword]\n\n    request = next_function(previous_request=request,\n                            previous_response=response)\n    if request is None:\n      break\n\n\ndef multi_list_all(\n    requests: list,\n    next_function: Callable,\n) -> Iterator[Any]:\n  for req in requests:\n    yield from list_all(req, next_function)\n\n\ndef batch_list_all(api,\n                   requests: list,\n                   next_function: Callable,\n                   log_text: Optional[str] = None,\n                   response_keyword='items'):\n  \"\"\"Similar to list_all but using batch API except in TPC environment.\"\"\"\n\n  if 'googleapis.com' not in requests[0].uri:\n    #  the api client library does not handle batch api calls for TPC yet, so\n    #  the batch is processed and collected one at a time in that case\n    for req in requests:\n      yield from list_all(req, next_function)\n  else:\n    yield from _original_batch(api, requests, next_function, log_text,\n                               response_keyword)\n\n\ndef _original_batch(api,\n                    requests: list,\n                    next_function: Callable,\n                    log_text: Optional[str] = None,\n                    response_keyword='items'):\n  \"\"\"Similar to list_all but using batch API.\"\"\"\n  pending_requests = requests\n\n  page = 1\n  while pending_requests:\n    next_requests = pending_requests\n    pending_requests = []\n    if log_text:\n      if page == 1:\n        logging.info(log_text)\n      else:\n        logging.info('%s (page: %d)', log_text, page)\n    for (request, response, exception) in batch_execute_all(api, next_requests):\n      if exception:\n        logging.info('Exception requesting %s: %s', request.uri,\n                     exception.message)\n        raise exception\n\n      # add request for next page if required\n      req = next_function(request, response)\n      if req:\n        pending_requests.append(req)\n      # yield items\n      if response_keyword in response:\n        yield from response[response_keyword]\n    page += 1\n\n\n# inspired by:\n# https://github.com/googleapis/google-api-python-client/blob/063dc27da5371264d36d299edb0682e63874089b/googleapiclient/http.py#L79\n# but without the json \"reason\" handling. If we get a 403, we won't retry.\ndef should_retry(resp_status):\n  if resp_status >= 500:\n    return True\n  if resp_status == 429:  # too many requests\n    return True\n  return False\n\n\ndef get_nth_exponential_random_retry(n, random_pct, multiplier, random_fn=None):\n  random_fn = random_fn or random.random\n  return (1 - random_fn() * random_pct) * multiplier**n\n\n\ndef batch_execute_all(api, requests: list):\n  \"\"\"Execute all `requests` using the batch API and yield (request,response,exception)\n  tuples.\"\"\"\n  # results: (request, result, exception) tuples\n  results: List[Tuple[Any, Optional[Any], Optional[Exception]]] = []\n  requests_todo = requests\n  requests_in_flight: List = []\n  retry_count = 0\n\n  def fetch_all_cb(request_id, response, exception):\n    try:\n      request = requests_in_flight[int(request_id)]\n    except (IndexError, ValueError, TypeError):\n      logging.debug(\n          'BUG: Cannot find request %r in list of pending requests, dropping request.',\n          request_id)\n      return\n\n    if exception:\n      if isinstance(exception, googleapiclient.errors.HttpError) and \\\n        should_retry(exception.status_code) and \\\n        retry_count < config.API_RETRIES:\n        logging.debug('received HTTP error status code %d from API, retrying',\n                      exception.status_code)\n        requests_todo.append(request)\n      else:\n        results.append((request, None, utils.GcpApiError(exception)))\n      return\n\n    if not response:\n      return\n\n    results.append((request, response, None))\n\n  while True:\n    requests_in_flight = requests_todo\n    requests_todo = []\n    results = []\n\n    # Do the batch API request\n    try:\n      batch = api.new_batch_http_request()\n      for i, req in enumerate(requests_in_flight):\n        batch.add(req, callback=fetch_all_cb, request_id=str(i))\n      batch.execute()\n    except (googleapiclient.errors.HttpError, httplib2.HttpLib2Error) as err:\n      if isinstance(err, googleapiclient.errors.HttpError):\n        error_msg = f'received HTTP error status code {err.status_code} from Batch API, retrying'\n      else:\n        error_msg = f'received exception from Batch API: {err}, retrying'\n      if (not isinstance(err, googleapiclient.errors.HttpError) or \\\n          should_retry(err.status_code)) \\\n          and retry_count < config.API_RETRIES:\n        logging.debug(error_msg)\n        requests_todo = requests_in_flight\n        results = []\n      else:\n        raise utils.GcpApiError(err) from err\n\n    # Yield results\n    yield from results\n\n    # If no requests_todo, means we are done.\n    if not requests_todo:\n      break\n\n    # for example: retry delay: 20% is random, progression: 1, 1.4, 2.0, 2.7, ... 28.9 (10 retries)\n    sleep_time = get_nth_exponential_random_retry(\n        n=retry_count,\n        random_pct=config.API_RETRY_SLEEP_RANDOMNESS_PCT,\n        multiplier=config.API_RETRY_SLEEP_MULTIPLIER)\n    logging.debug('sleeping %.2f seconds before retry #%d', sleep_time,\n                  retry_count + 1)\n    time.sleep(sleep_time)\n    retry_count += 1\n\n\ndef execute_single_request(\n    request: Any) -> Tuple[Optional[Any], Optional[Exception]]:\n  \"\"\"Executes a single API request and returns the response and exception.\"\"\"\n  try:\n    response = request.execute(num_retries=config.API_RETRIES)\n    return response, None\n  except googleapiclient.errors.HttpError as e:\n    return None, e\n"
  },
  {
    "path": "gcpdiag/queries/apis_utils_test.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test code in apis_utils.py.\"\"\"\n\nimport concurrent.futures\nimport unittest\nfrom unittest import mock\n\nimport googleapiclient.errors\nimport httplib2\n\nfrom gcpdiag import config, models, utils\nfrom gcpdiag.queries import apis_stub, apis_utils\n\n\nclass RequestMock(apis_stub.ApiStub):\n  \"\"\"Mock a googleapiclient.request object.\"\"\"\n\n  def __init__(self,\n               n: int,\n               fail_count: int = 0,\n               fail_status: int = 429,\n               uri: str = 'googleapis.com'):\n    self.n = n\n    if fail_count:\n      self.fail_next(fail_count, fail_status)\n    self.uri = uri\n\n  def execute(self, num_retries: int = 0):\n    del num_retries\n    self._maybe_raise_api_exception()\n    if self.n == 1:\n      return {'items': ['a', 'b']}\n    elif self.n == 2:\n      return {'items': ['c', 'd']}\n    elif self.n == 3:\n      return {'items': ['e']}\n\n\ndef next_function_mock(previous_request, previous_response):\n  del previous_response\n  if previous_request.n == 1:\n    return RequestMock(2)\n  else:\n    return None\n\n\nmock_sleep_slept_time = []\n\n\ndef mock_sleep(sleep_time: float):\n  mock_sleep_slept_time.append(sleep_time)\n\n\n@mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)\n@mock.patch('time.sleep', new=mock_sleep)\nclass Test(unittest.TestCase):\n\n  def test_list_all(self):\n    results = list(apis_utils.list_all(RequestMock(1), next_function_mock))\n    assert (results == ['a', 'b', 'c', 'd'])\n\n  def test_multi_list_all(self):\n    results = list(\n        apis_utils.multi_list_all(requests=[RequestMock(1),\n                                            RequestMock(3)],\n                                  next_function=next_function_mock))\n    assert (results == ['a', 'b', 'c', 'd', 'e'])\n\n  def test_batch_list_all(self):\n    api = apis_stub.get_api_stub('compute', 'v1')\n    results = list(\n        apis_utils.batch_list_all(  #\n            api=api,\n            requests=[RequestMock(1), RequestMock(3)],\n            next_function=next_function_mock,\n            log_text='testing'))\n    # batch_list_all will first retrieve all requests (first page), then in a\n    # second step any further required pages.\n    assert (results == ['a', 'b', 'e', 'c', 'd'])\n\n  def test_batch_execute_all(self):\n    api = apis_stub.get_api_stub('compute', 'v1')\n    results = list(\n        apis_utils.batch_execute_all(\n            api, [RequestMock(1), RequestMock(3)]))\n    # requests\n    assert [x[0].n for x in results] == [1, 3]\n    # responses\n    assert [x[1] for x in results] == [{'items': ['a', 'b']}, {'items': ['e']}]\n\n  def test_batch_execute_all_unretriable_exception(self):\n    api = apis_stub.get_api_stub('compute', 'v1')\n    results = list(\n        apis_utils.batch_execute_all(\n            api,\n            [RequestMock(1, fail_count=1, fail_status=403),\n             RequestMock(3)]))\n    assert isinstance(results[0][2], utils.GcpApiError) and \\\n        results[0][2].status == 403\n\n  def test_batch_execute_all_too_many_failures(self):\n    api = apis_stub.get_api_stub('compute', 'v1')\n    results = list(\n        apis_utils.batch_execute_all(api, [\n            RequestMock(1, fail_count=config.API_RETRIES + 1, fail_status=429),\n            RequestMock(3)\n        ]))\n    assert isinstance(results[1][2], Exception)\n\n  def test_batch_execute_all_retriable_exception(self):\n    global mock_sleep_slept_time\n    mock_sleep_slept_time = []\n    api = apis_stub.get_api_stub('compute', 'v1')\n    results = list(\n        apis_utils.batch_execute_all(api, [\n            RequestMock(1, fail_count=config.API_RETRIES, fail_status=429),\n            RequestMock(3)\n        ]))\n    assert len(mock_sleep_slept_time) == config.API_RETRIES\n    # 20% is random, progression: 1, 1.4, 2.0, 2.7, ... 28.9 (10 retries)\n    assert 0.8 <= mock_sleep_slept_time[0] <= 1.0\n    assert 1.1 <= mock_sleep_slept_time[1] <= 1.4\n    # requests\n    assert [x[0].n for x in results] == [3, 1]\n    # responses\n    assert [x[1] for x in results] == [{'items': ['e']}, {'items': ['a', 'b']}]\n\n  def test_batch_execute_batchapi_tempfail(self):\n    \"\"\"Test the batch API producing a retryable failure.\"\"\"\n    global mock_sleep_slept_time\n    mock_sleep_slept_time = []\n    api = apis_stub.get_api_stub('compute', 'v1')\n    api.fail_next(1)\n    results = list(\n        apis_utils.batch_execute_all(\n            api, [RequestMock(1), RequestMock(3)]))\n    assert len(mock_sleep_slept_time) == 1\n    # requests\n    assert [x[0].n for x in results] == [1, 3]\n    # responses\n    assert [x[1] for x in results] == [{'items': ['a', 'b']}, {'items': ['e']}]\n\n  @mock.patch('gcpdiag.queries.apis_utils.execute_single_request')\n  @mock.patch('gcpdiag.executor.get_executor')\n  def test_execute_concurrently_api_server(self, mock_get_executor,\n                                           mock_execute_single_request):\n    api = apis_stub.get_api_stub('compute', 'v1')\n    context = models.Context(project_id='test-project')\n    context.context_provider = mock.Mock()\n    mock_executor = mock.Mock()\n    mock_get_executor.return_value = mock_executor\n    mock_execute_single_request.side_effect = [\n        ({\n            'items': ['a', 'b']\n        }, None),\n        ({\n            'items': ['e']\n        }, None),\n    ]\n\n    # Mock the submit method to return a Future object\n    def mock_submit(fn, *args, **kwargs):\n      future = concurrent.futures.Future()\n      try:\n        result = fn(*args, **kwargs)\n        future.set_result(result)\n      except googleapiclient.errors.HttpError as e:\n        future.set_exception(e)\n      return future\n\n    mock_executor.submit.side_effect = mock_submit\n\n    requests = [RequestMock(1), RequestMock(3)]\n    results = list(apis_utils.execute_concurrently(api, requests, context))\n\n    mock_get_executor.assert_called_once_with(context)\n    self.assertEqual(mock_executor.submit.call_count, 2)\n    self.assertEqual(len(results), 2)\n    # Check that first result element is request\n    self.assertIsInstance(results[0][0], RequestMock)\n    self.assertIsInstance(results[1][0], RequestMock)\n    self.assertEqual(sorted(r[0].n for r in results), [1, 3])\n\n  @mock.patch('gcpdiag.queries.apis_utils.batch_execute_all')\n  def test_execute_concurrently_cli(self, mock_batch_execute_all):\n    api = apis_stub.get_api_stub('compute', 'v1')\n    context = models.Context(project_id='test-project')\n    mock_batch_execute_all.return_value = iter([\n        (RequestMock(1), {\n            'items': ['a', 'b']\n        }, None),\n        (RequestMock(3), {\n            'items': ['e']\n        }, None),\n    ])\n\n    requests = [RequestMock(1), RequestMock(3)]\n    results = list(apis_utils.execute_concurrently(api, requests, context))\n\n    mock_batch_execute_all.assert_called_once_with(api, requests)\n    assert len(results) == 2\n\n\nclass ExecuteConcurrentlyWithPaginationTest(unittest.TestCase):\n  \"\"\"Tests for execute_concurrently_with_pagination.\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    self.mock_api = mock.Mock()\n    self.request_1 = mock.Mock()\n    self.request_1.uri = 'request/1'\n    self.request_2 = mock.Mock()\n    self.request_2.uri = 'request/2'\n\n  @mock.patch('gcpdiag.queries.apis_utils.batch_list_all')\n  def test_cli_context_uses_batch_list_all(self, mock_batch_list_all):\n    \"\"\"Verify that batch_list_all is called in CLI context.\"\"\"\n    context = models.Context(project_id='test-project')\n    requests = [self.request_1]\n    mock_batch_list_all.return_value = iter(['item1', 'item2'])\n\n    results = list(\n        apis_utils.execute_concurrently_with_pagination(\n            self.mock_api,\n            requests,\n            next_function_mock,\n            context,\n            log_text='testing',\n            response_keyword='items'))\n\n    self.assertEqual(results, ['item1', 'item2'])\n    mock_batch_list_all.assert_called_once_with(self.mock_api, requests,\n                                                next_function_mock, 'testing',\n                                                'items')\n\n  @mock.patch('gcpdiag.queries.apis_utils.execute_concurrently')\n  def test_api_context_single_page(self, mock_execute_concurrently):\n    \"\"\"Test API context with a single page of results.\"\"\"\n    context = models.Context(project_id='test-project', context_provider='api')\n    requests = [self.request_1]\n    # execute_concurrently yields: (request, response, exception)\n    mock_execute_concurrently.return_value = iter([\n        (self.request_1, {\n            'items': ['item1']\n        }, None),\n    ])\n\n    results = list(\n        apis_utils.execute_concurrently_with_pagination(\n            self.mock_api,\n            requests,\n            mock.Mock(),\n            context,\n            log_text='testing',\n            response_keyword='items'))\n\n    self.assertEqual(results, ['item1'])\n    mock_execute_concurrently.assert_called_once()\n\n  @mock.patch('gcpdiag.queries.apis_utils.execute_concurrently')\n  def test_api_context_multi_page(self, mock_execute_concurrently):\n    \"\"\"Test API context with multiple pages of results.\"\"\"\n    context = models.Context(project_id='test-project', context_provider='api')\n    req1, resp1 = mock.Mock(uri='uri1'), {\n        'items': ['item1'],\n        'nextPageToken': 'page2'\n    }\n    req2, resp2 = mock.Mock(uri='uri2'), {'items': ['item2']}\n\n    def side_effect_func(*args, **kwargs):  # pylint: disable=unused-argument\n      if req1 in kwargs['requests']:\n        return iter([(req1, resp1, None)])\n      elif req2 in kwargs['requests']:\n        return iter([(req2, resp2, None)])\n      return iter([])\n\n    mock_execute_concurrently.side_effect = side_effect_func\n\n    def next_func(previous_request, previous_response):  # pylint: disable=unused-argument\n      if previous_response.get('nextPageToken') == 'page2':\n        return req2\n      return None\n\n    results = list(\n        apis_utils.execute_concurrently_with_pagination(\n            self.mock_api, [req1],\n            next_func,\n            context,\n            log_text='testing',\n            response_keyword='items'))\n\n    self.assertEqual(results, ['item1', 'item2'])\n    self.assertEqual(mock_execute_concurrently.call_count, 2)\n\n  @mock.patch('gcpdiag.queries.apis_utils.execute_concurrently')\n  def test_api_context_skips_404(self, mock_execute_concurrently):\n    \"\"\"Test that 404 errors are skipped in API context.\"\"\"\n    context = models.Context(project_id='test-project', context_provider='api')\n    requests = [self.request_1]\n    http_error_404 = googleapiclient.errors.HttpError(resp=httplib2.Response(\n        {'status': 404}),\n                                                      content=b'Not Found')\n    mock_execute_concurrently.return_value = iter([\n        (self.request_1, None, http_error_404),\n    ])\n\n    results = list(\n        apis_utils.execute_concurrently_with_pagination(\n            self.mock_api,\n            requests,\n            mock.Mock(),\n            context,\n            log_text='testing',\n            response_keyword='items'))\n\n    self.assertEqual(results, [])\n    mock_execute_concurrently.assert_called_once()\n\n  @mock.patch('gcpdiag.queries.apis_utils.execute_concurrently')\n  def test_api_context_raises_other_error(self, mock_execute_concurrently):\n    \"\"\"Test that non-404 errors raise GcpApiError in API context.\"\"\"\n    context = models.Context(project_id='test-project', context_provider='api')\n    requests = [self.request_1]\n    http_error_500 = googleapiclient.errors.HttpError(resp=httplib2.Response(\n        {'status': 500}),\n                                                      content=b'Server Error')\n    mock_execute_concurrently.return_value = iter([\n        (self.request_1, None, http_error_500),\n    ])\n\n    with self.assertRaises(utils.GcpApiError):\n      list(\n          apis_utils.execute_concurrently_with_pagination(\n              self.mock_api,\n              requests,\n              mock.Mock(),\n              context,\n              log_text='testing',\n              response_keyword='items'))\n"
  },
  {
    "path": "gcpdiag/queries/artifact_registry.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Queries related to GCP Artifact Registry\n\n\"\"\"\nimport dataclasses\n\nfrom gcpdiag import caching, config, models\nfrom gcpdiag.queries import apis, iam\n\n\nclass ArtifactRegistryIAMPolicy(iam.BaseIAMPolicy):\n\n  def _is_resource_permission(self, permission):\n    return True\n\n\n@dataclasses.dataclass\nclass ProjectSettings:\n  legacy_redirect: bool\n\n\n@caching.cached_api_call(in_memory=True)\ndef get_registry_iam_policy(context: models.Context, location: str,\n                            registry_name: str) -> ArtifactRegistryIAMPolicy:\n  project_id = context.project_id\n  ar_api = apis.get_api('artifactregistry', 'v1', project_id)\n  registry_id = 'projects/{}/locations/{}/repositories/{}'.format(\n      project_id, location, registry_name)\n  request = ar_api.projects().locations().repositories().getIamPolicy(\n      resource=registry_id)\n  return iam.fetch_iam_policy(request, ArtifactRegistryIAMPolicy, project_id,\n                              registry_id, context)\n\n\n@caching.cached_api_call(in_memory=True)\ndef get_project_settings(project_id: str) -> ProjectSettings:\n  ar_api = apis.get_api('artifactregistry', 'v1', project_id)\n  response = ar_api.projects().getProjectSettings(\n      name=f'projects/{project_id}/projectSettings').execute(\n          num_retries=config.API_RETRIES)\n  return ProjectSettings(legacy_redirect=response.get('legacyRedirectionState')\n                         == 'REDIRECTION_FROM_GCR_IO_ENABLED')\n"
  },
  {
    "path": "gcpdiag/queries/artifact_registry_stub.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Stub API calls used in gcf.py for testing.\n\nInstead of doing real API calls, we return test JSON data.\n\"\"\"\n\nimport re\n\nfrom gcpdiag.queries import apis_stub\n\n# pylint: disable=unused-argument\n# pylint: disable=invalid-name\nINCORRECT_RESOURCE_ERROR = ('incorrect resource format. Use '\n                            'projects/*/locations/*/repositories/')\n\n\nclass ArtifactRegistryApiStub:\n  \"\"\"Mock object to simulate function api calls.\"\"\"\n\n  def projects(self):\n    return self\n\n  def locations(self):\n    return self\n\n  def repositories(self):\n    return self\n\n  def getIamPolicy(self, resource: str) -> apis_stub.RestCallStub:\n    m = re.match(r'projects/([^/]+)/locations/([^/]+)/repositories/([^/]+)',\n                 resource)\n    if m:\n      project_id = m.group(1)\n      return apis_stub.RestCallStub(project_id, 'artifact-registry-policy')\n    else:\n      raise ValueError(INCORRECT_RESOURCE_ERROR)\n\n  def getProjectSettings(self, name: str) -> apis_stub.RestCallStub:\n    m = re.match(r'projects/([^/]+)/projectSettings', name)\n    if m:\n      project_id = m.group(1)\n      return apis_stub.RestCallStub(project_id,\n                                    'artifact-registry-project-settings')\n    else:\n      raise ValueError(INCORRECT_RESOURCE_ERROR)\n"
  },
  {
    "path": "gcpdiag/queries/artifact_registry_test.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Test code in artifact_registry.py.\"\"\"\n\nfrom unittest import mock\n\nfrom gcpdiag import models\nfrom gcpdiag.queries import apis_stub, artifact_registry\n\nDUMMY_PROJECT_NAME = 'gcpdiag-gcb1-aaaa'\nDUMMY_REGISTRY_ID = 'gcb1-repository'\nDUMMY_REGISTRY_LOCATION = 'us-central1'\nDUMMY_POLICY_MEMBER = 'serviceAccount:gcb-custom2@gcpdiag-gcb1-aaaa.iam.gserviceaccount.com'\n\n\n@mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)\nclass TestArtifactRegistry:\n  \"\"\"Test Artifact Registry.\"\"\"\n\n  def test_get_bucket_iam_policy(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    policy = artifact_registry.get_registry_iam_policy(context,\n                                                       DUMMY_REGISTRY_LOCATION,\n                                                       DUMMY_REGISTRY_ID)\n    assert set(policy.get_members()) == {DUMMY_POLICY_MEMBER}\n\n  def test_get_project_settings(self):\n    settings = artifact_registry.get_project_settings(DUMMY_PROJECT_NAME)\n    assert settings == artifact_registry.ProjectSettings(legacy_redirect=True)\n"
  },
  {
    "path": "gcpdiag/queries/bigquery.py",
    "content": "\"\"\"Queries related to BigQuery.\"\"\"\n\nimport logging\nimport time\nimport uuid\nfrom typing import Any, Dict, List, Optional, Set, Union\n\nfrom google.auth import exceptions\nfrom googleapiclient import errors\n\nfrom gcpdiag import caching, config, models, utils\nfrom gcpdiag.queries import apis, crm, iam\nfrom gcpdiag.runbook import op\n\nBIGQUERY_REGIONS = [\n    'me-central1',\n    'me-central2',\n    'me-west1',\n    'africa-south1',\n    'us',\n    'eu',\n    'us-east1',\n    'us-east4',\n    'us-east5',\n    'us-west1',\n    'us-west2',\n    'us-west3',\n    'us-west4',\n    'us-central1',\n    'us-south1',\n    'northamerica-northeast1',\n    'northamerica-northeast2',\n    'southamerica-east1',\n    'southamerica-west1',\n    'asia-east1',\n    'asia-east2',\n    'asia-south1',\n    'asia-south2',\n    'asia-northeast1',\n    'asia-northeast2',\n    'asia-northeast3',\n    'asia-southeast1',\n    'asia-southeast2',\n    'australia-southeast1',\n    'australia-southeast2',\n    'europe-north1',\n    'europe-southwest1',\n    'europe-central2',\n    'europe-west1',\n    'europe-west10',\n    'europe-west2',\n    'europe-west3',\n    'europe-west4',\n    'europe-west6',\n    'europe-west8',\n    'europe-west9',\n    'europe-west12',\n]\n# STRING CONSTANTS\nC_NOT_AVAILABLE = 'N/A'\n\nPolicyObject = Union[iam.ProjectPolicy, iam.OrganizationPolicy]\n\n\ndef get_project_policy(context: models.Context):\n  \"\"\"Fetches the IAM policy object for a project.\"\"\"\n  root_logger = logging.getLogger()\n  original_level = root_logger.level\n\n  try:\n    root_logger.setLevel(logging.ERROR)\n    policy = iam.get_project_policy(context, raise_error_if_fails=False)\n    return policy\n  except utils.GcpApiError:\n    return None\n  finally:\n    root_logger.setLevel(original_level)\n\n\ndef get_organization_policy(context: models.Context, organization_id: str):\n  \"\"\"Fetches the IAM policy object for an organization.\"\"\"\n  root_logger = logging.getLogger()\n  original_level = root_logger.level\n\n  try:\n    root_logger.setLevel(logging.ERROR)\n    policy = iam.get_organization_policy(context,\n                                         organization_id,\n                                         raise_error_if_fails=False)\n    return policy\n  except utils.GcpApiError as err:\n    if 'doesn\\'t have access to' in err.message.lower(\n    ) or 'denied on resource' in err.message.lower():\n      op.info(\n          'User does not have access to the organization policy. Investigation'\n          ' completeness and accuracy might depend on the presence of'\n          ' organization level permissions.')\n    return None\n  finally:\n    root_logger.setLevel(original_level)\n\n\ndef check_permissions_for_principal(\n    policy: PolicyObject, principal: str,\n    permissions_to_check: Set[str]) -> Dict[str, bool]:\n  \"\"\"Uses a policy object to check a set of permissions for a principal.\n\n  Returns a dictionary mapping each permission to a boolean indicating its\n  presence.\n  \"\"\"\n  return {\n      permission: policy.has_permission(principal, permission)\n      for permission in permissions_to_check\n  }\n\n\ndef get_missing_permissions(required_permissions: Set[str],\n                            actual_permissions: Dict[str, bool]) -> Set[str]:\n  \"\"\"Compares a set of required permissions against a dictionary of actual\n\n  permissions and returns the set of missing ones.\n  \"\"\"\n  return {\n      perm for perm in required_permissions if not actual_permissions.get(perm)\n  }\n\n\nclass BigQueryTable:\n  \"\"\"Represents a BigQuery Table object.\"\"\"\n\n  project_id: str\n  dataset_id: str\n  table_id: str\n\n  def __init__(self, project_id: str, dataset_id: str, table_id: str):\n    self.project_id = project_id\n    self.dataset_id = dataset_id\n    self.table_id = table_id\n\n  @property\n  def table_identifier(self) -> str:\n    return f'{self.project_id}:{self.dataset_id}.{self.table_id}'\n\n\nclass BigQueryRoutine:\n  \"\"\"Represents a BigQuery Routine object.\"\"\"\n\n  project_id: str\n  dataset_id: str\n  routine_id: str\n\n  def __init__(self, project_id: str, dataset_id: str, routine_id: str):\n    self.project_id = project_id\n    self.dataset_id = dataset_id\n    self.routine_id = routine_id\n\n  @property\n  def routine_identifier(self) -> str:\n    return f'{self.project_id}:{self.dataset_id}.{self.routine_id}'\n\n\nclass BigQueryJob(models.Resource):\n  \"\"\"Represents a BigQuery Job object.\"\"\"\n\n  _job_api_resource_data: dict[str, Any]\n  _information_schema_job_metadata: dict[str, Any]\n  project_id: str\n\n  def __init__(\n      self,\n      project_id: str,\n      job_api_resource_data: dict[str, Any],\n      information_schema_job_metadata: dict[str, str],\n  ):\n    super().__init__(project_id)\n    self._job_api_resource_data = job_api_resource_data\n    self._information_schema_job_metadata = (information_schema_job_metadata or\n                                             {})\n\n  @property\n  def full_path(self) -> str:\n    # returns 'https://content-bigquery.googleapis.com/bigquery/v2/\n    # projects/<PROJECT_ID>/jobs/<JOBID>?location=<REGION>'\n    return self._job_api_resource_data.get('selfLink', '')\n\n  @property\n  def id(self) -> str:\n    # returns <PROJECT>:<REGION>.<JobID>\n    return self._job_api_resource_data.get('id', '')\n\n  @property\n  def short_path(self) -> str:\n    # returns <PROJECT>:<REGION>.<JobID>\n    return self.id\n\n  @property\n  def user_email(self) -> str:\n    return self._job_api_resource_data.get('user_email', '')\n\n  @property\n  def _job_configuration(self) -> dict[str, Any]:\n    return self._job_api_resource_data.get('configuration', {})\n\n  @property\n  def _query(self) -> dict[str, Any]:\n    return self._job_configuration.get('query', {})\n\n  @property\n  def _stats(self) -> dict[str, Any]:\n    \"\"\"Safely access the 'statistics' dictionary.\"\"\"\n    return self._job_api_resource_data.get('statistics', {})\n\n  @property\n  def _query_stats(self) -> dict[str, Any]:\n    \"\"\"Safely access the 'statistics.query' dictionary.\"\"\"\n    return self._stats.get('query', {})\n\n  @property\n  def _query_info(self) -> dict[str, Any]:\n    return self._query_stats.get('queryInfo', {})\n\n  @property\n  def _status(self) -> dict[str, Any]:\n    return self._job_api_resource_data.get('status', {})\n\n  @property\n  def job_type(self) -> str:\n    return self._job_configuration.get('jobType', '')\n\n  @property\n  def query_sql(self) -> str:\n    return self._query.get('query', '')\n\n  @property\n  def use_legacy_sql(self) -> bool:\n    return self._query.get('useLegacySql', False)\n\n  @property\n  def priority(self) -> str:\n    return self._query.get('priority', '')\n\n  @property\n  def edition(self) -> str:\n    edition_value = self._query.get('edition')\n    return str(edition_value) if edition_value else ''\n\n  @property\n  def creation_time(self) -> Optional[int]:\n    time_str = self._stats.get('creationTime')\n    return (int(time_str)\n            if isinstance(time_str, str) and time_str.isdigit() else None)\n\n  @property\n  def start_time(self) -> Optional[int]:\n    time_str = self._stats.get('startTime')\n    return (int(time_str)\n            if isinstance(time_str, str) and time_str.isdigit() else None)\n\n  @property\n  def end_time(self) -> Optional[int]:\n    time_str = self._stats.get('endTime')\n    return (int(time_str)\n            if isinstance(time_str, str) and time_str.isdigit() else None)\n\n  @property\n  def total_bytes_processed(self) -> int:\n    bytes_str = self._stats.get('totalBytesProcessed', '0')\n    return (int(bytes_str)\n            if isinstance(bytes_str, str) and bytes_str.isdigit() else 0)\n\n  @property\n  def total_bytes_billed(self) -> int:\n    bytes_str = self._query_stats.get('totalBytesBilled', '0')\n    return (int(bytes_str)\n            if isinstance(bytes_str, str) and bytes_str.isdigit() else 0)\n\n  @property\n  def total_slot_ms(self) -> int:\n    ms_str = self._stats.get('totalSlotMs', '0')\n    return int(ms_str) if isinstance(ms_str, str) and ms_str.isdigit() else 0\n\n  @property\n  def cache_hit(self) -> bool:\n    return self._query_stats.get('cacheHit') is True\n\n  @property\n  def quota_deferments(self) -> list[str]:\n    deferments_dict = self._stats.get('quotaDeferments', {})\n    if isinstance(deferments_dict, dict):\n      deferment_list = deferments_dict.get('', [])\n      if isinstance(deferment_list, list) and all(\n          isinstance(s, str) for s in deferment_list):\n        return deferment_list\n    return []\n\n  @property\n  def query_plan(self) -> list[dict[str, Any]]:\n    plan = self._query_stats.get('queryPlan', [])\n    return plan if isinstance(plan, list) else []\n\n  @property\n  def total_partitions_processed(self) -> int:\n    partitions_str = self._query_stats.get('totalPartitionsProcessed', '0')\n    return (int(partitions_str) if isinstance(partitions_str, str) and\n            partitions_str.isdigit() else 0)\n\n  @property\n  def referenced_tables(self) -> list[BigQueryTable]:\n    tables_list = self._query_stats.get('referencedTables', [])\n    referenced_tables = []\n    if isinstance(tables_list, list):\n      for item in tables_list:\n        if isinstance(item, dict):\n          project_id = item.get('projectId')\n          dataset_id = item.get('datasetId')\n          table_id = item.get('tableId')\n          if (isinstance(project_id, str) and project_id and\n              isinstance(dataset_id, str) and dataset_id and\n              isinstance(table_id, str) and table_id):\n            referenced_tables.append(\n                BigQueryTable(project_id, dataset_id, table_id))\n    return referenced_tables\n\n  @property\n  def referenced_routines(self) -> list[BigQueryRoutine]:\n    routines_list = self._query_stats.get('referencedRoutines', [])\n    referenced_routines = []\n    if isinstance(routines_list, list):\n      for item in routines_list:\n        if isinstance(item, dict):\n          project_id = item.get('projectId')\n          dataset_id = item.get('datasetId')\n          routine_id = item.get('routineId')\n          if (isinstance(project_id, str) and project_id and\n              isinstance(dataset_id, str) and dataset_id and\n              isinstance(routine_id, str) and routine_id):\n            referenced_routines.append(\n                BigQueryRoutine(project_id, dataset_id, routine_id))\n    return referenced_routines\n\n  @property\n  def num_affected_dml_rows(self) -> int:\n    rows_str = self._query_stats.get('numDmlAffectedRows', '0')\n    return (int(rows_str)\n            if isinstance(rows_str, str) and rows_str.isdigit() else 0)\n\n  @property\n  def dml_stats(self) -> dict[str, int]:\n    stats = self._query_stats.get('dmlStats')\n    if not isinstance(stats, dict):\n      return {}\n    inserted_str = stats.get('insertedRowCount', '0')\n    deleted_str = stats.get('deletedRowCount', '0')\n    updated_str = stats.get('updatedRowCount', '0')\n    return {\n        'insertedRowCount':\n            (int(inserted_str) if isinstance(inserted_str, str) and\n             inserted_str.isdigit() else 0),\n        'deletedRowCount': (int(deleted_str) if isinstance(deleted_str, str) and\n                            deleted_str.isdigit() else 0),\n        'updatedRowCount': (int(updated_str) if isinstance(updated_str, str) and\n                            updated_str.isdigit() else 0),\n    }\n\n  @property\n  def statement_type(self) -> str:\n    stype = self._query_stats.get('statementType', '')\n    return stype if isinstance(stype, str) else ''\n\n  @property\n  def bi_engine_statistics(self) -> dict[str, Any]:\n    stats = self._query_stats.get('biEngineStatistics')\n    if not isinstance(stats, dict):\n      return {}\n    reasons_list = stats.get('accelerationMode', {}).get('biEngineReasons', [])\n    bi_engine_reasons = []\n    if isinstance(reasons_list, list):\n      for item in reasons_list:\n        if isinstance(item, dict):\n          bi_engine_reasons.append({\n              'code': str(item.get('code', '')),\n              'message': item.get('message', ''),\n          })\n    return {\n        'biEngineMode': str(stats.get('biEngineMode', '')),\n        'accelerationMode': str(stats.get('accelerationMode', '')),\n        'biEngineReasons': bi_engine_reasons,\n    }\n\n  @property\n  def vector_search_statistics(self) -> dict[str, Any]:\n    stats = self._query_stats.get('vectorSearchStatistics')\n    if not isinstance(stats, dict):\n      return {}\n    reasons_list = stats.get('indexUnusedReasons', [])\n    index_unused_reasons = []\n    if isinstance(reasons_list, list):\n      for item in reasons_list:\n        if isinstance(item, dict):\n          base_table_data = item.get('baseTable')\n          base_table_obj = None\n          if isinstance(base_table_data, dict):\n            project_id = base_table_data.get('projectId')\n            dataset_id = base_table_data.get('datasetId')\n            table_id = base_table_data.get('tableId')\n            if (isinstance(project_id, str) and project_id and\n                isinstance(dataset_id, str) and dataset_id and\n                isinstance(table_id, str) and table_id):\n              base_table_obj = BigQueryTable(project_id, dataset_id, table_id)\n          index_unused_reasons.append({\n              'code': str(item.get('code', '')),\n              'message': item.get('message', ''),\n              'indexName': item.get('indexName', ''),\n              'baseTable': base_table_obj,\n          })\n    return {\n        'indexUsageMode': str(stats.get('indexUsageMode', '')),\n        'indexUnusedReasons': index_unused_reasons,\n    }\n\n  @property\n  def performance_insights(self) -> dict[str, Any]:\n    insights = self._query_stats.get('performanceInsights')\n    if not isinstance(insights, dict):\n      return {}\n    standalone_list = insights.get('stagePerformanceStandaloneInsights', [])\n    stage_performance_standalone_insights = []\n    if isinstance(standalone_list, list):\n      for item in standalone_list:\n        if isinstance(item, dict):\n          stage_performance_standalone_insights.append({\n              'stageId': item.get('stageId', ''),\n          })\n    change_list = insights.get('stagePerformanceChangeInsights', [])\n    stage_performance_change_insights = []\n    if isinstance(change_list, list):\n      for item in change_list:\n        if isinstance(item, dict):\n          stage_performance_change_insights.append({\n              'stageId': item.get('stageId', ''),\n          })\n    avg_ms_str = insights.get('avgPreviousExecutionMs', '0')\n    return {\n        'avgPreviousExecutionMs':\n            (int(avg_ms_str)\n             if isinstance(avg_ms_str, str) and avg_ms_str.isdigit() else 0),\n        'stagePerformanceStandaloneInsights':\n            (stage_performance_standalone_insights),\n        'stagePerformanceChangeInsights': stage_performance_change_insights,\n    }\n\n  @property\n  def optimization_details(self) -> Any:\n    return self._query_info.get('optimizationDetails')\n\n  @property\n  def export_data_statistics(self) -> dict[str, int]:\n    stats = self._query_stats.get('exportDataStatistics')\n    if not isinstance(stats, dict):\n      return {}\n    file_count_str = stats.get('fileCount', '0')\n    row_count_str = stats.get('rowCount', '0')\n    return {\n        'fileCount': (int(file_count_str) if isinstance(file_count_str, str) and\n                      file_count_str.isdigit() else 0),\n        'rowCount': (int(row_count_str) if isinstance(row_count_str, str) and\n                     row_count_str.isdigit() else 0),\n    }\n\n  @property\n  def load_query_statistics(self) -> dict[str, int]:\n    stats = self._query_stats.get('loadQueryStatistics')\n    if not isinstance(stats, dict):\n      return {}\n    input_files_str = stats.get('inputFiles', '0')\n    input_bytes_str = stats.get('inputFileBytes', '0')\n    output_rows_str = stats.get('outputRows', '0')\n    output_bytes_str = stats.get('outputBytes', '0')\n    bad_records_str = stats.get('badRecords', '0')\n    return {\n        'inputFiles':\n            (int(input_files_str) if isinstance(input_files_str, str) and\n             input_files_str.isdigit() else 0),\n        'inputFileBytes':\n            (int(input_bytes_str) if isinstance(input_bytes_str, str) and\n             input_bytes_str.isdigit() else 0),\n        'outputRows':\n            (int(output_rows_str) if isinstance(output_rows_str, str) and\n             output_rows_str.isdigit() else 0),\n        'outputBytes':\n            (int(output_bytes_str) if isinstance(output_bytes_str, str) and\n             output_bytes_str.isdigit() else 0),\n        'badRecords':\n            (int(bad_records_str) if isinstance(bad_records_str, str) and\n             bad_records_str.isdigit() else 0),\n    }\n\n  @property\n  def spark_statistics(self) -> dict[str, Any]:\n    stats = self._query_stats.get('sparkStatistics')\n    if not isinstance(stats, dict):\n      return {}\n    logging_info_dict = stats.get('loggingInfo', {})\n    logging_info = ({\n        'resourceType': logging_info_dict.get('resourceType', ''),\n        'projectId': logging_info_dict.get('projectId', ''),\n    } if isinstance(logging_info_dict, dict) else {})\n    return {\n        'endpoints': stats.get('endpoints', {}),\n        'sparkJobId': stats.get('sparkJobId', ''),\n        'sparkJobLocation': stats.get('sparkJobLocation', ''),\n        'kmsKeyName': stats.get('kmsKeyName', ''),\n        'gcsStagingBucket': stats.get('gcsStagingBucket', ''),\n        'loggingInfo': logging_info,\n    }\n\n  @property\n  def transferred_bytes(self) -> int:\n    bytes_str = self._query_stats.get('transferredBytes', '0')\n    return (int(bytes_str)\n            if isinstance(bytes_str, str) and bytes_str.isdigit() else 0)\n\n  @property\n  def reservation_id(self) -> str:\n    res_id = self._stats.get('reservation_id', '')\n    return res_id if isinstance(res_id, str) else ''\n\n  @property\n  def reservation_admin_project_id(self) -> Optional[str]:\n    if not self.reservation_id:\n      return None\n    try:\n      parts = self.reservation_id.split('/')\n      if parts[0] == 'projects' and len(parts) >= 2:\n        return parts[1]\n      else:\n        logging.warning(\n            'Could not parse project ID from reservation_id: %s',\n            self.reservation_id,\n        )\n        return None\n    except (IndexError, AttributeError):\n      logging.warning(\n          'Could not parse project ID from reservation_id: %s',\n          self.reservation_id,\n      )\n      return None\n\n  @property\n  def num_child_jobs(self) -> int:\n    num_str = self._stats.get('numChildJobs', '0')\n    return int(num_str) if isinstance(num_str, str) and num_str.isdigit() else 0\n\n  @property\n  def parent_job_id(self) -> str:\n    parent_id = self._stats.get('parentJobId', '')\n    return parent_id if isinstance(parent_id, str) else ''\n\n  @property\n  def row_level_security_applied(self) -> bool:\n    rls_stats = self._stats.get('RowLevelSecurityStatistics', {})\n    return (rls_stats.get('rowLevelSecurityApplied') is True if isinstance(\n        rls_stats, dict) else False)\n\n  @property\n  def data_masking_applied(self) -> bool:\n    masking_stats = self._stats.get('dataMaskingStatistics', {})\n    return (masking_stats.get('dataMaskingApplied') is True if isinstance(\n        masking_stats, dict) else False)\n\n  @property\n  def session_id(self) -> str:\n    session_info = self._stats.get('sessionInfo', {})\n    session_id_val = (session_info.get('sessionId', '') if isinstance(\n        session_info, dict) else '')\n    return session_id_val if isinstance(session_id_val, str) else ''\n\n  @property\n  def final_execution_duration_ms(self) -> int:\n    duration_str = self._stats.get('finalExecutionDurationMs', '0')\n    return (int(duration_str)\n            if isinstance(duration_str, str) and duration_str.isdigit() else 0)\n\n  @property\n  def job_state(self) -> str:\n    state = self._status.get('state', '')\n    return state if isinstance(state, str) else ''\n\n  @property\n  def job_error_result(self) -> dict[str, Optional[str]]:\n    error_result = self._status.get('errorResult')\n    if not isinstance(error_result, dict):\n      return {}\n    return {\n        'reason': error_result.get('reason'),\n        'location': error_result.get('location'),\n        'debugInfo': error_result.get('debugInfo'),\n        'message': error_result.get('message'),\n    }\n\n  @property\n  def job_errors(self) -> list[dict[str, Optional[str]]]:\n    errors_list = self._status.get('errors', [])\n    errors_iterable = []\n    if isinstance(errors_list, list):\n      for item in errors_list:\n        if isinstance(item, dict):\n          errors_iterable.append({\n              'reason': item.get('reason'),\n              'location': item.get('location'),\n              'debugInfo': item.get('debugInfo'),\n              'message': item.get('message'),\n          })\n    return errors_iterable\n\n  @property\n  def materialized_view_statistics(self) -> dict[str, Any]:\n    stats_list = self._query_stats.get('materializedViewStatistics')\n    materialized_view = []\n    if isinstance(stats_list, list):\n      for item in stats_list:\n        if isinstance(item, dict):\n          table_ref_data = item.get('tableReference')\n          table_ref_obj = None\n          if isinstance(table_ref_data, dict):\n            project_id = table_ref_data.get('projectId')\n            dataset_id = table_ref_data.get('datasetId')\n            table_id = table_ref_data.get('tableId')\n            if (isinstance(project_id, str) and project_id and\n                isinstance(dataset_id, str) and dataset_id and\n                isinstance(table_id, str) and table_id):\n              table_ref_obj = BigQueryTable(project_id, dataset_id, table_id)\n          chosen = item.get('chosen') is True\n          saved_str = item.get('estimatedBytesSaved', '0')\n          estimated_bytes_saved = (int(saved_str)\n                                   if isinstance(saved_str, str) and\n                                   saved_str.isdigit() else 0)\n          rejected_reason = str(item.get('rejectedReason', ''))\n          materialized_view.append({\n              'chosen': chosen,\n              'estimatedBytesSaved': estimated_bytes_saved,\n              'rejectedReason': rejected_reason,\n              'tableReference': table_ref_obj,\n          })\n    return {'materialView': materialized_view}\n\n  @property\n  def metadata_cache_statistics(self) -> dict[str, Any]:\n    stats_list = self._query_stats.get('metadataCacheStatistics')\n    metadata_cache = []\n    if isinstance(stats_list, list):\n      for item in stats_list:\n        if isinstance(item, dict):\n          table_ref_data = item.get('tableReference')\n          table_ref_obj = None\n          if isinstance(table_ref_data, dict):\n            project_id = table_ref_data.get('projectId')\n            dataset_id = table_ref_data.get('datasetId')\n            table_id = table_ref_data.get('tableId')\n            if (isinstance(project_id, str) and project_id and\n                isinstance(dataset_id, str) and dataset_id and\n                isinstance(table_id, str) and table_id):\n              table_ref_obj = BigQueryTable(project_id, dataset_id, table_id)\n          metadata_cache.append({\n              'explanation': item.get('explanation', ''),\n              'unusedReason': str(item.get('unusedReason', '')),\n              'tableReference': table_ref_obj,\n          })\n    return {'tableMetadataCacheUsage': metadata_cache}\n\n  # Properties derived from _information_schema_job_metadata\n  @property\n  def information_schema_user_email(self) -> str | None:\n    if not self._information_schema_job_metadata:\n      return C_NOT_AVAILABLE\n    return self._information_schema_job_metadata.get('user_email')\n\n  @property\n  def information_schema_start_time_str(self) -> str | None:\n    if not self._information_schema_job_metadata:\n      return C_NOT_AVAILABLE\n    return self._information_schema_job_metadata.get('start_time_str')\n\n  @property\n  def information_schema_end_time_str(self) -> str | None:\n    if not self._information_schema_job_metadata:\n      return C_NOT_AVAILABLE\n    return self._information_schema_job_metadata.get('end_time_str')\n\n  @property\n  def information_schema_query(self) -> str | None:\n    if not self._information_schema_job_metadata:\n      return C_NOT_AVAILABLE\n    return self._information_schema_job_metadata.get('query')\n\n  @property\n  def information_schema_total_modified_partitions(self) -> Union[int, str]:\n    \"\"\"The total number of partitions the job modified.\n\n    This field is populated for LOAD and QUERY jobs.\n    \"\"\"\n    if not self._information_schema_job_metadata:\n      return C_NOT_AVAILABLE\n    try:\n      total_modified_partitions = self._information_schema_job_metadata[\n          'total_modified_partitions']\n      return total_modified_partitions\n    except KeyError:\n      return C_NOT_AVAILABLE\n\n  @property\n  def information_schema_resource_warning(self) -> str:\n    \"\"\"The warning message that appears if the resource usage during query\n\n    processing is above the internal threshold of the system.\n    \"\"\"\n    if not self._information_schema_job_metadata:\n      return C_NOT_AVAILABLE\n    try:\n      resource_warning = self._information_schema_job_metadata['query_info'][\n          'resource_warning']\n      return resource_warning\n    except KeyError:\n      return C_NOT_AVAILABLE\n\n  @property\n  def information_schema_normalized_literals(self) -> str:\n    \"\"\"Contains the hashes of the query.\"\"\"\n    try:\n      query_hashes = self._information_schema_job_metadata['query_info'][\n          'query_hashes']['normalized_literals']\n      return query_hashes\n    except KeyError:\n      return C_NOT_AVAILABLE\n\n\n@caching.cached_api_call\ndef get_bigquery_job_api_resource_data(\n    project_id: str,\n    region: str,\n    job_id: str,\n) -> Union[dict[str, Any], None]:\n  \"\"\"Fetch a specific BigQuery job's raw API resource data.\"\"\"\n  api = apis.get_api('bigquery', 'v2', project_id)\n  query_job = api.jobs().get(projectId=project_id,\n                             location=region,\n                             jobId=job_id)\n\n  try:\n    resp = query_job.execute(num_retries=config.API_RETRIES)\n    return resp\n  except errors.HttpError as err:\n    raise utils.GcpApiError(err) from err\n\n\n@caching.cached_api_call\ndef get_information_schema_job_metadata(\n    context: models.Context,\n    project_id: str,\n    region: str,\n    job_id: str,\n    creation_time_milis: Optional[int] = None,\n    skip_permission_check: bool = False,\n) -> Optional[dict[str, Any]]:\n  \"\"\"Fetch metadata about a BigQuery job from the INFORMATION_SCHEMA.\"\"\"\n  if not apis.is_enabled(project_id, 'bigquery'):\n    return None\n  user_email = ''\n  try:\n    user_email = apis.get_user_email()\n  except (RuntimeError, exceptions.DefaultCredentialsError):\n    pass\n  except AttributeError as err:\n    if (('has no attribute' in str(err)) and\n        ('with_quota_project' in str(err))):\n      op.info('Running the investigation within the GCA context.')\n  user = 'user:' + user_email\n  if not skip_permission_check:\n    try:\n      policy = iam.get_project_policy(context)\n      if (not policy.has_permission(user, 'bigquery.jobs.create')) or (\n          not policy.has_permission(user, 'bigquery.jobs.listAll')):\n        op.info(\n            f'WARNING: Unable to run INFORMATION_SCHEMA view analysis due to missing permissions.\\\n            \\nMake sure to grant {user_email} \"bigquery.jobs.create\" and \"bigquery.jobs.listAll\".\\\n            \\nContinuing the investigation with the BigQuery job metadata obtained from the API.'\n        )\n        return None\n    except utils.GcpApiError:\n      op.info(\n          'Attempting to query INFORMATION_SCHEMA with no knowledge of project'\n          ' level permissions        \\n(due to missing'\n          ' resourcemanager.projects.get permission).')\n  else:\n    op.info(\n        'Attempting to query INFORMATION_SCHEMA without checking project level permissions.'\n    )\n  try:\n    creation_time_milis_filter = ' '\n    if creation_time_milis:\n      creation_time_milis_filter = (\n          f'AND creation_time = TIMESTAMP_MILLIS({creation_time_milis})')\n    query = f\"\"\"\n    SELECT\n        user_email, start_time, end_time, query\n      FROM\n        `{project_id}`.`region-{region}`.INFORMATION_SCHEMA.JOBS\n      WHERE\n        job_id = '{job_id}'\n        {creation_time_milis_filter}\n      LIMIT 1\n    \"\"\"\n    results = get_query_results(\n        project_id=project_id,\n        query=query,\n        location=region,\n        timeout_sec=30,\n        poll_interval_sec=2,  # Short poll interval\n    )\n    if not results or len(results) != 1:\n      # We cannot raise an exception otherwise tests that use get_bigquery_job would fail\n      # raise ValueError(f\"Job {job_id} not found in INFORMATION_SCHEMA\")\n      return None\n    return results[0]\n  except errors.HttpError as err:\n    logging.warning(\n        'Failed to retrieve INFORMATION_SCHEMA job metadata for job %s: %s',\n        job_id,\n        err,\n    )\n    return None\n  except KeyError as err:\n    logging.warning(\n        'Failed to parse INFORMATION_SCHEMA response for job %s: %s',\n        job_id,\n        err,\n    )\n    return None\n  except utils.GcpApiError as err:\n    logging.error('GcpApiError during BigQuery query execution for job %s: %s',\n                  job_id, err)\n    # Raise specific GcpApiError if needed for upstream handling\n    if 'permission' in err.message.lower():\n      logging.debug('permissions issue FOUND HERE : %s', err.message.lower())\n      return None\n    else:\n      return None\n\n\ndef get_bigquery_job(\n    context: models.Context,\n    region: str,\n    job_id: str,\n    skip_permission_check: bool = False) -> Union[BigQueryJob, None]:\n  \"\"\"Fetch a BigQuery job, combining API and INFORMATION_SCHEMA data.\"\"\"\n  project_id = context.project_id\n  if not project_id:\n    return None\n  try:\n    job_api_resource_data = get_bigquery_job_api_resource_data(\n        project_id, region, job_id)\n    if not job_api_resource_data:\n      return None\n  except utils.GcpApiError as err:\n    # This will be returned when permissions to fetch a job are missing.\n    if 'permission' in err.message.lower():\n      user_email = ''\n      try:\n        user_email = apis.get_user_email()\n      except (RuntimeError, AttributeError,\n              exceptions.DefaultCredentialsError) as error:\n        if (('has no attribute' in str(error)) and\n            ('with_quota_project' in str(error))):\n          op.info('Running the investigation within the GCA context.')\n      logging.debug(('Could not retrieve BigQuery job %s.\\\n          \\n make sure to give the bigquery.jobs.get and bigquery.jobs.create permissions to %s',\n                     (project_id + ':' + region + '.' + job_id), user_email))\n      raise utils.GcpApiError(err)\n    # This will be returned when a job is not found.\n    elif 'not found' in err.message.lower():\n      job_id_string = project_id + ':' + region + '.' + job_id\n      logging.debug('Could not find BigQuery job %s', job_id_string)\n      return None\n    else:\n      logging.debug((\n          'Could not retrieve BigQuery job %s due to an issue calling the API. \\\n            Please restart the investigation.',\n          (project_id + ':' + region + '.' + job_id)))\n      return None\n  information_schema_job_metadata = {}\n  job_creation_millis = None\n  creation_time_str = job_api_resource_data.get('statistics',\n                                                {}).get('creationTime')\n  if creation_time_str:\n    try:\n      job_creation_millis = int(creation_time_str)\n    except (ValueError, TypeError):\n      pass\n  information_schema_job_metadata = get_information_schema_job_metadata(\n      context, project_id, region, job_id, job_creation_millis,\n      skip_permission_check)\n  return BigQueryJob(\n      project_id=project_id,\n      job_api_resource_data=job_api_resource_data,\n      information_schema_job_metadata=information_schema_job_metadata)\n\n\ndef _parse_value(field_schema: dict, value_data: Any) -> Any:\n  \"\"\"Recursively parses a BigQuery TableCell value.\"\"\"\n  if value_data is None:\n    return None\n  if field_schema.get('mode') == 'REPEATED':\n    if not isinstance(value_data, list):\n      # This can happen for an empty repeated field, which is represented as None\n      return []\n    # For repeated fields, the value is a list of {'v': ...} objects.\n    # The schema for each item is the same field schema but with mode set to NULLABLE.\n    item_schema = field_schema.copy()\n    item_schema['mode'] = 'NULLABLE'\n    return [_parse_value(item_schema, item.get('v')) for item in value_data]\n  if field_schema.get('type') in ('RECORD', 'STRUCT'):\n    # For record fields, the value is a dictionary {'f': [...]}.\n    # The schema for the record's fields is in field_schema['fields'].\n    if isinstance(value_data, dict) and 'f' in value_data:\n      return _parse_row(field_schema.get('fields', []), value_data['f'])\n    return {}\n  # For scalar types, the value is directly in 'v'.\n  # BigQuery API returns numbers as strings, so we leave them as is.\n  # The consumer can perform type conversion if needed.\n  return value_data\n\n\ndef _parse_row(schema_fields: List[dict],\n               row_cells: List[dict]) -> dict[str, Any]:\n  \"\"\"Parses a BigQuery TableRow into a dictionary.\"\"\"\n  row_dict = {}\n  for i, field_schema in enumerate(schema_fields):\n    field_name = field_schema.get('name')\n    if field_name and i < len(row_cells):\n      cell_data = row_cells[i]\n      row_dict[field_name] = _parse_value(field_schema, cell_data.get('v'))\n  return row_dict\n\n\ndef get_query_results(\n    project_id: str,\n    query: str,\n    location: Optional[str] = None,\n    timeout_sec: int = 30,\n    poll_interval_sec: int = 2,\n) -> Optional[List[dict[str, Any]]]:\n  \"\"\"Executes a BigQuery query, waits for completion, and returns the results.\n\n  Args:\n      project_id: The GCP project ID where the query should run.\n      query: The SQL query string to execute.\n      location: The location (e.g., 'US', 'EU', 'us-central1') where the job\n        should run. If None, BigQuery defaults might apply, often based on\n        dataset locations if referenced.\n      timeout_sec: Maximum time in seconds to wait for the query job to\n        complete.\n      poll_interval_sec: Time in seconds between polling the job status.\n\n  Returns:\n      A list of dictionaries representing the result rows, or None if the\n      query fails, times out, or the API is disabled.\n  Raises:\n      utils.GcpApiError: If an unrecoverable API error occurs during job\n                         insertion, status check, or result fetching.\n  \"\"\"\n  if not apis.is_enabled(project_id, 'bigquery'):\n    logging.warning('BigQuery API is not enabled in project %s.', project_id)\n    return None\n  api = apis.get_api('bigquery', 'v2', project_id)\n  job_id = f'gcpdiag_query_{uuid.uuid4()}'\n  job_body = {\n      'jobReference': {\n          'projectId': project_id,\n          'jobId': job_id,\n          'location': location,  # Location can be None\n      },\n      'configuration': {\n          'query': {\n              'query': query,\n              'useLegacySql': False,\n              # Consider adding priority, destinationTable, etc. if needed\n          }\n      },\n  }\n  try:\n    logging.debug(\n        'Starting BigQuery job %s in project %s, location %s',\n        job_id,\n        project_id,\n        location or 'default',\n    )\n    insert_request = api.jobs().insert(projectId=project_id, body=job_body)\n    insert_response = insert_request.execute(num_retries=config.API_RETRIES)\n    job_ref = insert_response['jobReference']\n    actual_job_id = job_ref['jobId']\n    actual_location = job_ref.get('location')  # Get location assigned by BQ\n    logging.debug('Job %s created. Polling for completion...', actual_job_id)\n    start_time = time.time()\n    while True:\n      # Check for timeout\n      if time.time() - start_time > timeout_sec:\n        logging.error(\n            'BigQuery job %s timed out after %d seconds.',\n            actual_job_id,\n            timeout_sec,\n        )\n        return None\n      # Get job status\n      logging.debug('>>> Getting job status for %s', actual_job_id)\n      get_request = api.jobs().get(\n          projectId=job_ref['projectId'],\n          jobId=actual_job_id,\n          location=actual_location,\n      )\n      job_status_response = get_request.execute(num_retries=config.API_RETRIES)\n      status = job_status_response.get('status', {})\n      logging.debug('>>> Job status: %s', status.get('state'))\n      if status.get('state') == 'DONE':\n        if status.get('errorResult'):\n          error_info = status['errorResult']\n          if 'User does not have permission to query table' in error_info.get(\n              'message'):\n            op.info(\n                error_info.get('message')[15:] +\n                '\\nContinuing the investigation with the job metadata obtained from the API.'\n            )\n          else:\n            error_info = status['errorResult']\n            logging.error(\n                'BigQuery job %s failed. Reason: %s, Message: %s',\n                actual_job_id,\n                error_info.get('reason'),\n                error_info.get('message'),\n            )\n            # Log detailed errors if available\n            for error in status.get('errors', []):\n              logging.error(\n                  '  - Detail: %s (Location: %s)',\n                  error.get('message'),\n                  error.get('location'),\n              )\n          return None\n        else:\n          logging.debug('BigQuery job %s completed successfully.',\n                        actual_job_id)\n          break  # Job finished successfully\n      elif status.get('state') in ['PENDING', 'RUNNING']:\n        logging.debug('>>> Job running, sleeping...')\n        # Job still running, wait and poll again\n        time.sleep(poll_interval_sec)\n      else:\n        # Unexpected state\n        logging.error(\n            'BigQuery job %s entered unexpected state: %s',\n            actual_job_id,\n            status.get('state', 'UNKNOWN'),\n        )\n        return None\n    # Fetch results\n    logging.debug('>>> Fetching results for job %s...',\n                  actual_job_id)  # <-- ADD\n    results_request = api.jobs().getQueryResults(\n        projectId=job_ref['projectId'],\n        jobId=actual_job_id,\n        location=actual_location,\n        # Add startIndex, maxResults for pagination if needed\n    )\n    results_response = results_request.execute(num_retries=config.API_RETRIES)\n    # Check if job actually completed (getQueryResults might return before DONE sometimes)\n    if not results_response.get('jobComplete', False):\n      logging.warning(\n          'getQueryResults returned jobComplete=False for job %s, results might'\n          ' be incomplete.',\n          actual_job_id,\n      )\n      # Decide if you want to wait longer or return potentially partial results\n    rows = []\n    if 'rows' in results_response and 'schema' in results_response:\n      schema_fields = results_response['schema'].get('fields')\n      if not schema_fields:\n        return []\n      for row_data in results_response['rows']:\n        if 'f' in row_data:\n          rows.append(_parse_row(schema_fields, row_data['f']))\n    if results_response.get('pageToken'):\n      logging.warning(\n          'Query results for job %s are paginated, but pagination '\n          'is not yet implemented.',\n          actual_job_id,\n      )\n    return rows\n  except errors.HttpError as err:\n    logging.error('API error during BigQuery query execution for job %s: %s',\n                  job_id, err)\n    # Raise specific GcpApiError if needed for upstream handling\n    raise utils.GcpApiError(err) from err\n  except Exception as e:\n    logging.exception(\n        'Unexpected error during BigQuery query execution for job %s: %s',\n        job_id,\n        e,\n    )\n    # Re-raise or handle as appropriate\n    raise\n\n\n@caching.cached_api_call\ndef get_bigquery_project(project_id: str) -> crm.Project:\n  \"\"\"Attempts to retrieve project details for the supplied BigQuery project id or number.\n\n    If the project is found/accessible, it returns a Project object with the resource data.\n    If the project cannot be retrieved, the application raises one of the exceptions below.\n    The get_bigquery_project method avoids unnecessary printing of the error message to keep\n    the user interface of the tool cleaner to focus on meaningful investigation results.\n    Corresponding errors are handled gracefully downstream.\n\n    Args:\n        project_id (str): The project id or number of\n        the project (e.g., \"123456789\", \"example-project\").\n\n    Returns:\n        Project: An object representing the BigQuery project's full details.\n\n    Raises:\n        utils.GcpApiError: If there is an issue calling the GCP/HTTP Error API.\n\n    Usage:\n        When using project identifier from gcpdiag.models.Context\n\n        project = crm.get_project(context.project_id)\n\n        An unknown project identifier\n        try:\n          project = crm.get_project(\"123456789\")\n        except:\n          # Handle exception\n        else:\n          # use project data\n  \"\"\"\n  try:\n    logging.debug('retrieving project %s ', project_id)\n    crm_api = apis.get_api('cloudresourcemanager', 'v3', project_id)\n    request = crm_api.projects().get(name=f'projects/{project_id}')\n    response = request.execute(num_retries=config.API_RETRIES)\n  except errors.HttpError as e:\n    error = utils.GcpApiError(response=e)\n    raise error from e\n  else:\n    return crm.Project(resource_data=response)\n\n\n@caching.cached_api_call\ndef get_table(project_id: str, dataset_id: str,\n              table_id: str) -> Optional[Dict[str, Any]]:\n  \"\"\"Retrieves a BigQuery table resource if it exists.\n\n  Args:\n    project_id: The project ID.\n    dataset_id: The dataset ID.\n    table_id: The table ID.\n\n  Returns:\n    A dictionary representing the table resource, or None if not found.\n  \"\"\"\n  try:\n    api = apis.get_api('bigquery', 'v2', project_id)\n    request = api.tables().get(projectId=project_id,\n                               datasetId=dataset_id,\n                               tableId=table_id)\n    response = request.execute(num_retries=config.API_RETRIES)\n    return response\n  except errors.HttpError as err:\n    if err.resp.status == 404:\n      return None\n    raise utils.GcpApiError(err) from err\n"
  },
  {
    "path": "gcpdiag/queries/bigquery_stub.py",
    "content": "# pylint: disable=unused-argument,invalid-name\n\"\"\"Stub API calls used in bigquery.py for testing.\"\"\"\n\nimport json\nimport logging\nimport re\nimport uuid\nfrom typing import Any, Optional\n\nimport httplib2\nfrom googleapiclient import errors\n\nfrom gcpdiag.queries import apis_stub\n\nHttpError = errors.HttpError\n\n\nclass GetJobRequest(apis_stub.ApiStub):\n  \"\"\"Mocks jobs.get().execute() by loading a specific job file.\"\"\"\n\n  def __init__(self, project_id: str, location: str, job_id: str):\n    super().__init__()\n    self.project_id = project_id\n    self.job_id = job_id\n    # Handle potential None location passed from get()\n    self.location = location.lower() if location else 'us'\n    self.short_job_id = job_id.split('.')[-1].split('_')[\n        -1]  # More robust split\n    self.json_basename = f'job_get_{self.location}_{self.short_job_id}'\n    logging.debug('Stub: GetJobRequest prepared for %s', self.json_basename)\n\n  def execute(self, num_retries=0):\n    self._maybe_raise_api_exception()\n    if self.job_id == 'test_notfound':\n      raise HttpError(httplib2.Response({'status': 404}), b'Not Found')\n    file_path = None\n    try:\n      json_dir = apis_stub.get_json_dir(self.project_id)\n      file_path = json_dir / f'{self.json_basename}.json'\n      with open(file_path, encoding='utf-8') as json_file:\n        return json.load(json_file)\n    except FileNotFoundError as e:\n      logging.warning(\n          'Stub: File not found for GetJobRequest: %s. Raising 404.', file_path)\n      raise HttpError(httplib2.Response({'status': 404}), b'Not Found') from e\n    except Exception as e:\n      logging.error(\n          'Stub: Error executing GetJobRequest for %s: %s',\n          self.json_basename,\n          e,\n      )\n      raise\n\n\n# Add a stub for getQueryResults\nclass GetQueryResultsRequest(apis_stub.ApiStub):\n  \"\"\"Mocks jobs.getQueryResults().execute() by loading a specific results file.\"\"\"\n\n  def __init__(self, project_id: str, location: str, job_id: str):\n    super().__init__()\n    self.project_id = project_id\n    self.location = location.lower() if location else 'us'  # Default if None\n    # Extract the UUID part assuming format gcpdiag_query_{uuid}\n    self.short_job_id = job_id.split('_')[-1]\n    self.json_basename = f'job_results_{self.location}_{self.short_job_id}'\n    logging.debug('Stub: GetQueryResultsRequest prepared for %s',\n                  self.json_basename)\n\n  def execute(self, num_retries=0):\n    self._maybe_raise_api_exception()\n    file_path = None\n    try:\n      json_dir = apis_stub.get_json_dir(self.project_id)\n      file_path = json_dir / f'{self.json_basename}.json'\n      with open(file_path, encoding='utf-8') as json_file:\n        return json.load(json_file)\n    except FileNotFoundError:\n      # Return a default empty successful result if file not found\n      logging.warning(\n          'Stub: File not found for GetQueryResultsRequest: %s. Returning empty'\n          ' success.',\n          file_path,\n      )\n      return {\n          'kind': 'bigquery#getQueryResultsResponse',\n          'jobComplete': True,\n          'jobReference': {\n              'projectId': self.project_id,\n              'jobId': f'gcpdiag_query_{self.short_job_id}',\n              'location': self.location,\n          },\n          'schema': {\n              'fields': []\n          },\n          'rows': [],\n          'totalRows': '0',\n      }\n    except Exception as e:\n      logging.error(\n          'Stub: Error executing GetQueryResultsRequest for %s: %s',\n          self.json_basename,\n          e,\n      )\n      raise\n\n\n# Modify BigQueryJobsStub\nclass BigQueryJobsStub(apis_stub.ApiStub):\n  \"\"\"Mocks the object returned by bigquery_api.jobs().\"\"\"\n\n  # Store job states for simulation - use a class variable\n  _job_states: dict[str, list[dict[str, Any]]] = {}\n\n  def insert(self, projectId: str, body: dict[str, Any]):\n    \"\"\"Mocks jobs.insert().\n\n    Args:\n      projectId: The ID of the project.\n      body: The request body.\n\n    Returns:\n      A stub response and prepares state for get().\n    \"\"\"\n    job_ref = body.get('jobReference', {})\n    job_id = job_ref.get(\n        'jobId', f'gcpdiag_query_{uuid.uuid4()}')  # Use provided or generate\n    location = job_ref.get('location', 'us')  # Default location\n    # Simulate job progression: RUNNING -> DONE (default for success tests)\n    # Store states to be returned by subsequent get() calls, unless already set\n    # by a test\n    if job_id not in BigQueryJobsStub._job_states:\n      BigQueryJobsStub._job_states[job_id] = [\n          {\n              'status': {\n                  'state': 'RUNNING'\n              },\n              'jobReference': {\n                  'projectId': projectId,\n                  'jobId': job_id,\n                  'location': location,\n              },\n          },\n          {\n              'status': {\n                  'state': 'DONE'\n              },\n              'jobReference': {\n                  'projectId': projectId,\n                  'jobId': job_id,\n                  'location': location,\n              },\n          },\n      ]\n    # Prepare the insert response\n    insert_response = {\n        'kind': 'bigquery#job',\n        'etag': 'some_etag',\n        'id': f'{projectId}:{location}.{job_id}',\n        'selfLink': f'/projects/{projectId}/jobs/{job_id}?location={location}',\n        'jobReference': {\n            'projectId': projectId,\n            'jobId': job_id,\n            'location': location,\n        },\n        'status': {\n            'state': 'PENDING'\n        },  # Initial state reported by insert\n        'configuration': body.get('configuration'),\n    }\n    logging.debug(\n        'Stub: jobs.insert called for %s. Prepared states: %s',\n        job_id,\n        BigQueryJobsStub._job_states.get(job_id),\n    )\n    # Return an object that mimics the execute() method\n    return apis_stub.RestCallStub(projectId, '', default=insert_response)\n\n  def get(self, projectId: str, jobId: str, location: Optional[str] = None):\n    \"\"\"Mocks jobs.get(). Returns states based on stored sequence.\"\"\"\n    logging.debug('Stub: jobs.get called for %s, location %s', jobId, location)\n    effective_location = location or 'us'  # Use default if None\n    if (jobId in BigQueryJobsStub._job_states and\n        BigQueryJobsStub._job_states[jobId]):\n      next_state = BigQueryJobsStub._job_states[jobId].pop(\n          0)  # Get and remove the next state\n      logging.debug(\n          'Stub: jobs.get returning state: %s',\n          next_state.get('status', {}).get('state'),\n      )\n      # Ensure jobReference matches what get_query_results expects\n      if 'jobReference' not in next_state:\n        next_state['jobReference'] = {\n            'projectId': projectId,\n            'jobId': jobId,\n            'location': effective_location,\n        }\n      elif 'location' not in next_state['jobReference']:\n        next_state['jobReference']['location'] = effective_location\n      # Add other fields if needed, mimicking the real response structure\n      next_state.setdefault('kind', 'bigquery#job')\n      next_state.setdefault('id', f'{projectId}:{effective_location}.{jobId}')\n      next_state.setdefault('status', {}).setdefault(\n          'state', 'UNKNOWN')  # Default state if missing\n      return apis_stub.RestCallStub(projectId, '', default=next_state)\n    else:\n      # If no specific state is prepared or states are exhausted, fallback to\n      # file or 404\n      logging.warning(\n          'Stub: No predefined state for job %s. Falling back to file-based'\n          ' GetJobRequest.',\n          jobId,\n      )\n      return GetJobRequest(project_id=projectId,\n                           location=effective_location,\n                           job_id=jobId)\n\n  def getQueryResults(self,\n                      projectId: str,\n                      jobId: str,\n                      location: Optional[str] = None,\n                      **kwargs):\n    \"\"\"Mocks jobs.getQueryResults(). Returns a custom request object.\"\"\"\n    logging.debug('Stub: jobs.getQueryResults called for %s, location %s',\n                  jobId, location)\n    effective_location = location or 'us'  # Use default if None\n    return GetQueryResultsRequest(project_id=projectId,\n                                  location=effective_location,\n                                  job_id=jobId)\n\n  def query(self, projectId: str, body: dict[str, Any]):\n    \"\"\"Mocks jobs.query(). Returns a RestCallStub for the query result.\"\"\"\n    # Keep existing query logic for INFORMATION_SCHEMA\n    query_text = body.get('query', '')\n    if not isinstance(query_text, str):\n      query_text = ''\n    job_id_match = re.search(r\"job_id\\s*=\\s*'([^']+)'\", query_text)\n    schema_match = re.search(\n        r'FROM\\s*`[^`]+`\\.`([^`]+)`\\.INFORMATION_SCHEMA\\.JOBS',\n        query_text,\n        re.IGNORECASE,\n    )\n    json_basename = 'job_query_info_schema_default'\n    if job_id_match and schema_match:\n      job_id_in_query = job_id_match.group(1)\n      short_job_id = job_id_in_query.split('.')[-1]\n      region = schema_match.group(1).lower()\n      json_basename = f'job_query_info_schema_{region}_{short_job_id}'\n      logging.debug(\n          'Stub: jobs.query parsed job=%s, region=%s -> basename=%s',\n          short_job_id,\n          region,\n          json_basename,\n      )\n    else:\n      # This is likely not an INFORMATION_SCHEMA query, handle differently if\n      # needed\n      # For now, assume it's an INFO_SCHEMA query that failed parsing\n      if 'INFORMATION_SCHEMA' in query_text.upper():\n        logging.warning(\n            'Stub: jobs.query could not parse job/region from INFO_SCHEMA'\n            ' query: %s',\n            query_text,\n        )\n      else:\n        # This could be a direct query call, not handled by get_query_results\n        # flow\n        logging.error('Stub: jobs.query received unexpected query type: %s',\n                      query_text)\n        # Return an error or specific response for direct queries if needed\n        raise NotImplementedError(\n            \"Stub doesn't handle direct jobs.query calls yet.\")\n    default_empty_result = {\n        'kind': 'bigquery#queryResponse',\n        'schema': {},\n        'rows': [],\n        'totalRows': '0',\n        'jobComplete': True,\n    }\n    return apis_stub.RestCallStub(\n        project_id=projectId,\n        json_basename=json_basename,\n        default=default_empty_result,\n    )\n\n\n# Update BigQueryApiStub to use the modified BigQueryJobsStub\nclass BigQueryApiStub(apis_stub.ApiStub):\n  \"\"\"Mocks the top-level BigQuery API object returned by apis.get_api.\"\"\"\n\n  def __init__(self):\n    super().__init__()\n    # Ensure a fresh jobs stub instance for each API stub instance\n    self._jobs_stub = BigQueryJobsStub()\n\n  def jobs(self):\n    \"\"\"Returns the stub for the jobs resource.\"\"\"\n    return self._jobs_stub\n\n  def new_batch_http_request(self, callback=None):\n    raise NotImplementedError(\n        'Batch requests not implemented in BigQueryApiStub yet')\n"
  },
  {
    "path": "gcpdiag/queries/bigquery_test.py",
    "content": "\"\"\"Tests for code in bigquery.py.\"\"\"\n\nfrom unittest import mock\n\nimport pytest\n\nfrom gcpdiag import caching, models\nfrom gcpdiag.queries import apis, apis_stub, bigquery\nfrom gcpdiag.queries.bigquery import C_NOT_AVAILABLE, BigQueryJob\nfrom gcpdiag.runbook.op_test import with_operator_context\nfrom gcpdiag.utils import GcpApiError\n\nDUMMY_PROJECT_ID = 'gcpdiag-bigquery1-aaaa'\nDUMMY_REGION = 'us'\nDUMMY_JOB_ID = 'job1'\nDUMMY_JOB_ID_2 = 'job2'\nDUMMY_JOB_ID_I_S = 'information_schema_job1'\nDUMMY_JOB_ID_FAIL = 'job_not_found'\nDUMMY_JOB_FULL_ID = f'{DUMMY_PROJECT_ID}:{DUMMY_REGION.upper()}.{DUMMY_JOB_ID}'\nDUMMY_JOB_FULL_ID_2 = (\n    f'{DUMMY_PROJECT_ID}:{DUMMY_REGION.upper()}.{DUMMY_JOB_ID_2}')\nDUMMY_PRINCIPAL = 'user:test@example.com'\nDUMMY_ORG_ID = '123456789012'\nDUMMY_QUERY = (\n    'NOT BEING EXECUTED (SELECT col1, col2 FROM my_dataset.my_table LIMIT 2)')\nDUMMY_UUID = 'mockresult1'  # Corresponds to the results file name\n\n\n@mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)\nclass TestBigQueryQueries:\n  \"\"\"Test BigQuery queries.\"\"\"\n\n  @with_operator_context\n  @mock.patch('gcpdiag.queries.apis.is_enabled', return_value=True)\n  @mock.patch.object(apis,\n                     'get_user_email',\n                     return_value='testuser@example.com')\n  def test_get_bigquery_job1_success_and_properties(self, mock_api_is_enabled,\n                                                    mock_get_user_email):\n    # Test creating BigQueryJob object successfully for job1 and check\n    # properties.\n    del mock_api_is_enabled\n    del mock_get_user_email\n    context = models.Context(project_id=DUMMY_PROJECT_ID)\n    job = bigquery.get_bigquery_job(context, DUMMY_REGION.upper(), DUMMY_JOB_ID)\n    assert isinstance(job, BigQueryJob)\n    assert job.project_id == DUMMY_PROJECT_ID\n    assert job.id == DUMMY_JOB_FULL_ID\n    # TOmarcialrDO: does not make much sense since models.py makes short_path\n    # == fullpath\n    # assert job.short_path == f'{DUMMY_PROJECT_ID}/{DUMMY_REGION.upper()}/\n    # {DUMMY_JOB_ID}'\n    assert job.full_path.endswith(\n        f'/jobs/{DUMMY_JOB_ID}?location={DUMMY_REGION.upper()}')\n    assert job.user_email is not None\n    assert job.query_sql is not None\n    assert job.creation_time is not None\n    assert isinstance(job.total_bytes_billed, int)\n    assert isinstance(job.cache_hit, bool)\n    assert job.job_state == 'DONE'\n    # TOmarcialrDO: information_schema query not implemented yet\n    # assert job.information_schema_user_email is not None\n    # assert job.information_schema_start_time_str is not None\n    # assert job.information_schema_end_time_str is not None\n    # assert job.information_schema_query is not None\n\n  @with_operator_context\n  @mock.patch.object(apis,\n                     'get_user_email',\n                     return_value='testuser@example.com')\n  @mock.patch('gcpdiag.queries.bigquery.uuid.uuid4', return_value=DUMMY_UUID)\n  @mock.patch('gcpdiag.queries.apis.is_enabled', return_value=True)\n  def test_get_query_results_success(self, mock_api_is_enabled, mock_uuid,\n                                     mock_get_user_email):\n    # Test get_query_results successfully executes and returns rows.\n    del mock_api_is_enabled\n    del mock_uuid\n    del mock_get_user_email\n    results = bigquery.get_query_results(\n        project_id=DUMMY_PROJECT_ID,\n        query=DUMMY_QUERY,\n        location=DUMMY_REGION,  # Use 'us'\n        timeout_sec=10,  # Short timeout for test\n        poll_interval_sec=1,  # Short poll interval\n    )\n    assert results is not None\n    assert isinstance(results, list)\n    assert len(results) == 2\n    # Note: BQ returns strings for INTs via JSON API, handle potential type\n    # conversion if needed\n    assert results[0] == {'col1': 'value1', 'col2': '100'}\n    assert results[1] == {'col1': 'value2', 'col2': '200'}\n\n  @with_operator_context\n  @mock.patch.object(apis,\n                     'get_user_email',\n                     return_value='testuser@example.com')\n  @mock.patch('gcpdiag.queries.apis.is_enabled', return_value=False)\n  def test_get_query_results_api_disabled(self, mock_api_is_enabled,\n                                          mock_get_user_email):\n    # Test get_query_results returns None when API is disabled\n    del mock_get_user_email\n    results = bigquery.get_query_results(project_id=DUMMY_PROJECT_ID,\n                                         query=DUMMY_QUERY,\n                                         location=DUMMY_REGION)\n    assert results is None\n    mock_api_is_enabled.assert_called_once_with(DUMMY_PROJECT_ID, 'bigquery')\n\n  @with_operator_context\n  @mock.patch.object(apis,\n                     'get_user_email',\n                     return_value='testuser@example.com')\n  @mock.patch('gcpdiag.queries.apis.is_enabled', return_value=True)\n  def test_get_bigquery_job2_success(self, mock_api_is_enabled,\n                                     mock_get_user_email):\n    # Test creating BigQueryJob object successfully for job2.\n    del mock_api_is_enabled\n    del mock_get_user_email\n    context = models.Context(project_id=DUMMY_PROJECT_ID)\n    job = bigquery.get_bigquery_job(context, DUMMY_REGION.upper(),\n                                    DUMMY_JOB_ID_2)\n    assert isinstance(job, BigQueryJob)\n    assert job.project_id == DUMMY_PROJECT_ID\n    assert job.id == DUMMY_JOB_FULL_ID_2\n    assert job.job_state == 'DONE'\n    # TOmarcialrDO: alihanoz\n    # assert job.job_error_result == {}\n    # assert job.job_errors == []\n    # Add more assertions based on job2 data (e.g., check billing > 0)\n    assert job.total_bytes_billed >= 0\n\n  def test_get_bigquery_job_returns_none_on_api_fail(self):\n    \"\"\"Test get_bigquery_job returns None if the underlying jobs.get call fails.\"\"\"\n    context = models.Context(project_id=DUMMY_PROJECT_ID)\n    job = bigquery.get_bigquery_job(context, DUMMY_REGION.upper(),\n                                    DUMMY_JOB_ID_FAIL)\n    assert job is None\n\n  @with_operator_context\n  @mock.patch.object(apis,\n                     'get_user_email',\n                     return_value='testuser@example.com')\n  def test_get_info_schema_not_found_returns_none(self, mock_get_user_email):\n    \"\"\"Verify get_information_schema_job_metadata returns None when query finds no match.\"\"\"\n    del mock_get_user_email\n    context = models.Context(project_id=DUMMY_PROJECT_ID)\n    result = bigquery.get_information_schema_job_metadata(\n        context, DUMMY_PROJECT_ID, DUMMY_REGION.upper(), DUMMY_JOB_ID_FAIL)\n    assert result is None\n\n  @with_operator_context\n  @mock.patch.object(apis,\n                     'get_user_email',\n                     return_value='testuser@example.com')\n  @mock.patch('gcpdiag.queries.apis.is_enabled', return_value=False)\n  def test_get_info_schema_api_disabled(self, mock_api_is_enabled,\n                                        mock_get_user_email):\n    \"\"\"Test jobs.query returning None when API is disabled.\"\"\"\n    del mock_get_user_email\n    del mock_api_is_enabled\n    context = models.Context(project_id=DUMMY_PROJECT_ID)\n    result = bigquery.get_information_schema_job_metadata(\n        context, DUMMY_PROJECT_ID, DUMMY_REGION.upper(), DUMMY_JOB_ID)\n    assert result is None\n\n  @with_operator_context\n  @mock.patch.object(apis,\n                     'get_user_email',\n                     return_value='testuser@example.com')\n  @mock.patch('gcpdiag.queries.apis.is_enabled', return_value=True)\n  def test_get_bigquery_job_info_schema_fails(self, mock_api_is_enabled,\n                                              mock_get_user_email):\n    # While testing, we cannot retrieve IS job so it behaves\n    # like an error happened when querying I_S so\n    # job._information_schema_job_metadata = {}\n    del mock_get_user_email\n    del mock_api_is_enabled\n    with caching.bypass_cache():\n      context = models.Context(project_id=DUMMY_PROJECT_ID)\n      job = bigquery.get_bigquery_job(context, DUMMY_REGION.upper(),\n                                      DUMMY_JOB_ID)\n    assert isinstance(job, BigQueryJob)\n    assert job.id == DUMMY_JOB_FULL_ID\n    assert job.information_schema_user_email is C_NOT_AVAILABLE\n    assert job.information_schema_start_time_str is C_NOT_AVAILABLE\n    assert job.information_schema_end_time_str is C_NOT_AVAILABLE\n    assert job.information_schema_query is C_NOT_AVAILABLE\n\n  @mock.patch.object(apis,\n                     'get_user_email',\n                     return_value='testuser@example.com')\n  @mock.patch('gcpdiag.queries.apis.is_enabled', return_value=True)\n  def test_get_job_api_data_not_found_raises_error(self, mock_api_is_enabled,\n                                                   mock_get_user_email):\n    # Verify get_bigquery_job_api_resource_data raises GcpApiError on 404.\n    del mock_api_is_enabled\n    del mock_get_user_email\n    with caching.bypass_cache():\n      with pytest.raises(GcpApiError):\n        bigquery.get_bigquery_job_api_resource_data(DUMMY_PROJECT_ID,\n                                                    DUMMY_REGION.upper(),\n                                                    DUMMY_JOB_ID_FAIL)\n\n  @with_operator_context\n  @mock.patch('gcpdiag.queries.apis.is_enabled', return_value=True)\n  @mock.patch.object(apis,\n                     'get_user_email',\n                     return_value='testuser@example.com')\n  def test_get_bigquery_job_info_schema_extended_fields_fail(\n      self, mock_api_is_enabled, mock_get_user_email):\n    # Test get_bigquery_job returns CONST_NOT_AVAILABLE for extended info\n    # schema fields when the underlying query for metadata fails.\n    # We actually do not have a working underlying query\n    del mock_api_is_enabled\n    del mock_get_user_email\n    with caching.bypass_cache():\n      context = models.Context(project_id=DUMMY_PROJECT_ID)\n      job = bigquery.get_bigquery_job(context, DUMMY_REGION.upper(),\n                                      DUMMY_JOB_ID)\n    assert isinstance(job, BigQueryJob)\n    assert job.id == DUMMY_JOB_FULL_ID\n    assert job.information_schema_total_modified_partitions == C_NOT_AVAILABLE\n    assert job.information_schema_resource_warning == C_NOT_AVAILABLE\n    assert job.information_schema_normalized_literals == C_NOT_AVAILABLE\n"
  },
  {
    "path": "gcpdiag/queries/billing.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Queries related to GCP Billing Accounts.\"\"\"\n\nimport logging\nimport sys\nfrom typing import List, Optional\n\nimport googleapiclient.errors\n\nfrom gcpdiag import caching, config, models, utils\nfrom gcpdiag.queries import apis, apis_utils\nfrom gcpdiag.utils import GcpApiError\n\nAPI_VERSION = 'v1'\n\n\nclass BillingAccount(models.Resource):\n  \"\"\"Represents a Cloud Billing Account.\n\n  See also the API documentation:\n  https://cloud.google.com/billing/docs/reference/rest/v1/billingAccounts\n  \"\"\"\n\n  @property\n  def full_path(self) -> str:\n    return self._resource_data['name']\n\n  @property\n  def name(self) -> str:\n    return self._resource_data['name']\n\n  @property\n  def display_name(self) -> str:\n    return self._resource_data['displayName']\n\n  def is_open(self) -> bool:\n    return self._resource_data['open']\n\n  def is_master(self) -> bool:\n    return len(self._resource_data['masterBillingAccount']) > 0\n\n  def list_projects(self, context) -> list:\n    return get_all_projects_in_billing_account(context, self.name)\n\n  def __init__(self, project_id, resource_data):\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n\n\nclass ProjectBillingInfo(models.Resource):\n  \"\"\"Represents a Billing Information about a Project.\n\n  See also the API documentation:\n  https://cloud.google.com/billing/docs/reference/rest/v1/ProjectBillingInfo\n  \"\"\"\n\n  @property\n  def full_path(self) -> str:\n    return self._resource_data['name']\n\n  @property\n  def name(self) -> str:\n    return self._resource_data['name']\n\n  @property\n  def project_id(self) -> str:\n    return self._resource_data['projectId']\n\n  @property\n  def billing_account_name(self) -> str:\n    return self._resource_data['billingAccountName']\n\n  def is_billing_enabled(self) -> bool:\n    return self._resource_data['billingEnabled']\n\n  def __init__(self, project_id, resource_data):\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n\n\nclass CostInsights(models.Resource):\n  \"\"\"Represents a Costs Insights object\"\"\"\n\n  @property\n  def full_path(self) -> str:\n    return self._resource_data['name']\n\n  @property\n  def description(self) -> str:\n    return self._resource_data['description']\n\n  @property\n  def anomaly_details(self) -> dict:\n    return self._resource_data['content']['anomalyDetails']\n\n  @property\n  def forecasted_units(self) -> str:\n    return self.anomaly_details['forecastedCostData']['cost']['units']\n\n  @property\n  def forecasted_currency(self) -> str:\n    return self.anomaly_details['forecastedCostData']['cost']['currencyCode']\n\n  @property\n  def actual_units(self) -> str:\n    return self.anomaly_details['actualCostData']['cost']['units']\n\n  @property\n  def actual_currency(self) -> str:\n    return self.anomaly_details['actualCostData']['cost']['currencyCode']\n\n  @property\n  def start_time(self) -> str:\n    return self.anomaly_details['costSlice']['startTime']\n\n  @property\n  def end_time(self) -> str:\n    return self.anomaly_details['costSlice']['endTime']\n\n  @property\n  def anomaly_type(self) -> str:\n    return 'Below' if self._resource_data['insightSubtype'] == \\\n                         'COST_BELOW_FORECASTED' else 'Above'\n\n  def is_anomaly(self) -> bool:\n    if 'description' in self._resource_data.keys():\n      return 'This is a cost anomaly' in self.description\n    return False\n\n  def build_anomaly_description(self):\n    return self.description + '\\nCost ' + self.anomaly_type + \\\n           ' forecast, Forecasted: ' + self.forecasted_units + \\\n           ' ' + self.forecasted_currency + ', Actual: ' + \\\n           self.actual_units + ' ' + self.actual_currency + \\\n           '\\nAnomaly Period From: ' + self.start_time + ', To: ' + self.end_time\n\n  def __init__(self, project_id, resource_data):\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n\n\n@caching.cached_api_call\ndef get_billing_info(project_id) -> ProjectBillingInfo:\n  \"\"\"Get Billing Information for a project, caching the result.\"\"\"\n  project_api = apis.get_api('cloudbilling', 'v1', project_id)\n  project_id = 'projects/' + project_id if 'projects/' not in project_id else project_id\n  query = project_api.projects().getBillingInfo(name=project_id)\n  logging.debug('fetching Billing Information for project %s', project_id)\n  try:\n    resource_data = query.execute(num_retries=config.API_RETRIES)\n  except googleapiclient.errors.HttpError as err:\n    raise GcpApiError(err) from err\n  return ProjectBillingInfo(project_id, resource_data)\n\n\n@caching.cached_api_call\ndef get_billing_account(project_id: str) -> Optional[BillingAccount]:\n  \"\"\"Get a Billing Account object by its project name, caching the result.\"\"\"\n  if not apis.is_enabled(project_id, 'cloudbilling'):\n    return None\n  billing_info = get_billing_info(project_id)\n  if not billing_info.is_billing_enabled():\n    return None\n\n  billing_account_api = apis.get_api('cloudbilling', 'v1', project_id)\n  query = billing_account_api.billingAccounts().get(\n      name=billing_info.billing_account_name)\n  logging.debug('fetching Billing Account for project %s', project_id)\n  try:\n    resource_data = query.execute(num_retries=config.API_RETRIES)\n  except googleapiclient.errors.HttpError as error:\n    e = utils.GcpApiError(error)\n    if ('The caller does not have permission'\n        in e.message) or ('PERMISSION_DENIED' in e.reason):\n      # billing rules cannot be tested without permissions on billing account\n      return None\n    else:\n      raise GcpApiError(error) from error\n  return BillingAccount(project_id, resource_data)\n\n\n@caching.cached_api_call\ndef get_all_billing_accounts(project_id: str) -> Optional[List[BillingAccount]]:\n  \"\"\"Get all Billing Accounts that current user has permission to view\"\"\"\n  accounts = []\n  if not apis.is_enabled(project_id, 'cloudbilling'):\n    return None\n  api = apis.get_api('cloudbilling', API_VERSION, project_id)\n\n  try:\n    for account in apis_utils.list_all(\n        request=api.billingAccounts().list(),\n        next_function=api.billingAccounts().list_next,\n        response_keyword='billingAccounts'):\n      accounts.append(BillingAccount(project_id, account))\n  except utils.GcpApiError as e:\n    if ('The caller does not have permission'\n        in e.message) or ('PERMISSION_DENIED' in e.reason):\n      # billing rules cannot be tested without permissions on billing account\n      return None\n    else:\n      raise e\n  return accounts\n\n\n@caching.cached_api_call\ndef get_all_projects_in_billing_account(\n    context: models.Context,\n    billing_account_name: str) -> List[ProjectBillingInfo]:\n  \"\"\"Get all projects associated with the Billing Account that current user has\n  permission to view\"\"\"\n  projects = []\n  api = apis.get_api('cloudbilling', API_VERSION, context.project_id)\n\n  for p in apis_utils.list_all(\n      request=api.billingAccounts().projects().list(name=billing_account_name,),\n      next_function=api.billingAccounts().projects().list_next,\n      response_keyword='projectBillingInfo'):\n    try:\n      crm_api = apis.get_api('cloudresourcemanager', 'v3', p['projectId'])\n      p_name = 'projects/' + p['projectId'] if 'projects/' not in p[\n          'projectId'] else p['projectId']\n      request = crm_api.projects().get(name=p_name)\n      response = request.execute(num_retries=config.API_RETRIES)\n      projects.append(ProjectBillingInfo(response['projectId'], p))\n    except (utils.GcpApiError, googleapiclient.errors.HttpError) as error:\n      if isinstance(error, googleapiclient.errors.HttpError):\n        error = utils.GcpApiError(error)\n      if error.reason in [\n          'IAM_PERMISSION_DENIED', 'USER_PROJECT_DENIED', 'SERVICE_DISABLED'\n      ]:\n        # skip projects that user does not have permissions on\n        continue\n      else:\n        print(\n            f'[ERROR]: An Http Error occurred whiles accessing projects.get \\n\\n{error}',\n            file=sys.stderr)\n      raise error from error\n  return projects\n\n\n@caching.cached_api_call\ndef get_cost_insights_for_a_project(project_id: str):\n  \"\"\"Get cost insights for the project\"\"\"\n  billing_account = get_billing_account(project_id)\n\n  # If Billing Account is closed or is a reseller account then Cost Insights\n  # are not available\n  if (not billing_account.is_open()) or billing_account.is_master():\n    return None\n\n  api = apis.get_api('recommender', 'v1', project_id)\n\n  insight_name = billing_account.name + '/locations/global/insightTypes/google.billing.CostInsight'\n  insights = []\n  for insight in apis_utils.list_all(\n      request=api.billingAccounts().locations().insightTypes().insights().list(\n          parent=insight_name),\n      next_function=api.billingAccounts().locations().insightTypes().insights(\n      ).list_next,\n      response_keyword='insights'):\n    insights.append(CostInsights(project_id, insight))\n  return insights\n"
  },
  {
    "path": "gcpdiag/queries/billing_stub.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Stub API calls used in billing.py for testing.\n\nInstead of doing real API calls, we return test JSON data.\n\"\"\"\n\nfrom gcpdiag.queries import apis_stub\n\n# pylint: disable=unused-argument\n# pylint: disable=invalid-name\n\nDUMMY_PROJECT_ID = 'gcpdiag-billing1-aaaa'\n\n\nclass BillingApiStub:\n  \"\"\"Mock object to simulate billing api calls.\"\"\"\n\n  def __init__(self, project_id=DUMMY_PROJECT_ID):\n    self.project_id = project_id\n\n  def projects(self):\n    return ProjectBillingInfo(self.project_id)\n\n  def billingAccounts(self):\n    return BillingAccountStub(self.project_id)\n\n\nclass ProjectBillingInfo(BillingApiStub):\n  \"\"\"Mock object to simulate Project Billing Info api calls\"\"\"\n\n  def getBillingInfo(self, name):\n    return apis_stub.RestCallStub(self.project_id, 'project_billing_info')\n\n\nclass BillingAccountStub(BillingApiStub):\n  \"\"\"Mock object to simulate Billing Account api calls\"\"\"\n\n  def get(self, name):\n    return apis_stub.RestCallStub(self.project_id, 'billing_account')\n\n  def list(self):\n    return apis_stub.RestCallStub(self.project_id, 'all_billing_accounts')\n\n  def list_next(self, previous_request, previous_response):\n    return None\n\n  def projects(self):\n    return BillingAccountProjectsStub(self.project_id)\n\n\nclass BillingAccountProjectsStub(BillingApiStub):\n  \"\"\"Mock object to simulate Billing Account Projects api calls\"\"\"\n\n  def list(self, name):\n    return apis_stub.RestCallStub(self.project_id,\n                                  'all_billing_account_projects')\n\n  def list_next(self, previous_request, previous_response):\n    return None\n\n\nclass RecommenderBillingApiStub:\n  \"\"\"Mock object to simulate recommender cost insights\"\"\"\n\n  def __init__(self, project_id=DUMMY_PROJECT_ID):\n    self.project_id = project_id\n\n  def locations(self):\n    return self\n\n  def insightTypes(self):\n    return self\n\n  def insights(self):\n    return self\n\n  def get(self, name):\n    return apis_stub.RestCallStub(self.project_id, 'cost_insights')\n\n  def list(self, parent):\n    return apis_stub.RestCallStub(self.project_id, 'cost_insights')\n\n  def list_next(self, previous_request, previous_response):\n    return None\n"
  },
  {
    "path": "gcpdiag/queries/billing_test.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Test code in billing.py.\"\"\"\n\nfrom unittest import mock\n\nfrom gcpdiag import models\nfrom gcpdiag.queries import apis_stub, billing\n\nDUMMY_PROJECT_ID = 'gcpdiag-billing1-aaaa'\nDUMMY_BILLING_ACCOUNT_NAME = 'Cloud Billing Support billing account'\nDUMMY_BILLING_ACCOUNT_IS_MASTER = False\nDUMMY_BILLING_ACCOUNT_IS_OPEN = True\nDUMMY_BILLING_ACCOUNT_HAS_PROJECTS = True\nDUMMY_NUMBER_ALL_BILLING_ACCOUNTS = 4\nDUMMY_NUMBER_ALL_PROJECTS = 3\nDUMMY_PROJECT_BILLING_ENABLED = True\nDUMMY_PROJECT_NAME = 'projects/gcpdiag-billing1-aaaa/billingInfo'\nDUMMY_PROJECT_BILLING_ACCOUNT_NAME = 'billingAccounts/005E32-00FAKE-123456'\nDUMMY_COST_INSIGHT_IS_ANOMALY = True\nDUMMY_COST_INSIGHT_FORCASTED_UNITS = '80'\nDUMMY_COST_INSIGHT_FORCASTED_CURRENCY = 'USD'\nDUMMY_COST_INSIGHT_ACTUAL_UNITS = '16'\nDUMMY_COST_INSIGHT_ACTUAL_CURRENCY = 'USD'\nDUMMY_COST_INSIGHT_ANOMALY_TYPE = 'Below'\n\n\n@mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)\nclass TestBilling:\n  \"\"\"Test Billing queries\"\"\"\n\n  def test_get_billing_account(self):\n    context = models.Context(project_id=DUMMY_PROJECT_ID)\n    billing_account = billing.get_billing_account(context.project_id)\n\n    assert billing_account.display_name == DUMMY_BILLING_ACCOUNT_NAME\n    assert billing_account.is_open() == DUMMY_BILLING_ACCOUNT_IS_OPEN\n    assert billing_account.is_master() == DUMMY_BILLING_ACCOUNT_IS_MASTER\n    assert (len(billing_account.list_projects(context))\n            > 0) == DUMMY_BILLING_ACCOUNT_HAS_PROJECTS\n\n  def test_get_all_billing_accounts(self):\n    context = models.Context(project_id=DUMMY_PROJECT_ID)\n    billing_accounts = billing.get_all_billing_accounts(context.project_id)\n\n    assert len(billing_accounts) == DUMMY_NUMBER_ALL_BILLING_ACCOUNTS\n    assert billing_accounts[1].display_name == DUMMY_BILLING_ACCOUNT_NAME\n\n  def test_get_all_projects_in_billing_account(self):\n    context = models.Context(project_id=DUMMY_PROJECT_ID)\n    billing_account = billing.get_billing_account(context.project_id)\n    projects = billing.get_all_projects_in_billing_account(\n        context, billing_account.name)\n\n    assert len(projects) == DUMMY_NUMBER_ALL_PROJECTS\n    assert projects[0].project_id == DUMMY_PROJECT_ID\n\n  def test_get_billing_info(self):\n    context = models.Context(project_id=DUMMY_PROJECT_ID)\n    project_billing_info = billing.get_billing_info(context.project_id)\n\n    assert project_billing_info.billing_account_name == DUMMY_PROJECT_BILLING_ACCOUNT_NAME\n    assert project_billing_info.name == DUMMY_PROJECT_NAME\n    assert project_billing_info.is_billing_enabled(\n    ) == DUMMY_PROJECT_BILLING_ENABLED\n\n  def test_get_cost_insights_for_a_project(self):\n    context = models.Context(project_id=DUMMY_PROJECT_ID)\n    cost_insights = billing.get_cost_insights_for_a_project(\n        context.project_id)[0]\n\n    assert cost_insights.is_anomaly() == DUMMY_COST_INSIGHT_IS_ANOMALY\n    assert cost_insights.forecasted_units == DUMMY_COST_INSIGHT_FORCASTED_UNITS\n    assert cost_insights.forecasted_currency == DUMMY_COST_INSIGHT_FORCASTED_CURRENCY\n    assert cost_insights.actual_units == DUMMY_COST_INSIGHT_ACTUAL_UNITS\n    assert cost_insights.actual_currency == DUMMY_COST_INSIGHT_ACTUAL_CURRENCY\n    assert cost_insights.anomaly_type == DUMMY_COST_INSIGHT_ANOMALY_TYPE\n"
  },
  {
    "path": "gcpdiag/queries/cloudasset.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Queries related to GCP Cloud Asset Inventory.\"\"\"\n\nimport logging\nimport re\nfrom typing import Dict, Mapping, Optional\n\nimport googleapiclient.errors\n\nfrom gcpdiag import caching, config, models, utils\nfrom gcpdiag.queries import apis\n\n\nclass AssetResource(models.Resource):\n  \"\"\"Represents Resource Retrieved from the Cloud Asset Inventory.\"\"\"\n  _resource_data: dict\n\n  def __init__(self, project_id, resource_data):\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n\n  @property\n  def name(self) -> str:\n    m = re.search(r'//(.+)', self._resource_data['name'])\n    if not m:\n      raise RuntimeError('can\\'t determine name of service %s' %\n                         (self._resource_data['name']))\n    return m.group(1)\n\n  @property\n  def full_path(self) -> str:\n    return self.name\n\n  @property\n  def asset_type(self) -> str:\n    return self._resource_data['assetType']\n\n\n@caching.cached_api_call\ndef search_all_resources(\n    project_id: str,\n    asset_type: Optional[str] = None,\n    query: Optional[str] = None,\n) -> Mapping[str, AssetResource]:\n  \"\"\"Searches all resources in the project.\"\"\"\n  resources: Dict[str, AssetResource] = {}\n\n  if not apis.is_enabled(project_id, 'cloudasset'):\n    return resources\n  cloudasset_api = apis.get_api('cloudasset', 'v1', project_id)\n  logging.debug('fetching list of resources in the project %s', project_id)\n  request = cloudasset_api.v1().searchAllResources(\n      scope=f'projects/{project_id}', assetTypes=asset_type, query=query)\n  response = request.execute(num_retries=config.API_RETRIES)\n  try:\n    if 'results' in response:\n      for resource in response['results']:\n        resources[resource['name']] = AssetResource(project_id, resource)\n  except googleapiclient.errors.HttpError as err:\n    raise utils.GcpApiError(err) from err\n  return resources\n"
  },
  {
    "path": "gcpdiag/queries/cloudasset_stub.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Stub API calls used in cloudasset.py for testing.\n\nInstead of doing real API calls, we return test JSON data.\n\"\"\"\nimport re\n\nfrom gcpdiag.queries import apis_stub\n\n#pylint: disable=unused-argument\n\n\nclass CloudAssetApiStub(apis_stub.ApiStub):\n  \"\"\"Mock object to simulate Cloud Asset api calls.\"\"\"\n\n  def v1(self):\n    return self\n\n  # pylint: disable=invalid-name\n  def searchAllResources(self, scope, assetTypes=None, query=None):\n    project_id_match = re.match(r'projects/([^/]*)', scope)\n    if not project_id_match:\n      raise RuntimeError(f\"Can't parse scope {scope}\")\n    project_id = project_id_match.group(1)\n\n    location_match = re.match(r'location:([^/]*)', query)\n    if not location_match:\n      raise RuntimeError(f\"Can't parse query {query}\")\n    location = location_match.group(1)\n    return apis_stub.RestCallStub(project_id,\n                                  f'search-all-resources-{location}')\n"
  },
  {
    "path": "gcpdiag/queries/cloudasset_test.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test code in cloudasset.py.\"\"\"\n\nfrom unittest import mock\n\nfrom gcpdiag import models\nfrom gcpdiag.queries import apis_stub, cloudasset\n\nDUMMY_PROJECT_NAME = 'gcpdiag-cloudasset1-aaaa'\nDUMMY_QUERY = 'location:us-central1'\nASSET_TYPE1 = 'compute.googleapis.com/Subnetwork'\nASSET_TYPE2 = 'compute.googleapis.com/Address'\n\n\n@mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)\nclass TestCloudAsset:\n  \"\"\"Test CloudAsset.\"\"\"\n\n  def test_search_all_resources(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    asset_resources = cloudasset.search_all_resources(context.project_id,\n                                                      query=DUMMY_QUERY)\n    assert len(asset_resources) == 4\n\n    assert ASSET_TYPE1 in [\n        resource.asset_type for resource in asset_resources.values()\n    ]\n\n    assert ASSET_TYPE2 in [\n        resource.asset_type for resource in asset_resources.values()\n    ]\n"
  },
  {
    "path": "gcpdiag/queries/cloudrun.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Queries related to GCP Cloud Run service.\"\"\"\n\nimport logging\nimport re\nfrom typing import Dict, Iterable, Mapping\n\nimport googleapiclient.errors\n\nfrom gcpdiag import caching, config, models, utils\nfrom gcpdiag.queries import apis\n\n\nclass Service(models.Resource):\n  \"\"\"Represents Cloud Run service.\"\"\"\n  _resource_data: dict\n\n  def __init__(self, project_id, resource_data):\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n\n  @property\n  def name(self) -> str:\n    m = re.search(r'/services/([^/]+)$', self._resource_data['name'])\n    if not m:\n      raise RuntimeError('can\\'t determine name of service %s' %\n                         (self._resource_data['name']))\n    return m.group(1)\n\n  @property\n  def id(self) -> str:\n    return self._resource_data['uid']\n\n  @property\n  def full_path(self) -> str:\n    return self._resource_data['name']\n\n  @property\n  def conditions(self) -> Dict[str, 'ServiceCondition']:\n    return {\n        condition['type']: ServiceCondition(condition)\n        for condition in self._resource_data['conditions']\n    }\n\n  @property\n  def short_path(self) -> str:\n    path = self.project_id + '/' + self.id\n    return path\n\n\nclass ServiceCondition:\n  \"\"\"Represents Cloud Run service status condition.\"\"\"\n  _resource_data: dict\n\n  def __init__(self, resource_data):\n    self._resource_data = resource_data\n\n  @property\n  def message(self) -> str:\n    return self._resource_data.get('message', '')\n\n\ndef get_all_locations(project_id: str) -> Iterable[str]:\n  \"\"\"Return list of all regions\n\n  Args:\n      project_id (str): project id for this request\n\n  Raises:\n      utils.GcpApiError: Raises GcpApiError in case of query issues\n\n  Returns:\n      Iterable[Region]: Return list of all regions\n  \"\"\"\n  try:\n    cloudrun_api = apis.get_api('run', 'v1', project_id)\n    request = cloudrun_api.projects().locations().list(\n        name=f'projects/{project_id}')\n    response = request.execute(num_retries=config.API_RETRIES)\n    if not response or 'locations' not in response:\n      return set()\n\n    return {\n        location['name']\n        for location in response['locations']\n        if 'name' in location\n    }\n  except googleapiclient.errors.HttpError as err:\n    raise utils.GcpApiError(err) from err\n\n\n@caching.cached_api_call\ndef get_services(context: models.Context) -> Mapping[str, Service]:\n  \"\"\"Get a list of Cloud Run services matching the given context,\n  indexed by service id.\"\"\"\n  services: Dict[str, Service] = {}\n\n  if not apis.is_enabled(context.project_id, 'run'):\n    return services\n\n  locations = get_all_locations(context.project_id)\n\n  for location in locations:\n    m = re.search(r'/locations/([^/]+)$', location)\n    if not m:\n      continue\n    region = m.group(1)\n    cloudrun_api = apis.get_api('run', 'v2', context.project_id)\n    logging.debug(\n        'fetching list of cloud run services in the project %s for the region %s',\n        context.project_id, region)\n    query = cloudrun_api.projects().locations().services().list(\n        parent=f'projects/{context.project_id}/locations/{region}')\n    try:\n      resp = query.execute(num_retries=config.API_RETRIES)\n      if 'services' not in resp:\n        continue\n      for s in resp['services']:\n        # projects/{project}/locations/{location}/services/{serviceId}.\n        result = re.match(r'projects/[^/]+/locations/([^/]+)/services/([^/]+)',\n                          s['name'])\n        if not result:\n          logging.error('invalid cloudrun name: %s', s['name'])\n          raise RuntimeError(\n              'missing data in projects.locations.services.list response')\n        location = result.group(1)\n        labels = s.get('labels', {})\n        name = result.group(2)\n        if not context.match_project_resource(\n            location=location, labels=labels, resource=name):\n          continue\n\n        services[s['uid']] = Service(project_id=context.project_id,\n                                     resource_data=s)\n    except googleapiclient.errors.HttpError as err:\n      raise utils.GcpApiError(err) from err\n  return services\n\n\ndef get_service(project_id: str, region: str, service_name: str) -> Service:\n  cloudrun_api = apis.get_api('run', 'v2', project_id)\n  request = cloudrun_api.projects().locations().services().get(\n      name=f'projects/{project_id}/locations/{region}/services/{service_name}')\n  response = request.execute(num_retries=config.API_RETRIES)\n  return Service(project_id, response)\n"
  },
  {
    "path": "gcpdiag/queries/cloudrun_stub.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Stub API calls used in cloudrun.py for testing.\n\nInstead of doing real API calls, we return test JSON data.\n\"\"\"\nimport json\nimport re\n\nimport googleapiclient.errors\nimport httplib2\n\nfrom gcpdiag.queries import apis_stub\n\n#pylint: disable=unused-argument\n\n\nclass CloudRunApiStub:\n  \"\"\"Mock object to simulate function api calls.\"\"\"\n\n  def projects(self):\n    return self\n\n  def locations(self):\n    return self\n\n  def services(self):\n    return self\n\n  def list(self, **args):\n    if 'parent' in args:\n      m = re.match(r'projects/([^/]+)/', args['parent'])\n      project_id = m.group(1)\n      return apis_stub.RestCallStub(project_id, 'cloudrun_services')\n    m = re.match(r'projects/([^/]+)', args['name'])\n    project_id = m.group(1)\n    return apis_stub.RestCallStub(project_id, 'locations')\n\n  def get(self, name):\n    return GetServiceRequest(name)\n\n\nclass GetServiceRequest:\n  \"\"\"Fake get service request that finds the service in the captured list response.\"\"\"\n\n  def __init__(self, name: str):\n    self.name = name\n\n  def execute(self, num_retries=0):\n    m = re.match(r'projects/([^/]+)/locations/[^/]+/services/[^/]+', self.name)\n    project_id = m.group(1)\n    json_dir = apis_stub.get_json_dir(project_id)\n    with open(json_dir / 'cloudrun_services.json',\n              encoding='utf-8') as json_file:\n      response = json.load(json_file)\n      services = response['services']\n    for service in services:\n      if service['name'] == self.name:\n        return service\n    raise googleapiclient.errors.HttpError(httplib2.Response({'status': 404}),\n                                           b'Not found')\n"
  },
  {
    "path": "gcpdiag/queries/cloudrun_test.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Test code in cloudrun.py.\"\"\"\n\nfrom unittest import mock\n\nfrom gcpdiag import models\nfrom gcpdiag.queries import apis_stub, cloudrun\n\nDUMMY_PROJECT_NAME = 'gcpdiag-cloudrun1-aaaa'\n\n\n@mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)\nclass TestCloudRun:\n  \"\"\"Test Cloud Run\"\"\"\n\n  def test_get_services(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME,\n                             locations=['us-central1'])\n    services = cloudrun.get_services(context)\n    assert len(services) == 1\n\n  def test_get_service(self):\n    service = cloudrun.get_service(DUMMY_PROJECT_NAME, 'us-central1',\n                                   'cloudrun1')\n    expected = 'projects/gcpdiag-cloudrun1-aaaa/locations/us-central1/services/cloudrun1'\n    assert service.full_path == expected\n"
  },
  {
    "path": "gcpdiag/queries/cloudsql.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Queries related to CloudSQL.\"\"\"\n\nimport ipaddress\nfrom typing import Iterable, List\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import caching, config, models\nfrom gcpdiag.queries import apis, network\n\n\nclass Instance(models.Resource):\n  \"\"\" Represents CloudSQL Instance\"\"\"\n  _resource_data: dict\n\n  def __init__(self, project_id: str, resource_data: dict):\n    super().__init__(project_id)\n    self._resource_data = resource_data\n\n  @property\n  def name(self) -> str:\n    return self._resource_data['name']\n\n  @property\n  def state(self) -> str:\n    return self._resource_data['state']\n\n  @property\n  def version(self) -> str:\n    return self._resource_data['databaseVersion']\n\n  @property\n  def is_regional(self) -> bool:\n    return get_path(self._resource_data, ('settings', 'availabilityType'),\n                    default='ZONAL') == 'REGIONAL'\n\n  @property\n  def ip_addresses(self) -> Iterable[network.IPv4AddrOrIPv6Addr]:\n    return [\n        ipaddress.ip_address(nic['ipAddress'])\n        for nic in self._resource_data.get('ipAddresses', [])\n    ]\n\n  @property\n  def has_public_ip(self) -> bool:\n    return get_path(self._resource_data,\n                    ('settings', 'ipConfiguration', 'ipv4Enabled'))\n\n  @property\n  def has_maint_window(self) -> int:\n    try:\n      return get_path(self._resource_data,\n                      ('settings', 'maintenanceWindow', 'day'))\n    except KeyError:\n      return 0\n\n  @property\n  def is_storage_auto_resize_enabled(self) -> bool:\n    return get_path(self._resource_data, ('settings', 'storageAutoResize'))\n\n  @property\n  def has_del_protection(self) -> bool:\n    return get_path(self._resource_data,\n                    ('settings', 'deletionProtectionEnabled'), False)\n\n  @property\n  def authorizednetworks(self) -> List[str]:\n    authorizednetworks = get_path(\n        self._resource_data,\n        ('settings', 'ipConfiguration', 'authorizedNetworks'), [])\n    return [\n        authorizednetwork['value'] for authorizednetwork in authorizednetworks\n    ]\n\n  @property\n  def is_publically_accessible(self) -> List[str]:\n    return self.authorizednetworks\n\n  @property\n  def is_automated_backup_enabled(self) -> bool:\n    return get_path(self._resource_data,\n                    ('settings', 'backupConfiguration', 'enabled'))\n\n  @property\n  def is_suspended_state(self) -> bool:\n    return self.state == 'SUSPENDED'\n\n  @property\n  def is_shared_core(self) -> bool:\n    shared_core_tiers = ['db-g1-small', 'db-f1-micro']\n    return get_path(self._resource_data,\n                    ('settings', 'tier')) in shared_core_tiers\n\n  @property\n  def is_high_available(self) -> bool:\n    return get_path(self._resource_data,\n                    ('settings', 'availabilityType')) == 'REGIONAL'\n\n  @property\n  def flags(self) -> dict:\n    flags = get_path(self._resource_data, ('settings', 'databaseFlags'), [])\n    return {flag['name']: flag['value'] for flag in flags}\n\n  @property\n  def is_log_output_configured_as_table(self) -> bool:\n    return self.flags.get('log_output') == 'TABLE'\n\n  @property\n  def self_link(self) -> str:\n    return self._resource_data['selfLink']\n\n  @property\n  def full_path(self) -> str:\n    return self.self_link\n\n  def __str__(self) -> str:\n    return self.self_link\n\n\n@caching.cached_api_call\ndef get_instances(context: models.Context) -> Iterable[Instance]:\n  if not apis.is_enabled(context.project_id, 'sqladmin'):\n    return []\n\n  api = apis.get_api('sqladmin', 'v1', context.project_id)\n  query = api.instances().list(project=context.project_id)\n  resp = query.execute(num_retries=config.API_RETRIES)\n  databases = []\n  for d in resp.get('items', []):\n    location = d.get('region', '')\n    labels = d.get('userLabels', {})\n    resource = d.get('name', '')\n    if not context.match_project_resource(\n        location=location, labels=labels, resource=resource):\n      continue\n\n    databases.append(Instance(context.project_id, d))\n  return databases\n"
  },
  {
    "path": "gcpdiag/queries/cloudsql_stub.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Stub API calls used in cloudsql.py for testing.\n\nInstead of doing real API calls, we return test JSON data.\n\"\"\"\n\nfrom gcpdiag.queries import apis_stub\n\n#pylint: disable=unused-argument\n\n\nclass CloudSQLApiStub:\n  \"\"\"Mock object to simulate CloudSQL api calls.\"\"\"\n\n  def instances(self):\n    return self\n\n  # pylint: disable=invalid-name\n  def list(self, project):\n    return apis_stub.RestCallStub(project, 'cloudsql-instances', default={})\n"
  },
  {
    "path": "gcpdiag/queries/cloudsql_test.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test code in cloudsql.py.\"\"\"\n\nimport ipaddress\nfrom unittest import mock\n\nfrom gcpdiag import models\nfrom gcpdiag.queries import apis_stub, cloudsql\n\nDUMMY_PROJECT_NAME = 'gcpdiag-cloudsql1-aaaa'\nINSTANCE_IP = ipaddress.ip_address('172.17.0.3')\n\n\n@mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)\nclass TestCloudSQL:\n  \"\"\"Test CloudSQL\"\"\"\n\n  def test_get_instances(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    instances = cloudsql.get_instances(context)\n    assert len(instances) == 1\n\n  def test_docker_bridge_ip_addresses(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    instances = cloudsql.get_instances(context)\n    assert INSTANCE_IP in instances[0].ip_addresses\n"
  },
  {
    "path": "gcpdiag/queries/composer.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Queries related to Composer.\"\"\"\n\nimport logging\nimport re\nfrom typing import Iterable, List, Tuple\n\nfrom boltons.iterutils import get_path\nfrom packaging import version\n\nfrom gcpdiag import caching, models\nfrom gcpdiag.lint import get_executor\nfrom gcpdiag.queries import apis, crm\n\n\nclass Environment(models.Resource):\n  \"\"\" Represents Composer environment \"\"\"\n  _resource_data: dict\n\n  def __init__(self, project_id: str, resource_data: dict):\n    super().__init__(project_id)\n    self._resource_data = resource_data\n    self.region, self.name = self.parse_full_path()\n    self.version_pattern = re.compile(r'composer-(.*)-airflow-(.*)')\n\n  @property\n  def num_schedulers(self) -> int:\n    return get_path(self._resource_data,\n                    ('config', 'workloadsConfig', 'scheduler', 'count'),\n                    default=1)\n\n  @property\n  def worker_cpu(self) -> float:\n    return get_path(self._resource_data,\n                    ('config', 'workloadsConfig', 'worker', 'cpu'))\n\n  @property\n  def worker_memory_gb(self) -> float:\n    return get_path(self._resource_data,\n                    ('config', 'workloadsConfig', 'worker', 'memoryGb'))\n\n  @property\n  def worker_max_count(self) -> int:\n    return get_path(self._resource_data,\n                    ('config', 'workloadsConfig', 'worker', 'maxCount'))\n\n  @property\n  def worker_concurrency(self) -> float:\n\n    def default_value():\n      airflow_version = self.airflow_version\n\n      if version.parse(airflow_version) < version.parse('2.3.3'):\n        return 12 * self.worker_cpu\n      else:\n        return min(32, 12 * self.worker_cpu, 8 * self.worker_memory_gb)\n\n    return float(\n        self.airflow_config_overrides.get('celery-worker_concurrency',\n                                          default_value()))\n\n  @property\n  def parallelism(self) -> float:\n    return float(self.airflow_config_overrides.get('core-parallelism', 'inf'))\n\n  @property\n  def composer_version(self) -> str:\n    v = self.version_pattern.search(self.image_version)\n    assert v is not None\n    return v.group(1)\n\n  @property\n  def airflow_version(self) -> str:\n    v = self.version_pattern.search(self.image_version)\n    assert v is not None\n    return v.group(2)\n\n  @property\n  def is_composer2(self) -> bool:\n    return self.composer_version.startswith('2')\n\n  @property\n  def full_path(self) -> str:\n    return self._resource_data['name']\n\n  @property\n  def state(self) -> str:\n    return self._resource_data['state']\n\n  @property\n  def image_version(self) -> str:\n    return self._resource_data['config']['softwareConfig']['imageVersion']\n\n  @property\n  def short_path(self) -> str:\n    return f'{self.project_id}/{self.region}/{self.name}'\n\n  @property\n  def airflow_config_overrides(self) -> dict:\n    return self._resource_data['config']['softwareConfig'].get(\n        'airflowConfigOverrides', {})\n\n  @property\n  def service_account(self) -> str:\n    sa = self._resource_data['config']['nodeConfig'].get('serviceAccount')\n    if sa is None:\n      # serviceAccount is marked as optional in REST API docs\n      # using a default GCE SA as a fallback\n      project_nr = crm.get_project(self.project_id).number\n      sa = f'{project_nr}-compute@developer.gserviceaccount.com'\n    return sa\n\n  def parse_full_path(self) -> Tuple[str, str]:\n    match = re.match(r'projects/[^/]*/locations/([^/]*)/environments/([^/]*)',\n                     self.full_path)\n    if not match:\n      raise RuntimeError(f'Can\\'t parse full_path {self.full_path}')\n    return match.group(1), match.group(2)\n\n  def __str__(self) -> str:\n    return self.short_path\n\n  def is_private_ip(self) -> bool:\n    return self._resource_data['config']['privateEnvironmentConfig'].get(\n        'enablePrivateEnvironment', False)\n\n  @property\n  def gke_cluster(self) -> str:\n    return self._resource_data['config']['gkeCluster']\n\n\nCOMPOSER_REGIONS = [\n    'asia-northeast2', 'us-central1', 'northamerica-northeast1', 'us-west3',\n    'southamerica-east1', 'us-east1', 'asia-northeast1', 'europe-west1',\n    'europe-west2', 'asia-northeast3', 'us-west4', 'asia-east2',\n    'europe-central2', 'europe-west6', 'us-west2', 'australia-southeast1',\n    'europe-west3', 'asia-south1', 'us-west1', 'us-east4', 'asia-southeast1'\n]\n\n\ndef _query_region_envs(region, api, project_id):\n  query = api.projects().locations().environments().list(\n      parent=f'projects/{project_id}/locations/{region}')\n  # be careful not to retry too many times because querying all regions\n  # sometimes causes requests to fail permanently\n  resp = query.execute(num_retries=1)\n  return resp.get('environments', [])\n\n\ndef _query_regions_envs(regions, api, project_id, context: models.Context):\n  result: List[Environment] = []\n  executor = get_executor(context)\n  for descriptions in executor.map(\n      lambda r: _query_region_envs(r, api, project_id), regions):\n    result += descriptions\n  return result\n\n\n@caching.cached_api_call\ndef get_environments(context: models.Context) -> Iterable[Environment]:\n  environments: List[Environment] = []\n  if not apis.is_enabled(context.project_id, 'composer'):\n    return environments\n  api = apis.get_api('composer', 'v1', context.project_id)\n\n  for env in _query_regions_envs(COMPOSER_REGIONS, api, context.project_id,\n                                 context):\n    # projects/{projectId}/locations/{locationId}/environments/{environmentId}.\n    result = re.match(r'projects/[^/]+/locations/([^/]+)/environments/([^/]+)',\n                      env['name'])\n    if not result:\n      logging.error('invalid composer name: %s', env['name'])\n      continue\n    location = result.group(1)\n    labels = env.get('labels', {})\n    name = result.group(2)\n    if not context.match_project_resource(\n        location=location, labels=labels, resource=name):\n      continue\n\n    environments.append(Environment(context.project_id, env))\n  return environments\n"
  },
  {
    "path": "gcpdiag/queries/composer_stub.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Stub API calls used in composer.py for testing.\n\nInstead of doing real API calls, we return test JSON data.\n\"\"\"\n\nimport re\n\nfrom gcpdiag.queries import apis_stub\n\n#pylint: disable=unused-argument\n\n\nclass ComposerApiStub:\n  \"\"\"Mock object to simulate Composer api calls.\"\"\"\n\n  def projects(self):\n    return self\n\n  def locations(self):\n    return self\n\n  def environments(self):\n    return self\n\n  # pylint: disable=invalid-name\n  def list(self, parent):\n    match = re.match(r'projects/([^/]*)/locations/([^/]*)', parent)\n    if not match:\n      raise RuntimeError(f\"Can't parse parent {parent}\")\n    project_id, region = match.group(1), match.group(2)\n    return apis_stub.RestCallStub(project_id,\n                                  f'composer-environments-{region}',\n                                  default={})\n"
  },
  {
    "path": "gcpdiag/queries/composer_test.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test code in composer.py.\"\"\"\n\nfrom unittest import mock\n\nfrom gcpdiag import models\nfrom gcpdiag.queries import apis_stub, composer\n\nDUMMY_PROJECT_NAME = 'gcpdiag-composer1-aaaa'\nGCE_SERVICE_ACCOUNT = '12340005-compute@developer.gserviceaccount.com'\nENV_SERVICE_ACCOUNT = f'env2sa@{DUMMY_PROJECT_NAME}.iam.gserviceaccount.com'\n\n\n@mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)\nclass TestComposer:\n  \"\"\"Test Composer\"\"\"\n\n  def test_get_environments(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    environments = composer.get_environments(context)\n    assert len(environments) == 2\n\n  def test_service_account(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    environments = composer.get_environments(context)\n    assert ('env1', GCE_SERVICE_ACCOUNT) in [\n        (c.name, c.service_account) for c in environments\n    ]\n    assert ('env2', ENV_SERVICE_ACCOUNT) in [\n        (c.name, c.service_account) for c in environments\n    ]\n\n  def test_is_private_ip(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    environments = composer.get_environments(context)\n    assert ('env1', False) in [(c.name, c.is_private_ip()) for c in environments\n                              ]\n    assert ('env2', True) in [(c.name, c.is_private_ip()) for c in environments]\n"
  },
  {
    "path": "gcpdiag/queries/crm.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Queries related to Resource Manager (projects, resources).\"\"\"\n\nimport logging\nimport re\nimport sys\nfrom typing import List\n\nimport googleapiclient\n\nfrom gcpdiag import caching, config, models, utils\nfrom gcpdiag.queries import apis, apis_utils\nfrom gcpdiag.queries.billing import ProjectBillingInfo, get_billing_info\n\n\nclass Project(models.Resource):\n  \"\"\"Represents a Project resource.\n\n  See also the API documentation:\n  https://cloud.google.com/resource-manager/reference/rest/v3/projects/get\n  \"\"\"\n  _id: str\n  _resource_data: dict\n  _number: int\n\n  def __init__(self, resource_data):\n    super().__init__(project_id=resource_data['projectId'])\n    self._id = resource_data['projectId']\n    self._resource_data = resource_data\n    match = re.match(r'projects/(\\d+)$', resource_data['name'])\n    if not match:\n      raise ValueError(f'can\\'t determine project id ({resource_data})')\n    self._number = int(match.group(1))\n\n  @property\n  def number(self) -> int:\n    return self._number\n\n  @property\n  def id(self) -> str:\n    \"\"\"Project id (not project number).\"\"\"\n    return self._id\n\n  @property\n  def name(self) -> str:\n    return self._resource_data['displayName']\n\n  @property\n  def full_path(self) -> str:\n    return f'projects/{self._id}'\n\n  @property\n  def short_path(self) -> str:\n    return self._id\n\n  @property\n  def default_compute_service_account(self) -> str:\n    return f'{self.number}-compute@developer.gserviceaccount.com'\n\n  @property\n  def parent(self) -> str:\n    return self._resource_data['parent']\n\n\n@caching.cached_api_call\ndef get_project(project_id: str) -> Project:\n  '''Attempts to retrieve project details for the supplied project id or number.\n    If the project is found/accessible, it returns a Project object with the resource data.\n    If the project cannot be retrieved, the application raises one of the exceptions below.\n\n    Args:\n        project_id (str): The project id or number of\n        the project (e.g., \"123456789\", \"example-project\").\n\n    Returns:\n        Project: An object representing the project's full details.\n\n    Raises:\n        utils.GcpApiError: If there is an issue calling the GCP/HTTP Error API.\n\n    Usage:\n        When using project identifier from gcpdiag.models.Context\n\n        project = crm.get_project(context.project_id)\n\n        An unknown project identifier\n        try:\n          project = crm.get_project(\"123456789\")\n        except:\n          # Handle exception\n        else:\n          # use project data\n  '''\n  try:\n    logging.debug('retrieving project %s ', project_id)\n    crm_api = apis.get_api('cloudresourcemanager', 'v3', project_id)\n    request = crm_api.projects().get(name=f'projects/{project_id}')\n    response = request.execute(num_retries=config.API_RETRIES)\n  except googleapiclient.errors.HttpError as e:\n    error = utils.GcpApiError(response=e)\n    if 'IAM_PERMISSION_DENIED' == error.reason:\n      print(\n          f'[ERROR]:Authenticated account doesn\\'t have access to project details of {project_id}.'\n          f'\\nExecute:\\ngcloud projects add-iam-policy-binding {project_id} --role=roles/viewer'\n          '--member=\"user|group|serviceAccount:EMAIL_ACCOUNT\"',\n          file=sys.stderr)\n    else:\n      print(f'[ERROR]:can\\'t access project {project_id}: {error.message}.',\n            file=sys.stderr)\n    print(\n        f'[DEBUG]: An Http Error occurred whiles accessing projects.get \\n\\n{e}',\n        file=sys.stderr)\n    raise error from e\n  else:\n    return Project(resource_data=response)\n\n\n@caching.cached_api_call\ndef get_all_projects_in_parent(project_id: str) -> List[ProjectBillingInfo]:\n  \"\"\"Get all projects in the Parent Folder that current user has\n  permission to view\"\"\"\n  projects: List[ProjectBillingInfo] = []\n  if (not project_id) or (not apis.is_enabled(project_id, 'cloudbilling')):\n    return projects\n  project = get_project(project_id)\n  p_filter = ('parent.type:' + project.parent.split('/')[0][:-1] +\n              ' parent.id:' +\n              project.parent.split('/')[1] if project.parent else '')\n\n  api = apis.get_api('cloudresourcemanager', 'v3')\n  for p in apis_utils.list_all(request=api.projects().search(query=p_filter),\n                               next_function=api.projects().search_next,\n                               response_keyword='projects'):\n    try:\n      crm_api = apis.get_api('cloudresourcemanager', 'v3', p['projectId'])\n      p_name = 'projects/' + p['projectId'] if 'projects/' not in p[\n          'projectId'] else p['projectId']\n      request = crm_api.projects().get(name=p_name)\n      response = request.execute(num_retries=config.API_RETRIES)\n      projects.append(get_billing_info(response['projectId']))\n    except (utils.GcpApiError, googleapiclient.errors.HttpError) as error:\n      if isinstance(error, googleapiclient.errors.HttpError):\n        error = utils.GcpApiError(error)\n      if error.reason in [\n          'IAM_PERMISSION_DENIED', 'USER_PROJECT_DENIED', 'SERVICE_DISABLED'\n      ]:\n        # skip projects that user does not have permissions on\n        continue\n      else:\n        print(\n            f'[ERROR]: An Http Error occurred whiles accessing projects.get \\n\\n{error}',\n            file=sys.stderr)\n      raise error from error\n  return projects\n\n\nclass Organization(models.Resource):\n  \"\"\"Represents an Organization resource.\n\n  See also the API documentation:\n  https://cloud.google.com/resource-manager/reference/rest/v1/organizations/get\n  \"\"\"\n  _resource_data: dict\n\n  def __init__(self, project_id, resource_data):\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n\n  @property\n  def id(self) -> str:\n    \"\"\"The numeric organization ID.\"\"\"\n    # Note: organization ID is returned in the format 'organizations/12345'\n    return self._resource_data['name'].split('/')[-1]\n\n  @property\n  def name(self) -> str:\n    \"\"\"The organization's display name.\"\"\"\n    return self._resource_data['displayName']\n\n  @property\n  def full_path(self) -> str:\n    return self._resource_data['name']\n\n  @property\n  def short_path(self) -> str:\n    return f\"organizations/{self.id}\"\n\n\n@caching.cached_api_call\ndef get_organization(project_id: str,\n                     skip_error_print: bool = True) -> Organization | None:\n  \"\"\"Retrieves the parent Organization for a given project.\n\n  This function first finds the project's ancestry to identify the\n  organization ID, then fetches the organization's details.\n\n  Args:\n      project_id (str): The ID of the project whose organization is to be fetched.\n\n  Returns:\n      An Organization object if the project belongs to an organization,\n      otherwise None.\n\n  Raises:\n        utils.GcpApiError: If there is an issue calling the GCP/HTTP Error API.\n  \"\"\"\n  try:\n    logging.debug('retrieving ancestry for project %s', project_id)\n    crm_v1_api = apis.get_api('cloudresourcemanager', 'v1', project_id)\n    ancestry_request = crm_v1_api.projects().getAncestry(projectId=project_id)\n    ancestry_response = ancestry_request.execute(num_retries=config.API_RETRIES)\n\n    org_id = None\n    for ancestor in ancestry_response.get('ancestor', []):\n      if ancestor.get('resourceId', {}).get('type') == 'organization':\n        org_id = ancestor['resourceId']['id']\n        break\n\n    if not org_id:\n      logging.debug('project %s is not part of an organization', project_id)\n      return None\n\n    crm_v1_api = apis.get_api('cloudresourcemanager', 'v1', project_id)\n    org_request = crm_v1_api.organizations().get(name=f'organizations/{org_id}')\n    org_response = org_request.execute(num_retries=config.API_RETRIES)\n\n    return Organization(project_id=project_id, resource_data=org_response)\n\n  except googleapiclient.errors.HttpError as e:\n    error = utils.GcpApiError(response=e)\n    if not skip_error_print:\n      print(\n          f'[ERROR]: can\\'t access organization for project {project_id}: {error.message}.',\n          file=sys.stderr)\n      print(\n          f'[DEBUG]: An Http Error occurred while accessing organization details \\n\\n{e}',\n          file=sys.stderr)\n    raise error from e\n"
  },
  {
    "path": "gcpdiag/queries/crm_stub.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Stub API calls used in crm.py for testing.\n\nInstead of doing real API calls, we return test JSON data.\n\"\"\"\n\nimport re\n\nfrom gcpdiag.queries import apis_stub\n\n# pylint: disable=unused-argument\n\nDUMMY_PROJECT_ID = 'gcpdiag-billing1-aaaa'\n\n\nclass CrmApiStub:\n  \"\"\"Mock object to simulate CRM API calls.\"\"\"\n\n  # example API call:\n  # crm_api.projects().getIamPolicy(resource=self._project_id).execute()\n\n  def new_batch_http_request(self):\n    return apis_stub.BatchRequestStub()\n\n  def projects(self):\n    return self\n\n  def organizations(self):\n    return self\n\n  # pylint: disable=redefined-builtin\n  def list(self, parent=None, page_token=None, filter=None):\n    if not parent:\n      return apis_stub.RestCallStub(DUMMY_PROJECT_ID, 'projects')\n\n  def list_next(self, previous_request, previous_response):\n    return None\n\n  def search(self, query=None):\n    return apis_stub.RestCallStub(DUMMY_PROJECT_ID, 'projects')\n\n  def search_next(self, previous_request, previous_response):\n    return None\n\n  # pylint: disable=invalid-name\n  def get(self, project_id=None, name=None):\n    if not project_id and name is not None:\n      m = re.match(r'projects/(.*)', name)\n      project_id = m.group(1)\n    return apis_stub.RestCallStub(project_id, 'project')\n\n  # pylint: disable=invalid-name\n  def getAncestry(self, projectId='gcpdiag-bigquery1-aaaa', project_id=None):\n    if not project_id and projectId is not None:\n      #m = re.match(r'^(.*?):getAncestry$', projectId)\n      #project_id = m.group(1)\n      project_id = projectId\n    return apis_stub.RestCallStub(project_id, 'ancestor')\n\n  # pylint: disable=invalid-name\n  def getIamPolicy(self, resource):\n    m = re.match(r'projects/(.*)', resource)\n    project_id = m.group(1)\n    return apis_stub.RestCallStub(project_id, 'iam-policy')\n\n  # pylint: disable=invalid-name\n  def getEffectiveOrgPolicy(self, resource, body):\n    m = re.match(r'projects/([^/]+)', resource)\n    if not m:\n      raise ValueError(\n          'only projects are supported for getEffectiveOrgPolicy stub')\n    project_id = m.group(1)\n    if 'constraint' not in body:\n      raise ValueError('constraint not defined')\n    m = re.match(r'(customConstraints|constraints)/([^/]+)', body['constraint'])\n    if not m:\n      raise ValueError(\n          f\"constraint doesn\\'t start with constraints/: {body['constraint']}\")\n    return apis_stub.RestCallStub(project_id, f'org-constraint-{m.group(2)}')\n\n  def listOrgPolicies(self, resource):\n    m = re.match(r'projects/([^/]+)', resource)\n    if not m:\n      raise ValueError('only projects are supported for listOrgPolicies stub')\n    project_id = m.group(1)\n    return apis_stub.RestCallStub(project_id, 'org-policies')\n\n  def listOrgPolicies_next(self, previous_request, previous_response):\n    if isinstance(previous_response,\n                  dict) and previous_response.get('nextPageToken'):\n      return apis_stub.RestCallStub(\n          project_id=previous_request.project_id,\n          json_basename=previous_request.json_basename,\n          page=previous_request.page + 1,\n      )\n    else:\n      return None\n"
  },
  {
    "path": "gcpdiag/queries/crm_test.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test code in crm.py.\"\"\"\n\nfrom unittest import mock\n\nimport diskcache\n\nfrom gcpdiag.queries import apis_stub, crm\n\nDUMMY_PROJECT_ID = 'gcpdiag-gke1-aaaa'\nDUMMY_PROJECT_NR = 12340002\nDUMMY_PROJECT_NAME = 'gcpdiag test - gke1'\nDUMMY_PROJECT_PARENT = 'folders/422810093603'\n\n\ndef get_cache_stub():\n  \"\"\"Use a temporary directory instead of the user cache for testing.\"\"\"\n  return diskcache.Cache()\n\n\n@mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)\n@mock.patch('gcpdiag.caching.get_disk_cache', new=get_cache_stub)\nclass Test:\n  \"\"\"Test project.py\"\"\"\n\n  def test_get_project(self):\n    p = crm.get_project(DUMMY_PROJECT_ID)\n    assert p.id == DUMMY_PROJECT_ID\n    assert p.number == DUMMY_PROJECT_NR\n    assert p.name == DUMMY_PROJECT_NAME\n    assert p.parent == DUMMY_PROJECT_PARENT\n\n  # getIamPolicy is tested in iam_test.py\n  # getEffectiveOrgPolicy is tested in orgpolicy_test.py\n  # listOrgPolicies is tested in orgpolicy_test.py\n"
  },
  {
    "path": "gcpdiag/queries/dataflow.py",
    "content": "\"\"\"Queries related to Dataflow.\"\"\"\n\nimport logging\nfrom datetime import datetime\nfrom typing import List, Optional, Union\n\nimport googleapiclient.errors\n\nfrom gcpdiag import caching, config, models, utils\nfrom gcpdiag.executor import get_executor\nfrom gcpdiag.queries import apis, apis_utils, logs\n\nDATAFLOW_REGIONS = [\n    'asia-northeast2', 'us-central1', 'northamerica-northeast1', 'us-west3',\n    'southamerica-east1', 'us-east1', 'asia-northeast1', 'europe-west1',\n    'europe-west2', 'asia-northeast3', 'us-west4', 'asia-east2',\n    'europe-central2', 'europe-west6', 'us-west2', 'australia-southeast1',\n    'europe-west3', 'asia-south1', 'us-west1', 'us-east4', 'asia-southeast1'\n]\n\n\nclass Job(models.Resource):\n  \"\"\"Represents Dataflow job.\n\n  resource_data is of the form similar to:\n  {'id': 'my_job_id',\n  'projectId': 'my_project_id',\n  'name': 'pubsubtogcs-20240328-122953',\n  'environment': {},\n  'currentState': 'JOB_STATE_FAILED',\n  'currentStateTime': '2024-03-28T12:34:27.383249Z',\n  'createTime': '2024-03-28T12:29:55.284524Z',\n  'location': 'europe-west2',\n  'startTime': '2024-03-28T12:29:55.284524Z'}\n  \"\"\"\n  _resource_data: dict\n  project_id: str\n\n  def __init__(self, project_id: str, resource_data: dict):\n    super().__init__(project_id)\n    self._resource_data = resource_data\n\n  @property\n  def full_path(self) -> str:\n    return self._resource_data['name']\n\n  @property\n  def id(self) -> str:\n    return self._resource_data['id']\n\n  @property\n  def state(self) -> str:\n    return self._resource_data['currentState']\n\n  @property\n  def job_type(self) -> str:\n    return self._resource_data['type']\n\n  @property\n  def location(self) -> str:\n    return self._resource_data['location']\n\n  @property\n  def sdk_support_status(self) -> str:\n    return self._resource_data['jobMetadata']['sdkVersion']['sdkSupportStatus']\n\n  @property\n  def sdk_language(self) -> str:\n    return self._resource_data['jobMetadata']['sdkVersion'][\n        'versionDisplayName']\n\n  @property\n  def minutes_in_current_state(self) -> int:\n    timestamp = datetime.strptime(self._resource_data['currentStateTime'],\n                                  '%Y-%m-%dT%H:%M:%S.%fZ')\n    delta = datetime.now() - timestamp\n    return int(delta.total_seconds() // 60)\n\n\ndef get_region_dataflow_jobs(api, context: models.Context,\n                             region: str) -> List[Job]:\n  response = apis_utils.list_all(\n      request=api.projects().locations().jobs().list(\n          projectId=context.project_id, location=region),\n      next_function=api.projects().locations().jobs().list_next,\n      response_keyword='jobs')\n  jobs = []\n  for job in response:\n    location = job.get('location', '')\n    labels = job.get('labels', {})\n    name = job.get('name', '')\n\n    # add job id as one of labels for filtering\n    labels['id'] = job.get('id', '')\n\n    # we could get the specific job but correctly matching the location will take too\n    # much effort. Hence get all the jobs and filter afterwards\n    # https://cloud.google.com/dataflow/docs/reference/rest/v1b3/projects.jobs/list#query-parameters\n    if not context.match_project_resource(\n        location=location, labels=labels, resource=name):\n      continue\n    jobs.append(Job(context.project_id, job))\n  return jobs\n\n\n@caching.cached_api_call\ndef get_all_dataflow_jobs(context: models.Context) -> List[Job]:\n  api = apis.get_api('dataflow', 'v1b3', context.project_id)\n\n  if not apis.is_enabled(context.project_id, 'dataflow'):\n    return []\n\n  result: List[Job] = []\n  executor = get_executor(context)\n  for jobs in executor.map(lambda r: get_region_dataflow_jobs(api, context, r),\n                           DATAFLOW_REGIONS):\n    result += jobs\n\n  print(f'\\n\\nFound {len(result)} Dataflow jobs\\n')\n\n  # print one Dataflow job id when it is found\n  if context.labels and result and 'id' in context.labels:\n    print(f'{result[0].full_path} - {result[0].id}\\n')\n\n  return result\n\n\n@caching.cached_api_call\ndef get_job(project_id: str, job: str, region: str) -> Union[Job, None]:\n  \"\"\"Fetch a specific Dataflow job.\"\"\"\n  api = apis.get_api('dataflow', 'v1b3', project_id)\n\n  if not apis.is_enabled(project_id, 'dataflow'):\n    return None\n\n  query = (api.projects().locations().jobs().get(projectId=project_id,\n                                                 location=region,\n                                                 jobId=job))\n  try:\n    resp = query.execute(num_retries=config.API_RETRIES)\n    return Job(project_id, resp)\n  except googleapiclient.errors.HttpError as err:\n    raise utils.GcpApiError(err) from err\n\n\n@caching.cached_api_call\ndef get_all_dataflow_jobs_for_project(\n    project_id: str,\n    filter_str: Optional[str] = None,\n) -> Union[List[Job], None]:\n  \"\"\"Fetch all Dataflow jobs for a project.\"\"\"\n  api = apis.get_api('dataflow', 'v1b3', project_id)\n\n  if not apis.is_enabled(project_id, 'dataflow'):\n    return None\n\n  jobs: List[Job] = []\n\n  request = (api.projects().jobs().aggregated(projectId=project_id,\n                                              filter=filter_str))\n  logging.debug('listing dataflow jobs of project %s', project_id)\n\n  while request:  # Continue as long as there are pages\n    response = request.execute(num_retries=config.API_RETRIES)\n    if 'jobs' in response:\n      jobs.extend([Job(project_id, job) for job in response['jobs']])\n    request = (api.projects().jobs().aggregated_next(\n        previous_request=request, previous_response=response))\n  return jobs\n\n\n@caching.cached_api_call\ndef logs_excluded(project_id: str) -> Union[bool, None]:\n  \"\"\"Check if Dataflow Logs are excluded.\"\"\"\n\n  if not apis.is_enabled(project_id, 'dataflow'):\n    return None\n\n  exclusions = logs.exclusions(project_id)\n  if exclusions is None:\n    return None\n  else:\n    for log_exclusion in exclusions:\n      if 'resource.type=\"dataflow_step\"' in log_exclusion.filter and log_exclusion.disabled:\n        return True\n  return False\n"
  },
  {
    "path": "gcpdiag/queries/dataflow_stub.py",
    "content": "\"\"\"Mocks to simulate Dataflow API calls.\"\"\"\n\nfrom gcpdiag.queries import apis_stub\n\n\nclass DataflowApiStub(apis_stub.ApiStub):\n  \"\"\"Mock object to simulate instance api calls.\"\"\"\n\n  def projects(self):\n    return self\n\n  def locations(self):\n    return self\n\n  def jobs(self):\n    return DataflowJobsStub()\n\n\nclass DataflowJobsStub:\n  \"\"\"Stub for Testing Dataflow.\"\"\"\n\n  # pylint: disable=invalid-name\n  def list(self, projectId, location):\n    return apis_stub.RestCallStub(projectId,\n                                  f'dataflow-jobs-{location}',\n                                  default={})\n\n  def list_next(self, previous_request, previous_response):\n    pass\n\n  # pylint: disable=unused-argument\n  def get(self, projectId, location, jobId):\n    return apis_stub.RestCallStub(projectId,\n                                  f'dataflow-jobs-{location}-streaming')\n\n  def aggregated(\n      self,\n      projectId,  # pylint: disable=invalid-name\n      filter=None):  # pylint: disable=redefined-builtin\n    return apis_stub.RestCallStub(projectId, 'dataflow-jobs-aggregated')\n\n  def aggregated_next(self, previous_request, previous_response):\n    if isinstance(previous_response,\n                  dict) and previous_response.get('nextPageToken'):\n      return apis_stub.RestCallStub(\n          project_id=previous_request.project_id,\n          json_basename=previous_request.json_basename,\n          page=previous_request.page + 1,\n      )\n    else:\n      return None\n"
  },
  {
    "path": "gcpdiag/queries/dataflow_test.py",
    "content": "\"\"\"Test code in dataflow.py.\"\"\"\n\nimport unittest\nfrom unittest import mock\n\nfrom gcpdiag import models\nfrom gcpdiag.queries import apis_stub, dataflow\n\nDUMMY_PROJECT_NAME = 'gcpdiag-dataflow1-aaaa'\n\n\n@mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)\nclass TestDataFlow(unittest.TestCase):\n  \"\"\"Test Dataflow.\"\"\"\n\n  def test_get_jobs(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    jobs = dataflow.get_all_dataflow_jobs(context)\n    assert {j.state for j in jobs} != {'JOB_STATE_FAILED'}\n    assert None not in [j.minutes_in_current_state for j in jobs]\n\n  def test_get_jobs_with_id(self):\n    context = models.Context(\n        project_id=DUMMY_PROJECT_NAME  #,\n        # labels={'id': '2022-09-19_09_20_57-11848816011797209899'})\n    )\n    jobs = dataflow.get_all_dataflow_jobs(context=context)\n    assert len(jobs) != 0\n    sample_job = dataflow.get_job(project_id=context.project_id,\n                                  job=jobs[0].id,\n                                  region='us-central1')\n    assert sample_job is not None\n\n  def test_get_jobs_for_project(self):\n    jobs = dataflow.get_all_dataflow_jobs_for_project(DUMMY_PROJECT_NAME)\n    assert {j.state for j in jobs} != {'JOB_STATE_FAILED'}\n    assert None not in [j.minutes_in_current_state for j in jobs]\n"
  },
  {
    "path": "gcpdiag/queries/datafusion.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Queries related to Data Fusion.\"\"\"\n\nimport datetime\nimport ipaddress\nimport logging\nimport re\nfrom typing import Dict, Iterable, List, Mapping, Optional\n\nimport googleapiclient.errors\nimport requests\n\nfrom gcpdiag import caching, config, models, utils\nfrom gcpdiag.queries import apis, crm, network, web\nfrom gcpdiag.queries.generic_api.api_build import get_generic\nfrom gcpdiag.utils import Version\n\n# To avoid name conflict with L145\n# pylint: disable=invalid-name\nIPv4NetOrIPv6Net = network.IPv4NetOrIPv6Net\n\n\nclass Instance(models.Resource):\n  \"\"\"Represents a Data Fusion instance.\n\n  https://cloud.google.com/data-fusion/docs/reference/rest/v1/projects.locations.instances#Instance\n  \"\"\"\n\n  _resource_data: dict\n\n  def __init__(self, project_id, resource_data):\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n\n  @property\n  def full_path(self) -> str:\n    \"\"\"\n    The 'name' of the instance is already in the full path form\n\n    projects/{project}/locations/{location}/instances/{instance}.\n    \"\"\"\n    return self._resource_data['name']\n\n  @property\n  def short_path(self) -> str:\n    path = self.full_path\n    path = re.sub(r'^projects/', '', path)\n    path = re.sub(r'/locations/', '/', path)\n    path = re.sub(r'/instances/', '/', path)\n    return path\n\n  @property\n  def name(self) -> str:\n    return utils.extract_value_from_res_name(self._resource_data['name'],\n                                             'instances')\n\n  @property\n  def location(self) -> str:\n    return utils.extract_value_from_res_name(self._resource_data['name'],\n                                             'locations')\n\n  @property\n  def zone(self) -> str:\n    return self._resource_data['zone']\n\n  @property\n  def type(self) -> str:\n    return self._resource_data['type']\n\n  @property\n  def is_basic_type(self) -> bool:\n    return self._resource_data['type'] == 'BASIC'\n\n  @property\n  def is_enterprise_type(self) -> bool:\n    return self._resource_data['type'] == 'ENTERPRISE'\n\n  @property\n  def is_developer_type(self) -> bool:\n    return self._resource_data['type'] == 'DEVELOPER'\n\n  @property\n  def is_private(self) -> bool:\n    if 'privateInstance' in self._resource_data:\n      return self._resource_data['privateInstance']\n    return False\n\n  @property\n  def status(self) -> str:\n    return self._resource_data['state']\n\n  @property\n  def status_details(self) -> Optional[str]:\n    if 'stateMessage' in self._resource_data:\n      return self._resource_data['stateMessage']\n    return None\n\n  @property\n  def is_running(self) -> bool:\n    return self.status == 'ACTIVE'\n\n  @property\n  def is_deleting(self) -> bool:\n    return self._resource_data['state'] == 'DELETING'\n\n  @property\n  def version(self) -> Version:\n    return Version(self._resource_data['version'])\n\n  @property\n  def api_service_agent(self) -> str:\n    return self._resource_data['p4ServiceAccount']\n\n  @property\n  def dataproc_service_account(self) -> str:\n    sa = self._resource_data.get('dataprocServiceAccount')\n    if sa is None:\n      sa = crm.get_project(self.project_id).default_compute_service_account\n    return sa\n\n  @property\n  def tenant_project_id(self) -> str:\n    return self._resource_data['tenantProjectId']\n\n  @property\n  def uses_shared_vpc(self) -> bool:\n    \"\"\"\n    If shared VPC then 'network_string' = 'projects/{host-project-id}/global/networks/{network}'\n    else 'network_string' = {network}\n    \"\"\"\n    if 'network' in self._resource_data['networkConfig']:\n      network_string = self._resource_data['networkConfig']['network']\n      match = re.match(r'projects/([^/]+)/global/networks/([^/]+)$',\n                       network_string)\n      if match and match.group(1) != self.project_id:\n        return True\n\n    return False\n\n  @property\n  def network(self) -> network.Network:\n    if 'network' in self._resource_data['networkConfig']:\n      network_string = self._resource_data['networkConfig']['network']\n      match = re.match(r'projects/([^/]+)/global/networks/([^/]+)$',\n                       network_string)\n      if match:\n        return network.get_network(\n            match.group(1),\n            match.group(2),\n            context=models.Context(project_id=match.group(1)),\n        )\n      else:\n        return network.get_network(\n            self.project_id,\n            network_string,\n            context=models.Context(project_id=self.project_id),\n        )\n\n    return network.get_network(\n        self.project_id,\n        'default',\n        context=models.Context(project_id=self.project_id),\n    )\n\n  @property\n  def tp_ipv4_cidr(self) -> Optional[IPv4NetOrIPv6Net]:\n    if 'network' in self._resource_data['networkConfig']:\n      cidr = self._resource_data['networkConfig']['ipAllocation']\n      return ipaddress.ip_network(cidr)\n    return None\n\n  @property\n  def api_endpoint(self) -> str:\n    return self._resource_data['apiEndpoint']\n\n\n@caching.cached_api_call\ndef get_instances(context: models.Context) -> Mapping[str, Instance]:\n  \"\"\"Get a dict of Instance matching the given context, indexed by instance full path.\"\"\"\n  instances: Dict[str, Instance] = {}\n\n  if not apis.is_enabled(context.project_id, 'datafusion'):\n    return instances\n\n  logging.debug('fetching list of Data Fusion instances in project %s',\n                context.project_id)\n  datafusion_api = apis.get_api('datafusion', 'v1', context.project_id)\n  query = datafusion_api.projects().locations().instances().list(\n      parent=f'projects/{context.project_id}/locations/-'\n  )  #'-' (wildcard) all regions\n\n  try:\n    resp = query.execute(num_retries=config.API_RETRIES)\n    if 'instances' not in resp:\n      return instances\n\n    for i in resp['instances']:\n      # projects/{project}/locations/{location}/instances/{instance}.\n      result = re.match(r'projects/[^/]+/locations/([^/]+)/instances/([^/]+)',\n                        i['name'])\n      if not result:\n        logging.error('invalid datafusion name: %s', i['name'])\n        continue\n      location = result.group(1)\n      labels = i.get('labels', {})\n      name = result.group(2)\n      if not context.match_project_resource(\n          location=location, labels=labels, resource=name):\n        continue\n\n      instances[i['name']] = Instance(project_id=context.project_id,\n                                      resource_data=i)\n\n  except googleapiclient.errors.HttpError as err:\n    raise utils.GcpApiError(err) from err\n\n  return instances\n\n\n@caching.cached_api_call\ndef extract_support_datafusion_version() -> Dict[str, str]:\n  \"\"\"Extract the version policy dictionary from the data fusion version support policy page.\n\n  Returns:\n    A dictionary of data fusion versions and their support end dates.\n  \"\"\"\n  page_url = 'https://cloud.google.com/data-fusion/docs/support/version-support-policy'\n\n  try:\n    data_fusion_table = web.fetch_and_extract_table(page_url,\n                                                    tag='h2',\n                                                    tag_id='support_timelines')\n    if data_fusion_table:\n      versions = []\n      support_end_dates = []\n      version_policy_dict = {}\n\n      for row in data_fusion_table.find_all('tr')[1:]:\n        columns = row.find_all('td')\n        version = columns[0]\n        support_end_date = columns[2].text.strip()\n        if version.sup:\n          version.sup.decompose()\n\n        version = version.text.strip()\n        try:\n          support_end_date = datetime.datetime.strptime(support_end_date,\n                                                        '%B %d, %Y')\n          support_end_date = datetime.datetime.strftime(support_end_date,\n                                                        '%Y-%m-%d')\n        except ValueError:\n          continue\n\n        versions.append(version)\n        support_end_dates.append(support_end_date)\n\n        version_policy_dict = dict(zip(versions, support_end_dates))\n      return version_policy_dict\n\n    else:\n      return {}\n\n  except (\n      requests.exceptions.RequestException,\n      AttributeError,\n      TypeError,\n      ValueError,\n      IndexError,\n  ) as e:\n    logging.error('Error in extracting data fusion version support policy: %s',\n                  e)\n    return {}\n\n\nclass Profile(models.Resource):\n  \"\"\"Represents a Compute Profile.\"\"\"\n\n  _resource_data: dict\n\n  def __init__(self, project_id, instance_name, resource_data):\n    super().__init__(project_id=project_id)\n    self.instance_name = instance_name\n    self._resource_data = resource_data\n\n  @property\n  def full_path(self) -> str:\n    \"\"\"The full path form :\n\n    projects/{project}/instances/{instance}/computeProfiles/{profile}.\n    \"\"\"\n    return (f'projects/{self.project_id}/instances/{self.instance_name}'\n            f\"/computeProfiles/{self._resource_data['name']}\")\n\n  @property\n  def short_path(self) -> str:\n    \"\"\"The short path form :\n\n    {project}/{instance}/{profile}.\n    \"\"\"\n    return (\n        f\"{self.project_id}/{self.instance_name}/{self._resource_data['name']}\")\n\n  @property\n  def name(self) -> str:\n    return self._resource_data['name']\n\n  @property\n  def region(self) -> str:\n    for value in self._resource_data['provisioner'].get('properties'):\n      if value.get('name') == 'region' and value.get('value') is not None:\n        return value.get('value')\n    return 'No region defined'\n\n  @property\n  def status(self) -> str:\n    return self._resource_data['status']\n\n  @property\n  def scope(self) -> str:\n    return self._resource_data['scope']\n\n  @property\n  def is_dataproc_provisioner(self) -> bool:\n    return self._resource_data['provisioner']['name'] == 'gcp-dataproc'\n\n  @property\n  def is_existing_dataproc_provisioner(self) -> bool:\n    return self._resource_data['provisioner']['name'] == 'gcp-existing-dataproc'\n\n  @property\n  def autoscaling_enabled(self) -> bool:\n    for value in self._resource_data['provisioner'].get('properties'):\n      if (value.get('name') == 'enablePredefinedAutoScaling' and\n          value.get('value') is not None):\n        return value.get('value') == 'true'\n    return False\n\n  @property\n  def image_version(self) -> str:\n    for value in self._resource_data['provisioner'].get('properties'):\n      if value.get('name') == 'imageVersion' and value.get('value') != '':\n        return value.get('value')\n    return 'No imageVersion defined'\n\n  @property\n  def auto_scaling_policy(self) -> str:\n    for value in self._resource_data['provisioner'].get('properties'):\n      if value.get('name') == 'autoScalingPolicy' and value.get('value') != '':\n        return value.get('value')\n    return 'No autoScalingPolicy defined'\n\n\n@caching.cached_api_call\ndef get_instance_system_compute_profile(\n    context: models.Context, instance: Instance) -> Iterable[Profile]:\n  \"\"\"Get a list of datafusion Instance dataproc System compute profile.\"\"\"\n  logging.debug('fetching dataproc System compute profile list: %s',\n                context.project_id)\n  system_profiles: List[Profile] = []\n  cdap_endpoint = instance.api_endpoint\n  datafusion = get_generic.get_generic_api('datafusion', cdap_endpoint)\n  response = datafusion.get_system_profiles()\n  if response is not None:\n    for res in response:\n      if (res['provisioner']['name'] == 'gcp-dataproc' or\n          res['provisioner']['name'] == 'gcp-existing-dataproc'):\n        system_profiles.append(Profile(context.project_id, instance.name, res))\n  return system_profiles\n\n\n@caching.cached_api_call\ndef get_instance_user_compute_profile(context: models.Context,\n                                      instance: Instance) -> Iterable[Profile]:\n  \"\"\"Get a list of datafusion Instance dataproc User compute profile.\"\"\"\n  logging.debug('fetching dataproc User compute profile list: %s',\n                context.project_id)\n  user_profiles: List[Profile] = []\n  cdap_endpoint = instance.api_endpoint\n  datafusion = get_generic.get_generic_api('datafusion', cdap_endpoint)\n  response_namespaces = datafusion.get_all_namespaces()\n  if response_namespaces is not None:\n    for res in response_namespaces:\n      response = datafusion.get_user_profiles(namespace=res['name'])\n      if response is not None:\n        for res in response:\n          if (res['provisioner']['name'] == 'gcp-dataproc' or\n              res['provisioner']['name'] == 'gcp-existing-dataproc'):\n            user_profiles.append(Profile(context.project_id, instance.name,\n                                         res))\n      user_profiles = list(filter(bool, user_profiles))\n  return user_profiles\n\n\n@caching.cached_api_call\ndef extract_datafusion_dataproc_version() -> Dict[str, list[str]]:\n  \"\"\"Extract the supported Data Fusion versions and their corresponding\n  Dataproc versions from the GCP documentation.\"\"\"\n\n  page_url = 'https://cloud.google.com/data-fusion/docs/concepts/configure-clusters'\n\n  try:\n    table = web.fetch_and_extract_table(page_url,\n                                        tag='h2',\n                                        tag_id='version-compatibility')\n    if table:\n      rows = table.find_all('tr')[1:]  #Skip the header row\n      version_dict = {}\n\n      for row in rows:\n        cdf_versions = row.find_all('td')[0].get_text().strip()\n        dp_versions = row.find_all('td')[1].get_text().strip()\n\n        cdf_versions = cdf_versions.replace(' and later', '')\n        cdf_versions_list = []\n\n        if '-' in cdf_versions:\n          start, end = map(float, cdf_versions.split('-'))\n          while start <= end:\n            cdf_versions_list.append(f'{start:.1f}')\n            start += 0.1\n        else:\n          cdf_versions_list.append(cdf_versions)\n        dp_versions = [v.split('*')[0].strip() for v in dp_versions.split(',')]\n        for version in cdf_versions_list:\n          version_dict[version] = dp_versions\n      return version_dict\n\n    else:\n      return {}\n  except (\n      requests.exceptions.RequestException,\n      AttributeError,\n      TypeError,\n      ValueError,\n      IndexError,\n  ) as e:\n    logging.error(\n        'Error in extracting datafusion and dataproc versions: %s',\n        e,\n    )\n    return {}\n\n\nclass Preference(models.Resource):\n  \"\"\"Represents a Preference.\"\"\"\n\n  _resource_data: dict\n\n  def __init__(self, project_id, instance, resource_data):\n    super().__init__(project_id=project_id)\n    self.instance = instance\n    self._resource_data = resource_data\n\n  @property\n  def full_path(self) -> str:\n    \"\"\"The full path form :\n\n    projects/{project}/locations/{location}/instances/{instance}.\n    \"\"\"\n    return self.instance.full_path\n\n  @property\n  def image_version(self):\n    return self._resource_data.get('system.profile.properties.imageVersion',\n                                   None)\n\n\ndef get_system_preferences(context: models.Context,\n                           instance: Instance) -> Preference:\n  \"\"\"Get datafusion Instance system preferences.\"\"\"\n  logging.debug('fetching dataproc System preferences: %s', context.project_id)\n  cdap_endpoint = instance.api_endpoint\n  datafusion = get_generic.get_generic_api('datafusion', cdap_endpoint)\n  response = datafusion.get_system_preferences()\n  return Preference(context.project_id, instance, response)\n\n\ndef get_namespace_preferences(context: models.Context,\n                              instance: Instance) -> Mapping[str, Preference]:\n  \"\"\"Get datafusion cdap namespace preferences.\n  \"\"\"\n  logging.debug('fetching dataproc namespace preferences: %s',\n                context.project_id)\n  cdap_endpoint = instance.api_endpoint\n  datafusion = get_generic.get_generic_api('datafusion', cdap_endpoint)\n  namespaces = datafusion.get_all_namespaces()\n  namespaces_preferences = {}\n  if namespaces is not None:\n    for namespace in namespaces:\n      response = datafusion.get_namespace_preferences(\n          namespace=namespace['name'])\n      if bool(response):\n        namespaces_preferences[namespace['name']] = Preference(\n            context.project_id, instance, response)\n  return namespaces_preferences\n\n\ndef get_application_preferences(context: models.Context,\n                                instance: Instance) -> Mapping[str, Preference]:\n  \"\"\"Get datafusion cdap application preferences.\"\"\"\n  logging.debug('fetching dataproc application preferences: %s',\n                context.project_id)\n  cdap_endpoint = instance.api_endpoint\n  datafusion = get_generic.get_generic_api('datafusion', cdap_endpoint)\n  applications_preferences = {}\n  namespaces = datafusion.get_all_namespaces()\n  if namespaces is not None:\n    for namespace in namespaces:\n      applications = datafusion.get_all_applications(\n          namespace=namespace['name'])\n      if applications is not None:\n        for application in applications:\n          response = datafusion.get_application_preferences(\n              namespace=namespace['name'], application_name=application['name'])\n          if bool(response):\n            applications_preferences[application['name']] = Preference(\n                context.project_id, instance, response)\n  return applications_preferences\n"
  },
  {
    "path": "gcpdiag/queries/datafusion_stub.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Stub API calls used in datafusion.py for testing.\n\nInstead of doing real API calls, we return test JSON data.\n\"\"\"\n\nimport re\n\nfrom gcpdiag.queries import apis_stub\n\n# pylint: disable=unused-argument\n\n\nclass DataFusionApiStub(apis_stub.ApiStub):\n  \"\"\"Mock object to simulate instance api calls.\"\"\"\n\n  def __init__(self, mock_state='init', region=None):\n    self.mock_state = mock_state\n    self.region = region\n\n  def projects(self):\n    return self\n\n  def locations(self):\n    return self\n\n  def instances(self):\n    return self\n\n  def list(self, parent):\n    m = re.match(r'projects/([^/]+)/', parent)\n    project_id = m.group(1)\n    return apis_stub.RestCallStub(project_id, 'datafusion-instances')\n"
  },
  {
    "path": "gcpdiag/queries/datafusion_test.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test code in datafusion.py.\"\"\"\n\nfrom unittest import mock\n\nfrom gcpdiag import models\nfrom gcpdiag.queries import apis_stub, datafusion, web_stub\nfrom gcpdiag.queries.generic_api.api_build import generic_api_stub\n\nDUMMY_REGION = 'us-central1'\nDUMMY_PROJECT_NAME = 'gcpdiag-datafusion1-aaaa'\nDUMMY_PROJECT_NR = '12340010'\nDUMMY_DEFAULT_NAME = 'default'\nDUMMY_INSTANCE1_NAME = 'my-instance'\nDUMMY_INSTANCE1_LABELS = {'gcpdiag': 'test'}\n\nGCE_SERVICE_ACCOUNT = '12340010-compute@developer.gserviceaccount.com'\nENV_SERVICE_ACCOUNT = f'env2sa@{DUMMY_PROJECT_NAME}.iam.gserviceaccount.com'\nNUMBER_OF_INSTANCES_IN_DATAFUSION_JSON_DUMP_FILE = 1\nSUPPORTED_VERSIONS_DICT = {\n    '6.9': '2025-03-31',\n    '6.8': '2024-08-31',\n    '6.7': '2023-02-28',\n    '6.6': '2023-10-31',\n    '6.5': '2023-05-31',\n    '6.4': '2022-11-30',\n    '6.3': '2022-07-31',\n    '6.2': '2022-03-31',\n    '6.1': '2021-06-30',\n}\nDATAFUSION_DATAPROC_VERSIONS_DICT = {\n    '6.7': ['1.3'],\n    '6.6': ['2.0', '1.3'],\n    '6.5': ['2.0', '1.3'],\n    '6.4': ['2.0', '1.3'],\n    '6.3': ['1.3'],\n    '6.2': ['1.3'],\n    '6.1': ['1.3'],\n}\n\n\n@mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)\nclass TestDataFusion:\n  \"\"\"Test Data Fusion\"\"\"\n\n  def test_get_instances(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    instances = datafusion.get_instances(context)\n    assert len(instances) == NUMBER_OF_INSTANCES_IN_DATAFUSION_JSON_DUMP_FILE\n\n  def test_running(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    instances = datafusion.get_instances(context)\n    assert (DUMMY_INSTANCE1_NAME,\n            True) in [(i.name, i.is_running) for k, i in instances.items()]\n\n  def test_is_private_ip(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    instances = datafusion.get_instances(context)\n    assert (DUMMY_INSTANCE1_NAME,\n            True) in [(i.name, i.is_private) for k, i in instances.items()]\n\n\n@mock.patch('gcpdiag.queries.web.get', new=web_stub.get)\nclass TestExtractVersionPolicyDict:\n  \"\"\"Test html content.\"\"\"\n\n  def test_extract_support_datafusion_version(self):\n    response_dict = datafusion.extract_support_datafusion_version()\n    assert response_dict == SUPPORTED_VERSIONS_DICT\n\n  def test_extract_datafusion_dataproc_version(self):\n    response_dict = datafusion.extract_datafusion_dataproc_version()\n    assert response_dict == DATAFUSION_DATAPROC_VERSIONS_DICT\n\n\n@mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)\n@mock.patch('gcpdiag.queries.generic_api.api_build.get_generic.get_generic_api',\n            new=generic_api_stub.get_generic_api_stub)\nclass TestComputeProfile:\n  \"\"\"Test Compute Profile\"\"\"\n\n  def test_get_instance_system_compute_profile(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    instances = datafusion.get_instances(context)\n    instance = list(instances.values())[0]\n    profiles = datafusion.get_instance_system_compute_profile(context, instance)\n    assert len(profiles) == 2\n\n  def test_get_instance_user_compute_profile(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    instances = datafusion.get_instances(context)\n    instance = list(instances.values())[0]\n    profiles = datafusion.get_instance_user_compute_profile(context, instance)\n    assert len(profiles) == 1\n\n\n@mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)\n@mock.patch('gcpdiag.queries.generic_api.api_build.get_generic.get_generic_api',\n            new=generic_api_stub.get_generic_api_stub)\nclass TestPreferences:\n  \"\"\"Test datafusion cdap preferences\"\"\"\n\n  def test_get_system_preferences(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    instances = datafusion.get_instances(context)\n    instance = list(instances.values())[0]\n    preference = datafusion.get_system_preferences(context, instance)\n    assert preference.image_version == '2.1'\n\n  def test_get_application_preferences(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    instances = datafusion.get_instances(context)\n    instance = list(instances.values())[0]\n    preferences = datafusion.get_application_preferences(context, instance)\n    assert '2.2' in [(i.image_version) for k, i in preferences.items()]\n\n  def test_get_namespace_preferences(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    instances = datafusion.get_instances(context)\n    instance = list(instances.values())[0]\n    preferences = datafusion.get_namespace_preferences(context, instance)\n    assert '2.1' in [(i.image_version) for k, i in preferences.items()]\n"
  },
  {
    "path": "gcpdiag/queries/dataproc.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Queries related to Dataproc.\"\"\"\n\nimport logging\nimport re\nfrom typing import Iterable, List, Mapping, Optional\n\nimport googleapiclient.errors\nimport requests\n\nfrom gcpdiag import caching, config, models, utils\nfrom gcpdiag.executor import get_executor\nfrom gcpdiag.queries import apis, crm, gce, network, web\n\n\nclass Cluster(models.Resource):\n  \"\"\"Represents Dataproc Cluster\"\"\"\n\n  name: str\n  _resource_data: Mapping\n\n  def __init__(self, name: str, project_id: str, resource_data: Mapping):\n    super().__init__(project_id)\n    self.name = name\n    self._resource_data = resource_data\n\n  def is_running(self) -> bool:\n    return self.status == 'RUNNING'\n\n  def get_software_property(self, property_name) -> str:\n    return self._resource_data['config']['softwareConfig']['properties'].get(\n        property_name)\n\n  def is_stackdriver_logging_enabled(self) -> bool:\n    # Unless overridden during create,\n    # properties with default values are not returned,\n    # therefore get_software_property should only return when its false\n    return (not self.get_software_property(\n        'dataproc:dataproc.logging.stackdriver.enable') == 'false')\n\n  def is_stackdriver_monitoring_enabled(self) -> bool:\n    return (self.get_software_property(\n        'dataproc:dataproc.monitoring.stackdriver.enable') == 'true')\n\n  @property\n  def region(self) -> str:\n    \"\"\"biggest regions have a trailing '-d' at most in its zoneUri\n\n    https://www.googleapis.com/compute/v1/projects/dataproc1/zones/us-central1-d\n    \"\"\"\n    return self._resource_data['config']['gceClusterConfig']['zoneUri'].split(\n        '/')[-1][0:-2]\n\n  @property\n  def zone(self) -> Optional[str]:\n    zone = (self._resource_data.get('config', {}).get('gceClusterConfig',\n                                                      {}).get('zoneUri'))\n    if zone:\n      m = re.search(r'/zones/([^/]+)$', zone)\n      if m:\n        return m.group(1)\n    raise RuntimeError(f\"can't determine zone for cluster {self.name}\")\n\n  @property\n  def full_path(self) -> str:\n    return (\n        f'projects/{self.project_id}/regions/{self.region}/clusters/{self.name}'\n    )\n\n  @property\n  def short_path(self) -> str:\n    return f'{self.project_id}/{self.region}/{self.name}'\n\n  @property\n  def status(self) -> str:\n    return self._resource_data['status']['state']\n\n  def __str__(self) -> str:\n    return self.short_path\n\n  @property\n  def cluster_uuid(self) -> str:\n    return self._resource_data['clusterUuid']\n\n  @property\n  def image_version(self):\n    return self._resource_data['config']['softwareConfig']['imageVersion']\n\n  @property\n  def vm_service_account_email(self):\n    sa = self._resource_data['config']['gceClusterConfig'].get('serviceAccount')\n    if sa is None:\n      sa = crm.get_project(self.project_id).default_compute_service_account\n    return sa\n\n  @property\n  def is_custom_gcs_connector(self) -> bool:\n    return bool(\n        self._resource_data.get('config', {}).get('gceClusterConfig', {}).get(\n            'metadata', {}).get('GCS_CONNECTOR_VERSION'))\n\n  @property\n  def cluster_provided_bq_connector(self):\n    \"\"\"Check user-supplied BigQuery connector on the cluster level\"\"\"\n    bigquery_connector = (self._resource_data.get('config', {}).get(\n        'gceClusterConfig', {}).get('metadata',\n                                    {}).get('SPARK_BQ_CONNECTOR_VERSION'))\n    if not bigquery_connector:\n      bigquery_connector = (self._resource_data.get('config', {}).get(\n          'gceClusterConfig', {}).get('metadata',\n                                      {}).get('SPARK_BQ_CONNECTOR_URL'))\n      if bigquery_connector:\n        if bigquery_connector == 'spark-bigquery-latest.jar':\n          return 'spark-bigquery-latest'\n        else:\n          match = re.search(\n              r'spark-bigquery(?:-with-dependencies_\\d+\\.\\d+)?-(\\d+\\.\\d+\\.\\d+)\\.jar',\n              bigquery_connector)\n          if match:\n            return match.group(1)\n      # If returns None, it means that the cluster is using the default,\n      # pre-installed BQ connector for the image version\n      return bigquery_connector\n\n  @property\n  def is_gce_cluster(self) -> bool:\n    return bool(self._resource_data.get('config', {}).get('gceClusterConfig'))\n\n  @property\n  def gce_network_uri(self) -> Optional[str]:\n    \"\"\"Get network uri from cluster network or subnetwork\"\"\"\n    if not self.is_gce_cluster:\n      raise RuntimeError(\n          'Can not return network URI for a Dataproc on GKE cluster')\n    network_uri = (self._resource_data.get('config',\n                                           {}).get('gceClusterConfig',\n                                                   {}).get('networkUri'))\n    if not network_uri:\n      subnetwork_uri = (self._resource_data.get('config', {}).get(\n          'gceClusterConfig', {}).get('subnetworkUri'))\n      network_uri = network.get_subnetwork_from_url(subnetwork_uri).network\n    return network_uri\n\n  @property\n  def gce_subnetwork_uri(self) -> Optional[str]:\n    \"\"\"Get subnetwork uri from cluster subnetwork.\"\"\"\n    if not self.is_gce_cluster:\n      raise RuntimeError(\n          'Can not return subnetwork URI for a Dataproc on GKE cluster')\n    subnetwork_uri = (self._resource_data.get('config',\n                                              {}).get('gceClusterConfig',\n                                                      {}).get('subnetworkUri'))\n    if not subnetwork_uri:\n      subnetwork_uri = ('https://www.googleapis.com/compute/v1/projects/' +\n                        self.project_id + '/regions/' + self.region +\n                        '/subnetworks/default')\n    return subnetwork_uri\n\n  @property\n  def is_single_node_cluster(self) -> bool:\n    workers = (self._resource_data.get('config',\n                                       {}).get('workerConfig',\n                                               {}).get('numInstances', 0))\n    return workers == 0\n\n  @property\n  def is_ha_cluster(self) -> bool:\n    masters = (self._resource_data.get('config',\n                                       {}).get('masterConfig',\n                                               {}).get('numInstances', 1))\n    return masters != 1\n\n  @property\n  def is_internal_ip_only(self) -> bool:\n    # internalIpOnly is set to true by default when creating a\n    # Dataproc 2.2 image version cluster.\n    # The default should be false in older versions instead.\n    internal_ip_only = self._resource_data['config']['gceClusterConfig'][\n        'internalIpOnly']\n    return internal_ip_only\n\n  @property\n  def has_autoscaling_policy(self) -> bool:\n    \"\"\"Checks if an autoscaling policy is configured for the cluster.\"\"\"\n    return bool(self._resource_data['config'].get('autoscalingConfig', {}))\n\n  @property\n  def autoscaling_policy_id(self) -> str:\n    \"\"\"Returns the autoscaling policy ID for the cluster.\"\"\"\n    if self.has_autoscaling_policy:\n      return (self._resource_data['config'].get('autoscalingConfig',\n                                                {}).get('policyUri',\n                                                        '').split('/')[-1])\n    else:\n      return ''\n\n  @property\n  def number_of_primary_workers(self) -> float:\n    \"\"\"Gets the number of primary worker nodes in the cluster.\"\"\"\n    return (self._resource_data['config'].get('workerConfig',\n                                              {}).get('numInstances', 0))\n\n  @property\n  def number_of_secondary_workers(self) -> float:\n    \"\"\"Gets the number of secondary worker nodes in the cluster.\"\"\"\n    return (self._resource_data['config'].get('secondaryWorkerConfig',\n                                              {}).get('numInstances', 0))\n\n  @property\n  def is_preemptible_primary_workers(self) -> bool:\n    \"\"\"Checks if the primary worker nodes in the cluster are preemptible.\"\"\"\n    return (self._resource_data['config'].get('workerConfig',\n                                              {}).get('isPreemptible', False))\n\n  @property\n  def is_preemptible_secondary_workers(self) -> bool:\n    \"\"\"Checks if the secondary worker nodes in the cluster are preemptible.\"\"\"\n    return (self._resource_data['config'].get('secondaryWorkerConfig',\n                                              {}).get('isPreemptible', False))\n\n  @property\n  def initialization_actions(self) -> List[str]:\n    return self._resource_data['config'].get('initializationActions', [])\n\n\nclass Region:\n  \"\"\"Represents Dataproc region\"\"\"\n\n  project_id: str\n  region: str\n\n  def __init__(self, project_id: str, region: str):\n    self.project_id = project_id\n    self.region = region\n\n  def get_clusters(self, context: models.Context) -> Iterable[Cluster]:\n    clusters = []\n    for cluster in self.query_api():\n      if not context.match_project_resource(resource=cluster.get('clusterName'),\n                                            labels=cluster.get('labels', {})):\n        continue\n      c = Cluster(\n          name=cluster['clusterName'],\n          project_id=self.project_id,\n          resource_data=cluster,\n      )\n      clusters.append(c)\n    return clusters\n\n  def query_api(self) -> Iterable[dict]:\n    try:\n      api = apis.get_api('dataproc', 'v1', self.project_id)\n      query = (api.projects().regions().clusters().list(\n          projectId=self.project_id, region=self.region))\n      # be careful not to retry too many times because querying all regions\n      # sometimes causes requests to fail permanently\n      resp = query.execute(num_retries=1)\n      return resp.get('clusters', [])\n    except googleapiclient.errors.HttpError as err:\n      # b/371526148 investigate permission denied error\n      logging.error(err)\n      return []\n      # raise utils.GcpApiError(err) from err\n\n\nclass Dataproc:\n  \"\"\"Represents Dataproc product\"\"\"\n\n  project_id: str\n\n  def __init__(self, project_id: str):\n    self.project_id = project_id\n\n  def get_regions(self) -> Iterable[Region]:\n    return [\n        Region(self.project_id, r.name)\n        for r in gce.get_all_regions(self.project_id)\n    ]\n\n  def is_api_enabled(self) -> bool:\n    return apis.is_enabled(self.project_id, 'dataproc')\n\n\n@caching.cached_api_call\ndef get_clusters(context: models.Context) -> Iterable[Cluster]:\n  r: List[Cluster] = []\n  dataproc = Dataproc(context.project_id)\n  if not dataproc.is_api_enabled():\n    return r\n  executor = get_executor(context)\n  for clusters in executor.map(lambda r: r.get_clusters(context),\n                               dataproc.get_regions()):\n    r += clusters\n  return r\n\n\n@caching.cached_api_call\ndef get_cluster(cluster_name, region, project) -> Optional[Cluster]:\n  api = apis.get_api('dataproc', 'v1', project)\n  request = api.projects().regions().clusters().get(projectId=project,\n                                                    clusterName=cluster_name,\n                                                    region=region)\n  try:\n    r = request.execute(num_retries=config.API_RETRIES)\n  except (googleapiclient.errors.HttpError,\n          requests.exceptions.RequestException):\n    #logging.error(err)\n    return None\n  return Cluster(r['clusterName'], project_id=r['projectId'], resource_data=r)\n\n\nclass AutoScalingPolicy(models.Resource):\n  \"\"\"AutoScalingPolicy.\"\"\"\n\n  _resource_data: dict\n\n  def __init__(self, project_id, resource_data, region):\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n    self.region = region\n\n  @property\n  def policy_id(self) -> str:\n    return self._resource_data['id']\n\n  @property\n  def full_path(self) -> str:\n    return self._resource_data['name']\n\n  @property\n  def short_path(self) -> str:\n    return f'{self.project_id}/{self.region}/{self.policy_id}'\n\n  @property\n  def name(self) -> str:\n    return self._resource_data['name']\n\n  @property\n  def scale_down_factor(self) -> float:\n    return self._resource_data['basicAlgorithm']['yarnConfig'].get(\n        'scaleDownFactor', 0.0)\n\n  @property\n  def has_graceful_decommission_timeout(self) -> bool:\n    \"\"\"Checks if a graceful decommission timeout is configured in the autoscaling policy.\"\"\"\n    return bool(\n        self._resource_data.get('basicAlgorithm',\n                                {}).get('yarnConfig',\n                                        {}).get('gracefulDecommissionTimeout',\n                                                {}))\n\n  @property\n  def graceful_decommission_timeout(self) -> float:\n    \"\"\"Gets the configured graceful decommission timeout in the autoscaling policy.\"\"\"\n    return (self._resource_data.get('basicAlgorithm',\n                                    {}).get('yarnConfig', {}).get(\n                                        'gracefulDecommissionTimeout', -1))\n\n\n@caching.cached_api_call\ndef get_auto_scaling_policy(project_id: str, region: str,\n                            policy_id: str) -> AutoScalingPolicy:\n  logging.debug('fetching autoscalingpolicy: %s', project_id)\n  dataproc = apis.get_api('dataproc', 'v1', project_id)\n  name = (\n      f'projects/{project_id}/regions/{region}/autoscalingPolicies/{policy_id}')\n  try:\n    request = dataproc.projects().regions().autoscalingPolicies().get(name=name)\n    response = request.execute(num_retries=config.API_RETRIES)\n    return AutoScalingPolicy(project_id, response, region)\n  except googleapiclient.errors.HttpError as err:\n    raise utils.GcpApiError(err) from err\n\n\n@caching.cached_api_call\ndef list_auto_scaling_policies(project_id: str,\n                               region: str) -> List[AutoScalingPolicy]:\n  \"\"\"Lists all autoscaling policies in the given project and region.\"\"\"\n  dataproc = apis.get_api('dataproc', 'v1', project_id)\n  parent = f'projects/{project_id}/regions/{region}'\n  try:\n    request = (dataproc.projects().regions().autoscalingPolicies().list(\n        parent=parent))\n    response = request.execute(num_retries=config.API_RETRIES)\n    return [\n        AutoScalingPolicy(project_id, policy_data, region)\n        for policy_data in response.get('policies', [])\n    ]\n  except googleapiclient.errors.HttpError as err:\n    raise utils.GcpApiError(err) from err\n\n\nclass Job(models.Resource):\n  \"\"\"Job.\"\"\"\n\n  _resource_data: dict\n\n  def __init__(self, project_id, job_id, region, resource_data):\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n    self.region = region\n    self.job_id = job_id\n\n  @property\n  def full_path(self) -> str:\n    return (\n        f'projects/{self.project_id}/regions/{self.region}/jobs/{self.job_id}')\n\n  @property\n  def short_path(self) -> str:\n    return f'{self.project_id}/{self.region}/{self.job_id}'\n\n  @property\n  def cluster_name(self) -> str:\n    return self._resource_data['placement']['clusterName']\n\n  @property\n  def cluster_uuid(self) -> str:\n    return self._resource_data['placement']['clusterUuid']\n\n  @property\n  def state(self):\n    return self._resource_data['status']['state']\n\n  @property\n  def details(self):\n    if self._resource_data['status']['state'] == 'ERROR':\n      return self._resource_data['status']['details']\n    return None\n\n  @property\n  def status_history(self):\n    status_history_dict = {}\n    for previous_status in self._resource_data['statusHistory']:\n      if previous_status['state'] not in status_history_dict:\n        status_history_dict[\n            previous_status['state']] = previous_status['stateStartTime']\n\n    return status_history_dict\n\n  @property\n  def yarn_applications(self):\n    return self._resource_data['yarnApplications']\n\n  @property\n  def driver_output_resource_uri(self):\n    return self._resource_data.get('driverOutputResourceUri')\n\n  @property\n  def job_uuid(self):\n    return self._resource_data.get('jobUuid')\n\n  @property\n  def job_provided_bq_connector(self):\n    \"\"\"Check user-supplied BigQuery connector on the job level\"\"\"\n    jar_file_uris = (self._resource_data.get('sparkJob', {}).get('jarFileUris'))\n    if jar_file_uris is not None:\n      for file in jar_file_uris:\n        if 'spark-bigquery-latest.jar' in file:\n          return 'spark-bigquery-latest'\n        else:\n          match = re.search(\n              r'spark-bigquery(?:-with-dependencies_\\d+\\.\\d+)?-(\\d+\\.\\d+\\.\\d+)\\.jar',\n              file)\n          if match:\n            return match.group(1)\n    return None\n\n\n@caching.cached_api_call\ndef get_job_by_jobid(project_id: str, region: str, job_id: str):\n  dataproc = apis.get_api('dataproc', 'v1', project_id)\n  try:\n    request = (dataproc.projects().regions().jobs().get(projectId=project_id,\n                                                        region=region,\n                                                        jobId=job_id))\n    response = request.execute(num_retries=config.API_RETRIES)\n    return Job(project_id, region, job_id, response)\n  except googleapiclient.errors.HttpError as err:\n    raise utils.GcpApiError(err) from err\n\n\n@caching.cached_api_call\ndef extract_dataproc_supported_version() -> list[str]:\n  \"\"\"Extract the supported Dataproc versions(use Debian as representative).\n  \"\"\"\n\n  page_url = 'https://cloud.google.com/dataproc/docs/concepts/versioning/dataproc-version-clusters'\n\n  try:\n    table = web.fetch_and_extract_table(page_url,\n                                        tag='h3',\n                                        tag_id='debian_images')\n    if table:\n      rows = table.find_all('tr')[1:]  #Skip the header row\n      version_list = []\n\n      for row in rows:\n        dp_version = row.find_all('td')[0].get_text().strip().split('-')[0]\n        version_list.append(dp_version)\n      return version_list\n\n    else:\n      return []\n  except (\n      requests.exceptions.RequestException,\n      AttributeError,\n      TypeError,\n      ValueError,\n      IndexError,\n  ) as e:\n    logging.error(\n        'Error in extracting dataproc versions: %s',\n        e,\n    )\n    return []\n\n\n@caching.cached_api_call\ndef extract_dataproc_bigquery_version(image_version) -> list[str]:\n  \"\"\"Extract Dataproc BigQuery connector versions based on image version GCP documentation.\n  \"\"\"\n\n  page_url = ('https://cloud.google.com/dataproc/docs/concepts/versioning/'\n              'dataproc-release-' + image_version)\n\n  try:\n    table = web.fetch_and_extract_table(page_url, tag='div')\n    bq_version = []\n    if table:\n      rows = table.find_all('tr')[1:]\n      for row in rows:\n        cells = row.find_all('td')\n        if 'BigQuery Connector' in cells[0].get_text(strip=True):\n          bq_version = cells[1].get_text(strip=True)\n    return bq_version\n  except (\n      requests.exceptions.RequestException,\n      AttributeError,\n      TypeError,\n      ValueError,\n      IndexError,\n  ) as e:\n    logging.error(\n        '%s Error in extracting BigQuery connector versions.'\n        '  Please check BigQuery Connector version on %s',\n        e,\n        page_url,\n    )\n    return []\n"
  },
  {
    "path": "gcpdiag/queries/dataproc_stub.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Stub API calls used in dataproc.py for testing.\n\nInstead of doing real API calls, we return test JSON data.\n\"\"\"\n\nimport json\nimport re\n\nfrom gcpdiag.queries import apis_stub\n\n#pylint: disable=unused-argument\n#pylint: disable=invalid-name\n\n\nclass DataprocApiStub(apis_stub.ApiStub):\n  \"\"\"Mock object to simulate dataproc api calls.\"\"\"\n\n  def __init__(self, json_basename=None, project_id=None, mock_state='init'):\n    self.mock_state = mock_state\n    self.json_basename = json_basename\n    self.project_id = project_id\n\n  def projects(self):\n    return self\n\n  def regions(self):\n    return self\n\n  def clusters(self):\n    return DataprocApiStub(mock_state='clusters')\n\n  def jobs(self):\n    return DataprocApiStub(mock_state='jobs')\n\n  def autoscalingPolicies(self):\n    return DataprocApiStub(mock_state='autoscalingPolicies')\n\n  def get(self, name='', clusterName='', region='', projectId='', jobId=''):\n    if self.mock_state == 'autoscalingPolicies':\n      m = re.match(\n          r'projects/([^/]+)/regions/([^/]+)/autoscalingPolicies/([^/]+)', name)\n      project_id = m.group(1)\n      return apis_stub.RestCallStub(project_id, 'autoscaling-policy')\n    if self.mock_state == 'clusters':\n      stub = DataprocApiStub(project_id=projectId,\n                             json_basename=f'dataproc-clusters-{region}',\n                             mock_state='clusters')\n      stub.cluster_name = clusterName\n      stub.region = region\n      return stub\n    if self.mock_state == 'jobs':\n      stub = DataprocApiStub(project_id=projectId, mock_state='jobs')\n\n      if jobId == '1234567891':\n        stub.json_basename = 'dataproc-job-failed'\n      else:\n        stub.json_basename = 'dataproc-job-success'\n\n      stub.job_id = jobId\n      stub.region = region\n      return stub\n\n  def list(self, projectId, region):\n    if self.mock_state == 'clusters':\n      return apis_stub.RestCallStub(projectId,\n                                    f'dataproc-clusters-{region}',\n                                    default={})\n    # Implement other list mocked states here\n\n  def execute(self, num_retries=0):\n    self._maybe_raise_api_exception()\n    json_dir = apis_stub.get_json_dir(self.project_id)\n    with open(json_dir / f'{self.json_basename}.json',\n              encoding='utf-8') as json_file:\n      data = json.load(json_file)\n      if self.mock_state == 'clusters':\n        for cluster in data.get('clusters', []):\n          if cluster['clusterName'] == self.cluster_name:\n            return cluster\n      return data\n"
  },
  {
    "path": "gcpdiag/queries/dataproc_test.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test code in dataproc.py.\"\"\"\n\nfrom unittest import mock\n\nfrom gcpdiag import models\nfrom gcpdiag.queries import apis_stub, dataproc\n\nDUMMY_PROJECT_NAME = 'gcpdiag-dataproc1-aaaa'\nDUMMY_SUCCESS_JOB_ID = '1234567890'\nDUMMY_FAILED_JOB_ID = '1234567891'\nNUMBER_OF_CLUSTERS_IN_DATAPROC_JSON_DUMP_FILE = 4\nREGION = 'us-central1'\nPOLICY_ID = 'CDF_AUTOSCALING_POLICY_V1'\n\n\n@mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)\nclass TestDataproc:\n  \"\"\"Test Dataproc\"\"\"\n\n  def test_get_clusters(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    clusters = dataproc.get_clusters(context)\n    assert len(clusters) == NUMBER_OF_CLUSTERS_IN_DATAPROC_JSON_DUMP_FILE\n\n  def test_get_cluster(self):\n    cluster = dataproc.get_cluster('good', 'us-central1', DUMMY_PROJECT_NAME)\n    assert cluster.name == 'good'\n\n  def test_is_running(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    clusters = dataproc.get_clusters(context)\n    assert ('good', True) in [(c.name, c.is_running()) for c in clusters]\n\n  def test_stackdriver_logging_enabled(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    clusters = dataproc.get_clusters(context)\n    for c in clusters:\n      # dataproc:dataproc.logging.stackdriver.enable is set\n      # and equals \"true\"\n      if c.name == 'test-best-practices-enabled':\n        assert c.is_stackdriver_logging_enabled()\n\n      # dataproc:dataproc.logging.stackdriver.enable is set\n      # and equals \"false\"\n      if c.name == 'test-best-practices-disabled':\n        assert not c.is_stackdriver_logging_enabled()\n\n  def test_monitoring_enabled(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    clusters = dataproc.get_clusters(context)\n    for cluster in clusters:\n      if cluster.name == 'test-best-practices-enabled':\n        assert cluster.is_stackdriver_monitoring_enabled()\n\n      if cluster.name == 'test-best-practices-disabled':\n        assert not cluster.is_stackdriver_monitoring_enabled()\n\n  def test_zone(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    clusters = dataproc.get_clusters(context)\n    for cluster in clusters:\n      if cluster.name == 'test-best-practices-enabled':\n        assert cluster.zone == 'us-central1-b'\n\n  def test_is_gce_cluster(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    clusters = dataproc.get_clusters(context)\n    for cluster in clusters:\n      if cluster.name == 'test-best-practices-enabled':\n        assert cluster.is_gce_cluster\n\n  def test_gce_network_uri(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    clusters = dataproc.get_clusters(context)\n    uri = 'projects/gcpdiag-dataproc1-aaaa/global/networks/default'\n    for cluster in clusters:\n      if cluster.name == 'test-best-practices-enabled':\n        assert uri in cluster.gce_network_uri\n\n  def test_auto_scaling_policy(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    policy = dataproc.get_auto_scaling_policy(context.project_id, REGION,\n                                              POLICY_ID)\n    policy_name = ('projects/gcpdiag-dataproc1-aaaa/regions/us-central1/'\n                   'autoscalingPolicies/CDF_AUTOSCALING_POLICY_V1')\n    assert policy.name == policy_name\n\n  def test_get_job_by_jobid_(self):\n    failed_job = dataproc.get_job_by_jobid(\n        project_id=DUMMY_PROJECT_NAME,\n        region='us-central1',\n        job_id=DUMMY_FAILED_JOB_ID,\n    )\n\n    assert failed_job.state == 'ERROR'\n\n    success_job = dataproc.get_job_by_jobid(\n        project_id=DUMMY_PROJECT_NAME,\n        region='us-central1',\n        job_id=DUMMY_SUCCESS_JOB_ID,\n    )\n\n    assert success_job.state == 'DONE'\n"
  },
  {
    "path": "gcpdiag/queries/dns.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Queries related to DNS.\"\"\"\n\nimport logging\nfrom typing import Set\n\nimport dns.resolver\n\n\ndef find_dns_records(domain: str) -> Set:\n  \"\"\"Resolves DNS records for a given domain and returns a set of IP addresses.\n\n  Returns an empty set if any error occurs. Logs errors using logging.info.\n  \"\"\"\n  try:\n    answer = dns.resolver.resolve_name(domain)\n    return set(answer.addresses())\n  except dns.resolver.NoAnswer:\n    logging.info(\"Error: No records found for domain: %s\", domain)\n    return set()\n  except dns.resolver.NXDOMAIN:\n    logging.info(\"Error: Invalid domain: %s\", domain)\n    return set()\n  except dns.resolver.Timeout:\n    logging.info(\"Error: DNS resolution timed out for domain: %s\", domain)\n    return set()\n  except dns.name.EmptyLabel:\n    logging.info(\"Error: Empty A/AAAA record for domain: %s\", domain)\n    return set()\n  except dns.name.LabelTooLong:\n    logging.info(\"Error: Invalid record label too long for domain: %s\", domain)\n    return set()\n  except dns.name.NameTooLong:\n    logging.info(\"Error: DNS name too long for domain: %s\", domain)\n    return set()\n  except dns.resolver.NoNameservers:\n    logging.info(\"Error: No nameservers found for domain: %s\", domain)\n    return set()\n  except dns.exception.DNSException as e:  # Catch any other DNS exception\n    logging.info(\"Error: An unexpected DNS error occurred: %s\", str(e))\n    return set()\n"
  },
  {
    "path": "gcpdiag/queries/dns_stub.py",
    "content": "\"\"\"Queries related to DNS.\"\"\"\n\nfrom typing import Set\n\ndomain_to_ips = {\n    'natka123.com': {'1.2.3.4', '1.2.3.5'},\n    'second.natka123.com': {'2600:1901:0:d0d7::'},\n    'test.natka123.com': {'192.168.3.4'},\n    'test.org': {'192.168.3.5'},\n    'second.test.org': {'2600:1901:0:d0d7::'},\n}\n\n\ndef find_dns_records(domain: str) -> Set:\n  return domain_to_ips[domain]\n"
  },
  {
    "path": "gcpdiag/queries/gae.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Queries related to GCP App Engine Standard app.\"\"\"\n\nimport logging\nimport re\nfrom typing import Dict, Mapping\n\nimport googleapiclient.errors\n\nfrom gcpdiag import caching, config, models, utils\nfrom gcpdiag.queries import apis\n\n\nclass Service(models.Resource):\n  \"\"\"Represents an App Engine Standard app service.\"\"\"\n  _resource_data: dict\n\n  def __init__(self, project_id, resource_data):\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n\n  @property\n  def name(self) -> str:\n    m = re.search(r'/services/([^/]+)$', self._resource_data['name'])\n    if not m:\n      raise RuntimeError('can\\'t determine name of service %s' %\n                         (self._resource_data['name']))\n    return m.group(1)\n\n  @property\n  def id(self) -> str:\n    return self._resource_data['id']\n\n  @property\n  def full_path(self) -> str:\n    return self._resource_data['name']\n\n  @property\n  def short_path(self) -> str:\n    path = self.project_id + '/' + self.id\n    return path\n\n\nclass Version(models.Resource):\n  \"\"\"Represents an App Engine Standard app version.\"\"\"\n  _resource_data: dict\n  service: Service\n\n  def __init__(self, project_id, resource_data):\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n\n  @property\n  def id(self) -> str:\n    return self._resource_data['id']\n\n  @property\n  def full_path(self) -> str:\n    return self._resource_data['name']\n\n  @property\n  def short_path(self) -> str:\n    path = self.project_id + '/' + self.id\n    return path\n\n  @property\n  def runtime(self) -> str:\n    return self._resource_data['runtime']\n\n  @property\n  def env(self) -> str:\n    return self._resource_data['env']\n\n\n@caching.cached_api_call\ndef get_services(context: models.Context) -> Mapping[str, Service]:\n  \"\"\"Get a list of App Engine Standard services matching the given context,\n  indexed by service id.\"\"\"\n  services: Dict[str, Service] = {}\n  if not apis.is_enabled(context.project_id, 'appengine'):\n    return services\n  appengine_api = apis.get_api('appengine', 'v1', context.project_id)\n  logging.debug('fetching list of app engine services in the project %s',\n                context.project_id)\n  query = appengine_api.apps().services().list(appsId=context.project_id)\n  try:\n    resp = query.execute(num_retries=config.API_RETRIES)\n    if 'services' not in resp:\n      return services\n    for s in resp['services']:\n      # apps/myapp/services/default\n      result = re.match(r'apps/[^/]+/services/([^/]+)', s['name'])\n      if not result:\n        logging.error('invalid appengine data: %s', s['name'])\n        continue\n\n      labels = s.get('labels', {})\n\n      if not context.match_project_resource(resource=result.group(1),\n                                            labels=labels):\n        continue\n\n      services[s['id']] = Service(project_id=context.project_id,\n                                  resource_data=s)\n  except googleapiclient.errors.HttpError as err:\n    raise utils.GcpApiError(err) from err\n  return services\n\n\n@caching.cached_api_call\ndef get_versions(context: models.Context) -> Mapping[str, Version]:\n  \"\"\"Get a list of App Engine Standard service versions the given context,\n    indexed by a version id.\"\"\"\n  versions: Dict[str, Version] = {}\n  if not apis.is_enabled(context.project_id, 'appengine'):\n    return versions\n\n  appengine_api = apis.get_api('appengine', 'v1', context.project_id)\n\n  services = get_services(context)\n\n  for service in services.values():\n    query = appengine_api.apps().services().versions().list(\n        appsId=context.project_id, servicesId=service.id)\n    try:\n      resp = query.execute(num_retries=config.API_RETRIES)\n      if 'versions' not in resp:\n        return versions\n      for resp_s in resp['versions']:\n        # verify that we have some minimal data that we expect\n        if 'id' not in resp_s:\n          raise RuntimeError('missing data in apps.services.list response')\n        v = Version(project_id=context.project_id, resource_data=resp_s)\n        v.service = service\n        versions[v.id] = v\n    except googleapiclient.errors.HttpError as err:\n      raise utils.GcpApiError(err) from err\n\n    logging.debug('fetching list of app engine services in the project %s',\n                  context.project_id)\n\n  return versions\n"
  },
  {
    "path": "gcpdiag/queries/gae_stub.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Stub API calls used in gae.py for testing.\n\nInstead of doing real API calls, we return test JSON data.\n\"\"\"\n\nfrom gcpdiag.queries import apis_stub\n\n#pylint: disable=unused-argument\n#pylint: disable=invalid-name\n\n\nclass AppEngineApiStub(apis_stub.ApiStub):\n  \"\"\"Mock object to simulate App Engine api calls.\"\"\"\n\n  def __init__(self, mock_state='init'):\n    self.mock_state = mock_state\n\n  def apps(self):\n    return self\n\n  def services(self):\n    return AppEngineApiStub('services')\n\n  def versions(self):\n    return AppEngineApiStub('versions')\n\n  def list(self, appsId='appsId', servicesId='servicesId'):\n    if self.mock_state == 'services':\n      return apis_stub.RestCallStub(appsId, 'appengine_services')\n    else:\n      return apis_stub.RestCallStub(appsId, 'versions')\n"
  },
  {
    "path": "gcpdiag/queries/gae_test.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Test code in gae.py.\"\"\"\n\nfrom unittest import mock\n\nfrom gcpdiag import models\nfrom gcpdiag.queries import apis_stub, gae\n\nDUMMY_PROJECT_NAME = 'gcpdiag-gaes1-aaaa'\n\n\n@mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)\nclass TestAppEngine:\n  \"\"\"Test App Engine\"\"\"\n\n  def test_get_services(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    services = gae.get_services(context)\n    assert len(services) == 1\n\n  def test_get_versions(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    versions = gae.get_versions(context)\n    assert len(versions) == 1\n"
  },
  {
    "path": "gcpdiag/queries/gcb.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Queries related to GCP Cloud Build instances.\"\"\"\n\nimport dataclasses\nimport datetime\nimport logging\nimport re\nfrom typing import Dict, List, Mapping, Optional\n\nimport googleapiclient.errors\n\nfrom gcpdiag import caching, config, models, utils\nfrom gcpdiag.queries import apis, apis_utils\n\n# List of locations from https://cloud.google.com/build/docs/locations\n# There is no API to get them programmatically.\nLOCATIONS = [\n    '-',  # global\n    'asia-east1',\n    'asia-east2',\n    'asia-northeast1',\n    'asia-northeast2',\n    'asia-northeast3',\n    'asia-south1',\n    'asia-southeast1',\n    'asia-southeast2',\n    'australia-southeast1',\n    'europe-central2',\n    'europe-north1',\n    'europe-west1',\n    'europe-west2',\n    'europe-west3',\n    'europe-west4',\n    'europe-west6',\n    'northamerica-northeast1',\n    'southamerica-east1',\n    'us-central1',\n    'us-east1',\n    'us-east4',\n    'us-west1',\n    'us-west2',\n    'us-west3',\n    'us-west4',\n]\n\n\n@dataclasses.dataclass(frozen=True)\nclass BuildOptions:\n  \"\"\"representation of build.options object\"\"\"\n  logging: str\n  log_streaming_option: str\n\n  def is_bucket_streaming_enabled(self) -> bool:\n    return (self.logging != 'GCS_ONLY' or\n            self.log_streaming_option != 'STREAM_OFF')\n\n\nclass BuildOptionsBuilder:\n  \"\"\"Build options builder from dictionary.\"\"\"\n\n  def __init__(self, options: dict):\n    self._options = options\n\n  def build(self) -> BuildOptions:\n    return BuildOptions(\n        logging=self._get_logging(),\n        log_streaming_option=self._get_log_streaming_option(),\n    )\n\n  def _get_logging(self) -> str:\n    return self._options.get('logging', 'LEGACY')\n\n  def _get_log_streaming_option(self) -> str:\n    return self._options.get('logStreamingOption', 'LOGGING_UNSPECIFIED')\n\n\n@dataclasses.dataclass(frozen=True)\nclass FailureInfo:\n  \"\"\"Wrapper around build.failureInfo object.\"\"\"\n  failure_type: str\n\n\nclass FailureInfoBuilder:\n  \"\"\"Wrapper around build.failureInfo object.\"\"\"\n\n  def __init__(self, failure_info: dict):\n    self._failure_info = failure_info\n\n  def build(self) -> FailureInfo:\n    return FailureInfo(failure_type=self._get_failure_type())\n\n  def _get_failure_type(self) -> str:\n    return self._failure_info.get('type', '')\n\n\nclass Build(models.Resource):\n  \"\"\"Represents a Cloud Build execution.\"\"\"\n  _resource_data: dict\n\n  def __init__(self, project_id, location, resource_data):\n    super().__init__(project_id=project_id)\n    self.location = location\n    self._resource_data = resource_data\n\n  @property\n  def id(self) -> str:\n    return self._resource_data['id']\n\n  @property\n  def full_path(self) -> str:\n    return f'projects/{self.project_id}/locations/{self.location}/builds/{self.id}'\n\n  @property\n  def short_path(self) -> str:\n    path = self.project_id + '/' + self.id\n    return path\n\n  @property\n  def status(self) -> str:\n    return self._resource_data['status']\n\n  @property\n  def service_account(self) -> Optional[str]:\n    return self._resource_data.get('serviceAccount')\n\n  @property\n  def images(self) -> List[str]:\n    return self._resource_data.get('images', [])\n\n  @property\n  def logs_bucket(self) -> str:\n    return self._resource_data.get('logsBucket', '')\n\n  @property\n  def options(self) -> BuildOptions:\n    return BuildOptionsBuilder(self._resource_data.get('options', {})).build()\n\n  @property\n  def failure_info(self) -> FailureInfo:\n    return FailureInfoBuilder(self._resource_data.get('failureInfo',\n                                                      {})).build()\n\n\nclass Trigger(models.Resource):\n  \"\"\"Represents a Cloud Build trigger instance.\"\"\"\n  _resource_data: dict\n\n  def __init__(self, project_id, resource_data):\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n\n  @property\n  def name(self) -> str:\n    if 'name' not in self._resource_data:\n      return ''\n    return self._resource_data['name']\n\n  @property\n  def id(self) -> str:\n    return self._resource_data['id']\n\n  @property\n  def full_path(self) -> str:\n    return f'projects/{self.project_id}/locations/-/triggers/{self.id}'\n\n  @property\n  def short_path(self) -> str:\n    path = self.project_id + '/' + self.id\n    return path\n\n\n@caching.cached_api_call\ndef get_builds(context: models.Context) -> Mapping[str, Build]:\n  \"\"\"Get a list of Cloud Build instances matching the given context, indexed by Cloud Build id.\"\"\"\n  if not apis.is_enabled(context.project_id, 'cloudbuild'):\n    return {}\n  build_api = apis.get_api('cloudbuild', 'v1', context.project_id)\n  batch = []\n  builds = {}\n  start_time = datetime.datetime.now(\n      datetime.timezone.utc) - datetime.timedelta(\n          days=config.get('within_days'))\n  logging.debug('fetching list of builds in the project %s', context.project_id)\n  for location in LOCATIONS:\n    query = build_api.projects().locations().builds().list(\n        parent=f'projects/{context.project_id}/locations/{location}',\n        filter=f'create_time>\"{start_time.isoformat()}\"')\n    batch.append(query)\n  for request, response, exception in apis_utils.execute_concurrently(\n      api=build_api, requests=batch, context=context):\n    if exception:\n      if isinstance(exception, googleapiclient.errors.HttpError):\n        raise utils.GcpApiError(exception) from exception\n      else:\n        raise exception\n    if request is None or not hasattr(request, 'uri'):\n      logging.warning('Skipping request in batch, invalid request: %s', request)\n      continue\n    match = re.search(r'projects/([^/]+)/locations/([^/]+)', request.uri)\n    assert match, 'Bug: request uri does not match respected format'\n    project_id = match.group(1)\n    location = match.group(2)\n    if response is None or 'builds' not in response:\n      continue\n    for build in response['builds']:\n      # verify that we have some minimal data that we expect\n      if 'id' not in build:\n        raise RuntimeError(\n            'missing data in projects.locations.builds.list response')\n      r = re.search(r'projects/([^/]+)/locations/([^/]+)/builds/([^/]+)',\n                    build['name'])\n      if not r:\n        logging.error('build has invalid data: %s', build['name'])\n        continue\n\n      if not context.match_project_resource(resource=r.group(3)):\n        continue\n\n      builds[build['id']] = Build(project_id=project_id,\n                                  location=location,\n                                  resource_data=build)\n  return builds\n\n\n@caching.cached_api_call\ndef get_triggers(context: models.Context) -> Mapping[str, Trigger]:\n  \"\"\"Get a list of Cloud Build triggers matching the given context,\n     indexed by Cloud Build trigger id.\"\"\"\n  triggers: Dict[str, Trigger] = {}\n  if not apis.is_enabled(context.project_id, 'cloudbuild'):\n    return triggers\n  build_api = apis.get_api('cloudbuild', 'v1', context.project_id)\n  logging.debug('fetching list of triggers in the project %s',\n                context.project_id)\n  query = build_api.projects().locations().triggers().list(\n      parent=f'projects/{context.project_id}/locations/global')\n  try:\n    resp = query.execute(num_retries=config.API_RETRIES)\n    if 'triggers' not in resp:\n      return triggers\n    for resp_f in resp['triggers']:\n      # verify that we have some minimal data that we expect\n      if 'id' not in resp_f:\n        raise RuntimeError(\n            'missing data in projects.locations.triggers.list response')\n      f = Trigger(project_id=context.project_id, resource_data=resp_f)\n      triggers[f.id] = f\n  except googleapiclient.errors.HttpError as err:\n    raise utils.GcpApiError(err) from err\n  return triggers\n"
  },
  {
    "path": "gcpdiag/queries/gcb_stub.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Stub API calls used in gcf.py for testing.\n\nInstead of doing real API calls, we return test JSON data.\n\"\"\"\n\nimport re\n\nfrom gcpdiag.queries import apis_stub\n\n#pylint: disable=unused-argument\n\n\nclass CloudBuildApiStub:\n  \"\"\"Mock object to simulate function api calls.\"\"\"\n\n  def new_batch_http_request(self):\n    return apis_stub.BatchRequestStub()\n\n  def projects(self):\n    return self\n\n  def locations(self):\n    return self\n\n  def builds(self):\n    return CloudBuildBuildsApiStub()\n\n  def triggers(self):\n    return CloudBuildTriggersApiStub()\n\n\nclass CloudBuildBuildsApiStub:\n  \"\"\"Mock object to simulate functions of builds api calls.\"\"\"\n\n  # pylint: disable-next=redefined-builtin\n  def list(self, parent, filter):\n    del filter  # unused\n    m = re.match(r'^projects/([^/]+)/locations/([^/]+)', parent)\n    project_id = m.group(1)\n    location = m.group(2)\n    if location == '-':\n      path = 'cloudbuild'\n    else:\n      path = f'cloudbuild-{location}'\n    return apis_stub.RestCallStub(\n        project_id,\n        path,\n        default={},\n        request_uri=f'https://build.googleapis.com/{parent}')\n\n\nclass CloudBuildTriggersApiStub:\n  \"\"\"Mock object to simulate functions of triggers api calls.\"\"\"\n\n  def list(self, parent):\n    m = re.match(r'projects/([^/]+)/', parent)\n    project_id = m.group(1)\n    return apis_stub.RestCallStub(project_id, 'cloudbuild-triggers')\n"
  },
  {
    "path": "gcpdiag/queries/gcb_test.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Test code in gcb.py.\"\"\"\n\nfrom unittest import mock\n\nfrom gcpdiag import models\nfrom gcpdiag.queries import apis_stub, gcb\n\nDUMMY_PROJECT_NAME = 'gcpdiag-gcb1-aaaa'\nBUILD_ID_FAILED_STEP = '01ff384c-d7f2-4295-ad68-5c32529d8b85'\nBUIDL_ID_FAILED_LOGGING = '58c22070-5629-480e-b822-cd8eff7befb8'\nBUIDL_ID_SUCCESS_LOGGING = '4b040094-4204-4f00-a7bd-302639dd6785'\nBUILD_ID_FAILED_IMAGE_UPLOAD = 'db540598-5a45-46f3-a716-39d834e884c6'\nBUILD_ID_REGIONAL = 'f055f209-21ef-4fa1-84f8-8509d24b0fae'\nCUSTOM1_SERVICE_ACCOUNT = \\\n  'projects/gcpdiag-gcb1-aaaa/serviceAccounts/gcb-custom1@gcpdiag-gcb1-aaaa.iam.gserviceaccount.com'\nBUILD_IMAGE = 'us-central1-docker.pkg.dev/gcpdiag-gcb1-aaaa/gcb1-repository/image'\n\n\n@mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)\nclass TestCloudBuild:\n  \"\"\"Test Cloud Build\"\"\"\n\n  def test_get_builds(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    builds = gcb.get_builds(context=context)\n    assert len(builds) == 6\n    assert BUILD_ID_FAILED_STEP in builds\n    assert BUIDL_ID_FAILED_LOGGING in builds\n    assert BUIDL_ID_SUCCESS_LOGGING in builds\n    assert BUILD_ID_FAILED_IMAGE_UPLOAD in builds\n    assert BUILD_ID_REGIONAL in builds\n\n  def test_build_service_account(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    builds = gcb.get_builds(context=context)\n    assert (builds[BUILD_ID_FAILED_IMAGE_UPLOAD].service_account ==\n            CUSTOM1_SERVICE_ACCOUNT)\n    assert builds[BUILD_ID_FAILED_STEP].service_account is None\n\n  def test_build_images(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    builds = gcb.get_builds(context=context)\n    assert builds[BUILD_ID_FAILED_IMAGE_UPLOAD].images == [BUILD_IMAGE]\n    assert builds[BUILD_ID_FAILED_STEP].images == []\n\n  def test_build_failure_info(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    builds = gcb.get_builds(context=context)\n    assert builds[BUILD_ID_FAILED_IMAGE_UPLOAD].failure_info.failure_type == ''\n    assert (builds[BUIDL_ID_FAILED_LOGGING].failure_info.failure_type ==\n            'LOGGING_FAILURE')\n    assert (builds[BUILD_ID_FAILED_STEP].failure_info.failure_type ==\n            'USER_BUILD_STEP')\n\n  def test_build_options(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    builds = gcb.get_builds(context=context)\n    assert (builds[BUIDL_ID_SUCCESS_LOGGING].options.log_streaming_option ==\n            'STREAM_OFF')\n    assert builds[BUIDL_ID_SUCCESS_LOGGING].options.logging == 'GCS_ONLY'\n"
  },
  {
    "path": "gcpdiag/queries/gce.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Queries related to GCP Compute Engine.\"\"\"\n\nimport concurrent.futures\nimport dataclasses\nimport ipaddress\nimport logging\nimport re\nfrom datetime import datetime, timezone\nfrom typing import Any, Dict, Iterable, List, Mapping, Optional, Sequence, Set\n\nimport googleapiclient.errors\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import caching, config, executor, models, utils\nfrom gcpdiag.queries import apis, apis_utils, crm\nfrom gcpdiag.queries import network as network_q\n\nPOSITIVE_BOOL_VALUES = {'Y', 'YES', 'TRUE', '1'}\n\nDATAPROC_LABEL = 'goog-dataproc-cluster-name'\nGKE_LABEL = 'goog-gke-node'\n\n\nclass InstanceTemplate(models.Resource):\n  \"\"\"Represents a GCE Instance Template.\"\"\"\n\n  _resource_data: dict\n\n  def __init__(self, project_id, resource_data):\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n\n  @property\n  def self_link(self) -> str:\n    return self._resource_data['selfLink']\n\n  @property\n  def full_path(self) -> str:\n    result = re.match(r'https://www.googleapis.com/compute/v1/(.*)',\n                      self.self_link)\n    if result:\n      return result.group(1)\n    else:\n      return f'>> {self.self_link}'\n\n  @property\n  def short_path(self) -> str:\n    path = self.project_id + '/' + self.name\n    return path\n\n  @property\n  def name(self) -> str:\n    return self._resource_data['name']\n\n  @property\n  def tags(self) -> List[str]:\n    return self._resource_data['properties'].get('tags', {}).get('items', [])\n\n  @property\n  def service_account(self) -> Optional[str]:\n    sa_list = self._resource_data['properties'].get('serviceAccounts', [])\n    if not sa_list:\n      return None\n    email = sa_list[0]['email']\n    if email == 'default':\n      project_nr = crm.get_project(self._project_id).number\n      return f'{project_nr}-compute@developer.gserviceaccount.com'\n    return email\n\n  @property\n  def network(self) -> network_q.Network:\n    return network_q.get_network_from_url(\n        self._resource_data['properties']['networkInterfaces'][0]['network'])\n\n  @property\n  def subnetwork(self) -> network_q.Subnetwork:\n    subnet_url = self._resource_data['properties']['networkInterfaces'][0][\n        'subnetwork']\n    return self.network.subnetworks[subnet_url]\n\n  def get_metadata(self, key: str) -> str:\n    for item in self._resource_data['properties']['metadata']['items']:\n      if item['key'] == key:\n        return item['value']\n    return ''\n\n\nclass InstanceGroup(models.Resource):\n  \"\"\"Represents a GCE instance group.\"\"\"\n\n  _resource_data: dict\n\n  def __init__(self, project_id, resource_data):\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n\n  @property\n  def full_path(self) -> str:\n    result = re.match(\n        r'https://www.googleapis.com/compute/v1/(.*)',\n        self._resource_data['selfLink'],\n    )\n    if result:\n      return result.group(1)\n    else:\n      return '>> ' + self._resource_data['selfLink']\n\n  @property\n  def short_path(self) -> str:\n    path = self.project_id + '/' + self.name\n    return path\n\n  @property\n  def self_link(self) -> str:\n    return self._resource_data['selfLink']\n\n  @property\n  def name(self) -> str:\n    return self._resource_data['name']\n\n  @property\n  def named_ports(self) -> List[dict]:\n    if 'namedPorts' in self._resource_data:\n      return self._resource_data['namedPorts']\n    return []\n\n  def has_named_ports(self) -> bool:\n    if 'namedPorts' in self._resource_data:\n      return True\n    return False\n\n\nclass ManagedInstanceGroup(models.Resource):\n  \"\"\"Represents a GCE managed instance group.\"\"\"\n\n  _resource_data: dict\n  _region: Optional[str]\n\n  def __init__(self, project_id, resource_data):\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n    self._region = None\n\n  @property\n  def full_path(self) -> str:\n    result = re.match(\n        r'https://www.googleapis.com/compute/v1/(.*)',\n        self._resource_data['selfLink'],\n    )\n    if result:\n      return result.group(1)\n    else:\n      return '>> ' + self._resource_data['selfLink']\n\n  @property\n  def short_path(self) -> str:\n    path = self.project_id + '/' + self.name\n    return path\n\n  def is_gke(self) -> bool:\n    \"\"\"Is this managed instance group part of a GKE cluster?\n\n    Note that the results are based on heuristics (the mig name),\n    which is not ideal.\n\n    Returns:\n        bool: True if this managed instance group is part of a GKE cluster.\n    \"\"\"\n\n    # gke- is normal GKE, gk3- is GKE autopilot\n    return self.name.startswith('gke-') or self.name.startswith('gk3-')\n\n  @property\n  def self_link(self) -> str:\n    return self._resource_data['selfLink']\n\n  @property\n  def name(self) -> str:\n    return self._resource_data['name']\n\n  @property\n  def region(self) -> str:\n    if self._region is None:\n      if 'region' in self._resource_data:\n        m = re.search(r'/regions/([^/]+)$', self._resource_data['region'])\n        if not m:\n          raise RuntimeError(\"can't determine region of mig %s (%s)\" %\n                             (self.name, self._resource_data['region']))\n        self._region = m.group(1)\n      elif 'zone' in self._resource_data:\n        m = re.search(r'/zones/([^/]+)$', self._resource_data['zone'])\n        if not m:\n          raise RuntimeError(\"can't determine region of mig %s (%s)\" %\n                             (self.name, self._resource_data['region']))\n        zone = m.group(1)\n        self._region = utils.zone_region(zone)\n      else:\n        raise RuntimeError(\n            f\"can't determine region of mig {self.name}, both region and zone\"\n            \" aren't set!\")\n    return self._region\n\n  @property\n  def zone(self) -> Optional[str]:\n    if 'zone' in self._resource_data:\n      m = re.search(r'/zones/([^/]+)$', self._resource_data['zone'])\n      if not m:\n        raise RuntimeError(\"can't determine zone of mig %s (%s)\" %\n                           (self.name, self._resource_data['zone']))\n      return m.group(1)\n    return None\n\n  def count_no_action_instances(self) -> int:\n    \"\"\"number of instances in the mig that are running and have no scheduled actions.\"\"\"\n    return self._resource_data['currentActions']['none']\n\n  def is_instance_member(self, project_id: str, region: str,\n                         instance_name: str):\n    \"\"\"Given the project_id, region and instance name, is it a member of this MIG?\"\"\"\n    return (self.project_id == project_id and self.region == region and\n            instance_name.startswith(self._resource_data['baseInstanceName']))\n\n  @property\n  def template(self) -> InstanceTemplate:\n    if 'instanceTemplate' not in self._resource_data:\n      raise RuntimeError('instanceTemplate not set for MIG {self.name}')\n\n    m = re.match(\n        r'https://www.googleapis.com/compute/v1/(.*)',\n        self._resource_data['instanceTemplate'],\n    )\n\n    if not m:\n      raise RuntimeError(\"can't parse instanceTemplate: %s\" %\n                         self._resource_data['instanceTemplate'])\n    template_self_link = m.group(1)\n    templates = get_instance_templates(self.project_id)\n    if template_self_link not in templates:\n      raise RuntimeError(\n          f'instanceTemplate {template_self_link} for MIG {self.name} not found'\n      )\n    return templates[template_self_link]\n\n  @property\n  def version_target_reached(self) -> bool:\n    return get_path(self._resource_data,\n                    ('status', 'versionTarget', 'isReached'))\n\n  def get(self, path: str, default: Any = None) -> Any:\n    \"\"\"Gets a value from resource_data using a dot-separated path.\"\"\"\n    return get_path(self._resource_data,\n                    tuple(path.split('.')),\n                    default=default)\n\n\nclass Autoscaler(models.Resource):\n  \"\"\"Represents a GCE Autoscaler.\"\"\"\n\n  _resource_data: dict\n\n  def __init__(self, project_id, resource_data):\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n\n  @property\n  def self_link(self) -> str:\n    return self._resource_data['selfLink']\n\n  @property\n  def full_path(self) -> str:\n    result = re.match(r'https://www.googleapis.com/compute/v1/(.*)',\n                      self.self_link)\n    if result:\n      return result.group(1)\n    else:\n      return f'>> {self.self_link}'\n\n  @property\n  def name(self) -> str:\n    return self._resource_data['name']\n\n  def get(self, path: str, default: Any = None) -> Any:\n    \"\"\"Gets a value from resource_data using a dot-separated path.\"\"\"\n    return get_path(self._resource_data,\n                    tuple(path.split('.')),\n                    default=default)\n\n\nclass SerialPortOutput:\n  \"\"\"Represents the full Serial Port Output (/dev/ttyS0 or COM1) of an instance.\n\n  contents is the full 1MB of the instance.\n  \"\"\"\n\n  _project_id: str\n  _instance_id: str\n  _contents: List[str]\n\n  def __init__(self, project_id, instance_id, contents):\n    self._project_id = project_id\n    self._instance_id = instance_id\n    self._contents = contents\n\n  @property\n  def contents(self) -> List[str]:\n    return self._contents\n\n  @property\n  def instance_id(self) -> str:\n    return self._instance_id\n\n\nclass Instance(models.Resource):\n  \"\"\"Represents a GCE instance.\"\"\"\n\n  _resource_data: dict\n  _region: Optional[str]\n\n  def __init__(self, project_id, resource_data):\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n    self._metadata_dict = None\n    self._region = None\n\n  @property\n  def id(self) -> str:\n    return self._resource_data['id']\n\n  @property\n  def name(self) -> str:\n    return self._resource_data['name']\n\n  @property\n  def full_path(self) -> str:\n    result = re.match(\n        r'https://www.googleapis.com/compute/v1/(.*)',\n        self._resource_data['selfLink'],\n    )\n    if result:\n      return result.group(1)\n    else:\n      return '>> ' + self._resource_data['selfLink']\n\n  @property\n  def short_path(self) -> str:\n    # Note: instance names must be unique per project,\n    # so no need to add the zone.\n    path = self.project_id + '/' + self.name\n    return path\n\n  @property\n  def creation_timestamp(self) -> datetime:\n    \"\"\"VM creation time, as a *naive* `datetime` object.\"\"\"\n    return (datetime.fromisoformat(\n        self._resource_data['creationTimestamp']).astimezone(\n            timezone.utc).replace(tzinfo=None))\n\n  @property\n  def region(self) -> str:\n    if self._region is None:\n      if 'zone' in self._resource_data:\n        m = re.search(r'/zones/([^/]+)$', self._resource_data['zone'])\n        if not m:\n          raise RuntimeError(\"can't determine region of instance %s (%s)\" %\n                             (self.name, self._resource_data['region']))\n        zone = m.group(1)\n        self._region = utils.zone_region(zone)\n      else:\n        raise RuntimeError(\n            f\"can't determine region of instance {self.name}, zone isn't set!\")\n    return self._region\n\n  @property\n  def zone(self) -> str:\n    zone_uri = self._resource_data['zone']\n    m = re.search(r'/zones/([^/]+)$', zone_uri)\n    if m:\n      return m.group(1)\n    else:\n      raise RuntimeError(f\"can't determine zone of instance {self.name}\")\n\n  @property\n  def disks(self) -> List[dict]:\n    if 'disks' in self._resource_data:\n      return self._resource_data['disks']\n    return []\n\n  @property\n  def boot_disk_licenses(self) -> List[str]:\n    \"\"\"Returns license names associated with boot disk.\"\"\"\n    for disk in self.disks:\n      if disk.get('boot'):\n        return [\n            l.partition('/global/licenses/')[2]\n            for l in disk.get('licenses', [])\n        ]\n    return []\n\n  @property\n  def guest_os_features(self) -> List[str]:\n    \"\"\"Returns guestOsFeatures types associated with boot disk.\"\"\"\n    for disk in self.disks:\n      if disk.get('boot'):\n        return [f['type'] for f in disk.get('guestOsFeatures', [])]\n    return []\n\n  @property\n  def startrestricted(self) -> bool:\n    return self._resource_data['startRestricted']\n\n  def laststarttimestamp(self) -> str:\n    return self._resource_data['lastStartTimestamp']\n\n  def laststoptimestamp(self) -> str:\n    if 'lastStopTimestamp' in self._resource_data:\n      return self._resource_data['lastStopTimestamp']\n    return ''\n\n  def is_serial_port_logging_enabled(self) -> bool:\n    value = self.get_metadata('serial-port-logging-enable')\n    return bool(value and value.upper() in POSITIVE_BOOL_VALUES)\n\n  def is_oslogin_enabled(self) -> bool:\n    value = self.get_metadata('enable-oslogin')\n    return bool(value and value.upper() in POSITIVE_BOOL_VALUES)\n\n  def is_metadata_enabled(self, metadata_name) -> bool:\n    \"\"\"Use to check for common boolean metadata value\"\"\"\n    value = self.get_metadata(metadata_name)\n    return bool(value and value.upper() in POSITIVE_BOOL_VALUES)\n\n  def has_label(self, label) -> bool:\n    return label in self.labels\n\n  def is_dataproc_instance(self) -> bool:\n    return self.has_label(DATAPROC_LABEL)\n\n  def is_gke_node(self) -> bool:\n    return self.has_label(GKE_LABEL)\n\n  @property\n  def is_preemptible_vm(self) -> bool:\n    return ('scheduling' in self._resource_data and\n            'preemptible' in self._resource_data['scheduling'] and\n            self._resource_data['scheduling']['preemptible'])\n\n  def min_cpu_platform(self) -> str:\n    if 'minCpuPlatform' in self._resource_data:\n      return self._resource_data['minCpuPlatform']\n    return 'None'\n\n  @property\n  def created_by_mig(self) -> bool:\n    \"\"\"Return bool indicating if the instance part of a mig.\n\n    MIG which were part of MIG however have been removed or terminated will\n    return True.\n    \"\"\"\n    created_by = self.get_metadata('created-by')\n    if created_by is None:\n      return False\n\n    created_by_match = re.match(\n        r'projects/([^/]+)/((?:regions|zones)/[^/]+/instanceGroupManagers/[^/]+)$',\n        created_by,\n    )\n    if not created_by_match:\n      return False\n    return True\n\n  def is_windows_machine(self) -> bool:\n    if 'disks' in self._resource_data:\n      disks = next(iter(self._resource_data['disks']))\n      if 'guestOsFeatures' in disks:\n        if 'WINDOWS' in [t['type'] for t in iter(disks['guestOsFeatures'])]:\n          return True\n    return False\n\n  def is_public_machine(self) -> bool:\n    if 'networkInterfaces' in self._resource_data:\n      return 'natIP' in str(self._resource_data['networkInterfaces'])\n    return False\n\n  def machine_type(self):\n    if 'machineType' in self._resource_data:\n      # return self._resource_data['machineType']\n      machine_type_uri = self._resource_data['machineType']\n      mt = re.search(r'/machineTypes/([^/]+)$', machine_type_uri)\n      if mt:\n        return mt.group(1)\n      else:\n        raise RuntimeError(\n            f\"can't determine machineType of instance {self.name}\")\n    return None\n\n  def check_license(self, licenses: List[str]) -> bool:\n    \"\"\"Checks that a license is contained in a given license list.\"\"\"\n    if 'disks' in self._resource_data:\n      for disk in self._resource_data['disks']:\n        if 'license' in str(disk):\n          for license_ in licenses:\n            for attached_license in disk['licenses']:\n              if license_ == attached_license.partition('/global/licenses/')[2]:\n                return True\n    return False\n\n  def get_boot_disk_image(self) -> str:\n    \"\"\"Get VM's boot disk image.\"\"\"\n    boot_disk_image: str = ''\n    for disk in self.disks:\n      if disk.get('boot', False):\n        disk_source = disk.get('source', '')\n        m = re.search(r'/disks/([^/]+)$', disk_source)\n        if not m:\n          raise RuntimeError(f\"can't determine name of boot disk {disk_source}\")\n        disk_name = m.group(1)\n        gce_disk: Disk = get_disk(self.project_id,\n                                  zone=self.zone,\n                                  disk_name=disk_name)\n        return gce_disk.source_image\n    return boot_disk_image\n\n  @property\n  def is_sole_tenant_vm(self) -> bool:\n    return bool('nodeAffinities' in self._resource_data['scheduling'])\n\n  @property\n  def network(self) -> network_q.Network:\n    # 'https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default'\n    network_string = self._resource_data['networkInterfaces'][0]['network']\n    m = re.match(r'^.+/projects/([^/]+)/global/networks/([^/]+)$',\n                 network_string)\n    if not m:\n      raise RuntimeError(\"can't parse network string: %s\" % network_string)\n    return network_q.get_network(m.group(1),\n                                 m.group(2),\n                                 context=models.Context(project_id=m.group(1)))\n\n  @property\n  def network_ips(self) -> List[network_q.IPv4AddrOrIPv6Addr]:\n    return [\n        ipaddress.ip_address(nic['networkIP'])\n        for nic in self._resource_data['networkInterfaces']\n    ]\n\n  @property\n  def get_network_interfaces(self):\n    return self._resource_data['networkInterfaces']\n\n  @property\n  def subnetworks(self) -> List[network_q.Subnetwork]:\n    subnetworks = []\n    for nic in self._resource_data['networkInterfaces']:\n      subnetworks.append(network_q.get_subnetwork_from_url(nic['subnetwork']))\n    return subnetworks\n\n  @property\n  def routes(self) -> List[network_q.Route]:\n    routes = []\n    for nic in self._resource_data['networkInterfaces']:\n      for route in network_q.get_routes(self.project_id):\n        if nic['network'] == route.network:\n          if route.tags == []:\n            routes.append(route)\n            continue\n          else:\n            temp = [x for x in self.tags if x in route.tags]\n            if len(temp) > 0:\n              routes.append(route)\n    return routes\n\n  def get_network_ip_for_instance_interface(\n      self, network: str) -> Optional[network_q.IPv4NetOrIPv6Net]:\n    \"\"\"Get the network ip for a nic given a network name.\"\"\"\n    for nic in self._resource_data['networkInterfaces']:\n      if nic.get('network') == network:\n        return ipaddress.ip_network(nic.get('networkIP'))\n    return None\n\n  def secure_boot_enabled(self) -> bool:\n    if 'shieldedInstanceConfig' in self._resource_data:\n      return self._resource_data['shieldedInstanceConfig']['enableSecureBoot']\n    return False\n\n  @property\n  def access_scopes(self) -> List[str]:\n    if 'serviceAccounts' in self._resource_data:\n      saccts = self._resource_data['serviceAccounts']\n      if isinstance(saccts, list) and len(saccts) >= 1:\n        return saccts[0].get('scopes', [])\n    return []\n\n  @property\n  def service_account(self) -> Optional[str]:\n    if 'serviceAccounts' in self._resource_data:\n      saccts = self._resource_data['serviceAccounts']\n      if isinstance(saccts, list) and len(saccts) >= 1:\n        return saccts[0]['email']\n    return None\n\n  @property\n  def tags(self) -> List[str]:\n    if 'tags' in self._resource_data:\n      if 'items' in self._resource_data['tags']:\n        return self._resource_data['tags']['items']\n    return []\n\n  def get_metadata(self, key: str) -> str:\n    if not self._metadata_dict:\n      self._metadata_dict = {}\n      if ('metadata' in self._resource_data and\n          'items' in self._resource_data['metadata']):\n        for item in self._resource_data['metadata']['items']:\n          if 'key' in item and 'value' in item:\n            self._metadata_dict[item['key']] = item['value']\n    project_metadata = get_project_metadata(self.project_id)\n    return self._metadata_dict.get(key, project_metadata.get(key))\n\n  @property\n  def status(self) -> str:\n    \"\"\"VM Status.\"\"\"\n    return self._resource_data.get('status', None)\n\n  @property\n  def is_running(self) -> bool:\n    \"\"\"VM Status is indicated as running.\"\"\"\n    return self._resource_data.get('status', False) == 'RUNNING'\n\n  @property\n  def network_interface_count(self) -> int:\n    \"\"\"Returns the number of network interfaces attached to the instance.\"\"\"\n    return len(self._resource_data.get('networkInterfaces', []))\n\n  @property  # type: ignore\n  @caching.cached_api_call(in_memory=True)\n  def mig(self) -> ManagedInstanceGroup:\n    \"\"\"Return ManagedInstanceGroup that owns this instance.\n\n    Throws AttributeError in case it isn't MIG-managed.\n    \"\"\"\n\n    created_by = self.get_metadata('created-by')\n    if created_by is None:\n      raise AttributeError(f'instance {self.id} is not managed by a mig')\n\n    # Example created-by:\n    # pylint: disable=line-too-long\n    # \"projects/12340002/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-e5e20a34-grp\"\n    # (note how it uses a project number and not a project id...)\n    created_by_match = re.match(\n        r'projects/([^/]+)/((?:regions|zones)/[^/]+/instanceGroupManagers/[^/]+)$',\n        created_by,\n    )\n    if not created_by_match:\n      raise AttributeError(f'instance {self.id} is not managed by a mig'\n                           f' (created-by={created_by})')\n    project = crm.get_project(created_by_match.group(1))\n\n    mig_self_link = ('https://www.googleapis.com/compute/v1/'\n                     f'projects/{project.id}/{created_by_match.group(2)}')\n\n    # Try to find a matching mig.\n    context = models.Context(project_id=self.project_id)\n    all_migs = list(get_managed_instance_groups(context).values()) + list(\n        get_region_managed_instance_groups(context).values())\n\n    for mig in all_migs:\n      if mig.self_link == mig_self_link:\n        return mig\n\n    raise AttributeError(f'MIG not found for instance {self.id}. '\n                         f'Created by: {created_by}')\n\n  @property\n  def labels(self) -> dict:\n    return self._resource_data.get('labels', {})\n\n\nclass Disk(models.Resource):\n  \"\"\"Represents a GCE disk.\"\"\"\n\n  _resource_data: dict\n\n  def __init__(self, project_id, resource_data):\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n\n  @property\n  def id(self) -> str:\n    return self._resource_data['id']\n\n  @property\n  def name(self) -> str:\n    return self._resource_data['name']\n\n  @property\n  def type(self) -> str:\n    disk_type = re.search(r'/diskTypes/([^/]+)$', self._resource_data['type'])\n    if not disk_type:\n      raise RuntimeError(\"can't determine type of the disk %s (%s)\" %\n                         (self.name, self._resource_data['type']))\n    return disk_type.group(1)\n\n  @property\n  def users(self) -> list:\n    pattern = r'/instances/(.+)$'\n    # Extracting the instances\n    instances = []\n    for i in self._resource_data.get('users', []):\n      m = re.search(pattern, i)\n      if m:\n        instances.append(m.group(1))\n    return instances\n\n  @property\n  def zone(self) -> str:\n    m = re.search(r'/zones/([^/]+)$', self._resource_data['zone'])\n    if not m:\n      raise RuntimeError(\"can't determine zone of disk %s (%s)\" %\n                         (self.name, self._resource_data['zone']))\n    return m.group(1)\n\n  @property\n  def source_image(self) -> str:\n    return self._resource_data.get('sourceImage', '')\n\n  @property\n  def full_path(self) -> str:\n    result = re.match(\n        r'https://www.googleapis.com/compute/v1/(.*)',\n        self._resource_data['selfLink'],\n    )\n    if result:\n      return result.group(1)\n    else:\n      return '>> ' + self._resource_data['selfLink']\n\n  @property\n  def short_path(self) -> str:\n    return f'{self.project_id}/{self.name}'\n\n  @property\n  def bootable(self) -> bool:\n    return 'guestOsFeatures' in self._resource_data\n\n  @property\n  def in_use(self) -> bool:\n    return 'users' in self._resource_data\n\n  @property\n  def size(self) -> int:\n    return self._resource_data['sizeGb']\n\n  @property\n  def provisionediops(self) -> Optional[int]:\n    return self._resource_data.get('provisionedIops')\n\n  @property\n  def has_snapshot_schedule(self) -> bool:\n    return 'resourcePolicies' in self._resource_data\n\n\n@caching.cached_api_call(in_memory=True)\ndef get_gce_zones(project_id: str) -> Set[str]:\n  try:\n    gce_api = apis.get_api('compute', 'v1', project_id)\n    logging.debug('listing gce zones of project %s', project_id)\n    request = gce_api.zones().list(project=project_id)\n    response = request.execute(num_retries=config.API_RETRIES)\n    if not response or 'items' not in response:\n      return set()\n    return {item['name'] for item in response['items'] if 'name' in item}\n  except googleapiclient.errors.HttpError as err:\n    raise utils.GcpApiError(err) from err\n\n\ndef get_gce_public_licences(project_id: str) -> List[str]:\n  \"\"\"Returns a list of licenses based on publicly available image project\"\"\"\n  licenses = []\n  gce_api = apis.get_api('compute', 'v1', project_id)\n  logging.debug('listing licenses of project %s', project_id)\n  request = gce_api.licenses().list(project=project_id)\n  while request is not None:\n    response = request.execute()\n    for license_ in response['items']:\n      formatted_license = license_['selfLink'].partition('/global/licenses/')[2]\n      licenses.append(formatted_license)\n    request = gce_api.licenses().list_next(previous_request=request,\n                                           previous_response=response)\n  return licenses\n\n\ndef get_instance(project_id: str, zone: str, instance_name: str) -> Instance:\n  \"\"\"Returns instance object matching instance name and zone\"\"\"\n  compute = apis.get_api('compute', 'v1', project_id)\n  request = compute.instances().get(project=project_id,\n                                    zone=zone,\n                                    instance=instance_name)\n\n  response = request.execute(num_retries=config.API_RETRIES)\n  return Instance(project_id, resource_data=response)\n\n\n@caching.cached_api_call(in_memory=True)\ndef get_instance_by_id(project_id: str, instance_id: str) -> Optional[Instance]:\n  \"\"\"Returns instance object matching instance id in the project.\n\n  Searches all zones.\n\n  Args:\n    project_id: The ID of the GCP project.\n    instance_id: The unique ID of the GCE instance.\n  \"\"\"\n  if not apis.is_enabled(project_id, 'compute'):\n    return None\n  gce_api = apis.get_api('compute', 'v1', project_id)\n  # Use aggregatedList with filter to efficiently find the instance by ID.\n  request = gce_api.instances().aggregatedList(project=project_id,\n                                               filter=f'id eq {instance_id}',\n                                               returnPartialSuccess=True)\n\n  while request:\n    response = request.execute(num_retries=config.API_RETRIES)\n    items = response.get('items', {})\n    for _, data in items.items():\n      if 'instances' in data:\n        for instance_data in data['instances']:\n          if str(instance_data.get('id')) == str(instance_id):\n            return Instance(project_id, instance_data)\n\n    request = gce_api.instances().aggregatedList_next(\n        previous_request=request, previous_response=response)\n\n  return None\n\n\n@caching.cached_api_call(in_memory=True)\ndef get_global_operations(\n    project: str,\n    filter_str: Optional[str] = None,\n    order_by: Optional[str] = None,\n    max_results: Optional[int] = None,\n    service_project_number: Optional[int] = None,\n) -> List[Dict[str, Any]]:\n  \"\"\"Returns global operations object matching project id.\"\"\"\n  compute = apis.get_api('compute', 'v1', project)\n  logging.debug(('searching compute global operations'\n                 'logs in project %s with filter %s'), project, filter_str)\n  operations: List[Dict[str, Any]] = []\n  request = compute.globalOperations().aggregatedList(\n      project=project,\n      filter=filter_str,\n      orderBy=order_by,\n      maxResults=max_results,\n      serviceProjectNumber=service_project_number,\n      returnPartialSuccess=True,\n  )\n  while request:\n    response = request.execute(num_retries=config.API_RETRIES)\n    operations_by_regions = response.get('items', {})\n    for _, data in operations_by_regions.items():\n      if 'operations' not in data:\n        continue\n      operations.extend(data['operations'])\n    request = compute.globalOperations().aggregatedList_next(\n        previous_request=request, previous_response=response)\n  return operations\n\n\n@caching.cached_api_call(in_memory=True)\ndef get_disk(project_id: str, zone: str, disk_name: str) -> Disk:\n  \"\"\"Returns disk object matching disk name and zone.\"\"\"\n  compute = apis.get_api('compute', 'v1', project_id)\n  request = compute.disks().get(project=project_id, zone=zone, disk=disk_name)\n  response = request.execute(num_retries=config.API_RETRIES)\n  return Disk(project_id, resource_data=response)\n\n\ndef get_instance_group_manager(\n    project_id: str, zone: str,\n    instance_group_manager_name: str) -> ManagedInstanceGroup:\n  \"\"\"Get a zonal ManagedInstanceGroup object by name and zone.\n\n  Args:\n    project_id: The project ID of the instance group manager.\n    zone: The zone of the instance group manager.\n    instance_group_manager_name: The name of the instance group manager.\n\n  Returns:\n    A ManagedInstanceGroup object.\n\n  Raises:\n    utils.GcpApiError: If the API call fails.\n  \"\"\"\n  compute = apis.get_api('compute', 'v1', project_id)\n  request = compute.instanceGroupManagers().get(\n      project=project_id,\n      zone=zone,\n      instanceGroupManager=instance_group_manager_name)\n  try:\n    response = request.execute(num_retries=config.API_RETRIES)\n    return ManagedInstanceGroup(project_id, resource_data=response)\n  except googleapiclient.errors.HttpError as err:\n    raise utils.GcpApiError(err) from err\n\n\ndef get_region_instance_group_manager(\n    project_id: str, region: str,\n    instance_group_manager_name: str) -> ManagedInstanceGroup:\n  \"\"\"Get a regional ManagedInstanceGroup object by name and region.\n\n  Args:\n    project_id: The project ID of the instance group manager.\n    region: The region of the instance group manager.\n    instance_group_manager_name: The name of the instance group manager.\n\n  Returns:\n    A ManagedInstanceGroup object.\n\n  Raises:\n    utils.GcpApiError: If the API call fails.\n  \"\"\"\n  compute = apis.get_api('compute', 'v1', project_id)\n  request = compute.regionInstanceGroupManagers().get(\n      project=project_id,\n      region=region,\n      instanceGroupManager=instance_group_manager_name,\n  )\n  try:\n    response = request.execute(num_retries=config.API_RETRIES)\n    return ManagedInstanceGroup(project_id, resource_data=response)\n  except googleapiclient.errors.HttpError as err:\n    raise utils.GcpApiError(err) from err\n\n\ndef get_autoscaler(project_id: str, zone: str,\n                   autoscaler_name: str) -> Autoscaler:\n  \"\"\"Get a zonal Autoscaler object by name and zone.\"\"\"\n  compute = apis.get_api('compute', 'v1', project_id)\n  request = compute.autoscalers().get(project=project_id,\n                                      zone=zone,\n                                      autoscaler=autoscaler_name)\n  try:\n    response = request.execute(num_retries=config.API_RETRIES)\n    return Autoscaler(project_id, resource_data=response)\n  except googleapiclient.errors.HttpError as err:\n    raise utils.GcpApiError(err) from err\n\n\ndef get_region_autoscaler(project_id: str, region: str,\n                          autoscaler_name: str) -> Autoscaler:\n  \"\"\"Get a regional Autoscaler object by name and region.\"\"\"\n  compute = apis.get_api('compute', 'v1', project_id)\n  request = compute.regionAutoscalers().get(project=project_id,\n                                            region=region,\n                                            autoscaler=autoscaler_name)\n  try:\n    response = request.execute(num_retries=config.API_RETRIES)\n    return Autoscaler(project_id, resource_data=response)\n  except googleapiclient.errors.HttpError as err:\n    raise utils.GcpApiError(err) from err\n\n\n@caching.cached_api_call(in_memory=True)\ndef get_instances(context: models.Context) -> Mapping[str, Instance]:\n  \"\"\"Get a list of Instance matching the given context, indexed by instance id.\"\"\"\n\n  instances: Dict[str, Instance] = {}\n  if not apis.is_enabled(context.project_id, 'compute'):\n    return instances\n  gce_api = apis.get_api('compute', 'v1', context.project_id)\n  request = gce_api.instances().aggregatedList(project=context.project_id,\n                                               returnPartialSuccess=True)\n  logging.debug('listing gce instances of project %s', context.project_id)\n  while request:  # Continue as long as there are pages\n    response = request.execute(num_retries=config.API_RETRIES)\n    instances_by_zones = response.get('items', {})\n    for _, data_ in instances_by_zones.items():\n      if 'instances' not in data_:\n        continue\n      for instance in data_['instances']:\n        result = re.match(\n            r'https://www.googleapis.com/compute/v1/projects/[^/]+/zones/([^/]+)/',\n            instance['selfLink'],\n        )\n        if not result:\n          logging.error(\n              \"instance %s selfLink didn't match regexp: %s\",\n              instance['id'],\n              instance['selfLink'],\n          )\n          continue\n        zone = result.group(1)\n        labels = instance.get('labels', {})\n        if not context.match_project_resource(\n            resource=instance.get('name'), location=zone,\n            labels=labels) and not context.match_project_resource(\n                resource=instance.get('id'), location=zone, labels=labels):\n          continue\n        instances.update({\n            instance['id']:\n                Instance(project_id=context.project_id, resource_data=instance)\n        })\n    request = gce_api.instances().aggregatedList_next(\n        previous_request=request, previous_response=response)\n  return instances\n\n\n@caching.cached_api_call(in_memory=True)\ndef get_instance_groups(context: models.Context) -> Mapping[str, InstanceGroup]:\n  \"\"\"Get a list of InstanceGroups matching the given context, indexed by name.\"\"\"\n  groups: Dict[str, InstanceGroup] = {}\n  if not apis.is_enabled(context.project_id, 'compute'):\n    return groups\n  gce_api = apis.get_api('compute', 'v1', context.project_id)\n  request = gce_api.instanceGroups().aggregatedList(project=context.project_id,\n                                                    returnPartialSuccess=True)\n  logging.debug('listing gce instance groups of project %s', context.project_id)\n  while request:  # Continue as long as there are pages\n    response = request.execute(num_retries=config.API_RETRIES)\n    groups_by_zones = response.get('items', {})\n    for _, data_ in groups_by_zones.items():\n      if 'instanceGroups' not in data_:\n        continue\n      for group in data_['instanceGroups']:\n        result = re.match(\n            r'https://www.googleapis.com/compute/v1/projects/[^/]+/(zones|regions)/([^/]+)',\n            group['selfLink'],\n        )\n        if not result:\n          logging.error(\n              \"instance %s selfLink didn't match regexp: %s\",\n              group['id'],\n              group['selfLink'],\n          )\n          continue\n        location = result.group(2)\n        labels = group.get('labels', {})\n        resource = group.get('name', '')\n        if not context.match_project_resource(\n            location=location, labels=labels, resource=resource):\n          continue\n        instance_group = InstanceGroup(context.project_id, resource_data=group)\n        groups[instance_group.full_path] = instance_group\n    request = gce_api.instanceGroups().aggregatedList_next(\n        previous_request=request, previous_response=response)\n  return groups\n\n\n@caching.cached_api_call(in_memory=True)\ndef get_managed_instance_groups(\n    context: models.Context,) -> Mapping[int, ManagedInstanceGroup]:\n  \"\"\"Get a list of zonal ManagedInstanceGroups matching the given context, indexed by mig id.\"\"\"\n\n  migs: Dict[int, ManagedInstanceGroup] = {}\n  if not apis.is_enabled(context.project_id, 'compute'):\n    return migs\n  gce_api = apis.get_api('compute', 'v1', context.project_id)\n  request = gce_api.instanceGroupManagers().aggregatedList(\n      project=context.project_id, returnPartialSuccess=True)\n  logging.debug('listing zonal managed instance groups of project %s',\n                context.project_id)\n  while request:  # Continue as long as there are pages\n    response = request.execute(num_retries=config.API_RETRIES)\n    migs_by_zones = response.get('items', {})\n    for _, data_ in migs_by_zones.items():\n      if 'instanceGroupManagers' not in data_:\n        continue\n      for mig in data_['instanceGroupManagers']:\n        result = re.match(\n            r'https://www.googleapis.com/compute/v1/projects/[^/]+/(?:regions|zones)/([^/]+)/',\n            mig['selfLink'],\n        )\n        if not result:\n          logging.error(\n              \"mig %s selfLink didn't match regexp: %s\",\n              mig['name'],\n              mig['selfLink'],\n          )\n          continue\n        location = result.group(1)\n        labels = mig.get('labels', {})\n        resource = mig.get('name', '')\n        if not context.match_project_resource(\n            location=location, labels=labels, resource=resource):\n          continue\n        migs[mig['id']] = ManagedInstanceGroup(project_id=context.project_id,\n                                               resource_data=mig)\n    request = gce_api.instanceGroupManagers().aggregatedList_next(\n        previous_request=request, previous_response=response)\n  return migs\n\n\n@caching.cached_api_call(in_memory=True)\ndef get_region_managed_instance_groups(\n    context: models.Context,) -> Mapping[int, ManagedInstanceGroup]:\n  \"\"\"Get a list of regional ManagedInstanceGroups matching the given context, indexed by mig id.\"\"\"\n\n  migs: Dict[int, ManagedInstanceGroup] = {}\n  if not apis.is_enabled(context.project_id, 'compute'):\n    return migs\n  gce_api = apis.get_api('compute', 'v1', context.project_id)\n  requests = [\n      gce_api.regionInstanceGroupManagers().list(project=context.project_id,\n                                                 region=r.name)\n      for r in get_all_regions(context.project_id)\n  ]\n  logging.debug(\n      'listing regional managed instance groups of project %s',\n      context.project_id,\n  )\n  items = apis_utils.execute_concurrently_with_pagination(\n      api=gce_api,\n      requests=requests,\n      next_function=gce_api.regionInstanceGroupManagers().list_next,\n      context=context,\n      log_text=\n      f'listing regional managed instance groups of project {context.project_id}'\n  )\n  for i in items:\n    result = re.match(\n        r'https://www.googleapis.com/compute/v1/projects/[^/]+/(?:regions)/([^/]+)/',\n        i['selfLink'],\n    )\n    if not result:\n      logging.error(\"mig %s selfLink didn't match regexp: %s\", i['name'],\n                    i['selfLink'])\n      continue\n    location = result.group(1)\n    labels = i.get('labels', {})\n    name = i.get('name', '')\n    if not context.match_project_resource(\n        location=location, labels=labels, resource=name):\n      continue\n    migs[i['id']] = ManagedInstanceGroup(project_id=context.project_id,\n                                         resource_data=i)\n  return migs\n\n\n@caching.cached_api_call\ndef get_instance_templates(project_id: str) -> Mapping[str, InstanceTemplate]:\n  logging.info('fetching instance templates')\n  templates = {}\n  gce_api = apis.get_api('compute', 'v1', project_id)\n  request = gce_api.instanceTemplates().list(\n      project=project_id,\n      returnPartialSuccess=True,\n      # Fetch only a subset of the fields to improve performance.\n      fields=('items/name, items/properties/tags,'\n              ' items/properties/networkInterfaces,'\n              ' items/properties/serviceAccounts, items/properties/metadata'),\n  )\n  for t in apis_utils.list_all(\n      request, next_function=gce_api.instanceTemplates().list_next):\n    instance_template = InstanceTemplate(project_id, t)\n    templates[instance_template.full_path] = instance_template\n  return templates\n\n\n@caching.cached_api_call\ndef get_project_metadata(project_id) -> Mapping[str, str]:\n  gce_api = apis.get_api('compute', 'v1', project_id)\n  logging.debug('fetching metadata of project %s\\n', project_id)\n  query = gce_api.projects().get(project=project_id)\n  try:\n    response = query.execute(num_retries=config.API_RETRIES)\n  except googleapiclient.errors.HttpError as err:\n    raise utils.GcpApiError(err) from err\n\n  mapped_metadata: Dict[str, str] = {}\n  metadata = response.get('commonInstanceMetadata')\n  if metadata and 'items' in metadata:\n    for m_item in metadata['items']:\n      mapped_metadata[m_item.get('key')] = m_item.get('value')\n  return mapped_metadata\n\n\n@caching.cached_api_call\ndef get_instances_serial_port_output(context: models.Context):\n  \"\"\"Get a list of serial port output for instances\n\n  which matches the given context, running and is not\n  exported to cloud logging.\n  \"\"\"\n  # Create temp storage (diskcache.Deque) for output\n  deque = caching.get_tmp_deque('tmp-gce-serial-output-')\n  if not apis.is_enabled(context.project_id, 'compute'):\n    return deque\n  gce_api = apis.get_api('compute', 'v1', context.project_id)\n\n  # Serial port output are rolled over on day 7 and limited to 1MB.\n  # Fetching serial outputs are very expensive so optimize to fetch.\n  # Only relevant instances as storage size can grow drastically for\n  # massive projects. Think 1MB * N where N is some large number.\n  requests = [\n      gce_api.instances().getSerialPortOutput(\n          project=i.project_id,\n          zone=i.zone,\n          instance=i.id,\n          # To get all 1mb output\n          start=-1000000,\n      )\n      for i in get_instances(context).values()\n      # fetch running instances that do not export to cloud logging\n      if not i.is_serial_port_logging_enabled() and i.is_running\n  ]\n  requests_start_time = datetime.now()\n  # Note: We are limited to 1000 calls in a single batch request.\n  # We have to use multiple batch requests in batches of 1000\n  # https://github.com/googleapis/google-api-python-client/blob/main/docs/batch.md\n  batch_size = 1000\n  for i in range(0, len(requests), batch_size):\n    batch_requests = requests[i:i + batch_size]\n    for _, response, exception in apis_utils.execute_concurrently(\n        api=gce_api, requests=batch_requests, context=context):\n      if exception:\n        if isinstance(exception, googleapiclient.errors.HttpError):\n          raise utils.GcpApiError(exception) from exception\n        else:\n          raise exception\n\n      if response:\n        result = re.match(\n            r'https://www.googleapis.com/compute/v1/projects/([^/]+)/zones/[^/]+/instances/([^/]+)',\n            response['selfLink'],\n        )\n        if not result:\n          logging.error(\"instance selfLink didn't match regexp: %s\",\n                        response['selfLink'])\n          return\n\n        project_id = result.group(1)\n        instance_id = result.group(2)\n        deque.appendleft(\n            SerialPortOutput(\n                project_id=project_id,\n                instance_id=instance_id,\n                contents=response['contents'].splitlines(),\n            ))\n  requests_end_time = datetime.now()\n  logging.debug(\n      'total serial logs processing time: %s, number of instances: %s',\n      requests_end_time - requests_start_time,\n      len(requests),\n  )\n  return deque\n\n\n@caching.cached_api_call\ndef get_instance_serial_port_output(\n    project_id, zone, instance_name) -> Optional[SerialPortOutput]:\n  \"\"\"Get a list of serial port output for instances\n\n  which matches the given context, running and is not\n  exported to cloud logging.\n  \"\"\"\n  # Create temp storage (diskcache.Deque) for output\n  if not apis.is_enabled(project_id, 'compute'):\n    return None\n  gce_api = apis.get_api('compute', 'v1', project_id)\n\n  request = gce_api.instances().getSerialPortOutput(\n      project=project_id,\n      zone=zone,\n      instance=instance_name,\n      # To get all 1mb output\n      start=-1000000,\n  )\n  try:\n    response = request.execute(num_retries=config.API_RETRIES)\n  except googleapiclient.errors.HttpError:\n    return None\n\n  if response:\n    result = re.match(\n        r'https://www.googleapis.com/compute/v1/projects/([^/]+)/zones/[^/]+/instances/([^/]+)',\n        response['selfLink'],\n    )\n    if not result:\n      logging.error(\"instance selfLink didn't match regexp: %s\",\n                    response['selfLink'])\n      return None\n\n    project_id = result.group(1)\n    instance_id = result.group(2)\n    return SerialPortOutput(\n        project_id,\n        instance_id=instance_id,\n        contents=response['contents'].splitlines(),\n    )\n  return None\n\n\nclass Region(models.Resource):\n  \"\"\"Represents a GCE Region.\"\"\"\n\n  _resource_data: dict\n\n  def __init__(self, project_id, resource_data):\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n\n  @property\n  def self_link(self) -> str:\n    return self._resource_data['selfLink']\n\n  @property\n  def full_path(self) -> str:\n    result = re.match(r'https://www.googleapis.com/compute/v1/(.*)',\n                      self.self_link)\n    if result:\n      return result.group(1)\n    else:\n      return f'>> {self.self_link}'\n\n  @property\n  def name(self) -> str:\n    return self._resource_data['name']\n\n\n@caching.cached_api_call\ndef get_all_regions(project_id: str) -> Iterable[Region]:\n  \"\"\"Return list of all regions\n\n  Args:\n      project_id (str): project id for this request\n\n  Raises:\n      utils.GcpApiError: Raises GcpApiError in case of query issues\n\n  Returns:\n      Iterable[Region]: Return list of all regions\n  \"\"\"\n  try:\n    gce_api = apis.get_api('compute', 'v1', project_id)\n    request = gce_api.regions().list(project=project_id)\n    response = request.execute(num_retries=config.API_RETRIES)\n    if not response or 'items' not in response:\n      return set()\n\n    return {\n        Region(project_id, item) for item in response['items'] if 'name' in item\n    }\n  except googleapiclient.errors.HttpError as err:\n    raise utils.GcpApiError(err) from err\n\n\ndef get_regions_with_instances(context: models.Context) -> Iterable[Region]:\n  \"\"\"Return list of regions with instances\n\n  Args:\n      context (models.Context): context for this request\n\n  Returns:\n      Iterable[Region]: Return list of regions which contains instances\n  \"\"\"\n\n  regions_of_instances = {i.region for i in get_instances(context).values()}\n\n  all_regions = get_all_regions(context.project_id)\n  if not all_regions:\n    return set()\n\n  return {r for r in all_regions if r.name in regions_of_instances}\n\n\n@caching.cached_api_call\ndef get_all_disks(context: models.Context) -> Iterable[Disk]:\n  \"\"\"Get all disks in a project, matching the context.\n\n  Args:\n    context: The project context.\n\n  Returns:\n    An iterable of Disk objects.\n  \"\"\"\n  project_id = context.project_id\n  # Fetching only Zonal Disks(Regional disks exempted)\n  try:\n    gce_api = apis.get_api('compute', 'v1', project_id)\n    requests = [\n        gce_api.disks().list(project=project_id, zone=zone)\n        for zone in get_gce_zones(project_id)\n    ]\n\n    logging.debug('listing gce disks of project %s', project_id)\n\n    items = apis_utils.execute_concurrently_with_pagination(\n        api=gce_api,\n        requests=requests,\n        next_function=gce_api.disks().list_next,\n        context=context,\n        log_text=f'listing GCE disks of project {project_id}')\n\n    return {Disk(project_id, item) for item in items}\n\n  except googleapiclient.errors.HttpError as err:\n    raise utils.GcpApiError(err) from err\n\n\n@caching.cached_api_call\ndef get_all_disks_of_instance(context: models.Context, zone: str,\n                              instance_name: str) -> dict:\n  \"\"\"Get all disks of a given instance.\n\n  Args:\n    context: The project context.\n    zone: The zone of the instance.\n    instance_name: The name of the instance.\n\n  Returns:\n    A dict of Disk objects keyed by disk name.\n  \"\"\"\n  project_id = context.project_id\n  # Fetching only Zonal Disks(Regional disks exempted) attached to an instance\n  try:\n    gce_api = apis.get_api('compute', 'v1', project_id)\n    requests = [gce_api.disks().list(project=project_id, zone=zone)]\n    logging.debug(\n        'listing gce disks attached to instance %s in project %s',\n        instance_name,\n        project_id,\n    )\n\n    items = apis_utils.execute_concurrently_with_pagination(\n        api=gce_api,\n        requests=requests,\n        next_function=gce_api.disks().list_next,\n        context=context,\n        log_text=\n        f'listing gce disks attached to instance {instance_name} in project {project_id}'\n    )\n    all_disk_list = {Disk(project_id, item) for item in items}\n    disk_list = {}\n    for disk in all_disk_list:\n      if disk.users == [instance_name]:\n        disk_list[disk.name] = disk\n    return disk_list\n\n  except googleapiclient.errors.HttpError as err:\n    raise utils.GcpApiError(err) from err\n\n\nclass InstanceEffectiveFirewalls(network_q.EffectiveFirewalls):\n  \"\"\"Effective firewall rules for a network interface on a VM instance.\n\n  Includes org/folder firewall policies).\n  \"\"\"\n\n  _instance: Instance\n  _nic: str\n\n  def __init__(self, instance, nic, resource_data):\n    super().__init__(resource_data)\n    self._instance = instance\n    self._nic = nic\n\n\n@caching.cached_api_call(in_memory=True)\ndef get_instance_interface_effective_firewalls(\n    instance: Instance, nic: str) -> InstanceEffectiveFirewalls:\n  \"\"\"Return effective firewalls for a network interface on the instance.\"\"\"\n  compute = apis.get_api('compute', 'v1', instance.project_id)\n  request = compute.instances().getEffectiveFirewalls(\n      project=instance.project_id,\n      zone=instance.zone,\n      instance=instance.name,\n      networkInterface=nic,\n  )\n  response = request.execute(num_retries=config.API_RETRIES)\n  return InstanceEffectiveFirewalls(Instance, nic, response)\n\n\ndef is_project_serial_port_logging_enabled(project_id: str) -> bool:\n  if not apis.is_enabled(project_id, 'compute'):\n    return False\n\n  value = get_project_metadata(\n      project_id=project_id).get('serial-port-logging-enable')\n  return bool(value and value.upper() in POSITIVE_BOOL_VALUES)\n\n\ndef is_serial_port_buffer_enabled():\n  return config.get('enable_gce_serial_buffer')\n\n\n@dataclasses.dataclass\nclass _SerialOutputJob:\n  \"\"\"A group of log queries that will be executed with a single API call.\"\"\"\n\n  context: models.Context\n  future: Optional[concurrent.futures.Future] = None\n\n  def __init__(self,\n               context,\n               future: Optional[concurrent.futures.Future] = None):\n    self.context = context\n    self.future = future\n\n\nclass SerialOutputQuery:\n  \"\"\"A serial output job that was started with prefetch_logs().\"\"\"\n\n  job: _SerialOutputJob\n\n  def __init__(self, job):\n    self.job = job\n\n  @property\n  def entries(self) -> Sequence:\n    if not self.job.future:\n      raise RuntimeError(\"Fetching serial logs wasn't executed. did you call\"\n                         ' execute_get_serial_port_output()?')\n    elif self.job.future.running():\n      logging.debug(\n          'waiting for serial output results for project: %s',\n          self.job.context.project_id,\n      )\n    return self.job.future.result()\n\n\njobs_todo: Dict[models.Context, _SerialOutputJob] = {}\n\n\ndef execute_fetch_serial_port_outputs(\n    query_executor: executor.ContextAwareExecutor):\n  # start a thread to fetch serial log; processing logs can be large\n  # depending on he number of instances in the project which aren't\n  # logging to cloud logging. currently expects only one job but\n  # implementing it so support for multiple projects is possible.\n  global jobs_todo\n  jobs_executing = jobs_todo\n  jobs_todo = {}\n  # query_executor = get_executor(context)\n  for job in jobs_executing.values():\n    job.future = query_executor.submit(get_instances_serial_port_output,\n                                       job.context)\n\n\ndef fetch_serial_port_outputs(context: models.Context) -> SerialOutputQuery:\n  # Aggregate by context\n  job = jobs_todo.setdefault(context, _SerialOutputJob(context=context))\n  return SerialOutputQuery(job=job)\n\n\n# Health check implementation\nclass HealthCheck(models.Resource):\n  \"\"\"A Health Check resource.\"\"\"\n\n  _resource_data: dict\n  _type: str\n\n  def __init__(self, project_id, resource_data):\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n\n  @property\n  def name(self) -> str:\n    return self._resource_data['name']\n\n  @property\n  def full_path(self) -> str:\n    result = re.match(r'https://www.googleapis.com/compute/v1/(.*)',\n                      self.self_link)\n    if result:\n      return result.group(1)\n    else:\n      return f'>> {self.self_link}'\n\n  @property\n  def short_path(self) -> str:\n    path = self.project_id + '/' + self.name\n    return path\n\n  @property\n  def self_link(self) -> str:\n    return self._resource_data['selfLink']\n\n  @property\n  def is_log_enabled(self) -> bool:\n    try:\n      log_config = self._resource_data.get('logConfig', False)\n      if log_config and log_config['enable']:\n        return True\n    except KeyError:\n      return False\n    return False\n\n  @property\n  def region(self):\n    url = self._resource_data.get('region', '')\n    match = re.search(r'/([^/]+)/?$', url)\n    if match:\n      region = match.group(1)\n      return region\n    return None\n\n  @property\n  def type(self) -> str:\n    return self._resource_data['type']\n\n  @property\n  def request_path(self) -> str:\n    return self.get_health_check_property('requestPath', '/')\n\n  @property\n  def request(self) -> str:\n    return self.get_health_check_property('request')\n\n  @property\n  def response(self) -> str:\n    return self.get_health_check_property('response')\n\n  @property\n  def port(self) -> int:\n    return self.get_health_check_property('port')\n\n  @property\n  def port_specification(self) -> str:\n    return self.get_health_check_property('portSpecification', 'USE_FIXED_PORT')\n\n  @property\n  def timeout_sec(self) -> int:\n    return self._resource_data.get('timeoutSec', 5)\n\n  @property\n  def check_interval_sec(self) -> int:\n    return self._resource_data.get('checkIntervalSec', 5)\n\n  @property\n  def unhealthy_threshold(self) -> int:\n    return self._resource_data.get('unhealthyThreshold', 2)\n\n  @property\n  def healthy_threshold(self) -> int:\n    return self._resource_data.get('healthyThreshold', 2)\n\n  def get_health_check_property(self, property_name: str, default_value=None):\n    health_check_types = {\n        'HTTP': 'httpHealthCheck',\n        'HTTPS': 'httpsHealthCheck',\n        'HTTP2': 'http2HealthCheck',\n        'TCP': 'tcpHealthCheck',\n        'SSL': 'sslHealthCheck',\n        'GRPC': 'grpcHealthCheck',\n    }\n    if self.type in health_check_types:\n      health_check_data = self._resource_data.get(health_check_types[self.type])\n      if health_check_data:\n        return health_check_data.get(property_name) or default_value\n    return default_value\n\n\n@caching.cached_api_call(in_memory=True)\ndef get_health_check(project_id: str,\n                     health_check: str,\n                     region: str = None) -> object:\n  compute = apis.get_api('compute', 'v1', project_id)\n  if not region or region == 'global':\n    request = compute.healthChecks().get(project=project_id,\n                                         healthCheck=health_check)\n  else:\n    request = compute.regionHealthChecks().get(project=project_id,\n                                               healthCheck=health_check,\n                                               region=region)\n  response = request.execute(num_retries=config.API_RETRIES)\n  return HealthCheck(project_id, response)\n\n\nclass NetworkEndpointGroup(models.Resource):\n  \"\"\"A Network Endpoint Group resource.\"\"\"\n\n  _resource_data: dict\n  _type: str\n\n  def __init__(self, project_id, resource_data):\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n\n  @property\n  def name(self) -> str:\n    return self._resource_data['name']\n\n  @property\n  def id(self) -> str:\n    return self._resource_data['id']\n\n  @property\n  def full_path(self) -> str:\n    result = re.match(r'https://www.googleapis.com/compute/v1/(.*)',\n                      self.self_link)\n    if result:\n      return result.group(1)\n    else:\n      return f'>> {self.self_link}'\n\n  @property\n  def short_path(self) -> str:\n    path = self.project_id + '/' + self.name\n    return path\n\n  @property\n  def self_link(self) -> str:\n    return self._resource_data['selfLink']\n\n\n@caching.cached_api_call(in_memory=True)\ndef get_zonal_network_endpoint_groups(\n    context: models.Context,) -> Mapping[str, NetworkEndpointGroup]:\n  \"\"\"Returns a list of Network Endpoint Groups in the project.\"\"\"\n  groups: Dict[str, NetworkEndpointGroup] = {}\n  if not apis.is_enabled(context.project_id, 'compute'):\n    return groups\n  gce_api = apis.get_api('compute', 'v1', context.project_id)\n  requests = [\n      gce_api.networkEndpointGroups().list(project=context.project_id,\n                                           zone=zone)\n      for zone in get_gce_zones(context.project_id)\n  ]\n  logging.debug('listing gce networkEndpointGroups of project %s',\n                context.project_id)\n  items = apis_utils.execute_concurrently_with_pagination(\n      api=gce_api,\n      requests=requests,\n      next_function=gce_api.networkEndpointGroups().list_next,\n      context=context,\n      log_text=(\n          f'listing gce networkEndpointGroups of project {context.project_id}'),\n  )\n\n  for i in items:\n    result = re.match(\n        r'https://www.googleapis.com/compute/v1/projects/[^/]+/zones/([^/]+)',\n        i['selfLink'],\n    )\n    if not result:\n      logging.error(\"instance %s selfLink didn't match regexp: %s\", i['id'],\n                    i['selfLink'])\n      continue\n    zone = result.group(1)\n    labels = i.get('labels', {})\n    resource = i.get('name', '')\n    if not context.match_project_resource(\n        location=zone, labels=labels, resource=resource):\n      continue\n    data = NetworkEndpointGroup(context.project_id, i)\n    groups[data.full_path] = data\n  return groups\n"
  },
  {
    "path": "gcpdiag/queries/gce_stub.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Stub API calls used in gce.py for testing.\n\nInstead of doing real API calls, we return test JSON data.\n\"\"\"\nimport json\n\nfrom gcpdiag.queries import (apis_stub, interconnect_stub, lb_stub,\n                             network_stub, vpn_stub)\n\n# pylint: disable=unused-argument\n# pylint: disable=invalid-name\n\n\nclass ComputeEngineApiStub(apis_stub.ApiStub):\n  \"\"\"Mock object to simulate compute engine api calls.\"\"\"\n\n  # mocked methods:\n  # gce_api.zones().list(project=project_id).execute()\n  # gce_api.zones().list_next(request, response)\n  # op1=gce_api.instances().list(project=pid, zone=z)\n  # gce_api.new_batch_http_request().add(op1, callback=cb, request_id=id).execute()\n  # gce_api.instanceGroupManagers().list(project=project_id, zone=zone)\n  # gce_api.regionInstanceGroupManagers().list(project=project_id, region=region)\n  # gce_api.instanceGroups().list(project=project_id, zone=zone)\n  # gce_api.disks().list(project=project_id, zone=zone)\n  # gce_api.instances().get(project=project_id, zone=zone, instance=instance_name)\n  # gce_api.instances().getSerialPortOutput(project,zone,instance,start)\n\n  def __init__(self, mock_state='init', project_id=None, zone=None, page=1):\n    self.mock_state = mock_state\n    self.project_id = project_id\n    self.zone = zone\n    self.page = page\n\n  def regions(self):\n    return ComputeEngineApiStub('regions')\n\n  def zones(self):\n    return ComputeEngineApiStub('zones')\n\n  def disks(self):\n    return ComputeEngineApiStub('disks')\n\n  def list(self, project, zone=None, returnPartialSuccess=None, fields=None):\n    # TODO: implement fields filtering\n    if self.mock_state in ['igs', 'instances', 'disks', 'negs']:\n      return apis_stub.RestCallStub(\n          project,\n          f'compute-{self.mock_state}-{zone}',\n          default=f'compute-{self.mock_state}-empty',\n      )\n    elif self.mock_state in ['regions', 'templates', 'zones']:\n      return apis_stub.RestCallStub(project, f'compute-{self.mock_state}')\n    elif self.mock_state in ['licenses']:\n      return apis_stub.RestCallStub(project, f'{project}-licenses')\n    else:\n      raise RuntimeError(f'can\\'t list for mock state {self.mock_state}')\n\n  def aggregatedList(\n      self,\n      project,\n      filter=None,  # pylint:disable=redefined-builtin\n      returnPartialSuccess=None,\n      orderBy=None,\n      maxResults=None,\n      serviceProjectNumber=None,\n  ):\n    if self.mock_state == 'projects':\n      return apis_stub.RestCallStub(project, 'compute-project')\n    elif self.mock_state == 'globalOperations':\n      return apis_stub.RestCallStub(project, 'global-operations')\n    else:\n      return apis_stub.RestCallStub(project,\n                                    f'compute-{self.mock_state}-aggregated')\n\n  def aggregatedList_next(self, previous_request, previous_response):\n    if isinstance(previous_response,\n                  dict) and previous_response.get('nextPageToken'):\n      return apis_stub.RestCallStub(\n          project_id=previous_request.project_id,\n          json_basename=previous_request.json_basename,\n          page=previous_request.page + 1,\n      )\n    else:\n      return None\n\n  def list_next(self, previous_request, previous_response):\n    if isinstance(previous_response,\n                  dict) and previous_response.get('nextPageToken'):\n      return apis_stub.RestCallStub(\n          project_id=previous_request.project_id,\n          json_basename=previous_request.json_basename,\n          page=previous_request.page + 1,\n      )\n    else:\n      return None\n\n  def instances(self):\n    return ComputeEngineApiStub('instances')\n\n  def globalOperations(self):\n    return ComputeEngineApiStub('globalOperations')\n\n  def instanceGroupManagers(self):\n    return InstanceGroupManagersApiStub()\n\n  def regionInstanceGroupManagers(self):\n    return RegionInstanceGroupManagersApiStub()\n\n  def licenses(self):\n    return ComputeEngineApiStub('licenses')\n\n  def instanceGroups(self):\n    return ComputeEngineApiStub('igs')\n\n  def instanceTemplates(self):\n    return ComputeEngineApiStub('templates')\n\n  def getSerialPortOutput(self, project, zone, instance, start):\n    return apis_stub.RestCallStub(\n        project_id=project,\n        json_basename=f'compute-serial-port-output-{instance}',\n    )\n\n  def networkEndpointGroups(self):\n    return ComputeEngineApiStub('negs')\n\n  def new_batch_http_request(self):\n    batch_api = apis_stub.BatchRequestStub()\n    if self._fail_count:\n      batch_api.fail_next(self._fail_count, self._fail_status)\n      self._fail_count = 0\n    return batch_api\n\n  def get(self, project, zone=None, instance=None, disk=None):\n    if self.mock_state == 'projects':\n      return apis_stub.RestCallStub(project, 'compute-project')\n    elif self.mock_state == 'instances':\n      if instance:\n        self.mock_state = 'instance'\n        self.instance = instance\n        self.project = project\n        self.zone = zone\n        return self\n      else:\n        return apis_stub.RestCallStub(project, f'compute-instances-{zone}')\n    elif self.mock_state == 'disks':\n      if disk:\n        self.mock_state = 'disk'\n        self.instance = instance\n        self.project = project\n        self.zone = zone\n        self.disk = disk\n        return self\n      else:\n        return apis_stub.RestCallStub(project,\n                                      f'compute-instances-disks-{zone}')\n\n  def projects(self):\n    return ComputeEngineApiStub('projects')\n\n  def addresses(self):\n    return network_stub.NetworkApiStub(mock_state='addresses')\n\n  def networks(self):\n    return network_stub.NetworkApiStub(mock_state='networks')\n\n  def subnetworks(self):\n    return network_stub.NetworkApiStub(mock_state='subnetworks')\n\n  def routes(self):\n    return network_stub.NetworkApiStub(mock_state='routes')\n\n  def routers(self):\n    return network_stub.NetworkApiStub(mock_state='routers')\n\n  def backendServices(self):\n    return lb_stub.LbApiStub(mock_state='backendServices')\n\n  def regionBackendServices(self):\n    return lb_stub.LbApiStub(mock_state='regionBackendServices')\n\n  def targetHttpsProxies(self):\n    return lb_stub.TargetProxyStub(mock_state='targetHttpsProxies')\n\n  def targetSslProxies(self):\n    return lb_stub.TargetProxyStub(mock_state='targetSslProxies')\n\n  def sslCertificates(self):\n    return lb_stub.SslCertificateApiStub(mock_state='sslCertificates')\n\n  def regionSslCertificates(self):\n    return lb_stub.SslCertificateApiStub(mock_state='regionSslCertificates')\n\n  def forwardingRules(self):\n    return lb_stub.LbApiStub(mock_state='forwardingRules')\n\n  def globalForwardingRules(self):\n    return lb_stub.LbApiStub(mock_state='globalForwardingRules')\n\n  def healthChecks(self):\n    return HealthCheckApiStub(mock_state='healthChecks')\n\n  def regionHealthChecks(self):\n    return HealthCheckApiStub(mock_state='regionHealthChecks')\n\n  def interconnects(self):\n    return interconnect_stub.InterconnectApiStub(mock_state='interconnects')\n\n  def interconnectAttachments(self):\n    return interconnect_stub.VlanAttachmentApiStub(mock_state='vlan_attachment')\n\n  def vpnTunnels(self):\n    return vpn_stub.VpnTunnelApiStub('vpnTunnels')\n\n  def execute(self, num_retries=0):\n    json_dir = apis_stub.get_json_dir(self.project)\n    with open(json_dir / f'compute-instances-{self.zone}.json',\n              encoding='utf-8') as json_file:\n      instances = json.load(json_file)['items']\n      # get instance\n      if self.mock_state == 'instance':\n        for instance in instances:\n          if instance['name'] == self.instance:\n            return instance\n      # get network interface\n      elif self.mock_state == 'effective_firewalls':\n        for instance in instances:\n          if instance['name'] == self.instance:\n            interfaces = instance['networkInterfaces']\n            if self.network_interface:\n              for interface in interfaces:\n                if interface['name'] == self.network_interface:\n                  return interface\n            else:\n              return interfaces\n      elif self.mock_state == 'disk':\n        with open(\n            json_dir / f'compute-instances-disks-{self.zone}.json',\n            encoding='utf-8',\n        ) as json_file:\n          disks = json.load(json_file)['items']\n          for disk in disks:\n            if disk['name'] == self.disk:\n              return disk\n      else:\n        raise ValueError(\n            f\"can't call this method here (mock_state: {self.mock_state}\")\n\n  def getEffectiveFirewalls(self, project, zone, instance, networkInterface):\n    self.mock_state = 'effective_firewalls'\n    self.instance = instance\n    self.project = project\n    self.zone = zone\n    self.network_interface = networkInterface\n    return self\n\n\nclass InstanceGroupManagersApiStub(ComputeEngineApiStub):\n  \"\"\"Mock object to simulate zonal instance group managers api calls\"\"\"\n\n  def list(self, project, zone=None):\n    return apis_stub.RestCallStub(project,\n                                  f'compute-migs-{zone}',\n                                  default='compute-migs-empty')\n\n  def aggregatedList(self, project, returnPartialSuccess=True):\n    return apis_stub.RestCallStub(project, 'compute-migs-aggregated')\n\n  def aggregatedList_next(self, previous_request, previous_response):\n    if isinstance(previous_response,\n                  dict) and previous_response.get('nextPageToken'):\n      return apis_stub.RestCallStub(\n          project_id=previous_request.project_id,\n          json_basename=previous_request.json_basename,\n          page=previous_request.page + 1,\n      )\n    else:\n      return None\n\n  def get(self, project, zone=None, instanceGroupManager=None):\n    if instanceGroupManager:\n      self.instance_group_manager = instanceGroupManager\n      self.project = project\n      self.zone = zone\n      return self\n    else:\n      raise ValueError('missing instanceGroupManager')\n\n  def execute(self, num_retries=0):\n    json_dir = apis_stub.get_json_dir(self.project)\n    with open(json_dir / f'compute-migs-{self.zone}.json',\n              encoding='utf-8') as json_file:\n      migs = json.load(json_file)\n      if 'items' in migs:\n        for mig in migs['items']:\n          if mig['name'] == self.instance_group_manager:\n            return mig\n    # fallback to aggregated list\n    with open(json_dir / 'compute-migs-aggregated.json',\n              encoding='utf-8') as json_file:\n      migs_by_zone = json.load(json_file)['items']\n      for zone_migs in migs_by_zone.values():\n        if 'instanceGroupManagers' not in zone_migs:\n          continue\n        for mig in zone_migs['instanceGroupManagers']:\n          if mig['name'] == self.instance_group_manager:\n            return mig\n    raise ValueError(\n        f'instanceGroupManager {self.instance_group_manager} not found')\n\n\nclass RegionInstanceGroupManagersApiStub(ComputeEngineApiStub):\n  \"\"\"Mock object to simulate regional instance group managers api calls\"\"\"\n\n  def list(self, project, region=None):\n    return apis_stub.RestCallStub(project,\n                                  f'compute-migs-{region}',\n                                  default='compute-migs-empty')\n\n\nclass HealthCheckApiStub:\n  \"\"\"Mock object to simulate health check api calls\"\"\"\n\n  def __init__(self, mock_state):\n    self.mock_state = mock_state\n\n  # pylint: disable=redefined-builtin\n  def list(self, project, region=None):\n    if self.mock_state == 'healthChecks':\n      return apis_stub.RestCallStub(project, 'lb-health-checks')\n    if self.mock_state == 'regionHealthChecks':\n      return apis_stub.RestCallStub(project, f'regionHealthChecks-{region}')\n    else:\n      raise ValueError(f'cannot call method {self.mock_state} here')\n\n  def get(self, project, healthCheck=None, region=None):\n    if healthCheck:\n      self.health_check = healthCheck\n      self.project = project\n      self.region = region\n      return self\n    else:\n      raise ValueError(f'cannot call method {self.mock_state} here')\n\n  def execute(self, num_retries=0):\n    json_dir = apis_stub.get_json_dir(self.project)\n    json_file_name = f'{self.mock_state}.json'\n    if self.mock_state == 'regionHealthChecks':\n      json_file_name = f'{self.mock_state}-{self.region}.json'\n    with open(json_dir / json_file_name, encoding='utf-8') as json_file:\n      health_checks = json.load(json_file)['items']\n      # search for and get the health check\n      if health_checks:\n        for health_check in health_checks:\n          if health_check['name'] == self.health_check:\n            return health_check\n          else:\n            raise ValueError(\n                f'the health check {self.health_check} is not found')\n      else:\n        raise ValueError(f'cannot call method {self.mock_state} here')\n"
  },
  {
    "path": "gcpdiag/queries/gce_test.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Test code in gce.py.\"\"\"\n\nimport concurrent.futures\nimport re\nimport unittest\nfrom unittest import mock\n\nfrom gcpdiag import config, models\nfrom gcpdiag.queries import apigee, apis_stub, gce, network\n\nDATAPROC_LABELS = {'goog-dataproc-cluster-name': 'cluster'}\nDUMMY_REGION = 'europe-west4'\nDUMMY_ZONE = 'europe-west4-a'\nDUMMY_ZONE2 = 'europe-west1-b'\nDUMMY_ZONE3 = 'europe-west4-b'\nDUMMY_PROJECT_NAME2 = 'gcpdiag-gce-vm-performance'\nDUMMY_PROJECT_NAME = 'gcpdiag-gce1-aaaa'\nDUMMY_LICENSE_PROJECT_NAME = 'windows-cloud'\nDUMMY_PROJECT_NR = '12340001'\nDUMMY_DEFAULT_NAME = 'default'\nDUMMY_INSTANCE1_NAME = 'gce1'\nDUMMY_INSTANCE1_PATH = (f'projects/{DUMMY_PROJECT_NAME}/zones/{DUMMY_ZONE}/'\n                        f'instances/{DUMMY_INSTANCE1_NAME}')\nDUMMY_INSTANCE1_LABELS = {'foo': 'bar'}\nDUMMY_INSTANCE2_NAME = 'gce2'\nDUMMY_INSTANCE2_PATH = (f'projects/{DUMMY_PROJECT_NAME}/zones/{DUMMY_ZONE}/'\n                        f'instances/{DUMMY_INSTANCE2_NAME}')\nDUMMY_INSTANCE2_LABELS = {'gcpdiag-test': 'mig'}\nDUMMY_INSTANCE3_NAME = 'gke-gke1-default-pool-35923fbc-2xxp'\nDUMMY_INSTANCE3_PATH = (f'projects/{DUMMY_PROJECT_NAME}/zones/{DUMMY_ZONE}/'\n                        f'instances/{DUMMY_INSTANCE3_NAME}')\nDUMMY_INSTANCE3_LABELS = {'gcp_doctor_test': 'gke'}\nDUMMY_INSTANCE4_NAME = 'windows-test'\n\nDUMMY_NEG1_NAME = 'neg1'\nDUMMY_NEG1_PATH = (f'projects/{DUMMY_PROJECT_NAME}/zones/{DUMMY_ZONE3}/'\n                   f'networkEndpointGroups/{DUMMY_NEG1_NAME}')\n\nDUMMY_REGION_MIG_PROJECT_NAME = 'gcpdiag-apigee1-aaaa'\nDUMMY_REGION_MIG_NAME = 'mig-bridge-manager-us-central1'\n\n\n@mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)\nclass TestGce(unittest.TestCase):\n  \"\"\"Test code in gce.py\"\"\"\n\n  def test_get_instances(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    instances = gce.get_instances(context)\n    assert len(instances) == 6\n    instances_by_path = {i.full_path: i for i in instances.values()}\n    assert DUMMY_INSTANCE1_PATH in instances_by_path\n    assert (instances_by_path[DUMMY_INSTANCE1_PATH].full_path ==\n            DUMMY_INSTANCE1_PATH)\n    assert (instances_by_path[DUMMY_INSTANCE1_PATH].short_path ==\n            f'{DUMMY_PROJECT_NAME}/{DUMMY_INSTANCE1_NAME}')\n    # also verify that the instances dict uses the instance id as key\n    assert instances_by_path[DUMMY_INSTANCE1_PATH].id in instances\n\n  def test_get_instances_by_region_returns_instance(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME,\n                             locations=['fake-region', DUMMY_REGION])\n    instances = gce.get_instances(context)\n    instances_by_path = {i.full_path: i for i in instances.values()}\n    assert DUMMY_INSTANCE1_PATH in instances_by_path and len(instances) == 6\n\n  def test_get_instances_by_label(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME,\n                             labels=DUMMY_INSTANCE1_LABELS)\n    instances = gce.get_instances(context)\n    instances_by_path = {i.full_path: i for i in instances.values()}\n\n    assert DUMMY_INSTANCE1_PATH in instances_by_path and len(instances) == 1\n\n  def test_get_instances_by_other_region_returns_empty_result(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME,\n                             locations=['fake-region'])\n    instances = gce.get_instances(context)\n    assert len(instances) == 0\n\n  def test_is_serial_port_logging_enabled(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME,\n                             labels=DUMMY_INSTANCE1_LABELS)\n    instances = gce.get_instances(context)\n    instances_by_path = {i.full_path: i for i in instances.values()}\n    i = instances_by_path[DUMMY_INSTANCE1_PATH]\n    assert i.is_serial_port_logging_enabled()\n    assert i.get_metadata('serial-port-logging-enable')\n\n  def test_is_serial_port_logging_enabled_instance_level(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    instances = gce.get_instances(context)\n    instances_by_path = {i.full_path: i for i in instances.values()}\n    i = instances_by_path[DUMMY_INSTANCE2_PATH]\n    assert not i.is_serial_port_logging_enabled()\n\n  def test_is_gke_node_false(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME,\n                             labels=DUMMY_INSTANCE1_LABELS)\n    instances = gce.get_instances(context)\n    instances_by_path = {i.full_path: i for i in instances.values()}\n    assert not instances_by_path[DUMMY_INSTANCE1_PATH].is_gke_node()\n\n  def test_is_gke_node_true(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME,\n                             labels=DUMMY_INSTANCE3_LABELS)\n    instances = gce.get_instances(context)\n    assert len(instances) == 1\n    for n in instances.values():\n      assert n.is_gke_node()\n\n  def test_is_windows_machine(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    instances = gce.get_instances(context)\n    instances_by_path = {i.full_path: i for i in instances.values()}\n    assert instances_by_path[DUMMY_INSTANCE1_PATH].is_windows_machine() is True\n    assert instances_by_path[DUMMY_INSTANCE2_PATH].is_windows_machine() is True\n\n  def test_is_preemptible_vm(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    instances = gce.get_instances(context)\n    instances_by_path = {i.full_path: i for i in instances.values()}\n    assert instances_by_path[DUMMY_INSTANCE1_PATH].is_preemptible_vm is True\n    assert instances_by_path[DUMMY_INSTANCE2_PATH].is_preemptible_vm is True\n    assert instances_by_path[DUMMY_INSTANCE3_PATH].is_preemptible_vm is False\n\n  def test_min_cpu_platform(self):\n    instance = gce.get_instance(DUMMY_PROJECT_NAME, DUMMY_ZONE,\n                                DUMMY_INSTANCE1_NAME)\n    self.assertEqual(instance.min_cpu_platform(), 'Intel Skylake')\n    instance2 = gce.get_instance(DUMMY_PROJECT_NAME, DUMMY_ZONE,\n                                 DUMMY_INSTANCE2_NAME)\n    self.assertEqual(instance2.min_cpu_platform(), 'None')\n\n  def test_network(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    instances = gce.get_instances(context)\n    instances_by_path = {i.full_path: i for i in instances.values()}\n    assert (instances_by_path[DUMMY_INSTANCE1_PATH].network.name ==\n            DUMMY_DEFAULT_NAME)\n    assert (instances_by_path[DUMMY_INSTANCE2_PATH].network.name ==\n            DUMMY_DEFAULT_NAME)\n\n  def test_tags(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    instances = gce.get_instances(context)\n    instances_by_path = {i.full_path: i for i in instances.values()}\n    assert 'secured-instance' in instances_by_path[DUMMY_INSTANCE1_PATH].tags\n    assert 'secured-instance' in instances_by_path[DUMMY_INSTANCE2_PATH].tags\n\n  def test_disks(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    instances = gce.get_instances(context)\n    instances_by_path = {i.full_path: i for i in instances.values()}\n    assert len(instances_by_path[DUMMY_INSTANCE1_PATH].disks) == 1\n    assert len(instances_by_path[DUMMY_INSTANCE2_PATH].disks) == 1\n\n  def test_access_scopes(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME,\n                             labels=DUMMY_INSTANCE1_LABELS)\n    instances = gce.get_instances(context)\n    instances_by_path = {i.full_path: i for i in instances.values()}\n    assert set(instances_by_path[DUMMY_INSTANCE1_PATH].access_scopes) == {\n        'https://www.googleapis.com/auth/devstorage.read_only',\n        'https://www.googleapis.com/auth/logging.write',\n        'https://www.googleapis.com/auth/monitoring.write',\n        'https://www.googleapis.com/auth/service.management.readonly',\n        'https://www.googleapis.com/auth/servicecontrol',\n    }\n\n  def test_service_account(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME,\n                             labels=DUMMY_INSTANCE1_LABELS)\n    instances = gce.get_instances(context)\n    instances_by_path = {i.full_path: i for i in instances.values()}\n    assert (instances_by_path[DUMMY_INSTANCE1_PATH].service_account ==\n            f'{DUMMY_PROJECT_NR}-compute@developer.gserviceaccount.com')\n\n  def test_get_global_operations(self):\n    \"\"\"get global operations.\"\"\"\n    operations = gce.get_global_operations(project=DUMMY_PROJECT_NAME2)\n    assert len(operations) > 0\n\n    for op in operations:\n      assert isinstance(op['id'], str)\n\n  def test_get_instance_groups(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME,\n                             locations=['europe-west4'])\n    groups = gce.get_instance_groups(context)\n    ig1_path = 'projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups/instance-group-1'\n    mig_path = 'projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups/mig'\n    assert groups[ig1_path].has_named_ports() is True\n    assert groups[mig_path].has_named_ports() is False\n    assert 'http' in [p['name'] for p in groups[ig1_path].named_ports]\n    assert 'https' not in [p['name'] for p in groups[ig1_path].named_ports]\n\n  def test_get_managed_instance_groups(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME,\n                             locations=['europe-west4'])\n    migs = gce.get_managed_instance_groups(context)\n    assert len(migs) == 2\n    for n in migs.values():\n      if n.name == 'mig':\n        assert n.is_gke() is False\n\n  def test_get_region_managed_instance_groups(self):\n    context = models.Context(project_id=DUMMY_REGION_MIG_PROJECT_NAME,\n                             locations=['us-central1'])\n    migs = gce.get_region_managed_instance_groups(context)\n    assert len(migs) == 1\n    m = next(iter(migs.values()))\n    assert m.name == DUMMY_REGION_MIG_NAME\n    assert m.template.get_metadata('') == ''\n    assert m.template.get_metadata('non-existing') == ''\n    assert (m.template.get_metadata('startup-script-url') ==\n            apigee.MIG_STARTUP_SCRIPT_URL)\n\n  def test_get_managed_instance_groups_gke(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME,\n                             locations=['europe-west4'])\n    migs = gce.get_managed_instance_groups(context)\n    assert len(migs) == 2\n    m = next(iter(migs.values()))\n    assert m.is_gke() is True\n\n  def test_get_managed_instance_groups_empty_result(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME,\n                             labels=DUMMY_INSTANCE1_LABELS)\n    migs = gce.get_managed_instance_groups(context)\n    assert len(migs) == 0\n\n  def test_managed_instance_group_zone(self):\n    # zonal mig\n    mig1 = gce.ManagedInstanceGroup(\n        'p1', {\n            'name':\n                'mig1',\n            'zone':\n                'https://www.googleapis.com/compute/v1/projects/p1/zones/us-central1-a',\n            'selfLink':\n                '...'\n        })\n    self.assertEqual(mig1.zone, 'us-central1-a')\n    # regional mig\n    mig2 = gce.ManagedInstanceGroup(\n        'p1', {\n            'name':\n                'mig2',\n            'region':\n                'https://www.googleapis.com/compute/v1/projects/p1/regions/us-central1',\n            'selfLink':\n                '...'\n        })\n    self.assertIsNone(mig2.zone)\n    # malformed zone\n    mig3 = gce.ManagedInstanceGroup(\n        'p1', {\n            'name': 'mig3',\n            'zone': 'https://www.googleapis.com/compute/v1/projects/p1/zones/',\n            'selfLink': '...'\n        })\n    with self.assertRaises(RuntimeError):\n      _ = mig3.zone\n\n  def test_managed_instance_group_get_method(self):\n    mig = gce.ManagedInstanceGroup(\n        'p1', {\n            'name':\n                'mig1',\n            'zone':\n                'https://www.googleapis.com/compute/v1/projects/p1/zones/us-central1-a',\n            'selfLink':\n                '...',\n            'status': {\n                'versionTarget': {\n                    'isReached': True\n                }\n            }\n        })\n    self.assertEqual(mig.get('status.versionTarget.isReached'), True)\n    self.assertEqual(mig.get('name'), 'mig1')\n    self.assertIsNone(mig.get('foo.bar'))\n    self.assertEqual(mig.get('foo.bar', 'default'), 'default')\n\n  def test_autoscaler_get_method(self):\n    autoscaler = gce.Autoscaler(\n        'p1', {\n            'name': 'autoscaler1',\n            'selfLink':\n                'https://www.googleapis.com/compute/v1/projects/p1/zones/us-central1-a/'\n                'autoscalers/autoscaler1',\n            'autoscalingPolicy': {\n                'mode': 'ON'\n            }\n        })\n    self.assertEqual(autoscaler.name, 'autoscaler1')\n    self.assertEqual(\n        autoscaler.self_link,\n        'https://www.googleapis.com/compute/v1/projects/p1/zones/'\n        'us-central1-a/autoscalers/autoscaler1')\n    self.assertEqual(autoscaler.full_path,\n                     'projects/p1/zones/us-central1-a/autoscalers/autoscaler1')\n    self.assertEqual(autoscaler.get('autoscalingPolicy.mode'), 'ON')\n    self.assertIsNone(autoscaler.get('foo.bar'))\n    self.assertEqual(autoscaler.get('foo.bar', 'default'), 'default')\n\n  def test_mig_property(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME,\n                             labels=DUMMY_INSTANCE3_LABELS)\n    for n in gce.get_instances(context).values():\n      assert re.match(r'gke-gke1-default-pool-\\w+-grp', n.mig.name)\n\n  def test_mig_property_instance_not_in_mig(self):\n    instance = gce.get_instance(DUMMY_PROJECT_NAME, DUMMY_ZONE,\n                                DUMMY_INSTANCE1_NAME)\n    with self.assertRaises(AttributeError):\n      _ = instance.mig\n\n  def test_get_instance_group_manager(self):\n    mig = gce.get_instance_group_manager(DUMMY_PROJECT_NAME, DUMMY_ZONE, 'mig')\n    self.assertEqual(mig.name, 'mig')\n    self.assertEqual(mig.zone, DUMMY_ZONE)\n\n  def test_get_all_regions(self):\n    regions = gce.get_all_regions(DUMMY_PROJECT_NAME)\n    assert len(regions) > 0\n    assert 'us-east1' in [r.name for r in regions]\n    assert 'europe-north1' in [r.name for r in regions]\n    assert 'asia-southeast1' in [r.name for r in regions]\n    assert 'southamerica-east1' in [r.name for r in regions]\n\n  def test_get_regions_with_instances(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    regions = gce.get_regions_with_instances(context)\n    assert len(regions) == 1\n    assert 'europe-west4' in [r.name for r in regions]\n\n  def test_count_no_action_instances(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME,\n                             locations=['europe-west4'])\n    migs = gce.get_managed_instance_groups(context)\n    # check for number of migs since I am only checking for a single mig in the region\n    assert len(migs) == 2\n\n    for m in migs.values():\n      print(m)\n      count = m.count_no_action_instances()\n\n    assert count == 2\n\n  def test_get_instance_templates(self):\n    templates = gce.get_instance_templates(DUMMY_PROJECT_NAME)\n    # find the GKE node pool template\n    prefix = ('projects/gcpdiag-gce1-aaaa/global/instanceTemplates/'\n              'gke-gke1-default-pool')\n    matched_names = [t for t in templates if t.startswith(prefix)]\n    assert len(matched_names) == 2\n    t = templates[matched_names[0]]\n    assert t.name.startswith('gke-gke1-default-pool')\n    # GKE nodes pools have at least one tag called 'gke-CLUSTERNAME-CLUSTERHASH-node'\n    assert any(\n        tag.startswith('gke-') and tag.endswith('-node') for tag in t.tags)\n    # service_account\n    assert (t.service_account ==\n            f'{DUMMY_PROJECT_NR}-compute@developer.gserviceaccount.com')\n\n  def test_mig_template(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME,\n                             labels=DUMMY_INSTANCE2_LABELS)\n    for n in {i.mig for i in gce.get_instances(context).values()}:\n      assert n.template.name.startswith('mig-')\n\n  def test_get_all_disks(self):\n    disks = gce.get_all_disks(models.Context(project_id=DUMMY_PROJECT_NAME))\n    for d in disks:\n      assert d.bootable is True\n      if 'unattached-disk' == d.name:\n        assert d.in_use is False\n      else:\n        assert d.in_use is True\n\n  def test_get_instance(self):\n    instance = gce.get_instance(\n        project_id=DUMMY_PROJECT_NAME,\n        zone=DUMMY_ZONE,\n        instance_name=DUMMY_INSTANCE1_NAME,\n    )\n    assert instance.name == DUMMY_INSTANCE1_NAME\n\n  def test_get_instance_interface_effective_firewalls(self):\n    # use default network interface as nic0\n    instance = gce.get_instance(\n        project_id=DUMMY_PROJECT_NAME,\n        zone=DUMMY_ZONE,\n        instance_name=DUMMY_INSTANCE1_NAME,\n    )\n    firewalls = gce.get_instance_interface_effective_firewalls(\n        instance=instance, nic='nic0')\n    assert isinstance(firewalls, gce.InstanceEffectiveFirewalls)\n\n  def test_is_public_machine(self):\n    instance = gce.get_instance(\n        project_id=DUMMY_PROJECT_NAME,\n        zone=DUMMY_ZONE,\n        instance_name=DUMMY_INSTANCE1_NAME,\n    )\n    assert instance.is_public_machine() is False\n    instance = gce.get_instance(\n        project_id=DUMMY_PROJECT_NAME,\n        zone=DUMMY_ZONE,\n        instance_name=DUMMY_INSTANCE4_NAME,\n    )\n    assert instance.is_public_machine() is True\n\n  def test_check_license(self):\n    licenses = gce.get_gce_public_licences(DUMMY_LICENSE_PROJECT_NAME)\n    payg_licenses = [x for x in licenses if not x.endswith('-byol')]\n    instance = gce.get_instance(\n        project_id=DUMMY_PROJECT_NAME,\n        zone=DUMMY_ZONE,\n        instance_name=DUMMY_INSTANCE1_NAME,\n    )\n    assert instance.check_license(payg_licenses) is True\n    instance = gce.get_instance(\n        project_id=DUMMY_PROJECT_NAME,\n        zone=DUMMY_ZONE,\n        instance_name=DUMMY_INSTANCE4_NAME,\n    )\n    assert instance.check_license(payg_licenses) is False\n\n  def test_get_instance_interface_subnetworks(self):\n    instance = gce.get_instance(\n        project_id=DUMMY_PROJECT_NAME,\n        zone=DUMMY_ZONE,\n        instance_name=DUMMY_INSTANCE1_NAME,\n    )\n    for subnetwork in instance.subnetworks:\n      assert isinstance(subnetwork, network.Subnetwork)\n\n  def test_get_instance_interface_routes(self):\n    instance = gce.get_instance(\n        project_id=DUMMY_PROJECT_NAME,\n        zone=DUMMY_ZONE,\n        instance_name=DUMMY_INSTANCE1_NAME,\n    )\n    for route in instance.routes:\n      assert isinstance(route, network.Route)\n\n  def test_is_vm_running(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME,\n                             labels=DUMMY_INSTANCE1_LABELS)\n    instances = gce.get_instances(context)\n    for i in instances.values():\n      if i.status == 'RUNNING':\n        assert i.is_running\n      else:\n        assert not i.is_running\n\n  def test_network_interface_count(self):\n    instance = gce.get_instance(\n        project_id=DUMMY_PROJECT_NAME,\n        zone=DUMMY_ZONE,\n        instance_name=DUMMY_INSTANCE1_NAME,\n    )\n    self.assertEqual(instance.network_interface_count, 1)\n\n  def test_get_serial_port_outputs(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    query = gce.get_instances_serial_port_output(context)\n\n    assert len(query) > 0\n\n    assert len(query) > 0\n\n  def test_fetch_serial_port_outputs(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    query = gce.fetch_serial_port_outputs(context=context)\n\n    with concurrent.futures.ThreadPoolExecutor(max_workers=1) as executor:\n      gce.execute_fetch_serial_port_outputs(executor)\n\n      # verify that at least one instance serial log (gce2) is present\n      all_entries = list(query.entries)\n\n      assert len(all_entries) > 0\n\n  def test_serial_output_contents_order(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    query = gce.get_instances_serial_port_output(context=context)\n\n    gce2_id = '1010101010'\n    serial_output = next(iter(query))\n\n    assert gce2_id == serial_output.instance_id  # gce2 output\n    assert serial_output.contents\n\n    first_entry = serial_output.contents[0]\n    assert ('01H\\u001b[=3h\\u001b[2J\\u001b[01;01HCSM BBS Table full.'\n            in first_entry)\n    #\n    last_entry = serial_output.contents[-1]\n    assert '[   20.5] cloud-init[56]: Cloud-init v. 21.4 finished' in last_entry\n\n  def test_is_serial_port_buffer_enabled(self):\n    config.init({'enable_gce_serial_buffer': False}, 'x')\n    assert not gce.is_serial_port_buffer_enabled()\n\n    config.init({'enable_gce_serial_buffer': True}, 'x')\n    assert gce.is_serial_port_buffer_enabled()\n\n  def test_is_dataproc_instance(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME,\n                             labels=DATAPROC_LABELS)\n    instances = gce.get_instances(context)\n    for i in instances.values():\n      assert i.is_dataproc_instance()\n\n    context = models.Context(project_id=DUMMY_PROJECT_NAME,\n                             labels=DUMMY_INSTANCE1_LABELS)\n    instances = gce.get_instances(context)\n    for i in instances.values():\n      assert not i.is_dataproc_instance()\n\n  def test_get_labels(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME,\n                             labels=DUMMY_INSTANCE1_LABELS)\n    instances = gce.get_instances(context)\n    for i in instances.values():\n      assert i.labels == DUMMY_INSTANCE1_LABELS\n\n  def test_get_zonal_network_endpoint_groups(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    negs = gce.get_zonal_network_endpoint_groups(context)\n    assert len(negs) == 1\n    negs_by_path = {i.full_path: i for i in negs.values()}\n    assert DUMMY_NEG1_PATH in negs_by_path\n\n  def test_get_instances_by_id(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME,\n                             resources=['1010101011'])\n    instances = gce.get_instances(context)\n    self.assertEqual(len(instances), 1)\n    self.assertEqual(list(instances.values())[0].name, 'gce2')\n\n  def test_get_instance_by_id(self):\n    instance = gce.get_instance_by_id(DUMMY_PROJECT_NAME, '1010101011')\n    self.assertIsNotNone(instance)\n    self.assertEqual(instance.name, 'gce2')\n    self.assertEqual(instance.zone, DUMMY_ZONE)\n\n  def test_get_instance_by_id_not_found(self):\n    instance = gce.get_instance_by_id(DUMMY_PROJECT_NAME, 'non-existent-id')\n    self.assertIsNone(instance)\n"
  },
  {
    "path": "gcpdiag/queries/gcf.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Queries related to GCP CloudFunctions instances.\"\"\"\n\nimport logging\nimport re\nfrom typing import Dict, Mapping\n\nimport googleapiclient.errors\n\nfrom gcpdiag import caching, config, models, utils\nfrom gcpdiag.queries import apis\n\n\nclass CloudFunction(models.Resource):\n  \"\"\"Represents a GCF instance.\"\"\"\n  _resource_data: dict\n\n  def __init__(self, project_id, resource_data):\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n    self._metadata_dict = None\n\n  @property\n  def name(self) -> str:\n    m = re.search(r'/functions/([^/]+)$', self._resource_data['name'])\n    if not m:\n      raise RuntimeError('can\\'t determine name of cloudfunction %s' %\n                         (self._resource_data['name']))\n    return m.group(1)\n\n  @property\n  def description(self) -> str:\n    return self._resource_data['description']\n\n  @property\n  def full_path(self) -> str:\n    return self._resource_data['name']\n\n  @property\n  def short_path(self) -> str:\n    path = self.project_id + '/' + self.name\n    return path\n\n  @property\n  def runtime(self) -> str:\n    return self._resource_data['runtime']\n\n  @property\n  def memory(self) -> str:\n    return self._resource_data['availableMemoryMb']\n\n\n@caching.cached_api_call\ndef get_cloudfunctions(context: models.Context) -> Mapping[str, CloudFunction]:\n  \"\"\"Get a list of CloudFunctions matching the given context, indexed by CloudFunction name.\"\"\"\n  cloudfunctions: Dict[str, CloudFunction] = {}\n  if not apis.is_enabled(context.project_id, 'cloudfunctions'):\n    return cloudfunctions\n  gcf_api = apis.get_api('cloudfunctions', 'v1', context.project_id)\n  logging.debug('fetching list of GCF functions in project %s',\n                context.project_id)\n  query = gcf_api.projects().locations().functions().list(\n      parent=f'projects/{context.project_id}/locations/-')\n  try:\n    resp = query.execute(num_retries=config.API_RETRIES)\n    if 'functions' not in resp:\n      return cloudfunctions\n    for f in resp['functions']:\n      # verify that we have some minimal data that we expect\n      if 'name' not in f or 'runtime' not in f:\n        raise RuntimeError(\n            'missing data in projects.locations.functions.list response')\n      # projects/*/locations/*/functions/*\n      result = re.match(\n          r'projects/[^/]+/(?:locations)/([^/]+)/functions/([^/]+)', f['name'])\n      if not result:\n        logging.error('invalid cloud functions data: %s', f['name'])\n        continue\n\n      location = result.group(1)\n      labels = f.get('labels', {})\n      name = f.get('name', '')\n      if not context.match_project_resource(\n          location=location, labels=labels, resource=name):\n        continue\n\n      cloudfunctions[f['name']] = CloudFunction(project_id=context.project_id,\n                                                resource_data=f)\n  except googleapiclient.errors.HttpError as err:\n    raise utils.GcpApiError(err) from err\n  return cloudfunctions\n"
  },
  {
    "path": "gcpdiag/queries/gcf_stub.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Stub API calls used in gcf.py for testing.\n\nInstead of doing real API calls, we return test JSON data.\n\"\"\"\n\nimport re\n\nfrom gcpdiag.queries import apis_stub\n\n#pylint: disable=unused-argument\n\n\nclass CloudFunctionsApiStub:\n  \"\"\"Mock object to simulate function api calls.\"\"\"\n\n  def projects(self):\n    return self\n\n  def locations(self):\n    return self\n\n  def functions(self):\n    return self\n\n  def list(self, parent):\n    m = re.match(r'projects/([^/]+)/', parent)\n    project_id = m.group(1)\n    return apis_stub.RestCallStub(project_id, 'cloudfunctions')\n"
  },
  {
    "path": "gcpdiag/queries/gcf_test.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Test code in gcf.py.\"\"\"\n\nfrom unittest import mock\n\nfrom gcpdiag import models\nfrom gcpdiag.queries import apis_stub, gcf\n\nDUMMY_PROJECT_NAME = 'gcpdiag-gcf1-aaaa'\nDUMMY_CLOUD_FUNCTION_1_NAME = f'projects/{DUMMY_PROJECT_NAME}/locations/us-central1/functions/gcf1'\nDUMMY_REGION_1 = 'us-central1'\n\n\n@mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)\nclass TestGcf:\n  \"\"\"Test GCF\"\"\"\n\n  def test_get_functions(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    cloudfunctions = gcf.get_cloudfunctions(context=context)\n    assert len(cloudfunctions) == 1\n    assert DUMMY_CLOUD_FUNCTION_1_NAME in cloudfunctions\n"
  },
  {
    "path": "gcpdiag/queries/gcs.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Queries related to GCP Cloud Storage\n\n\"\"\"\n\nimport dataclasses\nimport logging\nimport re\nfrom typing import Dict, Mapping\n\nimport googleapiclient.errors\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import caching, config, models, utils\nfrom gcpdiag.queries import apis, iam\n\n\n@dataclasses.dataclass(frozen=True)\nclass RetentionPolicy:\n  \"\"\"Bucket's retention policy.\"\"\"\n  retention_period: int\n\n\nclass RetentionPolicyBuilder:\n  \"\"\"Builds Bucket's retention policy from dict representation.\"\"\"\n\n  def __init__(self, retention_policy):\n    self._retention_policy = retention_policy\n\n  def build(self) -> RetentionPolicy:\n    return RetentionPolicy(retention_period=self._get_retention_period())\n\n  def _get_retention_period(self) -> int:\n    try:\n      return int(self._retention_policy['retentionPeriod'])\n    except (KeyError, ValueError):\n      return 0\n\n\nclass Bucket(models.Resource):\n  \"\"\"Represents a GCS Bucket.\"\"\"\n  _resource_data: dict\n\n  def __init__(self, project_id, resource_data):\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n    self._metadata_dict = None\n\n  @property\n  def id(self) -> str:\n    return self._resource_data['id']\n\n  @property\n  def name(self) -> str:\n    return self._resource_data['name']\n\n  def is_uniform_access(self) -> bool:\n    return get_path(self._resource_data,\n                    ('iamConfiguration', 'uniformBucketLevelAccess', 'enabled'),\n                    default=False)\n\n  @property\n  def full_path(self) -> str:\n    result = re.match(r'https://www.googleapis.com/storage/v1/(.*)',\n                      self._resource_data['selfLink'])\n    if result:\n      return result.group(1)\n    else:\n      return '>> ' + self._resource_data['selfLink']\n\n  @property\n  def short_path(self) -> str:\n    return self.name\n\n  @property\n  def labels(self) -> dict:\n    return self._resource_data.get('labels', {})\n\n  @property\n  def retention_policy(self) -> RetentionPolicy:\n    return RetentionPolicyBuilder(self._resource_data.get(\n        'retentionPolicy', {})).build()\n\n\nclass BucketIAMPolicy(iam.BaseIAMPolicy):\n\n  def _is_resource_permission(self, permission):\n    return True\n\n\n@caching.cached_api_call(in_memory=True)\ndef get_bucket_iam_policy(context: models.Context,\n                          bucket: str) -> BucketIAMPolicy:\n  project_id = context.project_id\n  gcs_api = apis.get_api('storage', 'v1', project_id)\n  request = gcs_api.buckets().getIamPolicy(bucket=bucket)\n\n  return iam.fetch_iam_policy(request, BucketIAMPolicy, project_id, bucket,\n                              context)\n\n\n@caching.cached_api_call(in_memory=True)\ndef get_bucket(context: models.Context, bucket: str) -> Bucket:\n  gcs_api = apis.get_api('storage', 'v1', context.project_id)\n  logging.debug('fetching GCS bucket %s', bucket)\n  query = gcs_api.buckets().get(bucket=bucket)\n  try:\n    response = query.execute(num_retries=config.API_RETRIES)\n  except googleapiclient.errors.HttpError as err:\n    print(err)\n    raise utils.GcpApiError(err) from err\n  print(response)\n  # Resource data only provides us project number.\n  # We don't know project id at this point.\n  return Bucket(project_id=None, resource_data=response)\n\n\n@caching.cached_api_call(in_memory=True)\ndef get_buckets(context: models.Context) -> Mapping[str, Bucket]:\n  buckets: Dict[str, Bucket] = {}\n  if not apis.is_enabled(context.project_id, 'storage'):\n    return buckets\n  gcs_api = apis.get_api('storage', 'v1', context.project_id)\n  logging.debug('fetching list of GCS buckets in project %s',\n                context.project_id)\n  query = gcs_api.buckets().list(project=context.project_id)\n  try:\n    resp = query.execute(num_retries=config.API_RETRIES)\n    if 'items' not in resp:\n      return buckets\n    for b in resp['items']:\n      # verify that we have some minimal data that we expect\n      if 'id' not in b:\n        raise RuntimeError('missing data in bucket response')\n      # Does not support matching for location for buckets\n      # names are globally unique and should suffice\n      if not context.match_project_resource(\n          resource=b.get('name'),\n          labels=b.get('labels', {}),\n      ):\n        continue\n\n      buckets[b['name']] = Bucket(project_id=context.project_id,\n                                  resource_data=b)\n  except googleapiclient.errors.HttpError as err:\n    raise utils.GcpApiError(err) from err\n  return buckets\n"
  },
  {
    "path": "gcpdiag/queries/gcs_stub.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Stub API calls used in gcs.py for testing.\n\nInstead of doing real API calls, we return test JSON data.\n\"\"\"\n\nfrom typing import Optional\n\nfrom gcpdiag.queries import apis_stub\n\n# pylint: disable=unused-argument\n# pylint: disable=invalid-name\n\nNO_PROJECT_ID_ERROR = 'Not able to call {} without setting project_id for API.'\n\n\nclass BucketApiStub:\n  \"\"\"Mock object to simulate storage api calls.\n\n  Attributes:\n    project_id: Since buckets are not explicitly assigned to projects we need a\n      project_id to be provided by user to know where to find json_directory\n      with bucket data. Without providing it you can still list buckets per\n      project.\n  \"\"\"\n\n  def __init__(self, project_id: Optional[str] = None):\n    self.project_id = project_id\n\n  def buckets(self):\n    return self\n\n  def list(self, project):\n    return apis_stub.RestCallStub(project, 'storage')\n\n  def get(self, bucket):\n    return apis_stub.RestCallStub(self.project_id, f'bucket-{bucket}')\n\n  def getIamPolicy(self, bucket):\n    if not self.project_id:\n      raise ValueError(NO_PROJECT_ID_ERROR.format('getIamPolicy'))\n    return apis_stub.RestCallStub(self.project_id, 'bucket-roles')\n"
  },
  {
    "path": "gcpdiag/queries/gcs_test.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Test code in gcs.py.\"\"\"\n\nfrom unittest import mock\n\nfrom gcpdiag import models\nfrom gcpdiag.queries import apis_stub, gcs\n\nDUMMY_PROJECT_NAME = 'gcpdiag-gcs1-aaaa'\nDUMMY_BUCKET_PATH = 'b/gcpdiag-gcs1bucket-aaaa'\nDUMMY_BUCKET_NAME = 'gcpdiag-gcs1bucket-aaaa'\nDUMMY_BUCKET_WITH_RETENTION_NAME = 'gcpdiag-gcs1bucket2-aaaa'\nDUMMY_BUCKET_PERM = 'projectEditor:gcpdiag-gcs1-aaaa'\nDUMMY_BUCKET_LABELS = {\n    'gcpdiag-gcs1bucket-aaaa': {},\n    'gcpdiag-gcs1bucket-labels-aaaa': {\n        'label1': 'value1'\n    },\n}\nFAKE_BUCKET_RESOURCE_DATA = {\n    'kind':\n        'storage#bucket',\n    'selfLink':\n        'https://www.googleapis.com/storage/v1/b/gcpdiag-gcs1bucket-aaaa',\n    'id':\n        'gcpdiag-gcs1bucket-aaaa',\n    'name':\n        'gcpdiag-gcs1bucket-aaaa',\n    'projectNumber':\n        '12340008',\n    'metageneration':\n        '9',\n    'location':\n        'US',\n    'storageClass':\n        'STANDARD',\n    'etag':\n        'CAE=',\n    'timeCreated':\n        '2016-07-12T15:05:45.473Z',\n    'updated':\n        '2022-06-22T10:25:28.219Z',\n    'locationType':\n        'multi-region',\n    'rpo':\n        'DEFAULT'\n}\n\n\n@mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)\nclass TestGcs:\n  \"\"\"Test GCS\"\"\"\n\n  def test_get_buckets(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    buckets = gcs.get_buckets(context=context)\n    assert len(buckets) == 3\n    assert DUMMY_BUCKET_NAME in buckets\n\n  def test_get_bucket_iam_policy(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    policy = gcs.get_bucket_iam_policy(context, DUMMY_BUCKET_PATH)\n    assert DUMMY_BUCKET_PERM in policy.get_members()\n\n  def test_bucket_labels(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    buckets = gcs.get_buckets(context=context)\n    for bucket_name, labels in DUMMY_BUCKET_LABELS.items():\n      assert buckets[bucket_name].labels == labels\n\n  def test_get_bucket_with_retention(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    bucket = gcs.get_bucket(context=context,\n                            bucket=DUMMY_BUCKET_WITH_RETENTION_NAME)\n    assert bucket.retention_policy.retention_period == 10\n\n  def test_get_uniform_access(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    bucket = gcs.get_bucket(context=context,\n                            bucket=DUMMY_BUCKET_WITH_RETENTION_NAME)\n    assert bucket.is_uniform_access() is False\n    fake_bucket = gcs.Bucket(project_id=DUMMY_PROJECT_NAME,\n                             resource_data=FAKE_BUCKET_RESOURCE_DATA)\n    assert fake_bucket.is_uniform_access() is False\n"
  },
  {
    "path": "gcpdiag/queries/generic_api/api_build/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/queries/generic_api/api_build/api.py",
    "content": "\"\"\"Make REST API requests.\"\"\"\n\nimport time\nfrom typing import Dict, Iterable, Protocol\n\nimport requests\n\nfrom gcpdiag.queries import apis_utils\n\n\nclass Creds(Protocol):\n\n  def update_headers(self, headers: Dict[str, str]) -> None:\n    pass\n\n\nclass RetryStrategy(Protocol):\n\n  def get_sleep_intervals(self) -> Iterable[float]:\n    pass\n\n\nclass API:\n  \"\"\"Class abstracting aspects of REST API requests.\"\"\"\n\n  def __init__(self, base_url: str, creds: Creds,\n               retry_strategy: RetryStrategy) -> None:\n    self._creds = creds\n    self._url = base_url\n    self._retry_strategy = retry_strategy\n\n  def _request(self, method: str, endpoint: str, **kwargs):\n    for timeout in self._retry_strategy.get_sleep_intervals():\n      try:\n        url = f'{self._url}/{endpoint}'\n        response = requests.request(method,\n                                    url,\n                                    headers=self._get_headers(),\n                                    **kwargs)\n        if response.status_code == 200:\n          return response.json() if response.content else None\n        if not apis_utils.should_retry(response.status_code):\n          raise RuntimeError(\n              f'http status {response.status_code} calling {method} {url}')\n      except requests.exceptions.RequestException:\n        time.sleep(timeout)\n    raise RuntimeError('Failed to get an API response after maximum retries')\n\n  def _get_headers(self) -> Dict[str, str]:\n    headers: Dict[str, str] = {}\n    self._creds.update_headers(headers)\n    return headers\n\n  def get(self, endpoint, params=None):\n    return self._request('GET', endpoint, params=params)\n"
  },
  {
    "path": "gcpdiag/queries/generic_api/api_build/api_unittest.py",
    "content": "\"\"\"\n  Tests for API\n  python -m unittest gcpdiag.queries.generic_api.api_build.api_unittest\n\"\"\"\n\nimport unittest\nfrom typing import Dict\nfrom unittest.mock import Mock, patch\n\nfrom gcpdiag.async_queries.api import constant_time_retry_strategy\nfrom gcpdiag.queries.generic_api.api_build import api\n\n\nclass FakeCreds:\n  _token: str\n\n  def __init__(self, token: str) -> None:\n    self._token = token\n\n  def update_headers(self, headers: Dict[str, str]) -> None:\n    headers['test_auth'] = f'test_auth {self._token}'\n\n\nclass TestAPI(unittest.TestCase):\n  \"\"\" Tests for API call \"\"\"\n\n  def setUp(self):\n    self._token = 'fake token'\n    self._base_url = 'https://test.com'\n    self._api = api.API(self._base_url,\n                        creds=FakeCreds(self._token),\n                        retry_strategy=constant_time_retry_strategy.\n                        ConstantTimeoutRetryStrategy(timeout=42, retries=3))\n\n  @patch('requests.request')\n  def test_sucessful_get_request(self, mock_request):\n    mock_response = Mock()\n    mock_response.status_code = 200\n    mock_response.json.return_value = {'hello': 'world'}\n    mock_request.return_value = mock_response\n    response = self._api.get('test_endpoint')\n    self.assertEqual(response, {'hello': 'world'})\n\n    mock_request.assert_called_once_with(\n        'GET',\n        f'{self._base_url}/test_endpoint',\n        headers={'test_auth': f'test_auth {self._token}'},\n        params=None)\n    mock_response.json.assert_called_once()\n\n  @patch('requests.request')\n  def test_failure_get_request(self, mock_request):\n    mock_response = Mock()\n    mock_response.status_code = 404\n    mock_response.text = 'Not found'\n    mock_request.return_value = mock_response\n\n    with self.assertRaises(RuntimeError) as context:\n      self._api.get('test_endpoint')\n\n    self.assertIn('http status 404 calling GET https://test.com/test_endpoint',\n                  str(context.exception))\n\n  @patch('requests.request')\n  def test_max_retries_exceeded(self, mock_request):\n    mock_response = Mock()\n    mock_response.status_code = 500\n    mock_response.text = 'Internal Server Error'\n    mock_request.return_value = mock_response\n\n    with patch.object(constant_time_retry_strategy.ConstantTimeoutRetryStrategy,\n                      'get_sleep_intervals',\n                      return_value=[0.1, 0.2, 0.3]):\n      with self.assertRaises(RuntimeError) as context:\n        self._api.get('test_endpoint')\n\n    self.assertIn('Failed to get an API response after maximum retries',\n                  str(context.exception))\n    self.assertEqual(mock_request.call_count, 3)\n\n  @patch('requests.request')\n  def test_temporary_failure_then_success(self, mock_request):\n    temporary_failure = Mock()\n    temporary_failure.status_code = 500\n    temporary_failure.text = 'Internal Server Error'\n\n    sucessful_response = Mock()\n    sucessful_response.status_code = 200\n    sucessful_response.json.return_value = {'hello': 'world'}\n\n    mock_request.side_effect = [\n        temporary_failure, temporary_failure, sucessful_response\n    ]\n    with patch.object(constant_time_retry_strategy.ConstantTimeoutRetryStrategy,\n                      'get_sleep_intervals',\n                      return_value=[0.1, 0.2, 0.3]):\n      response = self._api.get('test_endpoint')\n\n    self.assertEqual(response, {'hello': 'world'})\n    self.assertEqual(mock_request.call_count, 3)\n"
  },
  {
    "path": "gcpdiag/queries/generic_api/api_build/generic_api_stub.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Stub API calls used in apis.py for testing.\"\"\"\n\nimport json\nimport os\n\n# pylint: disable=unused-argument\n\n\nclass GenericApiStub:\n  \"\"\"Attributes:\n\n  project_root:\n  data_dir:\n  \"\"\"\n\n  def __init__(self, service_name: str):\n    self.project_root = os.path.abspath(\n        os.path.join(os.path.dirname(__file__), '..', '..', '..', '..'))\n    self.data_dir = os.path.join(self.project_root, 'test-data', service_name,\n                                 'json-dumps')\n\n  def _load_json(self, file_name: str) -> dict:\n    file_path = os.path.join(self.data_dir, file_name)\n    file_path = str(file_path + '.json')\n    if not os.path.exists(file_path):\n      raise FileNotFoundError('file not found: %s' % file_path)\n    with open(file_path, encoding='utf-8') as file:\n      return json.load(file)\n\n\ndef get_generic_api_stub(service_name: str, api_base_url: str):\n\n  # Avoid circular import dependencies by importing the required modules here.\n  # pylint: disable=import-outside-toplevel\n\n  if service_name == 'datafusion':\n    from gcpdiag.queries.generic_api.datafusion import datafusion_stub\n    return datafusion_stub.DataFusionApiStub()\n  else:\n    raise ValueError('unsupported endpoint: %s' % service_name)\n"
  },
  {
    "path": "gcpdiag/queries/generic_api/api_build/get_generic.py",
    "content": "\"\"\" Helper method to initialize API object \"\"\"\nfrom gcpdiag import caching, config\nfrom gcpdiag.async_queries.api import (default_random,\n                                       exponential_random_retry_strategy,\n                                       gcpdiag_creds)\nfrom gcpdiag.queries.generic_api.api_build import api, service_factory\n\n\ndef pick_creds_implementation() -> api.Creds:\n  try:\n    # This is for Google-internal use only and allows us to modify the request\n    # to make it work also internally. The import will fail for the public\n    # version of gcpdiag.\n    # pylint: disable=import-outside-toplevel\n    from gcpdiag_google_internal import async_api_creds_internal\n\n    return async_api_creds_internal.GcpdiagInternalCreds()\n  except ImportError:\n    return gcpdiag_creds.GcpdiagCreds()\n\n\n@caching.cached_api_call(in_memory=True)\ndef get_generic_api(service_name: str, api_base_url: str) -> api.API:\n  \"\"\"Args:\n\n    api_base_url:\n    version:\n\n  Returns:\n  \"\"\"\n\n  return service_factory.build_api(\n      service_name,\n      api_base_url,\n      creds=pick_creds_implementation(),\n      retry_strategy=exponential_random_retry_strategy.\n      ExponentialRandomTimeoutRetryStrategy(\n          retries=config.API_RETRIES,\n          random_pct=config.API_RETRY_SLEEP_RANDOMNESS_PCT,\n          multiplier=config.API_RETRY_SLEEP_MULTIPLIER,\n          random=default_random.Random(),\n      ),\n  )\n"
  },
  {
    "path": "gcpdiag/queries/generic_api/api_build/service_factory.py",
    "content": "\"\"\"Helper functions to create service objects for the API.\"\"\"\n\nfrom gcpdiag.queries.generic_api.api_build import api\n\n\ndef build_api(service_name: str, api_base_url: str, creds: api.Creds,\n              retry_strategy: api.RetryStrategy) -> object:\n  \"\"\"Builds a service object for the given service name.\"\"\"\n  # Avoid circular import dependencies by importing the required modules here.\n  # pylint: disable=import-outside-toplevel\n  if service_name == \"datafusion\":\n    from gcpdiag.queries.generic_api.datafusion import datafusion\n\n    return datafusion.Datafusion(api_base_url,\n                                 creds=creds,\n                                 retry_strategy=retry_strategy)\n  else:\n    raise ValueError(f\"Unknown service name: {service_name}\")\n"
  },
  {
    "path": "gcpdiag/queries/generic_api/datafusion/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/queries/generic_api/datafusion/datafusion.py",
    "content": "\"\"\"Gateway for Datafusion service\"\"\"\n\nfrom gcpdiag.queries.generic_api.api_build import api\n\n\nclass Datafusion(api.API):\n  \"\"\"Gateway for Datafusion service\"\"\"\n\n  def __init__(self, base_url: str, creds: api.Creds,\n               retry_strategy: api.RetryStrategy) -> None:\n    super().__init__(base_url, creds, retry_strategy)\n\n  def get_system_profiles(self):\n    endpoint = 'v3/profiles'\n    return self.get(endpoint)\n\n  def get_all_namespaces(self):\n    endpoint = 'v3/namespaces'\n    return self.get(endpoint)\n\n  def get_user_profiles(self, namespace: str):\n    endpoint = f'v3/namespaces/{namespace}/profiles'\n    return self.get(endpoint)\n\n  def get_system_preferences(self):\n    endpoint = 'v3/preferences/'\n    return self.get(endpoint)\n\n  def get_namespace_preferences(self, namespace: str):\n    endpoint = f'v3/namespaces/{namespace}/preferences'\n    return self.get(endpoint)\n\n  def get_all_applications(self, namespace: str):\n    endpoint = f'v3/namespaces/{namespace}/apps'\n    return self.get(endpoint)\n\n  def get_application_preferences(self, namespace: str, application_name: str):\n    endpoint = f'v3/namespaces/{namespace}/apps/{application_name}/preferences'\n    return self.get(endpoint)\n"
  },
  {
    "path": "gcpdiag/queries/generic_api/datafusion/datafusion_stub.py",
    "content": "\"\"\"Stub for Data Fusion API.\"\"\"\n\nfrom gcpdiag.queries.generic_api.api_build.generic_api_stub import \\\n    GenericApiStub\n\n\nclass DataFusionApiStub(GenericApiStub):\n  \"\"\"Stub for Data Fusion API.\"\"\"\n\n  def __init__(self):\n    super().__init__('datafusion1')\n\n  def get_system_profiles(self):\n    return self._load_json('datafusion-system-compute-profile')\n\n  def get_all_namespaces(self):\n    return self._load_json('namespaces')\n\n  def get_user_profiles(self, namespace: str):\n    return self._load_json(f'datafusion-{namespace}-user-compute-profile')\n\n  def get_system_preferences(self):\n    return self._load_json('datafusion-system-preferences')\n\n  def get_namespace_preferences(self, namespace: str):\n    return self._load_json(f'datafusion-{namespace}-namespace-preferences')\n\n  def get_all_applications(self, namespace: str):\n    return self._load_json(f'datafusion-{namespace}-applications')\n\n  def get_application_preferences(self, namespace: str, application_name: str):\n    return self._load_json(\n        f'datafusion-{namespace}-application-{application_name}-preferences')\n"
  },
  {
    "path": "gcpdiag/queries/generic_api/datafusion/datafusion_test.py",
    "content": "\"\"\"\n  Tests for datafusion API\n  python -m unittest gcpdiag.queries.generic_api.datafusion.datafusion_test\n\"\"\"\n\nimport unittest\nfrom typing import Dict\nfrom unittest.mock import Mock, patch\n\nimport requests\n\nfrom gcpdiag.async_queries.api import constant_time_retry_strategy\nfrom gcpdiag.queries.generic_api.datafusion import datafusion\n\n\nclass FakeCreds:\n  _token: str\n\n  def __init__(self, token: str) -> None:\n    self._token = token\n\n  def update_headers(self, headers: Dict[str, str]) -> None:\n    headers['test_auth'] = f'test_auth {self._token}'\n\n\nclass TestDatafusion(unittest.TestCase):\n  \"\"\" Tests for API call \"\"\"\n\n  def setUp(self):\n    self._token = 'fake token'\n    self._base_url = 'https://datafusion.googleusercontent.com'\n    self._api = datafusion.Datafusion(\n        self._base_url,\n        creds=FakeCreds(self._token),\n        retry_strategy=constant_time_retry_strategy.\n        ConstantTimeoutRetryStrategy(timeout=42, retries=3))\n\n  @patch('requests.request')\n  def test_get_system_profiles_success(self, mock_request):\n    mock_response = Mock()\n    mock_response.status_code = 200\n    mock_response.json.return_value = {'profile': {}}\n    mock_request.return_value = mock_response\n\n    response = self._api.get_system_profiles()\n    self.assertEqual(response, {'profile': {}})\n\n    mock_request.assert_called_once_with(\n        'GET',\n        f'{self._base_url}/v3/profiles',\n        headers={'test_auth': f'test_auth {self._token}'},\n        params=None)\n    mock_response.json.assert_called_once()\n\n  @patch('requests.request')\n  def test_get_all_namespaces(self, mock_request):\n    mock_response = Mock()\n    mock_response.status_code = 200\n    mock_response.json.return_value = {'namespaces': []}\n    mock_request.return_value = mock_response\n\n    response = self._api.get_all_namespaces()\n    self.assertEqual(response, {'namespaces': []})\n\n    mock_request.assert_called_once_with(\n        'GET',\n        f'{self._base_url}/v3/namespaces',\n        headers={'test_auth': f'test_auth {self._token}'},\n        params=None)\n    mock_response.json.assert_called_once()\n\n  @patch('requests.request')\n  def test_get_user_profiles(self, mock_request):\n    mock_response = Mock()\n    mock_response.status_code = 200\n    mock_response.json.return_value = {'userProfiles': []}\n    mock_request.return_value = mock_response\n\n    response = self._api.get_user_profiles(namespace='test-namespace')\n    self.assertEqual(response, {'userProfiles': []})\n\n    mock_request.assert_called_once_with(\n        'GET',\n        f'{self._base_url}/v3/namespaces/test-namespace/profiles',\n        headers={'test_auth': f'test_auth {self._token}'},\n        params=None)\n    mock_response.json.assert_called_once()\n\n  @patch('requests.request')\n  def test_get_system_profiles_failure(self, mock_request):\n    mock_request.side_effect = requests.exceptions.RequestException(\n        'Network error')\n\n    with patch.object(constant_time_retry_strategy.ConstantTimeoutRetryStrategy,\n                      'get_sleep_intervals',\n                      return_value=[0.1, 0.2, 0.3]):\n      with self.assertRaises(RuntimeError) as context:\n        self._api.get('test_endpoint')\n\n    self.assertIn('Failed to get an API response after maximum retries',\n                  str(context.exception))\n    self.assertEqual(mock_request.call_count, 3)\n\n  @patch('requests.request')\n  def test_get_user_profiles_temporary_failure_then_success(self, mock_request):\n    temporary_failure = Mock()\n    temporary_failure.status_code = 500\n    temporary_failure.text = 'Internal Server Error'\n\n    sucessful_response = Mock()\n    sucessful_response.status_code = 200\n    sucessful_response.json.return_value = {'userProfiles': []}\n\n    mock_request.side_effect = [\n        temporary_failure, temporary_failure, sucessful_response\n    ]\n    with patch.object(constant_time_retry_strategy.ConstantTimeoutRetryStrategy,\n                      'get_sleep_intervals',\n                      return_value=[0.1, 0.2, 0.3]):\n      response = self._api.get_user_profiles(namespace='test-namespace')\n\n    self.assertEqual(response, {'userProfiles': []})\n    self.assertEqual(mock_request.call_count, 3)\n\n  @patch('requests.request')\n  def test_get_all_namespaces_max_retries_exceeded(self, mock_request):\n    mock_response = Mock()\n    mock_response.status_code = 500\n    mock_response.raise_for_status.side_effect = requests.exceptions.HTTPError(\n        'Internal Server Error')\n    mock_request.return_value = mock_response\n\n    with patch.object(constant_time_retry_strategy.ConstantTimeoutRetryStrategy,\n                      'get_sleep_intervals',\n                      return_value=[0.1, 0.2, 0.3]):\n      with self.assertRaises(RuntimeError) as context:\n        self._api.get_all_namespaces()\n\n    self.assertIn('Failed to get an API response after maximum retries',\n                  str(context.exception))\n    self.assertEqual(mock_request.call_count, 3)\n\n  @patch('requests.request')\n  def test_get_user_profiles_failure(self, mock_request):\n    mock_response = Mock()\n    mock_response.status_code = 404\n    mock_response.raise_for_status.side_effect = requests.exceptions.HTTPError(\n        'Not Found')\n    mock_request.return_value = mock_response\n\n    with self.assertRaises(RuntimeError) as context:\n      self._api.get_user_profiles(namespace='test-namespace')\n\n    self.assertIn(\n        'http status 404 calling GET https://datafusion.googleusercontent.com/v3/namespaces/test-namespace/profiles',  # pylint: disable=line-too-long\n        str(context.exception))\n    self.assertEqual(mock_request.call_count, 1)\n\n  @patch('requests.request')\n  def test_get_all_applications(self, mock_request):\n    mock_response = Mock()\n    mock_response.status_code = 200\n    mock_response.json.return_value = {'apps': []}\n    mock_request.return_value = mock_response\n\n    response = self._api.get_all_applications(namespace='test-namespace')\n    self.assertEqual(response, {'apps': []})\n\n  @patch('requests.request')\n  def test_get_application_preferences(self, mock_request):\n    mock_response = Mock()\n    mock_response.status_code = 200\n    mock_response.json.return_value = {'preferences': {}}\n    mock_request.return_value = mock_response\n    response = self._api.get_application_preferences(\n        namespace='test-namespace', application_name='test-application')\n    self.assertEqual(response, {'preferences': {}})\n\n  @patch('requests.request')\n  def test_get_application_preferences_failure(self, mock_request):\n    mock_response = Mock()\n    mock_response.status_code = 404\n    mock_response.raise_for_status.side_effect = requests.exceptions.HTTPError(\n        'Not Found')\n    mock_request.return_value = mock_response\n\n    with self.assertRaises(RuntimeError) as context:\n      self._api.get_application_preferences(namespace='test-namespace',\n                                            application_name='test-application')\n\n    self.assertIn(\n        'http status 404 calling GET https://datafusion.googleusercontent.com/v3/namespaces/test-namespace/apps/test-application/preferences',  # pylint: disable=line-too-long\n        str(context.exception))\n    self.assertEqual(mock_request.call_count, 1)\n\n  @patch('requests.request')\n  def test_get_system_preferences(self, mock_request):\n    mock_response = Mock()\n    mock_response.status_code = 200\n    mock_response.json.return_value = {'preferences': {}}\n    mock_request.return_value = mock_response\n    response = self._api.get_system_preferences()\n    self.assertEqual(response, {'preferences': {}})\n\n  @patch('requests.request')\n  def test_get_namespace_preferences(self, mock_request):\n    mock_response = Mock()\n    mock_response.status_code = 200\n    mock_response.json.return_value = {'preferences': {}}\n    mock_request.return_value = mock_response\n    response = self._api.get_namespace_preferences(namespace='test-namespace')\n    self.assertEqual(response, {'preferences': {}})\n"
  },
  {
    "path": "gcpdiag/queries/gke.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Queries related to GCP Kubernetes Engine clusters.\"\"\"\n\nimport datetime\nimport functools\nimport ipaddress\nimport logging\nimport re\nfrom typing import Dict, Iterable, List, Mapping, Optional, Union\n\nimport bs4\nimport googleapiclient.errors\nimport requests\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import caching, config, models, utils\nfrom gcpdiag.queries import apis, crm, gce, network, web\nfrom gcpdiag.utils import Version\n\n# To avoid name conflict with L342\n# pylint: disable=invalid-name\nIPv4NetOrIPv6Net = network.IPv4NetOrIPv6Net\n\nDEFAULT_MAX_PODS_PER_NODE = 110\n\n\nclass NodeConfig:\n  \"\"\"Represents a GKE node pool configuration.\"\"\"\n\n  def __init__(self, resource_data):\n    self._resource_data = resource_data\n\n  def has_accelerators(self) -> bool:\n    if 'accelerators' in self._resource_data:\n      return True\n    return False\n\n  @property\n  def machine_type(self) -> str:\n    return self._resource_data['machineType']\n\n  @property\n  def image_type(self) -> str:\n    return self._resource_data['imageType']\n\n  @property\n  def oauth_scopes(self) -> list:\n    return self._resource_data['oauthScopes']\n\n  @property\n  def has_serial_port_logging_enabled(self) -> bool:\n    \"\"\" Check if serial port logging is enabled in the node config.\n\n    Returns:\n      bool: True if serial port logging is enabled or not explicitly disabled.\n            False if explicitly disabled.\n    \"\"\"\n    metadata = self._resource_data.get('metadata', {})\n    return metadata.get('serial-port-logging-enable', 'true').lower() == 'true'\n\n\nclass NodePool(models.Resource):\n  \"\"\"Represents a GKE node pool.\"\"\"\n\n  version: Version\n\n  def __init__(self, cluster, resource_data):\n    super().__init__(project_id=cluster.project_id)\n    self._cluster = cluster\n    self._resource_data = resource_data\n    self.version = Version(self._resource_data['version'])\n    self._migs = None\n\n  def _get_service_account(self) -> str:\n    return self._resource_data.get('config', {}).get('serviceAccount', None)\n\n  @property\n  def full_path(self) -> str:\n    # https://container.googleapis.com/v1/projects/gcpdiag-gke1-aaaa/\n    #   locations/europe-west1/clusters/gke2/nodePools/default-pool\n    m = re.match(r'https://container.googleapis.com/v1/(.*)',\n                 self._resource_data.get('selfLink', ''))\n    if not m:\n      raise RuntimeError('can\\'t parse selfLink of nodepool resource')\n    return m.group(1)\n\n  @property\n  def short_path(self) -> str:\n    path = self.full_path\n    path = re.sub(r'^projects/', '', path)\n    path = re.sub(r'/locations/', '/', path)\n    path = re.sub(r'/zones/', '/', path)\n    path = re.sub(r'/clusters/', '/', path)\n    path = re.sub(r'/nodePools/', '/', path)\n    return path\n\n  @property\n  def name(self) -> str:\n    return self._resource_data['name']\n\n  @property\n  def config(self) -> NodeConfig:\n    return NodeConfig(self._resource_data['config'])\n\n  @property\n  def node_count(self) -> int:\n    return self._resource_data.get('initialNodeCount', 0)\n\n  def has_default_service_account(self) -> bool:\n    sa = self._get_service_account()\n    return sa == 'default'\n\n  def has_image_streaming_enabled(self) -> bool:\n    return get_path(self._resource_data, ('config', 'gcfsConfig', 'enabled'),\n                    default=False)\n\n  def has_md_concealment_enabled(self) -> bool:\n    # Empty ({}) workloadMetadataConfig means that 'Metadata concealment'\n    # (predecessor of Workload Identity) is enabled.\n    # https://cloud.google.com/kubernetes-engine/docs/how-to/protecting-cluster-metadata#concealment\n    return get_path(self._resource_data, ('config', 'workloadMetadataConfig'),\n                    default=None) == {}\n\n  def has_workload_identity_enabled(self) -> bool:\n    # 'Metadata concealment' (workloadMetadataConfig == {}) doesn't protect the\n    # default SA's token\n    return bool(\n        get_path(self._resource_data, ('config', 'workloadMetadataConfig'),\n                 default=None))\n\n  @property\n  def service_account(self) -> str:\n    sa = self._get_service_account()\n    if sa == 'default':\n      project_nr = crm.get_project(self.project_id).number\n      return f'{project_nr}-compute@developer.gserviceaccount.com'\n    else:\n      return sa\n\n  @property\n  def pod_ipv4_cidr_size(self) -> int:\n    return self._resource_data['podIpv4CidrSize']\n\n  @property\n  def pod_ipv4_cidr_block(self) -> Optional[IPv4NetOrIPv6Net]:\n    # Get the pod cidr range in use by the nodepool\n    pod_cidr = get_path(self._resource_data,\n                        ('networkConfig', 'podIpv4CidrBlock'),\n                        default=None)\n\n    if pod_cidr:\n      return ipaddress.ip_network(pod_cidr)\n    else:\n      return None\n\n  @property\n  def max_pod_per_node(self) -> int:\n    return int(\n        get_path(self._resource_data, ('maxPodsConstraint', 'maxPodsPerNode'),\n                 default=DEFAULT_MAX_PODS_PER_NODE))\n\n  @property\n  def cluster(self) -> 'Cluster':\n    return self._cluster\n\n  @property\n  def instance_groups(self) -> List[gce.ManagedInstanceGroup]:\n    if self._migs is None:\n      project_migs_by_selflink = {}\n      for m in gce.get_managed_instance_groups(\n          models.Context(project_id=self.project_id)).values():\n        project_migs_by_selflink[m.self_link] = m\n\n      self._migs = []\n      for url in self._resource_data.get('instanceGroupUrls', []):\n        try:\n          self._migs.append(project_migs_by_selflink[url])\n        except KeyError:\n          continue\n    return self._migs\n\n  @property\n  def node_tags(self) -> List[str]:\n    \"\"\"Returns the firewall tags used for nodes in this cluster.\n\n    If the node tags can't be determined, [] is returned.\n    \"\"\"\n    migs = self.instance_groups\n    if not migs:\n      return []\n    return migs[0].template.tags\n\n  def get_machine_type(self) -> str:\n    \"\"\"Returns the machine type of the nodepool nodes\"\"\"\n    return self.config.machine_type\n\n\nclass UndefinedClusterPropertyError(Exception):\n  \"\"\"Thrown when a property of a cluster can't be determined for\n  some reason. For example, the cluster_hash can't be determined\n  because there are no nodepools defined.\"\"\"\n  pass\n\n\nclass Cluster(models.Resource):\n  \"\"\"Represents a GKE cluster.\n\n  https://cloud.google.com/kubernetes-engine/docs/reference/rest/v1/projects.locations.clusters#Cluster\n  \"\"\"\n  _resource_data: dict\n  master_version: Version\n  _context: models.Context\n  _nodepools: Optional[List[NodePool]]\n\n  def __init__(self, project_id, resource_data, context: models.Context):\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n    self.master_version = Version(self._resource_data['currentMasterVersion'])\n    self._nodepools = None\n    self._context = context\n\n  @property\n  def full_path(self) -> str:\n    if utils.is_region(self._resource_data['location']):\n      return (f'projects/{self.project_id}/'\n              f'locations/{self.location}/clusters/{self.name}')\n    else:\n      return (f'projects/{self.project_id}/'\n              f'zones/{self.location}/clusters/{self.name}')\n\n  @property\n  def short_path(self) -> str:\n    path = self.full_path\n    path = re.sub(r'^projects/', '', path)\n    path = re.sub(r'/locations/', '/', path)\n    path = re.sub(r'/zones/', '/', path)\n    path = re.sub(r'/clusters/', '/', path)\n    return path\n\n  @property\n  def name(self) -> str:\n    return self._resource_data['name']\n\n  @property\n  def location(self) -> str:\n    return self._resource_data['location']\n\n  @property\n  def pod_ipv4_cidr(self) -> IPv4NetOrIPv6Net:\n    cidr = self._resource_data['clusterIpv4Cidr']\n    return ipaddress.ip_network(cidr)\n\n  @property\n  def current_node_count(self) -> int:\n    return self._resource_data.get('currentNodeCount', 0)\n\n  @property\n  def release_channel(self) -> Optional[str]:\n    try:\n      return self._resource_data['releaseChannel']['channel']\n    except KeyError:\n      return None\n\n  @property\n  def nap_node_image_type(self) -> Optional[str]:\n\n    return get_path(\n        self._resource_data,\n        ('autoscaling', 'autoprovisioningNodePoolDefaults', 'imageType'),\n        default=None)\n\n  @property\n  def app_layer_sec_key(self) -> str:\n    return self._resource_data['databaseEncryption'].get('keyName')\n\n  @property\n  def status(self) -> str:\n    return self._resource_data['status']\n\n  @property\n  def status_message(self) -> str:\n    return self._resource_data.get('statusMessage', None)\n\n  def has_app_layer_enc_enabled(self) -> bool:\n    # state := 'DECRYPTED' | 'ENCRYPTED', keyName := 'full_path_to_key_resouce'\n    return get_path(self._resource_data, ('databaseEncryption', 'state'),\n                    default=None) == 'ENCRYPTED'\n\n  def has_logging_enabled(self) -> bool:\n    return self._resource_data['loggingService'] != 'none'\n\n  def enabled_logging_components(self) -> List[str]:\n    return self._resource_data['loggingConfig']['componentConfig'][\n        'enableComponents']\n\n  def has_monitoring_enabled(self) -> bool:\n    return self._resource_data['monitoringService'] != 'none'\n\n  def enabled_monitoring_components(self) -> List[str]:\n    return self._resource_data['monitoringConfig']['componentConfig'][\n        'enableComponents']\n\n  def has_authenticator_group_enabled(self) -> bool:\n    return len(self._resource_data.get('authenticatorGroupsConfig', {})) > 0\n\n  def has_workload_identity_enabled(self) -> bool:\n    return len(self._resource_data.get('workloadIdentityConfig', {})) > 0\n\n  def has_http_load_balancing_enabled(self) -> bool:\n    # HTTP load balancing needs to be enabled to use GKE ingress\n    return not (get_path(self._resource_data,\n                         ('addonsConfig', 'httpLoadBalancing', 'disabled'),\n                         default=None) is True)\n\n  def has_network_policy_enabled(self) -> bool:\n    # Network policy enforcement\n    return get_path(self._resource_data,\n                    ('addonsConfig', 'networkPolicyConfig', 'disabled'),\n                    default=False) is not True\n\n  def has_dpv2_enabled(self) -> bool:\n    # Checks whether dataplane V2 is enabled in clusters\n    return (get_path(self._resource_data, ('networkConfig', 'datapathProvider'),\n                     default=None) == 'ADVANCED_DATAPATH')\n\n  def has_intra_node_visibility_enabled(self) -> bool:\n    if ('networkConfig' in self._resource_data and\n        'enableIntraNodeVisibility' in self._resource_data['networkConfig']):\n      return self._resource_data['networkConfig']['enableIntraNodeVisibility']\n    return False\n\n  def has_maintenance_window(self) -> bool:\n    # 'e3b0c442' is a hexadecimal string that represents the value of an empty\n    # string ('') in cryptography. If the maintenance windows are defined, the\n    # value of 'resourceVersion' is not empty ('e3b0c442').\n    return self._resource_data['maintenancePolicy'][\n        'resourceVersion'] != 'e3b0c442'\n\n  def has_image_streaming_enabled(self) -> bool:\n    \"\"\"\n    Check if cluster has Image Streaming (aka  Google Container File System)\n    enabled\n    \"\"\"\n    global_gcsfs = get_path(\n        self._resource_data,\n        ('nodePoolDefaults', 'nodeConfigDefaults', 'gcfsConfig', 'enabled'),\n        default=False)\n    # Check nodePoolDefaults settings\n    if global_gcsfs:\n      return True\n    for np in self.nodepools:\n      # Check if any nodepool has image streaming enabled\n      if np.has_image_streaming_enabled():\n        return True\n    return False\n\n  @property\n  def nodepools(self) -> List[NodePool]:\n    if self._nodepools is None:\n      self._nodepools = []\n      for n in self._resource_data.get('nodePools', []):\n        self._nodepools.append(NodePool(self, n))\n    return self._nodepools\n\n  @property\n  def network(self) -> network.Network:\n    # projects/gcpdiag-gke1-aaaa/global/networks/default\n    network_string = self._resource_data['networkConfig']['network']\n    m = re.match(r'projects/([^/]+)/global/networks/([^/]+)$', network_string)\n    if not m:\n      raise RuntimeError(\"can't parse network string: %s\" % network_string)\n    return network.get_network(m.group(1), m.group(2), self._context)\n\n  @property\n  def subnetwork(self) -> Optional[models.Resource]:\n    # 'projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default'\n    if 'subnetwork' not in self._resource_data['networkConfig']:\n      return None\n\n    subnetwork_string = self._resource_data['networkConfig']['subnetwork']\n    m = re.match(r'projects/([^/]+)/regions/([^/]+)/subnetworks/([^/]+)$',\n                 subnetwork_string)\n    if not m:\n      raise RuntimeError(\"can't parse network string: %s\" % subnetwork_string)\n    return network.get_subnetwork(m.group(1), m.group(2), m.group(3))\n\n  @property\n  def get_subnet_name(self) -> Optional[models.Resource]:\n    if 'subnetwork' not in self._resource_data:\n      return None\n    return self._resource_data['subnetwork']\n\n  @property\n  def get_nodepool_config(self) -> Optional[models.Resource]:\n    if 'nodePools' not in self._resource_data:\n      return None\n    return self._resource_data['nodePools']\n\n  @property\n  def get_network_string(self) -> str:\n    if 'networkConfig' not in self._resource_data:\n      return ''\n    if 'network' not in self._resource_data['networkConfig']:\n      return ''\n    return self._resource_data['networkConfig']['network']\n\n  @property\n  def is_private(self) -> bool:\n    if not 'privateClusterConfig' in self._resource_data:\n      return False\n\n    return self._resource_data['privateClusterConfig'].get(\n        'enablePrivateNodes', False)\n\n  @property\n  def is_vpc_native(self) -> bool:\n    return (get_path(self._resource_data,\n                     ('ipAllocationPolicy', 'useIpAliases'),\n                     default=False))\n\n  @property\n  def is_regional(self) -> bool:\n    return len(self._resource_data['locations']) > 1\n\n  @property\n  def cluster_ca_certificate(self) -> str:\n    return self._resource_data['masterAuth']['clusterCaCertificate']\n\n  @property\n  def endpoint(self) -> Optional[str]:\n    if 'endpoint' not in self._resource_data:\n      return None\n    return self._resource_data['endpoint']\n\n  @property\n  def is_autopilot(self) -> bool:\n    if not 'autopilot' in self._resource_data:\n      return False\n    return self._resource_data['autopilot'].get('enabled', False)\n\n  @property\n  def masters_cidr_list(self) -> Iterable[IPv4NetOrIPv6Net]:\n    if get_path(self._resource_data,\n                ('privateClusterConfig', 'masterIpv4CidrBlock'),\n                default=None):\n      return [\n          ipaddress.ip_network(self._resource_data['privateClusterConfig']\n                               ['masterIpv4CidrBlock'])\n      ]\n    else:\n      #only older clusters still have ssh firewall rules\n      if self.current_node_count and not self.cluster_hash:\n        logging.warning(\"couldn't retrieve cluster hash for cluster %s.\",\n                        self.name)\n        return []\n      fw_rule_name = f'gke-{self.name}-{self.cluster_hash}-ssh'\n      rule = self.network.firewall.get_vpc_ingress_rules(name=fw_rule_name)\n      if rule and rule[0].is_enabled():\n        return rule[0].source_ranges\n      return []\n\n  @property\n  def cluster_hash(self) -> Optional[str]:\n    \"\"\"Returns the \"cluster hash\" as used in automatic firewall rules for GKE clusters.\n    Cluster hash is the first 8 characters of cluster id.\n    See also: https://cloud.google.com/kubernetes-engine/docs/concepts/firewall-rules\n    \"\"\"\n    if 'id' in self._resource_data:\n      return self._resource_data['id'][:8]\n    raise UndefinedClusterPropertyError('no id')\n\n  @property\n  def is_nodelocal_dnscache_enabled(self) -> bool:\n    \"\"\"Returns True if NodeLocal DNSCache is enabled for the cluster.\"\"\"\n    addons_config = self._resource_data.get('addonsConfig', {})\n    dns_cache_config = addons_config.get('dnsCacheConfig', {})\n    return dns_cache_config.get('enabled', False)\n\n\n@caching.cached_api_call\ndef get_clusters(context: models.Context) -> Mapping[str, Cluster]:\n  \"\"\"Get a list of Cluster matching the given context, indexed by cluster full path.\"\"\"\n  clusters: Dict[str, Cluster] = {}\n  if not apis.is_enabled(context.project_id, 'container'):\n    return clusters\n  container_api = apis.get_api('container', 'v1', context.project_id)\n  logging.debug('fetching list of GKE clusters in project %s',\n                context.project_id)\n  query = container_api.projects().locations().clusters().list(\n      parent=f'projects/{context.project_id}/locations/-')\n  try:\n    resp = query.execute(num_retries=config.API_RETRIES)\n    if 'clusters' not in resp:\n      return clusters\n    for resp_c in resp['clusters']:\n      # verify that we some minimal data that we expect\n      if 'name' not in resp_c or 'location' not in resp_c:\n        raise RuntimeError(\n            'missing data in projects.locations.clusters.list response')\n      if not context.match_project_resource(location=resp_c.get('location', ''),\n                                            labels=resp_c.get(\n                                                'resourceLabels', {}),\n                                            resource=resp_c.get('name', '')):\n        continue\n      c = Cluster(project_id=context.project_id,\n                  resource_data=resp_c,\n                  context=context)\n      clusters[c.full_path] = c\n  except googleapiclient.errors.HttpError as err:\n    raise utils.GcpApiError(err) from err\n  return clusters\n\n\n@caching.cached_api_call\ndef get_cluster(\n    project_id,\n    cluster_id,\n    location,\n) -> Union[Cluster, None]:\n  \"\"\"Get a Cluster from project_id of a context.\"\"\"\n  if not apis.is_enabled(project_id, 'container'):\n    return None\n  container_api = apis.get_api('container', 'v1', project_id)\n  logging.debug('fetching the GKE cluster %s in project %s', cluster_id,\n                project_id)\n  query = container_api.projects().locations().clusters().get(\n      name=f'projects/{project_id}/locations/{location}/clusters/{cluster_id}')\n  try:\n    resp = query.execute(num_retries=config.API_RETRIES)\n    if cluster_id not in str(resp):\n      raise RuntimeError(\n          'missing data in projects.locations.clusters.list response')\n  except googleapiclient.errors.HttpError as err:\n    raise utils.GcpApiError(err) from err\n  return Cluster(project_id=project_id,\n                 resource_data=resp,\n                 context=models.Context(project_id=project_id))\n\n\n@caching.cached_api_call\ndef _get_server_config(project_id: str, location: str):\n  container_api = apis.get_api('container', 'v1', project_id)\n  name = f'projects/{project_id}/locations/{location}'\n  request = container_api.projects().locations().getServerConfig(name=name)\n  try:\n    resp = request.execute(num_retries=config.API_RETRIES)\n    return resp\n  except googleapiclient.errors.HttpError as err:\n    raise utils.GcpApiError(err) from err\n\n\ndef get_valid_master_versions(project_id: str, location: str) -> List[str]:\n  \"\"\"Get a list of valid GKE master versions.\"\"\"\n  server_config = _get_server_config(project_id, location)\n  versions: List[str] = []\n\n  # channel versions may extend the list of all available versions.\\\n  # Especially for the Rapid channel - many new versions only available in Rapid\n  # channel and not as a static version to make sure nobody stuck on that\n  # version for an extended period of time.\n  for c in server_config['channels']:\n    versions += c['validVersions']\n\n  versions += server_config['validMasterVersions']\n\n  return versions\n\n\ndef get_valid_node_versions(project_id: str, location: str) -> List[str]:\n  \"\"\"Get a list of valid GKE master versions.\"\"\"\n  server_config = _get_server_config(project_id, location)\n  versions: List[str] = []\n\n  # See explanation in get_valid_master_versions\n  for c in server_config['channels']:\n    versions += c['validVersions']\n\n  versions += server_config['validNodeVersions']\n\n  return versions\n\n\nclass Node(models.Resource):\n  \"\"\"Represents a GKE node.\n\n  This class useful for example to determine the GKE cluster when you only have\n  an GCE instance id (like from a metrics label). \"\"\"\n\n  instance: gce.Instance\n  nodepool: NodePool\n  mig: gce.ManagedInstanceGroup\n\n  def __init__(self, instance, nodepool, mig):\n    super().__init__(project_id=instance.project_id)\n    self.instance = instance\n    self.nodepool = nodepool\n    self.mig = mig\n    pass\n\n  @property\n  def full_path(self) -> str:\n    return self.nodepool.cluster.full_path + '/nodes/' + self.instance.name\n\n  @property\n  def short_path(self) -> str:\n    #return self.nodepool.cluster.short_path + '/' + self.instance.name\n    return self.instance.short_path\n\n\n# Note: we don't use caching.cached_api_call here to avoid the locking\n# overhead. which is not required because all API calls are wrapper already\n# around caching.cached_api_call.\n@functools.lru_cache()\ndef get_node_by_instance_id(context: models.Context, instance_id: str) -> Node:\n  \"\"\"Get a gke.Node instance by instance id.\n\n  Throws a KeyError in case this instance is not found or isn't part of a GKE cluster.\n  \"\"\"\n  # This will throw a KeyError if the instance is not found, which is also\n  # the behavior that we want for this function.\n  instance = gce.get_instances(context)[instance_id]\n  clusters = get_clusters(context)\n  try:\n    # instance.mig throws AttributeError if it isn't part of a mig\n    mig = instance.mig\n\n    # find a NodePool that uses this MIG\n    for c in clusters.values():\n      for np in c.nodepools:\n        for np_mig in np.instance_groups:\n          if mig == np_mig:\n            return Node(instance=instance, nodepool=np, mig=mig)\n\n    # if we didn't find a nodepool that owns this instance, raise a KeyError\n    raise KeyError('can\\'t determine GKE cluster for instance %s' %\n                   (instance_id))\n\n  except AttributeError as err:\n    raise KeyError from err\n  return None\n\n\n@caching.cached_api_call\ndef get_release_schedule() -> Dict:\n  \"\"\"Extract the release schedule for gke clusters\n\n  Returns:\n    A dictionary of release schedule.\n  \"\"\"\n  page_url = 'https://cloud.google.com/kubernetes-engine/docs/release-schedule'\n  release_data = {}\n  # estimate first month of the quarter\n  quarter_dates = {'Q1': '1', 'Q2': '4', 'Q3': '7', 'Q4': '10'}\n  try:\n    table = web.fetch_and_extract_table(page_url,\n                                        tag='table',\n                                        class_name='gke-release-schedule')\n\n    # Function to parse a date string or return None for 'N/A'\n    def parse_date(date_str) -> Optional[datetime.date]:\n      p = r'(?P<year>\\d{4})-(?:(?P<quarter>Q[1-4])|(?P<month>[0-9]{1,2}))(?:-(?P<day>[0-9]{1,2}))?'\n      match = re.search(p, date_str)\n      # Handle incomplete dates in 'YYYY-MM' form\n      if match and match.group('month') and not match.group('day'):\n        return datetime.date.fromisoformat(f'{date_str}-15')\n      # Handle quarter year (for example, 2025-Q3) approximations that are updated when known.\n      # https://cloud.google.com/kubernetes-engine/docs/release-schedule.md#fn6\n      if match and match.group('quarter') and not match.group('day'):\n        date_str = f\"{match.group('year')}-{quarter_dates[match.group('quarter')]}-01\"\n        return datetime.date.fromisoformat(date_str)\n      if match and match.group('year') and match.group('month') and match.group(\n          'day'):\n        return datetime.date.fromisoformat(date_str)\n      # anything less like N/A return None\n      return None\n\n    def find_date_str_in_td(e):\n      \"\"\"recursively find a date string in a td\"\"\"\n      if isinstance(e, str):\n        return e\n      if isinstance(e, bs4.element.Tag):\n        return find_date_str_in_td(e.next)\n      return None\n\n    # Find all table rows within tbody\n    rows = table.find('tbody').find_all('tr')\n\n    # Iterate over each row and extract the data\n    for row in rows:\n      # Extract all the columns (td elements)\n      cols = row.find_all('td')\n\n      # Extract relevant data\n\n      minor_version = cols[0].next.strip()\n      rapid_avail = parse_date(find_date_str_in_td(cols[1].next))\n      regular_avail = parse_date(find_date_str_in_td(cols[3].next))\n      stable_avail = parse_date(find_date_str_in_td(cols[5].next))\n      extended_avail = parse_date(find_date_str_in_td(cols[7].next))\n      end_of_standard_support = parse_date(find_date_str_in_td(cols[9].next))\n\n      # Add the extracted data into the dictionary in the desired format\n      release_data[minor_version] = {\n          'rapid_avail': rapid_avail,\n          'regular_avail': regular_avail,\n          'stable_avail': stable_avail,\n          'extended_avail': extended_avail,\n          'eol': end_of_standard_support,\n      }\n    return release_data\n  except (\n      requests.exceptions.RequestException,\n      AttributeError,\n      TypeError,\n      ValueError,\n      IndexError,\n  ) as e:\n    logging.error('Error in extracting gke release schedule: %s', e)\n    return release_data\n"
  },
  {
    "path": "gcpdiag/queries/gke_stub.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Stub API calls used in gke.py for testing.\n\nInstead of doing real API calls, we return test JSON data.\n\"\"\"\n\nimport re\n\nfrom gcpdiag import utils\nfrom gcpdiag.queries import apis_stub\n\n# pylint: disable=unused-argument\n\n\nclass ContainerApiStub(apis_stub.ApiStub):\n  \"\"\"Mock object to simulate container api calls.\"\"\"\n\n  def __init__(self, mock_state='init', region=None):\n    self.mock_state = mock_state\n    self.region = region\n\n  def projects(self):\n    return self\n\n  def locations(self):\n    return self\n\n  def clusters(self):\n    return self\n\n  # pylint: disable=invalid-name\n  def getServerConfig(self, name):\n    project_id = utils.get_project_by_res_name(name)\n    region = utils.get_region_by_res_name(name)\n    return apis_stub.RestCallStub(project_id,\n                                  f'container-server-config-{region}')\n\n  def list(self, parent):\n    m = re.match(r'projects/([^/]+)/', parent)\n    project_id = m.group(1)\n    return apis_stub.RestCallStub(project_id, 'container-clusters')\n\n  def get(self, name):\n    m = re.match(r'projects/([^/]+)/locations/([^/]+)/clusters/([^/]+)', name)\n    project_id = m.group(1)\n    cluster = m.group(3)\n    return apis_stub.RestCallStub(project_id, f'container-cluster-{cluster}')\n"
  },
  {
    "path": "gcpdiag/queries/gke_test.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Test code in gke.py.\"\"\"\n\nimport ipaddress\nimport re\nimport unittest\nfrom unittest import mock\n\nimport pytest\n\nfrom gcpdiag import models\nfrom gcpdiag.queries import apis_stub, gce, gke\nfrom gcpdiag.queries.gke import Version\n\nDUMMY_PROJECT_NAME = 'gcpdiag-gke1-aaaa'\nDUMMY_CLUSTER1_NAME = f'projects/{DUMMY_PROJECT_NAME}/zones/europe-west4-a/clusters/gke1'\nDUMMY_CLUSTER1_LABELS = {'foo': 'bar'}\nDUMMY_CLUSTER2_NAME = f'projects/{DUMMY_PROJECT_NAME}/locations/europe-west4/clusters/gke2'\nDUMMY_CLUSTER2_SHORT_NAME = f'{DUMMY_PROJECT_NAME}/europe-west4/gke2'\nDUMMY_CLUSTER1_SERVICE_ACCOUNT = '12340002-compute@developer.gserviceaccount.com'\nDUMMY_CLUSTER2_SERVICE_ACCOUNT = 'gke2sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com'\nDUMMY_CLUSTER3_NAME = f'projects/{DUMMY_PROJECT_NAME}/locations/europe-west4/clusters/gke3'\nDUMMY_CLUSTER4_NAME = f'projects/{DUMMY_PROJECT_NAME}/zones/europe-west4-a/clusters/gke4'\nDUMMY_CLUSTER6_NAME = f'projects/{DUMMY_PROJECT_NAME}/zones/europe-west4-a/clusters/gke6'\nDUMMY_AUTOPILOT_CLUSTER1_NAME = f'projects/{DUMMY_PROJECT_NAME}/locations/europe-west4/clusters/autopilot-gke1'  # pylint: disable=C0301\nDUMMY_DEFAULT_NAME = 'default'\n\n# pylint: disable=consider-iterating-dictionary\n\n\n@mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)\nclass TestCluster(unittest.TestCase):\n  \"\"\"Test gke.Cluster.\"\"\"\n\n  def test_get_clusters_by_label(self):\n    \"\"\"get_clusters returns the right cluster matched by label.\"\"\"\n    context = models.Context(project_id=DUMMY_PROJECT_NAME,\n                             labels=DUMMY_CLUSTER1_LABELS)\n    clusters = gke.get_clusters(context)\n    assert DUMMY_CLUSTER1_NAME in clusters and len(clusters) == 1\n\n  def test_get_clusters_by_region(self):\n    \"\"\"get_clusters returns the right cluster matched by region.\"\"\"\n    context = models.Context(project_id=DUMMY_PROJECT_NAME,\n                             locations=['europe-west4'])\n    clusters = gke.get_clusters(context)\n    assert DUMMY_CLUSTER1_NAME in clusters and len(clusters) == 7\n\n  def test_cluster_properties(self):\n    \"\"\"verify cluster property methods.\"\"\"\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    clusters = gke.get_clusters(context)\n    c = clusters[DUMMY_CLUSTER1_NAME]\n    assert c.name == 'gke1'\n    assert re.match(r'1\\.\\d+\\.\\d+-gke\\.\\d+', str(c.master_version))\n    assert c.release_channel is None\n    c = clusters[DUMMY_CLUSTER4_NAME]\n    assert c.name == 'gke4'\n    assert c.release_channel == 'REGULAR'\n\n  def test_get_path_regional(self):\n    \"\"\"full_path and short_path should return correct results with regional clusters.\"\"\"\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    clusters = gke.get_clusters(context)\n    assert DUMMY_CLUSTER2_NAME in clusters.keys()\n    c = clusters[DUMMY_CLUSTER2_NAME]\n    assert c.full_path == DUMMY_CLUSTER2_NAME\n    assert str(c) == DUMMY_CLUSTER2_NAME\n    assert c.short_path == DUMMY_CLUSTER2_SHORT_NAME\n\n  def test_has_logging_enabled_false(self):\n    \"\"\"has_logging_enabled should return false for GKE cluster with logging disabled.\"\"\"\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    clusters = gke.get_clusters(context)\n    assert DUMMY_CLUSTER1_NAME in clusters.keys()\n    c = clusters[DUMMY_CLUSTER1_NAME]\n    assert not c.has_logging_enabled()\n\n  def test_has_logging_enabled_true(self):\n    \"\"\"has_logging_enabled should return true for GKE cluster with logging enabled.\"\"\"\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    clusters = gke.get_clusters(context)\n    assert DUMMY_CLUSTER2_NAME in clusters.keys()\n    c = clusters[DUMMY_CLUSTER2_NAME]\n    assert c.has_logging_enabled()\n\n  def test_has_monitoring_enabled_false(self):\n    \"\"\"has_monitoring_enabled should return false for GKE cluster with monitoring disabled.\"\"\"\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    clusters = gke.get_clusters(context)\n    assert DUMMY_CLUSTER1_NAME in clusters.keys()\n    c = clusters[DUMMY_CLUSTER1_NAME]\n    assert not c.has_monitoring_enabled()\n\n  def test_has_monitoring_enabled_true(self):\n    \"\"\"has_monitoring_enabled should return true for GKE cluster with monitoring enabled.\"\"\"\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    clusters = gke.get_clusters(context)\n    assert DUMMY_CLUSTER2_NAME in clusters.keys()\n    c = clusters[DUMMY_CLUSTER2_NAME]\n    assert c.has_monitoring_enabled()\n\n  def test_has_authenticator_group_enabled(self):\n    \"\"\"\"\"has_authenticator_group_enabled should return true for GKE cluster with Groups for RBAC\n    enabled.\"\"\"\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    clusters = gke.get_clusters(context)\n    assert DUMMY_CLUSTER3_NAME in clusters.keys()\n    assert DUMMY_CLUSTER4_NAME in clusters.keys()\n    c = clusters[DUMMY_CLUSTER3_NAME]\n    assert c.has_authenticator_group_enabled()\n    c = clusters[DUMMY_CLUSTER4_NAME]\n    assert not c.has_authenticator_group_enabled()\n\n  def test_cluster_has_workload_identity_enabled(self):\n    \"\"\"has_workload_identity_enabled should return true for GKE cluster with\n    workload identity enabled.\"\"\"\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    clusters = gke.get_clusters(context)\n    c = clusters[DUMMY_CLUSTER1_NAME]\n    assert not c.has_workload_identity_enabled()\n    c = clusters[DUMMY_CLUSTER4_NAME]\n    assert c.has_workload_identity_enabled()\n\n  def test_has_http_load_balancing_enabled(self):\n    \"\"\"has_http_load_balancing_enabled should return true if the GKE cluster has\n    http load balancing enabled\"\"\"\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    clusters = gke.get_clusters(context)\n    c = clusters[DUMMY_CLUSTER1_NAME]\n    assert not c.has_http_load_balancing_enabled()\n    c = clusters[DUMMY_CLUSTER4_NAME]\n    assert c.has_http_load_balancing_enabled()\n\n  def test_has_default_service_account(self):\n    \"\"\"has_default_service_account should return true for GKE node-pools with\n    the default GCE SA.\"\"\"\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    clusters = gke.get_clusters(context)\n    # 'default-pool' has the default SA\n    c = clusters[DUMMY_CLUSTER1_NAME]\n    assert c.nodepools[0].has_default_service_account()\n    # 'default-pool' doesn't have the default SA\n    c = clusters[DUMMY_CLUSTER2_NAME]\n    assert not c.nodepools[0].has_default_service_account()\n\n  def test_pod_ipv4_cidr(self):\n    \"\"\"returns correct pod CIDR\"\"\"\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    clusters = gke.get_clusters(context)\n    # cluster 1\n    c = clusters[DUMMY_CLUSTER1_NAME]\n    assert c.pod_ipv4_cidr.compare_networks(\n        ipaddress.ip_network('192.168.1.0/24')) == 0\n    # cluster 2\n    c = clusters[DUMMY_CLUSTER2_NAME]\n    assert c.pod_ipv4_cidr.compare_networks(\n        ipaddress.ip_network('10.4.0.0/14')) == 0\n\n  def test_current_node_count(self):\n    \"\"\"returns correct number of nodes running\"\"\"\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    clusters = gke.get_clusters(context)\n    # cluster 1\n    c = clusters[DUMMY_CLUSTER1_NAME]\n    assert c.current_node_count == 1\n    # cluster 2\n    c = clusters[DUMMY_CLUSTER2_NAME]\n    assert c.current_node_count == 3\n\n  def test_np_pod_ipv4_cidr_size(self):\n    \"\"\"return correct pod CIDR size per allocated to node pool.\"\"\"\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    clusters = gke.get_clusters(context)\n    # cluster 1\n    c = clusters[DUMMY_CLUSTER1_NAME]\n    assert c.nodepools[0].pod_ipv4_cidr_size == 24\n\n  def test_np_pod_ipv4_cidr_block(self):\n    \"\"\"Get the pod cidr range in use by the nodepool.\"\"\"\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    clusters = gke.get_clusters(context)\n\n    #cluster 1 is vpc-native and has a value set for the nodepool cidr block\n    c = clusters[DUMMY_CLUSTER1_NAME]\n    assert c.nodepools[0].pod_ipv4_cidr_block.compare_networks(\n        ipaddress.ip_network('192.168.1.0/24')) == 0\n\n    c = clusters[DUMMY_CLUSTER2_NAME]\n    assert c.nodepools[0].pod_ipv4_cidr_block is None\n\n  def test_has_md_concealment_enabled(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    clusters = gke.get_clusters(context)\n    c = clusters[DUMMY_CLUSTER1_NAME]\n    assert not c.nodepools[0].has_md_concealment_enabled()\n\n  def test_has_workload_identity_enabled(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    clusters = gke.get_clusters(context)\n    c = clusters[DUMMY_CLUSTER1_NAME]\n    assert not c.nodepools[0].has_workload_identity_enabled()\n\n  def test_has_intra_node_visibility_enabled(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    clusters = gke.get_clusters(context)\n    c = clusters[DUMMY_CLUSTER3_NAME]\n    assert not c.has_intra_node_visibility_enabled()\n    # Abusing an Autopilot cluster here as I cannot recreate the testfiles at the moment\n    c = clusters[DUMMY_AUTOPILOT_CLUSTER1_NAME]\n    assert c.has_intra_node_visibility_enabled()\n\n  def test_no_accelerators(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    clusters = gke.get_clusters(context)\n    c = clusters[DUMMY_CLUSTER1_NAME]\n    assert not c.nodepools[0].config.has_accelerators()\n\n  def test_has_accelerators(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    clusters = gke.get_clusters(context)\n    c = clusters[DUMMY_CLUSTER6_NAME]\n    assert c.nodepools[0].config.has_accelerators()\n\n  def test_no_maintenance_window(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    clusters = gke.get_clusters(context)\n    c = clusters[DUMMY_CLUSTER1_NAME]\n    assert not c.has_maintenance_window()\n\n  def test_maintenance_window(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    clusters = gke.get_clusters(context)\n    c = clusters[DUMMY_CLUSTER6_NAME]\n    assert c.has_maintenance_window()\n\n  def test_nodepool_instance_groups(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    clusters = gke.get_clusters(context)\n    c = clusters[DUMMY_CLUSTER1_NAME]\n    migs = c.nodepools[0].instance_groups\n    assert len(migs) == 1\n    m = next(iter(migs))\n    assert m.is_gke()\n\n  def test_get_node_by_instance_id(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    clusters = gke.get_clusters(context)\n    c = clusters[DUMMY_CLUSTER1_NAME]\n    migs = c.nodepools[0].instance_groups\n    assert len(migs) == 1\n    m = next(iter(migs))\n    found_nodes = 0\n    for i in gce.get_instances(context).values():\n      if m.is_instance_member(m.project_id, m.region, i.name):\n        node = gke.get_node_by_instance_id(context, i.id)\n        assert node.mig == m\n        found_nodes += 1\n    assert found_nodes == 1\n\n  def test_service_account_property(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    clusters = gke.get_clusters(context)\n    # 'default-pool' has the default SA\n    c = clusters[DUMMY_CLUSTER1_NAME]\n    assert c.nodepools[0].service_account == DUMMY_CLUSTER1_SERVICE_ACCOUNT\n    # cluster2 has a custom SA\n    c = clusters[DUMMY_CLUSTER2_NAME]\n    assert c.nodepools[0].service_account == DUMMY_CLUSTER2_SERVICE_ACCOUNT\n\n  def test_masters_cidr_list(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    clusters = gke.get_clusters(context)\n    c = clusters[DUMMY_CLUSTER4_NAME]\n    assert c.masters_cidr_list == [ipaddress.IPv4Network('10.0.1.0/28')]\n\n  def test_cluster_is_private(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    clusters = gke.get_clusters(context)\n    c = clusters[DUMMY_CLUSTER1_NAME]\n    assert not c.is_private\n    c = clusters[DUMMY_CLUSTER4_NAME]\n    assert c.is_private\n\n  def test_cluster_is_vpc_native(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    clusters = gke.get_clusters(context)\n    c = clusters[DUMMY_CLUSTER3_NAME]\n    assert not c.is_vpc_native\n    c = clusters[DUMMY_CLUSTER1_NAME]\n    assert c.is_vpc_native\n\n  def test_cluster_is_regional(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    clusters = gke.get_clusters(context)\n    c = clusters[DUMMY_CLUSTER4_NAME]\n    assert not c.is_regional\n    c = clusters[DUMMY_CLUSTER2_NAME]\n    assert c.is_regional\n\n  def test_cluster_ca_certificate(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    clusters = gke.get_clusters(context)\n    c = clusters[DUMMY_CLUSTER1_NAME]\n    assert c.cluster_ca_certificate == 'REDACTED'\n\n  def test_cluster_endpoint(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    clusters = gke.get_clusters(context)\n    c = clusters[DUMMY_CLUSTER1_NAME]\n    assert c.endpoint == '192.168.1.1'\n\n  def test_node_tag_property(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    clusters = gke.get_clusters(context)\n    c = clusters[DUMMY_CLUSTER1_NAME]\n    assert [t for t in c.nodepools[0].node_tags if t.startswith('gke-gke1-')]\n\n    c = clusters[DUMMY_CLUSTER4_NAME]\n    assert [t for t in c.nodepools[0].node_tags if t.endswith('-node')]\n\n  def test_cluster_hash_property(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    clusters = gke.get_clusters(context)\n    c = clusters[DUMMY_CLUSTER4_NAME]\n    assert re.match('[a-z0-9]+$', c.cluster_hash)\n\n  def test_verify_firewall_rule_exists(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    clusters = gke.get_clusters(context)\n    c = clusters[DUMMY_CLUSTER4_NAME]\n    assert c.network.firewall.verify_ingress_rule_exists(\n        f'gke-gke4-{c.cluster_hash}-master')\n    assert not c.network.firewall.verify_ingress_rule_exists('foobar')\n\n  def test_cluster_network_subnetwork(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    clusters = gke.get_clusters(context)\n    c = clusters[DUMMY_CLUSTER4_NAME]\n    assert DUMMY_DEFAULT_NAME == c.network.name\n    assert DUMMY_DEFAULT_NAME == c.subnetwork.name\n    assert c.subnetwork.ip_network == ipaddress.IPv4Network('10.164.0.0/20')\n\n  def test_cluster_masters_cidr_list(self):\n    # test both public and private clusters, because the code is quite\n    # different for each of them.\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    clusters = gke.get_clusters(context)\n    c = clusters[DUMMY_AUTOPILOT_CLUSTER1_NAME]\n    ips = c.masters_cidr_list\n    assert len(ips) == 3\n    assert isinstance(ips[0], ipaddress.IPv4Network)\n    assert not ips[0].is_private\n    c = clusters[DUMMY_CLUSTER4_NAME]\n    ips = c.masters_cidr_list\n    assert len(ips) == 1\n    assert isinstance(ips[0], ipaddress.IPv4Network)\n    assert ips[0].is_private\n\n  def test_has_network_policy_enabled(self):\n    # test for network policy enabled and disabled\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    clusters = gke.get_clusters(context)\n    c = clusters[DUMMY_CLUSTER1_NAME]\n    assert not c.has_network_policy_enabled()\n\n  def test_has_dpv2_enabled(self):\n    # test for dpv2 enabled\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    clusters = gke.get_clusters(context)\n    c = clusters[DUMMY_CLUSTER2_NAME]\n    assert not c.has_dpv2_enabled()\n    c2 = clusters[DUMMY_AUTOPILOT_CLUSTER1_NAME]\n    assert c2.has_dpv2_enabled()\n\n  def test_is_nodelocal_dnscache_enabled(self):\n    \"\"\"Test the is_nodelocal_dnscache_enabled property.\"\"\"\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    clusters = gke.get_clusters(context)\n\n    c1 = clusters[DUMMY_CLUSTER1_NAME]\n    assert c1.is_nodelocal_dnscache_enabled\n\n    c2 = clusters[DUMMY_CLUSTER2_NAME]\n    assert not c2.is_nodelocal_dnscache_enabled\n\n    c_autopilot = clusters[DUMMY_AUTOPILOT_CLUSTER1_NAME]\n    assert c_autopilot.is_nodelocal_dnscache_enabled\n\n\nclass TestVersion:\n  \"\"\" Test GKE Version class \"\"\"\n\n  def test_init(self):\n    Version('1.19.13-gke.701')\n    self.raises('x.19.13-gke.701')\n    self.raises('.19.13-gke.701')\n    self.raises('1.x.13-gke.701')\n    self.raises('1..13-gke.701')\n    self.raises('x')\n\n  def test_same_major(self):\n    assert Version('1.19.13-gke.701').same_major(Version('1.23.45-six.7'))\n    assert not Version('1.19.13-gke.701').same_major(Version('9.23.45-six.7'))\n\n  def test_diff_minor(self):\n    assert Version('1.19.13-gke.701').diff_minor(Version('1.23.45-six.7')) == 4\n    assert Version('1.19.13-gke.701').diff_minor(Version('1.19.45-six.7')) == 0\n\n  def test_eq_str(self):\n    assert Version('1.19.13-gke.701') == '1.19.13-gke.701'\n    assert Version('1.19.13-gke.701') != '1.19.13-gke.702'\n\n  def test_add_str(self):\n    assert 'the version is: ' + Version('1.19.13-gke.701') == \\\n      'the version is: 1.19.13-gke.701'\n    assert Version('1.19.13-gke.701') + '!' == '1.19.13-gke.701!'\n    with pytest.raises(TypeError):\n      assert Version('1.19.13-gke.701') + 42\n    with pytest.raises(TypeError):\n      assert 42 + Version('1.19.13-gke.701')\n    with pytest.raises(TypeError):\n      assert Version('1.19.13-gke.701') + Version('1.19.13-gke.701')\n\n  def test_eq_version(self):\n    assert Version('1.19.13-gke.701') == Version('1.19.13-gke.701')\n    assert Version('1.19.13-gke.701') != Version('1.19.13-gke.702')\n\n  def test_compare_lt_gt(self):\n    assert Version('1.19.13-gke.701') < Version('2.19.13-gke.701')\n    assert Version('1.19.13-gke.701') < Version('1.20.13-gke.701')\n    assert Version('1.19.13-gke.701') < Version('1.19.14-gke.701')\n\n    assert Version('1.19') < Version('1.19.13-gke.701')\n    assert Version('1.19.13-gke.701') < Version('1.20')\n    assert Version('1') < Version('1.19.13-gke.701')\n    assert Version('1.19.13-gke.701') < Version('2')\n    assert Version('1') < Version('2')\n\n  def raises(self, v):\n    with pytest.raises(Exception):\n      Version(v)\n"
  },
  {
    "path": "gcpdiag/queries/iam.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Queries related to GCP Identity and Access Management.\"\"\"\n\nimport abc\nimport collections\nimport functools\nimport logging\nimport re\nfrom typing import Any, Dict, List, Optional, Tuple, Type\n\nimport googleapiclient\nimport googleapiclient.errors\n\nfrom gcpdiag import caching, config, models, utils\nfrom gcpdiag.queries import apis, apis_utils, crm\n\n\nclass Role(models.Resource):\n  \"\"\"Represents an IAM role\"\"\"\n\n  def __init__(self, resource_data):\n    try:\n      project_id = utils.get_project_by_res_name(resource_data['name'])\n    except ValueError:\n      project_id = None\n\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n\n  @property\n  def name(self) -> str:\n    return self._resource_data['name']\n\n  @property\n  def full_path(self) -> str:\n    return self.name\n\n  @property\n  def permissions(self) -> List[str]:\n    # roles should usually include one or more permissions\n    return self._resource_data.get('includedPermissions', [])\n\n\nclass RoleNotFoundError(Exception):\n  pass\n\n\n# Note: caching is done in get_*_roles because of different caching policies\ndef _fetch_iam_roles(parent: str, api_project_id: str) -> Dict[str, Role]:\n\n  def _make_role(resource_data: Dict[str, Any]) -> Tuple[str, Role]:\n    resource_name = resource_data['name']\n    return resource_name, Role(resource_data)\n\n  logging.info(\"fetching IAM roles of '%s'\", parent)\n  iam_api = apis.get_api('iam', 'v1', api_project_id)\n  if parent.startswith('projects/'):\n    roles_api = iam_api.projects().roles()\n  elif parent.startswith('organizations/'):\n    roles_api = iam_api.organizations().roles()\n  else:\n    roles_api = iam_api.roles()\n  try:\n    res = apis_utils.list_all(roles_api.list(view='FULL', parent=parent),\n                              roles_api.list_next, 'roles')\n  except googleapiclient.errors.HttpError as err:\n    logging.error('failed to list roles: %s', err)\n    raise utils.GcpApiError(err) from err\n\n  return dict(map(_make_role, res))\n\n\n# Cache both in memory and on disk, so that multiple calls during the same\n# gcpdiag execution are very quick, but also results are cached on disk\n# for the next execution. Only caching on disk causes slowness because this method\n# is called multiple times.\n@functools.lru_cache()\n@caching.cached_api_call(expire=config.STATIC_DOCUMENTS_EXPIRY_SECONDS)\ndef _get_predefined_roles(api_project_id: str) -> Dict[str, Role]:\n  return _fetch_iam_roles('', api_project_id)\n\n\n@caching.cached_api_call(expire=config.STATIC_DOCUMENTS_EXPIRY_SECONDS)\ndef _get_predefined_role(name: str, api_project_id: str) -> Role:\n  \"\"\"Returns a predefined role using roles.get\n\n  It should only be used if role is internal and cannot be retrieved using\n  roles.list. For all other roles, _get_predefined_roles should be preferred\n  because of caching efficiency\n  \"\"\"\n  logging.info(\"fetching IAM role '%s'\", name)\n  iam_api = apis.get_api('iam', 'v1', api_project_id)\n  request = iam_api.roles().get(name=name)\n\n  try:\n    response = request.execute(num_retries=config.API_RETRIES)\n  except googleapiclient.errors.HttpError as err:\n    if err.resp.status == 404:\n      raise RoleNotFoundError(f'unknown role: {name}') from err\n    raise utils.GcpApiError(err) from err\n\n  return Role(response)\n\n\n@caching.cached_api_call(in_memory=True)\ndef _get_organization_roles(organization_name: str,\n                            api_project_id: str) -> Dict[str, Role]:\n  return _fetch_iam_roles(organization_name, api_project_id)\n\n\n@caching.cached_api_call(in_memory=True)\ndef _get_project_roles(project_name: str,\n                       api_project_id: str) -> Dict[str, Role]:\n  return _fetch_iam_roles(project_name, api_project_id)\n\n\n@functools.lru_cache()\ndef _get_iam_role(name: str, default_project_id: str) -> Role:\n  m = re.match(r'(.*)(^|/)roles/.*$', name)\n  if not m:\n    raise ValueError(f'invalid role: {name}')\n\n  parent = m.group(1)\n  if parent == '':\n    parent_roles = _get_predefined_roles(default_project_id)\n    if name in parent_roles:\n      return parent_roles[name]\n\n    # IAM roles can be marked as internal and won't be returned by `list`\n    # But they are available using `get` method and can be granted or revoked\n    # using gcloud CLI, so using it as a fallback\n    return _get_predefined_role(name, default_project_id)\n\n  if parent.startswith('projects/'):\n    project_id = utils.get_project_by_res_name(parent)\n    parent_roles = _get_project_roles(parent, project_id)\n  elif parent.startswith('organizations/'):\n    parent_roles = _get_organization_roles(parent, default_project_id)\n  else:\n    raise ValueError(f'invalid role: {name}')\n\n  if name not in parent_roles:\n    raise RoleNotFoundError(f'unknown role: {name}')\n  return parent_roles[name]\n\n\nclass BaseIAMPolicy(models.Resource):\n  \"\"\"Common class for IAM policies\"\"\"\n\n  _name: str\n  _policy_by_member: Dict[str, Any]\n\n  @property\n  def full_path(self):\n    return self._name\n\n  @abc.abstractmethod\n  def _is_resource_permission(self, permission: str) -> bool:\n    \"\"\"Checks that a permission is applicable to the resource\n\n    Any role can be assigned on a resource level but only a subset of\n    permissions will be relevant to a resource\n    Irrelevant permissions are ignored in `has_role_permissions` method\n    \"\"\"\n    pass\n\n  def _expand_policy(self, resource_data: Dict[str, Any]) -> Dict[str, Any]:\n    \"\"\"Groups `getIamPolicy` bindings by member\n\n    API response contains a list of bindings of a role to members:\n    {\n      \"bindings\": [\n      {\n        \"role\": \"roles/resourcemanager.organizationAdmin\",\n        \"members\": [\n          \"user:mike@example.com\",\n          \"serviceAccount:my-project-id@appspot.gserviceaccount.com\"\n        ]\n      },\n      ...\n    }\n\n    This method will convert those bindings into the following structure:\n    {\n      \"user:mike@example.com\": {\n        \"roles\": { \"roles/resourcemanager.organizationAdmin\" },\n      },\n      \"serviceAccount:my-project-id@appspot.gserviceaccount.com\": {\n        \"roles\": { \"roles/resourcemanager.organizationAdmin\" },\n      },\n    }\n    \"\"\"\n\n    policy_roles = set()\n    policy_by_member: Dict[str, Any] = collections.defaultdict(dict)\n\n    # Empty lists are omitted in GCP API responses\n    for binding in resource_data.get('bindings', []):\n      if 'condition' in binding:\n        logging.warning(\n            'IAM binding contains a condition, which would be ignored: %s',\n            binding,\n        )\n\n      # IAM binding should always have a role and at least one member\n      policy_roles.add(binding['role'])\n      for member in binding['members']:\n        member_policy = policy_by_member[member]\n        member_policy.setdefault('roles', set()).add(binding['role'])\n\n    # Populate cache for IAM roles used in the policy\n    # Unlike `has_role_permissions` this part will be executed inside\n    # `prefetch_rule` and will benefit from multi-threading execution\n    for role in policy_roles:\n      # Ignore all errors - there could be no rules involving this role\n      try:\n        _get_iam_role(role, self.project_id)\n      except (RoleNotFoundError, utils.GcpApiError) as err:\n        # Ignore roles if cannot retrieve a role\n        # For example, due to lack of permissions\n        if isinstance(err, utils.GcpApiError):\n          logging.error('API failure getting IAM roles: %s', err)\n          raise utils.GcpApiError(err) from err\n        elif isinstance(err, RoleNotFoundError):\n          logging.warning(\"Unable to get IAM role '%s', ignoring: %s\", role,\n                          err)\n\n    # Populate cache for service accounts used in the policy\n    # Note: not implemented as a generator expression because\n    # it looks ugly without assignment expressions, available\n    # only with Python >= 3.8.\n    sa_emails = set()\n    for member in policy_by_member.keys():\n      # Note: not matching / makes sure that we don't match for example fleet\n      # workload identities:\n      # https://cloud.google.com/anthos/multicluster-management/fleets/workload-identity\n      m = re.match(r'serviceAccount:([^/]+)$', member)\n      if m:\n        sa_emails.add(m.group(1))\n    _batch_fetch_service_accounts(list(sa_emails), self.context)\n\n    return policy_by_member\n\n  def _expand_member_policy(self, member: str):\n    \"\"\"Expands member roles into set of permissions\n\n    Permissions are using \"lazy\" initialization and only expanded if needed\n    \"\"\"\n    member_policy = self._policy_by_member.get(member)\n    if not member_policy or 'permissions' in member_policy:\n      return\n\n    permissions = set()\n    for role in member_policy['roles']:\n      try:\n        permissions.update(_get_iam_role(role, self.project_id).permissions)\n      except (RoleNotFoundError, utils.GcpApiError) as err:\n        if isinstance(err, utils.GcpApiError):\n          logging.error('API failure getting IAM roles: %s', err)\n          raise utils.GcpApiError(err) from err\n        elif isinstance(err, RoleNotFoundError):\n          logging.warning(\"Unable to find IAM role '%s', ignoring: %s\", role,\n                          err)\n    member_policy['permissions'] = permissions\n\n  def _is_active_member(self, member: str) -> bool:\n    \"\"\"Checks that the member isn't disabled\n\n    Currently supports only service accounts and not other account types\n    Used in `has_role_permissions` and similar methods to ensure that\n    the member isn't disabled and permissions are effectively working\n    \"\"\"\n\n    # If this is a service account, make sure that the service account is enabled.\n    # Note: not matching / makes sure that we don't match for example fleet\n    # workload identities:\n    # https://cloud.google.com/anthos/multicluster-management/fleets/workload-identity\n    m = re.match(r'serviceAccount:([^/]+)$', member)\n    if m:\n      if not is_service_account_enabled(m.group(1), self.context):\n        logging.info('service account %s is disabled', m.group(1))\n        return False\n\n    return True\n\n  def __init__(self, project_id: Optional[str], name: str,\n               resource_data: Dict[str, Any], context: models.Context):\n    super().__init__(project_id)\n    self._name = name\n    self.context = context\n    self._policy_by_member = self._expand_policy(resource_data)\n\n  def get_member_permissions(self, member: str) -> List[str]:\n    \"\"\"Return permissions for a member (either a user or serviceAccount).\n\n    The \"member\" can be a user or a service account and must be specified with\n    the IAM member syntax, i.e. using the prefixes `user:` or `serviceAccount:`.\n    \"\"\"\n\n    if member not in self._policy_by_member:\n      return []\n\n    self._expand_member_policy(member)\n    return sorted(self._policy_by_member[member]['permissions'])\n\n  def get_members(self) -> List[str]:\n    \"\"\"Returns the IAM members of the project.\n\n    The \"member\" can be a user or a service account and is specified with\n    the IAM member syntax, i.e. using the prefixes `user:` or `serviceAccount:`.\n    \"\"\"\n    return list(self._policy_by_member.keys())\n\n  def get_member_type(self, member) -> Optional[str]:\n    \"\"\"Returns the IAM members of the project.\n\n    The \"member\" can be a user or a service account and is specified with\n    the IAM member syntax, i.e. using the prefixes `user:` or `serviceAccount:`.\n    \"\"\"\n    for m in self._policy_by_member.keys():\n      parts = m.split(':')\n      if member == parts[1]:\n        return parts[0]\n    return None\n\n  def has_permission(self, member: str, permission: str) -> bool:\n    \"\"\"Return true if user or service account member has this permission.\n\n    Note that any indirect bindings, for example through group membership,\n    aren't supported and only direct bindings to this member are checked\n    \"\"\"\n\n    if member not in self._policy_by_member:\n      return False\n\n    self._expand_member_policy(member)\n    if permission not in self._policy_by_member[member]['permissions']:\n      return False\n    return self._is_active_member(member)\n\n  def has_any_permission(self, member: str, permission: set[str]) -> bool:\n    \"\"\"Return true if user or service account member has any of these permission.\n\n    Note that any indirect bindings, for example through group membership,\n    aren't supported and only direct bindings to this member are checked\n    \"\"\"\n\n    if member not in self._policy_by_member:\n      return False\n\n    self._expand_member_policy(member)\n    if any(\n        p in self._policy_by_member[member]['permissions'] for p in permission):\n      return True\n    return self._is_active_member(member)\n\n  def _has_role(self, member: str, role: str) -> bool:\n    \"\"\"Checks that the member has this role\n\n    It performs exact match and doesn't expand role to list of permissions.\n    Note that this method is not public because users of this module should\n    use has_role_permissions(), i.e. verify effective permissions instead of\n    roles.\n    \"\"\"\n\n    if member not in self._policy_by_member:\n      return False\n\n    if role not in self._policy_by_member[member]['roles']:\n      return False\n    return self._is_active_member(member)\n\n  def has_role_permissions(self, member: str, role: str) -> bool:\n    \"\"\"Checks that this member has all the permissions defined by this role\"\"\"\n\n    if member not in self._policy_by_member:\n      return False\n\n    # Avoid expanding roles to permissions\n    if self._has_role(member, role):\n      # member status was already checked in `has_role`\n      return True\n\n    self._expand_member_policy(member)\n    role_permissions = {\n        p for p in _get_iam_role(role, self.project_id).permissions\n        if self._is_resource_permission(p)\n    }\n\n    missing_roles = (role_permissions -\n                     self._policy_by_member[member]['permissions'])\n    if missing_roles:\n      logging.debug(\n          \"member '%s' doesn't have permissions %s\",\n          member,\n          ','.join(missing_roles),\n      )\n      return False\n    return self._is_active_member(member)\n\n\ndef fetch_iam_policy(\n    request,\n    resource_class: Type[BaseIAMPolicy],\n    project_id: Optional[str],\n    name: str,\n    context: models.Context,\n    raise_error_if_fails=True,\n):\n  \"\"\"Executes `getIamPolicy` request and converts into a resource class\n\n  Supposed to be used by `get_*_policy` functions in gcpdiag.queries.* and\n  requires an API request, which can be executed, to be passed in parameters\n\n  An abstract policy request should look like:\n    class ResourcePolicy(BaseIAMPolicy):\n      pass\n\n    def get_resource_policy(name):\n      api_request = get_api(..).resources().get(name=name)\n      ...\n      return fetch_iam_policy(api_request, ResourcePolicy, project_id, name)\n\n  Note: API calls aren't cached and it should be done externally\n  \"\"\"\n\n  logging.info(\"fetching IAM policy of '%s'\", name)\n  try:\n    response = request.execute(num_retries=config.API_RETRIES)\n  except googleapiclient.errors.HttpError as err:\n    if raise_error_if_fails:\n      raise utils.GcpApiError(err) from err\n    else:\n      return\n  return resource_class(project_id, name, response, context)\n\n\nclass ProjectPolicy(BaseIAMPolicy):\n  \"\"\"Represents the IAM policy of a single project.\n\n  Note that you should use the get_project_policy() method so that the\n  objects are cached and you don't re-fetch the project policy.\n\n  See also the API documentation:\n  https://cloud.google.com/resource-manager/reference/rest/v1/projects/getIamPolicy\n  \"\"\"\n\n  def _is_resource_permission(self, permission: str) -> bool:\n    # Filter out permissions that can be granted only on organization or folders\n    # It also excludes some permissions that aren't supported in custom roles\n    #\n    # https://cloud.google.com/resource-manager/docs/access-control-proj#permissions\n    # https://cloud.google.com/monitoring/access-control#custom_roles\n    if permission.startswith('resourcemanager.projects.'\n                            ) or permission.startswith('stackdriver.projects.'):\n      return False\n    return True\n\n\n@caching.cached_api_call(in_memory=True)\ndef get_project_policy(context: models.Context,\n                       raise_error_if_fails=True) -> ProjectPolicy:\n  \"\"\"Return the ProjectPolicy object for a project, caching the result.\"\"\"\n  project_id = context.project_id\n  resource_name = f'projects/{project_id}'\n\n  crm_api = apis.get_api('cloudresourcemanager', 'v3', project_id)\n  request = crm_api.projects().getIamPolicy(resource='projects/' + project_id)\n  return fetch_iam_policy(request, ProjectPolicy, project_id, resource_name,\n                          context, raise_error_if_fails)\n\n\nclass OrganizationPolicy(BaseIAMPolicy):\n  \"\"\"Represents the IAM policy of a single organization using v1 API.\n\n  See also the API documentation:\n  https://cloud.google.com/resource-manager/reference/rest/v1/organizations/getIamPolicy\n  \"\"\"\n\n  def _is_resource_permission(self, permission: str) -> bool:\n    # Filter out permissions that can be granted only on projects or folders\n    if permission.startswith(\n        'resourcemanager.projects.') or permission.startswith(\n            'resourcemanager.folders.'):\n      return False\n    return True\n\n\n@caching.cached_api_call(in_memory=True)\ndef get_organization_policy(context: models.Context,\n                            organization_id: str,\n                            raise_error_if_fails=True) -> OrganizationPolicy:\n  \"\"\"Return the OrganizationPolicy object for an organization, caching the result.\"\"\"\n\n  resource_name = f'organizations/{organization_id}'\n\n  crm_api = apis.get_api('cloudresourcemanager', 'v1')\n  request = crm_api.organizations().getIamPolicy(resource=resource_name)\n  return fetch_iam_policy(request, OrganizationPolicy, None, resource_name,\n                          context, raise_error_if_fails)\n\n\nclass ServiceAccount(models.Resource):\n  \"\"\"Class represents the service account.\n\n  Add more fields as needed from the declaration:\n  https://cloud.google.com/iam/docs/reference/rest/v1/projects.serviceAccounts#ServiceAccount\n  \"\"\"\n\n  _resource_data: dict\n\n  def __init__(self, project_id, resource_data):\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n\n  @property\n  def name(self) -> str:\n    return self._resource_data['name']\n\n  @property\n  def email(self) -> str:\n    return self._resource_data['email']\n\n  @property\n  def unique_id(self) -> str:\n    return self._resource_data['uniqueId']\n\n  @property\n  def disabled(self) -> bool:\n    return self._resource_data.get('disabled', False)\n\n  @property\n  def full_path(self) -> str:\n    # example: \"name\":\n    # \"projects/skanzhelev-gke-dev/serviceAccounts/test-service-account-1\n    #                               @skanzhelev-gke-dev.iam.gserviceaccount.com\"\n    return self.name\n\n  @property\n  def short_path(self) -> str:\n    path = self.full_path\n    path = re.sub(r'^projects/', '', path)\n    path = re.sub(r'/serviceAccounts/', '/', path)\n    return path\n\n\nSERVICE_AGENT_DOMAINS = (\n    # https://cloud.google.com/iam/docs/service-accounts\n    'cloudservices.gserviceaccount.com',\n    # https://cloud.google.com/iam/docs/service-agents\n    'cloudbuild.gserviceaccount.com',\n    'cloudcomposer-accounts.iam.gserviceaccount.com',\n    'cloud-filer.iam.gserviceaccount.com',\n    'cloud-memcache-sa.iam.gserviceaccount.com',\n    'cloud-ml.google.com.iam.gserviceaccount.com',\n    'cloud-redis.iam.gserviceaccount.com',\n    'cloud-tpu.iam.gserviceaccount.com',\n    'compute-system.iam.gserviceaccount.com',\n    'container-analysis.iam.gserviceaccount.com',\n    'container-engine-robot.iam.gserviceaccount.com',\n    'containerregistry.iam.gserviceaccount.com',\n    'dataflow-service-producer-prod.iam.gserviceaccount.com',\n    'dataproc-accounts.iam.gserviceaccount.com',\n    'dlp-api.iam.gserviceaccount.com',\n    'endpoints-portal.iam.gserviceaccount.com',\n    'firebase-rules.iam.gserviceaccount.com',\n    'gae-api-prod.google.com.iam.gserviceaccount.com',\n    'gcf-admin-robot.iam.gserviceaccount.com',\n    'gcp-gae-service.iam.gserviceaccount.com',\n    # gcp-sa-*.iam.gserviceaccount.com included with a separate matching condition\n    'genomics-api.google.com.iam.gserviceaccount.com',\n    'remotebuildexecution.iam.gserviceaccount.com',\n    'serverless-robot-prod.iam.gserviceaccount.com',\n    'service-consumer-management.iam.gserviceaccount.com',\n    'service-networking.iam.gserviceaccount.com',\n    'sourcerepo-service-accounts.iam.gserviceaccount.com',\n    # https://firebase.google.com/support/guides/service-accounts\n    'appspot.gserviceaccount.com',\n    'cloudservices.gserviceaccount.com',\n    'crashlytics-bigquery-prod.iam.gserviceaccount.com',\n    'fcm-bq-export-prod.iam.gserviceaccount.com',\n    'firebase-sa-management.iam.gserviceaccount.com',\n    'performance-bq-export-prod.iam.gserviceaccount.com',\n    'predictions-bq-export-prod.iam.gserviceaccount.com',\n    'system.gserviceaccount.com',\n)\n\nDEFAULT_SERVICE_ACCOUNT_DOMAINS = (\n    'appspot.gserviceaccount.com',\n    'developer.gserviceaccount.com',\n)\n\n# The main reason to have two dicts instead of using for example None as value,\n# is that it works better for static typing (i.e. avoiding Optional[]).\n_service_account_cache: Dict[str, ServiceAccount] = {}\n_service_account_cache_fetched: Dict[str, bool] = {}\n_service_account_cache_is_not_found: Dict[str, bool] = {}\n\n\ndef _batch_fetch_service_accounts(emails: List[str], context: models.Context):\n  \"\"\"Retrieve a list of service accounts.\n\n  This function is used when inspecting a project, to retrieve all service\n  accounts\n  that are used in the IAM policy, so that we can do this in a single batch\n  request.\n  The goal is to be able to call is_service_account_enabled() without triggering\n  another API call.\n\n  `project_id` is used primarily as the default billing project. Service\n  accounts from other projects in `emails` will be also retrieved.\n  \"\"\"\n  billing_project_id = context.project_id\n  iam_api = apis.get_api('iam', 'v1', billing_project_id)\n  service_accounts_api = iam_api.projects().serviceAccounts()\n\n  requests = [\n      service_accounts_api.get(\n          name=f'projects/{_extract_project_id(email)}/serviceAccounts/{email}')\n      for email in emails\n      if email not in _service_account_cache_fetched\n  ]\n  for email in emails:\n    _service_account_cache_fetched[email] = True\n\n  if not requests:\n    return\n\n  results_iterator = apis_utils.execute_concurrently(api=iam_api,\n                                                     requests=requests,\n                                                     context=context)\n\n  for request, response, exception in results_iterator:\n\n    if response:\n      sa = ServiceAccount(response['projectId'], response)\n      _service_account_cache[sa.email] = sa\n      continue\n\n    if not exception:\n      logging.warning('BUG: no response and no exception for SA')\n      continue\n\n    if isinstance(exception, utils.GcpApiError):\n      status = exception.status\n    elif isinstance(exception, googleapiclient.errors.HttpError):\n      status = exception.resp.status\n    else:\n      raise exception\n\n    # Extract the requested service account and its associated project ID\n    # from the URI. This is especially useful when dealing with scenarios\n    #  involving cross-project service accounts within a project.\n    m = re.search(r'/projects/([^/]+)/[^/]+/([^?]+@[^?]+)', request.uri)\n    if not m:\n      logging.warning(\"BUG: can't determine SA email from request URI: %s\",\n                      request.uri)\n      continue\n\n    sa_project_id = m.group(1)\n    email = m.group(2)\n\n    # 403 or 404 is expected for Google-managed service agents.\n    if email.partition('@')[2] in SERVICE_AGENT_DOMAINS or email.partition(\n        '@')[2].startswith('gcp-sa-'):\n      # Too noisy even for debug-level\n      # logging.debug(\n      # 'ignoring error retrieving google-managed service agent %s: %s', email,\n      # exception)\n      pass\n    elif status == 404:\n      _service_account_cache_is_not_found[email] = True\n    else:\n      # Determine if the failing service account belongs to a different project.\n      # Retrieving service account details may fail due to various conditions.\n      if sa_project_id != billing_project_id:\n        logging.warning(\n            \"Can't retrieve service account associated with one project but\"\n            ' used in another project')\n        _service_account_cache_is_not_found[email] = True\n        continue\n\n      project_nr = crm.get_project(sa_project_id).number\n      if ((sa_project_id == billing_project_id) and\n          re.match(rf'{project_nr}-\\w+@', email) or\n          email.endswith(f'@{billing_project_id}.iam.gserviceaccount.com')):\n        # if retrieving service accounts from the project being inspected fails,\n        # we need to fail hard because many rules won't work correctly.\n        raise utils.GcpApiError(exception) from exception\n      else:\n        logging.warning(\"can't get service account %s: %s\", email, exception)\n\n\ndef _extract_project_id(email: str):\n  if email in _service_account_cache:\n    return _service_account_cache[email].project_id\n\n  if email.endswith('.iam.gserviceaccount.com') and not (\n      email.startswith('service-') or\n      email.split('@')[1].startswith('gcp-sa-')):\n    project_id = re.split(r'[@ .]', email)[1]\n    return project_id\n    # extract project number from service agents and compute default SA\n  elif (email.partition('@')[2] in SERVICE_AGENT_DOMAINS or\n        email.partition('@')[2].startswith('gcp-sa-') or\n        email.endswith(DEFAULT_SERVICE_ACCOUNT_DOMAINS[1])):\n    # AppEngine Default SA is unique\n    if email.endswith(DEFAULT_SERVICE_ACCOUNT_DOMAINS[0]):\n      return email.partition('@')[0]\n\n    m = re.search(r'[\\d]+', email.partition('@')[0])\n    if m and (m.group(0) is not None):\n      try:\n        project_id = crm.get_project(m.group(0)).id\n      except utils.GcpApiError:\n        # Default to using '-' wildcard to infer the project.\n        # - wildcard character is unreliable and should be used as last resort\n        # because it can cause response codes to contain misleading error codes\n        # such as 403 for deleted service accounts instead of returning 404\n        # https://cloud.google.com/iam/docs/reference/rest/v1/projects.serviceAccounts/get\n        logging.warning(\n            'Using \"-\" wildcard to infer host project for service account: %s. '\n            'Rules which rely on method: projects.serviceAccounts.get to'\n            ' determine '\n            'disabled vrs deleted status of %s may produce misleading results. '\n            'See: https://cloud.google.com/iam/docs/reference/rest/v1/projects.serviceAccounts/get',\n            email,\n            email,\n        )\n        return '-'\n      else:\n        return project_id\n  else:\n    logging.warning(\n        'Using \"-\" wildcard to infer host project for service account: %s. '\n        'Rules which rely on method: projects.serviceAccounts.get to determine '\n        'disabled vrs deleted status of %s may produce misleading results. '\n        'See: https://cloud.google.com/iam/docs/reference/rest/v1/projects.serviceAccounts/get',\n        email,\n        email,\n    )\n    return '-'\n\n\ndef is_service_account_existing(email: str, context: models.Context) -> bool:\n  \"\"\"Verify that a service account exists.\n\n  If we get a non-404 API error when retrieving the service account, we will\n  assume\n  that the service account exists, not to throw false positives (but\n  a warning will be printed out).\n  \"\"\"\n  # Make sure that the service account is fetched (this is also\n  # called by get_project_policy).\n  _batch_fetch_service_accounts([email], context)\n  return email not in _service_account_cache_is_not_found\n\n\ndef is_service_account_enabled(email: str, context: models.Context) -> bool:\n  \"\"\"Verify that a service account exists and is enabled.\n\n  If we get an API error when retrieving the service account, we will assume\n  that the service account is enabled, not to throw false positives (but\n  a warning will be printed out).\n  \"\"\"\n  _batch_fetch_service_accounts([email], context)\n  return (email not in _service_account_cache_is_not_found\n         ) and not (email in _service_account_cache and\n                    _service_account_cache[email].disabled)\n\n\nclass ServiceAccountIAMPolicy(BaseIAMPolicy):\n\n  def _is_resource_permission(self, permission):\n    return True\n\n\n@caching.cached_api_call(in_memory=True)\ndef get_service_account_iam_policy(\n    context: models.Context, service_account: str) -> ServiceAccountIAMPolicy:\n  \"\"\"Returns an IAM policy for a service account\"\"\"\n  project_id = context.project_id\n  resource_name = f'projects/{project_id}/serviceAccounts/{service_account}'\n\n  iam_api = apis.get_api('iam', 'v1', project_id)\n  request = (iam_api.projects().serviceAccounts().getIamPolicy(\n      resource=resource_name))\n  return fetch_iam_policy(request, ServiceAccountIAMPolicy, project_id,\n                          resource_name, context)\n\n\n@caching.cached_api_call(in_memory=True)\ndef get_service_account_list(project_id: str) -> List[ServiceAccount]:\n  \"\"\"Returns list of service accounts\"\"\"\n\n  iam_api = apis.get_api('iam', 'v1', project_id)\n  project_name = f'projects/{project_id}'\n  request = iam_api.projects().serviceAccounts().list(name=project_name,\n                                                      pageSize=100)\n  try:\n    response = request.execute(num_retries=config.API_RETRIES)\n  except googleapiclient.errors.HttpError as err:\n    raise utils.GcpApiError(err) from err\n  return [\n      ServiceAccount(project_id, service_account)\n      for service_account in response.get('accounts', [])\n  ]\n"
  },
  {
    "path": "gcpdiag/queries/iam_stub.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Stub API calls used in iam.py for testing.\n\nInstead of doing real API calls, we return test JSON data.\n\"\"\"\n\nimport gzip\nimport json\nimport pathlib\nimport re\nfrom typing import Optional\n\nimport googleapiclient.errors\nimport httplib2\n\nfrom gcpdiag.queries import apis_stub\n\n# pylint: disable=unused-argument\n# pylint: disable=invalid-name\n\nPREFIX_GKE1 = pathlib.Path(__file__).parents[2] / 'test-data/gke1/json-dumps'\n\n\nclass IamApiStub:\n  \"\"\"Mock object to simulate IAM API calls.\"\"\"\n\n  # example API call: iam_api.projects().roles().list().execute()\n\n  def __init__(self,\n               api_project_id: Optional[str] = None,\n               mock_state='init',\n               argument=None):\n    # project_id cannot be easily extracted from a service account name and can\n    # contain a project id / number in different places, for example:\n    #   SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com\n    #   PROJECT_NUMBER-compute@developer.gserviceaccount.com\n    #   service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com\n    #   PROJECT_NUMBER@cloudservices.gserviceaccount.com\n    # keeping api_project_id to map those requests to the correct json dumps\n    self.api_project_id = api_project_id\n    self.mock_state = mock_state\n    self.project_id = None\n    self.argument = argument\n\n  def new_batch_http_request(self, callback=None):\n    if callback:\n      return apis_stub.BatchRequestStub(callback)\n    else:\n      return apis_stub.BatchRequestStub()\n\n  def projects(self):\n    return IamApiStub(self.api_project_id, 'projects')\n\n  def serviceAccounts(self):\n    return IamApiStub(self.api_project_id, 'serviceaccounts')\n\n  def get(self, name):\n    if self.mock_state == 'serviceaccounts':\n      m = re.match(r'projects/[^/]+/serviceAccounts/(.*)', name)\n      return IamApiStub(self.api_project_id, 'serviceaccounts_get', m.group(1))\n    elif self.mock_state == 'roles':\n      # roles.get is only used for predefined roles, skip extracting project_id\n      return IamApiStub(self.api_project_id, 'roles_get', name)\n    else:\n      raise ValueError(\"can't call this method here (mock_state: %s)\" %\n                       self.mock_state)\n\n  def getIamPolicy(self, resource):\n    if self.mock_state == 'serviceaccounts':\n      m = re.match(r'projects/[^/]+/serviceAccounts/(.*)', resource)\n      return IamApiStub(self.api_project_id, 'serviceaccounts_getIamPolicy',\n                        m.group(1))\n    else:\n      raise ValueError(\"can't call this method here (mock_state: %s)\" %\n                       self.mock_state)\n\n  def roles(self):\n    if self.mock_state == 'init':\n      return IamApiStub(self.api_project_id, 'roles')\n    elif self.mock_state == 'projects':\n      return IamApiStub(self.api_project_id, 'project_roles')\n    else:\n      raise ValueError(\"can't call this method here (mock_state: %s)\" %\n                       self.mock_state)\n\n  # def list(self, parent, view):\n  #  self.list_page = 1\n  #  m = re.match(r'projects/([^/]+)', parent)\n  #  if m:\n  #    self.project_id = m.group(1)\n  #  return self\n  def list(self, **args):\n    if 'parent' in args:\n      self.list_page = 1\n      m = re.match(r'projects/([^/]+)', args['parent'])\n      if m:\n        self.project_id = m.group(1)\n      return self\n    if self.mock_state == 'serviceaccounts':\n      m = re.match(r'projects/([^/]+)', args['name'])\n      self.project_id = m.group(1)\n      return self\n\n  def list_next(self, previous_request, previous_response):\n    self.list_page += 1\n    if self.list_page >= 3:\n      return None\n    return self\n\n  @property\n  def uri(self):\n    return f'https://iam.googleapis.com/v1/projects/-/serviceAccounts/{self.argument}?alt=json'\n\n  def execute(self, num_retries=0):\n    if self.mock_state == 'roles':\n      # Predefined roles don't depend on a project, always using dump in `gke1`\n      json_dir = PREFIX_GKE1\n    elif self.project_id:\n      json_dir = apis_stub.get_json_dir(self.project_id)\n    elif self.api_project_id:\n      json_dir = apis_stub.get_json_dir(self.api_project_id)\n    else:\n      json_dir = PREFIX_GKE1\n\n    if self.mock_state == 'serviceaccounts_get':\n      service_accounts_filename = json_dir / 'iam-service-accounts.json'\n      with open(service_accounts_filename, encoding='utf-8') as json_file:\n        service_accounts_data = json.load(json_file)\n        service_accounts = {\n            sa['email']: sa for sa in service_accounts_data['accounts']\n        }\n        if self.argument in service_accounts:\n          return service_accounts[self.argument]\n        else:\n          raise googleapiclient.errors.HttpError(\n              httplib2.Response({'status': 404}), b'not found')\n    elif self.mock_state == 'serviceaccounts_getIamPolicy':\n      json_filename = json_dir / 'iam-service-account-policy.json'\n      with open(json_filename, encoding='utf-8') as json_file:\n        return json.load(json_file)\n    elif self.mock_state == 'serviceaccounts':\n      json_filename = json_dir / 'iam-service-accounts.json'\n      with open(json_filename, encoding='utf-8') as json_file:\n        return json.load(json_file)\n    elif self.mock_state == 'roles_get':\n      json_filename = json_dir / 'iam-roles-get.json'\n      with open(json_filename, encoding='utf-8') as json_file:\n        roles_data = json.load(json_file)\n        roles = {role['name']: role for role in roles_data['roles']}\n        if self.argument in roles:\n          return roles[self.argument]\n        else:\n          raise googleapiclient.errors.HttpError(\n              httplib2.Response({'status': 404}), b'not found')\n    else:\n      if self.mock_state == 'roles':\n        json_filename = json_dir / f'iam-roles-predefined-{self.list_page}.json.gz'\n      elif self.mock_state == 'project_roles':\n        json_filename = json_dir / 'iam-roles-custom.json'\n      else:\n        raise ValueError(\"can't call this method here (mock_state: %s)\" %\n                         self.mock_state)\n\n      if json_filename.suffix == '.gz':\n        with gzip.open(json_filename) as json_file:\n          return json.load(json_file)\n      else:\n        with open(json_filename, encoding='utf-8') as json_file:\n          return json.load(json_file)\n"
  },
  {
    "path": "gcpdiag/queries/iam_test.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Test code in iam.py.\"\"\"\n\nfrom unittest import mock\n\nimport diskcache\nimport pytest\n\nfrom gcpdiag import models\nfrom gcpdiag.queries import apis_stub, iam\n\n\ndef get_cache_stub():\n  \"\"\"Use a temporary directory instead of the user cache for testing.\n  This is used to avoid using the cached IAM roles from the disk cache.\"\"\"\n  return diskcache.Cache()\n\n\nTEST_PROJECT_ID = 'gcpdiag-gke1-aaaa'\nTEST_PROJECT_IAM_ID = 'gcpdiag-iam1-aaaa'\nTEST_SERVICE_ACCOUNT = 'gke2sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com'\nTEST_SERVICE_ACCOUNT_ROLE = 'projects/gcpdiag-gke1-aaaa/roles/gke2_custom_role'\nTEST_SERVICE_ACCOUNT_PERMISSIONS = [\n    'autoscaling.sites.writeMetrics',\n    'cloudnotifications.activities.list',\n    'logging.logEntries.create',\n    'monitoring.alertPolicies.get',\n    'monitoring.alertPolicies.list',\n    'monitoring.dashboards.get',\n    'monitoring.dashboards.list',\n    'monitoring.groups.get',\n    'monitoring.groups.list',\n    'monitoring.metricDescriptors.create',\n    'monitoring.metricDescriptors.get',\n    'monitoring.metricDescriptors.list',\n    'monitoring.monitoredResourceDescriptors.get',\n    'monitoring.monitoredResourceDescriptors.list',\n    'monitoring.notificationChannelDescriptors.get',\n    'monitoring.notificationChannelDescriptors.list',\n    'monitoring.notificationChannels.get',\n    'monitoring.notificationChannels.list',\n    'monitoring.publicWidgets.get',\n    'monitoring.publicWidgets.list',\n    'monitoring.services.get',\n    'monitoring.services.list',\n    'monitoring.slos.get',\n    'monitoring.slos.list',\n    'monitoring.timeSeries.create',\n    'monitoring.timeSeries.list',\n    'monitoring.uptimeCheckConfigs.get',\n    'monitoring.uptimeCheckConfigs.list',\n    'opsconfigmonitoring.resourceMetadata.list',\n    'stackdriver.resourceMetadata.write',\n    'storage.objects.get',\n    'storage.objects.list',\n]\n\nTEST_DUMMY_SERVICE_ACCOUNT = {\n    'gke2sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com',  # custom service account\n    'gcpdiag-gke1-aaaa@appspot.gserviceaccount.com',  # GAE Default SA\n    '12340002-compute@developer.gserviceaccount.com',  # GCE Default SA\n    # Sample Service Agent\n    'service-12340002@gcp-sa-aiplatform-cc.iam.gserviceaccount.com',\n    'p12340002-123a@gcp-sa-cloud-sql.iam.gserviceaccount.com'\n}\n\n\n@mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)\n@mock.patch('gcpdiag.caching.get_disk_cache', new=get_cache_stub)\nclass TestProjectPolicy:\n  \"\"\"Test gke.ProjectPolicy\"\"\"\n\n  def test_get_member_permissions(self):\n    context = models.Context(project_id=TEST_PROJECT_ID)\n    policy = iam.get_project_policy(context)\n    assert policy.get_member_permissions(\n        f'serviceAccount:{TEST_SERVICE_ACCOUNT}'\n    ) == TEST_SERVICE_ACCOUNT_PERMISSIONS\n\n  def test_has_permission(self):\n    context = models.Context(project_id=TEST_PROJECT_ID)\n    policy = iam.get_project_policy(context)\n    assert policy.has_permission(f'serviceAccount:{TEST_SERVICE_ACCOUNT}',\n                                 'monitoring.groups.get')\n    assert not policy.has_permission(f'serviceAccount:{TEST_SERVICE_ACCOUNT}',\n                                     'monitoring.groups.create')\n\n  # pylint: disable=protected-access\n  def test_has_role(self):\n    context = models.Context(project_id=TEST_PROJECT_ID)\n    policy = iam.get_project_policy(context)\n    assert policy._has_role(f'serviceAccount:{TEST_SERVICE_ACCOUNT}',\n                            TEST_SERVICE_ACCOUNT_ROLE)\n    assert not policy._has_role(f'serviceAccount:{TEST_SERVICE_ACCOUNT}',\n                                'roles/container.nodeServiceAgent')\n\n  def test_has_role_permissions(self):\n    context = models.Context(project_id=TEST_PROJECT_ID)\n    policy = iam.get_project_policy(context)\n    assert policy.has_role_permissions(f'serviceAccount:{TEST_SERVICE_ACCOUNT}',\n                                       'roles/monitoring.viewer')\n    assert not policy.has_role_permissions(\n        f'serviceAccount:{TEST_SERVICE_ACCOUNT}', 'roles/monitoring.editor')\n\n  def test_missing_role(self):\n    with pytest.raises(iam.RoleNotFoundError):\n      context = models.Context(project_id=TEST_PROJECT_ID)\n      policy = iam.get_project_policy(context)\n      policy.has_role_permissions(f'serviceAccount:{TEST_SERVICE_ACCOUNT}',\n                                  'roles/non-existing-role')\n\n  def test_internal_role(self):\n    context = models.Context(project_id=TEST_PROJECT_ID)\n    policy = iam.get_project_policy(context)\n    policy.has_role_permissions(f'serviceAccount:{TEST_SERVICE_ACCOUNT}',\n                                'roles/container.nodeServiceAgent')\n\n  def test_is_service_acccount_existing(self):\n    context = models.Context(project_id=TEST_PROJECT_ID)\n    assert iam.is_service_account_existing(TEST_SERVICE_ACCOUNT, context)\n\n  def test_is_service_acccount_existing_inexisting(self):\n    context = models.Context(project_id=TEST_PROJECT_ID)\n    assert not iam.is_service_account_existing('foobar@example.com', context)\n\n  def test_is_service_acccount_enabled(self):\n    context = models.Context(project_id=TEST_PROJECT_ID)\n    assert iam.is_service_account_enabled(TEST_SERVICE_ACCOUNT, context)\n\n  def test_service_account_policy(self):\n    context = models.Context(project_id=TEST_PROJECT_ID)\n    policy = iam.get_service_account_iam_policy(context, TEST_SERVICE_ACCOUNT)\n    assert policy.has_role_permissions(f'serviceAccount:{TEST_SERVICE_ACCOUNT}',\n                                       'roles/iam.serviceAccountUser')\n    assert not policy.has_role_permissions(\n        f'serviceAccount:{TEST_SERVICE_ACCOUNT}', 'roles/monitoring.editor')\n\n  def test_project_id_extraction_from_service_account(self):\n    for sa in TEST_DUMMY_SERVICE_ACCOUNT:\n      extracted_project_id = iam._extract_project_id(sa)\n      assert TEST_PROJECT_ID == extracted_project_id\n\n    # Test exceptional case which should return '-' wildcard\n    wild_card = iam._extract_project_id('random-sa@fake-sa-iam-gservice.com')\n    assert wild_card == '-'\n\n  def test_service_account_list(self):\n    service_accounts = iam.get_service_account_list(TEST_PROJECT_IAM_ID)\n    assert len(service_accounts) > 1\n\n    for account in service_accounts:\n      if account.unique_id == '102417873155869406705':\n        assert (account.email ==\n                'demo2sa@gcpdiag-iam1-aaaa.iam.gserviceaccount.com')\n      if account.unique_id == '112819826788395589395':\n        assert account.email == '12340002-compute@developer.gserviceaccount.com'\n      if account.unique_id == '106302102062593675693':\n        assert (\n            account.email == 'demo1@gcpdiag-iam1-aaaa.iam.gserviceaccount.com')\n      if account.unique_id == '104735732736559639086':\n        assert (\n            account.email == 'demo3@gcpdiag-iam1-aaaa.iam.gserviceaccount.com')\n"
  },
  {
    "path": "gcpdiag/queries/interconnect.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Queries related to interconnects.\"\"\"\n\nimport logging\nimport re\nfrom typing import List\n\nfrom gcpdiag import caching, config, models\nfrom gcpdiag.queries import apis\n\nDEFAULT_MTU = 1440\n\n\nclass Interconnect(models.Resource):\n  \"\"\"Represents an Interconnect.\n https://cloud.google.com/compute/docs/reference/rest/v1/interconnects\n \"\"\"\n  _resource_data: dict\n  _ead: str\n  _attachments: List[str]\n\n  def __init__(self, project_id, resource_data):\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n    self._attachments = []\n    self._ead = ''\n\n  @property\n  def name(self) -> str:\n    return self._resource_data['name']\n\n  @property\n  def under_maintenance(self) -> bool:\n    return self._resource_data['state'] == 'UNDER_MAINTENANCE'\n\n  @property\n  def id(self) -> str:\n    return self._resource_data['id']\n\n  @property\n  def full_path(self) -> str:\n    result = re.match(r'https://www.googleapis.com/compute/v1/(.*)',\n                      self.self_link)\n    if result:\n      return result.group(1)\n    else:\n      return f'>> {self.self_link}'\n\n  @property\n  def short_path(self) -> str:\n    path = self.project_id + '/' + self.name\n    return path\n\n  @property\n  def self_link(self) -> str:\n    return self._resource_data['selfLink']\n\n  @property\n  def attachments(self) -> List[str]:\n    if not self._attachments:\n      self._attachments = [\n          x.split('/')[-1]\n          for x in self._resource_data['interconnectAttachments']\n      ]\n    return self._attachments\n\n  @property\n  def ead(self) -> str:\n    if not self._ead:\n      self._ead = self._resource_data['location'].split('/')[-1]\n    return self._ead\n\n  @property\n  def metro(self) -> str:\n    return _metro(self.ead)\n\n\n@caching.cached_api_call(in_memory=True)\ndef get_interconnect(project_id: str, interconnect_name: str) -> Interconnect:\n  logging.debug('fetching interconnect: %s', interconnect_name)\n  compute = apis.get_api('compute', 'v1', project_id)\n  request = compute.interconnects().get(project=project_id,\n                                        interconnect=interconnect_name)\n  response = request.execute(num_retries=config.API_RETRIES)\n  return Interconnect(project_id, response)\n\n\n@caching.cached_api_call(in_memory=True)\ndef get_interconnects(project_id: str) -> List[Interconnect]:\n  logging.info('fetching interconnects')\n  compute = apis.get_api('compute', 'v1', project_id)\n  request = compute.interconnects().list(project=project_id)\n  response = request.execute(num_retries=config.API_RETRIES)\n  return [Interconnect(project_id, link) for link in response]\n\n\n@caching.cached_api_call(in_memory=True)\ndef get_links(project_id: str) -> List[Interconnect]:\n  logging.info('fetching interconnects')\n  compute = apis.get_api('compute', 'v1', project_id)\n  request = compute.interconnects().list(project=project_id)\n  response = request.execute(num_retries=config.API_RETRIES)\n  links = []\n  if isinstance(response, dict):\n    # Handle the case when 'response' is a dictionary\n    links = [\n        Interconnect(project_id, name) for name in response.get('items', [])\n    ]\n  elif isinstance(response, list):\n    # Handle the case when 'response' is a list\n    links = [Interconnect(project_id, name) for name in response]\n  return links\n\n\ndef _metro(ead: str) -> str:\n  return ead.split('-')[0]\n\n\nclass VlanAttachment(models.Resource):\n  \"\"\"Represents an Interconnect.\n https://cloud.google.com/compute/docs/reference/rest/v1/interconnectAttachments\n \"\"\"\n  _resource_data: dict\n  _type: str\n  _interconnect: str\n  _ead: str\n\n  def __init__(self, project_id, resource_data):\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n    self._type = ''\n    self._interconnect = ''\n    self._ead = ''\n\n  @property\n  def name(self) -> str:\n    return self._resource_data['name']\n\n  @property\n  def id(self) -> str:\n    return self._resource_data['id']\n\n  @property\n  def full_path(self) -> str:\n    result = re.match(r'https://www.googleapis.com/compute/v1/(.*)',\n                      self.self_link)\n    if result:\n      return result.group(1)\n    else:\n      return f'>> {self.self_link}'\n\n  @property\n  def short_path(self) -> str:\n    path = self.project_id + '/' + self.name\n    return path\n\n  @property\n  def self_link(self) -> str:\n    return self._resource_data['selfLink']\n\n  @property\n  def type(self) -> str:\n    return self._resource_data['type']\n\n  @property\n  def interconnect(self) -> str:\n    if not self._interconnect:\n      self._interconnect = self._resource_data['interconnect'].split('/')[-1]\n    return self._interconnect\n\n  @property\n  def router(self) -> str:\n    return self._resource_data['router'].split('/')[-1]\n\n  @property\n  def region(self) -> str:\n    return self._resource_data['region'].split('/')[-1]\n\n  @property\n  def mtu(self) -> int:\n    if 'mtu' in self._resource_data:\n      return self._resource_data['mtu']\n    else:\n      return DEFAULT_MTU\n\n  @property\n  def ipv4address(self) -> str:\n    return self._resource_data['cloudRouterIpAddress'].split('/')[0]\n\n  @property\n  def remoteip(self) -> str:\n    return self._resource_data['customerRouterIpAddress'].split('/')[0]\n\n  @property\n  def ead(self) -> str:\n    if not self._ead:\n      interconnect_obj = get_interconnect(self.project_id, self.interconnect)\n      self._ead = interconnect_obj.ead\n    return self._ead\n\n  @property\n  def metro(self) -> str:\n    return _metro(self.ead)\n\n  @property\n  def legacy_dataplane(self) -> bool:\n    if 'dataplaneVersion' not in self._resource_data:\n      self._resource_data['dataplaneVersion'] = {}\n\n    return self._resource_data['dataplaneVersion'] != 2\n\n  @property\n  def defunct_state(self) -> bool:\n    return self._resource_data['state'] == 'DEFUNCT'\n\n\n@caching.cached_api_call(in_memory=True)\ndef get_vlan_attachment(project_id: str, region: str,\n                        vlan_attachment: str) -> VlanAttachment:\n  logging.debug('fetching vlan attachment: %s', vlan_attachment)\n  compute = apis.get_api('compute', 'v1', project_id)\n  request = compute.interconnectAttachments().get(\n      project=project_id, region=region, interconnectAttachment=vlan_attachment)\n  response = request.execute(num_retries=config.API_RETRIES)\n  return VlanAttachment(project_id, response)\n\n\n@caching.cached_api_call(in_memory=True)\ndef get_vlan_attachments(project_id: str) -> List[VlanAttachment]:\n  logging.info('fetching vlan attachments')\n  compute = apis.get_api('compute', 'v1', project_id)\n  attachments = []\n  request = compute.interconnectAttachments().aggregatedList(project=project_id)\n  response = request.execute(num_retries=config.API_RETRIES)\n  attachments_by_regions = response['items']\n  for _, data_ in attachments_by_regions.items():\n    if 'interconnectAttachments' not in data_:\n      continue\n    attachments.extend([\n        VlanAttachment(project_id, va)\n        for va in data_['interconnectAttachments']\n    ])\n  return attachments\n"
  },
  {
    "path": "gcpdiag/queries/interconnect_stub.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Stub API calls used in interconnect.py for testing.\n\nInstead of doing real API calls, we return test JSON data.\n\"\"\"\n\nfrom gcpdiag.queries import apis_stub\n\n# pylint: disable=unused-argument\n# pylint: disable=invalid-name\n\nDUMMY_INTERCONNECTS = 'compute-interconnects'\nDUMMY_ATTACHMENTS = 'interconnect-attachments'\n\n\nclass InterconnectApiStub(apis_stub.ApiStub):\n  \"\"\"Mock object to simulate interconnect api calls.\n\n  This object is created by GceApiStub, not used directly in test scripts.\"\"\"\n\n  def __init__(self, mock_state):\n    self.mock_state = mock_state\n\n  # pylint: disable=redefined-builtin\n  def get(self, project, interconnect):\n    if self.mock_state == 'interconnects':\n      interconnect_data = _find_test_data(interconnect)\n      return apis_stub.RestCallStub(project, interconnect_data)\n    else:\n      raise ValueError(f'cannot call method {self.mock_state} here')\n\n  # pylint: disable=redefined-builtin\n  def list(self, project):\n    if self.mock_state == 'interconnects':\n      return apis_stub.RestCallStub(project, DUMMY_INTERCONNECTS)\n    else:\n      raise ValueError(f'cannot call method {self.mock_state} here')\n\n\ndef _find_test_data(interconnect_name):\n  if interconnect_name.startswith('dummy-'):\n    return interconnect_name.replace('dummy-', 'compute-')\n  return interconnect_name\n\n\nclass VlanAttachmentApiStub(apis_stub.ApiStub):\n  \"\"\"Mock object to simulate interconnect attachment api calls.\n\n  This object is created by GceApiStub, not used directly in test scripts.\"\"\"\n\n  def __init__(self, mock_state):\n    self.mock_state = mock_state\n\n  # pylint: disable=redefined-builtin\n  def get(self, project, region, interconnectAttachment):\n    if self.mock_state == 'vlan_attachment':\n      return apis_stub.RestCallStub(project, interconnectAttachment)\n    else:\n      raise ValueError(f'cannot call method {self.mock_state} here')\n\n  # pylint: disable=redefined-builtin\n  def aggregatedList(self, project):\n    if self.mock_state == 'vlan_attachment':\n      return apis_stub.RestCallStub(project, DUMMY_ATTACHMENTS)\n    else:\n      raise ValueError(f'cannot call method {self.mock_state} here')\n"
  },
  {
    "path": "gcpdiag/queries/interconnect_test.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Test code in interconnect.py.\"\"\"\n\nfrom unittest import mock\n\n# from gcpdiag import models\nfrom gcpdiag.queries import apis_stub, interconnect\n\nDUMMY_PROJECT_ID = 'gcpdiag-gke1-aaaa'\nDUMMY_INTERCONNECT = 'dummy-interconnect1'\nDUMMY_ATTACHMENT = 'dummy-attachment1'\n\n\n@mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)\nclass TestInterconnect:\n  \"\"\"Test Interconnect.\"\"\"\n\n  def test_get_interconnect(self):\n    \"\"\"get interconnect by name.\"\"\"\n    link = interconnect.get_interconnect(project_id=DUMMY_PROJECT_ID,\n                                         interconnect_name=DUMMY_INTERCONNECT)\n    assert link.name == DUMMY_INTERCONNECT\n    assert len(link.attachments) == 2\n    assert link.metro == 'bos'\n\n  def test_get_interconnects(self):\n    \"\"\"get interconnects by project.\"\"\"\n    links = interconnect.get_interconnects(project_id=DUMMY_PROJECT_ID)\n    for link in links:\n      if link.name == DUMMY_INTERCONNECT:\n        assert 'dummy-attachment1' in link.attachments\n        assert 'dummy-attachment2' in link.attachments\n        assert link.ead == 'bos-zone1-219'\n\n      if link.name == 'dummy-interconnect2':\n        assert 'dummy-attachment3' in link.attachments\n        assert 'dummy-attachment4' in link.attachments\n        assert link.ead == 'bos-zone2-219'\n\n      if link.name == 'dummy-interconnect3':\n        assert 'dummy-attachment5' in link.attachments\n        assert link.ead == 'sjc-zone1-6'\n\n      if link.name == 'dummy-interconnect4':\n        assert 'dummy-attachment6' in link.attachments\n        assert link.ead == 'sjc-zone2-6'\n\n  def test_get_vlan_attachment(self):\n    \"\"\"get interconnect by name.\"\"\"\n    attachment = interconnect.get_vlan_attachment(\n        project_id=DUMMY_PROJECT_ID,\n        region='us-east4',\n        vlan_attachment='interconnect-attachment1')\n    assert attachment.name == DUMMY_ATTACHMENT\n    assert attachment.interconnect == DUMMY_INTERCONNECT\n    assert attachment.metro in ['bos', 'sjc']\n    assert attachment.region in ['us-east4', 'us-west2']\n\n  def test_get_vlan_attachments(self):\n    \"\"\"get interconnects by project.\"\"\"\n    attachments = interconnect.get_vlan_attachments(project_id=DUMMY_PROJECT_ID)\n    assert len(attachments) > 2\n\n    for attachment in attachments:\n      if attachment.name == 'dummy-attachment1':\n        assert attachment.interconnect == 'dummy-interconnect1'\n        assert attachment.ead == 'bos-zone1-219'\n        assert attachment.router == 'dummy-router1'\n\n      if attachment.name == 'dummy-attachment2':\n        assert attachment.interconnect == 'dummy-interconnect1'\n        assert attachment.ead == 'bos-zone1-219'\n        assert attachment.router == 'dummy-router1'\n\n      if attachment.name == 'dummy-attachment3':\n        assert attachment.interconnect == 'dummy-interconnect2'\n        assert attachment.ead == 'bos-zone2-219'\n        assert attachment.router == 'dummy-router2'\n\n      if attachment.name == 'dummy-attachment4':\n        assert attachment.interconnect == 'dummy-interconnect2'\n        assert attachment.ead == 'bos-zone2-219'\n        assert attachment.router == 'dummy-router2'\n\n      if attachment.name == 'dummy-attachment5':\n        assert attachment.interconnect == 'dummy-interconnect3'\n        assert attachment.ead == 'sjc-zone1-6'\n        assert attachment.router == 'dummy-router3'\n\n      if attachment.name == 'dummy-attachment6':\n        assert attachment.interconnect == 'dummy-interconnect4'\n        assert attachment.ead == 'sjc-zone2-6'\n        assert attachment.router == 'dummy-router3'\n\n  def test_legacy_dataplane(self):\n    attachments = interconnect.get_vlan_attachments(project_id=DUMMY_PROJECT_ID)\n    for attachment in attachments:\n      if attachment.name == 'dummy-attachment7':\n        assert attachment.legacy_dataplane is True\n      if attachment.name == 'dummy-attachment8':\n        assert attachment.legacy_dataplane is False\n\n  def test_defunct_state(self):\n    attachments = interconnect.get_vlan_attachments(project_id=DUMMY_PROJECT_ID)\n    for attachment in attachments:\n      if attachment.name == 'dummy-attachment9':\n        assert attachment.defunct_state is False\n      if attachment.name == 'dummy-attachment10':\n        assert attachment.defunct_state is True\n\n  def test_under_maintenance(self):\n    links = interconnect.get_links(project_id=DUMMY_PROJECT_ID)\n    for link in links:\n      if link.name == 'dummy-interconnect5':\n        assert link.under_maintenance is True\n\n  def test_get_links(self):\n    links = interconnect.get_links(project_id=DUMMY_PROJECT_ID)\n    assert len(links) > 0\n    for link in links:\n      if link.name == 'dummy-interconnect5':\n        assert link.under_maintenance is True\n\n  def test_ipv4address(self):\n    attachments = interconnect.get_vlan_attachments(\n        'gcpdiag-interconnect1-aaaa')\n    for vlan in attachments:\n      if vlan.name == 'dummy-attachment1':\n        assert vlan.ipv4address == '169.254.1.1'\n      if vlan.name == 'dummy-attachment2':\n        assert vlan.ipv4address == '169.254.2.1'\n      if vlan.name == 'dummy-attachment3':\n        assert vlan.ipv4address == '169.254.3.1'\n      if vlan.name == 'dummy-attachment4':\n        assert vlan.ipv4address == '169.254.4.1'\n"
  },
  {
    "path": "gcpdiag/queries/kms.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Queries related to GCP Cloud Key Management.\"\"\"\n\nimport logging\n\nimport googleapiclient.errors\n\nfrom gcpdiag import caching, config, models, utils\nfrom gcpdiag.queries import apis, iam\nfrom gcpdiag.utils import GcpApiError\n\n\nclass CryptoKey(models.Resource):\n  \"\"\"Represents a KMS Crypto Key.\n\n  See also the API documentation:\n  https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys\n  \"\"\"\n\n  @property\n  def full_path(self) -> str:\n    return self._resource_data['name']\n\n  @property\n  def name(self) -> str:\n    return self._resource_data['name']\n\n  def is_destroyed(self) -> bool:\n    return self._resource_data['primary'].get('state') == 'DESTROYED'\n\n  def is_enabled(self) -> bool:\n    return self._resource_data['primary'].get('state') == 'ENABLED'\n\n  def __init__(self, project_id, resource_data):\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n\n\nclass KMSCryptoKeyIAMPolicy(iam.BaseIAMPolicy):\n\n  def _is_resource_permission(self, permission):\n    return True\n\n\n@caching.cached_api_call\ndef get_crypto_key(key_name: str) -> CryptoKey:\n  \"\"\"Get a Crypto Key object by its resource name, caching the result.\"\"\"\n\n  project_id = utils.get_project_by_res_name(key_name)\n  kms_api = apis.get_api('cloudkms', 'v1', project_id)\n  query = kms_api.projects().locations().keyRings().cryptoKeys().get(\n      name=key_name)\n  logging.debug('fetching KMS Key %s in project %s',\n                utils.extract_value_from_res_name(key_name, 'cryptoKeys'),\n                project_id)\n  try:\n    resource_data = query.execute(num_retries=config.API_RETRIES)\n  except googleapiclient.errors.HttpError as err:\n    raise GcpApiError(err) from err\n  return CryptoKey(project_id, resource_data)\n\n\n@caching.cached_api_call\ndef get_crypto_key_iam_policy(context: models.Context,\n                              key_name: str) -> KMSCryptoKeyIAMPolicy:\n\n  project_id = utils.get_project_by_res_name(key_name)\n  kms_api = apis.get_api('cloudkms', 'v1', project_id)\n\n  query = kms_api.projects().locations().keyRings().cryptoKeys().getIamPolicy(\n      resource=key_name)\n  return iam.fetch_iam_policy(query, KMSCryptoKeyIAMPolicy, project_id,\n                              key_name, context)\n"
  },
  {
    "path": "gcpdiag/queries/kms_stub.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Stub API calls used in kms.py for testing.\n\nInstead of doing real API calls, we return test JSON data.\n\"\"\"\n\n# pylint: disable=unused-argument\n# pylint: disable=invalid-name\n\nimport pathlib\n\nfrom gcpdiag import utils\nfrom gcpdiag.queries import apis_stub\n\nPREFIX_GKE1 = pathlib.Path(__file__).parents[2] / 'test-data/gke1/json-dumps'\n\n\nclass KmsApiStub:\n  \"\"\"Mock object to simulate container api calls.\"\"\"\n\n  def projects(self):\n    return self\n\n  def locations(self):\n    return self\n\n  def keyRings(self):\n    return self\n\n  def cryptoKeys(self):\n    return self\n\n  def get(self, name=None):\n    project_id = utils.get_project_by_res_name(name)\n    basename = utils.extract_value_from_res_name(name, 'cryptoKeys')\n    return apis_stub.RestCallStub(project_id, basename)\n\n  def getIamPolicy(self, resource):\n    project_id = utils.get_project_by_res_name(resource)\n    return apis_stub.RestCallStub(project_id, 'kms-key-iam-policy')\n"
  },
  {
    "path": "gcpdiag/queries/kms_test.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Test code in kms.py.\"\"\"\n\nfrom unittest import mock\n\nfrom gcpdiag import models\nfrom gcpdiag.queries import apis_stub, kms\n\nDUMMY_PROJECT_NAME = 'gcpdiag-gke1-aaaa'\nBASE_KEY_NAME = f'projects/{DUMMY_PROJECT_NAME}/locations/us-central1/keyRings/usckr/cryptoKeys/'\nDUMMY_DESTROYED_CRYPTO_KEY_NAME = BASE_KEY_NAME + 'kms-key-destroyed'\nDUMMY_DISABLED_CRYPTO_KEY_NAME = BASE_KEY_NAME + 'kms-key-disabled'\nDUMMY_ENABLED_CRYPTO_KEY_NAME = BASE_KEY_NAME + 'kms-key-enabled'\n\nDUMMY_IAM_POLICY_PROJECT_NAME = 'gcpdiag-apigee1-aaaa'\nDUMMY_IAM_POLICY_CRYPTO_KEY_NAME = f'projects/{DUMMY_IAM_POLICY_PROJECT_NAME}/locations/us-central1/keyRings/apigee-keyring/cryptoKeys/apigee-key'  # pylint: disable=C0301\nDUMMY_IAM_POLICY_MEMBER = 'serviceAccount:service-12340005@gcp-sa-apigee.iam.gserviceaccount.com'\nDUMMY_IAM_POLICY_ROLE = 'roles/cloudkms.cryptoKeyEncrypterDecrypter'\n\n\n@mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)\nclass TestCryptoKey:\n  \"\"\"Test kms.CryptoKey.\"\"\"\n\n  def test_get_crypto_key(self):\n    \"\"\"get_crypto_key returns the right key matched by name.\"\"\"\n    crypto_key = kms.get_crypto_key(DUMMY_ENABLED_CRYPTO_KEY_NAME)\n    assert crypto_key.name == DUMMY_ENABLED_CRYPTO_KEY_NAME\n    crypto_key = kms.get_crypto_key(DUMMY_DISABLED_CRYPTO_KEY_NAME)\n    assert crypto_key.name == DUMMY_DISABLED_CRYPTO_KEY_NAME\n\n  def test_is_destroyed(self):\n    crypto_key = kms.get_crypto_key(DUMMY_DESTROYED_CRYPTO_KEY_NAME)\n    assert crypto_key.is_destroyed()\n\n  def test_is_enabled(self):\n    crypto_key = kms.get_crypto_key(DUMMY_ENABLED_CRYPTO_KEY_NAME)\n    assert crypto_key.is_enabled()\n    crypto_key = kms.get_crypto_key(DUMMY_DISABLED_CRYPTO_KEY_NAME)\n    assert not crypto_key.is_enabled()\n\n  def test_get_crypto_key_iam_policy(self):\n    context = models.Context(project_id=DUMMY_IAM_POLICY_PROJECT_NAME)\n    policy = kms.get_crypto_key_iam_policy(context,\n                                           DUMMY_IAM_POLICY_CRYPTO_KEY_NAME)\n    assert policy.has_role_permissions(DUMMY_IAM_POLICY_MEMBER,\n                                       DUMMY_IAM_POLICY_ROLE)\n"
  },
  {
    "path": "gcpdiag/queries/kubectl.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\" Queries related to Kubectl plugins. \"\"\"\n\nimport functools\nimport logging\nimport os\nimport subprocess\nimport threading\n\nimport yaml\n\nfrom gcpdiag import config\nfrom gcpdiag.queries import gke\n\n\ndef get_config_path():\n  return config.get_cache_dir() + '/gcpdiag-config'\n\n\nclass KubectlExecutor:\n  \"\"\"Represents a kubectl executor.\"\"\"\n\n  lock: threading.Lock\n\n  def __init__(self, cluster: gke.Cluster):\n    self.cluster = cluster\n    self.lock = threading.Lock()\n\n  def make_kube_config(self) -> bool:\n    \"\"\"Add a new kubernetes context for kubectl plugin CLIs.\"\"\"\n\n    cfg: dict = {}\n    if not os.path.isfile(get_config_path()):\n      cfg['apiVersion'] = 'v1'\n      cfg['users'] = [{\n          'name': 'gcpdiag',\n          'user': {\n              'exec': {\n                  'apiVersion': 'client.authentication.k8s.io/v1beta1',\n                  'command': 'gke-gcloud-auth-plugin',\n                  'installHint': 'x',\n                  'provideClusterInfo': True,\n              },\n          },\n      }]\n      cfg['clusters'] = []\n      cfg['contexts'] = []\n    else:\n      with open(get_config_path(), encoding='UTF-8') as f:\n        cfg = yaml.safe_load(f)\n\n    if self.cluster.endpoint is None:\n      logging.warning('No kubernetes API server endpoint found for cluster %s',\n                      self.cluster.short_path)\n      return False\n\n    kubecontext = 'gcpdiag-ctx-' + self.cluster.name\n\n    cfg['clusters'].append({\n        'cluster': {\n            'certificate-authority-data': self.cluster.cluster_ca_certificate,\n            'server': 'https://' + self.cluster.endpoint,\n        },\n        'name': self.cluster.short_path,\n    })\n    cfg['contexts'].append({\n        'context': {\n            'cluster': self.cluster.short_path,\n            'user': 'gcpdiag',\n        },\n        'name': kubecontext,\n    })\n\n    self.kubecontext = kubecontext\n\n    config_text = yaml.dump(cfg, default_flow_style=False)\n    with open(get_config_path(), 'w', encoding='UTF-8') as config_file:\n      config_file.write(config_text)\n      config_file.close()\n\n    return True\n\n  def kubectl_execute(self, command_list: list[str]):\n    \"\"\" Execute a kubectl command.\n\n      Will take a list of strings which contains all the command and parameters to be executed\n      and return the stdout and stderr of the execution.\n    \"\"\"\n    res = subprocess.run(command_list,\n                         check=False,\n                         capture_output=True,\n                         text=True)\n    return res.stdout, res.stderr\n\n\ndef verify_auth(executor: KubectlExecutor) -> bool:\n  \"\"\" Verify the authentication for kubernetes by running kubeclt cluster-info.\n\n  Will raise a warning and return False if authentication failed.\n  \"\"\"\n  _, stderr = executor.kubectl_execute([\n      'kubectl', 'cluster-info', '--kubeconfig',\n      get_config_path(), '--context', executor.kubecontext\n  ])\n  if stderr:\n    logging.warning('Failed to authenticate kubectl for cluster %s: %s',\n                    executor.cluster.short_path, stderr.strip('\\n'))\n    return False\n  return True\n\n\ndef check_gke_ingress(executor: KubectlExecutor):\n  return executor.kubectl_execute([\n      'kubectl', 'check-gke-ingress', '--kubeconfig',\n      get_config_path(), '--context', executor.kubecontext\n  ])\n\n\n@functools.lru_cache()\ndef get_kubectl_executor(c: gke.Cluster):\n  \"\"\" Create a kubectl_executor for a GKE cluster. \"\"\"\n  executor = KubectlExecutor(cluster=c)\n  with executor.lock:\n    if not executor.make_kube_config():\n      return None\n  try:\n    if not verify_auth(executor):\n      logging.warning('Authentication failed for cluster %s', c.short_path)\n      return None\n  except FileNotFoundError as err:\n    logging.warning('Can not inspect Kubernetes resources: %s: %s',\n                    type(err).__name__, err)\n    return None\n  return executor\n\n\ndef clean_up():\n  \"\"\" Delete the kubeconfig file generated for gcpdiag. \"\"\"\n  try:\n    os.remove(get_config_path())\n  except OSError as err:\n    logging.debug('Error cleaning up kubeconfig file used by gcpdiag: %s: %s',\n                  type(err).__name__, err)\n\n\ndef error_message(rule_name, kind, namespace, name, message) -> str:\n  return f'Check rule {rule_name} on {kind} {namespace}/{name} failed: {message}\\n'\n"
  },
  {
    "path": "gcpdiag/queries/kubectl_stub.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Stub kubectl command execution for testing.\"\"\"\n\nimport json\nimport pathlib\n\nfrom gcpdiag.queries import kubectl\n\n\ndef check_gke_ingress(executor: kubectl.KubectlExecutor):\n  filepath = pathlib.Path(__file__).parents[\n      2] / 'test-data/gke1/json-dumps' / 'container-kubectl.json'\n  with open(filepath, encoding='utf-8') as json_file:\n    cluster_list = json.load(json_file)\n    return json.dumps(cluster_list[executor.cluster.short_path]), None\n\n\ndef verify_auth(executor: kubectl.KubectlExecutor) -> bool:\n  if executor.cluster.cluster_ca_certificate == 'REDACTED':\n    return False\n  return True\n"
  },
  {
    "path": "gcpdiag/queries/lb.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Queries related to load balancer.\"\"\"\n\nimport logging\nimport re\nfrom enum import Enum\nfrom typing import Dict, List, Literal, Optional\n\nimport googleapiclient\n\nfrom gcpdiag import caching, config, models, utils\nfrom gcpdiag.queries import apis, apis_utils\n\n\nclass LoadBalancerType(Enum):\n  \"\"\"Load balancer type.\"\"\"\n\n  LOAD_BALANCER_TYPE_UNSPECIFIED = 0\n  EXTERNAL_PASSTHROUGH_LB = 1\n  INTERNAL_PASSTHROUGH_LB = 2\n  TARGET_POOL_LB = 3  # deprecated but customers still have them\n  GLOBAL_EXTERNAL_PROXY_NETWORK_LB = 4  # envoy based proxy lb\n  REGIONAL_INTERNAL_PROXY_NETWORK_LB = 5\n  REGIONAL_EXTERNAL_PROXY_NETWORK_LB = 6\n  CROSS_REGION_INTERNAL_PROXY_NETWORK_LB = 7\n  CLASSIC_PROXY_NETWORK_LB = 8\n  GLOBAL_EXTERNAL_APPLICATION_LB = 9  # envoy based application lb\n  REGIONAL_INTERNAL_APPLICATION_LB = 10\n  REGIONAL_EXTERNAL_APPLICATION_LB = 11\n  CROSS_REGION_INTERNAL_APPLICATION_LB = 12\n  CLASSIC_APPLICATION_LB = 13\n\n\ndef get_load_balancer_type_name(lb_type: LoadBalancerType) -> str:\n  \"\"\"Returns a human-readable name for the given load balancer type.\"\"\"\n\n  type_names = {\n      LoadBalancerType.LOAD_BALANCER_TYPE_UNSPECIFIED:\n          'Unspecified',\n      LoadBalancerType.EXTERNAL_PASSTHROUGH_LB:\n          ('External Passthrough Network Load Balancer'),\n      LoadBalancerType.INTERNAL_PASSTHROUGH_LB:\n          ('Internal Passthrough Network Load Balancer'),\n      LoadBalancerType.TARGET_POOL_LB:\n          'Target Pool Network Load Balancer',\n      LoadBalancerType.GLOBAL_EXTERNAL_PROXY_NETWORK_LB:\n          ('Global External Proxy Network Load Balancer'),\n      LoadBalancerType.REGIONAL_INTERNAL_PROXY_NETWORK_LB:\n          ('Regional Internal Proxy Network Load Balancer'),\n      LoadBalancerType.REGIONAL_EXTERNAL_PROXY_NETWORK_LB:\n          ('Regional External Proxy Network Load Balancer'),\n      LoadBalancerType.CROSS_REGION_INTERNAL_PROXY_NETWORK_LB:\n          ('Cross-Region Internal Proxy Network Load Balancer'),\n      LoadBalancerType.CLASSIC_PROXY_NETWORK_LB:\n          ('Classic Proxy Network Load Balancer'),\n      LoadBalancerType.GLOBAL_EXTERNAL_APPLICATION_LB:\n          ('Global External Application Load Balancer'),\n      LoadBalancerType.REGIONAL_INTERNAL_APPLICATION_LB:\n          ('Regional Internal Application Load Balancer'),\n      LoadBalancerType.REGIONAL_EXTERNAL_APPLICATION_LB:\n          ('Regional External Application Load Balancer'),\n      LoadBalancerType.CROSS_REGION_INTERNAL_APPLICATION_LB:\n          ('Cross-Region Internal Application Load Balancer'),\n      LoadBalancerType.CLASSIC_APPLICATION_LB:\n          ('Classic Application Load Balancer'),\n  }\n  return type_names.get(lb_type, 'Unspecified')\n\n\ndef get_load_balancer_type(\n    load_balancing_scheme: str,\n    scope: str,\n    layer: Literal['application', 'network'],\n    backend_service_based: bool = True,\n) -> LoadBalancerType:\n  if load_balancing_scheme == 'EXTERNAL':\n    if not scope or scope == 'global':\n      if layer == 'application':\n        return LoadBalancerType.CLASSIC_APPLICATION_LB\n      else:\n        return LoadBalancerType.CLASSIC_PROXY_NETWORK_LB\n    else:\n      return (LoadBalancerType.EXTERNAL_PASSTHROUGH_LB\n              if backend_service_based else LoadBalancerType.TARGET_POOL_LB)\n  elif load_balancing_scheme == 'INTERNAL':\n    return LoadBalancerType.INTERNAL_PASSTHROUGH_LB\n  elif load_balancing_scheme == 'INTERNAL_MANAGED':\n    if not scope or scope == 'global':\n      if layer == 'application':\n        return LoadBalancerType.CROSS_REGION_INTERNAL_APPLICATION_LB\n      else:\n        return LoadBalancerType.CROSS_REGION_INTERNAL_PROXY_NETWORK_LB\n    else:\n      if layer == 'application':\n        return LoadBalancerType.REGIONAL_INTERNAL_APPLICATION_LB\n      else:\n        return LoadBalancerType.REGIONAL_INTERNAL_PROXY_NETWORK_LB\n  elif load_balancing_scheme == 'EXTERNAL_MANAGED':\n    if not scope or scope == 'global':\n      if layer == 'application':\n        return LoadBalancerType.GLOBAL_EXTERNAL_APPLICATION_LB\n      else:\n        return LoadBalancerType.GLOBAL_EXTERNAL_PROXY_NETWORK_LB\n    else:\n      if layer == 'application':\n        return LoadBalancerType.REGIONAL_EXTERNAL_APPLICATION_LB\n      else:\n        return LoadBalancerType.REGIONAL_EXTERNAL_PROXY_NETWORK_LB\n  return LoadBalancerType.LOAD_BALANCER_TYPE_UNSPECIFIED\n\n\ndef normalize_url(url: str) -> str:\n  \"\"\"Returns normalized url.\"\"\"\n  result = re.match(r'https://www.googleapis.com/compute/v1/(.*)', url)\n  if result:\n    return result.group(1)\n  else:\n    return ''\n\n\nclass BackendServices(models.Resource):\n  \"\"\"A Backend Service resource.\"\"\"\n\n  _resource_data: dict\n  _type: str\n\n  def __init__(self, project_id, resource_data):\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n\n  @property\n  def name(self) -> str:\n    return self._resource_data['name']\n\n  @property\n  def id(self) -> str:\n    return self._resource_data['id']\n\n  @property\n  def full_path(self) -> str:\n    result = re.match(r'https://www.googleapis.com/compute/v1/(.*)',\n                      self.self_link)\n    if result:\n      return result.group(1)\n    else:\n      return f'>> {self.self_link}'\n\n  @property\n  def short_path(self) -> str:\n    path = self.project_id + '/' + self.name\n    return path\n\n  @property\n  def self_link(self) -> str:\n    return self._resource_data['selfLink']\n\n  @property\n  def session_affinity(self) -> str:\n    return self._resource_data.get('sessionAffinity', 'NONE')\n\n  @property\n  def timeout_sec(self) -> int:\n    return self._resource_data.get('timeoutSec', None)\n\n  @property\n  def locality_lb_policy(self) -> str:\n    return self._resource_data.get('localityLbPolicy', 'ROUND_ROBIN')\n\n  @property\n  def is_enable_cdn(self) -> str:\n    return self._resource_data.get('enableCDN', False)\n\n  @property\n  def draining_timeout_sec(self) -> int:\n    return self._resource_data.get('connectionDraining',\n                                   {}).get('drainingTimeoutSec', 0)\n\n  @property\n  def load_balancing_scheme(self) -> str:\n    return self._resource_data.get('loadBalancingScheme', None)\n\n  @property\n  def health_check(self):\n    if 'healthChecks' not in self._resource_data:\n      return None\n    health_check_url = self._resource_data['healthChecks'][0]\n    matches = re.search(r'/([^/]+)$', health_check_url)\n    if matches:\n      healthcheck_name = matches.group(1)\n      return healthcheck_name\n    else:\n      return None\n\n  @property\n  def health_check_region(self):\n    if 'healthChecks' not in self._resource_data:\n      return None\n    health_check_url = self._resource_data['healthChecks'][0]\n    m = re.search(r'/regions/([^/]+)', health_check_url)\n    if m:\n      return m.group(1)\n    else:\n      return None\n\n  @property\n  def backends(self) -> List[dict]:\n    return self._resource_data.get('backends', [])\n\n  @property\n  def region(self):\n    try:\n      url = self._resource_data.get('region')\n      if url is not None:\n        match = re.search(r'/([^/]+)/?$', url)\n        if match is not None:\n          region = match.group(1)\n          return region\n        else:\n          return None\n    except KeyError:\n      return None\n\n  @property\n  def protocol(self) -> str:\n    return self._resource_data.get('protocol', None)\n\n  @property\n  def port_name(self) -> str:\n    return self._resource_data.get('portName', None)\n\n  @property\n  def used_by_refs(self) -> List[str]:\n    used_by = []\n    for x in self._resource_data.get('usedBy', []):\n      reference = x.get('reference')\n      if reference:\n        match = re.match(r'https://www.googleapis.com/compute/v1/(.*)',\n                         reference)\n        if match:\n          used_by.append(match.group(1))\n    return used_by\n\n  @property\n  def load_balancer_type(self) -> LoadBalancerType:\n    application_protocols = ['HTTP', 'HTTPS', 'HTTP2']\n    return get_load_balancer_type(\n        self.load_balancing_scheme,\n        self.region,\n        'application' if self.protocol in application_protocols else 'network',\n        backend_service_based=True,\n    )\n\n\n@caching.cached_api_call(in_memory=True)\ndef get_backend_services(project_id: str) -> List[BackendServices]:\n  logging.debug('fetching Backend Services: %s', project_id)\n  compute = apis.get_api('compute', 'v1', project_id)\n  backend_services = []\n  request = compute.backendServices().aggregatedList(project=project_id)\n  response = request.execute(num_retries=config.API_RETRIES)\n  backend_services_by_region = response['items']\n  for _, data_ in backend_services_by_region.items():\n    if 'backendServices' not in data_:\n      continue\n    backend_services.extend([\n        BackendServices(project_id, backend_service)\n        for backend_service in data_['backendServices']\n    ])\n  return backend_services\n\n\n@caching.cached_api_call(in_memory=True)\ndef get_backend_service(project_id: str,\n                        backend_service_name: str,\n                        region: str = None) -> BackendServices:\n  \"\"\"Returns instance object matching backend service name and region\"\"\"\n  compute = apis.get_api('compute', 'v1', project_id)\n  try:\n    if not region or region == 'global':\n      request = compute.backendServices().get(\n          project=project_id, backendService=backend_service_name)\n    else:\n      request = compute.regionBackendServices().get(\n          project=project_id,\n          region=region,\n          backendService=backend_service_name)\n\n    response = request.execute(num_retries=config.API_RETRIES)\n    return BackendServices(project_id, resource_data=response)\n  except googleapiclient.errors.HttpError as err:\n    raise utils.GcpApiError(err) from err\n\n\ndef get_backend_service_by_self_link(\n    backend_service_self_link: str,) -> Optional[BackendServices]:\n  backend_service_name = backend_service_self_link.split('/')[-1]\n  backend_service_scope = backend_service_self_link.split('/')[-3]\n  match = re.match(r'projects/([^/]+)/', backend_service_self_link)\n  if not match:\n    return None\n  project_id = match.group(1)\n  return get_backend_service(project_id, backend_service_name,\n                             backend_service_scope)\n\n\nclass BackendHealth:\n  \"\"\"A Backend Service resource.\"\"\"\n\n  _resource_data: dict\n\n  def __init__(self, resource_data, group):\n    self._resource_data = resource_data\n    self._group = group\n\n  @property\n  def instance(self) -> str:\n    return self._resource_data['instance']\n\n  @property\n  def group(self) -> str:\n    return self._group\n\n  @property\n  def health_state(self) -> str:\n    return self._resource_data.get('healthState', 'UNHEALTHY')\n\n\n@caching.cached_api_call(in_memory=True)\ndef get_backend_service_health(\n    context: models.Context,\n    backend_service_name: str,\n    backend_service_region: str = None,\n) -> List[BackendHealth]:\n  \"\"\"Returns health data for backend service.\n\n  Args:\n    context: The project context.\n    backend_service_name: The name of the backend service.\n    backend_service_region: The region of the backend service.\n\n  Returns:\n    A list of BackendHealth objects.\n  \"\"\"\n  project_id = context.project_id\n  try:\n    backend_service = get_backend_service(project_id, backend_service_name,\n                                          backend_service_region)\n  except googleapiclient.errors.HttpError:\n    return []\n\n  backend_health_statuses: List[BackendHealth] = []\n  compute = apis.get_api('compute', 'v1', project_id)\n  request_map = {}\n\n  for backend in backend_service.backends:\n    group = backend['group']\n    if not backend_service.region:\n      request = compute.backendServices().getHealth(\n          project=project_id,\n          backendService=backend_service.name,\n          body={'group': group})\n    else:\n      request = compute.regionBackendServices().getHealth(\n          project=project_id,\n          region=backend_service.region,\n          backendService=backend_service.name,\n          body={'group': group})\n    request_map[request] = group\n\n  for i, response, exception in apis_utils.execute_concurrently(\n      api=compute, requests=list(request_map.keys()), context=context):\n    group = request_map[i]\n    if exception:\n      logging.warning(\n          'getHealth API call failed for backend service %s, group %s: %s',\n          backend_service_name, group, exception)\n      continue\n\n    # None is returned when backend type doesn't support health check\n    if response is not None:\n      for health_status in response.get('healthStatus', []):\n        backend_health_statuses.append(BackendHealth(health_status, group))\n\n  return backend_health_statuses\n\n\nclass SslCertificate(models.Resource):\n  \"\"\"A SSL Certificate resource.\"\"\"\n\n  _resource_data: dict\n  _type: str\n\n  def __init__(self, project_id, resource_data):\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n\n  @property\n  def name(self) -> str:\n    return self._resource_data['name']\n\n  @property\n  def id(self) -> str:\n    return self._resource_data['id']\n\n  @property\n  def full_path(self) -> str:\n    result = re.match(r'https://www.googleapis.com/compute/v1/(.*)',\n                      self.self_link)\n    if result:\n      return result.group(1)\n    else:\n      return f'>> {self.self_link}'\n\n  @property\n  def self_link(self) -> str:\n    return self._resource_data['selfLink']\n\n  @property\n  def type(self) -> str:\n    return self._resource_data.get('type', 'SELF_MANAGED')\n\n  @property\n  def status(self) -> str:\n    return self._resource_data.get('managed', {}).get('status')\n\n  @property\n  def domains(self) -> List[str]:\n    return self._resource_data.get('managed', {}).get('domains', [])\n\n  @property\n  def domain_status(self) -> Dict[str, str]:\n    return self._resource_data.get('managed', {}).get('domainStatus', {})\n\n\n@caching.cached_api_call(in_memory=True)\ndef get_ssl_certificate(\n    project_id: str,\n    certificate_name: str,\n) -> SslCertificate:\n  \"\"\"Returns object matching certificate name and region\"\"\"\n  compute = apis.get_api('compute', 'v1', project_id)\n\n  request = compute.sslCertificates().get(project=project_id,\n                                          sslCertificate=certificate_name)\n\n  response = request.execute(num_retries=config.API_RETRIES)\n  return SslCertificate(project_id, resource_data=response)\n\n\nclass ForwardingRules(models.Resource):\n  \"\"\"A Forwarding Rule resource.\"\"\"\n\n  _resource_data: dict\n  _type: str\n\n  def __init__(self, project_id, resource_data):\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n\n  @property\n  def name(self) -> str:\n    return self._resource_data['name']\n\n  @property\n  def id(self) -> str:\n    return self._resource_data['id']\n\n  @property\n  def full_path(self) -> str:\n    result = re.match(r'https://www.googleapis.com/compute/v1/(.*)',\n                      self.self_link)\n    if result:\n      return result.group(1)\n    else:\n      return f'>> {self.self_link}'\n\n  @property\n  def short_path(self) -> str:\n    path = self.project_id + '/' + self.name\n    return path\n\n  @property\n  def region(self):\n    url = self._resource_data.get('region', '')\n    if url is not None:\n      match = re.search(r'/([^/]+)/?$', url)\n      if match is not None:\n        region = match.group(1)\n        return region\n    return 'global'\n\n  @property\n  def self_link(self) -> str:\n    return self._resource_data['selfLink']\n\n  @property\n  def global_access_allowed(self) -> bool:\n    return self._resource_data.get('allowGlobalAccess', False)\n\n  @property\n  def load_balancing_scheme(self) -> str:\n    return self._resource_data.get('loadBalancingScheme', None)\n\n  @property\n  def target(self) -> str:\n    full_path = self._resource_data.get('target', '')\n    result = re.match(r'https://www.googleapis.com/compute/v1/(.*)', full_path)\n    if result:\n      return result.group(1)\n    else:\n      return ''\n\n  @property\n  def backend_service(self) -> str:\n    full_path = self._resource_data.get('backendService', '')\n    result = re.match(r'https://www.googleapis.com/compute/v1/(.*)', full_path)\n    if result:\n      return result.group(1)\n    else:\n      return ''\n\n  @property\n  def ip_address(self) -> str:\n    return self._resource_data.get('IPAddress', '')\n\n  @property\n  def port_range(self) -> str:\n    return self._resource_data.get('portRange', '')\n\n  @caching.cached_api_call(in_memory=True)\n  def get_related_backend_services(self) -> List[BackendServices]:\n    \"\"\"Returns the backend services related to the forwarding rule.\"\"\"\n    if self.backend_service:\n      resource = get_backend_service_by_self_link(self.backend_service)\n      return [resource] if resource else []\n    if self.target:\n      target_proxy_target = get_target_proxy_reference(self.target)\n      if not target_proxy_target:\n        return []\n      target_proxy_target_type = target_proxy_target.split('/')[-2]\n      if target_proxy_target_type == 'backendServices':\n        resource = get_backend_service_by_self_link(target_proxy_target)\n        return [resource] if resource else []\n      elif target_proxy_target_type == 'urlMaps':\n        # Currently it doesn't work for shared-vpc backend services\n        backend_services = get_backend_services(self.project_id)\n        return [\n            backend_service for backend_service in backend_services\n            if target_proxy_target in backend_service.used_by_refs\n        ]\n    return []\n\n  @property\n  def load_balancer_type(self) -> LoadBalancerType:\n    target_type = None\n    if self.target:\n      parts = self.target.split('/')\n      if len(parts) >= 2:\n        target_type = parts[-2]\n\n    application_targets = [\n        'targetHttpProxies',\n        'targetHttpsProxies',\n        'targetGrpcProxies',\n    ]\n\n    return get_load_balancer_type(\n        self.load_balancing_scheme,\n        self.region,\n        'application' if target_type in application_targets else 'network',\n        target_type != 'targetPools',\n    )\n\n\n@caching.cached_api_call(in_memory=True)\ndef get_target_proxy_reference(target_proxy_self_link: str) -> str:\n  \"\"\"Retrieves the URL map or backend service associated with a given target proxy.\n\n  Args:\n    target_proxy_self_link: self link of the target proxy\n\n  Returns:\n    The url map or the backend service self link\n  \"\"\"\n  target_proxy_type = target_proxy_self_link.split('/')[-2]\n  target_proxy_name = target_proxy_self_link.split('/')[-1]\n  target_proxy_scope = target_proxy_self_link.split('/')[-3]\n  match_result = re.match(r'projects/([^/]+)/', target_proxy_self_link)\n  if not match_result:\n    return ''\n  project_id = match_result.group(1)\n  compute = apis.get_api('compute', 'v1', project_id)\n\n  request = None\n  if target_proxy_type == 'targetHttpsProxies':\n    if target_proxy_scope == 'global':\n      request = compute.targetHttpsProxies().get(\n          project=project_id, targetHttpsProxy=target_proxy_name)\n    else:\n      request = compute.regionTargetHttpsProxies().get(\n          project=project_id,\n          region=target_proxy_scope,\n          targetHttpsProxy=target_proxy_name,\n      )\n  elif target_proxy_type == 'targetHttpProxies':\n    if target_proxy_scope == 'global':\n      request = compute.targetHttpProxies().get(\n          project=project_id, targetHttpProxy=target_proxy_name)\n    else:\n      request = compute.regionTargetHttpProxies().get(\n          project=project_id,\n          region=target_proxy_scope,\n          targetHttpProxy=target_proxy_name,\n      )\n  elif target_proxy_type == 'targetTcpProxies':\n    if target_proxy_scope == 'global':\n      request = compute.targetTcpProxies().get(project=project_id,\n                                               targetTcpProxy=target_proxy_name)\n    else:\n      request = compute.regionTargetTcpProxies().get(\n          project=project_id,\n          region=target_proxy_scope,\n          targetTcpProxy=target_proxy_name,\n      )\n  elif target_proxy_type == 'targetSslProxies':\n    request = compute.targetSslProxies().get(project=project_id,\n                                             targetSslProxy=target_proxy_name)\n  elif target_proxy_type == 'targetGrcpProxies':\n    request = compute.targetGrpcProxies().get(project=project_id,\n                                              targetGrpcProxy=target_proxy_name)\n  if not request:\n    # target is not target proxy\n    return ''\n  response = request.execute(num_retries=config.API_RETRIES)\n  if 'urlMap' in response:\n    return normalize_url(response['urlMap'])\n  if 'service' in response:\n    return normalize_url(response['service'])\n  return ''\n\n\n@caching.cached_api_call(in_memory=True)\ndef get_forwarding_rules(project_id: str) -> List[ForwardingRules]:\n  logging.debug('fetching Forwarding Rules: %s', project_id)\n  compute = apis.get_api('compute', 'v1', project_id)\n  forwarding_rules = []\n  request = compute.forwardingRules().aggregatedList(project=project_id)\n  response = request.execute(num_retries=config.API_RETRIES)\n  forwarding_rules_by_region = response['items']\n  for _, data_ in forwarding_rules_by_region.items():\n    if 'forwardingRules' not in data_:\n      continue\n    forwarding_rules.extend([\n        ForwardingRules(project_id, forwarding_rule)\n        for forwarding_rule in data_['forwardingRules']\n    ])\n  return forwarding_rules\n\n\n@caching.cached_api_call(in_memory=True)\ndef get_forwarding_rule(project_id: str,\n                        forwarding_rule_name: str,\n                        region: str = None) -> ForwardingRules:\n  compute = apis.get_api('compute', 'v1', project_id)\n  if not region or region == 'global':\n    request = compute.globalForwardingRules().get(\n        project=project_id, forwardingRule=forwarding_rule_name)\n  else:\n    request = compute.forwardingRules().get(project=project_id,\n                                            region=region,\n                                            forwardingRule=forwarding_rule_name)\n  response = request.execute(num_retries=config.API_RETRIES)\n  return ForwardingRules(project_id, resource_data=response)\n\n\nclass TargetHttpsProxy(models.Resource):\n  \"\"\"A Target HTTPS Proxy resource.\"\"\"\n\n  _resource_data: dict\n  _type: str\n\n  def __init__(self, project_id, resource_data):\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n\n  @property\n  def name(self) -> str:\n    return self._resource_data['name']\n\n  @property\n  def id(self) -> str:\n    return self._resource_data['id']\n\n  @property\n  def full_path(self) -> str:\n    result = re.match(r'https://www.googleapis.com/compute/v1/(.*)',\n                      self.self_link)\n    if result:\n      return result.group(1)\n    else:\n      return f'>> {self.self_link}'\n\n  @property\n  def self_link(self) -> str:\n    return self._resource_data['selfLink']\n\n  @property\n  def region(self):\n    url = self._resource_data.get('region', '')\n    if url is not None:\n      match = re.search(r'/([^/]+)/?$', url)\n      if match is not None:\n        region = match.group(1)\n        return region\n    return 'global'\n\n  @property\n  def ssl_certificates(self) -> List[str]:\n    return self._resource_data.get('sslCertificates', [])\n\n  @property\n  def certificate_map(self) -> str:\n    certificate_map = self._resource_data.get('certificateMap', '')\n    result = re.match(r'https://certificatemanager.googleapis.com/v1/(.*)',\n                      certificate_map)\n    if result:\n      return result.group(1)\n    return certificate_map\n\n\n@caching.cached_api_call(in_memory=True)\ndef get_target_https_proxies(project_id: str) -> List[TargetHttpsProxy]:\n  logging.debug('fetching Target HTTPS Proxies: %s', project_id)\n  compute = apis.get_api('compute', 'v1', project_id)\n  target_https_proxies = []\n  request = compute.targetHttpsProxies().aggregatedList(project=project_id)\n  response = request.execute(num_retries=config.API_RETRIES)\n  target_https_proxies_by_region = response['items']\n  for _, data_ in target_https_proxies_by_region.items():\n    if 'targetHttpsProxies' not in data_:\n      continue\n    target_https_proxies.extend([\n        TargetHttpsProxy(project_id, target_https_proxy)\n        for target_https_proxy in data_['targetHttpsProxies']\n    ])\n\n  return target_https_proxies\n\n\nclass TargetSslProxy(models.Resource):\n  \"\"\"A Target SSL Proxy resource.\"\"\"\n\n  _resource_data: dict\n  _type: str\n\n  def __init__(self, project_id, resource_data):\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n\n  @property\n  def name(self) -> str:\n    return self._resource_data['name']\n\n  @property\n  def id(self) -> str:\n    return self._resource_data['id']\n\n  @property\n  def full_path(self) -> str:\n    result = re.match(r'https://www.googleapis.com/compute/v1/(.*)',\n                      self.self_link)\n    if result:\n      return result.group(1)\n    else:\n      return f'>> {self.self_link}'\n\n  @property\n  def self_link(self) -> str:\n    return self._resource_data['selfLink']\n\n  @property\n  def region(self):\n    url = self._resource_data.get('region', '')\n    if url is not None:\n      match = re.search(r'/([^/]+)/?$', url)\n      if match is not None:\n        region = match.group(1)\n        return region\n    return 'global'\n\n  @property\n  def ssl_certificates(self) -> List[str]:\n    return self._resource_data.get('sslCertificates', [])\n\n  @property\n  def certificate_map(self) -> str:\n    certificate_map = self._resource_data.get('certificateMap', '')\n    result = re.match(r'https://certificatemanager.googleapis.com/v1/(.*)',\n                      certificate_map)\n    if result:\n      return result.group(1)\n    return certificate_map\n\n\n@caching.cached_api_call(in_memory=True)\ndef get_target_ssl_proxies(project_id: str) -> List[TargetSslProxy]:\n  logging.debug('fetching Target SSL Proxies: %s', project_id)\n  compute = apis.get_api('compute', 'v1', project_id)\n  request = compute.targetSslProxies().list(project=project_id)\n  response = request.execute(num_retries=config.API_RETRIES)\n\n  return [\n      TargetSslProxy(project_id, item) for item in response.get('items', [])\n  ]\n\n\nclass LoadBalancerInsight(models.Resource):\n  \"\"\"Represents a Load Balancer Insights object\"\"\"\n\n  @property\n  def full_path(self) -> str:\n    return self._resource_data['name']\n\n  @property\n  def description(self) -> str:\n    return self._resource_data['description']\n\n  @property\n  def insight_subtype(self) -> str:\n    return self._resource_data['insightSubtype']\n\n  @property\n  def details(self) -> dict:\n    return self._resource_data['content']\n\n  @property\n  def is_firewall_rule_insight(self) -> bool:\n    firewall_rule_subtypes = (\n        'HEALTH_CHECK_FIREWALL_NOT_CONFIGURED',\n        'HEALTH_CHECK_FIREWALL_FULLY_BLOCKING',\n        'HEALTH_CHECK_FIREWALL_PARTIALLY_BLOCKING',\n        'HEALTH_CHECK_FIREWALL_INCONSISTENT',\n    )\n    return self.insight_subtype.startswith(firewall_rule_subtypes)\n\n  @property\n  def is_health_check_port_mismatch_insight(self) -> bool:\n    return self.insight_subtype == 'HEALTH_CHECK_PORT_MISMATCH'\n\n  def __init__(self, project_id, resource_data):\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n\n\n@caching.cached_api_call\ndef get_lb_insights_for_a_project(project_id: str, region: str = 'global'):\n  api = apis.get_api('recommender', 'v1', project_id)\n\n  insight_name = (f'projects/{project_id}/locations/{region}/insightTypes/'\n                  'google.networkanalyzer.networkservices.loadBalancerInsight')\n  insights = []\n  for insight in apis_utils.list_all(\n      request=api.projects().locations().insightTypes().insights().list(\n          parent=insight_name),\n      next_function=api.projects().locations().insightTypes().insights().\n      list_next,\n      response_keyword='insights',\n  ):\n    insights.append(LoadBalancerInsight(project_id, insight))\n  return insights\n"
  },
  {
    "path": "gcpdiag/queries/lb_stub.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Stub API calls used in lb.py for testing.\n\nInstead of doing real API calls, we return test JSON data.\n\"\"\"\n\nimport json\nfrom typing import Any\n\nimport httplib2\nfrom googleapiclient import errors\n\nfrom gcpdiag.queries import apis_stub\n\n# pylint: disable=unused-argument\n# pylint: disable=invalid-name\n\nbackend_service_states = ('backendServices', 'regionBackendServices')\nforwarding_rule_states = ('forwardingRules', 'globalForwardingRules')\ntarget_http_proxy_states = ('targetHttpProxies', 'regionTargetHttpProxies')\ntarget_https_proxy_states = (\n    'targetHttpsProxies',\n    'regionTargetHttpsProxies',\n)\ntarget_ssl_proxy_states = 'targetSslProxies'\ntarget_grpc_proxy_states = 'targetGrpcProxies'\ntarget_tcp_proxy_states = ('targetTcpProxies', 'regionTargetTcpProxies')\n\naggregated_supported = (\n    'backendServices',\n    'forwardingRules',\n    'targetHttpProxies',\n    'targetHttpsProxies',\n    'targetTcpProxies',\n)\n\n\nclass LbApiStub:\n  \"\"\"Mock object to simulate compute engine networking api calls.\n\n  This object is created by GceApiStub, not used directly in test scripts.\n  \"\"\"\n\n  def __init__(self, mock_state):\n    self.mock_state = mock_state\n\n  def aggregatedList(self, project):\n    if self.mock_state == 'forwardingRules':\n      return apis_stub.RestCallStub(project,\n                                    'compute-aggregated-forwardingRules')\n    if self.mock_state == 'backendServices':\n      return apis_stub.RestCallStub(project,\n                                    'compute-aggregated-backendServices')\n    else:\n      raise ValueError(f'cannot call method {self.mock_state} here')\n\n  # pylint: disable=redefined-builtin\n  def list(self, project, region=None):\n    if self.mock_state == 'backendServices':\n      return apis_stub.RestCallStub(project, 'compute-backendServices')\n    if self.mock_state == 'regionBackendServices':\n      return apis_stub.RestCallStub(project,\n                                    f'compute-backendServices-{region}')\n    else:\n      raise ValueError(f'cannot call method {self.mock_state} here')\n\n  def get(\n      self,\n      project,\n      region=None,\n      backendService=None,\n      forwardingRule=None,\n  ):\n    self.region = region\n    self.project = project\n    if self.mock_state in backend_service_states and backendService:\n      self.backend_service = backendService\n      return self\n    elif self.mock_state in forwarding_rule_states and forwardingRule:\n      self.forwarding_rule = forwardingRule\n      return self\n    else:\n      raise ValueError(f'cannot call method {self.mock_state} here')\n\n  def getHealth(self, project, backendService, body, region=None):\n    backend_url_parts = body.get('group').split('/')\n    backend_name, backend_type, backend_scope = (\n        backend_url_parts[-1],\n        backend_url_parts[-2],\n        backend_url_parts[-3],\n    )\n\n    if self.mock_state == 'backendServices':\n      stub_name = (f'backendService-{backendService}-get-health-{backend_type}-'\n                   f'{backend_name}-{backend_scope}')\n      return apis_stub.RestCallStub(project, stub_name)\n    if self.mock_state == 'regionBackendServices':\n      stub_name = (f'regionBackendService-{backendService}-{region}-get-health-'\n                   f'{backend_type}-{backend_name}-{backend_scope}')\n      return apis_stub.RestCallStub(project, stub_name)\n    else:\n      raise ValueError(f'cannot call method {self.mock_state} here')\n\n  def _get_resources_from_json_items(self, items: Any, resource_name: str):\n    if resource_name in aggregated_supported:\n      items_by_scope = items[f'regions/{self.region}' if self.\n                             region else 'global']\n      return items_by_scope[resource_name]\n    return items\n\n  def execute(self, num_retries=0):\n    json_dir = apis_stub.get_json_dir(self.project)\n    if self.mock_state in backend_service_states:\n      resource_name = 'backendServices'\n    elif self.mock_state in forwarding_rule_states:\n      resource_name = 'forwardingRules'\n    else:\n      resource_name = self.mock_state\n    json_file_name = (f'compute-aggregated-{resource_name}.json'\n                      if resource_name in aggregated_supported else\n                      f'compute-{resource_name}.json')\n\n    with open(json_dir / f'{json_file_name}', encoding='utf-8') as json_file:\n      items = json.load(json_file)['items']\n      resources = self._get_resources_from_json_items(items, resource_name)\n\n      if not resources:\n        raise errors.HttpError(\n            httplib2.Response({\n                'status': 404,\n                'reason': 'Not Found'\n            }),\n            b'The resource is not found',\n        )\n      if self.mock_state in backend_service_states:\n        for backend_service in resources:\n          if backend_service['name'] == self.backend_service:\n            return backend_service\n          else:\n            raise errors.HttpError(\n                httplib2.Response({\n                    'status': 404,\n                    'reason': 'Not Found'\n                }),\n                f'The backend service {self.backend_service} is not found'.\n                encode(),\n            )\n      elif self.mock_state in forwarding_rule_states:\n        for forwarding_rule in resources:\n          if forwarding_rule['name'] == self.forwarding_rule:\n            return forwarding_rule\n          else:\n            raise errors.HttpError(\n                httplib2.Response({\n                    'status': 404,\n                    'reason': 'Not Found'\n                }),\n                f'The forwarding rule {self.forwarding_rule} is not found'.\n                encode(),\n            )\n      else:\n        raise ValueError(f'cannot call method {self.mock_state} here')\n\n  def list_next(self, prev_request, prev_response):\n    return None\n\n\nclass SslCertificateApiStub:\n  \"\"\"Mock object to simulate SSL certificate api calls\"\"\"\n\n  def __init__(self, mock_state):\n    self.mock_state = mock_state\n\n  def get(self, project, sslCertificate=None, region=None):\n    if sslCertificate:\n      self.ssl_certificate = sslCertificate\n      self.project = project\n      self.region = region\n      return self\n    else:\n      raise ValueError(f'cannot call method {self.mock_state} here')\n\n  def execute(self, num_retries=0):\n    json_dir = apis_stub.get_json_dir(self.project)\n    json_file_name = f'compute-{self.mock_state}.json'\n    if self.mock_state == 'regionSslCertificates':\n      json_file_name = f'compute-{self.mock_state}-{self.region}.json'\n    with open(json_dir / json_file_name, encoding='utf-8') as json_file:\n      ssl_certificates = json.load(json_file)['items']\n      # search for and get the ssl certificate\n      if ssl_certificates:\n        for ssl_certificate in ssl_certificates:\n          if ssl_certificate['name'] == self.ssl_certificate:\n            return ssl_certificate\n        raise errors.HttpError(\n            httplib2.Response({\n                'status': 404,\n                'reason': 'Not Found'\n            }),\n            f'The SSL certificate {self.ssl_certificate} is not found'.encode(),\n        )\n      else:\n        raise ValueError(f'cannot call method {self.mock_state} here')\n\n\nclass TargetProxyStub:\n  \"\"\"Mock object to simulate target proxy api calls\"\"\"\n\n  def __init__(self, mock_state):\n    self.mock_state = mock_state\n\n  def aggregatedList(self, project):\n    return apis_stub.RestCallStub(project,\n                                  f'compute-aggregated-{self.mock_state}')\n\n  def list(self, project):\n    return apis_stub.RestCallStub(project, f'compute-{self.mock_state}')\n\n  def get(\n      self,\n      project,\n      region=None,\n      targetHttpProxy=None,\n      targetHttpsProxy=None,\n      targetSslProxy=None,\n      targetGrpcProxy=None,\n      targetTcpProxy=None,\n  ):\n    self.region = region\n    self.project = project\n    if self.mock_state in target_tcp_proxy_states and targetTcpProxy:\n      self.target_proxy = targetTcpProxy\n      return self\n    if self.mock_state in target_https_proxy_states and targetHttpsProxy:\n      self.target_proxy = targetHttpsProxy\n      return self\n    if self.mock_state in target_http_proxy_states and targetHttpProxy:\n      self.target_proxy = targetHttpProxy\n      return self\n    if self.mock_state in target_ssl_proxy_states and targetSslProxy:\n      self.target_proxy = targetSslProxy\n      return self\n    if self.mock_state in target_grpc_proxy_states and targetGrpcProxy:\n      self.target_proxy = targetGrpcProxy\n      return self\n    else:\n      raise ValueError(f'cannot call method {self.mock_state} here')\n\n  def execute(self, num_retries=0):\n    json_dir = apis_stub.get_json_dir(self.project)\n    json_file_name = f'compute-{self.mock_state}.json'\n    if self.region:\n      json_file_name = f'compute-{self.mock_state}-{self.region}.json'\n    with open(json_dir / json_file_name, encoding='utf-8') as json_file:\n      target_proxies = json.load(json_file)['items']\n      # search for and get the ssl certificate\n      if target_proxies:\n        for target_proxy in target_proxies:\n          if target_proxy['name'] == self.target_proxy:\n            return target_proxy\n        raise errors.HttpError(\n            httplib2.Response({\n                'status': 404,\n                'reason': 'Not Found'\n            }),\n            f'The Target proxy {self.target_proxy} is not found'.encode(),\n        )\n      else:\n        raise ValueError(f'cannot call method {self.mock_state} here')\n"
  },
  {
    "path": "gcpdiag/queries/lb_test.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Test code in lb.py.\"\"\"\n\nimport unittest\nimport urllib.parse\nfrom unittest import mock\n\nfrom gcpdiag import models\nfrom gcpdiag.queries import apis_stub, lb\n\nDUMMY_PROJECT_ID = 'gcpdiag-lb1-aaaa'\nDUMMY_PROJECT2_ID = 'gcpdiag-lb2-aaaa'\nDUMMY_PROJECT3_ID = 'gcpdiag-lb3-aaaa'\nDUMMY_PORT = 80\nDUMMY_PROTOCOL = 'HTTP'\nDUMMY_URLMAP_NAME = 'web-map-http'\nDUMMY_TARGET_NAME = 'http-lb-proxy'\n\n\n@mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)\nclass TestURLMap(unittest.TestCase):\n  \"\"\"Test lb.URLMap.\"\"\"\n\n  def test_get_backend_services(self):\n    \"\"\"get_backend_services returns the right backend services matched by name.\"\"\"\n    context = models.Context(project_id=DUMMY_PROJECT_ID)\n    obj_list = lb.get_backend_services(context.project_id)\n    assert len(obj_list) == 1\n    n = obj_list[0]\n    assert n.session_affinity == 'NONE'\n    assert n.locality_lb_policy == 'ROUND_ROBIN'\n\n  def test_get_backend_service_global(self):\n    context = models.Context(project_id=DUMMY_PROJECT2_ID)\n    obj = lb.get_backend_service(context.project_id, 'web-backend-service')\n\n    assert obj.name == 'web-backend-service'\n    assert obj.session_affinity == 'NONE'\n    assert obj.locality_lb_policy == 'ROUND_ROBIN'\n    assert obj.protocol == 'HTTP'\n    assert obj.load_balancer_type == lb.LoadBalancerType.CLASSIC_APPLICATION_LB\n    assert obj.health_check == 'http-basic-check'\n    assert not obj.health_check_region\n\n  def test_get_backend_service_regional(self):\n    context = models.Context(project_id=DUMMY_PROJECT2_ID)\n    obj = lb.get_backend_service(context.project_id, 'backend-service-2',\n                                 'europe-west4')\n\n    assert obj.name == 'backend-service-2'\n    assert obj.region == 'europe-west4'\n    assert obj.session_affinity == 'NONE'\n    assert obj.locality_lb_policy == 'ROUND_ROBIN'\n    assert obj.protocol == 'TCP'\n    assert obj.load_balancer_type == lb.LoadBalancerType.EXTERNAL_PASSTHROUGH_LB\n    assert obj.health_check == 'tcp-basic-check-2'\n    assert obj.health_check_region == 'europe-west4'\n\n  def test_get_backend_service_health_implicit_global(self):\n    context = models.Context(project_id=DUMMY_PROJECT2_ID)\n    states_list = lb.get_backend_service_health(context, 'web-backend-service')\n\n    assert len(states_list) == 2\n    assert states_list[0].health_state == 'UNHEALTHY'\n\n  def test_get_backend_service_health_explicit_global(self):\n    context = models.Context(project_id=DUMMY_PROJECT2_ID)\n    states_list = lb.get_backend_service_health(context, 'web-backend-service',\n                                                'global')\n\n    assert len(states_list) == 2\n    assert states_list[0].health_state == 'UNHEALTHY'\n\n  def test_get_backend_service_health_regional(self):\n    context = models.Context(project_id=DUMMY_PROJECT2_ID)\n    states_list = lb.get_backend_service_health(context, 'backend-service-2',\n                                                'europe-west4')\n\n    assert len(states_list) == 1\n    assert states_list[0].health_state == 'UNHEALTHY'\n\n  def test_get_forwarding_rules(self):\n    \"\"\"get_forwarding_rules returns the right forwarding rules matched by name.\"\"\"\n    forwarding_rules = lb.get_forwarding_rules(project_id=DUMMY_PROJECT_ID)\n    assert len(forwarding_rules) == 1\n    forwarding_rule = forwarding_rules[0]\n    assert forwarding_rule.name == 'forwardingRule1'\n    assert forwarding_rule.short_path == 'gcpdiag-lb1-aaaa/forwardingRule1'\n\n  def test_get_forwarding_rule_regional(self):\n    \"\"\"get_forwarding_rule returns the right forwarding rule matched by name.\"\"\"\n    forwarding_rule = lb.get_forwarding_rule(\n        project_id=DUMMY_PROJECT2_ID,\n        forwarding_rule_name='forwardingRule1',\n        region='us-west1',\n    )\n    assert forwarding_rule.name == 'forwardingRule1'\n    assert forwarding_rule.short_path == 'gcpdiag-lb2-aaaa/forwardingRule1'\n    assert (forwarding_rule.load_balancer_type ==\n            lb.LoadBalancerType.REGIONAL_INTERNAL_APPLICATION_LB)\n\n  def test_get_forwarding_rule_global(self):\n    \"\"\"get_forwarding_rule returns the right forwarding rule matched by name.\"\"\"\n    forwarding_rule = lb.get_forwarding_rule(\n        project_id=DUMMY_PROJECT3_ID,\n        forwarding_rule_name='https-content-rule',\n    )\n    assert forwarding_rule.name == 'https-content-rule'\n    assert (forwarding_rule.load_balancer_type ==\n            lb.LoadBalancerType.CLASSIC_APPLICATION_LB)\n\n  def test_forwarding_rule_related_backend_service_http(self):\n    forwarding_rule = lb.get_forwarding_rule(\n        project_id=DUMMY_PROJECT3_ID, forwarding_rule_name='https-content-rule')\n\n    related_backend_service = forwarding_rule.get_related_backend_services()\n\n    assert len(related_backend_service) == 1\n    assert related_backend_service[0].name == 'web-backend-service'\n\n  def test_get_ssl_certificate_global(self):\n    \"\"\"get_ssl_certificate returns the right SSL certificate matched by name.\"\"\"\n    obj = lb.get_ssl_certificate(project_id=DUMMY_PROJECT3_ID,\n                                 certificate_name='cert1')\n    assert obj.name == 'cert1'\n    assert obj.type == 'MANAGED'\n    self.assertTrue(\n        any(\n            urllib.parse.urlparse('//' + d).hostname == 'natka123.com'\n            for d in obj.domains))\n    self.assertTrue(\n        any(\n            urllib.parse.urlparse('//' + d).hostname == 'second.natka123.com'\n            for d in obj.domains))\n\n  def test_get_target_https_proxies(self):\n    \"\"\"get_target_https_proxy returns the list of target https proxies.\"\"\"\n    items = lb.get_target_https_proxies(project_id=DUMMY_PROJECT3_ID)\n\n    assert len(items) == 2\n    assert items[0].name == 'https-lb-proxy'\n    assert (\n        items[0].full_path ==\n        'projects/gcpdiag-lb3-aaaa/global/targetHttpsProxies/https-lb-proxy')\n    assert items[1].name == 'https-lb-proxy-working'\n\n  def test_get_target_ssl_proxies(self):\n    \"\"\"get_target_https_proxy returns the list of target ssl proxies.\"\"\"\n    items = lb.get_target_ssl_proxies(project_id=DUMMY_PROJECT3_ID)\n\n    assert len(items) == 1\n    assert items[0].name == 'ssl-proxy'\n    assert (items[0].full_path ==\n            'projects/gcpdiag-lb3-aaaa/global/targetSslProxies/ssl-proxy')\n\n  def test_get_lb_insights_for_a_project(self):\n    context = models.Context(project_id=DUMMY_PROJECT2_ID)\n    lb_insights = lb.get_lb_insights_for_a_project(context.project_id)\n\n    assert lb_insights[0].is_health_check_port_mismatch_insight\n    assert lb_insights[1].is_firewall_rule_insight\n"
  },
  {
    "path": "gcpdiag/queries/logs.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Queries related to Cloud Logging.\n\nThe main functionality is querying log entries, which is supposed to be used as\nfollows:\n\n1. Call query() with the logs query parameters that you need. This\n   returns a LogsQuery object which can be used to retrieve the logs later.\n\n2. Call execute_queries() to execute all log query jobs. Similar\n   queries will be grouped together to minimize the number of required API\n   calls.\n   Multiple queries will be done in parallel, while always respecting the\n   Cloud Logging limit of 60 queries per 60 seconds.\n\n3. Use the entries property on the LogsQuery object to iterate over the fetched\n   logs. Note that the entries are not guaranteed to be filtered by what was\n   given in the \"filter_str\" argument to query(), you will need to filter out\n   the entries in code as well when iterating over the log entries.\n\nSide note: this module is not called 'logging' to avoid using the same name as\nthe standard python library for logging.\n\"\"\"\n\nimport concurrent.futures\nimport dataclasses\nimport datetime\nimport logging\nimport threading\nfrom typing import (Any, Deque, Dict, List, Mapping, Optional, Sequence, Set,\n                    Tuple, Union)\n\nimport dateutil.parser\nimport ratelimit\nfrom boltons.iterutils import get_path\nfrom googleapiclient import errors\n\nfrom gcpdiag import caching, config, executor, models, utils\nfrom gcpdiag.queries import apis\n\n\n@dataclasses.dataclass\nclass _LogsQueryJob:\n  \"\"\"A group of log queries that will be executed with a single API call.\"\"\"\n  project_id: str\n  resource_type: str\n  log_name: str\n  filters: Set[str]\n  future: Optional[concurrent.futures.Future] = None\n\n\nclass LogsQuery:\n  \"\"\"A log search job that was started with prefetch_logs().\"\"\"\n  job: _LogsQueryJob\n\n  def __init__(self, job):\n    self.job = job\n\n  @property\n  def entries(self) -> Sequence:\n    if not self.job.future:\n      raise RuntimeError(\n          'log query was\\'t executed. did you forget to call execute_queries()?'\n      )\n    elif self.job.future.running():\n      logging.debug(\n          'waiting for logs query results (project: %s, resource type: %s)',\n          self.job.project_id, self.job.resource_type)\n    return self.job.future.result()\n\n\njobs_todo: Dict[Tuple[str, str, str], _LogsQueryJob] = {}\n\n\nclass LogEntryShort:\n  \"\"\"A common log entry\"\"\"\n  _text: str\n  _timestamp: Optional[datetime.datetime]\n\n  def __init__(self, raw_entry):\n    if isinstance(raw_entry, dict):\n      self._text = get_path(raw_entry, ('textPayload',), default='')\n      self._timestamp = log_entry_timestamp(raw_entry)\n\n    if isinstance(raw_entry, str):\n      self._text = raw_entry\n      # we could extract timestamp from serial entries\n      # but they are not always present\n      # and may be unreliable as we don't know the system clock setting\n      self._timestamp = None\n\n  @property\n  def text(self):\n    return self._text\n\n  @property\n  def timestamp(self):\n    return self._timestamp\n\n  @property\n  def timestamp_iso(self):\n    if self._timestamp:\n      return self._timestamp.astimezone().isoformat(sep=' ', timespec='seconds')\n    return None\n\n\nclass LogExclusion(models.Resource):\n  \"\"\"A log exclusion entry\"\"\"\n  _resource_data: dict\n  project_id: str\n\n  def __init__(self, project_id: str, resource_data: dict):\n    super().__init__(project_id)\n    self._resource_data = resource_data\n\n  @property\n  def full_path(self) -> str:\n    return self._resource_data['name']\n\n  @property\n  def filter(self) -> str:\n    return self._resource_data['filter']\n\n  @property\n  def disabled(self) -> bool:\n    if 'disabled' in self._resource_data:\n      return self._resource_data['disabled']\n    return False\n\n\ndef query(project_id: str, resource_type: str, log_name: str,\n          filter_str: str) -> LogsQuery:\n  # Aggregate by project_id, resource_type, log_name\n  job_key = (project_id, resource_type, log_name)\n  job = jobs_todo.setdefault(\n      job_key,\n      _LogsQueryJob(\n          project_id=project_id,\n          resource_type=resource_type,\n          log_name=log_name,\n          filters=set(),\n      ))\n  job.filters.add(filter_str)\n  return LogsQuery(job=job)\n\n\n@ratelimit.sleep_and_retry\n@ratelimit.limits(calls=config.get('logging_ratelimit_requests'),\n                  period=config.get('logging_ratelimit_period_seconds'))\ndef _ratelimited_execute(req):\n  \"\"\"Wrapper to req.execute() with rate limiting to avoid hitting quotas.\"\"\"\n  try:\n    return req.execute(num_retries=config.API_RETRIES)\n  except errors.HttpError as err:\n    logging.error('failed to execute logging request for request %s. Error: %s',\n                  req, err)\n    raise utils.GcpApiError(err) from err\n\n\ndef _execute_query_job(job: _LogsQueryJob, context: models.Context):  ##  pylint: disable=unused-argument\n  thread = threading.current_thread()\n  thread.name = f'log_query:{job.log_name}'\n  logging_api = apis.get_api('logging', 'v2', job.project_id)\n\n  # Convert \"within\" relative time to an absolute timestamp.\n  start_time = datetime.datetime.now(\n      datetime.timezone.utc) - datetime.timedelta(\n          days=config.get('within_days'))\n  filter_lines = ['timestamp>\"%s\"' % start_time.isoformat(timespec='seconds')]\n  filter_lines.append('resource.type=\"%s\"' % job.resource_type)\n  if job.log_name.startswith('log_id('):\n    # Special case: log_id(logname)\n    # https://cloud.google.com/logging/docs/view/logging-query-language#functions\n    filter_lines.append(job.log_name)\n  else:\n    filter_lines.append('logName=\"%s\"' % job.log_name)\n  if len(job.filters) == 1:\n    filter_lines.append('(' + next(iter(job.filters)) + ')')\n  else:\n    filter_lines.append(\n        '(' + ' OR '.join(['(' + val + ')' for val in sorted(job.filters)]) +\n        ')')\n  filter_str = '\\n'.join(filter_lines)\n  logging.debug('searching logs in project %s (resource type: %s)',\n                job.project_id, job.resource_type)\n  # Fetch all logs and put the results in temporary storage (diskcache.Deque)\n  deque = caching.get_tmp_deque('tmp-logs-')\n  req = logging_api.entries().list(\n      body={\n          'resourceNames': [f'projects/{job.project_id}'],\n          'filter': filter_str,\n          'orderBy': 'timestamp desc',\n          'pageSize': config.get('logging_page_size')\n      })\n  fetched_entries_count = 0\n  query_pages = 0\n  query_start_time = datetime.datetime.now()\n  while req is not None:\n    query_pages += 1\n    res = _ratelimited_execute(req)\n    if 'entries' in res:\n      for e in res['entries']:\n        fetched_entries_count += 1\n        deque.appendleft(e)\n\n    # Verify that we aren't above limits, exit otherwise.\n    if fetched_entries_count > config.get('logging_fetch_max_entries'):\n      logging.warning(\n          'maximum number of log entries (%d) reached (project: %s, query: %s).',\n          config.get('logging_fetch_max_entries'), job.project_id,\n          filter_str.replace('\\n', ' AND '))\n      return deque\n    run_time = (datetime.datetime.now() - query_start_time).total_seconds()\n    if run_time >= config.get('logging_fetch_max_time_seconds'):\n      logging.warning(\n          'maximum query runtime for log query reached (project: %s, query: %s).',\n          job.project_id, filter_str.replace('\\n', ' AND '))\n      return deque\n    req = logging_api.entries().list_next(req, res)\n    if req is not None:\n      logging.debug(\n          'still fetching logs (project: %s, resource type: %s, max wait: %ds)',\n          job.project_id, job.resource_type,\n          config.get('logging_fetch_max_time_seconds') - run_time)\n\n  query_end_time = datetime.datetime.now()\n  logging.debug('logging query run time: %s, pages: %d, query: %s',\n                query_end_time - query_start_time, query_pages,\n                filter_str.replace('\\n', ' AND '))\n\n  return deque\n\n\n@caching.cached_api_call\ndef realtime_query(project_id,\n                   filter_str,\n                   start_time,\n                   end_time,\n                   disable_paging=False):\n  \"\"\"Intended for use in only runbooks. use logs.query() for lint rules.\"\"\"\n  logging_api = apis.get_api('logging', 'v2', project_id)\n\n  filter_lines = [filter_str]\n  filter_lines.append('timestamp>\"%s\"' %\n                      start_time.isoformat(timespec='seconds'))\n  filter_lines.append('timestamp<\"%s\"' % end_time.isoformat(timespec='seconds'))\n  filter_str = '\\n'.join(filter_lines)\n  logging.debug('searching logs in project %s for logs between %s and %s',\n                project_id, str(start_time), str(end_time))\n  deque = Deque()\n  req = logging_api.entries().list(\n      body={\n          'resourceNames': [f'projects/{project_id}'],\n          'filter': filter_str,\n          'orderBy': 'timestamp desc',\n          'pageSize': config.get('logging_page_size')\n      })\n  fetched_entries_count = 0\n  query_pages = 0\n  query_start_time = datetime.datetime.now()\n  while req is not None:\n    query_pages += 1\n    res = _ratelimited_execute(req)\n    if 'entries' in res:\n      for e in res['entries']:\n        fetched_entries_count += 1\n        deque.appendleft(e)\n\n    # Verify that we aren't above limits, exit otherwise.\n    if fetched_entries_count > config.get('logging_fetch_max_entries'):\n      logging.warning(\n          'maximum number of log entries (%d) reached (project: %s, query:'\n          ' %s).',\n          config.get('logging_fetch_max_entries'),\n          project_id,\n          filter_str.replace('\\n', ' AND '),\n      )\n      return deque\n    run_time = (datetime.datetime.now() - query_start_time).total_seconds()\n    if run_time >= config.get('logging_fetch_max_time_seconds'):\n      logging.warning(\n          'maximum query runtime for log query reached (project: %s, query:'\n          ' %s).',\n          project_id,\n          filter_str.replace('\\n', ' AND '),\n      )\n      return deque\n    if disable_paging:\n      break\n    req = logging_api.entries().list_next(req, res)\n    if req is not None:\n      logging.debug(\n          'still fetching logs (project: %s, max wait: %ds)',\n          project_id,\n          config.get('logging_fetch_max_time_seconds') - run_time,\n      )\n\n  query_end_time = datetime.datetime.now()\n  logging.debug(\n      'logging query run time: %s, pages: %d, query: %s',\n      query_end_time - query_start_time,\n      query_pages,\n      filter_str.replace('\\n', ' AND '),\n  )\n\n  return deque\n\n\ndef execute_queries(query_executor: executor.ContextAwareExecutor,\n                    context: models.Context):\n  global jobs_todo\n  jobs_executing = jobs_todo\n  jobs_todo = {}\n  for job in jobs_executing.values():\n    job.future = query_executor.submit(_execute_query_job, job, context)\n\n\ndef log_entry_timestamp(log_entry: Mapping[str, Any]) -> datetime.datetime:\n  # Use receiveTimestamp so that we don't have any time synchronization issues\n  # (i.e. don't trust the timestamp field)\n  timestamp = log_entry.get('receiveTimestamp', None)\n  if timestamp:\n    return dateutil.parser.parse(timestamp)\n  return timestamp\n\n\ndef format_log_entry(log_entry: dict) -> str:\n  \"\"\"Format a log_entry, as returned by LogsQuery.entries to a simple one-line\n  string with the date and message.\"\"\"\n  log_message = None\n  if 'jsonPayload' in log_entry:\n    for key in ['message', 'MESSAGE']:\n      if key in log_entry['jsonPayload']:\n        log_message = log_entry['jsonPayload'][key]\n        break\n  if log_message is None:\n    log_message = log_entry.get('textPayload')\n  log_date = log_entry_timestamp(log_entry)\n  log_date_str = log_date.astimezone().isoformat(sep=' ', timespec='seconds')\n  return f'{log_date_str}: {log_message}'\n\n\ndef exclusions(project_id: str) -> Union[List[LogExclusion], None]:\n  logging_api = apis.get_api('logging', 'v2', project_id)\n  if not apis.is_enabled(project_id, 'logging'):\n    return None\n\n  log_exclusions: List[LogExclusion] = []\n\n  fetched_entries_count = 0\n  req = logging_api.exclusions().list(parent=f'projects/{project_id}')\n  while req is not None:\n    res = req.execute(num_retries=config.API_RETRIES)\n    fetched_entries_count += 1\n    if res:\n      for log_exclusion_resp in res['exclusions']:\n        log_exclusions.append(LogExclusion(project_id, log_exclusion_resp))\n    req = logging_api.exclusions().list_next(req, res)\n    if req is not None:\n      # pylint: disable=logging-fstring-interpolation\n      logging.debug(f'still fetching log exclusions for project {project_id}')\n      # pylint: enable=logging-fstring-interpolation\n  return log_exclusions\n"
  },
  {
    "path": "gcpdiag/queries/logs_helper/__init__.py",
    "content": "\"\"\" Simple decorator injecting real logs.query into PureLogsQuery \"\"\"\n\nfrom gcpdiag.queries import logs\n\nfrom .logs_query import LogsQuery as PureLogsQuery\nfrom .search_exprs import AnyREFound, Equals, REFound\n\n\nclass LogsQuery:\n  \"\"\" Simple decorator injecting real logs.query into PureLogsQuery \"\"\"\n\n  def __init__(self, *args, **kwargs):\n    self._pure_logs_query = PureLogsQuery(logs_query_fn=logs.query,\n                                          *args,\n                                          **kwargs)\n\n  def mk_query(self):\n    self._pure_logs_query.mk_query()\n\n  @property\n  def has_matching_entries(self):\n    return self._pure_logs_query.has_matching_entries\n\n  def get_unique(self, fn):\n    return self._pure_logs_query.get_unique(fn)\n"
  },
  {
    "path": "gcpdiag/queries/logs_helper/logs_query.py",
    "content": "\"\"\" Helper to work with gcpdiag.queries.logs module \"\"\"\nfrom functools import cached_property\n\n\nclass LogsQuery:\n  \"\"\"\n  Encapsulates gcpdiag queries to Cloud Logging\n\n  By default gcpdiag logs module combines different logging queries\n  into a single query. Therefore we might by simply inspecting the output\n  of gcpdiag's logs module query we might face unrelated log entries. So\n  we have to filter entries again.\n\n  This helper class helps with accomplishing this double filtering.\n\n  It receives a parameter search_exprs, which contains a list of classes\n  (see logs_helper/logs_query.py) encapsulating search operations both\n  for Cloud Logging filter and later python filter.\n\n  Example:\n    LogsQuery(\n      ...\n      search_exprs=[\n        REFound(field='textPayload', re_exp='.*hello world.*'),\n      ],\n      ...\n    )\n\n    is basically the same as fetching textPayload=~'.*hello world.*' from\n    Cloud Logging using logs.query and then filter, like:\n\n    if logs_by_project.get(context.project_id) and \\\n       logs_by_project[context.project_id].entries:\n      for log_entry in logs_by_project[context.project_id].entries:\n        # Filter out non-relevant log entries.\n        if re.match('.*hello world.*', log_entry['textPayload']) and ...:\n          continue\n\n        # Do something with the matching entry\n\n  it abstracts usual questions we're asking to Cloud Logging:\n    - if we have any such entries at all (has_matching_entries method)\n    - extract a list of unique values from all relevant log entries\n      (get_unique method)\n      Example - getting unique dataflow job ids that have matching entries:\n\n        def prepare_rule(...):\n          global query\n          query = LogsQuery(...)\n          query.mk_query()\n\n        def run_rule(...):\n          unique_jobs = logs_query.get_unique(\n            lambda e: get_path(e, ('resource', 'labels', 'job_name'), default='unknown job')\n          )\n\n      This will give us unique resource.labels.job_name values found among matching entries.\n\n\n  IMPORTANT:\n    gcpdiag's logs.query are supposed to be used only in prepare_rule(), so\n    LogsQuery needs to be defined and run (mk_query method) there as well.\n\n  \"\"\"\n\n  def __init__(self, project_id, resource_type, log_name, search_exprs,\n               logs_query_fn):\n    self._project_id = project_id\n    self._resource_type = resource_type\n    self._log_name = log_name\n    self._search_exprs = search_exprs\n    self._logs_query_fn = logs_query_fn\n    self.project_id = None\n    self._result = None\n\n  def mk_query(self):\n    self._result = self._logs_query_fn(project_id=self._project_id,\n                                       resource_type=self._resource_type,\n                                       log_name=self._log_name,\n                                       filter_str=self._stackdriver_expr)\n\n  @cached_property\n  def has_matching_entries(self):\n    if not self._result or not self._result.entries:\n      return False\n    return any(self._is_log_entry_matches(e) for e in self._result.entries)\n\n  def get_unique(self, fn):\n    if not self._result or not self._result.entries:\n      return set()\n    return {\n        fn(e) for e in self._result.entries if self._is_log_entry_matches(e)\n    }\n\n  @property\n  def _stackdriver_expr(self):\n    return ' AND '.join(e.stackdriver_expr for e in self._search_exprs)\n\n  def _is_log_entry_matches(self, log_entry):\n    return all(e.is_log_entry_matches(log_entry) for e in self._search_exprs)\n"
  },
  {
    "path": "gcpdiag/queries/logs_helper/logs_query_test.py",
    "content": "\"\"\" Unit tests for LogsQuery \"\"\"\nfrom unittest import TestCase\n\nfrom boltons.iterutils import get_path\n\nfrom .logs_query import LogsQuery\nfrom .search_exprs import Equals\n\n\nclass FakeLogsResult:\n\n  def __init__(self, entries):\n    self.entries = entries\n\n\nclass FakeLogsQueryFn:\n  \"\"\" Testing double for gcpdiag.queries.logs.query \"\"\"\n\n  def __init__(self, entries):\n    self._entries = entries\n\n  def __call__(self, project_id, resource_type, log_name, filter_str):\n    key = (project_id, resource_type, log_name, filter_str)\n    print(key)\n    if key not in self._entries:\n      raise RuntimeError(f'Unexpected call {key}')\n    return self._entries[key]\n\n\nENTRIES1 = [\n    {\n        'one': {\n            'two': 'five'\n        }\n    },\n    {\n        'one': {\n            'two': 'three'\n        }\n    },\n    {\n        'one': {\n            'two': 'six'\n        }\n    },\n    {\n        'one': {\n            'three': 'three'\n        }\n    },\n]\n\nENTRIES2 = [\n    {\n        'one': {\n            'two': 'five',\n            'data': 'alpha'\n        }\n    },\n    {\n        'one': {\n            'two': 'eight',\n            'data': 'beta'\n        }\n    },\n    {\n        'one': {\n            'two': 'eight',\n            'data': 'gamma'\n        }\n    },\n    {\n        'one': {\n            'two': 'six'\n        }\n    },\n    {\n        'one': {\n            'two': 'eight'\n        }\n    },\n    {\n        'one': {\n            'two': 'eight',\n            'data': 'gamma'\n        }\n    },\n]\n\n\nclass TestLogsQuery(TestCase):\n  \"\"\" Unit tests for LogsQuery \"\"\"\n\n  def setUp(self):\n    self._logs_query_fn = FakeLogsQueryFn(\n        entries={\n            ('mytestproject', 'mytestresource', 'mytestlogname', 'one.two=\"three\"'):\n                FakeLogsResult(ENTRIES1),\n            ('mytestproject', 'mytestresource', 'mytestlogname', 'one.two=\"seven\"'):\n                FakeLogsResult(ENTRIES1),\n            ('mytestproject', 'mytestresource', 'mytestlogname', 'one.two=\"eight\"'):\n                FakeLogsResult(ENTRIES2),\n            ('emptylogs', 'mytestresource', 'mytestlogname', 'one.two=\"three\"'):\n                FakeLogsResult([]),\n            ('noresult', 'mytestresource', 'mytestlogname', 'one.two=\"three\"'):\n                FakeLogsResult([]),\n        })\n\n  def _create_query(self, search_exprs, project_id=None):\n    return LogsQuery(project_id=project_id or 'mytestproject',\n                     resource_type='mytestresource',\n                     log_name='mytestlogname',\n                     search_exprs=search_exprs,\n                     logs_query_fn=self._logs_query_fn)\n\n  def test_no_result(self):\n    query = self._create_query([Equals(field='one.two', value='three')],\n                               project_id='noresult')\n    query.mk_query()\n    self.assertFalse(query.has_matching_entries)\n\n  def test_empty_entries(self):\n    query = self._create_query([Equals(field='one.two', value='three')],\n                               project_id='emptylogs')\n    query.mk_query()\n    self.assertFalse(query.has_matching_entries)\n\n  def test_found(self):\n    query = self._create_query([Equals(field='one.two', value='three')])\n    query.mk_query()\n    self.assertTrue(query.has_matching_entries)\n\n  def test_not_found(self):\n    query = self._create_query([Equals(field='one.two', value='seven')])\n    query.mk_query()\n    self.assertFalse(query.has_matching_entries)\n\n  def test_unique(self):\n    query = self._create_query([Equals(field='one.two', value='eight')])\n    query.mk_query()\n    unique = query.get_unique(\n        lambda e: get_path(e, ('one', 'data'), default='unknown'))\n    self.assertSetEqual(unique, {'unknown', 'beta', 'gamma'})\n\n  def test_unique_found(self):\n    query = self._create_query([Equals(field='one.two', value='eight')])\n    query.mk_query()\n    unique = query.get_unique(\n        lambda e: get_path(e, ('one', 'data'), default='unknown'))\n    self.assertSetEqual(unique, {'unknown', 'beta', 'gamma'})\n"
  },
  {
    "path": "gcpdiag/queries/logs_helper/search_exprs.py",
    "content": "\"\"\" Search terms for LogsQueres \"\"\"\nimport re\nfrom functools import cached_property\n\nfrom boltons.iterutils import get_path\n\n\nclass Equals:\n  \"\"\"\n  Filter log entries that has field=value\n\n  Example:\n    query = LogsQuery(\n      ...\n      search_exprs=[\n        Equals(\n          field='labels.hello.world',\n          value='forty two',\n        ),\n      ],\n      ...\n    )\n    query.mk_query()\n  \"\"\"\n\n  def __init__(self, field, value):\n    self._field = field\n    self._value = value\n\n  @property\n  def stackdriver_expr(self):\n    return f'{self._field}=\"{self._value}\"'\n\n  def is_log_entry_matches(self, log_entry):\n    value = get_path(log_entry, self._field.split('.'), default=None)\n    if value is None:\n      return False\n    return value == self._value\n\n\nclass REFound:\n  \"\"\"\n  Filter log entries that contain specified regex in the specified field\n\n  Example:\n    query = LogsQuery(\n      ...\n      search_exprs=[\n        REFound(\n          field='labels.hello.world',\n          re_exp='Hello.*World',\n        ),\n      ],\n      ...\n    )\n    query.mk_query()\n  \"\"\"\n\n  def __init__(self, field, re_exp):\n    self._field = field\n    self._re_exp = re_exp\n\n  @property\n  def stackdriver_expr(self):\n    return f'{self._field}=~\"{self._re_exp}\"'\n\n  def is_log_entry_matches(self, log_entry):\n    value = get_path(log_entry, self._field.split('.'), default=None)\n    return bool(self._compiled_re.search(value))\n\n  @cached_property\n  def _compiled_re(self):\n    return re.compile(self._re_exp)\n\n\nclass AnyREFound:\n  \"\"\"\n  Filter log entries that contain any of the specified regexes in the\n  specified field\n\n  Example:\n    query = LogsQuery(\n      ...\n      search_exprs=[\n        AnyREFound(\n          field='labels.hello.world',\n          re_exps=[\n            'Hello.*World',\n            'world.*hello',\n            'something [Ee]lse',\n          ],\n        ),\n      ],\n      ...\n    )\n    query.mk_query()\n  \"\"\"\n\n  def __init__(self, field, re_exps):\n    self._field = field\n    self._re_exps = re_exps\n\n  @property\n  def stackdriver_expr(self):\n    return '{field}=~({re_list})'.format(field=self._field,\n                                         re_list=' OR '.join(\n                                             f'\"{p}\"' for p in self._re_exps))\n\n  def is_log_entry_matches(self, log_entry):\n    value = get_path(log_entry, self._field.split('.'), default=None)\n    return any(r.search(value) for r in self._compiled_re_exps)\n\n  @cached_property\n  def _compiled_re_exps(self):\n    return [re.compile(p) for p in self._re_exps]\n"
  },
  {
    "path": "gcpdiag/queries/logs_helper/search_exprs_test.py",
    "content": "\"\"\" Tests for search expressions for LogsQuery \"\"\"\nfrom unittest import TestCase\n\nfrom .search_exprs import AnyREFound, Equals, REFound\n\n\nclass TestEquals(TestCase):\n  \"\"\" Test Equals search expression \"\"\"\n\n  def test_stackdriver_expr(self):\n    expr = Equals(field='hello', value='world')\n    self.assertEqual(expr.stackdriver_expr, 'hello=\"world\"')\n\n  def test_field_equals(self):\n    entry = {'hello': 'world'}\n    expr = Equals(field='hello', value='world')\n    self.assertTrue(expr.is_log_entry_matches(entry))\n\n  def test_field_not_equals(self):\n    entry = {'hello': 'world'}\n    expr = Equals(field='hello', value='42')\n    self.assertFalse(expr.is_log_entry_matches(entry))\n\n  def test_nested_stackdriver_expr(self):\n    expr = Equals(field='one.two.three', value='four')\n    self.assertEqual(expr.stackdriver_expr, 'one.two.three=\"four\"')\n\n  def test_nested_field_equals(self):\n    entry = {'one': {'two': {'three': 'four'}}}\n    expr = Equals(field='one.two.three', value='four')\n    self.assertTrue(expr.is_log_entry_matches(entry))\n\n  def test_nested_field_not_equals(self):\n    entry = {'one': {'two': {'three': 'four'}}}\n    expr = Equals(field='one.two.three', value='five')\n    self.assertFalse(expr.is_log_entry_matches(entry))\n\n\nclass TestREFound(TestCase):\n  \"\"\" Test TestREFound search expression \"\"\"\n\n  def test_stackdriver_expr(self):\n    expr = REFound(field='hello', re_exp='.*world.*')\n    self.assertEqual(expr.stackdriver_expr, 'hello=~\".*world.*\"')\n\n  def test_found(self):\n    entry = {'one': 'two three four'}\n    expr = REFound(field='one', re_exp='.*three.*')\n    self.assertTrue(expr.is_log_entry_matches(entry))\n\n  def test_not_found(self):\n    entry = {'one': 'two three four'}\n    expr = REFound(field='one', re_exp='.*five.*')\n    self.assertFalse(expr.is_log_entry_matches(entry))\n\n  def test_nested_stackdriver_expr(self):\n    expr = REFound(field='one.two.three', re_exp='.*four.*')\n    self.assertEqual(expr.stackdriver_expr, 'one.two.three=~\".*four.*\"')\n\n  def test_nested_found(self):\n    entry = {'one': {'two': {'three': 'four five six'}}}\n    expr = REFound(field='one.two.three', re_exp='.*five.*')\n    self.assertTrue(expr.is_log_entry_matches(entry))\n\n  def test_nested_not_found(self):\n    entry = {'one': {'two': {'three': 'four five six'}}}\n    expr = REFound(field='one.two.three', re_exp='.*seven.*')\n    self.assertFalse(expr.is_log_entry_matches(entry))\n\n\nclass TestAnyREFound(TestCase):\n  \"\"\" Test TestAnyREFound search expression \"\"\"\n\n  def test_stackdriver_expr_one_re(self):\n    expr = AnyREFound(field='one', re_exps=['.*two.*'])\n    self.assertEqual(expr.stackdriver_expr, 'one=~(\".*two.*\")')\n\n  def test_stackdriver_expr_many_res(self):\n    expr = AnyREFound(field='one', re_exps=['.*two.*', 'three', 'four'])\n    self.assertEqual(expr.stackdriver_expr,\n                     'one=~(\".*two.*\" OR \"three\" OR \"four\")')\n\n  def test_found(self):\n    entry = {'one': 'two three four'}\n    expr = AnyREFound(field='one', re_exps=['.*three.*', '.*five.*', '.*six.*'])\n    self.assertTrue(expr.is_log_entry_matches(entry))\n\n  def test_not_found(self):\n    entry = {'one': 'two three four'}\n    expr = AnyREFound(field='one', re_exps=['.*five.*', '.*six.*', '.*seven.*'])\n    self.assertFalse(expr.is_log_entry_matches(entry))\n\n  def test_nested_stackdriver_expr_many_res(self):\n    expr = AnyREFound(field='one.two.three',\n                      re_exps=['.*four.*', 'five', 'six'])\n    self.assertEqual(expr.stackdriver_expr,\n                     'one.two.three=~(\".*four.*\" OR \"five\" OR \"six\")')\n\n  def test_nested_found(self):\n    entry = {'one': {'two': {'three': 'five four six'}}}\n    expr = AnyREFound(field='one.two.three',\n                      re_exps=['.*four.*', '.*seven.*', '.*eight.*'])\n    self.assertTrue(expr.is_log_entry_matches(entry))\n\n  def test_nested_not_found(self):\n    entry = {'one': {'two': {'three': 'five four six'}}}\n    expr = AnyREFound(field='one.two.three',\n                      re_exps=['.*seven.*', '.*eight.*', '.*nine.*'])\n    self.assertFalse(expr.is_log_entry_matches(entry))\n"
  },
  {
    "path": "gcpdiag/queries/logs_stub.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Stub API calls used in logs.py for testing.\n\nInstead of doing real API calls, we return test JSON data.\n\"\"\"\n\n# pylint: disable=unused-argument\n# pylint: disable=invalid-name\n\nfrom gcpdiag import utils\nfrom gcpdiag.queries import apis_stub\n\nGKE1_PROJECT = 'gcpdiag-gke1-aaaa'\n\nlogging_body = None\n\n\nclass LoggingApiStub:\n  \"\"\"Mock object to simulate container api calls.\"\"\"\n  body: str\n\n  def __init__(self, mock_state='init', project_id=None, zone=None, page=1):\n    self.mock_state = mock_state\n    self.project_id = project_id\n    self.zone = zone\n    self.page = page\n\n  def exclusions(self):\n    return LoggingApiStub('exclusions')\n\n  def entries(self):\n    return LoggingApiStub('entries')\n\n  def list(self, parent=None, body=None):\n    if self.mock_state == 'entries':\n      if body:\n        global logging_body\n        logging_body = body\n        project = utils.get_project_by_res_name(body['resourceNames'][0])\n        return apis_stub.RestCallStub(project, 'logging-entries-1')\n    elif self.mock_state == 'exclusions':\n      if parent:\n        return apis_stub.RestCallStub(project_id=parent.split('/')[1],\n                                      json_basename='log-exclusions')\n\n  def list_next(self, req, res):\n    del req, res\n"
  },
  {
    "path": "gcpdiag/queries/logs_test.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Test code in logs.py.\"\"\"\n\nimport concurrent.futures\nimport re\nimport time\nfrom unittest import mock\n\nfrom gcpdiag import models\nfrom gcpdiag.queries import apis_stub, logs, logs_stub\n\nDUMMY_PROJECT_ID = 'gcpdiag-gke1-aaaa'\nFIRST_INSERT_ID = '-tt9mudi768'\n\n\n@mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)\nclass TestLogs:\n  \"\"\"Test logs.py functions.\"\"\"\n\n  def test_single_query(self):\n    context = models.Context(project_id=DUMMY_PROJECT_ID)\n    query = logs.query(\n        project_id=context.project_id,\n        resource_type='gce_instance',\n        log_name='fake.log',\n        filter_str='filter1',\n    )\n\n    with concurrent.futures.ThreadPoolExecutor(max_workers=1) as executor:\n      logs.execute_queries(executor, context)\n      # verify the number of entries\n      all_entries = list(query.entries)\n      assert len(all_entries) > 0\n      # verify that the first log entry is correct (the earliest one)\n      first = next(iter(query.entries))\n      assert first['insertId'] == FIRST_INSERT_ID\n\n  def test_aggregated_query(self):\n    \"\"\"Verify that multiple queries get aggregated into one.\"\"\"\n    context = models.Context(project_id=DUMMY_PROJECT_ID)\n    logs.query(project_id=context.project_id,\n               resource_type='gce_instance',\n               log_name='fake.log',\n               filter_str='filter1')\n    logs.query(project_id=context.project_id,\n               resource_type='gce_instance',\n               log_name='fake.log',\n               filter_str='filter2')\n    with concurrent.futures.ThreadPoolExecutor(max_workers=1) as executor:\n      logs.execute_queries(executor, context)\n    # verify the filter that is used\n    assert re.match(\n        r'timestamp>\"\\d\\d\\d\\d-\\d\\d-\\d\\dT\\d\\d:\\d\\d:\\d\\d\\+00:00\"\\n'\n        r'resource.type=\"gce_instance\"\\n'\n        r'logName=\"fake.log\"\\n'\n        r'\\(\\(filter1\\) OR \\(filter2\\)\\)', logs_stub.logging_body['filter'])\n    # also verify other parameters of the job\n    assert logs_stub.logging_body['orderBy'] == 'timestamp desc'\n    assert logs_stub.logging_body['pageSize'] == 500\n    assert logs_stub.logging_body['resourceNames'] == [\n        'projects/gcpdiag-gke1-aaaa'\n    ]\n\n  def test_format_log_entry(self):\n    with mock.patch.dict('os.environ', {'TZ': 'America/Los_Angeles'}):\n      time.tzset()\n      assert logs.format_log_entry({\n          'jsonPayload': {\n              'message': 'test message'\n          },\n          'receiveTimestamp': '2022-03-24T13:26:37.370862686Z'\n      }) == '2022-03-24 06:26:37-07:00: test message'\n      assert logs.format_log_entry({\n          'jsonPayload': {\n              'MESSAGE': 'test message'\n          },\n          'receiveTimestamp': '2022-03-24T13:26:37.370862686Z'\n      }) == '2022-03-24 06:26:37-07:00: test message'\n      assert logs.format_log_entry({\n          'textPayload': 'test message',\n          'receiveTimestamp': '2022-03-24T13:26:37.370862686Z'\n      }) == '2022-03-24 06:26:37-07:00: test message'\n"
  },
  {
    "path": "gcpdiag/queries/looker.py",
    "content": "# Copyright 2025 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Queries related to GCP Looker Core.\"\"\"\nimport logging\nfrom datetime import datetime, timedelta, timezone\nfrom typing import Dict, List, MutableMapping\n\nimport googleapiclient.errors\n\nfrom gcpdiag import caching, config, models, utils\nfrom gcpdiag.queries import apis, apis_utils\n\n\nclass Instance(models.Resource):\n  \"\"\"Represents a Looker Core Instance.\"\"\"\n  _resource_data: dict\n\n  def __init__(self, project_id, resource_data):\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n\n  @property\n  def name(self) -> str:\n    return self._resource_data['name']\n\n  @property\n  def full_path(self) -> str:\n    return self._resource_data['name']\n\n  @property\n  def short_path(self) -> str:\n    return '/'.join(self.full_path.split('/')[-4:])\n\n  @property\n  def status(self) -> str:\n    return self._resource_data.get('state', 'STATE_UNSPECIFIED')\n\n  @property\n  def create_time(self) -> str:\n    return self._resource_data.get('createTime', '')\n\n  @property\n  def update_time(self) -> str:\n    return self._resource_data.get('updateTime', '')\n\n  @property\n  def platform_edition(self) -> str:\n    return self._resource_data.get('platformEdition', '')\n\n  @property\n  def looker_version(self) -> str:\n    return self._resource_data.get('lookerVersion', '')\n\n  @property\n  def looker_uri(self) -> str:\n    return self._resource_data.get('lookerUri', '')\n\n\nclass Operation(models.Resource):\n  \"\"\"Represents Looker Core long-running operation.\"\"\"\n\n  def __init__(self, project_id, resource_data):\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n\n  @property\n  def full_path(self) -> str:\n    return self._resource_data.get('name', '')\n\n  @property\n  def name(self) -> str:\n    return self._resource_data['name'].split('/')[-1]\n\n  @property\n  def metadata(self) -> dict:\n    return self._resource_data.get('metadata', {})\n\n  @property\n  def done(self) -> bool:\n    return self._resource_data.get('done', False)\n\n  @property\n  def target(self) -> str:\n    return self._resource_data.get('metadata', {}).get('target', '')\n\n  @property\n  def verb(self) -> str:\n    return self._resource_data.get('metadata', {}).get('verb', '')\n\n  @property\n  def status(self) -> str:\n    return 'Completed' if self._resource_data.get('done') else 'In Progress'\n\n  @property\n  def location_id(self) -> str:\n    parts = self._resource_data.get('name', '').split('/')\n    return parts[3] if len(parts) > 3 else ''\n\n  @property\n  def instance_name(self) -> str:\n    parts = self.target.split('/')\n    return parts[5] if len(parts) >= 6 else ''\n\n  @property\n  def operation_type(self) -> str:\n    return self.verb\n\n  @property\n  def action(self) -> str:\n    if self.verb == 'update' and not self.done:\n      return 'Updating Instance'\n    else:\n      parts = self.target.split('/')\n      return parts[6] if len(parts) >= 7 else ''\n\n  @property\n  def create_time(self) -> datetime:\n    create_time_str = self._resource_data.get('metadata',\n                                              {}).get('createTime', '')\n    if create_time_str:\n      return datetime.fromisoformat(\n          create_time_str.rstrip('Z')).replace(tzinfo=timezone.utc)\n    return datetime.now(timezone.utc)\n\n\ndef _get_locations_to_scan(context: models.Context, looker_api) -> List[str]:\n  \"\"\"Returns a list of locations to scan based on the context.\"\"\"\n  if context.locations_pattern:\n    return str(context.locations_pattern.pattern).split('|')\n  try:\n    request = looker_api.projects().locations().list(\n        name=f'projects/{context.project_id}')\n    return [\n        loc['locationId'] for loc in apis_utils.list_all(\n            request=request,\n            next_function=looker_api.projects().locations().list_next,\n            response_keyword='locations')\n    ]\n  except googleapiclient.errors.HttpError as err:\n    logging.error('Error fetching locations: %s', err)\n    raise utils.GcpApiError(err) from err\n\n\n@caching.cached_api_call\ndef get_instances(context: models.Context) -> Dict[str, Instance]:\n  \"\"\"Get a list of Instances from the given GCP project.\"\"\"\n  instances: Dict[str, Instance] = {}\n  if not apis.is_enabled(context.project_id, 'looker'):\n    return instances\n  looker_api = apis.get_api('looker', 'v1', context.project_id)\n\n  try:\n    locations_to_scan = _get_locations_to_scan(context, looker_api)\n  except utils.GcpApiError as err:\n    raise err\n\n  for loc_id in locations_to_scan:\n    try:\n      parent_path = f'projects/{context.project_id}/locations/{loc_id}'\n      request = looker_api.projects().locations().instances().list(\n          parent=parent_path)\n      for inst in apis_utils.list_all(\n          request=request,\n          next_function=looker_api.projects().locations().instances().list_next,\n          response_keyword='instances'):\n        if not context.match_project_resource(resource=inst.get('name', '')):\n          continue\n        instance = Instance(project_id=context.project_id, resource_data=inst)\n        instances[instance.name] = instance\n    except googleapiclient.errors.HttpError as err:\n      logging.warning('Could not list instances for location %s: %s', loc_id,\n                      err)\n      continue\n  return instances\n\n\n@caching.cached_api_call\ndef get_operations(\n    context: models.Context\n) -> MutableMapping[str, MutableMapping[str, List[Operation]]]:\n  \"\"\"Get a list of recent operations from the given GCP project.\"\"\"\n  location_instance_operations: MutableMapping[str, MutableMapping[\n      str, List[Operation]]] = {}\n  if not apis.is_enabled(context.project_id, 'looker'):\n    return location_instance_operations\n\n  looker_api = apis.get_api('looker', 'v1', context.project_id)\n\n  now = context.parameters.get('now', datetime.now(timezone.utc))\n  one_day_ago = now - timedelta(days=1)\n\n  try:\n    locations_to_scan = _get_locations_to_scan(context, looker_api)\n  except utils.GcpApiError:\n    return {}\n\n  for location_id in locations_to_scan:\n    try:\n      op_request_name = f'projects/{context.project_id}/locations/{location_id}'\n      operations_request = looker_api.projects().locations().operations().list(\n          name=op_request_name)\n      for resp_op in apis_utils.list_all(request=operations_request,\n                                         next_function=looker_api.projects().\n                                         locations().operations().list_next,\n                                         response_keyword='operations'):\n        operation_details = looker_api.projects().locations().operations().get(\n            name=resp_op['name']).execute(num_retries=config.API_RETRIES)\n        operation = Operation(project_id=context.project_id,\n                              resource_data=operation_details)\n\n        if operation.create_time >= one_day_ago:\n          location_instance_operations.setdefault(operation.location_id,\n                                                  {}).setdefault(\n                                                      operation.instance_name,\n                                                      []).append(operation)\n    except googleapiclient.errors.HttpError as err:\n      logging.warning('Could not list operations for location %s: %s',\n                      location_id, err)\n      continue\n\n  return location_instance_operations\n"
  },
  {
    "path": "gcpdiag/queries/looker_stub.py",
    "content": "# Copyright 2025 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Stub API calls used in looker.py for testing.\"\"\"\n\nimport json\nimport re\nfrom datetime import datetime, timezone\n\nimport googleapiclient.errors\nimport httplib2\n\nfrom gcpdiag.queries import apis_stub\n\nDUMMY_PROJECT_NAME_FOR_STUB = 'gcpdiag-looker1-aaaa'\nDUMMY_OP_LOCATION = 'us-central1'\nDUMMY_OP_ID = 'operation-1'\n\n\nclass LookerApiStub(apis_stub.ApiStub):\n  \"\"\"Mock object for the Looker API.\"\"\"\n\n  def __init__(self, project_id=None):\n    super().__init__()\n    self.project_id = project_id or DUMMY_PROJECT_NAME_FOR_STUB\n    self._resource_type = None\n\n  class _HttpRequest:\n\n    def __init__(self, stub, resource_type, method, kwargs):\n      self._stub = stub\n      self._resource_type = resource_type\n      self._method = method\n      self._kwargs = kwargs\n\n    def execute(self, num_retries=0):\n      return self._stub.execute_request(self._resource_type, self._method,\n                                        self._kwargs, num_retries)\n\n  def projects(self):\n    return self\n\n  def locations(self):\n    self._resource_type = 'locations'\n    return self\n\n  def instances(self):\n    self._resource_type = 'instances'\n    return self\n\n  def operations(self):\n    self._resource_type = 'operations'\n    return self\n\n  def list(self, **kwargs):\n    if self._resource_type == 'instances':\n      return apis_stub.RestCallStub(self.project_id, 'looker-instances')\n    return self._HttpRequest(self, self._resource_type, 'list', kwargs)\n\n  def get(self, **kwargs):\n    if self._resource_type == 'instances':\n      name = kwargs.get('name')\n      m = re.match(r'projects/([^/]+)/locations/([^/]+)/instances/([^/]+)',\n                   name)\n      if not m:\n        raise KeyError('Invalid instance name format')\n      return apis_stub.RestCallStub(self.project_id, f'instance-{m.group(3)}')\n    return self._HttpRequest(self, self._resource_type, 'get', kwargs)\n\n  def get_operations(self, **kwargs):\n    return self._HttpRequest(self, 'operations', 'get', kwargs)\n\n\n# pylint: disable=useless-return\n\n  def list_next(self, previous_request, previous_response=None):\n    _, _ = previous_request, previous_response\n    return None\n\n  def execute_request(self, resource_type, method, kwargs, num_retries=0):\n    _ = num_retries\n\n    if resource_type == 'locations' and method == 'list':\n      parent_path = kwargs.get('name') or f'projects/{self.project_id}'\n      return {\n          'locations': [{\n              'name': f'{parent_path}/locations/{DUMMY_OP_LOCATION}',\n              'locationId': DUMMY_OP_LOCATION\n          }, {\n              'name': f'{parent_path}/locations/europe-west1',\n              'locationId': 'europe-west1'\n          }]\n      }\n\n    if resource_type == 'operations' and method == 'list':\n      ops = []\n      parent_path = kwargs.get('name')\n      if parent_path and DUMMY_OP_LOCATION in parent_path:\n        project_id = parent_path.split('/')[1]\n        ops.append({\n            'name': (f'projects/{project_id}/locations/{DUMMY_OP_LOCATION}/'\n                     f'operations/{DUMMY_OP_ID}'),\n            'metadata': {\n                'verb': 'update'\n            },\n            'done': False\n        })\n      return {'operations': ops}\n\n    if resource_type == 'operations' and method == 'get':\n      request_path = kwargs.get('name') or ''\n      if DUMMY_OP_ID in request_path and DUMMY_OP_LOCATION in request_path:\n        project_id = request_path.split('/')[1]\n        op_path = (\n            f'projects/{project_id}/locations/{DUMMY_OP_LOCATION}/operations/{DUMMY_OP_ID}'\n        )\n        target_path = (f'projects/{project_id}/locations/'\n                       f'{DUMMY_OP_LOCATION}/instances/'\n                       f'gcpdiag-test-01/databases/'\n                       f'my-db')\n        return {\n            'name': op_path,\n            'metadata': {\n                'createTime': datetime.now(timezone.utc).isoformat(),\n                'target': target_path,\n                'verb': 'update'\n            },\n            'done': True,\n            'response': {}\n        }\n      raise googleapiclient.errors.HttpError(\n          httplib2.Response({'status': 404}),\n          b'Operation not found by GET stub')\n\n    raise NotImplementedError(\n        f'API call not stubbed in LookerApiStub.execute_request: '\n        f'resource_type={resource_type}, method={method}')\n\n\nclass LookerInstanceRestCallStub(apis_stub.RestCallStub):\n  \"\"\"Mock object to simulate api calls for Looker instances.\"\"\"\n\n  def execute(self, num_retries=0):\n    _ = num_retries\n    json_dir = apis_stub.get_json_dir(self.project_id)\n    try:\n      with open(json_dir / 'looker-instances.json',\n                encoding='utf-8') as json_file:\n        return json.load(json_file)\n    except FileNotFoundError as exc:\n      raise googleapiclient.errors.HttpError(httplib2.Response({'status': 404}),\n                                             b'File not found') from exc\n"
  },
  {
    "path": "gcpdiag/queries/looker_test.py",
    "content": "# Copyright 2025 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test code in looker.py.\"\"\"\n\nimport datetime\nfrom datetime import timezone\nfrom unittest import mock\n\nfrom gcpdiag import models\nfrom gcpdiag.queries import apis_stub, looker\n\nDUMMY_PROJECT_NAME = 'gcpdiag-looker1-aaaa'\nDUMMY_I_NAME = f'projects/{DUMMY_PROJECT_NAME}/locations/us-central1/instances/gcpdiag-test-01'\nDUMMY_OP_LOCATION = ['us-central1']\nDUMMY_OP_ID = 'operation-1'\n\n# This FAKE_NOW must correspond to the DUMMY_TIMESTAMP in the stub\nFAKE_NOW = datetime.datetime.now(timezone.utc)\n\n\n@mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)\nclass TestInstance:\n  \"\"\"Test Looker.Instances.\"\"\"\n\n  def test_get_instances_by_project(self):\n    \"\"\"get_instances returns the number of instances in the given project.\"\"\"\n    context = models.Context(project_id=DUMMY_PROJECT_NAME,\n                             locations=DUMMY_OP_LOCATION)\n    instances = looker.get_instances(context)\n    assert DUMMY_I_NAME in instances\n    assert len(instances) >= 1\n\n\n@mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)\nclass TestOperation:\n  \"\"\"Test gcpdiag.queries.looker for operations.\"\"\"\n\n  def test_get_operations_by_project(self):\n    \"\"\"Test that get_operations retrieves and structures data correctly.\"\"\"\n    context = models.Context(project_id=DUMMY_PROJECT_NAME,\n                             locations=DUMMY_OP_LOCATION,\n                             parameters={'now': FAKE_NOW})\n    operations_by_location = looker.get_operations(context)\n    expected_instance_name = 'gcpdiag-test-01'\n    location_str = DUMMY_OP_LOCATION[0]\n    assert operations_by_location, 'The returned operations dictionary is empty.'\n    assert location_str in operations_by_location, (\n        f\"Location '{location_str}' not found as a key. \"\n        f'Keys: {list(operations_by_location.keys())}')\n    operations_at_location = operations_by_location[location_str]\n    assert operations_at_location, \\\n        f\"No operations found for location '{location_str}'.\"\n    assert expected_instance_name in operations_at_location, (\n        f\"Instance '{expected_instance_name}' not found for location \"\n        f\"'{location_str}'. Instance keys: {list(operations_at_location.keys())}\"\n    )\n    op_list = operations_at_location[expected_instance_name]\n    assert op_list and len(op_list) >= 1, (\n        f\"Expected at least one operation for instance '{expected_instance_name}'.\"\n    )\n    found_operation_1 = any(op.name == DUMMY_OP_ID for op in op_list)\n    assert found_operation_1, (\n        f\"Operation with ID '{DUMMY_OP_ID}' not found in the list for instance \"\n        f\"'{expected_instance_name}' in location '{location_str}'.\")\n"
  },
  {
    "path": "gcpdiag/queries/monitoring.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Queries related to Monitoring / Metrics / MQL.\"\"\"\n\nimport collections.abc\nimport datetime\nimport logging\nimport time\nfrom typing import Any, List, Mapping\n\nimport googleapiclient.errors\n\nfrom gcpdiag import config, utils\nfrom gcpdiag.queries import apis\n\n\n# see: https://cloud.google.com/monitoring/api/ref_v3/rest/v3/TypedValue\ndef _gcp_typed_values_to_python_list(\n    typed_values: List[Mapping[str, Any]]) -> List[Any]:\n  out_list: List[Any] = []\n  for val in typed_values:\n    if 'boolValue' in val:\n      out_list.append(int(val['boolValue']))\n    elif 'int64Value' in val:\n      out_list.append(int(val['int64Value']))\n    elif 'doubleValue' in val:\n      out_list.append(float(val['doubleValue']))\n    elif 'stringValue' in val:\n      out_list.append(val['stringValue'])\n    else:\n      raise RuntimeError('TypedValue type not supported: %s' % (val.keys()))\n  return out_list\n\n\ndef period_aligned_now(period_seconds: int) -> str:\n  \"\"\"Return a MQL date string for the current timestamp aligned to the given period.\n\n  This will return \"now - now%period\" in a MQL-parseable date string and is useful\n  to get stable results. See also: (internal)\n  \"\"\"\n\n  now = time.time()\n  now -= now % period_seconds\n  return time.strftime('%Y/%m/%d-%H:%M:%S+00:00', time.gmtime(now))\n\n\nclass TimeSeriesCollection(collections.abc.Mapping):\n  \"\"\"A mapping that stores Cloud Monitoring time series data.\n\n  Each time series is identified by a set of labels stored as\n  frozenset where the elements are strings 'label:value'. E.g.:\n\n      frozenset({'resource.cluster_name:regional',\n                 'resource.container_name:dnsmasq'})\n\n  The frozenset is used as key to store the time series data. The data\n  is a dictionary with the following fields:\n\n  - 'start_time': timestamp string (ISO format) for the earliest point\n  - 'end_time': timestamp string (ISO format) for the latest point\n  - 'values': point values in bi-dimensional array-like structure:\n    [[val1_t0, val2_t0], [val1_t1, val2_t1], ...]. The first dimension of\n    the array is time, and the second is the value columns (usually there will\n    be only one). The points are sorted chronologically (most recent point is\n    the latest in the list).\n  \"\"\"\n\n  _data: dict\n\n  def __init__(self):\n    # In order to ease the retrieval and matching, we store\n    # label:value pairs as strings in a frozenset object.\n    self._data = {}\n\n  def __str__(self):\n    return str(self._data)\n\n  def __repr__(self):\n    return repr(self._data)\n\n  def add_api_response(self, resource_data):\n    \"\"\"Add results to an existing TimeSeriesCollection object.\n\n    The monitoring API returns paginated results, so we need to be able to add\n    results to an existing TimeSeriesCollection object.\n    \"\"\"\n\n    if 'timeSeriesData' not in resource_data:\n      return\n\n    for ts in resource_data['timeSeriesData']:\n      # No data?\n      if not ts['pointData'] or not 'values' in ts['pointData'][0] or not ts[\n          'pointData'][0]['values']:\n        continue\n\n      # Use frozenset of label:value pairs as key to store the data\n      labels_dict = {}\n      if 'labelValues' in ts:\n        for i, value in enumerate(ts['labelValues']):\n          label_name = resource_data['timeSeriesDescriptor'][\n              'labelDescriptors'][i]['key']\n          if 'stringValue' in value:\n            labels_dict[label_name] = value['stringValue']\n        labels_frozenset = frozenset(f'{k}:{v}' for k, v in labels_dict.items())\n      else:\n        labels_frozenset = frozenset()\n\n      ts_point_data = ts['pointData']\n      self._data[labels_frozenset] = {\n          'labels':\n              labels_dict,\n          'start_time':\n              ts_point_data[-1]['timeInterval']['startTime'],\n          'end_time':\n              ts_point_data[0]['timeInterval']['endTime'],\n          'values': [\n              _gcp_typed_values_to_python_list(ts_point_data[i]['values'])\n              for i in reversed(range(len(ts_point_data)))\n          ]\n      }\n\n  def __getitem__(self, labels):\n    \"\"\"Returns the time series identified by labels (frozenset).\"\"\"\n    return self._data[labels]\n\n  def __iter__(self):\n    return iter(self._data)\n\n  def __len__(self):\n    return len(self._data)\n\n  def keys(self):\n    return self._data.keys()\n\n  def items(self):\n    return self._data.items()\n\n  def values(self):\n    return self._data.values()\n\n\ndef query(project_id: str, query_str: str) -> TimeSeriesCollection:\n  \"\"\"Do a monitoring query in the specified project.\n\n  Note that the project can be either the project where the monitored resources\n  are, or a workspace host project, in which case you will get results for all\n  associated monitored projects.\n  \"\"\"\n\n  time_series = TimeSeriesCollection()\n\n  mon_api = apis.get_api('monitoring', 'v3', project_id)\n  try:\n    request = mon_api.projects().timeSeries().query(name='projects/' +\n                                                    project_id,\n                                                    body={'query': query_str})\n\n    logging.debug('executing monitoring query (project: %s)', project_id)\n    logging.debug('query: %s', query_str)\n    pages = 0\n    start_time = datetime.datetime.now()\n    while request:\n      pages += 1\n      response = request.execute(num_retries=config.API_RETRIES)\n      time_series.add_api_response(response)\n      request = mon_api.projects().timeSeries().query_next(\n          previous_request=request, previous_response=response)\n      if request:\n        logging.debug('still executing monitoring query (project: %s)',\n                      project_id)\n    end_time = datetime.datetime.now()\n    logging.debug('query run time: %s, pages: %d', end_time - start_time, pages)\n  except googleapiclient.errors.HttpError as err:\n    gcp_err = utils.GcpApiError(err)\n    # Ignore 502 because we get that when the monitoring query times out.\n    if gcp_err.status in [502]:\n      logging.warning('error executing monitoring query: %s',\n                      str(gcp_err.message))\n    else:\n      raise utils.GcpApiError(err) from err\n  return time_series\n\n\ndef queryrange(project_id: str, query_str: str, start_time: datetime.datetime,\n               end_time: datetime.datetime):\n  \"\"\"\n  Do a monitoring query during specific timeframe in the specified project.\n\n  Note that the project can be either the project where the monitored resources\n  are, or a workspace host project, in which case you will get results for all\n  associated monitored projects.\n\n  \"\"\"\n\n  mon_api = apis.get_api('monitoring', 'v1', project_id)\n\n  try:\n    step = '1m'\n    start_time_str = start_time.isoformat(timespec='seconds').replace(\n        '+00:00', 'Z')\n    end_time_str = end_time.isoformat(timespec='seconds').replace('+00:00', 'Z')\n    request = mon_api.projects().location().prometheus().api().v1().query_range(\n        name=f'projects/{project_id}',\n        location='global',\n        body={\n            'query': query_str,\n            'start': start_time_str,\n            'end': end_time_str,\n            'step': step\n        })\n    response = request.execute(num_retries=config.API_RETRIES)\n  except googleapiclient.errors.HttpError as err:\n    gcp_err = utils.GcpApiError(err)\n    # Ignore 502 because we get that when the monitoring query times out.\n    if gcp_err.status in [502]:\n      logging.warning('error executing monitoring query: %s',\n                      str(gcp_err.message))\n    else:\n      raise utils.GcpApiError(err) from err\n  return response\n"
  },
  {
    "path": "gcpdiag/queries/monitoring_stub.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Stub API calls used in monitoring.py for testing.\n\nInstead of doing real API calls, we return test JSON data.\n\"\"\"\n\nimport re\n\nfrom gcpdiag.queries import apis_stub\n\n# pylint: disable=unused-argument\n\n\nclass MonitoringApiStub:\n  \"\"\"Mock object to simulate monitoring.googleapis.com calls.\"\"\"\n\n  def location(self):\n    return self\n\n  def prometheus(self):\n    return self\n\n  def projects(self):\n    return self\n\n  # pylint: disable=invalid-name\n  def timeSeries(self):\n    return self\n\n  def api(self):\n    return self\n\n  def v1(self):\n    return self\n\n  def query_range(self, name, location, body):\n    m = re.match(r'projects/([^/]+)', name)\n    project_id = m.group(1) if m else 'unknown-project'\n    return apis_stub.RestCallStub(\n        project_id=project_id,\n        json_basename='monitoring-query-range',\n        default={\n            'status': 'success',\n            'data': {\n                'resultType':\n                    'matrix',\n                'result': [{\n                    'metric': {\n                        '__name__': 'vpn_gateway_tunnel_is_up',\n                        'tunnel_id': 'tunnel-abc-123',\n                        'project_id': project_id\n                    },\n                    'values': [[1621438831, '0'], [1621439131, '1']]\n                }]\n            }\n        })\n\n  def query(self, name, body):\n    del body\n    m = re.match(r'projects/([^/]+)', name)\n    project_id = m.group(1)\n    return apis_stub.RestCallStub(project_id, 'monitoring-query')\n\n  def query_next(self, previous_request, previous_response):\n    del previous_request\n    del previous_response\n"
  },
  {
    "path": "gcpdiag/queries/monitoring_test.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Test code in monitoring.py.\"\"\"\n\nfrom datetime import datetime, timedelta\nfrom unittest import mock\n\nfrom gcpdiag.queries import apis_stub, monitoring\n\nDUMMY_PROJECT_NAME = 'gcpdiag-gce1-aaaa'\nDUMMY_INSTANCE_NAME = 'gce1'\nDUMMY_ZONE = 'europe-west4-a'\n\n\n@mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)\nclass Test:\n\n  def test_timeserie(self):\n    ts_col = monitoring.query(DUMMY_PROJECT_NAME,\n                              'mocked query (this is ignored)')\n    fs = frozenset({\n        f'resource.zone:{DUMMY_ZONE}',\n        f'metric.instance_name:{DUMMY_INSTANCE_NAME}'\n    })\n    assert fs in ts_col.keys()\n    value = ts_col[fs]\n\n    # expected data:\n    # {\n    #   'labels': {\n    #     'resource.zone': 'europe-west4-a',\n    #     'metric.instance_name': 'gce1'\n    #   },\n    #   'start_time': '2021-05-19T15:40:31.414435Z',\n    #   'end_time': '2021-05-19T15:45:31.414435Z',\n    #   'values': [[10917.0, 5], [11187.0, 4]]\n    # }\n    assert value['labels']['metric.instance_name'] == 'gce1'\n    assert 'start_time' in value\n    assert 'end_time' in value\n    assert isinstance(value['values'][0][0], float)\n    assert isinstance(value['values'][1][0], float)\n    assert isinstance(value['values'][0][1], int)\n    assert isinstance(value['values'][1][1], int)\n\n  def test_queryrange(self):\n    end_time = datetime.now()\n    start_time = end_time - timedelta(minutes=30)\n    vpn_query = 'cloud_monitoring_vpn_gateway_network_googleapis_com_vpn_gateway_tunnel_is_up'\n    response = monitoring.queryrange(project_id=DUMMY_PROJECT_NAME,\n                                     query_str=vpn_query,\n                                     start_time=start_time,\n                                     end_time=end_time)\n    assert response['status'] == 'success'\n    results = response['data']['result']\n    if len(results) > 0:\n      metric_labels = results[0]['metric']\n      assert 'project_id' in metric_labels\n"
  },
  {
    "path": "gcpdiag/queries/network.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Queries related to VPC Networks.\"\"\"\n\nimport copy\nimport dataclasses\nimport ipaddress\nimport logging\nimport re\nfrom typing import Any, Dict, FrozenSet, Iterable, List, Optional, Union\n\nfrom gcpdiag import caching, config, models\nfrom gcpdiag.queries import apis, apis_utils, iam\n\n#pylint: disable=invalid-name\nIPv4AddrOrIPv6Addr = Union[ipaddress.IPv4Address, ipaddress.IPv6Address]\nIPv4NetOrIPv6Net = Union[ipaddress.IPv4Network, ipaddress.IPv6Network]\nIPAddrOrNet = Union[IPv4AddrOrIPv6Addr, IPv4NetOrIPv6Net]\n\nDEFAULT_MTU = 1460\n\n\nclass Subnetwork(models.Resource):\n  \"\"\"A VPC subnetwork.\"\"\"\n\n  _resource_data: dict\n  _context: models.Context\n\n  def __init__(self, project_id, resource_data, context: models.Context):\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n    self._context = context\n\n  @property\n  def full_path(self) -> str:\n    result = re.match(r'https://www.googleapis.com/compute/v1/(.*)',\n                      self.self_link)\n    if result:\n      return result.group(1)\n    else:\n      return f'>> {self.self_link}'\n\n  @property\n  def short_path(self) -> str:\n    path = self.project_id + '/' + self.name\n    return path\n\n  @property\n  def name(self) -> str:\n    return self._resource_data['name']\n\n  @property\n  def self_link(self) -> str:\n    return self._resource_data.get('selfLink', '')\n\n  @property\n  def ip_network(self) -> IPv4NetOrIPv6Net:\n    return ipaddress.ip_network(self._resource_data['ipCidrRange'])\n\n  @property\n  def region(self) -> str:\n    # https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4\n    m = re.match(\n        r'https://www.googleapis.com/compute/v1/projects/([^/]+)/regions/([^/]+)',\n        self._resource_data['region'])\n    if not m:\n      raise RuntimeError(\n          f\"can't parse region URL: {self._resource_data['region']}\")\n    return m.group(2)\n\n  def is_private_ip_google_access(self) -> bool:\n    return self._resource_data.get('privateIpGoogleAccess', False)\n\n  @property\n  def network(self):\n    return self._resource_data['network']\n\n\nclass Route(models.Resource):\n  \"\"\"A VPC Route.\"\"\"\n\n  _resource_data: dict\n\n  def __init__(self, project_id, resource_data):\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n\n  @property\n  def full_path(self) -> str:\n    result = re.match(r'https://www.googleapis.com/compute/v1/(.*)',\n                      self.self_link)\n    if result:\n      return result.group(1)\n    else:\n      return f'>> {self.self_link}'\n\n  @property\n  def short_path(self) -> str:\n    path = self.project_id + '/' + self.name\n    return path\n\n  @property\n  def name(self) -> str:\n    return self._resource_data['name']\n\n  @property\n  def kind(self) -> str:\n    return self._resource_data['kind']\n\n  @property\n  def self_link(self) -> str:\n    return self._resource_data['selfLink']\n\n  @property\n  def network(self) -> str:\n    return self._resource_data['network']\n\n  @property\n  def tags(self) -> List[str]:\n    if 'tags' in self._resource_data:\n      return self._resource_data['tags']\n    return []\n\n  @property\n  def dest_range(self) -> str:\n    return self._resource_data['destRange']\n\n  @property\n  def next_hop_gateway(self) -> Optional[str]:\n    if 'nextHopGateway' in self._resource_data:\n      return self._resource_data['nextHopGateway']\n    return None\n\n  @property\n  def next_hop_vpn_tunnel(self) -> Optional[str]:\n    return self._resource_data.get('nextHopVpnTunnel')\n\n  @property\n  def next_hop_hub(self) -> Optional[str]:\n    return self._resource_data.get('nextHopHub')\n\n  @property\n  def priority(self) -> int:\n    return self._resource_data['priority']\n\n  def get_next_hop(self) -> Union[Dict[str, Any], Optional[str]]:\n    hop_types = {\n        'nextHopGateway': 'nextHopGateway',\n        'nextHopVpnTunnel': 'nextHopVpnTunnel',\n        'nextHopHub': 'nextHopHub',\n        'nextHopInstance': 'nextHopInstance',\n        'nextHopAddress': 'nextHopAddress',\n        'nextHopPeering': 'nextHopPeering',\n        'nextHopIlb': 'nextHopIlb',\n        'nextHopNetwork': 'nextHopNetwork',\n        'nextHopIp': 'nextHopIp'\n    }\n\n    for hop_type, value in hop_types.items():\n      if self._resource_data.get(hop_type):\n        return {'type': value, 'link': self._resource_data[hop_type]}\n    return None\n\n  def check_route_match(self, ip1: IPAddrOrNet, ip2: str) -> bool:\n    ip2_list = [ipaddress.ip_network(ip2)]\n    if _ip_match(ip1, ip2_list, 'allow'):\n      return True\n    return False\n\n\nclass ManagedZone(models.Resource):\n  \"\"\"\n  Represent a DNS zone (public or private\n\n  https://cloud.google.com/dns/docs/reference/v1beta2/managedZones\n  \"\"\"\n  _resource_data: dict\n\n  def __init__(self, project_id, resource_data):\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n\n  @property\n  def cloud_logging_config(self) -> bool:\n    return self._resource_data['cloudLoggingConfig'].get('enableLogging', False)\n\n  @property\n  def is_public(self) -> bool:\n    return self._resource_data['visibility'] == 'public'\n\n  @property\n  def vpc_attached(self) -> bool:\n    if 'privateVisibilityConfig' not in self._resource_data:\n      self._resource_data['privateVisibilityConfig'] = {}\n\n    return (self._resource_data['privateVisibilityConfig'].get(\n        'networks', False) or\n            self._resource_data['privateVisibilityConfig'].get(\n                'gkeClusters', False))\n\n  @property\n  def dnssec_config_state(self) -> bool:\n    if 'dnssecConfig' not in self._resource_data:\n      self._resource_data['dnssecConfig'] = {}\n\n    return self._resource_data['dnssecConfig'].get('state', False)\n\n  @property\n  def name(self) -> str:\n    return self._resource_data['name']\n\n  @property\n  def full_path(self) -> str:\n    result = re.match(r'https://dns.googleapis.com/dns/v1beta2/(.*)',\n                      self.self_link)\n    if result:\n      return result.group(1)\n    else:\n      return f'>> {self.self_link}'\n\n  @property\n  def short_path(self) -> str:\n    path = self.project_id + '/' + self.name\n    return path\n\n  @property\n  def self_link(self) -> str:\n    return self._resource_data.get('selfLink', '')\n\n\nclass Router(models.Resource):\n  \"\"\"A VPC Router.\"\"\"\n\n  _resource_data: dict\n\n  def __init__(self, project_id, resource_data):\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n    self._nats = None\n\n  @property\n  def full_path(self) -> str:\n    result = re.match(r'https://www.googleapis.com/compute/v1/(.*)',\n                      self.self_link)\n    if result:\n      return result.group(1)\n    else:\n      return f'>> {self.self_link}'\n\n  @property\n  def short_path(self) -> str:\n    path = self.project_id + '/' + self.name\n    return path\n\n  @property\n  def name(self) -> str:\n    return self._resource_data['name']\n\n  @property\n  def self_link(self) -> str:\n    return self._resource_data.get('selfLink', '')\n\n  @property\n  def network(self) -> str:\n    return self._resource_data['network']\n\n  def get_network_name(self) -> str:\n    logging.info('inside get_network_name function')\n    if self._resource_data['network']:\n      return self._resource_data['network'].split('/')[-1]\n    return ''\n\n  @property\n  def nats(self):\n    return self._resource_data.get('nats', [])\n\n  def get_nat_ip_allocate_option(self, nat_gateway) -> str:\n    nats = self._resource_data.get('nats', [])\n    nat = [n for n in nats if n['name'] == nat_gateway]\n    return nat[0].get('natIpAllocateOption', '')\n\n  def get_enable_dynamic_port_allocation(self, nat_gateway) -> str:\n    nats = self._resource_data.get('nats', [])\n    nat = [n for n in nats if n['name'] == nat_gateway]\n    return nat[0].get('enableDynamicPortAllocation', '')\n\n  def subnet_has_nat(self, subnetwork):\n    if not self._resource_data.get('nats', []):\n      return False\n    for n in self._resource_data.get('nats', []):\n      if n['sourceSubnetworkIpRangesToNat'] == 'LIST_OF_SUBNETWORKS':\n        # Cloud NAT configure for specific subnets\n        if 'subnetworks' in n and subnetwork.self_link in [\n            s['name'] for s in n['subnetworks']\n        ]:\n          return True\n      else:\n        # Cloud NAT configured for all subnets\n        return True\n    return False\n\n\nclass RouterStatus(models.Resource):\n  \"\"\"NAT Router Status\"\"\"\n\n  _resource_data: dict\n\n  def __init__(self, project_id, resource_data):\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n\n  @property\n  def full_path(self) -> str:\n    result = re.match(r'https://www.googleapis.com/compute/v1/(.*)',\n                      self.self_link)\n    if result:\n      return result.group(1)\n    else:\n      return f'>> {self.self_link}'\n\n  @property\n  def short_path(self) -> str:\n    path = self.project_id + '/' + self.name\n    return path\n\n  @property\n  def name(self) -> str:\n    return self._resource_data.get('name', '')\n\n  @property\n  def self_link(self) -> str:\n    return self._resource_data.get('selfLink', '')\n\n  @property\n  def min_extra_nat_ips_needed(self) -> str:\n    nat_status = self._resource_data.get('result', {}).get('natStatus', {})\n    return nat_status[0].get('minExtraNatIpsNeeded', None)\n\n  @property\n  def num_vms_with_nat_mappings(self) -> str:\n    nat_status = self._resource_data.get('result', {}).get('natStatus', {})\n    return nat_status[0].get('numVmEndpointsWithNatMappings', None)\n\n  @property\n  def bgp_peer_status(self) -> str:\n    bgp_peer_status = self._resource_data.get('result',\n                                              {}).get('bgpPeerStatus', {})\n    return bgp_peer_status\n\n\nclass RouterNatIpInfo(models.Resource):\n  \"\"\"NAT IP Info\"\"\"\n\n  _resource_data: dict\n\n  def __init__(self, project_id, resource_data):\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n\n  @property\n  def full_path(self) -> str:\n    result = re.match(r'https://www.googleapis.com/compute/v1/(.*)',\n                      self.self_link)\n    if result:\n      return result.group(1)\n    else:\n      return f'>> {self.self_link}'\n\n  @property\n  def short_path(self) -> str:\n    path = self.project_id + '/' + self.name\n    return path\n\n  @property\n  def self_link(self) -> str:\n    return self._resource_data.get('selfLink', '')\n\n  @property\n  def name(self) -> str:\n    return self._resource_data.get('name', '')\n\n  @property\n  def result(self) -> str:\n    return self._resource_data.get('result', [])\n\n\n@dataclasses.dataclass\nclass Peering:\n  \"\"\"VPC Peerings\"\"\"\n\n  name: str\n  url: str\n  state: str\n  exports_custom_routes: bool\n  imports_custom_routes: bool\n  auto_creates_routes: bool\n\n  def __str__(self):\n    return self.name\n\n\nclass Network(models.Resource):\n  \"\"\"A VPC network.\"\"\"\n  _resource_data: dict\n  _subnetworks: Optional[Dict[str, Subnetwork]]\n  _context: models.Context\n\n  def __init__(self, project_id, resource_data, context: models.Context):\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n    self._subnetworks = None\n    self._context = context\n\n  @property\n  def full_path(self) -> str:\n    result = re.match(r'https://www.googleapis.com/compute/v1/(.*)',\n                      self.self_link)\n    if result:\n      return result.group(1)\n    else:\n      return f'>> {self.self_link}'\n\n  @property\n  def short_path(self) -> str:\n    path = self.project_id + '/' + self.name\n    return path\n\n  @property\n  def name(self) -> str:\n    return self._resource_data['name']\n\n  @property\n  def self_link(self) -> str:\n    return self._resource_data.get('selfLink', '')\n\n  @property\n  def firewall(self) -> 'EffectiveFirewalls':\n    return _get_effective_firewalls(self)\n\n  @property\n  def mtu(self) -> int:\n    if 'mtu' in self._resource_data:\n      return self._resource_data['mtu']\n    return DEFAULT_MTU\n\n  @property\n  def subnetworks(self) -> Dict[str, Subnetwork]:\n    return _batch_get_subnetworks(\n        self._project_id, frozenset(self._resource_data.get('subnetworks', [])),\n        self._context)\n\n  @property\n  def peerings(self) -> List[Peering]:\n    return [\n        Peering(peer['name'], peer['network'], peer['state'],\n                peer['exportCustomRoutes'], peer['importCustomRoutes'],\n                peer['autoCreateRoutes'])\n        for peer in self._resource_data.get('peerings', [])\n    ]\n\n\ndef _ip_match(  #\n    ip1: IPAddrOrNet,\n    ip2_list: List[Union[ipaddress.IPv4Network, ipaddress.IPv6Network]],\n    match_type: str = 'allow') -> bool:\n  \"\"\"Match IP address or network to a network list (i.e. verify that ip1 is\n  included in any ip of ip2_list).\n\n  If match_type is 'allow', ip1 will match any ip in ip2_list if it is a subnet.\n  If match_type is 'deny', ip1 will match any ip in ip2_list if they overlap\n  (i.e. even if only part of ip1 is matched, it should still be considered a match).\"\"\"\n  for ip2 in ip2_list:\n    if isinstance(ip1, (ipaddress.IPv4Address, ipaddress.IPv6Address)):\n      # ip1: address, ip2: network\n      if ip1 in ip2:\n        return True\n    else:\n      # ip1: network, ip2: network\n      if isinstance(ip1, ipaddress.IPv4Network) and \\\n          isinstance(ip2, ipaddress.IPv4Network):\n        if match_type == 'allow' and ip1.subnet_of(ip2):\n          return True\n        elif match_type == 'deny' and ip1.overlaps(ip2):\n          return True\n        else:\n          logging.debug('network no match %s of %s (%s matching)', ip1, ip2,\n                        match_type)\n      elif isinstance(ip1, ipaddress.IPv6Network) and \\\n          isinstance(ip2, ipaddress.IPv6Network):\n        if match_type == 'allow' and ip1.subnet_of(ip2):\n          return True\n        elif match_type == 'deny' and ip1.overlaps(ip2):\n          return True\n  return False\n\n\ndef _l4_match(protocol: str, port: int, l4c_list: Iterable[Dict[str,\n                                                                Any]]) -> bool:\n  \"\"\"Match protocol and port to layer4Configs structure:\n\n         \"layer4Configs\": [\n            {\n              \"ipProtocol\": string,\n              \"ports\": [\n                string\n              ]\n            }\n  \"\"\"\n  for l4c in l4c_list:\n    if l4c['ipProtocol'] not in [protocol, 'all']:\n      continue\n    if 'ports' not in l4c:\n      return True\n    for p_range in l4c['ports']:\n      if _port_in_port_range(port, p_range):\n        return True\n  return False\n\n\ndef _port_in_port_range(port: int, port_range: str):\n  try:\n    parts = [int(p) for p in port_range.split('-', 1)]\n  except (TypeError, ValueError) as e:\n    raise ValueError(\n        f'invalid port numbers in range syntax: {port_range}') from e\n  if len(parts) == 2:\n    return parts[0] <= port <= parts[1]\n  elif len(parts) == 1:\n    return parts[0] == port\n\n\ndef _vpc_allow_deny_match(protocol: str, port: Optional[int],\n                          allowed: Iterable[Dict[str, Any]],\n                          denied: Iterable[Dict[str, Any]]) -> Optional[str]:\n  \"\"\"Match protocol and port to allowed denied structure (VPC firewalls):\n\n      \"allowed\": [\n        {\n          \"IPProtocol\": string,\n          \"ports\": [\n            string\n          ]\n        }\n      ],\n      \"denied\": [\n        {\n          \"IPProtocol\": string,\n          \"ports\": [\n            string\n          ]\n        }\n      ],\n  \"\"\"\n  for action, l4_rules in [('allow', allowed), ('deny', denied)]:\n    for l4_rule in l4_rules:\n      if l4_rule['IPProtocol'] not in [protocol, 'all']:\n        continue\n      if 'ports' not in l4_rule:\n        return action\n      if port is not None:\n        for p_range in l4_rule['ports']:\n          if _port_in_port_range(port, p_range):\n            return action\n  return None\n\n\n@dataclasses.dataclass\nclass FirewallCheckResult:\n  \"\"\"The result of a firewall connectivity check.\"\"\"\n\n  action: str\n  firewall_policy_name: Optional[str] = None\n  firewall_policy_rule_description: Optional[str] = None\n  vpc_firewall_rule_id: Optional[str] = None\n  vpc_firewall_rule_name: Optional[str] = None\n\n  def __str__(self):\n    return self.action\n\n  @property\n  def matched_by_str(self):\n    if self.firewall_policy_name:\n      if self.firewall_policy_rule_description:\n        return f'policy: {self.firewall_policy_name}, rule: {self.firewall_policy_rule_description}'\n      else:\n        return f'policy: {self.firewall_policy_name}'\n    elif self.vpc_firewall_rule_name:\n      return f'vpc firewall rule: {self.vpc_firewall_rule_name}'\n\n\nclass FirewallRuleNotFoundError(Exception):\n  rule_name: str\n\n  def __init__(self, name, disabled=False):\n    # Call the base class constructor with the parameters it needs\n    super().__init__(f'firewall rule not found: {name}')\n    self.rule_name = name\n    self.disabled = disabled\n\n\nclass VpcFirewallRule:\n  \"\"\"Represents firewall rule\"\"\"\n\n  def __init__(self, resource_data):\n    self._resource_data = resource_data\n\n  @property\n  def name(self) -> str:\n    return self._resource_data['name']\n\n  @property\n  def source_ranges(self) -> List[ipaddress.IPv4Network]:\n    return self._resource_data['sourceRanges']\n\n  @property\n  def target_tags(self) -> set:\n    return self._resource_data['targetTags']\n\n  @property\n  def allowed(self) -> List[dict]:\n    return self._resource_data['allowed']\n\n  def is_enabled(self) -> bool:\n    return not self._resource_data['disabled']\n\n\nclass _FirewallPolicy:\n  \"\"\"Represents a org/folder firewall policy.\"\"\"\n\n  @property\n  def short_name(self):\n    if self._resource_data.get('shortName'):\n      return self._resource_data.get('shortName')\n    else:\n      return self._resource_data.get('name')\n\n  def __init__(self, resource_data):\n    self._resource_data = resource_data\n    self._rules = {\n        'INGRESS': [],\n        'EGRESS': [],\n    }\n    # sort by priority, and then by action (deny before allow)\n    action_priority = {'deny': 1, 'allow': 2, 'goto_next': 3}\n    for rule in sorted(\n        resource_data['rules'],\n        key=lambda r: (int(r.get('priority', 65535)),\n                       action_priority.get(r.get('action'), 99)),\n    ):\n      rule_decoded = copy.deepcopy(rule)\n      if 'match' in rule:\n        # decode network ranges\n        if 'srcIpRanges' in rule['match']:\n          rule_decoded['match']['srcIpRanges'] = \\\n            [ipaddress.ip_network(net) for net in rule['match']['srcIpRanges']]\n        if 'destIpRanges' in rule['match']:\n          rule_decoded['match']['destIpRanges'] = \\\n            [ipaddress.ip_network(net) for net in rule['match']['destIpRanges']]\n      self._rules[rule['direction']].append(rule_decoded)\n\n  def check_connectivity_ingress(\n      self,  #\n      *,\n      src_ip: IPAddrOrNet,\n      ip_protocol: str,\n      port: Optional[int],\n      #target_network: Optional[Network] = None, # useless unless targetResources set by API.\n      target_service_account: Optional[str] = None\n  ) -> FirewallCheckResult:\n    for rule in self._rules['INGRESS']:\n      if rule.get('disabled'):\n        continue\n      # To match networks, use 'supernet_of' for deny, because if the network that we\n      # are checking is partially matched by a deny rule, it should still be considered\n      # a match.\n      ip_match_type = 'deny' if rule['action'] == 'deny' else 'allow'\n      # src_ip\n      if not _ip_match(src_ip, rule['match']['srcIpRanges'], ip_match_type):\n        continue\n      # ip_protocol and port\n      if port is not None and not _l4_match(ip_protocol, port,\n                                            rule['match']['layer4Configs']):\n        continue\n      # targetResources doesn't seem to get set. See also b/209450091.\n      # please also check the check_connectivity_egress for similar issue.\n      # if 'targetResources' in rule:\n      #   if not target_network:\n      #     continue\n      #   if not any(\n      #       tn == target_network.self_link for tn in rule['targetResources']):\n      #     continue\n      # target_service_account\n      if 'targetServiceAccounts' in rule:\n        if not target_service_account:\n          continue\n        if not any(sa == target_service_account\n                   for sa in rule['targetServiceAccounts']):\n          continue\n      logging.debug('policy %s: %s -> %s/%s = %s', self.short_name, src_ip,\n                    port, ip_protocol, rule['action'])\n      return FirewallCheckResult(\n          rule['action'],\n          firewall_policy_name=self.short_name,\n          firewall_policy_rule_description=rule['description'])\n\n    # It should never happen that no rule match, because there should\n    # be a low-priority 'goto_next' rule.\n    logging.warning('unexpected no-match in firewall policy %s',\n                    self.short_name)\n    return FirewallCheckResult('goto_next')\n\n  def check_connectivity_egress(\n      self,  #\n      *,\n      src_ip: IPAddrOrNet,\n      ip_protocol: str,\n      port: Optional[int],\n      #target_network: Optional[Network] = None, # useless unless targetResources set by API.\n      target_service_account: Optional[str] = None\n  ) -> FirewallCheckResult:\n    for rule in self._rules['EGRESS']:\n      # Do not evaluate disabled rules or automatically created rules\n      if rule.get('disabled') or not rule.get('match', {}).get('destIpRanges'):\n        continue\n      # To match networks, use 'supernet_of' for deny, because if the network that we\n      # are checking is partially matched by a deny rule, it should still be considered\n      # a match.\n      ip_match_type = 'deny' if rule['action'] == 'deny' else 'allow'\n      # src_ip\n      if not _ip_match(src_ip, rule['match']['destIpRanges'], ip_match_type):\n        continue\n      # ip_protocol and port\n      if port is not None and not _l4_match(ip_protocol, port,\n                                            rule['match']['layer4Configs']):\n        continue\n      # target_service_account\n      if 'targetServiceAccounts' in rule:\n        if not target_service_account:\n          continue\n        if not any(sa == target_service_account\n                   for sa in rule['targetServiceAccounts']):\n          continue\n      logging.debug('policy %s: %s -> %s/%s = %s', self.short_name, src_ip,\n                    port, ip_protocol, rule['action'])\n      return FirewallCheckResult(\n          rule['action'],\n          firewall_policy_name=self.short_name,\n          firewall_policy_rule_description=rule['description'])\n\n    # It should never happen that no rule match, because there should\n    # be a low-priority 'goto_next' rule.\n    logging.debug('unexpected no-match in firewall policy %s', self.short_name)\n    return FirewallCheckResult('goto_next')\n\n\nclass _VpcFirewall:\n  \"\"\"VPC Firewall Rules (internal class)\"\"\"\n  _rules: dict\n\n  def __init__(self, rules_list):\n    self._rules = {\n        'INGRESS': [],\n        'EGRESS': [],\n    }\n    # sort by primary key and then by deny action\n    for r in sorted(rules_list,\n                    key=lambda r: (int(r['priority']), 1\n                                   if r.get('denied') else 2)):\n      r_decoded = copy.deepcopy(r)\n      # decode network ranges\n      if 'sourceRanges' in r:\n        r_decoded['sourceRanges'] = \\\n            [ipaddress.ip_network(net) for net in r['sourceRanges']]\n      if 'destinationRanges' in r:\n        r_decoded['destinationRanges'] = \\\n            [ipaddress.ip_network(net) for net in r['destinationRanges']]\n      # use sets for tags\n      if 'sourceTags' in r:\n        r_decoded['sourceTags'] = set(r['sourceTags'])\n      if 'targetTags' in r:\n        r_decoded['targetTags'] = set(r['targetTags'])\n      self._rules[r['direction']].append(r_decoded)\n\n  def check_connectivity_ingress(\n      self,\n      *,\n      src_ip: IPAddrOrNet,\n      ip_protocol: str,\n      port: Optional[int],\n      # dest_ip: Optional[IPAddrOrNet] = None,\n      source_service_account: Optional[str] = None,\n      target_service_account: Optional[str] = None,\n      source_tags: Optional[List[str]] = None,\n      target_tags: Optional[List[str]] = None,\n  ) -> FirewallCheckResult:\n    if target_tags is not None and not isinstance(target_tags, list):\n      raise ValueError('Internal error: target_tags must be a list')\n    if source_tags is not None and not isinstance(source_tags, list):\n      raise ValueError('Internal error: source_tags must be a list')\n\n    for rule in self._rules['INGRESS']:\n      #logging.debug('vpc firewall: %s -> %s/%s ? %s', src_ip, port, ip_protocol,\n      #              rule['name'])\n\n      # disabled?\n      if rule.get('disabled'):\n        continue\n\n      # ip_protocol and port\n      action = _vpc_allow_deny_match(ip_protocol,\n                                     port,\n                                     allowed=rule.get('allowed', []),\n                                     denied=rule.get('denied', []))\n      if not action:\n        continue\n\n      # source\n      if 'sourceRanges' in rule and \\\n          _ip_match(src_ip, rule['sourceRanges'], action):\n        pass\n      elif source_service_account and \\\n          source_service_account in rule.get('sourceServiceAccounts', {}):\n        pass\n      elif source_tags and \\\n          set(source_tags) & rule.get('sourceTags', set()):\n        pass\n      else:\n        continue\n\n      # target\n      if 'targetServiceAccounts' in rule:\n        if not target_service_account:\n          continue\n        if not target_service_account in rule['targetServiceAccounts']:\n          continue\n      if 'targetTags' in rule:\n        if not target_tags:\n          continue\n        if not set(target_tags) & rule['targetTags']:\n          continue\n\n      logging.debug('vpc firewall: %s -> %s/%s = %s (%s)', src_ip, port,\n                    ip_protocol, action, rule['name'])\n      return FirewallCheckResult(action,\n                                 vpc_firewall_rule_id=rule['id'],\n                                 vpc_firewall_rule_name=rule['name'])\n    # implied deny\n    logging.debug('vpc firewall: %s -> %s/%s = %s (implied rule)', src_ip, port,\n                  ip_protocol, 'deny')\n    return FirewallCheckResult('deny')\n\n  def check_connectivity_egress(\n      self,\n      *,\n      src_ip: IPAddrOrNet,\n      ip_protocol: str,\n      port: Optional[int],\n      # dest_ip: Optional[IPAddrOrNet] = None,\n      source_service_account: Optional[str] = None,\n      target_service_account: Optional[str] = None,\n      source_tags: Optional[List[str]] = None,\n      target_tags: Optional[List[str]] = None,\n  ) -> FirewallCheckResult:\n    if target_tags is not None and not isinstance(target_tags, list):\n      raise ValueError('Internal error: target_tags must be a list')\n    if source_tags is not None and not isinstance(source_tags, list):\n      raise ValueError('Internal error: source_tags must be a list')\n\n    for rule in self._rules['EGRESS']:\n      # disabled?\n      if rule.get('disabled'):\n        continue\n\n      # ip_protocol and port\n      action = _vpc_allow_deny_match(ip_protocol,\n                                     port,\n                                     allowed=rule.get('allowed', []),\n                                     denied=rule.get('denied', []))\n      if not action:\n        continue\n\n      # source\n      if 'destinationRanges' in rule and \\\n          _ip_match(src_ip, rule['destinationRanges'], action):\n        pass\n      elif source_service_account and \\\n          source_service_account in rule.get('sourceServiceAccounts', {}):\n        pass\n      elif source_tags and \\\n          set(source_tags) & rule.get('sourceTags', set()):\n        pass\n      else:\n        continue\n\n      # target\n      if 'targetServiceAccounts' in rule:\n        if not target_service_account:\n          continue\n        if not target_service_account in rule['targetServiceAccounts']:\n          continue\n      if 'targetTags' in rule:\n        if not target_tags:\n          continue\n        if not set(target_tags) & rule['targetTags']:\n          continue\n\n      logging.debug('vpc firewall: %s -> %s/%s = %s (%s)', src_ip, port,\n                    ip_protocol, action, rule['name'])\n      return FirewallCheckResult(action,\n                                 vpc_firewall_rule_id=rule['id'],\n                                 vpc_firewall_rule_name=rule['name'])\n    # implied allow egress\n    logging.debug('vpc firewall: %s -> %s/%s = %s (implied rule)', src_ip, port,\n                  ip_protocol, 'allow')\n    return FirewallCheckResult('allow')\n\n  def verify_ingress_rule_exists(self, name: str):\n    \"\"\"See documentation for EffectiveFirewalls.verify_ingress_rule_exists().\"\"\"\n    return any(r['name'] == name for r in self._rules['INGRESS'])\n\n  def verify_egress_rule_exists(self, name: str):\n    \"\"\"See documentation for EffectiveFirewalls.verify_egress_rule_exists().\"\"\"\n    return any(r['name'] == name for r in self._rules['EGRESS'])\n\n  def get_vpc_ingress_rules(self,\n                            name: Optional[str] = None,\n                            name_pattern: Optional[Optional[re.Pattern]] = None,\n                            target_tags: Optional[List[str]] = None):\n    \"\"\"See documentation for EffectiveFirewalls.get_vpc_ingress_rules().\"\"\"\n    if not (name or name_pattern):\n      raise ValueError('Internal error: name or name_pattern must be provided')\n    if target_tags is not None and not isinstance(target_tags, list):\n      raise ValueError('Internal error: target_tags must be a list')\n\n    rules = []\n    for rule in self._rules['INGRESS']:\n      if name:\n        if not rule['name'] == name:\n          continue\n      elif name_pattern:\n        m = name_pattern.match(rule['name'])\n        if not m:\n          continue\n      # filter by target_tags if needed\n      if target_tags:\n        if not 'targetTags' in rule:\n          continue\n        if not set(target_tags) & rule['targetTags']:\n          continue\n      rules.append(VpcFirewallRule(rule))\n\n    return rules\n\n  def get_vpc_egress_rules(self,\n                           name: Optional[str] = None,\n                           name_pattern: Optional[Optional[re.Pattern]] = None,\n                           target_tags: Optional[List[str]] = None):\n    \"\"\"See documentation for EffectiveFirewalls.get_vpc_egress_rules().\"\"\"\n    if not (name or name_pattern):\n      raise ValueError('Internal error: name or name_pattern must be provided')\n    if target_tags is not None and not isinstance(target_tags, list):\n      raise ValueError('Internal error: target_tags must be a list')\n\n    rules = []\n    for rule in self._rules['EGRESS']:\n      if name:\n        if not rule['name'] == name:\n          continue\n      elif name_pattern:\n        m = name_pattern.match(rule['name'])\n        if not m:\n          continue\n      # filter by target_tags if needed\n      if target_tags:\n        if not 'targetTags' in rule:\n          continue\n        if not set(target_tags) & rule['targetTags']:\n          continue\n\n      rules.append(VpcFirewallRule(rule))\n    return rules\n\n\nclass EffectiveFirewalls:\n  \"\"\"Effective firewall rules for a VPC network or Instance.\n\n  Includes org/folder firewall policies).\"\"\"\n  _resource_data: dict\n  _policies: List[_FirewallPolicy]\n  _vpc_firewall: _VpcFirewall\n\n  def __init__(self, resource_data):\n    self._resource_data = resource_data\n    self._policies = []\n    if 'firewallPolicys' in resource_data:\n      for policy in resource_data['firewallPolicys']:\n        self._policies.append(_FirewallPolicy(policy))\n    self._vpc_firewall = _VpcFirewall(resource_data.get('firewalls', {}))\n\n  def check_connectivity_ingress(\n      self,  #\n      *,\n      src_ip: IPAddrOrNet,\n      ip_protocol: str,\n      port: Optional[int] = None,\n      source_service_account: Optional[str] = None,\n      source_tags: Optional[List[str]] = None,\n      target_service_account: Optional[str] = None,\n      target_tags: Optional[List[str]] = None) -> FirewallCheckResult:\n\n    if ip_protocol != 'ICMP' and port is None:\n      raise ValueError('TCP and UDP must have port numbers')\n\n    # Firewall policies (organization, folders)\n    for p in self._policies:\n      result = p.check_connectivity_ingress(\n          src_ip=src_ip,\n          ip_protocol=ip_protocol,\n          port=port,\n          #target_network=self._network,\n          target_service_account=target_service_account)\n      if result.action != 'goto_next':\n        return result\n\n    # VPC firewall rules\n    return self._vpc_firewall.check_connectivity_ingress(\n        src_ip=src_ip,\n        ip_protocol=ip_protocol,\n        port=port,\n        source_service_account=source_service_account,\n        source_tags=source_tags,\n        target_service_account=target_service_account,\n        target_tags=target_tags)\n\n  def check_connectivity_egress(\n      self,  #\n      *,\n      src_ip: IPAddrOrNet,\n      ip_protocol: str,\n      port: Optional[int] = None,\n      source_service_account: Optional[str] = None,\n      source_tags: Optional[List[str]] = None,\n      target_service_account: Optional[str] = None,\n      target_tags: Optional[List[str]] = None) -> FirewallCheckResult:\n\n    if ip_protocol != 'ICMP' and port is None:\n      raise ValueError('TCP and UDP must have port numbers')\n\n    # Firewall policies (organization, folders)\n    for p in self._policies:\n      result = p.check_connectivity_egress(\n          src_ip=src_ip,\n          ip_protocol=ip_protocol,\n          port=port,\n          #target_network=self._network,\n          target_service_account=target_service_account)\n      if result.action != 'goto_next':\n        return result\n\n    # VPC firewall rules\n    return self._vpc_firewall.check_connectivity_egress(\n        src_ip=src_ip,\n        ip_protocol=ip_protocol,\n        port=port,\n        source_service_account=source_service_account,\n        source_tags=source_tags,\n        target_service_account=target_service_account,\n        target_tags=target_tags)\n\n  def get_vpc_ingress_rules(\n      self,\n      name: Optional[str] = None,\n      name_pattern: Optional[re.Pattern] = None,\n      target_tags: Optional[List[str]] = None) -> List[VpcFirewallRule]:\n    \"\"\"Retrieve the list of ingress firewall rules matching name or name pattern and target tags.\n\n    Args:\n        name (Optional[str], optional): firewall rune name. Defaults to None.\n        name_pattern (Optional[re.Pattern], optional): firewall rule name pattern. Defaults to None.\n        target_tags (Optional[List[str]], optional): firewall target tags\n          (if not specified any tag will match). Defaults to None.\n\n    Returns:\n        List[VpcFirewallRule]: List of ingress firewall rules\n    \"\"\"\n    rules = self._vpc_firewall.get_vpc_ingress_rules(name, name_pattern,\n                                                     target_tags)\n    return rules\n\n  def get_vpc_egress_rules(\n      self,\n      name: Optional[str] = None,\n      name_pattern: Optional[re.Pattern] = None,\n      target_tags: Optional[List[str]] = None) -> List[VpcFirewallRule]:\n    \"\"\"Retrieve the list of egress firewall rules matching name or name pattern and target tags.\n\n    Args:\n        name (Optional[str], optional): firewall rune name. Defaults to None.\n        name_pattern (Optional[re.Pattern], optional): firewall rule name pattern. Defaults to None.\n        target_tags (Optional[List[str]], optional): firewall target tags\n          (if not specified any tag will match). Defaults to None.\n\n    Returns:\n        List[VpcFirewallRule]: List of egress firewall rules\n    \"\"\"\n    rules = self._vpc_firewall.get_vpc_egress_rules(name, name_pattern,\n                                                    target_tags)\n    return rules\n\n  def verify_ingress_rule_exists(self, name: str):\n    \"\"\"Verify that a certain VPC rule exists. This is useful to verify\n    whether maybe a permission was missing on a shared VPC and an\n    automatic rule couldn't be created.\"\"\"\n    return self._vpc_firewall.verify_ingress_rule_exists(name)\n\n  def verify_egress_rule_exists(self, name: str):\n    \"\"\"Verify that a certain VPC rule exists. This is useful to verify\n    whether maybe a permission was missing on a shared VPC and an\n    automatic rule couldn't be created.\"\"\"\n    return self._vpc_firewall.verify_egress_rule_exists(name)\n\n\nclass VPCEffectiveFirewalls(EffectiveFirewalls):\n  \"\"\"Effective firewall rules for a VPC network.\n\n  Includes org/folder firewall policies).\n  \"\"\"\n  _network: Network\n\n  def __init__(self, network, resource_data):\n    super().__init__(resource_data)\n    self._network = network\n\n\n@caching.cached_api_call()\ndef _get_effective_firewalls(network: Network):\n  compute = apis.get_api('compute', 'v1', network.project_id)\n  request = compute.networks().getEffectiveFirewalls(project=network.project_id,\n                                                     network=network.name)\n  response = request.execute(num_retries=config.API_RETRIES)\n  return VPCEffectiveFirewalls(network, response)\n\n\n@caching.cached_api_call(in_memory=True)\ndef get_network(project_id: str, network_name: str,\n                context: models.Context) -> Network:\n  logging.debug('fetching network: %s/%s', project_id, network_name)\n  compute = apis.get_api('compute', 'v1', project_id)\n  request = compute.networks().get(project=project_id, network=network_name)\n  response = request.execute(num_retries=config.API_RETRIES)\n  return Network(project_id, response, context)\n\n\ndef get_subnetwork_from_url(url: str) -> Subnetwork:\n  \"\"\"Returns Subnetwork object given subnetwork url\"\"\"\n  m = re.match((r'https://www.googleapis.com/compute/v1/projects/'\n                r'([^/]+)/regions/([^/]+)/subnetworks/([^/]+)$'), url)\n  if not m:\n    raise ValueError(f\"can't parse network url: {url}\")\n  (project_id, region, subnetwork_name) = (m.group(1), m.group(2), m.group(3))\n  return get_subnetwork(project_id, region, subnetwork_name)\n\n\ndef get_network_from_url(url: str) -> Network:\n  m = re.match(\n      r'https://www.googleapis.com/compute/v1/projects/([^/]+)/global/networks/([^/]+)',\n      url)\n  if not m:\n    raise ValueError(f\"can't parse network url: {url}\")\n  (project_id, network_name) = (m.group(1), m.group(2))\n  return get_network(project_id, network_name,\n                     models.Context(project_id=project_id))\n\n\n@caching.cached_api_call(in_memory=True)\ndef get_networks(context: models.Context) -> List[Network]:\n  logging.debug('fetching network: %s', context.project_id)\n  compute = apis.get_api('compute', 'v1', context.project_id)\n  request = compute.networks().list(project=context.project_id)\n  response = request.execute(num_retries=config.API_RETRIES)\n  return [\n      Network(context.project_id, item, context)\n      for item in response.get('items', [])\n  ]\n\n\n@caching.cached_api_call(in_memory=True)\ndef get_subnetwork(project_id: str, region: str,\n                   subnetwork_name: str) -> Subnetwork:\n  logging.debug('fetching network: %s/%s', project_id, subnetwork_name)\n  compute = apis.get_api('compute', 'v1', project_id)\n  request = compute.subnetworks().get(project=project_id,\n                                      region=region,\n                                      subnetwork=subnetwork_name)\n  response = request.execute(num_retries=config.API_RETRIES)\n  if response is None:\n    raise RuntimeError(\n        f'failed to fetch subnetwork: {project_id}/{region}/{subnetwork_name}')\n  return Subnetwork(project_id,\n                    response,\n                    context=models.Context(project_id=project_id))\n\n\n@caching.cached_api_call(in_memory=True)\ndef _batch_get_subnetworks(project_id, subnetworks_urls: FrozenSet[str],\n                           context: models.Context) -> Dict[str, Subnetwork]:\n  compute = apis.get_api('compute', 'v1', project_id)\n  requests = []\n  for subnet_url in subnetworks_urls:\n    m = re.match((r'https://www.googleapis.com/compute/v1/projects/'\n                  r'([^/]+)/regions/([^/]+)/subnetworks/([^/]+)$'), subnet_url)\n    if not m:\n      logging.warning(\"can't parse subnet URL: %s\", subnet_url)\n      continue\n    requests.append(  #\n        compute.subnetworks().get(project=m.group(1),\n                                  region=m.group(2),\n                                  subnetwork=m.group(3)))\n  subnets = {}\n  if not requests:\n    return {}\n  for (_, resp, exception) in apis_utils.execute_concurrently(api=compute,\n                                                              requests=requests,\n                                                              context=context):\n    if exception:\n      logging.warning(exception)\n      continue\n    if resp and isinstance(resp, dict) and 'selfLink' in resp:\n      subnets[resp['selfLink']] = Subnetwork(project_id, resp, context)\n    else:\n      logging.warning('Invalid response item in _batch_get_subnetworks: %s',\n                      resp)\n  return subnets\n\n\n@caching.cached_api_call(in_memory=True)\ndef get_routes(project_id: str) -> List[Route]:\n  logging.debug('fetching routes: %s', project_id)\n  compute = apis.get_api('compute', 'v1', project_id)\n  request = compute.routes().list(project=project_id)\n  response = request.execute(num_retries=config.API_RETRIES)\n  return [Route(project_id, item) for item in response.get('items', [])]\n\n\n@caching.cached_api_call(in_memory=True)\ndef get_zones(project_id: str) -> List[ManagedZone]:\n  logging.debug('fetching DNS zones: %s', project_id)\n  dns = apis.get_api('dns', 'v1beta2', project_id)\n  request = dns.managedZones().list(project=project_id)\n  response = request.execute(num_retries=config.API_RETRIES)\n  zones = []\n  for zone in response.get('managedZones', []):\n    request2 = dns.managedZones().get(project=project_id,\n                                      managedZone=zone['name'])\n    response2 = request2.execute(num_retries=config.API_RETRIES)\n    zones.append(ManagedZone(project_id, response2))\n  return zones\n\n\n@caching.cached_api_call(in_memory=True)\ndef get_routers(project_id: str, region: str, network) -> List[Router]:\n  logging.debug('fetching routers: %s/%s', project_id, region)\n  compute = apis.get_api('compute', 'v1', project_id)\n  request = compute.routers().list(project=project_id,\n                                   region=region,\n                                   filter=f'network=\"{network.self_link}\"')\n  response = request.execute(num_retries=config.API_RETRIES)\n  return [Router(project_id, item) for item in response.get('items', [])]\n\n\n@caching.cached_api_call(in_memory=True)\ndef get_router(project_id: str, region: str, network) -> Router:\n  logging.debug('fetching routers: %s/%s', project_id, region)\n  compute = apis.get_api('compute', 'v1', project_id)\n  request = compute.routers().list(project=project_id,\n                                   region=region,\n                                   filter=f'network=\"{network.self_link}\"')\n  response = request.execute(num_retries=config.API_RETRIES)\n  return Router(project_id, next(iter(response.get('items', [{}]))))\n\n\n@caching.cached_api_call(in_memory=True)\ndef get_router_by_name(project_id: str, region: str,\n                       router_name: str) -> Router:\n  logging.debug('fetching router list: %s/%s in region %s', project_id,\n                router_name, region)\n  compute = apis.get_api('compute', 'v1', project_id)\n  request = compute.routers().list(project=project_id, region=region)\n  response = request.execute(num_retries=config.API_RETRIES)\n  return next(\n      Router(project_id, item)\n      for item in response.get('items', [])\n      if item['name'] == router_name)\n\n\n@caching.cached_api_call(in_memory=True)\ndef nat_router_status(project_id: str, router_name: str,\n                      region: str) -> RouterStatus:\n  logging.debug('fetching router status: %s/%s in region %s', project_id,\n                router_name, region)\n  compute = apis.get_api('compute', 'v1', project_id)\n  request = compute.routers().getRouterStatus(project=project_id,\n                                              router=router_name,\n                                              region=region)\n  response = request.execute(num_retries=config.API_RETRIES)\n  if 'result' in str(response):\n    return RouterStatus(project_id, response)\n  else:\n    logging.debug('unable to fetch router status: %s/%s in region %s',\n                  project_id, router_name, region)\n    return RouterStatus(project_id, {})\n\n\n@caching.cached_api_call(in_memory=True)\ndef get_nat_ip_info(project_id: str, router_name: str,\n                    region: str) -> RouterNatIpInfo:\n  logging.debug('fetching NAT IP info for router: %s/%s in region %s',\n                project_id, router_name, region)\n  compute = apis.get_api('compute', 'v1', project_id)\n  request = compute.routers().getNatIpInfo(project=project_id,\n                                           router=router_name,\n                                           region=region)\n  response = request.execute(num_retries=config.API_RETRIES)\n  if 'result' in str(response):\n    return RouterNatIpInfo(project_id, response)\n  else:\n    logging.debug('unable to fetch Nat IP Info for router: %s/%s in region %s',\n                  project_id, router_name, region)\n    return RouterNatIpInfo(project_id, {})\n\n\nclass VPCSubnetworkIAMPolicy(iam.BaseIAMPolicy):\n\n  def _is_resource_permission(self, permission):\n    return True\n\n\n@caching.cached_api_call(in_memory=True)\ndef get_subnetwork_iam_policy(context: models.Context, region: str,\n                              subnetwork_name: str) -> VPCSubnetworkIAMPolicy:\n  project_id = context.project_id\n  resource_name = (f'projects/{project_id}/regions/{region}/'\n                   f'subnetworks/{subnetwork_name}')\n\n  compute = apis.get_api('compute', 'v1', project_id)\n  request = compute.subnetworks().getIamPolicy(project=project_id,\n                                               region=region,\n                                               resource=subnetwork_name)\n\n  return iam.fetch_iam_policy(request, VPCSubnetworkIAMPolicy, project_id,\n                              resource_name, context)\n\n\nclass Address(models.Resource):\n  \"\"\"IP Addresses.\"\"\"\n  _resource_data: dict\n\n  def __init__(self, project_id, resource_data):\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n\n  @property\n  def full_path(self) -> str:\n    result = re.match(r'https://www.googleapis.com/compute/v1/(.*)',\n                      self.self_link)\n    if result:\n      return result.group(1)\n    else:\n      return f'>> {self.self_link}'\n\n  @property\n  def short_path(self) -> str:\n    path = self.project_id + '/' + self.name\n    return path\n\n  @property\n  def name(self) -> str:\n    return self._resource_data['name']\n\n  @property\n  def self_link(self) -> str:\n    return self._resource_data.get('selfLink', '')\n\n  @property\n  def subnetwork(self) -> str:\n    return self._resource_data['subnetwork']\n\n  @property\n  def status(self) -> str:\n    return self._resource_data['status']\n\n\n@caching.cached_api_call(in_memory=True)\ndef get_addresses(project_id: str) -> List[Address]:\n  logging.debug('fetching addresses list: %s', project_id)\n  compute = apis.get_api('compute', 'v1', project_id)\n  addresses = []\n  request = compute.addresses().aggregatedList(project=project_id)\n  response = request.execute(num_retries=config.API_RETRIES)\n  addresses_by_regions = response['items']\n  for _, data_ in addresses_by_regions.items():\n    if 'addresses' not in data_:\n      continue\n    addresses.extend(\n        [Address(project_id, address) for address in data_['addresses']])\n  return addresses\n"
  },
  {
    "path": "gcpdiag/queries/network_stub.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Stub API calls used in network.py for testing.\n\nInstead of doing real API calls, we return test JSON data.\n\"\"\"\n\nimport json\n\nfrom gcpdiag.queries import apis_stub\n\n# pylint: disable=unused-argument\n# pylint: disable=invalid-name\n\nSUBNETWORKS_REGION = 'europe-west4'\n\n\nclass NetworkApiStub:\n  \"\"\"Mock object to simulate compute engine networking api calls.\n\n  This object is created by GceApiStub, not used directly in test scripts.\"\"\"\n\n  def __init__(self, mock_state):\n    self.mock_state = mock_state\n\n  def aggregatedList(self, project):\n    if self.mock_state == 'addresses':\n      return apis_stub.RestCallStub(project, 'compute-addresses')\n    else:\n      raise ValueError(f'cannot call method {self.mock_state} here')\n\n  def get(self, project, network=None, region=None, subnetwork=None):\n    if not subnetwork:\n      return apis_stub.RestCallStub(project, f'compute-network-{network}')\n    else:\n      self.mock_state = 'get_single_subnetwork'\n      self.subnetwork = subnetwork\n      self.region = region or SUBNETWORKS_REGION\n    self.project_id = project\n    return self\n\n  def get_network(self, project, network):\n    return apis_stub.RestCallStub(project, f'compute-network-{network}')\n\n  def get_routers(self, project, region, network):\n    return apis_stub.RestCallStub(project, f'compute-network-{region}')\n\n  def get_router_by_name(self, project, region, router_name):\n    return apis_stub.RestCallStub(project, f'compute-network-{region}')\n\n  def nat_router_status(self, project, router_name, region):\n    return apis_stub.RestCallStub(\n        project, f'compute-routers-routerStatus-{router_name}')\n\n  def get_nat_ip_info(self, project, router_name, region):\n    return apis_stub.RestCallStub(project,\n                                  f'compute-routers-rnatIpInfo-{router_name}')\n\n  def getIamPolicy(self, project, region, resource):\n    return apis_stub.RestCallStub(project, 'compute-subnetwork-policy')\n\n  def getEffectiveFirewalls(self, project, network):\n    return apis_stub.RestCallStub(project,\n                                  f'compute-effective-firewalls-{network}')\n\n  # pylint: disable=redefined-builtin\n  def list(self, project, region=None, filter=None, fields=None):\n    if self.mock_state == 'subnetworks':\n      return apis_stub.RestCallStub(\n          project, f'compute-subnetworks-{SUBNETWORKS_REGION}')\n    elif self.mock_state == 'routers':\n      if region:\n        return apis_stub.RestCallStub(project, f'compute-routers-{region}')\n      return apis_stub.RestCallStub(project,\n                                    f'compute-routers-{SUBNETWORKS_REGION}')\n    elif self.mock_state == 'networks':\n      return apis_stub.RestCallStub(project, 'compute-network-default')\n    elif self.mock_state == 'routes':\n      return apis_stub.RestCallStub(project, 'compute-network-routes')\n    else:\n      raise ValueError(f'cannot call method {self.mock_state} here')\n\n  def list_next(self, prev_request, prev_response):\n    return None\n\n  def execute(self, num_retries=0):\n    json_dir = apis_stub.get_json_dir(self.project_id)\n    if self.mock_state == 'get_single_subnetwork':\n      with open(json_dir / 'compute-subnetworks-aggregated.json',\n                encoding='utf-8') as json_file:\n        items = json.load(json_file)['items']\n        region = 'regions/' + self.region\n        subnets = items[region]['subnetworks']\n        subnet_resp = None\n        for subnet in subnets:\n          if subnet['name'] == self.subnetwork:\n            subnet_resp = subnet\n            break\n        if subnet_resp:\n          return subnet_resp\n        else:\n          raise ValueError(f'cannot call method {self.mock_state} here')\n\n  def getRouterStatus(self, project, router, region):\n    if self.mock_state == 'routers':\n      return apis_stub.RestCallStub(project,\n                                    f'compute-routers-routerStatus-{router}')\n\n  def getNatIpInfo(self, project, router, region):\n    if self.mock_state == 'routers':\n      return apis_stub.RestCallStub(project,\n                                    f'compute-routers-natIpInfo-{router}')\n"
  },
  {
    "path": "gcpdiag/queries/network_test.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test code in network.py.\"\"\"\n\nimport ipaddress\nimport re\nfrom unittest import mock\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import models\nfrom gcpdiag.queries import apis_stub, network\n\nDUMMY_PROJECT_ID = 'gcpdiag-fw-policy-aaaa'\nDUMMY_DEFAULT_NETWORK = 'default'\nDUMMY_DEFAULT_SUBNET = 'default'\nDUMMY_GKE_PROJECT_ID = 'gcpdiag-gke1-aaaa'\nDUMMY_GCE_PROJECT_ID = 'gcpdiag-gce1-aaaa'\nDUMMY_GKE_REGION = 'europe-west4'\nDUMMY_GKE_SUBNET = 'gke1-subnet'\nDUMMY_SERVICE_ACCOUNT = 'gke1sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com'\nDUMMY_VPC_PROJECT_ID = 'gcpdiag-vpc1-aaaa'\n\n\n@mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)\nclass TestNetwork:\n  \"\"\"Test network.Network.\"\"\"\n\n  def test_get_network(self):\n    net = network.get_network(\n        project_id=DUMMY_PROJECT_ID,\n        network_name=DUMMY_DEFAULT_NETWORK,\n        context=models.Context(project_id=DUMMY_PROJECT_ID))\n    assert net.name == DUMMY_DEFAULT_NETWORK\n    assert net.full_path == 'projects/gcpdiag-fw-policy-aaaa/global/networks/default'\n    assert net.short_path == f'{DUMMY_PROJECT_ID}/default'\n    assert net.self_link == \\\n        f'https://www.googleapis.com/compute/v1/projects/{DUMMY_PROJECT_ID}/global/networks/default'\n\n  def test_subnetworks(self):\n    net = network.get_network(\n        project_id=DUMMY_PROJECT_ID,\n        network_name=DUMMY_DEFAULT_NETWORK,\n        context=models.Context(project_id=DUMMY_PROJECT_ID))\n    expected_subnet_url = (\n        f'https://www.googleapis.com/compute/v1/projects/{DUMMY_PROJECT_ID}/'\n        'regions/europe-west4/subnetworks/default')\n    assert expected_subnet_url in net.subnetworks\n    assert isinstance(net.subnetworks[expected_subnet_url].ip_network,\n                      ipaddress.IPv4Network)\n\n  def test_cluster_subnetwork(self):\n    subnet = network.get_subnetwork(project_id=DUMMY_GKE_PROJECT_ID,\n                                    region=DUMMY_GKE_REGION,\n                                    subnetwork_name=DUMMY_GKE_SUBNET)\n    assert subnet.name == DUMMY_GKE_SUBNET\n    assert subnet.ip_network == ipaddress.ip_network('192.168.0.0/24')\n\n  def test_cluster_subnetwork_iam_policy(self):\n    context = models.Context(project_id=DUMMY_GKE_PROJECT_ID)\n    policy = network.get_subnetwork_iam_policy(context=context,\n                                               region=DUMMY_GKE_REGION,\n                                               subnetwork_name=DUMMY_GKE_SUBNET)\n    assert policy.has_role_permissions(\n        f'serviceAccount:{DUMMY_SERVICE_ACCOUNT}', 'roles/compute.networkUser')\n    assert not policy.has_role_permissions(\n        f'serviceAccount:{DUMMY_SERVICE_ACCOUNT}', 'roles/compute.networkAdmin')\n\n  def test_get_routers(self):\n    net = network.get_network(\n        project_id=DUMMY_GKE_PROJECT_ID,\n        network_name=DUMMY_DEFAULT_NETWORK,\n        context=models.Context(project_id=DUMMY_GKE_PROJECT_ID))\n    sub1 = network.get_subnetwork(project_id=DUMMY_GKE_PROJECT_ID,\n                                  region=DUMMY_GKE_REGION,\n                                  subnetwork_name=DUMMY_GKE_SUBNET)\n    sub2 = network.get_subnetwork(project_id=DUMMY_GKE_PROJECT_ID,\n                                  region=DUMMY_GKE_REGION,\n                                  subnetwork_name=DUMMY_DEFAULT_SUBNET)\n    router = network.get_router(project_id=DUMMY_GKE_PROJECT_ID,\n                                region=DUMMY_GKE_REGION,\n                                network=net)\n    assert router.name == 'gke-default-router'\n    assert router.subnet_has_nat(sub1) is False\n    assert router.subnet_has_nat(sub2) is True\n\n  def test_ingress_deny(self):\n    net = network.get_network(\n        project_id=DUMMY_PROJECT_ID,\n        network_name=DUMMY_DEFAULT_NETWORK,\n        context=models.Context(project_id=DUMMY_PROJECT_ID))\n    r = net.firewall.check_connectivity_ingress(\n        src_ip=ipaddress.ip_address('10.0.0.1'),  #\n        ip_protocol='tcp',\n        port=21)\n    assert r.action == 'deny'\n    r = net.firewall.check_connectivity_ingress(\n        src_ip=ipaddress.ip_network('10.0.0.0/24'),  #\n        ip_protocol='tcp',\n        port=21)\n    assert r.action == 'deny'\n\n  def test_ingress_deny_2(self):\n    net = network.get_network(\n        project_id=DUMMY_PROJECT_ID,\n        network_name=DUMMY_DEFAULT_NETWORK,\n        context=models.Context(project_id=DUMMY_PROJECT_ID))\n    r = net.firewall.check_connectivity_ingress(\n        src_ip=ipaddress.ip_network('10.100.0.16/29'),  #\n        ip_protocol='tcp',\n        port=1001)\n    assert r.action == 'deny'\n    assert r.matched_by_str == 'vpc firewall rule: fw-test-800'\n\n  def test_ingress_deny_3(self):\n    net = network.get_network(\n        project_id=DUMMY_PROJECT_ID,\n        network_name=DUMMY_DEFAULT_NETWORK,\n        context=models.Context(project_id=DUMMY_PROJECT_ID))\n    # a supernet of src_ip for a deny rule should also match\n    # (because we want to catch when a fw rule partially blocks\n    # a connection).\n    r = net.firewall.check_connectivity_ingress(\n        src_ip=ipaddress.ip_network('10.0.0.0/8'),  #\n        ip_protocol='tcp',\n        port=1001)\n    assert r.action == 'deny'\n    assert r.matched_by_str == 'vpc firewall rule: fw-test-800'\n\n  def test_ingress_allow_src_ip(self):\n    net = network.get_network(\n        project_id=DUMMY_PROJECT_ID,\n        network_name=DUMMY_DEFAULT_NETWORK,\n        context=models.Context(project_id=DUMMY_PROJECT_ID))\n    r = net.firewall.check_connectivity_ingress(\n        src_ip=ipaddress.ip_network('10.100.0.16/29'),  #\n        ip_protocol='tcp',\n        port=1006)\n    assert r.action == 'allow'\n    assert r.matched_by_str == 'vpc firewall rule: fw-test-900'\n\n  def test_ingress_allow_src_ip_subnet(self):\n    net = network.get_network(\n        project_id=DUMMY_PROJECT_ID,\n        network_name=DUMMY_DEFAULT_NETWORK,\n        context=models.Context(project_id=DUMMY_PROJECT_ID))\n    r = net.firewall.check_connectivity_ingress(\n        src_ip=ipaddress.ip_network('10.100.0.16/30'),  #\n        ip_protocol='tcp',\n        port=1006)\n    assert r.action == 'allow'\n    assert r.matched_by_str == 'vpc firewall rule: fw-test-900'\n\n  def test_ingress_allow_source_tags(self):\n    net = network.get_network(\n        project_id=DUMMY_PROJECT_ID,\n        network_name=DUMMY_DEFAULT_NETWORK,\n        context=models.Context(project_id=DUMMY_PROJECT_ID))\n    r = net.firewall.check_connectivity_ingress(\n        src_ip=ipaddress.ip_network('10.200.0.16/29'),  #\n        source_tags=['foo'],\n        ip_protocol='tcp',\n        port=1006)\n    assert r.action == 'allow'\n    assert r.matched_by_str == 'vpc firewall rule: fw-test-900'\n\n  def test_ingress_allow_target_tags(self):\n    net = network.get_network(\n        project_id=DUMMY_PROJECT_ID,\n        network_name=DUMMY_DEFAULT_NETWORK,\n        context=models.Context(project_id=DUMMY_PROJECT_ID))\n    r = net.firewall.check_connectivity_ingress(\n        src_ip=ipaddress.ip_address('192.168.1.1'),  #\n        target_tags=['bar'],\n        ip_protocol='tcp',\n        port=1234)\n    assert r.action == 'allow'\n    assert r.matched_by_str == 'vpc firewall rule: fw-test-903'\n\n  def test_ingress_allow_source_sa(self):\n    net = network.get_network(\n        project_id=DUMMY_PROJECT_ID,\n        network_name=DUMMY_DEFAULT_NETWORK,\n        context=models.Context(project_id=DUMMY_PROJECT_ID))\n    r = net.firewall.check_connectivity_ingress(\n        src_ip=ipaddress.ip_network('10.200.0.16/29'),  #\n        source_service_account=\n        'service-12340002@compute-system.iam.gserviceaccount.com',\n        ip_protocol='tcp',\n        port=4000)\n    assert r.action == 'allow'\n    assert r.matched_by_str == 'vpc firewall rule: fw-test-901'\n\n  def test_ingress_allow_target_sa(self):\n    net = network.get_network(\n        project_id=DUMMY_PROJECT_ID,\n        network_name=DUMMY_DEFAULT_NETWORK,\n        context=models.Context(project_id=DUMMY_PROJECT_ID))\n    r = net.firewall.check_connectivity_ingress(\n        src_ip=ipaddress.ip_network('10.200.0.16/29'),  #\n        target_tags=['foo'],\n        ip_protocol='tcp',\n        port=4000)\n    assert r.action == 'allow'\n\n  def test_ingress_parent_policy_allow(self):\n    net = network.get_network(\n        project_id=DUMMY_PROJECT_ID,\n        network_name=DUMMY_DEFAULT_NETWORK,\n        context=models.Context(project_id=DUMMY_PROJECT_ID))\n    r = net.firewall.check_connectivity_ingress(\n        src_ip=ipaddress.ip_network('10.101.0.1/32'),  #\n        ip_protocol='tcp',\n        port=2001)\n    assert r.action == 'allow'\n    assert r.matched_by_str == 'policy: parent-folder-policy'\n\n  def test_ingress_sub_policy_allow(self):\n    net = network.get_network(\n        project_id=DUMMY_PROJECT_ID,\n        network_name=DUMMY_DEFAULT_NETWORK,\n        context=models.Context(project_id=DUMMY_PROJECT_ID))\n    r = net.firewall.check_connectivity_ingress(\n        src_ip=ipaddress.ip_network('10.101.0.1/32'),  #\n        ip_protocol='tcp',\n        port=2003)\n    assert r.action == 'allow'\n    assert r.matched_by_str == 'policy: sub-folder-policy'\n\n  def test_ingress_sub_policy_allow_target_sa(self):\n    net = network.get_network(\n        project_id=DUMMY_PROJECT_ID,\n        network_name=DUMMY_DEFAULT_NETWORK,\n        context=models.Context(project_id=DUMMY_PROJECT_ID))\n    r = net.firewall.check_connectivity_ingress(\n        src_ip=ipaddress.ip_network('10.102.0.1/32'),  #\n        ip_protocol='tcp',\n        port=2000,\n        target_service_account=\n        'service-12340002@compute-system.iam.gserviceaccount.com')\n    assert r.action == 'allow'\n    assert r.matched_by_str == 'policy: sub-folder-policy'\n\n  def test_ingress_sub_policy_deny_wrong_target_sa(self):\n    net = network.get_network(\n        project_id=DUMMY_PROJECT_ID,\n        network_name=DUMMY_DEFAULT_NETWORK,\n        context=models.Context(project_id=DUMMY_PROJECT_ID))\n    r = net.firewall.check_connectivity_ingress(\n        src_ip=ipaddress.ip_network('10.102.0.1/32'),  #\n        ip_protocol='tcp',\n        port=2000,\n        target_service_account='foobar@compute-system.iam.gserviceaccount.com')\n    assert r.action == 'deny'\n\n  def test_get_ingress_rules(self):\n    net = network.get_network(\n        project_id=DUMMY_GKE_PROJECT_ID,\n        network_name=DUMMY_DEFAULT_NETWORK,\n        context=models.Context(project_id=DUMMY_GKE_PROJECT_ID))\n    pattern = re.compile(r'k8s-fw-l7-.*')\n    rules = net.firewall.get_vpc_ingress_rules(\n        name_pattern=pattern, target_tags=['gke-gke4-3520a9df-node'])\n    assert 'gke-gke4-3520a9df-node' in rules[0].target_tags\n    assert ipaddress.IPv4Network('130.211.0.0/22') in rules[0].source_ranges\n\n    pattern = re.compile(r'default-allow-.*')\n    rules = net.firewall.get_vpc_ingress_rules(name_pattern=pattern)\n    assert 'default-allow-rdp' in [r.name for r in rules]\n    assert 'default-allow-ssh' in [r.name for r in rules]\n    assert 'default-allow-internal' in [r.name for r in rules]\n    assert 'default-allow-icmp' in [r.name for r in rules]\n\n    rules = net.firewall.get_vpc_ingress_rules(name='gke-gke6-44734575-ssh')\n    assert 'gke-gke6-44734575-ssh' == rules[0].name\n    assert 'tcp' == rules[0].allowed[0]['IPProtocol']\n    assert '22' in rules[0].allowed[0]['ports']\n\n    rules = net.firewall.get_vpc_ingress_rules(name='not-existing-rule')\n    assert 'gke-gke3-b46b134d-ssh' not in [r.name for r in rules]\n\n  def test_egress_deny(self):\n    net = network.get_network(\n        project_id=DUMMY_GCE_PROJECT_ID,\n        network_name=DUMMY_DEFAULT_NETWORK,\n        context=models.Context(project_id=DUMMY_GCE_PROJECT_ID))\n    r = net.firewall.check_connectivity_egress(\n        src_ip=ipaddress.ip_address('10.0.0.1'),  #\n        ip_protocol='tcp',\n        port=21)\n    assert r.action == 'deny'\n    r = net.firewall.check_connectivity_egress(\n        src_ip=ipaddress.ip_network('10.0.0.0/24'),  #\n        ip_protocol='tcp',\n        port=21)\n    assert r.action == 'deny'\n\n  def test_egress_deny_2(self):\n    net = network.get_network(\n        project_id=DUMMY_GCE_PROJECT_ID,\n        network_name=DUMMY_DEFAULT_NETWORK,\n        context=models.Context(project_id=DUMMY_GCE_PROJECT_ID))\n    r = net.firewall.check_connectivity_egress(\n        src_ip=ipaddress.ip_network('142.250.125.95/32'),  #\n        ip_protocol='tcp',\n        port=1001)\n    assert r.action == 'allow'\n    assert r.matched_by_str == 'vpc firewall rule: fw-test-925'\n\n  def test_egress_deny_3(self):\n    net = network.get_network(\n        project_id=DUMMY_GCE_PROJECT_ID,\n        network_name=DUMMY_DEFAULT_NETWORK,\n        context=models.Context(project_id=DUMMY_GCE_PROJECT_ID))\n    r = net.firewall.check_connectivity_egress(\n        src_ip=ipaddress.ip_network('10.0.0.0/8'),  #\n        ip_protocol='tcp',\n        port=1001)\n    assert r.action == 'deny'\n    assert r.matched_by_str == 'vpc firewall rule: fw-test-950'\n\n  def test_egress_allow_src_ip(self):\n    net = network.get_network(\n        project_id=DUMMY_GCE_PROJECT_ID,\n        network_name=DUMMY_DEFAULT_NETWORK,\n        context=models.Context(project_id=DUMMY_GCE_PROJECT_ID))\n    r = net.firewall.check_connectivity_egress(\n        src_ip=ipaddress.ip_network('35.190.247.13/32'),  #\n        ip_protocol='tcp',\n        port=1688)\n    assert r.action == 'allow'\n    assert r.matched_by_str == 'vpc firewall rule: fw-test-1000'\n\n  def test_egress_allow_src_ip_subnet(self):\n    net = network.get_network(\n        project_id=DUMMY_GCE_PROJECT_ID,\n        network_name=DUMMY_DEFAULT_NETWORK,\n        context=models.Context(project_id=DUMMY_GCE_PROJECT_ID))\n    r = net.firewall.check_connectivity_egress(\n        src_ip=ipaddress.ip_network('10.100.0.16/30'),  #\n        ip_protocol='tcp',\n        port=1006)\n    assert r.action == 'deny'\n    assert r.matched_by_str == 'vpc firewall rule: fw-test-950'\n\n  def test_egress_allow_source_tags(self):\n    net = network.get_network(\n        project_id=DUMMY_GCE_PROJECT_ID,\n        network_name=DUMMY_DEFAULT_NETWORK,\n        context=models.Context(project_id=DUMMY_GCE_PROJECT_ID))\n    r = net.firewall.check_connectivity_egress(\n        src_ip=ipaddress.ip_network('45.100.0.0/24'),  #\n        source_tags=['foo'],\n        ip_protocol='tcp',\n        port=2033)\n    assert r.action == 'allow'\n    assert r.matched_by_str == 'vpc firewall rule: fw-test-1050'\n\n  def test_egress_allow_target_tags(self):\n    net = network.get_network(\n        project_id=DUMMY_GCE_PROJECT_ID,\n        network_name=DUMMY_DEFAULT_NETWORK,\n        context=models.Context(project_id=DUMMY_GCE_PROJECT_ID))\n    r = net.firewall.check_connectivity_egress(\n        src_ip=ipaddress.ip_address('192.168.1.1'),  #\n        target_tags=['bar'],\n        ip_protocol='tcp',\n        port=1234)\n    assert r.action == 'allow'\n    assert r.matched_by_str == 'vpc firewall rule: fw-test-1025'\n\n  def test_egress_allow_source_sa(self):\n    net = network.get_network(\n        project_id=DUMMY_GCE_PROJECT_ID,\n        network_name=DUMMY_DEFAULT_NETWORK,\n        context=models.Context(project_id=DUMMY_GCE_PROJECT_ID))\n    r = net.firewall.check_connectivity_egress(\n        src_ip=ipaddress.ip_network('10.200.0.16/29'),  #\n        source_service_account=\n        'service-12340002@compute-system.iam.gserviceaccount.com',\n        ip_protocol='tcp',\n        port=4000)\n    assert r.action == 'allow'\n    assert r.matched_by_str == 'vpc firewall rule: fw-test-1075'\n\n  def test_egress_parent_policy_allow(self):\n    net = network.get_network(\n        project_id=DUMMY_GCE_PROJECT_ID,\n        network_name=DUMMY_DEFAULT_NETWORK,\n        context=models.Context(project_id=DUMMY_GCE_PROJECT_ID))\n    r = net.firewall.check_connectivity_egress(\n        src_ip=ipaddress.ip_network('10.101.0.1/32'),  #\n        ip_protocol='tcp',\n        port=2001)\n    assert r.action == 'allow'\n    assert r.matched_by_str == 'policy: parent-folder-policy'\n\n  def test_egress_sub_policy_allow(self):\n    net = network.get_network(\n        project_id=DUMMY_GCE_PROJECT_ID,\n        network_name=DUMMY_DEFAULT_NETWORK,\n        context=models.Context(project_id=DUMMY_GCE_PROJECT_ID))\n    r = net.firewall.check_connectivity_egress(\n        src_ip=ipaddress.ip_network('10.102.0.1/32'),  #\n        ip_protocol='tcp',\n        port=2003)\n    assert r.action == 'allow'\n    assert r.matched_by_str == 'policy: sub-folder-policy'\n\n  def test_egress_sub_policy_allow_target_sa(self):\n    net = network.get_network(\n        project_id=DUMMY_GCE_PROJECT_ID,\n        network_name=DUMMY_DEFAULT_NETWORK,\n        context=models.Context(project_id=DUMMY_GCE_PROJECT_ID))\n    r = net.firewall.check_connectivity_egress(\n        src_ip=ipaddress.ip_network('10.102.0.1/32'),  #\n        ip_protocol='tcp',\n        port=2000,\n        target_service_account=\n        'service-12340002@compute-system.iam.gserviceaccount.com')\n    assert r.action == 'allow'\n    assert r.matched_by_str == 'policy: sub-folder-policy'\n\n  def test_egress_sub_policy_deny_wrong_target_sa(self):\n    net = network.get_network(\n        project_id=DUMMY_GCE_PROJECT_ID,\n        network_name=DUMMY_DEFAULT_NETWORK,\n        context=models.Context(project_id=DUMMY_GCE_PROJECT_ID))\n    r = net.firewall.check_connectivity_egress(\n        src_ip=ipaddress.ip_network('10.102.0.1/32'),  #\n        ip_protocol='tcp',\n        port=2000,\n        target_service_account='foobar@compute-system.iam.gserviceaccount.com')\n    assert r.action == 'deny'\n\n  def test_get_egress_rules(self):\n    net = network.get_network(\n        project_id=DUMMY_GCE_PROJECT_ID,\n        network_name=DUMMY_DEFAULT_NETWORK,\n        context=models.Context(project_id=DUMMY_GCE_PROJECT_ID))\n    pattern = re.compile(r'default-allow-.*')\n    rules = net.firewall.get_vpc_egress_rules(name_pattern=pattern)\n    assert 'default-allow-rdp' in [r.name for r in rules]\n    assert 'default-allow-ssh' in [r.name for r in rules]\n\n    rules = net.firewall.get_vpc_egress_rules(name='default-allow-ssh')\n    assert 'default-allow-ssh' == rules[0].name\n    assert 'tcp' == rules[0].allowed[0]['IPProtocol']\n    assert '22' in rules[0].allowed[0]['ports']\n\n    rules = net.firewall.get_vpc_egress_rules(name='not-existing-rule')\n    assert 'default-allow-ssh' not in [r.name for r in rules]\n\n  def test_get_addresses(self):\n    \"\"\"get addresses by project.\"\"\"\n    addresses = network.get_addresses(project_id=DUMMY_VPC_PROJECT_ID)\n    assert len(addresses) > 2\n\n    for address in addresses:\n      if address.name == 'address1':\n        assert address.short_path == 'gcpdiag-vpc1-aaaa/address1'\n\n      if address.name == 'address2':\n        assert address.short_path == 'gcpdiag-vpc1-aaaa/address2'\n\n      if address.name == 'address3':\n        assert address.short_path == 'gcpdiag-vpc1-aaaa/address3'\n\n      if address.name == 'address4':\n        assert address.short_path == 'gcpdiag-vpc1-aaaa/address4'\n\n  def test_get_router_by_name(self):\n    router = network.get_router_by_name(project_id='gcpdiag-gke1-aaaa',\n                                        region='europe-west4',\n                                        router_name='gke-default-router')\n    assert router.name == 'gke-default-router'\n\n    router = network.get_router_by_name(project_id='gcpdiag-gke1-aaaa',\n                                        region='us-east4',\n                                        router_name='dummy-router1')\n    assert router.name == 'dummy-router1'\n\n    router = network.get_router_by_name(project_id='gcpdiag-gke1-aaaa',\n                                        region='us-east4',\n                                        router_name='dummy-router2')\n    assert router.name == 'dummy-router2'\n\n    router = network.get_router_by_name(project_id='gcpdiag-gke1-aaaa',\n                                        region='us-east4',\n                                        router_name='dummy-router3')\n    assert router.name == 'dummy-router3'\n\n  def test_bgp_peer_status(self):\n    vlan_router_status = network.nat_router_status('gcpdiag-interconnect1-aaaa',\n                                                   router_name='dummy-router1',\n                                                   region='us-east4')\n    assert get_path(vlan_router_status.bgp_peer_status[0], ('state'),\n                    default=None) == 'Established'\n    assert get_path(vlan_router_status.bgp_peer_status[1], ('state'),\n                    default=None) == 'Established'\n\n    vlan_router_status = network.nat_router_status('gcpdiag-interconnect1-aaaa',\n                                                   router_name='dummy-router2',\n                                                   region='us-east4')\n    assert get_path(vlan_router_status.bgp_peer_status[0], ('state'),\n                    default=None) == 'Established'\n    assert get_path(vlan_router_status.bgp_peer_status[1], ('state'),\n                    default=None) == 'Idle'\n\n  def test_firewall_policy_sorting_same_ip(self):\n    net = network.get_network(\n        project_id=DUMMY_PROJECT_ID,\n        network_name=DUMMY_DEFAULT_NETWORK,\n        context=models.Context(project_id=DUMMY_PROJECT_ID))\n    # Check that deny rule is matched before allow rule with same priority and\n    # same src ip range\n    r = net.firewall.check_connectivity_ingress(\n        src_ip=ipaddress.ip_network('10.104.0.1/32'),\n        ip_protocol='tcp',\n        port=80)\n    assert r.action == 'deny'\n    assert r.matched_by_str == (\n        'policy: test-sorting-same-ip-policy, rule: deny rule with priority'\n        ' 1000 and same src ip range')\n\n  def test_firewall_policy_sorting(self):\n    net = network.get_network(\n        project_id=DUMMY_PROJECT_ID,\n        network_name=DUMMY_DEFAULT_NETWORK,\n        context=models.Context(project_id=DUMMY_PROJECT_ID))\n    # Check that deny rule is matched before allow rule with same priority\n    r = net.firewall.check_connectivity_ingress(\n        src_ip=ipaddress.ip_network('10.104.0.1/32'),\n        ip_protocol='tcp',\n        port=80)\n    assert r.action == 'deny'\n    expected_matched_str = (\n        'policy: test-sorting-same-ip-policy, rule: deny rule with priority'\n        ' 1000 and same src ip range')\n    assert r.matched_by_str == expected_matched_str\n\n    # Check that allow rule with lower priority is matched before deny rule\n    # with higher priority\n    r = net.firewall.check_connectivity_ingress(\n        src_ip=ipaddress.ip_network('10.101.0.1/32'),\n        ip_protocol='tcp',\n        port=2001)\n    assert r.action == 'allow'\n    assert r.matched_by_str == 'policy: parent-folder-policy'\n"
  },
  {
    "path": "gcpdiag/queries/networkmanagement.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Queries related networkmanagement API.\"\"\"\n\nimport ipaddress\nimport logging\nimport time\nimport uuid\nfrom typing import Union\n\nfrom gcpdiag import caching\nfrom gcpdiag.queries import apis\n\n#pylint: disable=invalid-name\nIPv4AddrOrIPv6Addr = Union[ipaddress.IPv4Address, ipaddress.IPv6Address]\nIPv4NetOrIPv6Net = Union[ipaddress.IPv4Network, ipaddress.IPv6Network]\nIPAddrOrNet = Union[IPv4AddrOrIPv6Addr, IPv4NetOrIPv6Net]\n\n\n@caching.cached_api_call(in_memory=False)\ndef run_connectivity_test(project_id: str, src_ip: str, dest_ip: str,\n                          dest_port: int, protocol: str):\n  \"\"\"Method to create/run an idempotent connectivity test\"\"\"\n  test_id = f'gcpdiag-connectivity-test-{uuid.uuid4()}'\n  # initialize the networkmanagement api\n  networkmanagement = apis.get_api('networkmanagement', 'v1', project_id)\n\n  # test input\n  test_input = {\n      'source': {\n          'ipAddress': src_ip,\n          'networkType': 'GCP_NETWORK'\n      },\n      'destination': {\n          'ipAddress': dest_ip,\n          'port': dest_port\n      },\n      'protocol': protocol\n  }\n\n  create_request = (networkmanagement.projects().locations().global_(\n  ).connectivityTests().create(parent=f'projects/{project_id}/locations/global',\n                               testId=test_id,\n                               body=test_input)).execute()\n  logging.info('Running a new connectivity test..')\n\n  # Wait a max of 60 seconds to fetch the request_status.\n  count = 0\n  create_status = networkmanagement.projects().locations().global_().operations(\n  ).get(name=create_request['name']).execute()\n  while not create_status['done'] and count <= 15:\n    time.sleep(4)\n    create_status = networkmanagement.projects().locations().global_(\n    ).operations().get(name=create_request['name']).execute()\n    count += 1\n\n  if create_status['done']:\n    # get the result of the connectivity test\n    res = (networkmanagement.projects().locations().global_().connectivityTests(\n    ).get(\n        name=\n        f'projects/{project_id}/locations/global/connectivityTests/{test_id}'))\n    result = res.execute()\n\n    return result\n  else:\n    logging.warning('Timeout running the connectivity test...')\n  return None\n"
  },
  {
    "path": "gcpdiag/queries/networkmanagement_stub.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Stub API calls used in lb.py for testing.\n\nInstead of doing real API calls, we return test JSON data.\n\"\"\"\nimport re\n\nfrom gcpdiag.queries import apis_stub\n\n# pylint: disable=unused-argument\n# pylint: disable=invalid-name\n\n\nclass NetworkManagementApiStub:\n  \"\"\"Mock object to simulate compute engine networking api calls.\n\n  This object is created by GceApiStub, not used directly in test scripts.\n  \"\"\"\n\n  def __init__(self, mock_state='init'):\n    self.mock_state = mock_state\n\n  def projects(self):\n    return self\n\n  def locations(self):\n    return self\n\n  def global_(self):\n    return self\n\n  def connectivityTests(self):\n    return self\n\n  def operations(self):\n    return OperationsStub()\n\n  def get(self, name):\n    pattern = r'projects/([^/]+)/locations/global/connectivityTests/([^/]+)'\n    match = re.search(pattern, name)\n    if match:\n      project = match.group(1)\n      return apis_stub.RestCallStub(project, 'connectivity-test')\n    else:\n      raise ValueError('cannot call get method here')\n\n  def create(self, *args, **kwargs):\n    return OperationsStub()\n\n  def delete(self, name):\n    del name\n    return OperationsStub()\n\n  # pylint: disable=redefined-builtin\n  def list(self, project, url):\n    pattern = r'projects/([^/]+)/locations/global/connectivityTests/([^/]+)'\n    match = re.search(pattern, url)\n    if match:\n      project = match.group(1)\n      return apis_stub.RestCallStub(project, 'connectivity-tests')\n    else:\n      raise ValueError(f'cannot call method {self.mock_state} here')\n\n  # override the apis_stub for delete and create method calls.\n  def execute(self, *args):\n    return {'name': 'override', 'done': True}\n\n\nclass OperationsStub:\n  \"\"\"Mock object to simulate networkmanagement operation calls.\n\n    This object is not used directly in test scripts.\n    \"\"\"\n\n  def __init__(self):\n    pass\n\n  def get(self, name):\n    del name\n    return self\n\n  def execute(self) -> dict:\n    return {'name': 'override', 'done': True}\n"
  },
  {
    "path": "gcpdiag/queries/notebooks.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Queries related to GCP Vertex AI Workbench Notebooks\n\"\"\"\n\nimport enum\nimport logging\nimport re\nfrom typing import Dict, Mapping, Union\n\nimport googleapiclient.errors\n\nfrom gcpdiag import caching, config, models, utils\nfrom gcpdiag.queries import apis\n\nHEALTH_STATE_KEY = 'healthState'\nHEALTH_INFO_KEY = 'healthInfo'\nINSTANCES_KEY = 'instances'\nRUNTIMES_KEY = 'runtimes'\nNAME_KEY = 'name'\n\n\nclass HealthStateEnum(enum.Enum):\n  \"\"\"Vertex AI Workbench user-managed notebooks instance health states\n\n  https://cloud.google.com/vertex-ai/docs/workbench/reference/rest/v1/projects.locations.instances/getInstanceHealth#healthstate\n  \"\"\"\n\n  HEALTH_STATE_UNSPECIFIED = 'HEALTH_STATE_UNSPECIFIED'\n  HEALTHY = 'HEALTHY'\n  UNHEALTHY = 'UNHEALTHY'\n  AGENT_NOT_INSTALLED = 'AGENT_NOT_INSTALLED'\n  AGENT_NOT_RUNNING = 'AGENT_NOT_RUNNING'\n\n  def __str__(self):\n    return str(self.value)\n\n\nclass StateEnum(enum.Enum):\n  \"\"\"Vertex AI Workbench instance states\n\n  https://cloud.google.com/vertex-ai/docs/workbench/reference/rest/v2/projects.locations.instances#state\n  \"\"\"\n\n  STATE_UNSPECIFIED = 'STATE_UNSPECIFIED'\n  STARTING = 'STARTING'\n  PROVISIONING = 'PROVISIONING'\n  ACTIVE = 'ACTIVE'\n  STOPPING = 'STOPPING'\n  STOPPED = 'STOPPED'\n  DELETED = 'DELETED'\n  UPGRADING = 'UPGRADING'\n  INITIALIZING = 'INITIALIZING'\n  SUSPENDING = 'SUSPENDING'\n  SUSPENDED = 'SUSPENDED'\n\n  def __str__(self):\n    return str(self.value)\n\n\nclass Instance(models.Resource):\n  \"\"\"Represent a Vertex AI Workbench user-managed notebook instance\n\n  https://cloud.google.com/vertex-ai/docs/workbench/reference/rest/v1/projects.locations.instances#resource:-instance\n  \"\"\"\n\n  _resource_data: dict\n\n  def __init__(self, project_id, resource_data):\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n\n  @property\n  def full_path(self) -> str:\n    \"\"\"\n    The 'name' of the instance is already in the full path form\n    projects/{project}/locations/{location}/instances/{instance}.\n    \"\"\"\n    return self._resource_data[NAME_KEY]\n\n  @property\n  def short_path(self) -> str:\n    path = self.full_path\n    path = re.sub(r'^projects/', '', path)\n    path = re.sub(r'/locations/', '/', path)\n    path = re.sub(r'/instances/', '/', path)\n    return path\n\n  @property\n  def metadata(self) -> dict:\n    return self._resource_data.get('metadata', {})\n\n  @property\n  def name(self) -> str:\n    logging.debug(self._resource_data)\n    return self._resource_data[NAME_KEY]\n\n\nclass Runtime(models.Resource):\n  \"\"\"Represent a Vertex AI Workbench runtime for a managed notebook instance\n\n  https://cloud.google.com/vertex-ai/docs/workbench/reference/rest/v1/projects.locations.runtimes#resource:-runtime\n  \"\"\"\n\n  _resource_data: dict\n\n  def __init__(self, project_id, resource_data):\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n\n  @property\n  def full_path(self) -> str:\n    \"\"\"\n    The 'name' of the runtime is already in the full path form\n    projects/{project}/locations/{location}/runtimes/{instance}.\n    \"\"\"\n    return self._resource_data[NAME_KEY]\n\n  @property\n  def short_path(self) -> str:\n    path = self.full_path\n    path = re.sub(r'^projects/', '', path)\n    path = re.sub(r'/locations/', '/', path)\n    path = re.sub(r'/runtimes/', '/', path)\n    return path\n\n  @property\n  def metadata(self) -> dict:\n    return self._resource_data.get('metadata', {})\n\n  @property\n  def name(self) -> str:\n    logging.debug(self._resource_data)\n    return self._resource_data[NAME_KEY]\n\n  @property\n  def software_config(self) -> dict:\n    return self._resource_data.get('softwareConfig', {})\n\n  @property\n  def idle_shutdown(self) -> bool:\n    return self.software_config.get('idleShutdown', False)\n\n  @property\n  def is_upgradeable(self) -> bool:\n    return self.software_config.get('upgradeable', False)\n\n  @property\n  def version(self) -> str:\n    return self.software_config.get('version', '')\n\n  @property\n  def health_state(self) -> HealthStateEnum:\n    return self._resource_data.get(HEALTH_STATE_KEY,\n                                   HealthStateEnum.HEALTH_STATE_UNSPECIFIED)\n\n\nclass WorkbenchInstance(Instance):\n  \"\"\"Represent a Vertex AI Workbench Instance\n\n  https://cloud.google.com/vertex-ai/docs/workbench/reference/rest/v2/projects.locations.instances#Instance\n  \"\"\"\n\n  _resource_data: dict\n\n  def __init__(self, project_id, resource_data):\n    super().__init__(project_id=project_id, resource_data=resource_data)\n    self._resource_data = resource_data\n\n  @property\n  def state(self) -> StateEnum:\n    return StateEnum[self._resource_data.get('state', 'STATE_UNSPECIFIED')]\n\n  @property\n  def gce_setup(self) -> dict:\n    return self._resource_data.get('gceSetup', {})\n\n  @property\n  def gce_service_account_email(self) -> str:\n    gce_setup_service_accounts = self.gce_setup.get('serviceAccounts', [])\n    return gce_setup_service_accounts[0].get(\n        'email', '') if len(gce_setup_service_accounts) > 0 else ''\n\n  @property\n  def network(self) -> str:\n    gce_setup_network_interfaces = self.gce_setup.get('networkInterfaces', [])\n    return gce_setup_network_interfaces[0].get(\n        'network', '') if len(gce_setup_network_interfaces) > 0 else ''\n\n  @property\n  def subnet(self) -> str:\n    gce_setup_network_interfaces = self.gce_setup.get('networkInterfaces', [])\n    return gce_setup_network_interfaces[0].get(\n        'subnet', '') if len(gce_setup_network_interfaces) > 0 else ''\n\n  @property\n  def disable_public_ip(self) -> bool:\n    return self.gce_setup.get('disablePublicIp', False)\n\n  @property\n  def metadata(self) -> dict:\n    # https://cloud.google.com/vertex-ai/docs/workbench/instances/manage-metadata#keys\n    return self.gce_setup.get('metadata', {})\n\n  @property\n  def environment_version(self) -> int:\n    return int(self.metadata.get('version', '0'))\n\n  @property\n  def disable_mixer(self) -> bool:\n    return self.metadata.get('disable-mixer', '').lower() == 'true'\n\n  @property\n  def serial_port_logging_enabled(self) -> bool:\n    return self.metadata.get('serial-port-logging-enable', '').lower() == 'true'\n\n  @property\n  def report_event_health(self) -> bool:\n    return self.metadata.get('report-event-health', '').lower() == 'true'\n\n  @property\n  def post_startup_script(self) -> str:\n    return self.metadata.get('post-startup-script', '')\n\n  @property\n  def startup_script(self) -> str:\n    return self.metadata.get('startup-script', '')\n\n  @property\n  def startup_script_url(self) -> str:\n    return self.metadata.get('startup-script-url', '')\n\n  @property\n  def health_state(self) -> HealthStateEnum:\n    return self._resource_data.get(HEALTH_STATE_KEY,\n                                   HealthStateEnum.HEALTH_STATE_UNSPECIFIED)\n\n  @property\n  def health_info(self) -> dict:\n    return self._resource_data.get(HEALTH_INFO_KEY, {})\n\n  @property\n  def is_jupyterlab_status_healthy(self) -> bool:\n    return self.health_info.get('jupyterlab_status', '') == '1'\n\n  @property\n  def is_jupyterlab_api_status_healthy(self) -> bool:\n    return self.health_info.get('jupyterlab_api_status', '') == '1'\n\n  @property\n  def is_notebooks_api_dns_healthy(self) -> bool:\n    return self.health_info.get('notebooks_api_dns', '') == '1'\n\n  @property\n  def is_proxy_registration_dns_healthy(self) -> bool:\n    return self.health_info.get('proxy_registration_dns', '') == '1'\n\n  @property\n  def is_system_healthy(self) -> bool:\n    return self.health_info.get('system_health', '') == '1'\n\n  @property\n  def is_docker_status_healthy(self) -> bool:\n    return self.health_info.get('docker_status', '') == '1'\n\n  @property\n  def is_docker_proxy_agent_status_healthy(self) -> bool:\n    return self.metadata.get('docker_proxy_agent_status', '') == '1'\n\n\n@caching.cached_api_call\ndef get_instances(context: models.Context) -> Mapping[str, Instance]:\n  instances: Dict[str, Instance] = {}\n  if not apis.is_enabled(context.project_id, 'notebooks'):\n    return instances\n  logging.debug(\n      'fetching list of Vertex AI Workbench notebook instances in project %s',\n      context.project_id)\n  notebooks_api = apis.get_api('notebooks', 'v1', context.project_id)\n  query = notebooks_api.projects().locations().instances().list(\n      parent=f'projects/{context.project_id}/locations/-'\n  )  #'-' (wildcard) all regions\n  try:\n    resp = query.execute(num_retries=config.API_RETRIES)\n    if INSTANCES_KEY not in resp:\n      return instances\n    for i in resp[INSTANCES_KEY]:\n      # verify that we have some minimal data that we expect\n      if NAME_KEY not in i:\n        raise RuntimeError(\n            'missing instance name in projects.locations.instances.list response'\n        )\n      # projects/{projectId}/locations/{location}/instances/{instanceId}\n      result = re.match(r'projects/[^/]+/locations/([^/]+)/instances/([^/]+)',\n                        i['name'])\n      if not result:\n        logging.error('invalid notebook instances data: %s', i['name'])\n        continue\n\n      if not context.match_project_resource(location=result.group(1),\n                                            resource=result.group(2),\n                                            labels=i.get('labels', {})):\n        continue\n      instances[i[NAME_KEY]] = Instance(project_id=context.project_id,\n                                        resource_data=i)\n  except googleapiclient.errors.HttpError as err:\n    raise utils.GcpApiError(err) from err\n  return instances\n\n\n@caching.cached_api_call\ndef _get_instance_health(context: models.Context, name: str) -> dict:\n  logging.debug(\n      'fetching Vertex AI user-managed notebook instance health state in '\n      'project %s', context.project_id)\n  notebooks_api = apis.get_api('notebooks', 'v1', context.project_id)\n  query = notebooks_api.projects().locations().instances().getInstanceHealth(\n      name=name)\n  return query.execute(num_retries=config.API_RETRIES)\n\n\ndef get_instance_health_info(context: models.Context, name: str) -> dict:\n  try:\n    return _get_instance_health(context, name).get(HEALTH_INFO_KEY, {})\n  except googleapiclient.errors.HttpError as err:\n    raise utils.GcpApiError(err) from err\n\n\ndef get_instance_health_state(context: models.Context,\n                              name: str) -> HealthStateEnum:\n  instance_health_state = HealthStateEnum('HEALTH_STATE_UNSPECIFIED')\n\n  try:\n    resp = _get_instance_health(context, name)\n    if HEALTH_STATE_KEY not in resp:\n      raise RuntimeError(\n          'missing instance health state in projects.locations.instances:getInstanceHealth response'\n      )\n    instance_health_state = HealthStateEnum(resp[HEALTH_STATE_KEY])\n    return instance_health_state\n  except googleapiclient.errors.HttpError as err:\n    raise utils.GcpApiError(err) from err\n  return instance_health_state\n\n\n@caching.cached_api_call\ndef instance_is_upgradeable(\n    context: models.Context,\n    notebook_instance: str) -> Dict[str, Union[str, bool]]:\n  is_upgradeable: Dict[str, Union[str, bool]] = {}\n  if not apis.is_enabled(context.project_id, 'notebooks'):\n    logging.error('Notebooks API is not enabled')\n    return is_upgradeable\n  if not notebook_instance:\n    logging.error('notebookInstance not provided')\n    return is_upgradeable\n  logging.debug(\n      'fetching Vertex AI user-managed notebook instance is upgradeable in project %s',\n      context.project_id)\n  notebooks_api = apis.get_api('notebooks', 'v1', context.project_id)\n  query = notebooks_api.projects().locations().instances().isUpgradeable(\n      notebookInstance=notebook_instance)\n  try:\n    resp = query.execute(num_retries=config.API_RETRIES)\n    if 'upgradeable' not in resp:\n      raise RuntimeError(\n          'missing instance upgradeable data in projects.locations.instances:isUpgradeable response'\n      )\n    is_upgradeable = resp\n    return is_upgradeable\n  except googleapiclient.errors.HttpError as err:\n    raise utils.GcpApiError(err) from err\n  return is_upgradeable\n\n\n@caching.cached_api_call\ndef get_runtimes(context: models.Context) -> Mapping[str, Runtime]:\n  runtimes: Dict[str, Runtime] = {}\n  if not apis.is_enabled(context.project_id, 'notebooks'):\n    return runtimes\n  logging.debug(\n      'fetching list of Vertex AI Workbench managed notebook runtimes in project %s',\n      context.project_id)\n  notebooks_api = apis.get_api('notebooks', 'v1', context.project_id)\n  query = notebooks_api.projects().locations().runtimes().list(\n      parent=f'projects/{context.project_id}/locations/-'\n  )  #'-' (wildcard) all regions\n  try:\n    resp = query.execute(num_retries=config.API_RETRIES)\n    if RUNTIMES_KEY not in resp:\n      return runtimes\n    for i in resp[RUNTIMES_KEY]:\n      # verify that we have some minimal data that we expect\n      if NAME_KEY not in i:\n        raise RuntimeError(\n            'missing runtime name in projects.locations.runtimes.list response')\n      # projects/{projectId}/locations/{location}/runtimes/{runtimeId}\n      result = re.match(r'projects/[^/]+/locations/([^/]+)/runtimes/([^/]+)',\n                        i['name'])\n      if not result:\n        logging.error('invalid notebook runtimes data: %s', i['name'])\n        continue\n\n      if not context.match_project_resource(location=result.group(1),\n                                            resource=result.group(2),\n                                            labels=i.get('labels', {})):\n        continue\n      runtimes[i[NAME_KEY]] = Runtime(project_id=context.project_id,\n                                      resource_data=i)\n  except googleapiclient.errors.HttpError as err:\n    raise utils.GcpApiError(err) from err\n  return runtimes\n\n\n@caching.cached_api_call\ndef get_workbench_instance(project_id: str, zone: str,\n                           instance_name: str) -> Instance:\n  \"\"\"Returns workbench instance object matching instance name and zone\n  https://cloud.google.com/vertex-ai/docs/workbench/reference/rest/v2/projects.locations.instances/get\n  \"\"\"\n  workbench_instance: WorkbenchInstance = WorkbenchInstance(\n      project_id=project_id, resource_data={})\n  if not apis.is_enabled(project_id, 'notebooks'):\n    return workbench_instance\n  notebooks_api = apis.get_api('notebooks', 'v2', project_id)\n  name = f'projects/{project_id}/locations/{zone}/instances/{instance_name}'\n  query = notebooks_api.projects().locations().instances().get(name=name)\n  try:\n    response = query.execute(num_retries=config.API_RETRIES)\n    workbench_instance = WorkbenchInstance(project_id=project_id,\n                                           resource_data=response)\n  except googleapiclient.errors.HttpError as err:\n    raise utils.GcpApiError(err) from err\n  return workbench_instance\n\n\n@caching.cached_api_call\ndef workbench_instance_check_upgradability(\n    project_id: str,\n    workbench_instance_name: str) -> Dict[str, Union[str, bool]]:\n  \"\"\"Returns if workbench instance is upgradable and upgrade details\n  https://cloud.google.com/vertex-ai/docs/workbench/reference/rest/v2/projects.locations.instances/checkUpgradability\"\"\"\n  check_upgradability: Dict[str, Union[str, bool]] = {}\n  if not apis.is_enabled(project_id, 'notebooks'):\n    logging.error('Notebooks API is not enabled')\n    return check_upgradability\n  if not workbench_instance_name:\n    logging.error('Workbench Instance name not provided')\n    return check_upgradability\n  logging.debug(\n      'fetching Vertex AI Workbench Instance is upgradeable in project %s',\n      project_id)\n  notebooks_api = apis.get_api('notebooks', 'v2', project_id)\n  query = notebooks_api.projects().locations().instances().checkUpgradability(\n      notebookInstance=workbench_instance_name)\n  try:\n    response = query.execute(num_retries=config.API_RETRIES)\n    return response\n  except googleapiclient.errors.HttpError as err:\n    raise utils.GcpApiError(err) from err\n  return check_upgradability\n"
  },
  {
    "path": "gcpdiag/queries/notebooks_stub.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Stub API calls used in notebooks.py for testing.\n\nInstead of doing real API calls, we return test JSON data.\n\"\"\"\n\nimport json\nimport re\n\nfrom gcpdiag.queries import apis_stub\n\n# pylint: disable=unused-argument\n# pylint: disable=invalid-name\n\nNO_INSTANCE_NAME_ERROR = \\\n  'Not able to call {} without setting instance name for API.'\n\nNO_RUNTIME_NAME_ERROR = \\\n  'Not able to call {} without setting runtime name for API.'\n\n\nclass NotebooksApiStub:\n  \"\"\"Mock object to simulate notebooks api calls.\"\"\"\n\n  def __init__(self, mock_state='init'):\n    self.mock_state: str = mock_state\n    self.project_id: str = ''\n    self.instance_name: str = ''\n    self.zone: str = ''\n\n  def projects(self):\n    return self\n\n  def locations(self):\n    return self\n\n  def instances(self):\n    self.mock_state = 'instances'\n    return self\n\n  def runtimes(self):\n    self.mock_state = 'runtimes'\n    return self\n\n  def list(self, parent):\n    m = re.match(r'projects/([^/]+)', parent)\n    project_id = m.group(1)\n    if self.mock_state == 'instances':\n      return apis_stub.RestCallStub(project_id, 'instances')\n    if self.mock_state == 'runtimes':\n      return apis_stub.RestCallStub(project_id, 'runtimes')\n    else:\n      raise ValueError('incorrect value received')\n\n  def get(self, name):\n    m = re.match(r'projects/([^/]+)/locations/([^/]+)/instances/([^/]+)', name)\n    project_id = m.group(1)\n    zone = m.group(2)\n    instance_name = m.group(3)\n    if self.mock_state == 'instances':\n      if instance_name:\n        self.mock_state = 'get_single_instance'\n        self.instance_name = instance_name\n        self.name = name\n        self.project_id = project_id\n        self.zone = zone\n        return self\n    raise ValueError(f'incorrect value received: {name}')\n\n  def getInstanceHealth(self, name):\n    m = re.match(r'projects/([^/]+)/locations/([^/]+)/instances/([^/]+)', name)\n    if m:\n      project_id = m.group(1)\n      return apis_stub.RestCallStub(project_id, 'health-state')\n    else:\n      raise ValueError(f'incorrect value received for instance name: {name}')\n\n  def isUpgradeable(self, notebookInstance):\n    m = re.match(r'projects/([^/]+)/locations/([^/]+)/instances/([^/]+)',\n                 notebookInstance)\n    if m:\n      project_id = m.group(1)\n      return apis_stub.RestCallStub(project_id, 'is-upgradeable')\n    else:\n      raise ValueError(\n          f'incorrect value received for notebookInstance: {notebookInstance}')\n\n  def execute(self, num_retries=0):\n    json_dir = apis_stub.get_json_dir(self.project_id)\n    if self.mock_state == 'get_single_instance':\n      with open(json_dir / 'workbench-instances.json',\n                encoding='utf-8') as json_file:\n        instances = json.load(json_file)['instances']\n        for instance in instances:\n          if instance['name'] == self.name:\n            return instance\n\n  def checkUpgradability(self, notebookInstance):\n    m = re.match(r'projects/([^/]+)/locations/([^/]+)/instances/([^/]+)',\n                 notebookInstance)\n    if m:\n      project_id = m.group(1)\n      return apis_stub.RestCallStub(\n          project_id, 'notebooks2instance-ok-check-upgradability')\n    else:\n      raise ValueError(\n          f'incorrect value received for instance name: {notebookInstance}')\n"
  },
  {
    "path": "gcpdiag/queries/notebooks_test.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Test code in notebooks.py\"\"\"\n\nfrom unittest import mock\n\nfrom gcpdiag import models\nfrom gcpdiag.queries import apis_stub, notebooks\n\nDUMMY_PROJECT_NAME = 'gcpdiag-notebooks1-aaaa'\nDUMMY_PROJECT_NAME2 = 'gcpdiag-notebooks2-aaaa'\nDUMMY_INSTANCE_NAME = 'gcpdiag-notebooks1instance-aaaa'\nDUMMY_INSTANCE_OK_NAME = 'notebooks2instance-ok'\nDUMMY_INSTANCE_PROVISIONING_STUCK_NAME = 'notebooks2instance-provisioning-stuck'\nDUMMY_ZONE = 'us-west1-a'\nDUMMY_REGION = 'us-west1'\nDUMMY_INSTANCE_FULL_PATH_NAME = \\\n  f'projects/{DUMMY_PROJECT_NAME}/locations/{DUMMY_ZONE}/instances/{DUMMY_INSTANCE_NAME}'\nDUMMY_INSTANCE_OK_FULL_PATH_NAME = \\\n  f'projects/{DUMMY_PROJECT_NAME2}/locations/{DUMMY_ZONE}/instances/{DUMMY_INSTANCE_OK_NAME}'\nDUMMY_RUNTIME_NAME = 'gcpdiag-notebooks1runtime-aaaa'\nDUMMY_RUNTIME_FULL_PATH_NAME = \\\n  f'projects/{DUMMY_PROJECT_NAME}/locations/{DUMMY_REGION}/runtimes/{DUMMY_RUNTIME_NAME}'\nDUMMY_PERM = 'domain:google.com'\nDUMMY_HEALTH_STATE = notebooks.HealthStateEnum('UNHEALTHY')\nDUMMY_IS_UPGRADEABLE = True\nDUMMY_NOT_UPGRADEABLE = False\n\n\n@mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)\nclass TestNotebooks:\n  \"\"\"Test Vertex AI Workbench Notebooks\"\"\"\n\n  def test_get_instances(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    instances = notebooks.get_instances(context=context)\n    assert DUMMY_INSTANCE_FULL_PATH_NAME in instances\n\n  def test_get_runtimes(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    runtimes = notebooks.get_runtimes(context=context)\n    assert DUMMY_RUNTIME_FULL_PATH_NAME in runtimes\n\n  def test_get_instance_health(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    instance_health_state = notebooks.get_instance_health_state(\n        context=context, name=DUMMY_INSTANCE_FULL_PATH_NAME)\n    assert DUMMY_HEALTH_STATE == instance_health_state\n\n  def test_instance_is_upgradeable(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    instance_is_upgradeable = notebooks.instance_is_upgradeable(\n        context=context, notebook_instance=DUMMY_INSTANCE_FULL_PATH_NAME)\n    assert DUMMY_IS_UPGRADEABLE == instance_is_upgradeable.get('upgradeable')\n\n  def test_get_instance(self):\n    instance = notebooks.get_workbench_instance(\n        project_id=DUMMY_PROJECT_NAME2,\n        zone=DUMMY_ZONE,\n        instance_name=DUMMY_INSTANCE_OK_NAME)\n    assert DUMMY_INSTANCE_OK_NAME in instance.name\n\n  def test_instance_check_upgradability(self):\n    instance_upgradability = notebooks.workbench_instance_check_upgradability(\n        project_id=DUMMY_PROJECT_NAME2,\n        workbench_instance_name=DUMMY_INSTANCE_OK_FULL_PATH_NAME)\n    assert DUMMY_NOT_UPGRADEABLE == instance_upgradability.get('upgradeable')\n"
  },
  {
    "path": "gcpdiag/queries/orgpolicy.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Queries related to organization policy constraints.\"\"\"\n\nimport logging\nfrom typing import Dict, List\n\nimport googleapiclient.errors\n\nfrom gcpdiag import caching, config, utils\nfrom gcpdiag.queries import apis\n\nRESOURCE_TYPE_PROJECT = 'projects'\nRESOURCE_TYPE_ORGANIZATION = 'organizations'\n\n\nclass PolicyConstraint:\n\n  def __init__(self, name, resource_data):\n    self.name = name\n    self._resource_data = resource_data\n\n  def __str__(self):\n    return self.name + ': ' + self._resource_data.__str__()\n\n  pass\n\n\nclass BooleanPolicyConstraint(PolicyConstraint):\n\n  def is_enforced(self) -> bool:\n    return self._resource_data.get('enforced', False)\n\n\nclass ListPolicyConstraint(PolicyConstraint):\n\n  def allowed_values(self) -> List[str]:\n    return self._resource_data.get('allowedValues', [])\n\n  def denied_values(self) -> List[str]:\n    return self._resource_data.get('deniedValues', [])\n\n\nclass RestoreDefaultPolicyConstraint(PolicyConstraint):\n\n  def is_default_restored(self) -> bool:\n    \"\"\"Indicates that the constraintDefault enforcement behavior is restored.\"\"\"\n    return True\n\n\n@caching.cached_api_call\ndef _get_effective_org_policy_all_constraints(\n    project_id: str) -> Dict[str, PolicyConstraint]:\n  # NOTE: this function doesn't get the \"effective\" org policy, but just\n  # the policies that are directly set on the project. This is a deliberate\n  # choice to improve performance.\n  #\n  # in order to speed up execution, we fetch all constraints that we think\n  # could be useful on the first call to get_effective_org_policy()\n\n  # note: it would be probably better to use this API, but then this would\n  # require users to enable it :-( :\n  # https://cloud.google.com/resource-manager/docs/reference/orgpolicy/rest/v2/projects.policies/getEffectivePolicy\n  return get_all_project_org_policies(project_id)\n\n\ndef get_effective_org_policy(project_id: str, constraint: str):\n  \"\"\"Get the effective org policy for a project and a given constraint.\n\n  This function will first try to get the policy from a cached list of all\n  policies that are set on the project. If the policy is not found, it will\n  make a direct API call to get the effective policy for the given constraint.\n  \"\"\"\n  all_constraints = _get_effective_org_policy_all_constraints(project_id)\n  if constraint in all_constraints:\n    return all_constraints[constraint]\n\n  # If the constraint is not in the list of all policies, it means that\n  # the policy is not set on the project. In this case, we need to get the\n  # effective policy directly.\n  crm_api = apis.get_api('cloudresourcemanager', 'v1', project_id)\n  try:\n    req = crm_api.projects().getEffectiveOrgPolicy(\n        resource=f'projects/{project_id}', body={'constraint': constraint})\n    result = req.execute(num_retries=config.API_RETRIES)\n  except googleapiclient.errors.HttpError as err:\n    raise utils.GcpApiError(err) from err\n\n  if 'booleanPolicy' in result:\n    return BooleanPolicyConstraint(result['constraint'],\n                                   result['booleanPolicy'])\n  elif 'listPolicy' in result:\n    return ListPolicyConstraint(result['constraint'], result['listPolicy'])\n  else:\n    raise ValueError(f'unknown constraint type: {result}')\n\n\n@caching.cached_api_call\ndef get_all_project_org_policies(project_id: str):\n  \"\"\"list all the org policies set for a particular resource.\n\n  Args:\n      project_id: The project ID.\n\n  Returns:\n      A dictionary of PolicyConstraint objects, keyed by constraint name.\n\n  Raises:\n      utils.GcpApiError: on API errors.\n  \"\"\"\n  crm_api = apis.get_api('cloudresourcemanager', 'v1', project_id)\n  resource = f'projects/{project_id}'\n  all_constraints: Dict[str, PolicyConstraint] = {}\n  logging.debug('listing org policies of %s', project_id)\n\n  request = crm_api.projects().listOrgPolicies(resource=resource)\n\n  while request:\n    try:\n      response = request.execute(num_retries=config.API_RETRIES)\n    except googleapiclient.errors.HttpError as err:\n      raise utils.GcpApiError(err) from err\n\n    policies_list = response.get('policies', [])\n\n    for policy in policies_list:\n      constraint_name = policy.get('constraint')\n\n      if 'booleanPolicy' in policy:\n        all_constraints[constraint_name] = BooleanPolicyConstraint(\n            constraint_name, policy['booleanPolicy'])\n      elif 'listPolicy' in policy:\n        all_constraints[constraint_name] = ListPolicyConstraint(\n            constraint_name, policy['listPolicy'])\n      elif 'restoreDefault' in policy:\n        all_constraints[constraint_name] = RestoreDefaultPolicyConstraint(\n            constraint_name, policy['restoreDefault'])\n      else:\n        logging.warning('unknown constraint type: %s', policy)\n\n    request = crm_api.projects().listOrgPolicies_next(request, response)\n\n  return all_constraints\n"
  },
  {
    "path": "gcpdiag/queries/orgpolicy_test.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test code in crm.py.\"\"\"\n\nimport unittest\nfrom unittest import mock\n\nfrom gcpdiag.queries import apis_stub, orgpolicy\n\nDUMMY_PROJECT_ID = 'gcpdiag-fw-policy-aaaa'\n\n\n@mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)\nclass Test(unittest.TestCase):\n  \"\"\"Test project.py\"\"\"\n\n  def test_get_effective_org_policy(self):\n    p = orgpolicy.get_effective_org_policy(\n        DUMMY_PROJECT_ID, 'constraints/compute.disableSerialPortAccess')\n    assert p.is_enforced()\n\n    p = orgpolicy.get_effective_org_policy(\n        DUMMY_PROJECT_ID, 'constraints/compute.requireOsLogin')\n    assert not p.is_enforced()\n\n  def test_get_all_project_org_policies(self):\n    policies = orgpolicy.get_all_project_org_policies(DUMMY_PROJECT_ID)\n    assert len(policies) == 2\n    assert isinstance(\n        policies['constraints/cloudbuild.allowedWorkerPools'],\n        orgpolicy.ListPolicyConstraint,\n    )\n    assert isinstance(\n        policies['constraints/compute.skipDefaultNetworkCreation'],\n        orgpolicy.BooleanPolicyConstraint,\n    )\n    assert policies['constraints/cloudbuild.allowedWorkerPools'].allowed_values(\n    ) == ['projects/12340004/locations/us-central1/workerPools/test-pool']\n"
  },
  {
    "path": "gcpdiag/queries/osconfig.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Queries related to GCP OS Config\"\"\"\n\nimport logging\nimport re\nfrom typing import Dict, Mapping, Optional\n\nimport googleapiclient.errors\n\nfrom gcpdiag import caching, config, models, utils\nfrom gcpdiag.queries import apis, apis_utils\n\n\nclass Inventory(models.Resource):\n  \"\"\"Represents OS Inventory data of a GCE VM instance\"\"\"\n\n  _resource_data: dict\n\n  def __init__(self, project_id, resource_data):\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n\n  # e.g: projects/{project_number}/locations/{location}/instances/{instance_id}/inventory\n  @property\n  def full_path(self) -> str:\n    return self._resource_data['name']\n\n  # e.g: {project_number}/{location}/{instance_id}/inventory\n  @property\n  def short_path(self) -> str:\n    path = self.full_path\n    path = re.sub(r'^projects/', '', path)\n    path = re.sub(r'/locations/', '/', path)\n    path = re.sub(r'/instances/', '/', path)\n    return path\n\n  # e.g: '5221437597918447050'\n  @property\n  def instance_id(self) -> str:\n    return self._resource_data['name'].split('/')[-2]\n\n  # e.g: debian, windows.\n  @property\n  def os_shortname(self) -> str:\n    if 'osInfo' in self._resource_data:\n      return self._resource_data['osInfo'].get('shortName', '')\n    return ''\n\n  @property\n  def os_version(self) -> str:\n    if 'osInfo' in self._resource_data:\n      return self._resource_data['osInfo'].get('version', '')\n    return ''\n\n  # <key: installed package name, value: installed version>\n  @property\n  def installed_packages(self) -> Mapping[str, str]:\n    installed_packages: Dict[str, str] = {}\n    if 'items' in self._resource_data:\n      installed_items = [\n          i for i in self._resource_data['items'].values()\n          if i.get('type', '') == 'INSTALLED_PACKAGE'\n      ]\n      for item in installed_items:\n        if 'installedPackage' not in item:\n          continue\n        pkg = item['installedPackage']\n        if 'yumPackage' in pkg:\n          p = pkg['yumPackage']\n          installed_packages[p.get('packageName', '')] = p.get('version', '')\n        elif 'aptPackage' in pkg:\n          p = pkg['aptPackage']\n          installed_packages[p.get('packageName', '')] = p.get('version', '')\n        elif 'googetPackage' in pkg:\n          p = pkg['googetPackage']\n          installed_packages[p.get('packageName', '')] = p.get('version', '')\n        elif 'windowsApplication' in pkg:\n          p = pkg['windowsApplication']\n          installed_packages[p.get('displayName',\n                                   '')] = p.get('displayVersion', '')\n    return installed_packages\n\n\n@caching.cached_api_call(in_memory=True)\ndef list_inventories(\n    context: models.Context,\n    location: str,\n) -> Mapping[str, Inventory]:\n  inventories: Dict[str, Inventory] = {}\n  if not apis.is_enabled(context.project_id, 'osconfig'):\n    return inventories\n  osconfig_api = apis.get_api('osconfig', 'v1', context.project_id)\n  logging.debug(\n      'fetching inventory data for all VMs under zone %s in project %s',\n      location,\n      context.project_id,\n  )\n  query = osconfig_api.projects().locations().instances().inventories()\n\n  try:\n    resp = apis_utils.list_all(\n        query.list(\n            parent=(\n                f'projects/{context.project_id}/locations/{location}/instances/-'\n            ),\n            view='FULL',\n        ),\n        query.list_next,\n        'inventories',\n    )\n  except googleapiclient.errors.HttpError as err:\n    if err.resp.status in [404]:\n      return inventories\n    raise utils.GcpApiError(err) from err\n\n  for i in resp:\n    inventory = Inventory(context.project_id, resource_data=i)\n    inventories[inventory.instance_id] = inventory\n  return inventories\n\n\n@caching.cached_api_call(in_memory=True)\ndef get_inventory(context: models.Context, location: str,\n                  instance_name: str) -> Optional[Inventory]:\n  if not apis.is_enabled(context.project_id, 'osconfig'):\n    return None\n  osconfig_api = apis.get_api('osconfig', 'v1', context.project_id)\n  logging.debug(\n      'fetching inventory data for VM %s in zone %s in project %s',\n      instance_name,\n      location,\n      context.project_id,\n  )\n  query = (osconfig_api.projects().locations().instances().inventories().get(\n      name=\n      f'projects/{context.project_id}/locations/{location}/instances/{instance_name}/inventory',\n      view='FULL',\n  ))\n  try:\n    resp = query.execute(num_retries=config.API_RETRIES)\n  except googleapiclient.errors.HttpError as err:\n    if err.resp.status in [404]:\n      return None\n    raise utils.GcpApiError(err) from err\n  return Inventory(context.project_id, resource_data=resp)\n"
  },
  {
    "path": "gcpdiag/queries/osconfig_stub.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Stub API calls used in osconfig.py for testing.\n\nInstead of doing real API calls, we return test JSON data.\n\"\"\"\n\nimport re\n\nfrom gcpdiag.queries import apis_stub\n\n# pylint: disable=unused-argument\n# pylint: disable=invalid-name\n\nDUMMY_PROJECT_NAME = 'gcpdiag-osconfig1-aaaa'\nDUMMY_NON_EXISTENT_INSTANCE_NAME = 'instance-does-not-exist'\n\n\nclass OSConfigStub:\n  \"\"\"Mock object to simulate osconfig api calls.\"\"\"\n\n  def __init__(self, mock_state='init'):\n    self.mock_state = mock_state\n\n  def projects(self):\n    return self\n\n  def locations(self):\n    return self\n\n  def instances(self):\n    return self\n\n  def inventories(self):\n    self.mock_state = 'inventory'\n    return self\n\n  def list_next(self, previous_request, previous_response):\n    return None\n\n  def list(self, parent, **kwargs):\n    if self.mock_state == 'inventory':\n      stub = apis_stub.RestCallStub(DUMMY_PROJECT_NAME, 'inventories')\n      return stub\n    else:\n      raise ValueError('incorrect value received')\n\n  def get(self, name, **kwargs):\n    m = re.match(r'([\\w].+)/instances/([^/]+)', name)\n    instance_name = m.group(2)\n    if self.mock_state == 'inventory':\n      stub = apis_stub.RestCallStub(DUMMY_PROJECT_NAME, 'inventory')\n      if instance_name == DUMMY_NON_EXISTENT_INSTANCE_NAME:\n        stub.fail_next(1, 404)\n      return stub\n    else:\n      raise ValueError('incorrect value received')\n"
  },
  {
    "path": "gcpdiag/queries/osconfig_test.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Test code in pubsub.py.\"\"\"\n\nfrom unittest import mock\n\nfrom gcpdiag import models\nfrom gcpdiag.queries import apis_stub, osconfig\n\nDUMMY_PROJECT_NAME = 'gcpdiag-osconfig1-aaaa'\nPACKAGE_NAME_LINUX = 'google-fluentd'\nPACKAGE_VERSION = '1.10.1-1'\nOS_SHORTNAME = 'debian'\nOS_VERSION = '10'\nDUMMY_LOCATION = 'us-central1-a'\nDUMMY_INSTANCE_NAME = 'instance-1'\nDUMMY_NON_EXISTENT_INSTANCE_NAME = 'instance-does-not-exist'\n\n\n@mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)\nclass TestOSConfig:\n  \"\"\"Test OSConfig\"\"\"\n\n  def test_get_inventory(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    inventory = osconfig.get_inventory(\n        context=context,\n        location=DUMMY_LOCATION,\n        instance_name=DUMMY_INSTANCE_NAME,\n    )\n    assert OS_SHORTNAME == inventory.os_shortname\n    assert OS_VERSION == inventory.os_version\n    assert PACKAGE_NAME_LINUX in inventory.installed_packages\n    assert PACKAGE_VERSION == inventory.installed_packages[PACKAGE_NAME_LINUX]\n\n  def test_get_inventory_of_non_existent_instance(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    inventory = osconfig.get_inventory(\n        context=context,\n        location=DUMMY_LOCATION,\n        instance_name=DUMMY_NON_EXISTENT_INSTANCE_NAME,\n    )\n    assert inventory is None\n\n  def test_list_inventories(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    inventories = osconfig.list_inventories(\n        context=context,\n        location=DUMMY_LOCATION,\n    )\n    assert len(inventories) == 4\n    instance_id = '730128809742038298'\n    project_number = 12340051\n    assert instance_id in inventories\n    inventory = inventories[instance_id]\n    assert 'windows' == inventory.os_shortname\n    assert '10.0.20348' == inventory.os_version\n    assert 'GooGet - google-cloud-ops-agent' in inventory.installed_packages\n    assert (inventory.short_path ==\n            f'{project_number}/us-central1-a/{instance_id}/inventory')\n"
  },
  {
    "path": "gcpdiag/queries/pubsub.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Queries related to GCP PubSub\n\n\"\"\"\n\nimport logging\nimport re\nfrom typing import Dict, Mapping, Union\n\nimport googleapiclient.errors\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import caching, config, models, utils\nfrom gcpdiag.queries import apis, iam\n\n\nclass Topic(models.Resource):\n  \"\"\"Represent a Topic\"\"\"\n  _resource_data: dict\n\n  def __init__(self, project_id, resource_data):\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n    self._metadata_dict = None\n\n  @property\n  def name(self) -> str:\n    m = re.search(r'/topics/([^/]+)$', self._resource_data['name'])\n    if not m:\n      raise RuntimeError('can\\'t determine name of topic %s' %\n                         (self._resource_data['name']))\n    return m.group(1)\n\n  @property\n  def full_path(self) -> str:\n    return self._resource_data['name']\n\n  @property\n  def short_path(self) -> str:\n    path = self.project_id + '/' + self.name\n    return path\n\n  @property\n  def kms_key_name(self) -> str:\n    return self._resource_data['kmsKeyName']\n\n\n@caching.cached_api_call\ndef get_topics(context: models.Context) -> Mapping[str, Topic]:\n  \"\"\"Get all topics(Does not include deleted topics).\"\"\"\n  topics: Dict[str, Topic] = {}\n  if not apis.is_enabled(context.project_id, 'pubsub'):\n    return topics\n  pubsub_api = apis.get_api('pubsub', 'v1', context.project_id)\n  logging.debug('fetching list of PubSub topics in project %s',\n                context.project_id)\n  query = pubsub_api.projects().topics().list(\n      project=f'projects/{context.project_id}')\n  try:\n    resp = query.execute(num_retries=config.API_RETRIES)\n    if 'topics' not in resp:\n      return topics\n    for t in resp['topics']:\n      # verify that we have some minimal data that we expect\n      if 'name' not in t:\n        raise RuntimeError('missing data in topics response')\n        # projects/{project}/topics/{topic}\n      result = re.match(r'projects/[^/]+/topics/([^/]+)', t['name'])\n      if not result:\n        logging.error('invalid topic data: %s', t['name'])\n        continue\n\n      if not context.match_project_resource(resource=result.group(1),\n                                            labels=t.get('labels', {})):\n        continue\n\n      topics[t['name']] = Topic(project_id=context.project_id, resource_data=t)\n  except googleapiclient.errors.HttpError as err:\n    raise utils.GcpApiError(err) from err\n  return topics\n\n\nclass TopicIAMPolicy(iam.BaseIAMPolicy):\n\n  def _is_resource_permission(self, permission):\n    return True\n\n\n@caching.cached_api_call(in_memory=True)\ndef get_topic_iam_policy(context: models.Context, name: str) -> TopicIAMPolicy:\n  project_id = utils.get_project_by_res_name(name)\n\n  pubsub_api = apis.get_api('pubsub', 'v1', project_id)\n  request = pubsub_api.projects().topics().getIamPolicy(resource=name)\n\n  return iam.fetch_iam_policy(request, TopicIAMPolicy, project_id, name,\n                              context)\n\n\nclass Subscription(models.Resource):\n  \"\"\"Represent a Subscription.\"\"\"\n  _resource_data: dict\n\n  def __init__(self, project_id, resource_data):\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n    self._metadata_dict = None\n\n  @property\n  def name(self) -> str:\n    m = re.search(r'/subscriptions/([^/]+)$', self._resource_data['name'])\n    if not m:\n      raise RuntimeError('can\\'t determine name of subscription %s' %\n                         (self._resource_data['name']))\n    return m.group(1)\n\n  @property\n  def full_path(self) -> str:\n    return self._resource_data['name']\n\n  @property\n  def short_path(self) -> str:\n    path = self.project_id + '/' + self.name\n    return path\n\n  @property\n  def topic(self) -> Union[Topic, str]:\n    \"\"\"\n    Return subscription's topic as a Topic object,\n    or String '_deleted-topic_' if topic is deleted.\n    \"\"\"\n    if 'topic' not in self._resource_data:\n      raise RuntimeError('topic not set for subscription {self.name}')\n    elif self._resource_data['topic'] == '_deleted-topic_':\n      return '_deleted_topic_'\n\n    m = re.match(r'projects/([^/]+)/topics/([^/]+)',\n                 self._resource_data['topic'])\n    if not m:\n      raise RuntimeError(\"can't parse topic: %s\" % self._resource_data['topic'])\n    (project_id, topic_name) = (m.group(1), self._resource_data['topic'])\n    topics = get_topics(models.Context(project_id))\n    if topic_name not in topics:\n      raise RuntimeError(\n          f'Topic {topic_name} for Subscription {self.name} not found')\n    return topics[topic_name]\n\n  @property\n  def push_config(self) -> dict:\n    return self._resource_data.get('pushConfig', {})\n\n  @property\n  def push_oidc_service_account_email(self) -> str:\n    \"\"\"Return the OIDC service account email for a push subscription.\"\"\"\n    return self.push_config.get('oidcToken', {}).get('serviceAccountEmail', '')\n\n  def is_detached(self) -> bool:\n    \"\"\"Return if subscription is detached.\"\"\"\n    if 'detached' in self._resource_data:\n      return bool(self._resource_data['detached'])\n    return False\n\n  def is_big_query_subscription(self) -> bool:\n    \"\"\"Return Boolean value if subscription is a big query subscription.\"\"\"\n    if 'bigqueryConfig' in self._resource_data:\n      return True\n    return False\n\n  def is_gcs_subscription(self) -> bool:\n    \"\"\"Return Boolean value if subscription is a gcs subscription.\"\"\"\n    if 'cloudStorageConfig' in self._resource_data:\n      return True\n    return False\n\n  def is_push_subscription(self) -> bool:\n    \"\"\"Return Boolean value if subscription is a push subscription.\"\"\"\n    if (self._resource_data['pushConfig'] or self.is_big_query_subscription() or\n        self.is_gcs_subscription()):\n      return True\n    return False\n\n  def is_active(self) -> bool:\n    \"\"\"Return Boolean value if subscription is active.\"\"\"\n    return self._resource_data['state'] == 'ACTIVE'\n\n  def has_dead_letter_topic(self) -> bool:\n    \"\"\"Return Truthy value if subscription has a dead-letter topic.\"\"\"\n    if 'deadLetterPolicy' in self._resource_data:\n      return bool(self._resource_data['deadLetterPolicy']['deadLetterTopic'])\n    return False\n\n  def dead_letter_topic(self) -> str:\n    \"\"\"Return the dead-letter topic.\"\"\"\n    if self.has_dead_letter_topic():\n      return self._resource_data.get('deadLetterPolicy',\n                                     {}).get('deadLetterTopic', '')\n    return ''\n\n  def gcs_subscription_bucket(self) -> str:\n    \"\"\"Return the name of the bucket attached to GCS subscription.\"\"\"\n    if self.is_gcs_subscription():\n      return get_path(self._resource_data, ('cloudStorageConfig', 'bucket'))\n    return ''  # acts as a null return that can be evaluated as a false value\n\n\n@caching.cached_api_call\ndef get_subscriptions(context: models.Context) -> Mapping[str, Subscription]:\n  subscriptions: Dict[str, Subscription] = {}\n  if not apis.is_enabled(context.project_id, 'pubsub'):\n    return subscriptions\n  pubsub_api = apis.get_api('pubsub', 'v1', context.project_id)\n  logging.debug('fetching list of PubSub subscriptions in project %s',\n                context.project_id)\n  query = pubsub_api.projects().subscriptions().list(\n      project=f'projects/{context.project_id}')\n  try:\n    resp = query.execute(num_retries=config.API_RETRIES)\n    if 'subscriptions' not in resp:\n      return subscriptions\n    for s in resp['subscriptions']:\n      # verify that we have some minimal data that we expect\n      if 'name' not in s:\n        raise RuntimeError('missing data in topics response')\n\n      # projects/{project}/subscriptions/{sub}\n      result = re.match(r'projects/[^/]+/subscriptions/([^/]+)', s['name'])\n      if not result:\n        logging.error('invalid subscription data: %s', s['name'])\n        continue\n\n      if not context.match_project_resource(resource=result.group(1),\n                                            labels=s.get('labels', {})):\n        continue\n\n      subscriptions[s['name']] = Subscription(project_id=context.project_id,\n                                              resource_data=s)\n  except googleapiclient.errors.HttpError as err:\n    raise utils.GcpApiError(err) from err\n  return subscriptions\n\n\n@caching.cached_api_call\ndef get_subscription(project_id: str,\n                     subscription_name: str) -> Union[None, Subscription]:\n  if not apis.is_enabled(project_id, 'pubsub'):\n    return None\n  pubsub_api = apis.get_api('pubsub', 'v1', project_id)\n  logging.debug('fetching PubSub subscription in project %s', project_id)\n  query = pubsub_api.projects().subscriptions().get(\n      subscription=f'projects/{project_id}/subscriptions/{subscription_name}')\n  try:\n    resp = query.execute(num_retries=config.API_RETRIES)\n    return Subscription(project_id=project_id, resource_data=resp)\n  except googleapiclient.errors.HttpError as err:\n    raise utils.GcpApiError(err) from err\n\n\nclass SubscriptionIAMPolicy(iam.BaseIAMPolicy):\n\n  def _is_resource_permission(self, permission):\n    return True\n\n\n@caching.cached_api_call(in_memory=True)\ndef get_subscription_iam_policy(context: models.Context,\n                                name: str) -> SubscriptionIAMPolicy:\n  project_id = utils.get_project_by_res_name(name)\n\n  pubsub_api = apis.get_api('pubsub', 'v1', project_id)\n  request = pubsub_api.projects().subscriptions().getIamPolicy(resource=name)\n\n  return iam.fetch_iam_policy(request, SubscriptionIAMPolicy, project_id, name,\n                              context)\n"
  },
  {
    "path": "gcpdiag/queries/pubsub_stub.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Stub API calls used in pubsub.py for testing.\n\nInstead of doing real API calls, we return test JSON data.\n\"\"\"\n\nimport json\nimport re\n\nfrom gcpdiag.queries import apis_stub\n\n# pylint: disable=unused-argument\n# pylint: disable=invalid-name\n\nDUMMY_PROJECT_NAME = 'gcpdiag-pubsub1-aaaa'\n\n\nclass PubsubApiStub(apis_stub.ApiStub):\n  \"\"\"Mock object to simulate pubsub api calls.\"\"\"\n\n  def __init__(self, mock_state='init', project_id=None):\n    self.mock_state = mock_state\n    self.project_id = project_id\n\n  def projects(self):\n    return self\n\n  def topics(self):\n    self.mock_state = 'topics'\n    return self\n\n  def subscriptions(self):\n    self.mock_state = 'subscriptions'\n    return self\n\n  def get(self, subscription):\n    self.mock_state = 'subscription'\n    self.subscription = subscription\n    return self\n\n  def list(self, project):\n    m = re.match(r'projects/([^/]+)', project)\n    project_id = m.group(1)\n    if self.mock_state == 'topics':\n      return apis_stub.RestCallStub(project_id, 'topics')\n    if self.mock_state == 'subscriptions':\n      return apis_stub.RestCallStub(project_id, 'subscriptions')\n    else:\n      raise ValueError('incorrect value received')\n\n  def getIamPolicy(self, resource):\n    if self.mock_state == 'topics':\n      return apis_stub.RestCallStub(DUMMY_PROJECT_NAME, 'topic-iam')\n    if self.mock_state == 'subscriptions':\n      return apis_stub.RestCallStub(DUMMY_PROJECT_NAME, 'subscriptions-iam')\n    else:\n      raise ValueError('incorrect value received')\n\n  def execute(self, num_retries: int = 0):\n    if self.mock_state == 'subscription':\n      m = re.match(r'projects/([^/]+)/subscriptions/([^/]+)', self.subscription)\n      project_id = ''\n      if m:\n        project_id = m.group(1)\n      json_dir = apis_stub.get_json_dir(project_id)\n      with open(json_dir / 'subscriptions.json', encoding='utf-8') as json_file:\n        data = json.load(json_file)\n      for s in data.get('subscriptions', []):\n        if s['name'] == self.subscription:\n          return s\n    return None\n"
  },
  {
    "path": "gcpdiag/queries/pubsub_test.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Test code in pubsub.py.\"\"\"\n\nfrom unittest import mock\n\nfrom gcpdiag import models\nfrom gcpdiag.queries import apis_stub, pubsub\n\nDUMMY_PROJECT_NAME = 'gcpdiag-pubsub1-aaaa'\nDUMMY_TOPIC_NAME = 'projects/gcpdiag-pubsub1-aaaa/topics/gcpdiag-pubsub1topic-9pm6hng1'\nDUMMY_SUB_NAME = 'projects/gcpdiag-pubsub1-aaaa/subscriptions/gcpdiag-pubsub1subscription-9pm6hng1'\nDUMMY_SUB_SHORT_NAME = 'gcpdiag-pubsub1subscription-9pm6hng1'\nDUMMY_PERM = 'domain:google.com'\n\n\n@mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)\nclass TestPubsub:\n  \"\"\"Test Pubsub\"\"\"\n\n  def test_get_topics(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    topics = pubsub.get_topics(context=context)\n    assert DUMMY_TOPIC_NAME in topics\n\n  def test_get_subscriptions(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    subscriptions = pubsub.get_subscriptions(context=context)\n    assert DUMMY_SUB_NAME in subscriptions\n\n  def test_get_subscription(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    subscription = pubsub.get_subscription(\n        project_id=context.project_id, subscription_name=DUMMY_SUB_SHORT_NAME)\n    assert subscription.full_path == DUMMY_SUB_NAME\n\n  def test_get_topic_iam_policy(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    policy = pubsub.get_topic_iam_policy(context, DUMMY_TOPIC_NAME)\n    assert DUMMY_PERM in policy.get_members()\n\n  def test_get_subscription_iam_policy(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    policy = pubsub.get_subscription_iam_policy(context, DUMMY_SUB_NAME)\n    assert DUMMY_PERM in policy.get_members()\n"
  },
  {
    "path": "gcpdiag/queries/quotas.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Queries related to Quota.\"\"\"\n\nCONSUMER_QUOTA_QUERY_TEMPLATE = \"\"\"\nfetch consumer_quota\n| filter resource.service == '{service_name}'\n| {{ metric serviceruntime.googleapis.com/quota/allocation/usage\n    | align next_older(1d)\n    | group_by [resource.project_id, metric.quota_metric, resource.location],\n        max(val())\n  ; metric serviceruntime.googleapis.com/quota/limit\n    | filter metric.limit_name =~ '{limit_name}'\n    | align next_older(1d)\n    | group_by [resource.project_id, metric.quota_metric, resource.location],\n        min(val())\n  }}\n| join\n| value [val(0), val(1)]\n| within {within_days}d\n| group_by 1d, [max(val(0))/min(val(1)), min(val(1))]\n\"\"\"\n\nQUOTA_EXCEEDED_QUERY_TEMPLATE = \"\"\"\nfetch consumer_quota\n| metric 'serviceruntime.googleapis.com/quota/exceeded'\n| group_by 1d, [value_exceeded_count_true: count_true(value.exceeded)]\n| within {within_days}d\n\"\"\"\n\nQUOTA_EXCEEDED_HOURLY_PER_SERVICE_QUERY_TEMPLATE = \"\"\"\nfetch consumer_quota\n| metric 'serviceruntime.googleapis.com/quota/exceeded'\n| filter (resource.service =~ {service_name})\n| group_by 1h, [value_exceeded_count_true: count_true(value.exceeded)]\n| within {within_days}d\n\"\"\"\n\nQUOTA_EXCEEDED_QUERY_WINDOW_TEMPLATE = \"\"\"\nfetch consumer_quota\n| metric 'serviceruntime.googleapis.com/quota/exceeded'\n| group_by 1h, [value_exceeded_count_true: count_true(value.exceeded)]\n| within {start_time}, {end_time}\n\"\"\"\n"
  },
  {
    "path": "gcpdiag/queries/recommender_stub.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# Lint as: python3\n\"\"\"Recommender Stub API\n\nInstead of doing real API calls, we return test JSON data.\n\"\"\"\nfrom gcpdiag.queries import apis_stub, billing_stub\n\n# pylint: disable=unused-argument\n# pylint: disable=invalid-name\n\n\nclass RecommenderApiStub:\n  \"\"\"Mock object to simulate recommender cost insights\"\"\"\n\n  def billingAccounts(self):\n    return billing_stub.RecommenderBillingApiStub()\n\n  def projects(self):\n    return self\n\n  def locations(self):\n    return self\n\n  def insightTypes(self):\n    return self\n\n  def insights(self):\n    return self\n\n  def list(self, parent):\n    parent_split = parent.split('/')\n    project, scope, insight_type = (\n        parent_split[1],\n        parent_split[3],\n        parent_split[-1],\n    )\n    if (insight_type ==\n        'google.networkanalyzer.networkservices.loadBalancerInsight'):\n      return apis_stub.RestCallStub(project, f'lb-insights-{scope}')\n\n  def list_next(self, previous_request, previous_response):\n    return None\n"
  },
  {
    "path": "gcpdiag/queries/vertex.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Queries related to GCP Vertex AI\n\"\"\"\n\nimport enum\nimport logging\nimport re\nfrom typing import Dict\n\nimport googleapiclient.errors\n\nfrom gcpdiag import caching, config, models, utils\nfrom gcpdiag.queries import apis\n\nFEATURESTORES_KEY = 'featurestores'\nNAME_KEY = 'name'\nSTATE_KEY = 'state'\n\nREGIONS = {\n    1: 'asia-east1',\n    2: 'asia-east2',\n    3: 'asia-northeast1',\n    4: 'asia-northeast2',\n    5: 'asia-northeast3',\n    6: 'asia-south1',\n    7: 'asia-south2',\n    8: 'asia-southeast1',\n    9: 'asia-southeast2',\n    10: 'australia-southeast1',\n    11: 'australia-southeast2',\n    12: 'europe-central2',\n    13: 'europe-north1',\n    14: 'europe-southwest1',\n    15: 'europe-west1',\n    16: 'europe-west2',\n    17: 'europe-west3',\n    18: 'europe-west4',\n    19: 'europe-west6',\n    20: 'europe-west8',\n    21: 'europe-west9',\n    22: 'europe-west12',\n    23: 'me-central1',\n    24: 'me-west1',\n    25: 'northamerica-northeast1',\n    26: 'northamerica-northeast2',\n    27: 'southamerica-east1',\n    28: 'southamerica-west1',\n    29: 'us-central1',\n    30: 'us-east1',\n    31: 'us-east4',\n    32: 'us-east5',\n    33: 'us-south1',\n    34: 'us-west1',\n    35: 'us-west2',\n    36: 'us-west3',\n    37: 'us-west4',\n}\n\n# Different Vertex AI features available in different regions\nFEATURE_REGIONS = {\n    FEATURESTORES_KEY: [\n        1, 2, 3, 5, 6, 8, 9, 10, 12, 15, 16, 17, 18, 19, 21, 25, 26, 27, 29, 30,\n        31, 34, 35, 36, 37\n    ]\n}\n\n\nclass FeaturestoreStateEnum(enum.Enum):\n  \"\"\"The possible states a Vertex AI featurestore can have.\n\n  https://cloud.google.com/vertex-ai/docs/reference/rest/v1/projects.locations.featurestores#state\n  \"\"\"\n\n  STATE_UNSPECIFIED = 'STATE_UNSPECIFIED'\n  STABLE = 'STABLE'\n  UPDATING = 'UPDATING'\n\n  def __str__(self):\n    return str(self.value)\n\n\nclass Featurestore(models.Resource):\n  \"\"\"Represent a Vertex AI featurestore\n\n  https://cloud.google.com/vertex-ai/docs/reference/rest/v1/projects.locations.featurestores#resource:-featurestore\n  \"\"\"\n\n  _resource_data: dict\n\n  def __init__(self, project_id, resource_data):\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n\n  @property\n  def full_path(self) -> str:\n    \"\"\"\n    The 'name' of the featurestore is already in the full path form\n    projects/{project}/locations/{location}/featurestores/{featurestore}.\n    \"\"\"\n    return self._resource_data[NAME_KEY]\n\n  @property\n  def short_path(self) -> str:\n    path = self.full_path\n    path = re.sub(r'^projects/', '', path)\n    path = re.sub(r'/locations/', '/', path)\n    path = re.sub(r'/featurestores/', '/', path)\n    return path\n\n  @property\n  def name(self) -> str:\n    logging.debug(self._resource_data)\n    return self._resource_data[NAME_KEY]\n\n  @property\n  def state(self) -> str:\n    logging.debug(self._resource_data)\n    return self._resource_data[STATE_KEY]\n\n\n@caching.cached_api_call\ndef get_featurestores(context: models.Context) -> Dict[str, Featurestore]:\n  featurestores: Dict[str, Featurestore] = {}\n  if not apis.is_enabled(context.project_id, 'aiplatform'):\n    return featurestores\n  for region in FEATURE_REGIONS[FEATURESTORES_KEY]:\n    featurestores_res: Dict[str, Featurestore] = {}\n    region_name = REGIONS[region]\n    logging.debug(\n        'fetching list of Vertex AI featurestores in project %s for region %s',\n        context.project_id, region_name)\n    vertex_api = apis.get_api('aiplatform', 'v1', context.project_id,\n                              region_name)\n    query = vertex_api.projects().locations().featurestores().list(\n        parent=f'projects/{context.project_id}/locations/{region_name}')\n    try:\n      resp = query.execute(num_retries=config.API_RETRIES)\n      if FEATURESTORES_KEY not in resp:\n        continue\n      for resp_i in resp[FEATURESTORES_KEY]:\n        # verify that we have some minimal data that we expect\n        if NAME_KEY not in resp_i:\n          raise RuntimeError(\n              'missing featurestore name in projects.locations.featurestores.list response'\n          )\n        i = Featurestore(project_id=context.project_id, resource_data=resp_i)\n        featurestores_res[i.full_path] = i\n        if featurestores:\n          featurestores.update(featurestores_res)\n        else:\n          featurestores = featurestores_res\n    except googleapiclient.errors.HttpError as err:\n      raise utils.GcpApiError(err) from err\n  return featurestores\n"
  },
  {
    "path": "gcpdiag/queries/vertex_stub.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Stub API calls used in vertex.py for testing.\n\nInstead of doing real API calls, we return test JSON data.\n\"\"\"\n\nimport re\n\nfrom gcpdiag.queries import apis_stub\n\n# pylint: disable=unused-argument\n# pylint: disable=invalid-name\n\nNO_FEATURESTORE_NAME_ERROR = \\\n  'Not able to call {} without setting featurestore name for API.'\n\n\nclass VertexApiStub:\n  \"\"\"Mock object to simulate aiplatform (vertex) api calls.\"\"\"\n\n  def __init__(self, mock_state='init'):\n    self.mock_state = mock_state\n\n  def projects(self):\n    return self\n\n  def locations(self):\n    return self\n\n  def featurestores(self):\n    self.mock_state = 'featurestores'\n    return self\n\n  def list(self, parent):\n    m = re.match(r'projects/([^/]+)', parent)\n    project_id = m.group(1)\n    if self.mock_state == 'featurestores':\n      return apis_stub.RestCallStub(project_id, 'featurestores')\n    else:\n      raise ValueError('incorrect value received')\n"
  },
  {
    "path": "gcpdiag/queries/vertex_test.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Test code in vertex.py.\"\"\"\n\nfrom unittest import mock\n\nfrom gcpdiag import models\nfrom gcpdiag.queries import apis_stub, vertex\n\nDUMMY_PROJECT_NAME = 'gcpdiag-vertex1-aaaa'\nDUMMY_PROJECT_NUMBER = '12340015'\nDUMMY_FEATURESTORE_NAME = 'gcpdiag_vertex1featurestore_aaaa'\nDUMMY_FEATURESTORE_FULL_PATH_NAME = \\\n  f'projects/{DUMMY_PROJECT_NUMBER}/locations/us-west1/featurestores/{DUMMY_FEATURESTORE_NAME}'\nDUMMY_PERM = 'domain:google.com'\nDUMMY_FEATURESTORE_STATE = vertex.FeaturestoreStateEnum('STATE_UNSPECIFIED')\n\n\n@mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)\nclass TestVertex:\n  \"\"\"Test Vertex AI Featurestores\"\"\"\n\n  def test_get_featurestores(self):\n    context = models.Context(project_id=DUMMY_PROJECT_NAME)\n    featurestores = vertex.get_featurestores(context=context)\n    assert DUMMY_FEATURESTORE_FULL_PATH_NAME in featurestores\n"
  },
  {
    "path": "gcpdiag/queries/vpn.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Queries related to VPN tunnel.\"\"\"\n\nimport logging\nimport re\nfrom typing import List\n\nfrom googleapiclient import errors as googleapiclient_errors\n\nfrom gcpdiag import caching, config, models, utils\nfrom gcpdiag.queries import apis\n\n\nclass Vpn(models.Resource):\n  \"\"\"\n  Represents a Vpn Tunnel.\n  https://cloud.google.com/compute/docs/reference/rest/v1/vpnTunnels\n  \"\"\"\n  _resource_data: dict\n\n  def __init__(self, project_id, resource_data):\n    super().__init__(project_id=project_id)\n    self._resource_data = resource_data\n\n  @property\n  def name(self) -> str:\n    return self._resource_data['name']\n\n  @property\n  def under_maintenance(self) -> bool:\n    return self._resource_data.get('status') == 'UNDER_MAINTENANCE'\n\n  @property\n  def peer_ip(self) -> str:\n    return self._resource_data['peerIp']\n\n  @property\n  def status(self) -> str:\n    return self._resource_data['status']\n\n  @property\n  def router(self) -> str:\n    return self._resource_data['router']\n\n  @property\n  def id(self) -> str:\n    return self._resource_data['id']\n\n  @property\n  def local_traffic_selector(self) -> List[str]:\n    return self._resource_data.get('localTrafficSelector', [])\n\n  @property\n  def remote_traffic_selector(self) -> List[str]:\n    return self._resource_data.get('remoteTrafficSelector', [])\n\n  @property\n  def self_link(self) -> str:\n    return self._resource_data['selfLink']\n\n  @property\n  def full_path(self) -> str:\n    result = re.match(r'https://www.googleapis.com/compute/v1/(.*)',\n                      self.self_link)\n    if result:\n      return result.group(1)\n    else:\n      return f'>> {self.self_link}'\n\n  @property\n  def short_path(self) -> str:\n    path = self.project_id + '/' + self.name\n    return path\n\n\n@caching.cached_api_call(in_memory=True)\ndef get_vpn(project_id: str, vpn_name: str, region: str) -> Vpn:\n  logging.debug('fetching VPN: %s', vpn_name)\n  compute = apis.get_api('compute', 'v1', project_id)\n\n  request = compute.vpnTunnels().get(project=project_id,\n                                     vpnTunnel=vpn_name,\n                                     region=region)\n  try:\n    response = request.execute(num_retries=config.API_RETRIES)\n  except googleapiclient_errors.HttpError as err:\n    raise utils.GcpApiError(err)\n  return Vpn(project_id, response)\n"
  },
  {
    "path": "gcpdiag/queries/vpn_stub.py",
    "content": "# Copyright 2021 Google LLC\n\"\"\"Stub API calls used in vpn.py for testing.\"\"\"\n\nfrom gcpdiag.queries import apis_stub\n\n# pylint: disable=invalid-name\n# pylint: disable=unused-argument\n\n\nclass VpnApiStub:\n\n  def vpnTunnels(self):\n    return self\n\n  def get(self, project, region, vpnTunnel):\n    return apis_stub.RestCallStub(project, vpnTunnel)\n\n\nclass VpnTunnelApiStub(apis_stub.ApiStub):\n  \"\"\"Mock object to simulate VPN tunnel api calls.\"\"\"\n\n  def __init__(self, mock_state):\n    self.mock_state = mock_state\n\n  def get(self, project, region, vpnTunnel):\n    if self.mock_state == 'vpnTunnels':\n      return apis_stub.RestCallStub(project, vpnTunnel)\n    else:\n      raise ValueError(f'cannot call method {self.mock_state} here')\n"
  },
  {
    "path": "gcpdiag/queries/vpn_test.py",
    "content": "# Copyright 2025 Google LLC\n# ... (standard license header) ...\n\"\"\"Unit tests for vpn.py.\"\"\"\n\nfrom unittest import mock\n\nimport pytest\nfrom googleapiclient import errors\n\nfrom gcpdiag import caching, utils\nfrom gcpdiag.queries import apis_stub, vpn, vpn_stub\n\nDUMMY_PROJECT_ID = 'gcpdiag-vpn1-aaaa'\nDUMMY_VPN_NAME = 'vpn-tunnel-1'\nDUMMY_REGION = 'europe-west4'\n\n\ndef get_api_stub(service_name, version, project_id=None):\n  if service_name == 'compute':\n    return vpn_stub.VpnApiStub()\n  return apis_stub.get_api_stub(service_name, version, project_id)\n\n\n@mock.patch('gcpdiag.queries.apis.get_api', new=get_api_stub)\nclass Test:\n\n  def test_get_vpn(self):\n    tunnel = vpn.get_vpn(project_id=DUMMY_PROJECT_ID,\n                         vpn_name=DUMMY_VPN_NAME,\n                         region=DUMMY_REGION)\n\n    assert tunnel.name == 'vpn-tunnel-1'\n    assert tunnel.status == 'ESTABLISHED'\n    assert tunnel.id == '123456789'\n    assert tunnel.peer_ip == '1.1.1.1'\n    assert tunnel.project_id == DUMMY_PROJECT_ID\n    assert 'europe-west4' in tunnel.full_path\n    assert tunnel.local_traffic_selector == ['0.0.0.0/0']\n    assert tunnel.remote_traffic_selector == ['0.0.0.0/0']\n\n  def test_short_path(self):\n    tunnel = vpn.get_vpn(DUMMY_PROJECT_ID, DUMMY_VPN_NAME, DUMMY_REGION)\n    assert tunnel.short_path == f'{DUMMY_PROJECT_ID}/{DUMMY_VPN_NAME}'\n\n  def test_get_vpn_failure(self):\n\n    mock_request = mock.Mock()\n    mock_request.execute.side_effect = errors.HttpError(mock.Mock(status=404),\n                                                        b'Test Error')\n\n    mock_service = mock.Mock()\n    mock_service.vpnTunnels.return_value.get.return_value = mock_request\n\n    # Overlay the class-level patch with a new one for this test\n    with mock.patch('gcpdiag.queries.apis.get_api', return_value=mock_service):\n      with caching.bypass_cache():\n\n        with pytest.raises(utils.GcpApiError):\n          vpn.get_vpn(DUMMY_PROJECT_ID, DUMMY_VPN_NAME, DUMMY_REGION)\n"
  },
  {
    "path": "gcpdiag/queries/web.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Fetch the html content from the given page url.\"\"\"\n\nimport logging\n\nimport requests\nfrom bs4 import BeautifulSoup\n\n\ndef fetch_and_extract_table(page_url: str,\n                            tag: str = None,\n                            tag_id: str = None,\n                            class_name: str = None):\n  \"\"\"Fetch the table from the given page url and return it.\"\"\"\n  table = None\n  response = get(url=page_url, timeout=10)\n  response.raise_for_status(\n  )  # Raise an exception if the response is not successful\n  soup = BeautifulSoup(response.content, 'html.parser')\n  content_fetched = None\n  if tag:\n    if tag_id:\n      content_fetched = soup.find(tag, id=tag_id)\n    elif class_name:\n      content_fetched = soup.find(tag, class_=class_name)\n    else:\n      content_fetched = soup.find(tag)\n\n  if not content_fetched:\n    logging.error('tag/id/class not found for %s with tag %s', page_url, tag)\n    return table\n  if tag == 'table':\n    return content_fetched\n  table = content_fetched.find_next('table')\n  if not table:\n    logging.error('Table not found for %s with tag %s', page_url, tag)\n    return table\n\n  return table\n\n\ndef get(\n    url,\n    params=None,\n    timeout=10,\n    *,\n    data=None,\n    headers=None,\n) -> requests.Response:\n  \"\"\"A wrapper around requests.get for http calls which can't use the google discovery api\"\"\"\n  return requests.get(url=url,\n                      params=params,\n                      timeout=timeout,\n                      data=data,\n                      headers=headers)\n"
  },
  {
    "path": "gcpdiag/queries/web_stub.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Fetch the html content from the given page url.\"\"\"\n\nimport pathlib\nimport re\n\nimport requests\n\njson_dir = pathlib.Path(__file__).parents[2] / 'test-data/web/static'\n\n\ndef _derive_basename_from_url(url):\n  url = re.sub(r'^https?://', '', url)\n  formatted_url = re.sub(r'[._=/]', '-', url)\n  return formatted_url\n\n\n# pylint: disable=unused-argument, protected-access\ndef get(url, params=None, timeout=None, *, data=None, headers=None):\n  json_basename = _derive_basename_from_url(url)\n  try:\n    filename = str(json_dir / json_basename)\n    with open(filename, encoding='utf-8') as file:\n      response = requests.Response()\n      response._content = file.read().encode('utf-8')\n      response.status_code = 200\n      response.headers['Content-Type'] = 'text/html'\n      return response\n  except FileNotFoundError:\n    response.status_code = 404\n    return response\n"
  },
  {
    "path": "gcpdiag/queries/web_test.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Test code in html.py.\"\"\"\n\nimport unittest\nfrom unittest import mock\n\nfrom gcpdiag.queries import web\n\n\n@mock.patch('gcpdiag.queries.web.get', autospec=True)\nclass TestFetchAndExtractHtmlContent(unittest.TestCase):\n  \"\"\"Test Fetch and Extract html content\"\"\"\n\n  def test_fetch_and_extract_table(self, mock_get):\n    with open(\n        'test-data/web/static/'\n        'cloud-google-com-data-fusion-docs-support-version-support-policy',\n        encoding='utf-8') as fh:\n      mock_get.return_value.content = fh.read().encode('utf-8')\n      mock_get.return_value.status_code = 200\n\n      test_table = web.fetch_and_extract_table(\n          page_url=\n          'https://cloud.google.com/data-fusion/docs/support/version-support-policy',\n          tag='h2',\n          tag_id='support_timelines')\n      assert test_table is not None\n      assert len(test_table.find_all('tr')) == 10\n      assert test_table.find_all('tr')[1].find_all(\n          'td')[0].text.strip() == '6.9'\n      assert test_table.find_all('tr')\n\n  def test_fetch_and_extract_table_with_no_tag(self, mock_get):\n    mock_get.return_value.content = \"\"\"\n      <html>\n        <body>\n          <table>\n            <tr><th>Column 1</th><th>Column2</th></tr>\n            <tr><td>Value1</td><td>Value2</td></tr>\n          </table>\n        </body>\n      </html>\n    \"\"\"\n    mock_get.return_value.status_code = 200\n\n    test_table = web.fetch_and_extract_table(\n        page_url=\n        'https://cloud.google.com/data-fusion/docs/support/version-support-policy'\n    )\n    self.assertIsNone(test_table)\n\n  def test_fetch_and_extract_table_with_no_tag_id_and_class_name(\n      self, mock_get):\n    mock_get.return_value.content = \"\"\"\n      <html>\n        <body>\n          <h1>This is a header</h1>\n          <table>\n            <tr><th>Column 1</th><th>Column2</th></tr>\n            <tr><td>Value1</td><td>Value2</td></tr>\n          </table>\n        </body>\n      </html>\n    \"\"\"\n    mock_get.return_value.status_code = 200\n\n    test_table = web.fetch_and_extract_table(\n        page_url=\n        'https://cloud.google.com/data-fusion/docs/support/version-support-policy',\n        tag='h1')\n    assert test_table is not None\n    assert len(test_table.find_all('tr')) == 2\n\n  def test_fetch_and_extract_table_with_class_name(self, mock_get):\n    mock_get.return_value.content = \"\"\"\n      <html>\n        <body>\n          <h1 class=\"my-table\">This is a header</h1>\n          <table>\n            <tr><th>Column 1</th><th>Column2</th></tr>\n            <tr><td>Value1</td><td>Value2</td></tr>\n            <tr><td>Value3</td><td>Value4</td></tr>\n          </table>\n        </body>\n      </html>\n    \"\"\"\n    mock_get.return_value.status_code = 200\n\n    test_table = web.fetch_and_extract_table(\n        page_url=\n        'https://cloud.google.com/data-fusion/docs/support/version-support-policy',\n        tag='h1',\n        class_name='my-table')\n    assert test_table is not None\n    assert len(test_table.find_all('tr')) == 3\n    assert test_table.find_all('tr')[1].find_all(\n        'td')[0].text.strip() == 'Value1'\n\n  def test_fetch_and_extract_table_with_tag_id(self, mock_get):\n    mock_get.return_value.content = \"\"\"\n      <html>\n        <body>\n          <h1 id=\"my-table\">This is a header</h1>\n          <table>\n            <tr><th>Column 1</th><th>Column2</th></tr>\n            <tr><td>Value1</td><td>Value2</td></tr>\n            <tr><td>Value3</td><td>Value4</td></tr>\n          </table>\n        </body>\n      </html>\n    \"\"\"\n    mock_get.return_value.status_code = 200\n\n    test_table = web.fetch_and_extract_table(\n        page_url=\n        'https://cloud.google.com/data-fusion/docs/support/version-support-policy',\n        tag='h1',\n        tag_id='my-table')\n    assert test_table is not None\n    assert len(test_table.find_all('tr')) == 3\n    assert test_table.find_all('tr')[2].find_all(\n        'td')[1].text.strip() == 'Value4'\n"
  },
  {
    "path": "gcpdiag/rule_classes.py",
    "content": "\"\"\"\nReturns project-wide rule classes list\n\"\"\"\nfrom typing import Dict\n\n\ndef get_rule_classes() -> Dict:\n\n  return {\n      'BP': 'Best practice, opinionated recommendation',\n      'ERR': 'Something that is very likely to be wrong',\n      'WARN': 'Something that is possibly wrong',\n      'SEC': 'Potential security issue',\n      # classes for extended rules\n      'BP_EXT': '(Extended) Best practice, opinionated recommendation',\n      'ERR_EXT': '(Extended) Something that is very likely to be wrong',\n      'WARN_EXT': '(Extended) Something that is possibly wrong',\n      'SEC_EXT': '(Extended) Potential security issue',\n  }\n"
  },
  {
    "path": "gcpdiag/runbook/__init__.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Runbook command: find potential issues in GCP projects.\"\"\"\n\nimport ast\nimport builtins\nimport difflib\nimport inspect\nimport logging\nimport os\nimport re\nimport sys\nimport textwrap\nimport threading\nimport traceback\nimport types\nfrom abc import abstractmethod\nfrom collections import OrderedDict\nfrom datetime import datetime, timedelta, timezone\nfrom enum import Enum\nfrom functools import cached_property\nfrom string import Formatter\nfrom typing import (Callable, Deque, Dict, List, Mapping, Optional, Set, Tuple,\n                    Type, final)\n\nimport googleapiclient.errors\nfrom jinja2 import TemplateNotFound\n\nfrom gcpdiag import caching, config\nfrom gcpdiag import context as gcpdiag_context\nfrom gcpdiag import models, utils\nfrom gcpdiag.queries import crm\nfrom gcpdiag.runbook import constants, exceptions, flags, op, report, util\n\nRunbookRegistry: Dict[str, 'DiagnosticTree'] = {}\nStepRegistry: Dict[str, Type['Step']] = {}\n\nregistry_lock = threading.Lock()\nreport_lock = threading.Lock()\n\n\nclass MetaStep(type):\n  \"\"\"Metaclass for Steps in runbook\"\"\"\n\n  @property\n  def id(cls):\n    \"\"\"Class Id of a step\"\"\"\n    return '.'.join([cls.__module__, cls.__name__])\n\n  def __new__(mcs, name, bases, namespace):\n    \"\"\"Register all steps into StepRegistry excluding base classes\"\"\"\n    new_class = super().__new__(mcs, name, bases, namespace)\n    if name not in ('Step', 'Gateway', 'LintWrapper', 'StartStep', 'EndStep',\n                    'CompositeStep') and bases[0] in (Step, Gateway,\n                                                      CompositeStep):\n      StepRegistry[new_class.id] = new_class\n    return new_class\n\n\nclass Step(metaclass=MetaStep):\n  \"\"\"\n  Represents a step in a diagnostic or runbook process.\n  \"\"\"\n  steps: List['Step']\n  template: str\n  parameters: dict = {}\n\n  def __init__(self,\n               parent: 'Step' = None,\n               step_type=constants.StepType.AUTOMATED,\n               uuid=None,\n               **parameters):\n    \"\"\"\n    Initializes a new instance of the Step class.\n    \"\"\"\n    self.uuid = uuid or util.generate_uuid()\n    self.steps = []\n    self.type = step_type\n    self.observations: models.Messages = models.Messages()\n    self.product = self.__module__.split('.')[-2]\n    self.doc_file_name = util.pascal_case_to_kebab_case(self.__class__.__name__)\n    # allow developers to set this\n\n    if parent:\n      parent.add_child(child=self)\n\n    # set object attributes with parameters\n    # This is used by Bundles and Generalized steps\n    if parameters:\n      for attribute, value in parameters.items():\n        setattr(self, attribute, value)\n\n    self.set_observations()\n\n  @property\n  def id(self):\n    \"\"\"Class Id of a step\"\"\"\n    return self.__class__.id\n\n  @property\n  def execution_id(self):\n    return '.'.join([self.id, self.uuid])\n\n  def __str__(self):\n    return self.execution_id\n\n  @final\n  def execute_hook(self, operator: op.Operator):\n    \"\"\"\n    Executes the step using the given context and interface.\n\n    Parameters:\n        context: The context in which the step is executed.\n        interface: The interface used for interactions during execution.\n    \"\"\"\n    self.load_observations()\n    operator.set_messages(m=self.observations)\n    try:\n      name = self.name\n    except KeyError:\n      name = self.__class__.__name__\n    operator.interface.info(step_type=self.type.value, message=name)\n    self.execute()\n\n  def execute(self):\n    \"\"\"Executes the main diagnostic log for this step.\"\"\"\n    pass\n\n  def set_observations(self, prompt: models.Messages = None):\n    # override existing messages\n    if prompt:\n      self.observations.update(prompt)\n\n  def load_observations(self):\n    if hasattr(self, 'template'):\n      name = getattr(self, 'template').split('::')\n    else:\n      return\n\n    if len(name) == 2:\n      file_name, block_name = name[0], name[1]\n      self.observations.update(\n          util.load_template_block(module_name=self.__module__,\n                                   block_name=block_name,\n                                   file_name=file_name))\n    if len(name) == 3:\n      file_name, block_name = name[1], name[2]\n      self.observations.update(\n          util.load_template_block(module_name=name[0],\n                                   block_name=block_name,\n                                   file_name=file_name))\n\n  def add_child(self, child):\n    \"\"\"Child steps\"\"\"\n    self.steps.append(child)\n\n  def find_step(self, step: 'Step'):\n    \"\"\"Find a step by ID\"\"\"\n    if self == step:\n      return self\n    for child in self.steps:\n      result = child.find_step(step)\n      if result:\n        return result\n    return None\n\n  def __hash__(self) -> int:\n    return hash((self.execution_id, self.type))\n\n  @property\n  def label(self):\n    label = self.observations.get_msg(constants.STEP_LABEL)\n    if 'NOTICE' in label:\n      label = util.pascal_case_to_title(self.__class__.__name__)\n    return label\n\n  @cached_property\n  def name(self):\n    # Get the step name template from observations or execute()'s docstring.\n    step_name = self.observations.get(\n        constants.STEP_NAME) or self.execute.__doc__\n    if not step_name:\n      raise exceptions.InvalidStepOperation(\n          f'Step {self} does not have an step name. '\n          'Make sure the execute() method has a docstring on the first line '\n          f'or a {self.template}_step_name block has been defined in the step template'\n      )\n\n    # Clean up the template\n    step_name = ' '.join(step_name.split())\n\n    # Extract all field names used in the step_name template.\n    placeholders = {\n        field for _, field, _, _ in Formatter().parse(step_name) if field\n    }\n\n    # Default variables not found on self.\n    defaults = {\n        'universe_domain': config.get('universe_domain'),\n        'start_time': op.get(flags.START_TIME),\n        'end_time': op.get(flags.END_TIME)\n    }\n\n    attributes = {}\n\n    for key in placeholders:\n      if key in constants.RESTRICTED_ATTRIBUTES:\n        continue\n\n      # Prefer a default value if available, otherwise use the attribute on self.\n      if key in defaults:\n        value = defaults[key]\n      elif hasattr(self, key):\n        value = getattr(self, key)\n      else:\n        # If the placeholder isn't found anywhere, you might either set it to an empty\n        # string or raise an error. Here, we default to an empty string.\n        value = ''\n\n      # Process the value based on its type.\n      if isinstance(value, Enum):\n        value = value.value\n      elif isinstance(value, datetime):\n        value = value.isoformat()\n      elif isinstance(value, (list, tuple, set)):\n        if isinstance(value, set):\n          value = list(value)\n        # If the list/tuple items are not of a simple type, skip this attribute.\n        if value and not isinstance(value[0], (int, str, bool, float)):\n          continue\n        value = ', '.join(str(item) for item in value)\n      elif isinstance(value, dict):\n        dict_values = list(value.values())\n        if dict_values and not isinstance(dict_values[0],\n                                          (int, str, bool, float)):\n          continue\n        value = ', '.join(f'{k}={v}' for k, v in value.items())\n      elif isinstance(\n          value,\n          (types.FunctionType, types.MethodType, types.BuiltinFunctionType)):\n        continue\n      else:\n        value = str(value)\n\n      attributes[key] = value\n\n    return step_name.format(**attributes)\n\n  @property\n  def long_desc(self):\n    long_desc = None\n    doc_lines = self.__doc__.splitlines()\n    if len(doc_lines) >= 3:\n      if doc_lines[1]:\n        raise ValueError(\n            f'Step {self.__class__.__name__} has a non-empty second line '\n            'in the class docstring. Ensure the step\\'s class docstring '\n            'contains a one-line summary followed by an empty second line.')\n      long_desc = '\\n'.join(doc_lines[2:])\n    return long_desc\n\n  @property\n  def short_desc(self):\n    return self.__doc__.splitlines()[0]\n\n  @property\n  def doc_url(self):\n    \"\"\"Returns the documentation URL for the step.\"\"\"\n    return f'https://gcpdiag.dev/runbook/steps/{self.product}/{self.doc_file_name}'\n\n\nclass StartStep(Step):\n  \"\"\"Start Event of a Diagnostic tree\"\"\"\n\n  def __init__(self):\n    super().__init__(step_type=constants.StepType.START)\n\n  def execute(self):\n    \"\"\"Executing default start step for runbooks.\"\"\"\n    pass\n\n\nclass CompositeStep(Step):\n  \"\"\"Composite Events of a Diagnostic tree\"\"\"\n\n  def __init__(self, **parameters):\n    super().__init__(**parameters, step_type=constants.StepType.COMPOSITE)\n\n\nclass EndStep(Step):\n  \"\"\"End Event of a Diagnostic Tree\"\"\"\n\n  def __init__(self):\n    super().__init__(step_type=constants.StepType.END)\n\n  def execute(self):\n    \"\"\"Finalize runbook investigations.\"\"\"\n    if not config.get(flags.INTERACTIVE_MODE):\n      response = op.prompt(kind=op.CONFIRMATION,\n                           message='Is your issue resolved?')\n      if response == op.NO:\n        op.info(message=constants.END_MESSAGE)\n\n\nclass Gateway(Step):\n  \"\"\"\n  Represents a decision point in a workflow, determining which path to take based on a condition.\n  \"\"\"\n\n  def __init__(self, **parameters):\n    \"\"\"\n    Initializes a new instance of the Gateway step.\n    \"\"\"\n    super().__init__(**parameters, step_type=constants.StepType.GATEWAY)\n\n\nclass RunbookRule(type):\n  \"\"\"Metaclass for automatically registering subclasses of DiagnosticTree\n  in a registry for easy lookup and instantiation based on product/rule ID.\"\"\"\n\n  def __new__(mcs, name, bases, namespace):\n    new_class = super().__new__(mcs, name, bases, namespace)\n    if name != 'DiagnosticTree' and bases[0] == DiagnosticTree:\n      rule_id = util.runbook_name_parser(name)\n      mcs.validate_parameter_definitions(class_=mcs, namespace=namespace)\n      product = namespace.get('__module__', '').split('.')[-2].lower()\n      RunbookRegistry[f'{product}/{rule_id}'] = new_class\n    return new_class\n\n  def validate_parameter_definitions(class_, namespace):\n    \"\"\"Validate parameters defined for a runbook.\n\n    for now only check deprecated parameters backward compatibility.\n    \"\"\"\n    deprecated_params = {\n        param_name: param_config\n        for param_name, param_config in (\n            namespace.get('parameters') or {}).items()\n        if param_config.get('deprecated', False)\n    }\n\n    if deprecated_params:\n      # Ensure the child class implements legacy_parameter_handler\n      if 'legacy_parameter_handler' not in namespace:\n        raise TypeError(\n            f\"{namespace.get('__module__')} has deprecated parameters \"\n            f\"{', '.join(deprecated_params.keys())} but does not implement \"\n            'legacy_parameter_handler(). Implement this method to handle '\n            'backward compatibility for deprecated parameters.')\n\n    for param_name, param_config in deprecated_params.items():\n      if param_config.get('required', False):\n        raise TypeError(\n            f\"deprecated parameter '{param_name}' cannot be marked as required\")\n\n\nclass DiagnosticTree(metaclass=RunbookRule):\n  \"\"\"Represents a diagnostic tree for troubleshooting.\"\"\"\n  product: str\n  name: str\n  start: StartStep\n  parameters: Dict[str, Dict]\n  steps: List[Step]\n  keywords: List[str]\n\n  def __init__(self, uuid=None):\n    self.id = f'{self.__module__}.{self.__class__.__name__}'\n    self.uuid = uuid or util.generate_uuid()\n    self.product = self.__module__.rsplit('.')[-2].lower()\n    self.doc_file = util.pascal_case_to_kebab_case(self.__class__.__name__)\n    self.dt_name = util.runbook_name_parser(self.__class__.__name__)\n    self.name = f'{self.product}/{self.dt_name}'\n    self.steps = []\n\n  @property\n  def run_id(self):\n    return '.'.join([self.product, self.dt_name, self.uuid])\n\n  def add_step(self, parent: Step, child: Step):\n    \"\"\"Adds an intermediate diagnostic step to the tree.\"\"\"\n    if self.start is None:\n      raise ValueError('Start step is empty. Set start step with'\n                       ' builder.add_start() or tree.add_start()')\n    if parent is None:\n      raise ValueError('You can\\'t add a child to a `NoneType` parent')\n    # to avoid disjoint trees, we first check that the parent is a child of start.\n    parent_step = self.start.find_step(parent)\n    if parent_step:\n      parent_step.add_child(child)\n      setattr(child, '_was_initially_defined', True)\n    else:\n      raise ValueError(\n          f'Parent step with {parent.execution_id} not found. Add parent first')\n\n  def add_start(self, step: StartStep):\n    \"\"\"Adds a diagnostic step to the tree.\"\"\"\n    if hasattr(self, 'start') and getattr(self, 'start'):\n      raise ValueError('start already exist')\n    self.start = step\n\n  def add_end(self, step: EndStep):\n    \"\"\"Adds the default end step of this tree which is invoked iff all child steps are executed.\"\"\"\n    if self.start and self.start.steps:\n      if self.start.steps[-1].type == constants.StepType.END:\n        raise ValueError('end already exist')\n    self.start.add_child(child=step)\n    setattr(step, '_was_initially_defined', True)\n\n  def find_step(self, step_id):\n    return self.start.find_step(step_id)\n\n  @final\n  def hook_build_tree(self, operator: op.Operator):\n    if hasattr(self, 'legacy_parameter_handler'):\n      self.legacy_parameter_handler(operator.parameters)\n    try:\n      self.build_tree()\n    except exceptions.InvalidDiagnosticTree as err:\n      logging.warning('%s: %s while constructing runbook rule: %s',\n                      type(err).__name__, err, self)\n\n    if not self.start:\n      raise exceptions.InvalidDiagnosticTree(\n          'The diagnostic tree is invalid because it contains any Start point')\n\n    if not self.start.steps:\n      raise exceptions.InvalidDiagnosticTree(\n          'The diagnostic tree is invalid because it contains only '\n          'a Start method without any intermediate steps. '\n          'Please ensure your tree includes at least one intermediate step '\n          'between the Start method and the end point.')\n    # if the tree hasn't be concluded with an endstep.\n    # Add the default step\n    if self.start.steps[-1].type != constants.StepType.END:\n      self.start.add_child(EndStep())\n      setattr(self.start.steps[-1], '_was_initially_defined', True)\n\n  @abstractmethod\n  def legacy_parameter_handler(self, parameters):\n    \"\"\"Handles the translation of deprecated parameters for backward compatibility.\n\n      This method ensures that runbooks using outdated parameters can still function correctly by\n      mapping old parameters to their new counterparts. It allows systems that do not yet know\n      the updated parameters to continue leveraging the runbook while gradually migrating to the\n      new parameter format.\n\n      Key Features:\n      1. Implement this `legacy_parameter_handler` method in your runbook class.\n      2. Map old parameters to their new equivalents within this method.\n      3. This function is invoked before the runbook is executed at runtime.\n      4. The function is always called before the `build_tree()` method.\n      5. Safely migrate the rest of the runbook logic to utilize the new parameters.\n\n      Usage Example:\n          class Runbook(DiagnosticTree):\n              parameters = {\n                  'deprecated_parameter': {\n                      'type': bool,\n                      'help': 'A deprecated parameter',\n                      'deprecated': True,\n                      'new_parameter': 'currentParameter'\n                  },\n                  'currentParameter': {\n                      'type': bool,\n                      'help': 'A new parameter',\n                  }\n              }\n\n              def legacy_parameter_handler(self, parameters):\n                  # Map deprecated parameters to their new equivalents\n                  if 'deprecated_parameter' in parameters:\n                      parameters['currentParameter'] = parameters.pop('deprecated_parameter', None)\n\n      - This method must be implemented if the runbook defines any deprecated parameters\n      in its `parameters` dictionary.\n      - Proper mapping ensures smooth runtime operation while providing backward compatibility\n      for older configurations.\n      \"\"\"\n\n    pass\n\n  def build_tree(self):\n    \"\"\"Constructs the diagnostic tree.\"\"\"\n    raise NotImplementedError\n\n  def __hash__(self):\n    return str(self.name).__hash__()\n\n  def __str__(self):\n    return self.name\n\n  @property\n  def long_desc(self):\n    long_desc = None\n    doc_lines = self.__class__.__doc__.splitlines()\n    if len(doc_lines) >= 3:\n      if doc_lines[1]:\n        raise ValueError(\n            f'Diagnostic Tree {self.__class__.__name__} has a non-empty second '\n            'line in the class docstring')\n      long_desc = '\\n'.join(doc_lines[2:])\n    return long_desc\n\n  @property\n  def short_desc(self):\n    return self.__doc__.splitlines()[0]\n\n  @property\n  def doc_url(self) -> str:\n    \"\"\"Returns the documentation URL for the diagnostic tree.\"\"\"\n    return f'https://gcpdiag.dev/runbook/diagnostic-trees/{self.name}'\n\n\nclass Bundle:\n  run_id: str\n  steps: List[Type['Step']]\n  parameter: models.Parameter\n\n  def __init__(self) -> None:\n    self.run_id = util.generate_uuid()\n    self.steps = []\n\n\nclass DiagnosticEngine:\n  \"\"\"Loads and Executes diagnostic trees.\n\n  This class is responsible for loading and executing diagnostic trees\n  based on provided rule name. It manages the diagnostic process, from\n  validating required parameters to traversing and executing diagnostic\n  steps.\n\n  Attributes:\n    _dt: Optional[DiagnosticTree] The current diagnostic tree being executed.\n  \"\"\"\n\n  def __init__(self,\n               context_provider: Optional[\n                   gcpdiag_context.ContextProvider] = None):\n    \"\"\"Initializes the DiagnosticEngine with required managers.\"\"\"\n    self.interface = report.InteractionInterface(kind=config.get('interface'))\n    self.finalize = False\n    # tuple in the format (DiagnosticTree/Bundle, user_provided_parameter)\n    self.task_queue: Deque = Deque()\n    self.context_provider = context_provider\n\n  def add_task(self, new_task: Tuple):\n    with registry_lock:\n      self.task_queue.appendleft(new_task)\n\n  def get_similar_trees(self, name: str) -> List[str]:\n    \"\"\"Returns a list of similar trees to the given name.\"\"\"\n    return difflib.get_close_matches(name, RunbookRegistry.keys())\n\n  def load_tree(self, name: str) -> DiagnosticTree:\n    \"\"\"Loads a diagnostic tree by name ex gce/ssh.\n\n    Attempts to retrieve a diagnostic tree registered under the given name.\n    Exits the program if the tree is not found.\n\n    Tree are registered onload of the class definition see RunbookRule metaclass\n\n    Args:\n      name: The name of the diagnostic tree to load.\n    \"\"\"\n    # ex: product/gce-runbook\n    with registry_lock:\n      name = util.runbook_name_parser(name)\n      runbook = RunbookRegistry.get(name)\n      if not runbook:\n        message = f\"The runbook `{name}` doesn't exist or hasn't been registered.\"\n        similar_runbooks = self.get_similar_trees(name)\n        if similar_runbooks:\n          message += f' Did you mean: \"{similar_runbooks[0]}\"?'\n\n        # If this error occurs during development, it may be because the class\n        # hasn't been registered.\n        # Note: Runbooks use Python metaclasses and might not register\n        # automatically when there are syntax errors.\n        # For more information on metaclasses and registration issues, see:\n        # https://docs.python.org/3/reference/datamodel.html#metaclasses\n        if 'test' in config.VERSION:\n          m = re.search(r'([^/]+)/([^/]+)', name)\n          if m:\n            product = m.group(1)\n            clazz = util.kebab_case_to_pascal_case(m.group(2))\n            mod_path = os.path.join(os.path.dirname(os.path.abspath(__file__)),\n                                    product)\n            message += (\n                '\\n\\nPlease refer to Adding Support for New GCP Products '\n                'instructions at '\n                'https://github.com/GoogleCloudPlatform/gcpdiag/blob/main/'\n                'README.md#adding-support-for-new-gcp-products'\n                '\\n\\nPlease verify the following:'\n                f\"\\n1. Ensure that the class `{clazz}` exists in the product's module `{mod_path}`.\"\n                '\\n2. If the class exists, ensure there are no syntax errors '\n                f'in the file containing the class `{clazz}`.\\n')\n        raise exceptions.DiagnosticTreeNotFound(message)\n      return runbook\n\n  def load_steps(self, parameter: Mapping[str, Mapping],\n                 steps_to_run: List) -> Bundle:\n    \"\"\"Loads individual steps and prepare a bundle.\n\n    Args:\n      parameter: User provided parameter\n      steps_to_run: List of steps to from a bundle specification.\n    \"\"\"\n    with registry_lock:\n      bundle: Bundle = Bundle()\n      bundle.parameter = models.Parameter(parameter)\n      for id_ in steps_to_run:\n        step_def = StepRegistry.get(id_)\n        if not step_def:\n          raise ValueError(f'Step \"{id_}\" not found in registry')\n        bundle.steps.append(step_def)\n      return bundle\n\n  def _get_billing_project(self, parameter: models.Parameter):\n    project_id = parameter.get('project_id')\n    if project_id:\n      return project_id\n    # get project number if no project id\n    project_number = parameter.get('project_number')\n    if project_number:\n      project = crm.get_project(project_id=project_number)\n      return project.id\n    if config.get('billing_project'):\n      return config.get('billing_project')\n    return None\n\n  def _check_required_paramaters(self, parameter_def: Dict,\n                                 caller_args: models.Parameter):\n    missing_parameters = {\n        key: value.get('help', '')\n        for key, value in parameter_def.items()\n        if value.get('required', False) and key not in caller_args\n    }\n    if missing_parameters:\n      missing_param_str = '\\n'.join(\n          f'Parameter Explanation: {value}\\n-p {key}=value'\n          for key, value in missing_parameters.items())\n\n      error_msg = (\n          f'Missing {len(missing_parameters)} required '\n          f\"{'parameter' if len(missing_parameters) == 1 else 'parameters'}. \"\n          'Please provide the following:\\n\\n'\n          f'{missing_param_str}')\n      # Create the exception instance and pass the list of missing parameters\n      raise exceptions.MissingParameterError(error_msg,\n                                             missing_parameters_list=list(\n                                                 missing_parameters.keys()))\n\n  def _set_default_parameters(self, parameter_def: Dict):\n    # set default parameters\n    parameter_def.setdefault(flags.START_TIME, {\n        'type': datetime,\n        'help': 'Beginning Timeframe to scope investigation.'\n    })\n    parameter_def.setdefault(flags.END_TIME, {\n        'type': datetime,\n        'help': 'End timeframe'\n    })\n\n  def _check_deprecated_paramaters(self, parameter_def: Dict,\n                                   caller_args: models.Parameter):\n    deprecated_parameters = {\n        key: value\n        for key, value in parameter_def.items()\n        if value.get('deprecated', False) and key in caller_args\n    }\n    if deprecated_parameters:\n      res = 'Deprecated parameters:\\n'\n      res += '\\n'.join(\n          f\"{key}. Use: {value.get('new_parameter')}={value.get('type','value')}\"\n          for key, value in deprecated_parameters.items()\n          if value.get('new_parameter'))\n      logging.warning(\n          '%s deprecated/unsupported parameter(s) supplied to runbook. %s',\n          len(deprecated_parameters), res)\n      return res\n    return None\n\n  def process_parameters(self, runbook: DiagnosticTree,\n                         caller_args: models.Parameter):\n    self.parse_parameters(parameter_def=runbook.parameters,\n                          caller_args=caller_args)\n    runbook.legacy_parameter_handler(caller_args)\n    self._check_required_paramaters(parameter_def=runbook.parameters,\n                                    caller_args=caller_args)\n\n  def parse_parameters(self, parameter_def: Dict,\n                       caller_args: models.Parameter):\n    \"\"\"Set to defaults parameters and convert datatypes\"\"\"\n\n    def is_builtin_type(target_type):\n      \"\"\"Check if the object's type is a built-in type.\"\"\"\n      return target_type in vars(builtins).values()\n\n    def cast_to_type(param_val, target_type):\n      \"\"\"Attempt to cast the object to the target built-in type if possible.\n\n      Args:\n          obj: The object to cast.\n          target_type: The target built-in type to cast the object to.\n\n      Returns:\n          The object cast to the target type if the original object's type and the target type are\n          built-in types and the cast is possible. Otherwise, returns the original object.\n      \"\"\"\n      if is_builtin_type(target_type) and target_type != bool:\n        try:\n          return target_type(param_val)\n        except ValueError:\n          print(f'Cannot cast {param_val} to type {target_type}.')\n      elif target_type == bool:\n        try:\n          return constants.BOOL_VALUES[str(param_val).lower()]\n        except KeyError:\n          print(f'Cannot cast {param_val} to type {target_type}.')\n      else:\n        if target_type == datetime:\n          if isinstance(param_val, target_type):\n            return param_val\n          parsed_time = util.parse_time_input(param_val.upper())\n          if parsed_time.tzinfo is None:\n            # Define the timezone (for example, UTC) if not present\n            tz = timezone.utc\n            # Attach the timezone information\n            parsed_time = parsed_time.replace(tzinfo=tz)\n          return parsed_time\n        try:\n          return target_type(param_val)\n        except ValueError:\n          print(f'Cannot cast {param_val} to type {target_type}.')\n\n    self._set_default_parameters(parameter_def)\n    # convert data types and set defaults for non exist parameters\n    for k, _ in parameter_def.items():\n      # Set default if not provided by user\n      dt_param = parameter_def.get(k)\n      user_provided_param = caller_args.get(k)\n      if k not in caller_args and dt_param and dt_param.get('default'):\n        caller_args[k] = dt_param['default']\n        continue\n\n      if isinstance(user_provided_param, str):\n        if dt_param and dt_param.get('ignorecase') is True:\n          caller_args[k] = user_provided_param\n        else:\n          caller_args[k] = user_provided_param.lower()\n\n      if dt_param and dt_param.get('type') == datetime:\n        if k == flags.END_TIME:\n          end_time = caller_args.get(flags.END_TIME, datetime.now(timezone.utc))\n          caller_args[flags.END_TIME] = cast_to_type(end_time, dt_param['type'])\n        if k == flags.START_TIME:\n          end_time = caller_args.get(flags.END_TIME, datetime.now(timezone.utc))\n          caller_args[flags.END_TIME] = cast_to_type(end_time, dt_param['type'])\n          parsed_end_time = caller_args[flags.END_TIME]\n          start_time = caller_args.get(flags.START_TIME,\n                                       parsed_end_time - timedelta(hours=8))\n          caller_args[flags.START_TIME] = cast_to_type(start_time,\n                                                       dt_param['type'])\n        if k != flags.START_TIME or k == flags.END_TIME:\n          date_string = caller_args.get(k)\n          if date_string:\n            caller_args[k] = cast_to_type(date_string, dt_param['type'])\n\n      # DT specified a type for the param and it's not a string.\n      # cast the parameter to the type specified by the runbook.\n      if (dt_param and dt_param.get('type') and dt_param['type'] != str and\n          user_provided_param):\n        caller_args[k] = cast_to_type(user_provided_param, dt_param['type'])\n\n  def run(self):\n    \"\"\"Execute tasks (runbooks or bundles) present in the engines task queue\"\"\"\n    if not self.task_queue:\n      logging.error('No tasks to execute. Did you call add_task()?')\n      return\n\n    bundles = [\n        task[0] for task in self.task_queue if isinstance(task[0], Bundle)\n    ]\n    diagnostic_trees = [\n        task for task in self.task_queue if isinstance(task[0], DiagnosticTree)\n    ]\n\n    if bundles:\n      self.run_bundles(bundles)\n\n    for task in diagnostic_trees:\n      self.run_diagnostic_tree(tree=task[0], parameter=task[1])\n\n  def run_diagnostic_tree(self, tree: DiagnosticTree,\n                          parameter: models.Parameter) -> None:\n    \"\"\"Executes a diagnostic tree with a given parameter.\n\n    Args:\n      context: The execution context for the diagnostic tree.\n    \"\"\"\n    self.interface.output.display_runbook_description(tree)\n\n    try:\n      operator = op.Operator(interface=self.interface,\n                             context_provider=self.context_provider)\n      operator.set_tree(tree)\n      operator.set_parameters(parameter)\n      operator.set_run_id(tree.run_id)\n      with report_lock:\n        self.interface.rm.reports[tree.run_id] = report.Report(\n            run_id=tree.run_id, parameters=parameter)\n        self.interface.rm.reports[tree.run_id].run_start_time = datetime.now(\n            timezone.utc).isoformat()\n      if operator.tree:\n        self.interface.rm.reports[tree.run_id].runbook_name = operator.tree.name\n      with op.operator_context(operator):\n        self.process_parameters(runbook=tree, caller_args=parameter)\n        tree.hook_build_tree(operator)\n      self.finalize = False\n      self.find_path_dfs(\n          step=tree.start,\n          operator=operator,\n          executed_steps=set(),\n      )\n\n    except (RuntimeError, exceptions.InvalidDiagnosticTree) as err:\n      logging.warning('%s: %s while processing runbook rule: %s',\n                      type(err).__name__, err, tree)\n    self.interface.rm.reports[tree.run_id].run_end_time = datetime.now(\n        timezone.utc).isoformat()\n\n  def find_path_dfs(self, step: Step, operator: op.Operator,\n                    executed_steps: Set):\n    \"\"\"Depth-first search to traverse and execute steps in the diagnostic tree.\n\n    Args:\n      step: The current step to execute.\n      operator: The operator used during execution.\n      executed_steps: A set of executed step IDs to avoid cycles.\n    \"\"\"\n    if not self.finalize:\n      operator.set_step(step)\n      with op.operator_context(operator):\n        outcome = self.run_step(step=step, operator=operator)\n        executed_steps.add(step)\n        if outcome == constants.FINALIZE_INVESTIGATION:\n          self.finalize = True\n          return\n    # Prioritize processing of dynamically added, unexecuted children\n    for child in step.steps:\n      if child not in executed_steps and not hasattr(child,\n                                                     '_was_initially_defined'):\n        self.find_path_dfs(step=child,\n                           operator=operator,\n                           executed_steps=executed_steps)\n        if self.finalize:\n          return\n\n    # Process initially defined or already encountered children\n    for child in step.steps:\n      if not self.finalize:\n        if (hasattr(child, '_was_initially_defined') and\n            child not in executed_steps):\n          self.find_path_dfs(step=child,\n                             operator=operator,\n                             executed_steps=executed_steps)\n          if self.finalize:\n            return\n        elif not any(c for c in executed_steps if c == child):\n          self.find_path_dfs(step=child,\n                             operator=operator,\n                             executed_steps=executed_steps)\n          if self.finalize:\n            return\n\n    return executed_steps\n\n  def run_step(self, step: Step, operator: op.Operator):\n    \"\"\"Executes a single step, handling user decisions for step re-evaluation or termination.\n\n    Args:\n      step: The diagnostic step to execute.\n      operator: The execution operations object containing the context.\n    \"\"\"\n    try:\n      user_input = self._run(step, operator=operator)\n      while True:\n        if user_input is constants.RETEST:\n          operator.interface.info(step_type=constants.RETEST,\n                                  message='Re-evaluating recent failed step')\n          with caching.bypass_cache():\n            user_input = self._run(operator.step, operator=operator)\n        elif step.type == constants.StepType.END:\n          return constants.FINALIZE_INVESTIGATION\n        elif user_input is constants.STOP:\n          logging.info('Finalize Investigation\\n')\n          return constants.FINALIZE_INVESTIGATION\n        elif step.type == constants.StepType.START and (\n          self.interface.rm.reports[operator.run_id]\n          .results.get(step.execution_id) is not None and \\\n          self.interface.rm.reports[operator.run_id]\n          .results[step.execution_id].overall_status == 'skipped'):\n          logging.info('Start Step was skipped. Can\\'t proceed.\\n')\n          return constants.FINALIZE_INVESTIGATION\n        elif user_input is constants.CONTINUE:\n          break\n        elif (user_input is not constants.RETEST and\n              user_input is not constants.CONTINUE and\n              user_input is not constants.STOP):\n          return user_input\n    except Exception as err:  # pylint: disable=broad-exception-caught\n      error_msg = str(err)\n      end = datetime.now(timezone.utc).isoformat()\n      with report_lock:\n        self.interface.rm.reports[operator.run_id].results[\n            step.execution_id].end_time = end\n      if isinstance(err, TemplateNotFound):\n        error_msg = (\n            f'could not load messages linked to step: {step.id}.'\n            'ensure step has a valid template eg: filename::block_prefix')\n        logging.error(error_msg)\n      elif isinstance(err, exceptions.InvalidStepOperation):\n        error_msg = f'invalid step operation: %s: {err}'\n        logging.error(error_msg)\n      elif isinstance(err, (ValueError, KeyError)):\n        error_msg = f'`{step.execution_id}`: {err}'\n        logging.error(error_msg)\n      elif isinstance(err,\n                      (utils.GcpApiError, googleapiclient.errors.HttpError)):\n        if isinstance(err, googleapiclient.errors.HttpError):\n          err = utils.GcpApiError(err)\n        if err.status == 403:\n          logging.error(\n              ('%s: %s user does not sufficient permissions '\n               'to perform operations in step: %s'),\n              type(err).__name__,\n              err,\n              step.execution_id,\n          )\n          with report_lock:\n            self.interface.rm.reports[operator.run_id].results[\n                step.execution_id].step_error = err\n        elif err.status == 401:\n          logging.error(\n              '%s: %s request is missing required authentication credential to'\n              ' perform operations in step: %s',\n              type(err).__name__,\n              err,\n              step.execution_id,\n          )\n          with report_lock:\n            self.interface.rm.reports[operator.run_id].results[\n                step.execution_id].step_error = err\n          return\n        logging.error(\n            '%s: %s while processing step: %s',\n            type(err).__name__,\n            err,\n            step.execution_id,\n        )\n        with report_lock:\n          self.interface.rm.reports[operator.run_id].results[\n              step.execution_id].step_error = err\n      elif isinstance(err, TypeError):\n        trace = traceback.extract_tb(err.__traceback__)\n        if any('google/auth' in frame.filename for frame in trace):\n          logging.exception(\n              'Google Auth (ADC) TypeError encountered during step execution'\n              ' %s\\nProbable cause: ADC metadata server returned an unexpected'\n              ' response format. \\nLikely Reasons: \\n- ADC not configured'\n              ' properly or metadata server issue. \\nAborting further Runbook'\n              ' step execution to avoid redundant error messages.\\nOriginal'\n              ' error: %s',\n              step.execution_id,\n              err,\n          )\n          raise err\n      else:\n        logging.error(\n            '%s: %s while processing step: %s',\n            type(err).__name__,\n            err,\n            step.execution_id,\n        )\n      with report_lock:\n        self.interface.rm.reports[operator.run_id].results[\n            step.execution_id].step_error = error_msg\n\n  def _run(self, step: Step, operator: op.Operator):\n    start = datetime.now(timezone.utc).isoformat()\n    with report_lock:\n      self.interface.rm.reports[operator.run_id].results[\n          step.execution_id] = report.StepResult(step=step)\n    self.interface.rm.reports[operator.run_id].results[\n        step.execution_id].start_time = start\n    step.execute_hook(operator)\n    end = datetime.now(timezone.utc).isoformat()\n    with report_lock:\n      self.interface.rm.reports[operator.run_id].results[\n          step.execution_id].end_time = end\n    return self.interface.rm.reports[operator.run_id].results[\n        step.execution_id].prompt_response\n\n  def run_bundles(self, bundles: List[Bundle]) -> None:\n    \"\"\"Executes a list of bundles under a single report.\n\n    Args:\n      bundles: list of bundles to be executed\n    \"\"\"\n    with registry_lock:\n      # Use a new run_id for the consolidated report\n      run_id = util.generate_uuid()\n      operator = op.Operator(interface=self.interface,\n                             context_provider=self.context_provider)\n      operator.set_run_id(run_id)\n\n      # Collect all parameters from all bundles for the report header.\n      all_parameters: models.Parameter = models.Parameter({})\n      for i, bundle in enumerate(bundles):\n        all_parameters[f'bundle_{i+1}'] = bundle.parameter\n      with report_lock:\n        self.interface.rm.reports[run_id] = report.Report(\n            run_id=run_id, parameters=all_parameters)\n        self.interface.rm.reports[run_id].run_start_time = datetime.now(\n            timezone.utc).isoformat()\n      with op.operator_context(operator):\n        for bundle in bundles:\n          operator.set_parameters(bundle.parameter)\n          # Create a root step for the bundle execution\n          root_step = StartStep()\n          for step_class in bundle.steps:\n            self.parse_parameters(parameter_def=step_class.parameters,\n                                  caller_args=bundle.parameter)\n            self._check_required_paramaters(parameter_def=step_class.parameters,\n                                            caller_args=bundle.parameter)\n            # Instantiate each step with the provided parameters\n            step_obj = step_class(**bundle.parameter)\n            root_step.add_child(step_obj)\n\n          # Use find_path_dfs to traverse and execute the steps\n          self.find_path_dfs(step=root_step,\n                             operator=operator,\n                             executed_steps=set())\n    self.interface.rm.reports[run_id].run_end_time = datetime.now(\n        timezone.utc).isoformat()\n\n\nclass ExpandTreeFromAst(ast.NodeVisitor):\n  \"\"\"Builds a Diagnostic Tree by traversing the Abstract Syntax Tree\n\n  This is required to be able to get a full flow of all possible steps\n  regardless of conditions required to trigger during runtime execution.\n  \"\"\"\n\n  def __init__(self, tree=None):\n    self.tree = tree() or DiagnosticTree()\n    self.parent = OrderedDict()\n    self.current_class = None\n    # Track instances to map variable names to their classes\n    self.instances = {}\n\n  # pylint: disable=invalid-name\n  def visit_Assign(self, node):\n    # Track class instances\n    if isinstance(node.value, ast.Call) and hasattr(node.value.func, 'id'):\n      for target in node.targets:\n        if isinstance(target, ast.Name):\n          clazz = find_class_globally(node.value.func.id)\n          if not clazz:\n            continue\n          o = clazz() if isinstance(clazz, type) else clazz\n          self.instances.setdefault(target.id, o)\n          self.instances.setdefault(node.value.func.id, o)\n    # Check for is there are more nesting. like gce_cs.spec.SomeStep()\n    if isinstance(node.value, ast.Call) and hasattr(node.value.func, 'attr'):\n      for target in node.targets:\n        if isinstance(target, ast.Name):\n          clazz = find_class_globally(node.value.func.attr)\n          if not clazz:\n            continue\n          o = clazz() if isinstance(clazz, type) else clazz\n          self.instances.setdefault(target.id, o)\n          self.instances.setdefault(node.value.func.attr, o)\n    self.generic_visit(node)\n\n  # pylint: disable=invalid-name\n  def visit_Call(self, node):\n    if isinstance(node.func,\n                  ast.Attribute) and node.func.attr in ('add_child', 'add_step',\n                                                        'add_start', 'add_end'):\n      child = None\n      if len(node.args) == 1:\n        node.keywords.append(ast.keyword('step', node.args[0]))\n      if len(node.args) == 2:\n        node.keywords.append(ast.keyword('parent', node.args[0]))\n        node.keywords.append(ast.keyword('child', node.args[1]))\n      if node.keywords:\n        for kw in node.keywords:\n          arg_name = kw.arg\n          step = kw.value\n          if arg_name == 'parent':\n            p = find_class_globally(self.instances[step.id])\n            p = p() if isinstance(p, type) else p\n            self.parent.setdefault(self.instances[step.id], p)\n          if arg_name in ('child', 'step'):\n            if isinstance(step, ast.Name) and step.id in self.instances:\n              # Map variable name to class instance if possible\n              clazz = self.instances.get(step.id)\n              if not clazz:\n                clazz = find_class_globally(step.id)\n                if not clazz:\n                  continue\n              clazz = clazz() if isinstance(clazz, type) else clazz\n              self.instances.setdefault(step.id, clazz)\n              child = clazz  # This is a direct class name\n            elif isinstance(step, ast.Call) and hasattr(step.func, 'id'):\n              clazz = self.instances.get(step.func.id)\n              if not clazz:\n                clazz = find_class_globally(step.func.id)\n                if not clazz:\n                  continue\n              clazz = clazz() if isinstance(clazz, type) else clazz\n              self.instances.setdefault(step.func.id, clazz)\n              child = clazz  # This is a direct class name\n            # if argument of call is instantiated directly and has module attr.\n            elif isinstance(step, ast.Call) and hasattr(step.func, 'attr'):\n              clazz = self.instances.get(step.func.attr)\n              if not clazz:\n                clazz = find_class_globally(step.func.attr)\n                if not clazz:\n                  continue\n              clazz = clazz() if isinstance(clazz, type) else clazz\n              self.instances.setdefault(step.func.attr, clazz)\n              child = clazz  # This is a direct class name\n\n      if node.func.attr in ('add_start'):\n        self.tree.add_start(child)\n        self.visit_ast_nodes(child.__class__)\n\n      if node.func.attr in ('add_end'):\n        self.tree.add_end(child)\n        self.visit_ast_nodes(child.__class__)\n\n      if node.func.attr in ('add_step'):\n        _, p = self.parent.popitem()\n        self.tree.add_step(parent=p, child=child)\n        self.visit_ast_nodes(child.__class__)\n\n      if node.func.attr in ('add_child'):\n        o = self.instances.get(self.current_class)\n        self.tree.add_step(parent=o, child=child)\n        self.generic_visit(node)\n\n  def visit_ClassDef(self, node):\n    # Initialize or clear the list of add_child calls for this class\n    self.current_class = node.name\n    self.generic_visit(node)\n    self.current_class = None\n\n  def visit_ast_nodes(self, func):\n    source_code = inspect.getsource(func)\n    tree = ast.parse(textwrap.dedent(source_code))\n    self.generic_visit(tree)\n    return self.tree\n\n\ndef find_class_globally(class_name):\n  try:\n    if not isinstance(class_name, str) and isinstance(class_name, object):\n      return class_name\n  except TypeError:\n    pass\n  # First, check the current global namespace\n  cls = globals().get(class_name)\n  if cls:\n    return cls\n\n  # If not found, check each imported module\n  for _, module in sys.modules.items():\n    try:\n      cls = getattr(module, class_name, None)\n      if cls and inspect.isclass(cls) and issubclass(cls, Step):\n        return cls\n    except AttributeError:\n      continue\n  return None\n"
  },
  {
    "path": "gcpdiag/runbook/bigquery/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/runbook/bigquery/constants.py",
    "content": "# Copyright 2025 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Constants for BigQuery runbooks.\"\"\"\n# pylint: disable=unused-wildcard-import, wildcard-import\nfrom typing import Dict, Set, Tuple\n\nfrom gcpdiag.runbook.gcp.constants import *\nfrom gcpdiag.runbook.iam.constants import *\n\nRUNBOOK_PERMISSION_MAP: Dict[str, Dict[str, Set[str]]] = {\n    'Failed Query Runbook': {\n        'mandatory_project': {\n            'bigquery.jobs.get',\n            'bigquery.jobs.create',\n            'serviceusage.services.use',\n            'serviceusage.services.list',\n        },\n        'optional_project': {'bigquery.jobs.listAll',},\n    },\n    'Slow Query First Execution Runbook': {\n        'mandatory_project': {'bigquery.jobs.get',},\n        'optional_project': {\n            'bigquery.jobs.listAll',\n            'bigquery.jobs.create',\n            'bigquery.jobs.list',\n            'bigquery.reservations.list',\n            'bigquery.reservationAssignments.list',\n        },\n        'optional_org': {\n            'bigquery.jobs.listAll',\n            'bigquery.reservations.list',\n            'bigquery.reservationAssignments.list',\n        },\n    },\n    'Slow vs Fast Query Runbook': {\n        'mandatory_project': {'bigquery.jobs.get',},\n        'optional_project': {\n            'bigquery.jobs.listAll',\n            'bigquery.jobs.create',\n            'bigquery.reservations.list',\n            'bigquery.reservationAssignments.list',\n        },\n        'optional_org': {\n            'bigquery.jobs.listAll',\n            'bigquery.reservations.list',\n            'bigquery.reservationAssignments.list',\n        },\n    },\n}\n\nERROR_MAP: Dict[\n    Tuple,\n    Dict[str, str],\n] = {\n    (\n        'Resources exceeded during query execution',\n        'Too many DML statements outstanding against',\n    ): {\n        'cause':\n            ('This error occurs when you exceed the limit of 20 DML statements'\n             ' in PENDING status in a queue for a single table. This error'\n             ' usually occurs when you submit DML jobs against a single table'\n             ' faster than what BigQuery can process'),\n        'remediation': (\n            'One possible solution is to group multiple smaller DML operations'\n            ' into larger but fewer jobs—for example, by batching updates and'\n            ' inserts. When you group smaller jobs into larger ones, the cost'\n            ' to run the larger jobs is amortized and the execution is faster.'\n            ' Consolidating DML statements that affect the same data generally'\n            ' improves the efficiency of DML jobs and is less likely to exceed'\n            ' the queue size quota limit. Avoid DML statements that update or'\n            ' insert single rows - batch your updates and inserts. Other'\n            ' solutions to improve your DML efficiency could be to partition or'\n            ' cluster your tables - see'\n            ' https://cloud.google.com/bigquery/docs/data-manipulation-language#best_practices'\n            ' for DML best practices.'),\n    },\n    (\n        'UPDATE or DELETE statement over table',\n        'would affect rows in the streaming buffer',\n    ): {\n        'cause':\n            ('BigQuery does not support running mutating Data Manipulation'\n             ' Language (DML) statements (UPDATE, DELETE, or MERGE) against any'\n             ' data recently streamed into BigQuery using the legacy streaming'\n             ' API using `tabledata.insertall` within the last 30 minutes.'),\n        'remediation':\n            ('Consider switching to use the BigQuery Storage Write API where'\n             ' this limitation has been lifted.'),\n    },\n    ('No matching signature',): {\n        'cause':\n            ('This error is returned if at least one of the arguments passed to'\n             ' the function does not match the expected argument type.'),\n        'remediation':\n            ('Read through the error message details to identify which'\n             ' parameter(s) result in a type mismatch and correct the statement'\n             ' by providing parameters of the correct type.'),\n    },\n    ('Could not serialize access to table', 'due to concurrent update'): {\n        'cause': (\n            'This error can occur when mutating data manipulation language'\n            ' (DML) statements that are running concurrently on the same table'\n            ' conflict with each other, or when the table is truncated during a'\n            ' mutating DML statement. See'\n            'https://cloud.google.com/bigquery/docs/data-manipulation-language'\n            '#dml_statement_conflicts'\n            ' for more details.'),\n        'remediation':\n            ('Run DML operations that affect a single table such that they do'\n             ' not overlap - either space out DML operations or serialize them'\n             ' in such a manner that the next DML operation is triggered after'\n             ' the previous one has completed. Try to group more changes into a'\n             ' single DML statement instead of sending multiple single DML'\n             ' statements. Using partitioned tables can also help - if two'\n             ' parallel running DMLs modify separate partitions this will not'\n             ' lead to a conflict.'),\n    },\n    (\n        'Response',\n        'too large',\n        'to return',\n    ): {\n        'cause': (\n            'This error occurs when your query results are larger than the'\n            ' maximum response size. Some queries execute in multiple stages,'\n            ' and this error returns when any stage returns a response size'\n            ' that is too large, even if the final result is smaller than the'\n            ' maximum. This error commonly returns when queries use an ORDER BY'\n            ' clause.'),\n        'remediation': (\n            'Adding a LIMIT clause can sometimes help, or removing the ORDER BY'\n            ' clause. If you want to ensure that large results can return, you'\n            ' can set the allowLargeResults property to True and specify a'\n            ' destination table - this can be done by specifying the'\n            ' `--destination_table` flag when using the bq tool or configuring'\n            ' Query settings in BigQuery Studio.'),\n    },\n    ('CPU seconds were used', 'query must use less than'): {\n        'cause': (\n            'This error occurs when on-demand queries use too much CPU relative'\n            ' to the amount of data scanned.'),\n        'remediation': (\n            'Optimize your query following the steps outlined in the public'\n            ' documentation -'\n            ' https://cloud.google.com/bigquery/docs/troubleshoot-queries#ts-resources-exceeded.'\n            ' Otherwise, switch to a capacity-based pricing model and use'\n            ' dedicated slots.'),\n    },\n    ('Concurrent jobs in the same session are not allowed',): {\n        'cause': ('This error can occur when multiple queries are running'\n                  ' concurrently in a session, which is not supported.'),\n        'remediation':\n            ('No concurrent queries are allowed in the same session - queries'\n             ' need to be launched in a serialized way.'),\n    },\n    ('Invalid snapshot time',): {\n        'cause':\n            ('Scenario 1: This error can occur when trying to query historical'\n             ' data that is outside of the time travel window for the'\n             ' dataset.\\nScenario 2: One of the tables used in the query is'\n             ' dropped and re-created after the query starts.'),\n        'remediation': (\n            'Scenario 1: Change the query to access historical data within the'\n            ' dataset\\'s time travel window.\\nScenario 2: Check to see if there'\n            ' is a scheduled query or application that performs this operation'\n            ' that ran at the same time as the failed query. If there is, try'\n            ' moving the process that performs the drop and re-create operation'\n            ' to run at a time that doesn\\'t conflict with queries that read'\n            ' that table.'),\n    },\n    ('The query is too large',): {\n        'cause':\n            ('You have exceeded the maximum SQL query length. See'\n             ' https://cloud.google.com/bigquery/quotas#query_jobs for actual'\n             ' limits.'),\n        'remediation':\n            ('To stay within this limit, consider 1) replacing large arrays or'\n             ' lists with query parameters and 2) breaking a long query into'\n             ' multiple queries in the session.'),\n    },\n    ('Transaction is aborted due to concurrent update against table',): {\n        'cause': (\n            'A transaction with DML statements is attempted against a table'\n            ' with an existing transaction performing DML statements that has'\n            ' not yet been committed or rolled back. There are two possible'\n            ' scenarios: \\nScenario 1: A DML operation updated the table after'\n            ' the transaction has already started.\\nScenario 2: This error'\n            ' can be encountered if a previous transaction encountered an'\n            ' error, but there was no exception handler. It is important to'\n            ' understand that BigQuery automatically rolls back the transaction'\n            ' 24 hours after the transaction started (e.g.the BEGIN TRANSACTION'\n            ' statement was executed). This is because a transaction creates a'\n            ' session and sessions terminate automatically after 24 hours of'\n            ' inactivity'),\n        'remediation': (\n            'Scenario 1: Make sure that there are no DML operations modifying'\n            ' the table when launching the transaction.Scenario 2: Find the'\n            ' existing session by following'\n            ' https://cloud.google.com/bigquery/docs/sessions-get-ids#list_active_inactive'\n            ' and then terminate it by following'\n            ' https://cloud.google.com/bigquery/docs/sessions-terminating.\\n If'\n            ' you confirmed that there were no DML operations modifying the'\n            ' table or existing sessions that were not terminated, please'\n            ' contact Google Cloud Support.'),\n    },\n    (\n        'Correlated subqueries',\n        'that reference other tables are not supported unless they can be ',\n        'de-correlated',\n    ): {\n        'cause': (\n            'This error can occur when your query contains a subquery that'\n            ' references a column from outside that subquery, called a'\n            ' correlation column. The correlated subquery is evaluated using an'\n            ' inefficient, nested execution strategy, in which the subquery is'\n            ' evaluated for every row from the outer query that produces the'\n            ' correlation columns. Sometimes, BigQuery can internally rewrite'\n            ' queries with correlated subqueries so that they execute more'\n            ' efficiently. The correlated subqueries error occurs when BigQuery'\n            ' can\\'t sufficiently optimize the query.'),\n        'remediation': (\n            'To address this error, try the following:\\n1. Remove any ORDER BY,'\n            ' LIMIT, EXISTS, NOT EXISTS, or IN clauses from your subquery. \\n2.'\n            ' Use a multi-statement query to create a temporary table to'\n            ' reference in your subquery. \\n3. Rewrite your query to use a'\n            ' CROSS JOIN instead.'),\n    },\n    (\n        'Requires raw access permissions',\n        'on the read columns',\n        'to execute the DML statements',\n    ): {\n        'cause':\n            ('This error occurs when you attempt a DML DELETE, UPDATE, or MERGE'\n             ' statement, without having the Fine-Grained Reader permission on'\n             ' the scanned columns that use column-level access control to'\n             ' restrict access at the column level.'),\n        'remediation': (\n            'Grant the Fine-Grained Reader permission to the user running the'\n            ' job. See'\n            ' https://cloud.google.com/bigquery/docs/column-level-security-writes'\n            ' for more details.'),\n    },\n    (\n        'Cannot parse regular expression',\n        'invalid perl operator',\n    ): {\n        'cause': (\n            'BigQuery uses the re2 library for regular expression handling.'\n            ' Certain operators are not supported by the re2 library. \\nUsers'\n            ' might encounter this as a transient problem - it\\'s possible that'\n            ' the regular expression matching operation in the WHERE clause was'\n            ' discarded by a previous condition check and was not evaluated at'\n            ' all at runtime.'),\n        'remediation':\n            ('Study https://github.com/google/re2/wiki/Syntax to identify the'\n             ' unsupported regular expression operator and modify your regular'\n             ' expression accordingly.'),\n    },\n    (\n        'exceeded the maximum disk and memory limit',\n        'available for shuffle operations',\n    ): {\n        'cause':\n            ('This error occurs when a query can\\'t access sufficient shuffle'\n             ' resources - there is more data that needs to get written to'\n             ' shuffle than there is available shuffle capacity.'),\n        'remediation': (\n            'There are three possible solutions to this issue: provisioning'\n            ' more resources, reducing the amount of data processed by the'\n            ' query or reducing concurrency of queries or materializing'\n            ' intermediate results to reduce dependence on resources.\\n1.'\n            ' Provisioning more resources: If you are using'\n            ' on-demand pricing, consider switching to capacity-based analysis'\n            ' pricing by purchasing reservations. Reservations give you'\n            ' dedicated slots and shuffle capacity for your projects\\' queries.'\n            ' If you are using BigQuery reservations, slots come with dedicated'\n            ' shuffle capacity. Queries running in parallel will share the same'\n            ' shuffle capacity. You can try:\\n a) Adding more slots to that'\n            ' reservation.\\n b) Using a different reservation that has more'\n            ' slots.\\n c) Spread out shuffle-intensive queries, either over'\n            ' time within a reservation or over different'\n            ' reservations.\\n2. Reducing the amount of data processed: Follow'\n            ' the recommendations from '\n            'https://cloud.google.com/bigquery/docs/best-practices-performance-compute'\n            '#reduce-data-processed.'\n            ' Certain operations in SQL tend to make more extensive usage of'\n            ' shuffle, particularly JOIN operations and GROUP BY clauses. Where'\n            ' possible, reducing the amount of data in these operations might'\n            ' reduce shuffle usage.\\n3. Reduce concurrency of queries or'\n            ' materializing intermediate results to reduce dependence on'\n            ' resources.'),\n    },\n    (\n        'Cannot return an invalid timestamp value',\n        'relative to the Unix epoch',\n    ): {\n        'cause':\n            ('You are trying to load invalid Unix epoch timestamp values into a'\n             ' BigQuery table or you are trying to query a table that contains'\n             ' invalid Unix epoch timestamp values.'),\n        'remediation': (\n            'For loading: Make sure you are providing valid Unix epoch'\n            ' timestamp values when loading. \\n For querying: For every field'\n            ' which has one or more invalid values update them to NULL or valid'\n            ' Unix epoch timestamp values using a DML UPDATE statement.'),\n    },\n    (\n        'Resource exhausted',\n        'The model might be too large.',\n    ): {\n        'cause': (\n            'Common causes of this issue include but are not limited to: too'\n            ' many categorical values in columns; too many features; complex'\n            ' architecture of the model (i.e. the number and depth of trees, or'\n            ' hidden units in neural nets).'),\n        'remediation':\n            ('1. Reduce the complexity of the model. \\n2. Please contact '\n             'bqml-feedback@google.com if you keep running into this issue and '\n             'would like to apply for more quota.'),\n    },\n    (\n        'Not enough resources for query planning',\n        'too many subqueries',\n        'query is too complex',\n    ): {\n        'cause':\n            ('This error occurs when a query is too complex. The primary causes'\n             ' of complexity are:\\n - WITH clauses that are deeply nested or'\n             ' used repeatedly.\\n - Views that are deeply nested or used'\n             ' repeatedly.\\n - Repeated use of the UNION ALL operator.'),\n        'remediation': (\n            'Try the following:\\n - Split the query into multiple queries, then'\n            ' use procedural language to run those queries in a sequence with'\n            ' shared state.\\n - Use temporary tables instead of WITH clauses.\\n'\n            ' - Rewrite your query to reduce the number of referenced objects'\n            ' and comparisons.'),\n    },\n    (\n        'exceeded limit for metric',\n        'cloudkms.googleapis.com/hsm_symmetric_requests',\n    ): {\n        'cause': (\n            'The HSM symmetric cryptographic requests per region quota is being'\n            ' exceeded.'),\n        'remediation': (\n            'There are two possible remediations: \\n1. Reduce the rate at which'\n            ' your '\n            'projects are making requests that use Cloud KMS resources. \\n2.'\n            ' Request '\n            'a quota increase for HSM symmetric cryptographic requests per'\n            ' region by '\n            'following '\n            'https://cloud.google.com/kms/docs/monitor-adjust-quotas#increase_quotas.'\n        ),\n    },\n    (\n        'Apache Avro',\n        'failed',\n        'read',\n        'Cannot skip stream',\n    ): {\n        'cause':\n            ('This error can occur when loading multiple Avro files with'\n             ' different schemas, resulting in a schema resolution issue and'\n             ' causing the import job to fail at a random file.'),\n        'remediation':\n            ('To address this error, ensure that the last alphabetical file in'\n             ' the load job contains the superset (union) of the differing'\n             ' schemas. This is a requirement based on how Avro handles schema'\n             ' resolution. See'\n             ' https://avro.apache.org/docs/1.8.1/spec.html#Schema+Resolution.'\n            ),\n    },\n    ('Already Exists: Job',): {\n        'cause':\n            ('You are trying to create a job with a job id that already exists.'\n            ),\n        'remediation':\n            ('Allow BigQuery to generate a random jobId value instead of'\n             ' specifying one explicitly.'),\n    },\n    (\n        'Dataset',\n        'was not found in location',\n    ): {\n        'cause':\n            ('This error returns when you refer to a dataset resource that'\n             ' doesn\\'t exist, or when the location in the request does not'\n             ' match the location of the dataset.'),\n        'remediation':\n            ('To address this issue, specify the location of the dataset in the'\n             ' query or confirm that the dataset exists in the mentioned'\n             ' location and the identifier is correctly specified.'),\n    },\n    (\n        'Operation timed out',\n        'after 6.0 hours',\n        'reducing the amount of work',\n        'limit.',\n    ): {\n        'cause': (\n            'BigQuery query jobs have an execution time limit of 6 hours, which'\n            ' is a system limit that cannot be changed.'),\n        'remediation': (\n            'If this is the first time you are executing the query, look into'\n            ' optimizing query performance by studying the following public'\n            ' documentation section:'\n            ' https://cloud.google.com/bigquery/docs/best-practices-performance-overview.'\n            '\\nHowever, if this is a job that previously succeeded much faster, you'\n            ' should look into troubleshooting this as a slow query. Currently'\n            ' there is a troubleshooting article available in the public'\n            ' documentation -'\n            'https://cloud.google.com/bigquery/docs/troubleshoot-queries#troubleshoot_slow_queries'\n            ' .Also consider investigating if there was a shortage of available'\n            ' slot resources due to a possible increase in the number of'\n            ' concurrent queries. See'\n            'https://cloud.google.com/bigquery/docs/information-schema-jobs'\n            '#view_average_concurrent_jobs_running_alongside_a_particular_job_in_the_same_project'\n            ' for an example query.'),\n    },\n    (\n        'Resources exceeded during query execution',\n        'executed in the allotted memory',\n        ('Top memory consumer(s): sort operation used for table update'\n         ' (UPDATE/DELETE/MERGE)'),\n    ): {\n        'cause':\n            ('This can happen when a table has reasonably wide rows and those'\n             ' rows need to be updated to a much larger value in size, e.g. 20'\n             ' times the original row size. If there is a large number of rows'\n             ' that need to be updated, this can also lead to the encountered'\n             ' error.'),\n        'remediation':\n            (' - Split the UPDATE/MERGE to update less rows at once.\\n - Update'\n             ' row size less aggressively. For example, split one MERGE'\n             ' statement into a few MERGE statements updating a smaller number'\n             ' of columns at once so that row size is increased gradually.'),\n    },\n    (\n        'Resources exceeded during query execution',\n        'executed in the allotted memory',\n        'Out of stack space',\n        'deeply nested query expression',\n        'query resolution',\n    ): {\n        'cause': (\n            'Query contains too many nested function calls. Sometimes, parts of'\n            ' the query are translated to function calls during parsing. For'\n            ' example, an expression with repeated concatenation operators,'\n            ' such as A || B || C || ..., becomes CONCAT(A, CONCAT(B, CONCAT(C,'\n            ' ...))).'),\n        'remediation': 'Rewrite your query to reduce the amount of nesting.',\n    },\n    (\n        'Resources exceeded during query execution',\n        'executed in the allotted memory',\n        'Top memory consumer(s): query parsing and optimization',\n    ): {\n        'cause': (\n            'The issue is caused by the complexity of the query statement (i.e.'\n            ' number of columns, statements, literals, etc.).'),\n        'remediation':\n            (' - Split the query into smaller queries containing fewer'\n             ' literals.\\n - Materialize inner query results to use them in'\n             ' another SELECT statement.'),\n    },\n    (\n        'Resources exceeded during query execution',\n        'executed in the allotted memory',\n        'ORDER BY',\n    ): {\n        'cause': (\n            'An ORDER BY operation is quite expensive and cannot be processed'\n            ' in parallel - sorting will happen on a single compute unit, which'\n            ' can run out of memory if it needs to process too many rows.'),\n        'remediation': (' - Use a LIMIT clause to reduce the result set.'\n                        '\\n - Use additional filters to reduce the result set.'\n                        '\\n - Remove the ORDER BY clause from the query.'),\n    },\n    (\n        'Resources exceeded during query execution',\n        'executed in the allotted memory',\n    ): {\n        'cause':\n            ('For SELECT statements, this error occurs when the query uses too'\n             ' many resources.'),\n        'remediation': (\n            ' - Try removing an ORDER BY clause.\\n - If your query uses JOIN,'\n            ' ensure that the larger table is on the left side of the clause.'\n            ' Also ensure that your data does not contain duplicate join'\n            \" keys.\\n - If your query uses FLATTEN, determine if it's necessary\"\n            ' for your use case. For more information, see'\n            ' https://cloud.google.com/bigquery/docs/data#nested.\\n - If your'\n            ' query uses EXACT_COUNT_DISTINCT, consider using COUNT(DISTINCT)'\n            ' ensure that the larger table is on the left side of the clause.'\n            ' Also ensure that your data does not contain duplicate join'\n            \" keys.\\n - If your query uses FLATTEN, determine if it's necessary\"\n            ' for your use case. For more information, see'\n            ' https://cloud.google.com/bigquery/docs/data#nested.\\n - If your'\n            ' query uses EXACT_COUNT_DISTINCT, consider using COUNT(DISTINCT)'\n            ' instead.\\n - If your query uses COUNT(DISTINCT <value>, <n>) with'\n            ' a large <n> value, consider using GROUP BY instead. For more'\n            ' information, see'\n            ' https://cloud.google.com/bigquery/query-reference#countdistinct.\\n'\n            ' - If your query uses UNIQUE, consider using GROUP BY instead, or'\n            ' a window function inside of a subselect.\\n - If your query'\n            ' materializes many rows using a LIMIT clause, consider filtering'\n            ' on another column, for example ROW_NUMBER(), or removing the'\n            ' LIMIT clause altogether to allow write parallelization.\\n - If'\n            ' your query uses deeply nested views and a WITH clause, this can'\n            ' cause an exponential growth in complexity, thereby reaching the'\n            ' limits.\\n - Use temporary tables to store intermediate results'\n            ' instead of using WITH clauses. WITH clauses might have to be'\n            ' recalculated several times, which can make the query complex and'\n            ' therefore slow.\\n - Avoid using UNION ALL queries. \\n\\nSee'\n            ' https://cloud.google.com/bigquery/docs/troubleshoot-queries#ts-resources-exceeded'\n            ' for more details.'),\n    },\n    (\n        'project',\n        'region',\n        'exceeded quota',\n        'jobs that can be queued per project',\n    ): {\n        'cause': (\n            'You are attempting to queue more interactive or batch queries than'\n            ' the queue limit allows. '),\n        'remediation': (\n            'You can queue up to 1000 interactive and 20000 batch jobs per'\n            ' project. This is a hard limit and cannot be raised. Possible'\n            ' remediations:\\n - Pause the job. If you identify a process or'\n            ' pipeline responsible for an increase in queries, then pause that'\n            ' process or pipeline.\\n - Use jobs with batch priority. You can'\n            ' queue more batch queries than interactive queries.\\n - Distribute'\n            ' queries. Organize and distribute the load across different'\n            ' projects as informed by the nature of your queries and your'\n            ' business needs.\\n - Distribute run times. Distribute the load'\n            ' across a larger time frame. If your reporting solution needs to'\n            ' run many queries, try to introduce some randomness for when'\n            ' queries start. For example, don\\'t start all reports at the same'\n            ' time.\\n - Use BigQuery BI Engine. If you have encountered this'\n            ' error while using a business intelligence (BI) tool to create'\n            ' dashboards that query data in BigQuery,then we recommend that you'\n            ' can use BigQuery BI Engine. Using BigQuery BI Engine is optimal'\n            ' for this use case.\\n - Optimize queries and data model.'\n            ' Oftentimes, a query can be rewritten so that it runs more'\n            ' efficiently. For example, if your query contains a Common table'\n            ' expression (CTE)–WITH clause–which is referenced in more than one'\n            ' place in the query, then this computation is done multiple times.'\n            ' It is better to persist calculations done by the CTE in a'\n            ' temporary table, and then reference it in the query.\\n - Multiple'\n            ' joins can also be the source of lack of efficiency. In this case,'\n            ' you might want to consider using nested and repeated columns.'\n            ' Using this often improves locality of the data, eliminates the'\n            ' need for some joins, and overall reduces resource consumption and'\n            ' the query run time.\\n - Optimizing queries make them cheaper, so'\n            ' when you use capacity-based pricing, you can run more queries'\n            ' with your slots. For more information, see '\n            'https://cloud.google.com/bigquery/docs/best-practices-performance-overview.'\n            ' \\n - Optimize query model. BigQuery'\n            ' is not a relational database. It is not optimized for an infinite'\n            ' number of small queries. Running a large number of small queries'\n            ' quickly depletes your quotas. Such queries don\\'t run as'\n            ' efficiently as they do with the smaller database products.'\n            ' BigQuery is a large data warehouse and this is its primary use'\n            ' case. It performs best with analytical queries over large amounts'\n            ' of data.\\n - Persist data (Saved tables). Pre-process the data in'\n            ' BigQuery and store it in additional tables. For example, if you'\n            ' execute many similar, computationally-intensive queries with'\n            ' different WHERE conditions, then their results are not cached.'\n            ' Such queries also consume resources each time they run. You can'\n            ' improve the performance of such queries and decrease their'\n            ' processing time by pre-computing the data and storing it in a'\n            ' table. This pre-computed data in the table can be queried by'\n            ' SELECT queries. It can often be done during ingestion within the'\n            ' ETL process, or by using scheduled queries or materialized'\n            ' views.\\n - Use dry run mode. Run queries in dry run mode, which'\n            ' estimates the number of bytes read but does not actually process'\n            ' the query.\\n - Preview table data. To experiment with or explore'\n            ' data rather than running queries, preview table data with'\n            ' BigQuery\\'s table preview capability.\\n - Use cached query'\n            ' results. All query results, including both interactive and batch'\n            ' queries, are cached in temporary tables for approximately 24'\n            ' hours with some exceptions. While running a cached query does'\n            ' still count against your concurrent query limit, queries that use'\n            ' cached results are significantly faster than queries that don\\'t'\n            ' use cached results because BigQuery does not need to compute the'\n            ' result set.'),\n    },\n    (\n        'Quota exceeded',\n        'table exceeded quota',\n        'Number of partition modifications',\n        'column partitioned table',\n    ): {\n        'cause': (' Your column-partitioned table reaches the quota of the'\n                  ' number of partition modifications permitted per day.'\n                  ' Partition modifications include the total of all load jobs,'\n                  ' copy jobs, and query jobs that append or overwrite a'\n                  ' destination partition.'),\n        'remediation': (\n            ' This quota cannot be increased. To mitigate, do the following:'\n            ' \\n - Change the partitioning on the table to have more data in'\n            ' each partition, in order to decrease the total number of'\n            ' partitions. For example, change from'\n            ' partitioning by day to partitioning by month or change how you'\n            ' partition the table.\\n - Use clustering instead of partitioning.'\n            ' \\n - If you frequently load data from multiple small files stored'\n            ' in Cloud Storage that uses a job per file, then combine multiple'\n            ' load jobs into a single job. You can load from multiple Cloud'\n            ' Storage URIs with a comma-separated list (for example,'\n            ' gs://my_path/file_1,gs://my_path/file_2), or by using wildcards'\n            ' (for example, gs://my_path/*).'\n            ' \\n - If you use load, select or copy jobs to append single rows'\n            ' of data to a table, for example, then you should consider'\n            ' batching multiple jobs into one job. BigQuery'\n            ' doesn\\'t perform well when used as a relational database.'\n            ' As a best practice, avoid running frequent, single-row append'\n            ' actions.'\n            ' \\n - To append data at a high rate, consider using BigQuery'\n            ' Storage Write API. It is a recommended solution for'\n            ' high-performance data ingestion. The BigQuery Storage Write API'\n            ' has robust features, including exactly-once delivery semantics.'\n            ' To monitor the number of modified partitions on a table, use the'\n            ' INFORMATION_SCHEMA view.')\n    },\n    (\n        'Input',\n        'CSV files are not splittable',\n        'files is larger',\n        'maximum allowed size',\n    ): {\n        'cause':\n            ('If you load a large CSV file using the bq load command with the '\n             '--allow_quoted_newlines flag, you might encounter this error.'),\n        'remediation':\n            ('1. Set the --allow_quoted_newlines flag to false. \\n2. Split the'\n             ' CSV file into smaller chunks that are each less than 4 GB.')\n    },\n    (\n        'table',\n        'exceeded',\n        'imports or query appends per table',\n    ): {\n        'cause':\n            ' BigQuery returns this error message when your table reaches the'\n            ' limit for table operations per day for Standard tables. Table'\n            ' operations include the combined total of all load jobs, copy'\n            ' jobs, and query jobs that append or overwrite a destination'\n            ' table. The limit can be found here: '\n            'https://cloud.google.com/bigquery/quotas#standard_tables .',\n        'remediation':\n            ' This quota cannot be increased. To remediate, do the following:'\n            ' \\n - If you frequently load data from multiple small files stored'\n            ' in Cloud Storage that uses a job per file, then combine multiple'\n            ' load jobs into a single job. You can load from multiple Cloud'\n            ' Storage URIs with a comma-separated list (for example,'\n            ' gs://my_path/file_1,gs://my_path/file_2), or by using wildcards'\n            ' (for example, gs://my_path/*).'\n            ' \\n - If you use load, select or copy jobs to append single rows'\n            ' of data to a table, for example, then you should consider'\n            ' batching multiple jobs into one job. BigQuery doesn\\'t perform'\n            ' well when used as a relational database. As a best practice,'\n            ' avoid running frequent, single-row append actions.'\n            ' \\n - To append data at a high rate, consider using BigQuery'\n            ' Storage Write API. It is a recommended solution for'\n            ' high-performance data ingestion. The BigQuery Storage Write API'\n            ' has robust features, including exactly-once delivery semantics.'\n            ' \\n - To monitor the number of modified partitions on a table, use'\n            ' the INFORMATION_SCHEMA view.'\n    },\n    (\n        'Exceeded rate limits',\n        'too many table update operations',\n    ): {\n        'cause':\n            ' The table reached the limit for maximum rate of table metadata'\n            ' update operations per table for Standard tables. Table operations'\n            ' include the combined total of all load jobs, copy jobs, and query'\n            ' jobs that append to or overwrite a destination table. API calls'\n            ' like PatchTable, UpdateTable or InsertTable also count as table'\n            ' metadata update operations. To diagnose where the operations are'\n            ' coming from, follow the steps in '\n            'https://cloud.google.com/bigquery/docs/troubleshoot-quotas'\n            '#ts-maximum-update-table-metadata-limit-diagnose.',\n        'remediation':\n            ' - Reduce the update rate for the table metadata.'\n            ' \\n - Add a delay between jobs or table operations to make sure'\n            ' that the update rate is within the limit.'\n            ' \\n - For data inserts or modification, consider using DML'\n            ' operations. DML operations are not affected by the Maximum rate'\n            ' of table metadata update operations per table rate limit'\n            ' (DML operations have their own limits).'\n            ' \\n - If you frequently load data from multiple small files stored'\n            ' in Cloud Storage that uses a job per file, then combine multiple'\n            ' load jobs into a single job. You can load from multiple Cloud'\n            ' Storage URIs with a comma-separated list (for example,'\n            ' gs://my_path/file_1,gs://my_path/file_2), or by using wildcards'\n            ' (for example, gs://my_path/*).'\n            ' \\n - If you use load, select or copy jobs to append single rows'\n            ' of data to a table, for example, then you should consider'\n            ' batching multiple jobs into one job. BigQuery doesn\\'t perform'\n            ' well when used as a relational database. As a best practice,'\n            ' avoid running frequent, single-row append actions.'\n            ' \\n - To append data at a high rate, consider using BigQuery'\n            ' Storage Write API. It is a recommended solution for'\n            ' high-performance data ingestion. The BigQuery Storage Write API'\n            ' has robust features, including exactly-once delivery semantics.'\n    },\n    (\n        'project',\n        'exceeded quota for free query bytes scanned',\n    ): {\n        'cause': (\n            'BigQuery returns this error when you run a query in the free'\n            ' usage tier and the account reaches the monthly limit of data size'\n            ' that can be queried without a paid Cloud Billing account.'),\n        'remediation':\n            ('To continue using BigQuery, you need to upgrade the account to a '\n             'paid Cloud Billing account.'),\n    },\n    ('exceeded quota for copies per project',): {\n        'cause':\n            (' Your project has exceeded the daily limit for table copy jobs.'\n             ' See the limit here:'\n             ' https://cloud.google.com/bigquery/quotas#copy_jobs.'),\n        'remediation':\n            ('Wait for the daily quota to be replenished. \\nIf the goal of the'\n             ' frequent copy operations is to create a snapshot of data,'\n             ' consider using table snapshots instead. Table snapshots are'\n             ' cheaper and faster alternative to copying full tables. \\nYou'\n             ' can request a quota increase by contacting support or sales'\n             ' if you need a bigger quota. It might take several days to review'\n             ' and process the request. We recommend stating the priority, use'\n             ' case, and the project ID in the request.'),\n    },\n    (\n        'exceeded quota',\n        'ExtractBytesPerDay',\n    ): {\n        'cause':\n            ('The export exceeds the default 50 TiB (Tebibytes) daily limit in'\n             ' a project'),\n        'remediation': (\n            ' To export more than 50 TiB(Tebibytes) of data per day, do one of'\n            ' the following: '\n            ' \\n - Create a slot reservation or use an existing reservation and'\n            ' assign your project to the reservation with the PIPELINE job'\n            ' type. You will be billed using capacity-based pricing.'\n            ' \\n - Use the EXPORT DATA SQL statement. You will be billed using'\n            ' either on-demand or capacity-based pricing, depending on how the'\n            ' project query pricing is configured.'\n            ' \\n - Use the Storage Read API. You will be billed using the price'\n            ' for streaming reads. The expiration time is guaranteed to be at'\n            ' least 6 hours from session creation time.'),\n    },\n    ('too many concurrent queries with remote functions',): {\n        'cause':\n            (' The number of concurrent queries that contain remote functions'\n             ' exceeds the limit.'),\n        'remediation':\n            (' Follow the best practices for using remote functions outlined'\n             ' here: https://cloud.google.com/bigquery/docs/remote-functions'\n             '#best_practices_for_remote_functions .'\n             ' \\nYou can request a quota increase by contacting support or'\n             ' sales if you need a bigger quota.'),\n    },\n    ('exceeded quota for CREATE MODEL queries per project',): {\n        'cause': ('You have exceeded the quota for CREATE MODEL statements.'),\n        'remediation':\n            (' If you exceed the quota for CREATE MODEL statements, send an'\n             ' email to bqml-feedback@google.com and request a quota increase'\n             ' through sales or support.'),\n    },\n    (\n        'UPDATE/MERGE',\n        'match',\n        'one source row for each target row',\n    ): {\n        'cause':\n            (' This error will be raised if the table contains duplicated rows.'\n             ' Multiple rows in the source table match a single row in the'\n             ' target table.'),\n        'remediation': ('Remove duplicate rows from the table.'),\n    },\n    ('Not found: Table',): {\n        'cause':\n            (' The query references a table that does not exist or could not be'\n             ' located in the specified region and project.'),\n        'remediation': (\n            ' Make sure the table exists in the specified dataset and the table'\n            ' identifier provided is correct.\\nAfter that confirm that the'\n            ' query is executed in the correct region (where the dataset is'\n            ' located).'),\n    },\n    ('Not found: View',): {\n        'cause':\n            (' The query references a view that does not exist or could not be'\n             ' located in the specified region and project.'),\n        'remediation':\n            (' Make sure the view exists in the specified dataset and the view'\n             ' identifier provided is correct.\\nAfter that confirm that the'\n             ' query is executed in the correct region (where the dataset is'\n             ' located).'),\n    },\n    ('Syntax Error',): {\n        'cause': ('This is a user side SQL statement issue.'),\n        'remediation':\n            (' Check your query for syntax errors for the methods or variables'\n             ' mentioned in the error message at the specified location.'),\n    },\n    ('User requested cancellation',): {\n        'cause': ('The job was manually stopped by a user request before it'\n                  ' could complete or a user configured the job timeout.'),\n        'remediation': (\n            ' The job did not fail - a user sent a cancel request to stop the'\n            ' execution of this job. You can inspect Cloud Logging and look for'\n            ' a jobs.cancel request to understand who initiated the'\n            ' cancellation.'),\n    },\n    (\n        'Job execution was cancelled',\n        'Job timed out after',\n    ): {\n        'cause':\n            (' The job timed out before it could complete. This can happen when'\n             ' a job execution reaches an existing BigQuery limit or when a'\n             ' user-defined timeout value is set in the job configuration.'),\n        'remediation': (\n            ' Inspect the job configuration to understand if a timeout value'\n            ' was set. If no custom timeout was set, this means that one of the'\n            ' execution limits has been reached. See'\n            ' https://cloud.google.com/bigquery/quotas for more information'\n            ' about execution time limits. Follow'\n            ' https://cloud.google.com/bigquery/docs/best-practices-performance-overview'\n            ' to optimize query performance. Also consider investigating if'\n            ' there was a shortage of available slot resources due to a'\n            ' possible increase in the number of concurrent queries. See'\n            ' https://cloud.google.com/bigquery/docs/information-schema-jobs'\n            '#view_average_concurrent_jobs_running_alongside_a_particular_job_in_the_same_project'\n            ' for an example query to get concurrency information.'),\n    },\n    ('exceeded rate limits',): {\n        'cause':\n            (' Too many requests have been made in a short period, triggering a'\n             ' rate limit to protect the service.'),\n        'remediation':\n            (' Retry the operation after a few seconds. Use exponential backoff'\n             ' between retry attempts. That is, exponentially increase the'\n             ' delay between each retry.'),\n    },\n    (\n        'User does not have',\n        'permission in project',\n    ): {\n        'cause': ('User does not have sufficient permissions in the mentioned'\n                  ' project.'),\n        'remediation':\n            ('Read the error message carefully and grant the permission'\n             ' specified in the error message to the user who attempted to run'\n             ' the job'),\n    },\n    ('User does not have permission to query table or perhaps it does not'\n     ' exist',): {\n        'cause':\n            (' There are two possible root causes: the user either does not'\n             ' have the necessary permissions to look up tables in the project,'\n             ' or the tables does not exist.'),\n        'remediation': (\n            ' Follow the troubleshooting advice documented here: '\n            'https://cloud.google.com/bigquery/docs/troubleshoot-queries#user_perm'\n        ),\n    },\n    ('csv processing encountered too many errors', 'while parsing'): {\n        'cause':\n            (' There was an issue processing the CSV file(s) submitted by the'\n             ' user in the load job.'),\n        'remediation': (\n            ' Carefully read through the error messages above to understand the'\n            ' specific problem(s) with the file(s). Visit '\n            'https://cloud.google.com/bigquery/docs/loading-data-cloud-storage-csv'\n            '#troubleshoot_parsing_errors'\n            ' for guidance on how to resolve parsing errors.'),\n    },\n    ('csv processing encountered too many errors',): {\n        'cause':\n            ('There was an issue processing the CSV file(s) submitted by the'\n             ' user in the load job.'),\n        'remediation':\n            ('There are two possible remediations:\\n'\n             ' 1. Use --max_bad_records to instruct BigQuery to skip a defined'\n             ' number of rows that cannot be parsed and let the job complete.\\n'\n             ' 2. Fix the file(s) by editing the rows causing the failures and'\n             ' retry the job.\\n If there are additional error messages, they'\n             ' will be printed as well to provide the location(s) of the'\n             ' problematic row(s).'),\n    },\n    ('error while reading data', 'error message', 'unable to parse'): {\n        'cause': ('There was an issue reading the mentioned file.'),\n        'remediation': (\n            ' The error message above specifies the problem that was'\n            ' encountered, mentions the problematic file and the position in'\n            ' the file at which the error occurred. Fix the issue with the file'\n            ' and retry the job. Visit '\n            'https://cloud.google.com/bigquery/docs/loading-data-cloud-storage-csv'\n            '#troubleshoot_parsing_errors'\n            ' for guidance on how to resolve parsing errors.'),\n    },\n    (\n        'error while reading data',\n        'error message',\n    ): {\n        'cause': ('There was an issue reading the mentioned file.'),\n        'remediation':\n            (' The error message above specifies the problem that was'\n             ' encountered, mentions the problematic file and the position in'\n             ' the file at which the error occurred. Fix the'\n             ' issue with the file and retry the job.'),\n    },\n    (\n        'internal error',\n        'retry',\n    ): {\n        'cause':\n            (' This error usually means that the job failed due to an'\n             ' intermittent issue on the BigQuery service side. The client has'\n             ' no way to fix or control these errors - it is only possible to'\n             ' mitigate them by retrying the job.'),\n        'remediation':\n            (' The main recommendation is to retry the job using truncated'\n             ' exponential backoff. For more information about exponential'\n             ' backoff, see '\n             'https://en.wikipedia.org/wiki/Exponential_backoff. \\nIf the'\n             ' retries are not effective and the issues persist, you can'\n             ' calculate the rate of failing requests by following this article'\n             ' - https://cloud.google.com/bigquery/docs/error-messages'\n             '#calculate-rate-of-failing-requests-and-uptime'\n             ' - and contact support with the rate of failing requests.\\nAlso,'\n             ' if you observe a specific job persistently fail with this'\n             ' internal error, even when retried using exponential backoff on'\n             ' multiple workflow restart attempts, you should escalate this to'\n             ' Cloud Support to troubleshoot the issue from the BigQuery side,'\n            ),\n    },\n    (\n        'access denied',\n        'user does not have',\n        'permission',\n    ): {\n        'cause':\n            'There are three main reasons why this error might occur:'\n            '\\n - Running a query without the bigquery.jobs.create permission on the '\n            'project from which you are running the query.'\n            '\\n - Missing the bigquery.tables.getData permission on all tables and views '\n            'that the query references.'\n            '\\n - Table does not exist in the queried region',\n        'remediation': (\n            '\\n1. Make sure the table exists in the queried region. Check if you '\n            'are explicitly setting an incorrect region for query processing.\\n'\n            '2. Make sure that the service account, user, or group running this query'\n            'has the bigquery.jobs.create permission on the project where the query '\n            'is running.\\nAlso make sure that they have the bigquery.tables.getData '\n            'permission on all tables and views that are referenced by the query'\n        ),\n    },\n    ('user does not have permission',): {\n        'cause':\n            'There are three main reasons why this error might occur:'\n            '\\n - Running a query without the bigquery.jobs.create permission on the '\n            'project from which you are running the query.'\n            '\\n - Missing the bigquery.tables.getData permission on all tables and views '\n            'that the query references.'\n            '\\n - Table does not exist in the queried region',\n        'remediation': (\n            '\\n1. Make sure the table exists in the queried region. Check if you '\n            'are explicitly setting an incorrect region for query processing.\\n'\n            '2. Make sure that the service account, user, or group running this query'\n            'has the bigquery.jobs.create permission on the project where the query '\n            'is running.\\nAlso make sure that they have the bigquery.tables.getData '\n            'permission on all tables and views that are referenced by the query'\n        ),\n    },\n}\n"
  },
  {
    "path": "gcpdiag/runbook/bigquery/failed_query.py",
    "content": "# Copyright 2025 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Module containing the BigQuery Failed Query diagnostic tree and its steps.\n\nThis runbook investigates why a specific BigQuery job failed by verifying the\njob status and analyzing the error message against a set of known issues to\nprovide root cause and remediation steps.\n\"\"\"\n\nfrom google.auth import exceptions\nfrom googleapiclient import errors\n\nfrom gcpdiag import runbook, utils\nfrom gcpdiag.queries import apis, bigquery, crm\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.bigquery import constants, flags\nfrom gcpdiag.runbook.bigquery import generalized_steps as bigquery_gs\n\n\nclass FailedQuery(runbook.DiagnosticTree):\n  \"\"\"Diagnoses issues with a failed BigQuery query job.\n\n  This runbook investigates why a specific BigQuery job failed by verifying the\n  job's status and analyzing the error message against a set of known issues to\n  provide targeted remediation steps.\n  \"\"\"\n\n  parameters = {\n      flags.PROJECT_ID: {\n          'type': str,\n          'help': 'The Project ID where the BigQuery job was run.',\n          'required': True,\n      },\n      flags.BQ_JOB_REGION: {\n          'type': str,\n          'help': 'The region where the BigQuery job was run.',\n          'required': True,\n      },\n      flags.BQ_JOB_ID: {\n          'type': str,\n          'help': 'The identifier of the failed BigQuery Job.',\n          'required': True,\n      },\n      flags.BQ_SKIP_PERMISSION_CHECK: {\n          'type':\n              bool,\n          'help':\n              'Indicates whether to skip the permission check to speed up the investigation.',\n          'required':\n              False,\n          'default':\n              False,\n      },\n  }\n\n  def build_tree(self):\n    \"\"\"Constructs the diagnostic tree with a logical sequence of steps.\"\"\"\n    start = BigQueryFailedQueryStart()\n    self.add_start(start)\n    permissions_check = bigquery_gs.RunPermissionChecks('Failed Query Runbook')\n    self.add_step(parent=start, child=permissions_check)\n    job_exists = BigQueryJobExists()\n    self.add_step(parent=permissions_check, child=job_exists)\n    self.add_end(BigQueryEnd())\n\n\nclass BigQueryFailedQueryStart(runbook.StartStep):\n  \"\"\"Validates parameters and prerequisites before starting the diagnosis.\n\n  This initial step ensures that the provided project exists, valid job\n  identifiers have been provided, the BigQuery API is enabled and also\n  checks whether the user has the necessary permissions to execute the\n  runbook. The runbook will terminate if any of these initial checks fail.\n  \"\"\"\n\n  def execute(self):\n    \"\"\"Verifying input parameters and the BigQuery API status.\"\"\"\n    project_id = op.get(flags.PROJECT_ID)\n    job_region = op.get(flags.BQ_JOB_REGION).lower()\n    job_id = op.get(flags.BQ_JOB_ID)\n    project_placeholder = crm.Project(resource_data={\n        'name': 'projects/0000000000000',\n        'projectId': project_id\n    })\n    user_email = ''\n    try:\n      user_email = apis.get_user_email()\n    except (RuntimeError, exceptions.DefaultCredentialsError):\n      op.info(\n          'Unable to fetch user email. Please make sure to authenticate properly before '\n          'executing the investigation. Attempting to run the investigation.')\n    except AttributeError as err:\n      if (('has no attribute' in str(err)) and\n          ('with_quota_project' in str(err))):\n        op.info('Running the investigation within the GCA context.')\n    if project_id:\n      if job_region.lower() in bigquery.BIGQUERY_REGIONS:\n        if job_id:\n          op.info('Provided job input parameters have the correct format')\n        else:\n          op.add_skipped(\n              resource=project_placeholder,\n              reason=\n              'Invalid job identifier provided - a job identifier cannot be an empty string.'\n          )\n          return\n      else:\n        op.add_skipped(\n            resource=project_placeholder,\n            reason=\n            'Invalid job region provided. Please provide a valid BigQuery region.'\n        )\n        return\n    else:\n      op.add_skipped(\n          resource=project_placeholder,\n          reason=\n          'Invalid project identifier provided - the project identifier cannot be an empty string.'\n      )\n      return\n    project = project_placeholder\n    try:\n      project = bigquery.get_bigquery_project(project_id)\n      if not project:\n        op.add_skipped(\n            project_placeholder,\n            reason=\n            f'Project \"{project_id}\" not found or you lack access permissions',\n        )\n        return\n    except utils.GcpApiError as err:\n      if 'not found or deleted' in err.message.lower():\n        op.add_skipped(\n            project_placeholder,\n            reason=\n            f'Project \"{project_id}\" not found or deleted. Provide a valid project identifier',\n        )\n        return\n      elif 'caller does not have required permission to use project' in err.message.lower(\n      ):\n        op.add_skipped(\n            project_placeholder,\n            reason=(\n                f'You do not have permissions to access project \"{project_id}\". \\\n              \\nEnsure {user_email} has the \"serviceusage.services.use\" and '\n                '\"serviceusage.services.list\" permissions'),\n        )\n        return\n      elif ('resourcemanager.projects.get' in err.message.lower() and\n            'denied on resource' in err.message.lower()):\n        op.info(\n            f'User {user_email} does not have access to perform a resourcemanager.projects.get'\n            ' operation to fetch project metadata, or the project might not exist. Runbook '\n            'execution success will depend on project existence and the user having the '\n            'minimal required permissions.')\n    try:\n      is_bq_api_enabled = apis.is_enabled(project_id, 'bigquery')\n      if not is_bq_api_enabled:\n        op.add_skipped(\n            project,\n            reason=\n            f'BigQuery API is not enabled in project {project_id}. Terminating investigation.',\n        )\n        return\n      else:\n        op.info('The BigQuery API is enabled.')\n    except utils.GcpApiError as err:\n      if 'access' in err.message.lower(\n      ) or 'permission denied' in err.message.lower():\n        op.info(\n            f'User {user_email} does not have access to check the API status.\\nRunbook execution '\n            'success will depend on the BigQuery API being enabled.')\n\n\nclass BigQueryJobExists(runbook.Gateway):\n  \"\"\"Gateway that verifies the BigQuery Job exists.\n\n  This step calls the BigQuery API to fetch the job. If the job is found, the\n  runbook proceeds to the next step. If it is not found (e.g., due to a typo in\n  the job ID or region), the runbook reports this and terminates this path.\n  \"\"\"\n\n  template = 'generics::job_exists'\n\n  def execute(self):\n    \"\"\"Verifies that the BigQuery Job exists and directs the flow.\"\"\"\n    project_id = op.get(flags.PROJECT_ID)\n    project = crm.Project(resource_data={\n        'name': 'projects/0000000000000',\n        'projectId': project_id\n    })\n    try:\n      project = bigquery.get_bigquery_project(project_id)\n    except (utils.GcpApiError, errors.HttpError):\n      pass\n    job = None\n    try:\n      context = op.get_context()\n      job = bigquery.get_bigquery_job(context, op.get(flags.BQ_JOB_REGION),\n                                      op.get(flags.BQ_JOB_ID),\n                                      op.get(flags.BQ_SKIP_PERMISSION_CHECK))\n    except utils.GcpApiError as err:\n      if 'not found' in err.message.lower():\n        op.add_failed(\n            project,\n            reason=op.prep_msg(op.FAILURE_REASON,\n                               job_id=(op.get(flags.PROJECT_ID) + ':' +\n                                       op.get(flags.BQ_JOB_REGION) + '.' +\n                                       op.get(flags.BQ_JOB_ID))),\n            remediation=op.prep_msg(op.FAILURE_REMEDIATION),\n        )\n        self.add_child(BigQueryEnd())\n        return\n      elif 'access denied' in err.message.lower():\n        user_email = ''\n        try:\n          user_email = apis.get_user_email()\n        except (RuntimeError, exceptions.DefaultCredentialsError):\n          op.info(\n              message=\n              'Unable to fetch user email. Please make sure to authenticate properly'\n              ' before executing the investigation.')\n        except AttributeError as error:\n          if (('has no attribute' in str(error)) and\n              ('with_quota_project' in str(error))):\n            op.info('Running the investigation within the GCA context.')\n        warning = 'Insufficient permissions to access BigQuery job metadata.\\nGrant at least the'\n        warning += (' following permissions to ' + user_email + ':\\n')\n        warning += 'bigquery.jobs.get, bigquery.jobs.create, serviceusage.services.use and '\n        warning += 'serviceusage.services.list .\\nTerminating the investigation.'\n        op.add_skipped(\n            project,\n            reason=warning,\n        )\n        self.add_child(BigQueryEnd())\n        return\n    if job:\n      op.add_ok(job, reason=op.prep_msg(op.SUCCESS_REASON, job_id=job.id))\n      self.add_child(ConfirmBQJobIsDone())\n    else:\n      op.add_failed(\n          project,\n          reason=op.prep_msg(op.FAILURE_REASON,\n                             job_id=(op.get(flags.PROJECT_ID) + ':' +\n                                     op.get(flags.BQ_JOB_REGION) + '.' +\n                                     op.get(flags.BQ_JOB_ID))),\n          remediation=op.prep_msg(op.FAILURE_REMEDIATION),\n      )\n      self.add_child(BigQueryEnd())\n\n\nclass ConfirmBQJobIsDone(runbook.Gateway):\n  \"\"\"Gateway to confirm that the BigQuery job has finished execution.\n\n  This step checks the job's status. If the status is 'DONE', the runbook\n  continues to the next check. If the job is still 'RUNNING' or 'PENDING', the\n  runbook will stop and advise the user to wait for completion.\n  \"\"\"\n\n  template = 'generics::job_is_done'\n\n  def execute(self):\n    \"\"\"Confirming job is in a 'DONE' state...\"\"\"\n    context = op.get_context()\n    job = bigquery.get_bigquery_job(context, op.get(flags.BQ_JOB_REGION),\n                                    op.get(flags.BQ_JOB_ID),\n                                    op.get(flags.BQ_SKIP_PERMISSION_CHECK))\n    if not job:\n      op.add_skipped(op.get(flags.PROJECT_ID),\n                     reason='Cannot retrieve job details.')\n      return\n    if job.job_state == 'DONE':\n      op.add_ok(job, reason=op.prep_msg(op.SUCCESS_REASON, job_id=job.id))\n      self.add_child(CheckBQJobHasFailed())\n    else:\n      op.add_failed(\n          job,\n          reason=op.prep_msg(op.FAILURE_REASON,\n                             job_id=job.id,\n                             job_state=job.job_state),\n          remediation=op.prep_msg(op.FAILURE_REMEDIATION),\n      )\n      self.add_child(BigQueryEnd())\n\n\nclass CheckBQJobHasFailed(runbook.Gateway):\n  \"\"\"Gateway to verify that a completed job contains an error result.\n\n  This step inspects the job details to see if an error was reported. If an\n  error is present, the runbook proceeds to the final analysis step. If the job\n  completed successfully, the runbook stops and informs the user.\n  \"\"\"\n\n  template = 'generics::job_has_failed'\n\n  def execute(self):\n    \"\"\"Verifies if a completed job contains an error result.\"\"\"\n    context = op.get_context()\n    job = bigquery.get_bigquery_job(context, op.get(flags.BQ_JOB_REGION),\n                                    op.get(flags.BQ_JOB_ID),\n                                    op.get(flags.BQ_SKIP_PERMISSION_CHECK))\n    if not job:\n      op.add_skipped(op.get(flags.PROJECT_ID),\n                     reason='Cannot retrieve job details.')\n      return\n    if job.job_error_result:\n      op.add_ok(\n          job,\n          reason=op.prep_msg(\n              op.SUCCESS_REASON,\n              job_id=job.id,\n          ),\n      )\n      self.add_child(BigQueryErrorIdentification())\n    else:\n      skip_reason = op.prep_msg(op.FAILURE_REASON,\n                                job_id=job.id) + '\\n' + op.prep_msg(\n                                    op.FAILURE_REMEDIATION)\n      op.add_skipped(job, reason=skip_reason)\n      self.add_child(BigQueryEnd())\n\n\nclass BigQueryErrorIdentification(runbook.Step):\n  \"\"\"Analyzes the job's error message to find a known mitigation.\n\n  This is the final diagnostic step. It collects all error messages from the job\n  and compares them against a dictionary of known issues (the ERROR_MAP). If a\n  match is found, it provides a specific cause and remediation. Otherwise, it\n  reports the full error for manual inspection.\n  \"\"\"\n\n  template = 'generics::error_identification'\n\n  def execute(self):\n    \"\"\"Analyzing error message for known root causes and remediation steps.\"\"\"\n    context = op.get_context()\n    job = bigquery.get_bigquery_job(context, op.get(flags.BQ_JOB_REGION),\n                                    op.get(flags.BQ_JOB_ID),\n                                    op.get(flags.BQ_SKIP_PERMISSION_CHECK))\n    if not job or not job.job_error_result:\n      op.add_skipped(op.get(flags.PROJECT_ID),\n                     reason='Cannot retrieve job error details for analysis.')\n      return\n    unique_errors = set()\n    if job.job_error_result and job.job_error_result.get('message'):\n      unique_errors.add(job.job_error_result['message'])\n    for err in job.job_errors:\n      if err.get('message'):\n        if err.get('message') not in unique_errors:\n          unique_errors.add(err['message'])\n        else:\n          continue\n    if not unique_errors:\n      op.add_uncertain(\n          job,\n          reason='The job failed but returned no error message to analyze.')\n      return\n\n    has_matched = False\n    for error_text in unique_errors:\n      error_message_searchable = error_text.lower()\n      for error_substrings, details in constants.ERROR_MAP.items():\n        error_substrings_lower = [\n            error_substring.lower() for error_substring in error_substrings\n        ]\n        if all(error_substring_lower in error_message_searchable\n               for error_substring_lower in error_substrings_lower):\n          has_matched = True\n          op.add_failed(\n              job,\n              reason=op.prep_msg(\n                  op.FAILURE_REASON,\n                  error_message=error_text,\n                  cause=details['cause'],\n              ),\n              remediation=op.prep_msg(op.FAILURE_REMEDIATION,\n                                      remediation=details['remediation']),\n          )\n          break\n    if not has_matched:\n      uncertain_error_text = '\\n'.join(sorted(list(unique_errors)))\n      op.add_uncertain(\n          job,\n          reason=op.prep_msg(\n              op.UNCERTAIN_REASON,\n              job_id=job.id,\n              error_message=uncertain_error_text,\n          ),\n          remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION),\n      )\n\n\nclass BigQueryEnd(runbook.EndStep):\n  \"\"\"End of the runbook.\n\n  No more checks to perform.\n  \"\"\"\n\n  def execute(self):\n    \"\"\"End step.\"\"\"\n    op.info('No more checks to perform.')\n"
  },
  {
    "path": "gcpdiag/runbook/bigquery/failed_query_test.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test class for the bigquery/failed-query runbook.\"\"\"\n\nimport datetime\nimport unittest\nfrom unittest import mock\n\nfrom gcpdiag import config, models, utils\nfrom gcpdiag.queries import apis_stub\nfrom gcpdiag.runbook import bigquery, op, snapshot_test_base\nfrom gcpdiag.runbook.bigquery import failed_query, flags\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  \"\"\"Test cases for the BigQuery Failed Query runbook.\"\"\"\n\n  rule_pkg = bigquery\n  runbook_name = 'bigquery/failed-query'\n  runbook_id = 'Failed Query Runbook'\n  config.init({'auto': True, 'interface': 'cli'})\n  rule_parameters = [\n      # Test Case 1: A failed job with a known error (CSV).\n      {\n          'project_id': 'gcpdiag-bigquery1-aaaa',\n          'bigquery_job_id': 'test_csv_error',\n          'bigquery_job_region': 'us',\n          'bigquery_skip_permission_check': False,\n      },\n      # Test Case 2: A failed job with an unknown error.\n      {\n          'project_id': 'gcpdiag-bigquery1-aaaa',\n          'bigquery_job_id': 'test_unknown',\n          'bigquery_job_region': 'us',\n          'bigquery_skip_permission_check': False,\n      },\n      # Test Case 3: A job that completed successfully (no error).\n      {\n          'project_id': 'gcpdiag-bigquery1-aaaa',\n          'bigquery_job_id': 'test_success',\n          'bigquery_job_region': 'us',\n          'bigquery_skip_permission_check': False,\n      },\n      # Test Case 4: A job that is still running.\n      {\n          'project_id': 'gcpdiag-bigquery1-aaaa',\n          'bigquery_job_id': 'test_running',\n          'bigquery_job_region': 'us',\n          'bigquery_skip_permission_check': False,\n      },\n      # Test Case 5: A job ID that does not exist.\n      {\n          'project_id': 'gcpdiag-bigquery1-aaaa',\n          'bigquery_job_id': 'test_notfound',\n          'bigquery_job_region': 'us',\n          'bigquery_skip_permission_check': False,\n      },\n      # Test Case 6: An invalid region is provided.\n      {\n          'project_id': 'gcpdiag-bigquery1-aaaa',\n          'bigquery_job_id': 'any_id',\n          'bigquery_job_region': 'invalid-region',\n          'bigquery_skip_permission_check': False,\n      },\n  ]\n\n\nDUMMY_PROJECT_ID = 'gcpdiag-bigquery1-aaaa'\n\n\nclass MockMessage:\n  \"\"\"Mock messages for testing.\"\"\"\n\n  def get_msg(self, key, **kwargs):\n    del kwargs\n    return f'{key}'\n\n\nclass FailedQueryStepTestBase(unittest.TestCase):\n  \"\"\"Base class for failed query step tests.\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    self.enterContext(\n        mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub))\n    self.mock_get_user_email = self.enterContext(\n        mock.patch('gcpdiag.queries.apis.get_user_email'))\n    self.mock_is_enabled = self.enterContext(\n        mock.patch('gcpdiag.queries.apis.is_enabled'))\n    self.mock_is_enabled.return_value = True\n    self.mock_get_user_email.return_value = 'test@example.com'\n\n    self.mock_interface = mock.create_autospec(op.InteractionInterface,\n                                               instance=True)\n    self.mock_interface.rm = mock.Mock()\n    self.operator = op.Operator(self.mock_interface)\n    self.operator.run_id = 'test-run'\n    self.operator.messages = MockMessage()\n    self.operator.context = models.Context(project_id=DUMMY_PROJECT_ID)\n\n    self.params = {\n        flags.PROJECT_ID:\n            DUMMY_PROJECT_ID,\n        flags.BQ_JOB_REGION:\n            'us',\n        flags.BQ_JOB_ID:\n            'test_success',\n        flags.BQ_SKIP_PERMISSION_CHECK:\n            True,\n        'start_time':\n            datetime.datetime(2025, 10, 27, tzinfo=datetime.timezone.utc),\n        'end_time':\n            datetime.datetime(2025, 10, 28, tzinfo=datetime.timezone.utc),\n    }\n    self.operator.parameters = self.params\n\n\nclass BigQueryFailedQueryStartTest(FailedQueryStepTestBase):\n  \"\"\"Test BigQueryFailedQueryStart step.\"\"\"\n\n  def test_valid_parameters(self):\n    step = failed_query.BigQueryFailedQueryStart()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n      self.mock_interface.add_skipped.assert_not_called()\n      self.mock_is_enabled.assert_called_once_with(DUMMY_PROJECT_ID, 'bigquery')\n      assert op.get(flags.PROJECT_ID) == DUMMY_PROJECT_ID\n\n  @mock.patch('gcpdiag.queries.bigquery.get_bigquery_project')\n  def test_get_project_is_none(self, mock_get_project):\n    mock_get_project.return_value = None\n    step = failed_query.BigQueryFailedQueryStart()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n    self.assertIn(\n        'not found or you lack access permissions',\n        self.mock_interface.add_skipped.call_args[1]['reason'],\n    )\n\n  @mock.patch('gcpdiag.queries.bigquery.get_bigquery_project')\n  def test_get_project_api_error_not_found(self, mock_get_project):\n    mock_get_project.side_effect = utils.GcpApiError(\n        {'message': 'not found or deleted'})\n    step = failed_query.BigQueryFailedQueryStart()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n    self.assertIn(\n        'not found or deleted',\n        self.mock_interface.add_skipped.call_args[1]['reason'],\n    )\n\n  @mock.patch('gcpdiag.queries.bigquery.get_bigquery_project')\n  def test_get_project_api_error_permission_denied(self, mock_get_project):\n    mock_get_project.side_effect = utils.GcpApiError(\n        {'message': 'caller does not have required permission to use project'})\n    step = failed_query.BigQueryFailedQueryStart()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n    self.assertIn(\n        'You do not have permissions',\n        self.mock_interface.add_skipped.call_args[1]['reason'],\n    )\n\n  @mock.patch('gcpdiag.queries.bigquery.get_bigquery_project')\n  def test_get_project_api_error_rm_permission_denied(self, mock_get_project):\n    mock_get_project.side_effect = utils.GcpApiError(\n        {'message': 'resourcemanager.projects.get denied on resource'})\n    step = failed_query.BigQueryFailedQueryStart()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n      self.mock_interface.info.assert_called_with(mock.ANY, 'INFO')\n      self.mock_interface.add_skipped.assert_not_called()\n      self.mock_is_enabled.assert_called_once_with(DUMMY_PROJECT_ID, 'bigquery')\n      assert op.get(flags.PROJECT_ID) == DUMMY_PROJECT_ID\n\n  def test_invalid_project_id(self):\n    self.params[flags.PROJECT_ID] = ''\n    step = failed_query.BigQueryFailedQueryStart()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n    self.assertIn(\n        'Invalid project identifier',\n        self.mock_interface.add_skipped.call_args[1]['reason'],\n    )\n\n  def test_invalid_region(self):\n    self.params[flags.BQ_JOB_REGION] = 'invalid-region'\n    step = failed_query.BigQueryFailedQueryStart()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n    self.assertIn(\n        'Invalid job region',\n        self.mock_interface.add_skipped.call_args[1]['reason'],\n    )\n\n  def test_invalid_job_id(self):\n    self.params[flags.BQ_JOB_ID] = ''\n    step = failed_query.BigQueryFailedQueryStart()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n    self.assertIn(\n        'Invalid job identifier',\n        self.mock_interface.add_skipped.call_args[1]['reason'],\n    )\n\n  def test_bq_api_not_enabled(self):\n    self.mock_is_enabled.return_value = False\n    step = failed_query.BigQueryFailedQueryStart()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n    self.assertIn(\n        'BigQuery API is not enabled',\n        self.mock_interface.add_skipped.call_args[1]['reason'],\n    )\n\n  def test_get_user_email_attribute_error(self):\n    self.mock_get_user_email.side_effect = AttributeError(\n        \"'ResourceManager' object has no attribute 'with_quota_project'\")\n    step = failed_query.BigQueryFailedQueryStart()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.info.assert_any_call(\n        'Running the investigation within the GCA context.', 'INFO')\n\n  def test_is_enabled_api_error(self):\n    self.mock_is_enabled.side_effect = utils.GcpApiError(\n        {'message': 'access denied'})\n    step = failed_query.BigQueryFailedQueryStart()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.info.assert_called()\n\n  def test_get_user_email_runtime_error(self):\n    self.mock_get_user_email.side_effect = RuntimeError(\n        'Failed to get credentials')\n    step = failed_query.BigQueryFailedQueryStart()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.info.assert_any_call(\n        'Unable to fetch user email. Please make sure to authenticate properly'\n        ' before executing the investigation. Attempting to run the'\n        ' investigation.',\n        'INFO',\n    )\n\n\nclass BigQueryJobExistsTest(FailedQueryStepTestBase):\n  \"\"\"Test BigQueryJobExists step.\"\"\"\n\n  def test_job_exists(self):\n    self.params[flags.BQ_JOB_ID] = 'test_success'\n    step = failed_query.BigQueryJobExists()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n    assert any(\n        isinstance(c, failed_query.ConfirmBQJobIsDone) for c in step.steps)\n\n  def test_get_job_not_found_gcp_api_error(self):\n    self.params[flags.BQ_JOB_ID] = 'test_notfound_exception'\n    step = failed_query.BigQueryJobExists()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n  def test_job_not_found(self):\n    self.params[flags.BQ_JOB_ID] = 'test_notfound'\n    step = failed_query.BigQueryJobExists()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n  def test_get_project_error(self):\n    self.params[flags.BQ_JOB_ID] = 'test_success'\n    step = failed_query.BigQueryJobExists()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n\n  @mock.patch('gcpdiag.queries.bigquery.get_bigquery_project')\n  def test_get_project_gcp_api_error_pass(self, mock_get_project):\n    mock_get_project.side_effect = utils.GcpApiError('Failed to get project')\n    self.params[flags.BQ_JOB_ID] = 'test_notfound'\n    step = failed_query.BigQueryJobExists()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n  @mock.patch('gcpdiag.queries.bigquery.get_bigquery_job')\n  def test_get_job_raises_not_found_gcp_api_error(self, mock_get_job):\n    mock_get_job.side_effect = utils.GcpApiError('not found')\n    self.params[flags.BQ_JOB_ID] = 'job_raises_notfound'\n    step = failed_query.BigQueryJobExists()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n  @mock.patch('gcpdiag.queries.bigquery.get_bigquery_job')\n  def test_get_job_access_denied_runtime_error(self, mock_get_job):\n    mock_get_job.side_effect = utils.GcpApiError('access denied')\n    self.mock_get_user_email.side_effect = RuntimeError(\n        'Failed to get credentials')\n    self.params[flags.BQ_JOB_ID] = 'some_job'\n    step = failed_query.BigQueryJobExists()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  @mock.patch('gcpdiag.queries.bigquery.get_bigquery_job')\n  def test_get_job_access_denied_attribute_error(self, mock_get_job):\n    mock_get_job.side_effect = utils.GcpApiError('access denied')\n    self.mock_get_user_email.side_effect = AttributeError(\n        \"'ResourceManager' object has no attribute 'with_quota_project'\")\n    self.params[flags.BQ_JOB_ID] = 'some_job'\n    step = failed_query.BigQueryJobExists()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n\nclass ConfirmBQJobIsDoneTest(FailedQueryStepTestBase):\n  \"\"\"Test ConfirmBQJobIsDone step.\"\"\"\n\n  def test_job_is_done(self):\n    self.params[flags.BQ_JOB_ID] = 'test_success'\n    step = failed_query.ConfirmBQJobIsDone()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n\n  def test_job_is_not_done(self):\n    self.params[flags.BQ_JOB_ID] = 'test_running'\n    step = failed_query.ConfirmBQJobIsDone()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n  def test_job_is_none(self):\n    self.params[flags.BQ_JOB_ID] = 'test_notfound'\n    step = failed_query.ConfirmBQJobIsDone()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n\nclass CheckBQJobHasFailedTest(FailedQueryStepTestBase):\n  \"\"\"Test CheckBQJobHasFailed step.\"\"\"\n\n  def test_job_has_failed(self):\n    self.params[flags.BQ_JOB_ID] = 'test_with_error'\n    step = failed_query.CheckBQJobHasFailed()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n\n  def test_job_has_not_failed(self):\n    self.params[flags.BQ_JOB_ID] = 'test_success'\n    step = failed_query.CheckBQJobHasFailed()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_job_is_none(self):\n    self.params[flags.BQ_JOB_ID] = 'test_notfound'\n    step = failed_query.CheckBQJobHasFailed()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_known_error_in_job_errors(self):\n    self.params[flags.BQ_JOB_ID] = 'test_job_errors'\n    step = failed_query.BigQueryErrorIdentification()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n  def test_no_error_message_in_job(self):\n    self.params[flags.BQ_JOB_ID] = 'test_no_error_message_in_job'\n    step = failed_query.BigQueryErrorIdentification()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_uncertain.assert_called_once()\n\n\nclass BigQueryErrorIdentificationTest(FailedQueryStepTestBase):\n  \"\"\"Test BigQueryErrorIdentification step.\"\"\"\n\n  def test_known_error(self):\n    self.params[flags.BQ_JOB_ID] = 'test_csv_error'\n    step = failed_query.BigQueryErrorIdentification()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n  def test_unknown_error(self):\n    self.params[flags.BQ_JOB_ID] = 'test_unknown'\n    step = failed_query.BigQueryErrorIdentification()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_uncertain.assert_called_once()\n\n  def test_job_is_none(self):\n    self.params[flags.BQ_JOB_ID] = 'test_notfound'\n    step = failed_query.BigQueryErrorIdentification()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_job_error_result_is_none(self):\n    self.params[flags.BQ_JOB_ID] = 'test_success'\n    step = failed_query.BigQueryErrorIdentification()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_duplicate_error_messages(self):\n    self.params[flags.BQ_JOB_ID] = 'test_duplicate'\n    step = failed_query.BigQueryErrorIdentification()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_uncertain.assert_called_once()\n\n\nclass BigQueryEndTest(FailedQueryStepTestBase):\n  \"\"\"Test BigQueryEnd step.\"\"\"\n\n  def test_end_step(self):\n    step = failed_query.BigQueryEnd()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.info.assert_called_with('No more checks to perform.',\n                                                'INFO')\n\n  def test_no_error_message_found(self):\n    self.params[flags.BQ_JOB_ID] = 'test_no_error_found'\n    step = failed_query.BigQueryErrorIdentification()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n\nclass FailedQueryTest(unittest.TestCase):\n\n  def test_build_tree(self):\n    dq = failed_query.FailedQuery()\n    dq.build_tree()\n    self.assertIsInstance(dq.start, failed_query.BigQueryFailedQueryStart)\n    start_step_children = dq.start.steps\n    self.assertEqual(len(start_step_children), 2)\n    permission_check_step = start_step_children[0]\n    self.assertIsInstance(\n        permission_check_step,\n        failed_query.bigquery_gs.RunPermissionChecks,\n    )\n    permission_check_step_children = permission_check_step.steps\n    self.assertEqual(len(permission_check_step_children), 1)\n    job_exists_step = permission_check_step_children[0]\n    self.assertIsInstance(job_exists_step, failed_query.BigQueryJobExists)\n    end_step = start_step_children[1]\n    self.assertIsInstance(end_step, failed_query.BigQueryEnd)\n"
  },
  {
    "path": "gcpdiag/runbook/bigquery/flags.py",
    "content": "# Copyright 2025 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Flags for BigQuery runbooks.\"\"\"\n# pylint: disable=unused-wildcard-import, wildcard-import\nfrom gcpdiag.runbook.gcp.flags import *\nfrom gcpdiag.runbook.iam.flags import *\n\nBQ_JOB_ID = 'bigquery_job_id'\nBQ_JOB_REGION = 'bigquery_job_region'\nBQ_SKIP_PERMISSION_CHECK = 'bigquery_skip_permission_check'\nBQ_PERMISSION_RESULTS = 'bigquery_permission_results'\nBQ_JOB_ORGANIZATION_ID = 'bigquery_job_organization_id'\nBQ_RESERVATION_ADMIN_PROJECT_ID = 'bigquery_reservations_admin_project_id'\nPROJECT_ID = 'project_id'\n"
  },
  {
    "path": "gcpdiag/runbook/bigquery/generalized_steps.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Common steps for BigQuery runbooks.\"\"\"\n\nimport logging\nfrom typing import Dict, Set\n\nfrom google.auth import exceptions\n\nfrom gcpdiag import runbook, utils\nfrom gcpdiag.queries import apis\nfrom gcpdiag.queries import bigquery as bq_queries\nfrom gcpdiag.queries import crm\nfrom gcpdiag.queries.iam import (DEFAULT_SERVICE_ACCOUNT_DOMAINS,\n                                 SERVICE_AGENT_DOMAINS)\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.bigquery import flags\nfrom gcpdiag.runbook.bigquery.constants import RUNBOOK_PERMISSION_MAP\nfrom gcpdiag.utils import GcpApiError\n\n\nclass RunPermissionChecks(runbook.Gateway):\n  \"\"\"A comprehensive step to check all mandatory and optional permissions.\n\n  This step is intended to check mandatory and optional permissions for the\n  given BigQuery runbook type. It will terminate runbook execution if mandatory\n  permissions are missing, or add 'SKIP' notifications for missing optional\n  permissions. The step execution will skip altogether if the user is missing\n  the resourcemanager.projects.get permission. Finally, it populates the global\n  PERMISSION_RESULTS dictionary used throughout the runbook.\n  \"\"\"\n\n  template = 'permissions::mandatory'\n\n  def __init__(self, runbook_id='Failed Query Runbook'):\n    super().__init__()\n    self.runbook_id = runbook_id\n    self.principal_email = ''\n\n  def execute(self):\n    \"\"\"Verifying permissions.\"\"\"\n    if not self.runbook_id:\n      raise ValueError('runbook_id must be provided to RunPermissionChecks')\n    skip_permission_check = op.get(flags.BQ_SKIP_PERMISSION_CHECK)\n    project_placeholder = crm.Project(resource_data={\n        'name': 'projects/0000000000',\n        'projectId': op.get(flags.PROJECT_ID),\n    })\n    try:\n      self.principal_email = apis.get_user_email()\n    except (RuntimeError, AttributeError, exceptions.DefaultCredentialsError):\n      op.add_skipped(\n          project_placeholder,\n          reason=\n          'Permission check is being skipped because it\\'s not possible to successfully identify'\n          ' the user executing the investigation.')\n      return\n    project = project_placeholder\n    try:\n      project = bq_queries.get_bigquery_project(op.get(flags.PROJECT_ID))\n    except utils.GcpApiError as err:\n      if 'not found or deleted' in err.message:\n        op.add_skipped(\n            project_placeholder,\n            reason=(f'Project \"{project_placeholder.project_id}\" not found or'\n                    ' deleted. Provide a valid project identifier'),\n        )\n        self.add_child(bq_queries.BigQueryEnd())\n        return\n      elif ('Caller does not have required permission to use project'\n            in err.message):\n        op.add_skipped(\n            project_placeholder,\n            reason=(\n                'You do not have permissions to access project'\n                f' \"{project_placeholder.project_id}\".              \\nEnsure'\n                f' {self.principal_email} has the \"serviceusage.services.use\"'\n                ' and \"serviceusage.services.list\" permissions'),\n        )\n        self.add_child(bq_queries.BigQueryEnd())\n        return\n\n    if skip_permission_check:\n      necessary_permission_string = ''\n      for item in RUNBOOK_PERMISSION_MAP[self.runbook_id]['mandatory_project']:\n        necessary_permission_string += (item + ', ')\n      op.add_skipped(\n          project,\n          reason=\n          f'Permission check is being skipped because --skip_permission_check=True was used.\\\n           \\nRunbook execution success will depend on the user having the minimal required permissions:\\\n           \\n{necessary_permission_string[:-2]}.\\n')\n      return\n    organization_id = None\n    if self.runbook_id != 'Failed Query Runbook':\n      try:\n        organization = crm.get_organization(op.get(flags.PROJECT_ID))\n        if organization:\n          organization_id = organization.id\n      except GcpApiError as err:\n        if 'can\\'t access organization for project' in err.message:\n          op.info('You don\\'t have access to the Organization resource')\n\n    principal = self._get_principal()\n\n    project_policy = bq_queries.get_project_policy(op.get_context())\n    organization_policy = None\n    if self.runbook_id != 'Failed Query Runbook':\n      if organization_id:\n        try:\n          host_project_context = op.get_context().copy_with(\n              project_id=organization_id)\n          organization_policy = bq_queries.get_organization_policy(\n              host_project_context, organization_id)\n        except GcpApiError as err:\n          if 'doesn\\'t have access to' in err.message or 'denied on resource' in err.message:\n            op.info(\n                'User does not have access to the organization policy. Investigation'\n                ' completeness and accuracy might depend on the presence of'\n                ' organization level permissions.')\n          organization_policy = None\n    else:\n      organization_policy = None\n\n    reqs = RUNBOOK_PERMISSION_MAP.get(self.runbook_id)\n\n    if project_policy is None:\n      op.add_skipped(\n          resource=project,\n          reason=\n          f'The permission check step will not be carried out.\\nReason: {self.principal_email} '\n          'doesn\\'t have the resourcemanager.projects.get permission.\\nThis is not a blocking '\n          'condition - the investigation will continue.\\nHowever, successful execution and result '\n          'completeness depend on permissions provided.')\n    else:\n      if reqs:\n        mandatory_reqs = reqs.get('mandatory_project', set())\n        if mandatory_reqs:\n          mandatory_perms = bq_queries.check_permissions_for_principal(\n              project_policy, principal, mandatory_reqs)\n          missing_mandatory = bq_queries.get_missing_permissions(\n              mandatory_reqs, mandatory_perms)\n\n          if missing_mandatory:\n            op.add_failed(\n                resource=project,\n                reason=op.prep_msg(\n                    op.FAILURE_REASON,\n                    principal=self.principal_email,\n                    permissions=', '.join(sorted(missing_mandatory)),\n                ),\n                remediation=op.prep_msg(op.FAILURE_REMEDIATION,\n                                        principal=self.principal_email),\n            )\n\n        permission_results: Dict[str, bool] = {}\n\n        optional_project_reqs = reqs.get('optional_project', set())\n        if optional_project_reqs:\n          project_perms = bq_queries.check_permissions_for_principal(\n              project_policy, principal, optional_project_reqs)\n          for perm in optional_project_reqs:\n            permission_results[perm] = project_perms.get(perm, False)\n            if not project_perms.get(perm):\n              self._add_info(\n                  insight_name=f'Project-level analysis requiring: {perm}',\n                  missing_permissions={perm},\n                  principal=self.principal_email,\n              )\n\n        optional_org_reqs = reqs.get('optional_org', set())\n        if organization_id and optional_org_reqs:\n          if organization_policy is not None:\n            org_perms = bq_queries.check_permissions_for_principal(\n                organization_policy, principal, optional_org_reqs)\n            for perm in optional_org_reqs:\n              permission_results[perm] = org_perms.get(perm, False)\n              if not org_perms.get(perm):\n                self._add_info(\n                    insight_name=\n                    f'Organization-level analysis requiring: {perm}',\n                    missing_permissions={perm},\n                    principal=self.principal_email,\n                    is_org=True,\n                )\n          else:\n            op.info(message=(\n                f\"User {self.principal_email} can't access policies for\"\n                f' organization {organization_id}.'),)\n        op.put(flags.BQ_PERMISSION_RESULTS, permission_results)\n        op.add_ok(resource=project,\n                  reason='All permission checks are complete.')\n\n  def _get_principal(self):\n    principal_email_doman = self.principal_email.partition('@')[2]\n    if (principal_email_doman in SERVICE_AGENT_DOMAINS or\n        principal_email_doman.startswith('gcp-sa-') or\n        self.principal_email.endswith(DEFAULT_SERVICE_ACCOUNT_DOMAINS[1])):\n      principal_type = 'service_account'\n    else:\n      principal_type = 'user'\n\n    return principal_type + ':' + self.principal_email\n\n  def _add_info(\n      self,\n      insight_name: str,\n      missing_permissions: Set[str],\n      principal: str,\n      is_org: bool = False,\n  ):\n    \"\"\"Helper to generate a consistent 'skipped' message for optional permissions.\"\"\"\n\n    permissions = ', '.join(sorted(missing_permissions))\n    logging.debug('permissions = %s', permissions)\n    level = 'organization' if is_org else 'project'\n\n    message = f'A sub-analysis was skipped: {insight_name}.'\n    message += f'\\n\\tTo enable this analysis, grant the principal {principal}'\n    message += (f' the IAM permission at the {level} level')\n\n    op.info(message=message)\n"
  },
  {
    "path": "gcpdiag/runbook/bigquery/generalized_steps_test.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Tests for generalized steps in BigQuery runbooks.\"\"\"\n\nimport datetime\nimport unittest\nfrom unittest import mock\n\nfrom gcpdiag import models, utils\nfrom gcpdiag.queries import apis_stub, crm\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.bigquery import flags, generalized_steps\n\nDUMMY_PROJECT_ID = 'gcpdiag-bigquery1-aaaa'\n\n\nclass MockMessage:\n  \"\"\"Mock messages for testing.\"\"\"\n\n  def get_msg(self, key, **kwargs):\n    del kwargs\n    return f'{key}'\n\n\nclass RunPermissionChecksTest(unittest.TestCase):\n  \"\"\"Test cases for RunPermissionChecks.\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    self.enterContext(\n        mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub))\n    self.mock_get_user_email = self.enterContext(\n        mock.patch('gcpdiag.queries.apis.get_user_email'))\n    self.mock_get_bigquery_project = self.enterContext(\n        mock.patch('gcpdiag.queries.bigquery.get_bigquery_project'))\n    self.mock_crm_get_organization = self.enterContext(\n        mock.patch('gcpdiag.queries.crm.get_organization'))\n    self.mock_bq_get_project_policy = self.enterContext(\n        mock.patch('gcpdiag.queries.bigquery.get_project_policy'))\n    self.mock_bq_get_organization_policy = self.enterContext(\n        mock.patch('gcpdiag.queries.bigquery.get_organization_policy'))\n    self.mock_runbook_permission_map = self.enterContext(\n        mock.patch.dict(\n            generalized_steps.RUNBOOK_PERMISSION_MAP,\n            {\n                'Failed Query Runbook': {\n                    'mandatory_project': {'p1'},\n                    'optional_project': set(),\n                    'optional_org': set(),\n                },\n                'other-runbook': {\n                    'mandatory_project': {'p1'},\n                    'optional_project': {'p2'},\n                    'optional_org': {'o1'},\n                },\n            },\n        ))\n\n    self.mock_interface = mock.create_autospec(op.InteractionInterface,\n                                               instance=True)\n    self.mock_interface.rm = mock.Mock()\n    self.operator = op.Operator(self.mock_interface)\n    self.operator.run_id = 'test-run'\n    self.operator.messages = MockMessage()\n    self.operator.context = models.Context(project_id=DUMMY_PROJECT_ID)\n\n    self.params = {\n        flags.PROJECT_ID: DUMMY_PROJECT_ID,\n        flags.BQ_SKIP_PERMISSION_CHECK: False,\n        'start_time': datetime.datetime.now(),\n        'end_time': datetime.datetime.now(),\n    }\n    self.operator.parameters = self.params\n\n    self.mock_project = mock.Mock(spec=crm.Project)\n    self.mock_project.id = DUMMY_PROJECT_ID\n    self.mock_project.name = f'projects/{self.mock_project.id}'\n    self.mock_get_bigquery_project.return_value = self.mock_project\n    self.mock_get_user_email.return_value = 'test@example.com'\n    self.mock_project_policy = mock.MagicMock()\n    self.mock_project_policy.has_permission.return_value = True\n    self.mock_bq_get_project_policy.return_value = self.mock_project_policy\n    self.mock_org_policy = mock.MagicMock()\n    self.mock_org_policy.has_permission.return_value = True\n    self.mock_bq_get_organization_policy.return_value = self.mock_org_policy\n\n  def test_no_runbook_id_raises_value_error(self):\n    with self.assertRaises(ValueError):\n      step = generalized_steps.RunPermissionChecks(runbook_id=None)\n      with op.operator_context(self.operator):\n        self.operator.set_step(step)\n        step.execute()\n\n  def test_skip_permission_check_true(self):\n    self.params[flags.BQ_SKIP_PERMISSION_CHECK] = True\n    step = generalized_steps.RunPermissionChecks()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n    self.assertIn(\n        'Permission check is being skipped',\n        self.mock_interface.add_skipped.call_args[1]['reason'],\n    )\n\n  def test_get_user_email_fails(self):\n    self.mock_get_user_email.side_effect = RuntimeError('Can not get email')\n    step = generalized_steps.RunPermissionChecks()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n    self.assertIn(\n        \"it's not possible to successfully identify the user\",\n        self.mock_interface.add_skipped.call_args[1]['reason'],\n    )\n\n  def test_get_project_policy_is_none(self):\n    self.mock_bq_get_project_policy.return_value = None\n    step = generalized_steps.RunPermissionChecks()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n    self.assertIn(\n        \"doesn't have the resourcemanager.projects.get permission\",\n        self.mock_interface.add_skipped.call_args[1]['reason'],\n    )\n\n  def test_missing_mandatory_permissions(self):\n    self.mock_project_policy.has_permission.return_value = False\n    step = generalized_steps.RunPermissionChecks()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n  def test_missing_optional_project_permissions(self):\n    generalized_steps.RUNBOOK_PERMISSION_MAP['Failed Query Runbook'] = {\n        'mandatory_project': {'p1'},\n        'optional_project': {'p2'},\n        'optional_org': set(),\n    }\n    self.mock_project_policy.has_permission.side_effect = lambda p, perm: perm == 'p1'\n    step = generalized_steps.RunPermissionChecks()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.info.assert_called_with(\n        'A sub-analysis was skipped: Project-level analysis requiring:'\n        ' p2.\\n\\tTo enable this analysis, grant the principal'\n        ' test@example.com the IAM permission at the project level',\n        'INFO',\n    )\n    self.mock_interface.add_ok.assert_called_once()\n\n  def test_runbook_id_not_failed_query_missing_org_perm(self):\n    self.mock_crm_get_organization.return_value = mock.Mock(id='org1')\n    self.mock_org_policy.has_permission.return_value = False\n    step = generalized_steps.RunPermissionChecks(runbook_id='other-runbook')\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.info.assert_called_with(\n        'A sub-analysis was skipped: Organization-level analysis requiring:'\n        ' o1.\\n\\tTo enable this analysis, grant the principal'\n        ' test@example.com the IAM permission at the organization level',\n        'INFO',\n    )\n    self.mock_interface.add_ok.assert_called_once()\n\n  def test_get_org_fails(self):\n    self.mock_crm_get_organization.side_effect = utils.GcpApiError(\n        Exception(\"can't access organization for project\"))\n    step = generalized_steps.RunPermissionChecks(runbook_id='other-runbook')\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.info.assert_any_call(\n        \"You don't have access to the Organization resource\", 'INFO')\n    self.mock_interface.add_ok.assert_called_once()\n\n  def test_get_org_policy_fails(self):\n    self.mock_crm_get_organization.return_value = mock.Mock(id='org1')\n    self.mock_bq_get_organization_policy.side_effect = utils.GcpApiError(\n        Exception('denied on resource'))\n    step = generalized_steps.RunPermissionChecks(runbook_id='other-runbook')\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.info.assert_has_calls([\n        mock.call(\n            'User does not have access to the organization policy.'\n            ' Investigation completeness and accuracy might depend on the'\n            ' presence of organization level permissions.',\n            'INFO',\n        ),\n        mock.call(\n            \"User test@example.com can't access policies for organization\"\n            ' org1.',\n            'INFO',\n        ),\n    ])\n    self.mock_interface.add_ok.assert_called_once()\n\n  def test_service_account_principal_gcp_sa(self):\n    self.mock_get_user_email.return_value = (\n        'test@gcp-sa-project.iam.gserviceaccount.com')\n    step = generalized_steps.RunPermissionChecks()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_project_policy.has_permission.assert_called_with(\n        'service_account:test@gcp-sa-project.iam.gserviceaccount.com',\n        'p1',\n    )\n    self.mock_interface.add_ok.assert_called_once()\n\n  def test_service_account_principal_default(self):\n    self.mock_get_user_email.return_value = 'test@developer.gserviceaccount.com'\n    step = generalized_steps.RunPermissionChecks()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_project_policy.has_permission.assert_called_with(\n        'service_account:test@developer.gserviceaccount.com',\n        'p1',\n    )\n    self.mock_interface.add_ok.assert_called_once()\n"
  },
  {
    "path": "gcpdiag/runbook/bigquery/snapshots/failed_query.txt",
    "content": "bigquery_job_id=test_csv_error,bigquery_job_region=us,bigquery_skip_permission_check=False,project_i\nd=gcpdiag-bigquery1-aaaa\n\nbigquery/failed-query: Diagnoses issues with a failed BigQuery query job.\n\n  This runbook investigates why a specific BigQuery job failed by verifying the\n  job's status and analyzing the error message against a set of known issues to\n  provide targeted remediation steps.\n  \n[START]: Verifying input parameters and the BigQuery API status.\n[INFO]: Provided job input parameters have the correct format\n[INFO]: The BigQuery API is enabled.\n[GATEWAY]: Verifying permissions.\n\n   - gcpdiag-cloudsql1-aaaa                                               [FAIL]\n     [REASON]\n     Execution halted. The principal fake-user@google.com is missing the following mandatory IAM permission(s) required to run this runbook: bigquery.jobs.create, bigquery.jobs.get, serviceusage.services.list, serviceusage.services.use.\n\n     [REMEDIATION]\n     Grant the principal fake-user@google.com the missing permission(s) on the project to proceed.\n\n[INFO]: A sub-analysis was skipped: Project-level analysis requiring: bigquery.jobs.listAll.\n\tTo enable this analysis, grant the principal fake-user@google.com the IAM permission at the project level\n\n   - gcpdiag-cloudsql1-aaaa                                               [OK]\n     [REASON]\n     All permission checks are complete.\n[GATEWAY]: Verify that the BigQuery Job exists\n[INFO]: WARNING: Unable to run INFORMATION_SCHEMA view analysis due to missing permissions.            \nMake sure to grant fake-user@google.com \"bigquery.jobs.create\" and \"bigquery.jobs.listAll\".            \nContinuing the investigation with the BigQuery job metadata obtained from the API.\n\n   - gcpdiag-bigquery1-aaaa:us.test_csv_error                             [OK]\n     [REASON]\n     Job gcpdiag-bigquery1-aaaa:us.test_csv_error was successfully located.\n\n[GATEWAY]: Confirm the BigQuery job has finished execution\n\n   - gcpdiag-bigquery1-aaaa:us.test_csv_error                             [OK]\n     [REASON]\n     Job gcpdiag-bigquery1-aaaa:us.test_csv_error has finished execution.\n\n[GATEWAY]: Verify the BigQuery job failed\n\n   - gcpdiag-bigquery1-aaaa:us.test_csv_error                             [OK]\n     [REASON]\n     Job finished execution with an error. Continuing the investigation.\n\n[AUTOMATED STEP]: Analyze BigQuery job errors for known mitigations\n\n   - gcpdiag-bigquery1-aaaa:us.test_csv_error                             [FAIL]\n     [REASON]\n     Job failed with error: Not found: table gcpdiag-bigquery1-aaaa:dataset.table\n\n     Job failure cause:  The query references a table that does not exist or could not be located in the specified region and project.\n\n     [REMEDIATION]\n     Suggested mitigation:  Make sure the table exists in the specified dataset and the table identifier provided is correct.\n     After that confirm that the query is executed in the correct region (where the dataset is located).\n\n[END]: End step.\n[INFO]: No more checks to perform.\n\n\nbigquery_job_id=test_unknown,bigquery_job_region=us,bigquery_skip_permission_check=False,project_id=\ngcpdiag-bigquery1-aaaa\n\nbigquery/failed-query: Diagnoses issues with a failed BigQuery query job.\n\n  This runbook investigates why a specific BigQuery job failed by verifying the\n  job's status and analyzing the error message against a set of known issues to\n  provide targeted remediation steps.\n  \n[START]: Verifying input parameters and the BigQuery API status.\n[INFO]: Provided job input parameters have the correct format\n[INFO]: The BigQuery API is enabled.\n[GATEWAY]: Verifying permissions.\n\n   - gcpdiag-cloudsql1-aaaa                                               [FAIL]\n     [REASON]\n     Execution halted. The principal fake-user@google.com is missing the following mandatory IAM permission(s) required to run this runbook: bigquery.jobs.create, bigquery.jobs.get, serviceusage.services.list, serviceusage.services.use.\n\n     [REMEDIATION]\n     Grant the principal fake-user@google.com the missing permission(s) on the project to proceed.\n\n[INFO]: A sub-analysis was skipped: Project-level analysis requiring: bigquery.jobs.listAll.\n\tTo enable this analysis, grant the principal fake-user@google.com the IAM permission at the project level\n\n   - gcpdiag-cloudsql1-aaaa                                               [OK]\n     [REASON]\n     All permission checks are complete.\n[GATEWAY]: Verify that the BigQuery Job exists\n[INFO]: WARNING: Unable to run INFORMATION_SCHEMA view analysis due to missing permissions.            \nMake sure to grant fake-user@google.com \"bigquery.jobs.create\" and \"bigquery.jobs.listAll\".            \nContinuing the investigation with the BigQuery job metadata obtained from the API.\n\n   - gcpdiag-bigquery1-aaaa:us.test_unknown                               [OK]\n     [REASON]\n     Job gcpdiag-bigquery1-aaaa:us.test_unknown was successfully located.\n\n[GATEWAY]: Confirm the BigQuery job has finished execution\n\n   - gcpdiag-bigquery1-aaaa:us.test_unknown                               [OK]\n     [REASON]\n     Job gcpdiag-bigquery1-aaaa:us.test_unknown has finished execution.\n\n[GATEWAY]: Verify the BigQuery job failed\n\n   - gcpdiag-bigquery1-aaaa:us.test_unknown                               [OK]\n     [REASON]\n     Job finished execution with an error. Continuing the investigation.\n\n[AUTOMATED STEP]: Analyze BigQuery job errors for known mitigations\n\n   - gcpdiag-bigquery1-aaaa:us.test_unknown                               [UNCERTAIN]\n     [REASON]\n     Job gcpdiag-bigquery1-aaaa:us.test_unknown failed with an error that does not have a publicly documented mitigation and root cause.\n     Full error message(s) reported:\n     \"An internal error occurred.\"\n\n     [REMEDIATION]\n     Please retry the job to confirm whether the error is transient and can be mitigated through a retry with exponential backoff. See <https://cloud.google.com/bigquery/docs/error-messages>.\n     If the issue persists, contact Google Cloud Support at <https://cloud.google.com/support> and provide this report with the full BigQuery Job Id.\n\n[END]: End step.\n[INFO]: No more checks to perform.\n\n\nbigquery_job_id=test_success,bigquery_job_region=us,bigquery_skip_permission_check=False,project_id=\ngcpdiag-bigquery1-aaaa\n\nbigquery/failed-query: Diagnoses issues with a failed BigQuery query job.\n\n  This runbook investigates why a specific BigQuery job failed by verifying the\n  job's status and analyzing the error message against a set of known issues to\n  provide targeted remediation steps.\n  \n[START]: Verifying input parameters and the BigQuery API status.\n[INFO]: Provided job input parameters have the correct format\n[INFO]: The BigQuery API is enabled.\n[GATEWAY]: Verifying permissions.\n\n   - gcpdiag-cloudsql1-aaaa                                               [FAIL]\n     [REASON]\n     Execution halted. The principal fake-user@google.com is missing the following mandatory IAM permission(s) required to run this runbook: bigquery.jobs.create, bigquery.jobs.get, serviceusage.services.list, serviceusage.services.use.\n\n     [REMEDIATION]\n     Grant the principal fake-user@google.com the missing permission(s) on the project to proceed.\n\n[INFO]: A sub-analysis was skipped: Project-level analysis requiring: bigquery.jobs.listAll.\n\tTo enable this analysis, grant the principal fake-user@google.com the IAM permission at the project level\n\n   - gcpdiag-cloudsql1-aaaa                                               [OK]\n     [REASON]\n     All permission checks are complete.\n[GATEWAY]: Verify that the BigQuery Job exists\n[INFO]: WARNING: Unable to run INFORMATION_SCHEMA view analysis due to missing permissions.            \nMake sure to grant fake-user@google.com \"bigquery.jobs.create\" and \"bigquery.jobs.listAll\".            \nContinuing the investigation with the BigQuery job metadata obtained from the API.\n\n   - gcpdiag-bigquery1-aaaa:us.test_success                               [OK]\n     [REASON]\n     Job gcpdiag-bigquery1-aaaa:us.test_success was successfully located.\n\n[GATEWAY]: Confirm the BigQuery job has finished execution\n\n   - gcpdiag-bigquery1-aaaa:us.test_success                               [OK]\n     [REASON]\n     Job gcpdiag-bigquery1-aaaa:us.test_success has finished execution.\n\n[GATEWAY]: Verify the BigQuery job failed\n\n   - gcpdiag-bigquery1-aaaa:us.test_success                               [SKIP]\n     [REASON]\n     Job successfully finished execution without any errors.\n\n     Only failed BigQuery jobs can be analyzed for failure reasons. Restart the investigation and provide a job that failed during execution.\n\n[END]: End step.\n[INFO]: No more checks to perform.\n\n\nbigquery_job_id=test_running,bigquery_job_region=us,bigquery_skip_permission_check=False,project_id=\ngcpdiag-bigquery1-aaaa\n\nbigquery/failed-query: Diagnoses issues with a failed BigQuery query job.\n\n  This runbook investigates why a specific BigQuery job failed by verifying the\n  job's status and analyzing the error message against a set of known issues to\n  provide targeted remediation steps.\n  \n[START]: Verifying input parameters and the BigQuery API status.\n[INFO]: Provided job input parameters have the correct format\n[INFO]: The BigQuery API is enabled.\n[GATEWAY]: Verifying permissions.\n\n   - gcpdiag-cloudsql1-aaaa                                               [FAIL]\n     [REASON]\n     Execution halted. The principal fake-user@google.com is missing the following mandatory IAM permission(s) required to run this runbook: bigquery.jobs.create, bigquery.jobs.get, serviceusage.services.list, serviceusage.services.use.\n\n     [REMEDIATION]\n     Grant the principal fake-user@google.com the missing permission(s) on the project to proceed.\n\n[INFO]: A sub-analysis was skipped: Project-level analysis requiring: bigquery.jobs.listAll.\n\tTo enable this analysis, grant the principal fake-user@google.com the IAM permission at the project level\n\n   - gcpdiag-cloudsql1-aaaa                                               [OK]\n     [REASON]\n     All permission checks are complete.\n[GATEWAY]: Verify that the BigQuery Job exists\n[INFO]: WARNING: Unable to run INFORMATION_SCHEMA view analysis due to missing permissions.            \nMake sure to grant fake-user@google.com \"bigquery.jobs.create\" and \"bigquery.jobs.listAll\".            \nContinuing the investigation with the BigQuery job metadata obtained from the API.\n\n   - gcpdiag-bigquery1-aaaa:us.test_running                               [OK]\n     [REASON]\n     Job gcpdiag-bigquery1-aaaa:us.test_running was successfully located.\n\n[GATEWAY]: Confirm the BigQuery job has finished execution\n\n   - gcpdiag-bigquery1-aaaa:us.test_running                               [FAIL]\n     [REASON]\n     Job gcpdiag-bigquery1-aaaa:us.test_running is currently in the RUNNING state and has not yet completed.\n\n     [REMEDIATION]\n     Wait for the job to finish execution and restart the investigation.\n\n[END]: End step.\n[INFO]: No more checks to perform.\n\n\nbigquery_job_id=test_notfound,bigquery_job_region=us,bigquery_skip_permission_check=False,project_id\n=gcpdiag-bigquery1-aaaa\n\nbigquery/failed-query: Diagnoses issues with a failed BigQuery query job.\n\n  This runbook investigates why a specific BigQuery job failed by verifying the\n  job's status and analyzing the error message against a set of known issues to\n  provide targeted remediation steps.\n  \n[START]: Verifying input parameters and the BigQuery API status.\n[INFO]: Provided job input parameters have the correct format\n[INFO]: The BigQuery API is enabled.\n[GATEWAY]: Verifying permissions.\n\n   - gcpdiag-cloudsql1-aaaa                                               [FAIL]\n     [REASON]\n     Execution halted. The principal fake-user@google.com is missing the following mandatory IAM permission(s) required to run this runbook: bigquery.jobs.create, bigquery.jobs.get, serviceusage.services.list, serviceusage.services.use.\n\n     [REMEDIATION]\n     Grant the principal fake-user@google.com the missing permission(s) on the project to proceed.\n\n[INFO]: A sub-analysis was skipped: Project-level analysis requiring: bigquery.jobs.listAll.\n\tTo enable this analysis, grant the principal fake-user@google.com the IAM permission at the project level\n\n   - gcpdiag-cloudsql1-aaaa                                               [OK]\n     [REASON]\n     All permission checks are complete.\n[GATEWAY]: Verify that the BigQuery Job exists\n\n   - gcpdiag-cloudsql1-aaaa                                               [FAIL]\n     [REASON]\n     Job gcpdiag-bigquery1-aaaa:us.test_notfound does not exist.\n\n     [REMEDIATION]\n     Please check the corresponding job Region and make sure to provide the correct Job and Project identifiers.\n\n[END]: End step.\n[INFO]: No more checks to perform.\n\n\nbigquery_job_id=any_id,bigquery_job_region=invalid-\nregion,bigquery_skip_permission_check=False,project_id=gcpdiag-bigquery1-aaaa\n\nbigquery/failed-query: Diagnoses issues with a failed BigQuery query job.\n\n  This runbook investigates why a specific BigQuery job failed by verifying the\n  job's status and analyzing the error message against a set of known issues to\n  provide targeted remediation steps.\n  \n[START]: Verifying input parameters and the BigQuery API status.\n\n   - gcpdiag-bigquery1-aaaa                                               [SKIP]\n     [REASON]\n     Invalid job region provided. Please provide a valid BigQuery region.\n\n\n"
  },
  {
    "path": "gcpdiag/runbook/bigquery/templates/generics.jinja",
    "content": "{% block job_exists_step_name %}\nVerify that the BigQuery Job exists\n{% endblock job_exists_step_name %}\n{% block job_exists_success_reason %}\nJob {job_id} was successfully located.\n{% endblock job_exists_success_reason %}\n{% block job_exists_failure_reason %}\nJob {job_id} does not exist.\n{% endblock job_exists_failure_reason %}\n{% block job_exists_failure_remediation %}\nPlease check the corresponding job Region and make sure to provide the correct Job and Project identifiers.\n{% endblock job_exists_failure_remediation %}\n{% block job_is_done_step_name %}\nConfirm the BigQuery job has finished execution\n{% endblock job_is_done_step_name %}\n{% block job_is_done_success_reason %}\nJob {job_id} has finished execution.\n{% endblock job_is_done_success_reason %}\n{% block job_is_done_failure_reason %}\nJob {job_id} is currently in the {job_state} state and has not yet completed.\n{% endblock job_is_done_failure_reason %}\n{% block job_is_done_failure_remediation %}\nWait for the job to finish execution and restart the investigation.\n{% endblock job_is_done_failure_remediation %}\n{% block job_has_failed_step_name %}\nVerify the BigQuery job failed\n{% endblock job_has_failed_step_name %}\n{% block job_has_failed_success_reason %}\nJob finished execution with an error. Continuing the investigation.\n{% endblock job_has_failed_success_reason %}\n{% block job_has_failed_failure_reason %}\nJob successfully finished execution without any errors.\n{% endblock job_has_failed_failure_reason %}\n{% block job_has_failed_failure_remediation %}\nOnly failed BigQuery jobs can be analyzed for failure reasons. Restart the investigation and provide a job that failed during execution.\n{% endblock job_has_failed_failure_remediation %}\n{% block error_identification_step_name %}\nAnalyze BigQuery job errors for known mitigations\n{% endblock error_identification_step_name %}\n{% block error_identification_failure_reason %}\nJob failed with error: {error_message}\n\nJob failure cause: {cause}\n{% endblock error_identification_failure_reason %}\n{% block error_identification_failure_remediation %}\nSuggested mitigation: {remediation}\n{% endblock error_identification_failure_remediation %}\n{% block error_identification_uncertain_reason %}\nJob {job_id} failed with an error that does not have a publicly documented mitigation and root cause.\nFull error message(s) reported:\n\"{error_message}\"\n{% endblock error_identification_uncertain_reason %}\n{% block error_identification_uncertain_remediation %}\nPlease retry the job to confirm whether the error is transient and can be mitigated through a retry with exponential backoff. See <https://cloud.google.com/bigquery/docs/error-messages>.\nIf the issue persists, contact Google Cloud Support at <https://cloud.google.com/support> and provide this report with the full BigQuery Job Id.\n{% endblock error_identification_uncertain_remediation %}\n"
  },
  {
    "path": "gcpdiag/runbook/bigquery/templates/permissions.jinja",
    "content": "{% block mandatory_failure_reason %}\nExecution halted. The principal {principal} is missing the following mandatory IAM permission(s) required to run this runbook: {permissions}.\n{% endblock mandatory_failure_reason %}\n\n{% block mandatory_failure_remediation %}\nGrant the principal {principal} the missing permission(s) on the project to proceed.\n{% endblock mandatory_failure_remediation %}\n"
  },
  {
    "path": "gcpdiag/runbook/cloudrun/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/runbook/cloudrun/constants.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"TODO: String doc\"\"\"\n# pylint: disable=unused-wildcard-import, wildcard-import\nfrom gcpdiag.runbook.iam.constants import *\n"
  },
  {
    "path": "gcpdiag/runbook/cloudrun/flags.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Cloud Run runbook flags\"\"\"\n# pylint: disable=unused-wildcard-import, wildcard-import\nfrom gcpdiag.runbook.gcp.flags import *\n\nSERVICE_NAME = 'service_name'\nCLOUDRUN_SERVICE_NAME = 'cloudrun_service_name'\n"
  },
  {
    "path": "gcpdiag/runbook/cloudrun/generalized_steps.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Contains Reusable Steps for Cloud Run related Diagnostic Trees\"\"\"\n"
  },
  {
    "path": "gcpdiag/runbook/cloudrun/generalized_steps_test.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "gcpdiag/runbook/cloudrun/service_deployment.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Contains diagnostic tree for Cloud Run failing to deploy.\"\"\"\nimport re\nfrom datetime import datetime\n\nimport googleapiclient.errors\n\nfrom gcpdiag import runbook\nfrom gcpdiag.queries import cloudrun, crm\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.cloudrun import flags\n\n\nclass ServiceDeployment(runbook.DiagnosticTree):\n  \"\"\"Investigates the necessary GCP components searching for reasons for deployment errors.\n\n  This runbook will examine the following key areas:\n\n  1. Container and code Checks.\n    - Ensures the Container is in correct state to run in Cloud Run\n\n  Scope of Investigation:\n    - Note that this runbook does not provide troubleshooting steps for errors\n      caused by the code running in the container.\n  \"\"\"\n  parameters = {\n      flags.PROJECT_ID: {\n          'type': str,\n          'help': 'The Project ID of the resource under investigation',\n          'required': True\n      },\n      flags.REGION: {\n          'type': str,\n          'help': 'Region of the service.',\n          'required': True\n      },\n      flags.SERVICE_NAME: {\n          'type': str,\n          'help': 'Name of the Cloud Run service',\n          'deprecated': True,\n          'new_parameter': 'cloudrun_service_name'\n      },\n      flags.CLOUDRUN_SERVICE_NAME: {\n          'type': str,\n          'help': 'Name of the Cloud Run service',\n          'required': True\n      },\n      flags.START_TIME: {\n          'type': datetime,\n          'help': 'Start time of the issue',\n      },\n      flags.END_TIME: {\n          'type': datetime,\n          'help': 'End time of the issue',\n      },\n  }\n\n  def legacy_parameter_handler(self, parameters):\n    \"\"\"Handle legacy parameters for cloudrun/service-deployment runbook.\"\"\"\n    if flags.SERVICE_NAME in parameters:\n      parameters[flags.CLOUDRUN_SERVICE_NAME] = parameters[flags.SERVICE_NAME]\n\n  def build_tree(self):\n    \"\"\"Construct the diagnostic tree with appropriate steps.\"\"\"\n    start = ServiceDeploymentStart()\n    self.add_start(start)\n    self.add_step(start, ServiceDeploymentCodeStep())\n\n\nclass ServiceDeploymentStart(runbook.StartStep):\n  \"\"\"Prepare the parameters for cloudrun/service-deployment runbook.\n\n  Looks up the cloud run service making sure it exists.\n  \"\"\"\n\n  def execute(self):\n    \"\"\"Verify context and parameters required for deployment runbook checks.\"\"\"\n    project = crm.get_project(op.get(flags.PROJECT_ID))\n    try:\n      cloudrun.get_service(op.get(flags.PROJECT_ID), op.get(flags.REGION),\n                           op.get(flags.CLOUDRUN_SERVICE_NAME))\n    except googleapiclient.errors.HttpError:\n      op.add_skipped(\n          project,\n          reason=\n          f'Service {op.get(flags.CLOUDRUN_SERVICE_NAME)} does not exist in region '\n          f'{op.get(flags.REGION)} or project {op.get(flags.PROJECT_ID)}')\n\n\nclass ServiceDeploymentCodeStep(runbook.CompositeStep):\n  \"\"\"Checks for container and code issues.\"\"\"\n\n  def execute(self):\n    \"\"\"Checking for common container and code issues.\"\"\"\n    self.add_child(ContainerFailedToStartStep())\n    self.add_child(ImageWasNotFoundStep())\n    self.add_child(NoPermissionForImageStep())\n\n\nclass ContainerFailedToStartStep(runbook.Step):\n  \"\"\"Checks if the deployment error was caused by container failed to start error.\n\n  This step will check if the error is present and link to additional troubleshooting steps.\n  \"\"\"\n\n  template = 'service_deployment::starts_correctly'\n  message_re = re.compile(\n      r\"Revision '[\\w-]+' is not ready and cannot serve traffic. The user-provided container \"\n      r'failed to start and listen on the port defined provided by the PORT=(\\d+) environment '\n      r'variable.')\n\n  def execute(self):\n    \"\"\"Verify if there is an error that container failed to start.\"\"\"\n    service = cloudrun.get_service(op.get(flags.PROJECT_ID),\n                                   op.get(flags.REGION),\n                                   op.get(flags.CLOUDRUN_SERVICE_NAME))\n    match = self.message_re.match(service.conditions['RoutesReady'].message)\n    if match:\n      op.add_failed(service,\n                    reason=op.prep_msg(op.FAILURE_REASON, name=service.name),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n\n\nclass ImageWasNotFoundStep(runbook.Step):\n  \"\"\"Checks if if specified image exists.\n\n  This step will check if the error is present and link to additional troubleshooting steps.\n  \"\"\"\n\n  template = 'service_deployment::image_exists'\n  message_re = re.compile(\n      r\"Revision '[\\w-]+' is not ready and cannot serve traffic. Image '([^']+)' not found.\"\n  )\n\n  def execute(self):\n    \"\"\"Verify if specified image exists.\"\"\"\n    service = cloudrun.get_service(op.get(flags.PROJECT_ID),\n                                   op.get(flags.REGION),\n                                   op.get(flags.CLOUDRUN_SERVICE_NAME))\n    match = self.message_re.match(service.conditions['RoutesReady'].message)\n    if match:\n      op.add_failed(service,\n                    reason=op.prep_msg(op.FAILURE_REASON,\n                                       name=service.name,\n                                       image=match.group(1)),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION,\n                                            image=match.group(1)))\n\n\nclass NoPermissionForImageStep(runbook.Step):\n  \"\"\"Checks if Cloud Run service agent can fetch the image.\n\n  This step will check if the error is present and link to additional troubleshooting steps.\n  \"\"\"\n\n  template = 'service_deployment::has_permission_for_image'\n  message_re = re.compile(\n      r\"Revision '[\\w-]+' is not ready and cannot serve traffic. Google Cloud \"\n      r'Run Service Agent ([^ ]+) must have permission to read the image, '\n      r'([^ ]+).')\n\n  def execute(self):\n    \"\"\"Verify if Cloud Run service agent can fetch the image.\"\"\"\n    service = cloudrun.get_service(op.get(flags.PROJECT_ID),\n                                   op.get(flags.REGION),\n                                   op.get(flags.CLOUDRUN_SERVICE_NAME))\n    match = self.message_re.match(service.conditions['RoutesReady'].message)\n    if match:\n      op.add_failed(service,\n                    reason=op.prep_msg(op.FAILURE_REASON,\n                                       name=service.name,\n                                       sa=match.group(1),\n                                       image=match.group(2)),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION,\n                                            sa=match.group(1),\n                                            image=match.group(2)))\n"
  },
  {
    "path": "gcpdiag/runbook/cloudrun/service_deployment_test.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test class for cloudrun/Service_deployment\"\"\"\n\nimport datetime\nimport unittest\nfrom unittest import mock\n\nfrom gcpdiag import config\nfrom gcpdiag.queries import apis_stub\nfrom gcpdiag.runbook import cloudrun as cloudrun_rb\nfrom gcpdiag.runbook import op, snapshot_test_base\nfrom gcpdiag.runbook.cloudrun import flags, service_deployment\n\n\nclass TestInvalidContainer(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = cloudrun_rb\n  runbook_name = 'cloudrun/service-deployment'\n  config.init({'auto': True, 'interface': 'cli'})\n\n  rule_parameters = [\n      {\n          'project_id': 'gcpdiag-cloudrun2-aaaa',\n          'cloudrun_service_name': 'invalid-container',\n          'region': 'us-central1',\n      },\n      {\n          'project_id': 'gcpdiag-cloudrun2-aaaa',\n          'cloudrun_service_name': 'image-does-not-exist',\n          'region': 'us-central1',\n      },\n      {\n          'project_id': 'gcpdiag-cloudrun2-aaaa',\n          'cloudrun_service_name': 'no-image-permission',\n          'region': 'us-central1',\n      },\n  ]\n\n\nclass MockMessage:\n  \"\"\"Mock messages for testing.\"\"\"\n\n  def get_msg(self, key, **kwargs):\n    del kwargs\n    return f'{key}'\n\n\nclass ServiceDeploymentTest(unittest.TestCase):\n\n  def test_legacy_parameter_handler(self):\n    params = {flags.SERVICE_NAME: 'test-service'}\n    sd = service_deployment.ServiceDeployment()\n    sd.legacy_parameter_handler(params)\n    self.assertEqual(params[flags.CLOUDRUN_SERVICE_NAME], 'test-service')\n\n  def test_build_tree(self):\n    sd = service_deployment.ServiceDeployment()\n    sd.build_tree()\n    self.assertIsInstance(sd.start, service_deployment.ServiceDeploymentStart)\n    self.assertEqual(len(sd.start.steps), 1)\n    self.assertIsInstance(sd.start.steps[0],\n                          service_deployment.ServiceDeploymentCodeStep)\n\n\nclass StepTestBase(unittest.TestCase):\n  \"\"\"Base class for step tests.\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    self.enterContext(\n        mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub))\n\n    self.params = {\n        flags.PROJECT_ID: 'gcpdiag-cloudrun2-aaaa',\n        flags.REGION: 'us-central1',\n        flags.CLOUDRUN_SERVICE_NAME: 'invalid-container',\n        'start_time': datetime.datetime.now(),\n        'end_time': datetime.datetime.now(),\n    }\n\n    self.mock_interface = mock.create_autospec(op.InteractionInterface,\n                                               instance=True)\n    self.mock_interface.rm = mock.Mock()\n    self.operator = op.Operator(self.mock_interface)\n    self.operator.run_id = 'test-run'\n    self.operator.parameters = self.params\n    self.operator.messages = MockMessage()\n\n\nclass ServiceDeploymentStartTest(StepTestBase):\n\n  def test_execute_success(self):\n    self.params[flags.CLOUDRUN_SERVICE_NAME] = 'invalid-container'\n    step = service_deployment.ServiceDeploymentStart()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_not_called()\n\n  def test_execute_service_not_found(self):\n    self.params[flags.CLOUDRUN_SERVICE_NAME] = 'service-does-not-exist'\n    step = service_deployment.ServiceDeploymentStart()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n\nclass ServiceDeploymentCodeStepTest(StepTestBase):\n\n  def test_execute(self):\n    step = service_deployment.ServiceDeploymentCodeStep()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.assertEqual(len(step.steps), 3)\n    self.assertIsInstance(step.steps[0],\n                          service_deployment.ContainerFailedToStartStep)\n    self.assertIsInstance(step.steps[1],\n                          service_deployment.ImageWasNotFoundStep)\n    self.assertIsInstance(step.steps[2],\n                          service_deployment.NoPermissionForImageStep)\n\n\nclass ContainerFailedToStartStepTest(StepTestBase):\n\n  def test_container_failed_to_start(self):\n    self.params[flags.CLOUDRUN_SERVICE_NAME] = 'invalid-container'\n    step = service_deployment.ContainerFailedToStartStep()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n  def test_container_started(self):\n    self.params[flags.CLOUDRUN_SERVICE_NAME] = 'image-does-not-exist'\n    step = service_deployment.ContainerFailedToStartStep()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_not_called()\n\n\nclass ImageWasNotFoundStepTest(StepTestBase):\n\n  def test_image_not_found(self):\n    self.params[flags.CLOUDRUN_SERVICE_NAME] = 'image-does-not-exist'\n    step = service_deployment.ImageWasNotFoundStep()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n  def test_image_found(self):\n    self.params[flags.CLOUDRUN_SERVICE_NAME] = 'invalid-container'\n    step = service_deployment.ImageWasNotFoundStep()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_not_called()\n\n\nclass NoPermissionForImageStepTest(StepTestBase):\n\n  def test_no_permission(self):\n    self.params[flags.CLOUDRUN_SERVICE_NAME] = 'no-image-permission'\n    step = service_deployment.NoPermissionForImageStep()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n  def test_has_permission(self):\n    self.params[flags.CLOUDRUN_SERVICE_NAME] = 'invalid-container'\n    step = service_deployment.NoPermissionForImageStep()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_not_called()\n"
  },
  {
    "path": "gcpdiag/runbook/cloudrun/snapshots/service_deployment.txt",
    "content": "cloudrun_service_name=invalid-container,project_id=gcpdiag-cloudrun2-aaaa,region=us-central1\n\ncloudrun/service-deployment: Investigates the necessary GCP components searching for reasons for deployment errors.\n\n  This runbook will examine the following key areas:\n\n  1. Container and code Checks.\n    - Ensures the Container is in correct state to run in Cloud Run\n\n  Scope of Investigation:\n    - Note that this runbook does not provide troubleshooting steps for errors\n      caused by the code running in the container.\n  \n[START]: Verify context and parameters required for deployment runbook checks.\n[COMPOSITE STEP]: Checking for common container and code issues.\n[AUTOMATED STEP]: Verify if there is an error that container failed to start.\n\n   - gcpdiag-cloudrun2-aaaa/4ca2c930-7962-4fce-9470-987642372120          [FAIL]\n     [REASON]\n     Container failed to start in service invalid-container.\n\n     [REMEDIATION]\n     The container failed to start. Refer to <https://cloud.google.com/run/docs/troubleshooting#container-failed-to-start> for guidance.\n\n[AUTOMATED STEP]: Verify if specified image exists.\n[AUTOMATED STEP]: Verify if Cloud Run service agent can fetch the image.\n[END]: Finalize runbook investigations.\n\n\ncloudrun_service_name=image-does-not-exist,project_id=gcpdiag-cloudrun2-aaaa,region=us-central1\n\ncloudrun/service-deployment: Investigates the necessary GCP components searching for reasons for deployment errors.\n\n  This runbook will examine the following key areas:\n\n  1. Container and code Checks.\n    - Ensures the Container is in correct state to run in Cloud Run\n\n  Scope of Investigation:\n    - Note that this runbook does not provide troubleshooting steps for errors\n      caused by the code running in the container.\n  \n[START]: Verify context and parameters required for deployment runbook checks.\n[COMPOSITE STEP]: Checking for common container and code issues.\n[AUTOMATED STEP]: Verify if there is an error that container failed to start.\n[AUTOMATED STEP]: Verify if specified image exists.\n\n   - gcpdiag-cloudrun2-aaaa/37324495-a964-42ce-a080-2995f68c8f35          [FAIL]\n     [REASON]\n     Provided image us-central1-docker.pkg.dev/gcpdiag-cloudrun2-aaaa/cloudrun-repository/missing-image does not exist.\n\n     [REMEDIATION]\n     The provided image does not exist. Verify that the image name is correct. Refer to <https://cloud.google.com/run/docs/quickstarts> for guidance on specifying image names.\n\n[AUTOMATED STEP]: Verify if Cloud Run service agent can fetch the image.\n[END]: Finalize runbook investigations.\n\n\ncloudrun_service_name=no-image-permission,project_id=gcpdiag-cloudrun2-aaaa,region=us-central1\n\ncloudrun/service-deployment: Investigates the necessary GCP components searching for reasons for deployment errors.\n\n  This runbook will examine the following key areas:\n\n  1. Container and code Checks.\n    - Ensures the Container is in correct state to run in Cloud Run\n\n  Scope of Investigation:\n    - Note that this runbook does not provide troubleshooting steps for errors\n      caused by the code running in the container.\n  \n[START]: Verify context and parameters required for deployment runbook checks.\n[COMPOSITE STEP]: Checking for common container and code issues.\n[AUTOMATED STEP]: Verify if there is an error that container failed to start.\n[AUTOMATED STEP]: Verify if specified image exists.\n[AUTOMATED STEP]: Verify if Cloud Run service agent can fetch the image.\n\n   - gcpdiag-cloudrun2-aaaa/7af8a1c8-8758-48d4-9476-024c0f62c4d7          [FAIL]\n     [REASON]\n     Cloud Run Service agent service-123400010@serverless-robot-prod.iam.gserviceaccount.com does not have permissions to read image gcr.io/private-project/image..\n\n     [REMEDIATION]\n     Grant service-123400010@serverless-robot-prod.iam.gserviceaccount.com the roles/storage.objectViewer role if the image is stored in Container Registry or the roles/artifactregistry.reader role if in Artifact Registry. Note that the role must be granted in the project where the image is stored.\n\n[END]: Finalize runbook investigations.\n\n\n"
  },
  {
    "path": "gcpdiag/runbook/cloudrun/templates/service_deployment.jinja",
    "content": "{% block starts_correctly_failure_remediation %}\nThe container failed to start. Refer to <https://cloud.google.com/run/docs/troubleshooting#container-failed-to-start> for guidance.\n{% endblock %}\n\n{% block starts_correctly_failure_reason %}\nContainer failed to start in service {name}.\n{% endblock %}\n\n{% block image_exists_failure_remediation %}\nThe provided image does not exist. Verify that the image name is correct. Refer to <https://cloud.google.com/run/docs/quickstarts> for guidance on specifying image names.\n{% endblock %}\n\n{% block image_exists_failure_reason %}\nProvided image {image} does not exist.\n{% endblock %}\n\n{% block has_permission_for_image_failure_remediation %}\nGrant {sa} the roles/storage.objectViewer role if the image is stored in Container Registry or the roles/artifactregistry.reader role if in Artifact Registry. Note that the role must be granted in the project where the image is stored.\n{% endblock %}\n\n{% block has_permission_for_image_failure_reason %}\nCloud Run Service agent {sa} does not have permissions to read image {image}.\n{% endblock %}\n"
  },
  {
    "path": "gcpdiag/runbook/command.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"gcpdiag runbook command.\"\"\"\n\nimport argparse\nimport importlib\nimport logging\nimport os\nimport pkgutil\nimport re\nimport sys\nimport traceback\nfrom typing import List\n\nimport yaml\n\nfrom gcpdiag import config, hooks, models, runbook\nfrom gcpdiag.queries import apis, kubectl\nfrom gcpdiag.runbook.exceptions import DiagnosticTreeNotFound\nfrom gcpdiag.runbook.output import api_output, base_output, terminal_output\n\n\nclass ParseMappingArg(argparse.Action):\n  \"\"\"Takes a string argument and parse argument\"\"\"\n\n  def __call__(self, parser, namespace, values, option_string):\n    if values:\n      if values[0] == '{' and values[-1] == '}':\n        values = values[1:-1]\n      if not isinstance(values, list):\n        values = re.split('[ ,]', values)\n      parsed_dict = getattr(namespace, self.dest, models.Parameter())\n      for value in values:\n        if value:\n          try:\n            k, v = re.split('[=]', value)\n            parsed_dict[k] = v\n          except ValueError:\n            parser.error(\n                f'argument {option_string} expected key:value, received {value}'\n            )\n    setattr(namespace, self.dest, parsed_dict)\n\n\nclass ParseBundleSpec(argparse.Action):\n  \"\"\"Takes a string argument and parse argument\"\"\"\n\n  def __call__(self, parser, namespace, values, option_string):\n    if values:\n      bundle_list = getattr(namespace, self.dest, List)\n      for file_path in values:\n        try:\n          bundle_list += _load_bundles_spec(file_path.name)\n        except ValueError:\n          parser.error(\n              f'argument {option_string} expected key:value, received {file_path}'\n          )\n    setattr(namespace, self.dest, bundle_list)\n\n\ndef expand_and_validate_path(arg) -> str:\n  # Expand the path and check if it exists\n  expanded_path = os.path.abspath(os.path.expanduser(arg))\n  home_path = os.path.expanduser('~')\n  # Cloud Shell only allows report downloads from paths in user's home\n  # Check if the home directory is already present in the path if not\n  if bool(os.getenv('CLOUD_SHELL')):\n    # If default path append $HOME\n    if arg == config.get('report_dir'):\n      return os.path.join(home_path, expanded_path)\n    # User supplied path\n    elif home_path not in expanded_path:\n      raise argparse.ArgumentTypeError(\n          f'The {arg} folder must be located in your home directory')\n  if not expanded_path or not os.path.exists(expanded_path):\n    raise argparse.ArgumentTypeError(\n        f\"Directory '{arg}' does not exist. Create one mkdir -p {arg} and try again\"\n    )\n  return expanded_path\n\n\ndef validate_args(args):\n  if args.runbook is None and not args.bundle_spec:\n    print(\n        'Error: Provide a runbook id  or \"--bundle-spec=YAML_FILE_PATH\" must be provided.'\n    )\n\n\ndef _init_runbook_args_parser():\n  parser = argparse.ArgumentParser(\n      description='Run diagnostics in GCP projects.', prog='gcpdiag runbook')\n\n  parser.add_argument(\n      '--auth-adc',\n      help='Authenticate using Application Default Credentials (default)',\n      action='store_true')\n\n  parser.add_argument(\n      '--auth-key',\n      help='Authenticate using a service account private key file',\n      metavar='FILE')\n\n  parser.add_argument(\n      '--billing-project',\n      metavar='P',\n      help='Project used for billing/quota of API calls done by gcpdiag '\n      '(default is the inspected project, requires '\n      '\\'serviceusage.services.use\\' permission)')\n\n  parser.add_argument('-v',\n                      '--verbose',\n                      action='count',\n                      default=config.get('verbose'),\n                      help='Increase log verbosity')\n\n  parser.add_argument('--logging-ratelimit-requests',\n                      metavar='R',\n                      type=int,\n                      help=('Configure rate limit for logging queries (default:'\n                            f\" {config.get('logging_ratelimit_requests')})\"))\n\n  parser.add_argument(\n      '--logging-ratelimit-period-seconds',\n      metavar='S',\n      type=int,\n      help=('Configure rate limit period for logging queries (default:'\n            f\" {config.get('logging_ratelimit_period_seconds')} seconds)\"))\n\n  parser.add_argument('--logging-page-size',\n                      metavar='P',\n                      type=int,\n                      help=('Configure page size for logging queries (default:'\n                            f\" {config.get('logging_page_size')})\"))\n\n  parser.add_argument(\n      '--logging-fetch-max-entries',\n      metavar='E',\n      type=int,\n      help=('Configure max entries to fetch by logging queries (default:'\n            f\" {config.get('logging_fetch_max_entries')})\"))\n\n  parser.add_argument(\n      '--logging-fetch-max-time-seconds',\n      metavar='S',\n      type=int,\n      help=('Configure timeout for logging queries (default:'\n            f\" {config.get('logging_fetch_max_time_seconds')} seconds)\"))\n\n  parser.add_argument(\n      'runbook',\n      help=\n      'Runbook to execute in the format product/runbook-name or product/name',\n      nargs='?')\n\n  parser.add_argument('--bundle-spec',\n                      nargs='*',\n                      default=[],\n                      action=ParseBundleSpec,\n                      type=argparse.FileType('r'),\n                      help='Path to YAML file containing bundle specifications')\n  parser.add_argument(\n      '-p',\n      '--parameter',\n      action=ParseMappingArg,\n      nargs=1,\n      default=models.Parameter(),\n      dest='parameter',\n      metavar='key:value',\n      help=\n      ('One or more resource parameters as key-value pair(s) to scope inspection '\n       '(e.g.: -p source_ip=xx:xx:xx:xx -p user:user@company.com)'))\n\n  parser.add_argument(\n      '-a',\n      '--auto',\n      help=('Execute runbook autonomously. Use this to skip human tasks. '\n            'Incomplete tasks are added to the report.'),\n      action='store_true')\n\n  parser.add_argument(\n      '--report-dir',\n      metavar='FILE',\n      default=config.get('report_dir'),\n      type=expand_and_validate_path,\n      help=\n      ('Specifies the full path to the directory where reports '\n       'will be saved (default: /tmp/gcpdiag or in Cloud Shell $HOME/tmp/gcpdiag)'\n      ))\n  parser.add_argument('--interface',\n                      metavar='FORMATTER',\n                      default=config.get('interface'),\n                      type=str,\n                      help='What interface as one of [cli, api] (default: cli)')\n\n  parser.add_argument('--universe-domain',\n                      type=str,\n                      default=config.get('universe_domain'),\n                      help='Domain name of APIs')\n\n  parser.add_argument('--reason',\n                      type=str,\n                      default=config.get('reason'),\n                      help='The reason for running gcpdiag')\n\n  return parser\n\n\ndef _load_runbook_rules(package: str):\n  \"\"\"Recursively import all submodules under a package, including subpackages.\"\"\"\n  pkg = importlib.import_module(package)\n  for _, name, is_pkg in pkgutil.walk_packages(\n      pkg.__path__,  # type: ignore\n      pkg.__name__ + '.'):\n    try:\n      if name.endswith(('_test', 'output')):\n        continue\n      importlib.import_module(name)\n    except ImportError as err:\n      print(f\"ERROR: can't import module: {err}\", file=sys.stderr)\n      continue\n    if is_pkg:\n      _load_runbook_rules(name)\n\n\ndef _load_bundles_spec(file_path):\n  \"\"\"Load step config from file\n\n  Example:\n    - bundle:\n      parameter:\n        project_id: \"project_detail\"\n        zone: \"location\"\n        ...\n      steps:\n        - gcpdiag.runbook.gce.generalized_steps.VmLifecycleState\n        - gcpdiag.runbook.gce.ops_agent.VmHasAServiceAccount\n        - gcpdiag.runbook.gce.ssh.PosixUserHasValidSshKeyCheck\n    - bundle:\n      ...\n  \"\"\"\n  if not file_path:\n    print('ERROR: no bundle spec file path provided', file=sys.stderr)\n    sys.exit(1)\n  # Read the file contents\n  if os.path.exists(file_path):\n    with open(file_path, encoding='utf-8') as f:\n      content = f.read()\n  else:\n    print(f'ERROR: Bundle Specification file: {file_path} does not exist!',\n          file=sys.stderr)\n    sys.exit(1)\n\n  # Parse the content of the file as YAML\n  if content:\n    try:\n      parsed_content = yaml.safe_load(content)\n      return parsed_content\n    except yaml.YAMLError as err:\n      print(f\"ERROR: can't parse content of the file as YAML: {err}\",\n            file=sys.stderr)\n      sys.exit(1)\n\n\ndef _initialize_output(interface):\n  if interface == runbook.constants.CLI:\n    kwargs = {\n        'log_info_for_progress_only': (config.get('verbose') == 0),\n    }\n    return terminal_output.TerminalOutput(**kwargs)\n  elif interface == runbook.constants.API:\n    return api_output.ApiOutput()\n  else:\n    return base_output.BaseOutput()\n\n\ndef _init_config(args):\n  if args.interface == runbook.constants.CLI:\n    config.init(vars(args), terminal_output.is_cloud_shell())\n  elif args.interface == runbook.constants.API:\n    config.init(vars(args))\n\n\ndef setup_logging(logging_handler):\n  logger = logging.getLogger()\n  # Make sure we are only using our own handler\n  logger.handlers = []\n  logger.addHandler(logging_handler)\n  if config.get('verbose') >= 2:\n    logger.setLevel(logging.DEBUG)\n  else:\n    logger.setLevel(logging.INFO)\n  # Disable logging from python-api-client, unless verbose is turned on\n  if config.get('verbose') == 0:\n    gac_http_logger = logging.getLogger('googleapiclient.http')\n    gac_http_logger.setLevel(logging.ERROR)\n\n\ndef run_and_get_report(argv=None, credentials: str = None) -> dict:\n  # Initialize argument parser\n\n  parser = _init_runbook_args_parser()\n  args = parser.parse_args(argv[1:])\n\n  if credentials:\n    apis.set_credentials(credentials)\n\n  # Allow to change defaults using a hook function.\n  hooks.set_runbook_args_hook(args)\n\n  # Initialize configuration\n  _init_config(args)\n\n  # Initialize Repository, and Tests.\n\n  dt_engine = runbook.DiagnosticEngine()\n  _load_runbook_rules(runbook.__name__)\n\n  # ^^^ If you add gcpdiag/runbook/[NEW-PRODUCT] directory, update also\n  # pyinstaller/hook-gcpdiag.runbook.py and bin/precommit-required-files\n\n  # Initialize proper output formatter\n  output_ = _initialize_output(args.interface)\n  dt_engine.interface.output = output_\n  # Logging setup.\n  logging_handler = output_.get_logging_handler()\n  setup_logging(logging_handler)\n\n  # Run the runbook or step connections.\n  if args.runbook:\n    runbook_name = args.runbook.lower()\n    if args.interface == runbook.constants.CLI:\n      output_.display_header()\n      output_.display_banner()\n    tree = dt_engine.load_tree(runbook_name)\n    if callable(tree):\n      dt_engine.add_task((tree(), args.parameter))\n  elif args.bundle_spec:\n    for bundle in args.bundle_spec:\n      bundle = dt_engine.load_steps(parameter=bundle['parameter'],\n                                    steps_to_run=bundle['steps'])\n      dt_engine.add_task((bundle, bundle.parameter))\n\n  dt_engine.run()\n\n  # Only collected for internal googler users\n  report = {}\n  report['version'] = config.VERSION\n  report['reports'] = dt_engine.interface.rm.generate_reports()\n\n  for r in dt_engine.interface.rm.reports.values():\n    metrics = dt_engine.interface.rm.generate_report_metrics(report=r)\n    hooks.post_runbook_hook(metrics)\n\n  if args.interface == runbook.constants.CLI:\n    output_.display_footer(dt_engine.interface.rm)\n    # Clean up the kubeconfig file generated for gcpdiag\n    kubectl.clean_up()\n  # return success if we get to this point and the report..\n  return report\n\n\ndef run(argv) -> None:\n  # Enable Caching\n  try:\n    report = run_and_get_report(argv)\n  except (DiagnosticTreeNotFound, AttributeError, ValueError, KeyError) as e:\n    logging.error(e)\n    logging.debug('%s', ''.join(traceback.format_tb(e.__traceback__)))\n  else:\n    if report:\n      sys.exit(0)\n"
  },
  {
    "path": "gcpdiag/runbook/command_test.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test code in command.py.\"\"\"\nimport argparse\nimport os\nimport sys\nimport unittest\nfrom unittest import mock\n\nfrom gcpdiag import config, models, runbook\nfrom gcpdiag.queries import apis_stub\nfrom gcpdiag.runbook import command\nfrom gcpdiag.runbook.exceptions import DiagnosticTreeNotFound\nfrom gcpdiag.runbook.output import api_output, base_output\n\nMUST_HAVE_MODULES = {'gce'}\n\nsample_bundle = \"\"\"\n- bundle:\n  parameter:\n    project_id: \"test-project\"\n    zone: \"us-central1-a\"\n    name: \"test-vm\"\n  steps:\n    - gcpdiag.runbook.gce.generalized_steps.VmLifecycleState\n    - gcpdiag.runbook.gce.ssh.PosixUserHasValidSshKeyCheck\n- bundle:\n  parameter:\n    project_id: \"test-project\"\n    zone: \"us-central1-a\"\n    name: \"test-vm\"\n  steps:\n    - gcpdiag.runbook.gce.ops_agent.VmHasAServiceAccount\n\"\"\"\n\n\nclass Test(unittest.TestCase):\n  \"\"\"Unit tests for command.\"\"\"\n\n  # pylint: disable=protected-access\n  def test_init_args_parser(self):\n    with mock.patch('os.path.exists', return_value=True):\n      parser = command._init_runbook_args_parser()\n      args = parser.parse_args(['product/runbook'])\n      assert args.runbook == 'product/runbook'\n      assert args.billing_project is None\n      assert args.auth_adc is False\n      assert args.auth_key is None\n      assert args.verbose == 0\n      assert args.logging_ratelimit_requests is None\n      assert args.logging_ratelimit_period_seconds is None\n      assert args.logging_page_size is None\n      assert args.logging_fetch_max_entries is None\n      assert args.logging_fetch_max_time_seconds is None\n      assert args.auto is False\n      assert args.report_dir == '/tmp'\n      assert args.interface == runbook.constants.CLI\n\n  # pylint: disable=protected-access\n  def test_provided_init_args_parser(self):\n    with mock.patch('os.path.exists', return_value=True):\n      parser = command._init_runbook_args_parser()\n      args = parser.parse_args(['product/runbook', '--auto'])\n      assert args.auto is True\n      args = parser.parse_args(['product/runbook', '--parameter', 'test=test'])\n      assert args.parameter == {'test': 'test'}\n\n      args = parser.parse_args(['product/runbook', '--report-dir', '~'])\n      assert args.report_dir == os.path.expanduser('~')\n\n    # Test user provided path in cloud shell in present in home.\n    with mock.patch('os.getenv', return_value='true'):\n      args = parser.parse_args(['product/runbook', '--report-dir', '/tmp'])\n      assert args.report_dir == os.path.join(os.path.expanduser('~'),\n                                             config.get('report_dir'))\n\n    with mock.patch('os.getenv', return_value='false'):\n      args = parser.parse_args(['product/runbook'])\n      assert args.report_dir == os.path.join(os.path.expanduser('~'),\n                                             config.get('report_dir'))\n\n    args = parser.parse_args(['product/runbook', '--report-dir', '/tmp'])\n    assert args.report_dir == '/tmp'\n\n    args = parser.parse_args(['product/runbook', '--report-dir', '~'])\n    assert args.report_dir == os.path.expanduser('~')\n\n    args = parser.parse_args(['product/runbook', '--report-dir', '/tmp'])\n    assert args.report_dir == '/tmp'\n\n    args = parser.parse_args(['product/runbook', '--report-dir', '.'])\n    assert args.report_dir == os.getcwd()\n\n  # pylint: disable=protected-access\n  def test_load_repository_rules(self):\n    repo = runbook.DiagnosticEngine()\n    command._load_runbook_rules(repo.__module__)\n    assert len(runbook.RunbookRegistry) > 0\n    modules = {r(None).product for r in runbook.RunbookRegistry.values()}\n    assert MUST_HAVE_MODULES.issubset(modules)\n\n  @mock.patch('builtins.print')\n  def test_no_file_path_provided(self, mock_print):\n    with self.assertRaises(SystemExit) as e:\n      command._load_bundles_spec('')\n\n    self.assertEqual(1, e.exception.code)  # sys.exit(1)\n    mock_print.assert_called_once_with(\n        'ERROR: no bundle spec file path provided', file=sys.stderr)\n\n  @mock.patch('os.path.exists', return_value=False)\n  @mock.patch('builtins.print')\n  def test_file_does_not_exist(self, mock_print, mock_exists):\n    with self.assertRaises(SystemExit):\n      command._load_bundles_spec('non_existent_file.yaml')\n\n    mock_print.assert_called_once_with(\n        'ERROR: Bundle Specification file: non_existent_file.yaml does not'\n        ' exist!',\n        file=sys.stderr,\n    )\n    assert mock_exists.called\n\n  @mock.patch('os.path.exists', return_value=True)\n  @mock.patch('builtins.open',\n              new_callable=mock.mock_open,\n              read_data=sample_bundle)\n  def test_valid_yaml_parsing(self, mock_file, mock_exists):\n    result = command._load_bundles_spec('valid_file.yaml')\n    self.assertIsNotNone(result)\n    self.assertEqual(result[0]['parameter']['project_id'], 'test-project')\n    mock_exists.assert_called_with('valid_file.yaml')\n    assert mock_file.called\n\n  @mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)\n  @mock.patch('gcpdiag.queries.apis.get_user_email',\n              return_value='test@example.com')\n  def test_run_and_get_report(self, mock_get_user_email):\n    del mock_get_user_email\n    argv = [\n        'gcpdiag runbook', 'gce/ssh', '-p',\n        'project_id=gcpdiag-gce-faultyssh-runbook', '-p', 'zone=europe-west2-a',\n        '-p', 'name=faulty-linux-ssh', '--interface', 'api', '--auto'\n    ]\n    command.run_and_get_report(argv)\n\n  def test_run_and_get_report_invalid_runbook(self):\n    argv = [\n        'gcpdiag runbook',\n        'gce/unheaklhy',\n        '-p',\n        'project_id=gcpdiag-gce1-aaaa',\n    ]\n    with self.assertRaises(DiagnosticTreeNotFound):\n      command.run_and_get_report(argv)\n\n  def test_parse_mapping_arg_with_braces(self):\n    parser = mock.Mock()\n    namespace = argparse.Namespace()\n    namespace.parameter = models.Parameter()\n    action = command.ParseMappingArg(option_strings=['-p'], dest='parameter')\n    values = '{key=value,key2=value2}'\n    action(parser, namespace, values, '-p')\n    self.assertEqual(namespace.parameter['key'], 'value')\n    self.assertEqual(namespace.parameter['key2'], 'value2')\n\n  def test_parse_mapping_arg_value_error(self):\n    \"\"\"Ensures ParseMappingArg calls parser.error on invalid key=value format.\"\"\"\n    parser = mock.Mock()\n    namespace = mock.Mock()\n    action = command.ParseMappingArg(option_strings=['-p'], dest='parameter')\n    invalid_value = ['invalid_format']  # Missing '='\n    action(parser, namespace, invalid_value, '-p')\n    parser.error.assert_called_once()\n    self.assertIn('expected key:value', parser.error.call_args[0][0])\n\n  @mock.patch('os.path.exists', return_value=True)\n  @mock.patch('os.path.abspath', side_effect=lambda x: x)\n  @mock.patch('os.getenv')\n  def test_expand_path_cloud_shell_outside_home(self, mock_getenv,\n                                                unused_mock_abspath,\n                                                unused_mock_exists):\n    \"\"\"Ensures an error is raised in Cloud Shell if the path is not in HOME.\"\"\"\n    mock_getenv.side_effect = lambda k: 'true' if k == 'CLOUD_SHELL' else None\n    user_supplied_path = '/etc/invalid'\n    with self.assertRaises(argparse.ArgumentTypeError) as cm:\n      command.expand_and_validate_path(user_supplied_path)\n    self.assertIn('must be located in your home directory', str(cm.exception))\n\n  @mock.patch('builtins.print')\n  def test_validate_args_missing_inputs(self, mock_print):\n    \"\"\"Ensures validate_args prints an error when no runbook or bundle is provided.\"\"\"\n    args = mock.Mock()\n    args.runbook = None\n    args.bundle_spec = []\n    command.validate_args(args)\n    mock_print.assert_called_once_with(\n        'Error: Provide a runbook id  or \"--bundle-spec=YAML_FILE_PATH\" must be'\n        ' provided.')\n\n  @mock.patch('importlib.import_module')\n  @mock.patch('pkgutil.walk_packages')\n  def test_load_runbook_rules_import_error(self, mock_walk, mock_import):\n    \"\"\"Ensures _load_runbook_rules continues execution on ImportError.\"\"\"\n    mock_pkg = mock.Mock()\n    mock_pkg.__path__ = ['/path']\n    mock_pkg.__name__ = 'pkg'\n    mock_import.side_effect = [mock_pkg, ImportError('Mock error')]\n    mock_walk.return_value = [(None, 'pkg.bad_module', False)]\n    command._load_runbook_rules('pkg')\n    self.assertTrue(mock_import.called)\n\n  @mock.patch('os.path.exists', return_value=True)\n  @mock.patch('builtins.open',\n              new_callable=mock.mock_open,\n              read_data='!!invalid_yaml')\n  def test_load_bundles_spec_yaml_error(self, unused_mock_file,\n                                        unused_mock_exists):\n    \"\"\"Ensures _load_bundles_spec exits on invalid YAML content.\"\"\"\n    with self.assertRaises(SystemExit):\n      command._load_bundles_spec('invalid.yaml')\n\n  @mock.patch('os.path.exists', return_value=True)\n  @mock.patch('os.path.abspath', side_effect=lambda x: x)\n  @mock.patch('os.getenv', return_value='true')  # Simulates CLOUD_SHELL=true\n  def test_expand_path_cloud_shell_valid(self, unused_mock_getenv,\n                                         unused_mock_abspath,\n                                         unused_mock_exists):\n    \"\"\"Ensures paths are correctly joined with HOME in Cloud Shell.\"\"\"\n    home = os.path.expanduser('~')\n    report_dir = config.get('report_dir')\n    result = command.expand_and_validate_path(report_dir)\n    self.assertEqual(result, os.path.join(home, report_dir))\n\n  def test_initialize_output_api(self):\n    \"\"\"Ensures ApiOutput is initialized when interface is 'api'.\"\"\"\n    output = command._initialize_output(runbook.constants.API)\n    self.assertIsInstance(output, api_output.ApiOutput)\n\n  def test_initialize_output_base(self):\n    \"\"\"Ensures BaseOutput is used for unknown interfaces.\"\"\"\n    output = command._initialize_output('unknown')\n    self.assertIsInstance(output, base_output.BaseOutput)\n\n  @mock.patch('gcpdiag.runbook.DiagnosticEngine')\n  @mock.patch('gcpdiag.runbook.command._initialize_output')\n  def test_run_and_get_report_bundle_spec(self, mock_init_output,\n                                          mock_engine_cls):\n    \"\"\"Exercises the bundle_spec logic path in run_and_get_report.\"\"\"\n    mock_init_output.return_value = mock.Mock()\n    mock_engine = mock_engine_cls.return_value\n    mock_engine.interface.rm.generate_reports.return_value = {}\n    mock_run = mock_engine.run\n    mock_load_steps = mock_engine.load_steps\n    mock_bundle = mock.Mock()\n    mock_bundle.parameter = {'p': 'v'}\n    mock_load_steps.return_value = mock_bundle\n    with mock.patch('builtins.open', mock.mock_open(read_data='')):\n      with mock.patch('gcpdiag.runbook.command._load_bundles_spec',\n                      return_value=[{\n                          'parameter': {\n                              'p': 'v'\n                          },\n                          'steps': ['s']\n                      }]):\n        argv = ['gcpdiag runbook', '--bundle-spec', 'test.yaml']\n        command.run_and_get_report(argv)\n        self.assertTrue(mock_run.called)\n        self.assertTrue(mock_load_steps.called)\n\n  @mock.patch('gcpdiag.runbook.command.run_and_get_report')\n  @mock.patch('logging.error')\n  def test_run_logs_exceptions(self, mock_log, mock_run_report):\n    \"\"\"Ensures exceptions in run_and_get_report are logged.\"\"\"\n    mock_run_report.side_effect = DiagnosticTreeNotFound('Test Error')\n    command.run(['gcpdiag runbook'])\n    mock_log.assert_called_once()\n\n  @mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)\n  @mock.patch('gcpdiag.queries.apis.get_user_email',\n              return_value='test@example.com')\n  @mock.patch('gcpdiag.runbook.command._initialize_output')\n  @mock.patch('gcpdiag.queries.apis.set_credentials')\n  @mock.patch('gcpdiag.hooks.post_runbook_hook')\n  @mock.patch('gcpdiag.queries.kubectl.clean_up')\n  def test_run_and_get_report_full_flow(self, mock_kube, mock_hook, mock_creds,\n                                        mock_out, mock_get_user_email):\n    \"\"\"\n    Tests the full flow of run_and_get_report with API stubs.\n\n    Args:\n      mock_kube: Mock of gcpdiag.queries.kubectl.clean_up.\n      mock_hook: Mock of gcpdiag.hooks.post_runbook_hook.\n      mock_creds: Mock of gcpdiag.queries.apis.set_credentials.\n      mock_out: Mock of gcpdiag.runbook.command._initialize_output.\n      mock_get_user_email: Mock of gcpdiag.queries.apis.get_user_email.\n    \"\"\"\n    del mock_get_user_email\n    mock_output_obj = mock.Mock()\n    mock_out.return_value = mock_output_obj\n    mock_handler = mock.Mock()\n    mock_handler.level = 0\n    mock_output_obj.get_logging_handler.return_value = mock_handler\n    argv = [\n        'gcpdiag runbook', 'gce/ssh', '-p',\n        'project_id=gcpdiag-gce-faultyssh-runbook', '-p', 'zone=europe-west2-a',\n        '-p', 'name=faulty-linux-ssh', '--interface', 'cli', '--auto'\n    ]\n    report = command.run_and_get_report(argv, credentials='creds')\n    mock_creds.assert_called_once_with('creds')\n    mock_output_obj.display_header.assert_called_once()\n    self.assertIn('version', report)\n    self.assertTrue(mock_hook.called)\n    mock_output_obj.display_footer.assert_called_once()\n    mock_kube.assert_called_once()\n"
  },
  {
    "path": "gcpdiag/runbook/constants.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Common constants used within runbook\"\"\"\nfrom enum import Enum\n\n# Messaging Scenarios\nFAILURE_REASON = 'failure_reason'\nFAILURE_REMEDIATION = 'failure_remediation'\nSUCCESS_REASON = 'success_reason'\nUNCERTAIN_REASON = 'uncertain_reason'\nUNCERTAIN_REMEDIATION = 'uncertain_remediation'\nSKIPPED_REASON = 'skipped_reason'\nSTEP_NAME = 'step_name'\n\nFAILURE_REASON_ALT1 = f'{FAILURE_REASON}_a1'\nFAILURE_REMEDIATION_ALT1 = f'{FAILURE_REMEDIATION}_a1'\nSUCCESS_REASON_ALT1 = f'{SUCCESS_REASON}_a1'\nUNCERTAIN_REASON_ALT1 = f'{UNCERTAIN_REASON}_a1'\nUNCERTAIN_REMEDIATION_ALT1 = f'{UNCERTAIN_REMEDIATION}_a1'\nSKIPPED_REASON_ALT1 = f'{SKIPPED_REASON}_a1'\nSTEP_NAME_ALT1 = f'{STEP_NAME}_a1'\n\nFAILURE_REASON_ALT2 = f'{FAILURE_REASON}_a2'\nFAILURE_REMEDIATION_ALT2 = f'{FAILURE_REMEDIATION}_a2'\nSUCCESS_REASON_ALT2 = f'{SUCCESS_REASON}_a2'\nUNCERTAIN_REASON_ALT2 = f'{UNCERTAIN_REASON}_a2'\nUNCERTAIN_REMEDIATION_ALT2 = f'{UNCERTAIN_REMEDIATION}_a2'\nSKIPPED_REASON_ALT2 = f'{SKIPPED_REASON}_a2'\nSTEP_NAME_ALT2 = f'{STEP_NAME}_a2'\n\nFAILURE_REASON_ALT3 = f'{FAILURE_REASON}_a3'\nFAILURE_REMEDIATION_ALT3 = f'{FAILURE_REMEDIATION}_a3'\nSUCCESS_REASON_ALT3 = f'{SUCCESS_REASON}_a3'\nUNCERTAIN_REASON_ALT3 = f'{UNCERTAIN_REASON}_a3'\nUNCERTAIN_REMEDIATION_ALT3 = f'{UNCERTAIN_REMEDIATION}_a3'\nSKIPPED_REASON_ALT3 = f'{SKIPPED_REASON}_a3'\nSTEP_NAME_ALT3 = f'{STEP_NAME}_a3'\n\nINSTRUCTIONS_MESSAGE = 'instructions_message'\nSTEP_LABEL = 'label'\nINSTRUCTIONS_CHOICE_OPTIONS = 'instructions_choice_options'\nDEFAULT_INSTRUCTIONS_OPTIONS = {\n    'y': 'Yes, Issue is not happening',\n    'n': 'No, Issue is occuring',\n    'u': 'Unsure'\n}\nRCA = 'rca'\n\nStepConstants = {\n    STEP_LABEL:\n        'The Label used in DT images',\n    STEP_NAME:\n        'The introduction message displayed to user describing what the step does.',\n    FAILURE_REASON:\n        'The failure reason for this step.',\n    FAILURE_REMEDIATION:\n        'How to solve the main failure scenario.',\n    SUCCESS_REASON:\n        'The reason why this step is consider to be a success.',\n    UNCERTAIN_REASON:\n        'The reason why this step is uncertain of the outcome.',\n    UNCERTAIN_REMEDIATION:\n        'How to address uncertainty in the outcome.',\n    SKIPPED_REASON:\n        'The reason why this step was skipped.',\n    FAILURE_REASON_ALT1:\n        'The failure reason for Scenario 1 step.',\n    FAILURE_REMEDIATION_ALT1:\n        'How to solve the main failure scenario in Scenario 1.',\n    SUCCESS_REASON_ALT1:\n        'The reason why Scenario 1 is considered a success.',\n    UNCERTAIN_REASON_ALT1:\n        'The reason for uncertainty in the Scenario 1 outcome.',\n    UNCERTAIN_REMEDIATION_ALT1:\n        'How to address uncertainty in the Scenario 1 outcome.',\n    SKIPPED_REASON_ALT1:\n        'The reason why Scenario 1 was skipped.',\n    FAILURE_REASON_ALT2:\n        'The failure reason for Scenario 2 step.',\n    FAILURE_REMEDIATION_ALT2:\n        'How to solve the main failure scenario in Scenario 2.',\n    SUCCESS_REASON_ALT2:\n        'The reason why Scenario 2 is considered a success.',\n    UNCERTAIN_REASON_ALT2:\n        'The reason for uncertainty in the Scenario 2 outcome.',\n    UNCERTAIN_REMEDIATION_ALT2:\n        'How to address uncertainty in the Scenario 2 outcome.',\n    SKIPPED_REASON_ALT2:\n        'The reason why Scenario 2 was skipped.',\n    FAILURE_REASON_ALT3:\n        'The failure reason for Scenario 3 step.',\n    FAILURE_REMEDIATION_ALT3:\n        'How to solve the main failure scenario in Scenario 3.',\n    SUCCESS_REASON_ALT3:\n        'The reason why Scenario 3 is considered a success.',\n    UNCERTAIN_REASON_ALT3:\n        'The reason for uncertainty in the Scenario 3 outcome.',\n    UNCERTAIN_REMEDIATION_ALT3:\n        'How to address uncertainty in the Scenario 3 outcome.',\n    SKIPPED_REASON_ALT3:\n        'The reason why Scenario 3 was skipped.',\n    INSTRUCTIONS_MESSAGE:\n        'Instruction on a manual task.',\n    INSTRUCTIONS_CHOICE_OPTIONS:\n        'Options available in this manual task.',\n    RCA:\n        'Root cause analysis.'\n}\n\n\nclass StepType(Enum):\n  \"\"\"Types of Diagnostic Tree Steps\"\"\"\n  START = 'START'\n  END = 'END'\n  AUTOMATED = 'AUTOMATED STEP'\n  COMPOSITE = 'COMPOSITE STEP'\n  MANUAL = 'MANUAL STEP'\n  PARAMETER = 'PARAMETER PREP'\n  GATEWAY = 'GATEWAY'\n\n  @classmethod\n  def to_list(cls):\n    return list(map(lambda c: c.value, cls))\n\n\nEND_MESSAGE = (\n    'Before reaching out to Google Cloud Support: \\n'\n    '1. Thoroughly investigate '\n    'the issue with the most appropriate team within your organization. Many issues can be '\n    'resolved internally and fall within the scope of your operational responsibilities:'\n    'https://cloud.google.com/architecture/framework/security'\n    '/shared-responsibility-shared-fate\\n\\n'\n    '2. If your internal investigation suggests that the issue is related to the '\n    'Google Cloud Platform and requires intervention by Google engineers, please '\n    'contact Google Cloud Support for further assistance.\\n\\n'\n    '3. View our Google Cloud Service Health Dashboard to know what issues are already know'\n    'and currently being resolved:\\n'\n    'https://cloud.google.com/support/docs/customer-care-procedures#view_known_issues\\n\\n'\n    '4. If you still need further assistance contact customer care:\\n'\n    'https://cloud.google.com/support/docs/customer-care-procedures#contact_customer_care\\n\\n'\n    'Recommended Action: When submitting a support ticket, please include the generated '\n    'report to facilitate a quicker resolution by the Google Cloud support team.'\n    'For more information on how to get the best out of our support services visit:\\n'\n    'https://cloud.google.com/support/docs/customer-care-procedures\\n\\n')\n\nBOOL_VALUES = {\n    'y': True,\n    'yes': True,\n    'true': True,\n    '1': True,\n    'n': False,\n    'no': False,\n    'false': False,\n    '0': False,\n    'none': False\n}\n\nRETEST = 'RETEST'\nYES = 'YES'\nNO = 'NO'\nUNCERTAIN = 'UNCERTAIN'\nCONTINUE = 'CONTINUE'\nCONFIRMATION = 'CONFIRMATION'\nSTOP = 'STOP'\nSTEP = StepType.to_list()\nDECISION = 'DECISION'\nHUMAN_TASK = 'Choose the next action'\nHUMAN_TASK_OPTIONS = {\n    'r': 'Retest current step',\n    'c': 'Continue',\n    's': 'Stop Runbook'\n}\nCONFIRMATION_OPTIONS = {'Yes/Y/y': 'Yes', 'No/N/n': 'No'}\nGENERATE_REPORT = 'GENERATE_REPORT'\nSTATUS_ORDER = ['failed', 'uncertain', 'ok', 'skipped']\nFINALIZE_INVESTIGATION = 'FINALIZE_INVESTIGATION'\n\nCLI = 'cli'\nAPI = 'api'\n\n# Restricted attributes that should never be used in observations and tep naming\nRESTRICTED_ATTRIBUTES = {\n    'uuid', 'steps', 'observations', 'product', 'doc_file_name', 'type',\n    'template'\n}\n"
  },
  {
    "path": "gcpdiag/runbook/crm/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/runbook/crm/constants.py",
    "content": ""
  },
  {
    "path": "gcpdiag/runbook/crm/flags.py",
    "content": ""
  },
  {
    "path": "gcpdiag/runbook/crm/generalized_steps.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Contains Generatlized Steps for Cloud Resource Manager\"\"\"\n\nfrom gcpdiag import runbook\nfrom gcpdiag.queries import crm, orgpolicy\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.iam import constants, flags\n\n\nclass OrgPolicyCheck(runbook.Step):\n  \"\"\"Checks if an organization policy is effective in a project\n\n  Supports only boolean constraints and not list constraints.\n  \"\"\"\n  template = 'orgpolicy::default'\n  constraint: str\n  is_enforced: bool = True\n  project = None\n\n  def execute(self):\n    \"\"\"Checking Organization policy\"\"\"\n    project_id = self.project or op.get(flags.PROJECT_ID)\n    project = crm.get_project(project_id)\n    constraint = orgpolicy.get_effective_org_policy(project_id, self.constraint)\n\n    expected_state = 'enforced' if self.is_enforced else 'not enforced'\n    actual_state = 'enforced' if constraint.is_enforced() else 'not enforced'\n\n    # Is effected to be enforced and is enforce or vice versa\n    if (self.is_enforced and\n        constraint.is_enforced()) or (not self.is_enforced and\n                                      not constraint.is_enforced()):\n      op.add_ok(resource=project,\n                reason=op.prep_msg(op.SUCCESS_REASON,\n                                   constraint=self.constraint,\n                                   expected_state=expected_state,\n                                   actual_state=actual_state))\n\n    # Is effected to be enforced and is enforce or vice versa\n    elif (self.is_enforced and\n          not constraint.is_enforced()) or (not self.is_enforced and\n                                            constraint.is_enforced()):\n      op.add_failed(resource=project,\n                    reason=op.prep_msg(constants.FAILURE_REASON,\n                                       constraint=self.constraint,\n                                       expected_state=expected_state,\n                                       actual_state=actual_state),\n                    remediation=op.prep_msg(constants.FAILURE_REMEDIATION))\n"
  },
  {
    "path": "gcpdiag/runbook/crm/generalized_steps_test.py",
    "content": "# Copyright 2026 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test class for crm.generalized_steps.\"\"\"\n\nimport datetime\nimport unittest\nfrom unittest import mock\n\nfrom gcpdiag.queries import apis_stub\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.crm import generalized_steps\nfrom gcpdiag.runbook.iam import flags\n\nDUMMY_PROJECT_ID = 'gcpdiag-fw-policy-aaaa'\n\n\nclass MockMessage:\n  \"\"\"Mock messages for testing.\"\"\"\n\n  def get_msg(self, key, **kwargs):\n    del kwargs\n    return f'{key}'\n\n\nclass GeneralizedStepsTestBase(unittest.TestCase):\n  \"\"\"Base class for CRM generalized step tests.\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    # 1. Patch get_api with the stub.\n    self.enterContext(\n        mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub))\n    # 2. Create a mock interface to capture outputs\n    self.mock_interface = mock.create_autospec(op.InteractionInterface,\n                                               instance=True)\n    self.mock_interface.rm = mock.Mock()\n    # 3. Instantiate a real Operator\n    self.operator = op.Operator(self.mock_interface)\n    self.operator.run_id = 'test-run'\n    self.operator.messages = MockMessage()\n    # 4. Define standard parameters.\n    self.params = {\n        flags.PROJECT_ID:\n            DUMMY_PROJECT_ID,\n        'start_time':\n            datetime.datetime(2025, 1, 1, tzinfo=datetime.timezone.utc),\n        'end_time':\n            datetime.datetime(2025, 1, 2, tzinfo=datetime.timezone.utc),\n    }\n    self.operator.parameters = self.params\n\n\nclass OrgPolicyCheckTest(GeneralizedStepsTestBase):\n  \"\"\"Test OrgPolicyCheck step.\"\"\"\n\n  def test_org_policy_enforced_and_expected_enforced(self):\n    step = generalized_steps.OrgPolicyCheck(\n        constraint='constraints/compute.disableSerialPortAccess',\n        is_enforced=True,\n    )\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n    self.mock_interface.add_failed.assert_not_called()\n\n  def test_org_policy_not_enforced_and_expected_enforced(self):\n    step = generalized_steps.OrgPolicyCheck(\n        constraint='constraints/iam.disableCrossProjectServiceAccountUsage',\n        is_enforced=True,\n    )\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_not_called()\n    self.mock_interface.add_failed.assert_called_once()\n\n  def test_org_policy_not_enforced_and_expected_not_enforced(self):\n    step = generalized_steps.OrgPolicyCheck(\n        constraint='constraints/iam.disableCrossProjectServiceAccountUsage',\n        is_enforced=False,\n    )\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n    self.mock_interface.add_failed.assert_not_called()\n\n  def test_org_policy_enforced_and_expected_not_enforced(self):\n    step = generalized_steps.OrgPolicyCheck(\n        constraint='constraints/compute.disableSerialPortAccess',\n        is_enforced=False,\n    )\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_not_called()\n    self.mock_interface.add_failed.assert_called_once()\n\n  def test_org_policy_enforced_with_project_parameter(self):\n    step = generalized_steps.OrgPolicyCheck(\n        constraint='constraints/compute.disableSerialPortAccess',\n        is_enforced=True,\n        project=DUMMY_PROJECT_ID,\n    )\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n    self.mock_interface.add_failed.assert_not_called()\n\n\nif __name__ == '__main__':\n  unittest.main()\n"
  },
  {
    "path": "gcpdiag/runbook/crm/templates/orgpolicy.jinja",
    "content": "{% block default_success_reason %}\nThe {constraint} is {actual_state}.\n{% endblock default_success_reason %}\n\n{% block default_failure_reason %}\nThe organization policy {constraint} is set to {actual_state}, but it should be {expected_state}.\n{% endblock default_failure_reason %}\n\n{% block default_failure_remediation %}\nFollow Guide [1] to correct the constraint. Search for the constraint in [2] to better understand\nhow it works.\n\nNote: Consider checking with organization administrators for the recommended approach.\n\n[1] <https://cloud.google.com/resource-manager/docs/organization-policy/using-constraints>\n[2] <https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints>\n{% endblock default_failure_remediation %}\n\n{% block serial_logging_enforced_success_reason %}\nThe {constraint} is {enforced_or_not}.\n{% endblock serial_logging_enforced_success_reason %}\n\n{% block serial_logging_enforced_failure_reason %}\nThe organization policy {constraint} is {enforced_or_not}, but the opposite state is expected.\n{% endblock serial_logging_enforced_failure_reason %}\n\n{% block serial_logging_enforced_failure_remediation %}\nFollow Guide [1] to correct the constraint. Search for the constraint in [2] to better understand\nhow it works.\n\nNote: Consider checking with organization administrators for the recommended approach.\n\n[1] <https://cloud.google.com/resource-manager/docs/organization-policy/using-constraints>\n[2] <https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints>\n{% endblock serial_logging_enforced_failure_remediation %}\n"
  },
  {
    "path": "gcpdiag/runbook/dataflow/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/runbook/dataflow/constants.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"TODO: String doc\"\"\"\n# pylint: disable=unused-wildcard-import, wildcard-import\nfrom gcpdiag.runbook.gcp.constants import *\nfrom gcpdiag.runbook.iam.constants import *\n\nDATAFLOW_SERVICE_AGENT_ROLE = 'roles/dataflow.serviceAgent'\nDATAFLOW_WORKER_ROLE = 'roles/dataflow.worker'\nDATAFLOW_DEVELOPER_ROLE = 'roles/dataflow.developer'\nDATAFLOW_IAM_SERVICE_ACCOUNT_USER = 'roles/iam.serviceAccountUser'\n"
  },
  {
    "path": "gcpdiag/runbook/dataflow/failed_streaming_pipeline.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Module containing Dataflow diagnostic tree and custom steps.\"\"\"\n\nfrom gcpdiag import runbook\nfrom gcpdiag.queries import apis, crm, dataflow, logs\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.dataflow import flags\nfrom gcpdiag.runbook.dataflow import generalized_steps as dataflow_gs\n\n# from gcpdiag.runbook.iam import generalized_steps as iam_gs\n\n\nclass FailedStreamingPipeline(runbook.DiagnosticTree):\n  \"\"\"Diagnostic checks for failed Dataflow Streaming Pipelines.\n\n  Provides a DiagnosticTree to check for issues related to failed streaming\n  pipelines.\n\n  - Examples:\n    - Pipeline failed to launch\n    - Workers not starting\n  \"\"\"\n\n  parameters = {\n      flags.PROJECT_ID: {\n          'type': str,\n          'help': 'The Project ID of the resource under investigation',\n          'required': True,\n      },\n      flags.JOB_ID: {\n          'type': str,\n          'help': 'The Job ID returned when the launch command is submitted',\n          'deprecated': True,\n          'new_parameter': 'dataflow_job_id',\n      },\n      flags.DATAFLOW_JOB_ID: {\n          'type': str,\n          'help': 'The Job ID returned when the launch command is submitted',\n          'required': True,\n      },\n      flags.JOB_REGION: {\n          'type': str,\n          'help': 'The region configured for the job',\n          'required': True,\n      },\n  }\n\n  def legacy_parameter_handler(self, parameters):\n    if flags.JOB_ID in parameters:\n      parameters[flags.DATAFLOW_JOB_ID] = parameters.pop(flags.JOB_ID)\n\n  def build_tree(self):\n    \"\"\"Construct the diagnostic tree with appropriate steps.\"\"\"\n    # Instantiate your step classes\n    start = FailedStreamingPipelineStart()\n    # add them to your tree\n    self.add_start(start)\n\n    streaming = JobIsStreaming()\n    self.add_step(parent=start, child=streaming)\n\n    supported_sdk = dataflow_gs.ValidSdk()\n    self.add_step(parent=streaming, child=supported_sdk)\n\n    job_graph = JobGraphIsConstructed()\n    self.add_step(parent=supported_sdk, child=job_graph)\n\n    # Ending your runbook\n    self.add_end(FailedStreamingPipelineEnd())\n\n\nclass FailedStreamingPipelineStart(runbook.StartStep):\n  \"\"\"Start step.\n\n  Gets the job and confirms it exists.\n  Usually this will be logged in Dataflow Monitoring Interface, but may not be\n  logged if the job\n  graph is not constructed.\n  \"\"\"\n\n  template = 'generics::failed_streaming_pipeline_job_found'\n\n  def execute(self):\n    \"\"\"Start Step for failed streaming pipelines runbook.\"\"\"\n    project = crm.get_project(op.get(flags.PROJECT_ID))\n    job_id = op.get(flags.DATAFLOW_JOB_ID)\n    job_region = op.get(flags.JOB_REGION)\n\n    if project:\n      op.info(f'name: {project.name}: id: {project.id}')\n    product = self.__module__.split('.')[-2]\n\n    if not apis.is_enabled(op.get(flags.PROJECT_ID), 'dataflow'):\n      op.add_skipped(project, reason='Dataflow API is not enabled')\n      return\n\n    job = dataflow.get_job(op.get(flags.PROJECT_ID), job_id, job_region)\n    if job is not None:  # default=None\n      success_reason = op.prep_msg(op.SUCCESS_REASON,\n                                   job_id=job_id,\n                                   region=job_region)\n      op.add_ok(resource=job, reason=success_reason)\n    else:\n      op.add_skipped(\n          resource=project,\n          reason=(\n              'Could not find job {} or the {} API is disabled in project {}'.\n              format(job_id, product, project.id)),\n      )\n\n\nclass JobIsStreaming(runbook.Step):\n  \"\"\"Has common step to check if the job is a streaming job.\"\"\"\n\n  def execute(self):\n    \"\"\"Checks if a Dataflow job is indeed a streaming job by field JobType.\"\"\"\n\n    job = dataflow.get_job(\n        op.get(flags.PROJECT_ID),\n        op.get(flags.DATAFLOW_JOB_ID),\n        op.get(flags.JOB_REGION),\n    )\n    if job.job_type == 'JOB_TYPE_STREAMING':\n      op.add_ok(resource=job, reason='Job is of type streaming')\n    else:\n      op.add_failed(\n          resource=job,\n          reason='Dataflow job is not a streaming job.',\n          remediation='Please pass a streaming job',\n      )\n\n\nclass JobState(runbook.Step):\n  \"\"\"Has common step to check job state is not failed.\n\n  Usually the specific error is logged in the Dataflow Monitoring Interface.\n  \"\"\"\n\n  template = 'generics::failed_streaming_pipeline_check_common_errors'\n\n  def execute(self):\n    \"\"\"Checks that the Dataflow job's state.\"\"\"\n    job = dataflow.get_job(\n        op.get(flags.PROJECT_ID),\n        op.get(flags.DATAFLOW_JOB_ID),\n        op.get(flags.JOB_REGION),\n    )\n\n    if job.state == 'JOB_STATE_FAILED':\n      log_filter = ['severity>=WARNING']\n      project_id = op.get(flags.PROJECT_ID)\n      log_name = 'log_id(\"dataflow.googleapis.com/worker\")'\n      project_logs = {}\n\n      project_logs[project_id] = logs.query(\n          project_id=project_id,\n          resource_type='dataflow_step',\n          log_name=log_name,\n          filter_str=' AND '.join(log_filter),\n      )\n\n      for log_entry in project_logs[project_id].entries:\n        if log_entry['severity'] >= 'ERROR':\n          op.info(message=('Error logs found in job logs for the project'\n                           f' {job.full_path}'))\n\n      failure_reason = op.prep_msg(op.FAILURE_REASON,\n                                   job_id=op.get(flags.DATAFLOW_JOB_ID))\n      failure_remediation = op.prep_msg(op.FAILURE_REMEDIATION)\n\n      op.add_failed(\n          resource=job,\n          reason=failure_reason,\n          remediation=failure_remediation,\n      )\n    elif job.state in [\n        'JOB_STATE_STOPPED',\n        'JOB_STATE_PENDING',\n        'JOB_STATE_QUEUED',\n    ]:\n      op.add_uncertain(\n          resource=job,\n          reason='Job has not yet started to run',\n          remediation=(\n              'Wait for the job to start running & job graph is constructed to'\n              ' retry'),\n      )\n    elif job.state in ['JOB_STATE_CANCELLED', 'JOB_STATE_DRAINED']:\n      op.add_ok(resource=job, reason='Job has been terminated successfully')\n    elif job.state == 'JOB_STATE_RUNNING':\n      op.add_ok(resource=job, reason='Job is running successfully')\n\n\nclass JobGraphIsConstructed(runbook.Gateway):\n  \"\"\"Has common step to check if the job has an error in graph construction.\n\n  If a job fails during graph construction, it's error is not logged in the\n  Dataflow Monitoring Interface as it never launched. The error appears in the\n  console or terminal window where job is ran and may be language-specific.\n  Manual check if there's any error using the 3 supported languages: Java,\n  Python, Go.\n  \"\"\"\n\n  def execute(self):\n    \"\"\"Checks if a Dataflow job graph is successfully constructed.\"\"\"\n    job = dataflow.get_job(\n        op.get(flags.PROJECT_ID),\n        op.get(flags.DATAFLOW_JOB_ID),\n        op.get(flags.JOB_REGION),\n    )\n    message = (\n        'Does the job experience any graph or pipeline construction errors'\n        ' e.g.wording like %s')\n\n    example_wording = ''\n    if 'java' in job.sdk_language.lower():\n      example_wording = (\n          'Exception in thread \"main\" java.lang.IllegalStateException')\n    elif 'python' in job.sdk_language.lower():\n      example_wording = (\n          'TypeCheckError: Input type hint violation at group: expected Tuple ,'\n          ' got str')\n    elif 'go' in job.sdk_language.lower():\n      example_wording = (\n          'panic: Method ProcessElement in DoFn main.extractFn is missing all'\n          ' inputs')\n\n    response = op.prompt(message=message % example_wording,\n                         kind=op.CONFIRMATION)\n\n    if response == op.YES:\n      op.add_failed(\n          resource=job,\n          reason='Job was not launched',\n          remediation='Correct job launch errors and retry.',\n      )\n      self.add_child(child=FailedStreamingPipelineEnd())\n    else:\n      self.add_child(child=JobLogsVisible())\n\n\nclass JobLogsVisible(runbook.Step):\n  \"\"\"Has step to check if the project has logs exclusion filter for dataflow logs.\n\n  This affects visibility of the error causing job failure. If there are no logs\n  on the\n  Dataflow Monitoring Interface or the launching console/platform, this is a\n  good check\n  to make sure Dataflow logs are visible.\n  \"\"\"\n\n  def execute(self):\n    \"\"\"Checks if a Dataflow job has visible logs.\"\"\"\n    excluded = dataflow.logs_excluded(op.get(flags.PROJECT_ID))\n\n    if excluded is False:\n      op.add_ok(\n          resource=crm.get_project(op.get(flags.PROJECT_ID)),\n          reason='Dataflow Logs are not excluded',\n      )\n    elif excluded is None:\n      op.add_failed(\n          resource=None,\n          reason='logging API is disabled',\n          remediation='Enable Logging API',\n      )\n    else:\n      op.add_failed(\n          resource=crm.get_project(op.get(flags.PROJECT_ID)),\n          reason='Dataflow Logs are excluded',\n          remediation=(\n              'Please include Dataflow logs to allow troubleshooting job'\n              ' failures, or route them to a visible sink'),\n      )\n\n\nclass FailedStreamingPipelineEnd(runbook.EndStep):\n  \"\"\"End of the runbook.\n\n  No more checks to perform.\n  \"\"\"\n\n  def execute(self):\n    \"\"\"End step.\"\"\"\n    op.info('No more checks to perform.')\n"
  },
  {
    "path": "gcpdiag/runbook/dataflow/failed_streaming_pipeline_test.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test class for dataflow/Failed_streaming_pipeline.\"\"\"\n\nimport datetime\nimport unittest\nfrom unittest import mock\n\nfrom absl.testing import parameterized\n\nfrom gcpdiag import config\nfrom gcpdiag.queries import apis_stub, dataflow\nfrom gcpdiag.runbook import dataflow as dataflow_rb\nfrom gcpdiag.runbook import op, snapshot_test_base\nfrom gcpdiag.runbook.dataflow import failed_streaming_pipeline, flags\n\nDUMMY_PROJECT_ID = 'gcpdiag-dataflow1-aaaa'\nDUMMY_JOB_ID = '2024-06-19_09_43_07-14927685200167458422'\nDUMMY_REGION = 'us-central1'\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = dataflow_rb\n  runbook_name = 'dataflow/failed-streaming-pipeline'\n  config.init({'auto': True, 'interface': 'cli'})\n\n  rule_parameters = [{\n      'project_id': DUMMY_PROJECT_ID,\n      'dataflow_job_id': DUMMY_JOB_ID,\n      'job_region': DUMMY_REGION,\n  }]\n\n\nclass MockMessage:\n  \"\"\"Mock messages for testing.\"\"\"\n\n  def get_msg(self, key, **kwargs):\n    del kwargs\n    return f'{key}'\n\n\nclass FailedStreamingPipelineTest(unittest.TestCase):\n\n  def test_legacy_parameter_handler(self):\n    runbook = failed_streaming_pipeline.FailedStreamingPipeline()\n    parameters = {\n        'job_id': 'test-job-id',\n        'project_id': 'test-project',\n        'job_region': 'us-central1',\n    }\n    runbook.legacy_parameter_handler(parameters)\n    self.assertNotIn('job_id', parameters)\n    self.assertIn('dataflow_job_id', parameters)\n    self.assertEqual(parameters['dataflow_job_id'], 'test-job-id')\n\n\nclass FailedStreamingPipelineBuildTreeTest(unittest.TestCase):\n\n  @mock.patch(\n      'gcpdiag.runbook.dataflow.failed_streaming_pipeline.FailedStreamingPipeline.add_step'\n  )\n  @mock.patch(\n      'gcpdiag.runbook.dataflow.failed_streaming_pipeline.FailedStreamingPipeline.add_start'\n  )\n  @mock.patch(\n      'gcpdiag.runbook.dataflow.failed_streaming_pipeline.FailedStreamingPipeline.add_end'\n  )\n  @mock.patch('gcpdiag.runbook.op.get')\n  def test_build_tree(self, mock_op_get, mock_add_end, mock_add_start,\n                      mock_add_step):\n    mock_op_get.return_value = 'test_value'\n    runbook = failed_streaming_pipeline.FailedStreamingPipeline()\n    runbook.build_tree()\n    mock_add_start.assert_called_once()\n    self.assertIsInstance(\n        mock_add_start.call_args[0][0],\n        failed_streaming_pipeline.FailedStreamingPipelineStart,\n    )\n    steps_added = [call[1]['child'] for call in mock_add_step.call_args_list]\n    self.assertTrue(\n        any(\n            isinstance(s, failed_streaming_pipeline.JobIsStreaming)\n            for s in steps_added))\n    self.assertTrue(\n        any(\n            isinstance(s, dataflow_rb.generalized_steps.ValidSdk)\n            for s in steps_added))\n    self.assertTrue(\n        any(\n            isinstance(s, failed_streaming_pipeline.JobGraphIsConstructed)\n            for s in steps_added))\n    mock_add_end.assert_called_once()\n    self.assertIsInstance(\n        mock_add_end.call_args[0][0],\n        failed_streaming_pipeline.FailedStreamingPipelineEnd,\n    )\n\n\nclass FailedStreamingPipelineStepTestBase(unittest.TestCase):\n  \"\"\"Base class for Failed Streaming Pipeline step tests.\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    # 1. Patch get_api with the stub.\n    self.enterContext(\n        mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub))\n    # 2. Create a mock interface to capture outputs\n    self.mock_interface = mock.create_autospec(op.InteractionInterface,\n                                               instance=True)\n    self.mock_interface.rm = mock.Mock()\n    # 3. Instantiate a real Operator\n    self.operator = op.Operator(self.mock_interface)\n    self.operator.run_id = 'test-run'\n    self.operator.messages = MockMessage()\n    # 4. Define standard parameters.\n    self.params = {\n        flags.PROJECT_ID:\n            DUMMY_PROJECT_ID,\n        flags.DATAFLOW_JOB_ID:\n            DUMMY_JOB_ID,\n        flags.JOB_REGION:\n            DUMMY_REGION,\n        'start_time':\n            datetime.datetime(2025, 1, 1, tzinfo=datetime.timezone.utc),\n        'end_time':\n            datetime.datetime(2025, 1, 2, tzinfo=datetime.timezone.utc),\n    }\n    self.operator.parameters = self.params\n    self.mock_op_prompt = self.enterContext(\n        mock.patch('gcpdiag.runbook.op.prompt'))\n\n\nclass FailedStreamingPipelineStartTest(FailedStreamingPipelineStepTestBase):\n  \"\"\"Test FailedStreamingPipelineStart step.\"\"\"\n\n  @mock.patch('gcpdiag.queries.dataflow.get_job')\n  def test_start_step_ok(self, mock_get_job):\n    mock_get_job.return_value = mock.Mock(spec=dataflow.Job)\n    step = failed_streaming_pipeline.FailedStreamingPipelineStart()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n    self.mock_interface.add_skipped.assert_not_called()\n\n  @mock.patch('gcpdiag.queries.apis.is_enabled', return_value=False)\n  def test_start_step_api_disabled(self, mock_is_enabled):\n    step = failed_streaming_pipeline.FailedStreamingPipelineStart()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.assertEqual(mock_is_enabled.call_count, 1)\n    mock_is_enabled.assert_called_with(DUMMY_PROJECT_ID, 'dataflow')\n    self.assertEqual(self.mock_interface.add_skipped.call_count, 1)\n\n  @mock.patch('gcpdiag.queries.dataflow.get_job', return_value=None)\n  def test_start_step_job_not_found(self, mock_get_job):\n    del mock_get_job\n    self.params[flags.DATAFLOW_JOB_ID] = 'non-existent-job'\n    step = failed_streaming_pipeline.FailedStreamingPipelineStart()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n    self.mock_interface.add_ok.assert_not_called()\n\n\nclass JobIsStreamingTest(FailedStreamingPipelineStepTestBase):\n  \"\"\"Test JobIsStreaming step.\"\"\"\n\n  @mock.patch('gcpdiag.queries.dataflow.get_job')\n  def test_job_is_streaming(self, mock_get_job):\n    mock_job = mock.Mock(spec=dataflow.Job)\n    mock_job.job_type = 'JOB_TYPE_STREAMING'\n    mock_get_job.return_value = mock_job\n    step = failed_streaming_pipeline.JobIsStreaming()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n    self.mock_interface.add_failed.assert_not_called()\n\n  @mock.patch('gcpdiag.queries.dataflow.get_job')\n  def test_job_is_not_streaming(self, mock_get_job):\n    mock_job = mock.Mock(spec=dataflow.Job)\n    mock_job.job_type = 'JOB_TYPE_BATCH'\n    mock_get_job.return_value = mock_job\n    step = failed_streaming_pipeline.JobIsStreaming()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n    self.mock_interface.add_ok.assert_not_called()\n\n\nclass JobStateTest(FailedStreamingPipelineStepTestBase, parameterized.TestCase):\n  \"\"\"Test JobState step.\"\"\"\n\n  @mock.patch('gcpdiag.queries.logs.query')\n  @mock.patch('gcpdiag.queries.dataflow.get_job')\n  def test_job_state_failed_no_error_logs(self, mock_get_job, mock_logs_query):\n    mock_job = mock.Mock(spec=dataflow.Job, state='JOB_STATE_FAILED')\n    mock_get_job.return_value = mock_job\n    mock_logs_query.return_value = mock.Mock(entries=[])\n    step = failed_streaming_pipeline.JobState()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    mock_logs_query.assert_called_once()\n    self.mock_interface.info.assert_not_called()\n    self.mock_interface.add_failed.assert_called_once()\n\n  @mock.patch('gcpdiag.queries.logs.query')\n  @mock.patch('gcpdiag.queries.dataflow.get_job')\n  def test_job_state_failed_with_error_logs(self, mock_get_job,\n                                            mock_logs_query):\n    mock_job = mock.Mock(spec=dataflow.Job, state='JOB_STATE_FAILED')\n    mock_get_job.return_value = mock_job\n    mock_logs_query.return_value = mock.Mock(entries=[{\n        'severity': 'ERROR',\n        'message': 'error log'\n    }])\n    step = failed_streaming_pipeline.JobState()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    mock_logs_query.assert_called_once()\n    self.mock_interface.info.assert_called_once()\n    self.mock_interface.add_failed.assert_called_once()\n\n  @mock.patch('gcpdiag.queries.dataflow.get_job')\n  def test_job_state_stopped(self, mock_get_job):\n    mock_job = mock.Mock(spec=dataflow.Job, state='JOB_STATE_STOPPED')\n    mock_get_job.return_value = mock_job\n    step = failed_streaming_pipeline.JobState()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_uncertain.assert_called_once()\n\n  @parameterized.parameters('JOB_STATE_CANCELLED', 'JOB_STATE_RUNNING')\n  @mock.patch('gcpdiag.queries.dataflow.get_job')\n  def test_job_state_ok(self, job_state, mock_get_job):\n    mock_job = mock.Mock(spec=dataflow.Job, state=job_state)\n    mock_get_job.return_value = mock_job\n    step = failed_streaming_pipeline.JobState()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_not_called()\n    self.mock_interface.add_uncertain.assert_not_called()\n\n\nclass JobGraphIsConstructedTest(FailedStreamingPipelineStepTestBase):\n  \"\"\"Test JobGraphIsConstructed step.\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    self.add_child_patch = self.enterContext(\n        mock.patch(\n            'gcpdiag.runbook.dataflow.failed_streaming_pipeline.JobGraphIsConstructed.add_child'\n        ))\n\n  @mock.patch('gcpdiag.queries.dataflow.get_job')\n  def test_graph_construction_error_yes(self, mock_get_job):\n    mock_job = mock.Mock(spec=dataflow.Job)\n    mock_job.sdk_language = 'java'\n    mock_get_job.return_value = mock_job\n    self.mock_op_prompt.return_value = op.YES\n    step = failed_streaming_pipeline.JobGraphIsConstructed()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_op_prompt.assert_called_once()\n    self.mock_interface.add_failed.assert_called_once()\n    self.add_child_patch.assert_called_once()\n    self.assertIsInstance(\n        self.add_child_patch.call_args[1]['child'],\n        failed_streaming_pipeline.FailedStreamingPipelineEnd,\n    )\n\n  @mock.patch('gcpdiag.queries.dataflow.get_job')\n  def test_graph_construction_error_no(self, mock_get_job):\n    mock_job = mock.Mock(spec=dataflow.Job)\n    mock_job.sdk_language = 'java'\n    mock_get_job.return_value = mock_job\n    self.mock_op_prompt.return_value = op.NO\n    step = failed_streaming_pipeline.JobGraphIsConstructed()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_op_prompt.assert_called_once()\n    self.mock_interface.add_failed.assert_not_called()\n    self.add_child_patch.assert_called_once()\n    self.assertIsInstance(\n        self.add_child_patch.call_args[1]['child'],\n        failed_streaming_pipeline.JobLogsVisible,\n    )\n\n  @mock.patch('gcpdiag.queries.dataflow.get_job')\n  def test_graph_construction_error_python_sdk(self, mock_get_job):\n    mock_job = mock.Mock(spec=dataflow.Job)\n    mock_job.sdk_language = 'python'\n    mock_get_job.return_value = mock_job\n    self.mock_op_prompt.return_value = op.NO\n    step = failed_streaming_pipeline.JobGraphIsConstructed()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_op_prompt.assert_called_once()\n    self.assertIn('TypeCheckError', self.mock_op_prompt.call_args[1]['message'])\n    self.mock_interface.add_failed.assert_not_called()\n    self.add_child_patch.assert_called_once()\n    self.assertIsInstance(\n        self.add_child_patch.call_args[1]['child'],\n        failed_streaming_pipeline.JobLogsVisible,\n    )\n\n  @mock.patch('gcpdiag.queries.dataflow.get_job')\n  def test_graph_construction_error_go_sdk(self, mock_get_job):\n    mock_job = mock.Mock(spec=dataflow.Job)\n    mock_job.sdk_language = 'go'\n    mock_get_job.return_value = mock_job\n    self.mock_op_prompt.return_value = op.NO\n    step = failed_streaming_pipeline.JobGraphIsConstructed()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_op_prompt.assert_called_once()\n    self.assertIn('panic: Method', self.mock_op_prompt.call_args[1]['message'])\n    self.mock_interface.add_failed.assert_not_called()\n    self.add_child_patch.assert_called_once()\n    self.assertIsInstance(\n        self.add_child_patch.call_args[1]['child'],\n        failed_streaming_pipeline.JobLogsVisible,\n    )\n\n\nclass JobLogsVisibleTest(FailedStreamingPipelineStepTestBase):\n  \"\"\"Test JobLogsVisible step.\"\"\"\n\n  @mock.patch('gcpdiag.queries.dataflow.logs_excluded', return_value=False)\n  def test_logs_not_excluded(self, mock_logs_excluded):\n    step = failed_streaming_pipeline.JobLogsVisible()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    mock_logs_excluded.assert_called_once_with(DUMMY_PROJECT_ID)\n    self.mock_interface.add_ok.assert_called_once()\n    self.mock_interface.add_failed.assert_not_called()\n\n  @mock.patch('gcpdiag.queries.dataflow.logs_excluded', return_value=None)\n  def test_logs_api_disabled(self, mock_logs_excluded):\n    step = failed_streaming_pipeline.JobLogsVisible()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    mock_logs_excluded.assert_called_once_with(DUMMY_PROJECT_ID)\n    self.mock_interface.add_ok.assert_not_called()\n    self.assertEqual(self.mock_interface.add_failed.call_args[1]['resource'],\n                     None)\n    self.mock_interface.add_failed.assert_called_once()\n\n  @mock.patch('gcpdiag.queries.dataflow.logs_excluded',\n              side_effect=[True, None])\n  def test_logs_excluded_is_none_on_second_call(self, mock_logs_excluded):\n    step = failed_streaming_pipeline.JobLogsVisible()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.assertEqual(mock_logs_excluded.call_count, 1)\n    self.mock_interface.add_failed.assert_called_once()\n    self.mock_interface.add_ok.assert_not_called()\n\n  @mock.patch('gcpdiag.queries.dataflow.logs_excluded', return_value=True)\n  def test_logs_excluded(self, mock_logs_excluded):\n    step = failed_streaming_pipeline.JobLogsVisible()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    mock_logs_excluded.assert_called_with(DUMMY_PROJECT_ID)\n    self.mock_interface.add_failed.assert_called_once()\n    self.mock_interface.add_ok.assert_not_called()\n\n\nclass FailedStreamingPipelineEndTest(FailedStreamingPipelineStepTestBase):\n  \"\"\"Test FailedStreamingPipelineEnd step.\"\"\"\n\n  def test_end_step(self):\n    step = failed_streaming_pipeline.FailedStreamingPipelineEnd()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.info.assert_called_once()\n\n\nif __name__ == '__main__':\n  unittest.main()\n"
  },
  {
    "path": "gcpdiag/runbook/dataflow/flags.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Flags for Dataflow runbooks.\"\"\"\n# pylint: disable=unused-wildcard-import, wildcard-import\nfrom gcpdiag.runbook.gcp.flags import *\nfrom gcpdiag.runbook.iam.flags import *\n\nJOB_ID = 'job_id'\nJOB_REGION = 'job_region'\nWORKER_SERVICE_ACCOUNT = 'worker_service_account'\nPRINCIPAL = 'principal'\nCROSS_PROJECT_ID = 'cross_project_id'\nDATAFLOW_JOB_ID = 'dataflow_job_id'\n"
  },
  {
    "path": "gcpdiag/runbook/dataflow/generalized_steps.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Common steps for Dataflow runbooks.\"\"\"\n\nfrom gcpdiag import runbook\nfrom gcpdiag.queries import dataflow\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.dataflow import flags\n\n\nclass ValidSdk(runbook.Step):\n  \"\"\"Has common step to check if the job is running a valid SDK.\n\n  Contains SDK check Step that are likely to be reused for most Dataflow\n  Runbooks.\n  \"\"\"\n\n  def execute(self):\n    \"\"\"Checks SDK is not in the list that might trigger known SDK issues.\"\"\"\n    job = dataflow.get_job(\n        op.get(flags.PROJECT_ID),\n        op.get(flags.DATAFLOW_JOB_ID),\n        op.get(flags.JOB_REGION),\n    )\n    if job is None:\n      op.add_skipped(resource=None, reason='Job not found.')\n      return\n\n    if job.sdk_support_status != 'SUPPORTED':\n      op.add_failed(\n          resource=None,\n          reason=('Dataflow job Beam SDK is not supported. The pipeline may be'\n                  ' rejected.'),\n          remediation='Please use a supported Beam SDK version',\n      )\n    else:\n      op.add_ok(resource=job, reason='Dataflow job Beam SDK is supported.')\n"
  },
  {
    "path": "gcpdiag/runbook/dataflow/generalized_steps_test.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test class for dataflow.generalized_steps.\"\"\"\n\nimport datetime\nimport unittest\nfrom unittest import mock\n\nfrom gcpdiag.queries import apis_stub, dataflow\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.dataflow import flags, generalized_steps\n\nDUMMY_PROJECT_ID = 'gcpdiag-dataflow1-aaaa'\nDUMMY_JOB_ID = '2024-06-19_09_43_07-14927685200167458422'\nDUMMY_REGION = 'us-central1'\n\n\nclass MockMessage:\n  \"\"\"Mock messages for testing.\"\"\"\n\n  def get_msg(self, key, **kwargs):\n    del kwargs\n    return f'{key}'\n\n\nclass GeneralizedStepsTestBase(unittest.TestCase):\n  \"\"\"Base class for Dataflow generalized step tests.\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    # 1. Patch get_api with the stub.\n    self.enterContext(\n        mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub))\n    # 2. Create a mock interface to capture outputs\n    self.mock_interface = mock.create_autospec(op.InteractionInterface,\n                                               instance=True)\n    self.mock_interface.rm = mock.Mock()\n    # 3. Instantiate a real Operator\n    self.operator = op.Operator(self.mock_interface)\n    self.operator.run_id = 'test-run'\n    self.operator.messages = MockMessage()\n    # 4. Define standard parameters.\n    self.params = {\n        flags.PROJECT_ID:\n            DUMMY_PROJECT_ID,\n        flags.DATAFLOW_JOB_ID:\n            DUMMY_JOB_ID,\n        flags.JOB_REGION:\n            DUMMY_REGION,\n        'start_time':\n            datetime.datetime(2025, 1, 1, tzinfo=datetime.timezone.utc),\n        'end_time':\n            datetime.datetime(2025, 1, 2, tzinfo=datetime.timezone.utc),\n    }\n    self.operator.parameters = self.params\n\n\nclass ValidSdkTest(GeneralizedStepsTestBase):\n  \"\"\"Test ValidSdk step.\"\"\"\n\n  def test_valid_sdk(self):\n    step = generalized_steps.ValidSdk()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n    self.mock_interface.add_failed.assert_not_called()\n\n  @mock.patch('gcpdiag.queries.dataflow.get_job')\n  def test_invalid_sdk(self, mock_get_job):\n    mock_job = mock.Mock(spec=dataflow.Job)\n    mock_job.sdk_support_status = 'DEPRECATED'\n    mock_get_job.return_value = mock_job\n    step = generalized_steps.ValidSdk()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_not_called()\n    self.mock_interface.add_failed.assert_called_once()\n\n\nif __name__ == '__main__':\n  unittest.main()\n"
  },
  {
    "path": "gcpdiag/runbook/dataflow/job_permissions.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Module containing Dataflow Jobs permissions check diagnostic tree and custom steps.\"\"\"\n\nfrom gcpdiag import runbook\nfrom gcpdiag.queries import crm, iam, logs\nfrom gcpdiag.runbook import StartStep, op\nfrom gcpdiag.runbook.crm import generalized_steps as crm_gs\nfrom gcpdiag.runbook.dataflow import constants as dataflow_constants\nfrom gcpdiag.runbook.dataflow import flags\nfrom gcpdiag.runbook.iam import generalized_steps as iam_gs\n\nPRODUCT_FLAG = 'dataflow'\n\n\ndef local_realtime_query(filter_str):\n  result = logs.realtime_query(\n      project_id=op.get(flags.PROJECT_ID),\n      start_time=op.get(flags.START_TIME),\n      end_time=op.get(flags.END_TIME),\n      filter_str=filter_str,\n  )\n  return result\n\n\nclass JobPermissions(runbook.DiagnosticTree):\n  \"\"\"Analysis and Resolution of Dataflow Jobs Permissions issues.\n\n  This runbook investigates Dataflow permissions and recommends remediation steps.\n\n  Areas Examined:\n  - Dataflow User Account Permissions: Verify that individual Dataflow users have the necessary\n    permissions to access and manage Dataflow jobs (e.g., create,update,cancel).\n\n  - Dataflow Service Account Permissions: Verify that the Dataflow Service Account has the required\n    permissions to execute and manage the Dataflow jobs\n\n  - Dataflow Worker Service Account: Verify that the Dataflow Worker Service Account has the\n    necessary permissions for worker instances within a Dataflow job to access input and\n    output resources during job execution.\n\n  - Dataflow Resource Permissions: Verify that Dataflow resources (e.g., Cloud Storage buckets,\n    BigQuery datasets) have the necessary permissions to be accessed and used by Dataflow jobs.\n\n  By ensuring that Dataflow resources have the necessary permissions, you\n  can prevent errors and ensure that your jobs run smoothly.\n  \"\"\"\n\n  parameters = {\n      flags.PROJECT_ID: {\n          'type': str,\n          'help': 'The Project ID of the resource under investigation',\n          'required': True,\n      },\n      flags.PRINCIPAL: {\n          'type': str,\n          'help': ('The authenticated user account email. This is the '\n                   'user account that is used to authenticate the user to the '\n                   'console or the gcloud CLI.'),\n          'required': True,\n      },\n      flags.WORKER_SERVICE_ACCOUNT: {\n          'type': str,\n          'help':\n              ('Dataflow Worker Service Account used for Dataflow Job Creation'\n               'and execution'),\n          'required': True,\n      },\n      flags.CROSS_PROJECT_ID: {\n          'type':\n              str,\n          'help':\n              ('Cross Project ID, where service account is located if it is not'\n               ' in the same project as the Dataflow Job'),\n      },\n  }\n\n  def build_tree(self):\n    \"\"\"Construct the diagnostic tree with appropriate steps.\"\"\"\n    # Instantiate your step classes\n    start = StartStep()\n    user_account_permissions_check = DataflowUserAccountPermissions()\n    worker_service_account_check = DataflowWorkerServiceAccountPermissions()\n    dataflow_resource_permissions_check = DataflowResourcePermissions()\n\n    self.add_start(start)\n    self.add_step(parent=start, child=user_account_permissions_check)\n\n    project = crm.get_project(op.get(flags.PROJECT_ID))\n    service_agent_check = iam_gs.IamPolicyCheck()\n    service_agent_check.project = op.get(flags.PROJECT_ID)\n    service_agent_check.roles = [dataflow_constants.DATAFLOW_SERVICE_AGENT_ROLE]\n    service_agent_check.principal = f'serviceAccount:service-{project.number}@dataflow-service-producer-prod.iam.gserviceaccount.com'  # pylint: disable=line-too-long\n    service_agent_check.template = 'gcpdiag.runbook.dataflow::permissions::dataflow_service_account'  # pylint: disable=line-too-long\n    service_agent_check.require_all = False\n    self.add_step(parent=start, child=service_agent_check)\n\n    self.add_step(parent=start, child=worker_service_account_check)\n    self.add_step(parent=start, child=dataflow_resource_permissions_check)\n    self.add_end(DataflowPermissionsEnd())\n\n\nclass DataflowUserAccountPermissions(runbook.Step):\n  \"\"\"Check the User account permissions.\n\n  \"Dataflow Viewer\" role allows the user to view/list the Dataflow jobs. But,\n  cannot submit, update, drain, stop, or cancel the jobs.\n  \"Dataflow Developer\" role does allows the user to create and modify (view,\n  update, cancel etc) the dataflow jobs, but does not provide machine type,\n  storage bucket configuration access.\n  \"Dataflow Admin\" role provides complete access for creating and modifying the\n  jobs along with the machine type and storage bucket configuration access.\n  \"\"\"\n\n  def execute(self):\n    \"\"\"Check the Authenticated User account permissions.\"\"\"\n    dataflow_developer_role_check = iam_gs.IamPolicyCheck()\n    dataflow_developer_role_check.project = op.get(flags.PROJECT_ID)\n    dataflow_developer_role_check.roles = [\n        dataflow_constants.DATAFLOW_DEVELOPER_ROLE,\n        dataflow_constants.DATAFLOW_IAM_SERVICE_ACCOUNT_USER,\n    ]\n    dataflow_developer_role_check.principal = f'user:{op.get(flags.PRINCIPAL)}'\n    dataflow_developer_role_check.require_all = True\n    self.add_child(dataflow_developer_role_check)\n\n\nclass DataflowWorkerServiceAccountPermissions(runbook.Gateway):\n  \"\"\"Check the Dataflow Worker account permissions.\n\n  Worker instances use the worker service account to access input and output\n  resources after you submit your job.\n  For the worker service account to be able to run a job,\n  it must have the roles/dataflow.worker role.\n  \"\"\"\n  template = 'permissions::projectcheck'\n\n  def execute(self):\n    \"\"\"Checking dataflow worker service account permissions.\"\"\"\n    sa_email = op.get(flags.WORKER_SERVICE_ACCOUNT)\n    project = crm.get_project(op.get(flags.PROJECT_ID))\n    op.info(op.get(flags.WORKER_SERVICE_ACCOUNT))\n    sa_exists = iam.is_service_account_existing(email=sa_email,\n                                                context=op.get_context())\n    cross_project_id = op.get(flags.CROSS_PROJECT_ID)\n    sa_exists_cross_project = False\n    if cross_project_id:\n      cross_project_context = op.get_context().copy_with(\n          project_id=cross_project_id)\n      sa_exists_cross_project = iam.is_service_account_existing(\n          email=sa_email, context=cross_project_context)\n    if sa_exists and op.get(flags.CROSS_PROJECT_ID) is None:\n      op.info('Service Account associated with Dataflow Job was found in the'\n              ' same project')\n      op.info('Checking permissions.')\n      # Check for Service Account permissions\n      sa_permission_check = iam_gs.IamPolicyCheck()\n      sa_permission_check.project = op.get(flags.PROJECT_ID)\n      sa_permission_check.principal = (\n          f'serviceAccount:{op.get(flags.WORKER_SERVICE_ACCOUNT)}')\n      sa_permission_check.template = 'gcpdiag.runbook.dataflow::permissions::dataflow_worker_service_account'  # pylint: disable=line-too-long\n      sa_permission_check.require_all = True\n      sa_permission_check.roles = [dataflow_constants.DATAFLOW_WORKER_ROLE]\n      self.add_child(child=sa_permission_check)\n    elif sa_exists_cross_project:\n      op.info('Service Account associated with Dataflow Job was found in cross '\n              'project')\n      # Check if constraint is enforced\n      op.info('Checking constraints on service account project.')\n      orgpolicy_constraint_check = crm_gs.OrgPolicyCheck()\n      orgpolicy_constraint_check.project = op.get(flags.CROSS_PROJECT_ID)\n      orgpolicy_constraint_check.constraint = (\n          'constraints/iam.disableCrossProjectServiceAccountUsage')\n      orgpolicy_constraint_check.is_enforced = False\n      self.add_child(orgpolicy_constraint_check)\n\n      # Check Service Account roles\n      op.info('Checking roles in service account project.')\n      sa_permission_check = iam_gs.IamPolicyCheck()\n      sa_permission_check.project = op.get(flags.CROSS_PROJECT_ID)\n      sa_permission_check.principal = (\n          f'serviceAccount:{op.get(flags.WORKER_SERVICE_ACCOUNT)}')\n      sa_permission_check.template = 'gcpdiag.runbook.dataflow::permissions::dataflow_cross_project_worker_service_account'  # pylint: disable=line-too-long\n      sa_permission_check.require_all = True\n      sa_permission_check.roles = [dataflow_constants.DATAFLOW_WORKER_ROLE]\n      self.add_child(child=sa_permission_check)\n\n      # Check Service Agent Service Account roles\n      op.info('Checking service agent service account roles on service account '\n              'project.')\n      service_agent_sa = (\n          f'service-{project.number}@dataflow-service-producer-prod.iam.gserviceaccount.com'\n      )\n      service_agent_permission_check = iam_gs.IamPolicyCheck()\n      service_agent_permission_check.project = op.get(flags.CROSS_PROJECT_ID)\n      service_agent_permission_check.principal = (\n          f'serviceAccount:{service_agent_sa}')\n      service_agent_permission_check.template = 'gcpdiag.runbook.dataflow::permissions::dataflow_cross_project_worker_service_account'  # pylint: disable=line-too-long\n      service_agent_permission_check.require_all = True\n      service_agent_permission_check.roles = [\n          dataflow_constants.DATAFLOW_IAM_SERVICE_ACCOUNT_USER,\n          'roles/iam.serviceAccountTokenCreator'\n      ]\n      self.add_child(child=service_agent_permission_check)\n\n      # Check Compute Agent Service Account\n      op.info('Checking compute agent service account roles on service account '\n              'project.')\n      compute_agent_sa = (\n          f'service-{project.number}@compute-system.iam.gserviceaccount.com')\n      compute_agent_permission_check = iam_gs.IamPolicyCheck()\n      compute_agent_permission_check.project = op.get(flags.CROSS_PROJECT_ID)\n      compute_agent_permission_check.principal = (\n          f'serviceAccount:{compute_agent_sa}')\n      compute_agent_permission_check.template = 'gcpdiag.runbook.dataflow::permissions::dataflow_cross_project_worker_service_account'  # pylint: disable=line-too-long\n      compute_agent_permission_check.require_all = True\n      compute_agent_permission_check.roles = [\n          dataflow_constants.DATAFLOW_IAM_SERVICE_ACCOUNT_USER,\n          'roles/iam.serviceAccountTokenCreator'\n      ]\n      self.add_child(child=compute_agent_permission_check)\n    else:\n      op.add_failed(project,\n                    reason=op.prep_msg(op.FAILURE_REASON,\n                                       service_account=op.get(\n                                           flags.WORKER_SERVICE_ACCOUNT),\n                                       project_id=op.get(flags.PROJECT_ID)),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n\n\nclass DataflowResourcePermissions(runbook.Step):\n  \"\"\"Check the Dataflow Resource permissions.\n\n  Verify that Dataflow resources have the necessary permissions to be accessed\n  and used by Dataflow jobs.\n  Ensure that the your Dataflow project Worker Service Account have the\n  required permissions to access and modify these resources.\n  \"\"\"\n\n  def execute(self):\n    \"\"\"Check the Dataflow Resource permissions.\"\"\"\n    filter_str = [\n        'log_id(\"dataflow.googleapis.com/job-message\")',\n        'resource.type=\"dataflow_step\"',\n        ('textPayload=~(\"Failed to write a file to temp location\" OR \"Unable'\n         ' to rename output files\" OR \"Unable to delete temp files\")'),\n    ]\n    filter_str = '\\n'.join(filter_str)\n    log_entries = local_realtime_query(filter_str)\n    if log_entries:\n      op.info('Cloud Storage buckets related errors found in the logs..')\n      op.info('Checking worker service account storage object admin role.')\n      dataflow_storage_role_check = iam_gs.IamPolicyCheck()\n      if op.get(flags.CROSS_PROJECT_ID):\n        dataflow_storage_role_check.project = op.get(flags.CROSS_PROJECT_ID)\n      dataflow_storage_role_check.roles = ['roles/storage.objectAdmin']\n      dataflow_storage_role_check.principal = (\n          f'serviceAccount:{op.get(flags.WORKER_SERVICE_ACCOUNT)}')\n      dataflow_storage_role_check.require_all = True\n      self.add_child(dataflow_storage_role_check)\n    else:\n      op.info('No Cloud Storage buckets related errors found in the logs')\n\n\nclass DataflowPermissionsEnd(runbook.EndStep):\n  \"\"\"RUNBOOK COMPLETED.\"\"\"\n\n  def execute(self):\n    \"\"\"Permissions checks completed.\"\"\"\n    op.info('Dataflow Resources Permissions Checks Completed')\n"
  },
  {
    "path": "gcpdiag/runbook/dataflow/job_permissions_test.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test class for dataflow/JobPermissions\"\"\"\n\nimport datetime\nimport unittest\nfrom unittest import mock\n\nfrom gcpdiag import config\nfrom gcpdiag.queries import apis_stub\nfrom gcpdiag.runbook import dataflow, op, snapshot_test_base\nfrom gcpdiag.runbook.crm import generalized_steps as crm_gs\nfrom gcpdiag.runbook.dataflow import flags, job_permissions\nfrom gcpdiag.runbook.iam import generalized_steps as iam_gs\n\nDUMMY_PROJECT_ID = 'gcpdiag-dataflow1-aaaa'\nDUMMY_GKE_PROJECT_ID = 'gcpdiag-gke1-aaaa'\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = dataflow\n  runbook_name = 'dataflow/job-permissions'\n  config.init({'auto': True, 'interface': 'cli'})\n\n  rule_parameters = [{\n      'project_id': DUMMY_PROJECT_ID,\n      'custom_flag': 'dataflow',\n      'worker_service_account':\n          ('dataflow-worker@gcpdiag-dataflow1-aaaa.iam.gserviceaccount.com'),\n      'principal': 'user@xyz.com',\n  }]\n\n\nclass MockMessage:\n  \"\"\"Mock messages for testing.\"\"\"\n\n  def get_msg(self, key, **kwargs):\n    del kwargs\n    return f'{key}'\n\n\nclass JobPermissionsStepTestBase(unittest.TestCase):\n  \"\"\"Base class for Job Permissions step tests.\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    # 1. Patch get_api with the stub.\n    self.enterContext(\n        mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub))\n    # 2. Create a mock interface to capture outputs\n    self.mock_interface = mock.create_autospec(op.InteractionInterface,\n                                               instance=True)\n    self.mock_interface.rm = mock.Mock()\n    # 3. Instantiate a real Operator\n    self.operator = op.Operator(self.mock_interface)\n    self.operator.run_id = 'test-run'\n    self.operator.messages = MockMessage()\n    # 4. Define standard parameters.\n    self.params = {\n        flags.PROJECT_ID:\n            DUMMY_PROJECT_ID,\n        flags.PRINCIPAL:\n            'test-user@example.com',\n        flags.WORKER_SERVICE_ACCOUNT:\n            (f'dataflow-worker@{DUMMY_PROJECT_ID}.iam.gserviceaccount.com'),\n        flags.CROSS_PROJECT_ID:\n            None,\n        flags.START_TIME:\n            datetime.datetime(2025, 1, 1, tzinfo=datetime.timezone.utc),\n        flags.END_TIME:\n            datetime.datetime(2025, 1, 2, tzinfo=datetime.timezone.utc),\n    }\n    self.operator.parameters = self.params\n    self.mock_logs_realtime_query = self.enterContext(\n        mock.patch('gcpdiag.queries.logs.realtime_query'))\n\n\nclass JobPermissionsBuildTreeTest(unittest.TestCase):\n\n  @mock.patch(\n      'gcpdiag.runbook.dataflow.job_permissions.JobPermissions.add_step')\n  @mock.patch(\n      'gcpdiag.runbook.dataflow.job_permissions.JobPermissions.add_start')\n  @mock.patch('gcpdiag.runbook.dataflow.job_permissions.JobPermissions.add_end')\n  @mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)\n  @mock.patch('gcpdiag.runbook.op.get')\n  def test_build_tree(\n      self,\n      mock_op_get,\n      mock_add_end,\n      mock_add_start,\n      mock_add_step,\n  ):\n    mock_op_get.return_value = DUMMY_GKE_PROJECT_ID\n    runbook = job_permissions.JobPermissions()\n    runbook.build_tree()\n\n    mock_add_start.assert_called_once()\n    self.assertIsInstance(mock_add_start.call_args[0][0],\n                          job_permissions.StartStep)\n\n    self.assertEqual(mock_add_step.call_count, 4)\n    steps_added = [call[1]['child'] for call in mock_add_step.call_args_list]\n    self.assertTrue(\n        any(\n            isinstance(s, job_permissions.DataflowUserAccountPermissions)\n            for s in steps_added))\n    self.assertTrue(\n        any(isinstance(s, iam_gs.IamPolicyCheck) for s in steps_added))\n    self.assertTrue(\n        any(\n            isinstance(s,\n                       job_permissions.DataflowWorkerServiceAccountPermissions)\n            for s in steps_added))\n    self.assertTrue(\n        any(\n            isinstance(s, job_permissions.DataflowResourcePermissions)\n            for s in steps_added))\n\n    mock_add_end.assert_called_once()\n    self.assertIsInstance(mock_add_end.call_args[0][0],\n                          job_permissions.DataflowPermissionsEnd)\n\n\nclass DataflowUserAccountPermissionsTest(JobPermissionsStepTestBase):\n\n  def setUp(self):\n    super().setUp()\n    self.add_child_patch = self.enterContext(\n        mock.patch(\n            'gcpdiag.runbook.dataflow.job_permissions.DataflowUserAccountPermissions.add_child'\n        ))\n\n  def test_add_child_called(self):\n    step = job_permissions.DataflowUserAccountPermissions()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.add_child_patch.assert_called_once()\n    self.assertIsInstance(self.add_child_patch.call_args[0][0],\n                          iam_gs.IamPolicyCheck)\n\n\nclass DataflowWorkerServiceAccountPermissionsTest(JobPermissionsStepTestBase):\n\n  def setUp(self):\n    super().setUp()\n    self.add_child_patch = self.enterContext(\n        mock.patch('gcpdiag.runbook.dataflow.job_permissions.'\n                   'DataflowWorkerServiceAccountPermissions.add_child'))\n\n  @mock.patch('gcpdiag.queries.iam.is_service_account_existing',\n              return_value=True)\n  def test_sa_exists_same_project(self,\n                                  unused_mock_is_service_account_existing):\n    step = job_permissions.DataflowWorkerServiceAccountPermissions()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.add_child_patch.assert_called_once()\n    self.assertIsInstance(self.add_child_patch.call_args[1]['child'],\n                          iam_gs.IamPolicyCheck)\n\n  @mock.patch('gcpdiag.queries.iam.is_service_account_existing',\n              return_value=False)\n  def test_sa_does_not_exist(self, unused_mock_is_service_account_existing):\n    self.params[flags.WORKER_SERVICE_ACCOUNT] = (\n        f'non-existent@{DUMMY_PROJECT_ID}.iam.gserviceaccount.com')\n    step = job_permissions.DataflowWorkerServiceAccountPermissions()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.add_child_patch.assert_not_called()\n    self.mock_interface.add_failed.assert_called_once()\n\n  @mock.patch('gcpdiag.queries.iam.is_service_account_existing')\n  def test_sa_exists_cross_project(self, mock_is_service_account_existing):\n    self.params[flags.CROSS_PROJECT_ID] = 'gcpdiag-iam1-aaaa'\n    self.params[flags.WORKER_SERVICE_ACCOUNT] = (\n        'service-account-1@gcpdiag-iam1-aaaa.iam.gserviceaccount.com')\n    mock_is_service_account_existing.side_effect = [False, True]\n    step = job_permissions.DataflowWorkerServiceAccountPermissions()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    # 1 org policy check + 1 sa perm check + 2 service agent perm checks\n    self.assertEqual(self.add_child_patch.call_count, 4)\n    self.assertIsInstance(self.add_child_patch.call_args_list[0][0][0],\n                          crm_gs.OrgPolicyCheck)\n    self.assertIsInstance(\n        self.add_child_patch.call_args_list[1][1]['child'],\n        iam_gs.IamPolicyCheck,\n    )\n    self.assertIsInstance(\n        self.add_child_patch.call_args_list[2][1]['child'],\n        iam_gs.IamPolicyCheck,\n    )\n    self.assertIsInstance(\n        self.add_child_patch.call_args_list[3][1]['child'],\n        iam_gs.IamPolicyCheck,\n    )\n\n\nclass DataflowResourcePermissionsTest(JobPermissionsStepTestBase):\n\n  def setUp(self):\n    super().setUp()\n    self.add_child_patch = self.enterContext(\n        mock.patch(\n            'gcpdiag.runbook.dataflow.job_permissions.DataflowResourcePermissions.add_child'\n        ))\n\n  def test_logs_found_same_project(self):\n    self.mock_logs_realtime_query.return_value = [{'some': 'log'}]\n    step = job_permissions.DataflowResourcePermissions()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_logs_realtime_query.assert_called_once()\n    self.add_child_patch.assert_called_once()\n    self.assertIsInstance(self.add_child_patch.call_args[0][0],\n                          iam_gs.IamPolicyCheck)\n\n  def test_logs_found_cross_project(self):\n    self.params[flags.CROSS_PROJECT_ID] = 'cross-project'\n    self.mock_logs_realtime_query.return_value = [{'some': 'log'}]\n    step = job_permissions.DataflowResourcePermissions()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_logs_realtime_query.assert_called_once()\n    self.add_child_patch.assert_called_once()\n    added_step = self.add_child_patch.call_args[0][0]\n    self.assertIsInstance(added_step, iam_gs.IamPolicyCheck)\n    self.assertEqual(added_step.project, 'cross-project')\n\n  def test_no_logs_found(self):\n    self.mock_logs_realtime_query.return_value = []\n    step = job_permissions.DataflowResourcePermissions()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_logs_realtime_query.assert_called_once()\n    self.add_child_patch.assert_not_called()\n    self.mock_interface.info.assert_called_with(\n        'No Cloud Storage buckets related errors found in the logs',\n        step_type='INFO',\n    )\n\n\nclass DataflowPermissionsEndTest(JobPermissionsStepTestBase):\n\n  def test_end_step(self):\n    step = job_permissions.DataflowPermissionsEnd()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.info.assert_called_once_with(\n        'Dataflow Resources Permissions Checks Completed', step_type='INFO')\n\n\nif __name__ == '__main__':\n  unittest.main()\n"
  },
  {
    "path": "gcpdiag/runbook/dataflow/snapshots/failed_streaming_pipeline.txt",
    "content": "dataflow_job_id=2024-06-19_09_43_07-14927685200167458422,job_region=us-central1,project_id=gcpdiag-\ndataflow1-aaaa\n\ndataflow/failed-streaming-pipeline: Diagnostic checks for failed Dataflow Streaming Pipelines.\n\n  Provides a DiagnosticTree to check for issues related to failed streaming\n  pipelines.\n\n  - Examples:\n    - Pipeline failed to launch\n    - Workers not starting\n  \n[START]: Start Step for failed streaming pipelines runbook.\n[INFO]: name: gcpdiag test - datafusion1: id: gcpdiag-datafusion1-aaaa\n\n   - gcs_to_pubsub                                                        [OK]\n     [REASON]\n       Successfully found job 2024-06-19_09_43_07-14927685200167458422 in region us-central1\n\n[AUTOMATED STEP]: Checks if a Dataflow job is indeed a streaming job by field JobType.\n\n   - gcs_to_pubsub                                                        [OK]\n     [REASON]\n     Job is of type streaming\n[AUTOMATED STEP]: Checks SDK is not in the list that might trigger known SDK issues.\n\n   - gcs_to_pubsub                                                        [OK]\n     [REASON]\n     Dataflow job Beam SDK is supported.\n[GATEWAY]: Checks if a Dataflow job graph is successfully constructed.\n[AUTOMATED STEP]: Checks if a Dataflow job has visible logs.\n\n   - gcpdiag-datafusion1-aaaa                                             [OK]\n     [REASON]\n     Dataflow Logs are not excluded\n[END]: End step.\n[INFO]: No more checks to perform.\n\n\n"
  },
  {
    "path": "gcpdiag/runbook/dataflow/snapshots/job_permissions.txt",
    "content": "custom_flag=dataflow,principal=user@xyz.com,project_id=gcpdiag-\ndataflow1-aaaa,worker_service_account=dataflow-worker@gcpdiag-dataflow1-aaaa.iam.gserviceaccount.com\n\ndataflow/job-permissions: Analysis and Resolution of Dataflow Jobs Permissions issues.\n\n  This runbook investigates Dataflow permissions and recommends remediation steps.\n\n  Areas Examined:\n  - Dataflow User Account Permissions: Verify that individual Dataflow users have the necessary\n    permissions to access and manage Dataflow jobs (e.g., create,update,cancel).\n\n  - Dataflow Service Account Permissions: Verify that the Dataflow Service Account has the required\n    permissions to execute and manage the Dataflow jobs\n\n  - Dataflow Worker Service Account: Verify that the Dataflow Worker Service Account has the\n    necessary permissions for worker instances within a Dataflow job to access input and\n    output resources during job execution.\n\n  - Dataflow Resource Permissions: Verify that Dataflow resources (e.g., Cloud Storage buckets,\n    BigQuery datasets) have the necessary permissions to be accessed and used by Dataflow jobs.\n\n  By ensuring that Dataflow resources have the necessary permissions, you\n  can prevent errors and ensure that your jobs run smoothly.\n  \n[START]: Executing default start step for runbooks.\n[AUTOMATED STEP]: Check the Authenticated User account permissions.\n[AUTOMATED STEP]: Verify that user:user@xyz.com has required permissions/roles in project/gcpdiag-dataflow1-aaaa.\n\n   - projects/gcpdiag-dataflow1-aaaa                                      [FAIL]\n     [REASON]\n     user:user@xyz.com does not have at least one of the expected roles:\n     roles/dataflow.developer, roles/iam.serviceAccountUser.\n\n     [REMEDIATION]\n     Grant a role containing the missing permissions by following the instructions in [1].\n     Refer to [2] for a list of Google Cloud predefined roles.\n\n     Note: Consider consulting with project administrators regarding the most appropriate standard or custom role to grant.\n\n     [1] <https://cloud.google.com/iam/docs/grant-role-console>\n     [2] <https://cloud.google.com/iam/docs/understanding-roles>\n\n[AUTOMATED STEP]: Verify that serviceAccount:service-12340010@dataflow-service-producer-prod.iam.gserviceaccount.com has required permissions/roles in project/gcpdiag-dataflow1-aaaa.\n\n   - projects/gcpdiag-dataflow1-aaaa                                      [FAIL]\n     [REASON]\n     The principal `serviceAccount:service-12340010@dataflow-service-producer-prod.iam.gserviceaccount.com` is missing at least one of the expected roles in the IAM policy:\n     Missing roles: roles/dataflow.serviceAgent.\n\n     [REMEDIATION]\n     Grant a role that contains the required permissions. Refer to the guide [1] for details.\n\n     [1] <https://cloud.google.com/dataflow/docs/concepts/security-and-permissions#df-service-account>\n\n[GATEWAY]: Checking dataflow worker service account permissions.\n[INFO]: dataflow-worker@gcpdiag-dataflow1-aaaa.iam.gserviceaccount.com\n\n   - gcpdiag-datafusion1-aaaa                                             [FAIL]\n     [REASON]\n     Service Account `dataflow-worker@gcpdiag-dataflow1-aaaa.iam.gserviceaccount.com` associated with the Dataflow job was not found in project `gcpdiag-dataflow1-aaaa` or the specified cross-project.\n\n     [REMEDIATION]\n     Specify the project where the service account resides using the `cross_project_project` parameter.\n\n[AUTOMATED STEP]: Check the Dataflow Resource permissions.\n[INFO]: No Cloud Storage buckets related errors found in the logs\n[END]: Permissions checks completed.\n[INFO]: Dataflow Resources Permissions Checks Completed\n\n\n"
  },
  {
    "path": "gcpdiag/runbook/dataflow/templates/generics.jinja",
    "content": "{% block failed_streaming_pipeline_job_found_success_reason %}\n  Successfully found job {job_id} in region {region}\n{% endblock failed_streaming_pipeline_job_found_success_reason %}\n\n{% block failed_streaming_pipeline_job_found_failure_reason %}\n  Failed to find job {job_id} in region {region}\n{% endblock failed_streaming_pipeline_job_found_failure_reason %}\n\n{% block failed_streaming_pipeline_check_common_errors_success_reason %}\n   The Dataflow job state is {state}.\n{% endblock failed_streaming_pipeline_check_common_errors_success_reason %}\n\n{% block failed_streaming_pipeline_check_common_errors_failure_reason %}\n  Job state for job {job_id} is Failed.\n{% endblock failed_streaming_pipeline_check_common_errors_failure_reason %}\n\n{% block failed_streaming_pipeline_check_common_errors_failure_remediation %}\n  Refer to the Dataflow Monitoring Interface for the specific error.\n  Refer to the common errors documentation [1] to resolve the job errors.\n\n  [1] <https://cloud.google.com/dataflow/docs/guides/common-errors#pipeline_errors>\n{% endblock failed_streaming_pipeline_check_common_errors_failure_remediation %}\n"
  },
  {
    "path": "gcpdiag/runbook/dataflow/templates/permissions.jinja",
    "content": "{% block dataflow_service_account_success_reason %}\nThe principal `{principal}` has the expected {permissions_or_roles} in the IAM policy.\nPresent {permissions_or_roles}: {present_permissions_or_roles}.\n{% endblock  dataflow_service_account_success_reason %}\n\n{% block  dataflow_service_account_failure_reason %}\nThe principal `{principal}` is missing at least one of the expected {permissions_or_roles} in the IAM policy:\nMissing {permissions_or_roles}: {missing_permissions_or_roles}.\n{% endblock  dataflow_service_account_failure_reason %}\n\n{% block  dataflow_service_account_failure_remediation %}\nGrant a role that contains the required permissions. Refer to the guide [1] for details.\n\n[1] <https://cloud.google.com/dataflow/docs/concepts/security-and-permissions#df-service-account>\n{% endblock  dataflow_service_account_failure_remediation %}\n\n{% block dataflow_worker_service_account_success_reason %}\nThe principal `{principal}` has the expected {permissions_or_roles} in the IAM policy.\nPresent {permissions_or_roles}: {present_permissions_or_roles}.\n{% endblock  dataflow_worker_service_account_success_reason %}\n\n{% block  dataflow_worker_service_account_failure_reason %}\nThe principal `{principal}` is missing at least one of the expected {permissions_or_roles} in the IAM policy:\nMissing {permissions_or_roles}: {missing_permissions_or_roles}.\n{% endblock  dataflow_worker_service_account_failure_reason %}\n\n{% block  dataflow_worker_service_account_failure_remediation %}\nGrant a role that contains the required permissions. Refer to the guide [1] for details.\n\n[1] <https://cloud.google.com/dataflow/docs/concepts/security-and-permissions#add-roles>\n{% endblock dataflow_worker_service_account_failure_remediation %}\n\n{% block dataflow_cross_project_worker_service_account_success_reason %}\nThe principal `{principal}` has the expected {permissions_or_roles} in the IAM policy.\nPresent {permissions_or_roles}: {present_permissions_or_roles}.\n{% endblock  dataflow_cross_project_worker_service_account_success_reason %}\n\n{% block  dataflow_cross_project_worker_service_account_failure_reason %}\nThe principal `{principal}` is missing at least one of the expected {permissions_or_roles} in the IAM policy:\nMissing {permissions_or_roles}: {missing_permissions_or_roles}.\n{% endblock  dataflow_cross_project_worker_service_account_failure_reason %}\n\n{% block  dataflow_cross_project_worker_service_account_failure_remediation %}\nGrant a role that contains the required permissions. Refer to the guide [1] for details.\n\n[1] <https://cloud.google.com/dataflow/docs/concepts/security-and-permissions#user-managed>\n{% endblock dataflow_cross_project_worker_service_account_failure_remediation %}\n\n{% block projectcheck_failure_reason %}\nService Account `{service_account}` associated with the Dataflow job was not found in project `{project_id}` or the specified cross-project.\n{% endblock projectcheck_failure_reason %}\n\n{% block projectcheck_failure_remediation %}\nSpecify the project where the service account resides using the `cross_project_project` parameter.\n{% endblock projectcheck_failure_remediation %}\n"
  },
  {
    "path": "gcpdiag/runbook/dataproc/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/runbook/dataproc/cluster_creation.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Module containing Dataproc cluster creation diagnostic tree and custom steps.\"\"\"\n\nimport json\nfrom datetime import datetime\n\nfrom gcpdiag import runbook, utils\nfrom gcpdiag.queries import (crm, dataproc, gce, iam, logs, network,\n                             networkmanagement)\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.crm import generalized_steps as crm_gs\nfrom gcpdiag.runbook.dataproc import flags\nfrom gcpdiag.runbook.iam import generalized_steps as iam_gs\nfrom gcpdiag.runbook.logs import generalized_steps as logs_gs\n\n\nclass ClusterCreation(runbook.DiagnosticTree):\n  \"\"\"Provides a comprehensive analysis of common issues which affect Dataproc cluster creation.\n\n  This runbook focuses on a range of potential problems for Dataproc clusters on\n  Google Cloud Platform. By conducting a series of checks, the runbook aims to\n  pinpoint the root cause of cluster creation difficulties.\n\n  The following areas are examined:\n\n  - Stockout errors: Evaluates Logs Explorer logs regarding stockout in the\n  region/zone.\n\n  - Quota availability: Checks for the quota availability in Dataproc cluster\n  project.\n\n  - Network configuration: Performs GCE Network Connectivity Tests, checks\n  necessary firewall rules, external/internal IP configuration.\n\n  - Cross-project configuration: Checks if the service account is not in the\n  same\n  project and reviews additional\n    roles and organization policies enforcement.\n\n  - Shared VPC configuration: Checks if the Dataproc cluster uses a Shared VPC\n  network and\n  evaluates if right service account roles are added.\n\n  - Init actions script failures: Evaluates Logs Explorer\n  logs regarding init actions script failures or timeouts.\n  \"\"\"\n\n  parameters = {\n      flags.PROJECT_ID: {\n          'type': str,\n          'help': 'The Project ID where the Dataproc cluster is located',\n          'required': True,\n      },\n      flags.CLUSTER_NAME: {\n          'type': str,\n          'help': ('Dataproc cluster Name of an existing/active resource'),\n          'deprecated': True,\n          'new_parameter': 'dataproc_cluster_name',\n      },\n      flags.DATAPROC_CLUSTER_NAME: {\n          'type': str,\n          'help': ('Dataproc cluster Name of an existing/active resource'),\n          'required': True,\n      },\n      flags.REGION: {\n          'type': str,\n          'help': 'Dataproc cluster Region',\n          'required': True,\n      },\n      flags.CLUSTER_UUID: {\n          'type': str,\n          'help': 'Dataproc cluster UUID',\n          # 'required': True, cannot be required due\n          # to limitations on Dataproc API side\n      },\n      flags.PROJECT_NUMBER: {\n          'type': str,\n          'help': 'The Project Number where the Dataproc cluster is located',\n      },\n      flags.SERVICE_ACCOUNT: {\n          'type':\n              str,\n          'help':\n              ('Dataproc cluster Service Account used to create the resource'),\n      },\n      flags.CONSTRAINT: {\n          'type':\n              bool,\n          'help': ('Checks if the Dataproc cluster has an enforced organization'\n                   ' policy constraint'),\n      },\n      flags.STACKDRIVER: {\n          'type': str,\n          'help': ('Checks if stackdriver logging is enabled for further'\n                   ' troubleshooting'),\n          'default': True,\n      },\n      flags.ZONE: {\n          'type': str,\n          'help': 'Dataproc cluster Zone',\n      },\n      flags.NETWORK: {\n          'type': str,\n          'help': 'Dataproc cluster Network',\n          'deprecated': True,\n          'new_parameter': 'dataproc_network',\n      },\n      flags.DATAPROC_NETWORK: {\n          'type': str,\n          'help': 'Dataproc cluster Network',\n      },\n      flags.SUBNETWORK: {\n          'type': str,\n          'help': 'Dataproc cluster Subnetwork',\n      },\n      flags.INTERNAL_IP_ONLY: {\n          'type':\n              bool,\n          'help': ('Checks if the Dataproc cluster has been created with only'\n                   ' Internal IP'),\n      },\n      flags.START_TIME: {\n          'type': datetime,\n          'help': 'Start time of the issue',\n      },\n      flags.END_TIME: {\n          'type': datetime,\n          'help': 'End time of the issue',\n      },\n      flags.CROSS_PROJECT_ID: {\n          'type':\n              str,\n          'help':\n              ('Cross Project ID, where service account is located if it is not'\n               ' in the same project as the Dataproc cluster'),\n      },\n      flags.HOST_VPC_PROJECT_ID: {\n          'type': str,\n          'help': 'Project ID of the Shared VPC network',\n      },\n  }\n\n  def legacy_parameter_handler(self, parameters):\n    \"\"\"Handles legacy parameters.\"\"\"\n    if flags.CLUSTER_NAME in parameters:\n      parameters[flags.DATAPROC_CLUSTER_NAME] = parameters.pop(\n          flags.CLUSTER_NAME)\n    if flags.NETWORK in parameters:\n      parameters[flags.DATAPROC_NETWORK] = parameters.pop(flags.NETWORK)\n\n  def build_tree(self):\n    \"\"\"Describes step relationships.\"\"\"\n    start = ClusterCreationStart()\n    self.add_start(start)\n    cluster_details_gateway = ClusterDetailsDependencyGateway()\n    self.add_step(parent=start, child=cluster_details_gateway)\n    self.add_end(ClusterCreationEnd())\n\n\nclass ClusterCreationStart(runbook.StartStep):\n  \"\"\"Initiates diagnostics for SSH Cluster Creation issues.\n\n  This step interacts with the Dataproc API to get the cluster for investigation.\n  When the cluster is found and it is in `ERROR` state, the cluster details\n  are then used to set variables to be used by the subsequent child steps.\n  \"\"\"\n\n  def execute(self):\n    \"\"\"\n    Initiating diagnostics for Cluster Creation issues.\n    \"\"\"\n    project = crm.get_project(op.get(flags.PROJECT_ID))\n    op.put('cluster_exists', False)\n\n    try:\n      cluster = dataproc.get_cluster(project=op.get(flags.PROJECT_ID),\n                                     region=op.get(flags.REGION),\n                                     cluster_name=op.get(\n                                         flags.DATAPROC_CLUSTER_NAME))\n    except utils.GcpApiError as err:\n      op.add_skipped(\n          project,\n          reason=\n          (f'Could not get cluster {op.get(flags.DATAPROC_CLUSTER_NAME)}'\n           f'in region {op.get(flags.REGION)} and project {op.get(flags.PROJECT_ID)}'\n           f'due to {err}'))\n    else:\n      if cluster:\n        op.put('cluster_exists', True)\n        if cluster.status == 'ERROR':\n          op.info(f'Cluster {op.get(flags.DATAPROC_CLUSTER_NAME)} in project' \\\n          f'{op.get(flags.PROJECT_ID)} is in error state')\n          # set parameters required for the next stepsruinvestigates that require cluster details\n          if not cluster.is_stackdriver_logging_enabled:\n            op.put(flags.STACKDRIVER, cluster.is_stackdriver_logging_enabled)\n\n          if not op.get(flags.SERVICE_ACCOUNT):\n            if cluster.vm_service_account_email:\n              op.put(flags.SERVICE_ACCOUNT, cluster.vm_service_account_email)\n              op.info(f'Service Account:{cluster.vm_service_account_email}')\n\n          if not op.get(flags.DATAPROC_NETWORK):\n            if cluster.gce_network_uri:\n              op.put(flags.DATAPROC_NETWORK, cluster.gce_network_uri)\n              op.info(f'Network: {cluster.gce_network_uri}')\n\n          if network.get_network_from_url(op.get(flags.DATAPROC_NETWORK)):\n            op.put(\n                flags.HOST_VPC_PROJECT_ID,\n                network.get_network_from_url(op.get(\n                    flags.DATAPROC_NETWORK)).project_id,\n            )\n        else:\n          op.add_skipped(\n              project,\n              reason=\n              (f'Cluster {op.get(flags.DATAPROC_CLUSTER_NAME)} in project '\n               f'{op.get(flags.PROJECT_ID)} is not in error state due to cluster '\n               f'creation issues, please choose another issue category to investigate.'\n              ))\n\n\nclass ClusterCreationStockout(runbook.Step):\n  \"\"\"Check for cluster creation due to stockout\"\"\"\n\n  def execute(self):\n    \"\"\"Check for stockout entries in Cloud logging\"\"\"\n    stockout_error_logs = [\n        'ZONE_RESOURCE_POOL_EXHAUSTED',\n        'does not have enough resources available to fulfill the request',\n        'resource pool exhausted',\n        'does not exist in zone',\n    ]\n    message_filter = '\"' + '\" OR \"'.join(stockout_error_logs) + '\"'\n    check_stockout_issue = logs_gs.CheckIssueLogEntry()\n    check_stockout_issue.project_id = op.get(flags.PROJECT_ID)\n    check_stockout_issue.filter_str = get_log_filter(\n        cluster_name=op.get(flags.DATAPROC_CLUSTER_NAME),\n        message_filter=f'protoPayload.status.message=~({message_filter})',\n        log_id='cloudaudit.googleapis.com/activity',\n    )\n    check_stockout_issue.template = 'logging::dataproc_cluster_stockout'\n    check_stockout_issue.resource_name = op.get(flags.DATAPROC_CLUSTER_NAME)\n    check_stockout_issue.issue_pattern = stockout_error_logs\n    self.add_child(child=check_stockout_issue)\n\n\nclass ClusterCreationQuota(runbook.Step):\n  \"\"\"Check for cluster creation errors due to insufficient quota\"\"\"\n\n  def execute(self):\n    \"\"\"Check for quota entries in Cloud logging\"\"\"\n    quota_log_match_str = 'Insufficient .* quota'\n    check_quota_issues = logs_gs.CheckIssueLogEntry()\n    check_quota_issues.project_id = op.get(flags.PROJECT_ID)\n    check_quota_issues.filter_str = get_log_filter(\n        cluster_name=op.get(flags.DATAPROC_CLUSTER_NAME),\n        message_filter=f'protoPayload.status.message=~\"{quota_log_match_str}\"',\n        log_id='cloudaudit.googleapis.com/activity',\n    )\n    check_quota_issues.template = 'logging::dataproc_cluster_quota'\n    check_quota_issues.resource_name = op.get(flags.DATAPROC_CLUSTER_NAME)\n    check_quota_issues.issue_pattern = [quota_log_match_str]\n\n    self.add_child(child=check_quota_issues)\n\n\nclass ClusterDetailsDependencyGateway(runbook.Gateway):\n  \"\"\"Decision point for child steps that require cluster details and those that dont.\n\n  Uses cluster details from the Dataproc API set in the start step to reduce scope of\n  errors from invalid input\n  \"\"\"\n\n  def execute(self):\n    \"\"\"Execute child steps depending on if they require details from existing cluster or not\"\"\"\n\n    cluster_exists = op.get('cluster_exists', False)\n    if cluster_exists:\n      # add child steps that depend on cluster details from the API\n      self.add_child(CheckInitScriptFailure())\n      self.add_child(CheckClusterNetwork())\n      self.add_child(InternalIpGateway())\n      self.add_child(ServiceAccountExists())\n      self.add_child(CheckSharedVPCRoles())\n    else:\n      # add child steps that do not depend on cluster details from the API\n      self.add_child(ClusterCreationQuota())\n      self.add_child(ClusterCreationStockout())\n\n\nclass CheckClusterNetwork(runbook.Step):\n  \"\"\"Verify that the nodes in the cluster can communicate with each other.\n\n  The Compute Engine Virtual Machine instances (VMs) in a Dataproc cluster must\n  be able to communicate with each other using ICMP, TCP (all ports), and UDP\n  (all ports) protocols.\n  \"\"\"\n\n  template = 'network::cluster_network'\n\n  def execute(self):\n    \"\"\"Verify network connectivity among nodes in the cluster.\"\"\"\n    # Gathering cluster details.\n    cluster = dataproc.get_cluster(project=op.get(flags.PROJECT_ID),\n                                   region=op.get(flags.REGION),\n                                   cluster_name=op.get(\n                                       flags.DATAPROC_CLUSTER_NAME))\n    # Skip this step if the cluster does not exist\n    if cluster is None:\n      op.add_uncertain(\n          cluster,\n          reason=op.prep_msg(op.UNCERTAIN_REASON),\n          remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION),\n      )\n    else:\n      # Add the zone of the cluster\n      if not op.get(flags.ZONE):\n        if cluster.zone:\n          op.put(flags.ZONE, cluster.zone)\n          op.info(f'Zone: {cluster.zone}')\n\n      # retrieve the zone from the cluster\n      cluster_zone = op.get(flags.ZONE)\n      if cluster_zone is None:\n        op.add_skipped(\n            cluster,\n            reason=('Zone cannot be retrieved from the cluster. Zone:'\n                    f' {cluster_zone}'),\n        )\n        return\n      # Skip DPGKE clusters\n      if not cluster.is_gce_cluster:\n        op.add_skipped(\n            cluster,\n            reason='This is a Dataproc on GKE cluster, skipping this step.',\n        )\n      # Skip single node clusters\n      if cluster.is_single_node_cluster:\n        op.add_skipped(\n            cluster,\n            reason='This is a single node cluster, skipping this step.')\n      # target (master node or master node 0)\n      if cluster.is_ha_cluster:\n        target = gce.get_instance(\n            project_id=op.get(flags.PROJECT_ID),\n            zone=cluster_zone,\n            instance_name=f'{cluster.name}-m-0',\n        )\n      else:\n        target = gce.get_instance(\n            project_id=op.get(flags.PROJECT_ID),\n            zone=cluster_zone,\n            instance_name=f'{cluster.name}-m',\n        )\n      target_ip = target.get_network_ip_for_instance_interface(\n          cluster.gce_network_uri)\n      # source (worker node 0)\n      source = gce.get_instance(\n          project_id=op.get(flags.PROJECT_ID),\n          zone=cluster_zone,\n          instance_name=f'{cluster.name}-w-0',\n      )\n      source_ip = source.get_network_ip_for_instance_interface(\n          cluster.gce_network_uri)\n\n      is_connectivity_fine = True\n\n      # run connectivity tests between master and worker\n      op.info('Running connectivity tests.')\n      # ICMP\n      op.info('ICMP test.')\n      connectivity_test_result = networkmanagement.run_connectivity_test(\n          project_id=op.get(flags.PROJECT_ID),\n          src_ip=str(source_ip)[:-3],\n          dest_ip=str(target_ip)[:-3],\n          dest_port=None,\n          protocol='ICMP',\n      )\n      op.info('Connectivity test result: ' +\n              connectivity_test_result['reachabilityDetails']['result'])\n      if (connectivity_test_result['reachabilityDetails']['result']\n          != 'REACHABLE'):\n        is_connectivity_fine = False\n        for trace in connectivity_test_result['reachabilityDetails']['traces']:\n          op.info('Endpoint details: ' +\n                  json.dumps(trace['endpointInfo'], indent=2))\n          last_step = None\n          for step in trace['steps']:\n            last_step = step\n          op.info('Last step: ' + json.dumps(last_step, indent=2))\n          op.info('Full list of steps: ' + json.dumps(trace['steps'], indent=2))\n        op.info('ICMP traffic must be allowed. Check the result of the'\n                ' connectivity ' +\n                'test to verify what is blocking the traffic, ' +\n                'in particular Last step and Full list of steps.')\n      # TCP\n      op.info('TCP test.')\n      connectivity_test_result = networkmanagement.run_connectivity_test(\n          project_id=op.get(flags.PROJECT_ID),\n          src_ip=str(source_ip)[:-3],\n          dest_ip=str(target_ip)[:-3],\n          dest_port=8088,\n          protocol='TCP',\n      )\n      op.info('Connectivity test result: ' +\n              connectivity_test_result['reachabilityDetails']['result'])\n      if (connectivity_test_result['reachabilityDetails']['result']\n          != 'REACHABLE'):\n        is_connectivity_fine = False\n        for trace in connectivity_test_result['reachabilityDetails']['traces']:\n          op.info('Endpoint details: ' +\n                  json.dumps(trace['endpointInfo'], indent=2))\n          last_step = None\n          for step in trace['steps']:\n            last_step = step\n          op.info('Last step: ' + json.dumps(last_step, indent=2))\n          op.info('Full list of steps: ' + json.dumps(trace['steps'], indent=2))\n        op.info(\n            'TCP traffic must be allowed. Check the result of the connectivity'\n            ' test' + 'to verify what is blocking the traffic, ' +\n            'in particular Last step and Full list of steps.')\n      # UCP\n      op.info('UDP test.')\n      connectivity_test_result = networkmanagement.run_connectivity_test(\n          project_id=op.get(flags.PROJECT_ID),\n          src_ip=str(source_ip)[:-3],\n          dest_ip=str(target_ip)[:-3],\n          dest_port=8088,\n          protocol='UDP',\n      )\n      op.info('Connectivity test result: ' +\n              connectivity_test_result['reachabilityDetails']['result'])\n      if (connectivity_test_result['reachabilityDetails']['result']\n          != 'REACHABLE'):\n        is_connectivity_fine = False\n        for trace in connectivity_test_result['reachabilityDetails']['traces']:\n          op.info('Endpoint details: ' +\n                  json.dumps(trace['endpointInfo'], indent=2))\n          last_step = None\n          for step in trace['steps']:\n            last_step = step\n          op.info('Last step: ' + json.dumps(last_step, indent=2))\n          op.info('Full list of steps: ' + json.dumps(trace['steps'], indent=2))\n        op.info(\n            'UDP traffic must be allowed. Check the result of the connectivity'\n            ' test ' + 'to verify what is blocking the traffic, ' +\n            'in particular Last step and Full list of steps.')\n\n      if is_connectivity_fine:\n        op.add_ok(cluster,\n                  op.prep_msg(op.SUCCESS_REASON, cluster_name=cluster.name))\n      else:\n        op.add_failed(\n            cluster,\n            reason=op.prep_msg(op.FAILURE_REASON, cluster_name=cluster.name),\n            remediation=op.prep_msg(op.FAILURE_REMEDIATION),\n        )\n\n\nclass InternalIpGateway(runbook.Gateway):\n  \"\"\"Check if the cluster is using internal IP only.\n\n  Check if the Dataproc cluster that is isolated from the public internet\n  whose VM instances communicate over a private IP subnetwork (cluster VMs are\n  not assigned public IP addresses).\n  \"\"\"\n\n  def execute(self):\n    \"\"\"Checking if the cluster is using internal IP only.\"\"\"\n    # Gathering cluster details.\n    cluster = dataproc.get_cluster(project=op.get(flags.PROJECT_ID),\n                                   region=op.get(flags.REGION),\n                                   cluster_name=op.get(\n                                       flags.DATAPROC_CLUSTER_NAME))\n    is_internal_ip_only = None\n    # If cluster cannot be found, gather details from flags\n    if cluster is None:\n      is_internal_ip_only = op.get(flags.INTERNAL_IP_ONLY)\n      if is_internal_ip_only is None:\n        op.add_skipped(\n            cluster,\n            'The cluster and the internalIpOnly config cannot be found,'\n            ' skipping this step. ' +\n            'Please provide internal_ip_only as input parameter ' +\n            'if the cluster is deleted or keep the cluster in error state.',\n        )\n        return\n      subnetwork_uri = op.get(flags.SUBNETWORK)\n      if subnetwork_uri is None:\n        op.add_skipped(\n            cluster,\n            'The cluster and the subnetworkUri config cannot be found, skipping'\n            ' this step. '\n            'Please provide subnetwork_uri as input parameter '\n            'if the cluster is deleted or keep the cluster in error state.',\n        )\n        return\n    else:\n      is_internal_ip_only = cluster.is_internal_ip_only\n      subnetwork_uri = cluster.gce_subnetwork_uri\n    # Add the related configs of the cluster\n    if is_internal_ip_only is not None and subnetwork_uri is not None:\n      # Add the internal IP config of the cluster\n      if not op.get(flags.INTERNAL_IP_ONLY):\n        if cluster.is_internal_ip_only is not None:\n          op.put(flags.INTERNAL_IP_ONLY, cluster.is_internal_ip_only)\n          op.info(f'Internal IP only: {cluster.is_internal_ip_only}')\n      # Add the subnetwork of the cluster\n      if not op.get(flags.SUBNETWORK):\n        op.put(flags.SUBNETWORK, subnetwork_uri)\n        op.add_ok(cluster, reason=f'Subnetwork: {subnetwork_uri}')\n    # If the cluster is in private subnet, check that PGA is enabled\n    # otherwise end this step\n    if is_internal_ip_only:\n      self.add_child(child=CheckPrivateGoogleAccess())\n    else:\n      op.add_ok(cluster, reason='The cluster is in a public subnet.')\n\n\nclass CheckPrivateGoogleAccess(runbook.Step):\n  \"\"\"Check if the subnetwork of the cluster has private google access enabled.\n\n  Checking if the subnetwork of the cluster has private google access enabled.\n  \"\"\"\n\n  template = 'network::private_google_access'\n\n  def execute(self):\n    \"\"\"Checking if the subnetwork of the cluster has private google access enabled.\"\"\"\n    # taking cluster details\n    cluster = dataproc.get_cluster(project=op.get(flags.PROJECT_ID),\n                                   region=op.get(flags.REGION),\n                                   cluster_name=op.get(\n                                       flags.DATAPROC_CLUSTER_NAME))\n    subnetwork_uri = op.get(flags.SUBNETWORK)\n    subnetwork_obj = network.get_subnetwork_from_url(subnetwork_uri)\n\n    if subnetwork_obj.is_private_ip_google_access():\n      op.add_ok(\n          cluster,\n          reason=op.prep_msg(op.SUCCESS_REASON, subnetwork_uri=subnetwork_uri),\n      )\n\n    else:\n      op.add_failed(\n          cluster,\n          reason=op.prep_msg(op.FAILURE_REASON, subnetwork_uri=subnetwork_uri),\n          remediation=op.prep_msg(op.FAILURE_REMEDIATION),\n      )\n\n\nclass ServiceAccountExists(runbook.Gateway):\n  \"\"\"Verify service account and permissions in Dataproc cluster project or another project.\n\n  Decides whether to check for service account roles\n  - in CROSS_PROJECT_ID, if specified by customer\n  - in PROJECT_ID\n  \"\"\"\n\n  template = 'permissions::projectcheck'\n\n  def execute(self):\n    \"\"\"Checking service account project.\"\"\"\n    sa_email = op.get(flags.SERVICE_ACCOUNT)\n    project = crm.get_project(op.get(flags.PROJECT_ID))\n    op.info(op.get(flags.SERVICE_ACCOUNT))\n    if sa_email is None:\n      op.add_skipped(\n          project,\n          reason='Service account not provided as input parameter',\n      )\n      return\n    sa_exists = iam.is_service_account_existing(email=sa_email,\n                                                context=op.get_context())\n    cross_project_id = op.get(flags.CROSS_PROJECT_ID)\n    # Only check in cross project when the flag is provided\n    sa_exists_cross_project = False\n    if cross_project_id:\n      cross_project_context = op.get_context().copy_with(\n          project_id=cross_project_id)\n      sa_exists_cross_project = iam.is_service_account_existing(\n          email=sa_email, context=cross_project_context)\n\n    if sa_exists:\n      op.info(\n          'VM Service Account associated with Dataproc cluster was found in the'\n          ' same project')\n      op.info('Checking permissions.')\n      # Check for Service Account permissions\n      sa_permission_check = iam_gs.IamPolicyCheck()\n      sa_permission_check.project = op.get(flags.PROJECT_ID)\n      sa_permission_check.principal = (\n          f'serviceAccount:{op.get(flags.SERVICE_ACCOUNT)}')\n      sa_permission_check.require_all = True\n      sa_permission_check.roles = ['roles/dataproc.worker']\n      self.add_child(child=sa_permission_check)\n    elif sa_exists_cross_project:\n      op.info('VM Service Account associated with Dataproc cluster was found in'\n              ' cross project')\n      # Check if constraint is enforced\n      op.info('Checking constraints on service account project.')\n      orgpolicy_constraint_check = crm_gs.OrgPolicyCheck()\n      orgpolicy_constraint_check.project = op.get(flags.CROSS_PROJECT_ID)\n      orgpolicy_constraint_check.constraint = (\n          'constraints/iam.disableCrossProjectServiceAccountUsage')\n      orgpolicy_constraint_check.is_enforced = False\n      self.add_child(orgpolicy_constraint_check)\n\n      # Check Service Account roles\n      op.info('Checking roles in service account project.')\n      sa_permission_check = iam_gs.IamPolicyCheck()\n      sa_permission_check.project = op.get(flags.CROSS_PROJECT_ID)\n      sa_permission_check.principal = (\n          f'serviceAccount:{op.get(flags.SERVICE_ACCOUNT)}')\n      sa_permission_check.require_all = True\n      sa_permission_check.roles = [\n          'roles/iam.serviceAccountUser',\n          'roles/dataproc.worker',\n      ]\n      self.add_child(child=sa_permission_check)\n\n      # Check Service Agent Service Account roles\n      op.info('Checking service agent service account roles on service account'\n              ' project.')\n      # project = crm.get_project(op.get(flags.PROJECT_ID))\n      service_agent_sa = (\n          f'service-{project.number}@dataproc-accounts.iam.gserviceaccount.com')\n      service_agent_permission_check = iam_gs.IamPolicyCheck()\n      service_agent_permission_check.project = op.get(flags.CROSS_PROJECT_ID)\n      service_agent_permission_check.principal = (\n          f'serviceAccount:{service_agent_sa}')\n      service_agent_permission_check.require_all = True\n      service_agent_permission_check.roles = [\n          'roles/iam.serviceAccountUser',\n          'roles/iam.serviceAccountTokenCreator',\n      ]\n      self.add_child(child=service_agent_permission_check)\n\n      # Check Compute Agent Service Account\n      op.info('Checking compute agent service account roles on service account'\n              ' project.')\n      compute_agent_sa = (\n          f'service-{project.number}@compute-system.iam.gserviceaccount.com')\n      compute_agent_permission_check = iam_gs.IamPolicyCheck()\n      compute_agent_permission_check.project = op.get(flags.CROSS_PROJECT_ID)\n      compute_agent_permission_check.principal = (\n          f'serviceAccount:{compute_agent_sa}')\n      compute_agent_permission_check.require_all = True\n      compute_agent_permission_check.roles = [\n          'roles/iam.serviceAccountTokenCreator'\n      ]\n      self.add_child(child=compute_agent_permission_check)\n    elif cross_project_id and not sa_exists_cross_project:\n      op.add_failed(\n          project,\n          reason=op.prep_msg(\n              op.FAILURE_REASON,\n              service_account=op.get(flags.SERVICE_ACCOUNT),\n              project_id=op.get(flags.PROJECT_ID),\n              cross_project_id=cross_project_id,\n          ),\n          remediation=op.prep_msg(op.FAILURE_REMEDIATION),\n      )\n    else:\n      op.add_uncertain(\n          project,\n          reason=op.prep_msg(\n              op.UNCERTAIN_REASON,\n              service_account=op.get(flags.SERVICE_ACCOUNT),\n              project_id=op.get(flags.PROJECT_ID),\n          ),\n          remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION),\n      )\n\n\nclass CheckSharedVPCRoles(runbook.Step):\n  \"\"\"Verify if dataproc cluster is using Shared VPC.\n\n  Checks for missing roles.\n  \"\"\"\n\n  def execute(self):\n    \"\"\"Verify service account roles based on Shared VPC.\"\"\"\n    project = crm.get_project(op.get(flags.PROJECT_ID))\n    if op.get(flags.HOST_VPC_PROJECT_ID) and (op.get(flags.HOST_VPC_PROJECT_ID)\n                                              != op.get(flags.PROJECT_ID)):\n      # Check Service Agent Service Account role:\n      service_agent_sa = (\n          f'service-{project.number}@dataproc-accounts.iam.gserviceaccount.com')\n      service_agent_vpc_permission_check = iam_gs.IamPolicyCheck()\n      service_agent_vpc_permission_check.project = op.get(\n          flags.HOST_VPC_PROJECT_ID)\n      service_agent_vpc_permission_check.principal = (\n          f'serviceAccount:{service_agent_sa}')\n      service_agent_vpc_permission_check.require_all = True\n      service_agent_vpc_permission_check.roles = ['roles/compute.networkUser']\n      self.add_child(child=service_agent_vpc_permission_check)\n\n      # Check Google APIs Service Account\n      op.info('Checking Google APIs service account roles on host VPC project.')\n      api_sa = f'{project.number}@cloudservices.gserviceaccount.com'\n      api_vpc_permission_check = iam_gs.IamPolicyCheck()\n      api_vpc_permission_check.project = op.get(flags.HOST_VPC_PROJECT_ID)\n      api_vpc_permission_check.principal = f'serviceAccount:{api_sa}'\n      api_vpc_permission_check.require_all = True\n      api_vpc_permission_check.roles = ['roles/compute.networkUser']\n      self.add_child(child=api_vpc_permission_check)\n    else:\n      op.add_skipped(project,\n                     reason='Cluster is not using a Shared VPC network')\n\n\nclass CheckInitScriptFailure(runbook.Step):\n  \"\"\"Verify if dataproc cluster init script failed.\n\n  The initialization action provided during cluster creation failed to install.\n  \"\"\"\n  template = 'logs_related::cluster_init'\n\n  def execute(self):\n    \"\"\"Verify Cluster init script failure.\"\"\"\n\n    init_script_log_match = 'Initialization action failed'\n    cluster_name = op.get(flags.DATAPROC_CLUSTER_NAME)\n    project = crm.get_project(op.get(flags.PROJECT_ID))\n\n    log_search_filter = f\"\"\"resource.type=\"cloud_dataproc_cluster\"\n    jsonPayload.message=~\"{init_script_log_match}\"\n    resource.labels.cluster_name=\"{cluster_name}\"\n    severity=ERROR\n    log_id(\"google.dataproc.agent\")\"\"\"\n\n    log_entries = logs.realtime_query(\n        project_id=op.get(flags.PROJECT_ID),\n        filter_str=log_search_filter,\n        start_time=op.get(flags.START_TIME),\n        end_time=op.get(flags.END_TIME),\n    )\n    if log_entries:\n      op.add_failed(\n          project,\n          reason=op.prep_msg(op.FAILURE_REASON,\n                             cluster_name=op.get(flags.DATAPROC_CLUSTER_NAME)),\n          remediation=op.prep_msg(op.FAILURE_REMEDIATION),\n      )\n    else:\n      op.add_ok(\n          project,\n          reason=op.prep_msg(\n              op.SUCCESS_REASON,\n              cluster_name=op.get(flags.DATAPROC_CLUSTER_NAME),\n              project_id=op.get(flags.PROJECT_ID),\n          ),\n      )\n\n\nclass ClusterCreationEnd(runbook.EndStep):\n  \"\"\"The end step of the runbook.\n\n  It points out all the failed steps to the user.\n  \"\"\"\n\n  def execute(self):\n    \"\"\"This is the end step of the runbook.\"\"\"\n    if op.get('cluster_exists', False):\n      op.info(\n          \"\"\"Please visit all the FAIL steps and address the suggested remediations.\n          If the cluster is still not able to be provisioned successfully,\n          run the runbook again and open a Support case. If you are missing\n          Service Account permissions, but are not able to see the Service Agent\n          Service Account go to the IAM page and check 'Include Google-provided\n          role grants'\n        \"\"\")\n    else:\n      op.info(\n          f\"\"\"Some steps were skipped because cluster {op.get(flags.DATAPROC_CLUSTER_NAME)}\n          could not be found in project {op.get(flags.PROJECT_ID)}. Most steps in this runbook\n          require that the cluster is in `ERROR` state and has not been deleted.\n          If the cluster was in `ERROR` and has been deleted, please create the cluster again and\n          rerun this runbook before deleting the cluster to rule out any cluster creation issues.\"\"\"\n      )\n\n\ndef get_log_filter(\n    cluster_name,\n    message_filter,\n    log_id,\n):\n  \"\"\"Returns log filter string for given parameters.\n\n  Args:\n    cluster_name:\n    message_filter:\n    log_id:\n  \"\"\"\n\n  log_search_filter = f\"\"\"\n    resource.type=\"cloud_dataproc_cluster\"\n    {message_filter}\n    resource.labels.cluster_name=\"{cluster_name}\"\n    severity=ERROR\n    log_id(\"{log_id}\")\n    \"\"\"\n  return log_search_filter\n"
  },
  {
    "path": "gcpdiag/runbook/dataproc/cluster_creation_test.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test class for dataproc/cluster-creation.\"\"\"\n\nimport datetime\nimport unittest\nfrom unittest import mock\n\nfrom gcpdiag import config, utils\nfrom gcpdiag.queries import apis_stub, crm, dataproc, gce\nfrom gcpdiag.runbook import dataproc as dataproc_rb\nfrom gcpdiag.runbook import op, snapshot_test_base\nfrom gcpdiag.runbook.crm import generalized_steps as crm_gs\nfrom gcpdiag.runbook.dataproc import cluster_creation, flags\nfrom gcpdiag.runbook.iam import generalized_steps as iam_gs\nfrom gcpdiag.runbook.logs import generalized_steps as logs_gs\n\nDUMMY_PROJECT_ID = 'gcpdiag-dataproc1-aaaa'\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = dataproc_rb\n  runbook_name = 'dataproc/cluster-creation'\n  config.init({'auto': True, 'interface': 'cli'})\n\n  rule_parameters = [\n      {\n          'project_id': DUMMY_PROJECT_ID,\n          'service_account':\n              (f'saworker@{DUMMY_PROJECT_ID}.iam.gserviceaccount.com'),\n          'region': 'us-central1',\n          'dataproc_cluster_name': 'good',\n          'start_time': '2024-06-18T01:00:00Z',\n          'end_time': '2024-06-22T01:00:00Z',\n      },\n      {\n          'project_id': DUMMY_PROJECT_ID,\n          'service_account':\n              (f'saworker@{DUMMY_PROJECT_ID}.iam.gserviceaccount.com'),\n          'region': 'us-central1',\n          'dataproc_cluster_name': 'good',\n          'start_time': '2024-06-23T01:00:00Z',\n          'end_time': '2024-06-24T01:00:00Z',\n      },\n      {\n          'project_id': DUMMY_PROJECT_ID,\n          'dataproc_cluster_name': 'test-deny-icmp',\n          'region': 'us-central1',\n          'start_time': '2024-06-18T01:00:00Z',\n          'end_time': '2024-06-22T01:00:00Z',\n      },\n      {\n          'project_id': 'gcpdiag-dataproc2-aaaa',\n          'dataproc_cluster_name': 'cluster-quota-issues',\n          'region': 'us-central1',\n          'start_time': '2025-06-13T16:00:55Z',\n          'end_time': '2025-06-13T17:00:55Z',\n      },\n      {\n          'project_id': 'gcpdiag-dataproc3-aaaa',\n          'dataproc_cluster_name': 'cluster-stockout-issues',\n          'region': 'us-central1',\n          'start_time': '2025-06-13T16:00:55Z',\n          'end_time': '2025-06-13T17:00:55Z',\n      },\n  ]\n\n\nclass MockMessage:\n  \"\"\"Mock messages for testing.\"\"\"\n\n  def get_msg(self, key, **kwargs):\n    del kwargs\n    return f'{key}'\n\n\nclass ClusterCreationTest(unittest.TestCase):\n\n  def test_legacy_parameter_handler(self):\n    runbook = cluster_creation.ClusterCreation()\n    parameters = {\n        'cluster_name': 'test-cluster',\n        'network': 'test-network',\n        'project_id': 'test-project',\n        'region': 'us-central1',\n    }\n    runbook.legacy_parameter_handler(parameters)\n    self.assertNotIn('cluster_name', parameters)\n    self.assertNotIn('network', parameters)\n    self.assertIn('dataproc_cluster_name', parameters)\n    self.assertIn('dataproc_network', parameters)\n    self.assertEqual(parameters['dataproc_cluster_name'], 'test-cluster')\n    self.assertEqual(parameters['dataproc_network'], 'test-network')\n\n\nclass ClusterCreationBuildTreeTest(unittest.TestCase):\n\n  @mock.patch(\n      'gcpdiag.runbook.dataproc.cluster_creation.ClusterCreation.add_step')\n  @mock.patch(\n      'gcpdiag.runbook.dataproc.cluster_creation.ClusterCreation.add_start')\n  @mock.patch(\n      'gcpdiag.runbook.dataproc.cluster_creation.ClusterCreation.add_end')\n  @mock.patch('gcpdiag.runbook.op.get')\n  def test_build_tree(self, mock_op_get, mock_add_end, mock_add_start,\n                      mock_add_step):\n    mock_op_get.return_value = 'test_value'\n    runbook = cluster_creation.ClusterCreation()\n    runbook.build_tree()\n    mock_add_start.assert_called_once()\n    self.assertIsInstance(mock_add_start.call_args[0][0],\n                          cluster_creation.ClusterCreationStart)\n    mock_add_step.assert_called_once()\n    self.assertIsInstance(\n        mock_add_step.call_args[1]['child'],\n        cluster_creation.ClusterDetailsDependencyGateway,\n    )\n    mock_add_end.assert_called_once()\n    self.assertIsInstance(mock_add_end.call_args[0][0],\n                          cluster_creation.ClusterCreationEnd)\n\n\nclass ClusterCreationStepTestBase(unittest.TestCase):\n  \"\"\"Base class for Cluster Creation step tests.\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    # 1. Patch get_api with the stub.\n    self.enterContext(\n        mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub))\n    # 2. Create a mock interface to capture outputs\n    self.mock_interface = mock.create_autospec(op.InteractionInterface,\n                                               instance=True)\n    self.mock_interface.rm = mock.Mock()\n    # 3. Instantiate a real Operator\n    self.operator = op.Operator(self.mock_interface)\n    self.operator.run_id = 'test-run'\n    self.operator.messages = MockMessage()\n    # 4. Define standard parameters.\n    self.params = {\n        flags.PROJECT_ID:\n            DUMMY_PROJECT_ID,\n        flags.REGION:\n            'us-central1',\n        flags.DATAPROC_CLUSTER_NAME:\n            'test-cluster',\n        flags.SERVICE_ACCOUNT:\n            None,\n        flags.DATAPROC_NETWORK:\n            None,\n        flags.ZONE:\n            None,\n        flags.INTERNAL_IP_ONLY:\n            None,\n        flags.SUBNETWORK:\n            None,\n        flags.START_TIME:\n            datetime.datetime(2025, 1, 1, tzinfo=datetime.timezone.utc),\n        flags.END_TIME:\n            datetime.datetime(2025, 1, 2, tzinfo=datetime.timezone.utc),\n        flags.CROSS_PROJECT_ID:\n            None,\n        flags.HOST_VPC_PROJECT_ID:\n            None,\n    }\n    self.operator.parameters = self.params\n    self.mock_op_put = self.enterContext(mock.patch('gcpdiag.runbook.op.put'))\n    self.mock_op_put.side_effect = self.params.__setitem__\n    self.mock_dataproc_get_cluster = self.enterContext(\n        mock.patch('gcpdiag.queries.dataproc.get_cluster',\n                   wraps=dataproc.get_cluster))\n    self.mock_crm_get_project = self.enterContext(\n        mock.patch('gcpdiag.queries.crm.get_project', wraps=crm.get_project))\n    self.mock_gce_get_instance = self.enterContext(\n        mock.patch('gcpdiag.queries.gce.get_instance'))\n    self.mock_iam_is_service_account_existing = self.enterContext(\n        mock.patch('gcpdiag.queries.iam.is_service_account_existing'))\n    self.mock_logs_realtime_query = self.enterContext(\n        mock.patch('gcpdiag.queries.logs.realtime_query'))\n    self.mock_network_get_network_from_url = self.enterContext(\n        mock.patch('gcpdiag.queries.network.get_network_from_url'))\n    self.mock_network_get_subnetwork_from_url = self.enterContext(\n        mock.patch('gcpdiag.queries.network.get_subnetwork_from_url'))\n    self.mock_networkmanagement_run_connectivity_test = self.enterContext(\n        mock.patch('gcpdiag.queries.networkmanagement.run_connectivity_test'))\n\n    self.mock_cluster = mock.Mock(spec=dataproc.Cluster)\n    self.mock_cluster.name = 'test-cluster'\n    self.mock_cluster.status = 'ERROR'\n    self.mock_cluster.is_stackdriver_logging_enabled = True\n    self.mock_cluster.vm_service_account_email = 'test-sa@domain.com'\n    self.mock_cluster.gce_network_uri = 'test-network'\n    self.mock_cluster.zone = 'us-central1-a'\n    self.mock_cluster.is_gce_cluster = True\n    self.mock_cluster.is_single_node_cluster = False\n    self.mock_cluster.is_ha_cluster = False\n    self.mock_cluster.is_internal_ip_only = False\n    self.mock_cluster.gce_subnetwork_uri = 'test-subnetwork'\n\n\nclass ClusterCreationStartTest(ClusterCreationStepTestBase):\n\n  def test_cluster_in_error_state(self):\n    self.params[flags.DATAPROC_CLUSTER_NAME] = 'test-deny-icmp'\n    step = cluster_creation.ClusterCreationStart()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_op_put.assert_any_call('cluster_exists', True)\n    self.mock_dataproc_get_cluster.assert_called_once()\n    self.mock_interface.add_skipped.assert_not_called()\n\n  def test_cluster_not_in_error_state(self):\n    self.params[flags.DATAPROC_CLUSTER_NAME] = 'good'\n    step = cluster_creation.ClusterCreationStart()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_op_put.assert_any_call('cluster_exists', True)\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_cluster_api_error(self):\n    self.mock_dataproc_get_cluster.side_effect = utils.GcpApiError('api error')\n    step = cluster_creation.ClusterCreationStart()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_cluster_not_found(self):\n    self.params[flags.DATAPROC_CLUSTER_NAME] = 'non-existent'\n    self.mock_dataproc_get_cluster.return_value = None\n    step = cluster_creation.ClusterCreationStart()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_op_put.assert_any_call('cluster_exists', False)\n\n  def test_cluster_in_error_state_stackdriver_disabled(self):\n    self.mock_cluster.status = 'ERROR'\n    self.mock_cluster.is_stackdriver_logging_enabled = False\n    self.mock_dataproc_get_cluster.return_value = self.mock_cluster\n    step = cluster_creation.ClusterCreationStart()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_op_put.assert_any_call('cluster_exists', True)\n    self.mock_op_put.assert_any_call(flags.STACKDRIVER, False)\n    self.mock_dataproc_get_cluster.assert_called_once()\n    self.mock_interface.add_skipped.assert_not_called()\n\n\nclass ClusterCreationStockoutTest(ClusterCreationStepTestBase):\n\n  def setUp(self):\n    super().setUp()\n    self.add_child_patch = self.enterContext(\n        mock.patch(\n            'gcpdiag.runbook.dataproc.cluster_creation.ClusterCreationStockout.add_child'\n        ))\n\n  def test_add_child_called(self):\n    step = cluster_creation.ClusterCreationStockout()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.add_child_patch.assert_called_once()\n    self.assertIsInstance(self.add_child_patch.call_args[1]['child'],\n                          logs_gs.CheckIssueLogEntry)\n\n\nclass ClusterCreationQuotaTest(ClusterCreationStepTestBase):\n\n  def setUp(self):\n    super().setUp()\n    self.add_child_patch = self.enterContext(\n        mock.patch(\n            'gcpdiag.runbook.dataproc.cluster_creation.ClusterCreationQuota.add_child'\n        ))\n\n  def test_add_child_called(self):\n    step = cluster_creation.ClusterCreationQuota()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.add_child_patch.assert_called_once()\n    self.assertIsInstance(self.add_child_patch.call_args[1]['child'],\n                          logs_gs.CheckIssueLogEntry)\n\n\nclass ClusterDetailsDependencyGatewayTest(ClusterCreationStepTestBase):\n\n  def setUp(self):\n    super().setUp()\n    self.add_child_patch = self.enterContext(\n        mock.patch(\n            'gcpdiag.runbook.dataproc.cluster_creation.ClusterDetailsDependencyGateway.add_child'\n        ))\n\n  def test_cluster_exists(self):\n    self.params['cluster_exists'] = True\n    step = cluster_creation.ClusterDetailsDependencyGateway()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    steps_added = [call[0][0] for call in self.add_child_patch.call_args_list]\n    self.assertTrue(\n        any(\n            isinstance(s, cluster_creation.CheckInitScriptFailure)\n            for s in steps_added))\n    self.assertTrue(\n        any(\n            isinstance(s, cluster_creation.CheckClusterNetwork)\n            for s in steps_added))\n    self.assertTrue(\n        any(\n            isinstance(s, cluster_creation.InternalIpGateway)\n            for s in steps_added))\n    self.assertTrue(\n        any(\n            isinstance(s, cluster_creation.ServiceAccountExists)\n            for s in steps_added))\n    self.assertTrue(\n        any(\n            isinstance(s, cluster_creation.CheckSharedVPCRoles)\n            for s in steps_added))\n\n  def test_cluster_does_not_exist(self):\n    self.params['cluster_exists'] = False\n    step = cluster_creation.ClusterDetailsDependencyGateway()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    steps_added = [call[0][0] for call in self.add_child_patch.call_args_list]\n    self.assertTrue(\n        any(\n            isinstance(s, cluster_creation.ClusterCreationQuota)\n            for s in steps_added))\n    self.assertTrue(\n        any(\n            isinstance(s, cluster_creation.ClusterCreationStockout)\n            for s in steps_added))\n\n\nclass CheckClusterNetworkTest(ClusterCreationStepTestBase):\n\n  def setUp(self):\n    super().setUp()\n    self.mock_instance = mock.Mock(spec=gce.Instance)\n    self.mock_instance.get_network_ip_for_instance_interface.return_value = (\n        '10.0.0.1/32')\n    self.mock_gce_get_instance.return_value = self.mock_instance\n    self.mock_networkmanagement_run_connectivity_test.return_value = {\n        'reachabilityDetails': {\n            'result': 'REACHABLE',\n            'traces': []\n        }\n    }\n\n  def test_cluster_none(self):\n    self.mock_dataproc_get_cluster.return_value = None\n    step = cluster_creation.CheckClusterNetwork()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_uncertain.assert_called_once()\n\n  def test_no_zone(self):\n    self.mock_cluster.zone = None\n    self.params[flags.ZONE] = None\n    self.mock_dataproc_get_cluster.return_value = self.mock_cluster\n    step = cluster_creation.CheckClusterNetwork()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_dpgke_cluster(self):\n    self.mock_cluster.is_gce_cluster = False\n    self.mock_dataproc_get_cluster.return_value = self.mock_cluster\n    step = cluster_creation.CheckClusterNetwork()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_single_node_cluster(self):\n    self.mock_cluster.is_single_node_cluster = True\n    self.mock_dataproc_get_cluster.return_value = self.mock_cluster\n    step = cluster_creation.CheckClusterNetwork()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_connectivity_ok(self):\n    self.mock_dataproc_get_cluster.return_value = self.mock_cluster\n    step = cluster_creation.CheckClusterNetwork()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.assertEqual(\n        self.mock_networkmanagement_run_connectivity_test.call_count, 3)\n    self.mock_interface.add_ok.assert_called_once()\n\n  def test_connectivity_failed_icmp(self):\n    self.mock_networkmanagement_run_connectivity_test.side_effect = [\n        {\n            'reachabilityDetails': {\n                'result': 'UNREACHABLE',\n                'traces': [{\n                    'steps': [{\n                        'foo': 'bar'\n                    }],\n                    'endpointInfo': {}\n                }],\n            }\n        },\n        {\n            'reachabilityDetails': {\n                'result': 'REACHABLE',\n                'traces': []\n            }\n        },\n        {\n            'reachabilityDetails': {\n                'result': 'REACHABLE',\n                'traces': []\n            }\n        },\n    ]\n    self.mock_dataproc_get_cluster.return_value = self.mock_cluster\n    step = cluster_creation.CheckClusterNetwork()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n  def test_connectivity_failed_tcp(self):\n    self.mock_networkmanagement_run_connectivity_test.side_effect = [\n        {\n            'reachabilityDetails': {\n                'result': 'REACHABLE',\n                'traces': []\n            }\n        },\n        {\n            'reachabilityDetails': {\n                'result': 'UNREACHABLE',\n                'traces': [{\n                    'steps': [{\n                        'foo': 'bar'\n                    }],\n                    'endpointInfo': {}\n                }],\n            }\n        },\n        {\n            'reachabilityDetails': {\n                'result': 'REACHABLE',\n                'traces': []\n            }\n        },\n    ]\n    self.mock_dataproc_get_cluster.return_value = self.mock_cluster\n    step = cluster_creation.CheckClusterNetwork()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n  def test_connectivity_failed_udp(self):\n    self.mock_networkmanagement_run_connectivity_test.side_effect = [\n        {\n            'reachabilityDetails': {\n                'result': 'REACHABLE',\n                'traces': []\n            }\n        },\n        {\n            'reachabilityDetails': {\n                'result': 'REACHABLE',\n                'traces': []\n            }\n        },\n        {\n            'reachabilityDetails': {\n                'result': 'UNREACHABLE',\n                'traces': [{\n                    'steps': [{\n                        'foo': 'bar'\n                    }],\n                    'endpointInfo': {}\n                }],\n            }\n        },\n    ]\n    self.mock_dataproc_get_cluster.return_value = self.mock_cluster\n    step = cluster_creation.CheckClusterNetwork()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n  def test_ha_cluster_connectivity_ok(self):\n    self.mock_cluster.is_ha_cluster = True\n    self.mock_dataproc_get_cluster.return_value = self.mock_cluster\n    step = cluster_creation.CheckClusterNetwork()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_gce_get_instance.assert_any_call(\n        project_id=DUMMY_PROJECT_ID,\n        zone='us-central1-a',\n        instance_name='test-cluster-m-0',\n    )\n    self.assertEqual(\n        self.mock_networkmanagement_run_connectivity_test.call_count, 3)\n    self.mock_interface.add_ok.assert_called_once()\n\n\nclass InternalIpGatewayTest(ClusterCreationStepTestBase):\n\n  def setUp(self):\n    super().setUp()\n    self.add_child_patch = self.enterContext(\n        mock.patch(\n            'gcpdiag.runbook.dataproc.cluster_creation.InternalIpGateway.add_child'\n        ))\n\n  def test_cluster_none_no_flag(self):\n    self.mock_dataproc_get_cluster.return_value = None\n    self.params[flags.INTERNAL_IP_ONLY] = None\n    step = cluster_creation.InternalIpGateway()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_cluster_none_no_subnet(self):\n    self.mock_dataproc_get_cluster.return_value = None\n    self.params[flags.INTERNAL_IP_ONLY] = True\n    self.params[flags.SUBNETWORK] = None\n    step = cluster_creation.InternalIpGateway()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_internal_ip_only_true(self):\n    self.mock_cluster.is_internal_ip_only = True\n    self.mock_dataproc_get_cluster.return_value = self.mock_cluster\n    step = cluster_creation.InternalIpGateway()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.add_child_patch.assert_called_once()\n    self.assertIsInstance(\n        self.add_child_patch.call_args[1]['child'],\n        cluster_creation.CheckPrivateGoogleAccess,\n    )\n\n  def test_internal_ip_only_false(self):\n    self.mock_cluster.is_internal_ip_only = False\n    self.mock_dataproc_get_cluster.return_value = self.mock_cluster\n    step = cluster_creation.InternalIpGateway()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.add_child_patch.assert_not_called()\n    self.assertEqual(self.mock_interface.add_ok.call_count, 2)\n\n\nclass CheckPrivateGoogleAccessTest(ClusterCreationStepTestBase):\n\n  def test_pga_enabled(self):\n    self.mock_dataproc_get_cluster.return_value = self.mock_cluster\n    mock_subnet = mock.Mock()\n    mock_subnet.is_private_ip_google_access.return_value = True\n    self.mock_network_get_subnetwork_from_url.return_value = mock_subnet\n    step = cluster_creation.CheckPrivateGoogleAccess()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n\n  def test_pga_disabled(self):\n    self.mock_dataproc_get_cluster.return_value = self.mock_cluster\n    mock_subnet = mock.Mock()\n    mock_subnet.is_private_ip_google_access.return_value = False\n    self.mock_network_get_subnetwork_from_url.return_value = mock_subnet\n    step = cluster_creation.CheckPrivateGoogleAccess()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n\nclass ServiceAccountExistsTest(ClusterCreationStepTestBase):\n\n  def setUp(self):\n    super().setUp()\n    self.params[flags.SERVICE_ACCOUNT] = 'test-sa@example.com'\n    self.add_child_patch = self.enterContext(\n        mock.patch(\n            'gcpdiag.runbook.dataproc.cluster_creation.ServiceAccountExists.add_child'\n        ))\n\n  def test_no_sa_email(self):\n    self.params[flags.SERVICE_ACCOUNT] = None\n    step = cluster_creation.ServiceAccountExists()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_sa_exists_same_project(self):\n    self.params[flags.PROJECT_ID] = 'gcpdiag-iam1-aaaa'\n    self.params[flags.SERVICE_ACCOUNT] = (\n        'service-account-1@gcpdiag-iam1-aaaa.iam.gserviceaccount.com')\n    self.mock_iam_is_service_account_existing.return_value = True\n    step = cluster_creation.ServiceAccountExists()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.add_child_patch.assert_called_once()\n    self.assertIsInstance(self.add_child_patch.call_args[1]['child'],\n                          iam_gs.IamPolicyCheck)\n\n  def test_sa_exists_cross_project(self):\n    self.params[flags.PROJECT_ID] = 'gcpdiag-dataproc1-aaaa'\n    self.params[flags.CROSS_PROJECT_ID] = 'gcpdiag-iam1-aaaa'\n    self.params[flags.SERVICE_ACCOUNT] = (\n        'service-account-1@gcpdiag-iam1-aaaa.iam.gserviceaccount.com')\n    self.mock_iam_is_service_account_existing.side_effect = [False, True]\n    step = cluster_creation.ServiceAccountExists()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    steps_added = []\n    for call in self.add_child_patch.call_args_list:\n      if call[0]:\n        steps_added.append(call[0][0])\n      elif call[1] and 'child' in call[1]:\n        steps_added.append(call[1]['child'])\n    self.assertTrue(\n        any(isinstance(s, crm_gs.OrgPolicyCheck) for s in steps_added))\n    self.assertEqual(\n        sum(1 for s in steps_added if isinstance(s, iam_gs.IamPolicyCheck)), 3)\n\n  def test_sa_not_exists_cross_project(self):\n    self.params[flags.CROSS_PROJECT_ID] = 'gcpdiag-iam1-aaaa'\n    self.params[flags.SERVICE_ACCOUNT] = (\n        'non-existent@gcpdiag-iam1-aaaa.iam.gserviceaccount.com')\n    self.mock_iam_is_service_account_existing.return_value = False\n    step = cluster_creation.ServiceAccountExists()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n  def test_sa_not_exists_no_cross_project(self):\n    self.params[flags.SERVICE_ACCOUNT] = (\n        'non-existent@gcpdiag-iam1-aaaa.iam.gserviceaccount.com')\n    self.mock_iam_is_service_account_existing.return_value = False\n    step = cluster_creation.ServiceAccountExists()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_uncertain.assert_called_once()\n\n\nclass CheckSharedVPCRolesTest(ClusterCreationStepTestBase):\n\n  def setUp(self):\n    super().setUp()\n    self.add_child_patch = self.enterContext(\n        mock.patch(\n            'gcpdiag.runbook.dataproc.cluster_creation.CheckSharedVPCRoles.add_child'\n        ))\n\n  def test_shared_vpc(self):\n    self.params[flags.HOST_VPC_PROJECT_ID] = 'host-project'\n    self.params[flags.PROJECT_ID] = 'service-project'\n    self.mock_crm_get_project.return_value = mock.Mock(number=123)\n    step = cluster_creation.CheckSharedVPCRoles()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    steps_added = [\n        call[1]['child'] for call in self.add_child_patch.call_args_list\n    ]\n    self.assertEqual(\n        sum(1 for s in steps_added if isinstance(s, iam_gs.IamPolicyCheck)), 2)\n\n  def test_no_shared_vpc(self):\n    self.params[flags.HOST_VPC_PROJECT_ID] = DUMMY_PROJECT_ID\n    self.params[flags.PROJECT_ID] = DUMMY_PROJECT_ID\n    step = cluster_creation.CheckSharedVPCRoles()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n\nclass CheckInitScriptFailureTest(ClusterCreationStepTestBase):\n\n  def test_failure_logs_found(self):\n    self.mock_logs_realtime_query.return_value = [{'some': 'log'}]\n    step = cluster_creation.CheckInitScriptFailure()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n  def test_no_failure_logs(self):\n    self.mock_logs_realtime_query.return_value = []\n    step = cluster_creation.CheckInitScriptFailure()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n\n\nclass ClusterCreationEndTest(ClusterCreationStepTestBase):\n\n  def test_cluster_exists(self):\n    self.params['cluster_exists'] = True\n    step = cluster_creation.ClusterCreationEnd()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.info.assert_called_once()\n    self.assertIn(\n        'Please visit all the FAIL steps',\n        self.mock_interface.info.call_args[0][0],\n    )\n\n  def test_cluster_does_not_exist(self):\n    self.params['cluster_exists'] = False\n    step = cluster_creation.ClusterCreationEnd()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.info.assert_called_once()\n    self.assertIn('Some steps were skipped',\n                  self.mock_interface.info.call_args[0][0])\n\n\nif __name__ == '__main__':\n  unittest.main()\n"
  },
  {
    "path": "gcpdiag/runbook/dataproc/constants.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Constants applicable relevant to only dataproc implementation.\"\"\"\n# pylint: disable=unused-wildcard-import, wildcard-import\nfrom gcpdiag.runbook.iam.constants import *\n\nPORT_EXHAUSTION_LOG = (\n    \"Address already in use: Service 'sparkDriver' failed after 1000 retries\")\n\nSW_PREEMPTION_LOG = (\n    '(requesting driver to remove executor | lost executor | Container'\n    ' released on a lost node)')\n\nWORKER_DISK_USAGE_LOG = (\n    'Most of the disks failed. 1/1 local-dirs usable space is below'\n    ' utilization percentage/no more usable space')\n\nGC_PAUSE_LOG = 'Detected pause in JVM or host machine (eg GC)'\n\nKILL_ORPHANED_APP_LOG = 'Killing orphaned yarn application'\n\nPYTHON_IMPORT_LOG = 'ImportError: cannot import name'\n\nSHUFFLE_KILL_LOG = 'Executor is not registered'\n\nTOO_MANY_JOBS_LOG = 'Too many running jobs'\n\nNOT_ENOUGH_MEMORY_LOG = 'Not enough free memory'\n\nSYSTEM_MEMORY_LOG = 'High system memory usage'\n\nRATE_LIMIT_LOG = 'Rate limit'\n\nNOT_INITIALIZED_LOG = 'Master agent not initialized'\n\nNOT_ENOUGH_DISK_LOG = 'Disk space too low on Master'\n\nYARN_RUNTIME_LOG = ('YarnRuntimeException: Could not load history file .*'\n                    ' /mapreduce-job-history/intermediate-done/root')\n\nERROR_403_LOG = ('com.google.cloud.hadoop.repackaged.gcs.com.google.api.client.'\n                 'googleapis.json.GoogleJsonResponseException: 403 Forbidden')\n\nERROR_429_GCE_LOG = (\n    'com.google.cloud.hadoop.repackaged.gcs.com.google.api.client.http.'\n    'HttpResponseException: 429 Too Many Requests')\n\nERROR_429_DRIVER_LOG = (\n    'com.google.cloud.hadoop.services.repackaged.com.google.api.client.'\n    'googleapis.json.GoogleJsonResponseException: 429 Too Many Requests')\n\nERROR_412_LOG = (\n    'com.google.cloud.hadoop.repackaged.gcs.com.google.api.client.'\n    'googleapis.json.GoogleJsonResponseException: 412 Precondition Failed')\n\nBQ_RESOURCE_LOG = ('com.google.cloud.spark.bigquery.repackaged.io.grpc.'\n                   'StatusRuntimeException: RESOURCE_EXHAUSTED')\n"
  },
  {
    "path": "gcpdiag/runbook/dataproc/flags.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Parameters applicable to Dataproc runbooks.\"\"\"\n# pylint: disable=wildcard-import, unused-wildcard-import\nfrom gcpdiag.runbook.gcp.flags import *\nfrom gcpdiag.runbook.iam.flags import *\n\nCLUSTER_UUID = 'cluster_uuid'\nCLUSTER_NAME = 'cluster_name'\nDATAPROC_CLUSTER_NAME = 'dataproc_cluster_name'\nDATAPROC_JOB_ID = 'dataproc_job_id'\nNETWORK = 'network'\nDATAPROC_NETWORK = 'dataproc_network'\nSUBNETWORK = 'subnetwork'\nREGION = 'region'\nSTATUS = 'status'\nSTACKDRIVER = 'stackdriver'\nCROSS_PROJECT_ID = 'cross_project'\nINTERNAL_IP_ONLY = 'internal_ip_only'\nCONSTRAINT = 'constraint'\nHOST_VPC_PROJECT_ID = 'host_vpc_project'\nIMAGE_VERSION = 'image_version'\nJOB_ID = 'job_id'\nJOB_EXIST = 'job_exist'\nJOB_OLDER_THAN_30_DAYS = 'job_older_than_30_days'\n"
  },
  {
    "path": "gcpdiag/runbook/dataproc/generalized_steps.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Contains Generatlized Steps for Dataproc.\"\"\"\n\nimport json\n\nfrom gcpdiag import runbook\nfrom gcpdiag.queries import crm, dataproc, gce, logs, networkmanagement\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.dataproc import flags\n\n\nclass CheckLogsExist(runbook.Step):\n  \"\"\"Checks if specified logs messages exist in the Dataproc cluster.\n\n  This step supports checking for the presence of a concrete log message.\n\n  Attributes:\n    log_message (str): log message that is being looked for.\n  \"\"\"\n  template = 'logs_related::default'\n  log_message: str = ''\n  cluster_name: str = ''\n  cluster_uuid: str = ''\n  project_id: str = ''\n\n  def execute(self):\n    \"\"\"Check if investigated logs messages exist in the Dataproc cluster.\"\"\"\n\n    if not self.project_id:\n      project = crm.get_project(op.get(flags.PROJECT_ID))\n    else:\n      project = crm.get_project(self.project_id)\n\n    if op.get(flags.JOB_EXIST) == 'false':\n      op.add_skipped(project, reason=\"Job doesn't exist, skipping this step.\")\n      return\n\n    if op.get(flags.JOB_OLDER_THAN_30_DAYS):\n      op.add_skipped(\n          project,\n          reason=('Job is older than 30 days, skipping this step. '\n                  'Please create a new job and run the runbook again.'),\n      )\n      return\n\n    if not (self.cluster_name and self.cluster_uuid):\n      job = dataproc.get_job_by_jobid(op.get(flags.PROJECT_ID),\n                                      op.get(flags.REGION),\n                                      op.get(flags.DATAPROC_JOB_ID))\n\n      cluster_name = job.cluster_name\n      cluster_uuid = job.cluster_uuid\n    else:\n      cluster_name = self.cluster_name\n      cluster_uuid = self.cluster_uuid\n\n    job_id = op.get(flags.JOB_ID)\n    log_message = self.log_message\n\n    log_search_filter = f\"\"\"resource.type=\"cloud_dataproc_cluster\"\n    resource.labels.cluster_name=\"{cluster_name}\"\n    resource.labels.cluster_uuid=\"{cluster_uuid}\"\n    \"{job_id}\"\n    jsonPayload.message=~\"{log_message}\" \"\"\"\n\n    start_time = op.get(flags.START_TIME)\n    end_time = op.get(flags.END_TIME)\n\n    log_entries = logs.realtime_query(\n        project_id=op.get(flags.PROJECT_ID),\n        filter_str=log_search_filter,\n        start_time=start_time,\n        end_time=end_time,\n    )\n\n    if log_entries:\n      op.add_failed(\n          project,\n          reason=op.prep_msg(op.FAILURE_REASON,\n                             log=log_message,\n                             cluster_name=cluster_name),\n          remediation=op.prep_msg(op.FAILURE_REMEDIATION),\n      )\n    else:\n      op.add_ok(\n          project,\n          reason=op.prep_msg(\n              op.SUCCESS_REASON,\n              log=log_message,\n              cluster_name=cluster_name,\n          ),\n      )\n\n\nclass CheckClusterNetworkConnectivity(runbook.Step):\n  \"\"\"Verify that the nodes in the cluster can communicate with each other.\n\n  The Compute Engine Virtual Machine instances (VMs) in a Dataproc cluster must\n  be able to communicate with each other using ICMP, TCP (all ports), and UDP\n  (all ports) protocols.\n  \"\"\"\n\n  template = 'network::cluster_network'\n  cluster_name: str = ''\n  project_id: str = ''\n\n  def execute(self):\n    \"\"\"Verify network connectivity among nodes in the cluster.\"\"\"\n    # Gathering cluster details.\n\n    if not self.project_id:\n      project_id = op.get(flags.PROJECT_ID)\n    else:\n      project_id = self.project_id\n\n    if not self.cluster_name:\n      cluster_name = op.get(flags.DATAPROC_CLUSTER_NAME)\n    else:\n      cluster_name = self.cluster_name\n\n    cluster = dataproc.get_cluster(cluster_name=cluster_name,\n                                   region=op.get(flags.REGION),\n                                   project=project_id)\n\n    # Skip this step if the cluster does not exist\n    if cluster is None:\n      op.add_uncertain(cluster,\n                       reason=op.prep_msg(op.UNCERTAIN_REASON),\n                       remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION))\n    else:\n      # Add the zone of the cluster\n      if not op.get(flags.ZONE):\n        if cluster.zone:\n          op.put(flags.ZONE, cluster.zone)\n\n      # retrieve the zone from the cluster\n      cluster_zone = op.get(flags.ZONE)\n      if cluster_zone is None:\n        op.add_skipped(\n            cluster,\n            reason=(\n                'Zone cannot be retrieved from the cluster.Please provide the'\n                ' ZONE parameter in the runbook query'),\n        )\n        return\n      # Skip DPGKE clusters\n      if not cluster.is_gce_cluster:\n        op.add_skipped(\n            cluster,\n            reason='This is a Dataproc on GKE cluster, skipping this step.',\n        )\n      # Skip single node clusters\n      if cluster.is_single_node_cluster:\n        op.add_skipped(\n            cluster,\n            reason='This is a single node cluster, skipping this step.')\n      # target (master node or master node 0)\n      if cluster.is_ha_cluster:\n        target = gce.get_instance(\n            project_id=op.get(flags.PROJECT_ID),\n            zone=cluster_zone,\n            instance_name=f'{cluster.name}-m-0',\n        )\n      else:\n        target = gce.get_instance(\n            project_id=op.get(flags.PROJECT_ID),\n            zone=cluster_zone,\n            instance_name=f'{cluster.name}-m',\n        )\n      target_ip = target.get_network_ip_for_instance_interface(\n          cluster.gce_network_uri)\n      # source (worker node 0)\n      source = gce.get_instance(\n          project_id=op.get(flags.PROJECT_ID),\n          zone=cluster_zone,\n          instance_name=f'{cluster.name}-w-0',\n      )\n      source_ip = source.get_network_ip_for_instance_interface(\n          cluster.gce_network_uri)\n\n      is_connectivity_fine = True\n\n      # run connectivity tests between master and worker\n      op.info('Running connectivity tests.')\n      # ICMP\n      op.info('ICMP test.')\n      connectivity_test_result = networkmanagement.run_connectivity_test(\n          project_id=op.get(flags.PROJECT_ID),\n          src_ip=str(source_ip)[:-3],\n          dest_ip=str(target_ip)[:-3],\n          dest_port=None,\n          protocol='ICMP')\n      op.info('Connectivity test result: ' +\n              connectivity_test_result['reachabilityDetails']['result'])\n      if connectivity_test_result['reachabilityDetails'][\n          'result'] != 'REACHABLE':\n        is_connectivity_fine = False\n        for trace in connectivity_test_result['reachabilityDetails']['traces']:\n          op.info('Endpoint details: ' +\n                  json.dumps(trace['endpointInfo'], indent=2))\n          last_step = None\n          for step in trace['steps']:\n            last_step = step\n          op.info('Last step: ' + json.dumps(last_step, indent=2))\n          op.info('Full list of steps: ' + json.dumps(trace['steps'], indent=2))\n        op.info(\n            'ICMP traffic must be allowed. Check the result of the connectivity '\n            + 'test to verify what is blocking the traffic, ' +\n            'in particular Last step and Full list of steps.')\n      # TCP\n      op.info('TCP test.')\n      connectivity_test_result = networkmanagement.run_connectivity_test(\n          project_id=op.get(flags.PROJECT_ID),\n          src_ip=str(source_ip)[:-3],\n          dest_ip=str(target_ip)[:-3],\n          dest_port=8088,\n          protocol='TCP')\n      op.info('Connectivity test result: ' +\n              connectivity_test_result['reachabilityDetails']['result'])\n      if connectivity_test_result['reachabilityDetails'][\n          'result'] != 'REACHABLE':\n        is_connectivity_fine = False\n        for trace in connectivity_test_result['reachabilityDetails']['traces']:\n          op.info('Endpoint details: ' +\n                  json.dumps(trace['endpointInfo'], indent=2))\n          last_step = None\n          for step in trace['steps']:\n            last_step = step\n          op.info('Last step: ' + json.dumps(last_step, indent=2))\n          op.info('Full list of steps: ' + json.dumps(trace['steps'], indent=2))\n        op.info(\n            'TCP traffic must be allowed. Check the result of the connectivity test'\n            + 'to verify what is blocking the traffic, ' +\n            'in particular Last step and Full list of steps.')\n      # UCP\n      op.info('UDP test.')\n      connectivity_test_result = networkmanagement.run_connectivity_test(\n          project_id=op.get(flags.PROJECT_ID),\n          src_ip=str(source_ip)[:-3],\n          dest_ip=str(target_ip)[:-3],\n          dest_port=8088,\n          protocol='UDP')\n      op.info('Connectivity test result: ' +\n              connectivity_test_result['reachabilityDetails']['result'])\n      if connectivity_test_result['reachabilityDetails'][\n          'result'] != 'REACHABLE':\n        is_connectivity_fine = False\n        for trace in connectivity_test_result['reachabilityDetails']['traces']:\n          op.info('Endpoint details: ' +\n                  json.dumps(trace['endpointInfo'], indent=2))\n          last_step = None\n          for step in trace['steps']:\n            last_step = step\n          op.info('Last step: ' + json.dumps(last_step, indent=2))\n          op.info('Full list of steps: ' + json.dumps(trace['steps'], indent=2))\n        op.info(\n            'UDP traffic must be allowed. Check the result of the connectivity test '\n            + 'to verify what is blocking the traffic, ' +\n            'in particular Last step and Full list of steps.')\n\n      if is_connectivity_fine:\n        op.add_ok(cluster,\n                  op.prep_msg(op.SUCCESS_REASON, cluster_name=cluster.name))\n      else:\n        op.add_failed(\n            cluster,\n            reason=op.prep_msg(op.FAILURE_REASON, cluster_name=cluster.name),\n            remediation=op.prep_msg(op.FAILURE_REMEDIATION),\n        )\n"
  },
  {
    "path": "gcpdiag/runbook/dataproc/generalized_steps_test.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test class for dataproc.generalized_steps.\"\"\"\n\nimport datetime\nimport unittest\nfrom unittest import mock\n\nfrom gcpdiag.queries import apis_stub, crm, dataproc, gce\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.dataproc import flags, generalized_steps\n\nDUMMY_PROJECT_ID = 'gcpdiag-dataproc1-aaaa'\n\n\nclass MockMessage:\n  \"\"\"Mock messages for testing.\"\"\"\n\n  def get_msg(self, key, **kwargs):\n    del kwargs\n    return f'{key}'\n\n\nclass GeneralizedStepsTestBase(unittest.TestCase):\n  \"\"\"Base class for Dataproc generalized step tests.\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    # 1. Patch get_api with the stub.\n    self.enterContext(\n        mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub))\n    # 2. Create a mock interface to capture outputs\n    self.mock_interface = mock.create_autospec(op.InteractionInterface,\n                                               instance=True)\n    self.mock_interface.rm = mock.Mock()\n    # 3. Instantiate a real Operator\n    self.operator = op.Operator(self.mock_interface)\n    self.operator.run_id = 'test-run'\n    self.operator.messages = MockMessage()\n    # 4. Define standard parameters.\n    self.params = {\n        flags.PROJECT_ID:\n            DUMMY_PROJECT_ID,\n        flags.REGION:\n            'us-central1',\n        flags.DATAPROC_CLUSTER_NAME:\n            'test-cluster',\n        flags.JOB_ID:\n            'test-job',\n        flags.DATAPROC_JOB_ID:\n            'test-dataproc-job',\n        flags.JOB_EXIST:\n            'true',\n        flags.JOB_OLDER_THAN_30_DAYS:\n            False,\n        flags.START_TIME:\n            datetime.datetime(2025, 1, 1, tzinfo=datetime.timezone.utc),\n        flags.END_TIME:\n            datetime.datetime(2025, 1, 2, tzinfo=datetime.timezone.utc),\n        flags.ZONE:\n            None,\n    }\n    self.operator.parameters = self.params\n    self.mock_op_put = self.enterContext(mock.patch('gcpdiag.runbook.op.put'))\n    self.mock_op_put.side_effect = self.params.__setitem__\n\n    self.mock_crm_get_project = self.enterContext(\n        mock.patch('gcpdiag.queries.crm.get_project'))\n    self.mock_dataproc_get_job_by_jobid = self.enterContext(\n        mock.patch('gcpdiag.queries.dataproc.get_job_by_jobid'))\n    self.mock_logs_realtime_query = self.enterContext(\n        mock.patch('gcpdiag.queries.logs.realtime_query'))\n    self.mock_dataproc_get_cluster = self.enterContext(\n        mock.patch('gcpdiag.queries.dataproc.get_cluster'))\n    self.mock_gce_get_instance = self.enterContext(\n        mock.patch('gcpdiag.queries.gce.get_instance'))\n    self.mock_networkmanagement_run_connectivity_test = self.enterContext(\n        mock.patch('gcpdiag.queries.networkmanagement.run_connectivity_test'))\n\n    self.mock_project = mock.Mock(spec=crm.Project)\n    self.mock_project.id = 'test-project'\n    self.mock_crm_get_project.return_value = self.mock_project\n\n    self.mock_job = mock.Mock(spec=dataproc.Job)\n    self.mock_job.cluster_name = 'test-cluster'\n    self.mock_job.cluster_uuid = 'test-uuid'\n    self.mock_dataproc_get_job_by_jobid.return_value = self.mock_job\n\n    self.mock_cluster = mock.Mock(spec=dataproc.Cluster)\n    self.mock_cluster.name = 'test-cluster'\n    self.mock_cluster.zone = 'us-central1-a'\n    self.mock_cluster.is_gce_cluster = True\n    self.mock_cluster.is_single_node_cluster = False\n    self.mock_cluster.is_ha_cluster = False\n    self.mock_cluster.gce_network_uri = 'test-network'\n    self.mock_dataproc_get_cluster.return_value = self.mock_cluster\n\n\nclass CheckLogsExistTest(GeneralizedStepsTestBase):\n\n  def test_job_does_not_exist(self):\n    self.params[flags.JOB_EXIST] = 'false'\n    step = generalized_steps.CheckLogsExist(log_message='test message')\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_job_too_old(self):\n    self.params[flags.JOB_OLDER_THAN_30_DAYS] = True\n    step = generalized_steps.CheckLogsExist(log_message='test message')\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_logs_found_no_cluster_details(self):\n    self.mock_logs_realtime_query.return_value = [{'some': 'log'}]\n    step = generalized_steps.CheckLogsExist(log_message='test message')\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_dataproc_get_job_by_jobid.assert_called_once()\n    self.mock_logs_realtime_query.assert_called_once()\n    self.mock_interface.add_failed.assert_called_once()\n\n  def test_logs_not_found_no_cluster_details(self):\n    self.mock_logs_realtime_query.return_value = []\n    step = generalized_steps.CheckLogsExist(log_message='test message')\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_dataproc_get_job_by_jobid.assert_called_once()\n    self.mock_logs_realtime_query.assert_called_once()\n    self.mock_interface.add_ok.assert_called_once()\n\n  def test_logs_found_with_cluster_details(self):\n    self.mock_logs_realtime_query.return_value = [{'some': 'log'}]\n    step = generalized_steps.CheckLogsExist(\n        log_message='test message',\n        cluster_name='test-cluster',\n        cluster_uuid='test-uuid',\n    )\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_dataproc_get_job_by_jobid.assert_not_called()\n    self.mock_logs_realtime_query.assert_called_once()\n    self.mock_interface.add_failed.assert_called_once()\n\n  def test_logs_found_with_project_id(self):\n    self.mock_logs_realtime_query.return_value = [{'some': 'log'}]\n    step = generalized_steps.CheckLogsExist(\n        log_message='test message',\n        cluster_name='test-cluster',\n        cluster_uuid='test-uuid',\n        project_id='step-project',\n    )\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_crm_get_project.assert_called_with('step-project')\n    self.mock_logs_realtime_query.assert_called_once()\n    self.mock_interface.add_failed.assert_called_once()\n\n\nclass CheckClusterNetworkConnectivityTest(GeneralizedStepsTestBase):\n\n  def setUp(self):\n    super().setUp()\n    self.mock_instance = mock.Mock(spec=gce.Instance)\n    self.mock_instance.get_network_ip_for_instance_interface.return_value = (\n        '10.0.0.1/32')\n    self.mock_gce_get_instance.return_value = self.mock_instance\n    self.mock_networkmanagement_run_connectivity_test.return_value = {\n        'reachabilityDetails': {\n            'result': 'REACHABLE',\n            'traces': []\n        }\n    }\n\n  def test_cluster_none(self):\n    self.mock_dataproc_get_cluster.return_value = None\n    step = generalized_steps.CheckClusterNetworkConnectivity()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_uncertain.assert_called_once()\n\n  def test_no_zone(self):\n    self.mock_cluster.zone = None\n    step = generalized_steps.CheckClusterNetworkConnectivity()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_dpgke_cluster(self):\n    self.mock_cluster.is_gce_cluster = False\n    step = generalized_steps.CheckClusterNetworkConnectivity()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_single_node_cluster(self):\n    self.mock_cluster.is_single_node_cluster = True\n    step = generalized_steps.CheckClusterNetworkConnectivity()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_connectivity_ok(self):\n    step = generalized_steps.CheckClusterNetworkConnectivity()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.assertEqual(\n        self.mock_networkmanagement_run_connectivity_test.call_count, 3)\n    self.mock_interface.add_ok.assert_called_once()\n\n  def test_connectivity_failed_icmp(self):\n    self.mock_networkmanagement_run_connectivity_test.side_effect = [\n        {\n            'reachabilityDetails': {\n                'result': 'UNREACHABLE',\n                'traces': [{\n                    'steps': [{\n                        'foo': 'bar'\n                    }],\n                    'endpointInfo': {}\n                }],\n            }\n        },\n        {\n            'reachabilityDetails': {\n                'result': 'REACHABLE',\n                'traces': []\n            }\n        },\n        {\n            'reachabilityDetails': {\n                'result': 'REACHABLE',\n                'traces': []\n            }\n        },\n    ]\n    step = generalized_steps.CheckClusterNetworkConnectivity()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n  def test_connectivity_failed_tcp(self):\n    self.mock_networkmanagement_run_connectivity_test.side_effect = [\n        {\n            'reachabilityDetails': {\n                'result': 'REACHABLE',\n                'traces': []\n            }\n        },\n        {\n            'reachabilityDetails': {\n                'result': 'UNREACHABLE',\n                'traces': [{\n                    'steps': [{\n                        'foo': 'bar'\n                    }],\n                    'endpointInfo': {}\n                }],\n            }\n        },\n        {\n            'reachabilityDetails': {\n                'result': 'REACHABLE',\n                'traces': []\n            }\n        },\n    ]\n    step = generalized_steps.CheckClusterNetworkConnectivity()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n  def test_connectivity_failed_udp(self):\n    self.mock_networkmanagement_run_connectivity_test.side_effect = [\n        {\n            'reachabilityDetails': {\n                'result': 'REACHABLE',\n                'traces': []\n            }\n        },\n        {\n            'reachabilityDetails': {\n                'result': 'REACHABLE',\n                'traces': []\n            }\n        },\n        {\n            'reachabilityDetails': {\n                'result': 'UNREACHABLE',\n                'traces': [{\n                    'steps': [{\n                        'foo': 'bar'\n                    }],\n                    'endpointInfo': {}\n                }],\n            }\n        },\n    ]\n    step = generalized_steps.CheckClusterNetworkConnectivity()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n  def test_ha_cluster_connectivity_ok(self):\n    self.mock_cluster.is_ha_cluster = True\n    step = generalized_steps.CheckClusterNetworkConnectivity()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_gce_get_instance.assert_any_call(\n        project_id=DUMMY_PROJECT_ID,\n        zone='us-central1-a',\n        instance_name='test-cluster-m-0',\n    )\n    self.assertEqual(\n        self.mock_networkmanagement_run_connectivity_test.call_count, 3)\n    self.mock_interface.add_ok.assert_called_once()\n\n  def test_step_with_cluster_name_and_project_id(self):\n    step = generalized_steps.CheckClusterNetworkConnectivity(\n        cluster_name='step-cluster', project_id='step-project')\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_dataproc_get_cluster.assert_called_with(\n        cluster_name='step-cluster',\n        region='us-central1',\n        project='step-project',\n    )\n    self.assertEqual(\n        self.mock_networkmanagement_run_connectivity_test.call_count, 3)\n    self.mock_interface.add_ok.assert_called_once()\n\n\nif __name__ == '__main__':\n  unittest.main()\n"
  },
  {
    "path": "gcpdiag/runbook/dataproc/snapshots/cluster_creation.txt",
    "content": "dataproc_cluster_name=good,end_time=2024-06-22T01:00:00Z,project_id=gcpdiag-\ndataproc1-aaaa,region=us-central1,service_account=saworker@gcpdiag-\ndataproc1-aaaa.iam.gserviceaccount.com,start_time=2024-06-18T01:00:00Z\n\ndataproc/cluster-creation: Provides a comprehensive analysis of common issues which affect Dataproc cluster creation.\n\n  This runbook focuses on a range of potential problems for Dataproc clusters on\n  Google Cloud Platform. By conducting a series of checks, the runbook aims to\n  pinpoint the root cause of cluster creation difficulties.\n\n  The following areas are examined:\n\n  - Stockout errors: Evaluates Logs Explorer logs regarding stockout in the\n  region/zone.\n\n  - Quota availability: Checks for the quota availability in Dataproc cluster\n  project.\n\n  - Network configuration: Performs GCE Network Connectivity Tests, checks\n  necessary firewall rules, external/internal IP configuration.\n\n  - Cross-project configuration: Checks if the service account is not in the\n  same\n  project and reviews additional\n    roles and organization policies enforcement.\n\n  - Shared VPC configuration: Checks if the Dataproc cluster uses a Shared VPC\n  network and\n  evaluates if right service account roles are added.\n\n  - Init actions script failures: Evaluates Logs Explorer\n  logs regarding init actions script failures or timeouts.\n  \n[START]: Initiating diagnostics for Cluster Creation issues.\n\n   - gcpdiag-dataproc1-aaaa                                               [SKIP]\n     [REASON]\n     Cluster good in project gcpdiag-dataproc1-aaaa is not in error state due to cluster creation issues, please choose another issue category to investigate.\n\n\ndataproc_cluster_name=good,end_time=2024-06-24T01:00:00Z,project_id=gcpdiag-\ndataproc1-aaaa,region=us-central1,service_account=saworker@gcpdiag-\ndataproc1-aaaa.iam.gserviceaccount.com,start_time=2024-06-23T01:00:00Z\n\ndataproc/cluster-creation: Provides a comprehensive analysis of common issues which affect Dataproc cluster creation.\n\n  This runbook focuses on a range of potential problems for Dataproc clusters on\n  Google Cloud Platform. By conducting a series of checks, the runbook aims to\n  pinpoint the root cause of cluster creation difficulties.\n\n  The following areas are examined:\n\n  - Stockout errors: Evaluates Logs Explorer logs regarding stockout in the\n  region/zone.\n\n  - Quota availability: Checks for the quota availability in Dataproc cluster\n  project.\n\n  - Network configuration: Performs GCE Network Connectivity Tests, checks\n  necessary firewall rules, external/internal IP configuration.\n\n  - Cross-project configuration: Checks if the service account is not in the\n  same\n  project and reviews additional\n    roles and organization policies enforcement.\n\n  - Shared VPC configuration: Checks if the Dataproc cluster uses a Shared VPC\n  network and\n  evaluates if right service account roles are added.\n\n  - Init actions script failures: Evaluates Logs Explorer\n  logs regarding init actions script failures or timeouts.\n  \n[START]: Initiating diagnostics for Cluster Creation issues.\n\n   - gcpdiag-dataproc1-aaaa                                               [SKIP]\n     [REASON]\n     Cluster good in project gcpdiag-dataproc1-aaaa is not in error state due to cluster creation issues, please choose another issue category to investigate.\n\n\ndataproc_cluster_name=test-deny-icmp,end_time=2024-06-22T01:00:00Z,project_id=gcpdiag-\ndataproc1-aaaa,region=us-central1,start_time=2024-06-18T01:00:00Z\n\ndataproc/cluster-creation: Provides a comprehensive analysis of common issues which affect Dataproc cluster creation.\n\n  This runbook focuses on a range of potential problems for Dataproc clusters on\n  Google Cloud Platform. By conducting a series of checks, the runbook aims to\n  pinpoint the root cause of cluster creation difficulties.\n\n  The following areas are examined:\n\n  - Stockout errors: Evaluates Logs Explorer logs regarding stockout in the\n  region/zone.\n\n  - Quota availability: Checks for the quota availability in Dataproc cluster\n  project.\n\n  - Network configuration: Performs GCE Network Connectivity Tests, checks\n  necessary firewall rules, external/internal IP configuration.\n\n  - Cross-project configuration: Checks if the service account is not in the\n  same\n  project and reviews additional\n    roles and organization policies enforcement.\n\n  - Shared VPC configuration: Checks if the Dataproc cluster uses a Shared VPC\n  network and\n  evaluates if right service account roles are added.\n\n  - Init actions script failures: Evaluates Logs Explorer\n  logs regarding init actions script failures or timeouts.\n  \n[START]: Initiating diagnostics for Cluster Creation issues.\n[INFO]: Cluster test-deny-icmp in projectgcpdiag-dataproc1-aaaa is in error state\n[INFO]: Service Account:12340005-compute@developer.gserviceaccount.com\n[INFO]: Network: https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/test-bad-network\n[GATEWAY]: Execute child steps depending on if they require details from existing cluster or not\n[AUTOMATED STEP]: Verify Cluster init script failure.\n\n   - gcpdiag-dataproc1-aaaa                                               [OK]\n     [REASON]\n     The initialization actions for cluster test-deny-icmp in project gcpdiag-dataproc1-aaaa completed successfully without errors.\n\n[AUTOMATED STEP]: Verify network connectivity among nodes in the cluster.\n[INFO]: Zone: us-central1-a\n[INFO]: Running connectivity tests.\n[INFO]: ICMP test.\n[INFO]: Connectivity test result: REACHABLE\n[INFO]: TCP test.\n[INFO]: Connectivity test result: REACHABLE\n[INFO]: UDP test.\n[INFO]: Connectivity test result: REACHABLE\n\n   - gcpdiag-dataproc1-aaaa/us-central1/test-deny-icmp                    [OK]\n     [REASON]\n     The network communication among nodes in cluster test-deny-icmp is working.\n\n[GATEWAY]: Checking if the cluster is using internal IP only.\n[INFO]: Internal IP only: False\n\n   - gcpdiag-dataproc1-aaaa/us-central1/test-deny-icmp                    [OK]\n     [REASON]\n     Subnetwork: https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-central1/subnetworks/test-bad-subnet\n\n   - gcpdiag-dataproc1-aaaa/us-central1/test-deny-icmp                    [OK]\n     [REASON]\n     The cluster is in a public subnet.\n[GATEWAY]: Checking service account project.\n[INFO]: 12340005-compute@developer.gserviceaccount.com\n[INFO]: VM Service Account associated with Dataproc cluster was found in the same project\n[INFO]: Checking permissions.\n[AUTOMATED STEP]: Verify that serviceAccount:12340005-compute@developer.gserviceaccount.com has required permissions/roles in project/gcpdiag-dataproc1-aaaa.\n\n   - projects/gcpdiag-dataproc1-aaaa                                      [FAIL]\n     [REASON]\n     serviceAccount:12340005-compute@developer.gserviceaccount.com does not have at least one of the expected roles:\n     roles/dataproc.worker.\n\n     [REMEDIATION]\n     Grant a role containing the missing permissions by following the instructions in [1].\n     Refer to [2] for a list of Google Cloud predefined roles.\n\n     Note: Consider consulting with project administrators regarding the most appropriate standard or custom role to grant.\n\n     [1] <https://cloud.google.com/iam/docs/grant-role-console>\n     [2] <https://cloud.google.com/iam/docs/understanding-roles>\n\n[AUTOMATED STEP]: Verify service account roles based on Shared VPC.\n\n   - gcpdiag-dataproc1-aaaa                                               [SKIP]\n     [REASON]\n     Cluster is not using a Shared VPC network\n[END]: This is the end step of the runbook.\n[INFO]: Please visit all the FAIL steps and address the suggested remediations.\n          If the cluster is still not able to be provisioned successfully,\n          run the runbook again and open a Support case. If you are missing\n          Service Account permissions, but are not able to see the Service Agent\n          Service Account go to the IAM page and check 'Include Google-provided\n          role grants'\n        \n\n\ndataproc_cluster_name=cluster-quota-issues,end_time=2025-06-13T17:00:55Z,project_id=gcpdiag-\ndataproc2-aaaa,region=us-central1,start_time=2025-06-13T16:00:55Z\n\ndataproc/cluster-creation: Provides a comprehensive analysis of common issues which affect Dataproc cluster creation.\n\n  This runbook focuses on a range of potential problems for Dataproc clusters on\n  Google Cloud Platform. By conducting a series of checks, the runbook aims to\n  pinpoint the root cause of cluster creation difficulties.\n\n  The following areas are examined:\n\n  - Stockout errors: Evaluates Logs Explorer logs regarding stockout in the\n  region/zone.\n\n  - Quota availability: Checks for the quota availability in Dataproc cluster\n  project.\n\n  - Network configuration: Performs GCE Network Connectivity Tests, checks\n  necessary firewall rules, external/internal IP configuration.\n\n  - Cross-project configuration: Checks if the service account is not in the\n  same\n  project and reviews additional\n    roles and organization policies enforcement.\n\n  - Shared VPC configuration: Checks if the Dataproc cluster uses a Shared VPC\n  network and\n  evaluates if right service account roles are added.\n\n  - Init actions script failures: Evaluates Logs Explorer\n  logs regarding init actions script failures or timeouts.\n  \n[START]: Initiating diagnostics for Cluster Creation issues.\n[GATEWAY]: Execute child steps depending on if they require details from existing cluster or not\n[AUTOMATED STEP]: Check for quota entries in Cloud logging\n[AUTOMATED STEP]: Check for log entries matching problematic filter string\n\n   - gcpdiag-dataproc2-aaaa                                               [FAIL]\n     [REASON]\n     The cluster cluster-quota-issues in project gcpdiag-dataproc2-aaaa could not be created due to insufficient quota identified using query:\n\n         resource.type=\"cloud_dataproc_cluster\"\n         protoPayload.status.message=~\"Insufficient .* quota\"\n         resource.labels.cluster_name=\"cluster-quota-issues\"\n         severity=ERROR\n         log_id(\"cloudaudit.googleapis.com/activity\")\n         timestamp >= \"2025-06-13 16:00:55+00:00\" AND timestamp <= \"2025-06-13 17:00:55+00:00\"\n\n\n     [REMEDIATION]\n     This issue occurs when the requested Dataproc cluster exceeds the project's available quota for resources such as CPU, disk space, or IP addresses.\n     To resolve this issue:\n\n     - Request additional quota [1] via the Google Cloud console.\n     - Create the cluster in a different project.\n     [1] <https://cloud.google.com/docs/quotas/view-manage#managing_your_quota_console>\n\n[AUTOMATED STEP]: Check for stockout entries in Cloud logging\n[AUTOMATED STEP]: Check for log entries matching problematic filter string\n\n   - gcpdiag-dataproc2-aaaa                                               [UNCERTAIN]\n     [REASON]\n     No issues with stockouts identified for cluster cluster-quota-issues in project gcpdiag-dataproc2-aaaa using query:\n\n         resource.type=\"cloud_dataproc_cluster\"\n         protoPayload.status.message=~(\"ZONE_RESOURCE_POOL_EXHAUSTED\" OR \"does not have enough resources available to fulfill the request\" OR \"resource pool exhausted\" OR \"does not exist in zone\")\n         resource.labels.cluster_name=\"cluster-quota-issues\"\n         severity=ERROR\n         log_id(\"cloudaudit.googleapis.com/activity\")\n         timestamp >= \"2025-06-13 16:00:55+00:00\" AND timestamp <= \"2025-06-13 17:00:55+00:00\"\n     .\n\n     [REMEDIATION]\n\n     1. Verify of the time range used in the filter matches that when the issue occurred and adjust it accordingly.\n     Query:\n\n         resource.type=\"cloud_dataproc_cluster\"\n         protoPayload.status.message=~(\"ZONE_RESOURCE_POOL_EXHAUSTED\" OR \"does not have enough resources available to fulfill the request\" OR \"resource pool exhausted\" OR \"does not exist in zone\")\n         resource.labels.cluster_name=\"cluster-quota-issues\"\n         severity=ERROR\n         log_id(\"cloudaudit.googleapis.com/activity\")\n         timestamp >= \"2025-06-13 16:00:55+00:00\" AND timestamp <= \"2025-06-13 17:00:55+00:00\"\n\n     2. Verify that the property `dataproc.logging.stackdriver.enable` has not been set to false for cluster cluster-quota-issues in project gcpdiag-dataproc2-aaaa: <https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/cluster-properties#dataproc_service_properties_table>\n     3. Verify that logging for the cluster cluster-quota-issues has not been disabled due to cost management: <https://cloud.google.com/blog/products/devops-sre/cloud-logging-cost-management-best-practices>\n\n[END]: This is the end step of the runbook.\n[INFO]: Some steps were skipped because cluster cluster-quota-issues\n          could not be found in project gcpdiag-dataproc2-aaaa. Most steps in this runbook\n          require that the cluster is in `ERROR` state and has not been deleted.\n          If the cluster was in `ERROR` and has been deleted, please create the cluster again and\n          rerun this runbook before deleting the cluster to rule out any cluster creation issues.\n\n\ndataproc_cluster_name=cluster-stockout-issues,end_time=2025-06-13T17:00:55Z,project_id=gcpdiag-\ndataproc3-aaaa,region=us-central1,start_time=2025-06-13T16:00:55Z\n\ndataproc/cluster-creation: Provides a comprehensive analysis of common issues which affect Dataproc cluster creation.\n\n  This runbook focuses on a range of potential problems for Dataproc clusters on\n  Google Cloud Platform. By conducting a series of checks, the runbook aims to\n  pinpoint the root cause of cluster creation difficulties.\n\n  The following areas are examined:\n\n  - Stockout errors: Evaluates Logs Explorer logs regarding stockout in the\n  region/zone.\n\n  - Quota availability: Checks for the quota availability in Dataproc cluster\n  project.\n\n  - Network configuration: Performs GCE Network Connectivity Tests, checks\n  necessary firewall rules, external/internal IP configuration.\n\n  - Cross-project configuration: Checks if the service account is not in the\n  same\n  project and reviews additional\n    roles and organization policies enforcement.\n\n  - Shared VPC configuration: Checks if the Dataproc cluster uses a Shared VPC\n  network and\n  evaluates if right service account roles are added.\n\n  - Init actions script failures: Evaluates Logs Explorer\n  logs regarding init actions script failures or timeouts.\n  \n[START]: Initiating diagnostics for Cluster Creation issues.\n[GATEWAY]: Execute child steps depending on if they require details from existing cluster or not\n[AUTOMATED STEP]: Check for quota entries in Cloud logging\n[AUTOMATED STEP]: Check for log entries matching problematic filter string\n\n   - gcpdiag-dataproc3-aaaa                                               [UNCERTAIN]\n     [REASON]\n     No issues with insufficient quota identified for cluster cluster-stockout-issues in project gcpdiag-dataproc3-aaaa using query:\n\n         resource.type=\"cloud_dataproc_cluster\"\n         protoPayload.status.message=~\"Insufficient .* quota\"\n         resource.labels.cluster_name=\"cluster-stockout-issues\"\n         severity=ERROR\n         log_id(\"cloudaudit.googleapis.com/activity\")\n         timestamp >= \"2025-06-13 16:00:55+00:00\" AND timestamp <= \"2025-06-13 17:00:55+00:00\"\n     .\n\n     [REMEDIATION]\n\n     1. Verify of the time range used in the filter matches that when the issue occurred and adjust it accordingly.\n     Query:\n\n         resource.type=\"cloud_dataproc_cluster\"\n         protoPayload.status.message=~\"Insufficient .* quota\"\n         resource.labels.cluster_name=\"cluster-stockout-issues\"\n         severity=ERROR\n         log_id(\"cloudaudit.googleapis.com/activity\")\n         timestamp >= \"2025-06-13 16:00:55+00:00\" AND timestamp <= \"2025-06-13 17:00:55+00:00\"\n\n     2. Verify that the property `dataproc.logging.stackdriver.enable` has not been set to false for cluster cluster-stockout-issues in project gcpdiag-dataproc3-aaaa: <https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/cluster-properties#dataproc_service_properties_table>\n     3. Verify that logging for the cluster cluster-stockout-issues has not been disabled due to cost management: <https://cloud.google.com/blog/products/devops-sre/cloud-logging-cost-management-best-practices>\n\n[AUTOMATED STEP]: Check for stockout entries in Cloud logging\n[AUTOMATED STEP]: Check for log entries matching problematic filter string\n\n   - gcpdiag-dataproc3-aaaa                                               [FAIL]\n     [REASON]\n     The cluster cluster-stockout-issues creation in project gcpdiag-dataproc3-aaaa failed due to insufficient resources in the selected zone/region.\n\n     [REMEDIATION]\n     A Dataproc cluster creation stockout occurs when the requested resources for cluster creation are currently not available within a specified Google Cloud zone or region.\n\n     Resolution Steps:\n\n     1. Utilize Dataproc Auto Zone Placement: When creating your Dataproc cluster, avoid explicitly specifying a zone. Instead, leverage Dataproc's Auto Zone placement feature, which automatically selects an available zone with sufficient resources. <https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/auto-zone>\n     2. Review Capacity and Quota Management: If you are already employing Auto Zone placement and still encountering stockouts, it may indicate broader capacity or quota limitations. Consult the following resource for comprehensive strategies on managing capacity, quotas, and stockouts in Google Cloud.<https://www.googlecloudcommunity.com/gc/Community-Blogs/Managing-Capacity-Quota-and-Stockouts-in-the-Cloud-Concepts-and/ba-p/464770>\n\n\n[END]: This is the end step of the runbook.\n[INFO]: Some steps were skipped because cluster cluster-stockout-issues\n          could not be found in project gcpdiag-dataproc3-aaaa. Most steps in this runbook\n          require that the cluster is in `ERROR` state and has not been deleted.\n          If the cluster was in `ERROR` and has been deleted, please create the cluster again and\n          rerun this runbook before deleting the cluster to rule out any cluster creation issues.\n\n\n"
  },
  {
    "path": "gcpdiag/runbook/dataproc/snapshots/spark_job_failures.txt",
    "content": "dataproc_cluster_name=job_failed,job_id=1234567891,project_id=gcpdiag-dataproc1-aaaa,region=us-\ncentral1\n\ndataproc/spark-job-failures: Provides a comprehensive analysis of common issues which affects Dataproc Spark job failures.\n\n  This runbook focuses on a range of potential problems for Dataproc Spark jobs\n  on\n  Google Cloud Platform. By conducting a series of checks, the runbook aims to\n  pinpoint the root cause of Spark job failures.\n\n  The following areas are examined:\n\n  - Cluster version supportability: Evaluates if the job was run on a supported\n  cluster image version.\n  - Permissions: Checks for permission related issues on the cluster and GCS\n  bucket level.\n  - OOM: Checks Out-Of-Memory issues for the Spark job on master or worker\n  nodes.\n  - Logs: Check other logs related to shuffle failures, broken pipe, YARN\n  runtime exception, import failures.\n  - Throttling: Checks if the job was throttled and provides the exact reason\n  for it.\n  - GCS Connector: Evaluates possible issues with the GCS Connector.\n  - BigQuery Connector: Evaluates possible issues with BigQuery Connector, such\n  as dependency version conflicts.\n  \n[START]: Verify job exists in customer's project.\n[INFO]: Start time utc:2024-11-01 03:12:35.635169+00:00\n[INFO]: End time utc:2024-11-08 03:12:35.635169+00:00\n[GATEWAY]: Execute child steps depending on if the required details exist or not\n[COMPOSITE STEP]: Verify if job didn't failed with 'task not found' error.\n\n   - gcpdiag-dataproc1-aaaa/1234567891/us-central1                        [OK]\n     [REASON]\n     Job `1234567891` did not fail due to a 'task not found' error. Unable to find the cluster deletion log between 2024-11-01 03:12:35.635169+00:00 and 2024-11-08 03:12:35.635169+00:00. It could be some other issue.Please raise a support case to investigate further.\n\n[AUTOMATED STEP]: Verify if OOM has happened on master .\n\n   - gcpdiag-dataproc1-aaaa                                               [OK]\n     [REASON]\n     Didn't find logs messages related to Master OOM on the cluster: job-failed.\n\n[AUTOMATED STEP]: Verify if OOM has happened on worker nodes.\n[AUTOMATED STEP]: Check if investigated logs messages exist in the Dataproc cluster.\n\n   - gcpdiag-dataproc1-aaaa                                               [OK]\n     [REASON]\n     Didn't find logs messages related to Worker OOM on the cluster: job-failed.\n\n[COMPOSITE STEP]: Check if secondary worker preemption has happened.\n[AUTOMATED STEP]: Check if investigated logs messages exist in the Dataproc cluster.\n\n   - gcpdiag-dataproc1-aaaa                                               [OK]\n     [REASON]\n     Didn't find logs messages related to secondary worker preemption on the cluster: job-failed.\n\n[COMPOSITE STEP]: Check if secondary worker preemption has happened.\n[AUTOMATED STEP]: Check if investigated logs messages exist in the Dataproc cluster.\n\n   - gcpdiag-dataproc1-aaaa                                               [OK]\n     [REASON]\n     NOTICE: No message available to parse for this step\n[COMPOSITE STEP]: Verify if the port exhaustion has happened.\n[AUTOMATED STEP]: Check if investigated logs messages exist in the Dataproc cluster.\n\n   - gcpdiag-dataproc1-aaaa                                               [OK]\n     [REASON]\n     No log messages related to \"Address already in use: Service 'sparkDriver' failed after 1000 retries\" were found on the cluster: job-failed.\n\n[COMPOSITE STEP]: Verify if the killing of Orphaned applications has happened.\n[AUTOMATED STEP]: Check if investigated logs messages exist in the Dataproc cluster.\n\n   - gcpdiag-dataproc1-aaaa                                               [OK]\n     [REASON]\n     No log messages related to \"Killing orphaned yarn application\" were found on the cluster: job-failed.\n\n[COMPOSITE STEP]: Check Python import failure.\n[AUTOMATED STEP]: Check if investigated logs messages exist in the Dataproc cluster.\n\n   - gcpdiag-dataproc1-aaaa                                               [OK]\n     [REASON]\n     No log messages related to \"ImportError: cannot import name\" were found on the cluster: job-failed.\n\n[COMPOSITE STEP]: Check Shuffle Service Kill logs and autoscaling & preemptibility.\n[AUTOMATED STEP]: Check if investigated logs messages exist in the Dataproc cluster.\n\n   - gcpdiag-dataproc1-aaaa                                               [OK]\n     [REASON]\n     No shuffle service failure detected in cluster job-failed\n\n[AUTOMATED STEP]: Checking autoscaling policies and graceful decommission timeouts.\n[COMPOSITE STEP]: Check if STW GC Pause has happened on the cluster.\n[AUTOMATED STEP]: Check if investigated logs messages exist in the Dataproc cluster.\n\n   - gcpdiag-dataproc1-aaaa                                               [OK]\n     [REASON]\n     No log messages related to \"Detected pause in JVM or host machine (eg GC)\" were found on the cluster: job-failed.\n\n[COMPOSITE STEP]: Check for CheckYarnRuntimeException logs.\n[AUTOMATED STEP]: Check if investigated logs messages exist in the Dataproc cluster.\n\n   - gcpdiag-dataproc1-aaaa                                               [OK]\n     [REASON]\n     No log messages related to \"YarnRuntimeException: Could not load history file .* /mapreduce-job-history/intermediate-done/root\" were found on the cluster: job-failed.\n\n[COMPOSITE STEP]: Check for Job Throttling messages in the logs.\n[AUTOMATED STEP]: Check if investigated logs messages exist in the Dataproc cluster.\n\n   - gcpdiag-dataproc1-aaaa                                               [OK]\n     [REASON]\n     No log messages related to \"Too many running jobs\" were found on the cluster: job-failed.\n\n[AUTOMATED STEP]: Check if investigated logs messages exist in the Dataproc cluster.\n\n   - gcpdiag-dataproc1-aaaa                                               [OK]\n     [REASON]\n     No log messages related to \"Not enough free memory\" were found on the cluster: job-failed.\n\n[AUTOMATED STEP]: Check if investigated logs messages exist in the Dataproc cluster.\n\n   - gcpdiag-dataproc1-aaaa                                               [OK]\n     [REASON]\n     No log messages related to \"High system memory usage\" were found on the cluster: job-failed.\n\n[AUTOMATED STEP]: Check if investigated logs messages exist in the Dataproc cluster.\n\n   - gcpdiag-dataproc1-aaaa                                               [OK]\n     [REASON]\n     No log messages related to \"Rate limit\" were found on the cluster: job-failed.\n\n[AUTOMATED STEP]: Check if investigated logs messages exist in the Dataproc cluster.\n\n   - gcpdiag-dataproc1-aaaa                                               [OK]\n     [REASON]\n     No log messages related to \"Master agent not initialized\" were found on the cluster: job-failed.\n\n[AUTOMATED STEP]: Check if investigated logs messages exist in the Dataproc cluster.\n\n   - gcpdiag-dataproc1-aaaa                                               [OK]\n     [REASON]\n     No log messages related to \"Disk space too low on Master\" were found on the cluster: job-failed.\n\n[COMPOSITE STEP]: Check for non-default GCS connector.\n[AUTOMATED STEP]: Check for logs indicating shuffle failures.\n\n   - gcpdiag-dataproc1-aaaa                                               [OK]\n     [REASON]\n     No shuffle failure logs found for cluster job-failed\n\n[END]: This is the end step of the runbook.\n[INFO]: Please visit all the FAIL steps and address the suggested remediations.\n        If the REMEDIATION suggestions were not able to solve your issue please open a Support case\n        with failed job details:\n          1. Driver output\n          2. YARN application logs\n          3. (optional) Event logs, if you are facing a performance issue\n          4. (optional) If there was a successful run in the past,\n          provide job id and logs of that run\n\n\ndataproc_cluster_name=job-not-failed,job_id=1234567890,project_id=gcpdiag-dataproc1-aaaa,region=us-\ncentral1\n\ndataproc/spark-job-failures: Provides a comprehensive analysis of common issues which affects Dataproc Spark job failures.\n\n  This runbook focuses on a range of potential problems for Dataproc Spark jobs\n  on\n  Google Cloud Platform. By conducting a series of checks, the runbook aims to\n  pinpoint the root cause of Spark job failures.\n\n  The following areas are examined:\n\n  - Cluster version supportability: Evaluates if the job was run on a supported\n  cluster image version.\n  - Permissions: Checks for permission related issues on the cluster and GCS\n  bucket level.\n  - OOM: Checks Out-Of-Memory issues for the Spark job on master or worker\n  nodes.\n  - Logs: Check other logs related to shuffle failures, broken pipe, YARN\n  runtime exception, import failures.\n  - Throttling: Checks if the job was throttled and provides the exact reason\n  for it.\n  - GCS Connector: Evaluates possible issues with the GCS Connector.\n  - BigQuery Connector: Evaluates possible issues with BigQuery Connector, such\n  as dependency version conflicts.\n  \n[START]: Verify job exists in customer's project.\n\n   - gcpdiag-dataproc1-aaaa                                               [SKIP]\n     [REASON]\n     Job 1234567890 completed successfully.If the job experienced slow performance, potential causesinclude data skew, changes in data volume, or network latency.If performance issues persist, open a support case and share theSpark event log for both the fast and slow job runs.\n\n\n"
  },
  {
    "path": "gcpdiag/runbook/dataproc/spark_job_failures.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Module containing Dataproc Spark job failures diagnostic tree and custom steps.\"\"\"\n\nfrom datetime import datetime, timedelta, timezone\n\nfrom packaging import version\n\nfrom gcpdiag import runbook\nfrom gcpdiag.queries import crm, dataproc, iam, logs\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.crm import generalized_steps as crm_gs\nfrom gcpdiag.runbook.dataproc import constants as dp_const\nfrom gcpdiag.runbook.dataproc import flags\nfrom gcpdiag.runbook.dataproc import generalized_steps as dp_gs\nfrom gcpdiag.runbook.iam import generalized_steps as iam_gs\nfrom gcpdiag.utils import GcpApiError\n\n\nclass SparkJobFailures(runbook.DiagnosticTree):\n  \"\"\"Provides a comprehensive analysis of common issues which affects Dataproc Spark job failures.\n\n  This runbook focuses on a range of potential problems for Dataproc Spark jobs\n  on\n  Google Cloud Platform. By conducting a series of checks, the runbook aims to\n  pinpoint the root cause of Spark job failures.\n\n  The following areas are examined:\n\n  - Cluster version supportability: Evaluates if the job was run on a supported\n  cluster image version.\n  - Permissions: Checks for permission related issues on the cluster and GCS\n  bucket level.\n  - OOM: Checks Out-Of-Memory issues for the Spark job on master or worker\n  nodes.\n  - Logs: Check other logs related to shuffle failures, broken pipe, YARN\n  runtime exception, import failures.\n  - Throttling: Checks if the job was throttled and provides the exact reason\n  for it.\n  - GCS Connector: Evaluates possible issues with the GCS Connector.\n  - BigQuery Connector: Evaluates possible issues with BigQuery Connector, such\n  as dependency version conflicts.\n  \"\"\"\n\n  parameters = {\n      flags.PROJECT_ID: {\n          'type': str,\n          'help': 'The Project ID of the resource under investigation',\n          'required': True,\n      },\n      flags.JOB_ID: {\n          'type': str,\n          'help': 'The Job ID of the resource under investigation',\n          'deprecated': True,\n          'new_parameter': 'dataproc_job_id'\n      },\n      flags.DATAPROC_JOB_ID: {\n          'type': str,\n          'help': 'The Job ID of the resource under investigation',\n          'required': True,\n      },\n      flags.REGION: {\n          'type': str,\n          'help': 'Dataproc job/cluster Region',\n          'required': True,\n      },\n      flags.ZONE: {\n          'type': str,\n          'help': 'Dataproc cluster Zone',\n      },\n      flags.SERVICE_ACCOUNT: {\n          'type':\n              str,\n          'help':\n              ('Dataproc cluster Service Account used to create the resource'),\n      },\n      flags.CROSS_PROJECT_ID: {\n          'type':\n              str,\n          'help':\n              ('Cross Project ID, where service account is located if it is not'\n               ' in the same project as the Dataproc cluster'),\n      },\n      flags.STACKDRIVER: {\n          'type': str,\n          'help': ('Checks if stackdriver logging is enabled for further'\n                   ' troubleshooting'),\n          'default': False,\n      },\n  }\n\n  def legacy_parameter_handler(self, parameters):\n    if flags.JOB_ID in parameters:\n      parameters[flags.DATAPROC_JOB_ID] = parameters.pop(flags.JOB_ID)\n\n  def build_tree(self):\n    \"\"\"Dataproc Spark Job Failures debug tree.\"\"\"\n    # Instantiate your step classes\n    job_exist = JobStart()\n    self.add_start(job_exist)\n    job_details_gateway = JobDetailsDependencyGateway()\n    self.add_step(parent=job_exist, child=job_details_gateway)\n    self.add_end(SparkJobEnd())\n\n\nclass JobStart(runbook.StartStep):\n  \"\"\"Prepares the parameters required for the dataproc/spark_job_failures runbook.\n\n  Ensures both project_id, region and job_id parameters are available.\n  \"\"\"\n\n  template = 'job::job_id_exists'\n\n  def execute(self):\n    \"\"\"Verify job exists in customer's project.\"\"\"\n    project = crm.get_project(op.get(flags.PROJECT_ID))\n\n    # uses the API to get the cluster information from the job id\n    try:\n      job = dataproc.get_job_by_jobid(project_id=op.get(flags.PROJECT_ID),\n                                      region=op.get(flags.REGION),\n                                      job_id=op.get(flags.DATAPROC_JOB_ID))\n    except (AttributeError, GcpApiError, IndexError, TypeError, ValueError):\n      op.add_skipped(\n          project,\n          reason=op.prep_msg(\n              op.SKIPPED_REASON,\n              project_id=project,\n              job_id=op.get(flags.DATAPROC_JOB_ID),\n              cluster_name=op.get(flags.DATAPROC_CLUSTER_NAME),\n          ),\n      )\n      return\n\n    if job.state == 'DONE':\n      op.add_skipped(\n          project,\n          reason=(\n              'Job {} completed successfully.'\n              'If the job experienced slow performance, potential causes'\n              'include data skew, changes in data volume, or network latency.'\n              'If performance issues persist, open a support case and share the'\n              'Spark event log for both the fast and slow job runs.'.format(\n                  op.get(flags.DATAPROC_JOB_ID))))\n      return\n\n    # Start date is the date for when the job was running\n    start_time = datetime.strptime(\n        job.status_history['RUNNING'],\n        '%Y-%m-%dT%H:%M:%S.%fZ').replace(tzinfo=timezone.utc)\n\n    # End date is the start date + 7 days\n    end_time = start_time + timedelta(days=7)\n\n    # Saving cluster parameters\n    op.put(flags.START_TIME, start_time)\n    op.info(f'Start time utc:{start_time}')\n    op.put(flags.END_TIME, end_time)\n    op.info(f'End time utc:{end_time}')\n    op.put(flags.CLUSTER_UUID, job.cluster_uuid)\n    op.put(flags.DATAPROC_CLUSTER_NAME, job.cluster_name)\n\n    if check_datetime_gap(op.get(flags.START_TIME), op.get(flags.END_TIME), 30):\n      op.put(flags.JOB_OLDER_THAN_30_DAYS, True)\n    else:\n      op.put(flags.JOB_OLDER_THAN_30_DAYS, False)\n\n    cluster = dataproc.get_cluster(cluster_name=op.get(\n        flags.DATAPROC_CLUSTER_NAME),\n                                   region=op.get(flags.REGION),\n                                   project=op.get(flags.PROJECT_ID))\n\n    if cluster:\n      op.put('cluster_exists', True)\n      if not op.get(flags.SERVICE_ACCOUNT):\n        #Saving Service Account parameter\n        if cluster.vm_service_account_email:\n          op.put(flags.SERVICE_ACCOUNT, cluster.vm_service_account_email)\n\n    op.add_ok(\n        project,\n        reason=op.prep_msg(\n            op.SUCCESS_REASON,\n            project_id=project,\n            job_id=op.get(flags.DATAPROC_JOB_ID),\n            cluster_name=op.get(flags.DATAPROC_CLUSTER_NAME),\n        ),\n    )\n    return\n\n\nclass JobDetailsDependencyGateway(runbook.Gateway):\n  \"\"\"Decision point for child steps that require cluster details and those that dont.\n\n  Uses cluster details from the Dataproc API set in the start step to reduce scope of\n  errors from invalid input\n  \"\"\"\n\n  def execute(self):\n    \"\"\"Execute child steps depending on if the required details exist or not\"\"\"\n\n    # add child steps that depend on job details from the API\n    self.add_child(CheckTaskNotFound())\n    self.add_child(CheckMasterOOM())\n    self.add_child(CheckWorkerOOM())\n    self.add_child(CheckSWPreemption())\n    self.add_child(CheckWorkerDiskUsageIssue())\n    self.add_child(CheckPortExhaustion())\n    self.add_child(CheckKillingOrphanedApplication())\n    self.add_child(CheckPythonImportFailure())\n    self.add_child(CheckShuffleServiceKill())\n    self.add_child(CheckGCPause())\n    self.add_child(CheckYarnRuntimeException())\n    self.add_child(CheckJobThrottling())\n    self.add_child(CheckGCSConnector())\n    self.add_child(CheckShuffleFailures())\n\n    cluster_exists = op.get('cluster_exists', False)\n    if cluster_exists:\n      # add child steps that depend on cluster details from the API\n      self.add_child(CheckStackdriverSetting())\n      self.add_child(CheckClusterVersion())\n      self.add_child(CheckPermissions())\n      self.add_child(dp_gs.CheckClusterNetworkConnectivity())\n      self.add_child(CheckBQConnector())\n\n\nclass CheckStackdriverSetting(runbook.Step):\n  \"\"\"Check if Stackdriver is enabled for the cluster.\n\n  If the property is provided manually, It will be used if\n  the cluster does not exist.\n  \"\"\"\n\n  template = 'dataproc_attributes::stackdriver'\n\n  def execute(self):\n    \"\"\"Checking Stackdriver setting.\"\"\"\n    # taking cluster details\n    cluster = dataproc.get_cluster(cluster_name=op.get(\n        flags.DATAPROC_CLUSTER_NAME),\n                                   region=op.get(flags.REGION),\n                                   project=op.get(flags.PROJECT_ID))\n\n    if cluster is not None:\n      op.put(flags.STACKDRIVER, cluster.is_stackdriver_logging_enabled)\n\n    if op.get(flags.STACKDRIVER):\n      op.add_ok(cluster, reason=op.prep_msg(op.SUCCESS_REASON))\n    else:\n      op.add_uncertain(\n          cluster,\n          reason=op.prep_msg(op.UNCERTAIN_REASON),\n          remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION),\n      )\n\n\nclass CheckClusterVersion(runbook.Step):\n  \"\"\"Verify if the cluster version is supported.\n  \"\"\"\n\n  template = 'dataproc_attributes::unspported_image_version'\n\n  def execute(self):\n    \"\"\"Verify cluster version.\"\"\"\n\n    supported_versions = dataproc.extract_dataproc_supported_version()\n    cluster = dataproc.get_cluster(cluster_name=op.get(\n        flags.DATAPROC_CLUSTER_NAME),\n                                   region=op.get(flags.REGION),\n                                   project=op.get(flags.PROJECT_ID))\n\n    image_version = '.'.join(cluster.image_version.split('.')[:2])\n    op.put(flags.IMAGE_VERSION, image_version)\n\n    if image_version in supported_versions:\n      op.add_ok(\n          cluster,\n          reason=op.prep_msg(op.SUCCESS_REASON,\n                             cluster_name=op.get(flags.DATAPROC_CLUSTER_NAME)),\n      )\n    else:\n      op.add_failed(\n          cluster,\n          reason=op.prep_msg(op.FAILURE_REASON,\n                             cluster_name=op.get(flags.DATAPROC_CLUSTER_NAME)),\n          remediation=op.prep_msg(op.FAILURE_REMEDIATION),\n      )\n\n\nclass CheckTaskNotFound(runbook.CompositeStep):\n  \"\"\"Verify if dataproc job failed due to task not found.\"\"\"\n\n  template = 'job::task_not_found'\n\n  def execute(self):\n    \"\"\"Verify if job didn't failed with 'task not found' error.\"\"\"\n    project = crm.get_project(op.get(flags.PROJECT_ID))\n\n    if op.get(flags.JOB_OLDER_THAN_30_DAYS):\n      op.add_skipped(\n          project,\n          reason=('Job is older than 30 days'),\n      )\n      return\n\n    job = dataproc.get_job_by_jobid(op.get(flags.PROJECT_ID),\n                                    op.get(flags.REGION),\n                                    op.get(flags.DATAPROC_JOB_ID))\n\n    cluster_uuid = job.cluster_uuid\n    start_time = op.get(flags.START_TIME)\n    end_time = op.get(flags.END_TIME)\n\n    additional_message = (\n        f'Unable to find the cluster deletion log between'\n        f' {start_time} and {end_time}. It could be some other issue.'\n        f'Please raise a support case to investigate further.')\n\n    log_search_filter = f\"\"\"resource.type=\"cloud_dataproc_cluster\"\n    resource.labels.cluster_uuid=\"{cluster_uuid}\"\n    protoPayload.methodName=\"google.cloud.dataproc.v1.ClusterController.DeleteCluster\"\n    \"\"\"\n\n    log_entries = logs.realtime_query(\n        project_id=op.get(flags.PROJECT_ID),\n        filter_str=log_search_filter,\n        start_time=start_time,\n        end_time=end_time,\n    )\n\n    if log_entries:\n      last_log = log_entries.pop()\n      user = last_log['protoPayload']['authenticationInfo']['principalEmail']\n      additional_message = f'User {user} deleted the cluster.'\n\n    if job.details != 'Task not found':\n      op.add_ok(\n          job,\n          reason=op.prep_msg(\n              op.SUCCESS_REASON,\n              job_id=op.get(flags.DATAPROC_JOB_ID),\n              additional_message=additional_message,\n          ),\n      )\n    else:\n      op.add_failed(\n          job,\n          reason=op.prep_msg(\n              op.FAILURE_REASON,\n              job_id=op.get(flags.DATAPROC_JOB_ID),\n              additional_message=additional_message,\n          ),\n          remediation=op.prep_msg(op.FAILURE_REMEDIATION),\n      )\n\n\nclass CheckPermissions(runbook.CompositeStep):\n  \"\"\"Check if the permissions are set correctly.\n  \"\"\"\n\n  template = 'permissions::permission_check'\n\n  def execute(self):\n    \"\"\"Verify permissions .\"\"\"\n\n    sa_email = op.get(flags.SERVICE_ACCOUNT)\n    project = crm.get_project(op.get(flags.PROJECT_ID))\n    op.info(('Service Account:{}').format(sa_email))\n\n    if sa_email:\n      sa_exists = iam.is_service_account_existing(email=sa_email,\n                                                  context=op.get_context())\n      cross_project_id = op.get(flags.CROSS_PROJECT_ID)\n      sa_exists_cross_project = False\n      if cross_project_id:\n        cross_project_context = op.get_context().copy_with(\n            project_id=cross_project_id)\n        sa_exists_cross_project = iam.is_service_account_existing(\n            email=sa_email, context=cross_project_context)\n    else:\n      sa_exists = False\n      sa_exists_cross_project = False\n\n    if sa_exists:\n      op.info(\n          'VM Service Account associated with Dataproc cluster was found in the'\n          ' same project')\n      op.info('Checking permissions.')\n      # Check for Service Account permissions\n      sa_permission_check = iam_gs.IamPolicyCheck()\n      sa_permission_check.project = op.get(flags.PROJECT_ID)\n      sa_permission_check.principal = (\n          f'serviceAccount:{op.get(flags.SERVICE_ACCOUNT)}')\n      sa_permission_check.require_all = True\n      sa_permission_check.roles = ['roles/dataproc.worker']\n      self.add_child(child=sa_permission_check)\n    elif sa_exists_cross_project:\n      op.info('VM Service Account associated with Dataproc cluster was found in'\n              ' cross project')\n      # Check if constraint is enforced\n      op.info('Checking constraints on service account project.')\n      orgpolicy_constraint_check = crm_gs.OrgPolicyCheck()\n      orgpolicy_constraint_check.project = op.get(flags.CROSS_PROJECT_ID)\n      orgpolicy_constraint_check.constraint = (\n          'constraints/iam.disableCrossProjectServiceAccountUsage')\n      orgpolicy_constraint_check.is_enforced = False\n      self.add_child(orgpolicy_constraint_check)\n\n      # Check Service Account roles\n      op.info('Checking roles in service account project.')\n      sa_permission_check = iam_gs.IamPolicyCheck()\n      sa_permission_check.project = op.get(flags.CROSS_PROJECT_ID)\n      sa_permission_check.principal = (\n          f'serviceAccount:{op.get(flags.SERVICE_ACCOUNT)}')\n      sa_permission_check.require_all = True\n      sa_permission_check.roles = [\n          'roles/iam.serviceAccountUser',\n          'roles/dataproc.worker',\n      ]\n      self.add_child(child=sa_permission_check)\n\n      # Check Service Agent Service Account roles\n      op.info('Checking service agent service account roles on service account'\n              ' project.')\n      # project = crm.get_project(op.get(flags.PROJECT_ID))\n      service_agent_sa = (\n          f'service-{project.number}@dataproc-accounts.iam.gserviceaccount.com')\n      service_agent_permission_check = iam_gs.IamPolicyCheck()\n      service_agent_permission_check.project = op.get(flags.CROSS_PROJECT_ID)\n      service_agent_permission_check.principal = (\n          f'serviceAccount:{service_agent_sa}')\n      service_agent_permission_check.require_all = True\n      service_agent_permission_check.roles = [\n          'roles/iam.serviceAccountUser',\n          'roles/iam.serviceAccountTokenCreator',\n      ]\n      self.add_child(child=service_agent_permission_check)\n\n      # Check Compute Agent Service Account\n      op.info('Checking compute agent service account roles on service account'\n              ' project.')\n      compute_agent_sa = (\n          f'service-{project.number}@compute-system.iam.gserviceaccount.com')\n      compute_agent_permission_check = iam_gs.IamPolicyCheck()\n      compute_agent_permission_check.project = op.get(flags.CROSS_PROJECT_ID)\n      compute_agent_permission_check.principal = (\n          f'serviceAccount:{compute_agent_sa}')\n      compute_agent_permission_check.require_all = True\n      compute_agent_permission_check.roles = [\n          'roles/iam.serviceAccountTokenCreator'\n      ]\n      self.add_child(child=compute_agent_permission_check)\n\n    else:\n      op.add_uncertain(project,\n                       reason=op.prep_msg(op.UNCERTAIN_REASON,\n                                          service_account=op.get(\n                                              flags.SERVICE_ACCOUNT),\n                                          project_id=op.get(flags.PROJECT_ID)),\n                       remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION))\n\n\nclass CheckMasterOOM(runbook.Step):\n  \"\"\"Check if OOM has happened on master.\n  \"\"\"\n\n  template = 'logs_related::master_oom'\n\n  def execute(self):\n    \"\"\"Verify if OOM has happened on master .\"\"\"\n\n    project = crm.get_project(op.get(flags.PROJECT_ID))\n\n    cluster_name = op.get(flags.DATAPROC_CLUSTER_NAME)\n    cluster_uuid = op.get(flags.CLUSTER_UUID)\n    job_id = op.get(flags.DATAPROC_JOB_ID)\n    log_message = 'Task Not Acquired'\n\n    log_search_filter = f\"\"\"resource.type=\"cloud_dataproc_cluster\"\n    resource.labels.cluster_name=\"{cluster_name}\"\n    resource.labels.cluster_uuid=\"{cluster_uuid}\"\n    \"{job_id}\"\n    jsonPayload.message=~\"{log_message}\" \"\"\"\n\n    start_time = op.get(flags.START_TIME)\n    end_time = op.get(flags.END_TIME)\n\n    log_entries = logs.realtime_query(\n        project_id=op.get(flags.PROJECT_ID),\n        filter_str=log_search_filter,\n        start_time=start_time,\n        end_time=end_time,\n    )\n\n    if log_entries:\n      log_message_check_sigterm = (\n          'Driver received SIGTERM/SIGKILL signal and exited with')\n\n      log_search_filter_check_sigterm = f\"\"\"resource.type=\"cloud_dataproc_cluster\"\n      resource.labels.cluster_name=\"{cluster_name}\"\n      resource.labels.cluster_uuid=\"{cluster_uuid}\"\n      \"{job_id}\"\n      jsonPayload.message=~\"{log_message_check_sigterm}\" \"\"\"\n\n      log_entries_check_sigterm = logs.realtime_query(\n          project_id=op.get(flags.PROJECT_ID),\n          filter_str=log_search_filter_check_sigterm,\n          start_time=start_time,\n          end_time=end_time,\n      )\n\n      if log_entries_check_sigterm:\n        op.add_failed(\n            project,\n            reason=op.prep_msg(\n                op.FAILURE_REASON,\n                log=log_message,\n                cluster_name=cluster_name,\n            ),\n            remediation=op.prep_msg(op.FAILURE_REMEDIATION),\n        )\n        return\n      else:\n        log_message_check_yarn_metrics = (\n            'Exception calling Future.get() on YARN metrics rpc')\n\n        log_search_filter_check_yarn_metrics = f\"\"\"resource.type=\"cloud_dataproc_cluster\"\n        resource.labels.cluster_name=\"{cluster_name}\"\n        resource.labels.cluster_uuid=\"{cluster_uuid}\"\n        jsonPayload.message=~\"{log_message_check_yarn_metrics}\" \"\"\"\n\n        log_entries_check_yarn_metrics = logs.realtime_query(\n            project_id=op.get(flags.PROJECT_ID),\n            filter_str=log_search_filter_check_yarn_metrics,\n            start_time=start_time,\n            end_time=end_time,\n        )\n        if log_entries_check_yarn_metrics:\n          op.add_failed(\n              project,\n              reason=op.prep_msg(\n                  op.FAILURE_REASON,\n                  cluster_name=cluster_name,\n              ),\n              remediation=op.prep_msg(op.FAILURE_REMEDIATION),\n          )\n          return\n\n    op.add_ok(\n        project,\n        reason=op.prep_msg(\n            op.SUCCESS_REASON,\n            cluster_name=cluster_name,\n        ),\n    )\n\n\nclass CheckWorkerOOM(runbook.Step):\n  \"\"\"Verify if OOM has happened on worker nodes.\"\"\"\n\n  template = 'logs_related::worker_oom'\n\n  def execute(self):\n    \"\"\"Verify if OOM has happened on worker nodes.\"\"\"\n    check_worker_oom = dp_gs.CheckLogsExist()\n    check_worker_oom.template = self.template\n    check_worker_oom.log_message = (\n        '(Container exited with a non-zero exit code 143| Container exited with'\n        ' a non-zero exit code 137|java.lang.OutOfMemoryError)')\n    self.add_child(child=check_worker_oom)\n\n\nclass CheckSWPreemption(runbook.CompositeStep):\n  \"\"\"Verify if secondary worker preemption has happened.\"\"\"\n\n  template = 'logs_related::sw_preemption'\n\n  def execute(self):\n    \"\"\"Check if secondary worker preemption has happened.\"\"\"\n    check_sw_preemption_log = dp_gs.CheckLogsExist()\n    check_sw_preemption_log.template = self.template\n    check_sw_preemption_log.log_message = dp_const.SW_PREEMPTION_LOG\n    self.add_child(child=check_sw_preemption_log)\n\n\nclass CheckWorkerDiskUsageIssue(runbook.CompositeStep):\n  \"\"\"Verify if worker disk usage issue has happened.\"\"\"\n\n  template = 'logs_related::woker_disk_usage'\n\n  def execute(self):\n    \"\"\"Check if secondary worker preemption has happened.\"\"\"\n    check_worker_disk_usage_log = dp_gs.CheckLogsExist()\n    check_worker_disk_usage_log.template = self.template\n    check_worker_disk_usage_log.log_message = dp_const.WORKER_DISK_USAGE_LOG\n    self.add_child(child=check_worker_disk_usage_log)\n\n\nclass CheckPortExhaustion(runbook.CompositeStep):\n  \"\"\"Verify if the port exhaustion has happened.\"\"\"\n\n  template = 'logs_related::port_exhaustion'\n\n  def execute(self):\n    \"\"\"Verify if the port exhaustion has happened.\"\"\"\n\n    check_port_exhaustion_log = dp_gs.CheckLogsExist()\n    check_port_exhaustion_log.template = 'logs_related::port_exhaustion'\n    check_port_exhaustion_log.log_message = dp_const.PORT_EXHAUSTION_LOG\n    self.add_child(child=check_port_exhaustion_log)\n\n\nclass CheckKillingOrphanedApplication(runbook.CompositeStep):\n  \"\"\"Verify if the killing of Orphaned applications has happened.\"\"\"\n\n  template = 'logs_related::kill_orphaned_application'\n\n  def execute(self):\n    \"\"\"Verify if the killing of Orphaned applications has happened.\"\"\"\n\n    check_kill_orphaned_application = dp_gs.CheckLogsExist()\n    check_kill_orphaned_application.template = (\n        'logs_related::kill_orphaned_application')\n    check_kill_orphaned_application.log_message = dp_const.KILL_ORPHANED_APP_LOG\n    self.add_child(child=check_kill_orphaned_application)\n\n\nclass CheckPythonImportFailure(runbook.CompositeStep):\n  \"\"\"Check if the python import failure has happened.\"\"\"\n\n  def execute(self):\n    \"\"\"Check Python import failure.\"\"\"\n\n    check_python_import = dp_gs.CheckLogsExist()\n    check_python_import.template = 'logs_related::check_python_import_failure'\n    check_python_import.log_message = dp_const.PYTHON_IMPORT_LOG\n    self.add_child(child=check_python_import)\n\n    cluster = dataproc.get_cluster(cluster_name=op.get(\n        flags.DATAPROC_CLUSTER_NAME),\n                                   region=op.get(flags.REGION),\n                                   project=op.get(flags.PROJECT_ID))\n\n    if cluster:\n      if cluster.initialization_actions:\n        op.info(\n            'The cluster has initialization actions. Please open a support case'\n            ' and share more information of packages and versions of libraries'\n            ' being fetched in your custom initialization actions scripts.')\n\n\nclass CheckShuffleFailures(runbook.Step):\n  \"\"\"Check for logs indicating shuffle failures.\"\"\"\n\n  template = 'logs_related::shuffle_failures'\n\n  def execute(self):\n    \"\"\"Check for logs indicating shuffle failures.\"\"\"\n\n    project = crm.get_project(op.get(flags.PROJECT_ID))\n\n    cluster_name = op.get(flags.DATAPROC_CLUSTER_NAME)\n    cluster_uuid = op.get(flags.CLUSTER_UUID)\n\n    log_search_filter = f\"\"\"resource.type=\"cloud_dataproc_cluster\"\n    resource.labels.cluster_name=\"{cluster_name}\"\n    resource.labels.cluster_uuid=\"{cluster_uuid}\"\n    \"{op.get(flags.DATAPROC_JOB_ID)}\"\n    (\n      (\"ExecutorLostFailure\" AND \"Unable to create executor\" AND \"Unable to register with external shuffle server\") OR\n      (\"java.io.IOException\" AND \"Exception while uploading shuffle data\") OR\n      (\"Requesting driver to remove executor\" AND \"Container from a bad node\")\n    ) \"\"\"\n\n    if op.get(flags.JOB_OLDER_THAN_30_DAYS):\n      op.add_skipped(\n          project,\n          reason=('Job is older than 30 days'),\n      )\n      return\n\n    start_time = op.get(flags.START_TIME)\n    end_time = op.get(flags.END_TIME)\n\n    log_entries = logs.realtime_query(\n        project_id=project.id,\n        filter_str=log_search_filter,\n        start_time=start_time,\n        end_time=end_time,\n    )\n\n    if log_entries:\n      cluster = dataproc.get_cluster(cluster_name=op.get(\n          flags.DATAPROC_CLUSTER_NAME),\n                                     region=op.get(flags.REGION),\n                                     project=op.get(flags.PROJECT_ID))\n\n      root_causes = []\n      remediation = []\n\n      # Check for insufficient primary workers in EFM\n      if (cluster.config.software_config.properties.get(\n          'dataproc:dataproc.enable.enhanced.flexibility.mode',\n          'false') == 'true'):\n        if (cluster.number_of_primary_workers /\n            cluster.number_of_secondary_workers < 1):\n          root_causes.append('Insufficient primary workers in EFM.')\n          remediation.append(\n              'Consider increasing the primary to secondary worker ratio.')\n\n      # Check for older image and suggest EFM HCFS mode\n      if (cluster.config.software_config.image_version.startswith('1.5') and\n          cluster.config.software_config.properties.get(\n              'dataproc:efm.spark.shuffle') != 'hcfs'):\n        remediation.append(\n            'Consider using EFM HCFS mode with GCS for older images.')\n\n      # Check for small disk size\n      disk_size_gb = cluster.config.worker_config.disk_config.boot_disk_size_gb\n      if disk_size_gb < 500:\n        root_causes.append(\n            f'Small disk size ({disk_size_gb} GB) on cluster nodes.')\n        remediation.append(\n            'Consider increasing disk size for better I/O performance.')\n\n      # Check for low IO connection timeout\n      spark_shuffle_io_timeout = cluster.config.software_config.properties.get(\n          'spark:spark.shuffle.io.connectionTimeout', 120)\n      if spark_shuffle_io_timeout < 600:\n        root_causes.append('Low IO connection timeout in Spark shuffle.')\n        remediation.append(\n            \"Consider increasing 'spark:spark.shuffle.io.connectionTimeout' to\"\n            ' 600.')\n\n      # Check for data skew and large partitions with PVM secondary workers\n      if cluster.is_preemptible_secondary_workers:\n        root_causes.append(\n            'Data skew and large partitions might be an issue with PVM'\n            ' secondary workers.')\n        remediation.append(\n            'Consider using smaller batches, increasing partition count, or'\n            ' using a better partitioning key.')\n\n      op.add_failed(\n          crm.get_project(project.id),\n          reason=op.prep_msg(\n              op.FAILURE_REASON,\n              cluster_name=cluster_name,\n              root_causes=', '.join(root_causes),\n          ),\n          remediation=op.prep_msg(op.FAILURE_REMEDIATION,\n                                  remediation=', '.join(remediation)),\n      )\n    else:\n      op.add_ok(\n          crm.get_project(project.id),\n          reason=op.prep_msg(\n              op.SUCCESS_REASON,\n              cluster_name=cluster_name,\n          ),\n      )\n\n\nclass CheckShuffleServiceKill(runbook.CompositeStep):\n  \"\"\"Verify the presence of shuffle service kill related logs.\n  \"\"\"\n\n  def execute(self):\n    \"\"\"Check Shuffle Service Kill logs and autoscaling & preemptibility.\"\"\"\n\n    check_shuffle_kill = dp_gs.CheckLogsExist()\n    check_shuffle_kill.template = 'logs_related::shuffle_service_kill'\n    check_shuffle_kill.log_message = dp_const.SHUFFLE_KILL_LOG\n    self.add_child(child=check_shuffle_kill)\n    self.add_child(child=CheckAutoscalingPolicy())\n\n\nclass CheckAutoscalingPolicy(runbook.Step):\n  \"\"\"Verify autoscaling policies.\"\"\"\n\n  template = 'logs_related::shuffle_service_kill_graceful_decommision_timeout'\n\n  def execute(self):\n    \"\"\"Checking autoscaling policies and graceful decommission timeouts.\"\"\"\n\n    project = crm.get_project(op.get(flags.PROJECT_ID))\n    cluster = dataproc.get_cluster(\n        cluster_name=op.get(flags.DATAPROC_CLUSTER_NAME),\n        region=op.get(flags.REGION),\n        project=op.get(flags.PROJECT_ID),\n    )\n\n    if cluster:\n      autoscaling_policy_id = cluster.autoscaling_policy_id\n      if autoscaling_policy_id:\n        policy = dataproc.get_auto_scaling_policy(\n            project.id,\n            op.get(flags.REGION),\n            cluster.autoscaling_policy_id,\n        )\n        if not policy.has_graceful_decommission_timeout:\n          op.add_failed(\n              project,\n              reason=op.prep_msg(op.FAILURE_REASON,\n                                 cluster_name=op.get(\n                                     flags.DATAPROC_CLUSTER_NAME)),\n              remediation=op.prep_msg(op.FAILURE_REMEDIATION),\n          )\n        else:\n          op.add_ok(\n              project,\n              reason=op.prep_msg(\n                  op.SUCCESS_REASON,\n                  cluster_name=op.get(flags.DATAPROC_CLUSTER_NAME),\n              ),\n          )\n\n\nclass CheckPreemptible(runbook.Step):\n  \"\"\"Verify preemptibility.\"\"\"\n\n  template = 'logs_related::shuffle_service_kill_preemptible_workers'\n\n  def execute(self):\n    \"\"\"Checking worker count.\"\"\"\n\n    project = crm.get_project(op.get(flags.PROJECT_ID))\n    cluster = dataproc.get_cluster(cluster_name=op.get(\n        flags.DATAPROC_CLUSTER_NAME),\n                                   region=op.get(flags.REGION),\n                                   project=op.get(flags.PROJECT_ID))\n\n    total_worker_count = (cluster.number_of_primary_workers +\n                          cluster.number_of_secondary_workers)\n    preemptible_worker_count = (cluster.number_of_primary_workers if\n                                cluster.is_preemptible_primary_workers else 0)\n    preemptible_worker_count += (cluster.number_of_secondary_workers\n                                 if cluster.is_preemptible_secondary_workers\n                                 else 0)\n\n    if preemptible_worker_count > 0:\n      if preemptible_worker_count / total_worker_count >= 0.5:\n        op.add_failed(\n            project,\n            reason=op.prep_msg(op.FAILURE_REASON,\n                               cluster_name=op.get(\n                                   flags.DATAPROC_CLUSTER_NAME)),\n            remediation=op.prep_msg(op.FAILURE_REMEDIATION),\n        )\n      else:\n        op.add_ok(\n            project,\n            reason=op.prep_msg(op.SUCCESS_REASON,\n                               cluster_name=op.get(\n                                   flags.DATAPROC_CLUSTER_NAME)),\n        )\n\n\nclass CheckGCPause(runbook.CompositeStep):\n  \"\"\"Verify if STW GC Pause has happened.\"\"\"\n\n  template = 'logs_related::gc_pause'\n\n  def execute(self):\n    \"\"\"Check if STW GC Pause has happened on the cluster.\"\"\"\n    check_gc_pause = dp_gs.CheckLogsExist()\n    check_gc_pause.template = 'logs_related::gc_pause'\n    check_gc_pause.log_message = dp_const.GC_PAUSE_LOG\n    self.add_child(child=check_gc_pause)\n\n\nclass CheckJobThrottling(runbook.CompositeStep):\n  \"\"\"Verify the presence of Job Throttling logs.\"\"\"\n\n  def execute(self):\n    \"\"\"Check for Job Throttling messages in the logs.\"\"\"\n\n    # Check \"Too many running jobs\"\n    too_many_jobs = dp_gs.CheckLogsExist()\n    too_many_jobs.template = 'logs_related::too_many_jobs'\n    too_many_jobs.log_message = dp_const.TOO_MANY_JOBS_LOG\n    self.add_child(child=too_many_jobs)\n\n    # Check \"Not enough free memory\"\n    not_enough_memory = dp_gs.CheckLogsExist()\n    not_enough_memory.template = 'logs_related::not_enough_memory'\n    not_enough_memory.log_message = dp_const.NOT_ENOUGH_MEMORY_LOG\n    self.add_child(child=not_enough_memory)\n\n    # Check \"High system memory usage\"\n    system_memory = dp_gs.CheckLogsExist()\n    system_memory.template = 'logs_related::system_memory'\n    system_memory.log_message = dp_const.SYSTEM_MEMORY_LOG\n    self.add_child(child=system_memory)\n\n    # Check \"Rate limit\"\n    rate_limit = dp_gs.CheckLogsExist()\n    rate_limit.template = 'logs_related::rate_limit'\n    rate_limit.log_message = dp_const.RATE_LIMIT_LOG\n    self.add_child(child=rate_limit)\n\n    # Check \"Master agent not initialized\"\n    not_initialized = dp_gs.CheckLogsExist()\n    # not_initialized.template = 'logs_related::not_initialized'\n    not_initialized.log_message = dp_const.NOT_INITIALIZED_LOG\n    self.add_child(child=not_initialized)\n\n    # Check \"Disk space too low on Master\"\n    not_enough_disk = dp_gs.CheckLogsExist()\n    not_enough_disk.template = 'logs_related::not_enough_disk'\n    not_enough_disk.log_message = dp_const.NOT_ENOUGH_DISK_LOG\n    self.add_child(child=not_enough_disk)\n\n\nclass CheckYarnRuntimeException(runbook.CompositeStep):\n  \"\"\"Verify presence of CheckYarnRuntimeException logs.\"\"\"\n\n  def execute(self):\n    \"\"\"Check for CheckYarnRuntimeException logs.\"\"\"\n    yarn_runtime = dp_gs.CheckLogsExist()\n    yarn_runtime.template = 'logs_related::yarn_runtime'\n    yarn_runtime.log_message = dp_const.YARN_RUNTIME_LOG\n    self.add_child(child=yarn_runtime)\n\n\n# Check if cx is using a non-default GCS connector:\nclass CheckGCSConnector(runbook.CompositeStep):\n  \"\"\"Check for non-default GCS connector and for errors in logs connected to Cloud Storage.\"\"\"\n\n  template = 'dataproc_attributes::gcs_connector'\n\n  def execute(self):\n    \"\"\"Check for non-default GCS connector.\"\"\"\n    cluster = dataproc.get_cluster(cluster_name=op.get(\n        flags.DATAPROC_CLUSTER_NAME),\n                                   region=op.get(flags.REGION),\n                                   project=op.get(flags.PROJECT_ID))\n\n    # Checks if a cx provided value for GCS connector exists\n    if cluster is not None:\n      if cluster.is_custom_gcs_connector:\n        op.add_uncertain(\n            cluster,\n            reason=op.prep_msg(op.UNCERTAIN_REASON),\n            remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION),\n        )\n\n      else:\n        op.add_ok(cluster, reason=op.prep_msg(op.SUCCESS_REASON))\n\n    # Check 403 error\n    check_gcs_forbidden = dp_gs.CheckLogsExist()\n    check_gcs_forbidden.template = 'logs_related::gcs_access_deny'\n    check_gcs_forbidden.log_message = dp_const.ERROR_403_LOG\n    self.add_child(child=check_gcs_forbidden)\n\n    # Check 429 error due to GCE\n    check_429_gce = dp_gs.CheckLogsExist()\n    check_429_gce.template = 'logs_related::gcs_429_gce'\n    check_429_gce.log_message = dp_const.ERROR_429_GCE_LOG\n    self.add_child(child=check_429_gce)\n\n    # Check 429 error connected to driver output\n    check_429_driveroutput = dp_gs.CheckLogsExist()\n    check_429_driveroutput.template = 'logs_related::gcs_429_driveroutput'\n    check_429_driveroutput.log_message = dp_const.ERROR_429_DRIVER_LOG\n    self.add_child(child=check_429_driveroutput)\n\n    # Check 412 error\n    check_412 = dp_gs.CheckLogsExist()\n    check_412.template = 'logs_related::gcs_412'\n    check_412.log_message = dp_const.ERROR_412_LOG\n    self.add_child(child=check_412)\n\n\nclass CheckBQConnector(runbook.CompositeStep):\n  \"\"\"Check for issues related to BigQuery connector such as version dependency conflicts.\"\"\"\n\n  template = 'dataproc_attributes::bq_connector'\n\n  def execute(self):\n    \"\"\"Check if non-default BigQuery connector version exists.\"\"\"\n    cluster = dataproc.get_cluster(cluster_name=op.get(\n        flags.DATAPROC_CLUSTER_NAME),\n                                   region=op.get(flags.REGION),\n                                   project=op.get(flags.PROJECT_ID))\n    job = dataproc.get_job_by_jobid(project_id=op.get(flags.PROJECT_ID),\n                                    region=op.get(flags.REGION),\n                                    job_id=op.get(flags.DATAPROC_JOB_ID))\n\n    if cluster is not None:\n      if version.parse(op.get(flags.IMAGE_VERSION)) > version.parse('2.0'):\n        # op.info('Cluster higher than 2.0')\n        # Extract BQ version from Dataproc Version page:\n        bq_version = dataproc.extract_dataproc_bigquery_version(\n            op.get(flags.IMAGE_VERSION))\n        if (not cluster.cluster_provided_bq_connector and\n            not job.job_provided_bq_connector):\n          op.add_ok(\n              cluster,\n              reason=op.prep_msg(op.SUCCESS_REASON,\n                                 image_version=op.get(flags.IMAGE_VERSION)),\n          )\n        elif ((cluster.cluster_provided_bq_connector or\n               job.job_provided_bq_connector) != bq_version) or (\n                   cluster.cluster_provided_bq_connector or\n                   job.job_provided_bq_connector == 'spark-bigquery-latest'):\n          op.add_uncertain(\n              cluster,\n              reason=op.prep_msg(op.FAILURE_REASON,\n                                 image_version=op.get(flags.IMAGE_VERSION)),\n              remediation=op.prep_msg(\n                  op.FAILURE_REMEDIATION,\n                  image_version=op.get(flags.IMAGE_VERSION),\n                  bq_version=bq_version,\n              ),\n          )\n      # If image version <= 2.0\n      else:\n        if (cluster.cluster_provided_bq_connector or\n            job.job_provided_bq_connector):\n          op.add_ok(\n              cluster,\n              reason=op.prep_msg(op.SUCCESS_REASON,\n                                 image_version=op.get(flags.IMAGE_VERSION)),\n          )\n        elif not (cluster.cluster_provided_bq_connector or\n                  job.job_provided_bq_connector):\n          op.add_skipped(cluster, reason='The BigQuery connector is not used.')\n\n    else:\n      op.add_skipped(cluster,\n                     reason='Cluster does not exist, skipping this step.')\n\n    check_bq_resource = dp_gs.CheckLogsExist()\n    check_bq_resource.template = 'logs_related::bq_resource'\n    check_bq_resource.log_message = dp_const.BQ_RESOURCE_LOG\n    self.add_child(child=check_bq_resource)\n\n\nclass SparkJobEnd(runbook.EndStep):\n  \"\"\"The end step of the runbook.\n\n  Points out all the failed steps to the user.\n  \"\"\"\n\n  def execute(self):\n    \"\"\"This is the end step of the runbook.\"\"\"\n    op.info(\n        \"\"\"Please visit all the FAIL steps and address the suggested remediations.\n        If the REMEDIATION suggestions were not able to solve your issue please open a Support case\n        with failed job details:\n          1. Driver output\n          2. YARN application logs\n          3. (optional) Event logs, if you are facing a performance issue\n          4. (optional) If there was a successful run in the past,\n          provide job id and logs of that run\"\"\")\n\n\ndef check_datetime_gap(date1, date2, gap_in_days):\n  \"\"\"Checks if two datetime objects are within a certain gap in days.\"\"\"\n\n  return (date2 - date1).days > gap_in_days\n"
  },
  {
    "path": "gcpdiag/runbook/dataproc/spark_job_failures_test.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test class for dataproc/SparkJob.\"\"\"\n\nimport datetime\nimport unittest\nfrom unittest import mock\n\nfrom gcpdiag import config, utils\nfrom gcpdiag.queries import apis_stub, crm, dataproc\nfrom gcpdiag.runbook import dataproc as dataproc_rb\nfrom gcpdiag.runbook import op, snapshot_test_base\nfrom gcpdiag.runbook.dataproc import flags\nfrom gcpdiag.runbook.dataproc import generalized_steps as dp_gs\nfrom gcpdiag.runbook.dataproc import spark_job_failures\nfrom gcpdiag.runbook.iam import generalized_steps as iam_gs\n\nDUMMY_PROJECT_ID = 'gcpdiag-dataproc1-aaaa'\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = dataproc_rb\n  runbook_name = 'dataproc/spark-job-failures'\n  project_id = 'gcpdiag-dataproc1-aaaa'\n  success_job_id = '1234567890'\n  failed_job_id = '1234567891'\n  config.init({'auto': True, 'interface': 'cli'}, project_id)\n\n  rule_parameters = [\n      {\n          'project_id': DUMMY_PROJECT_ID,\n          'dataproc_cluster_name': 'job_failed',\n          'region': 'us-central1',\n          'job_id': failed_job_id,\n      },\n      {\n          'project_id': DUMMY_PROJECT_ID,\n          'dataproc_cluster_name': 'job-not-failed',\n          'region': 'us-central1',\n          'job_id': success_job_id,\n      },\n  ]\n\n\nclass MockMessage:\n  \"\"\"Mock messages for testing.\"\"\"\n\n  def get_msg(self, key, **kwargs):\n    return f'{key}: {kwargs}'\n\n\nclass SparkJobFailuresTest(unittest.TestCase):\n\n  def test_legacy_parameter_handler(self):\n    runbook = spark_job_failures.SparkJobFailures()\n    parameters = {'job_id': 'test-job', 'project_id': 'test-project'}\n    runbook.legacy_parameter_handler(parameters)\n    self.assertNotIn('job_id', parameters)\n    self.assertIn('dataproc_job_id', parameters)\n    self.assertEqual(parameters['dataproc_job_id'], 'test-job')\n\n\nclass SparkJobFailuresBuildTreeTest(unittest.TestCase):\n\n  @mock.patch(\n      'gcpdiag.runbook.dataproc.spark_job_failures.SparkJobFailures.add_step')\n  @mock.patch(\n      'gcpdiag.runbook.dataproc.spark_job_failures.SparkJobFailures.add_start')\n  @mock.patch(\n      'gcpdiag.runbook.dataproc.spark_job_failures.SparkJobFailures.add_end')\n  @mock.patch('gcpdiag.runbook.op.get')\n  def test_build_tree(self, mock_op_get, mock_add_end, mock_add_start,\n                      mock_add_step):\n    mock_op_get.return_value = 'test_value'\n    runbook = spark_job_failures.SparkJobFailures()\n    runbook.build_tree()\n    mock_add_start.assert_called_once()\n    self.assertIsInstance(mock_add_start.call_args[0][0],\n                          spark_job_failures.JobStart)\n    mock_add_step.assert_called_once()\n    self.assertIsInstance(\n        mock_add_step.call_args[1]['child'],\n        spark_job_failures.JobDetailsDependencyGateway,\n    )\n    mock_add_end.assert_called_once()\n    self.assertIsInstance(mock_add_end.call_args[0][0],\n                          spark_job_failures.SparkJobEnd)\n\n\nclass SparkJobFailuresStepTestBase(unittest.TestCase):\n  \"\"\"Base class for Spark Job Failures step tests.\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    # 1. Patch get_api with the stub.\n    self.enterContext(\n        mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub))\n    # 2. Create a mock interface to capture outputs\n    self.mock_interface = mock.create_autospec(op.InteractionInterface,\n                                               instance=True)\n    self.mock_interface.rm = mock.Mock()\n    # 3. Instantiate a real Operator\n    self.operator = op.Operator(self.mock_interface)\n    self.operator.run_id = 'test-run'\n    self.operator.messages = MockMessage()\n    # 4. Define standard parameters.\n    self.params = {\n        flags.PROJECT_ID:\n            DUMMY_PROJECT_ID,\n        flags.REGION:\n            'us-central1',\n        flags.DATAPROC_JOB_ID:\n            '1234567891',\n        'cluster_exists':\n            False,\n        flags.JOB_OLDER_THAN_30_DAYS:\n            False,\n        flags.SERVICE_ACCOUNT:\n            None,\n        flags.CROSS_PROJECT_ID:\n            None,\n        flags.STACKDRIVER:\n            False,\n        'start_time':\n            datetime.datetime(2025, 1, 1, tzinfo=datetime.timezone.utc),\n        'end_time':\n            datetime.datetime(2025, 1, 2, tzinfo=datetime.timezone.utc),\n    }\n    self.operator.parameters = self.params\n    self.mock_op_put = self.enterContext(mock.patch('gcpdiag.runbook.op.put'))\n    self.mock_op_put.side_effect = self.params.__setitem__\n\n    self.mock_crm_get_project = self.enterContext(\n        mock.patch('gcpdiag.queries.crm.get_project'))\n    self.mock_dataproc_get_job_by_jobid = self.enterContext(\n        mock.patch('gcpdiag.queries.dataproc.get_job_by_jobid'))\n    self.mock_dataproc_get_cluster = self.enterContext(\n        mock.patch('gcpdiag.queries.dataproc.get_cluster'))\n    self.mock_iam_is_service_account_existing = self.enterContext(\n        mock.patch('gcpdiag.queries.iam.is_service_account_existing'))\n    self.mock_logs_realtime_query = self.enterContext(\n        mock.patch('gcpdiag.queries.logs.realtime_query'))\n    self.mock_dp_extract_supported_version = self.enterContext(\n        mock.patch(\n            'gcpdiag.queries.dataproc.extract_dataproc_supported_version'))\n    self.mock_dp_get_autoscaling_policy = self.enterContext(\n        mock.patch('gcpdiag.queries.dataproc.get_auto_scaling_policy'))\n    self.mock_dp_extract_bq_version = self.enterContext(\n        mock.patch(\n            'gcpdiag.queries.dataproc.extract_dataproc_bigquery_version'))\n\n    self.mock_project = mock.Mock(spec=crm.Project)\n    self.mock_project.id = 'test-project'\n    self.mock_crm_get_project.return_value = self.mock_project\n\n    self.mock_job = mock.Mock(spec=dataproc.Job)\n    self.mock_job.state = 'ERROR'\n    self.mock_job.status_history = {'RUNNING': '2025-01-01T10:00:00.000Z'}\n    self.mock_job.cluster_uuid = 'test-uuid'\n    self.mock_job.cluster_name = 'test-cluster'\n    self.mock_job.details = ''\n    self.mock_job.job_provided_bq_connector = None\n    self.mock_dataproc_get_job_by_jobid.return_value = self.mock_job\n\n    self.mock_cluster = mock.Mock(spec=dataproc.Cluster)\n    self.mock_cluster.vm_service_account_email = 'test-sa@example.com'\n    self.mock_cluster.is_stackdriver_logging_enabled = True\n    self.mock_cluster.image_version = '2.0.0-debian10'\n    self.mock_cluster.autoscaling_policy_id = None\n    self.mock_cluster.number_of_primary_workers = 2\n    self.mock_cluster.number_of_secondary_workers = 0\n    self.mock_cluster.is_preemptible_primary_workers = False\n    self.mock_cluster.is_preemptible_secondary_workers = False\n    self.mock_cluster.is_custom_gcs_connector = False\n    self.mock_cluster.cluster_provided_bq_connector = None\n    self.mock_cluster.config = mock.Mock()\n    self.mock_cluster.config.software_config.properties = {}\n    self.mock_cluster.config.worker_config.disk_config.boot_disk_size_gb = 500\n    self.mock_cluster.config.software_config.image_version = '2.0.0-debian10'\n\n    self.mock_dataproc_get_cluster.return_value = self.mock_cluster\n\n\nclass JobStartTest(SparkJobFailuresStepTestBase):\n\n  def test_job_start_ok(self):\n    step = spark_job_failures.JobStart()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_dataproc_get_job_by_jobid.assert_called_once()\n    self.mock_dataproc_get_cluster.assert_called_once()\n    self.assertTrue(self.params['cluster_exists'])\n    self.assertEqual(self.params[flags.SERVICE_ACCOUNT], 'test-sa@example.com')\n    self.mock_interface.add_ok.assert_called_once()\n\n  def test_job_start_done(self):\n    self.mock_job.state = 'DONE'\n    step = spark_job_failures.JobStart()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_job_start_api_error(self):\n    self.mock_dataproc_get_job_by_jobid.side_effect = utils.GcpApiError(\n        'api error')\n    step = spark_job_failures.JobStart()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_job_older_than_30_days(self):\n    self.mock_job.status_history = {'RUNNING': '2024-01-01T10:00:00.000Z'}\n    with mock.patch(\n        'gcpdiag.runbook.dataproc.spark_job_failures.check_datetime_gap',\n        return_value=True,\n    ):\n      step = spark_job_failures.JobStart()\n      with op.operator_context(self.operator):\n        self.operator.set_step(step)\n        step.execute()\n      self.assertTrue(self.params[flags.JOB_OLDER_THAN_30_DAYS])\n\n\nclass JobDetailsDependencyGatewayTest(SparkJobFailuresStepTestBase):\n\n  def setUp(self):\n    super().setUp()\n    self.add_child_patch = self.enterContext(\n        mock.patch(\n            'gcpdiag.runbook.dataproc.spark_job_failures.JobDetailsDependencyGateway.add_child'\n        ))\n\n  def test_cluster_exists(self):\n    self.params['cluster_exists'] = True\n    step = spark_job_failures.JobDetailsDependencyGateway()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.assertEqual(self.add_child_patch.call_count, 19)\n\n  def test_cluster_does_not_exist(self):\n    self.params['cluster_exists'] = False\n    step = spark_job_failures.JobDetailsDependencyGateway()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.assertEqual(self.add_child_patch.call_count, 14)\n\n\nclass CheckStackdriverSettingTest(SparkJobFailuresStepTestBase):\n\n  def test_stackdriver_enabled(self):\n    self.mock_cluster.is_stackdriver_logging_enabled = True\n    step = spark_job_failures.CheckStackdriverSetting()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.assertTrue(self.params[flags.STACKDRIVER])\n    self.mock_interface.add_ok.assert_called_once()\n\n  def test_stackdriver_disabled(self):\n    self.mock_cluster.is_stackdriver_logging_enabled = False\n    step = spark_job_failures.CheckStackdriverSetting()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.assertFalse(self.params[flags.STACKDRIVER])\n    self.mock_interface.add_uncertain.assert_called_once()\n\n  def test_cluster_none(self):\n    self.mock_dataproc_get_cluster.return_value = None\n    step = spark_job_failures.CheckStackdriverSetting()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_uncertain.assert_called_once()\n\n\nclass CheckClusterVersionTest(SparkJobFailuresStepTestBase):\n\n  def test_version_supported(self):\n    self.mock_dp_extract_supported_version.return_value = ['2.0']\n    self.mock_cluster.image_version = '2.0.1-debian10'\n    step = spark_job_failures.CheckClusterVersion()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n\n  def test_version_not_supported(self):\n    self.mock_dp_extract_supported_version.return_value = ['1.5']\n    self.mock_cluster.image_version = '2.0.1-debian10'\n    step = spark_job_failures.CheckClusterVersion()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n\nclass CheckTaskNotFoundTest(SparkJobFailuresStepTestBase):\n\n  def test_job_older_than_30_days(self):\n    self.params[flags.JOB_OLDER_THAN_30_DAYS] = True\n    step = spark_job_failures.CheckTaskNotFound()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_job_not_task_not_found(self):\n    self.mock_job.details = 'some other error'\n    self.mock_logs_realtime_query.return_value = []\n    step = spark_job_failures.CheckTaskNotFound()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n\n  def test_job_task_not_found_logs_found(self):\n    self.mock_job.details = 'Task not found'\n    self.mock_logs_realtime_query.return_value = [{\n        'protoPayload': {\n            'authenticationInfo': {\n                'principalEmail': 'user@example.com'\n            }\n        }\n    }]\n    step = spark_job_failures.CheckTaskNotFound()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n    self.assertIn(\n        'User user@example.com deleted the cluster',\n        self.mock_interface.add_failed.call_args[1]['reason'],\n    )\n\n  def test_job_task_not_found_logs_not_found(self):\n    self.mock_job.details = 'Task not found'\n    self.mock_logs_realtime_query.return_value = []\n    step = spark_job_failures.CheckTaskNotFound()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n    self.assertIn(\n        'Unable to find the cluster deletion log',\n        self.mock_interface.add_failed.call_args[1]['reason'],\n    )\n\n\nclass CheckPermissionsTest(SparkJobFailuresStepTestBase):\n\n  def setUp(self):\n    super().setUp()\n    self.add_child_patch = self.enterContext(\n        mock.patch(\n            'gcpdiag.runbook.dataproc.spark_job_failures.CheckPermissions.add_child'\n        ))\n\n  def test_no_sa(self):\n    self.params[flags.SERVICE_ACCOUNT] = None\n    step = spark_job_failures.CheckPermissions()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_uncertain.assert_called_once()\n\n  def test_sa_exists_same_project(self):\n    self.params[flags.PROJECT_ID] = 'gcpdiag-iam1-aaaa'\n    self.params[flags.SERVICE_ACCOUNT] = (\n        'service-account-1@gcpdiag-iam1-aaaa.iam.gserviceaccount.com')\n    self.mock_iam_is_service_account_existing.side_effect = [True]\n    step = spark_job_failures.CheckPermissions()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.add_child_patch.assert_called_once()\n    self.assertIsInstance(self.add_child_patch.call_args[1]['child'],\n                          iam_gs.IamPolicyCheck)\n\n  def test_sa_exists_cross_project(self):\n    self.params[flags.PROJECT_ID] = 'gcpdiag-dataproc1-aaaa'\n    self.params[flags.CROSS_PROJECT_ID] = 'gcpdiag-iam1-aaaa'\n    self.params[flags.SERVICE_ACCOUNT] = (\n        'service-account-1@gcpdiag-iam1-aaaa.iam.gserviceaccount.com')\n    self.mock_iam_is_service_account_existing.side_effect = [False, True]\n    step = spark_job_failures.CheckPermissions()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.assertEqual(self.add_child_patch.call_count, 4)\n\n\nclass CheckMasterOOMTest(SparkJobFailuresStepTestBase):\n\n  def test_no_task_not_acquired(self):\n    self.mock_logs_realtime_query.return_value = []\n    step = spark_job_failures.CheckMasterOOM()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n\n  def test_task_not_acquired_sigterm(self):\n    self.mock_logs_realtime_query.side_effect = [\n        [{\n            'log': 'task not acquired'\n        }],\n        [{\n            'log': 'sigterm'\n        }],\n    ]\n    step = spark_job_failures.CheckMasterOOM()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n  def test_task_not_acquired_yarn_metrics(self):\n    self.mock_logs_realtime_query.side_effect = [\n        [{\n            'log': 'task not acquired'\n        }],\n        [],\n        [{\n            'log': 'yarn metrics'\n        }],\n    ]\n    step = spark_job_failures.CheckMasterOOM()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n\nclass CheckCompositeStepTest(SparkJobFailuresStepTestBase):\n\n  def test_check_worker_oom(self):\n    with mock.patch(\n        'gcpdiag.runbook.dataproc.spark_job_failures.CheckWorkerOOM.add_child'\n    ) as mock_add_child:\n      step = spark_job_failures.CheckWorkerOOM()\n      with op.operator_context(self.operator):\n        self.operator.set_step(step)\n        step.execute()\n      mock_add_child.assert_called_once()\n      self.assertIsInstance(mock_add_child.call_args[1]['child'],\n                            dp_gs.CheckLogsExist)\n\n  def test_check_sw_preemption(self):\n    with mock.patch(\n        'gcpdiag.runbook.dataproc.spark_job_failures.CheckSWPreemption.add_child'\n    ) as mock_add_child:\n      step = spark_job_failures.CheckSWPreemption()\n      with op.operator_context(self.operator):\n        self.operator.set_step(step)\n        step.execute()\n      mock_add_child.assert_called_once()\n      self.assertIsInstance(mock_add_child.call_args[1]['child'],\n                            dp_gs.CheckLogsExist)\n\n  def test_check_worker_disk_usage_issue(self):\n    with mock.patch(\n        'gcpdiag.runbook.dataproc.spark_job_failures.CheckWorkerDiskUsageIssue.add_child'\n    ) as mock_add_child:\n      step = spark_job_failures.CheckWorkerDiskUsageIssue()\n      with op.operator_context(self.operator):\n        self.operator.set_step(step)\n        step.execute()\n      mock_add_child.assert_called_once()\n      self.assertIsInstance(mock_add_child.call_args[1]['child'],\n                            dp_gs.CheckLogsExist)\n\n  def test_check_port_exhaustion(self):\n    with mock.patch(\n        'gcpdiag.runbook.dataproc.spark_job_failures.CheckPortExhaustion.add_child'\n    ) as mock_add_child:\n      step = spark_job_failures.CheckPortExhaustion()\n      with op.operator_context(self.operator):\n        self.operator.set_step(step)\n        step.execute()\n      mock_add_child.assert_called_once()\n      self.assertIsInstance(mock_add_child.call_args[1]['child'],\n                            dp_gs.CheckLogsExist)\n\n  def test_check_killing_orphaned_application(self):\n    with mock.patch(\n        'gcpdiag.runbook.dataproc.spark_job_failures.CheckKillingOrphanedApplication.add_child'\n    ) as mock_add_child:\n      step = spark_job_failures.CheckKillingOrphanedApplication()\n      with op.operator_context(self.operator):\n        self.operator.set_step(step)\n        step.execute()\n      mock_add_child.assert_called_once()\n      self.assertIsInstance(mock_add_child.call_args[1]['child'],\n                            dp_gs.CheckLogsExist)\n\n  def test_check_python_import_failure(self):\n    with mock.patch(\n        'gcpdiag.runbook.dataproc.spark_job_failures.CheckPythonImportFailure.add_child'\n    ) as mock_add_child:\n      self.mock_cluster.initialization_actions = True\n      step = spark_job_failures.CheckPythonImportFailure()\n      with op.operator_context(self.operator):\n        self.operator.set_step(step)\n        step.execute()\n      mock_add_child.assert_called_once()\n      self.assertIsInstance(mock_add_child.call_args[1]['child'],\n                            dp_gs.CheckLogsExist)\n      self.mock_interface.info.assert_called_once()\n\n  def test_check_gc_pause(self):\n    with mock.patch(\n        'gcpdiag.runbook.dataproc.spark_job_failures.CheckGCPause.add_child'\n    ) as mock_add_child:\n      step = spark_job_failures.CheckGCPause()\n      with op.operator_context(self.operator):\n        self.operator.set_step(step)\n        step.execute()\n      mock_add_child.assert_called_once()\n      self.assertIsInstance(mock_add_child.call_args[1]['child'],\n                            dp_gs.CheckLogsExist)\n\n  def test_check_job_throttling(self):\n    with mock.patch(\n        'gcpdiag.runbook.dataproc.spark_job_failures.CheckJobThrottling.add_child'\n    ) as mock_add_child:\n      step = spark_job_failures.CheckJobThrottling()\n      with op.operator_context(self.operator):\n        self.operator.set_step(step)\n        step.execute()\n      self.assertEqual(mock_add_child.call_count, 6)\n\n  def test_check_yarn_runtime_exception(self):\n    with mock.patch(\n        'gcpdiag.runbook.dataproc.spark_job_failures.CheckYarnRuntimeException.add_child'\n    ) as mock_add_child:\n      step = spark_job_failures.CheckYarnRuntimeException()\n      with op.operator_context(self.operator):\n        self.operator.set_step(step)\n        step.execute()\n      mock_add_child.assert_called_once()\n      self.assertIsInstance(mock_add_child.call_args[1]['child'],\n                            dp_gs.CheckLogsExist)\n\n\nclass CheckShuffleFailuresTest(SparkJobFailuresStepTestBase):\n\n  def test_job_older_than_30_days(self):\n    self.params[flags.JOB_OLDER_THAN_30_DAYS] = True\n    step = spark_job_failures.CheckShuffleFailures()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_no_logs(self):\n    self.mock_logs_realtime_query.return_value = []\n    step = spark_job_failures.CheckShuffleFailures()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n\n  def test_logs_found_efm_workers(self):\n    self.mock_logs_realtime_query.return_value = [{'log': 'shuffle fail'}]\n    self.mock_cluster.config.software_config.properties = {\n        'dataproc:dataproc.enable.enhanced.flexibility.mode': 'true'\n    }\n    self.mock_cluster.number_of_primary_workers = 1\n    self.mock_cluster.number_of_secondary_workers = 2\n    step = spark_job_failures.CheckShuffleFailures()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n    self.assertIn(\n        'Insufficient primary workers',\n        self.mock_interface.add_failed.call_args[1]['reason'],\n    )\n\n  def test_logs_found_old_image(self):\n    self.mock_logs_realtime_query.return_value = [{'log': 'shuffle fail'}]\n    self.mock_cluster.config.software_config.image_version = '1.5.0'\n    step = spark_job_failures.CheckShuffleFailures()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n    self.assertIn(\n        'Consider using EFM HCFS mode',\n        self.mock_interface.add_failed.call_args[1]['remediation'],\n    )\n\n  def test_logs_found_small_disk(self):\n    self.mock_logs_realtime_query.return_value = [{'log': 'shuffle fail'}]\n    self.mock_cluster.config.worker_config.disk_config.boot_disk_size_gb = 100\n    step = spark_job_failures.CheckShuffleFailures()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n    self.assertIn('Small disk size',\n                  self.mock_interface.add_failed.call_args[1]['reason'])\n\n  def test_logs_found_low_timeout(self):\n    self.mock_logs_realtime_query.return_value = [{'log': 'shuffle fail'}]\n    self.mock_cluster.config.software_config.properties = {\n        'spark:spark.shuffle.io.connectionTimeout': 50\n    }\n    step = spark_job_failures.CheckShuffleFailures()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n    self.assertIn(\n        'Low IO connection timeout',\n        self.mock_interface.add_failed.call_args[1]['reason'],\n    )\n\n  def test_logs_found_pvm(self):\n    self.mock_logs_realtime_query.return_value = [{'log': 'shuffle fail'}]\n    self.mock_cluster.is_preemptible_secondary_workers = True\n    step = spark_job_failures.CheckShuffleFailures()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n    self.assertIn(\n        'Data skew and large partitions',\n        self.mock_interface.add_failed.call_args[1]['reason'],\n    )\n\n\nclass CheckShuffleServiceKillTest(SparkJobFailuresStepTestBase):\n\n  def setUp(self):\n    super().setUp()\n    self.add_child_patch = self.enterContext(\n        mock.patch(\n            'gcpdiag.runbook.dataproc.spark_job_failures.CheckShuffleServiceKill.add_child'\n        ))\n\n  def test_add_child_called(self):\n    step = spark_job_failures.CheckShuffleServiceKill()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.assertEqual(self.add_child_patch.call_count, 2)\n    self.assertIsInstance(self.add_child_patch.call_args_list[0][1]['child'],\n                          dp_gs.CheckLogsExist)\n    self.assertIsInstance(\n        self.add_child_patch.call_args_list[1][1]['child'],\n        spark_job_failures.CheckAutoscalingPolicy,\n    )\n\n\nclass CheckAutoscalingPolicyTest(SparkJobFailuresStepTestBase):\n\n  def test_no_policy(self):\n    self.mock_cluster.autoscaling_policy_id = None\n    step = spark_job_failures.CheckAutoscalingPolicy()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_dp_get_autoscaling_policy.assert_not_called()\n\n  def test_policy_no_graceful_timeout(self):\n    self.mock_cluster.autoscaling_policy_id = 'test-policy'\n    mock_policy = mock.Mock()\n    mock_policy.has_graceful_decommission_timeout = False\n    self.mock_dp_get_autoscaling_policy.return_value = mock_policy\n    step = spark_job_failures.CheckAutoscalingPolicy()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n  def test_policy_with_graceful_timeout(self):\n    self.mock_cluster.autoscaling_policy_id = 'test-policy'\n    mock_policy = mock.Mock()\n    mock_policy.has_graceful_decommission_timeout = True\n    self.mock_dp_get_autoscaling_policy.return_value = mock_policy\n    step = spark_job_failures.CheckAutoscalingPolicy()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n\n\nclass CheckPreemptibleTest(SparkJobFailuresStepTestBase):\n\n  def test_preemptible_workers_high_ratio(self):\n    self.mock_cluster.is_preemptible_secondary_workers = True\n    self.mock_cluster.number_of_secondary_workers = 5\n    self.mock_cluster.number_of_primary_workers = 5\n    step = spark_job_failures.CheckPreemptible()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n  def test_preemptible_workers_low_ratio(self):\n    self.mock_cluster.is_preemptible_secondary_workers = True\n    self.mock_cluster.number_of_secondary_workers = 1\n    self.mock_cluster.number_of_primary_workers = 5\n    step = spark_job_failures.CheckPreemptible()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n\n  def test_no_preemptible_workers(self):\n    step = spark_job_failures.CheckPreemptible()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_not_called()\n    self.mock_interface.add_failed.assert_not_called()\n\n\nclass CheckGCSConnectorTest(SparkJobFailuresStepTestBase):\n\n  def setUp(self):\n    super().setUp()\n    self.add_child_patch = self.enterContext(\n        mock.patch(\n            'gcpdiag.runbook.dataproc.spark_job_failures.CheckGCSConnector.add_child'\n        ))\n\n  def test_custom_connector(self):\n    self.mock_cluster.is_custom_gcs_connector = True\n    step = spark_job_failures.CheckGCSConnector()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_uncertain.assert_called_once()\n    self.assertEqual(self.add_child_patch.call_count, 4)\n\n  def test_default_connector(self):\n    self.mock_cluster.is_custom_gcs_connector = False\n    step = spark_job_failures.CheckGCSConnector()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n    self.assertEqual(self.add_child_patch.call_count, 4)\n\n\nclass CheckBQConnectorTest(SparkJobFailuresStepTestBase):\n\n  def setUp(self):\n    super().setUp()\n    self.add_child_patch = self.enterContext(\n        mock.patch(\n            'gcpdiag.runbook.dataproc.spark_job_failures.CheckBQConnector.add_child'\n        ))\n    self.params['image_version'] = '2.1.0'\n    self.mock_dp_extract_bq_version.return_value = '0.28.0'\n\n  def test_cluster_none(self):\n    self.mock_dataproc_get_cluster.return_value = None\n    step = spark_job_failures.CheckBQConnector()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n    self.add_child_patch.assert_called_once()\n\n  def test_version_ok_no_connector(self):\n    self.params['image_version'] = '2.1.0'\n    self.mock_cluster.cluster_provided_bq_connector = None\n    self.mock_job.job_provided_bq_connector = None\n    step = spark_job_failures.CheckBQConnector()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n\n  def test_version_uncertain_job_connector_mismatch(self):\n    self.params['image_version'] = '2.1.0'\n    self.mock_cluster.cluster_provided_bq_connector = None\n    self.mock_job.job_provided_bq_connector = '0.27.0'\n    step = spark_job_failures.CheckBQConnector()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_uncertain.assert_called_once()\n\n  def test_version_uncertain_cluster_connector_mismatch(self):\n    self.params['image_version'] = '2.1.0'\n    self.mock_cluster.cluster_provided_bq_connector = '0.27.0'\n    self.mock_job.job_provided_bq_connector = None\n    step = spark_job_failures.CheckBQConnector()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_uncertain.assert_called_once()\n\n  def test_version_ok_old_image_with_connector(self):\n    self.params['image_version'] = '1.5.0'\n    self.mock_cluster.image_version = '1.5.0'\n    type(self.mock_cluster).cluster_provided_bq_connector = mock.PropertyMock(\n        return_value='some-connector')\n    step = spark_job_failures.CheckBQConnector()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n\n  def test_version_skipped_old_image_no_connector(self):\n    self.params['image_version'] = '1.5.0'\n    self.mock_cluster.image_version = '1.5.0'\n    self.mock_cluster.cluster_provided_bq_connector = None\n    self.mock_job.job_provided_bq_connector = None\n    step = spark_job_failures.CheckBQConnector()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n\nclass SparkJobEndTest(SparkJobFailuresStepTestBase):\n\n  def test_end_step(self):\n    step = spark_job_failures.SparkJobEnd()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.info.assert_called_once()\n\n\nif __name__ == '__main__':\n  unittest.main()\n"
  },
  {
    "path": "gcpdiag/runbook/dataproc/templates/dataproc_attributes.jinja",
    "content": "{% block stackdriver_success_reason %}\nStackdriver: Enabled\n{% endblock stackdriver_success_reason %}\n\n{% block stackdriver_uncertain_reason %}\nCould not determine if the `dataproc:dataproc.logging.stackdriver.enable` property is enabled for cluster, possibly because the cluster was deleted. Subsequent checks requiring Cloud logging might be affected.\n{% endblock stackdriver_uncertain_reason %}\n\n{% block stackdriver_uncertain_remediation %}\nEnable Cloud logging by creating a cluster with property dataproc:dataproc.logging.stackdriver.enable = true.\nRefer to the guide for more details:\n<https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/cluster-properties>\n{% endblock stackdriver_uncertain_remediation %}\n\n{% block unspported_image_version_success_reason %}\nThe cluster {cluster_name} is using a supported Dataproc image version.\n{% endblock unspported_image_version_success_reason %}\n\n{% block unspported_image_version_failure_reason %}\nThe cluster {cluster_name} is using an unsupported Dataproc image version. Run the job on a supported image version.\n{% endblock unspported_image_version_failure_reason %}\n\n{% block unspported_image_version_failure_remediation %}\nFind supported Dataproc image versions in this document[1].\n[1] <https://cloud.google.com/dataproc/docs/concepts/versioning/dataproc-version-clusters>\n{% endblock unspported_image_version_failure_remediation %}\n\n{% block gcs_connector_success_reason %}\nNo user-specified Cloud Storage connector version was identified. The cluster is using the default version.\n{% endblock gcs_connector_success_reason %}\n\n{% block gcs_connector_uncertain_reason %}\nA user-specified Cloud Storage connector version was identified for cluster. Using a non-default connector version can lead to issues if not required by the application, as Dataproc clusters include a default pre-installed GCS connector.\n<https://cloud.google.com/dataproc/docs/concepts/versioning/dataproc-version-clusters#supported-dataproc-image-versions>\n{% endblock gcs_connector_uncertain_reason %}\n\n{% block gcs_connector_uncertain_remediation %}\nVerify the setup is correct if using a non-default Cloud Storage connector by following:\n<https://cloud.google.com/dataproc/docs/concepts/connectors/cloud-storage#non-default_connector_versions>\n<https://cloud.google.com/dataproc/docs/concepts/connectors/cloud-storage#service_account_permissions>\n{% endblock gcs_connector_uncertain_remediation %}\n\n{% block bq_connector_success_reason %}\nThe cluster uses image version {image_version} which preinstalls the BigQuery connector, and no conflicting BigQuery JARs were provided. Dependency version conflicts on the BigQuery side are not expected.\n\nRefer to the Dataproc Version page to find out each component version preinstalled on your cluster:\n<https://cloud.google.com/dataproc/docs/concepts/versioning/dataproc-version-clusters>\n{% endblock bq_connector_success_reason %}\n\n{% block bq_connector_uncertain_reason %}\nThe cluster uses image version {image_version} which preinstalls the BigQuery connector, and a different version of the BigQuery connector is being installed at the cluster or job level. This might cause dependency version conflicts and lead to job failures.\n{% endblock bq_connector_uncertain_reason %}\n\n{% block bq_connector_uncertain_remediation %}\nResolve potential BigQuery connector version conflicts using one of the following approaches:\n\n- If providing the BigQuery JAR at the cluster level: Create the Dataproc cluster without specifying any BigQuery JAR.\n- If providing the BigQuery JAR at the job level: Run the job without specifying any BigQuery JAR.\n- If installing a BigQuery JAR is necessary: Match the version of the BigQuery JAR to the version preinstalled on the cluster (version {bq_version} for image {image_version}).\n\nRefer to the Dataproc Version page to find out each component version preinstalled on your cluster:\n<https://cloud.google.com/dataproc/docs/concepts/versioning/dataproc-version-clusters>\n{% endblock bq_connector_uncertain_remediation %}\n"
  },
  {
    "path": "gcpdiag/runbook/dataproc/templates/job.jinja",
    "content": "{% block job_id_exists_success_reason %}\nThe job `{job_id}` exists in project `{project_id}`.\n{% endblock job_id_exists_success_reason %}\n\n{% block job_id_exists_skipped_reason %}\nThe job `{job_id}` not found in project `{project_id}`.\n{% endblock job_id_exists_skipped_reason %}\n\n{% block task_not_found_success_reason %}\nJob `{job_id}` did not fail due to a 'task not found' error. {additional_message}\n{% endblock task_not_found_success_reason %}\n\n{% block task_not_found_failure_reason %}\nJob `{job_id}` failed due to a 'task not found' error. {additional_message}\n{% endblock task_not_found_failure_reason %}\n\n{% block task_not_found_failure_remediation %}\nThis error typically indicates the associated cluster was terminated before job completion.\nReview automation workflows to ensure clusters remain active until all jobs are finalized.\n{% endblock task_not_found_failure_remediation %}\n"
  },
  {
    "path": "gcpdiag/runbook/dataproc/templates/logs_related.jinja",
    "content": "{% block cluster_init_success_reason %}\nThe initialization actions for cluster {cluster_name} in project {project_id} completed successfully without errors.\n{% endblock cluster_init_success_reason %}\n\n{% block cluster_init_failure_reason %}\nThe cluster {cluster_name} creation failed because the initialization script encountered an error.\n{% endblock cluster_init_failure_reason %}\n\n{% block cluster_init_failure_remediation %}\nA Dataproc cluster initialization script failure means that a script intended to run during the cluster's setup did not complete successfully.\nTo resolve this issue:\n\n- Review initialization actions considerations and guidelines [1].\n- Examine the output logs. The error message should provide a link to the logs in Cloud Storage.\n[1]<https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/init-actions#important_considerations_and_guidelines>\n{% endblock cluster_init_failure_remediation %}\n\n{% block port_exhaustion_success_reason %}\nNo log messages related to \"{log}\" were found on the cluster: {cluster_name}.\n{% endblock port_exhaustion_success_reason %}\n\n{% block port_exhaustion_failure_reason %}\nLog messages related to \"{log}\" were found on the cluster: {cluster_name}.\n{% endblock port_exhaustion_failure_reason %}\n\n{% block port_exhaustion_failure_remediation %}\nThis issue occurs when Spark jobs cannot find an available port after 1000 retries.\nCLOSE_WAIT connections are a possible cause.\nTo identify CLOSE_WAIT connections, analyze the netstat output:\n\n1. Run `netstat -plant >> open_connections.txt`.\n2. Run `cat open_connections.txt | grep \"CLOSE_WAIT\"`.\n\nIf blocked connections are due to a specific application, restart that application.\nAlternatively, restart the master node to release the affected connections.\n{% endblock port_exhaustion_failure_remediation %}\n\n{% block kill_orphaned_application_success_reason %}\nNo log messages related to \"{log}\" were found on the cluster: {cluster_name}.\n{% endblock kill_orphaned_application_success_reason %}\n\n{% block kill_orphaned_application_failure_reason %}\nLog messages related to \"{log}\" were found on the cluster: {cluster_name}.\n{% endblock kill_orphaned_application_failure_reason %}\n\n{% block kill_orphaned_application_failure_remediation %}\nTo prevent orphaned YARN applications from being killed, set the cluster property `dataproc:dataproc.yarn.orphaned-app-termination.enable` to `false`.\nMore details are available in the documentation [1].\n[1] <https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/cluster-properties>\n{% endblock kill_orphaned_application_failure_remediation %}\n\n{% block gcs_access_deny_success_reason %}\nNo log messages related to \"{log}\" were found on the cluster: {cluster_name}.\n{% endblock gcs_access_deny_success_reason %}\n\n{% block gcs_access_deny_failure_reason %}\nLog messages related to \"{log}\" were found on the cluster: {cluster_name}.\n{% endblock gcs_access_deny_failure_reason %}\n\n{% block gcs_access_deny_failure_remediation %}\nGCS access denied errors were found in Cloud Logging.\nVerify that the service account has the necessary permissions to get objects from the GCS bucket.\nSearch Cloud Logging for \"com.google.cloud.hadoop.repackaged.gcs.com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden\" for more details.\n{% endblock gcs_access_deny_failure_remediation %}\n\n{% block master_oom_success_reason %}\nDidn't find logs messages related to Master OOM on the cluster: {cluster_name}.\n{% endblock master_oom_success_reason %}\n\n{% block master_oom_failure_reason %}\nFound logs messages related to Master OOM on the cluster: {cluster_name}.\n{% endblock master_oom_failure_reason %}\n\n{% block master_oom_failure_remediation %}\nFollow the troubleshooting guide [1] to adjust the driver memory used for the job.\n\n[1] <https://cloud.google.com/dataproc/docs/support/troubleshoot-oom-errors#oom_solutions>\n{% endblock master_oom_failure_remediation %}\n\n{% block worker_oom_success_reason %}\nDidn't find logs messages related to Worker OOM on the cluster: {cluster_name}.\n{% endblock worker_oom_success_reason %}\n\n{% block worker_oom_failure_reason %}\nFound logs messages related to Worker OOM on the cluster: {cluster_name}.\n{% endblock worker_oom_failure_reason %}\n\n{% block worker_oom_failure_remediation %}\nThe logs indicate that worker OOM (out-of-memory) errors may have occurred on the cluster.\nTo resolve this issue:\n\n- Use a high-memory machine type for the worker nodes.\n- Repartition the data to avoid data skew.\n\nRefer to the troubleshooting guide [1] for more details.\nIf the issue persists, contact Google Cloud Support.\n[1] <https://cloud.google.com/dataproc/docs/support/troubleshoot-oom-errors#oom_solutions>\n{% endblock worker_oom_failure_remediation %}\n\n{% block sw_preemption_success_reason %}\nDidn't find logs messages related to secondary worker preemption on the cluster: {cluster_name}.\n{% endblock sw_preemption_success_reason %}\n\n{% block sw_preemption_failure_reason %}\nFound logs messages related to secondary worker preemption on the cluster: {cluster_name}.\n{% endblock sw_preemption_failure_reason %}\n\n{% block sw_preemption_failure_remediation %}\nThis error occurs when secondary worker nodes are preempted. By default, Dataproc secondary workers are preemptible VMs.\nTo resolve this issue:\n\n- Verify if the cluster uses secondary workers with preemptible instances.\n- Recreate the cluster configured with non-preemptible secondary workers to ensure secondary workers are not preempted [1].\n[1] <https://cloud.google.com/dataproc/docs/concepts/compute/secondary-vms#non-preemptible_workers>\n{% endblock sw_preemption_failure_remediation %}\n\n{% block worker_disk_usage_success_reason %}\nNo log messages related to \"{log}\" were found on the cluster: {cluster_name}.\n{% endblock worker_disk_usage_success_reason %}\n\n{% block worker_disk_usage_failure_reason %}\nLog messages related to \"{log}\" were found on the cluster: {cluster_name}.\n{% endblock worker_disk_usage_failure_reason %}\n\n{% block worker_disk_usage_failure_remediation %}\nTo recover the existing node manager:\n\n- Free up related local disk space in the node to reduce disk utilization below 90%. Find the relevant folder name by querying Cloud Logging for \"{log}\".\n\nFor a long-term fix:\n\n- Recreate the cluster using a larger worker disk size.\n{% endblock worker_disk_usage_failure_remediation %}\n\n{% block gc_pause_success_reason %}\nNo log messages related to \"{log}\" were found on the cluster: {cluster_name}.\n{% endblock gc_pause_success_reason %}\n\n{% block gc_pause_failure_reason %}\nLog messages related to \"{log}\" were found on the cluster: {cluster_name}.\n{% endblock gc_pause_failure_reason %}\n\n{% block gc_pause_failure_remediation %}\nTo address potential GC pause issues:\n\n- Increase the `spark.executor.memory` configuration to allocate additional memory if allocated memory appears insufficient [1].\n- If memory allocation seems adequate, investigate potential garbage collection optimization. Refer to the Apache Spark documentation for a comprehensive guide on Garbage Collection Tuning [2].\n- Additionally, tuning the `spark.memory.fraction` property can be effective, particularly for workloads that rely heavily on RDD caching. Refer to the Memory Management Overview [3] for a detailed discussion of this configuration property.\n\n[1] <https://spark.apache.org/docs/latest/configuration.html>\n[2] <https://spark.apache.org/docs/latest/tuning.html#garbage-collection-tuning>\n[3] <https://spark.apache.org/docs/latest/tuning.html#memory-management-overview>\n{% endblock gc_pause_failure_remediation %}\n\n{% block default_success_reason %}\nNo log messages related to \"{log}\" were found on the cluster: {cluster_name}.\n{% endblock default_success_reason %}\n\n{% block default_failure_reason %}\nLog messages related to \"{log}\" were found on the cluster: {cluster_name}.\n{% endblock default_failure_reason %}\n\n{% block default_failure_remediation %}\nInvestigate the job logs further, focusing on eliminating the observed message.\n{% endblock default_failure_remediation %}\n\n{% block too_many_jobs_success_reason %}\nNo log messages related to \"{log}\" were found on the cluster: {cluster_name}.\n{% endblock too_many_jobs_success_reason %}\n\n{% block too_many_jobs_failure_reason %}\nLog messages related to \"{log}\" were found on the cluster: {cluster_name}.\nIf the Dataproc agent is already running more jobs than allowed, it will reject the new job.\n{% endblock too_many_jobs_failure_reason %}\n\n{% block too_many_jobs_failure_remediation %}\nThe maximum number of concurrent jobs can be set at cluster creation time using the property `dataproc:dataproc.scheduler.max-concurrent-jobs`.\nAlternatively, set the property `dataproc:dataproc.scheduler.driver-size-mb`.\n\nIf neither property is set manually, Dataproc calculates `max-concurrent-jobs` as:\n`(Physical memory of master (in MB) - 3584) / dataproc:dataproc.scheduler.driver-size-mb`.\n\nThe Dataproc cluster size might be too small to run the desired number of concurrent jobs.\n\nNote: The job has a default retry mechanism (4 times) and might succeed on a subsequent attempt.\n{% endblock too_many_jobs_failure_remediation %}\n\n{% block not_enough_memory_success_reason %}\nNo log messages related to \"{log}\" were found on the cluster: {cluster_name}.\n{% endblock not_enough_memory_success_reason %}\n\n{% block not_enough_memory_failure_reason %}\nThe cluster \"{cluster_name}\" reported log messages concerning \"{log}\". These messages indicate the job was rejected because the master VM did not have enough available memory.\n{% endblock not_enough_memory_failure_reason %}\n\n{% block not_enough_memory_failure_remediation %}\nInvestigate memory usage on the master and worker nodes:\n\n- Access the Dataproc UI Monitoring view and examine the \"YARN Memory\" and \"YARN Pending Memory\" charts.\n- Access the master VM through the GCE UI and navigate to \"Observability\" for detailed monitoring of that specific VM.\n\nAs a mitigation step, increase the machine type.\n{% endblock not_enough_memory_failure_remediation %}\n\n{% block system_memory_success_reason %}\nNo log messages related to \"{log}\" were found on the cluster: {cluster_name}.\n{% endblock system_memory_success_reason %}\n\n{% block system_memory_failure_reason %}\nLog messages related to \"{log}\" were found on the cluster: {cluster_name}.\nThe Dataproc agent checked if the master's memory usage is above a certain threshold (default value is 0.9), if it is it will reject the job, as the master is overloaded.\n{% endblock system_memory_failure_reason %}\n\n{% block system_memory_failure_remediation %}\nInvestigate memory usage on the master and worker nodes:\n\n- Access the Dataproc UI Monitoring view and examine the \"YARN Memory\" and \"YARN Pending Memory\" charts.\n- Access the master VM through the GCE UI and navigate to \"Observability\" for detailed monitoring of that specific VM.\n\nAs a mitigation step, increase the machine type.\n{% endblock system_memory_failure_remediation %}\n\n{% block rate_limit_success_reason %}\nNo log messages related to \"{log}\" were found on the cluster: {cluster_name}.\n{% endblock rate_limit_success_reason %}\n\n{% block rate_limit_failure_reason %}\nLog messages related to \"{log}\" were found on the cluster: {cluster_name}.\nJob submission rate has been reached with QPS as the unit (default is 1.0). Job has been rejected by the Dataproc agent.\n{% endblock rate_limit_failure_reason %}\n\n{% block rate_limit_failure_remediation %}\nSubmit jobs at longer intervals.\n\nNote: The job has a default retry mechanism (4 times) and might succeed on a subsequent attempt.\n{% endblock rate_limit_failure_remediation %}\n\n{% block not_enough_disk_success_reason %}\nNo log messages related to \"{log}\" were found on the cluster: {cluster_name}.\n{% endblock not_enough_disk_success_reason %}\n\n{% block not_enough_disk_failure_reason %}\nLog messages related to \"{log}\" were found on the cluster: {cluster_name}.\nJob has been rejected due to low disk capacity.\n{% endblock not_enough_disk_failure_reason %}\n\n{% block not_enough_disk_failure_remediation %}\nIncrease the disk size for the master and worker nodes. A minimum disk size of 250GB is recommended for low workloads, and 1TB for high workloads.\n\nNote: The job has a default retry mechanism (4 times) and might succeed on a subsequent attempt.\n{% endblock not_enough_disk_failure_remediation %}\n\n{% block yarn_runtime_success_reason %}\nNo log messages related to \"{log}\" were found on the cluster: {cluster_name}.\n{% endblock yarn_runtime_success_reason %}\n\n{% block yarn_runtime_failure_reason %}\nLog messages related to \"{log}\" were found on the cluster: {cluster_name}.\n{% endblock yarn_runtime_failure_reason %}\n\n{% block yarn_runtime_failure_remediation %}\nThis issue might occur if multiple Dataproc clusters use the same `mapreduce.jobhistory.intermediate-done-dir` value.\nThis configuration is not recommended, as each Job History Server scans the intermediate-done-dir periodically.\nIf multiple clusters use the same directory, each Job History Server will attempt to move files from the same intermediate-done-dir to the done-dir.\n\nTo resolve this:\n\n- Configure separate `mapreduce.jobhistory.intermediate-done-dir` locations for each running cluster.\n{% endblock yarn_runtime_failure_remediation %}\n\n{% block check_python_import_failure_success_reason %}\nNo log messages related to \"{log}\" were found on the cluster: {cluster_name}.\n{% endblock check_python_import_failure_success_reason %}\n\n{% block check_python_import_failure_failure_reason %}\nLog messages related to \"{log}\" were found on the cluster: {cluster_name}.\n{% endblock check_python_import_failure_failure_reason %}\n\n{% block check_python_import_failure_failure_remediation %}\nThe job failed due to a Python import failure. {additional_message}\nEnsure the necessary Python packages are installed on the cluster nodes or included in the job dependencies.\n{% endblock check_python_import_failure_failure_remediation %}\n\n{% block shuffle_service_kill_preemptible_workers_failure_reason %}\nCluster {cluster.name} uses preemptible workers and their count exceeds 50% of the total worker count leading to shuffle fetch failures.\n{% endblock shuffle_service_kill_preemptible_workers_failure_reason %}\n\n{% block shuffle_service_kill_preemptible_workers_failure_remediation %}\nTo improve stability:\n\n- Reduce the number of preemptible workers.\n- Use non-preemptible workers.\n- Explore Enhanced Flexibility Mode (EFM) for better control over preemptible instances.\n{% endblock shuffle_service_kill_preemptible_workers_failure_remediation %}\n\n{% block shuffle_service_kill_preemptible_workers_success_reason %}\nCluster {cluster.name} uses preemptible workers. While within the recommended limit, preemptions might still lead to FetchFailedExceptions.\n{% endblock shuffle_service_kill_preemptible_workers_success_reason %}\n\n{% block shuffle_service_kill_preemptible_workers_success_reason_a1 %}\nCluster {cluster.name} does not use preemptible workers.\n{% endblock shuffle_service_kill_preemptible_workers_success_reason_a1 %}\n\n{% block shuffle_service_kill_graceful_decommision_timeout_failure_reason %}\nAutoscaling is enabled without graceful decommission timeout on cluster {cluster_name}\n{% endblock shuffle_service_kill_graceful_decommision_timeout_failure_reason %}\n\n{% block shuffle_service_kill_graceful_decommision_timeout_failure_remediation %}\nEnable graceful decommission timeout in the autoscaling policy to allow executors to fetch shuffle data before nodes are removed.\n{% endblock shuffle_service_kill_graceful_decommision_timeout_failure_remediation %}\n\n{% block shuffle_service_kill_success_reason %}\nNo shuffle service failure detected in cluster {cluster_name}\n{% endblock shuffle_service_kill_success_reason %}\n\n{% block shuffle_failures_success_reason %}\nNo shuffle failure logs found for cluster {cluster_name}\n{% endblock shuffle_failures_success_reason %}\n\n{% block shuffle_failures_failure_reason %}\nCluster {cluster_name} experienced shuffle failures. Potential root causes: {root_causes}\n{% endblock shuffle_failures_failure_reason %}\n\n{% block shuffle_failures_remediation %}\nRefer to the Dataproc documentation for troubleshooting shuffle failures. Potential remediations include: {remediation}\n{% endblock shuffle_failures_remediation %}\n\n{% block gcs_429_gce_success_reason %}\nNo log messages related to \"{log}\" were found on the cluster: {cluster_name}.\n{% endblock gcs_429_gce_success_reason %}\n\n{% block gcs_429_gce_failure_reason %}\nFound logs messages related to \"{log}\" on cluster {cluster_name}.\nThis indicates that the limit for requests per second from Compute Engine to the metadata server (10 requests/s) was exceeded. This limit applies across projects.\n{% endblock gcs_429_gce_failure_reason %}\n\n{% block gcs_429_gce_failure_remediation %}\nRecommended actions to address the issue:\n\n1. If this is a Spark job with a high number of shuffle partitions, adjust the offset value in the offset file and restart the application.\n2. Run applications in Spark cluster mode to avoid stressing the driver node.\n3. If possible, modify the workload to reduce frequent authentication requests. If modification is not feasible, move to a file-based authentication mechanism [1].\n\n[1] <https://github.com/GoogleCloudDataproc/hadoop-connectors/blob/master/gcs/CONFIGURATION.md#authentication>\n{% endblock gcs_429_gce_failure_remediation %}\n\n{% block gcs_429_driveroutput_success_reason %}\nNo log messages related to \"{log}\" were found on the cluster: {cluster_name}.\n{% endblock gcs_429_driveroutput_success_reason %}\n\n{% block gcs_429_driveroutput_failure_reason %}\nFound logs messages related to \"{log}\" on cluster {cluster_name}.\nThis indicates that the limit for requests from Dataproc to write to the driveroutput file in Cloud Storage was exceeded.\nToo many writes to the driver output file occurred, preventing logs from being written and causing the job to fail.\n{% endblock gcs_429_driveroutput_failure_reason %}\n\n{% block gcs_429_driveroutput_failure_remediation %}\nUse the `core:fs.gs.outputstream.sync.min.interval` property to control the sync time (in minutes) [1][2].\n\n[1] <https://github.com/GoogleCloudDataproc/hadoop-connectors/blob/master/gcs/CONFIGURATION.md>\n[2] <https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/cluster-properties#file-prefixed_properties_table>\n{% endblock gcs_429_driveroutput_failure_remediation %}\n\n{% block gcs_412_success_reason %}\nNo log messages related to \"{log}\" were found on the cluster: {cluster_name}.\n{% endblock gcs_412_success_reason %}\n\n{% block gcs_412_failure_reason %}\nFound logs messages related to \"{log}\" on cluster {cluster_name}.\nThis error occurs when multiple applications/jobs attempt to write to the same output directory simultaneously.\nThe GCS Hadoop File Committer does not support concurrent writes to a GCS bucket.\n{% endblock gcs_412_failure_reason %}\n\n{% block gcs_412_failure_remediation %}\nUse the DataprocFileOutputCommitter, which allows concurrent writes from Spark jobs [1].\n\n[1] <https://cloud.google.com/dataproc/docs/guides/dataproc-fileoutput-committer>\n{% endblock gcs_412_failure_remediation %}\n\n{% block bq_resource_success_reason %}\nNo log messages related to \"{log}\" were found on the cluster: {cluster_name}.\n{% endblock bq_resource_success_reason %}\n\n{% block bq_resource_failure_reason %}\nFound logs messages related to \"{log}\" on cluster {cluster_name}.\n\nA RESOURCE_EXHAUSTED error occurred while streaming writes to BigQuery, indicating a quota was hit.\nPotential error types include:\n\n- Concurrent stream usage exceeded\n- Exceeds 'AppendRows throughput' quota\n- CreateWriteStream requests quota\n\nThis can happen due to the implementation of the direct write mode in the connector, which leverages the BigQuery Storage Write API.\n{% endblock bq_resource_failure_reason %}\n\n{% block bq_resource_failure_remediation %}\nConsider the following options:\n\n- Permanent solution: Use the INDIRECT write method, which does not leverage the BigQuery Storage Write API and avoids quota issues [1].\n- For \"CreateWriteStream\" errors: Enable the `writeAtLeastOnce` property [2]. Note: This introduces at-least-once behavior, meaning records might be duplicated.\n- Contact Google Cloud Support to request a quota increase for the project. Provide the BigQuery connector jar version and the driver output of the failed job.\n\n[1] <https://github.com/GoogleCloudDataproc/spark-bigquery-connector#indirect-write>\n[2] <https://github.com/GoogleCloudDataproc/spark-bigquery-connector#properties>\n{% endblock bq_resource_failure_remediation %}\n"
  },
  {
    "path": "gcpdiag/runbook/dataproc/templates/network.jinja",
    "content": "{% block cluster_network_success_reason %}\nThe network communication among nodes in cluster {cluster_name} is working.\n{% endblock cluster_network_success_reason %}\n\n{% block cluster_network_failure_reason %}\nThe network communication among nodes in cluster {cluster_name} is blocked.\n{% endblock cluster_network_failure_reason %}\n\n{% block cluster_network_failure_remediation %}\nCreate a firewall rule that meets Dataproc connectivity requirements[1] and apply it to the cluster's VPC network.\nReview the documentation[2] for more details.\nReferences:\n[1] <https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/network#dataproc_connectivity_requirements>\n[2] <https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/network>\n{% endblock cluster_network_failure_remediation %}\n\n{% block cluster_network_uncertain_reason %}\nThe cluster has not been found, it may have been deleted. Skipping the connectivity test.\n{% endblock cluster_network_uncertain_reason %}\n\n{% block cluster_network_uncertain_remediation %}\nVerify that Dataproc connectivity requirements[1] are satisfied.\nReferences:\n[1] <https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/network#dataproc_connectivity_requirements>\n{% endblock cluster_network_uncertain_remediation %}\n\n{% block private_google_access_success_reason %}\nGoogle Private Access in subnet: {subnetwork_uri} is enabled.\n{% endblock private_google_access_success_reason %}\n\n{% block private_google_access_failure_reason %}\nGoogle Private Access in subnet: {subnetwork_uri} is disabled.\n{% endblock private_google_access_failure_reason %}\n\n{% block private_google_access_failure_remediation %}\nDataproc clusters isolated from the public internet require Private Google Access enabled on their subnetwork ({subnetwork_uri}) to allow cluster nodes to access Google APIs and services (e.g., Cloud Storage) using internal IPs [cluster VMs are not assigned public IP addresses](1).\nEnable Private Google Access for the subnetwork[2].\nReferences:\n[1] <https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/network#create-a-dataproc-cluster-with-internal-IP-addresses-only>\n[2] <https://cloud.google.com/vpc/docs/configure-private-google-access>\n{% endblock private_google_access_failure_remediation %}\n"
  },
  {
    "path": "gcpdiag/runbook/dataproc/templates/permissions.jinja",
    "content": "{% block projectcheck_failure_reason %}\nService Account {service_account} associated with Dataproc cluster was not found in project {project_id} or cross project {cross_project_id}.\n{% endblock projectcheck_failure_reason %}\n\n{% block projectcheck_failure_remediation %}\nProvide the project where the service account resides using the `cross_project` parameter.\n{% endblock projectcheck_failure_remediation %}\n\n{% block projectcheck_uncertain_reason %}\nService Account {service_account} associated with Dataproc cluster was not found in project {project_id}. It is possible that the service account is in a different project.\n{% endblock projectcheck_uncertain_reason %}\n\n{% block projectcheck_uncertain_remediation %}\nProvide the project where the service account resides using the `cross_project` parameter.\n{% endblock projectcheck_uncertain_remediation %}\n\n{% block permission_check_uncertain_reason %}\nService Account {service_account} associated with Dataproc cluster was not found in project {project_id} or cross project (if specified).\n{% endblock permission_check_uncertain_reason %}\n\n{% block permission_check_uncertain_remediation %}\nProvide the project where the service account resides using the `cross_project` parameter.\n{% endblock permission_check_uncertain_remediation %}\n"
  },
  {
    "path": "gcpdiag/runbook/exceptions.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Custom exception classes for handling specific errors in the diagnostic process.\"\"\"\n\n\nclass InvalidDiagnosticTree(Exception):\n  \"\"\"Exception raised for invalid diagnostic tree definition\"\"\"\n\n  def __init__(self, message: str):\n    super().__init__(message)\n\n\nclass InvalidStepOperation(Exception):\n  \"\"\"Exception raised for invalid operations on a diagnostic step.\"\"\"\n\n  def __init__(self, message: str):\n    super().__init__(message)\n\n\nclass DiagnosticTreeNotFound(Exception):\n  \"\"\"Exception raised when a diagnostic tree cannot be found.\"\"\"\n\n\nclass DiagnosticTreeConstructionError(Exception):\n  \"\"\"Exception raised for errors during the construction of a diagnostic tree.\"\"\"\n\n  def __init__(self, message: str):\n    super().__init__(message)\n\n\nclass MissingParameterError(ValueError):\n  \"\"\"Raised when a required runbook parameter is missing.\"\"\"\n\n  def __init__(self,\n               message: str,\n               missing_parameters_list: list[str] | None = None):\n    super().__init__(message)\n    self.missing_parameters_list = (missing_parameters_list if\n                                    missing_parameters_list is not None else [])\n\n\nclass InvalidParameterError(ValueError):\n  \"\"\"Raised when a runbook parameter is provided but has an invalid value.\"\"\"\n\n\nclass FailedStepError(Exception):\n  \"\"\"Exception raised for a failed step.\"\"\"\n  pass\n"
  },
  {
    "path": "gcpdiag/runbook/flags.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Common flags applicable to any runbook\"\"\"\n\n# Runbook command specific flags\nINTERACTIVE_MODE = 'auto'\nSTART_TIME = 'start_time'\nEND_TIME = 'end_time'\nTIMEZONE = 'timezone'\n"
  },
  {
    "path": "gcpdiag/runbook/gce/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/runbook/gce/constants.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Constants applicable relevant to only gce implementation\"\"\"\nimport ipaddress\n\n# pylint: disable=unused-wildcard-import, wildcard-import\nfrom gcpdiag.runbook.gcp.constants import *\nfrom gcpdiag.runbook.iam.constants import *\n\n# Os login Permissions\nOSLOGIN_ROLE = 'roles/compute.osLogin'\nOSLOGIN_ADMIN_ROLE = 'roles/compute.osAdminLogin'\n# Users from a different organization than the VM they're connecting to\nOSLOGIN_EXTERNAL_USER_ROLE = 'roles/compute.osLoginExternalUser'\nOS_LOGIN_ROLES = [\n    OSLOGIN_ROLE, OSLOGIN_ADMIN_ROLE, 'roles/iam.serviceAccountUser',\n    OSLOGIN_EXTERNAL_USER_ROLE\n]\nENABLE_OSLOGIN = 'enable-oslogin'\nENABLE_OSLOGIN_2FA = 'enable-oslogin-2fa'\n# INSTANCE ADMIN\nINSTANCE_ADMIN_ROLE = 'roles/compute.instanceAdmin.v1'\n\n# Networking\nIAP_FW_VIP = ipaddress.ip_network('35.235.240.0/20')\nUNSPECIFIED_ADDRESS = ipaddress.ip_network('0.0.0.0/0')\nDEFAULT_SSHD_PORT = 22\nNEXT_HOP = 'default-internet-gateway'\n\n# Guest OS logs\nKERNEL_PANIC_LOGS = [\n    'Security Violation',\n    # GRUB not being able to find image.\n    'Failed to load image',\n    # OS emergency mode (emergency.target in systemd).\n    'You are now being dropped into an emergency shell',\n    r'You are in (rescue|emergency) mode',\n    r'Started \\x1b?\\[?.*Emergency Shell',\n    r'Reached target \\x1b?\\[?.*Emergency Mode',\n    # GRUB emergency shell.\n    'Minimal BASH-like line editing is supported',\n    # Grub/EFI corruption check\n    r'grub2 error: symbol \\'grub_calloc\\' not found',\n    r'error: symbol \\'grub_verify_string\\' not found',\n    # Typical Kernel logs\n    'Kernel panic',\n    'Give root password for maintenance',\n    r'\\(or press Control-D to continue\\):',\n    'Boot failed: not a bootable disk',\n    'Dependency failed for /'\n]\n\nSERIAL_LOG_START_POINT = [\n    r'Command line: BOOT_IMAGE=\\([^()]+\\)/boot/vmlinuz-\\S+',\n    r'Command line: BOOT_IMAGE=/boot/vmlinuz-\\S+',  # SUSE\n]\n\nFS_CORRUPTION_MSG = [\n    'Corruption of in-memory data detected. Shutting down filesystem',\n    'Corruption of in-memory data detected', 'warning: mounting fs with errors',\n    'Failed to mount /',\n    r'A stop job is running for Security \\.\\.\\..* Service ',\n    'I/O Error Detected. Shutting down filesystem', 'metadata I/O error in'\n]\n\nOOM_PATTERNS = [\n    r'Out of memory: Kill(ed)? process',\n    r'Kill(ed)? process',\n    'Memory cgroup out of memory',\n    'invoked oom-killer',\n]\n\nNETWORK_ERRORS = [\n    'dial tcp 169.254.169.254:80: connect: network is unreachable',\n    'dial tcp 169.254.169.254:80: i/o timeout',\n    'dial tcp metadata.goog:80: connect: network is unreachable',\n    'dial tcp metadata.google.internal:80: connect: network is unreachable'\n]\n\nTIME_SYNC_ERROR = [\n    # NTP related error message:\n    'time may be out of sync',\n    'System clock is unsynchronized',\n    'Time drift detected',\n    'no servers can be used, system clock unsynchronized',\n    'time reset',  # sudden jump in time\n    # Chrony-Related error message:\n    'System clock unsynchronized',\n    'Time offset too large',\n    r'Can\\'t synchronise: no selectable sources',\n    # General Errors:\n    'Clock skew detected',  # make, ssh\n    'Clock skew too great',  # Kerberos\n    'Could not receive latest log timestamp from server',  # PostgreSQL replication\n]\n\n# Typical logs of a fully booted windows VM\nGOOD_WINDOWS_BOOT_LOGS_READY = [\n    'BdsDxe: starting',\n    'UEFI: Attempting to start image',\n    'Description: Windows Boot Manager',\n    'GCEGuestAgent: GCE Agent Started',\n    'OSConfigAgent Info: OSConfig Agent',\n    'GCEMetadataScripts: Starting startup scripts',\n]\n\nDISK_EXHAUSTION_ERRORS = [\n    'No space left on device',\n    'No usable temporary directory found',\n    r'A stop job is running for Security \\.\\.\\..* Service ',\n    # windows\n    'disk is at or near capacity'\n]\n\nSLOW_DISK_READS = [\n    # Linux slow read:\n    r'\\d+:\\d+:\\d+:\\d+: timing out command, waited \\d+s',\n    r'end_request: I/O error, dev [a-z0-9-]+, sector \\d+',\n    r'Buffer I/O error on device [a-z0-9-]+, logical block \\d+',\n    r'blocked for more than \\d+ seconds',\n    # Linux SCSI commands abort/reset (when operation to PD times out)\n    r'\\d+:\\d+:\\d+:\\d+:\\s+\\[([a-z0-9-]+)\\]\\s+(abort|device reset)$',\n    r'\\d+:\\d+:\\d+:\\d+:\\s+(device reset)$',\n    # Linux Local SSD physical failure on console:\n    r'kernel: blk_update_request: I/O error, dev [a-z0-9-]+, sector \\d+',\n    # Windows\n    r'The IO operation at logical block address 0x[0-9a-fA-F.]+ for Disk \\d+ '\n]\n\nGOOD_SSHD_PATTERNS = [\n    'Started OpenBSD Secure Shell server', 'Started OpenSSH server daemon',\n    'Started OpenSSH Daemon',\n    'Started ssh.service - OpenBSD Secure Shell server'\n]\n\nBAD_SSHD_PATTERNS = [\n    'Failed to start OpenBSD Secure Shell server',\n    'Failed to start OpenSSH server', 'Failed to start OpenSSH Daemon'\n]\n\n# SSHD Guard blocking logs\nSSHGUARD_PATTERNS = [r'sshguard\\[\\d+\\]: Blocking (\\d+\\.\\d+\\.\\d+\\.\\d+)']\n\nGCE_CLUSTER_MANAGER_EMAIL = 'cloud-cluster-manager@prod.google.com'\n\nGUEST_AGENT_STATUS_MSG = [\n    'Started Google Compute Engine Guest Agent',\n    r'google_guest_agent\\[\\d+\\]: GCE Agent Started'\n]\n\nGUEST_AGENT_FAILED_MSG = [\n    'Failed to start Google Compute Engine Guest Agent',\n    r'google_guest_agent\\[(\\d+)\\]: CRITICAL (.*\\.go):(\\d+) error registering service'\n]\n\nSSHD_AUTH_FAILURE = [\n    'Authentication refused: bad ownership or modes for directory',\n    r'Error updating SSH keys for (\\w+): mkdir (.*): no such file or directory'\n]\n\n# Cloud init checks\nCLOUD_INIT_POSITIVE_PATTERN = [r'ci-info: [|].*[|]\\sTrue\\s[|]']\nCLOUD_INIT_NEGATIVE_PATTERN = [r'ci-info: [|].*[|]\\sFalse\\s[|]']\nCLOUD_INIT_STARTUP_PATTERN = [\n    r\"cloud-init\\[(\\d+)\\]: Cloud-init v\\. (.*?) running '(.*)'\"\n]\n\n# OS Config\nENABLE_OSCONFIG = 'enable-osconfig'\n\n# GCE Operation types\nIG_INSTANCE_REPAIR_METHOD = 'compute.instances.repair.recreateInstance'\nINSTANCE_PREMPTION_METHOD = 'compute.instances.preempted'\nHOST_ERROR_METHOD = 'compute.instances.hostError'\nSTOP_METHOD = 'compute.instances.stop'\nTERMINATE_ON_HOST_MAINTENANCE_METHOD = 'compute.instances.terminateOnHostMaintenance'\nGUEST_TERMINATE_METHOD = 'compute.instances.guestTerminate'\n\nGCE_ACTIVITY_LOG_FILTER = ('logName:\"cloudaudit.googleapis.com%2Factivity\" '\n                           'protoPayload.serviceName:\"compute.googleapis.com\"')\n\n# MIG\nAUTOSCALING_MODE_ON = 'ON'\nAUTOSCALING_MODE_OFF = 'OFF'\nMIG_LIMIT_EXCEEDED_LOGS = [\"Exceeded limit 'MAX_INSTANCES_IN_INSTANCE_GROUP'\"]\nMIG_NOT_FOUND_LOGS = ['instanceGroupManagers.*was not found']\nMIG_IN_USE_LOGS = ['is already being used by']\nMIG_MANAGER_RESOURCE_TYPE_FILTER = 'resource.type=\"gce_instance_group_manager\"'\nMIG_RESOURCE_TYPE_FILTER = 'resource.type=\"gce_instance_group_manager\"'\n\n# OS Checks\nRHEL_PATTERN = 'rhel'\nROCKY_PATTERN = 'rocky'\nSLES_PATTERN = 'sles'\nWINDOWS_FEATURE = 'WINDOWS'\nBYOS_PATTERN = 'byos'\nPROP_BOOT_DISK_LICENSES = 'boot_disk_licenses'\nPROP_GUEST_OS_FEATURES = 'guest_os_features'\nPROP_NETWORK_INTERFACE_COUNT = 'network_interface_count'\nPROP_IS_PREEMPTIBLE_VM = 'is_preemptible_vm'\nPROP_CREATED_BY_MIG = 'created_by_mig'\n\n# Reservation errors\nRESERVATION_RESIZE_COUNT_TOO_LOW = [\n    'The resize instance count cannot be lower than the in use count for a specific reservation.'\n]\nRESERVATION_POLICY_IN_USE = [\n    r'The resource_policy resource \\'projects/.+/regions/.+/resourcePolicies/.+\\' '\n    r'is already being used by \\'projects/.+/zones/.+/reservations/.+\\'.'\n]\nRESERVATION_MACHINE_TYPE_DISALLOWED = [\n    r'The machine type .+ provided in instance properties is disallowed for '\n    'reservations with ANY reservation affinity'\n]\nRESERVATION_SHARED_NO_ORG = [\n    'Cannot create Shared Reservations in a project that does not belong to an organization.'\n]\nRESERVATION_INVALID_DISK_SIZE = [\n    r'Disk .+ provided in the instance template has invalid size: 0 GB.'\n]\nRESERVATION_OUTSIDE_ZONE_REGION = [\n    'Reservation cannot be created outside the zone/region of source resource.'\n]\nRESERVATION_INVALID_SOURCE_RESOURCE = [\n    'Source resource reference provided invalid.'\n]\nRESERVATION_ALREADY_EXISTS = [\n    r'The resource \\'projects/.+/zones/.+/.+/.+\\' already exists'\n]\nRESERVATION_NOT_FOUND = ['notFound', 'does not exist in zone']\nRESERVATION_CANNOT_OVERRIDE_PROPERTIES = [\n    'Reservation cannot override properties populated by source resource.'\n]\nRESERVATION_CROSS_PROJECT_REFERENCE_NOT_ALLOWED = [\n    'Cross project referencing is not allowed for this resource.'\n]\nRESERVATION_SHARED_LIMIT_EXCEEDED = [\n    'Cannot support more than 100 shared reservations of the same shape under an organization.'\n]\nRESERVATION_INVALID_SPECIFIC_RESERVATION_COUNT = [\n    'Invalid value for field \\'resource.specificReservation.count\\''\n]\nRESERVATION_SHARED_OWNER_PROJECTS_CONSTRAINT = [\n    'Constraint constraints/compute.sharedReservationsOwnerProjects violated for '\n    'project'\n]\nRESERVATION_PROJECT_NOT_FOUND_OR_ORG = [\n    r'Project .+ doesn\\'t exist or doesn\\'t belong to the same organization of '\n    'the current project.'\n]\n\n# Reservation filters\nRESERVATION_CREATE_SUCCESS_FILTER = (\n    'protoPayload.methodName=\\'compute.reservations.create\\' AND '\n    'protoPayload.status.code=200')\nRESERVATION_UPDATE_SUCCESS_FILTER = (\n    'protoPayload.methodName=\\'compute.reservations.update\\' AND '\n    'protoPayload.status.code=200')\n"
  },
  {
    "path": "gcpdiag/runbook/gce/disk_performance_benchmark/a-family.json",
    "content": "{\n  \"A2 Standard VMs\": {\n    \"pd-balanced\": [\n      {\n        \"Machine type\": \"a2-highgpu-1g\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 15000,\n        \"Maximum write throughput (MiBps)\": 800,\n        \"Maximum read throughput (MiBps)\": 800\n      },\n      {\n        \"Machine type\": \"a2-highgpu-2g\",\n        \"Maximum write IOPS\": 20000,\n        \"Maximum read IOPS\": 20000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"Machine type\": \"a2-highgpu-4g\",\n        \"Maximum write IOPS\": 50000,\n        \"Maximum read IOPS\": 50000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"Machine type\": \"a2-highgpu-8g\",\n        \"Maximum write IOPS\": 80000,\n        \"Maximum read IOPS\": 80000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"Machine type\": \"a2-megagpu-16g\",\n        \"Maximum write IOPS\": 80000,\n        \"Maximum read IOPS\": 80000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      }\n    ],\n    \"pd-ssd\": [\n      {\n        \"Machine type\": \"a2-highgpu-1g\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 15000,\n        \"Maximum write throughput (MiBps)\": 800,\n        \"Maximum read throughput (MiBps)\": 800\n      },\n      {\n        \"Machine type\": \"a2-highgpu-2g\",\n        \"Maximum write IOPS\": 25000,\n        \"Maximum read IOPS\": 25000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"Machine type\": \"a2-highgpu-4g\",\n        \"Maximum write IOPS\": 60000,\n        \"Maximum read IOPS\": 60000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"Machine type\": \"a2-highgpu-8g\",\n        \"Maximum write IOPS\": 100000,\n        \"Maximum read IOPS\": 100000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"Machine type\": \"a2-megagpu-16g\",\n        \"Maximum write IOPS\": 100000,\n        \"Maximum read IOPS\": 100000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      }\n    ],\n    \"pd-standard\": [\n      {\n        \"Machine type\": \"a2-highgpu-1g\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 5000,\n        \"Maximum write throughput (MiBps)\": 400,\n        \"Maximum read throughput (MiBps)\": 800\n      },\n      {\n        \"Machine type\": \"a2-highgpu-2g\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 7500,\n        \"Maximum write throughput (MiBps)\": 400,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"Machine type\": \"a2-highgpu-4g\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 7500,\n        \"Maximum write throughput (MiBps)\": 400,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"Machine type\": \"a2-highgpu-8g\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 7500,\n        \"Maximum write throughput (MiBps)\": 400,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"Machine type\": \"a2-megagpu-16g\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 7500,\n        \"Maximum write throughput (MiBps)\": 400,\n        \"Maximum read throughput (MiBps)\": 1200\n      }\n    ]\n  },\n  \"A2 Ultra VMs\": {\n    \"pd-balanced\": [\n      {\n        \"Machine type\": \"a2-ultragpu-1g\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 15000,\n        \"Maximum write throughput (MiBps)\": 800,\n        \"Maximum read throughput (MiBps)\": 800\n      },\n      {\n        \"Machine type\": \"a2-ultragpu-2g\",\n        \"Maximum write IOPS\": 20000,\n        \"Maximum read IOPS\": 20000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"Machine type\": \"a2-ultragpu-4g\",\n        \"Maximum write IOPS\": 50000,\n        \"Maximum read IOPS\": 50000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"Machine type\": \"a2-ultragpu-8g\",\n        \"Maximum write IOPS\": 80000,\n        \"Maximum read IOPS\": 80000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      }\n    ],\n    \"pd-ssd\": [\n      {\n        \"Machine type\": \"a2-ultragpu-1g\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 15000,\n        \"Maximum write throughput (MiBps)\": 800,\n        \"Maximum read throughput (MiBps)\": 800\n      },\n      {\n        \"Machine type\": \"a2-ultragpu-2g\",\n        \"Maximum write IOPS\": 25000,\n        \"Maximum read IOPS\": 25000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"Machine type\": \"a2-ultragpu-4g\",\n        \"Maximum write IOPS\": 60000,\n        \"Maximum read IOPS\": 60000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"Machine type\": \"a2-ultragpu-8g\",\n        \"Maximum write IOPS\": 100000,\n        \"Maximum read IOPS\": 100000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      }\n    ],\n    \"pd-standard\": [\n      {\n        \"Machine type\": \"a2-ultragpu-1g\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 5000,\n        \"Maximum write throughput (MiBps)\": 400,\n        \"Maximum read throughput (MiBps)\": 800\n      },\n      {\n        \"Machine type\": \"a2-ultragpu-2g\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 7500,\n        \"Maximum write throughput (MiBps)\": 400,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"Machine type\": \"a2-ultragpu-4g\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 7500,\n        \"Maximum write throughput (MiBps)\": 400,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"Machine type\": \"a2-ultragpu-8g\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 7500,\n        \"Maximum write throughput (MiBps)\": 400,\n        \"Maximum read throughput (MiBps)\": 1\n      }\n    ]\n  },\n  \"A3 VMs\": {\n    \"pd-balanced\": [\n      {\n        \"Machine type\": \"a3-megagpu-8g\",\n        \"Maximum write IOPS\": 80000,\n        \"Maximum read IOPS\": 80000,\n        \"Maximum write throughput (MB/s)\": 1200,\n        \"Maximum read throughput (MB/s)\": 1200\n      },\n      {\n        \"Machine type\": \"a3-highgpu-8g\",\n        \"Maximum write IOPS\": 80000,\n        \"Maximum read IOPS\": 80000,\n        \"Maximum write throughput (MB/s)\": 1200,\n        \"Maximum read throughput (MB/s)\": 1200\n      }\n    ],\n    \"pd-ssd\": [\n      {\n        \"Machine type\": \"a3-megagpu-8g\",\n        \"Maximum write IOPS\": 80000,\n        \"Maximum read IOPS\": 80000,\n        \"Maximum write throughput (MB/s)\": 1200,\n        \"Maximum read throughput (MB/s)\": 1200\n      },\n      {\n        \"Machine type\": \"a3-highgpu-8g\",\n        \"Maximum write IOPS\": 80000,\n        \"Maximum read IOPS\": 80000,\n        \"Maximum write throughput (MB/s)\": 1200,\n        \"Maximum read throughput (MB/s)\": 1200\n      }\n    ]\n  }\n}\n"
  },
  {
    "path": "gcpdiag/runbook/gce/disk_performance_benchmark/c-family.json",
    "content": "{\n  \"C2 VMs\": {\n    \"pd-balanced\": [\n      {\n        \"VM vCPU count\": \"4\",\n        \"Maximum write IOPS\": 4000,\n        \"Maximum read IOPS\": 4000,\n        \"Maximum write throughput (MiBps)\": 240,\n        \"Maximum read throughput (MiBps)\": 240\n      },\n      {\n        \"VM vCPU count\": \"8\",\n        \"Maximum write IOPS\": 4000,\n        \"Maximum read IOPS\": 4000,\n        \"Maximum write throughput (MiBps)\": 240,\n        \"Maximum read throughput (MiBps)\": 240\n      },\n      {\n        \"VM vCPU count\": \"16\",\n        \"Maximum write IOPS\": 4000,\n        \"Maximum read IOPS\": 8000,\n        \"Maximum write throughput (MiBps)\": 480,\n        \"Maximum read throughput (MiBps)\": 600\n      },\n      {\n        \"VM vCPU count\": \"30\",\n        \"Maximum write IOPS\": 8000,\n        \"Maximum read IOPS\": 15000,\n        \"Maximum write throughput (MiBps)\": 480,\n        \"Maximum read throughput (MiBps)\": 600\n      },\n      {\n        \"VM vCPU count\": \"60\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 15000,\n        \"Maximum write throughput (MiBps)\": 800,\n        \"Maximum read throughput (MiBps)\": 1200\n      }\n    ],\n    \"pd-ssd\": [\n      {\n        \"VM vCPU count\": \"4\",\n        \"Maximum write IOPS\": 4000,\n        \"Maximum read IOPS\": 4000,\n        \"Maximum write throughput (MiBps)\": 240,\n        \"Maximum read throughput (MiBps)\": 240\n      },\n      {\n        \"VM vCPU count\": \"8\",\n        \"Maximum write IOPS\": 4000,\n        \"Maximum read IOPS\": 4000,\n        \"Maximum write throughput (MiBps)\": 240,\n        \"Maximum read throughput (MiBps)\": 240\n      },\n      {\n        \"VM vCPU count\": \"16\",\n        \"Maximum write IOPS\": 4000,\n        \"Maximum read IOPS\": 8000,\n        \"Maximum write throughput (MiBps)\": 480,\n        \"Maximum read throughput (MiBps)\": 600\n      },\n      {\n        \"VM vCPU count\": \"30\",\n        \"Maximum write IOPS\": 8000,\n        \"Maximum read IOPS\": 15000,\n        \"Maximum write throughput (MiBps)\": 480,\n        \"Maximum read throughput (MiBps)\": 600\n      },\n      {\n        \"VM vCPU count\": \"60\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 30000,\n        \"Maximum write throughput (MiBps)\": 800,\n        \"Maximum read throughput (MiBps)\": 1200\n      }\n    ],\n    \"pd-standard\": [\n      {\n        \"VM vCPU count\": \"4\",\n        \"Maximum write IOPS\": 4000,\n        \"Maximum read IOPS\": 3000,\n        \"Maximum write throughput (MiBps)\": 240,\n        \"Maximum read throughput (MiBps)\": 240\n      },\n      {\n        \"VM vCPU count\": \"8\",\n        \"Maximum write IOPS\": 4000,\n        \"Maximum read IOPS\": 3000,\n        \"Maximum write throughput (MiBps)\": 240,\n        \"Maximum read throughput (MiBps)\": 240\n      },\n      {\n        \"VM vCPU count\": \"16\",\n        \"Maximum write IOPS\": 4000,\n        \"Maximum read IOPS\": 3000,\n        \"Maximum write throughput (MiBps)\": 240,\n        \"Maximum read throughput (MiBps)\": 240\n      },\n      {\n        \"VM vCPU count\": \"30\",\n        \"Maximum write IOPS\": 8000,\n        \"Maximum read IOPS\": 3000,\n        \"Maximum write throughput (MiBps)\": 240,\n        \"Maximum read throughput (MiBps)\": 240\n      },\n      {\n        \"VM vCPU count\": \"60\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 3000,\n        \"Maximum write throughput (MiBps)\": 240,\n        \"Maximum read throughput (MiBps)\": 240\n      }\n    ]\n  },\n  \"C2D VMs\": {\n    \"pd-balanced\": [\n      {\n        \"VM vCPU count\": \"2\",\n        \"Maximum write IOPS\": 4590,\n        \"Maximum read IOPS\": 4080,\n        \"Maximum write throughput (MiBps)\": 245,\n        \"Maximum read throughput (MiBps)\": 245\n      },\n      {\n        \"VM vCPU count\": \"4\",\n        \"Maximum write IOPS\": 4590,\n        \"Maximum read IOPS\": 4080,\n        \"Maximum write throughput (MiBps)\": 245,\n        \"Maximum read throughput (MiBps)\": 245\n      },\n      {\n        \"VM vCPU count\": \"8\",\n        \"Maximum write IOPS\": 4590,\n        \"Maximum read IOPS\": 4080,\n        \"Maximum write throughput (MiBps)\": 245,\n        \"Maximum read throughput (MiBps)\": 245\n      },\n      {\n        \"VM vCPU count\": \"16\",\n        \"Maximum write IOPS\": 4590,\n        \"Maximum read IOPS\": 8160,\n        \"Maximum write throughput (MiBps)\": 245,\n        \"Maximum read throughput (MiBps)\": 326\n      },\n      {\n        \"VM vCPU count\": \"32\",\n        \"Maximum write IOPS\": 8160,\n        \"Maximum read IOPS\": 15300,\n        \"Maximum write throughput (MiBps)\": 245,\n        \"Maximum read throughput (MiBps)\": 612\n      },\n      {\n        \"VM vCPU count\": \"56\",\n        \"Maximum write IOPS\": 8160,\n        \"Maximum read IOPS\": 15300,\n        \"Maximum write throughput (MiBps)\": 245,\n        \"Maximum read throughput (MiBps)\": 612\n      },\n      {\n        \"VM vCPU count\": \"112\",\n        \"Maximum write IOPS\": 15300,\n        \"Maximum read IOPS\": 30600,\n        \"Maximum write throughput (MiBps)\": 408,\n        \"Maximum read throughput (MiBps)\": 1224\n      }\n    ],\n    \"pd-ssd\": [\n      {\n        \"VM vCPU count\": \"2\",\n        \"Maximum write IOPS\": 4590,\n        \"Maximum read IOPS\": 4080,\n        \"Maximum write throughput (MiBps)\": 245,\n        \"Maximum read throughput (MiBps)\": 245\n      },\n      {\n        \"VM vCPU count\": \"4\",\n        \"Maximum write IOPS\": 4590,\n        \"Maximum read IOPS\": 4080,\n        \"Maximum write throughput (MiBps)\": 245,\n        \"Maximum read throughput (MiBps)\": 245\n      },\n      {\n        \"VM vCPU count\": \"8\",\n        \"Maximum write IOPS\": 4590,\n        \"Maximum read IOPS\": 4080,\n        \"Maximum write throughput (MiBps)\": 245,\n        \"Maximum read throughput (MiBps)\": 245\n      },\n      {\n        \"VM vCPU count\": \"16\",\n        \"Maximum write IOPS\": 4590,\n        \"Maximum read IOPS\": 8160,\n        \"Maximum write throughput (MiBps)\": 245,\n        \"Maximum read throughput (MiBps)\": 326\n      },\n      {\n        \"VM vCPU count\": \"32\",\n        \"Maximum write IOPS\": 8160,\n        \"Maximum read IOPS\": 15300,\n        \"Maximum write throughput (MiBps)\": 245,\n        \"Maximum read throughput (MiBps)\": 612\n      },\n      {\n        \"VM vCPU count\": \"56\",\n        \"Maximum write IOPS\": 8160,\n        \"Maximum read IOPS\": 15300,\n        \"Maximum write throughput (MiBps)\": 245,\n        \"Maximum read throughput (MiBps)\": 612\n      },\n      {\n        \"VM vCPU count\": \"112\",\n        \"Maximum write IOPS\": 15300,\n        \"Maximum read IOPS\": 30600,\n        \"Maximum write throughput (MiBps)\": 408,\n        \"Maximum read throughput (MiBps)\": 1224\n      }\n    ],\n    \"pd-standard\": [\n      {\n        \"VM vCPU count\": \"2\",\n        \"Maximum write IOPS\": 4590,\n        \"Maximum read IOPS\": 3060,\n        \"Maximum write throughput (MiBps)\": 245,\n        \"Maximum read throughput (MiBps)\": 245\n      },\n      {\n        \"VM vCPU count\": \"4\",\n        \"Maximum write IOPS\": 4590,\n        \"Maximum read IOPS\": 3060,\n        \"Maximum write throughput (MiBps)\": 245,\n        \"Maximum read throughput (MiBps)\": 245\n      },\n      {\n        \"VM vCPU count\": \"8\",\n        \"Maximum write IOPS\": 4590,\n        \"Maximum read IOPS\": 3060,\n        \"Maximum write throughput (MiBps)\": 245,\n        \"Maximum read throughput (MiBps)\": 245\n      },\n      {\n        \"VM vCPU count\": \"16\",\n        \"Maximum write IOPS\": 4590,\n        \"Maximum read IOPS\": 3060,\n        \"Maximum write throughput (MiBps)\": 245,\n        \"Maximum read throughput (MiBps)\": 245\n      },\n      {\n        \"VM vCPU count\": \"32\",\n        \"Maximum write IOPS\": 8160,\n        \"Maximum read IOPS\": 3060,\n        \"Maximum write throughput (MiBps)\": 245,\n        \"Maximum read throughput (MiBps)\": 245\n      },\n      {\n        \"VM vCPU count\": \"56\",\n        \"Maximum write IOPS\": 8160,\n        \"Maximum read IOPS\": 3060,\n        \"Maximum write throughput (MiBps)\": 245,\n        \"Maximum read throughput (MiBps)\": 245\n      },\n      {\n        \"VM vCPU count\": \"112\",\n        \"Maximum write IOPS\": 15300,\n        \"Maximum read IOPS\": 3060,\n        \"Maximum write throughput (MiBps)\": 245,\n        \"Maximum read throughput (MiBps)\": 245\n      }\n    ]\n  },\n  \"C3D VMs\": {\n    \"pd-balanced\": [\n      {\n        \"VM vCPU count\": \"4\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 15000,\n        \"Maximum write throughput (MiBps)\": 240,\n        \"Maximum read throughput (MiBps)\": 240\n      },\n      {\n        \"VM vCPU count\": \"8\",\n        \"Maximum write IOPS\": 25000,\n        \"Maximum read IOPS\": 25000,\n        \"Maximum write throughput (MiBps)\": 800,\n        \"Maximum read throughput (MiBps)\": 800\n      },\n      {\n        \"VM vCPU count\": \"16\",\n        \"Maximum write IOPS\": 25000,\n        \"Maximum read IOPS\": 25000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"VM vCPU count\": \"30\",\n        \"Maximum write IOPS\": 50000,\n        \"Maximum read IOPS\": 50000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"VM vCPU count\": \"60\",\n        \"Maximum write IOPS\": 80000,\n        \"Maximum read IOPS\": 80000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"VM vCPU count\": \"90\",\n        \"Maximum write IOPS\": 80000,\n        \"Maximum read IOPS\": 80000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"VM vCPU count\": \"180\",\n        \"Maximum write IOPS\": 80000,\n        \"Maximum read IOPS\": 80000,\n        \"Maximum write throughput (MiBps)\": 2200,\n        \"Maximum read throughput (MiBps)\": 2200\n      },\n      {\n        \"VM vCPU count\": \"360\",\n        \"Maximum write IOPS\": 80000,\n        \"Maximum read IOPS\": 80000,\n        \"Maximum write throughput (MiBps)\": 2200,\n        \"Maximum read throughput (MiBps)\": 2200\n      }\n    ],\n    \"pd-ssd\": [\n      {\n        \"VM vCPU count\": \"4\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 15000,\n        \"Maximum write throughput (MiBps)\": 240,\n        \"Maximum read throughput (MiBps)\": 240\n      },\n      {\n        \"VM vCPU count\": \"8\",\n        \"Maximum write IOPS\": 25000,\n        \"Maximum read IOPS\": 25000,\n        \"Maximum write throughput (MiBps)\": 800,\n        \"Maximum read throughput (MiBps)\": 800\n      },\n      {\n        \"VM vCPU count\": \"16\",\n        \"Maximum write IOPS\": 25000,\n        \"Maximum read IOPS\": 25000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"VM vCPU count\": \"30\",\n        \"Maximum write IOPS\": 50000,\n        \"Maximum read IOPS\": 50000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"VM vCPU count\": \"60\",\n        \"Maximum write IOPS\": 80000,\n        \"Maximum read IOPS\": 80000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"VM vCPU count\": \"90\",\n        \"Maximum write IOPS\": 80000,\n        \"Maximum read IOPS\": 80000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"VM vCPU count\": \"180\",\n        \"Maximum write IOPS\": 80000,\n        \"Maximum read IOPS\": 80000,\n        \"Maximum write throughput (MiBps)\": 2200,\n        \"Maximum read throughput (MiBps)\": 2200\n      },\n      {\n        \"VM vCPU count\": \"360\",\n        \"Maximum write IOPS\": 80000,\n        \"Maximum read IOPS\": 80000,\n        \"Maximum write throughput (MiBps)\": 2200,\n        \"Maximum read throughput (MiBps)\": 2200\n      }\n    ]\n  },\n  \"C3 VMs\": {\n    \"pd-balanced\": [\n      {\n        \"VM vCPU count\": \"4\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 15000,\n        \"Maximum write throughput (MiBps)\": 240,\n        \"Maximum read throughput (MiBps)\": 240\n      },\n      {\n        \"VM vCPU count\": \"8\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 15000,\n        \"Maximum write throughput (MiBps)\": 240,\n        \"Maximum read throughput (MiBps)\": 240\n      },\n      {\n        \"VM vCPU count\": \"22\",\n        \"Maximum write IOPS\": 20000,\n        \"Maximum read IOPS\": 20000,\n        \"Maximum write throughput (MiBps)\": 800,\n        \"Maximum read throughput (MiBps)\": 800\n      },\n      {\n        \"VM vCPU count\": \"44\",\n        \"Maximum write IOPS\": 50000,\n        \"Maximum read IOPS\": 50000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"VM vCPU count\": \"88\",\n        \"Maximum write IOPS\": 80000,\n        \"Maximum read IOPS\": 80000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"VM vCPU count\": \"176\",\n        \"Maximum write IOPS\": 80000,\n        \"Maximum read IOPS\": 80000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      }\n    ],\n    \"pd-ssd\": [\n      {\n        \"VM vCPU count\": \"4\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 15000,\n        \"Maximum write throughput (MiBps)\": 240,\n        \"Maximum read throughput (MiBps)\": 240\n      },\n      {\n        \"VM vCPU count\": \"8\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 15000,\n        \"Maximum write throughput (MiBps)\": 240,\n        \"Maximum read throughput (MiBps)\": 240\n      },\n      {\n        \"VM vCPU count\": \"22\",\n        \"Maximum write IOPS\": 25000,\n        \"Maximum read IOPS\": 25000,\n        \"Maximum write throughput (MiBps)\": 800,\n        \"Maximum read throughput (MiBps)\": 800\n      },\n      {\n        \"VM vCPU count\": \"44\",\n        \"Maximum write IOPS\": 60000,\n        \"Maximum read IOPS\": 60000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"VM vCPU count\": \"88\",\n        \"Maximum write IOPS\": 80000,\n        \"Maximum read IOPS\": 80000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"VM vCPU count\": \"176\",\n        \"Maximum write IOPS\": 80000,\n        \"Maximum read IOPS\": 80000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      }\n    ]\n  }\n}\n"
  },
  {
    "path": "gcpdiag/runbook/gce/disk_performance_benchmark/e-family.json",
    "content": "{\n  \"E2 VMs\": {\n    \"pd-balanced\": [\n      {\n        \"VM vCPU count\": \"e2-medium*\",\n        \"Maximum write IOPS\": 10000,\n        \"Maximum read IOPS\": 12000,\n        \"Maximum write throughput (MiBps)\": 200,\n        \"Maximum read throughput (MiBps)\": 200\n      },\n      {\n        \"VM vCPU count\": \"2-7\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 15000,\n        \"Maximum write throughput (MiBps)\": 240,\n        \"Maximum read throughput (MiBps)\": 240\n      },\n      {\n        \"VM vCPU count\": \"8-15\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 15000,\n        \"Maximum write throughput (MiBps)\": 800,\n        \"Maximum read throughput (MiBps)\": 800\n      },\n      {\n        \"VM vCPU count\": \"16-31\",\n        \"Maximum write IOPS\": 20000,\n        \"Maximum read IOPS\": 20000,\n        \"Maximum write throughput (MiBps)\": 1000,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"VM vCPU count\": \"32 or more\",\n        \"Maximum write IOPS\": 50000,\n        \"Maximum read IOPS\": 50000,\n        \"Maximum write throughput (MiBps)\": 1000,\n        \"Maximum read throughput (MiBps)\": 1200\n      }\n    ],\n    \"pd-ssd\": [\n      {\n        \"VM vCPU count\": \"e2-medium*\",\n        \"Maximum write IOPS\": 10000,\n        \"Maximum read IOPS\": 12000,\n        \"Maximum write throughput (MiBps)\": 200,\n        \"Maximum read throughput (MiBps)\": 200\n      },\n      {\n        \"VM vCPU count\": \"2-7\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 15000,\n        \"Maximum write throughput (MiBps)\": 240,\n        \"Maximum read throughput (MiBps)\": 240\n      },\n      {\n        \"VM vCPU count\": \"8-15\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 15000,\n        \"Maximum write throughput (MiBps)\": 800,\n        \"Maximum read throughput (MiBps)\": 800\n      },\n      {\n        \"VM vCPU count\": \"16-31\",\n        \"Maximum write IOPS\": 25000,\n        \"Maximum read IOPS\": 25000,\n        \"Maximum write throughput (MiBps)\": 1000,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"VM vCPU count\": \"32 or more\",\n        \"Maximum write IOPS\": 60000,\n        \"Maximum read IOPS\": 60000,\n        \"Maximum write throughput (MiBps)\": 1000,\n        \"Maximum read throughput (MiBps)\": 1200\n      }\n    ],\n    \"pd-standard\": [\n      {\n        \"VM vCPU count\": \"e2-medium*\",\n        \"Maximum write IOPS\": 10000,\n        \"Maximum read IOPS\": 1000,\n        \"Maximum write throughput (MiBps)\": 200,\n        \"Maximum read throughput (MiBps)\": 200\n      },\n      {\n        \"VM vCPU count\": \"2-7\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 3000,\n        \"Maximum write throughput (MiBps)\": 240,\n        \"Maximum read throughput (MiBps)\": 240\n      },\n      {\n        \"VM vCPU count\": \"8-15\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 5000,\n        \"Maximum write throughput (MiBps)\": 400,\n        \"Maximum read throughput (MiBps)\": 800\n      },\n      {\n        \"VM vCPU count\": \"16-31\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 7500,\n        \"Maximum write throughput (MiBps)\": 400,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"VM vCPU count\": \"32 or more\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 7500,\n        \"Maximum write throughput (MiBps)\": 400,\n        \"Maximum read throughput (MiBps)\": 1200\n      }\n    ]\n  }\n}\n"
  },
  {
    "path": "gcpdiag/runbook/gce/disk_performance_benchmark/f-family.json",
    "content": "{\n  \"F1 VMs\": {\n    \"pd-balanced\": [\n      {\n        \"Machine type\": \"f1-micro\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 15000,\n        \"Maximum write throughput (MiBps)\": 204,\n        \"Maximum read throughput (MiBps)\": 240\n      }\n    ],\n    \"pd-ssd\": [\n      {\n        \"Machine type\": \"f1-micro\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 15000,\n        \"Maximum write throughput (MiBps)\": 204,\n        \"Maximum read throughput (MiBps)\": 240\n      }\n    ],\n    \"pd-standard\": [\n      {\n        \"Machine type\": \"f1-micro\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 3000,\n        \"Maximum write throughput (MiBps)\": 204,\n        \"Maximum read throughput (MiBps)\": 240\n      }\n    ],\n    \"pd-extreme\": [\n      {\n        \"Machine type\": \"f1-micro\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 3000,\n        \"Maximum write throughput (MiBps)\": 204,\n        \"Maximum read throughput (MiBps)\": 240\n      }\n    ]\n  }\n}\n"
  },
  {
    "path": "gcpdiag/runbook/gce/disk_performance_benchmark/g-family.json",
    "content": "{\n  \"G1 VMs\": {\n    \"pd-balanced\": [\n      {\n        \"Machine type\": \"g1-small\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 15000,\n        \"Maximum write throughput (MiBps)\": 204,\n        \"Maximum read throughput (MiBps)\": 240\n      }\n    ],\n    \"pd-ssd\": [\n      {\n        \"Machine type\": \"g1-small\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 15000,\n        \"Maximum write throughput (MiBps)\": 204,\n        \"Maximum read throughput (MiBps)\": 240\n      }\n    ],\n    \"pd-standard\": [\n      {\n        \"Machine type\": \"g1-small\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 3000,\n        \"Maximum write throughput (MiBps)\": 204,\n        \"Maximum read throughput (MiBps)\": 240\n      }\n    ],\n    \"pd-extreme\": [\n      {\n        \"Machine type\": \"g1-small\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 3000,\n        \"Maximum write throughput (MiBps)\": 204,\n        \"Maximum read throughput (MiBps)\": 240\n      }\n    ]\n  },\n  \"G2 VMs\": {\n    \"pd-balanced\": [\n      {\n        \"Machine type\": \"g2-standard-4\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 15000,\n        \"Maximum write throughput (MiBps)\": 240,\n        \"Maximum read throughput (MiBps)\": 240\n      },\n      {\n        \"Machine type\": \"g2-standard-8\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 15000,\n        \"Maximum write throughput (MiBps)\": 800,\n        \"Maximum read throughput (MiBps)\": 800\n      },\n      {\n        \"Machine type\": \"g2-standard-12\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 15000,\n        \"Maximum write throughput (MiBps)\": 800,\n        \"Maximum read throughput (MiBps)\": 800\n      },\n      {\n        \"Machine type\": \"g2-standard-16\",\n        \"Maximum write IOPS\": 20000,\n        \"Maximum read IOPS\": 20000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"Machine type\": \"g2-standard-24\",\n        \"Maximum write IOPS\": 20000,\n        \"Maximum read IOPS\": 20000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"Machine type\": \"g2-standard-32\",\n        \"Maximum write IOPS\": 50000,\n        \"Maximum read IOPS\": 50000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"Machine type\": \"g2-standard-48\",\n        \"Maximum write IOPS\": 50000,\n        \"Maximum read IOPS\": 50000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"Machine type\": \"g2-standard-96\",\n        \"Maximum write IOPS\": 80000,\n        \"Maximum read IOPS\": 80000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      }\n    ],\n    \"pd-ssd\": [\n      {\n        \"Machine type\": \"g2-standard-4\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 15000,\n        \"Maximum write throughput (MiBps)\": 240,\n        \"Maximum read throughput (MiBps)\": 240\n      },\n      {\n        \"Machine type\": \"g2-standard-8\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 15000,\n        \"Maximum write throughput (MiBps)\": 800,\n        \"Maximum read throughput (MiBps)\": 800\n      },\n      {\n        \"Machine type\": \"g2-standard-12\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 15000,\n        \"Maximum write throughput (MiBps)\": 800,\n        \"Maximum read throughput (MiBps)\": 800\n      },\n      {\n        \"Machine type\": \"g2-standard-16\",\n        \"Maximum write IOPS\": 25000,\n        \"Maximum read IOPS\": 25000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"Machine type\": \"g2-standard-24\",\n        \"Maximum write IOPS\": 25000,\n        \"Maximum read IOPS\": 25000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"Machine type\": \"g2-standard-32\",\n        \"Maximum write IOPS\": 60000,\n        \"Maximum read IOPS\": 60000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"Machine type\": \"g2-standard-48\",\n        \"Maximum write IOPS\": 60000,\n        \"Maximum read IOPS\": 60000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"Machine type\": \"g2-standard-96\",\n        \"Maximum write IOPS\": 100000,\n        \"Maximum read IOPS\": 100000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      }\n    ]\n  }\n}\n"
  },
  {
    "path": "gcpdiag/runbook/gce/disk_performance_benchmark/h-family.json",
    "content": "{\n  \"H3 VMs\": {\n    \"pd-balanced\": [\n      {\n        \"VM vCPU count\": \"88\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 15000,\n        \"Maximum write throughput (MiBps)\": 240,\n        \"Maximum read throughput (MiBps)\": 240\n      }\n    ]\n  }\n}\n"
  },
  {
    "path": "gcpdiag/runbook/gce/disk_performance_benchmark/limits_per_gb.json",
    "content": "{\n  \"iops\": {\n    \"pd-standard\": {\n      \"Read IOPS per GiB\": 0.75,\n      \"Write IOPS per GiB\": 1.5\n    },\n    \"pd-balanced\": {\n      \"Read IOPS per GiB\": 6,\n      \"Write IOPS per GiB\": 6\n    },\n    \"pd-ssd\": {\n      \"Read IOPS per GiB\": 30,\n      \"Write IOPS per GiB\": 30\n    },\n    \"pd-extreme\": {\n      \"Read IOPS per GiB\": 3.6,\n      \"Write IOPS per GiB\": 3.6\n    }\n  },\n  \"throughput\": {\n    \"pd-standard\": {\n      \"Throughput per GiB (MiBps)\": 0.12\n    },\n    \"pd-balanced\": {\n      \"Throughput per GiB (MiBps)\": 0.28\n    },\n    \"pd-ssd\": {\n      \"Throughput per GiB (MiBps)\": 0.48\n    },\n    \"pd-extreme\": {\n      \"Throughput per GiB (MiBps)\": 0.168\n    }\n  },\n  \"baseline\": {\n    \"pd-balanced\": {\n      \"Baseline IOPS per VM\": 3000,\n      \"Baseline Throughput (MiBps) per VM\": 140\n    },\n    \"pd-ssd\": {\n      \"Baseline IOPS per VM\": 6000,\n      \"Baseline Throughput (MiBps) per VM\": 240\n    },\n    \"pd-standard\": {\n      \"Baseline IOPS per VM\": 0,\n      \"Baseline Throughput (MiBps) per VM\": 0\n    },\n    \"pd-extreme\": {\n      \"Baseline IOPS per VM\": 0,\n      \"Baseline Throughput (MiBps) per VM\": 0\n    }\n  }\n}\n"
  },
  {
    "path": "gcpdiag/runbook/gce/disk_performance_benchmark/m-family.json",
    "content": "{\n  \"M1 VMs\": {\n    \"pd-balanced\": [\n      {\n        \"Machine type\": \"m1-megamem-96\",\n        \"Maximum write IOPS\": 80000,\n        \"Maximum read IOPS\": 80000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"Machine type\": \"m1-ultramem-40\",\n        \"Maximum write IOPS\": 60000,\n        \"Maximum read IOPS\": 60000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"Machine type\": \"m1-ultramem-80\",\n        \"Maximum write IOPS\": 70000,\n        \"Maximum read IOPS\": 70000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"Machine type\": \"m1-ultramem-160\",\n        \"Maximum write IOPS\": 70000,\n        \"Maximum read IOPS\": 70000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      }\n    ],\n    \"pd-ssd\": [\n      {\n        \"Machine type\": \"m1-megamem-96\",\n        \"Maximum write IOPS\": 90000,\n        \"Maximum read IOPS\": 90000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"Machine type\": \"m1-ultramem-40\",\n        \"Maximum write IOPS\": 60000,\n        \"Maximum read IOPS\": 60000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"Machine type\": \"m1-ultramem-80\",\n        \"Maximum write IOPS\": 70000,\n        \"Maximum read IOPS\": 70000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"Machine type\": \"m1-ultramem-160\",\n        \"Maximum write IOPS\": 70000,\n        \"Maximum read IOPS\": 70000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      }\n    ],\n    \"pd-standard\": [\n      {\n        \"Machine type\": \"m1-megamem-96\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 7500,\n        \"Maximum write throughput (MiBps)\": 400,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"Machine type\": \"m1-ultramem-40\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 7500,\n        \"Maximum write throughput (MiBps)\": 400,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"Machine type\": \"m1-ultramem-80\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 7500,\n        \"Maximum write throughput (MiBps)\": 400,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"Machine type\": \"m1-ultramem-160\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 7500,\n        \"Maximum write throughput (MiBps)\": 400,\n        \"Maximum read throughput (MiBps)\": 1200\n      }\n    ],\n    \"pd-extreme\": [\n      {\n        \"Machine type\": \"m1-megamem-96\",\n        \"Maximum write IOPS\": 90000,\n        \"Maximum read IOPS\": 90000,\n        \"Maximum write throughput (MiBps)\": 2200,\n        \"Maximum read throughput (MiBps)\": 2200\n      }\n    ]\n  },\n  \"M2 VMs\": {\n    \"pd-balanced\": [\n      {\n        \"Machine type\": \"m2-megamem-416\",\n        \"Maximum write IOPS\": 40000,\n        \"Maximum read IOPS\": 40000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"Machine type\": \"m2-ultramem-208\",\n        \"Maximum write IOPS\": 40000,\n        \"Maximum read IOPS\": 40000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"Machine type\": \"m2-ultramem-416\",\n        \"Maximum write IOPS\": 40000,\n        \"Maximum read IOPS\": 40000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"Machine type\": \"m2-hypermem-416\",\n        \"Maximum write IOPS\": 40000,\n        \"Maximum read IOPS\": 40000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      }\n    ],\n    \"pd-ssd\": [\n      {\n        \"Machine type\": \"m2-megamem-416\",\n        \"Maximum write IOPS\": 40000,\n        \"Maximum read IOPS\": 40000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"Machine type\": \"m2-ultramem-208\",\n        \"Maximum write IOPS\": 40000,\n        \"Maximum read IOPS\": 40000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"Machine type\": \"m2-ultramem-416\",\n        \"Maximum write IOPS\": 40000,\n        \"Maximum read IOPS\": 40000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"Machine type\": \"m2-hypermem-416\",\n        \"Maximum write IOPS\": 40000,\n        \"Maximum read IOPS\": 40000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      }\n    ],\n    \"pd-standard\": [\n      {\n        \"Machine type\": \"m2-megamem-416\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 7500,\n        \"Maximum write throughput (MiBps)\": 400,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"Machine type\": \"m2-ultramem-208\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 7500,\n        \"Maximum write throughput (MiBps)\": 400,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"Machine type\": \"m2-ultramem-416\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 7500,\n        \"Maximum write throughput (MiBps)\": 400,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"Machine type\": \"m2-hypermem-416\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 7500,\n        \"Maximum write throughput (MiBps)\": 400,\n        \"Maximum read throughput (MiBps)\": 1200\n      }\n    ],\n    \"pd-extreme\": [\n      {\n        \"Machine type\": \"m2-megamem-416\",\n        \"Maximum write IOPS\": 40000,\n        \"Maximum read IOPS\": 40000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 2200\n      },\n      {\n        \"Machine type\": \"m2-ultramem-208\",\n        \"Maximum write IOPS\": 40000,\n        \"Maximum read IOPS\": 40000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 2200\n      },\n      {\n        \"Machine type\": \"m2-ultramem-416\",\n        \"Maximum write IOPS\": 40000,\n        \"Maximum read IOPS\": 40000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 2200\n      },\n      {\n        \"Machine type\": \"m2-hypermem-416\",\n        \"Maximum write IOPS\": 40000,\n        \"Maximum read IOPS\": 40000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 2200\n      }\n    ]\n  },\n  \"M3 VMs\": {\n    \"pd-balanced\": [\n      {\n        \"Machine type\": \"m3-megamem-64\",\n        \"Maximum write IOPS\": 40000,\n        \"Maximum read IOPS\": 40000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"Machine type\": \"m3-megamem-128\",\n        \"Maximum write IOPS\": 80000,\n        \"Maximum read IOPS\": 80000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"Machine type\": \"m3-ultramem-32\",\n        \"Maximum write IOPS\": 40000,\n        \"Maximum read IOPS\": 40000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"Machine type\": \"m3-ultramem-64\",\n        \"Maximum write IOPS\": 40000,\n        \"Maximum read IOPS\": 40000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"Machine type\": \"m3-ultramem-128\",\n        \"Maximum write IOPS\": 80000,\n        \"Maximum read IOPS\": 80000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      }\n    ],\n    \"pd-ssd\": [\n      {\n        \"Machine type\": \"m3-megamem-64\",\n        \"Maximum write IOPS\": 40000,\n        \"Maximum read IOPS\": 40000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"Machine type\": \"m3-megamem-128\",\n        \"Maximum write IOPS\": 80000,\n        \"Maximum read IOPS\": 80000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"Machine type\": \"m3-ultramem-32\",\n        \"Maximum write IOPS\": 40000,\n        \"Maximum read IOPS\": 40000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"Machine type\": \"m3-ultramem-64\",\n        \"Maximum write IOPS\": 40000,\n        \"Maximum read IOPS\": 40000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"Machine type\": \"m3-ultramem-128\",\n        \"Maximum write IOPS\": 80000,\n        \"Maximum read IOPS\": 80000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      }\n    ],\n    \"pd-extreme\": [\n      {\n        \"Machine type\": \"m3-megamem-64\",\n        \"Maximum write IOPS\": 40000,\n        \"Maximum read IOPS\": 40000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 2200\n      },\n      {\n        \"Machine type\": \"m3-megamem-128\",\n        \"Maximum write IOPS\": 80000,\n        \"Maximum read IOPS\": 80000,\n        \"Maximum write throughput (MiBps)\": 1700,\n        \"Maximum read throughput (MiBps)\": 2200\n      },\n      {\n        \"Machine type\": \"m3-ultramem-32\",\n        \"Maximum write IOPS\": 40000,\n        \"Maximum read IOPS\": 40000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 2200\n      },\n      {\n        \"Machine type\": \"m3-ultramem-64\",\n        \"Maximum write IOPS\": 40000,\n        \"Maximum read IOPS\": 40000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 2200\n      },\n      {\n        \"Machine type\": \"m3-ultramem-128\",\n        \"Maximum write IOPS\": 80000,\n        \"Maximum read IOPS\": 80000,\n        \"Maximum write throughput (MiBps)\": 1700,\n        \"Maximum read throughput (MiBps)\": 2200\n      }\n    ]\n  }\n}\n"
  },
  {
    "path": "gcpdiag/runbook/gce/disk_performance_benchmark/n-family.json",
    "content": "{\n  \"N1 VMs\": {\n    \"pd-balanced\": [\n      {\n        \"VM vCPU count\": \"1\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 15000,\n        \"Maximum write throughput (MiBps)\": 204,\n        \"Maximum read throughput (MiBps)\": 240\n      },\n      {\n        \"VM vCPU count\": \"2-7\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 15000,\n        \"Maximum write throughput (MiBps)\": 240,\n        \"Maximum read throughput (MiBps)\": 240\n      },\n      {\n        \"VM vCPU count\": \"8-15\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 15000,\n        \"Maximum write throughput (MiBps)\": 800,\n        \"Maximum read throughput (MiBps)\": 800\n      },\n      {\n        \"VM vCPU count\": \"16-31\",\n        \"Maximum write IOPS\": 20000,\n        \"Maximum read IOPS\": 20000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"VM vCPU count\": \"32-63\",\n        \"Maximum write IOPS\": 50000,\n        \"Maximum read IOPS\": 50000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"VM vCPU count\": \"64 or more\",\n        \"Maximum write IOPS\": 100000,\n        \"Maximum read IOPS\": 100000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      }\n    ],\n    \"pd-ssd\": [\n      {\n        \"VM vCPU count\": \"1\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 15000,\n        \"Maximum write throughput (MiBps)\": 204,\n        \"Maximum read throughput (MiBps)\": 240\n      },\n      {\n        \"VM vCPU count\": \"2-7\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 15000,\n        \"Maximum write throughput (MiBps)\": 240,\n        \"Maximum read throughput (MiBps)\": 240\n      },\n      {\n        \"VM vCPU count\": \"8-15\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 15000,\n        \"Maximum write throughput (MiBps)\": 800,\n        \"Maximum read throughput (MiBps)\": 800\n      },\n      {\n        \"VM vCPU count\": \"16-31\",\n        \"Maximum write IOPS\": 20000,\n        \"Maximum read IOPS\": 20000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"VM vCPU count\": \"32-63\",\n        \"Maximum write IOPS\": 50000,\n        \"Maximum read IOPS\": 50000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"VM vCPU count\": \"64 or more\",\n        \"Maximum write IOPS\": 100000,\n        \"Maximum read IOPS\": 100000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      }\n    ],\n    \"pd-standard\": [\n      {\n        \"VM vCPU count\": \"1\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 3000,\n        \"Maximum write throughput (MiBps)\": 204,\n        \"Maximum read throughput (MiBps)\": 240\n      },\n      {\n        \"VM vCPU count\": \"2-7\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 3000,\n        \"Maximum write throughput (MiBps)\": 240,\n        \"Maximum read throughput (MiBps)\": 240\n      },\n      {\n        \"VM vCPU count\": \"8-15\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 5000,\n        \"Maximum write throughput (MiBps)\": 400,\n        \"Maximum read throughput (MiBps)\": 800\n      },\n      {\n        \"VM vCPU count\": \"16 or more\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 7500,\n        \"Maximum write throughput (MiBps)\": 400,\n        \"Maximum read throughput (MiBps)\": 1200\n      }\n    ]\n  },\n  \"N2 VMs\": {\n    \"pd-balanced\": [\n      {\n        \"VM vCPU count\": \"1\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 15000,\n        \"Maximum write throughput (MiBps)\": 240,\n        \"Maximum read throughput (MiBps)\": 240\n      },\n      {\n        \"VM vCPU count\": \"2-7\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 15000,\n        \"Maximum write throughput (MiBps)\": 240,\n        \"Maximum read throughput (MiBps)\": 240\n      },\n      {\n        \"VM vCPU count\": \"8-15\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 15000,\n        \"Maximum write throughput (MiBps)\": 800,\n        \"Maximum read throughput (MiBps)\": 800\n      },\n      {\n        \"VM vCPU count\": \"16-31\",\n        \"Maximum write IOPS\": 20000,\n        \"Maximum read IOPS\": 20000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"VM vCPU count\": \"32-63\",\n        \"Maximum write IOPS\": 50000,\n        \"Maximum read IOPS\": 50000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"VM vCPU count\": \"64 or more\",\n        \"Maximum write IOPS\": 80000,\n        \"Maximum read IOPS\": 80000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      }\n    ],\n    \"pd-ssd\": [\n      {\n        \"VM vCPU count\": \"1\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 15000,\n        \"Maximum write throughput (MiBps)\": 240,\n        \"Maximum read throughput (MiBps)\": 240\n      },\n      {\n        \"VM vCPU count\": \"2-7\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 15000,\n        \"Maximum write throughput (MiBps)\": 240,\n        \"Maximum read throughput (MiBps)\": 240\n      },\n      {\n        \"VM vCPU count\": \"8-15\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 15000,\n        \"Maximum write throughput (MiBps)\": 800,\n        \"Maximum read throughput (MiBps)\": 800\n      },\n      {\n        \"VM vCPU count\": \"16-31\",\n        \"Maximum write IOPS\": 25000,\n        \"Maximum read IOPS\": 25000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"VM vCPU count\": \"32-63\",\n        \"Maximum write IOPS\": 60000,\n        \"Maximum read IOPS\": 60000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"VM vCPU count\": \"64 or more\",\n        \"Maximum write IOPS\": 100000,\n        \"Maximum read IOPS\": 100000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      }\n    ],\n    \"pd-standard\": [\n      {\n        \"VM vCPU count\": \"1\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 3000,\n        \"Maximum write throughput (MiBps)\": 240,\n        \"Maximum read throughput (MiBps)\": 240\n      },\n      {\n        \"VM vCPU count\": \"2-7\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 3000,\n        \"Maximum write throughput (MiBps)\": 240,\n        \"Maximum read throughput (MiBps)\": 240\n      },\n      {\n        \"VM vCPU count\": \"8-15\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 5000,\n        \"Maximum write throughput (MiBps)\": 400,\n        \"Maximum read throughput (MiBps)\": 800\n      },\n      {\n        \"VM vCPU count\": \"16 or more\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 7500,\n        \"Maximum write throughput (MiBps)\": 400,\n        \"Maximum read throughput (MiBps)\": 1200\n      }\n    ],\n    \"pd-extreme\": [\n      {\n        \"Machine type\": \"n2-standard-64\",\n        \"Maximum write IOPS\": 120000,\n        \"Maximum read IOPS\": 120000,\n        \"Maximum write throughput (MiBps)\": 3000,\n        \"Maximum read throughput (MiBps)\": 4000\n      },\n      {\n        \"Machine type\": \"n2-standard-80\",\n        \"Maximum write IOPS\": 120000,\n        \"Maximum read IOPS\": 120000,\n        \"Maximum write throughput (MiBps)\": 3000,\n        \"Maximum read throughput (MiBps)\": 4000\n      },\n      {\n        \"Machine type\": \"n2-standard-96\",\n        \"Maximum write IOPS\": 120000,\n        \"Maximum read IOPS\": 120000,\n        \"Maximum write throughput (MiBps)\": 3000,\n        \"Maximum read throughput (MiBps)\": 4000\n      },\n      {\n        \"Machine type\": \"n2-standard-128\",\n        \"Maximum write IOPS\": 120000,\n        \"Maximum read IOPS\": 120000,\n        \"Maximum write throughput (MiBps)\": 3000,\n        \"Maximum read throughput (MiBps)\": 4000\n      },\n      {\n        \"Machine type\": \"n2-highmem-64\",\n        \"Maximum write IOPS\": 120000,\n        \"Maximum read IOPS\": 120000,\n        \"Maximum write throughput (MiBps)\": 3000,\n        \"Maximum read throughput (MiBps)\": 4000\n      },\n      {\n        \"Machine type\": \"n2-highmem-80\",\n        \"Maximum write IOPS\": 120000,\n        \"Maximum read IOPS\": 120000,\n        \"Maximum write throughput (MiBps)\": 3000,\n        \"Maximum read throughput (MiBps)\": 4000\n      },\n      {\n        \"Machine type\": \"n2-highmem-96\",\n        \"Maximum write IOPS\": 120000,\n        \"Maximum read IOPS\": 120000,\n        \"Maximum write throughput (MiBps)\": 3000,\n        \"Maximum read throughput (MiBps)\": 4000\n      },\n      {\n        \"Machine type\": \"n2-highmem-128\",\n        \"Maximum write IOPS\": 120000,\n        \"Maximum read IOPS\": 120000,\n        \"Maximum write throughput (MiBps)\": 3000,\n        \"Maximum read throughput (MiBps)\": 4000\n      },\n      {\n        \"Machine type\": \"n2-highcpu-64\",\n        \"Maximum write IOPS\": 120000,\n        \"Maximum read IOPS\": 120000,\n        \"Maximum write throughput (MiBps)\": 3000,\n        \"Maximum read throughput (MiBps)\": 4000\n      },\n      {\n        \"Machine type\": \"n2-highcpu-80\",\n        \"Maximum write IOPS\": 120000,\n        \"Maximum read IOPS\": 120000,\n        \"Maximum write throughput (MiBps)\": 3000,\n        \"Maximum read throughput (MiBps)\": 4000\n      },\n      {\n        \"Machine type\": \"n2-highcpu-96\",\n        \"Maximum write IOPS\": 120000,\n        \"Maximum read IOPS\": 120000,\n        \"Maximum write throughput (MiBps)\": 3000,\n        \"Maximum read throughput (MiBps)\": 4000\n      }\n    ]\n  },\n  \"N2D VMs\": {\n    \"pd-balanced\": [\n      {\n        \"VM vCPU count\": \"1\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 15000,\n        \"Maximum write throughput (MiBps)\": 240,\n        \"Maximum read throughput (MiBps)\": 240\n      },\n      {\n        \"VM vCPU count\": \"2-7\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 15000,\n        \"Maximum write throughput (MiBps)\": 240,\n        \"Maximum read throughput (MiBps)\": 240\n      },\n      {\n        \"VM vCPU count\": \"8-15\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 15000,\n        \"Maximum write throughput (MiBps)\": 800,\n        \"Maximum read throughput (MiBps)\": 800\n      },\n      {\n        \"VM vCPU count\": \"16-31\",\n        \"Maximum write IOPS\": 20000,\n        \"Maximum read IOPS\": 20000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"VM vCPU count\": \"32-63\",\n        \"Maximum write IOPS\": 50000,\n        \"Maximum read IOPS\": 50000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"VM vCPU count\": \"64 or more\",\n        \"Maximum write IOPS\": 80000,\n        \"Maximum read IOPS\": 80000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      }\n    ],\n    \"pd-ssd\": [\n      {\n        \"VM vCPU count\": \"1\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 15000,\n        \"Maximum write throughput (MiBps)\": 240,\n        \"Maximum read throughput (MiBps)\": 240\n      },\n      {\n        \"VM vCPU count\": \"2-7\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 15000,\n        \"Maximum write throughput (MiBps)\": 240,\n        \"Maximum read throughput (MiBps)\": 240\n      },\n      {\n        \"VM vCPU count\": \"8-15\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 15000,\n        \"Maximum write throughput (MiBps)\": 800,\n        \"Maximum read throughput (MiBps)\": 800\n      },\n      {\n        \"VM vCPU count\": \"16-31\",\n        \"Maximum write IOPS\": 25000,\n        \"Maximum read IOPS\": 25000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"VM vCPU count\": \"32-63\",\n        \"Maximum write IOPS\": 60000,\n        \"Maximum read IOPS\": 60000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"VM vCPU count\": \"64 or more\",\n        \"Maximum write IOPS\": 100000,\n        \"Maximum read IOPS\": 100000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      }\n    ],\n    \"pd-standard\": [\n      {\n        \"VM vCPU count\": \"1\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 3000,\n        \"Maximum write throughput (MiBps)\": 240,\n        \"Maximum read throughput (MiBps)\": 240\n      },\n      {\n        \"VM vCPU count\": \"2-7\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 3000,\n        \"Maximum write throughput (MiBps)\": 240,\n        \"Maximum read throughput (MiBps)\": 240\n      },\n      {\n        \"VM vCPU count\": \"8-15\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 5000,\n        \"Maximum write throughput (MiBps)\": 400,\n        \"Maximum read throughput (MiBps)\": 800\n      },\n      {\n        \"VM vCPU count\": \"16 or more\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 7500,\n        \"Maximum write throughput (MiBps)\": 400,\n        \"Maximum read throughput (MiBps)\": 1200\n      }\n    ]\n  }\n}\n"
  },
  {
    "path": "gcpdiag/runbook/gce/disk_performance_benchmark/t-family.json",
    "content": "{\n  \"T2D VMs\": {\n    \"pd-balanced\": [\n      {\n        \"VM vCPU count\": \"1\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 15000,\n        \"Maximum write throughput (MiBps)\": 204,\n        \"Maximum read throughput (MiBps)\": 240\n      },\n      {\n        \"VM vCPU count\": \"2-7\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 15000,\n        \"Maximum write throughput (MiBps)\": 240,\n        \"Maximum read throughput (MiBps)\": 240\n      },\n      {\n        \"VM vCPU count\": \"8-15\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 15000,\n        \"Maximum write throughput (MiBps)\": 800,\n        \"Maximum read throughput (MiBps)\": 800\n      },\n      {\n        \"VM vCPU count\": \"16-31\",\n        \"Maximum write IOPS\": 20000,\n        \"Maximum read IOPS\": 20000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"VM vCPU count\": \"32-60\",\n        \"Maximum write IOPS\": 50000,\n        \"Maximum read IOPS\": 50000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      }\n    ],\n    \"pd-ssd\": [\n      {\n        \"VM vCPU count\": \"1\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 15000,\n        \"Maximum write throughput (MiBps)\": 204,\n        \"Maximum read throughput (MiBps)\": 240\n      },\n      {\n        \"VM vCPU count\": \"2-7\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 15000,\n        \"Maximum write throughput (MiBps)\": 240,\n        \"Maximum read throughput (MiBps)\": 240\n      },\n      {\n        \"VM vCPU count\": \"8-15\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 15000,\n        \"Maximum write throughput (MiBps)\": 800,\n        \"Maximum read throughput (MiBps)\": 800\n      },\n      {\n        \"VM vCPU count\": \"16-31\",\n        \"Maximum write IOPS\": 25000,\n        \"Maximum read IOPS\": 25000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"VM vCPU count\": \"32-60\",\n        \"Maximum write IOPS\": 60000,\n        \"Maximum read IOPS\": 60000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      }\n    ],\n    \"pd-standard\": [\n      {\n        \"VM vCPU count\": \"1\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 3000,\n        \"Maximum write throughput (MiBps)\": 204,\n        \"Maximum read throughput (MiBps)\": 240\n      },\n      {\n        \"VM vCPU count\": \"2-7\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 3000,\n        \"Maximum write throughput (MiBps)\": 240,\n        \"Maximum read throughput (MiBps)\": 240\n      },\n      {\n        \"VM vCPU count\": \"8-15\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 5000,\n        \"Maximum write throughput (MiBps)\": 400,\n        \"Maximum read throughput (MiBps)\": 800\n      },\n      {\n        \"VM vCPU count\": \"16 or more\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 7500,\n        \"Maximum write throughput (MiBps)\": 400,\n        \"Maximum read throughput (MiBps)\": 1200\n      }\n    ]\n  },\n  \"T2A VMs\": {\n    \"pd-balanced\": [\n      {\n        \"VM vCPU count\": \"1\",\n        \"Maximum write IOPS\": 20000,\n        \"Maximum read IOPS\": 20000,\n        \"Maximum write throughput (MiBps)\": 204,\n        \"Maximum read throughput (MiBps)\": 240\n      },\n      {\n        \"VM vCPU count\": \"2-7\",\n        \"Maximum write IOPS\": 20000,\n        \"Maximum read IOPS\": 20000,\n        \"Maximum write throughput (MiBps)\": 240,\n        \"Maximum read throughput (MiBps)\": 240\n      },\n      {\n        \"VM vCPU count\": \"8-15\",\n        \"Maximum write IOPS\": 25000,\n        \"Maximum read IOPS\": 25000,\n        \"Maximum write throughput (MiBps)\": 800,\n        \"Maximum read throughput (MiBps)\": 800\n      },\n      {\n        \"VM vCPU count\": \"16-31\",\n        \"Maximum write IOPS\": 25000,\n        \"Maximum read IOPS\": 25000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"VM vCPU count\": \"32-47\",\n        \"Maximum write IOPS\": 60000,\n        \"Maximum read IOPS\": 60000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"VM vCPU count\": \"48\",\n        \"Maximum write IOPS\": 80000,\n        \"Maximum read IOPS\": 80000,\n        \"Maximum write throughput (MiBps)\": 1800,\n        \"Maximum read throughput (MiBps)\": 1800\n      }\n    ],\n    \"pd-ssd\": [\n      {\n        \"VM vCPU count\": \"1\",\n        \"Maximum write IOPS\": 20000,\n        \"Maximum read IOPS\": 20000,\n        \"Maximum write throughput (MiBps)\": 204,\n        \"Maximum read throughput (MiBps)\": 240\n      },\n      {\n        \"VM vCPU count\": \"2-7\",\n        \"Maximum write IOPS\": 20000,\n        \"Maximum read IOPS\": 20000,\n        \"Maximum write throughput (MiBps)\": 240,\n        \"Maximum read throughput (MiBps)\": 240\n      },\n      {\n        \"VM vCPU count\": \"8-15\",\n        \"Maximum write IOPS\": 25000,\n        \"Maximum read IOPS\": 25000,\n        \"Maximum write throughput (MiBps)\": 800,\n        \"Maximum read throughput (MiBps)\": 800\n      },\n      {\n        \"VM vCPU count\": \"16-31\",\n        \"Maximum write IOPS\": 25000,\n        \"Maximum read IOPS\": 25000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"VM vCPU count\": \"32-47\",\n        \"Maximum write IOPS\": 60000,\n        \"Maximum read IOPS\": 60000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"VM vCPU count\": \"48\",\n        \"Maximum write IOPS\": 80000,\n        \"Maximum read IOPS\": 80000,\n        \"Maximum write throughput (MiBps)\": 1800,\n        \"Maximum read throughput (MiBps)\": 1800\n      }\n    ],\n    \"pd-standard\": [\n      {\n        \"VM vCPU count\": \"1\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 1000,\n        \"Maximum write throughput (MiBps)\": 204,\n        \"Maximum read throughput (MiBps)\": 240\n      },\n      {\n        \"VM vCPU count\": \"2-3\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 2400,\n        \"Maximum write throughput (MiBps)\": 240,\n        \"Maximum read throughput (MiBps)\": 240\n      },\n      {\n        \"VM vCPU count\": \"4-7\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 3000,\n        \"Maximum write throughput (MiBps)\": 240,\n        \"Maximum read throughput (MiBps)\": 240\n      },\n      {\n        \"VM vCPU count\": \"8-15\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 5000,\n        \"Maximum write throughput (MiBps)\": 400,\n        \"Maximum read throughput (MiBps)\": 800\n      },\n      {\n        \"VM vCPU count\": \"16 or more\",\n        \"Maximum write IOPS\": 15000,\n        \"Maximum read IOPS\": 7500,\n        \"Maximum write throughput (MiBps)\": 400,\n        \"Maximum read throughput (MiBps)\": 1200\n      }\n    ]\n  }\n}\n"
  },
  {
    "path": "gcpdiag/runbook/gce/disk_performance_benchmark/z-family.json",
    "content": "{\n  \"Z3 VMs\": {\n    \"pd-balanced\": [\n      {\n        \"VM vCPU count\": \"88\",\n        \"Maximum write IOPS\": 80000,\n        \"Maximum read IOPS\": 80000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"VM vCPU count\": \"176\",\n        \"Maximum write IOPS\": 80000,\n        \"Maximum read IOPS\": 80000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      }\n    ],\n    \"pd-ssd\": [\n      {\n        \"VM vCPU count\": \"88\",\n        \"Maximum write IOPS\": 100000,\n        \"Maximum read IOPS\": 100000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      },\n      {\n        \"VM vCPU count\": \"176\",\n        \"Maximum write IOPS\": 100000,\n        \"Maximum read IOPS\": 100000,\n        \"Maximum write throughput (MiBps)\": 1200,\n        \"Maximum read throughput (MiBps)\": 1200\n      }\n    ]\n  }\n}\n"
  },
  {
    "path": "gcpdiag/runbook/gce/flags.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Parameters applicable to GCE runbooks.\"\"\"\n# pylint: disable=wildcard-import, unused-wildcard-import\nfrom gcpdiag.runbook.gcp.flags import *\nfrom gcpdiag.runbook.iam.flags import *\n\nLOCAL_USER = 'local_user'\nTUNNEL_THROUGH_IAP = 'tunnel_through_iap'\nCHECK_OS_LOGIN = 'check_os_login'\nPOSIX_USER = 'posix_user'\nACCESS_METHOD = 'access_method'\nINSTANCE_CREATED = 'instance_created'\nCHECK_ZONE_SEPARATION_POLICY = 'check_zone_separation_policy'\nOPERATION_TYPE = 'operation_type'\n"
  },
  {
    "path": "gcpdiag/runbook/gce/generalized_steps.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Contains Reusable Steps for GCE related Diagnostic Trees\"\"\"\n\nimport logging\nimport math\nimport operator as operator_mod\nimport re\nfrom datetime import datetime\nfrom typing import Any, List, Optional, Set\n\nimport googleapiclient.errors\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import runbook, utils\nfrom gcpdiag.queries import crm, gce, logs, monitoring\nfrom gcpdiag.runbook import exceptions as runbook_exceptions\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook import util as runbook_util\nfrom gcpdiag.runbook.gce import constants, util\nfrom gcpdiag.runbook.gcp import flags\nfrom gcpdiag.runbook.iam import flags as iam_flags\nfrom gcpdiag.runbook.iam import generalized_steps as iam_gs\nfrom gcpdiag.runbook.logs import generalized_steps as logs_gs\n\nUTILIZATION_THRESHOLD = 0.95\n\n\ndef _get_operator_fn(op_str: str):\n  \"\"\"Maps an operator string to a function from the operator module.\"\"\"\n  operators = {\n      'eq': operator_mod.eq,\n      'ne': operator_mod.ne,\n      'lt': operator_mod.lt,\n      'le': operator_mod.le,\n      'gt': operator_mod.gt,\n      'ge': operator_mod.ge,\n  }\n  if op_str not in operators:\n    raise ValueError(\n        f\"Unsupported operator: '{op_str}'. Supported operators are: \"\n        f\"{list(operators.keys()) + ['contains', 'matches']}\")\n  return operators[op_str]\n\n\ndef _resolve_expected_value(value_str: str) -> Any:\n  \"\"\"Resolves expected value, handling 'ref:' prefix.\"\"\"\n  if value_str.startswith('ref:'):\n    const_name = value_str[4:]\n    resolved_value = getattr(constants, const_name, None)\n    if resolved_value is None:\n      raise ValueError(f\"Could not resolve constant reference: '{value_str}'. \"\n                       f\"Ensure '{const_name}' is defined in gce/constants.py.\")\n    return resolved_value\n  return value_str\n\n\ndef _check_condition(actual_value: Any, expected_value: Any,\n                     op_str: str) -> bool:\n  \"\"\"Compares actual and expected values using the specified operator.\"\"\"\n  # Handle collection/regex operators first\n  if op_str == 'contains':\n    if hasattr(actual_value, '__contains__'):\n      return expected_value in actual_value\n    else:\n      return False\n  if op_str == 'matches':\n    try:\n      if isinstance(actual_value, (list, set, tuple)):\n        return any(\n            re.search(str(expected_value), str(item)) for item in actual_value)\n      else:\n        return bool(re.search(str(expected_value), str(actual_value)))\n    except re.error as e:\n      raise ValueError(\n          f\"Invalid regex pattern provided in expected_value: '{expected_value}'\"\n      ) from e\n\n  op_fn = _get_operator_fn(op_str)\n  try:\n    # Attempt to convert to bool if expected is bool\n    if isinstance(expected_value, bool):\n      actual_value = op.BOOL_VALUES.get(str(actual_value).lower())\n    # Attempt to convert to numeric if expected is numeric\n    elif isinstance(expected_value, (int, float)):\n      try:\n        actual_value = type(expected_value)(actual_value)\n      except (ValueError, TypeError):\n        pass  # If conversion fails, compare as is\n    return op_fn(actual_value, expected_value)\n  except TypeError:\n    # If types are incompatible for comparison, consider it a mismatch\n    return False\n\n\nclass HighVmMemoryUtilization(runbook.Step):\n  \"\"\"Diagnoses high memory utilization issues in a Compute Engine VM.\n\n  This step evaluates memory usage through available monitoring data or, as a fallback, scans serial\n  logs for Out of Memory (OOM) indicators. It distinguishes between VMs which has exported metrics\n  and those without, and employs a different strategy for 'e2' machine types to accurately assess\n  memory utilization.\n  \"\"\"\n  template = 'vm_performance::high_memory_utilization'\n\n  project_id: Optional[str] = None\n  zone: Optional[str] = None\n  instance_name: Optional[str] = None\n  vm: Optional[gce.Instance] = None\n  serial_console_file = None\n\n  # Typical Memory exhaustion logs in serial console.\n\n  def execute(self):\n    \"\"\"Verify VM memory utilization is within optimal levels.\"\"\"\n\n    if self.vm:\n      vm = self.vm\n      self.project_id = vm.project_id\n      self.zone = vm.zone\n      self.instance_name = vm.name\n    else:\n      try:\n        util.ensure_instance_resolved()\n      except (\n          runbook_exceptions.FailedStepError,\n          runbook_exceptions.MissingParameterError,\n      ) as e:\n        project = crm.get_project(op.get(flags.PROJECT_ID))\n        op.add_skipped(project, reason=str(e))\n        return\n      self.project_id = op.get(flags.PROJECT_ID)\n      self.zone = op.get(flags.ZONE)\n      self.instance_name = op.get(flags.INSTANCE_NAME) or op.get(\n          flags.INSTANCE_ID)\n      vm = gce.get_instance(\n          project_id=self.project_id,\n          zone=self.zone,\n          instance_name=self.instance_name,\n      )\n\n    if not vm:\n      op.add_skipped(\n          None,\n          reason=(f'VM instance {self.instance_name} not found in project'\n                  f' {self.project_id} zone {self.zone}'),\n      )\n      return\n\n    start_formatted_string = op.get(\n        flags.START_TIME).strftime('%Y/%m/%d %H:%M:%S')\n    end_formatted_string = op.get(flags.END_TIME).strftime('%Y/%m/%d %H:%M:%S')\n    within_str = f'within d\\'{start_formatted_string}\\', d\\'{end_formatted_string}\\''\n\n    mark_no_ops_agent = False\n\n    mem_usage_metrics = None\n\n    if util.ops_agent_installed(self.project_id, vm.id):\n      mem_usage_metrics = monitoring.query(\n          self.project_id, \"\"\"\n          fetch gce_instance\n            | metric 'agent.googleapis.com/memory/percent_used'\n            | filter (resource.instance_id == '{}')\n            | group_by [resource.instance_id], 3m, [percent_used: mean(value.percent_used)]\n            | filter (cast_units(percent_used,\"\")/100) >= {}\n            | {}\n          \"\"\".format(vm.id, UTILIZATION_THRESHOLD, within_str))\n    elif 'e2' in vm.machine_type():\n      mem_usage_metrics = monitoring.query(\n          self.project_id, \"\"\"\n              fetch gce_instance\n                | {{ metric 'compute.googleapis.com/instance/memory/balloon/ram_used'\n                ; metric 'compute.googleapis.com/instance/memory/balloon/ram_size' }}\n                | outer_join 0\n                | div\n                | filter (resource.instance_id == '{}')\n                | group_by [resource.instance_id], 3m, [ram_left: mean(val())]\n                | filter ram_left >= {}\n                | {}\n              \"\"\".format(vm.id, UTILIZATION_THRESHOLD, within_str))\n    else:\n      mark_no_ops_agent = True\n      op.info(\n          f'VM instance {vm.id} not export memory metrics. Falling back on serial logs'\n      )\n\n    if mem_usage_metrics:\n      op.add_failed(vm,\n                    reason=op.prep_msg(op.FAILURE_REASON,\n                                       full_resource_path=vm.full_path),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n    elif mark_no_ops_agent:\n      op.add_skipped(vm,\n                     reason=op.prep_msg(op.SKIPPED_REASON,\n                                        full_resource_path=vm.full_path))\n    else:\n      op.add_ok(vm,\n                reason=op.prep_msg(op.SUCCESS_REASON,\n                                   full_resource_path=vm.full_path))\n\n    # Checking for OOM related errors\n    oom_errors = VmSerialLogsCheck()\n    oom_errors.vm = vm\n    oom_errors.serial_console_file = self.serial_console_file\n    oom_errors.template = 'vm_performance::high_memory_usage_logs'\n    oom_errors.negative_pattern = constants.OOM_PATTERNS\n    self.add_child(oom_errors)\n\n\nclass HighVmDiskUtilization(runbook.Step):\n  \"\"\"Assesses disk utilization on a VM, aiming to identify high usage that could impact performance.\n\n  This step leverages monitoring data if the Ops Agent is exporting disk usage metrics.\n  Alternatively, it scans the VM's serial port output for common disk space error messages.\n  This approach ensures comprehensive coverage across different scenarios,\n  including VMs without metrics data.\n  \"\"\"\n  template = 'vm_performance::high_disk_utilization'\n\n  project_id: Optional[str] = None\n  zone: Optional[str] = None\n  instance_name: Optional[str] = None\n  vm: Optional[gce.Instance] = None\n  serial_console_file: str = ''\n\n  def execute(self):\n    \"\"\"Verify VM's Boot disk space utilization is within optimal levels.\"\"\"\n\n    if self.vm:\n      vm = self.vm\n      self.project_id = vm.project_id\n      self.zone = vm.zone\n      self.instance_name = vm.name\n    else:\n      try:\n        util.ensure_instance_resolved()\n      except (\n          runbook_exceptions.FailedStepError,\n          runbook_exceptions.MissingParameterError,\n      ) as e:\n        project = crm.get_project(op.get(flags.PROJECT_ID))\n        op.add_skipped(project, reason=str(e))\n        return\n      self.project_id = op.get(flags.PROJECT_ID)\n      self.zone = op.get(flags.ZONE)\n      self.instance_name = op.get(flags.INSTANCE_NAME) or op.get(\n          flags.INSTANCE_ID)\n      vm = gce.get_instance(\n          project_id=self.project_id,\n          zone=self.zone,\n          instance_name=self.instance_name,\n      )\n\n    if not vm:\n      op.add_skipped(\n          None,\n          reason=(f'VM instance {self.instance_name} not found in project'\n                  f' {self.project_id} zone {self.zone}'),\n      )\n      return\n\n    start_formatted_string = op.get(\n        flags.START_TIME).strftime('%Y/%m/%d %H:%M:%S')\n    end_formatted_string = op.get(flags.END_TIME).strftime('%Y/%m/%d %H:%M:%S')\n    within_str = (\n        f\"within d'{start_formatted_string}', d'{end_formatted_string}'\")\n\n    mark_no_ops_agent = False\n\n    disk_usage_metrics = None\n\n    if util.ops_agent_installed(self.project_id, vm.id):\n      disk_usage_metrics = monitoring.query(\n          self.project_id, \"\"\"\n          fetch gce_instance\n            | metric 'agent.googleapis.com/disk/percent_used'\n            | filter (resource.instance_id == '{}' && metric.device !~ '/dev/loop.*' && metric.state == 'used')\n            | group_by [resource.instance_id], 3m, [percent_used: mean(value.percent_used)]\n            | filter (cast_units(percent_used,\"\")/100) >= {}\n            | {}\n          \"\"\".format(vm.id, UTILIZATION_THRESHOLD, within_str))\n      op.add_metadata('Disk Utilization Threshold (fraction of 1)',\n                      UTILIZATION_THRESHOLD)\n    else:\n      mark_no_ops_agent = True\n\n    if disk_usage_metrics:\n      op.add_failed(vm,\n                    reason=op.prep_msg(op.FAILURE_REASON),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION,\n                                            full_resource_path=vm.full_path))\n    elif mark_no_ops_agent:\n      op.add_skipped(vm,\n                     reason=op.prep_msg(op.SKIPPED_REASON,\n                                        full_resource_path=vm.full_path))\n      # Fallback to check for filesystem utilization related messages in Serial logs\n      fs_util = VmSerialLogsCheck()\n      fs_util.vm = vm\n      fs_util.serial_console_file = self.serial_console_file\n      fs_util.template = 'vm_performance::high_disk_utilization_error'\n      fs_util.negative_pattern = constants.DISK_EXHAUSTION_ERRORS\n      self.add_child(fs_util)\n    else:\n      op.add_ok(vm,\n                reason=op.prep_msg(op.SUCCESS_REASON,\n                                   full_resource_path=vm.full_path))\n\n\nclass HighVmCpuUtilization(runbook.Step):\n  \"\"\"Evaluates the CPU of a VM for high utilization that might indicate performance issues.\n\n  This step determines whether the CPU utilization of the VM exceeds a predefined threshold,\n  indicating potential performance degradation. It utilizes metrics from the Ops Agent if installed,\n  or hypervisor-visible metrics as a fallback, to accurately assess CPU performance and identify any\n  issues requiring attention.\n  \"\"\"\n\n  template = 'vm_performance::high_cpu_utilization'\n\n  project_id: Optional[str] = None\n  zone: Optional[str] = None\n  instance_name: Optional[str] = None\n  vm: Optional[gce.Instance] = None\n\n  def execute(self):\n    \"\"\"Verify VM CPU utilization is within optimal levels\"\"\"\n    if self.vm:\n      vm = self.vm\n      self.project_id = vm.project_id\n      self.zone = vm.zone\n      self.instance_name = vm.name\n    else:\n      try:\n        util.ensure_instance_resolved()\n      except (\n          runbook_exceptions.FailedStepError,\n          runbook_exceptions.MissingParameterError,\n      ) as e:\n        project = crm.get_project(op.get(flags.PROJECT_ID))\n        op.add_skipped(project, reason=str(e))\n        return\n      self.project_id = op.get(flags.PROJECT_ID)\n      self.zone = op.get(flags.ZONE)\n      self.instance_name = op.get(flags.INSTANCE_NAME) or op.get(\n          flags.INSTANCE_ID)\n      vm = gce.get_instance(\n          project_id=self.project_id,\n          zone=self.zone,\n          instance_name=self.instance_name,\n      )\n\n    if not vm:\n      op.add_skipped(\n          None,\n          reason=(f'VM instance {self.instance_name} not found in project'\n                  f' {self.project_id} zone {self.zone}'),\n      )\n      return\n\n    start_formatted_string = op.get(\n        flags.START_TIME).strftime('%Y/%m/%d %H:%M:%S')\n    end_formatted_string = op.get(flags.END_TIME).strftime('%Y/%m/%d %H:%M:%S')\n    within_str = (\n        f\"within d'{start_formatted_string}', d'{end_formatted_string}'\")\n\n    cpu_usage_metrics = None\n\n    if util.ops_agent_installed(self.project_id, vm.id):\n      cpu_usage_metrics = monitoring.query(\n          self.project_id, \"\"\"\n          fetch gce_instance\n            | metric 'agent.googleapis.com/cpu/utilization'\n            | filter (resource.instance_id == '{}')\n            | group_by [resource.instance_id], 3m, [value_utilization_mean: mean(value.utilization)]\n            | filter (cast_units(value_utilization_mean,\"\")/100) >= {}\n            | {}\n          \"\"\".format(vm.id, UTILIZATION_THRESHOLD, within_str))\n    else:\n      # use CPU utilization visible to the hypervisor\n      cpu_usage_metrics = monitoring.query(\n          self.project_id, \"\"\"\n            fetch gce_instance\n              | metric 'compute.googleapis.com/instance/cpu/utilization'\n              | filter (resource.instance_id == '{}')\n              | group_by [resource.instance_id], 3m, [value_utilization_max: max(value.utilization)]\n              | filter value_utilization_max >= {}\n              | {}\n            \"\"\".format(vm.id, UTILIZATION_THRESHOLD, within_str))\n    # Get Performance issues corrected.\n    if cpu_usage_metrics:\n      op.add_failed(vm,\n                    reason=op.prep_msg(op.FAILURE_REASON,\n                                       full_resource_path=vm.full_path),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION,\n                                            full_resource_path=vm.full_path))\n    else:\n      op.add_ok(vm,\n                reason=op.prep_msg(op.SUCCESS_REASON,\n                                   full_resource_path=vm.full_path))\n\n\nclass VmLifecycleState(runbook.Step):\n  \"\"\"Validates that a specified VM is in the 'RUNNING' state.\n\n  This step is crucial for confirming the VM's availability and operational\n  readiness. It checks the VM's lifecycle state and reports success if the VM\n  is running or fails the check if the VM is in any other state, providing\n  detailed status information for troubleshooting.\n  \"\"\"\n\n  template = 'vm_attributes::running'\n\n  project_id: Optional[str] = None\n  zone: Optional[str] = None\n  instance_name: Optional[str] = None\n  vm: Optional[gce.Instance] = None\n  expected_lifecycle_status: str\n\n  def execute(self):\n    \"\"\"Verify GCE Instance is in the {expected_lifecycle_status} state.\"\"\"\n    if self.vm:\n      vm = self.vm\n    else:\n      try:\n        util.ensure_instance_resolved()\n      except (\n          runbook_exceptions.FailedStepError,\n          runbook_exceptions.MissingParameterError,\n      ) as e:\n        project = crm.get_project(op.get(flags.PROJECT_ID))\n        op.add_skipped(project, reason=str(e))\n        return\n      self.project_id = op.get(flags.PROJECT_ID)\n      self.zone = op.get(flags.ZONE)\n      self.instance_name = op.get(flags.INSTANCE_NAME) or op.get(\n          flags.INSTANCE_ID)\n      vm = gce.get_instance(project_id=self.project_id,\n                            zone=self.zone,\n                            instance_name=self.instance_name)\n    if not vm:\n      op.add_skipped(\n          None,\n          reason=(f'VM instance {self.instance_name} not found in project'\n                  f' {self.project_id} zone {self.zone}'),\n      )\n      return\n\n    if vm.status == self.expected_lifecycle_status:\n      op.add_ok(vm,\n                reason=op.prep_msg(op.SUCCESS_REASON,\n                                   full_resource_path=vm.full_path,\n                                   status=vm.status))\n    else:\n      op.add_failed(vm,\n                    reason=op.prep_msg(op.FAILURE_REASON,\n                                       full_resource_path=vm.full_path,\n                                       status=vm.status),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION,\n                                            full_resource_path=vm.full_path,\n                                            status=vm.status))\n\n\nclass VmSerialLogsCheck(runbook.Step):\n  \"\"\"Searches for predefined good or bad patterns in the serial logs of a GCE Instance.\n\n  This diagnostic step checks the VM's serial logs for patterns that are indicative of successful\n  operations ('GOOD_PATTERN') or potential issues ('BAD_PATTERN'). Based on the presence of these\n  patterns, the step categorizes the VM's status as 'OK', 'Failed', or 'Uncertain'.\n  \"\"\"\n\n  project_id: Optional[str] = None\n  zone: Optional[str] = None\n  instance_name: Optional[str] = None\n  vm: Optional[gce.Instance] = None\n  serial_console_file = None\n\n  template = 'vm_serial_log::default'\n\n  # Typical logs of a fully booted windows VM\n  positive_pattern: List\n  positive_pattern_operator = 'OR'\n  negative_pattern: List\n  negative_pattern_operator = 'OR'\n\n  def execute(self):\n    \"\"\"Analyzing serial logs for predefined patterns.\"\"\"\n\n    # check for parameter overrides for patterns and template\n    if op.get('template'):\n      self.template = op.get('template')\n    if op.get('positive_patterns'):\n      self.positive_pattern = runbook_util.resolve_patterns(\n          op.get('positive_patterns'), constants)\n    if op.get('negative_patterns'):\n      self.negative_pattern = runbook_util.resolve_patterns(\n          op.get('negative_patterns'), constants)\n\n    if self.vm:\n      vm = self.vm\n      self.project_id = vm.project_id\n      self.zone = vm.zone\n      self.instance_name = vm.name\n    else:\n      try:\n        util.ensure_instance_resolved()\n      except (\n          runbook_exceptions.FailedStepError,\n          runbook_exceptions.MissingParameterError,\n      ) as e:\n        project = crm.get_project(op.get(flags.PROJECT_ID))\n        op.add_skipped(project, reason=str(e))\n        return\n      self.project_id = op.get(flags.PROJECT_ID)\n      self.zone = op.get(flags.ZONE)\n      self.instance_name = op.get(flags.INSTANCE_NAME) or op.get(\n          flags.INSTANCE_ID)\n      vm = gce.get_instance(\n          project_id=self.project_id,\n          zone=self.zone,\n          instance_name=self.instance_name,\n      )\n\n    if not vm:\n      op.add_skipped(\n          None,\n          reason=(f'VM instance {self.instance_name} not found in project'\n                  f' {self.project_id} zone {self.zone}'),\n      )\n      return\n\n    # All kernel failures.\n    good_pattern_detected = False\n    bad_pattern_detected = False\n    serial_log_file_content = []\n    instance_serial_logs = None\n\n    if self.serial_console_file:\n      for files in self.serial_console_file.split(','):\n        with open(files, encoding='utf-8') as file:\n          serial_log_file_content = file.readlines()\n        serial_log_file_content = serial_log_file_content + serial_log_file_content\n    else:\n      instance_serial_logs = gce.get_instance_serial_port_output(\n          project_id=self.project_id,\n          zone=self.zone,\n          instance_name=self.instance_name)\n\n    if instance_serial_logs or serial_log_file_content:\n      instance_serial_log = instance_serial_logs.contents if \\\n        instance_serial_logs else serial_log_file_content\n\n      if hasattr(self, 'positive_pattern'):\n        good_pattern_detected = util.search_pattern_in_serial_logs(\n            patterns=self.positive_pattern,\n            contents=instance_serial_log,\n            operator=self.positive_pattern_operator)\n        op.add_metadata('Positive patterns searched in serial logs',\n                        self.positive_pattern)\n        if good_pattern_detected:\n          op.add_ok(vm,\n                    reason=op.prep_msg(\n                        op.SUCCESS_REASON,\n                        full_resource_path=vm.full_path,\n                        start_time=op.get(flags.START_TIME),\n                        end_time=op.get(flags.END_TIME),\n                    ))\n      if hasattr(self, 'negative_pattern'):\n        # Check for bad patterns\n        bad_pattern_detected = util.search_pattern_in_serial_logs(\n            patterns=self.negative_pattern,\n            contents=instance_serial_log,\n            operator=self.negative_pattern_operator)\n        op.add_metadata('Negative patterns searched in serial logs',\n                        self.negative_pattern)\n\n        if bad_pattern_detected:\n          op.add_failed(vm,\n                        reason=op.prep_msg(op.FAILURE_REASON,\n                                           start_time=op.get(flags.START_TIME),\n                                           end_time=op.get(flags.END_TIME),\n                                           full_resource_path=vm.full_path,\n                                           instance_name=vm.name),\n                        remediation=op.prep_msg(\n                            op.FAILURE_REMEDIATION,\n                            full_resource_path=vm.full_path,\n                            start_time=op.get(flags.START_TIME),\n                            end_time=op.get(flags.END_TIME)))\n\n      if hasattr(self, 'positive_pattern') and not hasattr(\n          self, 'negative_pattern') and good_pattern_detected is False:\n        op.add_uncertain(\n            vm,\n            reason=op.prep_msg(op.UNCERTAIN_REASON,\n                               full_resource_path=vm.full_path,\n                               start_time=op.get(flags.START_TIME),\n                               end_time=op.get(flags.END_TIME)),\n            # uncertain uses the same remediation steps as failed\n            remediation=op.prep_msg(op.FAILURE_REMEDIATION,\n                                    full_resource_path=vm.full_path,\n                                    start_time=op.get(flags.START_TIME),\n                                    end_time=op.get(flags.END_TIME)))\n      elif hasattr(self, 'negative_pattern') and not hasattr(\n          self, 'positive_pattern') and bad_pattern_detected is False:\n        op.add_uncertain(\n            vm,\n            reason=op.prep_msg(op.UNCERTAIN_REASON,\n                               full_resource_path=vm.full_path),\n            # uncertain uses the same remediation steps as failed\n            remediation=op.prep_msg(op.FAILURE_REMEDIATION,\n                                    full_resource_path=vm.full_path,\n                                    start_time=op.get(flags.START_TIME),\n                                    end_time=op.get(flags.END_TIME)))\n      elif (hasattr(self, 'positive_pattern') and\n            good_pattern_detected is False) and (hasattr(\n                self, 'negative_pattern') and bad_pattern_detected is False):\n        op.add_uncertain(\n            vm,\n            reason=op.prep_msg(op.UNCERTAIN_REASON,\n                               full_resource_path=vm.full_path,\n                               start_time=op.get(flags.START_TIME),\n                               end_time=op.get(flags.END_TIME)),\n            # uncertain uses the same remediation steps as failed\n            remediation=op.prep_msg(op.FAILURE_REMEDIATION,\n                                    full_resource_path=vm.full_path,\n                                    start_time=op.get(flags.START_TIME),\n                                    end_time=op.get(flags.END_TIME)))\n    else:\n      op.add_skipped(None, reason=op.prep_msg(op.SKIPPED_REASON))\n\n\nclass VmMetadataCheck(runbook.Step):\n  \"\"\"Validates a specific boolean metadata key-value pair on a GCE Instance instance.\n\n  This step checks if the VM's metadata contains a specified key with the expected boolean value,\n  facilitating configuration verification and compliance checks.\"\"\"\n\n  template: str = 'vm_metadata::default'\n\n  project_id: Optional[str] = None\n  zone: Optional[str] = None\n  instance_name: Optional[str] = None\n  vm: Optional[gce.Instance] = None\n  # key to inspect\n  metadata_key: str\n  # desired value.\n  expected_value: Any\n  # the expected_metadata_value type\n  # default is bool\n  expected_value_type: type = bool\n\n  def is_expected_md_value(self, actual_value):\n    \"\"\"\n    Compare a VM's metadata value with an expected value, converting types as necessary.\n\n    Parameters:\n    - vm: The VM object containing metadata.\n    - actual_value: The actual value present on resource.\n\n    Returns:\n    - True if the actual metadata value matches the expected value, False otherwise.\n    \"\"\"\n    # Determine the type of the expected value\n    if isinstance(self.expected_value, bool):\n      # Convert the string metadata value to a bool for comparison\n      return op.BOOL_VALUES.get(str(actual_value).lower(),\n                                False) == self.expected_value\n    elif isinstance(self.expected_value, str):\n      # Directly compare string values\n      return actual_value == self.expected_value\n    elif isinstance(self.expected_value, (int, float)):\n      # use isclose math to compare int and float\n      return math.isclose(actual_value, self.expected_value)\n    # Note: Implement other datatype checks if required.\n    else:\n      # Handle other types or raise an error\n      logging.error(\n          'Error while processing %s: Unsupported expected value type: %s',\n          self.__class__.__name__, type(self.expected_value))\n      raise ValueError('Unsupported Type')\n\n  def execute(self):\n    \"\"\"Verify VM metadata value.\"\"\"\n    metadata_key_str = op.get('metadata_key') or getattr(\n        self, 'metadata_key', None)\n    expected_value_str = op.get('expected_value') or getattr(\n        self, 'expected_value', None)\n\n    if not metadata_key_str:\n      raise runbook_exceptions.MissingParameterError(\n          \"'metadata_key' is required for this step.\")\n    if expected_value_str is None:\n      raise runbook_exceptions.MissingParameterError(\n          \"'expected_value' is required for this step.\")\n\n    if metadata_key_str.startswith('ref:'):\n      self.metadata_key = getattr(constants, metadata_key_str[4:])\n    else:\n      self.metadata_key = metadata_key_str\n\n    try:\n      resolved_expected_value = _resolve_expected_value(str(expected_value_str))\n      # convert to bool if it looks like one.\n      if str(resolved_expected_value).lower() in op.BOOL_VALUES:\n        self.expected_value = op.BOOL_VALUES[str(\n            resolved_expected_value).lower()]\n      else:\n        self.expected_value = resolved_expected_value\n      self.expected_value_type = type(self.expected_value)\n    except ValueError as e:\n      raise runbook_exceptions.InvalidParameterError(str(e)) from e\n\n    if self.vm:\n      vm = self.vm\n      self.project_id = vm.project_id\n      self.zone = vm.zone\n      self.instance_name = vm.name\n    else:\n      try:\n        util.ensure_instance_resolved()\n      except (\n          runbook_exceptions.FailedStepError,\n          runbook_exceptions.MissingParameterError,\n      ) as e:\n        project = crm.get_project(op.get(flags.PROJECT_ID))\n        op.add_skipped(project, reason=str(e))\n        return\n      self.project_id = op.get(flags.PROJECT_ID)\n      self.zone = op.get(flags.ZONE)\n      self.instance_name = op.get(flags.INSTANCE_NAME) or op.get(\n          flags.INSTANCE_ID)\n      try:\n        vm = gce.get_instance(project_id=self.project_id,\n                              zone=self.zone,\n                              instance_name=self.instance_name)\n      except googleapiclient.errors.HttpError as err:\n        if err.resp.status == 404:\n          op.add_skipped(\n              None,\n              reason=(f'VM instance {self.instance_name} not found in project'\n                      f' {self.project_id} zone {self.zone}'),\n          )\n          return\n        else:\n          raise utils.GcpApiError(err) from err\n    if not vm:\n      op.add_skipped(\n          None,\n          reason=(f'VM instance {self.instance_name} not found in project'\n                  f' {self.project_id} zone {self.zone}'),\n      )\n      return\n\n    if self.is_expected_md_value(vm.get_metadata(self.metadata_key)):\n      op.add_ok(\n          vm,\n          op.prep_msg(op.SUCCESS_REASON,\n                      metadata_key=self.metadata_key,\n                      expected_value=self.expected_value,\n                      expected_value_type=self.expected_value_type))\n    else:\n      op.add_failed(\n          vm,\n          reason=op.prep_msg(op.FAILURE_REASON,\n                             metadata_key=self.metadata_key,\n                             expected_value=self.expected_value,\n                             expected_value_type=self.expected_value_type),\n          remediation=op.prep_msg(op.FAILURE_REMEDIATION,\n                                  metadata_key=self.metadata_key,\n                                  expected_value=self.expected_value,\n                                  expected_value_type=self.expected_value_type))\n\n\nclass GceVpcConnectivityCheck(runbook.Step):\n  \"\"\"Checks if ingress or egress traffic is allowed to a GCE Instance from a specified source IP.\n\n  Evaluates VPC firewall rules to verify if a GCE Instance permits ingress or egress traffic from a\n  designated source IP through a specified port and protocol.\n  \"\"\"\n  project_id: Optional[str] = None\n  zone: Optional[str] = None\n  instance_name: Optional[str] = None\n  vm: Optional[gce.Instance] = None\n  src_ip: str\n  protocol_type: str\n  port: int\n\n  traffic = None\n\n  def execute(self):\n    \"\"\"Evaluating VPC network traffic rules.\"\"\"\n    if self.vm:\n      vm = self.vm\n    else:\n      try:\n        util.ensure_instance_resolved()\n      except (\n          runbook_exceptions.FailedStepError,\n          runbook_exceptions.MissingParameterError,\n      ) as e:\n        project = crm.get_project(op.get(flags.PROJECT_ID))\n        op.add_skipped(project, reason=str(e))\n        return\n      self.project_id = op.get(flags.PROJECT_ID)\n      self.zone = op.get(flags.ZONE)\n      self.instance_name = op.get(flags.INSTANCE_NAME) or op.get(\n          flags.INSTANCE_ID)\n      vm = gce.get_instance(\n          project_id=self.project_id,\n          zone=self.zone,\n          instance_name=self.instance_name,\n      )\n    if not vm:\n      op.add_skipped(\n          None,\n          reason=(f'VM instance {self.instance_name} not found in project'\n                  f' {self.project_id} zone {self.zone}'),\n      )\n      return\n\n    result = None\n    if self.traffic == 'ingress':\n      result = vm.network.firewall.check_connectivity_ingress(\n          src_ip=self.src_ip,\n          ip_protocol=self.protocol_type,\n          port=self.port,\n          target_service_account=vm.service_account,\n          target_tags=vm.tags)\n    if self.traffic == 'egress':\n      result = vm.network.firewall.check_connectivity_egress(\n          src_ip=vm.network_ips,\n          ip_protocol=self.protocol_type,\n          port=self.port,\n          target_service_account=vm.service_account,\n          target_tags=vm.tags)\n    if result.action == 'deny':\n      op.add_failed(vm,\n                    reason=op.prep_msg(op.FAILURE_REASON,\n                                       address=self.src_ip,\n                                       protocol=self.protocol_type,\n                                       port=self.port,\n                                       name=vm.name,\n                                       result=result.matched_by_str),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n    elif result.action == 'allow':\n      op.add_ok(\n          vm,\n          op.prep_msg(op.SUCCESS_REASON,\n                      address=self.src_ip,\n                      protocol=self.protocol_type,\n                      port=self.port,\n                      name=vm.name,\n                      result=result.matched_by_str))\n\n\nclass VmScope(runbook.Step):\n  \"\"\"Verifies that a GCE Instance has at least one of a list of required access scopes\n\n  Confirms that the VM has the necessary OAuth scope\n  https://cloud.google.com/compute/docs/access/service-accounts#accesscopesiam\n\n  Attributes\n   - Use `access_scopes` to specify eligible access scopes\n   - Set `require_all` to True if the VM should have all the required access. False (default)\n     means to check if it has at least one of the required access scopes\n  \"\"\"\n\n  template = 'vm_attributes::access_scope'\n  access_scopes: Set = set()\n  require_all = False\n  project_id: Optional[str] = None\n  zone: Optional[str] = None\n  instance_name: Optional[str] = None\n  vm: Optional[gce.Instance] = None\n\n  def execute(self):\n    \"\"\"Verify GCE Instance access scope\"\"\"\n    if self.vm:\n      instance = self.vm\n    else:\n      try:\n        util.ensure_instance_resolved()\n      except (\n          runbook_exceptions.FailedStepError,\n          runbook_exceptions.MissingParameterError,\n      ) as e:\n        project = crm.get_project(op.get(flags.PROJECT_ID))\n        op.add_skipped(project, reason=str(e))\n        return\n      self.project_id = op.get(flags.PROJECT_ID)\n      self.zone = op.get(flags.ZONE)\n      self.instance_name = op.get(flags.INSTANCE_NAME) or op.get(\n          flags.INSTANCE_ID)\n      instance = gce.get_instance(\n          project_id=self.project_id,\n          zone=self.zone,\n          instance_name=self.instance_name,\n      )\n    if not instance:\n      op.add_skipped(\n          None,\n          reason=(f'VM instance {self.instance_name} not found in project'\n                  f' {self.project_id} zone {self.zone}'),\n      )\n      return\n\n    present_access_scopes = set()\n    missing_access_scopes = set()\n    has_item = False\n    for scope in self.access_scopes:\n      if scope in instance.access_scopes:\n        has_item = True\n\n      if has_item:\n        present_access_scopes.add(scope)\n      else:\n        missing_access_scopes.add(scope)\n      # Reset to false after tracking\n      has_item = False\n\n    all_present = not missing_access_scopes\n    any_present = bool(present_access_scopes)\n    outcome = all_present if self.require_all else any_present\n\n    if outcome:\n      op.add_ok(resource=instance,\n                reason=op.prep_msg(op.SUCCESS_REASON,\n                                   full_resource_path=instance.full_path,\n                                   present_access_scopes=', '.join(\n                                       sorted(present_access_scopes))))\n    else:\n      op.add_failed(\n          resource=instance,\n          reason=op.prep_msg(\n              op.FAILURE_REASON,\n              full_resource_path=instance.full_path,\n              required_access_scope=', '.join(sorted(self.access_scopes)),\n              missing_access_scopes=', '.join(sorted(missing_access_scopes))),\n          remediation=op.prep_msg(\n              op.FAILURE_REMEDIATION,\n              full_resource_path=instance.full_path,\n              required_access_scope=', '.join(sorted(self.access_scopes)),\n              present_access_scopes=', '.join(sorted(present_access_scopes)),\n              missing_access_scopes=', '.join(sorted(missing_access_scopes))))\n\n\nclass VmHasOpsAgent(runbook.Step):\n  \"\"\"Verifies that a GCE Instance has at ops agent installed and\n\n  You can check for sub agents for logging and metrics\n\n  Attributes\n   - Set `check_logging` to check for logging sub agent. Defaults is True\n   - Set `check_metrics` to check for metrics sub agent. Default is True\n  \"\"\"\n\n  template = 'vm_ops::opsagent_installed'\n  check_logging: bool = True\n  check_metrics: bool = True\n\n  project_id: Optional[str] = None\n  zone: Optional[str] = None\n  instance_name: Optional[str] = None\n  instance_id: Optional[str] = None\n  vm: Optional[gce.Instance] = None\n  start_time: datetime\n  end_time: datetime\n\n  def _has_ops_agent_subagent(self, metric_data):\n    \"\"\"Checks if ops agent logging agent and metric agent is installed\"\"\"\n    subagents = {\n        'metrics_subagent_installed': False,\n        'logging_subagent_installed': False\n    }\n    if not metric_data:\n      return {\n          'metrics_subagent_installed': False,\n          'logging_subagent_installed': False\n      }\n\n    for entry in metric_data.values():\n      version = get_path(entry, ('labels', 'metric.version'), '')\n      if 'google-cloud-ops-agent-metrics' in version:\n        subagents['metrics_subagent_installed'] = True\n      if 'google-cloud-ops-agent-logging' in version:\n        subagents['logging_subagent_installed'] = True\n\n    return subagents\n\n  def execute(self):\n    \"\"\"Verify GCE Instance's has ops agent installed and currently active\"\"\"\n    if self.vm:\n      instance = self.vm\n      self.project_id = instance.project_id\n      self.zone = instance.zone\n      self.instance_name = instance.name\n      self.instance_id = instance.id\n    else:\n      try:\n        util.ensure_instance_resolved()\n      except (\n          runbook_exceptions.FailedStepError,\n          runbook_exceptions.MissingParameterError,\n      ) as e:\n        project = crm.get_project(op.get(flags.PROJECT_ID))\n        op.add_skipped(project, reason=str(e))\n        return\n      self.project_id = op.get(flags.PROJECT_ID)\n      self.zone = op.get(flags.ZONE)\n      self.instance_name = op.get(flags.INSTANCE_NAME) or op.get(\n          flags.INSTANCE_ID)\n      instance = gce.get_instance(\n          project_id=self.project_id,\n          zone=self.zone,\n          instance_name=self.instance_name or self.instance_id,\n      )\n    if not instance:\n      op.add_skipped(\n          None,\n          reason=(\n              f'VM instance {self.instance_name or self.instance_id} not found'\n              f' in project {self.project_id} zone {self.zone}'),\n      )\n      return\n\n    self.end_time = getattr(self, 'end_time', None) or op.get(flags.END_TIME)\n    self.start_time = getattr(self, 'start_time', None) or op.get(\n        flags.START_TIME)\n\n    if self.check_logging:\n      serial_log_entries = logs.realtime_query(\n          project_id=self.project_id,\n          filter_str='''resource.type=\"gce_instance\"\n                          log_name=\"projects/{}/logs/ops-agent-health\"\n                          resource.labels.instance_id=\"{}\"\n                          \"LogPingOpsAgent\"'''.format(self.project_id,\n                                                      instance.id),\n          start_time=self.start_time,\n          end_time=self.end_time)\n      if serial_log_entries:\n        op.add_ok(resource=instance,\n                  reason=op.prep_msg(op.SUCCESS_REASON,\n                                     full_resource_path=instance.full_path,\n                                     subagent='logging'))\n      else:\n        op.add_failed(resource=instance,\n                      reason=op.prep_msg(op.FAILURE_REASON,\n                                         full_resource_path=instance.full_path,\n                                         subagent='logging'),\n                      remediation=op.prep_msg(\n                          op.FAILURE_REMEDIATION,\n                          full_resource_path=instance.full_path,\n                          subagent='logging'))\n\n    if self.check_metrics:\n      ops_agent_uptime = monitoring.query(\n          self.project_id, \"\"\"\n                fetch gce_instance\n                | metric 'agent.googleapis.com/agent/uptime'\n                | filter (resource.instance_id == '{}')\n                | align rate(1m)\n                | every 1m\n                | group_by [resource.instance_id, metric.version],\n                    [value_uptime_aggregate: aggregate(value.uptime)]\n              \"\"\".format(instance.id))\n      subagents = self._has_ops_agent_subagent(ops_agent_uptime)\n      if subagents['metrics_subagent_installed']:\n        op.add_ok(resource=instance,\n                  reason=op.prep_msg(op.SUCCESS_REASON,\n                                     full_resource_path=instance.full_path,\n                                     subagent='metrics'))\n      else:\n        op.add_failed(resource=instance,\n                      reason=op.prep_msg(op.FAILURE_REASON,\n                                         full_resource_path=instance.full_path,\n                                         subagent='metrics'),\n                      remediation=op.prep_msg(\n                          op.FAILURE_REMEDIATION,\n                          full_resource_path=instance.full_path,\n                          subagent='metrics'))\n\n\nclass MigAutoscalingPolicyCheck(runbook.Step):\n  \"\"\"Checks MIG autoscaling policy attributes.\n\n  This step performs checks on attributes within a Managed Instance Group (MIG)'s\n  autoscaling policy. It requires both 'property_path' and 'expected_value' to be\n  specified.\n\n  The MIG can be identified either by providing 'instance_name' and 'zone' (the\n  step will find the MIG associated with the instance) or by providing 'mig_name'\n  and 'location' (zone or region).\n\n  Parameters:\n  - property_path: The nested path of the property to check within the MIG or\n    autoscaler resource (e.g., 'autoscalingPolicy.mode'). If the path starts\n    with 'autoscalingPolicy', the autoscaler resource is queried.\n  - expected_value: The value to compare against. Supports 'ref:' prefix to\n    resolve constants from gce/constants.py (e.g., 'ref:AUTOSCALING_MODE_ON').\n  - operator: The comparison operator to use. Supported: 'eq' (default), 'ne',\n    'lt', 'le', 'gt', 'ge'.\n  \"\"\"\n\n  template = 'mig_autoscaling::policy_check'\n  project_id: Optional[str] = None\n  location: Optional[str] = None  # zone or region\n  mig_name: Optional[str] = None\n  instance_name: Optional[str] = None\n  zone: Optional[str] = None\n\n  def execute(self):\n    \"\"\"Check MIG Autoscaling Policy.\"\"\"\n    # Get parameters\n    self.project_id = op.get(flags.PROJECT_ID) or self.project_id\n    self.location = op.get(flags.LOCATION) or self.location\n    self.mig_name = op.get(flags.MIG_NAME) or self.mig_name\n    self.instance_name = op.get(flags.INSTANCE_NAME) or self.instance_name\n    self.zone = op.get(flags.ZONE) or self.zone\n\n    property_path: Optional[str] = op.get('property_path')\n    expected_value_str: Optional[str] = op.get('expected_value')\n    operator: str = op.get('operator', 'eq')\n\n    try:\n      # If instance details are provided, find MIG from instance\n      if self.instance_name and self.zone:\n        instance = gce.get_instance(self.project_id, self.zone,\n                                    self.instance_name)\n        if instance.created_by_mig:\n          mig = instance.mig\n          self.location = mig.zone or mig.region\n          if not self.location:\n            op.add_skipped(\n                instance,\n                reason=\n                f'Could not determine location for MIG of instance {self.instance_name}.',\n            )\n            return\n        else:\n          op.add_skipped(\n              instance,\n              reason=\n              f'Instance {self.instance_name} is not part of any Managed Instance Group.',\n          )\n          return\n      # If MIG details are provided, fetch MIG directly\n      elif self.mig_name and self.location:\n        if self.location.count('-') == 2:  # zone\n          mig = gce.get_instance_group_manager(self.project_id, self.location,\n                                               self.mig_name)\n        elif self.location.count('-') == 1:  # region\n          mig = gce.get_region_instance_group_manager(self.project_id,\n                                                      self.location,\n                                                      self.mig_name)\n        else:\n          raise runbook_exceptions.InvalidParameterError(\n              f\"Cannot determine if location '{self.location}' is a zone or region.\"\n          )\n      else:\n        raise runbook_exceptions.MissingParameterError(\n            'Either instance_name and zone, or mig_name and location must be provided.'\n        )\n    except googleapiclient.errors.HttpError as err:\n      if err.resp.status == 404:\n        resource = self.instance_name or self.mig_name\n        op.add_skipped(\n            None,\n            reason=\n            f'Resource {resource} not found in project {self.project_id}.',\n        )\n        return\n      else:\n        raise utils.GcpApiError(err) from err\n    except AttributeError:\n      op.add_skipped(\n          None,\n          reason=f'Could not determine MIG for instance {self.instance_name}.',\n      )\n      return\n\n    if not mig:\n      op.add_skipped(None, reason='Could not find MIG to analyze.')\n      return\n\n    # Generic check if property_path is provided\n    if not property_path:\n      raise runbook_exceptions.MissingParameterError(\n          \"'property_path' is required for this step.\")\n    if expected_value_str is None:\n      raise runbook_exceptions.MissingParameterError(\n          \"'expected_value' is required for this step.\")\n\n    try:\n      expected_value = _resolve_expected_value(expected_value_str)\n    except ValueError as e:\n      raise runbook_exceptions.InvalidParameterError(str(e)) from e\n\n    if property_path and property_path.startswith('autoscalingPolicy'):\n      try:\n        if mig.zone:  # zonal\n          autoscaler = gce.get_autoscaler(self.project_id, mig.zone, mig.name)\n          actual_value = autoscaler.get(property_path, default=None)\n        else:  # regional\n          autoscaler = gce.get_region_autoscaler(self.project_id, mig.region,\n                                                 mig.name)\n          actual_value = autoscaler.get(property_path, default=None)\n      except googleapiclient.errors.HttpError as err:\n        if err.resp.status == 404:\n          # No autoscaler linked, policy doesn't exist.\n          actual_value = None\n        else:\n          raise utils.GcpApiError(err) from err\n    else:\n      actual_value = mig.get(property_path, default=None)\n\n    op.add_metadata('mig_name', mig.name)\n    op.add_metadata('property_path', property_path)\n    op.add_metadata('expected_value', str(expected_value))\n    op.add_metadata('operator', operator)\n    op.add_metadata('actual_value', str(actual_value))\n\n    if _check_condition(actual_value, expected_value, operator):\n      op.add_ok(\n          mig,\n          reason=op.prep_msg(\n              op.SUCCESS_REASON,\n              mig_name=mig.name,\n              property_path=property_path,\n              expected_value=expected_value,\n              operator=operator,\n              actual_value=actual_value,\n          ),\n      )\n    else:\n      op.add_failed(\n          mig,\n          reason=op.prep_msg(\n              op.FAILURE_REASON,\n              mig_name=mig.name,\n              property_path=property_path,\n              expected_value=expected_value,\n              operator=operator,\n              actual_value=actual_value,\n          ),\n          remediation=op.prep_msg(op.FAILURE_REMEDIATION, mig_name=mig.name),\n      )\n\n\nclass InstancePropertyCheck(runbook.Step):\n  \"\"\"Checks that a Instance property meets a given condition.\n\n  This step fetches a VM instance and checks if a specified property\n  meets the condition defined by an expected value and an operator.\n  It supports nested properties via getattr and various operators including\n  'eq', 'ne', 'lt', 'le', 'gt', 'ge', 'contains', and 'matches'.\n\n  Parameters:\n  - property_path: The path of the property to check on the Instance object\n    (e.g., 'status', 'boot_disk_licenses').\n  - expected_value: The value to compare against. Supports 'ref:' prefix to\n    resolve constants from gce/constants.py (e.g., 'ref:RHEL_PATTERN').\n  - operator: The comparison operator to use. Supported: 'eq', 'ne',\n    'lt', 'le', 'gt', 'ge', 'contains', 'matches'. Default is 'eq'.\n\n  Operator Notes:\n  - `contains`: Checks for exact membership in lists (e.g., 'item' in ['item'])\n    or substring in strings.\n  - `matches`: Treats `expected_value` as a regex and checks if the pattern is\n    found in the string or in *any* element of a list. Useful for partial\n    matches (e.g., pattern 'sles' matching license 'sles-12-sap').\n  \"\"\"\n\n  template = 'instance_property::default'\n  project_id: Optional[str] = None\n  instance_name: Optional[str] = None\n  zone: Optional[str] = None\n\n  def execute(self):\n    \"\"\"Check VM property.\"\"\"\n    try:\n      util.ensure_instance_resolved()\n    except (\n        runbook_exceptions.FailedStepError,\n        runbook_exceptions.MissingParameterError,\n    ) as e:\n      project = crm.get_project(op.get(flags.PROJECT_ID))\n      op.add_skipped(project, reason=str(e))\n      return\n    self.project_id = op.get(flags.PROJECT_ID) or self.project_id\n    self.instance_name = op.get(flags.INSTANCE_NAME) or self.instance_name\n    self.zone = op.get(flags.ZONE) or self.zone\n\n    property_path: Optional[str] = op.get('property_path')\n    expected_value_str: Optional[str] = op.get('expected_value')\n    operator: str = op.get('operator', 'eq')\n\n    if not self.instance_name or not self.zone:\n      raise runbook_exceptions.MissingParameterError(\n          'instance_name and zone must be provided.')\n    if not property_path:\n      raise runbook_exceptions.MissingParameterError(\n          \"'property_path' is required for this step.\")\n    if property_path.startswith('ref:'):\n      property_path = getattr(constants, property_path[4:])\n    if expected_value_str is None:\n      raise runbook_exceptions.MissingParameterError(\n          \"'expected_value' is required for this step.\")\n\n    try:\n      vm = gce.get_instance(self.project_id, self.zone, self.instance_name)\n    except googleapiclient.errors.HttpError as err:\n      if err.resp.status == 404:\n        op.add_skipped(\n            None,\n            reason=(f'VM instance {self.instance_name} not found in project'\n                    f' {self.project_id} zone {self.zone}'),\n        )\n        return\n      else:\n        raise utils.GcpApiError(err) from err\n\n    try:\n      resolved_expected_value = _resolve_expected_value(expected_value_str)\n      if str(resolved_expected_value).lower() in op.BOOL_VALUES:\n        expected_value = op.BOOL_VALUES[str(resolved_expected_value).lower()]\n      else:\n        expected_value = resolved_expected_value\n    except ValueError as e:\n      raise ValueError(str(e)) from e\n\n    try:\n      actual_value = getattr(vm, property_path)\n    except (AttributeError, KeyError) as e:\n      raise ValueError(\n          f\"Could not access property_path '{property_path}' on VM instance {self.instance_name}\"\n      ) from e\n\n    op.add_metadata('instance_name', vm.name)\n    op.add_metadata('property_path', property_path)\n    op.add_metadata('expected_value', str(expected_value))\n    op.add_metadata('operator', operator)\n    op.add_metadata('actual_value', str(actual_value))\n\n    if _check_condition(actual_value, expected_value, operator):\n      op.add_ok(\n          vm,\n          reason=op.prep_msg(\n              op.SUCCESS_REASON,\n              instance_name=vm.name,\n              property_path=property_path,\n              expected_value=expected_value,\n              operator=operator,\n              actual_value=actual_value,\n          ),\n      )\n    else:\n      op.add_failed(\n          vm,\n          reason=op.prep_msg(\n              op.FAILURE_REASON,\n              instance_name=vm.name,\n              property_path=property_path,\n              expected_value=expected_value,\n              operator=operator,\n              actual_value=actual_value,\n          ),\n          remediation=op.prep_msg(\n              op.FAILURE_REMEDIATION,\n              instance_name=vm.name,\n              property_path=property_path,\n              expected_value=expected_value,\n              operator=operator,\n          ),\n      )\n\n\nclass GceLogCheck(runbook.Step):\n  \"\"\"Executes a Cloud Logging query and checks results against optional patterns.\n\n  This step queries Cloud Logging using the provided filter string by calling\n  logs.generalized_steps.CheckIssueLogEntry.\n  See CheckIssueLogEntry for logic on FAILED/UNCERTAIN status.\n\n  Parameters retrieved via `op.get()`:\n    project_id(str): Project ID to search for filter.\n    filter_str(str): Filter in Cloud Logging query language:\n      https://cloud.google.com/logging/docs/view/query-library.\n    issue_pattern(Optional[str]): Semicolon-separated ';;' list of regex\n      patterns to search for in `protoPayload.status.message`. If prefixed\n      with 'ref:', it resolves to a list in `gce/constants.py`.\n      If provided, logs matching pattern will result in FAILED status.\n    resource_name(Optional[str]): Resource identifier for template messages.\n    template(Optional[str]): Template name, defaults to\n      'logging::gce_log'.\n  \"\"\"\n\n  def execute(self):\n    \"\"\"Check for log entries by calling CheckIssueLogEntry.\"\"\"\n    project_id = op.get(flags.PROJECT_ID)\n    filter_str = op.get('filter_str')\n    issue_pattern_str = op.get('issue_pattern')\n    resource_name = op.get('resource_name', 'resource NA')\n    template = op.get('template') or 'logging::gce_log'\n\n    if not project_id:\n      raise runbook_exceptions.MissingParameterError(\n          \"'project_id' is required for this step.\")\n    if not filter_str:\n      raise runbook_exceptions.MissingParameterError(\n          \"'filter_str' is required for this step.\")\n\n    # Resolve filter_str if it is a reference\n    if filter_str.startswith('ref:'):\n      const_name = filter_str[4:]\n      resolved_filter = getattr(constants, const_name, None)\n      if resolved_filter is None:\n        raise runbook_exceptions.InvalidParameterError(\n            f\"Could not resolve constant reference: '{filter_str}'. \"\n            f\"Ensure '{const_name}' is defined in gce/constants.py.\")\n      filter_str = resolved_filter\n\n    issue_patterns = []\n    if issue_pattern_str:\n      issue_patterns = runbook_util.resolve_patterns(issue_pattern_str,\n                                                     constants)\n\n    log_check_step = logs_gs.CheckIssueLogEntry(project_id=project_id,\n                                                filter_str=filter_str,\n                                                issue_pattern=issue_patterns,\n                                                template=template,\n                                                resource_name=resource_name)\n    self.add_child(log_check_step)\n\n\nclass GceIamPolicyCheck(runbook.Step):\n  \"\"\"Checks IAM policies by calling IamPolicyCheck with support for gce/constants.py.\n\n  This step is a wrapper around iam.generalized_steps.IamPolicyCheck that adds\n  support for resolving 'roles' or 'permissions' parameters from gce/constants.py\n  if they are prefixed with 'ref:'. It also supports ';;' delimited strings for\n  roles or permissions lists.\n\n  Parameters retrieved via `op.get()`:\n    project_id(str): Project ID to check policy against.\n    principal(str): The principal to check (e.g., user:x@y.com,\n      serviceAccount:a@b.com).\n    roles(Optional[str]): ';;' separated list of roles or 'ref:CONSTANT' to check.\n    permissions(Optional[str]): ';;' separated list of permissions or\n      'ref:CONSTANT' to check.\n    require_all(bool): If True, all roles/permissions must be present.\n      If False (default), at least one must be present.\n  \"\"\"\n\n  def execute(self):\n    \"\"\"Check IAM policies by calling IamPolicyCheck.\"\"\"\n    project_id = op.get(flags.PROJECT_ID)\n    principal = op.get(iam_flags.PRINCIPAL)\n    roles_str = op.get('roles')\n    permissions_str = op.get('permissions')\n    require_all = op.BOOL_VALUES.get(\n        str(op.get('require_all', False)).lower(), False)\n\n    if not project_id:\n      raise runbook_exceptions.MissingParameterError(\n          \"'project_id' is required for this step.\")\n    if not principal:\n      raise runbook_exceptions.MissingParameterError(\n          \"'principal' is required for this step.\")\n    if not roles_str and not permissions_str:\n      raise runbook_exceptions.MissingParameterError(\n          \"Either 'roles' or 'permissions' must be provided.\")\n\n    roles_set = None\n    if roles_str:\n      roles_set = set(runbook_util.resolve_patterns(roles_str, constants))\n\n    permissions_set = None\n    if permissions_str:\n      permissions_set = set(\n          runbook_util.resolve_patterns(permissions_str, constants))\n\n    iam_check_step = iam_gs.IamPolicyCheck(project=project_id,\n                                           principal=principal,\n                                           roles=roles_set,\n                                           permissions=permissions_set,\n                                           require_all=require_all)\n    self.add_child(iam_check_step)\n"
  },
  {
    "path": "gcpdiag/runbook/gce/generalized_steps_test.py",
    "content": "# Copyright 2025 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Tests for generalized_steps.py.\"\"\"\n\nimport datetime\nimport re\nimport tempfile\nimport unittest\nfrom unittest import mock\n\nimport apiclient.errors\n\nfrom gcpdiag import utils\nfrom gcpdiag.queries import apis_stub, gce\nfrom gcpdiag.runbook import exceptions as runbook_exceptions\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.gce import constants, generalized_steps\nfrom gcpdiag.runbook.gcp import flags\nfrom gcpdiag.runbook.iam import flags as iam_flags\nfrom gcpdiag.runbook.iam import generalized_steps as iam_gs\nfrom gcpdiag.runbook.logs import generalized_steps as logs_gs\n\nDUMMY_PROJECT_ID = 'gcpdiag-gce1-aaaa'\n\n\nclass RegexMatcher:\n  \"\"\"A matcher that checks if a string matches a regex.\"\"\"\n\n  def __init__(self, pattern):\n    self.pattern = re.compile(pattern)\n\n  def __eq__(self, other):\n    return isinstance(other, str) and bool(self.pattern.search(other))\n\n  def __repr__(self):\n    return f'<RegexMatcher pattern={self.pattern.pattern}>'\n\n\nclass MockMessage:\n  \"\"\"Mock messages for testing.\"\"\"\n\n  def get_msg(self, key, **kwargs):\n    del kwargs\n    return f'{key}'\n\n\nclass GceStepTestBase(unittest.TestCase):\n  \"\"\"Base class for GCE generalized step tests using a real Operator context.\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    self.mock_get_project = self.enterContext(\n        mock.patch('gcpdiag.queries.crm.get_project'))\n    self.enterContext(\n        mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub))\n\n    self.mock_interface = mock.create_autospec(op.InteractionInterface,\n                                               instance=True)\n    self.mock_interface.rm = mock.Mock()\n\n    self.operator = op.Operator(self.mock_interface)\n    self.operator.run_id = 'test-run'\n    self.operator.messages = MockMessage()\n\n    self.params = {\n        flags.PROJECT_ID:\n            DUMMY_PROJECT_ID,\n        flags.ZONE:\n            'us-central1-a',\n        flags.INSTANCE_NAME:\n            'test-instance',\n        flags.INSTANCE_ID:\n            '12345',\n        flags.START_TIME:\n            datetime.datetime(2025, 10, 27, tzinfo=datetime.timezone.utc),\n        flags.END_TIME:\n            datetime.datetime(2025, 10, 28, tzinfo=datetime.timezone.utc),\n    }\n    self.operator.parameters = self.params\n\n    self.mock_instance = mock.Mock(spec=gce.Instance)\n    self.mock_instance.project_id = DUMMY_PROJECT_ID\n    self.mock_instance.zone = 'us-central1-a'\n    self.mock_instance.name = 'test-instance'\n    self.mock_instance.id = '12345'\n    self.mock_instance.full_path = (\n        f'projects/{DUMMY_PROJECT_ID}/zones/us-central1-a/'\n        'instances/test-instance')\n    self.mock_instance.machine_type = mock.Mock(return_value='n1-standard-1')\n\n    self.mock_gce_get_instance = self.enterContext(\n        mock.patch('gcpdiag.queries.gce.get_instance',\n                   return_value=self.mock_instance))\n\n\nclass GeneralizedStepsUtilsTest(unittest.TestCase):\n  \"\"\"Tests for private utility functions and edge cases.\"\"\"\n\n  def test_get_operator_fn_error(self):\n    with self.assertRaises(ValueError):\n      # pylint: disable=protected-access\n      generalized_steps._get_operator_fn('invalid')\n\n  def test_resolve_expected_value_ref_fail(self):\n    with self.assertRaises(ValueError):\n      # pylint: disable=protected-access\n      generalized_steps._resolve_expected_value('ref:MISSING_CONST')\n\n  def test_check_condition_contains_non_collection(self):\n    # pylint: disable=protected-access\n    assert not generalized_steps._check_condition(123, '1', 'contains')\n\n  def test_check_condition_matches_invalid_regex(self):\n    with self.assertRaises(ValueError):\n      # pylint: disable=protected-access\n      generalized_steps._check_condition('text', '[', 'matches')\n\n  def test_check_condition_type_mismatch(self):\n    # pylint: disable=protected-access\n    assert not generalized_steps._check_condition({}, 1, 'lt')\n\n\nclass HighVmMemoryUtilizationTest(GceStepTestBase):\n  \"\"\"Test HighVmMemoryUtilization step.\"\"\"\n\n  def test_init_with_vm_object(self):\n    with op.operator_context(self.operator):\n      with (\n          mock.patch('gcpdiag.runbook.gce.util.ops_agent_installed',\n                     return_value=True),\n          mock.patch('gcpdiag.queries.monitoring.query', return_value=[]),\n      ):\n        step = generalized_steps.HighVmMemoryUtilization()\n        step.vm = self.mock_instance\n        self.operator.set_step(step)\n        step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n\n  def test_ops_agent_installed_memory_usage_found(self):\n    with op.operator_context(self.operator):\n      with (\n          mock.patch('gcpdiag.runbook.gce.util.ops_agent_installed',\n                     return_value=True),\n          mock.patch(\n              'gcpdiag.queries.monitoring.query',\n              return_value=[{\n                  'metric': 'data'\n              }],\n          ),\n      ):\n        step = generalized_steps.HighVmMemoryUtilization()\n        self.operator.set_step(step)\n        step.execute()\n    self.mock_interface.add_failed.assert_called_once_with(\n        run_id='test-run',\n        resource=self.mock_instance,\n        reason='failure_reason',\n        remediation='failure_remediation',\n        step_execution_id=mock.ANY,\n    )\n\n  def test_ops_agent_not_installed_not_e2_skipped(self):\n    with op.operator_context(self.operator):\n      with mock.patch('gcpdiag.runbook.gce.util.ops_agent_installed',\n                      return_value=False):\n        step = generalized_steps.HighVmMemoryUtilization()\n        self.operator.set_step(step)\n        step.execute()\n    self.mock_interface.info.assert_called_with(\n        message=RegexMatcher('.*not export memory metrics.*'), step_type='INFO')\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_instance_resolution_failure(self):\n    with op.operator_context(self.operator):\n      with mock.patch(\n          'gcpdiag.runbook.gce.util.ensure_instance_resolved',\n          side_effect=runbook_exceptions.FailedStepError('err'),\n      ):\n        step = generalized_steps.HighVmMemoryUtilization()\n        self.operator.set_step(step)\n        step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_vm_not_found(self):\n    self.mock_gce_get_instance.return_value = None\n    with op.operator_context(self.operator):\n      step = generalized_steps.HighVmMemoryUtilization()\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_cpu_usage_not_found(self):\n    with op.operator_context(self.operator):\n      with (\n          mock.patch('gcpdiag.runbook.gce.util.ops_agent_installed',\n                     return_value=False),\n          mock.patch('gcpdiag.queries.monitoring.query', return_value=[]),\n      ):\n        step = generalized_steps.HighVmCpuUtilization()\n        self.operator.set_step(step)\n        step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n\n  def test_e2_machine_memory_usage_found(self):\n    self.mock_instance.machine_type.return_value = 'e2-medium'\n    with op.operator_context(self.operator):\n      with (\n          mock.patch('gcpdiag.runbook.gce.util.ops_agent_installed',\n                     return_value=False),\n          mock.patch(\n              'gcpdiag.queries.monitoring.query',\n              return_value=[{\n                  'metric': 'data'\n              }],\n          ),\n      ):\n        step = generalized_steps.HighVmMemoryUtilization()\n        self.operator.set_step(step)\n        step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n\nclass HighVmDiskUtilizationTest(GceStepTestBase):\n  \"\"\"Test HighVmDiskUtilization step.\"\"\"\n\n  def test_instance_resolution_failure(self):\n    with op.operator_context(self.operator):\n      with mock.patch('gcpdiag.runbook.gce.util.ensure_instance_resolved',\n                      side_effect=runbook_exceptions.FailedStepError('err')):\n        step = generalized_steps.HighVmDiskUtilization()\n        self.operator.set_step(step)\n        step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_vm_not_found(self):\n    self.mock_gce_get_instance.return_value = None\n    with op.operator_context(self.operator):\n      step = generalized_steps.HighVmDiskUtilization()\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_init_with_vm_object(self):\n    with op.operator_context(self.operator):\n      with (\n          mock.patch('gcpdiag.runbook.gce.util.ops_agent_installed',\n                     return_value=True),\n          mock.patch('gcpdiag.queries.monitoring.query', return_value=[]),\n      ):\n        step = generalized_steps.HighVmDiskUtilization()\n        step.vm = self.mock_instance\n        self.operator.set_step(step)\n        step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n\n  def test_ops_agent_installed_disk_usage_not_found(self):\n    with op.operator_context(self.operator):\n      with (\n          mock.patch('gcpdiag.runbook.gce.util.ops_agent_installed',\n                     return_value=True),\n          mock.patch('gcpdiag.queries.monitoring.query', return_value=[]),\n      ):\n        step = generalized_steps.HighVmDiskUtilization()\n        self.operator.set_step(step)\n        step.execute()\n    self.mock_interface.add_ok.assert_called_once_with(\n        run_id='test-run',\n        resource=self.mock_instance,\n        reason='success_reason',\n        step_execution_id=mock.ANY,\n    )\n\n  def test_ops_agent_installed_disk_usage_found(self):\n    with op.operator_context(self.operator):\n      with (\n          mock.patch('gcpdiag.runbook.gce.util.ops_agent_installed',\n                     return_value=True),\n          mock.patch(\n              'gcpdiag.queries.monitoring.query',\n              return_value=[{\n                  'metric': 'data'\n              }],\n          ),\n      ):\n        step = generalized_steps.HighVmDiskUtilization()\n        self.operator.set_step(step)\n        step.execute()\n    self.mock_interface.add_failed.assert_called_once_with(\n        run_id='test-run',\n        resource=self.mock_instance,\n        reason='failure_reason',\n        remediation='failure_remediation',\n        step_execution_id=mock.ANY,\n    )\n\n  def test_no_ops_agent_skipped_with_child_step(self):\n    with op.operator_context(self.operator):\n      with (\n          mock.patch('gcpdiag.runbook.gce.util.ops_agent_installed',\n                     return_value=False),\n          mock.patch('gcpdiag.queries.monitoring.query', return_value=[]),\n      ):\n        step = generalized_steps.HighVmDiskUtilization()\n        step.vm = self.mock_instance\n        self.operator.set_step(step)\n        step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n    assert any(\n        isinstance(c, generalized_steps.VmSerialLogsCheck) for c in step.steps)\n\n\nclass HighVmCpuUtilizationTest(GceStepTestBase):\n  \"\"\"Test HighVmCpuUtilization step.\"\"\"\n\n  def test_instance_resolution_failure(self):\n    with op.operator_context(self.operator):\n      with mock.patch('gcpdiag.runbook.gce.util.ensure_instance_resolved',\n                      side_effect=runbook_exceptions.FailedStepError('err')):\n        step = generalized_steps.HighVmCpuUtilization()\n        self.operator.set_step(step)\n        step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_init_with_vm_object(self):\n    with op.operator_context(self.operator):\n      with mock.patch('gcpdiag.runbook.gce.util.ops_agent_installed', return_value=True), \\\n           mock.patch('gcpdiag.queries.monitoring.query', return_value=[]):\n        step = generalized_steps.HighVmCpuUtilization()\n        step.vm = self.mock_instance\n        self.operator.set_step(step)\n        step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n\n  def test_cpu_usage_found(self):\n    with op.operator_context(self.operator):\n      with (\n          mock.patch('gcpdiag.runbook.gce.util.ops_agent_installed',\n                     return_value=False),\n          mock.patch(\n              'gcpdiag.queries.monitoring.query',\n              return_value=[{\n                  'metric': 'data'\n              }],\n          ),\n      ):\n        step = generalized_steps.HighVmCpuUtilization()\n        self.operator.set_step(step)\n        step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n  def test_ops_agent_installed_cpu_usage_found(self):\n    with op.operator_context(self.operator):\n      with (\n          mock.patch('gcpdiag.runbook.gce.util.ops_agent_installed',\n                     return_value=True),\n          mock.patch(\n              'gcpdiag.queries.monitoring.query',\n              return_value=[{\n                  'metric': 'data'\n              }],\n          ),\n      ):\n        step = generalized_steps.HighVmCpuUtilization()\n        self.operator.set_step(step)\n        step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n  def test_vm_not_found(self):\n    self.mock_gce_get_instance.return_value = None\n    with op.operator_context(self.operator):\n      step = generalized_steps.HighVmCpuUtilization()\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n\nclass GceVpcConnectivityCheckTest(GceStepTestBase):\n  \"\"\"Test GceVpcConnectivityCheck step.\"\"\"\n\n  def test_instance_resolution_failure(self):\n    with op.operator_context(self.operator):\n      with mock.patch('gcpdiag.runbook.gce.util.ensure_instance_resolved',\n                      side_effect=runbook_exceptions.FailedStepError('err')):\n        step = generalized_steps.GceVpcConnectivityCheck()\n        self.operator.set_step(step)\n        step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_vm_not_found(self):\n    self.mock_gce_get_instance.return_value = None\n    with op.operator_context(self.operator):\n      step = generalized_steps.GceVpcConnectivityCheck()\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_init_with_vm_object(self):\n    self.mock_instance.network.firewall.check_connectivity_ingress.return_value = mock.Mock(\n        action='allow', matched_by_str='firewall-rule-1')\n    with op.operator_context(self.operator):\n      step = generalized_steps.GceVpcConnectivityCheck()\n      step.vm = self.mock_instance\n      step.traffic = 'ingress'\n      step.src_ip = '1.2.3.4'\n      step.protocol_type = 'tcp'\n      step.port = 443\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n\n  def test_ingress_deny(self):\n    self.mock_instance.network.firewall.check_connectivity_ingress.return_value = mock.Mock(\n        action='deny', matched_by_str='firewall-rule-2')\n    with op.operator_context(self.operator):\n      step = generalized_steps.GceVpcConnectivityCheck()\n      step.traffic = 'ingress'\n      step.src_ip = '1.2.3.4'\n      step.protocol_type = 'tcp'\n      step.port = 443\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n  def test_egress_allow(self):\n    self.mock_instance.network_ips = ['10.0.0.1']\n    self.mock_instance.network.firewall.check_connectivity_egress.return_value = mock.Mock(\n        action='allow', matched_by_str='firewall-rule-1')\n    with op.operator_context(self.operator):\n      step = generalized_steps.GceVpcConnectivityCheck()\n      step.traffic = 'egress'\n      step.src_ip = '10.0.0.1'\n      step.protocol_type = 'tcp'\n      step.port = 80\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n\n\nclass VmScopeTest(GceStepTestBase):\n  \"\"\"Test VmScope step.\"\"\"\n\n  def test_require_all_false_fail(self):\n    self.mock_instance.access_scopes = {'scope3'}\n    with op.operator_context(self.operator):\n      step = generalized_steps.VmScope()\n      step.access_scopes = {'scope1', 'scope2'}\n      step.require_all = False\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n  def test_require_all_true_fail(self):\n    self.mock_instance.access_scopes = {'scope1'}\n    with op.operator_context(self.operator):\n      step = generalized_steps.VmScope()\n      step.access_scopes = {'scope1', 'scope2'}\n      step.require_all = True\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n  def test_instance_resolution_failure(self):\n    with op.operator_context(self.operator):\n      with mock.patch('gcpdiag.runbook.gce.util.ensure_instance_resolved',\n                      side_effect=runbook_exceptions.FailedStepError('err')):\n        step = generalized_steps.VmScope()\n        self.operator.set_step(step)\n        step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_vm_not_found(self):\n    self.mock_gce_get_instance.return_value = None\n    with op.operator_context(self.operator):\n      step = generalized_steps.VmScope()\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_init_with_vm_object(self):\n    self.mock_instance.access_scopes = {'scope1'}\n    with op.operator_context(self.operator):\n      step = generalized_steps.VmScope()\n      step.vm = self.mock_instance\n      step.access_scopes = {'scope1'}\n      step.require_all = False\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n\n  def test_require_all_ok(self):\n    self.mock_instance.access_scopes = {'scope1', 'scope2'}\n    with op.operator_context(self.operator):\n      step = generalized_steps.VmScope()\n      step.access_scopes = {'scope1', 'scope2'}\n      step.require_all = True\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n\n\nclass GceLogCheckTest(GceStepTestBase):\n  \"\"\"Test GceLogCheck step.\"\"\"\n\n  def test_missing_project_id(self):\n    self.params.pop(flags.PROJECT_ID, None)\n    self.params['filter_str'] = 'test-filter'\n    with op.operator_context(self.operator):\n      step = generalized_steps.GceLogCheck()\n      self.operator.set_step(step)\n      with self.assertRaises(runbook_exceptions.MissingParameterError):\n        step.execute()\n\n  def test_gce_log_check_adds_child(self):\n    self.params['filter_str'] = 'test-filter'\n    with op.operator_context(self.operator):\n      step = generalized_steps.GceLogCheck()\n      self.operator.set_step(step)\n      step.execute()\n    assert any(isinstance(c, logs_gs.CheckIssueLogEntry) for c in step.steps)\n\n  def test_gce_log_check_ref_resolution(self):\n    constants.TEST_FILTER = 'filter-from-ref'\n    self.params['filter_str'] = 'ref:TEST_FILTER'\n    with op.operator_context(self.operator):\n      step = generalized_steps.GceLogCheck()\n      self.operator.set_step(step)\n      step.execute()\n    child = next(\n        c for c in step.steps if isinstance(c, logs_gs.CheckIssueLogEntry))\n    self.assertEqual(child.filter_str, 'filter-from-ref')\n    del constants.TEST_FILTER\n\n  def test_gce_log_check_invalid_ref(self):\n    self.params['filter_str'] = 'ref:INVALID_FILTER_REF'\n    with op.operator_context(self.operator):\n      step = generalized_steps.GceLogCheck()\n      self.operator.set_step(step)\n      with self.assertRaises(runbook_exceptions.InvalidParameterError):\n        step.execute()\n\n  def test_parameter_missing(self):\n    self.params.pop('filter_str', None)\n    with op.operator_context(self.operator):\n      step = generalized_steps.GceLogCheck()\n      self.operator.set_step(step)\n      with self.assertRaises(runbook_exceptions.MissingParameterError):\n        step.execute()\n\n  def test_gce_log_check_issue_pattern_ref_resolution(self):\n    constants.TEST_PATTERN = ['pattern1', 'pattern2']\n    self.params['filter_str'] = 'some-filter'\n    self.params['issue_pattern'] = 'ref:TEST_PATTERN'\n    with op.operator_context(self.operator):\n      step = generalized_steps.GceLogCheck()\n      self.operator.set_step(step)\n      step.execute()\n    child = next(\n        c for c in step.steps if isinstance(c, logs_gs.CheckIssueLogEntry))\n    self.assertEqual(child.issue_pattern, ['pattern1', 'pattern2'])\n    del constants.TEST_PATTERN\n\n  def test_no_issue_pattern(self):\n    self.params['filter_str'] = 'some-filter'\n    self.params.pop('issue_pattern', None)\n    with op.operator_context(self.operator):\n      step = generalized_steps.GceLogCheck()\n      self.operator.set_step(step)\n      step.execute()\n    child = next(\n        c for c in step.steps if isinstance(c, logs_gs.CheckIssueLogEntry))\n    self.assertEqual(child.issue_pattern, [])\n\n\nclass VmHasOpsAgentTest(GceStepTestBase):\n  \"\"\"Test VmHasOpsAgent step.\"\"\"\n\n  def test_instance_resolution_failure(self):\n    with op.operator_context(self.operator):\n      with mock.patch('gcpdiag.runbook.gce.util.ensure_instance_resolved',\n                      side_effect=runbook_exceptions.FailedStepError('err')):\n        step = generalized_steps.VmHasOpsAgent()\n        self.operator.set_step(step)\n        step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_subagent_check_with_metrics(self):\n    step = generalized_steps.VmHasOpsAgent()\n    metric_data = {\n        'a': {\n            'labels': {\n                'metric.version': 'google-cloud-ops-agent-metrics-1'\n            }\n        },\n        'b': {\n            'labels': {\n                'metric.version': 'google-cloud-ops-agent-logging-1'\n            }\n        }\n    }\n    # pylint: disable=protected-access\n    self.assertEqual(step._has_ops_agent_subagent(metric_data), {\n        'metrics_subagent_installed': True,\n        'logging_subagent_installed': True\n    })\n\n  def test_logging_agent_fail(self):\n    with op.operator_context(self.operator):\n      with mock.patch('gcpdiag.queries.logs.realtime_query', return_value=[]):\n        step = generalized_steps.VmHasOpsAgent()\n        step.check_metrics = False\n        self.operator.set_step(step)\n        step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n  def test_metrics_agent_fail(self):\n    with op.operator_context(self.operator):\n      with mock.patch('gcpdiag.queries.monitoring.query', return_value={}):\n        step = generalized_steps.VmHasOpsAgent()\n        step.check_logging = False\n        self.operator.set_step(step)\n        step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n  def test_subagent_check_no_metrics(self):\n    step = generalized_steps.VmHasOpsAgent()\n    # pylint: disable=protected-access\n    self.assertEqual(step._has_ops_agent_subagent(None), {\n        'metrics_subagent_installed': False,\n        'logging_subagent_installed': False\n    })\n\n  def test_init_with_vm_object(self):\n    with op.operator_context(self.operator):\n      with mock.patch('gcpdiag.queries.logs.realtime_query',\n                      return_value=[{\n                          'log': 'data'\n                      }]):\n        step = generalized_steps.VmHasOpsAgent()\n        step.vm = self.mock_instance\n        step.check_metrics = False\n        self.operator.set_step(step)\n        step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n\n  def test_logging_agent_ok(self):\n    with op.operator_context(self.operator):\n      with mock.patch('gcpdiag.queries.logs.realtime_query',\n                      return_value=[{\n                          'log': 'data'\n                      }]):\n        step = generalized_steps.VmHasOpsAgent()\n        step.check_metrics = False\n        self.operator.set_step(step)\n        step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n\n\nclass VmLifecycleStateTest(GceStepTestBase):\n  \"\"\"Test VmLifecycleState step.\"\"\"\n\n  def test_instance_resolution_failure(self):\n    with op.operator_context(self.operator):\n      with mock.patch('gcpdiag.runbook.gce.util.ensure_instance_resolved',\n                      side_effect=runbook_exceptions.FailedStepError('err')):\n        step = generalized_steps.VmLifecycleState()\n        self.operator.set_step(step)\n        step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_vm_not_found(self):\n    self.mock_gce_get_instance.return_value = None\n    with op.operator_context(self.operator):\n      step = generalized_steps.VmLifecycleState()\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_init_with_vm_object(self):\n    self.mock_instance.status = 'RUNNING'\n    with op.operator_context(self.operator):\n      step = generalized_steps.VmLifecycleState()\n      step.vm = self.mock_instance\n      step.expected_lifecycle_status = 'RUNNING'\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n\n  def test_running_state_ok(self):\n    self.mock_instance.status = 'RUNNING'\n    with op.operator_context(self.operator):\n      step = generalized_steps.VmLifecycleState()\n      step.expected_lifecycle_status = 'RUNNING'\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n\n  def test_non_running_state_failed(self):\n    self.mock_instance.status = 'TERMINATED'\n    with op.operator_context(self.operator):\n      step = generalized_steps.VmLifecycleState()\n      step.expected_lifecycle_status = 'RUNNING'\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n\nclass GceIamPolicyCheckTest(GceStepTestBase):\n  \"\"\"Test GceIamPolicyCheck step.\"\"\"\n\n  def test_gce_iam_policy_check_adds_child(self):\n    self.params[iam_flags.PRINCIPAL] = 'user:test@example.com'\n    self.params['roles'] = 'roles/viewer'\n    with op.operator_context(self.operator):\n      step = generalized_steps.GceIamPolicyCheck()\n      self.operator.set_step(step)\n      step.execute()\n    assert any(isinstance(c, iam_gs.IamPolicyCheck) for c in step.steps)\n\n  def test_iam_role_ref_resolution(self):\n    # Coverage for ref: in IAM roles\n    constants.TEST_ROLE = 'roles/owner'\n    self.params.update({\n        iam_flags.PRINCIPAL: 'u@g.com',\n        'roles': 'ref:TEST_ROLE'\n    })\n    with op.operator_context(self.operator):\n      step = generalized_steps.GceIamPolicyCheck()\n      self.operator.set_step(step)\n      step.execute()\n    child = next(c for c in step.steps if isinstance(c, iam_gs.IamPolicyCheck))\n    assert 'roles/owner' in child.roles\n    del constants.TEST_ROLE\n\n  def test_iam_permission_ref_resolution(self):\n    constants.TEST_PERMS = ['p1', 'p2']\n    self.params.update({\n        iam_flags.PRINCIPAL: 'u@g.com',\n        'permissions': 'ref:TEST_PERMS'\n    })\n    with op.operator_context(self.operator):\n      step = generalized_steps.GceIamPolicyCheck()\n      self.operator.set_step(step)\n      step.execute()\n    child = next(c for c in step.steps if isinstance(c, iam_gs.IamPolicyCheck))\n    self.assertEqual(child.permissions, {'p1', 'p2'})\n    del constants.TEST_PERMS\n\n  def test_gce_iam_policy_check_only_roles(self):\n    self.params[iam_flags.PRINCIPAL] = 'user:test@example.com'\n    self.params['roles'] = 'roles/viewer'\n    self.params.pop('permissions', None)\n    with op.operator_context(self.operator):\n      step = generalized_steps.GceIamPolicyCheck()\n      self.operator.set_step(step)\n      step.execute()\n    child = next(c for c in step.steps if isinstance(c, iam_gs.IamPolicyCheck))\n    self.assertEqual(child.roles, {'roles/viewer'})\n    self.assertIsNone(child.permissions)\n\n\nclass MigAutoscalingPolicyCheckTest(GceStepTestBase):\n  \"\"\"Test MigAutoscalingPolicyCheck step.\"\"\"\n\n  def test_get_instance_api_error_non_404(self):\n    err = apiclient.errors.HttpError(mock.Mock(status=500), b'server error')\n    with op.operator_context(self.operator):\n      with mock.patch('gcpdiag.queries.gce.get_instance', side_effect=err):\n        step = generalized_steps.MigAutoscalingPolicyCheck()\n        self.operator.set_step(step)\n        with self.assertRaises(utils.GcpApiError):\n          step.execute()\n\n  def test_missing_property_path(self):\n    self.mock_instance.created_by_mig = False\n    with op.operator_context(self.operator):\n      step = generalized_steps.MigAutoscalingPolicyCheck()\n      self.operator.set_step(step)\n      step.execute()\n    self.params['property_path'] = None\n    self.params['expected_value'] = 'v'\n    mock_mig = mock.Mock()\n    mock_mig.name = 'test-mig'\n    mock_mig.get.return_value = 'some_value'\n    self.mock_instance.created_by_mig = True\n    self.mock_instance.mig = mock_mig\n    with op.operator_context(self.operator):\n      step = generalized_steps.MigAutoscalingPolicyCheck()\n      self.operator.set_step(step)\n      with self.assertRaises(runbook_exceptions.MissingParameterError):\n        step.execute()\n\n  def test_missing_expected_value(self):\n    self.params['property_path'] = 'p'\n    self.params['expected_value'] = None\n    mock_mig = mock.Mock()\n    mock_mig.name = 'test-mig'\n    mock_mig.get.return_value = 'some_value'\n    self.mock_instance.created_by_mig = True\n    self.mock_instance.mig = mock_mig\n    with op.operator_context(self.operator):\n      step = generalized_steps.MigAutoscalingPolicyCheck()\n      self.operator.set_step(step)\n      with self.assertRaises(runbook_exceptions.MissingParameterError):\n        step.execute()\n\n  def test_bad_ref_expected_value(self):\n    self.params['property_path'] = 'p'\n    self.params['expected_value'] = 'ref:MISSING'\n    mock_mig = mock.Mock()\n    mock_mig.name = 'test-mig'\n    mock_mig.get.return_value = 'some_value'\n    self.mock_instance.created_by_mig = True\n    self.mock_instance.mig = mock_mig\n    with op.operator_context(self.operator):\n      step = generalized_steps.MigAutoscalingPolicyCheck()\n      self.operator.set_step(step)\n      with self.assertRaises(runbook_exceptions.InvalidParameterError):\n        step.execute()\n\n  def test_instance_resolution_failure(self):\n    with op.operator_context(self.operator):\n      with mock.patch('gcpdiag.queries.gce.get_instance', return_value=None):\n        step = generalized_steps.MigAutoscalingPolicyCheck()\n        self.operator.set_step(step)\n        step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_check_autoscaler_policy_ok(self):\n    self.params.update({\n        'property_path': 'autoscalingPolicy.mode',\n        'expected_value': 'ON',\n    })\n    mock_mig = mock.Mock()\n    mock_mig.name = 'test-mig'\n    mock_mig.zone = 'us-central1-a'\n    self.mock_instance.created_by_mig = True\n    self.mock_instance.mig = mock_mig\n    mock_autoscaler = mock.Mock()\n    mock_autoscaler.get.return_value = 'ON'\n    with op.operator_context(self.operator):\n      with mock.patch('gcpdiag.queries.gce.get_autoscaler',\n                      return_value=mock_autoscaler):\n        step = generalized_steps.MigAutoscalingPolicyCheck()\n        self.operator.set_step(step)\n        step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n    mock_autoscaler.get.assert_called_with('autoscalingPolicy.mode',\n                                           default=None)\n\n  def test_check_autoscaler_policy_404_fail(self):\n    self.params.update({\n        'property_path': 'autoscalingPolicy.mode',\n        'expected_value': 'ON',\n    })\n    mock_mig = mock.Mock()\n    mock_mig.name = 'test-mig'\n    mock_mig.zone = 'us-central1-a'\n    self.mock_instance.created_by_mig = True\n    self.mock_instance.mig = mock_mig\n    err = apiclient.errors.HttpError(mock.Mock(status=404), b'not found')\n    with op.operator_context(self.operator):\n      with mock.patch('gcpdiag.queries.gce.get_autoscaler', side_effect=err):\n        step = generalized_steps.MigAutoscalingPolicyCheck()\n        self.operator.set_step(step)\n        step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n  def test_check_policy_by_instance_ok(self):\n    self.params.update({\n        'property_path': 'some_property',\n        'expected_value': 'some_value',\n    })\n    mock_mig = mock.Mock()\n    mock_mig.name = 'test-mig'\n    mock_mig.get.return_value = 'some_value'\n    self.mock_instance.created_by_mig = True\n    self.mock_instance.mig = mock_mig\n    with op.operator_context(self.operator):\n      step = generalized_steps.MigAutoscalingPolicyCheck()\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n\n  def test_check_policy_by_instance_fail(self):\n    self.params.update({\n        'property_path': 'some_property',\n        'expected_value': 'other_value',\n    })\n    mock_mig = mock.Mock()\n    mock_mig.name = 'test-mig'\n    mock_mig.get.return_value = 'some_value'\n    self.mock_instance.created_by_mig = True\n    self.mock_instance.mig = mock_mig\n    with op.operator_context(self.operator):\n      step = generalized_steps.MigAutoscalingPolicyCheck()\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n  def test_instance_not_in_mig(self):\n    self.mock_instance.created_by_mig = False\n    with op.operator_context(self.operator):\n      step = generalized_steps.MigAutoscalingPolicyCheck()\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called()\n\n  def test_regional_mig_policy_ok(self):\n    self.params.update({\n        flags.INSTANCE_NAME: None,\n        flags.ZONE: None,\n        'mig_name': 'm',\n        'location': 'us-central1',\n        'property_path': 'p',\n        'expected_value': 'v'\n    })\n    mock_mig = mock.Mock()\n    mock_mig.region = 'us-central1'\n    mock_mig.zone = None\n    mock_mig.name = 'm'\n    mock_mig.get.return_value = 'v'\n    with op.operator_context(self.operator):\n      with mock.patch('gcpdiag.queries.gce.get_region_instance_group_manager',\n                      return_value=mock_mig):\n        step = generalized_steps.MigAutoscalingPolicyCheck()\n        self.operator.set_step(step)\n        step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n\n  def test_check_regional_autoscaler_policy_ok(self):\n    self.params.update({\n        flags.INSTANCE_NAME: None,\n        flags.ZONE: None,\n        'mig_name': 'regional-mig',\n        'location': 'us-central1',\n        'property_path': 'autoscalingPolicy.mode',\n        'expected_value': 'ON',\n    })\n    mock_mig = mock.Mock()\n    mock_mig.name = 'regional-mig'\n    mock_mig.region = 'us-central1'\n    mock_mig.zone = None\n    mock_autoscaler = mock.Mock()\n    mock_autoscaler.get.return_value = 'ON'\n    with op.operator_context(self.operator):\n      with (\n          mock.patch(\n              'gcpdiag.queries.gce.get_region_instance_group_manager',\n              return_value=mock_mig,\n          ),\n          mock.patch(\n              'gcpdiag.queries.gce.get_region_autoscaler',\n              return_value=mock_autoscaler,\n          ),\n      ):\n        step = generalized_steps.MigAutoscalingPolicyCheck()\n        self.operator.set_step(step)\n        step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n\n  def test_check_zonal_autoscaler_policy_ok(self):\n    self.params.update({\n        flags.INSTANCE_NAME: None,\n        flags.ZONE: None,\n        'mig_name': 'zonal-mig',\n        'location': 'us-central1-a',\n        'property_path': 'p',\n        'expected_value': 'v'\n    })\n    mock_mig = mock.Mock()\n    mock_mig.name = 'zonal-mig'\n    mock_mig.zone = 'us-central1-a'\n    mock_mig.get.return_value = 'v'\n    with op.operator_context(self.operator):\n      with mock.patch('gcpdiag.queries.gce.get_instance_group_manager',\n                      return_value=mock_mig):\n        step = generalized_steps.MigAutoscalingPolicyCheck()\n        self.operator.set_step(step)\n        step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n\n  def test_mig_location_missing_skipped(self):\n    self.params.update({\n        'property_path': 'some_property',\n        'expected_value': 'some_value',\n    })\n    mock_mig = mock.Mock()\n    mock_mig.name = 'test-mig'\n    mock_mig.zone = None\n    mock_mig.region = None\n    mock_mig.get.return_value = 'some_value'\n    self.mock_instance.created_by_mig = True\n    self.mock_instance.mig = mock_mig\n    with op.operator_context(self.operator):\n      step = generalized_steps.MigAutoscalingPolicyCheck()\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_mig_invalid_location_raises_error(self):\n    self.params.update({\n        flags.INSTANCE_NAME: None,\n        flags.ZONE: None,\n        'mig_name': 'm',\n        'location': 'invalid-location-format',\n        'property_path': 'p',\n        'expected_value': 'v'\n    })\n    with op.operator_context(self.operator):\n      step = generalized_steps.MigAutoscalingPolicyCheck()\n      self.operator.set_step(step)\n      with self.assertRaises(FileNotFoundError):\n        step.execute()\n\n\nclass VmSerialLogsCheckTest(GceStepTestBase):\n  \"\"\"Test VmSerialLogsCheck step.\"\"\"\n\n  def test_instance_resolution_failure(self):\n    with op.operator_context(self.operator):\n      with mock.patch('gcpdiag.runbook.gce.util.ensure_instance_resolved',\n                      side_effect=runbook_exceptions.FailedStepError('err')):\n        step = generalized_steps.VmSerialLogsCheck()\n        self.operator.set_step(step)\n        step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_vm_not_found(self):\n    self.mock_gce_get_instance.return_value = None\n    with op.operator_context(self.operator):\n      step = generalized_steps.VmSerialLogsCheck()\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_pattern_overrides(self):\n    self.params['template'] = 't'\n    self.params['positive_patterns'] = 'p1'\n    self.params['negative_patterns'] = 'n1'\n    with op.operator_context(self.operator):\n      with mock.patch('gcpdiag.queries.gce.get_instance_serial_port_output',\n                      return_value=mock.Mock(contents='n1 line')), \\\n          mock.patch('gcpdiag.runbook.gce.util.search_pattern_in_serial_logs',\n                     side_effect=[False, True]):\n        step = generalized_steps.VmSerialLogsCheck()\n        self.operator.set_step(step)\n        step.execute()\n    self.assertEqual(step.template, 't')\n    self.assertEqual(step.positive_pattern, ['p1'])\n    self.assertEqual(step.negative_pattern, ['n1'])\n    self.mock_interface.add_failed.assert_called_once()\n\n  def test_pattern_overrides_with_ref(self):\n    constants.TEST_P_PATTERNS = ['p1', 'p2']\n    constants.TEST_N_PATTERNS = ['n1']\n    self.params['positive_patterns'] = 'ref:TEST_P_PATTERNS'\n    self.params['negative_patterns'] = 'ref:TEST_N_PATTERNS'\n    with op.operator_context(self.operator):\n      with mock.patch('gcpdiag.queries.gce.get_instance_serial_port_output',\n                      return_value=mock.Mock(contents='n1 line')), \\\n          mock.patch('gcpdiag.runbook.gce.util.search_pattern_in_serial_logs',\n                     side_effect=[False, True]):\n        step = generalized_steps.VmSerialLogsCheck()\n        self.operator.set_step(step)\n        step.execute()\n    self.assertEqual(step.positive_pattern, ['p1', 'p2'])\n    self.assertEqual(step.negative_pattern, ['n1'])\n    self.mock_interface.add_failed.assert_called_once()\n    del constants.TEST_P_PATTERNS\n    del constants.TEST_N_PATTERNS\n\n  def test_init_with_vm_object(self):\n    with op.operator_context(self.operator):\n      with (\n          mock.patch(\n              'gcpdiag.queries.gce.get_instance_serial_port_output',\n              return_value=mock.Mock(contents='some serial log'),\n          ),\n          mock.patch(\n              'gcpdiag.runbook.gce.util.search_pattern_in_serial_logs',\n              return_value=True,\n          ),\n      ):\n        step = generalized_steps.VmSerialLogsCheck()\n        step.vm = self.mock_instance\n        step.positive_pattern = ['success']\n        self.operator.set_step(step)\n        step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n\n  def test_positive_pattern_ok(self):\n    with op.operator_context(self.operator):\n      with (\n          mock.patch(\n              'gcpdiag.queries.gce.get_instance_serial_port_output',\n              return_value=mock.Mock(contents='some serial log'),\n          ),\n          mock.patch(\n              'gcpdiag.runbook.gce.util.search_pattern_in_serial_logs',\n              return_value=True,\n          ),\n      ):\n        step = generalized_steps.VmSerialLogsCheck()\n        step.positive_pattern = ['success']\n        self.operator.set_step(step)\n        step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n\n  def test_negative_pattern_fail(self):\n    with op.operator_context(self.operator):\n      with (\n          mock.patch(\n              'gcpdiag.queries.gce.get_instance_serial_port_output',\n              return_value=mock.Mock(contents='error log'),\n          ),\n          mock.patch(\n              'gcpdiag.runbook.gce.util.search_pattern_in_serial_logs',\n              side_effect=[False, True],\n          ),\n      ):\n        step = generalized_steps.VmSerialLogsCheck()\n        step.positive_pattern = ['success']\n        step.negative_pattern = ['error']\n        self.operator.set_step(step)\n        step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n  def test_no_pattern_uncertain(self):\n    with op.operator_context(self.operator):\n      with (\n          mock.patch(\n              'gcpdiag.queries.gce.get_instance_serial_port_output',\n              return_value=mock.Mock(contents='some log'),\n          ),\n          mock.patch(\n              'gcpdiag.runbook.gce.util.search_pattern_in_serial_logs',\n              return_value=False,\n          ),\n      ):\n        step = generalized_steps.VmSerialLogsCheck()\n        step.positive_pattern = ['success']\n        step.negative_pattern = ['error']\n        self.operator.set_step(step)\n        step.execute()\n    self.mock_interface.add_uncertain.assert_called_once()\n\n  def test_positive_only_no_match_uncertain(self):\n    with op.operator_context(self.operator):\n      with (\n          mock.patch(\n              'gcpdiag.queries.gce.get_instance_serial_port_output',\n              return_value=mock.Mock(contents='some log'),\n          ),\n          mock.patch(\n              'gcpdiag.runbook.gce.util.search_pattern_in_serial_logs',\n              return_value=False,\n          ),\n      ):\n        step = generalized_steps.VmSerialLogsCheck()\n        step.positive_pattern = ['success']\n        self.operator.set_step(step)\n        step.execute()\n    self.mock_interface.add_uncertain.assert_called_once()\n\n  def test_negative_only_no_match_uncertain(self):\n    with op.operator_context(self.operator):\n      with (\n          mock.patch(\n              'gcpdiag.queries.gce.get_instance_serial_port_output',\n              return_value=mock.Mock(contents='some log'),\n          ),\n          mock.patch(\n              'gcpdiag.runbook.gce.util.search_pattern_in_serial_logs',\n              return_value=False,\n          ),\n      ):\n        step = generalized_steps.VmSerialLogsCheck()\n        step.negative_pattern = ['error']\n        self.operator.set_step(step)\n        step.execute()\n    self.mock_interface.add_uncertain.assert_called_once()\n\n  def test_no_logs_skipped(self):\n    with op.operator_context(self.operator):\n      with mock.patch('gcpdiag.queries.gce.get_instance_serial_port_output',\n                      return_value=None):\n        step = generalized_steps.VmSerialLogsCheck()\n        self.operator.set_step(step)\n        step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_serial_console_file_read_ok(self):\n    # Create a dummy file to read\n    with tempfile.NamedTemporaryFile(mode='w', encoding='utf-8') as f:\n      f.write('success line')\n      f.flush()\n      with op.operator_context(self.operator):\n        with mock.patch(\n            'gcpdiag.runbook.gce.util.search_pattern_in_serial_logs',\n            return_value=True,\n        ):\n          step = generalized_steps.VmSerialLogsCheck()\n          step.positive_pattern = ['success']\n          step.serial_console_file = f.name\n          self.operator.set_step(step)\n          step.execute()\n      self.mock_interface.add_ok.assert_called_once()\n\n  def test_serial_console_multiple_files(self):\n    with tempfile.NamedTemporaryFile(\n        mode='w', encoding='utf-8') as f1, tempfile.NamedTemporaryFile(\n            mode='w', encoding='utf-8') as f2:\n      f1.write('success line 1')\n      f1.flush()\n      f2.write('success line 2')\n      f2.flush()\n      with op.operator_context(self.operator):\n        with mock.patch(\n            'gcpdiag.runbook.gce.util.search_pattern_in_serial_logs',\n            return_value=True,\n        ):\n          step = generalized_steps.VmSerialLogsCheck()\n          step.positive_pattern = ['success']\n          step.serial_console_file = f'{f1.name},{f2.name}'\n          self.operator.set_step(step)\n          step.execute()\n      self.mock_interface.add_ok.assert_called_once()\n\n  def test_positive_pattern_and_operator_ok(self):\n    with op.operator_context(self.operator):\n      with (\n          mock.patch(\n              'gcpdiag.queries.gce.get_instance_serial_port_output',\n              return_value=mock.Mock(contents='success1 success2'),\n          ),\n          mock.patch(\n              'gcpdiag.runbook.gce.util.search_pattern_in_serial_logs',\n              return_value=True,\n          ),\n      ):\n        step = generalized_steps.VmSerialLogsCheck()\n        step.positive_pattern = ['success1', 'success2']\n        step.positive_pattern_operator = 'AND'\n        self.operator.set_step(step)\n        step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n\n  def test_parameter_overrides_only_template(self):\n    self.params['template'] = 't'\n    with op.operator_context(self.operator):\n      with mock.patch('gcpdiag.queries.gce.get_instance_serial_port_output',\n                      return_value=mock.Mock(contents='some log')), \\\n          mock.patch('gcpdiag.runbook.gce.util.search_pattern_in_serial_logs',\n                     return_value=False):\n        step = generalized_steps.VmSerialLogsCheck()\n        self.operator.set_step(step)\n        step.execute()\n    self.assertEqual(step.template, 't')\n\n\nclass VmMetadataCheckTest(GceStepTestBase):\n  \"\"\"Test VmMetadataCheck step.\"\"\"\n\n  def test_instance_resolution_failure(self):\n    self.params.update({\n        'metadata_key': 'k',\n        'expected_value': 'v',\n    })\n    with op.operator_context(self.operator):\n      with mock.patch('gcpdiag.runbook.gce.util.ensure_instance_resolved',\n                      side_effect=runbook_exceptions.FailedStepError('err')):\n        step = generalized_steps.VmMetadataCheck()\n        self.operator.set_step(step)\n        step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_expected_value_ref_resolution_fail(self):\n    self.params.update({\n        'metadata_key': 'k',\n        'expected_value': 'ref:MISSING_VALUE',\n    })\n    with op.operator_context(self.operator):\n      step = generalized_steps.VmMetadataCheck()\n      self.operator.set_step(step)\n      with self.assertRaises(runbook_exceptions.InvalidParameterError):\n        step.execute()\n\n  def test_init_with_vm_object(self):\n    self.params.update({\n        'metadata_key': 'enable-oslogin',\n        'expected_value': 'true',\n    })\n    self.mock_instance.get_metadata.return_value = 'true'\n    with op.operator_context(self.operator):\n      step = generalized_steps.VmMetadataCheck()\n      step.vm = self.mock_instance\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n\n  def test_metadata_bool_true_ok(self):\n    self.params.update({\n        'metadata_key': 'enable-oslogin',\n        'expected_value': 'true',\n    })\n    self.mock_instance.get_metadata.return_value = 'true'\n    with op.operator_context(self.operator):\n      step = generalized_steps.VmMetadataCheck()\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n\n  def test_metadata_bool_fail(self):\n    self.params.update({\n        'metadata_key': 'enable-oslogin',\n        'expected_value': 'true',\n    })\n    self.mock_instance.get_metadata.return_value = 'false'\n    with op.operator_context(self.operator):\n      step = generalized_steps.VmMetadataCheck()\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n  def test_bool_expected_false_ok(self):\n    self.params.update({\n        'metadata_key': 'enable-oslogin',\n        'expected_value': 'false',\n    })\n    self.mock_instance.get_metadata.return_value = 'false'\n    with op.operator_context(self.operator):\n      step = generalized_steps.VmMetadataCheck()\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n\n  def test_metadata_string_ok(self):\n    self.params.update({\n        'metadata_key': 'startup-script',\n        'expected_value': 'echo hello',\n    })\n    self.mock_instance.get_metadata.return_value = 'echo hello'\n    with op.operator_context(self.operator):\n      step = generalized_steps.VmMetadataCheck()\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n\n  def test_metadata_numeric_comparison(self):\n    constants.TEST_NUM = 10.5\n    self.params.update({'metadata_key': 'k', 'expected_value': 'ref:TEST_NUM'})\n    self.mock_instance.get_metadata.return_value = 10.50000001\n    with op.operator_context(self.operator):\n      step = generalized_steps.VmMetadataCheck()\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n    del constants.TEST_NUM\n\n  def test_metadata_api_error_404(self):\n    self.params.update({'metadata_key': 'k', 'expected_value': 'v'})\n    err = apiclient.errors.HttpError(mock.Mock(status=404), b'not found')\n    self.mock_gce_get_instance.side_effect = err\n    with op.operator_context(self.operator):\n      step = generalized_steps.VmMetadataCheck()\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_metadata_key_ref_resolution(self):\n    constants.TEST_KEY = 'startup-script'\n    self.params.update({\n        'metadata_key': 'ref:TEST_KEY',\n        'expected_value': 'echo hello',\n    })\n    self.mock_instance.get_metadata.return_value = 'echo hello'\n    with op.operator_context(self.operator):\n      step = generalized_steps.VmMetadataCheck()\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n    self.mock_instance.get_metadata.assert_called_with('startup-script')\n    del constants.TEST_KEY\n\n  def test_metadata_key_ref_resolution_fail(self):\n    self.params.update({\n        'metadata_key': 'ref:MISSING_KEY',\n        'expected_value': 'echo hello',\n    })\n    self.mock_instance.get_metadata.return_value = 'echo hello'\n    with op.operator_context(self.operator):\n      step = generalized_steps.VmMetadataCheck()\n      self.operator.set_step(step)\n      with self.assertRaises(AttributeError):\n        step.execute()\n\n  def test_metadata_api_error_non_404(self):\n    self.params.update({'metadata_key': 'k', 'expected_value': 'v'})\n    err = apiclient.errors.HttpError(mock.Mock(status=500), b'server error')\n    self.mock_gce_get_instance.side_effect = err\n    with op.operator_context(self.operator):\n      step = generalized_steps.VmMetadataCheck()\n      self.operator.set_step(step)\n      with self.assertRaises(utils.GcpApiError):\n        step.execute()\n\n  def test_missing_metadata_key_raises_error(self):\n    self.params.update({'expected_value': 'v'})\n    with op.operator_context(self.operator):\n      step = generalized_steps.VmMetadataCheck()\n      self.operator.set_step(step)\n      with self.assertRaises(runbook_exceptions.MissingParameterError):\n        step.execute()\n\n  def test_missing_expected_value_raises_error(self):\n    self.params.update({'metadata_key': 'k'})\n    with op.operator_context(self.operator):\n      step = generalized_steps.VmMetadataCheck()\n      self.operator.set_step(step)\n      with self.assertRaises(runbook_exceptions.MissingParameterError):\n        step.execute()\n\n\nclass InstancePropertyCheckTest(GceStepTestBase):\n  \"\"\"Test InstancePropertyCheck step.\"\"\"\n\n  def test_invalid_property_path(self):\n    self.params.update({\n        'property_path': 'invalid_property',\n        'expected_value': 'RUNNING',\n    })\n    self.mock_instance.status = 'RUNNING'\n    with op.operator_context(self.operator):\n      step = generalized_steps.InstancePropertyCheck()\n      self.operator.set_step(step)\n      with self.assertRaises(ValueError):\n        step.execute()\n\n  def test_instance_resolution_failure(self):\n    with op.operator_context(self.operator):\n      with mock.patch('gcpdiag.runbook.gce.util.ensure_instance_resolved',\n                      side_effect=runbook_exceptions.FailedStepError('err')):\n        step = generalized_steps.InstancePropertyCheck()\n        self.operator.set_step(step)\n        step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_vm_not_found(self):\n    self.params['property_path'] = 'status'\n    self.params['expected_value'] = 'RUNNING'\n    err = apiclient.errors.HttpError(mock.Mock(status=404), b'not found')\n    self.mock_gce_get_instance.side_effect = err\n    with op.operator_context(self.operator):\n      step = generalized_steps.InstancePropertyCheck()\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n    self.params.pop('property_path', None)\n    self.params.pop('expected_value', None)\n\n  def test_init_with_vm_object(self):\n    self.params.update({\n        'property_path': 'status',\n        'expected_value': 'RUNNING',\n    })\n    self.mock_instance.status = 'RUNNING'\n    with op.operator_context(self.operator):\n      step = generalized_steps.InstancePropertyCheck()\n      step.vm = self.mock_instance\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n\n  def test_property_eq_ok(self):\n    self.params.update({\n        'property_path': 'status',\n        'expected_value': 'RUNNING',\n    })\n    self.mock_instance.status = 'RUNNING'\n    with op.operator_context(self.operator):\n      step = generalized_steps.InstancePropertyCheck()\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n\n  def test_property_ne_fail(self):\n    self.params.update({\n        'property_path': 'status',\n        'expected_value': 'TERMINATED',\n        'operator': 'ne'\n    })\n    self.mock_instance.status = 'TERMINATED'\n    with op.operator_context(self.operator):\n      step = generalized_steps.InstancePropertyCheck()\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n  def test_property_path_ref_resolution(self):\n    constants.STATUS_PROP = 'status'\n    self.params.update({\n        'property_path': 'ref:STATUS_PROP',\n        'expected_value': 'RUNNING',\n    })\n    self.mock_instance.status = 'RUNNING'\n    with op.operator_context(self.operator):\n      step = generalized_steps.InstancePropertyCheck()\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n    del constants.STATUS_PROP\n\n  def test_property_matches_ok(self):\n    self.params.update({\n        'property_path': 'name',\n        'expected_value': r'test-.+',\n        'operator': 'matches',\n    })\n    self.mock_instance.name = 'test-instance'\n    with op.operator_context(self.operator):\n      step = generalized_steps.InstancePropertyCheck()\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n\n  def test_property_matches_list_ok(self):\n    self.params.update({\n        'property_path': 'boot_disk_licenses',\n        'expected_value': r'rhel-8',\n        'operator': 'matches',\n    })\n    self.mock_instance.boot_disk_licenses = ['rhel-8-sap', 'other-license']\n    with op.operator_context(self.operator):\n      step = generalized_steps.InstancePropertyCheck()\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n\n  def test_property_contains_list_ok(self):\n    self.params.update({\n        'property_path': 'boot_disk_licenses',\n        'expected_value': 'rhel-8-sap',\n        'operator': 'contains',\n    })\n    self.mock_instance.boot_disk_licenses = ['rhel-8-sap', 'other-license']\n    with op.operator_context(self.operator):\n      step = generalized_steps.InstancePropertyCheck()\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n\n  def test_get_instance_api_error_non_404(self):\n    self.params.update({'property_path': 'status', 'expected_value': 'RUNNING'})\n    err = apiclient.errors.HttpError(mock.Mock(status=500), b'server error')\n    self.mock_gce_get_instance.side_effect = err\n    with op.operator_context(self.operator):\n      step = generalized_steps.InstancePropertyCheck()\n      self.operator.set_step(step)\n      with self.assertRaises(utils.GcpApiError):\n        step.execute()\n\n  def test_missing_property_path_raises_error(self):\n    self.params.pop('property_path', None)\n    self.params.update({'expected_value': 'v'})\n    with op.operator_context(self.operator):\n      step = generalized_steps.InstancePropertyCheck()\n      step.property_path = None\n      self.operator.set_step(step)\n      with self.assertRaises(runbook_exceptions.MissingParameterError):\n        step.execute()\n\n  def test_missing_expected_value_raises_error(self):\n    self.params.pop('expected_value', None)\n    self.params.update({'property_path': 'status'})\n    with op.operator_context(self.operator):\n      step = generalized_steps.InstancePropertyCheck()\n      step.expected_value = None\n      self.operator.set_step(step)\n      with self.assertRaises(runbook_exceptions.MissingParameterError):\n        step.execute()\n\n\nclass StepParameterResolutionTest(GceStepTestBase):\n  \"\"\"Tests focusing on parameter resolution and 'vm not found' paths.\"\"\"\n\n  def test_step_parameter_override(self):\n    self.params['property_path'] = 'status'\n    self.params['expected_value'] = 'RUNNING'\n    self.mock_instance.status = 'RUNNING'\n    with op.operator_context(self.operator):\n      step = generalized_steps.InstancePropertyCheck()\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n    self.params.pop('property_path', None)\n    self.params.pop('expected_value', None)\n\n  def test_step_parameter_ref_resolution_override(self):\n    constants.TEST_VALUE = 'RUNNING'\n    self.params['property_path'] = 'status'\n    self.params['expected_value'] = 'ref:TEST_VALUE'\n    self.mock_instance.status = 'RUNNING'\n    with op.operator_context(self.operator):\n      step = generalized_steps.InstancePropertyCheck()\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n    self.params.pop('property_path', None)\n    self.params.pop('expected_value', None)\n    del constants.TEST_VALUE\n\n  def test_vm_not_found_skips(self):\n    # INSTANCE_ID in self.params prevents AttributeError in resolution logic.\n    self.mock_gce_get_instance.return_value = None\n    with op.operator_context(self.operator):\n      step = generalized_steps.VmLifecycleState()\n      step.expected_lifecycle_status = 'RUNNING'\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n    _, kwargs = self.mock_interface.add_skipped.call_args\n    self.assertIn('not found in project', kwargs['reason'])\n\n\nclass ExtendedEdgeCaseTest(GceStepTestBase):\n  \"\"\"Tests for specific edge cases in logic flow.\"\"\"\n\n  def test_mig_autoscaling_policy_missing_mig(self):\n    self.mock_instance.created_by_mig = True\n    self.mock_instance.mig = None  # Trigger AttributeError branch\n    self.params.update({'property_path': 'foo', 'expected_value': 'bar'})\n    with op.operator_context(self.operator):\n      step = generalized_steps.MigAutoscalingPolicyCheck()\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called()\n"
  },
  {
    "path": "gcpdiag/runbook/gce/guestos_bootup.py",
    "content": "# Copyright 2025 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Guest OS boot-up runbook.\"\"\"\n\nimport mimetypes\n\nimport googleapiclient.errors\n\nfrom gcpdiag import runbook\nfrom gcpdiag.queries import crm, gce\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.gce import constants as gce_const\nfrom gcpdiag.runbook.gce import flags\nfrom gcpdiag.runbook.gce import generalized_steps as gce_gs\n\n\nclass GuestosBootup(runbook.DiagnosticTree):\n  \"\"\" Google Compute Engine VM Guest OS boot-up runbook.\n\n    This runbook is designed to investigate the various boot-up stages of a Linux or Windows Guest\n    OS running on Google Compute Engine. It is intended to help you identify and troubleshoot issues\n    that may arise during the boot process. The runbook provides a structured approach to resolve\n    issues.\n\n    Key Investigation Areas:\n\n    Boot Issues:\n        - Check for Boot issues happening due to Kernel panics\n        - Check for GRUB related issues.\n        - Check if system failed to find boot disk.\n        - Check if Filesystem corruption is causing issues with system boot.\n        - Check if \"/\" Filesystem consumption is causing issues with system boot.\n\n    Cloud-init checks:\n        - Check if cloud-init has initialised or started.\n        - Check if NIC has received the IP.\n\n    Network related issues:\n        - Check if metadata server became unreachable since last boot.\n        - Check if there are any time sync related errors.\n\n    Google Guest Agent checks:\n        - Check if there are logs related to successful startup of Google Guest Agent.\n  \"\"\"\n  parameters = {\n      flags.PROJECT_ID: {\n          'type': str,\n          'help': 'The Project ID associated with the VM',\n          'required': True\n      },\n      flags.INSTANCE_NAME: {\n          'type': str,\n          'help': 'The name of the VM',\n          'required': True\n      },\n      flags.INSTANCE_ID: {\n          'type': str,\n          'help': 'The instance-id of the VM'\n      },\n      flags.ZONE: {\n          'type': str,\n          'help': 'The Google Cloud zone where the VM is located.',\n          'required': True\n      },\n      flags.SERIAL_CONSOLE_FILE: {\n          'type': str,\n          'ignorecase': True,\n          'help': 'Absolute path of files contailing the Serial console logs,'\n                  ' in case if gcpdiag is not able to reach the VM Serial logs.'\n                  ' i.e -p serial_console_file=\"filepath1,filepath2\" ',\n      }\n  }\n\n  def build_tree(self):\n    \"\"\"Construct the diagnostic tree with appropriate steps.\"\"\"\n    start = GuestosBootupStart()\n    self.add_start(start)\n    # consider leverage LLM to perform anomaly detection\n    # or other advanced analysis on serial logs within the VM\n    # Check for Boot related issues\n    kernel_panic = gce_gs.VmSerialLogsCheck()\n    kernel_panic.project_id = op.get(flags.PROJECT_ID)\n    kernel_panic.zone = op.get(flags.ZONE)\n    kernel_panic.instance_name = op.get(flags.INSTANCE_NAME)\n    kernel_panic.serial_console_file = op.get(flags.SERIAL_CONSOLE_FILE)\n    kernel_panic.template = 'vm_serial_log::kernel_panic'\n    kernel_panic.negative_pattern = gce_const.KERNEL_PANIC_LOGS\n    self.add_step(parent=start, child=kernel_panic)\n\n    # Checking for Filesystem corruption related errors\n    fs_corruption = gce_gs.VmSerialLogsCheck()\n    fs_corruption.project_id = op.get(flags.PROJECT_ID)\n    fs_corruption.zone = op.get(flags.ZONE)\n    fs_corruption.instance_name = op.get(flags.INSTANCE_NAME)\n    fs_corruption.serial_console_file = op.get(flags.SERIAL_CONSOLE_FILE)\n    fs_corruption.template = 'vm_serial_log::linux_fs_corruption'\n    fs_corruption.negative_pattern = gce_const.FS_CORRUPTION_MSG\n    self.add_step(parent=start, child=fs_corruption)\n\n    #Checking for Cloud-init related issues\n    cloudinit_issues = CloudInitChecks()\n    self.add_step(parent=start, child=cloudinit_issues)\n\n    # Checking for network related errors\n    network_issue = gce_gs.VmSerialLogsCheck()\n    network_issue.project_id = op.get(flags.PROJECT_ID)\n    network_issue.zone = op.get(flags.ZONE)\n    network_issue.instance_name = op.get(flags.INSTANCE_NAME)\n    network_issue.serial_console_file = op.get(flags.SERIAL_CONSOLE_FILE)\n    network_issue.template = 'vm_serial_log::network_errors'\n    network_issue.negative_pattern = gce_const.NETWORK_ERRORS\n    self.add_step(parent=start, child=network_issue)\n\n    # Check for Guest Agent status\n    guest_agent_check = gce_gs.VmSerialLogsCheck()\n    guest_agent_check.project_id = op.get(flags.PROJECT_ID)\n    guest_agent_check.zone = op.get(flags.ZONE)\n    guest_agent_check.instance_name = op.get(flags.INSTANCE_NAME)\n    guest_agent_check.serial_console_file = op.get(flags.SERIAL_CONSOLE_FILE)\n    guest_agent_check.template = 'vm_serial_log::guest_agent'\n    guest_agent_check.positive_pattern = gce_const.GUEST_AGENT_STATUS_MSG\n    guest_agent_check.negative_pattern = gce_const.GUEST_AGENT_FAILED_MSG\n    self.add_step(parent=start, child=guest_agent_check)\n    self.add_end(runbook.EndStep())\n\n\nclass GuestosBootupStart(runbook.StartStep):\n  \"\"\"Fetches VM details and validates the instance state.\n\n  This step retrieves the VM instance details based on the provided project ID,\n  zone, and instance name. It checks if the VM is running and updates the\n  instance ID or name if missing. Additionally, it performs sanity checks on\n  the provided serial console log files to ensure they are valid plain text files.\n  \"\"\"\n\n  template = 'vm_attributes::running'\n\n  def execute(self):\n    \"\"\"Fetching VM details\"\"\"\n\n    project = crm.get_project(op.get(flags.PROJECT_ID))\n    try:\n      vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID),\n                            zone=op.get(flags.ZONE),\n                            instance_name=op.get(flags.INSTANCE_NAME))\n    except googleapiclient.errors.HttpError:\n      op.add_skipped(\n          project,\n          reason=('Instance {} does not exist in zone {} or project {}').format(\n              op.get(flags.INSTANCE_NAME), op.get(flags.ZONE),\n              op.get(flags.PROJECT_ID)))\n    else:\n      if vm and vm.is_running:\n        # Check for instance id and instance name\n        if not op.get(flags.INSTANCE_ID):\n          op.put(flags.INSTANCE_ID, vm.id)\n        if not op.get(flags.INSTANCE_NAME):\n          op.put(flags.INSTANCE_NAME, vm.name)\n      else:\n        op.add_failed(vm,\n                      reason=op.prep_msg(op.FAILURE_REASON,\n                                         full_resource_path=vm.full_path,\n                                         status=vm.status),\n                      remediation=op.prep_msg(op.FAILURE_REMEDIATION,\n                                              full_resource_path=vm.full_path,\n                                              status=vm.status))\n\n    # file sanity checks\n    if op.get(flags.SERIAL_CONSOLE_FILE):\n      for file in op.get(flags.SERIAL_CONSOLE_FILE).split(','):\n        try:\n          with open(file, 'rb') as f:\n            results = mimetypes.guess_type(file)[0]\n            if results and not results.startswith('text/'):\n              # Peek at content for further clues\n              content_start = f.read(1024)  # Read a small chunk\n              # Check for gzip and xz magic number (first two bytes)\n              if content_start.startswith(\n                  b'\\x1f\\x8b') or content_start.startswith(b'\\xfd'):\n                op.add_skipped(\n                    vm,\n                    reason=('File {} appears to be compressed, not plain text.'\n                           ).format(file))\n              else:\n                # If not gzip or tar, try simple text encoding detection (UTF-8, etc.)\n                try:\n                  content_start.decode()\n                except UnicodeDecodeError:\n                  op.add_skipped(\n                      vm,\n                      reason=('File {} does not appear to be plain text.'\n                             ).format(file))\n\n        except FileNotFoundError:\n          op.add_skipped(\n              vm,\n              reason=('The file {} does not exists. Please verify if '\n                      'you have provided the correct absolute file path'\n                     ).format(file))\n\n\nclass CloudInitChecks(runbook.CompositeStep):\n  \"\"\"Cloud init related checks\"\"\"\n\n  def execute(self):\n    \"\"\"Cloud init related checks\"\"\"\n    ubuntu_licenses = gce.get_gce_public_licences('ubuntu-os-cloud')\n    ubuntu_pro_licenses = gce.get_gce_public_licences('ubuntu-os-pro-cloud')\n    licenses = ubuntu_licenses + ubuntu_pro_licenses\n    vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID),\n                          zone=op.get(flags.ZONE),\n                          instance_name=op.get(flags.INSTANCE_NAME))\n    if vm.check_license(licenses):\n      # Checking for Cloud init startup log\n      cloud_init_startup_check = gce_gs.VmSerialLogsCheck()\n      cloud_init_startup_check.project_id = op.get(flags.PROJECT_ID)\n      cloud_init_startup_check.zone = op.get(flags.ZONE)\n      cloud_init_startup_check.instance_name = op.get(flags.INSTANCE_NAME)\n      cloud_init_startup_check.serial_console_file = op.get(\n          flags.SERIAL_CONSOLE_FILE)\n      cloud_init_startup_check.template = 'vm_serial_log::cloud_init_startup_check'\n      cloud_init_startup_check.positive_pattern = gce_const.CLOUD_INIT_STARTUP_PATTERN\n      self.add_child(cloud_init_startup_check)\n\n      # Checking if NIC has received IP\n      cloud_init_check = gce_gs.VmSerialLogsCheck()\n      cloud_init_check.template = 'vm_serial_log::cloud_init'\n      cloud_init_check.project_id = op.get(flags.PROJECT_ID)\n      cloud_init_check.zone = op.get(flags.ZONE)\n      cloud_init_check.instance_name = op.get(flags.INSTANCE_NAME)\n      cloud_init_check.serial_console_file = op.get(flags.SERIAL_CONSOLE_FILE)\n      cloud_init_check.negative_pattern = gce_const.CLOUD_INIT_NEGATIVE_PATTERN\n      cloud_init_check.positive_pattern = gce_const.CLOUD_INIT_POSITIVE_PATTERN\n      self.add_child(cloud_init_check)\n    else:\n      op.add_skipped(\n          vm, reason='This VM is not Ubuntu or it does not uses cloud-init')\n"
  },
  {
    "path": "gcpdiag/runbook/gce/guestos_bootup_test.py",
    "content": "# Copyright 2025 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test class for gce/GuestosBootup.\"\"\"\n\nimport datetime\nimport unittest\nfrom unittest import mock\n\nimport googleapiclient.errors\n\nfrom gcpdiag import config, runbook\nfrom gcpdiag.queries import gce as gce_queries\nfrom gcpdiag.runbook import gce, op, snapshot_test_base\nfrom gcpdiag.runbook.gce import flags, guestos_bootup\n\n\nclass MockMessage:\n  \"\"\"Mock messages for testing.\"\"\"\n\n  def get_msg(self, key, **kwargs):\n    del kwargs\n    return f'{key}'\n\n\nclass BootupStepTestBase(unittest.TestCase):\n  \"\"\"Base class for bootup tests.\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    self.mock_op_get = self.enterContext(mock.patch('gcpdiag.runbook.op.get'))\n    self.mock_op_put = self.enterContext(mock.patch('gcpdiag.runbook.op.put'))\n    self.mock_op_add_ok = self.enterContext(\n        mock.patch('gcpdiag.runbook.op.add_ok'))\n    self.mock_op_add_failed = self.enterContext(\n        mock.patch('gcpdiag.runbook.op.add_failed'))\n    self.mock_op_add_skipped = self.enterContext(\n        mock.patch('gcpdiag.runbook.op.add_skipped'))\n    self.mock_gce_get_instance = self.enterContext(\n        mock.patch('gcpdiag.queries.gce.get_instance'))\n    self.mock_crm_get_project = self.enterContext(\n        mock.patch('gcpdiag.queries.crm.get_project', return_value=mock.Mock()))\n\n    self.mock_instance = mock.Mock(spec=gce_queries.Instance)\n    self.mock_instance.project_id = 'test-project'\n    self.mock_instance.zone = 'us-central1-a'\n    self.mock_instance.name = 'test-instance'\n    self.mock_instance.id = '12345'\n    self.mock_instance.is_running = True\n    self.mock_gce_get_instance.return_value = self.mock_instance\n\n    self.params = {\n        flags.PROJECT_ID: 'test-project',\n        flags.ZONE: 'us-central1-a',\n        flags.INSTANCE_NAME: 'test-instance',\n        flags.INSTANCE_ID: None,\n        flags.SERIAL_CONSOLE_FILE: None,\n        flags.START_TIME: datetime.datetime(2025, 10, 27),\n        flags.END_TIME: datetime.datetime(2025, 10, 28),\n    }\n    self.mock_op_get.side_effect = lambda key, default=None: self.params.get(\n        key, default)\n\n    # Setup operator context\n    mock_interface = mock.Mock()\n    operator = op.Operator(mock_interface)\n    operator.messages = MockMessage()\n    operator.parameters = self.params\n    operator.run_id = 'test-run-id'\n    mock_step = mock.Mock()\n    mock_step.execution_id = 'test-step-id'\n    self.enterContext(\n        mock.patch.object(op.Operator,\n                          'step',\n                          new_callable=mock.PropertyMock,\n                          return_value=mock_step))\n    self.enterContext(op.operator_context(operator))\n\n\nclass GuestosBootupStartTest(BootupStepTestBase):\n\n  def test_instance_id_missing(self):\n    self.mock_instance.is_running = True\n    self.params[flags.INSTANCE_ID] = None\n    step = guestos_bootup.GuestosBootupStart()\n    step.execute()\n    self.mock_op_put.assert_any_call(flags.INSTANCE_ID, '12345')\n\n  def test_instance_name_missing(self):\n    self.mock_instance.is_running = True\n    self.params[flags.INSTANCE_NAME] = None\n    # Must provide ID if name is missing for realistic resolution\n    self.params[flags.INSTANCE_ID] = '12345'\n    step = guestos_bootup.GuestosBootupStart()\n    step.execute()\n    self.mock_op_put.assert_any_call(flags.INSTANCE_NAME, 'test-instance')\n\n  def test_instance_not_found(self):\n    self.mock_gce_get_instance.side_effect = googleapiclient.errors.HttpError(\n        mock.Mock(status=404), b'not found')\n    step = guestos_bootup.GuestosBootupStart()\n    step.execute()\n    self.mock_op_add_skipped.assert_called_once()\n\n  def test_instance_not_running(self):\n    self.mock_instance.is_running = False\n    self.mock_instance.status = 'TERMINATED'\n    step = guestos_bootup.GuestosBootupStart()\n    step.execute()\n    self.mock_op_add_failed.assert_called_once()\n\n  def test_serial_file_not_found(self):\n    self.params[flags.SERIAL_CONSOLE_FILE] = 'nonexistent.log'\n    with mock.patch('builtins.open', side_effect=FileNotFoundError):\n      step = guestos_bootup.GuestosBootupStart()\n      step.execute()\n      self.mock_op_add_skipped.assert_called_once()\n      self.assertIn('does not exists',\n                    self.mock_op_add_skipped.call_args[1]['reason'])\n\n  def test_serial_file_compressed(self):\n    self.params[flags.SERIAL_CONSOLE_FILE] = 'compressed.log.gz'\n    m = mock.mock_open(read_data=b'\\x1f\\x8b' + b' compressed data')\n    with (\n        mock.patch('builtins.open', m),\n        mock.patch('mimetypes.guess_type',\n                   return_value=('application/gzip', 'gzip')),\n    ):\n      step = guestos_bootup.GuestosBootupStart()\n      step.execute()\n      self.mock_op_add_skipped.assert_called_once()\n      self.assertIn(\n          'appears to be compressed',\n          self.mock_op_add_skipped.call_args[1]['reason'],\n      )\n\n  def test_serial_file_not_plain_text(self):\n    self.params[flags.SERIAL_CONSOLE_FILE] = 'binary.log'\n    # 0xff is invalid in utf-8\n    m = mock.mock_open(read_data=b'\\x01\\x02\\xff\\xfe')\n    with (\n        mock.patch('builtins.open', m),\n        mock.patch(\n            'mimetypes.guess_type',\n            return_value=('application/octet-stream', None),\n        ),\n    ):\n      step = guestos_bootup.GuestosBootupStart()\n      step.execute()\n      self.mock_op_add_skipped.assert_called_once()\n      self.assertIn(\n          'does not appear to be plain text',\n          self.mock_op_add_skipped.call_args[1]['reason'],\n      )\n\n  def test_serial_valid_file(self):\n    self.params[flags.SERIAL_CONSOLE_FILE] = 'valid.log'\n    m = mock.mock_open(read_data=b'plain text log')\n    with (\n        mock.patch('builtins.open', m),\n        mock.patch('mimetypes.guess_type', return_value=('text/plain', None)),\n    ):\n      step = guestos_bootup.GuestosBootupStart()\n      step.execute()\n      self.mock_op_add_skipped.assert_not_called()\n\n\nclass CloudInitChecksTest(BootupStepTestBase):\n\n  def setUp(self):\n    super().setUp()\n    self.mock_gce_get_gce_public_licences = self.enterContext(\n        mock.patch('gcpdiag.queries.gce.get_gce_public_licences',\n                   return_value=['license1']))\n    self.mock_vm_serial_logs_check = self.enterContext(\n        mock.patch('gcpdiag.runbook.gce.generalized_steps.VmSerialLogsCheck'))\n    self.mock_add_child = self.enterContext(\n        mock.patch(\n            'gcpdiag.runbook.gce.guestos_bootup.CloudInitChecks.add_child'))\n\n  def test_ubuntu_license_present(self):\n    self.mock_instance.check_license.return_value = True\n    step = guestos_bootup.CloudInitChecks()\n    step.execute()\n    self.mock_instance.check_license.assert_called_once()\n    self.assertEqual(self.mock_add_child.call_count, 2)\n    self.mock_op_add_skipped.assert_not_called()\n\n  def test_ubuntu_license_not_present(self):\n    self.mock_instance.check_license.return_value = False\n    step = guestos_bootup.CloudInitChecks()\n    step.execute()\n    self.mock_instance.check_license.assert_called_once()\n    self.mock_add_child.assert_not_called()\n    self.mock_op_add_skipped.assert_called_once()\n\n\nclass GuestosBootupBuildTreeTest(unittest.TestCase):\n\n  def test_build_tree(self):\n    self.mock_op_get = self.enterContext(mock.patch('gcpdiag.runbook.op.get'))\n    self.params = {\n        flags.PROJECT_ID: 'test-project',\n        flags.ZONE: 'us-central1-a',\n        flags.INSTANCE_NAME: 'test-instance',\n    }\n    self.mock_op_get.side_effect = lambda key, default=None: self.params.get(\n        key, default)\n\n    tree = guestos_bootup.GuestosBootup()\n    tree.build_tree()\n    self.assertIsInstance(tree.start, guestos_bootup.GuestosBootupStart)\n    children = tree.start.steps\n    self.assertEqual(len(children), 6)\n    self.assertEqual(children[0].template, 'vm_serial_log::kernel_panic')\n    self.assertEqual(children[1].template, 'vm_serial_log::linux_fs_corruption')\n    self.assertIsInstance(children[2], guestos_bootup.CloudInitChecks)\n    self.assertEqual(children[3].template, 'vm_serial_log::network_errors')\n    self.assertEqual(children[4].template, 'vm_serial_log::guest_agent')\n    self.assertIsInstance(children[5], runbook.EndStep)\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = gce\n  runbook_name = 'gce/guestos-bootup'\n  config.init({'auto': True, 'interface': 'cli'})\n\n  rule_parameters = [{\n      'project_id': 'gcpdiag-gce-vm-performance',\n      'instance_name': 'faulty-linux-ssh',\n      'zone': 'europe-west2-a'\n  }, {\n      'project_id': 'gcpdiag-gce-vm-performance',\n      'instance_name': 'valid-linux-ssh',\n      'zone': 'europe-west2-a'\n  }]\n"
  },
  {
    "path": "gcpdiag/runbook/gce/ops_agent.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Contains diagnostic tree for ops agent onboarding and investigation as well as custom steps.\"\"\"\n\nfrom datetime import datetime\n\nimport googleapiclient.errors\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import runbook\n# Interact with GCP APIs using gcpdiag queries\nfrom gcpdiag.queries import crm, gce, iam, logs, monitoring\nfrom gcpdiag.runbook import op\n# Reuse generalized steps from other products within this runbook\nfrom gcpdiag.runbook.crm import generalized_steps as crm_gs\nfrom gcpdiag.runbook.gce import constants, flags\nfrom gcpdiag.runbook.gce import generalized_steps as gce_gs\nfrom gcpdiag.runbook.gcp import generalized_steps as gcp_gs\nfrom gcpdiag.runbook.iam import generalized_steps as iam_gs\n\nGAC_SERVICE_ACCOUNT = 'gac_service_account'\nCHECK_LOGGING = 'check_logging'\nCHECK_MONITORING = 'check_monitoring'\nCHECK_SERIAL_PORT_LOGGING = 'check_serial_port_logging'\n\n\nclass OpsAgent(runbook.DiagnosticTree):\n  \"\"\"Investigates the necessary GCP components for the proper functioning of the Ops Agent in a VM\n\n  This runbook will examine the following key areas:\n\n  1. API Service Checks:\n    - Ensures that Cloud APIs for Logging and/or Monitoring are accessible.\n\n  2. Permission Checks:\n    - Verifies that the necessary permissions are in place for exporting logs and/or metrics.\n\n  3. Workload Authentication:\n    - Confirms that the Ops Agent has a service account for authentication.\n    - If using Google Application Credentials, provide the service account\n      with the `gac_service_account` parameter.\n\n  4. Scope of Investigation:\n    - Note that this runbook does not include internal VM checks, such as guest OS investigations.\n  \"\"\"\n  parameters = {\n      flags.PROJECT_ID: {\n          'type': str,\n          'help': 'The Project ID containing the VM',\n          'required': True\n      },\n      flags.INSTANCE_NAME: {\n          'type': str,\n          'help': 'Name of the GCE instance running the Ops Agent',\n          'required': True\n      },\n      flags.INSTANCE_ID: {\n          'type': str,\n          'help': 'ID of the GCE instance running the Ops Agent',\n      },\n      flags.ZONE: {\n          'type': str,\n          'help': 'Zone of the GCE instance running the Ops Agent',\n          'required': True\n      },\n      flags.START_TIME: {\n          'type': datetime,\n          'help': 'Start time of the issue',\n      },\n      flags.END_TIME: {\n          'type': datetime,\n          'help': 'End time of the issue',\n      },\n      GAC_SERVICE_ACCOUNT: {\n          'type':\n              str,\n          'help':\n              'GOOGLE_APPLICATION_CREDENTIALS used by ops agent, if applicable'\n      },\n      CHECK_LOGGING: {\n          'type': bool,\n          'help': 'Investigate logging issues',\n          'default': True\n      },\n      CHECK_MONITORING: {\n          'type': bool,\n          'help': 'Investigate monitoring issues',\n          'default': True\n      },\n      CHECK_SERIAL_PORT_LOGGING: {\n          'type': bool,\n          'help': 'Check if VM Serial logging is enabled',\n          'default': True\n      }\n  }\n\n  def build_tree(self):\n    \"\"\"Describes step relationships\"\"\"\n    # Instantiate your start class\n    start = OpsAgentStart()\n    # add it to your tree\n    self.add_start(start)\n    sa_check = VmHasAServiceAccount()\n    self.add_step(parent=start, child=sa_check)\n    self.add_step(parent=sa_check, child=iam_gs.VmHasAnActiveServiceAccount())\n    self.add_step(parent=sa_check, child=InvestigateLoggingMonitoring())\n    self.add_end(OpsAgentEnd())\n\n\nclass OpsAgentStart(runbook.StartStep):\n  \"\"\"Prepares the parameters required for the gce/ops-agent runbook.\n\n  Looks up the GCE resource running the ops agent binary\n  Ensures both instance_id and instance_name parameters are available.\n  \"\"\"\n\n  def execute(self):\n    \"\"\"Verify context and parameters required for Ops Agent runbook checks\"\"\"\n    project = crm.get_project(op.get(flags.PROJECT_ID))\n\n    try:\n      instance = gce.get_instance(project_id=op.get(flags.PROJECT_ID),\n                                  zone=op.get(flags.ZONE),\n                                  instance_name=op.get(flags.INSTANCE_NAME))\n    except googleapiclient.errors.HttpError:\n      op.add_skipped(\n          project,\n          reason=('Instance {} does not exist in zone {} or project {}').format(\n              op.get(flags.INSTANCE_NAME), op.get(flags.ZONE),\n              op.get(flags.PROJECT_ID)))\n    else:\n      # Prepare extra parameters.\n      if instance and op.get(flags.INSTANCE_NAME):\n        op.put(flags.INSTANCE_ID, instance.id)\n\n      if instance and op.get(flags.INSTANCE_ID):\n        op.put(flags.INSTANCE_NAME, instance.name)\n\n\nclass VmHasAServiceAccount(runbook.Step):\n  \"\"\"Verifies the existence of a service account for the Ops Agent to use.\n\n  This investigation only happens from the perspective googleapis and\n  user provided input. We don't look inside the VM for cases like\n  GOOGLE_APPLICATION_CREDENTIALS. User will have to know and specify that if\n  They are using the application\n  \"\"\"\n  template = 'vm_attributes::service_account_exists'\n\n  def execute(self):\n    \"\"\"Verify Ops Agent has a service account.\"\"\"\n    instance = gce.get_instance(project_id=op.get(flags.PROJECT_ID),\n                                zone=op.get(flags.ZONE),\n                                instance_name=op.get(flags.INSTANCE_NAME))\n\n    if not op.get(GAC_SERVICE_ACCOUNT):\n      if instance.service_account:\n        op.put(flags.SERVICE_ACCOUNT, instance.service_account)\n        op.add_ok(instance,\n                  reason=op.prep_msg(op.SUCCESS_REASON,\n                                     full_resource_path=instance.full_path,\n                                     sa=instance.service_account))\n      else:\n        op.add_failed(instance,\n                      reason=op.prep_msg(op.FAILURE_REASON,\n                                         full_resource_path=instance.full_path),\n                      remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n      return\n\n    if op.get(GAC_SERVICE_ACCOUNT):\n      sa_list = iam.get_service_account_list(op.get(flags.PROJECT_ID))\n      for sa in sa_list:\n\n        if sa.email == op.get(GAC_SERVICE_ACCOUNT):\n          op.put(flags.SERVICE_ACCOUNT, sa.email)\n          op.add_ok(instance,\n                    reason=op.prep_msg(op.SUCCESS_REASON,\n                                       full_resource_path=instance.full_path,\n                                       sa=sa.email))\n          break\n    elif not op.get(GAC_SERVICE_ACCOUNT) and not instance.service_account:\n      op.add_failed(instance,\n                    reason=op.prep_msg(op.FAILURE_REASON,\n                                       full_resource_path=instance.full_path),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n\n\nclass InvestigateLoggingMonitoring(runbook.Gateway):\n  \"\"\"A Decision Point for to check Logging and/or Monitoring related issues\n\n  Decides whether to check for ops agent\n   - logging related issues if CHECK_LOGGING is set to true\n   - monitoring related issues if CHECK_MONITORING is set to true\n  \"\"\"\n\n  def execute(self):\n    \"\"\"Decision point to investigate Logging and/or Monitoring related issues.\"\"\"\n    if op.get(CHECK_LOGGING):\n      logging_api = gcp_gs.ServiceApiStatusCheck()\n      logging_api.api_name = 'logging'\n      logging_api.project_id = op.get(flags.PROJECT_ID)\n      logging_api.expected_state = constants.APIState.ENABLED\n      self.add_child(logging_api)\n\n      log_permission_check = iam_gs.IamPolicyCheck()\n      log_permission_check.project = op.get(flags.PROJECT_ID)\n      log_permission_check.principal = (\n          f'serviceAccount:{op.get(flags.SERVICE_ACCOUNT)}')\n      log_permission_check.roles = [\n          'roles/owner',\n          'roles/editor',\n          'roles/logging.logWriter',\n          'roles/logging.admin',\n      ]\n      logging_api.add_child(log_permission_check)\n      logging_access_scope = gce_gs.VmScope()\n      logging_access_scope.project_id = op.get(flags.PROJECT_ID)\n      logging_access_scope.zone = op.get(flags.ZONE)\n      logging_access_scope.instance_name = op.get(flags.INSTANCE_NAME)\n      logging_access_scope.access_scopes = {\n          'https://www.googleapis.com/auth/logging.write',\n          'https://www.googleapis.com/auth/cloud-platform',\n          'https://www.googleapis.com/auth/logging.admin',\n      }\n      logging_api.add_child(logging_access_scope)\n\n      logging_subagent_check = gce_gs.VmHasOpsAgent()\n      logging_subagent_check.project_id = op.get(flags.PROJECT_ID)\n      logging_subagent_check.zone = op.get(flags.ZONE)\n      logging_subagent_check.instance_name = op.get(flags.INSTANCE_NAME)\n      logging_subagent_check.instance_id = op.get(flags.INSTANCE_ID)\n      logging_subagent_check.start_time = op.get(flags.START_TIME)\n      logging_subagent_check.end_time = op.get(flags.END_TIME)\n      logging_subagent_check.check_logging = True\n      logging_subagent_check.check_metrics = False\n      logging_access_scope.add_child(logging_subagent_check)\n\n      if op.get(CHECK_SERIAL_PORT_LOGGING):\n        logging_api.add_child(child=CheckSerialPortLogging())\n\n    if op.get(CHECK_MONITORING):\n      monitoring_api = gcp_gs.ServiceApiStatusCheck()\n      monitoring_api.project_id = op.get(flags.PROJECT_ID)\n      monitoring_api.api_name = 'monitoring'\n      monitoring_api.expected_state = constants.APIState.ENABLED\n      self.add_child(monitoring_api)\n\n      monitoring_permission_check = iam_gs.IamPolicyCheck()\n      monitoring_permission_check.project = op.get(flags.PROJECT_ID)\n      monitoring_permission_check.principal = f'serviceAccount:{op.get(flags.SERVICE_ACCOUNT)}'\n      monitoring_permission_check.roles = [\n          'roles/monitoring.metricWriter', 'roles/monitoring.admin',\n          'roles/monitoring.editor', 'roles/owner', 'roles/editor'\n      ]\n      monitoring_api.add_child(child=monitoring_permission_check)\n      monitoring_access_scope = gce_gs.VmScope()\n      monitoring_access_scope.project_id = op.get(flags.PROJECT_ID)\n      monitoring_access_scope.zone = op.get(flags.ZONE)\n      monitoring_access_scope.instance_name = op.get(flags.INSTANCE_NAME)\n      monitoring_access_scope.access_scopes = {\n          'https://www.googleapis.com/auth/monitoring.write',\n          'https://www.googleapis.com/auth/cloud-platform',\n          'https://www.googleapis.com/auth/monitoring'\n      }\n      monitoring_api.add_child(monitoring_access_scope)\n      # Check if ops agent metric subagent is installed.\n      metric_subagent_check = gce_gs.VmHasOpsAgent()\n      metric_subagent_check.project_id = op.get(flags.PROJECT_ID)\n      metric_subagent_check.zone = op.get(flags.ZONE)\n      metric_subagent_check.instance_name = op.get(flags.INSTANCE_NAME)\n      metric_subagent_check.instance_id = op.get(flags.INSTANCE_ID)\n      metric_subagent_check.start_time = op.get(flags.START_TIME)\n      metric_subagent_check.end_time = op.get(flags.END_TIME)\n      metric_subagent_check.check_logging = False\n      metric_subagent_check.check_metrics = True\n      monitoring_access_scope.add_child(metric_subagent_check)\n\n\nclass CheckSerialPortLogging(runbook.CompositeStep):\n  \"\"\"Checks if ops agent serial port logging\n\n  Verifies Organization policy and VM configuration to issue serial port logging\n  to Stackdriver from Compute Engine VMs is feasible.\n  \"\"\"\n\n  def execute(self):\n    \"\"\"Verify GCP config required for serial port logging with ops agent\"\"\"\n    serial_logging_orgpolicy_check = crm_gs.OrgPolicyCheck()\n    serial_logging_orgpolicy_check.constraint = 'constraints/compute.disableSerialPortLogging'\n    serial_logging_orgpolicy_check.is_enforced = False\n    self.add_child(serial_logging_orgpolicy_check)\n\n    serial_logging_md_check = gce_gs.VmMetadataCheck()\n    serial_logging_md_check.project_id = op.get(flags.PROJECT_ID)\n    serial_logging_md_check.zone = op.get(flags.ZONE)\n    serial_logging_md_check.instance_name = op.get(flags.INSTANCE_NAME)\n    serial_logging_md_check.metadata_key = 'serial-port-logging-enable'\n    serial_logging_md_check.expected_value = True\n    self.add_child(serial_logging_md_check)\n\n\nclass OpsAgentEnd(runbook.EndStep):\n  \"\"\"Finalizes the OpsAgent checks.\n\n  Checks if logs or metrics are currently present after diagnosing the issue.\n  \"\"\"\n\n  def _has_ops_agent_metric_logging_agent(self, metric_data):\n    \"\"\"Checks if ops agent logging agent and metric agent is installed\"\"\"\n    pass\n\n  def execute(self):\n    \"\"\"Finalize Ops agent checks\"\"\"\n    serial_log_entries = None\n    has_expected_opsagent_logs = False\n    ops_agent_uptime = None\n    has_opsagent = False\n    if op.get(CHECK_SERIAL_PORT_LOGGING):\n      serial_log_entries = logs.realtime_query(\n          project_id=op.get(flags.PROJECT_ID),\n          filter_str='''resource.type=\"gce_instance\"\n                        log_name=\"projects/{}/logs/ops-agent-health\"\n                        resource.labels.instance_id=\"{}\" AND\n                        \"LogPingOpsAgent\"'''.format(op.get(flags.PROJECT_ID),\n                                                    op.get(flags.INSTANCE_ID)),\n          start_time=op.get(flags.END_TIME),\n          end_time=datetime.now())\n      if serial_log_entries:\n        has_expected_opsagent_logs = True\n        op.info(\n            'There are new logs indicating ops agent is exporting serial logs')\n\n    if op.get(CHECK_MONITORING):\n      ops_agent_uptime = monitoring.query(\n          op.get(flags.PROJECT_ID), \"\"\"\n                fetch gce_instance\n                | metric 'agent.googleapis.com/agent/uptime'\n                | filter (resource.instance_id == '{}')\n                | align rate(1m)\n                | every 1m\n                | group_by [resource.instance_id, metric.version],\n                    [value_uptime_aggregate: aggregate(value.uptime)]\n              \"\"\".format(op.get(flags.INSTANCE_ID)))\n\n      for entry in ops_agent_uptime.values():\n        version = get_path(entry, ('labels', 'metric.version'), '')\n        if 'google-cloud-ops-agent-metrics' in version:\n          has_opsagent = True\n          op.info(\n              'There is metrics data indicating ops agent is exporting metrics correctly!'\n          )\n\n      if not has_expected_opsagent_logs and not has_opsagent:\n        response = op.prompt(\n            kind=op.CONFIRMATION,\n            message=\n            f'Is your ops agent issues resolved for \"{op.get(flags.INSTANCE_NAME)}?\"'\n        )\n        if response == op.NO:\n          op.info(message=op.END_MESSAGE)\n"
  },
  {
    "path": "gcpdiag/runbook/gce/ops_agent_test.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test class for gce/OpsAgent.\"\"\"\n\nimport datetime\nimport unittest\nfrom unittest import mock\n\nimport googleapiclient\nimport httplib2\n\nfrom gcpdiag import config\nfrom gcpdiag.queries import apis_stub, crm\nfrom gcpdiag.queries import gce as queries_gce\nfrom gcpdiag.runbook import gce, op, snapshot_test_base\nfrom gcpdiag.runbook.crm import generalized_steps as crm_gs\nfrom gcpdiag.runbook.gce import flags\nfrom gcpdiag.runbook.gce import generalized_steps as gce_gs\nfrom gcpdiag.runbook.gce import ops_agent\nfrom gcpdiag.runbook.gcp import generalized_steps as gcp_gs\nfrom gcpdiag.runbook.iam import generalized_steps as iam_gs\n\n\nclass MockMessage:\n  \"\"\"Mock messages for testing.\n\n  Simply returns the key to verify template usage.\n  \"\"\"\n\n  def get_msg(self, key, **kwargs):\n    return f'{key}: {kwargs}'\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = gce\n  runbook_name = 'gce/ops-agent'\n  config.init({'auto': True, 'interface': 'cli'})\n\n  rule_parameters = [{\n      'project_id': 'gcpdiag-gce3-aaaa',\n      'instance_name': 'faulty-opsagent',\n      'zone': 'europe-west2-a'\n  }, {\n      'project_id': 'gcpdiag-gce3-aaaa',\n      'instance_name': 'faulty-opsagent-no-sa',\n      'zone': 'europe-west2-a'\n  }, {\n      'project_id': 'gcpdiag-gce3-aaaa',\n      'instance_name': 'working-opsagent',\n      'zone': 'europe-west2-a'\n  }]\n\n\nclass OpsAgentUnitTest(unittest.TestCase):\n\n  def setUp(self):\n    super().setUp()\n    config.init({'auto': False, 'interface': 'cli'})\n    self.enterContext(\n        mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub))\n    self.mock_interface = mock.create_autospec(op.InteractionInterface,\n                                               instance=True)\n    self.mock_interface.rm = mock.Mock()\n    self.operator = op.Operator(self.mock_interface)\n    self.operator.run_id = 'test-run'\n    self.operator.messages = MockMessage()\n\n    self.operator.parameters = {\n        flags.PROJECT_ID: 'gcpdiag-gce3-aaaa',\n        flags.ZONE: 'europe-west2-a',\n        flags.INSTANCE_NAME: 'test-instance',\n        flags.INSTANCE_ID: '1234',\n        ops_agent.GAC_SERVICE_ACCOUNT: None,\n        ops_agent.CHECK_LOGGING: True,\n        ops_agent.CHECK_MONITORING: True,\n        ops_agent.CHECK_SERIAL_PORT_LOGGING: True,\n        flags.SERVICE_ACCOUNT: 'test@system.gserviceaccount.com',\n        flags.START_TIME: datetime.datetime(2024, 1, 1),\n        flags.END_TIME: datetime.datetime(2024, 1, 2),\n    }\n    self.op_context = self.enterContext(op.operator_context(self.operator))\n\n    self.mock_get_project = self.enterContext(\n        mock.patch('gcpdiag.queries.crm.get_project'))\n    self.mock_get_instance = self.enterContext(\n        mock.patch('gcpdiag.queries.gce.get_instance'))\n    self.mock_iam_get_sa_list = self.enterContext(\n        mock.patch('gcpdiag.queries.iam.get_service_account_list'))\n    self.mock_logs_query = self.enterContext(\n        mock.patch('gcpdiag.queries.logs.realtime_query'))\n    self.mock_monitoring_query = self.enterContext(\n        mock.patch('gcpdiag.queries.monitoring.query'))\n\n    self.project = mock.Mock(spec=crm.Project)\n    self.project.id = 'gcpdiag-gce3-aaaa'\n    self.instance = mock.Mock(spec=queries_gce.Instance)\n    self.instance.name = 'test-instance'\n    self.instance.id = '1234'\n    self.instance.service_account = 'test@system.gserviceaccount.com'\n    self.instance.full_path = (\n        'projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances/test-instance'\n    )\n    self.mock_get_project.return_value = self.project\n    self.mock_get_instance.return_value = self.instance\n\n  def test_start_step_instance_not_found(self):\n    self.mock_get_instance.side_effect = googleapiclient.errors.HttpError(\n        httplib2.Response({'status': 404}), b'not found')\n    step = ops_agent.OpsAgentStart()\n    self.operator.set_step(step)\n    step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_start_step_instance_found(self):\n    self.operator.parameters[flags.INSTANCE_ID] = None\n    step = ops_agent.OpsAgentStart()\n    self.operator.set_step(step)\n    step.execute()\n    self.mock_interface.add_skipped.assert_not_called()\n    self.assertEqual(self.operator.parameters[flags.INSTANCE_ID], '1234')\n    self.assertEqual(self.operator.parameters[flags.INSTANCE_NAME],\n                     'test-instance')\n\n  def test_vm_has_sa_no_gac_no_instance_sa(self):\n    self.instance.service_account = None\n    step = ops_agent.VmHasAServiceAccount()\n    self.operator.set_step(step)\n    step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n  def test_vm_has_sa_no_gac_with_instance_sa(self):\n    self.instance.service_account = 'test@iam.gserviceaccount.com'\n    step = ops_agent.VmHasAServiceAccount()\n    self.operator.set_step(step)\n    step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n    self.assertEqual(self.operator.parameters[flags.SERVICE_ACCOUNT],\n                     'test@iam.gserviceaccount.com')\n\n  def test_vm_has_sa_gac_found(self):\n    self.operator.parameters[\n        ops_agent.\n        GAC_SERVICE_ACCOUNT] = 'gac-sa@project.iam.gserviceaccount.com'\n    sa = mock.Mock()\n    sa.email = 'gac-sa@project.iam.gserviceaccount.com'\n    self.mock_iam_get_sa_list.return_value = [sa]\n    step = ops_agent.VmHasAServiceAccount()\n    self.operator.set_step(step)\n    step.execute()\n    self.mock_iam_get_sa_list.assert_called_with('gcpdiag-gce3-aaaa')\n    self.mock_interface.add_ok.assert_called_once()\n    self.assertEqual(self.operator.parameters[flags.SERVICE_ACCOUNT],\n                     'gac-sa@project.iam.gserviceaccount.com')\n\n  def test_vm_has_sa_gac_not_found(self):\n    self.operator.parameters[\n        ops_agent.\n        GAC_SERVICE_ACCOUNT] = 'gac-sa@project.iam.gserviceaccount.com'\n    self.mock_iam_get_sa_list.return_value = []\n    step = ops_agent.VmHasAServiceAccount()\n    self.operator.set_step(step)\n    step.execute()\n    self.mock_interface.add_ok.assert_not_called()\n    self.mock_interface.add_failed.assert_not_called()\n\n  def test_investigate_logging_monitoring_all_enabled(self):\n    step = ops_agent.InvestigateLoggingMonitoring()\n    self.operator.set_step(step)\n    step.execute()\n    self.assertEqual(len(step.steps), 2)\n    self.assertIsInstance(step.steps[0], gcp_gs.ServiceApiStatusCheck)\n    self.assertEqual(step.steps[0].api_name, 'logging')\n    self.assertIsInstance(step.steps[1], gcp_gs.ServiceApiStatusCheck)\n    self.assertEqual(step.steps[1].api_name, 'monitoring')\n\n    logging_api_step = step.steps[0]\n    self.assertEqual(len(logging_api_step.steps), 3)\n    self.assertIsInstance(logging_api_step.steps[0], iam_gs.IamPolicyCheck)\n    self.assertIsInstance(logging_api_step.steps[1], gce_gs.VmScope)\n    self.assertIsInstance(logging_api_step.steps[2],\n                          ops_agent.CheckSerialPortLogging)\n    self.assertIsInstance(logging_api_step.steps[1].steps[0],\n                          gce_gs.VmHasOpsAgent)\n\n    monitoring_api_step = step.steps[1]\n    self.assertEqual(len(monitoring_api_step.steps), 2)\n    self.assertIsInstance(monitoring_api_step.steps[0], iam_gs.IamPolicyCheck)\n    self.assertIsInstance(monitoring_api_step.steps[1], gce_gs.VmScope)\n    self.assertIsInstance(monitoring_api_step.steps[1].steps[0],\n                          gce_gs.VmHasOpsAgent)\n\n  def test_investigate_logging_disabled(self):\n    self.operator.parameters[ops_agent.CHECK_LOGGING] = False\n    step = ops_agent.InvestigateLoggingMonitoring()\n    self.operator.set_step(step)\n    step.execute()\n    self.assertEqual(len(step.steps), 1)\n    self.assertEqual(step.steps[0].api_name, 'monitoring')\n\n  def test_investigate_monitoring_disabled(self):\n    self.operator.parameters[ops_agent.CHECK_MONITORING] = False\n    step = ops_agent.InvestigateLoggingMonitoring()\n    self.operator.set_step(step)\n    step.execute()\n    self.assertEqual(len(step.steps), 1)\n    self.assertEqual(step.steps[0].api_name, 'logging')\n\n  def test_investigate_no_serial_port_logging(self):\n    self.operator.parameters[ops_agent.CHECK_SERIAL_PORT_LOGGING] = False\n    step = ops_agent.InvestigateLoggingMonitoring()\n    self.operator.set_step(step)\n    step.execute()\n    self.assertEqual(len(step.steps), 2)\n    logging_api_step = step.steps[0]\n    self.assertEqual(len(logging_api_step.steps), 2)\n    self.assertIsInstance(logging_api_step.steps[0], iam_gs.IamPolicyCheck)\n    self.assertIsInstance(logging_api_step.steps[1], gce_gs.VmScope)\n\n  def test_check_serial_port_logging(self):\n    step = ops_agent.CheckSerialPortLogging()\n    self.operator.set_step(step)\n    step.execute()\n    self.assertEqual(len(step.steps), 2)\n    self.assertIsInstance(step.steps[0], crm_gs.OrgPolicyCheck)\n    self.assertIsInstance(step.steps[1], gce_gs.VmMetadataCheck)\n\n  def test_end_step_serial_logs_found(self):\n    self.mock_logs_query.return_value = [{'some': 'log'}]\n    self.mock_monitoring_query.return_value = {}\n    step = ops_agent.OpsAgentEnd()\n    self.operator.set_step(step)\n    step.execute()\n    self.mock_logs_query.assert_called_once()\n    self.mock_interface.info.assert_called_with(\n        'There are new logs indicating ops agent is exporting serial logs',\n        step_type='INFO')\n\n  def test_end_step_metrics_found(self):\n    self.mock_logs_query.return_value = []\n    self.mock_monitoring_query.return_value = {\n        'entry1': {\n            'labels': {\n                'metric.version': 'google-cloud-ops-agent-metrics-1'\n            }\n        }\n    }\n    step = ops_agent.OpsAgentEnd()\n    self.operator.set_step(step)\n    step.execute()\n    self.mock_monitoring_query.assert_called_once()\n    self.mock_interface.info.assert_called_with(\n        'There is metrics data indicating ops agent is exporting metrics'\n        ' correctly!',\n        step_type='INFO')\n\n  def test_end_step_no_logs_metrics_prompt_no(self):\n    self.mock_logs_query.return_value = []\n    self.mock_monitoring_query.return_value = {}\n    with mock.patch('gcpdiag.runbook.op.prompt',\n                    return_value=op.NO) as mock_prompt:\n      step = ops_agent.OpsAgentEnd()\n      self.operator.set_step(step)\n      step.execute()\n      mock_prompt.assert_called_once()\n      self.mock_interface.info.assert_called_with(message=op.END_MESSAGE,\n                                                  step_type='INFO')\n\n  def test_end_step_no_logs_metrics_prompt_yes(self):\n    self.mock_logs_query.return_value = []\n    self.mock_monitoring_query.return_value = {}\n    with mock.patch('gcpdiag.runbook.op.prompt', return_value=op.YES):\n      step = ops_agent.OpsAgentEnd()\n      self.operator.set_step(step)\n      step.execute()\n      self.mock_interface.info.assert_not_called()\n\n  def test_end_step_no_serial_check(self):\n    self.operator.parameters[ops_agent.CHECK_SERIAL_PORT_LOGGING] = False\n    self.mock_monitoring_query.return_value = {}\n    step = ops_agent.OpsAgentEnd()\n    self.operator.set_step(step)\n    step.execute()\n    self.mock_logs_query.assert_not_called()\n\n  def test_ops_agent_tree_structure(self):\n    \"\"\"Tests that the diagnostic tree is built with correct step relationships.\"\"\"\n    tree = ops_agent.OpsAgent()\n    tree.add_start = mock.Mock()\n    tree.add_step = mock.Mock()\n    tree.add_end = mock.Mock()\n    with op.operator_context(self.operator):\n      tree.build_tree()\n\n    tree.add_start.assert_called_once()\n    start_arg = tree.add_start.call_args[0][0]\n    self.assertIsInstance(start_arg, ops_agent.OpsAgentStart)\n\n    tree.add_end.assert_called_once()\n    end_arg = tree.add_end.call_args[0][0]\n    self.assertIsInstance(end_arg, ops_agent.OpsAgentEnd)\n\n    self.assertEqual(tree.add_step.call_count, 3)\n\n    calls = tree.add_step.call_args_list\n\n    def assert_relationship(parent_type, child_type):\n      found = False\n      for call in calls:\n        args, kwargs = call\n        p = kwargs.get('parent') if 'parent' in kwargs else args[0]\n        c = kwargs.get('child') if 'child' in kwargs else args[1]\n\n        if isinstance(p, parent_type) and isinstance(c, child_type):\n          found = True\n          break\n      self.assertTrue(\n          found,\n          f'Relationship {parent_type.__name__} -> {child_type.__name__} not'\n          ' found',\n      )\n\n    with op.operator_context(self.operator):\n      assert_relationship(ops_agent.OpsAgentStart,\n                          ops_agent.VmHasAServiceAccount)\n      assert_relationship(ops_agent.VmHasAServiceAccount,\n                          iam_gs.VmHasAnActiveServiceAccount)\n      assert_relationship(ops_agent.VmHasAServiceAccount,\n                          ops_agent.InvestigateLoggingMonitoring)\n\n  def test_vm_has_sa_failure_condition_no_gac_no_sa(self):\n    \"\"\"Tests the failure path when no GAC and no Instance SA are present.\"\"\"\n    self.instance.service_account = None\n\n    step = ops_agent.VmHasAServiceAccount()\n    self.operator.set_step(step)\n    step.execute()\n\n    self.mock_interface.add_failed.assert_called_once()\n\n    kwargs = self.mock_interface.add_failed.call_args[1]\n    self.assertEqual(kwargs['resource'], self.instance)\n    self.assertIn('reason', kwargs)\n    self.assertIn('remediation', kwargs)\n\n    self.assertIn(self.instance.full_path, kwargs['reason'])\n"
  },
  {
    "path": "gcpdiag/runbook/gce/serial_log_analyzer.py",
    "content": "# Copyright 2024 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Module containing steps to analyze known issues logged to Serial Console logs\"\"\"\n\nimport mimetypes\n\nimport googleapiclient.errors\n\nfrom gcpdiag import config, runbook\nfrom gcpdiag.queries import crm, gce\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.gce import constants as gce_const\nfrom gcpdiag.runbook.gce import flags\nfrom gcpdiag.runbook.gce import generalized_steps as gce_gs\n\n\nclass SerialLogAnalyzer(runbook.DiagnosticTree):\n  \"\"\" Google Compute Engine VM Serial log analyzer\n\n    This runbook is designed to assist you in investigating the serial console logs of a vm.\n\n    Key Investigation Areas:\n\n    Boot Issues:\n        - Check for Boot issues happening due to Kernel panics\n        - Check for GRUB related issues.\n        - Check if system failed to find boot disk.\n        - Check if Filesystem corruption is causing issues with system boot.\n        - Check if \"/\" Filesystem consumption is causing issues with system boot.\n\n    Memory crunch issues:\n        - Check if OOM kills happened on the VM or any other memory related issues.\n\n    Cloud-init checks:\n        - Check if cloud-init has initialised or started.\n        - Check if NIC has received the IP.\n\n    Network related issues:\n        - Check if metadata server became unreachable since last boot.\n        - Check if there are any time sync related errors.\n\n    SSHD checks:\n        - Check if there are logs related to successful startup of SSHD service.\n\n    SSHD Auth Failures checks:\n        - Check for SSH issues due to bad permissions of files or directories\n\n    Google Guest Agent checks:\n        - Check if there are logs related to successful startup of Google Guest Agent.\n\n    SSH guard check:\n        - Check if SSHGuard is active and may be blocking IP addresses\n    \"\"\"\n\n  # Specify parameters common to all steps in the diagnostic tree class.\n  parameters = {\n      flags.PROJECT_ID: {\n          'type': str,\n          'help':\n              ('The Project ID associated with the VM for which you want to \\\n                analyse the Serial logs.'),\n          'required': True\n      },\n      flags.NAME: {\n          'type': str,\n          'help':\n              'The name of the VM, for which you want to analyse the Serial logs.'\n              ' Or provide the id i.e -p name=<str>',\n          'deprecated': True,\n          'new_parameter': 'instance_name'\n      },\n      flags.INSTANCE_NAME: {\n          'type': str,\n          'help':\n              'The name of the VM, for which you want to analyse the Serial logs.'\n              ' Or provide the id i.e -p name=<str>',\n          'required': True\n      },\n      flags.ID: {\n          'type': str,\n          'help':\n              'The instance-id of the VM, for which you want to analyse the Serial logs.'\n              ' Or provide the id i.e -p id=<int>'\n      },\n      flags.ZONE: {\n          'type': str,\n          'help': 'The Google Cloud zone where the VM is located.',\n          'required': True\n      },\n      flags.SERIAL_CONSOLE_FILE: {\n          'type': str,\n          'ignorecase': True,\n          'help': 'Absolute path of files contailing the Serial console logs,'\n                  ' in case if gcpdiag is not able to reach the VM Serial logs.'\n                  ' i.e -p serial_console_file=\"filepath1,filepath2\" ',\n      }\n  }\n\n  def legacy_parameter_handler(self, parameters):\n    if flags.NAME in parameters:\n      parameters[flags.INSTANCE_NAME] = parameters.pop(flags.NAME)\n\n  def build_tree(self):\n    \"\"\"Building Decision Tree\"\"\"\n    start = SerialLogAnalyzerStart()\n    self.add_start(step=start)\n\n    # Checking if all logs available since last boot of the instance\n    log_start_point = gce_gs.VmSerialLogsCheck()\n    log_start_point.project_id = op.get(flags.PROJECT_ID)\n    log_start_point.zone = op.get(flags.ZONE)\n    log_start_point.instance_name = op.get(flags.INSTANCE_NAME)\n    log_start_point.serial_console_file = op.get(flags.SERIAL_CONSOLE_FILE)\n    log_start_point.template = 'vm_serial_log::serial_log_start_point'\n    log_start_point.positive_pattern = gce_const.SERIAL_LOG_START_POINT\n    self.add_step(parent=start, child=log_start_point)\n\n    # Check for Boot related issues\n    kernel_panic = gce_gs.VmSerialLogsCheck()\n    kernel_panic.project_id = op.get(flags.PROJECT_ID)\n    kernel_panic.zone = op.get(flags.ZONE)\n    kernel_panic.instance_name = op.get(flags.INSTANCE_NAME)\n    kernel_panic.serial_console_file = op.get(flags.SERIAL_CONSOLE_FILE)\n    kernel_panic.template = 'vm_serial_log::kernel_panic'\n    kernel_panic.negative_pattern = gce_const.KERNEL_PANIC_LOGS\n    self.add_step(parent=log_start_point, child=kernel_panic)\n\n    # Checking for Filesystem corruption related errors\n    fs_corruption = gce_gs.VmSerialLogsCheck()\n    fs_corruption.project_id = op.get(flags.PROJECT_ID)\n    fs_corruption.zone = op.get(flags.ZONE)\n    fs_corruption.instance_name = op.get(flags.INSTANCE_NAME)\n    fs_corruption.serial_console_file = op.get(flags.SERIAL_CONSOLE_FILE)\n    fs_corruption.template = 'vm_serial_log::linux_fs_corruption'\n    fs_corruption.negative_pattern = gce_const.FS_CORRUPTION_MSG\n    self.add_step(parent=log_start_point, child=fs_corruption)\n\n    # Checking for Filesystem utilization related messages\n    fs_util = gce_gs.VmSerialLogsCheck()\n    fs_util.project_id = op.get(flags.PROJECT_ID)\n    fs_util.zone = op.get(flags.ZONE)\n    fs_util.instance_name = op.get(flags.INSTANCE_NAME)\n    fs_util.serial_console_file = op.get(flags.SERIAL_CONSOLE_FILE)\n    fs_util.template = 'vm_performance::high_disk_utilization_error'\n    fs_util.negative_pattern = gce_const.DISK_EXHAUSTION_ERRORS\n    self.add_step(parent=log_start_point, child=fs_util)\n\n    # The PD may be experiencing slow read times\n    slow_disk_io = gce_gs.VmSerialLogsCheck()\n    slow_disk_io.project_id = op.get(flags.PROJECT_ID)\n    slow_disk_io.zone = op.get(flags.ZONE)\n    slow_disk_io.instance_name = op.get(flags.INSTANCE_NAME)\n    slow_disk_io.serial_console_file = op.get(flags.SERIAL_CONSOLE_FILE)\n    slow_disk_io.template = 'vm_performance::slow_disk_io'\n    slow_disk_io.negative_pattern = gce_const.SLOW_DISK_READS\n    self.add_step(parent=log_start_point, child=slow_disk_io)\n\n    # Checking for OOM related errors\n    oom_errors = gce_gs.VmSerialLogsCheck()\n    oom_errors.project_id = op.get(flags.PROJECT_ID)\n    oom_errors.zone = op.get(flags.ZONE)\n    oom_errors.instance_name = op.get(flags.INSTANCE_NAME)\n    oom_errors.serial_console_file = op.get(flags.SERIAL_CONSOLE_FILE)\n    oom_errors.template = 'vm_performance::high_memory_usage_logs'\n    oom_errors.negative_pattern = gce_const.OOM_PATTERNS\n    self.add_step(parent=log_start_point, child=oom_errors)\n\n    #Checking for Cloud-init related issues\n    cloudinit_issues = CloudInitChecks()\n    self.add_step(parent=log_start_point, child=cloudinit_issues)\n\n    # Checking for network related errors\n    network_issue = gce_gs.VmSerialLogsCheck()\n    network_issue.project_id = op.get(flags.PROJECT_ID)\n    network_issue.zone = op.get(flags.ZONE)\n    network_issue.instance_name = op.get(flags.INSTANCE_NAME)\n    network_issue.serial_console_file = op.get(flags.SERIAL_CONSOLE_FILE)\n    network_issue.template = 'vm_serial_log::network_errors'\n    network_issue.negative_pattern = gce_const.NETWORK_ERRORS\n    self.add_step(parent=log_start_point, child=network_issue)\n\n    # Checking for Time Sync related errors\n    timesync_issue = gce_gs.VmSerialLogsCheck()\n    timesync_issue.project_id = op.get(flags.PROJECT_ID)\n    timesync_issue.zone = op.get(flags.ZONE)\n    timesync_issue.instance_name = op.get(flags.INSTANCE_NAME)\n    timesync_issue.serial_console_file = op.get(flags.SERIAL_CONSOLE_FILE)\n    timesync_issue.template = 'vm_serial_log::time_sync_issue'\n    timesync_issue.negative_pattern = gce_const.TIME_SYNC_ERROR\n    self.add_step(parent=log_start_point, child=timesync_issue)\n\n    # Check for issues in SSHD configuration or behavior.\n    sshd_check = gce_gs.VmSerialLogsCheck()\n    sshd_check.project_id = op.get(flags.PROJECT_ID)\n    sshd_check.zone = op.get(flags.ZONE)\n    sshd_check.instance_name = op.get(flags.INSTANCE_NAME)\n    sshd_check.serial_console_file = op.get(flags.SERIAL_CONSOLE_FILE)\n    sshd_check.template = 'vm_serial_log::sshd'\n    sshd_check.positive_pattern = gce_const.GOOD_SSHD_PATTERNS\n    sshd_check.negative_pattern = gce_const.BAD_SSHD_PATTERNS\n    self.add_step(parent=log_start_point, child=sshd_check)\n\n    # Check for SSH issues due to bad permissions\n    sshd_auth_failure = gce_gs.VmSerialLogsCheck()\n    sshd_auth_failure.project_id = op.get(flags.PROJECT_ID)\n    sshd_auth_failure.zone = op.get(flags.ZONE)\n    sshd_auth_failure.instance_name = op.get(flags.INSTANCE_NAME)\n    sshd_auth_failure.serial_console_file = op.get(flags.SERIAL_CONSOLE_FILE)\n    sshd_auth_failure.template = 'vm_serial_log::sshd_auth_failure'\n    sshd_auth_failure.negative_pattern = gce_const.SSHD_AUTH_FAILURE\n    self.add_step(parent=log_start_point, child=sshd_auth_failure)\n\n    # Check for Guest Agent status\n    guest_agent_check = gce_gs.VmSerialLogsCheck()\n    guest_agent_check.project_id = op.get(flags.PROJECT_ID)\n    guest_agent_check.zone = op.get(flags.ZONE)\n    guest_agent_check.instance_name = op.get(flags.INSTANCE_NAME)\n    guest_agent_check.serial_console_file = op.get(flags.SERIAL_CONSOLE_FILE)\n    guest_agent_check.template = 'vm_serial_log::guest_agent'\n    guest_agent_check.positive_pattern = gce_const.GUEST_AGENT_STATUS_MSG\n    guest_agent_check.negative_pattern = gce_const.GUEST_AGENT_FAILED_MSG\n    self.add_step(parent=log_start_point, child=guest_agent_check)\n\n    # Check for SSH Guard blocks that might be preventing SSH access.\n    sshd_guard = gce_gs.VmSerialLogsCheck()\n    sshd_guard.project_id = op.get(flags.PROJECT_ID)\n    sshd_guard.zone = op.get(flags.ZONE)\n    sshd_guard.instance_name = op.get(flags.INSTANCE_NAME)\n    sshd_guard.serial_console_file = op.get(flags.SERIAL_CONSOLE_FILE)\n    sshd_guard.template = 'vm_serial_log::sshguard'\n    sshd_guard.negative_pattern = gce_const.SSHGUARD_PATTERNS\n    self.add_step(parent=log_start_point, child=sshd_guard)\n\n    self.add_end(AnalysingSerialLogsEnd())\n\n\nclass SerialLogAnalyzerStart(runbook.StartStep):\n  \"\"\"Fetching VM details.\"\"\"\n\n  template = 'vm_attributes::running'\n\n  def execute(self):\n    \"\"\"Fetching VM details\"\"\"\n\n    project = crm.get_project(op.get(flags.PROJECT_ID))\n    try:\n      vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID),\n                            zone=op.get(flags.ZONE),\n                            instance_name=op.get(flags.INSTANCE_NAME))\n    except googleapiclient.errors.HttpError:\n      op.add_skipped(\n          project,\n          reason=('Instance {} does not exist in zone {} or project {}').format(\n              op.get(flags.INSTANCE_NAME), op.get(flags.ZONE),\n              op.get(flags.PROJECT_ID)))\n    else:\n      if vm and vm.is_running:\n        # Check for instance id and instance name\n        if not op.get(flags.ID):\n          op.put(flags.ID, vm.id)\n        elif not op.get(flags.INSTANCE_NAME):\n          op.put(flags.INSTANCE_NAME, vm.name)\n      else:\n        op.add_failed(vm,\n                      reason=op.prep_msg(op.FAILURE_REASON,\n                                         full_resource_path=vm.full_path,\n                                         status=vm.status),\n                      remediation=op.prep_msg(op.FAILURE_REMEDIATION,\n                                              full_resource_path=vm.full_path,\n                                              status=vm.status))\n\n    # file sanity checks\n    if op.get(flags.SERIAL_CONSOLE_FILE):\n      for file in op.get(flags.SERIAL_CONSOLE_FILE).split(','):\n        try:\n          with open(file, 'rb') as f:\n            results = mimetypes.guess_type(file)[0]\n            if results and not results.startswith('text/'):\n              # Peek at content for further clues\n              content_start = f.read(1024)  # Read a small chunk\n              # Check for gzip and xz magic number (first two bytes)\n              if content_start.startswith(\n                  b'\\x1f\\x8b') or content_start.startswith(b'\\xfd'):\n                op.add_skipped(\n                    vm,\n                    reason=('File {} appears to be compressed, not plain text.'\n                           ).format(file))\n              else:\n                # If not gzip or tar, try simple text encoding detection (UTF-8, etc.)\n                try:\n                  content_start.decode()\n                except UnicodeDecodeError:\n                  op.add_skipped(\n                      vm,\n                      reason=('File {} does not appear to be plain text.'\n                             ).format(file))\n\n        except FileNotFoundError:\n          op.add_skipped(\n              vm,\n              reason=('The file {} does not exists. Please verify if '\n                      'you have provided the correct absolute file path'\n                     ).format(file))\n\n\nclass CloudInitChecks(runbook.CompositeStep):\n  \"\"\"Cloud init related checks\"\"\"\n\n  def execute(self):\n    \"\"\"Cloud init related checks\"\"\"\n    ubuntu_licenses = gce.get_gce_public_licences('ubuntu-os-cloud')\n    ubuntu_pro_licenses = gce.get_gce_public_licences('ubuntu-os-pro-cloud')\n    licenses = ubuntu_licenses + ubuntu_pro_licenses\n    vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID),\n                          zone=op.get(flags.ZONE),\n                          instance_name=op.get(flags.INSTANCE_NAME))\n    if vm.check_license(licenses):\n      # Checking for Cloud init startup log\n      cloud_init_startup_check = gce_gs.VmSerialLogsCheck()\n      cloud_init_startup_check.project_id = op.get(flags.PROJECT_ID)\n      cloud_init_startup_check.zone = op.get(flags.ZONE)\n      cloud_init_startup_check.instance_name = op.get(flags.INSTANCE_NAME)\n      cloud_init_startup_check.serial_console_file = op.get(\n          flags.SERIAL_CONSOLE_FILE)\n      cloud_init_startup_check.template = 'vm_serial_log::cloud_init_startup_check'\n      cloud_init_startup_check.positive_pattern = gce_const.CLOUD_INIT_STARTUP_PATTERN\n      self.add_child(cloud_init_startup_check)\n\n      # Checking if NIC has received IP\n      cloud_init_check = gce_gs.VmSerialLogsCheck()\n      cloud_init_check.template = 'vm_serial_log::cloud_init'\n      cloud_init_check.project_id = op.get(flags.PROJECT_ID)\n      cloud_init_check.zone = op.get(flags.ZONE)\n      cloud_init_check.instance_name = op.get(flags.INSTANCE_NAME)\n      cloud_init_check.serial_console_file = op.get(flags.SERIAL_CONSOLE_FILE)\n      cloud_init_check.negative_pattern = gce_const.CLOUD_INIT_NEGATIVE_PATTERN\n      cloud_init_check.positive_pattern = gce_const.CLOUD_INIT_POSITIVE_PATTERN\n      self.add_child(cloud_init_check)\n    else:\n      op.add_skipped(\n          vm, reason='This VM is not Ubuntu or it does not uses cloud-init')\n\n\nclass AnalysingSerialLogsEnd(runbook.EndStep):\n  \"\"\"Finalize Serial console Log Analysis.\"\"\"\n\n  def execute(self):\n    \"\"\"Finalize Serial console Log Analysis.\"\"\"\n    if not config.get(flags.INTERACTIVE_MODE):\n      response = op.prompt(\n          kind=op.CONFIRMATION,\n          message=\n          f'Are you able to find issues related to {op.get(flags.INSTANCE_NAME)}?',\n          choice_msg='Enter an option: ')\n      if response == op.NO:\n        op.info(message=op.END_MESSAGE)\n"
  },
  {
    "path": "gcpdiag/runbook/gce/serial_log_analyzer_test.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test class for gce/serial-log-analyzer.\"\"\"\n\nfrom unittest import mock\n\nimport apiclient.errors\n\nfrom gcpdiag import config\nfrom gcpdiag.queries import apis_stub\nfrom gcpdiag.runbook import gce, op, snapshot_test_base\nfrom gcpdiag.runbook.gce import flags, serial_log_analyzer\nfrom gcpdiag.runbook.gce.generalized_steps_test import GceStepTestBase\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = gce\n  runbook_name = 'gce/serial-log-analyzer'\n  config.init({'auto': True, 'interface': 'cli'})\n\n  rule_parameters = [{\n      'project_id': 'gcpdiag-gce-vm-performance',\n      'instance_name': 'faulty-linux-ssh',\n      'zone': 'europe-west2-a'\n  }, {\n      'project_id': 'gcpdiag-gce-vm-performance',\n      'name': 'valid-linux-ssh',\n      'zone': 'europe-west2-a'\n  }]\n\n\nclass SerialLogAnalyzerTreeTest(GceStepTestBase):\n  \"\"\"Test SerialLogAnalyzer tree building and parameter handling.\"\"\"\n\n  def test_build_tree(self):\n    \"\"\"Ensure the diagnostic tree is built by providing operator context.\"\"\"\n    tree = serial_log_analyzer.SerialLogAnalyzer()\n    operator = op.Operator(interface=mock.Mock(), context_provider=mock.Mock())\n    operator.set_parameters(self.params)\n\n    with op.operator_context(operator):\n      tree.build_tree()\n\n    self.assertIsNotNone(tree.start)\n    self.assertIsInstance(tree.start,\n                          serial_log_analyzer.SerialLogAnalyzerStart)\n\n    diagnostic_steps = tree.start.steps[0].steps\n    step_types = [type(step) for step in diagnostic_steps]\n\n    self.assertIn(serial_log_analyzer.CloudInitChecks, step_types)\n\n  def test_legacy_parameter_handler(self):\n    \"\"\"Test mapping of deprecated 'name' to 'instance_name'.\"\"\"\n    tree = serial_log_analyzer.SerialLogAnalyzer()\n    params = {flags.NAME: 'legacy-vm-name'}\n    tree.legacy_parameter_handler(params)\n    self.assertEqual(params[flags.INSTANCE_NAME], 'legacy-vm-name')\n    self.assertNotIn(flags.NAME, params)\n\n\nclass SerialLogAnalyzerStartTest(GceStepTestBase):\n  \"\"\"Test SerialLogAnalyzerStart execution.\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    self.mock_crm_get_project = self.enterContext(\n        mock.patch('gcpdiag.queries.crm.get_project'))\n    self.mock_gce_get_instance.return_value = self.mock_instance\n    self.enterContext(\n        mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub))\n\n  def test_start_success(self):\n    \"\"\"Test successful VM detail fetching and ID assignment (Lines 255-270).\"\"\"\n    self.mock_instance.is_running = True\n    self.mock_instance.id = '12345'\n    with op.operator_context(self.operator):\n      step = serial_log_analyzer.SerialLogAnalyzerStart()\n      self.operator.set_step(step)\n      step.execute()\n    self.assertEqual(self.operator.parameters[flags.ID], '12345')\n\n  def test_start_updates_missing_instance_name(self):\n    \"\"\"Test updating missing instance name from VM metadata.\"\"\"\n    self.mock_instance.is_running = True\n    self.mock_instance.name = 'metadata-name'\n    # Simulate ID present but instance_name missing in op context\n    self.params[flags.ID] = '123'\n    self.params[flags.PROJECT_ID] = 'test-project'\n    self.params[flags.INSTANCE_NAME] = None\n    self.operator.parameters = self.params\n    with op.operator_context(self.operator):\n      step = serial_log_analyzer.SerialLogAnalyzerStart()\n      self.operator.set_step(step)\n      step.execute()\n    self.assertEqual(self.operator.parameters[flags.INSTANCE_NAME],\n                     'metadata-name')\n\n  def test_instance_not_found_error_handling(self):\n    \"\"\"Test handling of API errors.\"\"\"\n    self.mock_gce_get_instance.side_effect = apiclient.errors.HttpError(\n        mock.Mock(status=404), b'not found')\n    with op.operator_context(self.operator):\n      step = serial_log_analyzer.SerialLogAnalyzerStart()\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  @mock.patch('builtins.open',\n              new_callable=mock.mock_open,\n              read_data=b'plain text')\n  @mock.patch('mimetypes.guess_type')\n  def test_serial_console_file_checks(self, mock_guess, mock_open):\n    \"\"\"Test sanity checks for local log files.\"\"\"\n    self.mock_instance.is_running = True\n    self.params[flags.SERIAL_CONSOLE_FILE] = 'test_logs.txt'\n    mock_guess.return_value = ('text/plain', None)\n    with op.operator_context(self.operator):\n      step = serial_log_analyzer.SerialLogAnalyzerStart()\n      self.operator.set_step(step)\n      step.execute()\n    mock_open.assert_called_with('test_logs.txt', 'rb')\n\n  @mock.patch('builtins.open',\n              new_callable=mock.mock_open,\n              read_data=b'\\x1f\\x8b\\x08')\n  @mock.patch('mimetypes.guess_type')\n  def test_serial_console_file_compressed(self, mock_guess, unused_mock_open):\n    \"\"\"Test detection of compressed files via magic number.\"\"\"\n    self.mock_instance.is_running = True\n    self.params[flags.SERIAL_CONSOLE_FILE] = 'logs.gz'\n    mock_guess.return_value = ('application/gzip', None)\n    with op.operator_context(self.operator):\n      step = serial_log_analyzer.SerialLogAnalyzerStart()\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_with(\n        run_id='test-run',\n        resource=mock.ANY,\n        reason='File logs.gz appears to be compressed, not plain text.',\n        step_execution_id=mock.ANY)\n\n  @mock.patch('builtins.open',\n              new_callable=mock.mock_open,\n              read_data=b'\\xff\\xfe\\xfd')\n  @mock.patch('mimetypes.guess_type')\n  def test_serial_console_file_binary_error(self, mock_guess, unused_mock_open):\n    \"\"\"Test handling of non-UTF8 binary files.\"\"\"\n    self.mock_instance.is_running = True\n    self.params[flags.SERIAL_CONSOLE_FILE] = 'binary.bin'\n    mock_guess.return_value = ('application/octet-stream', None)\n    with op.operator_context(self.operator):\n      step = serial_log_analyzer.SerialLogAnalyzerStart()\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_with(\n        run_id='test-run',\n        resource=mock.ANY,\n        reason='File binary.bin does not appear to be plain text.',\n        step_execution_id=mock.ANY)\n\n\nclass CloudInitChecksTest(GceStepTestBase):\n  \"\"\"Test CloudInitChecks logic.\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    self.enterContext(\n        mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub))\n    self.mock_add_child = self.enterContext(\n        mock.patch.object(serial_log_analyzer.CloudInitChecks, 'add_child'))\n\n  def test_ubuntu_triggers_child_steps(self):\n    \"\"\"Test child steps are added for Ubuntu instances.\"\"\"\n    self.mock_instance.check_license.return_value = True\n    with op.operator_context(self.operator):\n      step = serial_log_analyzer.CloudInitChecks()\n      self.operator.set_step(step)\n      step.execute()\n\n    self.assertEqual(len(self.mock_add_child.call_args_list), 2)\n\n    added_steps = [args[0][0] for args in self.mock_add_child.call_args_list]\n    self.assertIsInstance(added_steps[0],\n                          serial_log_analyzer.gce_gs.VmSerialLogsCheck)\n    self.assertIsInstance(added_steps[1],\n                          serial_log_analyzer.gce_gs.VmSerialLogsCheck)\n\n  def test_non_ubuntu_skips_checks(self):\n    \"\"\"Test skipping checks for non-Ubuntu OS.\"\"\"\n    self.mock_instance.check_license.return_value = False\n    with op.operator_context(self.operator):\n      step = serial_log_analyzer.CloudInitChecks()\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n\nclass AnalysingSerialLogsEndTest(GceStepTestBase):\n  \"\"\"Test AnalysingSerialLogsEnd termination.\"\"\"\n\n  def test_end_step_output_non_interactive(self):\n    \"\"\"Test that the end message is displayed correctly in non-interactive mode.\"\"\"\n    with (\n        mock.patch.object(serial_log_analyzer.config, 'get',\n                          return_value=False),\n        mock.patch.object(serial_log_analyzer.op, 'prompt', return_value=op.NO),\n        mock.patch.object(serial_log_analyzer.op, 'info') as mock_info,\n    ):\n      with op.operator_context(self.operator):\n        step = serial_log_analyzer.AnalysingSerialLogsEnd()\n        self.operator.set_step(step)\n        step.execute()\n      mock_info.assert_called_with(message=op.END_MESSAGE)\n\n  def test_end_step_output_interactive_mode(self):\n    \"\"\"Test that the end message is skipped in interactive mode.\"\"\"\n    with (\n        mock.patch.object(serial_log_analyzer.config, 'get', return_value=True),\n        mock.patch.object(serial_log_analyzer.op, 'prompt') as mock_prompt,\n        mock.patch.object(serial_log_analyzer.op, 'info') as mock_info,\n    ):\n      with op.operator_context(self.operator):\n        step = serial_log_analyzer.AnalysingSerialLogsEnd()\n        self.operator.set_step(step)\n        step.execute()\n      mock_prompt.assert_not_called()\n      mock_info.assert_not_called()\n"
  },
  {
    "path": "gcpdiag/runbook/gce/snapshots/guestos_bootup.txt",
    "content": "instance_name=faulty-linux-ssh,project_id=gcpdiag-gce-vm-performance,zone=europe-west2-a\n\ngce/guestos-bootup:  Google Compute Engine VM Guest OS boot-up runbook.\n\n    This runbook is designed to investigate the various boot-up stages of a Linux or Windows Guest\n    OS running on Google Compute Engine. It is intended to help you identify and troubleshoot issues\n    that may arise during the boot process. The runbook provides a structured approach to resolve\n    issues.\n\n    Key Investigation Areas:\n\n    Boot Issues:\n        - Check for Boot issues happening due to Kernel panics\n        - Check for GRUB related issues.\n        - Check if system failed to find boot disk.\n        - Check if Filesystem corruption is causing issues with system boot.\n        - Check if \"/\" Filesystem consumption is causing issues with system boot.\n\n    Cloud-init checks:\n        - Check if cloud-init has initialised or started.\n        - Check if NIC has received the IP.\n\n    Network related issues:\n        - Check if metadata server became unreachable since last boot.\n        - Check if there are any time sync related errors.\n\n    Google Guest Agent checks:\n        - Check if there are logs related to successful startup of Google Guest Agent.\n  \n[START]: Verify GCE Instance is in a \"RUNNING\" state.\n[AUTOMATED STEP]: Examine Guest OS if there are any indications of kernel panic.\n\n   - gcpdiag-gce-vm-performance/faulty-linux-ssh                          [FAIL]\n     [REASON]\n     Detected kernel panic logs in projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/faulty-linux-ssh serial logs,\n     which is likely preventing the VM from booting up correctly.\n\n     [REMEDIATION]\n     Kernel panics can be caused by different issues within the guest.\n     Address underlying issues causing boot problems to solve the kernel panic:\n\n     **General Kernel panic Troubleshooting**\n\n     1. Consult the Troubleshooting Guide for Kernel Panic Errors:\n        - Kernel panic is commonly caused by file system errors in Linux Guest OS.\n        - Check `/etc/fstab` for incorrect entries that could halt the boot process.\n        - Refer to this guide for resolving [kernel panic issues caused by\n     /etc/fstab](https://cloud.google.com/compute/docs/troubleshooting/fstab-errors).\n\n     2. Resources for Kernel panic\n        - [Troubleshooting GCE Instance experiencing Kernel\n     Panic](https://cloud.google.com/compute/docs/troubleshooting/kernel-panic#resolve_the_kernel_panic_error)\n        - [Common Red Hat Kernel Panic\n     Issues](https://access.redhat.com/search/knowledgebase?q=kernel+panic&p=1&rows=10&documentKind=Solution%26Documentation&sort=relevant)\n        - [Common SUSE Kernel Panic Issues](https://www.suse.com/support/kb/?id=&q=kernel+panic&bu_suse=true&advanced=false)\n\n     3. Rescue an instance experiencing kernel panic\n        - [How to rescue a experiencing kernel panic](https://cloud.google.com/compute/docs/troubleshooting/rescue-vm) to\n     recover faulty VMs.\n        - Watch this video for a walkthrough: [Rescue VM Guide](https://www.youtube.com/watch?v=oD6IFpjEtEw)\n\n     4 Google Cloud Platform Support Scope:\n     [Understand GCP support for kernel-related\n     issues](https://cloud.google.com/compute/docs/images/support-maintenance-policy#support-scope).\n\n[AUTOMATED STEP]: Verify any Filesystem corruption related errors in Serial console logs\n\n   - gcpdiag-gce-vm-performance/faulty-linux-ssh                          [FAIL]\n     [REASON]\n     Possible filesystem corruption detected.\n\n     The patterns used:\n\n     ```\n     'Corruption of in-memory data detected. Shutting down filesystem',\n     'Corruption of in-memory data detected', 'warning: mounting fs with errors',\n     'Failed to mount /',\n     'A stop job is running for Security \\.\\.\\..* Service ',\n     'I/O Error Detected. Shutting down filesystem',\n     'metadata I/O error in'\n     ```\n\n\n     [REMEDIATION]\n     To resolve filesystem corruption, admins can use [gce-rescue](https://github.com/GoogleCloudPlatform/gce-rescue),\n     available in Cloud Shell, to rescue faulty VMs. Alternatively, you can follow the\n     [manual method](https://cloud.google.com/compute/docs/troubleshooting/rescue-vm) to repair the filesystem.\n\n     Additional resources for reference:\n\n     - [Red Hat article on filesystem repair](https://access.redhat.com/solutions/1750923)\n     - [Video guide on rescuing VMs](https://www.youtube.com/watch?v=oD6IFpjEtEw)\n\n     These resources provide detailed steps for diagnosing and resolving filesystem issues.\n\n[COMPOSITE STEP]: Cloud init related checks\n\n   - gcpdiag-gce-vm-performance/faulty-linux-ssh                          [SKIP]\n     [REASON]\n     This VM is not Ubuntu or it does not uses cloud-init\n[AUTOMATED STEP]: Check for metadata network connectivity errors\n\n   - gcpdiag-gce-vm-performance/faulty-linux-ssh                          [FAIL]\n     [REASON]\n     The metadata server(169.254.169.254) is unreachable from the GCE Instance.\n     The instance might not have IP assigned to its primary NIC.\n\n     [REMEDIATION]\n     Attempt to log in to the instance via the serial console using a password and check the status of the network stack.\n\n     If login via the serial console is unsuccessful, consider restarting the instance.\n\n     If the issue persists after a reboot, follow the [rescue VM\n     guide](https://cloud.google.com/compute/docs/troubleshooting/rescue-vm) for further troubleshooting.\n\n     Additionally, refer to the [troubleshooting metadata server\n     guide](https://cloud.google.com/compute/docs/troubleshooting/troubleshoot-metadata-server) to address potential issues\n     with the Compute Engine metadata server.\n\n[AUTOMATED STEP]: Checking for Guest Agent startup logs\n\n   - gcpdiag-gce-vm-performance/faulty-linux-ssh                          [OK]\n     [REASON]\n     Detected that Google Guest Agent is running within the VM\n\n[END]: Finalize runbook investigations.\n\n\ninstance_name=valid-linux-ssh,project_id=gcpdiag-gce-vm-performance,zone=europe-west2-a\n\ngce/guestos-bootup:  Google Compute Engine VM Guest OS boot-up runbook.\n\n    This runbook is designed to investigate the various boot-up stages of a Linux or Windows Guest\n    OS running on Google Compute Engine. It is intended to help you identify and troubleshoot issues\n    that may arise during the boot process. The runbook provides a structured approach to resolve\n    issues.\n\n    Key Investigation Areas:\n\n    Boot Issues:\n        - Check for Boot issues happening due to Kernel panics\n        - Check for GRUB related issues.\n        - Check if system failed to find boot disk.\n        - Check if Filesystem corruption is causing issues with system boot.\n        - Check if \"/\" Filesystem consumption is causing issues with system boot.\n\n    Cloud-init checks:\n        - Check if cloud-init has initialised or started.\n        - Check if NIC has received the IP.\n\n    Network related issues:\n        - Check if metadata server became unreachable since last boot.\n        - Check if there are any time sync related errors.\n\n    Google Guest Agent checks:\n        - Check if there are logs related to successful startup of Google Guest Agent.\n  \n[START]: Verify GCE Instance is in a \"RUNNING\" state.\n[AUTOMATED STEP]: Examine Guest OS if there are any indications of kernel panic.\n\n   - gcpdiag-gce-vm-performance/valid-linux-ssh                           [UNCERTAIN]\n     [REASON]\n     No serial logs were found for the VM projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/valid-linux-ssh. However, this does not rule out the possibility of a kernel\n     panic.\n\n     [REMEDIATION]\n     Kernel panics can be caused by different issues within the guest.\n     Address underlying issues causing boot problems to solve the kernel panic:\n\n     **General Kernel panic Troubleshooting**\n\n     1. Consult the Troubleshooting Guide for Kernel Panic Errors:\n        - Kernel panic is commonly caused by file system errors in Linux Guest OS.\n        - Check `/etc/fstab` for incorrect entries that could halt the boot process.\n        - Refer to this guide for resolving [kernel panic issues caused by\n     /etc/fstab](https://cloud.google.com/compute/docs/troubleshooting/fstab-errors).\n\n     2. Resources for Kernel panic\n        - [Troubleshooting GCE Instance experiencing Kernel\n     Panic](https://cloud.google.com/compute/docs/troubleshooting/kernel-panic#resolve_the_kernel_panic_error)\n        - [Common Red Hat Kernel Panic\n     Issues](https://access.redhat.com/search/knowledgebase?q=kernel+panic&p=1&rows=10&documentKind=Solution%26Documentation&sort=relevant)\n        - [Common SUSE Kernel Panic Issues](https://www.suse.com/support/kb/?id=&q=kernel+panic&bu_suse=true&advanced=false)\n\n     3. Rescue an instance experiencing kernel panic\n        - [How to rescue a experiencing kernel panic](https://cloud.google.com/compute/docs/troubleshooting/rescue-vm) to\n     recover faulty VMs.\n        - Watch this video for a walkthrough: [Rescue VM Guide](https://www.youtube.com/watch?v=oD6IFpjEtEw)\n\n     4 Google Cloud Platform Support Scope:\n     [Understand GCP support for kernel-related\n     issues](https://cloud.google.com/compute/docs/images/support-maintenance-policy#support-scope).\n\n[AUTOMATED STEP]: Verify any Filesystem corruption related errors in Serial console logs\n\n   - gcpdiag-gce-vm-performance/valid-linux-ssh                           [UNCERTAIN]\n     [REASON]\n     No evidence Filesystem corruption errors present in the serial logs.\n\n     [REMEDIATION]\n     To resolve filesystem corruption, admins can use [gce-rescue](https://github.com/GoogleCloudPlatform/gce-rescue),\n     available in Cloud Shell, to rescue faulty VMs. Alternatively, you can follow the\n     [manual method](https://cloud.google.com/compute/docs/troubleshooting/rescue-vm) to repair the filesystem.\n\n     Additional resources for reference:\n\n     - [Red Hat article on filesystem repair](https://access.redhat.com/solutions/1750923)\n     - [Video guide on rescuing VMs](https://www.youtube.com/watch?v=oD6IFpjEtEw)\n\n     These resources provide detailed steps for diagnosing and resolving filesystem issues.\n\n[COMPOSITE STEP]: Cloud init related checks\n\n   - gcpdiag-gce-vm-performance/valid-linux-ssh                           [SKIP]\n     [REASON]\n     This VM is not Ubuntu or it does not uses cloud-init\n[AUTOMATED STEP]: Check for metadata network connectivity errors\n\n   - gcpdiag-gce-vm-performance/valid-linux-ssh                           [UNCERTAIN]\n     [REASON]\n     No success or failed logs to help deduce a conlusion on certainty of Network issues on the instance.\n\n     [REMEDIATION]\n     Attempt to log in to the instance via the serial console using a password and check the status of the network stack.\n\n     If login via the serial console is unsuccessful, consider restarting the instance.\n\n     If the issue persists after a reboot, follow the [rescue VM\n     guide](https://cloud.google.com/compute/docs/troubleshooting/rescue-vm) for further troubleshooting.\n\n     Additionally, refer to the [troubleshooting metadata server\n     guide](https://cloud.google.com/compute/docs/troubleshooting/troubleshoot-metadata-server) to address potential issues\n     with the Compute Engine metadata server.\n\n[AUTOMATED STEP]: Checking for Guest Agent startup logs\n\n   - gcpdiag-gce-vm-performance/valid-linux-ssh                           [OK]\n     [REASON]\n     Detected that Google Guest Agent is running within the VM\n\n[END]: Finalize runbook investigations.\n\n\n"
  },
  {
    "path": "gcpdiag/runbook/gce/snapshots/ops_agent.txt",
    "content": "instance_name=faulty-opsagent,project_id=gcpdiag-gce3-aaaa,zone=europe-west2-a\n\ngce/ops-agent: Investigates the necessary GCP components for the proper functioning of the Ops Agent in a VM\n\n  This runbook will examine the following key areas:\n\n  1. API Service Checks:\n    - Ensures that Cloud APIs for Logging and/or Monitoring are accessible.\n\n  2. Permission Checks:\n    - Verifies that the necessary permissions are in place for exporting logs and/or metrics.\n\n  3. Workload Authentication:\n    - Confirms that the Ops Agent has a service account for authentication.\n    - If using Google Application Credentials, provide the service account\n      with the `gac_service_account` parameter.\n\n  4. Scope of Investigation:\n    - Note that this runbook does not include internal VM checks, such as guest OS investigations.\n  \n[START]: Verify context and parameters required for Ops Agent runbook checks\n[AUTOMATED STEP]: Verify Service Account exists\n\n   - gcpdiag-gce3-aaaa/faulty-opsagent                                    [OK]\n     [REASON]\n     The Ops Agent on instance projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances/faulty-opsagent is configured with service account no-logging-monitoring-perm@gcpdiag-gce3-aaaa.iam.gserviceaccount.com for exporting logs and metrics.\n\n[AUTOMATED STEP]: Verify if the specified service account is active.\n\n   - gcpdiag-gce3-aaaa/no-logging-monitoring-perm@gcpdiag-gce3-aaaa.iam.gserviceaccount.com [OK]\n     [REASON]\n     Service account projects/gcpdiag-gce3-aaaa/serviceAccounts/no-logging-monitoring-perm@gcpdiag-gce3-aaaa.iam.gserviceaccount.com is active.\n\n[GATEWAY]: Decision point to investigate Logging and/or Monitoring related issues.\n[AUTOMATED STEP]: Verify logging.googleapis.com API is ENABLED in project gcpdiag-gce3-aaaa.\n\n   - gcpdiag-gce3-aaaa                                                    [FAIL]\n     [REASON]\n     The `logging.googleapis.com` service is not in the expected state `ENABLED`\n\n     [REMEDIATION]\n     This service is expected to be enabled.\n     Execute the command below to enable logging.googleapis.com in gcpdiag-gce3-aaaa\n\n     gcloud services enable logging.googleapis.com --project=gcpdiag-gce3-aaaa\n\n     Resources\n     <https://cloud.google.com/service-usage/docs/enable-disable#enabling>\n\n[AUTOMATED STEP]: Verify that serviceAccount:no-logging-monitoring-perm@gcpdiag-gce3-aaaa.iam.gserviceaccount.com has required permissions/roles in project/gcpdiag-gce3-aaaa.\n\n   - projects/gcpdiag-gce3-aaaa                                           [FAIL]\n     [REASON]\n     serviceAccount:no-logging-monitoring-perm@gcpdiag-gce3-aaaa.iam.gserviceaccount.com does not have at least one of the expected roles:\n     roles/editor, roles/logging.admin, roles/logging.logWriter, roles/owner.\n\n     [REMEDIATION]\n     Grant a role containing the missing permissions by following the instructions in [1].\n     Refer to [2] for a list of Google Cloud predefined roles.\n\n     Note: Consider consulting with project administrators regarding the most appropriate standard or custom role to grant.\n\n     [1] <https://cloud.google.com/iam/docs/grant-role-console>\n     [2] <https://cloud.google.com/iam/docs/understanding-roles>\n\n[AUTOMATED STEP]: Verify GCE Instance has sufficient access scope\n\n   - gcpdiag-gce3-aaaa/faulty-opsagent                                    [FAIL]\n     [REASON]\n     GCE Instance projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances/faulty-opsagent doesn't have any of the required access scopes:\n     https://www.googleapis.com/auth/cloud-platform, https://www.googleapis.com/auth/logging.admin, https://www.googleapis.com/auth/logging.write\n\n     [REMEDIATION]\n     Access scopes are the legacy method of specifying authorization for your VM instance.\n     They define the default OAuth scopes used in requests from the gcloud CLI or the client libraries.\n     Access scopes don't apply for calls made using gRPC.\n\n     Update `projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances/faulty-opsagent` to enable at least one of the following access scopes:\n     https://www.googleapis.com/auth/cloud-platform, https://www.googleapis.com/auth/logging.admin, https://www.googleapis.com/auth/logging.write\n\n     Consult the following documentation for guidance on changing the service account and scopes:\n     <https://cloud.google.com/compute/docs/instances/change-service-account#changeserviceaccountandscopes>\n\n[AUTOMATED STEP]: Verify GCE Instance's has ops agent installed and currently active\n\n   - gcpdiag-gce3-aaaa/faulty-opsagent                                    [OK]\n     [REASON]\n     GCE Instance \"projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances/faulty-opsagent\" has logging agent installed and is exporting data.\n\n[COMPOSITE STEP]: Verify GCP config required for serial port logging with ops agent\n[AUTOMATED STEP]: Checking Organization policy\n[AUTOMATED STEP]: Verify VM metadata value.\n\n   - gcpdiag-gce3-aaaa/faulty-opsagent                                    [FAIL]\n     [REASON]\n     GCE Instance metadata `serial-port-logging-enable` doesn't have the expected value: True\n     of type <class 'bool'>\n\n     [REMEDIATION]\n     Update the metadata `serial-port-logging-enable` to have the expected value True\n     Follow guide [1] one to update the a metadata value.\n     [1] <https://cloud.google.com/compute/docs/metadata/setting-custom-metadata#gcloud>\n\n[AUTOMATED STEP]: Verify monitoring.googleapis.com API is ENABLED in project gcpdiag-gce3-aaaa.\n\n   - gcpdiag-gce3-aaaa                                                    [FAIL]\n     [REASON]\n     The `monitoring.googleapis.com` service is not in the expected state `ENABLED`\n\n     [REMEDIATION]\n     This service is expected to be enabled.\n     Execute the command below to enable monitoring.googleapis.com in gcpdiag-gce3-aaaa\n\n     gcloud services enable monitoring.googleapis.com --project=gcpdiag-gce3-aaaa\n\n     Resources\n     <https://cloud.google.com/service-usage/docs/enable-disable#enabling>\n\n[AUTOMATED STEP]: Verify that serviceAccount:no-logging-monitoring-perm@gcpdiag-gce3-aaaa.iam.gserviceaccount.com has required permissions/roles in project/gcpdiag-gce3-aaaa.\n\n   - projects/gcpdiag-gce3-aaaa                                           [FAIL]\n     [REASON]\n     serviceAccount:no-logging-monitoring-perm@gcpdiag-gce3-aaaa.iam.gserviceaccount.com does not have at least one of the expected roles:\n     roles/editor, roles/monitoring.admin, roles/monitoring.editor, roles/monitoring.metricWriter, roles/owner.\n\n     [REMEDIATION]\n     Grant a role containing the missing permissions by following the instructions in [1].\n     Refer to [2] for a list of Google Cloud predefined roles.\n\n     Note: Consider consulting with project administrators regarding the most appropriate standard or custom role to grant.\n\n     [1] <https://cloud.google.com/iam/docs/grant-role-console>\n     [2] <https://cloud.google.com/iam/docs/understanding-roles>\n\n[AUTOMATED STEP]: Verify GCE Instance has sufficient access scope\n\n   - gcpdiag-gce3-aaaa/faulty-opsagent                                    [FAIL]\n     [REASON]\n     GCE Instance projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances/faulty-opsagent doesn't have any of the required access scopes:\n     https://www.googleapis.com/auth/cloud-platform, https://www.googleapis.com/auth/monitoring, https://www.googleapis.com/auth/monitoring.write\n\n     [REMEDIATION]\n     Access scopes are the legacy method of specifying authorization for your VM instance.\n     They define the default OAuth scopes used in requests from the gcloud CLI or the client libraries.\n     Access scopes don't apply for calls made using gRPC.\n\n     Update `projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances/faulty-opsagent` to enable at least one of the following access scopes:\n     https://www.googleapis.com/auth/cloud-platform, https://www.googleapis.com/auth/monitoring, https://www.googleapis.com/auth/monitoring.write\n\n     Consult the following documentation for guidance on changing the service account and scopes:\n     <https://cloud.google.com/compute/docs/instances/change-service-account#changeserviceaccountandscopes>\n\n[AUTOMATED STEP]: Verify GCE Instance's has ops agent installed and currently active\n\n   - gcpdiag-gce3-aaaa/faulty-opsagent                                    [FAIL]\n     [REASON]\n     GCE Instance \"projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances/faulty-opsagent\" does not have metrics agent installed and is not exporting data.\n\n     [REMEDIATION]\n     Install the metrics agent on GCE Instance \"projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances/faulty-opsagent\".\n     Consult the following documentation for troubleshooting assistance:\n     <https://cloud.google.com/stackdriver/docs/solutions/agents/ops-agent/troubleshoot-run-ingest>\n\n[END]: Finalize Ops agent checks\n[INFO]: There are new logs indicating ops agent is exporting serial logs\n\n\ninstance_name=faulty-opsagent-no-sa,project_id=gcpdiag-gce3-aaaa,zone=europe-west2-a\n\ngce/ops-agent: Investigates the necessary GCP components for the proper functioning of the Ops Agent in a VM\n\n  This runbook will examine the following key areas:\n\n  1. API Service Checks:\n    - Ensures that Cloud APIs for Logging and/or Monitoring are accessible.\n\n  2. Permission Checks:\n    - Verifies that the necessary permissions are in place for exporting logs and/or metrics.\n\n  3. Workload Authentication:\n    - Confirms that the Ops Agent has a service account for authentication.\n    - If using Google Application Credentials, provide the service account\n      with the `gac_service_account` parameter.\n\n  4. Scope of Investigation:\n    - Note that this runbook does not include internal VM checks, such as guest OS investigations.\n  \n[START]: Verify context and parameters required for Ops Agent runbook checks\n[AUTOMATED STEP]: Verify Service Account exists\n\n   - gcpdiag-gce3-aaaa/faulty-opsagent-no-sa                              [OK]\n     [REASON]\n     The Ops Agent on instance projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances/faulty-opsagent-no-sa is configured with service account 12345001-compute@developer.gserviceaccount.com for exporting logs and metrics.\n\n[AUTOMATED STEP]: Verify if the specified service account is active.\n\n   - gcpdiag-gce3-aaaa/12345001-compute@developer.gserviceaccount.com     [OK]\n     [REASON]\n     Service account projects/gcpdiag-gce3-aaaa/serviceAccounts/12345001-compute@developer.gserviceaccount.com is active.\n\n[GATEWAY]: Decision point to investigate Logging and/or Monitoring related issues.\n[AUTOMATED STEP]: Verify logging.googleapis.com API is ENABLED in project gcpdiag-gce3-aaaa.\n\n   - gcpdiag-gce3-aaaa                                                    [FAIL]\n     [REASON]\n     The `logging.googleapis.com` service is not in the expected state `ENABLED`\n\n     [REMEDIATION]\n     This service is expected to be enabled.\n     Execute the command below to enable logging.googleapis.com in gcpdiag-gce3-aaaa\n\n     gcloud services enable logging.googleapis.com --project=gcpdiag-gce3-aaaa\n\n     Resources\n     <https://cloud.google.com/service-usage/docs/enable-disable#enabling>\n\n[AUTOMATED STEP]: Verify that serviceAccount:12345001-compute@developer.gserviceaccount.com has required permissions/roles in project/gcpdiag-gce3-aaaa.\n\n   - projects/gcpdiag-gce3-aaaa                                           [OK]\n     [REASON]\n     serviceAccount:12345001-compute@developer.gserviceaccount.com has expected roles.\n     roles/editor, roles/logging.admin, roles/logging.logWriter, roles/owner.\n\n[AUTOMATED STEP]: Verify GCE Instance has sufficient access scope\n\n   - gcpdiag-gce3-aaaa/faulty-opsagent-no-sa                              [FAIL]\n     [REASON]\n     GCE Instance projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances/faulty-opsagent-no-sa doesn't have any of the required access scopes:\n     https://www.googleapis.com/auth/cloud-platform, https://www.googleapis.com/auth/logging.admin, https://www.googleapis.com/auth/logging.write\n\n     [REMEDIATION]\n     Access scopes are the legacy method of specifying authorization for your VM instance.\n     They define the default OAuth scopes used in requests from the gcloud CLI or the client libraries.\n     Access scopes don't apply for calls made using gRPC.\n\n     Update `projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances/faulty-opsagent-no-sa` to enable at least one of the following access scopes:\n     https://www.googleapis.com/auth/cloud-platform, https://www.googleapis.com/auth/logging.admin, https://www.googleapis.com/auth/logging.write\n\n     Consult the following documentation for guidance on changing the service account and scopes:\n     <https://cloud.google.com/compute/docs/instances/change-service-account#changeserviceaccountandscopes>\n\n[AUTOMATED STEP]: Verify GCE Instance's has ops agent installed and currently active\n\n   - gcpdiag-gce3-aaaa/faulty-opsagent-no-sa                              [OK]\n     [REASON]\n     GCE Instance \"projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances/faulty-opsagent-no-sa\" has logging agent installed and is exporting data.\n\n[COMPOSITE STEP]: Verify GCP config required for serial port logging with ops agent\n[AUTOMATED STEP]: Checking Organization policy\n[AUTOMATED STEP]: Verify VM metadata value.\n\n   - gcpdiag-gce3-aaaa/faulty-opsagent-no-sa                              [FAIL]\n     [REASON]\n     GCE Instance metadata `serial-port-logging-enable` doesn't have the expected value: True\n     of type <class 'bool'>\n\n     [REMEDIATION]\n     Update the metadata `serial-port-logging-enable` to have the expected value True\n     Follow guide [1] one to update the a metadata value.\n     [1] <https://cloud.google.com/compute/docs/metadata/setting-custom-metadata#gcloud>\n\n[AUTOMATED STEP]: Verify monitoring.googleapis.com API is ENABLED in project gcpdiag-gce3-aaaa.\n\n   - gcpdiag-gce3-aaaa                                                    [FAIL]\n     [REASON]\n     The `monitoring.googleapis.com` service is not in the expected state `ENABLED`\n\n     [REMEDIATION]\n     This service is expected to be enabled.\n     Execute the command below to enable monitoring.googleapis.com in gcpdiag-gce3-aaaa\n\n     gcloud services enable monitoring.googleapis.com --project=gcpdiag-gce3-aaaa\n\n     Resources\n     <https://cloud.google.com/service-usage/docs/enable-disable#enabling>\n\n[AUTOMATED STEP]: Verify that serviceAccount:12345001-compute@developer.gserviceaccount.com has required permissions/roles in project/gcpdiag-gce3-aaaa.\n\n   - projects/gcpdiag-gce3-aaaa                                           [OK]\n     [REASON]\n     serviceAccount:12345001-compute@developer.gserviceaccount.com has expected roles.\n     roles/editor, roles/monitoring.admin, roles/monitoring.editor, roles/monitoring.metricWriter, roles/owner.\n\n[AUTOMATED STEP]: Verify GCE Instance has sufficient access scope\n\n   - gcpdiag-gce3-aaaa/faulty-opsagent-no-sa                              [FAIL]\n     [REASON]\n     GCE Instance projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances/faulty-opsagent-no-sa doesn't have any of the required access scopes:\n     https://www.googleapis.com/auth/cloud-platform, https://www.googleapis.com/auth/monitoring, https://www.googleapis.com/auth/monitoring.write\n\n     [REMEDIATION]\n     Access scopes are the legacy method of specifying authorization for your VM instance.\n     They define the default OAuth scopes used in requests from the gcloud CLI or the client libraries.\n     Access scopes don't apply for calls made using gRPC.\n\n     Update `projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances/faulty-opsagent-no-sa` to enable at least one of the following access scopes:\n     https://www.googleapis.com/auth/cloud-platform, https://www.googleapis.com/auth/monitoring, https://www.googleapis.com/auth/monitoring.write\n\n     Consult the following documentation for guidance on changing the service account and scopes:\n     <https://cloud.google.com/compute/docs/instances/change-service-account#changeserviceaccountandscopes>\n\n[AUTOMATED STEP]: Verify GCE Instance's has ops agent installed and currently active\n\n   - gcpdiag-gce3-aaaa/faulty-opsagent-no-sa                              [FAIL]\n     [REASON]\n     GCE Instance \"projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances/faulty-opsagent-no-sa\" does not have metrics agent installed and is not exporting data.\n\n     [REMEDIATION]\n     Install the metrics agent on GCE Instance \"projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances/faulty-opsagent-no-sa\".\n     Consult the following documentation for troubleshooting assistance:\n     <https://cloud.google.com/stackdriver/docs/solutions/agents/ops-agent/troubleshoot-run-ingest>\n\n[END]: Finalize Ops agent checks\n[INFO]: There are new logs indicating ops agent is exporting serial logs\n\n\ninstance_name=working-opsagent,project_id=gcpdiag-gce3-aaaa,zone=europe-west2-a\n\ngce/ops-agent: Investigates the necessary GCP components for the proper functioning of the Ops Agent in a VM\n\n  This runbook will examine the following key areas:\n\n  1. API Service Checks:\n    - Ensures that Cloud APIs for Logging and/or Monitoring are accessible.\n\n  2. Permission Checks:\n    - Verifies that the necessary permissions are in place for exporting logs and/or metrics.\n\n  3. Workload Authentication:\n    - Confirms that the Ops Agent has a service account for authentication.\n    - If using Google Application Credentials, provide the service account\n      with the `gac_service_account` parameter.\n\n  4. Scope of Investigation:\n    - Note that this runbook does not include internal VM checks, such as guest OS investigations.\n  \n[START]: Verify context and parameters required for Ops Agent runbook checks\n[AUTOMATED STEP]: Verify Service Account exists\n\n   - gcpdiag-gce3-aaaa/working-opsagent                                   [OK]\n     [REASON]\n     The Ops Agent on instance projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances/working-opsagent is configured with service account 12345001-compute@developer.gserviceaccount.com for exporting logs and metrics.\n\n[AUTOMATED STEP]: Verify if the specified service account is active.\n\n   - gcpdiag-gce3-aaaa/12345001-compute@developer.gserviceaccount.com     [OK]\n     [REASON]\n     Service account projects/gcpdiag-gce3-aaaa/serviceAccounts/12345001-compute@developer.gserviceaccount.com is active.\n\n[GATEWAY]: Decision point to investigate Logging and/or Monitoring related issues.\n[AUTOMATED STEP]: Verify logging.googleapis.com API is ENABLED in project gcpdiag-gce3-aaaa.\n\n   - gcpdiag-gce3-aaaa                                                    [FAIL]\n     [REASON]\n     The `logging.googleapis.com` service is not in the expected state `ENABLED`\n\n     [REMEDIATION]\n     This service is expected to be enabled.\n     Execute the command below to enable logging.googleapis.com in gcpdiag-gce3-aaaa\n\n     gcloud services enable logging.googleapis.com --project=gcpdiag-gce3-aaaa\n\n     Resources\n     <https://cloud.google.com/service-usage/docs/enable-disable#enabling>\n\n[AUTOMATED STEP]: Verify that serviceAccount:12345001-compute@developer.gserviceaccount.com has required permissions/roles in project/gcpdiag-gce3-aaaa.\n\n   - projects/gcpdiag-gce3-aaaa                                           [OK]\n     [REASON]\n     serviceAccount:12345001-compute@developer.gserviceaccount.com has expected roles.\n     roles/editor, roles/logging.admin, roles/logging.logWriter, roles/owner.\n\n[AUTOMATED STEP]: Verify GCE Instance has sufficient access scope\n\n   - gcpdiag-gce3-aaaa/working-opsagent                                   [OK]\n     [REASON]\n     GCE instance projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances/working-opsagent has at least one of the required scope:\n     https://www.googleapis.com/auth/logging.write\n\n[AUTOMATED STEP]: Verify GCE Instance's has ops agent installed and currently active\n\n   - gcpdiag-gce3-aaaa/working-opsagent                                   [OK]\n     [REASON]\n     GCE Instance \"projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances/working-opsagent\" has logging agent installed and is exporting data.\n\n[COMPOSITE STEP]: Verify GCP config required for serial port logging with ops agent\n[AUTOMATED STEP]: Checking Organization policy\n[AUTOMATED STEP]: Verify VM metadata value.\n\n   - gcpdiag-gce3-aaaa/working-opsagent                                   [OK]\n     [REASON]\n     GCE Instance metadata `serial-port-logging-enable` has the expected value: True\n     of type <class 'bool'>\n\n[AUTOMATED STEP]: Verify monitoring.googleapis.com API is ENABLED in project gcpdiag-gce3-aaaa.\n\n   - gcpdiag-gce3-aaaa                                                    [FAIL]\n     [REASON]\n     The `monitoring.googleapis.com` service is not in the expected state `ENABLED`\n\n     [REMEDIATION]\n     This service is expected to be enabled.\n     Execute the command below to enable monitoring.googleapis.com in gcpdiag-gce3-aaaa\n\n     gcloud services enable monitoring.googleapis.com --project=gcpdiag-gce3-aaaa\n\n     Resources\n     <https://cloud.google.com/service-usage/docs/enable-disable#enabling>\n\n[AUTOMATED STEP]: Verify that serviceAccount:12345001-compute@developer.gserviceaccount.com has required permissions/roles in project/gcpdiag-gce3-aaaa.\n\n   - projects/gcpdiag-gce3-aaaa                                           [OK]\n     [REASON]\n     serviceAccount:12345001-compute@developer.gserviceaccount.com has expected roles.\n     roles/editor, roles/monitoring.admin, roles/monitoring.editor, roles/monitoring.metricWriter, roles/owner.\n\n[AUTOMATED STEP]: Verify GCE Instance has sufficient access scope\n\n   - gcpdiag-gce3-aaaa/working-opsagent                                   [OK]\n     [REASON]\n     GCE instance projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances/working-opsagent has at least one of the required scope:\n     https://www.googleapis.com/auth/monitoring.write\n\n[AUTOMATED STEP]: Verify GCE Instance's has ops agent installed and currently active\n\n   - gcpdiag-gce3-aaaa/working-opsagent                                   [FAIL]\n     [REASON]\n     GCE Instance \"projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances/working-opsagent\" does not have metrics agent installed and is not exporting data.\n\n     [REMEDIATION]\n     Install the metrics agent on GCE Instance \"projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances/working-opsagent\".\n     Consult the following documentation for troubleshooting assistance:\n     <https://cloud.google.com/stackdriver/docs/solutions/agents/ops-agent/troubleshoot-run-ingest>\n\n[END]: Finalize Ops agent checks\n[INFO]: There are new logs indicating ops agent is exporting serial logs\n\n\n"
  },
  {
    "path": "gcpdiag/runbook/gce/snapshots/serial_log_analyzer.txt",
    "content": "instance_name=faulty-linux-ssh,project_id=gcpdiag-gce-vm-performance,zone=europe-west2-a\n\ngce/serial-log-analyzer:  Google Compute Engine VM Serial log analyzer\n\n    This runbook is designed to assist you in investigating the serial console logs of a vm.\n\n    Key Investigation Areas:\n\n    Boot Issues:\n        - Check for Boot issues happening due to Kernel panics\n        - Check for GRUB related issues.\n        - Check if system failed to find boot disk.\n        - Check if Filesystem corruption is causing issues with system boot.\n        - Check if \"/\" Filesystem consumption is causing issues with system boot.\n\n    Memory crunch issues:\n        - Check if OOM kills happened on the VM or any other memory related issues.\n\n    Cloud-init checks:\n        - Check if cloud-init has initialised or started.\n        - Check if NIC has received the IP.\n\n    Network related issues:\n        - Check if metadata server became unreachable since last boot.\n        - Check if there are any time sync related errors.\n\n    SSHD checks:\n        - Check if there are logs related to successful startup of SSHD service.\n\n    SSHD Auth Failures checks:\n        - Check for SSH issues due to bad permissions of files or directories\n\n    Google Guest Agent checks:\n        - Check if there are logs related to successful startup of Google Guest Agent.\n\n    SSH guard check:\n        - Check if SSHGuard is active and may be blocking IP addresses\n    \n[START]: Verify GCE Instance is in a \"RUNNING\" state.\n[AUTOMATED STEP]: Verify all logs available since last boot of the instance\n\n   - gcpdiag-gce-vm-performance/faulty-linux-ssh                          [OK]\n     [REASON]\n     Found all logs since last boot of the VM.\n\n[AUTOMATED STEP]: Examine Guest OS if there are any indications of kernel panic.\n\n   - gcpdiag-gce-vm-performance/faulty-linux-ssh                          [FAIL]\n     [REASON]\n     Detected kernel panic logs in projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/faulty-linux-ssh serial logs,\n     which is likely preventing the VM from booting up correctly.\n\n     [REMEDIATION]\n     Kernel panics can be caused by different issues within the guest.\n     Address underlying issues causing boot problems to solve the kernel panic:\n\n     **General Kernel panic Troubleshooting**\n\n     1. Consult the Troubleshooting Guide for Kernel Panic Errors:\n        - Kernel panic is commonly caused by file system errors in Linux Guest OS.\n        - Check `/etc/fstab` for incorrect entries that could halt the boot process.\n        - Refer to this guide for resolving [kernel panic issues caused by\n     /etc/fstab](https://cloud.google.com/compute/docs/troubleshooting/fstab-errors).\n\n     2. Resources for Kernel panic\n        - [Troubleshooting GCE Instance experiencing Kernel\n     Panic](https://cloud.google.com/compute/docs/troubleshooting/kernel-panic#resolve_the_kernel_panic_error)\n        - [Common Red Hat Kernel Panic\n     Issues](https://access.redhat.com/search/knowledgebase?q=kernel+panic&p=1&rows=10&documentKind=Solution%26Documentation&sort=relevant)\n        - [Common SUSE Kernel Panic Issues](https://www.suse.com/support/kb/?id=&q=kernel+panic&bu_suse=true&advanced=false)\n\n     3. Rescue an instance experiencing kernel panic\n        - [How to rescue a experiencing kernel panic](https://cloud.google.com/compute/docs/troubleshooting/rescue-vm) to\n     recover faulty VMs.\n        - Watch this video for a walkthrough: [Rescue VM Guide](https://www.youtube.com/watch?v=oD6IFpjEtEw)\n\n     4 Google Cloud Platform Support Scope:\n     [Understand GCP support for kernel-related\n     issues](https://cloud.google.com/compute/docs/images/support-maintenance-policy#support-scope).\n\n[AUTOMATED STEP]: Verify any Filesystem corruption related errors in Serial console logs\n\n   - gcpdiag-gce-vm-performance/faulty-linux-ssh                          [FAIL]\n     [REASON]\n     Possible filesystem corruption detected.\n\n     The patterns used:\n\n     ```\n     'Corruption of in-memory data detected. Shutting down filesystem',\n     'Corruption of in-memory data detected', 'warning: mounting fs with errors',\n     'Failed to mount /',\n     'A stop job is running for Security \\.\\.\\..* Service ',\n     'I/O Error Detected. Shutting down filesystem',\n     'metadata I/O error in'\n     ```\n\n\n     [REMEDIATION]\n     To resolve filesystem corruption, admins can use [gce-rescue](https://github.com/GoogleCloudPlatform/gce-rescue),\n     available in Cloud Shell, to rescue faulty VMs. Alternatively, you can follow the\n     [manual method](https://cloud.google.com/compute/docs/troubleshooting/rescue-vm) to repair the filesystem.\n\n     Additional resources for reference:\n\n     - [Red Hat article on filesystem repair](https://access.redhat.com/solutions/1750923)\n     - [Video guide on rescuing VMs](https://www.youtube.com/watch?v=oD6IFpjEtEw)\n\n     These resources provide detailed steps for diagnosing and resolving filesystem issues.\n\n[AUTOMATED STEP]: Verify high disk utilization related logs in serial console logs\n\n   - gcpdiag-gce-vm-performance/faulty-linux-ssh                          [FAIL]\n     [REASON]\n     Found high disk utilisation errors in Serial console logs.\n     The patterns used:\n\n     ```\n     'No space left on device',\n     'No usable temporary directory found',\n     'A stop job is running for Security \\.\\.\\..* Service ',\n     'disk is at or near capacity'\n     ```\n\n\n     [REMEDIATION]\n     To mitigate high disk usage, consider expanding the VM's boot disk capacity.\n     This action can help avoid performance issues and ensure accessibility of the VM.\n\n     Consult the following guide to increase disk size:\n     <https://cloud.google.com/compute/docs/disks/resize-persistent-disk#increase_the_size_of_a_disk>\n\n[AUTOMATED STEP]: Verify any slow Disk operations related errors in Serial console logs\n\n   - gcpdiag-gce-vm-performance/faulty-linux-ssh                          [UNCERTAIN]\n     [REASON]\n     No error messages related to disk latency were found in the serial console logs.\n     This does not rule out disk performance issues.\n\n     [REMEDIATION]\n     There can be multiple reasons which can cause Slow Disk IOs:\n\n     - CPU Starvation - Small instances (with lesser CPUs) may not have enough CPU to serve all I/Os inflight.\n     <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-performance#cpu_and_memory_performance>\n\n     - Network Throttling - High sent/received network traffic can cause network throttling that impacts disk operations.\n     <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-performance#network_performance>\n\n     - Insufficient Machine Resources - If your machine's IOPS and throughput limits are not enough to serve your workloads,\n     this can also cause CPU or Disk IOPS/throughput Starvation.\n     <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-performance#storage_performance>\n\n     - Application and GuestOS Operations - Unmanaged and untested application workloads can cause the high influx of IOs\n     to the disk and cause IO operations to be queued, causing throttling at disk and CPU levels.\n\n     To fix this issue:\n\n     - Please optimize your application workloads.\n     - If needed, please add more resources(CPU, Memory) to the VM.\n     - Please optimize your Disk performance -\n     <https://cloud.google.com/compute/docs/disks/optimizing-pd-performance>\n     - If needed, please change your disk type to get better Disk IOPS/throughput limits -\n     <https://cloud.google.com/compute/docs/disks/modify-persistent-disk#disk_type>\n\n[AUTOMATED STEP]: Verify memory related errors in VM serial logs.\n\n   - gcpdiag-gce-vm-performance/faulty-linux-ssh                          [UNCERTAIN]\n     [REASON]\n     Unable to investigate the high memory utilization error logs, likely due to the absence of logs.\n     However, this does not eliminate the possibility of high memory usage.\n\n     Manual verification of memory utilization on the Guest OS is recommended as a potential cause.\n\n     [REMEDIATION]\n\n     1. Manually investigate memory usage by accessing the Guest OS:\n        - Identify processes with consistently high memory consumption using `top` (press \"M\") or `ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head -n 5`.\n        - Focus on processes with recent spikes or consistently high memory usage.\n        - If SSH access is unavailable, troubleshoot via the serial console:\n          <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-using-serial-console>\n\n     2. Review recent application or configuration changes:\n        - Investigate if recent deployments, updates, or configuration changes correlate with increased memory usage.\n\n     3. Resolve identified bottlenecks:\n        - For applications causing excessive memory usage, optimize their configuration or update them. Explore alternatives if optimization is insufficient.\n        - Evaluate scaling up resources if high memory usage results from legitimate application demands.\n\n     4. Increase instance memory if necessary:\n        - Stop the VM and change its machine type:\n          <https://cloud.google.com/compute/docs/instances/changing-machine-type-of-stopped-instance#gcloud>\n        - Consult the machine type documentation to select an appropriate configuration:\n          <https://cloud.google.com/compute/docs/machine-types>\n\n     **Note:** Non-Google provided application-specific issues may fall outside the support scope. Collaborate with relevant application teams for further investigation. Refer to the Google Cloud Platform support policy for details, including out-of-scope items:\n\n     - Support and maintenance policy: <https://cloud.google.com/compute/docs/images/support-maintenance-policy#support-scope>\n     - Out-of-scope items: <https://cloud.google.com/compute/docs/images/support-maintenance-policy#out-of-scope_for_support>\n\n[COMPOSITE STEP]: Cloud init related checks\n\n   - gcpdiag-gce-vm-performance/faulty-linux-ssh                          [SKIP]\n     [REASON]\n     This VM is not Ubuntu or it does not uses cloud-init\n[AUTOMATED STEP]: Check for metadata network connectivity errors\n\n   - gcpdiag-gce-vm-performance/faulty-linux-ssh                          [FAIL]\n     [REASON]\n     The metadata server(169.254.169.254) is unreachable from the GCE Instance.\n     The instance might not have IP assigned to its primary NIC.\n\n     [REMEDIATION]\n     Attempt to log in to the instance via the serial console using a password and check the status of the network stack.\n\n     If login via the serial console is unsuccessful, consider restarting the instance.\n\n     If the issue persists after a reboot, follow the [rescue VM\n     guide](https://cloud.google.com/compute/docs/troubleshooting/rescue-vm) for further troubleshooting.\n\n     Additionally, refer to the [troubleshooting metadata server\n     guide](https://cloud.google.com/compute/docs/troubleshooting/troubleshoot-metadata-server) to address potential issues\n     with the Compute Engine metadata server.\n\n[AUTOMATED STEP]: Check for Time Sync related errors from GCE serial logs.\n\n   - gcpdiag-gce-vm-performance/faulty-linux-ssh                          [UNCERTAIN]\n     [REASON]\n     No Time sync related errors in Serial console logs.\n\n     [REMEDIATION]\n     Connect to the GCE Instance and verify that the NTP server configuration adheres to Google Cloud Platform standards.\n     Refer to the [Google Cloud NTP configuration\n     guide](https://cloud.google.com/compute/docs/instances/configure-ntp).\n\n[AUTOMATED STEP]: Verify OpenSSH daemon (sshd) has started from most recent serial logs.\n\n   - gcpdiag-gce-vm-performance/faulty-linux-ssh                          [OK]\n     [REASON]\n     The latest OpenSSH daemon (sshd) logs indicate that the daemon has started.\n\n[AUTOMATED STEP]: Examining SSHD authentication failures via serial logs.\n\n   - gcpdiag-gce-vm-performance/faulty-linux-ssh                          [FAIL]\n     [REASON]\n     Detected SSHD authentication issues in the GCE Instance, which is affecting SSH access.\n     Found the error \"Authentication refused: bad ownership or modes for directory\"\n\n     [REMEDIATION]\n     To mitigate \"bad ownership or modes for directory\" errors:\n\n     1. Follow either of the below steps to check the permissions:\n        - these steps to rescue the vm:\n     <https://cloud.google.com/compute/docs/troubleshooting/rescue-vm>\n        - these steps login through serial console:\n     <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-using-serial-console>\n     2. Refer to the standard permissions required for ssh connection:\n     <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-ssh-errors#permissions>\n\n[AUTOMATED STEP]: Checking for Guest Agent startup logs\n\n   - gcpdiag-gce-vm-performance/faulty-linux-ssh                          [OK]\n     [REASON]\n     Detected that Google Guest Agent is running within the VM\n\n[AUTOMATED STEP]: Verify if SSHGuard is installed and blocking SSH connectivity\n\n   - gcpdiag-gce-vm-performance/faulty-linux-ssh                          [UNCERTAIN]\n     [REASON]\n     The retrieved logs do not contain definitive entries, either positive or negative,\n     to make a conclusive assessment.\n     Review the GCE serial logs to determine if SSHGuard is a likely cause.\n\n     [REMEDIATION]\n     Issues related to SSHGuard fall outside the standard support scope for Google Cloud Platform.\n     Consult the most appropriate team within your organisation to assist with resolution.\n     For guest OS issues and SSHGuard configurations, refer to:\n\n     - Support Scope: <https://cloud.google.com/compute/docs/images/support-maintenance-policy#support-scope>\n     - Out of Scope Support: <https://cloud.google.com/compute/docs/images/support-maintenance-policy#out-of-scope_for_support>\n\n[END]: Finalize Serial console Log Analysis.\n\n\nname=valid-linux-ssh,project_id=gcpdiag-gce-vm-performance,zone=europe-west2-a\n\ngce/serial-log-analyzer:  Google Compute Engine VM Serial log analyzer\n\n    This runbook is designed to assist you in investigating the serial console logs of a vm.\n\n    Key Investigation Areas:\n\n    Boot Issues:\n        - Check for Boot issues happening due to Kernel panics\n        - Check for GRUB related issues.\n        - Check if system failed to find boot disk.\n        - Check if Filesystem corruption is causing issues with system boot.\n        - Check if \"/\" Filesystem consumption is causing issues with system boot.\n\n    Memory crunch issues:\n        - Check if OOM kills happened on the VM or any other memory related issues.\n\n    Cloud-init checks:\n        - Check if cloud-init has initialised or started.\n        - Check if NIC has received the IP.\n\n    Network related issues:\n        - Check if metadata server became unreachable since last boot.\n        - Check if there are any time sync related errors.\n\n    SSHD checks:\n        - Check if there are logs related to successful startup of SSHD service.\n\n    SSHD Auth Failures checks:\n        - Check for SSH issues due to bad permissions of files or directories\n\n    Google Guest Agent checks:\n        - Check if there are logs related to successful startup of Google Guest Agent.\n\n    SSH guard check:\n        - Check if SSHGuard is active and may be blocking IP addresses\n    \n[START]: Verify GCE Instance is in a \"RUNNING\" state.\n[AUTOMATED STEP]: Verify all logs available since last boot of the instance\n\n   - gcpdiag-gce-vm-performance/valid-linux-ssh                           [OK]\n     [REASON]\n     Found all logs since last boot of the VM.\n\n[AUTOMATED STEP]: Examine Guest OS if there are any indications of kernel panic.\n\n   - gcpdiag-gce-vm-performance/valid-linux-ssh                           [UNCERTAIN]\n     [REASON]\n     No serial logs were found for the VM projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/valid-linux-ssh. However, this does not rule out the possibility of a kernel\n     panic.\n\n     [REMEDIATION]\n     Kernel panics can be caused by different issues within the guest.\n     Address underlying issues causing boot problems to solve the kernel panic:\n\n     **General Kernel panic Troubleshooting**\n\n     1. Consult the Troubleshooting Guide for Kernel Panic Errors:\n        - Kernel panic is commonly caused by file system errors in Linux Guest OS.\n        - Check `/etc/fstab` for incorrect entries that could halt the boot process.\n        - Refer to this guide for resolving [kernel panic issues caused by\n     /etc/fstab](https://cloud.google.com/compute/docs/troubleshooting/fstab-errors).\n\n     2. Resources for Kernel panic\n        - [Troubleshooting GCE Instance experiencing Kernel\n     Panic](https://cloud.google.com/compute/docs/troubleshooting/kernel-panic#resolve_the_kernel_panic_error)\n        - [Common Red Hat Kernel Panic\n     Issues](https://access.redhat.com/search/knowledgebase?q=kernel+panic&p=1&rows=10&documentKind=Solution%26Documentation&sort=relevant)\n        - [Common SUSE Kernel Panic Issues](https://www.suse.com/support/kb/?id=&q=kernel+panic&bu_suse=true&advanced=false)\n\n     3. Rescue an instance experiencing kernel panic\n        - [How to rescue a experiencing kernel panic](https://cloud.google.com/compute/docs/troubleshooting/rescue-vm) to\n     recover faulty VMs.\n        - Watch this video for a walkthrough: [Rescue VM Guide](https://www.youtube.com/watch?v=oD6IFpjEtEw)\n\n     4 Google Cloud Platform Support Scope:\n     [Understand GCP support for kernel-related\n     issues](https://cloud.google.com/compute/docs/images/support-maintenance-policy#support-scope).\n\n[AUTOMATED STEP]: Verify any Filesystem corruption related errors in Serial console logs\n\n   - gcpdiag-gce-vm-performance/valid-linux-ssh                           [UNCERTAIN]\n     [REASON]\n     No evidence Filesystem corruption errors present in the serial logs.\n\n     [REMEDIATION]\n     To resolve filesystem corruption, admins can use [gce-rescue](https://github.com/GoogleCloudPlatform/gce-rescue),\n     available in Cloud Shell, to rescue faulty VMs. Alternatively, you can follow the\n     [manual method](https://cloud.google.com/compute/docs/troubleshooting/rescue-vm) to repair the filesystem.\n\n     Additional resources for reference:\n\n     - [Red Hat article on filesystem repair](https://access.redhat.com/solutions/1750923)\n     - [Video guide on rescuing VMs](https://www.youtube.com/watch?v=oD6IFpjEtEw)\n\n     These resources provide detailed steps for diagnosing and resolving filesystem issues.\n\n[AUTOMATED STEP]: Verify high disk utilization related logs in serial console logs\n\n   - gcpdiag-gce-vm-performance/valid-linux-ssh                           [UNCERTAIN]\n     [REASON]\n     Serial console logs were not available for examination.\n\n     [REMEDIATION]\n     To mitigate high disk usage, consider expanding the VM's boot disk capacity.\n     This action can help avoid performance issues and ensure accessibility of the VM.\n\n     Consult the following guide to increase disk size:\n     <https://cloud.google.com/compute/docs/disks/resize-persistent-disk#increase_the_size_of_a_disk>\n\n[AUTOMATED STEP]: Verify any slow Disk operations related errors in Serial console logs\n\n   - gcpdiag-gce-vm-performance/valid-linux-ssh                           [UNCERTAIN]\n     [REASON]\n     No error messages related to disk latency were found in the serial console logs.\n     This does not rule out disk performance issues.\n\n     [REMEDIATION]\n     There can be multiple reasons which can cause Slow Disk IOs:\n\n     - CPU Starvation - Small instances (with lesser CPUs) may not have enough CPU to serve all I/Os inflight.\n     <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-performance#cpu_and_memory_performance>\n\n     - Network Throttling - High sent/received network traffic can cause network throttling that impacts disk operations.\n     <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-performance#network_performance>\n\n     - Insufficient Machine Resources - If your machine's IOPS and throughput limits are not enough to serve your workloads,\n     this can also cause CPU or Disk IOPS/throughput Starvation.\n     <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-performance#storage_performance>\n\n     - Application and GuestOS Operations - Unmanaged and untested application workloads can cause the high influx of IOs\n     to the disk and cause IO operations to be queued, causing throttling at disk and CPU levels.\n\n     To fix this issue:\n\n     - Please optimize your application workloads.\n     - If needed, please add more resources(CPU, Memory) to the VM.\n     - Please optimize your Disk performance -\n     <https://cloud.google.com/compute/docs/disks/optimizing-pd-performance>\n     - If needed, please change your disk type to get better Disk IOPS/throughput limits -\n     <https://cloud.google.com/compute/docs/disks/modify-persistent-disk#disk_type>\n\n[AUTOMATED STEP]: Verify memory related errors in VM serial logs.\n\n   - gcpdiag-gce-vm-performance/valid-linux-ssh                           [UNCERTAIN]\n     [REASON]\n     Unable to investigate the high memory utilization error logs, likely due to the absence of logs.\n     However, this does not eliminate the possibility of high memory usage.\n\n     Manual verification of memory utilization on the Guest OS is recommended as a potential cause.\n\n     [REMEDIATION]\n\n     1. Manually investigate memory usage by accessing the Guest OS:\n        - Identify processes with consistently high memory consumption using `top` (press \"M\") or `ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head -n 5`.\n        - Focus on processes with recent spikes or consistently high memory usage.\n        - If SSH access is unavailable, troubleshoot via the serial console:\n          <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-using-serial-console>\n\n     2. Review recent application or configuration changes:\n        - Investigate if recent deployments, updates, or configuration changes correlate with increased memory usage.\n\n     3. Resolve identified bottlenecks:\n        - For applications causing excessive memory usage, optimize their configuration or update them. Explore alternatives if optimization is insufficient.\n        - Evaluate scaling up resources if high memory usage results from legitimate application demands.\n\n     4. Increase instance memory if necessary:\n        - Stop the VM and change its machine type:\n          <https://cloud.google.com/compute/docs/instances/changing-machine-type-of-stopped-instance#gcloud>\n        - Consult the machine type documentation to select an appropriate configuration:\n          <https://cloud.google.com/compute/docs/machine-types>\n\n     **Note:** Non-Google provided application-specific issues may fall outside the support scope. Collaborate with relevant application teams for further investigation. Refer to the Google Cloud Platform support policy for details, including out-of-scope items:\n\n     - Support and maintenance policy: <https://cloud.google.com/compute/docs/images/support-maintenance-policy#support-scope>\n     - Out-of-scope items: <https://cloud.google.com/compute/docs/images/support-maintenance-policy#out-of-scope_for_support>\n\n[COMPOSITE STEP]: Cloud init related checks\n\n   - gcpdiag-gce-vm-performance/valid-linux-ssh                           [SKIP]\n     [REASON]\n     This VM is not Ubuntu or it does not uses cloud-init\n[AUTOMATED STEP]: Check for metadata network connectivity errors\n\n   - gcpdiag-gce-vm-performance/valid-linux-ssh                           [UNCERTAIN]\n     [REASON]\n     No success or failed logs to help deduce a conlusion on certainty of Network issues on the instance.\n\n     [REMEDIATION]\n     Attempt to log in to the instance via the serial console using a password and check the status of the network stack.\n\n     If login via the serial console is unsuccessful, consider restarting the instance.\n\n     If the issue persists after a reboot, follow the [rescue VM\n     guide](https://cloud.google.com/compute/docs/troubleshooting/rescue-vm) for further troubleshooting.\n\n     Additionally, refer to the [troubleshooting metadata server\n     guide](https://cloud.google.com/compute/docs/troubleshooting/troubleshoot-metadata-server) to address potential issues\n     with the Compute Engine metadata server.\n\n[AUTOMATED STEP]: Check for Time Sync related errors from GCE serial logs.\n\n   - gcpdiag-gce-vm-performance/valid-linux-ssh                           [UNCERTAIN]\n     [REASON]\n     No Time sync related errors in Serial console logs.\n\n     [REMEDIATION]\n     Connect to the GCE Instance and verify that the NTP server configuration adheres to Google Cloud Platform standards.\n     Refer to the [Google Cloud NTP configuration\n     guide](https://cloud.google.com/compute/docs/instances/configure-ntp).\n\n[AUTOMATED STEP]: Verify OpenSSH daemon (sshd) has started from most recent serial logs.\n\n   - gcpdiag-gce-vm-performance/valid-linux-ssh                           [OK]\n     [REASON]\n     The latest OpenSSH daemon (sshd) logs indicate that the daemon has started.\n\n[AUTOMATED STEP]: Examining SSHD authentication failures via serial logs.\n\n   - gcpdiag-gce-vm-performance/valid-linux-ssh                           [UNCERTAIN]\n     [REASON]\n     No evidence of successful or failed SSHD authentication attempts is present in the serial logs.\n\n     [REMEDIATION]\n     To mitigate \"bad ownership or modes for directory\" errors:\n\n     1. Follow either of the below steps to check the permissions:\n        - these steps to rescue the vm:\n     <https://cloud.google.com/compute/docs/troubleshooting/rescue-vm>\n        - these steps login through serial console:\n     <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-using-serial-console>\n     2. Refer to the standard permissions required for ssh connection:\n     <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-ssh-errors#permissions>\n\n[AUTOMATED STEP]: Checking for Guest Agent startup logs\n\n   - gcpdiag-gce-vm-performance/valid-linux-ssh                           [OK]\n     [REASON]\n     Detected that Google Guest Agent is running within the VM\n\n[AUTOMATED STEP]: Verify if SSHGuard is installed and blocking SSH connectivity\n\n   - gcpdiag-gce-vm-performance/valid-linux-ssh                           [UNCERTAIN]\n     [REASON]\n     The retrieved logs do not contain definitive entries, either positive or negative,\n     to make a conclusive assessment.\n     Review the GCE serial logs to determine if SSHGuard is a likely cause.\n\n     [REMEDIATION]\n     Issues related to SSHGuard fall outside the standard support scope for Google Cloud Platform.\n     Consult the most appropriate team within your organisation to assist with resolution.\n     For guest OS issues and SSHGuard configurations, refer to:\n\n     - Support Scope: <https://cloud.google.com/compute/docs/images/support-maintenance-policy#support-scope>\n     - Out of Scope Support: <https://cloud.google.com/compute/docs/images/support-maintenance-policy#out-of-scope_for_support>\n\n[END]: Finalize Serial console Log Analysis.\n\n\n"
  },
  {
    "path": "gcpdiag/runbook/gce/snapshots/ssh.txt",
    "content": "access_method=oslogin,end_time=2025-01-23 13:30:39.144959+00:00,instance_name=faulty-linux-\nssh,principal=user:cannotssh@example.com,project_id=gcpdiag-gce-faultyssh-\nrunbook,proxy=iap,start_time=2025-01-23 23:30:39.144959+00:00,zone=europe-west2-a\n\ngce/ssh: A comprehensive troubleshooting guide for common issues which affects SSH connectivity to VMs.\n\n  Investigates components required for ssh on either Windows and Linux VMs\n  hosted on Google Cloud Platform and pinpoint misconfigurations.\n\n  Areas Examined:\n\n  - VM Instance Status: Evaluates the VM's current state, performance - ensuring that it is running\n    and not impaired by high CPU usage, insufficient memory, or disk space issues that might disrupt\n    normal SSH operations.\n\n  - User Permissions: Checks for the necessary Google Cloud IAM permissions that are required to\n    leverage OS Login features and to use metadata-based SSH keys for authentication.\n\n  - VM Configuration: Analyzes the VM's metadata settings to confirm the inclusion of SSH keys,\n    flags and other essential configuration details that facilitate SSH access.\n\n  - GCE Network Connectivity Tests: Reviews applicable firewall rules to verify that there are no\n    network barriers preventing SSH access to the VM.\n\n  - Internal Guest OS Checks: Analysis available Guest OS metrics or logs to detect any\n    misconfigurations or service disruptions that could be obstructing SSH functionality.\n\n  - SSH in Browser Checks: Checks if the authenticated user has relevant permissions and\n    the organization policies permits SSH in Browser.\n    \n[START]: Starting SSH diagnostics\n[INFO]: Source IP to be used for SSH connectivity test: 35.235.240.0/20\n[INFO]: Port 22 and ip 35.235.240.0/20 as the source IP\n[INFO]: Access method to investigate: OS login https://cloud.google.com/compute/docs/oslogin\n[AUTOMATED STEP]: Verify GCE Instance is in a \"RUNNING\" state.\n\n   - gcpdiag-gce-faultyssh-runbook/faulty-linux-ssh                       [OK]\n     [REASON]\n     The GCE Instance projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/faulty-linux-ssh is in RUNNING state.\n\n[COMPOSITE STEP]: Evaluating VM memory, CPU, and disk performance.\n[AUTOMATED STEP]: Verify VM memory utilization is within optimal levels.\n\n   - gcpdiag-gce-faultyssh-runbook/faulty-linux-ssh                       [FAIL]\n     [REASON]\n     Memory utilization on this VM has reached levels that may compromise its VM application performance.\n\n     [REMEDIATION]\n     Elevated memory usage can result in slow, unresponsive, or terminated applications.\n     Enhance the VM's memory capacity by changing to a machine type with more memory.\n\n     Consult the following documentation for guidance:\n\n     - Changing machine type:\n       <https://cloud.google.com/compute/docs/instances/changing-machine-type-of-stopped-instance#gcloud>\n\n     Additionally, analyze Compute Engine observability metrics to pinpoint high-usage processes:\n     <https://cloud.google.com/compute/docs/instances/observe-monitor-vms#memory_utilization>\n\n     If SSH is unavailable, connect via the serial console to mitigate the issue:\n     <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-using-serial-console>\n\n[AUTOMATED STEP]: Verify memory related errors in VM serial logs.\n\n   - gcpdiag-gce-faultyssh-runbook/faulty-linux-ssh                       [UNCERTAIN]\n     [REASON]\n     Unable to investigate the high memory utilization error logs, likely due to the absence of logs.\n     However, this does not eliminate the possibility of high memory usage.\n\n     Manual verification of memory utilization on the Guest OS is recommended as a potential cause.\n\n     [REMEDIATION]\n\n     1. Manually investigate memory usage by accessing the Guest OS:\n        - Identify processes with consistently high memory consumption using `top` (press \"M\") or `ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head -n 5`.\n        - Focus on processes with recent spikes or consistently high memory usage.\n        - If SSH access is unavailable, troubleshoot via the serial console:\n          <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-using-serial-console>\n\n     2. Review recent application or configuration changes:\n        - Investigate if recent deployments, updates, or configuration changes correlate with increased memory usage.\n\n     3. Resolve identified bottlenecks:\n        - For applications causing excessive memory usage, optimize their configuration or update them. Explore alternatives if optimization is insufficient.\n        - Evaluate scaling up resources if high memory usage results from legitimate application demands.\n\n     4. Increase instance memory if necessary:\n        - Stop the VM and change its machine type:\n          <https://cloud.google.com/compute/docs/instances/changing-machine-type-of-stopped-instance#gcloud>\n        - Consult the machine type documentation to select an appropriate configuration:\n          <https://cloud.google.com/compute/docs/machine-types>\n\n     **Note:** Non-Google provided application-specific issues may fall outside the support scope. Collaborate with relevant application teams for further investigation. Refer to the Google Cloud Platform support policy for details, including out-of-scope items:\n\n     - Support and maintenance policy: <https://cloud.google.com/compute/docs/images/support-maintenance-policy#support-scope>\n     - Out-of-scope items: <https://cloud.google.com/compute/docs/images/support-maintenance-policy#out-of-scope_for_support>\n\n[AUTOMATED STEP]: Verify VM's boot disk space utilization is within optimal levels.\n\n   - gcpdiag-gce-faultyssh-runbook/faulty-linux-ssh                       [FAIL]\n     [REASON]\n     Disk utilization on this VM's boot disk is critically high,\n     potentially affecting application performance.\n\n     [REMEDIATION]\n     To mitigate high disk usage, consider expanding the VM's boot disk capacity.\n     This action can help avoid performance issues and ensure smoother SSH connections.\n\n     Consult the following guide to increase disk size:\n     <https://cloud.google.com/compute/docs/disks/resize-persistent-disk#increase_the_size_of_a_disk>\n\n[AUTOMATED STEP]: Verify VM CPU utilization is within optimal levels.\n\n   - gcpdiag-gce-faultyssh-runbook/faulty-linux-ssh                       [FAIL]\n     [REASON]\n     CPU utilization on this VM has surpassed recommended operational levels,\n     which may affect its performance and SSH connectivity.\n\n     [REMEDIATION]\n     Excessive CPU usage can lead to performance bottlenecks. Resizing the VM to a machine type with higher CPU capabilities may resolve the issue.\n\n     Consult the following documentation for guidance:\n\n     - Stopping a VM: <https://cloud.google.com/compute/docs/instances/stop-start-instance>\n     - Resizing a VM: <https://cloud.google.com/compute/docs/instances/changing-machine-type-of-stopped-instance#gcloud>\n\n     Additionally, analyze Compute Engine observability metrics to pinpoint high-usage processes:\n\n     - Accessing VM observability metrics:\n       <https://cloud.google.com/compute/docs/instances/observe-monitor-vms#access_vm_observability_metrics>\n     - Analyzing process utilization:\n       <https://cloud.google.com/compute/docs/instances/observe-monitor-vms#process_utilization>\n\n     If SSH is unavailable, connect via the serial console to stop offending processes:\n     <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-using-serial-console>\n\n[GATEWAY]: Identify Guest OS type.\n[INFO]: Linux Guest OS detected. Proceeding with diagnostics specific to Linux systems.\n[COMPOSITE STEP]: Analyzing serial logs for common linux guest os and application issues.\n[AUTOMATED STEP]: Examine Guest OS if there are any indications of kernel panic.\n\n   - gcpdiag-gce-faultyssh-runbook/faulty-linux-ssh                       [OK]\n     [REASON]\n     A review of the serial console logs for the GCE instance `projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/faulty-linux-ssh` from `2025-01-23 23:30:39.144959+00:00` to `2025-01-23 13:30:39.144959+00:00`\n     shows no evidence of kernel panic or GRUB issues. The `systemd` application is confirmed to be running.\n\n[AUTOMATED STEP]: Verify OpenSSH daemon (sshd) has started from most recent serial logs.\n\n   - gcpdiag-gce-faultyssh-runbook/faulty-linux-ssh                       [OK]\n     [REASON]\n     The latest OpenSSH daemon (sshd) logs indicate that the daemon has started.\n\n[AUTOMATED STEP]: Verify if SSHGuard is installed and blocking SSH connectivity\n\n   - gcpdiag-gce-faultyssh-runbook/faulty-linux-ssh                       [UNCERTAIN]\n     [REASON]\n     The retrieved logs do not contain definitive entries, either positive or negative,\n     to make a conclusive assessment.\n     Review the GCE serial logs to determine if SSHGuard is a likely cause.\n\n     [REMEDIATION]\n     Issues related to SSHGuard fall outside the standard support scope for Google Cloud Platform.\n     Consult the most appropriate team within your organisation to assist with resolution.\n     For guest OS issues and SSHGuard configurations, refer to:\n\n     - Support Scope: <https://cloud.google.com/compute/docs/images/support-maintenance-policy#support-scope>\n     - Out of Scope Support: <https://cloud.google.com/compute/docs/images/support-maintenance-policy#out-of-scope_for_support>\n\n[COMPOSITE STEP]: Verify overall user permissions for SSH access. Note: Only roles granted at the project level are checked. Permissions inherited from ancestor resources such as folder(s) or organization and groups are not checked.\n[AUTOMATED STEP]: Verify that the user:cannotssh@example.com has \"compute.instance.get\" permission.\n\n   - projects/gcpdiag-gce-faultyssh-runbook                               [FAIL]\n     [REASON]\n     user:cannotssh@example.com does not have the permissions needed to manage instances.\n     The following permissions are required: permissions.\n\n     [REMEDIATION]\n     Ensure user:cannotssh@example.com is granted a role encompassing the necessary permissions:\n\n     - Permissions needed: compute.instances.get\n\n     For guidance on assigning instance admin roles, consult:\n     <https://cloud.google.com/compute/docs/access/iam#connectinginstanceadmin>\n\n[GATEWAY]: Identify OS Login Setup.\n[AUTOMATED STEP]: Verify that OS Login is set to `True` for the VM.\n\n   - gcpdiag-gce-faultyssh-runbook/faulty-linux-ssh                       [FAIL]\n     [REASON]\n     OS Login is disabled\n\n     [REMEDIATION]\n     To utilize OS Login, enable it by setting the `enable-oslogin` flag in the VM's\n     metadata to `TRUE`.For detailed instructions on enabling OS Login,\n     refer to: <https://cloud.google.com/compute/docs/oslogin/set-up-oslogin#enable_os_login>\n\n[AUTOMATED STEP]: Verify whether user:cannotssh@example.com has at least one valid OS login role.\n\n   - projects/gcpdiag-gce-faultyssh-runbook                               [FAIL]\n     [REASON]\n     \"user:cannotssh@example.com\" is missing at least one of the required OS Login roles:\n     roles/compute.osAdminLogin, roles/compute.osLogin, roles/owner.\n\n     [REMEDIATION]\n     Assign the principal one of the roles required for OS Login privileges.\n     Consult the following resources for more information:\n\n     <https://cloud.google.com/compute/docs/oslogin/set-up-oslogin#configure_users>\n\n     <https://cloud.google.com/iam/docs/manage-access-service-accounts#grant-single-role>\n\n[AUTOMATED STEP]: Verify that the user:cannotssh@example.com has \"roles/iam.serviceAccountUser\" role.\n\n   - projects/gcpdiag-gce-faultyssh-runbook                               [FAIL]\n     [REASON]\n     \"user:cannotssh@example.com\" lacks the \"roles/iam.serviceAccountUser\" role or a custom role with the necessary permissions to impersonate the attached service account.\n\n     [REMEDIATION]\n     Assign the \"roles/iam.serviceAccountUser\" role to \"user:cannotssh@example.com\".\n     Consult the following guidelines:\n\n     <https://cloud.google.com/compute/docs/oslogin/set-up-oslogin#configure_users>\n\n     <https://cloud.google.com/iam/docs/manage-access-service-accounts#grant-single-role>\n\n[AUTOMATED STEP]: Verify that the user:cannotssh@example.com has \"roles/iap.tunnelResourceAccessor\" role.\n\n   - projects/gcpdiag-gce-faultyssh-runbook                               [FAIL]\n     [REASON]\n     user:cannotssh@example.com does not have the \"roles/iap.tunnelResourceAccessor\" role necessary to Tunnel through IAP for access.\n\n     [REMEDIATION]\n     Ensure that \"user:cannotssh@example.com\" is assigned the \"roles/iap.tunnelResourceAccessor\" role to enable the required access.\n\n     For detailed guidance, refer to the following resources:\n\n     - [Setting up OS Login](https://cloud.google.com/compute/docs/oslogin/set-up-oslogin#configure_users)\n     - [Managing access to service\n     accounts](https://cloud.google.com/iam/docs/manage-access-service-accounts#grant-single-role)\n\n[GATEWAY]: Evaluating VPC network firewall rules for SSH access.\n[AUTOMATED STEP]: Evaluating VPC network traffic rules.\n\n   - gcpdiag-gce-faultyssh-runbook/faulty-linux-ssh                       [FAIL]\n     [REASON]\n     Allow ingress traffic from the VIP range 35.235.240.0/20\n     <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-ssh-errors#diagnosis_methods_for_linux_and_windows_vms>'\n\n     [REMEDIATION]\n     If connecting to a non-public VM and do not wish to allow external access, choose one of the following connection\n     options for VMs\n     <https://cloud.google.com/compute/docs/connect/ssh-internal-ip>\n     Alternatively, create/update a firewall rule to allow access\n     <https://cloud.google.com/firewall/docs/using-firewalls#creating_firewall_rules>\n\n[AUTOMATED STEP]: Checking for Guest Agent startup logs\n\n   - gcpdiag-gce-faultyssh-runbook/faulty-linux-ssh                       [OK]\n     [REASON]\n     Detected that Google Guest Agent is running within the VM\n\n[AUTOMATED STEP]: Examining SSHD authentication failures via serial logs.\n\n   - gcpdiag-gce-faultyssh-runbook/faulty-linux-ssh                       [UNCERTAIN]\n     [REASON]\n     No evidence of successful or failed SSHD authentication attempts is present in the serial logs.\n\n     [REMEDIATION]\n     To mitigate \"bad ownership or modes for directory\" errors:\n\n     1. Follow either of the below steps to check the permissions:\n        - these steps to rescue the vm:\n     <https://cloud.google.com/compute/docs/troubleshooting/rescue-vm>\n        - these steps login through serial console:\n     <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-using-serial-console>\n     2. Refer to the standard permissions required for ssh connection:\n     <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-ssh-errors#permissions>\n\n[END]: Finalize SSH diagnostics.\n\n\naccess_method=oslogin,end_time=2025-01-23 13:30:39.144959+00:00,instance_name=valid-linux-\nssh,principal=serviceAccount:canssh@gcpdiag-gce-faultyssh-\nrunbook.iam.gserviceaccount.com,project_id=gcpdiag-gce-faultyssh-\nrunbook,proxy=iap,start_time=2025-01-23 23:30:39.144959+00:00,zone=europe-west2-a\n\ngce/ssh: A comprehensive troubleshooting guide for common issues which affects SSH connectivity to VMs.\n\n  Investigates components required for ssh on either Windows and Linux VMs\n  hosted on Google Cloud Platform and pinpoint misconfigurations.\n\n  Areas Examined:\n\n  - VM Instance Status: Evaluates the VM's current state, performance - ensuring that it is running\n    and not impaired by high CPU usage, insufficient memory, or disk space issues that might disrupt\n    normal SSH operations.\n\n  - User Permissions: Checks for the necessary Google Cloud IAM permissions that are required to\n    leverage OS Login features and to use metadata-based SSH keys for authentication.\n\n  - VM Configuration: Analyzes the VM's metadata settings to confirm the inclusion of SSH keys,\n    flags and other essential configuration details that facilitate SSH access.\n\n  - GCE Network Connectivity Tests: Reviews applicable firewall rules to verify that there are no\n    network barriers preventing SSH access to the VM.\n\n  - Internal Guest OS Checks: Analysis available Guest OS metrics or logs to detect any\n    misconfigurations or service disruptions that could be obstructing SSH functionality.\n\n  - SSH in Browser Checks: Checks if the authenticated user has relevant permissions and\n    the organization policies permits SSH in Browser.\n    \n[START]: Starting SSH diagnostics\n[INFO]: Source IP to be used for SSH connectivity test: 35.235.240.0/20\n[INFO]: Port 22 and ip 35.235.240.0/20 as the source IP\n[INFO]: Access method to investigate: OS login https://cloud.google.com/compute/docs/oslogin\n[AUTOMATED STEP]: Verify GCE Instance is in a \"RUNNING\" state.\n\n   - gcpdiag-gce-faultyssh-runbook/valid-linux-ssh                        [OK]\n     [REASON]\n     The GCE Instance projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/valid-linux-ssh is in RUNNING state.\n\n[COMPOSITE STEP]: Evaluating VM memory, CPU, and disk performance.\n[AUTOMATED STEP]: Verify VM memory utilization is within optimal levels.\n\n   - gcpdiag-gce-faultyssh-runbook/valid-linux-ssh                        [FAIL]\n     [REASON]\n     Memory utilization on this VM has reached levels that may compromise its VM application performance.\n\n     [REMEDIATION]\n     Elevated memory usage can result in slow, unresponsive, or terminated applications.\n     Enhance the VM's memory capacity by changing to a machine type with more memory.\n\n     Consult the following documentation for guidance:\n\n     - Changing machine type:\n       <https://cloud.google.com/compute/docs/instances/changing-machine-type-of-stopped-instance#gcloud>\n\n     Additionally, analyze Compute Engine observability metrics to pinpoint high-usage processes:\n     <https://cloud.google.com/compute/docs/instances/observe-monitor-vms#memory_utilization>\n\n     If SSH is unavailable, connect via the serial console to mitigate the issue:\n     <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-using-serial-console>\n\n[AUTOMATED STEP]: Verify memory related errors in VM serial logs.\n\n   - gcpdiag-gce-faultyssh-runbook/valid-linux-ssh                        [UNCERTAIN]\n     [REASON]\n     Unable to investigate the high memory utilization error logs, likely due to the absence of logs.\n     However, this does not eliminate the possibility of high memory usage.\n\n     Manual verification of memory utilization on the Guest OS is recommended as a potential cause.\n\n     [REMEDIATION]\n\n     1. Manually investigate memory usage by accessing the Guest OS:\n        - Identify processes with consistently high memory consumption using `top` (press \"M\") or `ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head -n 5`.\n        - Focus on processes with recent spikes or consistently high memory usage.\n        - If SSH access is unavailable, troubleshoot via the serial console:\n          <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-using-serial-console>\n\n     2. Review recent application or configuration changes:\n        - Investigate if recent deployments, updates, or configuration changes correlate with increased memory usage.\n\n     3. Resolve identified bottlenecks:\n        - For applications causing excessive memory usage, optimize their configuration or update them. Explore alternatives if optimization is insufficient.\n        - Evaluate scaling up resources if high memory usage results from legitimate application demands.\n\n     4. Increase instance memory if necessary:\n        - Stop the VM and change its machine type:\n          <https://cloud.google.com/compute/docs/instances/changing-machine-type-of-stopped-instance#gcloud>\n        - Consult the machine type documentation to select an appropriate configuration:\n          <https://cloud.google.com/compute/docs/machine-types>\n\n     **Note:** Non-Google provided application-specific issues may fall outside the support scope. Collaborate with relevant application teams for further investigation. Refer to the Google Cloud Platform support policy for details, including out-of-scope items:\n\n     - Support and maintenance policy: <https://cloud.google.com/compute/docs/images/support-maintenance-policy#support-scope>\n     - Out-of-scope items: <https://cloud.google.com/compute/docs/images/support-maintenance-policy#out-of-scope_for_support>\n\n[AUTOMATED STEP]: Verify VM's boot disk space utilization is within optimal levels.\n\n   - gcpdiag-gce-faultyssh-runbook/valid-linux-ssh                        [FAIL]\n     [REASON]\n     Disk utilization on this VM's boot disk is critically high,\n     potentially affecting application performance.\n\n     [REMEDIATION]\n     To mitigate high disk usage, consider expanding the VM's boot disk capacity.\n     This action can help avoid performance issues and ensure smoother SSH connections.\n\n     Consult the following guide to increase disk size:\n     <https://cloud.google.com/compute/docs/disks/resize-persistent-disk#increase_the_size_of_a_disk>\n\n[AUTOMATED STEP]: Verify VM CPU utilization is within optimal levels.\n\n   - gcpdiag-gce-faultyssh-runbook/valid-linux-ssh                        [FAIL]\n     [REASON]\n     CPU utilization on this VM has surpassed recommended operational levels,\n     which may affect its performance and SSH connectivity.\n\n     [REMEDIATION]\n     Excessive CPU usage can lead to performance bottlenecks. Resizing the VM to a machine type with higher CPU capabilities may resolve the issue.\n\n     Consult the following documentation for guidance:\n\n     - Stopping a VM: <https://cloud.google.com/compute/docs/instances/stop-start-instance>\n     - Resizing a VM: <https://cloud.google.com/compute/docs/instances/changing-machine-type-of-stopped-instance#gcloud>\n\n     Additionally, analyze Compute Engine observability metrics to pinpoint high-usage processes:\n\n     - Accessing VM observability metrics:\n       <https://cloud.google.com/compute/docs/instances/observe-monitor-vms#access_vm_observability_metrics>\n     - Analyzing process utilization:\n       <https://cloud.google.com/compute/docs/instances/observe-monitor-vms#process_utilization>\n\n     If SSH is unavailable, connect via the serial console to stop offending processes:\n     <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-using-serial-console>\n\n[GATEWAY]: Identify Guest OS type.\n[INFO]: Linux Guest OS detected. Proceeding with diagnostics specific to Linux systems.\n[COMPOSITE STEP]: Analyzing serial logs for common linux guest os and application issues.\n[AUTOMATED STEP]: Examine Guest OS if there are any indications of kernel panic.\n\n   - gcpdiag-gce-faultyssh-runbook/valid-linux-ssh                        [OK]\n     [REASON]\n     A review of the serial console logs for the GCE instance `projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/valid-linux-ssh` from `2025-01-23 23:30:39.144959+00:00` to `2025-01-23 13:30:39.144959+00:00`\n     shows no evidence of kernel panic or GRUB issues. The `systemd` application is confirmed to be running.\n\n[AUTOMATED STEP]: Verify OpenSSH daemon (sshd) has started from most recent serial logs.\n\n   - gcpdiag-gce-faultyssh-runbook/valid-linux-ssh                        [OK]\n     [REASON]\n     The latest OpenSSH daemon (sshd) logs indicate that the daemon has started.\n\n[AUTOMATED STEP]: Verify if SSHGuard is installed and blocking SSH connectivity\n\n   - gcpdiag-gce-faultyssh-runbook/valid-linux-ssh                        [UNCERTAIN]\n     [REASON]\n     The retrieved logs do not contain definitive entries, either positive or negative,\n     to make a conclusive assessment.\n     Review the GCE serial logs to determine if SSHGuard is a likely cause.\n\n     [REMEDIATION]\n     Issues related to SSHGuard fall outside the standard support scope for Google Cloud Platform.\n     Consult the most appropriate team within your organisation to assist with resolution.\n     For guest OS issues and SSHGuard configurations, refer to:\n\n     - Support Scope: <https://cloud.google.com/compute/docs/images/support-maintenance-policy#support-scope>\n     - Out of Scope Support: <https://cloud.google.com/compute/docs/images/support-maintenance-policy#out-of-scope_for_support>\n\n[COMPOSITE STEP]: Verify overall user permissions for SSH access. Note: Only roles granted at the project level are checked. Permissions inherited from ancestor resources such as folder(s) or organization and groups are not checked.\n[AUTOMATED STEP]: Verify that the serviceAccount:canssh@gcpdiag-gce-faultyssh-runbook.iam.gserviceaccount.com has \"compute.instance.get\" permission.\n\n   - projects/gcpdiag-gce-faultyssh-runbook                               [OK]\n     [REASON]\n     serviceAccount:canssh@gcpdiag-gce-faultyssh-runbook.iam.gserviceaccount.com possesses the appropriate permissions to fetch instance details.\n\n[GATEWAY]: Identify OS Login Setup.\n[AUTOMATED STEP]: Verify that OS Login is set to `True` for the VM.\n\n   - gcpdiag-gce-faultyssh-runbook/valid-linux-ssh                        [OK]\n     [REASON]\n     OS Login is enabled on this VM.\n\n[AUTOMATED STEP]: Verify whether serviceAccount:canssh@gcpdiag-gce-faultyssh-runbook.iam.gserviceaccount.com has at least one valid OS login role.\n\n   - projects/gcpdiag-gce-faultyssh-runbook                               [OK]\n     [REASON]\n     \"serviceAccount:canssh@gcpdiag-gce-faultyssh-runbook.iam.gserviceaccount.com\" possesses at least one of the required OS Login roles:\n     roles/compute.osAdminLogin, roles/compute.osLogin, roles/owner.\n\n[AUTOMATED STEP]: Verify that the serviceAccount:canssh@gcpdiag-gce-faultyssh-runbook.iam.gserviceaccount.com has \"roles/iam.serviceAccountUser\" role.\n\n   - projects/gcpdiag-gce-faultyssh-runbook                               [OK]\n     [REASON]\n     \"serviceAccount:canssh@gcpdiag-gce-faultyssh-runbook.iam.gserviceaccount.com\" has the \"roles/iam.serviceAccountUser\"\n     required to impersonate the attached service account.\n\n[AUTOMATED STEP]: Verify that the serviceAccount:canssh@gcpdiag-gce-faultyssh-runbook.iam.gserviceaccount.com has \"roles/iap.tunnelResourceAccessor\" role.\n\n   - projects/gcpdiag-gce-faultyssh-runbook                               [OK]\n     [REASON]\n     \"serviceAccount:canssh@gcpdiag-gce-faultyssh-runbook.iam.gserviceaccount.com\" has the requisite \"roles/iap.tunnelResourceAccessor\" role to tunnel through IAP.\n\n[GATEWAY]: Evaluating VPC network firewall rules for SSH access.\n[AUTOMATED STEP]: Evaluating VPC network traffic rules.\n\n   - gcpdiag-gce-faultyssh-runbook/valid-linux-ssh                        [OK]\n     [REASON]\n     Ingress Traffic from source IP/CIDR 35.235.240.0/20, tcp:22 to the GCE\n     instance valid-linux-ssh is allowed by: vpc firewall rule: default-allow-ssh\n\n[AUTOMATED STEP]: Checking for Guest Agent startup logs\n\n   - gcpdiag-gce-faultyssh-runbook/valid-linux-ssh                        [OK]\n     [REASON]\n     Detected that Google Guest Agent is running within the VM\n\n[AUTOMATED STEP]: Examining SSHD authentication failures via serial logs.\n\n   - gcpdiag-gce-faultyssh-runbook/valid-linux-ssh                        [UNCERTAIN]\n     [REASON]\n     No evidence of successful or failed SSHD authentication attempts is present in the serial logs.\n\n     [REMEDIATION]\n     To mitigate \"bad ownership or modes for directory\" errors:\n\n     1. Follow either of the below steps to check the permissions:\n        - these steps to rescue the vm:\n     <https://cloud.google.com/compute/docs/troubleshooting/rescue-vm>\n        - these steps login through serial console:\n     <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-using-serial-console>\n     2. Refer to the standard permissions required for ssh connection:\n     <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-ssh-errors#permissions>\n\n[END]: Finalize SSH diagnostics.\n\n\naccess_method=oslogin,end_time=2025-01-23 13:30:39.144959+00:00,instance_name=faulty-windows-\nssh,posix_user=no_user,principal=user:cannot@example.com,project_id=gcpdiag-gce-faultyssh-\nrunbook,proxy=iap,src_ip=0.0.0.0,start_time=2025-01-23 23:30:39.144959+00:00,zone=europe-west2-a\n\ngce/ssh: A comprehensive troubleshooting guide for common issues which affects SSH connectivity to VMs.\n\n  Investigates components required for ssh on either Windows and Linux VMs\n  hosted on Google Cloud Platform and pinpoint misconfigurations.\n\n  Areas Examined:\n\n  - VM Instance Status: Evaluates the VM's current state, performance - ensuring that it is running\n    and not impaired by high CPU usage, insufficient memory, or disk space issues that might disrupt\n    normal SSH operations.\n\n  - User Permissions: Checks for the necessary Google Cloud IAM permissions that are required to\n    leverage OS Login features and to use metadata-based SSH keys for authentication.\n\n  - VM Configuration: Analyzes the VM's metadata settings to confirm the inclusion of SSH keys,\n    flags and other essential configuration details that facilitate SSH access.\n\n  - GCE Network Connectivity Tests: Reviews applicable firewall rules to verify that there are no\n    network barriers preventing SSH access to the VM.\n\n  - Internal Guest OS Checks: Analysis available Guest OS metrics or logs to detect any\n    misconfigurations or service disruptions that could be obstructing SSH functionality.\n\n  - SSH in Browser Checks: Checks if the authenticated user has relevant permissions and\n    the organization policies permits SSH in Browser.\n    \n[START]: Starting SSH diagnostics\n[INFO]: Source IP to be used for SSH connectivity test: 35.235.240.0/20\n[INFO]: Port 22 and ip 35.235.240.0/20 as the source IP\n[INFO]: Access method to investigate: OS login https://cloud.google.com/compute/docs/oslogin\n[INFO]: Guest OS Posix User to be investigated: no_user\n[AUTOMATED STEP]: Verify GCE Instance is in a \"RUNNING\" state.\n\n   - gcpdiag-gce-faultyssh-runbook/faulty-windows-ssh                     [FAIL]\n     [REASON]\n     The GCE Instance projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/faulty-windows-ssh is in TERMINATED state.\n\n     [REMEDIATION]\n     Restart VM projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/faulty-windows-ssh and ensure VM lifecycle transitions from TERMINATED to RUNNING.\n\n     Consult the following documentation:\n\n     - Restarting a compute instance:\n       <https://cloud.google.com/compute/docs/instances/stop-start-instance#restart-vm>\n     - Troubleshooting VM startup issues:\n       <https://cloud.google.com/compute/docs/troubleshooting/vm-startup#identify_the_reason_why_the_boot_disk_isnt_booting>\n\n[COMPOSITE STEP]: Evaluating VM memory, CPU, and disk performance.\n[AUTOMATED STEP]: Verify VM memory utilization is within optimal levels.\n\n   - gcpdiag-gce-faultyssh-runbook/faulty-windows-ssh                     [FAIL]\n     [REASON]\n     Memory utilization on this VM has reached levels that may compromise its VM application performance.\n\n     [REMEDIATION]\n     Elevated memory usage can result in slow, unresponsive, or terminated applications.\n     Enhance the VM's memory capacity by changing to a machine type with more memory.\n\n     Consult the following documentation for guidance:\n\n     - Changing machine type:\n       <https://cloud.google.com/compute/docs/instances/changing-machine-type-of-stopped-instance#gcloud>\n\n     Additionally, analyze Compute Engine observability metrics to pinpoint high-usage processes:\n     <https://cloud.google.com/compute/docs/instances/observe-monitor-vms#memory_utilization>\n\n     If SSH is unavailable, connect via the serial console to mitigate the issue:\n     <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-using-serial-console>\n\n[AUTOMATED STEP]: Verify memory related errors in VM serial logs.\n\n   - gcpdiag-gce-faultyssh-runbook/faulty-windows-ssh                     [UNCERTAIN]\n     [REASON]\n     Unable to investigate the high memory utilization error logs, likely due to the absence of logs.\n     However, this does not eliminate the possibility of high memory usage.\n\n     Manual verification of memory utilization on the Guest OS is recommended as a potential cause.\n\n     [REMEDIATION]\n\n     1. Manually investigate memory usage by accessing the Guest OS:\n        - Identify processes with consistently high memory consumption using `top` (press \"M\") or `ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head -n 5`.\n        - Focus on processes with recent spikes or consistently high memory usage.\n        - If SSH access is unavailable, troubleshoot via the serial console:\n          <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-using-serial-console>\n\n     2. Review recent application or configuration changes:\n        - Investigate if recent deployments, updates, or configuration changes correlate with increased memory usage.\n\n     3. Resolve identified bottlenecks:\n        - For applications causing excessive memory usage, optimize their configuration or update them. Explore alternatives if optimization is insufficient.\n        - Evaluate scaling up resources if high memory usage results from legitimate application demands.\n\n     4. Increase instance memory if necessary:\n        - Stop the VM and change its machine type:\n          <https://cloud.google.com/compute/docs/instances/changing-machine-type-of-stopped-instance#gcloud>\n        - Consult the machine type documentation to select an appropriate configuration:\n          <https://cloud.google.com/compute/docs/machine-types>\n\n     **Note:** Non-Google provided application-specific issues may fall outside the support scope. Collaborate with relevant application teams for further investigation. Refer to the Google Cloud Platform support policy for details, including out-of-scope items:\n\n     - Support and maintenance policy: <https://cloud.google.com/compute/docs/images/support-maintenance-policy#support-scope>\n     - Out-of-scope items: <https://cloud.google.com/compute/docs/images/support-maintenance-policy#out-of-scope_for_support>\n\n[AUTOMATED STEP]: Verify VM's boot disk space utilization is within optimal levels.\n\n   - gcpdiag-gce-faultyssh-runbook/faulty-windows-ssh                     [FAIL]\n     [REASON]\n     Disk utilization on this VM's boot disk is critically high,\n     potentially affecting application performance.\n\n     [REMEDIATION]\n     To mitigate high disk usage, consider expanding the VM's boot disk capacity.\n     This action can help avoid performance issues and ensure smoother SSH connections.\n\n     Consult the following guide to increase disk size:\n     <https://cloud.google.com/compute/docs/disks/resize-persistent-disk#increase_the_size_of_a_disk>\n\n[AUTOMATED STEP]: Verify VM CPU utilization is within optimal levels.\n\n   - gcpdiag-gce-faultyssh-runbook/faulty-windows-ssh                     [FAIL]\n     [REASON]\n     CPU utilization on this VM has surpassed recommended operational levels,\n     which may affect its performance and SSH connectivity.\n\n     [REMEDIATION]\n     Excessive CPU usage can lead to performance bottlenecks. Resizing the VM to a machine type with higher CPU capabilities may resolve the issue.\n\n     Consult the following documentation for guidance:\n\n     - Stopping a VM: <https://cloud.google.com/compute/docs/instances/stop-start-instance>\n     - Resizing a VM: <https://cloud.google.com/compute/docs/instances/changing-machine-type-of-stopped-instance#gcloud>\n\n     Additionally, analyze Compute Engine observability metrics to pinpoint high-usage processes:\n\n     - Accessing VM observability metrics:\n       <https://cloud.google.com/compute/docs/instances/observe-monitor-vms#access_vm_observability_metrics>\n     - Analyzing process utilization:\n       <https://cloud.google.com/compute/docs/instances/observe-monitor-vms#process_utilization>\n\n     If SSH is unavailable, connect via the serial console to stop offending processes:\n     <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-using-serial-console>\n\n[GATEWAY]: Identify Guest OS type.\n[INFO]: Windows Guest OS detected. Proceeding with diagnostics specific to Windows systems.\n[COMPOSITE STEP]: Analyzing Windows Guest OS boot-up and SSH agent status.\n[AUTOMATED STEP]: Verify VM metadata value.\n\n   - gcpdiag-gce-faultyssh-runbook/faulty-windows-ssh                     [FAIL]\n     [REASON]\n     SSH metadata `enable-windows-ssh` is not configured for this Windows VM,\n     preventing SSH access.\n\n     [REMEDIATION]\n     To enable SSH access for your Windows VM, you must configure SSH metadata settings appropriately.\n     Please consult our guide on enabling SSH for Windows instances for step-by-step instructions:\n     <https://cloud.google.com/compute/docs/connect/windows-ssh#enable>\n\n[AUTOMATED STEP]: Verify Windows boot up process have successfully completed.\n\n   - gcpdiag-gce-faultyssh-runbook/faulty-windows-ssh                     [UNCERTAIN]\n     [REASON]\n     Lack of serial log data prevented a thorough assessment of the VM's operational state. Result is\n     inconclusive\n\n     [REMEDIATION]\n     Fix boot issues preventing a successful startup. If the Google Compute Engine (GCE) guest agents are installed, the\n     startup process should include the expected guest agent logs.\n\n     Resources\n\n     1. [Troubleshooting Windows instances](https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-windows)\n     2. [Connecting to the Windows Special Administrative Console\n     (SAC)](https://cloud.google.com/compute/docs/instances/connecting-to-sac)\n     3. [Installing the Windows GCE guest\n     environment](https://cloud.google.com/compute/docs/images/install-guest-environment#windows:~:text=Engine%20Shutdown%20Scripts-,Windows,-GCEGuestAgent%3A%20GCE%20Agent)\n     4. [Connecting to Windows instances](https://cloud.google.com/compute/docs/instances/connecting-to-windows)\n     5. [Connecting to Windows using SSH](https://cloud.google.com/compute/docs/connect/windows-ssh)\n     6. [Using PowerShell to connect to Windows\n     instances](https://cloud.google.com/compute/docs/instances/windows/connecting-powershell)\n\n[MANUAL STEP]: Verify if the necessary Google guest agents, especially `google-compute-engine-ssh`, are operational on the VM.\n[COMPOSITE STEP]: Verify overall user permissions for SSH access. Note: Only roles granted at the project level are checked. Permissions inherited from ancestor resources such as folder(s) or organization and groups are not checked.\n[AUTOMATED STEP]: Verify that the user:cannot@example.com has \"compute.instance.get\" permission.\n\n   - projects/gcpdiag-gce-faultyssh-runbook                               [FAIL]\n     [REASON]\n     user:cannot@example.com does not have the permissions needed to manage instances.\n     The following permissions are required: permissions.\n\n     [REMEDIATION]\n     Ensure user:cannot@example.com is granted a role encompassing the necessary permissions:\n\n     - Permissions needed: compute.instances.get\n\n     For guidance on assigning instance admin roles, consult:\n     <https://cloud.google.com/compute/docs/access/iam#connectinginstanceadmin>\n\n[GATEWAY]: Identify OS Login Setup.\n[AUTOMATED STEP]: Verify that OS Login is set to `True` for the VM.\n\n   - gcpdiag-gce-faultyssh-runbook/faulty-windows-ssh                     [OK]\n     [REASON]\n     OS Login is enabled on this VM.\n\n[AUTOMATED STEP]: Verify whether user:cannot@example.com has at least one valid OS login role.\n\n   - projects/gcpdiag-gce-faultyssh-runbook                               [FAIL]\n     [REASON]\n     \"user:cannot@example.com\" is missing at least one of the required OS Login roles:\n     roles/compute.osAdminLogin, roles/compute.osLogin, roles/owner.\n\n     [REMEDIATION]\n     Assign the principal one of the roles required for OS Login privileges.\n     Consult the following resources for more information:\n\n     <https://cloud.google.com/compute/docs/oslogin/set-up-oslogin#configure_users>\n\n     <https://cloud.google.com/iam/docs/manage-access-service-accounts#grant-single-role>\n\n[AUTOMATED STEP]: Verify that the user:cannot@example.com has \"roles/iam.serviceAccountUser\" role.\n\n   - projects/gcpdiag-gce-faultyssh-runbook                               [FAIL]\n     [REASON]\n     \"user:cannot@example.com\" lacks the \"roles/iam.serviceAccountUser\" role or a custom role with the necessary permissions to impersonate the attached service account.\n\n     [REMEDIATION]\n     Assign the \"roles/iam.serviceAccountUser\" role to \"user:cannot@example.com\".\n     Consult the following guidelines:\n\n     <https://cloud.google.com/compute/docs/oslogin/set-up-oslogin#configure_users>\n\n     <https://cloud.google.com/iam/docs/manage-access-service-accounts#grant-single-role>\n\n[AUTOMATED STEP]: Verify that the user:cannot@example.com has \"roles/iap.tunnelResourceAccessor\" role.\n\n   - projects/gcpdiag-gce-faultyssh-runbook                               [FAIL]\n     [REASON]\n     user:cannot@example.com does not have the \"roles/iap.tunnelResourceAccessor\" role necessary to Tunnel through IAP for access.\n\n     [REMEDIATION]\n     Ensure that \"user:cannot@example.com\" is assigned the \"roles/iap.tunnelResourceAccessor\" role to enable the required access.\n\n     For detailed guidance, refer to the following resources:\n\n     - [Setting up OS Login](https://cloud.google.com/compute/docs/oslogin/set-up-oslogin#configure_users)\n     - [Managing access to service\n     accounts](https://cloud.google.com/iam/docs/manage-access-service-accounts#grant-single-role)\n\n[GATEWAY]: Evaluating VPC network firewall rules for SSH access.\n[AUTOMATED STEP]: Evaluating VPC network traffic rules.\n\n   - gcpdiag-gce-faultyssh-runbook/faulty-windows-ssh                     [FAIL]\n     [REASON]\n     Allow ingress traffic from the VIP range 35.235.240.0/20\n     <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-ssh-errors#diagnosis_methods_for_linux_and_windows_vms>'\n\n     [REMEDIATION]\n     If connecting to a non-public VM and do not wish to allow external access, choose one of the following connection\n     options for VMs\n     <https://cloud.google.com/compute/docs/connect/ssh-internal-ip>\n     Alternatively, create/update a firewall rule to allow access\n     <https://cloud.google.com/firewall/docs/using-firewalls#creating_firewall_rules>\n\n[AUTOMATED STEP]: Checking for Guest Agent startup logs\n\n   - gcpdiag-gce-faultyssh-runbook/faulty-windows-ssh                     [UNCERTAIN]\n     [REASON]\n     No success or failed logs found for Google Guest Agent startup.\n\n     [REMEDIATION]\n     The google-guest-agent contains the guest agent and metadata script executables which\n     runs on the guest OS to support the Compute Engine features. These features include account\n     management, OS Login integration, clock skew, network interface management, and instance setup.\n\n     In case Guest Agent is not started during instance startup, users might face login issues.\n\n     The `google-guest-agent.service` service should be in running state.\n     If the service is disabled, enable and start the service, by running the following commands:\n\n     ```\n     systemctl enable google-guest-agent.service\n     systemctl start google-guest-agent.service\n     ```\n\n     Verify that the Linux Google Agent scripts are installed and running. If the Linux Google\n     Agent is not installed, re-install it.\n\n[AUTOMATED STEP]: Examining SSHD authentication failures via serial logs.\n\n   - gcpdiag-gce-faultyssh-runbook/faulty-windows-ssh                     [UNCERTAIN]\n     [REASON]\n     No evidence of successful or failed SSHD authentication attempts is present in the serial logs.\n\n     [REMEDIATION]\n     To mitigate \"bad ownership or modes for directory\" errors:\n\n     1. Follow either of the below steps to check the permissions:\n        - these steps to rescue the vm:\n     <https://cloud.google.com/compute/docs/troubleshooting/rescue-vm>\n        - these steps login through serial console:\n     <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-using-serial-console>\n     2. Refer to the standard permissions required for ssh connection:\n     <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-ssh-errors#permissions>\n\n[END]: Finalize SSH diagnostics.\n\n\n"
  },
  {
    "path": "gcpdiag/runbook/gce/snapshots/vm_creation.txt",
    "content": "instance_name=existing-instance,project_id=gcpdiag-gce6-aaaa,zone=us-central1-c\n\ngce/vm-creation: Runbook for diagnosing VM creation issues.\n\n    This runbook helps identify and resolve issues related to VM creation in Google Cloud.\n\n    - Checks for quota-related issues.\n    - Checks for permission-related issues.\n    - Checks for conflicts such as resource already existing.\n  \n[START]: Executing default start step for runbooks.\n[GATEWAY]: Query logs to determine the cause of VM creation failure.\n\n   - gcpdiag-gce6-aaaa                                                    [FAIL]\n     [REASON]\n     Required 'compute.instances.create' permission for 'projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/existing-instance'\n\n     [REMEDIATION]\n     Grant the user or service account attempting the VM creation the required permissions to create a VM instance.\n     Consult the following guide for details on required permissions:\n     <https://cloud.google.com/compute/docs/instances/create-start-instance#expandable-1>\n\n[END]: Finalize runbook investigations.\n\n\ninstance_name=non-existing-gpu-instance,project_id=gcpdiag-gce6-aaaa,zone=us-central1-c\n\ngce/vm-creation: Runbook for diagnosing VM creation issues.\n\n    This runbook helps identify and resolve issues related to VM creation in Google Cloud.\n\n    - Checks for quota-related issues.\n    - Checks for permission-related issues.\n    - Checks for conflicts such as resource already existing.\n  \n[START]: Executing default start step for runbooks.\n[GATEWAY]: Query logs to determine the cause of VM creation failure.\n\n   - gcpdiag-gce6-aaaa                                                    [FAIL]\n     [REASON]\n     Required 'compute.instances.create' permission for 'projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/existing-instance'\n\n     [REMEDIATION]\n     Grant the user or service account attempting the VM creation the required permissions to create a VM instance.\n     Consult the following guide for details on required permissions:\n     <https://cloud.google.com/compute/docs/instances/create-start-instance#expandable-1>\n\n[END]: Finalize runbook investigations.\n\n\n"
  },
  {
    "path": "gcpdiag/runbook/gce/snapshots/vm_performance.txt",
    "content": "instance_name=faulty-linux-ssh,project_id=gcpdiag-gce-vm-performance,zone=europe-west2-a\n\ngce/vm-performance:  Google Compute Engine VM performance checks\n\n  This runbook is designed to assist you in investigating and understanding the underlying reasons\n  behind the performance issues of your Google Compute Engine VMs within Google Cloud Platform.\n\n  Key Investigation Areas:\n\n    - High CPU utilisation\n    - CPU Over-commitment for E2 or Sole-Tenant VMs\n    - High Memory utilisation\n    - Disk space high utilisation\n    - High Disk IOPS utilisation\n    - High Disk Throughput utilisation\n    - Disk Health check\n    - Disk IO latency check\n    - Disk Slowness check\n    - Check for Live Migrations\n    - Usual Error checks in Serial console logs\n  \n[START]: Verify GCE Instance is in a \"RUNNING\" state.\n[AUTOMATED STEP]: Verify GCE Instance is in a \"RUNNING\" state.\n\n   - gcpdiag-gce-vm-performance/faulty-linux-ssh                          [OK]\n     [REASON]\n     The GCE Instance projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/faulty-linux-ssh is in RUNNING state.\n\n[AUTOMATED STEP]: Verify VM CPU utilization is within optimal levels.\n\n   - gcpdiag-gce-vm-performance/faulty-linux-ssh                          [FAIL]\n     [REASON]\n     CPU utilization on this VM has surpassed recommended operational levels,\n     which may affect its performance and SSH connectivity.\n\n     [REMEDIATION]\n     Excessive CPU usage can lead to performance bottlenecks. Resizing the VM to a machine type with higher CPU capabilities may resolve the issue.\n\n     Consult the following documentation for guidance:\n\n     - Stopping a VM: <https://cloud.google.com/compute/docs/instances/stop-start-instance>\n     - Resizing a VM: <https://cloud.google.com/compute/docs/instances/changing-machine-type-of-stopped-instance#gcloud>\n\n     Additionally, analyze Compute Engine observability metrics to pinpoint high-usage processes:\n\n     - Accessing VM observability metrics:\n       <https://cloud.google.com/compute/docs/instances/observe-monitor-vms#access_vm_observability_metrics>\n     - Analyzing process utilization:\n       <https://cloud.google.com/compute/docs/instances/observe-monitor-vms#process_utilization>\n\n     If SSH is unavailable, connect via the serial console to stop offending processes:\n     <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-using-serial-console>\n\n[AUTOMATED STEP]: Checking if CPU is overcommited\n[INFO]: vm.min_cpu_platform: None\n\n   - gcpdiag-gce-vm-performance/faulty-linux-ssh                          [FAIL]\n     [REASON]\n     CPU for the VM faulty-linux-ssh is over committed beyond acceptable limits: 0 ms/s\n[AUTOMATED STEP]: Verify VM memory utilization is within optimal levels.\n\n   - gcpdiag-gce-vm-performance/faulty-linux-ssh                          [FAIL]\n     [REASON]\n     Memory utilization on this VM has reached levels that may compromise its VM application performance.\n\n     [REMEDIATION]\n     Elevated memory usage can result in slow, unresponsive, or terminated applications.\n     Enhance the VM's memory capacity by changing to a machine type with more memory.\n\n     Consult the following documentation for guidance:\n\n     - Changing machine type:\n       <https://cloud.google.com/compute/docs/instances/changing-machine-type-of-stopped-instance#gcloud>\n\n     Additionally, analyze Compute Engine observability metrics to pinpoint high-usage processes:\n     <https://cloud.google.com/compute/docs/instances/observe-monitor-vms#memory_utilization>\n\n     If SSH is unavailable, connect via the serial console to mitigate the issue:\n     <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-using-serial-console>\n\n[AUTOMATED STEP]: Verify memory related errors in VM serial logs.\n\n   - gcpdiag-gce-vm-performance/faulty-linux-ssh                          [UNCERTAIN]\n     [REASON]\n     Unable to investigate the high memory utilization error logs, likely due to the absence of logs.\n     However, this does not eliminate the possibility of high memory usage.\n\n     Manual verification of memory utilization on the Guest OS is recommended as a potential cause.\n\n     [REMEDIATION]\n\n     1. Manually investigate memory usage by accessing the Guest OS:\n        - Identify processes with consistently high memory consumption using `top` (press \"M\") or `ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head -n 5`.\n        - Focus on processes with recent spikes or consistently high memory usage.\n        - If SSH access is unavailable, troubleshoot via the serial console:\n          <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-using-serial-console>\n\n     2. Review recent application or configuration changes:\n        - Investigate if recent deployments, updates, or configuration changes correlate with increased memory usage.\n\n     3. Resolve identified bottlenecks:\n        - For applications causing excessive memory usage, optimize their configuration or update them. Explore alternatives if optimization is insufficient.\n        - Evaluate scaling up resources if high memory usage results from legitimate application demands.\n\n     4. Increase instance memory if necessary:\n        - Stop the VM and change its machine type:\n          <https://cloud.google.com/compute/docs/instances/changing-machine-type-of-stopped-instance#gcloud>\n        - Consult the machine type documentation to select an appropriate configuration:\n          <https://cloud.google.com/compute/docs/machine-types>\n\n     **Note:** Non-Google provided application-specific issues may fall outside the support scope. Collaborate with relevant application teams for further investigation. Refer to the Google Cloud Platform support policy for details, including out-of-scope items:\n\n     - Support and maintenance policy: <https://cloud.google.com/compute/docs/images/support-maintenance-policy#support-scope>\n     - Out-of-scope items: <https://cloud.google.com/compute/docs/images/support-maintenance-policy#out-of-scope_for_support>\n\n[AUTOMATED STEP]: Verify instance disks are healthy.\n\n   - gcpdiag-gce-vm-performance/faulty-linux-ssh                          [FAIL]\n     [REASON]\n     You might experience slower/poor performance with your disk 'persistent-disk-0' due to an\n     ongoing issue with our Compute Engine or Persistent Disk infrastructure. We're working\n     to resolve this as quickly as possible.\n\n     [REMEDIATION]\n     To better understand the situation with your Compute Engine or Persistent Disks,\n     could you please take a look at the Google Cloud Status page:\n\n     <https://status.cloud.google.com>\n\n     This page provides real-time updates on the health of Google Cloud services.\n\n     Additionally, it may be helpful to check the Service Health dashboard in your\n     Google Cloud Console for any reported incidents:\n\n     <https://console.cloud.google.com/servicehealth/incidents>\n\n     If you don't find any information about an ongoing issue related to your concern,\n     please don't hesitate to reach out to Google Cloud Support by creating a support case.\n     They'll be happy to investigate further and assist you.\n\n[AUTOMATED STEP]: Verify VM's boot disk space utilization is within optimal levels.\n\n   - gcpdiag-gce-vm-performance/faulty-linux-ssh                          [FAIL]\n     [REASON]\n     Disk utilization on this VM's boot disk is critically high,\n     potentially affecting application performance.\n\n     [REMEDIATION]\n     To mitigate high disk usage, consider expanding the VM's boot disk capacity.\n     This action can help avoid performance issues and ensure smoother SSH connections.\n\n     Consult the following guide to increase disk size:\n     <https://cloud.google.com/compute/docs/disks/resize-persistent-disk#increase_the_size_of_a_disk>\n\n[AUTOMATED STEP]: Verify any slow Disk operations related errors in Serial console logs\n\n   - gcpdiag-gce-vm-performance/faulty-linux-ssh                          [UNCERTAIN]\n     [REASON]\n     No error messages related to disk latency were found in the serial console logs.\n     This does not rule out disk performance issues.\n\n     [REMEDIATION]\n     There can be multiple reasons which can cause Slow Disk IOs:\n\n     - CPU Starvation - Small instances (with lesser CPUs) may not have enough CPU to serve all I/Os inflight.\n     <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-performance#cpu_and_memory_performance>\n\n     - Network Throttling - High sent/received network traffic can cause network throttling that impacts disk operations.\n     <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-performance#network_performance>\n\n     - Insufficient Machine Resources - If your machine's IOPS and throughput limits are not enough to serve your workloads,\n     this can also cause CPU or Disk IOPS/throughput Starvation.\n     <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-performance#storage_performance>\n\n     - Application and GuestOS Operations - Unmanaged and untested application workloads can cause the high influx of IOs\n     to the disk and cause IO operations to be queued, causing throttling at disk and CPU levels.\n\n     To fix this issue:\n\n     - Please optimize your application workloads.\n     - If needed, please add more resources(CPU, Memory) to the VM.\n     - Please optimize your Disk performance -\n     <https://cloud.google.com/compute/docs/disks/optimizing-pd-performance>\n     - If needed, please change your disk type to get better Disk IOPS/throughput limits -\n     <https://cloud.google.com/compute/docs/disks/modify-persistent-disk#disk_type>\n\n[AUTOMATED STEP]: Verify any Filesystem corruption related errors in Serial console logs\n\n   - gcpdiag-gce-vm-performance/faulty-linux-ssh                          [FAIL]\n     [REASON]\n     Possible filesystem corruption detected.\n\n     The patterns used:\n\n     ```\n     'Corruption of in-memory data detected. Shutting down filesystem',\n     'Corruption of in-memory data detected', 'warning: mounting fs with errors',\n     'Failed to mount /',\n     'A stop job is running for Security \\.\\.\\..* Service ',\n     'I/O Error Detected. Shutting down filesystem',\n     'metadata I/O error in'\n     ```\n\n\n     [REMEDIATION]\n     To resolve filesystem corruption, admins can use [gce-rescue](https://github.com/GoogleCloudPlatform/gce-rescue),\n     available in Cloud Shell, to rescue faulty VMs. Alternatively, you can follow the\n     [manual method](https://cloud.google.com/compute/docs/troubleshooting/rescue-vm) to repair the filesystem.\n\n     Additional resources for reference:\n\n     - [Red Hat article on filesystem repair](https://access.redhat.com/solutions/1750923)\n     - [Video guide on rescuing VMs](https://www.youtube.com/watch?v=oD6IFpjEtEw)\n\n     These resources provide detailed steps for diagnosing and resolving filesystem issues.\n\n[AUTOMATED STEP]: Verify Instance's Disk Avg IO Latency is within optimal limits.\n\n   - gcpdiag-gce-vm-performance/faulty-linux-ssh                          [FAIL]\n     [REASON]\n     The performance of the disk 'faulty-linux-ssh' is currently degraded due to high\n     IO latency exceeding optimal thresholds. This may result in slower read/write\n     speeds and overall reduced performance.\n\n     [REMEDIATION]\n     Disk I/O latency is the time it takes for a read or write operation to complete on a\n     disk.\n     High disk I/O latency can significantly impact the performance of your applications\n     and workloads running on the instance, leading to slow response times, increased\n     processing time, and overall sluggishness.\n\n     **Potential Bottlenecks**\n\n     - Disk Type: To optimize disk performance, ensure your disk type is appropriate\n     for your workload and provides acceptable latency for your system architecture.\n     Choosing the right disk type can significantly impact performance.\n     <https://cloud.google.com/compute/docs/disks>\n\n     - Workload: The nature of your workload also influences latency. Workloads with\n     many small, random I/O operations will generally have higher latency than those\n     with sequential I/O\n\n     **Optimize Disk Usage**\n\n     - Reduce I/O Operations: Optimize your applications and database queries to minimize\n     the number of disk I/O operations.\n     - Increase I/O Request Size: Larger I/O requests can be more efficient than many small\n     ones. Consider adjusting your application or database settings to increase the I/O\n     request size.\n     - Caching: Implement caching mechanisms to reduce the need to access the disk for\n     frequently used data.\n\n     Choose the Right Disk Type with lesser IO Latency - <https://cloud.google.com/compute/docs/disks>\n\n     You may also look into Optimizing persistent disk performance -\n     <https://cloud.google.com/compute/docs/disks/optimizing-pd-performance>\n\n     Please don't hesitate to reach out to Google Cloud Support if issue is not resolved.\n\n[AUTOMATED STEP]: Verify live migrations for the instance\n[INFO]: \n\nLive Migration Detected at 2021/11/24 16:29:21, Checking further\n\n\n[INFO]: \n\nLive Migration Detected at 2021/11/24 16:34:35, Checking further\n\n\n[INFO]: \n\nLive Migration Detected at 2021/11/24 16:34:37, Checking further\n\n\n[INFO]: \n\nLive Migration Detected at 2021/11/24 16:34:38, Checking further\n\n\n[INFO]: \n\nLive Migration Detected at 2021/11/24 16:35:08, Checking further\n\n\n[INFO]: \n\nLive Migration Detected at 2021/11/24 16:35:10, Checking further\n\n\n[INFO]: \n\nLive Migration Detected at 2021/11/24 16:35:22, Checking further\n\n\n[AUTOMATED STEP]: Verify Disk IOPS/Throughput usage is within optimal limits\n[AUTOMATED STEP]: Verify Disk IOPS/Throughput usage is within optimal limits\n[AUTOMATED STEP]: Verify Disk IOPS/Throughput usage is within optimal limits\n[AUTOMATED STEP]: Verify Disk IOPS/Throughput usage is within optimal limits\n[AUTOMATED STEP]: Verify Disk IOPS/Throughput usage is within optimal limits\n[AUTOMATED STEP]: Verify Disk IOPS/Throughput usage is within optimal limits\n[AUTOMATED STEP]: Verify Disk IOPS/Throughput usage is within optimal limits\n[AUTOMATED STEP]: Verify Disk IOPS/Throughput usage is within optimal limits\n[END]: Finalize VM performance diagnostics.\n\n\ninstance_name=faulty-windows-ssh,project_id=gcpdiag-gce-vm-performance,zone=europe-west2-a\n\ngce/vm-performance:  Google Compute Engine VM performance checks\n\n  This runbook is designed to assist you in investigating and understanding the underlying reasons\n  behind the performance issues of your Google Compute Engine VMs within Google Cloud Platform.\n\n  Key Investigation Areas:\n\n    - High CPU utilisation\n    - CPU Over-commitment for E2 or Sole-Tenant VMs\n    - High Memory utilisation\n    - Disk space high utilisation\n    - High Disk IOPS utilisation\n    - High Disk Throughput utilisation\n    - Disk Health check\n    - Disk IO latency check\n    - Disk Slowness check\n    - Check for Live Migrations\n    - Usual Error checks in Serial console logs\n  \n[START]: Verify GCE Instance is in a \"RUNNING\" state.\n\n   - gcpdiag-gce-vm-performance/faulty-windows-ssh                        [FAIL]\n     [REASON]\n     The GCE Instance projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/faulty-windows-ssh is in TERMINATED state.\n\n     [REMEDIATION]\n     Restart VM projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/faulty-windows-ssh and ensure VM lifecycle transitions from TERMINATED to RUNNING.\n\n     Consult the following documentation:\n\n     - Restarting a compute instance:\n       <https://cloud.google.com/compute/docs/instances/stop-start-instance#restart-vm>\n     - Troubleshooting VM startup issues:\n       <https://cloud.google.com/compute/docs/troubleshooting/vm-startup#identify_the_reason_why_the_boot_disk_isnt_booting>\n\n[AUTOMATED STEP]: Verify GCE Instance is in a \"RUNNING\" state.\n\n   - gcpdiag-gce-vm-performance/faulty-windows-ssh                        [FAIL]\n     [REASON]\n     The GCE Instance projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/faulty-windows-ssh is in TERMINATED state.\n\n     [REMEDIATION]\n     Restart VM projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/faulty-windows-ssh and ensure VM lifecycle transitions from TERMINATED to RUNNING.\n\n     Consult the following documentation:\n\n     - Restarting a compute instance:\n       <https://cloud.google.com/compute/docs/instances/stop-start-instance#restart-vm>\n     - Troubleshooting VM startup issues:\n       <https://cloud.google.com/compute/docs/troubleshooting/vm-startup#identify_the_reason_why_the_boot_disk_isnt_booting>\n\n[AUTOMATED STEP]: Verify VM CPU utilization is within optimal levels.\n\n   - gcpdiag-gce-vm-performance/faulty-windows-ssh                        [FAIL]\n     [REASON]\n     CPU utilization on this VM has surpassed recommended operational levels,\n     which may affect its performance and SSH connectivity.\n\n     [REMEDIATION]\n     Excessive CPU usage can lead to performance bottlenecks. Resizing the VM to a machine type with higher CPU capabilities may resolve the issue.\n\n     Consult the following documentation for guidance:\n\n     - Stopping a VM: <https://cloud.google.com/compute/docs/instances/stop-start-instance>\n     - Resizing a VM: <https://cloud.google.com/compute/docs/instances/changing-machine-type-of-stopped-instance#gcloud>\n\n     Additionally, analyze Compute Engine observability metrics to pinpoint high-usage processes:\n\n     - Accessing VM observability metrics:\n       <https://cloud.google.com/compute/docs/instances/observe-monitor-vms#access_vm_observability_metrics>\n     - Analyzing process utilization:\n       <https://cloud.google.com/compute/docs/instances/observe-monitor-vms#process_utilization>\n\n     If SSH is unavailable, connect via the serial console to stop offending processes:\n     <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-using-serial-console>\n\n[AUTOMATED STEP]: Checking if CPU is overcommited\n[INFO]: vm.min_cpu_platform: None\n\n   - gcpdiag-gce-vm-performance/faulty-windows-ssh                        [FAIL]\n     [REASON]\n     CPU for the VM faulty-windows-ssh is over committed beyond acceptable limits: 0 ms/s\n[AUTOMATED STEP]: Verify VM memory utilization is within optimal levels.\n\n   - gcpdiag-gce-vm-performance/faulty-windows-ssh                        [FAIL]\n     [REASON]\n     Memory utilization on this VM has reached levels that may compromise its VM application performance.\n\n     [REMEDIATION]\n     Elevated memory usage can result in slow, unresponsive, or terminated applications.\n     Enhance the VM's memory capacity by changing to a machine type with more memory.\n\n     Consult the following documentation for guidance:\n\n     - Changing machine type:\n       <https://cloud.google.com/compute/docs/instances/changing-machine-type-of-stopped-instance#gcloud>\n\n     Additionally, analyze Compute Engine observability metrics to pinpoint high-usage processes:\n     <https://cloud.google.com/compute/docs/instances/observe-monitor-vms#memory_utilization>\n\n     If SSH is unavailable, connect via the serial console to mitigate the issue:\n     <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-using-serial-console>\n\n[AUTOMATED STEP]: Verify memory related errors in VM serial logs.\n\n   - gcpdiag-gce-vm-performance/faulty-windows-ssh                        [UNCERTAIN]\n     [REASON]\n     Unable to investigate the high memory utilization error logs, likely due to the absence of logs.\n     However, this does not eliminate the possibility of high memory usage.\n\n     Manual verification of memory utilization on the Guest OS is recommended as a potential cause.\n\n     [REMEDIATION]\n\n     1. Manually investigate memory usage by accessing the Guest OS:\n        - Identify processes with consistently high memory consumption using `top` (press \"M\") or `ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head -n 5`.\n        - Focus on processes with recent spikes or consistently high memory usage.\n        - If SSH access is unavailable, troubleshoot via the serial console:\n          <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-using-serial-console>\n\n     2. Review recent application or configuration changes:\n        - Investigate if recent deployments, updates, or configuration changes correlate with increased memory usage.\n\n     3. Resolve identified bottlenecks:\n        - For applications causing excessive memory usage, optimize their configuration or update them. Explore alternatives if optimization is insufficient.\n        - Evaluate scaling up resources if high memory usage results from legitimate application demands.\n\n     4. Increase instance memory if necessary:\n        - Stop the VM and change its machine type:\n          <https://cloud.google.com/compute/docs/instances/changing-machine-type-of-stopped-instance#gcloud>\n        - Consult the machine type documentation to select an appropriate configuration:\n          <https://cloud.google.com/compute/docs/machine-types>\n\n     **Note:** Non-Google provided application-specific issues may fall outside the support scope. Collaborate with relevant application teams for further investigation. Refer to the Google Cloud Platform support policy for details, including out-of-scope items:\n\n     - Support and maintenance policy: <https://cloud.google.com/compute/docs/images/support-maintenance-policy#support-scope>\n     - Out-of-scope items: <https://cloud.google.com/compute/docs/images/support-maintenance-policy#out-of-scope_for_support>\n\n[AUTOMATED STEP]: Verify instance disks are healthy.\n\n   - gcpdiag-gce-vm-performance/faulty-windows-ssh                        [FAIL]\n     [REASON]\n     You might experience slower/poor performance with your disk 'persistent-disk-0' due to an\n     ongoing issue with our Compute Engine or Persistent Disk infrastructure. We're working\n     to resolve this as quickly as possible.\n\n     [REMEDIATION]\n     To better understand the situation with your Compute Engine or Persistent Disks,\n     could you please take a look at the Google Cloud Status page:\n\n     <https://status.cloud.google.com>\n\n     This page provides real-time updates on the health of Google Cloud services.\n\n     Additionally, it may be helpful to check the Service Health dashboard in your\n     Google Cloud Console for any reported incidents:\n\n     <https://console.cloud.google.com/servicehealth/incidents>\n\n     If you don't find any information about an ongoing issue related to your concern,\n     please don't hesitate to reach out to Google Cloud Support by creating a support case.\n     They'll be happy to investigate further and assist you.\n\n[AUTOMATED STEP]: Verify VM's boot disk space utilization is within optimal levels.\n\n   - gcpdiag-gce-vm-performance/faulty-windows-ssh                        [FAIL]\n     [REASON]\n     Disk utilization on this VM's boot disk is critically high,\n     potentially affecting application performance.\n\n     [REMEDIATION]\n     To mitigate high disk usage, consider expanding the VM's boot disk capacity.\n     This action can help avoid performance issues and ensure smoother SSH connections.\n\n     Consult the following guide to increase disk size:\n     <https://cloud.google.com/compute/docs/disks/resize-persistent-disk#increase_the_size_of_a_disk>\n\n[AUTOMATED STEP]: Verify any slow Disk operations related errors in Serial console logs\n\n   - gcpdiag-gce-vm-performance/faulty-windows-ssh                        [UNCERTAIN]\n     [REASON]\n     No error messages related to disk latency were found in the serial console logs.\n     This does not rule out disk performance issues.\n\n     [REMEDIATION]\n     There can be multiple reasons which can cause Slow Disk IOs:\n\n     - CPU Starvation - Small instances (with lesser CPUs) may not have enough CPU to serve all I/Os inflight.\n     <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-performance#cpu_and_memory_performance>\n\n     - Network Throttling - High sent/received network traffic can cause network throttling that impacts disk operations.\n     <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-performance#network_performance>\n\n     - Insufficient Machine Resources - If your machine's IOPS and throughput limits are not enough to serve your workloads,\n     this can also cause CPU or Disk IOPS/throughput Starvation.\n     <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-performance#storage_performance>\n\n     - Application and GuestOS Operations - Unmanaged and untested application workloads can cause the high influx of IOs\n     to the disk and cause IO operations to be queued, causing throttling at disk and CPU levels.\n\n     To fix this issue:\n\n     - Please optimize your application workloads.\n     - If needed, please add more resources(CPU, Memory) to the VM.\n     - Please optimize your Disk performance -\n     <https://cloud.google.com/compute/docs/disks/optimizing-pd-performance>\n     - If needed, please change your disk type to get better Disk IOPS/throughput limits -\n     <https://cloud.google.com/compute/docs/disks/modify-persistent-disk#disk_type>\n\n[AUTOMATED STEP]: Verify any Filesystem corruption related errors in Serial console logs\n\n   - gcpdiag-gce-vm-performance/faulty-windows-ssh                        [UNCERTAIN]\n     [REASON]\n     No evidence Filesystem corruption errors present in the serial logs.\n\n     [REMEDIATION]\n     To resolve filesystem corruption, admins can use [gce-rescue](https://github.com/GoogleCloudPlatform/gce-rescue),\n     available in Cloud Shell, to rescue faulty VMs. Alternatively, you can follow the\n     [manual method](https://cloud.google.com/compute/docs/troubleshooting/rescue-vm) to repair the filesystem.\n\n     Additional resources for reference:\n\n     - [Red Hat article on filesystem repair](https://access.redhat.com/solutions/1750923)\n     - [Video guide on rescuing VMs](https://www.youtube.com/watch?v=oD6IFpjEtEw)\n\n     These resources provide detailed steps for diagnosing and resolving filesystem issues.\n\n[AUTOMATED STEP]: Verify Instance's Disk Avg IO Latency is within optimal limits.\n\n   - gcpdiag-gce-vm-performance/faulty-windows-ssh                        [FAIL]\n     [REASON]\n     The performance of the disk 'faulty-windows-ssh' is currently degraded due to high\n     IO latency exceeding optimal thresholds. This may result in slower read/write\n     speeds and overall reduced performance.\n\n     [REMEDIATION]\n     Disk I/O latency is the time it takes for a read or write operation to complete on a\n     disk.\n     High disk I/O latency can significantly impact the performance of your applications\n     and workloads running on the instance, leading to slow response times, increased\n     processing time, and overall sluggishness.\n\n     **Potential Bottlenecks**\n\n     - Disk Type: To optimize disk performance, ensure your disk type is appropriate\n     for your workload and provides acceptable latency for your system architecture.\n     Choosing the right disk type can significantly impact performance.\n     <https://cloud.google.com/compute/docs/disks>\n\n     - Workload: The nature of your workload also influences latency. Workloads with\n     many small, random I/O operations will generally have higher latency than those\n     with sequential I/O\n\n     **Optimize Disk Usage**\n\n     - Reduce I/O Operations: Optimize your applications and database queries to minimize\n     the number of disk I/O operations.\n     - Increase I/O Request Size: Larger I/O requests can be more efficient than many small\n     ones. Consider adjusting your application or database settings to increase the I/O\n     request size.\n     - Caching: Implement caching mechanisms to reduce the need to access the disk for\n     frequently used data.\n\n     Choose the Right Disk Type with lesser IO Latency - <https://cloud.google.com/compute/docs/disks>\n\n     You may also look into Optimizing persistent disk performance -\n     <https://cloud.google.com/compute/docs/disks/optimizing-pd-performance>\n\n     Please don't hesitate to reach out to Google Cloud Support if issue is not resolved.\n\n[AUTOMATED STEP]: Verify live migrations for the instance\n[INFO]: \n\nLive Migration Detected at 2021/11/24 16:29:21, Checking further\n\n\n[INFO]: \n\nLive Migration Detected at 2021/11/24 16:34:35, Checking further\n\n\n[INFO]: \n\nLive Migration Detected at 2021/11/24 16:34:37, Checking further\n\n\n[INFO]: \n\nLive Migration Detected at 2021/11/24 16:34:38, Checking further\n\n\n[INFO]: \n\nLive Migration Detected at 2021/11/24 16:35:08, Checking further\n\n\n[INFO]: \n\nLive Migration Detected at 2021/11/24 16:35:10, Checking further\n\n\n[INFO]: \n\nLive Migration Detected at 2021/11/24 16:35:22, Checking further\n\n\n[AUTOMATED STEP]: Verify Disk IOPS/Throughput usage is within optimal limits\n[AUTOMATED STEP]: Verify Disk IOPS/Throughput usage is within optimal limits\n[AUTOMATED STEP]: Verify Disk IOPS/Throughput usage is within optimal limits\n[AUTOMATED STEP]: Verify Disk IOPS/Throughput usage is within optimal limits\n[AUTOMATED STEP]: Verify Disk IOPS/Throughput usage is within optimal limits\n[AUTOMATED STEP]: Verify Disk IOPS/Throughput usage is within optimal limits\n[AUTOMATED STEP]: Verify Disk IOPS/Throughput usage is within optimal limits\n[AUTOMATED STEP]: Verify Disk IOPS/Throughput usage is within optimal limits\n[END]: Finalize VM performance diagnostics.\n\n\n"
  },
  {
    "path": "gcpdiag/runbook/gce/snapshots/vm_termination.txt",
    "content": "end_time=2025-03-19T00:00:00+00:00,instance_name=start-and-stop-vm,project_id=gcpdiag-\ngce5-aaaa,start_time=2025-03-17T00:00:00+00:00,zone=us-central1-c\n\ngce/vm-termination: GCE Instance unexpected shutdowns and reboots diagnostics\n\n  This runbook assists in investigating and understanding the reasons behind unexpected\n  terminations or reboots of GCE Virtual Machines (VMs).\n\n  Areas investigated:\n\n  - System event-triggered shutdowns and reboots: Identifies terminations initiated by Google Cloud\n    systems due to maintenance events, hardware failures, or resource constraints.\n\n  - Admin activities-triggered shutdown/reboot: Investigates terminations caused by direct actions,\n    such as API calls made by users or service accounts, including manual shutdowns, restarts, or\n    automated processes impacting VM states.\n  \n[START]: Validate the provided parameters to investigate VM terminations.\n[GATEWAY]: Investigate VM termination reason.\n[END]: Finalize VM terminations diagnostics.\n\n\nend_time=2025-03-19T00:00:00+00:00,instance_name=spot-vm-termination,project_id=gcpdiag-\ngce5-aaaa,start_time=2025-03-17T00:00:00+00:00,zone=us-central1-c\n\ngce/vm-termination: GCE Instance unexpected shutdowns and reboots diagnostics\n\n  This runbook assists in investigating and understanding the reasons behind unexpected\n  terminations or reboots of GCE Virtual Machines (VMs).\n\n  Areas investigated:\n\n  - System event-triggered shutdowns and reboots: Identifies terminations initiated by Google Cloud\n    systems due to maintenance events, hardware failures, or resource constraints.\n\n  - Admin activities-triggered shutdown/reboot: Investigates terminations caused by direct actions,\n    such as API calls made by users or service accounts, including manual shutdowns, restarts, or\n    automated processes impacting VM states.\n  \n[START]: Validate the provided parameters to investigate VM terminations.\n[GATEWAY]: Investigate VM termination reason.\n[END]: Finalize VM terminations diagnostics.\n\n\nend_time=2025-03-19T00:00:00+00:00,instance_name=shielded-vm-integrity-failure,project_id=gcpdiag-\ngce5-aaaa,start_time=2025-03-17T00:00:00+00:00,zone=us-central1-c\n\ngce/vm-termination: GCE Instance unexpected shutdowns and reboots diagnostics\n\n  This runbook assists in investigating and understanding the reasons behind unexpected\n  terminations or reboots of GCE Virtual Machines (VMs).\n\n  Areas investigated:\n\n  - System event-triggered shutdowns and reboots: Identifies terminations initiated by Google Cloud\n    systems due to maintenance events, hardware failures, or resource constraints.\n\n  - Admin activities-triggered shutdown/reboot: Investigates terminations caused by direct actions,\n    such as API calls made by users or service accounts, including manual shutdowns, restarts, or\n    automated processes impacting VM states.\n  \n[START]: Validate the provided parameters to investigate VM terminations.\n[GATEWAY]: Investigate VM termination reason.\n[GATEWAY]: Decision point to investigate various stop operation types\n[AUTOMATED STEP]: Investigate the scheduled stop policy\n\n   - gcpdiag-gce5-aaaa/shielded-vm-integrity-failure                      [FAIL]\n     [REASON]\n     Instance projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/shielded-vm-integrity-failure was terminated by account service-123456012345@compute-system.iam.gserviceaccount.com due to a scheduled stop policy.\n\n     [REMEDIATION]\n     No action required. VM is currently running.\n\n[END]: Finalize VM terminations diagnostics.\n\n\n"
  },
  {
    "path": "gcpdiag/runbook/gce/ssh.py",
    "content": "#\n# Copyright 2023 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Module containing SSH diagnostic tree and custom steps.\"\"\"\n\nfrom ipaddress import IPv4Address\n\nfrom gcpdiag import config, runbook\nfrom gcpdiag.queries import crm, gce, iam\nfrom gcpdiag.runbook import exceptions as runbook_exceptions\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.crm import generalized_steps as crm_gs\nfrom gcpdiag.runbook.gce import constants as gce_const\nfrom gcpdiag.runbook.gce import flags\nfrom gcpdiag.runbook.gce import generalized_steps as gce_gs\nfrom gcpdiag.runbook.gce import util\nfrom gcpdiag.runbook.gcp import generalized_steps as gcp_gs\nfrom gcpdiag.runbook.iam import generalized_steps as iam_gs\n\nCHECK_SSH_IN_BROWSER = 'check_ssh_in_browser'\nCLIENT = 'client'\nACCESS_METHOD = 'access_method'\nMFA = 'mfa'\nIAP = 'iap'\nOSLOGIN = 'oslogin'\nSSH_KEY_IN_METADATA = 'ssh-key-in-metadata'\nSSH_IN_BROWSER = 'ssh-in-browser'\nOSLOGIN_2FA = 'oslogin-2fa'\nSECURITY_KEY = 'security-key'\nOPENSSH = 'openssh'\nGCLOUD = 'gcloud'\nPUTTY = 'putty'\nIAP_DESKTOP = 'iap-desktop'\nJUMPHOST = 'jumphost'\n\n\nclass Ssh(runbook.DiagnosticTree):\n  \"\"\"A comprehensive troubleshooting guide for common issues which affects SSH connectivity to VMs.\n\n  Investigates components required for ssh on either Windows and Linux VMs\n  hosted on Google Cloud Platform and pinpoint misconfigurations.\n\n  Areas Examined:\n\n  - VM Instance Status: Evaluates the VM's current state, performance - ensuring that it is running\n    and not impaired by high CPU usage, insufficient memory, or disk space issues that might disrupt\n    normal SSH operations.\n\n  - User Permissions: Checks for the necessary Google Cloud IAM permissions that are required to\n    leverage OS Login features and to use metadata-based SSH keys for authentication.\n\n  - VM Configuration: Analyzes the VM's metadata settings to confirm the inclusion of SSH keys,\n    flags and other essential configuration details that facilitate SSH access.\n\n  - GCE Network Connectivity Tests: Reviews applicable firewall rules to verify that there are no\n    network barriers preventing SSH access to the VM.\n\n  - Internal Guest OS Checks: Analysis available Guest OS metrics or logs to detect any\n    misconfigurations or service disruptions that could be obstructing SSH functionality.\n\n  - SSH in Browser Checks: Checks if the authenticated user has relevant permissions and\n    the organization policies permits SSH in Browser.\n    \"\"\"\n  # Specify parameters common to all steps in the diagnostic tree class.\n  parameters = {\n      flags.PROJECT_ID: {\n          'type': str,\n          'help': 'The ID of the project hosting the GCE Instance',\n          'required': True\n      },\n      flags.NAME: {\n          'type': str,\n          'help': 'The name of the target GCE Instance',\n          'deprecated': True,\n          'new_parameter': 'instance_name',\n          'group': 'instance'\n      },\n      flags.INSTANCE_NAME: {\n          'type': str,\n          'help': 'The name of the target GCE Instance',\n          'group': 'instance'\n      },\n      flags.INSTANCE_ID: {\n          'type': int,\n          'help': 'The instance ID of the target GCE Instance',\n          'group': 'instance'\n      },\n      flags.ID: {\n          'type': int,\n          'help': 'The instance ID of the target GCE Instance',\n          'group': 'instance'\n      },\n      flags.ZONE: {\n          'type': str,\n          'help': 'The zone of the target GCE Instance',\n          'required': True\n      },\n      flags.PRINCIPAL: {\n          'type': str,\n          'help': (\n              'The user or service account initiating '\n              'the SSH connection. This user should be authenticated in '\n              'gcloud/cloud console when sshing into to a GCE instance. '\n              'For service account impersonation, it should be the '\n              'service account\\'s email. (format: user:user@example.com or '\n              'serviceAccount:service-account-name@project-id.iam.gserviceaccount.com)'\n          ),\n          'ignorecase': True\n      },\n      flags.LOCAL_USER: {\n          'type': str,\n          'help': 'Posix User on the VM',\n          'deprecated': True,\n          'new_parameter': 'posix_user'\n      },\n      flags.POSIX_USER: {\n          'type': str,\n          'help': 'Posix User on the VM',\n      },\n      flags.TUNNEL_THROUGH_IAP: {\n          'type': bool,\n          'help':\n              ('A boolean parameter (true or false) indicating whether ',\n               'Identity-Aware Proxy should be used for establishing the SSH '\n               'connection.'),\n          'default': True,\n          'deprecated': True,\n          'new_parameter': 'proxy'\n      },\n      flags.PROXY: {\n          'type': str,\n          'help': (\n              'A string that specifies the method used to establish the SSH connection, ',\n              'and indicating whether Identity-Aware Proxy (IAP) or a jumphost is utilized.'\n          ),\n          'enum': ['iap', 'jumphost']\n      },\n      flags.CHECK_OS_LOGIN: {\n          'type': bool,\n          'help': ('A boolean value (true or false) indicating whether OS '\n                   'Login should be used for SSH authentication'),\n          'default': True,\n          'deprecated': True,\n          'new_parameter': 'access_method'\n      },\n      flags.CLIENT: {\n          'type':\n              str,\n          'help':\n              'The SSH client application used to establish SSH connection',\n          'enum': [\n              'ssh-in-browser', 'gcloud', 'openssh', 'putty', 'iap-desktop'\n          ]\n      },\n      flags.SRC_IP: {\n          'type':\n              IPv4Address,\n          'help': (\n              'The IPv4 address of the workstation connecting to the network, '\n              'or the IP of the bastion/jumphost if currently logged in through one.'\n          )\n      },\n      flags.PROTOCOL_TYPE: {\n          'type': str,\n          'help': 'Protocol used to connect to SSH',\n          'default': 'tcp',\n          'deprecated': True\n      },\n      flags.PORT: {\n          'type':\n              int,\n          'help':\n              'The port used to connect to on the remote host (default: 22)',\n          'default':\n              gce_const.DEFAULT_SSHD_PORT\n      },\n      CHECK_SSH_IN_BROWSER: {\n          'type': bool,\n          'help': 'Check that SSH in Browser is feasible',\n          'default': False,\n          'deprecated': True,\n          'new_parameter': 'client'\n      },\n      ACCESS_METHOD: {\n          'type': str,\n          'help': 'The method used to share or restrict access to the instance',\n          'enum': ['oslogin', 'ssh-key-in-metadata']\n      },\n      MFA: {\n          'type':\n              str,\n          'help':\n              'Multifactor authentication required to access to the instance',\n          'enum': ['oslogin-2fa', 'security-key']\n      }\n  }\n\n  def legacy_parameter_handler(self, parameters):\n    if flags.NAME in parameters:\n      parameters[flags.INSTANCE_NAME] = parameters.pop(flags.NAME)\n\n    if flags.ID in parameters:\n      parameters[flags.INSTANCE_ID] = parameters.pop(flags.ID)\n\n    if flags.LOCAL_USER in parameters:\n      parameters[flags.POSIX_USER] = parameters.pop(flags.LOCAL_USER)\n\n    if flags.TUNNEL_THROUGH_IAP in parameters:\n      parameters[flags.PROXY] = IAP\n      del parameters[flags.TUNNEL_THROUGH_IAP]\n\n    if flags.CHECK_OS_LOGIN in parameters:\n      parameters[flags.ACCESS_METHOD] = OSLOGIN\n      del parameters[flags.CHECK_OS_LOGIN]\n\n    if CHECK_SSH_IN_BROWSER in parameters:\n      if parameters.pop(CHECK_SSH_IN_BROWSER):\n        parameters[flags.CLIENT] = SSH_IN_BROWSER\n\n    if flags.PROTOCOL_TYPE in parameters:\n      del parameters[flags.PROTOCOL_TYPE]  # Deprecated with no replacement\n\n  def build_tree(self):\n    start = SshStart()\n    lifecycle_check = gce_gs.VmLifecycleState()\n    lifecycle_check.project_id = op.get(flags.PROJECT_ID)\n    lifecycle_check.zone = op.get(flags.ZONE)\n    lifecycle_check.instance_name = op.get(flags.INSTANCE_NAME)\n    lifecycle_check.expected_lifecycle_status = 'RUNNING'\n    performance_check = VmPerformanceChecks()\n    gce_firewall_check = GceFirewallAllowsSsh()\n    # Prepare parameters given by the user\n    # Inform the user values that will be used.\n    self.add_start(step=start)\n    # First check VM is running\n    self.add_step(parent=start, child=lifecycle_check)\n    # Only check performance if VM is up and running.\n    self.add_step(parent=lifecycle_check, child=performance_check)\n    # Check the state of the guest os after performance checks\n    self.add_step(parent=lifecycle_check, child=VmGuestOsType())\n    # gce_* checks are not depend on the lifecycle, performnce or guest of the VM\n    # assign add as a child of start\n    if op.get(flags.PRINCIPAL):\n      gce_permission_check = GcpSshPermissions()\n      self.add_step(parent=start, child=gce_permission_check)\n    self.add_step(parent=start, child=gce_firewall_check)\n\n    # Check for Guest Agent status\n    guest_agent_check = gce_gs.VmSerialLogsCheck()\n    guest_agent_check.project_id = op.get(flags.PROJECT_ID)\n    guest_agent_check.zone = op.get(flags.ZONE)\n    guest_agent_check.instance_name = op.get(flags.INSTANCE_NAME)\n    guest_agent_check.template = 'vm_serial_log::guest_agent'\n    guest_agent_check.positive_pattern = gce_const.GUEST_AGENT_STATUS_MSG\n    guest_agent_check.negative_pattern = gce_const.GUEST_AGENT_FAILED_MSG\n    self.add_step(parent=start, child=guest_agent_check)\n\n    # Check for SSH issues due to bad permissions\n    sshd_auth_failure = gce_gs.VmSerialLogsCheck()\n    sshd_auth_failure.project_id = op.get(flags.PROJECT_ID)\n    sshd_auth_failure.zone = op.get(flags.ZONE)\n    sshd_auth_failure.instance_name = op.get(flags.INSTANCE_NAME)\n    sshd_auth_failure.template = 'vm_serial_log::sshd_auth_failure'\n    sshd_auth_failure.negative_pattern = gce_const.SSHD_AUTH_FAILURE\n    self.add_step(parent=start, child=sshd_auth_failure)\n\n    # users wants to use SSH in Browser\n    if op.get(CLIENT) == SSH_IN_BROWSER:\n      self.add_step(parent=start, child=SshInBrowserCheck())\n    self.add_end(step=SshEnd())\n\n\nclass SshStart(runbook.StartStep):\n  \"\"\"Initiates diagnostics for SSH connectivity issues.\n\n  This step prepares the environment for SSH diagnostics by gathering necessary\n  information about the target VM. It verifies the existence of the VM, checks\n  user-supplied parameters for validity, and sets up initial conditions for further\n  diagnostic steps.\n  \"\"\"\n\n  def execute(self):\n    \"\"\"Starting SSH diagnostics\"\"\"\n    project = crm.get_project(op.get(flags.PROJECT_ID))\n    try:\n      util.ensure_instance_resolved()\n    except (runbook_exceptions.FailedStepError,\n            runbook_exceptions.MissingParameterError) as e:\n      op.add_skipped(project, reason=str(e))\n      return\n    vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID),\n                          zone=op.get(flags.ZONE),\n                          instance_name=op.get(flags.INSTANCE_NAME))\n    if vm:\n      # Align with the user on parameters to be investigated\n      # prep authenticated principal\n      if op.get(flags.PRINCIPAL):\n        email_only = len(op.get(flags.PRINCIPAL).split(':')) == 1\n        if email_only:\n          # Get the type\n          p_policy = iam.get_project_policy(op.get_context())\n          p_type = p_policy.get_member_type(op.get(flags.PRINCIPAL))\n          op.put(flags.PRINCIPAL, f'{p_type}:{op.get(flags.PRINCIPAL)}')\n          if p_type:\n            op.info(\n                f'GCP permissions related to SSH will be verified for: {op.get(flags.PRINCIPAL)}'\n            )\n      if not op.get(flags.SRC_IP) and not op.get(\n          flags.PROXY) and vm.is_public_machine():\n        op.put(flags.SRC_IP, gce_const.UNSPECIFIED_ADDRESS)\n        op.info(\n            f'No proxy specified. Setting source IP range to: {gce_const.UNSPECIFIED_ADDRESS}'\n        )\n      if op.get(flags.PROXY) == IAP:\n        # set IAP VIP as the source to the VM\n        op.put(flags.SRC_IP, gce_const.IAP_FW_VIP)\n        op.info(\n            f'Source IP to be used for SSH connectivity test: {op.get(flags.SRC_IP)}'\n        )\n      elif op.get(flags.PROXY) == JUMPHOST:\n        op.info(\n            f'Source IP to be used for SSH connectivity test: {op.get(flags.SRC_IP)}'\n        )\n\n      op.info(\n          f'Port {op.get(flags.PORT)} and ip {op.get(flags.SRC_IP)} as the source IP'\n      )\n\n      if not op.get(flags.PORT):\n        op.info(f'SSH port to investigate: {op.get(flags.PORT)}')\n\n      if op.get(flags.ACCESS_METHOD) == OSLOGIN:\n        op.info(\n            'Access method to investigate: OS login https://cloud.google.com/compute/docs/oslogin'\n        )\n      elif op.get(flags.ACCESS_METHOD) == SSH_KEY_IN_METADATA:\n        op.info(\n            'Access method to investigate: SSH keys in metadata '\n            'https://cloud.google.com/compute/docs/instances/access-overview#ssh-access'\n        )\n\n      if op.get(flags.POSIX_USER):\n        op.info(\n            f'Guest OS Posix User to be investigated: {op.get(flags.POSIX_USER)}'\n        )\n      if op.get(CLIENT) == SSH_IN_BROWSER:\n        op.info('SSH Client to be investigated: SSH in Browser')\n      if op.get(CLIENT) == GCLOUD:\n        op.info('Investigating components required to use gcloud compute ssh')\n      if op.get(CLIENT) in (IAP_DESKTOP, PUTTY, OPENSSH):\n        op.info(\n            'IAP Desktop, Putty and vanilla openssh investigations are not supported yet'\n        )\n      if op.get(MFA) == OSLOGIN_2FA:\n        op.info(\n            'Multifactor authentication to investigate: OS Login 2FA '\n            'https://cloud.google.com/compute/docs/oslogin/set-up-oslogin#byb')\n      if op.get(MFA) == SECURITY_KEY:\n        op.info(\n            'Multifactor authentication to investigate: Security keys with OS Login  '\n            'https://cloud.google.com/compute/docs/oslogin/security-keys')\n\n\nclass VmGuestOsType(runbook.Gateway):\n  \"\"\"Distinguishes between Windows and Linux operating systems on a VM to guide further diagnostics.\n\n  Based on the OS type, it directs the diagnostic process towards OS-specific checks,\n  ensuring relevancy and efficiency in troubleshooting efforts.\n  \"\"\"\n\n  def execute(self):\n    \"\"\"Identify Guest OS type.\"\"\"\n    project = crm.get_project(op.get(flags.PROJECT_ID))\n    try:\n      util.ensure_instance_resolved()\n    except (\n        runbook_exceptions.FailedStepError,\n        runbook_exceptions.MissingParameterError,\n    ) as e:\n      op.add_skipped(project, reason=str(e))\n      return\n    vm = gce.get_instance(\n        project_id=op.get(flags.PROJECT_ID),\n        zone=op.get(flags.ZONE),\n        instance_name=op.get(flags.INSTANCE_NAME),\n    )\n    if not vm.is_windows_machine():\n      op.info('Linux Guest OS detected. Proceeding with diagnostics specific to'\n              ' Linux systems.')\n      self.add_child(LinuxGuestOsChecks())\n    else:\n      op.info(\n          'Windows Guest OS detected. Proceeding with diagnostics specific to'\n          ' Windows systems.')\n      self.add_child(WindowsGuestOsChecks())\n\n\nclass SshEnd(runbook.EndStep):\n  \"\"\"Concludes the SSH diagnostics process, offering guidance based on the user's feedback.\n\n  If SSH issues persist, it directs the user to helpful resources and\n  suggests contacting support with a detailed report\n  \"\"\"\n\n  def execute(self):\n    \"\"\"Finalize SSH diagnostics.\"\"\"\n    if not config.get(flags.INTERACTIVE_MODE):\n      response = op.prompt(\n          kind=op.CONFIRMATION,\n          message=f'Are you able to SSH into VM {op.get(flags.INSTANCE_NAME)}?',\n          choice_msg='Enter an option: ')\n      if response == op.NO:\n        op.info(message=op.END_MESSAGE)\n\n\nclass SshInBrowserCheck(runbook.CompositeStep):\n  \"\"\"Investigate SSH in Browser components\n\n  SSH can be done via SSH in Browser feature, if desired by user,\n  check components required for SSH in browser to work correctly\n  \"\"\"\n\n  def execute(self):\n    \"\"\"SSH in browser required?\"\"\"\n    ssh_in_browser_orgpolicy_check = crm_gs.OrgPolicyCheck()\n    ssh_in_browser_orgpolicy_check.constraint = 'constraints/compute.disableSshInBrowser'\n    ssh_in_browser_orgpolicy_check.is_enforced = False\n    self.add_child(ssh_in_browser_orgpolicy_check)\n    # add check constraints/compute.vmExternalIpAccess when list org policies are allowed.\n\n\nclass GcpSshPermissions(runbook.CompositeStep):\n  \"\"\"Evaluates the user's GCP permissions against the requirements for accessing a VM via SSH.\n\n  This step checks if the user has the necessary project-level roles\n  for both traditional SSH access and OS Login methods. It does not consider permissions inherited\n  from higher-level resources such as folders, organizations, or groups.\n  \"\"\"\n\n  def execute(self):\n    \"\"\"Verify overall user permissions for SSH access.\n\n    Note: Only roles granted at the project level are checked. Permissions inherited from\n    ancestor resources such as folder(s) or organization and groups are not checked.\"\"\"\n    # Check user has permission to access the VM in the first place\n    if op.get(CLIENT) == SSH_IN_BROWSER:\n      console_permission = iam_gs.IamPolicyCheck()\n      console_permission.project = op.get(flags.PROJECT_ID)\n      console_permission.template = 'gcpdiag.runbook.gce::permissions::console_view_permission'\n      console_permission.permissions = ['compute.projects.get']\n      console_permission.principal = op.get(flags.PRINCIPAL)\n      console_permission.require_all = False\n      self.add_child(console_permission)\n    # Both OS login and gcloud key based require this.\n    instance_fetch_perm_check = iam_gs.IamPolicyCheck()\n    instance_fetch_perm_check.project = op.get(flags.PROJECT_ID)\n    instance_fetch_perm_check.principal = op.get(flags.PRINCIPAL)\n    instance_fetch_perm_check.template = 'gcpdiag.runbook.gce::permissions::instances_get'\n    instance_fetch_perm_check.permissions = ['compute.instances.get']\n    instance_fetch_perm_check.require_all = False\n    self.add_child(instance_fetch_perm_check)\n\n    # Check OS login or Key based auth preference.\n    self.add_child(OsLoginStatusCheck())\n\n    if op.get(flags.PROXY) == IAP:\n      iap_role_check = iam_gs.IamPolicyCheck()\n      iap_role_check.project = op.get(flags.PROJECT_ID)\n      iap_role_check.principal = op.get(flags.PRINCIPAL)\n      iap_role_check.template = 'gcpdiag.runbook.gce::permissions::iap_role'\n      iap_role_check.roles = [gce_const.IAP_ROLE]\n      iap_role_check.require_all = False\n      self.add_child(iap_role_check)\n\n\nclass OsLoginStatusCheck(runbook.Gateway):\n  \"\"\"Checks for OS Login setup and and non OS login setup on a VM to guide further diagnostics.\n\n  If using OS Login investigates OS Login related configuration and permission and if not\n  Checks Keybased Configuration.\n  \"\"\"\n\n  def execute(self):\n    \"\"\"Identify OS Login Setup.\"\"\"\n    # User intends to use OS login\n    if op.get(flags.ACCESS_METHOD) == OSLOGIN:\n      os_login_check = gce_gs.VmMetadataCheck()\n      os_login_check.project_id = op.get(flags.PROJECT_ID)\n      os_login_check.zone = op.get(flags.ZONE)\n      os_login_check.instance_name = op.get(flags.INSTANCE_NAME)\n      os_login_check.template = 'vm_metadata::os_login_enabled'\n      os_login_check.metadata_key = 'enable-oslogin'\n      os_login_check.expected_value = True\n      self.add_child(os_login_check)\n\n      os_login_role_check = iam_gs.IamPolicyCheck()\n      os_login_role_check.project = op.get(flags.PROJECT_ID)\n      os_login_role_check.principal = op.get(flags.PRINCIPAL)\n      os_login_role_check.template = 'gcpdiag.runbook.gce::permissions::has_os_login'\n      os_login_role_check.roles = [\n          gce_const.OSLOGIN_ROLE, gce_const.OSLOGIN_ADMIN_ROLE,\n          gce_const.OWNER_ROLE\n      ]\n      os_login_role_check.require_all = False\n      self.add_child(os_login_role_check)\n      sa_user_role_check = iam_gs.IamPolicyCheck()\n      sa_user_role_check.project = op.get(flags.PROJECT_ID)\n      sa_user_role_check.principal = op.get(flags.PRINCIPAL)\n      sa_user_role_check.template = 'gcpdiag.runbook.gce::permissions::sa_user_role'\n      sa_user_role_check.roles = [gce_const.SA_USER_ROLE]\n      sa_user_role_check.require_all = False\n      self.add_child(sa_user_role_check)\n\n    elif op.get(flags.ACCESS_METHOD) == SSH_KEY_IN_METADATA:\n      metadata_perm_check = iam_gs.IamPolicyCheck()\n      metadata_perm_check.project = op.get(flags.PROJECT_ID)\n      metadata_perm_check.principal = op.get(flags.PRINCIPAL)\n      metadata_perm_check.template = 'gcpdiag.runbook.gce::permissions::can_set_metadata'\n      metadata_perm_check.permissions = [\n          'compute.instances.setMetadata',\n          'compute.projects.setCommonInstanceMetadata'\n      ]\n      metadata_perm_check.require_all = False\n      self.add_child(metadata_perm_check)\n      os_login_check = gce_gs.VmMetadataCheck()\n      os_login_check.project_id = op.get(flags.PROJECT_ID)\n      os_login_check.zone = op.get(flags.ZONE)\n      os_login_check.instance_name = op.get(flags.INSTANCE_NAME)\n      os_login_check.template = 'vm_metadata::no_os_login'\n      os_login_check.metadata_key = 'enable_oslogin'\n      os_login_check.expected_value = False\n      self.add_child(os_login_check)\n      self.add_child(PosixUserHasValidSshKeyCheck())\n      self.add_child(VmDuplicateSshKeysCheck())\n\n\nclass PosixUserHasValidSshKeyCheck(runbook.Step):\n  \"\"\"Verifies the existence of a valid SSH key for the specified local Proxy user on a (VM).\n\n  Ensures that the local user has at least one valid SSH key configured in the VM's metadata, which\n  is essential for secure SSH access. The check is performed against the SSH keys stored within\n  the VM's metadata. A successful verification indicates that the user is likely able to SSH into\n  the VM using their key.\n  \"\"\"\n\n  template = 'vm_metadata::valid_ssh_key'\n\n  def execute(self):\n    \"\"\"Verify SSH key for local user.\"\"\"\n\n    vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID),\n                          zone=op.get(flags.ZONE),\n                          instance_name=op.get(flags.INSTANCE_NAME))\n\n    # Check if the local_user has a valid key in the VM's metadata.\n    ssh_keys = vm.get_metadata('ssh-keys').split('\\n') if vm.get_metadata(\n        'ssh-keys') else []\n    has_valid_key = util.user_has_valid_ssh_key(op.get(flags.POSIX_USER),\n                                                ssh_keys)\n    if has_valid_key:\n      op.add_ok(resource=vm,\n                reason=op.prep_msg(op.SUCCESS_REASON,\n                                   local_user=op.get(flags.POSIX_USER),\n                                   full_resource_path=vm.full_path))\n    else:\n      op.add_failed(vm,\n                    reason=op.prep_msg(op.FAILURE_REASON,\n                                       local_user=op.get(flags.POSIX_USER),\n                                       full_resource_path=vm.full_path),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION,\n                                            local_user=op.get(\n                                                flags.POSIX_USER)))\n\n\nclass VmDuplicateSshKeysCheck(runbook.Step):\n  \"\"\"Check if there are duplicate ssh keys in VM metadata.\"\"\"\n\n  template = 'vm_metadata::duplicate_ssh_keys'\n\n  def execute(self):\n    \"\"\"Check for duplicate SSH keys.\"\"\"\n    vm = gce.get_instance(\n        project_id=op.get(flags.PROJECT_ID),\n        zone=op.get(flags.ZONE),\n        instance_name=op.get(flags.INSTANCE_NAME),\n    )\n    ssh_keys_str = vm.get_metadata('ssh-keys')\n    if not ssh_keys_str:\n      op.add_ok(vm, reason='No SSH keys found in metadata.')\n      return\n\n    key_blobs = []\n    for line in ssh_keys_str.splitlines():\n      line = line.strip()\n      if not line:\n        continue\n\n      # remove username prefix if present\n      line_parts = line.split(':', 1)\n      if len(line_parts) == 2 and ' ' not in line_parts[0]:\n        line_without_user = line_parts[1]\n      else:\n        line_without_user = line\n\n      parts = line_without_user.strip().split()\n      if len(parts) >= 2:\n        # parts[0] is key type, parts[1] is key blob\n        key_blobs.append(parts[1])\n\n    seen = set()\n    duplicates = []\n    for blob in key_blobs:\n      if blob in seen and blob not in duplicates:\n        duplicates.append(blob)\n      else:\n        seen.add(blob)\n\n    if duplicates:\n      op.add_failed(\n          vm,\n          reason=op.prep_msg(op.FAILURE_REASON,\n                             instance_name=vm.name,\n                             count=len(duplicates),\n                             keys=','.join(duplicates)),\n          remediation=op.prep_msg(op.FAILURE_REMEDIATION),\n      )\n    else:\n      op.add_ok(vm,\n                reason=op.prep_msg(op.SUCCESS_REASON, instance_name=vm.name))\n\n\nclass GceFirewallAllowsSsh(runbook.Gateway):\n  \"\"\"Assesses the VPC network configuration to ensure it allows SSH traffic to the target VM.\n\n  This diagnostic step checks for ingress firewall rules that permit SSH traffic based on\n  the operational context, such as the use of IAP for SSH or direct access from a specified\n  source IP. It helps identify network configurations that might block SSH connections.\"\"\"\n\n  def execute(self):\n    \"\"\"Evaluating VPC network firewall rules for SSH access.\"\"\"\n    vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID),\n                          zone=op.get(flags.ZONE),\n                          instance_name=op.get(flags.INSTANCE_NAME))\n\n    if op.get(flags.PROXY) == IAP:\n      tti_ingress_check = gce_gs.GceVpcConnectivityCheck()\n      tti_ingress_check.project_id = op.get(flags.PROJECT_ID)\n      tti_ingress_check.zone = op.get(flags.ZONE)\n      tti_ingress_check.instance_name = op.get(flags.INSTANCE_NAME)\n      tti_ingress_check.src_ip = op.get(flags.SRC_IP)\n      tti_ingress_check.protocol_type = 'tcp'\n      tti_ingress_check.port = op.get(flags.PORT)\n      tti_ingress_check.traffic = 'ingress'\n      # Check IAP Firewall rule if specified\n      tti_ingress_check.template = 'vpc_connectivity::tti_ingress'\n      self.add_child(tti_ingress_check)\n    if (not op.get(flags.SRC_IP) and not op.get(flags.PROXY) and\n        vm.is_public_machine()):\n      default_ingress_check = gce_gs.GceVpcConnectivityCheck()\n      default_ingress_check.project_id = op.get(flags.PROJECT_ID)\n      default_ingress_check.zone = op.get(flags.ZONE)\n      default_ingress_check.instance_name = op.get(flags.INSTANCE_NAME)\n      default_ingress_check.src_ip = op.get(flags.SRC_IP)\n      default_ingress_check.protocol_type = 'tcp'\n      default_ingress_check.port = op.get(flags.PORT)\n      default_ingress_check.traffic = 'ingress'\n      default_ingress_check.template = 'vpc_connectivity::default_ingress'\n\n      self.add_child(default_ingress_check)\n\n    # Check provided source IP has access\n    if op.get(flags.SRC_IP) and not op.get(flags.PROXY):\n      custom_ip_ingress_check = gce_gs.GceVpcConnectivityCheck()\n      custom_ip_ingress_check.project_id = op.get(flags.PROJECT_ID)\n      custom_ip_ingress_check.zone = op.get(flags.ZONE)\n      custom_ip_ingress_check.instance_name = op.get(flags.INSTANCE_NAME)\n      custom_ip_ingress_check.src_ip = op.get(flags.SRC_IP)\n      custom_ip_ingress_check.protocol_type = 'tcp'\n      custom_ip_ingress_check.port = op.get(flags.PORT)\n      custom_ip_ingress_check.traffic = 'ingress'\n      custom_ip_ingress_check.template = 'vpc_connectivity::default_ingress'\n      self.add_child(custom_ip_ingress_check)\n\n\nclass VmPerformanceChecks(runbook.CompositeStep):\n  \"\"\"Assesses the overall performance of a VM by evaluating its memory, CPU, and disk utilization.\n\n  This composite diagnostic step sequentially checks for high memory utilization, high disk\n  utilization, and CPU performance issues. It adds specific child steps designed to identify and\n  report potential performance bottlenecks that could impact the VM's operation and efficiency.\n  \"\"\"\n\n  def execute(self):\n    \"\"\"Evaluating VM memory, CPU, and disk performance.\"\"\"\n    vm_memory_check = gce_gs.HighVmMemoryUtilization()\n    vm_memory_check.project_id = op.get(flags.PROJECT_ID)\n    vm_memory_check.zone = op.get(flags.ZONE)\n    vm_memory_check.instance_name = op.get(flags.INSTANCE_NAME)\n    vm_disk_check = gce_gs.HighVmDiskUtilization()\n    vm_disk_check.project_id = op.get(flags.PROJECT_ID)\n    vm_disk_check.zone = op.get(flags.ZONE)\n    vm_disk_check.instance_name = op.get(flags.INSTANCE_NAME)\n    vm_cpu_check = gce_gs.HighVmCpuUtilization()\n    vm_cpu_check.project_id = op.get(flags.PROJECT_ID)\n    vm_cpu_check.zone = op.get(flags.ZONE)\n    vm_cpu_check.instance_name = op.get(flags.INSTANCE_NAME)\n    self.add_child(child=vm_memory_check)\n    self.add_child(child=vm_disk_check)\n    self.add_child(child=vm_cpu_check)\n\n\nclass LinuxGuestOsChecks(runbook.CompositeStep):\n  \"\"\"Examines Linux-based guest OS's serial log entries for guest os level issues.\n\n  This composite step scrutinizes the VM's serial logs for patterns indicative of kernel panics,\n  problems with the SSH daemon, and blocks by SSH Guard - each of which could signify underlying\n  issues affecting the VM's stability and accessibility. By identifying these specific patterns,\n  the step aims to isolate common Linux OS and application issues, facilitating targeted\n  troubleshooting.\n  \"\"\"\n\n  def execute(self):\n    \"\"\"Analyzing serial logs for common linux guest os and application issues.\"\"\"\n    # Check for kernel panic patterns in serial logs.\n    kernel_panic = gce_gs.VmSerialLogsCheck()\n    kernel_panic.project_id = op.get(flags.PROJECT_ID)\n    kernel_panic.zone = op.get(flags.ZONE)\n    kernel_panic.instance_name = op.get(flags.INSTANCE_NAME)\n    kernel_panic.template = 'vm_serial_log::kernel_panic'\n    kernel_panic.negative_pattern = gce_const.KERNEL_PANIC_LOGS\n    kernel_panic.positive_pattern = ['systemd', 'OSConfigAgent']\n\n    self.add_child(kernel_panic)\n    # Check for issues in SSHD configuration or behavior.\n    sshd_check = gce_gs.VmSerialLogsCheck()\n    sshd_check.project_id = op.get(flags.PROJECT_ID)\n    sshd_check.zone = op.get(flags.ZONE)\n    sshd_check.instance_name = op.get(flags.INSTANCE_NAME)\n    sshd_check.template = 'vm_serial_log::sshd'\n    sshd_check.negative_pattern = gce_const.BAD_SSHD_PATTERNS\n    sshd_check.positive_pattern = gce_const.GOOD_SSHD_PATTERNS\n    self.add_child(sshd_check)\n    # Check for SSH Guard blocks that might be preventing SSH access.\n    sshd_guard = gce_gs.VmSerialLogsCheck()\n    sshd_guard.project_id = op.get(flags.PROJECT_ID)\n    sshd_guard.zone = op.get(flags.ZONE)\n    sshd_guard.instance_name = op.get(flags.INSTANCE_NAME)\n    sshd_guard.template = 'vm_serial_log::sshguard'\n    sshd_guard.negative_pattern = gce_const.SSHGUARD_PATTERNS\n    self.add_child(sshd_guard)\n\n\nclass WindowsGuestOsChecks(runbook.CompositeStep):\n  \"\"\"Diagnoses common issues related to Windows Guest OS, focusing on boot-up processes and SSHD.\n\n  This composite diagnostic step evaluates the VM's metadata to ensure SSH is enabled for Windows,\n  checks serial logs for successful boot-up patterns, and involves a manual check on the Windows SSH\n  agent status. It aims to identify and help troubleshoot potential issues that could impact the\n  VM's accessibility via SSHD.\n  \"\"\"\n\n  def execute(self):\n    \"\"\"Analyzing Windows Guest OS boot-up and SSH agent status.\"\"\"\n    # Check Windows Metadata enabling ssh is set as this is required for windows\n    windows_ssh_md = gce_gs.VmMetadataCheck()\n    windows_ssh_md.project_id = op.get(flags.PROJECT_ID)\n    windows_ssh_md.zone = op.get(flags.ZONE)\n    windows_ssh_md.instance_name = op.get(flags.INSTANCE_NAME)\n    windows_ssh_md.template = 'vm_metadata::windows_ssh_md'\n    windows_ssh_md.metadata_key = 'enable-windows-ssh'\n    windows_ssh_md.expected_value = True\n    self.add_child(windows_ssh_md)\n\n    windows_good_bootup = gce_gs.VmSerialLogsCheck()\n    windows_good_bootup.project_id = op.get(flags.PROJECT_ID)\n    windows_good_bootup.zone = op.get(flags.ZONE)\n    windows_good_bootup.instance_name = op.get(flags.INSTANCE_NAME)\n    windows_good_bootup.template = 'vm_serial_log::windows_bootup'\n    windows_good_bootup.positive_pattern = gce_const.GOOD_WINDOWS_BOOT_LOGS_READY\n    self.add_child(windows_good_bootup)\n\n    check_windows_ssh_agent = gcp_gs.HumanTask()\n    check_windows_ssh_agent.project_id = op.get(flags.PROJECT_ID)\n    check_windows_ssh_agent.zone = op.get(flags.ZONE)\n    check_windows_ssh_agent.instance_name = op.get(flags.INSTANCE_NAME)\n    check_windows_ssh_agent.template = (\n        'gcpdiag.runbook.gce::vm_serial_log::windows_gce_ssh_agent')\n\n    vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID),\n                          zone=op.get(flags.ZONE),\n                          instance_name=op.get(flags.INSTANCE_NAME))\n    check_windows_ssh_agent.resource = vm\n    check_windows_ssh_agent.template = 'gcpdiag.runbook.gce::vm_serial_log::windows_gce_ssh_agent'\n    self.add_child(check_windows_ssh_agent)\n"
  },
  {
    "path": "gcpdiag/runbook/gce/ssh_test.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Generalize rule snapshot testing.\"\"\"\n\nimport unittest\nfrom unittest import mock\n\nfrom dateutil import parser\n\nfrom gcpdiag import config\nfrom gcpdiag.queries import apis_stub, crm, gce\nfrom gcpdiag.runbook import exceptions as runbook_exceptions\nfrom gcpdiag.runbook import gce as gce_runbook\nfrom gcpdiag.runbook import op, snapshot_test_base\nfrom gcpdiag.runbook.gce import flags, ssh\n\n\nclass MockMessage:\n  \"\"\"Mock messages for testing.\n\n  Simply returns the key to verify template usage.\n  \"\"\"\n\n  def get_msg(self, key, **kwargs):\n    return f'{key}: {kwargs}'\n\n\nclass SshStepTestBase(unittest.TestCase):\n  \"\"\"Base class for SSH runbook tests.\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    self.enterContext(\n        mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub))\n    self.mock_interface = mock.create_autospec(op.InteractionInterface,\n                                               instance=True)\n    self.mock_interface.rm = mock.Mock()\n    self.operator = op.Operator(self.mock_interface)\n    self.operator.run_id = 'test-run'\n    self.operator.messages = MockMessage()\n    self.params = {\n        flags.PROJECT_ID: 'gcpdiag-gce-faultyssh-runbook',\n        flags.ZONE: 'us-central1-a',\n        flags.INSTANCE_NAME: 'test-instance',\n        flags.START_TIME: parser.parse('2025-01-23 23:30:39.144959+00:00'),\n        flags.END_TIME: parser.parse('2025-01-23 13:30:39.144959+00:00')\n    }\n    self.operator.parameters = self.params\n    self.mock_instance = mock.Mock(spec=gce.Instance)\n    self.mock_instance.is_public_machine.return_value = False\n    self.mock_instance.is_windows_machine.return_value = False\n    self.mock_instance.get_metadata.return_value = ''\n    self.mock_gce_get_instance = self.enterContext(\n        mock.patch('gcpdiag.queries.gce.get_instance',\n                   return_value=self.mock_instance))\n    self.mock_ensure_instance_resolved = self.enterContext(\n        mock.patch('gcpdiag.runbook.gce.util.ensure_instance_resolved'))\n    self.mock_project = mock.Mock(spec=crm.Project)\n    self.mock_project.id = self.params[flags.PROJECT_ID]\n    self.mock_crm_get_project = self.enterContext(\n        mock.patch('gcpdiag.queries.crm.get_project',\n                   return_value=self.mock_project))\n\n\nclass SshTreeTest(SshStepTestBase):\n  \"\"\"Test Ssh DiagnosticTree methods.\"\"\"\n\n  def test_legacy_parameter_handler(self):\n    \"\"\"Verify deprecated parameter mapping.\"\"\"\n    params = {\n        flags.NAME: 'legacy-name',\n        flags.ID: 12345,\n        flags.LOCAL_USER: 'legacy-user',\n        flags.TUNNEL_THROUGH_IAP: True,\n        flags.CHECK_OS_LOGIN: True,\n        ssh.CHECK_SSH_IN_BROWSER: True,\n        flags.PROTOCOL_TYPE: 'tcp'\n    }\n    tree = ssh.Ssh()\n    tree.legacy_parameter_handler(params)\n\n    self.assertEqual(params[flags.INSTANCE_NAME], 'legacy-name')\n    self.assertEqual(params[flags.INSTANCE_ID], 12345)\n    self.assertEqual(params[flags.POSIX_USER], 'legacy-user')\n    self.assertEqual(params[flags.PROXY], ssh.IAP)\n    self.assertEqual(params[flags.ACCESS_METHOD], ssh.OSLOGIN)\n    self.assertEqual(params[flags.CLIENT], ssh.SSH_IN_BROWSER)\n    self.assertNotIn(flags.PROTOCOL_TYPE, params)\n\n  def test_build_tree(self):\n    \"\"\"Verify tree structure assembly.\"\"\"\n    self.operator.parameters[flags.PRINCIPAL] = 'user:test@example.com'\n    self.operator.parameters[ssh.CLIENT] = ssh.SSH_IN_BROWSER\n\n    tree = ssh.Ssh()\n    with op.operator_context(self.operator):\n      tree.build_tree()\n    self.assertIsInstance(tree.start, ssh.SshStart)\n\n    child_names = [c.__class__.__name__ for c in tree.start.steps]\n    self.assertIn('VmLifecycleState', child_names)\n    self.assertIn('GcpSshPermissions', child_names)\n    self.assertIn('GceFirewallAllowsSsh', child_names)\n    self.assertIn('SshInBrowserCheck', child_names)\n\n\nclass SshStartTest(SshStepTestBase):\n  \"\"\"Test SshStart.\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    self.mock_iam_get_project_policy = self.enterContext(\n        mock.patch('gcpdiag.queries.iam.get_project_policy'))\n\n  def test_ssh_start_runs(self):\n    step = ssh.SshStart()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_crm_get_project.assert_called_once()\n    self.mock_ensure_instance_resolved.assert_called_once()\n    self.mock_gce_get_instance.assert_called_once()\n\n  def test_ssh_start_principal_handling(self):\n    self.operator.parameters[flags.PRINCIPAL] = 'test@example.com'\n    self.mock_instance.is_public_machine.return_value = False\n    mock_policy = mock.Mock()\n    mock_policy.get_member_type.return_value = 'user'\n    self.mock_iam_get_project_policy.return_value = mock_policy\n    step = ssh.SshStart()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.assertEqual(self.operator.parameters[flags.PRINCIPAL],\n                     'user:test@example.com')\n    self.mock_interface.info.assert_any_call(\n        'GCP permissions related to SSH will be verified for:'\n        ' user:test@example.com',\n        step_type='INFO')\n\n  def test_ssh_start_iap_proxy(self):\n    self.operator.parameters[flags.PROXY] = ssh.IAP\n    step = ssh.SshStart()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.assertEqual(self.operator.parameters[flags.SRC_IP],\n                     gce_runbook.constants.IAP_FW_VIP)\n    self.mock_interface.info.assert_any_call(\n        'Source IP to be used for SSH connectivity test: '\n        '35.235.240.0/20',\n        step_type='INFO')\n\n  def test_ssh_start_instance_not_found(self):\n    self.mock_ensure_instance_resolved.side_effect = (\n        runbook_exceptions.FailedStepError('instance not found'))\n    step = ssh.SshStart()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_ssh_start_public_vm_no_proxy(self):\n    self.mock_instance.is_public_machine.return_value = True\n    step = ssh.SshStart()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.assertEqual(\n        self.operator.parameters[flags.SRC_IP],\n        gce_runbook.constants.UNSPECIFIED_ADDRESS,\n    )\n    self.mock_interface.info.assert_any_call(\n        'No proxy specified. Setting source IP range to: 0.0.0.0/0',\n        step_type='INFO',\n    )\n\n  def test_ssh_start_jumphost_proxy(self):\n    self.operator.parameters[flags.PROXY] = ssh.JUMPHOST\n    self.operator.parameters[flags.SRC_IP] = '10.0.0.1'\n    step = ssh.SshStart()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.info.assert_any_call(\n        'Source IP to be used for SSH connectivity test: 10.0.0.1',\n        step_type='INFO',\n    )\n\n  def test_ssh_start_oslogin_message(self):\n    self.operator.parameters[ssh.ACCESS_METHOD] = ssh.OSLOGIN\n    step = ssh.SshStart()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.info.assert_any_call(\n        'Access method to investigate: OS login'\n        ' https://cloud.google.com/compute/docs/oslogin',\n        step_type='INFO')\n\n  def test_ssh_start_ssh_key_in_metadata_message(self):\n    self.operator.parameters[ssh.ACCESS_METHOD] = ssh.SSH_KEY_IN_METADATA\n    step = ssh.SshStart()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.info.assert_any_call(\n        'Access method to investigate: SSH keys in metadata '\n        'https://cloud.google.com/compute/docs/instances/access-overview#ssh-access',\n        step_type='INFO')\n\n  def test_ssh_start_gcloud_client_message(self):\n    self.operator.parameters[ssh.CLIENT] = ssh.GCLOUD\n    step = ssh.SshStart()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.info.assert_any_call(\n        'Investigating components required to use gcloud compute ssh',\n        step_type='INFO',\n    )\n\n  def test_ssh_start_oslogin_2fa_message(self):\n    self.operator.parameters[ssh.MFA] = ssh.OSLOGIN_2FA\n    step = ssh.SshStart()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.info.assert_any_call(\n        'Multifactor authentication to investigate: OS Login 2FA '\n        'https://cloud.google.com/compute/docs/oslogin/set-up-oslogin#byb',\n        step_type='INFO',\n    )\n\n\nclass VmGuestOsTypeTest(SshStepTestBase):\n  \"\"\"Test VmGuestOsType.\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    self.mock_linux_check = self.enterContext(\n        mock.patch('gcpdiag.runbook.gce.ssh.LinuxGuestOsChecks', autospec=True))\n    self.mock_windows_check = self.enterContext(\n        mock.patch('gcpdiag.runbook.gce.ssh.WindowsGuestOsChecks',\n                   autospec=True))\n    self.mock_add_child = self.enterContext(\n        mock.patch.object(ssh.VmGuestOsType, 'add_child'))\n\n  def test_linux_os(self):\n    self.mock_instance.is_windows_machine.return_value = False\n    step = ssh.VmGuestOsType()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_add_child.assert_called_once()\n    self.assertEqual(\n        self.mock_add_child.call_args[0][0].__class__.__name__,\n        'LinuxGuestOsChecks',\n    )\n\n  def test_windows_os(self):\n    self.mock_instance.is_windows_machine.return_value = True\n    step = ssh.VmGuestOsType()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_add_child.assert_called_once()\n    self.assertEqual(\n        self.mock_add_child.call_args[0][0].__class__.__name__,\n        'WindowsGuestOsChecks',\n    )\n\n  def test_instance_not_found(self):\n    self.mock_ensure_instance_resolved.side_effect = (\n        runbook_exceptions.FailedStepError('instance not found'))\n    step = ssh.VmGuestOsType()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n    self.mock_add_child.assert_not_called()\n\n\nclass SshEndTest(SshStepTestBase):\n  \"\"\"Test SshEnd.\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    self.mock_op_prompt = self.enterContext(\n        mock.patch('gcpdiag.runbook.op.prompt'))\n    self.enterContext(mock.patch('gcpdiag.config.get',\n                                 return_value=True))  # INTERACTIVE_MODE\n\n  def test_ssh_end_no_interactive(self):\n    self.enterContext(mock.patch('gcpdiag.config.get', return_value=False))\n    self.mock_op_prompt.return_value = op.NO\n    step = ssh.SshEnd()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_op_prompt.assert_called_once()\n    self.mock_interface.info.assert_called_once_with(message=op.END_MESSAGE,\n                                                     step_type='INFO')\n\n  def test_ssh_end_yes_interactive(self):\n    self.mock_op_prompt.return_value = op.YES\n    step = ssh.SshEnd()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.info.assert_not_called()\n\n\nclass SshInBrowserCheckTest(SshStepTestBase):\n  \"\"\"Test SshInBrowserCheck.\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    self.mock_org_policy_check = self.enterContext(\n        mock.patch('gcpdiag.runbook.crm.generalized_steps.OrgPolicyCheck',\n                   autospec=True))\n    self.mock_add_child = self.enterContext(\n        mock.patch.object(ssh.SshInBrowserCheck, 'add_child'))\n\n  def test_ssh_in_browser_check(self):\n    step = ssh.SshInBrowserCheck()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_add_child.assert_called_once()\n    self.assertEqual(self.mock_add_child.call_args[0][0].__class__.__name__,\n                     'OrgPolicyCheck')\n    self.assertEqual(self.mock_add_child.call_args[0][0].constraint,\n                     'constraints/compute.disableSshInBrowser')\n\n\nclass GcpSshPermissionsTest(SshStepTestBase):\n  \"\"\"Test GcpSshPermissions.\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    self.mock_iam_policy_check = self.enterContext(\n        mock.patch('gcpdiag.runbook.iam.generalized_steps.IamPolicyCheck'))\n    self.mock_iam_policy_check.side_effect = mock.MagicMock\n    self.mock_os_login_status_check = self.enterContext(\n        mock.patch('gcpdiag.runbook.gce.ssh.OsLoginStatusCheck', autospec=True))\n    self.mock_add_child = self.enterContext(\n        mock.patch.object(ssh.GcpSshPermissions, 'add_child'))\n\n  def test_base_permissions_checked(self):\n    step = ssh.GcpSshPermissions()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.assertEqual(self.mock_add_child.call_args_list[0][0][0].template,\n                     'gcpdiag.runbook.gce::permissions::instances_get')\n    self.assertEqual(\n        self.mock_add_child.call_args_list[1][0][0].__class__.__name__,\n        'OsLoginStatusCheck')\n\n  def test_iap_permissions_checked(self):\n    self.operator.parameters[flags.PROXY] = ssh.IAP\n    step = ssh.GcpSshPermissions()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.assertEqual(self.mock_add_child.call_args_list[-1][0][0].template,\n                     'gcpdiag.runbook.gce::permissions::iap_role')\n\n  def test_permissions_ssh_in_browser(self):\n    \"\"\"Cover line 353: Console view permission for browser client.\"\"\"\n    self.operator.parameters[ssh.CLIENT] = ssh.SSH_IN_BROWSER\n    with op.operator_context(self.operator):\n      step = ssh.GcpSshPermissions()\n      self.operator.set_step(step)\n      step.execute()\n    self.assertEqual(\n        self.mock_add_child.call_args_list[0][0][0].template,\n        'gcpdiag.runbook.gce::permissions::console_view_permission')\n\n\nclass OsLoginStatusCheckTest(SshStepTestBase):\n  \"\"\"Test OsLoginStatusCheck.\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    self.mock_vm_metadata_check = self.enterContext(\n        mock.patch('gcpdiag.runbook.gce.generalized_steps.VmMetadataCheck'))\n    self.mock_vm_metadata_check.side_effect = mock.MagicMock\n\n    self.mock_iam_policy_check = self.enterContext(\n        mock.patch('gcpdiag.runbook.iam.generalized_steps.IamPolicyCheck'))\n    self.mock_iam_policy_check.side_effect = mock.MagicMock\n\n    self.mock_posix_user_check = self.enterContext(\n        mock.patch('gcpdiag.runbook.gce.ssh.PosixUserHasValidSshKeyCheck',\n                   autospec=True))\n    self.mock_duplicate_keys_check = self.enterContext(\n        mock.patch('gcpdiag.runbook.gce.ssh.VmDuplicateSshKeysCheck',\n                   autospec=True))\n    self.mock_add_child = self.enterContext(\n        mock.patch.object(ssh.OsLoginStatusCheck, 'add_child'))\n\n  def test_os_login_path(self):\n    self.operator.parameters[ssh.ACCESS_METHOD] = ssh.OSLOGIN\n    step = ssh.OsLoginStatusCheck()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n\n    self.assertEqual(self.mock_add_child.call_count, 3)\n    templates = [\n        getattr(call[0][0], 'template', '')\n        for call in self.mock_add_child.call_args_list\n    ]\n    self.assertIn('vm_metadata::os_login_enabled', templates)\n    self.assertIn('gcpdiag.runbook.gce::permissions::has_os_login', templates)\n    self.assertIn('gcpdiag.runbook.gce::permissions::sa_user_role', templates)\n\n  def test_ssh_key_in_metadata_path(self):\n    \"\"\"Verify metadata based SSH path.\"\"\"\n    self.operator.parameters[ssh.ACCESS_METHOD] = ssh.SSH_KEY_IN_METADATA\n    step = ssh.OsLoginStatusCheck()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.assertEqual(self.mock_add_child.call_count, 4)\n    self.assertEqual(self.mock_add_child.call_args_list[0][0][0].template,\n                     'gcpdiag.runbook.gce::permissions::can_set_metadata')\n    self.assertEqual(self.mock_add_child.call_args_list[1][0][0].template,\n                     'vm_metadata::no_os_login')\n    self.assertEqual(\n        self.mock_add_child.call_args_list[2][0][0].__class__.__name__,\n        'PosixUserHasValidSshKeyCheck')\n    self.assertEqual(\n        self.mock_add_child.call_args_list[3][0][0].__class__.__name__,\n        'VmDuplicateSshKeysCheck')\n\n\nclass PosixUserHasValidSshKeyCheckTest(SshStepTestBase):\n  \"\"\"Test PosixUserHasValidSshKeyCheck.\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    self.mock_user_has_valid_ssh_key = self.enterContext(\n        mock.patch('gcpdiag.runbook.gce.util.user_has_valid_ssh_key'))\n    self.operator.parameters[flags.POSIX_USER] = 'testuser'\n\n  def test_valid_key_present(self):\n    self.mock_instance.get_metadata.return_value = (\n        'testuser:ssh-rsa AAA... testuser@host')\n    self.mock_user_has_valid_ssh_key.return_value = True\n    step = ssh.PosixUserHasValidSshKeyCheck()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n\n  def test_no_valid_key(self):\n    self.mock_instance.get_metadata.return_value = (\n        'otheruser:ssh-rsa BBB... otheruser@host')\n    self.mock_user_has_valid_ssh_key.return_value = False\n    step = ssh.PosixUserHasValidSshKeyCheck()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n\nclass VmDuplicateSshKeysCheckTest(SshStepTestBase):\n  \"\"\"Test VmDuplicateSshKeysCheck.\"\"\"\n\n  def test_no_ssh_keys(self):\n    self.mock_instance.get_metadata.return_value = ''\n    step = ssh.VmDuplicateSshKeysCheck()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n\n  def test_duplicate_keys(self):\n    ssh_keys = ('user1:ssh-rsa SAMEKEY... user1@host\\n'\n                'user2:ssh-rsa BBB... user2@host\\n'\n                'user3:ssh-rsa SAMEKEY... user3@host')\n    self.mock_instance.get_metadata.return_value = ssh_keys\n    step = ssh.VmDuplicateSshKeysCheck()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n  def test_no_duplicate_keys(self):\n    ssh_keys = ('user1:ssh-rsa KEY1... user1@host\\n'\n                'ssh-rsa KEY2... user2@host\\n\\n'\n                'user3:ssh-rsa KEY3... user3@host')\n    self.mock_instance.get_metadata.return_value = ssh_keys\n    step = ssh.VmDuplicateSshKeysCheck()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n\n  def test_duplicate_keys_detection(self):\n    \"\"\"Cover duplicate blobs even with different prefixes/spacing.\"\"\"\n    ssh_keys = (\n        'user1:ssh-rsa AAA... user1@host\\n'\n        'ssh-rsa AAA... user2@host\\n'  # Duplicate blob\n        '  \\n'  # Empty line\n        'user3: ssh-rsa BBB... user3@host\\n'  # Space after colon\n    )\n    self.mock_instance.get_metadata.return_value = ssh_keys\n    with op.operator_context(self.operator):\n      step = ssh.VmDuplicateSshKeysCheck()\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n    self.assertIn('AAA...',\n                  self.mock_interface.add_failed.call_args[1]['reason'])\n\n\nclass GceFirewallAllowsSshTest(SshStepTestBase):\n  \"\"\"Test GceFirewallAllowsSsh.\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    self.mock_vpc_connectivity_check = self.enterContext(\n        mock.patch(\n            'gcpdiag.runbook.gce.generalized_steps.GceVpcConnectivityCheck',\n            autospec=True))\n    self.mock_add_child = self.enterContext(\n        mock.patch.object(ssh.GceFirewallAllowsSsh, 'add_child'))\n\n  def test_iap_firewall_check(self):\n    self.operator.parameters[flags.PROXY] = ssh.IAP\n    self.operator.parameters[flags.SRC_IP] = gce_runbook.constants.IAP_FW_VIP\n    step = ssh.GceFirewallAllowsSsh()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_add_child.assert_called_once()\n    self.assertEqual(\n        self.mock_add_child.call_args[0][0].template,\n        'vpc_connectivity::tti_ingress',\n    )\n\n  def test_public_vm_firewall_check(self):\n    self.mock_instance.is_public_machine.return_value = True\n    self.operator.parameters[flags.SRC_IP] = (\n        gce_runbook.constants.UNSPECIFIED_ADDRESS)\n    step = ssh.GceFirewallAllowsSsh()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_add_child.assert_called_once()\n    self.assertEqual(\n        self.mock_add_child.call_args[0][0].template,\n        'vpc_connectivity::default_ingress',\n    )\n\n  def test_custom_ip_firewall_check(self):\n    \"\"\"Verify custom source IP branch.\"\"\"\n    self.operator.parameters[flags.SRC_IP] = '10.0.0.1'\n    self.operator.parameters[flags.PROXY] = None\n    step = ssh.GceFirewallAllowsSsh()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_add_child.assert_called_once()\n    self.assertEqual(self.mock_add_child.call_args[0][0].template,\n                     'vpc_connectivity::default_ingress')\n\n\nclass VmPerformanceChecksTest(SshStepTestBase):\n  \"\"\"Test VmPerformanceChecks.\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    self.mock_hum = self.enterContext(\n        mock.patch(\n            'gcpdiag.runbook.gce.generalized_steps.HighVmMemoryUtilization'))\n    self.mock_hud = self.enterContext(\n        mock.patch(\n            'gcpdiag.runbook.gce.generalized_steps.HighVmDiskUtilization'))\n    self.mock_huc = self.enterContext(\n        mock.patch(\n            'gcpdiag.runbook.gce.generalized_steps.HighVmCpuUtilization'))\n    self.mock_add_child = self.enterContext(\n        mock.patch.object(ssh.VmPerformanceChecks, 'add_child'))\n\n  def test_performance_checks_added(self):\n    mem = self.mock_hum.return_value\n    disk = self.mock_hud.return_value\n    cpu = self.mock_huc.return_value\n    step = ssh.VmPerformanceChecks()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_add_child.assert_has_calls(\n        [mock.call(child=mem),\n         mock.call(child=disk),\n         mock.call(child=cpu)])\n\n\nclass LinuxGuestOsChecksTest(SshStepTestBase):\n  \"\"\"Test LinuxGuestOsChecks.\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    self.mock_vm_serial_logs_check = self.enterContext(\n        mock.patch('gcpdiag.runbook.gce.generalized_steps.VmSerialLogsCheck'))\n    self.mock_vm_serial_logs_check.side_effect = mock.MagicMock\n    self.mock_add_child = self.enterContext(\n        mock.patch.object(ssh.LinuxGuestOsChecks, 'add_child'))\n\n  def test_linux_checks_added(self):\n    self.mock_vm_serial_logs_check.side_effect = [\n        mock.MagicMock(), mock.MagicMock(),\n        mock.MagicMock()\n    ]\n    step = ssh.LinuxGuestOsChecks()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.assertEqual(self.mock_add_child.call_count, 3)\n    self.assertEqual(self.mock_add_child.call_args_list[0].args[0].template,\n                     'vm_serial_log::kernel_panic')\n    self.assertEqual(self.mock_add_child.call_args_list[1].args[0].template,\n                     'vm_serial_log::sshd')\n    self.assertEqual(self.mock_add_child.call_args_list[2].args[0].template,\n                     'vm_serial_log::sshguard')\n\n\nclass WindowsGuestOsChecksTest(SshStepTestBase):\n  \"\"\"Test WindowsGuestOsChecks.\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    self.mock_vm_metadata_check = self.enterContext(\n        mock.patch('gcpdiag.runbook.gce.generalized_steps.VmMetadataCheck',\n                   autospec=True))\n    self.mock_vm_serial_logs_check = self.enterContext(\n        mock.patch('gcpdiag.runbook.gce.generalized_steps.VmSerialLogsCheck',\n                   autospec=True))\n    self.mock_human_task = self.enterContext(\n        mock.patch('gcpdiag.runbook.gcp.generalized_steps.HumanTask',\n                   autospec=True))\n    self.mock_add_child = self.enterContext(\n        mock.patch.object(ssh.WindowsGuestOsChecks, 'add_child'))\n\n  def test_windows_checks_added(self):\n    step = ssh.WindowsGuestOsChecks()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.assertEqual(self.mock_add_child.call_count, 3)\n    self.assertEqual(self.mock_add_child.call_args_list[0].args[0].template,\n                     'vm_metadata::windows_ssh_md')\n    self.assertEqual(self.mock_add_child.call_args_list[1].args[0].template,\n                     'vm_serial_log::windows_bootup')\n    self.assertEqual(\n        self.mock_add_child.call_args_list[2].args[0].__class__.__name__,\n        'HumanTask')\n\n  def test_windows_human_task_added(self):\n    self.mock_add_child = self.enterContext(\n        mock.patch.object(ssh.WindowsGuestOsChecks, 'add_child'))\n    with op.operator_context(self.operator):\n      step = ssh.WindowsGuestOsChecks()\n      self.operator.set_step(step)\n      step.execute()\n    self.assertEqual(\n        self.mock_add_child.call_args_list[2].args[0].__class__.__name__,\n        'HumanTask')\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = gce_runbook\n  runbook_name = 'gce/ssh'\n  config.init({'auto': True, 'interface': 'cli'})\n\n  rule_parameters = [{\n      'project_id': 'gcpdiag-gce-faultyssh-runbook',\n      'instance_name': 'faulty-linux-ssh',\n      'zone': 'europe-west2-a',\n      'principal': 'user:cannotssh@example.com',\n      'proxy': 'iap',\n      'access_method': 'oslogin',\n      'start_time': '2025-01-23 23:30:39.144959+00:00',\n      'end_time': '2025-01-23 13:30:39.144959+00:00'\n  }, {\n      'project_id':\n          'gcpdiag-gce-faultyssh-runbook',\n      'instance_name':\n          'valid-linux-ssh',\n      'zone':\n          'europe-west2-a',\n      'principal':\n          'serviceAccount:canssh@gcpdiag-gce-faultyssh-runbook.iam.gserviceaccount.com',\n      'proxy':\n          'iap',\n      'access_method':\n          'oslogin',\n      'start_time':\n          '2025-01-23 23:30:39.144959+00:00',\n      'end_time':\n          '2025-01-23 13:30:39.144959+00:00'\n  }, {\n      'project_id': 'gcpdiag-gce-faultyssh-runbook',\n      'instance_name': 'faulty-windows-ssh',\n      'zone': 'europe-west2-a',\n      'principal': 'user:cannot@example.com',\n      'src_ip': '0.0.0.0',\n      'proxy': 'iap',\n      'access_method': 'oslogin',\n      'posix_user': 'no_user',\n      'start_time': '2025-01-23 23:30:39.144959+00:00',\n      'end_time': '2025-01-23 13:30:39.144959+00:00'\n  }]\n"
  },
  {
    "path": "gcpdiag/runbook/gce/templates/generics.jinja",
    "content": "{% block gce_serial_logs_check_failure_reason %}\nDetected anomalies in serial logs for GCE Instance indicative of issues affecting the guest or application functionality.\n{% endblock gce_serial_logs_check_failure_reason %}\n\n{% block gce_serial_logs_check_failure_remediation %}\nConsult the following guides to connect to the VM and diagnose the issue:\n\nLinux:\n\n<https://cloud.google.com/compute/docs/connect/standard-ssh>\n\nWindows:\n\n<https://cloud.google.com/compute/docs/instances/connecting-to-windows>\n\n<https://cloud.google.com/compute/docs/instances/connecting-to-sac>\n\n<https://cloud.google.com/compute/docs/connect/windows-ssh>\n\n<https://cloud.google.com/compute/docs/instances/windows/connecting-powershell>\n{% endblock gce_serial_logs_check_failure_remediation %}\n\n{% block gce_serial_logs_check_success_reason %}\nSerial logs for GCE Instance confirm the VM is operating within normal parameters, with no anomalies detected.\n{% endblock gce_serial_logs_check_success_reason %}\n\n{% block gce_serial_logs_check_uncertain_reason %}\nUnable to find sufficient serial log data for GCE Instance for a conclusive analysis. This may limit the ability to detect specific issues.\n{% endblock gce_serial_logs_check_uncertain_reason %}\n\n{% block gce_serial_logs_check_uncertain_remediation %}\nEnable more detailed logging if it is disabled, or start the VM if it is shut down.\nReview the following troubleshooting documentation for guidance on common issues with serial logs:\n\n<https://cloud.google.com/compute/docs/troubleshooting/viewing-serial-port-output>\n\n<https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-using-serial-console>\n{% endblock gce_serial_logs_check_uncertain_remediation %}\n\n{% block gce_serial_logs_check_skipped_reason %}\nSkipped serial log analysis for GCE Instance due to the absence of logs. This may occur if the VM has not generated any logs, logging is disabled, or the VM is shut down.\n{% endblock gce_serial_logs_check_skipped_reason%}\n"
  },
  {
    "path": "gcpdiag/runbook/gce/templates/instance_property.jinja",
    "content": "{% block default_success_reason %}\nInstance {{instance_name}} property '{property_path}' with value '{actual_value}' meets condition: {operator} '{expected_value}'.\n{% endblock %}\n\n{% block default_failure_reason %}\nInstance {instance_name} property '{property_path}' with value '{actual_value}' does not meet condition: {operator} '{expected_value}'.\n{% endblock %}\n\n{% block default_failure_remediation %}\nEnsure that property '{property_path}' for instance {instance_name} is configured to meet the condition: {operator} '{expected_value}'.\n{% endblock %}\n"
  },
  {
    "path": "gcpdiag/runbook/gce/templates/mig_autoscaling.jinja",
    "content": "{% block policy_check_skipped_reason %}\nMIG could not be determined or found.\n{% endblock %}\n\n{% block policy_check_success_reason %}\nMIG {mig_name} property '{property_path}' with value '{actual_value}' meets condition: {operator} '{expected_value}'.\n{% endblock %}\n\n{% block policy_check_failure_reason %}\nMIG {mig_name} property '{property_path}' with value '{actual_value}' does not meet condition: {operator} '{expected_value}'.\n{% endblock %}\n\n{% block policy_check_failure_remediation %}\nReview the autoscaling policy for MIG {mig_name} and ensure it meets the required configuration.\nSee: <https://cloud.google.com/compute/docs/reference/rest/v1/instanceGroupManagers>\n{% endblock %}\n"
  },
  {
    "path": "gcpdiag/runbook/gce/templates/permissions.jinja",
    "content": "{% block instances_get_step_name %}\nVerify that the {principal} has \"compute.instance.get\" permission.\n{% endblock instances_get_step_name %}\n\n{% block instances_get_failure_reason %}\n{principal} does not have the permissions needed to manage instances.\nThe following permissions are required: {permissions_or_roles}.\n{% endblock instances_get_failure_reason %}\n\n{% block instances_get_failure_remediation %}\nEnsure {principal} is granted a role encompassing the necessary permissions:\n\n- Permissions needed: {missing_permissions_or_roles}\n\nFor guidance on assigning instance admin roles, consult:\n<https://cloud.google.com/compute/docs/access/iam#connectinginstanceadmin>\n{% endblock instances_get_failure_remediation %}\n\n{% block instances_get_success_reason %}\n{principal} possesses the appropriate {permissions_or_roles} to fetch instance details.\n{% endblock instances_get_success_reason %}\n\n{% block has_os_login_step_name %}\nVerify whether {principal} has at least one valid OS login role.\n{% endblock has_os_login_step_name %}\n\n{% block has_os_login_success_reason %}\n\"{principal}\" possesses at least one of the required OS Login roles:\n{present_permissions_or_roles}.\n{% endblock has_os_login_success_reason %}\n\n{% block has_os_login_failure_reason %}\n\"{principal}\" is missing at least one of the required OS Login roles:\n{missing_permissions_or_roles}.\n{% endblock has_os_login_failure_reason %}\n\n{% block has_os_login_failure_remediation %}\nAssign the principal one of the roles required for OS Login privileges.\nConsult the following resources for more information:\n\n<https://cloud.google.com/compute/docs/oslogin/set-up-oslogin#configure_users>\n\n<https://cloud.google.com/iam/docs/manage-access-service-accounts#grant-single-role>\n{% endblock has_os_login_failure_remediation %}\n\n{% block sa_user_role_step_name %}\nVerify that the {principal} has \"roles/iam.serviceAccountUser\" role.\n{% endblock sa_user_role_step_name %}\n\n{% block sa_user_role_failure_reason %}\n\"{principal}\" lacks the \"{missing_permissions_or_roles}\" role or a custom role with the necessary permissions to impersonate the attached service account.\n{% endblock sa_user_role_failure_reason %}\n\n{% block sa_user_role_failure_remediation %}\nAssign the \"roles/iam.serviceAccountUser\" role to \"{principal}\".\nConsult the following guidelines:\n\n<https://cloud.google.com/compute/docs/oslogin/set-up-oslogin#configure_users>\n\n<https://cloud.google.com/iam/docs/manage-access-service-accounts#grant-single-role>\n{% endblock sa_user_role_failure_remediation %}\n\n{% block sa_user_role_success_reason %}\n\"{principal}\" has the \"{present_permissions_or_roles}\"\nrequired to impersonate the attached service account.\n{% endblock sa_user_role_success_reason %}\n\n{% block iap_role_step_name %}\nVerify that the {principal} has \"roles/iap.tunnelResourceAccessor\" role.\n{% endblock iap_role_step_name %}\n\n{% block iap_role_failure_reason %}\n{principal} does not have the \"{missing_permissions_or_roles}\" role necessary to Tunnel through IAP for access.\n{% endblock iap_role_failure_reason %}\n\n{% block iap_role_failure_remediation %}\nEnsure that \"{principal}\" is assigned the \"roles/iap.tunnelResourceAccessor\" role to enable the required access.\n\nFor detailed guidance, refer to the following resources:\n\n- [Setting up OS Login](https://cloud.google.com/compute/docs/oslogin/set-up-oslogin#configure_users)\n- [Managing access to service\naccounts](https://cloud.google.com/iam/docs/manage-access-service-accounts#grant-single-role)\n{% endblock iap_role_failure_remediation %}\n\n{% block iap_role_success_reason %}\n\"{principal}\" has the requisite \"{present_permissions_or_roles}\" role to tunnel through IAP.\n{% endblock iap_role_success_reason %}\n\n{% block console_view_permission_step_name %}\nVerify whether the {principal} has the \"compute.projects.get\" permission required to view the console.\n{% endblock console_view_permission_step_name %}\n\n{% block console_view_permission_failure_reason %}\nThe \"compute.projects.get\" permission is required to access GCE Instances via the Google Cloud console, including SSH-in-browser functionality.\n{% endblock console_view_permission_failure_reason %}\n\n{% block console_view_permission_failure_remediation %}\nRefer to the [permissions guide](https://cloud.google.com/compute/docs/access/iam#console_permission)\nfor detailed steps on granting the necessary permissions to enable access to Compute Engine resources.\n{% endblock console_view_permission_failure_remediation %}\n\n{% block console_view_permission_success_reason %}\n{principal} has the necessary {present_permissions_or_roles}, including the \"compute.projects.get\"\npermission, required to access and use the Google Cloud.\n{% endblock console_view_permission_success_reason %}\n\n{% block can_set_metadata_step_name %}\nVerify that the {principal} has permission to set instance metadata or common project metadata.\n{% endblock can_set_metadata_step_name %}\n\n{% block can_set_metadata_success_reason %}\n{principal} is authorized to update instance or project metadata, including SSH keys.\nThis enables gcloud and cloud console to update temporary SSH access to the VM or configure\npersonal SSH keys if needed.\n{% endblock can_set_metadata_success_reason %}\n\n{% block can_set_metadata_failure_reason %}\n{principal} lacks the necessary permissions to modify metadata, essential for managing SSH keys. Missing permissions include one of the following: {{\" or \".join(metadata_permissions)}}.\n{% endblock can_set_metadata_failure_reason %}\n\n{% block can_set_metadata_failure_remediation %}\nGrant the required permissions for managing SSH keys within the VM's metadata by following these guides:\n\n- For project-level SSH key management, assign roles that include the\n'compute.projects.setCommonInstanceMetadata' permission. Consult the following documentation for details:\n<https://cloud.google.com/compute/docs/connect/add-ssh-keys#expandable-2>\n- For instance-level SSH key management, ensure roles include the 'compute.instances.setMetadata'\npermission. Consult the following documentation for step-by-step instructions:\n<https://cloud.google.com/compute/docs/connect/add-ssh-keys#expandable-3>\n\nGranting these permissions enables proper management of SSH keys, which is necessary for\nSSH access to the VM, especially when using gcloud or the Cloud Console.\n{% endblock can_set_metadata_failure_remediation %}\n"
  },
  {
    "path": "gcpdiag/runbook/gce/templates/vm_attributes.jinja",
    "content": "{% block service_account_exists_success_reason %}\nThe Ops Agent on instance {full_resource_path} is configured with service account {sa} for exporting logs and metrics.\n{% endblock service_account_exists_success_reason %}\n\n{% block service_account_exists_failure_reason %}\nThe Ops Agent on instance {full_resource_path} is not configured with a service account for exporting logs and metrics.\n{% endblock service_account_exists_failure_reason %}\n\n{% block service_account_exists_failure_remediation %}\nAttach an active service account to the GCE Instance {full_resource_path}.\nConsult the following documentation for guidance:\n\n- Attaching or changing a service account:\n  <https://cloud.google.com/compute/docs/instances/change-service-account#changeserviceaccountandscopes>\n- Authorizing the Ops Agent:\n  <https://cloud.google.com/stackdriver/docs/solutions/agents/ops-agent/authorization#authorize_with_an_attached_service_account>\n{% endblock service_account_exists_failure_remediation %}\n\n{% block service_account_exists_step_name %}\nVerify Service Account exists\n{% endblock service_account_exists_step_name %}\n\n{% block access_scope_step_name %}\nVerify GCE Instance has sufficient access scope\n{% endblock access_scope_step_name %}\n\n{% block access_scope_success_reason %}\nGCE instance {full_resource_path} has at least one of the required scope:\n{present_access_scopes}\n{% endblock access_scope_success_reason %}\n\n{% block access_scope_failure_reason %}\nGCE Instance {full_resource_path} doesn't have any of the required access scopes:\n{required_access_scope}\n{% endblock access_scope_failure_reason %}\n\n{% block access_scope_failure_remediation %}\nAccess scopes are the legacy method of specifying authorization for your VM instance.\nThey define the default OAuth scopes used in requests from the gcloud CLI or the client libraries.\nAccess scopes don't apply for calls made using gRPC.\n\nUpdate `{full_resource_path}` to enable at least one of the following access scopes:\n{required_access_scope}\n\nConsult the following documentation for guidance on changing the service account and scopes:\n<https://cloud.google.com/compute/docs/instances/change-service-account#changeserviceaccountandscopes>\n{% endblock access_scope_failure_remediation %}\n\n{% block running_step_name %}\nVerify GCE Instance is in a \"RUNNING\" state.\n{% endblock running_step_name %}\n\n{% block running_success_reason %}\nThe GCE Instance {full_resource_path} is in {status} state.\n{% endblock running_success_reason %}\n\n{% block running_skipped_reason %}\nCould not validate VM lifecycle for GCE Instance {full_resource_path}.\n{% endblock running_skipped_reason %}\n\n{% block running_failure_reason %}\nThe GCE Instance {full_resource_path} is in {status} state.\n{% endblock running_failure_reason %}\n\n{% block running_failure_remediation %}\nRestart VM {full_resource_path} and ensure VM lifecycle transitions from {status} to RUNNING.\n\nConsult the following documentation:\n\n- Restarting a compute instance:\n  <https://cloud.google.com/compute/docs/instances/stop-start-instance#restart-vm>\n- Troubleshooting VM startup issues:\n  <https://cloud.google.com/compute/docs/troubleshooting/vm-startup#identify_the_reason_why_the_boot_disk_isnt_booting>\n{% endblock running_failure_remediation %}\n\n{% block terminated_vm_running_step_name %}\nVerify that the terminated VM is currently running\n{% endblock terminated_vm_running_step_name %}\n\n{% block terminated_vm_running_success_reason %}\nThe GCE Instance {full_resource_path} is currently running.\n{% endblock terminated_vm_running_success_reason %}\n\n{% block terminated_vm_running_failure_reason %}\nThe GCE Instance {full_resource_path} is in the {status} state, not RUNNING. Start the instance if required.\n{% endblock terminated_vm_running_failure_reason %}\n\n{% block terminated_vm_running_failure_remediation %}\nStart the GCE Instance {full_resource_path} to transition it from the {status} state to the RUNNING state.\nConsult the following documentation for assistance:\n\n- Restarting a compute instance:\n  <https://cloud.google.com/compute/docs/instances/stop-start-instance#restart-vm>\n- Troubleshooting VM startup issues:\n  <https://cloud.google.com/compute/docs/troubleshooting/vm-startup#identify_the_reason_why_the_boot_disk_isnt_booting>\n{% endblock terminated_vm_running_failure_remediation %}\n"
  },
  {
    "path": "gcpdiag/runbook/gce/templates/vm_creation.jinja",
    "content": "{% block logs_failure_reason %}\n{error_message}\n{% endblock logs_failure_reason %}\n\n{% block logs_failure_remediation %}\nThe VM creation process failed because the VM `{instance_name}` already exists in zone `{zone}` within project `{project_id}`. Delete the existing VM or choose a different name for the new VM.\n{% endblock logs_failure_remediation %}\n\n{% block logs_failure_reason_a1 %}\n{error_message}\n{% endblock logs_failure_reason_a1 %}\n\n{% block logs_failure_remediation_a1 %}\nThe VM creation process failed because the {metric_name} quota limit was exceeded.\nThe current {limit_name} limit is {limit}.\n\nIncrease the relevant quota by following the guidance provided in the documentation:\n<https://cloud.google.com/docs/quotas/view-manage#requesting_higher_quota>\n\nAlternatively, use these steps:\n\n- Navigate to the 'Quotas & System Limits' page in the Google Cloud Console: <https://console.cloud.google.com/iam-admin/quotas>\n- Locate the quota metric ({metric_name}) and region associated with the failure.\n- Request a quota increase for the identified metric and region.\n{% endblock logs_failure_remediation_a1 %}\n\n{% block logs_failure_reason_a2 %}\n{error_message}\n{% endblock logs_failure_reason_a2 %}\n\n{% block logs_failure_remediation_a2 %}\nGrant the user or service account attempting the VM creation the required permissions to create a VM instance.\nConsult the following guide for details on required permissions:\n<https://cloud.google.com/compute/docs/instances/create-start-instance#expandable-1>\n{% endblock logs_failure_remediation_a2 %}\n"
  },
  {
    "path": "gcpdiag/runbook/gce/templates/vm_metadata.jinja",
    "content": "{% block default_failure_reason %}\nGCE Instance metadata `{metadata_key}` doesn't have the expected value: {expected_value}\nof type {expected_value_type}\n{% endblock default_failure_reason %}\n\n{% block default_failure_remediation %}\nUpdate the metadata `{metadata_key}` to have the expected value {expected_value}\nFollow guide [1] one to update the a metadata value.\n[1] <https://cloud.google.com/compute/docs/metadata/setting-custom-metadata#gcloud>\n{% endblock default_failure_remediation %}\n\n{% block default_success_reason %}\nGCE Instance metadata `{metadata_key}` has the expected value: {expected_value}\nof type {expected_value_type}\n{% endblock default_success_reason %}\n\n{% block windows_ssh_md_failure_reason %}\nSSH metadata `enable-windows-ssh` is not configured for this Windows VM,\npreventing SSH access.\n{% endblock windows_ssh_md_failure_reason %}\n\n{% block windows_ssh_md_failure_remediation %}\nTo enable SSH access for your Windows VM, you must configure SSH metadata settings appropriately.\nPlease consult our guide on enabling SSH for Windows instances for step-by-step instructions:\n<https://cloud.google.com/compute/docs/connect/windows-ssh#enable>\n{% endblock windows_ssh_md_failure_remediation %}\n\n{% block windows_ssh_md_success_reason %}\nSSH metadata `enable-windows-ssh` is correctly set for this Windows VM,\nindicating readiness for SSH connections if other factors permit.\n{% endblock windows_ssh_md_success_reason %}\n\n{% block no_os_login_step_name %}\nVerify if OS Login is not activated for the VM\n{% endblock no_os_login_step_name %}\n\n{% block no_os_login_failure_reason %}\nOS Login is currently enabled on this VM, conflicting with the intended metadata-based SSH Key\nconfiguration.\n{% endblock no_os_login_failure_reason %}\n\n{% block no_os_login_failure_remediation %}\nActivating OS Login alters the VM's SSH access settings, removing the `authorized_keys` file\nand ceasing to accept SSH keys stored in project or instance metadata.\nTo maintain the ability to use metadata-based SSH keys, you must deactivate OS Login by\nsetting `enable-oslogin` to `False` in your VM's metadata. Decide between utilizing OS Login\nor metadata-based SSH keys based on your access requirements.\nFor more information on managing OS Login settings,\nvisit: <https://cloud.google.com/compute/docs/oslogin/set-up-oslogin#enable_os_login>\n\nNote: The activation of OS Login disables google managed metadata-based SSH key authentication.\nHowever, if you have a custom SSH configuration which doesn't depend on metadata keys. Should be\nunaffected by this configuration.\n{% endblock no_os_login_failure_remediation %}\n\n{% block no_os_login_success_reason %}\nOS Login is correctly disabled, aligning with the preference for metadata-based SSH Key\nauthentication. The VM's `enable-oslogin` flag is not set,\nensuring compatibility with metadata-based SSH access.\n{% endblock no_os_login_success_reason %}\n\n{% block os_login_enabled_step_name %}\nVerify that OS Login is set to `True` for the VM.\n{% endblock os_login_enabled_step_name %}\n\n{% block os_login_enabled_failure_reason %}\nOS Login is disabled\n{% endblock os_login_enabled_failure_reason %}\n\n{% block os_login_enabled_failure_remediation %}\nTo utilize OS Login, enable it by setting the `enable-oslogin` flag in the VM's\nmetadata to `TRUE`.For detailed instructions on enabling OS Login,\nrefer to: <https://cloud.google.com/compute/docs/oslogin/set-up-oslogin#enable_os_login>\n{% endblock os_login_enabled_failure_remediation %}\n\n{% block os_login_enabled_success_reason %}\nOS Login is enabled on this VM.\n{% endblock os_login_enabled_success_reason %}\n\n{% block can_set_metadata_success_reason %}\n{auth_user} is authorized to update instance or project metadata, including SSH keys.\nThis enables gcloud and cloud console to update temporary SSH access to the VM or configure\npersonal SSH keys if needed.\n{% endblock can_set_metadata_success_reason %}\n\n{% block can_set_metadata_failure_reason %}\nThe current user does not have the necessary permissions to modify metadata,\nessential for managing SSH keys. Missing permissions include one of the following:\n{\" or \".join(metadata_permissions)}.\n{% endblock can_set_metadata_failure_reason %}\n\n{% block can_set_metadata_failure_remediation %}\nTo grant the required permissions for managing SSH keys within the VM's metadata, follow these guides:\n\n- For project-level SSH key management, assign roles that include the\n'compute.projects.setCommonInstanceMetadata' permission. More details can be found here:\n<https://cloud.google.com/compute/docs/connect/add-ssh-keys#expandable-2>\n- For instance-level SSH key management, ensure roles include 'compute.instances.setMetadata'\npermission. Step-by-step instructions are available here:\n<https://cloud.google.com/compute/docs/connect/add-ssh-keys#expandable-3>\nAdjusting these permissions will allow for the proper management of SSH keys and, by extension,\nSSH access to the VM especially if using gcloud / cloud console.\n{% endblock can_set_metadata_failure_remediation %}\n\n{% block valid_ssh_key_success_reason %}\nThe local user \"{local_user}\" is confirmed to have at least one valid SSH key\nconfigured on the GCE Instance: \"{full_resource_path}\".\n{% endblock valid_ssh_key_success_reason %}\n\n{% block valid_ssh_key_failure_reason %}\nThe local user \"{local_user}\" lacks at least one valid SSH key for VM: \"{full_resource_path}\".\n{% endblock valid_ssh_key_failure_reason %}\n\n{% block valid_ssh_key_failure_remediation %}\nEnsure \"{local_user}\" has a valid SSH key by following the guide:\n<https://cloud.google.com/compute/docs/connect/add-ssh-keys#add_ssh_keys_to_instance_metadata>\n{% endblock valid_ssh_key_failure_remediation %}\n\n{% block duplicate_ssh_keys_failure_reason %}\nVM {instance_name} has {count} duplicate SSH key(s) in its metadata: {keys}\n{% endblock duplicate_ssh_keys_failure_reason %}\n\n{% block duplicate_ssh_keys_failure_remediation %}\nRemove duplicate SSH keys from the instance or project metadata to avoid potential SSH issues and improve security hygiene.\n{% endblock duplicate_ssh_keys_failure_remediation %}\n\n{% block duplicate_ssh_keys_success_reason %}\nNo duplicate SSH keys were found in metadata for VM {instance_name}.\n{% endblock duplicate_ssh_keys_success_reason %}\n"
  },
  {
    "path": "gcpdiag/runbook/gce/templates/vm_ops.jinja",
    "content": "{% block opsagent_installed_success_reason %}\nGCE Instance \"{full_resource_path}\" has {subagent} agent installed and is exporting data.\n{% endblock opsagent_installed_success_reason %}\n\n{% block opsagent_installed_failure_reason %}\nGCE Instance \"{full_resource_path}\" does not have {subagent} agent installed and is not exporting data.\n{% endblock opsagent_installed_failure_reason %}\n\n{% block opsagent_installed_failure_remediation %}\nInstall the {subagent} agent on GCE Instance \"{full_resource_path}\".\nConsult the following documentation for troubleshooting assistance:\n<https://cloud.google.com/stackdriver/docs/solutions/agents/ops-agent/troubleshoot-run-ingest>\n{% endblock opsagent_installed_failure_remediation %}\n"
  },
  {
    "path": "gcpdiag/runbook/gce/templates/vm_performance.jinja",
    "content": "{% block high_cpu_utilization_step_name %}\nVerify VM CPU utilization is within optimal levels.\n{% endblock high_cpu_utilization_step_name %}\n\n{% block high_cpu_utilization_failure_reason %}\nCPU utilization on this VM has surpassed recommended operational levels,\nwhich may affect its performance and SSH connectivity.\n{% endblock high_cpu_utilization_failure_reason %}\n\n{% block high_cpu_utilization_failure_remediation %}\nExcessive CPU usage can lead to performance bottlenecks. Resizing the VM to a machine type with higher CPU capabilities may resolve the issue.\n\nConsult the following documentation for guidance:\n\n- Stopping a VM: <https://cloud.google.com/compute/docs/instances/stop-start-instance>\n- Resizing a VM: <https://cloud.google.com/compute/docs/instances/changing-machine-type-of-stopped-instance#gcloud>\n\nAdditionally, analyze Compute Engine observability metrics to pinpoint high-usage processes:\n\n- Accessing VM observability metrics:\n  <https://cloud.google.com/compute/docs/instances/observe-monitor-vms#access_vm_observability_metrics>\n- Analyzing process utilization:\n  <https://cloud.google.com/compute/docs/instances/observe-monitor-vms#process_utilization>\n\nIf SSH is unavailable, connect via the serial console to stop offending processes:\n<https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-using-serial-console>\n{% endblock high_cpu_utilization_failure_remediation %}\n\n{% block high_cpu_utilization_success_reason %}\nThe Compute Engine VM {full_resource_path},\nhas CPU utilization within the optimal range.\n{% endblock high_cpu_utilization_success_reason %}\n\n{% block high_disk_utilization_failure_reason %}\nDisk utilization on this VM's boot disk is critically high,\npotentially affecting application performance.\n{% endblock high_disk_utilization_failure_reason %}\n\n{% block high_disk_utilization_skipped_reason %}\nNo Google Cloud Ops Agent installed on the VM, making it difficult to retrieve disk utilization data via metrics.\nFalling back to checking for filesystem utilization-related messages in the serial logs.\n{% endblock high_disk_utilization_skipped_reason %}\n\n{% block high_disk_utilization_failure_remediation %}\nTo mitigate high disk usage, consider expanding the VM's boot disk capacity.\nThis action can help avoid performance issues and ensure smoother SSH connections.\n\nConsult the following guide to increase disk size:\n<https://cloud.google.com/compute/docs/disks/resize-persistent-disk#increase_the_size_of_a_disk>\n{% endblock high_disk_utilization_failure_remediation %}\n\n{% block high_disk_utilization_step_name %}\nVerify VM's boot disk space utilization is within optimal levels.\n{% endblock high_disk_utilization_step_name %}\n\n{% block high_disk_utilization_success_reason %}\nThe boot disk space usage for the Compute Engine VM {full_resource_path}, is within optimal levels.\n{% endblock high_disk_utilization_success_reason %}\n\n{% block high_memory_utilization_skipped_reason %}\nSerial logs are not available for examination.\n{% endblock high_memory_utilization_skipped_reason %}\n\n{% block high_memory_utilization_failure_reason %}\nMemory utilization on this VM has reached levels that may compromise its VM application performance.\n{% endblock high_memory_utilization_failure_reason %}\n\n{% block high_memory_utilization_failure_remediation %}\nElevated memory usage can result in slow, unresponsive, or terminated applications.\nEnhance the VM's memory capacity by changing to a machine type with more memory.\n\nConsult the following documentation for guidance:\n\n- Changing machine type:\n  <https://cloud.google.com/compute/docs/instances/changing-machine-type-of-stopped-instance#gcloud>\n\nAdditionally, analyze Compute Engine observability metrics to pinpoint high-usage processes:\n<https://cloud.google.com/compute/docs/instances/observe-monitor-vms#memory_utilization>\n\nIf SSH is unavailable, connect via the serial console to mitigate the issue:\n<https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-using-serial-console>\n{% endblock high_memory_utilization_failure_remediation %}\n\n{% block high_memory_utilization_success_reason %}\nMemory utilization on this VM is within optimal range.\n{% endblock high_memory_utilization_success_reason %}\n\n{% block high_memory_usage_logs_skipped_reason %}\nSerial logs are not available for investigating possible memory issues.\n{% endblock high_memory_usage_logs_skipped_reason %}\n\n{% block high_memory_usage_logs_step_name %}\nVerify memory related errors in VM serial logs.\n{% endblock high_memory_usage_logs_step_name %}\n\n{% block high_memory_usage_logs_success_reason %}\nNo memory-related errors found in Serial console logs.\n{% endblock high_memory_usage_logs_success_reason %}\n\n{% block high_memory_usage_logs_failure_reason %}\nHigh memory utilization error logs have been detected on your VM instance within\n{start_time} - {end_time}. This can lead to performance issues and instability.\n{% endblock high_memory_usage_logs_failure_reason %}\n\n{% block high_memory_usage_logs_failure_remediation %}\n\n1. Manually investigate memory usage by accessing the Guest OS:\n   - Identify processes with consistently high memory consumption using `top` (press \"M\") or `ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head -n 5`.\n   - Focus on processes with recent spikes or consistently high memory usage.\n   - If SSH access is unavailable, troubleshoot via the serial console:\n     <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-using-serial-console>\n\n2. Review recent application or configuration changes:\n   - Investigate if recent deployments, updates, or configuration changes correlate with increased memory usage.\n\n3. Resolve identified bottlenecks:\n   - For applications causing excessive memory usage, optimize their configuration or update them. Explore alternatives if optimization is insufficient.\n   - Evaluate scaling up resources if high memory usage results from legitimate application demands.\n\n4. Increase instance memory if necessary:\n   - Stop the VM and change its machine type:\n     <https://cloud.google.com/compute/docs/instances/changing-machine-type-of-stopped-instance#gcloud>\n   - Consult the machine type documentation to select an appropriate configuration:\n     <https://cloud.google.com/compute/docs/machine-types>\n\n**Note:** Non-Google provided application-specific issues may fall outside the support scope. Collaborate with relevant application teams for further investigation. Refer to the Google Cloud Platform support policy for details, including out-of-scope items:\n\n- Support and maintenance policy: <https://cloud.google.com/compute/docs/images/support-maintenance-policy#support-scope>\n- Out-of-scope items: <https://cloud.google.com/compute/docs/images/support-maintenance-policy#out-of-scope_for_support>\n{% endblock high_memory_usage_logs_failure_remediation %}\n\n{% block high_memory_usage_logs_uncertain_reason %}\nUnable to investigate the high memory utilization error logs, likely due to the absence of logs.\nHowever, this does not eliminate the possibility of high memory usage.\n\nManual verification of memory utilization on the Guest OS is recommended as a potential cause.\n{% endblock high_memory_usage_logs_uncertain_reason %}\n\n{% block high_disk_utilization_error_failure_reason %}\nFound high disk utilisation errors in Serial console logs.\nThe patterns used:\n\n```\n'No space left on device',\n'No usable temporary directory found',\n'A stop job is running for Security \\.\\.\\..* Service ',\n'disk is at or near capacity'\n```\n\n{% endblock high_disk_utilization_error_failure_reason %}\n\n{% block high_disk_utilization_error_failure_remediation %}\nTo mitigate high disk usage, consider expanding the VM's boot disk capacity.\nThis action can help avoid performance issues and ensure accessibility of the VM.\n\nConsult the following guide to increase disk size:\n<https://cloud.google.com/compute/docs/disks/resize-persistent-disk#increase_the_size_of_a_disk>\n{% endblock high_disk_utilization_error_failure_remediation %}\n\n{% block high_disk_utilization_error_step_name %}\nVerify high disk utilization related logs in serial console logs\n{% endblock high_disk_utilization_error_step_name %}\n\n{% block high_disk_utilization_error_success_reason %}\nNo high disk utilisation related errors found in Serial console logs.\n{% endblock high_disk_utilization_error_success_reason %}\n\n{% block high_disk_utilization_error_skipped_reason %}\nSerial logs are not available for examination.\n{% endblock high_disk_utilization_error_skipped_reason %}\n\n{% block high_disk_utilization_error_uncertain_reason %}\nSerial console logs were not available for examination.\n{% endblock high_disk_utilization_error_uncertain_reason %}\n\n{% block live_migrations_failure_reason %}\nLive migrations detected for the VM during mentioned period.\n{% endblock live_migrations_failure_reason %}\n\n{% block live_migrations_failure_remediation %}\nSimulate the migration (move the VM to another host) using the guidance provided here:\n<https://cloud.google.com/compute/docs/instances/simulating-host-maintenance?hl=en#testingpolicies>\nVerify if the issue persists after simulation. If it does, contact Google Cloud Platform Support by creating a support case.\n\nNote: During live migration, VMs might experience a temporary decrease in performance (disk, CPU, memory, network). See the documentation for details:\n<https://cloud.google.com/compute/docs/instances/live-migration-process#how_does_the_live_migration_process_work>\n{% endblock live_migrations_failure_remediation %}\n\n{% block live_migrations_step_name %}\nVerify live migrations for the instance\n{% endblock live_migrations_step_name %}\n\n{% block live_migrations_success_reason %}\nNo live migrations detected for the VM during mentioned period\n{% endblock live_migrations_success_reason %}\n\n{% block live_migrations_skipped_reason %}\nThere are no logs to examine !\n{% endblock live_migrations_skipped_reason %}\n\n{% block slow_disk_io_step_name %}\nVerify any slow Disk operations related errors in Serial console logs\n{% endblock slow_disk_io_step_name %}\n\n{% block slow_disk_io_failure_reason %}\nPossible Disk IO slowness detected. The patterns used:\n\n**Linux slow read**\n\n```\nr'\\d+:\\d+:\\d+:\\d+: timing out command, waited \\d+s',\nr'end_request: I/O error, dev [a-z0-9-]+, sector \\d+',\nr'Buffer I/O error on device [a-z0-9-]+, logical block \\d+',\nr'blocked for more than \\d+ seconds',\n```\n\n**Linux SCSI commands abort/reset (when operation to PD times out)**\n\n```\nr'\\d+:\\d+:\\d+:\\d+:\\s+\\[([a-z0-9-]+)\\]\\s+(abort|device reset)$',\nr'\\d+:\\d+:\\d+:\\d+:\\s+(device reset)$',\n```\n\n**Linux Local SSD physical failure on console:**\n\n```\nr'kernel: blk_update_request: I/O error, dev [a-z0-9-]+, sector \\d+',\n```\n\n**Windows**\n\n```\nr'The IO operation at logical block address 0x[0-9a-fA-F.]+ for Disk \\d+ \\(PDO name: \\\\Device\\\\.*\\) was retried'\n```\n\n{% endblock slow_disk_io_failure_reason %}\n\n{% block slow_disk_io_failure_remediation %}\nThere can be multiple reasons which can cause Slow Disk IOs:\n\n- CPU Starvation - Small instances (with lesser CPUs) may not have enough CPU to serve all I/Os inflight.\n<https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-performance#cpu_and_memory_performance>\n\n- Network Throttling - High sent/received network traffic can cause network throttling that impacts disk operations.\n<https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-performance#network_performance>\n\n- Insufficient Machine Resources - If your machine's IOPS and throughput limits are not enough to serve your workloads,\nthis can also cause CPU or Disk IOPS/throughput Starvation.\n<https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-performance#storage_performance>\n\n- Application and GuestOS Operations - Unmanaged and untested application workloads can cause the high influx of IOs\nto the disk and cause IO operations to be queued, causing throttling at disk and CPU levels.\n\nTo fix this issue:\n\n- Please optimize your application workloads.\n- If needed, please add more resources(CPU, Memory) to the VM.\n- Please optimize your Disk performance -\n<https://cloud.google.com/compute/docs/disks/optimizing-pd-performance>\n- If needed, please change your disk type to get better Disk IOPS/throughput limits -\n<https://cloud.google.com/compute/docs/disks/modify-persistent-disk#disk_type>\n{% endblock slow_disk_io_failure_remediation %}\n\n{% block slow_disk_io_skipped_reason %}\nThere are no logs to examine !\n{% endblock slow_disk_io_skipped_reason %}\n\n{% block slow_disk_io_uncertain_reason %}\nNo error messages related to disk latency were found in the serial console logs.\nThis does not rule out disk performance issues.\n{% endblock slow_disk_io_uncertain_reason %}\n\n{% block slow_disk_io_uncertain_remediation %}\nCheck for high disk utilization using the command iostat to further troubleshoot.\n{% endblock slow_disk_io_uncertain_remediation %}\n\n{% block disk_io_usage_check_step_name %}\nVerify Disk IOPS/Throughput usage is within optimal limits\n{% endblock disk_io_usage_check_step_name %}\n\n{% block disk_io_usage_check_failure_reason %}\nDisk IOPS/Throughput usage is NOT within optimal limits\n{% endblock disk_io_usage_check_failure_reason %}\n\n{% block disk_io_usage_check_failure_remediation %}\nThere can be multiple reasons which can cause Disk IOPS/Throughput usage to increase:\n\n- Application and GuestOS Operations - Unmanaged and untested application workloads can cause the high influx of IOs\nto the disk and cause IO operations to be queued, causing throttling at disk levels.\n\n- CPU Starvation - Small instances(with lesser CPUs) may not have enough CPU to serve all I/Os inflight.\n<https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-performance#cpu_and_memory_performance>\n\n- Network Throttling - High sent/received network traffic can cause network throttling, that can also impacts disk\noperations.\n<https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-performance#network_performance>\n\n- Insufficient Machine Resources - If your machine's IOPS and throughput limits are not enough to serve your workloads,\nthis can also cause CPU or Disk IOPS/throughput Starvation.\n<https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-performance#storage_performance>\n\nTo fix this issue:\n\n- Please optimize your application workloads.\n- If needed, please add more resources(CPU, Memory) to the VM.\n- Please optimize your Disk performance -\n<https://cloud.google.com/compute/docs/disks/optimizing-pd-performance>\n- If needed, please change your disk type to get better Disk IOPS/throughput limits -\n<https://cloud.google.com/compute/docs/disks/modify-persistent-disk#disk_type>\n\n{% endblock disk_io_usage_check_failure_remediation %}\n\n{% block disk_health_check_step_name %}\nVerify instance disks are healthy.\n{% endblock disk_health_check_step_name %}\n\n{% block disk_health_check_success_reason %}\nInstance disk \"{disk_name}\" is healthy.\n{% endblock disk_health_check_success_reason %}\n\n{% block disk_health_check_failure_reason %}\nYou might experience slower/poor performance with your disk '{disk_name}' due to an\nongoing issue with our Compute Engine or Persistent Disk infrastructure. We're working\nto resolve this as quickly as possible.\n{% endblock disk_health_check_failure_reason %}\n\n{% block disk_health_check_failure_remediation %}\nTo better understand the situation with your Compute Engine or Persistent Disks,\ncould you please take a look at the Google Cloud Status page:\n\n<https://status.cloud.google.com>\n\nThis page provides real-time updates on the health of Google Cloud services.\n\nAdditionally, it may be helpful to check the Service Health dashboard in your\nGoogle Cloud Console for any reported incidents:\n\n<https://console.cloud.google.com/servicehealth/incidents>\n\nIf you don't find any information about an ongoing issue related to your concern,\nplease don't hesitate to reach out to Google Cloud Support by creating a support case.\nThey'll be happy to investigate further and assist you.\n{% endblock disk_health_check_failure_remediation %}\n\n{% block disk_io_latency_check_step_name %}\nVerify Instance's Disk Avg IO Latency is within optimal limits.\n{% endblock disk_io_latency_check_step_name %}\n\n{% block disk_io_latency_check_success_reason %}\nInstance disk \"{disk_name}\"'s IO latency is within the optimal limits.\n{% endblock disk_io_latency_check_success_reason %}\n\n{% block disk_io_latency_check_failure_reason %}\nThe performance of the disk '{disk_name}' is currently degraded due to high\nIO latency exceeding optimal thresholds. This may result in slower read/write\nspeeds and overall reduced performance.\n{% endblock disk_io_latency_check_failure_reason %}\n\n{% block disk_io_latency_check_failure_remediation %}\nDisk I/O latency is the time it takes for a read or write operation to complete on a\ndisk.\nHigh disk I/O latency can significantly impact the performance of your applications\nand workloads running on the instance, leading to slow response times, increased\nprocessing time, and overall sluggishness.\n\n**Potential Bottlenecks**\n\n- Disk Type: To optimize disk performance, ensure your disk type is appropriate\nfor your workload and provides acceptable latency for your system architecture.\nChoosing the right disk type can significantly impact performance.\n<https://cloud.google.com/compute/docs/disks>\n\n- Workload: The nature of your workload also influences latency. Workloads with\nmany small, random I/O operations will generally have higher latency than those\nwith sequential I/O\n\n**Optimize Disk Usage**\n\n- Reduce I/O Operations: Optimize your applications and database queries to minimize\nthe number of disk I/O operations.\n- Increase I/O Request Size: Larger I/O requests can be more efficient than many small\nones. Consider adjusting your application or database settings to increase the I/O\nrequest size.\n- Caching: Implement caching mechanisms to reduce the need to access the disk for\nfrequently used data.\n\nChoose the Right Disk Type with lesser IO Latency - <https://cloud.google.com/compute/docs/disks>\n\nYou may also look into Optimizing persistent disk performance -\n<https://cloud.google.com/compute/docs/disks/optimizing-pd-performance>\n\nPlease don't hesitate to reach out to Google Cloud Support if issue is not resolved.\n{% endblock disk_io_latency_check_failure_remediation %}\n"
  },
  {
    "path": "gcpdiag/runbook/gce/templates/vm_serial_log.jinja",
    "content": "{% block default_failure_reason %}\nAnomalies detected in the serial logs which align with the investigated bad patterns\n{% endblock default_failure_reason %}\n\n{% block default_skipped_reason %}\nThere are no logs to examine.\n{% endblock default_skipped_reason %}\n\n{% block default_failure_remediation %}\nInvestigate potential issues via the serial console.\nIf GRUB_TIMEOUT is greater than 0, access the interactive session for more insights.\nExplore rescue options for inaccessible VMs or review possible guest OS issues.\n\n- Interactive Serial Console: <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-using-serial-console>\n- Rescuing VMs: <https://cloud.google.com/compute/docs/troubleshooting/rescue-vm>\n\nIf escalating Guest OS related issues to Google Cloud Support,\nverify that the issue is in line with Google Cloud Platform's Guest OS support policy\n\n- Google Cloud Platform Support Scope:\n<https://cloud.google.com/compute/docs/images/support-maintenance-policy#support-scope>\n{% endblock default_failure_remediation %}\n\n{% block default_success_reason %}\nThe VM's Linux OS shows no signs of anomalies,\nindicating a *likely* stable operational state.\n{% endblock default_success_reason %}\n\n{% block default_uncertain_reason %}\nLack of serial log data prevented a thorough assessment of the VM's operational state. Result is\ninconclusive\n{% endblock default_uncertain_reason %}\n\n{% block default_uncertain_remediation %}\nVerify the VM's operational status by reviewing available serial logs.\nAddress any detected guest OS issues using the provided documentation,\nkeeping in mind certain guest OS faults may be beyond Google Cloud Platform's support scope.\n\n- Viewing Serial Port Output: <https://cloud.google.com/compute/docs/troubleshooting/viewing-serial-port-output>\n- Resolving Kernel Panic:\n<https://cloud.google.com/compute/docs/troubleshooting/kernel-panic#resolve_the_kernel_panic_error>\n- Google Cloud Platform Support Scope:\n<https://cloud.google.com/compute/docs/images/support-maintenance-policy#support-scope>\n{% endblock default_uncertain_remediation %}\n\n{% block kernel_panic_step_name %}\nExamine Guest OS if there are any indications of kernel panic.\n{% endblock kernel_panic_step_name %}\n\n{% block kernel_panic_success_reason %}\nA review of the serial console logs for the GCE instance `{full_resource_path}` from `{start_time}` to `{end_time}`\nshows no evidence of kernel panic or GRUB issues. The `systemd` application is confirmed to be running.\n{% endblock kernel_panic_success_reason %}\n\n{% block kernel_panic_failure_reason %}\nDetected kernel panic logs in {full_resource_path} serial logs,\nwhich is likely preventing the VM from booting up correctly.\n{% endblock kernel_panic_failure_reason %}\n\n{% block kernel_panic_failure_remediation %}\nKernel panics can be caused by different issues within the guest.\nAddress underlying issues causing boot problems to solve the kernel panic:\n\n**General Kernel panic Troubleshooting**\n\n1. Consult the Troubleshooting Guide for Kernel Panic Errors:\n   - Kernel panic is commonly caused by file system errors in Linux Guest OS.\n   - Check `/etc/fstab` for incorrect entries that could halt the boot process.\n   - Refer to this guide for resolving [kernel panic issues caused by\n/etc/fstab](https://cloud.google.com/compute/docs/troubleshooting/fstab-errors).\n\n2. Resources for Kernel panic\n   - [Troubleshooting GCE Instance experiencing Kernel\nPanic](https://cloud.google.com/compute/docs/troubleshooting/kernel-panic#resolve_the_kernel_panic_error)\n   - [Common Red Hat Kernel Panic\nIssues](https://access.redhat.com/search/knowledgebase?q=kernel+panic&p=1&rows=10&documentKind=Solution%26Documentation&sort=relevant)\n   - [Common SUSE Kernel Panic Issues](https://www.suse.com/support/kb/?id=&q=kernel+panic&bu_suse=true&advanced=false)\n\n3. Rescue an instance experiencing kernel panic\n   - [How to rescue a experiencing kernel panic](https://cloud.google.com/compute/docs/troubleshooting/rescue-vm) to\nrecover faulty VMs.\n   - Watch this video for a walkthrough: [Rescue VM Guide](https://www.youtube.com/watch?v=oD6IFpjEtEw)\n\n4 Google Cloud Platform Support Scope:\n[Understand GCP support for kernel-related\nissues](https://cloud.google.com/compute/docs/images/support-maintenance-policy#support-scope).\n{% endblock kernel_panic_failure_remediation %}\n\n{% block kernel_panic_uncertain_reason %}\nNo serial logs were found for the VM {full_resource_path}. However, this does not rule out the possibility of a kernel\npanic.\n{% endblock kernel_panic_uncertain_reason %}\n\n{% block kernel_panic_uncertain_remediation %}\nManually [view the most recent serial\nlogs](https://cloud.google.com/compute/docs/troubleshooting/viewing-serial-port-output)\nto investigate issues with the Guest OS applications.\n\nKernel panics can be caused by different issues within the guest.\nAddress underlying issues causing boot problems to solve the kernel panic:\n\n**General Kernel panic Troubleshooting**\n\n1. Consult the Troubleshooting Guide for Kernel Panic Errors:\n   - Kernel panic is commonly caused by file system errors in Linux Guest OS.\n   - Check `/etc/fstab` for incorrect entries that could halt the boot process.\n   - Refer to this guide for resolving [kernel panic issues caused by\n/etc/fstab](https://cloud.google.com/compute/docs/troubleshooting/fstab-errors).\n\n2. Resources for Kernel panic\n   - [Troubleshooting GCE Instance experiencing Kernel\nPanic](https://cloud.google.com/compute/docs/troubleshooting/kernel-panic#resolve_the_kernel_panic_error)\n   - [Common Red Hat Kernel Panic\nIssues](https://access.redhat.com/search/knowledgebase?q=kernel+panic&p=1&rows=10&documentKind=Solution%26Documentation&sort=relevant)\n   - [Common SUSE Kernel Panic Issues](https://www.suse.com/support/kb/?id=&q=kernel+panic&bu_suse=true&advanced=false)\n\n3. Rescue an instance experiencing kernel panic\n   - [How to rescue a experiencing kernel panic](https://cloud.google.com/compute/docs/troubleshooting/rescue-vm) to\nrecover faulty VMs.\n   - Watch this video for a walkthrough: [Rescue VM Guide](https://www.youtube.com/watch?v=oD6IFpjEtEw)\n\n4 Google Cloud Platform Support Scope:\n[Understand GCP support for kernel-related\nissues](https://cloud.google.com/compute/docs/images/support-maintenance-policy#support-scope).\n{% endblock kernel_panic_uncertain_remediation %}\n\n{% block kernel_panic_skipped_reason %}\nNo logs are available to examine.\n{% endblock kernel_panic_skipped_reason %}\n\n{% block sshguard_step_name %}\nVerify if SSHGuard is installed and blocking SSH connectivity\n{% endblock sshguard_step_name %}\n\n{% block sshguard_failure_reason %}\nSSHGuard is active and may be blocking IP addresses.\nVerify if your IP is blocked by SSHGuard on the VM.\n{% endblock sshguard_failure_reason %}\n\n{% block sshguard_failure_remediation %}\nIssues related to SSHGuard fall outside the standard support scope for Google Cloud Platform.\nConsult the most appropriate team within your organisation to assist with resolution.\nFor guest OS issues and SSHGuard configurations, refer to:\n\n- Support Scope: <https://cloud.google.com/compute/docs/images/support-maintenance-policy#support-scope>\n- Out of Scope Support: <https://cloud.google.com/compute/docs/images/support-maintenance-policy#out-of-scope_for_support>\n{% endblock sshguard_failure_remediation %}\n\n{% block sshguard_success_reason %}\nSSHGuard does not appear to be blocking IPs on the VM (if installed on the VM)\n{% endblock sshguard_success_reason %}\n\n{% block sshguard_uncertain_reason %}\nThe retrieved logs do not contain definitive entries, either positive or negative,\nto make a conclusive assessment.\nReview the GCE serial logs to determine if SSHGuard is a likely cause.\n{% endblock sshguard_uncertain_reason %}\n\n{% block sshguard_uncertain_remediation %}\nIf SSHGuard or similar application is a concern,\nInspect its configuration via the interactive serial console:\n<https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-using-serial-console>\n{% endblock sshguard_uncertain_remediation %}\n\n{% block sshguard_skipped_reason %}\nNo logs are available to examine\n{% endblock sshguard_skipped_reason %}\n\n{% block windows_gce_ssh_agent_instructions_message %}\nVerify if the `google-compute-engine-ssh` agent is installed on the Windows VM.\n{% endblock windows_gce_ssh_agent_instructions_message %}\n\n{% block windows_gce_ssh_agent_step_name %}\nVerify if the necessary Google guest agents, especially `google-compute-engine-ssh`,\nare operational on the VM.\n{% endblock windows_gce_ssh_agent_step_name %}\n\n{% block windows_gce_ssh_agent_uncertain_reason %}\nUncertain if the `google-compute-engine-ssh` agent is installed on the VM.\n{% endblock windows_gce_ssh_agent_uncertain_reason %}\n\n{% block windows_gce_ssh_agent_uncertain_remediation %}\nUtilize RDP or a startup script to verify the presence and functionality of the\n`google-compute-engine-ssh` agent. For instructions on implementing startup scripts, refer to:\n<https://cloud.google.com/compute/docs/connect/windows-ssh#startup-script>\n{% endblock windows_gce_ssh_agent_uncertain_remediation %}\n\n{% block windows_gce_ssh_agent_success_reason %}\nSuccessfully confirmed the installation of the `google-compute-engine-ssh` agent on the Windows VM.\n{% endblock windows_gce_ssh_agent_success_reason %}\n\n{% block windows_gce_ssh_agent_failure_reason %}\nUnable to confirm the installation of the `google-compute-engine-ssh` agent on the VM.\n{% endblock windows_gce_ssh_agent_failure_reason %}\n\n{% block windows_gce_ssh_agent_failure_remediation %}\nEnsure the `google-compute-engine-ssh` agent is correctly installed and configured.\nConsult the following guide for assistance with agent installation and configuration:\n<https://cloud.google.com/compute/docs/connect/windows-ssh#startup-script>\n{% endblock windows_gce_ssh_agent_failure_remediation %}\n\n{% block sshd_step_name %}\nVerify OpenSSH daemon (sshd) has started from most recent serial logs.\n{% endblock sshd_step_name %}\n\n{% block sshd_failure_reason %}\nThe latest OpenSSH daemon (sshd) logs indicate that the daemon has either failed to start or is misconfigured.\nThis issue is preventing proper SSH connectivity to the VM.\n{% endblock sshd_failure_reason %}\n\n{% block sshd_failure_remediation %}\nGoogle Cloud Compute Engine provides regional serial console gateways for troubleshooting\nGuest OS when SSHD is unavailable.\n\nConnect to the VM using the [interactive serial console\ngateways](https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-using-serial-console#connectserialconsole).\n\n- Troubleshooting Common Linux `sshd.service` Errors:\n[Guide for resolving common SSH\nerrors](https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-ssh-errors#linux_errors)\n- Knowledge Base for SSHD Service Failures:\n[Diagnosing SSH service\nissues](https://cloud.google.com/knowledge/kb/ssh-in-cloud-serial-console-fails-with-warning-message-000004554)\n\nNote: Guest OS issues are outside the scope of Google Cloud Platform support:\n<https://cloud.google.com/compute/docs/images/support-maintenance-policy#support-scope> and\n<https://cloud.google.com/compute/docs/images/support-maintenance-policy#out-of-scope_for_support>\n{% endblock sshd_failure_remediation %}\n\n{% block sshd_success_reason %}\nThe latest OpenSSH daemon (sshd) logs indicate that the daemon has started.\n{% endblock sshd_success_reason %}\n\n{% block sshd_uncertain_reason %}\nThe serial logs for Compute Engine VM {full_resource_path} do not contain positive or negative entries\nto conclusively assess if sshd.service is up and running correctly.\n{% endblock sshd_uncertain_reason %}\n\n{% block sshd_skipped_reason %}\nNo logs are available to examine\n{% endblock sshd_skipped_reason %}\n\n{% block windows_bootup_step_name %}\nVerify Windows boot up process have successfully completed.\n{% endblock windows_bootup_step_name %}\n\n{% block windows_bootup_success_reason %}\nConfirmed the presence of the expected guest agent logs in the serial console output\nin GCE instance {full_resource_path}\n{% endblock windows_bootup_success_reason %}\n\n{% block windows_bootup_failure_reason %}\nThe expected guest agent logs are not present in the serial console output.\n{% endblock windows_bootup_failure_reason %}\n\n{% block windows_bootup_failure_remediation %}\nFix boot issues preventing a successful startup. If the Google Compute Engine (GCE) guest agents are installed, the\nstartup process should include the expected guest agent logs.\n\nResources\n\n1. [Troubleshooting Windows instances](https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-windows)\n2. [Connecting to the Windows Special Administrative Console\n(SAC)](https://cloud.google.com/compute/docs/instances/connecting-to-sac)\n3. [Installing the Windows GCE guest\nenvironment](https://cloud.google.com/compute/docs/images/install-guest-environment#windows:~:text=Engine%20Shutdown%20Scripts-,Windows,-GCEGuestAgent%3A%20GCE%20Agent)\n4. [Connecting to Windows instances](https://cloud.google.com/compute/docs/instances/connecting-to-windows)\n5. [Connecting to Windows using SSH](https://cloud.google.com/compute/docs/connect/windows-ssh)\n6. [Using PowerShell to connect to Windows\ninstances](https://cloud.google.com/compute/docs/instances/windows/connecting-powershell)\n{% endblock windows_bootup_failure_remediation %}\n\n{% block windows_bootup_uncertain_reason %}\nLack of serial log data prevented a thorough assessment of the VM's operational state. Result is\ninconclusive\n{% endblock windows_bootup_uncertain_reason %}\n\n{% block windows_bootup_uncertain_remediation %}\nConsult the troubleshooting guide to investigate windows boot up issues: [1], [2]\n\nResources:\n\n[1] <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-windows>\n\n[2] Connecting to the Windows Special Administrative Console (SAC) to troubleshoot boot up issues: <https://cloud.google.com/compute/docs/instances/connecting-to-sac>\n\nGoogle Cloud Platform Support Scope:\n<https://cloud.google.com/compute/docs/images/support-maintenance-policy#support-scope>\n{% endblock windows_bootup_uncertain_remediation %}\n\n{% block serial_log_start_point_step_name %}\nVerify all logs available since last boot of the instance\n{% endblock serial_log_start_point_step_name %}\n\n{% block serial_log_start_point_success_reason %}\nFound all logs since last boot of the VM.\n{% endblock serial_log_start_point_success_reason %}\n\n{% block serial_log_start_point_failure_reason %}\nNo serial console logs available since the instance's startup due to auto purge,\nhence the check might not have correct results.\n{% endblock serial_log_start_point_failure_reason %}\n\n{% block serial_log_start_point_failure_remediation %}\nConsider restarting the instance and then using gcpdiag to analyze the serial console logs for further insights.\n{% endblock serial_log_start_point_failure_remediation %}\n\n{% block serial_log_start_point_skipped_reason %}\nNo logs are available to examine.\n{% endblock serial_log_start_point_skipped_reason %}\n\n{% block time_sync_issue_step_name %}\nCheck for Time Sync related errors from GCE serial logs.\n{% endblock time_sync_issue_step_name %}\n\n{% block time_sync_issue_failure_reason %}\nFound time sync error messages in Serial console logs. The VM's time is out of sync.\n{% endblock time_sync_issue_failure_reason %}\n\n{% block time_sync_issue_failure_remediation %}\nConnect to the GCE Instance and verify that the NTP server configuration adheres to Google Cloud Platform standards.\nRefer to the [Google Cloud NTP configuration\nguide](https://cloud.google.com/compute/docs/instances/configure-ntp).\n{% endblock time_sync_issue_failure_remediation %}\n\n{% block time_sync_issue_skipped_reason %}\nNo logs are available to examine.\n{% endblock time_sync_issue_skipped_reason %}\n\n{% block time_sync_issue_uncertain_reason %}\nNo Time sync related errors in Serial console logs.\n{% endblock time_sync_issue_uncertain_reason %}\n\n{% block time_sync_issue_uncertain_remediation %}\nTo verify, please check your system Logs for below patterns:\n\n```\n'time may be out of sync',\n'System clock is unsynchronized',\n'Time drift detected',\n'no servers can be used, system clock unsynchronized'\n```\n\n{% endblock time_sync_issue_uncertain_remediation %}\n\n{% block guest_agent_step_name %}\nChecking for Guest Agent startup logs\n{% endblock guest_agent_step_name %}\n\n{% block guest_agent_failure_reason %}\nCould not find the Google Guest Agent startup log in Serial console logs.\n{% endblock guest_agent_failure_reason %}\n\n{% block guest_agent_failure_remediation %}\nThe google-guest-agent contains the guest agent and metadata script executables which\nruns on the guest OS to support the Compute Engine features. These features include account\nmanagement, OS Login integration, clock skew, network interface management, and instance setup.\n\nIn case Guest Agent is not started during instance startup, users might face login issues.\n\nThe `google-guest-agent.service` service should be in running state.\nIf the service is disabled, enable and start the service, by running the following commands:\n\n```\nsystemctl enable google-guest-agent.service\nsystemctl start google-guest-agent.service\n```\n\nVerify that the Linux Google Agent scripts are installed and running. If the Linux Google\nAgent is not installed, re-install it.\n{% endblock guest_agent_failure_remediation %}\n\n{% block guest_agent_success_reason %}\nDetected that Google Guest Agent is running within the VM\n{% endblock guest_agent_success_reason %}\n\n{% block guest_agent_skipped_reason %}\nNo logs are available to examine.\n{% endblock guest_agent_skipped_reason %}\n\n{% block guest_agent_uncertain_reason %}\nNo success or failed logs found for Google Guest Agent startup.\n{% endblock guest_agent_uncertain_reason %}\n\n{% block guest_agent_uncertain_remediation %}\nEach supported operating system on Compute Engine requires specific guest environment packages.\n\nTo determine the presence of a guest environment:\n\n- Inspect system logs emitted to the console during instance startup.\n- List the installed packages while connected to the instance.\n\nFor validation of the Guest Agent, refer to [Installing and configuring the guest\nenvironment](https://cloud.google.com/compute/docs/images/install-guest-environment#wgei).\n{% endblock guest_agent_uncertain_remediation %}\n\n{% block network_errors_step_name %}\nCheck for metadata network connectivity errors\n{% endblock network_errors_step_name %}\n\n{% block network_errors_failure_reason %}\nThe metadata server(169.254.169.254) is unreachable from the GCE Instance.\nThe instance might not have IP assigned to its primary NIC.\n{% endblock network_errors_failure_reason %}\n\n{% block network_errors_failure_remediation %}\nAttempt to log in to the instance via the serial console using a password and check the status of the network stack.\n\nIf login via the serial console is unsuccessful, consider restarting the instance.\n\nIf the issue persists after a reboot, follow the [rescue VM\nguide](https://cloud.google.com/compute/docs/troubleshooting/rescue-vm) for further troubleshooting.\n\nAdditionally, refer to the [troubleshooting metadata server\nguide](https://cloud.google.com/compute/docs/troubleshooting/troubleshoot-metadata-server) to address potential issues\nwith the Compute Engine metadata server.\n{% endblock network_errors_failure_remediation %}\n\n{% block network_errors_skipped_reason %}\nNo logs are available to examine.\n{% endblock network_errors_skipped_reason %}\n\n{% block network_errors_uncertain_reason %}\nNo success or failed logs to help deduce a conlusion on certainty of Network issues on the instance.\n{% endblock network_errors_uncertain_reason %}\n\n{% block linux_fs_corruption_step_name %}\nVerify any Filesystem corruption related errors in Serial console logs\n{% endblock linux_fs_corruption_step_name %}\n\n{% block linux_fs_corruption_failure_reason %}\nPossible filesystem corruption detected.\n\nThe patterns used:\n\n```\n'Corruption of in-memory data detected. Shutting down filesystem',\n'Corruption of in-memory data detected', 'warning: mounting fs with errors',\n'Failed to mount /',\n'A stop job is running for Security \\.\\.\\..* Service ',\n'I/O Error Detected. Shutting down filesystem',\n'metadata I/O error in'\n```\n\n{% endblock linux_fs_corruption_failure_reason %}\n\n{% block linux_fs_corruption_failure_remediation %}\nTo resolve filesystem corruption, admins can use [gce-rescue](https://github.com/GoogleCloudPlatform/gce-rescue),\navailable in Cloud Shell, to rescue faulty VMs. Alternatively, you can follow the\n[manual method](https://cloud.google.com/compute/docs/troubleshooting/rescue-vm) to repair the filesystem.\n\nAdditional resources for reference:\n\n- [Red Hat article on filesystem repair](https://access.redhat.com/solutions/1750923)\n- [Video guide on rescuing VMs](https://www.youtube.com/watch?v=oD6IFpjEtEw)\n\nThese resources provide detailed steps for diagnosing and resolving filesystem issues.\n{% endblock linux_fs_corruption_failure_remediation %}\n\n{% block linux_fs_corruption_skipped_reason %}\nNo logs are available to examine.\n{% endblock linux_fs_corruption_skipped_reason %}\n\n{% block sshd_auth_failure_step_name %}\nExamining SSHD authentication failures via serial logs.\n{% endblock sshd_auth_failure_step_name %}\n\n{% block sshd_auth_failure_failure_reason %}\nDetected SSHD authentication issues in the GCE Instance, which is affecting SSH access.\nFound the error \"Authentication refused: bad ownership or modes for directory\"\n{% endblock sshd_auth_failure_failure_reason %}\n\n{% block sshd_auth_failure_failure_remediation %}\nTo mitigate \"bad ownership or modes for directory\" errors:\n\n1. Follow either of the below steps to check the permissions:\n   - these steps to rescue the vm:\n<https://cloud.google.com/compute/docs/troubleshooting/rescue-vm>\n   - these steps login through serial console:\n<https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-using-serial-console>\n2. Refer to the standard permissions required for ssh connection:\n<https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-ssh-errors#permissions>\n{% endblock sshd_auth_failure_failure_remediation %}\n\n{% block sshd_auth_failure_success_reason %}\nNo errors detected for sshd auth failure due to bad permissions\n{% endblock sshd_auth_failure_success_reason %}\n\n{% block sshd_auth_failure_skipped_reason %}\nNo logs are available to examine.\n{% endblock sshd_auth_failure_skipped_reason %}\n\n{% block sshd_auth_failure_uncertain_reason %}\nNo evidence of successful or failed SSHD authentication attempts is present in the serial logs.\n{% endblock sshd_auth_failure_uncertain_reason %}\n\n{% block sshd_auth_failure_uncertain_remediation %}\nTo check if sshd_auth_failures are happening due to wrong directory permissions:\n\n1. Follow either of the below steps to check the permissions:\n   - these steps to rescue the vm:\n<https://cloud.google.com/compute/docs/troubleshooting/rescue-vm>\n   - these steps login through serial console:\n<https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-using-serial-console>\n\n2. Check the system logs for following error messages:\n\n```\n'Authentication refused: bad ownership or modes for directory'\n'Error updating SSH keys for user1: mkdir /home/USER/.ssh: no such file or directory'\n```\n\n{% endblock sshd_auth_failure_uncertain_remediation %}\n\n{% block linux_fs_corruption_uncertain_reason %}\nNo evidence Filesystem corruption errors present in the serial logs.\n{% endblock linux_fs_corruption_uncertain_reason %}\n\n{% block linux_fs_corruption_uncertain_remediation %}\n\n{% endblock linux_fs_corruption_uncertain_remediation %}\n\n{% block cloud_init_startup_check_step_name %}\nChecking for Cloud-init startup logs\n{% endblock cloud_init_startup_check_step_name %}\n\n{% block cloud_init_startup_check_failure_reason %}\nCould not find the Cloud-init startup log in Serial console logs.\n{% endblock cloud_init_startup_check_failure_reason %}\n\n{% block cloud_init_startup_check_failure_remediation %}\nCloud-init is the standard method for initializing cloud instance when it boots up.\nIt is installed in official Ubuntu and Container-Optimized OS images.\nCloud-init failures can be caused by internal issues, problems with other system components, or user configuration\nerrors.\n\nCheck if Cloud-init process is in running state.\n\n```\nsystemctl status cloud-init\n```\n\nVerify if the cloud init package is installed. Otherwise reinstall cloud-init and enable it\n\n```\ndpkg -l | grep -i cloud-init\n\napt-get install -f cloud-init -y\nsystemctl enable cloud-init\n```\n\n{% endblock cloud_init_startup_check_failure_remediation %}\n\n{% block cloud_init_startup_check_success_reason %}\nDetected that Cloud-init is running within {full_resource_path}\n{% endblock cloud_init_startup_check_success_reason %}\n\n{% block cloud_init_startup_check_skipped_reason %}\nNo logs are available to examine.\n{% endblock cloud_init_startup_check_skipped_reason %}\n\n{% block cloud_init_startup_check_uncertain_reason %}\nNo evidence of successful or failed cloud-init startup attempts in the {full_resource_path} serial logs.\n{% endblock cloud_init_startup_check_uncertain_reason %}\n\n{% block cloud_init_startup_check_uncertain_remediation %}\nCheck if cloud-init package is installed in VM\n\n```\ndpkg -l | grep -i cloud-init\nsystemctl enable cloud-init\n```\n\n{% endblock cloud_init_startup_check_uncertain_remediation %}\n\n{% block cloud_init_step_name %}\nVerify Network interface received IP through cloud-init\n{% endblock cloud_init_step_name %}\n\n{% block cloud_init_failure_reason %}\nNIC did not received any IP through cloud-init\n{% endblock cloud_init_failure_reason %}\n\n{% block cloud_init_failure_remediation %}\nCloud-init is the standard method for initializing cloud instance when it boots up.\nIt is installed in official Ubuntu and Container-Optimized OS images.\nCloud-init failures can be caused by internal issues, problems with other system components, or user configuration\nerrors.\n\nCheck if Cloud-init process is in running state.\n\n```\nsystemctl status cloud-init\n```\n\nVerify if the cloud init package is installed. Otherwise reinstall cloud-init and enable it\n\n```\ndpkg -l | grep -i cloud-init\n\napt-get install -f cloud-init -y\nsystemctl enable cloud-init\n```\n\n{% endblock cloud_init_failure_remediation %}\n\n{% block cloud_init_success_reason %}\nDetected that NIC has received IP through cloud-init\n{% endblock cloud_init_success_reason %}\n\n{% block cloud_init_skipped_reason %}\nNo logs are available to examine.\n{% endblock cloud_init_skipped_reason %}\n\n{% block cloud_init_uncertain_reason %}\nCloud-init startup logs (both success and failure) for the resource {full_resource_path}\nwere not found. This may indicate missing log files, incorrect logging configuration,\nor an issue with the initialization process during {start_time} - {end_time}.\n{% endblock cloud_init_uncertain_reason %}\n\n{% block cloud_init_uncertain_remediation %}\nThe Cloud-init package may not be installed or active on the VM {full_resource_path}.\nTo verify, check if the package is installed by running:\n\n```\ndpkg -l | grep -i cloud-init.\n```\n\nIf the package is not installed, install it using the appropriate package manager.\nAdditionally, ensure that the service is enabled by running:\n\n```\nsystemctl enable cloud-init.\n```\n\n{% endblock cloud_init_uncertain_remediation %}\n"
  },
  {
    "path": "gcpdiag/runbook/gce/templates/vm_termination.jinja",
    "content": "{% block vm_termination_success_reason %}\nNo GCE Instance was terminated between {start_time} and {end_time}\n{% endblock vm_termination_success_reason %}\n\n{% block mig_instance_recreation_failure_reason %}\n{status_message}\n{% endblock mig_instance_recreation_failure_reason %}\n\n{% block mig_instance_recreation_failure_remediation %}\nInstance \"{full_resource_path}\" was terminated as part of a normal Managed Instance Group recreation process\nand a replacement instance has been created after this termination. No action required.\n[1] <https://cloud.google.com/compute/docs/instance-groups/working-with-managed-instances#autoscaling>\n[2] <https://cloud.google.com/compute/docs/autoscaler>\n{% endblock mig_instance_recreation_failure_remediation %}\n\n{% block mig_instance_recreation_failure_remediation_a1 %}\nInstance \"{full_resource_path}\" was terminated as part of a normal Managed Instance Group recreation process\nand a replacement instance has not been created after this termination. Please investigate the MIG\nto understand the root cause of the issue and take necessary actions to recreate the instance.\n[1] <https://cloud.google.com/compute/docs/instance-groups/working-with-managed-instances#autoscaling>\n[2] <https://cloud.google.com/compute/docs/autoscaler>\n{% endblock mig_instance_recreation_failure_remediation_a1 %}\n\n{% block preemptible_instance_failure_reason %}\n{status_message}\n{% endblock preemptible_instance_failure_reason %}\n\n{% block preemptible_instance_failure_remediation %}\nInstance {full_resource_path} were preempted as part of a spot VM normal process.\n\nSpot VMs have significant discounts, but Compute Engine might preemptively stop or delete\n(preempt) Spot VMs to reclaim capacity at any time.\n\nRead more on here the preemption process occurs here [1][2]\n\nThis is a normal process and no action is required.\n\n[1] <https://cloud.google.com/compute/docs/instances/spot#preemption>\n[2] <https://cloud.google.com/compute/docs/instances/spot>\n{% endblock preemptible_instance_failure_remediation %}\n\n{% block preemptible_instance_failure_remediation_a1 %}\nInstance {full_resource_path} were preempted as part of a spot VM normal process however\nis currently shutdown.\n\nFollow our guide to restart the VM [1]\n\nRead more on here the preemption process occurs here [2][3]\n\nThis is a normal process and no action is required.\n\n[1] <https://cloud.google.com/compute/docs/instances/stop-start-instance#restart-vm>\n[2] <https://cloud.google.com/compute/docs/instances/spot#preemption>\n[3] <https://cloud.google.com/compute/docs/instances/spot>\n{% endblock preemptible_instance_failure_remediation_a1 %}\n\n{% block host_error_failure_reason %}\n{status_message}\n{% endblock host_error_failure_reason %}\n\n{% block host_error_failure_remediation %}\nA host error (compute.instances.hostError) means that there was a hardware or software issue\non the physical machine hosting your VM that caused your VM to crash. A host error which\ninvolves total hardware/software failure might prevent a live migration of your VM. If\nyour VM is set to automatically restart, which is the default setting, Google restarts your\nVM, typically within three minutes from the time the error was detected. Depending on the\nissue, the restart might take up to 5.5 minutes.\n\nNote that this is a known behavior that cannot be completely eliminated and should be planned\nfor while designing your systems on GCE.\n\nMitigation Strategies\nThe following mitigation strategies are implemented by Google to prevent & minimize occurrence\nof such events:\n\nLive Migrations. Live migration lets Google Cloud perform maintenance without interrupting a\nworkload, rebooting a VM, or modifying any of the VM's properties, such as IP addresses,\nmetadata, block storage data, application state, and network settings. Additionally our\nsystems proactively monitor for hardware or software failure symptoms on hosts. If a potential\nfailure is detected, we initiate live migration to seamlessly relocate the VM and prevent\ntermination. A 'hostError' will only occur in the rare instance where the failures prevent\nsuccessful live migration.\n\nGoogle reliability engineering. We are continuously monitoring the health of GCP hosts and\ntaking steps to prevent errors from occurring, while using a variety of HA techniques to\ndetect and mitigate hardware failures, such as using redundant components and monitoring for\nsigns of failure.\n\nSoftware Patching: We are continuously implementing a rigorous software patching schedule to\nensure the timely application of security updates and bug fixes. This proactive approach is\nmitigating the risk of software defects, and bugs that could lead to operational instability.\n\nRCA\nKindly note:\nRCA by Google for Host errors is not common practice. Host errors can happen occasionally and\ntypically do not undergo individual RCA. Should you request an RCA for a host error, you must\nprovide a compelling business justification for why further details are necessary.\n\nAny root cause provided will be limited to if the issue was hardware or software related and\nif it was related to a single host or a rack.\n\nReview Logs and Create Log-Based Metrics:\nFor tracking HostErrors: To proactively track host errors within your projects, create a\nlog-based metric dashboard. This will provide a visual representation of error trends.\nFor customer-facing evidence: If you need root cause information as evidence for your own\ncustomers, utilize Cloud Logging to query and export relevant logs. These logs provide\ngranular error messages and timestamps.\n\nFor timely response to errors: To ensure prompt reaction to critical host errors,\nconfigure a log-based alert.\n\nAlerting (2)\n\nFollow the Instructions here using the below query to build a log based alert on your project\nto get notified in case of a hostError.\n\nMake sure to include labels with the information you need exposed on the notification.\n\nresource.type=\"gce_instance\"\nprotoPayload.serviceName=\"compute.googleapis.com\"\n(protoPayload.methodName:\"compute.instances.hostError\" OR\noperation.producer:\"compute.instances.hostError\")\nlog_id(\"cloudaudit.googleapis.com/system_event\")\n\nResources:\n[1]\n<https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-reboots#:~:text=Getting%20support.-,Method,compute.instances.hostError,-System%20event>\n{% endblock host_error_failure_remediation %}\n\n{% block guest_os_issued_shutdown_failure_reason %}\n{status_message}\n{% endblock guest_os_issued_shutdown_failure_reason %}\n\n{% block guest_os_issued_shutdown_failure_remediation %}\nInstance {full_resource_path} shutdown was initiated from the operating system.\n\nThis is usually caused by a sudoer posix user issuing a shutdown or reboot command\nReview guest shell history to determine who or what application triggered the shutdown.\n{% endblock guest_os_issued_shutdown_failure_remediation %}\n\n{% block terminate_on_host_maintenance_failure_reason %}\n{status_message}\n{% endblock terminate_on_host_maintenance_failure_reason %}\n\n{% block terminate_on_host_maintenance_failure_remediation %}\nInstance {full_resource_path} maintenance policy is set to TERMINATE, Compute Engine\nstops your VM when there is a maintenance event where Google must move your VM to another host.\n\nIf you want to change your VM's onHostMaintenance policy to restart automatically\nor live migrate [1]. Read more about Host Events [2] and how to set your termination policies[3].\n\n[1] <https://cloud.google.com/compute/docs/instances/live-migration-process>\n[2] <https://cloud.google.com/compute/docs/instances/setting-vm-host-options>\n[3] <https://cloud.google.com/compute/docs/instances/host-maintenance-overview>\n{% endblock terminate_on_host_maintenance_failure_remediation %}\n\n{% block user_stop_failure_reason %}\nAccount {stop_account} stopped the VM.\n{% endblock user_stop_failure_reason %}\n\n{% block user_stop_failure_remediation %}\nInstance {full_resource_path} was intentionally stopped by account {stop_account}.\n\nSimply restart the VM when safe to do so by following [1]\n\n[1] <https://cloud.google.com/compute/docs/instances/stop-start-instance#restart-vm>\n{% endblock user_stop_failure_remediation %}\n\n{% block user_stop_failure_remediation_a1 %}\nInstance {full_resource_path} was intentionally stopped by account {stop_account}.\n\nNo action required. VM is currently running.\n{% endblock user_stop_failure_remediation_a1 %}\n\n{% block compute_cluster_manager_termination_failure_reason %}\nInstance {full_resource_path} was terminated by account {stop_account}.\n{% endblock compute_cluster_manager_termination_failure_reason %}\n\n{% block compute_cluster_manager_termination_failure_remediation_a1 %}\nBilling has been disabled for project/{shared_vpc_project} caused the Instance {full_resource_path} to be stopped by\naccount {stop_account}. This is because instance {full_resource_path} uses network {network_name}\non project/{shared_vpc_project}. Re-enable billing for project/{shared_vpc_project} to start the Instance {full_resource_path}.\n\nManually run this log query below in projects/{shared_vpc_project} cloud logging explorer for details.\n\n```\nprotoPayload.methodName=\"DisableResourceBilling\"\nresource.type=\"project\"\nprotoPayload.resourceName=\"projects/{shared_vpc_project}\"\n```\n\nInvestigate to ensure this was not a malicious action.\n\n[1] <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-reboots#investigating_mass_vm_shutdown_across_projects>\n[2] <https://cloud.google.com/vpc/docs/provisioning-shared-vpc#org-policies>\n[3] <https://cloud.google.com/billing/docs/how-to/modify-project#enable_billing_for_a_project>\n{% endblock compute_cluster_manager_termination_failure_remediation_a1 %}\n\n{% block scheduled_stop_policy_failure_reason %}\nInstance {full_resource_path} was terminated by account {stop_account} due to a scheduled stop policy.\n{% endblock scheduled_stop_policy_failure_reason %}\n\n{% block scheduled_stop_policy_failure_remediation %}\nNo action required. VM is currently running.\n{% endblock scheduled_stop_policy_failure_remediation %}\n\n{% block scheduled_stop_policy_failure_remediation_a1 %}\nInstance {full_resource_path} is currently shutdown. Restart the VM when safe to do so by following [1]\n[1] <https://cloud.google.com/compute/docs/instances/stop-start-instance#restart-vm>\n{% endblock scheduled_stop_policy_failure_remediation_a1 %}\n"
  },
  {
    "path": "gcpdiag/runbook/gce/templates/vpc_connectivity.jinja",
    "content": "{% block default_ingress_failure_reason %}\nConsider using recommended methods for connecting Compute Engine virtual\nmachine (VM) instance through its internal IP address:\n<https://cloud.google.com/compute/docs/connect/ssh-internal-ip>\n{% endblock default_ingress_failure_reason %}\n\n{% block default_ingress_failure_remediation %}\nIf connecting to a non-public VM and do not wish to allow external access, choose one of the following connection\noptions for VMs\n<https://cloud.google.com/compute/docs/connect/ssh-internal-ip>\nAlternatively, create/update a firewall rule to allow access\n<https://cloud.google.com/firewall/docs/using-firewalls#creating_firewall_rules>\n{% endblock default_ingress_failure_remediation %}\n\n{% block default_ingress_success_reason %}\nIngress Traffic from source IP/CIDR {address}, {protocol}:{port} to the GCE instance {name} is allowed by: {result}\n{% endblock default_ingress_success_reason %}\n\n{% block tti_ingress_failure_reason %}\nAllow ingress traffic from the VIP range 35.235.240.0/20\n<https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-ssh-errors#diagnosis_methods_for_linux_and_windows_vms>'\n{% endblock tti_ingress_failure_reason %}\n\n{% block tti_ingress_failure_remediation %}\nIf connecting to a non-public VM and do not wish to allow external access, choose one of the following connection\noptions for VMs\n<https://cloud.google.com/compute/docs/connect/ssh-internal-ip>\nAlternatively, create/update a firewall rule to allow access\n<https://cloud.google.com/firewall/docs/using-firewalls#creating_firewall_rules>\n{% endblock tti_ingress_failure_remediation %}\n\n{% block tti_ingress_success_reason %}\nIngress Traffic from source IP/CIDR {address}, {protocol}:{port} to the GCE\ninstance {name} is allowed by: {result}\n{% endblock tti_ingress_success_reason %}\n\n{% block ingress_traffic_failure_reason %}\nIngress Traffic from source IP \"{address}\", for protocol:{protocol} port:{port}\nto instance {name} is not allowed by: {result}\n{% endblock ingress_traffic_failure_reason %}\n\n{% block ingress_traffic_failure_remediation %}\nIf connecting to a non-public VM and do not wish to allow external access, choose one of the following connection\noptions for VMs\n<https://cloud.google.com/compute/docs/connect/ssh-internal-ip>\nAlternatively, create/update a firewall rule to allow access\n<https://cloud.google.com/firewall/docs/using-firewalls#creating_firewall_rules>\n{% endblock ingress_traffic_failure_remediation %}\n\n{% block ingress_traffic_success_reason %}\nIngress Traffic from source IP/CIDR {}, {}:{} to the GCE instance {} is allowed by: {}\n{% endblock ingress_traffic_success_reason %}\n"
  },
  {
    "path": "gcpdiag/runbook/gce/util/__init__.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Runbook utility.\"\"\"\n\nimport logging\nimport re\nfrom typing import List\n\nimport googleapiclient\n\nfrom gcpdiag import utils\nfrom gcpdiag.queries import gce, monitoring\nfrom gcpdiag.runbook import exceptions as runbook_exceptions\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.gce import flags\n\n\ndef ensure_instance_resolved():\n  \"\"\"Check if instance id and name are in context, try to resolve if not.\"\"\"\n  instance_id = op.get(flags.INSTANCE_ID)\n  instance_name = op.get(flags.INSTANCE_NAME)\n  if instance_id and instance_name:\n    return\n  project_id = op.get(flags.PROJECT_ID)\n  zone = op.get(flags.ZONE)\n  name_or_id = instance_name or instance_id\n\n  # Try to resolve zone from Instance ID if zone is missing\n  if not zone and instance_id:\n    try:\n      instance = gce.get_instance_by_id(project_id, instance_id)\n      if instance:\n        op.put(flags.ZONE, instance.zone)\n        op.put(flags.INSTANCE_NAME, instance.name)\n        return\n    except utils.GcpApiError as e:\n      logging.debug('Failed to resolve instance by ID: %s', e)\n      # Fallback to standard flow if resolution fails or API errors occur\n      pass\n\n  if not name_or_id:\n    raise runbook_exceptions.MissingParameterError(\n        'instance not resolved and instance_name or instance_id not in context')\n  try:\n    instance = gce.get_instance(project_id=project_id,\n                                zone=zone,\n                                instance_name=str(name_or_id))\n    op.put(flags.INSTANCE_NAME, instance.name)\n    op.put(flags.INSTANCE_ID, instance.id)\n  except googleapiclient.errors.HttpError as err:\n    if err.resp.status == 404:\n      raise runbook_exceptions.FailedStepError(\n          f'Instance {name_or_id} not found in project {project_id} '\n          f'zone {zone}.') from err\n    else:\n      raise utils.GcpApiError(err) from err\n\n\ndef search_pattern_in_serial_logs(patterns: List,\n                                  contents: List[str],\n                                  operator='OR'):\n  # logs are by default sorted from oldest to newest. revert to get the newest first\n  reversed_contents = reversed(contents)\n  pattern = ''\n  if operator == 'OR':\n    pattern = '|'.join(patterns)\n    regex = re.compile(pattern, re.IGNORECASE)\n    for log in reversed_contents:\n      result = regex.search(log)\n      if result:\n        return True\n\n  elif operator == 'AND':\n    contents_str = ' '.join(reversed_contents)\n    pattern_arr = [re.compile(string) for string in patterns]\n    if all(p.search(contents_str) for p in pattern_arr):\n      return True\n  return False\n\n\ndef user_has_valid_ssh_key(local_user, keys: List[str], key_type=None) -> bool:\n  \"\"\"Given a list of keys, check if it has *at least one* valid SSH\n   key for the local_user. A key is valid if:\n    - the local_user matches the key username\n    - a the key type matches if specified.\n  return:\n    True if at least one valid key or False if none is valid\n   \"\"\"\n  pattern = r'(?P<user>\\w+):(?P<type>[\\w-]+) \\S+(?: \\S+|)(?: google-ssh {\"userName\":\"\\S+\",\"expireOn\":\"(?P<expire_on>[^\"]+)\"}|$)'  # pylint:disable=line-too-long\n  # pattern the input string into key_value and if formatted the ssh info\n  for key in keys:\n    key = key.strip()\n    m = re.search(pattern, key)\n    # Check if 'testuser' is in the user_info and 'google-ssh' is in the ssh_info\n    # TODO: Check later if keyname and username can be different in an SSH key.\n    if m:\n      valid = local_user == m.group('user')\n      # Check expected key_type is the same as what's in the keyvalue\n      if key_type:\n        valid = key_type == m.group('type')\n      if valid:\n        return valid\n  return False\n\n\ndef ops_agent_installed(project_id, vm_id) -> bool:\n  within_hours = 8\n  within_str = 'within %dh, d\\'%s\\'' % (within_hours,\n                                        monitoring.period_aligned_now(5))\n  ops_agent_q = monitoring.query(\n      project_id, \"\"\"\n            fetch gce_instance\n            | metric 'agent.googleapis.com/agent/uptime'\n            | filter (resource.instance_id == '{}')\n            | align rate(1m)\n            | every 1m\n            | group_by [], [value_uptime_max: max(value.uptime)]\n            | {}\n          \"\"\".format(vm_id, within_str))\n  if ops_agent_q:\n    return True\n  return False\n"
  },
  {
    "path": "gcpdiag/runbook/gce/util/util_test.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\" Test Class for GCE runbook util\"\"\"\nimport unittest\nfrom unittest import mock\n\nimport googleapiclient\n\nfrom gcpdiag.queries import gce\nfrom gcpdiag.runbook import exceptions as runbook_exceptions\nfrom gcpdiag.runbook.gce import flags, util\n\n\nclass TestEnsureInstanceResolved(unittest.TestCase):\n  \"\"\"Test class for ensure_instance_resolved\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    self.mock_get = self.enterContext(mock.patch('gcpdiag.runbook.op.get'))\n    self.mock_put = self.enterContext(mock.patch('gcpdiag.runbook.op.put'))\n    self.mock_get_instance = self.enterContext(\n        mock.patch('gcpdiag.queries.gce.get_instance'))\n\n  def test_instance_already_resolved(self):\n    self.mock_get.side_effect = {\n        flags.INSTANCE_ID: '123',\n        flags.INSTANCE_NAME: 'test-instance'\n    }.get\n    util.ensure_instance_resolved()\n    self.mock_get_instance.assert_not_called()\n\n  def test_instance_resolved_by_name(self):\n    instance = mock.MagicMock(spec=gce.Instance)\n    instance.name = 'test-instance'\n    instance.id = '123'\n    self.mock_get_instance.return_value = instance\n    self.mock_get.side_effect = {\n        flags.PROJECT_ID: 'test-project',\n        flags.ZONE: 'us-central1-a',\n        flags.INSTANCE_NAME: 'test-instance',\n        flags.INSTANCE_ID: None\n    }.get\n    util.ensure_instance_resolved()\n    self.mock_get_instance.assert_called_with(project_id='test-project',\n                                              zone='us-central1-a',\n                                              instance_name='test-instance')\n    self.mock_put.assert_any_call(flags.INSTANCE_NAME, 'test-instance')\n    self.mock_put.assert_any_call(flags.INSTANCE_ID, '123')\n\n  def test_instance_resolved_by_id(self):\n    instance = mock.MagicMock(spec=gce.Instance)\n    instance.name = 'test-instance'\n    instance.id = '123'\n    self.mock_get_instance.return_value = instance\n    self.mock_get.side_effect = {\n        flags.PROJECT_ID: 'test-project',\n        flags.ZONE: 'us-central1-a',\n        flags.INSTANCE_NAME: None,\n        flags.INSTANCE_ID: '123'\n    }.get\n    util.ensure_instance_resolved()\n    self.mock_get_instance.assert_called_with(project_id='test-project',\n                                              zone='us-central1-a',\n                                              instance_name='123')\n    self.mock_put.assert_any_call(flags.INSTANCE_NAME, 'test-instance')\n    self.mock_put.assert_any_call(flags.INSTANCE_ID, '123')\n\n  def test_missing_parameters(self):\n    self.mock_get.side_effect = {\n        flags.PROJECT_ID: 'test-project',\n        flags.ZONE: 'us-central1-a',\n        flags.INSTANCE_NAME: None,\n        flags.INSTANCE_ID: None\n    }.get\n    with self.assertRaises(runbook_exceptions.MissingParameterError):\n      util.ensure_instance_resolved()\n\n  def test_instance_not_found(self):\n    self.mock_get.side_effect = {\n        flags.PROJECT_ID: 'test-project',\n        flags.ZONE: 'us-central1-a',\n        flags.INSTANCE_NAME: 'test-instance',\n        flags.INSTANCE_ID: None\n    }.get\n    mock_resp = mock.MagicMock(status=404)\n    self.mock_get_instance.side_effect = googleapiclient.errors.HttpError(\n        resp=mock_resp, content=b'')\n    with self.assertRaises(runbook_exceptions.FailedStepError):\n      util.ensure_instance_resolved()\n\n\nclass TestUtil():\n  \"\"\"Test Class for GCE runbook util \"\"\"\n  keys = [\n      'test:ecdsa-sha2-nistp256 AA/NR0=',\n      ('testuser:ssh-rsa AAA/HlFH+LC/+yt/yt/yt/yt+yt/yt+YT '\n       'google-ssh {\"userName\":\"testuser@company.com\",\"expireOn\":\"2023-11-16T18:23:23+0000\"}'\n      )\n  ]\n\n  def test_has_at_least_one_valid_key(self):\n    local_user = 'test'\n    assert util.user_has_valid_ssh_key(local_user=local_user, keys=self.keys)\n\n  def test_has_google_ssh_comment(self):\n    # We don't check for gcloud/in browser ssh added keys\n    local_user = 'testuser'\n    assert util.user_has_valid_ssh_key(local_user=local_user, keys=self.keys)\n\n  def test_has_no_valid_key(self):\n    local_user = 'notvalid'\n    assert not util.user_has_valid_ssh_key(local_user=local_user,\n                                           keys=self.keys)\n\n  def test_no_keys_present(self):\n    local_user = 'notvalid'\n    assert not util.user_has_valid_ssh_key(local_user=local_user, keys=[])\n\n  def test_has_at_least_one_valid_key_and_type(self):\n    local_user = 'test'\n    key_type = 'ssh-rsa'\n    assert util.user_has_valid_ssh_key(local_user=local_user,\n                                       keys=self.keys,\n                                       key_type=key_type)\n\n  def test_has_at_least_one_valid_key_and_mismatched_type(self):\n    local_user = 'test'\n    key_type = 'ssh-dss'\n    assert not util.user_has_valid_ssh_key(\n        local_user=local_user, keys=self.keys, key_type=key_type)\n\n  def test_regex_pattern_exist_in_logs(self):\n    serial_log = ['one line of log', 'daemon [123]: started']\n    pattern = [r'daemon \\[\\d+\\]:']\n    assert util.search_pattern_in_serial_logs(pattern, serial_log)\n    pattern = [r'daemon \\[\\d+\\]:', r'line (of|x)']\n    assert util.search_pattern_in_serial_logs(pattern, serial_log, 'AND')\n\n  def test_one_pattern_exist_in_logs(self):\n    serial_log = ['one line of log', 'second string test']\n    pattern = ['line', 'long']\n    assert util.search_pattern_in_serial_logs(pattern, serial_log)\n    pattern = ['line', r'log \\w+']\n    assert util.search_pattern_in_serial_logs(pattern, serial_log)\n    pattern = ['line', r'log \\w+']\n    assert not util.search_pattern_in_serial_logs(pattern, [])\n\n  def test_all_pattern_exist_logs(self):\n    serial_log = ['one line of log', 'second 20 string', 'third']\n    pattern = ['line', r'second \\d+']\n    assert util.search_pattern_in_serial_logs(pattern, serial_log, 'AND')\n    pattern = [r'second \\d+ \\w+', 'third']\n    assert util.search_pattern_in_serial_logs(pattern, serial_log, 'AND')\n    pattern = [r'second \\d+ \\w+', 'third', 'invalid']\n    assert not util.search_pattern_in_serial_logs(pattern, [], 'AND')\n"
  },
  {
    "path": "gcpdiag/runbook/gce/vm_creation.py",
    "content": "# Copyright 2025 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Runbook for diagnosing VM creation issues.\"\"\"\n\nfrom datetime import datetime\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import runbook\nfrom gcpdiag.queries import crm, logs\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.crm import generalized_steps as crm_gs\nfrom gcpdiag.runbook.gce import flags\n\nVM_CREATION_FAILURE_FILTER = '''\n    resource.type=\"gce_instance\"\n    log_id(\"cloudaudit.googleapis.com/activity\")\n    protoPayload.resourceName=\"projects/{PROJECT_ID}/zones/{ZONE}/instances/{INSTANCE_NAME}\"\n    protoPayload.methodName=~\"compute.instances.insert\"\n    severity=ERROR AND\n    (protoPayload.status.message=\"QUOTA_EXCEEDED\" OR\n    protoPayload.response.error.errors.reason=\"alreadyExists\" OR\n    protoPayload.response.error.message=~\"Required '.*' permission for '.*'\")\n    '''\n\n\nclass VmCreation(runbook.DiagnosticTree):\n  \"\"\"Runbook for diagnosing VM creation issues.\n\n    This runbook helps identify and resolve issues related to VM creation in Google Cloud.\n\n    - Checks for quota-related issues.\n    - Checks for permission-related issues.\n    - Checks for conflicts such as resource already existing.\n  \"\"\"\n  parameters = {\n      flags.PROJECT_ID: {\n          'type': str,\n          'help': 'The Project ID which will host the VM to be created.',\n          'required': True\n      },\n      flags.INSTANCE_NAME: {\n          'type': str,\n          'help': 'The name of the VM to be created.',\n          'required': True\n      },\n      flags.ZONE: {\n          'type': str,\n          'help': 'The Google Cloud zone of the VM to be created.',\n          'required': True\n      },\n      flags.PRINCIPAL: {\n          'type': str,\n          'help': 'The authenticated principal that initiated the VM creation.'\n      },\n      flags.START_TIME: {\n          'type':\n              datetime,\n          'help':\n              'The start window to investigate vm termination. Format: YYYY-MM-DDTHH:MM:SSZ'\n      },\n      flags.END_TIME: {\n          'type':\n              datetime,\n          'help':\n              'The end window for the investigation. Format: YYYY-MM-DDTHH:MM:SSZ'\n      },\n      flags.CHECK_ZONE_SEPARATION_POLICY: {\n          'type': bool,\n          'default': False,\n          'help': 'Check if the zone separation policy is enforced.'\n      }\n  }\n\n  def build_tree(self):\n    \"\"\"Construct the diagnostic tree with appropriate steps.\"\"\"\n    start = runbook.StartStep()\n    # add them to your tree\n    self.add_start(start)\n    self.add_step(parent=start, child=InvestigateVmCreationLogFailure())\n    if op.get(flags.CHECK_ZONE_SEPARATION_POLICY):\n      self.add_step(\n          parent=start,\n          child=crm_gs.OrgPolicyCheck(\n              constraint='constraints/gcp.requiresPhysicalZoneSeparation',\n              is_enforced=True,\n          ),\n      )\n    # Ending the vm creation runbook.\n    self.add_end(runbook.EndStep())\n\n\nclass InvestigateVmCreationLogFailure(runbook.Gateway):\n  \"\"\"Investigate VM creation failure logs.\n\n    This step queries logs to identify the root cause of VM creation failures,\n    such as quota issues, permission errors, or resource conflicts.\n    \"\"\"\n  template = 'vm_creation::logs'\n\n  def execute(self):\n    \"\"\"Query logs to determine the cause of VM creation failure.\"\"\"\n    project = crm.get_project(op.get(flags.PROJECT_ID))\n    res = logs.realtime_query(project_id=op.get(flags.PROJECT_ID),\n                              filter_str=VM_CREATION_FAILURE_FILTER.format(\n                                  PROJECT_ID=op.get(flags.PROJECT_ID),\n                                  ZONE=op.get(flags.ZONE),\n                                  INSTANCE_NAME=op.get(flags.INSTANCE_NAME)),\n                              start_time=datetime.now(),\n                              end_time=op.get(flags.END_TIME))\n\n    if res:\n      entry = res[0]\n      error_message = get_path(\n          entry, ('protoPayload', 'response', 'error', 'errors', 0, 'message'))\n      error_reason = get_path(\n          entry, ('protoPayload', 'response', 'error', 'errors', 0, 'reason'))\n      status_message = get_path(entry, ('protoPayload', 'status', 'message'))\n      if status_message and status_message == 'QUOTA_EXCEEDED':\n        error_message = status_message\n\n        metric_name = get_path(entry, ('protoPayload', 'status', 'details',\n                                       'quotaExceeded', 'metricName'))\n        limit = get_path(\n            entry,\n            ('protoPayload', 'status', 'details', 'quotaExceeded', 'limit'))\n        limit_name = get_path(\n            entry,\n            ('protoPayload', 'status', 'details', 'quotaExceeded', 'limitName'))\n\n        op.add_failed(project,\n                      reason=op.prep_msg(op.FAILURE_REASON_ALT1,\n                                         error_message=error_message),\n                      remediation=op.prep_msg(op.FAILURE_REMEDIATION_ALT1,\n                                              metric_name=metric_name,\n                                              limit=limit,\n                                              limit_name=limit_name))\n      elif error_reason and error_reason == 'alreadyExists':\n        op.add_failed(project,\n                      reason=op.prep_msg(op.FAILURE_REASON,\n                                         error_message=error_message),\n                      remediation=op.prep_msg(\n                          op.FAILURE_REMEDIATION,\n                          zone=op.get(flags.ZONE),\n                          project_id=op.get(flags.PROJECT_ID),\n                          instance_name=op.get(flags.INSTANCE_NAME)))\n      elif error_reason and error_reason == 'forbidden':\n        op.add_failed(project,\n                      reason=op.prep_msg(op.FAILURE_REASON_ALT2,\n                                         error_message=error_message),\n                      remediation=op.prep_msg(op.FAILURE_REMEDIATION_ALT2))\n"
  },
  {
    "path": "gcpdiag/runbook/gce/vm_creation_test.py",
    "content": "# Copyright 2025 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test class for gce/VmCreation\"\"\"\n\nimport datetime\nimport unittest\nfrom unittest import mock\n\nfrom gcpdiag import config\nfrom gcpdiag.queries import apis_stub\nfrom gcpdiag.runbook import gce, models, op, snapshot_test_base\nfrom gcpdiag.runbook.crm import generalized_steps as crm_gs\nfrom gcpdiag.runbook.gce import flags, vm_creation\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  \"\"\"Snapshot tests for VM creation runbook.\"\"\"\n  rule_pkg = gce\n  runbook_name = 'gce/vm-creation'\n  config.init({'auto': True, 'interface': 'cli'})\n\n  rule_parameters = [{\n      'project_id': 'gcpdiag-gce6-aaaa',\n      'instance_name': 'existing-instance',\n      'zone': 'us-central1-c'\n  }, {\n      'project_id': 'gcpdiag-gce6-aaaa',\n      'instance_name': 'non-existing-gpu-instance',\n      'zone': 'us-central1-c'\n  }]\n\n\nclass VmCreationUnitTests(unittest.TestCase):\n  \"\"\"Unit tests for VmCreation to cover lines not reached by snapshots.\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    self.enterContext(\n        mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub))\n    self.mock_interface = mock.create_autospec(op.InteractionInterface,\n                                               instance=True)\n    self.mock_interface.rm = mock.Mock()\n    self.operator = op.Operator(interface=self.mock_interface)\n    self.operator.run_id = 'test-run'\n    self.params = {\n        flags.PROJECT_ID: 'gcpdiag-gce6-aaaa',\n        flags.ZONE: 'us-central1-a',\n        flags.INSTANCE_NAME: 'test-instance',\n        flags.END_TIME: datetime.datetime(2025, 1, 1),\n        'start_time': datetime.datetime(2025, 1, 1),\n    }\n    self.operator.parameters = self.params\n    self.operator.messages = models.Messages()\n    self.operator.messages.update({\n        'FAILURE_REASON': 'Reason {error_message}',\n        'FAILURE_REMEDIATION': 'Remedy',\n        'FAILURE_REASON_ALT1': 'Quota Reason {error_message}',\n        'FAILURE_REMEDIATION_ALT1': 'Quota Remedy',\n        'FAILURE_REASON_ALT2': 'Forbidden Reason {error_message}',\n        'FAILURE_REMEDIATION_ALT2': 'Forbidden Remedy',\n    })\n    self.op_context = self.enterContext(op.operator_context(self.operator))\n\n  def _get_base_entry(self):\n    \"\"\"Returns a baseline log entry structure to satisfy initial get_path calls.\"\"\"\n    return {\n        'protoPayload': {\n            'status': {\n                'message': ''\n            },\n            'response': {\n                'error': {\n                    'errors': [{\n                        'message': '',\n                        'reason': ''\n                    }]\n                }\n            }\n        }\n    }\n\n  def test_build_tree_logic_zone_separation_true(self):\n    self.params[flags.CHECK_ZONE_SEPARATION_POLICY] = True\n    runbook_instance = vm_creation.VmCreation()\n    runbook_instance.build_tree()\n    step_types = [type(s) for s in runbook_instance.start.steps]\n    self.assertIn(crm_gs.OrgPolicyCheck, step_types)\n\n  def test_build_tree_logic_zone_separation_false(self):\n    self.params[flags.CHECK_ZONE_SEPARATION_POLICY] = False\n    runbook_instance = vm_creation.VmCreation()\n    runbook_instance.build_tree()\n    step_types = [type(s) for s in runbook_instance.start.steps]\n    self.assertNotIn(crm_gs.OrgPolicyCheck, step_types)\n\n  @mock.patch('gcpdiag.queries.logs.realtime_query')\n  def test_execute_quota_exceeded(self, mock_query):\n    entry = self._get_base_entry()\n    entry['protoPayload']['status'] = {\n        'message': 'QUOTA_EXCEEDED',\n        'details': {\n            'quotaExceeded': {\n                'metricName': 'CPUS',\n                'limit': 10,\n                'limitName': 'CPUS-limit'\n            }\n        }\n    }\n    mock_query.return_value = [entry]\n    step = vm_creation.InvestigateVmCreationLogFailure()\n    self.operator.set_step(step)\n    step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n  @mock.patch('gcpdiag.queries.logs.realtime_query')\n  def test_execute_already_exists(self, mock_query):\n    entry = self._get_base_entry()\n    entry['protoPayload']['response']['error']['errors'][0] = {\n        'reason': 'alreadyExists',\n        'message': 'Instance exists'\n    }\n    mock_query.return_value = [entry]\n    step = vm_creation.InvestigateVmCreationLogFailure()\n    self.operator.set_step(step)\n    step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n  @mock.patch('gcpdiag.queries.logs.realtime_query')\n  def test_execute_forbidden(self, mock_query):\n    entry = self._get_base_entry()\n    entry['protoPayload']['response']['error']['errors'][0] = {\n        'reason': 'forbidden',\n        'message': 'Permission denied'\n    }\n    mock_query.return_value = [entry]\n    step = vm_creation.InvestigateVmCreationLogFailure()\n    self.operator.set_step(step)\n    step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n  @mock.patch('gcpdiag.queries.logs.realtime_query')\n  def test_execute_no_logs(self, mock_query):\n    mock_query.return_value = []\n    step = vm_creation.InvestigateVmCreationLogFailure()\n    self.operator.set_step(step)\n    step.execute()\n    self.mock_interface.add_failed.assert_not_called()\n"
  },
  {
    "path": "gcpdiag/runbook/gce/vm_performance.py",
    "content": "# Copyright 2024 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Module containing VM performance diagnostic tree and custom steps\"\"\"\n\nimport json\nfrom datetime import datetime, timedelta, timezone\nfrom os.path import dirname\n\nimport googleapiclient.errors\n\nfrom gcpdiag import config, runbook\nfrom gcpdiag.queries import crm, gce, logs, monitoring\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.gce import constants as gce_const\nfrom gcpdiag.runbook.gce import flags\nfrom gcpdiag.runbook.gce import generalized_steps as gce_gs\n\nIO_LATENCY_THRESHOLD = 1500\n\n\nclass VmPerformance(runbook.DiagnosticTree):\n  \"\"\" Google Compute Engine VM performance checks\n\n  This runbook is designed to assist you in investigating and understanding the underlying reasons\n  behind the performance issues of your Google Compute Engine VMs within Google Cloud Platform.\n\n  Key Investigation Areas:\n\n    - High CPU utilisation\n    - CPU Over-commitment for E2 or Sole-Tenant VMs\n    - High Memory utilisation\n    - Disk space high utilisation\n    - High Disk IOPS utilisation\n    - High Disk Throughput utilisation\n    - Disk Health check\n    - Disk IO latency check\n    - Disk Slowness check\n    - Check for Live Migrations\n    - Usual Error checks in Serial console logs\n  \"\"\"\n\n  # Specify parameters common to all steps in the diagnostic tree class.\n  parameters = {\n      flags.PROJECT_ID: {\n          'type': str,\n          'help': (\n              'The Project ID associated with the VM having performance issues.'\n          ),\n          'required': True\n      },\n      flags.NAME: {\n          'type':\n              str,\n          'help':\n              'The name of the VM having performance issues. Or provide the id i.e -p name=<int>',\n          'deprecated':\n              True,\n          'new_parameter':\n              'instance_name',\n      },\n      flags.INSTANCE_NAME: {\n          'type':\n              str,\n          'help':\n              'The name of the VM having performance issues. Or provide the id i.e -p name=<int>',\n          'required':\n              True\n      },\n      flags.ZONE: {\n          'type':\n              str,\n          'help':\n              'The Google Cloud zone where the VM having performance issues, is located.',\n          'required':\n              True\n      },\n      flags.START_TIME: {\n          'type': datetime,\n          'help':\n              'The start window(in UTC) to investigate vm performance issues.'\n              'Format: YYYY-MM-DDTHH:MM:SSZ'\n      },\n      flags.END_TIME: {\n          'type':\n              datetime,\n          'help':\n              'The end window(in UTC) for the investigation. Format: YYYY-MM-DDTHH:MM:SSZ'\n      }\n  }\n\n  def legacy_parameter_handler(self, parameters):\n    if flags.NAME in parameters:\n      parameters[flags.INSTANCE_NAME] = parameters.pop(flags.NAME)\n\n  def build_tree(self):\n    \"\"\"Construct the diagnostic tree with appropriate steps.\"\"\"\n\n    start = VmPerformanceStart()\n    cpu_check = gce_gs.HighVmCpuUtilization()\n    cpu_check.project_id = op.get(flags.PROJECT_ID)\n    cpu_check.zone = op.get(flags.ZONE)\n    cpu_check.instance_name = op.get(flags.INSTANCE_NAME)\n    mem_check = gce_gs.HighVmMemoryUtilization()\n    mem_check.project_id = op.get(flags.PROJECT_ID)\n    mem_check.zone = op.get(flags.ZONE)\n    mem_check.instance_name = op.get(flags.INSTANCE_NAME)\n    disk_util_check = gce_gs.HighVmDiskUtilization()\n    disk_util_check.project_id = op.get(flags.PROJECT_ID)\n    disk_util_check.zone = op.get(flags.ZONE)\n    disk_util_check.instance_name = op.get(flags.INSTANCE_NAME)\n\n    vm_lifecycle_check = gce_gs.VmLifecycleState()\n    vm_lifecycle_check.expected_lifecycle_status = 'RUNNING'\n    vm_lifecycle_check.project_id = op.get(flags.PROJECT_ID)\n    vm_lifecycle_check.zone = op.get(flags.ZONE)\n    vm_lifecycle_check.instance_name = op.get(flags.INSTANCE_NAME)\n\n    self.add_start(step=start)\n    self.add_step(parent=start, child=vm_lifecycle_check)\n    self.add_step(parent=start, child=cpu_check)\n    self.add_step(parent=start, child=mem_check)\n    self.add_step(parent=cpu_check, child=CpuOvercommitmentCheck())\n    self.add_step(parent=start, child=DiskHealthCheck())\n    self.add_step(parent=start, child=disk_util_check)\n    self.add_step(parent=start, child=DiskAvgIOLatencyCheck())\n\n    # Check for PD slow Reads/Writes\n    slow_disk_io = gce_gs.VmSerialLogsCheck()\n    slow_disk_io.project_id = op.get(flags.PROJECT_ID)\n    slow_disk_io.zone = op.get(flags.ZONE)\n    slow_disk_io.instance_name = op.get(flags.INSTANCE_NAME)\n    slow_disk_io.template = 'vm_performance::slow_disk_io'\n    slow_disk_io.negative_pattern = gce_const.SLOW_DISK_READS\n    self.add_step(parent=disk_util_check, child=slow_disk_io)\n\n    # Checking for Filesystem corruption related errors\n    fs_corruption = gce_gs.VmSerialLogsCheck()\n    fs_corruption.project_id = op.get(flags.PROJECT_ID)\n    fs_corruption.zone = op.get(flags.ZONE)\n    fs_corruption.instance_name = op.get(flags.INSTANCE_NAME)\n    fs_corruption.template = 'vm_serial_log::linux_fs_corruption'\n    fs_corruption.negative_pattern = gce_const.FS_CORRUPTION_MSG\n    self.add_step(parent=disk_util_check, child=fs_corruption)\n\n    self.add_step(parent=start, child=CheckLiveMigrations())\n\n    self.add_end(step=VmPerformanceEnd())\n\n\nclass VmPerformanceStart(runbook.StartStep):\n  \"\"\"Fetching VM details.\"\"\"\n\n  template = 'vm_attributes::running'\n\n  def execute(self):\n    \"\"\"Fetching VM details\"\"\"\n\n    project = crm.get_project(op.get(flags.PROJECT_ID))\n    try:\n      vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID),\n                            zone=op.get(flags.ZONE),\n                            instance_name=op.get(flags.INSTANCE_NAME))\n    except googleapiclient.errors.HttpError:\n      op.add_skipped(\n          project,\n          reason=('Instance {} does not exist in zone {} or project {}').format(\n              op.get(flags.INSTANCE_NAME), op.get(flags.ZONE),\n              op.get(flags.PROJECT_ID)))\n    else:\n      if vm and vm.is_running:\n        # Check for instance id and instance name\n        if not op.get(flags.ID):\n          op.put(flags.ID, vm.id)\n        elif not op.get(flags.INSTANCE_NAME):\n          op.put(flags.INSTANCE_NAME, vm.name)\n      else:\n        op.add_failed(vm,\n                      reason=op.prep_msg(op.FAILURE_REASON,\n                                         full_resource_path=vm.full_path,\n                                         status=vm.status),\n                      remediation=op.prep_msg(op.FAILURE_REMEDIATION,\n                                              full_resource_path=vm.full_path,\n                                              status=vm.status))\n\n\nclass CheckLiveMigrations(runbook.Step):\n  \"\"\"Checking if live migrations happened for the instance\"\"\"\n\n  template = 'vm_performance::live_migrations'\n\n  def execute(self):\n    \"\"\"Checking if live migrations happened for the instance\"\"\"\n\n    vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID),\n                          zone=op.get(flags.ZONE),\n                          instance_name=op.get(flags.INSTANCE_NAME))\n\n    logging_filter = '''protoPayload.methodName=~\"compute.instances.migrateOnHostMaintenance\"'''\n    log_entries = logs.realtime_query(\n        project_id=op.get(flags.PROJECT_ID),\n        filter_str=f'{logging_filter}\\nresource.labels.instance_id=\"{vm.id}\"',\n        start_time=op.get(flags.START_TIME),\n        end_time=op.get(flags.END_TIME))\n\n    time_frame_list = [op.get(flags.START_TIME).strftime('%Y/%m/%d %H:%M:%S')]\n    if log_entries:\n      for log in log_entries:\n        start_time_val = datetime.strptime(\n            log['timestamp'],\n            '%Y-%m-%dT%H:%M:%S.%fZ').strftime('%Y/%m/%d %H:%M:%S')\n        time_frame_list.append(start_time_val)\n        op.info(('\\n\\nLive Migration Detected at {}, Checking further\\n\\n'\n                ).format(start_time_val))\n      end_time = op.get(flags.END_TIME).strftime('%Y/%m/%d %H:%M:%S')\n      time_frame_list.append(end_time)\n      i = 0\n      for times in time_frame_list:\n        if i < (len(time_frame_list) - 1):\n          io_util = DiskIopsThroughputUtilisationChecks()\n          i += 1\n          io_util.start_time = times\n          io_util.end_time = time_frame_list[i]\n          self.add_child(io_util)\n\n        #if op.step_failed(io_util.run_id):\n        #    op.add_failed(vm,\n        #                  reason=op.prep_msg(op.FAILURE_REASON),\n        #                  remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n    else:\n      op.add_ok(vm, reason=op.prep_msg(op.SUCCESS_REASON))\n      self.add_child(DiskIopsThroughputUtilisationChecks())\n\n\nclass DiskHealthCheck(runbook.Step):\n  \"\"\"Disk Health check\"\"\"\n\n  template = 'vm_performance::disk_health_check'\n\n  def execute(self):\n    \"\"\"Checking if instance disks are healthy\"\"\"\n\n    vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID),\n                          zone=op.get(flags.ZONE),\n                          instance_name=op.get(flags.INSTANCE_NAME))\n\n    start_formatted_string = op.get(\n        flags.START_TIME).strftime('%Y/%m/%d %H:%M:%S')\n    end_formatted_string = op.get(flags.END_TIME).strftime('%Y/%m/%d %H:%M:%S')\n    within_str = f'within d\\'{start_formatted_string}\\', d\\'{end_formatted_string}\\''\n\n    for disk in vm.disks:\n      pd_health_metrics = monitoring.query(\n          op.get(flags.PROJECT_ID), \"\"\"\n            fetch gce_instance\n              | metric 'compute.googleapis.com/instance/disk/performance_status'\n              | filter (metric.performance_status != 'Healthy')\n              | filter (resource.instance_id == '{}') &&\n                (metric.device_name == '{}')\n              | group_by 3m,\n                  [value_performance_status_fraction_true:\n                    fraction_true(value.performance_status)]\n              | every 3m\n              | filter value_performance_status_fraction_true > 0\n              | {}\n            \"\"\".format(vm.id, disk['deviceName'], within_str))\n\n      if pd_health_metrics:\n        op.add_failed(vm,\n                      reason=op.prep_msg(op.FAILURE_REASON,\n                                         disk_name=disk['deviceName']),\n                      remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n      else:\n        op.add_ok(vm,\n                  reason=op.prep_msg(op.SUCCESS_REASON,\n                                     disk_name=disk['deviceName']))\n\n\nclass CpuOvercommitmentCheck(runbook.Step):\n  \"\"\"Checking if CPU overcommited beyond threshold\"\"\"\n\n  def execute(self):\n    \"\"\"Checking if CPU is overcommited\"\"\"\n    cpu_count = 1000\n    start_formatted_string = op.get(\n        flags.START_TIME).strftime('%Y/%m/%d %H:%M:%S')\n    end_formatted_string = op.get(flags.END_TIME).strftime('%Y/%m/%d %H:%M:%S')\n    within_str = f'within d\\'{start_formatted_string}\\', d\\'{end_formatted_string}\\''\n\n    vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID),\n                          zone=op.get(flags.ZONE),\n                          instance_name=op.get(flags.INSTANCE_NAME))\n\n    op.info(f'vm.min_cpu_platform: {vm.min_cpu_platform()}')\n\n    if vm.is_sole_tenant_vm or 'e2' in vm.machine_type():\n\n      start_dt_pst = datetime.strptime(vm.laststarttimestamp(),\n                                       '%Y-%m-%dT%H:%M:%S.%f%z')\n      start_dt_utc = start_dt_pst.astimezone(timezone.utc)\n      start_dt_utc_plus_5_mins = start_dt_utc + timedelta(minutes=5)\n      current_time_utc = datetime.now(timezone.utc)\n      within_hours = 9\n      if (start_dt_utc_plus_5_mins > current_time_utc or\n          not vm.is_running) and vm.laststoptimestamp():\n        # Instance just starting up, CpuCount might not be available currently via metrics.\n        # Use instance's last stop time as EndTime for monitoring query\n        stop_dt_pst = datetime.strptime(vm.laststoptimestamp(),\n                                        '%Y-%m-%dT%H:%M:%S.%f%z')\n        stop_dt_utc = stop_dt_pst.astimezone(timezone.utc)\n        end_formatted_string = stop_dt_utc.strftime('%Y/%m/%d %H:%M:%S')\n        within_str = 'within %dh, d\\'%s\\'' % (within_hours,\n                                              end_formatted_string)\n      else:\n        within_str = f'within d\\'{start_formatted_string}\\', d\\'{end_formatted_string}\\''\n\n      try:\n        cpu_count_query = monitoring.query(\n            op.get(flags.PROJECT_ID), \"\"\"\n                    fetch gce_instance\n                    | metric 'compute.googleapis.com/instance/cpu/guest_visible_vcpus'\n                    | filter (resource.instance_id == '{}')\n                    | group_by 1m, [value_guest_visible_vcpus_mean:\n                        mean(value.guest_visible_vcpus)]\n                    | every 1m\n                    | group_by [],\n                        [value_guest_visible_vcpus_mean_aggregate:\n                        aggregate(value_guest_visible_vcpus_mean)]\n                    | {}\n                \"\"\".format(vm.id, within_str))\n      except googleapiclient.errors.HttpError:\n        op.add_failed(\n            op.get(flags.PROJECT_ID),\n            reason=('Not able to pull CPU count for instance {}').format(\n                op.get(flags.INSTANCE_NAME)),\n            remediation='')\n      else:\n        if cpu_count_query:\n          cpu_count = int(list(cpu_count_query.values())[0]['values'][0][0])\n        else:\n          op.info((\n              'CPU count info not available for the instance.\\n'\n              'Please start the VM {} if it is not in running state.\\n').format(\n                  vm.short_path))\n          return\n\n      # an acceptable average Scheduler Wait Time is 20 ms/s per vCPU.\n      utilization_threshold = cpu_count * 20\n\n      cpu_overcomit_metrics = monitoring.query(\n          op.get(flags.PROJECT_ID), \"\"\"\n                    fetch gce_instance\n                    | metric 'compute.googleapis.com/instance/cpu/scheduler_wait_time'\n                    | filter (resource.instance_id == '{}')\n                    | group_by [resource.instance_id], 1m,\n                        [value_scheduler_wait_time_max: max(value.scheduler_wait_time)]\n                    | every 1m\n                    | filter (cast_units(value_scheduler_wait_time_max,\"\")*1000) >= {}\n                    | {}\n                \"\"\".format(vm.id, utilization_threshold, within_str))\n      if cpu_overcomit_metrics:\n        op.add_failed(\n            vm,\n            reason=\n            ('CPU for the VM {} is over committed beyond acceptable limits: {} ms/s'\n            ).format(vm.name, utilization_threshold),\n            remediation='')\n      else:\n        op.add_ok(vm, reason='VM CPU is not overcommited.\\n')\n    else:\n      op.add_skipped(vm,\n                     reason='VM is neither a Sole Tenent VM nor an E2 instance,'\n                     'Skipping CPU Overcommitment checks')\n\n\nclass DiskAvgIOLatencyCheck(runbook.Step):\n  \"\"\"Check Disk Avg IO Latency\"\"\"\n\n  template = 'vm_performance::disk_io_latency_check'\n\n  def execute(self):\n    \"\"\"Checking if Instance's Disk Avg IO Latency is within optimal limits\"\"\"\n\n    vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID),\n                          zone=op.get(flags.ZONE),\n                          instance_name=op.get(flags.INSTANCE_NAME))\n\n    start_formatted_string = op.get(\n        flags.START_TIME).strftime('%Y/%m/%d %H:%M:%S')\n    end_formatted_string = op.get(flags.END_TIME).strftime('%Y/%m/%d %H:%M:%S')\n    within_str = f'within d\\'{start_formatted_string}\\', d\\'{end_formatted_string}\\''\n\n    # Fetch list of disks for the instance\n    disk_list = gce.get_all_disks_of_instance(op.get_context(), vm.zone,\n                                              vm.name)\n    disk: gce.Disk\n    for disks in disk_list.items():\n      disk = disks[1]\n      if disk.type in ['pd-balanced', 'pd-ssd', 'pd-standard', 'pd-extreme']:\n        # Checking Disk IO latency for the instance -\n        disk_io_latency = monitoring.query(\n            op.get(flags.PROJECT_ID), \"\"\"\n          fetch gce_instance\n          | metric 'compute.googleapis.com/instance/disk/average_io_latency'\n          | filter (resource.instance_id == '{}')\n            &&\n              (metric.device_name == '{}'\n              && metric.storage_type == '{}')\n          | group_by 1m, [value_average_io_latency_mean: mean(value.average_io_latency)]\n          | every 1m\n          | group_by [metric.storage_type],\n            [value_average_io_latency_mean_percentile:\n            percentile(value_average_io_latency_mean, 99)]\n          | filter(cast_units(value_average_io_latency_mean_percentile,\"\")/1000) >= {}\n          | {}\n          \"\"\".format(vm.id, disk.name, disk.type, IO_LATENCY_THRESHOLD,\n                     within_str))\n\n        if disk_io_latency:\n          op.add_failed(vm,\n                        reason=op.prep_msg(op.FAILURE_REASON,\n                                           disk_name=disk.name),\n                        remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n        else:\n          op.add_ok(vm,\n                    reason=op.prep_msg(op.SUCCESS_REASON, disk_name=disk.name))\n      else:\n        op.add_skipped(\n            vm,\n            reason=('Disk-Type {} is not supported with this gcpdiag runbook,'\n                    ' disk name - {}').format(disk.type, disk.name))\n\n\nclass DiskIopsThroughputUtilisationChecks(runbook.Step):\n  \"\"\"Checking if the Disk IOPS/throughput usage is within optimal levels\"\"\"\n\n  # IOPS and Throughput calculation is based on -\n  # https://cloud.google.com/compute/docs/disks/performance\n  template = 'vm_performance::disk_io_usage_check'\n  start_time: datetime\n  end_time: datetime\n  start_formatted_string: datetime\n  end_formatted_string: datetime\n  silent: bool\n\n  def execute(self):\n    \"\"\"Checking if the Disk IOPS/throughput usage is within optimal levels\"\"\"\n\n    if hasattr(self, 'start_time'):\n      self.start_formatted_string = self.start_time\n    else:\n      self.start_formatted_string = op.get(\n          flags.START_TIME).strftime('%Y/%m/%d %H:%M:%S')\n\n    if hasattr(self, 'end_time'):\n      self.end_formatted_string = self.end_time\n    else:\n      self.end_formatted_string = op.get(\n          flags.END_TIME).strftime('%Y/%m/%d %H:%M:%S')\n\n    #op.info(('\\n\\nStart TIme: {}, End time: {}\\n\\n').format(\n    #    self.start_formatted_string, self.end_formatted_string))\n\n    disk_io_util_threshold = 0.9\n\n    vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID),\n                          zone=op.get(flags.ZONE),\n                          instance_name=op.get(flags.INSTANCE_NAME))\n\n    start_dt_pst = datetime.strptime(vm.laststarttimestamp(),\n                                     '%Y-%m-%dT%H:%M:%S.%f%z')\n    start_dt_utc = start_dt_pst.astimezone(timezone.utc)\n    start_dt_utc_plus_5_mins = start_dt_utc + timedelta(minutes=5)\n    current_time_utc = datetime.now(timezone.utc)\n    within_hours = 9\n    if (start_dt_utc_plus_5_mins > current_time_utc or\n        not vm.is_running) and vm.laststoptimestamp():\n      # Instance just starting up, CpuCount might not be available currently via metrics.\n      # Use instance's last stop time as EndTime for monitoring query\n      stop_dt_pst = datetime.strptime(vm.laststoptimestamp(),\n                                      '%Y-%m-%dT%H:%M:%S.%f%z')\n      stop_dt_utc = stop_dt_pst.astimezone(timezone.utc)\n      end_formatted_string = stop_dt_utc.strftime('%Y/%m/%d %H:%M:%S')\n      within_str = 'within %dh, d\\'%s\\'' % (within_hours, end_formatted_string)\n    else:\n      within_str = f'within d\\'{self.start_formatted_string}\\', d\\'{self.end_formatted_string}\\''\n\n    cpu_count_query = None\n    try:\n      cpu_count_query = monitoring.query(\n          op.get(flags.PROJECT_ID), \"\"\"\n                fetch gce_instance\n                | metric 'compute.googleapis.com/instance/cpu/guest_visible_vcpus'\n                | filter (resource.instance_id == '{}')\n                | group_by 1m, [value_guest_visible_vcpus_mean:\n                    mean(value.guest_visible_vcpus)]\n                | every 1m\n                | group_by [],\n                    [value_guest_visible_vcpus_mean_aggregate:\n                    aggregate(value_guest_visible_vcpus_mean)]\n                | {}\n            \"\"\".format(vm.id, within_str))\n    except googleapiclient.errors.HttpError:\n      op.add_skipped(\n          op.get(flags.PROJECT_ID),\n          reason=('Not able to pull CPU count for instance {}').format(\n              op.get(flags.INSTANCE_NAME)))\n\n    if cpu_count_query:\n      cpu_count = int(list(cpu_count_query.values())[0]['values'][0][0])\n    else:\n      op.add_failed(\n          vm,\n          reason='\\tCPU count info is not available for the instance via'\n          ' Monitoring metric \"guest_visible_vcpus\"',\n          remediation=(\n              '\\tPlease first start the VM {}, if it is not in running state'\n          ).format(vm.short_path))\n      return\n\n    # Fetch list of disks for the instance\n    disk_list = gce.get_all_disks_of_instance(op.get_context(), vm.zone,\n                                              vm.name)\n\n    # Load limits per GB data from json file\n    limits_per_gb_file = f'{dirname(__file__)}/disk_performance_benchmark/limits_per_gb.json'\n    with open(limits_per_gb_file, encoding='utf-8') as file:\n      limits_data = json.load(file)\n    file.close()\n\n    vm_family = vm.machine_type()[0]\n    if vm.machine_type().split('-')[0] == 'custom':\n      vm_family = 'n'\n\n    # Load instance level iops/throughput limits from json file\n    vm_family_file = f'{dirname(__file__)}/disk_performance_benchmark/{vm_family}-family.json'\n\n    with open(vm_family_file, encoding='utf-8') as f:\n      mach_fam_json_data = json.load(f)\n    f.close()\n\n    # Fetch disk sizes attached to the VM:\n    total_disk_size = {\n        'pd-balanced': 0,\n        'pd-ssd': 0,\n        'pd-standard': 0,\n        'pd-extreme': 0\n    }\n    provisions_iops = {\n        'pd-balanced': 0,\n        'pd-ssd': 0,\n        'pd-standard': 0,\n        'pd-extreme': 0\n    }\n    disk: gce.Disk\n    for disk_name in disk_list.items():\n      disk = disk_name[1]\n      if disk.type == 'pd-balanced':\n        total_disk_size['pd-balanced'] += int(disk.size)\n      elif disk.type == 'pd-ssd':\n        total_disk_size['pd-ssd'] += int(disk.size)\n      elif disk.type == 'pd-standard':\n        total_disk_size['pd-standard'] += int(disk.size)\n      elif disk.type == 'pd-extreme':\n        total_disk_size['pd-extreme'] += int(disk.size)\n        provisions_iops['pd-extreme'] += int(disk.provisionediops or 0)\n      else:\n        op.add_skipped(\n            vm,\n            reason=('Disk-Type {} is not supported with this gcpdiag runbook,'\n                    ' disk name - {}').format(disk.type, disk.name))\n\n    # Getting dirty with logic based on different disk types, Machine types, CPU counts etc.\n    for disktypes in total_disk_size.items():\n      disktype = disktypes[0]\n      if total_disk_size[disktype] > 0 and cpu_count > 0:\n\n        if vm_family in ['a', 'f', 'g', 'm']:\n          if vm.machine_type().split('-')[0].upper() in [\n              'A2', 'A3', 'F1', 'G2', 'M1', 'M2', 'M3'\n          ]:\n            next_hop = 'Machine type'\n            next_hop_val = vm.machine_type()\n            search_str = vm.machine_type().split('-')[0].upper()\n            if search_str == 'A2' and 'ultragpu' in next_hop_val:\n              search_str = search_str + ' Ultra VMs'\n            elif search_str == 'A2' and 'highgpu' in next_hop_val:\n              search_str = search_str + ' Ultra VMs'\n            else:\n              search_str = search_str + ' VMs'\n\n            data = self.limit_calculator(limits_data,\n                                         mach_fam_json_data, disktype,\n                                         int(total_disk_size[disktype]),\n                                         search_str, next_hop, next_hop_val)\n\n            # upto first 100GB, pd-standard disks have fixed IO limits\n            if disktype == 'pd-standard' and int(\n                total_disk_size[disktype]) < 100:\n              op.info((\n                  '\\n\\tIOPS and Throughput limits available for VM DiskType - {},'\n                  '\\n\\tTotal DiskSize: {}:'\n                  '\\n\\n\\t Read-IOPS Count: {},'\n                  '\\n\\t Read-Throughput: {} MB/s,'\n                  '\\n\\t Write-IOPS Count: {},'\n                  '\\n\\t Write-Throughput: {} MB/s\\n').format(\n                      disktype, int(total_disk_size[disktype]), 75, 12, 150,\n                      12))\n\n              self.actual_usage_comparision(vm, disktype,\n                                            75 * disk_io_util_threshold,\n                                            'max_read_ops_count')\n              self.actual_usage_comparision(\n                  vm, disktype, 12 * disk_io_util_threshold * 1000 * 1000,\n                  'max_read_bytes_count')\n              self.actual_usage_comparision(vm, disktype,\n                                            150 * disk_io_util_threshold,\n                                            'max_write_ops_count')\n              self.actual_usage_comparision(\n                  vm, disktype, 12 * disk_io_util_threshold * 1000 * 1000,\n                  'max_write_bytes_count')\n\n            elif disktype == 'pd-extreme' and vm.machine_type() in [\n                'g1-small', 'f1-micro'\n            ]:\n              op.add_skipped(\n                  vm,\n                  reason=('The script do not support '\n                          'pd-extreme disk type with machine type {} \\n'\n                         ).format(next_hop_val))\n            else:\n              op.info(\n                  ('IOPS and Throughput limits available for VM DiskType - {},'\n                   '\\n\\tTotal DiskSize: {}:'\n                   '\\n\\n\\t Max Read-IOPS Count: {},'\n                   '\\n\\t Max Read-Throughput: {} MB/s,'\n                   '\\n\\t Max Write-IOPS Count: {},'\n                   '\\n\\t Max Write-Throughput: {} MB/s\\n').format(\n                       disktype, int(total_disk_size[disktype]),\n                       min(data[0], data[1]), min(data[2], data[3]),\n                       min(data[4], data[5]), min(data[6], data[7])))\n\n              self.actual_usage_comparision(\n                  vm, disktype,\n                  min(data[0], data[1]) * disk_io_util_threshold,\n                  'max_read_ops_count')\n              self.actual_usage_comparision(\n                  vm, disktype,\n                  min(data[2], data[3]) * disk_io_util_threshold * 1000 * 1000,\n                  'max_read_bytes_count')\n              self.actual_usage_comparision(\n                  vm, disktype,\n                  min(data[4], data[5]) * disk_io_util_threshold,\n                  'max_write_ops_count')\n              self.actual_usage_comparision(\n                  vm, disktype,\n                  min(data[6], data[7]) * disk_io_util_threshold * 1000 * 1000,\n                  'max_write_bytes_count')\n          else:\n            op.add_failed(\n                vm,\n                reason=\n                ('The machine type {} is not supported with this gcpdiag runbook'\n                ).format(vm.machine_type()),\n                remediation=\n                'You may only run this runbook for any of the below machine family:'\n                'A2, A3, C2, C2D, C3, C3D, E2, F1, G1, G2,'\n                ' H3, N1, N2, N2D, M1, M2, M3, T2D, T2A, Z3')\n\n        elif vm_family in ['c', 'h', 'z']:\n          if vm.machine_type().split('-')[0].upper() in [\n              'C2', 'C2D', 'C3', 'C3D', 'H3', 'Z3'\n          ]:\n            next_hop = 'VM vCPU count'\n            next_hop_val = str(cpu_count)\n            search_str = vm.machine_type().split('-')[0].upper() + ' VMs'\n\n            # upto first 100GB, pd-standard disks have fixed IO limits\n            if disktype == 'pd-standard' and int(\n                total_disk_size[disktype]) < 100:\n              op.info((\n                  '\\n\\tIOPS and Throughput limits available for VM DiskType - {},'\n                  '\\n\\tTotal DiskSize: {}:'\n                  '\\n\\n\\t Read-IOPS Count: {},'\n                  '\\n\\t Read-Throughput: {} MB/s,'\n                  '\\n\\t Write-IOPS Count: {},'\n                  '\\n\\t Write-Throughput: {} MB/s\\n').format(\n                      disktype, int(total_disk_size[disktype]), 75, 12, 150,\n                      12))\n\n              self.actual_usage_comparision(vm, disktype,\n                                            75 * disk_io_util_threshold,\n                                            'max_read_ops_count')\n              self.actual_usage_comparision(\n                  vm, disktype, 12 * disk_io_util_threshold * 1000 * 1000,\n                  'max_read_bytes_count')\n              self.actual_usage_comparision(vm, disktype,\n                                            150 * disk_io_util_threshold,\n                                            'max_write_ops_count')\n              self.actual_usage_comparision(\n                  vm, disktype, 12 * disk_io_util_threshold * 1000 * 1000,\n                  'max_write_bytes_count')\n\n            elif disktype == 'pd-extreme':\n              # https://cloud.google.com/compute/docs/disks/extreme-persistent-disk#machine_shape_support\n\n              data = self.limit_calculator(limits_data, mach_fam_json_data,\n                                           'pd-ssd',\n                                           int(total_disk_size['pd-extreme']),\n                                           search_str, next_hop, next_hop_val)\n\n              op.info(\n                  ('IOPS and Throughput limits available for VM DiskType - {},'\n                   '\\n\\tTotal DiskSize: {}:'\n                   '\\n\\n\\t Max Read-IOPS Count: {},'\n                   '\\n\\t Max Read-Throughput: {} MB/s,'\n                   '\\n\\t Max Write-IOPS Count: {},'\n                   '\\n\\t Max Write-Throughput: {} MB/s\\n').format(\n                       disktype, int(total_disk_size[disktype]),\n                       min(data[1], provisions_iops['pd-extreme']),\n                       min(data[2], data[3]),\n                       min(data[5], provisions_iops['pd-extreme']),\n                       min(data[6], data[7])))\n\n              self.actual_usage_comparision(\n                  vm, disktype,\n                  min(data[1], provisions_iops['pd-extreme']) *\n                  disk_io_util_threshold, 'max_read_ops_count')\n              self.actual_usage_comparision(\n                  vm, disktype,\n                  min(data[2], data[3]) * disk_io_util_threshold * 1000 * 1000,\n                  'max_read_bytes_count')\n              self.actual_usage_comparision(\n                  vm, disktype,\n                  min(data[5], provisions_iops['pd-extreme']) * 0.9,\n                  'max_write_ops_count')\n              self.actual_usage_comparision(\n                  vm, disktype,\n                  min(data[6], data[7]) * disk_io_util_threshold * 1000 * 1000,\n                  'max_write_bytes_count')\n\n            else:\n              data = self.limit_calculator(limits_data, mach_fam_json_data,\n                                           disktype,\n                                           int(total_disk_size[disktype]),\n                                           search_str, next_hop, next_hop_val)\n              op.info(\n                  ('IOPS and Throughput limits available for VM DiskType - {},'\n                   '\\n\\t Total DiskSize: {}:'\n                   '\\n\\n\\t Max Read-IOPS Count: {},'\n                   '\\n\\t Max Read-Throughput: {} MB/s,'\n                   '\\n\\t Max Write-IOPS Count: {},'\n                   '\\n\\t Max Write-Throughput: {} MB/s\\n').format(\n                       disktype, int(total_disk_size[disktype]),\n                       min(data[0], data[1]), min(data[2], data[3]),\n                       min(data[4], data[5]), min(data[6], data[7])))\n\n              self.actual_usage_comparision(\n                  vm, disktype,\n                  min(data[0], data[1]) * disk_io_util_threshold,\n                  'max_read_ops_count')\n              self.actual_usage_comparision(\n                  vm, disktype,\n                  min(data[2], data[3]) * disk_io_util_threshold * 1000 * 1000,\n                  'max_read_bytes_count')\n              self.actual_usage_comparision(\n                  vm, disktype,\n                  min(data[4], data[5]) * disk_io_util_threshold,\n                  'max_write_ops_count')\n              self.actual_usage_comparision(\n                  vm, disktype,\n                  min(data[6], data[7]) * disk_io_util_threshold * 1000 * 1000,\n                  'max_write_bytes_count')\n          else:\n            op.add_failed(\n                vm,\n                reason=\n                ('The machine type {} is not supported with this gcpdiag runbook'\n                ).format(vm.machine_type()),\n                remediation=\n                'You may only run this runbook for any of the below machine family:'\n                'A2, A3, C2, C2D, C3, C3D, E2, F1, G1, G2,'\n                ' H3, N1, N2, N2D, M1, M2, M3, T2D, T2A, Z3')\n\n        elif vm_family == 't':\n          # Logic to fetch details for T2 family type\n          if vm.machine_type().split('-')[0].upper() in ['T2D', 'T2A']:\n            next_hop = 'VM vCPU count'\n            if vm.machine_type().split('-')[0].upper() == 'T2D':\n              # T2D Family\n              if disktype == 'pd-standard':\n                if cpu_count == 1:\n                  next_hop_val = '1'\n                elif cpu_count in range(2, 8):\n                  next_hop_val = '2-7'\n                elif cpu_count in range(8, 16):\n                  next_hop_val = '8-15'\n                elif cpu_count > 15:\n                  next_hop_val = '16 or more'\n              else:\n                if cpu_count == 1:\n                  next_hop_val = '1'\n                elif cpu_count in range(2, 8):\n                  next_hop_val = '2-7'\n                elif cpu_count in range(8, 16):\n                  next_hop_val = '8-15'\n                elif cpu_count in range(16, 32):\n                  next_hop_val = '16-31'\n                elif cpu_count > 31:\n                  next_hop_val = '32-60'\n            else:\n              # T2A Family\n              if disktype == 'pd-standard':\n                if cpu_count == 1:\n                  next_hop_val = '1'\n                elif cpu_count in range(2, 4):\n                  next_hop_val = '2-3'\n                elif cpu_count in range(4, 8):\n                  next_hop_val = '4-7'\n                elif cpu_count in range(8, 16):\n                  next_hop_val = '8-15'\n                elif cpu_count > 15:\n                  next_hop_val = '16 or more'\n              else:\n                if cpu_count == 1:\n                  next_hop_val = '1'\n                elif cpu_count in range(2, 8):\n                  next_hop_val = '2-7'\n                elif cpu_count in range(8, 16):\n                  next_hop_val = '8-15'\n                elif cpu_count in range(16, 32):\n                  next_hop_val = '16-31'\n                elif cpu_count in range(32, 48):\n                  next_hop_val = '32-47'\n                elif cpu_count > 47:\n                  next_hop_val = '48'\n\n            search_str = vm.machine_type().split('-')[0].upper() + ' VMs'\n\n            if disktype == 'pd-extreme':\n              # https://cloud.google.com/compute/docs/disks/extreme-persistent-disk#machine_shape_support\n\n              data = self.limit_calculator(limits_data, mach_fam_json_data,\n                                           'pd-ssd',\n                                           int(total_disk_size['pd-extreme']),\n                                           search_str, next_hop, next_hop_val)\n\n              op.info(\n                  ('IOPS and Throughput limits available for VM DiskType - {},'\n                   '\\n\\tTotal DiskSize: {}:'\n                   '\\n\\n\\t Max Read-IOPS Count: {},'\n                   '\\n\\t Max Read-Throughput: {} MB/s,'\n                   '\\n\\t Max Write-IOPS Count: {},'\n                   '\\n\\t Max Write-Throughput: {} MB/s\\n').format(\n                       disktype, int(total_disk_size[disktype]),\n                       min(data[1], provisions_iops['pd-extreme']),\n                       min(data[2], data[3]),\n                       min(data[5], provisions_iops['pd-extreme']),\n                       min(data[6], data[7])))\n\n              self.actual_usage_comparision(\n                  vm, disktype,\n                  min(data[1], provisions_iops['pd-extreme']) *\n                  disk_io_util_threshold, 'max_read_ops_count')\n              self.actual_usage_comparision(\n                  vm, disktype,\n                  min(data[2], data[3]) * disk_io_util_threshold * 1000 * 1000,\n                  'max_read_bytes_count')\n              self.actual_usage_comparision(\n                  vm, disktype,\n                  min(data[5], provisions_iops['pd-extreme']) * 0.9,\n                  'max_write_ops_count')\n              self.actual_usage_comparision(\n                  vm, disktype,\n                  min(data[6], data[7]) * disk_io_util_threshold * 1000 * 1000,\n                  'max_write_bytes_count')\n\n            elif disktype == 'pd-standard' and int(\n                total_disk_size[disktype]) < 100:\n              # upto first 100GB, pd-standard disks have fixed IO limits\n              op.info((\n                  '\\n\\tIOPS and Throughput limits available for VM DiskType - {},'\n                  '\\n\\tTotal DiskSize: {}:'\n                  '\\n\\n\\t Read-IOPS Count: {},'\n                  '\\n\\t Read-Throughput: {} MB/s,'\n                  '\\n\\t Write-IOPS Count: {},'\n                  '\\n\\t Write-Throughput: {} MB/s\\n').format(\n                      disktype, int(total_disk_size[disktype]), 75, 12, 150,\n                      12))\n\n              self.actual_usage_comparision(vm, disktype,\n                                            75 * disk_io_util_threshold,\n                                            'max_read_ops_count')\n              self.actual_usage_comparision(\n                  vm, disktype, 12 * disk_io_util_threshold * 1000 * 1000,\n                  'max_read_bytes_count')\n              self.actual_usage_comparision(vm, disktype,\n                                            150 * disk_io_util_threshold,\n                                            'max_write_ops_count')\n              self.actual_usage_comparision(\n                  vm, disktype, 12 * disk_io_util_threshold * 1000 * 1000,\n                  'max_write_bytes_count')\n\n            else:\n              data = self.limit_calculator(limits_data, mach_fam_json_data,\n                                           disktype,\n                                           int(total_disk_size[disktype]),\n                                           search_str, next_hop, next_hop_val)\n\n              op.info(\n                  ('IOPS and Throughput limits available for VM DiskType - {},'\n                   '\\n\\tTotal DiskSize: {}:'\n                   '\\n\\n\\t Max Read-IOPS Count: {},'\n                   '\\n\\t Max Read-Throughput: {} MB/s,'\n                   '\\n\\t Max Write-IOPS Count: {},'\n                   '\\n\\t Max Write-Throughput: {} MB/s\\n').format(\n                       disktype, int(total_disk_size[disktype]),\n                       min(data[0], data[1]), min(data[2], data[3]),\n                       min(data[4], data[5]), min(data[6], data[7])))\n\n              self.actual_usage_comparision(\n                  vm, disktype,\n                  min(data[0], data[1]) * disk_io_util_threshold,\n                  'max_read_ops_count')\n              self.actual_usage_comparision(\n                  vm, disktype,\n                  min(data[2], data[3]) * disk_io_util_threshold * 1000 * 1000,\n                  'max_read_bytes_count')\n              self.actual_usage_comparision(\n                  vm, disktype,\n                  min(data[4], data[5]) * disk_io_util_threshold,\n                  'max_write_ops_count')\n              self.actual_usage_comparision(\n                  vm, disktype,\n                  min(data[6], data[7]) * disk_io_util_threshold * 1000 * 1000,\n                  'max_write_bytes_count')\n          else:\n            op.add_failed(\n                vm,\n                reason=\n                ('The machine type {} is not supported with this gcpdiag runbook'\n                ).format(vm.machine_type()),\n                remediation=\n                'You may only run this runbook for any of the below machine family:'\n                'A2, A3, C2, C2D, C3, C3D, E2, F1, G1, G2,'\n                ' H3, N1, N2, N2D, M1, M2, M3, T2D, T2A, Z3')\n\n        elif vm_family == 'e':\n          # Logic to fetch details for E2 family type\n          if vm.machine_type().split('-')[0].upper() in ['E2']:\n            next_hop = 'VM vCPU count'\n            if 'e2-medium' in vm.machine_type():\n              next_hop_val = 'e2-medium*'\n            else:\n              if cpu_count == 1:\n                next_hop_val = '1'\n              elif cpu_count in range(2, 8):\n                next_hop_val = '2-7'\n              elif cpu_count in range(8, 16):\n                next_hop_val = '8-15'\n              elif cpu_count in range(16, 32):\n                next_hop_val = '16-31'\n              elif cpu_count > 31:\n                next_hop_val = '32 or more'\n            search_str = vm.machine_type().split('-')[0].upper() + ' VMs'\n\n            if disktype == 'pd-extreme':\n              # https://cloud.google.com/compute/docs/disks/extreme-persistent-disk#machine_shape_support\n\n              data = self.limit_calculator(limits_data, mach_fam_json_data,\n                                           'pd-ssd',\n                                           int(total_disk_size['pd-extreme']),\n                                           search_str, next_hop, next_hop_val)\n\n              op.info(\n                  ('IOPS and Throughput limits available for VM DiskType - {},'\n                   '\\n\\tTotal DiskSize: {}:'\n                   '\\n\\n\\t Max Read-IOPS Count: {},'\n                   '\\n\\t Max Read-Throughput: {} MB/s,'\n                   '\\n\\t Max Write-IOPS Count: {},'\n                   '\\n\\t Max Write-Throughput: {} MB/s\\n').format(\n                       disktype, int(total_disk_size[disktype]),\n                       min(data[1], provisions_iops['pd-extreme']),\n                       min(data[2], data[3]),\n                       min(data[5], provisions_iops['pd-extreme']),\n                       min(data[6], data[7])))\n\n              self.actual_usage_comparision(\n                  vm, disktype,\n                  min(data[1], provisions_iops['pd-extreme']) *\n                  disk_io_util_threshold, 'max_read_ops_count')\n              self.actual_usage_comparision(\n                  vm, disktype,\n                  min(data[2], data[3]) * disk_io_util_threshold * 1000 * 1000,\n                  'max_read_bytes_count')\n              self.actual_usage_comparision(\n                  vm, disktype,\n                  min(data[5], provisions_iops['pd-extreme']) *\n                  disk_io_util_threshold, 'max_write_ops_count')\n              self.actual_usage_comparision(\n                  vm, disktype,\n                  min(data[6], data[7]) * disk_io_util_threshold * 1000 * 1000,\n                  'max_write_bytes_count')\n\n            elif disktype == 'pd-standard' and int(\n                total_disk_size[disktype]) < 100:\n              # upto first 100GB, pd-standard disks have fixed IO limits\n              op.info((\n                  '\\n\\tIOPS and Throughput limits available for VM DiskType - {},'\n                  '\\n\\tTotal DiskSize: {}:'\n                  '\\n\\n\\t Read-IOPS Count: {},'\n                  '\\n\\t Read-Throughput: {} MB/s,'\n                  '\\n\\t Write-IOPS Count: {},'\n                  '\\n\\t Write-Throughput: {} MB/s\\n').format(\n                      disktype, int(total_disk_size[disktype]), 75, 12, 150,\n                      12))\n\n              self.actual_usage_comparision(vm, disktype,\n                                            75 * disk_io_util_threshold,\n                                            'max_read_ops_count')\n              self.actual_usage_comparision(\n                  vm, disktype, 12 * disk_io_util_threshold * 1000 * 1000,\n                  'max_read_bytes_count')\n              self.actual_usage_comparision(vm, disktype,\n                                            150 * disk_io_util_threshold,\n                                            'max_write_ops_count')\n              self.actual_usage_comparision(\n                  vm, disktype, 12 * disk_io_util_threshold * 1000 * 1000,\n                  'max_write_bytes_count')\n            else:\n              data = self.limit_calculator(limits_data, mach_fam_json_data,\n                                           disktype,\n                                           int(total_disk_size[disktype]),\n                                           search_str, next_hop, next_hop_val)\n\n              op.info(\n                  ('IOPS and Throughput limits available for VM DiskType - {},'\n                   '\\n\\tTotal DiskSize: {}:'\n                   '\\n\\n\\t Max Read-IOPS Count: {},'\n                   '\\n\\t Max Read-Throughput: {} MB/s,'\n                   '\\n\\t Max Write-IOPS Count: {},'\n                   '\\n\\t Max Write-Throughput: {} MB/s\\n').format(\n                       disktype, int(total_disk_size[disktype]),\n                       min(data[0], data[1]), min(data[2], data[3]),\n                       min(data[4], data[5]), min(data[6], data[7])))\n\n              self.actual_usage_comparision(\n                  vm, disktype,\n                  min(data[0], data[1]) * disk_io_util_threshold,\n                  'max_read_ops_count')\n              self.actual_usage_comparision(\n                  vm, disktype,\n                  min(data[2], data[3]) * disk_io_util_threshold * 1000 * 1000,\n                  'max_read_bytes_count')\n              self.actual_usage_comparision(\n                  vm, disktype,\n                  min(data[4], data[5]) * disk_io_util_threshold,\n                  'max_write_ops_count')\n              self.actual_usage_comparision(\n                  vm, disktype,\n                  min(data[6], data[7]) * disk_io_util_threshold * 1000 * 1000,\n                  'max_write_bytes_count')\n          else:\n            op.add_failed(\n                vm,\n                reason=\n                ('The machine type {} is not supported with this gcpdiag runbook'\n                ).format(vm.machine_type()),\n                remediation=\n                'You may only run this runbook for any of the below machine family:'\n                'A2, A3, C2, C2D, C3, C3D, E2, F1, G1, G2,'\n                ' H3, N1, N2, N2D, M1, M2, M3, T2D, T2A, Z3')\n\n        elif vm_family == 'n':\n          if vm.machine_type().split('-')[0].upper() in [\n              'N1', 'N2', 'N2D', 'CUSTOM'\n          ]:\n            next_hop = 'VM vCPU count'\n            if vm.machine_type().split('-')[0] == 'custom':\n              search_str = 'N1 VMs'\n            else:\n              search_str = vm.machine_type().split('-')[0].upper() + ' VMs'\n            if disktype in ['pd-balanced', 'pd-ssd']:\n              if cpu_count == 1:\n                next_hop_val = '1'\n              elif cpu_count in range(2, 8):\n                next_hop_val = '2-7'\n              elif cpu_count in range(8, 16):\n                next_hop_val = '8-15'\n              elif cpu_count in range(16, 32):\n                next_hop_val = '16-31'\n              elif cpu_count in range(32, 64):\n                next_hop_val = '32-63'\n              elif cpu_count > 63:\n                next_hop_val = '64 or more'\n\n              data = self.limit_calculator(limits_data, mach_fam_json_data,\n                                           disktype,\n                                           int(total_disk_size[disktype]),\n                                           search_str, next_hop, next_hop_val)\n              op.info((\n                  'IOPS and Throughput limits available for VM DiskType - {}, Total DiskSize: {}:'\n                  '\\n\\n\\t Max Read-IOPS Count: {}, \\n\\t Max Read-Throughput: {} MB/s,'\n                  '\\n\\t Max Write-IOPS Count: {}, \\n\\t Max Write-Throughput: {} MB/s'\n              ).format(disktype, int(total_disk_size[disktype]),\n                       min(data[0], data[1]), min(data[2], data[3]),\n                       min(data[4], data[5]), min(data[6], data[7])))\n\n              self.actual_usage_comparision(\n                  vm, disktype,\n                  min(data[0], data[1]) * disk_io_util_threshold,\n                  'max_read_ops_count')\n              self.actual_usage_comparision(\n                  vm, disktype,\n                  min(data[2], data[3]) * disk_io_util_threshold * 1000 * 1000,\n                  'max_read_bytes_count')\n              self.actual_usage_comparision(\n                  vm, disktype,\n                  min(data[4], data[5]) * disk_io_util_threshold,\n                  'max_write_ops_count')\n              self.actual_usage_comparision(\n                  vm, disktype,\n                  min(data[6], data[7]) * disk_io_util_threshold * 1000 * 1000,\n                  'max_write_bytes_count')\n\n            elif disktype == 'pd-standard':\n              if cpu_count == 1:\n                next_hop_val = '1'\n              elif cpu_count in range(2, 8):\n                next_hop_val = '2-7'\n              elif cpu_count in range(8, 16):\n                next_hop_val = '8-15'\n              elif cpu_count > 15:\n                next_hop_val = '16 or more'\n\n              if int(total_disk_size[disktype]) < 100:\n                # upto first 100GB, pd-standard disks have fixed IO limits\n                op.info((\n                    '\\n\\tIOPS and Throughput limits available for VM DiskType - {},'\n                    '\\n\\tTotal DiskSize: {}:'\n                    '\\n\\n\\t Read-IOPS Count: {},'\n                    '\\n\\t Read-Throughput: {} MB/s,'\n                    '\\n\\t Write-IOPS Count: {},'\n                    '\\n\\t Write-Throughput: {} MB/s\\n').format(\n                        disktype, int(total_disk_size[disktype]), 75, 12, 150,\n                        12))\n\n                self.actual_usage_comparision(vm, disktype,\n                                              75 * disk_io_util_threshold,\n                                              'max_read_ops_count')\n                self.actual_usage_comparision(\n                    vm, disktype, 12 * disk_io_util_threshold * 1000 * 1000,\n                    'max_read_bytes_count')\n                self.actual_usage_comparision(vm, disktype,\n                                              150 * disk_io_util_threshold,\n                                              'max_write_ops_count')\n                self.actual_usage_comparision(\n                    vm, disktype, 12 * disk_io_util_threshold * 1000 * 1000,\n                    'max_write_bytes_count')\n              else:\n                data = self.limit_calculator(limits_data, mach_fam_json_data,\n                                             disktype,\n                                             int(total_disk_size[disktype]),\n                                             search_str, next_hop, next_hop_val)\n\n                op.info((\n                    'IOPS and Throughput limits available for VM DiskType - {},'\n                    '\\n\\tTotal DiskSize: {}:,'\n                    '\\n\\n\\t Max Read-IOPS Count: {},'\n                    '\\n\\t Max Read-Throughput: {} MB/s,'\n                    '\\n\\t Max Write-IOPS Count: {},'\n                    '\\n\\t Max Write-Throughput: {} MB/s\\n').format(\n                        disktype, int(total_disk_size[disktype]),\n                        min(data[0], data[1]), min(data[2], data[3]),\n                        min(data[4], data[5]), min(data[6], data[7])))\n\n                self.actual_usage_comparision(\n                    vm, disktype,\n                    min(data[0], data[1]) * disk_io_util_threshold,\n                    'max_read_ops_count')\n                self.actual_usage_comparision(\n                    vm, disktype,\n                    min(data[2], data[3]) * disk_io_util_threshold * 1000 *\n                    1000, 'max_read_bytes_count')\n                self.actual_usage_comparision(\n                    vm, disktype,\n                    min(data[4], data[5]) * disk_io_util_threshold,\n                    'max_write_ops_count')\n                self.actual_usage_comparision(\n                    vm, disktype,\n                    min(data[6], data[7]) * disk_io_util_threshold * 1000 *\n                    1000, 'max_write_bytes_count')\n\n            elif disktype == 'pd-extreme':\n              if search_str == 'N2 VMs' and cpu_count > 63:\n                next_hop = 'Machine type'\n                next_hop_val = vm.machine_type()\n                data = self.limit_calculator(limits_data, mach_fam_json_data,\n                                             disktype,\n                                             int(total_disk_size[disktype]),\n                                             search_str, next_hop, next_hop_val)\n\n                op.info((\n                    'IOPS and Throughput limits available for VM DiskType - {},'\n                    '\\n\\tTotal DiskSize: {}:'\n                    '\\n\\n\\t Max Read-IOPS Count: {},'\n                    '\\n\\t Max Read-Throughput: {} MB/s,'\n                    '\\n\\t Max Write-IOPS Count: {},'\n                    '\\n\\t Max Write-Throughput: {} MB/s\\n').format(\n                        disktype, int(total_disk_size[disktype]),\n                        min(data[1], provisions_iops['pd-extreme']),\n                        max(data[2], data[3]),\n                        min(data[5], provisions_iops['pd-extreme']),\n                        max(data[6], data[7])))\n\n                self.actual_usage_comparision(\n                    vm, disktype,\n                    min(data[1], provisions_iops['pd-extreme']) *\n                    disk_io_util_threshold, 'max_read_ops_count')\n                self.actual_usage_comparision(\n                    vm, disktype,\n                    min(data[2], data[3]) * disk_io_util_threshold * 1000 *\n                    1000, 'max_read_bytes_count')\n                self.actual_usage_comparision(\n                    vm, disktype,\n                    min(data[5], provisions_iops['pd-extreme']) *\n                    disk_io_util_threshold, 'max_write_ops_count')\n                self.actual_usage_comparision(\n                    vm, disktype,\n                    min(data[6], data[7]) * disk_io_util_threshold * 1000 *\n                    1000, 'max_write_bytes_count')\n              else:\n                next_hop = 'VM vCPU count'\n                data = self.limit_calculator(limits_data, mach_fam_json_data,\n                                             'pd-ssd',\n                                             int(total_disk_size['pd-extreme']),\n                                             search_str, next_hop, next_hop_val)\n                # https://cloud.google.com/compute/docs/disks/extreme-persistent-disk#machine_shape_support\n                op.info((\n                    'IOPS and Throughput limits available for VM DiskType - {},'\n                    '\\n\\tTotal DiskSize: {}:'\n                    '\\n\\n\\t Max Read-IOPS Count: {},'\n                    '\\n\\t Max Read-Throughput: {} MB/s,'\n                    '\\n\\t Max Write-IOPS Count: {},'\n                    '\\n\\t Max Write-Throughput: {} MB/s\\n').format(\n                        disktype, int(total_disk_size[disktype]),\n                        min(data[1], provisions_iops['pd-extreme']),\n                        max(data[2], data[3]),\n                        min(data[5], provisions_iops['pd-extreme']),\n                        max(data[6], data[7])))\n\n                self.actual_usage_comparision(\n                    vm, disktype,\n                    min(data[1], provisions_iops['pd-extreme']) *\n                    disk_io_util_threshold, 'max_read_ops_count')\n                self.actual_usage_comparision(\n                    vm, disktype,\n                    max(data[2], data[3]) * disk_io_util_threshold * 1000 *\n                    1000, 'max_read_bytes_count')\n                self.actual_usage_comparision(\n                    vm, disktype,\n                    min(data[5], provisions_iops['pd-extreme']) *\n                    disk_io_util_threshold, 'max_write_ops_count')\n                self.actual_usage_comparision(\n                    vm, disktype,\n                    max(data[6], data[7]) * disk_io_util_threshold * 1000 *\n                    1000, 'max_write_bytes_count')\n          else:\n            op.add_failed(\n                vm,\n                reason=\n                ('The machine type {} is not supported with this gcpdiag runbook'\n                ).format(vm.machine_type()),\n                remediation=\n                'You may only run this runbook for any of the below machine family:'\n                'A2, A3, C2, C2D, C3, C3D, E2, F1, G1, G2,'\n                ' H3, N1, N2, N2D, M1, M2, M3, T2D, T2A, Z3')\n        else:\n          op.add_failed(\n              vm,\n              reason=\n              ('The machine type {} is not supported with this gcpdiag runbook'\n              ).format(vm.machine_type()),\n              remediation=\n              'You may only run this runbook for any of the below machine family:'\n              'A, C, E, G, F, H, N, M, T, Z')\n\n  def limit_calculator(self, limits_data, mach_fam_json_data, disktype: str,\n                       total_disk_size: int, search_str: str, next_hop: str,\n                       next_hop_val: str):\n\n    # Data fetch for limits per GB and Baseline\n    r_iops_limit_per_gb = float(\n        limits_data['iops'][disktype]['Read IOPS per GiB'])\n    w_iops_limit_per_gb = float(\n        limits_data['iops'][disktype]['Write IOPS per GiB'])\n    r_throughput_limit_per_gb = float(\n        limits_data['throughput'][disktype]['Throughput per GiB (MiBps)'])\n    w_throughput_limit_per_gb = float(\n        limits_data['throughput'][disktype]['Throughput per GiB (MiBps)'])\n    baseline_iops = float(\n        limits_data['baseline'][disktype]['Baseline IOPS per VM'])\n    baseline_throughput = float(\n        limits_data['baseline'][disktype]['Baseline Throughput (MiBps) per VM'])\n\n    # Calculating VM Baseline performance\n    vm_baseline_performance_r_iops = baseline_iops + (r_iops_limit_per_gb *\n                                                      total_disk_size)\n    vm_baseline_performance_w_iops = baseline_iops + (w_iops_limit_per_gb *\n                                                      total_disk_size)\n    vm_baseline_performance_r_throughput = baseline_throughput + (\n        r_throughput_limit_per_gb * total_disk_size)\n    vm_baseline_performance_w_throughput = baseline_throughput + (\n        w_throughput_limit_per_gb * total_disk_size)\n\n    max_read_throuput = 10000000\n    max_write_throuput = 10000000\n    max_read_iops = 10000000\n    max_write_iops = 10000000\n    for mach_fam_catagory in mach_fam_json_data:\n      if search_str and search_str in mach_fam_catagory:\n        for item in mach_fam_json_data[mach_fam_catagory][disktype]:\n          if item[next_hop] == next_hop_val:\n            max_write_iops = item['Maximum write IOPS']\n            max_read_iops = item['Maximum read IOPS']\n            max_read_throuput = item['Maximum read throughput (MiBps)']\n            max_write_throuput = item['Maximum write throughput (MiBps)']\n\n    return (vm_baseline_performance_r_iops, max_read_iops,\n            vm_baseline_performance_r_throughput, max_read_throuput,\n            vm_baseline_performance_w_iops, max_write_iops,\n            vm_baseline_performance_w_throughput, max_write_throuput)\n\n  def actual_usage_comparision(self, vm: gce.Instance, disktype: str,\n                               utilization_threshold: float, metric_name: str):\n\n    mon_within_str = f'within d\\'{self.start_formatted_string}\\', d\\'{self.end_formatted_string}\\''\n\n    if disktype == 'pd-balanced':\n      storage_type = 'PD-Balanced'\n    elif disktype == 'pd-extreme':\n      storage_type = 'PD-Extreme'\n    else:\n      storage_type = disktype\n\n    project = crm.get_project(op.get(flags.PROJECT_ID))\n    try:\n      metric_name_value = metric_name\n      comp = monitoring.query(\n          op.get(flags.PROJECT_ID), \"\"\"\n                    fetch gce_instance\n                    | metric 'compute.googleapis.com/instance/disk/{}'\n                    | filter\n                        (resource.instance_id == '{}') && (metric.storage_type == '{}')\n                    | group_by 1m, [value_max_count: max(value.{})]\n                    | every 1m\n                    | group_by [],\n                        [value_max_count_max_max: max(value_max_count)]\n                    | filter value_max_count_max_max >= {}\n                    | {}\n                    \"\"\".format(metric_name, vm.id, storage_type,\n                               metric_name_value, utilization_threshold,\n                               mon_within_str))\n    except googleapiclient.errors.HttpError:\n      op.add_skipped(\n          project,\n          reason=\n          ('Not able to fetch monitoring metric {} data for VM {} - Disktype - {}'\n          ).format(metric_name, op.get(flags.INSTANCE_NAME), disktype))\n    else:\n      if comp:\n        for compval in comp.items():\n          if len(compval[1]['values']) > 2:\n            op.add_failed(\n                vm,\n                reason=\n                ('{} usage is reaching beyond optimal limits for disk type {} for this VM'\n                ).format(metric_name, storage_type),\n                remediation=op.prep_msg(op.FAILURE_REMEDIATION,\n                                        full_resource_path=vm.full_path,\n                                        status=vm.status))\n          else:\n            op.add_ok(\n                vm,\n                reason=(\n                    '{} usage is within optimal limits for disktype {}').format(\n                        metric_name, storage_type))\n      else:\n        op.add_ok(\n            vm,\n            reason=('{} usage is within optimal limits for disktype {}').format(\n                metric_name, storage_type))\n\n\nclass VmPerformanceEnd(runbook.EndStep):\n  \"\"\"Finalize VM performance diagnostics.\"\"\"\n\n  def execute(self):\n    \"\"\"Finalize VM performance diagnostics.\"\"\"\n    response = None\n    if not config.get(flags.INTERACTIVE_MODE):\n      response = op.prompt(\n          kind=op.CONFIRMATION,\n          message=\n          f'Are you able to find issues related to {op.get(flags.INSTANCE_NAME)} ?',\n          choice_msg='Enter an option: ')\n    if response == op.NO:\n      op.info(message=op.END_MESSAGE)\n"
  },
  {
    "path": "gcpdiag/runbook/gce/vm_performance_test.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test class for gce/VmPerformance.\"\"\"\n\nimport datetime\nimport json\nimport unittest\nfrom datetime import timezone\nfrom unittest import mock\n\nimport apiclient\nimport googleapiclient.errors\n\nfrom gcpdiag import config\nfrom gcpdiag.queries import apis_stub, crm, gce\nfrom gcpdiag.runbook import gce as gce_runbook\nfrom gcpdiag.runbook import op, snapshot_test_base\nfrom gcpdiag.runbook.gce import flags, vm_performance\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = gce_runbook\n  runbook_name = 'gce/vm-performance'\n  config.init({'auto': True, 'interface': 'cli'})\n  min_cpu_platform = 'Intel Ice Lake'\n\n  rule_parameters = [\n      {\n          'project_id': 'gcpdiag-gce-vm-performance',\n          'instance_name': 'faulty-linux-ssh',\n          'zone': 'europe-west2-a',\n      },\n      {\n          'project_id': 'gcpdiag-gce-vm-performance',\n          'instance_name': 'faulty-windows-ssh',\n          'zone': 'europe-west2-a',\n      },\n  ]\n\n\nclass VmPerformanceTest(unittest.TestCase):\n\n  def test_legacy_parameter_handler(self):\n    runbook = vm_performance.VmPerformance()\n    parameters = {'name': 'test-instance', 'project_id': 'test-project'}\n    runbook.legacy_parameter_handler(parameters)\n    self.assertNotIn('name', parameters)\n    self.assertIn('instance_name', parameters)\n    self.assertEqual(parameters['instance_name'], 'test-instance')\n    self.assertEqual(parameters['project_id'], 'test-project')\n\n\nclass MockMessage:\n  \"\"\"Mock messages for testing.\"\"\"\n\n  def get_msg(self, key, **kwargs):\n    del kwargs\n    return f'{key}'\n\n\nclass VmPerformanceStepTestBase(unittest.TestCase):\n  \"\"\"Base class for VM performance step tests.\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    self.enterContext(\n        mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub))\n    self.mock_interface = mock.create_autospec(op.InteractionInterface,\n                                               instance=True)\n    self.mock_interface.rm = mock.Mock()\n    self.operator = op.Operator(self.mock_interface)\n    self.operator.run_id = 'test-run'\n    self.operator.messages = MockMessage()\n\n    self.params = {\n        flags.PROJECT_ID:\n            'test-project',\n        flags.ZONE:\n            'us-central1-a',\n        flags.INSTANCE_NAME:\n            'test-instance',\n        flags.START_TIME:\n            datetime.datetime(2025, 10, 27, tzinfo=datetime.timezone.utc),\n        flags.END_TIME:\n            datetime.datetime(2025, 10, 28, tzinfo=datetime.timezone.utc),\n    }\n    self.operator.parameters = self.params\n\n    self.mock_gce_get_instance = self.enterContext(\n        mock.patch('gcpdiag.queries.gce.get_instance'))\n    self.mock_crm_get_project = self.enterContext(\n        mock.patch('gcpdiag.queries.crm.get_project'))\n    self.mock_monitoring_query = self.enterContext(\n        mock.patch('gcpdiag.queries.monitoring.query'))\n    self.mock_logs_realtime_query = self.enterContext(\n        mock.patch('gcpdiag.queries.logs.realtime_query'))\n    self.mock_gce_get_all_disks_of_instance = self.enterContext(\n        mock.patch('gcpdiag.queries.gce.get_all_disks_of_instance'))\n\n    self.mock_instance = mock.Mock(spec=gce.Instance)\n    self.mock_instance.project_id = 'test-project'\n    self.mock_instance.zone = 'us-central1-a'\n    self.mock_instance.name = 'test-instance'\n    self.mock_instance.id = '12345'\n    self.mock_instance.is_running = True\n    self.mock_instance.disks = [{'deviceName': 'disk-1'}]\n    self.mock_instance.machine_type.return_value = 'n1-standard-1'\n    self.mock_instance.laststarttimestamp.return_value = (\n        '2025-10-27T10:00:00.000000+00:00')\n    self.mock_instance.laststoptimestamp.return_value = None\n    self.mock_gce_get_instance.return_value = self.mock_instance\n    self.mock_disk = mock.Mock(spec=gce.Disk)\n\n    self.mock_project = mock.Mock(spec=crm.Project)\n    self.mock_project.id = 'test-project'\n    self.mock_crm_get_project.return_value = self.mock_project\n\n\nclass VmPerformanceStartTest(VmPerformanceStepTestBase):\n  \"\"\"Test VmPerformanceStart step.\"\"\"\n\n  def test_instance_running(self):\n    step = vm_performance.VmPerformanceStart()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_gce_get_instance.assert_called_once_with(\n        project_id='test-project',\n        zone='us-central1-a',\n        instance_name='test-instance',\n    )\n    self.assertEqual(self.operator.parameters[flags.ID], '12345')\n    self.mock_interface.add_failed.assert_not_called()\n    self.mock_interface.add_skipped.assert_not_called()\n\n  def test_instance_not_running(self):\n    self.mock_instance.is_running = False\n    self.mock_instance.status = 'TERMINATED'\n    step = vm_performance.VmPerformanceStart()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n  def test_instance_not_found(self):\n    self.mock_gce_get_instance.side_effect = googleapiclient.errors.HttpError(\n        mock.Mock(status=404), b'not found')\n    step = vm_performance.VmPerformanceStart()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_instance_name_missing_id_provided(self):\n    self.params[flags.ID] = '12345'\n    self.params[flags.INSTANCE_NAME] = None\n    step = vm_performance.VmPerformanceStart()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_gce_get_instance.assert_called_once_with(\n        project_id='test-project', zone='us-central1-a', instance_name=None)\n    self.assertEqual(self.operator.parameters[flags.INSTANCE_NAME],\n                     'test-instance')\n\n\nclass DiskHealthCheckTest(VmPerformanceStepTestBase):\n  \"\"\"Test DiskHealthCheck step.\"\"\"\n\n  def test_healthy_disk(self):\n    self.mock_monitoring_query.return_value = []\n    step = vm_performance.DiskHealthCheck()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_monitoring_query.assert_called_once()\n    self.mock_interface.add_ok.assert_called_once()\n    self.mock_interface.add_failed.assert_not_called()\n\n  def test_unhealthy_disk(self):\n    self.mock_monitoring_query.return_value = [{'metric': 'data'}]\n    step = vm_performance.DiskHealthCheck()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_monitoring_query.assert_called_once()\n    self.mock_interface.add_failed.assert_called_once()\n    self.mock_interface.add_ok.assert_not_called()\n\n\nclass CpuOvercommitmentCheckTest(VmPerformanceStepTestBase):\n  \"\"\"Test CpuOvercommitmentCheck step.\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    self.mock_instance.is_sole_tenant_vm = False\n    self.mock_instance.machine_type.return_value = 'e2-standard-2'\n    self.mock_instance.min_cpu_platform.return_value = 'Intel Broadwell'\n\n  def test_e2_cpu_not_overcommitted(self):\n    self.mock_monitoring_query.side_effect = [\n        # cpu_count_query result\n        {\n            'some_id': {\n                'values': [[2]]\n            }\n        },\n        # cpu_overcomit_metrics result\n        [],\n    ]\n    step = vm_performance.CpuOvercommitmentCheck()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.assertEqual(self.mock_monitoring_query.call_count, 2)\n    self.mock_interface.add_ok.assert_called_once()\n    self.mock_interface.add_failed.assert_not_called()\n\n  def test_e2_cpu_overcommitted(self):\n    self.mock_monitoring_query.side_effect = [\n        # cpu_count_query result\n        {\n            'some_id': {\n                'values': [[2]]\n            }\n        },\n        # cpu_overcomit_metrics result\n        [{\n            'metric': 'data'\n        }],\n    ]\n    step = vm_performance.CpuOvercommitmentCheck()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.assertEqual(self.mock_monitoring_query.call_count, 2)\n    self.mock_interface.add_failed.assert_called_once()\n    self.mock_interface.add_ok.assert_not_called()\n\n  def test_sole_tenant_cpu_not_overcommitted(self):\n    self.mock_instance.is_sole_tenant_vm = True\n    self.mock_instance.machine_type.return_value = 'n1-standard-1'\n    self.mock_monitoring_query.side_effect = [\n        {\n            'some_id': {\n                'values': [[1]]\n            }\n        },\n        [],\n    ]\n    step = vm_performance.CpuOvercommitmentCheck()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.assertEqual(self.mock_monitoring_query.call_count, 2)\n    self.mock_interface.add_ok.assert_called_once()\n\n  def test_not_e2_or_sole_tenant_skipped(self):\n    self.mock_instance.machine_type.return_value = 'n1-standard-1'\n    step = vm_performance.CpuOvercommitmentCheck()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_monitoring_query.assert_not_called()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_no_cpu_count_info(self):\n    self.mock_monitoring_query.return_value = []\n    step = vm_performance.CpuOvercommitmentCheck()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_monitoring_query.assert_called_once()\n    self.mock_interface.add_failed.assert_not_called()\n    self.mock_interface.add_ok.assert_not_called()\n    self.mock_interface.add_skipped.assert_not_called()\n    self.mock_interface.info.assert_called()\n\n  @mock.patch('gcpdiag.runbook.gce.vm_performance.datetime')\n  def test_instance_just_started_within_window(self, mock_datetime):\n    # Mock current time to be close to laststarttimestamp\n    mock_now = datetime.datetime(2025,\n                                 10,\n                                 27,\n                                 10,\n                                 2,\n                                 0,\n                                 tzinfo=datetime.timezone.utc)\n    mock_datetime.now.return_value = mock_now\n    mock_datetime.strptime.side_effect = datetime.datetime.strptime\n    mock_datetime.timedelta = datetime.timedelta\n\n    self.mock_instance.is_running = False\n    self.mock_instance.laststoptimestamp.return_value = (\n        '2025-10-27T09:55:00.000000+00:00')\n    self.mock_monitoring_query.side_effect = [\n        {\n            'some_id': {\n                'values': [[2]]\n            }\n        },\n        [],\n    ]\n    step = vm_performance.CpuOvercommitmentCheck()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.assertEqual(self.mock_monitoring_query.call_count, 2)\n    query_string = self.mock_monitoring_query.call_args_list[0][0][1]\n    self.assertIn(\"within 9h, d'2025/10/27 09:55:00'\", query_string)\n\n\nclass DiskAvgIOLatencyCheckTest(VmPerformanceStepTestBase):\n  \"\"\"Test DiskAvgIOLatencyCheck step.\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    self.mock_disk = mock.Mock(spec=gce.Disk)\n    self.mock_disk.name = 'disk-1'\n    self.mock_disk.type = 'pd-balanced'\n    self.mock_gce_get_all_disks_of_instance.return_value = {\n        'disk-1': self.mock_disk\n    }\n\n  def test_latency_ok(self):\n    self.mock_monitoring_query.return_value = []\n    step = vm_performance.DiskAvgIOLatencyCheck()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_monitoring_query.assert_called_once()\n    self.mock_interface.add_ok.assert_called_once()\n    self.mock_interface.add_failed.assert_not_called()\n\n  def test_latency_high(self):\n    self.mock_monitoring_query.return_value = [{'metric': 'data'}]\n    step = vm_performance.DiskAvgIOLatencyCheck()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_monitoring_query.assert_called_once()\n    self.mock_interface.add_failed.assert_called_once()\n    self.mock_interface.add_ok.assert_not_called()\n\n  def test_unsupported_disk_type(self):\n    self.mock_disk.type = 'local-ssd'\n    step = vm_performance.DiskAvgIOLatencyCheck()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_monitoring_query.assert_not_called()\n    self.mock_interface.add_skipped.assert_called_once()\n\n\nclass CheckLiveMigrationsTest(VmPerformanceStepTestBase):\n  \"\"\"Test CheckLiveMigrations step.\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    self.add_child_patch = self.enterContext(\n        mock.patch(\n            'gcpdiag.runbook.gce.vm_performance.CheckLiveMigrations.add_child'))\n\n  def test_no_live_migrations(self):\n    self.mock_logs_realtime_query.return_value = []\n    step = vm_performance.CheckLiveMigrations()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_logs_realtime_query.assert_called_once()\n    self.mock_interface.add_ok.assert_called_once()\n    self.add_child_patch.assert_called_once()\n    self.assertIsInstance(\n        self.add_child_patch.call_args[0][0],\n        vm_performance.DiskIopsThroughputUtilisationChecks,\n    )\n\n  def test_live_migrations_found(self):\n    self.mock_logs_realtime_query.return_value = [{\n        'timestamp': '2025-10-27T11:00:00.000000Z'\n    }]\n    step = vm_performance.CheckLiveMigrations()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_logs_realtime_query.assert_called_once()\n    self.mock_interface.add_ok.assert_not_called()\n    self.assertEqual(self.add_child_patch.call_count, 2)\n    self.assertIsInstance(\n        self.add_child_patch.call_args_list[0][0][0],\n        vm_performance.DiskIopsThroughputUtilisationChecks,\n    )\n    self.assertIsInstance(\n        self.add_child_patch.call_args_list[1][0][0],\n        vm_performance.DiskIopsThroughputUtilisationChecks,\n    )\n\n\nlimits_per_gb_data = \"\"\"{\n \"iops\": {\n  \"pd-balanced\": {\"Read IOPS per GiB\": \"6\", \"Write IOPS per GiB\": \"6\"},\n  \"pd-ssd\": {\"Read IOPS per GiB\": \"30\", \"Write IOPS per GiB\": \"30\"},\n  \"pd-standard\": {\"Read IOPS per GiB\": \"0.75\", \"Write IOPS per GiB\": \"1.5\"},\n  \"pd-extreme\": {\"Read IOPS per GiB\": \"0\", \"Write IOPS per GiB\": \"0\"}\n },\n \"throughput\": {\n  \"pd-balanced\": {\"Throughput per GiB (MiBps)\": \"0.28\"},\n  \"pd-ssd\": {\"Throughput per GiB (MiBps)\": \"0.48\"},\n  \"pd-standard\": {\"Throughput per GiB (MiBps)\": \"0.12\"},\n  \"pd-extreme\": {\"Throughput per GiB (MiBps)\": \"0\"}\n },\n \"baseline\": {\n  \"pd-balanced\": {\"Baseline IOPS per VM\": \"0\", \"Baseline Throughput (MiBps) per VM\": \"0\"},\n  \"pd-ssd\": {\"Baseline IOPS per VM\": \"0\", \"Baseline Throughput (MiBps) per VM\": \"0\"},\n  \"pd-standard\": {\"Baseline IOPS per VM\": \"0\", \"Baseline Throughput (MiBps) per VM\": \"0\"},\n  \"pd-extreme\": {\"Baseline IOPS per VM\": \"0\", \"Baseline Throughput (MiBps) per VM\": \"0\"}\n }\n}\"\"\"\nn_family_data = \"\"\"{\n\"N1 VMs\": {\"pd-balanced\": [{\"VM vCPU count\": \"1\", \"Maximum read IOPS\": 15000,\n\"Maximum write IOPS\": 15000, \"Maximum read throughput (MiBps)\": 240,\n\"Maximum write throughput (MiBps)\": 240}],\n\"pd-standard\": [{\"VM vCPU count\": \"1\", \"Maximum read IOPS\": 15000,\n\"Maximum write IOPS\": 15000, \"Maximum read throughput (MiBps)\": 240,\n\"Maximum write throughput (MiBps)\": 240}]},\n\"N2 VMs\": {\"pd-extreme\": [{\"Machine type\": \"n2-standard-80\", \"Maximum read IOPS\": 100000,\n\"Maximum write IOPS\": 100000, \"Maximum read throughput (MiBps)\": 4000,\n\"Maximum write throughput (MiBps)\": 4000}],\n\"pd-standard\": [{\"VM vCPU count\": \"1\", \"Maximum read IOPS\": 15000,\n\"Maximum write IOPS\": 15000, \"Maximum read throughput (MiBps)\": 240,\n\"Maximum write throughput (MiBps)\": 240}]},\n\"N2D VMs\": {\"pd-standard\": [{\"VM vCPU count\": \"2-7\", \"Maximum read IOPS\": 15000,\n\"Maximum write IOPS\": 15000, \"Maximum read throughput (MiBps)\": 240,\n\"Maximum write throughput (MiBps)\": 240}]}\n}\"\"\"\nc_family_data = \"\"\"{\n\"C2 VMs\": {\"pd-ssd\": [{\"VM vCPU count\": \"4\", \"Maximum read IOPS\": 15000,\n\"Maximum write IOPS\": 15000, \"Maximum read throughput (MiBps)\": 240,\n\"Maximum write throughput (MiBps)\": 240}]},\n\"C3 VMs\": {\"pd-ssd\": [{\"VM vCPU count\": \"4\", \"Maximum read IOPS\": 25000,\n\"Maximum write IOPS\": 25000, \"Maximum read throughput (MiBps)\": 1200,\n\"Maximum write throughput (MiBps)\": 1200}]}\n}\"\"\"\nt_family_data = \"\"\"{\n\"T2D VMs\": {\"pd-standard\": [{\"VM vCPU count\": \"2-7\", \"Maximum read IOPS\": 15000,\n\"Maximum write IOPS\": 15000, \"Maximum read throughput (MiBps)\": 240,\n\"Maximum write throughput (MiBps)\": 240}]},\n\"T2A VMs\": {\"pd-standard\": [{\"VM vCPU count\": \"4-7\", \"Maximum read IOPS\": 15000,\n\"Maximum write IOPS\": 15000, \"Maximum read throughput (MiBps)\": 240,\n\"Maximum write throughput (MiBps)\": 240}]}\n}\"\"\"\n\ne_family_data = \"\"\"{\n\"E2 VMs\": {\"pd-balanced\": [{\"VM vCPU count\": \"2-7\", \"Maximum read IOPS\": 15000,\n\"Maximum write IOPS\": 15000, \"Maximum read throughput (MiBps)\": 240,\n\"Maximum write throughput (MiBps)\": 240}],\n\"pd-ssd\": [{\"VM vCPU count\": \"2-7\", \"Maximum read IOPS\": 15000,\n\"Maximum write IOPS\": 15000, \"Maximum read throughput (MiBps)\": 240,\n\"Maximum write throughput (MiBps)\": 240}],\n\"pd-extreme\": [{\"VM vCPU count\": \"2-7\", \"Maximum read IOPS\": 15000,\n\"Maximum write IOPS\": 15000, \"Maximum read throughput (MiBps)\": 240,\n\"Maximum write throughput (MiBps)\": 240}],\n\"pd-standard\": [{\"VM vCPU count\": \"2-7\", \"Maximum read IOPS\": 15000,\n\"Maximum write IOPS\": 15000, \"Maximum read throughput (MiBps)\": 240,\n\"Maximum write throughput (MiBps)\": 240}]}\n}\"\"\"\na_family_data = \"\"\"{\n\"A2 VMs\": {\"pd-balanced\": [{\"Machine type\": \"a2-highgpu-1g\", \"Maximum read IOPS\": 3000,\n\"Maximum write IOPS\": 3000, \"Maximum read throughput (MiBps)\": 120,\n\"Maximum write throughput (MiBps)\": 120}]},\n\"A2 Ultra VMs\": {\"pd-balanced\": [{\"Machine type\": \"a2-ultragpu-1g\", \"Maximum read IOPS\": 3000,\n\"Maximum write IOPS\": 3000, \"Maximum read throughput (MiBps)\": 120,\n\"Maximum write throughput (MiBps)\": 120}]},\n\"F1 VMs\": {},\n\"G2 VMs\": {},\n\"M1 VMs\": {\"pd-ssd\": [{\"Machine type\": \"m1-ultramem-40\", \"Maximum read IOPS\": 60000,\n\"Maximum write IOPS\": 60000, \"Maximum read throughput (MiBps)\": 1200,\n\"Maximum write throughput (MiBps)\": 1200}]},\n\"M2 VMs\": {},\n\"M3 VMs\": {}\n}\"\"\"\n\n\nclass DiskIopsThroughputUtilisationChecksTest(VmPerformanceStepTestBase):\n  \"\"\"Test DiskIopsThroughputUtilisationChecks step.\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    self.mock_disk = mock.Mock(spec=gce.Disk)\n    self.mock_disk.name = 'disk-1'\n    self.mock_disk.type = 'pd-balanced'\n    self.mock_disk.size = 100\n    self.mock_disk.provisionediops = 0\n    self.mock_gce_get_all_disks_of_instance.return_value = {\n        'disk-1': self.mock_disk\n    }\n    self.mock_monitoring_query.side_effect = [\n        # cpu_count_query\n        {\n            '1': {\n                'values': [[1]]\n            }\n        },\n        # actual_usage_comparison query 1\n        [],\n        # actual_usage_comparison query 2\n        [],\n        # actual_usage_comparison query 3\n        [],\n        # actual_usage_comparison query 4\n        [],\n    ]\n\n  @mock.patch('builtins.open', mock.mock_open())\n  @mock.patch('json.load')\n  def test_n1_pd_balanced_ok(self, mock_json_load):\n    mock_json_load.side_effect = [\n        json.loads(limits_per_gb_data),\n        json.loads(n_family_data),\n    ]\n    step = vm_performance.DiskIopsThroughputUtilisationChecks()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.assertEqual(mock_json_load.call_count, 2)\n    self.assertEqual(self.mock_monitoring_query.call_count, 5)\n    self.assertEqual(self.mock_interface.add_ok.call_count, 4)\n\n  @mock.patch('builtins.open', mock.mock_open())\n  @mock.patch('json.load')\n  def test_c2_pd_ssd_ok(self, mock_json_load):\n    self.mock_instance.machine_type.return_value = 'c2-standard-4'\n    self.mock_monitoring_query.side_effect = [{\n        '1': {\n            'values': [[4]]\n        }\n    }, [], [], [], []]\n    self.mock_disk.type = 'pd-ssd'\n    self.mock_gce_get_all_disks_of_instance.return_value = {\n        'disk-1': self.mock_disk\n    }\n    mock_json_load.side_effect = [\n        json.loads(limits_per_gb_data),\n        json.loads(c_family_data),\n    ]\n    step = vm_performance.DiskIopsThroughputUtilisationChecks()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.assertEqual(mock_json_load.call_count, 2)\n    self.assertEqual(self.mock_monitoring_query.call_count, 5)\n    self.assertEqual(self.mock_interface.add_ok.call_count, 4)\n\n  @mock.patch('builtins.open', mock.mock_open())\n  @mock.patch('json.load')\n  def test_n1_pd_balanced_high_usage(self, mock_json_load):\n    self.mock_monitoring_query.side_effect = [\n        # cpu_count_query\n        {\n            '1': {\n                'values': [[1]]\n            }\n        },\n        {\n            'some_id': {\n                'values': [['val1'], ['val2'], ['val3']]\n            }\n        },\n        {},\n        {\n            'some_id': {\n                'values': [['val1'], ['val2'], ['val3']]\n            }\n        },\n        {},\n    ]\n    mock_json_load.side_effect = [\n        json.loads(limits_per_gb_data),\n        json.loads(n_family_data),\n    ]\n    step = vm_performance.DiskIopsThroughputUtilisationChecks()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.assertEqual(mock_json_load.call_count, 2)\n    self.assertEqual(self.mock_monitoring_query.call_count, 5)\n    self.assertEqual(self.mock_interface.add_failed.call_count, 2)\n    self.assertEqual(self.mock_interface.add_ok.call_count, 2)\n\n  @mock.patch('builtins.open', mock.mock_open())\n  @mock.patch('json.load')\n  def test_t2d_pd_standard_ok(self, mock_json_load):\n    self.mock_instance.machine_type.return_value = 't2d-standard-4'\n    self.mock_monitoring_query.side_effect = [\n        {\n            '1': {\n                'values': [[4]]\n            }\n        },\n        [],\n        [],\n        [],\n        [],\n    ]\n    self.mock_disk.type = 'pd-standard'\n    mock_json_load.side_effect = [\n        json.loads(limits_per_gb_data),\n        json.loads(t_family_data),\n    ]\n    step = vm_performance.DiskIopsThroughputUtilisationChecks()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.assertEqual(mock_json_load.call_count, 2)\n    self.assertEqual(self.mock_monitoring_query.call_count, 5)\n    self.assertEqual(self.mock_interface.add_ok.call_count, 4)\n\n  @mock.patch('builtins.open', mock.mock_open())\n  @mock.patch('json.load')\n  def test_e2_pd_balanced_ok(self, mock_json_load):\n    self.mock_instance.machine_type.return_value = 'e2-standard-4'\n    self.mock_monitoring_query.side_effect = [\n        {\n            '1': {\n                'values': [[4]]\n            }\n        },\n        [],\n        [],\n        [],\n        [],\n    ]\n    self.mock_disk.type = 'pd-balanced'\n    mock_json_load.side_effect = [\n        json.loads(limits_per_gb_data),\n        json.loads(e_family_data),\n    ]\n    step = vm_performance.DiskIopsThroughputUtilisationChecks()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.assertEqual(mock_json_load.call_count, 2)\n    self.assertEqual(self.mock_monitoring_query.call_count, 5)\n    self.assertEqual(self.mock_interface.add_ok.call_count, 4)\n\n  @mock.patch('builtins.open', mock.mock_open())\n  @mock.patch('json.load')\n  def test_n2_pd_extreme_ok(self, mock_json_load):\n    self.mock_instance.machine_type.return_value = 'n2-standard-80'  # > 63 cpus\n    self.mock_disk.type = 'pd-extreme'\n    self.mock_disk.provisionediops = 50000\n    self.mock_monitoring_query.side_effect = [\n        # cpu_count_query\n        {\n            '1': {\n                'values': [[80]]\n            }\n        },\n        # actual_usage_comparison queries\n        {},\n        {},\n        {},\n        {},\n    ]\n    mock_json_load.side_effect = [\n        json.loads(limits_per_gb_data),\n        json.loads(n_family_data),\n    ]\n    step = vm_performance.DiskIopsThroughputUtilisationChecks()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.assertEqual(mock_json_load.call_count, 2)\n    self.assertEqual(self.mock_monitoring_query.call_count, 5)\n    self.assertEqual(self.mock_interface.add_ok.call_count, 4)\n\n  @mock.patch('builtins.open', mock.mock_open())\n  @mock.patch('json.load')\n  def test_unsupported_machine_type(self, mock_json_load):\n    self.mock_instance.machine_type.return_value = 'x1-standard-1'\n    self.mock_monitoring_query.side_effect = [{'1': {'values': [[1]]}}]\n    mock_json_load.side_effect = [\n        json.loads(limits_per_gb_data),\n        json.loads(n_family_data),\n    ]\n    step = vm_performance.DiskIopsThroughputUtilisationChecks()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n    self.assertEqual(mock_json_load.call_count, 2)\n\n  @mock.patch('builtins.open', mock.mock_open())\n  @mock.patch('json.load')\n  def test_custom_machine_type(self, mock_json_load):\n    self.mock_instance.machine_type.return_value = 'custom-2-4096'\n    self.mock_monitoring_query.side_effect = [{\n        '1': {\n            'values': [[2]]\n        }\n    }, [], [], [], []]\n    self.mock_disk.type = 'pd-balanced'\n    mock_json_load.side_effect = [\n        json.loads(limits_per_gb_data),\n        json.loads(n_family_data),\n    ]\n    step = vm_performance.DiskIopsThroughputUtilisationChecks()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.assertEqual(self.mock_interface.add_ok.call_count, 4)\n\n  @mock.patch('builtins.open', mock.mock_open())\n  @mock.patch('json.load')\n  def test_g1_small_unsupported_family(self, mock_json_load):\n    self.mock_instance.machine_type.return_value = 'g1-small'\n    self.mock_disk.type = 'pd-extreme'\n    mock_json_load.side_effect = [\n        json.loads(limits_per_gb_data),\n        json.loads(a_family_data),\n    ]\n    step = vm_performance.DiskIopsThroughputUtilisationChecks()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n  @mock.patch('builtins.open', mock.mock_open())\n  @mock.patch('json.load')\n  def test_e2_medium_machine_type(self, mock_json_load):\n    self.mock_instance.machine_type.return_value = 'e2-medium'\n    self.mock_monitoring_query.side_effect = [{\n        '1': {\n            'values': [[2]]\n        }\n    }, [], [], [], []]\n    self.mock_disk.type = 'pd-balanced'\n    e_family_data_medium = json.loads(e_family_data)\n    e_family_data_medium['E2 VMs']['pd-balanced'] = [{\n        'VM vCPU count': 'e2-medium*',\n        'Maximum read IOPS': 15000,\n        'Maximum write IOPS': 15000,\n        'Maximum read throughput (MiBps)': 240,\n        'Maximum write throughput (MiBps)': 240\n    }]\n    mock_json_load.side_effect = [\n        json.loads(limits_per_gb_data),\n        e_family_data_medium,\n    ]\n    step = vm_performance.DiskIopsThroughputUtilisationChecks()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.assertEqual(self.mock_interface.add_ok.call_count, 4)\n\n  @mock.patch('gcpdiag.runbook.gce.vm_performance.datetime')\n  @mock.patch('builtins.open', mock.mock_open())\n  @mock.patch('json.load')\n  def test_instance_just_stopped_window(self, mock_json_load, mock_datetime):\n    # Mock current time to be close to laststarttimestamp\n    mock_now = datetime.datetime(2025,\n                                 10,\n                                 27,\n                                 10,\n                                 2,\n                                 0,\n                                 tzinfo=datetime.timezone.utc)\n    mock_datetime.now.return_value = mock_now\n    mock_datetime.strptime.side_effect = datetime.datetime.strptime\n    mock_datetime.timedelta = datetime.timedelta\n\n    self.mock_instance.is_running = False\n    self.mock_instance.laststoptimestamp.return_value = (\n        '2025-10-27T09:55:00.000000+00:00')\n    mock_json_load.side_effect = [\n        json.loads(limits_per_gb_data),\n        json.loads(n_family_data),\n    ]\n    step = vm_performance.DiskIopsThroughputUtilisationChecks()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.assertEqual(self.mock_monitoring_query.call_count, 5)\n    query_string = self.mock_monitoring_query.call_args_list[0][0][1]\n    self.assertIn(\"within 9h, d'2025/10/27 09:55:00'\", query_string)\n\n  @mock.patch('builtins.open', mock.mock_open())\n  @mock.patch('json.load')\n  def test_actual_usage_comparision_http_error(self, mock_json_load):\n    mock_json_load.side_effect = [\n        json.loads(limits_per_gb_data),\n        json.loads(n_family_data),\n    ]\n    self.mock_monitoring_query.side_effect = [\n        {\n            '1': {\n                'values': [[1]]\n            }\n        },  # CPU count\n        googleapiclient.errors.HttpError(\n            mock.Mock(status=500),\n            b'internal error'),  # actual_usage_comparision\n        googleapiclient.errors.HttpError(mock.Mock(status=500),\n                                         b'internal error'),\n        googleapiclient.errors.HttpError(mock.Mock(status=500),\n                                         b'internal error'),\n        googleapiclient.errors.HttpError(mock.Mock(status=500),\n                                         b'internal error'),\n    ]\n    step = vm_performance.DiskIopsThroughputUtilisationChecks()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.assertEqual(self.mock_interface.add_skipped.call_count, 4)\n\n  @mock.patch('builtins.open', mock.mock_open())\n  @mock.patch('json.load')\n  def test_t2a_machine_types(self, mock_json_load):\n    \"\"\"Targets logic for T2A machine types.\"\"\"\n    self.mock_instance.machine_type.return_value = 't2a-standard-4'\n    self.mock_monitoring_query.side_effect = [\n        {\n            '1': {\n                'values': [[4]]\n            }\n        },\n        [],\n        [],\n        [],\n        [],\n    ]\n    self.mock_disk.type = 'pd-standard'\n    mock_json_load.side_effect = [\n        json.loads(limits_per_gb_data),\n        json.loads(t_family_data),\n    ]\n    step = vm_performance.DiskIopsThroughputUtilisationChecks()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.assertEqual(mock_json_load.call_count, 2)\n    self.assertEqual(self.mock_monitoring_query.call_count, 5)\n    self.assertEqual(self.mock_interface.add_ok.call_count, 4)\n\n  @mock.patch('builtins.open', mock.mock_open())\n  @mock.patch('json.load')\n  def test_m_family_machine_types(self, mock_json_load):\n    \"\"\"Targets logic for M family machine types.\"\"\"\n    self.mock_instance.machine_type.return_value = 'm1-ultramem-40'\n    self.mock_monitoring_query.side_effect = [\n        {\n            '1': {\n                'values': [[40]]\n            }\n        },\n        [],\n        [],\n        [],\n        [],\n    ]\n    self.mock_disk.type = 'pd-ssd'\n    mock_json_load.side_effect = [\n        json.loads(limits_per_gb_data),\n        json.loads(a_family_data),\n    ]\n    step = vm_performance.DiskIopsThroughputUtilisationChecks()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.assertEqual(mock_json_load.call_count, 2)\n    self.assertEqual(self.mock_monitoring_query.call_count, 5)\n    self.assertEqual(self.mock_interface.add_ok.call_count, 4)\n\n  @mock.patch('builtins.open', mock.mock_open())\n  @mock.patch('json.load')\n  def test_c3_machine_types_pd_extreme(self, mock_json_load):\n    \"\"\"Targets logic for C3 machine types with pd-extreme.\"\"\"\n    self.mock_instance.machine_type.return_value = 'c3-standard-4'\n    self.mock_monitoring_query.side_effect = [{\n        '1': {\n            'values': [[4]]\n        }\n    }, [], [], [], []]\n    self.mock_disk.type = 'pd-extreme'\n    self.mock_disk.provisionediops = 10000\n    mock_json_load.side_effect = [\n        json.loads(limits_per_gb_data),\n        json.loads(c_family_data),\n    ]\n    step = vm_performance.DiskIopsThroughputUtilisationChecks()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.assertEqual(mock_json_load.call_count, 2)\n    self.assertEqual(self.mock_monitoring_query.call_count, 5)\n    self.assertEqual(self.mock_interface.add_ok.call_count, 4)\n\n  @mock.patch('builtins.open', mock.mock_open())\n  @mock.patch('json.load')\n  def test_n2d_machine_types_pd_standard(self, mock_json_load):\n    \"\"\"Targets logic for N2D machine types with pd-standard.\"\"\"\n    self.mock_instance.machine_type.return_value = 'n2d-standard-2'\n    self.mock_monitoring_query.side_effect = [\n        {\n            '1': {\n                'values': [[2]]\n            }\n        },\n        [],\n        [],\n        [],\n        [],\n    ]\n    self.mock_disk.type = 'pd-standard'\n    mock_json_load.side_effect = [\n        json.loads(limits_per_gb_data),\n        json.loads(n_family_data),\n    ]\n    step = vm_performance.DiskIopsThroughputUtilisationChecks()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.assertEqual(mock_json_load.call_count, 2)\n    self.assertEqual(self.mock_monitoring_query.call_count, 5)\n    self.assertEqual(self.mock_interface.add_ok.call_count, 4)\n\n  @mock.patch('builtins.open', mock.mock_open())\n  @mock.patch('json.load')\n  def test_e2_pd_extreme(self, mock_json_load):\n    \"\"\"Targets logic for E2 machine types with pd-extreme.\"\"\"\n    self.mock_instance.machine_type.return_value = 'e2-standard-4'\n    self.mock_monitoring_query.side_effect = [\n        {\n            '1': {\n                'values': [[4]]\n            }\n        },\n        [],\n        [],\n        [],\n        [],\n    ]\n    self.mock_disk.type = 'pd-extreme'\n    self.mock_disk.provisionediops = 12000\n    mock_json_load.side_effect = [\n        json.loads(limits_per_gb_data),\n        json.loads(e_family_data),\n    ]\n    step = vm_performance.DiskIopsThroughputUtilisationChecks()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.assertEqual(mock_json_load.call_count, 2)\n    self.assertEqual(self.mock_monitoring_query.call_count, 5)\n    self.assertEqual(self.mock_interface.add_ok.call_count, 4)\n\n  @mock.patch('builtins.open', mock.mock_open())\n  @mock.patch('json.load')\n  def test_limit_calculator_iops_write(self, mock_json_load):\n    \"\"\"Targets limit_calculator to ensure write IOPS are returned correctly.\"\"\"\n    self.mock_instance.machine_type.return_value = 'n1-standard-1'\n    self.mock_disk.type = 'pd-balanced'\n    mock_json_load.side_effect = [\n        json.loads(limits_per_gb_data),\n        json.loads(n_family_data),\n    ]\n    step = vm_performance.DiskIopsThroughputUtilisationChecks()\n    limits_data_loaded = json.loads(limits_per_gb_data)\n    mach_fam_json_data_loaded = json.loads(n_family_data)\n    results = step.limit_calculator(\n        limits_data_loaded,\n        mach_fam_json_data_loaded,\n        'pd-balanced',\n        100,\n        'N1 VMs',\n        'VM vCPU count',\n        '1',\n    )\n    self.assertEqual(results[5], 15000)  # max_write_iops\n    self.assertEqual(results[4], 600)  # vm_baseline_performance_w_iops\n\n\nclass VmPerformanceEndTest(VmPerformanceStepTestBase):\n  \"\"\"Test VmPerformanceEnd step.\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    self.mock_op_prompt = self.enterContext(\n        mock.patch('gcpdiag.runbook.op.prompt'))\n    self.mock_config_get = self.enterContext(mock.patch('gcpdiag.config.get'))\n\n  def test_end_step_no_interactive_mode_no_answer(self):\n    self.mock_config_get.return_value = False\n    self.mock_op_prompt.return_value = op.NO\n    step = vm_performance.VmPerformanceEnd()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_op_prompt.assert_called_once()\n    self.mock_interface.info.assert_called_once()\n\n  def test_end_step_no_interactive_mode_yes_answer(self):\n    self.mock_config_get.return_value = False\n    self.mock_op_prompt.return_value = op.YES\n    step = vm_performance.VmPerformanceEnd()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_op_prompt.assert_called_once()\n    self.mock_interface.info.assert_not_called()\n\n  def test_end_step_interactive_mode(self):\n    self.mock_config_get.return_value = True\n    step = vm_performance.VmPerformanceEnd()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_op_prompt.assert_not_called()\n\n\nclass VmPerformanceBuildTreeTest(unittest.TestCase):\n\n  @mock.patch('gcpdiag.runbook.gce.vm_performance.VmPerformance.add_step')\n  @mock.patch('gcpdiag.runbook.gce.vm_performance.VmPerformance.add_start')\n  @mock.patch('gcpdiag.runbook.gce.vm_performance.VmPerformance.add_end')\n  @mock.patch('gcpdiag.runbook.op.get')\n  def test_build_tree(self, mock_op_get, mock_add_end, mock_add_start,\n                      mock_add_step):\n    mock_op_get.return_value = 'test_value'\n    runbook = vm_performance.VmPerformance()\n    runbook.build_tree()\n\n    mock_add_start.assert_called_once()\n    self.assertIsInstance(mock_add_start.call_args[1]['step'],\n                          vm_performance.VmPerformanceStart)\n\n    step_instances = [call[1]['child'] for call in mock_add_step.call_args_list]\n    self.assertTrue(\n        any(\n            isinstance(s, gce_runbook.generalized_steps.HighVmCpuUtilization)\n            for s in step_instances))\n    self.assertTrue(\n        any(\n            isinstance(s, gce_runbook.generalized_steps.HighVmMemoryUtilization)\n            for s in step_instances))\n    self.assertTrue(\n        any(\n            isinstance(s, gce_runbook.generalized_steps.HighVmDiskUtilization)\n            for s in step_instances))\n    self.assertTrue(\n        any(\n            isinstance(s, vm_performance.CpuOvercommitmentCheck)\n            for s in step_instances))\n    self.assertTrue(\n        any(\n            isinstance(s, vm_performance.DiskHealthCheck)\n            for s in step_instances))\n    self.assertTrue(\n        any(\n            isinstance(s, vm_performance.DiskAvgIOLatencyCheck)\n            for s in step_instances))\n    self.assertTrue(\n        any(\n            isinstance(s, gce_runbook.generalized_steps.VmSerialLogsCheck)\n            for s in step_instances))\n    self.assertTrue(\n        any(\n            isinstance(s, vm_performance.CheckLiveMigrations)\n            for s in step_instances))\n\n    mock_add_end.assert_called_once()\n    self.assertIsInstance(mock_add_end.call_args[1]['step'],\n                          vm_performance.VmPerformanceEnd)\n\n\nclass VmPerformanceCoverageTest(VmPerformanceStepTestBase):\n  \"\"\"Additional coverage tests for the complex disk logic.\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    self.mock_monitoring_query.return_value = {\n        '1': {\n            'values': [[4]]\n        }  # 4 vCPUs default\n    }\n    self.mock_disk = mock.Mock(spec=gce.Disk)\n    self.mock_disk.name = 'disk-1'\n    self.mock_disk.size = 200\n    self.mock_disk.provisionediops = 0\n    self.mock_gce_get_all_disks_of_instance.return_value = {\n        'disk-1': self.mock_disk\n    }\n\n  @mock.patch('builtins.open', mock.mock_open())\n  @mock.patch('json.load')\n  def test_pd_standard_small_disk_limits(self, mock_json_load):\n    \"\"\"Targets logic for pd-standard disks < 100GB.\"\"\"\n    self.mock_disk.type = 'pd-standard'\n    self.mock_disk.size = 50  # < 100GB trigger\n    self.mock_instance.machine_type.return_value = 'n1-standard-4'\n\n    mock_json_load.side_effect = [\n        json.loads(limits_per_gb_data),\n        json.loads(n_family_data)\n    ]\n\n    self.mock_monitoring_query.side_effect = [\n        {\n            '1': {\n                'values': [[4]]\n            }\n        },\n        {\n            'some_id': {\n                'values': [['9999'], ['9999'], ['9999']]\n            }\n        },\n        {},\n        {},\n        {},\n    ]\n\n    step = vm_performance.DiskIopsThroughputUtilisationChecks()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n\n    self.mock_interface.add_failed.assert_called_once()\n    self.assertEqual(self.mock_interface.add_ok.call_count, 3)\n\n  @mock.patch('builtins.open', mock.mock_open())\n  @mock.patch('json.load')\n  def test_pd_extreme_n2_high_cpu(self, mock_json_load):\n    \"\"\"Targets pd-extreme logic for N2 VMs > 63 CPUs.\"\"\"\n    self.mock_disk.type = 'pd-extreme'\n    self.mock_disk.provisionediops = 50000\n    self.mock_instance.machine_type.return_value = 'n2-standard-80'\n\n    mock_json_load.side_effect = [\n        json.loads(limits_per_gb_data),\n        json.loads(n_family_data),\n    ]\n\n    self.mock_monitoring_query.side_effect = [\n        {\n            '1': {\n                'values': [[80]]\n            }\n        },\n        {},\n        {},\n        {},\n        {},\n    ]\n\n    step = vm_performance.DiskIopsThroughputUtilisationChecks()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.assertEqual(self.mock_interface.add_ok.call_count, 4)\n\n  @mock.patch('builtins.open', mock.mock_open())\n  @mock.patch('json.load')\n  def test_unsupported_disk_type(self, mock_json_load):\n    \"\"\"Targets the skipped block for unsupported disk types.\"\"\"\n    self.mock_disk.type = 'pd-unknown'\n    self.mock_monitoring_query.return_value = {'1': {'values': [[1]]}}\n\n    mock_json_load.side_effect = [\n        json.loads(limits_per_gb_data),\n        json.loads(n_family_data),\n    ]\n\n    step = vm_performance.DiskIopsThroughputUtilisationChecks()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  @mock.patch('builtins.open', mock.mock_open())\n  @mock.patch('json.load')\n  def test_a2_pd_balanced_ok(self, mock_json_load):\n    \"\"\"Targets logic for A2 machine types.\"\"\"\n    self.mock_instance.machine_type.return_value = 'a2-highgpu-1g'\n    self.mock_monitoring_query.side_effect = [\n        {\n            '1': {\n                'values': [[8]]\n            }\n        },\n        [],\n        [],\n        [],\n        [],\n    ]\n    self.mock_disk.type = 'pd-balanced'\n    mock_json_load.side_effect = [\n        json.loads(limits_per_gb_data),\n        json.loads(a_family_data),\n    ]\n    step = vm_performance.DiskIopsThroughputUtilisationChecks()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.assertEqual(mock_json_load.call_count, 2)\n    self.assertEqual(self.mock_monitoring_query.call_count, 5)\n    self.assertEqual(self.mock_interface.add_ok.call_count, 4)\n\n  @mock.patch('builtins.open', mock.mock_open())\n  @mock.patch('json.load')\n  def test_a2_ultragpu_machine_type(self, mock_json_load):\n    \"\"\"Targets logic for A2 UltraGPU machine types.\"\"\"\n    self.mock_instance.machine_type.return_value = 'a2-ultragpu-1g'\n    self.mock_monitoring_query.side_effect = [\n        {\n            '1': {\n                'values': [[12]]\n            }\n        },\n        [],\n        [],\n        [],\n        [],\n    ]\n    self.mock_disk.type = 'pd-balanced'\n    mock_json_load.side_effect = [\n        json.loads(limits_per_gb_data),\n        json.loads(a_family_data),\n    ]\n    step = vm_performance.DiskIopsThroughputUtilisationChecks()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.assertEqual(mock_json_load.call_count, 2)\n    self.assertEqual(self.mock_monitoring_query.call_count, 5)\n    self.assertEqual(self.mock_interface.add_ok.call_count, 4)\n\n  def test_disk_iops_utilisation_unbound_local(self):\n    \"\"\"Reproduces UnboundLocalError when monitoring.query raises HttpError.\"\"\"\n    self.params[flags.START_TIME] = datetime.datetime(2024,\n                                                      1,\n                                                      1,\n                                                      tzinfo=timezone.utc)\n    self.params[flags.END_TIME] = datetime.datetime(2024,\n                                                    1,\n                                                    1,\n                                                    1,\n                                                    tzinfo=timezone.utc)\n\n    self.mock_instance.laststarttimestamp.return_value = (\n        '2024-01-01T00:00:00.000000+00:00')\n    self.mock_instance.is_running = True\n\n    self.mock_monitoring_query.side_effect = apiclient.errors.HttpError(\n        resp=mock.Mock(status=403), content=b'Forbidden')\n\n    step = vm_performance.DiskIopsThroughputUtilisationChecks()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n\n\nif __name__ == '__main__':\n  unittest.main()\n"
  },
  {
    "path": "gcpdiag/runbook/gce/vm_termination.py",
    "content": "#\n# Copyright 2024 Google LLC\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Module containing VM Termination diagnostic tree and custom steps\"\"\"\n\nimport re\nfrom datetime import datetime\n\nimport googleapiclient.errors\nfrom boltons.iterutils import get_path\nfrom dateutil import parser\n\nfrom gcpdiag import runbook, utils\nfrom gcpdiag.queries import crm, gce, logs\nfrom gcpdiag.runbook import exceptions as runbook_exceptions\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.gce import constants, flags\nfrom gcpdiag.runbook.gce import util as gce_util\n\nTERMINATION_OPERATION_FILTER = '''(targetId = \"{INSTANCE_ID}\") AND\n    (operationType = \"compute.instances.repair.recreateInstance\") OR\n    (operationType = \"compute.instances.hostError\") OR\n    (operationType = \"compute.instances.guestTerminate\") OR\n    (operationType = \"compute.instances.preempted\") OR\n    (operationType = \"compute.instances.terminateOnHostMaintenance\") OR\n    (operationType = \"stop\") OR\n    (operationType = \"compute.instanceGroupManagers.resizeAdvanced\") OR\n    (operationType = \"compute.autoscalers.resize\")\n    '''\n\n\nclass VmTermination(runbook.DiagnosticTree):\n  \"\"\"GCE Instance unexpected shutdowns and reboots diagnostics\n\n  This runbook assists in investigating and understanding the reasons behind unexpected\n  terminations or reboots of GCE Virtual Machines (VMs).\n\n  Areas investigated:\n\n  - System event-triggered shutdowns and reboots: Identifies terminations initiated by Google Cloud\n    systems due to maintenance events, hardware failures, or resource constraints.\n\n  - Admin activities-triggered shutdown/reboot: Investigates terminations caused by direct actions,\n    such as API calls made by users or service accounts, including manual shutdowns, restarts, or\n    automated processes impacting VM states.\n  \"\"\"\n  parameters = {\n      flags.PROJECT_ID: {\n          'type': str,\n          'help': 'The Project ID hosting the terminated VM.',\n          'required': True\n      },\n      flags.INSTANCE_NAME: {\n          'type':\n              str,\n          'help':\n              'The name of the terminated VM. Or provide the id i.e -p id=<int>',\n          'required':\n              True\n      },\n      flags.INSTANCE_ID: {\n          'type':\n              int,\n          'help':\n              'The instance ID of the terminated VM. Or provide name instead i.e -p name=<str>'\n      },\n      flags.ZONE: {\n          'type': str,\n          'help': 'The Google Cloud zone where the terminated VM is located.',\n          'required': True\n      },\n      flags.START_TIME: {\n          'type':\n              datetime,\n          'help':\n              'The start window to investigate vm termination. Format: YYYY-MM-DDTHH:MM:SSZ'\n      },\n      flags.END_TIME: {\n          'type':\n              datetime,\n          'help':\n              'The end window for the investigation. Format: YYYY-MM-DDTHH:MM:SSZ'\n      },\n      flags.OPERATION_TYPE: {\n          'type':\n              str,\n          'help':\n              'The type of operation to investigate. eg. \"compute.instances.hostError\"',\n      }\n  }\n\n  def build_tree(self):\n    \"\"\"Composes the VM runbook tree\"\"\"\n    start = VmTerminationStart()\n    self.add_start(start)\n    self.add_step(parent=start, child=TerminationOperationType())\n    self.add_end(VmTerminationEnd())\n\n\nclass VmTerminationStart(runbook.StartStep):\n  \"\"\"VM termination pre-runbook checks\"\"\"\n\n  def execute(self):\n    \"\"\"Validate the provided parameters to investigate VM terminations.\"\"\"\n    project = crm.get_project(op.get(flags.PROJECT_ID))\n    op.put(flags.PROJECT_NUMBER, project.number)\n    vm = None\n    try:\n      name = op.get(flags.INSTANCE_NAME) or op.get(flags.INSTANCE_ID)\n      vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID),\n                            zone=op.get(flags.ZONE),\n                            instance_name=name)\n    except (googleapiclient.errors.HttpError, KeyError):\n      op.add_skipped(\n          project,\n          reason=('Instance {} does not exist in zone {} or project {}').format(\n              name, op.get(flags.ZONE), op.get(flags.PROJECT_ID)))\n    else:\n      if vm and name.isdigit():\n        op.put(flags.INSTANCE_NAME, vm.name)\n      elif vm and not name.isdigit():\n        op.put(flags.INSTANCE_ID, vm.id)\n\n    # Improvements: output details of the VM as op.info\n\n\ndef is_within_window(operation, start_time, end_time):\n  \"\"\"Check if the operation is within the given time window\"\"\"\n  operation_time = parser.parse(operation['startTime'])\n  return start_time <= operation_time <= end_time\n\n\nclass TerminationOperationType(runbook.Gateway):\n  \"\"\"Determine the type of termination\n\n  Analyzes log entries to identify whether the termination was normal or abnormal\n  from a guest OS perspective. Was the shutdown intentionally issued by a user or a system fault?\n  \"\"\"\n\n  def execute(self):\n    \"\"\"Investigate VM termination reason.\"\"\"\n    project = crm.get_project(op.get(flags.PROJECT_ID))\n    try:\n      gce_util.ensure_instance_resolved()\n    except (runbook_exceptions.FailedStepError,\n            runbook_exceptions.MissingParameterError) as e:\n      op.add_skipped(project, reason=str(e))\n      return\n\n    instance_id = op.get(flags.INSTANCE_ID)\n    operation_type = op.get(flags.OPERATION_TYPE)\n    filter_str = (\n        f'(targetId = \"{instance_id}\") AND (operationType = \"{operation_type}\")'\n        if operation_type else TERMINATION_OPERATION_FILTER.format(\n            INSTANCE_ID=instance_id))\n\n    res = gce.get_global_operations(\n        project=op.get(flags.PROJECT_ID),\n        filter_str=filter_str,\n        service_project_number=project.number,\n        order_by='creationTimestamp desc',\n        max_results=5,\n    )\n\n    start = op.get(flags.START_TIME)\n    end = op.get(flags.END_TIME)\n\n    operations = list(filter(lambda o: is_within_window(o, start, end), res))\n    if operations:\n      # get the most recent termination operation\n      operation_type = get_path(operations[0], ('operationType'))\n      progress = get_path(operations[0], ('progress'))\n      # if part of a mig\n      if progress == 100 and operation_type == constants.IG_INSTANCE_REPAIR_METHOD:\n        mig_recreation = ManagedInstanceGroupRecreation()\n        mig_recreation.status = get_path(operations[0], ('statusMessage'))\n        self.add_child(mig_recreation)\n      elif progress == 100 and operation_type == constants.INSTANCE_PREMPTION_METHOD:\n        preemptible_instance_termination = PreemptibleInstance()\n        preemptible_instance_termination.status = get_path(\n            operations[0], ('statusMessage'))\n        self.add_child(preemptible_instance_termination)\n      elif progress == 100 and operation_type == constants.HOST_ERROR_METHOD:\n        host_error = HostError()\n        host_error.status = get_path(operations[0], ('statusMessage'))\n        self.add_child(host_error)\n      elif progress == 100 and operation_type == constants.GUEST_TERMINATE_METHOD:\n        # Coverage: Differentiate between user and system initiated shutdowns. eg: shutdown due\n        # to integrity monitoring https://cloud.google.com/compute/shielded-vm/docs/\n        # integrity-monitoring#updating-baseline\n        # Help users to understand the PCRs and how to fix it\n        guest_os_issued_shutdown = GuestOsIssuedShutdown()\n        guest_os_issued_shutdown.status = get_path(operations[0],\n                                                   ('statusMessage'))\n        self.add_child(guest_os_issued_shutdown)\n      elif progress == 100 and operation_type == constants.TERMINATE_ON_HOST_MAINTENANCE_METHOD:\n        terminate_on_host_maintenance = TerminateOnHostMaintenance()\n        terminate_on_host_maintenance.status = get_path(operations[0],\n                                                        ('statusMessage'))\n        self.add_child(terminate_on_host_maintenance)\n      elif progress == 100 and operation_type == 'stop':\n        stop_gateway = StopOperationGateway()\n        stop_gateway.stop_account = get_path(operations[0], ('user'))\n        stop_gateway.operation_name = get_path(operations[0], ('name'))\n        self.add_child(stop_gateway)\n    else:\n      op.add_skipped(project,\n                     reason='No matching operations found in time window.')\n\n\nclass ManagedInstanceGroupRecreation(runbook.Step):\n  \"\"\"Investigate if an instance recreation by MIG was normal\n\n  Determines if the instance was recreated as part of a normal Managed Instance Group (MIG) process.\n  \"\"\"\n  template = 'vm_termination::mig_instance_recreation'\n\n  def execute(self):\n    \"\"\"Investigate if instance was recreated by a MIG\"\"\"\n    vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID),\n                          zone=op.get(flags.ZONE),\n                          instance_name=op.get(flags.INSTANCE_NAME))\n    reason = op.prep_msg(op.FAILURE_REASON,\n                         full_resource_path=vm.full_path,\n                         status_message=self.status)\n    remediation = 'No action required.'\n    try:\n      if vm.created_by_mig and vm.mig.version_target_reached:\n        remediation = op.prep_msg(op.FAILURE_REMEDIATION,\n                                  full_resource_path=vm.full_path)\n      elif vm.created_by_mig and not vm.mig.version_target_reached:\n        # Coverage: Give more insights into what is preventing the instance from being recreated\n        remediation = op.prep_msg(op.FAILURE_REMEDIATION_ALT1,\n                                  full_resource_path=vm.full_path)\n    except AttributeError:\n      pass\n    op.add_failed(resource=vm, reason=reason, remediation=remediation)\n\n\nclass PreemptibleInstance(runbook.Step):\n  \"\"\"Investigate the cause of a preemptible VM termination\n\n  Preemptible VMs are short-lived instances. This step investigates normal or abnormal\n  circumstances leading to termination.\n  \"\"\"\n  template = 'vm_termination::preemptible_instance'\n\n  def execute(self):\n    \"\"\"Investigate the cause of a Spot VM termination\"\"\"\n    try:\n      vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID),\n                            zone=op.get(flags.ZONE),\n                            instance_name=op.get(flags.INSTANCE_NAME))\n    except googleapiclient.errors.HttpError:\n      op.add_skipped(resource=None, reason='Spot Instance has been deleted.')\n    else:\n      if vm.is_preemptible_vm and vm.is_running:\n        op.add_failed(resource=vm,\n                      reason=op.prep_msg(op.FAILURE_REASON,\n                                         full_resource_path=vm.full_path,\n                                         status_message=self.status),\n                      remediation=op.prep_msg(op.FAILURE_REMEDIATION,\n                                              full_resource_path=vm.full_path))\n      elif vm.is_preemptible_vm and not vm.is_running:\n        op.add_failed(resource=vm,\n                      reason=op.prep_msg(op.FAILURE_REASON,\n                                         full_resource_path=vm.full_path,\n                                         status_message=self.status),\n                      remediation=op.prep_msg(op.FAILURE_REMEDIATION_ALT1,\n                                              full_resource_path=vm.full_path))\n\n\nclass HostError(runbook.Step):\n  \"\"\"Investigate the cause of a host error\n\n  Host errors should be rare. This step provides insights into the root cause of the issue.\n  \"\"\"\n  template = 'vm_termination::host_error'\n\n  def execute(self):\n    \"\"\"Investigate the cause of a host error\"\"\"\n    vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID),\n                          zone=op.get(flags.ZONE),\n                          instance_name=op.get(flags.INSTANCE_NAME))\n    op.add_failed(resource=vm,\n                  reason=op.prep_msg(op.FAILURE_REASON,\n                                     full_resource_path=vm.full_path,\n                                     status_message=self.status),\n                  remediation=op.prep_msg(op.FAILURE_REMEDIATION,\n                                          full_resource_path=vm.full_path))\n\n\nclass GuestOsIssuedShutdown(runbook.Step):\n  \"\"\"Investigate shutdowns issued from within the guest OS\n\n  This step investigates whether the VM termination was initiated by a user or a system fault\n  within the guest OS. It provides insights into the root cause of the termination.\n  \"\"\"\n  template = 'vm_termination::guest_os_issued_shutdown'\n\n  def execute(self):\n    \"\"\"Investigate the cause of a guest OS issued shutdown\"\"\"\n    vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID),\n                          zone=op.get(flags.ZONE),\n                          instance_name=op.get(flags.INSTANCE_NAME))\n    # Coverage: analyze the serial port logs to provide more insights into the termination\n\n    op.add_failed(resource=vm,\n                  reason=op.prep_msg(op.FAILURE_REASON,\n                                     full_resource_path=vm.full_path,\n                                     status_message=self.status),\n                  remediation=op.prep_msg(op.FAILURE_REMEDIATION,\n                                          full_resource_path=vm.full_path))\n\n\nclass TerminateOnHostMaintenance(runbook.Step):\n  \"\"\"Investigate the cause of termination related to host maintenance\n\n  Termination on host maintenance is normal behavior. This step verifies if it was expected.\n  This will typically happen during a failed live migration.\n  \"\"\"\n  template = 'vm_termination::terminate_on_host_maintenance'\n  status: str\n\n  def execute(self):\n    \"\"\"Investigate the cause of termination on host maintenance\"\"\"\n    vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID),\n                          zone=op.get(flags.ZONE),\n                          instance_name=op.get(flags.INSTANCE_NAME))\n    op.add_failed(resource=vm,\n                  reason=op.prep_msg(op.FAILURE_REASON,\n                                     full_resource_path=vm.full_path,\n                                     status_message=self.status),\n                  remediation=op.prep_msg(op.FAILURE_REMEDIATION,\n                                          full_resource_path=vm.full_path))\n\n\nclass UserOrServiceAccountInitiatedStop(runbook.Step):\n  \"\"\"Investigate the cause of a user-initiated VM termination\n\n  This step investigates whether the VM termination was initiated by a user or a system fault.\n  \"\"\"\n  template = 'vm_termination::user_stop'\n  stop_account: str\n\n  def execute(self):\n    \"\"\"Investigate the cause of a user-initiated VM termination\"\"\"\n    vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID),\n                          zone=op.get(flags.ZONE),\n                          instance_name=op.get(flags.INSTANCE_NAME))\n\n    if not vm.is_running:\n      op.add_failed(resource=vm,\n                    reason=op.prep_msg(op.FAILURE_REASON,\n                                       full_resource_path=vm.full_path,\n                                       stop_account=self.stop_account),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION,\n                                            full_resource_path=vm.full_path,\n                                            stop_account=self.stop_account))\n    else:\n      op.add_failed(resource=vm,\n                    reason=op.prep_msg(op.FAILURE_REASON,\n                                       full_resource_path=vm.full_path,\n                                       stop_account=self.stop_account),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION_ALT1,\n                                            full_resource_path=vm.full_path,\n                                            stop_account=self.stop_account))\n\n\nclass ComputeClusterManagerTermination(runbook.Step):\n  \"\"\"Investigate termination initiated by GCP GCE Compute Cluster Manager\n\n  Google's Compute Cluster Manager can terminate instances due to billing issues or other reasons.\n  This step investigates the root cause of the termination.\n  \"\"\"\n  template = 'vm_termination::compute_cluster_manager_termination'\n  stop_account: str\n\n  def execute(self):\n    \"\"\"Investigate termination initiated by Google's Compute Cluster Manager\"\"\"\n    vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID),\n                          zone=op.get(flags.ZONE),\n                          instance_name=op.get(flags.INSTANCE_NAME))\n\n    vpc_project = 'Unknown'\n    network_name = 'Unknown'\n    # try to get more infomratino about the what happened\n    try:\n      network_string = vm.get_network_interfaces[0]['network']\n      m = re.match(r'^.+/projects/([^/]+)/global/networks/([^/]+)$',\n                   network_string)\n      if m:\n        vpc_project, network_name = m.group(1), m.group(2)\n\n    except googleapiclient.errors.HttpError as e:\n      err = utils.GcpApiError(e)\n      m = re.search(r'projects\\/([^\\/]+)', str(err.response))\n      if m:\n        vpc_project = m.group(1)\n    if vpc_project != op.get(flags.PROJECT_ID):\n      op.add_failed(resource=vm,\n                    reason=op.prep_msg(op.FAILURE_REASON,\n                                       full_resource_path=vm.full_path,\n                                       stop_account=self.stop_account),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION_ALT1,\n                                            full_resource_path=vm.full_path,\n                                            network_name=network_name,\n                                            shared_vpc_project=vpc_project,\n                                            stop_account=self.stop_account))\n\n\nclass StopOperationGateway(runbook.Gateway):\n  \"\"\"Determine the kind of stop operation\n\n  Stop operations can be caused by a user, customer-owned service account, or Google workflows\n  due to billing issues or resource policies.\n  \"\"\"\n  stop_account: str\n  operation_name: str\n\n  def execute(self):\n    \"\"\"Decision point to investigate various stop operation types\"\"\"\n    # Termination due to scheduled policy\n    compute_sa = f'service-{op.get(flags.PROJECT_NUMBER)}@compute-system.iam.gserviceaccount.com'\n    if self.stop_account == compute_sa:\n      log_entries = logs.realtime_query(\n          project_id=op.get(flags.PROJECT_ID),\n          filter_str=f'''resource.labels.instance_id=\"{op.get(flags.INSTANCE_ID)}\"\n        operation.id=\"{self.operation_name}\"\n        ''',\n          start_time=op.get(flags.START_TIME),\n          end_time=op.get(flags.END_TIME))\n      if log_entries:\n        for log_entry in log_entries:\n          if get_path(log_entry,\n                      ('protoPayload', 'methodName')) == 'ScheduledVMs':\n            scheduled_stop_policy = ScheduledStopPolicy()\n            scheduled_stop_policy.stop_account = self.stop_account\n            self.add_child(scheduled_stop_policy)\n            return\n    elif self.stop_account != constants.GCE_CLUSTER_MANAGER_EMAIL:\n      user_stop = UserOrServiceAccountInitiatedStop()\n      user_stop.stop_account = self.stop_account\n      self.add_child(user_stop)\n    elif self.stop_account == constants.GCE_CLUSTER_MANAGER_EMAIL:\n      compute_cluster_manager_termination = ComputeClusterManagerTermination()\n      compute_cluster_manager_termination.stop_account = self.stop_account\n      self.add_child(compute_cluster_manager_termination)\n\n\nclass ScheduledStopPolicy(runbook.Step):\n  \"\"\"Investigate the cause of a scheduled stop policy\n\n  This step investigates whether the VM termination was initiated by a scheduled stop policy.\n  \"\"\"\n  template = 'vm_termination::scheduled_stop_policy'\n  stop_account: str\n\n  def execute(self):\n    \"\"\"Investigate the scheduled stop policy\"\"\"\n    vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID),\n                          zone=op.get(flags.ZONE),\n                          instance_name=op.get(flags.INSTANCE_NAME))\n\n    if vm.is_running:\n      op.add_failed(resource=vm,\n                    reason=op.prep_msg(op.FAILURE_REASON,\n                                       full_resource_path=vm.full_path,\n                                       stop_account=self.stop_account),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION,\n                                            full_resource_path=vm.full_path,\n                                            stop_account=self.stop_account))\n    else:\n      op.add_failed(resource=vm,\n                    reason=op.prep_msg(op.FAILURE_REASON,\n                                       full_resource_path=vm.full_path,\n                                       stop_account=self.stop_account),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION_ALT1,\n                                            full_resource_path=vm.full_path,\n                                            stop_account=self.stop_account))\n\n\nclass VmTerminationEnd(runbook.EndStep):\n  \"\"\"Finalize the diagnostics process for VM terminations\n\n  This step prompts the user to confirm satisfaction with the Root Cause Analysis (RCA) performed\n  for VM terminations. Depending on the user's response, it may conclude the runbook execution\n  or trigger additional steps, such as generating a report of the findings.\n  \"\"\"\n\n  def execute(self):\n    \"\"\"Finalize VM terminations diagnostics.\"\"\"\n    response = op.prompt(\n        kind=op.CONFIRMATION,\n        message='Are you satisfied with the VM termination RCA performed?')\n    if response == op.NO:\n      op.info(message=op.END_MESSAGE)\n      op.interface.rm.generate_report()\n"
  },
  {
    "path": "gcpdiag/runbook/gce/vm_termination_test.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0)\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Snapshot testing and unittest.\"\"\"\n\nimport datetime\nimport unittest\nfrom unittest import mock\n\nimport googleapiclient.errors\n\nfrom gcpdiag.queries import apis_stub\nfrom gcpdiag.queries import crm as crm_queries\nfrom gcpdiag.queries import gce as gce_queries\nfrom gcpdiag.runbook import exceptions as runbook_exceptions\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.gce import constants, flags, vm_termination\n\nDUMMY_PROJECT_ID = 'gcpdiag-gce5-aaaa'\nDUMMY_PROJECT_NUMBER = 123456012345\n\n\nclass MockMessage:\n  \"\"\"Mock messages for testing.\n\n  Simply returns the key to verify template usage.\n  \"\"\"\n\n  def get_msg(self, key, **kwargs):\n    del kwargs\n    return f'{key}'\n\n\nclass VmTerminationTestBase(unittest.TestCase):\n  \"\"\"Base class for VM Termination runbook tests using state-based verification.\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    self.enterContext(\n        mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub))\n\n    self.mock_interface = mock.create_autospec(op.InteractionInterface,\n                                               instance=True)\n    self.mock_interface.rm = mock.Mock()\n\n    self.operator = op.Operator(self.mock_interface)\n    self.operator.run_id = 'test-run'\n    self.operator.messages = MockMessage()\n\n    self.params = {\n        flags.PROJECT_ID:\n            DUMMY_PROJECT_ID,\n        flags.PROJECT_NUMBER:\n            DUMMY_PROJECT_NUMBER,\n        flags.INSTANCE_ID:\n            '111222333',\n        flags.INSTANCE_NAME:\n            'test-instance',\n        flags.ZONE:\n            'us-central1-a',\n        flags.START_TIME:\n            datetime.datetime(2025, 3, 18, tzinfo=datetime.timezone.utc),\n        flags.END_TIME:\n            datetime.datetime(2025, 3, 19, tzinfo=datetime.timezone.utc),\n    }\n    self.operator.parameters = self.params\n\n    self.mock_project = mock.Mock(spec=crm_queries.Project)\n    self.mock_project.number = DUMMY_PROJECT_NUMBER\n    self.enterContext(\n        mock.patch(\n            'gcpdiag.queries.crm.get_project',\n            return_value=self.mock_project,\n        ))\n\n    self.mock_vm = mock.Mock(spec=gce_queries.Instance)\n    self.mock_vm.full_path = (\n        f'projects/{DUMMY_PROJECT_ID}/zones/{self.params[flags.ZONE]}/'\n        f'instances/{self.params[flags.INSTANCE_NAME]}')\n    self.mock_vm.name = self.params[flags.INSTANCE_NAME]\n    self.mock_vm.id = self.params[flags.INSTANCE_ID]\n    self.mock_vm.is_running = True\n    self.mock_get_instance = self.enterContext(\n        mock.patch('gcpdiag.queries.gce.get_instance',\n                   return_value=self.mock_vm))\n\n    self.gce_get_ops_patch = self.enterContext(\n        mock.patch('gcpdiag.queries.gce.get_global_operations'))\n\n\ndef make_operation(op_type,\n                   start_time='2025-03-18T12:00:00Z',\n                   progress=100,\n                   status_message='test',\n                   user='test@example.com',\n                   name='test-op'):\n  \"\"\"Utility to create a mock operation dictionary.\"\"\"\n  return {\n      'operationType': op_type,\n      'startTime': start_time,\n      'progress': progress,\n      'statusMessage': status_message,\n      'user': user,\n      'name': name,\n  }\n\n\nclass TerminationOperationTypeTest(VmTerminationTestBase):\n  \"\"\"Test TerminationOperationType Gateway coverage.\"\"\"\n\n  def test_host_error_operation(self):\n    self.gce_get_ops_patch.return_value = [\n        make_operation(constants.HOST_ERROR_METHOD)\n    ]\n    step = vm_termination.TerminationOperationType()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      self.operator.set_step(step)\n      step.execute()\n      assert any(isinstance(c, vm_termination.HostError) for c in step.steps)\n\n  def test_stop_operation(self):\n    self.gce_get_ops_patch.return_value = [make_operation('stop')]\n    step = vm_termination.TerminationOperationType()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n      assert any(\n          isinstance(c, vm_termination.StopOperationGateway)\n          for c in step.steps)\n\n  def test_preempted_operation(self):\n    self.gce_get_ops_patch.return_value = [\n        make_operation(constants.INSTANCE_PREMPTION_METHOD)\n    ]\n    step = vm_termination.TerminationOperationType()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n      assert any(\n          isinstance(c, vm_termination.PreemptibleInstance) for c in step.steps)\n\n  def test_shutdown_operation(self):\n    self.gce_get_ops_patch.return_value = [\n        make_operation('compute.instances.guestTerminate')\n    ]\n    step = vm_termination.TerminationOperationType()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n      assert any(\n          isinstance(c, vm_termination.GuestOsIssuedShutdown)\n          for c in step.steps)\n\n  def test_mig_repair_operation(self):\n    self.gce_get_ops_patch.return_value = [\n        make_operation(constants.IG_INSTANCE_REPAIR_METHOD)\n    ]\n    step = vm_termination.TerminationOperationType()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n      assert any(\n          isinstance(c, vm_termination.ManagedInstanceGroupRecreation)\n          for c in step.steps)\n\n  def test_no_relevant_operation(self):\n    self.gce_get_ops_patch.return_value = [make_operation('other-operation')]\n    step = vm_termination.TerminationOperationType()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n      self.assertEqual(len(step.steps), 0)\n\n\nclass TestVmTerminationStubs(VmTerminationTestBase):\n  \"\"\"Test VM Termination runbook steps with mocks and stubs.\"\"\"\n\n  def test_is_within_window(self):\n    operation = {'startTime': '2025-03-18T12:00:00Z'}\n    start = self.params[flags.START_TIME]\n    end = self.params[flags.END_TIME]\n    self.assertTrue(vm_termination.is_within_window(operation, start, end))\n\n  def test_start_step_instance_not_found(self):\n    self.mock_get_instance.side_effect = googleapiclient.errors.HttpError(\n        mock.Mock(status=404), b'Not Found')\n    step = vm_termination.VmTerminationStart()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_termination_op_type_unresolved(self):\n    with op.operator_context(self.operator):\n      with mock.patch(\n          'gcpdiag.runbook.gce.util.ensure_instance_resolved',\n          side_effect=runbook_exceptions.MissingParameterError('missing')):\n        step = vm_termination.TerminationOperationType()\n        self.operator.set_step(step)\n        step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_mig_recreation_target_reached(self):\n    self.mock_vm.created_by_mig = True\n    self.mock_vm.mig = mock.Mock(version_target_reached=True)\n    step = vm_termination.ManagedInstanceGroupRecreation()\n    step.status = 'recreating'\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once_with(\n        resource=self.mock_vm,\n        reason='failure_reason',\n        remediation='failure_remediation',\n        run_id='test-run',\n        step_execution_id=mock.ANY)\n\n  def test_preemptible_instance_skipped(self):\n    self.mock_get_instance.side_effect = googleapiclient.errors.HttpError(\n        mock.Mock(status=404), b'Not Found')\n    step = vm_termination.PreemptibleInstance()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_host_error_execution(self):\n    step = vm_termination.HostError()\n    step.status = 'Hardware failure'\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n  def test_guest_os_shutdown_execution(self):\n    step = vm_termination.GuestOsIssuedShutdown()\n    step.status = 'Power button pressed'\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n  def test_terminate_on_maintenance_execution(self):\n    step = vm_termination.TerminateOnHostMaintenance()\n    step.status = 'Live migration failed'\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n  def test_user_stop_stopped_state(self):\n    self.mock_vm.is_running = False\n    step = vm_termination.UserOrServiceAccountInitiatedStop()\n    step.stop_account = 'user@example.com'\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n  def test_ccm_termination_api_error(self):\n    type(self.mock_vm).get_network_interfaces = mock.PropertyMock(\n        side_effect=googleapiclient.errors.HttpError(mock.Mock(\n            status=403), b'Permission denied'))\n    step = vm_termination.ComputeClusterManagerTermination()\n    step.stop_account = constants.GCE_CLUSTER_MANAGER_EMAIL\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n    del type(self.mock_vm).get_network_interfaces\n\n  def test_stop_gateway_scheduled_policy(self):\n    step = vm_termination.StopOperationGateway()\n    step.stop_account = (\n        f'service-{DUMMY_PROJECT_NUMBER}@compute-system.iam.gserviceaccount.com'\n    )\n    step.operation_name = 'test-op'\n    with op.operator_context(self.operator):\n      with mock.patch(\n          'gcpdiag.queries.logs.realtime_query',\n          return_value=[{\n              'protoPayload': {\n                  'methodName': 'ScheduledVMs'\n              }\n          }],\n      ):\n        self.operator.set_step(step)\n        step.execute()\n        assert any(\n            isinstance(c, vm_termination.ScheduledStopPolicy)\n            for c in step.steps)\n\n  def test_start_step_instance_found_by_id(self):\n    self.operator.parameters[flags.INSTANCE_NAME] = '111222333'\n    step = vm_termination.VmTerminationStart()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.assertEqual(self.operator.parameters[flags.INSTANCE_NAME],\n                     self.mock_vm.name)\n\n  def test_start_step_instance_found_by_name(self):\n    self.operator.parameters[flags.INSTANCE_NAME] = 'test-instance'\n    step = vm_termination.VmTerminationStart()\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.assertEqual(self.operator.parameters[flags.INSTANCE_ID],\n                     self.mock_vm.id)\n\n  def test_mig_recreation_target_not_reached(self):\n    self.mock_vm.created_by_mig = True\n    self.mock_vm.mig = mock.Mock(version_target_reached=False)\n    step = vm_termination.ManagedInstanceGroupRecreation()\n    step.status = 'recreating'\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once_with(\n        resource=self.mock_vm,\n        reason='failure_reason',\n        remediation='failure_remediation_a1',\n        run_id='test-run',\n        step_execution_id=mock.ANY)\n\n  def test_preemptible_instance_not_running(self):\n    self.mock_vm.is_preemptible_vm = True\n    self.mock_vm.is_running = False\n    step = vm_termination.PreemptibleInstance()\n    step.status = 'preempted'\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once_with(\n        resource=self.mock_vm,\n        reason='failure_reason',\n        remediation='failure_remediation_a1',\n        run_id='test-run',\n        step_execution_id=mock.ANY)\n\n  def test_ccm_termination_shared_vpc(self):\n    self.mock_vm.get_network_interfaces = [{\n        'network':\n            'https://www.googleapis.com/compute/v1/projects/shared-vpc-host/global/networks/vpc-1'\n    }]\n    step = vm_termination.ComputeClusterManagerTermination()\n    step.stop_account = constants.GCE_CLUSTER_MANAGER_EMAIL\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n  def test_stop_gateway_user_stop(self):\n    step = vm_termination.StopOperationGateway()\n    step.stop_account = 'user@example.com'\n    step.operation_name = 'test-op'\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n      self.assertTrue(\n          any(\n              isinstance(c, vm_termination.UserOrServiceAccountInitiatedStop)\n              for c in step.steps))\n\n  def test_stop_gateway_ccm_termination(self):\n    step = vm_termination.StopOperationGateway()\n    step.stop_account = constants.GCE_CLUSTER_MANAGER_EMAIL\n    step.operation_name = 'test-op'\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n      self.assertTrue(\n          any(\n              isinstance(c, vm_termination.ComputeClusterManagerTermination)\n              for c in step.steps))\n\n  def test_scheduled_stop_policy_running(self):\n    self.mock_vm.is_running = True\n    step = vm_termination.ScheduledStopPolicy()\n    step.stop_account = f'service-{DUMMY_PROJECT_NUMBER}@compute-system.iam.gserviceaccount.com'\n    with op.operator_context(self.operator):\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once_with(\n        resource=self.mock_vm,\n        reason='failure_reason',\n        remediation='failure_remediation',\n        run_id='test-run',\n        step_execution_id=mock.ANY)\n\n  def test_vm_termination_end_satisfied(self):\n    step = vm_termination.VmTerminationEnd()\n    with op.operator_context(self.operator):\n      with mock.patch('gcpdiag.runbook.op.prompt', return_value=op.YES):\n        self.operator.set_step(step)\n        step.execute()\n        self.operator.interface.rm.generate_report.assert_not_called()\n"
  },
  {
    "path": "gcpdiag/runbook/gcf/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/runbook/gcf/constants.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Constants applicable relevant to only gcf implementation\"\"\"\n# pylint: disable=unused-wildcard-import, wildcard-import\nfrom gcpdiag.runbook.iam.constants import *\n\nSERVICE_AGENT_ROLE = 'roles/cloudfunctions.serviceAgent'\nUSER_PRINCIPAL_ROLE = 'roles/iam.serviceAccountUser'\n"
  },
  {
    "path": "gcpdiag/runbook/gcf/failed_deployments.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Cloud Run function failed deployments check\"\"\"\n\nfrom datetime import datetime\n\nimport googleapiclient.errors\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import config, runbook\nfrom gcpdiag.queries import crm, iam, logs\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.gcf import constants as gcf_const\nfrom gcpdiag.runbook.gcf import flags\nfrom gcpdiag.runbook.iam import generalized_steps as iam_gs\n\n\nclass FailedDeployments(runbook.DiagnosticTree):\n  \"\"\" Cloud Run function failed deployments check\n\n  This runbook will assist users to check reasons for failed deployments of Gen2 cloud functions.\n  Current basic Validations:\n  - Check for existence of Default SA\n  - Check for existence of Cloud function Service Agent\n  - Check for existence of cloud functions Service Agent and its permissions\n  - Check for error logs for global scope code errors and resource location constraint.\n  \"\"\"\n  parameters = {\n      flags.PROJECT_ID: {\n          'type': str,\n          'help': 'The Project ID containing the cloud function',\n          'required': True\n      },\n      flags.NAME: {\n          'type': str,\n          'help': 'Name of the cloud function failing deployment',\n          'deprecated': True,\n          'new_parameter': 'cloud_function_name',\n      },\n      flags.CLOUD_FUNCTION_NAME: {\n          'type': str,\n          'help': 'Name of the cloud function failing deployment',\n          'required': True\n      },\n      flags.REGION: {\n          'type': str,\n          'help': 'Region of the cloud function failing deployment',\n          'required': True\n      },\n      flags.START_TIME: {\n          'type': datetime,\n          'help': 'Start time of the issue Format: YYYY-MM-DDTHH:MM:SSZ',\n      },\n      flags.END_TIME: {\n          'type': datetime,\n          'help': 'End time of the issue. Format: YYYY-MM-DDTHH:MM:SSZ',\n      },\n      flags.GAC_SERVICE_ACCOUNT: {\n          'type': str,\n          'help': 'Service account used by the user for deployment.'\n      }\n  }\n\n  def legacy_parameter_handler(self, parameters):\n    if flags.NAME in parameters:\n      parameters[flags.CLOUD_FUNCTION_NAME] = parameters.pop(flags.NAME)\n\n  def build_tree(self):\n    \"\"\"Construct the diagnostic tree with appropriate steps.\"\"\"\n    start = FailedDeploymentsStart()\n    self.add_start(start)\n    custom = DefaultServiceAccountCheck()\n    self.add_step(parent=start, child=custom)\n    self.add_step(parent=custom, child=UserServiceAccountCheck())\n    self.add_step(parent=custom, child=FunctionGlobalScopeCheck())\n    self.add_step(parent=custom, child=LocationConstraintCheck())\n    self.add_end(FailedDeploymentEndStep())\n\n\nclass FailedDeploymentsStart(runbook.StartStep):\n  \"\"\"Check for function status and existence of function in project.\"\"\"\n\n  def execute(self):\n    \"\"\"Check if cloud function region and name is specified.\"\"\"\n    project = crm.get_project(op.get(flags.PROJECT_ID))\n    if not project:\n      op.add_skipped(\n          project, reason=f'Project {op.get(flags.PROJECT_ID)} does not exist')\n\n\nclass DefaultServiceAccountCheck(runbook.Step):\n  \"\"\"Check if cloud run function default service account and agent exists and is enabled.\"\"\"\n\n  template = 'failed_deployments::default_service_account_check'\n\n  def execute(self):\n    \"\"\"Check if cloud run function default service account and agent exists and is enabled.\"\"\"\n\n    project_num = crm.get_project(op.get(flags.PROJECT_ID)).number\n    service_agent = ('service-{}@gcf-admin-robot.iam.gserviceaccount.com'\n                    ).format(project_num)\n    default_sa = (\n        '{}-compute@developer.gserviceaccount.com').format(project_num)\n    project = crm.get_project(op.get(flags.PROJECT_ID))\n    try:\n      if iam.is_service_account_existing(\n          service_agent, op.get_context()) and iam.is_service_account_enabled(\n              service_agent, op.get_context()):\n        console_permission = iam_gs.IamPolicyCheck()\n        console_permission.template = 'gcpdiag.runbook.gcf::failed_deployments::agent_permission'\n        console_permission.principal = f'serviceAccount:{service_agent}'\n        console_permission.roles = [gcf_const.SERVICE_AGENT_ROLE]\n        console_permission.require_all = False\n        self.add_child(console_permission)\n    except googleapiclient.errors.HttpError as err:\n      if err.code == 404:\n        op.add_skipped(\n            project,\n            reason=('Service agent {} does not exist on project {}').format(\n                service_agent, op.get(flags.PROJECT_ID)))\n      else:\n        op.add_skipped(\n            project,\n            reason=('Service agent {} is not enabled on project {}').format(\n                service_agent, op.get(flags.PROJECT_ID)))\n\n    if iam.is_service_account_existing(\n        default_sa, op.get_context()) and iam.is_service_account_enabled(\n            default_sa, op.get_context()):\n      op.add_ok(project, reason=op.prep_msg(op.SUCCESS_REASON))\n    else:\n      op.add_failed(project,\n                    reason=op.prep_msg(op.FAILURE_REASON),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n\n\nclass UserServiceAccountCheck(runbook.Step):\n  \"\"\"Check if User/Service account has permissions on Cloud function runtime service account\"\"\"\n\n  template = 'failed_deployments::user_service_account_check'\n\n  def execute(self):\n    \"\"\"Check if User/Service account has permissions on Cloud function runtime service account\"\"\"\n\n    cloud_function_name = op.get(flags.CLOUD_FUNCTION_NAME)\n\n    project = crm.get_project(op.get(flags.PROJECT_ID))\n    project_num = crm.get_project(op.get(flags.PROJECT_ID)).number\n    logging_filter = '''\n      protoPayload.methodName=(\"google.cloud.functions.v2.FunctionService.UpdateFunction\"\n      OR \"google.cloud.functions.v2.FunctionService.CreateFunction\")\n      protoPayload.resourceName =~ \"{}\"\n      severity=NOTICE'''.format(cloud_function_name)\n\n    try:\n      log_entries = logs.realtime_query(project_id=op.get(flags.PROJECT_ID),\n                                        filter_str=logging_filter,\n                                        start_time=op.get(flags.START_TIME),\n                                        end_time=op.get(flags.END_TIME))\n      latest_entry = log_entries[-1]\n      user_principal = get_path(\n          latest_entry,\n          ('protoPayload', 'authenticationInfo', 'principalEmail'),\n          default='')\n\n      runtime_account = f'{project_num}-compute@developer.gserviceaccount.com'\n      policy_list = iam.get_service_account_iam_policy(op.get_context(),\n                                                       runtime_account)\n\n      #Check if User account/Service account has 'roles/iam.serviceAccountUser'\n      #permissions on Cloud function runtime service account\n\n      user_principal_sa = 'serviceAccount:' + user_principal\n      user_principal_user = 'user:' + user_principal\n      if policy_list.has_role_permissions(\n          user_principal_sa,\n          gcf_const.USER_PRINCIPAL_ROLE) or policy_list.has_role_permissions(\n              user_principal_user, gcf_const.USER_PRINCIPAL_ROLE):\n        op.add_ok(project,\n                  reason=op.prep_msg(op.SUCCESS_REASON,\n                                     user_principal=user_principal,\n                                     runtime_account=runtime_account))\n      else:\n        op.add_failed(project,\n                      reason=op.prep_msg(op.FAILURE_REASON,\n                                         user_principal=user_principal,\n                                         runtime_account=runtime_account),\n                      remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n\n    except googleapiclient.errors.HttpError:\n      op.add_skipped(\n          project,\n          reason=(\n              'No function failure log entries found for project {}').format(\n                  op.get(flags.PROJECT_ID)))\n\n\nclass FunctionGlobalScopeCheck(runbook.Step):\n  \"\"\"Check for deployment failures due to global scope code errors\"\"\"\n\n  template = 'failed_deployments::global_scope_check'\n\n  def execute(self):\n    \"\"\"Check for deployment failures due to global scope code errors\"\"\"\n    cloud_function_name = op.get(flags.CLOUD_FUNCTION_NAME)\n    project = crm.get_project(op.get(flags.PROJECT_ID))\n    global_scope_filter = '''\n      resource.type=\"cloud_function\"\n      SEARCH(\"Could not create or update Cloud Run service {},\n      Container Healthcheck failed.\")'''.format(cloud_function_name)\n\n    global_log_entries = logs.realtime_query(\n        project_id=op.get(flags.PROJECT_ID),\n        filter_str=global_scope_filter,\n        start_time=op.get(flags.START_TIME),\n        end_time=op.get(flags.END_TIME))\n\n    if global_log_entries:\n      op.add_failed(project,\n                    reason=op.prep_msg(op.FAILURE_REASON),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n    else:\n      op.add_ok(project, reason=op.prep_msg(op.SUCCESS_REASON))\n\n\nclass LocationConstraintCheck(runbook.Step):\n  \"\"\"Check for deployment failures due to resource location constraint\"\"\"\n\n  template = 'failed_deployments::location_constraint_check'\n\n  def execute(self):\n    \"\"\"Check for deployment failures due to resource location constraint\"\"\"\n\n    #Identify deployment failures due to resource location org policy constraints.\n    project = crm.get_project(op.get(flags.PROJECT_ID))\n    location_constraint_filter = '''\n      resource.type=\"cloud_function\"\n      SEARCH(\"Constraint `constraints/gcp.resourceLocations` violated\")'''\n\n    location_log_entries = logs.realtime_query(\n        project_id=op.get(flags.PROJECT_ID),\n        filter_str=location_constraint_filter,\n        start_time=op.get(flags.START_TIME),\n        end_time=op.get(flags.END_TIME))\n\n    if location_log_entries:\n      op.add_failed(project,\n                    reason=op.prep_msg(op.FAILURE_REASON),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n    else:\n      op.add_ok(project, reason=op.prep_msg(op.SUCCESS_REASON))\n\n\nclass FailedDeploymentEndStep(runbook.EndStep):\n  \"\"\"Finalizing cloud run function deployment failures \"\"\"\n\n  def execute(self):\n    \"\"\"Finalizing cloud run function deployment failures \"\"\"\n    response = None\n    if not config.get(flags.INTERACTIVE_MODE):\n      response = op.prompt(kind=op.CONFIRMATION,\n                           message=('Were you able to troubleshoot effectively'\n                                    ' your Cloud Run Function deployment?'),\n                           choice_msg='Enter an option: ')\n    if response == op.NO:\n      op.info(message=op.END_MESSAGE)\n"
  },
  {
    "path": "gcpdiag/runbook/gcf/failed_deployments_test.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test class for gcf/FailedDeployments\"\"\"\n\nfrom gcpdiag import config\nfrom gcpdiag.runbook import gcf, snapshot_test_base\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = gcf\n  runbook_name = 'gcf/failed-deployments'\n  project_id = 'gcpdiag-gcf1-aaaa'\n  config.init({'auto': True, 'interface': 'cli'}, project_id)\n\n  rule_parameters = [{\n      'project_id': 'gcpdiag-gcf1-aaaa',\n      'cloud_function_name': 'gcf1',\n      'region': 'us-central1-a'\n  }]\n"
  },
  {
    "path": "gcpdiag/runbook/gcf/flags.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Flags for gcf\"\"\"\n# pylint: disable=unused-wildcard-import, wildcard-import\nfrom gcpdiag.runbook.iam.flags import *\n\nGAC_SERVICE_ACCOUNT = 'gac_service_account'\nCLOUD_FUNCTION_NAME = 'cloud_function_name'\n"
  },
  {
    "path": "gcpdiag/runbook/gcf/generalized_steps.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Generalized steps\"\"\"\n"
  },
  {
    "path": "gcpdiag/runbook/gcf/generalized_steps_test.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Generalized steps test class\"\"\"\n"
  },
  {
    "path": "gcpdiag/runbook/gcf/snapshots/failed_deployments.txt",
    "content": "cloud_function_name=gcf1,project_id=gcpdiag-gcf1-aaaa,region=us-central1-a\n\ngcf/failed-deployments:  Cloud Run function failed deployments check\n\n  This runbook will assist users to check reasons for failed deployments of Gen2 cloud functions.\n  Current basic Validations:\n  - Check for existence of Default SA\n  - Check for existence of Cloud function Service Agent\n  - Check for existence of cloud functions Service Agent and its permissions\n  - Check for error logs for global scope code errors and resource location constraint.\n  \n[START]: Check if cloud function region and name is specified.\n[AUTOMATED STEP]: Check if cloud run function default service account and agent exists and is enabled.\n\n   - gcpdiag-gcf1-aaaa                                                    [FAIL]\n     [REASON]\n     The Cloud Functions service agent or the default runtime service account does not exist or is not enabled:\n     <https://cloud.google.com/functions/docs/concepts/iam#access_control_for_service_accounts>\n\n     [REMEDIATION]\n     Refer to the IAM roles guide for providing default roles to the Cloud Run function default service account and the service agent:\n     <https://cloud.google.com/functions/docs/concepts/iam#serviceaccount>\n\n[AUTOMATED STEP]: Verify that serviceAccount:service-12340003@gcf-admin-robot.iam.gserviceaccount.com has required permissions/roles in project/None.\n\n   - projects/gcpdiag-gcf1-aaaa                                           [OK]\n     [REASON]\n     Cloud function service agent has the required role permissions\n\n[AUTOMATED STEP]: Check if User/Service account has permissions on Cloud function runtime service account\n[AUTOMATED STEP]: Check for deployment failures due to global scope code errors\n\n   - gcpdiag-gcf1-aaaa                                                    [FAIL]\n     [REASON]\n     A problem with the function code was detected. The deployment pipeline completed the function deployment,\n     but failed at the last step- sending a health check to the function. This health check executes the function's global scope,\n     which may be throwing an exception, crashing, or timing out.\n\n     [REMEDIATION]\n     Refer to the following document to address this error:\n     <https://cloud.google.com/functions/docs/troubleshooting#global>\n\n[AUTOMATED STEP]: Check for deployment failures due to resource location constraint\n\n   - gcpdiag-gcf1-aaaa                                                    [FAIL]\n     [REASON]\n     An active resource location constraint policy in the organization restricts function deployment in the regions specified by the policy.\n\n     [REMEDIATION]\n     Refer to the following document to address this error:\n     <https://cloud.google.com/functions/docs/troubleshooting#resource-location>\n\n[END]: Finalizing cloud run function deployment failures\n\n\n"
  },
  {
    "path": "gcpdiag/runbook/gcf/templates/failed_deployments.jinja",
    "content": "{% block agent_permission_failure_reason %}\nThe service agent requires the 'cloudfunctions.serviceAgent' role.\n{% endblock agent_permission_failure_reason %}\n\n{% block agent_permission_failure_remediation %}\nRefer to the IAM roles guide for providing the default role to the service agent:\n<https://cloud.google.com/functions/docs/concepts/iam#serviceaccount>\n{% endblock agent_permission_failure_remediation %}\n\n{% block agent_permission_success_reason %}\nCloud function service agent has the required role permissions\n{% endblock agent_permission_success_reason %}\n\n{% block default_service_account_check_failure_reason %}\nThe Cloud Functions service agent or the default runtime service account does not exist or is not enabled:\n<https://cloud.google.com/functions/docs/concepts/iam#access_control_for_service_accounts>\n{% endblock default_service_account_check_failure_reason %}\n\n{% block default_service_account_check_failure_remediation %}\nRefer to the IAM roles guide for providing default roles to the Cloud Run function default service account and the service agent:\n<https://cloud.google.com/functions/docs/concepts/iam#serviceaccount>\n{% endblock default_service_account_check_failure_remediation %}\n\n{% block default_service_account_check_success_reason %}\nThe service agent and default service account exist and are enabled.\n{% endblock default_service_account_check_success_reason %}\n\n{% block user_service_account_check_failure_reason %}\nThe user principal '{user_principal}' does not have roles/iam.serviceAccountUser role on the runtime Service Account '{runtime_account}'\n{% endblock user_service_account_check_failure_reason %}\n\n{% block user_service_account_check_failure_remediation %}\nAssign the Service Account User role (roles/iam.serviceAccountUser) to the user on the default or non-default runtime service account.\nThis role includes the iam.serviceAccounts.actAs permission.\n<https://cloud.google.com/functions/docs/reference/iam/roles#additional-configuration>\n{% endblock user_service_account_check_failure_remediation %}\n\n{% block user_service_account_check_success_reason %}\nThe user principal '{user_principal}' has roles/iam.serviceAccountUser role on the runtime Service Account '{runtime_account}'\n{% endblock user_service_account_check_success_reason %}\n\n{% block global_scope_check_failure_reason %}\nA problem with the function code was detected. The deployment pipeline completed the function deployment,\nbut failed at the last step- sending a health check to the function. This health check executes the function's global scope,\nwhich may be throwing an exception, crashing, or timing out.\n{% endblock global_scope_check_failure_reason %}\n\n{% block global_scope_check_failure_remediation %}\nRefer to the following document to address this error:\n<https://cloud.google.com/functions/docs/troubleshooting#global>\n{% endblock global_scope_check_failure_remediation %}\n\n{% block global_scope_check_success_reason %}\nNo issues found with function global scope.\n{% endblock global_scope_check_success_reason %}\n\n{% block location_constraint_check_failure_reason %}\nAn active resource location constraint policy in the organization restricts function deployment in the regions specified by the policy.\n{% endblock location_constraint_check_failure_reason %}\n\n{% block location_constraint_check_failure_remediation %}\nRefer to the following document to address this error:\n<https://cloud.google.com/functions/docs/troubleshooting#resource-location>\n{% endblock location_constraint_check_failure_remediation %}\n\n{% block location_constraint_check_success_reason %}\nNo resource location constraints blocking function deployment.\n{% endblock location_constraint_check_success_reason %}\n"
  },
  {
    "path": "gcpdiag/runbook/gcp/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/runbook/gcp/constants.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Common constants available at gcp platform level\"\"\"\nfrom enum import Enum\n\n# pylint:disable=wildcard-import,unused-wildcard-import\nfrom gcpdiag.runbook.constants import *\n\n\nclass APIState(Enum):\n  \"\"\"Enum for representing the state of a service API.\n\n  Attributes:\n    STATE_UNSPECIFIED: The default value, indicating that the enabled state of the service is\n                       unspecified or not meaningful. This state is typical for consumers other\n                       than projects (such as folders and organizations),\n                       where the enabled state is always considered unspecified.\n    DISABLED: Indicates that the service cannot be used by the consumer.\n              It represents a service that has either been\n              explicitly disabled or has never been enabled.\n    ENABLED: Indicates that the service has been explicitly enabled for use by the consumer.\n  \"\"\"\n  STATE_UNSPECIFIED = 'STATE_UNSPECIFIED'\n  DISABLED = 'DISABLED'\n  ENABLED = 'ENABLED'\n\n\nGCP_SYSTEM_EMAIL = 'system@google.com'\n"
  },
  {
    "path": "gcpdiag/runbook/gcp/flags.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Common parameter flags applicable to any gcp runbook\"\"\"\n\n# pylint:disable=wildcard-import,unused-wildcard-import\nfrom gcpdiag.runbook.flags import *\n\nPROJECT_ID = 'project_id'\nPROJECT_NUMBER = 'project_number'\nFOLDER_ID = 'folder_id'\nORG_ID = 'org_id'\nNAME = 'name'\nID = 'id'\nINSTANCE_NAME = 'instance_name'\nINSTANCE_ID = 'instance_id'\nREGION = 'region'\nZONE = 'zone'\nSERIAL_CONSOLE_FILE = 'serial_console_file'\n# unique flags belong to this runbook\nPROXY = 'proxy'\nSRC_IP = 'src_ip'\nDEST_IP = 'dest_ip'\nCLIENT = 'check_os_login'\nPOSIX_USER = 'local_user'\nPORT = 'port'\nPROTOCOL_TYPE = 'protocol_type'\nPRINCIPAL_TYPE = 'principal_type'\nCLIENT = 'client'\nMFA = 'mfa'\nMIG_NAME = 'mig_name'\nLOCATION = 'location'\n"
  },
  {
    "path": "gcpdiag/runbook/gcp/generalized_steps.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Reusable Steps application to any product\"\"\"\n\nimport typing\n\nimport googleapiclient.http\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import config, models, runbook\nfrom gcpdiag.models import Resource\nfrom gcpdiag.queries import apis, crm\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.gcp import constants, flags\n\n\nclass HumanTask(runbook.Step):\n  \"\"\"Defines a manual approach verification step involving human intervention.\n\n    This is special step in a runbook designed for situations where automated\n    verification is not possible, and human judgment is required. It prompts\n    the operator (a human user) to manually check and confirm whether an issue is occurring.\n    This can involve accessing a system, reviewing configurations, or validating the state\n    of a resource based on provided instructions.\n  \"\"\"\n  resource: Resource\n  instructions: str = ''\n  options: dict = {}\n\n  def __init__(self, uuid=None, parent=None, step_type=op.StepType.MANUAL):\n    super().__init__(step_type=step_type, uuid=uuid, parent=parent)\n\n  def execute(self):\n    \"\"\"Human task: Follow the guide below and confirm if issue is occurring or not.\"\"\"\n\n    instructions = self.instructions or op.prep_msg(op.INSTRUCTIONS_MESSAGE)\n    options = self.options or op.DEFAULT_INSTRUCTIONS_OPTIONS\n    if instructions:\n      response = op.prompt(kind=op.CONFIRMATION,\n                           message=instructions,\n                           options=options)\n      if response == op.UNCERTAIN:\n        response = op.add_uncertain(resource=self.resource,\n                                    reason=op.prep_msg(op.UNCERTAIN_REASON),\n                                    remediation=op.prep_msg(\n                                        op.UNCERTAIN_REMEDIATION))\n      elif response == op.YES:\n        op.add_ok(self.resource, op.prep_msg(op.SUCCESS_REASON))\n      elif response == op.NO:\n        op.add_failed(self.resource,\n                      reason=op.prep_msg(op.FAILURE_REASON),\n                      remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n\n\nclass ResourceAttributeCheck(runbook.Step):\n  \"\"\"Generalized step used to verify the value of a GCP resource's attribute.\n\n    This step enables the flexible verification of attributes within any JSON-viewable GCP\n    resource, such as GCE instances or Cloud Storage buckets. It checks if a specific resource's\n    attribute matches an expected value and optionally supports custom evaluation logic for\n    more complex verification scenarios.\n\n    Attributes:\n      resource_query (Callable): Function to fetch the target GCP resource. Must return\n          a `Resource` object. Typically, this is one of the `gcpdiag.queries.*` methods.\n      query_kwargs (dict): Keyword arguments to pass to `resource_query`.\n      resource (Resource): The GCP resource fetched by `resource_query`.\n      attribute (Optional[tuple]): Path to the nested attribute within the resource to be\n          verified, represented as a tuple of strings. Utilizes `boltons.iterutils.get_path`\n          for navigation.\n      evaluator (Optional[Callable]): A custom function for performing complex evaluations\n          on a resource attribute.\n          Should return a dict:\n            {'success_reason': {'key1': 'value1', ...}, 'failure_reason': {...}}\n      expected_value (str): The expected value of the target attribute.\n      expected_value_type (type): Data type of the expected attribute value. Defaults to `str`.\n      extract_args (dict): Configuration for extracting additional information for message\n          formatting, with keys specifying the argument name and values specifying the source\n          and attribute path.\n      message_args (dict): Extracted arguments used for formatting outcome messages.\n\n    Usage:\n      An example to check the status of a GCE instance:\n\n      ```python\n      status_check = ResourceAttributeCheck()\n      status_check.resource_query = gce.get_instance\n      status_check.query_kwargs = {\n          'project_id': op.get(flags.PROJECT_ID),\n          'zone': op.get(flags.ZONE),\n          'instance_name': op.get(flags.INSTANCE_NAME)\n      }\n      status_check.attribute = ('status',)\n      status_check.expected_value = 'RUNNING'\n      status_check.extract_args = {\n          'vm_name': {'source': models.Resource, 'attribute': 'name'},\n          'status': {'source': models.Resource, 'attribute': 'status'},\n          'resource_project_id': {'source': models.Parameter, 'attribute': 'project_id'}\n      }\n      ```\n\n    `get_path`: https://boltons.readthedocs.io/en/latest/_modules/boltons/iterutils.html#get_path\n  \"\"\"\n  resource_query: typing.Callable\n  query_kwargs: dict\n  evaluator: typing.Callable\n  attribute: tuple\n  expected_value: str\n  expected_value_type: type = str\n  extract_args: dict = {}\n  message_args: dict = {}\n  template = 'resource_attribute::default'\n\n  resource: Resource\n\n  def execute(self):\n    \"\"\"Verify resource has expected value.\"\"\"\n    try:\n      self.resource = self.resource_query(**self.query_kwargs)\n      # TODO: change this.\n    except googleapiclient.errors.HttpError:\n      op.add_uncertain(self.resource,\n                       reason=op.prep_msg(op.UNCERTAIN_REASON),\n                       remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION))\n\n    if self.extract_args is not None:\n      for k, v in self.extract_args.items():\n        if v['source'] == Resource:\n          # pylint:disable=protected-access\n          self.message_args[k] = get_path(self.resource._resource_data,\n                                          v['attribute'],\n                                          default=v.get('default'))\n        if v['source'] == models.Parameter:\n          self.message_args[k] = op.get(v['attribute'])\n\n    if hasattr(self, 'evaluator'):\n      res = self.evaluator(self.resource)\n      if op.SUCCESS_REASON in res:\n        kwargs = res.get(op.SUCCESS_REASON) or self.message_args\n        op.add_ok(self.resource, op.prep_msg(op.SUCCESS_REASON, **kwargs))\n      elif res.get(op.FAILURE_REASON):\n        kwargs = res.get(op.FAILURE_REASON) or self.message_args\n        op.add_failed(self.resource,\n                      reason=op.prep_msg(op.FAILURE_REASON, **kwargs),\n                      remediation=op.prep_msg(op.FAILURE_REMEDIATION, **kwargs))\n    if hasattr(self, 'attribute'):\n      # pylint:disable=protected-access\n      actual_value = get_path(self.resource._resource_data,\n                              self.attribute,\n                              default=None)\n      if self.expected_value == actual_value:\n        op.add_ok(self.resource,\n                  op.prep_msg(op.SUCCESS_REASON, **self.message_args))\n      else:\n        op.add_failed(self.resource,\n                      reason=op.prep_msg(op.FAILURE_REASON,\n                                         **self.message_args),\n                      remediation=op.prep_msg(op.FAILURE_REMEDIATION,\n                                              **self.message_args))\n\n\nclass ServiceApiStatusCheck(runbook.Step):\n  \"\"\"Check whether or not a service has been enabled for use by a consumer\n\n  Checks is a Cloud API service is enabled or not. Guides the user to enable\n  the service if it's expected to be enabled and vice versa.\n\n  Attributes:\n      api_name (str): The name of the service to check.\n      expected_state (str): The expected state of the service, used to verify\n                            against the actual service state retrieved during\n                            execution. API state has to be one of the value of\n                            gcp.constants.APIState\n\n  \"\"\"\n  api_name: str\n  expected_state: constants.APIState\n  template: str = 'api::default'\n  project_id: str\n\n  def execute(self):\n    \"\"\"Verify {api_name}.{universe_domain} API is {expected_state} in project {project_id}.\"\"\"\n    project = crm.get_project(self.project_id)\n    is_enabled = apis.is_enabled(self.project_id, self.api_name)\n    service_name = f\"{self.api_name}.{config.get('universe_domain')}\"\n    actual_state = constants.APIState.ENABLED if is_enabled else constants.APIState.DISABLED\n    if self.expected_state == actual_state:\n      op.add_ok(\n          project,\n          op.prep_msg(op.SUCCESS_REASON,\n                      service_name=service_name,\n                      expected_state=self.expected_state.value))\n    else:\n      remediation = ''\n      if self.expected_state == constants.APIState.ENABLED:\n        remediation = op.prep_msg(op.FAILURE_REMEDIATION,\n                                  service_name=service_name,\n                                  project_id=op.get(flags.PROJECT_ID))\n      if self.expected_state == constants.APIState.DISABLED:\n        remediation = op.prep_msg(op.FAILURE_REMEDIATION_ALT1,\n                                  service_name=service_name,\n                                  project_id=op.get(flags.PROJECT_ID))\n      op.add_failed(project,\n                    reason=op.prep_msg(\n                        op.FAILURE_REASON,\n                        service_name=service_name,\n                        expected_state=self.expected_state.value),\n                    remediation=remediation)\n"
  },
  {
    "path": "gcpdiag/runbook/gcp/templates/api.jinja",
    "content": "{% block default_success_reason %}\nThe `{service_name}` service is currently in the expected state: `{expected_state}`.\n{% endblock default_success_reason %}\n\n{% block default_failure_reason %}\nThe `{service_name}` service is not in the expected state `{expected_state}`\n{% endblock default_failure_reason %}\n\n{% block default_failure_remediation %}\nThis service is expected to be enabled.\nExecute the command below to enable {service_name} in {project_id}\n\ngcloud services enable {service_name} --project={project_id}\n\nResources\n<https://cloud.google.com/service-usage/docs/enable-disable#enabling>\n{% endblock default_failure_remediation %}\n\n{% block default_failure_remediation_a1 %}\nThis service is expected to be disabled.\nExecute the command below to disable {service_name} in {project_id}\n\ngcloud services disable {service_name} --project={project_id}\n\nResources\n<https://cloud.google.com/service-usage/docs/enable-disable#disabling>\n{% endblock default_failure_remediation_a1 %}\n"
  },
  {
    "path": "gcpdiag/runbook/gcp/templates/resource_attribute.jinja",
    "content": "{% block default_failure_reason %}\nResource doesn't have the expected value\n{% endblock default_failure_reason %}\n\n{% block default_failure_remediation %}\nUpdate the resource to have the expected value\n{% endblock default_failure_remediation %}\n\n{% block default_success_reason %}\nResource has the expected value\n{% endblock default_success_reason %}\n"
  },
  {
    "path": "gcpdiag/runbook/gke/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/runbook/gke/cluster_autoscaler.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GKE Cluster Autoscaler runbook\"\"\"\n\nimport json\n\nfrom gcpdiag import runbook\nfrom gcpdiag.queries import apis, crm, gke, logs\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.gke import flags\nfrom gcpdiag.utils import GcpApiError\n\n\ndef local_log_search(cluster_name, cluster_location, error_message):\n  \"\"\"Constructs a filter string for a logs query function based on provided arguments.\n\n  Args:\n    cluster_name: Optional name of the cluster to filter logs for.\n    cluster_location: Optional location of the cluster to filter logs for.\n    error_message: Required error message to include in the filter.\n\n  Returns:\n    A string representing the filter for the logs query.\n  \"\"\"\n  filter_list = [\n      'log_id(\"container.googleapis.com/cluster-autoscaler-visibility\")',\n      'resource.type=\"k8s_cluster\"',\n      f'resource.labels.location=\"{cluster_location}\"',\n      f'resource.labels.cluster_name=\"{cluster_name}\"', f'{error_message}'\n  ]\n\n  filter_str = '\\n'.join(filter_list)\n\n  log_entries = logs.realtime_query(project_id=op.get(flags.PROJECT_ID),\n                                    start_time=op.get(flags.START_TIME),\n                                    end_time=op.get(flags.END_TIME),\n                                    filter_str=filter_str)\n\n  return log_entries\n\n\nclass ClusterAutoscaler(runbook.DiagnosticTree):\n  \"\"\"Analyses logs in the project where the cluster is running.\n\n  If there are log entries that contain messages listed in the public documentation\n  https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-autoscaler-visibility#messages\n  then provide details on how each particular issue can be solved.\n\n  The following ScaleUP logs messages are covered:\n  - scale.up.error.out.of.resources\n  - scale.up.error.quota.exceeded\n  - scale.up.error.waiting.for.instances.timeout\n  - scale.up.error.ip.space.exhausted\n  - scale.up.error.service.account.deleted\n\n  The following ScaleDown logs messages are covered:\n  - scale.down.error.failed.to.evict.pods\n  - no.scale.down.node.node.group.min.size.reached\n  - no.scale.down.node.scale.down.disabled.annotation\n  - no.scale.down.node.minimal.resource.limits.exceeded\n  - no.scale.down.node.no.place.to.move.pods\n  - no.scale.down.node.pod.not.backed.by.controller\n  - no.scale.down.node.pod.not.safe.to.evict.annotation\n  - no.scale.down.node.pod.kube.system.unmovable\n  - no.scale.down.node.pod.not.enough.pdb\n  - no.scale.down.node.pod.controller.not.found\n  - no.scale.down.node.pod.unexpected.error\n\n  \"\"\"\n  # Specify parameters common to all steps in the diagnostic tree class.\n  parameters = {\n      flags.PROJECT_ID: {\n          'type': str,\n          'help': 'The ID of the project hosting the GKE Cluster',\n          'required': True\n      },\n      flags.NAME: {\n          'type':\n              str,\n          'help':\n              'The name of the GKE cluster, to limit search only for this cluster',\n          'deprecated':\n              True,\n          'new_parameter':\n              'gke_cluster_name',\n      },\n      flags.GKE_CLUSTER_NAME: {\n          'type':\n              str,\n          'help':\n              'The name of the GKE cluster, to limit search only for this cluster',\n          'required':\n              True\n      },\n      flags.LOCATION: {\n          'type': str,\n          'help': 'The zone or region of the GKE cluster',\n          'required': True\n      }\n  }\n\n  def legacy_parameter_handler(self, parameters):\n    if flags.NAME in parameters:\n      parameters[flags.GKE_CLUSTER_NAME] = parameters.pop(flags.NAME)\n\n  def build_tree(self):\n    start = ClusterAutoscalerStart()\n    out_of_resources = CaOutOfResources()\n    quota_exceeded = CaQuotaExceeded()\n    instance_timeout = CaInstanceTimeout()\n    ip_space_exhausted = CaIpSpaceExhausted()\n    service_account_deleted = CaServiceAccountDeleted()\n    min_size_reached = CaMinSizeReached()\n    failed_to_evict_pods = CaFailedToEvictPods()\n    disabled_annotation = CaDisabledAnnotation()\n    min_resource_limit_exceeded = CaMinResourceLimitExceeded()\n    no_place_to_move_pods = CaNoPlaceToMovePods()\n    pod_not_backed_by_controller = CaPodsNotBackedByController()\n    not_safe_to_evict_annotation = CaNotSafeToEvictAnnotation()\n    pod_kube_system_unmovable = CaPodKubeSystemUnmovable()\n    pod_not_enough_pdb = CaPodNotEnoughPdb()\n    pod_controller_not_found = CaPodControllerNotFound()\n    pod_unexpected_error = CaPodUnexpectedError()\n    end = ClusterAutoscalerEnd()\n\n    self.add_start(step=start)\n    self.add_step(parent=start, child=out_of_resources)\n    self.add_step(parent=out_of_resources, child=quota_exceeded)\n    self.add_step(parent=quota_exceeded, child=instance_timeout)\n    self.add_step(parent=instance_timeout, child=ip_space_exhausted)\n    self.add_step(parent=ip_space_exhausted, child=service_account_deleted)\n    self.add_step(parent=service_account_deleted, child=min_size_reached)\n    self.add_step(parent=min_size_reached, child=failed_to_evict_pods)\n    self.add_step(parent=failed_to_evict_pods, child=disabled_annotation)\n    self.add_step(parent=disabled_annotation, child=min_resource_limit_exceeded)\n    self.add_step(parent=min_resource_limit_exceeded,\n                  child=no_place_to_move_pods)\n    self.add_step(parent=no_place_to_move_pods,\n                  child=pod_not_backed_by_controller)\n    self.add_step(parent=pod_not_backed_by_controller,\n                  child=not_safe_to_evict_annotation)\n    self.add_step(parent=not_safe_to_evict_annotation,\n                  child=pod_kube_system_unmovable)\n    self.add_step(parent=pod_kube_system_unmovable, child=pod_not_enough_pdb)\n    self.add_step(parent=pod_not_enough_pdb, child=pod_controller_not_found)\n    self.add_step(parent=pod_controller_not_found, child=pod_unexpected_error)\n    self.add_end(step=end)\n\n\nclass ClusterAutoscalerStart(runbook.StartStep):\n  \"\"\"Initiates diagnostics for Cluster Autoscaler.\n\n  Check\n  - if logging API is enabled\n  - verify that the cluster exists at that location\n  \"\"\"\n\n  def execute(self):\n    \"\"\"\n    Check the provided parameters.\n    \"\"\"\n    # skip if logging is disabled\n    project = op.get(flags.PROJECT_ID)\n    project_path = crm.get_project(project)\n    if not apis.is_enabled(project, 'logging'):\n      op.add_skipped(project_path,\n                     reason=('Logging disabled in project {}').format(project))\n      return\n\n    # verify if the provided cluster at location is present\n    project = crm.get_project(op.get(flags.PROJECT_ID))\n    try:\n      cluster = gke.get_cluster(op.get(flags.PROJECT_ID),\n                                cluster_id=op.get(flags.GKE_CLUSTER_NAME),\n                                location=op.get(flags.LOCATION))\n    except GcpApiError:\n      op.add_skipped(\n          project,\n          reason=('Cluster {} does not exist in {} for project {}').format(\n              op.get(flags.GKE_CLUSTER_NAME), op.get(flags.LOCATION),\n              op.get(flags.PROJECT_ID)))\n    else:\n      op.add_ok(project,\n                reason=('Cluster {} found in {} for project {}').format(\n                    cluster.name, op.get(flags.LOCATION),\n                    op.get(flags.PROJECT_ID)))\n\n\nclass CaOutOfResources(runbook.Step):\n  \"\"\"Check for \"scale.up.error.out.of.resources\" log entries\"\"\"\n  template = 'clusterautoscaler::out_of_resources'\n\n  def execute(self):\n    \"\"\"\n    Check for \"scale.up.error.out.of.resources\" log entries\n    \"\"\"\n    project = op.get(flags.PROJECT_ID)\n    project_path = crm.get_project(project)\n    cluster_location = op.get(flags.LOCATION)\n    cluster_name = op.get(flags.GKE_CLUSTER_NAME)\n    error_message = ('jsonPayload.resultInfo.results.errorMsg.messageId='\n                     '\"scale.up.error.out.of.resources\"')\n\n    log_entries = local_log_search(cluster_name, cluster_location,\n                                   error_message)\n\n    if log_entries:\n      for log_entry in log_entries:\n        sample_log = json.dumps(log_entry, indent=2)\n        break\n      op.add_failed(project_path,\n                    reason=op.prep_msg(op.FAILURE_REASON, log_entry=sample_log),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n    else:\n      op.add_ok(project_path,\n                reason=op.prep_msg(op.SUCCESS_REASON,\n                                   start_time=op.get(flags.START_TIME),\n                                   end_time=op.get(flags.END_TIME)))\n\n\nclass CaQuotaExceeded(runbook.Step):\n  \"\"\"Check for \"scale.up.error.quota.exceeded\" log entries\"\"\"\n\n  template = 'clusterautoscaler::quota_exceeded'\n\n  def execute(self):\n    \"\"\"\n    Check for \"scale.up.error.quota.exceeded\" log entries\n    \"\"\"\n    project = op.get(flags.PROJECT_ID)\n    project_path = crm.get_project(project)\n    cluster_location = op.get(flags.LOCATION)\n    cluster_name = op.get(flags.GKE_CLUSTER_NAME)\n    error_message = ('jsonPayload.resultInfo.results.errorMsg.messageId='\n                     '\"scale.up.error.quota.exceeded\"')\n\n    log_entries = local_log_search(cluster_name, cluster_location,\n                                   error_message)\n\n    if log_entries:\n      for log_entry in log_entries:\n        sample_log = json.dumps(log_entry, indent=2)\n        break\n      op.add_failed(project_path,\n                    reason=op.prep_msg(op.FAILURE_REASON, log_entry=sample_log),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n    else:\n      op.add_ok(project_path,\n                reason=op.prep_msg(op.SUCCESS_REASON,\n                                   start_time=op.get(flags.START_TIME),\n                                   end_time=op.get(flags.END_TIME)))\n\n\nclass CaInstanceTimeout(runbook.Step):\n  \"\"\"Check for \"scale.up.error.waiting.for.instances.timeout\" log entries\"\"\"\n\n  template = 'clusterautoscaler::instance_timeout'\n\n  def execute(self):\n    \"\"\"\n    Check for \"scale.up.error.waiting.for.instances.timeout\" log entries\n    \"\"\"\n    project = op.get(flags.PROJECT_ID)\n    project_path = crm.get_project(project)\n    cluster_location = op.get(flags.LOCATION)\n    cluster_name = op.get(flags.GKE_CLUSTER_NAME)\n    error_message = ('jsonPayload.resultInfo.results.errorMsg.messageId='\n                     '\"scale.up.error.waiting.for.instances.timeout\"')\n\n    log_entries = local_log_search(cluster_name, cluster_location,\n                                   error_message)\n\n    if log_entries:\n      for log_entry in log_entries:\n        sample_log = json.dumps(log_entry, indent=2)\n        break\n      op.add_failed(project_path,\n                    reason=op.prep_msg(op.FAILURE_REASON, log_entry=sample_log),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n    else:\n      op.add_ok(project_path,\n                reason=op.prep_msg(op.SUCCESS_REASON,\n                                   start_time=op.get(flags.START_TIME),\n                                   end_time=op.get(flags.END_TIME)))\n\n\nclass CaIpSpaceExhausted(runbook.Step):\n  \"\"\"Check for \"scale.up.error.ip.space.exhausted\" log entries\"\"\"\n\n  template = 'clusterautoscaler::ip_space_exhausted'\n\n  def execute(self):\n    \"\"\"\n    Check for \"scale.up.error.ip.space.exhausted\" log entries\n    \"\"\"\n    project = op.get(flags.PROJECT_ID)\n    project_path = crm.get_project(project)\n    cluster_location = op.get(flags.LOCATION)\n    cluster_name = op.get(flags.GKE_CLUSTER_NAME)\n    error_message = ('jsonPayload.resultInfo.results.errorMsg.messageId='\n                     '\"scale.up.error.ip.space.exhausted\"')\n\n    log_entries = local_log_search(cluster_name, cluster_location,\n                                   error_message)\n\n    if log_entries:\n      for log_entry in log_entries:\n        sample_log = json.dumps(log_entry, indent=2)\n        break\n      op.add_failed(project_path,\n                    reason=op.prep_msg(op.FAILURE_REASON, log_entry=sample_log),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n    else:\n      op.add_ok(project_path,\n                reason=op.prep_msg(op.SUCCESS_REASON,\n                                   start_time=op.get(flags.START_TIME),\n                                   end_time=op.get(flags.END_TIME)))\n\n\nclass CaServiceAccountDeleted(runbook.Step):\n  \"\"\"Check for \"scale.up.error.service.account.deleted\" log entries\"\"\"\n\n  template = 'clusterautoscaler::service_account_deleted'\n\n  def execute(self):\n    \"\"\"\n    Check for \"scale.up.error.service.account.deleted\" log entries\n    \"\"\"\n    project = op.get(flags.PROJECT_ID)\n    project_path = crm.get_project(project)\n    cluster_location = op.get(flags.LOCATION)\n    cluster_name = op.get(flags.GKE_CLUSTER_NAME)\n    error_message = ('jsonPayload.resultInfo.results.errorMsg.messageId='\n                     '\"scale.up.error.service.account.deleted\"')\n\n    log_entries = local_log_search(cluster_name, cluster_location,\n                                   error_message)\n\n    if log_entries:\n      for log_entry in log_entries:\n        sample_log = json.dumps(log_entry, indent=2)\n        break\n      op.add_failed(project_path,\n                    reason=op.prep_msg(op.FAILURE_REASON, log_entry=sample_log),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n    else:\n      op.add_ok(project_path,\n                reason=op.prep_msg(op.SUCCESS_REASON,\n                                   start_time=op.get(flags.START_TIME),\n                                   end_time=op.get(flags.END_TIME)))\n\n\nclass CaMinSizeReached(runbook.Step):\n  \"\"\"Check for \"no.scale.down.node.node.group.min.size.reached\" log entries\"\"\"\n\n  template = 'clusterautoscaler::min_size_reached'\n\n  def execute(self):\n    \"\"\"\n    Check for \"no.scale.down.node.node.group.min.size.reached\" log entries\n    \"\"\"\n    project = op.get(flags.PROJECT_ID)\n    project_path = crm.get_project(project)\n    cluster_location = op.get(flags.LOCATION)\n    cluster_name = op.get(flags.GKE_CLUSTER_NAME)\n    error_message = (\n        'jsonPayload.noDecisionStatus.noScaleDown.nodes.reason.messageId='\n        '\"no.scale.down.node.node.group.min.size.reached\"')\n    log_entries = local_log_search(cluster_name, cluster_location,\n                                   error_message)\n\n    if log_entries:\n      for log_entry in log_entries:\n        sample_log = json.dumps(log_entry, indent=2)\n        break\n      op.add_failed(project_path,\n                    reason=op.prep_msg(op.FAILURE_REASON, log_entry=sample_log),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n    else:\n      op.add_ok(project_path,\n                reason=op.prep_msg(op.SUCCESS_REASON,\n                                   start_time=op.get(flags.START_TIME),\n                                   end_time=op.get(flags.END_TIME)))\n\n\nclass CaFailedToEvictPods(runbook.Step):\n  \"\"\"Check for \"scale.down.error.failed.to.evict.pods\" log entries\"\"\"\n\n  template = 'clusterautoscaler::failed_evict_pods'\n\n  def execute(self):\n    \"\"\"\n    Check for \"scale.down.error.failed.to.evict.pods\" log entries\n    \"\"\"\n    project = op.get(flags.PROJECT_ID)\n    project_path = crm.get_project(project)\n    cluster_location = op.get(flags.LOCATION)\n    cluster_name = op.get(flags.GKE_CLUSTER_NAME)\n    error_message = ('jsonPayload.resultInfo.results.errorMsg.messageId='\n                     '\"scale.down.error.failed.to.evict.pods\"')\n\n    log_entries = local_log_search(cluster_name, cluster_location,\n                                   error_message)\n\n    if log_entries:\n      for log_entry in log_entries:\n        sample_log = json.dumps(log_entry, indent=2)\n        break\n      op.add_failed(project_path,\n                    reason=op.prep_msg(op.FAILURE_REASON, log_entry=sample_log),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n    else:\n      op.add_ok(project_path,\n                reason=op.prep_msg(op.SUCCESS_REASON,\n                                   start_time=op.get(flags.START_TIME),\n                                   end_time=op.get(flags.END_TIME)))\n\n\nclass CaDisabledAnnotation(runbook.Step):\n  \"\"\"Check for \"no.scale.down.node.scale.down.disabled.annotation\" log entries\"\"\"\n\n  template = 'clusterautoscaler::disabled_annotation'\n\n  def execute(self):\n    \"\"\"\n    Check for \"no.scale.down.node.scale.down.disabled.annotation\" log entries\n    \"\"\"\n    project = op.get(flags.PROJECT_ID)\n    project_path = crm.get_project(project)\n    cluster_location = op.get(flags.LOCATION)\n    cluster_name = op.get(flags.GKE_CLUSTER_NAME)\n    error_message = (\n        'jsonPayload.noDecisionStatus.noScaleDown.nodes.reason.messageId='\n        '\"no.scale.down.node.scale.down.disabled.annotation\"')\n\n    log_entries = local_log_search(cluster_name, cluster_location,\n                                   error_message)\n\n    if log_entries:\n      for log_entry in log_entries:\n        sample_log = json.dumps(log_entry, indent=2)\n        break\n      op.add_failed(project_path,\n                    reason=op.prep_msg(op.FAILURE_REASON, log_entry=sample_log),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n    else:\n      op.add_ok(project_path,\n                reason=op.prep_msg(op.SUCCESS_REASON,\n                                   start_time=op.get(flags.START_TIME),\n                                   end_time=op.get(flags.END_TIME)))\n\n\nclass CaMinResourceLimitExceeded(runbook.Step):\n  \"\"\"Check for \"no.scale.down.node.minimal.resource.limits.exceeded\" log entries\"\"\"\n\n  template = 'clusterautoscaler::min_resource_limit_exceeded'\n\n  def execute(self):\n    \"\"\"\n    Check for \"no.scale.down.node.minimal.resource.limits.exceeded\" log entries\n    \"\"\"\n    project = op.get(flags.PROJECT_ID)\n    project_path = crm.get_project(project)\n    cluster_location = op.get(flags.LOCATION)\n    cluster_name = op.get(flags.GKE_CLUSTER_NAME)\n    error_message = (\n        'jsonPayload.noDecisionStatus.noScaleDown.nodes.reason.messageId='\n        '\"no.scale.down.node.minimal.resource.limits.exceeded\"')\n\n    log_entries = local_log_search(cluster_name, cluster_location,\n                                   error_message)\n\n    if log_entries:\n      for log_entry in log_entries:\n        sample_log = json.dumps(log_entry, indent=2)\n        break\n      op.add_failed(project_path,\n                    reason=op.prep_msg(op.FAILURE_REASON, log_entry=sample_log),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n    else:\n      op.add_ok(project_path,\n                reason=op.prep_msg(op.SUCCESS_REASON,\n                                   start_time=op.get(flags.START_TIME),\n                                   end_time=op.get(flags.END_TIME)))\n\n\nclass CaNoPlaceToMovePods(runbook.Step):\n  \"\"\"Check for \"no.scale.down.node.no.place.to.move.pods\" log entries\"\"\"\n\n  template = 'clusterautoscaler::no_place_to_move_pods'\n\n  def execute(self):\n    \"\"\"\n    Check for \"no.scale.down.node.no.place.to.move.pods\" log entries\n    \"\"\"\n    project = op.get(flags.PROJECT_ID)\n    project_path = crm.get_project(project)\n    cluster_location = op.get(flags.LOCATION)\n    cluster_name = op.get(flags.GKE_CLUSTER_NAME)\n    error_message = (\n        'jsonPayload.noDecisionStatus.noScaleDown.nodes.reason.messageId='\n        '\"no.scale.down.node.no.place.to.move.pods\"')\n\n    log_entries = local_log_search(cluster_name, cluster_location,\n                                   error_message)\n\n    if log_entries:\n      for log_entry in log_entries:\n        sample_log = json.dumps(log_entry, indent=2)\n        break\n      op.add_failed(project_path,\n                    reason=op.prep_msg(op.FAILURE_REASON, log_entry=sample_log),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n    else:\n      op.add_ok(project_path,\n                reason=op.prep_msg(op.SUCCESS_REASON,\n                                   start_time=op.get(flags.START_TIME),\n                                   end_time=op.get(flags.END_TIME)))\n\n\nclass CaPodsNotBackedByController(runbook.Step):\n  \"\"\"Check for \"no.scale.down.node.pod.not.backed.by.controller\" log entries\"\"\"\n\n  template = 'clusterautoscaler::pod_not_backed_by_controller'\n\n  def execute(self):\n    \"\"\"\n    Check for \"no.scale.down.node.pod.not.backed.by.controller\" log entries\n    \"\"\"\n    project = op.get(flags.PROJECT_ID)\n    project_path = crm.get_project(project)\n    cluster_location = op.get(flags.LOCATION)\n    cluster_name = op.get(flags.GKE_CLUSTER_NAME)\n    error_message = (\n        'jsonPayload.noDecisionStatus.noScaleDown.nodes.reason.messageId='\n        '\"no.scale.down.node.pod.not.backed.by.controller\"')\n\n    log_entries = local_log_search(cluster_name, cluster_location,\n                                   error_message)\n\n    if log_entries:\n      for log_entry in log_entries:\n        sample_log = json.dumps(log_entry, indent=2)\n        break\n      op.add_failed(project_path,\n                    reason=op.prep_msg(op.FAILURE_REASON, log_entry=sample_log),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n    else:\n      op.add_ok(project_path,\n                reason=op.prep_msg(op.SUCCESS_REASON,\n                                   start_time=op.get(flags.START_TIME),\n                                   end_time=op.get(flags.END_TIME)))\n\n\nclass CaNotSafeToEvictAnnotation(runbook.Step):\n  \"\"\"Check for \"no.scale.down.node.pod.not.safe.to.evict.annotation\" log entries\"\"\"\n\n  template = 'clusterautoscaler::not_safe_to_evict_annotation'\n\n  def execute(self):\n    \"\"\"\n    Check for \"no.scale.down.node.pod.not.safe.to.evict.annotation\" log entries\n    \"\"\"\n    project = op.get(flags.PROJECT_ID)\n    project_path = crm.get_project(project)\n    cluster_location = op.get(flags.LOCATION)\n    cluster_name = op.get(flags.GKE_CLUSTER_NAME)\n    error_message = (\n        'jsonPayload.noDecisionStatus.noScaleDown.nodes.reason.messageId='\n        '\"no.scale.down.node.pod.not.safe.to.evict.annotation\"')\n\n    log_entries = local_log_search(cluster_name, cluster_location,\n                                   error_message)\n\n    if log_entries:\n      for log_entry in log_entries:\n        sample_log = json.dumps(log_entry, indent=2)\n        break\n      op.add_failed(project_path,\n                    reason=op.prep_msg(op.FAILURE_REASON, log_entry=sample_log),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n    else:\n      op.add_ok(project_path,\n                reason=op.prep_msg(op.SUCCESS_REASON,\n                                   start_time=op.get(flags.START_TIME),\n                                   end_time=op.get(flags.END_TIME)))\n\n\nclass CaPodKubeSystemUnmovable(runbook.Step):\n  \"\"\"Check for \"no.scale.down.node.pod.kube.system.unmovable\" log entries\"\"\"\n\n  template = 'clusterautoscaler::pod_kube_system_unmovable'\n\n  def execute(self):\n    \"\"\"\n    Check for \"no.scale.down.node.pod.kube.system.unmovable\" log entries\n    \"\"\"\n    project = op.get(flags.PROJECT_ID)\n    project_path = crm.get_project(project)\n    cluster_location = op.get(flags.LOCATION)\n    cluster_name = op.get(flags.GKE_CLUSTER_NAME)\n    error_message = (\n        'jsonPayload.noDecisionStatus.noScaleDown.nodes.reason.messageId='\n        '\"no.scale.down.node.pod.kube.system.unmovable\"')\n\n    log_entries = local_log_search(cluster_name, cluster_location,\n                                   error_message)\n\n    if log_entries:\n      for log_entry in log_entries:\n        sample_log = json.dumps(log_entry, indent=2)\n        break\n      op.add_failed(project_path,\n                    reason=op.prep_msg(op.FAILURE_REASON, log_entry=sample_log),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n    else:\n      op.add_ok(project_path,\n                reason=op.prep_msg(op.SUCCESS_REASON,\n                                   start_time=op.get(flags.START_TIME),\n                                   end_time=op.get(flags.END_TIME)))\n\n\nclass CaPodNotEnoughPdb(runbook.Step):\n  \"\"\"Check for \"no.scale.down.node.pod.not.enough.pdb\" log entries\"\"\"\n\n  template = 'clusterautoscaler::pod_not_enough_pdb'\n\n  def execute(self):\n    \"\"\"\n    Check for \"no.scale.down.node.pod.not.enough.pdb\" log entries\n    \"\"\"\n    project = op.get(flags.PROJECT_ID)\n    project_path = crm.get_project(project)\n    cluster_location = op.get(flags.LOCATION)\n    cluster_name = op.get(flags.GKE_CLUSTER_NAME)\n    error_message = (\n        'jsonPayload.noDecisionStatus.noScaleDown.nodes.reason.messageId='\n        '\"no.scale.down.node.pod.not.enough.pdb\"')\n\n    log_entries = local_log_search(cluster_name, cluster_location,\n                                   error_message)\n\n    if log_entries:\n      for log_entry in log_entries:\n        sample_log = json.dumps(log_entry, indent=2)\n        break\n      op.add_failed(project_path,\n                    reason=op.prep_msg(op.FAILURE_REASON, log_entry=sample_log),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n    else:\n      op.add_ok(project_path,\n                reason=op.prep_msg(op.SUCCESS_REASON,\n                                   start_time=op.get(flags.START_TIME),\n                                   end_time=op.get(flags.END_TIME)))\n\n\nclass CaPodControllerNotFound(runbook.Step):\n  \"\"\"Check for \"no.scale.down.node.pod.controller.not.found\" log entries\"\"\"\n\n  template = 'clusterautoscaler::pod_controller_not_found'\n\n  def execute(self):\n    \"\"\"\n    Check for \"no.scale.down.node.pod.controller.not.found\" log entries\n    \"\"\"\n    project = op.get(flags.PROJECT_ID)\n    project_path = crm.get_project(project)\n    cluster_location = op.get(flags.LOCATION)\n    cluster_name = op.get(flags.GKE_CLUSTER_NAME)\n    error_message = (\n        'jsonPayload.noDecisionStatus.noScaleDown.nodes.reason.messageId='\n        '\"no.scale.down.node.pod.controller.not.found\"')\n\n    log_entries = local_log_search(cluster_name, cluster_location,\n                                   error_message)\n\n    if log_entries:\n      for log_entry in log_entries:\n        sample_log = json.dumps(log_entry, indent=2)\n        break\n      op.add_failed(project_path,\n                    reason=op.prep_msg(op.FAILURE_REASON, log_entry=sample_log),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n    else:\n      op.add_ok(project_path,\n                reason=op.prep_msg(op.SUCCESS_REASON,\n                                   start_time=op.get(flags.START_TIME),\n                                   end_time=op.get(flags.END_TIME)))\n\n\nclass CaPodUnexpectedError(runbook.Step):\n  \"\"\"Check for \"no.scale.down.node.pod.unexpected.error\" log entries\"\"\"\n\n  template = 'clusterautoscaler::pod_unexpected_error'\n\n  def execute(self):\n    \"\"\"\n    Check for \"no.scale.down.node.pod.unexpected.error\" log entries\n    \"\"\"\n    project = op.get(flags.PROJECT_ID)\n    project_path = crm.get_project(project)\n    cluster_location = op.get(flags.LOCATION)\n    cluster_name = op.get(flags.GKE_CLUSTER_NAME)\n    error_message = (\n        'jsonPayload.noDecisionStatus.noScaleDown.nodes.reason.messageId='\n        '\"no.scale.down.node.pod.unexpected.error\"')\n\n    log_entries = local_log_search(cluster_name, cluster_location,\n                                   error_message)\n\n    if log_entries:\n      for log_entry in log_entries:\n        sample_log = json.dumps(log_entry, indent=2)\n        break\n      op.add_failed(project_path,\n                    reason=op.prep_msg(op.FAILURE_REASON, log_entry=sample_log),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n    else:\n      op.add_ok(project_path,\n                reason=op.prep_msg(op.SUCCESS_REASON,\n                                   start_time=op.get(flags.START_TIME),\n                                   end_time=op.get(flags.END_TIME)))\n\n\nclass ClusterAutoscalerEnd(runbook.EndStep):\n  \"\"\"Finalizes the diagnostics process for `Cluster Autoscaler`.\n\n  This step prompts the user to confirm satisfaction with the Root Cause Analysis (RCA)\n  performed for `Cluster Autoscaler`.\n\n  Depending on the user's response, it may conclude the runbook execution or trigger additional\n  steps, such as generating a report of the findings.\n  \"\"\"\n\n  def execute(self):\n    \"\"\"Finalize `Cluster Autoscaler` diagnostics.\"\"\"\n    response = op.prompt(\n        kind=op.CONFIRMATION,\n        message=\n        'Are you satisfied with the `GKE Cluster Autoscaler` RCA performed?')\n    if response == op.NO:\n      op.info(message=op.END_MESSAGE)\n"
  },
  {
    "path": "gcpdiag/runbook/gke/cluster_autoscaler_test.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test class for gke/ClusterAutoscaler.\"\"\"\n\nimport unittest\nfrom unittest import mock\n\nfrom gcpdiag import config\nfrom gcpdiag.queries import apis_stub\nfrom gcpdiag.runbook import gke, op, snapshot_test_base\nfrom gcpdiag.runbook.gke import cluster_autoscaler\nfrom gcpdiag.utils import GcpApiError\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = gke\n  runbook_name = 'gke/cluster-autoscaler'\n  config.init({'auto': True, 'interface': 'cli'})\n\n  rule_parameters = [{\n      'project_id': 'gcpdiag-gke-cluster-autoscaler-rrrr',\n      'gke_cluster_name': 'gcp-cluster',\n      'location': 'europe-west10'\n  }]\n\n\nRUNBOOK_PARAMS = {\n    'project_id': 'gcpdiag-gke-cluster-autoscaler-rrrr',\n    'gke_cluster_name': 'gcp-cluster',\n    'location': 'europe-west10',\n    'start_time': '2024-01-01T00:00:00Z',\n    'end_time': '2024-01-01T01:00:00Z',\n}\n\n\nclass MockMessage:\n  \"\"\"Mock class for op.Message.\"\"\"\n\n  def __init__(self):\n    self.messages = []\n\n  def print(self, *args, **kwargs):\n    pass\n\n\nclass RunbookTest(unittest.TestCase):\n\n  def setUp(self):\n    super().setUp()\n    self.enterContext(\n        mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub))\n    self.mock_get_user_email = self.enterContext(\n        mock.patch('gcpdiag.queries.apis.get_user_email'))\n    self.mock_is_enabled = self.enterContext(\n        mock.patch('gcpdiag.queries.apis.is_enabled'))\n    self.mock_is_enabled.return_value = True\n    self.mock_get_user_email.return_value = 'test@example.com'\n\n    self.mock_interface = mock.create_autospec(op.InteractionInterface,\n                                               instance=True)\n    self.mock_interface.rm = mock.Mock()\n    self.operator = op.Operator(self.mock_interface)\n    self.operator.run_id = 'test-run'\n    self.operator.messages = MockMessage()\n    self.enterContext(\n        mock.patch.object(config,\n                          'get',\n                          side_effect=lambda k: RUNBOOK_PARAMS[k]))\n    self.mock_op_get = self.enterContext(\n        mock.patch.object(op,\n                          'get',\n                          side_effect=lambda k, v=None: RUNBOOK_PARAMS[k]))\n    self.mock_add_ok = self.enterContext(mock.patch.object(op, 'add_ok'))\n    self.mock_add_failed = self.enterContext(mock.patch.object(\n        op, 'add_failed'))\n    self.mock_add_skipped = self.enterContext(\n        mock.patch.object(op, 'add_skipped'))\n    self.mock_crm_get_project = self.enterContext(\n        mock.patch('gcpdiag.queries.crm.get_project'))\n    self.mock_gke_get_cluster = self.enterContext(\n        mock.patch('gcpdiag.queries.gke.get_cluster'))\n    self.mock_apis_is_enabled = self.enterContext(\n        mock.patch('gcpdiag.queries.apis.is_enabled'))\n    self.mock_logs_realtime_query = self.enterContext(\n        mock.patch('gcpdiag.queries.logs.realtime_query'))\n    self.mock_op_prompt = self.enterContext(mock.patch.object(op, 'prompt'))\n    self.mock_op_info = self.enterContext(mock.patch.object(op, 'info'))\n    self.mock_op_prep_msg = self.enterContext(\n        mock.patch.object(op, 'prep_msg', side_effect=lambda x, **y: x))\n    self.project = mock.MagicMock()\n    self.project.id = RUNBOOK_PARAMS['project_id']\n    self.mock_crm_get_project.return_value = self.project\n    self.cluster = mock.MagicMock()\n    self.cluster.name = RUNBOOK_PARAMS['gke_cluster_name']\n    self.mock_gke_get_cluster.return_value = self.cluster\n\n  def test_start_step_logging_disabled(self):\n    self.mock_apis_is_enabled.return_value = False\n    step = cluster_autoscaler.ClusterAutoscalerStart()\n    step.execute()\n    self.mock_add_skipped.assert_called_once()\n\n  def test_start_step_cluster_not_found(self):\n    \"\"\"GcpApiError branch.\"\"\"\n    self.mock_apis_is_enabled.return_value = True\n    mock_response = mock.Mock()\n    mock_response.status = 404\n    mock_response.content = b'{\"error\": \"cluster not found\"}'\n    self.mock_gke_get_cluster.side_effect = GcpApiError(mock_response)\n    step = cluster_autoscaler.ClusterAutoscalerStart()\n    step.execute()\n    self.mock_add_skipped.assert_called_once()\n\n  def test_ca_out_of_resources_step_with_logs(self):\n    self.mock_logs_realtime_query.return_value = [{'some': 'log'}]\n    step = cluster_autoscaler.CaOutOfResources()\n    step.execute()\n    self.mock_add_failed.assert_called_once()\n\n  def test_ca_min_size_reached_step_with_logs(self):\n    self.mock_logs_realtime_query.return_value = [{'some': 'log'}]\n    step = cluster_autoscaler.CaMinSizeReached()\n    step.execute()\n    self.mock_add_failed.assert_called_once()\n\n  def test_end_step_prompt_no(self):\n    self.mock_op_prompt.return_value = op.NO\n    step = cluster_autoscaler.ClusterAutoscalerEnd()\n    step.execute()\n    self.mock_op_info.assert_called_once()\n\n  def test_start_step_success(self):\n    self.mock_apis_is_enabled.return_value = True\n    self.mock_gke_get_cluster.return_value = self.cluster\n    self.mock_gke_get_cluster.side_effect = None\n    step = cluster_autoscaler.ClusterAutoscalerStart()\n    step.execute()\n    self.mock_add_ok.assert_called_once()\n\n  def test_ca_out_of_resources_step_without_logs(self):\n    self.mock_logs_realtime_query.return_value = []\n    step = cluster_autoscaler.CaOutOfResources()\n    step.execute()\n    self.mock_add_ok.assert_called_once()\n\n  def test_ca_min_size_reached_step_without_logs(self):\n    self.mock_logs_realtime_query.return_value = []\n    step = cluster_autoscaler.CaMinSizeReached()\n    step.execute()\n    self.mock_add_ok.assert_called_once()\n\n  def test_ca_quota_exceeded_step_with_logs(self):\n    self.mock_logs_realtime_query.return_value = [{'some': 'log'}]\n    step = cluster_autoscaler.CaQuotaExceeded()\n    step.execute()\n    self.mock_add_failed.assert_called_once()\n\n  def test_ca_quota_exceeded_step_without_logs(self):\n    self.mock_logs_realtime_query.return_value = []\n    step = cluster_autoscaler.CaQuotaExceeded()\n    step.execute()\n    self.mock_add_ok.assert_called_once()\n\n  def test_ca_instance_timeout_step_with_logs(self):\n    self.mock_logs_realtime_query.return_value = [{'some': 'log'}]\n    step = cluster_autoscaler.CaInstanceTimeout()\n    step.execute()\n    self.mock_add_failed.assert_called_once()\n\n  def test_ca_instance_timeout_step_without_logs(self):\n    self.mock_logs_realtime_query.return_value = []\n    step = cluster_autoscaler.CaInstanceTimeout()\n    step.execute()\n    self.mock_add_ok.assert_called_once()\n\n  def test_ca_ip_space_exhausted_step_with_logs(self):\n    self.mock_logs_realtime_query.return_value = [{'some': 'log'}]\n    step = cluster_autoscaler.CaIpSpaceExhausted()\n    step.execute()\n    self.mock_add_failed.assert_called_once()\n\n  def test_ca_ip_space_exhausted_step_without_logs(self):\n    self.mock_logs_realtime_query.return_value = []\n    step = cluster_autoscaler.CaIpSpaceExhausted()\n    step.execute()\n    self.mock_add_ok.assert_called_once()\n\n  def test_ca_service_account_deleted_step_with_logs(self):\n    self.mock_logs_realtime_query.return_value = [{'some': 'log'}]\n    step = cluster_autoscaler.CaServiceAccountDeleted()\n    step.execute()\n    self.mock_add_failed.assert_called_once()\n\n  def test_ca_service_account_deleted_step_without_logs(self):\n    self.mock_logs_realtime_query.return_value = []\n    step = cluster_autoscaler.CaServiceAccountDeleted()\n    step.execute()\n    self.mock_add_ok.assert_called_once()\n\n  def test_ca_failed_to_evict_pods_step_with_logs(self):\n    self.mock_logs_realtime_query.return_value = [{'some': 'log'}]\n    step = cluster_autoscaler.CaFailedToEvictPods()\n    step.execute()\n    self.mock_add_failed.assert_called_once()\n\n  def test_ca_failed_to_evict_pods_step_without_logs(self):\n    self.mock_logs_realtime_query.return_value = []\n    step = cluster_autoscaler.CaFailedToEvictPods()\n    step.execute()\n    self.mock_add_ok.assert_called_once()\n\n  def test_ca_disabled_annotation_step_with_logs(self):\n    self.mock_logs_realtime_query.return_value = [{'some': 'log'}]\n    step = cluster_autoscaler.CaDisabledAnnotation()\n    step.execute()\n    self.mock_add_failed.assert_called_once()\n\n  def test_ca_disabled_annotation_step_without_logs(self):\n    self.mock_logs_realtime_query.return_value = []\n    step = cluster_autoscaler.CaDisabledAnnotation()\n    step.execute()\n    self.mock_add_ok.assert_called_once()\n\n  def test_ca_min_resource_limit_exceeded_step_with_logs(self):\n    self.mock_logs_realtime_query.return_value = [{'some': 'log'}]\n    step = cluster_autoscaler.CaMinResourceLimitExceeded()\n    step.execute()\n    self.mock_add_failed.assert_called_once()\n\n  def test_ca_min_resource_limit_exceeded_step_without_logs(self):\n    self.mock_logs_realtime_query.return_value = []\n    step = cluster_autoscaler.CaMinResourceLimitExceeded()\n    step.execute()\n    self.mock_add_ok.assert_called_once()\n\n  def test_ca_no_place_to_move_pods_step_with_logs(self):\n    self.mock_logs_realtime_query.return_value = [{'some': 'log'}]\n    step = cluster_autoscaler.CaNoPlaceToMovePods()\n    step.execute()\n    self.mock_add_failed.assert_called_once()\n\n  def test_ca_no_place_to_move_pods_step_without_logs(self):\n    self.mock_logs_realtime_query.return_value = []\n    step = cluster_autoscaler.CaNoPlaceToMovePods()\n    step.execute()\n    self.mock_add_ok.assert_called_once()\n\n  def test_ca_pods_not_backed_by_controller_step_with_logs(self):\n    self.mock_logs_realtime_query.return_value = [{'some': 'log'}]\n    step = cluster_autoscaler.CaPodsNotBackedByController()\n    step.execute()\n    self.mock_add_failed.assert_called_once()\n\n  def test_ca_pods_not_backed_by_controller_step_without_logs(self):\n    self.mock_logs_realtime_query.return_value = []\n    step = cluster_autoscaler.CaPodsNotBackedByController()\n    step.execute()\n    self.mock_add_ok.assert_called_once()\n\n  def test_ca_not_safe_to_evict_annotation_step_with_logs(self):\n    self.mock_logs_realtime_query.return_value = [{'some': 'log'}]\n    step = cluster_autoscaler.CaNotSafeToEvictAnnotation()\n    step.execute()\n    self.mock_add_failed.assert_called_once()\n\n  def test_ca_not_safe_to_evict_annotation_step_without_logs(self):\n    self.mock_logs_realtime_query.return_value = []\n    step = cluster_autoscaler.CaNotSafeToEvictAnnotation()\n    step.execute()\n    self.mock_add_ok.assert_called_once()\n\n  def test_ca_pod_kube_system_unmovable_step_with_logs(self):\n    self.mock_logs_realtime_query.return_value = [{'some': 'log'}]\n    step = cluster_autoscaler.CaPodKubeSystemUnmovable()\n    step.execute()\n    self.mock_add_failed.assert_called_once()\n\n  def test_ca_pod_kube_system_unmovable_step_without_logs(self):\n    self.mock_logs_realtime_query.return_value = []\n    step = cluster_autoscaler.CaPodKubeSystemUnmovable()\n    step.execute()\n    self.mock_add_ok.assert_called_once()\n\n  def test_ca_pod_not_enough_pdb_step_with_logs(self):\n    self.mock_logs_realtime_query.return_value = [{'some': 'log'}]\n    step = cluster_autoscaler.CaPodNotEnoughPdb()\n    step.execute()\n    self.mock_add_failed.assert_called_once()\n\n  def test_ca_pod_not_enough_pdb_step_without_logs(self):\n    self.mock_logs_realtime_query.return_value = []\n    step = cluster_autoscaler.CaPodNotEnoughPdb()\n    step.execute()\n    self.mock_add_ok.assert_called_once()\n\n  def test_ca_pod_controller_not_found_step_with_logs(self):\n    self.mock_logs_realtime_query.return_value = [{'some': 'log'}]\n    step = cluster_autoscaler.CaPodControllerNotFound()\n    step.execute()\n    self.mock_add_failed.assert_called_once()\n\n  def test_ca_pod_controller_not_found_step_without_logs(self):\n    self.mock_logs_realtime_query.return_value = []\n    step = cluster_autoscaler.CaPodControllerNotFound()\n    step.execute()\n    self.mock_add_ok.assert_called_once()\n\n  def test_ca_pod_unexpected_error_step_with_logs(self):\n    self.mock_logs_realtime_query.return_value = [{'some': 'log'}]\n    step = cluster_autoscaler.CaPodUnexpectedError()\n    step.execute()\n    self.mock_add_failed.assert_called_once()\n\n  def test_ca_pod_unexpected_error_step_without_logs(self):\n    self.mock_logs_realtime_query.return_value = []\n    step = cluster_autoscaler.CaPodUnexpectedError()\n    step.execute()\n    self.mock_add_ok.assert_called_once()\n\n  def test_legacy_parameter(self):\n    params = {'name': 'cluster-1', 'project_id': 'p1', 'location': 'l1'}\n    rb = cluster_autoscaler.ClusterAutoscaler()\n    rb.legacy_parameter_handler(params)\n    self.assertNotIn('name', params)\n    self.assertIn('gke_cluster_name', params)\n    self.assertEqual(params['gke_cluster_name'], 'cluster-1')\n\n\nclass TestClusterAutoscaler(unittest.TestCase):\n  \"\"\"Unit tests for ClusterAutoscaler runbook to increase coverage.\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    self.runbook = cluster_autoscaler.ClusterAutoscaler()\n\n  def test_build_tree_structure(self):\n    \"\"\"Ensures the diagnostic tree is built correctly.\"\"\"\n    self.runbook.build_tree()\n\n    self.assertIsInstance(self.runbook.start,\n                          cluster_autoscaler.ClusterAutoscalerStart)\n\n    start_steps = self.runbook.start.steps\n    self.assertGreater(len(start_steps), 0)\n    self.assertIsInstance(start_steps[0], cluster_autoscaler.CaOutOfResources)\n\n    out_of_resources_steps = start_steps[0].steps\n    self.assertIsInstance(out_of_resources_steps[0],\n                          cluster_autoscaler.CaQuotaExceeded)\n\n    self.assertIsInstance(self.runbook.start.steps[-1],\n                          cluster_autoscaler.ClusterAutoscalerEnd)\n\n  @mock.patch('gcpdiag.queries.apis.is_enabled')\n  @mock.patch('gcpdiag.queries.crm.get_project')\n  @mock.patch('gcpdiag.queries.gke.get_cluster')\n  @mock.patch('gcpdiag.runbook.op.add_skipped')\n  @mock.patch('gcpdiag.runbook.op.get')\n  def test_start_step_cluster_not_found_mock(self, mock_get, mock_add_skipped,\n                                             mock_gke, mock_crm, mock_apis):\n    \"\"\"GcpApiError branch in ClusterAutoscalerStart.execute.\"\"\"\n    del mock_crm\n    mock_get.side_effect = (lambda k: 'test-project'\n                            if 'project' in k else 'test-cluster')\n    mock_apis.return_value = True\n    mock_gke.side_effect = GcpApiError(\n        response={'error': {\n            'message': 'Not Found',\n            'code': 404\n        }})\n\n    step = cluster_autoscaler.ClusterAutoscalerStart()\n    step.execute()\n\n    mock_add_skipped.assert_called_once()\n\n  @mock.patch('gcpdiag.runbook.op.prep_msg')\n  @mock.patch('gcpdiag.runbook.gke.cluster_autoscaler.local_log_search')\n  @mock.patch('gcpdiag.runbook.op.add_failed')\n  @mock.patch('gcpdiag.runbook.op.get')\n  @mock.patch('gcpdiag.queries.crm.get_project')\n  def test_out_of_resources_with_logs(self, mock_crm, mock_get, mock_add_failed,\n                                      mock_log_search, mock_prep_msg):\n    \"\"\"'if log_entries' branch in CaOutOfResources.execute.\"\"\"\n    del mock_crm\n    mock_log_search.return_value = [{\n        'textPayload': 'resource exhaustion error'\n    }]\n    mock_prep_msg.side_effect = lambda x, **y: x\n    mock_get.side_effect = lambda k, v=None: RUNBOOK_PARAMS.get(k, v)\n    step = cluster_autoscaler.CaOutOfResources()\n    step.execute()\n\n    mock_add_failed.assert_called_once()\n"
  },
  {
    "path": "gcpdiag/runbook/gke/constants.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Constants specific to only GKE\"\"\"\n"
  },
  {
    "path": "gcpdiag/runbook/gke/flags.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Contains GKE specific flags\"\"\"\n# pylint: disable=wildcard-import, unused-wildcard-import\nfrom gcpdiag.runbook.gcp.flags import *\n# pylint: disable=wildcard-import, unused-wildcard-import\nfrom gcpdiag.runbook.iam.flags import *\n\nLOCATION = 'location'\nNODE = 'node'\nNODEPOOL = 'nodepool'\nGKE_CLUSTER_NAME = 'gke_cluster_name'\n\nOPS_AGENT_EXPORTING_METRICS = False\nPROTOCOL_TYPE = 'protocol_type'\nINTERACTIVE_MODE = 'auto'\n# cluster zone or region\nLOCATION = 'location'\nPOD_IP = 'pod_ip'\nGKE_NODE_IP = 'node_ip'\nSRC_IP = 'src_ip'\nDEST_IP = 'dest_ip'\n"
  },
  {
    "path": "gcpdiag/runbook/gke/generalized_steps.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Contains Generalized steps used by only GKE runbooks\"\"\"\n\nfrom gcpdiag import runbook\nfrom gcpdiag.lint.gke import util\nfrom gcpdiag.queries import apis, crm, gke, iam\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.gke import flags\n\n\nclass ApiEnabled(runbook.Step):\n  \"\"\"Step to verify if a given Google Cloud API is enabled for the project.\n\n    Attributes:\n      api_name (str): the API service name (e.g. 'monitoring', 'logging').\n      template (str): the runbook template path for this check.\n    \"\"\"\n  api_name: str\n  template: str\n\n  def execute(self):\n    \"\"\"Verify if the API is enabled for this project.\"\"\"\n\n    project = op.get(flags.PROJECT_ID)\n    project_path = crm.get_project(project)\n\n    if apis.is_enabled(project, self.api_name):\n      op.add_ok(project_path, reason=f'The {self.api_name} API is enabled.')\n    else:\n      op.add_failed(project_path,\n                    reason=f'The {self.api_name} API is NOT enabled.',\n                    remediation=f'Please enable the {self.api_name} API')\n\n\nclass NodePoolScope(runbook.Step):\n  \"\"\"Step to verify that each GKE node pool has at least one of the required OAuth scopes.\n\n    Attributes:\n      required_scopes (list): a list of OAuth scope URLs to check.\n      template (str): the runbook template path for this check.\n      service_name (str) the service whose role need to be check.\n    \"\"\"\n\n  required_scopes: list\n  template: str\n  service_name: str\n\n  def execute(self):\n    \"\"\"Verify node-pool OAuth scopes include one of the required scopes.\"\"\"\n    # fetch all clusters\n    clusters = gke.get_clusters(op.get_context())\n    # find target cluster by name and location\n    partial = f\"{op.get(flags.LOCATION)}/clusters/{op.get(flags.GKE_CLUSTER_NAME)}\"\n    cluster_obj = util.get_cluster_object(clusters, partial)\n\n    for nodepool in cluster_obj.nodepools:\n      if any(s in nodepool.config.oauth_scopes for s in self.required_scopes):\n        op.add_ok(\n            nodepool,\n            reason=\n            f'The node pool {nodepool} has the correct {self.service_name} access scope.'\n        )\n      else:\n        op.add_failed(\n            nodepool,\n            reason=\n            f'The node pool {nodepool} is missing {self.service_name} access scope.',\n            remediation=\n            f'Please create new node pools with the correct {self.service_name} scope.'\n        )\n\n\nclass ServiceAccountPermission(runbook.Step):\n  \"\"\"Step to verify that service accounts in GKE node pools have the required IAM roles.\n\n    Attributes:\n      required_roles (list): list of IAM roles to check on each node-pool service account.\n      template (str): the runbook template path for this check.\n      service_name (str) the service for which service account permissions need to be check.\n    \"\"\"\n  required_roles: list\n  template: str\n  service_name: str\n\n  def execute(self):\n    \"\"\"Verifies the node pool's service account has a role with the correct\n    required service IAM permissions.\"\"\"\n\n    clusters = gke.get_clusters(op.get_context())\n    partial_path = f'{op.get(flags.LOCATION)}/clusters/{op.get(flags.GKE_CLUSTER_NAME)}'\n    cluster_obj = util.get_cluster_object(clusters, partial_path)\n    iam_policy = iam.get_project_policy(op.get_context())\n\n    # Verifies service-account permissions for every nodepool.\n    for np in cluster_obj.nodepools:\n      sa = np.service_account\n      if not iam.is_service_account_enabled(sa, op.get_context()):\n        op.add_failed(\n            np,\n            reason=f'The service account {sa} is disabled or deleted.',\n            remediation=(\n                f'The service account {sa} used by GKE nodes should have '\n                f'the required {self.service_name} role.'))\n\n      #checking all roles for ServiceAccount of all Nodepool\n      missing_roles = []\n      for role in self.required_roles:\n        if not iam_policy.has_role_permissions(f'serviceAccount:{sa}', role):\n          missing_roles.append(role)\n\n      missing_roles_string = ', '.join(missing_roles)\n\n      if missing_roles:\n        op.add_failed(\n            np,\n            reason=\n            (f'The service account: {sa} is missing role(s): {missing_roles_string}.'\n            ),\n            remediation=\n            (f'Please grant the role(s): {missing_roles_string} to the service account: {sa}.'\n            ))\n      else:\n        op.add_ok(np,\n                  reason=(f'Service account: {sa} has the correct '\n                          f'{self.service_name} permissions.'))\n"
  },
  {
    "path": "gcpdiag/runbook/gke/generalized_steps_test.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Tests for gke/generalized_steps.py.\"\"\"\n\nimport unittest\nfrom unittest import mock\n\nfrom gcpdiag.queries import apis_stub\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.gke import flags, generalized_steps\n\n\nclass MockMessage:\n  \"\"\"Mock messages for testing.\"\"\"\n\n  def get_msg(self, key, **kwargs):\n    del kwargs\n    return f'{key}'\n\n\nclass GkeStepTestBase(unittest.TestCase):\n  \"\"\"Base class for GKE generalized step tests.\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    self.enterContext(\n        mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub))\n    self.mock_get_user_email = self.enterContext(\n        mock.patch('gcpdiag.queries.apis.get_user_email'))\n    self.mock_is_enabled = self.enterContext(\n        mock.patch('gcpdiag.queries.apis.is_enabled'))\n    self.mock_is_enabled.return_value = True\n    self.mock_get_user_email.return_value = 'test@example.com'\n\n    self.mock_interface = mock.create_autospec(op.InteractionInterface,\n                                               instance=True)\n    self.mock_interface.rm = mock.Mock()\n    self.operator = op.Operator(self.mock_interface)\n    self.operator.run_id = 'test-run'\n    self.operator.messages = MockMessage()\n    self.mock_op_get = self.enterContext(mock.patch('gcpdiag.runbook.op.get'))\n    self.mock_op_add_ok = self.enterContext(\n        mock.patch('gcpdiag.runbook.op.add_ok'))\n    self.mock_op_add_failed = self.enterContext(\n        mock.patch('gcpdiag.runbook.op.add_failed'))\n    self.mock_op_get_context = self.enterContext(\n        mock.patch('gcpdiag.runbook.op.get_context'))\n\n    self.params = {\n        flags.PROJECT_ID: 'test-project',\n        flags.LOCATION: 'us-central1',\n        flags.GKE_CLUSTER_NAME: 'test-cluster',\n    }\n    self.mock_op_get.side_effect = lambda key, default=None: self.params.get(\n        key, default)\n\n\nclass ApiEnabledTest(GkeStepTestBase):\n  \"\"\"Test ApiEnabled step.\"\"\"\n\n  @mock.patch('gcpdiag.queries.apis.is_enabled')\n  @mock.patch('gcpdiag.queries.crm.get_project')\n  def test_api_enabled_ok(self, unused_mock_get_project, mock_is_enabled):\n    mock_is_enabled.return_value = True\n    step = generalized_steps.ApiEnabled()\n    step.api_name = 'container.googleapis.com'\n    step.execute()\n    self.mock_op_add_ok.assert_called_once()\n\n  @mock.patch('gcpdiag.queries.apis.is_enabled')\n  @mock.patch('gcpdiag.queries.crm.get_project')\n  def test_api_enabled_failed(self, unused_mock_get_project, mock_is_enabled):\n    mock_is_enabled.return_value = False\n    step = generalized_steps.ApiEnabled()\n    step.api_name = 'container.googleapis.com'\n    step.execute()\n    self.mock_op_add_failed.assert_called_once()\n\n\nclass NodePoolScopeTest(GkeStepTestBase):\n  \"\"\"Test NodePoolScope step.\"\"\"\n\n  @mock.patch('gcpdiag.queries.gke.get_clusters')\n  @mock.patch('gcpdiag.lint.gke.util.get_cluster_object')\n  def test_nodepool_scope_ok(self, mock_get_cluster_obj,\n                             unused_mock_get_clusters):\n    mock_nodepool = mock.Mock()\n    mock_nodepool.config.oauth_scopes = [\n        'https://www.googleapis.com/auth/cloud-platform'\n    ]\n    mock_cluster = mock.Mock()\n    mock_cluster.nodepools = [mock_nodepool]\n    mock_get_cluster_obj.return_value = mock_cluster\n\n    step = generalized_steps.NodePoolScope()\n    step.required_scopes = ['https://www.googleapis.com/auth/cloud-platform']\n    step.service_name = 'Cloud Platform'\n    step.execute()\n    self.mock_op_add_ok.assert_called_once()\n\n  @mock.patch('gcpdiag.queries.gke.get_clusters')\n  @mock.patch('gcpdiag.lint.gke.util.get_cluster_object')\n  def test_nodepool_scope_failed(self, mock_get_cluster_obj,\n                                 unused_mock_get_clusters):\n    mock_nodepool = mock.Mock()\n    mock_nodepool.config.oauth_scopes = ['wrong-scope']\n    mock_cluster = mock.Mock()\n    mock_cluster.nodepools = [mock_nodepool]\n    mock_get_cluster_obj.return_value = mock_cluster\n\n    step = generalized_steps.NodePoolScope()\n    step.required_scopes = ['correct-scope']\n    step.service_name = 'Cloud Platform'\n    step.execute()\n    self.mock_op_add_failed.assert_called_once()\n\n\nclass ServiceAccountPermissionTest(GkeStepTestBase):\n  \"\"\"Test ServiceAccountPermission step.\"\"\"\n\n  @mock.patch('gcpdiag.queries.gke.get_clusters')\n  @mock.patch('gcpdiag.lint.gke.util.get_cluster_object')\n  @mock.patch('gcpdiag.queries.iam.get_project_policy')\n  @mock.patch('gcpdiag.queries.iam.is_service_account_enabled')\n  def test_sa_permission_ok(self, mock_sa_enabled, mock_get_policy,\n                            mock_get_cluster_obj, unused_mock_get_clusters):\n    mock_sa_enabled.return_value = True\n    mock_policy = mock.Mock()\n    mock_policy.has_role_permissions.return_value = True\n    mock_get_policy.return_value = mock_policy\n\n    mock_nodepool = mock.Mock()\n    mock_nodepool.service_account = 'test-sa@project.iam.gserviceaccount.com'\n    mock_cluster = mock.Mock()\n    mock_cluster.nodepools = [mock_nodepool]\n    mock_get_cluster_obj.return_value = mock_cluster\n\n    step = generalized_steps.ServiceAccountPermission()\n    step.required_roles = ['roles/container.nodeServiceAccount']\n    step.service_name = 'GKE'\n    step.execute()\n    self.mock_op_add_ok.assert_called_once()\n\n  @mock.patch('gcpdiag.queries.gke.get_clusters')\n  @mock.patch('gcpdiag.lint.gke.util.get_cluster_object')\n  @mock.patch('gcpdiag.queries.iam.get_project_policy')\n  @mock.patch('gcpdiag.queries.iam.is_service_account_enabled')\n  def test_sa_disabled(self, mock_sa_enabled, unused_mock_get_policy,\n                       mock_get_cluster_obj, unused_mock_get_clusters):\n    mock_sa_enabled.return_value = False\n    mock_nodepool = mock.Mock()\n    mock_cluster = mock.Mock()\n    mock_cluster.nodepools = [mock_nodepool]\n    mock_get_cluster_obj.return_value = mock_cluster\n\n    step = generalized_steps.ServiceAccountPermission()\n    step.required_roles = ['roles/container.nodeServiceAccount']\n    step.service_name = 'GKE'\n    step.execute()\n    # Should fail because SA is disabled\n    self.mock_op_add_failed.assert_called()\n"
  },
  {
    "path": "gcpdiag/runbook/gke/gke_ip_masq_standard.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"This runbook will analyze symptoms for IP Masquerading issues on GKE Cluster.\"\"\"\n\nimport ipaddress\nfrom datetime import datetime\n\nfrom gcpdiag import runbook\nfrom gcpdiag.queries import crm, gke, logs\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.gke import flags\n\n\nclass GkeIpMasqStandard(runbook.DiagnosticTree):\n  \"\"\"This runbook will analyze symptoms for IP Masquerading issues on GKE Cluster.\n\n  It examines the following:\n\n  - Are there any traffic logs to destination IP?\n  - Is ip-masq-agent DaemonSet in kube-system namespace?\n  - Is ip-masq-agent Configmap in kube-system namespace?\n  - Is GKE node IP and Pod IP are under nonMasquerade CIDR?\n  - Is Destination IP is under are under nonMasquerade CIDR?\n  \"\"\"\n\n  parameters = {\n      flags.PROJECT_ID: {\n          'type': str,\n          'help': 'The Project ID of the resource under investigation',\n          'required': True\n      },\n      flags.SRC_IP: {\n          'type': ipaddress.IPv4Address,\n          'help': 'The source IP from where connection is generated',\n      },\n      flags.DEST_IP: {\n          'type':\n              ipaddress.IPv4Address,\n          'help':\n              'The Destination IP is where the request is sending (Example : 8.8.8.8)',\n          'required':\n              True\n      },\n      flags.POD_IP: {\n          'type':\n              str,\n          'help':\n              'GKE Pod IP address or pod address range(Example 192.168.1.0/24)',\n      },\n      flags.NAME: {\n          'type':\n              str,\n          'help':\n              'The name of the GKE cluster, to limit search only for this cluster',\n          'required':\n              False,\n          'deprecated':\n              True,\n          'new_parameter':\n              'gke_cluster_name',\n      },\n      flags.GKE_CLUSTER_NAME: {\n          'type':\n              str,\n          'help':\n              'The name of the GKE cluster, to limit search only for this cluster',\n      },\n      flags.LOCATION: {\n          'type': str,\n          'help': 'The zone or region of the GKE cluster',\n      },\n      flags.GKE_NODE_IP: {\n          'type':\n              str,\n          'help':\n              'GKE Node IP address or address range/CIDR (Example 192.168.1.0/24)'\n      },\n      flags.START_TIME: {\n          'type': datetime,\n          'help': 'Start time of the issue',\n      },\n      flags.END_TIME: {\n          'type': datetime,\n          'help': 'End time of the issue',\n      }\n  }\n\n  def legacy_parameter_handler(self, parameters):\n    if flags.NAME in parameters:\n      parameters[flags.GKE_CLUSTER_NAME] = parameters.pop(flags.NAME)\n\n  def build_tree(self):\n    \"\"\"Construct the diagnostic tree with appropriate steps.\"\"\"\n    # Instantiate your step classes\n    # start = StandardIpMasqStart()\n    start = GkeIpMasqStandardStart()\n    self.add_start(start)\n    custom = Nodeproblem()\n    self.add_step(parent=start, child=custom)\n    check_daemon_set_present = CheckDaemonSet()\n    self.add_step(parent=start, child=check_daemon_set_present)\n    check_config_map_present = CheckConfigMap()\n    self.add_step(parent=check_daemon_set_present,\n                  child=check_config_map_present)\n    check_pod_ip = CheckPodIP()\n    self.add_step(parent=check_config_map_present, child=check_pod_ip)\n    check_node_ip = CheckNodeIP()\n    self.add_step(parent=check_pod_ip, child=check_node_ip)\n    check_destination_ip = CheckDestinationIP()\n    self.add_step(parent=check_node_ip, child=check_destination_ip)\n    self.add_end(GkeIpMasqStandardEnd())\n\n\nclass GkeIpMasqStandardStart(runbook.StartStep):\n  \"\"\"Check if the project ID, GKE cluster and its location is valid.\n\n  Based on information provided would direct toward further troubleshooting.\n  \"\"\"\n\n  def execute(self):\n    \"\"\"Lets check the provided parameters.\"\"\"\n    #     # skip if logging is disabled\n    project = op.get(flags.PROJECT_ID)\n    project_path = crm.get_project(project)\n\n    # check if there are clusters in the project\n    clusters = gke.get_clusters(op.get_context())\n\n    # following checks are necessary, depending on what input is provided:\n    # - no input, get all clusters available\n    # - just cluster name is provided, check if there's a cluster with that name\n    # - just location is provided, check if there are clusters at that location\n    # - cluster name and location are provided, check if there's that cluster at that location\n    cluster_name = op.get(flags.GKE_CLUSTER_NAME)\n    cluster_location = op.get(flags.LOCATION)\n    found_cluster = False\n    found_cluster_with_location = False\n    found_clusters_at_location = False\n    if cluster_name and cluster_location:\n      for cluster in clusters.values():\n        if cluster_name == str(cluster).rsplit('/', maxsplit=1)[-1] \\\n          and cluster_location == str(cluster).split('/')[-3]:\n          found_cluster_with_location = True\n          op.add_ok(\n              project_path,\n              reason=(\n                  'Cluster with the name {} on {} exist in project {}').format(\n                      cluster_name, cluster_location, project))\n          break\n    elif cluster_name:\n      for cluster in clusters.values():\n        if cluster_name == str(cluster).rsplit('/', maxsplit=1)[-1]:\n          found_cluster = True\n          op.add_ok(project_path,\n                    reason=('Cluster with name {} exist in project {}').format(\n                        cluster_name, project))\n          break\n    elif cluster_location:\n      for cluster in clusters.values():\n        if cluster_location == str(cluster).split('/')[-3]:\n          found_clusters_at_location = True\n          op.add_uncertain(\n              project_path,\n              reason=\n              ('There are clusters found on {} location. Please add cluster name to limit search'\n              ).format(cluster_location))\n          break\n    if not found_cluster_with_location and cluster_location and cluster_name:\n      op.add_skipped(\n          project_path,\n          reason=('Cluster with the name {} in {} does not exist in project {}'\n                 ).format(cluster_name, cluster_location, project))\n    # next check includes found_cluster_with_location because we found a cluster at a particular\n    # location thus we cannot skip these checks\n    elif not found_cluster and not found_cluster_with_location and cluster_name:\n      op.add_skipped(\n          project_path,\n          reason=(\n              'Cluster with the name {} does not exist in project {}').format(\n                  cluster_name, project))\n    elif not found_clusters_at_location and not found_cluster_with_location and cluster_location:\n      op.add_skipped(\n          project_path,\n          reason=('No clusters found at location {} in project {}').format(\n              cluster_location, project))\n\n\nclass Nodeproblem(runbook.Step):\n  \"\"\"This will confirm if there is any VPC flow logs to destination IP.\n\n  This will either rule out ip-masq issue or points to ip-mas-agent issue.\n  \"\"\"\n  template = 'ipmasq_standard::Nodeproblem'\n\n  def execute(self):\n    \"\"\"Are you seeing issue from GKE NODE as well?\"\"\"\n\n    project = op.get(flags.PROJECT_ID)\n    project_path = crm.get_project(project)\n\n    log_entries = logs.realtime_query(\n        project_id=op.get(flags.PROJECT_ID),\n        filter_str=f'''\"{op.get(flags.DEST_IP)}\" OR \"{op.get(flags.SRC_IP)}\"''',\n        start_time=op.get(flags.END_TIME),\n        end_time=datetime.now())\n\n    if log_entries:\n      op.add_ok(project_path, reason=op.prep_msg(op.SUCCESS_REASON))\n    else:\n      op.add_failed(project_path,\n                    reason=op.prep_msg(op.FAILURE_REASON),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n\n\nclass CheckDaemonSet(runbook.Step):\n  \"\"\" On GKE for ip-masq can be deployed or automatically in cluster.\n\n  This step will verify if Daemon set present?\n  \"\"\"\n  template = 'ipmasq_standard::daemon'\n\n  def execute(self):\n    \"\"\"Lets check if Daemon set present..\"\"\"\n\n    project = op.get(flags.PROJECT_ID)\n    project_path = crm.get_project(project)\n    project = op.get(flags.PROJECT_ID)\n    project_path = crm.get_project(project)\n\n    op.add_uncertain(project_path,\n                     reason=op.prep_msg(op.UNCERTAIN_REASON),\n                     remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION))\n\n\nclass CheckConfigMap(runbook.Step):\n  \"\"\" This will confirm config map is present as that llow user to make changes on ip-agent.\n\n  This will check if config map is present ?\n  \"\"\"\n  template = 'ipmasq_standard::configmap'\n\n  def execute(self):\n    \"\"\"Lets confirm if config map  is configure.\"\"\"\n\n    project = op.get(flags.PROJECT_ID)\n    project_path = crm.get_project(project)\n\n    op.add_uncertain(project_path,\n                     reason=op.prep_msg(op.UNCERTAIN_REASON),\n                     remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION))\n\n\nclass CheckPodIP(runbook.Step):\n  \"\"\" GKE preserves the Pod IP addresses sent to destinations in the nonMasqueradeCIDRs list.\n\n  This will confirm if pod IP is present on the list.\n  \"\"\"\n  template = 'ipmasq_standard::pod'\n\n  def execute(self):\n    \"\"\"Lets check pod ip present..\"\"\"\n\n    project = op.get(flags.PROJECT_ID)\n    project_path = crm.get_project(project)\n\n    op.add_uncertain(project_path,\n                     reason=op.prep_msg(op.UNCERTAIN_REASON),\n                     remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION))\n\n\nclass CheckNodeIP(runbook.Step):\n  \"\"\" When Node IP is present under non-masquerade list, it will allow node IP to not get natted .\n\n  This will check node IP address is present default non-masquerade destinations.\n  \"\"\"\n  template = 'ipmasq_standard::node'\n\n  def execute(self):\n    '''Lets check node IP is present under non-masq cidr.'''\n\n    project = op.get(flags.PROJECT_ID)\n    project_path = crm.get_project(project)\n\n    op.add_uncertain(project_path,\n                     reason=op.prep_msg(op.UNCERTAIN_REASON),\n                     remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION))\n\n\nclass CheckDestinationIP(runbook.Step):\n  \"\"\"GKE is expected not to IP masquerade. If needed then it should be added on nonMasqueradeCIDRs.\n\n  This will confirm if pod IP is present on the list.\n  \"\"\"\n  template = 'ipmasq_standard::destination'\n\n  def execute(self):\n    '''Lets check if pod ip address is present.'''\n\n    project = op.get(flags.PROJECT_ID)\n    project_path = crm.get_project(project)\n\n    op.add_uncertain(project_path,\n                     reason=op.prep_msg(op.UNCERTAIN_REASON),\n                     remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION))\n\n\nclass GkeIpMasqStandardEnd(runbook.EndStep):\n  \"\"\"Concludes the the diagnostics process.\n\n  If connectivity issue presits from pod, it directs the user to helpful\n  resources and suggests contacting support with a detailed report.\n  \"\"\"\n\n  def execute(self):\n    \"\"\"Finalize connectivity diagnostics.\"\"\"\n\n    op.info(\n        message=\n        'If all check passed consider please contact support for further troubleshooting'\n    )\n"
  },
  {
    "path": "gcpdiag/runbook/gke/gke_ip_masq_standard_test.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test class for gke/GkeIpMasqStandard.\"\"\"\n\nimport unittest\nfrom unittest import mock\n\nfrom gcpdiag.queries import apis_stub\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.gke import flags, gke_ip_masq_standard\n\n\nclass MockMessage:\n  \"\"\"Mock messages for testing.\"\"\"\n\n  def get_msg(self, key, **kwargs):\n    del kwargs\n    return f'{key}'\n\n\nclass TestGkeIpMasqStandard(unittest.TestCase):\n  \"\"\"Unit tests for GkeIpMasqStandard runbook logic.\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    self.enterContext(\n        mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub))\n    self.mock_get_user_email = self.enterContext(\n        mock.patch('gcpdiag.queries.apis.get_user_email'))\n    self.mock_is_enabled = self.enterContext(\n        mock.patch('gcpdiag.queries.apis.is_enabled'))\n    self.mock_is_enabled.return_value = True\n    self.mock_get_user_email.return_value = 'test@example.com'\n\n    self.mock_interface = mock.create_autospec(op.InteractionInterface,\n                                               instance=True)\n    self.mock_interface.rm = mock.Mock()\n    self.operator = op.Operator(self.mock_interface)\n    self.operator.run_id = 'test-run'\n    self.operator.messages = MockMessage()\n    self.project_path = 'projects/p1'\n    self.cluster_c1 = mock.Mock()\n    self.cluster_c1.__str__ = mock.Mock(\n        return_value='projects/p1/locations/us-central1/clusters/c1')\n    self.clusters = {'c1': self.cluster_c1}\n    self.enterContext(\n        mock.patch('gcpdiag.runbook.op.get_context', autospec=True))\n    self.enterContext(\n        mock.patch('gcpdiag.runbook.op.prep_msg',\n                   side_effect=lambda x, **y: x,\n                   autospec=True))\n\n  @mock.patch('gcpdiag.queries.crm.get_project')\n  @mock.patch('gcpdiag.queries.gke.get_clusters')\n  @mock.patch('gcpdiag.runbook.op.get')\n  @mock.patch('gcpdiag.runbook.op.add_ok')\n  def test_execute_found_cluster_with_name_and_location(self, mock_add_ok,\n                                                        mock_op_get,\n                                                        mock_get_clusters,\n                                                        mock_get_project):\n    \"\"\"StartStep adds OK when both cluster name and location match an existing cluster.\"\"\"\n    mock_get_project.return_value = self.project_path\n    mock_get_clusters.return_value = self.clusters\n    mock_op_get.side_effect = {\n        flags.PROJECT_ID: 'p1',\n        flags.GKE_CLUSTER_NAME: 'c1',\n        flags.LOCATION: 'us-central1'\n    }.get\n    step = gke_ip_masq_standard.GkeIpMasqStandardStart()\n\n    step.execute()\n\n    mock_add_ok.assert_called_once()\n\n  @mock.patch('gcpdiag.queries.crm.get_project')\n  @mock.patch('gcpdiag.queries.gke.get_clusters')\n  @mock.patch('gcpdiag.runbook.op.get')\n  @mock.patch('gcpdiag.runbook.op.add_skipped')\n  def test_execute_skipped_when_cluster_location_mismatch(\n      self, mock_add_skipped, mock_op_get, mock_get_clusters, mock_get_project):\n    \"\"\"StartStep skips when the cluster name exists but is in a different location.\"\"\"\n    mock_get_project.return_value = self.project_path\n    mock_get_clusters.return_value = self.clusters\n    mock_op_get.side_effect = {\n        flags.PROJECT_ID: 'p1',\n        flags.GKE_CLUSTER_NAME: 'c1',\n        flags.LOCATION: 'europe-west1'\n    }.get\n    step = gke_ip_masq_standard.GkeIpMasqStandardStart()\n\n    step.execute()\n\n    mock_add_skipped.assert_called_with(self.project_path, reason=mock.ANY)\n\n  @mock.patch('gcpdiag.queries.crm.get_project')\n  @mock.patch('gcpdiag.queries.gke.get_clusters')\n  @mock.patch('gcpdiag.runbook.op.get')\n  @mock.patch('gcpdiag.runbook.op.add_uncertain')\n  def test_execute_uncertain_when_only_location_provided(\n      self, mock_add_uncertain, mock_op_get, mock_get_clusters,\n      mock_get_project):\n    \"\"\"StartStep adds uncertain when only location is provided and multiple clusters exist.\"\"\"\n    mock_get_project.return_value = self.project_path\n    mock_get_clusters.return_value = self.clusters\n    mock_op_get.side_effect = {\n        flags.PROJECT_ID: 'p1',\n        flags.GKE_CLUSTER_NAME: None,\n        flags.LOCATION: 'us-central1'\n    }.get\n    step = gke_ip_masq_standard.GkeIpMasqStandardStart()\n\n    step.execute()\n\n    mock_add_uncertain.assert_called_once()\n\n  def test_legacy_parameter_handler_converts_name_to_cluster_name(self):\n    \"\"\"legacy_parameter_handler correctly moves 'name' to 'gke_cluster_name'.\"\"\"\n    runbook_obj = gke_ip_masq_standard.GkeIpMasqStandard()\n    params = {flags.NAME: 'test_cluster'}\n\n    runbook_obj.legacy_parameter_handler(params)\n\n    self.assertNotIn(flags.NAME, params)\n    self.assertEqual(params[flags.GKE_CLUSTER_NAME], 'test_cluster')\n\n  @mock.patch('gcpdiag.runbook.DiagnosticTree.add_step')\n  @mock.patch('gcpdiag.runbook.DiagnosticTree.add_start')\n  @mock.patch('gcpdiag.runbook.DiagnosticTree.add_end')\n  def test_build_tree_constructs_full_diagnostic_path(self, mock_add_end,\n                                                      mock_add_start,\n                                                      mock_add_step):\n    \"\"\"build_tree adds all required steps and end states to the tree.\"\"\"\n    runbook_obj = gke_ip_masq_standard.GkeIpMasqStandard()\n\n    runbook_obj.build_tree()\n    mock_add_start.assert_called_once()\n    mock_add_end.assert_called_once()\n    self.assertGreater(mock_add_step.call_count, 1)\n\n  @mock.patch('gcpdiag.queries.crm.get_project')\n  @mock.patch('gcpdiag.queries.logs.realtime_query')\n  @mock.patch('gcpdiag.runbook.op.get')\n  @mock.patch('gcpdiag.runbook.op.add_ok')\n  def test_nodeproblem_success_on_logs_found(self, mock_add_ok, mock_op_get,\n                                             mock_realtime_query,\n                                             mock_get_project):\n    \"\"\"Nodeproblem adds OK when flow logs are found.\"\"\"\n    mock_get_project.return_value = self.project_path\n    mock_realtime_query.return_value = ['log_entry']\n    mock_op_get.return_value = 'some_val'\n    step = gke_ip_masq_standard.Nodeproblem()\n\n    step.execute()\n\n    mock_add_ok.assert_called_once()\n\n\nclass TestGkeIpMasqStandardCoverage(unittest.TestCase):\n  \"\"\"unit tests to increase coverage of gke_ip_masq_standard.py.\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    self.project_path = 'projects/p1'\n    self.cluster_c1 = mock.Mock()\n    self.cluster_c1.__str__ = mock.Mock(\n        return_value='projects/p1/locations/us-central1/clusters/c1')\n    self.clusters = {'c1': self.cluster_c1}\n    self.enterContext(\n        mock.patch('gcpdiag.runbook.op.get_context', autospec=True))\n    self.enterContext(\n        mock.patch('gcpdiag.runbook.op.prep_msg',\n                   side_effect=lambda x, **y: x,\n                   autospec=True))\n\n  @mock.patch('gcpdiag.queries.crm.get_project')\n  @mock.patch('gcpdiag.queries.gke.get_clusters')\n  @mock.patch('gcpdiag.runbook.op.get')\n  @mock.patch('gcpdiag.runbook.op.add_ok')\n  def test_execute_found_cluster_by_name_only(self, mock_add_ok, mock_op_get,\n                                              mock_get_clusters,\n                                              mock_get_project):\n    \"\"\"GkeIpMasqStandardStart finds cluster when only name is provided (Lines 162-168).\"\"\"\n    mock_get_project.return_value = self.project_path\n    mock_get_clusters.return_value = self.clusters\n    mock_op_get.side_effect = {\n        flags.PROJECT_ID: 'p1',\n        flags.GKE_CLUSTER_NAME: 'c1',\n        flags.LOCATION: None\n    }.get\n    step = gke_ip_masq_standard.GkeIpMasqStandardStart()\n    step.execute()\n    mock_add_ok.assert_called_with(self.project_path, reason=mock.ANY)\n\n  @mock.patch('gcpdiag.queries.crm.get_project')\n  @mock.patch('gcpdiag.queries.gke.get_clusters')\n  @mock.patch('gcpdiag.runbook.op.get')\n  @mock.patch('gcpdiag.runbook.op.add_skipped')\n  def test_execute_skipped_when_cluster_name_not_found(self, mock_add_skipped,\n                                                       mock_op_get,\n                                                       mock_get_clusters,\n                                                       mock_get_project):\n    \"\"\"GkeIpMasqStandardStart skips when cluster name is provided but not found (Line 187).\"\"\"\n    mock_get_project.return_value = self.project_path\n    mock_get_clusters.return_value = {}\n    mock_op_get.side_effect = {\n        flags.PROJECT_ID: 'p1',\n        flags.GKE_CLUSTER_NAME: 'missing-cluster',\n        flags.LOCATION: None\n    }\n    step = gke_ip_masq_standard.GkeIpMasqStandardStart()\n    step.execute()\n    mock_add_skipped.assert_called_with(self.project_path, reason=mock.ANY)\n\n  @mock.patch('gcpdiag.queries.crm.get_project')\n  @mock.patch('gcpdiag.queries.gke.get_clusters')\n  @mock.patch('gcpdiag.runbook.op.get')\n  @mock.patch('gcpdiag.runbook.op.add_skipped')\n  def test_execute_skipped_when_no_clusters_at_location(self, mock_add_skipped,\n                                                        mock_op_get,\n                                                        mock_get_clusters,\n                                                        mock_get_project):\n    \"\"\"GkeIpMasqStandardStart skips when no clusters exist at the provided location (Line 193).\"\"\"\n    mock_get_project.return_value = self.project_path\n    mock_get_clusters.return_value = {}\n    mock_op_get.side_effect = {\n        flags.PROJECT_ID: 'p1',\n        flags.GKE_CLUSTER_NAME: None,\n        flags.LOCATION: 'us-central1'\n    }.get\n    step = gke_ip_masq_standard.GkeIpMasqStandardStart()\n    step.execute()\n    mock_add_skipped.assert_called_with(self.project_path, reason=mock.ANY)\n\n  @mock.patch('gcpdiag.queries.crm.get_project')\n  @mock.patch('gcpdiag.queries.logs.realtime_query')\n  @mock.patch('gcpdiag.runbook.op.get')\n  @mock.patch('gcpdiag.runbook.op.add_failed')\n  def test_nodeproblem_failed_on_no_logs(self, mock_add_failed, mock_op_get,\n                                         mock_realtime_query, mock_get_project):\n    \"\"\"Nodeproblem fails when no VPC flow logs are found.\"\"\"\n    mock_get_project.return_value = self.project_path\n    mock_realtime_query.return_value = []\n    mock_op_get.return_value = 'val'\n    step = gke_ip_masq_standard.Nodeproblem()\n    step.execute()\n    mock_add_failed.assert_called_once()\n\n  @mock.patch('gcpdiag.queries.crm.get_project')\n  @mock.patch('gcpdiag.runbook.op.get')\n  @mock.patch('gcpdiag.runbook.op.add_uncertain')\n  def test_diagnostic_steps_uncertain_output(self, mock_add_uncertain,\n                                             mock_op_get, mock_get_project):\n    \"\"\"Verifies all check steps provide uncertain findings (Lines 236, 256, 274, 292, 310).\"\"\"\n    mock_get_project.return_value = self.project_path\n    mock_op_get.return_value = 'p1'\n\n    steps = [\n        gke_ip_masq_standard.CheckDaemonSet(),\n        gke_ip_masq_standard.CheckConfigMap(),\n        gke_ip_masq_standard.CheckPodIP(),\n        gke_ip_masq_standard.CheckNodeIP(),\n        gke_ip_masq_standard.CheckDestinationIP()\n    ]\n    for step in steps:\n      step.execute()\n\n    self.assertEqual(mock_add_uncertain.call_count, len(steps))\n\n  @mock.patch('gcpdiag.runbook.op.info')\n  def test_gke_ip_masq_standard_end_info(self, mock_op_info):\n    \"\"\"GkeIpMasqStandardEnd provides final troubleshooting guidance (Line 328).\"\"\"\n    step = gke_ip_masq_standard.GkeIpMasqStandardEnd()\n    step.execute()\n    mock_op_info.assert_called_once_with(message=mock.ANY)\n"
  },
  {
    "path": "gcpdiag/runbook/gke/image_pull.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GKE Image pull failures runbook\"\"\"\n\nfrom datetime import datetime\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import runbook\nfrom gcpdiag.queries import apis, crm, gke, logs\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.gke import flags\nfrom gcpdiag.utils import GcpApiError\n\n\ndef local_realtime_query(filter_list):\n  filter_str = '\\n'.join(filter_list)\n  result = logs.realtime_query(project_id=op.get(flags.PROJECT_ID),\n                               start_time=op.get(flags.START_TIME),\n                               end_time=op.get(flags.END_TIME),\n                               filter_str=filter_str)\n  return result\n\n\nclass ImagePull(runbook.DiagnosticTree):\n  \"\"\"Analysis and Resolution of Image Pull Failures on GKE clusters.\n\n  This runbook investigates the gke cluster for Image pull failures and recommends remediation\n  steps.\n\n  Areas Examined:\n\n  - GKE cluster\n\n  - Stackdriver logs\n    \"\"\"\n  # Specify parameters common to all steps in the diagnostic tree class.\n  parameters = {\n      flags.PROJECT_ID: {\n          'type': str,\n          'help': 'The Project ID of the resource under investigation',\n          'required': True\n      },\n      flags.NAME: {\n          'type':\n              str,\n          'help':\n              'The name of the GKE cluster, to limit search only for this cluster',\n          'deprecated':\n              True,\n          'new_parameter':\n              'gke_cluster_name'\n      },\n      flags.GKE_CLUSTER_NAME: {\n          'type':\n              str,\n          'help':\n              'The name of the GKE cluster, to limit search only for this cluster',\n          'required':\n              True,\n      },\n      flags.LOCATION: {\n          'type': str,\n          'help': 'The zone or region of the GKE cluster',\n          'required': True\n      },\n      flags.START_TIME: {\n          'type':\n              datetime,\n          'help':\n              '(Optional) The start window to query the logs. Format: YYYY-MM-DDTHH:MM:SSZ',\n          'required':\n              False\n      },\n      flags.END_TIME: {\n          'type':\n              datetime,\n          'help':\n              '(Optional) The end window for the logs. Format: YYYY-MM-DDTHH:MM:SSZ',\n          'required':\n              False\n      }\n  }\n\n  def legacy_parameter_handler(self, parameters):\n    if flags.NAME in parameters:\n      parameters[flags.GKE_CLUSTER_NAME] = parameters.pop(flags.NAME)\n\n  def build_tree(self):\n    \"\"\"Construct the diagnostic tree with appropriate steps.\"\"\"\n    # Instantiate your step classes\n    start = ImagePullStart()\n    # add them to your tree\n    self.add_start(start)\n    image_not_found = ImageNotFound()\n    image_forbidden = ImageForbidden()\n    image_dns_issue = ImageDnsIssue()\n    image_connection_timeout_restricted_private = ImageConnectionTimeoutRestrictedPrivate(\n    )\n    image_connection_timeout = ImageConnectionTimeout()\n    image_not_found_insufficient_scope = ImageNotFoundInsufficientScope()\n    # Describe the step relationships\n    self.add_step(parent=start, child=image_not_found)\n    self.add_step(parent=image_not_found, child=image_forbidden)\n    self.add_step(parent=image_forbidden, child=image_dns_issue)\n    self.add_step(parent=image_dns_issue,\n                  child=image_connection_timeout_restricted_private)\n    self.add_step(parent=image_connection_timeout_restricted_private,\n                  child=image_connection_timeout)\n    self.add_step(parent=image_connection_timeout,\n                  child=image_not_found_insufficient_scope)\n    # Ending runbook\n    self.add_end(ImagePullEnd())\n\n\nclass ImagePullStart(runbook.StartStep):\n  \"\"\"Initiates diagnostics for Image pull runbook.\n\n  Check\n  - if logging API is enabled\n  - verify that the cluster exists at that location\n  \"\"\"\n\n  def execute(self):\n    \"\"\"Starting the image pull error diagnostics\"\"\"\n\n    # skip if logging is disabled\n    project = op.get(flags.PROJECT_ID)\n    project_path = crm.get_project(project)\n    if not apis.is_enabled(project, 'logging'):\n      op.add_skipped(project_path,\n                     reason=('Logging disabled in project {}').format(project))\n      return\n\n    # verify if the provided cluster at location is present\n    project = crm.get_project(op.get(flags.PROJECT_ID))\n    try:\n      cluster = gke.get_cluster(op.get(flags.PROJECT_ID),\n                                cluster_id=op.get(flags.GKE_CLUSTER_NAME),\n                                location=op.get(flags.LOCATION))\n    except GcpApiError:\n      op.add_skipped(\n          project,\n          reason=('Cluster {} does not exist in {} for project {}').format(\n              op.get(flags.GKE_CLUSTER_NAME), op.get(flags.LOCATION),\n              op.get(flags.PROJECT_ID)))\n    else:\n      op.add_ok(project,\n                reason=('Cluster {} found in {} for project {}').format(\n                    cluster.name, op.get(flags.LOCATION),\n                    op.get(flags.PROJECT_ID)))\n\n\nclass ImageNotFound(runbook.Step):\n  \"\"\"Check for Image not found log entries\"\"\"\n  template = 'imagepull::image_not_found'\n\n  def execute(self):\n    \"\"\"Check for \"Failed to pull image.*not found\" log entries.\"\"\"\n    project = op.get(flags.PROJECT_ID)\n    project_path = crm.get_project(project)\n    cluster_location = op.get(flags.LOCATION)\n    cluster_name = op.get(flags.GKE_CLUSTER_NAME)\n    start_time = op.get(flags.START_TIME)\n    end_time = op.get(flags.END_TIME)\n    filter_list = [\n        'log_id(\"events\")', 'resource.type=\"k8s_pod\"',\n        'jsonPayload.message:\"Failed to pull image\"',\n        'jsonPayload.message:\"not found\"',\n        f'resource.labels.location=\"{cluster_location}\"',\n        f'resource.labels.cluster_name=\"{cluster_name}\"'\n    ]\n\n    log_entries = local_realtime_query(filter_list)\n\n    if log_entries:\n      sample_log = format_log_entries(log_entries)\n      op.add_failed(project_path,\n                    reason=op.prep_msg(\n                        op.FAILURE_REASON,\n                        log_entry=sample_log,\n                        start_time=start_time,\n                        end_time=end_time,\n                    ),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n    else:\n      op.add_ok(project_path,\n                reason=op.prep_msg(op.SUCCESS_REASON,\n                                   start_time=start_time,\n                                   end_time=end_time))\n\n\nclass ImageForbidden(runbook.Step):\n  \"\"\"Image cannot be pulled, insufficiente permissions\"\"\"\n  template = 'imagepull::image_forbidden'\n\n  def execute(self):\n    \"\"\"Check for \"Failed to pull image.*403 Forbidden\" log entries.\"\"\"\n    project = op.get(flags.PROJECT_ID)\n    project_path = crm.get_project(project)\n    cluster_location = op.get(flags.LOCATION)\n    cluster_name = op.get(flags.GKE_CLUSTER_NAME)\n    start_time = op.get(flags.START_TIME)\n    end_time = op.get(flags.END_TIME)\n    filter_list = [\n        'log_id(\"events\")', 'resource.type=\"k8s_pod\"',\n        'jsonPayload.message:\"Failed to pull image\"',\n        'jsonPayload.message:\"403 Forbidden\"',\n        f'resource.labels.location=\"{cluster_location}\"',\n        f'resource.labels.cluster_name=\"{cluster_name}\"'\n    ]\n\n    log_entries = local_realtime_query(filter_list)\n\n    if log_entries:\n      sample_log = format_log_entries(log_entries)\n      op.add_failed(project_path,\n                    reason=op.prep_msg(\n                        op.FAILURE_REASON,\n                        log_entry=sample_log,\n                        start_time=start_time,\n                        end_time=end_time,\n                    ),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n    else:\n      op.add_ok(project_path,\n                reason=op.prep_msg(op.SUCCESS_REASON,\n                                   start_time=start_time,\n                                   end_time=end_time))\n\n\nclass ImageDnsIssue(runbook.Step):\n  \"\"\"Node DNS sever cannot resolve the IP of the repository\"\"\"\n  template = 'imagepull::image_dns_issue'\n\n  def execute(self):\n    \"\"\"Check for \"Failed to pull image.*lookup.*server misbehaving\" log entries.\"\"\"\n    project = op.get(flags.PROJECT_ID)\n    project_path = crm.get_project(project)\n    cluster_location = op.get(flags.LOCATION)\n    cluster_name = op.get(flags.GKE_CLUSTER_NAME)\n    start_time = op.get(flags.START_TIME)\n    end_time = op.get(flags.END_TIME)\n    filter_list = [\n        'log_id(\"events\")', 'resource.type=\"k8s_pod\"',\n        'jsonPayload.message:\"Failed to pull image\"',\n        'jsonPayload.message:\"lookup\"',\n        'jsonPayload.message:\"server misbehaving\"',\n        f'resource.labels.location=\"{cluster_location}\"',\n        f'resource.labels.cluster_name=\"{cluster_name}\"'\n    ]\n\n    log_entries = local_realtime_query(filter_list)\n\n    if log_entries:\n      sample_log = format_log_entries(log_entries)\n      op.add_failed(project_path,\n                    reason=op.prep_msg(\n                        op.FAILURE_REASON,\n                        log_entry=sample_log,\n                        start_time=start_time,\n                        end_time=end_time,\n                    ),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n    else:\n      op.add_ok(project_path,\n                reason=op.prep_msg(op.SUCCESS_REASON,\n                                   start_time=start_time,\n                                   end_time=end_time))\n\n\nclass ImageConnectionTimeoutRestrictedPrivate(runbook.Step):\n  \"\"\"The connection to restricted.googleapis.com or private.googleapis.com is timing out\"\"\"\n  template = 'imagepull::image_connection_timeout_restricted_private'\n\n  def execute(self):\n    \"\"\"\n    Check for \"Failed to pull image.*dial tcp.*199.36.153.\\\\d:443: i/o timeout\" log entries\n    \"\"\"\n    project = op.get(flags.PROJECT_ID)\n    project_path = crm.get_project(project)\n    cluster_location = op.get(flags.LOCATION)\n    cluster_name = op.get(flags.GKE_CLUSTER_NAME)\n    start_time = op.get(flags.START_TIME)\n    end_time = op.get(flags.END_TIME)\n    filter_list = [\n        'log_id(\"events\")', 'resource.type=\"k8s_pod\"',\n        'jsonPayload.message:\"Failed to pull image\"',\n        'jsonPayload.message:\"dial tcp\"',\n        'jsonPayload.message:\"199.36.153.*:443: i/o timeout\"',\n        f'resource.labels.location=\"{cluster_location}\"',\n        f'resource.labels.cluster_name=\"{cluster_name}\"'\n    ]\n\n    log_entries = local_realtime_query(filter_list)\n\n    if log_entries:\n      sample_log = format_log_entries(log_entries)\n      op.add_failed(project_path,\n                    reason=op.prep_msg(\n                        op.FAILURE_REASON,\n                        log_entry=sample_log,\n                        start_time=start_time,\n                        end_time=end_time,\n                    ),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n    else:\n      op.add_ok(project_path,\n                reason=op.prep_msg(op.SUCCESS_REASON,\n                                   start_time=start_time,\n                                   end_time=end_time))\n\n\nclass ImageConnectionTimeout(runbook.Step):\n  \"\"\"The connection to Google APIs is timing out\"\"\"\n  template = 'imagepull::image_connection_timeout'\n\n  def execute(self):\n    \"\"\"\n    Check for \"Failed to pull image.*dial tcp.*i/o timeout\" log entries\n    \"\"\"\n    project = op.get(flags.PROJECT_ID)\n    project_path = crm.get_project(project)\n    cluster_location = op.get(flags.LOCATION)\n    cluster_name = op.get(flags.GKE_CLUSTER_NAME)\n    start_time = op.get(flags.START_TIME)\n    end_time = op.get(flags.END_TIME)\n    filter_list = [\n        'log_id(\"events\")', 'resource.type=\"k8s_pod\"',\n        'jsonPayload.message:\"Failed to pull image\"',\n        'jsonPayload.message:\"dial tcp\"', 'jsonPayload.message:\"i/o timeout\"',\n        f'resource.labels.location=\"{cluster_location}\"',\n        f'resource.labels.cluster_name=\"{cluster_name}\"'\n    ]\n\n    log_entries = local_realtime_query(filter_list)\n\n    if log_entries:\n      sample_log = format_log_entries(log_entries)\n      op.add_failed(project_path,\n                    reason=op.prep_msg(\n                        op.FAILURE_REASON,\n                        log_entry=sample_log,\n                        start_time=start_time,\n                        end_time=end_time,\n                    ),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n    else:\n      op.add_ok(project_path,\n                reason=op.prep_msg(op.SUCCESS_REASON,\n                                   start_time=start_time,\n                                   end_time=end_time))\n\n\nclass ImageNotFoundInsufficientScope(runbook.Step):\n  \"\"\"Check for Image not found log entries with insufficient_scope server message\"\"\"\n  template = 'imagepull::image_not_found_insufficient_scope'\n\n  def execute(self):\n    \"\"\"\n    Check for \"Failed to pull image.*insufficient_scope\" log entries\n    \"\"\"\n    project = op.get(flags.PROJECT_ID)\n    project_path = crm.get_project(project)\n    cluster_location = op.get(flags.LOCATION)\n    cluster_name = op.get(flags.GKE_CLUSTER_NAME)\n    start_time = op.get(flags.START_TIME)\n    end_time = op.get(flags.END_TIME)\n    filter_list = [\n        'log_id(\"events\")', 'resource.type=\"k8s_pod\"',\n        'jsonPayload.message:\"Failed to pull image\"',\n        'jsonPayload.message:\"insufficient_scope\"',\n        f'resource.labels.location=\"{cluster_location}\"',\n        f'resource.labels.cluster_name=\"{cluster_name}\"'\n    ]\n\n    log_entries = local_realtime_query(filter_list)\n    if log_entries:\n      sample_log = format_log_entries(log_entries)\n      op.add_failed(project_path,\n                    reason=op.prep_msg(\n                        op.FAILURE_REASON,\n                        log_entry=sample_log,\n                        start_time=start_time,\n                        end_time=end_time,\n                    ),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n    else:\n      op.add_ok(project_path,\n                reason=op.prep_msg(op.SUCCESS_REASON,\n                                   start_time=start_time,\n                                   end_time=end_time))\n\n\nclass ImagePullEnd(runbook.EndStep):\n  \"\"\"Finalizes the diagnostics process for `GKE Image Pull runbbok`.\n\n  This step prompts the user to confirm satisfaction with the analysis performed for\n  `GKE Image Pull runbbok`.\n\n  Depending on the user's response, it may conclude the runbook execution or trigger additional\n  steps, such as generating a report of the findings.\n  \"\"\"\n\n  def execute(self):\n    \"\"\"Finalize `GKE Image Pull runbbok` diagnostics.\"\"\"\n    response = op.prompt(\n        kind=op.CONFIRMATION,\n        message='Are you satisfied with the `GKE Image Pull runbbok` analysis?')\n    if response == op.NO:\n      op.info(message=op.END_MESSAGE)\n\n\ndef format_log_entries(log_entries):\n  \"\"\"Formats a list of log entries into a readable string.\n\n  Args:\n    log_entries: A list of log entry dictionaries.\n\n  Returns:\n    A formatted string containing information from all log entries.\n  \"\"\"\n\n  log_entry = log_entries[-1]\n  formatted_log = []\n\n  labels = get_path(log_entry, ('resource', 'labels'),\n                    default={})  # Provide default empty dict\n  if labels:\n    formatted_log.extend([\n        f\"Cluster name: {labels.get('cluster_name', 'N/A')}\",\n        f\"Location: {labels.get('location', 'N/A')}\",\n        f\"Namespace Name: {labels.get('namespace_name', 'N/A')}\",\n        f\"Pod Name: {labels.get('pod_name', 'N/A')}\",\n        f\"Project ID: {labels.get('project_id', 'N/A')}\"\n    ])\n  else:\n    formatted_log.extend([\n        'Cluster name: Not found', 'Location: Not found',\n        'Namespace Name: Not found', 'Pod Name: Not found',\n        'Project ID: Not found'\n    ])\n\n  json_payload = get_path(log_entry, ('jsonPayload',),\n                          default={})  # Provide default empty dict\n  formatted_log.extend([\n      f\"Log Message: {json_payload.get('message', 'N/A')}\",\n      f\"Reporting Instance: {json_payload.get('reportingInstance', 'N/A')}\",\n      f\"Last Timestamp: {json_payload.get('lastTimestamp', 'N/A')}\"\n  ])\n\n  return '\\n'.join(formatted_log)\n"
  },
  {
    "path": "gcpdiag/runbook/gke/image_pull_test.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test class for gke/Image_pull.\"\"\"\n\nimport unittest\nfrom unittest import mock\n\nfrom gcpdiag import config\nfrom gcpdiag.queries import apis_stub\nfrom gcpdiag.runbook import gke, op, snapshot_test_base\nfrom gcpdiag.runbook.gke import flags, image_pull\nfrom gcpdiag.utils import GcpApiError\n\n\nclass MockMessage:\n  \"\"\"Mock messages for testing.\"\"\"\n\n  def get_msg(self, key, **kwargs):\n    del kwargs\n    return f'{key}'\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = gke\n  runbook_name = 'gke/image-pull'\n  config.init({'auto': True, 'interface': 'cli'})\n\n  rule_parameters = [{\n      'project_id': 'gcpdiag-gke-cluster-autoscaler-rrrr',\n      'gke_cluster_name': 'gke-cluster',\n      'location': 'europe-west10',\n      'start_time': '2024-08-12T01:00:00Z',\n      'end_time': '2024-08-12T23:00:00Z'\n  }]\n\n\nclass TestImagePull(unittest.TestCase):\n  \"\"\"Unit tests for GKE Image Pull runbook.\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    self.enterContext(\n        mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub))\n    self.mock_get_user_email = self.enterContext(\n        mock.patch('gcpdiag.queries.apis.get_user_email'))\n    self.mock_is_enabled = self.enterContext(\n        mock.patch('gcpdiag.queries.apis.is_enabled'))\n    self.mock_is_enabled.return_value = True\n    self.mock_get_user_email.return_value = 'test@example.com'\n\n    self.mock_interface = mock.create_autospec(op.InteractionInterface,\n                                               instance=True)\n    self.mock_interface.rm = mock.Mock()\n    self.operator = op.Operator(self.mock_interface)\n    self.operator.run_id = 'test-run'\n    self.operator.messages = MockMessage()\n    self.project_id = 'test-project'\n    self.cluster_name = 'test-cluster'\n    self.location = 'us-central1'\n    self.enterContext(\n        mock.patch('gcpdiag.runbook.op.get_context', autospec=True))\n    self.enterContext(\n        mock.patch(\n            'gcpdiag.runbook.op.prep_msg',\n            side_effect=lambda x, **y: x,\n            autospec=True,\n        ))\n\n  @mock.patch('gcpdiag.runbook.gke.image_pull.op.get')\n  @mock.patch('gcpdiag.queries.apis.is_enabled')\n  @mock.patch('gcpdiag.queries.crm.get_project')\n  @mock.patch('gcpdiag.runbook.gke.image_pull.op.add_skipped')\n  def test_image_pull_start_skips_when_logging_disabled(self, mock_add_skipped,\n                                                        mock_get_project,\n                                                        mock_is_enabled,\n                                                        mock_op_get):\n    \"\"\"ImagePullStart should skip execution if the Logging API is disabled.\"\"\"\n    del mock_get_project\n    mock_op_get.side_effect = (lambda key: self.project_id\n                               if key == flags.PROJECT_ID else None)\n    mock_is_enabled.return_value = False\n    step = image_pull.ImagePullStart()\n\n    step.execute()\n\n    mock_add_skipped.assert_called_once()\n    self.assertIn('Logging disabled', mock_add_skipped.call_args[1]['reason'])\n\n  @mock.patch('gcpdiag.queries.apis.is_enabled')\n  @mock.patch('gcpdiag.runbook.gke.image_pull.crm.get_project')\n  @mock.patch('gcpdiag.runbook.gke.image_pull.op.get')\n  @mock.patch('gcpdiag.queries.gke.get_cluster')\n  @mock.patch('gcpdiag.runbook.gke.image_pull.op.add_skipped')\n  def test_image_pull_start_skips_when_cluster_not_found(\n      self,\n      mock_add_skipped,\n      mock_get_cluster,\n      mock_op_get,\n      mock_get_project,\n      mock_is_enabled,\n  ):\n    \"\"\"ImagePullStart should skip execution if the cluster does not exist.\"\"\"\n    del mock_get_project\n    mock_is_enabled.return_value = True\n    mock_op_get.side_effect = {\n        flags.PROJECT_ID: self.project_id,\n        flags.GKE_CLUSTER_NAME: self.cluster_name,\n        flags.LOCATION: self.location,\n    }.get\n    mock_response = mock.Mock()\n    mock_response.status = 404\n    mock_response.content = b'{\"error\": \"cluster not found\"}'\n    mock_get_cluster.side_effect = GcpApiError(mock_response)\n    step = image_pull.ImagePullStart()\n\n    step.execute()\n\n    mock_add_skipped.assert_called_once()\n    self.assertIn('does not exist', mock_add_skipped.call_args[1]['reason'])\n\n  @mock.patch('gcpdiag.runbook.gke.image_pull.local_realtime_query')\n  @mock.patch('gcpdiag.runbook.gke.image_pull.op.add_failed')\n  @mock.patch('gcpdiag.runbook.gke.image_pull.crm.get_project')\n  @mock.patch('gcpdiag.runbook.gke.image_pull.op.get')\n  def test_image_not_found_fails_when_logs_detected(self, mock_op_get,\n                                                    mock_get_project,\n                                                    mock_add_failed,\n                                                    mock_query):\n    \"\"\"ImageNotFound should report failure when 'not found' logs are present.\"\"\"\n    del mock_get_project\n    mock_op_get.return_value = 'test'\n    mock_query.return_value = [{\n        'resource': {\n            'labels': {\n                'pod_name': 'test-pod'\n            }\n        },\n        'jsonPayload': {\n            'message': 'Failed to pull image: not found'\n        },\n    }]\n    step = image_pull.ImageNotFound()\n    step.execute()\n    mock_add_failed.assert_called_once()\n\n  def test_format_log_entries_handles_missing_labels(self):\n    \"\"\"format_log_entries should provide 'Not found' placeholders when labels are missing.\"\"\"\n    log_entries = [{'jsonPayload': {'message': 'error'}}]\n\n    result = image_pull.format_log_entries(log_entries)\n\n    self.assertIn('Cluster name: Not found', result)\n    self.assertIn('Log Message: error', result)\n\n  def test_legacy_parameter_handler_migrates_name_to_gke_cluster_name(self):\n    \"\"\"legacy_parameter_handler should migrate the deprecated 'name' flag.\"\"\"\n    params = {flags.NAME: 'old-name'}\n    runbook_obj = image_pull.ImagePull()\n\n    runbook_obj.legacy_parameter_handler(params)\n\n    self.assertEqual(params[flags.GKE_CLUSTER_NAME], 'old-name')\n    self.assertNotIn(flags.NAME, params)\n\n  @mock.patch('gcpdiag.runbook.gke.image_pull.op.prompt')\n  @mock.patch('gcpdiag.runbook.gke.image_pull.op.info')\n  def test_image_pull_end_shows_info_on_no_response(self, mock_op_info,\n                                                    mock_op_prompt):\n    \"\"\"ImagePullEnd should show an end message if user is not satisfied.\"\"\"\n\n    mock_op_prompt.return_value = op.NO\n    step = image_pull.ImagePullEnd()\n\n    step.execute()\n\n    mock_op_info.assert_called_once()\n\n\nclass TestImagePullCoverage(unittest.TestCase):\n  \"\"\"Additional unit tests to achieve 100% coverage for image_pull.py.\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    self.project_id = 'test-project'\n    self.cluster_name = 'test-cluster'\n    self.location = 'us-central1'\n    self.enterContext(\n        mock.patch('gcpdiag.runbook.op.get_context', autospec=True))\n    self.enterContext(\n        mock.patch(\n            'gcpdiag.runbook.op.prep_msg',\n            side_effect=lambda x, **y: x,\n            autospec=True,\n        ))\n\n  @mock.patch('gcpdiag.queries.logs.realtime_query')\n  @mock.patch('gcpdiag.runbook.gke.image_pull.op.get')\n  def test_local_realtime_query_correctly_calls_logs_query(\n      self, mock_op_get, mock_logs_query):\n    \"\"\"local_realtime_query should use parameters from op.get for the logs query.\"\"\"\n    mock_op_get.side_effect = {\n        flags.PROJECT_ID: self.project_id,\n        flags.START_TIME: '2024-01-01T00:00:00Z',\n        flags.END_TIME: '2024-01-01T01:00:00Z',\n    }.get\n    filters = ['filter1', 'filter2']\n\n    image_pull.local_realtime_query(filters)\n\n    mock_logs_query.assert_called_once_with(project_id=self.project_id,\n                                            start_time='2024-01-01T00:00:00Z',\n                                            end_time='2024-01-01T01:00:00Z',\n                                            filter_str='filter1\\nfilter2')\n\n  @mock.patch('gcpdiag.runbook.DiagnosticTree.add_end')\n  @mock.patch('gcpdiag.runbook.DiagnosticTree.add_step')\n  @mock.patch('gcpdiag.runbook.DiagnosticTree.add_start')\n  def test_build_tree_constructs_correct_diagnostic_structure(\n      self, mock_add_start, mock_add_step, mock_add_end):\n    \"\"\"build_tree should define the expected sequence of diagnostic steps.\"\"\"\n\n    dtree = image_pull.ImagePull()\n\n    dtree.build_tree()\n\n    mock_add_start.assert_called_once()\n    mock_add_end.assert_called_once()\n    self.assertGreater(mock_add_step.call_count, 1)\n\n  @mock.patch('gcpdiag.runbook.gke.image_pull.local_realtime_query')\n  @mock.patch('gcpdiag.runbook.gke.image_pull.op.add_ok')\n  @mock.patch('gcpdiag.runbook.gke.image_pull.crm.get_project')\n  @mock.patch('gcpdiag.runbook.gke.image_pull.op.get')\n  def test_diagnostic_steps_report_ok_when_no_logs_found(\n      self, mock_op_get, mock_get_project, mock_add_ok, mock_query):\n    \"\"\"Verify Success paths for diagnostic steps (e.g., ImageForbidden, ImageDnsIssue).\"\"\"\n    del mock_get_project\n    mock_op_get.return_value = 'test'\n    mock_query.return_value = []\n    steps_to_test = [\n        image_pull.ImageNotFound(),\n        image_pull.ImageForbidden(),\n        image_pull.ImageDnsIssue(),\n        image_pull.ImageConnectionTimeout(),\n        image_pull.ImageNotFoundInsufficientScope()\n    ]\n\n    for step in steps_to_test:\n      step.execute()\n      mock_add_ok.assert_called()\n      mock_add_ok.reset_mock()\n\n  @mock.patch('gcpdiag.runbook.gke.image_pull.local_realtime_query')\n  @mock.patch('gcpdiag.runbook.gke.image_pull.op.add_failed')\n  @mock.patch('gcpdiag.runbook.gke.image_pull.crm.get_project')\n  @mock.patch('gcpdiag.runbook.gke.image_pull.op.get')\n  def test_steps_fail_on_matching_log_entries(self, mock_op_get,\n                                              mock_get_project, mock_add_failed,\n                                              mock_query):\n    \"\"\"Verify Failure paths for specific error classes like Forbidden or DNS issues.\"\"\"\n    del mock_get_project\n    mock_op_get.return_value = 'test'\n    mock_query.return_value = [{\n        'jsonPayload': {\n            'message': 'error message'\n        },\n        'resource': {}\n    }]\n    steps = [\n        image_pull.ImageForbidden(),\n        image_pull.ImageDnsIssue(),\n        image_pull.ImageConnectionTimeoutRestrictedPrivate(),\n        image_pull.ImageConnectionTimeout(),\n        image_pull.ImageNotFoundInsufficientScope()\n    ]\n    for step in steps:\n      step.execute()\n      mock_add_failed.assert_called()\n      mock_add_failed.reset_mock()\n\n  @mock.patch('gcpdiag.runbook.gke.image_pull.op.get')\n  @mock.patch('gcpdiag.queries.apis.is_enabled')\n  @mock.patch('gcpdiag.queries.gke.get_cluster')\n  @mock.patch('gcpdiag.queries.crm.get_project')\n  @mock.patch('gcpdiag.runbook.gke.image_pull.op.add_ok')\n  def test_image_pull_start_succeeds_when_cluster_and_logging_active(\n      self,\n      mock_add_ok,\n      mock_get_project,\n      mock_get_cluster,\n      mock_is_enabled,\n      mock_op_get,\n  ):\n    \"\"\"ImagePullStart should report OK when requirements are met.\"\"\"\n    del mock_get_project\n    mock_op_get.return_value = 'test'\n    mock_is_enabled.return_value = True\n    mock_cluster = mock.Mock()\n    mock_cluster.name = 'test-cluster'\n    mock_cluster.name = 'test-cluster'\n    mock_get_cluster.return_value = mock_cluster\n\n    step = image_pull.ImagePullStart()\n    step.execute()\n    mock_add_ok.assert_called_once()\n    self.assertIn('found', mock_add_ok.call_args[1]['reason'])\n"
  },
  {
    "path": "gcpdiag/runbook/gke/ip_exhaustion.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Module containing VM External IP connectivity debugging tree and custom steps\"\"\"\n\nfrom datetime import datetime\n\nfrom gcpdiag import config, runbook\nfrom gcpdiag.queries import crm, gke, logs\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.gke import flags\nfrom gcpdiag.utils import GcpApiError\n\n\ndef local_realtime_query(filter_str):\n  result = logs.realtime_query(project_id=op.get(flags.PROJECT_ID),\n                               start_time=op.get(flags.START_TIME),\n                               end_time=op.get(flags.END_TIME),\n                               filter_str=filter_str)\n  return result\n\n\nclass IpExhaustion(runbook.DiagnosticTree):\n  \"\"\"Troubleshooting ip exhaustion issues on GKE clusters.\n\n  This runbook investigates the gke cluster for ip exhaustion issues and recommends remediation\n  steps.\n\n  Areas Examined:\n  - GKE cluster type.\n  - GKE cluster and nodepool configuration\n  - Stackdriver logs\n    \"\"\"\n\n  parameters = {\n      flags.PROJECT_ID: {\n          'type': str,\n          'help': 'The ID of the project hosting the GKE Cluster',\n          'required': True\n      },\n      flags.NAME: {\n          'type':\n              str,\n          'help':\n              'The name of the GKE cluster, to limit search only for this cluster',\n          'deprecated':\n              True,\n          'new_parameter':\n              'gke_cluster_name'\n      },\n      flags.GKE_CLUSTER_NAME: {\n          'type':\n              str,\n          'help':\n              'The name of the GKE cluster, to limit search only for this cluster',\n          'required':\n              True,\n      },\n      flags.LOCATION: {\n          'type': str,\n          'help': 'The zone or region of the GKE cluster',\n          'required': True\n      },\n      flags.START_TIME: {\n          'type':\n              datetime,\n          'help':\n              'The start window to investigate the ip exhaustion. Format: YYYY-MM-DDTHH:MM:SSZ'\n      },\n      flags.END_TIME: {\n          'type':\n              datetime,\n          'help':\n              'The end window to investigate the ip exhaustion. Format: YYYY-MM-DDTHH:MM:SSZ'\n      }\n  }\n\n  def legacy_parameter_handler(self, parameters):\n    if flags.NAME in parameters:\n      parameters[flags.GKE_CLUSTER_NAME] = parameters.pop(flags.NAME)\n\n  def build_tree(self):\n    \"\"\"Construct the diagnostic tree with appropriate steps.\"\"\"\n\n    # Instantiate your step classes\n    start = IpExhaustionStart()\n    # add them to your tree\n    self.add_start(start)\n    # you can create custom steps to define unique logic\n    pod_ip_range_exhaustion = PodIpRangeExhaustion()\n    node_ip_range_exhaustion = NodeIpRangeExhaustion()\n    # Describe the step relationships\n    self.add_step(parent=start, child=node_ip_range_exhaustion)\n    self.add_step(parent=node_ip_range_exhaustion,\n                  child=pod_ip_range_exhaustion)\n    # Ending your runbook\n    self.add_end(IpExhaustionEnd())\n\n\nclass IpExhaustionStart(runbook.StartStep):\n  \"\"\"Start IP Exhaustion Checks\"\"\"\n\n  def execute(self):\n    \"\"\"Starting the IP Exhaustion diagnostics\"\"\"\n\n    project = crm.get_project(op.get(flags.PROJECT_ID))\n    try:\n      cluster = gke.get_cluster(op.get(flags.PROJECT_ID),\n                                cluster_id=op.get(flags.GKE_CLUSTER_NAME),\n                                location=op.get(flags.LOCATION))\n    except GcpApiError:\n      op.add_skipped(\n          project,\n          reason=('Cluster {} does not exist in {} for project {}').format(\n              op.get(flags.GKE_CLUSTER_NAME), op.get(flags.LOCATION),\n              op.get(flags.PROJECT_ID)))\n    else:\n      op.add_ok(project,\n                reason=('Cluster {} found in {} for project {}').format(\n                    cluster.name, op.get(flags.LOCATION),\n                    op.get(flags.PROJECT_ID)))\n\n\nclass NodeIpRangeExhaustion(runbook.Step):\n  \"\"\"Check Node IP Range Exhaustion and offer remediation.\n\n  Checks Node IP range exhaustion and offers remediation step.\n  \"\"\"\n\n  template = 'ipexhaustion::node_ip_exhaustion'\n  # max number of characters from the cluster name that will end up in the node name\n  MAX_GKE_NAME_LENGTH = 16\n\n  def execute(self):\n    \"\"\"Checking node IP Exhaustion and offering remediation steps\"\"\"\n\n    cluster = gke.get_cluster(op.get(flags.PROJECT_ID),\n                              cluster_id=op.get(flags.GKE_CLUSTER_NAME),\n                              location=op.get(flags.LOCATION))\n    location = op.get(flags.LOCATION)\n    name = op.get(flags.GKE_CLUSTER_NAME)\n    error_msg = 'IP_SPACE_EXHAUSTED'\n    node_subnet = cluster.get_subnet_name\n    # adding fltr variable, because otherwise the filter string will be longer than 100 chars\n    fltr = 'protoPayload.status.details.ipSpaceExhausted.networkOrSubnetworkResource.resourceName'\n\n    # using here ':' instead of '=' for 'protoPayload.status.message' because there could be\n    # status messages like 'IP_SPACE_EXHAUSTED,IP_SPACE_EXHAUSTED' instead of 'IP_SPACE_EXHAUSTED'\n    filter_str = [\n        'log_id(\"cloudaudit.googleapis.com/activity\")',\n        'protoPayload.methodName=\"v1.compute.instances.insert\"',\n        'resource.type=\"gce_instance\"', 'severity=ERROR',\n        f'protoPayload.status.message:\"{error_msg}\"',\n        f'protoPayload.resourceName:\"{location}\"',\n        f'protoPayload.resourceName:\"{name[:self.MAX_GKE_NAME_LENGTH]}\"',\n        f'{fltr}=\"{node_subnet}\"'\n    ]\n    filter_str = '\\n'.join(filter_str)\n\n    # Check activity logs if 'IP_SPACE_EXHAUSTED' log is present in cloud logging.\n    op.info(f'Searching cloud logging for the string {error_msg} '\n            'which indicates IP Exhaustion issue')\n    ip_space_exhausted_log_entries = local_realtime_query(filter_str)\n\n    # Check cloud log entries for IP exhaustion.\n    if ip_space_exhausted_log_entries:\n      op.info(\n          f'{error_msg} error found for cluster {name} and subnet {node_subnet}'\n      )\n      op.add_failed(cluster,\n                    reason=op.prep_msg(op.FAILURE_REASON,\n                                       cluster_name=name,\n                                       node_subnet=node_subnet),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION,\n                                            node_subnet=node_subnet))\n    else:\n      op.add_ok(cluster,\n                reason=op.prep_msg(op.SUCCESS_REASON, cluster_name=name))\n\n\nclass PodIpRangeExhaustion(runbook.Step):\n  \"\"\"Check Pod IP Range Exhaustion and offer remediation.\n\n  Checks Pod IP range exhaustion and offers remediation step.\n  \"\"\"\n\n  template = 'ipexhaustion::pod_ip_exhaustion'\n  MAX_GKE_SUBNET_NAME_LENGTH = 15\n  MAX_GKE_NAME_LENGTH = 16\n\n  def execute(self):\n    \"\"\"Checking Pod IP Exhaustion and offering remediation steps\"\"\"\n\n    cluster = gke.get_cluster(op.get(flags.PROJECT_ID),\n                              cluster_id=op.get(flags.GKE_CLUSTER_NAME),\n                              location=op.get(flags.LOCATION))\n    project = op.get(flags.PROJECT_ID)\n    location = op.get(flags.LOCATION)\n    name = op.get(flags.GKE_CLUSTER_NAME)\n    error_msg = 'IP_SPACE_EXHAUSTED'\n    node_subnet = cluster.get_subnet_name\n    pool_config = cluster.get_nodepool_config\n    pool_nr = len(pool_config)\n    # adding fltr variable, because otherwise the filter string will be longer than 100 chars\n    fltr = 'protoPayload.status.details.ipSpaceExhausted.networkOrSubnetworkResource.resourceName'\n\n    # using here ':' instead of '=' for 'protoPayload.status.message' because there could be\n    # status messages like 'IP_SPACE_EXHAUSTED,IP_SPACE_EXHAUSTED' instead of 'IP_SPACE_EXHAUSTED'\n    filter_str = [\n        'log_id(\"cloudaudit.googleapis.com/activity\")',\n        'protoPayload.methodName=\"v1.compute.instances.insert\"',\n        'resource.type=\"gce_instance\"', 'severity=ERROR',\n        f'protoPayload.status.message:\"{error_msg}\"',\n        f'protoPayload.resourceName:\"{location}\"',\n        f'protoPayload.resourceName:\"{name[:self.MAX_GKE_NAME_LENGTH]}\"'\n    ]\n\n    # creating a pod_ranges list from a set to exclude duplicates\n    pod_ranges = list(\n        {pool_config[i]['networkConfig']['podRange'] for i in range(pool_nr)})\n    # add opening parenthesis to the query\n    filter_str.append('(')\n\n    # create the filter for all subnets for all nodepools\n    for pod_range in pod_ranges:\n      resource = (f'{node_subnet[:self.MAX_GKE_SUBNET_NAME_LENGTH]}-'\n                  f'{pod_range[:self.MAX_GKE_SUBNET_NAME_LENGTH]}-')\n\n      # if it's the last element, don't add OR to the filter\n      if pod_range == pod_ranges[-1]:\n        filter_str.append(f'{fltr}:\"{resource}\"')\n      else:\n        filter_str.append(f'{fltr}:\"{resource}\" OR')\n\n    # add closing parenthesis to the query\n    filter_str.append(')')\n    filter_str = '\\n'.join(filter_str)\n    ip_space_exhausted_pod_range_log_entries = local_realtime_query(filter_str)\n\n    if ip_space_exhausted_pod_range_log_entries:\n      op.info(\n          'Verifying if the cluster is an Autopilot cluster or a Standard cluster.'\n      )\n\n      if cluster.is_autopilot:\n        op.info('Cluster is an Autopilot cluster')\n        op.add_failed(cluster,\n                      reason=op.prep_msg(op.FAILURE_REASON, cluster_name=name),\n                      remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n      else:\n        location = op.get(flags.LOCATION)\n        op.info('Cluster is a Standard cluster')\n        op.add_failed(cluster,\n                      reason=op.prep_msg(op.FAILURE_REASON, cluster_name=name),\n                      remediation=op.prep_msg(\n                          op.FAILURE_REMEDIATION_ALT1,\n                          cluster_name=name,\n                          project_name=project,\n                          subnet_name=node_subnet,\n                          region=location,\n                          network=cluster.get_network_string))\n    else:\n      op.add_ok(\n          cluster,\n          reason=\n          (f'No Pod IP exhaustion issues found for cluster {name} in the project {project}'\n          ))\n\n\nclass IpExhaustionEnd(runbook.EndStep):\n  \"\"\"Concludes the CLuster IP Exhaustion diagnostics process.\n\n  If the issue persists, it directs the user to helpful\n  resources and suggests contacting support with a detailed report.\n  \"\"\"\n\n  def execute(self):\n    \"\"\"Finalize VM external connectivity diagnostics.\"\"\"\n\n    if not config.get(flags.INTERACTIVE_MODE):\n      response = op.prompt(\n          kind=op.CONFIRMATION,\n          message=('Are you still experiencing exhaustion issues on the cluster'\n                   f' {op.get(flags.GKE_CLUSTER_NAME)}'),\n          choice_msg='Enter an option: ',\n      )\n      if response == op.NO:\n        op.info(message=op.END_MESSAGE)\n"
  },
  {
    "path": "gcpdiag/runbook/gke/ip_exhaustion_test.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test class for gke/IpExhaustionIssues.\"\"\"\n\nimport unittest\nfrom unittest import mock\n\nfrom gcpdiag import config\nfrom gcpdiag.queries import apis_stub\nfrom gcpdiag.runbook import gke, op, snapshot_test_base\nfrom gcpdiag.runbook.gke import flags, ip_exhaustion\nfrom gcpdiag.utils import GcpApiError\n\n\nclass MockMessage:\n  \"\"\"Mock messages for testing.\"\"\"\n\n  def get_msg(self, key, **kwargs):\n    del kwargs\n    return f'{key}'\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = gke\n  runbook_name = 'gke/ip-exhaustion'\n  config.init({'auto': True, 'interface': 'cli'})\n\n  rule_parameters = [{\n      'project_id': 'gcpdiag-gke3-gggg',\n      'gke_cluster_name': 'cluster-1',\n      'location': 'us-central1-c',\n      'start_time': '2024-06-30T01:00:00Z',\n      'end_time': '2024-06-30T23:00:00Z'\n  }]\n\n\nclass TestIpExhaustionUnit(unittest.TestCase):\n  \"\"\"Unit tests covering the diagnostic tree and individual steps.\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    self.enterContext(\n        mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub))\n    self.mock_get_user_email = self.enterContext(\n        mock.patch('gcpdiag.queries.apis.get_user_email'))\n    self.mock_is_enabled = self.enterContext(\n        mock.patch('gcpdiag.queries.apis.is_enabled'))\n    self.mock_is_enabled.return_value = True\n    self.mock_get_user_email.return_value = 'test@example.com'\n\n    self.mock_interface = mock.create_autospec(op.InteractionInterface,\n                                               instance=True)\n    self.mock_interface.rm = mock.Mock()\n    self.operator = op.Operator(self.mock_interface)\n    self.operator.run_id = 'test-run'\n    self.operator.messages = MockMessage()\n    self.project_id = 'test-project'\n    self.cluster_name = 'test-cluster'\n    self.location = 'us-central1-a'\n    self.enterContext(\n        mock.patch('gcpdiag.runbook.op.get_context', autospec=True))\n    self.enterContext(\n        mock.patch(\n            'gcpdiag.runbook.op.prep_msg',\n            side_effect=lambda x, **y: x,\n            autospec=True,\n        ))\n    self.enterContext(mock.patch('gcpdiag.runbook.op.info', autospec=True))\n\n  @mock.patch('gcpdiag.runbook.op.get')\n  @mock.patch('gcpdiag.queries.logs.realtime_query')\n  def test_local_realtime_query(self, mock_query, mock_op_get):\n    \"\"\"Covers lines 26-30: Verifies the log query helper correctly handles parameters.\"\"\"\n    mock_op_get.side_effect = lambda k, default=None: {\n        flags.PROJECT_ID: self.project_id,\n        flags.START_TIME: '2024-06-30T01:00:00Z',\n        flags.END_TIME: '2024-06-30T23:00:00Z'\n    }.get(k, default)\n\n    ip_exhaustion.local_realtime_query('test-filter')\n    mock_query.assert_called_once_with(project_id=self.project_id,\n                                       start_time='2024-06-30T01:00:00Z',\n                                       end_time='2024-06-30T23:00:00Z',\n                                       filter_str='test-filter')\n\n  def test_legacy_parameter_handler(self):\n    \"\"\"Covers lines 89-90: Verifies handling of deprecated 'name' parameter.\"\"\"\n    tree = ip_exhaustion.IpExhaustion()\n    params = {flags.NAME: 'old-name-param'}\n    tree.legacy_parameter_handler(params)\n    self.assertEqual(params[flags.GKE_CLUSTER_NAME], 'old-name-param')\n    self.assertNotIn(flags.NAME, params)\n\n  @mock.patch('gcpdiag.runbook.op.get')\n  @mock.patch('gcpdiag.queries.crm.get_project')\n  @mock.patch('gcpdiag.queries.gke.get_cluster')\n  @mock.patch('gcpdiag.runbook.op.add_skipped')\n  def test_start_step_cluster_not_found(self, mock_skip, mock_get_cluster,\n                                        unused_mock_get_project, mock_op_get):\n    \"\"\"Covers lines 116-122: Verifies skipping when GKE cluster is not found.\"\"\"\n    mock_op_get.side_effect = lambda k, default=None: {\n        flags.PROJECT_ID: self.project_id,\n        flags.GKE_CLUSTER_NAME: self.cluster_name,\n        flags.LOCATION: self.location\n    }.get(k, default)\n    # Simulate API error for non-existent cluster\n    mock_response = mock.Mock()\n    mock_response.status = 404\n    mock_response.content = b'{\"error\": \"cluster not found\"}'\n    mock_get_cluster.side_effect = GcpApiError(mock_response)\n\n    step = ip_exhaustion.IpExhaustionStart()\n    step.execute()\n    mock_skip.assert_called_once()\n    self.assertIn('does not exist', mock_skip.call_args[1]['reason'])\n\n  @mock.patch('gcpdiag.runbook.op.get')\n  @mock.patch('gcpdiag.queries.gke.get_cluster')\n  @mock.patch('gcpdiag.runbook.gke.ip_exhaustion.local_realtime_query')\n  @mock.patch('gcpdiag.runbook.op.add_failed')\n  def test_node_exhaustion_detected(self, mock_failed, mock_query,\n                                    unused_mock_get_cluster, mock_op_get):\n    \"\"\"Covers lines 147-187: Verifies failure report when Node IP exhaustion logs found.\"\"\"\n    mock_op_get.side_effect = lambda k, default=None: {\n        flags.PROJECT_ID: self.project_id,\n        flags.GKE_CLUSTER_NAME: self.cluster_name,\n        flags.LOCATION: self.location\n    }.get(k, default)\n    mock_query.return_value = ['IP_SPACE_EXHAUSTED log entry']\n\n    step = ip_exhaustion.NodeIpRangeExhaustion()\n    step.execute()\n    mock_failed.assert_called_once()\n\n  @mock.patch('gcpdiag.runbook.op.get')\n  @mock.patch('gcpdiag.queries.gke.get_cluster')\n  @mock.patch('gcpdiag.runbook.gke.ip_exhaustion.local_realtime_query')\n  @mock.patch('gcpdiag.runbook.op.add_failed')\n  def test_pod_exhaustion_autopilot_detected(self, mock_failed, mock_query,\n                                             mock_get_cluster, mock_op_get):\n    \"\"\"Covers lines 204-273: Verifies Autopilot-specific failure logic for Pod IP exhaustion.\"\"\"\n    mock_op_get.side_effect = lambda k, default=None: {\n        flags.PROJECT_ID: self.project_id,\n        flags.GKE_CLUSTER_NAME: self.cluster_name,\n        flags.LOCATION: self.location\n    }.get(k, default)\n    mock_query.return_value = ['found pod exhaustion log']\n    cluster = mock_get_cluster.return_value\n    cluster.is_autopilot = True\n    cluster.get_nodepool_config = [{'networkConfig': {'podRange': 'range-1'}}]\n\n    step = ip_exhaustion.PodIpRangeExhaustion()\n    step.execute()\n    mock_failed.assert_called_once()\n\n  @mock.patch('gcpdiag.config.get')\n  @mock.patch('gcpdiag.runbook.op.get')\n  @mock.patch('gcpdiag.runbook.op.prompt')\n  @mock.patch('gcpdiag.runbook.op.info')\n  def test_end_step_resolution_confirmation(self, mock_info, mock_prompt,\n                                            mock_op_get, mock_config_get):\n    \"\"\"Covers lines 290-298: Verifies final prompt logic in non-interactive mode.\"\"\"\n    mock_config_get.return_value = False  # Force prompt trigger\n    mock_prompt.return_value = 'NO'\n    mock_op_get.return_value = self.cluster_name\n\n    with mock.patch('gcpdiag.runbook.op.NO', 'NO'):\n      step = ip_exhaustion.IpExhaustionEnd()\n      step.execute()\n      mock_prompt.assert_called_once()\n      mock_info.assert_called_with(message=mock.ANY)\n\n  def test_build_tree(self):\n    \"\"\"Covers lines 96-107: Verifies the diagnostic tree structure and step relationships.\"\"\"\n    tree = ip_exhaustion.IpExhaustion()\n    tree.build_tree()\n    self.assertIsNotNone(tree.start)\n    self.assertIsInstance(tree.start, ip_exhaustion.IpExhaustionStart)\n    self.assertEqual(tree.start.doc_file_name, 'ip-exhaustion-start')\n    self.assertEqual(len(tree.start.steps), 2)\n    self.assertIsInstance(tree.start.steps[0],\n                          ip_exhaustion.NodeIpRangeExhaustion)\n    self.assertIsInstance(tree.start.steps[1], ip_exhaustion.IpExhaustionEnd)\n    self.assertIsInstance(tree.start.steps[0].steps[0],\n                          ip_exhaustion.PodIpRangeExhaustion)\n\n  @mock.patch('gcpdiag.runbook.op.get')\n  @mock.patch('gcpdiag.queries.crm.get_project')\n  @mock.patch('gcpdiag.queries.gke.get_cluster')\n  @mock.patch('gcpdiag.runbook.op.add_ok')\n  def test_start_step_cluster_found(self, mock_ok, mock_get_cluster,\n                                    unused_mock_get_project, mock_op_get):\n    \"\"\"Covers line 128: Verifies success path when the GKE cluster exists.\"\"\"\n    mock_op_get.side_effect = lambda k, default=None: {\n        flags.PROJECT_ID: self.project_id,\n        flags.GKE_CLUSTER_NAME: self.cluster_name,\n        flags.LOCATION: self.location\n    }.get(k, default)\n    mock_get_cluster.return_value.name = self.cluster_name\n\n    step = ip_exhaustion.IpExhaustionStart()\n    step.execute()\n    # Confirms op.add_ok is called (line 128)\n    mock_ok.assert_called_once()\n    self.assertIn('found', mock_ok.call_args[1]['reason'])\n\n  @mock.patch('gcpdiag.runbook.op.get')\n  @mock.patch('gcpdiag.queries.gke.get_cluster')\n  @mock.patch('gcpdiag.runbook.gke.ip_exhaustion.local_realtime_query')\n  @mock.patch('gcpdiag.runbook.op.add_ok')\n  def test_node_exhaustion_not_found(self, mock_ok, mock_query,\n                                     unused_mock_get_cluster, mock_op_get):\n    \"\"\"Covers line 187: Verifies OK status when no Node IP exhaustion logs are found.\"\"\"\n    mock_op_get.side_effect = lambda k, default=None: {\n        flags.PROJECT_ID: self.project_id,\n        flags.GKE_CLUSTER_NAME: self.cluster_name,\n        flags.LOCATION: self.location\n    }.get(k, default)\n    mock_query.return_value = []  # Simulate no exhaustion logs\n\n    step = ip_exhaustion.NodeIpRangeExhaustion()\n    step.execute()\n    # Confirms op.add_ok is called (line 187)\n    mock_ok.assert_called_once()\n\n  @mock.patch('gcpdiag.runbook.op.get')\n  @mock.patch('gcpdiag.queries.gke.get_cluster')\n  @mock.patch('gcpdiag.runbook.gke.ip_exhaustion.local_realtime_query')\n  @mock.patch('gcpdiag.runbook.op.add_failed')\n  @mock.patch('gcpdiag.runbook.op.info')\n  def test_pod_exhaustion_standard_cluster_detected(self, mock_info,\n                                                    mock_failed, mock_query,\n                                                    mock_get_cluster,\n                                                    mock_op_get):\n    \"\"\"Covers lines 243, 266-273: Verifies failure logic for Standard GKE clusters.\"\"\"\n    mock_op_get.side_effect = lambda k, default=None: {\n        flags.PROJECT_ID: self.project_id,\n        flags.GKE_CLUSTER_NAME: self.cluster_name,\n        flags.LOCATION: self.location\n    }.get(k, default)\n    mock_query.return_value = ['IP_SPACE_EXHAUSTED']\n    cluster = mock_get_cluster.return_value\n    cluster.is_autopilot = False\n    cluster.get_nodepool_config = [{'networkConfig': {'podRange': 'range-1'}}]\n    step = ip_exhaustion.PodIpRangeExhaustion()\n    step.execute()\n    mock_failed.assert_called_once()\n    mock_info.assert_any_call('Cluster is a Standard cluster')\n\n  @mock.patch('gcpdiag.runbook.op.get')\n  @mock.patch('gcpdiag.queries.gke.get_cluster')\n  @mock.patch('gcpdiag.runbook.gke.ip_exhaustion.local_realtime_query')\n  @mock.patch('gcpdiag.runbook.op.add_ok')\n  def test_pod_exhaustion_not_found(self, mock_ok, mock_query, mock_get_cluster,\n                                    mock_op_get):\n    \"\"\"Verifies OK when no Pod IP exhaustion logs found.\"\"\"\n    mock_op_get.side_effect = lambda k, default=None: {\n        flags.PROJECT_ID: self.project_id,\n        flags.GKE_CLUSTER_NAME: self.cluster_name,\n        flags.LOCATION: self.location\n    }.get(k, default)\n    mock_query.return_value = []\n    cluster = mock_get_cluster.return_value\n    cluster.get_nodepool_config = [{'networkConfig': {'podRange': 'range-1'}}]\n    step = ip_exhaustion.PodIpRangeExhaustion()\n    step.execute()\n    mock_ok.assert_called_once()\n"
  },
  {
    "path": "gcpdiag/runbook/gke/logs.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Module containing investigating and resolving GKE logging related issues\"\"\"\n\nfrom typing import Dict\n\nfrom gcpdiag import runbook\nfrom gcpdiag.lint.gke import util\nfrom gcpdiag.queries import apis, crm, gke, iam, monitoring, quotas\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.gke import flags\n\n\nclass Logs(runbook.DiagnosticTree):\n  \"\"\"Provides a methodical approach to troubleshooting GKE logging issues.\n\n  This runbook guides you through a systematic investigation of potential\n  causes when logs from the Google Kubernetes Engine (GKE) cluster are missing\n  or incomplete. The focus is on core configuration settings that are essential\n  for proper logging functionality.\n\n  The following areas are examined:\n\n  - **Project-Level Logging:** Ensures that the Google Cloud project housing\n  the GKE cluster has the Cloud Logging API enabled.\n\n  - **Cluster-Level Logging:** Verifies that logging is explicitly enabled\n  within the GKE cluster's configuration.\n\n  - **Node Pool Permissions:** Confirms that the nodes within the cluster's\n  node pools have the 'Cloud Logging Write' scope enabled, allowing them to send\n  log data.\n\n  - **Service Account Permissions:** Validates that the service account used\n  by the node pools possesses the necessary IAM permissions to interact with\n  Cloud Logging. Specifically, the \"roles/logging.logWriter\" role is typically\n  required.\n\n  - **Cloud Logging API Write Quotas:** Verifies that Cloud Logging API Write\n  quotas have not been exceeded within the specified timeframe.\n  \"\"\"\n\n  parameters = {\n      flags.PROJECT_ID: {\n          'type': str,\n          'help': 'The ID of the project hosting the GKE Cluster',\n          'required': True\n      },\n      flags.NAME: {\n          'type':\n              str,\n          'help':\n              'The name of the GKE cluster, to limit search only for this cluster',\n          'deprecated':\n              True,\n          'new_parameter':\n              'gke_cluster_name',\n      },\n      flags.GKE_CLUSTER_NAME: {\n          'type': str,\n          'help': 'The name of the GKE cluster',\n          'required': True\n      },\n      flags.LOCATION: {\n          'type': str,\n          'help': 'The zone or region of the GKE cluster',\n          'required': True\n      }\n  }\n\n  def legacy_parameter_handler(self, parameters):\n    if flags.NAME in parameters:\n      parameters[flags.GKE_CLUSTER_NAME] = parameters.pop(flags.NAME)\n\n  def build_tree(self):\n    \"\"\"Construct the diagnostic tree with appropriate steps.\"\"\"\n    # Instantiate your step classes\n    start = LogsStart()\n    project_logging_check = LoggingApiEnabled()\n    cluster_logging_check = ClusterLevelLoggingEnabled()\n    node_pool_access_scope_check = NodePoolCloudLoggingAccessScope()\n    service_account_permissions_check = ServiceAccountLoggingPermission()\n    logging_write_api_quota_exceeded_check = LoggingWriteApiQuotaExceeded()\n    # add them to the tree\n    self.add_start(start)\n    self.add_step(parent=start, child=project_logging_check)\n    self.add_step(parent=project_logging_check, child=cluster_logging_check)\n    self.add_step(parent=cluster_logging_check,\n                  child=node_pool_access_scope_check)\n    self.add_step(parent=node_pool_access_scope_check,\n                  child=service_account_permissions_check)\n    self.add_step(parent=service_account_permissions_check,\n                  child=logging_write_api_quota_exceeded_check)\n    self.add_end(step=LogsEnd())\n\n\nclass LogsStart(runbook.StartStep):\n  \"\"\"Initiates diagnostics for GKE Clusters.\n\n  - **Initial Checks:**\n    - Verifies if logging API is enabled for the project.\n    - Validates that there are GKE clusters in the project.\n    - (Optional) If a cluster name is provided, checks if that cluster exists in the project.\n    - (Optional) If a location is provided, verifies there are clusters in that location.\n    - (Optional) If both a location and a name are provided, verifies that the cluster\n    exists at that location.\n  \"\"\"\n\n  def execute(self):\n    \"\"\"Checks the provided parameters.\"\"\"\n    project = op.get(flags.PROJECT_ID)\n    project_path = crm.get_project(project)\n\n    # Checks if there are clusters in the project\n    clusters = gke.get_clusters(op.get_context())\n    if not clusters:\n      op.add_skipped(\n          project_path,\n          reason=('No GKE clusters found in project {}').format(project))\n      return\n\n    # The following checks adjust based on the input provided:\n    # - Both cluster name and location: Verify if that specific cluster exists at that location.\n\n    cluster_name = op.get(flags.GKE_CLUSTER_NAME)\n    cluster_location = op.get(flags.LOCATION)\n    found_cluster = False\n    found_cluster_with_location = False\n    found_clusters_at_location = False\n    if cluster_name and cluster_location:\n      for cluster in clusters.values():\n        if cluster_name == str(cluster).rsplit('/', maxsplit=1)[-1] \\\n          and cluster_location == str(cluster).split('/')[-3]:\n          found_cluster_with_location = True\n          break\n\n    if not found_cluster_with_location and cluster_location and cluster_name:\n      op.add_skipped(\n          project_path,\n          reason=('Cluster with the name {} in {} does not exist in project {}'\n                 ).format(cluster_name, cluster_location, project))\n    # next check includes found_cluster_with_location because we found a cluster at a particular\n    # location thus we cannot skip these checks\n    elif not found_cluster and not found_cluster_with_location and cluster_name:\n      op.add_skipped(\n          project_path,\n          reason=(\n              'Cluster with the name {} does not exist in project {}').format(\n                  cluster_name, project))\n    elif not found_clusters_at_location and not found_cluster_with_location and cluster_location:\n      op.add_skipped(\n          project_path,\n          reason=('No clusters found at location {} in project {}').format(\n              cluster_location, project))\n\n\nclass LoggingApiEnabled(runbook.Step):\n  \"\"\"Verifies if the Cloud Logging API is enabled for the project hosting the GKE cluster.\n\n  This initial step ensures that the fundamental infrastructure for\n  logging within the project is operational. If the Cloud Logging API\n  is disabled, logs from the GKE cluster won't be collected or stored\n  by Google Cloud.\n  \"\"\"\n\n  template = 'logs::project_logging_check'\n\n  def execute(self):\n    \"\"\"Checks if logging API is disabled in the project.\"\"\"\n    project = op.get(flags.PROJECT_ID)\n    project_path = crm.get_project(project)\n\n    if apis.is_enabled(project, 'logging'):\n      op.add_ok(project_path,\n                reason='The logging API is enabled in your project.')\n    else:\n      op.add_failed(project_path,\n                    reason='The logging API is NOT enabled in your project.',\n                    remediation='Please endable the logging API')\n\n\nclass ClusterLevelLoggingEnabled(runbook.Step):\n  \"\"\"Verifies that logging is enabled at the GKE cluster level.\n\n  Confirms that the GKE cluster configuration explicitly enables\n  logging. Even if the project has the Cloud Logging API enabled\n  and other settings are correct, logs won't be collected if\n  cluster-level logging is disabled.\n  \"\"\"\n\n  template = 'logs::cluster_logging_check'\n\n  def execute(self):\n    \"\"\"Checks if GKE level logging is disabled\"\"\"\n    clusters = gke.get_clusters(op.get_context())\n    partial_path = f'{op.get(flags.LOCATION)}/clusters/{op.get(flags.GKE_CLUSTER_NAME)}'\n    cluster_obj = util.get_cluster_object(clusters, partial_path)\n\n    if not cluster_obj.is_autopilot:\n      disabled: list[str] = []\n      if cluster_obj.has_logging_enabled() and \\\n        'WORKLOADS' not in cluster_obj.enabled_logging_components():\n        disabled.append('workload logs')\n      elif not cluster_obj.has_logging_enabled():\n        disabled.append('logging')\n\n      if not disabled:\n        op.add_ok(\n            cluster_obj,\n            reason=\n            f' GKE level logging is enabled for the cluster {cluster_obj}.')\n      else:\n        op.add_failed(\n            cluster_obj,\n            reason=\n            f'GKE level logging is not enabled for the cluster {cluster_obj}.',\n            remediation='Please endable GKE level logging for this cluster.')\n\n\nclass NodePoolCloudLoggingAccessScope(runbook.Step):\n  \"\"\"Verifies that GKE node pools have the required Cloud Logging access scopes.\n\n  Confirms that the nodes within the GKE cluster's node pools have the necessary\n  scopes to write log data to Cloud Logging.  These scopes include\n  'https://www.googleapis.com/auth/logging.write' and  potentially others,\n  such as 'https://www.googleapis.com/auth/cloud-platform' and\n  'https://www.googleapis.com/auth/logging.admin', depending on the configuration.\n  \"\"\"\n\n  template = 'logs::node_pool_access_scope_check'\n\n  def execute(self):\n    \"\"\"Verifies the node pools have Cloud Logging access scope\"\"\"\n\n    required_clogging_access_scope = [\n        'https://www.googleapis.com/auth/logging.write',\n        'https://www.googleapis.com/auth/cloud-platform',\n        'https://www.googleapis.com/auth/logging.admin'\n    ]\n\n    clusters = gke.get_clusters(op.get_context())\n    partial_path = f'{op.get(flags.LOCATION)}/clusters/{op.get(flags.GKE_CLUSTER_NAME)}'\n    cluster_obj = util.get_cluster_object(clusters, partial_path)\n\n    for nodepool in cluster_obj.nodepools:\n\n      if any(s in nodepool.config.oauth_scopes\n             for s in required_clogging_access_scope):\n        op.add_ok(\n            nodepool,\n            reason=\n            f'The node pool {nodepool} has the correct Cloud Logging access scope.'\n        )\n      else:\n        op.add_failed(\n            nodepool,\n            reason=\n            f'The node pool {nodepool} is missing Cloud Logging access scope.',\n            remediation=\n            'Please create new node pools with the correct logging scope. \\\n          Please read https://cloud.google.com/kubernetes-engine/docs/troubleshooting/logging\\\n#verify_nodes_in_the_node_pools_have_access_scope.')\n\n\nclass ServiceAccountLoggingPermission(runbook.Step):\n  \"\"\"Verifies the service accounts associated with node pools have 'logging.logWriter' permissions.\n\n  Checks that the service accounts used by nodes in the GKE cluster\n  have the essential \"roles/logging.logWriter\" IAM permission. This\n  permission is required to send log data to Google Cloud Logging.\n  \"\"\"\n\n  template = 'logs::service_account_permissions_check'\n\n  def execute(self):\n    \"\"\"\n    Verifies the node pool's service account has a role with the correct logging IAM permissions\n    \"\"\"\n    clusters = gke.get_clusters(op.get_context())\n    partial_path = f'{op.get(flags.LOCATION)}/clusters/{op.get(flags.GKE_CLUSTER_NAME)}'\n    cluster_obj = util.get_cluster_object(clusters, partial_path)\n    iam_policy = iam.get_project_policy(op.get_context())\n\n    logging_role = 'roles/logging.logWriter'\n\n    # Verifies service-account permissions for every nodepool.\n    for np in cluster_obj.nodepools:\n      sa = np.service_account\n      if not iam.is_service_account_enabled(sa, op.get_context()):\n        op.add_failed(\n            np,\n            reason=f'The service account {sa} is disabled or deleted.',\n            remediation='The service account {} used by GKE nodes should have \\\n                      the logging.logWriter role.'.format(sa))\n      elif not iam_policy.has_role_permissions(f'serviceAccount:{sa}',\n                                               logging_role):\n        op.add_failed(np,\n                      reason='The service account: {} is missing \\\nrole: {}.'.format(sa, logging_role),\n                      remediation='Please grant the role: {} to the service \\\naccount: {}.'.format(logging_role, sa))\n      else:\n        op.add_ok(np,\n                  reason='Service account: {} has the correct \\\nlogging permissions.'.format(sa))\n\n\nclass LoggingWriteApiQuotaExceeded(runbook.Step):\n  \"\"\"Verifies that Cloud Logging API write quotas have not been exceeded.\n\n  Checks if the project has exceeded any Cloud Logging write quotas within\n  the defined timeframe. Exceeding the quota could prevent nodes from sending\n  log data, even if other configurations are correct.\n  \"\"\"\n\n  template = 'logs::logging_write_api_quota_exceeded_check'\n\n  def execute(self):\n    \"\"\"Checks if Cloud Logging API write quotas have been exceeded\"\"\"\n\n    query_results_per_project_id: Dict[str,\n                                       monitoring.TimeSeriesCollection] = {}\n\n    params = {\n        'start_time':\n            op.get(flags.START_TIME).strftime(\"d\\'%Y/%m/%d-%H:%M:%S'\"),\n        'end_time':\n            op.get(flags.END_TIME).strftime(\"d\\'%Y/%m/%d-%H:%M:%S'\")\n    }\n\n    query_results_per_project_id[op.get(flags.PROJECT_ID)] = \\\n        monitoring.query(\n            op.get(flags.PROJECT_ID),\n            quotas.QUOTA_EXCEEDED_QUERY_WINDOW_TEMPLATE.format_map(params))\n\n    project = op.get(flags.PROJECT_ID)\n    project_path = crm.get_project(project)\n\n    if len(query_results_per_project_id[project]) == 0:\n      op.add_ok(project_path,\n                reason=op.prep_msg(op.SUCCESS_REASON,\n                                   start_time=op.get(flags.START_TIME),\n                                   end_time=op.get(flags.END_TIME)))\n    else:\n      exceeded_quotas = []\n      for i in query_results_per_project_id[project].values():\n        if i['labels'][\n            'metric.limit_name'] == 'WriteRequestsPerMinutePerProject':\n          try:\n            exceeded_quotas.append(i['labels']['metric.limit_name'])\n          except KeyError:\n            op.add_skipped(op.project, 'no data')\n            #invalid query result\n            return\n      exceeded_quota_names = ', '.join(exceeded_quotas)\n      op.add_failed(\n          project_path,\n          reason='Project {} has recently exceeded the following \\\nquotas: {}.'.format(project, exceeded_quota_names),\n          remediation='Please check the project {} for the Cloud Logging API \\\nquotas {} which have been reached'.format(project, exceeded_quota_names))\n\n\nclass LogsEnd(runbook.EndStep):\n  \"\"\"Finalizes the 'GKE logs' diagnostic process.\n\n  Prompts the user for satisfaction with the Root Cause Analysis (RCA) and takes appropriate\n  actions based on their response:\n\n  * **Confirmation:** Concludes the runbook execution.\n  * **Further Action:** Triggers additional steps, such as report generation, if necessary.\n  \"\"\"\n\n  def execute(self):\n    \"\"\"Finalize `GKE logs` diagnostics.\"\"\"\n    response = op.prompt(\n        kind=op.CONFIRMATION,\n        message='Are you satisfied with the `GKE logs` RCA performed?')\n    if response == op.NO:\n      op.info(message=op.END_MESSAGE)\n      op.interface.rm.generate_report()\n"
  },
  {
    "path": "gcpdiag/runbook/gke/logs_test.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test class for gke/GkeLogs\"\"\"\n\nimport datetime\nimport unittest\nfrom unittest import mock\n\nfrom gcpdiag import config\nfrom gcpdiag.queries import apis_stub\nfrom gcpdiag.runbook import gke as gke_runbook\nfrom gcpdiag.runbook import op, snapshot_test_base\nfrom gcpdiag.runbook.gke import flags, logs\n\n\nclass MockMessage:\n  \"\"\"Mock messages for testing.\"\"\"\n\n  def get_msg(self, key, **kwargs):\n    del kwargs\n    return f'{key}'\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = gke_runbook\n  runbook_name = 'gke/logs'\n  project_id = 'gcpdiag-gke-cluster-autoscaler-rrrr'\n  config.init({'auto': True, 'interface': 'cli'}, project_id)\n\n  rule_parameters = [{\n      'project_id': 'gcpdiag-gke-cluster-autoscaler-rrrr',\n      'name': 'gcp-cluster',\n      'gke_cluster_name': 'gcp-cluster',\n      'location': 'europe-west10'\n  }]\n\n\nclass TestGkeLogsSteps(unittest.TestCase):\n  \"\"\"Unit tests for GKE Logs runbook steps to increase coverage.\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    self.enterContext(\n        mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub))\n    self.mock_get_user_email = self.enterContext(\n        mock.patch('gcpdiag.queries.apis.get_user_email'))\n    self.mock_is_enabled = self.enterContext(\n        mock.patch('gcpdiag.queries.apis.is_enabled'))\n    self.mock_is_enabled.return_value = True\n    self.mock_get_user_email.return_value = 'test@example.com'\n\n    self.mock_interface = mock.create_autospec(op.InteractionInterface,\n                                               instance=True)\n    self.mock_interface.rm = mock.Mock()\n    self.operator = op.Operator(self.mock_interface)\n    self.operator.run_id = 'test-run'\n    self.operator.messages = MockMessage()\n    self.mock_op_get = self.enterContext(mock.patch('gcpdiag.runbook.op.get'))\n    self.mock_op_add_ok = self.enterContext(\n        mock.patch('gcpdiag.runbook.op.add_ok'))\n    self.mock_op_add_failed = self.enterContext(\n        mock.patch('gcpdiag.runbook.op.add_failed'))\n    self.mock_op_add_skipped = self.enterContext(\n        mock.patch('gcpdiag.runbook.op.add_skipped'))\n    self.mock_crm_get_project = self.enterContext(\n        mock.patch('gcpdiag.queries.crm.get_project'))\n    self.mock_gke_get_clusters = self.enterContext(\n        mock.patch('gcpdiag.queries.gke.get_clusters'))\n\n    self.project_id = 'test-project'\n    self.params = {\n        flags.PROJECT_ID: self.project_id,\n        flags.GKE_CLUSTER_NAME: 'test-cluster',\n        flags.LOCATION: 'us-central1'\n    }\n    self.mock_op_get.side_effect = lambda key, default=None: self.params.get(\n        key, default)\n    self.mock_interface = mock.MagicMock()\n    self.operator = op.Operator(self.mock_interface)\n    self.operator.set_parameters(self.params)\n    self.operator.set_step(mock.MagicMock())\n    self.operator.set_run_id('test_run')\n\n  # Tests for LogsStart (Lines 83-105)\n  def test_logs_start_skips_when_no_clusters(self):\n    \"\"\"Given no clusters in project, when LogsStart executes, then it skips.\"\"\"\n    self.mock_gke_get_clusters.return_value = {}\n    step = logs.LogsStart()\n    with op.operator_context(self.operator):\n      step.execute()\n    self.mock_op_add_skipped.assert_called_with(mock.ANY, reason=mock.ANY)\n\n  def test_logs_start_skips_when_cluster_not_found(self):\n    \"\"\"Given cluster name doesn't match, when LogsStart executes, then it skips.\"\"\"\n    cluster = mock.Mock()\n    cluster.__str__ = mock.Mock(\n        return_value='projects/p/locations/zone/clusters/other-cluster')\n    self.mock_gke_get_clusters.return_value = {'other': cluster}\n    step = logs.LogsStart()\n    with op.operator_context(self.operator):\n      step.execute()\n    self.mock_op_add_skipped.assert_called()\n\n  # Tests for LoggingApiEnabled (Lines 122-145)\n  @mock.patch('gcpdiag.queries.apis.is_enabled')\n  def test_logging_api_failed_when_disabled(self, mock_is_enabled):\n    \"\"\"Given Logging API is disabled, then step fails.\"\"\"\n    mock_is_enabled.return_value = False\n    step = logs.LoggingApiEnabled()\n    with op.operator_context(self.operator):\n      step.execute()\n    self.mock_op_add_failed.assert_called()\n\n  # Tests for ClusterLevelLoggingEnabled (Lines 148-188)\n  @mock.patch('gcpdiag.lint.gke.util.get_cluster_object')\n  def test_cluster_logging_fails_when_disabled(self, mock_get_obj):\n    \"\"\"Given logging is disabled in cluster config, then step fails.\"\"\"\n    cluster_obj = mock.Mock()\n    cluster_obj.is_autopilot = False\n    cluster_obj.has_logging_enabled.return_value = False\n    mock_get_obj.return_value = cluster_obj\n\n    step = logs.ClusterLevelLoggingEnabled()\n    with op.operator_context(self.operator):\n      step.execute()\n    self.mock_op_add_failed.assert_called()\n\n  # Tests for NodePoolCloudLoggingAccessScope (Lines 206-224)\n  @mock.patch('gcpdiag.lint.gke.util.get_cluster_object')\n  def test_nodepool_scope_fails_when_missing(self, mock_get_obj):\n    \"\"\"Given node pool missing logging scope, then step fails.\"\"\"\n    nodepool = mock.Mock()\n    nodepool.config.oauth_scopes = ['https://www.googleapis.com/auth/compute']\n    cluster_obj = mock.Mock()\n    cluster_obj.nodepools = [nodepool]\n    mock_get_obj.return_value = cluster_obj\n\n    step = logs.NodePoolCloudLoggingAccessScope()\n    with op.operator_context(self.operator):\n      step.execute()\n    self.mock_op_add_failed.assert_called()\n\n  # Tests for ServiceAccountLoggingPermission (Lines 246-314)\n  @mock.patch('gcpdiag.queries.iam.get_project_policy')\n  @mock.patch('gcpdiag.queries.iam.is_service_account_enabled')\n  @mock.patch('gcpdiag.lint.gke.util.get_cluster_object')\n  def test_sa_permission_fails_when_missing_role(self, mock_get_obj,\n                                                 mock_sa_enabled,\n                                                 mock_get_policy):\n    \"\"\"Given SA exists but missing LogWriter role, then step fails.\"\"\"\n    nodepool = mock.Mock()\n    nodepool.service_account = 'test-sa@test.iam.gserviceaccount.com'\n    cluster_obj = mock.Mock()\n    cluster_obj.nodepools = [nodepool]\n    mock_get_obj.return_value = cluster_obj\n    mock_sa_enabled.return_value = True\n\n    policy = mock.Mock()\n    policy.has_role_permissions.return_value = False\n    mock_get_policy.return_value = policy\n\n    step = logs.ServiceAccountLoggingPermission()\n    with op.operator_context(self.operator):\n      step.execute()\n    self.mock_op_add_failed.assert_called()\n\n  # Tests for LoggingWriteApiQuotaExceeded (Lines 332-367)\n  @mock.patch('gcpdiag.queries.monitoring.query')\n  def test_quota_check_fails_when_exceeded(self, mock_query):\n    \"\"\"Given monitoring returns quota exceeded errors, then step fails.\"\"\"\n    self.params[flags.START_TIME] = mock.Mock()\n    self.params[flags.END_TIME] = mock.Mock()\n\n    mock_query.return_value = {\n        'ts1': {\n            'labels': {\n                'metric.limit_name': 'WriteRequestsPerMinutePerProject'\n            }\n        }\n    }\n\n    step = logs.LoggingWriteApiQuotaExceeded()\n    with op.operator_context(self.operator):\n      step.execute()\n    self.mock_op_add_failed.assert_called()\n    del self.params[flags.START_TIME]\n    del self.params[flags.END_TIME]\n\n  # Tests for LogsEnd (Lines 387-392)\n  @mock.patch('gcpdiag.runbook.op.prompt')\n  def test_logs_end_generates_report_on_no(self, mock_prompt):\n    \"\"\"Given user is not satisfied, then generate report.\"\"\"\n    mock_prompt.return_value = op.NO\n    op.interface = self.mock_interface\n    step = logs.LogsEnd()\n    with op.operator_context(self.operator):\n      step.execute()\n    self.mock_interface.rm.generate_report.assert_called()\n    del op.interface\n\n\nclass TestGkeLogsCoverage(unittest.TestCase):\n  \"\"\"Unit tests targeting uncovered lines in logs.py.\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    self.mock_interface = mock.Mock()\n    self.operator = op.Operator(self.mock_interface)\n    self.params = {\n        flags.PROJECT_ID: 'test-project',\n        flags.GKE_CLUSTER_NAME: 'test-cluster',\n        flags.LOCATION: 'us-central1',\n        flags.START_TIME: datetime.datetime.now(),\n        flags.END_TIME: datetime.datetime.now()\n    }\n    self.operator.set_parameters(self.params)\n    self.operator.set_step(mock.MagicMock())\n    self.operator.set_run_id('test_run')\n    self.operator.interface = mock.Mock()\n    self.operator.interface.rm = mock.Mock()\n    self.operator.messages = MockMessage()\n    # Setup standard mocks for gcpdiag operations\n    self.mock_op_get = self.enterContext(mock.patch('gcpdiag.runbook.op.get'))\n    self.mock_op_get.side_effect = lambda key, default=None: self.params.get(\n        key, default)\n    self.mock_op_add_ok = self.enterContext(\n        mock.patch('gcpdiag.runbook.op.add_ok'))\n    self.mock_op_add_failed = self.enterContext(\n        mock.patch('gcpdiag.runbook.op.add_failed'))\n    self.mock_op_add_skipped = self.enterContext(\n        mock.patch('gcpdiag.runbook.op.add_skipped'))\n    self.mock_gke_get_clusters = self.enterContext(\n        mock.patch('gcpdiag.queries.gke.get_clusters'))\n    self.enterContext(mock.patch('gcpdiag.queries.crm.get_project'))\n    self.mock_is_enabled = self.enterContext(\n        mock.patch('gcpdiag.queries.apis.is_enabled'))\n    self.mock_iam_get_project_policy = self.enterContext(\n        mock.patch('gcpdiag.queries.iam.get_project_policy'))\n    self.mock_iam_is_service_account_enabled = self.enterContext(\n        mock.patch('gcpdiag.queries.iam.is_service_account_enabled'))\n    self.mock_monitoring_query = self.enterContext(\n        mock.patch('gcpdiag.queries.monitoring.query'))\n    self.mock_op_prompt = self.enterContext(\n        mock.patch('gcpdiag.runbook.op.prompt'))\n\n  # Covers LogsStart (Lines 83-84, 89-105)\n  def test_logs_start_branch_coverage(self):\n    # Line 83-84: No clusters found\n    self.mock_gke_get_clusters.return_value = {}\n    step = logs.LogsStart()\n    with op.operator_context(self.operator):\n      step.execute()\n    self.mock_op_add_skipped.assert_called()\n\n    # Line 89-105: Specific cluster mismatch\n    cluster = mock.Mock()\n    cluster.__str__ = mock.Mock(\n        return_value='projects/p/locations/other/clusters/other')\n    self.mock_gke_get_clusters.return_value = {'other': cluster}\n    with op.operator_context(self.operator):\n      step.execute()\n    self.mock_op_add_skipped.assert_called()\n\n  # Covers LoggingApiEnabled (Lines 145-146)\n  def test_logging_api_failed(self):\n    self.mock_is_enabled.return_value = False\n    step = logs.LoggingApiEnabled()\n    with op.operator_context(self.operator):\n      step.execute()\n    self.mock_op_add_failed.assert_called()\n\n  # Covers ClusterLevelLoggingEnabled (Lines 155-162, 185)\n  @mock.patch('gcpdiag.lint.gke.util.get_cluster_object')\n  def test_cluster_logging_disabled_logic(self, mock_get_obj):\n    cluster_obj = mock.Mock()\n    cluster_obj.is_autopilot = False\n    cluster_obj.has_logging_enabled.return_value = True\n    cluster_obj.enabled_logging_components.return_value = ['SYSTEM'\n                                                          ]  # WORKLOADS missing\n    cluster_obj.__str__ = mock.Mock(return_value='test-cluster')\n    mock_get_obj.return_value = cluster_obj\n\n    step = logs.ClusterLevelLoggingEnabled()\n    with op.operator_context(self.operator):\n      step.execute()\n    self.mock_op_add_failed.assert_called()\n\n  # Covers NodePoolCloudLoggingAccessScope (Lines 214, 219)\n  @mock.patch('gcpdiag.lint.gke.util.get_cluster_object')\n  def test_nodepool_scope_coverage(self, mock_get_obj):\n    np_ok = mock.Mock()\n    np_ok.config.oauth_scopes = [\n        'https://www.googleapis.com/auth/logging.write'\n    ]\n    np_fail = mock.Mock()\n    np_fail.config.oauth_scopes = []\n    cluster_obj = mock.Mock()\n    cluster_obj.nodepools = [np_ok, np_fail]\n    mock_get_obj.return_value = cluster_obj\n\n    step = logs.NodePoolCloudLoggingAccessScope()\n    with op.operator_context(self.operator):\n      step.execute()\n    self.mock_op_add_ok.assert_called_with(np_ok, reason=mock.ANY)\n    self.mock_op_add_failed.assert_called_with(np_fail,\n                                               reason=mock.ANY,\n                                               remediation=mock.ANY)\n\n  # Covers ServiceAccountLoggingPermission (Lines 260, 301, 314)\n  @mock.patch('gcpdiag.lint.gke.util.get_cluster_object')\n  def test_sa_permission_coverage(self, mock_get_obj):\n    np_disabled = mock.Mock()\n    np_disabled.service_account = 'sa-disabled'\n    np_ok = mock.Mock()\n    np_ok.service_account = 'sa-ok'\n    cluster_obj = mock.Mock()\n    cluster_obj.nodepools = [np_disabled, np_ok]\n    mock_get_obj.return_value = cluster_obj\n    self.mock_iam_is_service_account_enabled.side_effect = lambda sa, ctx: sa == 'sa-ok'\n    policy = mock.Mock()\n    policy.has_role_permissions.return_value = True\n    self.mock_iam_get_project_policy.return_value = policy\n\n    step = logs.ServiceAccountLoggingPermission()\n    with op.operator_context(self.operator):\n      step.execute()\n    self.mock_op_add_failed.assert_called_with(np_disabled,\n                                               reason=mock.ANY,\n                                               remediation=mock.ANY)\n    self.mock_op_add_ok.assert_called_with(np_ok, reason=mock.ANY)\n\n  # Covers LoggingWriteApiQuotaExceeded (Lines 351, 362-365)\n  def test_quota_query_error_handling(self):\n    # Triggers line 351 (monitoring.query) and 362-365 (KeyError handling)\n    self.mock_monitoring_query.return_value = {\n        'bad_series': {\n            'labels': {\n                'metric.limit_name': 'some-limit'\n            }\n        }\n    }  # Missing metric.limit_name\n    step = logs.LoggingWriteApiQuotaExceeded()\n    with op.operator_context(self.operator):\n      step.execute()\n    self.mock_op_add_failed.assert_called()\n\n  def test_logs_start_location_mismatch_skips(self):\n    \"\"\"Lines 108-111 (Logic): Skips if no clusters are found at the specified location.\"\"\"\n    # Mock a cluster at a different location than 'us-central1'\n    cluster = mock.Mock()\n    cluster.__str__ = mock.Mock(\n        return_value='projects/p/locations/europe-west1/clusters/c')\n    self.mock_gke_get_clusters.return_value = {'cluster': cluster}\n\n    step = logs.LogsStart()\n    with op.operator_context(self.operator):\n      step.execute()\n    self.mock_op_add_skipped.assert_called_once()\n    _, kwargs = self.mock_op_add_skipped.call_args\n    self.assertIn('does not exist in project', kwargs['reason'])\n\n  @mock.patch('gcpdiag.lint.gke.util.get_cluster_object')\n  def test_cluster_logging_enabled_ok(self, mock_get_obj):\n    \"\"\"Line 185: Confirms logging is enabled for non-autopilot clusters.\"\"\"\n    cluster = mock.Mock(is_autopilot=False)\n    cluster.has_logging_enabled.return_value = True\n    cluster.enabled_logging_components.return_value = ['WORKLOADS', 'SYSTEM']\n    mock_get_obj.return_value = cluster\n    step = logs.ClusterLevelLoggingEnabled()\n    with op.operator_context(self.operator):\n      step.execute()\n    self.mock_op_add_ok.assert_called()\n\n  @mock.patch('gcpdiag.lint.gke.util.get_cluster_object')\n  def test_node_pool_missing_scope_fails(self, mock_get_obj):\n    \"\"\"Line 214: Fails when a node pool is missing required logging scopes.\"\"\"\n    np = mock.Mock()\n    np.config.oauth_scopes = [\n        'https://www.googleapis.com/auth/compute.readonly'\n    ]\n    cluster = mock.Mock(nodepools=[np])\n    mock_get_obj.return_value = cluster\n    step = logs.NodePoolCloudLoggingAccessScope()\n    with op.operator_context(self.operator):\n      step.execute()\n    self.mock_op_add_failed.assert_called()\n\n  def test_node_pool_access_scope_ok(self):\n    \"\"\"Line 214-219 (Logic): Verifies success when a valid logging scope is present.\"\"\"\n    np = mock.Mock()\n    np.config.oauth_scopes = ['https://www.googleapis.com/auth/logging.write']\n    cluster = mock.Mock(nodepools=[np])\n\n    with mock.patch('gcpdiag.lint.gke.util.get_cluster_object',\n                    return_value=cluster):\n      step = logs.NodePoolCloudLoggingAccessScope()\n      with op.operator_context(self.operator):\n        step.execute()\n    self.mock_op_add_ok.assert_called()\n\n  @mock.patch('gcpdiag.lint.gke.util.get_cluster_object')\n  def test_sa_missing_log_writer_role_fails(self, mock_get_obj):\n    \"\"\"Line 260: Fails when service account lacks roles/logging.logWriter.\"\"\"\n    np = mock.Mock(service_account='test-sa@iam.gserviceaccount.com')\n    cluster = mock.Mock(nodepools=[np])\n    policy = mock.Mock()\n    policy.has_role_permissions.return_value = False\n    self.mock_iam_get_project_policy.return_value = policy\n    self.mock_iam_is_service_account_enabled.return_value = True\n    mock_get_obj.return_value = cluster\n    step = logs.ServiceAccountLoggingPermission()\n    with op.operator_context(self.operator):\n      step.execute()\n    self.mock_op_add_failed.assert_called()\n\n  @mock.patch('gcpdiag.lint.gke.util.get_cluster_object')\n  def test_sa_disabled_fails(self, mock_get_obj):\n    \"\"\"Lines 254-259 (Logic): Fails when the service account is disabled or deleted.\"\"\"\n    np = mock.Mock(service_account='test-sa@iam.gserviceaccount.com')\n    cluster = mock.Mock(nodepools=[np])\n    mock_get_obj.return_value = cluster\n    self.mock_iam_is_service_account_enabled.return_value = False  # SA is disabled\n    step = logs.ServiceAccountLoggingPermission()\n    with op.operator_context(self.operator):\n      step.execute()\n    self.mock_op_add_failed.assert_called_once()\n    _, kwargs = self.mock_op_add_failed.call_args\n    self.assertIn('is disabled or deleted', kwargs['reason'])\n\n  def test_quota_exceeded_found_fails(self):\n    \"\"\"Line 314: Fails when WriteRequestsPerMinutePerProject quota is exceeded.\"\"\"\n    self.mock_monitoring_query.return_value = {\n        'ts1': {\n            'labels': {\n                'metric.limit_name': 'WriteRequestsPerMinutePerProject'\n            }\n        }\n    }\n    step = logs.LoggingWriteApiQuotaExceeded()\n    with op.operator_context(self.operator):\n      step.execute()\n    self.mock_op_add_failed.assert_called()\n\n  def test_quota_exceeded_no_data_ok(self):\n    \"\"\"Lines 301-304 (Logic): Confirms success when no quota-exceeded events are returned.\"\"\"\n    self.mock_monitoring_query.return_value = {}  # Empty results\n    step = logs.LoggingWriteApiQuotaExceeded()\n    with op.operator_context(self.operator):\n      step.execute()\n    self.mock_op_add_ok.assert_called()\n\n  def test_logs_end_triggers_report_on_no(self):\n    \"\"\"Line 351: Generates a report if user is not satisfied with the RCA.\"\"\"\n    self.mock_op_prompt.return_value = op.NO\n    op.interface = self.operator.interface\n    step = logs.LogsEnd()\n    with op.operator_context(self.operator):\n      step.execute()\n    self.operator.interface.rm.generate_report.assert_called()\n    del op.interface\n\n  def test_logs_end_satisfied_concludes(self):\n    \"\"\"Line 351 (Logic): Concludes normally when the user is satisfied.\"\"\"\n    self.mock_op_prompt.return_value = op.YES\n    step = logs.LogsEnd()\n    with op.operator_context(self.operator):\n      step.execute()\n    # verify generate_report was NOT called\n    self.operator.interface.rm.generate_report.assert_not_called()\n"
  },
  {
    "path": "gcpdiag/runbook/gke/monitoring_configuration.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Module containing investigating and resolving GKE Monitoring related issues\"\"\"\n\nfrom gcpdiag import runbook\nfrom gcpdiag.lint.gke import util\nfrom gcpdiag.queries import crm, gke\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.gke import flags\nfrom gcpdiag.runbook.gke import generalized_steps as gke_gs\n\n\nclass MonitoringConfiguration(runbook.DiagnosticTree):\n  \"\"\"Verifies that GKE Monitoring and its components are correctly configured and operational.\n\n  This runbook guides through a systematic investigation of potential\n  causes when monitoring from the Google Kubernetes Engine (GKE) cluster are missing\n  or incomplete. The focus is on core configuration settings that are essential\n  for proper monitoring functionality.\n\n  The following areas are examined:\n\n  - **Project-Level Monitoring:** Ensures that the Google Cloud project housing\n  the GKE cluster has the Cloud Monitoring API enabled.\n\n  - **Cluster-Level Monitoring:** Verifies that monitoring is explicitly enabled\n  within the GKE cluster's configuration.\n\n  - **Node Pool Permissions:** Confirms that the nodes within the cluster's\n  node pools have the 'Cloud Monitoring Write' scope enabled, allowing them to send\n  metrics data.\n\n  - **Service Account Permissions:** Validates that the service account used\n  by the node pools possesses the necessary IAM permissions to interact with\n  Cloud Monitoring. Specifically, the \"roles/monitoring.metricWriter\" role is typically\n  required.\n\n  \"\"\"\n\n  parameters = {\n      flags.PROJECT_ID: {\n          'type': str,\n          'help': 'The ID of the project hosting the GKE Cluster',\n          'required': True\n      },\n      flags.GKE_CLUSTER_NAME: {\n          'type':\n              str,\n          'help':\n              'The name of the GKE cluster, to limit search only for this cluster',\n          'required':\n              True\n      },\n      flags.LOCATION: {\n          'type': str,\n          'help': 'The zone or region of the GKE cluster',\n          'required': True\n      }\n  }\n\n  def build_tree(self):\n    \"\"\"Constructs the diagnostic tree with appropriate steps.\"\"\"\n    # Instantiate the step classes\n    start = MonitoringConfigurationStart()\n    project_monitoring_configuration_check = MonitoringApiConfigurationEnabled()\n    cluster_monitoring_configuration_check = ClusterLevelMonitoringConfigurationEnabled(\n    )\n    node_pool_access_scope_configuration_check = NodePoolCloudMonitoringAccessScopeConfiguration(\n    )\n    service_account_permissions_check = ServiceAccountMonitoringPermissionConfiguration(\n    )\n\n    # add them to the tree\n    self.add_start(start)\n    self.add_step(parent=start, child=project_monitoring_configuration_check)\n    self.add_step(parent=project_monitoring_configuration_check,\n                  child=cluster_monitoring_configuration_check)\n    self.add_step(parent=cluster_monitoring_configuration_check,\n                  child=node_pool_access_scope_configuration_check)\n    self.add_step(parent=node_pool_access_scope_configuration_check,\n                  child=service_account_permissions_check)\n    self.add_end(step=MonitoringConfigurationEnd())\n\n\nclass MonitoringConfigurationStart(runbook.StartStep):\n  \"\"\"Initiates diagnostics for GKE Clusters.\n\n  - **Initial Checks:**\n    - Verifies if Monitoring API is enabled for the project.\n    - Validates that there are GKE clusters in the project.\n    - (Optional) If a cluster name is provided, checks if that cluster exists in the project.\n    - (Optional) If a location is provided, verifies there are clusters in that location.\n    - (Optional) If both a location and a name are provided, verifies that the cluster\n    exists at that location.\n  \"\"\"\n\n  def execute(self):\n    \"\"\"Checks the provided parameters.\"\"\"\n    project = op.get(flags.PROJECT_ID)\n    project_path = crm.get_project(project)\n\n    # Checks if there are clusters in the project\n    clusters = gke.get_clusters(op.get_context())\n    if not clusters:\n      op.add_skipped(\n          project_path,\n          reason=('No GKE clusters found in project {}').format(project))\n      return\n\n    # The following checks adjust based on the input provided:\n    # - Both cluster name and location: Verify if that specific cluster exists at that location.\n\n    cluster_name = op.get(flags.GKE_CLUSTER_NAME)\n    cluster_location = op.get(flags.LOCATION)\n\n    # Initialize flags to track findings\n    found_cluster = False\n    found_cluster_with_location = False\n    found_clusters_at_location = False\n\n    if cluster_name or cluster_location:\n      for cluster in clusters.values():\n        name_match = cluster_name and (cluster_name == str(cluster).rsplit(\n            '/', 1)[-1])\n        location_match = cluster_location and (cluster_location\n                                               == str(cluster).split('/')[-3])\n\n        if name_match:\n          found_cluster = True\n        if location_match:\n          found_clusters_at_location = True\n        if name_match and location_match:\n          found_cluster_with_location = True\n          break  # After finding the exact required, no need to search further\n\n    # Checking the matching conditions for the required cluster in Order\n    if not found_cluster_with_location and cluster_name and cluster_location:\n      op.add_skipped(\n          project_path,\n          reason=('Cluster with the name {} in {} does not exist in project {}'\n                 ).format(cluster_name, cluster_location, project))\n    elif not found_cluster and cluster_name:\n      op.add_skipped(\n          project_path,\n          reason=(\n              'Cluster with the name {} does not exist in project {}').format(\n                  cluster_name, project))\n    elif not found_clusters_at_location and cluster_location:\n      op.add_skipped(\n          project_path,\n          reason=('No clusters found at location {} in project {}').format(\n              cluster_location, project))\n\n\nclass MonitoringApiConfigurationEnabled(gke_gs.ApiEnabled):\n  \"\"\"Verifies if the Cloud Monitoring API is enabled for the project.\n\n  This initial step ensures that the fundamental infrastructure for\n  monitoring within the project is operational. If the Cloud Monitoring API\n  is disabled, monitoring from the GKE cluster won't be collected or stored\n  by Google Cloud.\n  \"\"\"\n\n  api_name = 'monitoring'\n  template = 'monitoring_configuration::project_monitoring_configuration_check'\n\n\nclass ClusterLevelMonitoringConfigurationEnabled(runbook.Step):\n  \"\"\"Verifies that monitoring is enabled at the GKE cluster level.\n\n  Confirms that the GKE cluster configuration explicitly enables\n  monitoring. Even if the project has the Cloud Monitoring API enabled\n  and other settings are correct, monitoring won't be collected if\n  cluster-level monitoring is disabled .\n  \"\"\"\n\n  template = 'monitoring_configuration::cluster_monitoring_configuration_check'\n\n  def execute(self):\n    \"\"\"Checks if GKE level Monitoring is disabled.\"\"\"\n    clusters = gke.get_clusters(op.get_context())\n    partial_path = f'{op.get(flags.LOCATION)}/clusters/{op.get(flags.GKE_CLUSTER_NAME)}'\n    cluster_obj = util.get_cluster_object(clusters, partial_path)\n\n    # Available GKE cluster metrics as of 28 April 2025\n    gke_monitoring_components = {\n        'CADVISOR', 'DAEMONSET', 'DEPLOYMENT', 'HPA', 'KUBELET', 'POD',\n        'STATEFULSET', 'STORAGE', 'SYSTEM_COMPONENTS'\n    }\n    #'APISERVER', 'CONTROLLER_MANAGER, 'SCHEDULER' => ControlPlane components\n    # monitoring are not enabled by default due to which skipping its check\n\n    if cluster_obj.is_autopilot:\n      op.add_ok(\n          cluster_obj,\n          reason=\n          'GKE Autopilot clusters have Cloud Monitoring enabled by default.')\n      return\n\n    disabled = []\n\n    if cluster_obj.has_monitoring_enabled():\n\n      # Enabled metrics on the provided cluster\n      cluster_enabled_monitoring_metrics = cluster_obj.enabled_monitoring_components(\n      )\n\n      # Check if the cluster has GPU based Nodepool\n      # Find any GPU node pools by taint\n      for np in cluster_obj.nodepools:  #Iterate our all available NodePool\n        # pylint: disable=protected-access\n        config_data = np._resource_data.get('config', {})\n        taints = config_data.get('taints', [])\n\n        for t in taints:  #Iterate our the taints on the Nodepool\n          if (t.get('key') == 'nvidia.com/gpu' and\n              t.get('value') == 'present' and t.get('effect') == 'NO_SCHEDULE'):\n\n            gke_monitoring_components.add('DCGM')\n\n            break  #if found first occurrence then break\n\n      # Check missing metrics\n      not_enabled_cluster_metrics = gke_monitoring_components - set(\n          cluster_enabled_monitoring_metrics)\n\n      if not_enabled_cluster_metrics:\n        not_enabled_cluster_metrics_string = ', '.join(\n            sorted(not_enabled_cluster_metrics))\n        disabled.append(\n            f'Missing metrics: {not_enabled_cluster_metrics_string}')\n    else:\n      disabled.append('Monitoring entirely disabled')\n\n    if not disabled:\n      op.add_ok(\n          cluster_obj,\n          reason=\n          f'GKE level monitoring is fully enabled for the cluster {cluster_obj}.'\n      )\n    else:\n      disabled_components_metrics = ', '.join(disabled)\n      op.add_failed(\n          cluster_obj,\n          reason=\n          f'GKE level monitoring is not fully enabled for the cluster {cluster_obj}.',\n          remediation=(\n              f'Issues detected:\\n    {disabled_components_metrics}.\\n'\n              f'Please enable missing components or full GKE monitoring.'))\n\n\nclass NodePoolCloudMonitoringAccessScopeConfiguration(gke_gs.NodePoolScope):\n  \"\"\"Verifies that GKE node pools have the required Cloud Monitoring access scopes.\n\n  Confirms that the nodes within the GKE cluster's node pools have the necessary\n  scopes to write metrics data to Cloud Monitoring.  These scopes include\n  'https://www.googleapis.com/auth/monitoring' and potentially others,\n  such as 'https://www.googleapis.com/auth/cloud-platform' and\n  'https://www.googleapis.com/auth/monitoring.write', depending on the configuration.\n  \"\"\"\n\n  template = 'monitoring_configuration::node_pool_access_scope_configuration_check'\n  required_scopes = [\n      'https://www.googleapis.com/auth/monitoring',\n      'https://www.googleapis.com/auth/monitoring.write',\n      'https://www.googleapis.com/auth/cloud-platform'\n  ]\n  service_name = 'Monitoring'\n\n\nclass ServiceAccountMonitoringPermissionConfiguration(\n    gke_gs.ServiceAccountPermission):\n  \"\"\"Verifies that service accounts in GKE node pools have monitoring permissions.\n\n  Checks that the service accounts used by nodes in the GKE cluster\n  have the essential \"roles/monitoring.metricWriter\" IAM permission. This\n  permission is required to send metric data to Google Cloud Monitoring.\n  \"\"\"\n\n  template = 'monitoring_configuration::service_account_permissions_configuration_check'\n  required_roles = [\n      'roles/monitoring.metricWriter',\n      'roles/stackdriver.resourceMetadata.writer'\n  ]\n  service_name = 'monitoring'\n\n\nclass MonitoringConfigurationEnd(runbook.EndStep):\n  \"\"\"Finalizes diagnostics for GKE Monitoring.\n\n  Prompts the user for satisfaction with the Root Cause Analysis (RCA)\n  and takes appropriate actions based on their response:\n\n  * **Confirmation:** Concludes the runbook execution.\n  * **Further Action:** Triggers additional steps, such as report generation, if necessary.\n  \"\"\"\n\n  def execute(self):\n    \"\"\"Finalizes `GKE Monitoring` diagnostics.\"\"\"\n    response = op.prompt(\n        kind=op.CONFIRMATION,\n        message='Are you satisfied with the `GKE Monitoring` RCA performed?')\n    if response == op.NO:\n      op.info(message=op.END_MESSAGE)\n"
  },
  {
    "path": "gcpdiag/runbook/gke/monitoring_configuration_test.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test class for gke/GkeMonitoring.\"\"\"\n\nimport unittest\nfrom unittest import mock\n\nfrom gcpdiag import config\nfrom gcpdiag.runbook import gke, op, snapshot_test_base\nfrom gcpdiag.runbook.gke import flags, monitoring_configuration\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = gke\n  runbook_name = 'gke/monitoring-configuration'\n  project_id = 'mytestproject-371511'\n  config.init({'auto': True, 'interface': 'cli'}, project_id)\n\n  rule_parameters = [{\n      'project_id': 'mytestproject-371511',\n      'gke_cluster_name': 'cluster-2',\n      'location': 'us-central1-a',\n  }]\n\n\nclass MockCluster:\n  \"\"\"Mock GKE cluster for testing.\"\"\"\n\n  def __init__(\n      self,\n      name,\n      location,\n      is_autopilot=False,\n      monitoring_enabled=True,\n      metrics=None,\n  ):\n    self.name = name\n    self.location = location\n    self.is_autopilot = is_autopilot\n    self._monitoring_enabled = monitoring_enabled\n    self._metrics = metrics or []\n    self.nodepools = []\n    self.full_path = f'projects/p/locations/{location}/clusters/{name}'\n\n  def has_monitoring_enabled(self):\n    return self._monitoring_enabled\n\n  def enabled_monitoring_components(self):\n    return self._metrics\n\n  def __str__(self):\n    return self.full_path\n\n\nclass MockNodePool:\n  \"\"\"Mock GKE node pool for testing.\"\"\"\n\n  def __init__(self, taints=None):\n    self._resource_data = {'config': {'taints': taints or []}}\n\n\nclass TestMonitoringConfiguration(unittest.TestCase):\n  \"\"\"Test class for monitoring_configuration runbook.\"\"\"\n\n  @mock.patch('gcpdiag.runbook.op.get')\n  @mock.patch('gcpdiag.queries.gke.get_clusters')\n  @mock.patch('gcpdiag.queries.crm.get_project')\n  @mock.patch('gcpdiag.runbook.op.add_skipped')\n  def test_start_step_no_clusters(self, mock_skipped, mock_crm, mock_gke,\n                                  mock_get):\n    \"\"\"Test behavior when no clusters are found in the project.\"\"\"\n    del mock_crm, mock_get  # unused\n    mock_gke.return_value = {}\n    step = monitoring_configuration.MonitoringConfigurationStart()\n\n    with op.operator_context(mock.Mock(parameters={'project_id': 'proj-1'})):\n      step.execute()\n\n    mock_skipped.assert_called_once()\n    self.assertIn('No GKE clusters found', mock_skipped.call_args[1]['reason'])\n\n  @mock.patch('gcpdiag.runbook.op.get')\n  @mock.patch('gcpdiag.queries.gke.get_clusters')\n  @mock.patch('gcpdiag.queries.crm.get_project')\n  @mock.patch('gcpdiag.runbook.op.add_skipped')\n  def test_start_step_cluster_not_found_with_name_and_location(\n      self, mock_skipped, mock_crm, mock_gke, mock_get):\n    \"\"\"Test behavior when a specific cluster name/location is provided but doesn't exist.\"\"\"\n    del mock_crm  # unused\n    mock_get.side_effect = {\n        flags.PROJECT_ID: 'p1',\n        flags.GKE_CLUSTER_NAME: 'missing-cluster',\n        flags.LOCATION: 'us-central1',\n    }.get\n    mock_gke.return_value = {'c1': MockCluster('other', 'us-east1')}\n    step = monitoring_configuration.MonitoringConfigurationStart()\n\n    with op.operator_context(\n        mock.Mock(\n            parameters={\n                'project_id': 'p1',\n                'gke_cluster_name': 'missing-cluster',\n                'location': 'us-central1'\n            })):\n      step.execute()\n\n    mock_skipped.assert_called_once()\n    self.assertIn('does not exist', mock_skipped.call_args[1]['reason'])\n\n  @mock.patch('gcpdiag.runbook.op.get')\n  @mock.patch('gcpdiag.queries.gke.get_clusters')\n  @mock.patch('gcpdiag.lint.gke.util.get_cluster_object')\n  @mock.patch('gcpdiag.runbook.op.add_failed')\n  def test_cluster_monitoring_entirely_disabled(self, mock_failed, mock_util,\n                                                mock_gke, mock_get):\n    \"\"\"Test failure when monitoring is completely disabled at the cluster level.\"\"\"\n    del mock_gke, mock_get  # unused\n    cluster = MockCluster('c1', 'loc1', monitoring_enabled=False)\n    mock_util.return_value = cluster\n    step = monitoring_configuration.ClusterLevelMonitoringConfigurationEnabled()\n\n    with op.operator_context(mock.Mock(parameters={'project_id': 'p'})):\n      step.execute()\n\n    mock_failed.assert_called_once()\n    self.assertIn('Monitoring entirely disabled',\n                  mock_failed.call_args[1]['remediation'])\n\n  @mock.patch('gcpdiag.runbook.op.get')\n  @mock.patch('gcpdiag.queries.gke.get_clusters')\n  @mock.patch('gcpdiag.lint.gke.util.get_cluster_object')\n  @mock.patch('gcpdiag.runbook.op.add_failed')\n  def test_cluster_monitoring_missing_gpu_metrics(self, mock_failed, mock_util,\n                                                  mock_gke, mock_get):\n    \"\"\"Test failure when DCGM metrics are missing for a cluster with GPU taints.\"\"\"\n    del mock_gke, mock_get  # unused\n    cluster = MockCluster('gpu-c', 'loc1', metrics=['SYSTEM_COMPONENTS'])\n    gpu_taint = {\n        'key': 'nvidia.com/gpu',\n        'value': 'present',\n        'effect': 'NO_SCHEDULE'\n    }\n    cluster.nodepools = [MockNodePool(taints=[gpu_taint])]\n    mock_util.return_value = cluster\n    step = monitoring_configuration.ClusterLevelMonitoringConfigurationEnabled()\n\n    with op.operator_context(mock.Mock(parameters={'project_id': 'p'})):\n      step.execute()\n\n    mock_failed.assert_called_once()\n    self.assertIn('DCGM', mock_failed.call_args[1]['remediation'])\n\n  @mock.patch('gcpdiag.runbook.op.get')\n  @mock.patch('gcpdiag.queries.gke.get_clusters')\n  @mock.patch('gcpdiag.lint.gke.util.get_cluster_object')\n  @mock.patch('gcpdiag.runbook.op.add_ok')\n  def test_cluster_monitoring_autopilot_skipped(self, mock_ok, mock_util,\n                                                mock_gke, mock_get):\n    \"\"\"Test that Autopilot clusters are correctly identified as fully enabled (logic skip).\"\"\"\n    del mock_gke, mock_get  # unused\n    cluster = MockCluster('auto-c', 'loc1', is_autopilot=True)\n    mock_util.return_value = cluster\n    step = monitoring_configuration.ClusterLevelMonitoringConfigurationEnabled()\n\n    with op.operator_context(mock.Mock(parameters={'project_id': 'p'})):\n      step.execute()\n\n    mock_ok.assert_called_once()\n\n  @mock.patch('gcpdiag.runbook.op.prompt')\n  @mock.patch('gcpdiag.runbook.op.info')\n  def test_end_step_user_not_satisfied(self, mock_info, mock_prompt):\n    \"\"\"Test behavior when the user indicates they are not satisfied with the RCA.\"\"\"\n\n    mock_prompt.return_value = op.NO\n    step = monitoring_configuration.MonitoringConfigurationEnd()\n\n    step.execute()\n\n    mock_info.assert_called_with(message=op.END_MESSAGE)\n\n\nclass TestMonitoringConfigurationCoverage(unittest.TestCase):\n  \"\"\"Unit tests to achieve 100% coverage for monitoring_configuration.py.\"\"\"\n\n  @mock.patch('gcpdiag.queries.crm.get_project')\n  @mock.patch('gcpdiag.queries.gke.get_clusters')\n  @mock.patch('gcpdiag.runbook.op.add_skipped')\n  @mock.patch('gcpdiag.runbook.op.get')\n  def test_start_execute_no_clusters(self, mock_op_get, mock_add_skipped,\n                                     mock_get_clusters, mock_get_project):\n    \"\"\"Covers lines 75-81: Behavior when no clusters are found in the project.\"\"\"\n    mock_op_get.side_effect = {flags.PROJECT_ID: 'test-project'}.get\n    mock_get_clusters.return_value = {}\n    mock_get_project.return_value = 'projects/test-project'\n    step = monitoring_configuration.MonitoringConfigurationStart()\n\n    with op.operator_context(\n        mock.Mock(parameters={'project_id': 'test-project'})):\n      step.execute()\n\n    mock_add_skipped.assert_called_once()\n    self.assertIn('No GKE clusters found',\n                  mock_add_skipped.call_args[1]['reason'])\n\n  @mock.patch('gcpdiag.queries.crm.get_project')\n  @mock.patch('gcpdiag.queries.gke.get_clusters')\n  @mock.patch('gcpdiag.runbook.op.get')\n  def test_start_execute_with_parameters(self, mock_op_get, mock_get_clusters,\n                                         mock_get_project):\n    \"\"\"Covers lines 87-93: Parameter retrieval and flag initialization.\"\"\"\n    # Arrange\n    del mock_get_project  # unused\n    mock_op_get.side_effect = {\n        flags.PROJECT_ID: 'test-project',\n        flags.GKE_CLUSTER_NAME: 'cluster-1',\n        flags.LOCATION: 'us-central1',\n    }.get\n    mock_get_clusters.return_value = {\n        'c1': MockCluster('cluster-1', 'us-central1')\n    }\n    step = monitoring_configuration.MonitoringConfigurationStart()\n\n    with op.operator_context(\n        mock.Mock(\n            parameters={\n                'project_id': 'test-project',\n                'gke_cluster_name': 'cluster-1',\n                'location': 'us-central1'\n            })):\n      step.execute()\n\n  @mock.patch('gcpdiag.queries.gke.get_clusters')\n  @mock.patch('gcpdiag.runbook.op.get')\n  @mock.patch('gcpdiag.lint.gke.util.get_cluster_object')\n  @mock.patch('gcpdiag.runbook.op.add_ok')\n  def test_cluster_level_monitoring_standard_path(self, mock_add_ok,\n                                                  mock_get_cluster_obj,\n                                                  mock_op_get,\n                                                  mock_get_clusters):\n    \"\"\"Covers lines 140-160: Step execution for a standard GKE cluster.\"\"\"\n    del mock_get_clusters  # unused\n    mock_op_get.side_effect = {\n        flags.LOCATION: 'us-central1',\n        flags.GKE_CLUSTER_NAME: 'cluster-1'\n    }.get\n\n    metrics = [\n        'CADVISOR',\n        'DAEMONSET',\n        'DEPLOYMENT',\n        'HPA',\n        'KUBELET',\n        'POD',\n        'STATEFULSET',\n        'STORAGE',\n        'SYSTEM_COMPONENTS',\n    ]\n    cluster = MockCluster('cluster-1',\n                          'us-central1',\n                          is_autopilot=False,\n                          metrics=metrics)\n    mock_get_cluster_obj.return_value = cluster\n    step = monitoring_configuration.ClusterLevelMonitoringConfigurationEnabled()\n\n    with op.operator_context(\n        mock.Mock(\n            parameters={\n                'project_id': 'p',\n                'location': 'us-central1',\n                'gke_cluster_name': 'cluster-1'\n            })):\n      step.execute()\n\n    mock_add_ok.assert_called_once()\n\n  @mock.patch('gcpdiag.runbook.op.prompt')\n  @mock.patch('gcpdiag.runbook.op.info')\n  def test_end_execute_satisfied(self, mock_op_info, mock_op_prompt):\n    \"\"\"Covers line 242: Execution of the end step.\"\"\"\n    del mock_op_info  # unused\n\n    mock_op_prompt.return_value = op.YES\n    step = monitoring_configuration.MonitoringConfigurationEnd()\n\n    step.execute()\n\n    mock_op_prompt.assert_called_once()\n"
  },
  {
    "path": "gcpdiag/runbook/gke/node_auto_repair.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GKE Node Auto Repair runbook.\"\"\"\n\nfrom gcpdiag import runbook\nfrom gcpdiag.queries import crm, gke, logs\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.gke import flags\n\n\ndef local_realtime_query(filter_str):\n  result = logs.realtime_query(project_id=op.get(flags.PROJECT_ID),\n                               start_time=op.get(flags.START_TIME),\n                               end_time=op.get(flags.END_TIME),\n                               filter_str=filter_str)\n  return result\n\n\ndef unallocatable_gpu_tpu(node, location=None, name=None, gpu=False, tpu=False):\n  # the logs for repairs caused by unallocatable TPU or GPU are very similar, so it's worth having\n  # one function for both. If a node has unallocatable TPU or GPU\n  # - it will be marked as NodeNotSchedulable\n  # and there will be log entries with\"\n  # - '\"Updated allocatable\" device=\"google.com/tpu\"' for unallocatable TPU\n  # - '\"Updated allocatable\" device=\"nvidia.com/gpu\"' for unallocatable GPU\n  # we check the logs for the presence of both events and if both are present, then unallocatable\n  # TPU/GPU is the reason for auto-repair.\n  filter_str = [\n      'log_id(\"events\")', f'resource.labels.node_name=\"{node}\"',\n      'jsonPayload.reason=\"NodeNotSchedulable\"'\n  ]\n  if location:\n    filter_str.append(f'resource.labels.location=\"{location}\"')\n  if name:\n    filter_str.append(f'resource.labels.cluster_name=\"{name}\"')\n\n  filter_str = '\\n'.join(filter_str)\n\n  log_entries_event = local_realtime_query(filter_str)\n\n  # If there are no \"NodeNotSchedulable\" events, no need to check for other logs.\n  if not log_entries_event:\n    return False\n\n  filter_str = [\n      'log_id(\"kubelet\")', f'resource.labels.node_name=\"{node}\"',\n      'jsonPayload.MESSAGE:\"Updated allocatable\"'\n  ]\n  if tpu:\n    filter_str.append('jsonPayload.MESSAGE:\"google.com/tpu\"')\n  if gpu:\n    filter_str.append('jsonPayload.MESSAGE:\"nvidia.com/gpu\"')\n  if location:\n    filter_str.append(f'resource.labels.location=\"{location}\"')\n  if name:\n    filter_str.append(f'resource.labels.cluster_name=\"{name}\"')\n\n  filter_str = '\\n'.join(filter_str)\n\n  log_entries_kubelet = local_realtime_query(filter_str)\n\n  return log_entries_event and log_entries_kubelet\n\n\ndef check_node_unhealthy(node,\n                         location=None,\n                         name=None,\n                         unhealthy_status='NodeNotReady'):\n  \"\"\"Checks if a node has been in the specified unhealthy status.\n\n  Args:\n    node: The name of the GKE node to check.\n    location: The zone of the node. Optional.\n    name: The name of the GKE cluster. Optional.\n    unhealthy_status: The unhealthy status to check for. Defaults to 'NodeNotReady'.\n                      It can be 'NodeNotReady' or 'NodeHasDiskPressure'.\n\n  Returns:\n    True if the node has been in the specified unhealthy status, False otherwise.\n  \"\"\"\n\n  filter_str = [\n      'log_id(\"events\")',\n      f'resource.labels.node_name=\"{node}\"',\n      f'jsonPayload.message=\"Node {node} status is now: {unhealthy_status}\"',\n  ]\n  if location:\n    filter_str.append(f'resource.labels.location=\"{location}\"')\n  if name:\n    filter_str.append(f'resource.labels.cluster_name=\"{name}\"')\n\n  filter_str = '\\n'.join(filter_str)\n\n  log_entries = local_realtime_query(filter_str)\n\n  # Check if there are any log entries indicating the node was in the specified unhealthy status\n  if log_entries:\n    return True\n\n  return False\n\n\nclass NodeAutoRepair(runbook.DiagnosticTree):\n  \"\"\"Provides the reason why a Node was auto-repaired\n\n  This runbook checks if:\n  - Node auto-repair is enabled on the cluster\n  - Nodes was repaired because it was in NotReady status for more than 10 minutes\n  - Nodes was repaired because it had disk pressure\n  - Nodes was repaired because of unallocatable GPUs\n  - Nodes was repaired because of unallocatable TPUs\n  \"\"\"\n  parameters = {\n      flags.PROJECT_ID: {\n          'type': str,\n          'help': 'The ID of the project hosting the GKE Cluster',\n          'required': True\n      },\n      flags.NAME: {\n          'type':\n              str,\n          'help':\n              'The name of the GKE cluster, to limit search only for this cluster',\n          'required':\n              False,\n          'deprecated':\n              True,\n          'new_parameter':\n              'gke_cluster_name'\n      },\n      flags.GKE_CLUSTER_NAME: {\n          'type':\n              str,\n          'help':\n              'The name of the GKE cluster, to limit search only for this cluster',\n          'required':\n              False\n      },\n      flags.NODE: {\n          'type': str,\n          'help': 'The node name with issues.',\n          'required': True\n      },\n      flags.LOCATION: {\n          'type': str,\n          'help': 'The zone or region of the GKE cluster',\n          'required': False\n      }\n  }\n\n  def legacy_parameter_handler(self, parameters):\n    if flags.NAME in parameters:\n      parameters[flags.GKE_CLUSTER_NAME] = parameters.pop(flags.NAME)\n\n  def build_tree(self):\n    \"\"\"Construct the diagnostic tree with appropriate steps.\"\"\"\n    start = NodeAutoRepairStart()\n    node_notready_check = NodeNotReady()\n    node_disk_full_check = NodeDiskFull()\n    unallocatable_gpu_check = UnallocatableGpu()\n    unallocatable_tpu_check = UnallocatableTpu()\n\n    self.add_start(start)\n    self.add_step(parent=start, child=node_notready_check)\n    self.add_step(parent=node_notready_check, child=node_disk_full_check)\n    self.add_step(parent=node_disk_full_check, child=unallocatable_gpu_check)\n    self.add_step(parent=unallocatable_gpu_check, child=unallocatable_tpu_check)\n    self.add_end(step=NodeAutoRepairEnd())\n\n\nclass NodeAutoRepairStart(runbook.StartStep):\n  \"\"\"Check inputs and verify if there actually was a repair event\"\"\"\n\n  def execute(self):\n    \"\"\"Check inputs and verify if there was a repair event\"\"\"\n    project = op.get(flags.PROJECT_ID)\n    location = op.get(flags.LOCATION)\n    node = op.get(flags.NODE)\n    name = op.get(flags.GKE_CLUSTER_NAME)\n    project_path = crm.get_project(project)\n    start_time = op.get(flags.START_TIME)\n    end_time = op.get(flags.END_TIME)\n\n    # check if there are clusters in the project\n    if name:\n      clusters = gke.get_clusters(op.get_context())\n      if not clusters:\n        op.add_skipped(\n            project_path,\n            reason=f'No {name} GKE cluster found in project {project}')\n        return\n    else:\n      clusters = gke.get_clusters(op.get_context())\n      if not clusters:\n        op.add_skipped(project_path,\n                       reason=f'No GKE clusters found in project {project}')\n        return\n\n    # check if there were any repair operations for provided node\n    filter_str = [\n        'log_id(\"cloudaudit.googleapis.com/activity\")',\n        'protoPayload.methodName=\"io.k8s.core.v1.nodes.update\"',\n        'protoPayload.request.metadata.annotations.\"gke-current-operation\":\"AUTO_REPAIR_NODES\"',\n        f'protoPayload.resourceName=\"core/v1/nodes/{node}\"'\n    ]\n    if location:\n      filter_str.append(f'resource.labels.location=\"{location}\"')\n    if name:\n      filter_str.append(f'resource.labels.cluster_name=\"{name}\"')\n\n    filter_str = '\\n'.join(filter_str)\n\n    log_entries = local_realtime_query(filter_str)\n\n    if not log_entries:\n      reason = f'There are no node repair operations for node {node}'\n      if name:\n        reason += f' in cluster {name}'\n      if location:\n        reason += f' in location {location}'\n      reason += f' in the provided time range {start_time} - {end_time}.'\n      op.add_skipped(project_path, reason=reason)\n      return\n\n\nclass NodeNotReady(runbook.Step):\n  \"\"\"Checks if nodes have been in NotReady status for an extended period (e.g., 10 minutes).\"\"\"\n\n  template = 'nodeautorepair::node_notready'\n\n  def execute(self):\n    \"\"\"Checking if there is the node is in NotReady status.\"\"\"\n    project = op.get(flags.PROJECT_ID)\n    location = op.get(flags.LOCATION)\n    node = op.get(flags.NODE)\n    name = op.get(flags.GKE_CLUSTER_NAME)\n    project_path = crm.get_project(project)\n\n    if check_node_unhealthy(node,\n                            location,\n                            name,\n                            unhealthy_status='NodeNotReady'):\n      op.add_failed(project_path,\n                    reason=op.prep_msg(op.FAILURE_REASON, node=node),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n    else:\n      op.add_ok(project_path, reason=op.prep_msg(op.SUCCESS_REASON, node=node))\n\n\nclass NodeDiskFull(runbook.Step):\n  \"\"\"Checks if node disks are full.\"\"\"\n\n  template = 'nodeautorepair::node_disk_full'\n\n  def execute(self):\n    \"\"\"Checking if there is the node is in NodeHasDiskPressure status.\"\"\"\n    project = op.get(flags.PROJECT_ID)\n    location = op.get(flags.LOCATION)\n    node = op.get(flags.NODE)\n    name = op.get(flags.GKE_CLUSTER_NAME)\n    project_path = crm.get_project(project)\n\n    if check_node_unhealthy(node,\n                            location,\n                            name,\n                            unhealthy_status='NodeHasDiskPressure'):\n      op.add_failed(project_path,\n                    reason=op.prep_msg(op.FAILURE_REASON, node=node),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n    else:\n      op.add_ok(project_path, reason=op.prep_msg(op.SUCCESS_REASON, node=node))\n\n\nclass UnallocatableGpu(runbook.Step):\n  \"\"\"Checks GPU allocation\"\"\"\n  template = 'nodeautorepair::unallocatable_gpu'\n\n  def execute(self):\n    \"\"\"Verify whether the node was auto-repaired because of Unallocatable GPUs.\"\"\"\n\n    project = op.get(flags.PROJECT_ID)\n    location = op.get(flags.LOCATION)\n    node = op.get(flags.NODE)\n    name = op.get(flags.GKE_CLUSTER_NAME)\n    project_path = crm.get_project(project)\n\n    if unallocatable_gpu_tpu(node, location, name, tpu=False, gpu=True):\n      op.add_failed(project_path,\n                    reason=op.prep_msg(op.FAILURE_REASON, node=node),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n    else:\n      op.add_ok(project_path, reason=op.prep_msg(op.SUCCESS_REASON, node=node))\n\n\nclass UnallocatableTpu(runbook.Step):\n  \"\"\"Checks TPU allocation\"\"\"\n  template = 'nodeautorepair::unallocatable_tpu'\n\n  def execute(self):\n    \"\"\"Verify whether the node was auto-repaired because of Unallocatable TPUs.\"\"\"\n\n    project = op.get(flags.PROJECT_ID)\n    location = op.get(flags.LOCATION)\n    node = op.get(flags.NODE)\n    name = op.get(flags.GKE_CLUSTER_NAME)\n    project_path = crm.get_project(project)\n\n    if unallocatable_gpu_tpu(node, location, name, tpu=True, gpu=False):\n      op.add_failed(project_path,\n                    reason=op.prep_msg(op.FAILURE_REASON, node=node),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n    else:\n      op.add_ok(project_path, reason=op.prep_msg(op.SUCCESS_REASON, node=node))\n\n\nclass NodeAutoRepairEnd(runbook.EndStep):\n  \"\"\"Finalizes the diagnostics process for `Node AutoRepair`.\n\n  This step prompts the user to confirm satisfaction with the Root Cause Analysis (RCA)\n  performed for `Node AutoRepair`.\n\n  Depending on the user's response, it may conclude the runbook execution or trigger additional\n  steps, such as generating a report of the findings.\n  \"\"\"\n\n  def execute(self):\n    \"\"\"Finalize `Node AutoRepair` diagnostics.\"\"\"\n    response = op.prompt(\n        kind=op.CONFIRMATION,\n        message='Are you satisfied with the `GKE Node AutoRepair` RCA performed?'\n    )\n    if response == op.NO:\n      op.info(message=op.END_MESSAGE)\n"
  },
  {
    "path": "gcpdiag/runbook/gke/node_auto_repair_test.py",
    "content": "#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test class for gke/NodeAutoRepair\"\"\"\n\nimport unittest\nfrom unittest import mock\n\nfrom gcpdiag import config\nfrom gcpdiag.queries import apis_stub\nfrom gcpdiag.runbook import gke, op, snapshot_test_base\nfrom gcpdiag.runbook.gke import flags, node_auto_repair\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = gke\n  runbook_name = 'gke/node-auto-repair'\n  config.init({'auto': True, 'interface': 'cli'})\n\n  rule_parameters = [{\n      'project_id': 'gcpdiag-gke-cluster-autoscaler-rrrr',\n      'gke_cluster_name': 'gcp-cluster',\n      'node': 'gke-gcp-cluster-default-pool-82e0c046-8m8b',\n      'location': 'europe-west10-a'\n  }]\n\n\nclass MockMessage:\n  \"\"\"Mock messages for testing.\"\"\"\n\n  def __init__(self):\n    self.messages = {\n        'nodeautorepair::node_notready': 'Node is not ready',\n        'nodeautorepair::node_disk_full': 'Node disk is full',\n        'nodeautorepair::unallocatable_gpu': 'Unallocatable GPU',\n        'nodeautorepair::unallocatable_tpu': 'Unallocatable TPU',\n    }\n\n  def __getitem__(self, key):\n    return self.messages[key]\n\n\nclass NodeAutoRepairTest(unittest.TestCase):\n  \"\"\"Test NodeAutoRepair runbook steps and functions.\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    self.enterContext(\n        mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub))\n    self.mock_get_user_email = self.enterContext(\n        mock.patch('gcpdiag.queries.apis.get_user_email'))\n    self.mock_is_enabled = self.enterContext(\n        mock.patch('gcpdiag.queries.apis.is_enabled'))\n    self.mock_is_enabled.return_value = True\n    self.mock_get_user_email.return_value = 'test@example.com'\n\n    self.mock_interface = mock.create_autospec(op.InteractionInterface,\n                                               instance=True)\n    self.mock_interface.rm = mock.Mock()\n    self.operator = op.Operator(self.mock_interface)\n    self.operator.run_id = 'test-run'\n    self.operator.messages = MockMessage()\n    self.mock_op_get = self.enterContext(mock.patch('gcpdiag.runbook.op.get'))\n    self.mock_op_add_ok = self.enterContext(\n        mock.patch('gcpdiag.runbook.op.add_ok'))\n    self.mock_op_add_failed = self.enterContext(\n        mock.patch('gcpdiag.runbook.op.add_failed'))\n    self.mock_op_add_skipped = self.enterContext(\n        mock.patch('gcpdiag.runbook.op.add_skipped'))\n    self.mock_op_prompt = self.enterContext(\n        mock.patch('gcpdiag.runbook.op.prompt'))\n    self.mock_op_info = self.enterContext(mock.patch('gcpdiag.runbook.op.info'))\n    self.mock_op_prep_msg = self.enterContext(\n        mock.patch('gcpdiag.runbook.op.prep_msg'))\n    self.mock_crm_get_project = self.enterContext(\n        mock.patch('gcpdiag.queries.crm.get_project'))\n    self.mock_gke_get_clusters = self.enterContext(\n        mock.patch('gcpdiag.queries.gke.get_clusters'))\n\n    self.params = {\n        flags.PROJECT_ID: 'test-project',\n        flags.LOCATION: 'us-central1-a',\n        flags.NODE: 'test-node',\n        flags.GKE_CLUSTER_NAME: 'test-cluster',\n        flags.START_TIME: '2025-01-01T00:00:00Z',\n        flags.END_TIME: '2025-01-01T01:00:00Z',\n    }\n    self.mock_op_get.side_effect = lambda key, default=None: self.params.get(\n        key, default)\n\n    self.mock_project = mock.Mock()\n    self.mock_project.full_path = 'projects/test-project'\n    self.mock_crm_get_project.return_value = self.mock_project\n\n    mock_interface = mock.Mock()\n    operator = op.Operator(mock_interface)\n    operator.messages = MockMessage()\n    operator.set_parameters(self.params)\n    self.enterContext(op.operator_context(operator))\n\n  @mock.patch('gcpdiag.queries.logs.realtime_query')\n  def test_local_realtime_query_calls_logs_query(self, mock_query):\n    node_auto_repair.local_realtime_query('test-filter')\n    mock_query.assert_called_once()\n\n  @mock.patch('gcpdiag.runbook.gke.node_auto_repair.local_realtime_query')\n  def test_unallocatable_gpu_tpu_returns_false_if_no_events(\n      self, mock_local_query):\n    mock_local_query.return_value = []\n    self.assertFalse(node_auto_repair.unallocatable_gpu_tpu('node'))\n\n  @mock.patch('gcpdiag.runbook.gke.node_auto_repair.local_realtime_query')\n  def test_unallocatable_gpu_tpu_returns_true_if_gpu_found(\n      self, mock_local_query):\n    mock_local_query.side_effect = [['event'], ['kubelet']]\n    self.assertTrue(node_auto_repair.unallocatable_gpu_tpu('node', gpu=True))\n\n  @mock.patch('gcpdiag.runbook.gke.node_auto_repair.local_realtime_query')\n  def test_unallocatable_gpu_tpu_returns_true_if_tpu_found(\n      self, mock_local_query):\n    mock_local_query.side_effect = [['event'], ['kubelet']]\n    self.assertTrue(node_auto_repair.unallocatable_gpu_tpu('node', tpu=True))\n\n  @mock.patch('gcpdiag.runbook.gke.node_auto_repair.local_realtime_query')\n  def test_check_node_unhealthy_returns_true_if_logs_found(\n      self, mock_local_query):\n    mock_local_query.return_value = ['log']\n    self.assertTrue(node_auto_repair.check_node_unhealthy('node'))\n\n  @mock.patch('gcpdiag.runbook.gke.node_auto_repair.local_realtime_query')\n  def test_check_node_unhealthy_returns_false_if_no_logs(\n      self, mock_local_query):\n    mock_local_query.return_value = []\n    self.assertFalse(node_auto_repair.check_node_unhealthy('node'))\n\n  def test_node_auto_repair_legacy_parameter_handler_renames_flag(self):\n    runbook_obj = node_auto_repair.NodeAutoRepair()\n    params = {flags.NAME: 'cluster'}\n    runbook_obj.legacy_parameter_handler(params)\n    self.assertNotIn(flags.NAME, params)\n    self.assertIn(flags.GKE_CLUSTER_NAME, params)\n    self.assertEqual(params[flags.GKE_CLUSTER_NAME], 'cluster')\n\n  def test_start_step_skips_if_no_clusters_found(self):\n    self.mock_gke_get_clusters.return_value = {}\n    step = node_auto_repair.NodeAutoRepairStart()\n    step.execute()\n    self.mock_op_add_skipped.assert_called_once()\n\n  @mock.patch('gcpdiag.runbook.gke.node_auto_repair.local_realtime_query')\n  def test_start_step_skips_if_no_repair_operations_found(\n      self, mock_local_query):\n    self.mock_gke_get_clusters.return_value = {'test-cluster': mock.Mock()}\n    mock_local_query.return_value = []\n    step = node_auto_repair.NodeAutoRepairStart()\n    step.execute()\n    self.mock_op_add_skipped.assert_called_once()\n\n  @mock.patch('gcpdiag.runbook.gke.node_auto_repair.local_realtime_query')\n  def test_start_step_continues_if_repair_operations_found(\n      self, mock_local_query):\n    self.mock_gke_get_clusters.return_value = {'test-cluster': mock.Mock()}\n    mock_local_query.return_value = ['op']\n    step = node_auto_repair.NodeAutoRepairStart()\n    step.execute()\n    self.mock_op_add_skipped.assert_not_called()\n\n  @mock.patch('gcpdiag.runbook.gke.node_auto_repair.check_node_unhealthy')\n  def test_node_not_ready_reports_failure_if_unhealthy(self, mock_check):\n    mock_check.return_value = True\n    step = node_auto_repair.NodeNotReady()\n    step.execute()\n    self.mock_op_add_failed.assert_called_once()\n\n  @mock.patch('gcpdiag.runbook.gke.node_auto_repair.check_node_unhealthy')\n  def test_node_not_ready_reports_ok_if_healthy(self, mock_check):\n    mock_check.return_value = False\n    step = node_auto_repair.NodeNotReady()\n    step.execute()\n    self.mock_op_add_ok.assert_called_once()\n\n  @mock.patch('gcpdiag.runbook.gke.node_auto_repair.check_node_unhealthy')\n  def test_node_disk_full_reports_failure_if_pressure_found(self, mock_check):\n    mock_check.return_value = True\n    step = node_auto_repair.NodeDiskFull()\n    step.execute()\n    self.mock_op_add_failed.assert_called_once()\n\n  @mock.patch('gcpdiag.runbook.gke.node_auto_repair.unallocatable_gpu_tpu')\n  def test_unallocatable_gpu_reports_failure_if_detected(self, mock_check):\n    mock_check.return_value = True\n    step = node_auto_repair.UnallocatableGpu()\n    step.execute()\n    self.mock_op_add_failed.assert_called_once()\n\n  @mock.patch('gcpdiag.runbook.gke.node_auto_repair.unallocatable_gpu_tpu')\n  def test_unallocatable_tpu_reports_failure_if_detected(self, mock_check):\n    mock_check.return_value = True\n    step = node_auto_repair.UnallocatableTpu()\n    step.execute()\n    self.mock_op_add_failed.assert_called_once()\n\n  def test_end_step_finishes_without_info_if_satisfied(self):\n    self.mock_op_prompt.return_value = op.YES\n    step = node_auto_repair.NodeAutoRepairEnd()\n    step.execute()\n    self.mock_op_info.assert_not_called()\n\n  def test_end_step_shows_info_if_not_satisfied(self):\n    self.mock_op_prompt.return_value = op.NO\n    step = node_auto_repair.NodeAutoRepairEnd()\n    step.execute()\n    self.mock_op_info.assert_called_once()\n\n\nif __name__ == '__main__':\n  unittest.main()\n"
  },
  {
    "path": "gcpdiag/runbook/gke/node_bootstrapping.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GKE Node Bootstrapping runbook\"\"\"\n\n# input would be a location (zone for a node) and a node name\n# if a node name cannot be provided, then a nodepool name should be provided. With the nodepool\n# name and location (zone or region for a nodepool), we can check if there are instances.insert\n# errors.\n# if a node name and location is provided, we can check Node Registration Checker logs\n#\n# logic used for the node registration checker:\n# - check if it's a GKE node, skip if it isn't\n# - check if the node exists and 10 minutes passed since instance was started, to make sure there's\n#   enough time for Node Registration Checker to run\n# - check if node's service account has logging permissions, otherwise we don't have logs to look\n#   into\n# - check if node exists and it's running\n#   - check if START_TIME is before node boot, so we can capture the boot time logs\n#   - if yes, check for Node Registration Checker logs:\n#     - if \"Node ready and registered.\" found, all good, return OK result\n#     - else if \"Completed running Node Registration Checker\" found, then it's a failure and\n#       provide the summary.\n#     - check if multiple \"Completed running Node Registration Checker\" messages are found for the\n#       same node name, this means it's in a repair loop\n#   - else (the node is not running) check if there are any logs for instance id and location\n#     provided, if there are no logs, this means either the node didn't exist in the time range\n#     provided, or the input is incorrect (node/location pair)\n#   - else if \"Node ready and registered.\" found for node name, then it registered at some point in\n#     the past (limited to search interval)\n#   - else check for instance name and see if Node Registration Checker finished running and\n#     provide output\n#   - else fail because Node Registration Checker didn't complete\n\nfrom datetime import datetime, timedelta, timezone\n\nimport googleapiclient.errors\n\nfrom gcpdiag import runbook\nfrom gcpdiag.queries import crm, gce, gke, iam, logs\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.gke import flags\n\nTOKEN_NRC_START = '** Here is a summary of the checks performed: **'\n\n\ndef get_node_instance(project, location, node):\n  # check if node exists, location here is zone, because it's a single node\n  try:\n    node_vm = gce.get_instance(project, location, node)\n  except googleapiclient.errors.HttpError:\n    return None\n  else:\n    return node_vm\n\n\ndef local_realtime_query(filter_str):\n  result = logs.realtime_query(project_id=op.get(flags.PROJECT_ID),\n                               start_time=op.get(flags.START_TIME),\n                               end_time=op.get(flags.END_TIME),\n                               filter_str=filter_str)\n  return result\n\n\ndef get_nrc_summary(node, location):\n  filter_str = [\n      f'labels.\"compute.googleapis.com/resource_name\"=\"{node}\"',\n      'resource.type=\"gce_instance\"', f'resource.labels.zone=\"{location}\"',\n      'log_id(\"serialconsole.googleapis.com/serial_port_1_output\")',\n      'textPayload:\"node-registration-checker.sh\"'\n  ]\n  filter_str = '\\n'.join(filter_str)\n  log_entries_all = local_realtime_query(filter_str)\n\n  found = False\n  nrc_summary = []\n  for log_entry in log_entries_all:\n    if TOKEN_NRC_START in log_entry['textPayload']:\n      # found match for the summary and taking its index position\n      # ncr_start_pos = log_entries_all.index(log_entry)\n      found = True\n    if found:\n      nrc_summary.append(log_entry['textPayload'])\n    if '** Completed running Node Registration Checker **' in log_entry[\n        'textPayload']:\n      break\n\n  return nrc_summary\n\n\nclass NodeBootstrapping(runbook.DiagnosticTree):\n  \"\"\"Analyses issues experienced when adding nodes to your GKE Standard cluster.\n\n  This runbook requires at least\n  - location and node parameters. Location here is the zone where the node is\n  running,\n  for example us-central1-c.\n  - location, nodepool and cluster name parameters to be provided. Location is\n  zone or region for\n  a nodepool, if the cluster is a regional cluster, then location for a nodepool\n  will be the\n  cluster region. For example a region could be us-central1.\n\n  If a location/node pair is provided, the runbook will check the Node\n  Registration Checker output\n  for the given location/node pair.\n\n  If a location, nodepool and GKE cluster name parameters are provided, the\n  runbook will check for\n  any errors that might have occurred when the instances.insert method was\n  invoked for the given\n  parameters.\n  \"\"\"\n\n  # Specify parameters common to all steps in the diagnostic tree class.\n  parameters = {\n      flags.PROJECT_ID: {\n          'type': str,\n          'help': 'The ID of the project hosting the GKE Cluster',\n          'required': True,\n      },\n      flags.LOCATION: {\n          'type': str,\n          'help': (\n              'The location where the node or nodepool is. For a node, location'\n              ' will be the zone where the node is running (i.e.'\n              ' us-central1-c). For a nodepool, this can be the zone or the'\n              ' region (i.e. us-central1) where the nodepool is configured'),\n          'required': True,\n      },\n      flags.NODE: {\n          'type': str,\n          'help':\n              ('The node name that is failing to register (if available). If'\n               ' node name is not available, please provide the nodepool name'\n               \" where nodes aren't registering\"),\n          'required': False,\n      },\n      flags.NODEPOOL: {\n          'type': str,\n          'help': (\n              \"The nodepool name where nodes aren't registering, if a node name\"\n              ' is not available'),\n          'required': False,\n      },\n      flags.NAME: {\n          'type': str,\n          'help':\n              ('The GKE cluster name. When providing nodepool name, please'\n               ' provide the GKE cluster name as well to be able to properly'\n               ' filter events in the logging query.'),\n          'deprecated': True,\n          'new_parameter': 'gke_cluster_name',\n      },\n      flags.GKE_CLUSTER_NAME: {\n          'type': str,\n          'help':\n              ('The GKE cluster name. When providing nodepool name, please'\n               ' provide the GKE cluster name as well to be able to properly'\n               ' filter events in the logging query.'),\n          'required': False,\n      },\n      flags.START_TIME: {\n          'type':\n              datetime,\n          'help': ('The start window to investigate vm termination. Format:'\n                   ' YYYY-MM-DDTHH:MM:SSZ'),\n      },\n      flags.END_TIME: {\n          'type':\n              datetime,\n          'help': ('The end window for the investigation. Format:'\n                   ' YYYY-MM-DDTHH:MM:SSZ'),\n      },\n  }\n\n  def legacy_parameter_handler(self, parameters):\n    if flags.NAME in parameters:\n      parameters[flags.GKE_CLUSTER_NAME] = parameters.pop(flags.NAME)\n\n  def build_tree(self):\n    start = NodeBootstrappingStart()\n    node_insert_ok = NodeInsertCheck()\n    node_reg_ok = NodeRegistrationSuccess()\n    end = NodeBootstrappingEnd()\n\n    self.add_start(step=start)\n    self.add_step(parent=start, child=node_insert_ok)\n    self.add_step(parent=node_insert_ok, child=node_reg_ok)\n    self.add_end(step=end)\n\n\nclass NodeBootstrappingStart(runbook.StartStep):\n  \"\"\"Initiates diagnostics for Node Bootstrapping.\n\n  Check\n  - if there are GKE clusters in the project\n  - if the instance provided is a GKE node\n  - if serial logs are enabled\n  - if there are any logs for the provided inputs\n  \"\"\"\n\n  def execute(self):\n    \"\"\"\n    Check the provided parameters.\n    \"\"\"\n    project = op.get(flags.PROJECT_ID)\n    location = op.get(flags.LOCATION)\n    node = op.get(flags.NODE)\n    name = op.get(flags.GKE_CLUSTER_NAME)\n    project_path = crm.get_project(project)\n    start_time = op.get(flags.START_TIME)\n    end_time = op.get(flags.END_TIME)\n\n    # check if there are clusters in the project\n    if name:\n      clusters = gke.get_clusters(\n          op.get_context(project_id=project, resources=[name]))\n      if not clusters:\n        op.add_skipped(\n            project_path,\n            reason=f'No {name} GKE cluster found in project {project}')\n        return\n    else:\n      clusters = gke.get_clusters(\n          op.get_context(project_id=op.get(flags.PROJECT_ID)))\n      if not clusters:\n        op.add_skipped(\n            project_path,\n            reason=('No GKE clusters found in project {}').format(project))\n        return\n\n    # check if node exists\n    if node:\n      node_vm = get_node_instance(project, location, node)\n\n      if node_vm:\n        if not node_vm.is_gke_node():\n          op.add_skipped(\n              project_path,\n              reason=\n              (f'Instance {node} in location {location} does not appear to be a GKE node'\n              ))\n          return\n        elif not node_vm.is_serial_port_logging_enabled():\n          op.add_skipped(\n              project_path,\n              reason=\n              (f'Instance {node} in location {location} does not have Serial Logs enabled, please '\n               'enable serial logs for easier troubleshooting.'))\n          return\n\n      # fail if Audit Log does not have any log entries for the input provided, meaning there could\n      # have been an input error\n      filter_str = [\n          'log_id(\"cloudaudit.googleapis.com/activity\")',\n          f'resource.labels.zone=\"{location}\"',\n          f'protoPayload.resourceName:\"{node}\"'\n      ]\n      filter_str = '\\n'.join(filter_str)\n\n      log_entries = local_realtime_query(filter_str)\n\n      if not log_entries:\n        op.add_skipped(\n            project_path,\n            reason=\n            (f'There are no log entries for the provided node {node} and location '\n             f'{location} in the provided time range '\n             f'{start_time} - {end_time}.\\n'\n             'Please make sure the node/location pair is correct and it was booted '\n             'in the time range provided, then try again this runbook.'))\n        return\n\n\nclass NodeInsertCheck(runbook.Step):\n  \"\"\"Check for any errors during instances.insert method\"\"\"\n\n  template = 'nodebootstrapping::node_insert_check'\n  MAX_GKE_NAME_LENGTH = 16\n\n  def execute(self):\n    \"\"\"\n    Check for any errors during instances.insert method for the given location (region or zone)\n    and nodepool pair.\n    \"\"\"\n    project = op.get(flags.PROJECT_ID)\n    location = op.get(flags.LOCATION)\n    nodepool = op.get(flags.NODEPOOL)\n    node = op.get(flags.NODE)\n    name = op.get(flags.GKE_CLUSTER_NAME)\n    project_path = crm.get_project(project)\n    start_time = op.get(flags.START_TIME)\n    end_time = op.get(flags.END_TIME)\n\n    if nodepool and name:\n      if not node:\n        # the gke instance name will have a max of 16 characters from the nodepool name\n        # and max 16 characters from the GKE cluster name\n        filter_str = [\n            'log_id(\"cloudaudit.googleapis.com/activity\")',\n            'protoPayload.methodName=\"v1.compute.instances.insert\"',\n            'resource.type=\"gce_instance\"', 'severity=ERROR',\n            f'protoPayload.resourceName:\"{location}\"',\n            f'protoPayload.resourceName:\"{name[:self.MAX_GKE_NAME_LENGTH]}\"',\n            f'protoPayload.resourceName:\"{nodepool[:self.MAX_GKE_NAME_LENGTH]}\"'\n        ]\n        filter_str = '\\n'.join(filter_str)\n\n        log_entries = local_realtime_query(filter_str)\n\n        if log_entries:\n          nr_errors = len(log_entries)\n          for log_entry in log_entries:\n            sample_log = log_entry\n            sample_log = str(sample_log).replace(', ', '\\n')\n            break\n          op.add_failed(project_path,\n                        reason=op.prep_msg(op.FAILURE_REASON,\n                                           log_entry=sample_log,\n                                           NODEPOOL=nodepool,\n                                           NAME=name,\n                                           location=location,\n                                           NR_ERRORS=nr_errors,\n                                           start_time=start_time,\n                                           end_time=end_time),\n                        remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n          return\n        else:\n          op.add_ok(project_path,\n                    reason=op.prep_msg(op.SUCCESS_REASON,\n                                       start_time=start_time,\n                                       end_time=end_time,\n                                       NODEPOOL=nodepool,\n                                       NAME=name,\n                                       location=location))\n          return\n      else:\n        op.add_skipped(\n            project_path,\n            reason=\n            ('Node parameter provided together with nodepool parameter, proceeding with Node '\n             'Registration Checkout output verification .'))\n    else:\n      op.add_skipped(\n          project_path,\n          reason=\n          ('No nodepool or GKE cluster name provided, skipping this step . \\n'\n           'Please provide nodepool name (-p nodepool=<nodepoolname>) and GKE cluster name '\n           '(-p name=<gke-cluster-name>) if you see issues with nodes not appearing in the '\n           'nodepool.'))\n      return\n\n\nclass NodeRegistrationSuccess(runbook.Step):\n  \"\"\"Verify Node Registration Checker output\"\"\"\n  template = 'nodebootstrapping::node_registration_checker'\n  NODE_BOOT_NCR_READY_MIN_TIME = 7\n\n  def execute(self):\n    \"\"\"\n    Verify if Node Registration Checker completed running.\n\n    If the node was successfully registered, provide log entry proving successful registration\n    If the node wasn't registered successfully, provide Node Registration Checker summary to\n    understand why.\n    \"\"\"\n    project = op.get(flags.PROJECT_ID)\n    project_path = crm.get_project(project)\n    location = op.get(flags.LOCATION)\n    node = op.get(flags.NODE)\n\n    if node:\n\n      # default filter that is used in all log searches\n      default_filter = [\n          'resource.type=\"gce_instance\"', f'resource.labels.zone=\"{location}\"',\n          'log_id(\"serialconsole.googleapis.com/serial_port_1_output\")',\n          'textPayload:\"node-registration-checker.sh\"'\n      ]\n      default_filter = '\\n'.join(default_filter)\n      # get node instance\n      node_vm = get_node_instance(project, location, node)\n\n      if node_vm and node_vm.is_running:\n        # Check if NODE_BOOT_NCR_READY_MIN_TIME minutes (should be at least 7 minutes) passed since\n        # the instance was booted, to make sure there was enough time for Node Registration Checker\n        # to finish running\n        time_since_creation = datetime.now(\n        ) - node_vm.creation_timestamp >= timedelta(\n            minutes=self.NODE_BOOT_NCR_READY_MIN_TIME)\n\n        if not time_since_creation:\n          op.add_failed(\n              project_path,\n              reason=\n              (f'Instance {node} with instance-id {node_vm.id} in location {location} just booted '\n               f'at {node_vm.creation_timestamp}.'),\n              remediation=\n              (f'Please allow for at least {self.NODE_BOOT_NCR_READY_MIN_TIME} minutes since '\n               'starting the instance to allow for Node Registration Checker to finish running.'\n              ))\n          return\n\n      if node_vm:\n        # check node service account has logging write permissions\n        iam_policy = iam.get_project_policy(op.get_context())\n        if not iam_policy.has_role_permissions(\n            f'serviceAccount:{node_vm.service_account}',\n            'roles/logging.logWriter'):\n          op.add_failed(\n              project_path,\n              reason=\n              (f'The service account {node_vm.service_account} for node {node} in location '\n               f'{location} does not have \"Logs Writer (roles/logging.logWriter)\" role '\n               'permissions. \"Logs Writer\" permissions are needed for the Node Registration '\n               'Checker\\'s output to be written in Cloud Logging, where we can analyse it.'\n              ),\n              remediation=\n              ('Add the minimum permissions required to operate GKE to the Node\\'s Service '\n               f'Account {node_vm.service_account} following the documentation: '\n               'https://cloud.google.com/kubernetes-engine/docs/how-to/hardening-your-cluster'\n               '#permissions'))\n          return\n\n      # if serial log is enabled, we can check Cloud Logging for node-registration-checker.sh\n      # output:\n      if node_vm and node_vm.is_running and node_vm.is_serial_port_logging_enabled(\n      ):\n        # check if START_TIME is after node's boot time if yes we might not find Node\n        # Registration Checker logs, so the user needs to set earlier START_TIME\n\n        # get the offset-aware datetime instead of offset-naive\n        node_start_time = datetime.fromisoformat(str(\n            node_vm.creation_timestamp)).replace(tzinfo=timezone.utc)\n        if node_start_time < op.get(flags.START_TIME):\n          op.add_failed(\n              project_path,\n              reason=\n              (f'The node {node} in the location {location} booted at {node_start_time} before '\n               f'the provided START_TIME {op.get(flags.START_TIME)} '\n               '(default is 8 hours from now)'),\n              remediation=\n              ('Please provide the START_TIME parameter (-p start_time) with a date '\n               f'before {node_start_time}, so that the runbook can find the Node Registration '\n               'Checker logs for the node'))\n          return\n\n        filter_str = [\n            f'resource.labels.instance_id=\"{node_vm.id}\"', default_filter,\n            'textPayload:\"Node ready and registered.\"'\n        ]\n        filter_str = '\\n'.join(filter_str)\n\n        log_entries_success = local_realtime_query(filter_str)\n\n        if log_entries_success:\n          # node registered successfully, we're all good\n          sample_log = log_entries_success.pop()\n          sample_log = str(sample_log).replace(', ', '\\n')\n          op.add_ok(project_path,\n                    reason=op.prep_msg(op.SUCCESS_REASON,\n                                       log_entry=sample_log,\n                                       node=node))\n\n        else:\n          # node failed to register, need to find Node Registration Checker summary verify if\n          # node-registration-checker.sh finished running\n          filter_str = [\n              f'resource.labels.instance_id=\"{node_vm.id}\"', default_filter,\n              'textPayload:\"Completed running Node Registration Checker\"'\n          ]\n          filter_str = '\\n'.join(filter_str)\n\n          log_entries_completed = local_realtime_query(filter_str)\n\n          if log_entries_completed:\n            # node registration finished running but node didn't register. Get all logs for info\n            filter_str = [\n                f'resource.labels.instance_id=\"{node_vm.id}\"', default_filter\n            ]\n            filter_str = '\\n'.join(filter_str)\n            log_entries_all = local_realtime_query(filter_str)\n\n            # log_entries_all have now all the logs until the final \"Completed running Node\n            # Registration Checker\" message, thus we need to pop messages one by one and go back\n            # until the start of the NRC report message \"Here is a summary of the checks performed\"\n            found = False\n            nrc_summary = []\n            while not found:\n              nrc_summary.insert(0, log_entries_all.pop()['textPayload'])\n              if TOKEN_NRC_START in nrc_summary[0]:\n                found = True\n\n            op.add_failed(project_path,\n                          reason=op.prep_msg(op.FAILURE_REASON,\n                                             log_entries=nrc_summary,\n                                             node=node,\n                                             location=location),\n                          remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n            return\n\n          else:\n            # Could not find message that Node Registration Checker finished running for instance\n            # id, checking by node name and look for potential repair loop\n            filter_str = [\n                f'labels.\"compute.googleapis.com/resource_name\"=\"{node}\"',\n                default_filter,\n                'textPayload:\"Completed running Node Registration Checker\"'\n            ]\n            filter_str = '\\n'.join(filter_str)\n\n            log_entries_completed = local_realtime_query(filter_str)\n\n            if log_entries_completed:\n              # as there is \"Completed running Node Registration Checker\" log entry but not for\n              # current instance_id, this means that the node is in a repair loop. Need to find out\n              # the summary taking into account that there could be multiple summaries\n              nrc_summary = get_nrc_summary(node, op.get(flags.LOCATION))\n\n              op.add_failed(project_path,\n                            reason=op.prep_msg(op.FAILURE_REASON_ALT1,\n                                               log_entries=nrc_summary,\n                                               node=node,\n                                               location=location),\n                            remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n              return\n            else:\n              # node is running, but there's no \"Completed running Node Registration Checker\" log\n              # entry in the provided time range\n              op.add_failed(project_path,\n                            reason=op.prep_msg(op.UNCERTAIN_REASON,\n                                               node=node,\n                                               location=location,\n                                               start_time=op.get(\n                                                   flags.START_TIME),\n                                               end_time=op.get(flags.END_TIME)),\n                            remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION,\n                                                    node=node))\n              return\n\n      else:\n        # node doesn't exist, checking older logs by node name and trying to find if Node\n        # Registration Checker completed running at least once\n        filter_str = [\n            f'labels.\"compute.googleapis.com/resource_name\"=\"{node}\"',\n            default_filter, 'textPayload:\"Node ready and registered.\"'\n        ]\n        filter_str = '\\n'.join(filter_str)\n\n        log_entries_success = local_realtime_query(filter_str)\n\n        if log_entries_success:\n          # node isn't running now, but it registered successfully in the past\n          sample_log = log_entries_success.pop()\n          sample_log = str(sample_log).replace(', ', '\\n')\n          op.add_ok(project_path,\n                    reason=op.prep_msg(op.SUCCESS_REASON_ALT1,\n                                       log_entry=sample_log,\n                                       node=node))\n        else:\n          filter_str = [\n              f'labels.\"compute.googleapis.com/resource_name\"=\"{node}\"',\n              default_filter,\n              'textPayload:\"Completed running Node Registration Checker\"'\n          ]\n          filter_str = '\\n'.join(filter_str)\n\n          log_entries_completed = local_realtime_query(filter_str)\n\n          if log_entries_completed:\n            # Node Registration Checker completed running.  Need to find out the summary, taking\n            # into account that there could be multiple summaries\n            nrc_summary = get_nrc_summary(node, op.get(flags.LOCATION))\n\n            op.add_failed(project_path,\n                          reason=op.prep_msg(op.FAILURE_REASON_ALT2,\n                                             log_entries=nrc_summary,\n                                             node=node,\n                                             location=location),\n                          remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n            return\n\n          else:\n            # node is not running and Node Registration Checker did not complete running. Most\n            # probably the node was deleted before Node Registration Checker could finish running.\n            op.add_failed(project_path,\n                          reason=op.prep_msg(op.FAILURE_REASON_ALT3,\n                                             node=node,\n                                             location=location),\n                          remediation=op.prep_msg(op.FAILURE_REMEDIATION_ALT3))\n            return\n    else:\n      op.add_skipped(\n          project_path,\n          reason=\n          ('No node name provided, skipping this step .\\n'\n           'Please provide node name (-p node=<nodename>) if the node appears in the nodepool, '\n           'but fails registration.\\n'))\n\n\nclass NodeBootstrappingEnd(runbook.EndStep):\n  \"\"\"Finalizes the diagnostics process for `GKE Node Bootstrapping`.\n\n  This step prompts the user to confirm satisfaction with the analysis performed for\n  `GKE Node Bootstrapping`.\n\n  Depending on the user's response, it may conclude the runbook execution or trigger additional\n  steps, such as generating a report of the findings.\n  \"\"\"\n\n  def execute(self):\n    \"\"\"Finalize `GKE Node Bootstrapping` diagnostics.\"\"\"\n    response = op.prompt(\n        kind=op.CONFIRMATION,\n        message='Are you satisfied with the `GKE Node Bootstrapping` analysis?')\n    if response == op.NO:\n      op.info(message=op.END_MESSAGE)\n"
  },
  {
    "path": "gcpdiag/runbook/gke/node_bootstrapping_test.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#    http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test class for gke/NodeBootstrapping.\"\"\"\n\nimport collections\nimport unittest\nfrom datetime import datetime, timedelta, timezone\nfrom unittest.mock import ANY, MagicMock, patch\n\nfrom googleapiclient.errors import HttpError\n\nfrom gcpdiag import config\nfrom gcpdiag.queries import crm_stub, gce_stub, gke_stub, iam_stub, logs_stub\nfrom gcpdiag.runbook import gke, op, snapshot_test_base\nfrom gcpdiag.runbook.gke import flags, node_bootstrapping\n\nTEST_TIME = datetime(2026, 1, 8, 12, 0, 0, tzinfo=timezone.utc)\n\n\nclass MockDatetime(datetime):\n\n  @classmethod\n  def now(cls, tz=None):\n    if tz:\n      return TEST_TIME.astimezone(tz)\n    return TEST_TIME\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = gke\n  runbook_name = 'gke/node-bootstrapping'\n  config.init({'auto': True, 'interface': 'cli'})\n\n  rule_parameters = [{\n      'project_id': 'gcpdiag-gke1-aaaa',\n      'nodepool': 'gke-gke1-default-pool-671518f6',\n      'location': 'europe-west4-a',\n      'gke_cluster_name': 'gke-cluster-name',\n  }]\n\n\nclass TestNodeBootstrappingCoverage(unittest.TestCase):\n  \"\"\"Comprehensive test suite for node_bootstrapping.py to reach 100% coverage.\n\n  Follows Arrange-Act-Assert and Behavior-Driven Testing patterns.\n  \"\"\"\n\n  def setUp(self):\n    super().setUp()\n    patcher = patch('gcpdiag.runbook.gke.node_bootstrapping.datetime',\n                    MockDatetime)\n    patcher.start()\n    self.addCleanup(patcher.stop)\n    self.op_add_ok = patch('gcpdiag.runbook.op.add_ok').start()\n    self.op_add_failed = patch('gcpdiag.runbook.op.add_failed').start()\n    self.op_add_skipped = patch('gcpdiag.runbook.op.add_skipped').start()\n    self.mock_gke = patch('gcpdiag.runbook.gke.node_bootstrapping.gke',\n                          gke_stub).start()\n    self.mock_gce = patch('gcpdiag.runbook.gke.node_bootstrapping.gce',\n                          gce_stub).start()\n    self.mock_crm = patch('gcpdiag.runbook.gke.node_bootstrapping.crm',\n                          crm_stub).start()\n    self.mock_iam = patch('gcpdiag.runbook.gke.node_bootstrapping.iam',\n                          iam_stub).start()\n    self.mock_logs_module = patch('gcpdiag.runbook.gke.node_bootstrapping.logs',\n                                  logs_stub).start()\n    self.mock_realtime_query = patch('gcpdiag.queries.logs_stub.realtime_query',\n                                     create=True).start()\n    self.mock_get_clusters = patch('gcpdiag.queries.gke_stub.get_clusters',\n                                   create=True).start()\n    self.mock_get_instance = patch('gcpdiag.queries.gce_stub.get_instance',\n                                   create=True).start()\n    self.mock_get_project = patch('gcpdiag.queries.crm_stub.get_project',\n                                  create=True).start()\n    self.mock_get_project_policy = patch(\n        'gcpdiag.queries.iam_stub.get_project_policy', create=True).start()\n\n    self.params = {\n        flags.PROJECT_ID: 'test-project',\n        flags.LOCATION: 'us-central1-a',\n        flags.NODE: 'test-node',\n        flags.GKE_CLUSTER_NAME: 'test-cluster',\n        flags.START_TIME: TEST_TIME - timedelta(hours=1),\n        flags.END_TIME: TEST_TIME,\n        flags.NODEPOOL: 'test-pool',\n    }\n    self.mock_op_parent = MagicMock()\n    self.mock_op_parent.parameters = self.params\n\n    self.addCleanup(patch.stopall)\n\n  def create_mock_vm(self, is_gke=True, serial_enabled=True, running=True):\n    vm = MagicMock()\n    vm.is_gke_node.return_value = is_gke\n    vm.is_serial_port_logging_enabled.return_value = serial_enabled\n    vm.is_running = running\n    vm.id = '12345'\n    vm.service_account = 'test-sa@project.iam.gserviceaccount.com'\n    vm.creation_timestamp = TEST_TIME - timedelta(minutes=15)\n    return vm\n\n  def test_start_no_clusters_named(self):\n    \"\"\"Cluster name provided but not found.\"\"\"\n    self.mock_get_clusters.return_value = []\n    step = node_bootstrapping.NodeBootstrappingStart()\n    with op.operator_context(self.mock_op_parent):\n      step.execute()\n    self.op_add_skipped.assert_called_with(\n        ANY, reason='No test-cluster GKE cluster found in project test-project')\n\n  def test_start_no_clusters_at_all(self):\n    \"\"\"No clusters in project.\"\"\"\n    self.params[flags.GKE_CLUSTER_NAME] = None\n    self.mock_get_clusters.return_value = []\n    step = node_bootstrapping.NodeBootstrappingStart()\n    with op.operator_context(self.mock_op_parent):\n      step.execute()\n    self.op_add_skipped.assert_called_with(\n        ANY, reason='No GKE clusters found in project test-project')\n\n  def test_start_non_gke_node(self):\n    \"\"\"Node is not a GKE node.\"\"\"\n    self.mock_get_instance.return_value = self.create_mock_vm(is_gke=False)\n    step = node_bootstrapping.NodeBootstrappingStart()\n    with op.operator_context(self.mock_op_parent):\n      step.execute()\n    self.op_add_skipped.assert_called_with(\n        ANY,\n        reason=\n        'Instance test-node in location us-central1-a does not appear to be a GKE node'\n    )\n\n  def test_insert_check_failed(self):\n    \"\"\"instances.insert error found.\"\"\"\n    self.params[flags.NODE] = None  # Ensure it checks pool insert\n    self.mock_realtime_query.return_value = [{\n        'severity': 'ERROR',\n        'protoPayload': {\n            'resourceName': 'pool'\n        }\n    }]\n    step = node_bootstrapping.NodeInsertCheck()\n    with op.operator_context(self.mock_op_parent):\n      step.execute()\n    self.op_add_failed.assert_called_once()\n\n  def test_registration_too_young(self):\n    \"\"\"Node just booted (< 7 mins).\"\"\"\n    vm = self.create_mock_vm()\n    vm.creation_timestamp = TEST_TIME - timedelta(minutes=2)\n    self.mock_get_instance.return_value = vm\n    step = node_bootstrapping.NodeRegistrationSuccess()\n    with op.operator_context(self.mock_op_parent):\n      step.execute()\n    self.op_add_failed.assert_called_with(ANY, reason=ANY, remediation=ANY)\n\n  def test_registration_missing_permissions(self):\n    \"\"\"Node SA lacks log writer role.\"\"\"\n    vm = self.create_mock_vm()\n    self.mock_get_instance.return_value = vm\n    mock_policy = MagicMock()\n    mock_policy.has_role_permissions.return_value = False\n    self.mock_get_project_policy.return_value = mock_policy\n    step = node_bootstrapping.NodeRegistrationSuccess()\n    with op.operator_context(self.mock_op_parent):\n      step.execute()\n    self.op_add_failed.assert_called_with(ANY, reason=ANY, remediation=ANY)\n\n  def test_registration_repair_loop(self):\n    \"\"\"NRC finished for name but not current ID.\"\"\"\n    vm = self.create_mock_vm()\n    self.mock_get_instance.return_value = vm\n    self.mock_realtime_query.side_effect = [\n        [],  # for log_entries_success\n        [],  # for log_entries_completed by id\n        [{\n            'textPayload': 'Completed running Node Registration Checker'\n        }],\n        [\n            {\n                'textPayload': 'other log'\n            },\n            {\n                'textPayload':\n                    '** Here is a summary of the checks performed: **'\n            },\n            {\n                'textPayload': 'check 1'\n            },\n            {\n                'textPayload':\n                    ('** Completed running Node Registration Checker **')\n            },\n        ],\n    ]\n    step = node_bootstrapping.NodeRegistrationSuccess()\n    with op.operator_context(self.mock_op_parent):\n      step.execute()\n    self.op_add_failed.assert_called()\n\n  def test_registration_deleted_node_past_success(self):\n    \"\"\"Node deleted but registered in past.\"\"\"\n    self.mock_get_instance.return_value = None\n    self.mock_realtime_query.return_value = [{\n        'textPayload': 'Node ready and registered.'\n    }]\n    step = node_bootstrapping.NodeRegistrationSuccess()\n    with op.operator_context(self.mock_op_parent):\n      step.execute()\n    self.op_add_ok.assert_called()\n\n  def test_get_nrc_summary_logic(self):\n    \"\"\"Directly tests the helper logic of get_nrc_summary.\"\"\"\n    self.mock_realtime_query.return_value = [\n        {\n            'textPayload': 'other log'\n        },\n        {\n            'textPayload': '** Here is a summary of the checks performed: **'\n        },\n        {\n            'textPayload': 'check 1'\n        },\n        {\n            'textPayload': '** Completed running Node Registration Checker **'\n        },\n    ]\n    with op.operator_context(self.mock_op_parent):\n      summary = node_bootstrapping.get_nrc_summary('node', 'zone')\n    self.assertEqual(len(summary), 3)\n    self.assertIn('check 1', summary[1])\n\n  def test_insert_check_ok(self):\n    \"\"\"No insert errors found for nodepool.\"\"\"\n    self.params[flags.NODE] = None\n    self.mock_realtime_query.return_value = []\n    step = node_bootstrapping.NodeInsertCheck()\n    with op.operator_context(self.mock_op_parent):\n      step.execute()\n    self.op_add_ok.assert_called_once()\n\n  def test_registration_start_time_after_boot(self):\n    \"\"\"node_start_time < START_TIME failure.\"\"\"\n    vm = self.create_mock_vm()\n    vm.creation_timestamp = datetime(2024, 1, 1, 0, 0, 0, tzinfo=timezone.utc)\n    self.mock_get_instance.return_value = vm\n    self.params[flags.START_TIME] = datetime(2024,\n                                             1,\n                                             2,\n                                             0,\n                                             0,\n                                             0,\n                                             tzinfo=timezone.utc)\n    mock_policy = MagicMock()\n    mock_policy.has_role_permissions.return_value = True\n    self.mock_get_project_policy.return_value = mock_policy\n    step = node_bootstrapping.NodeRegistrationSuccess()\n    with op.operator_context(self.mock_op_parent):\n      step.execute()\n    self.op_add_failed.assert_called_with(ANY, reason=ANY, remediation=ANY)\n\n  def test_registration_success_running(self):\n    \"\"\"Running node registered successfully.\"\"\"\n    vm = self.create_mock_vm()\n    self.mock_get_instance.return_value = vm\n    self.mock_realtime_query.return_value = [{\n        'textPayload': 'Node ready and registered.'\n    }]\n    mock_policy = MagicMock()\n    mock_policy.has_role_permissions.return_value = True\n    self.mock_get_project_policy.return_value = mock_policy\n    step = node_bootstrapping.NodeRegistrationSuccess()\n    with op.operator_context(self.mock_op_parent):\n      step.execute()\n    self.op_add_ok.assert_called()\n\n  def test_registration_failed_with_summary(self):\n    \"\"\"Checker completed but failed, summary extracted.\"\"\"\n    vm = self.create_mock_vm()\n    self.mock_get_instance.return_value = vm\n    mock_policy = MagicMock()\n    mock_policy.has_role_permissions.return_value = True\n    self.mock_get_project_policy.return_value = mock_policy\n    self.mock_realtime_query.side_effect = [\n        [],  # for log_entries_success\n        [{\n            'textPayload': 'Completed...'\n        }],  # for log_entries_completed\n        [  # for log_entries_all for summary extraction\n            {\n                'textPayload': 'Completed running Node Registration Checker'\n            },\n            {\n                'textPayload': 'Error details'\n            },\n            {\n                'textPayload': node_bootstrapping.TOKEN_NRC_START\n            },\n        ]\n    ]\n\n    step = node_bootstrapping.NodeRegistrationSuccess()\n    with op.operator_context(self.mock_op_parent):\n      step.execute()\n    self.op_add_failed.assert_called()\n\n  def test_registration_deleted_node_failed_summary(self):\n    \"\"\"Node not running, checker failed in past.\"\"\"\n    self.mock_get_instance.return_value = None\n    self.mock_realtime_query.side_effect = [\n        [],  # log_entries_success\n        [{\n            'textPayload': 'Completed...'\n        }],  # log_entries_completed by name\n        [  # logs for get_nrc_summary\n            {\n                'textPayload': node_bootstrapping.TOKEN_NRC_START\n            },\n            {\n                'textPayload': 'error'\n            },\n            {\n                'textPayload':\n                    '** Completed running Node Registration Checker **'\n            },\n        ]\n    ]\n    step = node_bootstrapping.NodeRegistrationSuccess()\n    with op.operator_context(self.mock_op_parent):\n      step.execute()\n    self.op_add_failed.assert_called()\n\n  def test_end_step_not_satisfied(self):\n    \"\"\"User not satisfied with analysis.\"\"\"\n    with patch('gcpdiag.runbook.op.prompt', return_value=op.NO):\n      op_info = patch('gcpdiag.runbook.op.info').start()\n      step = node_bootstrapping.NodeBootstrappingEnd()\n      with op.operator_context(self.mock_op_parent):\n        step.execute()\n      op_info.assert_called_with(message=ANY)\n\n  def test_get_nrc_summary_no_match(self):\n    \"\"\"get_nrc_summary with no summary tokens.\"\"\"\n    self.mock_realtime_query.return_value = [{'textPayload': 'junk'}]\n    with op.operator_context(self.mock_op_parent):\n      summary = node_bootstrapping.get_nrc_summary('node', 'zone')\n      self.assertEqual(len(summary), 0)\n\n  def test_get_instance_http_error(self):\n    \"\"\"gce.get_instance raises HttpError.\"\"\"\n    self.mock_get_instance.side_effect = HttpError(MagicMock(status=404),\n                                                   b'not found')\n    self.mock_realtime_query.return_value = []\n    step = node_bootstrapping.NodeBootstrappingStart()\n    with op.operator_context(self.mock_op_parent):\n      step.execute()\n    self.op_add_skipped.assert_called_once()\n    _, kwargs = self.op_add_skipped.call_args\n    self.assertIn('There are no log entries for the provided node test-node',\n                  kwargs['reason'])\n\n  def test_start_no_logs_for_node(self):\n    \"\"\"No audit logs found for the node.\"\"\"\n    self.mock_get_instance.return_value = self.create_mock_vm()\n    self.mock_realtime_query.return_value = []\n    step = node_bootstrapping.NodeBootstrappingStart()\n    with op.operator_context(self.mock_op_parent):\n      step.execute()\n    self.op_add_skipped.assert_called_once()\n    _, kwargs = self.op_add_skipped.call_args\n    self.assertIn('There are no log entries for the provided node test-node',\n                  kwargs['reason'])\n\n  def test_registration_uncertain_no_nrc_complete(self):\n    \"\"\"NRC completion log not found for running node.\"\"\"\n    vm = self.create_mock_vm()\n    self.mock_get_instance.return_value = vm\n    mock_policy = MagicMock()\n    mock_policy.has_role_permissions.return_value = True\n    self.mock_get_project_policy.return_value = mock_policy\n    self.mock_realtime_query.side_effect = [\n        [],  # log_entries_success\n        [],  # log_entries_completed by id\n        []  # log_entries_completed by name\n    ]\n    step = node_bootstrapping.NodeRegistrationSuccess()\n    with op.operator_context(self.mock_op_parent):\n      step.execute()\n    self.op_add_failed.assert_called_with(ANY, reason=ANY, remediation=ANY)\n\n  def test_node_not_running_nrc_did_not_complete_in_past(self):\n    \"\"\"Node not running, NRC never completed in past.\"\"\"\n    self.mock_get_instance.return_value = None\n    self.mock_realtime_query.side_effect = [\n        [],  # log_entries_success\n        []  # log_entries_completed by name\n    ]\n    step = node_bootstrapping.NodeRegistrationSuccess()\n    with op.operator_context(self.mock_op_parent):\n      step.execute()\n    self.op_add_failed.assert_called_with(ANY, reason=ANY, remediation=ANY)\n\n  def test_legacy_parameter_handler(self):\n    \"\"\"legacy 'name' parameter is handled.\"\"\"\n    runbook = node_bootstrapping.NodeBootstrapping()\n    params = {'name': 'test-cluster'}\n    runbook.legacy_parameter_handler(params)\n    self.assertNotIn('name', params)\n    self.assertIn('gke_cluster_name', params)\n    self.assertEqual(params['gke_cluster_name'], 'test-cluster')\n\n  def test_build_tree(self):\n    \"\"\"build_tree.\"\"\"\n    runbook = node_bootstrapping.NodeBootstrapping()\n    runbook.build_tree()\n    # BFS to collect all steps\n    q = collections.deque([runbook.start])\n    steps_in_runbook = []\n    visited_steps = set()\n    while q:\n      s = q.popleft()\n      if s in visited_steps:\n        continue\n      visited_steps.add(s)\n      steps_in_runbook.append(s)\n      q.extend(s.steps)\n    step_types = [type(s) for s in steps_in_runbook]\n    self.assertIn(node_bootstrapping.NodeBootstrappingStart, step_types)\n    self.assertIn(node_bootstrapping.NodeInsertCheck, step_types)\n    self.assertIn(node_bootstrapping.NodeRegistrationSuccess, step_types)\n    self.assertIn(node_bootstrapping.NodeBootstrappingEnd, step_types)\n\n\nif __name__ == '__main__':\n  unittest.main()\n"
  },
  {
    "path": "gcpdiag/runbook/gke/node_unavailability.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GKE Node Unavailability runbook\"\"\"\n\nfrom gcpdiag import runbook\nfrom gcpdiag.queries import crm, gke, logs\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.gke import flags\n\n# local variables to not repeat the same log queries\nLOG_PREEMPTED = LOG_DELETED = LOG_MIGRATED = None\n\n\ndef local_realtime_query(filter_str):\n  result = logs.realtime_query(\n      project_id=op.get(flags.PROJECT_ID),\n      start_time=op.get(flags.START_TIME),\n      end_time=op.get(flags.END_TIME),\n      filter_str=filter_str,\n  )\n  return result\n\n\nclass NodeUnavailability(runbook.DiagnosticTree):\n  \"\"\"Identifies the reasons for a GKE node being unavailable.\n\n  This runbook investigates various factors that may have caused a node to\n  become unavailable,\n  including:\n\n  - Live Migration\n  - Preemption\n  - Removal by the Cluster Autoscaler\n  - Node Pool Upgrade\n  \"\"\"\n\n  parameters = {\n      flags.PROJECT_ID: {\n          'type': str,\n          'help': 'The ID of the project hosting the GKE Cluster',\n          'required': True,\n      },\n      flags.NAME: {\n          'type': str,\n          'help': ('The name of the GKE cluster, to limit search only for this'\n                   ' cluster'),\n          'required': False,\n          'deprecated': True,\n          'new_parameter': 'gke_cluster_name',\n      },\n      flags.GKE_CLUSTER_NAME: {\n          'type': str,\n          'help': ('The name of the GKE cluster, to limit search only for this'\n                   ' cluster'),\n          'required': False,\n      },\n      flags.NODE: {\n          'type': str,\n          'help': 'The node name that was started.',\n          'required': True,\n      },\n      flags.LOCATION: {\n          'type': str,\n          'help': 'The zone or region of the GKE cluster',\n          'required': False,\n      },\n  }\n\n  def legacy_parameter_handler(self, parameters):\n    if flags.NAME in parameters:\n      parameters[flags.GKE_CLUSTER_NAME] = parameters.pop(flags.NAME)\n\n  def build_tree(self):\n    \"\"\"Construct the diagnostic tree with appropriate steps.\"\"\"\n    start = NodeUnavailabilityStart()\n    live_migration_check = LiveMigration()\n    preemption_check = PreemptionCondition()\n    autoscaler_removal_check = NodeRemovedByAutoscaler()\n    upgrade_check = NodePoolUpgrade()\n\n    self.add_start(start)\n    self.add_step(parent=start, child=live_migration_check)\n    self.add_step(parent=live_migration_check, child=preemption_check)\n    self.add_step(parent=preemption_check, child=autoscaler_removal_check)\n    self.add_step(parent=autoscaler_removal_check, child=upgrade_check)\n    self.add_end(step=NodeUnavailabilityEnd())\n\n\nclass NodeUnavailabilityStart(runbook.StartStep):\n  \"\"\"Check inputs and verify if the node was unavailable\"\"\"\n\n  def execute(self):\n    \"\"\"Check inputs and verify if the node was unavailable\"\"\"\n    project = op.get(flags.PROJECT_ID)\n    location = op.get(flags.LOCATION)\n    node = op.get(flags.NODE)\n    name = op.get(flags.GKE_CLUSTER_NAME)\n    project_path = crm.get_project(project)\n    start_time = op.get(flags.START_TIME)\n    end_time = op.get(flags.END_TIME)\n    global LOG_MIGRATED, LOG_DELETED, LOG_PREEMPTED\n\n    # check if there are clusters in the project\n    clusters = gke.get_clusters(op.get_context())\n    if not clusters:\n      op.add_skipped(project_path,\n                     reason=f'No GKE clusters found in project {project}')\n      return\n\n    # check if there were any node unavailability logs for the provided node\n\n    filter_str = [\n        'resource.type=\"gce_instance\"',\n        'log_id(\"cloudaudit.googleapis.com/system_event\")',\n        'protoPayload.methodName=\"compute.instances.preempted\"',\n        f'protoPayload.resourceName:\"{node}\"'\n    ]\n\n    filter_str = '\\n'.join(filter_str)\n    LOG_PREEMPTED = local_realtime_query(filter_str)\n\n    filter_str = [\n        'resource.type=\"gce_instance\"',\n        '(protoPayload.methodName=\"compute.instances.migrateOnHostMaintenance\" OR'\n        ' operation.producer=\"compute.instances.migrateOnHostMaintenance\")',\n        'log_id(\"cloudaudit.googleapis.com/system_event\")',\n        f'protoPayload.resourceName:\"{node}\"'\n    ]\n    filter_str = '\\n'.join(filter_str)\n    LOG_MIGRATED = local_realtime_query(filter_str)\n\n    filter_str = [\n        'resource.type=\"gce_instance\"',\n        'protoPayload.methodName=\"v1.compute.instances.delete\"',\n        'log_id(\"cloudaudit.googleapis.com/activity\")',\n        f'protoPayload.resourceName:\"{node}\"',\n    ]\n\n    filter_str = '\\n'.join(filter_str)\n    LOG_DELETED = local_realtime_query(filter_str)\n\n    if not (LOG_PREEMPTED or LOG_MIGRATED or LOG_DELETED):\n      reason = (f'There are no log entries that would show node {node} being'\n                ' unavailable')\n      if name:\n        reason += f' in cluster {name}'\n      if location:\n        reason += f' in location {location}'\n      reason += f' in the provided time range {start_time} - {end_time}.'\n      op.add_skipped(project_path, reason=reason)\n      return\n\n\nclass LiveMigration(runbook.Step):\n  \"\"\"Checks if the node was unavailable due to a live migration event.\"\"\"\n\n  template = 'nodeunavailability::node_live_migration'\n\n  def execute(self):\n    \"\"\"Check for live migration logs.\"\"\"\n    project = op.get(flags.PROJECT_ID)\n    node = op.get(flags.NODE)\n    project_path = crm.get_project(project)\n\n    if LOG_MIGRATED:\n      op.add_failed(project_path,\n                    reason=op.prep_msg(op.FAILURE_REASON, node=node),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION, node=node))\n    else:\n      op.add_ok(project_path, reason=op.prep_msg(op.SUCCESS_REASON, node=node))\n\n\nclass PreemptionCondition(runbook.Step):\n  \"\"\"Checks if the node was preempted.\"\"\"\n\n  template = 'nodeunavailability::node_preempted'\n\n  def execute(self):\n    \"\"\"Checks for preemption logs.\"\"\"\n    project = op.get(flags.PROJECT_ID)\n    node = op.get(flags.NODE)\n    project_path = crm.get_project(project)\n\n    if LOG_PREEMPTED:\n      op.add_failed(project_path,\n                    reason=op.prep_msg(op.FAILURE_REASON, node=node),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n    else:\n      op.add_ok(project_path, reason=op.prep_msg(op.SUCCESS_REASON, node=node))\n\n\nclass NodeRemovedByAutoscaler(runbook.Step):\n  \"\"\"Checks if the node was removed by Cluster Autoscaler.\"\"\"\n\n  template = 'nodeunavailability::node_removed_by_autoscaler'\n\n  def execute(self):\n    \"\"\"Checks for Cluster Autoscaler ScaleDown logs.\"\"\"\n    project = op.get(flags.PROJECT_ID)\n    location = op.get(flags.LOCATION)\n    node = op.get(flags.NODE)\n    name = op.get(flags.GKE_CLUSTER_NAME)\n    project_path = crm.get_project(project)\n\n    filter_str = [\n        'resource.type=\"k8s_cluster\"',\n        'log_id(\"container.googleapis.com/cluster-autoscaler-visibility\")',\n        f'jsonPayload.decision.scaleDown.nodesToBeRemoved.node.name=\"{node}\"'\n    ]\n    if location:\n      filter_str.append(f'resource.labels.location=\"{location}\"')\n    if name:\n      filter_str.append(f'resource.labels.cluster_name=\"{name}\"')\n\n    filter_str = '\\n'.join(filter_str)\n    log_entries = local_realtime_query(filter_str)\n\n    if log_entries and LOG_DELETED:\n      op.add_failed(project_path,\n                    reason=op.prep_msg(op.FAILURE_REASON, node=node),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n    else:\n      op.add_ok(project_path, reason=op.prep_msg(op.SUCCESS_REASON, node=node))\n\n\nclass NodePoolUpgrade(runbook.Step):\n  \"\"\"Checks if the node was removed by Cluster Upgrade Operation.\"\"\"\n\n  template = 'nodeunavailability::node_pool_upgrade'\n\n  def execute(self):\n    \"\"\"Checks for Node Upgrade operation logs.\"\"\"\n    project = op.get(flags.PROJECT_ID)\n    location = op.get(flags.LOCATION)\n    node = op.get(flags.NODE)\n    name = op.get(flags.GKE_CLUSTER_NAME)\n    project_path = crm.get_project(project)\n\n    filter_str = [\n        'resource.type=\"k8s_cluster\"',\n        'log_id(\"cloudaudit.googleapis.com/activity\")',\n        'protoPayload.methodName=\"io.k8s.core.v1.nodes.update\"',\n        'protoPayload.request.metadata.annotations.\"gke-current-operation\":\"UPGRADE_NODES\"',\n        f'protoPayload.resourceName=\"core/v1/nodes/{node}\"'\n    ]\n    if location:\n      filter_str.append(f'resource.labels.location=\"{location}\"')\n    if name:\n      filter_str.append(f'resource.labels.cluster_name=\"{name}\"')\n\n    filter_str = '\\n'.join(filter_str)\n    log_entries = local_realtime_query(filter_str)\n\n    if log_entries and LOG_DELETED:\n      op.add_failed(project_path,\n                    reason=op.prep_msg(op.FAILURE_REASON, node=node),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n    else:\n      op.add_ok(project_path, reason=op.prep_msg(op.SUCCESS_REASON, node=node))\n\n\nclass NodeUnavailabilityEnd(runbook.EndStep):\n  \"\"\"Finalizes the diagnostics process for `Node Unavailability`.\n\n  This step prompts the user to confirm satisfaction with the Root Cause\n  Analysis (RCA)\n  performed for `Node Unavailability`.\n\n  Depending on the user's response, it may conclude the runbook execution or\n  trigger additional\n  steps, such as generating a report of the findings.\n  \"\"\"\n\n  def execute(self):\n    \"\"\"Finalize `Node Unavailability` diagnostics.\"\"\"\n    response = op.prompt(\n        kind=op.CONFIRMATION,\n        message=('Are you satisfied with the `GKE Node Unavailability` RCA'\n                 ' performed?'),\n    )\n    if response == op.NO:\n      op.info(message=(\n          \"If no cause for the node's unavailability is found, you could\"\n          ' try the node-auto-repair runbook, which would cover node'\n          ' unavailability due to node repair events.'))\n"
  },
  {
    "path": "gcpdiag/runbook/gke/node_unavailability_test.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test class for gke/NodeUnavailability\"\"\"\n\nimport unittest\nfrom unittest import mock\n\nfrom gcpdiag import config\nfrom gcpdiag.queries import apis_stub\nfrom gcpdiag.runbook import gke, op, snapshot_test_base\nfrom gcpdiag.runbook.gke import flags, node_unavailability\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = gke\n  runbook_name = 'gke/node-unavailability'\n  config.init({'auto': True, 'interface': 'cli'})\n\n  rule_parameters = [{\n      'project_id': 'gcpdiag-gke-cluster-autoscaler-rrrr',\n      'gke_cluster_name': 'gcp-cluster',\n      'node': 'gke-gcp-cluster-default-pool-82e0c046-8m8b',\n      'location': 'europe-west10-a'\n  }]\n\n\nclass MockMessage:\n  \"\"\"Mock messages for testing.\"\"\"\n\n  def get_msg(self, key, **kwargs):\n    del kwargs\n    return f'{key}'\n\n\nclass TestNodeUnavailability(unittest.TestCase):\n  \"\"\"Unit tests for NodeUnavailability runbook.\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    self.enterContext(\n        mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub))\n    self.mock_get_user_email = self.enterContext(\n        mock.patch('gcpdiag.queries.apis.get_user_email'))\n    self.mock_is_enabled = self.enterContext(\n        mock.patch('gcpdiag.queries.apis.is_enabled'))\n    self.mock_is_enabled.return_value = True\n    self.mock_get_user_email.return_value = 'test@example.com'\n\n    self.mock_interface = mock.create_autospec(op.InteractionInterface,\n                                               instance=True)\n    self.mock_interface.rm = mock.Mock()\n    self.operator = op.Operator(self.mock_interface)\n    self.operator.run_id = 'test-run'\n    self.operator.messages = MockMessage()\n    node_unavailability.LOG_PREEMPTED = None\n    node_unavailability.LOG_MIGRATED = None\n    node_unavailability.LOG_DELETED = None\n    self.mock_op_get = self.enterContext(mock.patch('gcpdiag.runbook.op.get'))\n    self.mock_op_add_ok = self.enterContext(\n        mock.patch('gcpdiag.runbook.op.add_ok'))\n    self.mock_op_add_failed = self.enterContext(\n        mock.patch('gcpdiag.runbook.op.add_failed'))\n    self.mock_op_add_skipped = self.enterContext(\n        mock.patch('gcpdiag.runbook.op.add_skipped'))\n    self.mock_op_prompt = self.enterContext(\n        mock.patch('gcpdiag.runbook.op.prompt'))\n    self.mock_op_info = self.enterContext(mock.patch('gcpdiag.runbook.op.info'))\n    self.mock_op_prep_msg = self.enterContext(\n        mock.patch('gcpdiag.runbook.op.prep_msg'))\n    self.mock_crm_get_project = self.enterContext(\n        mock.patch('gcpdiag.queries.crm.get_project'))\n    self.mock_gke_get_clusters = self.enterContext(\n        mock.patch('gcpdiag.queries.gke.get_clusters'))\n\n    self.params = {\n        flags.PROJECT_ID: 'test-project',\n        flags.LOCATION: 'us-central1-a',\n        flags.NODE: 'test-node',\n        flags.GKE_CLUSTER_NAME: 'test-cluster',\n        flags.START_TIME: '2025-01-01T00:00:00Z',\n        flags.END_TIME: '2025-01-01T01:00:00Z',\n    }\n    self.mock_op_get.side_effect = lambda key, default=None: self.params.get(\n        key, default)\n\n    self.mock_project = mock.Mock()\n    self.mock_project.full_path = 'projects/test-project'\n    self.mock_crm_get_project.return_value = self.mock_project\n\n    mock_interface = mock.Mock()\n    operator = op.Operator(mock_interface)\n    operator.set_parameters(self.params)\n    self.enterContext(op.operator_context(operator))\n\n  @mock.patch('gcpdiag.queries.logs.realtime_query')\n  def test_local_realtime_query(self, mock_realtime_query):\n    \"\"\"Test local_realtime_query (Lines 26-32)\"\"\"\n    node_unavailability.local_realtime_query('test-filter')\n    mock_realtime_query.assert_called_once()\n\n  def test_legacy_parameter_handler(self):\n    \"\"\"Test legacy_parameter_handler (Lines 81-82)\"\"\"\n    runbook_instance = node_unavailability.NodeUnavailability()\n    params = {flags.NAME: 'cluster-name'}\n    runbook_instance.legacy_parameter_handler(params)\n    self.assertEqual(params[flags.GKE_CLUSTER_NAME], 'cluster-name')\n    self.assertNotIn(flags.NAME, params)\n\n  def test_build_tree(self):\n    \"\"\"Test build_tree (Lines 86-97)\"\"\"\n    runbook_instance = node_unavailability.NodeUnavailability()\n    runbook_instance.build_tree()\n    self.assertIsInstance(runbook_instance.start,\n                          node_unavailability.NodeUnavailabilityStart)\n\n  def test_node_unavailability_start_no_clusters(self):\n    \"\"\"Test NodeUnavailabilityStart when no clusters are found (Lines 118-121)\"\"\"\n    self.mock_gke_get_clusters.return_value = []\n    step = node_unavailability.NodeUnavailabilityStart()\n    step.execute()\n    self.mock_op_add_skipped.assert_called_once_with(mock.ANY, reason=mock.ANY)\n\n  @mock.patch('gcpdiag.runbook.gke.node_unavailability.local_realtime_query')\n  def test_node_unavailability_start_no_logs(self, mock_local_query):\n    \"\"\"Test NodeUnavailabilityStart when no unavailability logs are found (Lines 153-162)\"\"\"\n    self.mock_gke_get_clusters.return_value = ['cluster1']\n    mock_local_query.return_value = []  # Return empty for all log queries\n    step = node_unavailability.NodeUnavailabilityStart()\n    step.execute()\n    self.mock_op_add_skipped.assert_called_once()\n\n  def test_live_migration_failed(self):\n    \"\"\"Test LiveMigration step when logs are present (Lines 177-179)\"\"\"\n    node_unavailability.LOG_MIGRATED = ['log-entry']\n    step = node_unavailability.LiveMigration()\n    step.execute()\n    self.mock_op_add_failed.assert_called_once()\n\n  def test_live_migration_ok(self):\n    \"\"\"Test LiveMigration step when no logs are present (Line 181)\"\"\"\n    node_unavailability.LOG_MIGRATED = []\n    step = node_unavailability.LiveMigration()\n    step.execute()\n    self.mock_op_add_ok.assert_called_once()\n\n  def test_preemption_failed(self):\n    \"\"\"Test PreemptionCondition step when logs are present (Lines 196-198)\"\"\"\n    node_unavailability.LOG_PREEMPTED = ['log-entry']\n    step = node_unavailability.PreemptionCondition()\n    step.execute()\n    self.mock_op_add_failed.assert_called_once()\n\n  def test_preemption_ok(self):\n    \"\"\"Test PreemptionCondition step when no logs are present (Line 200)\"\"\"\n    node_unavailability.LOG_PREEMPTED = []\n    step = node_unavailability.PreemptionCondition()\n    step.execute()\n    self.mock_op_add_ok.assert_called_once()\n\n  @mock.patch('gcpdiag.runbook.gke.node_unavailability.local_realtime_query')\n  def test_autoscaler_removal_failed(self, mock_local_query):\n    \"\"\"Test NodeRemovedByAutoscaler when logs exist (Lines 229-231)\"\"\"\n    mock_local_query.return_value = ['scale-down-log']\n    node_unavailability.LOG_DELETED = ['delete-log']\n    step = node_unavailability.NodeRemovedByAutoscaler()\n    step.execute()\n    self.mock_op_add_failed.assert_called_once()\n\n  @mock.patch('gcpdiag.runbook.gke.node_unavailability.local_realtime_query')\n  def test_autoscaler_removal_ok(self, mock_local_query):\n    \"\"\"Test NodeRemovedByAutoscaler when no scale-down logs exist (Line 234)\"\"\"\n    mock_local_query.return_value = []\n    step = node_unavailability.NodeRemovedByAutoscaler()\n    step.execute()\n    self.mock_op_add_ok.assert_called_once()\n\n  @mock.patch('gcpdiag.runbook.gke.node_unavailability.local_realtime_query')\n  def test_node_pool_upgrade_failed(self, mock_local_query):\n    \"\"\"Test NodePoolUpgrade when logs exist (Lines 265-267)\"\"\"\n    mock_local_query.return_value = ['upgrade-log']\n    node_unavailability.LOG_DELETED = ['delete-log']\n    step = node_unavailability.NodePoolUpgrade()\n    step.execute()\n    self.mock_op_add_failed.assert_called_once()\n\n  @mock.patch('gcpdiag.runbook.gke.node_unavailability.local_realtime_query')\n  def test_node_pool_upgrade_ok(self, mock_local_query):\n    \"\"\"Test NodePoolUpgrade when no upgrade logs exist (Line 270)\"\"\"\n    mock_local_query.return_value = []\n    step = node_unavailability.NodePoolUpgrade()\n    step.execute()\n    self.mock_op_add_ok.assert_called_once()\n\n  def test_node_unavailability_end_not_satisfied(self):\n    \"\"\"Test NodeUnavailabilityEnd when user is not satisfied (Lines 291-293)\"\"\"\n    self.mock_op_prompt.return_value = op.NO\n    step = node_unavailability.NodeUnavailabilityEnd()\n    step.execute()\n    self.mock_op_info.assert_called_once()\n"
  },
  {
    "path": "gcpdiag/runbook/gke/resource_quotas.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"GKE Resource Quotas runbook\"\"\"\n\nfrom datetime import datetime\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import runbook\nfrom gcpdiag.queries import crm, gke, logs\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.gcp import generalized_steps as gcp_gs\nfrom gcpdiag.runbook.gke import flags\nfrom gcpdiag.utils import GcpApiError, Version\n\n\nclass ResourceQuotas(runbook.DiagnosticTree):\n  \"\"\"Analyses logs in the project where the cluster is running.\n\n  If there are log entries that contain messages listed in the public documentation\n  https://cloud.google.com/knowledge/kb/google-kubernetes-engine-pods-fail-to-start-due-to-exceeded-quota-000004701\n  then provide details on how this issue can be solved.\n  \"\"\"\n\n  # Specify parameters common to all steps in the diagnostic tree class.\n  parameters = {\n      flags.PROJECT_ID: {\n          'type': str,\n          'help': 'The Project ID of the resource under investigation',\n          'required': True,\n      },\n      flags.NAME: {\n          'type': str,\n          'help': ('The name of the GKE cluster, to limit search only for this'\n                   ' cluster'),\n          'deprecated': True,\n          'new_parameter': 'gke_cluster_name',\n      },\n      flags.GKE_CLUSTER_NAME: {\n          'type': str,\n          'help': ('The name of the GKE cluster, to limit search only for'\n                   ' this cluster'),\n          'required': True,\n      },\n      flags.LOCATION: {\n          'type': str,\n          'help': '(Optional) The zone or region of the GKE cluster',\n          'required': True,\n      },\n      flags.START_TIME: {\n          'type': datetime,\n          'help': ('(Optional) The start window to query the logs. Format:'\n                   ' YYYY-MM-DDTHH:MM:SSZ'),\n          'required': False,\n      },\n      flags.END_TIME: {\n          'type': datetime,\n          'help': ('(Optional) The end window for the logs. Format:'\n                   ' YYYY-MM-DDTHH:MM:SSZ'),\n          'required': False,\n      },\n  }\n\n  def legacy_parameter_handler(self, parameters):\n    if flags.NAME in parameters:\n      parameters[flags.GKE_CLUSTER_NAME] = parameters.pop(flags.NAME)\n\n  def build_tree(self):\n\n    start = ResourceQuotasStart()\n    project_logging_check = gcp_gs.ServiceApiStatusCheck()\n    project_logging_check.api_name = 'logging'\n    project_logging_check.project_id = op.get(flags.PROJECT_ID)\n    project_logging_check.expected_state = gcp_gs.constants.APIState.ENABLED\n\n    clusterversion = ClusterVersion()\n    end = ResourceQuotasEnd()\n\n    self.add_start(step=start)\n    self.add_step(parent=start, child=project_logging_check)\n    self.add_step(parent=project_logging_check, child=clusterversion)\n    self.add_end(step=end)\n\n\nclass ResourceQuotasStart(runbook.StartStep):\n  \"\"\"Initiates diagnostics for Resource Quotas.\n\n  Check\n  - if logging API is enabled\n  - if there are GKE clusters in the project\n  - if a cluster name is provided, verify if that cluster exists in the project\n  - if a location is provided, verify there are clusters in that location\n  - if both a location and a name are provided, verify that the cluster exists at that location\n  \"\"\"\n\n  def execute(self):\n    \"\"\"\n    Check the provided parameters.\n    \"\"\"\n    project = crm.get_project(op.get(flags.PROJECT_ID))\n    try:\n      cluster = gke.get_cluster(op.get(flags.PROJECT_ID),\n                                cluster_id=op.get(flags.GKE_CLUSTER_NAME),\n                                location=op.get(flags.LOCATION))\n    except GcpApiError:\n      op.add_skipped(\n          project,\n          reason=('Cluster {} does not exist in {} for project {}').format(\n              op.get(flags.GKE_CLUSTER_NAME), op.get(flags.LOCATION),\n              op.get(flags.PROJECT_ID)))\n    else:\n      op.add_ok(project,\n                reason=('Cluster {} found in {} for project {}').format(\n                    cluster.name, op.get(flags.LOCATION),\n                    op.get(flags.PROJECT_ID)))\n\n\nclass ClusterVersion(runbook.Step):\n  \"\"\"Check for cluster version\"\"\"\n  GKE_QUOTA_ENFORCEMENT_MIN_VERSION = Version('1.28.0')\n\n  def execute(self):\n    \"\"\"\n    Verify cluster's running version. GKE doesn't enforce the Kubernetes\n    resource quotas for clusters running version 1.28 or later.\n    \"\"\"\n    cluster = gke.get_cluster(op.get(flags.PROJECT_ID),\n                              cluster_id=op.get(flags.GKE_CLUSTER_NAME),\n                              location=op.get(flags.LOCATION))\n    resource_quota_exceeded = ResourceQuotaExceeded()\n    resource_quota_exceeded.cluster_name = cluster.name\n    resource_quota_exceeded.project_id = op.get(flags.PROJECT_ID)\n    resource_quota_exceeded.cluster_location = cluster.location\n\n    if cluster.master_version >= self.GKE_QUOTA_ENFORCEMENT_MIN_VERSION:\n      resource_quota_exceeded.template = 'resourcequotas::higher_version_quota_exceeded'\n    else:\n      resource_quota_exceeded.template = 'resourcequotas::lower_version_quota_exceeded'\n    self.add_child(resource_quota_exceeded)\n\n\nclass ResourceQuotaExceeded(runbook.Step):\n  \"\"\"Verify that Kubernetes resource quotas have not been exceeded.\"\"\"\n  cluster_name: str\n  cluster_location: str\n  project_id: str\n  template: str = 'resourcequotas::lower_version_quota_exceeded'\n\n  def execute(self):\n    \"\"\"Verify that Kubernetes resource quotas for cluster\n\n    project/{project_id}/locations/{cluster_location}/clusters/{cluster_name} were not\n    exceeded between {start_time} and {end_time}\n    \"\"\"\n\n    project = crm.get_project(self.project_id)\n    filter_list = [\n        'log_id(\"cloudaudit.googleapis.com/activity\")',\n        'resource.type=\"k8s_cluster\"',\n        f'resource.labels.location=\"{self.cluster_location}\"',\n        f'resource.labels.cluster_name=\"{self.cluster_name}\"',\n        'protoPayload.status.message:\"forbidden: exceeded quota\"'\n    ]\n\n    filter_str = '\\n'.join(filter_list)\n\n    log_entries = logs.realtime_query(project_id=project.project_id,\n                                      filter_str=filter_str,\n                                      start_time=op.get(flags.START_TIME),\n                                      end_time=op.get(flags.END_TIME))\n\n    if log_entries:\n      # taking the last log entry to provide as output, because the latest log entry is always\n      # more relevant than the 1st\n\n      json_payload = get_path(log_entries[-1], ('protoPayload', 'status'),\n                              default={})\n      sample_log = f\"Log Message: {json_payload.get('message', 'N/A')}\"\n\n      op.add_failed(project,\n                    reason=op.prep_msg(op.FAILURE_REASON,\n                                       log_entry=sample_log,\n                                       cluster=self.cluster_name,\n                                       project=project,\n                                       location=self.cluster_location,\n                                       start_time=op.get(flags.START_TIME),\n                                       end_time=op.get(flags.END_TIME)),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n    else:\n      op.add_ok(project,\n                reason=op.prep_msg(op.SUCCESS_REASON,\n                                   cluster=self.cluster_name,\n                                   project=project,\n                                   location=self.cluster_location,\n                                   start_time=op.get(flags.START_TIME),\n                                   end_time=op.get(flags.END_TIME)))\n\n\nclass ResourceQuotasEnd(runbook.EndStep):\n  \"\"\"Finalizes the diagnostics process for `Resource Quotas`.\n\n  This step prompts the user to confirm satisfaction with the Root Cause Analysis (RCA)\n  performed for `Resource Quotas`.\n\n  Depending on the user's response, it may conclude the runbook execution or trigger additional\n  steps, such as generating a report of the findings.\n  \"\"\"\n\n  def execute(self):\n    \"\"\"Finalize `Resource Quotas` diagnostics.\"\"\"\n    response = op.prompt(\n        kind=op.CONFIRMATION,\n        message='Are you satisfied with the `GKE Resource Quotas` RCA performed?'\n    )\n    if response == op.NO:\n      op.info(message=op.END_MESSAGE)\n"
  },
  {
    "path": "gcpdiag/runbook/gke/resource_quotas_test.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test class for gke/ResourceQuotas\"\"\"\n\nimport unittest\nfrom unittest import mock\n\nfrom gcpdiag import config\nfrom gcpdiag.queries import apis_stub\nfrom gcpdiag.runbook import gke, op, snapshot_test_base\nfrom gcpdiag.runbook.gke import flags, resource_quotas\nfrom gcpdiag.utils import GcpApiError, Version\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = gke\n  runbook_name = 'gke/resource-quotas'\n  config.init({'auto': True, 'interface': 'cli'})\n\n  rule_parameters = [{\n      'project_id': 'gcpdiag-gke-cluster-autoscaler-rrrr',\n      'gke_cluster_name': 'gcp-cluster',\n      'location': 'europe-west10-a',\n      'end_time': '2024-12-09T07:40:16Z',\n      'start_time': '2024-12-08T07:40:16Z',\n  }]\n\n\nclass MockMessage:\n  \"\"\"Mock messages for testing.\"\"\"\n\n  def get_msg(self, key, **kwargs):\n    del kwargs\n    return f'{key}'\n\n\nclass TestResourceQuotas(unittest.TestCase):\n  \"\"\"Unit tests covering resource_quotas.\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    self.enterContext(\n        mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub))\n    self.mock_get_user_email = self.enterContext(\n        mock.patch('gcpdiag.queries.apis.get_user_email'))\n    self.mock_is_enabled = self.enterContext(\n        mock.patch('gcpdiag.queries.apis.is_enabled'))\n    self.mock_is_enabled.return_value = True\n    self.mock_get_user_email.return_value = 'test@example.com'\n\n    self.mock_interface = mock.create_autospec(op.InteractionInterface,\n                                               instance=True)\n    self.mock_interface.rm = mock.Mock()\n    self.operator = op.Operator(self.mock_interface)\n    self.operator.run_id = 'test-run'\n    self.operator.messages = MockMessage()\n    self.mock_op_get = self.enterContext(mock.patch('gcpdiag.runbook.op.get'))\n    self.mock_op_add_ok = self.enterContext(\n        mock.patch('gcpdiag.runbook.op.add_ok'))\n    self.mock_op_add_failed = self.enterContext(\n        mock.patch('gcpdiag.runbook.op.add_failed'))\n    self.mock_op_add_skipped = self.enterContext(\n        mock.patch('gcpdiag.runbook.op.add_skipped'))\n    self.mock_op_prompt = self.enterContext(\n        mock.patch('gcpdiag.runbook.op.prompt'))\n    self.mock_op_info = self.enterContext(mock.patch('gcpdiag.runbook.op.info'))\n    self.mock_op_prep_msg = self.enterContext(\n        mock.patch('gcpdiag.runbook.op.prep_msg'))\n    self.mock_crm_get_project = self.enterContext(\n        mock.patch('gcpdiag.queries.crm.get_project'))\n    self.mock_gke_get_cluster = self.enterContext(\n        mock.patch('gcpdiag.queries.gke.get_cluster'))\n\n    self.params = {\n        flags.PROJECT_ID: 'test-project',\n        flags.GKE_CLUSTER_NAME: 'test-cluster',\n        flags.LOCATION: 'us-central1-a',\n        flags.START_TIME: '2025-01-01T00:00:00Z',\n        flags.END_TIME: '2025-01-01T01:00:00Z',\n    }\n    self.mock_op_get.side_effect = lambda k: self.params[k]\n\n    self.mock_project = mock.Mock()\n    self.mock_project.full_path = 'projects/test-project'\n    self.mock_crm_get_project.return_value = self.mock_project\n\n    mock_interface = mock.Mock()\n    operator = op.Operator(mock_interface)\n    operator.set_parameters(self.params)\n    self.enterContext(op.operator_context(operator))\n\n  def test_legacy_parameter_handler_renames_name_to_cluster_name(self):\n    \"\"\"legacy_parameter_handler should map 'name' to 'gke_cluster_name'.\"\"\"\n    rq = resource_quotas.ResourceQuotas()\n    parameters = {flags.NAME: 'my-cluster'}\n    rq.legacy_parameter_handler(parameters)\n    self.assertNotIn(flags.NAME, parameters)\n    self.assertEqual(parameters[flags.GKE_CLUSTER_NAME], 'my-cluster')\n\n  def test_build_tree_correctly_assembles_diagnostic_dag(self):\n    \"\"\"build_tree should add steps to the diagnostic tree.\"\"\"\n    rq = resource_quotas.ResourceQuotas()\n    rq.build_tree()\n    self.assertIsNotNone(rq.start)\n\n  def test_start_step_cluster_found_reports_ok(self):\n    \"\"\"ResourceQuotasStart reports OK when the cluster exists.\"\"\"\n    step = resource_quotas.ResourceQuotasStart()\n    self.mock_gke_get_cluster.return_value = mock.Mock(name='my-cluster')\n    step.execute()\n    self.mock_op_add_ok.assert_called_once()\n\n  def test_start_step_cluster_not_found_reports_skipped(self):\n    \"\"\"ResourceQuotasStart reports SKIPPED when GcpApiError occurs.\"\"\"\n    step = resource_quotas.ResourceQuotasStart()\n    self.mock_gke_get_cluster.side_effect = GcpApiError('not found')\n    step.execute()\n    self.mock_op_add_skipped.assert_called_once()\n\n  def test_cluster_version_step_assigns_higher_version_template(self):\n    \"\"\"ClusterVersion uses higher_version template for GKE versions >= 1.28.\"\"\"\n    step = resource_quotas.ClusterVersion()\n    self.mock_gke_get_cluster.return_value = mock.Mock(\n        master_version=Version('1.28.0'), name='c', location='l')\n    step.add_child = mock.Mock()\n    step.execute()\n    child = step.add_child.call_args[0][0]\n    self.assertEqual(child.template,\n                     'resourcequotas::higher_version_quota_exceeded')\n\n  def test_cluster_version_step_assigns_lower_version_template(self):\n    \"\"\"ClusterVersion uses lower_version template for GKE versions < 1.28.\"\"\"\n    step = resource_quotas.ClusterVersion()\n    self.mock_gke_get_cluster.return_value = mock.Mock(\n        master_version=Version('1.27.0'), name='c', location='l')\n    step.add_child = mock.Mock()\n    step.execute()\n    child = step.add_child.call_args[0][0]\n    self.assertEqual(child.template,\n                     'resourcequotas::lower_version_quota_exceeded')\n\n  @mock.patch('gcpdiag.queries.logs.realtime_query')\n  def test_quota_exceeded_step_reports_failure_when_logs_found(\n      self, mock_logs_query):\n    \"\"\"ResourceQuotaExceeded reports FAILURE when quota logs are identified.\"\"\"\n    step = resource_quotas.ResourceQuotaExceeded()\n    step.project_id, step.cluster_name, step.cluster_location = 'p', 'c', 'l'\n    self.mock_crm_get_project.return_value = mock.Mock(project_id='p')\n    mock_logs_query.return_value = [{\n        'protoPayload': {\n            'status': {\n                'message': 'exceeded quota'\n            }\n        }\n    }]\n    step.execute()\n    self.mock_op_add_failed.assert_called_once()\n\n  @mock.patch('gcpdiag.queries.logs.realtime_query')\n  def test_quota_exceeded_step_reports_ok_when_no_logs_found(\n      self, mock_logs_query):\n    \"\"\"ResourceQuotaExceeded reports OK when no relevant logs are found.\"\"\"\n    step = resource_quotas.ResourceQuotaExceeded()\n    step.project_id, step.cluster_name, step.cluster_location = 'p', 'c', 'l'\n    self.mock_crm_get_project.return_value = mock.Mock(project_id='p')\n    mock_logs_query.return_value = []\n    step.execute()\n    self.mock_op_add_ok.assert_called_once()\n\n  def test_end_step_shows_info_on_negative_user_response(self):\n    \"\"\"ResourceQuotasEnd displays end message when user responds 'NO'.\"\"\"\n    step = resource_quotas.ResourceQuotasEnd()\n    self.mock_op_prompt.return_value = resource_quotas.op.NO\n    step.execute()\n    self.mock_op_info.assert_called_once_with(\n        message=resource_quotas.op.END_MESSAGE)\n"
  },
  {
    "path": "gcpdiag/runbook/gke/snapshots/cluster_autoscaler.txt",
    "content": "gke_cluster_name=gcp-cluster,location=europe-west10,project_id=gcpdiag-gke-cluster-autoscaler-rrrr\n\ngke/cluster-autoscaler: Analyses logs in the project where the cluster is running.\n\n  If there are log entries that contain messages listed in the public documentation\n  https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-autoscaler-visibility#messages\n  then provide details on how each particular issue can be solved.\n\n  The following ScaleUP logs messages are covered:\n  - scale.up.error.out.of.resources\n  - scale.up.error.quota.exceeded\n  - scale.up.error.waiting.for.instances.timeout\n  - scale.up.error.ip.space.exhausted\n  - scale.up.error.service.account.deleted\n\n  The following ScaleDown logs messages are covered:\n  - scale.down.error.failed.to.evict.pods\n  - no.scale.down.node.node.group.min.size.reached\n  - no.scale.down.node.scale.down.disabled.annotation\n  - no.scale.down.node.minimal.resource.limits.exceeded\n  - no.scale.down.node.no.place.to.move.pods\n  - no.scale.down.node.pod.not.backed.by.controller\n  - no.scale.down.node.pod.not.safe.to.evict.annotation\n  - no.scale.down.node.pod.kube.system.unmovable\n  - no.scale.down.node.pod.not.enough.pdb\n  - no.scale.down.node.pod.controller.not.found\n  - no.scale.down.node.pod.unexpected.error\n\n  \n[START]: Check the provided parameters.\n[AUTOMATED STEP]: Check for \"scale.up.error.out.of.resources\" log entries\n\n   - gcpdiag-gke-cluster-autoscaler-rrrr                                  [FAIL]\n     [REASON]\n     The scaleUp event failed because some of the MIGs could not be increased due to lack of resources.\n     Example log entry that would help identify involved objects:\n\n     {\n       \"protoPayload\": {\n         \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n         \"authenticationInfo\": {\n           \"principalEmail\": \"service-12340002@container-engine-robot.iam.gserviceaccount.com\"\n         },\n         \"requestMetadata\": {\n           \"callerIp\": \"2002:a17:907:3ea4::\",\n           \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 GoogleContainerEngine/v1\"\n         },\n         \"serviceName\": \"compute.googleapis.com\",\n         \"methodName\": \"beta.compute.instanceGroupManagers.insert\",\n         \"resourceName\": \"projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-dc4a8b29-grp\",\n         \"request\": {\n           \"@type\": \"type.googleapis.com/compute.instanceGroupManagers.insert\"\n         }\n       },\n       \"insertId\": \"-tt9mudi768\",\n       \"resource\": {\n         \"type\": \"gce_instance_group_manager\",\n         \"labels\": {\n           \"location\": \"europe-west4-a\",\n           \"instance_group_manager_id\": \"318228385164940970\",\n           \"project_id\": \"gcpdiag-gke1-aaaa\",\n           \"instance_group_manager_name\": \"gke-gke1-default-pool-dc4a8b29-grp\"\n         }\n       },\n       \"timestamp\": \"2021-11-24T16:29:21.943390Z\",\n       \"severity\": \"NOTICE\",\n       \"logName\": \"projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n       \"operation\": {\n         \"id\": \"operation-1637771331527-5d18b5a706163-f238dbec-106555c8\",\n         \"producer\": \"compute.googleapis.com\",\n         \"last\": true\n       },\n       \"receiveTimestamp\": \"2021-11-24T16:29:22.710110506Z\"\n     }\n\n     [REMEDIATION]\n     Follow the documentation:\n     <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-vm-creation#resource_availability>\n\n[AUTOMATED STEP]: Check for \"scale.up.error.quota.exceeded\" log entries\n\n   - gcpdiag-gke-cluster-autoscaler-rrrr                                  [FAIL]\n     [REASON]\n     The scaleUp event failed because some of the MIGs could not be increased, due to exceeded Compute Engine quota.\n     Example log entry that would help identify involved objects:\n\n     {\n       \"protoPayload\": {\n         \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n         \"authenticationInfo\": {\n           \"principalEmail\": \"service-12340002@container-engine-robot.iam.gserviceaccount.com\"\n         },\n         \"requestMetadata\": {\n           \"callerIp\": \"2002:a17:907:3ea4::\",\n           \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 GoogleContainerEngine/v1\"\n         },\n         \"serviceName\": \"compute.googleapis.com\",\n         \"methodName\": \"beta.compute.instanceGroupManagers.insert\",\n         \"resourceName\": \"projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-dc4a8b29-grp\",\n         \"request\": {\n           \"@type\": \"type.googleapis.com/compute.instanceGroupManagers.insert\"\n         }\n       },\n       \"insertId\": \"-tt9mudi768\",\n       \"resource\": {\n         \"type\": \"gce_instance_group_manager\",\n         \"labels\": {\n           \"location\": \"europe-west4-a\",\n           \"instance_group_manager_id\": \"318228385164940970\",\n           \"project_id\": \"gcpdiag-gke1-aaaa\",\n           \"instance_group_manager_name\": \"gke-gke1-default-pool-dc4a8b29-grp\"\n         }\n       },\n       \"timestamp\": \"2021-11-24T16:29:21.943390Z\",\n       \"severity\": \"NOTICE\",\n       \"logName\": \"projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n       \"operation\": {\n         \"id\": \"operation-1637771331527-5d18b5a706163-f238dbec-106555c8\",\n         \"producer\": \"compute.googleapis.com\",\n         \"last\": true\n       },\n       \"receiveTimestamp\": \"2021-11-24T16:29:22.710110506Z\"\n     }\n\n     [REMEDIATION]\n     Check the Errors tab of the MIG in Google Cloud console to see what quota is being exceeded. Follow the instructions to\n     request a quota increase:\n     <https://cloud.google.com/compute/quotas#requesting_additional_quota>\n\n[AUTOMATED STEP]: Check for \"scale.up.error.waiting.for.instances.timeout\" log entries\n\n   - gcpdiag-gke-cluster-autoscaler-rrrr                                  [FAIL]\n     [REASON]\n     The scaleUp event failed because instances in some of the MIGs failed to appear in time.\n     Example log entry that would help identify involved objects:\n\n     {\n       \"protoPayload\": {\n         \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n         \"authenticationInfo\": {\n           \"principalEmail\": \"service-12340002@container-engine-robot.iam.gserviceaccount.com\"\n         },\n         \"requestMetadata\": {\n           \"callerIp\": \"2002:a17:907:3ea4::\",\n           \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 GoogleContainerEngine/v1\"\n         },\n         \"serviceName\": \"compute.googleapis.com\",\n         \"methodName\": \"beta.compute.instanceGroupManagers.insert\",\n         \"resourceName\": \"projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-dc4a8b29-grp\",\n         \"request\": {\n           \"@type\": \"type.googleapis.com/compute.instanceGroupManagers.insert\"\n         }\n       },\n       \"insertId\": \"-tt9mudi768\",\n       \"resource\": {\n         \"type\": \"gce_instance_group_manager\",\n         \"labels\": {\n           \"location\": \"europe-west4-a\",\n           \"instance_group_manager_id\": \"318228385164940970\",\n           \"project_id\": \"gcpdiag-gke1-aaaa\",\n           \"instance_group_manager_name\": \"gke-gke1-default-pool-dc4a8b29-grp\"\n         }\n       },\n       \"timestamp\": \"2021-11-24T16:29:21.943390Z\",\n       \"severity\": \"NOTICE\",\n       \"logName\": \"projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n       \"operation\": {\n         \"id\": \"operation-1637771331527-5d18b5a706163-f238dbec-106555c8\",\n         \"producer\": \"compute.googleapis.com\",\n         \"last\": true\n       },\n       \"receiveTimestamp\": \"2021-11-24T16:29:22.710110506Z\"\n     }\n\n     [REMEDIATION]\n     This message is transient. If it persists, engage Google Cloud Support for further investigation.\n\n[AUTOMATED STEP]: Check for \"scale.up.error.ip.space.exhausted\" log entries\n\n   - gcpdiag-gke-cluster-autoscaler-rrrr                                  [FAIL]\n     [REASON]\n     The scaleUp event failed because the cluster doesn't have enough unallocated IP address space to use to add new nodes or\n     Pods.\n     Example log entry that would help identify involved objects:\n\n     {\n       \"protoPayload\": {\n         \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n         \"authenticationInfo\": {\n           \"principalEmail\": \"service-12340002@container-engine-robot.iam.gserviceaccount.com\"\n         },\n         \"requestMetadata\": {\n           \"callerIp\": \"2002:a17:907:3ea4::\",\n           \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 GoogleContainerEngine/v1\"\n         },\n         \"serviceName\": \"compute.googleapis.com\",\n         \"methodName\": \"beta.compute.instanceGroupManagers.insert\",\n         \"resourceName\": \"projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-dc4a8b29-grp\",\n         \"request\": {\n           \"@type\": \"type.googleapis.com/compute.instanceGroupManagers.insert\"\n         }\n       },\n       \"insertId\": \"-tt9mudi768\",\n       \"resource\": {\n         \"type\": \"gce_instance_group_manager\",\n         \"labels\": {\n           \"location\": \"europe-west4-a\",\n           \"instance_group_manager_id\": \"318228385164940970\",\n           \"project_id\": \"gcpdiag-gke1-aaaa\",\n           \"instance_group_manager_name\": \"gke-gke1-default-pool-dc4a8b29-grp\"\n         }\n       },\n       \"timestamp\": \"2021-11-24T16:29:21.943390Z\",\n       \"severity\": \"NOTICE\",\n       \"logName\": \"projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n       \"operation\": {\n         \"id\": \"operation-1637771331527-5d18b5a706163-f238dbec-106555c8\",\n         \"producer\": \"compute.googleapis.com\",\n         \"last\": true\n       },\n       \"receiveTimestamp\": \"2021-11-24T16:29:22.710110506Z\"\n     }\n\n     [REMEDIATION]\n     Refer to the troubleshooting steps to address the lack of IP address space for the nodes or pods.\n     <https://cloud.google.com/kubernetes-engine/docs/how-to/alias-ips#not_enough_space>\n\n[AUTOMATED STEP]: Check for \"scale.up.error.service.account.deleted\" log entries\n\n   - gcpdiag-gke-cluster-autoscaler-rrrr                                  [FAIL]\n     [REASON]\n     The scaleUp event failed because a service account used by Cluster Autoscaler has been deleted.\n     Example log entry that would help identify involved objects:\n\n     {\n       \"protoPayload\": {\n         \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n         \"authenticationInfo\": {\n           \"principalEmail\": \"service-12340002@container-engine-robot.iam.gserviceaccount.com\"\n         },\n         \"requestMetadata\": {\n           \"callerIp\": \"2002:a17:907:3ea4::\",\n           \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 GoogleContainerEngine/v1\"\n         },\n         \"serviceName\": \"compute.googleapis.com\",\n         \"methodName\": \"beta.compute.instanceGroupManagers.insert\",\n         \"resourceName\": \"projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-dc4a8b29-grp\",\n         \"request\": {\n           \"@type\": \"type.googleapis.com/compute.instanceGroupManagers.insert\"\n         }\n       },\n       \"insertId\": \"-tt9mudi768\",\n       \"resource\": {\n         \"type\": \"gce_instance_group_manager\",\n         \"labels\": {\n           \"location\": \"europe-west4-a\",\n           \"instance_group_manager_id\": \"318228385164940970\",\n           \"project_id\": \"gcpdiag-gke1-aaaa\",\n           \"instance_group_manager_name\": \"gke-gke1-default-pool-dc4a8b29-grp\"\n         }\n       },\n       \"timestamp\": \"2021-11-24T16:29:21.943390Z\",\n       \"severity\": \"NOTICE\",\n       \"logName\": \"projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n       \"operation\": {\n         \"id\": \"operation-1637771331527-5d18b5a706163-f238dbec-106555c8\",\n         \"producer\": \"compute.googleapis.com\",\n         \"last\": true\n       },\n       \"receiveTimestamp\": \"2021-11-24T16:29:22.710110506Z\"\n     }\n\n     [REMEDIATION]\n     Engage Google Cloud Support for further investigation.\n\n[AUTOMATED STEP]: Check for \"no.scale.down.node.node.group.min.size.reached\" log entries\n\n   - gcpdiag-gke-cluster-autoscaler-rrrr                                  [FAIL]\n     [REASON]\n     Node cannot be removed because its node group is already at its minimum size.\n     Example log entry that would help identify involved objects:\n\n     {\n       \"protoPayload\": {\n         \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n         \"authenticationInfo\": {\n           \"principalEmail\": \"service-12340002@container-engine-robot.iam.gserviceaccount.com\"\n         },\n         \"requestMetadata\": {\n           \"callerIp\": \"2002:a17:907:3ea4::\",\n           \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 GoogleContainerEngine/v1\"\n         },\n         \"serviceName\": \"compute.googleapis.com\",\n         \"methodName\": \"beta.compute.instanceGroupManagers.insert\",\n         \"resourceName\": \"projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-dc4a8b29-grp\",\n         \"request\": {\n           \"@type\": \"type.googleapis.com/compute.instanceGroupManagers.insert\"\n         }\n       },\n       \"insertId\": \"-tt9mudi768\",\n       \"resource\": {\n         \"type\": \"gce_instance_group_manager\",\n         \"labels\": {\n           \"location\": \"europe-west4-a\",\n           \"instance_group_manager_id\": \"318228385164940970\",\n           \"project_id\": \"gcpdiag-gke1-aaaa\",\n           \"instance_group_manager_name\": \"gke-gke1-default-pool-dc4a8b29-grp\"\n         }\n       },\n       \"timestamp\": \"2021-11-24T16:29:21.943390Z\",\n       \"severity\": \"NOTICE\",\n       \"logName\": \"projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n       \"operation\": {\n         \"id\": \"operation-1637771331527-5d18b5a706163-f238dbec-106555c8\",\n         \"producer\": \"compute.googleapis.com\",\n         \"last\": true\n       },\n       \"receiveTimestamp\": \"2021-11-24T16:29:22.710110506Z\"\n     }\n\n     [REMEDIATION]\n     Review and adjust the minimum value set for node pool autoscaling.\n     <https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-autoscaler#resizing_a_node_pool>\n\n[AUTOMATED STEP]: Check for \"scale.down.error.failed.to.evict.pods\" log entries\n\n   - gcpdiag-gke-cluster-autoscaler-rrrr                                  [FAIL]\n     [REASON]\n     The scaleDown event failed because some of the Pods could not be evicted from a node.\n     Example log entry that would help identify involved objects:\n\n     {\n       \"protoPayload\": {\n         \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n         \"authenticationInfo\": {\n           \"principalEmail\": \"service-12340002@container-engine-robot.iam.gserviceaccount.com\"\n         },\n         \"requestMetadata\": {\n           \"callerIp\": \"2002:a17:907:3ea4::\",\n           \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 GoogleContainerEngine/v1\"\n         },\n         \"serviceName\": \"compute.googleapis.com\",\n         \"methodName\": \"beta.compute.instanceGroupManagers.insert\",\n         \"resourceName\": \"projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-dc4a8b29-grp\",\n         \"request\": {\n           \"@type\": \"type.googleapis.com/compute.instanceGroupManagers.insert\"\n         }\n       },\n       \"insertId\": \"-tt9mudi768\",\n       \"resource\": {\n         \"type\": \"gce_instance_group_manager\",\n         \"labels\": {\n           \"location\": \"europe-west4-a\",\n           \"instance_group_manager_id\": \"318228385164940970\",\n           \"project_id\": \"gcpdiag-gke1-aaaa\",\n           \"instance_group_manager_name\": \"gke-gke1-default-pool-dc4a8b29-grp\"\n         }\n       },\n       \"timestamp\": \"2021-11-24T16:29:21.943390Z\",\n       \"severity\": \"NOTICE\",\n       \"logName\": \"projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n       \"operation\": {\n         \"id\": \"operation-1637771331527-5d18b5a706163-f238dbec-106555c8\",\n         \"producer\": \"compute.googleapis.com\",\n         \"last\": true\n       },\n       \"receiveTimestamp\": \"2021-11-24T16:29:22.710110506Z\"\n     }\n\n     [REMEDIATION]\n     Review best practices for Pod Disruption Budgets to ensure that the rules allow for eviction of application replicas\n     when acceptable.\n     <https://cloud.google.com/architecture/best-practices-for-running-cost-effective-kubernetes-applications-on-gke#add-pod_disruption_budget-to-your-application>\n\n[AUTOMATED STEP]: Check for \"no.scale.down.node.scale.down.disabled.annotation\" log entries\n\n   - gcpdiag-gke-cluster-autoscaler-rrrr                                  [FAIL]\n     [REASON]\n     The scaleDown event failed because the node is annotated with cluster-autoscaler.kubernetes.io/scale-down-disabled:\n     true.\n     Example log entry that would help identify involved objects:\n\n     {\n       \"protoPayload\": {\n         \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n         \"authenticationInfo\": {\n           \"principalEmail\": \"service-12340002@container-engine-robot.iam.gserviceaccount.com\"\n         },\n         \"requestMetadata\": {\n           \"callerIp\": \"2002:a17:907:3ea4::\",\n           \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 GoogleContainerEngine/v1\"\n         },\n         \"serviceName\": \"compute.googleapis.com\",\n         \"methodName\": \"beta.compute.instanceGroupManagers.insert\",\n         \"resourceName\": \"projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-dc4a8b29-grp\",\n         \"request\": {\n           \"@type\": \"type.googleapis.com/compute.instanceGroupManagers.insert\"\n         }\n       },\n       \"insertId\": \"-tt9mudi768\",\n       \"resource\": {\n         \"type\": \"gce_instance_group_manager\",\n         \"labels\": {\n           \"location\": \"europe-west4-a\",\n           \"instance_group_manager_id\": \"318228385164940970\",\n           \"project_id\": \"gcpdiag-gke1-aaaa\",\n           \"instance_group_manager_name\": \"gke-gke1-default-pool-dc4a8b29-grp\"\n         }\n       },\n       \"timestamp\": \"2021-11-24T16:29:21.943390Z\",\n       \"severity\": \"NOTICE\",\n       \"logName\": \"projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n       \"operation\": {\n         \"id\": \"operation-1637771331527-5d18b5a706163-f238dbec-106555c8\",\n         \"producer\": \"compute.googleapis.com\",\n         \"last\": true\n       },\n       \"receiveTimestamp\": \"2021-11-24T16:29:22.710110506Z\"\n     }\n\n     [REMEDIATION]\n     Cluster autoscaler skips nodes with this annotation without considering their utilization and this message is logged\n     regardless of the node's utilization factor.\n     If you want cluster autoscaler to scale down these nodes, remove the annotation.\n\n[AUTOMATED STEP]: Check for \"no.scale.down.node.minimal.resource.limits.exceeded\" log entries\n\n   - gcpdiag-gke-cluster-autoscaler-rrrr                                  [FAIL]\n     [REASON]\n     The scaleDown event failed because it would violate cluster-wide minimal resource limits.\n     These are the resource limits set for node auto-provisioning.\n     Example log entry that would help identify involved objects:\n\n     {\n       \"protoPayload\": {\n         \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n         \"authenticationInfo\": {\n           \"principalEmail\": \"service-12340002@container-engine-robot.iam.gserviceaccount.com\"\n         },\n         \"requestMetadata\": {\n           \"callerIp\": \"2002:a17:907:3ea4::\",\n           \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 GoogleContainerEngine/v1\"\n         },\n         \"serviceName\": \"compute.googleapis.com\",\n         \"methodName\": \"beta.compute.instanceGroupManagers.insert\",\n         \"resourceName\": \"projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-dc4a8b29-grp\",\n         \"request\": {\n           \"@type\": \"type.googleapis.com/compute.instanceGroupManagers.insert\"\n         }\n       },\n       \"insertId\": \"-tt9mudi768\",\n       \"resource\": {\n         \"type\": \"gce_instance_group_manager\",\n         \"labels\": {\n           \"location\": \"europe-west4-a\",\n           \"instance_group_manager_id\": \"318228385164940970\",\n           \"project_id\": \"gcpdiag-gke1-aaaa\",\n           \"instance_group_manager_name\": \"gke-gke1-default-pool-dc4a8b29-grp\"\n         }\n       },\n       \"timestamp\": \"2021-11-24T16:29:21.943390Z\",\n       \"severity\": \"NOTICE\",\n       \"logName\": \"projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n       \"operation\": {\n         \"id\": \"operation-1637771331527-5d18b5a706163-f238dbec-106555c8\",\n         \"producer\": \"compute.googleapis.com\",\n         \"last\": true\n       },\n       \"receiveTimestamp\": \"2021-11-24T16:29:22.710110506Z\"\n     }\n\n     [REMEDIATION]\n     Review your limits for memory and vCPU and, if you want cluster autoscaler to scale down this node, decrease the limits\n     by following the documentation\n     <https://cloud.google.com/kubernetes-engine/docs/how-to/node-auto-provisioning#enable>\n\n[AUTOMATED STEP]: Check for \"no.scale.down.node.no.place.to.move.pods\" log entries\n\n   - gcpdiag-gke-cluster-autoscaler-rrrr                                  [FAIL]\n     [REASON]\n     The scaleDown event failed because there's no place to move Pods.\n     Example log entry that would help identify involved objects:\n\n     {\n       \"protoPayload\": {\n         \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n         \"authenticationInfo\": {\n           \"principalEmail\": \"service-12340002@container-engine-robot.iam.gserviceaccount.com\"\n         },\n         \"requestMetadata\": {\n           \"callerIp\": \"2002:a17:907:3ea4::\",\n           \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 GoogleContainerEngine/v1\"\n         },\n         \"serviceName\": \"compute.googleapis.com\",\n         \"methodName\": \"beta.compute.instanceGroupManagers.insert\",\n         \"resourceName\": \"projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-dc4a8b29-grp\",\n         \"request\": {\n           \"@type\": \"type.googleapis.com/compute.instanceGroupManagers.insert\"\n         }\n       },\n       \"insertId\": \"-tt9mudi768\",\n       \"resource\": {\n         \"type\": \"gce_instance_group_manager\",\n         \"labels\": {\n           \"location\": \"europe-west4-a\",\n           \"instance_group_manager_id\": \"318228385164940970\",\n           \"project_id\": \"gcpdiag-gke1-aaaa\",\n           \"instance_group_manager_name\": \"gke-gke1-default-pool-dc4a8b29-grp\"\n         }\n       },\n       \"timestamp\": \"2021-11-24T16:29:21.943390Z\",\n       \"severity\": \"NOTICE\",\n       \"logName\": \"projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n       \"operation\": {\n         \"id\": \"operation-1637771331527-5d18b5a706163-f238dbec-106555c8\",\n         \"producer\": \"compute.googleapis.com\",\n         \"last\": true\n       },\n       \"receiveTimestamp\": \"2021-11-24T16:29:22.710110506Z\"\n     }\n\n     [REMEDIATION]\n     If you expect that the Pod should be rescheduled, review the scheduling requirements of the Pods on the underutilized\n     node to determine if they can be moved to another node in the cluster.\n     To learn more, see the link\n     <https://cloud.google.com/kubernetes-engine/docs/troubleshooting/cluster-autoscaler-scale-down#no-place-to-move-pods>\n\n[AUTOMATED STEP]: Check for \"no.scale.down.node.pod.not.backed.by.controller\" log entries\n\n   - gcpdiag-gke-cluster-autoscaler-rrrr                                  [FAIL]\n     [REASON]\n     The scaleDown event failed because a Pod is not backed by a controller such as ReplicationController, DaemonSet, Job,\n     StatefulSet, or ReplicaSet.\n     Example log entry that would help identify involved objects:\n\n     {\n       \"protoPayload\": {\n         \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n         \"authenticationInfo\": {\n           \"principalEmail\": \"service-12340002@container-engine-robot.iam.gserviceaccount.com\"\n         },\n         \"requestMetadata\": {\n           \"callerIp\": \"2002:a17:907:3ea4::\",\n           \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 GoogleContainerEngine/v1\"\n         },\n         \"serviceName\": \"compute.googleapis.com\",\n         \"methodName\": \"beta.compute.instanceGroupManagers.insert\",\n         \"resourceName\": \"projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-dc4a8b29-grp\",\n         \"request\": {\n           \"@type\": \"type.googleapis.com/compute.instanceGroupManagers.insert\"\n         }\n       },\n       \"insertId\": \"-tt9mudi768\",\n       \"resource\": {\n         \"type\": \"gce_instance_group_manager\",\n         \"labels\": {\n           \"location\": \"europe-west4-a\",\n           \"instance_group_manager_id\": \"318228385164940970\",\n           \"project_id\": \"gcpdiag-gke1-aaaa\",\n           \"instance_group_manager_name\": \"gke-gke1-default-pool-dc4a8b29-grp\"\n         }\n       },\n       \"timestamp\": \"2021-11-24T16:29:21.943390Z\",\n       \"severity\": \"NOTICE\",\n       \"logName\": \"projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n       \"operation\": {\n         \"id\": \"operation-1637771331527-5d18b5a706163-f238dbec-106555c8\",\n         \"producer\": \"compute.googleapis.com\",\n         \"last\": true\n       },\n       \"receiveTimestamp\": \"2021-11-24T16:29:22.710110506Z\"\n     }\n\n     [REMEDIATION]\n     Set the annotation \"cluster-autoscaler.kubernetes.io/safe-to-evict\": \"true\" for the Pod or define an acceptable\n     controller\n\n[AUTOMATED STEP]: Check for \"no.scale.down.node.pod.not.safe.to.evict.annotation\" log entries\n\n   - gcpdiag-gke-cluster-autoscaler-rrrr                                  [FAIL]\n     [REASON]\n     The scaleDown event failed because a Pod on the node has the safe-to-evict=false annotation\n     Example log entry that would help identify involved objects:\n\n     {\n       \"protoPayload\": {\n         \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n         \"authenticationInfo\": {\n           \"principalEmail\": \"service-12340002@container-engine-robot.iam.gserviceaccount.com\"\n         },\n         \"requestMetadata\": {\n           \"callerIp\": \"2002:a17:907:3ea4::\",\n           \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 GoogleContainerEngine/v1\"\n         },\n         \"serviceName\": \"compute.googleapis.com\",\n         \"methodName\": \"beta.compute.instanceGroupManagers.insert\",\n         \"resourceName\": \"projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-dc4a8b29-grp\",\n         \"request\": {\n           \"@type\": \"type.googleapis.com/compute.instanceGroupManagers.insert\"\n         }\n       },\n       \"insertId\": \"-tt9mudi768\",\n       \"resource\": {\n         \"type\": \"gce_instance_group_manager\",\n         \"labels\": {\n           \"location\": \"europe-west4-a\",\n           \"instance_group_manager_id\": \"318228385164940970\",\n           \"project_id\": \"gcpdiag-gke1-aaaa\",\n           \"instance_group_manager_name\": \"gke-gke1-default-pool-dc4a8b29-grp\"\n         }\n       },\n       \"timestamp\": \"2021-11-24T16:29:21.943390Z\",\n       \"severity\": \"NOTICE\",\n       \"logName\": \"projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n       \"operation\": {\n         \"id\": \"operation-1637771331527-5d18b5a706163-f238dbec-106555c8\",\n         \"producer\": \"compute.googleapis.com\",\n         \"last\": true\n       },\n       \"receiveTimestamp\": \"2021-11-24T16:29:22.710110506Z\"\n     }\n\n     [REMEDIATION]\n     If the Pod can be safely evicted, edit the manifest of the Pod and update the annotation to\n     \"cluster-autoscaler.kubernetes.io/safe-to-evict\": \"true\".\n\n[AUTOMATED STEP]: Check for \"no.scale.down.node.pod.kube.system.unmovable\" log entries\n\n   - gcpdiag-gke-cluster-autoscaler-rrrr                                  [FAIL]\n     [REASON]\n     The scaleDown event failed because the pod is a non-DaemonSet, non-mirrored, Pod without a PodDisruptionBudget in the\n     kube-system namespace.\n     Example log entry that would help identify involved objects:\n\n     {\n       \"protoPayload\": {\n         \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n         \"authenticationInfo\": {\n           \"principalEmail\": \"service-12340002@container-engine-robot.iam.gserviceaccount.com\"\n         },\n         \"requestMetadata\": {\n           \"callerIp\": \"2002:a17:907:3ea4::\",\n           \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 GoogleContainerEngine/v1\"\n         },\n         \"serviceName\": \"compute.googleapis.com\",\n         \"methodName\": \"beta.compute.instanceGroupManagers.insert\",\n         \"resourceName\": \"projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-dc4a8b29-grp\",\n         \"request\": {\n           \"@type\": \"type.googleapis.com/compute.instanceGroupManagers.insert\"\n         }\n       },\n       \"insertId\": \"-tt9mudi768\",\n       \"resource\": {\n         \"type\": \"gce_instance_group_manager\",\n         \"labels\": {\n           \"location\": \"europe-west4-a\",\n           \"instance_group_manager_id\": \"318228385164940970\",\n           \"project_id\": \"gcpdiag-gke1-aaaa\",\n           \"instance_group_manager_name\": \"gke-gke1-default-pool-dc4a8b29-grp\"\n         }\n       },\n       \"timestamp\": \"2021-11-24T16:29:21.943390Z\",\n       \"severity\": \"NOTICE\",\n       \"logName\": \"projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n       \"operation\": {\n         \"id\": \"operation-1637771331527-5d18b5a706163-f238dbec-106555c8\",\n         \"producer\": \"compute.googleapis.com\",\n         \"last\": true\n       },\n       \"receiveTimestamp\": \"2021-11-24T16:29:22.710110506Z\"\n     }\n\n     [REMEDIATION]\n     By default, Pods in the kube-system namespace aren't removed by cluster autoscaler.\n\n     To resolve this issue, either add a PodDisruptionBudget for the kube-system Pods or use a combination of node pools\n     taints and tolerations to separate kube-system Pods from your application Pods.\n     To learn more, see\n     <https://cloud.google.com/kubernetes-engine/docs/troubleshooting/cluster-autoscaler-scale-down#kube-system-unmoveable>\n\n[AUTOMATED STEP]: Check for \"no.scale.down.node.pod.not.enough.pdb\" log entries\n\n   - gcpdiag-gke-cluster-autoscaler-rrrr                                  [FAIL]\n     [REASON]\n     The scaleDown event failed the pod doesn't have enough PodDisruptionBudget.\n     Example log entry that would help identify involved objects:\n\n     {\n       \"protoPayload\": {\n         \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n         \"authenticationInfo\": {\n           \"principalEmail\": \"service-12340002@container-engine-robot.iam.gserviceaccount.com\"\n         },\n         \"requestMetadata\": {\n           \"callerIp\": \"2002:a17:907:3ea4::\",\n           \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 GoogleContainerEngine/v1\"\n         },\n         \"serviceName\": \"compute.googleapis.com\",\n         \"methodName\": \"beta.compute.instanceGroupManagers.insert\",\n         \"resourceName\": \"projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-dc4a8b29-grp\",\n         \"request\": {\n           \"@type\": \"type.googleapis.com/compute.instanceGroupManagers.insert\"\n         }\n       },\n       \"insertId\": \"-tt9mudi768\",\n       \"resource\": {\n         \"type\": \"gce_instance_group_manager\",\n         \"labels\": {\n           \"location\": \"europe-west4-a\",\n           \"instance_group_manager_id\": \"318228385164940970\",\n           \"project_id\": \"gcpdiag-gke1-aaaa\",\n           \"instance_group_manager_name\": \"gke-gke1-default-pool-dc4a8b29-grp\"\n         }\n       },\n       \"timestamp\": \"2021-11-24T16:29:21.943390Z\",\n       \"severity\": \"NOTICE\",\n       \"logName\": \"projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n       \"operation\": {\n         \"id\": \"operation-1637771331527-5d18b5a706163-f238dbec-106555c8\",\n         \"producer\": \"compute.googleapis.com\",\n         \"last\": true\n       },\n       \"receiveTimestamp\": \"2021-11-24T16:29:22.710110506Z\"\n     }\n\n     [REMEDIATION]\n     Review the PodDisruptionBudget for the Pod and consider making it less restrictive.\n     To learn more, see\n     <https://cloud.google.com/kubernetes-engine/docs/troubleshooting/cluster-autoscaler-scale-down#not-enough-pdb>\n\n[AUTOMATED STEP]: Check for \"no.scale.down.node.pod.controller.not.found\" log entries\n\n   - gcpdiag-gke-cluster-autoscaler-rrrr                                  [FAIL]\n     [REASON]\n     Pod is blocking the ScaleDown event because its controller (for example, a Deployment or ReplicaSet) can't be found.\n     Example log entry that would help identify involved objects:\n\n     {\n       \"protoPayload\": {\n         \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n         \"authenticationInfo\": {\n           \"principalEmail\": \"service-12340002@container-engine-robot.iam.gserviceaccount.com\"\n         },\n         \"requestMetadata\": {\n           \"callerIp\": \"2002:a17:907:3ea4::\",\n           \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 GoogleContainerEngine/v1\"\n         },\n         \"serviceName\": \"compute.googleapis.com\",\n         \"methodName\": \"beta.compute.instanceGroupManagers.insert\",\n         \"resourceName\": \"projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-dc4a8b29-grp\",\n         \"request\": {\n           \"@type\": \"type.googleapis.com/compute.instanceGroupManagers.insert\"\n         }\n       },\n       \"insertId\": \"-tt9mudi768\",\n       \"resource\": {\n         \"type\": \"gce_instance_group_manager\",\n         \"labels\": {\n           \"location\": \"europe-west4-a\",\n           \"instance_group_manager_id\": \"318228385164940970\",\n           \"project_id\": \"gcpdiag-gke1-aaaa\",\n           \"instance_group_manager_name\": \"gke-gke1-default-pool-dc4a8b29-grp\"\n         }\n       },\n       \"timestamp\": \"2021-11-24T16:29:21.943390Z\",\n       \"severity\": \"NOTICE\",\n       \"logName\": \"projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n       \"operation\": {\n         \"id\": \"operation-1637771331527-5d18b5a706163-f238dbec-106555c8\",\n         \"producer\": \"compute.googleapis.com\",\n         \"last\": true\n       },\n       \"receiveTimestamp\": \"2021-11-24T16:29:22.710110506Z\"\n     }\n\n     [REMEDIATION]\n     To determine what actions were taken that left the Pod running after its controller was removed, review the logs. To\n     resolve this issue, manually delete the Pod.\n\n[AUTOMATED STEP]: Check for \"no.scale.down.node.pod.unexpected.error\" log entries\n\n   - gcpdiag-gke-cluster-autoscaler-rrrr                                  [FAIL]\n     [REASON]\n     Pod is blocking the ScaleDown event because of an unexpected error.\n     Example log entry that would help identify involved objects:\n\n     {\n       \"protoPayload\": {\n         \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n         \"authenticationInfo\": {\n           \"principalEmail\": \"service-12340002@container-engine-robot.iam.gserviceaccount.com\"\n         },\n         \"requestMetadata\": {\n           \"callerIp\": \"2002:a17:907:3ea4::\",\n           \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 GoogleContainerEngine/v1\"\n         },\n         \"serviceName\": \"compute.googleapis.com\",\n         \"methodName\": \"beta.compute.instanceGroupManagers.insert\",\n         \"resourceName\": \"projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-dc4a8b29-grp\",\n         \"request\": {\n           \"@type\": \"type.googleapis.com/compute.instanceGroupManagers.insert\"\n         }\n       },\n       \"insertId\": \"-tt9mudi768\",\n       \"resource\": {\n         \"type\": \"gce_instance_group_manager\",\n         \"labels\": {\n           \"location\": \"europe-west4-a\",\n           \"instance_group_manager_id\": \"318228385164940970\",\n           \"project_id\": \"gcpdiag-gke1-aaaa\",\n           \"instance_group_manager_name\": \"gke-gke1-default-pool-dc4a8b29-grp\"\n         }\n       },\n       \"timestamp\": \"2021-11-24T16:29:21.943390Z\",\n       \"severity\": \"NOTICE\",\n       \"logName\": \"projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n       \"operation\": {\n         \"id\": \"operation-1637771331527-5d18b5a706163-f238dbec-106555c8\",\n         \"producer\": \"compute.googleapis.com\",\n         \"last\": true\n       },\n       \"receiveTimestamp\": \"2021-11-24T16:29:22.710110506Z\"\n     }\n\n     [REMEDIATION]\n     The root cause of this error is unknown. Contact Cloud Customer Care for further investigation.\n\n[END]: Finalize `Cluster Autoscaler` diagnostics.\n\n\n"
  },
  {
    "path": "gcpdiag/runbook/gke/snapshots/gke_ip_masq_standard.txt",
    "content": "dest_ip=8.8.8.8,gke_cluster_name=gke1,project_id=gcpdiag-gke4-runbook,src_ip=0.0.0.0\n\ngke/gke-ip-masq-standard: This runbook will analyze symptoms for IP Masquerading issues on GKE Cluster.\n\n  It examines the following:\n\n  - Are there any traffic logs to destination IP?\n  - Is ip-masq-agent DaemonSet in kube-system namespace?\n  - Is ip-masq-agent Configmap in kube-system namespace?\n  - Is GKE node IP and Pod IP are under nonMasquerade CIDR?\n  - Is Destination IP is under are under nonMasquerade CIDR?\n  \n[START]: Lets check the provided parameters.\n\n   - gcpdiag-gke4-aaaa                                                    [OK]\n     [REASON]\n     Cluster with name gke1 exist in project gcpdiag-gke4-runbook\n[AUTOMATED STEP]: Are you seeing issue from GKE NODE as well?\n\n   - gcpdiag-gke4-aaaa                                                    [FAIL]\n     [REASON]\n     There are no egress traffic to Destination IP which indicates that GKE NODE is also having issue to connect to\n     destination IP.\n\n     [REMEDIATION]\n     Enable VPC flow logs by following the documentation and look if traffic id going out to destination:\n     <https://cloud.google.com/vpc/docs/using-flow-logs#enable-logging-existing>\n\n[AUTOMATED STEP]: Lets check if Daemon set present..\n\n   - gcpdiag-gke4-aaaa                                                    [UNCERTAIN]\n     [REASON]\n     Check for ip-masq-agent daemonSet is deployed in the Cluster. If yes follow check next step.\n\n     [REMEDIATION]\n     If No, please follow [1] to deploy ip-masq-agent DaemonSet in the kube-system namespace and wait for around 5 minutes\n     for the DaemonSet to be ready.\n\n     [1] <https://cloud.google.com/kubernetes-engine/docs/how-to/ip-masquerade-agent#checking_the_ip-masq-agent_daemonset>\n\n[AUTOMATED STEP]: Lets confirm if config map is configure.\n\n   - gcpdiag-gke4-aaaa                                                    [UNCERTAIN]\n     [REASON]\n     When ip-masq-agent daemonset is deployed without a configmap, it uses the default non-masq destinations [1].\n\n     [1] <https://cloud.google.com/kubernetes-engine/docs/how-to/ip-masquerade-agent#creating_the_ip-masq-agent_configmap>\n\n     [REMEDIATION]\n     If you needs to customize the configmap, then follow the steps [1] to deploy ip-masq-agent ConfigMap in the kube-system\n     namespace.\n     [1] <https://cloud.google.com/kubernetes-engine/docs/how-to/ip-masquerade-agent#creating_the_ip-masq-agent_configmap>\n\n[AUTOMATED STEP]: Lets check pod ip present..\n\n   - gcpdiag-gke4-aaaa                                                    [UNCERTAIN]\n     [REASON]\n     When ip-masq-agent daemonset is deployed without a configmap, it uses the default non-masq destinations [1].\n\n     [1] <https://cloud.google.com/kubernetes-engine/docs/how-to/ip-masquerade-agent#creating_the_ip-masq-agent_configmap>\n\n     [REMEDIATION]\n     Follow the steps for including the pod IP CIDRs in nonMasqueradeCIDRs [1].\n\n     [1] <https://cloud.google.com/kubernetes-engine/docs/how-to/ip-masquerade-agent#edit-ip-masq-agent-configmap>\n\n[AUTOMATED STEP]: Lets check node IP is present under non-masq cidr.\n\n   - gcpdiag-gke4-aaaa                                                    [UNCERTAIN]\n     [REASON]\n     When ip-masq-agent daemonset is deployed without a configmap, it uses the default non-masq destinations [1].\n\n     [1] <https://cloud.google.com/kubernetes-engine/docs/how-to/ip-masquerade-agent#creating_the_ip-masq-agent_configmap>\n\n     [REMEDIATION]\n     Follow the steps for including the Node IP CIDRs in nonMasqueradeCIDRs [1].\n\n     [1] <https://cloud.google.com/kubernetes-engine/docs/how-to/ip-masquerade-agent#edit-ip-masq-agent-configmap>\n\n[AUTOMATED STEP]: Lets check if pod ip address is present.\n\n   - gcpdiag-gke4-aaaa                                                    [UNCERTAIN]\n     [REASON]\n     When ip-masq-agent daemonset is deployed without a configmap, it uses the default non-masq destinations [1].\n\n     [1] <https://cloud.google.com/kubernetes-engine/docs/how-to/ip-masquerade-agent#creating_the_ip-masq-agent_configmap>\n\n     [REMEDIATION]\n     Follow the steps for including the Destination IP CIDRs in nonMasqueradeCIDRs [1].\n\n     [1] <https://cloud.google.com/kubernetes-engine/docs/how-to/ip-masquerade-agent#edit-ip-masq-agent-configmap>\n\n[END]: Finalize connectivity diagnostics.\n[INFO]: If all check passed consider please contact support for further troubleshooting\n\n\n"
  },
  {
    "path": "gcpdiag/runbook/gke/snapshots/image_pull.txt",
    "content": "end_time=2024-08-12T23:00:00Z,gke_cluster_name=gke-cluster,location=europe-\nwest10,project_id=gcpdiag-gke-cluster-autoscaler-rrrr,start_time=2024-08-12T01:00:00Z\n\ngke/image-pull: Analysis and Resolution of Image Pull Failures on GKE clusters.\n\n  This runbook investigates the gke cluster for Image pull failures and recommends remediation\n  steps.\n\n  Areas Examined:\n\n  - GKE cluster\n\n  - Stackdriver logs\n    \n[START]: Starting the image pull error diagnostics\n[AUTOMATED STEP]: Check for \"Failed to pull image.*not found\" log entries.\n\n   - gcpdiag-gke-cluster-autoscaler-rrrr                                  [FAIL]\n     [REASON]\n     A container on pod on node failed to pull image because the image was not found in the repository.\n     Example log entry:\n\n     Cluster name: N/A\n     Location: europe-west1-b\n     Namespace Name: N/A\n     Pod Name: N/A\n     Project ID: gcpdiag-gke1-aaaa\n     Log Message: N/A\n     Reporting Instance: N/A\n     Last Timestamp: N/A\n\n     [REMEDIATION]\n     Refer to the troubleshooting documentation:\n     <https://cloud.google.com/kubernetes-engine/docs/troubleshooting#ImagePullBackOff>\n\n[AUTOMATED STEP]: Check for \"Failed to pull image.*403 Forbidden\" log entries.\n\n   - gcpdiag-gke-cluster-autoscaler-rrrr                                  [FAIL]\n     [REASON]\n     Image cannot be pulled by a container on Pod, because there are not enough permissions to pull it from the repository.\n     Verify the node SA has the correct permissions.\n     Example log entry that would help identify involved objects:\n\n     Cluster name: N/A\n     Location: europe-west1-b\n     Namespace Name: N/A\n     Pod Name: N/A\n     Project ID: gcpdiag-gke1-aaaa\n     Log Message: N/A\n     Reporting Instance: N/A\n     Last Timestamp: N/A\n\n     [REMEDIATION]\n     Ensure the node service account has the necessary permissions to pull the image. Refer to the documentation:\n     <https://cloud.google.com/artifact-registry/docs/integrate-gke#permissions>\n\n[AUTOMATED STEP]: Check for \"Failed to pull image.*lookup.*server misbehaving\" log entries.\n\n   - gcpdiag-gke-cluster-autoscaler-rrrr                                  [FAIL]\n     [REASON]\n     The DNS resolver (metadata server 169.254.169.254:53) on node was unable to resolve the image repository's IP address, preventing image pull. This often indicates issues with networking or DNS configuration.\n     Example log entry:\n\n     Cluster name: N/A\n     Location: europe-west1-b\n     Namespace Name: N/A\n     Pod Name: N/A\n     Project ID: gcpdiag-gke1-aaaa\n     Log Message: N/A\n     Reporting Instance: N/A\n     Last Timestamp: N/A\n\n     [REMEDIATION]\n     Verify networking and DNS requirements, particularly for Private Google Access. Refer to the documentation:\n     <https://cloud.google.com/vpc/docs/configure-private-google-access#requirements>\n\n[AUTOMATED STEP]: Check for \"Failed to pull image.*dial tcp.*199.36.153.\\d:443: i/o timeout\" log entries\n\n   - gcpdiag-gke-cluster-autoscaler-rrrr                                  [FAIL]\n     [REASON]\n     Connections from node to restricted.googleapis.com (199.36.153.4/30) or private.googleapis.com (199.36.153.8/30) timed out, preventing image pulls. This may be caused by a firewall rule blocking egress traffic to these IP ranges.\n     Example log entry:\n\n     Cluster name: N/A\n     Location: europe-west1-b\n     Namespace Name: N/A\n     Pod Name: N/A\n     Project ID: gcpdiag-gke1-aaaa\n     Log Message: N/A\n     Reporting Instance: N/A\n     Last Timestamp: N/A\n\n     [REMEDIATION]\n     Ensure firewall rules permit egress traffic to restricted.googleapis.com (199.36.153.4/30) or private.googleapis.com (199.36.153.8/30). Refer to the documentation:\n     <https://cloud.google.com/vpc-service-controls/docs/set-up-private-connectivity>\n\n[AUTOMATED STEP]: Check for \"Failed to pull image.*dial tcp.*i/o timeout\" log entries\n\n   - gcpdiag-gke-cluster-autoscaler-rrrr                                  [FAIL]\n     [REASON]\n     Connections from node to Google APIs timed out, preventing image pulls. This may be caused by a firewall rule blocking egress traffic to Google APIs. The specific blocked IP range might be indicated in the log entry.\n     Example log entry:\n\n     Cluster name: N/A\n     Location: europe-west1-b\n     Namespace Name: N/A\n     Pod Name: N/A\n     Project ID: gcpdiag-gke1-aaaa\n     Log Message: N/A\n     Reporting Instance: N/A\n     Last Timestamp: N/A\n\n     [REMEDIATION]\n     Ensure firewall rules permit egress traffic to Google APIs. Refer to the documentation:\n     <https://cloud.google.com/kubernetes-engine/docs/concepts/firewall-rules>\n\n[AUTOMATED STEP]: Check for \"Failed to pull image.*insufficient_scope\" log entries\n\n   - gcpdiag-gke-cluster-autoscaler-rrrr                                  [FAIL]\n     [REASON]\n     Either user or service account that's trying to pull the image doesn't have the necessary permissions to access it or\n     Image doesn't exist.\n     Example log entry that would help identify involved objects:\n\n     Cluster name: N/A\n     Location: europe-west1-b\n     Namespace Name: N/A\n     Pod Name: N/A\n     Project ID: gcpdiag-gke1-aaaa\n     Log Message: N/A\n     Reporting Instance: N/A\n     Last Timestamp: N/A\n\n     [REMEDIATION]\n\n     1. Verify that the image name is correct.\n     2. Ensure the node's service account has the necessary permissions. Refer to the documentation:\n     <https://cloud.google.com/kubernetes-engine/docs/troubleshooting/deployed-workloads#image-not-found>\n\n[END]: Finalize `GKE Image Pull runbbok` diagnostics.\n\n\n"
  },
  {
    "path": "gcpdiag/runbook/gke/snapshots/ip_exhaustion.txt",
    "content": "end_time=2024-06-30T23:00:00Z,gke_cluster_name=cluster-1,location=us-central1-c,project_id=gcpdiag-\ngke3-gggg,start_time=2024-06-30T01:00:00Z\n\ngke/ip-exhaustion: Troubleshooting ip exhaustion issues on GKE clusters.\n\n  This runbook investigates the gke cluster for ip exhaustion issues and recommends remediation\n  steps.\n\n  Areas Examined:\n  - GKE cluster type.\n  - GKE cluster and nodepool configuration\n  - Stackdriver logs\n    \n[START]: Starting the IP Exhaustion diagnostics\n\n   - gcpdiag-gke3-gggg                                                    [OK]\n     [REASON]\n     Cluster cluster-1 found in us-central1-c for project gcpdiag-gke3-gggg\n[AUTOMATED STEP]: Checking node IP Exhaustion and offering remediation steps\n[INFO]: Searching cloud logging for the string IP_SPACE_EXHAUSTED which indicates IP Exhaustion issue\n[INFO]: IP_SPACE_EXHAUSTED error found for cluster cluster-1 and subnet public-subnet\n\n   - gcpdiag-gke3-gggg/us-central1-c/cluster-1                            [FAIL]\n     [REASON]\n     Node IP exhaustion is detected in the cluster cluster-1 for the subnet public-subnet\n\n\n     [REMEDIATION]\n     Please follow the below documentation [1] to expand the ip range of the node subnet.\n     The subnet that has exhausted its IP space is public-subnet.\n\n     [1] <https://cloud.google.com/vpc/docs/create-modify-vpc-networks#expand-subnet>\n\n[AUTOMATED STEP]: Checking Pod IP Exhaustion and offering remediation steps\n[INFO]: Verifying if the cluster is an Autopilot cluster or a Standard cluster.\n[INFO]: Cluster is a Standard cluster\n\n   - gcpdiag-gke3-gggg/us-central1-c/cluster-1                            [FAIL]\n     [REASON]\n     Pod IP exhaustion is detected in the cluster cluster-1\n\n     [REMEDIATION]\n     Here are some commands you can run to add an additional IPv4 pod range to address this issue, and you can find more detailed instructions at the documentation [1].\n\n     **Allocate IP addresses with designed length and create a pod range**\n\n     ```\n     export POD_IP_RANGE_PREFIX_LENGTH=14\n     export POD_RANGE_NAME=\"range-`tr -dc a-z0-9 </dev/urandom | head -c 13`\"\n     gcloud network-connectivity internal-ranges create $POD_RANGE_NAME \\\n         --network=projects/gcpdiag-gke3-gggg/global/networks/default \\\n         --prefix-length=$POD_IP_RANGE_PREFIX_LENGTH\n     ```\n\n     **Assign the pod range to subnet**\n\n     ```\n     gcloud compute networks subnets update public-subnet \\\n         --region=us-central1-c \\\n         --add-secondary-ranges-with-reserved-internal-range=\"$POD_RANGE_NAME=//networkconnectivity.googleapis.com/projects/gcpdiag-gke3-gggg/locations/global/internalRanges/$POD_RANGE_NAME\"\n     ```\n\n     **Add additional pod range to your cluster**\n\n     ```\n     gcloud container clusters update cluster-1 \\\n         --additional-pod-ipv4-ranges=$POD_RANGE_NAME \\\n         --location=us-central1-c\n     ```\n\n     Following execution of these commands, you should be able to create a new node pool that utilizes the newly configured pod IP range without encountering pod IP exhaustion issues.\n\n     Additionally, consider leveraging the Class E IPv4 address space (240.0.0.0/4) to support your growth.\n     While these addresses are reserved for future use (see Google VPC network valid IPv4 ranges [2]), they can be used in certain situations.\n\n     The linked documentation [3] addresses common misconceptions about Class E, discusses its benefits and considerations, and provides guidance on planning and using GKE clusters with this address space.\n     It also includes a real-world example of how Class E successfully solved IP exhaustion challenges.\n\n     [1] <https://cloud.google.com/kubernetes-engine/docs/how-to/multi-pod-cidr#cluster-add-pod-ipv4-range>\n\n     [2] <https://cloud.google.com/vpc/docs/subnets#valid-ranges>\n\n     [3] <https://cloud.google.com/blog/products/containers-kubernetes/how-class-e-addresses-solve-for-ip-address-exhaustion-in-gke>\n\n\n[END]: Finalize VM external connectivity diagnostics.\n\n\n"
  },
  {
    "path": "gcpdiag/runbook/gke/snapshots/logs.txt",
    "content": "gke_cluster_name=gcp-cluster,location=europe-west10,name=gcp-cluster,project_id=gcpdiag-gke-cluster-\nautoscaler-rrrr\n\ngke/logs: Provides a methodical approach to troubleshooting GKE logging issues.\n\n  This runbook guides you through a systematic investigation of potential\n  causes when logs from the Google Kubernetes Engine (GKE) cluster are missing\n  or incomplete. The focus is on core configuration settings that are essential\n  for proper logging functionality.\n\n  The following areas are examined:\n\n  - **Project-Level Logging:** Ensures that the Google Cloud project housing\n  the GKE cluster has the Cloud Logging API enabled.\n\n  - **Cluster-Level Logging:** Verifies that logging is explicitly enabled\n  within the GKE cluster's configuration.\n\n  - **Node Pool Permissions:** Confirms that the nodes within the cluster's\n  node pools have the 'Cloud Logging Write' scope enabled, allowing them to send\n  log data.\n\n  - **Service Account Permissions:** Validates that the service account used\n  by the node pools possesses the necessary IAM permissions to interact with\n  Cloud Logging. Specifically, the \"roles/logging.logWriter\" role is typically\n  required.\n\n  - **Cloud Logging API Write Quotas:** Verifies that Cloud Logging API Write\n  quotas have not been exceeded within the specified timeframe.\n  \n[START]: Checks the provided parameters.\n[AUTOMATED STEP]: Checks if logging API is disabled in the project.\n\n   - gcpdiag-gke-cluster-autoscaler-rrrr                                  [OK]\n     [REASON]\n     The logging API is enabled in your project.\n[AUTOMATED STEP]: Checks if GKE level logging is disabled\n\n   - gcpdiag-gke-cluster-autoscaler-rrrr/europe-west10/gcp-cluster        [OK]\n     [REASON]\n      GKE level logging is enabled for the cluster projects/gcpdiag-gke-cluster-autoscaler-rrrr/locations/europe-west10/clusters/gcp-cluster.\n[AUTOMATED STEP]: Verifies the node pools have Cloud Logging access scope\n\n   - gcpdiag-gke-cluster-autoscaler-rrrr/europe-west10/gcp-cluster/default-pool [OK]\n     [REASON]\n     The node pool projects/gcpdiag-gke-cluster-autoscaler-rrrr/locations/europe-west10/clusters/gcp-cluster/nodePools/default-pool has the correct Cloud Logging access scope.\n[AUTOMATED STEP]: Verifies the node pool's service account has a role with the correct logging IAM permissions\n\n   - gcpdiag-gke-cluster-autoscaler-rrrr/europe-west10/gcp-cluster/default-pool [OK]\n     [REASON]\n     Service account: 1234000173-compute@developer.gserviceaccount.com has the correct logging permissions.\n[AUTOMATED STEP]: Checks if Cloud Logging API write quotas have been exceeded\n\n   - gcpdiag-gke-cluster-autoscaler-rrrr                                  [FAIL]\n     [REASON]\n     Project gcpdiag-gke-cluster-autoscaler-rrrr has recently exceeded the following quotas: WriteRequestsPerMinutePerProject.\n     [REMEDIATION]\n     Please check the project gcpdiag-gke-cluster-autoscaler-rrrr for the Cloud Logging API quotas WriteRequestsPerMinutePerProject which have been reached\n[END]: Finalize `GKE logs` diagnostics.\n\n\n"
  },
  {
    "path": "gcpdiag/runbook/gke/snapshots/monitoring_configuration.txt",
    "content": "gke_cluster_name=cluster-2,location=us-central1-a,project_id=mytestproject-371511\n\ngke/monitoring-configuration: Verifies that GKE Monitoring and its components are correctly configured and operational.\n\n  This runbook guides through a systematic investigation of potential\n  causes when monitoring from the Google Kubernetes Engine (GKE) cluster are missing\n  or incomplete. The focus is on core configuration settings that are essential\n  for proper monitoring functionality.\n\n  The following areas are examined:\n\n  - **Project-Level Monitoring:** Ensures that the Google Cloud project housing\n  the GKE cluster has the Cloud Monitoring API enabled.\n\n  - **Cluster-Level Monitoring:** Verifies that monitoring is explicitly enabled\n  within the GKE cluster's configuration.\n\n  - **Node Pool Permissions:** Confirms that the nodes within the cluster's\n  node pools have the 'Cloud Monitoring Write' scope enabled, allowing them to send\n  metrics data.\n\n  - **Service Account Permissions:** Validates that the service account used\n  by the node pools possesses the necessary IAM permissions to interact with\n  Cloud Monitoring. Specifically, the \"roles/monitoring.metricWriter\" role is typically\n  required.\n\n  \n[START]: Checks the provided parameters.\n[AUTOMATED STEP]: Verify if the API is enabled for this project.\n[AUTOMATED STEP]: Checks if GKE level Monitoring is disabled.\n[AUTOMATED STEP]: Verify node-pool OAuth scopes include one of the required scopes.\n[AUTOMATED STEP]: Verifies the node pool's service account has a role with the correct required service IAM permissions.\n[END]: Finalizes `GKE Monitoring` diagnostics.\n\n\n"
  },
  {
    "path": "gcpdiag/runbook/gke/snapshots/node_auto_repair.txt",
    "content": "gke_cluster_name=gcp-cluster,location=europe-west10-a,node=gke-gcp-cluster-default-\npool-82e0c046-8m8b,project_id=gcpdiag-gke-cluster-autoscaler-rrrr\n\ngke/node-auto-repair: Provides the reason why a Node was auto-repaired\n\n  This runbook checks if:\n  - Node auto-repair is enabled on the cluster\n  - Nodes was repaired because it was in NotReady status for more than 10 minutes\n  - Nodes was repaired because it had disk pressure\n  - Nodes was repaired because of unallocatable GPUs\n  - Nodes was repaired because of unallocatable TPUs\n  \n[START]: Check inputs and verify if there was a repair event\n[AUTOMATED STEP]: Checking if there is the node is in NotReady status.\n\n   - gcpdiag-gke-cluster-autoscaler-rrrr                                  [FAIL]\n     [REASON]\n     The node gke-gcp-cluster-default-pool-82e0c046-8m8b was auto-repaired because it was in a NotReady state for more than approximately 10 minutes.\n\n     [REMEDIATION]\n     The auto-repair should have fixed the detected NotReady state.\n     For more details check: <https://cloud.google.com/kubernetes-engine/docs/how-to/node-auto-repair>\n\n[AUTOMATED STEP]: Checking if there is the node is in NodeHasDiskPressure status.\n\n   - gcpdiag-gke-cluster-autoscaler-rrrr                                  [FAIL]\n     [REASON]\n     The node gke-gcp-cluster-default-pool-82e0c046-8m8b was auto-repaired because it had disk pressure for more than 30 minutes.\n\n     [REMEDIATION]\n     The auto-repair should have fixed the detected disk pressure.\n     For more details check: <https://cloud.google.com/kubernetes-engine/docs/how-to/node-auto-repair>\n\n[AUTOMATED STEP]: Verify whether the node was auto-repaired because of Unallocatable GPUs.\n\n   - gcpdiag-gke-cluster-autoscaler-rrrr                                  [FAIL]\n     [REASON]\n     The node gke-gcp-cluster-default-pool-82e0c046-8m8b was auto-repaired because it had unallocatable GPU(s) for more than 15 minutes.\n\n     [REMEDIATION]\n     The auto-repair should have fixed the detected unallocatable GPU(s).\n     For more details check: <https://cloud.google.com/kubernetes-engine/docs/how-to/node-auto-repair>\n\n[AUTOMATED STEP]: Verify whether the node was auto-repaired because of Unallocatable TPUs.\n\n   - gcpdiag-gke-cluster-autoscaler-rrrr                                  [FAIL]\n     [REASON]\n     The node gke-gcp-cluster-default-pool-82e0c046-8m8b was auto-repaired because it had unallocatable TPU(s) for more than 10 minutes.\n\n     [REMEDIATION]\n     The auto-repair should have fixed the detected unallocatable TPU(s).\n     For more details check: <https://cloud.google.com/kubernetes-engine/docs/how-to/tpus#node-auto-repair>\n\n[END]: Finalize `Node AutoRepair` diagnostics.\n\n\n"
  },
  {
    "path": "gcpdiag/runbook/gke/snapshots/node_bootstrapping.txt",
    "content": "gke_cluster_name=gke-cluster-name,location=europe-west4-a,nodepool=gke-gke1-default-\npool-671518f6,project_id=gcpdiag-gke1-aaaa\n\ngke/node-bootstrapping: Analyses issues experienced when adding nodes to your GKE Standard cluster.\n\n  This runbook requires at least\n  - location and node parameters. Location here is the zone where the node is\n  running,\n  for example us-central1-c.\n  - location, nodepool and cluster name parameters to be provided. Location is\n  zone or region for\n  a nodepool, if the cluster is a regional cluster, then location for a nodepool\n  will be the\n  cluster region. For example a region could be us-central1.\n\n  If a location/node pair is provided, the runbook will check the Node\n  Registration Checker output\n  for the given location/node pair.\n\n  If a location, nodepool and GKE cluster name parameters are provided, the\n  runbook will check for\n  any errors that might have occurred when the instances.insert method was\n  invoked for the given\n  parameters.\n  \n[START]: Check the provided parameters.\n\n   - gcpdiag-gke1-aaaa                                                    [SKIP]\n     [REASON]\n     No gke-cluster-name GKE cluster found in project gcpdiag-gke1-aaaa\n\n\n"
  },
  {
    "path": "gcpdiag/runbook/gke/snapshots/node_unavailability.txt",
    "content": "gke_cluster_name=gcp-cluster,location=europe-west10-a,node=gke-gcp-cluster-default-\npool-82e0c046-8m8b,project_id=gcpdiag-gke-cluster-autoscaler-rrrr\n\ngke/node-unavailability: Identifies the reasons for a GKE node being unavailable.\n\n  This runbook investigates various factors that may have caused a node to\n  become unavailable,\n  including:\n\n  - Live Migration\n  - Preemption\n  - Removal by the Cluster Autoscaler\n  - Node Pool Upgrade\n  \n[START]: Check inputs and verify if the node was unavailable\n[AUTOMATED STEP]: Check for live migration logs.\n\n   - gcpdiag-gke-cluster-autoscaler-rrrr                                  [FAIL]\n     [REASON]\n     Live migration check failed for node gke-gcp-cluster-default-pool-82e0c046-8m8b.\n\n     [REMEDIATION]\n     There was a live migration event for the node gke-gcp-cluster-default-pool-82e0c046-8m8b.\n\n     For more details about Live migration process during maintenance events, please consult the documentation:\n     <https://cloud.google.com/compute/docs/instances/live-migration-process>\n\n[AUTOMATED STEP]: Checks for preemption logs.\n\n   - gcpdiag-gke-cluster-autoscaler-rrrr                                  [FAIL]\n     [REASON]\n     The node gke-gcp-cluster-default-pool-82e0c046-8m8b was preempted.\n\n     [REMEDIATION]\n     Compute Engine might stop (preempt) preemptible instances if it needs to reclaim the compute capacity for allocation to other VMs.\n\n     For more details about preemptible VMs in GKE please consult the documentation:\n     <https://cloud.google.com/kubernetes-engine/docs/how-to/preemptible-vms>\n\n[AUTOMATED STEP]: Checks for Cluster Autoscaler ScaleDown logs.\n\n   - gcpdiag-gke-cluster-autoscaler-rrrr                                  [FAIL]\n     [REASON]\n     The node gke-gcp-cluster-default-pool-82e0c046-8m8b was removed by the cluster autoscaler.\n\n     [REMEDIATION]\n     This is expected behavior. GKE's cluster autoscaler automatically resizes the number of nodes in a given node pool, based on the demands of your workloads. When demand is low, the cluster autoscaler scales back down to a minimum size that you designate.\n\n     For more details about Cluster Autoscaler ScaleDown events please consult the documentation:\n     <https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-autoscaler-visibility#scaledown-event>\n\n[AUTOMATED STEP]: Checks for Node Upgrade operation logs.\n\n   - gcpdiag-gke-cluster-autoscaler-rrrr                                  [FAIL]\n     [REASON]\n     The node gke-gcp-cluster-default-pool-82e0c046-8m8b was unavailable due to a node pool upgrade.\n\n     [REMEDIATION]\n     This is expected behavior, when the upgrade is performed, nodes are drained and re-created to match the desired version.\n\n     To list the node upgrade operations, please issue the following gcloud command:\n\n     ```\n     gcloud container operations list --filter=operationType:UPGRADE_NODES\n     ```\n\n     For more details about node upgrades please consult the documentation:\n     <https://cloud.google.com/kubernetes-engine/docs/how-to/node-auto-upgrades>\n\n[END]: Finalize `Node Unavailability` diagnostics.\n\n\n"
  },
  {
    "path": "gcpdiag/runbook/gke/snapshots/resource_quotas.txt",
    "content": "end_time=2024-12-09T07:40:16Z,gke_cluster_name=gcp-cluster,location=europe-\nwest10-a,project_id=gcpdiag-gke-cluster-autoscaler-rrrr,start_time=2024-12-08T07:40:16Z\n\ngke/resource-quotas: Analyses logs in the project where the cluster is running.\n\n  If there are log entries that contain messages listed in the public documentation\n  https://cloud.google.com/knowledge/kb/google-kubernetes-engine-pods-fail-to-start-due-to-exceeded-quota-000004701\n  then provide details on how this issue can be solved.\n  \n[START]: Check the provided parameters.\n[AUTOMATED STEP]: Verify logging.googleapis.com API is ENABLED in project gcpdiag-gke-cluster-autoscaler-rrrr.\n\n   - gcpdiag-gke-cluster-autoscaler-rrrr                                  [OK]\n     [REASON]\n     The `logging.googleapis.com` service is currently in the expected state: `ENABLED`.\n\n[AUTOMATED STEP]: Verify cluster's running version. GKE doesn't enforce the Kubernetes resource quotas for clusters running version 1.28 or later.\n[END]: Finalize `Resource Quotas` diagnostics.\n\n\n"
  },
  {
    "path": "gcpdiag/runbook/gke/templates/clusterautoscaler.jinja",
    "content": "{% block out_of_resources_failure_reason %}\nThe scaleUp event failed because some of the MIGs could not be increased due to lack of resources.\nExample log entry that would help identify involved objects:\n\n{log_entry}\n{% endblock out_of_resources_failure_reason %}\n\n{% block out_of_resources_failure_remediation %}\nFollow the documentation:\n<https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-vm-creation#resource_availability>\n{% endblock out_of_resources_failure_remediation %}\n\n{% block out_of_resources_success_reason %}\nNo \"scale.up.error.out.of.resources\" errors found between {start_time} and {end_time}\n{% endblock out_of_resources_success_reason %}\n\n{% block quota_exceeded_failure_reason %}\nThe scaleUp event failed because some of the MIGs could not be increased, due to exceeded Compute Engine quota.\nExample log entry that would help identify involved objects:\n\n{log_entry}\n{% endblock quota_exceeded_failure_reason %}\n\n{% block quota_exceeded_failure_remediation %}\nCheck the Errors tab of the MIG in Google Cloud console to see what quota is being exceeded. Follow the instructions to\nrequest a quota increase:\n<https://cloud.google.com/compute/quotas#requesting_additional_quota>\n{% endblock quota_exceeded_failure_remediation %}\n\n{% block quota_exceeded_success_reason %}\nNo \"scale.up.error.quota.exceeded errors\" found between {start_time} and {end_time}\n{% endblock quota_exceeded_success_reason %}\n\n{% block instance_timeout_failure_reason %}\nThe scaleUp event failed because instances in some of the MIGs failed to appear in time.\nExample log entry that would help identify involved objects:\n\n{log_entry}\n{% endblock instance_timeout_failure_reason %}\n\n{% block instance_timeout_failure_remediation %}\nThis message is transient. If it persists, engage Google Cloud Support for further investigation.\n{% endblock instance_timeout_failure_remediation %}\n\n{% block instance_timeout_success_reason %}\nNo \"scale.up.error.waiting.for.instances.timeout\" errors found between {start_time} and {end_time}\n{% endblock instance_timeout_success_reason %}\n\n{% block ip_space_exhausted_failure_reason %}\nThe scaleUp event failed because the cluster doesn't have enough unallocated IP address space to use to add new nodes or\nPods.\nExample log entry that would help identify involved objects:\n\n{log_entry}\n{% endblock ip_space_exhausted_failure_reason %}\n\n{% block ip_space_exhausted_failure_remediation %}\nRefer to the troubleshooting steps to address the lack of IP address space for the nodes or pods.\n<https://cloud.google.com/kubernetes-engine/docs/how-to/alias-ips#not_enough_space>\n{% endblock ip_space_exhausted_failure_remediation %}\n\n{% block ip_space_exhausted_success_reason %}\nNo \"scale.up.error.ip.space.exhausted\" errors found between {start_time} and {end_time}\n{% endblock ip_space_exhausted_success_reason %}\n\n{% block service_account_deleted_failure_reason %}\nThe scaleUp event failed because a service account used by Cluster Autoscaler has been deleted.\nExample log entry that would help identify involved objects:\n\n{log_entry}\n{% endblock service_account_deleted_failure_reason %}\n\n{% block service_account_deleted_failure_remediation %}\nEngage Google Cloud Support for further investigation.\n{% endblock service_account_deleted_failure_remediation %}\n\n{% block service_account_deleted_success_reason %}\nNo \"scale.up.error.service.account.deleted\" errors found between {start_time} and {end_time}\n{% endblock service_account_deleted_success_reason %}\n\n{% block min_size_reached_failure_reason %}\nNode cannot be removed because its node group is already at its minimum size.\nExample log entry that would help identify involved objects:\n\n{log_entry}\n{% endblock min_size_reached_failure_reason %}\n\n{% block min_size_reached_failure_remediation %}\nReview and adjust the minimum value set for node pool autoscaling.\n<https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-autoscaler#resizing_a_node_pool>\n{% endblock min_size_reached_failure_remediation %}\n\n{% block min_size_reached_success_reason %}\nNo \"no.scale.down.node.node.group.min.size.reached\" errors found between {start_time} and {end_time}\n{% endblock min_size_reached_success_reason %}\n\n{% block failed_evict_pods_failure_reason %}\nThe scaleDown event failed because some of the Pods could not be evicted from a node.\nExample log entry that would help identify involved objects:\n\n{log_entry}\n{% endblock failed_evict_pods_failure_reason %}\n\n{% block failed_evict_pods_failure_remediation %}\nReview best practices for Pod Disruption Budgets to ensure that the rules allow for eviction of application replicas\nwhen acceptable.\n<https://cloud.google.com/architecture/best-practices-for-running-cost-effective-kubernetes-applications-on-gke#add-pod_disruption_budget-to-your-application>\n{% endblock failed_evict_pods_failure_remediation %}\n\n{% block failed_evict_pods_success_reason %}\nNo \"scale.down.error.failed.to.evict.pods\" errors found between {start_time} and {end_time}\n{% endblock failed_evict_pods_success_reason %}\n\n{% block disabled_annotation_failure_reason %}\nThe scaleDown event failed because the node is annotated with cluster-autoscaler.kubernetes.io/scale-down-disabled:\ntrue.\nExample log entry that would help identify involved objects:\n\n{log_entry}\n{% endblock disabled_annotation_failure_reason %}\n\n{% block disabled_annotation_failure_remediation %}\nCluster autoscaler skips nodes with this annotation without considering their utilization and this message is logged\nregardless of the node's utilization factor.\nIf you want cluster autoscaler to scale down these nodes, remove the annotation.\n{% endblock disabled_annotation_failure_remediation %}\n\n{% block disabled_annotation_success_reason %}\nNo \"no.scale.down.node.scale.down.disabled.annotation\" errors found between {start_time} and {end_time}\n{% endblock disabled_annotation_success_reason %}\n\n{% block min_resource_limit_exceeded_failure_reason %}\nThe scaleDown event failed because it would violate cluster-wide minimal resource limits.\nThese are the resource limits set for node auto-provisioning.\nExample log entry that would help identify involved objects:\n\n{log_entry}\n{% endblock min_resource_limit_exceeded_failure_reason %}\n\n{% block min_resource_limit_exceeded_failure_remediation %}\nReview your limits for memory and vCPU and, if you want cluster autoscaler to scale down this node, decrease the limits\nby following the documentation\n<https://cloud.google.com/kubernetes-engine/docs/how-to/node-auto-provisioning#enable>\n{% endblock min_resource_limit_exceeded_failure_remediation %}\n\n{% block min_resource_limit_exceeded_success_reason %}\nNo \"no.scale.down.node.minimal.resource.limits.exceeded\" errors found between {start_time} and {end_time}\n{% endblock min_resource_limit_exceeded_success_reason %}\n\n{% block no_place_to_move_pods_failure_reason %}\nThe scaleDown event failed because there's no place to move Pods.\nExample log entry that would help identify involved objects:\n\n{log_entry}\n{% endblock no_place_to_move_pods_failure_reason %}\n\n{% block no_place_to_move_pods_failure_remediation %}\nIf you expect that the Pod should be rescheduled, review the scheduling requirements of the Pods on the underutilized\nnode to determine if they can be moved to another node in the cluster.\nTo learn more, see the link\n<https://cloud.google.com/kubernetes-engine/docs/troubleshooting/cluster-autoscaler-scale-down#no-place-to-move-pods>\n{% endblock no_place_to_move_pods_failure_remediation %}\n\n{% block no_place_to_move_pods_success_reason %}\nNo \"no.scale.down.node.no.place.to.move.pods\" errors found between {start_time} and {end_time}\n{% endblock no_place_to_move_pods_success_reason %}\n\n{% block pod_not_backed_by_controller_failure_reason %}\nThe scaleDown event failed because a Pod is not backed by a controller such as ReplicationController, DaemonSet, Job,\nStatefulSet, or ReplicaSet.\nExample log entry that would help identify involved objects:\n\n{log_entry}\n{% endblock pod_not_backed_by_controller_failure_reason %}\n\n{% block pod_not_backed_by_controller_failure_remediation %}\nSet the annotation \"cluster-autoscaler.kubernetes.io/safe-to-evict\": \"true\" for the Pod or define an acceptable\ncontroller\n{% endblock pod_not_backed_by_controller_failure_remediation %}\n\n{% block pod_not_backed_by_controller_success_reason %}\nNo \"no.scale.down.node.pod.not.backed.by.controller\" errors found between {start_time} and {end_time}\n{% endblock pod_not_backed_by_controller_success_reason %}\n\n{% block not_safe_to_evict_annotation_failure_reason %}\nThe scaleDown event failed because a Pod on the node has the safe-to-evict=false annotation\nExample log entry that would help identify involved objects:\n\n{log_entry}\n{% endblock not_safe_to_evict_annotation_failure_reason %}\n\n{% block not_safe_to_evict_annotation_failure_remediation %}\nIf the Pod can be safely evicted, edit the manifest of the Pod and update the annotation to\n\"cluster-autoscaler.kubernetes.io/safe-to-evict\": \"true\".\n{% endblock not_safe_to_evict_annotation_failure_remediation %}\n\n{% block not_safe_to_evict_annotation_success_reason %}\nNo \"no.scale.down.node.pod.not.safe.to.evict.annotation\" errors found between {start_time} and {end_time}\n{% endblock not_safe_to_evict_annotation_success_reason %}\n\n{% block pod_kube_system_unmovable_failure_reason %}\nThe scaleDown event failed because the pod is a non-DaemonSet, non-mirrored, Pod without a PodDisruptionBudget in the\nkube-system namespace.\nExample log entry that would help identify involved objects:\n\n{log_entry}\n{% endblock pod_kube_system_unmovable_failure_reason %}\n\n{% block pod_kube_system_unmovable_failure_remediation %}\nBy default, Pods in the kube-system namespace aren't removed by cluster autoscaler.\n\nTo resolve this issue, either add a PodDisruptionBudget for the kube-system Pods or use a combination of node pools\ntaints and tolerations to separate kube-system Pods from your application Pods.\nTo learn more, see\n<https://cloud.google.com/kubernetes-engine/docs/troubleshooting/cluster-autoscaler-scale-down#kube-system-unmoveable>\n{% endblock pod_kube_system_unmovable_failure_remediation %}\n\n{% block pod_kube_system_unmovable_success_reason %}\nNo \"no.scale.down.node.pod.kube.system.unmovable\" errors found between {start_time} and {end_time}\n{% endblock pod_kube_system_unmovable_success_reason %}\n\n{% block pod_not_enough_pdb_failure_reason %}\nThe scaleDown event failed the pod doesn't have enough PodDisruptionBudget.\nExample log entry that would help identify involved objects:\n\n{log_entry}\n{% endblock pod_not_enough_pdb_failure_reason %}\n\n{% block pod_not_enough_pdb_failure_remediation %}\nReview the PodDisruptionBudget for the Pod and consider making it less restrictive.\nTo learn more, see\n<https://cloud.google.com/kubernetes-engine/docs/troubleshooting/cluster-autoscaler-scale-down#not-enough-pdb>\n{% endblock pod_not_enough_pdb_failure_remediation %}\n\n{% block pod_not_enough_pdb_success_reason %}\nNo \"no.scale.down.node.pod.not.enough.pdb\" errors found between {start_time} and {end_time}\n{% endblock pod_not_enough_pdb_success_reason %}\n\n{% block pod_controller_not_found_failure_reason %}\nPod is blocking the ScaleDown event because its controller (for example, a Deployment or ReplicaSet) can't be found.\nExample log entry that would help identify involved objects:\n\n{log_entry}\n{% endblock pod_controller_not_found_failure_reason %}\n\n{% block pod_controller_not_found_failure_remediation %}\nTo determine what actions were taken that left the Pod running after its controller was removed, review the logs. To\nresolve this issue, manually delete the Pod.\n{% endblock pod_controller_not_found_failure_remediation %}\n\n{% block pod_controller_not_found_success_reason %}\nNo \"no.scale.down.node.pod.controller.not.found\" errors found between {start_time} and {end_time}\n{% endblock pod_controller_not_found_success_reason %}\n\n{% block pod_unexpected_error_failure_reason %}\nPod is blocking the ScaleDown event because of an unexpected error.\nExample log entry that would help identify involved objects:\n\n{log_entry}\n{% endblock pod_unexpected_error_failure_reason %}\n\n{% block pod_unexpected_error_failure_remediation %}\nThe root cause of this error is unknown. Contact Cloud Customer Care for further investigation.\n{% endblock pod_unexpected_error_failure_remediation %}\n\n{% block pod_unexpected_error_success_reason %}\nNo \"no.scale.down.node.pod.unexpected.error\" errors found between {start_time} and {end_time}\n{% endblock pod_unexpected_error_success_reason %}\n"
  },
  {
    "path": "gcpdiag/runbook/gke/templates/imagepull.jinja",
    "content": "{% block image_not_found_failure_reason %}\nA container on pod on node failed to pull image because the image was not found in the repository.\nExample log entry:\n\n{log_entry}\n{% endblock image_not_found_failure_reason %}\n\n{% block image_not_found_failure_remediation %}\nRefer to the troubleshooting documentation:\n<https://cloud.google.com/kubernetes-engine/docs/troubleshooting#ImagePullBackOff>\n{% endblock image_not_found_failure_remediation %}\n\n{% block image_not_found_success_reason %}\nNo \"Failed to pull image.*not found\" errors were found for cluster between {start_time} and {end_time}.\n{% endblock image_not_found_success_reason %}\n\n{% block image_forbidden_failure_reason %}\nImage cannot be pulled by a container on Pod, because there are not enough permissions to pull it from the repository.\nVerify the node SA has the correct permissions.\nExample log entry that would help identify involved objects:\n\n{log_entry}\n{% endblock image_forbidden_failure_reason %}\n\n{% block image_forbidden_failure_remediation %}\nEnsure the node service account has the necessary permissions to pull the image. Refer to the documentation:\n<https://cloud.google.com/artifact-registry/docs/integrate-gke#permissions>\n{% endblock image_forbidden_failure_remediation %}\n\n{% block image_forbidden_success_reason %}\nNo \"Failed to pull image.*403 Forbidden\" errors were found for cluster between {start_time} and {end_time}.\n{% endblock image_forbidden_success_reason %}\n\n{% block image_dns_issue_failure_reason %}\nThe DNS resolver (metadata server 169.254.169.254:53) on node was unable to resolve the image repository's IP address, preventing image pull. This often indicates issues with networking or DNS configuration.\nExample log entry:\n\n{log_entry}\n{% endblock image_dns_issue_failure_reason %}\n\n{% block image_dns_issue_failure_remediation %}\nVerify networking and DNS requirements, particularly for Private Google Access. Refer to the documentation:\n<https://cloud.google.com/vpc/docs/configure-private-google-access#requirements>\n{% endblock image_dns_issue_failure_remediation %}\n\n{% block image_dns_issue_success_reason %}\nNo \"Failed to pull image.*lookup.*server misbehaving\" errors were found for cluster between {start_time} and {end_time}.\n{% endblock image_dns_issue_success_reason %}\n\n{% block image_connection_timeout_restricted_private_failure_reason %}\nConnections from node to restricted.googleapis.com (199.36.153.4/30) or private.googleapis.com (199.36.153.8/30) timed out, preventing image pulls. This may be caused by a firewall rule blocking egress traffic to these IP ranges.\nExample log entry:\n\n{log_entry}\n{% endblock image_connection_timeout_restricted_private_failure_reason %}\n\n{% block image_connection_timeout_restricted_private_failure_remediation %}\nEnsure firewall rules permit egress traffic to restricted.googleapis.com (199.36.153.4/30) or private.googleapis.com (199.36.153.8/30). Refer to the documentation:\n<https://cloud.google.com/vpc-service-controls/docs/set-up-private-connectivity>\n{% endblock image_connection_timeout_restricted_private_failure_remediation %}\n\n{% block image_connection_timeout_restricted_private_success_reason %}\nNo \"Failed to pull image.*dial tcp.*199.36.153.\\d:443: i/o timeout\" errors were found for cluster between {start_time} and {end_time}.\n{% endblock image_connection_timeout_restricted_private_success_reason %}\n\n{% block image_connection_timeout_failure_reason %}\nConnections from node to Google APIs timed out, preventing image pulls. This may be caused by a firewall rule blocking egress traffic to Google APIs. The specific blocked IP range might be indicated in the log entry.\nExample log entry:\n\n{log_entry}\n{% endblock image_connection_timeout_failure_reason %}\n\n{% block image_connection_timeout_failure_remediation %}\nEnsure firewall rules permit egress traffic to Google APIs. Refer to the documentation:\n<https://cloud.google.com/kubernetes-engine/docs/concepts/firewall-rules>\n{% endblock image_connection_timeout_failure_remediation %}\n\n{% block image_connection_timeout_success_reason %}\nNo \"Failed to pull image.*dial tcp.*i/o timeout\" errors were found for cluster between {start_time} and {end_time}.\n{% endblock image_connection_timeout_success_reason %}\n\n{% block image_not_found_insufficient_scope_failure_reason %}\nEither user or service account that's trying to pull the image doesn't have the necessary permissions to access it or\nImage doesn't exist.\nExample log entry that would help identify involved objects:\n\n{log_entry}\n{% endblock image_not_found_insufficient_scope_failure_reason %}\n\n{% block image_not_found_insufficient_scope_failure_remediation %}\n\n1. Verify that the image name is correct.\n2. Ensure the node's service account has the necessary permissions. Refer to the documentation:\n<https://cloud.google.com/kubernetes-engine/docs/troubleshooting/deployed-workloads#image-not-found>\n{% endblock image_not_found_insufficient_scope_failure_remediation %}\n\n{% block image_not_found_insufficient_scope_success_reason %}\nNo \"Failed to pull image.*insufficient_scope\" errors found between {start_time} and {end_time}\n{% endblock image_not_found_insufficient_scope_success_reason %}\n"
  },
  {
    "path": "gcpdiag/runbook/gke/templates/ipexhaustion.jinja",
    "content": "#########################################################\n\n# messages for the pod IP exhaustion #\n\n#########################################################\n\n# messages for pod IP exhaustion\n\n{% block pod_ip_exhaustion_failure_reason %}\nPod IP exhaustion is detected in the cluster {cluster_name}\n{% endblock pod_ip_exhaustion_failure_reason %}\n\n{% block pod_ip_exhaustion_failure_remediation %}\nPlease follow the below documentation [1] to add ipv4 range to the autopilot cluster to mitgate the issue.\n\n[1] <https://cloud.google.com/kubernetes-engine/docs/how-to/multi-pod-cidr#add-pod-ipv4-range-in-autopilot-cluster>\n{% endblock pod_ip_exhaustion_failure_remediation %}\n\n{% block pod_ip_exhaustion_failure_remediation_a1 %}\nHere are some commands you can run to add an additional IPv4 pod range to address this issue, and you can find more detailed instructions at the documentation [1].\n\n**Allocate IP addresses with designed length and create a pod range**\n\n```\nexport POD_IP_RANGE_PREFIX_LENGTH=14\nexport POD_RANGE_NAME=\"range-`tr -dc a-z0-9 </dev/urandom | head -c 13`\"\ngcloud network-connectivity internal-ranges create $POD_RANGE_NAME \\\n    --network={network} \\\n    --prefix-length=$POD_IP_RANGE_PREFIX_LENGTH\n```\n\n**Assign the pod range to subnet**\n\n```\ngcloud compute networks subnets update {subnet_name} \\\n    --region={region} \\\n    --add-secondary-ranges-with-reserved-internal-range=\"$POD_RANGE_NAME=//networkconnectivity.googleapis.com/projects/{project_name}/locations/global/internalRanges/$POD_RANGE_NAME\"\n```\n\n**Add additional pod range to your cluster**\n\n```\ngcloud container clusters update {cluster_name} \\\n    --additional-pod-ipv4-ranges=$POD_RANGE_NAME \\\n    --location={region}\n```\n\nFollowing execution of these commands, you should be able to create a new node pool that utilizes the newly configured pod IP range without encountering pod IP exhaustion issues.\n\nAdditionally, consider leveraging the Class E IPv4 address space (240.0.0.0/4) to support your growth.\nWhile these addresses are reserved for future use (see Google VPC network valid IPv4 ranges [2]), they can be used in certain situations.\n\nThe linked documentation [3] addresses common misconceptions about Class E, discusses its benefits and considerations, and provides guidance on planning and using GKE clusters with this address space.\nIt also includes a real-world example of how Class E successfully solved IP exhaustion challenges.\n\n[1] <https://cloud.google.com/kubernetes-engine/docs/how-to/multi-pod-cidr#cluster-add-pod-ipv4-range>\n\n[2] <https://cloud.google.com/vpc/docs/subnets#valid-ranges>\n\n[3] <https://cloud.google.com/blog/products/containers-kubernetes/how-class-e-addresses-solve-for-ip-address-exhaustion-in-gke>\n\n{% endblock pod_ip_exhaustion_failure_remediation_a1 %}\n\n#############################################################\n\n# Messages for Node IP exhaustion #\n\n#############################################################\n\n# messages for node IP exhaustion\n\n{% block node_ip_exhaustion_success_reason %}\nNo Node IP exhaustion detected in the cluster {cluster_name}\n\n{% endblock node_ip_exhaustion_success_reason %}\n\n{% block node_ip_exhaustion_failure_reason %}\nNode IP exhaustion is detected in the cluster {cluster_name} for the subnet {node_subnet}\n\n{% endblock node_ip_exhaustion_failure_reason %}\n\n{% block node_ip_exhaustion_failure_remediation %}\nPlease follow the below documentation [1] to expand the ip range of the node subnet.\nThe subnet that has exhausted its IP space is {node_subnet}.\n\n[1] <https://cloud.google.com/vpc/docs/create-modify-vpc-networks#expand-subnet>\n{% endblock node_ip_exhaustion_failure_remediation %}\n"
  },
  {
    "path": "gcpdiag/runbook/gke/templates/ipmasq_standard.jinja",
    "content": "{% block Nodeproblem_failure_reason %}\nThere are no egress traffic to Destination IP which indicates that GKE NODE is also having issue to connect to\ndestination IP.\n{% endblock Nodeproblem_failure_reason %}\n\n{% block Nodeproblem_failure_remediation %}\nEnable VPC flow logs by following the documentation and look if traffic id going out to destination:\n<https://cloud.google.com/vpc/docs/using-flow-logs#enable-logging-existing>\n{% endblock Nodeproblem_failure_remediation %}\n\n{% block Nodeproblem_success_reason %}\nWhen VPC flow logs shows traffic is going out, then GKE IP masquerading may be working as intended. If the end-to-end\ncase is still failing, the problem is likely to be somewhere in the networking path between Dest-IP and node on which\nimpacted Pod is scheduled.\n{% endblock Nodeproblem_success_reason %}\n\n{% block daemon_uncertain_reason %}\nCheck for ip-masq-agent daemonSet is deployed in the Cluster. If yes follow check next step.\n{% endblock daemon_uncertain_reason %}\n\n{% block daemon_uncertain_remediation %}\nIf No, please follow [1] to deploy ip-masq-agent DaemonSet in the kube-system namespace and wait for around 5 minutes\nfor the DaemonSet to be ready.\n\n[1] <https://cloud.google.com/kubernetes-engine/docs/how-to/ip-masquerade-agent#checking_the_ip-masq-agent_daemonset>\n{% endblock daemon_uncertain_remediation %}\n\n{% block configmap_uncertain_reason %}\nWhen ip-masq-agent daemonset is deployed without a configmap, it uses the default non-masq destinations [1].\n\n[1] <https://cloud.google.com/kubernetes-engine/docs/how-to/ip-masquerade-agent#creating_the_ip-masq-agent_configmap>\n{% endblock configmap_uncertain_reason %}\n\n{% block configmap_uncertain_remediation %}\nIf you needs to customize the configmap, then follow the steps [1] to deploy ip-masq-agent ConfigMap in the kube-system\nnamespace.\n[1] <https://cloud.google.com/kubernetes-engine/docs/how-to/ip-masquerade-agent#creating_the_ip-masq-agent_configmap>\n{% endblock configmap_uncertain_remediation %}\n\n{% block pod_uncertain_reason %}\nWhen ip-masq-agent daemonset is deployed without a configmap, it uses the default non-masq destinations [1].\n\n[1] <https://cloud.google.com/kubernetes-engine/docs/how-to/ip-masquerade-agent#creating_the_ip-masq-agent_configmap>\n{% endblock pod_uncertain_reason %}\n\n{% block pod_uncertain_remediation %}\nFollow the steps for including the pod IP CIDRs in nonMasqueradeCIDRs [1].\n\n[1] <https://cloud.google.com/kubernetes-engine/docs/how-to/ip-masquerade-agent#edit-ip-masq-agent-configmap>\n{% endblock pod_uncertain_remediation %}\n\n{% block node_uncertain_reason %}\nWhen ip-masq-agent daemonset is deployed without a configmap, it uses the default non-masq destinations [1].\n\n[1] <https://cloud.google.com/kubernetes-engine/docs/how-to/ip-masquerade-agent#creating_the_ip-masq-agent_configmap>\n{% endblock node_uncertain_reason %}\n\n{% block node_uncertain_remediation %}\nFollow the steps for including the Node IP CIDRs in nonMasqueradeCIDRs [1].\n\n[1] <https://cloud.google.com/kubernetes-engine/docs/how-to/ip-masquerade-agent#edit-ip-masq-agent-configmap>\n{% endblock node_uncertain_remediation %}\n\n{% block destination_uncertain_reason %}\nWhen ip-masq-agent daemonset is deployed without a configmap, it uses the default non-masq destinations [1].\n\n[1] <https://cloud.google.com/kubernetes-engine/docs/how-to/ip-masquerade-agent#creating_the_ip-masq-agent_configmap>\n{% endblock destination_uncertain_reason %}\n\n{% block destination_uncertain_remediation %}\nFollow the steps for including the Destination IP CIDRs in nonMasqueradeCIDRs [1].\n\n[1] <https://cloud.google.com/kubernetes-engine/docs/how-to/ip-masquerade-agent#edit-ip-masq-agent-configmap>\n{% endblock destination_uncertain_remediation %}\n"
  },
  {
    "path": "gcpdiag/runbook/gke/templates/logs.jinja",
    "content": "{% block project_logging_check_failure_reason %}\nThe logging health check failed because the Cloud Logging API is not enabled for the project.\n{% endblock project_logging_check_failure_reason %}\n\n{% block project_logging_check_failure_remediation %}\nEnable the Cloud Logging API for your project through the Google Cloud Console or relevant API calls. See instructions:\n<https://cloud.google.com/kubernetes-engine/docs/troubleshooting/logging#verify_logging_is_enabled_in_the_project>\n{% endblock project_logging_check_failure_remediation %}\n\n{% block project_logging_check_success_reason %}\nThe Cloud Logging API is enabled for the project.\n{% endblock project_logging_check_success_reason %}\n\n{% block cluster_logging_check_failure_reason %}\nThe logging health check failed because cluster-level logging is not enabled.\n{% endblock cluster_logging_check_failure_reason %}\n\n{% block cluster_logging_check_failure_remediation %}\nEnable cluster-level logging for your Kubernetes cluster. This can be done through the Google Cloud Console or\nGKE-specific tools. See instructions:\n<https://cloud.google.com/kubernetes-engine/docs/troubleshooting/logging#verify_logging_is_enabled_on_the_cluster>\n{% endblock cluster_logging_check_failure_remediation %}\n\n{% block cluster_logging_check_success_reason %}\nCluster-level logging is enabled for the cluster.\n{% endblock cluster_logging_check_success_reason %}\n\n{% block node_pool_access_scope_check_failure_reason %}\nThe logging health check failed because node pools have insufficient access scope for Cloud Logging.\n{% endblock node_pool_access_scope_check_failure_reason %}\n\n{% block node_pool_access_scope_check_failure_remediation %}\nAdjust node pool access scope to grant necessary logging permissions. See instructions:\n<https://cloud.google.com/kubernetes-engine/docs/troubleshooting/logging#verify_nodes_in_the_node_pools_have_access_scope>\n{% endblock node_pool_access_scope_check_failure_remediation %}\n\n{% block node_pool_access_scope_check_success_reason %}\nNode pools have sufficient access scope for Cloud Logging.\n{% endblock node_pool_access_scope_check_success_reason %}\n\n{% block service_account_permissions_check_failure_reason %}\nThe logging health check failed because the service account lacks necessary permissions to write logs.\n{% endblock service_account_permissions_check_failure_reason %}\n\n{% block service_account_permissions_check_failure_remediation %}\nGrant the service account the 'roles/logging.logWriter' role or equivalent permissions. See instructions:\n<https://cloud.google.com/kubernetes-engine/docs/troubleshooting/logging#verify_the_node_pools_service_account_has_a_role_with_the_correct_permissions>\n{% endblock service_account_permissions_check_failure_remediation %}\n\n{% block service_account_permissions_check_success_reason %}\nThe service account has necessary permissions to write logs.\n{% endblock service_account_permissions_check_success_reason %}\n\n{% block logging_write_api_quota_exceeded_check_failure_reason %}\nThe logging health check failed because your project has exceeded its Cloud Logging Write API quota.\n{% endblock logging_write_api_quota_exceeded_check_failure_reason %}\n\n{% block logging_write_api_quota_exceeded_check_failure_remediation %}\nReview logging usage and either reduce log volume or request a quota increase. See instructions:\n<https://cloud.google.com/kubernetes-engine/docs/troubleshooting/logging#verify_that_write_api_quotas_have_not_been_reached>\n{% endblock logging_write_api_quota_exceeded_check_failure_remediation %}\n\n{% block logging_write_api_quota_exceeded_check_success_reason %}\nThe project is within its Cloud Logging Write API quota between {start_time} and {end_time}.\n{% endblock logging_write_api_quota_exceeded_check_success_reason %}\n"
  },
  {
    "path": "gcpdiag/runbook/gke/templates/monitoring_configuration.jinja",
    "content": "{% block project_monitoring_configuration_check_failure_reason %}\nThe Monitoring health check failed because the Cloud Monitoring API is not enabled for the project.\n{% endblock project_monitoring_configuration_check_failure_reason %}\n\n{% block project_monitoring_configuration_check_failure_remediation %}\nEnable the Cloud Monitoring API for the project through the Google Cloud Console or relevant API calls. See instructions:\n<https://cloud.google.com/monitoring/api/enable-api#enabling-api-v3>\n{% endblock project_monitoring_configuration_check_failure_remediation %}\n\n{% block project_monitoring_configuration_check_success_reason %}\nThe Cloud Monitoring API is enabled for the project.\n{% endblock project_monitoring_configuration_check_success_reason %}\n\n{% block cluster_monitoring_configuration_check_failure_reason %}\nThe monitoring health check failed because cluster-level monitoring is not enabled.\n{% endblock cluster_monitoring_configuration_check_failure_reason %}\n\n{% block cluster_monitoring_configuration_check_failure_remediation %}\nEnable cluster-level monitoring for the Kubernetes cluster. This can be done through the Google Cloud Console or\nGKE-specific tools. See instructions:\n<https://cloud.google.com/kubernetes-engine/docs/concepts/observability>\n{% endblock cluster_monitoring_configuration_check_failure_remediation %}\n\n{% block cluster_monitoring_configuration_check_success_reason %}\nCluster-level monitoring is enabled for the cluster.\n{% endblock cluster_monitoring_configuration_check_success_reason %}\n\n\n{% block node_pool_access_scope_configuration_check_failure_reason %}\nThe monitoring health check failed because node pools have insufficient access scope for Cloud Monitoring.\n{% endblock node_pool_access_scope_configuration_check_failure_reason %}\n\n{% block node_pool_access_scope_configuration_check_failure_remediation %}\nAdjust node pool access scope to grant necessary monitoring permissions. See instructions:\n<https://cloud.google.com/kubernetes-engine/docs/how-to/access-scopes#default_access_scopes>\n{% endblock node_pool_access_scope_configuration_check_failure_remediation %}\n\n{% block node_pool_access_scope_configuration_check_success_reason %}\nNode pools have sufficient access scope for Cloud Monitoring.\n{% endblock node_pool_access_scope_configuration_check_success_reason %}\n\n\n{% block service_account_permissions_configuration_check_failure_reason %}\nThe monitoring health check failed because the service account lacks necessary permissions to write metrics.\n{% endblock service_account_permissions_configuration_check_failure_reason %}\n\n{% block service_account_permissions_configuration_check_failure_remediation %}\nGrant the service account the 'roles/monitoring.metricWriter' role or equivalent permissions. See instructions:\n<https://cloud.google.com/kubernetes-engine/docs/troubleshooting/dashboards#write_permissions>\n{% endblock service_account_permissions_configuration_check_failure_remediation %}\n\n{% block service_account_permissions_configuration_check_success_reason %}\nThe service account has necessary permissions to write metrics.\n{% endblock service_account_permissions_configuration_check_success_reason %}\n"
  },
  {
    "path": "gcpdiag/runbook/gke/templates/nodeautorepair.jinja",
    "content": "{% block node_notready_failure_reason %}\nThe node {node} was auto-repaired because it was in a NotReady state for more than approximately 10 minutes.\n{% endblock node_notready_failure_reason %}\n\n{% block node_notready_failure_remediation %}\nThe auto-repair should have fixed the detected NotReady state.\nFor more details check: <https://cloud.google.com/kubernetes-engine/docs/how-to/node-auto-repair>\n{% endblock node_notready_failure_remediation %}\n\n{% block node_notready_success_reason %}\nThe node {node} was auto-repaired for reasons other than being in a NotReady state.\n{% endblock node_notready_success_reason %}\n\n{% block node_disk_full_failure_reason %}\nThe node {node} was auto-repaired because it had disk pressure for more than 30 minutes.\n{% endblock node_disk_full_failure_reason %}\n\n{% block node_disk_full_failure_remediation %}\nThe auto-repair should have fixed the detected disk pressure.\nFor more details check: <https://cloud.google.com/kubernetes-engine/docs/how-to/node-auto-repair>\n{% endblock node_disk_full_failure_remediation %}\n\n{% block node_disk_full_success_reason %}\nThe node {node} was auto-repaired for reasons other than disk pressure.\n{% endblock node_disk_full_success_reason %}\n\n{% block unallocatable_gpu_failure_reason %}\nThe node {node} was auto-repaired because it had unallocatable GPU(s) for more than 15 minutes.\n{% endblock unallocatable_gpu_failure_reason %}\n\n{% block unallocatable_gpu_failure_remediation %}\nThe auto-repair should have fixed the detected unallocatable GPU(s).\nFor more details check: <https://cloud.google.com/kubernetes-engine/docs/how-to/node-auto-repair>\n{% endblock unallocatable_gpu_failure_remediation %}\n\n{% block unallocatable_gpu_success_reason %}\nThe node {node} was auto-repaired for reasons other than unallocatable GPU(s).\n{% endblock unallocatable_gpu_success_reason %}\n\n{% block unallocatable_tpu_failure_reason %}\nThe node {node} was auto-repaired because it had unallocatable TPU(s) for more than 10 minutes.\n{% endblock unallocatable_tpu_failure_reason %}\n\n{% block unallocatable_tpu_failure_remediation %}\nThe auto-repair should have fixed the detected unallocatable TPU(s).\nFor more details check: <https://cloud.google.com/kubernetes-engine/docs/how-to/tpus#node-auto-repair>\n{% endblock unallocatable_tpu_failure_remediation %}\n\n{% block unallocatable_tpu_success_reason %}\nThe node {node} was auto-repaired for reasons other than unallocatable TPU(s).\n{% endblock unallocatable_tpu_success_reason %}\n"
  },
  {
    "path": "gcpdiag/runbook/gke/templates/nodebootstrapping.jinja",
    "content": "{% block node_registration_checker_failure_reason %}\nNode {node} in zone {location} is currently running, but it failed registration with kube-apiserver, below is the Node\nRegistration Checker summary:\n\n{% for i in range(16) %}\n{log_entries[{{ i }}]}\n\n{% endfor %}\n{% endblock node_registration_checker_failure_reason %}\n\n{% block node_registration_checker_failure_reason_a1 %}\nNode {node} in zone {location} failed registration with kube-apiserver, it is in a repair loop. Below is the Node\nRegistration Checker summary:\n\n{% for i in range(16) %}\n{log_entries[{{ i }}]}\n\n{% endfor %}\n{% endblock node_registration_checker_failure_reason_a1 %}\n\n{% block node_registration_checker_failure_reason_a2 %}\nNode {node} in zone {location} is not currently running. While checking logs it was found that it failed registration\nwith kube-apiserver. Below is the Node Registration Checker summary:\n\n{% for i in range(16) %}\n{log_entries[{{ i }}]}\n\n{% endfor %}\n{% endblock node_registration_checker_failure_reason_a2 %}\n\n{% block node_registration_checker_failure_reason_a3 %}\nCould not find summary from Node Registration Checker for node {node} in zone {location}. The node might have been\ndeleted before Node Registration Checker could finish running.\n{% endblock node_registration_checker_failure_reason_a3 %}\n\n{% block node_registration_checker_failure_remediation_a3 %}\nTry to run the runbook with a node that is currently running.\n{% endblock node_registration_checker_failure_remediation_a3 %}\n\n{% block node_registration_checker_failure_remediation %}\nTo understand why the node failed registration with kube-apiserver, please check the following documentation page:\n<https://cloud.google.com/kubernetes-engine/docs/troubleshooting/node-registration#use-nrc>\n{% endblock node_registration_checker_failure_remediation %}\n\n{% block node_registration_checker_success_reason %}\nNode {node} is currently running and, according to the output from Node Registration Checker, it was registered\nsuccessfully. Below is the log entry that shows successful registration:\n\n{log_entry}\n{% endblock node_registration_checker_success_reason %}\n\n{% block node_registration_checker_success_reason_a1 %}\nNode {node} is not currently running, but according to the output from Node Registration Checker, it was registered\nsuccessfully in the past. Below is the log entry that shows successful registration:\n\n{log_entry}\n{% endblock node_registration_checker_success_reason_a1 %}\n\n{% block node_registration_checker_uncertain_reason %}\nThe node {node} in the zone {location} is running, but there are no logs generated by Node Registration Checker in the\nprovided time range {start_time} - {end_time}.\n{% endblock node_registration_checker_uncertain_reason %}\n\n{% block node_registration_checker_uncertain_remediation %}\nThis runbook looks for logs generated by Node Registration Checker. Because there are no logs from Node Registration\nChecker for the node {node}, but it is running, there could be a different issue with the node.\nPlease try the runbook with a different node in the same nodepool.\n{% endblock node_registration_checker_uncertain_remediation %}\n\n{% block node_insert_check_failure_reason %}\nThere were {NR_ERRORS} errors found for instances.insert method for nodepool {NODEPOOL} in the cluster {NAME} in\nlocation {location} between {start_time} and {end_time}.\nBelow is the latest log entry found that can help you identify the issue and involved objects:\n\n{log_entry}\n{% endblock node_insert_check_failure_reason %}\n\n{% block node_insert_check_failure_remediation %}\nPlease refer to the troubleshooting steps to learn how to resolve the errors:\n<https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-vm-creation>\n{% endblock node_insert_check_failure_remediation %}\n\n{% block node_insert_check_success_reason %}\nNo errors found for instances.insert method for nodepool {NODEPOOL} in the cluster {NAME} in location {location} between\n{start_time} and {end_time}.\n{% endblock node_insert_check_success_reason %}\n"
  },
  {
    "path": "gcpdiag/runbook/gke/templates/nodeunavailability.jinja",
    "content": "{% block node_live_migration_failure_reason %}\nLive migration check failed for node {node}.\n{% endblock node_live_migration_failure_reason %}\n\n{% block node_live_migration_failure_remediation %}\nThere was a live migration event for the node {node}.\n\nFor more details about Live migration process during maintenance events, please consult the documentation:\n<https://cloud.google.com/compute/docs/instances/live-migration-process>\n{% endblock node_live_migration_failure_remediation %}\n\n{% block node_live_migration_success_reason %}\nThe node {node} was unavailable for reasons other than live migration.\n{% endblock node_live_migration_success_reason %}\n\n{% block node_preempted_failure_reason %}\nThe node {node} was preempted.\n{% endblock node_preempted_failure_reason %}\n\n{% block node_preempted_failure_remediation %}\nCompute Engine might stop (preempt) preemptible instances if it needs to reclaim the compute capacity for allocation to other VMs.\n\nFor more details about preemptible VMs in GKE please consult the documentation:\n<https://cloud.google.com/kubernetes-engine/docs/how-to/preemptible-vms>\n{% endblock node_preempted_failure_remediation %}\n\n{% block node_preempted_success_reason %}\nThe node {node} was unavailable for reasons other than preemption.\n{% endblock node_preempted_success_reason %}\n\n{% block node_removed_by_autoscaler_failure_reason %}\nThe node {node} was removed by the cluster autoscaler.\n{% endblock node_removed_by_autoscaler_failure_reason %}\n\n{% block node_removed_by_autoscaler_failure_remediation %}\nThis is expected behavior. GKE's cluster autoscaler automatically resizes the number of nodes in a given node pool, based on the demands of your workloads. When demand is low, the cluster autoscaler scales back down to a minimum size that you designate.\n\nFor more details about Cluster Autoscaler ScaleDown events please consult the documentation:\n<https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-autoscaler-visibility#scaledown-event>\n{% endblock node_removed_by_autoscaler_failure_remediation %}\n\n{% block node_removed_by_autoscaler_success_reason %}\nThe node {node} was unavailable for reasons other than scale down by the cluster autoscaler.\n{% endblock node_removed_by_autoscaler_success_reason %}\n\n{% block node_pool_upgrade_failure_reason %}\nThe node {node} was unavailable due to a node pool upgrade.\n{% endblock node_pool_upgrade_failure_reason %}\n\n{% block node_pool_upgrade_failure_remediation %}\nThis is expected behavior, when the upgrade is performed, nodes are drained and re-created to match the desired version.\n\nTo list the node upgrade operations, please issue the following gcloud command:\n\n```\ngcloud container operations list --filter=operationType:UPGRADE_NODES\n```\n\nFor more details about node upgrades please consult the documentation:\n<https://cloud.google.com/kubernetes-engine/docs/how-to/node-auto-upgrades>\n{% endblock node_pool_upgrade_failure_remediation %}\n\n{% block node_pool_upgrade_success_reason %}\nThe node {node} was unavailable for reasons other than a node pool upgrade.\n{% endblock node_pool_upgrade_success_reason %}\n"
  },
  {
    "path": "gcpdiag/runbook/gke/templates/resourcequotas.jinja",
    "content": "{% block higher_version_quota_exceeded_step_name %}\nVerify Kubernetes resource quotas are within limits for cluster:\nproject/{project_id}/locations/{cluster_location}/clusters/{cluster_name} between {start_time} and {end_time}.\n{% endblock higher_version_quota_exceeded_step_name %}\n\n{% block higher_version_quota_exceeded_failure_reason %}\nThe cluster projects/{project}/locations/{location}/clusters/{cluster} has exceeded its Kubernetes resource quota between\n{start_time} and {end_time}.\nExample log entry that would help identify involved objects:\n\n{log_entry}\n{% endblock higher_version_quota_exceeded_failure_reason %}\n\n{% block higher_version_quota_exceeded_failure_remediation %}\nGKE doesn't enforce the Kubernetes resource quotas for clusters running version 1.28 or later, however GKE doesn't\nrestrict applying custom Kubernetes resource quotas.\nMore details: <https://cloud.google.com/kubernetes-engine/quotas#resource_quotas>\nTo list resource quotas in the cluster, use the following command:\n\n`kubectl get resourcequota --all-namespaces`\n\nRefer to the Kubernetes documentation for more information about resource quotas: <https://kubernetes.io/docs/concepts/policy/resource-quotas/>\n{% endblock higher_version_quota_exceeded_failure_remediation %}\n\n{% block higher_version_quota_exceeded_success_reason %}\nThe cluster projects/{project}/locations/{location}/clusters/{cluster} was within its Kubernetes resource quota between\n{start_time} and {end_time}.\n{% endblock higher_version_quota_exceeded_success_reason %}\n\n{% block lower_version_quota_exceeded_step_name %}\nVerify Kubernetes resource quotas are within limits for cluster:\nproject/{project_id}/locations/{cluster_location}/clusters/{cluster_name} between {start_time} and {end_time}\n{% endblock lower_version_quota_exceeded_step_name %}\n\n{% block lower_version_quota_exceeded_failure_reason %}\nThe cluster projects/{project}/locations/{location}/clusters/{cluster} has exceeded its Kubernetes resource quota between\n{start_time} and {end_time}.\nExample log entry that would help identify involved objects:\n\n{log_entry}\n{% endblock lower_version_quota_exceeded_failure_reason %}\n\n{% block lower_version_quota_exceeded_failure_remediation %}\nFor clusters with under 100 nodes, GKE applies a Kubernetes resource quota to every namespace. These quotas protect the\ncluster's control plane from instability caused by potential bugs in applications deployed to the cluster. These quotas cannot\nbe removed because they are enforced by GKE.\nSee details: <https://cloud.google.com/kubernetes-engine/quotas#resource_quotas>\nTo list resource quotas in the cluster, use the following command:\n\n`kubectl get resourcequota --all-namespaces`\n\nRefer to the Kubernetes documentation for more information about resource quotas: <https://kubernetes.io/docs/concepts/policy/resource-quotas/>\n\nFor the GKE resource quotas named \"gke-resource-quotas\", open a\nGCP support case to request either an increase to a specific quota limit or the disabling of GKE resource quotas for the\ncluster.\n{% endblock lower_version_quota_exceeded_failure_remediation %}\n\n{% block lower_version_quota_exceeded_success_reason %}\nThe cluster projects/{project}/locations/{location}/clusters/{cluster} was within its Kubernetes resource quota between\n{start_time} and {end_time}.\n{% endblock lower_version_quota_exceeded_success_reason %}\n"
  },
  {
    "path": "gcpdiag/runbook/iam/__init__.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "gcpdiag/runbook/iam/constants.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"IAM constants\"\"\"\n# pylint: disable=unused-wildcard-import, wildcard-import\nfrom gcpdiag.runbook.gcp.constants import *\n\n# All users, if the VM has a service account\nSA_USER_ROLE = 'roles/iam.serviceAccountUser'\n# TCP IAP\nIAP_ROLE = 'roles/iap.tunnelResourceAccessor'\n\n# Basic Roles\nOWNER_ROLE = 'roles/owner'\nVIEWER_ROLE = 'roles/viewer'\n"
  },
  {
    "path": "gcpdiag/runbook/iam/flags.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Contains flags specific to GCP IAM product\"\"\"\n# pylint: disable=wildcard-import, unused-wildcard-import\nfrom gcpdiag.runbook.gcp.flags import *\n\nSERVICE_ACCOUNT = 'service_account'\nPRINCIPAL = 'principal'\n"
  },
  {
    "path": "gcpdiag/runbook/iam/generalized_steps.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Contains Generatlized Steps for IAM\"\"\"\n\nfrom typing import Optional, Set\n\nfrom gcpdiag import runbook\nfrom gcpdiag.queries import iam\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.iam import flags\n\n\nclass VmHasAnActiveServiceAccount(runbook.Step):\n  \"\"\"Investigates if a VM's service account is active.\n\n  This step checks if the specified service account is neither disabled nor deleted.\n  It verifies the existence of the service account and its active status within\n  the specified project.\n\n  Attributes:\n    template (str): Template identifier for reporting the service account status.\n    service_account (str, optional): The email address of the service account to check.\n                                     If not provided, it is obtained from the operation's context.\n    project_id (str, optional): The ID of the Google Cloud project within which to check\n                                the service account. If not provided, it is obtained from\n                                the operation's context.\n  \"\"\"\n\n  template = 'service_account::active'\n  service_account: str = ''\n  project_id: str = ''\n\n  def execute(self):\n    \"\"\"Verify if the specified service account is active.\"\"\"\n    sa = self.service_account or op.get(flags.SERVICE_ACCOUNT)\n    context = op.get_context()\n    project_id = self.project_id or op.get(flags.PROJECT_ID)\n\n    if sa and project_id:\n      sa_resource = next(\n          filter(lambda r: r.email == sa,\n                 iam.get_service_account_list(project_id)), None)\n      # Verify service account exists\n      if not iam.is_service_account_existing(sa, context):\n        op.add_failed(sa_resource,\n                      reason=op.prep_msg(op.FAILURE_REASON,\n                                         sa=sa_resource.full_path),\n                      remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n      # Verify service account exists\n      elif not iam.is_service_account_enabled(sa, context):\n        op.add_failed(resource=sa_resource,\n                      reason=op.prep_msg(op.FAILURE_REASON),\n                      remediation=op.prep_msg(op.FAILURE_REMEDIATION_ALT1,\n                                              sa=sa_resource.full_path))\n      elif (iam.is_service_account_existing(sa, context) and\n            iam.is_service_account_enabled(sa, context)):\n        op.add_ok(sa_resource,\n                  op.prep_msg(op.SUCCESS_REASON, sa=sa_resource.full_path))\n      else:\n        op.add_uncertain(None,\n                         reason=op.UNCERTAIN_REASON,\n                         remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION))\n    else:\n      op.add_uncertain(None,\n                       reason=op.UNCERTAIN_REASON,\n                       remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION))\n\n\nclass IamPolicyCheck(runbook.Step):\n  \"\"\"Verify if specificd principal has permissions or roles permission/role in project.\n\n  This step supports checking for either all specified permissions/roles are present or\n  at least one for the principal (user or service account). It reports the present and missing\n  permissions/roles accordingly. Also, identifying which permissions or roles\n  are present and which are missing.\n\n  Attributes:\n    principal (str): The identifier for the principal whose permissions are being checked.\n    permissions (Optional[Set[str]]): A set of IAM permissions to check. Specify this or `roles`.\n    roles (Optional[Set[str]]): A set of IAM roles to check. Specify this or `permissions`.\n    require_all (bool): If True, requires all specified permissions or roles to be present. If\n                        False, requires at least one of the specified permissions or roles to be\n                        present.\n    template (str): The template used for generating reports for the step.\n  \"\"\"\n  template = 'permissions::default'\n\n  principal: str = ''\n  permissions: Optional[Set[str]] = None\n  roles: Optional[Set[str]] = None\n  require_all: bool = False\n  project = None\n\n  def execute(self):\n    \"\"\"Verify that {principal} has required permissions/roles in project/{project}.\"\"\"\n\n    iam_policy = iam.get_project_policy(op.get_context())\n    principal = self.principal or op.get(flags.PRINCIPAL)\n    present_permissions_or_roles = set()\n    missing_permissions_or_roles = set()\n    items = self.permissions or self.roles or set()\n\n    for item in items:\n      if self.permissions:\n        has_item = iam_policy.has_permission(principal, item)\n      else:\n        has_item = iam_policy.has_role_permissions(principal, item)\n      if has_item:\n        present_permissions_or_roles.add(item)\n      else:\n        missing_permissions_or_roles.add(item)\n\n    all_present = not missing_permissions_or_roles\n    any_present = bool(present_permissions_or_roles)\n    outcome = all_present if self.require_all else any_present\n\n    permissions_or_roles = 'permissions' if self.permissions else 'roles'\n\n    if outcome:\n      op.add_ok(resource=iam_policy,\n                reason=op.prep_msg(op.SUCCESS_REASON,\n                                   principal=principal,\n                                   permissions_or_roles=permissions_or_roles,\n                                   present_permissions_or_roles=', '.join(\n                                       sorted(present_permissions_or_roles))))\n    else:\n      op.add_failed(\n          resource=iam_policy,\n          reason=op.prep_msg(op.FAILURE_REASON,\n                             principal=principal,\n                             permissions_or_roles=permissions_or_roles,\n                             missing_permissions_or_roles=', '.join(\n                                 sorted(missing_permissions_or_roles))),\n          remediation=op.prep_msg(op.FAILURE_REMEDIATION,\n                                  principal=principal,\n                                  permissions_or_roles=permissions_or_roles,\n                                  present_permissions_or_roles=', '.join(\n                                      sorted(present_permissions_or_roles)),\n                                  missing_permissions_or_roles=', '.join(\n                                      sorted(missing_permissions_or_roles))))\n"
  },
  {
    "path": "gcpdiag/runbook/iam/templates/permissions.jinja",
    "content": "{% block default_success_reason %}\n{principal} has expected {permissions_or_roles}.\n{present_permissions_or_roles}.\n{% endblock default_success_reason %}\n\n{% block default_failure_reason %}\n{principal} does not have at least one of the expected {permissions_or_roles}:\n{missing_permissions_or_roles}.\n{% endblock default_failure_reason %}\n\n{% block default_failure_remediation %}\nGrant a role containing the missing permissions by following the instructions in [1].\nRefer to [2] for a list of Google Cloud predefined roles.\n\nNote: Consider consulting with project administrators regarding the most appropriate standard or custom role to grant.\n\n[1] <https://cloud.google.com/iam/docs/grant-role-console>\n[2] <https://cloud.google.com/iam/docs/understanding-roles>\n{% endblock default_failure_remediation %}\n"
  },
  {
    "path": "gcpdiag/runbook/iam/templates/service_account.jinja",
    "content": "{% block active_success_reason %}\nService account {sa} is active.\n{% endblock active_success_reason %}\n\n{% block active_failure_reason %}\nService account {sa} is deleted.\n{% endblock active_failure_reason %}\n\n{% block active_failure_remediation %}\nService account {sa} has been deleted. Deleted service accounts can be undeleted within 30 days of deletion [2]. After 30 days, IAM permanently removes the service account, and it cannot be recovered.\nRefer to [1] for details on deleting service accounts and [2] for undeleting them.\n[1] <https://cloud.google.com/iam/docs/service-accounts-delete-undelete#deleting>\n[2] <https://cloud.google.com/iam/docs/service-accounts-delete-undelete#undeleting>\n{% endblock active_failure_remediation %}\n\n{% block active_failure_remediation_a1 %}\nService account `{sa}` is disabled. To re-enable the service account, follow the instructions in [1].\n\nTo verify if the service account is deleted, refer to [verifying service account status](https://cloud.google.com/iam/docs/service-accounts-disable-enable).\n{% endblock active_failure_remediation_a1 %}\n\n{% block active_uncertain_reason %}\nCould not find service account {sa}.\n{% endblock active_uncertain_reason %}\n\n{% block active_uncertain_remediation %}\nCould not determine the status (e.g., active, disabled, or deleted) for service account `{sa}`.\n\n- To manually verify the service account, refer to the [documentation for listing and checking service accounts](https://cloud.google.com/iam/docs/service-accounts-list-edit#listing).\n- For information on deleted service accounts, see [deleted service account details](https://cloud.google.com/iam/docs/service-accounts-delete-undelete#deleting).\n- If the service account was deleted, review [how to undelete a service account](https://cloud.google.com/iam/docs/service-accounts-delete-undelete#undeleting) to recover it if feasible.\n{% endblock active_uncertain_remediation %}\n"
  },
  {
    "path": "gcpdiag/runbook/interconnect/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/runbook/interconnect/bgp_down_flap.py",
    "content": "# Copyright 2025 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"This runbook will analyze BGP down or flap issue.\"\"\"\n\nimport json\nimport re\nfrom datetime import datetime, timezone\n\nimport googleapiclient.errors\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import runbook\nfrom gcpdiag.queries import crm, interconnect, logs, network\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.interconnect import flags\n\n# GRACEFUL_RESTART_TIMER is set to 120 seconds, which is current Cloud Router default.\n# However, this value can vary based on GCP Cloud Router configuration.\nGRACEFUL_RESTART_TIMER = 120\n\n\ndef get_time_delta(t1: str, t2: str) -> str:\n  \"\"\"\n  Calculates the time difference between two ISO 8601 formatted time strings.\n\n  Args:\n    t1: The ISO 8601 formatted start time string.\n    t2: The ISO 8601 formatted time end time string.\n\n  Returns:\n    A string representing the time difference in seconds, rounded to two decimal places.\n  \"\"\"\n  t11 = datetime.fromisoformat(str(t1)).replace(tzinfo=timezone.utc)\n  t22 = datetime.fromisoformat(str(t2)).replace(tzinfo=timezone.utc)\n\n  dt = t22 - t11\n  dtstr = str(round(dt.total_seconds(), 2))\n  return dtstr\n\n\ndef local_realtime_query(in_start_time, in_end_time, filter_str):\n  \"\"\"\n  Run cloud logging query to get cloud logging details.\n\n  Args:\n    in_sart_time: The ISO 8601 formatted start time string.\n    in_end_time:  The ISO 8601 formatted time end time string.\n    filter_str:   The filter strings in cloud logging query.\n\n  Returns:\n    A dqueue collection containing cloud logging query output entries.\n  \"\"\"\n  result = logs.realtime_query(project_id=op.get(flags.PROJECT_ID),\n                               start_time=in_start_time,\n                               end_time=in_end_time,\n                               filter_str=filter_str)\n  return result\n\n\nclass BgpDownFlap(runbook.DiagnosticTree):\n  \"\"\"This runbook analyzes BGP down and BGP flap events for a GCP project in a clolud region.\n\n  The following steps are executed:\n\n  - Check BGP down status: Check if any vlan attachment has BGP down state.\n  - Check Interconnect maintenance: Check if there are interconnect maintenance events\n           are associated with the BGP down vlan attachments.\n  - Check BGP flap status: Check if any BGP flaps happened.\n  - Check Cloud Router maintenance: Check if there were Cloud Router maintenance events\n           are associated with the BGP flaps.\n\n  \"\"\"\n  parameters = {\n      flags.PROJECT_ID: {\n          'type': str,\n          'help': 'The Project ID of the resource under investigation',\n          'required': True\n      },\n      flags.REGION: {\n          'type': str,\n          'help': 'The region where the vlan attachment is located',\n          'required': True,\n      },\n      flags.ATTACHMENT_NAME: {\n          'type': str,\n          'help':\n              'The attachment name(s) as comma-separated values or a regular expression. '\n              'eg: vlan1,vlan2 or vlan.* or .* for all attachments',\n          'required': True,\n      },\n      flags.START_TIME: {\n          'type':\n              datetime,\n          'help':\n              'The start window to investigate BGP flap. Format: YYYY-MM-DDTHH:MM:SSZ'\n      },\n      flags.END_TIME: {\n          'type':\n              datetime,\n          'help':\n              'The end window for the investigation. Format: YYYY-MM-DDTHH:MM:SSZ'\n      }\n  }\n\n  def build_tree(self):\n    \"\"\"Construct the diagnostic tree with appropriate steps.\"\"\"\n\n    start = BgpDownFlapStart()\n    self.add_start(start)\n\n    bgpdown = CheckBgpDown()\n    iccheck = CheckInterconnectMaintenance()\n    bgpflapcheck = CheckBgpFlap()\n    crcheck = CheckCloudRouterMaintenance()\n\n    self.add_step(parent=start, child=bgpdown)\n    self.add_step(parent=bgpdown, child=iccheck)\n    self.add_step(parent=start, child=bgpflapcheck)\n    self.add_step(parent=bgpflapcheck, child=crcheck)\n\n    self.add_end(BgpDownFlapEnd())\n\n\nclass BgpDownFlapStart(runbook.StartStep):\n  \"\"\"Check if the project and other parameters are valid and vlan attachments are available.\n\n  This step starts the BGP issue debugging process by\n  verifying the correct input parameters have been provided and checking to ensure\n  that the following resources exist.\n    - The Project\n    - Region\n    - The vlan attachments exist for the given project\n\n  \"\"\"\n\n  template = 'bgp_down_flap::start'\n\n  def execute(self):\n    \"\"\"Check provided parameters.\"\"\"\n    project_id = op.get(flags.PROJECT_ID)\n    proj = crm.get_project(project_id)\n    attachments_in = op.get(flags.ATTACHMENT_NAME).rstrip(', \\n')\n    # regexp or comma separated names\n    attachments_in_list = attachments_in.split(',')\n    found_attachment_list = []\n\n    try:\n      attachments = interconnect.get_vlan_attachments(project_id)\n    except googleapiclient.errors.HttpError:\n      op.add_skipped(proj,\n                     reason=op.prep_msg(op.SKIPPED_REASON,\n                                        project_id=project_id))\n      return\n    else:\n      for vlan in attachments:\n        if vlan.region == op.get(flags.REGION):\n          if vlan.name in attachments_in_list or re.search(\n              attachments_in, vlan.name):\n            found_attachment_list.append(vlan.name)\n\n      if len(found_attachment_list) >= len(attachments_in_list):\n        op.put(flags.ATTACHMENT_LIST, ','.join(found_attachment_list))\n        op.add_ok(proj,\n                  reason=op.prep_msg(op.SUCCESS_REASON,\n                                     total_num=len(found_attachment_list),\n                                     region=op.get(flags.REGION),\n                                     project_id=project_id))\n\n        return\n\n      err_names = ''\n      for item in attachments_in_list:\n        if item not in found_attachment_list:\n          err_names += item + ','\n\n      err_names = err_names.rstrip(',')\n      op.add_skipped(proj,\n                     reason=op.prep_msg(op.SKIPPED_REASON_ALT1,\n                                        err_names=err_names,\n                                        region=op.get(flags.REGION),\n                                        project_id=project_id))\n\n\nclass CheckBgpDown(runbook.Step):\n  \"\"\"Check if vlan attachments have BGP down state.\n\n  Check if any vlan attachments have in BGP down state.\n  \"\"\"\n  template = 'bgp_down_flap::bgpdown'\n\n  def execute(self):\n    \"\"\"\n    Check if there is vlan attachment has BGP down.\n\n    \"\"\"\n    project_id = op.get(flags.PROJECT_ID)\n    project = crm.get_project(op.get(flags.PROJECT_ID))\n    attachments = interconnect.get_vlan_attachments(project.id)\n    vlan_router_map = {}\n\n    in_region = op.get(flags.REGION)\n    found_attachment_list = op.get(flags.ATTACHMENT_LIST).split(',')\n\n    # check each vlan attachment bgp state\n    processed_routers = {}\n    bgpdown_list = {}\n    vlan_router_map = {}\n    error_interconnects = ''\n    for vlan in attachments:\n      if vlan.region != in_region or vlan.name not in found_attachment_list:\n        continue\n      router_name = vlan.router\n      bgp_status = None\n\n      # update bgp information in processed_routers\n      if router_name in processed_routers:\n        bgp_status = processed_routers[router_name]\n      else:\n        vlan_router_status = network.nat_router_status(project.id,\n                                                       router_name=vlan.router,\n                                                       region=vlan.region)\n        bgp_status = vlan_router_status.bgp_peer_status\n        processed_routers[router_name] = bgp_status\n\n      # fetch bgp status for matching vlan attachment\n      for item in bgp_status:\n        if item['ipAddress'] == vlan.ipv4address:\n          if item['state'] != 'Established':\n            bgpdown_list.setdefault(vlan.interconnect, []).append(vlan.name)\n            vlan_router_map[vlan.name] = vlan.router\n            error_interconnects += vlan.interconnect + ','\n\n    if len(error_interconnects) == 0:\n      op.put(flags.ERROR_LIST, '')\n      op.add_ok(\n          project,\n          op.prep_msg(op.SUCCESS_REASON,\n                      region=op.get(flags.REGION),\n                      project_id=project_id))\n    else:\n      # display interconnect name with BGP down status\n      reason = '\\n\\t Attachments with BGP down status:\\n'\n      for ic, vlans in bgpdown_list.items():\n        for item in vlans:\n          reason += op.prep_msg(op.FAILURE_REASON,\n                                interconnect_name=ic,\n                                attachment_name=item,\n                                router_name=vlan_router_map[item])\n\n      op.add_failed(project,\n                    reason=op.prep_msg(op.FAILURE_REASON_ALT1, reason=reason),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n\n      if len(error_interconnects) > 0:\n        error_interconnects = error_interconnects[:-1]\n      op.put(flags.ERROR_LIST, error_interconnects)\n\n\nclass CheckInterconnectMaintenance(runbook.Step):\n  \"\"\"Check if interconnects with BGP down are in maintenance state.\n\n  Check if any interconnects with BGP down are in maintenance state.\n  \"\"\"\n  template = 'bgp_down_flap::interconnect_maintenance'\n\n  def execute(self):\n    \"\"\"Check if any BGP down interconnects are in maintenance state.\"\"\"\n    project = crm.get_project(op.get(flags.PROJECT_ID))\n    err_list = op.get(flags.ERROR_LIST)\n\n    if len(err_list) == 0:\n      op.add_skipped(project,\n                     reason=op.prep_msg(op.SKIPPED_REASON,\n                                        region=op.get(flags.REGION),\n                                        project_id=project.id))\n      return\n\n    interconnects = interconnect.get_links(project.id)\n    if not interconnects:\n      op.add_skipped(project, reason='no Inteconnect links found')\n      return\n\n    checklist = []\n    for c in interconnects:\n      icname = c.name\n      if c.under_maintenance:\n        checklist.append(icname)\n\n    bgpdown_no_ic_maintenance_list = ''\n    if len(checklist) > 0:\n      tmperrorlist = err_list.split(',')\n      for item in tmperrorlist:\n        if item in checklist:\n          continue\n        else:\n          bgpdown_no_ic_maintenance_list += item + ','\n    else:\n      bgpdown_no_ic_maintenance_list = err_list\n\n    bgpdown_no_ic_maintenance_list = bgpdown_no_ic_maintenance_list.rstrip(',')\n\n    if len(bgpdown_no_ic_maintenance_list) == 0:\n      op.add_ok(project, op.prep_msg(op.SUCCESS_REASON))\n    else:\n      reason = '\\n\\t BGP down details:\\n'\n      for item in bgpdown_no_ic_maintenance_list.split(','):\n        reason += op.prep_msg(op.FAILURE_REASON, interconnect_name=item)\n\n      # interconnect BGP down can be caused by various reasons\n      # The first step is to check if there is planned maintenance event\n      remediation_details = \"\"\" \\n\\t Suggested Remediations:\n               *   Check on-prem PF interface status towards on-prem router\n               *   Check RX/TX light level\n               *   Check cloud console interconnect details or cloud logging\n               *   Check other potential issues, or Contact Google Cloud Support.\"\"\"\n\n      op.add_failed(project,\n                    reason=op.prep_msg(op.FAILURE_REASON_ALT1, reason=reason),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION,\n                                            remediation=remediation_details))\n\n\nclass CheckCloudRouterMaintenance(runbook.Step):\n  \"\"\"Check if any Cloud Router had maintenance event.\n\n  Check if any Cloud Router had maintenance event.\n  Report BGP flaps without Cloud Router maintenance event.\n  \"\"\"\n  template = 'bgp_down_flap::cloud_router_maintenance'\n\n  def execute(self):\n    \"\"\"Check if the Cloud Router had maintenance event.\"\"\"\n    project = crm.get_project(op.get(flags.PROJECT_ID))\n    bgp_flaps = json.loads(op.get(flags.BGP_FLAP_LIST))\n\n    uncertain = False\n    checklist = []\n    # List all router_id with uncertain BGP flaps\n    for key, value in bgp_flaps.items():\n      if value['uncertain_flag'] == 'True':\n        uncertain = True\n        router_id = key.split('--')[0]\n        if router_id not in checklist:\n          checklist.append(router_id)\n\n    # Skip if no uncertain BGP flas need to be checked\n    if uncertain is False:\n      op.add_skipped(project,\n                     reason=op.prep_msg(op.SKIPPED_REASON,\n                                        region=op.get(flags.REGION),\n                                        project_id=project.id))\n      return\n\n    # Fetch cloud logging router maintenance events\n    # maintenance_list :\n    # key : router_id\n    # value : list of maintenance event timestamps\n    maintenance_list = {}\n    for router_id in checklist:\n      filter_str = [\n          'resource.type=\"gce_router\"', '\"Maintenance of router task\"'\n      ]\n      region = op.get(flags.REGION)\n      if region:\n        filter_str.append(f'resource.labels.region=\"{region}\"')\n\n      # Minor Concern: The filter string for Cloud Logging, created by joining IP\n      # addresses with \"OR\", could potentially become very long if there are many\n      # attachments. While unlikely to hit the absolute maximum, it's worth\n      # keeping in mind.\n      filter_str.append(f'resource.labels.router_id=\"{router_id}\"')\n      filter_str = '\\n'.join(filter_str)\n\n      start_time = op.get(flags.START_TIME)\n      end_time = op.get(flags.END_TIME)\n\n      # Ensure times are timezone-aware UTC\n      if start_time.tzinfo is None:\n        start_time = start_time.replace(tzinfo=datetime.timezone.utc)\n      if end_time.tzinfo is None:\n        end_time = end_time.replace(tzinfo=datetime.timezone.utc)\n\n      serial_log_entries = None\n      serial_log_entries = local_realtime_query(start_time, end_time,\n                                                filter_str)\n\n      times = []\n      for item in serial_log_entries:\n        payload = get_path(item, ('textPayload'), default=None)\n        log_region = get_path(item, ('resource', 'labels', 'region'),\n                              default=None)\n\n        if log_region != region:\n          continue\n\n        if 'Maintenance of router task' not in payload:\n          continue\n\n        timestamp = get_path(item, ('timestamp'), default=None)\n        times.append(timestamp)\n\n      maintenance_list[router_id] = times\n\n    # Find BGP flaps that do not have allgined router maintenance events\n    # err_list\n    #   key : router_id--ip\n    #   value: list of BGP flap events without maintenance events\n    err_list = {}\n    for key, value in bgp_flaps.items():\n      # check short duration uncertain BGP flaps\n      if value['uncertain_flag'] != 'True':\n        continue\n      router_id = value['router_id']\n      if router_id not in maintenance_list or len(\n          maintenance_list[router_id]) == 0:\n        err_list[key] = value['events']\n        continue\n\n      events = value['events']\n      for oneflap in events:\n        tmpstr = oneflap[0]\n        t1 = tmpstr.split(',')[1]\n        t2 = tmpstr.split(',')[3]\n        okevent = False\n        for cr_time in maintenance_list[router_id]:\n          delta1 = get_time_delta(t1, cr_time)\n          delta2 = get_time_delta(cr_time, t2)\n\n          # check if there is router maintenance event between the BGP flap start and end time\n          if delta1[0] != '-' and delta2[0] != '-':\n            okevent = True\n            break\n\n        if not okevent:\n          err_list.setdefault(key, []).append(oneflap)\n\n    # error_list contains router_id with BGP flaps but no maintenance event\n    if len(err_list) > 0:\n      reason = '\\n'\n      for key, value in err_list.items():\n        flap_details = '\\n\\t\\tBGP flap details:'\n        for item in value:\n          flap_details = flap_details + '\\n\\t\\t' + ','.join(item)\n        flap_details += '\\n'\n\n        reason += op.prep_msg(op.FAILURE_REASON,\n                              router_id=bgp_flaps[key]['router_id'],\n                              local_ip=bgp_flaps[key]['local_ip'],\n                              remote_ip=bgp_flaps[key]['remote_ip'],\n                              router_name=bgp_flaps[key]['router_name'],\n                              attachment=bgp_flaps[key]['attachment_name'],\n                              project_id=bgp_flaps[key]['project_id'],\n                              flap_details=flap_details)\n\n      example_query = \"\"\" \\nExample query:\n            resource.type=\"gce_router\"\n            \"Maintenance of router task\" OR (\"came up\" OR \"went down\")\n            resource.labels.region=\"<region>\"\n            r.esource.labels.router_id=\"<router_id>\"\n            \"\"\"\n\n      op.add_failed(project,\n                    reason=op.prep_msg(op.FAILURE_REASON_ALT1,\n                                       timer=GRACEFUL_RESTART_TIMER,\n                                       reason=reason),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION,\n                                            timer=GRACEFUL_RESTART_TIMER,\n                                            example_query=example_query))\n    else:\n      op.add_ok(project,\n                op.prep_msg(op.SUCCESS_REASON, timer=GRACEFUL_RESTART_TIMER))\n\n\nclass CheckBgpFlap(runbook.Step):\n  \"\"\"Check if any BGP flap events, report error flaps with duration over 60 seconds.\n\n  Check if any BGP flap events, report error flaps with duration over 60 seconds.\n  \"\"\"\n\n  template = 'bgp_down_flap::bgpflap'\n\n  def execute(self):\n    \"\"\"Check if there are BGP flap events.\"\"\"\n    project = crm.get_project(op.get(flags.PROJECT_ID))\n    region = op.get(flags.REGION)\n\n    attachments_in = op.get(flags.ATTACHMENT_NAME).rstrip(\n        ', \\n')  # regexp or comma separated names\n    attachments_in_list = attachments_in.split(',')\n    found_attachment_list = []\n\n    try:\n      attachments = interconnect.get_vlan_attachments(project.id)\n    except googleapiclient.errors.HttpError:\n      op.add_skipped(project,\n                     reason=op.prep_msg(op.SKIPPED_REASON,\n                                        project_id=project.id))\n      return\n\n    for vlan in attachments:\n      if vlan.region == op.get(flags.REGION):\n        if vlan.name in attachments_in_list or re.search(\n            attachments_in, vlan.name):\n          found_attachment_list.append(vlan.name)\n\n    peerip_router_map = {}\n    vlan_ipv4_list = []\n\n    attachments = interconnect.get_vlan_attachments(project.id)\n\n    for vlan in attachments:\n      if vlan.region != region or vlan.name not in found_attachment_list:\n        continue\n      vlan_ipv4_list.append(vlan.remoteip)\n\n      # peerip_router_map\n      #   key :  vlan.remoteIp\n      #   value: router_name, localIp, reomoteIp, interconnect, region, project_id\n      key = vlan.remoteip\n      peerip_router_map.setdefault(key, []).append(vlan.router)\n      peerip_router_map[key].append(vlan.ipv4address)\n      peerip_router_map[key].append(vlan.remoteip)\n      peerip_router_map[key].append(vlan.interconnect)\n      peerip_router_map[key].append(region)\n      peerip_router_map[key].append(project.id)\n      peerip_router_map[key].append(vlan.name)\n\n    filter_str = [\n        'resource.type=\"gce_router\"', '\"BGP \"', '(\"came up\" OR \"went down\")'\n    ]\n\n    # cloud logging query takes time\n    # run query once to get logging for all attachments\n    ipstr = ''\n    for item in vlan_ipv4_list:\n      ipstr += '\"' + item + '\"' + ' OR '\n    ipstr = ipstr[:-3]\n\n    # Minor Concern: The filter string for Cloud Logging, created by joining IP\n    # addresses with \"OR\", could potentially become very long if there are many\n    # attachments. While unlikely to hit the absolute maximum, it's worth\n    # keeping in mind.\n    filter_str.append(ipstr)\n    if region:\n      filter_str.append(f'resource.labels.region=\"{region}\"')\n    filter_str = '\\n'.join(filter_str)\n\n    last_down_time = {}\n    router_logs = {}\n    err_router_logs = {}\n\n    start_time = op.get(flags.START_TIME)\n    end_time = op.get(flags.END_TIME)\n\n    # Ensure times are timezone-aware UTC\n    if start_time.tzinfo is None:\n      start_time = start_time.replace(tzinfo=datetime.timezone.utc)\n    if end_time.tzinfo is None:\n      end_time = end_time.replace(tzinfo=datetime.timezone.utc)\n\n    serial_log_entries = None\n    serial_log_entries = local_realtime_query(start_time, end_time, filter_str)\n\n    # ensure the serial_log_entries have oldest timestamp first\n    if len(serial_log_entries) > 1:\n      t1 = get_path(serial_log_entries[0], ('timestamp'), default=None)\n      t2 = get_path(serial_log_entries[-1], ('timestamp'), default=None)\n      delta = get_time_delta(t1, t2)\n      if delta[0] == '-':\n        reversed_list = []\n        for item in serial_log_entries:\n          reversed_list.insert(0, item)\n        serial_log_entries = reversed_list\n\n    # get bgp flaps events from logging query output\n    #    router_logs     : all bgp flaps\n    #    err_router_logs : bgp flaps longer than GRACEFUL_RESTART_TIMER\n    for item in serial_log_entries:\n      errflag = False\n      payload = get_path(item, ('textPayload'), default=None)\n      timestamp = get_path(item, ('timestamp'), default=None)\n      router_id = get_path(item, ('resource', 'labels', 'router_id'),\n                           default=None)\n\n      log_region = get_path(item, ('resource', 'labels', 'region'),\n                            default=None)\n\n      if log_region != region:\n        continue\n\n      if not 'BGP Event: BGP peering with' in payload:\n        continue\n\n      tmp = payload.split('peering with ')[1]\n      ip = tmp.split()[0].strip()\n\n      # unique identify BGP session by using router_id and ip\n      router_ip_key = router_id + '--' + ip\n\n      logentry = []\n      if 'came up' in payload:\n        if router_ip_key in last_down_time:\n          downtime = last_down_time[router_ip_key][0]\n          last_down_time[router_ip_key] = []\n\n          delta = get_time_delta(downtime, timestamp)\n          down_up_times = 'went down,' + downtime + ',came up,' + timestamp\n          logentry.append(down_up_times)\n          logentry.append(delta)\n          if int(delta.split('.', maxsplit=1)[0]) > GRACEFUL_RESTART_TIMER:\n            # BGP flaps longer than GRACEFUL_RESTART_TIMER will cause data plane issue.\n            errflag = True\n            logentry.append('Error')\n          else:\n            # If there is a normal maintenance event align with a flap, we can ignore the BGP flap.\n            logentry.append('Uncertain')\n          router_logs.setdefault(router_ip_key, []).append(logentry)\n      else:\n        last_down_time.setdefault(router_ip_key, []).append(timestamp)\n\n      if errflag:\n        err_router_logs.setdefault(router_ip_key, []).append(logentry)\n\n    # cross reference BGP data\n    # get vlan information from API call\n    # get BGP and router information from logging\n    bgpdata = {}\n    for key, value in router_logs.items():\n      remote_ip = key.split('--')[1]\n      router_id = key.split('--')[0]\n\n      onedata = {}\n      onedata['router_id'] = router_id\n      onedata['remote_ip'] = remote_ip\n      onedata['events'] = value\n      onedata['uncertain_flag'] = 'False'\n      onedata['error_flag'] = 'False'\n\n      for items in value:\n        if 'Uncertain' in items:\n          onedata['uncertain_flag'] = 'True'\n        elif 'Error' in items:\n          onedata['error_flag'] = 'True'\n\n      onedata['router_name'] = peerip_router_map[remote_ip][0]\n      onedata['local_ip'] = peerip_router_map[remote_ip][1]\n      onedata['interconnect_name'] = peerip_router_map[remote_ip][3]\n      onedata['region'] = peerip_router_map[remote_ip][4]\n      onedata['project_id'] = peerip_router_map[remote_ip][5]\n      onedata['attachment_name'] = peerip_router_map[remote_ip][6]\n      bgpdata[key] = onedata\n\n    op.put(flags.BGP_FLAP_LIST, json.dumps(bgpdata))\n\n    if len(router_logs) > 0:\n      reason = '\\n'\n      if len(err_router_logs) == 0:\n        # process BGP flaps with time duration less than graceful restart timer.\n        if len(bgpdata) != 0:\n          for item in bgpdata.values():\n            if item['uncertain_flag'] != 'True':\n              continue\n\n            flap_details = '\\n\\t\\tBGP flap details:'\n            for oneflap in item['events']:\n              flap_details = flap_details + '\\n\\t\\t' + ','.join(oneflap)\n            flap_details += '\\n'\n\n            reason += op.prep_msg(op.UNCERTAIN_REASON,\n                                  router_id=item['router_id'],\n                                  local_ip=item['local_ip'],\n                                  remote_ip=item['remote_ip'],\n                                  router_name=item['router_name'],\n                                  attachment=item['attachment_name'],\n                                  project_id=item['project_id'],\n                                  flap_details=flap_details)\n\n        op.add_uncertain(project,\n                         reason=op.prep_msg(op.UNCERTAIN_REASON_ALT1,\n                                            project_id=project.id,\n                                            timer=GRACEFUL_RESTART_TIMER,\n                                            reason=reason),\n                         remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION))\n\n      else:\n        # process BGP flaps with time duration longer than graceful restart timer.\n        if len(bgpdata) != 0:\n          for item in bgpdata.values():\n            if item['error_flag'] != 'True':\n              continue\n\n            flap_details = '\\n\\t\\tBGP flap details:'\n            for oneflap in item['events']:\n              flap_details = flap_details + '\\n\\t\\t' + ','.join(oneflap)\n            flap_details += '\\n'\n\n            reason += op.prep_msg(op.FAILURE_REASON,\n                                  router_id=item['router_id'],\n                                  local_ip=item['local_ip'],\n                                  remote_ip=item['remote_ip'],\n                                  router_name=item['router_name'],\n                                  attachment=item['attachment_name'],\n                                  project_id=item['project_id'],\n                                  flap_details=flap_details)\n\n        example_query = \"\"\" \\n\\nExample query:\n            resource.type=\"gce_router\"\n            \"Maintenance of router task\" OR (\"came up\" OR \"went down\")\n            resource.labels.region=\"<region>\"\n            r.esource.labels.router_id=\"<router_id>\"\n            \"\"\"\n\n        op.add_failed(project,\n                      reason=op.prep_msg(op.FAILURE_REASON_ALT1,\n                                         project_id=project.id,\n                                         timer=GRACEFUL_RESTART_TIMER,\n                                         reason=reason),\n                      remediation=op.prep_msg(op.FAILURE_REMEDIATION,\n                                              timer=GRACEFUL_RESTART_TIMER,\n                                              example_query=example_query))\n        return\n    else:\n      op.add_ok(project,\n                reason=op.prep_msg(op.SUCCESS_REASON,\n                                   region=op.get(flags.REGION),\n                                   project_id=project.id))\n\n\nclass BgpDownFlapEnd(runbook.EndStep):\n  \"\"\"Concludes the diagnostics process.\n\n  The following are considered error and need further debugging:\n\n  1> BGP down events found without interconnect maintenance\n  2> BGP flaps with duration over graceful restart timer\n  3> BGP flaps with duration less than graceful restart timer but no Cloud Router maintenance event\n\n  Please contact GCP support for further debugging.\n\n  \"\"\"\n\n  def execute(self):\n    \"\"\"Finalizing connectivity diagnostics.\"\"\"\n    op.info('If any further debugging is needed, '\n            'consider please contact GCP support for further troubleshooting')\n"
  },
  {
    "path": "gcpdiag/runbook/interconnect/bgp_down_flap_test.py",
    "content": "# Copyright 2025 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test class for interconnect/BgpDownFlap.\"\"\"\n\nimport json\nimport unittest\nfrom datetime import datetime, timezone\nfrom unittest import mock\n\nimport googleapiclient.errors\n\nfrom gcpdiag import config\nfrom gcpdiag.runbook import interconnect, snapshot_test_base\nfrom gcpdiag.runbook.interconnect import bgp_down_flap, flags\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = interconnect\n  runbook_name = 'interconnect/bgp-down-flap'\n  project_id = 'gcpdiag-interconnect1-aaaa'\n  config.init({'auto': True, 'interface': 'cli'}, project_id)\n\n  rule_parameters = [{\n      'project_id': 'gcpdiag-interconnect1-aaaa',\n      'region': 'us-central1',\n      'custom_flag': 'interconnect',\n      'attachment_name': 'dummy-attachment11'\n  }, {\n      'project_id':\n          'gcpdiag-interconnect1-aaaa',\n      'region':\n          'us-east4',\n      'custom_flag':\n          'interconnect',\n      'attachment_name':\n          'dummy-attachment1,dummy-attachment2,dummy-attachment3,dummy-attachment4'\n  }, {\n      'project_id': 'gcpdiag-interconnect1-aaaa',\n      'region': 'us-west2',\n      'custom_flag': 'interconnect',\n      'attachment_name': 'dummy-attachment5,dummy-attachment6'\n  }]\n\n\nclass TestBgpDownFlap(unittest.TestCase):\n  \"\"\"Unit tests for bgp_down_flap logic and steps.\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    self.project_id = 'test-project'\n    self.region = 'us-central1'\n    self.project = mock.MagicMock()\n    self.project.id = self.project_id\n\n    # Global mocks for queries to prevent 403 errors and real API calls\n    self.mock_get_project = mock.patch('gcpdiag.queries.crm.get_project',\n                                       return_value=self.project).start()\n    self.mock_get_vlan = mock.patch(\n        'gcpdiag.queries.interconnect.get_vlan_attachments').start()\n    self.mock_get_links = mock.patch(\n        'gcpdiag.queries.interconnect.get_links').start()\n    self.mock_logs_query = mock.patch(\n        'gcpdiag.queries.logs.realtime_query').start()\n    self.mock_router_status = mock.patch(\n        'gcpdiag.queries.network.nat_router_status').start()\n\n    # Mock the op context for runbook flags and reporting\n    self.mock_op_get = mock.patch('gcpdiag.runbook.op.get').start()\n    self.mock_op_put = mock.patch('gcpdiag.runbook.op.put').start()\n    self.mock_op_add_ok = mock.patch('gcpdiag.runbook.op.add_ok').start()\n    self.mock_op_add_failed = mock.patch(\n        'gcpdiag.runbook.op.add_failed').start()\n    self.mock_op_add_skipped = mock.patch(\n        'gcpdiag.runbook.op.add_skipped').start()\n    self.mock_op_add_uncertain = mock.patch(\n        'gcpdiag.runbook.op.add_uncertain').start()\n    self.mock_op_prep_msg = mock.patch('gcpdiag.runbook.op.prep_msg').start()\n    self.mock_op_info = mock.patch('gcpdiag.runbook.op.info').start()\n\n    self.op_flags = {\n        flags.PROJECT_ID: self.project_id,\n        flags.REGION: self.region,\n        flags.ATTACHMENT_NAME: 'vlan1',\n        flags.ATTACHMENT_LIST: 'vlan1',\n        flags.ERROR_LIST: '',\n        flags.START_TIME: datetime(2025, 1, 1, tzinfo=timezone.utc),\n        flags.END_TIME: datetime(2025, 1, 2, tzinfo=timezone.utc),\n        flags.BGP_FLAP_LIST: '{}'\n    }\n    self.mock_op_get.side_effect = self.op_flags.get\n    self.mock_operator = mock.MagicMock(parameters={})\n\n  def tearDown(self):\n    super().tearDown()\n    mock.patch.stopall()\n\n  def _create_vlan_mock(self, name='vlan1', ipv4='2.2.2.2'):\n    \"\"\"Helper to create a vlan mock with consistent attributes.\"\"\"\n    v = mock.MagicMock()\n    v.name = name\n    v.region = self.region\n    v.ipv4address = ipv4  # Logic compares item['ipAddress'] to this field\n    v.remoteip = ipv4\n    v.interconnect = 'ic1'\n    v.router = 'r1'\n    return v\n\n  def test_get_time_delta(self):\n    result = bgp_down_flap.get_time_delta('2025-01-01T10:00:00Z',\n                                          '2025-01-01T10:00:05.5Z')\n    self.assertEqual(result, '5.5')\n\n  def test_local_realtime_query(self):\n    bgp_down_flap.local_realtime_query('t1', 't2', 'filter')\n    self.mock_logs_query.assert_called()\n\n  def test_start_step_handles_api_failure(self):\n    self.mock_get_vlan.side_effect = googleapiclient.errors.HttpError(\n        mock.MagicMock(status=403), b'Forbidden')\n    step = bgp_down_flap.BgpDownFlapStart()\n    with bgp_down_flap.op.operator_context(self.mock_operator):\n      step.execute()\n    self.mock_op_add_skipped.assert_called()\n\n  def test_check_bgp_down_detects_failure(self):\n    test_ip = '1.1.1.1'\n    project_id = 'test-project'\n    attachment_name = 'attachment1'\n    region = 'us-central1'\n\n    self.mock_op_get.side_effect = lambda key, default=None: {\n        flags.PROJECT_ID: project_id,\n        flags.REGION: region,\n        flags.ATTACHMENT_LIST: attachment_name\n    }.get(key, default)\n\n    project = mock.MagicMock()\n    project.id = project_id\n    self.mock_get_project.return_value = project\n\n    vlan = mock.MagicMock()\n    vlan.name = attachment_name\n    vlan.region = region\n    vlan.ipv4address = test_ip\n    vlan.router = 'router1'\n    vlan.interconnect = 'interconnect1'\n    self.mock_get_vlan.return_value = [vlan]\n\n    mock_status = mock.MagicMock()\n    mock_status.bgp_peer_status = [{'ipAddress': test_ip, 'state': 'Active'}]\n    self.mock_router_status.return_value = mock_status\n\n    step = bgp_down_flap.CheckBgpDown()\n    with bgp_down_flap.op.operator_context(self.mock_operator):\n      step.execute()\n\n    self.mock_op_add_failed.assert_called()\n\n  def test_check_bgp_down_ok(self):\n    test_ip = '2.2.2.2'\n    vlan = self._create_vlan_mock(ipv4=test_ip)\n    self.mock_get_vlan.return_value = [vlan]\n    router_status = mock.MagicMock()\n    router_status.bgp_peer_status = [{\n        'ipAddress': test_ip,\n        'state': 'Established'\n    }]\n    self.mock_router_status.return_value = router_status\n    step = bgp_down_flap.CheckBgpDown()\n    with bgp_down_flap.op.operator_context(self.mock_operator):\n      step.execute()\n    self.mock_op_add_ok.assert_called()\n\n  def test_start_step_ok(self):\n    vlan = self._create_vlan_mock(name='vlan1')\n    self.mock_get_vlan.return_value = [vlan]\n    step = bgp_down_flap.BgpDownFlapStart()\n    with bgp_down_flap.op.operator_context(self.mock_operator):\n      step.execute()\n    self.mock_op_add_ok.assert_called()\n\n  def test_start_step_attachment_not_found(self):\n    self.op_flags[flags.ATTACHMENT_NAME] = 'non-existent-vlan'\n    vlan = self._create_vlan_mock(name='vlan1')\n    self.mock_get_vlan.return_value = [vlan]\n    step = bgp_down_flap.BgpDownFlapStart()\n    with bgp_down_flap.op.operator_context(self.mock_operator):\n      step.execute()\n    self.mock_op_add_skipped.assert_called()\n\n  def test_check_ic_maintenance_skipped_no_errors(self):\n    self.op_flags[flags.ERROR_LIST] = ''\n    step = bgp_down_flap.CheckInterconnectMaintenance()\n    with bgp_down_flap.op.operator_context(self.mock_operator):\n      step.execute()\n    self.mock_op_add_skipped.assert_called()\n\n  def test_check_ic_maintenance_skipped_no_links(self):\n    self.op_flags[flags.ERROR_LIST] = 'ic1'\n    self.mock_get_links.return_value = []\n    step = bgp_down_flap.CheckInterconnectMaintenance()\n    with bgp_down_flap.op.operator_context(self.mock_operator):\n      step.execute()\n    self.mock_op_add_skipped.assert_called()\n\n  def test_check_ic_maintenance_ok(self):\n    self.op_flags[flags.ERROR_LIST] = 'ic1'\n    ic_link = mock.MagicMock()\n    ic_link.name = 'ic1'\n    ic_link.under_maintenance = True\n    self.mock_get_links.return_value = [ic_link]\n    step = bgp_down_flap.CheckInterconnectMaintenance()\n    with bgp_down_flap.op.operator_context(self.mock_operator):\n      step.execute()\n    self.mock_op_add_ok.assert_called()\n\n  def test_check_ic_maintenance_unexplained_down(self):\n    self.op_flags[flags.ERROR_LIST] = 'ic1'\n    ic_link = mock.MagicMock()\n    ic_link.name = 'ic1'\n    ic_link.under_maintenance = False\n    self.mock_get_links.return_value = [ic_link]\n\n    step = bgp_down_flap.CheckInterconnectMaintenance()\n    with bgp_down_flap.op.operator_context(self.mock_operator):\n      step.execute()\n    self.mock_op_add_failed.assert_called()\n\n  def test_check_cr_maintenance_detects_unexplained_flap(self):\n    flap_data = {\n        'r1_id--2.2.2.2': {\n            'uncertain_flag':\n                'True',\n            'router_id':\n                'r1_id',\n            'local_ip':\n                '1.1.1.1',\n            'remote_ip':\n                '2.2.2.2',\n            'router_name':\n                'r1',\n            'attachment_name':\n                'vlan1',\n            'project_id':\n                self.project_id,\n            'events': [[\n                'went down,2025-01-01T12:00:00Z,came up,2025-01-01T12:01:00Z'\n            ]],\n        }\n    }\n    self.op_flags[flags.BGP_FLAP_LIST] = json.dumps(flap_data)\n    self.mock_logs_query.return_value = []\n\n    step = bgp_down_flap.CheckCloudRouterMaintenance()\n    with bgp_down_flap.op.operator_context(self.mock_operator):\n      step.execute()\n    self.mock_op_add_failed.assert_called()\n\n  def test_check_cr_maintenance_skipped_no_uncertain_flaps(self):\n    self.op_flags[flags.BGP_FLAP_LIST] = '{}'\n    step = bgp_down_flap.CheckCloudRouterMaintenance()\n    with bgp_down_flap.op.operator_context(self.mock_operator):\n      step.execute()\n    self.mock_op_add_skipped.assert_called()\n\n  def test_check_cr_maintenance_ok(self):\n    flap_data = {\n        'r1_id--2.2.2.2': {\n            'uncertain_flag':\n                'True',\n            'router_id':\n                'r1_id',\n            'local_ip':\n                '1.1.1.1',\n            'remote_ip':\n                '2.2.2.2',\n            'router_name':\n                'r1',\n            'attachment_name':\n                'vlan1',\n            'project_id':\n                self.project_id,\n            'events': [[\n                'went down,2025-01-01T12:00:00Z,came up,2025-01-01T12:01:00Z',\n                '60.0', 'Uncertain'\n            ]],\n        }\n    }\n    self.op_flags[flags.BGP_FLAP_LIST] = json.dumps(flap_data)\n    self.mock_logs_query.return_value = [{\n        'textPayload': 'Maintenance of router task',\n        'timestamp': '2025-01-01T12:00:30Z',\n        'resource': {\n            'labels': {\n                'router_id': 'r1_id',\n                'region': self.region\n            }\n        },\n    }]\n    step = bgp_down_flap.CheckCloudRouterMaintenance()\n    with bgp_down_flap.op.operator_context(self.mock_operator):\n      step.execute()\n    self.mock_op_add_ok.assert_called()\n\n  def test_check_bgp_flap_logic(self):\n    vlan = self._create_vlan_mock(ipv4='1.1.1.1')\n    vlan.remoteip = '2.2.2.2'\n    self.mock_get_vlan.return_value = [vlan]\n\n    self.mock_logs_query.return_value = [\n        {\n            'textPayload': 'BGP Event: BGP peering with 2.2.2.2 went down',\n            'timestamp': '2025-01-01T12:00:00Z',\n            'resource': {\n                'labels': {\n                    'router_id': 'r1_id',\n                    'region': self.region\n                }\n            },\n        },\n        {\n            'textPayload': 'BGP Event: BGP peering with 2.2.2.2 came up',\n            'timestamp': '2025-01-01T12:05:00Z',\n            'resource': {\n                'labels': {\n                    'router_id': 'r1_id',\n                    'region': self.region\n                }\n            },\n        },\n    ]\n    step = bgp_down_flap.CheckBgpFlap()\n    with bgp_down_flap.op.operator_context(self.mock_operator):\n      step.execute()\n    self.mock_op_add_failed.assert_called()\n\n  def test_check_bgp_flap_skipped_on_api_error(self):\n    self.mock_get_vlan.side_effect = googleapiclient.errors.HttpError(\n        mock.MagicMock(status=403), b'Forbidden')\n    step = bgp_down_flap.CheckBgpFlap()\n    with bgp_down_flap.op.operator_context(self.mock_operator):\n      step.execute()\n    self.mock_op_add_skipped.assert_called_once()\n\n  def test_check_bgp_flap_ok_no_flaps(self):\n    vlan = self._create_vlan_mock(ipv4='1.1.1.1')\n    vlan.remoteip = '2.2.2.2'\n    self.mock_get_vlan.return_value = [vlan]\n    self.mock_logs_query.return_value = []\n    step = bgp_down_flap.CheckBgpFlap()\n    with bgp_down_flap.op.operator_context(self.mock_operator):\n      step.execute()\n    self.mock_op_add_ok.assert_called()\n\n  def test_check_bgp_flap_uncertain(self):\n    vlan = self._create_vlan_mock(ipv4='1.1.1.1')\n    vlan.remoteip = '2.2.2.2'\n    self.mock_get_vlan.return_value = [vlan]\n    self.mock_logs_query.return_value = [\n        {\n            'textPayload': 'BGP Event: BGP peering with 2.2.2.2 went down',\n            'timestamp': '2025-01-01T12:00:00Z',\n            'resource': {\n                'labels': {\n                    'router_id': 'r1_id',\n                    'region': self.region\n                }\n            },\n        },\n        {\n            'textPayload': 'BGP Event: BGP peering with 2.2.2.2 came up',\n            'timestamp': '2025-01-01T12:01:00Z',\n            'resource': {\n                'labels': {\n                    'router_id': 'r1_id',\n                    'region': self.region\n                }\n            },\n        },\n    ]\n    step = bgp_down_flap.CheckBgpFlap()\n    with bgp_down_flap.op.operator_context(self.mock_operator):\n      step.execute()\n    self.mock_op_add_uncertain.assert_called()\n\n  def test_check_bgp_flap_log_reversal(self):\n    vlan = self._create_vlan_mock(ipv4='1.1.1.1')\n    vlan.remoteip = '2.2.2.2'\n    self.mock_get_vlan.return_value = [vlan]\n    self.mock_logs_query.return_value = [\n        {\n            'textPayload': 'BGP Event: BGP peering with 2.2.2.2 came up',\n            'timestamp': '2025-01-01T12:01:00Z',\n            'resource': {\n                'labels': {\n                    'router_id': 'r1_id',\n                    'region': self.region\n                }\n            },\n        },\n        {\n            'textPayload': 'BGP Event: BGP peering with 2.2.2.2 went down',\n            'timestamp': '2025-01-01T12:00:00Z',\n            'resource': {\n                'labels': {\n                    'router_id': 'r1_id',\n                    'region': self.region\n                }\n            },\n        },\n    ]\n    step = bgp_down_flap.CheckBgpFlap()\n    with bgp_down_flap.op.operator_context(self.mock_operator):\n      step.execute()\n    self.mock_op_add_uncertain.assert_called()\n\n  def test_end_step(self):\n    step = bgp_down_flap.BgpDownFlapEnd()\n    with bgp_down_flap.op.operator_context(self.mock_operator):\n      step.execute()\n    self.mock_op_info.assert_called()\n\n\nif __name__ == '__main__':\n  unittest.main()\n"
  },
  {
    "path": "gcpdiag/runbook/interconnect/constants.py",
    "content": "# Copyright 2025 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "gcpdiag/runbook/interconnect/flags.py",
    "content": "# Copyright 2025 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Contains interconnect specific flags\"\"\"\n# pylint: disable=wildcard-import, unused-wildcard-import\nfrom gcpdiag.runbook.iam.flags import *\nfrom gcpdiag.runbook.interconnect.flags import *\n\nREGION = 'region'\nATTACHMENT_LIST = ''\nERROR_LIST = ''\nBGP_FLAP_LIST = ''\nATTACHMENT_NAME = 'attachment_name'\n"
  },
  {
    "path": "gcpdiag/runbook/interconnect/generalized_steps.py",
    "content": "# Copyright 2025 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "gcpdiag/runbook/interconnect/generalized_steps_test.py",
    "content": "# Copyright 2025 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "gcpdiag/runbook/interconnect/snapshots/bgp_down_flap.txt",
    "content": "attachment_name=dummy-attachment11,custom_flag=interconnect,project_id=gcpdiag-\ninterconnect1-aaaa,region=us-central1\n\ninterconnect/bgp-down-flap: This runbook analyzes BGP down and BGP flap events for a GCP project in a clolud region.\n\n  The following steps are executed:\n\n  - Check BGP down status: Check if any vlan attachment has BGP down state.\n  - Check Interconnect maintenance: Check if there are interconnect maintenance events\n           are associated with the BGP down vlan attachments.\n  - Check BGP flap status: Check if any BGP flaps happened.\n  - Check Cloud Router maintenance: Check if there were Cloud Router maintenance events\n           are associated with the BGP flaps.\n\n  \n[START]: Check provided parameters.\n\n   - gcpdiag-interconnect1-aaaa                                           [OK]\n     [REASON]\n         Total `1` vlan attachments found in `us-central1` in project `gcpdiag-interconnect1-aaaa`.\n\n[AUTOMATED STEP]: Check if there is vlan attachment has BGP down.\n\n   - gcpdiag-interconnect1-aaaa                                           [OK]\n     [REASON]\n         No VLAN attachments have BGP down in region `us-central1` in project `gcpdiag-interconnect1-aaaa`.\n\n[AUTOMATED STEP]: Check if any BGP down interconnects are in maintenance state.\n\n   - gcpdiag-interconnect1-aaaa                                           [SKIP]\n     [REASON]\n         No interconnects have BGP down status, skip interconnect mainteance check in in region `us-central1` in project `gcpdiag-interconnect1-aaaa`.\n\n[AUTOMATED STEP]: Check if there are BGP flap events.\n\n   - gcpdiag-interconnect1-aaaa                                           [OK]\n     [REASON]\n         No BGP flaps are found in region `us-central1` in project `gcpdiag-interconnect1-aaaa`.\n\n[AUTOMATED STEP]: Check if the Cloud Router had maintenance event.\n\n   - gcpdiag-interconnect1-aaaa                                           [SKIP]\n     [REASON]\n         No BGP flaps, skip cloud router mainteance check in in region `us-central1` in project `gcpdiag-interconnect1-aaaa`.\n\n[END]: Finalizing connectivity diagnostics.\n[INFO]: If any further debugging is needed, consider please contact GCP support for further troubleshooting\n\n\nattachment_name=dummy-attachment1,dummy-attachment2,dummy-attachment3,dummy-\nattachment4,custom_flag=interconnect,project_id=gcpdiag-interconnect1-aaaa,region=us-east4\n\ninterconnect/bgp-down-flap: This runbook analyzes BGP down and BGP flap events for a GCP project in a clolud region.\n\n  The following steps are executed:\n\n  - Check BGP down status: Check if any vlan attachment has BGP down state.\n  - Check Interconnect maintenance: Check if there are interconnect maintenance events\n           are associated with the BGP down vlan attachments.\n  - Check BGP flap status: Check if any BGP flaps happened.\n  - Check Cloud Router maintenance: Check if there were Cloud Router maintenance events\n           are associated with the BGP flaps.\n\n  \n[START]: Check provided parameters.\n\n   - gcpdiag-interconnect1-aaaa                                           [OK]\n     [REASON]\n         Total `4` vlan attachments found in `us-east4` in project `gcpdiag-interconnect1-aaaa`.\n\n[AUTOMATED STEP]: Check if there is vlan attachment has BGP down.\n\n   - gcpdiag-interconnect1-aaaa                                           [FAIL]\n     [REASON]\n         Some interconnects have BGP down status. See details \n     \t Attachments with BGP down status:\n         Attachment:dummy-attachment4, Interconnect:dummy-interconnect2, Cloud_Router_Name:dummy-router2\n\n\n     [REMEDIATION]\n          For any interconnects in BGP down state, continue runbook check if the interconnect is in maintenance state. Check the public documentation for guidance. <https://cloud.google.com/network-connectivity/docs/interconnect/support/infrastructure-maintenance-events>\n\n[AUTOMATED STEP]: Check if any BGP down interconnects are in maintenance state.\n\n   - gcpdiag-interconnect1-aaaa                                           [FAIL]\n     [REASON]\n         There are interconnects with BGP down status have no planned maintenance. See details \n     \t BGP down details:\n         The interconnect `dummy-interconnect2` with BGP down status has no planned maintenance.\n\n\n     [REMEDIATION]\n         Interconnect BGP down can be caused by various reasons. Suggested remediation:  \n     \t Suggested Remediations:\n                    *   Check on-prem PF interface status towards on-prem router\n                    *   Check RX/TX light level\n                    *   Check cloud console interconnect details or cloud logging\n                    *   Check other potential issues, or Contact Google Cloud Support.\n\n[AUTOMATED STEP]: Check if there are BGP flap events.\n\n   - gcpdiag-interconnect1-aaaa                                           [FAIL]\n     [REASON]\n         BGP flaps lasting longer than `120` seconds detected in project `gcpdiag-interconnect1-aaaa`. See details \n         Abnormal long BGP flaps:  crId:6988249776642123456, ip:169.254.2.1, peerIp:169.254.2.2, crName:dummy-router1, vlan:dummy-attachment2, proj:gcpdiag-interconnect1-aaaa, details:\n     \t\tBGP flap details:\n     \t\twent down,2025-03-27T23:32:19.397757310Z,came up,2025-03-27T23:34:39.923120483Z,140.53,Error\n\n\n\n     [REMEDIATION]\n         BGP flaps lasting longer than `120` seconds are unlikely to be caused by Cloud Router maintenance events. Analyze Cloud Router logs to identify the root cause. Check the public documentation for guidance.<https://cloud.google.com/network-connectivity/docs/router/support/troubleshoot-log-messages> or contact GCP support.Logging query example  \n\n     Example query:\n                 resource.type=\"gce_router\"\n                 \"Maintenance of router task\" OR (\"came up\" OR \"went down\")\n                 resource.labels.region=\"<region>\"\n                 r.esource.labels.router_id=\"<router_id>\"\n            \n\n[AUTOMATED STEP]: Check if the Cloud Router had maintenance event.\n\n   - gcpdiag-interconnect1-aaaa                                           [OK]\n     [REASON]\n         BGP flaps less than 120 seconds are all caused by Cloud Router maintenance events.\n\n[END]: Finalizing connectivity diagnostics.\n[INFO]: If any further debugging is needed, consider please contact GCP support for further troubleshooting\n\n\nattachment_name=dummy-attachment5,dummy-attachment6,custom_flag=interconnect,project_id=gcpdiag-\ninterconnect1-aaaa,region=us-west2\n\ninterconnect/bgp-down-flap: This runbook analyzes BGP down and BGP flap events for a GCP project in a clolud region.\n\n  The following steps are executed:\n\n  - Check BGP down status: Check if any vlan attachment has BGP down state.\n  - Check Interconnect maintenance: Check if there are interconnect maintenance events\n           are associated with the BGP down vlan attachments.\n  - Check BGP flap status: Check if any BGP flaps happened.\n  - Check Cloud Router maintenance: Check if there were Cloud Router maintenance events\n           are associated with the BGP flaps.\n\n  \n[START]: Check provided parameters.\n\n   - gcpdiag-interconnect1-aaaa                                           [OK]\n     [REASON]\n         Total `2` vlan attachments found in `us-west2` in project `gcpdiag-interconnect1-aaaa`.\n\n[AUTOMATED STEP]: Check if there is vlan attachment has BGP down.\n\n   - gcpdiag-interconnect1-aaaa                                           [FAIL]\n     [REASON]\n         Some interconnects have BGP down status. See details \n     \t Attachments with BGP down status:\n         Attachment:dummy-attachment5, Interconnect:dummy-interconnect3, Cloud_Router_Name:dummy-router3\n\n\n     [REMEDIATION]\n          For any interconnects in BGP down state, continue runbook check if the interconnect is in maintenance state. Check the public documentation for guidance. <https://cloud.google.com/network-connectivity/docs/interconnect/support/infrastructure-maintenance-events>\n\n[AUTOMATED STEP]: Check if any BGP down interconnects are in maintenance state.\n\n   - gcpdiag-interconnect1-aaaa                                           [OK]\n     [REASON]\n         The interconnects with BGP down status align with the planned interconnect maintenance events.\n\n[AUTOMATED STEP]: Check if there are BGP flap events.\n\n   - gcpdiag-interconnect1-aaaa                                           [UNCERTAIN]\n     [REASON]\n         BGP flaps lasting less than `120` seconds detected. They are normal if there are cloud router maintenance events. See details \n         Short duration BGP flaps: crId:666666875024123457, ip:169.254.6.1, peerIp:169.254.6.2, crName:dummy-router3, vlan:dummy-attachment6, proj:gcpdiag-interconnect1-aaaa, details:\n     \t\tBGP flap details:\n     \t\twent down,2025-03-27T23:32:19.397757310Z,came up,2025-03-27T23:33:39.923120483Z,80.53,Uncertain\n\n\n\n     [REMEDIATION]\n         Continue runbook to check if there are `cloud router maintenance` events align with BGP flaps.\n\n[AUTOMATED STEP]: Check if the Cloud Router had maintenance event.\n\n   - gcpdiag-interconnect1-aaaa                                           [FAIL]\n     [REASON]\n         There are BGP flaps less than 120 seconds without Cloud Router maintenance events. See details \n         Error BGP : crId:666666875024123457, ip:169.254.6.1, peerIp:169.254.6.2, crName:dummy-router3, vlan:dummy-attachment6, proj:gcpdiag-interconnect1-aaaa, details:\n     \t\tBGP flap details:\n     \t\twent down,2025-03-27T23:32:19.397757310Z,came up,2025-03-27T23:33:39.923120483Z,80.53,Uncertain\n\n\n\n     [REMEDIATION]\n         BGP flaps lasting less than 120 seconds have been observed without Cloud Router maintenance. Analyze Cloud Router logs to identify the root cause. Check the public documentation for guidance.Logging query example <https://cloud.google.com/network-connectivity/docs/router/support/troubleshoot-log-messages> or contact GCP support. \n     Example query:\n                 resource.type=\"gce_router\"\n                 \"Maintenance of router task\" OR (\"came up\" OR \"went down\")\n                 resource.labels.region=\"<region>\"\n                 r.esource.labels.router_id=\"<router_id>\"\n            \n\n[END]: Finalizing connectivity diagnostics.\n[INFO]: If any further debugging is needed, consider please contact GCP support for further troubleshooting\n\n\n"
  },
  {
    "path": "gcpdiag/runbook/interconnect/templates/bgp_down_flap.jinja",
    "content": "#############################################################\n\n# Messages for BGP Down Flap Check #\n\n#############################################################\n  {% block start_success_reason %}\n    Total `{total_num}` vlan attachments found in `{region}` in project `{project_id}`.\n  {% endblock start_success_reason %}\n\n  {% block start_skipped_reason%}\n    Unable to fetch any vlan attachments in any region in project `{project_id}`.\n  {% endblock start_skipped_reason %}\n\n  {% block start_skipped_reason_a1%}\n    Unable to fetch `{err_names}` in region `{region}` in project `{project_id}`.\n  {% endblock start_skipped_reason_a1 %}\n\n  {% block bgpdown_success_reason %}\n    No VLAN attachments have BGP down in region `{region}` in project `{project_id}`.\n  {% endblock bgpdown_success_reason %}\n\n  {% block bgpdown_failure_reason %}\n    Attachment:{attachment_name}, Interconnect:{interconnect_name}, Cloud_Router_Name:{router_name}\n  {% endblock bgpdown_failure_reason %}\n\n  {% block bgpdown_failure_reason_a1 %}\n    Some interconnects have BGP down status. See details {reason}\n  {% endblock bgpdown_failure_reason_a1 %}\n\n  {% block bgpdown_failure_remediation %}\n     For any interconnects in BGP down state, continue runbook check if the interconnect is in maintenance state. Check the public documentation for guidance. <https://cloud.google.com/network-connectivity/docs/interconnect/support/infrastructure-maintenance-events>\n  {% endblock bgpdown_failure_remediation %}\n\n  {% block interconnect_maintenance_skipped_reason %}\n    No interconnects have BGP down status, skip interconnect mainteance check in in region `{region}` in project `{project_id}`.\n  {% endblock interconnect_maintenance_skipped_reason %}\n\n  {% block interconnect_maintenance_success_reason %}\n    The interconnects with BGP down status align with the planned interconnect maintenance events.\n  {% endblock interconnect_maintenance_success_reason %}\n\n  {% block interconnect_maintenance_failure_reason%}\n    The interconnect `{interconnect_name}` with BGP down status has no planned maintenance.\n  {% endblock interconnect_maintenance_failure_reason %}\n\n  {% block interconnect_maintenance_failure_reason_a1 %}\n    There are interconnects with BGP down status have no planned maintenance. See details {reason}\n  {% endblock interconnect_maintenance_failure_reason_a1 %}\n\n  {% block interconnect_maintenance_failure_remediation %}\n    Interconnect BGP down can be caused by various reasons. Suggested remediation: {remediation}\n  {% endblock interconnect_maintenance_failure_remediation %}\n\n  {% block bgpflap_skipped_reason%}\n    Unable to fetch any vlan attachments to check BGP flap in any region in project `{project_id}`.\n  {% endblock bgpflap_skipped_reason %}\n\n  {% block bgpflap_success_reason %}\n    No BGP flaps are found in region `{region}` in project `{project_id}`.\n  {% endblock bgpflap_success_reason %}\n\n  {% block bgpflap_failure_reason%}\n    Abnormal long BGP flaps:  crId:{router_id}, ip:{local_ip}, peerIp:{remote_ip}, crName:{router_name}, vlan:{attachment}, proj:{project_id}, details:{flap_details}\n  {% endblock bgpflap_failure_reason %}\n\n  {% block bgpflap_failure_reason_a1%}\n    BGP flaps lasting longer than `{timer}` seconds detected in project `{project_id}`. See details {reason}\n  {% endblock bgpflap_failure_reason_a1 %}\n\n  {% block bgpflap_failure_remediation %}\n    BGP flaps lasting longer than `{timer}` seconds are unlikely to be caused by Cloud Router maintenance events. Analyze Cloud Router logs to identify the root cause. Check the public documentation for guidance.<https://cloud.google.com/network-connectivity/docs/router/support/troubleshoot-log-messages> or contact GCP support.Logging query example {example_query}\n  {% endblock bgpflap_failure_remediation %}\n\n  {% block bgpflap_uncertain_reason%}\n    Short duration BGP flaps: crId:{router_id}, ip:{local_ip}, peerIp:{remote_ip}, crName:{router_name}, vlan:{attachment}, proj:{project_id}, details:{flap_details}\n  {% endblock bgpflap_uncertain_reason %}\n\n  {% block bgpflap_uncertain_reason_a1%}\n    BGP flaps lasting less than `{timer}` seconds detected. They are normal if there are cloud router maintenance events. See details {reason}\n  {% endblock bgpflap_uncertain_reason_a1 %}\n\n  {% block bgpflap_uncertain_remediation %}\n    Continue runbook to check if there are `cloud router maintenance` events align with BGP flaps.\n  {% endblock bgpflap_uncertain_remediation %}\n\n  {% block cloud_router_maintenance_skipped_reason %}\n    No BGP flaps, skip cloud router mainteance check in in region `{region}` in project `{project_id}`.\n  {% endblock cloud_router_maintenance_skipped_reason %}\n\n  {% block cloud_router_maintenance_success_reason%}\n    BGP flaps less than {timer} seconds are all caused by Cloud Router maintenance events.\n  {% endblock cloud_router_maintenance_success_reason %}\n\n  {% block cloud_router_maintenance_failure_reason%}\n    Error BGP : crId:{router_id}, ip:{local_ip}, peerIp:{remote_ip}, crName:{router_name}, vlan:{attachment}, proj:{project_id}, details:{flap_details}\n  {% endblock cloud_router_maintenance_failure_reason %}\n\n  {% block cloud_router_maintenance_failure_reason_a1%}\n    There are BGP flaps less than {timer} seconds without Cloud Router maintenance events. See details {reason}\n  {% endblock cloud_router_maintenance_failure_reason_a1 %}\n\n  {% block cloud_router_maintenance_failure_remediation %}\n    BGP flaps lasting less than {timer} seconds have been observed without Cloud Router maintenance. Analyze Cloud Router logs to identify the root cause. Check the public documentation for guidance.Logging query example <https://cloud.google.com/network-connectivity/docs/router/support/troubleshoot-log-messages> or contact GCP support.{example_query}\n  {% endblock cloud_router_maintenance_failure_remediation %}\n"
  },
  {
    "path": "gcpdiag/runbook/lb/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/runbook/lb/constants.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Constants specific to LB\"\"\"\n# pylint: disable=unused-wildcard-import, wildcard-import\nfrom gcpdiag.runbook.iam.constants import *\n"
  },
  {
    "path": "gcpdiag/runbook/lb/flags.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Contains LB specific flags\"\"\"\n# pylint: disable=unused-wildcard-import, wildcard-import\nfrom gcpdiag.runbook.iam.flags import *\n\nBACKEND_SERVICE_NAME = 'backend_service_name'\nCERTIFICATE_NAME = 'certificate_name'\nREGION = 'region'\nFORWARDING_RULE_NAME = 'forwarding_rule_name'\nBACKEND_LATENCY_THRESHOLD = 'backend_latency_threshold'\nREQUEST_COUNT_THRESHOLD = 'request_count_threshold'\nERROR_RATE_THRESHOLD = 'error_rate_threshold'\n"
  },
  {
    "path": "gcpdiag/runbook/lb/generalized_steps.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Contains Generalized steps used by only LB runbooks\"\"\"\n"
  },
  {
    "path": "gcpdiag/runbook/lb/generalized_steps_test.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "gcpdiag/runbook/lb/latency.py",
    "content": "# Copyright 2024 Google LLC\n\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n\n#     http://www.googleapis.com/licenses/LICENSE-2.0\n\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"playbook to troubleshoot Application Load Balancer latency.\"\"\"\n\nimport googleapiclient.errors\n\nfrom gcpdiag import config, runbook\nfrom gcpdiag.queries import apis, crm, lb, monitoring\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.lb import flags\n\n\nclass Latency(runbook.DiagnosticTree):\n  \"\"\"This runbook diagnoses and troubleshoots latency issues with Application Load Balancers.\n\n  It analyzes key metrics to identify potential bottlenecks and performance\n  problems.\n\n  Key Investigation Areas:\n\n  - Backend Latency:\n    - Measures the time taken for backends to respond to requests, checking if\n    it exceeds a configurable threshold.\n  - Request Count Per Second (QPS):\n    - Monitors the rate of incoming requests to the load balancer, checking if\n    it exceeds a configurable threshold.  A high request count coupled with high\n    latency might suggest overload.\n  - 5xx Error Rate:\n    - Calculates the percentage of 5xx server errors, indicating problems on the\n    backend servers.  This check uses a configurable threshold and considers the\n    request count to provide a meaningful error rate.\n  \"\"\"\n\n  parameters = {\n      flags.PROJECT_ID: {\n          'type': str,\n          'help': 'The Project ID where the load balancer is located',\n          'required': True,\n      },\n      flags.FORWARDING_RULE_NAME: {\n          'type':\n              str,\n          'help':\n              'The name of the forwarding rule associated with the Load Balancer to check',\n          'required':\n              True,\n      },\n      flags.REGION: {\n          'type': str,\n          'help': 'The region where the forwarding rule is located',\n          'required': False,\n      },\n      flags.BACKEND_LATENCY_THRESHOLD: {\n          'type': float,\n          'help': 'Threshold for backend latency in milliseconds.',\n          'required': False,\n      },\n      flags.REQUEST_COUNT_THRESHOLD: {\n          'type': float,\n          'help': 'Threshold for average request count per second.',\n          'required': False,\n      },\n      flags.ERROR_RATE_THRESHOLD: {\n          'type': float,\n          'help': 'Threshold for error rate (percentage of 5xx errors).',\n          'required': False,\n      },\n  }\n\n  def build_tree(self):\n    \"\"\"Construct the diagnostic tree with start and end steps only.\"\"\"\n    start = LbLatencyStart()\n    self.add_start(start)\n\n    backend_latency_check = LbBackendLatencyCheck()\n    self.add_step(parent=start, child=backend_latency_check)\n\n    request_count_check = LbRequestCountCheck()\n    self.add_step(parent=start, child=request_count_check)\n\n    average_request_count = request_count_check.average_request_count\n    error_rate_check = LbErrorRateCheck(\n        average_request_count=average_request_count)\n    self.add_step(parent=request_count_check, child=error_rate_check)\n\n    self.add_end(LatencyEnd())\n\n\nclass LbLatencyStart(runbook.StartStep):\n  \"\"\"Fetch the specified forwarding rule\"\"\"\n\n  def execute(self):\n    \"\"\"Fetch the specified forwarding rule.\"\"\"\n    proj = crm.get_project(op.get(flags.PROJECT_ID))\n\n    if not apis.is_enabled(op.get(flags.PROJECT_ID), 'compute'):\n      op.add_skipped(proj, reason='Compute API is not enabled')\n      return  # Early exit if Compute API is disabled\n\n    try:\n      # Attempt to fetch the forwarding rule\n      self.forwarding_rule = lb.get_forwarding_rule(\n          op.get(flags.PROJECT_ID), op.get(flags.FORWARDING_RULE_NAME),\n          op.get(flags.REGION))\n      op.info(f'Forwarding rule found: {self.forwarding_rule.name}')\n    except googleapiclient.errors.HttpError:\n      # Skip the runbook if forwarding rule is missing\n      op.add_skipped(\n          proj,\n          reason='Forwarding rule not found in the specified project and region.'\n      )\n      return\n\n    load_balancer_type = self.forwarding_rule.load_balancer_type\n    supported_load_balancer_types = [\n        lb.LoadBalancerType.CLASSIC_APPLICATION_LB,\n        lb.LoadBalancerType.GLOBAL_EXTERNAL_APPLICATION_LB,\n        lb.LoadBalancerType.REGIONAL_INTERNAL_APPLICATION_LB,\n        lb.LoadBalancerType.REGIONAL_EXTERNAL_APPLICATION_LB,\n    ]\n\n    if load_balancer_type == lb.LoadBalancerType.LOAD_BALANCER_TYPE_UNSPECIFIED:\n      op.add_skipped(\n          proj,\n          reason=\n          'The given forwarding rule type is not used for load balancing.',\n      )\n      return\n    elif load_balancer_type not in supported_load_balancer_types:\n      op.add_skipped(\n          proj,\n          reason=(\n              'Latency runbook is not supported for the specified load balancer'\n              f' type: {lb.get_load_balancer_type_name(load_balancer_type)}'),\n      )\n      return\n\n\nclass LbBackendLatencyCheck(runbook.Step):\n  \"\"\"Check if backend latency exceeds the threshold\"\"\"\n\n  template = 'latency::backend_latency'\n\n  def execute(self):\n    \"\"\"Check backend latency for the specified forwarding rule\"\"\"\n    self.forwarding_rule = lb.get_forwarding_rule(\n        op.get(flags.PROJECT_ID), op.get(flags.FORWARDING_RULE_NAME),\n        op.get(flags.REGION))\n    project_id = op.get(flags.PROJECT_ID)\n    # Define default threshold value\n    threshold = op.get(flags.BACKEND_LATENCY_THRESHOLD) if op.get(\n        flags.BACKEND_LATENCY_THRESHOLD) is not None else 200\n    forwarding_rule = self.forwarding_rule\n    fr_name = op.get(flags.FORWARDING_RULE_NAME)\n    load_balancer_type = self.forwarding_rule.load_balancer_type\n    region = op.get(flags.REGION)\n    query = ''\n    average_latency = None\n    op.info('Forwarding rule name: ' + str(self.forwarding_rule))\n    # Construct the MQL query string, incorporating filter and time range\n\n    if load_balancer_type == lb.LoadBalancerType.REGIONAL_EXTERNAL_APPLICATION_LB:\n      #To Do: Add support for Network Load Balancers and Pass through Load Balancers\n      #To Do: Allow users to chose a specific time range\n\n      query = f'''\n          fetch http_external_regional_lb_rule\n          | metric\n              'loadbalancing.googleapis.com/https/external/regional/backend_latencies'\n          | filter (resource.forwarding_rule_name == '{fr_name}' && resource.region == '{region}')\n          | align delta(1m)\n          | every 1m\n          | group_by [],\n              [value_backend_latencies_average:\n                mean(value.backend_latencies)]\n          | within 15m\n          '''\n\n    if load_balancer_type in [\n        lb.LoadBalancerType.CLASSIC_APPLICATION_LB,\n        lb.LoadBalancerType.GLOBAL_EXTERNAL_APPLICATION_LB,\n    ]:\n      query = f'''\n          fetch https_lb_rule\n          | metric\n              'loadbalancing.googleapis.com/https/backend_latencies'\n          | filter (resource.forwarding_rule_name == '{fr_name}')\n          | align delta(1m)\n          | every 1m\n          | group_by [],\n              [value_backend_latencies_average:\n                mean(value.backend_latencies)]\n          | within 15m\n          '''\n\n    if load_balancer_type == lb.LoadBalancerType.REGIONAL_INTERNAL_APPLICATION_LB:\n      query = f'''\n          fetch internal_http_lb_rule\n          | metric\n              'loadbalancing.googleapis.com/https/internal/backend_latencies'\n          | filter (resource.forwarding_rule_name == '{fr_name}' && resource.region == '{region}')\n          | align delta(1m)\n          | every 1m\n          | group_by [],\n              [value_backend_latencies_average:\n                mean(value.backend_latencies)]\n          | within 15m\n          '''\n\n    try:\n      # Execute the query using the monitoring API\n      metric = monitoring.query(project_id, query)\n      values = []\n      if metric:\n\n        for _, item in metric.items(\n        ):  # Iterate over the items in the metric dictionary\n          if 'values' in item:\n            values = item['values']\n\n          else:\n            values = [[0]]\n      if values is not None:\n        flattened_values = [\n            float(item) for sublist in values for item in sublist\n        ]\n        average_latency = sum(flattened_values) / len(\n            flattened_values) if flattened_values else 0\n      if average_latency > threshold:\n        op.add_failed(forwarding_rule,\n                      reason=op.prep_msg(op.FAILURE_REASON,\n                                         average_latency=round(\n                                             average_latency, 2),\n                                         threshold=threshold),\n                      remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n\n      else:\n        op.add_ok(forwarding_rule,\n                  reason=op.prep_msg(op.SUCCESS_REASON,\n                                     average_latency=round(average_latency, 2),\n                                     threshold=threshold))\n\n      return metric\n\n    except Exception as e:\n      # Catch any other errors\n      op.info('An unexpected error occurred during LbBackendLatency execution.')\n      op.info('Error details: ' + str(e))\n      raise\n\n\nclass LbRequestCountCheck(runbook.Step):\n  \"\"\"Check if request count per second exceeds the threshold\"\"\"\n\n  def __init__(self, average_request_count=0, **kwargs):\n    super().__init__(**kwargs)\n    self.average_request_count = average_request_count\n\n  template = 'latency::request_count'\n\n  def execute(self):\n    \"\"\"Check request count per second for the specified forwarding rule\"\"\"\n    self.forwarding_rule = lb.get_forwarding_rule(\n        op.get(flags.PROJECT_ID), op.get(flags.FORWARDING_RULE_NAME),\n        op.get(flags.REGION))\n    project_id = op.get(flags.PROJECT_ID)\n    threshold = op.get(flags.REQUEST_COUNT_THRESHOLD) if op.get(\n        flags.REQUEST_COUNT_THRESHOLD) is not None else 150\n    forwarding_rule = self.forwarding_rule\n    fr_name = op.get(flags.FORWARDING_RULE_NAME)\n    load_balancer_type = self.forwarding_rule.load_balancer_type\n    region = op.get(flags.REGION)\n    query = ''\n\n    op.info('Forwarding rule name: ' + str(self.forwarding_rule))\n\n    # Construct the MQL query string, incorporating filter and time range\n\n    if load_balancer_type == lb.LoadBalancerType.REGIONAL_EXTERNAL_APPLICATION_LB:\n      query = f'''\n          fetch http_external_regional_lb_rule\n          | metric 'loadbalancing.googleapis.com/https/external/regional/request_count'\n          | filter (resource.forwarding_rule_name == '{fr_name}'  && resource.region == '{region}')\n          | align rate(1m)\n          | every 1m\n          | group_by [], [value_request_count_aggregate: aggregate(value.request_count)]\n          | within 15m\n          '''\n\n    if load_balancer_type in [\n        lb.LoadBalancerType.CLASSIC_APPLICATION_LB,\n        lb.LoadBalancerType.GLOBAL_EXTERNAL_APPLICATION_LB,\n    ]:\n      query = f'''\n          fetch https_lb_rule\n          | metric 'loadbalancing.googleapis.com/https/request_count'\n          | filter (resource.forwarding_rule_name == '{fr_name}')\n          | align rate(1m)\n          | every 1m\n          | group_by [], [value_request_count_aggregate: aggregate(value.request_count)]\n          | within 15m\n          '''\n\n    if load_balancer_type == lb.LoadBalancerType.REGIONAL_INTERNAL_APPLICATION_LB:\n      query = f'''\n          fetch internal_http_lb_rule\n          | metric 'loadbalancing.googleapis.com/https/internal/request_count'\n          | filter (resource.forwarding_rule_name == '{fr_name}'  && resource.region == '{region}')\n          | align rate(1m)\n          | every 1m\n          | group_by [], [value_request_count_aggregate: aggregate(value.request_count)]\n          | within 15m\n          '''\n\n    try:\n      # Execute the query using the monitoring API\n      metric = monitoring.query(project_id, query)\n      values = []\n      if metric:\n        for _, item in metric.items(\n        ):  # Iterate over the items in the metric dictionary\n          if 'values' in item:\n            values = item['values']\n\n          else:\n            values = [[0]]\n      if values is not None:\n        flattened_values_rc = [\n            float(item) for sublist in values for item in sublist\n        ]\n        self.average_request_count = sum(flattened_values_rc) / (\n            len(flattened_values_rc) * 60) if flattened_values_rc else 0\n      if self.average_request_count > threshold:\n        op.add_failed(forwarding_rule,\n                      reason=op.prep_msg(op.FAILURE_REASON,\n                                         average_request_count=round(\n                                             self.average_request_count, 2),\n                                         threshold=threshold),\n                      remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n\n      else:\n        op.add_ok(forwarding_rule,\n                  reason=op.prep_msg(op.SUCCESS_REASON,\n                                     average_request_count=round(\n                                         self.average_request_count, 2),\n                                     threshold=threshold))\n      return metric\n\n    except Exception as e:\n      # Catch any other errors\n      op.info('An unexpected error occurred during LBRequestCount execution.')\n      op.info('Error details: ' + str(e))\n      raise\n\n  def get_average_request_count(self):\n    \"\"\"Return the calculated average_request_count to be used in the next step.\"\"\"\n    return self.average_request_count\n\n\nclass LbErrorRateCheck(runbook.Step):\n  \"\"\"Check if error exceeds the threshold\"\"\"\n\n  def __init__(self, average_request_count=None, **kwargs):\n    super().__init__(**kwargs)\n    self.average_request_count = average_request_count\n\n  template = 'latency::error_rate'\n\n  def execute(self):\n    \"\"\"Check the 5xx error rate for the specified forwarding rule\"\"\"\n    self.forwarding_rule = lb.get_forwarding_rule(\n        op.get(flags.PROJECT_ID), op.get(flags.FORWARDING_RULE_NAME),\n        op.get(flags.REGION))\n    project_id = op.get(flags.PROJECT_ID)\n    threshold = op.get(flags.ERROR_RATE_THRESHOLD) if op.get(\n        flags.ERROR_RATE_THRESHOLD) is not None else 1\n    forwarding_rule = self.forwarding_rule\n    fr_name = op.get(flags.FORWARDING_RULE_NAME)\n    load_balancer_type = self.forwarding_rule.load_balancer_type\n    region = op.get(flags.REGION)\n    average_error_count = None\n    average_error_rate = None\n    query = ''\n\n    op.info('Forwarding rule name: ' + str(self.forwarding_rule))\n\n    # Construct the MQL query string, incorporating filter and time range\n\n    if load_balancer_type == lb.LoadBalancerType.REGIONAL_EXTERNAL_APPLICATION_LB:\n      query = f'''\n          fetch http_external_regional_lb_rule\n          | metric\n              'loadbalancing.googleapis.com/https/external/regional/backend_request_count'\n          | filter\n              (resource.forwarding_rule_name == '{fr_name}'  && resource.region == '{region}')\n              && (metric.response_code_class == 500)\n          | align rate(1m)\n          | every 1m\n          | group_by [],\n              [value_backend_request_count_aggregate:\n                  aggregate(value.backend_request_count)]\n          | within 15m\n          '''\n\n    if load_balancer_type in [\n        lb.LoadBalancerType.CLASSIC_APPLICATION_LB,\n        lb.LoadBalancerType.GLOBAL_EXTERNAL_APPLICATION_LB,\n    ]:\n      query = f'''\n          fetch https_lb_rule\n          | metric\n              'loadbalancing.googleapis.com/https/backend_request_count'\n          | filter\n              (resource.forwarding_rule_name == '{fr_name}')\n              && (metric.response_code_class == 500)\n          | align rate(1m)\n          | every 1m\n          | group_by [],\n              [value_backend_request_count_aggregate:\n                  aggregate(value.backend_request_count)]\n          | within 15m\n          '''\n\n    if load_balancer_type == lb.LoadBalancerType.REGIONAL_INTERNAL_APPLICATION_LB:\n      query = f'''\n          fetch internal_http_lb_rule\n          | metric\n              'loadbalancing.googleapis.com/https/internal/backend_request_count'\n          | filter\n              (resource.forwarding_rule_name == '{fr_name}'  && resource.region == '{region}')\n              && (metric.response_code_class == 500)\n          | align rate(1m)\n          | every 1m\n          | group_by [],\n              [value_backend_request_count_aggregate:\n                  aggregate(value.backend_request_count)]\n          | within 15m\n          '''\n\n    try:\n\n      metric = monitoring.query(project_id, query)\n\n      values = []\n      if metric and metric.get('values'):\n\n        for _, item in metric.items(\n        ):  # Iterate over the items in the metric dictionary\n          if 'values' in item:\n            values = item['values']\n          else:\n            values = [[0]]\n\n      if values is not None:\n        flattened_values_er = [\n            float(item) for sublist in values for item in sublist\n        ]\n        average_error_count = sum(flattened_values_er) / len(\n            flattened_values_er) if flattened_values_er else 0\n\n      if average_error_count is not None and self.average_request_count is not None:\n        if self.average_request_count > 0:\n          average_error_rate = average_error_count / self.average_request_count * 100\n        else:\n          average_error_rate = 0\n\n      if average_error_rate is None:\n        average_error_rate = 0\n\n      if average_error_rate > threshold:\n        op.add_failed(forwarding_rule,\n                      reason=op.prep_msg(op.FAILURE_REASON,\n                                         average_error_rate=round(\n                                             average_error_rate, 2),\n                                         threshold=threshold),\n                      remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n\n      else:\n        op.add_ok(forwarding_rule,\n                  reason=op.prep_msg(op.SUCCESS_REASON,\n                                     average_error_rate=round(\n                                         average_error_rate, 2),\n                                     threshold=threshold))\n\n      return metric\n\n    except Exception as e:\n      # Catch any other errors\n      op.info('An unexpected error occurred during LbErrorRateCheck execution.')\n      op.info('Error details: ' + str(e))\n      raise\n\n\nclass LatencyEnd(runbook.EndStep):\n  \"\"\"Concludes the latency diagnostics process.\n\n  If the issue persists, it directs the user to helpful\n  resources and suggests contacting support with a detailed report.\n  \"\"\"\n\n  def execute(self):\n    \"\"\"Finalize unhealthy backends diagnostics.\"\"\"\n    if not config.get(flags.INTERACTIVE_MODE):\n      response = op.prompt(\n          kind=op.CONFIRMATION,\n          message=(\n              'Are you still experiencing latency issues'\n              f' with your forwarding rule {op.get(flags.FORWARDING_RULE_NAME)}'\n          ),\n          choice_msg='Enter an option: ',\n      )\n      if response == op.YES:\n        op.info(message=op.END_MESSAGE)\n"
  },
  {
    "path": "gcpdiag/runbook/lb/latency_test.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test class for lb/latency.\"\"\"\n\nimport unittest\nfrom unittest import mock\n\nimport apiclient\n\nfrom gcpdiag import config\nfrom gcpdiag.queries import apis_stub\nfrom gcpdiag.queries import lb as queries_lb\nfrom gcpdiag.runbook import lb, op, snapshot_test_base\nfrom gcpdiag.runbook.lb import flags\nfrom gcpdiag.runbook.lb.latency import (LatencyEnd, LbBackendLatencyCheck,\n                                        LbErrorRateCheck, LbLatencyStart,\n                                        LbRequestCountCheck)\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = lb\n  runbook_name = 'lb/latency'\n  project_id = ''\n  config.init({'auto': True, 'interface': 'cli'}, project_id)\n\n  rule_parameters = [{\n      'project_id': 'gcpdiag-lb3-aaaa',\n      'forwarding_rule_name': 'https-content-rule',\n      'region': 'global'\n  }, {\n      'project_id': 'gcpdiag-lb3-aaaa',\n      'forwarding_rule_name': 'https-content-rule-working',\n      'region': 'global'\n  }, {\n      'project_id': 'gcpdiag-lb3-aaaa',\n      'forwarding_rule_name': 'https-content-rule',\n      'region': 'global',\n      'backend_latency_threshold': '700000',\n      'request_count_threshold': '700000',\n      'error_rate_threshold': '50'\n  }]\n\n\n@mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)\nclass TestLatencyLogic(unittest.TestCase):\n  \"\"\"Unit tests for specific logic branches in latency.py.\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    self.mock_fr = mock.MagicMock()\n    self.mock_fr.name = 'test-fr'\n    self.mock_fr.load_balancer_type = (\n        queries_lb.LoadBalancerType.GLOBAL_EXTERNAL_APPLICATION_LB)\n    self.operator = op.Operator(mock.MagicMock())\n    self.operator.parameters = {\n        flags.PROJECT_ID: 'gcpdiag-lb3-aaaa',\n        flags.FORWARDING_RULE_NAME: 'test-fr',\n        flags.REGION: 'global',\n        'start_time': '2024-01-01T00:00:00Z',\n        'end_time': '2024-01-01T01:00:00Z',\n        flags.BACKEND_LATENCY_THRESHOLD: 200,\n        flags.REQUEST_COUNT_THRESHOLD: 150,\n        flags.ERROR_RATE_THRESHOLD: 1,\n    }\n    self.operator.set_run_id('test')\n    self.operator.set_step(mock.Mock(execution_id='test-step'))\n    self.operator.messages = mock.MagicMock()\n\n  @mock.patch('gcpdiag.queries.lb.get_forwarding_rule')\n  @mock.patch('gcpdiag.runbook.op.add_skipped')\n  def test_start_step_unspecified_type(self, mock_skip, mock_get_fr):\n    \"\"\"Covers LbLatencyStart with unspecified LB type.\"\"\"\n    self.mock_fr.load_balancer_type = (\n        queries_lb.LoadBalancerType.LOAD_BALANCER_TYPE_UNSPECIFIED)\n    mock_get_fr.return_value = self.mock_fr\n    step = LbLatencyStart()\n\n    with op.operator_context(self.operator):\n      step.execute()\n\n    mock_skip.assert_called_once_with(mock.ANY, reason=mock.ANY)\n\n  @mock.patch('gcpdiag.queries.lb.get_forwarding_rule')\n  @mock.patch('gcpdiag.runbook.op.add_skipped')\n  def test_start_step_unsupported_type(self, mock_skip, mock_get_fr):\n    \"\"\"Covers LbLatencyStart with unsupported LB type.\"\"\"\n    self.mock_fr.load_balancer_type = (\n        queries_lb.LoadBalancerType.EXTERNAL_PASSTHROUGH_LB)\n    mock_get_fr.return_value = self.mock_fr\n    step = LbLatencyStart()\n\n    with op.operator_context(self.operator):\n      step.execute()\n\n    mock_skip.assert_called_once_with(mock.ANY, reason=mock.ANY)\n\n  @mock.patch('gcpdiag.queries.monitoring.query')\n  @mock.patch('gcpdiag.queries.lb.get_forwarding_rule')\n  @mock.patch('gcpdiag.runbook.op.info')\n  def test_backend_latency_exception(self, mock_info, mock_get_fr, mock_query):\n    \"\"\"Covers exception handling in LbBackendLatencyCheck.\"\"\"\n    mock_get_fr.return_value = self.mock_fr\n    mock_query.side_effect = RuntimeError('Monitoring Error')\n    step = LbBackendLatencyCheck()\n\n    with op.operator_context(self.operator):\n      with self.assertRaises(RuntimeError):\n        step.execute()\n\n    mock_info.assert_any_call(mock.ANY)\n\n  @mock.patch('gcpdiag.queries.monitoring.query')\n  @mock.patch('gcpdiag.queries.lb.get_forwarding_rule')\n  def test_backend_latency_empty_values(self, mock_get_fr, mock_query):\n    \"\"\"Covers fallback to [[0]] values in LbBackendLatencyCheck.\"\"\"\n    mock_get_fr.return_value = self.mock_fr\n    mock_query.return_value = {'key': {'other': 'data'}}\n    step = LbBackendLatencyCheck()\n\n    with op.operator_context(self.operator):\n      step.execute()\n      self.operator.interface.add_ok.assert_called_once()\n\n  @mock.patch('gcpdiag.queries.monitoring.query')\n  @mock.patch('gcpdiag.queries.lb.get_forwarding_rule')\n  def test_backend_latency_regional_external(self, mock_get_fr, mock_query):\n    \"\"\"Covers Regional External LB branch in LbBackendLatencyCheck.\"\"\"\n    self.mock_fr.load_balancer_type = (\n        queries_lb.LoadBalancerType.REGIONAL_EXTERNAL_APPLICATION_LB)\n    mock_get_fr.return_value = self.mock_fr\n    mock_query.return_value = {'key': {'values': [[100]]}}\n    step = LbBackendLatencyCheck()\n\n    with op.operator_context(self.operator):\n      step.execute()\n\n    query_str = mock_query.call_args[0][1]\n    self.assertIn('http_external_regional_lb_rule', query_str)\n    self.assertIn(f\"resource.forwarding_rule_name == '{self.mock_fr.name}'\",\n                  query_str)\n    self.assertIn(\n        f\"resource.region == '{self.operator.parameters[flags.REGION]}'\",\n        query_str)\n\n  @mock.patch('gcpdiag.queries.monitoring.query')\n  @mock.patch('gcpdiag.queries.lb.get_forwarding_rule')\n  def test_backend_latency_regional_internal(self, mock_get_fr, mock_query):\n    \"\"\"Covers  Regional Internal LB branch in LbBackendLatencyCheck.\"\"\"\n    self.mock_fr.load_balancer_type = (\n        queries_lb.LoadBalancerType.REGIONAL_INTERNAL_APPLICATION_LB)\n    mock_get_fr.return_value = self.mock_fr\n    mock_query.return_value = {'key': {'values': [[100]]}}\n    step = LbBackendLatencyCheck()\n\n    with op.operator_context(self.operator):\n      step.execute()\n\n    query_str = mock_query.call_args[0][1]\n    self.assertIn('internal_http_lb_rule', query_str)\n    self.assertIn(f\"resource.forwarding_rule_name == '{self.mock_fr.name}'\",\n                  query_str)\n    self.assertIn(\n        f\"resource.region == '{self.operator.parameters[flags.REGION]}'\",\n        query_str)\n\n  @mock.patch('gcpdiag.queries.monitoring.query')\n  @mock.patch('gcpdiag.queries.lb.get_forwarding_rule')\n  def test_request_count_regional_external(self, mock_get_fr, mock_query):\n    \"\"\"Covers Regional External LB branch in LbRequestCountCheck.\"\"\"\n    self.mock_fr.load_balancer_type = (\n        queries_lb.LoadBalancerType.REGIONAL_EXTERNAL_APPLICATION_LB)\n    mock_get_fr.return_value = self.mock_fr\n    mock_query.return_value = {'key': {'values': [[10]]}}\n    step = LbRequestCountCheck()\n\n    with op.operator_context(self.operator):\n      step.execute()\n\n    query_str = mock_query.call_args[0][1]\n    self.assertIn('http_external_regional_lb_rule', query_str)\n    self.assertIn(f\"resource.forwarding_rule_name == '{self.mock_fr.name}'\",\n                  query_str)\n    self.assertIn(\n        f\"resource.region == '{self.operator.parameters[flags.REGION]}'\",\n        query_str)\n\n  @mock.patch('gcpdiag.queries.monitoring.query')\n  @mock.patch('gcpdiag.queries.lb.get_forwarding_rule')\n  def test_request_count_regional_internal(self, mock_get_fr, mock_query):\n    \"\"\"Covers Regional Internal LB branch in LbRequestCountCheck.\"\"\"\n    self.mock_fr.load_balancer_type = (\n        queries_lb.LoadBalancerType.REGIONAL_INTERNAL_APPLICATION_LB)\n    mock_get_fr.return_value = self.mock_fr\n    mock_query.return_value = {'key': {'values': [[10]]}}\n    step = LbRequestCountCheck()\n\n    with op.operator_context(self.operator):\n      step.execute()\n\n    query_str = mock_query.call_args[0][1]\n    self.assertIn('internal_http_lb_rule', query_str)\n    self.assertIn(f\"resource.forwarding_rule_name == '{self.mock_fr.name}'\",\n                  query_str)\n    self.assertIn(\n        f\"resource.region == '{self.operator.parameters[flags.REGION]}'\",\n        query_str)\n\n  @mock.patch('gcpdiag.queries.monitoring.query')\n  @mock.patch('gcpdiag.queries.lb.get_forwarding_rule')\n  def test_error_rate_calculation_and_regional_internal(self, mock_get_fr,\n                                                        mock_query):\n    \"\"\"Covers Error rate calculation for Regional Internal.\"\"\"\n    self.mock_fr.load_balancer_type = (\n        queries_lb.LoadBalancerType.REGIONAL_INTERNAL_APPLICATION_LB)\n    mock_get_fr.return_value = self.mock_fr\n    mock_query.return_value = {'key': {'values': [[5]]}}\n    step = LbErrorRateCheck(average_request_count=100)\n\n    with op.operator_context(self.operator):\n      step.execute()\n\n    query_str = mock_query.call_args[0][1]\n    self.assertIn('internal_http_lb_rule', query_str)\n    self.assertIn(f\"resource.forwarding_rule_name == '{self.mock_fr.name}'\",\n                  query_str)\n    self.assertIn(\n        f\"resource.region == '{self.operator.parameters[flags.REGION]}'\",\n        query_str)\n\n  @mock.patch('gcpdiag.config.get', return_value=False)\n  @mock.patch('gcpdiag.runbook.op.prompt', return_value=op.YES)\n  @mock.patch('gcpdiag.runbook.op.info')\n  def test_latency_end_yes(self, mock_info, unused_mock_prompt,\n                           unused_mock_config):\n    \"\"\"Covers LatencyEnd step logic.\"\"\"\n    step = LatencyEnd()\n\n    with op.operator_context(self.operator):\n      step.execute()\n\n    mock_info.assert_called_with(message=op.END_MESSAGE)\n\n  @mock.patch('gcpdiag.queries.apis.is_enabled', return_value=False)\n  @mock.patch('gcpdiag.runbook.op.add_skipped')\n  def test_start_step_compute_disabled(self, mock_skip, unused_mock_is_enabled):\n    \"\"\"Covers  Early exit when Compute API is disabled.\"\"\"\n    step = LbLatencyStart()\n    with op.operator_context(self.operator):\n      step.execute()\n    mock_skip.assert_called_once_with(mock.ANY,\n                                      reason='Compute API is not enabled')\n\n  @mock.patch('gcpdiag.queries.lb.get_forwarding_rule')\n  @mock.patch('gcpdiag.runbook.op.add_skipped')\n  def test_start_step_http_error(self, mock_skip, mock_get_fr):\n    \"\"\"Covers HttpError when fetching forwarding rule.\"\"\"\n    mock_get_fr.side_effect = apiclient.errors.HttpError(\n        mock.Mock(status=404), b'Not Found')\n    step = LbLatencyStart()\n    with op.operator_context(self.operator):\n      step.execute()\n    mock_skip.assert_called_once_with(mock.ANY, reason=mock.ANY)\n\n  @mock.patch('gcpdiag.queries.monitoring.query')\n  @mock.patch('gcpdiag.queries.lb.get_forwarding_rule')\n  @mock.patch('gcpdiag.runbook.op.info')\n  def test_request_count_exception(self, mock_info, mock_get_fr, mock_query):\n    \"\"\"Covers Exception handling in LbRequestCountCheck.\"\"\"\n    mock_get_fr.return_value = self.mock_fr\n    mock_query.side_effect = RuntimeError('Monitoring Error')\n    step = LbRequestCountCheck()\n    with op.operator_context(self.operator):\n      with self.assertRaises(RuntimeError):\n        step.execute()\n    mock_info.assert_any_call(mock.ANY)\n\n  def test_get_average_request_count(self):\n    \"\"\"Covers  get_average_request_count getter.\"\"\"\n    step = LbRequestCountCheck(average_request_count=12.5)\n    self.assertEqual(step.get_average_request_count(), 12.5)\n\n  @mock.patch('gcpdiag.queries.monitoring.query')\n  @mock.patch('gcpdiag.queries.lb.get_forwarding_rule')\n  def test_error_rate_regional_external(self, mock_get_fr, mock_query):\n    \"\"\"Covers  Regional External LB branch in LbErrorRateCheck.\"\"\"\n    self.mock_fr.load_balancer_type = (\n        queries_lb.LoadBalancerType.REGIONAL_EXTERNAL_APPLICATION_LB)\n    mock_get_fr.return_value = self.mock_fr\n    mock_query.return_value = {'key': {'values': [[5]]}}\n    step = LbErrorRateCheck(average_request_count=100)\n    with op.operator_context(self.operator):\n      step.execute()\n    query_str = mock_query.call_args[0][1]\n    self.assertIn('http_external_regional_lb_rule', query_str)\n    self.assertIn(f\"resource.forwarding_rule_name == '{self.mock_fr.name}'\",\n                  query_str)\n    self.assertIn(\n        f\"resource.region == '{self.operator.parameters[flags.REGION]}'\",\n        query_str)\n\n  @mock.patch('gcpdiag.queries.monitoring.query')\n  @mock.patch('gcpdiag.queries.lb.get_forwarding_rule')\n  def test_error_rate_empty_values(self, mock_get_fr, mock_query):\n    \"\"\"Covers  Handling missing 'values' key in LbErrorRateCheck.\"\"\"\n    mock_get_fr.return_value = self.mock_fr\n    mock_query.return_value = {'key': {'other': 'data'}}\n    step = LbErrorRateCheck(average_request_count=10)\n    with op.operator_context(self.operator):\n      step.execute()\n\n  @mock.patch('gcpdiag.queries.monitoring.query')\n  @mock.patch('gcpdiag.queries.lb.get_forwarding_rule')\n  def test_error_rate_zero_qps(self, mock_get_fr, mock_query):\n    \"\"\"Covers  Error rate calculation when request count is zero.\"\"\"\n    mock_get_fr.return_value = self.mock_fr\n    mock_query.return_value = {'key': {'values': [[5]]}}\n    step = LbErrorRateCheck(average_request_count=0)\n    with op.operator_context(self.operator):\n      step.execute()\n\n  @mock.patch('gcpdiag.queries.monitoring.query')\n  @mock.patch('gcpdiag.queries.lb.get_forwarding_rule')\n  @mock.patch('gcpdiag.runbook.op.info')\n  def test_error_rate_exception(self, mock_info, mock_get_fr, mock_query):\n    \"\"\"Covers  Exception handling in LbErrorRateCheck.\"\"\"\n    mock_get_fr.return_value = self.mock_fr\n    mock_query.side_effect = RuntimeError('Monitoring Error')\n    step = LbErrorRateCheck(average_request_count=10)\n    with op.operator_context(self.operator):\n      with self.assertRaises(RuntimeError):\n        step.execute()\n    mock_info.assert_any_call(mock.ANY)\n"
  },
  {
    "path": "gcpdiag/runbook/lb/snapshots/latency.txt",
    "content": "forwarding_rule_name=https-content-rule,project_id=gcpdiag-lb3-aaaa,region=global\n\nlb/latency: This runbook diagnoses and troubleshoots latency issues with Application Load Balancers.\n\n  It analyzes key metrics to identify potential bottlenecks and performance\n  problems.\n\n  Key Investigation Areas:\n\n  - Backend Latency:\n    - Measures the time taken for backends to respond to requests, checking if\n    it exceeds a configurable threshold.\n  - Request Count Per Second (QPS):\n    - Monitors the rate of incoming requests to the load balancer, checking if\n    it exceeds a configurable threshold.  A high request count coupled with high\n    latency might suggest overload.\n  - 5xx Error Rate:\n    - Calculates the percentage of 5xx server errors, indicating problems on the\n    backend servers.  This check uses a configurable threshold and considers the\n    request count to provide a meaningful error rate.\n  \n[START]: Fetch the specified forwarding rule.\n[INFO]: Forwarding rule found: https-content-rule\n[AUTOMATED STEP]: Check backend latency for the specified forwarding rule\n[INFO]: Forwarding rule name: projects/gcpdiag-lb3-aaaa/global/forwardingRules/https-content-rule\n\n   - gcpdiag-lb3-aaaa/https-content-rule                                  [FAIL]\n     [REASON]\n     The forwarding rule has a backend latency of 660138.25 ms. This is higher than the threshold value of 200 ms.\n\n     [REMEDIATION]\n     Investigate the increased backend latency. Check the health and performance of the backend instances, examining metrics such as CPU utilization, memory usage, and disk I/O.\n\n[AUTOMATED STEP]: Check request count per second for the specified forwarding rule\n[INFO]: Forwarding rule name: projects/gcpdiag-lb3-aaaa/global/forwardingRules/https-content-rule\n\n   - gcpdiag-lb3-aaaa/https-content-rule                                  [FAIL]\n     [REASON]\n     The forwarding rule has an average request count of 11002.3 requests/s in the last 15 minutes. This is higher than the threshold value of 150.\n\n     [REMEDIATION]\n     The high request count suggests the backend may be overloaded. Consider scaling up the backend by adding more instances or increasing the resources of existing instances.\n\n[AUTOMATED STEP]: Check the 5xx error rate for the specified forwarding rule\n[INFO]: Forwarding rule name: projects/gcpdiag-lb3-aaaa/global/forwardingRules/https-content-rule\n\n   - gcpdiag-lb3-aaaa/https-content-rule                                  [OK]\n     [REASON]\n     The forwarding rule has an average error rate of 0% in the last 15 minutes. This is less than the threshold value of 1%.\n\n[END]: Finalize unhealthy backends diagnostics.\n\n\nforwarding_rule_name=https-content-rule-working,project_id=gcpdiag-lb3-aaaa,region=global\n\nlb/latency: This runbook diagnoses and troubleshoots latency issues with Application Load Balancers.\n\n  It analyzes key metrics to identify potential bottlenecks and performance\n  problems.\n\n  Key Investigation Areas:\n\n  - Backend Latency:\n    - Measures the time taken for backends to respond to requests, checking if\n    it exceeds a configurable threshold.\n  - Request Count Per Second (QPS):\n    - Monitors the rate of incoming requests to the load balancer, checking if\n    it exceeds a configurable threshold.  A high request count coupled with high\n    latency might suggest overload.\n  - 5xx Error Rate:\n    - Calculates the percentage of 5xx server errors, indicating problems on the\n    backend servers.  This check uses a configurable threshold and considers the\n    request count to provide a meaningful error rate.\n  \n[START]: Fetch the specified forwarding rule.\n\n   - gcpdiag-lb3-aaaa                                                     [SKIP]\n     [REASON]\n     Forwarding rule not found in the specified project and region.\n\n\nbackend_latency_threshold=700000,error_rate_threshold=50,forwarding_rule_name=https-content-\nrule,project_id=gcpdiag-lb3-aaaa,region=global,request_count_threshold=700000\n\nlb/latency: This runbook diagnoses and troubleshoots latency issues with Application Load Balancers.\n\n  It analyzes key metrics to identify potential bottlenecks and performance\n  problems.\n\n  Key Investigation Areas:\n\n  - Backend Latency:\n    - Measures the time taken for backends to respond to requests, checking if\n    it exceeds a configurable threshold.\n  - Request Count Per Second (QPS):\n    - Monitors the rate of incoming requests to the load balancer, checking if\n    it exceeds a configurable threshold.  A high request count coupled with high\n    latency might suggest overload.\n  - 5xx Error Rate:\n    - Calculates the percentage of 5xx server errors, indicating problems on the\n    backend servers.  This check uses a configurable threshold and considers the\n    request count to provide a meaningful error rate.\n  \n[START]: Fetch the specified forwarding rule.\n[INFO]: Forwarding rule found: https-content-rule\n[AUTOMATED STEP]: Check backend latency for the specified forwarding rule\n[INFO]: Forwarding rule name: projects/gcpdiag-lb3-aaaa/global/forwardingRules/https-content-rule\n\n   - gcpdiag-lb3-aaaa/https-content-rule                                  [OK]\n     [REASON]\n     The forwarding rule has a backend latency of 660138.25 ms. This is less than the threshold value of 700000.0 ms.\n\n[AUTOMATED STEP]: Check request count per second for the specified forwarding rule\n[INFO]: Forwarding rule name: projects/gcpdiag-lb3-aaaa/global/forwardingRules/https-content-rule\n\n   - gcpdiag-lb3-aaaa/https-content-rule                                  [OK]\n     [REASON]\n     The forwarding rule has an average request count of 11002.3 requests/s in the last 15 minutes. This is less than the threshold value of 700000.0.\n\n[AUTOMATED STEP]: Check the 5xx error rate for the specified forwarding rule\n[INFO]: Forwarding rule name: projects/gcpdiag-lb3-aaaa/global/forwardingRules/https-content-rule\n\n   - gcpdiag-lb3-aaaa/https-content-rule                                  [OK]\n     [REASON]\n     The forwarding rule has an average error rate of 0% in the last 15 minutes. This is less than the threshold value of 50.0%.\n\n[END]: Finalize unhealthy backends diagnostics.\n\n\n"
  },
  {
    "path": "gcpdiag/runbook/lb/snapshots/ssl_certificates.txt",
    "content": "certificate_name=cert1,project_id=gcpdiag-lb3-aaaa\n\nlb/ssl-certificates: This runbook diagnoses and troubleshoots issues with SSL certificates.\n\n  The supported certificates are Google-managed classic certificates attached to\n  load balancers.\n\n  It helps identify and resolve common problems that prevent certificates from\n  provisioning or functioning correctly.\n\n  Key Investigation Area:\n\n  - Certificate Status:\n    - Checks the certificate's provisioning status and identifies any failed\n    domains.\n  - Domain Validation:\n    - Verifies DNS configuration for each domain, ensuring proper A/AAAA records\n    and the absence of conflicting records.\n  - Load Balancer Configuration:\n    - Confirms the certificate is correctly attached to a target proxy and\n    associated with a forwarding rule using port 443.\n  - Conflicting resources:\n    - Ensures no certificate map is attached to the target proxy, which can\n    interfere with Google-managed certificates.\n  - Provisioning Time:\n    - Checks Cloud Logging to determine when the certificate was attached and\n    allows sufficient time for propagation.\n  \n[START]: Verify the existence and status of the SSL certificate \"cert1\".\n[INFO]: name: cert1\n\n   - gcpdiag-lb3-aaaa                                                     [FAIL]\n     [REASON]\n     The Google-managed SSL certificate \"cert1\" is not in ACTIVE state.\n\n[GATEWAY]: Analyze the status of the Google-managed SSL certificate \"cert1\".\n\n   - projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert1               [UNCERTAIN]\n     [REASON]\n     The Google-managed SSL certificate \"cert1\" is in the PROVISIONING state. Further investigation into the status of each domain is necessary..\n\n[GATEWAY]: Check the status of each individual domain associated with the SSL certificate \"cert1\".\n[AUTOMATED STEP]: Analyze domains in FAILED_NOT_VISIBLE state for certificate \"cert1\".\n\n   - projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert1               [FAIL]\n     [REASON]\n     The following domains are in FAILED_NOT_VISIBLE state: natka123.com, second.natka123.com for SSL certificate \"cert1\". This usually means the domain's DNS records are not correctly pointing to the load balancer.\n\n[GATEWAY]: Verify the SSL certificate \"cert1\" is attached to a target proxy.\n\n   - projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert1               [OK]\n     [REASON]\n     The SSL certificate \"cert1\" is attached to target proxies (projects/gcpdiag-lb3-aaaa/global/targetHttpsProxies/https-lb-proxy) that are in use by forwarding rules.\n\n[GATEWAY]: Verify the DNS records for domain \"natka123.com\" associated with the SSL certificate \"cert1\".\n\n   - projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert1               [UNCERTAIN]\n     [REASON]\n     Some DNS records for domain natka123.com resolve to the following unexpected IP address(es): 1.2.3.5.  While other records point to the expected IP addresses: 1.2.3.4. The unexpected IP addresses do not point to any load balancer associated with certificate cert1. This can cause certificate provisioning issues.\n\n     [REMEDIATION]\n     Configure DNS records for natka123.com to point to the correct load balancer IP address(es) for certificate cert1.\n\n     The following load balancer IP addresses are associated with this certificate:\n\n     - forwarding rule \"https-content-rule\" in \"global\": 1.2.3.4\n\n\n     Check: <https://cloud.google.com/load-balancing/docs/ssl-certificates/google-managed-certs#update-dns>\n\n[GATEWAY]: Verify the DNS records for domain \"second.natka123.com\" associated with the SSL certificate \"cert1\".\n\n   - projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert1               [FAIL]\n     [REASON]\n     DNS records for domain second.natka123.com currently resolve to the following IP addresses: 2600:1901:0:d0d7::. These IP addresses do not point to any load balancer associated with certificate cert1. Certificate provisioning is therefore blocked.\n\n     [REMEDIATION]\n     Configure DNS records for second.natka123.com to point to the correct load balancer IP address(es) for certificate cert1.\n\n     The following load balancer IP addresses are associated with this certificate:\n\n     - forwarding rule \"https-content-rule\" in \"global\": 1.2.3.4\n\n\n     Check: <https://cloud.google.com/load-balancing/docs/ssl-certificates/google-managed-certs#update-dns>\n\n[AUTOMATED STEP]: Check if the load balancer with certificate \"cert1\" is configured to listen on port 443.\n\n   - projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert1               [OK]\n     [REASON]\n     The SSL certificate \"cert1\" has forwarding rules configured for HTTPS (port 443) on all associated IP addresses.\n\n[AUTOMATED STEP]: Check for conflicting certificate map set on a target proxy for certificate \"cert1\".\n\n   - projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert1               [FAIL]\n     [REASON]\n     The following target proxies have a conflicting certificate map:\n\n     Target Proxy: projects/gcpdiag-lb3-aaaa/global/targetHttpsProxies/https-lb-proxy has certificate map //certificatemanager.googleapis.com/projects/gcpdiag-lb3-aaaa/locations/global/certificateMaps/cert-map together with classic SSL certificates https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert1.\n\n     If certificate map is set on a target proxy, the classic SSL certificates are ignored.\n\n     [REMEDIATION]\n     If this configuration is unintended, detach the certificate map from the target proxies.\n\n[AUTOMATED STEP]: Check if the SSL certificate \"cert1\" associated resources has been updated recently.\n\n   - projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert1               [UNCERTAIN]\n     [REASON]\n     The SSL certificate \"cert1\" has recently had associated resources modified. This might affect DNS validation. Details are below:\n     Forwarding rule https-content-rule in scope global has been modified at 2024-10-18T14:34:17.798905Z.\n     Target proxy https-lb-proxy in scope global has been modified at 2024-10-18T14:34:17.798905Z.\n\n     [REMEDIATION]\n     DNS validation automatically checks the domain's A and AAAA records against the Google Cloud load balancer's IP address. This process includes an automatic retry mechanism with increasing wait times. If cert1 was recently attached to a target proxy or the target proxy to a forwarding rule, validation could take up to 24 hours to complete.\n\n[END]: Finalize SSL Certificate diagnostics.\n\n\ncertificate_name=cert2,project_id=gcpdiag-lb3-aaaa\n\nlb/ssl-certificates: This runbook diagnoses and troubleshoots issues with SSL certificates.\n\n  The supported certificates are Google-managed classic certificates attached to\n  load balancers.\n\n  It helps identify and resolve common problems that prevent certificates from\n  provisioning or functioning correctly.\n\n  Key Investigation Area:\n\n  - Certificate Status:\n    - Checks the certificate's provisioning status and identifies any failed\n    domains.\n  - Domain Validation:\n    - Verifies DNS configuration for each domain, ensuring proper A/AAAA records\n    and the absence of conflicting records.\n  - Load Balancer Configuration:\n    - Confirms the certificate is correctly attached to a target proxy and\n    associated with a forwarding rule using port 443.\n  - Conflicting resources:\n    - Ensures no certificate map is attached to the target proxy, which can\n    interfere with Google-managed certificates.\n  - Provisioning Time:\n    - Checks Cloud Logging to determine when the certificate was attached and\n    allows sufficient time for propagation.\n  \n[START]: Verify the existence and status of the SSL certificate \"cert2\".\n[INFO]: name: cert2\n\n   - gcpdiag-lb3-aaaa                                                     [FAIL]\n     [REASON]\n     The Google-managed SSL certificate \"cert2\" is not in ACTIVE state.\n\n[GATEWAY]: Analyze the status of the Google-managed SSL certificate \"cert2\".\n\n   - projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert2               [UNCERTAIN]\n     [REASON]\n     The Google-managed SSL certificate \"cert2\" is in the PROVISIONING state. Further investigation into the status of each domain is necessary..\n\n[GATEWAY]: Check the status of each individual domain associated with the SSL certificate \"cert2\".\n[AUTOMATED STEP]: Analyze domains in FAILED_NOT_VISIBLE state for certificate \"cert2\".\n\n   - projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert2               [FAIL]\n     [REASON]\n     The following domains are in FAILED_NOT_VISIBLE state: test.natka123.com for SSL certificate \"cert2\". This usually means the domain's DNS records are not correctly pointing to the load balancer.\n\n[GATEWAY]: Verify the SSL certificate \"cert2\" is attached to a target proxy.\n\n   - projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert2               [OK]\n     [REASON]\n     The SSL certificate \"cert2\" is attached to target proxies (projects/gcpdiag-lb3-aaaa/global/targetHttpsProxies/https-lb-proxy-working) that are in use by forwarding rules.\n\n[GATEWAY]: Verify the DNS records for domain \"test.natka123.com\" associated with the SSL certificate \"cert2\".\n\n   - projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert2               [FAIL]\n     [REASON]\n     DNS records for domain test.natka123.com currently resolve to the following IP addresses: 192.168.3.4. These IP addresses do not point to any load balancer associated with certificate cert2. Certificate provisioning is therefore blocked.\n\n     [REMEDIATION]\n     Configure DNS records for test.natka123.com to point to the correct load balancer IP address(es) for certificate cert2.\n\n     The following load balancer IP addresses are associated with this certificate:\n\n     - forwarding rule \"https-content-rule-working\" in \"global\": 2600:1901:0:d0d7::\n\n\n     Check: <https://cloud.google.com/load-balancing/docs/ssl-certificates/google-managed-certs#update-dns>\n\n[AUTOMATED STEP]: Check if the load balancer with certificate \"cert2\" is configured to listen on port 443.\n\n   - projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert2               [FAIL]\n     [REASON]\n     The following forwarding rules with certificate cert2: \n      projects/gcpdiag-lb3-aaaa/global/forwardingRules/https-content-rule-working \n      use IP address 2600:1901:0:d0d7:: but none of them listen on port 443. \n\n     There must be at least one load balancer's forwarding rule that uses TCP port 443 for the Google-managed certificate to be initially provisioned and automatically renewed.\n\n     [REMEDIATION]\n     Configure the load balancer to listen on port 443 for SSL certificate \"cert2\".\n\n[AUTOMATED STEP]: Check for conflicting certificate map set on a target proxy for certificate \"cert2\".\n\n   - projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert2               [OK]\n     [REASON]\n     All target proxies associated with the SSL certificate \"cert2\" do not have a certificate map.\n\n[AUTOMATED STEP]: Check if the SSL certificate \"cert2\" associated resources has been updated recently.\n\n   - projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert2               [UNCERTAIN]\n     [REASON]\n     The SSL certificate \"cert2\" has recently had associated resources modified. This might affect DNS validation. Details are below:\n     Forwarding rule https-content-rule-working in scope global has been modified at 2024-10-18T14:34:17.798905Z.\n     Target proxy https-lb-proxy-working in scope global has been modified at 2024-10-18T14:34:17.798905Z.\n\n     [REMEDIATION]\n     DNS validation automatically checks the domain's A and AAAA records against the Google Cloud load balancer's IP address. This process includes an automatic retry mechanism with increasing wait times. If cert2 was recently attached to a target proxy or the target proxy to a forwarding rule, validation could take up to 24 hours to complete.\n\n[END]: Finalize SSL Certificate diagnostics.\n\n\ncertificate_name=cert3,project_id=gcpdiag-lb3-aaaa\n\nlb/ssl-certificates: This runbook diagnoses and troubleshoots issues with SSL certificates.\n\n  The supported certificates are Google-managed classic certificates attached to\n  load balancers.\n\n  It helps identify and resolve common problems that prevent certificates from\n  provisioning or functioning correctly.\n\n  Key Investigation Area:\n\n  - Certificate Status:\n    - Checks the certificate's provisioning status and identifies any failed\n    domains.\n  - Domain Validation:\n    - Verifies DNS configuration for each domain, ensuring proper A/AAAA records\n    and the absence of conflicting records.\n  - Load Balancer Configuration:\n    - Confirms the certificate is correctly attached to a target proxy and\n    associated with a forwarding rule using port 443.\n  - Conflicting resources:\n    - Ensures no certificate map is attached to the target proxy, which can\n    interfere with Google-managed certificates.\n  - Provisioning Time:\n    - Checks Cloud Logging to determine when the certificate was attached and\n    allows sufficient time for propagation.\n  \n[START]: Verify the existence and status of the SSL certificate \"cert3\".\n[INFO]: name: cert3\n\n   - gcpdiag-lb3-aaaa                                                     [FAIL]\n     [REASON]\n     The Google-managed SSL certificate \"cert3\" is not in ACTIVE state.\n\n[GATEWAY]: Analyze the status of the Google-managed SSL certificate \"cert3\".\n\n   - projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert3               [UNCERTAIN]\n     [REASON]\n     The Google-managed SSL certificate \"cert3\" is in the PROVISIONING state. Further investigation into the status of each domain is necessary..\n\n[GATEWAY]: Check the status of each individual domain associated with the SSL certificate \"cert3\".\n[AUTOMATED STEP]: Analyze domains in FAILED_NOT_VISIBLE state for certificate \"cert3\".\n\n   - projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert3               [FAIL]\n     [REASON]\n     The following domains are in FAILED_NOT_VISIBLE state: second.test.org, test.org for SSL certificate \"cert3\". This usually means the domain's DNS records are not correctly pointing to the load balancer.\n\n[GATEWAY]: Verify the SSL certificate \"cert3\" is attached to a target proxy.\n\n   - projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert3               [OK]\n     [REASON]\n     The SSL certificate \"cert3\" is attached to target proxies (projects/gcpdiag-lb3-aaaa/global/targetSslProxies/ssl-proxy) that are in use by forwarding rules.\n\n[GATEWAY]: Verify the DNS records for domain \"second.test.org\" associated with the SSL certificate \"cert3\".\n\n   - projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert3               [FAIL]\n     [REASON]\n     DNS records for domain second.test.org currently resolve to the following IP addresses: 2600:1901:0:d0d7::. These IP addresses do not point to any load balancer associated with certificate cert3. Certificate provisioning is therefore blocked.\n\n     [REMEDIATION]\n     Configure DNS records for second.test.org to point to the correct load balancer IP address(es) for certificate cert3.\n\n     The following load balancer IP addresses are associated with this certificate:\n\n     - forwarding rule \"ssl-rule\" in \"global\": 192.168.3.5\n\n\n     Check: <https://cloud.google.com/load-balancing/docs/ssl-certificates/google-managed-certs#update-dns>\n\n[GATEWAY]: Verify the DNS records for domain \"test.org\" associated with the SSL certificate \"cert3\".\n\n   - projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert3               [OK]\n     [REASON]\n     DNS records for domain test.org are correctly configured. All resolved IP addresses (192.168.3.5) point to the load balancer(s) associated with certificate cert3.\n\n[AUTOMATED STEP]: Check if the load balancer with certificate \"cert3\" is configured to listen on port 443.\n\n   - projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert3               [OK]\n     [REASON]\n     The SSL certificate \"cert3\" has forwarding rules configured for HTTPS (port 443) on all associated IP addresses.\n\n[AUTOMATED STEP]: Check for conflicting certificate map set on a target proxy for certificate \"cert3\".\n\n   - projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert3               [OK]\n     [REASON]\n     All target proxies associated with the SSL certificate \"cert3\" do not have a certificate map.\n\n[AUTOMATED STEP]: Check if the SSL certificate \"cert3\" associated resources has been updated recently.\n\n   - projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert3               [UNCERTAIN]\n     [REASON]\n     The SSL certificate \"cert3\" has recently had associated resources modified. This might affect DNS validation. Details are below:\n     Forwarding rule ssl-rule in scope global has been modified at 2024-10-18T14:34:17.798905Z.\n     Target proxy ssl-proxy in scope global has been modified at 2024-10-18T14:34:17.798905Z.\n\n     [REMEDIATION]\n     DNS validation automatically checks the domain's A and AAAA records against the Google Cloud load balancer's IP address. This process includes an automatic retry mechanism with increasing wait times. If cert3 was recently attached to a target proxy or the target proxy to a forwarding rule, validation could take up to 24 hours to complete.\n\n[END]: Finalize SSL Certificate diagnostics.\n\n\ncertificate_name=unused-cert4,project_id=gcpdiag-lb3-aaaa\n\nlb/ssl-certificates: This runbook diagnoses and troubleshoots issues with SSL certificates.\n\n  The supported certificates are Google-managed classic certificates attached to\n  load balancers.\n\n  It helps identify and resolve common problems that prevent certificates from\n  provisioning or functioning correctly.\n\n  Key Investigation Area:\n\n  - Certificate Status:\n    - Checks the certificate's provisioning status and identifies any failed\n    domains.\n  - Domain Validation:\n    - Verifies DNS configuration for each domain, ensuring proper A/AAAA records\n    and the absence of conflicting records.\n  - Load Balancer Configuration:\n    - Confirms the certificate is correctly attached to a target proxy and\n    associated with a forwarding rule using port 443.\n  - Conflicting resources:\n    - Ensures no certificate map is attached to the target proxy, which can\n    interfere with Google-managed certificates.\n  - Provisioning Time:\n    - Checks Cloud Logging to determine when the certificate was attached and\n    allows sufficient time for propagation.\n  \n[START]: Verify the existence and status of the SSL certificate \"unused-cert4\".\n[INFO]: name: unused-cert4\n\n   - gcpdiag-lb3-aaaa                                                     [FAIL]\n     [REASON]\n     The Google-managed SSL certificate \"unused-cert4\" is not in ACTIVE state.\n\n[GATEWAY]: Analyze the status of the Google-managed SSL certificate \"unused-cert4\".\n\n   - projects/gcpdiag-lb3-aaaa/global/sslCertificates/unused-cert4        [UNCERTAIN]\n     [REASON]\n     The Google-managed SSL certificate \"unused-cert4\" is in the PROVISIONING state. Further investigation into the status of each domain is necessary..\n\n[GATEWAY]: Check the status of each individual domain associated with the SSL certificate \"unused-cert4\".\n[AUTOMATED STEP]: Analyze domains in FAILED_NOT_VISIBLE state for certificate \"unused-cert4\".\n\n   - projects/gcpdiag-lb3-aaaa/global/sslCertificates/unused-cert4        [FAIL]\n     [REASON]\n     The following domains are in FAILED_NOT_VISIBLE state: second.test.org, test.org for SSL certificate \"unused-cert4\". This usually means the domain's DNS records are not correctly pointing to the load balancer.\n\n[GATEWAY]: Verify the SSL certificate \"unused-cert4\" is attached to a target proxy.\n\n   - projects/gcpdiag-lb3-aaaa/global/sslCertificates/unused-cert4        [FAIL]\n     [REASON]\n     The SSL certificate \"unused-cert4\" is not attached to any target proxies. Attach the certificate to a target proxy.\n\n     [REMEDIATION]\n     Follow the documentation to attach the certificate to a target proxy: <https://cloud.google.com/load-balancing/docs/ssl-certificates/google-managed-certs#load-balancer>\n\n[END]: Finalize SSL Certificate diagnostics.\n\n\n"
  },
  {
    "path": "gcpdiag/runbook/lb/snapshots/unhealthy_backends.txt",
    "content": "backend_service_name=web-backend-service,project_id=gcpdiag-lb2-aaaa\n\nlb/unhealthy-backends: Load Balancer Unhealthy Backends Analyzer.\n\n  This runbook helps investigate why backends in a load balancer are unhealthy.\n  It confirms and summarizes the current health status of the backends, aiding\n  in identifying any unhealthy instances.\n\n  Key Investigation Areas:\n\n  - Firewalls:\n      - Verifies if firewall rules are properly configured to allow health check\n      traffic.\n  - Port Configuration:\n      - Checks if health check sends probe requests to the different port than\n      serving port. This may be intentional or a potential configuration error,\n      and the runbook will provide guidance on the implications.\n  - Protocol Configuration:\n      - Checks if health check uses the same protocol as backend service. This\n      may be intentional or a potential configuration error, and the runbook\n      will provide guidance on the implications.\n  - Logging:\n      - Checks if health check logging is enabled to aid in troubleshooting.\n  - Health Check Logs (if enabled):\n      - Analyzes the latest health check logs to identify the specific reasons\n      for backend unhealthiness:\n          - Timeouts: Identifies if the backend is timing out and provides\n          potential causes and remediation steps.\n          - Unhealthy: Indicates that the backend is reachable but doesn't meet\n          the health check's criteria. It provides guidance on the expected\n          health check behavior and suggests configuration checks.\n          - Unknown: Explains the potential reasons for the \"UNKNOWN\" health\n          state and suggests actions like adjusting timeouts or checking for\n          Google Cloud outages.\n  - Past Health Check Success:\n      - Checks if the health check has worked successfully in the past to\n      determine if the issue is recent or ongoing.\n  - VM Performance:\n      - Checks if the instances performance is degraded - disks, memory and cpu\n      utilization are being checked.\n  \n[START]: Analyze unhealthy backends for backend service \"web-backend-service\" in scope \"global\".\n\n   - gcpdiag-lb2-aaaa/web-backend-service                                 [FAIL]\n     [REASON]\n     The backend service web-backend-service in the global scope has unhealthy backends.\n\n     Group https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east1-b/instanceGroups/lb-backend-example has 2/2 unhealthy backends\n\n     The backend service web-backend-service uses the following health check: http-basic-check.\n\n     The health check is using HTTP protocol, and it is set to: \n     - send a prober requests to the / path on port 80 \n     - expect a response with an HTTP 200 (OK) status code\n\n     The health check is configured with the following timing and threshold settings:\n     - **Check Interval:** A health check is performed every 5 seconds.\n     - **Timeout:** The prober will wait up to 5 seconds for a response.\n     - **Healthy Threshold:** It takes 2 consecutive successes for a backend to be considered healthy.\n     - **Unhealthy Threshold:** It takes 2 consecutive failures for a backend to be considered unhealthy.\n\n[GATEWAY]: Verify health check logging enabled for backend service \"web-backend-service\" in scope \"global\".\n\n   - gcpdiag-lb2-aaaa/http-basic-check                                    [OK]\n     [REASON]\n     Health check logging is enabled for health check projects/gcpdiag-lb1-aaaa/global/healthChecks/http-basic-check.\n\n[GATEWAY]: Analyze latest health check log for backend service \"web-backend-service\" in scope \"global\".\n[AUTOMATED STEP]: Analyze TIMEOUT health check logs for backend service \"web-backend-service\" in scope \"global\".\n\n   - gcpdiag-lb2-aaaa/web-backend-service                                 [UNCERTAIN]\n     [REASON]\n     Health check logs for backend service projects/gcpdiag-lb2-aaaa/global/backendServices/web-backend-service show the detailed health state \"TIMEOUT\".\n\n     Responses received from backends: \"HTTP response: , Error: Timeout waiting for connect\"\n\n     The backend might be timing out because:\n\n     1. The application is overloaded and taking too long to respond.\n\n     2. The backend service or health check timeout is too low.\n\n     3. Connection to the endpoint cannot be established - the backend instance has crashed or is otherwise unresponsive.\n\n     The following responses were received from your backends: \"HTTP response: , Error: Timeout waiting for connect\"\n\n     [REMEDIATION]\n\n     1. Make sure that the backend service timeout (current value: 30s) and health check timeout (current value: 5s) are appropriately configured to accommodate the application's expected response time.\n\n     2. Investigate the application's configuration to ensure it is correctly handling health check probe requests. The health check is using HTTP protocol, and it is set to: \n     - send a prober requests to the / path on port 80 \n     - expect a response with an HTTP 200 (OK) status code\n\n     3. Check if firewall rules or iptables configurations are blocking the health check probes from reaching the backend instances, resulting in timeouts.\n\n[AUTOMATED STEP]: Check past health check success for backend service \"web-backend-service\" in scope \"global\".\n\n   - gcpdiag-lb2-aaaa/web-backend-service                                 [UNCERTAIN]\n     [REASON]\n     https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east1-b/instanceGroups/lb-backend-example: Backends transitioned to an unhealthy state at 2024-08-13T09:20:22.666336211Z\n\n\n     [REMEDIATION]\n     Check the logs and monitoring metrics for the instances associated with backend service projects/gcpdiag-lb2-aaaa/global/backendServices/web-backend-service, focusing on recent timeframes to see if there were any errors, crashes, or resource exhaustion issues. Also inspect any application-specific logs for errors or warnings.\n\n[AUTOMATED STEP]: Validate port configuration for backend service \"web-backend-service\" in scope \"global\".\n\n   - gcpdiag-lb2-aaaa/web-backend-service                                 [UNCERTAIN]\n     [REASON]\n     The load balancer is conducting health checks on port 88 for the backend service projects/gcpdiag-lb2-aaaa/global/backendServices/web-backend-service. However, this health check port differs from the port used by the load balancer for serving traffic on some backend instance groups. The backend service is configured to use the \"http\" port, which is then translated to a specific port number based on the \"http\" port mapping within each backend instance group.\n\n     Affected backends:\n\n     projects/gcpdiag-lb2-aaaa/zones/us-east1-b/instanceGroups/lb-backend-example - port name \"http\" translates to port 80\n\n     This configuration can be problematic unless the load balancer has been configured to use a different port for health checks purposefully.\n\n     [REMEDIATION]\n     1.  **Verify Intent:** Confirm if the health check port `88` is *meant* to be different from the serving port defined by \"http\" on the backends.\n\n     2.  **Test Port on Backend VMs:** Check if port `88` is listening on an instance from the affected groups. Run this command from your local machine/Cloud Shell:\n\n         ```bash\n         gcloud compute ssh [INSTANCE_NAME] --zone [ZONE] --project gcpdiag-lb2-aaaa --command=\"sudo ss -tlnp | grep ':88'\"\n         ```\n         *   Output showing `LISTEN` indicates the port is open and your application is likely listening.\n         *   No output suggests the port is not in a listening state on that VM.\n\n     3.  **Adjust Configuration:**\n         *   **If Mismatch is Unintentional:** Align the load balancer's health check port in the backend service `projects/gcpdiag-lb2-aaaa/global/backendServices/web-backend-service` to match the actual port number used by \"http\" in the instance groups.\n         *   **If Mismatch is Intentional:** Ensure your application on the VMs is correctly configured to listen on port `88`.\n         *   **If Port Not Listening:** Troubleshoot your application on the VM to ensure it's running and bound to port `88`. Check the VM's local firewall as well.\n\n     If the health check port `88` is meant to be different from the serving port (e.g., a dedicated management/health endpoint), confirm that your application is correctly configured to listen on the health check port.\n\n[AUTOMATED STEP]: Validate protocol configuration for backend service \"web-backend-service\" in scope \"global\".\n\n   - gcpdiag-lb2-aaaa/web-backend-service                                 [OK]\n     [REASON]\n     The load balancer is performing health checks using the same protocol (HTTP) used for serving traffic on backend service projects/gcpdiag-lb2-aaaa/global/backendServices/web-backend-service. This is the standard configuration.\n\n[AUTOMATED STEP]: Verify firewall rules allow health checks for backend service \"web-backend-service\" in scope \"global\".\n\n   - gcpdiag-lb2-aaaa/web-backend-service                                 [FAIL]\n     [REASON]\n     Health check firewall is not configured\n     The health checks are currently failing due to a misconfigured firewall. This prevents Google Cloud probers from connecting to the backends, causing the load balancer to consider them unhealthy.\n\n     [REMEDIATION]\n     Update the firewall rules to allow inbound traffic from the Google Cloud health check IP ranges (found at <https://cloud.google.com/load-balancing/docs/health-check-concepts#ip-ranges>) to the backends.\n\n[COMPOSITE STEP]: Check VMs performance for unhealthy backends in backend service \"web-backend-service\" in scope \"global\".\n[AUTOMATED STEP]: Verify VM memory utilization is within optimal levels.\n\n   - gcpdiag-lb2-aaaa/vm-pn3l                                             [FAIL]\n     [REASON]\n     Memory utilization on this VM has reached levels that may compromise its VM application performance.\n\n     [REMEDIATION]\n     Elevated memory usage can result in slow, unresponsive, or terminated applications.\n     Enhance the VM's memory capacity by changing to a machine type with more memory.\n\n     Consult the following documentation for guidance:\n\n     - Changing machine type:\n       <https://cloud.google.com/compute/docs/instances/changing-machine-type-of-stopped-instance#gcloud>\n\n     Additionally, analyze Compute Engine observability metrics to pinpoint high-usage processes:\n     <https://cloud.google.com/compute/docs/instances/observe-monitor-vms#memory_utilization>\n\n     If SSH is unavailable, connect via the serial console to mitigate the issue:\n     <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-using-serial-console>\n\n[AUTOMATED STEP]: Verify memory related errors in VM serial logs.\n\n   - gcpdiag-lb2-aaaa/vm-pn3l                                             [UNCERTAIN]\n     [REASON]\n     Unable to investigate the high memory utilization error logs, likely due to the absence of logs.\n     However, this does not eliminate the possibility of high memory usage.\n\n     Manual verification of memory utilization on the Guest OS is recommended as a potential cause.\n\n     [REMEDIATION]\n\n     1. Manually investigate memory usage by accessing the Guest OS:\n        - Identify processes with consistently high memory consumption using `top` (press \"M\") or `ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head -n 5`.\n        - Focus on processes with recent spikes or consistently high memory usage.\n        - If SSH access is unavailable, troubleshoot via the serial console:\n          <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-using-serial-console>\n\n     2. Review recent application or configuration changes:\n        - Investigate if recent deployments, updates, or configuration changes correlate with increased memory usage.\n\n     3. Resolve identified bottlenecks:\n        - For applications causing excessive memory usage, optimize their configuration or update them. Explore alternatives if optimization is insufficient.\n        - Evaluate scaling up resources if high memory usage results from legitimate application demands.\n\n     4. Increase instance memory if necessary:\n        - Stop the VM and change its machine type:\n          <https://cloud.google.com/compute/docs/instances/changing-machine-type-of-stopped-instance#gcloud>\n        - Consult the machine type documentation to select an appropriate configuration:\n          <https://cloud.google.com/compute/docs/machine-types>\n\n     **Note:** Non-Google provided application-specific issues may fall outside the support scope. Collaborate with relevant application teams for further investigation. Refer to the Google Cloud Platform support policy for details, including out-of-scope items:\n\n     - Support and maintenance policy: <https://cloud.google.com/compute/docs/images/support-maintenance-policy#support-scope>\n     - Out-of-scope items: <https://cloud.google.com/compute/docs/images/support-maintenance-policy#out-of-scope_for_support>\n\n[AUTOMATED STEP]: Verify VM's boot disk space utilization is within optimal levels.\n\n   - gcpdiag-lb2-aaaa/vm-pn3l                                             [FAIL]\n     [REASON]\n     Disk utilization on this VM's boot disk is critically high,\n     potentially affecting application performance.\n\n     [REMEDIATION]\n     To mitigate high disk usage, consider expanding the VM's boot disk capacity.\n     This action can help avoid performance issues and ensure smoother SSH connections.\n\n     Consult the following guide to increase disk size:\n     <https://cloud.google.com/compute/docs/disks/resize-persistent-disk#increase_the_size_of_a_disk>\n\n[AUTOMATED STEP]: Verify VM CPU utilization is within optimal levels.\n\n   - gcpdiag-lb2-aaaa/vm-pn3l                                             [FAIL]\n     [REASON]\n     CPU utilization on this VM has surpassed recommended operational levels,\n     which may affect its performance and SSH connectivity.\n\n     [REMEDIATION]\n     Excessive CPU usage can lead to performance bottlenecks. Resizing the VM to a machine type with higher CPU capabilities may resolve the issue.\n\n     Consult the following documentation for guidance:\n\n     - Stopping a VM: <https://cloud.google.com/compute/docs/instances/stop-start-instance>\n     - Resizing a VM: <https://cloud.google.com/compute/docs/instances/changing-machine-type-of-stopped-instance#gcloud>\n\n     Additionally, analyze Compute Engine observability metrics to pinpoint high-usage processes:\n\n     - Accessing VM observability metrics:\n       <https://cloud.google.com/compute/docs/instances/observe-monitor-vms#access_vm_observability_metrics>\n     - Analyzing process utilization:\n       <https://cloud.google.com/compute/docs/instances/observe-monitor-vms#process_utilization>\n\n     If SSH is unavailable, connect via the serial console to stop offending processes:\n     <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-using-serial-console>\n\n[END]: Finalize unhealthy backends diagnostics.\n\n\nbackend_service_name=backend-service-2,project_id=gcpdiag-lb2-aaaa,region=europe-west4\n\nlb/unhealthy-backends: Load Balancer Unhealthy Backends Analyzer.\n\n  This runbook helps investigate why backends in a load balancer are unhealthy.\n  It confirms and summarizes the current health status of the backends, aiding\n  in identifying any unhealthy instances.\n\n  Key Investigation Areas:\n\n  - Firewalls:\n      - Verifies if firewall rules are properly configured to allow health check\n      traffic.\n  - Port Configuration:\n      - Checks if health check sends probe requests to the different port than\n      serving port. This may be intentional or a potential configuration error,\n      and the runbook will provide guidance on the implications.\n  - Protocol Configuration:\n      - Checks if health check uses the same protocol as backend service. This\n      may be intentional or a potential configuration error, and the runbook\n      will provide guidance on the implications.\n  - Logging:\n      - Checks if health check logging is enabled to aid in troubleshooting.\n  - Health Check Logs (if enabled):\n      - Analyzes the latest health check logs to identify the specific reasons\n      for backend unhealthiness:\n          - Timeouts: Identifies if the backend is timing out and provides\n          potential causes and remediation steps.\n          - Unhealthy: Indicates that the backend is reachable but doesn't meet\n          the health check's criteria. It provides guidance on the expected\n          health check behavior and suggests configuration checks.\n          - Unknown: Explains the potential reasons for the \"UNKNOWN\" health\n          state and suggests actions like adjusting timeouts or checking for\n          Google Cloud outages.\n  - Past Health Check Success:\n      - Checks if the health check has worked successfully in the past to\n      determine if the issue is recent or ongoing.\n  - VM Performance:\n      - Checks if the instances performance is degraded - disks, memory and cpu\n      utilization are being checked.\n  \n[START]: Analyze unhealthy backends for backend service \"backend-service-2\" in scope \"europe-west4\".\n\n   - gcpdiag-lb2-aaaa/backend-service-2                                   [FAIL]\n     [REASON]\n     The backend service backend-service-2 in the europe-west4 scope has unhealthy backends.\n\n     Group https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-b/networkEndpointGroups/neg1 has 1/1 unhealthy backends\n\n     The backend service backend-service-2 uses the following health check: tcp-basic-check-2.\n\n     The health check is using TCP protocol, and it is set to: \n     - send a prober requests on port 80\n     - expect a successful TCP handshake\n\n     The health check is configured with the following timing and threshold settings:\n     - **Check Interval:** A health check is performed every 5 seconds.\n     - **Timeout:** The prober will wait up to 5 seconds for a response.\n     - **Healthy Threshold:** It takes 2 consecutive successes for a backend to be considered healthy.\n     - **Unhealthy Threshold:** It takes 2 consecutive failures for a backend to be considered unhealthy.\n\n[GATEWAY]: Verify health check logging enabled for backend service \"backend-service-2\" in scope \"europe-west4\".\n\n   - gcpdiag-lb2-aaaa/tcp-basic-check-2                                   [OK]\n     [REASON]\n     Health check logging is enabled for health check projects/gcpdiag-lb2-aaaa/regions/europe-west4/healthChecks/tcp-basic-check-2.\n\n[GATEWAY]: Analyze latest health check log for backend service \"backend-service-2\" in scope \"europe-west4\".\n[AUTOMATED STEP]: Analyze TIMEOUT health check logs for backend service \"backend-service-2\" in scope \"europe-west4\".\n\n   - gcpdiag-lb2-aaaa/backend-service-2                                   [UNCERTAIN]\n     [REASON]\n     Health check logs for backend service projects/gcpdiag-lb2-aaaa/regions/europe-west4/backendServices/backend-service-2 show the detailed health state \"TIMEOUT\".\n\n     Responses received from backends: \"HTTP response: , Error: Timeout waiting for connect\"\n\n     The backend might be timing out because:\n\n     1. The application is overloaded and taking too long to respond.\n\n     2. The backend service or health check timeout is too low.\n\n     3. Connection to the endpoint cannot be established - the backend instance has crashed or is otherwise unresponsive.\n\n     The following responses were received from your backends: \"HTTP response: , Error: Timeout waiting for connect\"\n\n     [REMEDIATION]\n\n     1. Make sure that the backend service timeout (current value: 30s) and health check timeout (current value: 5s) are appropriately configured to accommodate the application's expected response time.\n\n     2. Investigate the application's configuration to ensure it is correctly handling health check probe requests. The health check is using TCP protocol, and it is set to: \n     - send a prober requests on port 80\n     - expect a successful TCP handshake\n\n     3. Check if firewall rules or iptables configurations are blocking the health check probes from reaching the backend instances, resulting in timeouts.\n\n[AUTOMATED STEP]: Check past health check success for backend service \"backend-service-2\" in scope \"europe-west4\".\n\n   - gcpdiag-lb2-aaaa/backend-service-2                                   [UNCERTAIN]\n     [REASON]\n     https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-b/networkEndpointGroups/neg1: Backends transitioned to an unhealthy state at 2024-08-13T09:20:22.666336211Z\n\n\n     [REMEDIATION]\n     Check the logs and monitoring metrics for the instances associated with backend service projects/gcpdiag-lb2-aaaa/regions/europe-west4/backendServices/backend-service-2, focusing on recent timeframes to see if there were any errors, crashes, or resource exhaustion issues. Also inspect any application-specific logs for errors or warnings.\n\n[AUTOMATED STEP]: Validate port configuration for backend service \"backend-service-2\" in scope \"europe-west4\".\n\n   - gcpdiag-lb2-aaaa/backend-service-2                                   [UNCERTAIN]\n     [REASON]\n     Backend service \"backend-service-2\" is a external Passthrough Load Balancer. These load balancers forward traffic to backends without changing the destination port, so there isn't a single \"serving port\" on the load balancer itself. The health check probes are sent to the port defined directly in the HealthCheck resource. The associated health check \"tcp-basic-check-2\" is configured to use port 80.\n\n     [REMEDIATION]\n     Please ensure that the backend instances (VMs or endpoints) are configured to accept and respond to health check probes specifically on port 80. The application running on the backends must be actively listening on this port (80) for the health checks to succeed, regardless of the ports used for actual application traffic.\n\n[AUTOMATED STEP]: Validate protocol configuration for backend service \"backend-service-2\" in scope \"europe-west4\".\n\n   - gcpdiag-lb2-aaaa/backend-service-2                                   [OK]\n     [REASON]\n     The load balancer is performing health checks using the same protocol (TCP) used for serving traffic on backend service projects/gcpdiag-lb2-aaaa/regions/europe-west4/backendServices/backend-service-2. This is the standard configuration.\n\n[AUTOMATED STEP]: Verify firewall rules allow health checks for backend service \"backend-service-2\" in scope \"europe-west4\".\n\n   - gcpdiag-lb2-aaaa/backend-service-2                                   [OK]\n     [REASON]\n     Firewall rules are correctly configured and are not blocking health check probes for backend service projects/gcpdiag-lb2-aaaa/regions/europe-west4/backendServices/backend-service-2.\n\n[COMPOSITE STEP]: Check VMs performance for unhealthy backends in backend service \"backend-service-2\" in scope \"europe-west4\".\n[AUTOMATED STEP]: Verify VM memory utilization is within optimal levels.\n\n   - gcpdiag-lb2-aaaa/neg-vm                                              [FAIL]\n     [REASON]\n     Memory utilization on this VM has reached levels that may compromise its VM application performance.\n\n     [REMEDIATION]\n     Elevated memory usage can result in slow, unresponsive, or terminated applications.\n     Enhance the VM's memory capacity by changing to a machine type with more memory.\n\n     Consult the following documentation for guidance:\n\n     - Changing machine type:\n       <https://cloud.google.com/compute/docs/instances/changing-machine-type-of-stopped-instance#gcloud>\n\n     Additionally, analyze Compute Engine observability metrics to pinpoint high-usage processes:\n     <https://cloud.google.com/compute/docs/instances/observe-monitor-vms#memory_utilization>\n\n     If SSH is unavailable, connect via the serial console to mitigate the issue:\n     <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-using-serial-console>\n\n[AUTOMATED STEP]: Verify memory related errors in VM serial logs.\n\n   - gcpdiag-lb2-aaaa/neg-vm                                              [UNCERTAIN]\n     [REASON]\n     Unable to investigate the high memory utilization error logs, likely due to the absence of logs.\n     However, this does not eliminate the possibility of high memory usage.\n\n     Manual verification of memory utilization on the Guest OS is recommended as a potential cause.\n\n     [REMEDIATION]\n\n     1. Manually investigate memory usage by accessing the Guest OS:\n        - Identify processes with consistently high memory consumption using `top` (press \"M\") or `ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head -n 5`.\n        - Focus on processes with recent spikes or consistently high memory usage.\n        - If SSH access is unavailable, troubleshoot via the serial console:\n          <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-using-serial-console>\n\n     2. Review recent application or configuration changes:\n        - Investigate if recent deployments, updates, or configuration changes correlate with increased memory usage.\n\n     3. Resolve identified bottlenecks:\n        - For applications causing excessive memory usage, optimize their configuration or update them. Explore alternatives if optimization is insufficient.\n        - Evaluate scaling up resources if high memory usage results from legitimate application demands.\n\n     4. Increase instance memory if necessary:\n        - Stop the VM and change its machine type:\n          <https://cloud.google.com/compute/docs/instances/changing-machine-type-of-stopped-instance#gcloud>\n        - Consult the machine type documentation to select an appropriate configuration:\n          <https://cloud.google.com/compute/docs/machine-types>\n\n     **Note:** Non-Google provided application-specific issues may fall outside the support scope. Collaborate with relevant application teams for further investigation. Refer to the Google Cloud Platform support policy for details, including out-of-scope items:\n\n     - Support and maintenance policy: <https://cloud.google.com/compute/docs/images/support-maintenance-policy#support-scope>\n     - Out-of-scope items: <https://cloud.google.com/compute/docs/images/support-maintenance-policy#out-of-scope_for_support>\n\n[AUTOMATED STEP]: Verify VM's boot disk space utilization is within optimal levels.\n\n   - gcpdiag-lb2-aaaa/neg-vm                                              [FAIL]\n     [REASON]\n     Disk utilization on this VM's boot disk is critically high,\n     potentially affecting application performance.\n\n     [REMEDIATION]\n     To mitigate high disk usage, consider expanding the VM's boot disk capacity.\n     This action can help avoid performance issues and ensure smoother SSH connections.\n\n     Consult the following guide to increase disk size:\n     <https://cloud.google.com/compute/docs/disks/resize-persistent-disk#increase_the_size_of_a_disk>\n\n[AUTOMATED STEP]: Verify VM CPU utilization is within optimal levels.\n\n   - gcpdiag-lb2-aaaa/neg-vm                                              [FAIL]\n     [REASON]\n     CPU utilization on this VM has surpassed recommended operational levels,\n     which may affect its performance and SSH connectivity.\n\n     [REMEDIATION]\n     Excessive CPU usage can lead to performance bottlenecks. Resizing the VM to a machine type with higher CPU capabilities may resolve the issue.\n\n     Consult the following documentation for guidance:\n\n     - Stopping a VM: <https://cloud.google.com/compute/docs/instances/stop-start-instance>\n     - Resizing a VM: <https://cloud.google.com/compute/docs/instances/changing-machine-type-of-stopped-instance#gcloud>\n\n     Additionally, analyze Compute Engine observability metrics to pinpoint high-usage processes:\n\n     - Accessing VM observability metrics:\n       <https://cloud.google.com/compute/docs/instances/observe-monitor-vms#access_vm_observability_metrics>\n     - Analyzing process utilization:\n       <https://cloud.google.com/compute/docs/instances/observe-monitor-vms#process_utilization>\n\n     If SSH is unavailable, connect via the serial console to stop offending processes:\n     <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-using-serial-console>\n\n[END]: Finalize unhealthy backends diagnostics.\n\n\n"
  },
  {
    "path": "gcpdiag/runbook/lb/ssl_certificates.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Module containing steps to analyze SSL certificate issues.\"\"\"\n\nfrom datetime import datetime, timedelta\nfrom typing import List, Union\n\nimport googleapiclient.errors\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import config, runbook\nfrom gcpdiag.queries import apis, crm, dns, lb, logs\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.lb import flags\n\nTargetProxy = Union[lb.TargetHttpsProxy, lb.TargetSslProxy]\n\n\nclass SslCertificates(runbook.DiagnosticTree):\n  \"\"\"This runbook diagnoses and troubleshoots issues with SSL certificates.\n\n  The supported certificates are Google-managed classic certificates attached to\n  load balancers.\n\n  It helps identify and resolve common problems that prevent certificates from\n  provisioning or functioning correctly.\n\n  Key Investigation Area:\n\n  - Certificate Status:\n    - Checks the certificate's provisioning status and identifies any failed\n    domains.\n  - Domain Validation:\n    - Verifies DNS configuration for each domain, ensuring proper A/AAAA records\n    and the absence of conflicting records.\n  - Load Balancer Configuration:\n    - Confirms the certificate is correctly attached to a target proxy and\n    associated with a forwarding rule using port 443.\n  - Conflicting resources:\n    - Ensures no certificate map is attached to the target proxy, which can\n    interfere with Google-managed certificates.\n  - Provisioning Time:\n    - Checks Cloud Logging to determine when the certificate was attached and\n    allows sufficient time for propagation.\n  \"\"\"\n\n  parameters = {\n      flags.PROJECT_ID: {\n          'type': str,\n          'help': 'The Project ID of the resource under investigation',\n          'required': True,\n      },\n      flags.CERTIFICATE_NAME: {\n          'type': str,\n          'help': 'The name of the SSLcertificate that you want to investigate',\n          'required': True,\n      },\n  }\n\n  def build_tree(self):\n    \"\"\"Construct the diagnostic tree with appropriate steps.\"\"\"\n    project_id = op.get(flags.PROJECT_ID)\n    certificate_name = op.get(flags.CERTIFICATE_NAME)\n    # Instantiate your step classes\n    start = SslCertificatesStart()\n    start.project_id = project_id\n    start.certificate_name = certificate_name\n    # add them to your tree\n    self.add_start(start)\n    # you can create custom steps to define unique logic\n    cert_status = AnalyzeCertificateStatus()\n    cert_status.project_id = project_id\n    cert_status.certificate_name = certificate_name\n    # Describe the step relationships\n    self.add_step(parent=start, child=cert_status)\n\n    analyze_domain_statuses = AnalyzeDomainStatuses()\n    analyze_domain_statuses.project_id = project_id\n    analyze_domain_statuses.certificate_name = certificate_name\n\n    self.add_step(parent=cert_status, child=analyze_domain_statuses)\n    # Ending your runbook\n    self.add_end(SslCertificatesEnd())\n\n\nclass SslCertificatesStart(runbook.StartStep):\n  \"\"\"Verify the existence type and status of the SSL certificate.\"\"\"\n\n  template = 'ssl_certificates::confirmation'\n  project_id: str\n  certificate_name: str\n\n  @property\n  def name(self):\n    return (f'Verify the existence and status of the SSL certificate'\n            f' \"{self.certificate_name}\".')\n\n  def execute(self):\n    \"\"\"Verifies the existence type and status of the SSL certificate.\"\"\"\n    proj = crm.get_project(self.project_id)\n\n    if not apis.is_enabled(self.project_id, 'compute'):\n      op.add_skipped(proj, reason='Compute API is not enabled')\n      return  # Early exit if Compute API is disabled\n\n    try:\n      op.info(f'name: {self.certificate_name}')\n      certificate = lb.get_ssl_certificate(self.project_id,\n                                           self.certificate_name)\n    except googleapiclient.errors.HttpError:\n      op.add_skipped(\n          proj,\n          reason=op.prep_msg(\n              op.SKIPPED_REASON,\n              name=self.certificate_name,\n              project_id=self.project_id,\n          ),\n      )\n      return  # Early exit if certificate doesn't exist\n    if certificate.type == 'SELF_MANAGED':\n      op.add_skipped(\n          proj,\n          reason=op.prep_msg(op.SKIPPED_REASON_ALT1,\n                             name=self.certificate_name),\n      )\n      return  # Early exit if certificate is not Google-managed\n\n    if certificate.status == 'ACTIVE':\n      op.add_ok(\n          proj,\n          reason=op.prep_msg(op.SUCCESS_REASON, name=self.certificate_name),\n      )\n    else:\n      op.add_failed(proj,\n                    reason=op.prep_msg(op.FAILURE_REASON,\n                                       name=self.certificate_name),\n                    remediation='')\n\n\nclass AnalyzeCertificateStatus(runbook.Gateway):\n  \"\"\"Analyze the status of the Google-managed certificate.\"\"\"\n\n  template = 'ssl_certificates::cert_status'\n  project_id: str\n  certificate_name: str\n\n  @property\n  def name(self):\n    return (f'Analyze the status of the Google-managed SSL certificate'\n            f' \"{self.certificate_name}\".')\n\n  def execute(self):\n    \"\"\"Checks the status of the Google-managed certificate.\"\"\"\n    certificate = lb.get_ssl_certificate(self.project_id, self.certificate_name)\n    op.add_metadata('certificateStatus', certificate.status)\n\n    if certificate.status == 'PROVISIONING_FAILED_PERMANENTLY':\n      op.add_failed(\n          certificate,\n          reason=op.prep_msg(op.FAILURE_REASON, name=self.certificate_name),\n          remediation=op.prep_msg(op.FAILURE_REMEDIATION),\n      )\n      return\n    elif certificate.status in ('PROVISIONING_FAILED', 'PROVISIONING'):\n      op.add_uncertain(\n          certificate,\n          reason=op.prep_msg(\n              op.UNCERTAIN_REASON,\n              name=self.certificate_name,\n              status=certificate.status,\n              context=('Further investigation into the status of each domain is'\n                       ' necessary.'),\n          ),\n      )\n      return\n    elif certificate.status == 'RENEWAL_FAILED':\n      op.add_uncertain(\n          certificate,\n          reason=op.prep_msg(\n              op.UNCERTAIN_REASON,\n              name=self.certificate_name,\n              status=certificate.status,\n              context=(\n                  'This typically occurs when the load balancer or DNS'\n                  ' configuration has issues, preventing the automatic renewal'\n                  ' of the Google-managed certificate.'),\n          ),\n      )\n      return\n\n    op.add_ok(\n        certificate,\n        reason=op.prep_msg(\n            op.SUCCESS_REASON,\n            name=self.certificate_name,\n            status=certificate.status,\n        ),\n    )\n\n\nclass AnalyzeDomainStatuses(runbook.Gateway):\n  \"\"\"Check the status of each individual domain associated with the SSL certificate.\"\"\"\n\n  template = 'ssl_certificates::domain_status'\n  project_id: str\n  certificate_name: str\n\n  @property\n  def name(self):\n    return (\n        f'Check the status of each individual domain associated with the SSL'\n        f' certificate \"{self.certificate_name}\".')\n\n  def execute(self):\n    \"\"\"Checks the status of each individual domain associated with the SSL certificate.\"\"\"\n    certificate = lb.get_ssl_certificate(self.project_id, self.certificate_name)\n\n    failed_not_visible_domains = []\n    failed_caa_domains = []\n    failed_rate_limited_domains = []\n    provisioning_domains = []\n    for domain, status in certificate.domain_status.items():\n      if status == 'FAILED_NOT_VISIBLE':\n        failed_not_visible_domains.append(domain)\n      if status in ('FAILED_CAA_CHECKING', 'FAILED_CAA_FORBIDDEN'):\n        failed_caa_domains.append(domain)\n      if status == 'FAILED_RATE_LIMITED':\n        failed_rate_limited_domains.append(domain)\n      if status == 'PROVISIONING':\n        provisioning_domains.append(domain)\n\n    if failed_not_visible_domains:\n      step = AnalyzeFailedNotVisibleDomains()\n      step.project_id = self.project_id\n      step.domains = failed_not_visible_domains\n      step.certificate_name = self.certificate_name\n      self.add_child(step)\n    if failed_caa_domains:\n      step = AnalyzeFailedCaaCheck()\n      step.project_id = self.project_id\n      step.domains = failed_caa_domains\n      step.certificate_name = self.certificate_name\n      self.add_child(step)\n    if failed_rate_limited_domains:\n      step = AnalyzeRateLimitedDomains()\n      step.project_id = self.project_id\n      step.domains = failed_rate_limited_domains\n      step.certificate_name = self.certificate_name\n      self.add_child(step)\n    if provisioning_domains:\n      step = AnalyzeProvisioningDomains()\n      step.project_id = self.project_id\n      step.domains = provisioning_domains\n      step.certificate_name = self.certificate_name\n      self.add_child(step)\n    if failed_not_visible_domains or provisioning_domains:\n      step = CheckCertificateAttachment()\n      step.project_id = self.project_id\n      step.certificate_name = self.certificate_name\n      self.add_child(step)\n    if (not failed_not_visible_domains and not failed_caa_domains and\n        not failed_rate_limited_domains and not provisioning_domains):\n      op.add_ok(\n          certificate,\n          reason=op.prep_msg(op.SUCCESS_REASON, name=self.certificate_name),\n      )\n\n\nclass AnalyzeFailedNotVisibleDomains(runbook.Step):\n  \"\"\"Analyze domains in \"FAILED_NOT_VISIBLE\" state.\"\"\"\n\n  template = 'ssl_certificates::failed_not_visible_domains'\n  project_id: str\n  domains: List[str]\n  certificate_name: str\n\n  @property\n  def name(self):\n    return (f'Analyze domains in FAILED_NOT_VISIBLE'\n            f' state for certificate \"{self.certificate_name}\".')\n\n  def execute(self):\n    \"\"\"Analyzes domains in \"FAILED_NOT_VISIBLE\" state.\"\"\"\n    certificate = lb.get_ssl_certificate(self.project_id, self.certificate_name)\n    op.add_failed(\n        certificate,\n        reason=op.prep_msg(\n            op.FAILURE_REASON,\n            domains=', '.join(self.domains),\n            name=self.certificate_name,\n        ),\n        remediation='',\n    )\n    op.add_metadata('failedNotVisibleDomains', self.domains)\n\n\nclass AnalyzeProvisioningDomains(runbook.Step):\n  \"\"\"Analyze domains in \"PROVISIONING\" state.\"\"\"\n\n  template = 'ssl_certificates::provisioning_domains'\n  project_id: str\n  domains: List[str]\n  certificate_name: str\n\n  @property\n  def name(self):\n    return (f'Analyze domains in PROVISIONING state'\n            f' for certificate \"{self.certificate_name}\".')\n\n  def execute(self):\n    \"\"\"Analyzes domains in \"PROVISIONING\" state.\"\"\"\n    certificate = lb.get_ssl_certificate(self.project_id, self.certificate_name)\n    op.add_uncertain(\n        certificate,\n        reason=op.prep_msg(\n            op.UNCERTAIN_REASON,\n            domains=', '.join(self.domains),\n            name=self.certificate_name,\n        ),\n        remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION),\n    )\n    op.add_metadata('provisioningDomains', self.domains)\n\n\nclass AnalyzeRateLimitedDomains(runbook.Step):\n  \"\"\"Analyze domains in \"FAILED_RATE_LIMITED\" state.\"\"\"\n\n  template = 'ssl_certificates::failed_rate_limited_domains'\n  project_id: str\n  domains: List[str]\n  certificate_name: str\n\n  @property\n  def name(self):\n    return (f'Analyze domains in'\n            f' FAILED_RATE_LIMITED state for certificate'\n            f' \"{self.certificate_name}\".')\n\n  def execute(self):\n    \"\"\"Analyzes domains in \"FAILED_RATE_LIMITED\" state.\"\"\"\n    certificate = lb.get_ssl_certificate(self.project_id, self.certificate_name)\n    op.add_failed(\n        certificate,\n        reason=op.prep_msg(op.FAILURE_REASON,\n                           domains=', '.join(self.domains),\n                           name=self.certificate_name),\n        remediation=op.prep_msg(op.FAILURE_REMEDIATION),\n    )\n    op.add_metadata('failedRateLimitedDomains', self.domains)\n\n\nclass AnalyzeFailedCaaCheck(runbook.Step):\n  \"\"\"Analyze domains in \"FAILED_CAA_CHECKING\" or \"FAILED_CAA_FORBIDDEN\" state.\"\"\"\n\n  template = 'ssl_certificates::failed_caa_check_domains'\n  project_id: str\n  domains: List[str]\n  certificate_name: str\n\n  @property\n  def name(self):\n    return (f'Analyze domains in'\n            f' FAILED_CAA_CHECKING or FAILED_CAA_FORBIDDEN state for'\n            f' certificate \"{self.certificate_name}\".')\n\n  def execute(self):\n    \"\"\"Analyzes domains in \"FAILED_CAA_CHECKING\" or \"FAILED_CAA_FORBIDDEN\" state.\"\"\"\n    certificate = lb.get_ssl_certificate(self.project_id, self.certificate_name)\n    op.add_failed(\n        certificate,\n        reason=op.prep_msg(op.FAILURE_REASON,\n                           domains=', '.join(self.domains),\n                           name=self.certificate_name),\n        remediation=op.prep_msg(op.FAILURE_REMEDIATION),\n    )\n    op.add_metadata('failedCaaCheckDomains', self.domains)\n\n\nclass CheckCertificateAttachment(runbook.Gateway):\n  \"\"\"Check if the SSL certificate is attached to a target proxy.\n\n  This target proxy needs to be in use by a forwarding rule for the provisioning\n  to succeed.\n  \"\"\"\n\n  template = 'ssl_certificates::check_certificate_attachment'\n  project_id: str\n  certificate_name: str\n\n  @property\n  def name(self):\n    return (f'Verify the SSL certificate \"{self.certificate_name}\" is attached'\n            f' to a target proxy.')\n\n  def execute(self):\n    \"\"\"Checks if the SSL certificate is attached to a target proxy.\"\"\"\n    certificate = lb.get_ssl_certificate(self.project_id, self.certificate_name)\n\n    try:\n      target_https_proxies = lb.get_target_https_proxies(self.project_id)\n      target_ssl_proxies = lb.get_target_ssl_proxies(self.project_id)\n    except googleapiclient.errors.HttpError as e:\n      op.add_skipped(\n          certificate,\n          reason=f'Target proxies could not be fetched: {e}',\n      )\n      return\n\n    target_proxies_with_certificate = []\n    for target_proxy in target_https_proxies + target_ssl_proxies:\n      if certificate.self_link in target_proxy.ssl_certificates:\n        target_proxies_with_certificate.append(target_proxy)\n\n    if not target_proxies_with_certificate:\n      op.add_failed(\n          certificate,\n          reason=op.prep_msg(op.FAILURE_REASON, name=self.certificate_name),\n          remediation=op.prep_msg(op.FAILURE_REMEDIATION),\n      )\n      return\n\n    try:\n      forwarding_rules = lb.get_forwarding_rules(self.project_id)\n    except ValueError as e:\n      op.add_skipped(\n          certificate,\n          reason=f'Target proxies could not be fetched: {e}',\n      )\n      return\n\n    forwarding_rules_by_target_proxy = {}\n    for fr in forwarding_rules:\n      forwarding_rules_by_target_proxy.setdefault(fr.target, []).append(fr)\n\n    # Filter out target proxies that are not in use by any forwarding rules\n    used_target_proxies_with_certificate = [\n        tp for tp in target_proxies_with_certificate\n        if forwarding_rules_by_target_proxy.get(tp.full_path)\n    ]\n\n    if not used_target_proxies_with_certificate:\n      op.add_failed(\n          certificate,\n          reason=\n          ('The SSL certificate is attached to target proxies:'\n           f\" {', '.join([tp.full_path for tp in target_proxies_with_certificate])} that\"\n           ' are not in use by any forwarding rules.'),\n          remediation='Please attach the target proxies to forwarding rules',\n      )\n      return\n\n    # Gather forwarding rules that use target proxies with the given certificate\n    forwarding_rules_with_certificate = []\n    for tp in used_target_proxies_with_certificate:\n      rules = forwarding_rules_by_target_proxy.get(tp.full_path)\n      if rules:\n        forwarding_rules_with_certificate.extend(rules)\n\n    op.add_ok(\n        certificate,\n        reason=op.prep_msg(\n            op.SUCCESS_REASON,\n            name=self.certificate_name,\n            target_proxies=', '.join(\n                [tp.full_path for tp in used_target_proxies_with_certificate]),\n        ),\n    )\n\n    for domain in certificate.domain_status.keys():\n      if certificate.domain_status[domain] != 'ACTIVE':\n        verify_dns_records = VerifyDnsRecords()\n        verify_dns_records.project_id = self.project_id\n        verify_dns_records.domain = domain\n        verify_dns_records.certificate_name = self.certificate_name\n        verify_dns_records.forwarding_rules_with_certificate = (\n            forwarding_rules_with_certificate)\n        self.add_child(verify_dns_records)\n\n    verify_forwarding_rules_port = VerifyForwardingRulesPort()\n    verify_forwarding_rules_port.project_id = self.project_id\n    verify_forwarding_rules_port.certificate_name = self.certificate_name\n    verify_forwarding_rules_port.forwarding_rules_with_certificate = (\n        forwarding_rules_with_certificate)\n    self.add_child(verify_forwarding_rules_port)\n\n    verify_no_certificate_map_conflict = VerifyNoCertificateMapConflict()\n    verify_no_certificate_map_conflict.project_id = self.project_id\n    verify_no_certificate_map_conflict.certificate_name = self.certificate_name\n    verify_no_certificate_map_conflict.target_proxies_with_certificate = (\n        target_proxies_with_certificate)\n    self.add_child(verify_no_certificate_map_conflict)\n\n    check_provisioning_time = CheckProvisioningTime()\n    check_provisioning_time.project_id = self.project_id\n    check_provisioning_time.certificate_name = self.certificate_name\n    check_provisioning_time.target_proxies_with_certificate = (\n        target_proxies_with_certificate)\n    check_provisioning_time.forwarding_rules_with_certificate = (\n        forwarding_rules_with_certificate)\n    self.add_child(check_provisioning_time)\n\n\nclass VerifyDnsRecords(runbook.Gateway):\n  \"\"\"Check the DNS records for specific domain associated with the SSL certificate.\"\"\"\n\n  template = 'ssl_certificates::verify_dns_records'\n  project_id: str\n  forwarding_rules_with_certificate: List[lb.ForwardingRules]\n  domain: str\n  certificate_name: str\n\n  @property\n  def name(self):\n    return (\n        f'Verify the DNS records for domain \"{self.domain}\" associated with the'\n        f' SSL certificate \"{self.certificate_name}\".')\n\n  def execute(self):\n    certificate = lb.get_ssl_certificate(self.project_id, self.certificate_name)\n    ip_addresses = dns.find_dns_records(self.domain)\n\n    op.add_metadata('domain', self.domain)\n    op.add_metadata('domain_to_ip_addresses', ip_addresses)\n\n    # Group forwarding rules by IP address\n    frs_by_ip = {}\n    fr_ip_message = ''\n    for fr in self.forwarding_rules_with_certificate:\n      frs_by_ip.setdefault(fr.ip_address, []).append(fr)\n      fr_ip_message += (\n          f'- forwarding rule \"{fr.name}\" in \"{fr.region}\": {fr.ip_address}\\n')\n\n    # Check which IP addresses point to the load balancer\n    ip_addresses_pointing_to_lb = []\n    unresolved_ip_addresses = []\n    for ip_address in ip_addresses:\n      if frs_by_ip.get(ip_address):\n        ip_addresses_pointing_to_lb.append(ip_address)\n      else:\n        unresolved_ip_addresses.append(ip_address)\n\n    if ip_addresses_pointing_to_lb and not unresolved_ip_addresses:\n      op.add_ok(\n          certificate,\n          reason=op.prep_msg(\n              op.SUCCESS_REASON,\n              domain=self.domain,\n              ip_addresses=', '.join(ip_addresses_pointing_to_lb),\n              name=self.certificate_name,\n          ),\n      )\n    elif ip_addresses_pointing_to_lb and unresolved_ip_addresses:\n      op.add_uncertain(\n          certificate,\n          reason=op.prep_msg(\n              op.UNCERTAIN_REASON,\n              domain=self.domain,\n              name=self.certificate_name,\n              unresolved_ip_addresses=', '.join(unresolved_ip_addresses),\n              resolved_ip_addresses=', '.join(ip_addresses_pointing_to_lb),\n          ),\n          remediation=op.prep_msg(\n              op.UNCERTAIN_REMEDIATION,\n              domain=self.domain,\n              fr_ip_message=fr_ip_message,\n              name=self.certificate_name,\n          ),\n      )\n    elif unresolved_ip_addresses:\n      op.add_failed(\n          certificate,\n          reason=op.prep_msg(\n              op.FAILURE_REASON,\n              domain=self.domain,\n              unresolved_ip_addresses=', '.join(unresolved_ip_addresses),\n              name=self.certificate_name,\n          ),\n          remediation=op.prep_msg(\n              op.FAILURE_REMEDIATION,\n              domain=self.domain,\n              fr_ip_message=fr_ip_message,\n              name=self.certificate_name,\n          ),\n      )\n    else:\n      op.add_failed(\n          certificate,\n          reason=op.prep_msg(op.FAILURE_REASON_ALT1, domain=self.domain),\n          remediation=op.prep_msg(\n              op.FAILURE_REMEDIATION,\n              domain=self.domain,\n              fr_ip_message=fr_ip_message,\n              name=self.certificate_name,\n          ),\n      )\n\n\nclass VerifyForwardingRulesPort(runbook.Step):\n  \"\"\"Checks if the load balancer is configured to listen on port 443.\n\n  More specifically, check if all IP addresses associated with the certificate\n  have forwarding rules that listen on port 443\n  \"\"\"\n\n  template = 'ssl_certificates::verify_forwarding_rules_port'\n  project_id: str\n  forwarding_rules_with_certificate: List[lb.ForwardingRules]\n  certificate_name: str\n\n  @property\n  def name(self):\n    return (f'Check if the load balancer with certificate'\n            f' \"{self.certificate_name}\" is configured to listen on port 443.')\n\n  def execute(self):\n    \"\"\"Checks if the load balancer is configured to listen on port 443.\"\"\"\n    certificate = lb.get_ssl_certificate(self.project_id, self.certificate_name)\n\n    # Group forwarding rules by IP address\n    frs_by_ip = {}\n    for fr in self.forwarding_rules_with_certificate:\n      frs_by_ip.setdefault(fr.ip_address, []).append(fr)\n\n    misconfigured_entities = []\n    # For each IP address check if the lb is configured to listen on port 443\n    for ip_address, frs in frs_by_ip.items():\n      if not any(self.is_port_in_range(443, fr.port_range) for fr in frs):\n        misconfigured_entities.append(\n            'The following forwarding rules with certificate'\n            f' {certificate.name}: \\n'\n            f\" {', '.join([fr.full_path for fr in frs])} \\n use IP address\"\n            f' {ip_address} but none of them listen on port 443. \\n')\n\n    if misconfigured_entities:\n      op.add_failed(\n          certificate,\n          reason=op.prep_msg(\n              op.FAILURE_REASON,\n              misconfigured_entities='\\n'.join(misconfigured_entities),\n          ),\n          remediation=op.prep_msg(op.FAILURE_REMEDIATION,\n                                  name=self.certificate_name),\n      )\n    else:\n      op.add_ok(\n          certificate,\n          reason=op.prep_msg(op.SUCCESS_REASON, name=self.certificate_name),\n      )\n\n  def is_port_in_range(self, port: int, port_range: str):\n    try:\n      start, end = map(int, port_range.split('-'))\n      return start <= port <= end\n    except ValueError:\n      # Handle invalid port range format\n      return False\n\n\nclass VerifyNoCertificateMapConflict(runbook.Step):\n  \"\"\"Checks for conflicting certificate map set on a target proxy.\"\"\"\n\n  template = 'ssl_certificates::verify_no_certificate_map_conflict'\n  project_id: str\n  target_proxies_with_certificate: List[TargetProxy]\n  certificate_name: str\n\n  @property\n  def name(self):\n    return (f'Check for conflicting certificate map set on a target proxy for'\n            f' certificate \"{self.certificate_name}\".')\n\n  def execute(self):\n    \"\"\"Checks for conflicting certificate map set on a target proxy.\"\"\"\n\n    certificate = lb.get_ssl_certificate(self.project_id, self.certificate_name)\n\n    conflicting_target_proxies = []\n    for target_proxy in self.target_proxies_with_certificate:\n      if target_proxy.certificate_map:\n        conflicting_target_proxies.append(target_proxy)\n\n    if conflicting_target_proxies:\n\n      target_proxy_conflicts = [\n          f'Target Proxy: {target_proxy.full_path} has certificate map'\n          f' {target_proxy.certificate_map} together with classic SSL'\n          f\" certificates {', '.join(target_proxy.ssl_certificates)}\"\n          for target_proxy in conflicting_target_proxies\n      ]\n      op.add_failed(\n          certificate,\n          reason=op.prep_msg(\n              op.FAILURE_REASON,\n              conflicting_target_proxies='\\n'.join(target_proxy_conflicts),\n          ),\n          remediation=op.prep_msg(op.FAILURE_REMEDIATION),\n      )\n    else:\n      op.add_ok(\n          certificate,\n          reason=op.prep_msg(op.SUCCESS_REASON, name=self.certificate_name),\n      )\n\n\nclass CheckProvisioningTime(runbook.Step):\n  \"\"\"Checks if the SSL certificate associated resources has been updated recently.\"\"\"\n\n  template = 'ssl_certificates::check_provisioning_time'\n  project_id: str\n  target_proxies_with_certificate: List[TargetProxy]\n  forwarding_rules_with_certificate: List[lb.ForwardingRules]\n  certificate_name: str\n\n  @property\n  def name(self):\n    return (f'Check if the SSL certificate \"{self.certificate_name}\" associated'\n            f' resources has been updated recently.')\n\n  def execute(self):\n    \"\"\"Checks if the SSL certificate associated resources has been updated recently.\"\"\"\n    certificate = lb.get_ssl_certificate(self.project_id, self.certificate_name)\n\n    recently_changed = []\n\n    for forwarding_rule in self.forwarding_rules_with_certificate:\n      filter_str = \"\"\"resource.type=\"gce_forwarding_rule\"\n              resource.labels.region=\"{}\"\n              resource.labels.forwarding_rule_id=\"{}\"\n              protoPayload.methodName=~\"(forwardingRules|globalForwardingRules).(patch|update|insert)\"\n              \"\"\".format(forwarding_rule.region, forwarding_rule.id)\n      serial_log_entries = logs.realtime_query(\n          project_id=self.project_id,\n          filter_str=filter_str,\n          start_time=datetime.now() - timedelta(days=1),\n          end_time=datetime.now(),\n      )\n\n      if serial_log_entries:\n        last_log = serial_log_entries.pop()\n        timestamp = get_path(last_log, 'timestamp')\n        recently_changed.append(\n            f'Forwarding rule {forwarding_rule.name} in scope'\n            f' {forwarding_rule.region} has been modified at {timestamp}.')\n\n    for target_proxy in self.target_proxies_with_certificate:\n      if target_proxy.region != 'global':\n        # For now support only global target HTTPS proxies in this step\n        # - there is no monitoring type for regional target proxies\n        continue\n      if isinstance(target_proxy, lb.TargetHttpsProxy):\n        filter_str = \"\"\"resource.type=\"gce_target_https_proxy\"\n                        resource.labels.target_https_proxy_id=\"{}\"\n                        protoPayload.methodName=~\"targetHttpsProxies.(patch|update|insert|setSslCertificates)\"\n                        \"\"\".format(target_proxy.id)\n      elif isinstance(target_proxy, lb.TargetSslProxy):\n        filter_str = \"\"\"resource.type=\"gce_target_ssl_proxy\"\n                        resource.labels.target_ssl_proxy_name=\"{}\"\n                        resource.labels.region=\"{}\"\n                        protoPayload.methodName=~\"targetSslProxies.(patch|update|insert|setSslCertificates)\"\n                        \"\"\".format(target_proxy.region, target_proxy.name)\n      else:\n        # This should never happen\n        raise ValueError(f'Unsupported target proxy type: {type(target_proxy)}')\n      serial_log_entries = logs.realtime_query(\n          project_id=self.project_id,\n          filter_str=filter_str,\n          start_time=datetime.now() - timedelta(days=1),\n          end_time=datetime.now(),\n      )\n\n      if serial_log_entries:\n        last_log = serial_log_entries.pop()\n        timestamp = get_path(last_log, 'timestamp')\n        recently_changed.append(\n            f'Target proxy {target_proxy.name} in scope'\n            f' {target_proxy.region} has been modified at {timestamp}.')\n\n    if recently_changed:\n      op.add_uncertain(\n          certificate,\n          reason=op.prep_msg(\n              op.UNCERTAIN_REASON,\n              recently_changed='\\n'.join(recently_changed),\n              name=self.certificate_name,\n          ),\n          remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION,\n                                  name=self.certificate_name),\n      )\n    else:\n      op.add_ok(\n          certificate,\n          reason=op.prep_msg(\n              op.SUCCESS_REASON,\n              name=self.certificate_name,\n          ),\n      )\n\n\nclass SslCertificatesEnd(runbook.EndStep):\n  \"\"\"Concludes the SSL Certificate diagnostics process.\"\"\"\n\n  def execute(self):\n    \"\"\"Finalize SSL Certificate diagnostics.\"\"\"\n    if not config.get(flags.INTERACTIVE_MODE):\n      response = op.prompt(\n          kind=op.CONFIRMATION,\n          message='Are you satisfied with the SSL Certificate troubleshooting?',\n      )\n      if response == op.NO:\n        op.info(message=op.END_MESSAGE)\n"
  },
  {
    "path": "gcpdiag/runbook/lb/ssl_certificates_test.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test class for lb/SslCertificate\"\"\"\n\nfrom gcpdiag import config\nfrom gcpdiag.runbook import lb, snapshot_test_base\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = lb\n  runbook_name = 'lb/ssl-certificates'\n  config.init({'auto': True, 'interface': 'cli'})\n\n  rule_parameters = [{\n      'project_id': 'gcpdiag-lb3-aaaa',\n      'certificate_name': 'cert1',\n  }, {\n      'project_id': 'gcpdiag-lb3-aaaa',\n      'certificate_name': 'cert2',\n  }, {\n      'project_id': 'gcpdiag-lb3-aaaa',\n      'certificate_name': 'cert3',\n  }, {\n      'project_id': 'gcpdiag-lb3-aaaa',\n      'certificate_name': 'unused-cert4',\n  }]\n"
  },
  {
    "path": "gcpdiag/runbook/lb/templates/latency.jinja",
    "content": "{% block backend_latency_success_reason%}\nThe forwarding rule has a backend latency of {average_latency} ms. This is less than the threshold value of {threshold} ms.\n{% endblock backend_latency_success_reason %}\n{% block backend_latency_failure_reason%}\nThe forwarding rule has a backend latency of {average_latency} ms. This is higher than the threshold value of {threshold} ms.\n{% endblock backend_latency_failure_reason %}\n{% block backend_latency_failure_remediation%}\nInvestigate the increased backend latency. Check the health and performance of the backend instances, examining metrics such as CPU utilization, memory usage, and disk I/O.\n{% endblock backend_latency_failure_remediation %}\n{% block request_count_success_reason%}\nThe forwarding rule has an average request count of {average_request_count} requests/s in the last 15 minutes. This is less than the threshold value of {threshold}.\n{% endblock request_count_success_reason %}\n{% block request_count_failure_reason%}\nThe forwarding rule has an average request count of {average_request_count} requests/s in the last 15 minutes. This is higher than the threshold value of {threshold}.\n{% endblock request_count_failure_reason %}\n{% block request_count_failure_remediation%}\nThe high request count suggests the backend may be overloaded. Consider scaling up the backend by adding more instances or increasing the resources of existing instances.\n{% endblock request_count_failure_remediation %}\n{% block error_rate_success_reason%}\nThe forwarding rule has an average error rate of {average_error_rate}% in the last 15 minutes. This is less than the threshold value of {threshold}%.\n{% endblock error_rate_success_reason %}\n{% block error_rate_failure_reason%}\nThe forwarding rule has an average error rate of {average_error_rate}% in the last 15 minutes. This is higher than the threshold value of {threshold}%.\n{% endblock error_rate_failure_reason %}\n{% block error_rate_failure_remediation%}\nA high error rate indicates potential problems with the backend service. Check the logs for 5xx errors and investigate the root cause. Common issues include application errors and resource exhaustion. If the errors correlate with specific requests, examine those requests for patterns or anomalies.\n{% endblock error_rate_failure_remediation %}\n"
  },
  {
    "path": "gcpdiag/runbook/lb/templates/ssl_certificates.jinja",
    "content": "{% block confirmation_success_reason %}\nThe SSL certificate \"{name}\" is in ACTIVE state.\n{% endblock confirmation_success_reason %}\n\n{% block confirmation_skipped_reason %}\nThe SSL certificate \"{name}\" does not exist or project {project_id} does not exist.\n{% endblock confirmation_skipped_reason %}\n\n{% block confirmation_skipped_reason_a1 %}\nThe certificate \"{name}\" is self-managed. Self-managed certificates require manual handling for obtaining, provisioning, and renewal. This diagnostic check supports only Google-managed certificates.\n{% endblock confirmation_skipped_reason_a1 %}\n\n{% block confirmation_failure_reason %}\nThe Google-managed SSL certificate \"{name}\" is not in ACTIVE state.\n{% endblock confirmation_failure_reason %}\n\n{% block cert_status_success_reason %}\nThe Google-managed SSL certificate \"{name}\" is in {status} state.\n{% endblock cert_status_success_reason %}\n\n{% block cert_status_failure_reason %}\nThe Google-managed SSL certificate \"{name}\" is in the PROVISIONING_FAILED_PERMANENTLY state. This is a non-recoverable state.\n{% endblock cert_status_failure_reason %}\n\n{% block cert_status_failure_remediation %}\nRecreate the certificate. Refer to the documentation for instructions on creating SSL certificates.\n{% endblock cert_status_failure_remediation %}\n\n{% block cert_status_uncertain_reason %}\nThe Google-managed SSL certificate \"{name}\" is in the {status} state. {context}.\n{% endblock cert_status_uncertain_reason %}\n\n{% block domain_status_success_reason %}\nAll domains associated with the SSL certificate \"{name}\" are in the ACTIVE state. Domain provisioning appears successful.\n{% endblock domain_status_success_reason %}\n\n{% block failed_not_visible_domains_failure_reason %}\nThe following domains are in FAILED_NOT_VISIBLE state: {domains} for SSL certificate \"{name}\". This usually means the domain's DNS records are not correctly pointing to the load balancer.\n{% endblock failed_not_visible_domains_failure_reason %}\n\n{% block provisioning_domains_uncertain_reason %}\nThe following domains are in PROVISIONING state: {domains} for SSL certificate \"{name}\".\n{% endblock provisioning_domains_uncertain_reason %}\n\n{% block provisioning_domains_uncertain_remediation %}\nThe provisioning process can take some time. The diagnostic process will continue checking other potential issues while the domains are provisioning.\n{% endblock provisioning_domains_uncertain_remediation %}\n\n{% block failed_rate_limited_domains_failure_reason %}\nThe following domains are in FAILED_RATE_LIMITED state: {domains} for SSL certificate \"{name}\". This indicates rate limiting by the Certificate Authority. This likely means the allowed number of certificate requests in a short period was exceeded.\n{% endblock failed_rate_limited_domains_failure_reason %}\n\n{% block failed_rate_limited_domains_failure_remediation %}\nWait for a while and then check the certificate status again. If the issue persists, contact Google Cloud Support.\n{% endblock failed_rate_limited_domains_failure_remediation %}\n\n{% block failed_caa_check_domains_failure_reason %}\nThe following domains are in FAILED_CAA_CHECKING or FAILED_CAA_FORBIDDEN state: {domains} for SSL certificate \"{name}\". This indicates misconfigured CAA records. CAA records authorize specific Certificate Authorities to issue certificates for the domain.\n{% endblock failed_caa_check_domains_failure_reason %}\n\n{% block failed_caa_check_domains_failure_remediation %}\nEnsure the CAA records are configured correctly. Refer to the documentation for instructions on configuring CAA records: <https://cloud.google.com/load-balancing/docs/ssl-certificates/google-managed-certs#caa>\n{% endblock failed_caa_check_domains_failure_remediation %}\n\n{% block check_certificate_attachment_failure_reason %}\nThe SSL certificate \"{name}\" is not attached to any target proxies. Attach the certificate to a target proxy.\n{% endblock check_certificate_attachment_failure_reason %}\n\n{% block check_certificate_attachment_failure_remediation %}\nFollow the documentation to attach the certificate to a target proxy: <https://cloud.google.com/load-balancing/docs/ssl-certificates/google-managed-certs#load-balancer>\n{% endblock check_certificate_attachment_failure_remediation %}\n\n{% block check_certificate_attachment_success_reason %}\nThe SSL certificate \"{name}\" is attached to target proxies ({target_proxies}) that are in use by forwarding rules.\n{% endblock check_certificate_attachment_success_reason %}\n\n{% block verify_dns_records_success_reason %}\nDNS records for domain {domain} are correctly configured. All resolved IP addresses ({ip_addresses}) point to the load balancer(s) associated with certificate {name}.\n{% endblock verify_dns_records_success_reason %}\n\n{% block verify_dns_records_failure_reason %}\nDNS records for domain {domain} currently resolve to the following IP addresses: {unresolved_ip_addresses}. These IP addresses do not point to any load balancer associated with certificate {name}. Certificate provisioning is therefore blocked.\n{% endblock verify_dns_records_failure_reason %}\n\n{% block verify_dns_records_failure_remediation %}\nConfigure DNS records for {domain} to point to the correct load balancer IP address(es) for certificate {name}.\n\nThe following load balancer IP addresses are associated with this certificate:\n\n{fr_ip_message}\n\nCheck: <https://cloud.google.com/load-balancing/docs/ssl-certificates/google-managed-certs#update-dns>\n{% endblock verify_dns_records_failure_remediation %}\n\n{% block verify_dns_records_failure_reason_a1 %}\nDomain {domain} does not resolve to any IP addresses. In order to provision the certificate, the domain must resolve to an IP address that points to a load balancer associated with the certificate.\n{% endblock verify_dns_records_failure_reason_a1 %}\n\n{% block verify_dns_records_uncertain_reason %}\nSome DNS records for domain {domain} resolve to the following unexpected IP address(es): {unresolved_ip_addresses}.  While other records point to the expected IP addresses: {resolved_ip_addresses}. The unexpected IP addresses do not point to any load balancer associated with certificate {name}. This can cause certificate provisioning issues.\n{% endblock verify_dns_records_uncertain_reason %}\n\n{% block verify_dns_records_uncertain_remediation %}\nConfigure DNS records for {domain} to point to the correct load balancer IP address(es) for certificate {name}.\n\nThe following load balancer IP addresses are associated with this certificate:\n\n{fr_ip_message}\n\nCheck: <https://cloud.google.com/load-balancing/docs/ssl-certificates/google-managed-certs#update-dns>\n{% endblock verify_dns_records_uncertain_remediation %}\n\n{% block verify_forwarding_rules_port_success_reason %}\nThe SSL certificate \"{name}\" has forwarding rules configured for HTTPS (port 443) on all associated IP addresses.\n{% endblock verify_forwarding_rules_port_success_reason %}\n\n{% block verify_forwarding_rules_port_failure_reason %}\n{misconfigured_entities}\nThere must be at least one load balancer's forwarding rule that uses TCP port 443 for the Google-managed certificate to be initially provisioned and automatically renewed.\n{% endblock verify_forwarding_rules_port_failure_reason %}\n\n{% block verify_forwarding_rules_port_failure_remediation %}\nConfigure the load balancer to listen on port 443 for SSL certificate \"{name}\".\n{% endblock verify_forwarding_rules_port_failure_remediation %}\n\n{% block verify_no_certificate_map_conflict_success_reason %}\nAll target proxies associated with the SSL certificate \"{name}\" do not have a certificate map.\n{% endblock verify_no_certificate_map_conflict_success_reason %}\n\n{% block verify_no_certificate_map_conflict_failure_reason %}\nThe following target proxies have a conflicting certificate map:\n\n{conflicting_target_proxies}.\n\nIf certificate map is set on a target proxy, the classic SSL certificates are ignored.\n{% endblock verify_no_certificate_map_conflict_failure_reason %}\n\n{% block verify_no_certificate_map_conflict_failure_remediation %}\nIf this configuration is unintended, detach the certificate map from the target proxies.\n{% endblock verify_no_certificate_map_conflict_failure_remediation %}\n\n{% block check_provisioning_time_success_reason %}\nNo recent changes were detected for forwarding rules and target proxies associated with the SSL certificate \"{name}\".\n{% endblock check_provisioning_time_success_reason %}\n\n{% block check_provisioning_time_uncertain_reason %}\nThe SSL certificate \"{name}\" has recently had associated resources modified. This might affect DNS validation. Details are below:\n{recently_changed}\n{% endblock check_provisioning_time_uncertain_reason %}\n\n{% block check_provisioning_time_uncertain_remediation %}\nDNS validation automatically checks the domain's A and AAAA records against the Google Cloud load balancer's IP address. This process includes an automatic retry mechanism with increasing wait times. If {name} was recently attached to a target proxy or the target proxy to a forwarding rule, validation could take up to 24 hours to complete.\n{% endblock check_provisioning_time_uncertain_remediation %}\n"
  },
  {
    "path": "gcpdiag/runbook/lb/templates/unhealthy_backends.jinja",
    "content": "{% block confirmation_success_reason %}\nAll backends are currently healthy in backend service {name} in scope {region}.\n{% endblock confirmation_success_reason %}\n\n{% block confirmation_uncertain_reason %}\nAll backends are currently healthy in backend service {name} in scope {region}.\nHowever, health check logging is disabled, so recent unhealthy events could not be checked.\n{% endblock confirmation_uncertain_reason %}\n\n{% block confirmation_failure_reason_a1 %}\nAll backends are currently healthy in backend service {name} in scope {region}.\nHowever, we found health check logs indicating unhealthy backends in the last 10 minutes.\n\n{detailed_reason}\n{% endblock confirmation_failure_reason_a1 %}\n\n{% block confirmation_failure_reason %}\nThe backend service {name} in the {region} scope has unhealthy backends.\n\n{detailed_reason}\nThe backend service {name} uses the following health check: {hc_name}.\n\n{success_criteria}\n\n{timing_and_threshold}\n{% endblock confirmation_failure_reason %}\n\n{% block logging_enabled_success_reason %}\nHealth check logging is enabled for health check {hc_url}.\n{% endblock logging_enabled_success_reason %}\n\n{% block logging_enabled_uncertain_reason %}\nLogging is not enabled for health check {hc_url}. Lack of logs hinders troubleshooting, as logs provide visibility into health check state changes and probe details needed to diagnose failures.\n{% endblock logging_enabled_uncertain_reason %}\n\n{% block logging_enabled_uncertain_remediation %}\nEnable logging for the health check using the following `gcloud` command:\n\n```\ngcloud compute health-checks update {protocol} {hc_name} {additional_flags} --enable-logging\n```\n\nThis will log any future changes in health status, but won't show past activity. Note that new health check logs will only appear when a health state transition occurs.\n{% endblock logging_enabled_uncertain_remediation %}\n\n{% block port_mismatch_uncertain_reason %}\nThe load balancer is conducting health checks on port {hc_port} for the backend service {bs_resource}. However, this health check port differs from the port used by the load balancer for serving traffic on some backend instance groups. The backend service is configured to use the \"{serving_port_name}\" port, which is then translated to a specific port number based on the \"{serving_port_name}\" port mapping within each backend instance group.\n\nAffected backends:\n\n{formatted_igs}\n\nThis configuration can be problematic unless the load balancer has been configured to use a different port for health checks purposefully.\n{% endblock port_mismatch_uncertain_reason %}\n\n{% block port_mismatch_uncertain_remediation %}\n1.  **Verify Intent:** Confirm if the health check port `{hc_port}` is *meant* to be different from the serving port defined by \"{serving_port_name}\" on the backends.\n\n2.  **Test Port on Backend VMs:** Check if port `{hc_port}` is listening on an instance from the affected groups. Run this command from your local machine/Cloud Shell:\n\n    ```bash\n    gcloud compute ssh [INSTANCE_NAME] --zone [ZONE] --project {project_id} --command=\"sudo ss -tlnp | grep ':{hc_port}'\"\n    ```\n    *   Output showing `LISTEN` indicates the port is open and your application is likely listening.\n    *   No output suggests the port is not in a listening state on that VM.\n\n3.  **Adjust Configuration:**\n    *   **If Mismatch is Unintentional:** Align the load balancer's health check port in the backend service `{bs_resource}` to match the actual port number used by \"{serving_port_name}\" in the instance groups.\n    *   **If Mismatch is Intentional:** Ensure your application on the VMs is correctly configured to listen on port `{hc_port}`.\n    *   **If Port Not Listening:** Troubleshoot your application on the VM to ensure it's running and bound to port `{hc_port}`. Check the VM's local firewall as well.\n\nIf the health check port `{hc_port}` is meant to be different from the serving port (e.g., a dedicated management/health endpoint), confirm that your application is correctly configured to listen on the health check port.\n{% endblock port_mismatch_uncertain_remediation %}\n\n{% block port_mismatch_uncertain_reason_a1 %}\nBackend service \"{backend_service_name}\" is a {lb_scheme} Passthrough Load Balancer. These load balancers forward traffic to backends without changing the destination port, so there isn't a single \"serving port\" on the load balancer itself. The health check probes are sent to the port defined directly in the HealthCheck resource. The associated health check \"{hc_name}\" is configured to use port {hc_port}.\n{% endblock port_mismatch_uncertain_reason_a1 %}\n\n{% block port_mismatch_uncertain_remediation_a1 %}\nPlease ensure that the backend instances (VMs or endpoints) are configured to accept and respond to health check probes specifically on port {hc_port}. The application running on the backends must be actively listening on this port ({hc_port}) for the health checks to succeed, regardless of the ports used for actual application traffic.\n{% endblock port_mismatch_uncertain_remediation_a1 %}\n\n{% block port_mismatch_success_reason %}\nThe load balancer is performing health checks on the same port used for serving traffic. This is the standard configuration.\n\n{port_mapping}\n{% endblock port_mismatch_success_reason %}\n\n{% block protocol_mismatch_uncertain_reason %}\nThe load balancer uses {serving_protocol} for traffic but {hc_protocol} for health checks on backend service {bs_resource}. If not intended, this protocol mismatch can lead to incorrect health assessments, potentially causing traffic to be sent to failing backends or triggering unnecessary failovers.\n\nHere are some examples of potentially problematic mismatches:\n\n*   **TLS vs. Non-TLS:**\n    *   Health Check: HTTPS, Backend: HTTP - The health check will try to initiate a TLS handshake, which will fail against a non-TLS server.\n    *   Health Check: HTTP, Backend: HTTPS - The health check sends plaintext, but the server expects TLS, likely resulting in a connection reset or protocol error.\n\n*   **Application Protocol Mismatch:**\n    *   Health Check: GRPC, Backend: HTTP - The health check speaks the GRPC protocol, but the backend expects standard HTTP requests.\n    *   Health Check: HTTP, Backend: SSL - The health check expects an HTTP application response, but the backend is configured for generic SSL, which might not involve HTTP.\n\n*   **Protocol Version/Feature Mismatch (Subtler issues even with the same base protocol):**\n    *   An HTTP/1.0 health check request to a server strictly requiring HTTP/1.1 features.\n    *   An HTTP/2 health check to a server only supporting HTTP/1.1 without proper negotiation.\n\n**Important:** Health checks using {hc_protocol} might be passing while the application serving {serving_protocol} traffic is failing because the success criteria for the two protocols can differ. More details on the health check success criteria can be found in [docs](https://cloud.google.com/load-balancing/docs/health-check-concepts#criteria-protocol-http).\n{% endblock protocol_mismatch_uncertain_reason %}\n\n{% block protocol_mismatch_uncertain_remediation %}\n1.  Verify if this protocol difference is intentional and well-understood.\n2.  If not, **align the health check protocol with the serving protocol ({serving_protocol})** to ensure health checks accurately represent the backend's ability to serve traffic.\n3.  Consult the [Health Checks Overview](https://cloud.google.com/load-balancing/docs/health-check-concepts) for best practices.\n{% endblock protocol_mismatch_uncertain_remediation %}\n\n{% block protocol_mismatch_success_reason %}\nThe load balancer is performing health checks using the same protocol ({hc_protocol}) used for serving traffic on backend service {bs_resource}. This is the standard configuration.\n{% endblock protocol_mismatch_success_reason %}\n\n{% block protocol_mismatch_success_reason_a1 %}\nThe backend service {bs_resource} uses {serving_protocol} for traffic and a TCP health check. TCP health checks are broadly compatible as they only test basic port connectivity, not application-level responses. This is a common configuration.\n{% endblock protocol_mismatch_success_reason_a1 %}\n\n{% block firewall_rules_failure_reason %}\n{insight}\nThe health checks are currently failing due to a misconfigured firewall. This prevents Google Cloud probers from connecting to the backends, causing the load balancer to consider them unhealthy.\n{% endblock firewall_rules_failure_reason %}\n\n{% block firewall_rules_failure_remediation %}\nUpdate the firewall rules to allow inbound traffic from the Google Cloud health check IP ranges (found at <https://cloud.google.com/load-balancing/docs/health-check-concepts#ip-ranges>) to the backends.\n{% endblock firewall_rules_failure_remediation %}\n\n{% block firewall_rules_success_reason %}\nFirewall rules are correctly configured and are not blocking health check probes for backend service {bs_url}.\n{% endblock firewall_rules_success_reason %}\n\n{% block past_hc_success_uncertain_remediation %}\nCheck the logs and monitoring metrics for the instances associated with backend service {bs_url}, focusing on recent timeframes to see if there were any errors, crashes, or resource exhaustion issues. Also inspect any application-specific logs for errors or warnings.\n{% endblock past_hc_success_uncertain_remediation %}\n\n{% block unknown_hc_state_log_failure_reason %}\nHealth check logs for backend service {bs_url} show entries with the detailed health state UNKNOWN. This indicates that the health checking system is aware of the instance, but its health status is undetermined. This situation can arise when a new endpoint is unresponsive to health checks and there's a substantial configured timeout period (approximately 25 seconds or longer). In such cases, the \"UNKNOWN\" state might be published while the health checker waits for the timeout to expire. Additionally, \"UNKNOWN\" could also be published during outage scenarios if the health checkers themselves are crashing. In this critical situation, endpoints that previously had known health states could transition to \"UNKNOWN\".\n{% endblock unknown_hc_state_log_failure_reason %}\n\n{% block unknown_hc_state_log_failure_remediation %}\nFor new endpoints: Consider reducing the timeout period for health checks if appropriate, especially during initial setup or testing phases.\n\nFor potential Google Cloud outages: Use Personalized Service Health to check for any ongoing incidents that might be affecting the project or the specific service in question. If an incident is identified, follow any recommended mitigation steps or wait for the issue to be resolved by Google Cloud.\n{% endblock unknown_hc_state_log_failure_remediation %}\n\n{% block unhealthy_hc_state_log_failure_reason %}\nHealth check logs for backend service {bs_url} indicate a detailed health state of UNHEALTHY. The backend instances are reachable but are not passing the health check requirements.\n\nResponses received from backends: {probe_results_text_str}\n\n{% endblock unhealthy_hc_state_log_failure_reason %}\n\n{% block unhealthy_hc_state_log_failure_remediation %}\n{success_criteria}\n\nInvestigate the configuration of the application to ensure it aligns with these health check expectations.\n\nIf a different endpoint should be checked or a different response is expected, adjust the health check settings accordingly.\n\nCommon reasons for UNHEALTHY detailed state:\n* Health check is configured for a path to which application is not responding. In this case, the probes are responded with 404 response. Solution is to either change the health check path or configure the application to provide a successful response on the path configured on the health check.\n* Backend server has received a HTTP request, which is not compliant with the application's expectations, from the health check probers. In this case, the probes are responded with 400 response. The failure message is 'Bad Request [Code: 400]'. Possible reason for the backend server to serve 400 response is:\n    * A missing or wrong Host header received.\n    * The health checker sends a request using a protocol version that the application doesn't support or expects in a different format. Examples:\n        * Client sends HTTP/1.0 but server requires HTTP/1.1+ and interprets the request as invalid.\n        * Client sends HTTP/2 frames to a plain HTTP/1.1 endpoint (without proper upgrade negotiation).\n        * Client sends TLS-encrypted data to an HTTP (non-TLS) port — server tries to parse the Client Hello as an HTTP request, resulting in an improper request, and returns 400.\n    * Unexpected query parameters in the request sent by the health check probers.\n* TLS version mismatch between the health check probers and the backend server. The failure message will be Connect failed.\n* Health check probes are responded with Service Unavailable, Service Temporarily Unavailable, Internal Server Error. In this case, the probes are responded with 5XX. Solution is to check:\n    * if the backend instances are experiencing high CPU, memory, or network utilization, and as a result the customer backends are responding with 5XX.\n    * if the instances are running a bad image. Bad instance images might have missing or improperly configured services, broken or ignored startup scripts, stale environment configurations.\n    * CheckInterval config on the health check might be too short, leading to an excessive number of health checks sent to the backends, leading to high network utilization on the backends\n* Some backends are configured to use a different port/protocol for health checks, than the named port assigned for traffic by the load balancer. In such a case, if the correct port is not configured in the backend, this can become problematic. In the health check logs, the failure explanation is visible as Connection refused, HTTP response: , Error: Connection refused or HTTP response: , Error: Connection reset by peer. Solution is to make the backend application listen on the port that is configured for the health check purposes or to change the health check port to the port on which the application is listening.\n{% endblock unhealthy_hc_state_log_failure_remediation %}\n\n{% block timeout_hc_state_log_failure_reason %}\nHealth check logs for backend service {bs_url} show the detailed health state \"TIMEOUT\".\n\nResponses received from backends: {probe_results_text_str}\n\nThe backend might be timing out because:\n\n1. The application is overloaded and taking too long to respond.\n\n2. The backend service or health check timeout is too low.\n\n3. Connection to the endpoint cannot be established - the backend instance has crashed or is otherwise unresponsive.\n\nThe following responses were received from your backends: {probe_results_text_str}\n{% endblock timeout_hc_state_log_failure_reason %}\n\n{% block timeout_hc_state_log_failure_remediation %}\n\n1. Make sure that the backend service timeout (current value: {bs_timeout_sec}s) and health check timeout (current value: {hc_timeout_sec}s) are appropriately configured to accommodate the application's expected response time.\n\n2. Investigate the application's configuration to ensure it is correctly handling health check probe requests. {success_criteria}\n\n3. Check if firewall rules or iptables configurations are blocking the health check probes from reaching the backend instances, resulting in timeouts.\n{% endblock timeout_hc_state_log_failure_remediation %}\n"
  },
  {
    "path": "gcpdiag/runbook/lb/unhealthy_backends.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Module containing steps to analyze Health Check issues.\"\"\"\n\nimport re\nimport urllib.parse\nfrom datetime import datetime, timedelta\nfrom itertools import groupby\nfrom typing import List, Optional\n\nimport googleapiclient.errors\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import config, runbook\nfrom gcpdiag.queries import apis, crm, gce, lb, logs\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.gce import generalized_steps as gce_gs\nfrom gcpdiag.runbook.lb import flags\n\n\nclass UnhealthyBackends(runbook.DiagnosticTree):\n  \"\"\"Load Balancer Unhealthy Backends Analyzer.\n\n  This runbook helps investigate why backends in a load balancer are unhealthy.\n  It confirms and summarizes the current health status of the backends, aiding\n  in identifying any unhealthy instances.\n\n  Key Investigation Areas:\n\n  - Firewalls:\n      - Verifies if firewall rules are properly configured to allow health check\n      traffic.\n  - Port Configuration:\n      - Checks if health check sends probe requests to the different port than\n      serving port. This may be intentional or a potential configuration error,\n      and the runbook will provide guidance on the implications.\n  - Protocol Configuration:\n      - Checks if health check uses the same protocol as backend service. This\n      may be intentional or a potential configuration error, and the runbook\n      will provide guidance on the implications.\n  - Logging:\n      - Checks if health check logging is enabled to aid in troubleshooting.\n  - Health Check Logs (if enabled):\n      - Analyzes the latest health check logs to identify the specific reasons\n      for backend unhealthiness:\n          - Timeouts: Identifies if the backend is timing out and provides\n          potential causes and remediation steps.\n          - Unhealthy: Indicates that the backend is reachable but doesn't meet\n          the health check's criteria. It provides guidance on the expected\n          health check behavior and suggests configuration checks.\n          - Unknown: Explains the potential reasons for the \"UNKNOWN\" health\n          state and suggests actions like adjusting timeouts or checking for\n          Google Cloud outages.\n  - Past Health Check Success:\n      - Checks if the health check has worked successfully in the past to\n      determine if the issue is recent or ongoing.\n  - VM Performance:\n      - Checks if the instances performance is degraded - disks, memory and cpu\n      utilization are being checked.\n  \"\"\"\n\n  parameters = {\n      flags.PROJECT_ID: {\n          'type': str,\n          'help': 'The Project ID of the resource under investigation',\n          'required': True,\n      },\n      flags.BACKEND_SERVICE_NAME: {\n          'type': str,\n          'help':\n              ('The name of the backend service that you want to investigate'),\n          'required': True,\n      },\n      flags.REGION: {\n          'type': str,\n          'help':\n              ('The region configured for the load balancer (backend service).'\n               ' If not provided, the backend service is assumed to be global.'\n              ),\n          'required': False,\n      },\n  }\n\n  def build_tree(self):\n    \"\"\"Fetches primary resources and builds the diagnostic tree.\"\"\"\n    project_id = op.get(flags.PROJECT_ID)\n    backend_service_name = op.get(flags.BACKEND_SERVICE_NAME)\n    region = op.get(flags.REGION, 'global')\n\n    # The start step is always added. Its execute method will determine the\n    # initial message based on the objects it receives.\n    start = UnhealthyBackendsStart()\n    start.project_id = project_id\n    start.backend_service_name = backend_service_name\n    start.region = region\n    self.add_start(start)\n    logging_check = VerifyHealthCheckLoggingEnabled()\n    port_check = ValidateBackendServicePortConfiguration()\n    protocol_check = ValidateBackendServiceProtocolConfiguration()\n    firewall_check = VerifyFirewallRules()\n    vm_performance_check = CheckVmPerformance()\n    self.add_step(parent=start, child=logging_check)\n    self.add_step(parent=start, child=port_check)\n    self.add_step(parent=start, child=protocol_check)\n    self.add_step(parent=start, child=firewall_check)\n    self.add_step(parent=start, child=vm_performance_check)\n    self.add_end(UnhealthyBackendsEnd())\n    # Pre-flight checks before fetching resources\n    if not apis.is_enabled(project_id, 'compute'):\n      start.error_message = (\n          'Compute Engine API is not enabled. Please enable it and try again.')\n      return\n\n    # Fetch all primary resources once to avoid redundant API calls\n    try:\n      backend_service = lb.get_backend_service(project_id, backend_service_name,\n                                               region)\n    except googleapiclient.errors.HttpError:\n      # If the backend service doesn't exist, we can't proceed.\n      # The start step will report this and the runbook will end.\n      start.error_message = (\n          f'Backend service {backend_service_name} does not exist in scope'\n          f' {region} or project {project_id}')\n      return\n    start.backend_service = backend_service\n\n    if not backend_service.health_check:\n      start.error_message = (\n          f'Backend service {backend_service_name} does not have a health check'\n          f' configured in scope {region} or project {project_id}')\n      return\n\n    health_check = gce.get_health_check(project_id,\n                                        backend_service.health_check,\n                                        backend_service.health_check_region)\n    start.health_check = health_check\n\n    backend_health_statuses = lb.get_backend_service_health(\n        op.get_context(), backend_service_name, region)\n    start.backend_health_statuses = backend_health_statuses\n\n    if not backend_health_statuses:\n      # Start step will see this list is empty and report no backends.\n      return\n\n    # If we got this far, we have all necessary objects. Now, build the\n    # rest of the tree and pass the fetched objects to each step.\n\n    logging_check.project_id = project_id\n    logging_check.region = region\n    logging_check.backend_service_name = backend_service_name\n    logging_check.backend_service = backend_service\n    logging_check.health_check = health_check\n    logging_check.backend_health_statuses = backend_health_statuses\n\n    port_check.project_id = project_id\n    port_check.region = region\n    port_check.backend_service_name = backend_service_name\n    port_check.backend_service = backend_service\n    port_check.health_check = health_check\n\n    protocol_check.project_id = project_id\n    protocol_check.region = region\n    protocol_check.backend_service_name = backend_service_name\n    protocol_check.backend_service = backend_service\n    protocol_check.health_check = health_check\n\n    firewall_check.project_id = project_id\n    firewall_check.region = region\n    firewall_check.backend_service_name = backend_service_name\n    firewall_check.backend_service = backend_service\n\n    vm_performance_check.project_id = project_id\n    vm_performance_check.region = region\n    vm_performance_check.backend_service_name = backend_service_name\n    vm_performance_check.backend_health_statuses = backend_health_statuses\n\n\nclass UnhealthyBackendsStart(runbook.StartStep):\n  \"\"\"Start step for Unhealthy Backends runbook.\"\"\"\n\n  template = 'unhealthy_backends::confirmation'\n  project_id: str\n  backend_service_name: str\n  region: str\n\n  # Pre-fetched objects from the parent DiagnosticTree\n  backend_service: Optional[lb.BackendServices] = None\n  health_check: Optional[gce.HealthCheck] = None\n  backend_health_statuses: Optional[List[lb.BackendHealth]] = None\n\n  error_message: str = ''\n\n  @property\n  def name(self):\n    return (f'Analyze unhealthy backends for backend service'\n            f' \"{self.backend_service_name}\" in scope'\n            f' \"{self.region}\".')\n\n  def execute(self):\n    \"\"\"Checks the health of a specified load balancer's backends.\"\"\"\n    proj = crm.get_project(self.project_id)\n\n    if self.error_message:\n      op.add_skipped(proj, reason=self.error_message)\n      return\n\n    if not self.backend_service:\n      op.add_skipped(\n          proj,\n          reason=(f'Backend service {self.backend_service_name} does not'\n                  f' exist in scope {self.region} or project'\n                  f' {self.project_id}'),\n      )\n      return\n\n    if not self.backend_health_statuses:\n      op.add_skipped(\n          proj,\n          reason=(f'Backend service {self.backend_service_name} does not'\n                  f' have any backends in scope {self.region} or'\n                  f' project {self.project_id}'),\n      )\n      return\n\n    unhealthy_backends = [\n        backend for backend in self.backend_health_statuses\n        if backend.health_state == 'UNHEALTHY'\n    ]\n\n    backend_health_statuses_per_group = {\n        k: list(v)\n        for k, v in groupby(self.backend_health_statuses, key=lambda x: x.group)\n    }\n\n    if unhealthy_backends:\n      detailed_reason = ''\n      for group, backends_in_group in backend_health_statuses_per_group.items():\n        unhealthy_count = sum(\n            1 for x in backends_in_group if x.health_state == 'UNHEALTHY')\n        detailed_reason += (\n            f'Group {group} has {unhealthy_count}/{len(backends_in_group)} '\n            'unhealthy backends\\n')\n      op.add_failed(\n          resource=self.backend_service,\n          reason=op.prep_msg(\n              op.FAILURE_REASON,\n              name=self.backend_service_name,\n              region=self.region,\n              detailed_reason=detailed_reason,\n              hc_name=self.health_check.name,\n              success_criteria=get_health_check_success_criteria(\n                  self.health_check),\n              timing_and_threshold=_get_timing_and_threshold_info(\n                  self.health_check)),\n          remediation='',\n      )\n    else:\n      if not self.health_check.is_log_enabled:\n        op.add_uncertain(\n            resource=self.backend_service,\n            reason=op.prep_msg(\n                op.UNCERTAIN_REASON,\n                name=self.backend_service_name,\n                region=self.region,\n            ),\n        )\n        return\n\n      # Check for past unhealthy logs\n      all_groups = {status.group for status in self.backend_health_statuses}\n      group_filters = []\n      group_metadata = {}\n      detailed_reason = ''\n      past_issue_found = False\n\n      for group in all_groups:\n        m = re.search(r'/(?:regions|zones)/([^/?]+)/([^/?]+)/([^/?]+)', group)\n        if not m:\n          continue\n\n        location = m.group(1)\n        resource_type = m.group(2)\n        resource_name = m.group(3)\n\n        if resource_type == 'instanceGroups':\n          # Construct individual filter part and store metadata for mapping logs back to group URL\n          filter_part = (\n              f'(resource.type=\"gce_instance_group\" AND '\n              f'resource.labels.instance_group_name=\"{resource_name}\" AND '\n              f'resource.labels.location=~\"{location}\")')\n          group_filters.append(filter_part)\n          group_metadata[('gce_instance_group', resource_name,\n                          location)] = group\n        elif resource_type == 'networkEndpointGroups':\n          neg = _get_zonal_network_endpoint_group(self.project_id, location,\n                                                  resource_name)\n          if neg:\n            filter_part = (\n                f'(resource.type=\"gce_network_endpoint_group\" AND '\n                f'resource.labels.network_endpoint_group_id=\"{neg.id}\" AND '\n                f'resource.labels.zone=\"{location}\")')\n            group_filters.append(filter_part)\n            group_metadata[('gce_network_endpoint_group', neg.id,\n                            location)] = group\n\n      if group_filters:\n        # Aggregate filters into a single query\n        aggregated_filter = \"\"\"log_name=\"projects/{}/logs/compute.googleapis.com%2Fhealthchecks\"\n                            (jsonPayload.healthCheckProbeResult.healthState=\"UNHEALTHY\" OR\n                             jsonPayload.healthCheckProbeResult.previousHealthState=\"UNHEALTHY\")\n                            AND ({})\n                            \"\"\".format(self.project_id,\n                                       ' OR '.join(group_filters))\n\n        log_entries = logs.realtime_query(\n            project_id=self.project_id,\n            filter_str=aggregated_filter,\n            start_time=datetime.now() - timedelta(minutes=10),\n            end_time=datetime.now(),\n            disable_paging=True,\n        )\n\n        if log_entries:\n          past_issue_found = True\n          affected_groups = set()\n          for entry in log_entries:\n            rtype = get_path(entry, ('resource', 'type'))\n            labels = get_path(entry, ('resource', 'labels'), {})\n            # Normalize location and name for metadata mapping\n            loc = labels.get('location') or labels.get('zone')\n            name = labels.get('instance_group_name') or labels.get(\n                'network_endpoint_group_id')\n            group_url = group_metadata.get((rtype, name, loc))\n            # Fallback for regional MIGs where logs report the zone\n            if not group_url and loc:\n              parts = loc.rsplit('-', 1)\n              if len(parts) == 2:\n                region = parts[0]\n                group_url = group_metadata.get((rtype, name, region))\n\n            if group_url:\n              affected_groups.add(group_url)\n\n          detailed_reason = ''.join([\n              f'Group {g} had unhealthy backends in the last 10 minutes.\\n'\n              for g in sorted(affected_groups)\n          ])\n\n      if past_issue_found:\n        op.add_failed(\n            resource=self.backend_service,\n            reason=op.prep_msg(\n                op.FAILURE_REASON_ALT1,\n                name=self.backend_service_name,\n                region=self.region,\n                detailed_reason=detailed_reason,\n            ),\n            remediation='',\n        )\n      else:\n        op.add_ok(\n            resource=self.backend_service,\n            reason=op.prep_msg(\n                op.SUCCESS_REASON,\n                name=self.backend_service_name,\n                region=self.region,\n            ),\n        )\n\n\nclass CheckVmPerformance(runbook.CompositeStep):\n  \"\"\"Checks if the instances performance is degraded.\"\"\"\n\n  template = 'unhealthy_backends::vm_performance'\n  project_id: str\n  backend_service_name: str\n  region: str\n  backend_health_statuses: List[lb.BackendHealth]\n\n  @property\n  def name(self):\n    return (f'Check VMs performance for unhealthy backends in backend service'\n            f' \"{self.backend_service_name}\" in scope'\n            f' \"{self.region}\".')\n\n  def execute(self):\n    \"\"\"Checks if the VM performance is degraded.\n\n    In this step one unhealthy instance from each group is analyzed - disks,\n    memory and cpu utilization are being checked.\n    \"\"\"\n    instances_to_analyze_by_group = {}\n\n    for status in sorted(\n        self.backend_health_statuses,\n        key=lambda obj: obj.instance):  # sorting to make testing predictable\n      if status.health_state == 'UNHEALTHY':\n        instances_to_analyze_by_group[status.group] = status.instance\n\n    for group, instance in instances_to_analyze_by_group.items():\n      m = re.search(r'projects/([^/?]+)/zones/([^/?]+)/instances/([^/?]+)',\n                    instance)\n      if not m:\n        raise RuntimeError(\n            \"Can't determine project, zone or instance name from self links\"\n            f' {group}')\n\n      project_id = m.group(1)\n      zone = m.group(2)\n      instance_name = m.group(3)\n      instance_object = gce.get_instance(project_id=project_id,\n                                         zone=zone,\n                                         instance_name=instance_name)\n      if not instance_object:\n        op.add_skipped(\n            None,\n            reason=\n            f'VM instance {instance_name} not found in project {project_id} zone {zone}'\n        )\n\n      mem_check = gce_gs.HighVmMemoryUtilization()\n      mem_check.vm = instance_object\n      disk_check = gce_gs.HighVmDiskUtilization()\n      disk_check.vm = instance_object\n      cpu_check = gce_gs.HighVmCpuUtilization()\n      cpu_check.vm = instance_object\n\n      self.add_child(mem_check)\n      self.add_child(disk_check)\n      self.add_child(cpu_check)\n\n\nclass VerifyFirewallRules(runbook.Step):\n  \"\"\"Checks if firewall rules are configured correctly.\"\"\"\n\n  template = 'unhealthy_backends::firewall_rules'\n  project_id: str\n  backend_service_name: str\n  region: str\n  backend_service: lb.BackendServices\n\n  @property\n  def name(self):\n    return (f'Verify firewall rules allow health checks for backend service'\n            f' \"{self.backend_service_name}\" in scope'\n            f' \"{self.region}\".')\n\n  def execute(self):\n    \"\"\"Checks if firewall rules are configured correctly.\"\"\"\n    if not apis.is_enabled(self.project_id, 'recommender'):\n      op.add_skipped(\n          crm.get_project(self.project_id),\n          reason=(\n              'Checking firewall rules requires Recommender API to be enabled'),\n      )\n      return\n\n    used_by_refs = self.backend_service.used_by_refs\n    insights = lb.get_lb_insights_for_a_project(self.project_id, self.region)\n    for insight in insights:\n      if insight.is_firewall_rule_insight and insight.details.get(\n          'loadBalancerUri'):\n        # network load balancers (backend service is central resource):\n        if insight.details.get('loadBalancerUri').endswith(\n            self.backend_service.full_path):\n          op.add_metadata('insightDetail', insight.details)\n          op.add_failed(\n              resource=self.backend_service,\n              reason=op.prep_msg(\n                  op.FAILURE_REASON,\n                  insight=insight.description,\n              ),\n              remediation=op.prep_msg(op.FAILURE_REMEDIATION),\n          )\n          return\n        for ref in used_by_refs:\n          # application load balancers (url map is central resource):\n          if insight.details.get('loadBalancerUri').endswith(ref):\n            op.add_metadata('insightDetail', insight.details)\n            op.add_failed(\n                resource=self.backend_service,\n                reason=op.prep_msg(\n                    op.FAILURE_REASON,\n                    insight=insight.description,\n                ),\n                remediation=op.prep_msg(op.FAILURE_REMEDIATION),\n            )\n            return\n    op.add_ok(self.backend_service,\n              reason=op.prep_msg(op.SUCCESS_REASON,\n                                 bs_url=self.backend_service.full_path))\n\n\nclass ValidateBackendServicePortConfiguration(runbook.Step):\n  \"\"\"Checks if health check sends probe requests to the different port than serving port.\"\"\"\n\n  template = 'unhealthy_backends::port_mismatch'\n  project_id: str\n  backend_service_name: str\n  region: str\n  backend_service: lb.BackendServices\n  health_check: gce.HealthCheck\n\n  @property\n  def name(self):\n    return (f'Validate port configuration for backend service'\n            f' \"{self.backend_service_name}\" in scope'\n            f' \"{self.region}\".')\n\n  def execute(self):\n    \"\"\"Checks if health check sends probe requests to the different port than serving port.\"\"\"\n    lb_scheme = self.backend_service.load_balancing_scheme\n    if self.region != 'global' and lb_scheme in ['INTERNAL', 'EXTERNAL']:\n      op.add_uncertain(\n          self.backend_service,\n          reason=op.prep_msg(\n              op.UNCERTAIN_REASON_ALT1,\n              backend_service_name=self.backend_service_name,\n              lb_scheme=lb_scheme.lower(),\n              hc_name=self.health_check.name,\n              hc_port=self.health_check.port,\n          ),\n          remediation=op.prep_msg(\n              op.UNCERTAIN_REMEDIATION_ALT1,\n              hc_port=self.health_check.port,\n          ),\n      )\n      return\n\n    if not apis.is_enabled(self.project_id, 'recommender'):\n      op.add_skipped(\n          crm.get_project(self.project_id),\n          reason=('Checking port configuration requires Recommender API to be'\n                  ' enabled'),\n      )\n      return\n\n    igs = gce.get_instance_groups(op.get_context())\n    insights = lb.get_lb_insights_for_a_project(self.project_id, self.region)\n    for insight in insights:\n      if insight.is_health_check_port_mismatch_insight:\n        for info in insight.details.get('backendServiceInfos'):\n          if info.get('backendServiceUri').endswith(\n              self.backend_service.full_path):\n            impacted_igs = [\n                igs.get(self._normalize_url(x))\n                for x in info.get('impactedInstanceGroupUris', [])\n            ]\n            formatted_igs = self._format_affected_instance_groups(\n                impacted_igs, info.get('servingPortName'))\n            op.add_uncertain(\n                resource=self.backend_service,\n                reason=op.prep_msg(\n                    op.UNCERTAIN_REASON,\n                    hc_port=info.get('healthCheckPortNumber'),\n                    serving_port_name=info.get('servingPortName'),\n                    formatted_igs=formatted_igs,\n                    bs_resource=self.backend_service.full_path,\n                ),\n                remediation=op.prep_msg(\n                    op.UNCERTAIN_REMEDIATION,\n                    hc_port=info.get('healthCheckPortNumber'),\n                    serving_port_name=info.get('servingPortName'),\n                    bs_resource=self.backend_service.full_path,\n                    project_id=self.project_id,\n                ),\n            )\n            return\n    port_name = self.backend_service.port_name\n    has_negs = any('/networkEndpointGroups/' in backend.get('group')\n                   for backend in self.backend_service.backends)\n\n    if has_negs:\n      port_mapping = (\n          'Backend service uses Network Endpoint Groups (NEGs), portName'\n          ' parameter is not applicable.')\n      op.add_ok(\n          self.backend_service,\n          reason=op.prep_msg(op.SUCCESS_REASON, port_mapping=port_mapping),\n      )\n    else:\n      port_mapping_details = []\n      for backend in self.backend_service.backends:\n        ig = igs.get(self._normalize_url(backend.get('group')))\n        if ig:\n          port_numbers = self._get_port_numbers_by_name(ig, port_name)\n          if port_numbers:\n            port_numbers_str = ', '.join(sorted(port_numbers))\n            port_mapping_details.append(\n                f'  {ig.full_path}: portName \"{port_name}\" -> port(s)'\n                f' {port_numbers_str}')\n          else:\n            port_mapping_details.append(\n                f'  {ig.full_path}: portName \"{port_name}\" not defined')\n\n      if port_mapping_details:\n        port_mapping = ('  Health check port specification:'\n                        f' {self.health_check.port_specification}')\n        if self.health_check.port_specification == 'USE_FIXED_PORT':\n          port_mapping += f'\\n  Health check port: {self.health_check.port}'\n        port_mapping += ('\\n  Backend service serving port name:'\n                         f' \"{port_name}\"\\n  Port mapping details:\\n' +\n                         '\\n'.join(port_mapping_details))\n      else:\n        port_mapping = (\n            f'portName \"{port_name}\" is not used in any instance group for this'\n            ' backend service.')\n\n      op.add_ok(\n          self.backend_service,\n          reason=op.prep_msg(op.SUCCESS_REASON, port_mapping=port_mapping),\n      )\n\n  def _normalize_url(self, url):\n    if not url:\n      return url\n    try:\n      # Add // prefix if scheme is missing for urlparse to work correctly\n      if (not url.startswith('http://') and not url.startswith('https://') and\n          not url.startswith('//')):\n        temp_url = '//' + url\n      else:\n        temp_url = url\n\n      parsed_url = urllib.parse.urlparse(temp_url)\n\n      if parsed_url.hostname == 'compute.googleapis.com':\n        return parsed_url.path.lstrip('/')\n      elif (parsed_url.hostname == 'www.googleapis.com' and\n            parsed_url.path.startswith('/compute/v1/')):\n        return parsed_url.path.replace('/compute/v1/', '', 1)\n      else:\n        return url\n    except ValueError:\n      # Handle potential parsing errors\n      return url\n\n  def _format_affected_instance_groups(self, impacted_instance_groups,\n                                       serving_port_name):\n    output_lines = []\n    for group in impacted_instance_groups:\n      port_numbers = ', '.join(\n          self._get_port_numbers_by_name(group, serving_port_name))\n      output_lines.append(\n          f'{group.full_path} - port name \"{serving_port_name}\" translates to'\n          f' port {port_numbers}')\n\n    return '\\n'.join(output_lines)\n\n  def _get_port_numbers_by_name(self, impacted_instance_group,\n                                serving_port_name):\n    return [\n        str(p['port'])\n        for p in impacted_instance_group.named_ports\n        if p.get('name') == serving_port_name\n    ]\n\n\nclass ValidateBackendServiceProtocolConfiguration(runbook.Step):\n  \"\"\"Checks if health check uses the same protocol as backend service for serving traffic.\"\"\"\n\n  template = 'unhealthy_backends::protocol_mismatch'\n  project_id: str\n  backend_service_name: str\n  region: str\n  backend_service: lb.BackendServices\n  health_check: gce.HealthCheck\n\n  @property\n  def name(self):\n    return (f'Validate protocol configuration for backend service'\n            f' \"{self.backend_service_name}\" in scope'\n            f' \"{self.region}\".')\n\n  def execute(self):\n    \"\"\"Checks if health check uses the same protocol as backend service for serving traffic.\"\"\"\n    if self.backend_service.protocol == 'UDP':\n      op.add_skipped(\n          self.backend_service,\n          reason=(\n              \"Load balancer uses UDP protocol which doesn't make sense for\"\n              \" health checks as it's connectionless and doesn't have built-in\"\n              ' features for acknowledging delivery'),\n      )\n      return\n\n    if self.health_check.type == self.backend_service.protocol:\n      op.add_ok(\n          self.backend_service,\n          reason=op.prep_msg(op.SUCCESS_REASON,\n                             bs_resource=self.backend_service.full_path,\n                             hc_protocol=self.health_check.type),\n      )\n    elif self.health_check.type == 'TCP':\n      op.add_ok(\n          self.backend_service,\n          reason=op.prep_msg(op.SUCCESS_REASON_ALT1,\n                             bs_resource=self.backend_service.full_path,\n                             serving_protocol=self.backend_service.protocol),\n      )\n    else:\n      op.add_uncertain(\n          self.backend_service,\n          reason=op.prep_msg(\n              op.UNCERTAIN_REASON,\n              hc_protocol=self.health_check.type,\n              serving_protocol=self.backend_service.protocol,\n              bs_resource=self.backend_service.full_path,\n          ),\n          remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION,),\n      )\n\n\nclass VerifyHealthCheckLoggingEnabled(runbook.Gateway):\n  \"\"\"Check if health check logging is enabled.\"\"\"\n\n  template = 'unhealthy_backends::logging_enabled'\n  project_id: str\n  backend_service_name: str\n  region: str\n  backend_service: lb.BackendServices\n  health_check: gce.HealthCheck\n  backend_health_statuses: List[lb.BackendHealth]\n\n  @property\n  def name(self):\n    return (f'Verify health check logging enabled for backend service'\n            f' \"{self.backend_service_name}\" in scope'\n            f' \"{self.region}\".')\n\n  def execute(self):\n    \"\"\"Check if health check logging is enabled and create child steps if so.\"\"\"\n    if self.health_check.is_log_enabled:\n      op.add_ok(\n          self.health_check,\n          reason=op.prep_msg(op.SUCCESS_REASON,\n                             hc_url=self.health_check.full_path),\n      )\n      analyze_latest_hc_log = AnalyzeLatestHealthCheckLog()\n      analyze_latest_hc_log.project_id = self.project_id\n      analyze_latest_hc_log.backend_service_name = self.backend_service_name\n      analyze_latest_hc_log.region = self.region\n      analyze_latest_hc_log.backend_service = self.backend_service\n      analyze_latest_hc_log.health_check = self.health_check\n      analyze_latest_hc_log.backend_health_statuses = self.backend_health_statuses\n      self.add_child(analyze_latest_hc_log)\n\n      check_past_hc_success = CheckPastHealthCheckSuccess()\n      check_past_hc_success.project_id = self.project_id\n      check_past_hc_success.backend_service_name = self.backend_service_name\n      check_past_hc_success.region = self.region\n      check_past_hc_success.backend_service = self.backend_service\n      check_past_hc_success.backend_health_statuses = self.backend_health_statuses\n      self.add_child(check_past_hc_success)\n    else:\n      additional_flags = ''\n      if self.region != 'global':\n        additional_flags = f'--region={self.region} '\n      op.add_uncertain(\n          self.backend_service,\n          reason=op.prep_msg(op.UNCERTAIN_REASON,\n                             hc_url=self.health_check.full_path),\n          remediation=op.prep_msg(\n              op.UNCERTAIN_REMEDIATION,\n              hc_name=self.health_check.name,\n              protocol=self.health_check.type.lower(),\n              additional_flags=additional_flags,\n          ),\n      )\n\n\nclass AnalyzeLatestHealthCheckLog(runbook.Gateway):\n  \"\"\"Look for the latest health check logs and based on that decide what to do next.\"\"\"\n\n  template = 'unhealthy_backends::health_check_log'\n  project_id: str\n  backend_service_name: str\n  region: str\n  backend_service: lb.BackendServices\n  health_check: gce.HealthCheck\n  backend_health_statuses: List[lb.BackendHealth]\n\n  @property\n  def name(self):\n    return (f'Analyze latest health check log for backend service'\n            f' \"{self.backend_service_name}\" in scope'\n            f' \"{self.region}\".')\n\n  def execute(self):\n    \"\"\"Look for the latest health check logs and based on that decide what to do next.\"\"\"\n    # Find all groups that have at least one unhealthy instance\n    unhealthy_groups = {\n        state.group\n        for state in self.backend_health_statuses\n        if state.health_state == 'UNHEALTHY'\n    }\n\n    check_window = timedelta(days=14)\n    if not unhealthy_groups:\n      unhealthy_groups = {state.group for state in self.backend_health_statuses}\n      check_window = timedelta(minutes=10)\n\n    detailed_health_states = {}\n\n    # Add support for NEGs\n    for group in unhealthy_groups:\n      m = re.search(r'/(?:regions|zones)/([^/?]+)/([^/?]+)/([^/?]+)', group)\n      if not m:\n        raise RuntimeError(\n            \"Can't determine region or zone or group name from self links\"\n            f' {group}')\n\n      location = m.group(1)\n      resource_type = m.group(2)\n      resource_name = m.group(3)\n\n      if resource_type == 'instanceGroups':\n        filter_str = \"\"\"resource.type=\"gce_instance_group\"\n                        log_name=\"projects/{}/logs/compute.googleapis.com%2Fhealthchecks\"\n                        resource.labels.instance_group_name=\"{}\"\n                        resource.labels.location=~\"{}\"\n                        jsonPayload.healthCheckProbeResult.healthState=\"UNHEALTHY\"\n                        \"\"\".format(self.project_id, resource_name, location)\n      elif resource_type == 'networkEndpointGroups':\n        network_endpoint_group = _get_zonal_network_endpoint_group(\n            self.project_id, location, resource_name)\n        if network_endpoint_group:\n          filter_str = \"\"\"resource.type=\"gce_network_endpoint_group\"\n                        log_name=\"projects/{}/logs/compute.googleapis.com%2Fhealthchecks\"\n                        resource.labels.network_endpoint_group_id=\"{}\"\n                        resource.labels.zone={}\n                        jsonPayload.healthCheckProbeResult.healthState=\"UNHEALTHY\"\n                        \"\"\".format(self.project_id, network_endpoint_group.id,\n                                   location)\n        else:\n          op.add_skipped(\n              resource=self.backend_service,\n              reason=(\n                  f'Network endpoint group {resource_name} in zone {location} '\n                  f'does not exist in project {self.project_id}'),\n          )\n          continue\n      else:\n        op.add_skipped(\n            resource=self.backend_service,\n            reason=(f'Unsupported resource type {resource_type} for group'\n                    f' {group} in backend service'\n                    f' {self.backend_service_name} in scope'\n                    f' {self.region}'),\n        )\n        continue\n      serial_log_entries = logs.realtime_query(\n          project_id=self.project_id,\n          filter_str=filter_str,\n          start_time=datetime.now() - check_window,\n          end_time=datetime.now(),\n          disable_paging=True,\n      )\n\n      if serial_log_entries:\n        last_log = serial_log_entries.pop()\n        op.add_metadata('log', last_log)\n        if (get_path(\n            last_log,\n            'jsonPayload.healthCheckProbeResult.healthState') == 'UNHEALTHY'):\n          detailed_health_states.setdefault(\n              get_path(\n                  last_log,\n                  'jsonPayload.healthCheckProbeResult.detailedHealthState',\n              ),\n              [],\n          ).append(get_path(last_log, 'jsonPayload.healthCheckProbeResult'))\n\n    if detailed_health_states.get('TIMEOUT'):\n      timeout_hc_log_step = AnalyzeTimeoutHealthCheckLog()\n      timeout_hc_log_step.project_id = self.project_id\n      timeout_hc_log_step.backend_service_name = self.backend_service_name\n      timeout_hc_log_step.region = self.region\n      timeout_hc_log_step.logs = detailed_health_states.get('TIMEOUT')\n      timeout_hc_log_step.backend_service = self.backend_service\n      timeout_hc_log_step.health_check = self.health_check\n      self.add_child(timeout_hc_log_step)\n    if detailed_health_states.get('UNHEALTHY'):\n      unhealthy_hc_log_step = AnalyzeUnhealthyHealthCheckLog()\n      unhealthy_hc_log_step.project_id = self.project_id\n      unhealthy_hc_log_step.backend_service_name = self.backend_service_name\n      unhealthy_hc_log_step.region = self.region\n      unhealthy_hc_log_step.logs = detailed_health_states.get('UNHEALTHY')\n      unhealthy_hc_log_step.backend_service = self.backend_service\n      unhealthy_hc_log_step.health_check = self.health_check\n      self.add_child(unhealthy_hc_log_step)\n    if detailed_health_states.get('UNKNOWN'):\n      unknown_hc_log_step = AnalyzeUnknownHealthCheckLog()\n      unknown_hc_log_step.project_id = self.project_id\n      unknown_hc_log_step.backend_service_name = self.backend_service_name\n      unknown_hc_log_step.region = self.region\n      unknown_hc_log_step.backend_service = self.backend_service\n      self.add_child(unknown_hc_log_step)\n\n\nclass AnalyzeTimeoutHealthCheckLog(runbook.Step):\n  \"\"\"Analyzes logs with the detailed health check state TIMEOUT\"\"\"\n\n  logs: list[dict]\n  template = 'unhealthy_backends::timeout_hc_state_log'\n  project_id: str\n  backend_service_name: str\n  region: str\n  backend_service: lb.BackendServices\n  health_check: gce.HealthCheck\n\n  @property\n  def name(self):\n    return (f'Analyze TIMEOUT health check logs for backend service'\n            f' \"{self.backend_service_name}\" in scope'\n            f' \"{self.region}\".')\n\n  def execute(self):\n    \"\"\"Analyzes logs with the detailed health check state TIMEOUT\"\"\"\n    if not self.logs:\n      op.add_skipped(\n          self.backend_service,\n          reason='No logs with detailed health state TIMEOUT found',\n      )\n      return\n\n    probe_results_texts = {\n        get_path(log, 'probeResultText') for log in self.logs\n    }\n    probe_results_text_str = ', '.join(f'\"{x}\"' for x in probe_results_texts)\n    try:\n      success_criteria = get_health_check_success_criteria(self.health_check)\n    except ValueError as e:\n      op.add_skipped(\n          self.backend_service,\n          reason=f'Health check type is not supported: {e}',\n      )\n      return\n\n    op.add_uncertain(\n        self.backend_service,\n        reason=op.prep_msg(op.FAILURE_REASON,\n                           probe_results_text_str=probe_results_text_str,\n                           bs_url=self.backend_service.full_path),\n        remediation=op.prep_msg(\n            op.FAILURE_REMEDIATION,\n            success_criteria=success_criteria,\n            bs_timeout_sec=self.backend_service.timeout_sec or 30,\n            hc_timeout_sec=self.health_check.timeout_sec,\n        ),\n    )\n\n\nclass AnalyzeUnhealthyHealthCheckLog(runbook.Step):\n  \"\"\"Analyzes logs with detailed health state UNHEALTHY.\"\"\"\n\n  template = 'unhealthy_backends::unhealthy_hc_state_log'\n  logs: list[dict]\n  project_id: str\n  backend_service_name: str\n  region: str\n  backend_service: lb.BackendServices\n  health_check: gce.HealthCheck\n\n  @property\n  def name(self):\n    return (f'Analyze UNHEALTHY health check logs for backend service'\n            f' \"{self.backend_service_name}\" in scope'\n            f' \"{self.region}\".')\n\n  def execute(self):\n    \"\"\"Analyzes logs with detailed health state UNHEALTHY.\"\"\"\n    if not self.logs:\n      op.add_skipped(\n          self.backend_service,\n          reason='No logs with detailed health state UNHEALTHY found',\n      )\n      return\n\n    try:\n      success_criteria = get_health_check_success_criteria(self.health_check)\n    except ValueError as e:\n      op.add_skipped(\n          self.backend_service,\n          reason=f'Health check type is not supported: {e}',\n      )\n      return\n\n    probe_results_texts = {\n        get_path(log, 'probeResultText') for log in self.logs\n    }\n    probe_results_text_str = ', '.join(f'\"{x}\"' for x in probe_results_texts)\n\n    op.add_uncertain(\n        self.backend_service,\n        reason=op.prep_msg(op.FAILURE_REASON,\n                           probe_results_text_str=probe_results_text_str,\n                           bs_url=self.backend_service.full_path),\n        remediation=op.prep_msg(op.FAILURE_REMEDIATION,\n                                success_criteria=success_criteria),\n    )\n\n\nclass AnalyzeUnknownHealthCheckLog(runbook.Step):\n  \"\"\"Analyze logs with detailed health state UNKNOWN.\"\"\"\n\n  template = 'unhealthy_backends::unknown_hc_state_log'\n  project_id: str\n  backend_service_name: str\n  region: str\n  backend_service: lb.BackendServices\n\n  @property\n  def name(self):\n    return (f'Analyze UNKNOWN health check logs for backend service'\n            f' \"{self.backend_service_name}\" in scope'\n            f' \"{self.region}\".')\n\n  def execute(self):\n    \"\"\"Analyze logs with detailed health state UNKNOWN.\"\"\"\n    op.add_uncertain(\n        self.backend_service,\n        reason=op.prep_msg(op.FAILURE_REASON,\n                           bs_url=self.backend_service.full_path),\n        remediation=op.prep_msg(op.FAILURE_REMEDIATION),\n    )\n\n\nclass CheckPastHealthCheckSuccess(runbook.Step):\n  \"\"\"Checks if the health check has worked successfully in the past.\"\"\"\n\n  template = 'unhealthy_backends::past_hc_success'\n  project_id: str\n  backend_service_name: str\n  region: str\n  backend_service: lb.BackendServices\n  backend_health_statuses: List[lb.BackendHealth]\n\n  @property\n  def name(self):\n    return (f'Check past health check success for backend service'\n            f' \"{self.backend_service_name}\" in scope'\n            f' \"{self.region}\".')\n\n  def execute(self):\n    \"\"\"Checks if the health check has worked successfully in the past.\"\"\"\n    unhealthy_groups = {\n        state.group\n        for state in self.backend_health_statuses\n        if state.health_state == 'UNHEALTHY'\n    }\n    any_date_found = False\n    message = ''\n    # Add support for NEGs\n    for group in unhealthy_groups:\n      m = re.search(r'/(?:regions|zones)/([^/?]+)/([^/?]+)/([^/?]+)', group)\n      if not m:\n        raise RuntimeError(\n            \"Can't determine region or zone or instanceGroup name from ig\"\n            f' {group}')\n\n      location = m.group(1)\n      resource_type = m.group(2)\n      resource_name = m.group(3)\n\n      if resource_type == 'instanceGroups':\n        filter_str = \"\"\"resource.type=\"gce_instance_group\"\n                          log_name=\"projects/{}/logs/compute.googleapis.com%2Fhealthchecks\"\n                          resource.labels.instance_group_name=\"{}\"\n                          resource.labels.location={}\n                          jsonPayload.healthCheckProbeResult.previousHealthState=\"HEALTHY\"\n                          jsonPayload.healthCheckProbeResult.detailedHealthState=\"TIMEOUT\"\n                          OR \"UNHEALTHY\" OR \"UNKNOWN\" \"\"\".format(\n            self.project_id, resource_name, location)\n      elif resource_type == 'networkEndpointGroups':\n        network_endpoint_group = _get_zonal_network_endpoint_group(\n            self.project_id, location, resource_name)\n        if network_endpoint_group:\n          filter_str = \"\"\"resource.type=\"gce_network_endpoint_group\"\n                            log_name=\"projects/{}/logs/compute.googleapis.com%2Fhealthchecks\"\n                            resource.labels.network_endpoint_group_id=\"{}\"\n                            resource.labels.zone={}\n                            jsonPayload.healthCheckProbeResult.previousHealthState=\"HEALTHY\"\n                            jsonPayload.healthCheckProbeResult.detailedHealthState=\"TIMEOUT\"\n                            OR \"UNHEALTHY\" OR \"UNKNOWN\" \"\"\".format(\n              self.project_id, network_endpoint_group.id, location)\n        else:\n          op.add_skipped(\n              resource=group,\n              reason=(\n                  f'Network endpoint group {resource_name} in zone {location} '\n                  f'does not exist in project {self.project_id}'),\n          )\n          continue\n      else:\n        op.add_skipped(\n            resource=group,\n            reason=(f'Unsupported resource type {resource_type} for group'\n                    f' {group} in backend service'\n                    f' {self.backend_service_name} in scope'\n                    f' {self.region}'),\n        )\n        continue\n\n      serial_log_entries = logs.realtime_query(\n          project_id=self.project_id,\n          filter_str=filter_str,\n          start_time=datetime.now() - timedelta(days=14),\n          end_time=datetime.now(),\n          disable_paging=True,\n      )\n\n      if serial_log_entries:\n        last_log = serial_log_entries.pop()\n        timestamp = get_path(last_log, 'receiveTimestamp')\n        any_date_found = True\n        op.add_metadata(group, timestamp)\n        message += (f'{group}: Backends transitioned to an unhealthy state at'\n                    f' {timestamp}\\n\\n')\n      else:\n        message += (\n            f'{group}: No logs were found indicating HEALTHY -> UNHEALTHY'\n            ' transition \\n\\n')\n\n    if message and any_date_found:\n      op.add_uncertain(\n          self.backend_service,\n          reason=message,\n          remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION,\n                                  bs_url=self.backend_service.full_path),\n      )\n    else:\n      op.add_skipped(\n          self.backend_service,\n          reason=('No past health check success found in the logs for the '\n                  f'backend service {self.backend_service.full_path}'),\n      )\n\n\nclass UnhealthyBackendsEnd(runbook.EndStep):\n  \"\"\"Concludes the unhealthy backends diagnostics process.\n\n  If the issue persists, it directs the user to helpful\n  resources and suggests contacting support with a detailed report.\n  \"\"\"\n\n  def execute(self):\n    \"\"\"Finalize unhealthy backends diagnostics.\"\"\"\n    if not config.get(flags.INTERACTIVE_MODE):\n      region = op.get(flags.REGION, 'global')\n      backend_service_name = op.get(flags.BACKEND_SERVICE_NAME)\n      response = op.prompt(\n          kind=op.CONFIRMATION,\n          message=(\n              'Are you still experiencing health check issues on the backend'\n              f' service {backend_service_name} in scope'\n              f' {region}?'),\n          choice_msg='Enter an option: ',\n      )\n      if response == op.NO:\n        op.info(message=op.END_MESSAGE)\n\n\ndef get_health_check_success_criteria(health_check: gce.HealthCheck):\n  \"\"\"Constructs a human-readable description of a health check's success criteria.\"\"\"\n\n  success_criteria = (\n      f'The health check is using {health_check.type} protocol, and ')\n\n  port = ('serving port' if health_check.port_specification\n          == 'USE_SERVING_PORT' else f'port {health_check.port}')\n\n  if health_check.type in ['HTTP', 'HTTPS', 'HTTP2']:\n    success_criteria += (\n        'it is set to: \\n- send a prober requests to the'\n        f' {health_check.request_path} path on {port} \\n- expect a response'\n        ' with an HTTP 200 (OK) status code')\n    if health_check.response:\n      success_criteria += (\n          f' and response body containing the string \"{health_check.response}\"')\n\n  elif health_check.type in ['TCP', 'SSL']:\n    success_criteria += f'it is set to: \\n- send a prober requests on {port}'\n    if health_check.request:\n      success_criteria += (\n          f' with the configured request string \"{health_check.request}\"')\n    success_criteria += f'\\n- expect a successful {health_check.type} handshake'\n    if health_check.response:\n      success_criteria += (\n          f' and the response string exactly matches: \"{health_check.response}\"'\n      )\n\n  elif health_check.type == 'GRPC':\n    success_criteria += (\n        f' it is set to: \\n- send a prober requests on {port} \\n- expect a RPC'\n        ' response with the status OK and the status field set to SERVING')\n\n  else:\n    raise ValueError(f'Unsupported health check type: {health_check.type}')\n\n  return success_criteria\n\n\ndef _get_timing_and_threshold_info(health_check: gce.HealthCheck) -> str:\n  \"\"\"Constructs a human-readable description of a health check's timing and threshold settings.\"\"\"\n\n  timing_and_threshold = (\n      f'The health check is configured with the following timing and threshold'\n      f' settings:\\n- **Check Interval:** A health check is performed every'\n      f' {health_check.check_interval_sec} seconds.\\n- **Timeout:** The prober'\n      f' will wait up to {health_check.timeout_sec} seconds for a'\n      f' response.\\n- **Healthy Threshold:** It takes'\n      f' {health_check.healthy_threshold} consecutive successes for a backend to'\n      f' be considered healthy.\\n- **Unhealthy Threshold:** It takes'\n      f' {health_check.unhealthy_threshold} consecutive failures for a backend'\n      f' to be considered unhealthy.')\n\n  return timing_and_threshold\n\n\ndef _get_zonal_network_endpoint_group(\n    project: str, zone: str, name: str) -> Optional[gce.NetworkEndpointGroup]:\n  \"\"\"Returns a map of Network Endpoint Groups in the project.\"\"\"\n  groups = gce.get_zonal_network_endpoint_groups(op.get_context())\n  url = f\"\"\"projects/{project}/zones/{zone}/networkEndpointGroups/{name}\"\"\"\n\n  if url in groups:\n    return groups[url]\n  else:\n    return None\n"
  },
  {
    "path": "gcpdiag/runbook/lb/unhealthy_backends_test.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test class for lb/LbUnhealthyBackends\"\"\"\n\nfrom gcpdiag import config\nfrom gcpdiag.runbook import lb, snapshot_test_base\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = lb\n  runbook_name = 'lb/unhealthy-backends'\n  config.init({'auto': True, 'interface': 'cli'})\n\n  rule_parameters = [{\n      'project_id': 'gcpdiag-lb2-aaaa',\n      'backend_service_name': 'web-backend-service',\n  }, {\n      'project_id': 'gcpdiag-lb2-aaaa',\n      'backend_service_name': 'backend-service-2',\n      'region': 'europe-west4',\n  }]\n"
  },
  {
    "path": "gcpdiag/runbook/logs/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/runbook/logs/constants.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Contains constants specific constants\"\"\"\n"
  },
  {
    "path": "gcpdiag/runbook/logs/flags.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Contains flags specific to cloud logging runbooks\"\"\"\n"
  },
  {
    "path": "gcpdiag/runbook/logs/generalized_steps.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Contains generalized Cloud logging related Steps \"\"\"\nimport re\nfrom typing import Optional\n\nfrom gcpdiag import runbook, utils\nfrom gcpdiag.queries import crm, logs\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.gcp import flags\n\n\nclass CheckIssueLogEntry(runbook.Step):\n  \"\"\"Checks logs for problematic entry using filter string provided.\n\n  Attributes:\n    project_id(str): Project ID to search for filter\n    filter_str(str): Filter written in log querying language:\n      https://cloud.google.com/logging/docs/view/query-library.\n      This field required because an empty filter matches all log entries.\n    template(str): Custom template for logging issues related to a resource\n      type\n    resource_name (Optional[str]): Resource identifier that will be used in\n      the custom template provided.\n  \"\"\"\n\n  project_id: str\n  filter_str: str\n  template: str = 'logging::default'\n  issue_pattern: Optional[list[str]] = []\n  resource_name: Optional[str] = None\n\n  def execute(self):\n    \"\"\"Check for log entries matching problematic filter string\"\"\"\n\n    project = crm.get_project(self.project_id)\n\n    try:\n      fetched_logs = logs.realtime_query(project_id=self.project_id,\n                                         filter_str=self.filter_str,\n                                         start_time=op.get(flags.START_TIME),\n                                         end_time=op.get(flags.END_TIME))\n    except utils.GcpApiError as err:\n      self.template = 'logging::default'\n      op.add_skipped(project,\n                     reason=op.prep_msg(op.SKIPPED_REASON,\n                                        api_err=err,\n                                        query=self.filter_str))\n    else:\n      remediation = None\n      reason = None\n      self.filter_str += (f'timestamp >= \"{op.get(flags.START_TIME)}\"'\n                          f' AND timestamp <= \"{op.get(flags.END_TIME)}\"\\n')\n      if fetched_logs and _pattern_exists_in_entries(self.issue_pattern,\n                                                     fetched_logs):\n        if self.template != 'logging::default' and self.resource_name:\n          reason = op.prep_msg(op.FAILURE_REASON,\n                               resource_name=self.resource_name,\n                               project_id=self.project_id,\n                               query=self.filter_str)\n          remediation = op.prep_msg(op.FAILURE_REMEDIATION,\n                                    query=self.filter_str,\n                                    resource_name=self.resource_name,\n                                    project_id=self.project_id)\n        else:\n          reason = op.prep_msg(op.FAILURE_REASON, query=self.filter_str)\n          remediation = op.prep_msg(op.FAILURE_REMEDIATION,\n                                    query=self.filter_str)\n\n        op.add_failed(project, reason=reason, remediation=remediation)\n      else:\n        if self.template != 'logging::default' and self.resource_name:\n          reason = op.prep_msg(op.UNCERTAIN_REASON,\n                               resource_name=self.resource_name,\n                               query=self.filter_str,\n                               project_id=self.project_id)\n          remediation = op.prep_msg(op.UNCERTAIN_REMEDIATION,\n                                    query=self.filter_str,\n                                    resource_name=self.resource_name,\n                                    project_id=self.project_id)\n        else:\n          reason = op.prep_msg(op.UNCERTAIN_REASON, query=self.filter_str)\n          remediation = op.prep_msg(op.UNCERTAIN_REMEDIATION,\n                                    query=self.filter_str)\n        op.add_uncertain(project, reason=reason, remediation=remediation)\n\n\ndef _pattern_exists_in_entries(issue_pattern, fetched_logs):\n  for log_entry in fetched_logs:\n    message = log_entry.get('protoPayload', {}).get('status', {}).get('message')\n    if message:\n      for pattern_str in issue_pattern:\n        if re.search(pattern_str, message):\n          return True\n  return False\n"
  },
  {
    "path": "gcpdiag/runbook/logs/templates/logging.jinja",
    "content": "{% block default_failure_reason %}\nProblematic log entries found matching query:\n{query}\n{% endblock default_failure_reason %}\n\n{% block default_failure_remediation %}\nRun the following Cloud Logging query in the Google Cloud console to find the log entry indicating the problem:\n\nQuery:\n{query}\n{% endblock default_failure_remediation %}\n\n{% block default_uncertain_reason %}\nNo problematic log entries found in the time range matching the following query:\n\n{query}\n{% endblock default_uncertain_reason %}\n\n{% block default_uncertain_remediation %}\n\n1. Verify of the time range used in the filter matches that when the issue occurred and adjust it accordingly.\nQuery:\n{query}\n2. Verify that logging for the resource has not been disabled due to cost management: <https://cloud.google.com/blog/products/devops-sre/cloud-logging-cost-management-best-practices>\n{% endblock default_uncertain_remediation %}\n\n{% block default_skipped_reason %}\nCould not fetch log entries for the following due to {api_err}.\n\nQuery:\n{query}\n{% endblock default_skipped_reason %}\n\n{% block dataproc_cluster_quota_uncertain_reason %}\nNo issues with insufficient quota identified for cluster {resource_name} in project {project_id} using query:\n{query}.\n{% endblock dataproc_cluster_quota_uncertain_reason %}\n\n{% block dataproc_cluster_quota_uncertain_remediation %}\n\n1. Verify of the time range used in the filter matches that when the issue occurred and adjust it accordingly.\nQuery:\n{query}\n2. Verify that the property `dataproc.logging.stackdriver.enable` has not been set to false for cluster {resource_name} in project {project_id}: <https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/cluster-properties#dataproc_service_properties_table>\n3. Verify that logging for the cluster {resource_name} has not been disabled due to cost management: <https://cloud.google.com/blog/products/devops-sre/cloud-logging-cost-management-best-practices>\n{% endblock dataproc_cluster_quota_uncertain_remediation %}\n\n{% block dataproc_cluster_quota_failure_reason %}\nThe cluster {resource_name} in project {project_id} could not be created due to insufficient quota identified using query:\n{query}\n{% endblock dataproc_cluster_quota_failure_reason %}\n\n{% block dataproc_cluster_quota_failure_remediation %}\nThis issue occurs when the requested Dataproc cluster exceeds the project's available quota for resources such as CPU, disk space, or IP addresses.\nTo resolve this issue:\n\n- Request additional quota [1] via the Google Cloud console.\n- Create the cluster in a different project.\n[1] <https://cloud.google.com/docs/quotas/view-manage#managing_your_quota_console>\n{% endblock dataproc_cluster_quota_failure_remediation %}\n\n{% block dataproc_cluster_stockout_uncertain_reason %}\nNo issues with stockouts identified for cluster {resource_name} in project {project_id} using query:\n{query}.\n{% endblock dataproc_cluster_stockout_uncertain_reason %}\n\n{% block dataproc_cluster_stockout_uncertain_remediation %}\n\n1. Verify of the time range used in the filter matches that when the issue occurred and adjust it accordingly.\nQuery:\n{query}\n2. Verify that the property `dataproc.logging.stackdriver.enable` has not been set to false for cluster {resource_name} in project {project_id}: <https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/cluster-properties#dataproc_service_properties_table>\n3. Verify that logging for the cluster {resource_name} has not been disabled due to cost management: <https://cloud.google.com/blog/products/devops-sre/cloud-logging-cost-management-best-practices>\n{% endblock dataproc_cluster_stockout_uncertain_remediation %}\n\n{% block dataproc_cluster_stockout_failure_reason %}\nThe cluster {resource_name} creation in project {project_id} failed due to insufficient resources in the selected zone/region.\n{% endblock dataproc_cluster_stockout_failure_reason %}\n\n{% block dataproc_cluster_stockout_failure_remediation %}\nA Dataproc cluster creation stockout occurs when the requested resources for cluster creation are currently not available within a specified Google Cloud zone or region.\n\nResolution Steps:\n\n1. Utilize Dataproc Auto Zone Placement: When creating your Dataproc cluster, avoid explicitly specifying a zone. Instead, leverage Dataproc's Auto Zone placement feature, which automatically selects an available zone with sufficient resources. <https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/auto-zone>\n2. Review Capacity and Quota Management: If you are already employing Auto Zone placement and still encountering stockouts, it may indicate broader capacity or quota limitations. Consult the following resource for comprehensive strategies on managing capacity, quotas, and stockouts in Google Cloud.<https://www.googlecloudcommunity.com/gc/Community-Blogs/Managing-Capacity-Quota-and-Stockouts-in-the-Cloud-Concepts-and/ba-p/464770>\n\n{% endblock dataproc_cluster_stockout_failure_remediation %}\n\n{% block gce_log_failure_reason %}\nLog entries found matching query:\n{query}\n{% endblock gce_log_failure_reason %}\n\n{% block gce_log_failure_remediation %}\nReview the log entries in Cloud Logging for details.\nQuery:\n{query}\n{% endblock gce_log_failure_remediation %}\n\n{% block gce_log_uncertain_reason %}\nNo log entries matching issue patterns found in project {project_id} for resource {resource_name} with query: {query}\n{% endblock gce_log_uncertain_reason %}\n\n{% block gce_log_uncertain_remediation %}\n\n1. Verify of the time range used in the filter matches that when the issue occurred and adjust it accordingly.\nQuery:\n{query}\n2. Verify that logging for the resource has not been disabled due to cost management: <https://cloud.google.com/blog/products/devops-sre/cloud-logging-cost-management-best-practices>\n{% endblock gce_log_uncertain_remediation %}\n\n{% block gce_log_skipped_reason %}c\nCould not fetch log entries for query due to: {api_err}.\nQuery:\n{query}\n{% endblock gce_log_skipped_reason %}\n"
  },
  {
    "path": "gcpdiag/runbook/monitoring/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/runbook/monitoring/constants.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Contains constants specific to Cloud Monitoring\"\"\"\n"
  },
  {
    "path": "gcpdiag/runbook/monitoring/flags.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Contains flags specific to Cloud monitoring\"\"\"\n"
  },
  {
    "path": "gcpdiag/runbook/monitoring/generalized_steps.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Contains generalized steps for Cloud monitoring\"\"\"\nfrom gcpdiag import runbook\nfrom gcpdiag.models import Resource\nfrom gcpdiag.queries import monitoring\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.gcp import flags\n\n\nclass TimeSeriesCheck(runbook.Step):\n  \"\"\"Assess if a given metric is has expected values..\n\n  Currently checks if an attribute\n  - Currently checks if metrics exists indicating a problem\n  - Improve to be more flexible.\n  \"\"\"\n  template = 'metrics::default'\n  query: str\n  query_kwargs: dict\n  resource: Resource\n\n  def execute(self):\n    \"\"\"Verify if expected metrics value is present or not\"\"\"\n    metrics = None\n    metrics = monitoring.query(op.get(flags.PROJECT_ID),\n                               self.query.format(self.query_kwargs))\n\n    if metrics:\n      op.add_failed(self.resource,\n                    reason=op.prep_msg(op.FAILURE_REASON),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n    else:\n      op.add_ok(self.resource, reason=op.prep_msg(op.SUCCESS_REASON))\n"
  },
  {
    "path": "gcpdiag/runbook/monitoring/templates/metrics.jinja",
    "content": "{% block default_success_reason %}\nThe expected good value is present within the checked metric collection.\n{% endblock default_success_reason %}\n\n{% block default_failure_reason %}\nA known bad value is present within the checked metric collection.\n{% endblock default_failure_reason %}\n\n{% block default_failure_remediation %}\nReview the metric data in Cloud Monitoring for more details.\n\nAlternatively, run the following Cloud Logging query:\n\nQuery:\n{query}\n{% endblock default_failure_remediation %}\n\n{% block default_uncertain_reason %}\nThe metric data analysis was inconclusive. Manual investigation using Cloud Logging is recommended.\n{% endblock default_uncertain_reason %}\n\n{% block default_uncertain_remediation %}\nReview the metric data in Cloud Monitoring for more details.\n\nAlternatively, run the following Cloud Logging query:\n\nQuery:\n{query}\n{% endblock default_uncertain_remediation %}\n"
  },
  {
    "path": "gcpdiag/runbook/nat/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/runbook/nat/constants.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Common constants used within runbook\"\"\"\n"
  },
  {
    "path": "gcpdiag/runbook/nat/flags.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Common flags applicable to any runbook\"\"\"\n# pylint: disable=wildcard-import, unused-wildcard-import\nfrom gcpdiag.runbook.gcp.flags import *\n\nPROJECT_ID = 'project_id'\nPROJECT_NUMBER = 'project_number'\nNETWORK = 'network'\nNAT_NETWORK = 'nat_network'\nREGION = 'region'\nNAT_GATEWAY_NAME = 'nat_gateway_name'\nCLOUD_ROUTER_NAME = 'cloud_router_name'\n\nFOLDER_ID = 'folder_id'\nORG_ID = 'org_id'\nNAME = 'name'\nID = 'id'\nZONE = 'zone'\nINTERACTIVE_MODE = 'auto'\n"
  },
  {
    "path": "gcpdiag/runbook/nat/generalized_steps.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Contains Reusable Steps for NAT related Diagnostic Trees\"\"\"\n\nfrom gcpdiag import runbook\nfrom gcpdiag.queries import gce, monitoring\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.nat import utils\nfrom gcpdiag.runbook.vpc import flags\n\n\nclass NatIpExhaustionCheck(runbook.Step):\n  \"\"\"Evaluates NATGW for NAT IP exhaustion/allocation issues.\n\n  This step determines whether Cloud NAT has run into issues due to insufficient NAT IP addresses.\n  \"\"\"\n\n  template = 'nat_out_of_resources::nat_ip_exhaustion_check'\n\n  def execute(self):\n    \"\"\"Checking  NAT Allocation failed metric for NAT IP allocation failure\"\"\"\n\n    vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID),\n                          zone=op.get(flags.ZONE),\n                          instance_name=op.get(flags.INSTANCE_NAME))\n\n    region = utils.region_from_zone(op.get(flags.ZONE))\n\n    if op.get('nat_gateway_name'):\n      gw_name = op.get('nat_gateway_name')\n      nat_allocation_failed = monitoring.query(\n          op.get(flags.PROJECT_ID),\n          'fetch nat_gateway::router.googleapis.com/nat/nat_allocation_failed '\n          f'| filter (resource.gateway_name == \\'{gw_name}\\' && resource.region == \\'{region}\\')'\n          ' | within 5m')\n\n      if nat_allocation_failed:\n        values = nat_allocation_failed.values()\n        for value in values:\n          if value.get('values')[0][0]:\n            op.add_failed(vm,\n                          reason=op.prep_msg(\n                              op.FAILURE_REASON,\n                              nat_gateway_name=op.get('nat_gateway_name')),\n                          remediation=op.prep_msg(\n                              op.FAILURE_REMEDIATION,\n                              nat_gateway_name=op.get('nat_gateway_name')))\n          else:\n            op.add_ok(vm,\n                      reason=op.prep_msg(\n                          op.SUCCESS_REASON,\n                          nat_gateway_name=op.get('nat_gateway_name')))\n    else:\n      op.add_uncertain(\n          vm,\n          f\"Cloud not get IP allocation failed metric for NATGW {op.get('nat_gateway_name')}\"\n      )\n\n\nclass NatResourceExhaustionCheck(runbook.Step):\n  \"\"\"Evaluates NATGW for OUT_OF_RESOURCES and ENDPOINT_INDEPENDENCE_CONFLICT issues.\n\n\n  This step determines whether Cloud NAT has run into resource issues.\n  \"\"\"\n\n  template = 'nat_out_of_resources::nat_resource_exhaustion_check'\n\n  def execute(self):\n    \"\"\"Checking NATGW for OUT_OF_RESOURCES or ENDPOINT_INDEPENDENCE_CONFLICT issues\"\"\"\n\n    vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID),\n                          zone=op.get(flags.ZONE),\n                          instance_name=op.get(flags.INSTANCE_NAME))\n\n    region = utils.region_from_zone(op.get(flags.ZONE))\n\n    if op.get('nat_gateway_name'):\n      gw_name = op.get('nat_gateway_name')\n      dropped_sent_packets_count = monitoring.query(\n          op.get(flags.PROJECT_ID),\n          'fetch nat_gateway::router.googleapis.com/nat/dropped_sent_packets_count '\n          f'| filter (resource.gateway_name == \\'{gw_name}\\' '\n          f'&& resource.region == \\'{region}\\')'\n          '| align rate(10m)'\n          '| within 10m | group_by [metric.reason],'\n          ' [value_dropped_sent_packets_count_aggregate: '\n          'aggregate(value.dropped_sent_packets_count)]')\n\n      if dropped_sent_packets_count:\n        values = dropped_sent_packets_count.values()\n        for value in values:\n          if value.get('values')[0][0]:\n            op.add_failed(vm,\n                          reason=op.prep_msg(\n                              op.FAILURE_REASON,\n                              metric_reason=value.get('labels',\n                                                      {}).get('metric.reason'),\n                              nat_gateway_name=op.get('nat_gateway_name')),\n                          remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n          else:\n            op.add_ok(vm,\n                      reason=op.prep_msg(\n                          op.SUCCESS_REASON,\n                          nat_gateway_name=op.get('nat_gateway_name'),\n                          metric_reason=value.get('labels',\n                                                  {}).get('metric.reason')))\n    else:\n      op.add_uncertain(\n          vm,\n          f\"Cloud not get dropped sent packets count metric for NATGW {op.get('nat_gateway_name')}\"\n      )\n\n\nclass NatDroppedReceivedPacketCheck(runbook.Step):\n  \"\"\"Evaluates NATGW received_packets_dropped metric for issues.\n\n\n  This step determines whether the NATGW is dropping packets. NAT gateways could be dropping\n  packets for various reasons; however, the drops are not always indicative of an issue\n  \"\"\"\n\n  template = 'nat_out_of_resources::nat_dropped_received_packet_check'\n\n  def execute(self):\n    \"\"\"Checking NATGW received_packets_dropped metric for elevated drops\"\"\"\n\n    vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID),\n                          zone=op.get(flags.ZONE),\n                          instance_name=op.get(flags.INSTANCE_NAME))\n\n    region = utils.region_from_zone(op.get(flags.ZONE))\n\n    if op.get('nat_gateway_name'):\n      gw_name = op.get('nat_gateway_name')\n      received_packets_dropped = monitoring.query(\n          op.get(flags.PROJECT_ID),\n          'fetch nat_gateway::router.googleapis.com/nat/dropped_received_packets_count '\n          f'| filter (resource.gateway_name == \\'{gw_name}\\' && resource.region == \\'{region}\\')'\n          '| align rate(5m) | within 5m | group_by [],'\n          '[value_dropped_received_packets_count_aggregate:'\n          'aggregate(value.dropped_received_packets_count)]')\n\n      if received_packets_dropped:\n        values = received_packets_dropped.values()\n        for value in values:\n          if value.get('values')[0][0] >= 1:\n\n            op.put('natgw_rcv_pkt_drops', True)\n\n            op.add_uncertain(vm,\n                             reason=op.prep_msg(\n                                 op.UNCERTAIN_REASON,\n                                 nat_gateway_name=op.get('nat_gateway_name'),\n                                 metric_value=value.get('values')[0][0]),\n                             remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION))\n\n            # Also check the for received packet drops at the vm level\n            vm_received_packets_dropped_count = monitoring.query(\n                op.get(flags.PROJECT_ID),\n                'fetch gce_instance::compute.googleapis.com/nat/dropped_received_packets_count '\n                f'| filter (resource.gateway_name == \\'{gw_name}\\' '\n                f'&& resource.region == \\'{region}\\')'\n                '| align rate(5m)'\n                '| every 5m'\n                '| group_by [resource.instance_id], '\n                '[value_dropped_received_packets_count_aggregate: '\n                'aggregate(value.dropped_received_packets_count)]')\n\n            if vm_received_packets_dropped_count:\n              vm_drop_list = []\n              vm_values = vm_received_packets_dropped_count.values()\n              for vm_value in vm_values:\n                if vm_value.get('values')[0][0] >= 1 and len(vm_drop_list) <= 5:\n                  vm_drop_list.append({\n                      'instance_id':\n                          vm_value.get('labels',\n                                       {}).get('resource.instance_id'),\n                      'rcv_pkt_drp_count':\n                          vm_value.get('values')[0][0]\n                  })\n\n              if vm_drop_list:\n                op.add_uncertain(\n                    vm,\n                    reason='Elevated received_packet_drop_count metric noticed'\n                    f'for following VMs {str(vm_drop_list)}',\n                    remediation=\n                    \"\"\"VMs could be dropping packets for various reasons; however,\n                    the drops are not always indicative of an issue.\n                    See more on troubleshooting cloud NAT and reducing the drops here [1] and [2]:\n                    Open a case to GCP Support for justification for the packet drops.\n                      [1] https://cloud.google.com/nat/docs/troubleshooting\n                      [2] https://cloud.google.com/knowledge/kb\n                      /reduce-received-packets-dropped-count-on-cloud-nat-000006744\"\"\"\n                )\n              else:\n                op.add_ok(vm, reason=op.prep_msg(op.SUCCESS_REASON))\n          else:\n            op.add_ok(vm,\n                      reason=op.prep_msg(\n                          op.SUCCESS_REASON,\n                          nat_gateway_name=op.get('nat_gateway_name')))\n    else:\n      op.add_uncertain(\n          vm, 'Cloud not get dropped_received_packets_count'\n          f\"metric for NATGW {op.get('nat_gateway_name')}\")\n"
  },
  {
    "path": "gcpdiag/runbook/nat/generalized_steps_test.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Reusable Steps for NAT related Diagnostic Trees\"\"\"\n\nimport datetime\nimport unittest\nfrom unittest import mock\n\nfrom gcpdiag.queries import apis_stub\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.nat import generalized_steps\nfrom gcpdiag.runbook.vpc import flags\n\n\nclass MockMessage:\n  \"\"\"Mock messages for testing.\n\n  Simply returns the key to verify template usage.\n  \"\"\"\n\n  def get_msg(self, key, **kwargs):\n    del kwargs\n    return f'{key}'\n\n\nclass MockMonitoringResult:\n\n  def __init__(self, data):\n    self._data = data\n\n  def values(self):\n    return self._data\n\n  def __bool__(self):\n    return bool(self._data)\n\n\ndef make_ip_exhaustion_result(is_failed):\n  if is_failed is None:\n    return None\n  return MockMonitoringResult([{'values': [[is_failed]]}])\n\n\ndef make_resource_exhaustion_result(value, reason='OUT_OF_RESOURCES'):\n  if value is None:\n    return None\n  return MockMonitoringResult([{\n      'values': [[value]],\n      'labels': {\n          'metric.reason': reason\n      }\n  }])\n\n\ndef make_dropped_received_packet_result(value):\n  if value is None:\n    return None\n  return MockMonitoringResult([{'values': [[value]]}])\n\n\ndef make_vm_dropped_received_packet_result(vm_drops):\n  # vm_drops is a list of tuples: (instance_id, drop_count)\n  data = []\n  for instance_id, drop_count in vm_drops:\n    data.append({\n        'values': [[drop_count]],\n        'labels': {\n            'resource.instance_id': instance_id\n        }\n    })\n  return MockMonitoringResult(data)\n\n\nclass NatStepsTest(unittest.TestCase):\n\n  def setUp(self):\n    super().setUp()\n    self.enterContext(\n        mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub))\n    self.mock_monitoring_query = self.enterContext(\n        mock.patch('gcpdiag.queries.monitoring.query'))\n    self.mock_region_from_zone = self.enterContext(\n        mock.patch('gcpdiag.runbook.nat.utils.region_from_zone',\n                   return_value='us-central1'))\n\n    self.mock_interface = mock.create_autospec(op.InteractionInterface,\n                                               instance=True)\n    self.mock_interface.rm = mock.Mock()\n    self.operator = op.Operator(self.mock_interface)\n    self.operator.run_id = 'test-run'\n    self.operator.messages = MockMessage()\n    self.params = {\n        flags.PROJECT_ID:\n            'gcpdiag-nat1-aaaa',\n        flags.ZONE:\n            'us-central1-a',\n        flags.INSTANCE_NAME:\n            'instance-1',\n        'nat_gateway_name':\n            'nat-gw-1',\n        'start_time':\n            datetime.datetime(2025, 1, 1, 0, 0, 0,\n                              tzinfo=datetime.timezone.utc),\n        'end_time':\n            datetime.datetime(2025, 1, 1, 1, 0, 0,\n                              tzinfo=datetime.timezone.utc),\n    }\n\n  def test_nat_ip_exhaustion_check_failed(self):\n    self.mock_monitoring_query.return_value = make_ip_exhaustion_result(\n        is_failed=True)\n    step = generalized_steps.NatIpExhaustionCheck()\n    with op.operator_context(self.operator):\n      self.operator.parameters = self.params\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n    self.mock_interface.add_ok.assert_not_called()\n    self.mock_interface.add_uncertain.assert_not_called()\n\n  def test_nat_ip_exhaustion_check_ok(self):\n    self.mock_monitoring_query.return_value = make_ip_exhaustion_result(\n        is_failed=False)\n    step = generalized_steps.NatIpExhaustionCheck()\n    with op.operator_context(self.operator):\n      self.operator.parameters = self.params\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_not_called()\n    self.mock_interface.add_ok.assert_called_once()\n    self.mock_interface.add_uncertain.assert_not_called()\n\n  def test_nat_ip_exhaustion_check_no_gw_name(self):\n    self.params['nat_gateway_name'] = None\n    step = generalized_steps.NatIpExhaustionCheck()\n    with op.operator_context(self.operator):\n      self.operator.parameters = self.params\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_not_called()\n    self.mock_interface.add_ok.assert_not_called()\n    self.mock_interface.add_uncertain.assert_called_once()\n\n  def test_nat_ip_exhaustion_check_no_monitoring_data(self):\n    self.mock_monitoring_query.return_value = make_ip_exhaustion_result(\n        is_failed=None)\n    step = generalized_steps.NatIpExhaustionCheck()\n    with op.operator_context(self.operator):\n      self.operator.parameters = self.params\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_not_called()\n    self.mock_interface.add_failed.assert_not_called()\n    self.mock_interface.add_uncertain.assert_not_called()\n\n\nclass NatResourceExhaustionCheckTest(NatStepsTest):\n\n  def test_nat_resource_exhaustion_check_failed(self):\n    self.mock_monitoring_query.return_value = make_resource_exhaustion_result(\n        value=1)\n    step = generalized_steps.NatResourceExhaustionCheck()\n    with op.operator_context(self.operator):\n      self.operator.parameters = self.params\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n    self.mock_interface.add_ok.assert_not_called()\n    self.mock_interface.add_uncertain.assert_not_called()\n\n  def test_nat_resource_exhaustion_check_ok(self):\n    self.mock_monitoring_query.return_value = make_resource_exhaustion_result(\n        value=0)\n    step = generalized_steps.NatResourceExhaustionCheck()\n    with op.operator_context(self.operator):\n      self.operator.parameters = self.params\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_not_called()\n    self.mock_interface.add_ok.assert_called_once()\n    self.mock_interface.add_uncertain.assert_not_called()\n\n  def test_nat_resource_exhaustion_check_no_gw_name(self):\n    self.params['nat_gateway_name'] = None\n    step = generalized_steps.NatResourceExhaustionCheck()\n    with op.operator_context(self.operator):\n      self.operator.parameters = self.params\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_not_called()\n    self.mock_interface.add_ok.assert_not_called()\n    self.mock_interface.add_uncertain.assert_called_once()\n\n  def test_nat_resource_exhaustion_check_no_monitoring_data(self):\n    self.mock_monitoring_query.return_value = make_resource_exhaustion_result(\n        None)\n    step = generalized_steps.NatResourceExhaustionCheck()\n    with op.operator_context(self.operator):\n      self.operator.parameters = self.params\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_not_called()\n    self.mock_interface.add_failed.assert_not_called()\n    self.mock_interface.add_uncertain.assert_not_called()\n\n\nclass NatDroppedReceivedPacketCheckTest(NatStepsTest):\n\n  def test_nat_dropped_received_packet_check_ok(self):\n    self.mock_monitoring_query.return_value = make_dropped_received_packet_result(\n        0)\n    step = generalized_steps.NatDroppedReceivedPacketCheck()\n    with op.operator_context(self.operator):\n      self.operator.parameters = self.params\n      self.operator.set_step(step)\n      step.execute()\n      self.assertNotIn('natgw_rcv_pkt_drops', self.operator.parameters)\n    self.mock_interface.add_failed.assert_not_called()\n    self.mock_interface.add_ok.assert_called_once()\n    self.mock_interface.add_uncertain.assert_not_called()\n\n  def test_nat_dropped_received_packet_check_no_gw_name(self):\n    self.params['nat_gateway_name'] = None\n    step = generalized_steps.NatDroppedReceivedPacketCheck()\n    with op.operator_context(self.operator):\n      self.operator.parameters = self.params\n      self.operator.set_step(step)\n      step.execute()\n      self.assertNotIn('natgw_rcv_pkt_drops', self.operator.parameters)\n    self.mock_interface.add_failed.assert_not_called()\n    self.mock_interface.add_ok.assert_not_called()\n    self.mock_interface.add_uncertain.assert_called_once()\n\n  def test_nat_dropped_received_packet_check_no_monitoring_data(self):\n    self.mock_monitoring_query.return_value = make_dropped_received_packet_result(\n        None)\n    step = generalized_steps.NatDroppedReceivedPacketCheck()\n    with op.operator_context(self.operator):\n      self.operator.parameters = self.params\n      self.operator.set_step(step)\n      step.execute()\n      self.assertNotIn('natgw_rcv_pkt_drops', self.operator.parameters)\n    self.mock_interface.add_ok.assert_not_called()\n    self.mock_interface.add_failed.assert_not_called()\n    self.mock_interface.add_uncertain.assert_not_called()\n\n  def test_nat_dropped_received_packet_check_gw_drops_no_vm_drops_data(self):\n    self.mock_monitoring_query.side_effect = [\n        make_dropped_received_packet_result(1), None\n    ]\n    step = generalized_steps.NatDroppedReceivedPacketCheck()\n    with op.operator_context(self.operator):\n      self.operator.parameters = self.params\n      self.operator.set_step(step)\n      step.execute()\n      self.assertEqual(op.get('natgw_rcv_pkt_drops'), True)\n    self.mock_interface.add_failed.assert_not_called()\n    self.mock_interface.add_ok.assert_not_called()\n    self.mock_interface.add_uncertain.assert_called_once()\n\n  def test_nat_dropped_received_packet_check_gw_drops_vm_drops_below_threshold(\n      self):\n    self.mock_monitoring_query.side_effect = [\n        make_dropped_received_packet_result(1),\n        make_vm_dropped_received_packet_result([('vm1', 0.5), ('vm2', 0)])\n    ]\n    step = generalized_steps.NatDroppedReceivedPacketCheck()\n    with op.operator_context(self.operator):\n      self.operator.parameters = self.params\n      self.operator.set_step(step)\n      step.execute()\n      self.assertEqual(op.get('natgw_rcv_pkt_drops'), True)\n    self.mock_interface.add_failed.assert_not_called()\n    self.mock_interface.add_ok.assert_called_once()\n    self.assertEqual(self.mock_interface.add_uncertain.call_count, 1)\n\n  def test_nat_dropped_received_packet_check_gw_drops_with_vm_drops(self):\n    self.mock_monitoring_query.side_effect = [\n        make_dropped_received_packet_result(1),\n        make_vm_dropped_received_packet_result([('vm1', 2), ('vm2', 0)])\n    ]\n    step = generalized_steps.NatDroppedReceivedPacketCheck()\n    with op.operator_context(self.operator):\n      self.operator.parameters = self.params\n      self.operator.set_step(step)\n      step.execute()\n      self.assertEqual(op.get('natgw_rcv_pkt_drops'), True)\n    self.mock_interface.add_failed.assert_not_called()\n    self.mock_interface.add_ok.assert_not_called()\n    self.assertEqual(self.mock_interface.add_uncertain.call_count, 2)\n"
  },
  {
    "path": "gcpdiag/runbook/nat/out_of_resources.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Class for nat/Out_of_resources\"\"\"\n"
  },
  {
    "path": "gcpdiag/runbook/nat/out_of_resources_test.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test class for nat/Out_of_resources\"\"\"\n"
  },
  {
    "path": "gcpdiag/runbook/nat/public_nat_ip_allocation_failed.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Module containing NAT IP Allocation Failed debugging tree and custom steps\"\"\"\n\nimport googleapiclient.errors\n\nfrom gcpdiag import config, models, runbook\nfrom gcpdiag.queries import crm, monitoring, network\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.nat import flags\n\n\nclass PublicNatIpAllocationFailed(runbook.DiagnosticTree):\n  \"\"\"Troubleshooting for IP Allocation issues for Cloud NAT.\n\n  This runbook investigates Cloud NAT for NAT IP Allocation failed issue and proposes\n  remediation steps.\n\n  Areas Examined:\n\n    - Metric check: Checks the NAT Allocation Failed metric for the provided NATGW if it is\n    True or False.\n\n    - NATGW Configuration: Checks the gateway if it is configured with manual or automatic IP\n    allocation.\n\n    - NAT IP and Port calculation: For source nic without an External IP address,\n      verify the VM is served by a Public NAT Gateway and check there are no issues on the NATGW.\n    \"\"\"\n\n  parameters = {\n      flags.PROJECT_ID: {\n          'type': str,\n          'help': 'The Project ID of the resource under investigation',\n          'required': True\n      },\n      flags.NAT_GATEWAY_NAME: {\n          'type': str,\n          'help': 'The name of the NATGW',\n          'required': True\n      },\n      flags.CLOUD_ROUTER_NAME: {\n          'type': str,\n          'help': 'The name of the Cloud Router of the NATGW',\n          'required': True\n      },\n      flags.NETWORK: {\n          'type': str,\n          'help': 'The VPC network of the target NATGW',\n          'new_parameter': 'nat_network',\n          'deprecated': True,\n      },\n      flags.NAT_NETWORK: {\n          'type': str,\n          'help': 'The VPC network of the target NATGW',\n          'required': True\n      },\n      flags.REGION: {\n          'type': str,\n          'help': 'The region of the target NATGW',\n          'required': True\n      }\n  }\n\n  def legacy_parameter_handler(self, parameters):\n    \"\"\"Handles legacy parameters.\"\"\"\n    if flags.NETWORK in parameters:\n      parameters[flags.NAT_NETWORK] = parameters.pop(flags.NETWORK)\n\n  def build_tree(self):\n    \"\"\"Construct the diagnostic tree with appropriate steps.\"\"\"\n    # Instantiate step classes\n    start = NatIpAllocationFailedStart()\n    nat_allocation_failed_check = NatAllocationFailedCheck()\n    nat_gw_ip_allocation_method_check = NatIpAllocationMethodCheck()\n\n    # add to the debugging tree\n    self.add_start(start)\n    # Describe the step relationships\n    self.add_step(parent=start, child=nat_allocation_failed_check)\n    self.add_step(parent=nat_allocation_failed_check,\n                  child=nat_gw_ip_allocation_method_check)\n    # Ending your runbook\n    self.add_end(NatIpAllocationFailedEnd())\n\n\nclass NatIpAllocationFailedStart(runbook.StartStep):\n  \"\"\"Start Nat IP Allocation Failed Checks.\n\n\n  This step steps starts the NAT IP Allocation Failed Check debugging process by\n  verifying the correct input parameters have been provided and checking to ensure\n  that the following resources exist.\n    - The Project\n    - VPC Network\n    - The NAT Cloud Router\n  \"\"\"\n\n  template = 'nat_ip_allocation_failed::confirmation'\n\n  def execute(self):\n    \"\"\"Starting Nat IP Allocation Failed diagnostics\"\"\"\n    project = crm.get_project(op.get(flags.PROJECT_ID))\n    context = models.Context(project_id=op.get(flags.PROJECT_ID))\n    # try to fetch the network for the NATGW\n    try:\n      vpc_network = network.get_network(\n          project_id=context.project_id,\n          network_name=op.get(flags.NAT_NETWORK),\n          context=context,\n      )\n    except googleapiclient.errors.HttpError:\n      op.add_skipped(\n          project,\n          reason=op.prep_msg(\n              op.SKIPPED_REASON,\n              network=op.get(flags.NAT_NETWORK),\n              project_id=op.get(flags.PROJECT_ID),\n          ),\n      )\n      return\n    # try to get the cloud router\n    try:\n      routers = network.get_routers(\n          project_id=op.get(flags.PROJECT_ID),\n          region=op.get(flags.REGION),\n          network=vpc_network,\n      )\n    except googleapiclient.errors.HttpError:\n      op.add_skipped(\n          project,\n          reason=op.prep_msg(\n              op.SKIPPED_REASON_ALT1,\n              cloud_router=op.get(flags.CLOUD_ROUTER_NAME),\n              region=op.get(flags.REGION),\n              project_id=op.get(flags.PROJECT_ID),\n          ),\n      )\n      return\n    if routers:\n      # Check that the cloud router name passed is valid.\n      router = [r for r in routers if r.name == op.get(flags.CLOUD_ROUTER_NAME)]\n      if not router:\n        op.add_skipped(\n            project,\n            reason=op.prep_msg(\n                op.SKIPPED_REASON_ALT2,\n                cloud_router=op.get(flags.CLOUD_ROUTER_NAME),\n                region=op.get(flags.REGION),\n                project_id=op.get(flags.PROJECT_ID),\n            ),\n        )\n        return\n      # Check that the natgateway name passed is served by the cloud router.\n      nat_router = router[0]\n      if not [\n          n for n in nat_router.nats\n          if n['name'] == op.get(flags.NAT_GATEWAY_NAME)\n      ]:\n        op.add_skipped(\n            project,\n            reason=op.prep_msg(\n                op.SKIPPED_REASON_ALT3,\n                cloud_router=op.get(flags.NAT_GATEWAY_NAME),\n                region=op.get(flags.REGION),\n                project_id=op.get(flags.PROJECT_ID),\n            ),\n        )\n\n\nclass NatAllocationFailedCheck(runbook.Step):\n  \"\"\"Checks NAT Allocation failed metric for the NATGW.\n\n  This step determines whether Cloud NAT has run into issues due to insufficient\n  NAT IP addresses.\n  by checking the NAT Allocation failed metric.\n  \"\"\"\n\n  template = 'nat_ip_allocation_failed::nat_allocation_metric_check'\n\n  def execute(self):\n    \"\"\"Checking the nat_allocation_failed metric for NAT IP allocation failure\n      and the NAT router status.\n    \"\"\"\n\n    project = crm.get_project(op.get(flags.PROJECT_ID))\n\n    gw_name = op.get(flags.NAT_GATEWAY_NAME)\n    region = op.get(flags.REGION)\n    min_extra_ips_needed = 0\n    vms_with_nat_mappings = 0\n    # check the nat router status\n    router_status = network.nat_router_status(\n        project_id=op.get(flags.PROJECT_ID),\n        router_name=op.get(flags.CLOUD_ROUTER_NAME),\n        region=op.get(flags.REGION))\n    if not router_status:\n      op.info('unable to fetch router status for the router: %s',\n              op.get(flags.CLOUD_ROUTER_NAME))\n    else:\n      min_extra_ips_needed = router_status.min_extra_nat_ips_needed\n      vms_with_nat_mappings = router_status.num_vms_with_nat_mappings\n\n    nat_allocation_failed = monitoring.query(\n        op.get(flags.PROJECT_ID),\n        'fetch nat_gateway::router.googleapis.com/nat/nat_allocation_failed '\n        f'| filter (resource.gateway_name == \\'{gw_name}\\' && resource.region == \\'{region}\\')'\n        ' | within 5m')\n\n    if nat_allocation_failed:\n      values = nat_allocation_failed.values()\n      for value in values:\n        if value.get('values')[0][0] or min_extra_ips_needed:\n          op.add_failed(project,\n                        reason=op.prep_msg(\n                            op.FAILURE_REASON,\n                            nat_gateway_name=op.get(flags.NAT_GATEWAY_NAME),\n                            router_name=op.get(flags.CLOUD_ROUTER_NAME),\n                            min_extra_ips_needed=min_extra_ips_needed,\n                            vms_with_nat_mappings=vms_with_nat_mappings),\n                        remediation=op.prep_msg(\n                            op.FAILURE_REMEDIATION,\n                            nat_gateway_name=op.get(flags.NAT_GATEWAY_NAME),\n                            router_name=op.get(flags.CLOUD_ROUTER_NAME),\n                            min_extra_ips_needed=min_extra_ips_needed,\n                            vms_with_nat_mappings=vms_with_nat_mappings))\n        else:\n          op.add_ok(project,\n                    reason=op.prep_msg(\n                        op.SUCCESS_REASON,\n                        nat_gateway_name=op.get(flags.NAT_GATEWAY_NAME),\n                        router_name=op.get(flags.CLOUD_ROUTER_NAME),\n                        min_extra_ips_needed=min_extra_ips_needed,\n                        vms_with_nat_mappings=vms_with_nat_mappings))\n          op.add_skipped(project,\n                         reason=op.prep_msg(\n                             op.SKIPPED_REASON,\n                             nat_gateway_name=op.get(flags.NAT_GATEWAY_NAME),\n                             router_name=op.get(flags.CLOUD_ROUTER_NAME)))\n    else:\n      op.add_uncertain(project,\n                       reason=op.prep_msg(op.UNCERTAIN_REASON,\n                                          nat_gateway_name=op.get(\n                                              flags.NAT_GATEWAY_NAME)),\n                       remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION,\n                                               nat_gateway_name=op.get(\n                                                   flags.NAT_GATEWAY_NAME)))\n\n\nclass NatIpAllocationMethodCheck(runbook.Gateway):\n  \"\"\"Checks the NATGW configuration to determine next troubleshooting steps.\n\n  Checks if the NATGW router is configured with manual or automatic IP allocation\n  \"\"\"\n\n  template = 'nat_ip_allocation_failed::nat_allocation_method_check'\n\n  def execute(self):\n    \"\"\"Checking the NATGW configuration.\"\"\"\n\n    project = crm.get_project(op.get(flags.PROJECT_ID))\n    context = models.Context(project_id=op.get(flags.PROJECT_ID))\n\n    # try to fetch the network for the NATGW\n    try:\n      vpc_network = network.get_network(project_id=context.project_id,\n                                        network_name=op.get(flags.NAT_NETWORK),\n                                        context=context)\n    except googleapiclient.errors.HttpError:\n      op.add_skipped(\n          project,\n          reason=\n          (\"\"\"Unable to fetch the network {} confirm it exists in the project {}\"\"\"\n          ).format(op.get(flags.NAT_NETWORK), op.get(flags.PROJECT_ID)))\n      return\n    # try to get the router\n    try:\n      routers = network.get_routers(project_id=op.get(flags.PROJECT_ID),\n                                    region=op.get(flags.REGION),\n                                    network=vpc_network)\n    except googleapiclient.errors.HttpError:\n      op.add_skipped(project,\n                     reason=(\"\"\"Failed to fetch routers in the vpc network {}\n                  does not exist in region {} of project {}\"\"\").format(\n                         op.get(flags.NAT_NETWORK), op.get(flags.REGION),\n                         op.get(flags.PROJECT_ID)))\n      return\n    if routers:\n      # filter routers for the cloud router name specified for the gateway.\n      router = [r for r in routers if r.name == op.get(flags.CLOUD_ROUTER_NAME)]\n      if router:\n        nat_router = router[0]\n        if nat_router.get_nat_ip_allocate_option(\n            nat_gateway=op.get(flags.NAT_GATEWAY_NAME)) == 'AUTO_ONLY':\n          self.add_child(NatIpAllocationAutoOnly())\n        else:\n          self.add_child(NatIpAllocationManualOnly())\n      else:\n        op.add_skipped(project,\n                       reason=\"\"\"\n          No Cloud router with the name: {} found.\n          \"\"\".format(op.get(flags.CLOUD_ROUTER_NAME)))\n\n\nclass NatIpAllocationAutoOnly(runbook.Step):\n  \"\"\"Provides recommendations when NAT IP allocation is AUTO_ONLY.\n\n  NAT IP allocation is configured as AUTO_ONLY, either:\n    - Switch to Manual NAT IP assignment or\n    - Add one more gateway in the same network and region\n  \"\"\"\n\n  template = 'nat_ip_allocation_failed::nat_allocation_auto_only'\n\n  def execute(self):\n    \"\"\"NAT IP allocation is configured as AUTO_ONLY.\"\"\"\n    project = crm.get_project(op.get(flags.PROJECT_ID))\n\n    op.add_failed(project,\n                  reason=op.prep_msg(op.FAILURE_REASON,\n                                     nat_gateway_name=op.get(\n                                         flags.NAT_GATEWAY_NAME)),\n                  remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n\n\nclass NatIpAllocationManualOnly(runbook.Step):\n  \"\"\"Investigates when NAT IP allocation is MANUAL_ONLY.\n\n  If the NAT IP allocation is configured as MANUAL_ONLY:\n    - Confirm if the number of NAT IP's required by the gateway is over 300\n    - Follow the NAT IP Quota Increase Process\n  \"\"\"\n\n  template = 'nat_ip_allocation_failed::nat_allocation_manual_only'\n\n  def execute(self):\n    \"\"\"NAT IP allocation is configured with MANUAL_ONLY.\n\n    Running diagnostic for NAT Gateway configured as MANUAL_ONLY only\n    \"\"\"\n    project = crm.get_project(op.get(flags.PROJECT_ID))\n    context = models.Context(project_id=op.get(flags.PROJECT_ID))\n    enable_dynamic_port_allocation = None\n    nat_gw_ips_in_use = None\n    min_extra_ips_needed = 0\n    vms_with_nat_mappings = 0\n\n    # try to fetch the network for the NATGW\n    try:\n      vpc_network = network.get_network(project_id=context.project_id,\n                                        network_name=op.get(flags.NAT_NETWORK),\n                                        context=context)\n    except googleapiclient.errors.HttpError:\n      op.add_skipped(\n          project,\n          reason=\n          (\"\"\"Unable to fetch the network {} confirm it exists in the project {}\"\"\"\n          ).format(op.get(flags.NAT_NETWORK), op.get(flags.PROJECT_ID)))\n      return\n    # try to get the router\n    try:\n      routers = network.get_routers(project_id=op.get(flags.PROJECT_ID),\n                                    region=op.get(flags.REGION),\n                                    network=vpc_network)\n    except googleapiclient.errors.HttpError:\n      op.add_skipped(project,\n                     reason=(\"\"\"Failed to fetch routers in the vpc network {}\n                  does not exist in region {} of project {}\"\"\").format(\n                         op.get(flags.NAT_NETWORK), op.get(flags.REGION),\n                         op.get(flags.PROJECT_ID)))\n      return\n    if routers:\n      # filter for the cloud router name specified.\n      router = [r for r in routers if r.name == op.get(flags.CLOUD_ROUTER_NAME)]\n      if router:\n        nat_router = router[0]\n        enable_dynamic_port_allocation = nat_router.get_enable_dynamic_port_allocation(\n            op.get(flags.NAT_GATEWAY_NAME))\n    else:\n      op.add_skipped(project,\n                     reason=(\"\"\"\n          No Cloud router with the name: {} found.\n          \"\"\").format(op.get(flags.CLOUD_ROUTER_NAME)))\n      return\n\n    # Check the nat router status for number of additional NAT IP addresses needed\n    router_status = network.nat_router_status(\n        project_id=op.get(flags.PROJECT_ID),\n        router_name=op.get(flags.CLOUD_ROUTER_NAME),\n        region=op.get(flags.REGION))\n    if not router_status:\n      op.info('unable to fetch router status for the router: %s',\n              op.get(flags.CLOUD_ROUTER_NAME))\n    else:\n      min_extra_ips_needed = router_status.min_extra_nat_ips_needed\n      vms_with_nat_mappings = router_status.num_vms_with_nat_mappings\n\n    # get the NAT IP info mappings for the NAT Gateway\n    router_nat_ip_info = network.get_nat_ip_info(\n        project_id=op.get(flags.PROJECT_ID),\n        router_name=op.get(flags.CLOUD_ROUTER_NAME),\n        region=op.get(flags.REGION))\n\n    result = router_nat_ip_info.result\n\n    if result and op.get(flags.NAT_GATEWAY_NAME) in str(result):\n      nat_gw_ip_info = [\n          n for n in result if n['natName'] == op.get(flags.NAT_GATEWAY_NAME)\n      ]\n      nat_gw_ip_mappings = nat_gw_ip_info[0]['natIpInfoMappings']\n      nat_gw_ips_in_use = len(\n          [ip for ip in nat_gw_ip_mappings if ip['usage'] == 'IN_USE'])\n\n    op.add_ok(project,\n              reason=op.prep_msg(\n                  op.SUCCESS_REASON,\n                  router_name=op.get(flags.CLOUD_ROUTER_NAME),\n                  extra_ips_needed=min_extra_ips_needed,\n                  vms_with_nat_mappings=vms_with_nat_mappings,\n                  enable_dynamic_port_allocation=enable_dynamic_port_allocation,\n                  nat_gw_ips_in_use=nat_gw_ips_in_use))\n\n    if min_extra_ips_needed > 0 and nat_gw_ips_in_use > 299:\n      op.add_failed(project,\n                    reason=op.prep_msg(op.FAILURE_REASON),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n\n    if min_extra_ips_needed > 0 and nat_gw_ips_in_use < 300:\n      op.add_ok(project,\n                reason=op.prep_msg(op.SUCCESS_REASON_ALT1,\n                                   nat_gateway_name=op.get(\n                                       flags.NAT_GATEWAY_NAME)))\n\n\nclass NatIpAllocationFailedEnd(runbook.EndStep):\n  \"\"\"Concludes the NAT IP allocation failed diagnostics process.\n\n  If NAT allocation issues persist, it directs the user to helpful\n  resources and suggests contacting support with a detailed report.\n  \"\"\"\n\n  template = 'nat_ip_allocation_failed::endstep'\n\n  def execute(self):\n    \"\"\"Finalize NAT allocation failed diagnostics.\"\"\"\n    if not config.get(flags.INTERACTIVE_MODE):\n      response = op.prompt(\n          kind=op.CONFIRMATION,\n          message='Does the issue persist after taking remediation steps?',\n          choice_msg='Enter an option: ')\n      if response == op.NO:\n        op.info(message=op.END_MESSAGE)\n"
  },
  {
    "path": "gcpdiag/runbook/nat/public_nat_ip_allocation_failed_test.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test class for nat/nat_ip_allocation_failed\"\"\"\n\nimport datetime\nimport unittest\nfrom unittest import mock\n\nimport googleapiclient\n\nfrom gcpdiag import config\nfrom gcpdiag.queries import apis_stub, crm\nfrom gcpdiag.runbook import nat, op, snapshot_test_base\nfrom gcpdiag.runbook.nat import flags, public_nat_ip_allocation_failed\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = nat\n  runbook_name = 'nat/public-nat-ip-allocation-failed'\n  config.init({'auto': True, 'interface': 'cli'})\n\n  rule_parameters = [{\n      'project_id': 'gcpdiag-nat1-aaaa',\n      'region': 'europe-west4',\n      'nat_gateway_name': 'public-nat-gateway',\n      'cloud_router_name': 'public-nat-cloud-router',\n      'network': 'nat-vpc-network'\n  }]\n\n\nclass MockMessage:\n  \"\"\"Mock messages for testing.\n\n  Simply returns the key to verify template usage.\n  \"\"\"\n\n  def get_msg(self, key, **kwargs):\n    del kwargs\n    return f'{key}'\n\n\nclass MockMonitoringResult:\n\n  def __init__(self, data):\n    self._data = data\n\n  def values(self):\n    return self._data\n\n  def __bool__(self):\n    return bool(self._data)\n\n\ndef make_ip_exhaustion_result(is_failed):\n  if is_failed is None:\n    return None\n  return MockMonitoringResult([{'values': [[is_failed]]}])\n\n\nclass MockRouterStatus:\n\n  def __init__(self, min_extra_nat_ips_needed, num_vms_with_nat_mappings):\n    self.min_extra_nat_ips_needed = min_extra_nat_ips_needed\n    self.num_vms_with_nat_mappings = num_vms_with_nat_mappings\n\n\nclass MockNatIpInfo:\n\n  def __init__(self, result):\n    self.result = result\n\n\nclass MockRouter:\n  \"\"\"Mock network.Router object.\"\"\"\n\n  def __init__(self,\n               name,\n               nats,\n               ip_allocate_option='MANUAL_ONLY',\n               dynamic_ports=False):\n    self.name = name\n    self.nats = nats\n    self._ip_allocate_option = ip_allocate_option\n    self._dynamic_ports = dynamic_ports\n\n  def get_nat_ip_allocate_option(self, nat_gateway):\n    del nat_gateway\n    return self._ip_allocate_option\n\n  def get_enable_dynamic_port_allocation(self, nat_gateway):\n    del nat_gateway\n    return self._dynamic_ports\n\n\nclass PublicNatIpAllocationFailedTest(unittest.TestCase):\n\n  def setUp(self):\n    super().setUp()\n    self.mock_monitoring_query = self.enterContext(\n        mock.patch('gcpdiag.queries.monitoring.query'))\n    self.mock_get_project = self.enterContext(\n        mock.patch('gcpdiag.queries.crm.get_project'))\n    self.mock_get_network = self.enterContext(\n        mock.patch('gcpdiag.queries.network.get_network'))\n    self.mock_get_routers = self.enterContext(\n        mock.patch('gcpdiag.queries.network.get_routers'))\n    self.mock_nat_router_status = self.enterContext(\n        mock.patch('gcpdiag.queries.network.nat_router_status'))\n    self.mock_get_nat_ip_info = self.enterContext(\n        mock.patch('gcpdiag.queries.network.get_nat_ip_info'))\n    self.mock_get_api = self.enterContext(\n        mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub))\n\n    self.mock_interface = mock.create_autospec(op.InteractionInterface,\n                                               instance=True)\n    self.mock_interface.rm = mock.Mock()\n    self.operator = op.Operator(self.mock_interface)\n    self.operator.run_id = 'test-run'\n    self.operator.messages = MockMessage()\n    self.params = {\n        flags.PROJECT_ID:\n            'test-project',\n        flags.REGION:\n            'us-central1',\n        flags.NAT_GATEWAY_NAME:\n            'test-nat-gw',\n        flags.CLOUD_ROUTER_NAME:\n            'test-router',\n        flags.NAT_NETWORK:\n            'test-network',\n        'start_time':\n            datetime.datetime(2025, 1, 1, 0, 0, 0,\n                              tzinfo=datetime.timezone.utc),\n        'end_time':\n            datetime.datetime(2025, 1, 1, 1, 0, 0,\n                              tzinfo=datetime.timezone.utc),\n    }\n    self.mock_get_project.return_value = crm.Project({\n        'projectId': 'test-project',\n        'name': 'projects/123'\n    })\n    self.mock_get_network.return_value = mock.MagicMock()\n    self.op_get_dict = {\n        flags.PROJECT_ID: 'test-project',\n        'nat_gateway_name': 'test-nat-gw',\n    }\n\n  def test_legacy_parameter_handler_network_present(self):\n    \"\"\"Test that legacy 'network' parameter is moved to 'nat_network'.\"\"\"\n    params = {'network': 'legacy-network-value'}\n    tree = public_nat_ip_allocation_failed.PublicNatIpAllocationFailed()\n    tree.legacy_parameter_handler(params)\n    self.assertNotIn('network', params)\n    self.assertIn('nat_network', params)\n    self.assertEqual(params['nat_network'], 'legacy-network-value')\n\n  def test_start_step_get_network_fails(self):\n    \"\"\"Test start step when get_network throws HttpError.\"\"\"\n    step = public_nat_ip_allocation_failed.NatIpAllocationFailedStart()\n    mock_response = mock.Mock()\n    mock_response.status = 404\n    self.mock_get_network.side_effect = googleapiclient.errors.HttpError(\n        mock_response, b'not found')\n    with op.operator_context(self.operator):\n      self.operator.parameters = self.params\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_start_step_get_routers_fails(self):\n    \"\"\"Test start step when get_routers throws HttpError.\"\"\"\n    step = public_nat_ip_allocation_failed.NatIpAllocationFailedStart()\n    mock_response = mock.Mock()\n    mock_response.status = 404\n    self.mock_get_routers.side_effect = googleapiclient.errors.HttpError(\n        mock_response, b'not found')\n    with op.operator_context(self.operator):\n      self.operator.parameters = self.params\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_start_step_router_not_found(self):\n    \"\"\"Test start step when router name not in list.\"\"\"\n    step = public_nat_ip_allocation_failed.NatIpAllocationFailedStart()\n    self.mock_get_routers.return_value = [\n        MockRouter('other-router', nats=[{\n            'name': 'test-nat-gw'\n        }])\n    ]\n    with op.operator_context(self.operator):\n      self.operator.parameters = self.params\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_start_step_nat_gw_not_found(self):\n    \"\"\"Test start step when nat gw name not in router.\"\"\"\n    step = public_nat_ip_allocation_failed.NatIpAllocationFailedStart()\n    self.mock_get_routers.return_value = [\n        MockRouter('test-router', nats=[{\n            'name': 'other-nat-gw'\n        }])\n    ]\n    with op.operator_context(self.operator):\n      self.operator.parameters = self.params\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_nat_allocation_failed_check_no_router_status(self):\n    \"\"\"Test allocation check when router status is missing.\"\"\"\n    step = public_nat_ip_allocation_failed.NatAllocationFailedCheck()\n    self.mock_nat_router_status.return_value = None\n    self.mock_monitoring_query.return_value = make_ip_exhaustion_result(\n        is_failed=False)\n    with op.operator_context(self.operator):\n      self.operator.parameters = self.params\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_nat_allocation_failed_check_monitoring_returns_none(self):\n    \"\"\"Test allocation check when monitoring returns no data.\"\"\"\n    step = public_nat_ip_allocation_failed.NatAllocationFailedCheck()\n    self.mock_nat_router_status.return_value = MockRouterStatus(0, 10)\n    self.mock_monitoring_query.return_value = None\n    with op.operator_context(self.operator):\n      self.operator.parameters = self.params\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_uncertain.assert_called_once()\n\n  def test_nat_allocation_failed_check_failed_metric(self):\n    \"\"\"Test allocation check when nat_allocation_failed metric is true.\"\"\"\n    step = public_nat_ip_allocation_failed.NatAllocationFailedCheck()\n    self.mock_nat_router_status.return_value = MockRouterStatus(None, 10)\n    self.mock_monitoring_query.return_value = make_ip_exhaustion_result(\n        is_failed=True)\n    with op.operator_context(self.operator):\n      self.operator.parameters = self.params\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n  def test_nat_allocation_failed_check_extra_ips_needed(self):\n    \"\"\"Test allocation check when min_extra_ips_needed > 0.\"\"\"\n    step = public_nat_ip_allocation_failed.NatAllocationFailedCheck()\n    self.mock_nat_router_status.return_value = MockRouterStatus(5, 10)\n    self.mock_monitoring_query.return_value = make_ip_exhaustion_result(\n        is_failed=False)\n    with op.operator_context(self.operator):\n      self.operator.parameters = self.params\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n  def test_nat_allocation_failed_check_ok(self):\n    \"\"\"Test allocation check passes.\"\"\"\n    step = public_nat_ip_allocation_failed.NatAllocationFailedCheck()\n    self.mock_nat_router_status.return_value = MockRouterStatus(0, 10)\n    self.mock_monitoring_query.return_value = make_ip_exhaustion_result(\n        is_failed=False)\n    with op.operator_context(self.operator):\n      self.operator.parameters = self.params\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_nat_ip_allocation_method_check_auto(self):\n    \"\"\"Test allocation method check branches to auto.\"\"\"\n    step = public_nat_ip_allocation_failed.NatIpAllocationMethodCheck()\n    self.mock_get_routers.return_value = [\n        MockRouter('test-router',\n                   nats=[{\n                       'name': 'test-nat-gw'\n                   }],\n                   ip_allocate_option='AUTO_ONLY')\n    ]\n    with op.operator_context(self.operator):\n      self.operator.parameters = self.params\n      self.operator.set_step(step)\n      step.execute()\n    self.assertIsInstance(\n        step.steps[0], public_nat_ip_allocation_failed.NatIpAllocationAutoOnly)\n\n  def test_nat_ip_allocation_method_check_manual(self):\n    \"\"\"Test allocation method check branches to manual.\"\"\"\n    step = public_nat_ip_allocation_failed.NatIpAllocationMethodCheck()\n    self.mock_get_routers.return_value = [\n        MockRouter('test-router',\n                   nats=[{\n                       'name': 'test-nat-gw'\n                   }],\n                   ip_allocate_option='MANUAL_ONLY')\n    ]\n    with op.operator_context(self.operator):\n      self.operator.parameters = self.params\n      self.operator.set_step(step)\n      step.execute()\n    self.assertIsInstance(\n        step.steps[0],\n        public_nat_ip_allocation_failed.NatIpAllocationManualOnly)\n\n  def test_nat_ip_allocation_auto_only(self):\n    \"\"\"Test NatIpAllocationAutoOnly step.\"\"\"\n    step = public_nat_ip_allocation_failed.NatIpAllocationAutoOnly()\n    with op.operator_context(self.operator):\n      self.operator.parameters = self.params\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_failed.assert_called_once()\n\n  def test_nat_ip_allocation_manual_only_needs_quota(self):\n    \"\"\"Test NatIpAllocationManualOnly when quota increase is needed.\"\"\"\n    step = public_nat_ip_allocation_failed.NatIpAllocationManualOnly()\n    self.mock_get_routers.return_value = [\n        MockRouter('test-router',\n                   nats=[{\n                       'name': 'test-nat-gw'\n                   }],\n                   ip_allocate_option='MANUAL_ONLY')\n    ]\n    self.mock_nat_router_status.return_value = MockRouterStatus(5, 10)\n    nat_ip_info_result = [{\n        'natName': 'test-nat-gw',\n        'natIpInfoMappings': [{\n            'natIp': '1.1.1.1',\n            'usage': 'IN_USE'\n        }] * 300\n    }]\n    self.mock_get_nat_ip_info.return_value = MockNatIpInfo(nat_ip_info_result)\n    with op.operator_context(self.operator):\n      self.operator.parameters = self.params\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_ok.assert_called_once()\n    self.mock_interface.add_failed.assert_called_once()\n\n  def test_nat_ip_allocation_manual_only_ok(self):\n    \"\"\"Test NatIpAllocationManualOnly when no quota increase is needed.\"\"\"\n    step = public_nat_ip_allocation_failed.NatIpAllocationManualOnly()\n    self.mock_get_routers.return_value = [\n        MockRouter('test-router',\n                   nats=[{\n                       'name': 'test-nat-gw'\n                   }],\n                   ip_allocate_option='MANUAL_ONLY')\n    ]\n    self.mock_nat_router_status.return_value = MockRouterStatus(5, 10)\n    nat_ip_info_result = [{\n        'natName': 'test-nat-gw',\n        'natIpInfoMappings': [{\n            'natIp': '1.1.1.1',\n            'usage': 'IN_USE'\n        }] * 100\n    }]\n    self.mock_get_nat_ip_info.return_value = MockNatIpInfo(nat_ip_info_result)\n    with op.operator_context(self.operator):\n      self.operator.parameters = self.params\n      self.operator.set_step(step)\n      step.execute()\n    # add_ok is called once in all cases, and a second time if ips < 300\n    self.assertEqual(self.mock_interface.add_ok.call_count, 2)\n    self.mock_interface.add_failed.assert_not_called()\n\n  def test_end_step(self):\n    \"\"\"Test NatIpAllocationFailedEnd step.\"\"\"\n    step = public_nat_ip_allocation_failed.NatIpAllocationFailedEnd()\n    with mock.patch('gcpdiag.config.get', return_value=False), \\\n         mock.patch('gcpdiag.runbook.op.prompt', return_value=op.NO):\n      with op.operator_context(self.operator):\n        self.operator.parameters = self.params\n        self.operator.set_step(step)\n        step.execute()\n    self.mock_interface.info.assert_called_with(op.END_MESSAGE, 'INFO')\n\n  def test_build_tree(self):\n    tree = public_nat_ip_allocation_failed.PublicNatIpAllocationFailed()\n    tree.build_tree()\n    self.assertIsInstance(\n        tree.start, public_nat_ip_allocation_failed.NatIpAllocationFailedStart)\n\n  def test_nat_ip_allocation_manual_only_no_router_status(self):\n    step = public_nat_ip_allocation_failed.NatIpAllocationManualOnly()\n    self.mock_get_routers.return_value = [\n        MockRouter('test-router', nats=[{\n            'name': 'test-nat-gw'\n        }])\n    ]\n    self.mock_nat_router_status.return_value = None\n    nat_ip_info_result = [{\n        'natName': 'test-nat-gw',\n        'natIpInfoMappings': [{\n            'natIp': '1.1.1.1',\n            'usage': 'IN_USE'\n        }]\n    }]\n    self.mock_get_nat_ip_info.return_value = MockNatIpInfo(nat_ip_info_result)\n    with op.operator_context(self.operator):\n      self.operator.parameters = self.params\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.info.assert_called_once()\n\n  def test_nat_ip_allocation_method_check_get_network_fails(self):\n    step = public_nat_ip_allocation_failed.NatIpAllocationMethodCheck()\n    mock_response = mock.Mock()\n    mock_response.status = 404\n    self.mock_get_network.side_effect = googleapiclient.errors.HttpError(\n        mock_response, b'not found')\n    with op.operator_context(self.operator):\n      self.operator.parameters = self.params\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_nat_ip_allocation_method_check_get_routers_fails(self):\n    step = public_nat_ip_allocation_failed.NatIpAllocationMethodCheck()\n    mock_response = mock.Mock()\n    mock_response.status = 404\n    self.mock_get_routers.side_effect = googleapiclient.errors.HttpError(\n        mock_response, b'not found')\n    with op.operator_context(self.operator):\n      self.operator.parameters = self.params\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_nat_ip_allocation_method_check_no_router_found(self):\n    step = public_nat_ip_allocation_failed.NatIpAllocationMethodCheck()\n    self.mock_get_routers.return_value = [\n        MockRouter('other-router', nats=[{\n            'name': 'test-nat-gw'\n        }])\n    ]\n    with op.operator_context(self.operator):\n      self.operator.parameters = self.params\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_end_step_interactive_no(self):\n    \"\"\"Test NatIpAllocationFailedEnd step with interactive mode.\"\"\"\n    step = public_nat_ip_allocation_failed.NatIpAllocationFailedEnd()\n    with mock.patch('gcpdiag.config.get', return_value=True), \\\n         mock.patch('gcpdiag.runbook.op.prompt', return_value=op.NO):\n      with op.operator_context(self.operator):\n        self.operator.parameters = self.params\n        self.operator.set_step(step)\n        step.execute()\n      self.mock_interface.info.assert_not_called()\n\n  def test_nat_ip_allocation_manual_only_get_network_fails(self):\n    step = public_nat_ip_allocation_failed.NatIpAllocationManualOnly()\n    mock_response = mock.Mock()\n    mock_response.status = 404\n    self.mock_get_network.side_effect = googleapiclient.errors.HttpError(\n        mock_response, b'not found')\n    with op.operator_context(self.operator):\n      self.operator.parameters = self.params\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_nat_ip_allocation_manual_only_get_routers_fails(self):\n    step = public_nat_ip_allocation_failed.NatIpAllocationManualOnly()\n    mock_response = mock.Mock()\n    mock_response.status = 404\n    self.mock_get_routers.side_effect = googleapiclient.errors.HttpError(\n        mock_response, b'not found')\n    with op.operator_context(self.operator):\n      self.operator.parameters = self.params\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_nat_ip_allocation_manual_only_no_nat_ip_info(self):\n    step = public_nat_ip_allocation_failed.NatIpAllocationManualOnly()\n    self.mock_get_routers.return_value = [\n        MockRouter('test-router', nats=[{\n            'name': 'test-nat-gw'\n        }])\n    ]\n    self.mock_nat_router_status.return_value = MockRouterStatus(0, 10)\n    self.mock_get_nat_ip_info.return_value = MockNatIpInfo(None)\n    with op.operator_context(self.operator):\n      self.operator.parameters = self.params\n      self.operator.set_step(step)\n      step.execute()\n    self.assertEqual(self.mock_interface.add_ok.call_count, 1)\n\n  def test_nat_ip_allocation_manual_only_no_routers_list_found(self):\n    step = public_nat_ip_allocation_failed.NatIpAllocationManualOnly()\n    self.mock_get_routers.return_value = []\n    with op.operator_context(self.operator):\n      self.operator.parameters = self.params\n      self.operator.set_step(step)\n      step.execute()\n    self.mock_interface.add_skipped.assert_called_once()\n\n  def test_end_step_interactive_yes(self):\n    with mock.patch('gcpdiag.config.get', return_value=False), \\\n         mock.patch('gcpdiag.runbook.op.prompt', return_value=op.YES):\n      step = public_nat_ip_allocation_failed.NatIpAllocationFailedEnd()\n      with op.operator_context(self.operator):\n        self.operator.parameters = self.params\n        self.operator.set_step(step)\n        step.execute()\n      self.mock_interface.info.assert_not_called()\n\n\nclass PublicNatIpAllocationFailedStubDataTest(unittest.TestCase):\n\n  def setUp(self):\n    super().setUp()\n    self.mock_get_api = self.enterContext(\n        mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub))\n    self.mock_monitoring_query = self.enterContext(\n        mock.patch('gcpdiag.queries.monitoring.query'))\n    self.mock_interface = mock.create_autospec(op.InteractionInterface,\n                                               instance=True)\n    self.mock_interface.rm = mock.Mock()\n    self.operator = op.Operator(self.mock_interface)\n    self.operator.run_id = 'test-run'\n    self.operator.messages = MockMessage()\n    self.params = {\n        flags.PROJECT_ID:\n            'gcpdiag-nat1-aaaa',\n        flags.REGION:\n            'europe-west4',\n        flags.NAT_GATEWAY_NAME:\n            'public-nat-gateway',\n        flags.CLOUD_ROUTER_NAME:\n            'public-nat-cloud-router',\n        flags.NAT_NETWORK:\n            'nat-vpc-network',\n        'start_time':\n            datetime.datetime(2025, 1, 1, 0, 0, 0,\n                              tzinfo=datetime.timezone.utc),\n        'end_time':\n            datetime.datetime(2025, 1, 1, 1, 0, 0,\n                              tzinfo=datetime.timezone.utc),\n    }\n\n  def test_start_step_success_with_stub_data(self):\n    \"\"\"Test start step with gcpdiag-nat1-aaaa data.\"\"\"\n    step = public_nat_ip_allocation_failed.NatIpAllocationFailedStart()\n    with op.operator_context(self.operator):\n      self.operator.parameters = self.params\n      self.operator.set_step(step)\n      step.execute()\n    # Based on nat1 data, this step should succeed without skipping\n    self.mock_interface.add_skipped.assert_not_called()\n\n  def test_end_step_interactive_yes(self):\n    with mock.patch('gcpdiag.config.get', return_value=False), \\\n         mock.patch('gcpdiag.runbook.op.prompt', return_value=op.YES):\n      step = public_nat_ip_allocation_failed.NatIpAllocationFailedEnd()\n      with op.operator_context(self.operator):\n        self.operator.parameters = self.params\n        self.operator.set_step(step)\n        step.execute()\n      self.mock_interface.info.assert_not_called()\n"
  },
  {
    "path": "gcpdiag/runbook/nat/snapshots/public_nat_ip_allocation_failed.txt",
    "content": "cloud_router_name=public-nat-cloud-router,nat_gateway_name=public-nat-gateway,network=nat-vpc-\nnetwork,project_id=gcpdiag-nat1-aaaa,region=europe-west4\n\nnat/public-nat-ip-allocation-failed: Troubleshooting for IP Allocation issues for Cloud NAT.\n\n  This runbook investigates Cloud NAT for NAT IP Allocation failed issue and proposes\n  remediation steps.\n\n  Areas Examined:\n\n    - Metric check: Checks the NAT Allocation Failed metric for the provided NATGW if it is\n    True or False.\n\n    - NATGW Configuration: Checks the gateway if it is configured with manual or automatic IP\n    allocation.\n\n    - NAT IP and Port calculation: For source nic without an External IP address,\n      verify the VM is served by a Public NAT Gateway and check there are no issues on the NATGW.\n    \n[START]: Starting Nat IP Allocation Failed diagnostics\n[AUTOMATED STEP]: Checking the nat_allocation_failed metric for NAT IP allocation failure and the NAT router status.\n\n   - gcpdiag-nat1-aaaa                                                    [FAIL]\n     [REASON]\n     NAT IP allocation failure found on the NAT Gateway: public-nat-gateway\n\n     [REMEDIATION]\n     Continue the runbook for further diagnostic and remediation steps for the\n     IP exhaustion issue on public-nat-gateway\n\n[GATEWAY]: Checks if the NATGW router is configured with manual or automatic IP allocation\n[AUTOMATED STEP]: NAT IP allocation is configured with MANUAL_ONLY. Running diagnostic for NAT Gateway configured as MANUAL_ONLY only\n\n   - gcpdiag-nat1-aaaa                                                    [OK]\n     [REASON]\n     Checking on the status and configuration of the Cloud NAT Router public-nat-cloud-router and Gateway:\n\n     1. Minimum extra NAT IPs Needed: 2\n     2. Number of VM Endpoints With NAT mappings: 2\n     3. Dynamic port allocation enabled: False\n     4. Number of NAT Gateway IPs in use: 1\n\n\n   - gcpdiag-nat1-aaaa                                                    [OK]\n     [REASON]\n     The NAT Gateway public-nat-gateway is configured for manual IP allocation:\n\n     The number of NAT IPs required is less than quota limit of 300. Consider\n     taking the steps in [1] to allocate more IP address or further optimize\n     port utilization on the gateway [2]\n\n     1. <https://cloud.google.com/nat/docs/troubleshooting#allocate-more-IPs>\n     2. <https://cloud.google.com/nat/docs/troubleshooting#reduce-ports>\n\n[END]: Concludes the NAT IP allocation failed diagnostics process\n\n\n"
  },
  {
    "path": "gcpdiag/runbook/nat/templates/nat_ip_allocation_failed.jinja",
    "content": "#############################################################\n# Messages for NAT IP Allocation Failed Check #\n#############################################################\n\n{% block confirmation_skipped_reason %}\nUnable to fetch the network {network} confirm it exists in the project {project_id}.\n{% endblock confirmation_skipped_reason %}\n\n{% block confirmation_skipped_reason_a1 %}\nThe cloud router {cloud_router} does not exist in region {region} or project {project_id}.\n{% endblock confirmation_skipped_reason_a1 %}\n\n{% block confirmation_skipped_reason_a2 %}\nCannot find the NAT cloud router: {cloud_router} in the region {region} for the project {project_id}\n\nCheck the cloud router name to ensure it exists in the project and rerun.\n{% endblock confirmation_skipped_reason_a2 %}\n\n{% block confirmation_skipped_reason_a3 %}\nCannot find the NAT Gateway: {nat_gateway} in the region {region} for the project {project_id}\n\nCheck the cloud router name to ensure it exists in the project and rerun.\n{% endblock confirmation_skipped_reason_a3 %}\n\n#############################################################\n# Messages for NAT IP Allocation Failed Check #\n#############################################################\n\n{% block nat_ip_allocation_auto_only_success_reason %}\nNo IP exhaustion issues found on the NAT GW {nat_gateway_name}\n{% endblock nat_ip_allocation_auto_only_success_reason %}\n\n{% block nat_ip_allocation_auto_only_failure_reason %}\nManual NAT IP allocation is enabled on the NAT GW {nat_gateway_name}\n{% endblock nat_ip_allocation_auto_only_failure_reason %}\n\n{% block nat_ip_allocation_auto_only_failure_remediation %}\nIP exhaustion issues on {nat_gateway_name} can be remediated by taking the following steps in:\n<https://cloud.google.com/knowledge/kb/cloud-nat-is-dropping-or-limiting-egress-connectivity-000004263#:~:text=If%20the%20metric%20indicates%20that,on%20the%20Port%20reservation%20procedure>\n{% endblock nat_ip_allocation_auto_only_failure_remediation %}\n\n\n#############################################################\n# Messages for NAT ALLOCATION FAILED METRIC Check #\n#############################################################\n\n{% block nat_allocation_metric_check_success_reason %}\nNo issues noticed on the NAT allocation failed metric for the NAT Gateway: {nat_gateway_name}\n{% endblock nat_allocation_metric_check_success_reason %}\n\n{% block nat_allocation_metric_check_failure_reason %}\nNAT IP allocation failure found on the NAT Gateway: {nat_gateway_name}\n{% endblock nat_allocation_metric_check_failure_reason %}\n\n{% block nat_allocation_metric_check_failure_remediation %}\nContinue the runbook for further diagnostic and remediation steps for the\nIP exhaustion issue on {nat_gateway_name}\n{% endblock nat_allocation_metric_check_failure_remediation %}\n\n{% block nat_allocation_metric_check_skipped_reason %}\nNo issues detected on the nat_allocation_failed metric for the gateway: {nat_gateway_name}.\nChecks on the status of the cloud router for the NAT gateway: {router_name} does not indicate\nextra IPs are needed.\n{% endblock nat_allocation_metric_check_skipped_reason %}\n\n{% block nat_allocation_metric_check_uncertain_reason %}\nUnable to fetch the the nat_allocation_failed metric for the gateway: {nat_gateway_name}\n{% endblock nat_allocation_metric_check_uncertain_reason %}\n\n{% block nat_allocation_metric_check_uncertain_remediation %}\nConfirm that the NAT Gateway name {nat_gateway_name} provided is correct and\nmetric for the gateway is visible on cloud console.\n{% endblock nat_allocation_metric_check_uncertain_remediation %}\n\n\n#############################################################\n# NAT ALLOCATION AUTO ONLY #\n#############################################################\n\n{% block nat_allocation_auto_only_failure_reason %}\nThe NAT Gateway {nat_gateway_name} is configured for automatic IP allocation\n{% endblock nat_allocation_auto_only_failure_reason %}\n\n{% block nat_allocation_auto_only_failure_remediation %}\nTo resolve this issue, consider implementing the following options:\n\n1. Add one more NAT gateway in the same network and region.\n2. Switch to Manual NAT IP assignment.\n{% endblock nat_allocation_auto_only_failure_remediation %}\n\n\n#############################################################\n# NAT ALLOCATION MANUAL ONLY #\n#############################################################\n\n{% block nat_allocation_manual_only_success_reason %}\nChecking on the status and configuration of the Cloud NAT Router {router_name} and Gateway:\n\n1. Minimum extra NAT IPs Needed: {extra_ips_needed}\n2. Number of VM Endpoints With NAT mappings: {vms_with_nat_mappings}\n3. Dynamic port allocation enabled: {enable_dynamic_port_allocation}\n4. Number of NAT Gateway IPs in use: {nat_gw_ips_in_use}\n{% endblock nat_allocation_manual_only_success_reason %}\n\n{% block nat_allocation_manual_only_success_reason_a1 %}\nThe NAT Gateway {nat_gateway_name} is configured for manual IP allocation:\n\nThe number of NAT IPs required is less than quota limit of 300. Consider\ntaking the steps in [1] to allocate more IP address or further optimize\nport utilization on the gateway [2]\n\n1. <https://cloud.google.com/nat/docs/troubleshooting#allocate-more-IPs>\n2. <https://cloud.google.com/nat/docs/troubleshooting#reduce-ports>\n{% endblock nat_allocation_manual_only_success_reason_a1 %}\n\n{% block nat_allocation_manual_only_failure_reason %}\nThe number of NAT IPs in use on the NAT Gateway is >= 300 which is above the quota limit [1].\n\n1. <https://cloud.google.com/nat/quota#quotas>\n{% endblock nat_allocation_manual_only_failure_reason %}\n\n{% block nat_allocation_manual_only_failure_remediation %}\nConsider creating additional NAT gateways or optimise port usage [1]:\n\n1. <https://cloud.google.com/nat/docs/troubleshooting#reduce-ports>\n{% endblock nat_allocation_manual_only_failure_remediation %}\n\n\n#############################################################\n# NAT ALLOCATION METHOD CHECK #\n#############################################################\n\n{% block nat_allocation_method_check_step_name %}\nChecks if the NATGW router is configured with manual or automatic IP allocation\n{% endblock nat_allocation_method_check_step_name %}\n\n\n#############################################################\n# NAT ALLOCATION END STEP #\n#############################################################\n\n{% block endstep_step_name %}\nConcludes the NAT IP allocation failed diagnostics process\n{% endblock endstep_step_name %}\n"
  },
  {
    "path": "gcpdiag/runbook/nat/templates/nat_out_of_resources.jinja",
    "content": "  #############################################################\n  #          Messages for NAT IP Exhaustion Check             #\n  #############################################################\n\n  {% block nat_ip_exhaustion_check_success_reason %}\n   No IP exhaustion issues found on the NAT GW {nat_gateway_name}\n  {% endblock nat_ip_exhaustion_check_success_reason %}\n\n  {% block nat_ip_exhaustion_check_failure_reason %}\n   NAT IP allocation failure found on the NAT GW {nat_gateway_name}\n  {% endblock nat_ip_exhaustion_check_failure_reason %}\n\n  {% block nat_ip_exhaustion_check_failure_remediation %}\n   IP exhaustion issues on {nat_gateway_name} can be remediated by taking the following steps in [1]:\n   [1] <https://cloud.google.com/knowledge/kb/cloud-nat-is-dropping-or-limiting-egress-connectivity-000004263#:~:text=If%20the%20metric%20indicates%20that,on%20the%20Port%20reservation%20procedure>\n  {% endblock nat_ip_exhaustion_check_failure_remediation %}\n\n  #############################################################\n  #          Messages for Resource Exhaustion Check           #\n  #############################################################\n\n  {% block nat_resource_exhaustion_check_success_reason %}\n   No {metric_reason} issues on the dropped_sent_packet metric for the NAT GW {nat_gateway_name} seen.\n  {% endblock nat_resource_exhaustion_check_success_reason %}\n\n  {% block nat_resource_exhaustion_check_failure_reason %}\n   {metric_reason} issue found on the dropped_sent_packet metric on the NAT GW {nat_gateway_name}\n  {% endblock nat_resource_exhaustion_check_failure_reason %}\n\n  {% block nat_resource_exhaustion_check_failure_remediation %}\n   Resource exhaustion issues can be remediated by taking the following steps in [1]:\n   [1] <https://cloud.google.com/knowledge/kb/cloud-nat-is-dropping-or-limiting-egress-connectivity-000004263#:~:text=If%20the%20metric%20indicates%20that,on%20the%20Port%20reservation%20procedure>\n  {% endblock nat_resource_exhaustion_check_failure_remediation %}\n\n  #############################################################\n  #          Messages for NAT received packet drop check      #\n  #############################################################\n\n  {% block nat_dropped_received_packet_check_success_reason %}\n   No received_packet_drop on NAT GW {nat_gateway_name} seen.\n  {% endblock nat_dropped_received_packet_check_success_reason %}\n\n  {% block nat_dropped_received_packet_check_uncertain_reason %}\n   Elevated received_packet_drop_count metric noticed for NAT GW {nat_gateway_name}\n   dropped_received_packet: {metric_value}\n  {% endblock nat_dropped_received_packet_check_uncertain_reason %}\n\n  {% block nat_dropped_received_packet_check_uncertain_remediation %}\n   NAT gateways could be dropping packets for various reasons; however, the drops are not always indicative of an issue.\n   Checking received_packet_drop metrics at the VM level as well. Open a case to GCP Support for confirmation\n   of the reason for the drops\n   See more on troubleshooting cloud NAT reducing the drops here [1] and [2]:\n   [1] <https://cloud.google.com/nat/docs/troubleshooting>\n   [2] <https://cloud.google.com/knowledge/kb/reduce-received-packets-dropped-count-on-cloud-nat-000006744>\n  {% endblock nat_dropped_received_packet_check_uncertain_remediation %}\n\n  #############################################################\n  #          Messages for VM received packet drop check       #\n  #############################################################\n\n  {% block vm_dropped_received_packet_check_success_reason %}\n   No received_packet_drop on NAT GW {nat_gateway_name} seen.\n  {% endblock vm_dropped_received_packet_check_success_reason %}\n\n  {% block vm_dropped_received_packet_check_uncertain_reason %}\n   Elevated received_packet_drop_count metric noticed for following VMs\n   {vm_drop_list}\n  {% endblock vm_dropped_received_packet_check_uncertain_reason %}\n\n  {% block vm_dropped_received_packet_check_uncertain_remediation %}\n   VMs could be dropping packets for various reasons; however, the drops are not always indicative of an issue.\n   See more on troubleshooting cloud NAT and reducing the drops here [1] and [2]:\n   Open a case to GCP Support for justification for the packet drops.\n   [1] <https://cloud.google.com/nat/docs/troubleshooting>\n   [2] <https://cloud.google.com/knowledge/kb/reduce-received-packets-dropped-count-on-cloud-nat-000006744>\n  {% endblock vm_dropped_received_packet_check_uncertain_remediation %}\n"
  },
  {
    "path": "gcpdiag/runbook/nat/utils.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Helpful functions used in different parts of the NAT runbooks\"\"\"\n\nimport re\n\n\n# get region from zone\ndef region_from_zone(zone: str) -> str:\n  pattern = r'^(.+?-.+?)-'\n  match = re.match(pattern, zone)\n  region = match.group(1) if match else ''\n  return region\n"
  },
  {
    "path": "gcpdiag/runbook/nat/utils_test.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test for NAT utils.\"\"\"\n\nimport unittest\n\nfrom gcpdiag.runbook.nat import utils\n\n\nclass RegionFromZoneTest(unittest.TestCase):\n  \"\"\"Test region_from_zone.\"\"\"\n\n  def test_region_from_zone(self):\n    self.assertEqual(utils.region_from_zone('us-central1-a'), 'us-central1')\n    self.assertEqual(utils.region_from_zone('europe-west1-b'), 'europe-west1')\n    self.assertEqual(utils.region_from_zone('asia-northeast3-c'),\n                     'asia-northeast3')\n    self.assertEqual(utils.region_from_zone('us-east4-a'), 'us-east4')\n\n  def test_no_match(self):\n    self.assertEqual(utils.region_from_zone('us-central1'), '')\n    self.assertEqual(utils.region_from_zone(''), '')\n    self.assertEqual(utils.region_from_zone('invalid-zone'), '')\n"
  },
  {
    "path": "gcpdiag/runbook/op.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Operator Module\"\"\"\n\nimport threading\nfrom contextlib import contextmanager\nfrom typing import Any, Optional, Tuple\n\nfrom gcpdiag import context as gcpdiag_context\nfrom gcpdiag import models\nfrom gcpdiag.runbook.constants import *  # pylint: disable=unused-wildcard-import, wildcard-import\nfrom gcpdiag.runbook.report import InteractionInterface\n\nreport_lock = threading.Lock()\n_thread_local = threading.local()  # Use thread-local storage\n\n\nclass Operator:\n  \"\"\" Operation Object used to manipulate context, message and parameter data\"\"\"\n  messages: models.Messages\n  context: models.Context\n  parameter: models.Parameter\n  interface: InteractionInterface\n  run_id: str\n  _step = None\n  _tree = None\n  context_provider: Optional[gcpdiag_context.ContextProvider]\n\n  def __init__(\n      self,\n      interface: InteractionInterface,\n      context_provider: Optional[gcpdiag_context.ContextProvider] = None,\n  ):\n    self.interface = interface\n    self.context_provider = context_provider\n\n  def set_run_id(self, run_id):\n    self.run_id = run_id\n\n  def set_parameters(self, p):\n    self.parameters = p\n\n  def create_context(self,\n                     project_id,\n                     locations=None,\n                     labels=None,\n                     parameters=None,\n                     resources=None):\n    self.context = models.Context(project_id=project_id,\n                                  locations=locations,\n                                  labels=labels,\n                                  parameters=parameters,\n                                  resources=resources,\n                                  context_provider=self.context_provider)\n\n  def set_messages(self, m):\n    self.messages = m\n\n  def set_step(self, s):\n    self._step = s\n\n  def set_tree(self, t):\n    self._tree = t\n\n  @property\n  def step(self):\n    return self._step\n\n  @property\n  def tree(self):\n    return self._tree\n\n\n@contextmanager\ndef operator_context(new_operator):\n  _thread_local.operator = new_operator\n  try:\n    yield\n  finally:\n    _thread_local.operator = None\n\n\ndef _get_operator():\n  \"\"\"Retrieves the current operator from thread-local storage.\"\"\"\n  operator = getattr(_thread_local, 'operator', None)\n  if operator is None:\n    raise RuntimeError(\n        'No operator found in thread-local storage. '\n        'Are you trying to use op.get, op.put, etc. outside of an '\n        'operator_context?')\n  return operator\n\n\n# pylint: disable=protected-access\ndef prep_msg(key, **kwargs):\n  \"\"\"\n  Parses the Jinja template block linked the calling step\n\n  This function takes a scenario key and template variables as input, and uses them\n  to parse a Jinja template. The template is linked to a specific step, and the\n  function returns the parsed message.\n\n  Usage:\n      op.prep_msg(op.SUCCESS_REASON, template_var1=value1, template_var2=value2)\n\n  Args:\n      key (str): The scenario key that determines which template to use.\n      **kwargs: Arbitrary keyword arguments representing the variables to be passed into the\n                Jinja template.\n\n  Returns:\n      str: The parsed message from the linked Jinja template.\n\n\"\"\"\n  operator = _get_operator()\n  # set default template variables\n  if 'start_time' not in kwargs:\n    kwargs['start_time'] = operator.parameters['start_time']\n  if 'end_time' not in kwargs:\n    kwargs['end_time'] = operator.parameters['end_time']\n  return operator.messages.get_msg(key, **kwargs)\n\n\ndef get(key, default=None):\n  \"\"\"\n  Retrieve user provided runbook parameter values\n\n  It retrieves the user-provided parameter value for the given key or returns\n  the default value if the key is not found. The default value can be what is defined at the\n  diagnostic tree parameter declaration or the default value provided to this method. If both\n  method and diagnostic tree level parameters are provided, the tree level overrides the method\n  default.\n\n    Args:\n      key (str): The key for the parameter to be retrieved.\n      default (any, optional): The default value to return if no value. Defaults to None.\n\n    Returns:\n      any: The value associated with the key if it exists, otherwise the default value.\n\n    Usage:\n      value = op.get('parameter_name')\n    \"\"\"\n  operator = _get_operator()\n  return operator.parameters.get(key, default)\n\n\ndef put(key, value):\n  \"\"\"\n    Create a new parameter or update an existing parameter\n\n    This function assigns the given value to the specified key within the runbook's\n    context parameters.\n\n    Args:\n        key (str): The key for the parameter to be set.\n        value (any): The value to be associated with the key.\n\n    Usage:\n        operator.put('parameter_name', 'value')\n  \"\"\"\n  operator = _get_operator()\n  operator.parameters[key] = value\n\n\ndef prompt(message: str,\n           kind: str = '',\n           options: dict = None,\n           choice_msg: str = '') -> Any:\n  \"\"\"\n    Displays a prompt to the user with the given message and choice message.\n\n    This function interfaces with the operator's prompt mechanism to display a message to the user.\n    It can include additional information such as the the kind of prompt,\n    available options, and a message for choosing from options.\n\n    Args:\n      message (str): The main message to display to the user.\n      kind (str, optional): The type of prompt, CONFIRMATION, HUMAN_TASK\n      options (dict, optional): A dictionary of options that the user can choose from.\n      choice_msg (str, optional): An optional message guiding the user to make a choice from the\n      options. Defaults to an empty string.\n\n    Returns:\n      Any: User response\n\n    Usage:\n      op.prompt(message='Check the remaining interfaces as well?',\n                kind=op.CONFIRMATION,\n                choice_msg='Select one of the options below:',\n                options={'y': 'Yes, all remaining interfaces', 'n': 'No Proceed'}\n            )\n    \"\"\"\n  operator = _get_operator()\n  return operator.interface.prompt(message=message,\n                                   kind=kind,\n                                   options=options,\n                                   choice_msg=choice_msg)\n\n\ndef info(message: str, step_type='INFO') -> None:\n  \"\"\"Send an informational message to the user\"\"\"\n  operator = _get_operator()\n  operator.interface.info(message, step_type)\n  operator.interface.rm.add_step_info_metadata(\n      run_id=operator.run_id,\n      step_execution_id=operator.step.execution_id,\n      value=message)\n\n\ndef prep_rca(resource: Optional[models.Resource], template, suffix,\n             kwarg) -> None:\n  \"\"\"Parses a log form and complex Jinja templates for root cause analysis (RCA).\"\"\"\n  operator = _get_operator()\n  return operator.interface.prepare_rca(run_id=operator.run_id,\n                                        resource=resource,\n                                        template=template,\n                                        suffix=suffix,\n                                        step=operator.step,\n                                        context=kwarg)\n\n\ndef add_skipped(resource: Optional[models.Resource], reason: str) -> None:\n  \"\"\"Sends a skip message for a step to the user and store it in the report\"\"\"\n  operator = _get_operator()\n  with report_lock:\n    operator.interface.add_skipped(run_id=operator.run_id,\n                                   resource=resource,\n                                   reason=reason,\n                                   step_execution_id=operator.step.execution_id)\n\n\ndef add_ok(resource: models.Resource, reason: str) -> None:\n  \"\"\"Sends a success message for a step to the user and store it in the report\"\"\"\n  operator = _get_operator()\n  with report_lock:\n    operator.interface.add_ok(run_id=operator.run_id,\n                              resource=resource,\n                              reason=reason,\n                              step_execution_id=operator.step.execution_id)\n\n\ndef add_failed(resource: models.Resource, reason: str, remediation: str) -> Any:\n  \"\"\"Sends a failure message for a step to the user and store it in the report\"\"\"\n  operator = _get_operator()\n  with report_lock:\n    return operator.interface.add_failed(\n        run_id=operator.run_id,\n        resource=resource,\n        reason=reason,\n        remediation=remediation,\n        step_execution_id=operator.step.execution_id)\n\n\ndef add_uncertain(resource: models.Resource,\n                  reason: str,\n                  remediation: str = None,\n                  human_task_msg: str = '') -> Any:\n  \"\"\"Sends an inconclusive message for a step to the user and store it in the report\"\"\"\n  operator = _get_operator()\n  with report_lock:\n    return operator.interface.add_uncertain(\n        run_id=operator.run_id,\n        resource=resource,\n        reason=reason,\n        remediation=remediation,\n        step_execution_id=operator.step.execution_id,\n        human_task_msg=human_task_msg)\n\n\ndef get_step_outcome(execution_id) -> Tuple[Any, dict]:\n  \"\"\"Returns the overall evaluation result of a step\n\n  You can only check for steps that have already been executed.\n  It is not possible to get the status of the current step, it's descendants or steps\n  in branches not yet executed.\n\n  Returns:\n    a dict of totals by status representing outcome of resource evaluations\n    or empty dict if the step hasn't been executed.\n  \"\"\"\n  operator = _get_operator()\n  with report_lock:\n    step_result = operator.interface.rm.reports[operator.run_id].results.get(\n        execution_id)\n  if not step_result:\n    return (None, {})\n  return (step_result.overall_status, step_result.totals_by_status)\n\n\ndef step_ok(execution_id) -> bool:\n  \"\"\"Checks if the step with the provided run id passed evaluation\"\"\"\n  overall_status, _ = get_step_outcome(execution_id)\n  return overall_status == 'ok'\n\n\ndef step_failed(execution_id) -> bool:\n  \"\"\"Checks if the step with the provided run id failed evaluation\"\"\"\n  overall_status, _ = get_step_outcome(execution_id)\n  return overall_status == 'failed'\n\n\ndef step_uncertain(execution_id) -> bool:\n  \"\"\"Checks if the step with the provided run id has an indeterminate evaluation\"\"\"\n  overall_status, _ = get_step_outcome(execution_id)\n  return overall_status == 'uncertain'\n\n\ndef step_skipped(execution_id) -> bool:\n  \"\"\"Checks if the step with the provided run id was skipped\"\"\"\n  overall_status, _ = get_step_outcome(execution_id)\n  return overall_status == 'skipped'\n\n\ndef step_unexecuted(execution_id) -> bool:\n  \"\"\"Checks if the step with the provided run id was never executed\"\"\"\n  overall_status, _ = get_step_outcome(execution_id)\n  return overall_status is None\n\n\ndef add_metadata(key, value):\n  operator = _get_operator()\n  with report_lock:\n    operator.interface.rm.add_step_metadata(\n        run_id=operator.run_id,\n        step_execution_id=operator.step.execution_id,\n        key=key,\n        value=value)\n\n\ndef get_metadata(key, step_execution_id=None):\n  operator = _get_operator()\n  with report_lock:\n    step_execution_id = step_execution_id or operator.step.execution_id\n    return operator.interface.rm.get_step_metadata(\n        run_id=operator.run_id, step_execution_id=step_execution_id, key=key)\n\n\ndef get_all_metadata(step_execution_id=None):\n  operator = _get_operator()\n  with report_lock:\n    step_execution_id = step_execution_id or operator.step.execution_id\n    return operator.interface.rm.get_all_step_metadata(\n        run_id=operator.run_id, step_execution_id=step_execution_id)\n\n\ndef get_context(**kwargs) -> models.Context:\n  \"\"\"Returns the current execution context.\n\n  If keyword arguments are provided, a new context is created using these\n  arguments. If context is not initialized, it will be created using\n  parameters from operator.\n\n  This function retrieves the current operator from thread-local storage and\n  returns\n  its context, which includes execution parameters such as project ID,\n  locations, labels, and user-defined flags.\n\n  Returns:\n      models.Context: The current context object.\n  \"\"\"\n  operator = _get_operator()\n  if kwargs:\n    operator.create_context(**kwargs)\n    return operator.context\n\n  if not hasattr(operator, 'context'):\n    p = operator.parameters\n    operator.create_context(project_id=p.get('project_id'),\n                            locations=p.get('locations'),\n                            labels=p.get('labels'),\n                            parameters=p.get('parameters'),\n                            resources=p.get('resources'))\n  return operator.context\n"
  },
  {
    "path": "gcpdiag/runbook/op_test.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the 'License');\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an 'AS IS' BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n'''Test Operator methods'''\n\nimport unittest\nfrom functools import wraps\nfrom unittest import mock\n\nfrom gcpdiag.runbook import Step, op, report\n\n\ndef with_operator_context(test_method):\n  \"\"\"Decorator to set up operator context for op_test test methods.\"\"\"\n\n  @wraps(test_method)\n  def wrapper(self):\n    test_operator = op.Operator(interface=report.InteractionInterface(\n        kind='cli'))\n    test_operator.set_run_id('test_run_for_' + test_method.__name__)\n    test_operator.interface.rm = report.TerminalReportManager()\n    test_report = report.Report(run_id=test_operator.run_id, parameters={})\n    test_operator.interface.rm.reports[test_operator.run_id] = test_report\n    test_step = ok_step\n    test_operator.set_step(test_step)\n\n    test_report.results[ok_step.execution_id] = ok_step\n    test_report.results[failed_step.execution_id] = failed_step\n    test_report.results[uncertain_step.execution_id] = uncertain_step\n    test_report.results[skipped_step.execution_id] = skipped_step\n\n    self.test_operator = test_operator\n\n    with op.operator_context(test_operator):\n      return test_method(\n          self)  # Execute the actual test method within the context\n\n  return wrapper\n\n\nok_step_eval = report.ResourceEvaluation(resource=None,\n                                         status='ok',\n                                         reason='TestReason',\n                                         remediation='TestRemediation')\nfailed_step_eval = report.ResourceEvaluation(resource=None,\n                                             reason='TestReason',\n                                             remediation='TestRemediation',\n                                             status='failed')\nuncertain_step_eval = report.ResourceEvaluation(resource=None,\n                                                reason='TestReason',\n                                                remediation='TestRemediation',\n                                                status='uncertain')\nskipped_step_eval = report.ResourceEvaluation(resource=None,\n                                              reason='TestReason',\n                                              remediation='TestRemediation',\n                                              status='skipped')\nok_step = report.StepResult(step=Step(uuid='ok.step'))\nok_step.results.append(ok_step_eval)\nfailed_step = report.StepResult(step=Step(uuid='failed.step'))\nfailed_step.results.append(failed_step_eval)\nuncertain_step = report.StepResult(step=Step(uuid='uncertain.step'))\nuncertain_step.results.append(uncertain_step_eval)\nskipped_step = report.StepResult(step=Step(uuid='skipped.step'))\nskipped_step.results.append(skipped_step_eval)\n\n# This global operator is only used for creating step results and should not\n# interfere with thread-local tests.\noperator = op.Operator(interface=report.InteractionInterface(kind='cli'))\noperator.set_run_id('test')\noperator.interface.rm = report.TerminalReportManager()\noperator.interface.rm.reports['test'] = report.Report(run_id='test',\n                                                      parameters={})\noperator.interface.rm.reports['test'].results[ok_step.execution_id] = ok_step\noperator.interface.rm.reports['test'].results[\n    failed_step.execution_id] = failed_step\noperator.interface.rm.reports['test'].results[\n    uncertain_step.execution_id] = uncertain_step\noperator.interface.rm.reports['test'].results[\n    skipped_step.execution_id] = skipped_step\n\noperator.set_step(ok_step)\n\n\nclass OperatorTest(unittest.TestCase):\n  '''Test Report Manager'''\n\n  @with_operator_context\n  def test_positive_step_overall_status_case(self):\n    self.assertTrue(op.step_ok('gcpdiag.runbook.Step.ok.step'))\n    self.assertTrue(op.step_failed('gcpdiag.runbook.Step.failed.step'))\n    self.assertTrue(op.step_uncertain('gcpdiag.runbook.Step.uncertain.step'))\n    self.assertTrue(op.step_skipped('gcpdiag.runbook.Step.skipped.step'))\n    self.assertTrue(op.step_unexecuted('gcpdiag.runbook.Step.random.step'))\n\n  @with_operator_context\n  def test_negative_step_overall_status_case(self):\n    self.assertFalse(op.step_ok('gcpdiag.runbook.Step.failed.step'))\n    self.assertFalse(op.step_failed('gcpdiag.runbook.Step.ok.step'))\n    self.assertFalse(op.step_uncertain('gcpdiag.runbook.Step.ok.step'))\n    self.assertFalse(op.step_skipped('gcpdiag.runbook.Step.failed.step'))\n    self.assertFalse(op.step_unexecuted('gcpdiag.runbook.Step.ok.step'))\n\n  @with_operator_context\n  def test_get_and_put_parameters(self):\n    self.test_operator.parameters = {'test_key': 'test_value'}\n    self.assertEqual(op.get('test_key'), 'test_value')\n    self.assertEqual(op.get('unknown_key', 'default_value'), 'default_value')\n    op.put('new_key', 'new_value')\n    self.assertEqual(self.test_operator.parameters['new_key'], 'new_value')\n\n  @with_operator_context\n  def test_get_step_outcome(self):\n    overall_status, totals = op.get_step_outcome(ok_step.execution_id)\n    self.assertEqual(overall_status, 'ok')\n    self.assertEqual(totals, {'ok': 1})\n\n    overall_status, totals = op.get_step_outcome('unknown_step')\n    self.assertIsNone(overall_status)\n    self.assertEqual(totals, {})\n\n  @with_operator_context\n  def test_add_and_get_metadata(self):\n    op.add_metadata('metadata_key_one', 'test_value_one')\n    op.add_metadata('metadata_key_two', 'test_value_two')\n    value = op.get_metadata('metadata_key_one')\n    self.assertEqual(value, 'test_value_one')\n\n    all_metadata = op.get_all_metadata()\n    self.assertEqual(2, len(all_metadata))\n    self.assertEqual(op.get_all_metadata()['metadata_key_two'],\n                     'test_value_two')\n\n  @with_operator_context\n  def test_add_info_metadata(self):\n    info_msgs = ['info1', 'info2', 'info3']\n    for i in info_msgs:\n      op.info(i)\n    step_report = self.test_operator.interface.rm.reports[\n        self.test_operator.run_id].results.get(ok_step.execution_id)\n    self.assertEqual(info_msgs, step_report.info)\n\n  @with_operator_context\n  def test_get_context_with_create(self):\n    self.test_operator.create_context('test-project', labels={'env': 'prod'})\n    context = op.get_context()\n    self.assertEqual(context.project_id, 'test-project')\n    self.assertEqual(context.labels, {'env': 'prod'})\n\n  @with_operator_context\n  def test_get_context_lazy_init(self):\n    self.test_operator.parameters = {\n        'project_id': 'test-project-lazy',\n        'labels': {\n            'l': 'v'\n        }\n    }\n    context = op.get_context()\n    self.assertEqual(context.project_id, 'test-project-lazy')\n    self.assertEqual(context.labels, {'l': 'v'})\n\n  @with_operator_context\n  def test_get_context_with_kwargs(self):\n    context = op.get_context(project_id='kwargs-project', resources=['myres'])\n    self.assertEqual(context.project_id, 'kwargs-project')\n    # Context converts resources list to resources_pattern\n    self.assertEqual(context.resources_pattern.pattern, 'myres')\n\n  @with_operator_context\n  def test_operator_properties(self):\n    self.test_operator.set_run_id('new_run_id')\n    self.assertEqual(self.test_operator.run_id, 'new_run_id')\n    self.test_operator.set_messages({'msg': 'content'})\n    self.assertEqual(self.test_operator.messages, {'msg': 'content'})\n    self.test_operator.set_tree('tree_obj')\n    self.assertEqual(self.test_operator.tree, 'tree_obj')\n    self.test_operator.set_step('step_obj')\n    self.assertEqual(self.test_operator.step, 'step_obj')\n    self.test_operator.set_parameters({'p': 'v'})\n    self.assertEqual(self.test_operator.parameters, {'p': 'v'})\n\n  def test_get_operator_no_context_error(self):\n    with self.assertRaisesRegex(RuntimeError, 'No operator found'):\n      op.get('test_key')\n\n  @with_operator_context\n  def test_prep_msg(self):\n    self.test_operator.messages = mock.MagicMock()\n    self.test_operator.parameters = {\n        'start_time': '2024-01-01',\n        'end_time': '2024-01-02'\n    }\n    op.prep_msg('test_key', custom_var='val')\n    self.test_operator.messages.get_msg.assert_called_with(\n        'test_key',\n        start_time='2024-01-01',\n        end_time='2024-01-02',\n        custom_var='val')\n\n  @with_operator_context\n  def test_prompt(self):\n    self.test_operator.interface.prompt = mock.MagicMock(\n        return_value='user_choice')\n    result = op.prompt(message='Check?', kind='CONFIRMATION')\n    self.assertEqual(result, 'user_choice')\n    self.test_operator.interface.prompt.assert_called_once_with(\n        message='Check?', kind='CONFIRMATION', options=None, choice_msg='')\n\n  @with_operator_context\n  def test_prep_rca(self):\n    self.test_operator.interface.prepare_rca = mock.MagicMock()\n    op.prep_rca(resource=None,\n                template='tpl::prefix',\n                suffix='sfx',\n                kwarg={'k': 'v'})\n    self.test_operator.interface.prepare_rca.assert_called_once_with(\n        run_id=self.test_operator.run_id,\n        resource=None,\n        template='tpl::prefix',\n        suffix='sfx',\n        step=self.test_operator.step,\n        context={'k': 'v'})\n\n  @with_operator_context\n  def test_reporting_actions(self):\n    self.test_operator.interface.add_skipped = mock.MagicMock()\n    self.test_operator.interface.add_ok = mock.MagicMock()\n    self.test_operator.interface.add_failed = mock.MagicMock()\n    self.test_operator.interface.add_uncertain = mock.MagicMock()\n\n    res = mock.MagicMock()\n    op.add_skipped(res, 'skip_reason')\n    self.test_operator.interface.add_skipped.assert_called_once()\n\n    op.add_ok(res, 'ok_reason')\n    self.test_operator.interface.add_ok.assert_called_once()\n\n    op.add_failed(res, 'fail_reason', 'remediation')\n    self.test_operator.interface.add_failed.assert_called_once()\n\n    op.add_uncertain(res, 'uncertain_reason', 'remediation', 'human_task')\n    self.test_operator.interface.add_uncertain.assert_called_once()\n\n\nif __name__ == '__main__':\n  unittest.main()\n"
  },
  {
    "path": "gcpdiag/runbook/output/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/runbook/output/api_output.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"API class for api output implementations\"\"\"\n\nimport logging\nimport sys\n\nfrom gcpdiag.runbook.output.base_output import BaseOutput\n\n\nclass ApiOutput(BaseOutput):\n  \"\"\"API output implementation.\"\"\"\n\n  def __init__(self, execution_id=None):\n    super().__init__()\n    self.execution_id = execution_id\n\n  def get_logging_handler(self) -> logging.Handler:\n    stream_handler = logging.StreamHandler(stream=sys.stdout)\n    formatter = logging.Formatter(self._get_log_format())\n    stream_handler.setFormatter(formatter)\n    return stream_handler\n\n  def _get_log_format(self):\n    log_format = '[%(levelname)-6s] '\n    if self.execution_id:\n      log_format += f'[EID: {self.execution_id}] '\n    log_format += '%(message)s'\n    return log_format\n"
  },
  {
    "path": "gcpdiag/runbook/output/base_output.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\" Base class for different output implementations \"\"\"\nimport logging\nimport sys\nfrom typing import Any, Optional\n\nfrom gcpdiag import models\n\n\nclass BaseOutput:\n  \"\"\" Base class for different output implementations \"\"\"\n\n  def print_ok(self, resource: models.Resource, reason: str = '') -> None:\n    pass\n\n  def print_skipped(self,\n                    resource: Optional[models.Resource],\n                    reason: str,\n                    remediation: str = None) -> None:\n    pass\n\n  def print_failed(self, resource: models.Resource, reason: str,\n                   remediation: str) -> None:\n    pass\n\n  def print_uncertain(self,\n                      resource: models.Resource,\n                      reason: str,\n                      remediation: str = None) -> None:\n    pass\n\n  def prompt(self,\n             message: str,\n             kind: str = '',\n             options: dict = None,\n             choice_msg: str = '',\n             non_interactive: bool = None) -> Any:\n    pass\n\n  def info(self, message: str, step_type='INFO'):\n    pass\n\n  def display_runbook_description(self, tree) -> None:\n    pass\n\n  def get_logging_handler(self) -> logging.Handler:\n    return _LoggingHandler()\n\n\nclass _LoggingHandler(logging.Handler):\n  \"\"\"Basic Logging Hangler\"\"\"\n\n  def __init__(self, stream_config=None):\n    super().__init__()\n    self.stream_config = stream_config or {\n        logging.DEBUG: sys.stdout,\n        logging.INFO: sys.stdout,\n        logging.WARNING: sys.stderr,\n        logging.ERROR: sys.stderr,\n        logging.CRITICAL: sys.stderr\n    }\n\n  def emit(self, record):\n    record.msg = f'[{record.levelname}] {record.msg}'\n    stream = self.stream_config.get(record.levelno, sys.stderr)\n    stream.flush()\n"
  },
  {
    "path": "gcpdiag/runbook/output/terminal_output.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n# pylint: disable=cyclic-import\n\"\"\" Output implementation that prints result in human-readable format. \"\"\"\n\nimport logging\nimport os\nimport sys\nimport textwrap\nimport threading\nfrom typing import Any, Optional, TextIO\n\nimport blessings\n\n# pylint: disable=unused-import (lint is used in type hints)\nfrom gcpdiag import config, models, runbook\nfrom gcpdiag.runbook import constants\nfrom gcpdiag.runbook.flags import INTERACTIVE_MODE\nfrom gcpdiag.runbook.output.base_output import BaseOutput\n\nOUTPUT_WIDTH = 68\n\n\ndef is_cloud_shell():\n  return os.getenv('CLOUD_SHELL')\n\n\ndef emoji_wrap(char):\n  if is_cloud_shell():\n    # emoji not displayed as double width in Cloud Shell (bug?)\n    return char + ' '\n  else:\n    return char\n\n\nclass TerminalOutput(BaseOutput):\n  \"\"\" Output implementation that prints result in human-readable format. \"\"\"\n  file: TextIO\n  show_ok: bool\n  show_skipped: bool\n  log_info_for_progress_only: bool\n  lock: threading.Lock\n  line_unfinished: bool\n  term: blessings.Terminal\n\n  def __init__(self,\n               file: TextIO = sys.stdout,\n               log_info_for_progress_only: bool = True,\n               show_ok: bool = True,\n               show_skipped: bool = True):\n    self.file = file\n    self.show_ok = show_ok\n    self.show_skipped = show_skipped\n    self.log_info_for_progress_only = log_info_for_progress_only\n    self.lock = threading.Lock()\n    self.line_unfinished = False\n    self.term = blessings.Terminal()\n\n  def display_banner(self) -> None:\n    if self.term.does_styling:\n      print(self.term.bold(f\"gcpdiag {emoji_wrap('🩺')} {config.VERSION}\\n\"))\n    else:\n      print(f'gcpdiag {config.VERSION}\\n', file=sys.stderr)\n\n  def display_header(self) -> None:\n    print('Starting runbook inspection [Alpha Release]\\n', file=sys.stderr)\n\n  def display_runbook_description(self, tree):\n    self.terminal_print_line(f'{self.term.yellow(tree.name)}: {tree.__doc__}')\n\n  def display_footer(self, result) -> None:\n    totals = result.get_totals_by_status()\n    state_strs = [\n        f'{totals.get(state, 0)} {state}'\n        for state in ['skipped', 'ok', 'failed', 'uncertain']\n    ]\n    print(f\"Rules summary: {', '.join(state_strs)}\", file=sys.stderr)\n\n  def get_logging_handler(self) -> logging.Handler:\n    return _LoggingHandler(self)\n\n  def print_line(self, text: str = '') -> None:\n    \"\"\"Write a line to the desired output provided as self.file.\"\"\"\n    print(text, file=self.file, flush=True)\n\n  def _wrap_indent(self, text: str, prefix: str) -> str:\n    width = self.term.width or 80\n    width = min(width, 80)\n    return textwrap.indent(textwrap.fill(text, width - len(prefix)), prefix)\n\n  def _italic(self, text: str) -> str:\n    if is_cloud_shell():\n      # TODO(b/201958597): Cloud Shell with tmux doesn't format italic properly at the moment\n      return text\n    else:\n      return self.term.italic(text)\n\n  def terminal_update_line(self, text: str) -> None:\n    \"\"\"Update the current line on the terminal.\"\"\"\n    if self.term.width:\n      print(self.term.move_x(0) + self.term.clear_eol() + text,\n            end='',\n            flush=True,\n            file=self.file)\n      self.line_unfinished = True\n    else:\n      # If it's a stream, do not output anything, assuming that the\n      # interesting output will be passed via terminal_print_line\n      pass\n\n  def terminal_erase_line(self) -> None:\n    \"\"\"Remove the current content on the line.\"\"\"\n    if self.line_unfinished and self.term.width:\n      print(self.term.move_x(0) + self.term.clear_eol(),\n            flush=True,\n            end='',\n            file=self.file)\n    self.line_unfinished = False\n\n  def terminal_print_line(self, text: str = '') -> None:\n    \"\"\"Write a line to the terminal, replacing any current line content, and add a line feed.\"\"\"\n    if self.term.width:\n      self.terminal_update_line(text)\n      print(file=sys.stdout)\n    else:\n      print(text, file=sys.stdout)\n      # flush the output, so that we can more easily grep, tee, etc.\n      sys.stdout.flush()\n    self.line_unfinished = False\n\n  def _print_rule_header(self, rule: 'runbook.DiagnosticTree') -> None:\n    bullet = ''\n    if self.term.does_styling:\n      bullet = emoji_wrap('🔎') + ' '\n    else:\n      bullet = '*  '\n    self.terminal_print_line(bullet + self.term.yellow(rule.name))\n\n  def _print_long_desc(self, rule: 'runbook.DiagnosticTree') -> None:\n    self.terminal_print_line()\n    self.terminal_print_line(\n        self._italic(self._wrap_indent(rule.__doc__ or '', '   ')))\n    self.terminal_print_line()\n    self.terminal_print_line('   ' + rule.doc_url)\n\n  def print_skipped(self,\n                    resource: Optional[models.Resource],\n                    reason: str,\n                    remediation: str = None) -> None:\n\n\n    short_path = resource.short_path if resource is not None \\\n                 and resource.short_path is not None else ''\n    self.terminal_print_line()\n    self.terminal_print_line('   - ' + short_path.ljust(OUTPUT_WIDTH) + ' [' +\n                             self.term.yellow('SKIP') + ']')\n    if reason:\n      self.terminal_print_line('     [' + self.term.green('REASON') + ']')\n      self.terminal_print_line(textwrap.indent(reason, '     '))\n\n    if remediation:\n      self.terminal_print_line('     [' + self.term.green('REMEDIATION') + ']')\n      self.terminal_print_line(textwrap.indent(remediation, '     '))\n\n  def print_ok(self, resource: models.Resource, reason: str = '') -> None:\n    if not self.show_ok:\n      return\n    short_path = resource.short_path if resource is not None \\\n                 and resource.short_path is not None else ''\n    self.terminal_print_line()\n    self.terminal_print_line('   - ' + short_path.ljust(OUTPUT_WIDTH) + ' [' +\n                             self.term.green('OK') + ']')\n    if reason:\n      self.terminal_print_line('     [' + self.term.green('REASON') + ']')\n      self.terminal_print_line(textwrap.indent(reason, '     '))\n\n  def print_failed(self, resource: models.Resource, reason: str,\n                   remediation: str) -> None:\n    \"\"\"Output test result and registers the result to be used in\n    the runbook report.\n\n    The failure assigned a human task unless program is running\n    autonomously\n    \"\"\"\n\n\n    short_path = resource.short_path if resource is not None \\\n                 and resource.short_path is not None else ''\n    self.terminal_print_line()\n    self.terminal_print_line('   - ' + short_path.ljust(OUTPUT_WIDTH) + ' [' +\n                             self.term.red('FAIL') + ']')\n    if reason:\n      self.terminal_print_line('     [' + self.term.green('REASON') + ']')\n      self.terminal_print_line(textwrap.indent(f'{reason}', '     '))\n\n    if remediation:\n      self.terminal_print_line('     [' + self.term.green('REMEDIATION') + ']')\n      self.terminal_print_line(textwrap.indent(f'{remediation}', '     '))\n\n  def print_uncertain(self,\n                      resource: models.Resource,\n                      reason: str,\n                      remediation: str = None) -> None:\n\n    short_path = resource.short_path if resource is not None \\\n                 and resource.short_path is not None else ''\n    self.terminal_print_line()\n    self.terminal_print_line('   - ' + short_path.ljust(OUTPUT_WIDTH) + ' [' +\n                             self.term.yellow('UNCERTAIN') + ']')\n    if reason:\n      self.terminal_print_line('     [' + self.term.green('REASON') + ']')\n      self.terminal_print_line(textwrap.indent(reason, '     '))\n\n    if remediation:\n      self.terminal_print_line('     [' + self.term.green('REMEDIATION') + ']')\n      self.terminal_print_line(textwrap.indent(f'{remediation}', '     '))\n\n  def info(self, message: str, step_type='INFO'):\n    \"\"\"\n    For informational update and getting a response from user\n    \"\"\"\n    self.terminal_print_line(text='' + '[' + self.term.green(step_type) +\n                             ']: ' + f'{message}')\n\n  def prompt(self,\n             message: str,\n             kind: str = '',\n             options: dict = None,\n             choice_msg: str = 'Choose an option: ',\n             non_interactive: bool = None) -> Any:\n    \"\"\"\n    For informational update and getting a response from user\n    \"\"\"\n    non_interactive = non_interactive or config.get(INTERACTIVE_MODE)\n    if non_interactive:\n      return\n    self.terminal_print_line(text='' + '[' + self.term.green(kind) + ']: ' +\n                             f'{message}')\n\n    self.default_answer = False\n    self.answer = None\n    options_text = '\\n'\n    try:\n      if kind in constants.HUMAN_TASK and not options:\n        for option, description in constants.HUMAN_TASK_OPTIONS.items():\n          options_text += '[' + self.term.green(\n              f'{option}') + ']' + f' - {description}\\n'\n      if kind in constants.CONFIRMATION and not options:\n        for option, description in constants.CONFIRMATION_OPTIONS.items():\n          options_text += '[' + self.term.green(\n              f'{option}') + ']' + f' - {description}\\n'\n      if (kind in constants.CONFIRMATION or kind in constants.HUMAN_TASK) \\\n        and options:\n        for option, description in options.items():\n          options_text += '[' + self.term.green(\n              f'{option}') + ']' + f' - {description}\\n'\n\n      if options_text:\n        self.terminal_print_line(text=textwrap.indent(options_text, '     '))\n        self.answer = input(textwrap.indent(choice_msg, '     '))\n    except EOFError:\n      return self.answer\n    # pylint:disable=g-explicit-bool-comparison, We explicitly want to\n    # distinguish between empty string and None.\n    if self.answer == '':\n      # User just hit enter, return default.\n      return self.default_answer\n    elif self.answer is None:\n      return self.answer\n    elif self.answer.strip().lower() in ['s', 'stop']:\n      return constants.STOP\n    elif self.answer.strip().lower() in ['c', 'continue']:\n      return constants.CONTINUE\n    elif self.answer.strip().lower() in ['u', 'uncertain']:\n      return constants.UNCERTAIN\n    elif self.answer.strip().lower() in ['r', 'retest']:\n      return constants.RETEST\n    elif self.answer.strip().lower() in ['y', 'yes']:\n      return constants.YES\n    elif self.answer.strip().lower() in ['n', 'no']:\n      return constants.NO\n    elif self.answer.strip().lower() not in [\n        's', 'stop', 'c', 'continue', 'r', 'retest'\n    ]:\n      return self.answer.strip()\n    return\n\n\nclass _LoggingHandler(logging.Handler):\n  \"\"\"logging.Handler implementation used when producing a runbook report.\"\"\"\n  output: TerminalOutput\n\n  def __init__(self, output: TerminalOutput) -> None:\n    super().__init__()\n    self.output = output\n\n  def format(self, record: logging.LogRecord) -> str:\n    return record.getMessage()\n\n  def emit(self, record: logging.LogRecord) -> None:\n    if record.levelno == logging.INFO and self.output.log_info_for_progress_only:\n      msg = '   ... ' + self.format(record)\n      # make sure we don't go beyond the terminal width\n      if self.output.term.width:\n        term_overflow = len(msg) - self.output.term.width\n        if term_overflow > 0:\n          msg = msg[:-term_overflow]\n      with self.output.lock:\n        self.output.terminal_update_line(msg)\n    else:\n      msg = f'[{record.levelname}] ' + self.format(record) + ' '\n      # workaround for bug:\n      # https://github.com/googleapis/google-api-python-client/issues/1116\n      if 'Invalid JSON content from response' in msg:\n        return\n      with self.output.lock:\n        self.output.terminal_print_line(msg)\n"
  },
  {
    "path": "gcpdiag/runbook/pubsub/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/runbook/pubsub/bigquery_subscription_delivery.py",
    "content": "# Copyright 2025 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Runbook for troubleshooting BigQuery subscriptions.\"\"\"\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import runbook, utils\nfrom gcpdiag.queries import apis, bigquery, crm, iam, monitoring, pubsub\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.pubsub import flags\nfrom gcpdiag.runbook.pubsub import generalized_steps as pubsub_gs\n\n# Query to fetch push request counts grouped by response_class\nRESPONSE_CODES = (\n    'fetch pubsub_subscription '\n    '| metric \"pubsub.googleapis.com/subscription/push_request_count\"'\n    '| filter resource.project_id == \"{project_id}\"'\n    ' && (resource.subscription_id == \"{subscription_name}\") '\n    '| align rate(1m) '\n    '| every 1m '\n    '| group_by [metric.response_class], '\n    ' [value_push_request_count_aggregate: aggregate(value.push_request_count)]'\n    '| within 30m ')\n\n\nclass BigquerySubscriptionDelivery(runbook.DiagnosticTree):\n  \"\"\"Troubleshoot BigQuery Subscription Errors\n\nA diagnostic guide to help you resolve common issues\ncausing message delivery failures from Pub/Sub to BigQuery.\n  \"\"\"\n  parameters = {\n      flags.PROJECT_ID: {\n          'type': str,\n          'help': 'The Project ID of the resource under investigation',\n          'required': True\n      },\n      flags.SUBSCRIPTION_NAME: {\n          'type': str,\n          'help': 'The Pub/Sub subscription ID',\n          'required': True\n      },\n      'table_id': {\n          'type': str,\n          'help':\n              ('The BigQuery table ID in the format \"project_id:dataset.table\" '\n               'or \"dataset.table\"'),\n          'required': True\n      }\n  }\n\n  def build_tree(self):\n    \"\"\"Construct the diagnostic tree with appropriate steps.\"\"\"\n    start = StartStep()\n    self.add_start(start)\n\n    subscription_check = SubscriptionExistenceCheck()\n    self.add_step(parent=start, child=subscription_check)\n\n    table_check = BigQueryTableExistenceCheck()\n    self.add_step(parent=subscription_check, child=table_check)\n\n    permission_check = BigQueryWriterPermissionCheck()\n    self.add_step(parent=table_check, child=permission_check)\n\n    subscription_status_check = SubscriptionStatusCheck(\n        is_push_subscription=True)\n    self.add_step(parent=permission_check, child=subscription_status_check)\n\n    quota_check = pubsub_gs.PubsubQuotas()\n    self.add_step(subscription_status_check, quota_check)\n\n    investigate_push_errors = InvestigateBQPushErrors()\n    self.add_step(parent=quota_check, child=investigate_push_errors)\n\n    throughput = pubsub_gs.ThroughputQualification()\n    self.add_step(investigate_push_errors, throughput)\n\n    dlq_check = pubsub_gs.DeadLetterTopic()\n    self.add_step(throughput, dlq_check)\n\n    dlq_check_permissions = pubsub_gs.DeadLetterTopicPermissions()\n    self.add_step(dlq_check, dlq_check_permissions)\n\n    self.add_end(EndStep())\n\n\nclass StartStep(runbook.StartStep):\n  \"\"\"Check that the project exists and is reachable.\"\"\"\n  template = 'generics::start'\n\n  def execute(self):\n    \"\"\"Check that the project exists and Pub/Sub API is enabled.\"\"\"\n    try:\n      project = crm.get_project(op.get(flags.PROJECT_ID))\n      if not project:\n        op.add_failed(resource=None,\n                      reason=op.prep_msg(op.FAILURE_REASON),\n                      remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n        return\n      else:\n        op.add_ok(project, reason=f\"Project '{project.id}' found.\")\n    except utils.GcpApiError:\n      op.add_failed(resource=None,\n                    reason=op.prep_msg(op.FAILURE_REASON,\n                                       project_id=op.get(flags.PROJECT_ID)),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n      return\n    if not apis.is_enabled(op.get(flags.PROJECT_ID), 'pubsub'):\n      op.add_skipped(\n          project,\n          reason='Pub/Sub API is not enabled, please enable to proceed.')\n      return\n\n\nclass SubscriptionExistenceCheck(runbook.Step):\n  \"\"\"Check that the Pub/Sub subscription exists.\"\"\"\n  template = 'generics::subscription_existence'\n\n  def execute(self):\n    \"\"\"Check that the Pub/Sub subscription exists.\"\"\"\n    subscription = None\n    try:\n      subscription = pubsub.get_subscription(op.get(flags.PROJECT_ID),\n                                             op.get(flags.SUBSCRIPTION_NAME))\n    except utils.GcpApiError as err:\n      if 'Resource not found' in err.message:\n        op.add_failed(resource=subscription,\n                      reason=op.prep_msg(op.FAILURE_REASON,\n                                         subscription_name=op.get(\n                                             flags.SUBSCRIPTION_NAME)),\n                      remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n        return\n      else:\n        raise\n\n    if not subscription:\n      op.add_failed(resource=subscription,\n                    reason=op.prep_msg(op.FAILURE_REASON,\n                                       subscription_name=op.get(\n                                           flags.SUBSCRIPTION_NAME)),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n    else:\n      op.add_ok(subscription,\n                reason=f\"Pub/Sub subscription '{subscription.name}' found.\")\n\n\nclass BigQueryTableExistenceCheck(runbook.Step):\n  \"\"\"Check that the BigQuery table exists.\"\"\"\n  template = 'generics::bq_table_existence'\n\n  def execute(self):\n    \"\"\"Check that the BigQuery table exists.\"\"\"\n    project_id = op.get(flags.PROJECT_ID)\n    table_full_id = op.get('table_id')\n    if ':' in table_full_id:\n      project_id, table_id = table_full_id.split(':', 1)\n    else:\n      table_id = table_full_id\n    try:\n      dataset_id, table_name = table_id.split('.', 1)\n    except ValueError:\n      op.add_failed(resource=None,\n                    reason=op.prep_msg(op.FAILURE_REASON,\n                                       table_full_id=table_full_id),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n      return\n\n    table = bigquery.get_table(project_id, dataset_id, table_name)\n    if not table:\n      op.add_failed(resource=None,\n                    reason=op.prep_msg(op.FAILURE_REASON,\n                                       table_full_id=table_full_id),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n    else:\n      op.add_ok(\n          resource=None,\n          reason=f'BigQuery table {table_full_id} found.',\n      )\n\n\nclass BigQueryWriterPermissionCheck(runbook.Step):\n  \"\"\"Check that the Pub/Sub service agent has writer permissions on the table.\"\"\"\n  template = 'generics::permission_check'\n\n  def execute(self):\n    \"\"\"Check that the Pub/Sub service agent has writer permissions.\"\"\"\n    project = crm.get_project(op.get(flags.PROJECT_ID))\n    table_full_id = op.get('table_id')\n    if ':' in table_full_id:\n      table_project_id, table_id = table_full_id.split(':', 1)\n    else:\n      table_project_id = op.get(flags.PROJECT_ID)\n      table_id = table_full_id\n    try:\n      dataset_id, table_name = table_id.split('.', 1)\n    except ValueError:\n      # Handled in BigQueryTableExistenceCheck\n      return\n\n    service_account = \\\n        f'serviceAccount:service-{project.number}@gcp-sa-pubsub.iam.gserviceaccount.com'\n\n    table_policy = bigquery.get_table(table_project_id, dataset_id, table_name)\n    if not table_policy:\n      # table not found, handled in previous step\n      return\n\n    project_policy = iam.get_project_policy(op.get_context())\n    required_permissions = {\n        'bigquery.tables.updateData', 'bigquery.tables.getData'\n    }\n    has_permissions = all(\n        project_policy.has_permission(service_account, p)\n        for p in required_permissions)\n\n    if not has_permissions:\n      op.add_failed(resource=None,\n                    reason=op.prep_msg(op.FAILURE_REASON,\n                                       service_account=service_account,\n                                       project_id=project),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION,\n                                            service_account=service_account))\n    else:\n      op.add_ok(\n          resource=None,\n          reason=\n          'Pub/Sub service account has permissions to write to the BigQuery table.'\n      )\n\n\nclass SubscriptionStatusCheck(runbook.Step):\n  \"\"\"Check the status of the BigQuery subscription.\"\"\"\n  template = 'generics::subscription_status'\n\n  def execute(self):\n    \"\"\"Check the BigQuery subscription status and look for common issues.\"\"\"\n    try:\n      subscription = pubsub.get_subscription(op.get(flags.PROJECT_ID),\n                                             op.get(flags.SUBSCRIPTION_NAME))\n    except ValueError:\n      # Handled in SubscriptionExistenceCheck\n      return\n\n    if subscription.is_active():\n      op.add_ok(resource=subscription,\n                reason=f'The subscription {subscription} state is ACTIVE.')\n    else:\n      op.add_failed(\n          resource=subscription,\n          reason=f'The Subscription {subscription} is not in an ACTIVE state.',\n          remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n\n\nclass InvestigateBQPushErrors(runbook.Step):\n  \"\"\"Investigate message backlog issues for BigQuery subscriptions using push metrics.\"\"\"\n\n  template = 'generics::invalid'\n\n  def execute(self):\n    \"\"\"Check push request responses from BigQuery for issues.\"\"\"\n    project_id = op.get(flags.PROJECT_ID)\n\n    push_metric = monitoring.query(\n        project_id,\n        RESPONSE_CODES.format(project_id=project_id,\n                              subscription_name=op.get(\n                                  flags.SUBSCRIPTION_NAME)),\n    )\n    if not push_metric:\n      op.add_skipped(\n          resource=crm.get_project(project_id),\n          reason=(\n              'Skipping as no traffic delivery to the BigQuery has been detected'\n          ))\n    else:\n      subscription = pubsub.get_subscription(project_id=project_id,\n                                             subscription_name=op.get(\n                                                 flags.SUBSCRIPTION_NAME))\n      found_error_response: bool = False\n      for metric_values in push_metric.values():\n        response_class = get_path(metric_values,\n                                  ('labels', 'metric.response_class'))\n        if response_class != 'ack':\n          found_error_response = True\n          op.add_failed(resource=subscription,\n                        reason=op.prep_msg(op.FAILURE_REASON),\n                        remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n      if not found_error_response:\n        op.add_ok(resource=subscription,\n                  reason='No error responses from BigQuery detected')\n\n\nclass EndStep(runbook.EndStep):\n  \"\"\"Finalizing the runbook.\"\"\"\n\n  def execute(self):\n    \"\"\"Finalizing the runbook.\"\"\"\n    op.info('Finished troubleshooting BigQuery subscriptions.')\n"
  },
  {
    "path": "gcpdiag/runbook/pubsub/bigquery_subscription_delivery_test.py",
    "content": "# Copyright 2025 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test for the BigQuery subscriptions runbook.\"\"\"\n\nfrom gcpdiag import config\nfrom gcpdiag.runbook import pubsub, snapshot_test_base\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = pubsub\n  runbook_name = 'pubsub/bigquery-subscription-delivery'\n  project_id = 'gcpdiag-pubsub1-aaaa'\n  config.init({'auto': True, 'interface': 'cli'}, project_id)\n\n  rule_parameters = [{\n      'project_id': 'gcpdiag-pubsub1-aaaa',\n      'subscription_name': 'gcpdiag-pubsub1subscription2-9pm6hng1',\n      'table_id': 'test_dataset.test_table'\n  }]\n"
  },
  {
    "path": "gcpdiag/runbook/pubsub/constants.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Constants for the pubsub runbook.\"\"\"\n# pylint: disable=unused-wildcard-import, wildcard-import\nfrom gcpdiag.runbook.iam.constants import *\n"
  },
  {
    "path": "gcpdiag/runbook/pubsub/flags.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Flags for the pubsub runbook.\"\"\"\n# pylint: disable=unused-wildcard-import, wildcard-import\nfrom gcpdiag.runbook.gcp.flags import *\nfrom gcpdiag.runbook.iam.flags import *\n\nSUBSCRIPTION_NAME = 'subscription_name'\n"
  },
  {
    "path": "gcpdiag/runbook/pubsub/gcs_subscription_delivery.py",
    "content": "# Copyright 2026 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Runbook for troubleshooting Pub/Sub Cloud Storage subscriptions\"\"\"\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import models, runbook, utils\nfrom gcpdiag.queries import apis, crm, gcs, monitoring, pubsub\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.pubsub import flags\nfrom gcpdiag.runbook.pubsub import generalized_steps as pubsub_gs\n\n# Query to fetch push request counts grouped by response_class\nRESPONSE_CODES = (\n    'fetch pubsub_subscription '\n    '| metric \"pubsub.googleapis.com/subscription/push_request_count\"'\n    '| filter resource.project_id == \"{project_id}\"'\n    ' && (resource.subscription_id == \"{subscription_name}\") '\n    '| align rate(1m) '\n    '| every 1m '\n    '| group_by [metric.response_class], '\n    ' [value_push_request_count_aggregate: aggregate(value.push_request_count)]'\n    '| within 30m ')\n\n\nclass GcsSubscriptionDelivery(runbook.DiagnosticTree):\n  \"\"\"Troubleshoot Pub/Sub to Cloud Storage subscription issues.\n\n  This runbook checks for common configuration problems with Pub/Sub subscriptions\n  that are set up to write directly to a Google Cloud Storage bucket.\n\n  Checks performed:\n  - Subscription existence and type.\n  - Cloud Storage bucket existence.\n  - IAM permissions for the Pub/Sub service account on the bucket.\n  - State of the Pub/Sub subscription.\n  \"\"\"\n  parameters = {\n      flags.PROJECT_ID: {\n          'type': str,\n          'help': 'The Project ID containing the Pub/Sub subscription',\n          'required': True\n      },\n      flags.SUBSCRIPTION_NAME: {\n          'type': str,\n          'help': 'The Pub/Sub subscription ID',\n          'required': True\n      }\n  }\n\n  def build_tree(self):\n    \"\"\"Construct the diagnostic tree with appropriate steps.\"\"\"\n    start = GcsSubscriptionDeliveryStart()\n    self.add_start(start)\n\n    subscription_check = GcsSubscriptionExistenceCheck()\n    self.add_step(parent=start, child=subscription_check)\n\n    check_bucket = CheckGcsBucket()\n    self.add_step(parent=subscription_check, child=check_bucket)\n\n    check_permissions = CheckServiceAccountPermissions()\n    self.add_step(parent=check_bucket, child=check_permissions)\n\n    quota_check = pubsub_gs.PubsubQuotas()\n    self.add_step(check_permissions, quota_check)\n\n    end_point_responses = ResponseCodeStep()\n    self.add_step(quota_check, end_point_responses)\n\n    check_sub_state = pubsub_gs.ActiveSubscription()\n    self.add_step(parent=end_point_responses, child=check_sub_state)\n\n    throughput = pubsub_gs.ThroughputQualification()\n    self.add_step(check_sub_state, throughput)\n\n    deadletter = pubsub_gs.DeadLetterTopic()\n    self.add_step(throughput, deadletter)\n\n    deadletter_permissions = pubsub_gs.DeadLetterTopicPermissions()\n    self.add_step(deadletter, deadletter_permissions)\n\n    self.add_end(GcsSubscriptionDeliveryEnd())\n\n\nclass GcsSubscriptionDeliveryStart(runbook.StartStep):\n  \"\"\"Start GCS Subscription check\n\n  Check that the project exists and is reachable.\n  \"\"\"\n\n  template = 'generics::start'\n\n  def execute(self):\n    \"\"\"Check that the project exists and Pub/Sub API is enabled\"\"\"\n    try:\n      project = crm.get_project(op.get(flags.PROJECT_ID))\n      if not project:\n        op.add_failed(resource=None,\n                      reason=op.prep_msg(op.FAILURE_REASON),\n                      remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n        return\n      else:\n        op.add_ok(project, reason=f\"Project '{project.id}' found.\")\n    except utils.GcpApiError:\n      op.add_failed(resource=None,\n                    reason=op.prep_msg(op.FAILURE_REASON,\n                                       project_id=op.get(flags.PROJECT_ID)),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n      return\n    if not apis.is_enabled(op.get(flags.PROJECT_ID), 'pubsub'):\n      op.add_skipped(\n          project,\n          reason='Pub/Sub API is not enabled, please enable to proceed.')\n      return\n\n\nclass GcsSubscriptionExistenceCheck(runbook.Step):\n  \"\"\"Check that the Pub/Sub subscription exists.\n\n  This step checks that the Pub/Sub subscription exists and is a gcs subscription.\n  \"\"\"\n\n  template = 'generics::subscription_existence'\n\n  def execute(self):\n    \"\"\"Check that the Pub/Sub subscription exists.\"\"\"\n    try:\n      project_id = op.get(flags.PROJECT_ID)\n      subscription_id = op.get(flags.SUBSCRIPTION_NAME)\n      subscription = pubsub.get_subscription(project_id, subscription_id)\n    except utils.GcpApiError:\n      op.add_failed(resource=None,\n                    reason=op.prep_msg(op.FAILURE_REASON,\n                                       subscription_name=op.get(\n                                           flags.SUBSCRIPTION_NAME)),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n      return\n\n    if not subscription.is_gcs_subscription:\n      op.add_failed(resource=subscription,\n                    reason=op.prep_msg(op.FAILURE_REASON,\n                                       subscription_name=op.get(\n                                           flags.SUBSCRIPTION_NAME)),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n    else:\n      op.add_ok(\n          subscription,\n          reason=(\n              f'Subscription {subscription_id} is a Cloud Storage subscription'\n              f'targeting bucket: {subscription.gcs_subscription_bucket()}'))\n\n\nclass CheckGcsBucket(runbook.Step):\n  \"\"\"Checks if the target Cloud Storage bucket exists.\n\n  This step checks if the target Cloud Storage bucket exists.\n  \"\"\"\n\n  template = 'generics::gcs_bucket_existence'\n\n  def execute(self):\n    \"\"\"Checking Cloud Storage bucket existence\"\"\"\n    subscription = pubsub.get_subscription(op.get(flags.PROJECT_ID),\n                                           op.get(flags.SUBSCRIPTION_NAME))\n    bucket_name = subscription.gcs_subscription_bucket()\n    context = models.Context(project_id=op.get(flags.PROJECT_ID))\n    if not bucket_name:\n      op.add_failed(resource=None,\n                    reason=op.prep_msg(op.FAILURE_REASON),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n      return\n\n    try:\n      bucket = gcs.get_bucket(context, bucket_name)\n      if bucket:\n        op.add_ok(bucket, reason=f'Target bucket {bucket_name} exists.')\n      else:\n        op.add_failed(resource=None,\n                      reason=op.prep_msg(op.FAILURE_REASON),\n                      remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n    except utils.GcpApiError:\n      op.add_failed(resource=None,\n                    reason=op.prep_msg(op.FAILURE_REASON),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n\n\nclass CheckServiceAccountPermissions(runbook.Step):\n  \"\"\"Checks if the Pub/Sub service account has correct permissions on the bucket.\n\n  This step checks if the Pub/Sub service account has correct permissions on the bucket\n  \"\"\"\n\n  template = 'generics::gcs_permission_check'\n\n  def execute(self):\n    \"\"\"Checking Pub/Sub service account permissions on the bucket\"\"\"\n    project_id = op.get(flags.PROJECT_ID)\n    subscription = pubsub.get_subscription(project_id,\n                                           op.get(flags.SUBSCRIPTION_NAME))\n    bucket_name = subscription.gcs_subscription_bucket()\n    context = models.Context(project_id=project_id)\n\n    if not bucket_name:\n      op.add_skipped(\n          None, reason='Bucket name not found, skipping permission checks.')\n      return\n\n    project = crm.get_project(project_id)\n    service_account = \\\n    f'serviceAccount:service-{project.number}@gcp-sa-pubsub.iam.gserviceaccount.com'\n\n    required_permissions = ['storage.objects.create', 'storage.buckets.get']\n\n    try:\n      policy = gcs.get_bucket_iam_policy(context, bucket_name)\n      has_permissions = all(\n          policy.has_permission(service_account, p)\n          for p in required_permissions)\n\n    except utils.GcpApiError as e:\n      op.add_uncertain(\n          subscription,\n          reason=\n          f'Could not verify IAM permissions on bucket {bucket_name}. Error: {e}',\n          remediation=\n          ('Please ensure you have permissions to get the bucket\\'s IAM policy '\n           '(`storage.buckets.getIamPolicy`) and check manually.'))\n      return\n\n    if has_permissions:\n      op.add_ok(\n          subscription,\n          reason=\n          (f'Pub/Sub service account {service_account} has the necessary permissions '\n           f'on bucket {bucket_name}.'))\n    else:\n      op.add_failed(resource=None,\n                    reason=op.prep_msg(op.FAILURE_REASON,\n                                       service_account=service_account,\n                                       bucket_name=bucket_name),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION,\n                                            service_account=service_account,\n                                            bucket_name=bucket_name))\n\n\nclass ResponseCodeStep(runbook.Step):\n  \"\"\"Check push request responses from the endpoint.\n\n  This step checks the responses coming from the endpoint and the\n  success rates.\n  \"\"\"\n\n  template = 'generics::endpoint_response'\n\n  def execute(self):\n    \"\"\"Check push request responses from the endpoint\"\"\"\n    project_id = op.get(flags.PROJECT_ID)\n\n    push_metric = monitoring.query(\n        project_id,\n        RESPONSE_CODES.format(project_id=project_id,\n                              subscription_name=op.get(\n                                  flags.SUBSCRIPTION_NAME)),\n    )\n    if not push_metric:\n      op.add_skipped(\n          resource=crm.get_project(project_id),\n          reason=(\n              'Skipping as no traffic delivery to the endpoint has been detected'\n          ))\n    else:\n      subscription = pubsub.get_subscription(project_id=project_id,\n                                             subscription_name=op.get(\n                                                 flags.SUBSCRIPTION_NAME))\n      found_error_response: bool = False\n      for metric_values in push_metric.values():\n        response_class = get_path(metric_values,\n                                  ('labels', 'metric.response_class'))\n        if response_class != 'ack':\n          found_error_response = True\n          op.add_failed(resource=subscription,\n                        reason=op.prep_msg(op.FAILURE_REASON),\n                        remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n      if not found_error_response:\n        op.add_ok(resource=subscription,\n                  reason='No error responses from the endpoint detected')\n\n\nclass GcsSubscriptionDeliveryEnd(runbook.EndStep):\n  \"\"\"End Step\n\n  No more checks.\n  \"\"\"\n\n  def execute(self):\n    \"\"\"Summarizing the findings\"\"\"\n    project_id = op.get(flags.PROJECT_ID)\n    subscription_id = op.get(flags.SUBSCRIPTION_NAME)\n    op.info(\n        f'Finished checks for Pub/Sub to GCS subscription' \\\n          f'{subscription_id} in project {project_id}.'\n    )\n    op.info(\n        'Please review the check results above. If issues persist, ' \\\n        'check Cloud Logging for errors related to the subscription.'\n    )\n"
  },
  {
    "path": "gcpdiag/runbook/pubsub/gcs_subscription_delivery_test.py",
    "content": "# Copyright 2026 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test class for pubsub/GcsSubscriptionDelivery\"\"\"\n\nfrom gcpdiag import config\nfrom gcpdiag.runbook import pubsub, snapshot_test_base\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = pubsub\n  runbook_name = 'pubsub/gcs-subscription-delivery'\n  project_id = 'gcpdiag-pubsub1-aaaa'\n  config.init({'auto': True, 'interface': 'cli'}, project_id)\n\n  rule_parameters = [{\n      'project_id': 'gcpdiag-pubsub1-aaaa',\n      'subscription_name': 'gcpdiag-pubsub1subscription3gcs-9pm6hng1'\n  }]\n"
  },
  {
    "path": "gcpdiag/runbook/pubsub/generalized_steps.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Common steps for Pub/Sub runbooks.\"\"\"\n\nimport re\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import runbook\nfrom gcpdiag.queries import crm, iam, monitoring, pubsub, quotas\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.pubsub import flags\n\n\nclass PubsubQuotas(runbook.Step):\n  \"\"\"Has common step to check if any Pub/Sub quotas are being exceeded in the project.\n\n  This step checks if any quotas have been exceeded.\n  \"\"\"\n\n  template = 'generics::quota_exceeded'\n\n  def execute(self):\n    \"\"\"Checks if any Pub/Sub quotas are being exceeded.\"\"\"\n    if self.quota_exceeded_found is True:\n      op.add_failed(\n          resource=crm.get_project(op.get(flags.PROJECT_ID)),\n          reason=op.prep_msg(op.FAILURE_REASON),\n          remediation=op.prep_msg(op.FAILURE_REMEDIATION),\n      )\n    else:\n      op.add_ok(\n          resource=crm.get_project(op.get(flags.PROJECT_ID)),\n          reason='Quota usage is within project limits.',\n      )\n\n  def quota_exceeded_found(self) -> bool:\n    quota_exceeded_query = (\n        quotas.QUOTA_EXCEEDED_HOURLY_PER_SERVICE_QUERY_TEMPLATE.format(\n            service_name='pubsub', within_days=1))\n    time_series = monitoring.query(op.get(flags.PROJECT_ID),\n                                   quota_exceeded_query)\n    if time_series:\n      return True\n    return False\n\n\nclass ThroughputQualification(runbook.Step):\n  \"\"\"Has common step to validate subscription qualification attributes.\n\n  This step checks if the throughput qualification is in a good state.\n  \"\"\"\n\n  template = 'generics::throughput_qualification'\n\n  def execute(self):\n    \"\"\"Checks if subscription has good health (high qualification).\"\"\"\n\n    subscription = pubsub.get_subscription(project_id=op.get(flags.PROJECT_ID),\n                                           subscription_name=op.get(\n                                               flags.SUBSCRIPTION_NAME))\n\n    qualification_query = (\n        'fetch pubsub_subscription | metric'\n        ' \"pubsub.googleapis.com/subscription/delivery_latency_health_score\" |'\n        ' filter (resource.subscription_id ==\"{}\") | group_by 1m,'\n        ' [value_delivery_latency_health_score_sum:sum(if(value.delivery_latency_health_score,'\n        ' 1, 0))] | every 1m | within 10m').format(subscription.name)\n\n    low_health_metrics = []\n    time_series = monitoring.query(op.get(flags.PROJECT_ID),\n                                   qualification_query)\n    for metric in list(time_series.values()):\n      # metric_dict[get_path(metric, ('labels','metric.criteria'))] = metric['values']\n      if metric['values'][0][-1] == 0:\n        low_health_metrics.append(\n            get_path(metric, ('labels', 'metric.criteria')))\n\n    if low_health_metrics:\n      op.add_failed(\n          resource=subscription,\n          reason=op.prep_msg(op.FAILURE_REASON,\n                             low_health_metrics=low_health_metrics),\n          remediation=op.prep_msg(op.FAILURE_REMEDIATION),\n      )\n    else:\n      op.add_ok(resource=subscription, reason='Subcription has good health')\n\n\nclass ActiveSubscription(runbook.Step):\n  \"\"\"Has common step to validate if the subscription is active.\n\n  This step checks if the subscription is in active (valid) state.\n  \"\"\"\n\n  template = 'generics::subscription_state'\n\n  def execute(self):\n    \"\"\"Checks subscription activity status.\"\"\"\n    subscription = pubsub.get_subscription(project_id=op.get(flags.PROJECT_ID),\n                                           subscription_name=op.get(\n                                               flags.SUBSCRIPTION_NAME))\n    if subscription.is_active():\n      op.add_ok(resource=subscription, reason='Subscription is active')\n    else:\n      op.add_failed(resource=subscription,\n                    reason='Inactive subscription. ',\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n\n\nclass DeadLetterTopic(runbook.Step):\n  \"\"\"Has common step to check if the subscription has a dead letter topic.\n\n  This step checks if the subscription has a Dead Letter Topic attached.\n  This is important to remove the messages that have failed processing out of the\n  main subscription.\n  \"\"\"\n\n  template = 'generics::dead_letter_topic'\n\n  def execute(self):\n    \"\"\"Checks for dead letter topic presence.\"\"\"\n    subscription = pubsub.get_subscription(project_id=op.get(flags.PROJECT_ID),\n                                           subscription_name=op.get(\n                                               flags.SUBSCRIPTION_NAME))\n    if subscription.has_dead_letter_topic():\n      op.add_ok(resource=subscription,\n                reason='Dead letter topic already attached')\n    else:\n      op.add_failed(resource=subscription,\n                    reason=op.prep_msg(op.FAILURE_REASON),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n\n\nclass DeadLetterTopicPermissions(runbook.Step):\n  \"\"\"\"Verifies that the Pub/Sub service agent has the necessary IAM permissions \\\n  for the configured Dead Letter Topic.\n\n  This step checks if the pubsub agent has the relevant permissions to move\n  messages whose processing has failed continuously to the dead letter topic.\n  \"\"\"\n\n  template = 'generics::dead_letter_topic_permissions'\n\n  def execute(self):\n    \"\"\"Checks for dead letter topic permissions.\"\"\"\n    project_id = op.get(flags.PROJECT_ID)\n    project = crm.get_project(project_id=project_id)\n    subscription = pubsub.get_subscription(\n        project_id=project_id,\n        subscription_name=op.get(flags.SUBSCRIPTION_NAME),\n    )\n\n    if not subscription.has_dead_letter_topic():\n      op.add_skipped(\n          subscription,\n          'Subscription does not have a dead letter topic configured.')\n      return\n    # dead letter topic is in another project that the user may not be allowed\n    if subscription.has_dead_letter_topic() and subscription.dead_letter_topic(\n    ).split('/')[1] != project_id:\n      op.info(\n          'Dead Letter topic permissions could not be verified. ' \\\n          'Please ensure both the publisher role to the dead letter topic/project ' \\\n          'level and the subscriber role at the subscription/project level to the ' \\\n          'pubsub agent ' \\\n          'serviceAccount:service-<project-number>@gcp-sa-pubsub.iam.gserviceaccount.com ' \\\n          'are assigned'\n      )\n      op.add_skipped(resource=project,\n                     reason='Dead Letter topic is in another project.')\n      return\n\n    role_publisher = 'roles/pubsub.publisher'\n    role_subscriber = 'roles/pubsub.subscriber'\n    policy = iam.get_project_policy(op.get_context())\n    service_account_re = re.compile('serviceAccount:service-' +\n                                    str(project.number) +\n                                    '@gcp-sa-pubsub.iam.gserviceaccount.com')\n\n    service_account = next(\n        filter(\n            service_account_re.match,\n            policy.get_members(),\n        ),\n        None,\n    )\n\n    if not service_account:\n      op.add_skipped(resource=project, reason='no Pub/Sub Service Agent found')\n      return\n\n    # check at the project level\n    if policy.has_role_permissions(\n        member=service_account,\n        role=role_subscriber) and policy.has_role_permissions(\n            member=service_account, role=role_publisher):\n      op.add_ok(resource=project,\n                reason='Dead Letter permissions assigned at the project level')\n      return\n\n    # check at the resource level\n    subscription_policy = pubsub.get_subscription_iam_policy(\n        op.get_context(), subscription.full_path)\n    topic_policy = pubsub.get_topic_iam_policy(op.get_context(),\n                                               subscription.dead_letter_topic())\n\n    # log uncertain in case of fine grained access restrictions\n    if not subscription_policy.has_role_permissions(\n        service_account,\n        role_subscriber) or not topic_policy.has_role_permissions(\n            service_account, role_publisher):\n      op.add_uncertain(\n          resource=project,\n          reason='Missing dead letter topic permissions',\n          remediation=\n          'Please ensure both the publisher role to the dead letter topic/project ' \\\n          'level and the subscriber role at the subscription/project level to the ' \\\n          'pubsub agent {} are assigned'\n          .format(service_account))\n    else:\n      op.add_ok(resource=subscription,\n                reason='Dead letter topic permissions assigned')\n"
  },
  {
    "path": "gcpdiag/runbook/pubsub/generalized_steps_test.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Tests for common steps for Pub/Sub runbooks.\"\"\"\n"
  },
  {
    "path": "gcpdiag/runbook/pubsub/pull_subscription_delivery.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Module containing Pub/Sub Pull Delivery diagnostic tree and custom steps.\"\"\"\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import runbook, utils\nfrom gcpdiag.queries import apis, crm, monitoring, pubsub\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.pubsub import flags\nfrom gcpdiag.runbook.pubsub import generalized_steps as pubsub_gs\n\nDELIVERY_RATE = (\n    'fetch pubsub_subscription | metric'\n    ' \"pubsub.googleapis.com/subscription/sent_message_count\"| filter'\n    ' resource.project_id == \"{project_id}\" && (resource.subscription_id =='\n    ' \"{subscription_name}\") | '\n    ' align rate(1m) | every 1m | group_by [],'\n    ' [value_sent_message_count_aggregate: aggregate(value.sent_message_count)]'\n    ' | within 10m')\n\nUNACKED_MESSAGES = (\n    'fetch pubsub_subscription | metric'\n    ' \"pubsub.googleapis.com/subscription/num_undelivered_messages\" | filter'\n    ' resource.project_id == \"{project_id}\" && (resource.subscription_id =='\n    ' \"{subscription_name}\") | group_by 1m,'\n    ' [value_num_undelivered_messages_mean:'\n    ' mean(value.num_undelivered_messages)] | every 1m | group_by [],'\n    ' [value_num_undelivered_messages_mean_aggregate:'\n    ' aggregate(value_num_undelivered_messages_mean)] | within 10m')\n\n\nclass PullSubscriptionDelivery(runbook.DiagnosticTree):\n  \"\"\"Diagnostic checks for Cloud Pub/Sub pull delivery issues.\n\n  Provides a DiagnosticTree to check for issues related to delivery issues\n  for subscriptions in Cloud Pub/Sub. Particularly this runbook focuses on common issues\n  experienced while using Pub/Sub pull subscriptions.\n\n  - Areas:\n    - delivery latency\n    - quotas\n    - pull rate\n    - throughput rate\n  \"\"\"\n\n  parameters = {\n      flags.PROJECT_ID: {\n          'type': str,\n          'help': 'The Project ID of the resource under investigation',\n          'required': True,\n      },\n      flags.SUBSCRIPTION_NAME: {\n          'type': str,\n          'help': ('The name of subscription to evaluate in the runbook'),\n          'required': True,\n      },\n  }\n\n  def build_tree(self):\n    \"\"\"Construct the Diagnostic Tree with appropriate steps.\"\"\"\n    # Instantiate your step classes\n    start = PullSubscriptionDeliveryStart()\n    self.add_start(start)\n\n    quota_check = pubsub_gs.PubsubQuotas()\n    self.add_step(start, quota_check)\n\n    pull_rate = PullRate()\n    self.add_step(quota_check, pull_rate)\n\n    self.add_end(PullSubscriptionDeliveryEnd())\n\n\nclass PullSubscriptionDeliveryStart(runbook.StartStep):\n  \"\"\"Start step of runbook.\n\n  Gets the subscription and confirms it exists in the project.\n  \"\"\"\n\n  def execute(self):\n    \"\"\"Start step.\"\"\"\n    project = crm.get_project(op.get(flags.PROJECT_ID))\n    if project:\n      op.info(f'name: {project.name}, id: {project.id}')\n\n    if not apis.is_enabled(op.get(flags.PROJECT_ID), 'pubsub'):\n      op.add_skipped(\n          project,\n          reason='Pub/Sub API is not enabled, please enable to proceed.')\n      return\n\n    subscription_name = op.get(flags.SUBSCRIPTION_NAME)\n    # check subscription exists and is pull\n    try:\n      subscription = pubsub.get_subscription(\n          project_id=op.get(flags.PROJECT_ID),\n          subscription_name=subscription_name)\n    except utils.GcpApiError:\n      op.add_skipped(\n          resource=project,\n          reason=\n          ('Could not find subscription {subscription_name}, please confirm it exists or '\n           'if recreated please wait a few minutes before querying the runbook'.\n           format(subscription_name=subscription_name)),\n      )\n    else:\n      if subscription.is_push_subscription():\n        op.add_skipped(\n            resource=project,\n            reason=\n            ('Skipping execution because provided {subscription_name} is a push subscription. '\n             .format(subscription_name=subscription_name)),\n        )\n\n\nclass PullRate(runbook.Gateway):\n  \"\"\"Has common step to check the high backlog vs the delivery rate ratio.\"\"\"\n\n  def execute(self):\n    \"\"\"Checks if delivery rate is low i.e. receiving fewer messages than expected.\"\"\"\n    subscription = pubsub.get_subscription(project_id=op.get(flags.PROJECT_ID),\n                                           subscription_name=op.get(\n                                               flags.SUBSCRIPTION_NAME))\n\n    unacked_messages = self.unacked_messages(\n        subscription.name)  # MQL takes truncated names\n    delivery_rate = f'{self.delivery_rate(subscription.name):.2f}'\n\n    op.info(message=(\n        'The current rate of delivery rate is {delivery_rate}/s against'\n        ' {unacked_messages} unacked messages. (Note that Pub/Sub may '\n        'return fewer messages than the max'\n        ' amount configured, in order to respond to pull RPCs in reasonable time.)'\n    ).format(delivery_rate=delivery_rate, unacked_messages=unacked_messages))\n\n    # analyze qualification\n    self.add_child(child=pubsub_gs.ThroughputQualification())\n\n  # subscription/sent_message_count\n  def delivery_rate(self, subscription_name: str) -> float:\n    delivery_rate_query = DELIVERY_RATE.format(\n        project_id=op.get(flags.PROJECT_ID),\n        subscription_name=subscription_name)\n    time_series = monitoring.query(op.get(flags.PROJECT_ID),\n                                   delivery_rate_query)\n    if time_series:\n      return float(get_path(list(time_series.values())[0], 'values')[0][-1])\n    return 0.0\n\n  # subscription/num_undelivered_messages\n  def unacked_messages(self, subscription_name: str) -> float:\n    unacked_messages_query = UNACKED_MESSAGES.format(\n        project_id=op.get(flags.PROJECT_ID),\n        subscription_name=subscription_name)\n\n    time_series = monitoring.query(op.get(flags.PROJECT_ID),\n                                   unacked_messages_query)\n    if time_series:\n      return float(get_path(list(time_series.values())[0], 'values')[0][0])\n    return 0.0\n\n\nclass PullSubscriptionDeliveryEnd(runbook.EndStep):\n  \"\"\"End of this runbook.\n\n  No more checks to perform.\n  \"\"\"\n\n  def execute(self):\n    \"\"\"End step. \"\"\"\n    op.info('No more checks to perform.')\n"
  },
  {
    "path": "gcpdiag/runbook/pubsub/pull_subscription_delivery_test.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test class for pubsub/PullSubscriptionDelivery\"\"\"\n\nfrom gcpdiag import config\nfrom gcpdiag.runbook import pubsub, snapshot_test_base\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = pubsub\n  runbook_name = 'pubsub/pull-subscription-delivery'\n  project_id = 'gcpdiag-pubsub1-aaaa'\n  config.init({'auto': True, 'interface': 'cli'}, project_id)\n\n  rule_parameters = [{\n      'project_id': 'gcpdiag-pubsub1-aaaa',\n      'subscription_name': 'gcpdiag-pubsub1subscription-9pm6hng1'\n  }]\n"
  },
  {
    "path": "gcpdiag/runbook/pubsub/push_subscription_delivery.py",
    "content": "# Copyright 2025 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Module containing Pub/Sub Push Delivery diagnostic tree and custom steps.\"\"\"\n\nfrom boltons.iterutils import get_path\n\nfrom gcpdiag import runbook, utils\nfrom gcpdiag.queries import apis, crm, monitoring, pubsub\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.pubsub import flags\nfrom gcpdiag.runbook.pubsub import generalized_steps as pubsub_gs\n\nRESPONSE_CODES = (\n    'fetch pubsub_subscription '\n    '| metric \"pubsub.googleapis.com/subscription/push_request_count\"'\n    '| filter resource.project_id == \"{project_id}\"'\n    ' && (resource.subscription_id == \"{subscription_name}\") '\n    '| align rate(1m) '\n    '| every 1m '\n    '| group_by [metric.response_class], '\n    ' [value_push_request_count_aggregate: aggregate(value.push_request_count)]'\n    '| within 10m ')\n\n\nclass PushSubscriptionDelivery(runbook.DiagnosticTree):\n  \"\"\"Diagnostic checks for Cloud Pub/Sub push delivery issues.\n\n  Provides a DiagnosticTree to check for issues related to delivery issues\n  for subscriptions in Cloud Pub/Sub. Particularly this runbook focuses on common issues\n  experienced while using Pub/Sub push subscriptions, including BQ & GCS subscriptions.\n\n  - Areas:\n    - subscription status\n    - quotas\n    - push responses\n    - throughput rate\n    - dead letter topic attachment and permissions\n    - vpcsc enablement\n\n  \"\"\"\n  parameters = {\n      flags.PROJECT_ID: {\n          'type': str,\n          'help': 'The Project ID of the resource under investigation',\n          'required': True,\n      },\n      flags.SUBSCRIPTION_NAME: {\n          'type': str,\n          'help': ('The name of subscription to evaluate in the runbook'),\n          'required': True,\n      },\n  }\n\n  def build_tree(self):\n    \"\"\"Construct the diagnostic tree with appropriate steps.\"\"\"\n    start = PushSubscriptionDeliveryStart()\n    self.add_start(start)\n\n    active_check = pubsub_gs.ActiveSubscription()\n    self.add_step(start, active_check)\n\n    quota_check = pubsub_gs.PubsubQuotas()\n    self.add_step(active_check, quota_check)\n\n    end_point_responses = ResponseCodeStep()\n    self.add_step(quota_check, end_point_responses)\n\n    throughput = pubsub_gs.ThroughputQualification()\n    self.add_step(end_point_responses, throughput)\n\n    deadletter = pubsub_gs.DeadLetterTopic()\n    self.add_step(throughput, deadletter)\n\n    deadletter_permissions = pubsub_gs.DeadLetterTopicPermissions()\n    self.add_step(deadletter, deadletter_permissions)\n\n    self.add_step(deadletter_permissions, VpcScStep())\n\n    # Ending your runbook\n    self.add_end(PushSubscriptionDeliveryEnd())\n\n\nclass PushSubscriptionDeliveryStart(runbook.StartStep):\n  \"\"\"Start step of runbook.\n\n  Gets the subscription and confirms it exists in the project.\n  \"\"\"\n\n  def execute(self):\n    \"\"\"Start step\"\"\"\n    project = crm.get_project(op.get(flags.PROJECT_ID))\n    if project:\n      op.info(f'name: {project.name}, id: {project.id}')\n\n    if not apis.is_enabled(op.get(flags.PROJECT_ID), 'pubsub'):\n      op.add_skipped(\n          project,\n          reason='Pub/Sub API is not enabled, please enable to proceed.')\n      return\n\n    subscription_name = op.get(flags.SUBSCRIPTION_NAME)\n    # check subscription exists and is pull\n    try:\n      subscription = pubsub.get_subscription(\n          project_id=op.get(flags.PROJECT_ID),\n          subscription_name=subscription_name)\n    except utils.GcpApiError:\n      op.add_skipped(\n          resource=project,\n          reason=\n          ('Could not find subscription {subscription_name}, please confirm it exists or '\n           'if recreated please wait a few minutes before querying the runbook'.\n           format(subscription_name=subscription_name)),\n      )\n    else:\n      if not subscription.is_push_subscription():\n        op.add_skipped(\n            resource=project,\n            reason=\n            ('Skipping execution because provided {subscription_name} is not a push subscription. '\n             .format(subscription_name=subscription_name)),\n        )\n\n\nclass ResponseCodeStep(runbook.Step):\n  \"\"\"Check push request responses from the endpoint.\n\n  This step checks the responses coming from the endpoint and the\n  success rates.\n  \"\"\"\n\n  template = 'generics::endpoint_response'\n\n  def execute(self):\n    \"\"\"Check push request responses from the endpoint\"\"\"\n    project_id = op.get(flags.PROJECT_ID)\n\n    push_metric = monitoring.query(\n        project_id,\n        RESPONSE_CODES.format(project_id=project_id,\n                              subscription_name=op.get(\n                                  flags.SUBSCRIPTION_NAME)),\n    )\n    if not push_metric:\n      op.add_skipped(\n          resource=crm.get_project(project_id),\n          reason=(\n              'Skipping as no traffic delivery to the endpoint has been detected'\n          ))\n    else:\n      subscription = pubsub.get_subscription(project_id=project_id,\n                                             subscription_name=op.get(\n                                                 flags.SUBSCRIPTION_NAME))\n      found_error_response: bool = False\n      for metric_values in push_metric.values():\n        response_class = get_path(metric_values,\n                                  ('labels', 'metric.response_class'))\n        if response_class != 'ack':\n          found_error_response = True\n          op.add_failed(resource=subscription,\n                        reason=op.prep_msg(op.FAILURE_REASON),\n                        remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n      if not found_error_response:\n        op.add_ok(resource=subscription,\n                  reason='No error responses from the endpoint detected')\n\n\nclass VpcScStep(runbook.Step):\n  \"\"\"Check if the VPC-SC api is enabled\n\n  This step highlights caveats of using VPC-SC with push subscriptions\n  \"\"\"\n\n  template = 'generics::vpcsc_api'\n\n  def execute(self):\n    \"\"\"Check if push subscription project has a VPCSC perimeter \"\"\"\n\n    if apis.is_enabled(op.get(flags.PROJECT_ID), 'accesscontextmanager'):\n      op.info(op.prep_msg(op.FAILURE_REMEDIATION), step_type='INFO')\n\n\nclass PushSubscriptionDeliveryEnd(runbook.EndStep):\n  \"\"\"End Step\n\n    No more checks.\n    \"\"\"\n\n  def execute(self):\n    \"\"\"End Step for push subscription\"\"\"\n    op.info('No more checks to perform.')\n"
  },
  {
    "path": "gcpdiag/runbook/pubsub/push_subscription_delivery_test.py",
    "content": "# Copyright 2025 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test class for pubsub/PushSubscriptionDelivery\"\"\"\n\nfrom gcpdiag import config\nfrom gcpdiag.runbook import pubsub, snapshot_test_base\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = pubsub\n  runbook_name = 'pubsub/push_subscription_delivery'\n  project_id = 'gcpdiag-pubsub1-aaaa'\n  config.init({'auto': True, 'interface': 'cli'}, project_id)\n\n  rule_parameters = [{\n      'project_id': 'gcpdiag-pubsub1-aaaa',\n      'subscription_name': 'gcpdiag-pubsub1subscription2-9pm6hng1'\n  }]\n"
  },
  {
    "path": "gcpdiag/runbook/pubsub/snapshots/bigquery_subscription_delivery.txt",
    "content": "project_id=gcpdiag-pubsub1-aaaa,subscription_name=gcpdiag-\npubsub1subscription2-9pm6hng1,table_id=test_dataset.test_table\n\npubsub/bigquery-subscription-delivery: Troubleshoot BigQuery Subscription Errors\n\nA diagnostic guide to help you resolve common issues\ncausing message delivery failures from Pub/Sub to BigQuery.\n  \n[START]: Check that the project exists and Pub/Sub API is enabled.\n\n   - gcpdiag-pubsub1-aaaa                                                 [OK]\n     [REASON]\n     Project 'gcpdiag-pubsub1-aaaa' found.\n[AUTOMATED STEP]: Check that the Pub/Sub subscription exists.\n\n   - gcpdiag-pubsub1-aaaa/gcpdiag-pubsub1subscription2-9pm6hng1           [OK]\n     [REASON]\n     Pub/Sub subscription 'gcpdiag-pubsub1subscription2-9pm6hng1' found.\n[AUTOMATED STEP]: Check that the BigQuery table exists.\n[AUTOMATED STEP]: Check that the Pub/Sub service agent has writer permissions.\n[AUTOMATED STEP]: Check the BigQuery subscription status and look for common issues.\n\n   - gcpdiag-pubsub1-aaaa/gcpdiag-pubsub1subscription2-9pm6hng1           [OK]\n     [REASON]\n     The subscription projects/gcpdiag-pubsub1-aaaa/subscriptions/gcpdiag-pubsub1subscription2-9pm6hng1 state is ACTIVE.\n[AUTOMATED STEP]: Checks if any Pub/Sub quotas are being exceeded.\n\n   - gcpdiag-pubsub1-aaaa                                                 [OK]\n     [REASON]\n     Quota usage is within project limits.\n[AUTOMATED STEP]: Check push request responses from BigQuery for issues.\n\n   - gcpdiag-pubsub1-aaaa                                                 [SKIP]\n     [REASON]\n     Skipping as no traffic delivery to the BigQuery has been detected\n[AUTOMATED STEP]: Checks if subscription has good health (high qualification).\n\n   - gcpdiag-pubsub1-aaaa/gcpdiag-pubsub1subscription2-9pm6hng1           [OK]\n     [REASON]\n     Subcription has good health\n[AUTOMATED STEP]: Checks for dead letter topic presence.\n\n   - gcpdiag-pubsub1-aaaa/gcpdiag-pubsub1subscription2-9pm6hng1           [OK]\n     [REASON]\n     Dead letter topic already attached\n[AUTOMATED STEP]: Checks for dead letter topic permissions.\n\n   - gcpdiag-pubsub1-aaaa                                                 [OK]\n     [REASON]\n     Dead Letter permissions assigned at the project level\n[END]: Finalizing the runbook.\n[INFO]: Finished troubleshooting BigQuery subscriptions.\n\n\n"
  },
  {
    "path": "gcpdiag/runbook/pubsub/snapshots/gcs_subscription_delivery.txt",
    "content": "project_id=gcpdiag-pubsub1-aaaa,subscription_name=gcpdiag-pubsub1subscription3gcs-9pm6hng1\n\npubsub/gcs-subscription-delivery: Troubleshoot Pub/Sub to Cloud Storage subscription issues.\n\n  This runbook checks for common configuration problems with Pub/Sub subscriptions\n  that are set up to write directly to a Google Cloud Storage bucket.\n\n  Checks performed:\n  - Subscription existence and type.\n  - Cloud Storage bucket existence.\n  - IAM permissions for the Pub/Sub service account on the bucket.\n  - State of the Pub/Sub subscription.\n  \n[START]: Check that the project exists and Pub/Sub API is enabled\n\n   - gcpdiag-pubsub1-aaaa                                                 [OK]\n     [REASON]\n     Project 'gcpdiag-pubsub1-aaaa' found.\n[AUTOMATED STEP]: Check that the Pub/Sub subscription exists.\n\n   - gcpdiag-pubsub1-aaaa/gcpdiag-pubsub1subscription3gcs-9pm6hng1        [OK]\n     [REASON]\n     Subscription gcpdiag-pubsub1subscription3gcs-9pm6hng1 is a Cloud Storage subscriptiontargeting bucket: pubsub1_bucket\n[AUTOMATED STEP]: Checking Cloud Storage bucket existence\n[AUTOMATED STEP]: Checking Pub/Sub service account permissions on the bucket\n\n   - gcpdiag-pubsub1-aaaa/gcpdiag-pubsub1subscription3gcs-9pm6hng1        [OK]\n     [REASON]\n     Pub/Sub service account serviceAccount:service-12340014@gcp-sa-pubsub.iam.gserviceaccount.com has the necessary permissions on bucket pubsub1_bucket.\n[AUTOMATED STEP]: Checks if any Pub/Sub quotas are being exceeded.\n\n   - gcpdiag-pubsub1-aaaa                                                 [OK]\n     [REASON]\n     Quota usage is within project limits.\n[AUTOMATED STEP]: Check push request responses from the endpoint\n\n   - gcpdiag-pubsub1-aaaa                                                 [SKIP]\n     [REASON]\n     Skipping as no traffic delivery to the endpoint has been detected\n[AUTOMATED STEP]: Checks subscription activity status.\n\n   - gcpdiag-pubsub1-aaaa/gcpdiag-pubsub1subscription3gcs-9pm6hng1        [OK]\n     [REASON]\n     Subscription is active\n[AUTOMATED STEP]: Checks if subscription has good health (high qualification).\n\n   - gcpdiag-pubsub1-aaaa/gcpdiag-pubsub1subscription3gcs-9pm6hng1        [OK]\n     [REASON]\n     Subcription has good health\n[AUTOMATED STEP]: Checks for dead letter topic presence.\n\n   - gcpdiag-pubsub1-aaaa/gcpdiag-pubsub1subscription3gcs-9pm6hng1        [OK]\n     [REASON]\n     Dead letter topic already attached\n[AUTOMATED STEP]: Checks for dead letter topic permissions.\n\n   - gcpdiag-pubsub1-aaaa                                                 [OK]\n     [REASON]\n     Dead Letter permissions assigned at the project level\n[END]: Summarizing the findings\n[INFO]: Finished checks for Pub/Sub to GCS subscriptiongcpdiag-pubsub1subscription3gcs-9pm6hng1 in project gcpdiag-pubsub1-aaaa.\n[INFO]: Please review the check results above. If issues persist, check Cloud Logging for errors related to the subscription.\n\n\n"
  },
  {
    "path": "gcpdiag/runbook/pubsub/snapshots/pull_subscription_delivery.txt",
    "content": "project_id=gcpdiag-pubsub1-aaaa,subscription_name=gcpdiag-pubsub1subscription-9pm6hng1\n\npubsub/pull-subscription-delivery: Diagnostic checks for Cloud Pub/Sub pull delivery issues.\n\n  Provides a DiagnosticTree to check for issues related to delivery issues\n  for subscriptions in Cloud Pub/Sub. Particularly this runbook focuses on common issues\n  experienced while using Pub/Sub pull subscriptions.\n\n  - Areas:\n    - delivery latency\n    - quotas\n    - pull rate\n    - throughput rate\n  \n[START]: Start step.\n[INFO]: name: gcpdiag test - pubsub1, id: gcpdiag-pubsub1-aaaa\n[AUTOMATED STEP]: Checks if any Pub/Sub quotas are being exceeded.\n\n   - gcpdiag-pubsub1-aaaa                                                 [OK]\n     [REASON]\n     Quota usage is within project limits.\n[GATEWAY]: Checks if delivery rate is low i.e. receiving fewer messages than expected.\n[INFO]: The current rate of delivery rate is 0.00/s against 0.0 unacked messages. (Note that Pub/Sub may return fewer messages than the max amount configured, in order to respond to pull RPCs in reasonable time.)\n[AUTOMATED STEP]: Checks if subscription has good health (high qualification).\n\n   - gcpdiag-pubsub1-aaaa/gcpdiag-pubsub1subscription-9pm6hng1            [OK]\n     [REASON]\n     Subcription has good health\n[END]: End step.\n[INFO]: No more checks to perform.\n\n\n"
  },
  {
    "path": "gcpdiag/runbook/pubsub/snapshots/push_subscription_delivery.txt",
    "content": "project_id=gcpdiag-pubsub1-aaaa,subscription_name=gcpdiag-pubsub1subscription2-9pm6hng1\n\npubsub/push-subscription-delivery: Diagnostic checks for Cloud Pub/Sub push delivery issues.\n\n  Provides a DiagnosticTree to check for issues related to delivery issues\n  for subscriptions in Cloud Pub/Sub. Particularly this runbook focuses on common issues\n  experienced while using Pub/Sub push subscriptions, including BQ & GCS subscriptions.\n\n  - Areas:\n    - subscription status\n    - quotas\n    - push responses\n    - throughput rate\n    - dead letter topic attachment and permissions\n    - vpcsc enablement\n\n  \n[START]: Start step\n[INFO]: name: gcpdiag test - pubsub1, id: gcpdiag-pubsub1-aaaa\n[AUTOMATED STEP]: Checks subscription activity status.\n\n   - gcpdiag-pubsub1-aaaa/gcpdiag-pubsub1subscription2-9pm6hng1           [OK]\n     [REASON]\n     Subscription is active\n[AUTOMATED STEP]: Checks if any Pub/Sub quotas are being exceeded.\n\n   - gcpdiag-pubsub1-aaaa                                                 [OK]\n     [REASON]\n     Quota usage is within project limits.\n[AUTOMATED STEP]: Check push request responses from the endpoint\n\n   - gcpdiag-pubsub1-aaaa                                                 [SKIP]\n     [REASON]\n     Skipping as no traffic delivery to the endpoint has been detected\n[AUTOMATED STEP]: Checks if subscription has good health (high qualification).\n\n   - gcpdiag-pubsub1-aaaa/gcpdiag-pubsub1subscription2-9pm6hng1           [OK]\n     [REASON]\n     Subcription has good health\n[AUTOMATED STEP]: Checks for dead letter topic presence.\n\n   - gcpdiag-pubsub1-aaaa/gcpdiag-pubsub1subscription2-9pm6hng1           [OK]\n     [REASON]\n     Dead letter topic already attached\n[AUTOMATED STEP]: Checks for dead letter topic permissions.\n\n   - gcpdiag-pubsub1-aaaa                                                 [OK]\n     [REASON]\n     Dead Letter permissions assigned at the project level\n[AUTOMATED STEP]: Check if push subscription project has a VPCSC perimeter\n[END]: End Step for push subscription\n[INFO]: No more checks to perform.\n\n\n"
  },
  {
    "path": "gcpdiag/runbook/pubsub/templates/generics.jinja",
    "content": "{% block low_pull_rate_success_reason %}\n  Acceptable pull rate observed.\n{% endblock low_pull_rate_success_reason %}\n\n{% block low_pull_rate_failure_remediation%}\n  Increase pull rate to at least 20 RPCs per minute or increase the value of max messages configured [1].\n  Note that Pub/Sub may return fewer messages than the max amount configured, in order to respond to pull RPCs in reasonable time.\n\n  [1] <https://cloud.google.com/pubsub/docs/reference/rest/v1/projects.subscriptions/pull#request-body>\n{% endblock low_pull_rate_failure_remediation %}\n\n{% block quota_exceeded_failure_reason %}\n  Quota exceeded errors found for the Pub/Sub service.\n{% endblock quota_exceeded_failure_reason%}\n\n{% block quota_exceeded_failure_remediation %}\n  Refer to [1] for guidance on quota limits and how to resolve quota errors.\n\n  [1] <https://cloud.google.com/pubsub/quotas>.\n{% endblock quota_exceeded_failure_remediation %}\n\n{% block throughput_qualification_failure_reason %}\n  Low Health Score for the subscription for metrics {low_health_metrics}.\n{% endblock throughput_qualification_failure_reason %}\n\n{% block throughput_qualification_failure_remediation %}\n  Monitor and resolve the health issues of the subscription by referring to [1].\n\n  [1] <https://cloud.google.com/pubsub/docs/monitoring#delivery_latency_health>.\n{% endblock throughput_qualification_failure_remediation %}\n\n{% block subscription_state_failure_remediation %}\n  Increase subscription throughput to keep it active, or amend the persistence configuration. [1].\n\n  [1] <https://cloud.google.com/pubsub/docs/subscription-overview#lifecycle>.\n{% endblock subscription_state_failure_remediation %}\n\n{% block endpoint_response_failure_reason %}\n  Non-OK responses from the endpoint detected [1].\n\n  [1] <https://cloud.google.com/pubsub/docs/push#receive_push>\n{% endblock endpoint_response_failure_reason %}\n\n{% block endpoint_response_failure_remediation %}\n  Resolve the endpoint errors processing messages to enable successful delivery.\n\n  Common errors codes:\n  - 431: payload exceeds allowed header limits. Disable write metadata [1]\n  - 401/403: if enabled, ensure the push subscription authentication abides by the requirements. [2] Otherwise check permission errors at the endpoint.\n  - 400: investigate the correctness of the message attributes & the http endpoint.\n\n  [1] <https://cloud.google.com/pubsub/docs/payload-unwrapping#how_payload_unwrapping_works>.\n  [2] <https://cloud.google.com/pubsub/docs/authenticate-push-subscriptions#configure_for_push_authentication>.\n{% endblock endpoint_response_failure_remediation %}\n\n{% block dead_letter_topic_failure_reason %}\n  No dead letter topic attached. [1]\n\n  [1] <https://cloud.google.com/pubsub/docs/handling-failures#dead_letter_topic>\n{% endblock dead_letter_topic_failure_reason %}\n\n{% block dead_letter_topic_failure_remediation %}\n  Add dead letter topic to deliver to the topic any messages whose delivery retries has exceeded the threshold.\n  Be aware that this is on best effort [1] and ensure the proper permissions are assigned [2].\n  Monitor dead-lettered message count[3] and pull from the subscription attached to the dead letter topic to investigate the message processing failures [4].\n\n  [1] <https://cloud.google.com/pubsub/docs/handling-failures#how_dead_letter_topics_work>\n  [2] <https://cloud.google.com/pubsub/docs/handling-failures#grant_forwarding_permissions>\n  [3] <https://cloud.google.com/pubsub/docs/handling-failures#monitor_forwarded_messages>\n  [4] <https://cloud.google.com/pubsub/docs/handling-failures#track-delivery-attempts>\n{% endblock dead_letter_topic_failure_remediation %}\n\n{% block dead_letter_topic_permissions_failure_remediation %}\n  Please ensure both the publisher role to the dead letter topic/project\n  level and the subscriber role at the subscription/project level to the\n  pubsub agent {} are assigned\n\n{% endblock dead_letter_topic_permissions_failure_remediation %}\n\n{% block vpcsc_api_failure_remediation %}\n  Beware of limitations when using push subscriptions with VPCSC [1] such as:\n  - You can't update existing push subscriptions, they continue to function but aren't protected by VPC Service Controls\n  - Custom domains don't work, you can only create new push subscriptions for which the push endpoint is set to a Cloud Run service\n  - You can only create new push subscriptions through Eventarc for Eventarc workflows\n  - Use the fully qualified name of the topic if terraform/deployment manager is used to attach dead letter topics\n\n  [1] <https://cloud.google.com/pubsub/docs/create-push-subscription#vpc-service-control>\n{% endblock vpcsc_api_failure_remediation %}\n\n\n\n{% block invalid_failure_reason %}\n  Message failures detected.\n\n  [1] <https://docs.cloud.google.com/pubsub/docs/reference/error-codes>\n{% endblock %}\n\n{% block invalid_failure_remediation %}\n  Handle message failures\n\n  When a Pub/Sub message cannot be written to BigQuery, the message cannot be acknowledged.\n  The Pub/Sub message forwarded to the dead-letter topic contains an attribute CloudPubSubDeadLetterSourceDeliveryErrorMessage that has the reason that the Pub/Sub message couldn't be written to BigQuery.\n\n  [1] <https://docs.cloud.google.com/pubsub/docs/bigquery#handle_message_failures>.\n{% endblock %}\n\n{%- block start_failure_reason -%}\nProject '{project_id}' not found or no permission to access it.\n{%- endblock -%}\n\n{%- block start_failure_remediation -%}\nPlease check the project ID and your permissions.\n{%- endblock -%}\n\n{%- block subscription_existence_failure_reason -%}\nPub/Sub subscription '{subscription_name}' not found.\n{%- endblock -%}\n\n{%- block subscription_existence_failure_remediation -%}\nPlease check the subscription ID and your permissions.\n{%- endblock -%}\n\n{%- block bq_table_existence_failure_reason -%}\nBigQuery table {table_full_id} not found.\n{%- endblock -%}\n\n{%- block bq_table_existence_failure_remediation -%}\nPlease ensure the BigQuery table exists.\n{%- endblock -%}\n\n{%- block gcs_bucket_existence_failure_reason -%}\nBucket not found.\n{%- endblock -%}\n\n{%- block gcs_bucket_existence_failure_remediation -%}\nPlease ensure the Bucket exists.\n{%- endblock -%}\n\n{%- block permission_check_failure_reason -%}\nThe Pub/Sub service account '{service_account}' does not have required BigQuery permissionson project '{project_id}'\n{%- endblock -%}\n\n{%- block permission_check_failure_remediation -%}\nGrant the \"BigQuery Data Editor\" role (roles/bigquery.dataEditor) to the Pub/Sub service account:\n'{service_account}'\n{%- endblock -%}\n\n{%- block gcs_permission_check_failure_reason -%}\nPub/Sub service account '{service_account}' is MISSING permission on bucket '{bucket_name}'\n{%- endblock -%}\n\n{%- block gcs_permission_check_failure_remediation -%}\nGrant the Pub/Sub service account '{service_account}' at least the storage.objects.create and storage.buckets.get permissions on the bucket '{bucket_name}'.\n{%- endblock -%}\n\n{%- block subscription_status_failure_remediation -%}\nThe topic schema and the BigQuery table schema might be incompatible.\nPlease check the schemas and ensure they are compatible.\n{%- endblock -%}\n"
  },
  {
    "path": "gcpdiag/runbook/report.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Main runbook module containing core functionality implementation\"\"\"\n\nimport collections\nimport dataclasses\nimport importlib\nimport json\nimport logging\nimport os\nimport re\nimport sys\nfrom collections import OrderedDict\nfrom datetime import datetime, timezone\nfrom typing import Any, Dict, List, Optional\n\nfrom gcpdiag import config, models\nfrom gcpdiag.runbook import constants, util\nfrom gcpdiag.runbook.flags import INTERACTIVE_MODE\nfrom gcpdiag.runbook.output import terminal_output\nfrom gcpdiag.runbook.output.api_output import ApiOutput\nfrom gcpdiag.runbook.output.base_output import BaseOutput\n\n\n@dataclasses.dataclass\nclass ResourceEvaluation:\n  \"\"\"Observation on a single GCP resource\"\"\"\n  resource: Optional[models.Resource]\n  reason: Optional[str]\n  remediation: Optional[str]\n  remediation_skipped: Optional[bool]\n  prompt_response: Optional[str]\n  status: str\n\n  def __init__(self,\n               status: str,\n               resource: Optional[models.Resource],\n               reason: Optional[str],\n               remediation: Optional[str],\n               remediation_skipped: Optional[bool] = None,\n               prompt_response: Optional[str] = None):\n    self.status = status\n    self.resource = resource\n    self.reason = reason\n    self.remediation = remediation\n    self.remediation_skipped = True if config.get(\n        'auto') else remediation_skipped\n    self.prompt_response = prompt_response\n\n\n@dataclasses.dataclass\nclass StepResult:\n  \"\"\"Runbook Step Results\"\"\"\n  # if any evals failed this will be failed\n  execution_id: str\n  start_time: str\n  end_time: str\n  results: List[ResourceEvaluation]\n  prompt_response: Any\n  metadata: dict\n  info: List\n  step_error: str\n\n  def __init__(self, step):\n    self.execution_id = step.execution_id\n    self.step = step\n    self.results = []\n    self.metadata = OrderedDict()\n    self.info = []\n    self.prompt_response = None\n    self.step_error = None\n\n  def __hash__(self) -> int:\n    return self.execution_id.__hash__()\n\n  def __eq__(self, other) -> bool:\n    if self.__class__ == other.__class__:\n      return (self.execution_id == other.execution_id and\n              self.overall_status == other.overall_status and\n              self.results == other.results and\n              self.metadata == other.metadata and self.info == other.info)\n    else:\n      return False\n\n  @property\n  def overall_status(self):\n    \"\"\"Return the worst status available in the evaluations for the step\n\n    Order of worst evals: failed > uncertain > ok > skipped\n    \"\"\"\n    if self.step_error:\n      return 'skipped'\n    for status in constants.STATUS_ORDER:\n      if self.totals_by_status.get(status):\n        return status\n    return 'no_status'\n\n  @property\n  def any_failed(self):\n    return any(r.status == 'failed' for r in self.results)\n\n  @property\n  def any_uncertain(self):\n    return any(r.status == 'uncertain' for r in self.results)\n\n  @property\n  def totals_by_status(self) -> Dict[str, int]:\n    totals: Dict[str, int]\n    totals = collections.defaultdict(int)\n    for r in self.results:\n      totals[r.status] += 1\n    return totals\n\n\nclass Report:\n  \"\"\"Report for a runbook or bundle\"\"\"\n  # Same as the runbook or bundle run_id\n  run_id: str\n  runbook_name: Optional[str] = None\n  run_start_time: str\n  run_end_time: str\n  execution_mode: str\n  parameters: models.Parameter\n  results: Dict[str, StepResult]\n\n  def __init__(self, run_id, parameters) -> None:\n    self.run_id = run_id\n    self.parameters = parameters\n    self.results = {}\n    self.execution_mode = 'NON_INTERACTIVE' if config.get(\n        'auto') else 'INTERACTIVE'\n\n  @property\n  def any_failed(self) -> bool:\n    return any(r.overall_status in ('failed', 'uncertain')\n               for r in self.results.values())\n\n  def get_totals_by_status(self) -> Dict[str, int]:\n    totals: Dict[str, int]\n    totals = collections.defaultdict(int)\n    for step_result in self.results.values():\n      totals[step_result.overall_status] += 1\n    return totals\n\n  def get_rule_statuses(self) -> Dict[str, str]:\n    return {\n        str(r.execution_id): r.overall_status for r in self.results.values()\n    }\n\n\nclass ReportManager:\n  \"\"\"Base Report Manager subclassed to hand different interfaces (cli, api)\"\"\"\n  reports: Dict[str, Report] = {}\n\n  def __init__(self) -> None:\n    self.reports = {}\n\n  def add_step_result(self, run_id, result: StepResult):\n    self.reports[run_id].results[result.execution_id] = result\n\n  def add_step_eval(self, run_id, execution_id, evaluation: ResourceEvaluation):\n    self.reports[run_id].results[execution_id].results.append(evaluation)\n\n  def add_step_prompt_response(self, run_id, execution_id, prompt_response):\n    self.reports[run_id].results[execution_id].prompt_response = prompt_response\n\n  def serialize_report(self, report: Report):\n\n    def improve_formatting(text):\n      if text is None:\n        return None\n      # Decode escaped sequences like \\\\n, \\\\r, \\\\t to their actual characters\n      text = text.encode('utf-8').decode('unicode_escape')\n      # Remove extra spaces at start / end of string\n      text = text.strip()\n      return text\n\n    def resource_evaluation(eval_list: List[ResourceEvaluation]):\n      return [{\n          'resource':\n              r.resource.full_path if r.resource else '-',\n          'status':\n              r.status,\n          'reason':\n              improve_formatting(str(r.reason)),\n          'remediation':\n              improve_formatting(r.remediation)\n              if r.remediation else 'No remediation needed',\n          'remediation_skipped':\n              False if config.get('auto') else r.remediation_skipped\n      } for r in eval_list]\n\n    def result_to_dict(entry: StepResult):\n      return {\n          'execution_id': entry.step.execution_id,\n          'totals_by_status': entry.totals_by_status,\n          'description': improve_formatting(entry.step.__doc__),\n          'name': improve_formatting(entry.step.name) or '',\n          'execution_message': improve_formatting(entry.step.name) or '',\n          'overall_status': entry.overall_status,\n          'start_time': entry.start_time,\n          'end_time': entry.end_time,\n          'metadata': entry.metadata,\n          'info': entry.info,\n          'execution_error': entry.step_error,\n          'resource_evaluation': resource_evaluation(entry.results)\n      }\n\n    def parse_report_data(data):\n      if isinstance(data, StepResult):\n        return result_to_dict(data)\n      else:\n        return str(data)\n\n    report_dict = {\n        'run_id': report.run_id,\n        'execution_mode': report.execution_mode,\n        'start_time': report.run_start_time,\n        'end_time': report.run_end_time,\n        'parameters': report.parameters,\n        'totals_by_status': report.get_totals_by_status(),\n        'results': report.results\n    }\n\n    return json.dumps(report_dict,\n                      ensure_ascii=False,\n                      default=parse_report_data,\n                      indent=2)\n\n  def generate_reports(self):\n    raise NotImplementedError\n\n  def get_totals_by_status(self) -> Dict[str, int]:\n    totals: Dict[str, int]\n    totals = collections.defaultdict(int)\n    for report in self.reports.values():\n      totals.update(report.get_totals_by_status())\n    return totals\n\n  def generate_report_metrics(self, report: Report) -> Dict[str, dict]:\n    reports_metrics: Dict[str, Any] = {}\n    all_step_metrics = []\n    reports_metrics['execution_mode'] = report.execution_mode\n    for result in report.results.values():\n      step_metrics: Dict[str, dict] = collections.defaultdict(dict)\n      start = util.parse_time_input(result.start_time)\n      end = util.parse_time_input(result.end_time)\n      duration = (end - start).total_seconds() * 1000\n      step_metrics[result.step.id]['execution_duration'] = duration\n      step_metrics[result.step.id]['totals_by_status'] = result.totals_by_status\n      step_metrics[result.step.id]['error'] = bool(result.step_error)\n      all_step_metrics.append(step_metrics)\n    if report.runbook_name:\n      start = util.parse_time_input(report.run_start_time)\n      end = util.parse_time_input(report.run_end_time)\n      duration = (end - start).total_seconds() * 1000\n      reports_metrics['runbook_name'] = report.runbook_name\n      reports_metrics['run_duration'] = duration\n      reports_metrics['totals_by_status'] = report.get_totals_by_status()\n      reports_metrics['steps'] = all_step_metrics\n    else:\n      reports_metrics['steps'] = all_step_metrics\n    return reports_metrics\n\n  def add_step_metadata(self, run_id, key, value, step_execution_id):\n    step_result = None\n    if step_execution_id:\n      step_result = self.reports[run_id].results[step_execution_id]\n    if step_result:\n      step_result.metadata[key] = value\n\n  def add_step_info_metadata(self, run_id, value, step_execution_id):\n    step_result = None\n    if step_execution_id:\n      step_result = self.reports[run_id].results[step_execution_id]\n    if step_result:\n      step_result.info.append(value)\n\n  def get_step_metadata(self, run_id, key, step_execution_id):\n    step_result = None\n    if step_execution_id:\n      step_result = self.reports[run_id].results[step_execution_id]\n    if step_result:\n      return step_result.metadata.get(key)\n    return None\n\n  def get_all_step_metadata(self, run_id, step_execution_id) -> dict:\n    step_result = None\n    if step_execution_id:\n      step_result = self.reports[run_id].results[step_execution_id]\n    if step_result:\n      return step_result.metadata\n    return {}\n\n\nclass ApiReportManager(ReportManager):\n  \"\"\"Report Manager for API interactions with runbooks\"\"\"\n\n  def generate_reports(self):\n    \"\"\"Generate Runbook Report\"\"\"\n    reports = []\n    for _, report in self.reports.items():\n      # TODO: Refactor serialization logic to allow\n      # converting a report into a dict without serialization\n      reports.append(json.loads(self.serialize_report(report)))\n    return reports\n\n\nclass TerminalReportManager(ReportManager):\n  \"\"\" Class representing results of runbook \"\"\"\n\n  def get_report_path(self, run_id):\n    date = datetime.now(timezone.utc).strftime('%Y_%m_%d_%H_%M_%S_%Z')\n    report_name = f\"gcpdiag_runbook_report_{re.sub(r'[.]', '_', run_id)}_{date}.json\"\n    return os.path.join(config.get('report_dir'), report_name)\n\n  def generate_reports(self):\n    \"\"\"Generate Runbook Report\"\"\"\n    for run_id, report in self.reports.items():\n      result = self.serialize_report(report)\n      path = self.get_report_path(run_id)\n      self._write_report_to_terminal(path, result)\n    return json.loads(result)\n\n  def _write_report_to_terminal(self, out_path, json_report):\n    try:\n      with open(out_path, 'w', encoding='utf-8') as file:\n        file.write(json_report)\n    except PermissionError as e:\n      logging.error(\n          'Permission denied while saving report to file, displaying report')\n      logging.debug(e)\n      print(json_report, file=sys.stderr)\n    except OSError as e:\n      logging.error(\n          'Failed to save generated report to file, displaying report')\n      logging.debug(e)\n      print(json_report, file=sys.stderr)\n    else:\n      print(f'\\nRunbook report located in: {file.name}', file=sys.stderr)\n\n\nclass InteractionInterface:\n  \"\"\"\n  RunbookRule workflow use this interface to report ongoing results.\n  \"\"\"\n  rm: ReportManager\n  output: BaseOutput\n\n  def __init__(self, kind) -> None:\n    if kind == constants.CLI:\n      self.rm = TerminalReportManager()\n      self.output = terminal_output.TerminalOutput()\n    elif kind == constants.API:\n      self.rm = ApiReportManager()\n      self.output = ApiOutput()\n    else:\n      raise AttributeError(\n          f'No valid interface specified {kind}. specify `cli` or `api`')\n\n  def prompt(self,\n             message: str,\n             kind: str = '',\n             options: dict = None,\n             choice_msg: str = '') -> None:\n    return self.output.prompt(message=message,\n                              kind=kind,\n                              options=options,\n                              choice_msg=choice_msg)\n\n  def info(self, message: str, step_type='INFO') -> None:\n    self.output.info(message=message, step_type=step_type)\n\n  def prepare_rca(self, run_id, resource: Optional[models.Resource], template,\n                  suffix, step, context) -> None:\n    try:\n      module = importlib.import_module(step.__module__)\n      file_name = module.__file__\n    except ImportError as e:\n      logging.error(e)\n    except AttributeError as e:\n      logging.error('failed to locate steps module %s', e)\n    else:\n      file, prefix = template.split('::')\n      if file_name:\n        filepath = '/'.join([os.path.dirname(file_name), 'templates'])\n        rca = util.render_template(filepath, f'{file}.jinja', context, prefix,\n                                   suffix)\n        self.output.info(message=rca)\n        self.rm.add_step_eval(run_id=run_id,\n                              execution_id=step.execution_id,\n                              evaluation=ResourceEvaluation(status='rca',\n                                                            resource=resource,\n                                                            reason=rca,\n                                                            remediation=''))\n\n  def add_skipped(self, run_id, resource: Optional[models.Resource],\n                  reason: str, step_execution_id: str) -> None:\n    self.output.print_skipped(resource=resource, reason=reason)\n    self.rm.add_step_eval(run_id,\n                          execution_id=step_execution_id,\n                          evaluation=ResourceEvaluation(status='skipped',\n                                                        resource=resource,\n                                                        reason=reason,\n                                                        remediation=''))\n\n  def add_ok(self,\n             run_id: str,\n             resource: models.Resource,\n             step_execution_id: str,\n             reason: str = '') -> None:\n    self.output.print_ok(resource=resource, reason=reason)\n    self.rm.add_step_eval(run_id=run_id,\n                          execution_id=step_execution_id,\n                          evaluation=ResourceEvaluation(status='ok',\n                                                        resource=resource,\n                                                        reason=reason,\n                                                        remediation=''))\n\n  def add_failed(self,\n                 run_id: str,\n                 resource: models.Resource,\n                 reason: str,\n                 remediation: str,\n                 step_execution_id: str,\n                 human_task_msg: str = '') -> Any:\n    \"\"\"Output test result and registers the result to be used in\n    the runbook report.\n\n    The failure assigned a human task unless program is running\n    autonomously\n    \"\"\"\n    self.output.print_failed(resource=resource,\n                             reason=reason,\n                             remediation=remediation)\n    result = ResourceEvaluation(status='failed',\n                                resource=resource,\n                                reason=reason,\n                                remediation=remediation)\n    # Add results to report manager so other dependent features can act on it.\n    self.rm.add_step_eval(run_id=run_id,\n                          execution_id=step_execution_id,\n                          evaluation=result)\n    # assign a human task to be completed\n    choice = self.output.prompt(kind=constants.HUMAN_TASK,\n                                message=human_task_msg)\n\n    if not config.get(INTERACTIVE_MODE):\n      self.rm.add_step_prompt_response(run_id=run_id,\n                                       execution_id=step_execution_id,\n                                       prompt_response=choice)\n\n      if choice is constants.CONTINUE or choice is constants.STOP:\n        result.remediation_skipped = True\n      return choice\n\n  def add_uncertain(self,\n                    run_id: str,\n                    step_execution_id: str,\n                    resource: models.Resource,\n                    reason: str,\n                    remediation: str = None,\n                    human_task_msg: str = '') -> Any:\n    self.output.print_uncertain(reason=reason,\n                                resource=resource,\n                                remediation=remediation)\n    result = ResourceEvaluation(status='uncertain',\n                                resource=resource,\n                                reason=reason,\n                                remediation=remediation)\n    self.rm.add_step_eval(run_id=run_id,\n                          execution_id=step_execution_id,\n                          evaluation=result)\n    choice = self.output.prompt(kind=constants.HUMAN_TASK,\n                                message=human_task_msg)\n\n    if not config.get(INTERACTIVE_MODE):\n      self.rm.add_step_prompt_response(run_id=run_id,\n                                       execution_id=step_execution_id,\n                                       prompt_response=choice)\n      if choice is constants.CONTINUE or choice is constants.STOP:\n        result.remediation_skipped = True\n      return choice\n"
  },
  {
    "path": "gcpdiag/runbook/report_test.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test Reporting Classes\"\"\"\n\nimport io\nimport unittest\nfrom unittest.mock import Mock, PropertyMock, mock_open, patch\n\nfrom gcpdiag import config\nfrom gcpdiag.queries import gce\nfrom gcpdiag.runbook import Step, report\nfrom gcpdiag.runbook.report import StepResult\n\nconfig.init({'auto': True, 'interface': 'cli'})\n\njson_report = '{\"runbook\": \"test/test-runbook\"}'\n\n\nclass TestTerminalReportManager(unittest.TestCase):\n  \"\"\"Test Report Manager\"\"\"\n\n  def setUp(self):\n    self.trm = report.TerminalReportManager()\n    r = report.Report(run_id='test', parameters={})\n    r.run_id = 'test'\n    self.trm.reports[r.run_id] = r\n    self.resource = gce.Instance(\n        'project_id', {\n            'id': '123',\n            'name': 'test',\n            'selfLink': 'https://www.googleapis.com/compute/v1/test/test-id'\n        })\n\n    ok_step_eval = report.ResourceEvaluation(resource=self.resource,\n                                             status='ok',\n                                             reason='TestReason',\n                                             remediation='TestRemediation')\n    test_step = report.StepResult(step=Step(uuid='ok.step'))\n\n    test_step.results.append(ok_step_eval)\n    self.trm.reports['test'].results = {\n        test_step.execution_id: test_step,\n    }\n\n  def test_initialization(self):\n    self.assertIsInstance(self.trm.reports['test'].results, dict)\n\n  def test_add_step_result(self):\n    step_result = StepResult(Step(uuid='friendly.name'))\n    self.trm.add_step_result(run_id='test', result=step_result)\n    self.assertIn('gcpdiag.runbook.Step.friendly.name',\n                  self.trm.reports['test'].results)\n    self.assertEqual(\n        self.trm.reports['test'].results['gcpdiag.runbook.Step.friendly.name'],\n        step_result)\n\n  def test_any_failed(self):\n    step_result_failed = StepResult(Step(uuid='failed'))\n    failed_eval = report.ResourceEvaluation(resource=self.resource,\n                                            status='failed',\n                                            reason='TestReason',\n                                            remediation='TestRemediation')\n    self.trm.add_step_result(run_id='test', result=step_result_failed)\n    self.trm.add_step_eval(run_id='test',\n                           execution_id=step_result_failed.execution_id,\n                           evaluation=failed_eval)\n    self.assertTrue(self.trm.reports['test'].any_failed)\n\n  def test_get_rule_statuses(self):\n    rule_statuses = self.trm.reports['test'].get_rule_statuses()\n    self.assertEqual(rule_statuses, {'gcpdiag.runbook.Step.ok.step': 'ok'})\n\n  def test_generate_report_path(self):\n    with patch('gcpdiag.config.get', return_value='fake_dir') as fd:\n      report_path = self.trm.get_report_path('test')\n      self.assertTrue(report_path.endswith('.json'))\n      self.assertTrue(report_path.startswith(fd.return_value))\n\n  def test_add_step_prompt_response(self):\n    step_result = StepResult(Step(uuid='prompt.response.step'))\n    self.trm.add_step_result(run_id='test', result=step_result)\n    prompt_response = 'continue'\n    self.trm.add_step_prompt_response(\n        run_id='test',\n        execution_id=step_result.execution_id,\n        prompt_response=prompt_response,\n    )\n    self.assertEqual(\n        self.trm.reports['test'].results[\n            step_result.execution_id].prompt_response,\n        prompt_response,\n    )\n\n  def test_report_any_failed_uncertain(self):\n    self.trm.reports['test'].results['gcpdiag.runbook.Step.ok.step'].results[\n        0].status = 'ok'\n    self.assertFalse(self.trm.reports['test'].any_failed)\n    step_result_uncertain = StepResult(Step(uuid='uncertain'))\n    uncertain_eval = report.ResourceEvaluation(resource=self.resource,\n                                               status='uncertain',\n                                               reason='TestReason',\n                                               remediation='TestRemediation')\n    self.trm.add_step_result(run_id='test', result=step_result_uncertain)\n    self.trm.add_step_eval(run_id='test',\n                           execution_id=step_result_uncertain.execution_id,\n                           evaluation=uncertain_eval)\n    self.assertTrue(self.trm.reports['test'].any_failed)\n\n  #pylint:disable=protected-access\n  @patch('builtins.open', new_callable=mock_open)\n  @patch('logging.error')\n  @patch('sys.stderr', new_callable=io.StringIO)\n  def test_report_to_terminal_success(self, mock_stderr, mock_logging_error,\n                                      m_open):\n    report_path = self.trm.get_report_path('test')\n    self.trm._write_report_to_terminal(out_path=report_path,\n                                       json_report=json_report)\n    m_open.assert_called_once_with(report_path, 'w', encoding='utf-8')\n    handle = m_open.return_value.__enter__.return_value\n    handle.write.assert_called_once_with(json_report)\n    self.assertEqual(mock_logging_error.call_count, 0)\n    self.assertIn('Runbook report located in:', mock_stderr.getvalue())\n\n  @patch('builtins.open', side_effect=PermissionError)\n  @patch('logging.error')\n  @patch('sys.stderr', new_callable=io.StringIO)\n  def test_save_report_permission_error(self, mock_stderr, mock_logging_error,\n                                        m_open):\n    report_path = self.trm.get_report_path('test')\n    self.trm._write_report_to_terminal(out_path=report_path,\n                                       json_report=json_report)\n    m_open.assert_called_once_with(report_path, 'w', encoding='utf-8')\n    handle = m_open.return_value.__enter__.return_value\n    handle.write.assert_not_called()\n    mock_logging_error.assert_called_once()\n    assert 'Permission denied' in mock_logging_error.call_args[0][0]\n    # report is displayed on the terminal\n    self.assertIn(json_report, mock_stderr.getvalue())\n    self.assertNotIn('Runbook report located in', mock_stderr.getvalue())\n\n  @patch('builtins.open', side_effect=OSError)\n  @patch('logging.error')\n  @patch('sys.stderr', new_callable=io.StringIO)\n  def test_write_report_to_terminal_os_error(self, mock_stderr,\n                                             mock_logging_error, m_open):\n\n    report_path = self.trm.get_report_path('test')\n    self.trm._write_report_to_terminal(out_path=report_path,\n                                       json_report=json_report)\n    m_open.assert_called_once_with(report_path, 'w', encoding='utf-8')\n    handle = m_open.return_value.__enter__.return_value\n    handle.write.assert_not_called()\n    mock_logging_error.assert_called_once()\n    assert 'Failed to save generated report to file' in mock_logging_error.call_args[\n        0][0]\n    # report is displayed on the terminal\n    self.assertIn(json_report, mock_stderr.getvalue())\n    self.assertNotIn('Runbook report located in', mock_stderr.getvalue())\n\n  def test_add_step_metadata(self):\n    step_result = StepResult(Step(uuid='metadata.step'))\n    self.trm.add_step_result(run_id='test', result=step_result)\n    self.trm.add_step_metadata(run_id='test',\n                               key='foo',\n                               value='bar',\n                               step_execution_id=step_result.execution_id)\n    self.assertEqual(\n        self.trm.reports['test'].results[\n            step_result.execution_id].metadata['foo'], 'bar')\n    self.assertEqual(\n        self.trm.get_step_metadata(run_id='test',\n                                   key='foo',\n                                   step_execution_id=step_result.execution_id),\n        'bar')\n    self.assertEqual(\n        self.trm.get_all_step_metadata(\n            run_id='test', step_execution_id=step_result.execution_id),\n        {'foo': 'bar'})\n\n  def test_get_all_step_metadata_no_id(self):\n    self.assertEqual(\n        self.trm.get_all_step_metadata(run_id='test', step_execution_id=None),\n        {})\n\n  def test_add_step_info_metadata(self):\n    step_result = StepResult(Step(uuid='info.metadata.step'))\n    self.trm.add_step_result(run_id='test', result=step_result)\n    self.trm.add_step_info_metadata(run_id='test',\n                                    value='info_message',\n                                    step_execution_id=step_result.execution_id)\n    self.assertIn(\n        'info_message',\n        self.trm.reports['test'].results[step_result.execution_id].info)\n\n  def test_add_step_metadata_no_id(self):\n    self.trm.add_step_metadata(run_id='test',\n                               key='foo',\n                               value='bar',\n                               step_execution_id=None)\n    # in this case nothing is done, so no assertion needed\n    # besides verifying no crash\n\n  def test_get_step_metadata_no_id(self):\n    self.assertIsNone(\n        self.trm.get_step_metadata(run_id='test',\n                                   key='foo',\n                                   step_execution_id=None))\n\n  def test_report_any_failed(self):\n    self.trm.reports['test'].results['gcpdiag.runbook.Step.ok.step'].results[\n        0].status = 'ok'\n    self.assertFalse(self.trm.reports['test'].any_failed)\n    step_result_failed = StepResult(Step(uuid='failed'))\n    failed_eval = report.ResourceEvaluation(resource=self.resource,\n                                            status='failed',\n                                            reason='TestReason',\n                                            remediation='TestRemediation')\n    self.trm.add_step_result(run_id='test', result=step_result_failed)\n    self.trm.add_step_eval(run_id='test',\n                           execution_id=step_result_failed.execution_id,\n                           evaluation=failed_eval)\n    self.assertTrue(self.trm.reports['test'].any_failed)\n\n  @patch(\n      'gcpdiag.runbook.report.TerminalReportManager._write_report_to_terminal')\n  def test_trm_generate_reports(self, mock_write_report):\n    self.trm.reports['test'].run_start_time = '2023-01-01T00:00:00Z'\n    self.trm.reports['test'].run_end_time = '2023-01-01T00:00:01Z'\n    self.trm.reports['test'].results[\n        'gcpdiag.runbook.Step.ok.step'].start_time = '2023-01-01T00:00:00Z'\n    self.trm.reports['test'].results[\n        'gcpdiag.runbook.Step.ok.step'].end_time = '2023-01-01T00:00:01Z'\n    self.trm.reports['test'].results[\n        'gcpdiag.runbook.Step.ok.step'].step.name = ' step name '\n    result = self.trm.generate_reports()\n    mock_write_report.assert_called_once()\n    self.assertIsInstance(result, dict)\n    self.assertEqual(result['run_id'], 'test')\n\n  def test_generate_report_metrics_no_runbook_name(self):\n    step_result = self.trm.reports['test'].results[\n        'gcpdiag.runbook.Step.ok.step']\n    step_result.step = Mock()\n    step_result.step.id = 'ok.step'\n    self.trm.reports['test'].run_start_time = '2023-01-01T00:00:00Z'\n    self.trm.reports['test'].run_end_time = '2023-01-01T00:00:01Z'\n    step_result.start_time = '2023-01-01T00:00:00Z'\n    step_result.end_time = '2023-01-01T00:00:01Z'\n    self.trm.reports['test'].runbook_name = None\n    metrics = self.trm.generate_report_metrics(self.trm.reports['test'])\n    self.assertNotIn('runbook_name', metrics)\n    self.assertNotIn('run_duration', metrics)\n    self.assertNotIn('totals_by_status', metrics)\n    self.assertIn('steps', metrics)\n    self.assertIn('ok.step', metrics['steps'][0])\n    self.assertEqual(metrics['steps'][0]['ok.step']['execution_duration'], 1000)\n\n  def test_get_totals_by_status(self):\n    totals = self.trm.get_totals_by_status()\n    self.assertEqual(totals['ok'], 1)\n\n  def test_generate_report_metrics(self):\n    step_result = self.trm.reports['test'].results[\n        'gcpdiag.runbook.Step.ok.step']\n    step_result.step = Mock()\n    step_result.step.id = 'ok.step'\n    self.trm.reports['test'].run_start_time = '2023-01-01T00:00:00Z'\n    self.trm.reports['test'].run_end_time = '2023-01-01T00:00:01Z'\n    step_result.start_time = '2023-01-01T00:00:00Z'\n    step_result.end_time = '2023-01-01T00:00:01Z'\n    self.trm.reports['test'].runbook_name = 'test/test-runbook'\n    metrics = self.trm.generate_report_metrics(self.trm.reports['test'])\n    self.assertIn('runbook_name', metrics)\n    self.assertEqual(metrics['run_duration'], 1000)\n    self.assertIn('ok.step', metrics['steps'][0])\n    self.assertEqual(metrics['steps'][0]['ok.step']['execution_duration'], 1000)\n\n  @patch('builtins.open', new_callable=mock_open)\n  def test_generate_reports_no_reports(self, m_open):\n    trm = report.TerminalReportManager()\n    with self.assertRaises(UnboundLocalError):\n      trm.generate_reports()\n    m_open.assert_not_called()\n\n  def test_serialize_report_with_formatting(self):\n    self.trm.reports['test'].run_start_time = '2023-01-01T00:00:00Z'\n    self.trm.reports['test'].run_end_time = '2023-01-01T00:00:01Z'\n    step_result = self.trm.reports['test'].results[\n        'gcpdiag.runbook.Step.ok.step']\n    step_result.start_time = '2023-01-01T00:00:00Z'\n    step_result.end_time = '2023-01-01T00:00:01Z'\n    step_result.step.name = ' step name '\n    step_result.results[0].reason = ' reason\\\\nnewline '\n    serialized = self.trm.serialize_report(self.trm.reports['test'])\n    self.assertIn('\"name\": \"step name\"', serialized)\n    self.assertIn('\"reason\": \"reason\\\\nnewline\"', serialized)\n\n\nclass TestReportResults(unittest.TestCase):\n  \"\"\"Test Report\"\"\"\n\n  def test_overall_status_no_status(self):\n    step_result = report.StepResult(step=Step(uuid='no.status.step'))\n    self.assertEqual(step_result.overall_status, 'no_status')\n\n  def test_step_result_any_failed(self):\n    resource = gce.Instance(\n        'project_id', {\n            'id': '123',\n            'name': 'test',\n            'selfLink': 'https://www.googleapis.com/compute/v1/test/test-id'\n        })\n    failed_eval = report.ResourceEvaluation(resource=resource,\n                                            status='failed',\n                                            reason='TestReason',\n                                            remediation='TestRemediation')\n    step_result = report.StepResult(step=Step(uuid='failed.step'))\n    step_result.results.append(failed_eval)\n    self.assertTrue(step_result.any_failed)\n\n  def test_hash(self):\n    step_result = report.StepResult(step=Step(uuid='ok.step'))\n    self.assertEqual(hash(step_result), hash(step_result.execution_id))\n\n  def test_equality(self):\n    # Test objects with the same properties are considered equal\n    result1 = StepResult(Step(uuid='uuid'))\n    result2 = StepResult(Step(uuid='uuid'))\n    self.assertEqual(result1, result2)\n\n    # Test objects with different properties are not considered equal\n    result3 = StepResult(Step())\n    self.assertNotEqual(result1, result3)\n\n  def test_overall_status_with_step_error(self):\n    step_result = report.StepResult(step=Step(uuid='error.step'))\n    step_result.step_error = 'some error'\n    self.assertEqual(step_result.overall_status, 'skipped')\n\n  def test_overall_status_no_results(self):\n    step_result = report.StepResult(step=Step(uuid='no.results.step'))\n    self.assertEqual(step_result.overall_status, 'no_status')\n\n  def test_any_uncertain(self):\n    resource = gce.Instance(\n        'project_id', {\n            'id': '123',\n            'name': 'test',\n            'selfLink': 'https://www.googleapis.com/compute/v1/test/test-id'\n        })\n    uncertain_eval = report.ResourceEvaluation(resource=resource,\n                                               status='uncertain',\n                                               reason='TestReason',\n                                               remediation='TestRemediation')\n    step_result = report.StepResult(step=Step(uuid='uncertain.step'))\n    step_result.results.append(uncertain_eval)\n    self.assertTrue(step_result.any_uncertain)\n    self.assertEqual(step_result.overall_status, 'uncertain')\n\n  def test_any_failed(self):\n    resource = gce.Instance(\n        'project_id', {\n            'id': '123',\n            'name': 'test',\n            'selfLink': 'https://www.googleapis.com/compute/v1/test/test-id'\n        })\n    failed_eval = report.ResourceEvaluation(resource=resource,\n                                            status='failed',\n                                            reason='TestReason',\n                                            remediation='TestRemediation')\n    step_result = report.StepResult(step=Step(uuid='failed.step'))\n    step_result.results.append(failed_eval)\n    self.assertTrue(step_result.any_failed)\n    self.assertEqual(step_result.overall_status, 'failed')\n\n\nclass TestApiReportManager(unittest.TestCase):\n  \"\"\"Test ApiReportManager\"\"\"\n\n  def setUp(self):\n    self.arm = report.ApiReportManager()\n    r = report.Report(run_id='test', parameters={})\n    r.run_id = 'test'\n    r.run_start_time = '2023-01-01T00:00:00Z'\n    r.run_end_time = '2023-01-01T00:00:01Z'\n    self.arm.reports[r.run_id] = r\n    self.resource = gce.Instance(\n        'project_id', {\n            'id': '123',\n            'name': 'test',\n            'selfLink': 'https://www.googleapis.com/compute/v1/test/test-id'\n        })\n\n    ok_step_eval = report.ResourceEvaluation(resource=self.resource,\n                                             status='ok',\n                                             reason='TestReason',\n                                             remediation='TestRemediation')\n    test_step = report.StepResult(step=Step(uuid='ok.step'))\n    test_step.start_time = '2023-01-01T00:00:00Z'\n    test_step.end_time = '2023-01-01T00:00:01Z'\n\n    test_step.results.append(ok_step_eval)\n    self.arm.reports['test'].results = {\n        test_step.execution_id: test_step,\n    }\n\n  @patch('gcpdiag.runbook.Step.name', new_callable=PropertyMock)\n  def test_generate_reports(self, mock_name):\n    mock_name.return_value = 'test step'\n    reports = self.arm.generate_reports()\n    self.assertEqual(len(reports), 1)\n    self.assertEqual(reports[0]['run_id'], 'test')\n\n\nclass TestInteractionInterface(unittest.TestCase):\n  \"\"\"Test InteractionInterface\"\"\"\n\n  def setUp(self):\n    self.addCleanup(config.init, {'auto': True, 'interface': 'cli'})\n    config.init({'auto': False, 'interface': 'cli'})\n    self.cli_interface = report.InteractionInterface(kind='cli')\n    self.api_interface = report.InteractionInterface(kind='api')\n    self.resource = gce.Instance(\n        'project_id', {\n            'id': '123',\n            'name': 'test',\n            'selfLink': 'https://www.googleapis.com/compute/v1/test/test-id'\n        })\n\n  def test_invalid_interface(self):\n    with self.assertRaises(AttributeError):\n      report.InteractionInterface(kind='invalid')\n\n  @patch('gcpdiag.runbook.output.terminal_output.TerminalOutput.info')\n  def test_info(self, mock_info):\n    self.cli_interface.info('test message')\n    mock_info.assert_called_with(message='test message', step_type='INFO')\n\n  @patch('gcpdiag.runbook.output.terminal_output.TerminalOutput.print_skipped')\n  def test_add_skipped(self, mock_print_skipped):\n    run_id = 'test_run'\n    self.cli_interface.rm.reports[run_id] = report.Report(run_id, {})\n    step = Step(uuid='skipped.step')\n    step_result = report.StepResult(step)\n    self.cli_interface.rm.add_step_result(run_id, step_result)\n    self.cli_interface.add_skipped(run_id, self.resource, 'reason',\n                                   step.execution_id)\n    mock_print_skipped.assert_called_once()\n    self.assertEqual(\n        self.cli_interface.rm.reports[run_id].results[\n            step.execution_id].results[0].status, 'skipped')\n\n  @patch('gcpdiag.runbook.output.terminal_output.TerminalOutput.print_ok')\n  def test_add_ok(self, mock_print_ok):\n    run_id = 'test_run'\n    self.cli_interface.rm.reports[run_id] = report.Report(run_id, {})\n    step = Step(uuid='ok.step')\n    step_result = report.StepResult(step)\n    self.cli_interface.rm.add_step_result(run_id, step_result)\n    self.cli_interface.add_ok(run_id, self.resource, step.execution_id,\n                              'reason')\n    mock_print_ok.assert_called_once()\n    self.assertEqual(\n        self.cli_interface.rm.reports[run_id].results[\n            step.execution_id].results[0].status, 'ok')\n\n  @patch('gcpdiag.runbook.output.terminal_output.TerminalOutput.prompt')\n  @patch('gcpdiag.runbook.output.terminal_output.TerminalOutput.print_failed')\n  def test_add_failed(self, mock_print_failed, mock_prompt):\n    run_id = 'test_run'\n    self.cli_interface.rm.reports[run_id] = report.Report(run_id, {})\n    step = Step(uuid='failed.step')\n    step_result = report.StepResult(step)\n    self.cli_interface.rm.add_step_result(run_id, step_result)\n    mock_prompt.return_value = report.constants.CONTINUE\n    self.cli_interface.add_failed(run_id, self.resource, 'reason',\n                                  'remediation', step.execution_id)\n    mock_print_failed.assert_called_once()\n    self.assertEqual(\n        self.cli_interface.rm.reports[run_id].results[\n            step.execution_id].results[0].status, 'failed')\n\n  @patch('gcpdiag.runbook.output.terminal_output.TerminalOutput.prompt')\n  @patch(\n      'gcpdiag.runbook.output.terminal_output.TerminalOutput.print_uncertain')\n  def test_add_uncertain(self, mock_print_uncertain, mock_prompt):\n    run_id = 'test_run'\n    self.cli_interface.rm.reports[run_id] = report.Report(run_id, {})\n    step = Step(uuid='uncertain.step')\n    step_result = report.StepResult(step)\n    self.cli_interface.rm.add_step_result(run_id, step_result)\n    mock_prompt.return_value = report.constants.CONTINUE\n    self.cli_interface.add_uncertain(run_id, step.execution_id, self.resource,\n                                     'reason', 'remediation')\n    mock_print_uncertain.assert_called_once()\n    self.assertEqual(\n        self.cli_interface.rm.reports[run_id].results[\n            step.execution_id].results[0].status, 'uncertain')\n\n  @patch('gcpdiag.runbook.util.render_template')\n  @patch('gcpdiag.runbook.output.terminal_output.TerminalOutput.info')\n  def test_prepare_rca(self, mock_info, mock_render_template):\n    run_id = 'test_run'\n    self.cli_interface.rm.reports[run_id] = report.Report(run_id, {})\n    step = Step(uuid='rca.step')\n    step_result = report.StepResult(step)\n    self.cli_interface.rm.add_step_result(run_id, step_result)\n    mock_render_template.return_value = 'rca message'\n    self.cli_interface.prepare_rca(run_id, self.resource, 'template::prefix',\n                                   'suffix', step, {})\n    mock_info.assert_called_with(message='rca message')\n    self.assertEqual(\n        self.cli_interface.rm.reports[run_id].results[\n            step.execution_id].results[0].status, 'rca')\n\n  @patch('importlib.import_module', side_effect=ImportError)\n  @patch('logging.error')\n  @patch('gcpdiag.runbook.output.terminal_output.TerminalOutput.info')\n  @patch('gcpdiag.runbook.util.render_template')\n  def test_prepare_rca_import_error(self, mock_render_template, mock_info,\n                                    mock_logging_error,\n                                    unused_mock_import_module):\n    run_id = 'test_run'\n    self.cli_interface.rm.reports[run_id] = report.Report(run_id, {})\n    step = Step(uuid='rca.step')\n    step_result = report.StepResult(step)\n    self.cli_interface.rm.add_step_result(run_id, step_result)\n    self.cli_interface.prepare_rca(run_id, self.resource, 'template::prefix',\n                                   'suffix', step, {})\n    # Check that logging.error was called with the exception\n    mock_logging_error.assert_called_once()\n    mock_info.assert_not_called()\n    mock_render_template.assert_not_called()\n\n  @patch('importlib.import_module')\n  @patch('logging.error')\n  @patch('gcpdiag.runbook.output.terminal_output.TerminalOutput.info')\n  @patch('gcpdiag.runbook.util.render_template')\n  def test_prepare_rca_attribute_error(self, mock_render_template, mock_info,\n                                       mock_logging_error, mock_import_module):\n    # Mock import_module to return a mock that raises AttributeError on __file__\n    mock_import_module.return_value = Mock(spec_set=['some_attribute'])\n    run_id = 'test_run'\n    self.cli_interface.rm.reports[run_id] = report.Report(run_id, {})\n    step = Step(uuid='rca.step')\n    step_result = report.StepResult(step)\n    self.cli_interface.rm.add_step_result(run_id, step_result)\n    self.cli_interface.prepare_rca(run_id, self.resource, 'template::prefix',\n                                   'suffix', step, {})\n    # Verify the error was logged\n    mock_logging_error.assert_called_once()\n    self.assertEqual('failed to locate steps module %s',\n                     mock_logging_error.call_args[0][0])\n    mock_info.assert_not_called()\n    mock_render_template.assert_not_called()\n"
  },
  {
    "path": "gcpdiag/runbook/runbook_test.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test code in runbook module\"\"\"\n\nimport unittest\nfrom datetime import datetime, timedelta, timezone\nfrom unittest.mock import ANY, Mock, call, patch\n\nfrom gcpdiag import models, runbook\nfrom gcpdiag.runbook import (Bundle, DiagnosticEngine, Step, constants,\n                             exceptions)\nfrom gcpdiag.runbook.gcp import flags\nfrom gcpdiag.runbook.op import Operator\n\n\nclass LegacyParamHandler(runbook.DiagnosticTree):\n  \"\"\"test runbook\"\"\"\n  parameters = {\n      'new_param': {\n          'required': True\n      },\n      'deprecated_param': {\n          'new_parameter': 'new_param',\n          'deprecated': True\n      }\n  }\n\n  # pylint: disable=unused-argument\n  def legacy_parameter_handler(self, parameters):\n    if 'deprecated_param' in parameters:\n      parameters['new_param'] = True\n      del parameters['deprecated_param']\n\n\nclass TestDiagnosticEngine(unittest.TestCase):\n  \"\"\"Test Diagnostic Engine\"\"\"\n\n  def setUp(self):\n    self.mock_report_manager = Mock(spec=runbook.report.ReportManager)\n    self.mock_report_manager.reports = {}\n    self.de = runbook.DiagnosticEngine()\n    step = runbook.Step\n    step.parameters = {}\n    self.de.add_task((runbook.Bundle(), {}))\n    self.de.add_task((runbook.DiagnosticTree(), {}))\n\n  # pylint: disable=protected-access\n  def test_run_diagnostic_tree_missing_required_parameters(self):\n    with self.assertRaises(exceptions.MissingParameterError) as cm:\n      dt = runbook.DiagnosticTree()\n      dt.parameters = {\n          'missing_param': {\n              'required': True,\n              'help': 'Missing parameter help'\n          },\n      }\n      self.de._check_required_paramaters(parameter_def=dt.parameters,\n                                         caller_args=models.Parameter())\n    self.assertEqual(cm.exception.missing_parameters_list, ['missing_param'])\n    self.assertIn('Missing 1 required parameter', str(cm.exception))\n    self.assertIn('Parameter Explanation: Missing parameter help',\n                  str(cm.exception))\n    self.assertIn('-p missing_param=value', str(cm.exception))\n\n  @patch('logging.warning')\n  def test_run_diagnostic_tree_deprecated_parameters(self, mock_logging_error):\n    parameters = {\n        'deprecated_param': {\n            'deprecated': True,\n            'new_parameter': 'new_value'\n        }\n    }\n    result = self.de._check_deprecated_paramaters(\n        parameter_def=parameters,\n        caller_args=models.Parameter({'deprecated_param': 'val'}))\n    assert 'Deprecated parameters:\\ndeprecated_param. Use: new_value=value' in result\n    mock_logging_error.assert_called_once()\n\n  # pylint: disable=protected-access\n  def test_both_new_and_deprecated_missing(self):\n    with self.assertRaises(exceptions.MissingParameterError):\n      dt = LegacyParamHandler()\n      user_supplied = models.Parameter({'random': 'value'})\n      dt.legacy_parameter_handler(user_supplied)\n      self.de._check_required_paramaters(parameter_def=dt.parameters,\n                                         caller_args=user_supplied)\n\n  # pylint: disable=protected-access\n  def test_backward_compatibility_for_deprecated_params(self):\n    dt = LegacyParamHandler()\n    user_supplied_param = models.Parameter({'deprecated_param': 'used_by_user'})\n    dt.legacy_parameter_handler(user_supplied_param)\n    self.de._check_required_paramaters(parameter_def=dt.parameters,\n                                       caller_args=user_supplied_param)\n\n  def test_load_steps_missing_step(self):\n    with self.assertRaisesRegex(ValueError, 'Step \"MissingStep\" not found'):\n      self.de.load_steps({}, ['MissingStep'])\n\n  @patch('gcpdiag.runbook.DiagnosticEngine.run_step')\n  def test_find_path_dfs_normal_operation(self, mock_run_step):\n    op = Operator(interface=None)\n    current_step = Mock(execution_id='1')\n    current_step.steps = []\n    visited = set()\n\n    self.de.find_path_dfs(operator=op,\n                          step=current_step,\n                          executed_steps=visited)\n\n    mock_run_step.assert_called()\n    self.assertIn(current_step,\n                  visited)  # Check if the current step was marked as visited\n\n  @patch('gcpdiag.runbook.DiagnosticEngine.run_step')\n  def test_find_path_dfs_finite_loop(self, mock_run_step):\n    op = Operator(interface=None)\n    current_step = Mock(execution_id='1', type=constants.StepType.AUTOMATED)\n    current_step.steps = [current_step]\n    visited = set()\n\n    self.de.find_path_dfs(operator=op,\n                          step=current_step,\n                          executed_steps=visited)\n\n    mock_run_step.assert_called()\n    self.assertIn(current_step, visited)\n\n  @patch('gcpdiag.runbook.DiagnosticEngine.run_step')\n  def test_find_path_dfs_dynamically_added_child(self, mock_run_step):\n    \"\"\"Test that find_path_dfs executes dynamically added step as child.\"\"\"\n    op = Operator(interface=None)\n    step_root = Mock(execution_id='root_step')\n    step_initial_a = Mock(execution_id='initial_child_A', steps=[])\n    step_initial_a._was_initially_defined = True\n    step_initial_b = Mock(execution_id='initial_child_B', steps=[])\n    step_initial_b._was_initially_defined = True\n    step_dynamic_b = Mock(execution_id='dynamic_child_B', steps=[])\n    del step_dynamic_b._was_initially_defined\n\n    step_root.steps = [step_initial_a]\n    step_initial_a.steps = [step_initial_b, step_dynamic_b]\n    mock_run_step.return_value = None\n    executed_steps = set()\n    self.de.find_path_dfs(\n        step=step_root,\n        operator=op,\n        executed_steps=executed_steps,\n    )\n    expected_run_step_calls = [\n        call(step=step_root, operator=op),\n        call(step=step_initial_a, operator=op),\n        call(step=step_dynamic_b, operator=op),\n        call(step=step_initial_b, operator=op),\n    ]\n\n    mock_run_step.assert_has_calls(expected_run_step_calls, any_order=False)\n\n    self.assertIn(step_root, executed_steps)\n    self.assertIn(step_initial_a, executed_steps)\n    self.assertIn(step_dynamic_b, executed_steps)\n    self.assertEqual(len(executed_steps), 4)\n\n  @patch('gcpdiag.runbook.DiagnosticEngine.run_step')\n  def test_find_path_dfs_dynamic_end_step_stops_execution(self, mock_run_step):\n    op_instance = Operator(interface=None)\n    root_step = Mock(execution_id='root')\n    intermediate_step = Mock(execution_id='intermediate')\n    finalize_step = Mock(execution_id='finalize_investigation',\n                         type=constants.StepType.END)\n    should_not_run_step = Mock(execution_id='should_not_run')\n    should_not_run_step._was_initially_defined = True\n    root_step.steps = [intermediate_step, should_not_run_step]\n    intermediate_step.steps = [finalize_step]\n\n    def side_effect_for_run_step(step, operator):  # pylint: disable=unused-argument\n      if step.type == constants.StepType.END:\n        # This step signals to stop the investigation\n        return constants.FINALIZE_INVESTIGATION\n      # Other steps just continue normally\n      return None\n\n    mock_run_step.side_effect = side_effect_for_run_step\n\n    executed_steps_tracker = set()\n    self.de.find_path_dfs(\n        step=root_step,\n        operator=op_instance,\n        executed_steps=executed_steps_tracker,\n    )\n\n    expected_calls = [\n        call(step=root_step, operator=op_instance),\n        call(step=intermediate_step, operator=op_instance),\n        call(step=finalize_step, operator=op_instance),\n    ]\n    mock_run_step.assert_has_calls(expected_calls, any_order=False)\n    self.assertNotIn(\n        call(step=should_not_run_step, operator=op_instance),\n        mock_run_step.call_args_list,\n    )\n    self.assertEqual(mock_run_step.call_count, 3)\n    self.assertIn(root_step, executed_steps_tracker)\n    self.assertIn(intermediate_step, executed_steps_tracker)\n    self.assertIn(finalize_step, executed_steps_tracker)\n    self.assertNotIn(should_not_run_step, executed_steps_tracker)\n    self.assertTrue(self.de.finalize)\n\n  @patch('gcpdiag.runbook.DiagnosticEngine.run_step')\n  def test_find_path_all_child_step_executions(self, mock_run_step):\n    op = Operator(interface=None)\n    first_step = Mock(execution_id='1')\n    intermidiate_step = Mock(execution_id='2')\n    first_step.steps = [intermidiate_step]\n    last_step = Mock(execution_id='3')\n    last_step.steps = []\n    intermidiate_step.steps = [last_step, last_step, last_step, last_step]\n    visited = set()\n\n    self.de.find_path_dfs(operator=op, step=first_step, executed_steps=visited)\n    self.assertIn(first_step, visited)\n    self.assertIn(intermidiate_step, visited)\n    self.assertIn(last_step, visited)\n    self.assertEqual(mock_run_step.call_count, 3)\n\n  @patch('gcpdiag.runbook.op.Operator')\n  @patch('gcpdiag.runbook.DiagnosticEngine.run_step')\n  def test_gateway_step_in_bundle(self, mock_run_step, mock_operator_class):\n    \"\"\"Dedicated test to ensure gateway steps in bundles execute child steps and report results.\"\"\"\n    self.de.interface = Mock()\n    self.de.interface.rm = self.mock_report_manager\n    mock_op_instance = Mock()\n    mock_operator_class.return_value = mock_op_instance\n\n    # Create mock steps to track execution\n    mock_child_execute = Mock()\n    mock_gateway_execute = Mock()\n\n    class MockChildStep(runbook.Step):\n      template = 'mock_child'\n\n      def execute(self, op):\n        \"\"\"Executes mock child step.\"\"\"\n        mock_child_execute()\n        op.add_ok(resource=Mock(spec=models.Resource),\n                  reason='Child step executed')\n\n    class MockGatewayStep(runbook.Gateway):\n      template = 'mock_gateway'\n\n      def execute(self, op):  # pylint: disable=unused-argument\n        \"\"\"Executes mock gateway step.\"\"\"\n        mock_gateway_execute()\n        self.add_child(MockChildStep())\n\n    bundle = runbook.Bundle()\n    bundle.run_id = 'test_bundle_run'\n    bundle.parameter = models.Parameter({})\n    bundle.steps = [MockGatewayStep]\n\n    def run_step_side_effect(step, operator):\n      # StartStep is an internal step and its execute method doesn't take any\n      # arguments. The real run_step handles this, so our mock should too.\n      if isinstance(step, runbook.StartStep):\n        step.execute()\n      else:\n        step.execute(operator)\n\n    mock_run_step.side_effect = run_step_side_effect\n    self.de.run_bundles(bundles=[bundle])\n\n    # Assert that the gateway and the dynamically added child were executed\n    mock_gateway_execute.assert_called_once()\n    mock_child_execute.assert_called_once()\n    mock_op_instance.add_ok.assert_called_once_with(\n        resource=ANY, reason='Child step executed')\n\n  @patch('gcpdiag.runbook.DiagnosticEngine.run_bundles')\n  @patch('gcpdiag.runbook.DiagnosticEngine.run_diagnostic_tree')\n  def test_run_operation(self, mock_run_bundle, mock_run_diagnostic_tree):\n\n    self.de.run()\n    assert mock_run_bundle.called\n    assert mock_run_diagnostic_tree.called\n\n  @patch('gcpdiag.runbook.DiagnosticEngine.run_step')\n  def test_run_bundles(self, mock_run_step):\n    bundle = runbook.Bundle()\n    param = {\n        'param_one': 'test',\n        'param_two': True,\n        'param_three': datetime.now()\n    }\n    bundle.parameter = models.Parameter(param)\n    bundle.steps.append(runbook.Step)\n    self.de.run_bundles(bundles=[bundle])\n    _, kwargs = mock_run_step.call_args\n    assert mock_run_step.called\n    assert isinstance(kwargs['step'], runbook.Step)\n    assert kwargs['step'].param_one == param['param_one']\n    assert kwargs['step'].param_two == param['param_two']\n    assert kwargs['step'].param_three == param['param_three']\n\n  def test_run_diagnostic_tree_missing_legacy_handler(self):\n    with self.assertRaises(TypeError) as context:\n      # pylint: disable=unused-variable\n      class MissingLegacyHandler(runbook.DiagnosticTree):\n        parameters = {\n            'deprecated_param': {\n                'type': str,\n                'help': 'Deprecated parameter',\n                'deprecated': True,  # triggers Type error because of this field\n                'new_parameter': 'new_param'\n            }\n        }\n\n    self.assertIn((\n        'does not implement legacy_parameter_handler(). Implement this method to handle '\n        'backward compatibility for deprecated parameters.'),\n                  str(context.exception))\n\n  @patch('gcpdiag.runbook.DiagnosticEngine.run_step')\n  def test_run_multiple_bundles_consolidated_report(self, mock_run_step):  # pylint: disable=unused-argument\n    # Setup engine and bundles\n    engine = DiagnosticEngine()\n\n    bundle1 = Bundle()\n    bundle1.parameter = models.Parameter({})\n    step1 = Mock(spec=Step)\n    step1.parameters = {}\n    step1.return_value.steps = []\n    bundle1.steps.append(step1)\n\n    bundle2 = Bundle()\n    bundle2.parameter = models.Parameter({})\n    step2 = Mock(spec=Step)\n    step2.parameters = {}\n    step2.return_value.steps = []\n    bundle2.steps.append(step2)\n\n    # Add tasks and run\n    engine.add_task((bundle1, bundle1.parameter))\n    engine.add_task((bundle2, bundle2.parameter))\n    engine.run()\n\n    # Verify that only one report is created\n    self.assertEqual(len(engine.interface.rm.reports), 1)\n\n\nclass TestSetDefaultParameters(unittest.TestCase):\n  \"\"\"Test for Setting default date parameters\"\"\"\n\n  def setUp(self):\n    self.de = runbook.DiagnosticEngine()\n    self.de.add_task((Mock(parent=runbook.DiagnosticTree), {}))\n\n  def test_no_parameters_set(self):\n    parameters = models.Parameter()\n    self.de.parse_parameters(parameter_def={}, caller_args=parameters)\n    self.assertIn(flags.END_TIME, parameters)\n    self.assertIn(flags.START_TIME, parameters)\n    end_time = parameters[flags.END_TIME]\n    start_time = parameters[flags.START_TIME]\n\n    # Assert end_time is recent and start_time is 8 hours before end_time\n    self.assertTrue(isinstance(end_time, datetime))\n    self.assertTrue(isinstance(start_time, datetime))\n    self.assertAlmostEqual(end_time - start_time,\n                           timedelta(hours=8),\n                           delta=timedelta(seconds=10))\n\n  def test_end_time_provided_in_rfc3339(self):\n    end_t_str = '2024-03-20T15:00:00Z'\n    parameters = models.Parameter()\n    parameters[flags.END_TIME] = end_t_str\n    self.de.parse_parameters(parameter_def={}, caller_args=parameters)\n    end_time = parameters[flags.END_TIME]\n    start_time = parameters[flags.START_TIME]\n\n    exp_end_time = datetime.strptime(\n        end_t_str, '%Y-%m-%dT%H:%M:%SZ').replace(tzinfo=timezone.utc)\n    self.assertEqual(end_time, exp_end_time)\n    self.assertEqual(start_time, exp_end_time - timedelta(hours=8))\n\n  def test_only_start_time_provided_in_rfc3339(self):\n    start_t_str = '2024-03-20T07:00:00Z'\n    parameters = models.Parameter()\n    parameters[flags.START_TIME] = start_t_str\n    self.de.parse_parameters(parameter_def={}, caller_args=parameters)\n    start_time = parameters[flags.START_TIME]\n    end_time = parameters[flags.END_TIME]\n\n    exp_start_time = datetime.strptime(\n        start_t_str, '%Y-%m-%dT%H:%M:%SZ').replace(tzinfo=timezone.utc)\n    self.assertEqual(start_time, exp_start_time)\n    self.assertTrue(isinstance(end_time, datetime))\n\n  def test_both_times_provided_in_rfc3339(self):\n    start_time_str = '2024-03-20T07:00:00Z'\n    end_time_str = '2024-03-20T15:00:00Z'\n    parameters = models.Parameter()\n    parameters[flags.START_TIME] = start_time_str\n    parameters[flags.END_TIME] = end_time_str\n\n    self.de.parse_parameters(parameter_def={}, caller_args=parameters)\n    start_time = parameters[flags.START_TIME]\n    end_time = parameters[flags.END_TIME]\n\n    expected_start_time = datetime.strptime(\n        start_time_str, '%Y-%m-%dT%H:%M:%SZ').replace(tzinfo=timezone.utc)\n    expected_end_time = datetime.strptime(\n        end_time_str, '%Y-%m-%dT%H:%M:%SZ').replace(tzinfo=timezone.utc)\n    self.assertEqual(start_time, expected_start_time)\n    self.assertEqual(end_time, expected_end_time)\n\n  def test_start_time_provided_in_utc_format(self):\n    start_time_str = '2024-07-20'\n    self.de.parameters = {}\n    parameters = models.Parameter()\n    parameters[flags.START_TIME] = start_time_str\n\n    self.de.parse_parameters(self.de.parameters, parameters)\n    start_time = parameters[flags.START_TIME]\n    end_time = parameters[flags.END_TIME]\n\n    self.assertEqual(str(start_time), '2024-07-20 00:00:00+00:00')\n    self.assertTrue(str(end_time), isinstance(end_time, datetime))\n\n  def test_end_time_provided_in_utc_format(self):\n    end_time_str = '2024-07-20'\n    self.de.parameters = {}\n    parameters = models.Parameter()\n    parameters[flags.END_TIME] = end_time_str\n\n    self.de.parse_parameters(self.de.parameters, parameters)\n    start_time = parameters[flags.START_TIME]\n    end_time = parameters[flags.END_TIME]\n\n    self.assertEqual(str(start_time), '2024-07-19 16:00:00+00:00')\n    self.assertEqual(str(end_time), '2024-07-20 00:00:00+00:00')\n\n  def test_both_times_provided_in_utc_format(self):\n    start_time_str = '2024-07-20'\n    end_time_str = '2024-08-25'\n    self.de.parameters = {}\n    parameters = models.Parameter()\n    parameters[flags.START_TIME] = start_time_str\n    parameters[flags.END_TIME] = end_time_str\n\n    self.de.parse_parameters(self.de.parameters, parameters)\n    start_time = parameters[flags.START_TIME]\n    end_time = parameters[flags.END_TIME]\n\n    self.assertEqual(str(start_time), '2024-07-20 00:00:00+00:00')\n    self.assertEqual(str(end_time), '2024-08-25 00:00:00+00:00')\n\n  def test_both_times_provided_in_non_utc_format(self):\n    start_time_str = '2024-07-20 00:00:00'\n    # '2024-07-20T12:00:00-05:00'   12 PM EST (UTC-5)\n    end_time_str = '2024-08-25 00:00:00'\n    # '2024-08-25T15:00:00-07:00'     3 PM PDT (UTC-7)\n\n    self.de.parameters = {}\n    parameters = models.Parameter()\n\n    parameters[flags.START_TIME] = start_time_str\n    parameters[flags.END_TIME] = end_time_str\n\n    self.de.parse_parameters(self.de.parameters, parameters)\n    start_time = parameters[flags.START_TIME]\n    end_time = parameters[flags.END_TIME]\n\n    # Convert expected UTC times for the test case\n    expected_start_time = '2024-07-20 00:00:00+00:00'\n    # '2024-07-20 17:00:00+00:00'   12 PM EST is 5 PM UTC\n    expected_end_time = '2024-08-25 00:00:00+00:00'\n    # '2024-08-25 22:00:00+00:00'     3 PM PDT is 10 PM UTC\n\n    self.assertEqual(str(start_time), expected_start_time)\n    self.assertEqual(str(end_time), expected_end_time)\n\n  def test_times_provided_in_epoch_format(self):\n    start_time_epoch = '1601481600'  # 2020-09-30 16:00:00 UTC\n    end_time_epoch = '1601485200'  # 2020-09-30 17:00:00 UTC\n    parameters = models.Parameter()\n    parameters[flags.START_TIME] = start_time_epoch\n    parameters[flags.END_TIME] = end_time_epoch\n    self.de.parse_parameters(parameter_def={}, caller_args=parameters)\n    start_time = parameters[flags.START_TIME]\n    end_time = parameters[flags.END_TIME]\n\n    expected_start_time = datetime.fromtimestamp(float(start_time_epoch),\n                                                 tz=timezone.utc)\n    expected_end_time = datetime.fromtimestamp(float(end_time_epoch),\n                                               tz=timezone.utc)\n    self.assertEqual(start_time, expected_start_time)\n    self.assertEqual(end_time, expected_end_time)\n\n  def test_invalid_format_provided(self):\n    start_time_invalid = 'invalid_start_time'\n    end_time_invalid = 'invalid_end_time'\n    parameters = models.Parameter()\n    parameters[flags.START_TIME] = start_time_invalid\n    parameters[flags.END_TIME] = end_time_invalid\n    with self.assertRaises(ValueError):\n      self.de.parse_parameters(parameter_def={}, caller_args=parameters)\n\n\nclass TestMetaStepRegistry(unittest.TestCase):\n  \"\"\"Test for meta step registry.\"\"\"\n\n  def setUp(self):\n    # Clear the registry before each test\n    runbook.StepRegistry.clear()\n\n  def test_register_step_subclass(self):\n\n    class MyStep(runbook.Step):\n      pass\n\n    self.assertIn(MyStep.id, runbook.StepRegistry)\n    self.assertIs(runbook.StepRegistry[MyStep.id], MyStep)\n\n  def test_register_gateway_subclass(self):\n\n    class MyGateway(runbook.Gateway):\n      pass\n\n    self.assertIn(MyGateway.id, runbook.StepRegistry)\n    self.assertIs(runbook.StepRegistry[MyGateway.id], MyGateway)\n\n  def test_register_composite_step_subclass(self):\n\n    class MyCompositeStep(runbook.CompositeStep):\n      pass\n\n    self.assertIn(MyCompositeStep.id, runbook.StepRegistry)\n    self.assertIs(runbook.StepRegistry[MyCompositeStep.id], MyCompositeStep)\n\n  def test_dont_register_base_classes(self):\n    self.assertNotIn(runbook.Step.id, runbook.StepRegistry)\n    self.assertNotIn(runbook.Gateway.id, runbook.StepRegistry)\n\n  def test_dont_register_other_classes(self):\n\n    class NotAStep:\n      pass\n\n    not_a_step_id = '.'.join([NotAStep.__module__, NotAStep.__name__])\n    self.assertNotIn(not_a_step_id, runbook.StepRegistry)\n"
  },
  {
    "path": "gcpdiag/runbook/snapshot_test_base.py",
    "content": "# Copyright 2022 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\" Base class for snapshot tests \"\"\"\nimport io\nimport sys\nimport textwrap\nfrom os import path\nfrom unittest import mock\n\nfrom gcpdiag import models, runbook\nfrom gcpdiag.queries import apis_stub, dns_stub, kubectl_stub\nfrom gcpdiag.runbook import command, util\n\n\n@mock.patch('gcpdiag.queries.apis.get_user_email',\n            new=lambda: 'fake-user@google.com')\n@mock.patch('gcpdiag.queries.apis.get_api', new=apis_stub.get_api_stub)\n@mock.patch('gcpdiag.queries.kubectl.verify_auth', new=kubectl_stub.verify_auth)\n@mock.patch('gcpdiag.queries.kubectl.check_gke_ingress',\n            new=kubectl_stub.check_gke_ingress)\n@mock.patch('gcpdiag.queries.dns.find_dns_records',\n            new=dns_stub.find_dns_records)\nclass RulesSnapshotTestBase:\n  \"\"\" Run snapshot test \"\"\"\n\n  def test_all_rules(self, snapshot):\n    self.de = runbook.DiagnosticEngine()\n    tree = self.de.load_tree(self.runbook_name)\n    snapshot.snapshot_dir = path.join(path.dirname(self.rule_pkg.__file__),\n                                      'snapshots')\n    output_stream = io.StringIO()\n    sys.stdout = _Tee(output_stream, sys.stdout)\n    for parameter in self.rule_parameters:\n      parameters = self._mk_parameters(parameter=parameter)\n      print(textwrap.fill(str(parameters), 100), file=sys.stdout, end='\\n\\n')\n      self.de.run_diagnostic_tree(tree(), parameter=parameters)\n      print('\\n')\n    snapshot.assert_match(\n        output_stream.getvalue(),\n        path.join(\n            snapshot.snapshot_dir,\n            f'{util.pascal_case_to_snake_case(tree().__class__.__name__)}.txt'))\n\n  def _mk_parameters(self, parameter):\n    return models.Parameter(parameter)\n\n\nclass _Tee:\n  \"\"\"Helper class to direct the same output to two file like objects at the same time.\"\"\"\n\n  def __init__(self, string_io1, string_io2):\n    self.string_io1 = string_io1\n    self.string_io2 = string_io2\n\n  def write(self, data):\n    self.string_io1.write(data)\n    self.string_io2.write(data)\n\n  def flush(self):\n    self.string_io1.flush()\n    self.string_io2.flush()\n\n\n#pylint: disable=protected-access\ncommand._load_runbook_rules(runbook.__name__)\n"
  },
  {
    "path": "gcpdiag/runbook/util.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Helpful functions used in different parts of the runbook command\"\"\"\n\nimport importlib\nimport os\nimport re\nimport string\nimport uuid\nfrom datetime import datetime, timezone\n\nfrom dateutil import parser\nfrom jinja2 import Environment, FileSystemLoader, select_autoescape\n\nfrom gcpdiag.runbook import constants\n\nenv = Environment(trim_blocks=True,\n                  lstrip_blocks=True,\n                  autoescape=select_autoescape())\n\nstep_outcomes = constants.StepConstants.keys()\n\n\ndef generate_uuid(length: int = 10,\n                  separator_interval: int = 4,\n                  separator: str = '.'):\n  \"\"\"\n  Generates a UUID string with the specified length and separators.\n\n  Args:\n      length: The desired length of the final UUID string excluding separators. Default 8\n      separator_interval: The number of characters between separators. Default: 4\n      separator: uuid separator. Default `.`\n\n  Returns:\n      A UUID string formatted with the specified length and separators.\n  \"\"\"\n  uuid_str = uuid.uuid4().hex\n\n  if len(uuid_str) > length:\n    uuid_str = uuid_str[:length]\n  else:\n    uuid_str = uuid_str.ljust(length, '0')\n\n  unique_id = separator.join(\n      uuid_str[i:i + separator_interval]\n      for i in range(0, len(uuid_str), separator_interval))\n\n  return unique_id\n\n\ndef pascal_case_to_kebab_case(s):\n  \"\"\"\n  Converts a PascalCase string to kebab-case.\n\n  Args:\n      s (str): The string to convert from PascalCase to kebab-case.\n\n  Returns:\n      str: The converted string in kebab-case.\n  \"\"\"\n  s = re.sub('(.)([A-Z0-9][a-z]+)', r'\\1-\\2', s)\n  s = re.sub('--([A-Z0-9])', r'-\\1', s)\n  s = re.sub('([a-z])([A-Z0-9])', r'\\1-\\2', s)\n  return s.lower()\n\n\ndef kebab_case_to_pascal_case(s):\n  \"\"\"\n  Converts a kebab-case string to PascalCase.\n\n  Args:\n      s (str): The string to convert\n\n  Returns:\n      str: The converted string in Pascal Case.\n  \"\"\"\n  words = s.split('-')\n  pascal_str = ''.join(word.capitalize() for word in words)\n  return pascal_str\n\n\ndef pascal_case_to_snake_case(s):\n  \"\"\"\n  Converts a PascalCase string to snake_case.\n\n  Args:\n      s (str): The string to convert from PascalCase to snake_case.\n\n  Returns:\n      str: The converted string in snake_case.\n  \"\"\"\n  s = re.sub('(.)([A-Z0-9][a-z]+)', r'\\1_\\2', s)\n  s = re.sub('__([A-Z0-9])', r'_\\1', s)\n  s = re.sub('([a-z])([A-Z0-9])', r'\\1_\\2', s)\n  return s.lower()\n\n\ndef runbook_name_parser(s):\n  \"\"\"\n  Converts a string from PascalCase or kebab-case.\n\n  Args:\n      s (str): The string to convert from PascalCase to kebab-case.\n\n  Returns:\n      str: The converted string in kebab-case\n  \"\"\"\n  s = s.replace('_', '-')\n  parts = s.split('/')\n\n  return '/'.join([pascal_case_to_kebab_case(part) for part in parts])\n\n\ndef pascal_case_to_title(s):\n  \"\"\"\n  Converts a PascalCase string to Title Case (each word's first letter is capitalized).\n\n  Args:\n      s (str): The string to convert from PascalCase to Title Case.\n\n  Returns:\n      str: The converted string in Title Case.\n  \"\"\"\n  s = re.sub('(.)([A-Z0-9][a-z]+)', r'\\1 \\2', s)\n  s = re.sub('__([A-Z0-9])', r' \\1', s)\n  s = re.sub('([a-z])([A-Z0-9])', r'\\1 \\2', s)\n  return string.capwords(s)\n\n\ndef load_template_block(module_name, file_name, block_name):\n  \"\"\"\n  Load specified blocks from a Jinja2 template.\n\n  block_name: Load blocks with this prefixf/\n  module_name: Ref to module\n  \"\"\"\n  module = importlib.import_module(module_name)\n\n  current_dir = os.path.dirname(os.path.abspath(module.__file__))\n  template_file = os.path.join(current_dir, 'templates', f'{file_name}.jinja')\n\n  env.loader = FileSystemLoader(os.path.dirname(template_file))\n  template = env.get_template(os.path.basename(template_file))\n  observations = {}\n\n  for entry in step_outcomes:\n    t_block_name = f'{block_name}_{entry}'\n    # Attempt to load each sub-block if it exists within the main block\n    if t_block_name in template.blocks:\n      observations[entry] = ''.join(template.blocks[t_block_name](\n          template.new_context()))\n  return observations\n\n\ndef render_template(file_dir,\n                    file_name_with_ext,\n                    context,\n                    block_prefix=None,\n                    block_suffix=None):\n  \"\"\"\n  Load specified blocks from a Jinja2 template.\n\n  template_path: Path to the Jinja2 template file.\n  main_block_name: The main block name to load sub-blocks from.\n  sub_block_names: A list of sub-block names to load.\n  A dictionary with the loaded block contents.\n  \"\"\"\n  env.loader = FileSystemLoader(file_dir)\n  context['render_block'] = f'{block_prefix}_{block_suffix}'\n  content = env.get_template(f'{file_name_with_ext}').render(context)\n  return content\n\n\ndef parse_time_input(time_str):\n  \"\"\"Parse RFC3339, ISO 8601, or epoch time input to datetime object.\"\"\"\n  # Try parsing as a float (epoch timestamp) first\n  try:\n    epoch = float(time_str)\n    return datetime.fromtimestamp(epoch, tz=timezone.utc)\n  except ValueError:\n    pass  # Not an epoch timestamp\n\n  # Then, try parsing as ISO 8601 / RFC 3339 using dateutil for broader support\n  try:\n    return parser.isoparse(time_str)\n  except ValueError:\n    pass\n  # Not an ISO 8601 / RFC 3339 formatted date\n  # If none of the formats matched, raise an exception\n  raise ValueError(f'Date format not recognized: {time_str}')\n\n\ndef resolve_patterns(patterns_str: str, constants_module) -> list[str]:\n  \"\"\"Resolves a ';;' separated string of patterns, handling 'ref:' prefix.\"\"\"\n  patterns = []\n  for pattern in patterns_str.split(';;'):\n    pattern = pattern.strip()\n    if pattern.startswith('ref:'):\n      const_name = pattern[4:]\n      resolved_value = getattr(constants_module, const_name, None)\n      if resolved_value is None:\n        raise ValueError(\n            f\"Could not resolve constant reference: '{pattern}'. \"\n            f\"Ensure '{const_name}' is defined in {constants_module.__name__}.\")\n      if isinstance(resolved_value, list):\n        patterns.extend(resolved_value)\n      else:\n        patterns.append(resolved_value)\n    else:\n      patterns.append(pattern)\n  return patterns\n\n\ndef get_operator_fn(op_str: str):\n  \"\"\"Maps an operator string to a function from the operator module.\"\"\"\n  operators = {\n      'eq': re.match,\n      'ne': re.match,\n      'lt': re.match,\n      'le': re.match,\n      'gt': re.match,\n      'ge': re.match,\n  }\n  if op_str not in operators:\n    raise ValueError(\n        f\"Unsupported operator: '{op_str}'. Supported operators are: {list(operators.keys())}\"\n    )\n  return operators[op_str]\n"
  },
  {
    "path": "gcpdiag/runbook/util_test.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Contains Util related Tests\"\"\"\nimport re\nimport unittest\nfrom datetime import datetime, timezone\nfrom unittest import mock\n\nfrom jinja2 import Environment\n\nfrom gcpdiag.runbook import util\n\n\nclass TestStringConversions(unittest.TestCase):\n  \"\"\"Test case type conversion used for Runbook and step name conversions.\"\"\"\n\n  def test_pascal_case_to_kebab_case(self):\n    self.assertEqual(util.pascal_case_to_kebab_case('PascalCase'),\n                     'pascal-case')\n    # should be able to handle camelcase too\n    self.assertEqual(util.pascal_case_to_kebab_case('camelCase'), 'camel-case')\n    self.assertEqual(util.pascal_case_to_kebab_case('Pascal'), 'pascal')\n    self.assertNotEqual(util.pascal_case_to_kebab_case('Not Pascal'),\n                        'not-pascal')\n\n  def test_pascal_case_to_title(self):\n    self.assertEqual(util.pascal_case_to_title('PascalCase'), 'Pascal Case')\n    self.assertEqual(util.pascal_case_to_title('Errors5xx'), 'Errors 5xx')\n    self.assertEqual(util.pascal_case_to_title('Errors5xxStart'),\n                     'Errors 5xx Start')\n    self.assertEqual(util.pascal_case_to_title('Errors503'), 'Errors 503')\n\n  def test_pascal_case_to_snake_case(self):\n    self.assertEqual(util.pascal_case_to_snake_case('PascalCase'),\n                     'pascal_case')\n    self.assertEqual(util.pascal_case_to_snake_case('Errors5xx'), 'errors_5xx')\n    self.assertEqual(util.pascal_case_to_snake_case('Errors5xxStart'),\n                     'errors_5xx_start')\n    self.assertEqual(util.pascal_case_to_snake_case('Errors503'), 'errors_503')\n\n  def test_kebab_case_to_pascal_case(self):\n    self.assertEqual(util.kebab_case_to_pascal_case('kebab-case'), 'KebabCase')\n    self.assertEqual(util.kebab_case_to_pascal_case('kebab-case-long'),\n                     'KebabCaseLong')\n\n  def test_runbook_name_parser(self):\n    self.assertEqual(util.runbook_name_parser('product/word'), 'product/word')\n    self.assertEqual(util.runbook_name_parser('product/kebab-case'),\n                     'product/kebab-case')\n    self.assertEqual(\n        util.runbook_name_parser('product/kebab_case_name'),\n        'product/kebab-case-name',\n    )\n    self.assertEqual(util.runbook_name_parser('Product/PascalCase'),\n                     'product/pascal-case')\n    self.assertEqual(util.runbook_name_parser('Product/PascalCase'),\n                     'product/pascal-case')\n    self.assertEqual(\n        util.runbook_name_parser('Product/PascalCase5xx'),\n        'product/pascal-case-5xx',\n    )\n    self.assertEqual(\n        util.runbook_name_parser('Product/PascalCase5Test'),\n        'product/pascal-case-5-test',\n    )\n\n    self.assertEqual(util.runbook_name_parser('PascalCase'), 'pascal-case')\n    self.assertEqual(util.runbook_name_parser('snake_case'), 'snake-case')\n    self.assertEqual(util.runbook_name_parser('pascal-snake_case'),\n                     'pascal-snake-case')\n    self.assertEqual(\n        util.runbook_name_parser('MixAnd-Match_Examplev3'),\n        'mix-and-match-examplev-3',\n    )\n\n  def test_parse_rfc3339_format(self):\n    test_str = '2024-03-20T07:00:00Z'\n    expected = datetime(2024, 3, 20, 7, 0, tzinfo=timezone.utc)\n    result = util.parse_time_input(test_str)\n    self.assertEqual(result, expected)\n\n  def test_parse_epoch_format(self):\n    test_str = '1601481600'  # Corresponds to 2020-09-30 16:00:00 UTC\n    expected = datetime(2020, 9, 30, 16, 0, tzinfo=timezone.utc)\n    result = util.parse_time_input(test_str)\n    self.assertEqual(result, expected)\n\n  def test_invalid_format_raises_error(self):\n    test_str = 'not-a-valid-time'\n    with self.assertRaises(ValueError):\n      util.parse_time_input(test_str)\n\n\nclass TestGenerateUUID(unittest.TestCase):\n  \"\"\"Test UUID genertor for Runbook executions\"\"\"\n\n  def test_uniqueness(self):\n    \"\"\"Test that generated UUIDs are unique.\"\"\"\n    uuids = set()\n    for _ in range(10000):  # Generate a reasonable number of UUIDs\n      uuids.add(util.generate_uuid())\n    self.assertEqual(len(uuids), 10000)  # All should be unique\n\n  def test_default_parameters(self):\n    \"\"\"Test with default length and separator.\"\"\"\n    result = util.generate_uuid()\n\n    self.assertEqual(len(result), 10 + result.count('.'))  # Check length\n    self.assertTrue('.' in result)  # Check for separator\n\n  def test_custom_length(self):\n    \"\"\"Test with a custom length.\"\"\"\n    result = util.generate_uuid(length=12)\n    self.assertEqual(len(result), 12 + result.count('.'))\n\n  def test_custom_separator(self):\n    \"\"\"Test with a custom separator.\"\"\"\n    result = util.generate_uuid(separator='-')\n    self.assertTrue('-' in result)\n\n  def test_custom_interval(self):\n    \"\"\"Test with a custom separator interval.\"\"\"\n    result = util.generate_uuid(separator_interval=3)\n    separator_count = result.count('.')\n    self.assertEqual(separator_count, 3)\n\n  def test_truncate(self):\n    \"\"\"Test truncation when length is shorter than UUID.\"\"\"\n    result = util.generate_uuid(length=4)\n    self.assertEqual(len(result), 4 + result.count('.'))\n\n  def test_pad(self):\n    \"\"\"Test padding when length is longer than UUID.\"\"\"\n    result = util.generate_uuid(length=40)\n    self.assertEqual(len(result), 40 + result.count('.'))\n    self.assertTrue(result.endswith('0'))\n\n\nclass MockConstantsModule:\n  SINGLE_PATTERN = 'single_pattern'\n  LIST_PATTERN = ['list_pattern1', 'list_pattern2']\n\n\nclass TestResolvePatterns(unittest.TestCase):\n  \"\"\"Test resolve_patterns function.\"\"\"\n\n  def test_no_references(self):\n    patterns = util.resolve_patterns('pattern1;;pattern2', MockConstantsModule)\n    self.assertEqual(patterns, ['pattern1', 'pattern2'])\n\n  def test_single_string_reference(self):\n    patterns = util.resolve_patterns('ref:SINGLE_PATTERN', MockConstantsModule)\n    self.assertEqual(patterns, ['single_pattern'])\n\n  def test_list_reference(self):\n    patterns = util.resolve_patterns('ref:LIST_PATTERN', MockConstantsModule)\n    self.assertEqual(patterns, ['list_pattern1', 'list_pattern2'])\n\n  def test_mixed_patterns_and_references(self):\n    patterns = util.resolve_patterns(\n        'pattern1;;ref:SINGLE_PATTERN;;pattern2;;ref:LIST_PATTERN',\n        MockConstantsModule)\n    self.assertEqual(patterns, [\n        'pattern1', 'single_pattern', 'pattern2', 'list_pattern1',\n        'list_pattern2'\n    ])\n\n  def test_invalid_reference(self):\n    with self.assertRaises(ValueError):\n      util.resolve_patterns('ref:INVALID_PATTERN', MockConstantsModule)\n\n\nclass TestGetOperatorFn(unittest.TestCase):\n  \"\"\"Test get_operator_fn function.\"\"\"\n\n  def test_get_operator_fn(self):\n    self.assertEqual(util.get_operator_fn('eq'), re.match)\n    self.assertEqual(util.get_operator_fn('ne'), re.match)\n    self.assertEqual(util.get_operator_fn('lt'), re.match)\n    self.assertEqual(util.get_operator_fn('le'), re.match)\n    self.assertEqual(util.get_operator_fn('gt'), re.match)\n    self.assertEqual(util.get_operator_fn('ge'), re.match)\n\n  def test_get_operator_fn_invalid(self):\n    with self.assertRaises(ValueError):\n      util.get_operator_fn('invalid')\n\n\nclass TestTemplateFunctions(unittest.TestCase):\n  \"\"\"Test load_template_block and render_template functions.\"\"\"\n\n  def setUp(self):\n    super().setUp()\n    self.mock_env = mock.Mock(spec=Environment)\n    self.mock_get_template = self.mock_env.get_template\n    util.env = self.mock_env\n\n    m = mock.MagicMock()\n    m.__file__ = '/tmp/dummy/path/file.py'\n    self.mock_importlib = self.enterContext(\n        mock.patch('importlib.import_module', return_value=m))\n\n    # Use patch.object to ensure the correct module variable is patched\n    self.mock_step_outcomes = self.enterContext(\n        mock.patch.object(util, 'step_outcomes', ['ok', 'failed']))\n\n  def test_load_template_block(self):\n    template_mock = mock.MagicMock()\n    block_ok_mock = mock.Mock(return_value=['ok_content'])\n    block_failed_mock = mock.Mock(return_value=['failed_content'])\n    template_mock.blocks = {\n        'myblock_ok': block_ok_mock,\n        'myblock_failed': block_failed_mock,\n    }\n    template_mock.new_context.return_value = {}\n    self.mock_get_template.return_value = template_mock\n    result = util.load_template_block('dummy_module', 'dummy_template',\n                                      'myblock')\n    self.assertEqual(result, {'ok': 'ok_content', 'failed': 'failed_content'})\n    self.mock_importlib.assert_called_once_with('dummy_module')\n    self.mock_get_template.assert_called_once_with('dummy_template.jinja')\n    block_ok_mock.assert_called_once_with({})\n    block_failed_mock.assert_called_once_with({})\n\n  def test_render_template(self):\n    mock_template = mock.Mock()\n    self.mock_get_template.return_value = mock_template\n    mock_template.render.return_value = 'rendered_content'\n    result = util.render_template('/tmp/dummy/path', 'template.jinja',\n                                  {'data': 123}, 'p', 's')\n    self.assertEqual(result, 'rendered_content')\n    self.mock_get_template.assert_called_once_with('template.jinja')\n    mock_template.render.assert_called_once_with({\n        'data': 123,\n        'render_block': 'p_s'\n    })\n"
  },
  {
    "path": "gcpdiag/runbook/vertex/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/runbook/vertex/constants.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Constants for Vertex AI Runbooks\"\"\"\n# pylint: disable=unused-wildcard-import, wildcard-import\nfrom gcpdiag.runbook.iam.constants import *\n\nWORKBENCH_INSTANCES_IMAGES_FAMILY = 'workbench-instances'\nWORKBENCH_INSTANCES_IMAGES_PROJECT = 'projects/cloud-notebooks-managed'\nDEEP_LEARNING_VM_IMAGES_PROJECT = 'projects/deeplearning-platform-release'\nWORKBENCH_INSTANCES_UPGRADABILITY_INVALID_STATE_INFO = 'invalid state'\nWORKBENCH_INSTANCES_UPGRADABILITY_CURRENT = 'image are the same'\n"
  },
  {
    "path": "gcpdiag/runbook/vertex/flags.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Vertex AI Runbooks flags\"\"\"\n# pylint: disable=unused-wildcard-import, wildcard-import\nfrom gcpdiag.runbook.iam.flags import *\n\nINSTANCE_NAME = 'instance_name'\n"
  },
  {
    "path": "gcpdiag/runbook/vertex/generalized_steps.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Vertex AI Generalized Runbook Steps\"\"\"\n\nfrom gcpdiag import runbook\nfrom gcpdiag.queries import gce, logs, monitoring, notebooks\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.gce import flags as gce_flags\nfrom gcpdiag.runbook.gce import generalized_steps as gce_gs\nfrom gcpdiag.runbook.vertex import constants, flags\n\n\nclass CheckWorkbenchInstanceCustomScripts(runbook.Step):\n  \"\"\"Check if the Workbench Instance is using custom scripts\n\n  Users have the option to add scripts to a Workbench Instance\n  via the metadata fields. However, scripts may change the\n  default behaviour or install libraries that break dependencies\n  \"\"\"\n\n  template = 'workbench_scripts::custom'\n  project_id: str = ''\n  instance_name: str = ''\n  zone: str = ''\n\n  def execute(self):\n    \"\"\"Check if the Workbench Instance has custom scripts\"\"\"\n    project_id: str = self.project_id or op.get(flags.PROJECT_ID)\n    instance_name: str = self.instance_name or op.get(flags.INSTANCE_NAME)\n    zone: str = self.zone or op.get(flags.ZONE)\n    workbench_instance: notebooks.WorkbenchInstance = notebooks.get_workbench_instance(\n        project_id=project_id, zone=zone, instance_name=instance_name)\n    if (workbench_instance.post_startup_script or\n        workbench_instance.startup_script or\n        workbench_instance.startup_script_url):\n      op.add_uncertain(\n          resource=workbench_instance,\n          reason=op.prep_msg(\n              op.UNCERTAIN_REASON,\n              instance_name=instance_name,\n              post_startup_script=workbench_instance.post_startup_script,\n              startup_script=workbench_instance.startup_script,\n              startup_script_url=workbench_instance.startup_script_url),\n          remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION))\n    else:\n      op.add_ok(resource=workbench_instance,\n                reason=op.prep_msg(op.SUCCESS_REASON,\n                                   instance_name=instance_name))\n\n\nclass CheckWorkbenchInstanceUsingOfficialImage(runbook.Step):\n  \"\"\"Check if the Workbench Instance is using the official images\n\n  Users have the option to create Workbench Instances with any image\n  However, only 'workbench-instances' official images are supported\n  \"\"\"\n\n  template = 'workbench_images::official'\n  project_id: str = ''\n  instance_name: str = ''\n  zone: str = ''\n\n  def execute(self):\n    \"\"\"Check if Workbench Instance VM's boot disk image is one of the official images\"\"\"\n    project_id: str = self.project_id or op.get(flags.PROJECT_ID)\n    instance_name: str = self.instance_name or op.get(flags.INSTANCE_NAME)\n    zone: str = self.zone or op.get(flags.ZONE)\n    gce_instance = gce.get_instance(project_id=project_id,\n                                    zone=zone,\n                                    instance_name=instance_name)\n    gce_instance_boot_disk_image = gce_instance.get_boot_disk_image()\n    if (constants.WORKBENCH_INSTANCES_IMAGES_FAMILY\n        in gce_instance_boot_disk_image and\n        constants.WORKBENCH_INSTANCES_IMAGES_PROJECT\n        in gce_instance_boot_disk_image):\n      op.add_ok(resource=gce_instance,\n                reason=op.prep_msg(\n                    op.SUCCESS_REASON,\n                    instance_name=instance_name,\n                    image_family=constants.WORKBENCH_INSTANCES_IMAGES_FAMILY,\n                    image=gce_instance_boot_disk_image))\n    elif constants.DEEP_LEARNING_VM_IMAGES_PROJECT in gce_instance_boot_disk_image:\n      op.add_uncertain(\n          resource=gce_instance,\n          reason=op.prep_msg(\n              op.UNCERTAIN_REASON,\n              image=gce_instance_boot_disk_image,\n              images_family=constants.DEEP_LEARNING_VM_IMAGES_PROJECT),\n          remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION))\n    else:\n      op.add_failed(\n          resource=gce_instance,\n          reason=op.prep_msg(\n              op.FAILURE_REASON,\n              image=gce_instance_boot_disk_image,\n              images_family=constants.WORKBENCH_INSTANCES_IMAGES_FAMILY),\n          remediation=op.prep_msg(\n              op.FAILURE_REMEDIATION,\n              images_family=constants.WORKBENCH_INSTANCES_IMAGES_FAMILY))\n      # User will need to create a new Workbench Instance\n\n\nclass CheckWorkbenchInstanceIsUsingLatestEnvVersion(runbook.Step):\n  \"\"\"Check if the Workbench Instance is using the latest environment version\n\n  Workbench Instances can be upgraded regularly to have the latest fixes\n  \"\"\"\n\n  template = 'workbench_environment_version::upgradable'\n  project_id: str = ''\n  instance_name: str = ''\n  zone: str = ''\n\n  def execute(self):\n    \"\"\"Check if the Workbench Instance is using the latest environment version\"\"\"\n    project_id: str = self.project_id or op.get(flags.PROJECT_ID)\n    instance_name: str = self.instance_name or op.get(flags.INSTANCE_NAME)\n    zone: str = self.zone or op.get(flags.ZONE)\n    workbench_instance: notebooks.WorkbenchInstance = notebooks.get_workbench_instance(\n        project_id=project_id, zone=zone, instance_name=instance_name)\n    workbench_instance_upgradability: dict = notebooks.workbench_instance_check_upgradability(\n        project_id=project_id, workbench_instance_name=workbench_instance.name)\n    workbench_instance_upgradeable: bool = workbench_instance_upgradability.get(\n        'upgradeable', False)\n    workbench_instance_upgrade_version: str = workbench_instance_upgradability.get(\n        'upgradeVersion', '').upper()\n    workbench_instance_upgrade_info: str = workbench_instance_upgradability.get(\n        'upgradeInfo', '')\n    workbench_instance_upgrade_image: str = workbench_instance_upgradability.get(\n        'upgradeImage', '')\n    op.info(f'instance is upgradeable: {workbench_instance_upgradeable}')\n    op.info(f'instance upgrade info: {workbench_instance_upgrade_info}')\n    if workbench_instance_upgradeable:\n      op.add_failed(\n          resource=workbench_instance,\n          reason=op.prep_msg(\n              op.FAILURE_REASON,\n              instance_name=instance_name,\n              environment_version=workbench_instance.environment_version),\n          remediation=op.prep_msg(\n              op.FAILURE_REMEDIATION,\n              upgrade_version=workbench_instance_upgrade_version,\n              upgrade_image=workbench_instance_upgrade_image))\n    else:\n      if constants.WORKBENCH_INSTANCES_UPGRADABILITY_CURRENT in workbench_instance_upgrade_info:\n        op.add_ok(\n            resource=workbench_instance,\n            reason=op.prep_msg(\n                op.SUCCESS_REASON,\n                instance_name=instance_name,\n                environment_version=workbench_instance.environment_version))\n      elif (constants.WORKBENCH_INSTANCES_UPGRADABILITY_INVALID_STATE_INFO\n            in workbench_instance_upgrade_info and\n            workbench_instance.state != notebooks.StateEnum.STOPPED):\n        op.add_uncertain(resource=workbench_instance,\n                         reason=op.prep_msg(\n                             op.UNCERTAIN_REASON,\n                             instance_name=instance_name,\n                             upgrade_info=workbench_instance_upgrade_info),\n                         remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION))\n      elif not workbench_instance.environment_version:\n        # Environment version is 0 and upgradability False when the instance is new\n        op.add_uncertain(resource=workbench_instance,\n                         reason=op.prep_msg(\n                             op.UNCERTAIN_REASON_ALT1,\n                             instance_name=instance_name,\n                             upgrade_info=workbench_instance_upgrade_info),\n                         remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION_ALT1))\n      else:\n        op.add_uncertain(resource=workbench_instance,\n                         reason=op.prep_msg(\n                             op.UNCERTAIN_REASON_ALT2,\n                             instance_name=instance_name,\n                             upgrade_info=workbench_instance_upgrade_info),\n                         remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION_ALT2))\n\n\nclass CheckWorkbenchInstanceSyslogsJupyterRunningOnPort8080(runbook.Step):\n  \"\"\"Check Jupyter is running on port 127.0.0.1:8080\n\n  Jupyter should always run on port 127.0.0.1:8080\n  for the Workbench Instance to work correctly\n  \"\"\"\n\n  template = 'workbench_jupyter_port::running'\n  project_id: str = ''\n  instance_name: str = ''\n  zone: str = ''\n\n  def execute(self):\n    \"\"\"Verify Jupyter is running on port 127.0.0.1:8080\"\"\"\n    start_time = op.get(flags.START_TIME)\n    end_time = op.get(flags.END_TIME)\n    project_id: str = self.project_id or op.get(flags.PROJECT_ID)\n    instance_name: str = self.instance_name or op.get(flags.INSTANCE_NAME)\n    zone: str = self.zone or op.get(flags.ZONE)\n    workbench_instance: notebooks.WorkbenchInstance = notebooks.get_workbench_instance(\n        project_id=project_id, zone=zone, instance_name=instance_name)\n    filter_str = r'''severity=INFO\n                      AND\n                      resource.type=\"gce_instance\"\n                      AND\n                      log_name=~\"projects\\/{project_id}\\/logs\\/serialconsole.googleapis.com.*\"\n                      AND\n                      labels.\"compute.googleapis.com/resource_name\"=\"{instance_name}\"\n                      AND\n                      textPayload=~\"ServerApp.*Jupyter Server.*running at.*\"'''.format(\n        project_id=project_id, instance_name=instance_name)\n    serial_log_entries_jupyter_running = logs.realtime_query(\n        project_id=project_id,\n        filter_str=filter_str,\n        start_time=start_time,\n        end_time=end_time)\n    if serial_log_entries_jupyter_running:\n      op.info(\n          'Jupyter is running! Verifying if it\\'s running on port 127.0.0.1:8080.'\n      )\n      filter_str = r'''severity=INFO\n                    AND\n                    resource.type=\"gce_instance\"\n                    AND\n                    log_name=~\"projects\\/{project_id}\\/logs\\/serialconsole.googleapis.com.*\"\n                    AND\n                    labels.\"compute.googleapis.com/resource_name\"=\"{instance_name}\"\n                    AND NOT\n                    textPayload=~\"ServerApp.*localhost:8080\\/lab\"\n                    AND\n                    textPayload=~\"ServerApp.*localhost:[0-9]{{4}}\\/lab\"'''.format(\n          project_id=project_id, instance_name=instance_name)\n      serial_log_entries_jupyter_port = logs.realtime_query(\n          project_id=project_id,\n          filter_str=filter_str,\n          start_time=start_time,\n          end_time=end_time)\n      if serial_log_entries_jupyter_port:\n        #User will need to fix their instance o create a new one\n        op.add_failed(resource=workbench_instance,\n                      reason=op.prep_msg(op.FAILURE_REASON_ALT1,\n                                         instance_name=instance_name),\n                      remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n      else:\n        op.add_ok(resource=workbench_instance,\n                  reason=op.prep_msg(op.SUCCESS_REASON,\n                                     instance_name=instance_name))\n    else:\n      #User needs to make sure their instance is not stopped to get logs\n      op.add_failed(resource=workbench_instance,\n                    reason=op.prep_msg(op.FAILURE_REASON,\n                                       instance_name=instance_name),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n\n\nclass CheckWorkbenchInstancePerformance(runbook.CompositeStep):\n  \"\"\"Checks performance of a Workbench Instance by evaluating its memory, CPU, and disk utilization.\n\n  This composite diagnostic step sequentially checks for high memory utilization, high disk\n  utilization, and CPU performance issues. It adds specific child steps designed to identify\n  and report potential performance bottlenecks that could impact the instance's operation.\n  \"\"\"\n\n  project_id: str = ''\n  instance_name: str = ''\n  zone: str = ''\n\n  def execute(self):\n    \"\"\"Evaluating Workbench Instance Compute Engine VM memory, CPU, and disk performance.\"\"\"\n    within_hours = 8\n    within_str = 'within %dh, d\\'%s\\'' % (within_hours,\n                                          monitoring.period_aligned_now(5))\n    project_id: str = self.project_id or op.get(flags.PROJECT_ID)\n    instance_name: str = self.instance_name or op.get(flags.INSTANCE_NAME)\n    zone: str = self.zone or op.get(flags.ZONE)\n    op.put(gce_flags.PROJECT_ID, project_id)\n    op.put(gce_flags.INSTANCE_NAME, instance_name)\n    op.put(gce_flags.ZONE, zone)\n    ops_agent_query = monitoring.query(\n        op.get(flags.PROJECT_ID), \"\"\"\n              fetch gce_instance\n              | metric 'agent.googleapis.com/agent/uptime'\n              | filter (metadata.system_labels.name == '{}')\n              | align rate(5m)\n              | every 5m\n              | {}\n            \"\"\".format(op.get(gce_flags.INSTANCE_NAME), within_str))\n    if ops_agent_query:\n      op.info(\n          'Runbook will use ops agent metrics for VM performance investigation')\n\n    vm_memory_utilization = gce_gs.HighVmMemoryUtilization()\n    vm_memory_utilization.project_id = project_id\n    vm_memory_utilization.zone = zone\n    vm_memory_utilization.instance_name = instance_name\n\n    vm_disk_utilization = gce_gs.HighVmDiskUtilization()\n    vm_disk_utilization.project_id = project_id\n    vm_disk_utilization.zone = zone\n    vm_disk_utilization.instance_name = instance_name\n\n    vm_cpu_utilization = gce_gs.HighVmCpuUtilization()\n    vm_cpu_utilization.project_id = project_id\n    vm_cpu_utilization.zone = zone\n    vm_cpu_utilization.instance_name = instance_name\n\n    self.add_child(child=vm_memory_utilization)\n    self.add_child(child=vm_disk_utilization)\n    self.add_child(child=vm_cpu_utilization)\n\n\nclass CheckWorkbenchInstanceExternalIpDisabled(runbook.Step):\n  \"\"\"Check if the Workbench Instance has external IP disabled\n\n  If the instance has external IP disabled, user must configure\n  Private networking correctly\n  \"\"\"\n\n  template = 'workbench_ip::disabled'\n  project_id: str = ''\n  instance_name: str = ''\n  zone: str = ''\n\n  def execute(self):\n    \"\"\"Check if the Workbench Instance has external IP disabled\"\"\"\n    project_id: str = self.project_id or op.get(flags.PROJECT_ID)\n    instance_name: str = self.instance_name or op.get(flags.INSTANCE_NAME)\n    zone: str = self.zone or op.get(flags.ZONE)\n    workbench_instance: notebooks.WorkbenchInstance = notebooks.get_workbench_instance(\n        project_id=project_id, zone=zone, instance_name=instance_name)\n    if workbench_instance.disable_public_ip:\n      op.add_uncertain(resource=workbench_instance,\n                       reason=op.prep_msg(op.UNCERTAIN_REASON,\n                                          instance_name=instance_name,\n                                          network=workbench_instance.network,\n                                          subnetwork=workbench_instance.subnet),\n                       remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION))\n    else:\n      op.add_ok(resource=workbench_instance,\n                reason=op.prep_msg(op.SUCCESS_REASON,\n                                   instance_name=instance_name))\n"
  },
  {
    "path": "gcpdiag/runbook/vertex/generalized_steps_test.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"TODO: String doc\"\"\"\n"
  },
  {
    "path": "gcpdiag/runbook/vertex/snapshots/workbench_instance_stuck_in_provisioning.txt",
    "content": "instance_name=notebooks2instance-provisioning-stuck,project_id=gcpdiag-notebooks2-aaaa,zone=us-\nwest1-a\n\nvertex/workbench-instance-stuck-in-provisioning: Runbook to Troubleshoot Issue: Vertex AI Workbench Instance Stuck in Provisioning State\n\n  This runbook investigates root causes for the Workbench Instance to be stuck in provisioning state\n\n  Areas Examined:\n\n  - Workbench Instance State: Checks the instance's current state ensuring that it is\n    stuck in provisioning status and not stopped or active.\n\n  - Workbench Instance Compute Engine VM Boot Disk Image: Checks if the instance has been created\n    with a custom container, the official 'workbench-instances' images, deep learning VMs images,\n    or unsupported images that might cause the instance to be stuck in provisioning state.\n\n  - Workbench Instance Custom Scripts: Checks if the instance is not using custom scripts that may\n    affect the default configuration of the instance by changing the Jupyter port or breaking\n    dependencies that might cause the instance to be stuck in provisioning state.\n\n  - Workbench Instance Environment Version: Checks if the instance is using the latest environment\n    version by checking its upgradability. Old versions sometimes are the root cause for the\n    instance to be stuck in provisioning state.\n\n  - Workbench Instance Compute Engine VM Performance: Checks the VM's current performance, ensuring\n    that it is not impaired by high CPU usage, insufficient memory, or disk space issues that might\n    disrupt normal operations.\n\n  - Workbench Instance Compute Engine Serial Port Logging: Checks if the instance has serial port\n    logs which can be analyzed to ensure Jupyter is running on port 127.0.0.1:8080\n    which is mandatory.\n\n  - Workbench Instance Compute Engine SSH and Terminal access: Checks if the instance's\n    compute engine vm is running so the user can ssh and open a terminal to check for space\n    usage in 'home/jupyter'. If no space is left, that may cause the instance to be stuck\n    in provisioning state.\n\n  - Workbench Instance External IP Disabled: Checks if the external IP disabled. Wrong networking\n    configurations may cause the instance to be stuck in provisioning state.\n  \n[START]: Sets values to be used and get resources from Notebooks and GCE APIs\n[INFO]: project id: gcpdiag-notebooks2-aaaa, project number: 12340012\n[INFO]: product: vertex workbench instances\n[INFO]: instance name parameter: notebooks2instance-provisioning-stuck\n[INFO]: instance zone parameter: us-west1-a\n[INFO]: --- Workbench Instance ---\n[INFO]: instance name: projects/gcpdiag-notebooks2-aaaa/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck\n[INFO]: instance state: PROVISIONING\n[INFO]: instance environment version: 0\n[INFO]: instance compute account: 12340012-compute@developer.gserviceaccount.com\n[INFO]: instance network: https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/global/networks/wbi-test-default\n[INFO]: instance subnetwork: https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/regions/us-west1/subnetworks/wbi-test-default\n[INFO]: instance public ip disabled: True\n[INFO]: instance metadata disable-mixer: True\n[INFO]: instance metadata serial-port-logging-enable:True\n[INFO]: instance metadata post-startup-script: #! /bin/bash\n[INFO]: instance metadata startup-script: \n[INFO]: instance metadata startup-script-url: \n[INFO]: instance metadata report-event-health: True\n[INFO]: instance compute engine vm name: notebooks2instance-provisioning-stuck\n[INFO]: instance compute engine vm is running: True\n[INFO]: instance is upgradeable: False\n[INFO]: instance upgrade info: Current and latest available image are the same\n[INFO]: --- Workbench Instance Health State ---\n[INFO]: instance health - state: HEALTH_STATE_UNSPECIFIED\n[INFO]: instance health - jupyterlab status healthy:False\n[INFO]: instance health - jupyterlab api status healthy:False\n[INFO]: instance health - notebooks api dns healthy:False\n[INFO]: instance health - proxy registration dns healthy:False\n[INFO]: instance health - system healthy:False\n[INFO]: instance health - docker status healthy:False\n[INFO]: instance state: PROVISIONING\n\n   - gcpdiag-notebooks2-aaaa/us-west1-a/notebooks2instance-provisioning-stuck [OK]\n     [REASON]\n     OK! Workbench Instance notebooks2instance-provisioning-stuck is in PROVISIONING, STARTING or INITIALIZING state.\n\n[AUTOMATED STEP]: Checking if the Workbench Instance is using a custom container.\n\n   - gcpdiag-notebooks2-aaaa/us-west1-a/notebooks2instance-provisioning-stuck [OK]\n     [REASON]\n     OK! Workbench Instance notebooks2instance-provisioning-stuck is not using a custom container.\n\n[AUTOMATED STEP]: Verify Workbench Instance Compute Engine VM's boot disk image is part of the official family of images\n\n   - gcpdiag-notebooks2-aaaa/notebooks2instance-provisioning-stuck        [UNCERTAIN]\n     [REASON]\n     image: https://www.googleapis.com/compute/v1/projects/deeplearning-platform-release/global/images/tf-2-11-cu113-notebooks-v20240613-debian-11-py310\n     'projects/deeplearning-platform-release' images might work with Workbench Instances, but are unsupported [1]\n     [1] <https://cloud.google.com/vertex-ai/docs/workbench/instances/introduction#limitations>\n\n     [REMEDIATION]\n     Officially supported images are found in the Google Cloud Console:\n     Vertex AI Workbench UI > Instances > Create form > Advanced > Environment > Previous versions dropdown.\n\n[AUTOMATED STEP]: Verify Workbench Instance has custom post-startup or startup scripts\n\n   - gcpdiag-notebooks2-aaaa/us-west1-a/notebooks2instance-provisioning-stuck [UNCERTAIN]\n     [REASON]\n     Workbench Instance notebooks2instance-provisioning-stuck has custom post-startup or startup scripts:\n     - post-startup-script: #! /bin/bash\n     - startup-script: \n     - startup-script-url: \n\n     [REMEDIATION]\n     Scripts must ensure:\n     - Jupyter runs on port 127.0.0.1:8080\n     - If packages are installed they should not add breaking changes to the Jupyter configuration\n\n[AUTOMATED STEP]: Verify Workbench Instance is using the latest environment version\n[INFO]: instance is upgradeable: False\n[INFO]: instance upgrade info: Current and latest available image are the same\n\n   - gcpdiag-notebooks2-aaaa/us-west1-a/notebooks2instance-provisioning-stuck [OK]\n     [REASON]\n     OK! Workbench Instance notebooks2instance-provisioning-stuck is using the latest environment version M0\n\n[COMPOSITE STEP]: Evaluating Workbench Instance Compute Engine VM memory, CPU, and disk performance.\n[INFO]: Runbook will use ops agent metrics for VM performance investigation\n[AUTOMATED STEP]: Verify VM memory utilization is within optimal levels.\n\n   - gcpdiag-notebooks2-aaaa/notebooks2instance-provisioning-stuck        [FAIL]\n     [REASON]\n     Memory utilization on this VM has reached levels that may compromise its VM application performance.\n\n     [REMEDIATION]\n     Elevated memory usage can result in slow, unresponsive, or terminated applications.\n     Enhance the VM's memory capacity by changing to a machine type with more memory.\n\n     Consult the following documentation for guidance:\n\n     - Changing machine type:\n       <https://cloud.google.com/compute/docs/instances/changing-machine-type-of-stopped-instance#gcloud>\n\n     Additionally, analyze Compute Engine observability metrics to pinpoint high-usage processes:\n     <https://cloud.google.com/compute/docs/instances/observe-monitor-vms#memory_utilization>\n\n     If SSH is unavailable, connect via the serial console to mitigate the issue:\n     <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-using-serial-console>\n\n[AUTOMATED STEP]: Verify memory related errors in VM serial logs.\n\n   - gcpdiag-notebooks2-aaaa/notebooks2instance-provisioning-stuck        [UNCERTAIN]\n     [REASON]\n     Unable to investigate the high memory utilization error logs, likely due to the absence of logs.\n     However, this does not eliminate the possibility of high memory usage.\n\n     Manual verification of memory utilization on the Guest OS is recommended as a potential cause.\n\n     [REMEDIATION]\n\n     1. Manually investigate memory usage by accessing the Guest OS:\n        - Identify processes with consistently high memory consumption using `top` (press \"M\") or `ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head -n 5`.\n        - Focus on processes with recent spikes or consistently high memory usage.\n        - If SSH access is unavailable, troubleshoot via the serial console:\n          <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-using-serial-console>\n\n     2. Review recent application or configuration changes:\n        - Investigate if recent deployments, updates, or configuration changes correlate with increased memory usage.\n\n     3. Resolve identified bottlenecks:\n        - For applications causing excessive memory usage, optimize their configuration or update them. Explore alternatives if optimization is insufficient.\n        - Evaluate scaling up resources if high memory usage results from legitimate application demands.\n\n     4. Increase instance memory if necessary:\n        - Stop the VM and change its machine type:\n          <https://cloud.google.com/compute/docs/instances/changing-machine-type-of-stopped-instance#gcloud>\n        - Consult the machine type documentation to select an appropriate configuration:\n          <https://cloud.google.com/compute/docs/machine-types>\n\n     **Note:** Non-Google provided application-specific issues may fall outside the support scope. Collaborate with relevant application teams for further investigation. Refer to the Google Cloud Platform support policy for details, including out-of-scope items:\n\n     - Support and maintenance policy: <https://cloud.google.com/compute/docs/images/support-maintenance-policy#support-scope>\n     - Out-of-scope items: <https://cloud.google.com/compute/docs/images/support-maintenance-policy#out-of-scope_for_support>\n\n[AUTOMATED STEP]: Verify VM's boot disk space utilization is within optimal levels.\n\n   - gcpdiag-notebooks2-aaaa/notebooks2instance-provisioning-stuck        [FAIL]\n     [REASON]\n     Disk utilization on this VM's boot disk is critically high,\n     potentially affecting application performance.\n\n     [REMEDIATION]\n     To mitigate high disk usage, consider expanding the VM's boot disk capacity.\n     This action can help avoid performance issues and ensure smoother SSH connections.\n\n     Consult the following guide to increase disk size:\n     <https://cloud.google.com/compute/docs/disks/resize-persistent-disk#increase_the_size_of_a_disk>\n\n[AUTOMATED STEP]: Verify VM CPU utilization is within optimal levels.\n\n   - gcpdiag-notebooks2-aaaa/notebooks2instance-provisioning-stuck        [FAIL]\n     [REASON]\n     CPU utilization on this VM has surpassed recommended operational levels,\n     which may affect its performance and SSH connectivity.\n\n     [REMEDIATION]\n     Excessive CPU usage can lead to performance bottlenecks. Resizing the VM to a machine type with higher CPU capabilities may resolve the issue.\n\n     Consult the following documentation for guidance:\n\n     - Stopping a VM: <https://cloud.google.com/compute/docs/instances/stop-start-instance>\n     - Resizing a VM: <https://cloud.google.com/compute/docs/instances/changing-machine-type-of-stopped-instance#gcloud>\n\n     Additionally, analyze Compute Engine observability metrics to pinpoint high-usage processes:\n\n     - Accessing VM observability metrics:\n       <https://cloud.google.com/compute/docs/instances/observe-monitor-vms#access_vm_observability_metrics>\n     - Analyzing process utilization:\n       <https://cloud.google.com/compute/docs/instances/observe-monitor-vms#process_utilization>\n\n     If SSH is unavailable, connect via the serial console to stop offending processes:\n     <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-using-serial-console>\n\n[GATEWAY]: Decision point to investigate Serial Port Logs\n[COMPOSITE STEP]: Check if user is able to SSH to the Workbench Instance Compute Engine VM\n[INFO]: Workbench Instance Compute Engine VM is Running!\n\n   - gcpdiag-notebooks2-aaaa/notebooks2instance-provisioning-stuck        [OK]\n     [REASON]\n     OK! User can SHH and open a terminal in the Workbench Instance notebooks2instance-provisioning-stuck's Compute Engine VM.\n\n[AUTOMATED STEP]: Check if Jupyter space in \"home/jupyter\" is below 85%\n[INFO]: In the Workbench Instance Compute Engine VM terminal run \"df\". Verify \"home/jupyter\" used space is below 85%\n\n   - gcpdiag-notebooks2-aaaa/notebooks2instance-provisioning-stuck        [OK]\n     [REASON]\n     OK! Workbench Instance notebooks2instance-provisioning-stuck's \"/home/jupyter\" space usage is below 85%\n\n[AUTOMATED STEP]: Verify Workbench Instance has external IP disabled\n\n   - gcpdiag-notebooks2-aaaa/us-west1-a/notebooks2instance-provisioning-stuck [UNCERTAIN]\n     [REASON]\n     Workbench Instance notebooks2instance-provisioning-stuck has external IP disabled.\n\n     - network: https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/global/networks/wbi-test-default\n     - subnetwork: https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/regions/us-west1/subnetworks/wbi-test-default\n     This may cause networking issues if configuration was not done correctly.\n\n     [REMEDIATION]\n     Follow the public documentation to configure Private Networking for a Workbench Instance [1] [2] [3] [4]\n\n     [1] <https://cloud.google.com/vertex-ai/docs/workbench/instances/create#network-options>\n     [2] <https://cloud.google.com/vpc/docs/access-apis-external-ip#requirements>\n     [3] <https://cloud.google.com/vpc/docs/configure-private-google-access>\n     [4] <https://cloud.google.com/vpc/docs/configure-private-google-access#requirements>\n\n[END]: Check if the instance is now in ACTIVE state\n[INFO]: instance state: PROVISIONING\n\n   - gcpdiag-notebooks2-aaaa/us-west1-a/notebooks2instance-provisioning-stuck [FAIL]\n     [REASON]\n     Workbench Instance notebooks2instance-provisioning-stuck still in PROVISIONING, STARTING or INITIALIZING state.\n\n     [REMEDIATION]\n     Restart the instance. If the issue persists:\n\n     1. Recover data by diagnosing the instance with the --enable-copy-home-files [1]\n     2. Inspect the diagnostics output logs to find issues\n     3. Create a new Instance and migrate your data [2]\n\n     [1] <https://cloud.google.com/sdk/gcloud/reference/workbench/instances/diagnose>\n     [2] <https://cloud.google.com/vertex-ai/docs/workbench/instances/migrate>\n\n[INFO]: Before reaching out to Google Cloud Support: \n1. Thoroughly investigate the issue with the most appropriate team within your organization. Many issues can be resolved internally and fall within the scope of your operational responsibilities:https://cloud.google.com/architecture/framework/security/shared-responsibility-shared-fate\n\n2. If your internal investigation suggests that the issue is related to the Google Cloud Platform and requires intervention by Google engineers, please contact Google Cloud Support for further assistance.\n\n3. View our Google Cloud Service Health Dashboard to know what issues are already knowand currently being resolved:\nhttps://cloud.google.com/support/docs/customer-care-procedures#view_known_issues\n\n4. If you still need further assistance contact customer care:\nhttps://cloud.google.com/support/docs/customer-care-procedures#contact_customer_care\n\nRecommended Action: When submitting a support ticket, please include the generated report to facilitate a quicker resolution by the Google Cloud support team.For more information on how to get the best out of our support services visit:\nhttps://cloud.google.com/support/docs/customer-care-procedures\n\n\n\n\n"
  },
  {
    "path": "gcpdiag/runbook/vertex/templates/workbench_compute.jinja",
    "content": "{% block ssh_success_reason %}\nOK! User can SHH and open a terminal in the Workbench Instance {instance_name}'s Compute Engine VM.\n{% endblock ssh_success_reason %}\n\n{% block ssh_uncertain_reason %}\nWorkbench Instance {instance_name}'s Compute Engine VM is not running.\nStatus: {status}\nYou cannot ssh to use terminal access and check for certain issues in the VM.\nFor example, space in \"/home/jupyter\" directory should remain below 85%\n{% endblock ssh_uncertain_reason %}\n\n{% block ssh_uncertain_remediation %}\nTry restarting your instance or start your instance's VM via Compute Engine\n{% endblock ssh_uncertain_remediation %}\n\n{% block ssh_uncertain_reason_a1 %}\nWithout terminal access to the Workbench Instance {instance_name}'s Compute Engine VM you cannot check for certain issues.\nFor example, space in \"/home/jupyter\" should remain below 85%\n{% endblock ssh_uncertain_reason_a1 %}\n\n{% block ssh_uncertain_remediation_a1 %}\nConfigure your instance to allow SSH access or contact the Compute Engine administrator.\n{% endblock ssh_uncertain_remediation_a1 %}\n"
  },
  {
    "path": "gcpdiag/runbook/vertex/templates/workbench_container.jinja",
    "content": "{% block custom_success_reason %}\nOK! Workbench Instance {instance_name} is not using a custom container.\n{% endblock custom_success_reason %}\n\n{% block custom_uncertain_reason %}\nWARNING: This runbook may not be applicable for Workbench Instances created with a custom container.\n{% endblock custom_uncertain_reason %}\n\n{% block custom_uncertain_remediation %}\nFollow the documentation to create a Workbench Instance with a custom container [1]\n[1] <https://cloud.google.com/vertex-ai/docs/workbench/instances/create-custom-container>\n{% endblock custom_uncertain_remediation %}\n"
  },
  {
    "path": "gcpdiag/runbook/vertex/templates/workbench_environment_version.jinja",
    "content": "{% block upgradable_step_name %}\nVerify Workbench Instance is using the latest environment version\n{% endblock upgradable_step_name %}\n\n{% block upgradable_success_reason %}\nOK! Workbench Instance {instance_name} is using the latest environment version M{environment_version}\n{% endblock upgradable_success_reason %}\n\n{% block upgradable_uncertain_reason %}\nWorkbench Instance {instance_name} should be in STOPPED state to check its upgradability.\nUpgradability info: {upgrade_info}\n{% endblock upgradable_uncertain_reason %}\n\n{% block upgradable_uncertain_remediation %}\nStop the instance.\n{% endblock upgradable_uncertain_remediation %}\n\n{% block upgradable_uncertain_reason_a1 %}\nWorkbench Instance {instance_name} has not been assigned an environment version yet.\nUpgradability info: {upgrade_info}\n{% endblock upgradable_uncertain_reason_a1 %}\n\n{% block upgradable_uncertain_remediation_a1 %}\nMake sure instance was created with the latest environment version.\n{% endblock upgradable_uncertain_remediation_a1 %}\n\n{% block upgradable_uncertain_reason_a2 %}\nWorkbench Instance {instance_name} upgradability info:\n{upgrade_info}\n{% endblock upgradable_uncertain_reason_a2 %}\n\n{% block upgradable_uncertain_remediation_a2 %}\nMake sure instance has the latest environment version.\n{% endblock upgradable_uncertain_remediation_a2 %}\n\n{% block upgradable_failure_reason %}\nWorkbench Instance {instance_name} is using a previous environment version M{environment_version}\n{% endblock upgradable_failure_reason %}\n\n{% block upgradable_failure_remediation %}\nUpgrade the instance to use the latest version {upgrade_version} which has the latest updates and fixes [1]\nUpgrade version image: {upgrade_image}\nRemember to backup your data before an upgrade.\n[1] <https://cloud.google.com/vertex-ai/docs/workbench/instances/upgrade>\n{% endblock upgradable_failure_remediation %}\n"
  },
  {
    "path": "gcpdiag/runbook/vertex/templates/workbench_images.jinja",
    "content": "{% block official_step_name %}\nVerify Workbench Instance Compute Engine VM's boot disk image is part of the official family of images\n{% endblock official_step_name %}\n\n{% block official_success_reason %}\nOK! Workbench Instance {instance_name} is using an official '{image_family}' image: {image}\n{% endblock official_success_reason %}\n\n{% block official_uncertain_reason %}\nimage: {image}\n'{images_family}' images might work with Workbench Instances, but are unsupported [1]\n[1] <https://cloud.google.com/vertex-ai/docs/workbench/instances/introduction#limitations>\n{% endblock official_uncertain_reason %}\n\n{% block official_uncertain_remediation %}\nOfficially supported images are found in the Google Cloud Console:\nVertex AI Workbench UI > Instances > Create form > Advanced > Environment > Previous versions dropdown.\n{% endblock official_uncertain_remediation %}\n\n{% block official_failure_reason %}\nimage: {image}\nimages without '{images_family}' text in the image name are not supported but might work with Workbench Instances [1]\n[1] <https://cloud.google.com/vertex-ai/docs/workbench/instances/introduction#limitations>\n{% endblock official_failure_reason %}\n\n{% block official_failure_remediation %}\nUsers are responsible for customizing unsupported images or custom containers\nCreate a Workbench Instance with the official '{images_family}' family of images.\nOfficially supported images are found in the Google Cloud Console:\nVertex AI Workbench UI > Instances > Create form > Advanced > Environment > Previous versions dropdown.\nYou may also follow the documentation [1] to use Custom Containers\n[1] <https://cloud.google.com/vertex-ai/docs/workbench/instances/create-custom-container>\n{% endblock official_failure_remediation %}\n"
  },
  {
    "path": "gcpdiag/runbook/vertex/templates/workbench_ip.jinja",
    "content": "{% block disabled_step_name %}\nVerify Workbench Instance has external IP disabled\n{% endblock disabled_step_name %}\n\n{% block disabled_success_reason %}\nOK! Workbench Instance {instance_name} has an external IP\n{% endblock disabled_success_reason %}\n\n{% block disabled_uncertain_reason %}\nWorkbench Instance {instance_name} has external IP disabled.\n\n- network: {network}\n- subnetwork: {subnetwork}\nThis may cause networking issues if configuration was not done correctly.\n{% endblock disabled_uncertain_reason %}\n\n{% block disabled_uncertain_remediation %}\nFollow the public documentation to configure Private Networking for a Workbench Instance [1] [2] [3] [4]\n\n[1] <https://cloud.google.com/vertex-ai/docs/workbench/instances/create#network-options>\n[2] <https://cloud.google.com/vpc/docs/access-apis-external-ip#requirements>\n[3] <https://cloud.google.com/vpc/docs/configure-private-google-access>\n[4] <https://cloud.google.com/vpc/docs/configure-private-google-access#requirements>\n{% endblock disabled_uncertain_remediation %}\n"
  },
  {
    "path": "gcpdiag/runbook/vertex/templates/workbench_jupyter_port.jinja",
    "content": "{% block running_step_name %}\nVerify Workbench Instance Jupyter is running on port 127.0.0.1:8080\n{% endblock running_step_name %}\n\n{% block running_success_reason %}\nOK! Workbench Instance {instance_name} syslogs indicate Jupyter is running on port 127.0.0.1:8080\n{% endblock running_success_reason %}\n\n{% block running_failure_reason %}\nWorkbench Instance {instance_name} syslogs indicate Jupyter is NOT running on port 127.0.0.1:8080\n{% endblock running_failure_reason %}\n\n{% block running_failure_reason_a1 %}\nWorkbench Instance {instance_name} syslogs indicate Jupyter is running on a port different to 127.0.0.1:8080\n{% endblock running_failure_reason_a1 %}\n\n{% block running_failure_remediation %}\nIf the instance is stopped, start it and rerun this check.\nYou may also need to extend the logging query start and end times.\nOnly port 8080 is supported. Installed extensions, packages or custom scripts may cause the port to change.\n\n1. Try following documentation [1] [2] [3]\n2. If it doesn't work, recover data by diagnosing the instance with the --enable-copy-home-files [4]\n3. Create a new Instance and migrate your data [5]\n\n[1] <https://cloud.google.com/vertex-ai/docs/general/troubleshooting-workbench?component=any#verify-jupyter-service>\n[2] <https://cloud.google.com/vertex-ai/docs/general/troubleshooting-workbench?component=any#verify-jupyter-internal-api>\n[3] <https://cloud.google.com/vertex-ai/docs/general/troubleshooting-workbench?component=any#restart-jupyter-service>\n[4] <https://cloud.google.com/sdk/gcloud/reference/workbench/instances/diagnose>\n[5] <https://cloud.google.com/vertex-ai/docs/workbench/instances/migrate>\n{% endblock running_failure_remediation %}\n"
  },
  {
    "path": "gcpdiag/runbook/vertex/templates/workbench_jupyter_space.jinja",
    "content": "{% block available_success_reason %}\nOK! Workbench Instance {instance_name}'s \"/home/jupyter\" space usage is below 85%\n{% endblock available_success_reason %}\n\n{% block available_failure_reason %}\nWorkbench Instance {instance_name}'s space in \"/home/jupyter\" should remain below 85%\nThis will allow the instance to start correctly.\n{% endblock available_failure_reason %}\n\n{% block available_failure_remediation %}\nDelete large files in \"/home/jupyter\" and restart the instance.\nYou may also run the following command to list large cache files and then manually delete them.\n- \"du -h /home/jupyter/.cache | sort -h\"\n{% endblock available_failure_remediation %}\n"
  },
  {
    "path": "gcpdiag/runbook/vertex/templates/workbench_scripts.jinja",
    "content": "{% block custom_step_name %}\nVerify Workbench Instance has custom post-startup or startup scripts\n{% endblock custom_step_name %}\n\n{% block custom_success_reason %}\nOK! Workbench Instance {instance_name} is not using custom post-startup or startup scripts.\n{% endblock custom_success_reason %}\n\n{% block custom_uncertain_reason %}\nWorkbench Instance {instance_name} has custom post-startup or startup scripts:\n- post-startup-script: {post_startup_script}\n- startup-script: {startup_script}\n- startup-script-url: {startup_script_url}\n{% endblock custom_uncertain_reason %}\n\n{% block custom_uncertain_remediation %}\nScripts must ensure:\n- Jupyter runs on port 127.0.0.1:8080\n- If packages are installed they should not add breaking changes to the Jupyter configuration\n{% endblock custom_uncertain_remediation %}\n"
  },
  {
    "path": "gcpdiag/runbook/vertex/templates/workbench_state.jinja",
    "content": "{% block provisioning_stuck_success_reason %}\nOK! Workbench Instance {instance_name} is already in ACTIVE state.\nWARNING: This runbook is intended for instances that are stuck in PROVISIONING state.\n{% endblock provisioning_stuck_success_reason %}\n\n{% block provisioning_stuck_success_reason_a1 %}\nOK! Workbench Instance {instance_name} is in PROVISIONING, STARTING or INITIALIZING state.\n{% endblock provisioning_stuck_success_reason_a1 %}\n\n{% block provisioning_stuck_success_reason_a2 %}\nOK! Workbench Instance {instance_name} is already in ACTIVE state.\nThe issue is solved!!!\n{% endblock provisioning_stuck_success_reason_a2 %}\n\n{% block provisioning_stuck_failure_reason %}\nWorkbench Instance {instance_name} not in PROVISIONING, STARTING or INITIALIZING state.\n{% endblock provisioning_stuck_failure_reason %}\n\n{% block provisioning_stuck_failure_remediation %}\nTry to start the instance.\n{% endblock provisioning_stuck_failure_remediation %}\n\n{% block provisioning_stuck_uncertain_reason %}\nWorkbench Instance {instance_name} not in PROVISIONING, STARTING or INITIALIZING state.\n{% endblock provisioning_stuck_uncertain_reason %}\n\n{% block provisioning_stuck_uncertain_remediation %}\nTry to start the instance.\n{% endblock provisioning_stuck_uncertain_remediation %}\n\n{% block provisioning_stuck_failure_reason_a1 %}\nWorkbench Instance {instance_name} still in PROVISIONING, STARTING or INITIALIZING state.\n{% endblock provisioning_stuck_failure_reason_a1 %}\n\n{% block provisioning_stuck_failure_remediation_a1 %}\nRestart the instance. If the issue persists:\n\n1. Recover data by diagnosing the instance with the --enable-copy-home-files [1]\n2. Inspect the diagnostics output logs to find issues\n3. Create a new Instance and migrate your data [2]\n\n[1] <https://cloud.google.com/sdk/gcloud/reference/workbench/instances/diagnose>\n[2] <https://cloud.google.com/vertex-ai/docs/workbench/instances/migrate>\n{% endblock provisioning_stuck_failure_remediation_a1 %}\n"
  },
  {
    "path": "gcpdiag/runbook/vertex/templates/workbench_system_logs.jinja",
    "content": "{% block enabled_success_reason %}\nOK! Workbench Instance {instance_name} Serial Port Logging is enabled and instance is initializing.\nChecking Workbench Instance syslogs for issues\n{% endblock enabled_success_reason %}\n\n{% block enabled_uncertain_reason %}\nWorkbench Instance {instance_name} Serial Port Logging is disabled by org constraint '{constraint}'\n{% endblock enabled_uncertain_reason %}\n\n{% block enabled_uncertain_remediation %}\nRemove org constraint '{constraint}' to analyze Workbench Instance system serial port logs.\n{% endblock enabled_uncertain_remediation %}\n\n{% block enabled_uncertain_reason_a1 %}\nWorkbench Instance {instance_name} Serial Port Logging is disabled by metadata '{metadata}': '{metadata_value}'\n{% endblock enabled_uncertain_reason_a1 %}\n\n{% block enabled_uncertain_remediation_a1 %}\nSet '{metadata}' to 'True' to analyze Workbench Instance system serial port logs.\n{% endblock enabled_uncertain_remediation_a1 %}\n\n{% block enabled_uncertain_reason_a2 %}\nWorkbench Instance {instance_name} not in PROVISIONING, STARTING or INITIALIZING state.\nCurrent state: {state}\n{% endblock enabled_uncertain_reason_a2 %}\n\n{% block enabled_uncertain_remediation_a2 %}\nTry to start the instance.\n{% endblock enabled_uncertain_remediation_a2 %}\n"
  },
  {
    "path": "gcpdiag/runbook/vertex/workbench_instance_stuck_in_provisioning.py",
    "content": "#\n# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Runbook to Troubleshoot Issue: Vertex AI Workbench Instance Stuck in Provisioning State\"\"\"\nfrom datetime import datetime\n\nfrom gcpdiag import runbook\nfrom gcpdiag.queries import crm, gce, notebooks, orgpolicy\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.vertex import flags\nfrom gcpdiag.runbook.vertex import generalized_steps as vertex_gs\n\nPROVISIONING_STATES = [\n    notebooks.StateEnum.PROVISIONING, notebooks.StateEnum.STARTING,\n    notebooks.StateEnum.INITIALIZING\n]\n\n\nclass WorkbenchInstanceStuckInProvisioning(runbook.DiagnosticTree):\n  \"\"\"Runbook to Troubleshoot Issue: Vertex AI Workbench Instance Stuck in Provisioning State\n\n  This runbook investigates root causes for the Workbench Instance to be stuck in provisioning state\n\n  Areas Examined:\n\n  - Workbench Instance State: Checks the instance's current state ensuring that it is\n    stuck in provisioning status and not stopped or active.\n\n  - Workbench Instance Compute Engine VM Boot Disk Image: Checks if the instance has been created\n    with a custom container, the official 'workbench-instances' images, deep learning VMs images,\n    or unsupported images that might cause the instance to be stuck in provisioning state.\n\n  - Workbench Instance Custom Scripts: Checks if the instance is not using custom scripts that may\n    affect the default configuration of the instance by changing the Jupyter port or breaking\n    dependencies that might cause the instance to be stuck in provisioning state.\n\n  - Workbench Instance Environment Version: Checks if the instance is using the latest environment\n    version by checking its upgradability. Old versions sometimes are the root cause for the\n    instance to be stuck in provisioning state.\n\n  - Workbench Instance Compute Engine VM Performance: Checks the VM's current performance, ensuring\n    that it is not impaired by high CPU usage, insufficient memory, or disk space issues that might\n    disrupt normal operations.\n\n  - Workbench Instance Compute Engine Serial Port Logging: Checks if the instance has serial port\n    logs which can be analyzed to ensure Jupyter is running on port 127.0.0.1:8080\n    which is mandatory.\n\n  - Workbench Instance Compute Engine SSH and Terminal access: Checks if the instance's\n    compute engine vm is running so the user can ssh and open a terminal to check for space\n    usage in 'home/jupyter'. If no space is left, that may cause the instance to be stuck\n    in provisioning state.\n\n  - Workbench Instance External IP Disabled: Checks if the external IP disabled. Wrong networking\n    configurations may cause the instance to be stuck in provisioning state.\n  \"\"\"\n  parameters = {\n      flags.PROJECT_ID: {\n          'type': str,\n          'help': 'The Project ID of the resource under investigation',\n          'required': True\n      },\n      flags.INSTANCE_NAME: {\n          'type': str,\n          'help': 'Name of the Workbench Instance',\n          'default': '',\n          'required': True\n      },\n      flags.ZONE: {\n          'type': str,\n          'help': 'Zone of the Workbench Instance. e.g. us-central1-a',\n          'default': 'us-central1-a',\n          'required': True\n      },\n      flags.START_TIME: {\n          'type': datetime,\n          'help': 'Start time of the issue',\n      },\n      flags.END_TIME: {\n          'type': datetime,\n          'help': 'End time of the issue',\n      }\n  }\n\n  def build_tree(self):\n    \"\"\"Describes step relationships\"\"\"\n    start = WorkbenchInstanceStuckInProvisioningStart()\n    check_custom_container = CheckWorkbenchInstanceUsingCustomContainer()\n    check_workbench_instance_image = vertex_gs.CheckWorkbenchInstanceUsingOfficialImage(\n    )\n    check_workbench_instance_custom_scripts = vertex_gs.CheckWorkbenchInstanceCustomScripts(\n    )\n    check_workbench_instance_version = vertex_gs.CheckWorkbenchInstanceIsUsingLatestEnvVersion(\n    )\n    check_workbench_instance_performance = vertex_gs.CheckWorkbenchInstancePerformance(\n    )\n    check_workbench_instance_logging = DecisionCheckWorkbenchInstanceSystemLogging(\n    )\n    check_workbench_instance_compute_vm_ssh = CheckWorkbenchInstanceComputeEngineSSH(\n    )\n    check_workbench_instance_ip_disabled = vertex_gs.CheckWorkbenchInstanceExternalIpDisabled(\n    )\n    self.add_start(start)\n    self.add_step(parent=start, child=check_custom_container)\n    self.add_step(parent=check_custom_container,\n                  child=check_workbench_instance_image)\n    self.add_step(parent=check_workbench_instance_image,\n                  child=check_workbench_instance_custom_scripts)\n    self.add_step(parent=check_workbench_instance_custom_scripts,\n                  child=check_workbench_instance_version)\n    self.add_step(parent=check_workbench_instance_version,\n                  child=check_workbench_instance_performance)\n    self.add_step(parent=check_workbench_instance_version,\n                  child=check_workbench_instance_logging)\n    self.add_step(parent=check_workbench_instance_version,\n                  child=check_workbench_instance_compute_vm_ssh)\n    self.add_step(parent=check_workbench_instance_version,\n                  child=check_workbench_instance_ip_disabled)\n    self.add_end(WorkbenchInstanceStuckInProvisioningEnd())\n\n\nclass WorkbenchInstanceStuckInProvisioningStart(runbook.StartStep):\n  \"\"\"Checking if the Workbench Instance is in PROVISIONING state and gathering its details.\n\n  If the instance is stopped, user must try to start it to start the checks\n  \"\"\"\n\n  template = 'workbench_state::provisioning_stuck'\n\n  def execute(self):\n    \"\"\"Sets values to be used and get resources from Notebooks and GCE APIs\"\"\"\n    # === Get parameters and project information ===\n    project: str = crm.get_project(op.get(flags.PROJECT_ID))\n    if project:\n      op.info(f'project id: {project.id}, project number: {project.number}')\n    product: str = self.__module__.split('.')[-2]\n    op.info(f'product: {product} workbench instances')\n    instance_name: str = op.get(flags.INSTANCE_NAME)\n    op.info(f'instance name parameter: {instance_name}')\n    zone: str = op.get(flags.ZONE)\n    op.info(f'instance zone parameter: {zone}')\n    op.info('--- Workbench Instance ---')\n    workbench_instance: notebooks.WorkbenchInstance = notebooks.get_workbench_instance(\n        project_id=project.id, zone=zone, instance_name=instance_name)\n    gce_instance: gce.Instance = gce.get_instance(project_id=project.id,\n                                                  zone=zone,\n                                                  instance_name=instance_name)\n    self.print_workbench_instance_data(workbench_instance=workbench_instance)\n    op.info(f'instance compute engine vm name: {gce_instance.name}')\n    op.info(f'instance compute engine vm is running: {gce_instance.is_running}')\n    workbench_instance_upgradability: dict = notebooks.workbench_instance_check_upgradability(\n        project_id=project.id, workbench_instance_name=workbench_instance.name)\n    workbench_instance_upgradeable: bool = workbench_instance_upgradability.get(\n        'upgradeable', False)\n    workbench_instance_upgrade_version: str = workbench_instance_upgradability.get(\n        'upgradeVersion', '').upper()\n    workbench_instance_upgrade_info: str = workbench_instance_upgradability.get(\n        'upgradeInfo', '')\n    workbench_instance_upgrade_image: str = workbench_instance_upgradability.get(\n        'upgradeImage', '')\n    op.info(f'instance is upgradeable: {workbench_instance_upgradeable}')\n    op.info(f'instance upgrade info: {workbench_instance_upgrade_info}')\n    if workbench_instance_upgradeable:\n      op.info(f'instance upgrade version: {workbench_instance_upgrade_version}')\n      op.info(f'instance upgrade image: {workbench_instance_upgrade_image}')\n    if workbench_instance.report_event_health:\n      op.info('--- Workbench Instance Health State ---')\n      self.print_workbench_instance_health_data(\n          workbench_instance=workbench_instance)\n    op.info(f'instance state: {workbench_instance.state}')\n\n    if workbench_instance.state == notebooks.StateEnum.ACTIVE:\n      op.add_ok(resource=workbench_instance,\n                reason=op.prep_msg(op.SUCCESS_REASON,\n                                   instance_name=instance_name))\n    elif workbench_instance.state not in PROVISIONING_STATES:\n      op.add_failed(resource=workbench_instance,\n                    reason=op.prep_msg(op.FAILURE_REASON,\n                                       instance_name=instance_name),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n    else:\n      op.add_ok(resource=workbench_instance,\n                reason=op.prep_msg(op.SUCCESS_REASON_ALT1,\n                                   instance_name=instance_name))\n\n  def print_workbench_instance_data(\n      self, workbench_instance: notebooks.WorkbenchInstance):\n    op.info(f'instance name: {workbench_instance.name}')\n    op.info(f'instance state: {workbench_instance.state}')\n    op.info(\n        f'instance environment version: {workbench_instance.environment_version}'\n    )\n    op.info(\n        f'instance compute account: {workbench_instance.gce_service_account_email}'\n    )\n    op.info(f'instance network: {workbench_instance.network}')\n    op.info(f'instance subnetwork: {workbench_instance.subnet}')\n    op.info(\n        f'instance public ip disabled: {workbench_instance.disable_public_ip}')\n    op.info(\n        f'instance metadata disable-mixer: {workbench_instance.disable_mixer}')\n    op.info('instance metadata serial-port-logging-enable:'\n            f'{workbench_instance.serial_port_logging_enabled}')\n    op.info(\n        f'instance metadata post-startup-script: {workbench_instance.post_startup_script}'\n    )\n    op.info(\n        f'instance metadata startup-script: {workbench_instance.startup_script}'\n    )\n    op.info(\n        f'instance metadata startup-script-url: {workbench_instance.startup_script_url}'\n    )\n    op.info(\n        f'instance metadata report-event-health: {workbench_instance.report_event_health}'\n    )\n\n  def print_workbench_instance_health_data(\n      self, workbench_instance: notebooks.WorkbenchInstance):\n    op.info(f'instance health - state: {workbench_instance.health_state}')\n    op.info('instance health - jupyterlab status healthy:'\n            f'{workbench_instance.is_jupyterlab_status_healthy}')\n    op.info('instance health - jupyterlab api status healthy:'\n            f'{workbench_instance.is_jupyterlab_api_status_healthy}')\n    op.info('instance health - notebooks api dns healthy:'\n            f'{workbench_instance.is_notebooks_api_dns_healthy}')\n    op.info('instance health - proxy registration dns healthy:'\n            f'{workbench_instance.is_proxy_registration_dns_healthy}')\n    op.info('instance health - system healthy:'\n            f'{workbench_instance.is_system_healthy}')\n    op.info('instance health - docker status healthy:'\n            f'{workbench_instance.is_docker_status_healthy}')\n\n\nclass CheckWorkbenchInstanceUsingCustomContainer(runbook.Step):\n  \"\"\"Check if the Workbench Instance is using a custom container\n\n  Users have the option to use custom containers to create Workbench Instances\n  If this is the case, this runbook doesn't apply\n  \"\"\"\n\n  template = 'workbench_container::custom'\n\n  def execute(self):\n    \"\"\"Checking if the Workbench Instance is using a custom container.\"\"\"\n    project_id: str = op.get(flags.PROJECT_ID)\n    instance_name: str = op.get(flags.INSTANCE_NAME)\n    zone: str = op.get(flags.ZONE)\n    workbench_instance: notebooks.WorkbenchInstance = notebooks.get_workbench_instance(\n        project_id=project_id, zone=zone, instance_name=instance_name)\n    response = op.prompt(\n        kind=op.CONFIRMATION,\n        message='Is your Workbench Instance using a custom container?')\n    if response == op.YES:\n      op.add_uncertain(resource=workbench_instance,\n                       reason=op.prep_msg(op.UNCERTAIN_REASON),\n                       remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION))\n    else:\n      op.add_ok(resource=workbench_instance,\n                reason=op.prep_msg(op.SUCCESS_REASON,\n                                   instance_name=instance_name))\n\n\nclass DecisionCheckWorkbenchInstanceSystemLogging(runbook.Gateway):\n  \"\"\"Decision point to investigate Serial Port Logs\n\n  Decides whether its possible to check syslogs for the\n  Workbench Instance\n  \"\"\"\n\n  template = 'workbench_system_logs::enabled'\n\n  def execute(self):\n    \"\"\"Decision point to investigate Serial Port Logs\"\"\"\n    project_id = op.get(flags.PROJECT_ID)\n    instance_name: str = op.get(flags.INSTANCE_NAME)\n    zone: str = op.get(flags.ZONE)\n    workbench_instance: notebooks.WorkbenchInstance = notebooks.get_workbench_instance(\n        project_id=project_id, zone=zone, instance_name=instance_name)\n    constraint_name: str = 'constraints/compute.disableSerialPortLogging'\n    constraint = orgpolicy.get_effective_org_policy(project_id, constraint_name)\n    metadata_name = 'serial-port-logging-enabled'\n    if constraint.is_enforced():\n      op.add_uncertain(resource=workbench_instance,\n                       reason=op.prep_msg(op.UNCERTAIN_REASON,\n                                          instance_name=instance_name,\n                                          constraint=constraint_name),\n                       remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION,\n                                               constraint=constraint_name))\n    elif not workbench_instance.serial_port_logging_enabled:\n      op.add_uncertain(\n          resource=workbench_instance,\n          reason=op.prep_msg(\n              op.UNCERTAIN_REASON_ALT1,\n              instance_name=instance_name,\n              metadata=metadata_name,\n              metadata_value=workbench_instance.serial_port_logging_enabled),\n          remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION_ALT1,\n                                  metadata=metadata_name))\n    elif (workbench_instance.state not in PROVISIONING_STATES and\n          workbench_instance != notebooks.StateEnum.ACTIVE):\n      op.add_uncertain(resource=workbench_instance,\n                       reason=op.prep_msg(op.UNCERTAIN_REASON_ALT2,\n                                          instance_name=instance_name,\n                                          state=workbench_instance.state),\n                       remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION_ALT2))\n    else:\n      self.add_child(\n          vertex_gs.CheckWorkbenchInstanceSyslogsJupyterRunningOnPort8080())\n      op.add_ok(resource=workbench_instance,\n                reason=op.prep_msg(op.SUCCESS_REASON,\n                                   instance_name=instance_name))\n\n\nclass CheckWorkbenchInstanceComputeEngineSSH(runbook.CompositeStep):\n  \"\"\"Check if user is able to SSH to the Workbench Instance Compute Engine VM\n\n  Compute Engine might be running so the user can ssh to\n  inspect the VM\n  \"\"\"\n\n  template = 'workbench_compute::ssh'\n\n  def execute(self):\n    \"\"\"Check if user is able to SSH to the Workbench Instance Compute Engine VM\"\"\"\n    #TO-DO change this to use the GCE SSH runbook or steps\n    project_id = op.get(flags.PROJECT_ID)\n    instance_name: str = op.get(flags.INSTANCE_NAME)\n    zone: str = op.get(flags.ZONE)\n    gce_instance: gce.Instance = gce.get_instance(project_id=project_id,\n                                                  zone=zone,\n                                                  instance_name=instance_name)\n    if not gce_instance.is_running:\n      op.add_uncertain(resource=gce_instance,\n                       reason=op.prep_msg(op.UNCERTAIN_REASON,\n                                          instance_name=instance_name,\n                                          status=gce_instance.status),\n                       remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION))\n    else:\n      op.info('Workbench Instance Compute Engine VM is Running!')\n      response = op.prompt(\n          kind=op.CONFIRMATION,\n          message=\n          ('Try to SSH to the instance via Compute Engine and open a terminal. '\n           'Are you able to SSH and open a terminal?'))\n      if response == op.NO:\n        op.add_uncertain(resource=gce_instance,\n                         reason=op.prep_msg(op.UNCERTAIN_REASON_ALT1,\n                                            instance_name=instance_name),\n                         remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION_ALT1))\n      else:\n        self.add_child(CheckWorkbenchInstanceJupyterSpace())\n        op.add_ok(resource=gce_instance,\n                  reason=op.prep_msg(op.SUCCESS_REASON,\n                                     instance_name=instance_name))\n\n\nclass CheckWorkbenchInstanceJupyterSpace(runbook.Step):\n  \"\"\"Check if Jupyter space in \"home/jupyter\" is below 85%\n\n  If Jupyter has ran out of space, the Workbench Instance\n  might not be able to start\n  \"\"\"\n\n  template = 'workbench_jupyter_space::available'\n\n  def execute(self):\n    \"\"\"Check if Jupyter space in \"home/jupyter\" is below 85%\"\"\"\n    project_id = op.get(flags.PROJECT_ID)\n    instance_name: str = op.get(flags.INSTANCE_NAME)\n    zone: str = op.get(flags.ZONE)\n    gce_instance: gce.Instance = gce.get_instance(project_id=project_id,\n                                                  zone=zone,\n                                                  instance_name=instance_name)\n    op.info('In the Workbench Instance Compute Engine VM terminal run \"df\". '\n            'Verify \"home/jupyter\" used space is below 85%')\n    response = op.prompt(kind=op.CONFIRMATION,\n                         message='Is \"home/jupyter\" space usage more than 85%?')\n    if response == op.YES:\n      op.add_failed(resource=gce_instance,\n                    reason=op.prep_msg(op.FAILURE_REASON,\n                                       instance_name=instance_name),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n    else:\n      op.add_ok(resource=gce_instance,\n                reason=op.prep_msg(op.SUCCESS_REASON,\n                                   instance_name=instance_name))\n\n\nclass WorkbenchInstanceStuckInProvisioningEnd(runbook.EndStep):\n  \"\"\"Checking if the Workbench Instance is now in ACTIVE state.\n\n  If Workbench Instance is still stuck in PROVISIONING state, then\n  Diagnostic Logs should be captured and analyzed by the user or support\n  \"\"\"\n\n  template = 'workbench_state::provisioning_stuck'\n\n  def execute(self):\n    \"\"\"Check if the instance is now in ACTIVE state\"\"\"\n    project_id: str = op.get(flags.PROJECT_ID)\n    instance_name: str = op.get(flags.INSTANCE_NAME)\n    zone: str = op.get(flags.ZONE)\n    workbench_instance: notebooks.WorkbenchInstance = notebooks.get_workbench_instance(\n        project_id=project_id, zone=zone, instance_name=instance_name)\n    op.info(f'instance state: {workbench_instance.state}')\n    if workbench_instance.state == notebooks.StateEnum.ACTIVE:\n      op.add_ok(resource=workbench_instance,\n                reason=op.prep_msg(op.SUCCESS_REASON_ALT2,\n                                   instance_name=instance_name))\n    elif workbench_instance.state not in PROVISIONING_STATES:\n      op.add_uncertain(resource=workbench_instance,\n                       reason=op.prep_msg(op.UNCERTAIN_REASON,\n                                          instance_name=instance_name),\n                       remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION))\n    else:\n      op.add_failed(resource=workbench_instance,\n                    reason=op.prep_msg(op.FAILURE_REASON_ALT1,\n                                       instance_name=instance_name),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION_ALT1))\n      op.info(message=op.END_MESSAGE)\n"
  },
  {
    "path": "gcpdiag/runbook/vertex/workbench_instance_stuck_in_provisioning_test.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test class for vertex/WorkbenchInstanceStuckInProvisioning\"\"\"\n\nfrom gcpdiag import config\nfrom gcpdiag.runbook import snapshot_test_base, vertex\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = vertex\n  runbook_name = 'vertex/workbench-instance-stuck-in-provisioning'\n  config.init({'auto': True, 'interface': 'cli'})\n\n  rule_parameters = [{\n      'project_id': 'gcpdiag-notebooks2-aaaa',\n      'instance_name': 'notebooks2instance-provisioning-stuck',\n      'zone': 'us-west1-a'\n  }]\n"
  },
  {
    "path": "gcpdiag/runbook/vpc/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/runbook/vpc/constants.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"TODO: String doc\"\"\"\n# pylint: disable=unused-wildcard-import, wildcard-import\nfrom gcpdiag.runbook.gcp.constants import *\nfrom gcpdiag.runbook.iam.constants import *\n"
  },
  {
    "path": "gcpdiag/runbook/vpc/flags.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Flags used in the VPC runbook\"\"\"\n# pylint: disable=unused-wildcard-import, wildcard-import\n\nfrom gcpdiag.runbook.flags import *\nfrom gcpdiag.runbook.gcp.flags import *\n\nPROJECT_ID = 'project_id'\nPROJECT_NUMBER = 'project_number'\nFOLDER_ID = 'folder_id'\nORG_ID = 'org_id'\nNAME = 'name'\nID = 'id'\nREGION = 'region'\nZONE = 'zone'\n\n# unique flags belong to this runbook\nSRC_IP = 'src_ip'\nDEST_IP = 'dest_ip'\nSRC_NIC = 'src_nic'\nDEST_PORT = 'dest_port'\nPORT = 'port'\nPROTOCOL_TYPE = 'protocol_type'\n"
  },
  {
    "path": "gcpdiag/runbook/vpc/generalized_steps.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Contains Reusable Steps for VPC related Diagnostic Trees\"\"\"\n\nimport json\n\nfrom gcpdiag import runbook\nfrom gcpdiag.queries import gce, networkmanagement\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.vpc import flags, util\n\n\nclass VpcFirewallCheck(runbook.Step):\n  \"\"\"Checks if ingress or egress traffic is allowed to a GCE Instance from a specified source IP.\n\n  Evaluates VPC firewall rules to verify if a GCE Instance permits ingress or egress traffic from a\n  designated source IP through a specified port and protocol.\n  \"\"\"\n  traffic = None\n\n  def execute(self):\n    \"\"\"Evaluating VPC network firewall rules.\"\"\"\n    vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID),\n                          zone=op.get(flags.ZONE),\n                          instance_name=op.get(flags.INSTANCE_NAME))\n\n    result = None\n    if self.traffic == 'ingress':\n      result = vm.network.firewall.check_connectivity_ingress(\n          src_ip=op.get(flags.SRC_IP),\n          ip_protocol=op.get(flags.PROTOCOL_TYPE),\n          port=op.get(flags.PORT),\n          target_service_account=vm.service_account,\n          target_tags=vm.tags)\n\n    if self.traffic == 'egress':\n      result = vm.network.firewall.check_connectivity_egress(\n          src_ip=op.get(flags.DEST_IP),\n          ip_protocol=op.get(flags.PROTOCOL_TYPE),\n          port=op.get(flags.DEST_PORT),\n          target_service_account=vm.service_account,\n          target_tags=vm.tags)\n\n    if result.action == 'deny':\n      op.add_failed(vm,\n                    reason=op.prep_msg(op.FAILURE_REASON,\n                                       address=op.get(flags.DEST_IP),\n                                       protocol=op.get(flags.PROTOCOL_TYPE),\n                                       port=op.get(flags.PORT),\n                                       name=vm.name,\n                                       result=result.matched_by_str),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n    elif result.action == 'allow':\n      op.add_ok(\n          vm,\n          op.prep_msg(op.SUCCESS_REASON,\n                      address=op.get(flags.SRC_IP),\n                      protocol=op.get(flags.PROTOCOL_TYPE),\n                      port=op.get(flags.PORT),\n                      name=vm.name,\n                      result=result.matched_by_str))\n\n\nclass VpcRouteCheck(runbook.Step):\n  \"\"\"Checks VPC route for routing rule exists to the destination IP address.\n\n  Evaluates the VPC routing rules for the most specific route that\n  - matches the destination IP address on the VPC route selection order.\n  \"\"\"\n\n  def execute(self):\n    \"\"\"Evaluating the VPC routing rules.\"\"\"\n    vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID),\n                          zone=op.get(flags.ZONE),\n                          instance_name=op.get(flags.INSTANCE_NAME))\n    # get project, network info from nic\n    nic_info = util.get_nic_info(vm.get_network_interfaces,\n                                 op.get(flags.SRC_NIC))\n\n    project, netwrk, dest_ip = nic_info['project'], nic_info['network'], op.get(\n        flags.DEST_IP)\n    # get the selected route for the destination\n    selected_route = util.get_selected_route_for_dest_ip(\n        project, netwrk, dest_ip)\n\n    if selected_route:\n      # check that the selected route has a next hop destination set to\n      # default Internet Gateway if interface has an external IP\n      next_hop = selected_route.get_next_hop()\n      if next_hop['type'] == 'nextHopGateway':\n        op.add_ok(\n            vm, op.prep_msg(op.SUCCESS_REASON, route_name=selected_route.name))\n      else:\n        next_hop_link = next_hop['link']\n        op.add_uncertain(vm,\n                         reason=op.prep_msg(op.UNCERTAIN_REASON,\n                                            address=op.get(flags.DEST_IP),\n                                            next_hop_link=next_hop_link,\n                                            route_name=selected_route.name),\n                         remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION))\n    else:\n      op.add_failed(vm,\n                    reason=op.prep_msg(op.FAILURE_REASON,\n                                       address=op.get(flags.DEST_IP)),\n                    remediation=op.prep_msg(op.FAILURE_REMEDIATION))\n\n\nclass VmExternalIpConnectivityTest(runbook.Step):\n  \"\"\"Runs a network connectivity test from VM to a destination endpoint.\n\n  Evaluates the connectivity test for any issues and reports to the user.\"\"\"\n\n  def execute(self):\n    \"\"\"Running a connectivity test to the external ip address.\"\"\"\n    vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID),\n                          zone=op.get(flags.ZONE),\n                          instance_name=op.get(flags.INSTANCE_NAME))\n\n    dest_ip = op.get(flags.DEST_IP)\n    dest_ip = dest_ip.exploded\n\n    result = networkmanagement.run_connectivity_test(\n        op.get(flags.PROJECT_ID), op.get(flags.SRC_IP), dest_ip,\n        op.get(flags.DEST_PORT), op.get(flags.PROTOCOL_TYPE))\n    # if the VM has only a private IP address, check that there is a NATGW in\n    # the traffic path and put the NATGW details\n    if result and not util.is_external_ip_on_nic(vm.get_network_interfaces,\n                                                 op.get(flags.SRC_NIC)):\n      steps = result['reachabilityDetails']['traces'][0]['steps']\n      if 'CLOUD_NAT' in str(steps):\n        natgw_step = [\n            step for step in steps\n            if step.get('nat', {}).get('type', {}) == 'CLOUD_NAT'\n        ]\n        op.put('nat_gateway_name', natgw_step[0]['nat']['natGatewayName'])\n        op.put('nat_gateway_uri', natgw_step[0]['nat']['routerUri'])\n      else:\n        # the VM has only a private IP address but there is no NATGW in the traffic path\n        # Notify the cx if a custom NAT GW is being used.\n        op.add_uncertain(vm,\n                         reason=\"\"\"\n          A NAT gateway is not found in the external traffic path for the VM: {},\n          connecting to the external IP address {}.\n          \"\"\".format(op.get(flags.INSTANCE_NAME), dest_ip),\n                         remediation=\"\"\"\n          If a VM instance or custom NAT is being used as a NAT Gateway, check that\n          it is configured and functioning correctly. Otherwise, ensure that a public\n          Cloud NAT is configured for the VPC Network [1]:\n\n          Check that the destination IP is a Google Service IP address and\n          Private Google Access is enabled\n\n          1. https://cloud.google.com/nat/docs/set-up-manage-network-address-translation#creating_nat\n          \"\"\")\n\n    # If there is no result from the connectivity test, prompt to rerun/retest\n    if not result:\n      response = op.prompt(\n          kind=op.HUMAN_TASK,\n          message='The connectivity test did not run successfully: No result '\n          'returned. Do you want to rerun the connectivity test?',\n          choice_msg='Enter an option: ')\n      if response == op.STOP:\n        op.add_skipped(vm, reason='Skipping the connectivity test.')\n\n    # Report the connectivity test result\n    result_status = result.get('reachabilityDetails', {}).get('result')\n\n    # Clean up the connectivity test\n\n    # Log the connectivity test steps\n    description = 'description'\n    state = 'state'\n\n    for step in result['reachabilityDetails']['traces'][0]['steps']:\n      op.info(f'{step[state]} -> {step[description]}')\n\n    if result_status == 'REACHABLE':\n      op.add_ok(\n          vm,\n          op.prep_msg(op.SUCCESS_REASON,\n                      address=op.get(flags.DEST_IP).exploded,\n                      result_status=result_status,\n                      trace=str(json.dumps(result['reachabilityDetails']))))\n    elif result_status in ('AMBIGUOUS', 'UNDETERMINED'):\n      op.add_uncertain(\n          vm,\n          op.prep_msg(op.UNCERTAIN_REASON,\n                      address=op.get(flags.DEST_IP).exploded,\n                      result_status=result_status,\n                      trace=str(json.dumps(result['reachabilityDetails']))),\n          remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION))\n    else:\n      op.add_failed(vm,\n                    op.prep_msg(op.FAILURE_REASON,\n                                address=op.get(flags.DEST_IP).exploded,\n                                result_status=result_status,\n                                trace=str(\n                                    json.dumps(result['reachabilityDetails']))),\n                    remediation=op.prep_msg(op.UNCERTAIN_REMEDIATION))\n"
  },
  {
    "path": "gcpdiag/runbook/vpc/generalized_steps_test.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"TODO: String doc\"\"\"\n"
  },
  {
    "path": "gcpdiag/runbook/vpc/snapshots/vm_external_ip_connectivity.txt",
    "content": "dest_ip=151.101.3.5,dest_port=443,instance_name=public-linux-valid,project_id=gcpdiag-\nvpc2-runbook,src_nic=nic0,zone=us-central1-a\n\nvpc/vm-external-ip-connectivity: Troubleshooting for common issues which affect VM connectivity to external IP addresses.\n\n  This runbook investigates components required for VMs to establish connectivity\n  to external IP addresses\n\n  Areas Examined:\n\n  - VM Instance:\n      - Verify that the VM exists and is running\n\n  - VM Configuration:\n      - Checks the source nic configuration on the VM if it has an\n        External IP address or not.\n\n  - VPC routes checks:\n      - Checks the VPC routing rules are configured to allow external connectivity\n\n  - VPC firewall and firewall policy checks:\n      - Checks the VPC firewall and firewall policies allow external connectivity.\n\n  - GCE Network Connectivity Tests:\n      - Runs a VPC network connectivity test and reports the result.\n\n  - NATGW Checks:\n      - For source nics without an External IP address, verify the VM is served\n        by a Public NAT Gateway and check there are no issues on the NATGW.\n    \n[START]: Starting VM external connectivity diagnostics\n[AUTOMATED STEP]: Verify networkmanagement.googleapis.com API is ENABLED in project gcpdiag-vpc2-runbook.\n\n   - gcpdiag-vpc2-runbook                                                 [OK]\n     [REASON]\n     The `networkmanagement.googleapis.com` service is currently in the expected state: `ENABLED`.\n\n[GATEWAY]: Checking if the source NIC has an associated external IP address.\n[INFO]: The source NIC nic0 on the VM has an External IP address,checking direct connectivity to external IP 151.101.3.5\n[COMPOSITE STEP]: Checking for connectivity from NIC with external IP address.\n[AUTOMATED STEP]: Verify Firewall exists\n\n   - gcpdiag-vpc2-runbook/public-linux-valid                              [OK]\n     [REASON]\n     No firewall rule blocking traffic\n\n[AUTOMATED STEP]: Evaluating the VPC routing rules.\n\n   - gcpdiag-vpc2-runbook/public-linux-valid                              [OK]\n     [REASON]\n     Matching VPC route with nexthop gateway found\n\n[AUTOMATED STEP]: Running a connectivity test to the external ip address.\n[INFO]: START_FROM_INSTANCE -> Initial state: packet originating from a Compute Engine instance.\n[INFO]: APPLY_EGRESS_FIREWALL_RULE -> Config checking state: verify EGRESS firewall rule.\n[INFO]: APPLY_ROUTE -> Config checking state: verify route.\n[INFO]: NAT -> Transition state: packet header translated due to Cloud NAT and NAT IP chosen randomly from [34.123.41.124/32].\n[INFO]: DELIVER -> Final state: packet delivered to Internet.\n\n   - gcpdiag-vpc2-runbook/public-linux-valid                              [OK]\n     [REASON]\n     The remote endpoint 151.101.3.5 is REACHABLE.\n\n     CONNECTIVITY TEST RESULT:\n\n     {\"result\": \"REACHABLE\", \"verifyTime\": \"2024-06-04T00:31:09.450544252Z\", \"traces\": [{\"endpointInfo\": {\"sourceIp\": \"10.10.0.3\", \"destinationIp\": \"151.101.3.5\", \"protocol\": \"TCP\", \"sourcePort\": 63951, \"destinationPort\": 443, \"sourceNetworkUri\": \"projects/gcpdiag-vpc2-runbook/global/networks/default\"}, \"steps\": [{\"description\": \"Initial state: packet originating from a Compute Engine instance.\", \"state\": \"START_FROM_INSTANCE\", \"projectId\": \"gcpdiag-vpc2-runbook\", \"instance\": {\"displayName\": \"private-linux-valid\", \"uri\": \"projects/gcpdiag-vpc2-runbook/zones/us-central1-a/instances/private-linux-valid\", \"interface\": \"nic0\", \"networkUri\": \"projects/gcpdiag-vpc2-runbook/global/networks/default\", \"internalIp\": \"10.10.0.3\", \"networkTags\": [\"valid-vpc-instance-private\"]}}, {\"description\": \"Config checking state: verify EGRESS firewall rule.\", \"state\": \"APPLY_EGRESS_FIREWALL_RULE\", \"projectId\": \"gcpdiag-vpc2-runbook\", \"firewall\": {\"displayName\": \"private-linux-egress-allow\", \"uri\": \"projects/gcpdiag-vpc2-runbook/global/firewalls/private-linux-egress-allow\", \"direction\": \"EGRESS\", \"action\": \"ALLOW\", \"priority\": 920, \"networkUri\": \"projects/gcpdiag-vpc2-runbook/global/networks/default\", \"targetTags\": [\"valid-vpc-instance-private\"], \"firewallRuleType\": \"VPC_FIREWALL_RULE\"}}, {\"description\": \"Config checking state: verify route.\", \"state\": \"APPLY_ROUTE\", \"projectId\": \"gcpdiag-vpc2-runbook\", \"route\": {\"displayName\": \"default-route-733dd203fb86133b\", \"uri\": \"projects/gcpdiag-vpc2-runbook/global/routes/default-route-733dd203fb86133b\", \"destIpRange\": \"0.0.0.0/0\", \"nextHop\": \"internet gateway\", \"networkUri\": \"projects/gcpdiag-vpc2-runbook/global/networks/default\", \"priority\": 1000, \"routeType\": \"STATIC\", \"nextHopType\": \"NEXT_HOP_INTERNET_GATEWAY\", \"routeScope\": \"NETWORK\"}}, {\"description\": \"Transition state: packet header translated due to Cloud NAT and NAT IP chosen randomly from [34.123.41.124/32].\", \"state\": \"NAT\", \"projectId\": \"gcpdiag-vpc2-runbook\", \"nat\": {\"type\": \"CLOUD_NAT\", \"protocol\": \"TCP\", \"networkUri\": \"projects/gcpdiag-vpc2-runbook/global/networks/default\", \"oldSourceIp\": \"10.10.0.3\", \"newSourceIp\": \"34.123.41.124\", \"oldDestinationIp\": \"151.101.3.5\", \"newDestinationIp\": \"151.101.3.5\", \"oldSourcePort\": 63951, \"newSourcePort\": 49732, \"oldDestinationPort\": 443, \"newDestinationPort\": 443, \"routerUri\": \"projects/gcpdiag-vpc2-runbook/regions/us-central1/routers/nat-router\", \"natGatewayName\": \"nat-gateway\"}}, {\"description\": \"Final state: packet delivered to Internet.\", \"state\": \"DELIVER\", \"deliver\": {\"target\": \"INTERNET\", \"ipAddress\": \"151.101.3.5\"}}], \"forwardTraceId\": 1}]}\n\n[END]: Finalize VM external connectivity diagnostics.\n\n\ndest_ip=151.101.3.5,dest_port=443,name=public-linux-faulty,project_id=gcpdiag-\nvpc2-runbook,src_nic=nic0,zone=us-central1-a\n\nvpc/vm-external-ip-connectivity: Troubleshooting for common issues which affect VM connectivity to external IP addresses.\n\n  This runbook investigates components required for VMs to establish connectivity\n  to external IP addresses\n\n  Areas Examined:\n\n  - VM Instance:\n      - Verify that the VM exists and is running\n\n  - VM Configuration:\n      - Checks the source nic configuration on the VM if it has an\n        External IP address or not.\n\n  - VPC routes checks:\n      - Checks the VPC routing rules are configured to allow external connectivity\n\n  - VPC firewall and firewall policy checks:\n      - Checks the VPC firewall and firewall policies allow external connectivity.\n\n  - GCE Network Connectivity Tests:\n      - Runs a VPC network connectivity test and reports the result.\n\n  - NATGW Checks:\n      - For source nics without an External IP address, verify the VM is served\n        by a Public NAT Gateway and check there are no issues on the NATGW.\n    \n[START]: Starting VM external connectivity diagnostics\n[AUTOMATED STEP]: Verify networkmanagement.googleapis.com API is ENABLED in project gcpdiag-vpc2-runbook.\n\n   - gcpdiag-vpc2-runbook                                                 [OK]\n     [REASON]\n     The `networkmanagement.googleapis.com` service is currently in the expected state: `ENABLED`.\n\n[GATEWAY]: Checking if the source NIC has an associated external IP address.\n[INFO]: The source NIC nic0 on the VM has an External IP address,checking direct connectivity to external IP 151.101.3.5\n[COMPOSITE STEP]: Checking for connectivity from NIC with external IP address.\n[AUTOMATED STEP]: Verify Firewall exists\n\n   - gcpdiag-vpc2-runbook/public-linux-faulty                             [FAIL]\n     [REASON]\n     A firewall rule or policy potentially denying egress traffic was found.\n     Further steps will attempt to confirm the block via connectivity testing.\n\n     [REMEDIATION]\n     Refer to [1] to create or update VPC firewall rules.\n     Refer to [2] for guidance on creating or modifying Firewall policies.\n     [1] <https://cloud.google.com/firewall/docs/using-firewalls#creating_firewall_rules>\n     [2] <https://cloud.google.com/firewall/docs/using-firewall-policies>\n\n[AUTOMATED STEP]: Evaluating the VPC routing rules.\n\n   - gcpdiag-vpc2-runbook/public-linux-faulty                             [OK]\n     [REASON]\n     Matching VPC route with nexthop gateway found\n\n[AUTOMATED STEP]: Running a connectivity test to the external ip address.\n[INFO]: START_FROM_INSTANCE -> Initial state: packet originating from a Compute Engine instance.\n[INFO]: APPLY_EGRESS_FIREWALL_RULE -> Config checking state: verify EGRESS firewall rule.\n[INFO]: APPLY_ROUTE -> Config checking state: verify route.\n[INFO]: NAT -> Transition state: packet header translated due to Cloud NAT and NAT IP chosen randomly from [34.123.41.124/32].\n[INFO]: DELIVER -> Final state: packet delivered to Internet.\n\n   - gcpdiag-vpc2-runbook/public-linux-faulty                             [OK]\n     [REASON]\n     The remote endpoint 151.101.3.5 is REACHABLE.\n\n     CONNECTIVITY TEST RESULT:\n\n     {\"result\": \"REACHABLE\", \"verifyTime\": \"2024-06-04T00:31:09.450544252Z\", \"traces\": [{\"endpointInfo\": {\"sourceIp\": \"10.10.0.3\", \"destinationIp\": \"151.101.3.5\", \"protocol\": \"TCP\", \"sourcePort\": 63951, \"destinationPort\": 443, \"sourceNetworkUri\": \"projects/gcpdiag-vpc2-runbook/global/networks/default\"}, \"steps\": [{\"description\": \"Initial state: packet originating from a Compute Engine instance.\", \"state\": \"START_FROM_INSTANCE\", \"projectId\": \"gcpdiag-vpc2-runbook\", \"instance\": {\"displayName\": \"private-linux-valid\", \"uri\": \"projects/gcpdiag-vpc2-runbook/zones/us-central1-a/instances/private-linux-valid\", \"interface\": \"nic0\", \"networkUri\": \"projects/gcpdiag-vpc2-runbook/global/networks/default\", \"internalIp\": \"10.10.0.3\", \"networkTags\": [\"valid-vpc-instance-private\"]}}, {\"description\": \"Config checking state: verify EGRESS firewall rule.\", \"state\": \"APPLY_EGRESS_FIREWALL_RULE\", \"projectId\": \"gcpdiag-vpc2-runbook\", \"firewall\": {\"displayName\": \"private-linux-egress-allow\", \"uri\": \"projects/gcpdiag-vpc2-runbook/global/firewalls/private-linux-egress-allow\", \"direction\": \"EGRESS\", \"action\": \"ALLOW\", \"priority\": 920, \"networkUri\": \"projects/gcpdiag-vpc2-runbook/global/networks/default\", \"targetTags\": [\"valid-vpc-instance-private\"], \"firewallRuleType\": \"VPC_FIREWALL_RULE\"}}, {\"description\": \"Config checking state: verify route.\", \"state\": \"APPLY_ROUTE\", \"projectId\": \"gcpdiag-vpc2-runbook\", \"route\": {\"displayName\": \"default-route-733dd203fb86133b\", \"uri\": \"projects/gcpdiag-vpc2-runbook/global/routes/default-route-733dd203fb86133b\", \"destIpRange\": \"0.0.0.0/0\", \"nextHop\": \"internet gateway\", \"networkUri\": \"projects/gcpdiag-vpc2-runbook/global/networks/default\", \"priority\": 1000, \"routeType\": \"STATIC\", \"nextHopType\": \"NEXT_HOP_INTERNET_GATEWAY\", \"routeScope\": \"NETWORK\"}}, {\"description\": \"Transition state: packet header translated due to Cloud NAT and NAT IP chosen randomly from [34.123.41.124/32].\", \"state\": \"NAT\", \"projectId\": \"gcpdiag-vpc2-runbook\", \"nat\": {\"type\": \"CLOUD_NAT\", \"protocol\": \"TCP\", \"networkUri\": \"projects/gcpdiag-vpc2-runbook/global/networks/default\", \"oldSourceIp\": \"10.10.0.3\", \"newSourceIp\": \"34.123.41.124\", \"oldDestinationIp\": \"151.101.3.5\", \"newDestinationIp\": \"151.101.3.5\", \"oldSourcePort\": 63951, \"newSourcePort\": 49732, \"oldDestinationPort\": 443, \"newDestinationPort\": 443, \"routerUri\": \"projects/gcpdiag-vpc2-runbook/regions/us-central1/routers/nat-router\", \"natGatewayName\": \"nat-gateway\"}}, {\"description\": \"Final state: packet delivered to Internet.\", \"state\": \"DELIVER\", \"deliver\": {\"target\": \"INTERNET\", \"ipAddress\": \"151.101.3.5\"}}], \"forwardTraceId\": 1}]}\n\n[END]: Finalize VM external connectivity diagnostics.\n\n\n"
  },
  {
    "path": "gcpdiag/runbook/vpc/templates/rca.jinja",
    "content": "{% block vm_connectivity_reason %}\nConsider using our recommended methods for connecting Compute Engine virtual\nmachine (VM) instance through its internal IP address:\n<https://cloud.google.com/compute/docs/connect/ssh-internal-ip>\n{% endblock vm_connectivity_reason %}\n"
  },
  {
    "path": "gcpdiag/runbook/vpc/templates/vm_external_ip_connectivity.jinja",
    "content": "{% block firewall_exists_success_reason %}\nNo firewall rule blocking traffic\n{% endblock firewall_exists_success_reason %}\n\n{% block firewall_exists_failure_reason %}\nA firewall rule or policy potentially denying egress traffic was found.\nFurther steps will attempt to confirm the block via connectivity testing.\n{% endblock firewall_exists_failure_reason %}\n\n{% block firewall_exists_failure_remediation %}\nRefer to [1] to create or update VPC firewall rules.\nRefer to [2] for guidance on creating or modifying Firewall policies.\n[1] <https://cloud.google.com/firewall/docs/using-firewalls#creating_firewall_rules>\n[2] <https://cloud.google.com/firewall/docs/using-firewall-policies>\n{% endblock firewall_exists_failure_remediation %}\n\n# `step_name` is mostly used when working with generalized step and prefer\n\n# a more customized introduction message for the step\n\n{% block firewall_exists_step_name %}\nVerify Firewall exists\n{% endblock firewall_exists_step_name %}\n\n#############################################################\n\n# messages for the VPC route check for gateway nexthop step #\n\n#############################################################\n\n{% block vpc_route_check_for_nexthop_gateway_success_reason %}\nMatching VPC route with nexthop gateway found\n{% endblock vpc_route_check_for_nexthop_gateway_success_reason %}\n\n# messages for the VPC route check for gateway nexthop\n\n{% block vpc_route_check_for_nexthop_gateway_failure_reason %}\nNo matching VPC route found that forwards traffic to the external IP {address}\n{% endblock vpc_route_check_for_nexthop_gateway_failure_reason %}\n\n{% block vpc_route_check_for_nexthop_gateway_failure_remediation %}\nRefer to [1] or [2] to create a default route to the default internet gateway.\n[1] <https://cloud.google.com/vpc/docs/using-routes#add-default-route-ipv4>\n[2] <https://cloud.google.com/vpc/docs/using-routes#addingroute-ipv6>\n{% endblock vpc_route_check_for_nexthop_gateway_failure_remediation %}\n\n{% block vpc_route_check_for_nexthop_gateway_uncertain_reason %}\nMatching VPC route {route_name} forwards traffic for the external IP {address} via the next hop {next_hop_link}, which is not the default internet gateway. Connectivity depends on the configured next hop having internet access.\n{% endblock vpc_route_check_for_nexthop_gateway_uncertain_reason %}\n\n{% block vpc_route_check_for_nexthop_gateway_uncertain_remediation %}\nConfirm that the next hop {next_hop_link} is correctly configured and provides the necessary internet connectivity.\n{% endblock vpc_route_check_for_nexthop_gateway_uncertain_remediation %}\n\n#############################################################\n\n# Messages for Connectivity Tests Step #\n\n#############################################################\n\n{% block connectivity_test_success_reason %}\nThe remote endpoint {address} is {result_status}.\n\nCONNECTIVITY TEST RESULT:\n\n{trace}\n{% endblock connectivity_test_success_reason %}\n\n{% block connectivity_test_failure_reason %}\nConnectivity test to the remote endpoint {address} resulted in status: {result_status}. The connectivity test trace provides details on the failure points.\n\nCONNECTIVITY TEST RESULT:\n\n{trace}\n{% endblock connectivity_test_failure_reason %}\n\n{% block connectivity_test_uncertain_reason %}\nConnectivity test to the endpoint {address} is {result_status}. Review the connectivity test result output and resolve identified issues.\n\nCONNECTIVITY TEST RESULT:\n\n{trace}\n{% endblock connectivity_test_uncertain_reason %}\n\n{% block connectivity_test_uncertain_remediation %}\nReview the connectivity test output, resolve issues and retest.\n{% endblock connectivity_test_uncertain_remediation %}\n\n{% block connectivity_test_failure_remediation %}\nReview the connectivity test output, resolve issues and retest.\n{% endblock connectivity_test_failure_remediation %}\n\n#############################################################\n\n# Messages for NAT IP Exhaustion Check #\n\n#############################################################\n\n{% block nat_ip_exhaustion_check_success_reason %}\nNo IP exhaustion issues found on the NAT GW {nat_gateway_name}\n{% endblock nat_ip_exhaustion_check_success_reason %}\n\n{% block nat_ip_exhaustion_check_failure_reason %}\nNAT IP allocation failure found on the NAT GW {nat_gateway_name}\n{% endblock nat_ip_exhaustion_check_failure_reason %}\n\n{% block nat_ip_exhaustion_check_failure_remediation %}\nRemediate IP exhaustion issues on {nat_gateway_name} by referring to [1]:\n[1]\n<https://cloud.google.com/knowledge/kb/cloud-nat-is-dropping-or-limiting-egress-connectivity-000004263#:~:text=If%20the%20metric%20indicates%20that,on%20the%20Port%20reservation%20procedure>.\n{% endblock nat_ip_exhaustion_check_failure_remediation %}\n\n#############################################################\n\n# Messages for Resource Exhaustion Check #\n\n#############################################################\n\n{% block nat_resource_exhaustion_check_success_reason %}\nNo {metric_reason} issues on the dropped_sent_packet metric for the NAT GW {nat_gateway_name} seen.\n{% endblock nat_resource_exhaustion_check_success_reason %}\n\n{% block nat_resource_exhaustion_check_failure_reason %}\n{metric_reason} issue found on the dropped_sent_packet metric on the NAT GW {nat_gateway_name}\n{% endblock nat_resource_exhaustion_check_failure_reason %}\n\n{% block nat_resource_exhaustion_check_failure_remediation %}\nRemediate resource exhaustion issues by referring to [1]:\n[1]\n<https://cloud.google.com/knowledge/kb/cloud-nat-is-dropping-or-limiting-egress-connectivity-000004263#:~:text=If%20the%20metric%20indicates%20that,on%20the%20Port%20reservation%20procedure>\n{% endblock nat_resource_exhaustion_check_failure_remediation %}\n\n#############################################################\n\n# Messages for NAT received packet drop check #\n\n#############################################################\n\n{% block nat_dropped_received_packet_check_success_reason %}\nNo received_packet_drop on NAT GW {nat_gateway_name} seen.\n{% endblock nat_dropped_received_packet_check_success_reason %}\n\n{% block nat_dropped_received_packet_check_uncertain_reason %}\nElevated received_packet_drop_count metric noticed for NAT GW {nat_gateway_name}\ndropped_received_packet: {metric_value}\n{% endblock nat_dropped_received_packet_check_uncertain_reason %}\n\n{% block nat_dropped_received_packet_check_uncertain_remediation %}\nNAT gateways can drop packets for various reasons. Check received_packet_drop metrics at the VM level. Open a case with GCP Support for confirmation of the reason for the drops.\nRefer to [1] and [2] for troubleshooting Cloud NAT and reducing drops:\n[1] <https://cloud.google.com/nat/docs/troubleshooting>\n[2] <https://cloud.google.com/knowledge/kb/reduce-received-packets-dropped-count-on-cloud-nat-000006744>\n{% endblock nat_dropped_received_packet_check_uncertain_remediation %}\n\n#############################################################\n\n# Messages for VM received packet drop check #\n\n#############################################################\n\n{% block vm_dropped_received_packet_check_success_reason %}\nNo received_packet_drop on relevant VMs seen.\n{% endblock vm_dropped_received_packet_check_success_reason %}\n\n{% block vm_dropped_received_packet_check_uncertain_reason %}\nElevated received_packet_drop_count metric noticed for following VMs\n{vm_drop_list}\n{% endblock vm_dropped_received_packet_check_uncertain_reason %}\n\n{% block vm_dropped_received_packet_check_uncertain_remediation %}\nVMs can drop packets for various reasons. Open a case with GCP Support for justification for the packet drops.\nRefer to [1] and [2] for troubleshooting Cloud NAT and reducing drops:\n[1] <https://cloud.google.com/nat/docs/troubleshooting>\n[2] <https://cloud.google.com/knowledge/kb/reduce-received-packets-dropped-count-on-cloud-nat-000006744>\n{% endblock vm_dropped_received_packet_check_uncertain_remediation %}\n"
  },
  {
    "path": "gcpdiag/runbook/vpc/util.py",
    "content": "# Copyright 2023 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Helpful functions used in different parts of the VPC runbooks\"\"\"\n\nimport ipaddress\nimport re\n\nfrom gcpdiag.queries import network\n\n\n# check that nic is a valid nic\ndef is_valid_nic(nic: str):\n  pattern = r'^nic([0-7])$'\n  return bool(re.match(pattern, nic))\n\n\n# check if an external IP is associated to the nic\ndef is_external_ip_on_nic(interfaces: list, nic: str):\n  interface = [int for int in interfaces if nic == int['name']]\n  return 'natIP' in str(interface)\n\n\n# get the project and network for the nic\ndef get_nic_info(interfaces: list, nic: str):\n  nic_info = {}\n  pattern = r'/projects/([^/]+)/global/networks/([^/]+)'\n\n  interface = [int for int in interfaces if nic == int['name']]\n  nic_network_url = interface[0]['network']\n\n  match = re.search(pattern, nic_network_url)\n\n  if match:\n    nic_info['project'] = match.group(1)\n    nic_info['network'] = match.group(2)\n  else:\n    raise ValueError('Could not get network, project info from the network URL')\n  return nic_info\n\n\n# get network from url\ndef get_network_from_url(url):\n  pattern = r'/projects/([^/]+)/global/networks/([^/]+)'\n  match = re.search(pattern, url)\n  if match:\n    return match.group(2)\n  else:\n    raise ValueError('Could not get network from the network URL')\n\n\n# get the routes for the nic sorted in descending order of destRange prefix length\ndef get_selected_route_for_dest_ip(project, net, dest_ip):\n  routes = network.get_routes(project)\n  nic_routes = [\n      route for route in routes if get_network_from_url(route.network) == net\n  ]\n\n  # routes with destRange that matches the dest_ip\n  matching_routes = [\n      route for route in nic_routes\n      if dest_ip in ipaddress.IPv4Network(route.dest_range)\n  ]\n\n  # return None if there are no matching routes.\n  if not matching_routes:\n    return None\n  # sort the matching routes based on the longest prefix, the longest prefix wins\n  # based on GCP VPC selection https://cloud.google.com/vpc/docs/routes#routeselection\n  sorted_routes = sorted(\n      matching_routes,\n      key=lambda r: ipaddress.IPv4Network(r.dest_range).prefixlen,\n      reverse=True)\n\n  return sorted_routes[0]\n"
  },
  {
    "path": "gcpdiag/runbook/vpc/vm_external_ip_connectivity.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Module containing VM External IP connectivity debugging tree and custom steps\"\"\"\n\nimport ipaddress\n\nimport googleapiclient.errors\n\nfrom gcpdiag import config, runbook\nfrom gcpdiag.queries import crm, gce\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.gcp import generalized_steps as gcp_gs\nfrom gcpdiag.runbook.nat import generalized_steps as nat_gs\nfrom gcpdiag.runbook.vpc import flags\nfrom gcpdiag.runbook.vpc import generalized_steps as vpc_gs\nfrom gcpdiag.runbook.vpc import util\n\nSCOPE_TO_SINGLE_VM = 'vm_exists'\n\n\nclass VmExternalIpConnectivity(runbook.DiagnosticTree):\n  \"\"\"Troubleshooting for common issues which affect VM connectivity to external IP addresses.\n\n  This runbook investigates components required for VMs to establish connectivity\n  to external IP addresses\n\n  Areas Examined:\n\n  - VM Instance:\n      - Verify that the VM exists and is running\n\n  - VM Configuration:\n      - Checks the source nic configuration on the VM if it has an\n        External IP address or not.\n\n  - VPC routes checks:\n      - Checks the VPC routing rules are configured to allow external connectivity\n\n  - VPC firewall and firewall policy checks:\n      - Checks the VPC firewall and firewall policies allow external connectivity.\n\n  - GCE Network Connectivity Tests:\n      - Runs a VPC network connectivity test and reports the result.\n\n  - NATGW Checks:\n      - For source nics without an External IP address, verify the VM is served\n        by a Public NAT Gateway and check there are no issues on the NATGW.\n    \"\"\"\n\n  parameters = {\n      flags.PROJECT_ID: {\n          'type': str,\n          'help': 'The Project ID of the resource under investigation',\n          'required': True\n      },\n      flags.NAME: {\n          'type': str,\n          'help': 'The name of the GCE Instance',\n          'group': 'instance',\n          'deprecated': True,\n          'new_parameter': 'instance_name'\n      },\n      flags.INSTANCE_NAME: {\n          'type': str,\n          'help': 'The name of the GCE Instance',\n          'group': 'instance',\n          'required': True\n      },\n      flags.DEST_IP: {\n          'type': ipaddress.IPv4Address,\n          'help': 'External IP the VM is connecting to',\n          'required': True\n      },\n      flags.DEST_PORT: {\n          'type': int,\n          'help': 'External IP the VM is connecting to',\n          'default': 443\n      },\n      flags.PROTOCOL_TYPE: {\n          'type': str,\n          'help': 'Protocol used to connect to SSH',\n          'default': 'tcp',\n      },\n      flags.SRC_NIC: {\n          'type': str,\n          'help': 'VM source NIC',\n          'required': True\n      },\n      flags.ZONE: {\n          'type': str,\n          'help': 'The zone of the target GCE Instance',\n          'required': True\n      }\n  }\n\n  def legacy_parameter_handler(self, parameters):\n    if flags.NAME in parameters:\n      parameters[flags.INSTANCE_NAME] = parameters.pop(flags.NAME)\n\n  def build_tree(self):\n    \"\"\"Construct the diagnostic tree with appropriate steps.\"\"\"\n    # Instantiate step classes\n    start = VmExternalIpConnectivityStart()\n    has_external_ip = VmHasExternalIp()\n    # Check that the networkmanagement api is enabled\n    service_api_status_check = gcp_gs.ServiceApiStatusCheck()\n    service_api_status_check.api_name = 'networkmanagement'\n    service_api_status_check.project_id = op.get(flags.PROJECT_ID)\n    service_api_status_check.expected_state = gcp_gs.constants.APIState.ENABLED\n\n    # add to the debugging tree\n    self.add_start(start)\n    # Describe the step relationships\n    self.add_step(parent=start, child=service_api_status_check)\n    self.add_step(parent=service_api_status_check, child=has_external_ip)\n    # Ending your runbook\n    self.add_end(VmExternalIpConnectivityEnd())\n\n\nclass VmExternalIpConnectivityStart(runbook.StartStep):\n  \"\"\"Start VM external connectivity checks\"\"\"\n\n  def execute(self):\n    \"\"\"Starting VM external connectivity diagnostics\"\"\"\n    project = crm.get_project(op.get(flags.PROJECT_ID))\n    try:\n      vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID),\n                            zone=op.get(flags.ZONE),\n                            instance_name=op.get(flags.INSTANCE_NAME))\n    except googleapiclient.errors.HttpError:\n      op.add_skipped(\n          project,\n          reason=('Instance {} does not exist in zone {} or project {}').format(\n              op.get(flags.INSTANCE_NAME), op.get(flags.ZONE),\n              op.get(flags.PROJECT_ID)))\n    else:\n      if vm:\n        # Check for instance id and instance name\n        if not op.get(flags.ID):\n          op.put(flags.ID, vm.id)\n\n    # Check that the user passed in a valid source NIC on the VM\n    if not util.is_valid_nic(op.get(flags.SRC_NIC)):\n      op.add_failed(\n          vm,\n          reason=\n          (f'{op.get(flags.SRC_NIC)} is not a valid nic on the the VM {vm.name}.'\n          ),\n          remediation='Run using a valid nic.')\n    else:\n      # get the networkIP of the NIC\n      for interface in vm.get_network_interfaces:\n        if interface['name'] == op.get(flags.SRC_NIC):\n          network_ip = interface['networkIP']\n          op.put(flags.SRC_IP, network_ip)\n\n    # Check that the user has provided a valid external IP address.\n    if op.get(flags.DEST_IP):\n      if ipaddress.IPv4Address(op.get(flags.DEST_IP)).is_private:\n        op.add_failed(\n            op.get(flags.DEST_IP),\n            reason=\n            f'{op.get(flags.DEST_IP)} is not a public/external ip address.',\n            remediation='Run using a valid public/external ip address.')\n\n    # Check that the user has provided a port number\n    if not op.get(flags.DEST_PORT):\n      op.add_failed(\n          op.get(flags.DEST_PORT),\n          reason=f'{op.get(flags.DEST_PORT)} is not a valid port address.',\n          remediation='Run using a valid destination port.')\n\n\nclass VmHasExternalIp(runbook.Gateway):\n  \"\"\"Checks if the source NIC provided has an external IP address or not.\n\n  Based on the source NIC, IP address type, diagnostic process would be directed towards\n  troubleshooting NATGW or direct external connectivity\n  \"\"\"\n\n  def execute(self):\n    \"\"\"Checking if the source NIC has an associated external IP address.\"\"\"\n\n    vm = gce.get_instance(project_id=op.get(flags.PROJECT_ID),\n                          zone=op.get(flags.ZONE),\n                          instance_name=op.get(flags.INSTANCE_NAME))\n\n    # If this an interface without an external IP address run checks for external interface\n    if util.is_external_ip_on_nic(vm.get_network_interfaces,\n                                  op.get(flags.SRC_NIC)):\n      op.info(\n          f'The source NIC {op.get(flags.SRC_NIC)} on the VM has an External IP address,'\n          f'checking direct connectivity to external IP {op.get(flags.DEST_IP)}'\n      )\n      self.add_child(ExternalInterfaceCheck())\n    else:\n      op.info(\n          f'The source NIC {op.get(flags.SRC_NIC)} on the VM does not have an External IP address,'\n          f'checking connectivity to external IP {op.get(flags.DEST_IP)} via a NATGW'\n      )\n      self.add_child(InternalInterfaceCheck())\n\n\nclass VmExternalIpConnectivityEnd(runbook.EndStep):\n  \"\"\"Concludes the VM External IP connectivity diagnostics process.\n\n  If external connectivity issues persist, it directs the user to helpful\n  resources and suggests contacting support with a detailed report.\n  \"\"\"\n\n  def execute(self):\n    \"\"\"Finalize VM external connectivity diagnostics.\"\"\"\n    if not config.get(flags.INTERACTIVE_MODE):\n      response = op.prompt(kind=op.CONFIRMATION,\n                           message=\"\"\"\n          Are you able to connect to external IP from the VM {}:\n          after taking the remediation steps outlined.\n          \"\"\".format(op.get(flags.INSTANCE_NAME)),\n                           choice_msg='Enter an option: ')\n      if response == op.NO:\n        op.info(message=op.END_MESSAGE)\n\n\nclass ExternalInterfaceCheck(runbook.CompositeStep):\n  \"\"\"Check connectivity to external endpoint when the VM has an external IP address.\n\n  This step checks firewall and routing rules exist to allow for connectivity to the\n  external IP address. It also runs and reports a connectivity test.\n  \"\"\"\n\n  def execute(self):\n    \"\"\"Checking for connectivity from NIC with external IP address.\"\"\"\n\n    # Check there is egress rule permitting egress traffic to the destination/remote IP\n    if op.get(flags.DEST_IP):\n      dest_ip_egress_firewall_check = vpc_gs.VpcFirewallCheck()\n      dest_ip_egress_firewall_check.traffic = 'egress'\n      dest_ip_egress_firewall_check.template = 'vm_external_ip_connectivity::firewall_exists'\n      self.add_child(dest_ip_egress_firewall_check)\n      # Check VPC routes that routing rule to default internet gateway exists\n      dest_route_check = vpc_gs.VpcRouteCheck()\n      dest_route_check.template = 'vm_external_ip_connectivity::vpc_route_check_for_nexthop_gateway'\n      self.add_child(dest_route_check)\n      # run a connectivity test to the external IP address from the VM source IP address.\n      connectivity_test = vpc_gs.VmExternalIpConnectivityTest()\n      connectivity_test.template = 'vm_external_ip_connectivity::connectivity_test'\n      self.add_child(connectivity_test)\n      self.add_child(VmExternalIpConnectivityEnd())\n\n\nclass InternalInterfaceCheck(runbook.CompositeStep):\n  \"\"\"Check connectivity to external endpoint when the VM source NIC is an internal interface.\n\n  This step checks firewall and routing rules exist to allow for connectivity to the external\n  IP address. It also runs and reports a connectivity test.\n  \"\"\"\n\n  def execute(self):\n    \"\"\"Checking for connectivity from NIC with only a private IP address.\"\"\"\n\n    # Check there is egress rule permitting egress traffic to the destination/remote IP.\n    if op.get(flags.DEST_IP):\n\n      # check the VPC Firewall rules.\n      dest_ip_egress_firewall_check = vpc_gs.VpcFirewallCheck()\n      dest_ip_egress_firewall_check.traffic = 'egress'\n      dest_ip_egress_firewall_check.template = 'vm_external_ip_connectivity::firewall_exists'\n      self.add_child(dest_ip_egress_firewall_check)\n\n      # Check VPC routes that routing rule to default internet gateway exists.\n      dest_route_check = vpc_gs.VpcRouteCheck()\n      dest_route_check.template = 'vm_external_ip_connectivity::vpc_route_check_for_nexthop_gateway'\n      self.add_child(dest_route_check)\n\n      # run a connectivity test to the external IP address from the VM source IP address.\n      connectivity_test = vpc_gs.VmExternalIpConnectivityTest()\n      connectivity_test.template = 'vm_external_ip_connectivity::connectivity_test'\n      self.add_child(connectivity_test)\n\n      # run a connectivity test to the external IP address from the VM source IP address.\n      nat_ip_exhaustion_check = nat_gs.NatIpExhaustionCheck()\n      self.add_child(nat_ip_exhaustion_check)\n\n      # run resource exhaustion check to for OUT_OF_RESOURCES or ENDPOINT_INDEPENDENCE_CONFLICT.\n      nat_resource_exhaustion_check = nat_gs.NatResourceExhaustionCheck()\n      self.add_child(nat_resource_exhaustion_check)\n\n      # Check received packet dropped count metric on the NATGW level for elevated count.\n      nat_dropped_received_packet_check = nat_gs.NatDroppedReceivedPacketCheck()\n      self.add_child(nat_dropped_received_packet_check)\n\n      # End the diagnostic tree.\n      self.add_child(VmExternalIpConnectivityEnd())\n"
  },
  {
    "path": "gcpdiag/runbook/vpc/vm_external_ip_connectivity_test.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test class for vpc/VmExternalIpConnectivity\"\"\"\n\nfrom gcpdiag import config\nfrom gcpdiag.runbook import snapshot_test_base, vpc\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = vpc\n  runbook_name = 'vpc/vm-external-ip-connectivity'\n  config.init({'auto': True, 'interface': 'cli'})\n\n  rule_parameters = [{\n      'project_id': 'gcpdiag-vpc2-runbook',\n      'instance_name': 'public-linux-valid',\n      'zone': 'us-central1-a',\n      'dest_ip': '151.101.3.5',\n      'src_nic': 'nic0',\n      'dest_port': '443'\n  }, {\n      'project_id': 'gcpdiag-vpc2-runbook',\n      'name': 'public-linux-faulty',\n      'zone': 'us-central1-a',\n      'dest_ip': '151.101.3.5',\n      'src_nic': 'nic0',\n      'dest_port': '443'\n  }]\n"
  },
  {
    "path": "gcpdiag/runbook/vpn/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/runbook/vpn/constants.py",
    "content": "# Copyright 2025 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Constants for VPN Tunnel Check runbook.\"\"\"\n\n# pylint: disable=unused-wildcard-import, wildcard-import\n\n# https://docs.cloud.google.com/network-connectivity/docs/vpn/quotas#limits\nPACKET_PER_SECOND_LIMIT = 250000\n"
  },
  {
    "path": "gcpdiag/runbook/vpn/flags.py",
    "content": "# Copyright 2025 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Flags used by VPN runbooks.\"\"\"\n# pylint: disable=unused-wildcard-import, wildcard-import\nfrom gcpdiag.runbook.gcp.flags import *\n\nTUNNEL = 'tunnel'\n"
  },
  {
    "path": "gcpdiag/runbook/vpn/generalized_steps.py",
    "content": "# Copyright 2025 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"VPN Generalized Runbook Steps\"\"\"\n"
  },
  {
    "path": "gcpdiag/runbook/vpn/generalized_steps_test.py",
    "content": "# Copyright 2025 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Tests for generalized steps used in VPN runbooks.\"\"\"\n"
  },
  {
    "path": "gcpdiag/runbook/vpn/snapshots/vpn_tunnel_check.txt",
    "content": "custom_flag=vpn,name=vpn-tunnel-1,project_id=gcpdiag-vpn1-aaaa,region=europe-west4-a\n\nvpn/vpn-tunnel-check: Runbook for diagnosing issues with a Cloud VPN Tunnel.\n\nThis runbook performs several checks on a specified Cloud VPN tunnel:\n-   **VPN Tunnel Status Check**: Verifies if the VPN tunnel is in an\n    'ESTABLISHED' state.\n-   **Tunnel Down Status Reason**: If the tunnel is not established, it queries\n    Cloud Logging for specific error messages and provide remediations .\n-   **Tunnel Packet Drop Check**: If the tunnel is established, it examines\n    monitoring metrics for various types of packet drops (e.g., due to MTU,\n    invalid SA, throttling) and provides remediation based on the drop reason.\n-   **Tunnel Packet Utilization Check**: Analyzes packet rates to identify if\n    the tunnel is hitting max packet per second limits.\n\n[START]: Start the tunnel status api call\n[INFO]: name: gcpdiag test - gce1, id: gcpdiag-vpn1-aaaa, number: 12340001\n\n   - gcpdiag-vpn1-aaaa/vpn-tunnel-1                                       [OK]\n     [REASON]\n     VPN tunnel 'projects/gcpdiag-vpn1-aaaa/regions/europe-west4-a/vpnTunnels/vpn-tunnel-1' in project 'gcpdiag-vpn1-aaaa' is in status 'ESTABLISHED'.\n\n[AUTOMATED STEP]: Check VPN tunnel logs and status.\n\n   - gcpdiag-vpn1-aaaa/vpn-tunnel-1                                       [OK]\n     [REASON]\n     VPN tunnel 'projects/gcpdiag-vpn1-aaaa/regions/europe-west4-a/vpnTunnels/vpn-tunnel-1' in project 'gcpdiag-vpn1-aaaa' is in status 'ESTABLISHED': No relevant logs found during the chosen TimeFrame\n\n[AUTOMATED STEP]: Start the tunnel Packet drop api call\n\n   - gcpdiag-vpn1-aaaa/vpn-tunnel-1                                       [OK]\n     [REASON]\n     VPN tunnel 'projects/gcpdiag-vpn1-aaaa/regions/europe-west4-a/vpnTunnels/vpn-tunnel-1' in project 'gcpdiag-vpn1-aaaa' is in status 'ESTABLISHED': No Packet drop during the chosen TimeFrame\n\n[AUTOMATED STEP]: Start the tunnel Packet api call\n\n   - gcpdiag-vpn1-aaaa/vpn-tunnel-1                                       [OK]\n     [REASON]\n     VPN tunnel 'projects/gcpdiag-vpn1-aaaa/regions/europe-west4-a/vpnTunnels/vpn-tunnel-1' in project 'gcpdiag-vpn1-aaaa' is in status 'ESTABLISHED': Packet did not reach max value during the chosen TimeFrame\n\n[END]: Finalizing connectivity diagnostics.\n[INFO]: If any further debugging is needed, consider please contact GCP support for further troubleshooting\n\n\ncustom_flag=vpn,name=vpn-tunnel-down,project_id=gcpdiag-vpn1-aaaa,region=europe-west4-a\n\nvpn/vpn-tunnel-check: Runbook for diagnosing issues with a Cloud VPN Tunnel.\n\nThis runbook performs several checks on a specified Cloud VPN tunnel:\n-   **VPN Tunnel Status Check**: Verifies if the VPN tunnel is in an\n    'ESTABLISHED' state.\n-   **Tunnel Down Status Reason**: If the tunnel is not established, it queries\n    Cloud Logging for specific error messages and provide remediations .\n-   **Tunnel Packet Drop Check**: If the tunnel is established, it examines\n    monitoring metrics for various types of packet drops (e.g., due to MTU,\n    invalid SA, throttling) and provides remediation based on the drop reason.\n-   **Tunnel Packet Utilization Check**: Analyzes packet rates to identify if\n    the tunnel is hitting max packet per second limits.\n\n[START]: Start the tunnel status api call\n[INFO]: name: gcpdiag test - gce1, id: gcpdiag-vpn1-aaaa, number: 12340001\n[AUTOMATED STEP]: Check VPN tunnel logs and status.\n\n   - gcpdiag-vpn1-aaaa/vpn-tunnel-down                                    [FAIL]\n     [REASON]\n     VPN tunnel 'projects/gcpdiag-vpn1-aaaa/regions/europe-west4-a/vpnTunnels/vpn-tunnel-down' in project 'gcpdiag-vpn1-aaaa' is in status 'FIRST_HANDSHAKE': Tunnel is not established, but no specific error logs were found.\n\n     [REMEDIATION]\n     Try broadening the timeframe or checking the peer device logs.\n\n[AUTOMATED STEP]: Start the tunnel Packet drop api call\n\n   - gcpdiag-vpn1-aaaa/vpn-tunnel-down                                    [SKIP]\n     [REASON]\n     Check Skipped: Tunnel not Established\n\n[AUTOMATED STEP]: Start the tunnel Packet api call\n\n   - gcpdiag-vpn1-aaaa/vpn-tunnel-down                                    [SKIP]\n     [REASON]\n     Tunnel not Established\n\n[END]: Finalizing connectivity diagnostics.\n[INFO]: If any further debugging is needed, consider please contact GCP support for further troubleshooting\n\n\n"
  },
  {
    "path": "gcpdiag/runbook/vpn/templates/vpn_check.jinja",
    "content": "{% block tunnel_success_reason%}\nVPN tunnel '{tunnel}' in project '{project}' is in status '{tunnel.status}'.\n{% endblock tunnel_success_reason %}\n{% block log_explorer_success_reason%}\nVPN tunnel '{tunnel}' in project '{project}' is in status '{tunnel.status}': No relevant logs found during the chosen TimeFrame\n{% endblock log_explorer_success_reason %}\n{% block tunnel_failure_reason%}\nVPN tunnel '{tunnel}' in project '{project}': {issue}\n{% endblock tunnel_failure_reason%}\n{% block tunnel_failure_remediation%}\n{remediations}\n{% endblock tunnel_failure_remediation %}\n\n{% block log_explorer_failure_reason%}\nVPN tunnel '{tunnel}' in project '{project}' is in status '{tunnel.status}': {issue}\n{% endblock log_explorer_failure_reason %}\n{% block log_explorer_skipped_reason%}\nPlease verify the tunnel and project details provided are accurate.\n{% endblock log_explorer_skipped_reason %}\n{% block log_explorer_failure_remediation%}\n{remediations}\n{% endblock log_explorer_failure_remediation %}\n{% block packet_drop_check_success_reason%}\nVPN tunnel '{tunnel}' in project '{project}' is in status '{tunnel.status}': No Packet drop during the chosen TimeFrame\n{% endblock packet_drop_check_success_reason %}\n{% block packet_drop_check_failure_reason%}\n{issue}\n{% endblock packet_drop_check_failure_reason%}\n{% block packet_drop_check_failure_remediation%}\n{remediations}\n{% endblock packet_drop_check_failure_remediation %}\n{% block packet_drop_check_skipped_reason%}\n{issue}\n{% endblock packet_drop_check_skipped_reason %}\n{% block packet_check_success_reason%}\nVPN tunnel '{tunnel}' in project '{project}' is in status '{tunnel.status}': Packet did not reach max value during the chosen TimeFrame\n{% endblock packet_check_success_reason %}\n{% block packet_check_failure_reason%}\nVPN tunnel '{tunnel}' in project '{project}': {issue}\n{% endblock packet_check_failure_reason%}\n{% block packet_check_failure_remediation%}\n{remediations}\n{% endblock packet_check_failure_remediation %}\n{% block packet_check_skipped_reason%}\n{issue}\n{% endblock packet_check_skipped_reason %}\n"
  },
  {
    "path": "gcpdiag/runbook/vpn/vpn_tunnel_check.py",
    "content": "# Copyright 2025 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Runbook for diagnosing issues with a Cloud VPN Tunnel.\"\"\"\n\nfrom datetime import datetime\n\nfrom googleapiclient import errors as gapi_errors\n\nfrom gcpdiag import runbook, utils\nfrom gcpdiag.queries import crm, logs, monitoring, vpn\nfrom gcpdiag.runbook import op\nfrom gcpdiag.runbook.vpn import constants, flags\n\n\nclass VpnTunnelCheck(runbook.DiagnosticTree):\n  \"\"\"Runbook for diagnosing issues with a Cloud VPN Tunnel.\n\nThis runbook performs several checks on a specified Cloud VPN tunnel:\n-   **VPN Tunnel Status Check**: Verifies if the VPN tunnel is in an\n    'ESTABLISHED' state.\n-   **Tunnel Down Status Reason**: If the tunnel is not established, it queries\n    Cloud Logging for specific error messages and provide remediations .\n-   **Tunnel Packet Drop Check**: If the tunnel is established, it examines\n    monitoring metrics for various types of packet drops (e.g., due to MTU,\n    invalid SA, throttling) and provides remediation based on the drop reason.\n-   **Tunnel Packet Utilization Check**: Analyzes packet rates to identify if\n    the tunnel is hitting max packet per second limits.\n\"\"\"\n\n  parameters = {\n      flags.PROJECT_ID: {\n          'type': str,\n          'help': 'The Project ID of the resource under investigation',\n          'required': True\n      },\n      flags.REGION: {\n          'type': str,\n          'help': 'The region where the VPN Tunnel is located',\n          'required': True,\n      },\n      flags.NAME: {\n          'type': str,\n          'help': 'Name of the VPN Tunnel',\n          'required': True,\n      },\n      flags.START_TIME: {\n          'type':\n              datetime,\n          'help':\n              'The start window to investigate BGP flap. Format: YYYY-MM-DDTHH:MM:SSZ'\n      },\n      flags.END_TIME: {\n          'type':\n              datetime,\n          'help':\n              'The end window for the investigation. Format: YYYY-MM-DDTHH:MM:SSZ'\n      },\n      flags.TUNNEL: {\n          'type': str,\n          'help': 'This Flag will be added Automatically',\n          'required': False,\n      },\n  }\n\n  def build_tree(self):\n    \"\"\"Construct the diagnostic tree with appropriate steps.\"\"\"\n    # Instantiate your step classes\n    start = VpnTunnelStatus()\n    # add them to your tree\n    self.add_start(start)\n    self.add_step(parent=start, child=TunnelDownStatusReason())\n    self.add_step(parent=start, child=TunnelPacketsDropCheck())\n    self.add_step(parent=start, child=TunnelPacketsUtilizationCheck())\n    self.add_end(VpnTunnelCheckEnd())\n\n\nclass VpnTunnelStatus(runbook.StartStep):\n  \"\"\"Checking the VPN Tunnel status\"\"\"\n\n  template = 'vpn_check::tunnel'\n\n  def execute(self):\n    \"\"\"Start the tunnel status api call\"\"\"\n    proj = crm.get_project(op.get(flags.PROJECT_ID))\n    if proj:\n      op.info(f'name: {proj.name}, id: {proj.id}, number: {proj.number}')\n\n    try:\n      project_id = op.get(flags.PROJECT_ID)\n      name = op.get(flags.NAME)\n      region = op.get(flags.REGION)\n\n      tunnel = vpn.get_vpn(project_id, name, region)\n      op.put(flags.TUNNEL, tunnel.full_path)\n\n      if tunnel.status == 'ESTABLISHED':\n        op.add_ok(tunnel,\n                  reason=op.prep_msg(op.SUCCESS_REASON,\n                                     tunnel=tunnel,\n                                     project=project_id))\n      else:\n        op.add_failed(tunnel,\n                      reason=op.prep_msg(\n                          op.FAILURE_REASON,\n                          tunnel=tunnel,\n                          project=project_id,\n                          issue=f'Tunnel status is {tunnel.status}',\n                          status=tunnel.status),\n                      remediation=op.prep_msg(op.FAILURE_REMEDIATION,\n                                              tunnel=tunnel,\n                                              project=project_id,\n                                              status=tunnel.status))\n      return True\n\n    except (gapi_errors.HttpError, utils.GcpApiError) as e:\n      op.add_skipped(\n          proj,\n          reason=op.prep_msg(\n              op.SKIPPED_REASON,\n              tunnel=name,\n              project=project_id,\n              issue=(f'API call failed {e} : Check that the provided '\n                     'tunnel and project information are correct')))\n      return False\n\n\ndef _get_combined_metric_data(project_id, query_ingress, query_egress,\n                              start_time, end_time):\n  \"\"\"Helper to fetch and merge ingress/egress metrics by timestamp.\"\"\"\n  try:\n    m_ingress = monitoring.queryrange(project_id, query_ingress, start_time,\n                                      end_time)\n  except (gapi_errors.HttpError, monitoring.GcpApiError) as e:\n    op.warning(f\"Failed to query ingress metrics: {e}\")\n    m_ingress = {}\n  try:\n    m_egress = monitoring.queryrange(project_id, query_egress, start_time,\n                                     end_time)\n  except (gapi_errors.HttpError, monitoring.GcpApiError) as e:\n    op.warning(f\"Failed to query egress metrics: {e}\")\n    m_egress = {}\n\n  def extract_values(response):\n    results = response.get('data', {}).get('result', [])\n    if not results or 'values' not in results[0]:\n      return {}\n    return {t: float(v) for t, v in results[0].get('values', [])}\n\n  res_in = extract_values(m_ingress)\n  res_out = extract_values(m_egress)\n\n  if not res_in and not res_out:\n    return []\n\n  all_timestamps = set(res_in.keys()).union(set(res_out.keys()))\n\n  combined = []\n  for ts in all_timestamps:\n    val_in = res_in.get(ts, 0.0)\n    val_out = res_out.get(ts, 0.0)\n    combined.append({\n        'timestamp': datetime.fromtimestamp(ts).isoformat(),\n        'total': val_in + val_out\n    })\n  return combined\n\n\nclass TunnelPacketsUtilizationCheck(runbook.Step):\n  \"\"\"Checking the VPN Tunnel Packet Utilization\"\"\"\n  template = 'vpn_check::packet_check'\n\n  def execute(self):\n    \"\"\"Start the tunnel Packet api call\"\"\"\n    # tunnel = op.get(flags.TUNNEL)\n    project_id = op.get(flags.PROJECT_ID)\n    name, region = op.get(flags.NAME), op.get(flags.REGION)\n    try:\n      tunnel = vpn.get_vpn(project_id, name, region)\n    except utils.GcpApiError as e:\n      op.add_skipped(None,\n                     reason=op.prep_msg(op.SKIPPED_REASON,\n                                        project=project_id,\n                                        issue=f'Failed to get tunnel: {e}'))\n      return\n\n    if tunnel.status != 'ESTABLISHED':\n      op.add_skipped(tunnel,\n                     reason=op.prep_msg(op.SKIPPED_REASON,\n                                        project=project_id,\n                                        issue='Tunnel not Established'))\n      return\n\n    q_in = (\n        f'sum(rate({{\"__name__\"=\"vpn.googleapis.com/network/received_packets_count\",'\n        f'\"tunnel_name\"=\"{name}\",\"region\"=\"{region}\"}}[1m]))')\n    q_out = (\n        f'sum(rate({{\"__name__\"=\"vpn.googleapis.com/network/sent_packets_count\",'\n        f'\"tunnel_name\"=\"{name}\",\"region\"=\"{region}\"}}[1m]))')\n\n    combined_data = _get_combined_metric_data(project_id, q_in, q_out,\n                                              op.get(flags.START_TIME),\n                                              op.get(flags.END_TIME))\n\n    if not combined_data:\n      op.add_failed(tunnel,\n                    reason=op.prep_msg(op.FAILURE_REASON,\n                                       tunnel=tunnel,\n                                       project=project_id,\n                                       issue='has no traffic'),\n                    remediation=op.prep_msg(\n                        op.FAILURE_REMEDIATION,\n                        remediations='Check route configuration'))\n      return\n\n    exceeded = [\n        d for d in combined_data\n        if d['total'] >= constants.PACKET_PER_SECOND_LIMIT\n    ]\n\n    if exceeded:\n      op.add_failed(\n          tunnel,\n          reason=op.prep_msg(op.FAILURE_REASON,\n                             tunnel=tunnel,\n                             project=project_id,\n                             issue=f'Reached limit {len(exceeded)} times'),\n          remediation=op.prep_msg(op.FAILURE_REMEDIATION,\n                                  remediations='Reduce rate or add tunnels'))\n    else:\n      op.add_ok(tunnel,\n                reason=op.prep_msg(op.SUCCESS_REASON,\n                                   tunnel=tunnel,\n                                   project=project_id))\n\n\nclass TunnelPacketsDropCheck(runbook.Step):\n  \"\"\"Checking the VPN Tunnel Packet Drop \"\"\"\n  template = 'vpn_check::packet_drop_check'\n\n  DROP_REASONS = {\n      'dont_fragment_icmp': {\n          'reason':\n              'Dropped ICMP packet larger than MTU with DF bit set (PMTUD).',\n          'remediation':\n              'Ensure ICMP packets for PMTUD do not exceed effective MTU.'\n      },\n      'dont_fragment_nonfirst_fragment': {\n          'reason':\n              'Non-first fragment of UDP/ESP packet exceeds MTU with DF bit set.',\n          'remediation':\n              'Verify application fragmentation handling or reduce IP packet size.'\n      },\n      'exceeds_mtu': {\n          'reason':\n              'First fragment of UDP/ESP packet exceeds MTU with DF bit set.',\n          'remediation':\n              'Reduce effective MTU (usually 1460 bytes) or permit fragmentation.'\n      },\n      'invalid': {\n          'reason':\n              'Dropped due to invalid state (corruption or unexpected sequence).',\n          'remediation':\n              'Review peer VPN config and capture traffic to check for corruption.'\n      },\n      'sa_expired': {\n          'reason':\n              'Packet used unknown or expired SA (negotiation failure).',\n          'remediation':\n              'Sync IKE/IPsec SA lifetimes on both peers; consider a tunnel reset.'\n      },\n      'sequence_number_lost': {\n          'reason':\n              'Sequence number significantly larger than expected (packet loss).',\n          'remediation':\n              'Investigate network path for congestion or connectivity issues.'\n      },\n      'suspected_replay': {\n          'reason':\n              'ESP packet received with a sequence number already processed.',\n          'remediation':\n              'Check for network devices (load balancers) duplicating or reordering packets.'\n      },\n      'throttled': {\n          'reason':\n              'Packet dropped due to excessive load on Cloud VPN gateway.',\n          'remediation':\n              'Reduce traffic or provision additional tunnels/Cloud Interconnect.'\n      },\n      'unknown': {\n          'reason':\n              'Packet dropped for an uncategorized reason.',\n          'remediation':\n              'Collect logs from both peers and contact Google Cloud support.'\n      }\n  }\n\n  def execute(self):\n    \"\"\"Start the tunnel Packet drop api call\"\"\"\n\n    # tunnel = op.get(flags.TUNNEL)\n    project_id = op.get(flags.PROJECT_ID)\n    name = op.get(flags.NAME)\n    region = op.get(flags.REGION)\n    end_time = op.get(flags.END_TIME)\n    start_time = op.get(flags.START_TIME)\n    try:\n      tunnel = vpn.get_vpn(project_id, name, region)\n    except utils.GcpApiError as e:\n      op.add_skipped(None,\n                     reason=op.prep_msg(op.SKIPPED_REASON,\n                                        project=project_id,\n                                        issue=f'Failed to get tunnel: {e}'))\n      return\n\n    if tunnel.status != 'ESTABLISHED':\n      op.add_skipped(tunnel,\n                     reason=op.prep_msg(\n                         op.SKIPPED_REASON,\n                         project=project_id,\n                         issue='Check Skipped: Tunnel not Established'))\n      return\n\n    issue_found = False\n    flows = [('egress', 'sent_packets_count'),\n             ('ingress', 'received_packets_count')]\n\n    for direction_label, metric_suffix in flows:\n      query = (\n          f'sum by (status) (rate({{\"__name__\" = \"vpn.googleapis.com/network/{metric_suffix}\",'\n          f'\"monitored_resource\" = \"vpn_gateway\",\"tunnel_name\" = \"{name}\",'\n          f'\"region\" = \"{region}\"}}[1m]))')\n      try:\n        status_drop = monitoring.queryrange(project_id, query, start_time,\n                                            end_time)\n      except (gapi_errors.HttpError, monitoring.GcpApiError) as e:\n        op.warning(\n            f\"Failed to query packet drop metrics for {direction_label}: {e}\")\n        continue\n      for metric_data in status_drop.get('data', {}).get('result', []):\n        status = metric_data['metric'].get('status')\n\n        if status == 'successful' or status not in self.DROP_REASONS:\n          continue\n\n        drops = [[datetime.fromtimestamp(t).isoformat(),\n                  float(v)] for t, v in metric_data['values'] if float(v) >= 1]\n\n        if drops:\n          issue_found = True\n          diag = self.DROP_REASONS[status]\n          reason_msg = diag['reason']\n          base_issue = (\n              f'Project {project_id} on VPN {name} has {direction_label} drops '\n              f'({status}). Times: {drops}. Reason: {reason_msg}')\n\n          op.add_failed(tunnel,\n                        reason=op.prep_msg(op.FAILURE_REASON,\n                                           tunnel=tunnel,\n                                           project=project_id,\n                                           issue=base_issue),\n                        remediation=op.prep_msg(\n                            op.FAILURE_REMEDIATION,\n                            tunnel=tunnel,\n                            project=project_id,\n                            remediations=diag['remediation']))\n\n    if not issue_found:\n      op.add_ok(tunnel,\n                reason=op.prep_msg(op.SUCCESS_REASON,\n                                   tunnel=tunnel,\n                                   project=project_id))\n\n\nclass TunnelDownStatusReason(runbook.Step):\n  \"\"\"Checks the status of the tunnel and provides reasons for failure.\"\"\"\n\n  template = 'vpn_check::log_explorer'\n\n  def execute(self):\n    \"\"\"Check VPN tunnel logs and status.\"\"\"\n    project_id = op.get(flags.PROJECT_ID)\n    name, region = op.get(flags.NAME), op.get(flags.REGION)\n    end_time = op.get(flags.END_TIME)\n    start_time = op.get(flags.START_TIME)\n    try:\n      tunnel = vpn.get_vpn(project_id, name, region)\n    except utils.GcpApiError as e:\n      op.add_skipped(None,\n                     reason=op.prep_msg(op.SKIPPED_REASON,\n                                        project=project_id,\n                                        issue=f'Failed to get tunnel: {e}'))\n      return\n\n    reasons = [\n        '\"establishing IKE_SA failed, peer not responding\"',\n        '\"Remote traffic selectors narrowed\"',\n        '\"Local traffic selectors narrowed\"', '\"Proposal mismatch in CHILD SA\"',\n        '(\"Starting VPN Task maintenance\" AND \"VPN Task maintenance Completed\")'\n    ]\n\n    filter_str = (f'resource.type = \"vpn_gateway\" AND '\n                  f'labels.tunnel_id = \"{tunnel.id}\" AND '\n                  f\"({' OR '.join(reasons)})\")\n\n    fetched_logs = logs.realtime_query(project_id=project_id,\n                                       filter_str=filter_str,\n                                       start_time=start_time,\n                                       end_time=end_time)\n\n    log_text = ' '.join([l.message for l in fetched_logs])\n    found_issue = False\n\n    if 'establishing IKE_SA failed' in log_text:\n      found_issue = True\n      op.add_failed(\n          tunnel,\n          reason=op.prep_msg(\n              op.FAILURE_REASON,\n              tunnel=tunnel,\n              project=project_id,\n              issue=\n              'IKE_SA failure: Peer not responding. Possible firewall blocking traffic.'\n          ),\n          remediation=op.prep_msg(\n              op.FAILURE_REMEDIATION,\n              remediations=\n              'Ensure UDP ports 500/4500 are open, and check peer reachability.'\n          ))\n\n    if 'Remote traffic selectors narrowed' in log_text:\n      found_issue = True\n      op.add_failed(\n          tunnel,\n          reason=op.prep_msg(\n              op.FAILURE_REASON,\n              tunnel=tunnel,\n              project=project_id,\n              issue='Remote traffic selectors narrowed by peer.'),\n          remediation=op.prep_msg(\n              op.FAILURE_REMEDIATION,\n              remediations=\n              'Match Cloud VPN remote selectors with peer\\'s local selectors.'))\n\n    if 'Local traffic selectors narrowed' in log_text:\n      found_issue = True\n      op.add_failed(\n          tunnel,\n          reason=op.prep_msg(op.FAILURE_REASON,\n                             tunnel=tunnel,\n                             project=project_id,\n                             issue='Local traffic selectors mismatch.'),\n          remediation=op.prep_msg(\n              op.FAILURE_REMEDIATION,\n              remediations=\n              'Ensure Cloud VPN local selectors match peer\\'s remote selectors.'\n          ))\n\n    if 'Proposal mismatch in CHILD SA' in log_text:\n      found_issue = True\n      op.add_failed(\n          tunnel,\n          reason=op.prep_msg(op.FAILURE_REASON,\n                             tunnel=tunnel,\n                             project=project_id,\n                             issue='IPsec Phase 2 proposal mismatch.'),\n          remediation=op.prep_msg(\n              op.FAILURE_REMEDIATION,\n              remediations=\n              'Align Phase 2 settings (Encryption/DH groups) on both ends.'))\n\n    if 'VPN Task maintenance' in log_text:\n      found_issue = True\n      op.add_failed(\n          tunnel,\n          reason=op.prep_msg(\n              op.FAILURE_REASON,\n              tunnel=tunnel,\n              project=project_id,\n              issue='VPN maintenance occurred during this window.'),\n          remediation=op.prep_msg(\n              op.FAILURE_REMEDIATION,\n              remediations=\n              'Tunnels usually recover automatically. Contact Support if it stays down.'\n          ))\n\n    if not found_issue:\n      if tunnel.status != 'ESTABLISHED':\n        op.add_failed(\n            tunnel,\n            reason=op.prep_msg(\n                op.FAILURE_REASON,\n                tunnel=tunnel,\n                project=project_id,\n                issue=\n                'Tunnel is not established, but no specific error logs were found.'\n            ),\n            remediation=op.prep_msg(\n                op.FAILURE_REMEDIATION,\n                remediations=\n                'Try broadening the timeframe or checking the peer device logs.'\n            ))\n      else:\n        op.add_ok(tunnel,\n                  reason=op.prep_msg(op.SUCCESS_REASON,\n                                     tunnel=tunnel,\n                                     project=project_id))\n\n    return True\n\n\nclass VpnTunnelCheckEnd(runbook.EndStep):\n  \"\"\"Concludes the diagnostics process.\"\"\"\n\n  def execute(self):\n    \"\"\"Finalizing connectivity diagnostics.\"\"\"\n    op.info('If any further debugging is needed, '\n            'consider please contact GCP support for further troubleshooting')\n"
  },
  {
    "path": "gcpdiag/runbook/vpn/vpn_tunnel_check_test.py",
    "content": "# Copyright 2025 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Test class for vpn/Vpn_tunnel_check\"\"\"\n\nfrom gcpdiag import config\nfrom gcpdiag.runbook import snapshot_test_base, vpn\n\n\nclass Test(snapshot_test_base.RulesSnapshotTestBase):\n  rule_pkg = vpn\n  runbook_name = 'vpn/vpn_tunnel_check'\n  project_id = 'gcpdiag-vpn1-aaaa'\n  config.init({'auto': True, 'interface': 'cli'}, project_id)\n  rule_parameters = [{\n      'project_id': 'gcpdiag-vpn1-aaaa',\n      'region': 'europe-west4-a',\n      'name': 'vpn-tunnel-1',\n      'custom_flag': 'vpn'\n  }, {\n      'project_id': 'gcpdiag-vpn1-aaaa',\n      'region': 'europe-west4-a',\n      'name': 'vpn-tunnel-down',\n      'custom_flag': 'vpn'\n  }]\n"
  },
  {
    "path": "gcpdiag/search/__init__.py",
    "content": ""
  },
  {
    "path": "gcpdiag/search/command.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Search command to look up gcpdiag rules\"\"\"\nimport argparse\nimport heapq\nimport json\nimport logging\nfrom typing import Any, Dict, Iterable, List, Tuple\n\nfrom blessings import Terminal\n\nfrom gcpdiag import config, lint, runbook\nfrom gcpdiag.lint import LintRule\nfrom gcpdiag.lint import command as lint_command\nfrom gcpdiag.runbook import DiagnosticTree\nfrom gcpdiag.runbook import command as runbook_command\nfrom gcpdiag.runbook.output import terminal_output\n\n\ndef _init_search_args_parser() -> argparse.ArgumentParser:\n  \"\"\"Initialize and return the argument parser for the search command.\"\"\"\n  parser = argparse.ArgumentParser(\n      description=\n      'Find gcpdiag rules like runbook and lint rules related to search terms',\n      prog='gcpdiag search')\n\n  parser.add_argument(\n      'search',\n      metavar='SEARCH_TERMS',\n      type=str,\n      nargs='+',\n      help='Search terms to discover gcpdiag rules related to them')\n\n  parser.add_argument('-l',\n                      '--limit-per-type',\n                      metavar='L',\n                      type=int,\n                      default=10,\n                      help='Limit output rules for each rule type')\n\n  parser.add_argument('-t',\n                      '--rule-type',\n                      choices=['lint', 'runbook'],\n                      default=['lint', 'runbook'],\n                      help='Specify the type of rules to search and display')\n\n  parser.add_argument('-p',\n                      '--product',\n                      metavar='PRODUCT',\n                      type=str,\n                      default=[],\n                      action='append',\n                      help='Search only rules in these products')\n\n  parser.add_argument('-f',\n                      '--format',\n                      choices=['table', 'json'],\n                      default='table',\n                      help='Output format')\n\n  return parser\n\n\ndef _load_lint_rules(args) -> Iterable[LintRule]:\n  \"\"\"Load and return all lint rules from the repository.\"\"\"\n  #pylint:disable=protected-access\n  product_patterns = lint_command._parse_rule_pattern(args.product)\n  repo = lint.LintRuleRepository(load_extended=True, include=product_patterns)\n  #pylint:disable=protected-access\n  lint_command._load_repository_rules(repo)\n  return repo.rules_to_run\n\n\ndef _load_runbook_rules() -> Dict[str, DiagnosticTree]:\n  \"\"\"Load and return all runbook rules. \"\"\"\n  #pylint:disable=protected-access\n  runbook_command._load_runbook_rules(runbook.__name__)\n  return runbook.RunbookRegistry\n\n\ndef run(argv=None):\n  \"\"\"Run the search command and return the report.\"\"\"\n  # Initialize argument parser\n  parser = _init_search_args_parser()\n  args = parser.parse_args(argv)\n  # Initialize configuration\n  config.init(vars(args), terminal_output.is_cloud_shell())\n\n  # Setup logging\n  logger = logging.getLogger()\n  logger.handlers = []\n  if config.get('verbose') >= 2:\n    logger.setLevel(logging.DEBUG)\n  else:\n    logger.setLevel(logging.INFO)\n  terminal = terminal_output.TerminalOutput()\n  terminal.display_banner()\n  _search_rules(args)\n\n\ndef _rank_runbook_rules(rules: Dict,\n                        args) -> List[Tuple[int, str, DiagnosticTree]]:\n  \"\"\"Rank runbook rules based on the keywords and return a sorted list.\"\"\"\n  ranked_rules: List[Tuple[int, str, DiagnosticTree]] = []\n  keywords = args.search\n  keywords = [kw.lower() for kw in keywords]\n\n  for name, obj in rules.items():\n    rule = obj(None)\n    if args.product and rule.product not in args.product:\n      continue\n    rule_name = rule.id.lower()\n    description = rule.__doc__.lower()\n    kw_count = sum(rule.keywords.count(kw) for kw in keywords) if hasattr(\n        rule, 'keywords') else 0\n    name_count = sum(rule_name.count(keyword) for keyword in keywords)\n    description_count = sum(description.count(keyword) for keyword in keywords)\n    score = (kw_count * 3) + (name_count * 2) + description_count\n\n    if score > 0:\n      # Use negative score to achieve a max-heap\n      heapq.heappush(ranked_rules, (-score, name, rule))\n\n  return [\n      heapq.heappop(ranked_rules)\n      for _ in range(min(len(ranked_rules), args.limit_per_type))\n  ]\n\n\ndef _rank_lint_rules(rules: Iterable[LintRule],\n                     args) -> List[Tuple[int, str, LintRule]]:\n  \"\"\"Rank lint rules based on the keywords and return a sorted list\n\n  \"\"\"\n  ranked_rules: List[Tuple[int, str, LintRule]] = []\n  keywords = args.search\n  keywords = [kw.lower() for kw in keywords]\n\n  for rule in rules:\n    name = f'{rule.product}/{rule.rule_class}/{rule.rule_id}'.lower()\n    short_desc = rule.short_desc.lower()\n    long_desc = rule.long_desc.lower()\n    kw_count = sum(rule.keywords.count(keyword)\n                   for keyword in keywords) if rule.keywords else 0\n    short_desc_count = sum(short_desc.count(keyword) for keyword in keywords)\n    long_desc_count = sum(long_desc.count(keyword) for keyword in keywords)\n    score = (kw_count * 3) + (short_desc_count + long_desc_count) * 2\n\n    if score > 0:\n      # Use negative score to achieve a max-heap\n      heapq.heappush(ranked_rules, (-score, name, rule))\n\n  return [\n      heapq.heappop(ranked_rules)\n      for _ in range(min(len(ranked_rules), args.limit_per_type))\n  ]\n\n\ndef _search_rules(args) -> None:\n  \"\"\"Search and display rules based on the search arguments.\"\"\"\n  matched_lint_rules = []\n  matched_runbook_rules = []\n\n  # Load the gcpdiag rules\n  lint_rules = _load_lint_rules(args) if 'lint' in args.rule_type else []\n  runbook_rules = _load_runbook_rules() if 'runbook' in args.rule_type else {}\n\n  if 'lint' in args.rule_type:\n    matched_lint_rules = _rank_lint_rules(lint_rules, args)\n  if 'runbook' in args.rule_type:\n    matched_runbook_rules = _rank_runbook_rules(runbook_rules, args)\n\n  all_rules: Dict[str, Any] = {}\n  if matched_lint_rules:\n    all_rules['lint'] = [{\n        'id': r[1],\n        'type': 'lint',\n        'description': r[2].short_desc,\n        'full_description': r[2].__doc__,\n        'doc_url': r[2].doc_url\n    } for r in matched_lint_rules]\n  if matched_runbook_rules:\n    all_rules['runbook'] = []\n    for r in matched_runbook_rules:\n      # Make the type serializable\n      for value in r[2].parameters.values():\n        value['type'] = value['type'].__name__\n\n      all_rules['runbook'].append({\n          'id': r[1],\n          'type': 'runbook',\n          'description': r[2].short_desc,\n          'full_description': r[2].__doc__,\n          'doc_url': r[2].doc_url,\n          'parameters': r[2].parameters\n      })\n\n  if args.format == 'json':\n    print(json.dumps(all_rules, indent=2))\n  else:\n    _print(all_rules)\n\n\ndef _print(all_rules: dict) -> None:\n  \"\"\"Print the rules in a formatted table using native Python API and blessings for styling.\"\"\"\n  term = Terminal()\n  # Print headings\n  print(term.bold + 'Filtered Rules' + term.normal)\n  print('=' * 14)\n\n  # Print rules\n  for rule_type in all_rules.values():\n    for rule in rule_type:\n      id_ = rule['id']\n      type_ = rule['type']\n      desc = rule['description']\n      doc_url = rule['doc_url']\n      params = ''\n\n      print(\n          f'Execution ID: {id_}\\nRule Type: {type_}\\nShort Description: {desc}\\nDoc URL: {doc_url}'\n      )\n      if rule['type'] == 'runbook':\n        params = ', '.join(k for k, v in rule['parameters'].items()\n                           if v.get('required', False))\n        print(f'Required Parameters: {params}')\n        params = ', '.join(k for k, v in rule['parameters'].items()\n                           if not v.get('required', False))\n        print(f'Optional Parameters: {params}')\n      print('')\n"
  },
  {
    "path": "gcpdiag/search/command_test.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\" Test gcpdiag search command\"\"\"\nimport unittest\nfrom argparse import Namespace\nfrom unittest import mock\n\nfrom gcpdiag.lint import LintRule\nfrom gcpdiag.runbook import DiagnosticTree\nfrom gcpdiag.search import command as search_cmd\n\n\nclass TestGcpdiagSearchCommand(unittest.TestCase):\n  \"\"\"Unit tests for gcpdiag search command argument parsing and rule searching.\"\"\"\n\n  # pylint: disable=protected-access\n\n  def setUp(self):\n    self.parser = search_cmd._init_search_args_parser()\n\n  def test_no_search_terms(self):\n    \"\"\"Test case when no search terms are provided.\"\"\"\n    with self.assertRaises(SystemExit):\n      self.parser.parse_args([])\n\n  def test_single_search_term(self):\n    \"\"\"Test case with a single search term.\"\"\"\n    args = self.parser.parse_args(['test-keyword'])\n    self.assertEqual(args.search, ['test-keyword'])\n    self.assertEqual(args.limit_per_type, 10)\n    self.assertEqual(args.rule_type, ['lint', 'runbook'])\n    self.assertEqual(args.product, [])\n    self.assertEqual(args.format, 'table')\n\n  def test_multiple_search_terms(self):\n    \"\"\"Test case with multiple search terms.\"\"\"\n    args = self.parser.parse_args(['test-keyword', 'public'])\n    self.assertEqual(args.search, ['test-keyword', 'public'])\n\n  def test_limit_argument(self):\n    \"\"\"Test case with the limit argument.\"\"\"\n    args = self.parser.parse_args(['test-keyword', '--limit-per-type', '5'])\n    self.assertEqual(args.limit_per_type, 5)\n\n  def test_rule_type_argument(self):\n    \"\"\"Test case with the rule-type argument.\"\"\"\n    args = self.parser.parse_args(['test-keyword', '--rule-type', 'lint'])\n    self.assertEqual(args.rule_type, 'lint')\n\n  def test_product_argument(self):\n    \"\"\"Test case with the product argument.\"\"\"\n    args = self.parser.parse_args(['test-keyword', '--product', 'prod'])\n    self.assertEqual(args.product, ['prod'])\n\n  def test_format_argument(self):\n    \"\"\"Test case with the format argument.\"\"\"\n    args = self.parser.parse_args(['test-keyword', '--format', 'json'])\n    self.assertEqual(args.format, 'json')\n\n  def test_all_arguments(self):\n    \"\"\"Test case with all arguments.\"\"\"\n    args = self.parser.parse_args([\n        'test-keyword', 'public', '--limit-per-type', '2', '--rule-type',\n        'runbook', '--product', 'prod', '--format', 'json'\n    ])\n    self.assertEqual(args.search, ['test-keyword', 'public'])\n    self.assertEqual(args.limit_per_type, 2)\n    self.assertEqual(args.rule_type, 'runbook')\n    self.assertEqual(args.product, ['prod'])\n    self.assertEqual(args.format, 'json')\n\n  @mock.patch('gcpdiag.search.command._load_lint_rules')\n  @mock.patch('gcpdiag.search.command._load_runbook_rules')\n  def test_search_rules(self, mock_load_runbook_rules, mock_load_lint_rules):\n    \"\"\"Test case for search rules functionality.\"\"\"\n    mock_load_lint_rules.return_value = []\n    mock_load_runbook_rules.return_value = {}\n\n    args = self.parser.parse_args([\n        'test-keyword', 'public', '--limit-per-type', '2', '--rule-type',\n        'runbook', '--product', 'prod'\n    ])\n\n    search_cmd._search_rules(args)\n\n    mock_load_lint_rules.assert_not_called()\n    mock_load_runbook_rules.assert_called_once()\n\n  @mock.patch('gcpdiag.search.command._print')\n  @mock.patch('gcpdiag.search.command._rank_runbook_rules')\n  @mock.patch('gcpdiag.search.command._rank_lint_rules')\n  def test_search_rules_output(self, mock_rank_lint_rules,\n                               mock_rank_runbook_rules, mock_print):\n    \"\"\"Test case for search rules output functionality.\"\"\"\n    mock_rank_lint_rules.return_value = []\n    mock_rank_runbook_rules.return_value = []\n\n    args = self.parser.parse_args([\n        'test-keyword', 'public', '--limit-per-type', '2', '--rule-type',\n        'runbook', '--product', 'prod'\n    ])\n\n    search_cmd._search_rules(args)\n\n    mock_print.assert_called_once_with({})\n\n\nclass TestRankingFunctions(unittest.TestCase):\n  \"\"\"Unit tests for ranking functions in gcpdiag search command.\"\"\"\n\n  # pylint: disable=protected-access\n\n  class TestDT1(DiagnosticTree):\n    id = 'rule1'\n    product = 'prod'\n    __doc__ = 'This is a test rule for test-issue'\n    keywords = ['issue-kw', 'public']\n\n  class TestDT2(DiagnosticTree):\n    id = 'rule2'\n    product = 'prod'\n    __doc__ = 'Another test rule for issue-kw2'\n    keywords = ['issue-kw2', 'engine']\n\n  class TestDT3(DiagnosticTree):\n    id = 'rule3'\n    product = 'another-prod'\n    __doc__ = 'Another test rule for storage'\n    keywords = ['storage']\n\n  def setUp(self):\n    self.runbook_rules = {\n        'rule1': self.TestDT1,\n        'rule2': self.TestDT2,\n        'rule3': self.TestDT3\n    }\n\n    self.lint_rules = [\n        LintRule(product='prod',\n                 rule_class='class1',\n                 rule_id='rule1',\n                 short_desc='Test lint rule for SSH',\n                 long_desc='Detailed desc about SSH and issue-kw2',\n                 keywords=['issue-kw', 'issue-kw2', 'lint']),\n        LintRule(product='prod',\n                 rule_class='class2',\n                 rule_id='rule2',\n                 short_desc='Another lint rule for engine',\n                 long_desc='Detailed desc about engine',\n                 keywords=['engine']),\n        LintRule(product='another-prod',\n                 rule_class='class1',\n                 rule_id='rule3',\n                 short_desc='Rule for storage',\n                 long_desc='Detailed desc about storage',\n                 keywords=['storage', 'public']),\n    ]\n\n  def test_rank_runbook_rules_max_heap(self):\n    \"\"\"Test case for ensuring max-heap behavior in runbook rules ranking.\"\"\"\n    args = Namespace(search=['test'], limit_per_type=2, product=['search'])\n    ranked_rules = search_cmd._rank_runbook_rules(self.runbook_rules, args)\n\n    self.assertEqual(len(ranked_rules), 2)\n    # Ensure the highest score is first\n    self.assertTrue(-ranked_rules[0][0] >= -ranked_rules[1][0])\n\n  def test_rank_runbook_rules_frequency(self):\n    \"\"\"Test case for ensuring correct frequency calculation in runbook rules ranking.\"\"\"\n    args = Namespace(search=['issue-kw', 'public'],\n                     limit_per_type=2,\n                     product=['search'])\n    ranked_rules = search_cmd._rank_runbook_rules(self.runbook_rules, args)\n\n    self.assertEqual(len(ranked_rules), 2)\n    score, name, _ = ranked_rules[0]\n    self.assertEqual(name, 'rule1')\n    self.assertEqual(-score, 6)  # 3 for keyword 'issue-kw' and 3 for 'public'\n\n  def test_rank_lint_rules_frequency(self):\n    \"\"\"Test case for ensuring correct frequency calculation in lint rules ranking.\"\"\"\n    args = Namespace(search=['issue-kw', 'issue-kw2'],\n                     limit_per_type=2,\n                     product=['prod'])\n    ranked_rules = search_cmd._rank_lint_rules(self.lint_rules, args)\n\n    self.assertEqual(len(ranked_rules), 1)\n    score, name, _ = ranked_rules[0]\n    self.assertEqual(name, 'prod/class1/rule1')\n    self.assertEqual(\n        -score, 10\n    )  # 3 for keyword 'issue-kw', 'issue-kw2' and 2 for 'issue-kw2' in description\n\n  def test_rank_lint_rules_max_heap(self):\n    \"\"\"Test case for ensuring max-heap behavior in lint rules ranking.\"\"\"\n    args = Namespace(search=['lint', 'rule'],\n                     limit_per_type=3,\n                     product=['prod', 'another-prod'])\n    ranked_rules = search_cmd._rank_lint_rules(self.lint_rules, args)\n\n    self.assertEqual(len(ranked_rules), 3)\n    # Ensure the highest score is first\n    self.assertTrue(-ranked_rules[0][0] >= -ranked_rules[1][0])\n    self.assertTrue(-ranked_rules[1][0] >= -ranked_rules[2][0])\n"
  },
  {
    "path": "gcpdiag/search/util.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "gcpdiag/search/util_test.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n"
  },
  {
    "path": "gcpdiag/types.py",
    "content": "# Copyright 2025 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Custom datatype.\"\"\"\nimport re\n\n\nclass Email:\n  \"\"\"Custom datatype for validating GCP email addresses.\n\n  This class provides functionality to validate email addresses\n  using a regular expression. It ensures that the email address\n  conforms to the standard email format.\n\n  Attributes:\n      EMAIL_REGEX (Pattern): A compiled regular expression for email validation.\n  \"\"\"\n  EMAIL_REGEX = re.compile(r'^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\\.[a-zA-Z0-9-.]+$')\n\n  def __init__(self, email: str):\n    \"\"\"Initialize an Email object.\n\n    Args:\n        email (str): The email address to validate and store.\n    \"\"\"\n    if not self.is_valid(email):\n      raise ValueError(f'Invalid email address: {email}')\n    self.email = email\n\n  @staticmethod\n  def is_valid(email: str) -> bool:\n    \"\"\"Check if the provided email address is valid.\n\n    Args:\n        email (str): The email address to validate.\n\n    Returns:\n        bool: True if the email address is valid, False otherwise.\n    \"\"\"\n    return bool(Email.EMAIL_REGEX.match(email))\n\n  def __str__(self):\n    \"\"\"Return the string representation of the email address.\"\"\"\n    return self.email\n\n  def __eq__(self, other):\n    \"\"\"Check if two Email objects are equal.\"\"\"\n    return isinstance(other, Email) and self.email == other.email\n\n  def __repr__(self):\n    \"\"\"Return the official string representation of the Email object.\"\"\"\n    return f'Email({self.email})'\n"
  },
  {
    "path": "gcpdiag/types_test.py",
    "content": "# Copyright 2025 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Unit tests for validating custom datatypes.\"\"\"\n\nimport unittest\n\nfrom gcpdiag.queries.iam import (DEFAULT_SERVICE_ACCOUNT_DOMAINS,\n                                 SERVICE_AGENT_DOMAINS)\nfrom gcpdiag.types import Email  # Import the Email class\n\nREGULAR_EMAIL = ('example.com', 'example.com.gh', 'example.engineer')\n\n\nclass TestServiceAccountDomains(unittest.TestCase):\n  \"\"\"Unit tests for validating service account and regular email domains.\n\n  This test suite ensures that:\n  - Service account domains from DEFAULT_SERVICE_ACCOUNT_DOMAINS and\n    SERVICE_AGENT_DOMAINS can form valid email addresses.\n  - Regular email domains also form valid email addresses.\n  \"\"\"\n\n  def test_default_service_account_domains(self):\n    \"\"\"Test that emails formed with DEFAULT_SERVICE_ACCOUNT_DOMAINS are valid.\"\"\"\n    for domain in DEFAULT_SERVICE_ACCOUNT_DOMAINS:\n      email = f'test@{domain}'\n      self.assertTrue(Email.is_valid(email), f\"Email '{email}' is not valid\")\n\n  def test_service_agent_domains(self):\n    \"\"\"Test that emails formed with SERVICE_AGENT_DOMAINS are valid.\"\"\"\n    for domain in SERVICE_AGENT_DOMAINS:\n      email = f'test@{domain}'\n      self.assertTrue(Email.is_valid(email), f\"Email '{email}' is not valid\")\n\n  def test_regular_email(self):\n    \"\"\"Test that emails formed with REGULAR_EMAIL domains are valid.\"\"\"\n    for domain in REGULAR_EMAIL:\n      email = f'test@{domain}'\n      self.assertTrue(Email.is_valid(email), f\"Email '{email}' is not valid\")\n"
  },
  {
    "path": "gcpdiag/utils.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"Various utility functions.\"\"\"\n\nimport json\nimport re\nfrom typing import Any, Dict, List, Optional\n\nDOMAIN_RES_NAME_MATCH = r'(http(s)?:)?//([a-z0-9][-a-z0-9]{1,61}[a-z0-9]\\.)+[a-z]{2,}/'\nRES_NAME_KEY = r'[a-z][-a-z0-9]*'\nRES_NAME_VALUE = r'[a-z0-9][-a-z0-9_?]*'\nREL_RES_NAME_MATCH = r'({key}/{value}/)*{key}/{value}'.format(\n    key=RES_NAME_KEY, value=RES_NAME_VALUE)\nREGION_NAME_MATCH = r'^\\w+-\\w+$'\nZONE_NAME_MATCH = r'^(\\w+-\\w+)-\\w+$'\nFULL_RES_NAME_MATCH = DOMAIN_RES_NAME_MATCH + REL_RES_NAME_MATCH\n\n\nclass VersionComponentsParser:\n  \"\"\" Simple helper class to parse version string to components \"\"\"\n\n  version_str: str\n\n  def __init__(self, version_str: str):\n    self.version_str = str(version_str)\n\n  def get_components(self) -> List[int]:\n    cs = [int(s) for s in self.extract_base_version().split('.')]\n    # example: 1 -> 1.0.0, 1.2 -> 1.2.0\n    cs += [0] * (3 - len(cs))\n    return cs\n\n  def extract_base_version(self) -> str:\n    m = re.search(r'[\\d\\.]+', self.version_str)\n    if m is None:\n      raise ValueError(f'Can not parse version {self.version_str}')\n    return m.group(0)\n\n\nclass Version:\n  \"\"\" Represents Version \"\"\"\n\n  version_str: str\n  major: int\n  minor: int\n  patch: int\n\n  def __init__(self, version_str: str):\n    # example: 1.19.13-gke.701\n    self.version_str = version_str\n    self.major, self.minor, self.patch = \\\n      VersionComponentsParser(version_str).get_components()\n\n  def same_major(self, other_version: 'Version') -> bool:\n    return self.major == other_version.major\n\n  def diff_minor(self, other_version: 'Version') -> int:\n    return abs(self.minor - other_version.minor)\n\n  def __str__(self) -> str:\n    return self.version_str\n\n  def __add__(self, other: object) -> object:\n    if isinstance(other, str):\n      return self.version_str + other\n    raise TypeError(f'Can not concatenate Version and {type(other)}')\n\n  def __radd__(self, other: object) -> object:\n    if isinstance(other, str):\n      return other + self.version_str\n    raise TypeError(f'Can not concatenate and {type(other)} Version')\n\n  def __eq__(self, other: object) -> bool:\n    if isinstance(other, str):\n      return other == self.version_str\n    if isinstance(other, Version):\n      return self.version_str == other.version_str\n    raise AttributeError('Can not compare Version object with {}'.format(\n        type(other)))\n\n  def __lt__(self, other):\n    return self.major < other.major or self.minor < other.minor or self.patch < other.patch\n\n  def __ge__(self, other):\n    return self.major >= other.major and self.minor >= other.minor and self.patch >= other.patch\n\n\nclass GcpApiError(Exception):\n  \"\"\"Exception raised for GCP API/HTTP errors.\n\n  Attributes: response -- API/HTTP response\n  \"\"\"\n\n  @property\n  def status(self) -> Optional[int]:\n    try:\n      return self.response.resp.status\n    except (KeyError, AttributeError):\n      return None\n\n  def __init__(self,\n               response='An error occurred during the GCP API call',\n               reason=None,\n               service=None):\n    self.response = response\n    self.reason = reason\n    self.service = service\n    # see also: https://github.com/googleapis/google-api-python-client/issues/662\n    try:\n      content = json.loads(response.content) if hasattr(response,\n                                                        'content') else response\n      if isinstance(\n          content,\n          dict) and 'error' in content and 'message' in content['error']:\n        self.message = content['error']['message']\n        try:\n          for c in content['error']['details']:\n            if c['@type'] == 'type.googleapis.com/google.rpc.ErrorInfo':\n              self.reason = c['reason']\n              self.service = c['metadata']['service']\n        except KeyError:\n          pass\n      else:\n        self.message = str(response)\n    except json.decoder.JSONDecodeError:\n      self.message = response.content\n    if isinstance(self.message, bytes):\n      self.message = self.message.decode('utf-8')\n    super().__init__(self.message)\n\n  def __str__(self):\n    return self.message\n\n\ndef extract_value_from_res_name(resource_name: str, key: str) -> str:\n  \"\"\"Extract a value by a key from a resource name.\n\n  Example:\n      resource_name: projects/testproject/zones/us-central1-c\n      key: zones\n      return value: us-central1-c\n  \"\"\"\n  if not is_valid_res_name(resource_name):\n    raise ValueError(f'invalid resource name: {resource_name}')\n\n  path_items = resource_name.split('/')\n  for i, item in enumerate(path_items):\n    if item == key:\n      if i + 1 < len(path_items):\n        return path_items[i + 1]\n      else:\n        break\n  raise ValueError(f'invalid resource name: {resource_name}')\n\n\ndef get_region_by_res_name(res_name: str) -> str:\n  return extract_value_from_res_name(res_name, 'locations')\n\n\ndef get_zone_by_res_name(res_name: str) -> str:\n  return extract_value_from_res_name(res_name, 'zones')\n\n\ndef get_project_by_res_name(res_name: str) -> str:\n  return extract_value_from_res_name(res_name, 'projects')\n\n\ndef is_region(name: str) -> bool:\n  return bool(re.match(REGION_NAME_MATCH, name))\n\n\ndef is_zone(name: str) -> bool:\n  return bool(re.match(ZONE_NAME_MATCH, name))\n\n\ndef zone_region(zone: str) -> str:\n  \"\"\"Get region name of a zone.\"\"\"\n  m = re.match(ZONE_NAME_MATCH, zone)\n  if not m:\n    raise ValueError('can\\'t parse zone name: <%s>' % zone)\n  return m.group(1)\n\n\ndef is_full_res_name(res_name: str) -> bool:\n  return bool(re.fullmatch(FULL_RES_NAME_MATCH, res_name, flags=re.IGNORECASE))\n\n\ndef is_rel_res_name(res_name: str) -> bool:\n  return bool(re.fullmatch(REL_RES_NAME_MATCH, res_name, flags=re.IGNORECASE))\n\n\ndef is_valid_res_name(res_name: str) -> bool:\n  return is_rel_res_name(res_name) or is_full_res_name(res_name)\n\n\ndef iter_dictlist(dictlist: Dict[Any, List[Any]]):\n  \"\"\"Given a dictionary of lists, iterate over the list elements returning\n  tuples (dict_key, item), (dict_key, item), ...\"\"\"\n\n  for (k, v) in dictlist.items():\n    for i in v:\n      yield (k, i)\n\n\ndef format_fault_list(fault_list) -> str:\n  return '\\n'.join(fault_list)\n"
  },
  {
    "path": "gcpdiag/utils_test.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Test code in utils.py.\"\"\"\nimport httplib2\nimport pytest\nfrom googleapiclient import errors\n\nfrom gcpdiag import utils\n\n# https://github.com/googleapis/google-api-python-client/blob/master/tests/test_errors.py\nJSON_ERROR_CONTENT = b\"\"\"\n{\n \"error\": {\n  \"message\": \"country is required\"\n }\n}\n\"\"\"\n\n\nclass TestGcpApiError():\n\n  def test_exception(self):\n    \"\"\"GcpApiError correctly formats an error from a Google API JSON string.\"\"\"\n    with pytest.raises(utils.GcpApiError) as api_error:\n      resp = httplib2.Response({})\n      resp.reason = 'foobar'\n      mocked_error = errors.HttpError(content=JSON_ERROR_CONTENT, resp=resp)\n      raise utils.GcpApiError(mocked_error)\n    assert 'country is required' in str(api_error.value)\n\n\ndef test_is_region():\n  \"\"\"is_region() should return correct result when presented with region or zone string.\"\"\"\n  assert utils.is_region('us-central1')\n  assert not utils.is_region('us-central1-b')\n\n\ndef test_is_full_res_name():\n  \"\"\"is_full_res_name() should return correct result for a valid/invalid full resource name.\"\"\"\n  assert utils.is_full_res_name(\n      'https://library.googleapis.com/shelves/shelf1/books/book2')\n  assert utils.is_full_res_name('//googleapis.com/shelves/shelf1/books/book2')\n  assert not utils.is_full_res_name('shelves/shelf1/books/book2')\n\n\ndef test_is_rel_res_name():\n  \"\"\"is_rel_res_name() should return correct result for a valid/invalid relative resource name.\"\"\"\n  assert not utils.is_rel_res_name(\n      '//library.googleapis.com/shelves/shelf1/books/book2')\n  assert utils.is_rel_res_name(\n      'projects/testproject/locations/us-central1/keyRings/usckr')\n\n\ndef test_is_valid_res_name():\n  \"\"\"is_valid_res_name() should return correct result for a valid/invalid resource name.\"\"\"\n  assert utils.is_valid_res_name('//googleapis.com/shelves/shelf1/books/book2')\n  assert utils.is_valid_res_name('//googleapis.com/shelves/shelf1/books/2')\n  assert utils.is_valid_res_name('shelves/shelf1/books/book2')\n  assert not utils.is_valid_res_name(\n      'googleapis.com/shelves/shelf1/books/book2')\n  assert not utils.is_valid_res_name('//googleapis.com/shelves/shelf1/books/-')\n  assert not utils.is_valid_res_name('//googleapis.com/shelves/shelf1/2/2')\n  assert not utils.is_valid_res_name('shelves/shelf1/books')\n  assert not utils.is_valid_res_name('googleapis.com/shelves')\n  assert not utils.is_valid_res_name('googleapis')\n\n\ndef test_get_region_by_res_name():\n  \"\"\"get_region_by_res_name() should extract a region name from a resource name.\"\"\"\n  result = utils.get_region_by_res_name(\n      'projects/testproject/locations/us-central1/keyRings/usckr')\n  assert result == 'us-central1'\n\n\ndef test_get_zone_by_res_name():\n  \"\"\"get_zone_by_res_name() should extract a zone name from a resource name.\"\"\"\n  result = utils.get_zone_by_res_name(\n      'projects/testproject/zones/us-central1-c/keyRings/usckr')\n  assert result == 'us-central1-c'\n\n\ndef test_get_project_by_res_name():\n  \"\"\"get_project_by_res_name() should extract a project name from a resource name.\"\"\"\n  result = utils.get_project_by_res_name(\n      'projects/testproject/locations/us-central1/keyRings/usckr')\n  assert result == 'testproject'\n\n\ndef test_extract_value_from_res_name():\n  \"\"\"extract_value_from_res_name() should extract a value by a given key from a resource name.\"\"\"\n  result = utils.extract_value_from_res_name(\n      'projects/testproject/locations/us-central1/keyRings/usckr', 'keyRings')\n  assert result == 'usckr'\n  with pytest.raises(ValueError):\n    utils.extract_value_from_res_name('', 'keyRings')\n  with pytest.raises(ValueError):\n    utils.extract_value_from_res_name(\n        'projects/testproject/locations/us-central1', 'us-central1')\n  result = utils.extract_value_from_res_name(\n      'projects/testproject/locations/us-east1/keyRings/testkeyring/cryptoKeys/test_key',\n      'projects')\n  assert result == 'testproject'\n\n\ndef test_iter_dictlist():\n  \"\"\"Verify that test_iterdictlist iterates correctly.\"\"\"\n  test_dict = {'a': [1, 2], 'b': [3]}\n  assert list(utils.iter_dictlist(test_dict)) == [('a', 1), ('a', 2), ('b', 3)]\n\n\nclass TestVersionComponentsParser():\n  \"\"\"Test Class for Version Components Parser.\"\"\"\n\n  def test_extract_base_version(self):\n    \"\"\"Verify that the base version can be extracted correctly from a version string.\"\"\"\n    vcp1 = utils.VersionComponentsParser('1.14.3-asm.1')\n    vcp2 = utils.VersionComponentsParser('release-1.3-20200214-10-15')\n    vcp3 = utils.VersionComponentsParser('gkeVersion')\n    vcp4 = utils.VersionComponentsParser('1.19.13-gke.701')\n    assert vcp1.extract_base_version() == '1.14.3'\n    assert vcp2.extract_base_version() == '1.3'\n    with pytest.raises(Exception):\n      vcp3.extract_base_version()\n    assert vcp4.extract_base_version() == '1.19.13'\n"
  },
  {
    "path": "pyinstaller/hook-gcpdiag.lint.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"pyinstaller configuration for gcpdiag.lint.\"\"\"\n\nfrom PyInstaller.utils.hooks import collect_submodules\n\n# update also bin/precommit-required-files\nhiddenimports = \\\n  collect_submodules('gcpdiag.lint.apigee') + \\\n  collect_submodules('gcpdiag.lint.asm') + \\\n  collect_submodules('gcpdiag.lint.bigquery') + \\\n  collect_submodules('gcpdiag.lint.billing') + \\\n  collect_submodules('gcpdiag.lint.cloudrun') + \\\n  collect_submodules('gcpdiag.lint.cloudsql') + \\\n  collect_submodules('gcpdiag.lint.composer') + \\\n  collect_submodules('gcpdiag.lint.dataflow') + \\\n  collect_submodules('gcpdiag.lint.datafusion') + \\\n  collect_submodules('gcpdiag.lint.dataproc') + \\\n  collect_submodules('gcpdiag.lint.gae') + \\\n  collect_submodules('gcpdiag.lint.gcb') + \\\n  collect_submodules('gcpdiag.lint.gce') + \\\n  collect_submodules('gcpdiag.lint.gcf') + \\\n  collect_submodules('gcpdiag.lint.gcs') + \\\n  collect_submodules('gcpdiag.lint.gke') + \\\n  collect_submodules('gcpdiag.lint.iam') + \\\n  collect_submodules('gcpdiag.lint.interconnect') + \\\n  collect_submodules('gcpdiag.lint.lb') + \\\n  collect_submodules('gcpdiag.lint.notebooks') + \\\n  collect_submodules('gcpdiag.lint.pubsub') + \\\n  collect_submodules('gcpdiag.lint.tpu') + \\\n  collect_submodules('gcpdiag.lint.vertex') + \\\n  collect_submodules('gcpdiag.lint.vpc')\n"
  },
  {
    "path": "pyinstaller/hook-gcpdiag.queries.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"pyinstaller configuration for gcpdiag.queries.\"\"\"\ndatas = [('gcpdiag/queries/client_secrets.json', 'gcpdiag/queries')]\n"
  },
  {
    "path": "pyinstaller/hook-gcpdiag.runbook.py",
    "content": "# Copyright 2024 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"pyinstaller configuration for gcpdiag.runbook.\"\"\"\n\nfrom PyInstaller.utils.hooks import collect_submodules\n\n# update also bin/precommit-required-files\n# note: keep in sync with modules in bin/runbook-starter-code-generator\nhiddenimports = \\\n collect_submodules('gcpdiag.runbook.bigquery') + \\\n collect_submodules('gcpdiag.runbook.cloudrun') + \\\n collect_submodules('gcpdiag.runbook.composer') + \\\n collect_submodules('gcpdiag.runbook.crm') + \\\n collect_submodules('gcpdiag.runbook.dataflow') + \\\n collect_submodules('gcpdiag.runbook.dataproc') + \\\n collect_submodules('gcpdiag.runbook.gce') + \\\n collect_submodules('gcpdiag.runbook.gcp') + \\\n collect_submodules('gcpdiag.runbook.gke') + \\\n collect_submodules('gcpdiag.runbook.gce.util') + \\\n collect_submodules('gcpdiag.runbook.iam') + \\\n collect_submodules('gcpdiag.runbook.lb') + \\\n collect_submodules('gcpdiag.runbook.logs') + \\\n collect_submodules('gcpdiag.runbook.monitoring') + \\\n collect_submodules('gcpdiag.runbook.nat') + \\\n collect_submodules('gcpdiag.runbook.pubsub') + \\\n collect_submodules('gcpdiag.runbook.vertex') + \\\n collect_submodules('gcpdiag.runbook.vpc') + \\\n collect_submodules('gcpdiag.runbook.interconnect') + \\\n collect_submodules('gcpdiag.runbook.vpn')\n"
  },
  {
    "path": "pyinstaller/hook-googleapiclient.model.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\"\"\"pyinstaller configuration for googleapiclient.\"\"\"\n\nfrom PyInstaller.utils.hooks import collect_data_files, copy_metadata\n\n# googleapiclient.model queries the library version via\n# pkg_resources.get_distribution(\"google-api-python-client\").version,\n# so we need to collect that package's metadata\ndatas = copy_metadata('google_api_python_client')\ndatas += collect_data_files('googleapiclient.discovery',\n                            excludes=['*.txt', '**/__pycache__'])\n\ndatas += collect_data_files('googleapiclient.discovery_cache',\n                            excludes=['*.txt', '**/__pycache__'])\n"
  },
  {
    "path": "pyinstaller.spec",
    "content": "# -*- mode: python ; coding: utf-8 -*-\n\nblock_cipher = None\n\na = Analysis(['bin/gcpdiag'],\n             binaries=[],\n             datas=[],\n             hiddenimports=[],\n             hookspath=['pyinstaller'],\n             runtime_hooks=[],\n             excludes=['django'],\n             win_no_prefer_redirects=False,\n             win_private_assemblies=False,\n             cipher=block_cipher,\n             noarchive=False)\n\n# add runbook templates as data\nfor root, dirs, files in os.walk(\"gcpdiag/runbook\"):\n  for f in files:\n    if f.endswith(\"jinja\"):\n      path = os.path.join(root, f)\n      a.datas.append((path, path, 'DATA'))\n\npyz = PYZ(a.pure, a.zipped_data,\n             cipher=block_cipher)\nexe = EXE(pyz,\n          a.scripts,\n          a.binaries,\n          a.zipfiles,\n          a.datas,\n          [],\n          name='gcpdiag',\n          debug=False,\n          bootloader_ignore_signals=False,\n          strip=False,\n          upx=True,\n          upx_exclude=[],\n          runtime_tmpdir=None,\n          console=True )\n"
  },
  {
    "path": "requirements.in",
    "content": "# To ensure secure and reproducible builds, we use dependency pinning with hash verification for our build tools (like pipenv and wheel).\n# requirements.in: This is the source file. It lists our direct top-level dependencies. Edit this file if you need to add or change a package.\n#\n# requirements.txt: This is the generated lockfile. It contains the exact versions and cryptographic hashes for all packages and their sub-dependencies. Do not edit this file manually.\n#\n# How to Update Dependencies\n# If you need to add a package or update versions, follow these steps:\n#\n# Prerequisite: Install pip-tools if you haven't already:\n# command: pip install pip-tools\n#\n# Edit Source: If adding a new package, add it to requirements.in.\n#\n# Compile & Generate Hashes: Run the following command in the project root. This will resolve dependencies, fetch the latest hashes from PyPI, and update requirements.txt:\n# command: pip-compile --generate-hashes --allow-unsafe requirements.in\n# flag --allow-unsafe flag tells pip-tools to treat \"unsafe\" packages (like setuptools) as normal packages that must be pinned.\n#\n# Commit: Commit both requirements.in and the updated requirements.txt.\npipenv\nwheel\nsetuptools\nsafety\n"
  },
  {
    "path": "requirements.txt",
    "content": "#\n# This file is autogenerated by pip-compile with Python 3.12\n# by the following command:\n#\n#    pip-compile --allow-unsafe --generate-hashes --index-url=https://pypi.org/simple requirements.in\n#\nannotated-types==0.7.0 \\\n    --hash=sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53 \\\n    --hash=sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89\n    # via pydantic\nanyio==4.12.0 \\\n    --hash=sha256:73c693b567b0c55130c104d0b43a9baf3aa6a31fc6110116509f27bf75e21ec0 \\\n    --hash=sha256:dad2376a628f98eeca4881fc56cd06affd18f659b17a747d3ff0307ced94b1bb\n    # via httpx\nauthlib==1.6.5 \\\n    --hash=sha256:3e0e0507807f842b02175507bdee8957a1d5707fd4afb17c32fb43fee90b6e3a \\\n    --hash=sha256:6aaf9c79b7cc96c900f0b284061691c5d4e61221640a948fe690b556a6d6d10b\n    # via safety\ncertifi==2025.11.12 \\\n    --hash=sha256:97de8790030bbd5c2d96b7ec782fc2f7820ef8dba6db909ccf95449f2d062d4b \\\n    --hash=sha256:d8ab5478f2ecd78af242878415affce761ca6bc54a22a27e026d7c25357c3316\n    # via\n    #   httpcore\n    #   httpx\n    #   pipenv\n    #   requests\ncffi==2.0.0 \\\n    --hash=sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb \\\n    --hash=sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b \\\n    --hash=sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f \\\n    --hash=sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9 \\\n    --hash=sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44 \\\n    --hash=sha256:0f6084a0ea23d05d20c3edcda20c3d006f9b6f3fefeac38f59262e10cef47ee2 \\\n    --hash=sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c \\\n    --hash=sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75 \\\n    --hash=sha256:1cd13c99ce269b3ed80b417dcd591415d3372bcac067009b6e0f59c7d4015e65 \\\n    --hash=sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e \\\n    --hash=sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a \\\n    --hash=sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e \\\n    --hash=sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25 \\\n    --hash=sha256:2081580ebb843f759b9f617314a24ed5738c51d2aee65d31e02f6f7a2b97707a \\\n    --hash=sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe \\\n    --hash=sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b \\\n    --hash=sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91 \\\n    --hash=sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592 \\\n    --hash=sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187 \\\n    --hash=sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c \\\n    --hash=sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1 \\\n    --hash=sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94 \\\n    --hash=sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba \\\n    --hash=sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb \\\n    --hash=sha256:3f4d46d8b35698056ec29bca21546e1551a205058ae1a181d871e278b0b28165 \\\n    --hash=sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529 \\\n    --hash=sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca \\\n    --hash=sha256:4647afc2f90d1ddd33441e5b0e85b16b12ddec4fca55f0d9671fef036ecca27c \\\n    --hash=sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6 \\\n    --hash=sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c \\\n    --hash=sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0 \\\n    --hash=sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743 \\\n    --hash=sha256:61d028e90346df14fedc3d1e5441df818d095f3b87d286825dfcbd6459b7ef63 \\\n    --hash=sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5 \\\n    --hash=sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5 \\\n    --hash=sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4 \\\n    --hash=sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d \\\n    --hash=sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b \\\n    --hash=sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93 \\\n    --hash=sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205 \\\n    --hash=sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27 \\\n    --hash=sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512 \\\n    --hash=sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d \\\n    --hash=sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c \\\n    --hash=sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037 \\\n    --hash=sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26 \\\n    --hash=sha256:89472c9762729b5ae1ad974b777416bfda4ac5642423fa93bd57a09204712322 \\\n    --hash=sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb \\\n    --hash=sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c \\\n    --hash=sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8 \\\n    --hash=sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4 \\\n    --hash=sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414 \\\n    --hash=sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9 \\\n    --hash=sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664 \\\n    --hash=sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9 \\\n    --hash=sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775 \\\n    --hash=sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739 \\\n    --hash=sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc \\\n    --hash=sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062 \\\n    --hash=sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe \\\n    --hash=sha256:b882b3df248017dba09d6b16defe9b5c407fe32fc7c65a9c69798e6175601be9 \\\n    --hash=sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92 \\\n    --hash=sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5 \\\n    --hash=sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13 \\\n    --hash=sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d \\\n    --hash=sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26 \\\n    --hash=sha256:cb527a79772e5ef98fb1d700678fe031e353e765d1ca2d409c92263c6d43e09f \\\n    --hash=sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495 \\\n    --hash=sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b \\\n    --hash=sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6 \\\n    --hash=sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c \\\n    --hash=sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef \\\n    --hash=sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5 \\\n    --hash=sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18 \\\n    --hash=sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad \\\n    --hash=sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3 \\\n    --hash=sha256:de8dad4425a6ca6e4e5e297b27b5c824ecc7581910bf9aee86cb6835e6812aa7 \\\n    --hash=sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5 \\\n    --hash=sha256:e6e73b9e02893c764e7e8d5bb5ce277f1a009cd5243f8228f75f842bf937c534 \\\n    --hash=sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49 \\\n    --hash=sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2 \\\n    --hash=sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5 \\\n    --hash=sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453 \\\n    --hash=sha256:fe562eb1a64e67dd297ccc4f5addea2501664954f2692b69a76449ec7913ecbf\n    # via cryptography\ncharset-normalizer==3.4.4 \\\n    --hash=sha256:027f6de494925c0ab2a55eab46ae5129951638a49a34d87f4c3eda90f696b4ad \\\n    --hash=sha256:077fbb858e903c73f6c9db43374fd213b0b6a778106bc7032446a8e8b5b38b93 \\\n    --hash=sha256:0a98e6759f854bd25a58a73fa88833fba3b7c491169f86ce1180c948ab3fd394 \\\n    --hash=sha256:0d3d8f15c07f86e9ff82319b3d9ef6f4bf907608f53fe9d92b28ea9ae3d1fd89 \\\n    --hash=sha256:0f04b14ffe5fdc8c4933862d8306109a2c51e0704acfa35d51598eb45a1e89fc \\\n    --hash=sha256:11d694519d7f29d6cd09f6ac70028dba10f92f6cdd059096db198c283794ac86 \\\n    --hash=sha256:194f08cbb32dc406d6e1aea671a68be0823673db2832b38405deba2fb0d88f63 \\\n    --hash=sha256:1bee1e43c28aa63cb16e5c14e582580546b08e535299b8b6158a7c9c768a1f3d \\\n    --hash=sha256:21d142cc6c0ec30d2efee5068ca36c128a30b0f2c53c1c07bd78cb6bc1d3be5f \\\n    --hash=sha256:2437418e20515acec67d86e12bf70056a33abdacb5cb1655042f6538d6b085a8 \\\n    --hash=sha256:244bfb999c71b35de57821b8ea746b24e863398194a4014e4c76adc2bbdfeff0 \\\n    --hash=sha256:2677acec1a2f8ef614c6888b5b4ae4060cc184174a938ed4e8ef690e15d3e505 \\\n    --hash=sha256:277e970e750505ed74c832b4bf75dac7476262ee2a013f5574dd49075879e161 \\\n    --hash=sha256:2aaba3b0819274cc41757a1da876f810a3e4d7b6eb25699253a4effef9e8e4af \\\n    --hash=sha256:2b7d8f6c26245217bd2ad053761201e9f9680f8ce52f0fcd8d0755aeae5b2152 \\\n    --hash=sha256:2c9d3c380143a1fedbff95a312aa798578371eb29da42106a29019368a475318 \\\n    --hash=sha256:3162d5d8ce1bb98dd51af660f2121c55d0fa541b46dff7bb9b9f86ea1d87de72 \\\n    --hash=sha256:31fd66405eaf47bb62e8cd575dc621c56c668f27d46a61d975a249930dd5e2a4 \\\n    --hash=sha256:362d61fd13843997c1c446760ef36f240cf81d3ebf74ac62652aebaf7838561e \\\n    --hash=sha256:376bec83a63b8021bb5c8ea75e21c4ccb86e7e45ca4eb81146091b56599b80c3 \\\n    --hash=sha256:44c2a8734b333e0578090c4cd6b16f275e07aa6614ca8715e6c038e865e70576 \\\n    --hash=sha256:47cc91b2f4dd2833fddaedd2893006b0106129d4b94fdb6af1f4ce5a9965577c \\\n    --hash=sha256:4902828217069c3c5c71094537a8e623f5d097858ac6ca8252f7b4d10b7560f1 \\\n    --hash=sha256:4bd5d4137d500351a30687c2d3971758aac9a19208fc110ccb9d7188fbe709e8 \\\n    --hash=sha256:4fe7859a4e3e8457458e2ff592f15ccb02f3da787fcd31e0183879c3ad4692a1 \\\n    --hash=sha256:542d2cee80be6f80247095cc36c418f7bddd14f4a6de45af91dfad36d817bba2 \\\n    --hash=sha256:554af85e960429cf30784dd47447d5125aaa3b99a6f0683589dbd27e2f45da44 \\\n    --hash=sha256:5833d2c39d8896e4e19b689ffc198f08ea58116bee26dea51e362ecc7cd3ed26 \\\n    --hash=sha256:5947809c8a2417be3267efc979c47d76a079758166f7d43ef5ae8e9f92751f88 \\\n    --hash=sha256:5ae497466c7901d54b639cf42d5b8c1b6a4fead55215500d2f486d34db48d016 \\\n    --hash=sha256:5bd2293095d766545ec1a8f612559f6b40abc0eb18bb2f5d1171872d34036ede \\\n    --hash=sha256:5bfbb1b9acf3334612667b61bd3002196fe2a1eb4dd74d247e0f2a4d50ec9bbf \\\n    --hash=sha256:5cb4d72eea50c8868f5288b7f7f33ed276118325c1dfd3957089f6b519e1382a \\\n    --hash=sha256:5dbe56a36425d26d6cfb40ce79c314a2e4dd6211d51d6d2191c00bed34f354cc \\\n    --hash=sha256:5f819d5fe9234f9f82d75bdfa9aef3a3d72c4d24a6e57aeaebba32a704553aa0 \\\n    --hash=sha256:64b55f9dce520635f018f907ff1b0df1fdc31f2795a922fb49dd14fbcdf48c84 \\\n    --hash=sha256:6515f3182dbe4ea06ced2d9e8666d97b46ef4c75e326b79bb624110f122551db \\\n    --hash=sha256:65e2befcd84bc6f37095f5961e68a6f077bf44946771354a28ad434c2cce0ae1 \\\n    --hash=sha256:6aee717dcfead04c6eb1ce3bd29ac1e22663cdea57f943c87d1eab9a025438d7 \\\n    --hash=sha256:6b39f987ae8ccdf0d2642338faf2abb1862340facc796048b604ef14919e55ed \\\n    --hash=sha256:6e1fcf0720908f200cd21aa4e6750a48ff6ce4afe7ff5a79a90d5ed8a08296f8 \\\n    --hash=sha256:74018750915ee7ad843a774364e13a3db91682f26142baddf775342c3f5b1133 \\\n    --hash=sha256:74664978bb272435107de04e36db5a9735e78232b85b77d45cfb38f758efd33e \\\n    --hash=sha256:74bb723680f9f7a6234dcf67aea57e708ec1fbdf5699fb91dfd6f511b0a320ef \\\n    --hash=sha256:752944c7ffbfdd10c074dc58ec2d5a8a4cd9493b314d367c14d24c17684ddd14 \\\n    --hash=sha256:778d2e08eda00f4256d7f672ca9fef386071c9202f5e4607920b86d7803387f2 \\\n    --hash=sha256:780236ac706e66881f3b7f2f32dfe90507a09e67d1d454c762cf642e6e1586e0 \\\n    --hash=sha256:798d75d81754988d2565bff1b97ba5a44411867c0cf32b77a7e8f8d84796b10d \\\n    --hash=sha256:799a7a5e4fb2d5898c60b640fd4981d6a25f1c11790935a44ce38c54e985f828 \\\n    --hash=sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f \\\n    --hash=sha256:7c308f7e26e4363d79df40ca5b2be1c6ba9f02bdbccfed5abddb7859a6ce72cf \\\n    --hash=sha256:7fa17817dc5625de8a027cb8b26d9fefa3ea28c8253929b8d6649e705d2835b6 \\\n    --hash=sha256:81d5eb2a312700f4ecaa977a8235b634ce853200e828fbadf3a9c50bab278328 \\\n    --hash=sha256:82004af6c302b5d3ab2cfc4cc5f29db16123b1a8417f2e25f9066f91d4411090 \\\n    --hash=sha256:837c2ce8c5a65a2035be9b3569c684358dfbf109fd3b6969630a87535495ceaa \\\n    --hash=sha256:840c25fb618a231545cbab0564a799f101b63b9901f2569faecd6b222ac72381 \\\n    --hash=sha256:8a6562c3700cce886c5be75ade4a5db4214fda19fede41d9792d100288d8f94c \\\n    --hash=sha256:8af65f14dc14a79b924524b1e7fffe304517b2bff5a58bf64f30b98bbc5079eb \\\n    --hash=sha256:8ef3c867360f88ac904fd3f5e1f902f13307af9052646963ee08ff4f131adafc \\\n    --hash=sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a \\\n    --hash=sha256:99ae2cffebb06e6c22bdc25801d7b30f503cc87dbd283479e7b606f70aff57ec \\\n    --hash=sha256:9a26f18905b8dd5d685d6d07b0cdf98a79f3c7a918906af7cc143ea2e164c8bc \\\n    --hash=sha256:9b35f4c90079ff2e2edc5b26c0c77925e5d2d255c42c74fdb70fb49b172726ac \\\n    --hash=sha256:9cd98cdc06614a2f768d2b7286d66805f94c48cde050acdbbb7db2600ab3197e \\\n    --hash=sha256:9d1bb833febdff5c8927f922386db610b49db6e0d4f4ee29601d71e7c2694313 \\\n    --hash=sha256:9f7fcd74d410a36883701fafa2482a6af2ff5ba96b9a620e9e0721e28ead5569 \\\n    --hash=sha256:a59cb51917aa591b1c4e6a43c132f0cdc3c76dbad6155df4e28ee626cc77a0a3 \\\n    --hash=sha256:a61900df84c667873b292c3de315a786dd8dac506704dea57bc957bd31e22c7d \\\n    --hash=sha256:a79cfe37875f822425b89a82333404539ae63dbdddf97f84dcbc3d339aae9525 \\\n    --hash=sha256:a8a8b89589086a25749f471e6a900d3f662d1d3b6e2e59dcecf787b1cc3a1894 \\\n    --hash=sha256:a8bf8d0f749c5757af2142fe7903a9df1d2e8aa3841559b2bad34b08d0e2bcf3 \\\n    --hash=sha256:a9768c477b9d7bd54bc0c86dbaebdec6f03306675526c9927c0e8a04e8f94af9 \\\n    --hash=sha256:ac1c4a689edcc530fc9d9aa11f5774b9e2f33f9a0c6a57864e90908f5208d30a \\\n    --hash=sha256:af2d8c67d8e573d6de5bc30cdb27e9b95e49115cd9baad5ddbd1a6207aaa82a9 \\\n    --hash=sha256:b435cba5f4f750aa6c0a0d92c541fb79f69a387c91e61f1795227e4ed9cece14 \\\n    --hash=sha256:b5b290ccc2a263e8d185130284f8501e3e36c5e02750fc6b6bdeb2e9e96f1e25 \\\n    --hash=sha256:b5d84d37db046c5ca74ee7bb47dd6cbc13f80665fdde3e8040bdd3fb015ecb50 \\\n    --hash=sha256:b7cf1017d601aa35e6bb650b6ad28652c9cd78ee6caff19f3c28d03e1c80acbf \\\n    --hash=sha256:bc7637e2f80d8530ee4a78e878bce464f70087ce73cf7c1caf142416923b98f1 \\\n    --hash=sha256:c0463276121fdee9c49b98908b3a89c39be45d86d1dbaa22957e38f6321d4ce3 \\\n    --hash=sha256:c4ef880e27901b6cc782f1b95f82da9313c0eb95c3af699103088fa0ac3ce9ac \\\n    --hash=sha256:c8ae8a0f02f57a6e61203a31428fa1d677cbe50c93622b4149d5c0f319c1d19e \\\n    --hash=sha256:ca5862d5b3928c4940729dacc329aa9102900382fea192fc5e52eb69d6093815 \\\n    --hash=sha256:cb01158d8b88ee68f15949894ccc6712278243d95f344770fa7593fa2d94410c \\\n    --hash=sha256:cb6254dc36b47a990e59e1068afacdcd02958bdcce30bb50cc1700a8b9d624a6 \\\n    --hash=sha256:cc00f04ed596e9dc0da42ed17ac5e596c6ccba999ba6bd92b0e0aef2f170f2d6 \\\n    --hash=sha256:cd09d08005f958f370f539f186d10aec3377d55b9eeb0d796025d4886119d76e \\\n    --hash=sha256:cd4b7ca9984e5e7985c12bc60a6f173f3c958eae74f3ef6624bb6b26e2abbae4 \\\n    --hash=sha256:ce8a0633f41a967713a59c4139d29110c07e826d131a316b50ce11b1d79b4f84 \\\n    --hash=sha256:cead0978fc57397645f12578bfd2d5ea9138ea0fac82b2f63f7f7c6877986a69 \\\n    --hash=sha256:d055ec1e26e441f6187acf818b73564e6e6282709e9bcb5b63f5b23068356a15 \\\n    --hash=sha256:d1f13550535ad8cff21b8d757a3257963e951d96e20ec82ab44bc64aeb62a191 \\\n    --hash=sha256:d9c7f57c3d666a53421049053eaacdd14bbd0a528e2186fcb2e672effd053bb0 \\\n    --hash=sha256:d9e45d7faa48ee908174d8fe84854479ef838fc6a705c9315372eacbc2f02897 \\\n    --hash=sha256:da3326d9e65ef63a817ecbcc0df6e94463713b754fe293eaa03da99befb9a5bd \\\n    --hash=sha256:de00632ca48df9daf77a2c65a484531649261ec9f25489917f09e455cb09ddb2 \\\n    --hash=sha256:e1f185f86a6f3403aa2420e815904c67b2f9ebc443f045edd0de921108345794 \\\n    --hash=sha256:e824f1492727fa856dd6eda4f7cee25f8518a12f3c4a56a74e8095695089cf6d \\\n    --hash=sha256:e912091979546adf63357d7e2ccff9b44f026c075aeaf25a52d0e95ad2281074 \\\n    --hash=sha256:eaabd426fe94daf8fd157c32e571c85cb12e66692f15516a83a03264b08d06c3 \\\n    --hash=sha256:ebf3e58c7ec8a8bed6d66a75d7fb37b55e5015b03ceae72a8e7c74495551e224 \\\n    --hash=sha256:ecaae4149d99b1c9e7b88bb03e3221956f68fd6d50be2ef061b2381b61d20838 \\\n    --hash=sha256:eecbc200c7fd5ddb9a7f16c7decb07b566c29fa2161a16cf67b8d068bd21690a \\\n    --hash=sha256:f155a433c2ec037d4e8df17d18922c3a0d9b3232a396690f17175d2946f0218d \\\n    --hash=sha256:f1e34719c6ed0b92f418c7c780480b26b5d9c50349e9a9af7d76bf757530350d \\\n    --hash=sha256:f34be2938726fc13801220747472850852fe6b1ea75869a048d6f896838c896f \\\n    --hash=sha256:f820802628d2694cb7e56db99213f930856014862f3fd943d290ea8438d07ca8 \\\n    --hash=sha256:f8bf04158c6b607d747e93949aa60618b61312fe647a6369f88ce2ff16043490 \\\n    --hash=sha256:f8e160feb2aed042cd657a72acc0b481212ed28b1b9a95c0cee1621b524e1966 \\\n    --hash=sha256:f9d332f8c2a2fcbffe1378594431458ddbef721c1769d78e2cbc06280d8155f9 \\\n    --hash=sha256:fa09f53c465e532f4d3db095e0c55b615f010ad81803d383195b6b5ca6cbf5f3 \\\n    --hash=sha256:faa3a41b2b66b6e50f84ae4a68c64fcd0c44355741c6374813a800cd6695db9e \\\n    --hash=sha256:fd44c878ea55ba351104cb93cc85e74916eb8fa440ca7903e57575e97394f608\n    # via requests\nclick==8.3.1 \\\n    --hash=sha256:12ff4785d337a1bb490bb7e9c2b1ee5da3112e94a8622f26a6c77f5d2fc6842a \\\n    --hash=sha256:981153a64e25f12d547d3426c367a4857371575ee7ad18df2a6183ab0545b2a6\n    # via\n    #   nltk\n    #   safety\n    #   typer\ncryptography==46.0.3 \\\n    --hash=sha256:00a5e7e87938e5ff9ff5447ab086a5706a957137e6e433841e9d24f38a065217 \\\n    --hash=sha256:01ca9ff2885f3acc98c29f1860552e37f6d7c7d013d7334ff2a9de43a449315d \\\n    --hash=sha256:09859af8466b69bc3c27bdf4f5d84a665e0f7ab5088412e9e2ec49758eca5cbc \\\n    --hash=sha256:0abf1ffd6e57c67e92af68330d05760b7b7efb243aab8377e583284dbab72c71 \\\n    --hash=sha256:1000713389b75c449a6e979ffc7dcc8ac90b437048766cef052d4d30b8220971 \\\n    --hash=sha256:109d4ddfadf17e8e7779c39f9b18111a09efb969a301a31e987416a0191ed93a \\\n    --hash=sha256:10b01676fc208c3e6feeb25a8b83d81767e8059e1fe86e1dc62d10a3018fa926 \\\n    --hash=sha256:10ca84c4668d066a9878890047f03546f3ae0a6b8b39b697457b7757aaf18dbc \\\n    --hash=sha256:15ab9b093e8f09daab0f2159bb7e47532596075139dd74365da52ecc9cb46c5d \\\n    --hash=sha256:191bb60a7be5e6f54e30ba16fdfae78ad3a342a0599eb4193ba88e3f3d6e185b \\\n    --hash=sha256:22d7e97932f511d6b0b04f2bfd818d73dcd5928db509460aaf48384778eb6d20 \\\n    --hash=sha256:23b1a8f26e43f47ceb6d6a43115f33a5a37d57df4ea0ca295b780ae8546e8044 \\\n    --hash=sha256:36e627112085bb3b81b19fed209c05ce2a52ee8b15d161b7c643a7d5a88491f3 \\\n    --hash=sha256:39b6755623145ad5eff1dab323f4eae2a32a77a7abef2c5089a04a3d04366715 \\\n    --hash=sha256:3b51b8ca4f1c6453d8829e1eb7299499ca7f313900dd4d89a24b8b87c0a780d4 \\\n    --hash=sha256:402b58fc32614f00980b66d6e56a5b4118e6cb362ae8f3fda141ba4689bd4506 \\\n    --hash=sha256:416260257577718c05135c55958b674000baef9a1c7d9e8f306ec60d71db850f \\\n    --hash=sha256:46acf53b40ea38f9c6c229599a4a13f0d46a6c3fa9ef19fc1a124d62e338dfa0 \\\n    --hash=sha256:4b7387121ac7d15e550f5cb4a43aef2559ed759c35df7336c402bb8275ac9683 \\\n    --hash=sha256:50fc3343ac490c6b08c0cf0d704e881d0d660be923fd3076db3e932007e726e3 \\\n    --hash=sha256:516ea134e703e9fe26bcd1277a4b59ad30586ea90c365a87781d7887a646fe21 \\\n    --hash=sha256:549e234ff32571b1f4076ac269fcce7a808d3bf98b76c8dd560e42dbc66d7d91 \\\n    --hash=sha256:5d7f93296ee28f68447397bf5198428c9aeeab45705a55d53a6343455dcb2c3c \\\n    --hash=sha256:5ecfccd2329e37e9b7112a888e76d9feca2347f12f37918facbb893d7bb88ee8 \\\n    --hash=sha256:6276eb85ef938dc035d59b87c8a7dc559a232f954962520137529d77b18ff1df \\\n    --hash=sha256:6b5063083824e5509fdba180721d55909ffacccc8adbec85268b48439423d78c \\\n    --hash=sha256:6eae65d4c3d33da080cff9c4ab1f711b15c1d9760809dad6ea763f3812d254cb \\\n    --hash=sha256:6f61efb26e76c45c4a227835ddeae96d83624fb0d29eb5df5b96e14ed1a0afb7 \\\n    --hash=sha256:71e842ec9bc7abf543b47cf86b9a743baa95f4677d22baa4c7d5c69e49e9bc04 \\\n    --hash=sha256:760f83faa07f8b64e9c33fc963d790a2edb24efb479e3520c14a45741cd9b2db \\\n    --hash=sha256:78a97cf6a8839a48c49271cdcbd5cf37ca2c1d6b7fdd86cc864f302b5e9bf459 \\\n    --hash=sha256:7ce938a99998ed3c8aa7e7272dca1a610401ede816d36d0693907d863b10d9ea \\\n    --hash=sha256:8a6e050cb6164d3f830453754094c086ff2d0b2f3a897a1d9820f6139a1f0914 \\\n    --hash=sha256:9394673a9f4de09e28b5356e7fff97d778f8abad85c9d5ac4a4b7e25a0de7717 \\\n    --hash=sha256:94cd0549accc38d1494e1f8de71eca837d0509d0d44bf11d158524b0e12cebf9 \\\n    --hash=sha256:a04bee9ab6a4da801eb9b51f1b708a1b5b5c9eb48c03f74198464c66f0d344ac \\\n    --hash=sha256:a23582810fedb8c0bc47524558fb6c56aac3fc252cb306072fd2815da2a47c32 \\\n    --hash=sha256:a2c0cd47381a3229c403062f764160d57d4d175e022c1df84e168c6251a22eec \\\n    --hash=sha256:a8b17438104fed022ce745b362294d9ce35b4c2e45c1d958ad4a4b019285f4a1 \\\n    --hash=sha256:a9a3008438615669153eb86b26b61e09993921ebdd75385ddd748702c5adfddb \\\n    --hash=sha256:b02cf04496f6576afffef5ddd04a0cb7d49cf6be16a9059d793a30b035f6b6ac \\\n    --hash=sha256:b419ae593c86b87014b9be7396b385491ad7f320bde96826d0dd174459e54665 \\\n    --hash=sha256:c0a7bb1a68a5d3471880e264621346c48665b3bf1c3759d682fc0864c540bd9e \\\n    --hash=sha256:c70cc23f12726be8f8bc72e41d5065d77e4515efae3690326764ea1b07845cfb \\\n    --hash=sha256:c8daeb2d2174beb4575b77482320303f3d39b8e81153da4f0fb08eb5fe86a6c5 \\\n    --hash=sha256:cb3d760a6117f621261d662bccc8ef5bc32ca673e037c83fbe565324f5c46936 \\\n    --hash=sha256:d55f3dffadd674514ad19451161118fd010988540cee43d8bc20675e775925de \\\n    --hash=sha256:d89c3468de4cdc4f08a57e214384d0471911a3830fcdaf7a8cc587e42a866372 \\\n    --hash=sha256:db391fa7c66df6762ee3f00c95a89e6d428f4d60e7abc8328f4fe155b5ac6e54 \\\n    --hash=sha256:dfb781ff7eaa91a6f7fd41776ec37c5853c795d3b358d4896fdbb5df168af422 \\\n    --hash=sha256:e5bf0ed4490068a2e72ac03d786693adeb909981cc596425d09032d372bcc849 \\\n    --hash=sha256:e7aec276d68421f9574040c26e2a7c3771060bc0cff408bae1dcb19d3ab1e63c \\\n    --hash=sha256:ef639cb3372f69ec44915fafcd6698b6cc78fbe0c2ea41be867f6ed612811963 \\\n    --hash=sha256:f260d0d41e9b4da1ed1e0f1ce571f97fe370b152ab18778e9e8f67d6af432018\n    # via authlib\ndistlib==0.4.0 \\\n    --hash=sha256:9659f7d87e46584a30b5780e43ac7a2143098441670ff0a49d5f9034c54a6c16 \\\n    --hash=sha256:feec40075be03a04501a973d81f633735b4b69f98b05450592310c0f401a4e0d\n    # via virtualenv\ndparse==0.6.4 \\\n    --hash=sha256:90b29c39e3edc36c6284c82c4132648eaf28a01863eb3c231c2512196132201a \\\n    --hash=sha256:fbab4d50d54d0e739fbb4dedfc3d92771003a5b9aa8545ca7a7045e3b174af57\n    # via\n    #   safety\n    #   safety-schemas\nfilelock==3.20.0 \\\n    --hash=sha256:339b4732ffda5cd79b13f4e2711a31b0365ce445d95d243bb996273d072546a2 \\\n    --hash=sha256:711e943b4ec6be42e1d4e6690b48dc175c822967466bb31c0c293f34334c13f4\n    # via\n    #   safety\n    #   virtualenv\nh11==0.16.0 \\\n    --hash=sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1 \\\n    --hash=sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86\n    # via httpcore\nhttpcore==1.0.9 \\\n    --hash=sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55 \\\n    --hash=sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8\n    # via httpx\nhttpx==0.28.1 \\\n    --hash=sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc \\\n    --hash=sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad\n    # via safety\nidna==3.11 \\\n    --hash=sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea \\\n    --hash=sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902\n    # via\n    #   anyio\n    #   httpx\n    #   requests\njinja2==3.1.6 \\\n    --hash=sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d \\\n    --hash=sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67\n    # via safety\njoblib==1.5.2 \\\n    --hash=sha256:3faa5c39054b2f03ca547da9b2f52fde67c06240c31853f306aea97f13647b55 \\\n    --hash=sha256:4e1f0bdbb987e6d843c70cf43714cb276623def372df3c22fe5266b2670bc241\n    # via nltk\nmarkdown-it-py==4.0.0 \\\n    --hash=sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147 \\\n    --hash=sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3\n    # via rich\nmarkupsafe==3.0.3 \\\n    --hash=sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f \\\n    --hash=sha256:068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a \\\n    --hash=sha256:0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf \\\n    --hash=sha256:0db14f5dafddbb6d9208827849fad01f1a2609380add406671a26386cdf15a19 \\\n    --hash=sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf \\\n    --hash=sha256:0f4b68347f8c5eab4a13419215bdfd7f8c9b19f2b25520968adfad23eb0ce60c \\\n    --hash=sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175 \\\n    --hash=sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219 \\\n    --hash=sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb \\\n    --hash=sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6 \\\n    --hash=sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab \\\n    --hash=sha256:15d939a21d546304880945ca1ecb8a039db6b4dc49b2c5a400387cdae6a62e26 \\\n    --hash=sha256:177b5253b2834fe3678cb4a5f0059808258584c559193998be2601324fdeafb1 \\\n    --hash=sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce \\\n    --hash=sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218 \\\n    --hash=sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634 \\\n    --hash=sha256:1ba88449deb3de88bd40044603fafffb7bc2b055d626a330323a9ed736661695 \\\n    --hash=sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad \\\n    --hash=sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73 \\\n    --hash=sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c \\\n    --hash=sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe \\\n    --hash=sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa \\\n    --hash=sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559 \\\n    --hash=sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa \\\n    --hash=sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37 \\\n    --hash=sha256:3537e01efc9d4dccdf77221fb1cb3b8e1a38d5428920e0657ce299b20324d758 \\\n    --hash=sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f \\\n    --hash=sha256:38664109c14ffc9e7437e86b4dceb442b0096dfe3541d7864d9cbe1da4cf36c8 \\\n    --hash=sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d \\\n    --hash=sha256:3b562dd9e9ea93f13d53989d23a7e775fdfd1066c33494ff43f5418bc8c58a5c \\\n    --hash=sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97 \\\n    --hash=sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a \\\n    --hash=sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19 \\\n    --hash=sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9 \\\n    --hash=sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9 \\\n    --hash=sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc \\\n    --hash=sha256:591ae9f2a647529ca990bc681daebdd52c8791ff06c2bfa05b65163e28102ef2 \\\n    --hash=sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4 \\\n    --hash=sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354 \\\n    --hash=sha256:6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50 \\\n    --hash=sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698 \\\n    --hash=sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9 \\\n    --hash=sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b \\\n    --hash=sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc \\\n    --hash=sha256:7be7b61bb172e1ed687f1754f8e7484f1c8019780f6f6b0786e76bb01c2ae115 \\\n    --hash=sha256:7c3fb7d25180895632e5d3148dbdc29ea38ccb7fd210aa27acbd1201a1902c6e \\\n    --hash=sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485 \\\n    --hash=sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f \\\n    --hash=sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12 \\\n    --hash=sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025 \\\n    --hash=sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009 \\\n    --hash=sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d \\\n    --hash=sha256:949b8d66bc381ee8b007cd945914c721d9aba8e27f71959d750a46f7c282b20b \\\n    --hash=sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a \\\n    --hash=sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5 \\\n    --hash=sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f \\\n    --hash=sha256:a320721ab5a1aba0a233739394eb907f8c8da5c98c9181d1161e77a0c8e36f2d \\\n    --hash=sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1 \\\n    --hash=sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287 \\\n    --hash=sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6 \\\n    --hash=sha256:bc51efed119bc9cfdf792cdeaa4d67e8f6fcccab66ed4bfdd6bde3e59bfcbb2f \\\n    --hash=sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581 \\\n    --hash=sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed \\\n    --hash=sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b \\\n    --hash=sha256:c0c0b3ade1c0b13b936d7970b1d37a57acde9199dc2aecc4c336773e1d86049c \\\n    --hash=sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026 \\\n    --hash=sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8 \\\n    --hash=sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676 \\\n    --hash=sha256:d2ee202e79d8ed691ceebae8e0486bd9a2cd4794cec4824e1c99b6f5009502f6 \\\n    --hash=sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e \\\n    --hash=sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d \\\n    --hash=sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d \\\n    --hash=sha256:de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01 \\\n    --hash=sha256:df2449253ef108a379b8b5d6b43f4b1a8e81a061d6537becd5582fba5f9196d7 \\\n    --hash=sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419 \\\n    --hash=sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795 \\\n    --hash=sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1 \\\n    --hash=sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5 \\\n    --hash=sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d \\\n    --hash=sha256:e8fc20152abba6b83724d7ff268c249fa196d8259ff481f3b1476383f8f24e42 \\\n    --hash=sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe \\\n    --hash=sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda \\\n    --hash=sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e \\\n    --hash=sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737 \\\n    --hash=sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523 \\\n    --hash=sha256:f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591 \\\n    --hash=sha256:f71a396b3bf33ecaa1626c255855702aca4d3d9fea5e051b41ac59a9c1c41edc \\\n    --hash=sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a \\\n    --hash=sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50\n    # via jinja2\nmarshmallow==4.1.1 \\\n    --hash=sha256:550aa14b619072f0a8d8184911b3f1021c5c32587fb27318ddf81ce0d0029c9d \\\n    --hash=sha256:9038db4cceb849ce2b8676ccf3d8e5b5e634ac499e291397efa260aa796c385a\n    # via safety\nmdurl==0.1.2 \\\n    --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \\\n    --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba\n    # via markdown-it-py\nnltk==3.9.2 \\\n    --hash=sha256:0f409e9b069ca4177c1903c3e843eef90c7e92992fa4931ae607da6de49e1419 \\\n    --hash=sha256:1e209d2b3009110635ed9709a67a1a3e33a10f799490fa71cf4bec218c11c88a\n    # via safety\npackaging==25.0 \\\n    --hash=sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484 \\\n    --hash=sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f\n    # via\n    #   dparse\n    #   pipenv\n    #   safety\n    #   safety-schemas\npipenv==2025.1.3 \\\n    --hash=sha256:b746bc56685ff92598b52c97788e3f5187eef1eacea370cef59450ec0565f9b7 \\\n    --hash=sha256:fbdb4740aba05c007ddd4f841f569778b0cc28304dbc7d2071cb22b74e08586b\n    # via -r requirements.in\nplatformdirs==4.5.1 \\\n    --hash=sha256:61d5cdcc6065745cdd94f0f878977f8de9437be93de97c1c12f853c9c0cdcbda \\\n    --hash=sha256:d03afa3963c806a9bed9d5125c8f4cb2fdaf74a55ab60e5d59b3fde758104d31\n    # via virtualenv\npycparser==2.23 \\\n    --hash=sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2 \\\n    --hash=sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934\n    # via cffi\npydantic==2.12.5 \\\n    --hash=sha256:4d351024c75c0f085a9febbb665ce8c0c6ec5d30e903bdb6394b7ede26aebb49 \\\n    --hash=sha256:e561593fccf61e8a20fc46dfc2dfe075b8be7d0188df33f221ad1f0139180f9d\n    # via\n    #   safety\n    #   safety-schemas\npydantic-core==2.41.5 \\\n    --hash=sha256:0177272f88ab8312479336e1d777f6b124537d47f2123f89cb37e0accea97f90 \\\n    --hash=sha256:01a3d0ab748ee531f4ea6c3e48ad9dac84ddba4b0d82291f87248f2f9de8d740 \\\n    --hash=sha256:0384e2e1021894b1ff5a786dbf94771e2986ebe2869533874d7e43bc79c6f504 \\\n    --hash=sha256:03b77d184b9eb40240ae9fd676ca364ce1085f203e1b1256f8ab9984dca80a84 \\\n    --hash=sha256:03ca43e12fab6023fc79d28ca6b39b05f794ad08ec2feccc59a339b02f2b3d33 \\\n    --hash=sha256:05a2c8852530ad2812cb7914dc61a1125dc4e06252ee98e5638a12da6cc6fb6c \\\n    --hash=sha256:070259a8818988b9a84a449a2a7337c7f430a22acc0859c6b110aa7212a6d9c0 \\\n    --hash=sha256:08daa51ea16ad373ffd5e7606252cc32f07bc72b28284b6bc9c6df804816476e \\\n    --hash=sha256:0cbaad15cb0c90aa221d43c00e77bb33c93e8d36e0bf74760cd00e732d10a6a0 \\\n    --hash=sha256:100baa204bb412b74fe285fb0f3a385256dad1d1879f0a5cb1499ed2e83d132a \\\n    --hash=sha256:112e305c3314f40c93998e567879e887a3160bb8689ef3d2c04b6cc62c33ac34 \\\n    --hash=sha256:16f80f7abe3351f8ea6858914ddc8c77e02578544a0ebc15b4c2e1a0e813b0b2 \\\n    --hash=sha256:1746d4a3d9a794cacae06a5eaaccb4b8643a131d45fbc9af23e353dc0a5ba5c3 \\\n    --hash=sha256:1962293292865bca8e54702b08a4f26da73adc83dd1fcf26fbc875b35d81c815 \\\n    --hash=sha256:1d1d9764366c73f996edd17abb6d9d7649a7eb690006ab6adbda117717099b14 \\\n    --hash=sha256:1f8d33a7f4d5a7889e60dc39856d76d09333d8a6ed0f5f1190635cbec70ec4ba \\\n    --hash=sha256:22f0fb8c1c583a3b6f24df2470833b40207e907b90c928cc8d3594b76f874375 \\\n    --hash=sha256:239edca560d05757817c13dc17c50766136d21f7cd0fac50295499ae24f90fdf \\\n    --hash=sha256:242a206cd0318f95cd21bdacff3fcc3aab23e79bba5cac3db5a841c9ef9c6963 \\\n    --hash=sha256:25e1c2af0fce638d5f1988b686f3b3ea8cd7de5f244ca147c777769e798a9cd1 \\\n    --hash=sha256:266fb4cbf5e3cbd0b53669a6d1b039c45e3ce651fd5442eff4d07c2cc8d66808 \\\n    --hash=sha256:2782c870e99878c634505236d81e5443092fba820f0373997ff75f90f68cd553 \\\n    --hash=sha256:287dad91cfb551c363dc62899a80e9e14da1f0e2b6ebde82c806612ca2a13ef1 \\\n    --hash=sha256:29452c56df2ed968d18d7e21f4ab0ac55e71dc59524872f6fc57dcf4a3249ed2 \\\n    --hash=sha256:299e0a22e7ae2b85c1a57f104538b2656e8ab1873511fd718a1c1c6f149b77b5 \\\n    --hash=sha256:2a5e06546e19f24c6a96a129142a75cee553cc018ffee48a460059b1185f4470 \\\n    --hash=sha256:2b761d210c9ea91feda40d25b4efe82a1707da2ef62901466a42492c028553a2 \\\n    --hash=sha256:2c010c6ded393148374c0f6f0bf89d206bf3217f201faa0635dcd56bd1520f6b \\\n    --hash=sha256:2ff4321e56e879ee8d2a879501c8e469414d948f4aba74a2d4593184eb326660 \\\n    --hash=sha256:3006c3dd9ba34b0c094c544c6006cc79e87d8612999f1a5d43b769b89181f23c \\\n    --hash=sha256:33cb885e759a705b426baada1fe68cbb0a2e68e34c5d0d0289a364cf01709093 \\\n    --hash=sha256:346285d28e4c8017da95144c7f3acd42740d637ff41946af5ce6e5e420502dd5 \\\n    --hash=sha256:34a64bc3441dc1213096a20fe27e8e128bd3ff89921706e83c0b1ac971276594 \\\n    --hash=sha256:35b44f37a3199f771c3eaa53051bc8a70cd7b54f333531c59e29fd4db5d15008 \\\n    --hash=sha256:378bec5c66998815d224c9ca994f1e14c0c21cb95d2f52b6021cc0b2a58f2a5a \\\n    --hash=sha256:3f37a19d7ebcdd20b96485056ba9e8b304e27d9904d233d7b1015db320e51f0a \\\n    --hash=sha256:3f84d5c1b4ab906093bdc1ff10484838aca54ef08de4afa9de0f5f14d69639cd \\\n    --hash=sha256:4009935984bd36bd2c774e13f9a09563ce8de4abaa7226f5108262fa3e637284 \\\n    --hash=sha256:406bf18d345822d6c21366031003612b9c77b3e29ffdb0f612367352aab7d586 \\\n    --hash=sha256:4819fa52133c9aa3c387b3328f25c1facc356491e6135b459f1de698ff64d869 \\\n    --hash=sha256:482c982f814460eabe1d3bb0adfdc583387bd4691ef00b90575ca0d2b6fe2294 \\\n    --hash=sha256:4bc36bbc0b7584de96561184ad7f012478987882ebf9f9c389b23f432ea3d90f \\\n    --hash=sha256:506d766a8727beef16b7adaeb8ee6217c64fc813646b424d0804d67c16eddb66 \\\n    --hash=sha256:56121965f7a4dc965bff783d70b907ddf3d57f6eba29b6d2e5dabfaf07799c51 \\\n    --hash=sha256:58133647260ea01e4d0500089a8c4f07bd7aa6ce109682b1426394988d8aaacc \\\n    --hash=sha256:5921a4d3ca3aee735d9fd163808f5e8dd6c6972101e4adbda9a4667908849b97 \\\n    --hash=sha256:5a4e67afbc95fa5c34cf27d9089bca7fcab4e51e57278d710320a70b956d1b9a \\\n    --hash=sha256:5cb1b2f9742240e4bb26b652a5aeb840aa4b417c7748b6f8387927bc6e45e40d \\\n    --hash=sha256:62de39db01b8d593e45871af2af9e497295db8d73b085f6bfd0b18c83c70a8f9 \\\n    --hash=sha256:634e8609e89ceecea15e2d61bc9ac3718caaaa71963717bf3c8f38bfde64242c \\\n    --hash=sha256:63510af5e38f8955b8ee5687740d6ebf7c2a0886d15a6d65c32814613681bc07 \\\n    --hash=sha256:650ae77860b45cfa6e2cdafc42618ceafab3a2d9a3811fcfbd3bbf8ac3c40d36 \\\n    --hash=sha256:6561e94ba9dacc9c61bce40e2d6bdc3bfaa0259d3ff36ace3b1e6901936d2e3e \\\n    --hash=sha256:65840751b72fbfd82c3c640cff9284545342a4f1eb1586ad0636955b261b0b05 \\\n    --hash=sha256:6cb58b9c66f7e4179a2d5e0f849c48eff5c1fca560994d6eb6543abf955a149e \\\n    --hash=sha256:6f52298fbd394f9ed112d56f3d11aabd0d5bd27beb3084cc3d8ad069483b8941 \\\n    --hash=sha256:707625ef0983fcfb461acfaf14de2067c5942c6bb0f3b4c99158bed6fedd3cf3 \\\n    --hash=sha256:72f6c8b11857a856bcfa48c86f5368439f74453563f951e473514579d44aa612 \\\n    --hash=sha256:753e230374206729bf0a807954bcc6c150d3743928a73faffee51ac6557a03c3 \\\n    --hash=sha256:76d0819de158cd855d1cbb8fcafdf6f5cf1eb8e470abe056d5d161106e38062b \\\n    --hash=sha256:76ee27c6e9c7f16f47db7a94157112a2f3a00e958bc626e2f4ee8bec5c328fbe \\\n    --hash=sha256:77b63866ca88d804225eaa4af3e664c5faf3568cea95360d21f4725ab6e07146 \\\n    --hash=sha256:79ec52ec461e99e13791ec6508c722742ad745571f234ea6255bed38c6480f11 \\\n    --hash=sha256:7b93a4d08587e2b7e7882de461e82b6ed76d9026ce91ca7915e740ecc7855f60 \\\n    --hash=sha256:7da7087d756b19037bc2c06edc6c170eeef3c3bafcb8f532ff17d64dc427adfd \\\n    --hash=sha256:7f3bf998340c6d4b0c9a2f02d6a400e51f123b59565d74dc60d252ce888c260b \\\n    --hash=sha256:80aa89cad80b32a912a65332f64a4450ed00966111b6615ca6816153d3585a8c \\\n    --hash=sha256:8566def80554c3faa0e65ac30ab0932b9e3a5cd7f8323764303d468e5c37595a \\\n    --hash=sha256:873e0d5b4fb9b89ef7c2d2a963ea7d02879d9da0da8d9d4933dee8ee86a8b460 \\\n    --hash=sha256:88942d3a3dff3afc8288c21e565e476fc278902ae4d6d134f1eeda118cc830b1 \\\n    --hash=sha256:8bfeaf8735be79f225f3fefab7f941c712aaca36f1128c9d7e2352ee1aa87bdf \\\n    --hash=sha256:8e7c86f27c585ef37c35e56a96363ab8de4e549a95512445b85c96d3e2f7c1bf \\\n    --hash=sha256:915c3d10f81bec3a74fbd4faebe8391013ba61e5a1a8d48c4455b923bdda7858 \\\n    --hash=sha256:93e8740d7503eb008aa2df04d3b9735f845d43ae845e6dcd2be0b55a2da43cd2 \\\n    --hash=sha256:941103c9be18ac8daf7b7adca8228f8ed6bb7a1849020f643b3a14d15b1924d9 \\\n    --hash=sha256:97aeba56665b4c3235a0e52b2c2f5ae9cd071b8a8310ad27bddb3f7fb30e9aa2 \\\n    --hash=sha256:a39455728aabd58ceabb03c90e12f71fd30fa69615760a075b9fec596456ccc3 \\\n    --hash=sha256:a3a52f6156e73e7ccb0f8cced536adccb7042be67cb45f9562e12b319c119da6 \\\n    --hash=sha256:a668ce24de96165bb239160b3d854943128f4334822900534f2fe947930e5770 \\\n    --hash=sha256:a75dafbf87d6276ddc5b2bf6fae5254e3d0876b626eb24969a574fff9149ee5d \\\n    --hash=sha256:aabf5777b5c8ca26f7824cb4a120a740c9588ed58df9b2d196ce92fba42ff8dc \\\n    --hash=sha256:aec5cf2fd867b4ff45b9959f8b20ea3993fc93e63c7363fe6851424c8a7e7c23 \\\n    --hash=sha256:b2379fa7ed44ddecb5bfe4e48577d752db9fc10be00a6b7446e9663ba143de26 \\\n    --hash=sha256:b4ececa40ac28afa90871c2cc2b9ffd2ff0bf749380fbdf57d165fd23da353aa \\\n    --hash=sha256:b5819cd790dbf0c5eb9f82c73c16b39a65dd6dd4d1439dcdea7816ec9adddab8 \\\n    --hash=sha256:b74557b16e390ec12dca509bce9264c3bbd128f8a2c376eaa68003d7f327276d \\\n    --hash=sha256:b80aa5095cd3109962a298ce14110ae16b8c1aece8b72f9dafe81cf597ad80b3 \\\n    --hash=sha256:b93590ae81f7010dbe380cdeab6f515902ebcbefe0b9327cc4804d74e93ae69d \\\n    --hash=sha256:b96d5f26b05d03cc60f11a7761a5ded1741da411e7fe0909e27a5e6a0cb7b034 \\\n    --hash=sha256:bd3d54f38609ff308209bd43acea66061494157703364ae40c951f83ba99a1a9 \\\n    --hash=sha256:bfea2a5f0b4d8d43adf9d7b8bf019fb46fdd10a2e5cde477fbcb9d1fa08c68e1 \\\n    --hash=sha256:c007fe8a43d43b3969e8469004e9845944f1a80e6acd47c150856bb87f230c56 \\\n    --hash=sha256:c1df3d34aced70add6f867a8cf413e299177e0c22660cc767218373d0779487b \\\n    --hash=sha256:c23e27686783f60290e36827f9c626e63154b82b116d7fe9adba1fda36da706c \\\n    --hash=sha256:c8d8b4eb992936023be7dee581270af5c6e0697a8559895f527f5b7105ecd36a \\\n    --hash=sha256:c9e19dd6e28fdcaa5a1de679aec4141f691023916427ef9bae8584f9c2fb3b0e \\\n    --hash=sha256:d0d2568a8c11bf8225044aa94409e21da0cb09dcdafe9ecd10250b2baad531a9 \\\n    --hash=sha256:d38548150c39b74aeeb0ce8ee1d8e82696f4a4e16ddc6de7b1d8823f7de4b9b5 \\\n    --hash=sha256:d3a978c4f57a597908b7e697229d996d77a6d3c94901e9edee593adada95ce1a \\\n    --hash=sha256:d5160812ea7a8a2ffbe233d8da666880cad0cbaf5d4de74ae15c313213d62556 \\\n    --hash=sha256:dc799088c08fa04e43144b164feb0c13f9a0bc40503f8df3e9fde58a3c0c101e \\\n    --hash=sha256:df3959765b553b9440adfd3c795617c352154e497a4eaf3752555cfb5da8fc49 \\\n    --hash=sha256:dfa8a0c812ac681395907e71e1274819dec685fec28273a28905df579ef137e2 \\\n    --hash=sha256:e25c479382d26a2a41b7ebea1043564a937db462816ea07afa8a44c0866d52f9 \\\n    --hash=sha256:e4f4a984405e91527a0d62649ee21138f8e3d0ef103be488c1dc11a80d7f184b \\\n    --hash=sha256:e536c98a7626a98feb2d3eaf75944ef6f3dbee447e1f841eae16f2f0a72d8ddc \\\n    --hash=sha256:e56ba91f47764cc14f1daacd723e3e82d1a89d783f0f5afe9c364b8bb491ccdb \\\n    --hash=sha256:e672ba74fbc2dc8eea59fb6d4aed6845e6905fc2a8afe93175d94a83ba2a01a0 \\\n    --hash=sha256:e7b576130c69225432866fe2f4a469a85a54ade141d96fd396dffcf607b558f8 \\\n    --hash=sha256:e8465ab91a4bd96d36dde3263f06caa6a8a6019e4113f24dc753d79a8b3a3f82 \\\n    --hash=sha256:e96cea19e34778f8d59fe40775a7a574d95816eb150850a85a7a4c8f4b94ac69 \\\n    --hash=sha256:ece5c59f0ce7d001e017643d8d24da587ea1f74f6993467d85ae8a5ef9d4f42b \\\n    --hash=sha256:eceb81a8d74f9267ef4081e246ffd6d129da5d87e37a77c9bde550cb04870c1c \\\n    --hash=sha256:ed2e99c456e3fadd05c991f8f437ef902e00eedf34320ba2b0842bd1c3ca3a75 \\\n    --hash=sha256:f0cd744688278965817fd0839c4a4116add48d23890d468bc436f78beb28abf5 \\\n    --hash=sha256:f14f8f046c14563f8eb3f45f499cc658ab8d10072961e07225e507adb700e93f \\\n    --hash=sha256:f15489ba13d61f670dcc96772e733aad1a6f9c429cc27574c6cdaed82d0146ad \\\n    --hash=sha256:f31d95a179f8d64d90f6831d71fa93290893a33148d890ba15de25642c5d075b \\\n    --hash=sha256:f41a7489d32336dbf2199c8c0a215390a751c5b014c2c1c5366e817202e9cdf7 \\\n    --hash=sha256:f41eb9797986d6ebac5e8edff36d5cef9de40def462311b3eb3eeded1431e425 \\\n    --hash=sha256:f547144f2966e1e16ae626d8ce72b4cfa0caedc7fa28052001c94fb2fcaa1c52\n    # via pydantic\npygments==2.19.2 \\\n    --hash=sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887 \\\n    --hash=sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b\n    # via rich\nregex==2025.11.3 \\\n    --hash=sha256:04d2765516395cf7dda331a244a3282c0f5ae96075f728629287dfa6f76ba70a \\\n    --hash=sha256:087511f5c8b7dfbe3a03f5d5ad0c2a33861b1fc387f21f6f60825a44865a385a \\\n    --hash=sha256:08b884f4226602ad40c5d55f52bf91a9df30f513864e0054bad40c0e9cf1afb7 \\\n    --hash=sha256:0d31e08426ff4b5b650f68839f5af51a92a5b51abd8554a60c2fbc7c71f25d0b \\\n    --hash=sha256:0f9397d561a4c16829d4e6ff75202c1c08b68a3bdbfe29dbfcdb31c9830907c6 \\\n    --hash=sha256:10483eefbfb0adb18ee9474498c9a32fcf4e594fbca0543bb94c48bac6183e2e \\\n    --hash=sha256:149eb0bba95231fb4f6d37c8f760ec9fa6fabf65bab555e128dde5f2475193ec \\\n    --hash=sha256:1e00ec2970aab10dc5db34af535f21fcf32b4a31d99e34963419636e2f85ae39 \\\n    --hash=sha256:1eb1ebf6822b756c723e09f5186473d93236c06c579d2cc0671a722d2ab14281 \\\n    --hash=sha256:1fedc720f9bb2494ce31a58a1631f9c82df6a09b49c19517ea5cc280b4541e01 \\\n    --hash=sha256:1ff0d190c7f68ae7769cd0313fe45820ba07ffebfddfaa89cc1eb70827ba0ddc \\\n    --hash=sha256:2292cd5a90dab247f9abe892ac584cb24f0f54680c73fcb4a7493c66c2bf2467 \\\n    --hash=sha256:22b29dda7e1f7062a52359fca6e58e548e28c6686f205e780b02ad8ef710de36 \\\n    --hash=sha256:22c12d837298651e5550ac1d964e4ff57c3f56965fc1812c90c9fb2028eaf267 \\\n    --hash=sha256:22dd622a402aad4558277305350699b2be14bc59f64d64ae1d928ce7d072dced \\\n    --hash=sha256:22e7d1cdfa88ef33a2ae6aa0d707f9255eb286ffbd90045f1088246833223aee \\\n    --hash=sha256:28ba4d69171fc6e9896337d4fc63a43660002b7da53fc15ac992abcf3410917c \\\n    --hash=sha256:2ab815eb8a96379a27c3b6157fcb127c8f59c36f043c1678110cea492868f1d5 \\\n    --hash=sha256:2b441a4ae2c8049106e8b39973bfbddfb25a179dda2bdb99b0eeb60c40a6a3af \\\n    --hash=sha256:2fa2eed3f76677777345d2f81ee89f5de2f5745910e805f7af7386a920fa7313 \\\n    --hash=sha256:32f74f35ff0f25a5021373ac61442edcb150731fbaa28286bbc8bb1582c89d02 \\\n    --hash=sha256:3809988f0a8b8c9dcc0f92478d6501fac7200b9ec56aecf0ec21f4a2ec4b6009 \\\n    --hash=sha256:3839967cf4dc4b985e1570fd8d91078f0c519f30491c60f9ac42a8db039be204 \\\n    --hash=sha256:38af559ad934a7b35147716655d4a2f79fcef2d695ddfe06a06ba40ae631fa7e \\\n    --hash=sha256:3a91e4a29938bc1a082cc28fdea44be420bf2bebe2665343029723892eb073e1 \\\n    --hash=sha256:3b30bc921d50365775c09a7ed446359e5c0179e9e2512beec4a60cbcef6ddd50 \\\n    --hash=sha256:3b3a5f320136873cc5561098dfab677eea139521cb9a9e8db98b7e64aef44cbc \\\n    --hash=sha256:3bf28b1873a8af8bbb58c26cc56ea6e534d80053b41fb511a35795b6de507e6a \\\n    --hash=sha256:3e0b11b2b2433d1c39c7c7a30e3f3d0aeeea44c2a8d0bae28f6b95f639927a69 \\\n    --hash=sha256:3e816cc9aac1cd3cc9a4ec4d860f06d40f994b5c7b4d03b93345f44e08cc68bf \\\n    --hash=sha256:3f8bf11a4827cc7ce5a53d4ef6cddd5ad25595d3c1435ef08f76825851343154 \\\n    --hash=sha256:435bbad13e57eb5606a68443af62bed3556de2f46deb9f7d4237bc2f1c9fb3a0 \\\n    --hash=sha256:43b4fb020e779ca81c1b5255015fe2b82816c76ec982354534ad9ec09ad7c9e3 \\\n    --hash=sha256:442d86cf1cfe4faabf97db7d901ef58347efd004934da045c745e7b5bd57ac49 \\\n    --hash=sha256:44f264d4bf02f3176467d90b294d59bf1db9fe53c141ff772f27a8b456b2a9ed \\\n    --hash=sha256:454d9b4ae7881afbc25015b8627c16d88a597479b9dea82b8c6e7e2e07240dc7 \\\n    --hash=sha256:4aecb6f461316adf9f1f0f6a4a1a3d79e045f9b71ec76055a791affa3b285850 \\\n    --hash=sha256:4bf146dca15cdd53224a1bf46d628bd7590e4a07fbb69e720d561aea43a32b38 \\\n    --hash=sha256:4c5238d32f3c5269d9e87be0cf096437b7622b6920f5eac4fd202468aaeb34d2 \\\n    --hash=sha256:4e1e592789704459900728d88d41a46fe3969b82ab62945560a31732ffc19a6d \\\n    --hash=sha256:509dc827f89c15c66a0c216331260d777dd6c81e9a4e4f830e662b0bb296c313 \\\n    --hash=sha256:51c1c1847128238f54930edb8805b660305dca164645a9fd29243f5610beea34 \\\n    --hash=sha256:5cf77eac15bd264986c4a2c63353212c095b40f3affb2bc6b4ef80c4776c1a28 \\\n    --hash=sha256:5d9903ca42bfeec4cebedba8022a7c97ad2aab22e09573ce9976ba01b65e4361 \\\n    --hash=sha256:61a08bcb0ec14ff4e0ed2044aad948d0659604f824cbd50b55e30b0ec6f09c73 \\\n    --hash=sha256:62ba394a3dda9ad41c7c780f60f6e4a70988741415ae96f6d1bf6c239cf01379 \\\n    --hash=sha256:639431bdc89d6429f6721625e8129413980ccd62e9d3f496be618a41d205f160 \\\n    --hash=sha256:64350685ff08b1d3a6fff33f45a9ca183dc1d58bbfe4981604e70ec9801bbc26 \\\n    --hash=sha256:6538241f45eb5a25aa575dbba1069ad786f68a4f2773a29a2bd3dd1f9de787be \\\n    --hash=sha256:669dcfb2e38f9e8c69507bace46f4889e3abbfd9b0c29719202883c0a603598f \\\n    --hash=sha256:66d559b21d3640203ab9075797a55165d79017520685fb407b9234d72ab63c62 \\\n    --hash=sha256:6dd329a1b61c0ee95ba95385fb0c07ea0d3fe1a21e1349fa2bec272636217118 \\\n    --hash=sha256:728a9d2d173a65b62bdc380b7932dd8e74ed4295279a8fe1021204ce210803e7 \\\n    --hash=sha256:732aea6de26051af97b94bc98ed86448821f839d058e5d259c72bf6d73ad0fc0 \\\n    --hash=sha256:74d04244852ff73b32eeede4f76f51c5bcf44bc3c207bc3e6cf1c5c45b890708 \\\n    --hash=sha256:7521684c8c7c4f6e88e35ec89680ee1aa8358d3f09d27dfbdf62c446f5d4c695 \\\n    --hash=sha256:75fa6f0056e7efb1f42a1c34e58be24072cb9e61a601340cc1196ae92326a4f9 \\\n    --hash=sha256:78c2d02bb6e1da0720eedc0bad578049cad3f71050ef8cd065ecc87691bed2b0 \\\n    --hash=sha256:795ea137b1d809eb6836b43748b12634291c0ed55ad50a7d72d21edf1cd565c4 \\\n    --hash=sha256:7a50cd39f73faa34ec18d6720ee25ef10c4c1839514186fcda658a06c06057a2 \\\n    --hash=sha256:7a7c7fdf755032ffdd72c77e3d8096bdcb0eb92e89e17571a196f03d88b11b3c \\\n    --hash=sha256:7be0277469bf3bd7a34a9c57c1b6a724532a0d235cd0dc4e7f4316f982c28b19 \\\n    --hash=sha256:7eb542fd347ce61e1321b0a6b945d5701528dca0cd9759c2e3bb8bd57e47964d \\\n    --hash=sha256:7fe6e5440584e94cc4b3f5f4d98a25e29ca12dccf8873679a635638349831b98 \\\n    --hash=sha256:81519e25707fc076978c6143b81ea3dc853f176895af05bf7ec51effe818aeec \\\n    --hash=sha256:838441333bc90b829406d4a03cb4b8bf7656231b84358628b0406d803931ef32 \\\n    --hash=sha256:849202cd789e5f3cf5dcc7822c34b502181b4824a65ff20ce82da5524e45e8e9 \\\n    --hash=sha256:856a25c73b697f2ce2a24e7968285579e62577a048526161a2c0f53090bea9f9 \\\n    --hash=sha256:87eb52a81ef58c7ba4d45c3ca74e12aa4b4e77816f72ca25258a85b3ea96cb48 \\\n    --hash=sha256:885b26aa3ee56433b630502dc3d36ba78d186a00cc535d3806e6bfd9ed3c70ab \\\n    --hash=sha256:8a3d571bd95fade53c86c0517f859477ff3a93c3fde10c9e669086f038e0f207 \\\n    --hash=sha256:8e026094aa12b43f4fd74576714e987803a315c76edb6b098b9809db5de58f74 \\\n    --hash=sha256:9697a52e57576c83139d7c6f213d64485d3df5bf84807c35fa409e6c970801c6 \\\n    --hash=sha256:9b5aca4d5dfd7fbfbfbdaf44850fcc7709a01146a797536a8f84952e940cca76 \\\n    --hash=sha256:9ddc42e68114e161e51e272f667d640f97e84a2b9ef14b7477c53aac20c2d59a \\\n    --hash=sha256:9f95fbaa0ee1610ec0fc6b26668e9917a582ba80c52cc6d9ada15e30aa9ab9ad \\\n    --hash=sha256:a12ab1f5c29b4e93db518f5e3872116b7e9b1646c9f9f426f777b50d44a09e8c \\\n    --hash=sha256:a295ca2bba5c1c885826ce3125fa0b9f702a1be547d821c01d65f199e10c01e2 \\\n    --hash=sha256:a4cb042b615245d5ff9b3794f56be4138b5adc35a4166014d31d1814744148c7 \\\n    --hash=sha256:adad1a1bcf1c9e76346e091d22d23ac54ef28e1365117d99521631078dfec9de \\\n    --hash=sha256:b4774ff32f18e0504bfc4e59a3e71e18d83bc1e171a3c8ed75013958a03b2f14 \\\n    --hash=sha256:b6f78f98741dcc89607c16b1e9426ee46ce4bf31ac5e6b0d40e81c89f3481ea5 \\\n    --hash=sha256:b7f9ee819f94c6abfa56ec7b1dbab586f41ebbdc0a57e6524bd5e7f487a878c7 \\\n    --hash=sha256:ba0d8a5d7f04f73ee7d01d974d47c5834f8a1b0224390e4fe7c12a3a92a78ecc \\\n    --hash=sha256:bac4200befe50c670c405dc33af26dad5a3b6b255dd6c000d92fe4629f9ed6a5 \\\n    --hash=sha256:bc8ab71e2e31b16e40868a40a69007bc305e1109bd4658eb6cad007e0bf67c41 \\\n    --hash=sha256:bce22519c989bb72a7e6b36a199384c53db7722fe669ba891da75907fe3587db \\\n    --hash=sha256:bf3490bcbb985a1ae97b2ce9ad1c0f06a852d5b19dde9b07bdf25bf224248c95 \\\n    --hash=sha256:c1e448051717a334891f2b9a620fe36776ebf3dd8ec46a0b877c8ae69575feb4 \\\n    --hash=sha256:c54f768482cef41e219720013cd05933b6f971d9562544d691c68699bf2b6801 \\\n    --hash=sha256:c56b4d162ca2b43318ac671c65bd4d563e841a694ac70e1a976ac38fcf4ca1d2 \\\n    --hash=sha256:c9c30003b9347c24bcc210958c5d167b9e4f9be786cb380a7d32f14f9b84674f \\\n    --hash=sha256:cc4076a5b4f36d849fd709284b4a3b112326652f3b0466f04002a6c15a0c96c1 \\\n    --hash=sha256:cfe6d3f0c9e3b7e8c0c694b24d25e677776f5ca26dce46fd6b0489f9c8339391 \\\n    --hash=sha256:d6c2d5919075a1f2e413c00b056ea0c2f065b3f5fe83c3d07d325ab92dce51d6 \\\n    --hash=sha256:d8b4a27eebd684319bdf473d39f1d79eed36bf2cd34bd4465cdb4618d82b3d56 \\\n    --hash=sha256:dbe6095001465294f13f1adcd3311e50dd84e5a71525f20a10bd16689c61ce0b \\\n    --hash=sha256:dd16e78eb18ffdb25ee33a0682d17912e8cc8a770e885aeee95020046128f1ce \\\n    --hash=sha256:ddd76a9f58e6a00f8772e72cff8ebcff78e022be95edf018766707c730593e1e \\\n    --hash=sha256:df9eb838c44f570283712e7cff14c16329a9f0fb19ca492d21d4b7528ee6821e \\\n    --hash=sha256:dfec44d532be4c07088c3de2876130ff0fbeeacaa89a137decbbb5f665855a0f \\\n    --hash=sha256:e18bc3f73bd41243c9b38a6d9f2366cd0e0137a9aebe2d8ff76c5b67d4c0a3f4 \\\n    --hash=sha256:e43586ce5bd28f9f285a6e729466841368c4a0353f6fd08d4ce4630843d3648a \\\n    --hash=sha256:e6b49cd2aad93a1790ce9cffb18964f6d3a4b0b3dbdbd5de094b65296fce6e58 \\\n    --hash=sha256:e6c7a21dffba883234baefe91bc3388e629779582038f75d2a5be918e250f0ed \\\n    --hash=sha256:e721d1b46e25c481dc5ded6f4b3f66c897c58d2e8cfdf77bbced84339108b0b9 \\\n    --hash=sha256:eadade04221641516fa25139273505a1c19f9bf97589a05bc4cfcd8b4a618031 \\\n    --hash=sha256:ee3a83ce492074c35a74cc76cf8235d49e77b757193a5365ff86e3f2f93db9fd \\\n    --hash=sha256:f117efad42068f9715677c8523ed2be1518116d1c49b1dd17987716695181efe \\\n    --hash=sha256:f3b5a391c7597ffa96b41bd5cbd2ed0305f515fcbb367dfa72735679d5502364 \\\n    --hash=sha256:f4ff94e58e84aedb9c9fce66d4ef9f27a190285b451420f297c9a09f2b9abee9 \\\n    --hash=sha256:f99be08cfead2020c7ca6e396c13543baea32343b7a9a5780c462e323bd8872f \\\n    --hash=sha256:fd0a5e563c756de210bb964789b5abe4f114dacae9104a47e1a649b910361536 \\\n    --hash=sha256:feff9e54ec0dd3833d659257f5c3f5322a12eee58ffa360984b716f8b92983f4 \\\n    --hash=sha256:ffcca5b9efe948ba0661e9df0fa50d2bc4b097c70b9810212d6b62f05d83b2dd\n    # via nltk\nrequests==2.32.5 \\\n    --hash=sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6 \\\n    --hash=sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf\n    # via safety\nrich==14.2.0 \\\n    --hash=sha256:73ff50c7c0c1c77c8243079283f4edb376f0f6442433aecb8ce7e6d0b92d1fe4 \\\n    --hash=sha256:76bc51fe2e57d2b1be1f96c524b890b816e334ab4c1e45888799bfaab0021edd\n    # via typer\nruamel-yaml==0.18.16 \\\n    --hash=sha256:048f26d64245bae57a4f9ef6feb5b552a386830ef7a826f235ffb804c59efbba \\\n    --hash=sha256:a6e587512f3c998b2225d68aa1f35111c29fad14aed561a26e73fab729ec5e5a\n    # via\n    #   safety\n    #   safety-schemas\nruamel-yaml-clib==0.2.15 \\\n    --hash=sha256:014181cdec565c8745b7cbc4de3bf2cc8ced05183d986e6d1200168e5bb59490 \\\n    --hash=sha256:04d21dc9c57d9608225da28285900762befbb0165ae48482c15d8d4989d4af14 \\\n    --hash=sha256:05c70f7f86be6f7bee53794d80050a28ae7e13e4a0087c1839dcdefd68eb36b6 \\\n    --hash=sha256:0ba6604bbc3dfcef844631932d06a1a4dcac3fee904efccf582261948431628a \\\n    --hash=sha256:11e5499db1ccbc7f4b41f0565e4f799d863ea720e01d3e99fa0b7b5fcd7802c9 \\\n    --hash=sha256:1b45498cc81a4724a2d42273d6cfc243c0547ad7c6b87b4f774cb7bcc131c98d \\\n    --hash=sha256:1bb7b728fd9f405aa00b4a0b17ba3f3b810d0ccc5f77f7373162e9b5f0ff75d5 \\\n    --hash=sha256:1f66f600833af58bea694d5892453f2270695b92200280ee8c625ec5a477eed3 \\\n    --hash=sha256:27dc656e84396e6d687f97c6e65fb284d100483628f02d95464fd731743a4afe \\\n    --hash=sha256:2812ff359ec1f30129b62372e5f22a52936fac13d5d21e70373dbca5d64bb97c \\\n    --hash=sha256:2b216904750889133d9222b7b873c199d48ecbb12912aca78970f84a5aa1a4bc \\\n    --hash=sha256:331fb180858dd8534f0e61aa243b944f25e73a4dae9962bd44c46d1761126bbf \\\n    --hash=sha256:3cb75a3c14f1d6c3c2a94631e362802f70e83e20d1f2b2ef3026c05b415c4900 \\\n    --hash=sha256:3eb199178b08956e5be6288ee0b05b2fb0b5c1f309725ad25d9c6ea7e27f962a \\\n    --hash=sha256:424ead8cef3939d690c4b5c85ef5b52155a231ff8b252961b6516ed7cf05f6aa \\\n    --hash=sha256:45702dfbea1420ba3450bb3dd9a80b33f0badd57539c6aac09f42584303e0db6 \\\n    --hash=sha256:468858e5cbde0198337e6a2a78eda8c3fb148bdf4c6498eaf4bc9ba3f8e780bd \\\n    --hash=sha256:46895c17ead5e22bea5e576f1db7e41cb273e8d062c04a6a49013d9f60996c25 \\\n    --hash=sha256:46e4cc8c43ef6a94885f72512094e482114a8a706d3c555a34ed4b0d20200600 \\\n    --hash=sha256:480894aee0b29752560a9de46c0e5f84a82602f2bc5c6cde8db9a345319acfdf \\\n    --hash=sha256:4b293a37dc97e2b1e8a1aec62792d1e52027087c8eea4fc7b5abd2bdafdd6642 \\\n    --hash=sha256:4be366220090d7c3424ac2b71c90d1044ea34fca8c0b88f250064fd06087e614 \\\n    --hash=sha256:4d1032919280ebc04a80e4fb1e93f7a738129857eaec9448310e638c8bccefcf \\\n    --hash=sha256:4d3b58ab2454b4747442ac76fab66739c72b1e2bb9bd173d7694b9f9dbc9c000 \\\n    --hash=sha256:4dcec721fddbb62e60c2801ba08c87010bd6b700054a09998c4d09c08147b8fb \\\n    --hash=sha256:512571ad41bba04eac7268fe33f7f4742210ca26a81fe0c75357fa682636c690 \\\n    --hash=sha256:542d77b72786a35563f97069b9379ce762944e67055bea293480f7734b2c7e5e \\\n    --hash=sha256:56ea19c157ed8c74b6be51b5fa1c3aff6e289a041575f0556f66e5fb848bb137 \\\n    --hash=sha256:5d3c9210219cbc0f22706f19b154c9a798ff65a6beeafbf77fc9c057ec806f7d \\\n    --hash=sha256:5fea0932358e18293407feb921d4f4457db837b67ec1837f87074667449f9401 \\\n    --hash=sha256:617d35dc765715fa86f8c3ccdae1e4229055832c452d4ec20856136acc75053f \\\n    --hash=sha256:64da03cbe93c1e91af133f5bec37fd24d0d4ba2418eaf970d7166b0a26a148a2 \\\n    --hash=sha256:65f48245279f9bb301d1276f9679b82e4c080a1ae25e679f682ac62446fac471 \\\n    --hash=sha256:6f1d38cbe622039d111b69e9ca945e7e3efebb30ba998867908773183357f3ed \\\n    --hash=sha256:713cd68af9dfbe0bb588e144a61aad8dcc00ef92a82d2e87183ca662d242f524 \\\n    --hash=sha256:71845d377c7a47afc6592aacfea738cc8a7e876d586dfba814501d8c53c1ba60 \\\n    --hash=sha256:753faf20b3a5906faf1fc50e4ddb8c074cb9b251e00b14c18b28492f933ac8ef \\\n    --hash=sha256:7e74ea87307303ba91073b63e67f2c667e93f05a8c63079ee5b7a5c8d0d7b043 \\\n    --hash=sha256:88eea8baf72f0ccf232c22124d122a7f26e8a24110a0273d9bcddcb0f7e1fa03 \\\n    --hash=sha256:923816815974425fbb1f1bf57e85eca6e14d8adc313c66db21c094927ad01815 \\\n    --hash=sha256:9b6f7d74d094d1f3a4e157278da97752f16ee230080ae331fcc219056ca54f77 \\\n    --hash=sha256:a8220fd4c6f98485e97aea65e1df76d4fed1678ede1fe1d0eed2957230d287c4 \\\n    --hash=sha256:ab0df0648d86a7ecbd9c632e8f8d6b21bb21b5fc9d9e095c796cacf32a728d2d \\\n    --hash=sha256:ac9b8d5fa4bb7fd2917ab5027f60d4234345fd366fe39aa711d5dca090aa1467 \\\n    --hash=sha256:badd1d7283f3e5894779a6ea8944cc765138b96804496c91812b2829f70e18a7 \\\n    --hash=sha256:bdc06ad71173b915167702f55d0f3f027fc61abd975bd308a0968c02db4a4c3e \\\n    --hash=sha256:bf0846d629e160223805db9fe8cc7aec16aaa11a07310c50c8c7164efa440aec \\\n    --hash=sha256:bfd309b316228acecfa30670c3887dcedf9b7a44ea39e2101e75d2654522acd4 \\\n    --hash=sha256:c583229f336682b7212a43d2fa32c30e643d3076178fb9f7a6a14dde85a2d8bd \\\n    --hash=sha256:cb15a2e2a90c8475df45c0949793af1ff413acfb0a716b8b94e488ea95ce7cff \\\n    --hash=sha256:d290eda8f6ada19e1771b54e5706b8f9807e6bb08e873900d5ba114ced13e02c \\\n    --hash=sha256:da3d6adadcf55a93c214d23941aef4abfd45652110aed6580e814152f385b862 \\\n    --hash=sha256:dcc7f3162d3711fd5d52e2267e44636e3e566d1e5675a5f0b30e98f2c4af7974 \\\n    --hash=sha256:def5663361f6771b18646620fca12968aae730132e104688766cf8a3b1d65922 \\\n    --hash=sha256:e5e9f630c73a490b758bf14d859a39f375e6999aea5ddd2e2e9da89b9953486a \\\n    --hash=sha256:e9fde97ecb7bb9c41261c2ce0da10323e9227555c674989f8d9eb7572fc2098d \\\n    --hash=sha256:ef71831bd61fbdb7aa0399d5c4da06bea37107ab5c79ff884cc07f2450910262 \\\n    --hash=sha256:f4421ab780c37210a07d138e56dd4b51f8642187cdfb433eb687fe8c11de0144 \\\n    --hash=sha256:f6d3655e95a80325b84c4e14c080b2470fe4f33b6846f288379ce36154993fb1 \\\n    --hash=sha256:fd4c928ddf6bce586285daa6d90680b9c291cfd045fc40aad34e445d57b1bf51 \\\n    --hash=sha256:fe239bdfdae2302e93bd6e8264bd9b71290218fff7084a9db250b55caaccf43f\n    # via ruamel-yaml\nsafety==3.7.0 \\\n    --hash=sha256:65e71db45eb832e8840e3456333d44c23927423753d5610596a09e909a66d2bf \\\n    --hash=sha256:daec15a393cafc32b846b7ef93f9c952a1708863e242341ab5bde2e4beabb54e\n    # via -r requirements.in\nsafety-schemas==0.0.16 \\\n    --hash=sha256:3bb04d11bd4b5cc79f9fa183c658a6a8cf827a9ceec443a5ffa6eed38a50a24e \\\n    --hash=sha256:6760515d3fd1e6535b251cd73014bd431d12fe0bfb8b6e8880a9379b5ab7aa44\n    # via safety\nshellingham==1.5.4 \\\n    --hash=sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686 \\\n    --hash=sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de\n    # via typer\ntenacity==9.1.2 \\\n    --hash=sha256:1169d376c297e7de388d18b4481760d478b0e99a777cad3a9c86e556f4b697cb \\\n    --hash=sha256:f77bf36710d8b73a50b2dd155c97b870017ad21afe6ab300326b0371b3b05138\n    # via safety\ntomlkit==0.13.3 \\\n    --hash=sha256:430cf247ee57df2b94ee3fbe588e71d362a941ebb545dec29b53961d61add2a1 \\\n    --hash=sha256:c89c649d79ee40629a9fda55f8ace8c6a1b42deb912b2a8fd8d942ddadb606b0\n    # via safety\ntqdm==4.67.1 \\\n    --hash=sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2 \\\n    --hash=sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2\n    # via nltk\ntyper==0.20.0 \\\n    --hash=sha256:1aaf6494031793e4876fb0bacfa6a912b551cf43c1e63c800df8b1a866720c37 \\\n    --hash=sha256:5b463df6793ec1dca6213a3cf4c0f03bc6e322ac5e16e13ddd622a889489784a\n    # via safety\ntyping-extensions==4.15.0 \\\n    --hash=sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466 \\\n    --hash=sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548\n    # via\n    #   anyio\n    #   pydantic\n    #   pydantic-core\n    #   safety\n    #   safety-schemas\n    #   typer\n    #   typing-inspection\ntyping-inspection==0.4.2 \\\n    --hash=sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7 \\\n    --hash=sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464\n    # via pydantic\nurllib3==2.6.1 \\\n    --hash=sha256:5379eb6e1aba4088bae84f8242960017ec8d8e3decf30480b3a1abdaa9671a3f \\\n    --hash=sha256:e67d06fe947c36a7ca39f4994b08d73922d40e6cca949907be05efa6fd75110b\n    # via requests\nvirtualenv==20.35.4 \\\n    --hash=sha256:643d3914d73d3eeb0c552cbb12d7e82adf0e504dbf86a3182f8771a153a1971c \\\n    --hash=sha256:c21c9cede36c9753eeade68ba7d523529f228a403463376cf821eaae2b650f1b\n    # via pipenv\nwheel==0.45.1 \\\n    --hash=sha256:661e1abd9198507b1409a20c02106d9670b2576e916d58f520316666abca6729 \\\n    --hash=sha256:708e7481cc80179af0e556bbf0cc00b8444c7321e2700b8d8580231d13017248\n    # via -r requirements.in\n\n# The following packages are considered to be unsafe in a requirements file:\nsetuptools==80.9.0 \\\n    --hash=sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922 \\\n    --hash=sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c\n    # via\n    #   -r requirements.in\n    #   pipenv\n"
  },
  {
    "path": "test-data/Makefile.inc",
    "content": "# This makefile include file assumes that the following variables are set:\n# - PROJECT_ID\n# - PROJECT_ID_SUFFIX\n# - PROJECT_NR\n# - ORG_ID\n# - FAKE_PROJECT_ID_SUFFIX\n# - FAKE_PROJECT_NR\n# - FAKE_ORG_ID\n\nBASEDIR := ../..\nJSON_CLEANER = $(BASEDIR)/bin/json-cleaner\nCURL         = $(BASEDIR)/bin/curl-wrap.sh\nSED_SUBST_FAKE = sed -e \"s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/\" \\\n\t\t     -e \"s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/\" \\\n\t\t     -e \"s/$(ORG_ID)/$(FAKE_ORG_ID)/\" \\\n                     $(if $(FOLDER_ID_1),-e \"s/$(FOLDER_ID_1)/$(FAKE_FOLDER_ID_1)/\") \\\n\t\t     $(if $(FOLDER_ID_2),-e \"s/$(FOLDER_ID_2)/$(FAKE_FOLDER_ID_2)/\")\nZONE_EMPTY = europe-west2-b\nACCESS_TOKEN := $(shell gcloud auth application-default print-access-token)\nexport ACCESS_TOKEN\n\n# compute.googleapis.com\n\njson-dumps/compute-effective-firewalls-%.json:\n\t$(CURL) -fsS \\\n\t        'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/global/networks/$*/getEffectiveFirewalls' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-igs-%.json:\n\t$(CURL) -fsS \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$*/instanceGroups' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-igs-empty.json: json-dumps/compute-igs-$(ZONE_EMPTY).json\n\tln -sf $(notdir $<) $@\n\njson-dumps/compute-negs-%.json:\n\t$(CURL) -fsS \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$*/networkEndpointGroups' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-nes-empty.json: json-dumps/compute-negs-$(ZONE_EMPTY).json\n\tln -sf $(notdir $<) $@\n\nCOMPUTE_INSTANCES_MAXRESULTS ?= 10\n\njson-dumps/compute-instances-%.json:\n\t$(CURL) -fsS \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$*/instances?maxResults=$(COMPUTE_INSTANCES_MAXRESULTS)' \\\n\t\t| $(JSON_CLEANER) instances \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-instances-%-2.json: json-dumps/compute-instances-%.json\n\t$(CURL) -fsS \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$*/instances?maxResults=$(COMPUTE_INSTANCES_MAXRESULTS)&pageToken=$(shell cat json-dumps/compute-instances-$*.json | jq -r '.nextPageToken')' \\\n\t\t| $(JSON_CLEANER) instances \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-instances-empty.json: json-dumps/compute-instances-$(ZONE_EMPTY).json\n\tln -sf $(notdir $<) $@\n\n\njson-dumps/compute-migs-%.json:\n\t$(CURL) -fsS \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$*/instanceGroupManagers' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-migs-empty.json: json-dumps/compute-migs-$(ZONE_EMPTY).json\n\tln -sf $(notdir $<) $@\n\njson-dumps/compute-disks-%.json:\n\t$(CURL) -fsS \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$*/disks' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-disks-empty.json: json-dumps/compute-disks-$(ZONE_EMPTY).json\n\tln -sf $(notdir $<) $@\n\njson-dumps/compute-interconnects.json:\n\t        'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/global/interconnects' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-network-%.json:\n\t$(CURL) -fsS \\\n\t        'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/global/networks/$*' \\\n\t\t| $(JSON_CLEANER) compute-network \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-sslCertificates.json:\n\t$(CURL) -fsS \\\n\t        'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/global/sslCertificates/' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-forwardingRules.json:\n\t$(CURL) -fsS \\\n\t        'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/global/forwardingRules/' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-forwardingRules-%.json:\n\t$(CURL) -fsS \\\n\t        'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/regions/$*/forwardingRules/' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-aggregated-forwardingRules.json:\n\t$(CURL) -fsS \\\n\t        'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/aggregated/forwardingRules/' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-backendServices.json:\n\t$(CURL) -fsS \\\n\t        'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/global/backendServices/' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-backendServices-%.json:\n\t$(CURL) -fsS \\\n\t        'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/regions/$*/backendServices/' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-aggregated-backendServices.json:\n\t$(CURL) -fsS \\\n\t        'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/aggregated/backendServices/' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-aggregated-targetHttpsProxies.json:\n\t$(CURL) -fsS \\\n\t        'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/aggregated/targetHttpsProxies/' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-targetHttpsProxies.json:\n\t$(CURL) -fsS \\\n\t        'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/global/targetHttpsProxies/' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-targetSslProxies.json:\n\t$(CURL) -fsS \\\n\t        'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/global/targetSslProxies/' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-project.json:\n\t$(CURL) -fsS \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)' \\\n\t\t| $(JSON_CLEANER) compute-project \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-regions.json:\n\t$(CURL) -fsS \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/regions' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-subnetworks-aggregated.json:\n\t$(CURL) -fsS \\\n\t'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/aggregated/subnetworks' \\\n\t| $(JSON_CLEANER) other \\\n\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-templates.json:\n\t$(CURL) -fsS \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/global/instanceTemplates' \\\n\t\t| $(JSON_CLEANER) compute-templates \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-zones.json:\n\t$(CURL) -fsS \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-instances-aggregated.json:\n\t$(CURL) -fsS \\\n\t        'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/aggregated/instances' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-igs-aggregated.json:\n\t$(CURL) -fsS \\\n\t        'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/aggregated/instanceGroups' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-migs-aggregated.json:\n\t$(CURL) -fsS \\\n\t        'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/aggregated/instanceGroupManagers' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\n# cloudresourcemanager.googleapis.com\n\njson-dumps/iam-policy.json:\n\t$(CURL) -fsS \\\n\t\t'https://cloudresourcemanager.googleapis.com/v1/projects/$(PROJECT_ID):getIamPolicy' \\\n\t\t-X POST  --header \"Content-Type:text/json\" \\\n\t\t-d \"\" \\\n\t\t| $(JSON_CLEANER) other \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/org-constraint-%.json:\n\t$(CURL) -fsS \\\n\t\t'https://cloudresourcemanager.googleapis.com/v1/projects/$(PROJECT_ID):getEffectiveOrgPolicy' \\\n\t\t-X POST  --header \"Content-Type:text/json\" \\\n\t\t-d \"{\\\"constraint\\\": \\\"constraints/$*\\\"}\" \\\n\t\t| $(JSON_CLEANER) other \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/project.json:\n\t$(CURL) -fsS \\\n\t\t'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/org-policies.json:\n\t$(CURL) -fsS \\\n\t\t'https://cloudresourcemanager.googleapis.com/v1/projects/$(PROJECT_ID):listOrgPolicies' \\\n\t\t-X POST  --header \"Content-Type:text/json\" \\\n\t\t-d \"\" \\\n\t\t| $(JSON_CLEANER) other \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/org-constraints.json:\n\t$(CURL) -fsS \\\n\t\t'https://cloudresourcemanager.googleapis.com/v1/projects/$(PROJECT_ID):listAvailableOrgPolicyConstraints' \\\n\t\t-X POST  --header \"Content-Type:text/json\" \\\n\t\t-d \"\" \\\n\t\t| $(JSON_CLEANER) other \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\n# iam.googleapis.com\n\njson-dumps/iam-roles-custom.json:\n\t$(CURL) -fsS \\\n\t\t'https://iam.googleapis.com/v1/projects/$(PROJECT_ID)/roles?view=FULL&pageSize=500' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/iam-service-accounts.json:\n\t$(CURL) -fsS \\\n\t\t'https://iam.googleapis.com/v1/projects/$(PROJECT_ID)/serviceAccounts' \\\n\t\t| $(JSON_CLEANER) service-accounts \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\n# serviceusage.googleapis.com\n\njson-dumps/services.json:\n\t$(CURL) -fsS \\\n\t        'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n"
  },
  {
    "path": "test-data/README.md",
    "content": "# Test data\n\nMany of the tests in gcpdiag are implemented using real API responses that\nare fetched with curl and stored in this directory. The API is then mocked\nand returns data from the response files (in JSON format).\n\nIn order to create the response data, we use real GCP projects. We setup\neverything using Terraform, and fetch the responses with curl. We create\nephemeral projects only for the purprose of generating those API responses,\nand delete the projects afterwards.\n\nEvery directory has a different project template, based on the test use\ncase.\n\nIn order to run terraform, you will need to supply the organization id and\nbilling account id as variables:\n\n```\n$ export TF_VAR_billing_account_id=0123456-ABCDEF-987654\n$ export TF_VAR_org_id=123456789012\n$ export TF_VAR_folder_id=123456789012 # optional\n$ cd projectdir\n$ terraform init\n$ terraform apply\n```\n\nThe API responses are generated using curl commands started with make:\n\n```\n$ make all\n```\n\n### Creating new projects\n\nIf you need to create a project template for a new use case, proceed as follows:\n\n1. Create a new directory\n\n1. Copy the following files as starting point:\n\n   - gce1/Makefile\n   - gce1/project.tf\n   - gce1/variables.tf\n\n1. Create a Makefile file that looks as follows:\n\n   ```\n   PROJECT_ID  := $(shell terraform output -raw project_id)\n   PROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix)\n   PROJECT_NR  := $(shell terraform output -raw project_nr)\n   ORG_ID      := $(shell terraform output -raw org_id)\n   CURL         = ../../bin/curl-wrap.sh\n   JSON_CLEANER = ../../bin/json-cleaner\n\n   FAKE_PROJECT_ID_SUFFIX = aaaa\n   FAKE_PROJECT_NR = 12340001\n   FAKE_ORG_ID = 11112222\n   SED_SUBST_FAKE = sed -e \"s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/\" \\\n   \t\t     -e \"s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/\" \\\n   \t\t     -e \"s/$(ORG_ID)/$(FAKE_ORG_ID)/\" \\\n\n   all:\t\\\n   \tjson-dumps/project.json \\\n   \tjson-dumps/services.json\n\n   json-dumps/project.json:\n   \t$(CURL) -fsS \\\n   \t\t'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \\\n   \t\t| $(SED_SUBST_FAKE) >$@\n\n   json-dumps/services.json:\n   \t$(CURL) -fv \\\n   \t        'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \\\n   \t\t| $(SED_SUBST_FAKE) >$@\n   ```\n\n1. Search and replace the following strings:\n\n   - `gce1`: use your own short project template name.\n   - `12340001`: this is the fake project number. Use a number that is not yet\n     used in any other template (keep the same '123400' prefix).\n\n1. Create .tf files with all the resources that you need.\n\n1. Add curl calls to the Makefile for all json files that you need.\n"
  },
  {
    "path": "test-data/apigee1/Makefile",
    "content": "PROJECT_ID := $(shell terraform output project_id | sed -e 's|\"||g')\nPROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix)\nPROJECT_NR  := $(shell terraform output -raw project_nr)\nAPIGEE_ORG_ID  := $(shell terraform output apigee_org_id | sed -e 's|\"||g')\nAPIGEE_INSTANCE_ID  := $(shell terraform output apigee_instance_id | sed -e 's|\"||g')\nLOCATION_1 = us-central1\nKEYRING_1 = apigee-keyring\nCYRPTOKEY_1 = apigee-key\nCOMPUTE_NETWORK_1=apigee-network\nCOMPUTE_SUBNETWORK_1=apigee-subnetwork\nENVIRONMENT_GROUP = gcpdiag-demo-envgroup\nENVIRONMENT_GROUP_1 = gcpdiag-demo-envgroup-1\nCURL         = ../../bin/curl-wrap.sh\nJSON_CLEANER = ../../bin/json-cleaner\n\nFAKE_PROJECT_ID_SUFFIX = aaaa\nFAKE_PROJECT_NR = 12340005\nFAKE_ORG_ID = 11112222\nSED_SUBST_FAKE = sed -e \"s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/\" \\\n\t\t     -e \"s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/\" \\\n\t\t     -e \"s/$(ORG_ID)/$(FAKE_ORG_ID)/\" \\\n\nall:\t\\\n\tjson-dumps/apigee-organizations.json \\\n\tjson-dumps/apigee-organization.json \\\n\tjson-dumps/compute-regions.json \\\n\tjson-dumps/compute-subnetworks-aggregated.json \\\n\tjson-dumps/compute-effective-firewalls-apigee-network.json \\\n\tjson-dumps/compute-network-$(COMPUTE_NETWORK_1).json \\\n\tjson-dumps/compute-subnetworks-$(COMPUTE_SUBNETWORK_1).json \\\n\tjson-dumps/apigee-instances.json \\\n\tjson-dumps/compute-templates.json  \\\n\tjson-dumps/compute-migs-$(LOCATION_1).json  \\\n\tjson-dumps/apigee-instances-gcpdiag-apigee1-inst1-aaaa-attachments.json \\\n\tjson-dumps/apigee-envgroups.json   \\\n    json-dumps/apigee-envgroups-attachments-empty.json   \\\n\tjson-dumps/apigee-envgroups-gcpdiag-demo-envgroup-1-attachments.json    \\\n\tjson-dumps/project.json \\\n\tjson-dumps/iam-policy.json \\\n\tjson-dumps/iam-service-accounts.json \\\n\tjson-dumps/services.json \\\n\tjson-dumps/kms-key-iam-policy.json \\\n\tjson-dumps/apigee-key.json\n\ninclude ../Makefile.inc\n\n# compute.googleapis.com\njson-dumps/compute-migs-$(LOCATION_1).json:\n\t$(CURL) -fsS \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/regions/$(LOCATION_1)/instanceGroupManagers' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-subnetworks-$(COMPUTE_SUBNETWORK_1).json:\n\t$(CURL) -fsS \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/regions/$(LOCATION_1)/subnetworks/$(COMPUTE_SUBNETWORK_1)' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-effective-firewalls-apigee-network.json:\n\t$(CURL) -fsS \\\n\t        'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/global/networks/$(COMPUTE_NETWORK_1)/getEffectiveFirewalls' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\n# cloudkms.googleapis.com\n\njson-dumps/kms-key-iam-policy.json:\n\t$(CURL) -fsS \\\n\t  'https://cloudkms.googleapis.com/v1/projects/$(PROJECT_ID)/locations/$(LOCATION_1)/keyRings/$(KEYRING_1)/cryptoKeys/$(CYRPTOKEY_1):getIamPolicy' \\\n\t  | $(JSON_CLEANER) other \\\n\t  | $(SED_SUBST_FAKE) >$@\n\njson-dumps/apigee-key.json:\n\t$(CURL) -fsS \\\n\t  'https://cloudkms.googleapis.com/v1/projects/$(PROJECT_ID)/locations/$(LOCATION_1)/keyRings/$(KEYRING_1)/cryptoKeys/$(CYRPTOKEY_1)' \\\n\t  | $(SED_SUBST_FAKE) >$@\n\n# apigee.googleapis.com\n\njson-dumps/apigee-organizations.json:\n\t$(CURL) -fsS \\\n\t\t'https://apigee.googleapis.com/v1/organizations'  \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/apigee-organization.json:\n\t$(CURL) -fsS \\\n\t\t'https://apigee.googleapis.com/v1/$(APIGEE_ORG_ID)'  \\\n\t\t| $(JSON_CLEANER) apigee \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/apigee-instances.json:\n\t$(CURL) -fsS \\\n\t\t'https://apigee.googleapis.com/v1/$(APIGEE_ORG_ID)/instances'  \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/apigee-instances-gcpdiag-apigee1-inst1-aaaa-attachments.json:\n\t$(CURL) -fsS \\\n\t\t'https://apigee.googleapis.com/v1/$(APIGEE_INSTANCE_ID)/attachments'  \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/apigee-envgroups.json:\n\t$(CURL) -fsS \\\n\t\t'https://apigee.googleapis.com/v1/$(APIGEE_ORG_ID)/envgroups'  \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/apigee-envgroups-attachments-empty.json:\n\t$(CURL) -fsS \\\n\t\t'https://apigee.googleapis.com/v1/$(APIGEE_ORG_ID)/envgroups/$(ENVIRONMENT_GROUP)/attachments'  \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/apigee-envgroups-gcpdiag-demo-envgroup-1-attachments.json:\n\t$(CURL) -fsS \\\n\t\t'https://apigee.googleapis.com/v1/$(APIGEE_ORG_ID)/envgroups/$(ENVIRONMENT_GROUP_1)/attachments'  \\\n\t\t| $(SED_SUBST_FAKE) >$@\n"
  },
  {
    "path": "test-data/apigee1/apigee1.tf",
    "content": "resource \"google_compute_network\" \"apigee_network\" {\n  project                 = google_project.project.project_id\n  name                    = \"apigee-network\"\n  auto_create_subnetworks = false\n  depends_on              = [google_project_service.compute]\n}\n\nresource \"google_compute_subnetwork\" \"apigee_subnetwork\" {\n  project                  = google_project.project.project_id\n  name                     = \"apigee-subnetwork\"\n  region                   = \"us-central1\"\n  ip_cidr_range            = \"10.128.0.0/20\"\n  network                  = google_compute_network.apigee_network.id\n  private_ip_google_access = true\n  depends_on = [google_project_service.compute,\n  google_compute_network.apigee_network]\n}\n\nresource \"google_compute_global_address\" \"apigee_range\" {\n  project       = google_project.project.project_id\n  name          = \"apigee-range\"\n  purpose       = \"VPC_PEERING\"\n  address_type  = \"INTERNAL\"\n  prefix_length = 22\n  network       = google_compute_network.apigee_network.id\n}\n\nresource \"google_service_networking_connection\" \"apigee_vpc_connection\" {\n  network                 = google_compute_network.apigee_network.id\n  service                 = \"servicenetworking.googleapis.com\"\n  reserved_peering_ranges = [google_compute_global_address.apigee_range.name]\n  depends_on              = [google_project_service.servicenetworking]\n}\n\nresource \"google_kms_key_ring\" \"apigee_keyring\" {\n  provider   = google\n  project    = google_project.project.project_id\n  name       = \"apigee-keyring\"\n  location   = \"us-central1\"\n  depends_on = [google_project_service.kms]\n  lifecycle {\n    prevent_destroy = true\n  }\n}\n\nresource \"google_kms_crypto_key\" \"apigee_key\" {\n  provider = google\n  name     = \"apigee-key\"\n  key_ring = google_kms_key_ring.apigee_keyring.id\n  lifecycle {\n    prevent_destroy = true\n  }\n}\n\nresource \"google_project_service_identity\" \"apigee_sa\" {\n  provider = google-beta\n  project  = google_project.project.project_id\n  service  = google_project_service.apigee.service\n}\n\nresource \"google_kms_crypto_key_iam_binding\" \"apigee_sa_keyuser\" {\n  provider      = google\n  crypto_key_id = google_kms_crypto_key.apigee_key.id\n  role          = \"roles/cloudkms.cryptoKeyEncrypterDecrypter\"\n  members = [\n    \"serviceAccount:${google_project_service_identity.apigee_sa.email}\",\n  ]\n}\n\nresource \"google_apigee_organization\" \"apigee_org\" {\n  project_id                           = google_project.project.project_id\n  analytics_region                     = \"us-central1\"\n  description                          = \"Test Apigee Org for gcpdiag\"\n  authorized_network                   = google_compute_network.apigee_network.id\n  runtime_database_encryption_key_name = google_kms_crypto_key.apigee_key.id\n  depends_on = [\n    google_service_networking_connection.apigee_vpc_connection,\n    google_project_service.apigee\n  ]\n}\n\nresource \"google_apigee_instance\" \"apigee_instance\" {\n  name                     = \"gcpdiag-apigee1-inst1-${random_string.project_id_suffix.id}\"\n  location                 = \"us-central1\"\n  description              = \"Test Apigee Runtime Instance for gcpdiag\"\n  org_id                   = google_apigee_organization.apigee_org.id\n  disk_encryption_key_name = google_kms_crypto_key.apigee_key.id\n}\n\nresource \"google_apigee_environment\" \"apigee_env\" {\n  org_id = google_apigee_organization.apigee_org.id\n  name   = \"gcpdiag-demo-env\"\n\n  depends_on = [google_project_service.apigee]\n}\n\nresource \"google_apigee_environment\" \"apigee_env_1\" {\n  org_id = google_apigee_organization.apigee_org.id\n  name   = \"gcpdiag-demo-env-1\"\n\n  depends_on = [google_project_service.apigee]\n}\n\nresource \"google_apigee_instance_attachment\" \"env_to_instance_attachment\" {\n  instance_id = google_apigee_instance.apigee_instance.id\n  environment = google_apigee_environment.apigee_env.name\n}\n\nresource \"google_apigee_envgroup\" \"apigee_envgroup\" {\n  org_id    = google_apigee_organization.apigee_org.id\n  name      = \"gcpdiag-demo-envgroup\"\n  hostnames = [\"gcpdiag.apigee.example.com\"]\n\n  depends_on = [google_project_service.apigee]\n}\n\nresource \"google_apigee_envgroup\" \"apigee_envgroup_1\" {\n  org_id    = google_apigee_organization.apigee_org.id\n  name      = \"gcpdiag-demo-envgroup-1\"\n  hostnames = [\"1.gcpdiag.apigee.example.com\"]\n\n  depends_on = [google_project_service.apigee]\n}\n\nresource \"google_apigee_envgroup_attachment\" \"env_to_envgroup_attachment\" {\n  envgroup_id = google_apigee_envgroup.apigee_envgroup_1.id\n  environment = google_apigee_environment.apigee_env_1.name\n\n  depends_on = [google_project_service.apigee]\n}\n\nresource \"google_compute_instance_template\" \"mig_bridge_template\" {\n  project      = google_project.project.project_id\n  name_prefix  = \"mig-bridge-us-central1-\"\n  machine_type = \"e2-small\"\n  tags         = [\"https-server\", \"mig-bridge\"]\n  disk {\n    source_image = \"centos-cloud/centos-7\"\n    boot         = true\n    disk_size_gb = 20\n  }\n  network_interface {\n    network    = google_compute_network.apigee_network.id\n    subnetwork = google_compute_subnetwork.apigee_subnetwork.id\n  }\n  metadata = {\n    ENDPOINT           = google_apigee_instance.apigee_instance.host\n    startup-script-url = \"gs://apigee-5g-saas/apigee-envoy-proxy-release/latest/conf/startup-script.sh\"\n  }\n  service_account {\n    scopes = [\"storage-ro\"]\n  }\n  lifecycle {\n    create_before_destroy = true\n  }\n}\n\nresource \"google_compute_region_instance_group_manager\" \"mig_bridge_manager\" {\n  name               = \"mig-bridge-manager-us-central1\"\n  project            = google_project.project.project_id\n  base_instance_name = \"mig-bridge-us-central1\"\n  region             = \"us-central1\"\n  version {\n    instance_template = google_compute_instance_template.mig_bridge_template.id\n  }\n  named_port {\n    name = \"apigee-https\"\n    port = 443\n  }\n}\n\nresource \"google_compute_region_autoscaler\" \"mig_bridge_autoscaler\" {\n  name    = \"mig-autoscaler-us-central1\"\n  project = google_project.project.project_id\n  region  = \"us-central1\"\n  target  = google_compute_region_instance_group_manager.mig_bridge_manager.id\n  autoscaling_policy {\n    max_replicas    = 10\n    min_replicas    = 2\n    cooldown_period = 90\n    cpu_utilization {\n      target = 0.75\n    }\n  }\n}\n\n\noutput \"apigee_org_id\" {\n  value = google_apigee_organization.apigee_org.id\n}\n\noutput \"apigee_instance_id\" {\n  value = google_apigee_instance.apigee_instance.id\n}\n"
  },
  {
    "path": "test-data/apigee1/json-dumps/apigee-envgroups-attachments-empty.json",
    "content": "{}\n"
  },
  {
    "path": "test-data/apigee1/json-dumps/apigee-envgroups-gcpdiag-demo-envgroup-1-attachments.json",
    "content": "{\n  \"environmentGroupAttachments\": [\n    {\n      \"name\": \"eee79bf3-6ee0-488c-aafa-352b560cc54a\",\n      \"environment\": \"gcpdiag-demo-env-1\",\n      \"createdAt\": \"1660444215777\",\n      \"environmentGroupId\": \"gcpdiag-demo-envgroup-1\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/apigee1/json-dumps/apigee-envgroups.json",
    "content": "{\n  \"environmentGroups\": [\n    {\n      \"name\": \"gcpdiag-demo-envgroup\",\n      \"hostnames\": [\n        \"gcpdiag.apigee.example.com\"\n      ],\n      \"createdAt\": \"1660444204349\",\n      \"lastModifiedAt\": \"1660444204349\",\n      \"state\": \"ACTIVE\"\n    },\n    {\n      \"name\": \"gcpdiag-demo-envgroup-1\",\n      \"hostnames\": [\n        \"1.gcpdiag.apigee.example.com\"\n      ],\n      \"createdAt\": \"1660444204383\",\n      \"lastModifiedAt\": \"1660444204383\",\n      \"state\": \"ACTIVE\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/apigee1/json-dumps/apigee-instances-gcpdiag-apigee1-inst1-aaaa-attachments.json",
    "content": "{\n  \"attachments\": [\n    {\n      \"name\": \"98a36882-8123-45db-aa20-35b3e541c568\",\n      \"environment\": \"gcpdiag-demo-env\",\n      \"createdAt\": \"1660445875160\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/apigee1/json-dumps/apigee-instances.json",
    "content": "{\n  \"instances\": [\n    {\n      \"name\": \"gcpdiag-apigee1-inst1-aaaa\",\n      \"location\": \"us-central1\",\n      \"host\": \"10.25.116.2\",\n      \"port\": \"443\",\n      \"description\": \"Test Apigee Runtime Instance for gcpdiag\",\n      \"createdAt\": \"1660444205860\",\n      \"lastModifiedAt\": \"1660445744739\",\n      \"diskEncryptionKeyName\": \"projects/gcpdiag-apigee1-aaaa/locations/us-central1/keyRings/apigee-keyring/cryptoKeys/apigee-key\",\n      \"state\": \"ACTIVE\",\n      \"peeringCidrRange\": \"SLASH_22\",\n      \"runtimeVersion\": \"1-8-0-apigee-23\",\n      \"ipRange\": \"10.25.116.0/28,10.25.116.16/28\",\n      \"consumerAcceptList\": [\n        \"gcpdiag-apigee1-aaaa\"\n      ],\n      \"serviceAttachment\": \"projects/u97a71f019e4d6615-tp/regions/us-central1/serviceAttachments/apigee-us-central1-41me\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/apigee1/json-dumps/apigee-key.json",
    "content": "{\n  \"name\": \"projects/gcpdiag-apigee1-aaaa/locations/us-central1/keyRings/apigee-keyring/cryptoKeys/apigee-key\",\n  \"primary\": {\n    \"name\": \"projects/gcpdiag-apigee1-aaaa/locations/us-central1/keyRings/apigee-keyring/cryptoKeys/apigee-key/cryptoKeyVersions/1\",\n    \"state\": \"ENABLED\",\n    \"createTime\": \"2022-08-14T01:58:59.902530077Z\",\n    \"protectionLevel\": \"SOFTWARE\",\n    \"algorithm\": \"GOOGLE_SYMMETRIC_ENCRYPTION\",\n    \"generateTime\": \"2022-08-14T01:58:59.902530077Z\"\n  },\n  \"purpose\": \"ENCRYPT_DECRYPT\",\n  \"createTime\": \"2022-08-14T01:58:59.902530077Z\",\n  \"versionTemplate\": {\n    \"protectionLevel\": \"SOFTWARE\",\n    \"algorithm\": \"GOOGLE_SYMMETRIC_ENCRYPTION\"\n  },\n  \"destroyScheduledDuration\": \"86400s\"\n}\n"
  },
  {
    "path": "test-data/apigee1/json-dumps/apigee-organization.json",
    "content": "{\n  \"addonsConfig\": {\n    \"advancedApiOpsConfig\": {\n      \"enabled\": true\n    },\n    \"connectorsPlatformConfig\": {\n      \"enabled\": true\n    },\n    \"integrationConfig\": {\n      \"enabled\": true\n    }\n  },\n  \"analyticsRegion\": \"us-central1\",\n  \"apigeeProjectId\": \"REDACTED\",\n  \"authorizedNetwork\": \"projects/gcpdiag-apigee1-aaaa/global/networks/apigee-network\",\n  \"billingType\": \"EVALUATION\",\n  \"caCertificate\": \"REDACTED\",\n  \"createdAt\": \"1660444169636\",\n  \"description\": \"Test Apigee Org for gcpdiag\",\n  \"environments\": [\n    \"gcpdiag-demo-env\",\n    \"gcpdiag-demo-env-1\"\n  ],\n  \"expiresAt\": \"1665627913747\",\n  \"lastModifiedAt\": \"1660444192352\",\n  \"name\": \"gcpdiag-apigee1-aaaa\",\n  \"projectId\": \"gcpdiag-apigee1-aaaa\",\n  \"properties\": {\n    \"property\": [\n      {\n        \"name\": \"features.hybrid.enabled\",\n        \"value\": \"true\"\n      },\n      {\n        \"name\": \"features.mart.connect.enabled\",\n        \"value\": \"true\"\n      }\n    ]\n  },\n  \"runtimeDatabaseEncryptionKeyName\": \"projects/gcpdiag-apigee1-aaaa/locations/us-central1/keyRings/apigee-keyring/cryptoKeys/apigee-key\",\n  \"runtimeType\": \"CLOUD\",\n  \"state\": \"ACTIVE\",\n  \"subscriptionType\": \"TRIAL\"\n}\n"
  },
  {
    "path": "test-data/apigee1/json-dumps/apigee-organizations.json",
    "content": "{\n  \"organizations\": [\n    {\n      \"organization\": \"apigee-hybrid-support-apac-03\",\n      \"projectIds\": [\n        \"apigee-hybrid-support-apac-03\"\n      ],\n      \"projectId\": \"apigee-hybrid-support-apac-03\"\n    },\n    {\n      \"organization\": \"apigee-x-support-apac-03\",\n      \"projectIds\": [\n        \"apigee-x-support-apac-03\"\n      ],\n      \"projectId\": \"apigee-x-support-apac-03\"\n    },\n    {\n      \"organization\": \"gcpdiag-apigee1-aaaa\",\n      \"projectIds\": [\n        \"gcpdiag-apigee1-aaaa\"\n      ],\n      \"projectId\": \"gcpdiag-apigee1-aaaa\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/apigee1/json-dumps/compute-effective-firewalls-apigee-network.json",
    "content": "{\n  \"firewalls\": [\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"1474978006922447998\",\n      \"creationTimestamp\": \"2023-06-17T10:51:13.563-07:00\",\n      \"name\": \"k8s-allow-lb-to-apigee-proxy\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/global/networks/apigee-network\",\n      \"priority\": 900,\n      \"sourceRanges\": [\n        \"130.211.0.0/22\",\n        \"35.191.0.0/16\"\n      ],\n      \"targetTags\": [\n        \"gke-apigee-proxy\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"443\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/global/firewalls/k8s-allow-lb-to-apigee-proxy\"\n    }\n  ],\n  \"firewallPolicys\": [\n    {\n      \"name\": \"902824820698\",\n      \"type\": \"HIERARCHY\",\n      \"shortName\": \"default-firewall-policy\",\n      \"displayName\": \"default-firewall-policy\",\n      \"rules\": [\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 0,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"34.82.66.0/24\",\n              \"34.82.90.0/24\",\n              \"34.82.98.0/24\",\n              \"34.82.160.0/24\",\n              \"34.82.166.128/25\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"tcp\"\n              },\n              {\n                \"ipProtocol\": \"udp\"\n              }\n            ]\n          },\n          \"action\": \"allow\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 1,\n          \"match\": {\n            \"destIpRanges\": [\n              \"34.83.160.25/32\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"tcp\"\n              },\n              {\n                \"ipProtocol\": \"udp\"\n              }\n            ]\n          },\n          \"action\": \"allow\",\n          \"direction\": \"EGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 2,\n          \"match\": {\n            \"destIpRanges\": [\n              \"34.66.22.47/32\",\n              \"34.66.157.124/32\",\n              \"34.66.164.57/32\",\n              \"34.66.184.118/32\",\n              \"34.66.236.234/32\",\n              \"34.73.86.171/32\",\n              \"34.73.183.215/32\",\n              \"34.76.42.179/32\",\n              \"34.76.71.13/32\",\n              \"34.76.143.192/32\",\n              \"34.76.244.236/32\",\n              \"35.184.49.127/32\",\n              \"35.184.70.255/32\",\n              \"35.184.144.234/32\",\n              \"35.184.228.49/32\",\n              \"35.185.65.36/32\",\n              \"35.185.252.238/32\",\n              \"35.186.160.196/32\",\n              \"35.186.167.183/32\",\n              \"35.186.182.184/32\",\n              \"35.187.2.178/32\",\n              \"35.187.82.234/32\",\n              \"35.187.121.21/32\",\n              \"35.187.169.157/32\",\n              \"35.187.189.105/32\",\n              \"35.188.28.255/32\",\n              \"35.188.58.237/32\",\n              \"35.188.97.47/32\",\n              \"35.188.225.200/32\",\n              \"35.188.244.131/32\",\n              \"35.189.66.48/32\",\n              \"35.189.85.77/32\",\n              \"35.189.87.27/32\",\n              \"35.189.87.89/32\",\n              \"35.189.88.203/32\",\n              \"35.189.93.96/32\",\n              \"35.189.99.57/32\",\n              \"35.189.109.1/32\",\n              \"35.189.114.89/32\",\n              \"35.189.228.0/32\",\n              \"35.189.236.145/32\",\n              \"35.190.139.214/32\",\n              \"35.190.154.170/32\",\n              \"35.190.196.20/32\",\n              \"35.192.2.32/32\",\n              \"35.192.62.107/32\",\n              \"35.192.160.155/32\",\n              \"35.192.233.245/32\",\n              \"35.192.235.233/32\",\n              \"35.193.56.224/32\",\n              \"35.193.76.157/32\",\n              \"35.193.123.0/32\",\n              \"35.193.195.38/32\",\n              \"35.193.200.222/32\",\n              \"35.193.229.109/32\",\n              \"35.193.242.255/32\",\n              \"35.194.66.217/32\",\n              \"35.194.70.28/32\",\n              \"35.195.3.83/32\",\n              \"35.195.53.78/32\",\n              \"35.195.68.98/32\",\n              \"35.195.101.29/32\",\n              \"35.195.113.177/32\",\n              \"35.195.114.253/32\",\n              \"35.195.123.113/32\",\n              \"35.195.140.251/32\",\n              \"35.195.156.23/32\",\n              \"35.195.206.55/32\",\n              \"35.196.5.130/32\",\n              \"35.196.20.59/32\",\n              \"35.196.89.212/32\",\n              \"35.196.115.11/32\",\n              \"35.196.138.125/32\",\n              \"35.196.140.152/32\",\n              \"35.196.217.248/32\",\n              \"35.196.220.144/32\",\n              \"35.197.30.80/32\",\n              \"35.197.38.28/32\",\n              \"35.197.50.103/32\",\n              \"35.197.53.127/32\",\n              \"35.197.55.215/32\",\n              \"35.197.56.191/32\",\n              \"35.197.65.24/32\",\n              \"35.197.75.108/32\",\n              \"35.197.85.13/32\",\n              \"35.197.107.117/32\",\n              \"35.197.108.157/32\",\n              \"35.197.112.50/32\",\n              \"35.197.115.114/32\",\n              \"35.197.125.130/32\",\n              \"35.197.192.22/32\",\n              \"35.197.205.253/32\",\n              \"35.197.210.140/32\",\n              \"35.197.226.207/32\",\n              \"35.197.233.133/32\",\n              \"35.197.246.39/32\",\n              \"35.197.252.73/32\",\n              \"35.197.252.248/32\",\n              \"35.197.254.244/32\",\n              \"35.198.78.35/32\",\n              \"35.198.79.98/32\",\n              \"35.198.84.172/32\",\n              \"35.198.106.28/32\",\n              \"35.198.140.217/32\",\n              \"35.198.158.161/32\",\n              \"35.198.159.26/32\",\n              \"35.199.12.20/32\",\n              \"35.199.27.54/32\",\n              \"35.199.39.165/32\",\n              \"35.199.40.52/32\",\n              \"35.199.54.197/32\",\n              \"35.199.56.100/32\",\n              \"35.199.58.90/32\",\n              \"35.199.154.123/32\",\n              \"35.199.162.95/32\",\n              \"35.199.162.137/32\",\n              \"35.199.175.152/32\",\n              \"35.202.32.145/32\",\n              \"35.202.62.128/32\",\n              \"35.202.98.132/32\",\n              \"35.202.118.10/32\",\n              \"35.202.240.183/32\",\n              \"35.203.142.250/32\",\n              \"35.203.145.190/32\",\n              \"35.203.151.233/32\",\n              \"35.203.155.169/32\",\n              \"35.203.161.173/32\",\n              \"35.203.175.233/32\",\n              \"35.203.184.97/32\",\n              \"35.203.191.135/32\",\n              \"35.204.1.221/32\",\n              \"35.204.12.60/32\",\n              \"35.204.14.12/32\",\n              \"35.204.15.55/32\",\n              \"35.204.15.122/32\",\n              \"35.204.24.135/32\",\n              \"35.204.37.76/32\",\n              \"35.204.46.52/32\",\n              \"35.204.50.90/32\",\n              \"35.204.52.86/32\",\n              \"35.204.60.99/32\",\n              \"35.204.66.9/32\",\n              \"35.204.66.56/32\",\n              \"35.204.74.72/32\",\n              \"35.204.78.201/32\",\n              \"35.204.88.26/32\",\n              \"35.204.98.108/32\",\n              \"35.204.105.22/32\",\n              \"35.204.108.151/32\",\n              \"35.204.115.3/32\",\n              \"35.204.119.162/32\",\n              \"35.204.122.243/32\",\n              \"35.204.123.133/32\",\n              \"35.204.126.58/32\",\n              \"35.204.126.80/32\",\n              \"35.204.129.200/32\",\n              \"35.204.130.59/32\",\n              \"35.204.131.109/32\",\n              \"35.204.141.187/32\",\n              \"35.204.142.195/32\",\n              \"35.204.152.168/32\",\n              \"35.204.162.183/32\",\n              \"35.204.167.122/32\",\n              \"35.204.169.211/32\",\n              \"35.204.172.80/32\",\n              \"35.204.178.217/32\",\n              \"35.204.179.111/32\",\n              \"35.204.190.183/32\",\n              \"35.204.195.27/32\",\n              \"35.204.195.49/32\",\n              \"35.204.196.11/32\",\n              \"35.204.201.70/32\",\n              \"35.204.203.109/32\",\n              \"35.204.207.219/32\",\n              \"35.204.208.228/32\",\n              \"35.204.215.87/32\",\n              \"35.204.217.46/32\",\n              \"35.204.223.176/32\",\n              \"35.204.225.30/32\",\n              \"35.204.225.143/32\",\n              \"35.204.231.201/32\",\n              \"35.204.241.10/32\",\n              \"35.204.251.54/32\",\n              \"35.204.255.0/32\",\n              \"35.205.72.232/32\",\n              \"35.205.138.68/32\",\n              \"35.205.159.40/32\",\n              \"35.205.227.167/32\",\n              \"35.205.228.216/32\",\n              \"35.221.0.61/32\",\n              \"35.221.3.121/32\",\n              \"35.221.3.125/32\",\n              \"35.221.5.200/32\",\n              \"35.221.6.218/32\",\n              \"35.221.13.23/32\",\n              \"35.221.13.133/32\",\n              \"35.221.15.163/32\",\n              \"35.221.16.189/32\",\n              \"35.221.23.24/32\",\n              \"35.221.24.229/32\",\n              \"35.221.24.236/32\",\n              \"35.221.28.149/32\",\n              \"35.221.32.150/32\",\n              \"35.221.32.171/32\",\n              \"35.221.48.160/32\",\n              \"35.221.51.129/32\",\n              \"35.221.55.211/32\",\n              \"35.221.57.195/32\",\n              \"35.222.15.64/32\",\n              \"35.222.245.253/32\",\n              \"35.224.62.254/32\",\n              \"35.224.106.23/32\",\n              \"35.224.115.137/32\",\n              \"35.224.231.238/32\",\n              \"35.225.8.27/32\",\n              \"35.225.39.39/32\",\n              \"35.225.49.103/32\",\n              \"35.225.181.33/32\",\n              \"35.225.226.221/32\",\n              \"35.226.0.100/32\",\n              \"35.226.37.22/32\",\n              \"35.226.94.146/32\",\n              \"35.226.134.67/32\",\n              \"35.226.227.112/32\",\n              \"35.227.24.50/32\",\n              \"35.227.63.36/32\",\n              \"35.227.148.154/32\",\n              \"35.227.164.46/32\",\n              \"35.227.166.150/32\",\n              \"35.227.169.20/32\",\n              \"35.227.185.153/32\",\n              \"35.228.12.151/32\",\n              \"35.228.23.19/32\",\n              \"35.228.24.225/32\",\n              \"35.228.24.253/32\",\n              \"35.228.43.115/32\",\n              \"35.228.46.55/32\",\n              \"35.228.50.150/32\",\n              \"35.228.61.168/32\",\n              \"35.228.62.248/32\",\n              \"35.228.73.69/32\",\n              \"35.228.126.203/32\",\n              \"35.228.133.241/32\",\n              \"35.228.136.253/32\",\n              \"35.228.141.80/32\",\n              \"35.228.151.221/32\",\n              \"35.228.153.106/32\",\n              \"35.228.153.173/32\",\n              \"35.228.165.20/32\",\n              \"35.228.182.144/32\",\n              \"35.228.194.236/32\",\n              \"35.228.207.201/32\",\n              \"35.228.211.51/32\",\n              \"35.228.225.15/32\",\n              \"35.228.240.231/32\",\n              \"35.228.241.74/32\",\n              \"35.228.243.184/32\",\n              \"35.228.247.232/32\",\n              \"35.228.248.131/32\",\n              \"35.228.248.202/32\",\n              \"35.229.32.120/32\",\n              \"35.229.40.166/32\",\n              \"35.229.98.55/32\",\n              \"35.229.121.90/32\",\n              \"35.230.1.88/32\",\n              \"35.230.9.24/32\",\n              \"35.230.25.200/32\",\n              \"35.230.49.71/32\",\n              \"35.230.81.240/32\",\n              \"35.230.85.180/32\",\n              \"35.230.108.26/32\",\n              \"35.230.119.89/32\",\n              \"35.230.125.171/32\",\n              \"35.230.130.62/32\",\n              \"35.230.133.130/32\",\n              \"35.230.136.123/32\",\n              \"35.230.136.172/32\",\n              \"35.230.137.112/32\",\n              \"35.230.138.244/32\",\n              \"35.230.144.1/32\",\n              \"35.230.149.124/32\",\n              \"35.230.150.81/32\",\n              \"35.230.150.240/32\",\n              \"35.230.154.90/32\",\n              \"35.230.174.232/32\",\n              \"35.230.177.25/32\",\n              \"35.230.177.73/32\",\n              \"35.230.182.231/32\",\n              \"35.230.189.18/32\",\n              \"35.231.27.146/32\",\n              \"35.231.37.13/32\",\n              \"35.231.76.215/32\",\n              \"35.231.79.129/32\",\n              \"35.231.92.50/32\",\n              \"35.231.193.144/32\",\n              \"35.231.200.66/32\",\n              \"35.231.205.62/32\",\n              \"35.231.250.82/32\",\n              \"35.232.45.232/32\",\n              \"35.232.94.168/32\",\n              \"35.232.103.119/32\",\n              \"35.232.127.101/32\",\n              \"35.232.139.151/32\",\n              \"35.232.180.7/32\",\n              \"35.233.28.18/32\",\n              \"35.233.40.72/32\",\n              \"35.233.72.242/32\",\n              \"35.233.89.166/32\",\n              \"35.233.99.60/32\",\n              \"35.233.123.101/32\",\n              \"35.233.131.47/32\",\n              \"35.233.132.228/32\",\n              \"35.233.135.75/32\",\n              \"35.233.136.180/32\",\n              \"35.233.139.203/32\",\n              \"35.233.139.255/32\",\n              \"35.233.141.127/32\",\n              \"35.233.146.241/32\",\n              \"35.233.152.253/32\",\n              \"35.233.155.27/32\",\n              \"35.233.159.73/32\",\n              \"35.233.160.114/32\",\n              \"35.233.170.137/32\",\n              \"35.233.177.225/32\",\n              \"35.233.181.13/32\",\n              \"35.233.209.158/32\",\n              \"35.233.211.146/32\",\n              \"35.233.215.174/32\",\n              \"35.233.230.10/32\",\n              \"35.233.237.249/32\",\n              \"35.233.240.97/32\",\n              \"35.233.242.76/32\",\n              \"35.233.243.235/32\",\n              \"35.233.248.120/32\",\n              \"35.233.251.200/32\",\n              \"35.234.74.152/32\",\n              \"35.234.76.60/32\",\n              \"35.234.82.93/32\",\n              \"35.234.97.50/32\",\n              \"35.234.101.43/32\",\n              \"35.234.113.47/32\",\n              \"35.234.124.92/32\",\n              \"35.234.131.84/32\",\n              \"35.234.133.222/32\",\n              \"35.234.141.85/32\",\n              \"35.234.145.128/32\",\n              \"35.234.149.213/32\",\n              \"35.234.150.44/32\",\n              \"35.234.154.126/32\",\n              \"35.234.156.114/32\",\n              \"35.235.66.156/32\",\n              \"35.235.67.142/32\",\n              \"35.235.70.49/32\",\n              \"35.235.77.169/32\",\n              \"35.235.78.149/32\",\n              \"35.235.79.199/32\",\n              \"35.235.82.180/32\",\n              \"35.235.87.249/32\",\n              \"35.235.91.184/32\",\n              \"35.235.92.0/32\",\n              \"35.235.93.225/32\",\n              \"35.235.96.28/32\",\n              \"35.235.100.190/32\",\n              \"35.235.103.216/32\",\n              \"35.235.109.42/32\",\n              \"35.235.110.23/32\",\n              \"35.235.111.166/32\",\n              \"35.235.114.124/32\",\n              \"35.235.114.133/32\",\n              \"35.235.115.36/32\",\n              \"35.235.119.204/32\",\n              \"35.235.120.50/32\",\n              \"35.235.122.190/32\",\n              \"35.235.123.217/32\",\n              \"35.235.124.32/32\",\n              \"35.235.127.151/32\",\n              \"35.236.3.134/32\",\n              \"35.236.6.28/32\",\n              \"35.236.8.4/32\",\n              \"35.236.9.102/32\",\n              \"35.236.10.36/32\",\n              \"35.236.11.136/32\",\n              \"35.236.13.104/32\",\n              \"35.236.16.239/32\",\n              \"35.236.17.90/32\",\n              \"35.236.18.17/32\",\n              \"35.236.23.120/32\",\n              \"35.236.23.130/32\",\n              \"35.236.24.148/32\",\n              \"35.236.27.126/32\",\n              \"35.236.30.92/32\",\n              \"35.236.32.83/32\",\n              \"35.236.41.7/32\",\n              \"35.236.45.102/32\",\n              \"35.236.48.119/32\",\n              \"35.236.48.252/32\",\n              \"35.236.49.204/32\",\n              \"35.236.50.63/32\",\n              \"35.236.50.98/32\",\n              \"35.236.52.137/32\",\n              \"35.236.52.183/32\",\n              \"35.236.54.197/32\",\n              \"35.236.54.236/32\",\n              \"35.236.54.249/32\",\n              \"35.236.66.213/32\",\n              \"35.236.68.82/32\",\n              \"35.236.69.183/32\",\n              \"35.236.72.182/32\",\n              \"35.236.76.220/32\",\n              \"35.236.77.63/32\",\n              \"35.236.77.180/32\",\n              \"35.236.80.100/32\",\n              \"35.236.82.58/32\",\n              \"35.236.83.60/32\",\n              \"35.236.84.168/32\",\n              \"35.236.86.111/32\",\n              \"35.236.87.95/32\",\n              \"35.236.90.57/32\",\n              \"35.236.94.222/32\",\n              \"35.236.97.24/32\",\n              \"35.236.100.13/32\",\n              \"35.236.103.215/32\",\n              \"35.236.107.110/32\",\n              \"35.236.109.101/32\",\n              \"35.236.110.188/32\",\n              \"35.236.111.104/32\",\n              \"35.236.113.26/32\",\n              \"35.236.114.139/32\",\n              \"35.236.116.189/32\",\n              \"35.236.118.35/32\",\n              \"35.236.120.14/32\",\n              \"35.236.123.127/32\",\n              \"35.236.124.70/32\",\n              \"35.236.125.16/32\",\n              \"35.236.126.78/32\",\n              \"35.236.194.140/32\",\n              \"35.236.196.78/32\",\n              \"35.236.204.22/32\",\n              \"35.236.207.204/32\",\n              \"35.236.209.10/32\",\n              \"35.236.219.57/32\",\n              \"35.236.225.160/32\",\n              \"35.236.226.16/32\",\n              \"35.236.228.33/32\",\n              \"35.236.228.41/32\",\n              \"35.236.241.145/32\",\n              \"35.236.242.169/32\",\n              \"35.237.6.119/32\",\n              \"35.237.16.252/32\",\n              \"35.237.32.116/32\",\n              \"35.237.33.255/32\",\n              \"35.237.61.35/32\",\n              \"35.237.129.145/32\",\n              \"35.237.134.39/32\",\n              \"35.237.182.230/32\",\n              \"35.237.209.128/32\",\n              \"35.237.210.45/32\",\n              \"35.237.222.50/32\",\n              \"35.237.235.241/32\",\n              \"35.237.241.81/32\",\n              \"35.237.241.194/32\",\n              \"35.237.245.143/32\",\n              \"35.237.248.171/32\",\n              \"35.239.35.153/32\",\n              \"35.239.51.8/32\",\n              \"35.239.54.20/32\",\n              \"35.239.68.63/32\",\n              \"35.240.58.39/32\",\n              \"35.240.104.231/32\",\n              \"35.241.144.57/32\",\n              \"35.241.145.54/32\",\n              \"35.241.197.193/32\",\n              \"35.241.216.166/32\",\n              \"35.241.229.156/32\",\n              \"35.241.233.190/32\",\n              \"35.242.129.249/32\",\n              \"35.242.129.253/32\",\n              \"35.242.138.94/32\",\n              \"35.242.140.69/32\",\n              \"35.242.142.106/32\",\n              \"35.242.152.55/32\",\n              \"35.242.154.29/32\",\n              \"35.242.154.92/32\",\n              \"35.242.158.36/32\",\n              \"35.242.164.105/32\",\n              \"35.242.166.56/32\",\n              \"35.242.170.95/32\",\n              \"35.242.173.23/32\",\n              \"35.242.175.90/32\",\n              \"35.242.175.97/32\",\n              \"35.242.180.151/32\",\n              \"35.242.181.42/32\",\n              \"35.242.185.45/32\",\n              \"35.242.204.141/32\",\n              \"35.242.205.212/32\",\n              \"35.242.207.188/32\",\n              \"35.242.214.46/32\",\n              \"35.242.217.158/32\",\n              \"35.242.241.237/32\",\n              \"35.242.245.200/32\",\n              \"35.242.248.79/32\",\n              \"35.242.254.63/32\",\n              \"35.243.170.35/32\",\n              \"35.243.182.120/32\",\n              \"35.243.196.214/32\",\n              \"35.243.220.101/32\",\n              \"35.245.1.43/32\",\n              \"35.245.9.122/32\",\n              \"35.245.22.62/32\",\n              \"35.245.24.132/32\",\n              \"35.245.27.85/32\",\n              \"35.245.30.90/32\",\n              \"35.245.34.81/32\",\n              \"35.245.42.72/32\",\n              \"35.245.45.3/32\",\n              \"35.245.57.50/32\",\n              \"35.245.75.145/32\",\n              \"35.245.78.59/32\",\n              \"35.245.88.198/32\",\n              \"35.245.93.125/32\",\n              \"35.245.96.171/32\",\n              \"35.245.98.28/32\",\n              \"35.245.110.144/32\",\n              \"35.245.120.13/32\",\n              \"35.245.145.56/32\",\n              \"35.245.159.53/32\",\n              \"35.245.170.193/32\",\n              \"35.245.174.162/32\",\n              \"35.245.189.22/32\",\n              \"35.245.216.119/32\",\n              \"35.245.237.81/32\",\n              \"35.245.246.95/32\",\n              \"35.245.247.140/32\",\n              \"35.245.248.36/32\",\n              \"35.246.2.43/32\",\n              \"35.246.4.121/32\",\n              \"35.246.7.114/32\",\n              \"35.246.10.143/32\",\n              \"35.246.10.171/32\",\n              \"35.246.37.189/32\",\n              \"35.246.42.142/32\",\n              \"35.246.43.190/32\",\n              \"35.246.48.237/32\",\n              \"35.246.49.124/32\",\n              \"35.246.52.251/32\",\n              \"35.246.54.37/32\",\n              \"35.246.54.181/32\",\n              \"35.246.63.228/32\",\n              \"35.246.66.175/32\",\n              \"35.246.68.114/32\",\n              \"35.246.70.66/32\",\n              \"35.246.71.83/32\",\n              \"35.246.73.137/32\",\n              \"35.246.73.145/32\",\n              \"35.246.75.188/32\",\n              \"35.246.77.251/32\",\n              \"35.246.85.156/32\",\n              \"35.246.87.183/32\",\n              \"35.246.90.190/32\",\n              \"35.246.94.110/32\",\n              \"35.246.97.150/32\",\n              \"35.246.105.99/32\",\n              \"35.246.111.223/32\",\n              \"35.247.1.109/32\",\n              \"35.247.43.108/32\",\n              \"35.247.43.209/32\",\n              \"35.247.50.154/32\",\n              \"35.247.65.167/32\",\n              \"35.247.118.218/32\",\n              \"104.154.113.115/32\",\n              \"104.154.208.253/32\",\n              \"104.154.209.62/32\",\n              \"104.155.18.24/32\",\n              \"104.155.21.175/32\",\n              \"104.155.33.97/32\",\n              \"104.155.105.38/32\",\n              \"104.155.111.169/32\",\n              \"104.155.121.201/32\",\n              \"104.155.143.151/32\",\n              \"104.196.4.14/32\",\n              \"104.196.46.139/32\",\n              \"104.196.49.118/32\",\n              \"104.196.100.39/32\",\n              \"104.196.171.139/32\",\n              \"104.196.231.87/32\",\n              \"104.196.241.37/32\",\n              \"104.196.244.23/32\",\n              \"104.196.246.50/32\",\n              \"104.197.115.25/32\",\n              \"104.197.119.104/32\",\n              \"104.197.181.96/32\",\n              \"104.197.193.37/32\",\n              \"104.197.239.95/32\",\n              \"104.198.14.68/32\",\n              \"104.198.99.186/32\",\n              \"104.198.179.193/32\",\n              \"104.198.223.59/32\",\n              \"104.198.228.146/32\",\n              \"104.198.255.246/32\",\n              \"104.199.4.115/32\",\n              \"146.148.12.186/32\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"tcp\"\n              },\n              {\n                \"ipProtocol\": \"udp\"\n              }\n            ]\n          },\n          \"action\": \"allow\",\n          \"direction\": \"EGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 600,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"35.235.240.0/20\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"tcp\",\n                \"ports\": [\n                  \"22\",\n                  \"3389\",\n                  \"5900-5901\"\n                ]\n              }\n            ]\n          },\n          \"action\": \"allow\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 601,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"35.191.0.0/16\",\n              \"130.211.0.0/22\",\n              \"209.85.152.0/22\",\n              \"209.85.204.0/22\",\n              \"169.254.169.254\",\n              \"108.170.220.0/23\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 602,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"10.0.0.0/8\",\n              \"172.16.0.0/12\",\n              \"192.168.0.0/16\",\n              \"100.64.0.0/10\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 603,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"35.199.192.0/19\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"tcp\",\n                \"ports\": [\n                  \"53\"\n                ]\n              },\n              {\n                \"ipProtocol\": \"udp\",\n                \"ports\": [\n                  \"53\"\n                ]\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 604,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"107.178.230.64/26\",\n              \"35.199.224.0/19\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"tcp\",\n                \"ports\": [\n                  \"667\"\n                ]\n              },\n              {\n                \"ipProtocol\": \"udp\",\n                \"ports\": [\n                  \"665-666\"\n                ]\n              },\n              {\n                \"ipProtocol\": \"icmp\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 700,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"0.0.0.0/0\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"deny\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 2147483644,\n          \"match\": {\n            \"destIpRanges\": [\n              \"::/0\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"EGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 2147483646,\n          \"match\": {\n            \"destIpRanges\": [\n              \"0.0.0.0/0\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"EGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 2147483647,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"0.0.0.0/0\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/apigee1/json-dumps/compute-migs-us-central1.json",
    "content": "{\n  \"kind\": \"compute#regionInstanceGroupManagerList\",\n  \"id\": \"projects/gcpdiag-apigee1-aaaa/regions/us-central1/instanceGroupManagers\",\n  \"items\": [\n    {\n      \"kind\": \"compute#instanceGroupManager\",\n      \"id\": \"1113081953745275068\",\n      \"creationTimestamp\": \"2023-04-30T20:47:31.305-07:00\",\n      \"name\": \"mig-bridge-manager-us-central1\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/us-central1\",\n      \"distributionPolicy\": {\n        \"zones\": [\n          {\n            \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-central1-c\"\n          },\n          {\n            \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-central1-b\"\n          },\n          {\n            \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-central1-f\"\n          }\n        ],\n        \"targetShape\": \"EVEN\"\n      },\n      \"instanceTemplate\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/global/instanceTemplates/mig-bridge-us-central1-20230501034633253400000001\",\n      \"versions\": [\n        {\n          \"instanceTemplate\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/global/instanceTemplates/mig-bridge-us-central1-20230501034633253400000001\",\n          \"targetSize\": {\n            \"calculated\": 2\n          }\n        }\n      ],\n      \"instanceGroup\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/us-central1/instanceGroups/mig-bridge-manager-us-central1\",\n      \"baseInstanceName\": \"mig-bridge-us-central1\",\n      \"fingerprint\": \"Gjs4KcJJIwA=\",\n      \"currentActions\": {\n        \"none\": 2,\n        \"creating\": 0,\n        \"creatingWithoutRetries\": 0,\n        \"verifying\": 0,\n        \"recreating\": 0,\n        \"deleting\": 0,\n        \"abandoning\": 0,\n        \"restarting\": 0,\n        \"refreshing\": 0,\n        \"suspending\": 0,\n        \"resuming\": 0,\n        \"stopping\": 0,\n        \"starting\": 0\n      },\n      \"status\": {\n        \"isStable\": true,\n        \"versionTarget\": {\n          \"isReached\": true\n        },\n        \"stateful\": {\n          \"hasStatefulConfig\": false,\n          \"perInstanceConfigs\": {\n            \"allEffective\": true\n          }\n        },\n        \"autoscaler\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/us-central1/autoscalers/mig-autoscaler-us-central1\"\n      },\n      \"targetSize\": 2,\n      \"listManagedInstancesResults\": \"PAGELESS\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/us-central1/instanceGroupManagers/mig-bridge-manager-us-central1\",\n      \"updatePolicy\": {\n        \"type\": \"OPPORTUNISTIC\",\n        \"instanceRedistributionType\": \"PROACTIVE\",\n        \"minimalAction\": \"REPLACE\",\n        \"maxSurge\": {\n          \"fixed\": 3,\n          \"calculated\": 3\n        },\n        \"maxUnavailable\": {\n          \"fixed\": 3,\n          \"calculated\": 3\n        },\n        \"replacementMethod\": \"SUBSTITUTE\"\n      },\n      \"namedPorts\": [\n        {\n          \"name\": \"apigee-https\",\n          \"port\": 443\n        }\n      ]\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/us-central1/instanceGroupManagers\"\n}\n"
  },
  {
    "path": "test-data/apigee1/json-dumps/compute-network-apigee-network.json",
    "content": "{\n  \"autoCreateSubnetworks\": false,\n  \"creationTimestamp\": \"2023-02-15T22:23:14.098-08:00\",\n  \"id\": \"6378627999444530493\",\n  \"kind\": \"compute#network\",\n  \"name\": \"apigee-network\",\n  \"networkFirewallPolicyEnforcementOrder\": \"AFTER_CLASSIC_FIREWALL\",\n  \"peerings\": [\n    {\n      \"autoCreateRoutes\": true,\n      \"exchangeSubnetRoutes\": true,\n      \"exportCustomRoutes\": false,\n      \"exportSubnetRoutesWithPublicIp\": false,\n      \"importCustomRoutes\": false,\n      \"importSubnetRoutesWithPublicIp\": false,\n      \"name\": \"servicenetworking-googleapis-com\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/REDACTED/global/networks/servicenetworking\",\n      \"stackType\": \"IPV4_ONLY\",\n      \"state\": \"ACTIVE\",\n      \"stateDetails\": \"[2023-04-27T12:13:45.847-07:00]: Connected.\"\n    }\n  ],\n  \"routingConfig\": {\n    \"routingMode\": \"REGIONAL\"\n  },\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/global/networks/apigee-network\",\n  \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/global/networks/6378627999444530493\",\n  \"subnetworks\": [\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/us-central1/subnetworks/apigee-subnetwork\"\n  ]\n}\n"
  },
  {
    "path": "test-data/apigee1/json-dumps/compute-regions.json",
    "content": "{\n  \"kind\": \"compute#regionList\",\n  \"id\": \"projects/gcpdiag-apigee1-aaaa/regions\",\n  \"items\": [\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1220\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east1\",\n      \"description\": \"asia-east1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-east1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-east1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-east1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 48,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/asia-east1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1370\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east2\",\n      \"description\": \"asia-east2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-east2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-east2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-east2-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 48,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/asia-east2\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1250\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast1\",\n      \"description\": \"asia-northeast1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-northeast1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-northeast1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-northeast1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 48,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/asia-northeast1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1390\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast2\",\n      \"description\": \"asia-northeast2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-northeast2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-northeast2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-northeast2-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 48,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/asia-northeast2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1410\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast3\",\n      \"description\": \"asia-northeast3\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-northeast3-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-northeast3-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-northeast3-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 48,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/asia-northeast3\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1320\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south1\",\n      \"description\": \"asia-south1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-south1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-south1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-south1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/asia-south1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1470\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south2\",\n      \"description\": \"asia-south2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-south2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-south2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-south2-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/asia-south2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1260\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast1\",\n      \"description\": \"asia-southeast1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-southeast1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-southeast1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-southeast1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 48,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/asia-southeast1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1440\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast2\",\n      \"description\": \"asia-southeast2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-southeast2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-southeast2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/asia-southeast2-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 48,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/asia-southeast2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1280\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast1\",\n      \"description\": \"australia-southeast1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/australia-southeast1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/australia-southeast1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/australia-southeast1-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 48,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/australia-southeast1\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1480\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast2\",\n      \"description\": \"australia-southeast2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/australia-southeast2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/australia-southeast2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/australia-southeast2-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/australia-southeast2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1450\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-central2\",\n      \"description\": \"europe-central2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-central2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-central2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-central2-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/europe-central2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1350\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-north1\",\n      \"description\": \"europe-north1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-north1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-north1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-north1-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 48,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/europe-north1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1540\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-southwest1\",\n      \"description\": \"europe-southwest1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-southwest1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-southwest1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-southwest1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/europe-southwest1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1100\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west1\",\n      \"description\": \"europe-west1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-west1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-west1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-west1-d\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 48,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/europe-west1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1570\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west12\",\n      \"description\": \"europe-west12\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-west12-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-west12-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-west12-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/europe-west12\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1290\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west2\",\n      \"description\": \"europe-west2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-west2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-west2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-west2-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 48,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/europe-west2\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1300\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west3\",\n      \"description\": \"europe-west3\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-west3-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-west3-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-west3-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 48,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/europe-west3\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1340\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west4\",\n      \"description\": \"europe-west4\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-west4-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-west4-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-west4-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 48,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/europe-west4\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1380\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west6\",\n      \"description\": \"europe-west6\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-west6-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-west6-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-west6-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 48,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/europe-west6\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1510\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west8\",\n      \"description\": \"europe-west8\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-west8-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-west8-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-west8-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/europe-west8\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1520\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west9\",\n      \"description\": \"europe-west9\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-west9-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-west9-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/europe-west9-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/europe-west9\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1580\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central1\",\n      \"description\": \"me-central1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/me-central1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/me-central1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/me-central1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/me-central1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1560\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-west1\",\n      \"description\": \"me-west1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/me-west1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/me-west1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/me-west1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/me-west1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1330\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast1\",\n      \"description\": \"northamerica-northeast1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/northamerica-northeast1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/northamerica-northeast1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/northamerica-northeast1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 48,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/northamerica-northeast1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1460\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast2\",\n      \"description\": \"northamerica-northeast2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/northamerica-northeast2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/northamerica-northeast2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/northamerica-northeast2-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/northamerica-northeast2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1310\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-east1\",\n      \"description\": \"southamerica-east1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/southamerica-east1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/southamerica-east1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/southamerica-east1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 48,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/southamerica-east1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1490\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-west1\",\n      \"description\": \"southamerica-west1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/southamerica-west1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/southamerica-west1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/southamerica-west1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/southamerica-west1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1000\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1\",\n      \"description\": \"us-central1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-central1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-central1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-central1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-central1-f\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 2\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 40\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 2\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 1\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 1\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 48,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/us-central1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1230\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east1\",\n      \"description\": \"us-east1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-east1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-east1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-east1-d\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 48,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/us-east1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1270\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east4\",\n      \"description\": \"us-east4\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-east4-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-east4-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-east4-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 48,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/us-east4\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1530\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east5\",\n      \"description\": \"us-east5\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-east5-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-east5-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-east5-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/us-east5\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1550\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-south1\",\n      \"description\": \"us-south1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-south1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-south1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-south1-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/us-south1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1210\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west1\",\n      \"description\": \"us-west1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-west1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-west1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-west1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 48,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/us-west1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1360\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west2\",\n      \"description\": \"us-west2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-west2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-west2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-west2-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 48,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/us-west2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1420\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west3\",\n      \"description\": \"us-west3\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-west3-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-west3-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-west3-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 48,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/us-west3\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1430\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west4\",\n      \"description\": \"us-west4\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-west4-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-west4-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/zones/us-west4-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 48,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/us-west4\",\n      \"supportsPzs\": false\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions\"\n}\n"
  },
  {
    "path": "test-data/apigee1/json-dumps/compute-subnetworks-aggregated.json",
    "content": "{\n    \"id\": \"projects/gcpdiag-apigee1-aaaa/aggregated/subnetworks\",\n    \"items\": {\n      \"regions/asia-east1\": {\n        \"warning\": {\n          \"code\": \"NO_RESULTS_ON_PAGE\",\n          \"data\": [\n            {\n              \"key\": \"scope\",\n              \"value\": \"regions/asia-east1\"\n            }\n          ],\n          \"message\": \"There are no results for scope 'regions/asia-east1' on this page.\"\n        }\n      },\n      \"regions/asia-east2\": {\n        \"warning\": {\n          \"code\": \"NO_RESULTS_ON_PAGE\",\n          \"data\": [\n            {\n              \"key\": \"scope\",\n              \"value\": \"regions/asia-east2\"\n            }\n          ],\n          \"message\": \"There are no results for scope 'regions/asia-east2' on this page.\"\n        }\n      },\n      \"regions/asia-northeast1\": {\n        \"warning\": {\n          \"code\": \"NO_RESULTS_ON_PAGE\",\n          \"data\": [\n            {\n              \"key\": \"scope\",\n              \"value\": \"regions/asia-northeast1\"\n            }\n          ],\n          \"message\": \"There are no results for scope 'regions/asia-northeast1' on this page.\"\n        }\n      },\n      \"regions/asia-northeast2\": {\n        \"warning\": {\n          \"code\": \"NO_RESULTS_ON_PAGE\",\n          \"data\": [\n            {\n              \"key\": \"scope\",\n              \"value\": \"regions/asia-northeast2\"\n            }\n          ],\n          \"message\": \"There are no results for scope 'regions/asia-northeast2' on this page.\"\n        }\n      },\n      \"regions/asia-northeast3\": {\n        \"warning\": {\n          \"code\": \"NO_RESULTS_ON_PAGE\",\n          \"data\": [\n            {\n              \"key\": \"scope\",\n              \"value\": \"regions/asia-northeast3\"\n            }\n          ],\n          \"message\": \"There are no results for scope 'regions/asia-northeast3' on this page.\"\n        }\n      },\n      \"regions/asia-south1\": {\n        \"warning\": {\n          \"code\": \"NO_RESULTS_ON_PAGE\",\n          \"data\": [\n            {\n              \"key\": \"scope\",\n              \"value\": \"regions/asia-south1\"\n            }\n          ],\n          \"message\": \"There are no results for scope 'regions/asia-south1' on this page.\"\n        }\n      },\n      \"regions/asia-south2\": {\n        \"warning\": {\n          \"code\": \"NO_RESULTS_ON_PAGE\",\n          \"data\": [\n            {\n              \"key\": \"scope\",\n              \"value\": \"regions/asia-south2\"\n            }\n          ],\n          \"message\": \"There are no results for scope 'regions/asia-south2' on this page.\"\n        }\n      },\n      \"regions/asia-southeast1\": {\n        \"warning\": {\n          \"code\": \"NO_RESULTS_ON_PAGE\",\n          \"data\": [\n            {\n              \"key\": \"scope\",\n              \"value\": \"regions/asia-southeast1\"\n            }\n          ],\n          \"message\": \"There are no results for scope 'regions/asia-southeast1' on this page.\"\n        }\n      },\n      \"regions/asia-southeast2\": {\n        \"warning\": {\n          \"code\": \"NO_RESULTS_ON_PAGE\",\n          \"data\": [\n            {\n              \"key\": \"scope\",\n              \"value\": \"regions/asia-southeast2\"\n            }\n          ],\n          \"message\": \"There are no results for scope 'regions/asia-southeast2' on this page.\"\n        }\n      },\n      \"regions/australia-southeast1\": {\n        \"warning\": {\n          \"code\": \"NO_RESULTS_ON_PAGE\",\n          \"data\": [\n            {\n              \"key\": \"scope\",\n              \"value\": \"regions/australia-southeast1\"\n            }\n          ],\n          \"message\": \"There are no results for scope 'regions/australia-southeast1' on this page.\"\n        }\n      },\n      \"regions/australia-southeast2\": {\n        \"warning\": {\n          \"code\": \"NO_RESULTS_ON_PAGE\",\n          \"data\": [\n            {\n              \"key\": \"scope\",\n              \"value\": \"regions/australia-southeast2\"\n            }\n          ],\n          \"message\": \"There are no results for scope 'regions/australia-southeast2' on this page.\"\n        }\n      },\n      \"regions/europe-central2\": {\n        \"warning\": {\n          \"code\": \"NO_RESULTS_ON_PAGE\",\n          \"data\": [\n            {\n              \"key\": \"scope\",\n              \"value\": \"regions/europe-central2\"\n            }\n          ],\n          \"message\": \"There are no results for scope 'regions/europe-central2' on this page.\"\n        }\n      },\n      \"regions/europe-north1\": {\n        \"warning\": {\n          \"code\": \"NO_RESULTS_ON_PAGE\",\n          \"data\": [\n            {\n              \"key\": \"scope\",\n              \"value\": \"regions/europe-north1\"\n            }\n          ],\n          \"message\": \"There are no results for scope 'regions/europe-north1' on this page.\"\n        }\n      },\n      \"regions/europe-southwest1\": {\n        \"warning\": {\n          \"code\": \"NO_RESULTS_ON_PAGE\",\n          \"data\": [\n            {\n              \"key\": \"scope\",\n              \"value\": \"regions/europe-southwest1\"\n            }\n          ],\n          \"message\": \"There are no results for scope 'regions/europe-southwest1' on this page.\"\n        }\n      },\n      \"regions/europe-west1\": {\n        \"warning\": {\n          \"code\": \"NO_RESULTS_ON_PAGE\",\n          \"data\": [\n            {\n              \"key\": \"scope\",\n              \"value\": \"regions/europe-west1\"\n            }\n          ],\n          \"message\": \"There are no results for scope 'regions/europe-west1' on this page.\"\n        }\n      },\n      \"regions/europe-west12\": {\n        \"warning\": {\n          \"code\": \"NO_RESULTS_ON_PAGE\",\n          \"data\": [\n            {\n              \"key\": \"scope\",\n              \"value\": \"regions/europe-west12\"\n            }\n          ],\n          \"message\": \"There are no results for scope 'regions/europe-west12' on this page.\"\n        }\n      },\n      \"regions/europe-west2\": {\n        \"warning\": {\n          \"code\": \"NO_RESULTS_ON_PAGE\",\n          \"data\": [\n            {\n              \"key\": \"scope\",\n              \"value\": \"regions/europe-west2\"\n            }\n          ],\n          \"message\": \"There are no results for scope 'regions/europe-west2' on this page.\"\n        }\n      },\n      \"regions/europe-west3\": {\n        \"warning\": {\n          \"code\": \"NO_RESULTS_ON_PAGE\",\n          \"data\": [\n            {\n              \"key\": \"scope\",\n              \"value\": \"regions/europe-west3\"\n            }\n          ],\n          \"message\": \"There are no results for scope 'regions/europe-west3' on this page.\"\n        }\n      },\n      \"regions/europe-west4\": {\n        \"warning\": {\n          \"code\": \"NO_RESULTS_ON_PAGE\",\n          \"data\": [\n            {\n              \"key\": \"scope\",\n              \"value\": \"regions/europe-west4\"\n            }\n          ],\n          \"message\": \"There are no results for scope 'regions/europe-west4' on this page.\"\n        }\n      },\n      \"regions/europe-west6\": {\n        \"warning\": {\n          \"code\": \"NO_RESULTS_ON_PAGE\",\n          \"data\": [\n            {\n              \"key\": \"scope\",\n              \"value\": \"regions/europe-west6\"\n            }\n          ],\n          \"message\": \"There are no results for scope 'regions/europe-west6' on this page.\"\n        }\n      },\n      \"regions/europe-west8\": {\n        \"warning\": {\n          \"code\": \"NO_RESULTS_ON_PAGE\",\n          \"data\": [\n            {\n              \"key\": \"scope\",\n              \"value\": \"regions/europe-west8\"\n            }\n          ],\n          \"message\": \"There are no results for scope 'regions/europe-west8' on this page.\"\n        }\n      },\n      \"regions/europe-west9\": {\n        \"warning\": {\n          \"code\": \"NO_RESULTS_ON_PAGE\",\n          \"data\": [\n            {\n              \"key\": \"scope\",\n              \"value\": \"regions/europe-west9\"\n            }\n          ],\n          \"message\": \"There are no results for scope 'regions/europe-west9' on this page.\"\n        }\n      },\n      \"regions/me-central1\": {\n        \"warning\": {\n          \"code\": \"NO_RESULTS_ON_PAGE\",\n          \"data\": [\n            {\n              \"key\": \"scope\",\n              \"value\": \"regions/me-central1\"\n            }\n          ],\n          \"message\": \"There are no results for scope 'regions/me-central1' on this page.\"\n        }\n      },\n      \"regions/me-west1\": {\n        \"warning\": {\n          \"code\": \"NO_RESULTS_ON_PAGE\",\n          \"data\": [\n            {\n              \"key\": \"scope\",\n              \"value\": \"regions/me-west1\"\n            }\n          ],\n          \"message\": \"There are no results for scope 'regions/me-west1' on this page.\"\n        }\n      },\n      \"regions/northamerica-northeast1\": {\n        \"warning\": {\n          \"code\": \"NO_RESULTS_ON_PAGE\",\n          \"data\": [\n            {\n              \"key\": \"scope\",\n              \"value\": \"regions/northamerica-northeast1\"\n            }\n          ],\n          \"message\": \"There are no results for scope 'regions/northamerica-northeast1' on this page.\"\n        }\n      },\n      \"regions/northamerica-northeast2\": {\n        \"warning\": {\n          \"code\": \"NO_RESULTS_ON_PAGE\",\n          \"data\": [\n            {\n              \"key\": \"scope\",\n              \"value\": \"regions/northamerica-northeast2\"\n            }\n          ],\n          \"message\": \"There are no results for scope 'regions/northamerica-northeast2' on this page.\"\n        }\n      },\n      \"regions/southamerica-east1\": {\n        \"warning\": {\n          \"code\": \"NO_RESULTS_ON_PAGE\",\n          \"data\": [\n            {\n              \"key\": \"scope\",\n              \"value\": \"regions/southamerica-east1\"\n            }\n          ],\n          \"message\": \"There are no results for scope 'regions/southamerica-east1' on this page.\"\n        }\n      },\n      \"regions/southamerica-west1\": {\n        \"warning\": {\n          \"code\": \"NO_RESULTS_ON_PAGE\",\n          \"data\": [\n            {\n              \"key\": \"scope\",\n              \"value\": \"regions/southamerica-west1\"\n            }\n          ],\n          \"message\": \"There are no results for scope 'regions/southamerica-west1' on this page.\"\n        }\n      },\n      \"regions/us-central1\": {\n        \"subnetworks\": [\n          {\n            \"creationTimestamp\": \"2023-04-30T20:40:09.697-07:00\",\n            \"enableFlowLogs\": false,\n            \"fingerprint\": \"pT4VVtoPFRA=\",\n            \"gatewayAddress\": \"10.128.0.1\",\n            \"id\": \"8347197685109000822\",\n            \"ipCidrRange\": \"10.128.0.0/20\",\n            \"kind\": \"compute#subnetwork\",\n            \"logConfig\": {\n              \"aggregationInterval\": \"INTERVAL_5_SEC\",\n              \"enable\": false,\n              \"flowSampling\": 0.5,\n              \"metadata\": \"INCLUDE_ALL_METADATA\"\n            },\n            \"name\": \"apigee-subnetwork\",\n            \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/global/networks/apigee-network\",\n            \"privateIpGoogleAccess\": true,\n            \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n            \"purpose\": \"PRIVATE\",\n            \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/us-central1\",\n            \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/us-central1/subnetworks/apigee-subnetwork\",\n            \"stackType\": \"IPV4_ONLY\"\n          }\n        ]\n      },\n      \"regions/us-east1\": {\n        \"warning\": {\n          \"code\": \"NO_RESULTS_ON_PAGE\",\n          \"data\": [\n            {\n              \"key\": \"scope\",\n              \"value\": \"regions/us-east1\"\n            }\n          ],\n          \"message\": \"There are no results for scope 'regions/us-east1' on this page.\"\n        }\n      },\n      \"regions/us-east4\": {\n        \"warning\": {\n          \"code\": \"NO_RESULTS_ON_PAGE\",\n          \"data\": [\n            {\n              \"key\": \"scope\",\n              \"value\": \"regions/us-east4\"\n            }\n          ],\n          \"message\": \"There are no results for scope 'regions/us-east4' on this page.\"\n        }\n      },\n      \"regions/us-east5\": {\n        \"warning\": {\n          \"code\": \"NO_RESULTS_ON_PAGE\",\n          \"data\": [\n            {\n              \"key\": \"scope\",\n              \"value\": \"regions/us-east5\"\n            }\n          ],\n          \"message\": \"There are no results for scope 'regions/us-east5' on this page.\"\n        }\n      },\n      \"regions/us-south1\": {\n        \"warning\": {\n          \"code\": \"NO_RESULTS_ON_PAGE\",\n          \"data\": [\n            {\n              \"key\": \"scope\",\n              \"value\": \"regions/us-south1\"\n            }\n          ],\n          \"message\": \"There are no results for scope 'regions/us-south1' on this page.\"\n        }\n      },\n      \"regions/us-west1\": {\n        \"warning\": {\n          \"code\": \"NO_RESULTS_ON_PAGE\",\n          \"data\": [\n            {\n              \"key\": \"scope\",\n              \"value\": \"regions/us-west1\"\n            }\n          ],\n          \"message\": \"There are no results for scope 'regions/us-west1' on this page.\"\n        }\n      },\n      \"regions/us-west2\": {\n        \"warning\": {\n          \"code\": \"NO_RESULTS_ON_PAGE\",\n          \"data\": [\n            {\n              \"key\": \"scope\",\n              \"value\": \"regions/us-west2\"\n            }\n          ],\n          \"message\": \"There are no results for scope 'regions/us-west2' on this page.\"\n        }\n      },\n      \"regions/us-west3\": {\n        \"warning\": {\n          \"code\": \"NO_RESULTS_ON_PAGE\",\n          \"data\": [\n            {\n              \"key\": \"scope\",\n              \"value\": \"regions/us-west3\"\n            }\n          ],\n          \"message\": \"There are no results for scope 'regions/us-west3' on this page.\"\n        }\n      },\n      \"regions/us-west4\": {\n        \"warning\": {\n          \"code\": \"NO_RESULTS_ON_PAGE\",\n          \"data\": [\n            {\n              \"key\": \"scope\",\n              \"value\": \"regions/us-west4\"\n            }\n          ],\n          \"message\": \"There are no results for scope 'regions/us-west4' on this page.\"\n        }\n      }\n    },\n    \"kind\": \"compute#subnetworkAggregatedList\",\n    \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/aggregated/subnetworks\"\n  }\n"
  },
  {
    "path": "test-data/apigee1/json-dumps/compute-subnetworks-apigee-subnetwork.json",
    "content": "{\n  \"kind\": \"compute#subnetwork\",\n  \"id\": \"8347197685109000822\",\n  \"creationTimestamp\": \"2023-04-30T20:40:09.697-07:00\",\n  \"name\": \"apigee-subnetwork\",\n  \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/global/networks/apigee-network\",\n  \"ipCidrRange\": \"10.128.0.0/20\",\n  \"gatewayAddress\": \"10.128.0.1\",\n  \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/us-central1\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/us-central1/subnetworks/apigee-subnetwork\",\n  \"privateIpGoogleAccess\": true,\n  \"fingerprint\": \"k7qIdBCe3Ew=\",\n  \"enableFlowLogs\": false,\n  \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n  \"purpose\": \"PRIVATE\",\n  \"logConfig\": {\n    \"enable\": false\n  },\n  \"stackType\": \"IPV4_ONLY\"\n}\n"
  },
  {
    "path": "test-data/apigee1/json-dumps/compute-templates.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-apigee1-aaaa/global/instanceTemplates\",\n  \"items\": [\n    {\n      \"creationTimestamp\": \"2023-04-30T20:46:33.855-07:00\",\n      \"description\": \"\",\n      \"id\": \"3650966283431872758\",\n      \"kind\": \"compute#instanceTemplate\",\n      \"name\": \"mig-bridge-us-central1-20230501034633253400000001\",\n      \"properties\": {\n        \"disks\": [\n          {\n            \"autoDelete\": true,\n            \"boot\": true,\n            \"deviceName\": \"persistent-disk-0\",\n            \"index\": 0,\n            \"initializeParams\": {\n              \"diskSizeGb\": \"20\",\n              \"diskType\": \"pd-standard\",\n              \"sourceImage\": \"projects/centos-cloud/global/images/family/centos-7\"\n            },\n            \"interface\": \"SCSI\",\n            \"kind\": \"compute#attachedDisk\",\n            \"mode\": \"READ_WRITE\",\n            \"type\": \"PERSISTENT\"\n          }\n        ],\n        \"machineType\": \"e2-small\",\n        \"metadata\": {\n          \"fingerprint\": \"REDACTED\",\n          \"items\": [\n            {\n              \"key\": \"ENDPOINT\",\n              \"value\": \"10.25.116.2\"\n            },\n            {\n              \"key\": \"startup-script-url\",\n              \"value\": \"gs://apigee-5g-saas/apigee-envoy-proxy-release/latest/conf/startup-script.sh\"\n            }\n          ],\n          \"kind\": \"compute#metadata\"\n        },\n        \"networkInterfaces\": [\n          {\n            \"kind\": \"compute#networkInterface\",\n            \"name\": \"nic0\",\n            \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/global/networks/apigee-network\",\n            \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/regions/us-central1/subnetworks/apigee-subnetwork\"\n          }\n        ],\n        \"scheduling\": {\n          \"automaticRestart\": true,\n          \"onHostMaintenance\": \"MIGRATE\",\n          \"preemptible\": false,\n          \"provisioningModel\": \"STANDARD\"\n        },\n        \"serviceAccounts\": [\n          {\n            \"email\": \"default\",\n            \"scopes\": [\n              \"https://www.googleapis.com/auth/devstorage.read_only\"\n            ]\n          }\n        ],\n        \"tags\": {\n          \"items\": [\n            \"https-server\",\n            \"mig-bridge\"\n          ]\n        }\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/global/instanceTemplates/mig-bridge-us-central1-20230501034633253400000001\"\n    }\n  ],\n  \"kind\": \"compute#instanceTemplateList\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-apigee1-aaaa/global/instanceTemplates\"\n}\n"
  },
  {
    "path": "test-data/apigee1/json-dumps/iam-policy.json",
    "content": "{\n  \"bindings\": [\n    {\n      \"members\": [\n        \"serviceAccount:service-12340005@compute-system.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/compute.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:12340005-compute@developer.gserviceaccount.com\",\n        \"serviceAccount:12340005@cloudservices.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/editor\"\n    },\n    {\n      \"members\": [\n        \"user:test@example.com\"\n      ],\n      \"role\": \"roles/owner\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12340005@service-networking.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/servicenetworking.serviceAgent\"\n    }\n  ],\n  \"etag\": \"BwXc5HTQmKE=\",\n  \"version\": 1\n}\n"
  },
  {
    "path": "test-data/apigee1/json-dumps/iam-service-accounts.json",
    "content": "{\n  \"accounts\": [\n    {\n      \"name\": \"projects/gcpdiag-apigee1-aaaa/serviceAccounts/12340005-compute@developer.gserviceaccount.com\",\n      \"projectId\": \"gcpdiag-apigee1-aaaa\",\n      \"uniqueId\": \"110933271309447752400\",\n      \"email\": \"12340005-compute@developer.gserviceaccount.com\",\n      \"displayName\": \"Compute Engine default service account\",\n      \"etag\": \"MDEwMjE5MjA=\",\n      \"oauth2ClientId\": \"110933271309447752400\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/apigee1/json-dumps/kms-key-iam-policy.json",
    "content": "{\n  \"bindings\": [\n    {\n      \"members\": [\n        \"serviceAccount:service-12340005@gcp-sa-apigee.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/cloudkms.cryptoKeyEncrypterDecrypter\"\n    }\n  ],\n  \"etag\": \"BwXmKjXAWYM=\",\n  \"version\": 1\n}\n"
  },
  {
    "path": "test-data/apigee1/json-dumps/project.json",
    "content": "{\n  \"name\": \"projects/12340005\",\n  \"parent\": \"folders/373737373737\",\n  \"projectId\": \"gcpdiag-apigee1-aaaa\",\n  \"state\": \"ACTIVE\",\n  \"displayName\": \"gcpdiag test - apigee1\",\n  \"createTime\": \"2022-04-15T07:57:45.772Z\",\n  \"updateTime\": \"2022-04-15T07:57:47.522Z\",\n  \"etag\": \"dTwm6ePUckc4Y+dgi3Yg1g==\"\n}\n"
  },
  {
    "path": "test-data/apigee1/json-dumps/services.json",
    "content": "{\n  \"services\": [\n    {\n      \"name\": \"projects/12340005/services/apigee.googleapis.com\",\n      \"config\": {\n        \"name\": \"apigee.googleapis.com\",\n        \"title\": \"Apigee API\",\n        \"documentation\": {\n          \"summary\": \"Use the Apigee API to programmatically develop and manage APIs\\nwith a set of RESTful operations. Develop and secure API proxies,\\ndeploy and undeploy API proxy revisions, monitor APIs, configure\\nenvironments, manage users, and more.\\n\\nNote: This product is available as a free trial\\nfor a time period of 60 days.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"apigee.googleapis.com/Proxy\",\n            \"displayName\": \"Apigee proxy\",\n            \"description\": \"Monitored resource for Apigee API proxy.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP project ID that writes to this monitored resource.\"\n              },\n              {\n                \"key\": \"org\",\n                \"description\": \"An organization is a container for all the objects in an Apigee account.\"\n              },\n              {\n                \"key\": \"env\",\n                \"description\": \"An environment is a runtime execution context for the proxies in an organization.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location where the Apigee infrastructure is provisioned.\"\n              },\n              {\n                \"key\": \"proxy_name\",\n                \"description\": \"A proxy is your interface to developers that want to use your backend services.\"\n              },\n              {\n                \"key\": \"revision\",\n                \"description\": \"Revisions let you manage API proxy updates as you create and deploy them to an environment.\"\n              },\n              {\n                \"key\": \"host\",\n                \"description\": \"Host is the runtime container/vm that the proxy is deployed on.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"apigee.googleapis.com/ProxyV2\",\n            \"displayName\": \"Apigee proxy (v2)\",\n            \"description\": \"Monitored resource for Apigee API proxy (v2).\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP project ID that writes to this monitored resource.\"\n              },\n              {\n                \"key\": \"org\",\n                \"description\": \"An organization is a container for all the objects in an Apigee account.\"\n              },\n              {\n                \"key\": \"env\",\n                \"description\": \"An environment is a runtime execution context for the proxies in an organization.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location where the Apigee infrastructure is provisioned.\"\n              },\n              {\n                \"key\": \"proxy_name\",\n                \"description\": \"A proxy is your interface to developers that want to use your backend services.\"\n              },\n              {\n                \"key\": \"runtime_version\",\n                \"description\": \"Version of the Apigee Runtime for the proxy.\"\n              },\n              {\n                \"key\": \"instance_id\",\n                \"description\": \"Instance ID of the Apigee application.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"apigee.googleapis.com/Environment\",\n            \"displayName\": \"Apigee environment\",\n            \"description\": \"Monitored resource for Apigee environment.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP project ID that writes to this monitored resource.\"\n              },\n              {\n                \"key\": \"org\",\n                \"description\": \"An organization is a container for all the objects in an Apigee account.\"\n              },\n              {\n                \"key\": \"env\",\n                \"description\": \"An environment is a runtime execution context for the proxies in an organization.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location where the Apigee infrastructure is provisioned.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"apigee.googleapis.com/TargetV2\",\n            \"displayName\": \"Apigee target (v2)\",\n            \"description\": \"Monitored resource for Apigee target (v2) with the host endpoint label.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP project ID that writes to this monitored resource.\"\n              },\n              {\n                \"key\": \"org\",\n                \"description\": \"An organization is a container for all the objects in an Apigee account.\"\n              },\n              {\n                \"key\": \"env\",\n                \"description\": \"An environment is a runtime execution context for the proxies in an organization.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location where the Apigee infrastructure is provisioned.\"\n              },\n              {\n                \"key\": \"proxy_name\",\n                \"description\": \"A proxy is your interface to developers that want to use your backend services.\"\n              },\n              {\n                \"key\": \"type\",\n                \"description\": \"Type of target such as service callout.\"\n              },\n              {\n                \"key\": \"endpoint\",\n                \"description\": \"Target endpoint URL.\"\n              },\n              {\n                \"key\": \"runtime_version\",\n                \"description\": \"Version of the Apigee Runtime for the proxy.\"\n              },\n              {\n                \"key\": \"instance_id\",\n                \"description\": \"Instance ID of the Apigee application.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"k8s_container\",\n            \"displayName\": \"Kubernetes Container\",\n            \"description\": \"A Kubernetes container instance.\",\n            \"labels\": [\n              {\n                \"key\": \"project_id\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as \\\"my-project\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The physical location of the cluster that contains the container.\"\n              },\n              {\n                \"key\": \"cluster_name\",\n                \"description\": \"The name of the cluster that the container is running in.\"\n              },\n              {\n                \"key\": \"namespace_name\",\n                \"description\": \"The name of the namespace that the container is running in.\"\n              },\n              {\n                \"key\": \"pod_name\",\n                \"description\": \"The name of the pod that the container is running in.\"\n              },\n              {\n                \"key\": \"container_name\",\n                \"description\": \"The name of the container.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"apigee.googleapis.com/Proxy\",\n              \"metrics\": [\n                \"apigee.googleapis.com/internal/proxy/response_count_delta\",\n                \"apigee.googleapis.com/internal/proxy/response_latencies_double\",\n                \"apigee.googleapis.com/proxy/request_count\",\n                \"apigee.googleapis.com/proxy/response_count\",\n                \"apigee.googleapis.com/proxy/latencies\",\n                \"apigee.googleapis.com/internal/target/response_count_delta\",\n                \"apigee.googleapis.com/internal/target/response_latencies_double\",\n                \"apigee.googleapis.com/target/request_count\",\n                \"apigee.googleapis.com/target/response_count\",\n                \"apigee.googleapis.com/target/latencies\",\n                \"apigee.googleapis.com/policy/latencies\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"apigee.googleapis.com/ProxyV2\",\n              \"metrics\": [\n                \"apigee.googleapis.com/mint/request_count\",\n                \"apigee.googleapis.com/mint/response_count\",\n                \"apigee.googleapis.com/mint/latencies_percentile\",\n                \"apigee.googleapis.com/internal/proxyv2/response_count_delta\",\n                \"apigee.googleapis.com/internal/proxyv2/response_latencies_double\",\n                \"apigee.googleapis.com/proxyv2/request_count\",\n                \"apigee.googleapis.com/proxyv2/response_count\",\n                \"apigee.googleapis.com/internal/proxyv2/latencies_bucket\",\n                \"apigee.googleapis.com/internal/proxyv2/latencies_count\",\n                \"apigee.googleapis.com/internal/proxyv2/latencies_sum\",\n                \"apigee.googleapis.com/proxyv2/latencies_percentile\",\n                \"apigee.googleapis.com/proxyv2/latencies\",\n                \"apigee.googleapis.com/internal/proxyv2/heartbeat\",\n                \"apigee.googleapis.com/policyv2/latencies\",\n                \"apigee.googleapis.com/policyv2/latencies_percentile\",\n                \"apigee.googleapis.com/internal/targetv2/response_count_delta\",\n                \"apigee.googleapis.com/internal/targetv2/response_latencies_double\",\n                \"apigee.googleapis.com/targetv2/request_count\",\n                \"apigee.googleapis.com/targetv2/response_count\",\n                \"apigee.googleapis.com/targetv2/latencies\",\n                \"apigee.googleapis.com/targetv2/latencies_percentile\",\n                \"apigee.googleapis.com/proxyv2/release/response_count\",\n                \"apigee.googleapis.com/proxyv2/release/latencies_percentile\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"k8s_container\",\n              \"metrics\": [\n                \"apigee.googleapis.com/server/fault_count\",\n                \"apigee.googleapis.com/internal/server/prometheus_remote_storage_succeeded_samples_total\",\n                \"apigee.googleapis.com/server/nio\",\n                \"apigee.googleapis.com/server/num_threads\",\n                \"apigee.googleapis.com/server/request_count\",\n                \"apigee.googleapis.com/server/response_count\",\n                \"apigee.googleapis.com/server/latencies\",\n                \"apigee.googleapis.com/upstream/request_count\",\n                \"apigee.googleapis.com/upstream/response_count\",\n                \"apigee.googleapis.com/upstream/latencies\",\n                \"apigee.googleapis.com/udca/server/local_file_oldest_ts\",\n                \"apigee.googleapis.com/udca/server/local_file_latest_ts\",\n                \"apigee.googleapis.com/udca/server/local_file_count\",\n                \"apigee.googleapis.com/udca/server/total_latencies\",\n                \"apigee.googleapis.com/udca/server/upload_latencies\",\n                \"apigee.googleapis.com/udca/upstream/http_error_count\",\n                \"apigee.googleapis.com/udca/upstream/http_latencies\",\n                \"apigee.googleapis.com/udca/upstream/uploaded_file_sizes\",\n                \"apigee.googleapis.com/udca/upstream/uploaded_file_count\",\n                \"apigee.googleapis.com/udca/disk/used_bytes\",\n                \"apigee.googleapis.com/udca/server/pruned_file_count\",\n                \"apigee.googleapis.com/udca/server/retry_cache_size\",\n                \"apigee.googleapis.com/cassandra/process_max_fds\",\n                \"apigee.googleapis.com/cassandra/process_open_fds\",\n                \"apigee.googleapis.com/cassandra/jvm_memory_pool_bytes_max\",\n                \"apigee.googleapis.com/cassandra/jvm_memory_pool_bytes_init\",\n                \"apigee.googleapis.com/cassandra/jvm_memory_bytes_max\",\n                \"apigee.googleapis.com/cassandra/process_cpu_seconds_total\",\n                \"apigee.googleapis.com/cassandra/jvm_memory_bytes_used\",\n                \"apigee.googleapis.com/cassandra/compaction_pendingtasks\",\n                \"apigee.googleapis.com/cassandra/jvm_memory_bytes_init\",\n                \"apigee.googleapis.com/cassandra/jvm_memory_pool_bytes_used\",\n                \"apigee.googleapis.com/cassandra/jvm_memory_pool_bytes_committed\",\n                \"apigee.googleapis.com/cassandra/clientrequest_latency\",\n                \"apigee.googleapis.com/cassandra/tablerequests_rate\",\n                \"apigee.googleapis.com/cassandra/tablerequests_latency\",\n                \"apigee.googleapis.com/cassandra/jvm_memory_bytes_committed\",\n                \"apigee.googleapis.com/internal/cluster/ready_replicas\",\n                \"apigee.googleapis.com/internal/cluster/total_replicas\",\n                \"apigee.googleapis.com/internal/accesslog/input_records_total_count\",\n                \"apigee.googleapis.com/internal/accesslog/output_records_total_count\",\n                \"apigee.googleapis.com/internal/accesslog/output_buffer_queue_length\",\n                \"apigee.googleapis.com/internal/accesslog/output_buffer_total_bytes\",\n                \"apigee.googleapis.com/internal/accesslog/output_emit_count_current\",\n                \"apigee.googleapis.com/internal/accesslog/output_errors_count_current\",\n                \"apigee.googleapis.com/internal/accesslog/output_retry_count_current\",\n                \"apigee.googleapis.com/connectagent/sent_bytes\",\n                \"apigee.googleapis.com/connectagent/received_bytes\",\n                \"apigee.googleapis.com/connectagent/sent_messages\",\n                \"apigee.googleapis.com/connectagent/received_messages\",\n                \"apigee.googleapis.com/connectagent/completed_rpcs_count\",\n                \"apigee.googleapis.com/connectagent/stream_liveness_time\",\n                \"apigee.googleapis.com/connectagent/dropped_requests\",\n                \"apigee.googleapis.com/connectagent/dropped_responses\",\n                \"apigee.googleapis.com/envoy/redis/downstream_rq_total\",\n                \"apigee.googleapis.com/envoy/redis/downstream_rq_active\",\n                \"apigee.googleapis.com/envoy/redis/downstream_cx_total\",\n                \"apigee.googleapis.com/envoy/redis/downstream_cx_active\",\n                \"apigee.googleapis.com/envoy/redis/commands/evalsha/total\",\n                \"apigee.googleapis.com/envoy/redis/commands/evalsha/success\",\n                \"apigee.googleapis.com/envoy/redis/commands/evalsha/error\",\n                \"apigee.googleapis.com/envoy/redis/commands/evalsha/latency\",\n                \"apigee.googleapis.com/envoy/redis/commands/get/total\",\n                \"apigee.googleapis.com/envoy/redis/commands/get/success\",\n                \"apigee.googleapis.com/envoy/redis/commands/get/error\",\n                \"apigee.googleapis.com/envoy/redis/commands/get/latency\",\n                \"apigee.googleapis.com/internal/server/google_token_generation_latencies\",\n                \"apigee.googleapis.com/internal/server/google_token_generation_count\",\n                \"apigee.googleapis.com/internal/envoy/gateway/downstream_request_count\",\n                \"apigee.googleapis.com/internal/envoy/gateway/downstream_latencies\",\n                \"apigee.googleapis.com/internal/envoy/gateway/downstream_response_count\",\n                \"apigee.googleapis.com/internal/envoy/gateway/upstream_request_count\",\n                \"apigee.googleapis.com/internal/envoy/gateway/upstream_latencies\",\n                \"apigee.googleapis.com/internal/envoy/gateway/grpc_access_logs_written_count\",\n                \"apigee.googleapis.com/internal/envoy/gateway/grpc_access_logs_dropped_count\",\n                \"apigee.googleapis.com/internal/envoy/adapter/request_count\",\n                \"apigee.googleapis.com/internal/envoy/adapter/auth_request_latencies\",\n                \"apigee.googleapis.com/internal/envoy/adapter/apigee_request_latencies\",\n                \"apigee.googleapis.com/internal/envoy/adapter/products_cached\",\n                \"apigee.googleapis.com/internal/envoy/adapter/analytics_records_batch_size\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"apigee.googleapis.com/Environment\",\n              \"metrics\": [\n                \"apigee.googleapis.com/environment/anomaly_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"apigee.googleapis.com/TargetV2\",\n              \"metrics\": [\n                \"apigee.googleapis.com/internal/targetv2/response_count_delta\",\n                \"apigee.googleapis.com/internal/targetv2/response_latencies_double\",\n                \"apigee.googleapis.com/targetv2/request_count\",\n                \"apigee.googleapis.com/targetv2/response_count\",\n                \"apigee.googleapis.com/targetv2/latencies\",\n                \"apigee.googleapis.com/targetv2/latencies_percentile\",\n                \"apigee.googleapis.com/targetv2/release/response_count\",\n                \"apigee.googleapis.com/targetv2/release/latencies_percentile\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340005\"\n    },\n    {\n      \"name\": \"projects/12340005/services/cloudkms.googleapis.com\",\n      \"config\": {\n        \"name\": \"cloudkms.googleapis.com\",\n        \"title\": \"Cloud Key Management Service (KMS) API\",\n        \"documentation\": {\n          \"summary\": \"Manages keys and performs cryptographic operations in a central cloud service, for direct use by other cloud resources and applications.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"cloudkms.googleapis.com/Project\",\n            \"displayName\": \"KMS project\",\n            \"description\": \"KMS project.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project associated with this resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location of the resource.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"cloudkms.googleapis.com/Project\",\n              \"metrics\": [\n                \"cloudkms.googleapis.com/ekm/external/request_count\",\n                \"cloudkms.googleapis.com/ekm/external/request_latencies\",\n                \"cloudkms.googleapis.com/external_kms_multiregion_requests\",\n                \"cloudkms.googleapis.com/hsm_multiregion_asymmetric_requests\",\n                \"cloudkms.googleapis.com/hsm_multiregion_symmetric_requests\",\n                \"cloudkms.googleapis.com/peak_qps\",\n                \"cloudkms.googleapis.com/quota/external_kms_multiregion_requests/exceeded\",\n                \"cloudkms.googleapis.com/quota/external_kms_multiregion_requests/usage\",\n                \"cloudkms.googleapis.com/quota/hsm_multiregion_asymmetric_requests/exceeded\",\n                \"cloudkms.googleapis.com/quota/hsm_multiregion_asymmetric_requests/usage\",\n                \"cloudkms.googleapis.com/quota/hsm_multiregion_symmetric_requests/exceeded\",\n                \"cloudkms.googleapis.com/quota/hsm_multiregion_symmetric_requests/usage\",\n                \"cloudkms.googleapis.com/quota/software_multiregion_asymmetric_requests/exceeded\",\n                \"cloudkms.googleapis.com/quota/software_multiregion_asymmetric_requests/usage\",\n                \"cloudkms.googleapis.com/quota/software_multiregion_symmetric_requests/exceeded\",\n                \"cloudkms.googleapis.com/quota/software_multiregion_symmetric_requests/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"cloudkms.googleapis.com/Project\",\n              \"metrics\": [\n                \"cloudkms.googleapis.com/quota/external_kms_multiregion_requests/limit\",\n                \"cloudkms.googleapis.com/quota/hsm_multiregion_asymmetric_requests/limit\",\n                \"cloudkms.googleapis.com/quota/hsm_multiregion_symmetric_requests/limit\",\n                \"cloudkms.googleapis.com/quota/software_multiregion_asymmetric_requests/limit\",\n                \"cloudkms.googleapis.com/quota/software_multiregion_symmetric_requests/limit\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340005\"\n    },\n    {\n      \"name\": \"projects/12340005/services/compute.googleapis.com\",\n      \"config\": {\n        \"name\": \"compute.googleapis.com\",\n        \"title\": \"Compute Engine API\",\n        \"documentation\": {\n          \"summary\": \"Creates and runs virtual machines on Google Cloud Platform.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"compute.googleapis.com/VpcNetwork\",\n            \"displayName\": \"VPC Network\",\n            \"description\": \"VPC Network.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the VPC Network.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the VPC Network, global always.\"\n              },\n              {\n                \"key\": \"network_id\",\n                \"description\": \"VPC Network resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/instances_per_vpc_network\",\n                \"compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/ip_aliases_per_vpc_network\",\n                \"compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/instances_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/subnet_ranges_per_vpc_network\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/instances_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/instances_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/instances_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340005\"\n    },\n    {\n      \"name\": \"projects/12340005/services/oslogin.googleapis.com\",\n      \"config\": {\n        \"name\": \"oslogin.googleapis.com\",\n        \"title\": \"Cloud OS Login API\",\n        \"documentation\": {\n          \"summary\": \"You can use OS Login to manage access to your VM instances using IAM roles.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340005\"\n    },\n    {\n      \"name\": \"projects/12340005/services/servicenetworking.googleapis.com\",\n      \"config\": {\n        \"name\": \"servicenetworking.googleapis.com\",\n        \"title\": \"Service Networking API\",\n        \"documentation\": {\n          \"summary\": \"Provides automatic management of network configurations necessary for certain services.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340005\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/apigee1/project.tf",
    "content": "/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nresource \"random_string\" \"project_id_suffix\" {\n  length  = 8\n  number  = true\n  lower   = true\n  upper   = false\n  special = false\n}\n\nresource \"google_project\" \"project\" {\n  name            = \"gcpdiag test - apigee1\"\n  project_id      = \"gcpdiag-apigee1-${random_string.project_id_suffix.id}\"\n  org_id          = var.folder_id == \"\" ? var.org_id : null\n  folder_id       = var.folder_id != \"\" ? var.folder_id : null\n  billing_account = var.billing_account_id\n}\n\nresource \"google_project_service\" \"apigee\" {\n  project = google_project.project.project_id\n  service = \"apigee.googleapis.com\"\n}\n\nresource \"google_project_service\" \"compute\" {\n  project = google_project.project.project_id\n  service = \"compute.googleapis.com\"\n}\n\nresource \"google_project_service\" \"servicenetworking\" {\n  project = google_project.project.project_id\n  service = \"servicenetworking.googleapis.com\"\n}\n\nresource \"google_project_service\" \"kms\" {\n  project = google_project.project.project_id\n  service = \"cloudkms.googleapis.com\"\n}\n\noutput \"project_id\" {\n  value = google_project.project.project_id\n}\n\noutput \"project_id_suffix\" {\n  value = random_string.project_id_suffix.id\n}\n\noutput \"project_nr\" {\n  value = google_project.project.number\n}\n\noutput \"org_id\" {\n  value = var.org_id\n}\n"
  },
  {
    "path": "test-data/apigee1/variables.tf",
    "content": "variable \"billing_account_id\" {}\n\nvariable \"org_id\" {}\nvariable \"folder_id\" { default = \"\" }\n"
  },
  {
    "path": "test-data/bigquery1/Makefile",
    "content": "PROJECT_ID  := $(shell terraform output -raw project_id)\nPROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix)\nPROJECT_NR  := $(shell terraform output -raw project_nr)\nCURL         = ../../bin/curl-wrap.sh\nJSON_CLEANER = ../../bin/json-cleaner\n\nFAKE_PROJECT_ID_SUFFIX = aaaa\nFAKE_PROJECT_NR = 12340007\nFAKE_ORG_ID = 11112222\nSED_SUBST_FAKE = sed -e \"s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/\" \\\n\t\t     -e \"s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/\" \\\n\t\t     -e \"s/$(ORG_ID)/$(FAKE_ORG_ID)/\" \\\n\nall:\t\\\n\tjson-dumps/services.json \\\n\tjson-dumps/project.json\n\njson-dumps/services.json:\n\t$(CURL) -fsS \\\n\t  'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \\\n\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/project.json:\n\t$(CURL) -fsS \\\n\t  'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \\\n\t  | $(SED_SUBST_FAKE) >$@\n"
  },
  {
    "path": "test-data/bigquery1/job.tf",
    "content": "resource \"google_bigquery_table\" \"test_table\" {\n  project    = \"gcpdiag-bigquery1-aaaa\"\n  dataset_id = \"test_dataset\"\n  table_id   = \"test_table\"\n}\n\nresource \"google_bigquery_dataset\" \"test_dataset\" {\n  project       = \"gcpdiag-bigquery1-aaaa\"\n  dataset_id    = \"test_dataset\"\n  friendly_name = \"test\"\n  description   = \"This is a test description\"\n  location      = \"US\"\n}\n\nresource \"google_bigquery_job\" \"job\" {\n  project = \"gcpdiag-bigquery1-aaaa\"\n  job_id  = \"job_query_1\"\n\n  query {\n    query = \"SELECT * FROM [bigquery-public-data.america_health_rankings.ahr] LIMIT 10\"\n\n    destination_table {\n      project_id = \"gcpdiag-bigquery1-aaaa\"\n      dataset_id = \"test_dataset\"\n      table_id   = \"test_table\"\n    }\n\n    allow_large_results = true\n    flatten_results     = true\n\n    script_options {\n      key_result_statement = \"LAST\"\n    }\n  }\n}\n"
  },
  {
    "path": "test-data/bigquery1/json-dumps/ancestor.json",
    "content": "{\n  \"ancestor\": [\n    {\n      \"resourceId\": {\n        \"type\": \"project\",\n        \"id\": \"gcpdiag-bigquery1-aaaa\"\n      }\n    },\n    {\n      \"resourceId\": {\n        \"type\": \"folder\",\n        \"id\": \"123456789012\"\n      }\n    },\n    {\n      \"resourceId\": {\n        \"type\": \"organization\",\n        \"id\": \"987654321098\"\n      }\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/bigquery1/json-dumps/bigquery-failed-job.json",
    "content": "{\n  \"kind\": \"bigquery#job\",\n  \"etag\": \"N0ge4qTBNooQUmVCoxGG8g==\",\n  \"id\": \"gcpdiag-bigquery1-aaaa:US.bquxjob_12d56171_191bd834486\",\n  \"selfLink\": \"https://content-bigquery.googleapis.com/bigquery/v2/projects/gcpdiag-bigquery1-aaaa/jobs/bquxjob_12d56171_191bd834486?location=US\",\n  \"user_email\": \"pschnayder@google.com\",\n  \"configuration\": {\n    \"query\": {\n      \"query\": \"-- Find the top 100 names from the year 2017.\\nCREATE TEMP TABLE top_names_1(name STRING) CLUSTER BY name\\nAS\\n SELECT name\\n FROM `bigquery-public-data`.usa_names.usa_1910_current\\n WHERE year = 2017\\n ORDER BY number DESC LIMIT 100\\n;\\n-- Which names appear as words in Shakespeare's plays?\\nSELECT\\n name AS shakespeare_name\\nFROM top_names_1\\nWHERE name IN (\\n SELECT word\\n FROM `bigquery-public-data`.samples.shakespeare\\n);\",\n      \"priority\": \"INTERACTIVE\",\n      \"useLegacySql\": false\n    },\n    \"jobType\": \"QUERY\"\n  },\n  \"jobReference\": {\n    \"projectId\": \"gcpdiag-bigquery1-aaaa\",\n    \"jobId\": \"bquxjob_12d56171_191bd834486\",\n    \"location\": \"US\"\n  },\n  \"statistics\": {\n    \"creationTime\": \"1725461382806\",\n    \"startTime\": \"1725461382902\",\n    \"endTime\": \"1725461383642\",\n    \"totalBytesProcessed\": \"0\",\n    \"query\": {\n      \"totalBytesProcessed\": \"0\",\n      \"totalBytesBilled\": \"0\",\n      \"totalSlotMs\": \"0\",\n      \"statementType\": \"SCRIPT\"\n    },\n    \"totalSlotMs\": \"0\",\n    \"numChildJobs\": \"1\"\n  },\n  \"status\": {\n    \"errorResult\": {\n      \"reason\": \"invalidQuery\",\n      \"location\": \"query\",\n      \"debugInfo\": \"[INVALID_INPUT] message=QUERY_ERROR: [Result of ORDER BY queries cannot be clustered.] debug=code: \\t BAD_QUERY\\ndescription: \\\"Result of ORDER BY queries cannot be clustered.\\\"\\ncause: USER_ERROR\\naddress: \\\"http://ovpe12.prod.google.com:4901/task?handle=logs.344.serving.mixer.0.cloud-dataengine.3845348967303\\\"\\nstatus_proto {\\n  code: 3\\n  space: \\\"generic\\\"\\n  message: \\\"Result of ORDER BY queries cannot be clustered.\\\"\\n}\\nerror_details {\\n  argument_error {\\n    query_error {\\n    }\\n  }\\n  debug_info {\\n    error_message_template: \\\"Result of ORDER BY queries cannot be clustered.\\\"\\n    error_id: 2257563603\\n  }\\n}\\n errorProto=code: \\\"QUERY_ERROR\\\"\\nargument: \\\"Result of ORDER BY queries cannot be clustered.\\\"\\nlocation_type: OTHER\\nlocation: \\\"query\\\"\\n\\n\\tat com.google.cloud.helix.common.Exceptions.fromProto(Exceptions.java:2091)\\n\\tat com.google.cloud.helix.common.dremel.QueryExecutorImpl.mapDremelErrorsTohelixException(QueryExecutorImpl.java:1117)\\n\\tat com.google.cloud.helix.common.dremel.QueryExecutorImpl$ConfiguredQueryMigration$StreamHandler.onMessage(QueryExecutorImpl.java:714)\\n\\tat com.google.cloud.helix.common.dremel.QueryExecutorImpl$ConfiguredQueryMigration$StreamHandler.onMessage(QueryExecutorImpl.java:642)\\n\\tat com.google.net.rpc3.stream.RpcMessageCallback$Internal$Adapter.onMessage(RpcMessageCallback.java:96)\\n\\tat com.google.net.rpc3.impl.RpcStreamInternalContext.processMessageUnlocked(RpcStreamInternalContext.java:1747)\\n\\tat com.google.net.rpc3.impl.RpcStreamInternalContext.invokeCallbacksInternalUnlocked(RpcStreamInternalContext.java:2756)\\n\\tat com.google.net.rpc3.impl.RpcStreamInternalContext.invokeCallbacksUnlocked(RpcStreamInternalContext.java:2680)\\n\\tat com.google.net.eventmanager.AbstractFutureTask$Sync.innerRun(AbstractFutureTask.java:259)\\n\\tat com.google.net.eventmanager.AbstractFutureTask.run(AbstractFutureTask.java:120)\\n\\tat com.google.net.eventmanager.EventManagerImpl.runTaskTraced(EventManagerImpl.java:901)\\n\\tat com.google.net.eventmanager.EventManagerImpl.runTask(EventManagerImpl.java:893)\\n\\tat com.google.net.eventmanager.EventManagerImpl.internalRunWorkerLoop(EventManagerImpl.java:1320)\\n\\tat com.google.net.eventmanager.EventManagerImpl.runWorkerLoop(EventManagerImpl.java:1211)\\n\\tat com.google.net.eventmanager.WorkerThreadInfo.runWorkerLoop(WorkerThreadInfo.java:153)\\n\\tat com.google.net.eventmanager.EventManagerImpl$WorkerThread.run(EventManagerImpl.java:2000)\\n\",\n      \"message\": \"Query error: Result of ORDER BY queries cannot be clustered. at [2:1]\"\n    },\n    \"state\": \"DONE\"\n  },\n  \"principal_subject\": \"user:pschnayder@google.com\",\n  \"jobCreationReason\": {\n    \"code\": \"REQUESTED\"\n  }\n}\n"
  },
  {
    "path": "test-data/bigquery1/json-dumps/iam-policy.json",
    "content": "{\n  \"bindings\": [\n    {\n      \"members\": [\n        \"user:testuser@example.com\"\n      ],\n      \"role\": \"roles/owner\"\n    }\n  ],\n  \"etag\": \"BwXXim1ZMUM=\",\n  \"version\": 1\n}\n"
  },
  {
    "path": "test-data/bigquery1/json-dumps/job_get_invalid-region_id.json",
    "content": "{\n  \"id\": \"gcpdiag-bigquery1-aaaa:invalid-region.any_id\",\n  \"status\": { \"state\": \"DONE\", \"errorResult\": { \"reason\": \"invalid\", \"message\": \"Invalid value for location: invalid-region is not a valid value\" } },\n  \"jobReference\": { \"projectId\": \"gcpdiag-bigquery1-aaaa\", \"jobId\": \"any_id\", \"location\": \"invalid-region\" }\n}\n"
  },
  {
    "path": "test-data/bigquery1/json-dumps/job_get_us_IS.json",
    "content": "{\n  \"kind\": \"bigquery#job\",\n  \"etag\": \"lBg4aOpx3Gc1+nHTj6N6Ug==\",\n  \"id\": \"gcpdiag-bigquery1-aaaa:US.information_schema_job1\",\n  \"selfLink\": \"https://content-bigquery.googleapis.com/bigquery/v2/projects/gcpdiag-bigquery1-aaaa/jobs/information_schema_job1?location=US\",\n  \"user_email\": \"test@example.com\",\n  \"configuration\": {\n    \"query\": {\n      \"query\": \"    SELECT\\n        job_id,\\n        user_email,\\n        CAST(start_time AS STRING) as start_time_str,\\n        CAST(end_time AS STRING) as end_time_str,\\n        query\\n      FROM\\n        `gcpdiag-bigquery1-aaaa`.`region-US`.INFORMATION_SCHEMA.JOBS\\n      ORDER BY\\n  creation_time DESC\\nLIMIT 3;\\n\",\n      \"destinationTable\": {\n        \"projectId\": \"gcpdiag-bigquery1-aaaa\",\n        \"datasetId\": \"_11c155205196a0e73322cbd54ea20431b103d392\",\n        \"tableId\": \"anone4907f0f_68b8_4fd1_9ab7_8a634b72e336\"\n      },\n      \"writeDisposition\": \"WRITE_TRUNCATE\",\n      \"priority\": \"INTERACTIVE\",\n      \"useLegacySql\": false,\n      \"systemVariables\": {\n        \"types\": {\n          \"time_zone\": {\n            \"typeKind\": \"STRING\"\n          }\n        },\n        \"values\": {\n          \"time_zone\": \"America/Los_Angeles\"\n        }\n      }\n    },\n    \"jobType\": \"QUERY\"\n  },\n  \"jobReference\": {\n    \"projectId\": \"gcpdiag-bigquery1-aaaa\",\n    \"jobId\": \"information_schema_job1\",\n    \"location\": \"US\"\n  },\n  \"statistics\": {\n    \"creationTime\": \"1744544630658\",\n    \"startTime\": \"1744544630778\",\n    \"endTime\": \"1744544709589\",\n    \"totalBytesProcessed\": \"23985834934\",\n    \"query\": {\n      \"queryPlan\": [\n        {\n          \"name\": \"S00: Input\",\n          \"id\": \"0\",\n          \"startMs\": \"1744544650808\",\n          \"endMs\": \"1744544699676\",\n          \"waitRatioAvg\": 0.753929010841052,\n          \"waitMsAvg\": \"32477\",\n          \"waitRatioMax\": 1,\n          \"waitMsMax\": \"43077\",\n          \"readRatioAvg\": 0.0078696288042342782,\n          \"readMsAvg\": \"339\",\n          \"readRatioMax\": 0.19353715439793859,\n          \"readMsMax\": \"8337\",\n          \"computeRatioAvg\": 0.00083571279337001179,\n          \"computeMsAvg\": \"36\",\n          \"computeRatioMax\": 0.12681941639389929,\n          \"computeMsMax\": \"5463\",\n          \"writeRatioAvg\": 6.9642732780834325e-05,\n          \"writeMsAvg\": \"3\",\n          \"writeRatioMax\": 0.08649627411379622,\n          \"writeMsMax\": \"3726\",\n          \"shuffleOutputBytes\": \"1069596\",\n          \"shuffleOutputBytesSpilled\": \"0\",\n          \"recordsRead\": \"3106\",\n          \"recordsWritten\": \"2681\",\n          \"parallelInputs\": \"2345811\",\n          \"completedParallelInputs\": \"2345811\",\n          \"status\": \"COMPLETE\",\n          \"steps\": [\n            {\n              \"kind\": \"READ\",\n              \"substeps\": [\n                \"$10:creation_time, $11:change_timestamp, $12:organization_number, $13:project_id, $14:user_email, $15:job_id, $16:job.$is_not_null, $17:job.statistics.start_time, $18:job.statistics.end_time, $19:job.configuration.query.query\",\n                \"FROM gcpdiag-bigquery1-aaaa.region-US.INFORMATION_SCHEMA.JOBS\",\n                \"WHERE equal($13, 'gcpdiag-bigquery1-aaaa')\"\n              ]\n            },\n            {\n              \"kind\": \"AGGREGATE\",\n              \"substeps\": [\n                \"GROUP BY $60 := $10, $61 := $12, $62 := $13, $63 := $15\",\n                \"$40 := ANY_VALUE($14)\",\n                \"$41 := SHARD_ARRAY_AGG($16 ORDER BY $50 ASC, $11 DESC LIMIT 1)\",\n                \"$42 := SHARD_ARRAY_AGG($17 ORDER BY $50 ASC, $11 DESC LIMIT 1)\",\n                \"$43 := SHARD_ARRAY_AGG($18 ORDER BY $50 ASC, $11 DESC LIMIT 1)\",\n                \"$44 := SHARD_ARRAY_AGG($19 ORDER BY $50 ASC, $11 DESC LIMIT 1)\"\n              ]\n            },\n            {\n              \"kind\": \"COMPUTE\",\n              \"substeps\": [\n                \"$50 := is_null($16)\"\n              ]\n            },\n            {\n              \"kind\": \"WRITE\",\n              \"substeps\": [\n                \"$60, $61, $62, $63, $40, $41, $42, $43, $44\",\n                \"TO __stage00_output\",\n                \"BY HASH($60, $61, $62, $63)\"\n              ]\n            }\n          ],\n          \"slotMs\": \"93254539\",\n          \"computeMode\": \"BIGQUERY\"\n        },\n        {\n          \"name\": \"S01: Input\",\n          \"id\": \"1\",\n          \"startMs\": \"1744544699698\",\n          \"endMs\": \"1744544700040\",\n          \"waitRatioAvg\": 2.3214244260278106e-05,\n          \"waitMsAvg\": \"1\",\n          \"waitRatioMax\": 2.3214244260278106e-05,\n          \"waitMsMax\": \"1\",\n          \"readRatioAvg\": 0.00773034333867261,\n          \"readMsAvg\": \"333\",\n          \"readRatioMax\": 0.00773034333867261,\n          \"readMsMax\": \"333\",\n          \"computeRatioAvg\": 0.00020892819834250295,\n          \"computeMsAvg\": \"9\",\n          \"computeRatioMax\": 0.00020892819834250295,\n          \"computeMsMax\": \"9\",\n          \"writeRatioAvg\": 4.6428488520556212e-05,\n          \"writeMsAvg\": \"2\",\n          \"writeRatioMax\": 4.6428488520556212e-05,\n          \"writeMsMax\": \"2\",\n          \"shuffleOutputBytes\": \"0\",\n          \"shuffleOutputBytesSpilled\": \"0\",\n          \"recordsRead\": \"0\",\n          \"recordsWritten\": \"0\",\n          \"parallelInputs\": \"8\",\n          \"completedParallelInputs\": \"8\",\n          \"status\": \"COMPLETE\",\n          \"steps\": [\n            {\n              \"kind\": \"READ\",\n              \"substeps\": [\n                \"$1:creation_time, $2:job_id, $3:project_id, $4:deletion_time, $5:replacement_job_id\",\n                \"FROM gcpdiag-bigquery1-aaaa.region-US.INFORMATION_SCHEMA.JOBS\",\n                \"WHERE equal($3, 'gcpdiag-bigquery1-aaaa')\"\n              ]\n            },\n            {\n              \"kind\": \"WRITE\",\n              \"substeps\": [\n                \"$1, $2, $3, $4, $5\",\n                \"TO __stage01_output\"\n              ]\n            }\n          ],\n          \"slotMs\": \"739\",\n          \"computeMode\": \"BIGQUERY\"\n        },\n        {\n          \"name\": \"S02: Join+\",\n          \"id\": \"2\",\n          \"startMs\": \"1744544700113\",\n          \"endMs\": \"1744544700390\",\n          \"inputStages\": [\n            \"0\",\n            \"1\"\n          ],\n          \"waitRatioAvg\": 0.0041785639668500589,\n          \"waitMsAvg\": \"180\",\n          \"waitRatioMax\": 0.0057571325765489708,\n          \"waitMsMax\": \"248\",\n          \"readRatioAvg\": 0,\n          \"readMsAvg\": \"0\",\n          \"readRatioMax\": 0,\n          \"readMsMax\": \"0\",\n          \"computeRatioAvg\": 0.0015785686096989112,\n          \"computeMsAvg\": \"68\",\n          \"computeRatioMax\": 0.0023214244260278106,\n          \"computeMsMax\": \"100\",\n          \"writeRatioAvg\": 2.3214244260278106e-05,\n          \"writeMsAvg\": \"1\",\n          \"writeRatioMax\": 0.00013928546556166865,\n          \"writeMsMax\": \"6\",\n          \"shuffleOutputBytes\": \"656695\",\n          \"shuffleOutputBytesSpilled\": \"0\",\n          \"recordsRead\": \"2681\",\n          \"recordsWritten\": \"2169\",\n          \"parallelInputs\": \"1000\",\n          \"completedParallelInputs\": \"1000\",\n          \"status\": \"COMPLETE\",\n          \"steps\": [\n            {\n              \"kind\": \"READ\",\n              \"substeps\": [\n                \"$60, $61, $62, $63, $40, $41, $42, $43, $44\",\n                \"FROM __stage00_output\"\n              ]\n            },\n            {\n              \"kind\": \"READ\",\n              \"substeps\": [\n                \"$1, $2, $3, $4, $5\",\n                \"FROM __stage01_output\"\n              ]\n            },\n            {\n              \"kind\": \"COMPUTE\",\n              \"substeps\": [\n                \"$20 := CAST(timestamp_millis(array_at_offset($95, 0)) AS STRING)\",\n                \"$21 := CAST(timestamp_millis(array_at_offset($96, 0)) AS STRING)\",\n                \"$22 := if(not(is_null($90)), NULL, if(starts_with($94, 'principal://'), '', $94))\",\n                \"$23 := if(is_null($90), $93, $91)\",\n                \"$24 := if(is_null($90), array_at_offset($97, 0), NULL)\"\n              ]\n            },\n            {\n              \"kind\": \"SORT\",\n              \"substeps\": [\n                \"$80 DESC\",\n                \"LIMIT 3\"\n              ]\n            },\n            {\n              \"kind\": \"JOIN\",\n              \"substeps\": [\n                \"$80 := $70, $81 := $73, $82 := $30, $83 := $32, $84 := $33, $85 := $34, $86 := $4, $87 := $5\",\n                \"LEFT OUTER HASH JOIN EACH  WITH ALL  ON $70 = $1, $73 = $2, $72 = $3\"\n              ]\n            },\n            {\n              \"kind\": \"FILTER\",\n              \"substeps\": [\n                \"not(is_null(array_at_offset($31, 0)))\"\n              ]\n            },\n            {\n              \"kind\": \"AGGREGATE\",\n              \"substeps\": [\n                \"GROUP BY $70 := $60, $71 := $61, $72 := $62, $73 := $63\",\n                \"$30 := ANY_VALUE($40)\",\n                \"$31 := ROOT_ARRAY_AGG($41 ORDER BY  ASC,  DESC LIMIT 1)\",\n                \"$32 := ROOT_ARRAY_AGG($42 ORDER BY  ASC,  DESC LIMIT 1)\",\n                \"$33 := ROOT_ARRAY_AGG($43 ORDER BY  ASC,  DESC LIMIT 1)\",\n                \"$34 := ROOT_ARRAY_AGG($44 ORDER BY  ASC,  DESC LIMIT 1)\"\n              ]\n            },\n            {\n              \"kind\": \"WRITE\",\n              \"substeps\": [\n                \"$92, $20, $21, $22, $23, $24\",\n                \"TO __stage02_output\"\n              ]\n            }\n          ],\n          \"slotMs\": \"125882\",\n          \"computeMode\": \"BIGQUERY\"\n        },\n        {\n          \"name\": \"S03: Output\",\n          \"id\": \"3\",\n          \"startMs\": \"1744544700292\",\n          \"endMs\": \"1744544700397\",\n          \"inputStages\": [\n            \"2\"\n          ],\n          \"waitRatioAvg\": 0.005710704088028414,\n          \"waitMsAvg\": \"246\",\n          \"waitRatioMax\": 0.005710704088028414,\n          \"waitMsMax\": \"246\",\n          \"readRatioAvg\": 0,\n          \"readMsAvg\": \"0\",\n          \"readRatioMax\": 0,\n          \"readMsMax\": \"0\",\n          \"computeRatioAvg\": 0.00039464215242472779,\n          \"computeMsAvg\": \"17\",\n          \"computeRatioMax\": 0.00039464215242472779,\n          \"computeMsMax\": \"17\",\n          \"writeRatioAvg\": 0.00016249970982194675,\n          \"writeMsAvg\": \"7\",\n          \"writeRatioMax\": 0.00016249970982194675,\n          \"writeMsMax\": \"7\",\n          \"shuffleOutputBytes\": \"1236\",\n          \"shuffleOutputBytesSpilled\": \"0\",\n          \"recordsRead\": \"2169\",\n          \"recordsWritten\": \"3\",\n          \"parallelInputs\": \"1\",\n          \"completedParallelInputs\": \"1\",\n          \"status\": \"COMPLETE\",\n          \"steps\": [\n            {\n              \"kind\": \"READ\",\n              \"substeps\": [\n                \"$92, $20, $21, $22, $23, $24\",\n                \"FROM __stage02_output\"\n              ]\n            },\n            {\n              \"kind\": \"SORT\",\n              \"substeps\": [\n                \"$92 DESC\",\n                \"LIMIT 3\"\n              ]\n            },\n            {\n              \"kind\": \"WRITE\",\n              \"substeps\": [\n                \"$100, $101, $102, $103, $104\",\n                \"TO __stage03_output\"\n              ]\n            }\n          ],\n          \"slotMs\": \"107\",\n          \"computeMode\": \"BIGQUERY\"\n        }\n      ],\n      \"estimatedBytesProcessed\": \"590823461618180\",\n      \"timeline\": [\n        {\n          \"elapsedMs\": \"20222\",\n          \"totalSlotMs\": \"500586\",\n          \"pendingUnits\": \"2345811\",\n          \"completedUnits\": \"0\",\n          \"activeUnits\": \"13\",\n          \"estimatedRunnableUnits\": \"0\"\n        },\n        {\n          \"elapsedMs\": \"21222\",\n          \"totalSlotMs\": \"1105525\",\n          \"pendingUnits\": \"2345810\",\n          \"completedUnits\": \"1\",\n          \"activeUnits\": \"81\",\n          \"estimatedRunnableUnits\": \"0\"\n        },\n        {\n          \"elapsedMs\": \"22222\",\n          \"totalSlotMs\": \"1609604\",\n          \"pendingUnits\": \"2345806\",\n          \"completedUnits\": \"5\",\n          \"activeUnits\": \"1373\",\n          \"estimatedRunnableUnits\": \"0\"\n        },\n        {\n          \"elapsedMs\": \"37222\",\n          \"totalSlotMs\": \"11300509\",\n          \"pendingUnits\": \"2345806\",\n          \"completedUnits\": \"5\",\n          \"activeUnits\": \"1373\",\n          \"estimatedRunnableUnits\": \"0\"\n        },\n        {\n          \"elapsedMs\": \"38222\",\n          \"totalSlotMs\": \"12895419\",\n          \"pendingUnits\": \"2344982\",\n          \"completedUnits\": \"829\",\n          \"activeUnits\": \"1547\",\n          \"estimatedRunnableUnits\": \"763\"\n        },\n        {\n          \"elapsedMs\": \"39222\",\n          \"totalSlotMs\": \"14895419\",\n          \"pendingUnits\": \"2344980\",\n          \"completedUnits\": \"831\",\n          \"activeUnits\": \"2447\",\n          \"estimatedRunnableUnits\": \"274\"\n        },\n        {\n          \"elapsedMs\": \"41222\",\n          \"totalSlotMs\": \"18895419\",\n          \"pendingUnits\": \"2343866\",\n          \"completedUnits\": \"1945\",\n          \"activeUnits\": \"2335\",\n          \"estimatedRunnableUnits\": \"338\"\n        },\n        {\n          \"elapsedMs\": \"42222\",\n          \"totalSlotMs\": \"20895419\",\n          \"pendingUnits\": \"2343528\",\n          \"completedUnits\": \"2283\",\n          \"activeUnits\": \"2335\",\n          \"estimatedRunnableUnits\": \"338\"\n        },\n        {\n          \"elapsedMs\": \"43222\",\n          \"totalSlotMs\": \"22895419\",\n          \"pendingUnits\": \"2343489\",\n          \"completedUnits\": \"2322\",\n          \"activeUnits\": \"3261\",\n          \"estimatedRunnableUnits\": \"0\"\n        },\n        {\n          \"elapsedMs\": \"45222\",\n          \"totalSlotMs\": \"26895419\",\n          \"pendingUnits\": \"2342545\",\n          \"completedUnits\": \"3266\",\n          \"activeUnits\": \"3918\",\n          \"estimatedRunnableUnits\": \"0\"\n        },\n        {\n          \"elapsedMs\": \"47222\",\n          \"totalSlotMs\": \"30895419\",\n          \"pendingUnits\": \"2342545\",\n          \"completedUnits\": \"3266\",\n          \"activeUnits\": \"3918\",\n          \"estimatedRunnableUnits\": \"0\"\n        },\n        {\n          \"elapsedMs\": \"48222\",\n          \"totalSlotMs\": \"32895419\",\n          \"pendingUnits\": \"2341207\",\n          \"completedUnits\": \"4604\",\n          \"activeUnits\": \"4472\",\n          \"estimatedRunnableUnits\": \"136\"\n        },\n        {\n          \"elapsedMs\": \"51222\",\n          \"totalSlotMs\": \"38895419\",\n          \"pendingUnits\": \"2339285\",\n          \"completedUnits\": \"6526\",\n          \"activeUnits\": \"3699\",\n          \"estimatedRunnableUnits\": \"211\"\n        },\n        {\n          \"elapsedMs\": \"52222\",\n          \"totalSlotMs\": \"40895419\",\n          \"pendingUnits\": \"2337737\",\n          \"completedUnits\": \"8074\",\n          \"activeUnits\": \"2938\",\n          \"estimatedRunnableUnits\": \"0\"\n        },\n        {\n          \"elapsedMs\": \"54222\",\n          \"totalSlotMs\": \"44895419\",\n          \"pendingUnits\": \"2337496\",\n          \"completedUnits\": \"8315\",\n          \"activeUnits\": \"3151\",\n          \"estimatedRunnableUnits\": \"826\"\n        },\n        {\n          \"elapsedMs\": \"55222\",\n          \"totalSlotMs\": \"46895419\",\n          \"pendingUnits\": \"2336264\",\n          \"completedUnits\": \"9547\",\n          \"activeUnits\": \"2493\",\n          \"estimatedRunnableUnits\": \"826\"\n        },\n        {\n          \"elapsedMs\": \"56222\",\n          \"totalSlotMs\": \"48895419\",\n          \"pendingUnits\": \"2335237\",\n          \"completedUnits\": \"10574\",\n          \"activeUnits\": \"2044\",\n          \"estimatedRunnableUnits\": \"329\"\n        },\n        {\n          \"elapsedMs\": \"57222\",\n          \"totalSlotMs\": \"50895419\",\n          \"pendingUnits\": \"2334351\",\n          \"completedUnits\": \"11460\",\n          \"activeUnits\": \"2156\",\n          \"estimatedRunnableUnits\": \"466\"\n        },\n        {\n          \"elapsedMs\": \"58222\",\n          \"totalSlotMs\": \"52895419\",\n          \"pendingUnits\": \"2334332\",\n          \"completedUnits\": \"11479\",\n          \"activeUnits\": \"2156\",\n          \"estimatedRunnableUnits\": \"466\"\n        },\n        {\n          \"elapsedMs\": \"59222\",\n          \"totalSlotMs\": \"54895419\",\n          \"pendingUnits\": \"2333780\",\n          \"completedUnits\": \"12031\",\n          \"activeUnits\": \"2605\",\n          \"estimatedRunnableUnits\": \"398\"\n        },\n        {\n          \"elapsedMs\": \"60222\",\n          \"totalSlotMs\": \"56895419\",\n          \"pendingUnits\": \"2333357\",\n          \"completedUnits\": \"12454\",\n          \"activeUnits\": \"2764\",\n          \"estimatedRunnableUnits\": \"110\"\n        },\n        {\n          \"elapsedMs\": \"61222\",\n          \"totalSlotMs\": \"58895419\",\n          \"pendingUnits\": \"2333099\",\n          \"completedUnits\": \"12712\",\n          \"activeUnits\": \"2993\",\n          \"estimatedRunnableUnits\": \"49\"\n        },\n        {\n          \"elapsedMs\": \"62222\",\n          \"totalSlotMs\": \"60895419\",\n          \"pendingUnits\": \"2330543\",\n          \"completedUnits\": \"15268\",\n          \"activeUnits\": \"2372\",\n          \"estimatedRunnableUnits\": \"49\"\n        },\n        {\n          \"elapsedMs\": \"63222\",\n          \"totalSlotMs\": \"62895419\",\n          \"pendingUnits\": \"1769\",\n          \"completedUnits\": \"2344042\",\n          \"activeUnits\": \"2482\",\n          \"estimatedRunnableUnits\": \"990\"\n        },\n        {\n          \"elapsedMs\": \"64222\",\n          \"totalSlotMs\": \"64895419\",\n          \"pendingUnits\": \"14\",\n          \"completedUnits\": \"2345797\",\n          \"activeUnits\": \"2362\",\n          \"estimatedRunnableUnits\": \"998\"\n        },\n        {\n          \"elapsedMs\": \"65222\",\n          \"totalSlotMs\": \"66895419\",\n          \"pendingUnits\": \"10\",\n          \"completedUnits\": \"2345801\",\n          \"activeUnits\": \"2141\",\n          \"estimatedRunnableUnits\": \"0\"\n        },\n        {\n          \"elapsedMs\": \"66222\",\n          \"totalSlotMs\": \"68895419\",\n          \"pendingUnits\": \"9\",\n          \"completedUnits\": \"2345802\",\n          \"activeUnits\": \"1936\",\n          \"estimatedRunnableUnits\": \"0\"\n        },\n        {\n          \"elapsedMs\": \"67222\",\n          \"totalSlotMs\": \"70895419\",\n          \"pendingUnits\": \"3\",\n          \"completedUnits\": \"2345808\",\n          \"activeUnits\": \"1641\",\n          \"estimatedRunnableUnits\": \"0\"\n        },\n        {\n          \"elapsedMs\": \"68222\",\n          \"totalSlotMs\": \"72895419\",\n          \"pendingUnits\": \"2\",\n          \"completedUnits\": \"2345809\",\n          \"activeUnits\": \"1490\",\n          \"estimatedRunnableUnits\": \"0\"\n        },\n        {\n          \"elapsedMs\": \"69222\",\n          \"totalSlotMs\": \"74895419\",\n          \"pendingUnits\": \"1\",\n          \"completedUnits\": \"2345818\",\n          \"activeUnits\": \"1\",\n          \"estimatedRunnableUnits\": \"115\"\n        },\n        {\n          \"elapsedMs\": \"70222\",\n          \"totalSlotMs\": \"76895419\",\n          \"pendingUnits\": \"0\",\n          \"completedUnits\": \"2346820\",\n          \"activeUnits\": \"0\",\n          \"estimatedRunnableUnits\": \"0\"\n        },\n        {\n          \"elapsedMs\": \"71222\",\n          \"totalSlotMs\": \"78895419\",\n          \"pendingUnits\": \"0\",\n          \"completedUnits\": \"2346820\",\n          \"activeUnits\": \"0\",\n          \"estimatedRunnableUnits\": \"0\"\n        },\n        {\n          \"elapsedMs\": \"72222\",\n          \"totalSlotMs\": \"80895419\",\n          \"pendingUnits\": \"0\",\n          \"completedUnits\": \"2346820\",\n          \"activeUnits\": \"0\",\n          \"estimatedRunnableUnits\": \"0\"\n        },\n        {\n          \"elapsedMs\": \"73222\",\n          \"totalSlotMs\": \"82895419\",\n          \"pendingUnits\": \"0\",\n          \"completedUnits\": \"2346820\",\n          \"activeUnits\": \"0\",\n          \"estimatedRunnableUnits\": \"0\"\n        },\n        {\n          \"elapsedMs\": \"74222\",\n          \"totalSlotMs\": \"84895419\",\n          \"pendingUnits\": \"0\",\n          \"completedUnits\": \"2346820\",\n          \"activeUnits\": \"0\",\n          \"estimatedRunnableUnits\": \"0\"\n        },\n        {\n          \"elapsedMs\": \"75222\",\n          \"totalSlotMs\": \"86895419\",\n          \"pendingUnits\": \"0\",\n          \"completedUnits\": \"2346820\",\n          \"activeUnits\": \"0\",\n          \"estimatedRunnableUnits\": \"0\"\n        },\n        {\n          \"elapsedMs\": \"76222\",\n          \"totalSlotMs\": \"88895419\",\n          \"pendingUnits\": \"0\",\n          \"completedUnits\": \"2346820\",\n          \"activeUnits\": \"0\",\n          \"estimatedRunnableUnits\": \"0\"\n        },\n        {\n          \"elapsedMs\": \"77222\",\n          \"totalSlotMs\": \"90895419\",\n          \"pendingUnits\": \"0\",\n          \"completedUnits\": \"2346820\",\n          \"activeUnits\": \"0\",\n          \"estimatedRunnableUnits\": \"0\"\n        },\n        {\n          \"elapsedMs\": \"78473\",\n          \"totalSlotMs\": \"93381269\",\n          \"pendingUnits\": \"0\",\n          \"completedUnits\": \"2346820\",\n          \"activeUnits\": \"0\",\n          \"estimatedRunnableUnits\": \"0\"\n        }\n      ],\n      \"totalPartitionsProcessed\": \"192\",\n      \"totalBytesProcessed\": \"23985834934\",\n      \"totalBytesBilled\": \"23986176000\",\n      \"billingTier\": 1,\n      \"totalSlotMs\": \"93381269\",\n      \"cacheHit\": false,\n      \"referencedTables\": [\n        {\n          \"projectId\": \"gcpdiag-bigquery1-aaaa\",\n          \"datasetId\": \"region-US\",\n          \"tableId\": \"INFORMATION_SCHEMA.JOBS\"\n        }\n      ],\n      \"statementType\": \"SELECT\",\n      \"searchStatistics\": {\n        \"indexUsageMode\": \"UNUSED\",\n        \"indexUnusedReasons\": [\n          {\n            \"code\": \"OTHER_REASON\",\n            \"message\": \"Search indexes cannot be used in the search query.\"\n          }\n        ]\n      },\n      \"performanceInsights\": {\n        \"stagePerformanceStandaloneInsights\": [\n          {\n            \"slotContention\": true,\n            \"insufficientShuffleQuota\": false\n          }\n        ]\n      },\n      \"transferredBytes\": \"0\",\n      \"metadataCacheStatistics\": {\n        \"tableMetadataCacheUsage\": [\n          {\n            \"tableReference\": {\n              \"projectId\": \"gcpdiag-bigquery1-aaaa\",\n              \"datasetId\": \"region-US\",\n              \"tableId\": \"INFORMATION_SCHEMA.JOBS_DELETE\"\n            },\n            \"unusedReason\": \"OTHER_REASON\",\n            \"explanation\": \"Table does not have CMETA.\"\n          },\n          {\n            \"tableReference\": {\n              \"projectId\": \"gcpdiag-bigquery1-aaaa\",\n              \"datasetId\": \"region-US\",\n              \"tableId\": \"INFORMATION_SCHEMA.JOBS\"\n            },\n            \"unusedReason\": \"OTHER_REASON\",\n            \"explanation\": \"Table does not have CMETA.\"\n          }\n        ]\n      }\n    },\n    \"totalSlotMs\": \"93381269\",\n    \"finalExecutionDurationMs\": \"58493\"\n  },\n  \"status\": {\n    \"state\": \"DONE\"\n  },\n  \"principal_subject\": \"user:test@example.com\",\n  \"jobCreationReason\": {\n    \"code\": \"REQUESTED\"\n  }\n}\n"
  },
  {
    "path": "test-data/bigquery1/json-dumps/job_get_us_csv.json",
    "content": "{\n  \"id\": \"gcpdiag-bigquery1-aaaa:us.test_csv_error\",\n  \"status\": { \"state\": \"DONE\", \"errorResult\": { \"reason\": \"invalid\", \"message\": \"CSV processing encountered too many errors.\" } },\n  \"jobReference\": { \"projectId\": \"gcpdiag-bigquery1-aaaa\", \"jobId\": \"test_csv_error\", \"location\": \"us\" }\n}\n"
  },
  {
    "path": "test-data/bigquery1/json-dumps/job_get_us_duplicate.json",
    "content": "{\n  \"id\": \"gcpdiag-bigquery1-aaaa:us.test_duplicate\",\n  \"status\": {\n    \"state\": \"DONE\",\n    \"errorResult\": {\n      \"message\": \"some_error\"\n    },\n    \"errors\": [{\"message\": \"some_error\"}]\n  },\n  \"jobReference\": {\n    \"projectId\": \"gcpdiag-bigquery1-aaaa\",\n    \"jobId\": \"test_duplicate\",\n    \"location\": \"us\"\n  }\n}\n"
  },
  {
    "path": "test-data/bigquery1/json-dumps/job_get_us_error.json",
    "content": "{\n  \"id\": \"gcpdiag-bigquery1-aaaa:us.test_csv_error\",\n  \"status\": {\n    \"state\": \"DONE\",\n    \"errorResult\": {\n      \"message\": \"Not found: table gcpdiag-bigquery1-aaaa:dataset.table\"\n    },\n    \"errors\": []\n  },\n  \"jobReference\": {\n    \"projectId\": \"gcpdiag-bigquery1-aaaa\",\n    \"jobId\": \"test_csv_error\",\n    \"location\": \"us\"\n  }\n}\n"
  },
  {
    "path": "test-data/bigquery1/json-dumps/job_get_us_errors.json",
    "content": "{\n  \"id\": \"gcpdiag-bigquery1-aaaa:us.test_job_errors\",\n  \"status\": {\n    \"state\": \"DONE\",\n    \"errorResult\": {\n      \"message\": \"some error\"\n    },\n    \"errors\": [{\"message\": \"Not found: table gcpdiag-bigquery1-aaaa:dataset.table\"}]\n  },\n  \"jobReference\": {\n    \"projectId\": \"gcpdiag-bigquery1-aaaa\",\n    \"jobId\": \"test_job_errors\",\n    \"location\": \"us\"\n  }\n}\n"
  },
  {
    "path": "test-data/bigquery1/json-dumps/job_get_us_job.json",
    "content": "{\n  \"id\": \"gcpdiag-bigquery1-aaaa:us.test_no_error_message_in_job\",\n  \"status\": {\n    \"state\": \"DONE\",\n    \"errorResult\": {\n      \"message\": null\n    },\n    \"errors\": []\n  },\n  \"jobReference\": {\n    \"projectId\": \"gcpdiag-bigquery1-aaaa\",\n    \"jobId\": \"test_no_error_message_in_job\",\n    \"location\": \"us\"\n  }\n}\n"
  },
  {
    "path": "test-data/bigquery1/json-dumps/job_get_us_job1.json",
    "content": "{\n  \"kind\": \"bigquery#job\",\n  \"etag\": \"N0ge4qTBNooQUmVCoxGG8g==\",\n  \"id\": \"gcpdiag-bigquery1-aaaa:US.job1\",\n  \"selfLink\": \"https://content-bigquery.googleapis.com/bigquery/v2/projects/gcpdiag-bigquery1-aaaa/jobs/job1?location=US\",\n  \"user_email\": \"test@example.com\",\n  \"configuration\": {\n    \"query\": {\n      \"query\": \"-- Find the top 100 names from the year 2017.\\nCREATE TEMP TABLE top_names_1(name STRING) CLUSTER BY name\\nAS\\n SELECT name\\n FROM `bigquery-public-data`.usa_names.usa_1910_current\\n WHERE year = 2017\\n ORDER BY number DESC LIMIT 100\\n;\\n-- Which names appear as words in Shakespeare's plays?\\nSELECT\\n name AS shakespeare_name\\nFROM top_names_1\\nWHERE name IN (\\n SELECT word\\n FROM `bigquery-public-data`.samples.shakespeare\\n);\",\n      \"priority\": \"INTERACTIVE\",\n      \"useLegacySql\": false\n    },\n    \"jobType\": \"QUERY\"\n  },\n  \"jobReference\": {\n    \"projectId\": \"gcpdiag-bigquery1-aaaa\",\n    \"jobId\": \"job1\",\n    \"location\": \"US\"\n  },\n  \"statistics\": {\n    \"creationTime\": \"1725461382806\",\n    \"startTime\": \"1725461382902\",\n    \"endTime\": \"1725461383642\",\n    \"totalBytesProcessed\": \"0\",\n    \"query\": {\n      \"totalBytesProcessed\": \"0\",\n      \"totalBytesBilled\": \"0\",\n      \"totalSlotMs\": \"0\",\n      \"statementType\": \"SCRIPT\"\n    },\n    \"totalSlotMs\": \"0\",\n    \"numChildJobs\": \"1\"\n  },\n  \"status\": {\n    \"errorResult\": {\n      \"reason\": \"invalidQuery\",\n      \"location\": \"query\",\n      \"debugInfo\": \"[INVALID_INPUT] message=QUERY_ERROR: [Result of ORDER BY queries cannot be clustered.] debug=code: \\t BAD_QUERY\\ndescription: \\\"Result of ORDER BY queries cannot be clustered.\\\"\\ncause: USER_ERROR\\naddress: \\\"http://ovpe12.prod.google.com:4901/task?handle=logs.344.serving.mixer.0.cloud-dataengine.3845348967303\\\"\\nstatus_proto {\\n  code: 3\\n  space: \\\"generic\\\"\\n  message: \\\"Result of ORDER BY queries cannot be clustered.\\\"\\n}\\nerror_details {\\n  argument_error {\\n    query_error {\\n    }\\n  }\\n  debug_info {\\n    error_message_template: \\\"Result of ORDER BY queries cannot be clustered.\\\"\\n    error_id: 2257563603\\n  }\\n}\\n errorProto=code: \\\"QUERY_ERROR\\\"\\nargument: \\\"Result of ORDER BY queries cannot be clustered.\\\"\\nlocation_type: OTHER\\nlocation: \\\"query\\\"\\n\\n\\tat com.google.cloud.helix.common.Exceptions.fromProto(Exceptions.java:2091)\\n\\tat com.google.cloud.helix.common.dremel.QueryExecutorImpl.mapDremelErrorsTohelixException(QueryExecutorImpl.java:1117)\\n\\tat com.google.cloud.helix.common.dremel.QueryExecutorImpl$ConfiguredQueryMigration$StreamHandler.onMessage(QueryExecutorImpl.java:714)\\n\\tat com.google.cloud.helix.common.dremel.QueryExecutorImpl$ConfiguredQueryMigration$StreamHandler.onMessage(QueryExecutorImpl.java:642)\\n\\tat com.google.net.rpc3.stream.RpcMessageCallback$Internal$Adapter.onMessage(RpcMessageCallback.java:96)\\n\\tat com.google.net.rpc3.impl.RpcStreamInternalContext.processMessageUnlocked(RpcStreamInternalContext.java:1747)\\n\\tat com.google.net.rpc3.impl.RpcStreamInternalContext.invokeCallbacksInternalUnlocked(RpcStreamInternalContext.java:2756)\\n\\tat com.google.net.rpc3.impl.RpcStreamInternalContext.invokeCallbacksUnlocked(RpcStreamInternalContext.java:2680)\\n\\tat com.google.net.eventmanager.AbstractFutureTask$Sync.innerRun(AbstractFutureTask.java:259)\\n\\tat com.google.net.eventmanager.AbstractFutureTask.run(AbstractFutureTask.java:120)\\n\\tat com.google.net.eventmanager.EventManagerImpl.runTaskTraced(EventManagerImpl.java:901)\\n\\tat com.google.net.eventmanager.EventManagerImpl.runTask(EventManagerImpl.java:893)\\n\\tat com.google.net.eventmanager.EventManagerImpl.internalRunWorkerLoop(EventManagerImpl.java:1320)\\n\\tat com.google.net.eventmanager.EventManagerImpl.runWorkerLoop(EventManagerImpl.java:1211)\\n\\tat com.google.net.eventmanager.WorkerThreadInfo.runWorkerLoop(WorkerThreadInfo.java:153)\\n\\tat com.google.net.eventmanager.EventManagerImpl$WorkerThread.run(EventManagerImpl.java:2000)\\n\",\n      \"message\": \"Query error: Result of ORDER BY queries cannot be clustered. at [2:1]\"\n    },\n    \"state\": \"DONE\"\n  },\n  \"principal_subject\": \"user:test@example.com\",\n  \"jobCreationReason\": {\n    \"code\": \"REQUESTED\"\n  }\n}\n"
  },
  {
    "path": "test-data/bigquery1/json-dumps/job_get_us_job2.json",
    "content": "{\n  \"kind\": \"bigquery#job\",\n  \"etag\": \"N0ge4qTBNooQUmVCoxGG8g==\",\n  \"id\": \"gcpdiag-bigquery1-aaaa:US.job2\",\n  \"selfLink\": \"https://content-bigquery.googleapis.com/bigquery/v2/projects/gcpdiag-bigquery1-aaaa/jobs/job1?location=US\",\n  \"user_email\": \"test@example.com\",\n  \"configuration\": {\n    \"query\": {\n      \"query\": \"-- Find the top 100 names from the year 2017.\\nCREATE TEMP TABLE top_names_1(name STRING) CLUSTER BY name\\nAS\\n SELECT name\\n FROM `bigquery-public-data`.usa_names.usa_1910_current\\n WHERE year = 2017\\n ORDER BY number DESC LIMIT 100\\n;\\n-- Which names appear as words in Shakespeare's plays?\\nSELECT\\n name AS shakespeare_name\\nFROM top_names_1\\nWHERE name IN (\\n SELECT word\\n FROM `bigquery-public-data`.samples.shakespeare\\n);\",\n      \"priority\": \"INTERACTIVE\",\n      \"useLegacySql\": false\n    },\n    \"jobType\": \"QUERY\"\n  },\n  \"jobReference\": {\n    \"projectId\": \"gcpdiag-bigquery1-aaaa\",\n    \"jobId\": \"job1\",\n    \"location\": \"US\"\n  },\n  \"statistics\": {\n    \"creationTime\": \"1725461382806\",\n    \"startTime\": \"1725461382902\",\n    \"endTime\": \"1725461383642\",\n    \"totalBytesProcessed\": \"0\",\n    \"query\": {\n      \"totalBytesProcessed\": \"0\",\n      \"totalBytesBilled\": \"0\",\n      \"totalSlotMs\": \"0\",\n      \"statementType\": \"SCRIPT\"\n    },\n    \"totalSlotMs\": \"0\",\n    \"numChildJobs\": \"1\"\n  },\n  \"status\": {\n    \"errorResult\": {\n      \"reason\": \"invalidQuery\",\n      \"location\": \"query\",\n      \"debugInfo\": \"[INVALID_INPUT] message=QUERY_ERROR: [Result of ORDER BY queries cannot be clustered.] debug=code: \\t BAD_QUERY\\ndescription: \\\"Result of ORDER BY queries cannot be clustered.\\\"\\ncause: USER_ERROR\\naddress: \\\"http://ovpe12.prod.google.com:4901/task?handle=logs.344.serving.mixer.0.cloud-dataengine.3845348967303\\\"\\nstatus_proto {\\n  code: 3\\n  space: \\\"generic\\\"\\n  message: \\\"Result of ORDER BY queries cannot be clustered.\\\"\\n}\\nerror_details {\\n  argument_error {\\n    query_error {\\n    }\\n  }\\n  debug_info {\\n    error_message_template: \\\"Result of ORDER BY queries cannot be clustered.\\\"\\n    error_id: 2257563603\\n  }\\n}\\n errorProto=code: \\\"QUERY_ERROR\\\"\\nargument: \\\"Result of ORDER BY queries cannot be clustered.\\\"\\nlocation_type: OTHER\\nlocation: \\\"query\\\"\\n\\n\\tat com.google.cloud.helix.common.Exceptions.fromProto(Exceptions.java:2091)\\n\\tat com.google.cloud.helix.common.dremel.QueryExecutorImpl.mapDremelErrorsTohelixException(QueryExecutorImpl.java:1117)\\n\\tat com.google.cloud.helix.common.dremel.QueryExecutorImpl$ConfiguredQueryMigration$StreamHandler.onMessage(QueryExecutorImpl.java:714)\\n\\tat com.google.cloud.helix.common.dremel.QueryExecutorImpl$ConfiguredQueryMigration$StreamHandler.onMessage(QueryExecutorImpl.java:642)\\n\\tat com.google.net.rpc3.stream.RpcMessageCallback$Internal$Adapter.onMessage(RpcMessageCallback.java:96)\\n\\tat com.google.net.rpc3.impl.RpcStreamInternalContext.processMessageUnlocked(RpcStreamInternalContext.java:1747)\\n\\tat com.google.net.rpc3.impl.RpcStreamInternalContext.invokeCallbacksInternalUnlocked(RpcStreamInternalContext.java:2756)\\n\\tat com.google.net.rpc3.impl.RpcStreamInternalContext.invokeCallbacksUnlocked(RpcStreamInternalContext.java:2680)\\n\\tat com.google.net.eventmanager.AbstractFutureTask$Sync.innerRun(AbstractFutureTask.java:259)\\n\\tat com.google.net.eventmanager.AbstractFutureTask.run(AbstractFutureTask.java:120)\\n\\tat com.google.net.eventmanager.EventManagerImpl.runTaskTraced(EventManagerImpl.java:901)\\n\\tat com.google.net.eventmanager.EventManagerImpl.runTask(EventManagerImpl.java:893)\\n\\tat com.google.net.eventmanager.EventManagerImpl.internalRunWorkerLoop(EventManagerImpl.java:1320)\\n\\tat com.google.net.eventmanager.EventManagerImpl.runWorkerLoop(EventManagerImpl.java:1211)\\n\\tat com.google.net.eventmanager.WorkerThreadInfo.runWorkerLoop(WorkerThreadInfo.java:153)\\n\\tat com.google.net.eventmanager.EventManagerImpl$WorkerThread.run(EventManagerImpl.java:2000)\\n\",\n      \"message\": \"Query error: Result of ORDER BY queries cannot be clustered. at [2:1]\"\n    },\n    \"state\": \"DONE\"\n  },\n  \"principal_subject\": \"user:test@example.com\",\n  \"jobCreationReason\": {\n    \"code\": \"REQUESTED\"\n  }\n}\n"
  },
  {
    "path": "test-data/bigquery1/json-dumps/job_get_us_notfound.json",
    "content": "{\n  \"id\": \"gcpdiag-bigquery1-aaaa:us.test_notfound\",\n  \"status\": { \"state\": \"DONE\", \"errorResult\": { \"reason\": \"notFound\", \"message\": \"Not found: Job gcpdiag-bigquery1-aaaa:us.test_notfound\" } },\n  \"jobReference\": { \"projectId\": \"gcpdiag-bigquery1-aaaa\", \"jobId\": \"test_notfound\", \"location\": \"us\" }\n}\n"
  },
  {
    "path": "test-data/bigquery1/json-dumps/job_get_us_running.json",
    "content": "{\n  \"id\": \"gcpdiag-bigquery1-aaaa:us.test_running\",\n  \"status\": { \"state\": \"RUNNING\" },\n  \"jobReference\": { \"projectId\": \"gcpdiag-bigquery1-aaaa\", \"jobId\": \"test_running\", \"location\": \"us\" }\n}\n"
  },
  {
    "path": "test-data/bigquery1/json-dumps/job_get_us_success.json",
    "content": "{\n  \"id\": \"gcpdiag-bigquery1-aaaa:us.test_success\",\n  \"status\": { \"state\": \"DONE\" },\n  \"jobReference\": { \"projectId\": \"gcpdiag-bigquery1-aaaa\", \"jobId\": \"test_success\", \"location\": \"us\" }\n}\n"
  },
  {
    "path": "test-data/bigquery1/json-dumps/job_get_us_unknown.json",
    "content": "{\n  \"id\": \"gcpdiag-bigquery1-aaaa:us.test_unknown\",\n  \"status\": { \"state\": \"DONE\", \"errorResult\": { \"reason\": \"internalError\", \"message\": \"An internal error occurred.\" } },\n  \"jobReference\": { \"projectId\": \"gcpdiag-bigquery1-aaaa\", \"jobId\": \"test_unknown\", \"location\": \"us\" }\n}\n"
  },
  {
    "path": "test-data/bigquery1/json-dumps/job_results_us_IS_.json",
    "content": "{\n  \"kind\": \"bigquery#getQueryResultsResponse\",\n  \"etag\": \"KnMpAXh+mTBFcY6apEUfRw==\",\n  \"schema\": {\n    \"fields\": [\n      {\n        \"name\": \"job_id\",\n        \"type\": \"STRING\",\n        \"mode\": \"NULLABLE\"\n      },\n      {\n        \"name\": \"user_email\",\n        \"type\": \"STRING\",\n        \"mode\": \"NULLABLE\"\n      },\n      {\n        \"name\": \"start_time_str\",\n        \"type\": \"STRING\",\n        \"mode\": \"NULLABLE\"\n      },\n      {\n        \"name\": \"end_time_str\",\n        \"type\": \"STRING\",\n        \"mode\": \"NULLABLE\"\n      },\n      {\n        \"name\": \"query\",\n        \"type\": \"STRING\",\n        \"mode\": \"NULLABLE\"\n      }\n    ]\n  },\n  \"jobReference\": {\n    \"projectId\": \"gcpdiag-bigquery1-aaaa\",\n    \"jobId\": \"bquxjob_3b44b580_1962ef6851c\",\n    \"location\": \"US\"\n  },\n  \"totalRows\": \"3\",\n  \"rows\": [\n    {\n      \"f\": [\n        {\n          \"v\": \"bquxjob_48eeafd0_1962ef45483\"\n        },\n        {\n          \"v\": \"test@example.com\"\n        },\n        {\n          \"v\": \"2025-04-13 04:41:27.340-07\"\n        },\n        {\n          \"v\": \"2025-04-13 04:41:55.221-07\"\n        },\n        {\n          \"v\": \"    SELECT\\n        job_id,\\n        user_email,\\n        CAST(start_time AS STRING) as start_time_str,\\n        CAST(end_time AS STRING) as end_time_str,\\n        query\\n      FROM\\n        `gcpdiag-bigquery1-aaaa`.`region-US`.INFORMATION_SCHEMA.JOBS\\n      WHERE CAST(start_time AS STRING) \\u003e \\\"2025-04-12\\\"\\n      ORDER BY end_time DESC\\n      LIMIT 2\"\n        }\n      ]\n    },\n    {\n      \"f\": [\n        {\n          \"v\": \"bquxjob_452cc6c1_1962ef0116e\"\n        },\n        {\n          \"v\": \"test@example.com\"\n        },\n        {\n          \"v\": \"2025-04-13 04:36:48.039-07\"\n        },\n        {\n          \"v\": \"2025-04-13 04:37:48.031-07\"\n        },\n        {\n          \"v\": \"    SELECT\\n        job_id,\\n        user_email,\\n        CAST(start_time AS STRING) as start_time_str,\\n        CAST(end_time AS STRING) as end_time_str,\\n        query\\n      FROM\\n        `gcpdiag-bigquery1-aaaa`.`region-US`.INFORMATION_SCHEMA.JOBS\\n      ORDER BY end_time DESC\\n      LIMIT 1\"\n        }\n      ]\n    },\n    {\n      \"f\": [\n        {\n          \"v\": \"bquxjob_3e454a13_1962eef9f2a\"\n        },\n        {\n          \"v\": \"test@example.com\"\n        },\n        {\n          \"v\": \"2025-04-13 04:36:18.806-07\"\n        },\n        {\n          \"v\": \"2025-04-13 04:36:18.806-07\"\n        },\n        {\n          \"v\": \"    SELECT\\n        job_id,\\n        user_email,\\n        CAST(start_time AS STRING) as start_time_str,\\n        CAST(end_time AS STRING) as end_time_str,\\n        query\\n      FROM\\n        `gcpdiag-bigquery1-aaaa`.US.INFORMATION_SCHEMA.JOBS\\n      ORDER BY end_time DESC\\n      LIMIT 1\"\n        }\n      ]\n    }\n  ],\n  \"totalBytesProcessed\": \"23985834934\",\n  \"jobComplete\": true,\n  \"cacheHit\": false\n}\n"
  },
  {
    "path": "test-data/bigquery1/json-dumps/job_results_us_mockresult1.json",
    "content": "{\n  \"kind\": \"bigquery#getQueryResultsResponse\",\n  \"etag\": \"\\\"some_etag_results\\\"\",\n  \"schema\": {\n    \"fields\": [\n      {\n        \"name\": \"col1\",\n        \"type\": \"STRING\",\n        \"mode\": \"NULLABLE\"\n      },\n      {\n        \"name\": \"col2\",\n        \"type\": \"INTEGER\",\n        \"mode\": \"NULLABLE\"\n      }\n    ]\n  },\n  \"jobReference\": {\n    \"projectId\": \"gcpdiag-bigquery1-aaaa\",\n    \"jobId\": \"gcpdiag_query_mockresult1\",\n    \"location\": \"us\"\n  },\n  \"totalRows\": \"2\",\n  \"rows\": [\n    {\n      \"f\": [\n        {\n          \"v\": \"value1\"\n        },\n        {\n          \"v\": \"100\"\n        }\n      ]\n    },\n    {\n      \"f\": [\n        {\n          \"v\": \"value2\"\n        },\n        {\n          \"v\": \"200\"\n        }\n      ]\n    }\n  ],\n  \"totalBytesProcessed\": \"0\",\n  \"jobComplete\": true,\n  \"cacheHit\": false\n}\n"
  },
  {
    "path": "test-data/bigquery1/json-dumps/project.json",
    "content": "{\n  \"name\": \"projects/12340007\",\n  \"parent\": \"folders/373737373737\",\n  \"projectId\": \"gcpdiag-cloudsql1-aaaa\",\n  \"state\": \"ACTIVE\",\n  \"displayName\": \"gcpdiag test - bigquery1\",\n  \"createTime\": \"2022-05-16T14:13:57.361Z\",\n  \"updateTime\": \"2022-05-16T14:13:59.217Z\",\n  \"etag\": \"31b906Z1OU8v9THp2PCdbw==\"\n}\n"
  },
  {
    "path": "test-data/bigquery1/json-dumps/services.json",
    "content": "{\n  \"services\": [\n    {\n      \"name\": \"projects/12340007/services/compute.googleapis.com\",\n      \"config\": {\n        \"name\": \"compute.googleapis.com\",\n        \"title\": \"Compute Engine API\",\n        \"documentation\": {\n          \"summary\": \"Creates and runs virtual machines on Google Cloud Platform.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"compute.googleapis.com/VpcNetwork\",\n            \"displayName\": \"VPC Network\",\n            \"description\": \"VPC Network.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the VPC Network.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the VPC Network, global always.\"\n              },\n              {\n                \"key\": \"network_id\",\n                \"description\": \"VPC Network resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Location\",\n            \"displayName\": \"Compute Location\",\n            \"description\": \"A location in the Compute API.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the Compute Location.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/instances_per_vpc_network\",\n                \"compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/ip_aliases_per_vpc_network\",\n                \"compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/instances_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/subnet_ranges_per_vpc_network\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/instances_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/instances_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/instances_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Location\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Location\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/usage\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340007\"\n    },\n    {\n      \"name\": \"projects/12340007/services/oslogin.googleapis.com\",\n      \"config\": {\n        \"name\": \"oslogin.googleapis.com\",\n        \"title\": \"Cloud OS Login API\",\n        \"documentation\": {\n          \"summary\": \"You can use OS Login to manage access to your VM instances using IAM roles.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340007\"\n    },\n    {\n      \"name\": \"projects/12340007/services/bigquery.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigquery.googleapis.com\",\n        \"title\": \"BigQuery API\"\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340007\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/bigquery1/project.tf",
    "content": "resource \"random_string\" \"project_id\" {\n  length  = 8\n  number  = true\n  lower   = true\n  upper   = false\n  special = false\n}\n\nresource \"google_project\" \"project\" {\n  name            = \"gcpdiag test - bigquery1\"\n  project_id      = \"gcpdiag-cloudsql1-${random_string.project_id.id}\"\n  org_id          = var.folder_id == \"\" ? var.org_id : null\n  folder_id       = var.folder_id != \"\" ? var.folder_id : null\n  billing_account = var.billing_account_id\n}\n\nresource \"google_project_service\" \"bigquery\" {\n  project = google_project.project.project_id\n  service = \"compute.googleapis.com\"\n}\n\noutput \"project_id\" {\n  value = google_project.project.project_id\n}\n\noutput \"project_id_suffix\" {\n  value = random_string.project_id.id\n}\n\noutput \"project_nr\" {\n  value = google_project.project.number\n}\n\noutput \"org_id\" {\n  value = var.org_id\n}\n"
  },
  {
    "path": "test-data/bigquery1/variables.tf",
    "content": "variable \"billing_account_id\" {}\n\nvariable \"org_id\" {}\nvariable \"folder_id\" { default = \"\" }\n"
  },
  {
    "path": "test-data/billing1/Makefile",
    "content": "PROJECT_ID  := $(shell terraform output -raw project_id)\nPROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix)\nPROJECT_NR  := $(shell terraform output -raw project_nr)\nBILLING_ACCOUNT_ID := $(shell terraform output -raw billing_account_id)\nORG_ID      := $(shell terraform output -raw org_id)\nCURL         = ../../bin/curl-wrap.sh\nJSON_CLEANER = ../../bin/json-cleaner\n\nFAKE_PROJECT_ID_SUFFIX = aaaa\nFAKE_PROJECT_NR = 12340092\nFAKE_ORG_ID = 11112222\nSED_SUBST_FAKE = sed -e \"s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/\" \\\n\t\t -e \"s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/\" \\\n\t\t -e \"s/$(ORG_ID)/$(FAKE_ORG_ID)/\" \\\n\nall:  \\\n  json-dumps/project.json \\\n  json-dumps/services.json \\\n  json-dumps/cost_insights.json \\\n  json-dumps/all_projects.json \\\n  json-dumps/all_billing_account_projects.json \\\n  json-dumps/billing_account.json \\\n  json-dumps/all_billing_accounts.json \\\n  json-dumps/project_billing_info.json\n\njson-dumps/project.json:\n\t$(CURL) -fsS \\\n\t  'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \\\n\t  | $(SED_SUBST_FAKE) >$@\n\njson-dumps/services.json:\n\t$(CURL) -fv \\\n\t  'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \\\n\t  | $(SED_SUBST_FAKE) >$@\n\njson-dumps/cost_insights.json:\n\t$(CURL) -fv \\\n\t-H \"Authorization: Bearer $(gcloud auth print-access-token)\" \\\n\t-H \"x-goog-user-project: $(PROJECT_ID)\" \\\n\t  'https://recommender.googleapis.com/v1/projects/$(PROJECT_ID)/locations/global/insightTypes/google.billing.CostInsight/insights' \\\n\t  | $(SED_SUBST_FAKE) >$@\n\njson-dumps/projects.json:\n\t$(CURL) -v \\\n\t  'https://cloudresourcemanager.googleapis.com/v1/projects' \\\n\t  | $(SED_SUBST_FAKE) >$@\n\njson-dumps/all_billing_account_projects.json:\n\t$(CURL) -fv\\\n\t  'https://cloudbilling.googleapis.com/v1/{billingAccounts/$(BILLING_ACCOUNT_ID)}/projects' \\\n\t  | $(SED_SUBST_FAKE) >$@\n\njson-dumps/billing_account.json:\n\t$(CURL) -fv \\\n\t  'https://cloudbilling.googleapis.com/v1/{billingAccounts/$(BILLING_ACCOUNT_ID)}' \\\n\t  | $(SED_SUBST_FAKE) >$@\n\njson-dumps/all_billing_accounts.json:\n\t$(CURL) -v \\\n\t  'https://cloudbilling.googleapis.com/v1/billingAccounts' \\\n\t  | $(SED_SUBST_FAKE) >$@\n\njson-dumps/project_billing_info.json:\n\t$(CURL) -fv \\\n\t  'https://cloudbilling.googleapis.com/v1/{projects/$(PROJECT_ID)}/billingInfo' \\\n\t  | $(SED_SUBST_FAKE) >$@\n"
  },
  {
    "path": "test-data/billing1/json-dumps/all_billing_account_projects.json",
    "content": "{\n  \"projectBillingInfo\": [\n    {\n      \"name\": \"projects/gcpdiag-billing1-aaaa/billingInfo\",\n      \"projectId\": \"gcpdiag-billing1-aaaa\",\n      \"billingAccountName\": \"billingAccounts/005E32-00FAKE-123456\",\n      \"billingEnabled\": true\n    },\n    {\n      \"name\": \"projects/gcpdiag-billing2-aaaa/billingInfo\",\n      \"projectId\": \"gcpdiag-billing2-aaaa\",\n      \"billingAccountName\": \"billingAccounts/005E32-00FAKE-123456\",\n      \"billingEnabled\": true\n    },\n    {\n      \"name\": \"projects/gcpdiag-billing3-aaaa/billingInfo\",\n      \"projectId\": \"gcpdiag-billing3-aaaa\",\n      \"billingAccountName\": \"billingAccounts/005E32-00FAKE-123456\",\n      \"billingEnabled\": true\n    }\n  ],\n  \"nextPageToken\": \"\"\n}\n"
  },
  {
    "path": "test-data/billing1/json-dumps/all_billing_accounts.json",
    "content": "{\n  \"billingAccounts\": [\n    {\n      \"name\": \"billingAccounts/00262B-00FAKE-123456\",\n      \"open\": true,\n      \"displayName\": \"Monitoring billing account\",\n      \"masterBillingAccount\": \"\"\n    },\n    {\n      \"name\": \"billingAccounts/005E32-00FAKE-123456\",\n      \"open\": true,\n      \"displayName\": \"Cloud Billing Support billing account\",\n      \"masterBillingAccount\": \"\"\n    },\n    {\n      \"name\": \"billingAccounts/0072A3-00FAKE-123456\",\n      \"open\": true,\n      \"displayName\": \"BAId for Cloud Support (xxx and others)\",\n      \"masterBillingAccount\": \"\"\n    },\n    {\n      \"name\": \"billingAccounts/00C931-00FAKE-123456\",\n      \"open\": false,\n      \"displayName\": \"TEST WILL BE DELETED\",\n      \"masterBillingAccount\": \"\"\n    }\n  ],\n  \"nextPageToken\": \"\"\n}\n"
  },
  {
    "path": "test-data/billing1/json-dumps/billing_account.json",
    "content": "{\n  \"name\": \"billingAccounts/005E32-00FAKE-123456\",\n  \"open\": true,\n  \"displayName\": \"Cloud Billing Support billing account\",\n  \"masterBillingAccount\": \"\"\n}\n"
  },
  {
    "path": "test-data/billing1/json-dumps/cost_insights.json",
    "content": "{\n  \"insights\": [\n    {\n      \"category\": \"COST\",\n      \"content\": {\n        \"additionalDetails\": {\n          \"link\": \"\"\n        },\n        \"anomalyDetails\": {\n          \"actualCostData\": {\n            \"cost\": {\n              \"currencyCode\": \"USD\",\n              \"nanos\": 945932000,\n              \"units\": \"16\"\n            }\n          },\n          \"costSlice\": {\n            \"endTime\": \"2021-04-21T07:00:00Z\",\n            \"startTime\": \"2021-04-20T07:00:00Z\"\n          },\n          \"forecastedCostData\": {\n            \"cost\": {\n              \"currencyCode\": \"USD\",\n              \"nanos\": 693342000,\n              \"units\": \"80\"\n            }\n          },\n          \"forecastedCostDataLowerBound\": {\n            \"cost\": {\n              \"currencyCode\": \"USD\",\n              \"nanos\": 517253115,\n              \"units\": \"60\"\n            }\n          },\n          \"forecastedCostDataUpperBound\": {\n            \"cost\": {\n              \"currencyCode\": \"USD\",\n              \"nanos\": 869430885,\n              \"units\": \"100\"\n            }\n          }\n        }\n      },\n      \"description\": \"This is a cost anomaly. The aggregated gross cost for the specified target resource list and cost slice is significantly different from the aggregated forecasted cost.\",\n      \"etag\": \"\\\"6cb9b8034bb8dc7e\\\"\",\n      \"insightSubtype\": \"COST_BELOW_FORECASTED\",\n      \"lastRefreshTime\": \"2022-05-06T17:30:09.666556402Z\",\n      \"name\": \"projects/12340092/locations/global/insightTypes/google.billing.CostInsight/insights/32ac0d4e-8235-42e2-b34e-384fc2256b3e\",\n      \"observationPeriod\": \"7776000s\",\n      \"severity\": \"MEDIUM\",\n      \"stateInfo\": {\n        \"state\": \"ACTIVE\"\n      },\n      \"targetResources\": [\n        \"//cloudresourcemanager.googleapis.com/projects/12340092\"\n      ]\n    }\n  ],\n  \"nextPageToken\": \"\"\n}\n"
  },
  {
    "path": "test-data/billing1/json-dumps/project.json",
    "content": "{\n  \"name\": \"projects/12340092\",\n  \"parent\": \"organizations/11112222\",\n  \"projectId\": \"gcpdiag-billing1-aaaa\",\n  \"state\": \"ACTIVE\",\n  \"displayName\": \"gcpdiag test - billing1\",\n  \"createTime\": \"2022-12-05T21:35:36.712Z\",\n  \"updateTime\": \"2022-12-05T21:35:38.442Z\",\n  \"etag\": \"FklYEDTFd9WSIT9EB76gSg==\"\n}\n"
  },
  {
    "path": "test-data/billing1/json-dumps/project_billing_info.json",
    "content": "{\n  \"name\": \"projects/gcpdiag-billing1-aaaa/billingInfo\",\n  \"projectId\": \"gcpdiag-billing1-aaaa\",\n  \"billingAccountName\": \"billingAccounts/005E32-00FAKE-123456\",\n  \"billingEnabled\": true\n}\n"
  },
  {
    "path": "test-data/billing1/json-dumps/projects.json",
    "content": "{\n  \"projects\": [\n    {\n      \"projectNumber\": \"123456872873\",\n      \"projectId\": \"gcpdiag-billing1-aaaa\",\n      \"lifecycleState\": \"ACTIVE\",\n      \"name\": \"FAKE123f20406d77dp-tp\",\n      \"createTime\": \"2022-12-05T21:35:17.970Z\",\n      \"parent\": {\n        \"type\": \"folder\",\n        \"id\": \"1234569776913\"\n      }\n    }\n  ],\n  \"nextPageToken\": \"\"\n}\n"
  },
  {
    "path": "test-data/billing1/json-dumps/services.json",
    "content": "{\n  \"services\": [\n    {\n      \"name\": \"projects/12340092/services/cloudbilling.googleapis.com\",\n      \"config\": {\n        \"name\": \"cloudbilling.googleapis.com\",\n        \"title\": \"Cloud Billing API\",\n        \"documentation\": {\n          \"summary\": \"Allows developers to manage billing for their Google Cloud Platform projects programmatically.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340092\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/cloudasset1/Makefile",
    "content": "PROJECT_ID  := $(shell terraform output -raw project_id)\nPROJECT_NR  := $(shell terraform output -raw project_nr)\nFOLDER_ID   := $(shell terraform output -raw folder_id)\nORG_ID      := $(shell terraform output -raw org_id)\nCURL         = ../../bin/curl-wrap.sh\nJSON_CLEANER = ../../bin/json-cleaner\n\nLOCATION = us-central1\n\nFAKE_PROJECT_ID = cloudasset1-test-project\nFAKE_PROJECT_NR = 12340071\nFAKE_FOLDER_ID = 9898989\nFAKE_ORG_ID = 11112222\nSED_SUBST_FAKE = sed -e \"s/$(PROJECT_ID)/$(FAKE_PROJECT_ID)/\" \\\n\t\t     -e \"s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/\" \\\n\t\t     -e \"s/$(ORG_ID)/$(FAKE_ORG_ID)/\" \\\n\t\t\t\t -e \"s/$(FOLDER_ID)/$(FAKE_FOLDER_ID)/\"\n\nall:\t\\\n\tjson-dumps/project.json \\\n\tjson-dumps/services.json \\\n\tjson-dumps/search-all-resources-$(LOCATION).json \\\n\njson-dumps/project.json:\n\t$(CURL) -fsS \\\n\t\t'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/services.json:\n\t$(CURL) -fv \\\n\t'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \\\n\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/search-all-resources-$(LOCATION).json:\n\t$(CURL) -fsS \\\n\t    --header \"x-goog-user-project: $(PROJECT_ID)\" \\\n\t    'https://cloudasset.googleapis.com/v1/projects/$(PROJECT_ID):searchAllResources?query=$(LOCATION)' \\\n\t\t\t| $(SED_SUBST_FAKE) >$@\n"
  },
  {
    "path": "test-data/cloudasset1/json-dumps/project.json",
    "content": "{\n  \"name\": \"projects/12340071\",\n  \"parent\": \"folders/9898989\",\n  \"projectId\": \"cloudasset1-test-project\",\n  \"state\": \"ACTIVE\",\n  \"displayName\": \"cloudasset1-test-project\",\n  \"createTime\": \"2023-07-18T20:25:39.577755Z\",\n  \"updateTime\": \"2023-07-18T20:25:39.577755Z\",\n  \"etag\": \"W/\\\"feb340dd15e087d6\\\"\"\n}\n"
  },
  {
    "path": "test-data/cloudasset1/json-dumps/search-all-resources-us-central1.json",
    "content": "{\n  \"results\": [\n    {\n      \"name\": \"//compute.googleapis.com/projects/cloudasset1-test-project/regions/us-central1/subnetworks/b\",\n      \"assetType\": \"compute.googleapis.com/Subnetwork\",\n      \"project\": \"projects/12340071\",\n      \"displayName\": \"b\",\n      \"location\": \"us-central1\",\n      \"additionalAttributes\": {\n        \"gatewayAddress\": \"10.0.0.1\"\n      },\n      \"createTime\": \"2024-08-30T05:57:37Z\",\n      \"state\": \"READY\",\n      \"folders\": [\n        \"folders/9898989\",\n        \"folders/37663766\"\n      ],\n      \"organization\": \"organizations/11112222\",\n      \"parentFullResourceName\": \"//cloudresourcemanager.googleapis.com/projects/cloudasset1-test-project\",\n      \"parentAssetType\": \"cloudresourcemanager.googleapis.com/Project\"\n    },\n    {\n      \"name\": \"//compute.googleapis.com/projects/cloudasset1-test-project/regions/us-central1/addresses/cross-lb-reserve-ip\",\n      \"assetType\": \"compute.googleapis.com/Address\",\n      \"project\": \"projects/12340071\",\n      \"displayName\": \"cross-lb-reserve-ip\",\n      \"location\": \"us-central1\",\n      \"additionalAttributes\": {\n        \"address\": \"10.1.2.99\"\n      },\n      \"createTime\": \"2024-08-27T09:40:04Z\",\n      \"state\": \"RESERVED\",\n      \"folders\": [\n        \"folders/9898989\",\n        \"folders/37663766\"\n      ],\n      \"organization\": \"organizations/11112222\",\n      \"parentFullResourceName\": \"//cloudresourcemanager.googleapis.com/projects/cloudasset1-test-project\",\n      \"parentAssetType\": \"cloudresourcemanager.googleapis.com/Project\"\n    },\n    {\n      \"name\": \"//compute.googleapis.com/projects/cloudasset1-test-project/zones/us-central1-a/autoscalers/gl7-ilb-mig-a\",\n      \"assetType\": \"compute.googleapis.com/Autoscaler\",\n      \"project\": \"projects/12340071\",\n      \"displayName\": \"gl7-ilb-mig-a\",\n      \"location\": \"us-central1-a\",\n      \"createTime\": \"2024-08-27T09:33:12Z\",\n      \"state\": \"ACTIVE\",\n      \"folders\": [\n        \"folders/9898989\",\n        \"folders/37663766\"\n      ],\n      \"organization\": \"organizations/11112222\",\n      \"parentFullResourceName\": \"//cloudresourcemanager.googleapis.com/projects/cloudasset1-test-project\",\n      \"parentAssetType\": \"cloudresourcemanager.googleapis.com/Project\"\n    },\n    {\n      \"name\": \"//compute.googleapis.com/projects/cloudasset1-test-project/zones/us-central1-a/disks/gl7-ilb-mig-a-27j7\",\n      \"assetType\": \"compute.googleapis.com/Disk\",\n      \"project\": \"projects/12340071\",\n      \"displayName\": \"gl7-ilb-mig-a-27j7\",\n      \"location\": \"us-central1-a\",\n      \"additionalAttributes\": {\n        \"sizeGb\": 10,\n        \"type\": \"pd-balanced\",\n        \"users\": [\n          \"https://www.googleapis.com/compute/v1/projects/cloudasset1-test-project/zones/us-central1-a/instances/gl7-ilb-mig-a-27j7\"\n        ]\n      },\n      \"createTime\": \"2024-08-27T09:33:10Z\",\n      \"state\": \"READY\",\n      \"folders\": [\n        \"folders/9898989\",\n        \"folders/37663766\"\n      ],\n      \"organization\": \"organizations/11112222\",\n      \"parentFullResourceName\": \"//cloudresourcemanager.googleapis.com/projects/cloudasset1-test-project\",\n      \"parentAssetType\": \"cloudresourcemanager.googleapis.com/Project\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/cloudasset1/json-dumps/services.json",
    "content": "{\n  \"services\": [\n    {\n      \"name\": \"projects/12340071/services/aiplatform.googleapis.com\",\n      \"config\": {\n        \"name\": \"aiplatform.googleapis.com\",\n        \"title\": \"Vertex AI API\",\n        \"documentation\": {\n          \"summary\": \"Train high-quality custom machine learning models with minimal machine learning expertise and effort.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"aiplatform.googleapis.com/DeploymentResourcePool\",\n            \"displayName\": \"Vertex AI Deployment Resource Pool\",\n            \"description\": \"A Vertex AI Deployment Resource Pool.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP Project owning the Deployment Resource Pool.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The region in which the service is running.\"\n              },\n              {\n                \"key\": \"deployment_resource_pool_id\",\n                \"description\": \"The ID of the Deployment Resource Pool.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"aiplatform.googleapis.com/Endpoint\",\n            \"displayName\": \"Vertex AI Endpoint\",\n            \"description\": \"A Vertex AI API Endpoint where Models are deployed into it.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP Project owning the Endpoint.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The region in which the service is running.\"\n              },\n              {\n                \"key\": \"endpoint_id\",\n                \"description\": \"The ID of the Endpoint.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"aiplatform.googleapis.com/ServingCluster\",\n            \"displayName\": \"Vertex AI Serving Cluster\",\n            \"description\": \"A Vertex AI Serving Cluster.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP User Project owning the cluster.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The region in which the service is running.\"\n              },\n              {\n                \"key\": \"cluster\",\n                \"description\": \"The GKE name of the cluster.\"\n              }\n            ],\n            \"launchStage\": \"PRELAUNCH\"\n          },\n          {\n            \"type\": \"aiplatform.googleapis.com/Featurestore\",\n            \"displayName\": \"Vertex AI Feature Store\",\n            \"description\": \"A Vertex AI Feature Store.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP Project owning the Featurestore.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The region in which the service is running.\"\n              },\n              {\n                \"key\": \"featurestore_id\",\n                \"description\": \"The ID of the Featurestore.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"aiplatform.googleapis.com/FeatureOnlineStore\",\n            \"displayName\": \"Vertex AI Feature Online Store\",\n            \"description\": \"A Vertex AI Feature Online Store.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP Project owning the FeatureOnlineStore.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The region in which the service is running.\"\n              },\n              {\n                \"key\": \"feature_online_store_id\",\n                \"description\": \"The ID of the Feature Online Store.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"aiplatform.googleapis.com/Index\",\n            \"displayName\": \"Matching Engine Index\",\n            \"description\": \"An Index built through the cloud Matching Engine service.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP Project owning the Index.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The region in which the service is running.\"\n              },\n              {\n                \"key\": \"index_id\",\n                \"description\": \"The ID of the Index.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"aiplatform.googleapis.com/IndexEndpoint\",\n            \"displayName\": \"Matching Engine Index Endpoint\",\n            \"description\": \"An Endpoint to which Matching Engine Indexes are deployed.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP Project owning the Index.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The region in which the service is running.\"\n              },\n              {\n                \"key\": \"index_endpoint_id\",\n                \"description\": \"The ID of the index endpoint.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"aiplatform.googleapis.com/PipelineJob\",\n            \"displayName\": \"Vertex Pipelines Job\",\n            \"description\": \"A Vertex Pipelines Job.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as \\\"my-project\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The region in which the service is running.\"\n              },\n              {\n                \"key\": \"pipeline_job_id\",\n                \"description\": \"The ID of the PipelineJob.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"aiplatform.googleapis.com/Location\",\n            \"displayName\": \"Location\",\n            \"description\": \"A Google Cloud Project and region where a job is running.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as \\\"my-project\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The region in which the service is running.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"aiplatform.googleapis.com/Model\",\n            \"displayName\": \"Vertex AI Model\",\n            \"description\": \"A Vertex AI Model.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP Project owning the Model.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The region in which the service is running.\"\n              },\n              {\n                \"key\": \"model\",\n                \"description\": \"The identifier of the Model.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"aiplatform.googleapis.com/NotebookRuntime\",\n            \"displayName\": \"Vertex AI Notebook Runtime\",\n            \"description\": \"A Vertex AI Notebook Runtime.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP Project owning the Notebook Runtime.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The region in which the notebook exists.\"\n              },\n              {\n                \"key\": \"notebook_runtime_id\",\n                \"description\": \"The identifier of the Notebook Runtime.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"aiplatform.googleapis.com/PublisherModel\",\n            \"displayName\": \"Vertex AI Model Garden Publisher Model\",\n            \"description\": \"A Vertex AI Model Garden Publisher Model.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP Project owning the Endpoint.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The region in which the service is running.\"\n              },\n              {\n                \"key\": \"publisher\",\n                \"description\": \"The publisher of the model.\"\n              },\n              {\n                \"key\": \"model_user_id\",\n                \"description\": \"The resource ID of the PublisherModel.\"\n              },\n              {\n                \"key\": \"model_version_id\",\n                \"description\": \"The version ID of the PublisherModel.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"aiplatform.googleapis.com/TenantProject\",\n            \"displayName\": \"Tenant project\",\n            \"description\": \"A Google Cloud tenant project's information.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP Project owning the Tenant Project.\"\n              },\n              {\n                \"key\": \"resource_category\",\n                \"description\": \"The name of the provisioned resource category.\"\n              },\n              {\n                \"key\": \"environment\",\n                \"description\": \"Environment that the tenant project belongs to.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The region in which the service is running.\"\n              },\n              {\n                \"key\": \"project_number\",\n                \"description\": \"The number of a tenant project.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"aiplatform.googleapis.com/ReservedResourcePool\",\n            \"displayName\": \"Vertex AI Reserved Resource Pool\",\n            \"description\": \"A Vertex AI Reserved Resource Pool.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP Project owning the Reserved Resource Pool.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The region in which the service is running.\"\n              },\n              {\n                \"key\": \"pool_id\",\n                \"description\": \"The ID of the Reserved Resource Pool.\"\n              }\n            ],\n            \"launchStage\": \"EARLY_ACCESS\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"aiplatform.googleapis.com/Endpoint\",\n              \"metrics\": [\n                \"aiplatform.googleapis.com/prediction/internal/online/cmle_backend_latencies\",\n                \"aiplatform.googleapis.com/prediction/internal/online/component_latencies\",\n                \"aiplatform.googleapis.com/prediction/internal/online/core_infra_latencies\",\n                \"aiplatform.googleapis.com/prediction/internal/online/custom/istio_request_duration_milliseconds\",\n                \"aiplatform.googleapis.com/prediction/internal/online/custom/istio_requests_total\",\n                \"aiplatform.googleapis.com/prediction/internal/online/custom/tfe_ie/tf_exit_total\",\n                \"aiplatform.googleapis.com/prediction/internal/online/custom/tfe_ie/tf_launch_total\",\n                \"aiplatform.googleapis.com/prediction/internal/online/custom/dynamic_loading/model_load_latencies\",\n                \"aiplatform.googleapis.com/prediction/internal/online/custom/dynamic_loading/model_load_count\",\n                \"aiplatform.googleapis.com/prediction/internal/online/custom/dynamic_loading/model_cache_lookup_count\",\n                \"aiplatform.googleapis.com/prediction/internal/online/custom/dynamic_loading/model_states\",\n                \"aiplatform.googleapis.com/prediction/internal/online/directpath_backend_latencies\",\n                \"aiplatform.googleapis.com/prediction/internal/online/harpoon_backend_latencies\",\n                \"aiplatform.googleapis.com/prediction/internal/online/llm_backend_latencies\",\n                \"aiplatform.googleapis.com/prediction/internal/online/internal_error_count\",\n                \"aiplatform.googleapis.com/prediction/internal/online/prediction_latencies\",\n                \"aiplatform.googleapis.com/prediction/internal/online/request_byte_count\",\n                \"aiplatform.googleapis.com/prediction/internal/online/response_count\",\n                \"aiplatform.googleapis.com/prediction/internal/online/concurrent_requests\",\n                \"aiplatform.googleapis.com/prediction/internal/online/throttled_request_count\",\n                \"aiplatform.googleapis.com/prediction/internal/online/resource_usage_error_count\",\n                \"aiplatform.googleapis.com/prediction/internal/online/lm_response_count\",\n                \"aiplatform.googleapis.com/prediction/internal/online/lm_internal_error_count\",\n                \"aiplatform.googleapis.com/prediction/internal/online/lm_internal_input_token_count\",\n                \"aiplatform.googleapis.com/prediction/internal/online/lm_internal_input_character_count\",\n                \"aiplatform.googleapis.com/prediction/internal/online/lm_internal_output_token_count\",\n                \"aiplatform.googleapis.com/prediction/internal/online/lm_internal_output_character_count\",\n                \"aiplatform.googleapis.com/prediction/internal/online/lm_prediction_latencies\",\n                \"aiplatform.googleapis.com/prediction/internal/online/lvm_request_count\",\n                \"aiplatform.googleapis.com/prediction/online/streaming_message_overhead_latencies\",\n                \"aiplatform.googleapis.com/prediction/online/streaming_message_count\",\n                \"aiplatform.googleapis.com/prediction/online/streaming_message_bytes_count\",\n                \"aiplatform.googleapis.com/prediction/online/open_streams\",\n                \"aiplatform.googleapis.com/prediction/online/error_count\",\n                \"aiplatform.googleapis.com/prediction/online/prediction_count\",\n                \"aiplatform.googleapis.com/prediction/online/prediction_latencies\",\n                \"aiplatform.googleapis.com/prediction/online/response_count\",\n                \"aiplatform.googleapis.com/prediction/online/replicas\",\n                \"aiplatform.googleapis.com/prediction/online/target_replicas\",\n                \"aiplatform.googleapis.com/prediction/internal/online/cpu/utilization\",\n                \"aiplatform.googleapis.com/prediction/internal/online/memory/bytes_used\",\n                \"aiplatform.googleapis.com/prediction/internal/online/accelerator/duty_cycle\",\n                \"aiplatform.googleapis.com/prediction/internal/online/accelerator/memory/bytes_used\",\n                \"aiplatform.googleapis.com/prediction/internal/online/network/received_bytes_count\",\n                \"aiplatform.googleapis.com/prediction/internal/online/network/sent_bytes_count\",\n                \"aiplatform.googleapis.com/prediction/internal/online/l2_operator_reconcile_latencies\",\n                \"aiplatform.googleapis.com/prediction/internal/online/lm_internal_weighted_input_output_token_count\",\n                \"aiplatform.googleapis.com/prediction/internal/online/streaming_message_count\",\n                \"aiplatform.googleapis.com/prediction/internal/online/streaming_message_bytes_count\",\n                \"aiplatform.googleapis.com/prediction/internal/online/first_message_latencies\",\n                \"aiplatform.googleapis.com/prediction/internal/online/sidecar_grpc_server_call_started_total\",\n                \"aiplatform.googleapis.com/prediction/internal/online/sidecar_grpc_server_call_duration_seconds\",\n                \"aiplatform.googleapis.com/prediction/internal/online/sidecar_grpc_server_call_rcvd_total_compressed_message_size_bytes\",\n                \"aiplatform.googleapis.com/prediction/internal/online/sidecar_grpc_server_call_sent_total_compressed_message_size_bytes\",\n                \"aiplatform.googleapis.com/prediction/internal/online/sidecar_grpc_client_attempt_started_total\",\n                \"aiplatform.googleapis.com/prediction/internal/online/sidecar_grpc_client_attempt_duration_seconds\",\n                \"aiplatform.googleapis.com/prediction/internal/online/sidecar_grpc_client_attempt_sent_total_compressed_message_size_bytes\",\n                \"aiplatform.googleapis.com/prediction/internal/online/sidecar_grpc_client_attempt_rcvd_total_compressed_message_size_bytes\",\n                \"aiplatform.googleapis.com/prediction/internal/online/cloud_endpoint_overhead_latencies\",\n                \"aiplatform.googleapis.com/prediction/internal/online/qmt/deployed_model_source\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"aiplatform.googleapis.com/DeploymentResourcePool\",\n              \"metrics\": [\n                \"aiplatform.googleapis.com/prediction/online/deployment_resource_pool/replicas\",\n                \"aiplatform.googleapis.com/prediction/online/deployment_resource_pool/target_replicas\",\n                \"aiplatform.googleapis.com/prediction/online/deployment_resource_pool/cpu/utilization\",\n                \"aiplatform.googleapis.com/prediction/online/deployment_resource_pool/memory/bytes_used\",\n                \"aiplatform.googleapis.com/prediction/online/deployment_resource_pool/accelerator/duty_cycle\",\n                \"aiplatform.googleapis.com/prediction/online/deployment_resource_pool/accelerator/memory/bytes_used\",\n                \"aiplatform.googleapis.com/prediction/online/deployment_resource_pool/network/received_bytes_count\",\n                \"aiplatform.googleapis.com/prediction/online/deployment_resource_pool/network/sent_bytes_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"aiplatform.googleapis.com/IndexEndpoint\",\n              \"metrics\": [\n                \"aiplatform.googleapis.com/scann/query/request_count\",\n                \"aiplatform.googleapis.com/scann/query/latencies\",\n                \"aiplatform.googleapis.com/scann/internal/query/latency_bucketized\",\n                \"aiplatform.googleapis.com/matching_engine/query/request_count\",\n                \"aiplatform.googleapis.com/matching_engine/query/query_count\",\n                \"aiplatform.googleapis.com/matching_engine/query/request_count_v2\",\n                \"aiplatform.googleapis.com/matching_engine/internal/query/request_count\",\n                \"aiplatform.googleapis.com/matching_engine/query/latencies\",\n                \"aiplatform.googleapis.com/matching_engine/query/query_latencies\",\n                \"aiplatform.googleapis.com/matching_engine/internal/query/latency_bucketized\",\n                \"aiplatform.googleapis.com/matching_engine/internal/query/match_server_request_count\",\n                \"aiplatform.googleapis.com/matching_engine/internal/query/match_server_latencies\",\n                \"aiplatform.googleapis.com/matching_engine/internal/router/index_version\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"aiplatform.googleapis.com/IndexEndpoint\",\n              \"metrics\": [\n                \"aiplatform.googleapis.com/scann/current_shards\",\n                \"aiplatform.googleapis.com/scann/current_replicas\",\n                \"aiplatform.googleapis.com/matching_engine/current_shards\",\n                \"aiplatform.googleapis.com/matching_engine/current_replicas\",\n                \"aiplatform.googleapis.com/matching_engine/internal/current_replicas\",\n                \"aiplatform.googleapis.com/matching_engine/cpu/request_cores\",\n                \"aiplatform.googleapis.com/matching_engine/cpu/request_utilization\",\n                \"aiplatform.googleapis.com/matching_engine/memory/used_bytes\",\n                \"aiplatform.googleapis.com/matching_engine/memory/request_bytes\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"aiplatform.googleapis.com/Index\",\n              \"metrics\": [\n                \"aiplatform.googleapis.com/matching_engine/empty_index/request_count\",\n                \"aiplatform.googleapis.com/matching_engine/index/embeddings\",\n                \"aiplatform.googleapis.com/matching_engine/index/last_batch_update_time\",\n                \"aiplatform.googleapis.com/matching_engine/index/last_compaction_time\",\n                \"aiplatform.googleapis.com/matching_engine/index/size\",\n                \"aiplatform.googleapis.com/matching_engine/internal/stream_update/catchup_latency\",\n                \"aiplatform.googleapis.com/matching_engine/report_index_shard_stats_to_gcs/request_count\",\n                \"aiplatform.googleapis.com/matching_engine/stream_update/datapoint_count\",\n                \"aiplatform.googleapis.com/matching_engine/stream_update/latencies\",\n                \"aiplatform.googleapis.com/matching_engine/stream_update/latency\",\n                \"aiplatform.googleapis.com/matching_engine/stream_update/request_count\",\n                \"aiplatform.googleapis.com/matching_engine_stream_update_requests_per_index\",\n                \"aiplatform.googleapis.com/matching_engine_stream_update_throughput_per_index\",\n                \"aiplatform.googleapis.com/quota/matching_engine_stream_update_requests_per_index/exceeded\",\n                \"aiplatform.googleapis.com/quota/matching_engine_stream_update_requests_per_index/usage\",\n                \"aiplatform.googleapis.com/quota/matching_engine_stream_update_throughput_per_index/exceeded\",\n                \"aiplatform.googleapis.com/quota/matching_engine_stream_update_throughput_per_index/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"aiplatform.googleapis.com/Featurestore\",\n              \"metrics\": [\n                \"aiplatform.googleapis.com/featurestore/online_entities_updated\",\n                \"aiplatform.googleapis.com/featurestore/online_serving/request_count\",\n                \"aiplatform.googleapis.com/featurestore/online_serving/latencies\",\n                \"aiplatform.googleapis.com/featurestore/online_serving/response_size\",\n                \"aiplatform.googleapis.com/featurestore/online_serving/request_bytes_count\",\n                \"aiplatform.googleapis.com/featurestore/streaming_write/offline_processed_count\",\n                \"aiplatform.googleapis.com/featurestore/streaming_write/offline_write_delays\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"aiplatform.googleapis.com/Featurestore\",\n              \"metrics\": [\n                \"aiplatform.googleapis.com/featurestore/storage/stored_bytes\",\n                \"aiplatform.googleapis.com/featurestore/storage/billable_processed_bytes\",\n                \"aiplatform.googleapis.com/featurestore/node_count\",\n                \"aiplatform.googleapis.com/featurestore/cpu_load\",\n                \"aiplatform.googleapis.com/featurestore/cpu_load_hottest_node\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"aiplatform.googleapis.com/FeatureOnlineStore\",\n              \"metrics\": [\n                \"aiplatform.googleapis.com/featureonlinestore/online_serving/request_count\",\n                \"aiplatform.googleapis.com/featureonlinestore/online_serving/serving_bytes_count\",\n                \"aiplatform.googleapis.com/featureonlinestore/online_serving/serving_latencies\",\n                \"aiplatform.googleapis.com/featureonlinestore/serving_data_ages\",\n                \"aiplatform.googleapis.com/featureonlinestore/serving_data_by_sync_time\",\n                \"aiplatform.googleapis.com/feature_online_store/online_serving/internal/router/serving_latencies\",\n                \"aiplatform.googleapis.com/feature_online_store/online_serving/internal/leaf/request_count\",\n                \"aiplatform.googleapis.com/feature_online_store/online_serving/internal/leaf/serving_bytes_count\",\n                \"aiplatform.googleapis.com/feature_online_store/online_serving/internal/leaf/latencies\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"aiplatform.googleapis.com/FeatureOnlineStore\",\n              \"metrics\": [\n                \"aiplatform.googleapis.com/featureonlinestore/storage/stored_bytes\",\n                \"aiplatform.googleapis.com/featureonlinestore/storage/bigtable_cpu_load\",\n                \"aiplatform.googleapis.com/featureonlinestore/storage/bigtable_cpu_load_hottest_node\",\n                \"aiplatform.googleapis.com/featureonlinestore/storage/bigtable_nodes\",\n                \"aiplatform.googleapis.com/featureonlinestore/storage/optimized_nodes\",\n                \"aiplatform.googleapis.com/featureonlinestore/running_sync\",\n                \"aiplatform.googleapis.com/feature_online_store/online_serving/internal/router/memory/request_bytes\",\n                \"aiplatform.googleapis.com/feature_online_store/online_serving/internal/router/memory/used_bytes\",\n                \"aiplatform.googleapis.com/feature_online_store/online_serving/internal/router/cpu/request_utilization\",\n                \"aiplatform.googleapis.com/feature_online_store/online_serving/internal/router/cpu/request_cores\",\n                \"aiplatform.googleapis.com/featureonlinestore/storage/multi_region_bigtable_cpu_load\",\n                \"aiplatform.googleapis.com/featureonlinestore/storage/multi_region_bigtable_cpu_load_hottest_node\",\n                \"aiplatform.googleapis.com/featureonlinestore/storage/multi_region_bigtable_nodes\",\n                \"aiplatform.googleapis.com/featureonlinestore/storage/multi_region_stored_bytes\",\n                \"aiplatform.googleapis.com/featureonlinestore/storage/bigtable_replication_latency\",\n                \"aiplatform.googleapis.com/featureonlinestore/storage/bigtable_replication_max_delay\",\n                \"aiplatform.googleapis.com/featureonlinestore/storage/bigtable_multi_clusters_failover_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"aiplatform.googleapis.com/Location\",\n              \"metrics\": [\n                \"aiplatform.googleapis.com/bidi_gen_concurrent_reqs_per_project_per_base_model\",\n                \"aiplatform.googleapis.com/bidi_gen_input_tokens_per_project_per_base_model\",\n                \"aiplatform.googleapis.com/generate_content_audio_gen_per_project_per_base_model\",\n                \"aiplatform.googleapis.com/generate_content_image_gen_per_project_per_base_model\",\n                \"aiplatform.googleapis.com/generate_content_input_tokens_per_minute_per_base_model\",\n                \"aiplatform.googleapis.com/generate_content_requests_per_minute_per_project_per_base_model\",\n                \"aiplatform.googleapis.com/online_prediction_requests_per_base_model\",\n                \"aiplatform.googleapis.com/online_prediction_tokens_per_minute_per_base_model\",\n                \"aiplatform.googleapis.com/quota/bidi_gen_input_tokens_per_project_per_base_model/exceeded\",\n                \"aiplatform.googleapis.com/quota/bidi_gen_input_tokens_per_project_per_base_model/usage\",\n                \"aiplatform.googleapis.com/quota/concurrent/bidi_gen_concurrent_reqs_per_project_per_base_model/exceeded\",\n                \"aiplatform.googleapis.com/quota/concurrent/internal/bidi_gen_concurrent_reqs_per_project_per_base_model/combined_units\",\n                \"aiplatform.googleapis.com/quota/concurrent/internal/online_prediction_concurrent_requests_per_base_model/combined_units\",\n                \"aiplatform.googleapis.com/quota/concurrent/online_prediction_concurrent_requests_per_base_model/exceeded\",\n                \"aiplatform.googleapis.com/quota/generate_content_audio_gen_per_project_per_base_model/exceeded\",\n                \"aiplatform.googleapis.com/quota/generate_content_audio_gen_per_project_per_base_model/usage\",\n                \"aiplatform.googleapis.com/quota/generate_content_image_gen_per_project_per_base_model/exceeded\",\n                \"aiplatform.googleapis.com/quota/generate_content_image_gen_per_project_per_base_model/usage\",\n                \"aiplatform.googleapis.com/quota/generate_content_input_tokens_per_minute_per_base_model/exceeded\",\n                \"aiplatform.googleapis.com/quota/generate_content_input_tokens_per_minute_per_base_model/usage\",\n                \"aiplatform.googleapis.com/quota/generate_content_requests_per_day_per_project_per_base_model/exceeded\",\n                \"aiplatform.googleapis.com/quota/generate_content_requests_per_day_per_project_per_base_model/usage\",\n                \"aiplatform.googleapis.com/quota/generate_content_requests_per_minute_per_project_per_base_model/exceeded\",\n                \"aiplatform.googleapis.com/quota/generate_content_requests_per_minute_per_project_per_base_model/usage\",\n                \"aiplatform.googleapis.com/quota/long_running_online_prediction_requests_per_base_model/exceeded\",\n                \"aiplatform.googleapis.com/quota/long_running_online_prediction_requests_per_base_model/usage\",\n                \"aiplatform.googleapis.com/quota/online_prediction_dedicated_requests_per_base_model_version/exceeded\",\n                \"aiplatform.googleapis.com/quota/online_prediction_dedicated_requests_per_base_model_version/usage\",\n                \"aiplatform.googleapis.com/quota/online_prediction_dedicated_tokens_per_base_model_version/exceeded\",\n                \"aiplatform.googleapis.com/quota/online_prediction_dedicated_tokens_per_base_model_version/usage\",\n                \"aiplatform.googleapis.com/quota/online_prediction_output_tokens_per_minute_per_base_model/exceeded\",\n                \"aiplatform.googleapis.com/quota/online_prediction_output_tokens_per_minute_per_base_model/usage\",\n                \"aiplatform.googleapis.com/quota/online_prediction_requests_against_cap_per_base_model_version/exceeded\",\n                \"aiplatform.googleapis.com/quota/online_prediction_requests_against_cap_per_base_model_version/usage\",\n                \"aiplatform.googleapis.com/quota/online_prediction_requests_per_base_model/exceeded\",\n                \"aiplatform.googleapis.com/quota/online_prediction_requests_per_base_model/usage\",\n                \"aiplatform.googleapis.com/quota/online_prediction_requests_per_user_per_base_model/exceeded\",\n                \"aiplatform.googleapis.com/quota/online_prediction_requests_per_user_per_base_model/usage\",\n                \"aiplatform.googleapis.com/quota/online_prediction_tokens_per_minute_per_base_model/exceeded\",\n                \"aiplatform.googleapis.com/quota/online_prediction_tokens_per_minute_per_base_model/usage\",\n                \"aiplatform.googleapis.com/quota/shared_generate_content_requests_per_day_per_base_model/exceeded\",\n                \"aiplatform.googleapis.com/quota/shared_generate_content_requests_per_day_per_base_model/usage\",\n                \"aiplatform.googleapis.com/quota/shared_generate_content_requests_per_minute_per_base_model/exceeded\",\n                \"aiplatform.googleapis.com/quota/shared_generate_content_requests_per_minute_per_base_model/usage\",\n                \"aiplatform.googleapis.com/quota/shared_online_prediction_requests_per_base_model/exceeded\",\n                \"aiplatform.googleapis.com/quota/shared_online_prediction_requests_per_base_model/usage\",\n                \"aiplatform.googleapis.com/quota/shared_online_prediction_tokens_per_base_model/exceeded\",\n                \"aiplatform.googleapis.com/quota/shared_online_prediction_tokens_per_base_model/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"aiplatform.googleapis.com/Location\",\n              \"metrics\": [\n                \"aiplatform.googleapis.com/executing_vertexai_pipeline_jobs\",\n                \"aiplatform.googleapis.com/executing_vertexai_pipeline_tasks\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"aiplatform.googleapis.com/Model\",\n              \"metrics\": [\n                \"aiplatform.googleapis.com/model_monitoring/feature_drift_deviation\",\n                \"aiplatform.googleapis.com/model_monitoring/prediction_output_drift_deviation\",\n                \"aiplatform.googleapis.com/model_monitoring/feature_attribution_deviation\",\n                \"aiplatform.googleapis.com/model_monitoring/model_performance\",\n                \"aiplatform.googleapis.com/model_monitoring/gen_ai_evaluation\",\n                \"aiplatform.googleapis.com/model_monitoring/gen_ai_safety\",\n                \"aiplatform.googleapis.com/model_monitoring/gen_ai_input_output\",\n                \"aiplatform.googleapis.com/model_monitoring/gen_ai_grounding\",\n                \"aiplatform.googleapis.com/model_monitoring/gen_ai_recitation\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"aiplatform.googleapis.com/PipelineJob\",\n              \"metrics\": [\n                \"aiplatform.googleapis.com/pipelinejob/duration\",\n                \"aiplatform.googleapis.com/pipelinejob/task_completed_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"aiplatform.googleapis.com/PublisherModel\",\n              \"metrics\": [\n                \"aiplatform.googleapis.com/publisher/online_serving/model_invocation_count\",\n                \"aiplatform.googleapis.com/publisher/online_serving/model_invocation_latencies\",\n                \"aiplatform.googleapis.com/publisher/online_serving/first_token_latencies\",\n                \"aiplatform.googleapis.com/publisher/online_serving/tokens\",\n                \"aiplatform.googleapis.com/publisher/online_serving/token_count\",\n                \"aiplatform.googleapis.com/publisher/online_serving/characters\",\n                \"aiplatform.googleapis.com/publisher/online_serving/character_count\",\n                \"aiplatform.googleapis.com/publisher/online_serving/consumed_throughput\",\n                \"aiplatform.googleapis.com/publisher/online_serving/internal/error_count\",\n                \"aiplatform.googleapis.com/publisher/online_serving/internal/model_invocation_count\",\n                \"aiplatform.googleapis.com/publisher/online_serving/internal/success_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"aiplatform.googleapis.com/ServingCluster\",\n              \"metrics\": [\n                \"aiplatform.googleapis.com/serving/controlplane/operator_reconcile_latency_seconds\",\n                \"aiplatform.googleapis.com/serving/controlplane/operator_workqueue_unfinished_work_seconds\",\n                \"aiplatform.googleapis.com/serving/controlplane/operator_workqueue_depth\",\n                \"aiplatform.googleapis.com/serving/controlplane/operator_version\",\n                \"aiplatform.googleapis.com/serving/controlplane/release_stage\",\n                \"aiplatform.googleapis.com/serving/controlplane/qmt/hotmodelpool_hit_count\",\n                \"aiplatform.googleapis.com/serving/controlplane/qmt/hotmodelpool_replicas\",\n                \"aiplatform.googleapis.com/serving/controlplane/qmt/hotmodelpool_target_replicas\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"aiplatform.googleapis.com/NotebookRuntime\",\n              \"metrics\": [\n                \"aiplatform.googleapis.com/colab/internal/runtime/startup_duration\",\n                \"aiplatform.googleapis.com/colab/internal/runtime/health\",\n                \"aiplatform.googleapis.com/colab/internal/runtime/image_version\",\n                \"aiplatform.googleapis.com/colab/internal/runtime/uptime\",\n                \"aiplatform.googleapis.com/colab/internal/runtime/cpu/usage_time\",\n                \"aiplatform.googleapis.com/colab/internal/runtime/memory/limit\",\n                \"aiplatform.googleapis.com/colab/internal/runtime/memory/usage\",\n                \"aiplatform.googleapis.com/colab/internal/runtime/container/memory/usage\",\n                \"aiplatform.googleapis.com/colab/internal/runtime/disk/used_bytes\",\n                \"aiplatform.googleapis.com/colab/internal/runtime/disk/reserved_bytes\",\n                \"aiplatform.googleapis.com/colab/internal/runtime/disk/free_bytes\",\n                \"aiplatform.googleapis.com/colab/internal/runtime/network/received_bytes_count\",\n                \"aiplatform.googleapis.com/colab/internal/runtime/network/sent_bytes_count\",\n                \"aiplatform.googleapis.com/colab/internal/runtime/container/restart_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"aiplatform.googleapis.com/Location\",\n              \"metrics\": [\n                \"aiplatform.googleapis.com/quota/bidi_gen_input_tokens_per_project_per_base_model/limit\",\n                \"aiplatform.googleapis.com/quota/concurrent/bidi_gen_concurrent_reqs_per_project_per_base_model/limit\",\n                \"aiplatform.googleapis.com/quota/concurrent/online_prediction_concurrent_requests_per_base_model/limit\",\n                \"aiplatform.googleapis.com/quota/generate_content_audio_gen_per_project_per_base_model/limit\",\n                \"aiplatform.googleapis.com/quota/generate_content_image_gen_per_project_per_base_model/limit\",\n                \"aiplatform.googleapis.com/quota/generate_content_input_tokens_per_minute_per_base_model/limit\",\n                \"aiplatform.googleapis.com/quota/generate_content_requests_per_day_per_project_per_base_model/limit\",\n                \"aiplatform.googleapis.com/quota/generate_content_requests_per_minute_per_project_per_base_model/limit\",\n                \"aiplatform.googleapis.com/quota/long_running_online_prediction_requests_per_base_model/limit\",\n                \"aiplatform.googleapis.com/quota/online_prediction_dedicated_requests_per_base_model_version/limit\",\n                \"aiplatform.googleapis.com/quota/online_prediction_dedicated_tokens_per_base_model_version/limit\",\n                \"aiplatform.googleapis.com/quota/online_prediction_output_tokens_per_minute_per_base_model/limit\",\n                \"aiplatform.googleapis.com/quota/online_prediction_requests_against_cap_per_base_model_version/limit\",\n                \"aiplatform.googleapis.com/quota/online_prediction_requests_per_base_model/limit\",\n                \"aiplatform.googleapis.com/quota/online_prediction_requests_per_user_per_base_model/limit\",\n                \"aiplatform.googleapis.com/quota/online_prediction_tokens_per_minute_per_base_model/limit\",\n                \"aiplatform.googleapis.com/quota/shared_generate_content_requests_per_day_per_base_model/limit\",\n                \"aiplatform.googleapis.com/quota/shared_generate_content_requests_per_minute_per_base_model/limit\",\n                \"aiplatform.googleapis.com/quota/shared_online_prediction_requests_per_base_model/limit\",\n                \"aiplatform.googleapis.com/quota/shared_online_prediction_tokens_per_base_model/limit\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"aiplatform.googleapis.com/TenantProject\",\n              \"metrics\": [\n                \"aiplatform.googleapis.com/matching_engine/internal/index/project_mapping\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"aiplatform.googleapis.com/ReservedResourcePool\",\n              \"metrics\": [\n                \"aiplatform.googleapis.com/prediction/online/reserved_resource_pool/accelerator/count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"aiplatform.googleapis.com/Index\",\n              \"metrics\": [\n                \"aiplatform.googleapis.com/quota/matching_engine_stream_update_requests_per_index/limit\",\n                \"aiplatform.googleapis.com/quota/matching_engine_stream_update_throughput_per_index/limit\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340071\"\n    },\n    {\n      \"name\": \"projects/12340071/services/analyticshub.googleapis.com\",\n      \"config\": {\n        \"name\": \"analyticshub.googleapis.com\",\n        \"title\": \"Analytics Hub API\",\n        \"documentation\": {\n          \"summary\": \"Exchange data and analytics assets securely and efficiently.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340071\"\n    },\n    {\n      \"name\": \"projects/12340071/services/appengineflex.googleapis.com\",\n      \"config\": {\n        \"name\": \"appengineflex.googleapis.com\",\n        \"title\": \"Google App Engine Flexible Environment\",\n        \"documentation\": {\n          \"summary\": \"This service enables App Engine's Flexible Environment, which gives you the benefits of App Engine's managed services and the flexibility to run any software you need.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/billing-enabled\",\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"serviceruntime.googleapis.com/api\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_version\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_method\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/consumer_project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/consumer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/producer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/consumer_resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/api\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/api/consumer/request_count\",\n                \"serviceruntime.googleapis.com/api/consumer/error_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_used_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_refund_count\",\n                \"serviceruntime.googleapis.com/api/consumer/total_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_overhead_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/backend_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/response_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer\",\n                \"serviceruntime.googleapis.com/quota/used\",\n                \"serviceruntime.googleapis.com/quota/limit\",\n                \"serviceruntime.googleapis.com/quota/exceeded\",\n                \"serviceruntime.googleapis.com/allocation/consumer/quota_used_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/consumer_quota\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/quota/rate/consumer/used_count\",\n                \"serviceruntime.googleapis.com/quota/rate/consumer/refund_count\",\n                \"serviceruntime.googleapis.com/quota/allocation/consumer/usage\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340071\"\n    },\n    {\n      \"name\": \"projects/12340071/services/appenginereporting.googleapis.com\",\n      \"config\": {\n        \"name\": \"appenginereporting.googleapis.com\",\n        \"title\": \"App Engine\",\n        \"documentation\": {\n          \"summary\": \"Google App Engine Reporting Service\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340071\"\n    },\n    {\n      \"name\": \"projects/12340071/services/artifactregistry.googleapis.com\",\n      \"config\": {\n        \"name\": \"artifactregistry.googleapis.com\",\n        \"title\": \"Artifact Registry API\",\n        \"documentation\": {\n          \"summary\": \"Store and manage build artifacts in a scalable and integrated service built on Google infrastructure.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"artifactregistry.googleapis.com/Location\",\n            \"displayName\": \"Artifact Registry Location\",\n            \"description\": \"A location in Artifact Registry.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP resource container associated with this resource, such as \\\"my_project\\\" or \\\"organizations/5678\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"artifactregistry.googleapis.com/Project\",\n            \"displayName\": \"Artifact Registry Project\",\n            \"description\": \"A Cloud project in Artifact Registry.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP resource container associated with this resource, such as \\\"my_project\\\" or \\\"organizations/5678\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"artifactregistry.googleapis.com/Repository\",\n            \"displayName\": \"Artifact Registry Repository\",\n            \"description\": \"A repository in Artifact Registry.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP resource container associated with this resource, such as \\\"my_project\\\" or \\\"organizations/5678\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              },\n              {\n                \"key\": \"repository_id\",\n                \"description\": \"The identifier of the Artifact Registry repository, such as \\\"my_repository\\\".\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"artifactregistry.googleapis.com/Location\",\n              \"metrics\": [\n                \"artifactregistry.googleapis.com/asia_multi_region_upstream_host_reads\",\n                \"artifactregistry.googleapis.com/europe_multi_region_upstream_host_reads\",\n                \"artifactregistry.googleapis.com/project_asia_multi_region_upstream_host_reads\",\n                \"artifactregistry.googleapis.com/project_europe_multi_region_upstream_host_reads\",\n                \"artifactregistry.googleapis.com/project_region_upstream_host_reads\",\n                \"artifactregistry.googleapis.com/project_us_multi_region_upstream_host_reads\",\n                \"artifactregistry.googleapis.com/quota/asia_multi_region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/asia_multi_region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/quota/europe_multi_region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/europe_multi_region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/quota/project_asia_multi_region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/project_asia_multi_region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/quota/project_europe_multi_region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/project_europe_multi_region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/quota/project_region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/project_region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/quota/project_us_multi_region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/project_us_multi_region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/quota/region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/quota/us_multi_region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/us_multi_region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/region_upstream_host_reads\",\n                \"artifactregistry.googleapis.com/us_multi_region_upstream_host_reads\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"artifactregistry.googleapis.com/Project\",\n              \"metrics\": [\n                \"artifactregistry.googleapis.com/project/api/request_count\",\n                \"artifactregistry.googleapis.com/project/api/request_latencies\",\n                \"artifactregistry.googleapis.com/project/request_count\",\n                \"artifactregistry.googleapis.com/project/request_latencies\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"artifactregistry.googleapis.com/Repository\",\n              \"metrics\": [\n                \"artifactregistry.googleapis.com/repository/api/request_count\",\n                \"artifactregistry.googleapis.com/repository/api/request_latencies\",\n                \"artifactregistry.googleapis.com/repository/request_count\",\n                \"artifactregistry.googleapis.com/repository/request_latencies\",\n                \"artifactregistry.googleapis.com/repository/size\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"artifactregistry.googleapis.com/Location\",\n              \"metrics\": [\n                \"artifactregistry.googleapis.com/quota/asia_multi_region_upstream_host_reads/limit\",\n                \"artifactregistry.googleapis.com/quota/europe_multi_region_upstream_host_reads/limit\",\n                \"artifactregistry.googleapis.com/quota/project_asia_multi_region_upstream_host_reads/limit\",\n                \"artifactregistry.googleapis.com/quota/project_europe_multi_region_upstream_host_reads/limit\",\n                \"artifactregistry.googleapis.com/quota/project_region_upstream_host_reads/limit\",\n                \"artifactregistry.googleapis.com/quota/project_us_multi_region_upstream_host_reads/limit\",\n                \"artifactregistry.googleapis.com/quota/region_upstream_host_reads/limit\",\n                \"artifactregistry.googleapis.com/quota/us_multi_region_upstream_host_reads/limit\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340071\"\n    },\n    {\n      \"name\": \"projects/12340071/services/artifactstorage-pa.googleapis.com\",\n      \"config\": {\n        \"name\": \"artifactstorage-pa.googleapis.com\",\n        \"title\": \"Artifact Storage Private API\",\n        \"documentation\": {},\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/universal\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340071\"\n    },\n    {\n      \"name\": \"projects/12340071/services/autoscaling.googleapis.com\",\n      \"config\": {\n        \"name\": \"autoscaling.googleapis.com\",\n        \"title\": \"Cloud Autoscaling API\",\n        \"documentation\": {\n          \"summary\": \"An API for the Cloud Autoscaling for consuming autoscaling signals.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340071\"\n    },\n    {\n      \"name\": \"projects/12340071/services/beyondcorp.googleapis.com\",\n      \"config\": {\n        \"name\": \"beyondcorp.googleapis.com\",\n        \"title\": \"BeyondCorp API\",\n        \"documentation\": {\n          \"summary\": \"Beyondcorp Enterprise provides identity and context aware access controls for enterprise resources and enables zero-trust access. Using the Beyondcorp Enterprise APIs, enterprises can set up multi-cloud and on-prem connectivity solutions.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"beyondcorp.googleapis.com/InternalAppConnectorEngine\",\n            \"displayName\": \"AppConnector Gateway Engine\",\n            \"description\": \"Engine gateway.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The consumer project that this engine corresponds to.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The region in which the gateway engine is running.\"\n              },\n              {\n                \"key\": \"engine_id\",\n                \"description\": \"Unique identifier for the gateway engine.\"\n              },\n              {\n                \"key\": \"tenant_project\",\n                \"description\": \"Tenant project where this gateway engine runs.\"\n              },\n              {\n                \"key\": \"beyondcorp_service_name\",\n                \"description\": \"The beyondcorp service name this engine corresponds to.\"\n              }\n            ],\n            \"launchStage\": \"EARLY_ACCESS\"\n          },\n          {\n            \"type\": \"beyondcorp.googleapis.com/InternalClientGatewayVM\",\n            \"displayName\": \"Internal Client Gateway VM\",\n            \"description\": \"A VM deployed inside a Client Gateway.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container associated with the VM.\"\n              },\n              {\n                \"key\": \"org_id\",\n                \"description\": \"The organization id the resource container (project) is associated with.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The region this VM is deployed in.\"\n              },\n              {\n                \"key\": \"beyondcorp_service_name\",\n                \"description\": \"The beyondcorp service name this VM was deployed in.\"\n              },\n              {\n                \"key\": \"client_connector_service_id\",\n                \"description\": \"The ID of the client connector service associated with the client gateway.\"\n              },\n              {\n                \"key\": \"client_gateway_id\",\n                \"description\": \"The ID of the client gateway deploying this VM.\"\n              },\n              {\n                \"key\": \"vm_id\",\n                \"description\": \"The id of the deployed VM instance.\"\n              }\n            ],\n            \"launchStage\": \"EARLY_ACCESS\"\n          },\n          {\n            \"type\": \"saas_instance\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"saasaccelerator.googleapis.com/service_name\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"saasaccelerator.googleapis.com/consumer_project\"\n              },\n              {\n                \"key\": \"saasaccelerator.googleapis.com/instance_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              }\n            ]\n          },\n          {\n            \"type\": \"saas_instance_node\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"saasaccelerator.googleapis.com/service_name\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"saasaccelerator.googleapis.com/consumer_project\"\n              },\n              {\n                \"key\": \"saasaccelerator.googleapis.com/instance_id\"\n              },\n              {\n                \"key\": \"saasaccelerator.googleapis.com/node_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              }\n            ]\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"beyondcorp.googleapis.com/InternalAppConnectorEngine\",\n              \"metrics\": [\n                \"beyondcorp.googleapis.com/internal/appconnector/engine/latency\",\n                \"beyondcorp.googleapis.com/internal/appconnector/engine/ingress_byte_count\",\n                \"beyondcorp.googleapis.com/internal/appconnector/engine/flows\",\n                \"beyondcorp.googleapis.com/internal/appconnector/engine/recv_buffer_size_units\",\n                \"beyondcorp.googleapis.com/internal/appconnector/engine/flow_average_latency\",\n                \"beyondcorp.googleapis.com/internal/appconnector/engine/flow_max_latency\",\n                \"beyondcorp.googleapis.com/internal/appconnector/engine/flow_rcvd_bytes\",\n                \"beyondcorp.googleapis.com/internal/appconnector/engine/flow_sent_bytes\",\n                \"beyondcorp.googleapis.com/internal/appconnector/engine/flow_rcvd_throughput\",\n                \"beyondcorp.googleapis.com/internal/appconnector/engine/flow_sent_throughput\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"beyondcorp.googleapis.com/InternalClientGatewayVM\",\n              \"metrics\": [\n                \"beyondcorp.googleapis.com/internal/clientconnector/server/connected_devices_count\",\n                \"beyondcorp.googleapis.com/internal/clientconnector/server/connected_users_count\",\n                \"beyondcorp.googleapis.com/internal/clientconnector/server/auth_request_count\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340071\"\n    },\n    {\n      \"name\": \"projects/12340071/services/bigquery.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigquery.googleapis.com\",\n        \"title\": \"BigQuery API\",\n        \"documentation\": {\n          \"summary\": \"A data platform for customers to create, manage, share and query data.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"bigquery.googleapis.com/Table\",\n            \"displayName\": \"BigQuery Table Resource.\",\n            \"description\": \"BigQuery Table Resource.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP resource container associated with this resource, such as \\\"my-project\\\" or \\\"organizations/123\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The cloud location of the BigQuery table.\"\n              },\n              {\n                \"key\": \"table_reference\",\n                \"description\": \"The table reference in the format of project_id:dataset_id.table_id for the BigQuery table.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"bigquery.googleapis.com/Location\",\n            \"displayName\": \"CheckIamPolicy Request Location\",\n            \"description\": \"A BigQuery Location (sometimes called Region).\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The id of the GCP resource container associated with this resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"bigquery.googleapis.com/InternalDifferentialPrivacyBudget\",\n            \"displayName\": \"Differential Privacy Budget\",\n            \"description\": \"Differential Privacy Budget.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container associated with the metric.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location for the quota.\"\n              },\n              {\n                \"key\": \"budget_id\",\n                \"description\": \"A unique identifier for the budget basis of the privacy budget (e.g view_uuid for per-view budgets).\"\n              },\n              {\n                \"key\": \"multi_region\",\n                \"description\": \"The multi-region identifier for the associated resource (e.g \\\"us\\\", \\\"eu\\\"). Used only for multi-region quota metrics.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"bigquery.googleapis.com/ExternalDifferentialPrivacyBudget\",\n            \"displayName\": \"Differential Privacy Budget External\",\n            \"description\": \"Differential Privacy Budget exposed externally to provide privacy budget metrics.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container associated with the metric.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location for the quota.\"\n              },\n              {\n                \"key\": \"budget_id\",\n                \"description\": \"A unique identifier for the budget basis of the privacy budget (e.g view_uuid for per-view budgets).\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"bigquery.googleapis.com/ContinuousJob\",\n            \"displayName\": \"BigQuery Continuous Job\",\n            \"description\": \"Metrics from BigQuery Continuous Jobs.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP resource container associated with this resource, such as \\\"my-project\\\" or \\\"organizations/123\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The Cloud location of the continuous job.\"\n              },\n              {\n                \"key\": \"job_id\",\n                \"description\": \"The ID of the continuous job.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/Table\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_eu/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_us/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_eu/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_us/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/Location\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/quota/internalCheckIamPolicyRequests/exceeded\",\n                \"bigquery.googleapis.com/quota/internalCheckIamPolicyRequests/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/InternalDifferentialPrivacyBudget\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/internal/privacybudget/dp_delta_budget\",\n                \"bigquery.googleapis.com/internal/privacybudget/dp_delta_budget_multi_regional\",\n                \"bigquery.googleapis.com/internal/privacybudget/dp_epsilon_budget\",\n                \"bigquery.googleapis.com/internal/privacybudget/dp_epsilon_budget_multi_regional\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget_multi_regional/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget_multi_regional/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/ExternalDifferentialPrivacyBudget\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/privacybudget/dp_delta_budget\",\n                \"bigquery.googleapis.com/privacybudget/dp_epsilon_budget\",\n                \"bigquery.googleapis.com/quota/privacybudget/dp_delta_budget/exceeded\",\n                \"bigquery.googleapis.com/quota/privacybudget/dp_epsilon_budget/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/ContinuousJob\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/job/continuous/backlog_records\",\n                \"bigquery.googleapis.com/job/continuous/records_read_count\",\n                \"bigquery.googleapis.com/job/continuous/records_written_count\",\n                \"bigquery.googleapis.com/job/continuous/estimated_backlog_logical_bytes\",\n                \"bigquery.googleapis.com/job/continuous/estimated_bytes_processed_count\",\n                \"bigquery.googleapis.com/job/continuous/output_watermark\",\n                \"bigquery.googleapis.com/job/continuous/slots/allocated\",\n                \"bigquery.googleapis.com/job/continuous/end_to_end_latencies\",\n                \"bigquery.googleapis.com/job/continuous/records_read\",\n                \"bigquery.googleapis.com/job/continuous/records_written\",\n                \"bigquery.googleapis.com/job/continuous/estimated_bytes_processed\",\n                \"bigquery.googleapis.com/job/continuous/slots/used_time\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/Location\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/quota/internalCheckIamPolicyRequests/limit\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/Table\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org/limit\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org/usage\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_eu/limit\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_eu/usage\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_us/limit\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_us/usage\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project/limit\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project/usage\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_eu/limit\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_eu/usage\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_us/limit\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_us/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/InternalDifferentialPrivacyBudget\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget_multi_regional/limit\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget_multi_regional/usage\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget_multi_regional/limit\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget_multi_regional/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/ExternalDifferentialPrivacyBudget\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/quota/privacybudget/dp_delta_budget/limit\",\n                \"bigquery.googleapis.com/quota/privacybudget/dp_delta_budget/usage\",\n                \"bigquery.googleapis.com/quota/privacybudget/dp_epsilon_budget/limit\",\n                \"bigquery.googleapis.com/quota/privacybudget/dp_epsilon_budget/usage\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340071\"\n    },\n    {\n      \"name\": \"projects/12340071/services/bigqueryconnection.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigqueryconnection.googleapis.com\",\n        \"title\": \"BigQuery Connection API\",\n        \"documentation\": {\n          \"summary\": \"Allows users to manage BigQuery connections to external data sources.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340071\"\n    },\n    {\n      \"name\": \"projects/12340071/services/bigquerydatapolicy.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigquerydatapolicy.googleapis.com\",\n        \"title\": \"BigQuery Data Policy API\",\n        \"documentation\": {\n          \"summary\": \"Allows users to manage BigQuery data policies.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340071\"\n    },\n    {\n      \"name\": \"projects/12340071/services/bigquerydatatransfer.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigquerydatatransfer.googleapis.com\",\n        \"title\": \"BigQuery Data Transfer API\",\n        \"documentation\": {\n          \"summary\": \"Schedule queries or transfer external data from SaaS applications to Google BigQuery on a regular basis.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340071\"\n    },\n    {\n      \"name\": \"projects/12340071/services/bigquerymigration.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigquerymigration.googleapis.com\",\n        \"title\": \"BigQuery Migration API\",\n        \"documentation\": {\n          \"summary\": \"The migration service, exposing apis for migration jobs operations, and agent management.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340071\"\n    },\n    {\n      \"name\": \"projects/12340071/services/bigqueryreservation.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigqueryreservation.googleapis.com\",\n        \"title\": \"BigQuery Reservation API\",\n        \"documentation\": {\n          \"summary\": \"A service to modify your BigQuery flat-rate reservations.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340071\"\n    },\n    {\n      \"name\": \"projects/12340071/services/bigquerystorage.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigquerystorage.googleapis.com\",\n        \"title\": \"BigQuery Storage API\",\n        \"documentation\": {},\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"bigquerystorage.googleapis.com/DataflowWrite\",\n            \"displayName\": \"BigQuery Storage Write API metrics for Dataflow jobs.\",\n            \"description\": \"BigQuery Storage Write API metrics for Dataflow jobs.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project/folder/org associated with this resource. This is the project that runs the Dataflow job.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The BigQuery region in which the Storage API server locates.\"\n              },\n              {\n                \"key\": \"job_name\",\n                \"description\": \"The name of the Dataflow job this worker belongs to.\"\n              },\n              {\n                \"key\": \"job_id\",\n                \"description\": \"The id of the dataflow job the worker belongs to.\"\n              },\n              {\n                \"key\": \"worker_id\",\n                \"description\": \"The ID of the worker, unique for this job_id.\"\n              },\n              {\n                \"key\": \"destination_project\",\n                \"description\": \"The project of BigQuery destination table of the Dataflow job.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"bigquerystorage.googleapis.com/DataflowWrite\",\n              \"metrics\": [\n                \"bigquerystorage.googleapis.com/dataflow_write/request_count\",\n                \"bigquerystorage.googleapis.com/dataflow_write/uploaded_row_count\",\n                \"bigquerystorage.googleapis.com/dataflow_write/uploaded_bytes_count\",\n                \"bigquerystorage.googleapis.com/dataflow_write/billed_bytes_count\",\n                \"bigquerystorage.googleapis.com/dataflow_write/connection_results_count\",\n                \"bigquerystorage.googleapis.com/dataflow_write/server_side_latencies\",\n                \"bigquerystorage.googleapis.com/dataflow_write/transcoding_latencies\",\n                \"bigquerystorage.googleapis.com/dataflow_write/concurrent_connections\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340071\"\n    },\n    {\n      \"name\": \"projects/12340071/services/cloudaicompanion.googleapis.com\",\n      \"config\": {\n        \"name\": \"cloudaicompanion.googleapis.com\",\n        \"title\": \"Gemini for Google Cloud API\",\n        \"documentation\": {\n          \"summary\": \"The AI-powered assistant for Google Cloud.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"cloudaicompanion.googleapis.com/Instance\",\n            \"displayName\": \"Gemini for Google Cloud Instance\",\n            \"description\": \"An instance resource that represents a Gemini for Google Cloud configuration.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container associated with this resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location of the resource.\"\n              },\n              {\n                \"key\": \"instance_id\",\n                \"description\": \"The ID of the instance resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"cloudaicompanion.googleapis.com/InternalInstance\",\n            \"displayName\": \"Internal Gemini for Google Cloud Instance\",\n            \"description\": \"An internal instance resource that represents a Gemini for Google Cloud configuration.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container associated with this resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location of the resource.\"\n              },\n              {\n                \"key\": \"instance_id\",\n                \"description\": \"The ID of the instance resource.\"\n              },\n              {\n                \"key\": \"user_id\",\n                \"description\": \"The user identifier, for example, 123456789012.\"\n              }\n            ],\n            \"launchStage\": \"PRELAUNCH\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"cloudaicompanion.googleapis.com/InternalInstance\",\n              \"metrics\": [\n                \"cloudaicompanion.googleapis.com/internal/usage/responses/active_user_count\",\n                \"cloudaicompanion.googleapis.com/internal/usage/code_assist/code_suggestions_count\",\n                \"cloudaicompanion.googleapis.com/internal/usage/code_assist/code_lines_suggested_count\",\n                \"cloudaicompanion.googleapis.com/internal/usage/code_assist/code_suggestions_accepted_count\",\n                \"cloudaicompanion.googleapis.com/internal/usage/code_assist/code_lines_accepted_count\",\n                \"cloudaicompanion.googleapis.com/internal/usage/code_assist/user_activity_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"cloudaicompanion.googleapis.com/Instance\",\n              \"metrics\": [\n                \"cloudaicompanion.googleapis.com/usage/responses/daily_active_users\",\n                \"cloudaicompanion.googleapis.com/usage/responses/seven_day_active_users\",\n                \"cloudaicompanion.googleapis.com/usage/responses/twenty_eight_day_active_users\",\n                \"cloudaicompanion.googleapis.com/usage/response_count\",\n                \"cloudaicompanion.googleapis.com/usage/code_assist/code_suggestions_count\",\n                \"cloudaicompanion.googleapis.com/usage/code_assist/code_suggestions_accepted_count\",\n                \"cloudaicompanion.googleapis.com/usage/code_assist/code_lines_accepted_count\",\n                \"cloudaicompanion.googleapis.com/usage/code_assist/chat_responses_count\",\n                \"cloudaicompanion.googleapis.com/usage/code_assist/daily_active_user_count\",\n                \"cloudaicompanion.googleapis.com/usage/code_assist/twenty_eight_day_active_user_count\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340071\"\n    },\n    {\n      \"name\": \"projects/12340071/services/cloudapis.googleapis.com\",\n      \"config\": {\n        \"name\": \"cloudapis.googleapis.com\",\n        \"title\": \"Google Cloud APIs\",\n        \"documentation\": {\n          \"summary\": \"This is a meta service for Google Cloud APIs for convenience. Enabling this service enables all commonly used Google Cloud APIs for the project. By default, it is enabled for all projects created through Google Cloud Console and Google Cloud SDK, and should be manually enabled for all other projects that intend to use Google Cloud APIs. Note: disabling this service has no effect on other services.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340071\"\n    },\n    {\n      \"name\": \"projects/12340071/services/cloudasset.googleapis.com\",\n      \"config\": {\n        \"name\": \"cloudasset.googleapis.com\",\n        \"title\": \"Cloud Asset API\",\n        \"documentation\": {\n          \"summary\": \"The Cloud Asset API manages the history and inventory of Google Cloud resources.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340071\"\n    },\n    {\n      \"name\": \"projects/12340071/services/cloudbilling.googleapis.com\",\n      \"config\": {\n        \"name\": \"cloudbilling.googleapis.com\",\n        \"title\": \"Cloud Billing API\",\n        \"documentation\": {\n          \"summary\": \"Allows developers to manage billing for their Google Cloud Platform projects\\n    programmatically.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340071\"\n    },\n    {\n      \"name\": \"projects/12340071/services/cloudbuild.googleapis.com\",\n      \"config\": {\n        \"name\": \"cloudbuild.googleapis.com\",\n        \"title\": \"Cloud Build API\",\n        \"documentation\": {\n          \"summary\": \"Creates and manages builds on Google Cloud Platform.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"cloudbuild.googleapis.com/Location\",\n            \"displayName\": \"Cloud Build Location\",\n            \"description\": \"A location in the Cloud Build API.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identified of the GCP resource container associated with this resource, such as \\\"my_project\\\" or \\\"organizations/5678\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"cloudbuild.googleapis.com/GkeInstance\",\n            \"displayName\": \"GKE instance\",\n            \"description\": \"GKE instance.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP resource container associated with this resource, such as \\\"my_project\\\" or \\\"organizations/5678\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              },\n              {\n                \"key\": \"gke_instance_id\",\n                \"description\": \"The identifier of the GKE instance.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"cloudbuild.googleapis.com/PrivatePool\",\n            \"displayName\": \"Private Worker Pool\",\n            \"description\": \"Private Worker Pool.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP resource container associated with this resource, such as \\\"my_project\\\" or \\\"organizations/5678\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              },\n              {\n                \"key\": \"worker_pool_uuid\",\n                \"description\": \"The UUID of the worker pool.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"cloudbuild.googleapis.com/GkeInstance\",\n              \"metrics\": [\n                \"cloudbuild.googleapis.com/internal/gke_instance/pod\",\n                \"cloudbuild.googleapis.com/internal/gke_instance/node\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"cloudbuild.googleapis.com/PrivatePool\",\n              \"metrics\": [\n                \"cloudbuild.googleapis.com/internal/private_pool_ready_worker_replicas\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"cloudbuild.googleapis.com/Location\",\n              \"metrics\": [\n                \"cloudbuild.googleapis.com/concurrent_private_pool_build_cpus\",\n                \"cloudbuild.googleapis.com/concurrent_public_pool_build_cpus\",\n                \"cloudbuild.googleapis.com/quota/concurrent_private_pool_build_cpus/exceeded\",\n                \"cloudbuild.googleapis.com/quota/concurrent_public_pool_build_cpus/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"cloudbuild.googleapis.com/Location\",\n              \"metrics\": [\n                \"cloudbuild.googleapis.com/quota/concurrent_private_pool_build_cpus/limit\",\n                \"cloudbuild.googleapis.com/quota/concurrent_private_pool_build_cpus/usage\",\n                \"cloudbuild.googleapis.com/quota/concurrent_public_pool_build_cpus/limit\",\n                \"cloudbuild.googleapis.com/quota/concurrent_public_pool_build_cpus/usage\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340071\"\n    },\n    {\n      \"name\": \"projects/12340071/services/cloudfunctions.googleapis.com\",\n      \"config\": {\n        \"name\": \"cloudfunctions.googleapis.com\",\n        \"title\": \"Cloud Functions API\",\n        \"documentation\": {\n          \"summary\": \"Manages lightweight user-provided functions executed in response to events.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"cloudfunctions.googleapis.com/function\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloudfunctions.googleapis.com/function_name\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/api\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_version\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_method\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/consumer_project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/consumer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/producer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/consumer_resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"cloudfunctions.googleapis.com/function\",\n              \"metrics\": [\n                \"cloudfunctions.googleapis.com/function/execution_times\",\n                \"cloudfunctions.googleapis.com/function/execution_count\",\n                \"cloudfunctions.googleapis.com/function/user_memory_bytes\",\n                \"cloudfunctions.googleapis.com/function/network_egress\",\n                \"cloudfunctions.googleapis.com/function/active_instances\",\n                \"cloudfunctions.googleapis.com/function/execution_delays\",\n                \"cloudfunctions.googleapis.com/function/execution_count_internal\",\n                \"cloudfunctions.googleapis.com/function/supervisor_gcu_times\",\n                \"cloudfunctions.googleapis.com/function/supervisor_memory_bytes\",\n                \"cloudfunctions.googleapis.com/function/user_gcu_times\",\n                \"cloudfunctions.googleapis.com/function/supervisor_chemist_rpc_error_count\",\n                \"cloudfunctions.googleapis.com/function/supervisor_controlled_death_count\",\n                \"cloudfunctions.googleapis.com/function/supervisor_report_count\",\n                \"cloudfunctions.googleapis.com/function/supervisor_report_latencies\",\n                \"cloudfunctions.googleapis.com/function/supervisor_phase_latencies\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/api\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/api/consumer/request_count\",\n                \"serviceruntime.googleapis.com/api/consumer/error_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_used_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_refund_count\",\n                \"serviceruntime.googleapis.com/api/consumer/total_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_overhead_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/backend_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/response_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer\",\n                \"serviceruntime.googleapis.com/quota/used\",\n                \"serviceruntime.googleapis.com/quota/limit\",\n                \"serviceruntime.googleapis.com/quota/exceeded\",\n                \"serviceruntime.googleapis.com/allocation/consumer/quota_used_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/consumer_quota\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/quota/rate/consumer/used_count\",\n                \"serviceruntime.googleapis.com/quota/rate/consumer/refund_count\",\n                \"serviceruntime.googleapis.com/quota/allocation/consumer/usage\",\n                \"serviceruntime.googleapis.com/quota/consumer/limit\",\n                \"serviceruntime.googleapis.com/quota/consumer/exceeded\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340071\"\n    },\n    {\n      \"name\": \"projects/12340071/services/cloudkms.googleapis.com\",\n      \"config\": {\n        \"name\": \"cloudkms.googleapis.com\",\n        \"title\": \"Cloud Key Management Service (KMS) API\",\n        \"documentation\": {\n          \"summary\": \"Manages keys and performs cryptographic operations in a central cloud service, for direct use by other cloud resources and applications.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"cloudkms.googleapis.com/Project\",\n            \"displayName\": \"KMS project\",\n            \"description\": \"KMS project.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project associated with this resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location of the resource.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"cloudkms.googleapis.com/Project\",\n              \"metrics\": [\n                \"cloudkms.googleapis.com/ekm/external/request_count\",\n                \"cloudkms.googleapis.com/ekm/external/request_latencies\",\n                \"cloudkms.googleapis.com/external_kms_multiregion_requests\",\n                \"cloudkms.googleapis.com/hsm_multiregion_asymmetric_requests\",\n                \"cloudkms.googleapis.com/hsm_multiregion_symmetric_requests\",\n                \"cloudkms.googleapis.com/peak_qps\",\n                \"cloudkms.googleapis.com/quota/external_kms_multiregion_requests/exceeded\",\n                \"cloudkms.googleapis.com/quota/external_kms_multiregion_requests/usage\",\n                \"cloudkms.googleapis.com/quota/hsm_multiregion_asymmetric_requests/exceeded\",\n                \"cloudkms.googleapis.com/quota/hsm_multiregion_asymmetric_requests/usage\",\n                \"cloudkms.googleapis.com/quota/hsm_multiregion_symmetric_requests/exceeded\",\n                \"cloudkms.googleapis.com/quota/hsm_multiregion_symmetric_requests/usage\",\n                \"cloudkms.googleapis.com/quota/software_multiregion_asymmetric_requests/exceeded\",\n                \"cloudkms.googleapis.com/quota/software_multiregion_asymmetric_requests/usage\",\n                \"cloudkms.googleapis.com/quota/software_multiregion_symmetric_requests/exceeded\",\n                \"cloudkms.googleapis.com/quota/software_multiregion_symmetric_requests/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"cloudkms.googleapis.com/Project\",\n              \"metrics\": [\n                \"cloudkms.googleapis.com/quota/external_kms_multiregion_requests/limit\",\n                \"cloudkms.googleapis.com/quota/hsm_multiregion_asymmetric_requests/limit\",\n                \"cloudkms.googleapis.com/quota/hsm_multiregion_symmetric_requests/limit\",\n                \"cloudkms.googleapis.com/quota/software_multiregion_asymmetric_requests/limit\",\n                \"cloudkms.googleapis.com/quota/software_multiregion_symmetric_requests/limit\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340071\"\n    },\n    {\n      \"name\": \"projects/12340071/services/cloudresourcemanager.googleapis.com\",\n      \"config\": {\n        \"name\": \"cloudresourcemanager.googleapis.com\",\n        \"title\": \"Cloud Resource Manager API\",\n        \"documentation\": {\n          \"summary\": \"Creates, reads, and updates metadata for Google Cloud Platform resource containers.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340071\"\n    },\n    {\n      \"name\": \"projects/12340071/services/cloudtrace.googleapis.com\",\n      \"config\": {\n        \"name\": \"cloudtrace.googleapis.com\",\n        \"title\": \"Cloud Trace API\",\n        \"documentation\": {\n          \"summary\": \"Sends application trace data to Cloud Trace for viewing. Trace data is collected for all App Engine applications by default. Trace data from other applications can be provided using this API. This library is used to interact with the Cloud Trace API directly. If you are looking to instrument your application for Cloud Trace, we recommend using OpenTelemetry.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"cloudtrace.googleapis.com/charged_project\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"monitoring.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              }\n            ]\n          },\n          {\n            \"type\": \"cloudtrace.googleapis.com/ChargedProject\",\n            \"displayName\": \"Cloud trace target\",\n            \"description\": \"A cloud trace specialization target schema of cloud.ChargedProject.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The monitored resource container. Could be project, workspace, etc.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The service-specific notion of location.\"\n              },\n              {\n                \"key\": \"api_service\",\n                \"description\": \"The name of the API service with which the data is associated (e.g.,'cloudtrace.googleapis.com').\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"cloudtrace.googleapis.com/CloudtraceProject\",\n            \"displayName\": \"Cloud Trace\",\n            \"description\": \"Cloud trace resource, e.g. project.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container associated with the resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location that the Cloud Trace service recording the metrics is running.\"\n              }\n            ],\n            \"launchStage\": \"EARLY_ACCESS\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"cloudtrace.googleapis.com/ChargedProject\",\n              \"metrics\": [\n                \"cloudtrace.googleapis.com/billing/ingested_spans\",\n                \"cloudtrace.googleapis.com/billing/ingested_bytes\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"cloudtrace.googleapis.com/charged_project\",\n              \"metrics\": [\n                \"cloudtrace.googleapis.com/billing/retrieved_spans\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"cloudtrace.googleapis.com/CloudtraceProject\",\n              \"metrics\": [\n                \"cloudtrace.googleapis.com/internal/plugin_server_span_count\",\n                \"cloudtrace.googleapis.com/internal/reader_root_query_count\",\n                \"cloudtrace.googleapis.com/internal/reader_root_query_latencies\",\n                \"cloudtrace.googleapis.com/bigquery_export/exported_span_count\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340071\"\n    },\n    {\n      \"name\": \"projects/12340071/services/composer.googleapis.com\",\n      \"config\": {\n        \"name\": \"composer.googleapis.com\",\n        \"title\": \"Cloud Composer API\",\n        \"documentation\": {\n          \"summary\": \"Manages Apache Airflow environments on Google Cloud Platform.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/billing-enabled\",\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340071\"\n    },\n    {\n      \"name\": \"projects/12340071/services/compute.googleapis.com\",\n      \"config\": {\n        \"name\": \"compute.googleapis.com\",\n        \"title\": \"Compute Engine API\",\n        \"documentation\": {\n          \"summary\": \"Creates and runs virtual machines on Google Cloud Platform.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"compute.googleapis.com/VpcNetwork\",\n            \"displayName\": \"VPC Network\",\n            \"description\": \"VPC Network.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the VPC Network.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the VPC Network, global always.\"\n              },\n              {\n                \"key\": \"network_id\",\n                \"description\": \"VPC Network resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Location\",\n            \"displayName\": \"Compute Location\",\n            \"description\": \"A location in the Compute API.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the Compute Location.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Interconnect\",\n            \"displayName\": \"Interconnect\",\n            \"description\": \"Interconnect.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the Interconnect.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the Interconnect.\"\n              },\n              {\n                \"key\": \"interconnect_id\",\n                \"description\": \"Interconnect resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/FirewallPolicy\",\n            \"displayName\": \"Firewall policy\",\n            \"description\": \"Firewall policy.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project or organization) associated with the firewall policy.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the firewall policy.\"\n              },\n              {\n                \"key\": \"firewall_policy_id\",\n                \"description\": \"Firewall policy resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/SecurityPolicy\",\n            \"displayName\": \"Security policy\",\n            \"description\": \"Security policy.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the security policy.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the security policy.\"\n              },\n              {\n                \"key\": \"security_policy_id\",\n                \"description\": \"Security policy resource ID.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/OperationType\",\n            \"displayName\": \"Operation Type\",\n            \"description\": \"Operation Type.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the operation.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the operation.\"\n              },\n              {\n                \"key\": \"operation_type\",\n                \"description\": \"Operation type.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Reservation\",\n            \"displayName\": \"Reservation\",\n            \"description\": \"Monitored resource representing a reservation.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container (e.g. project number) associated with the reservation.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The zone that contains the reservation.\"\n              },\n              {\n                \"key\": \"reservation_id\",\n                \"description\": \"Reservation resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/StoragePool\",\n            \"displayName\": \"Storage Pool\",\n            \"description\": \"Monitored resource representing a storage pool.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container (e.g. project number) associated with the storage pool.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location that contains the storage pool.\"\n              },\n              {\n                \"key\": \"storage_pool_id\",\n                \"description\": \"Numerical resource ID of the storage pool.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"gce_instance\",\n            \"displayName\": \"VM Instance\",\n            \"description\": \"A virtual machine instance hosted in Compute Engine.\",\n            \"labels\": [\n              {\n                \"key\": \"project_id\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as \\\"my-project\\\".\"\n              },\n              {\n                \"key\": \"instance_id\",\n                \"description\": \"The numeric VM instance identifier assigned by Compute Engine.\"\n              },\n              {\n                \"key\": \"zone\",\n                \"description\": \"The Compute Engine zone in which the VM is running.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/NetworkPathQuotasResource\",\n            \"displayName\": \"Network Path Quotas Resource.\",\n            \"description\": \"Network Path Quotas Resource.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container associated with the metric.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location for the quota.\"\n              },\n              {\n                \"key\": \"network_path_id\",\n                \"description\": \"The network path custom dimension.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network\",\n                \"compute.googleapis.com/cloud_router_prefixes_from_own_region_per_region_per_vpc_network\",\n                \"compute.googleapis.com/dynamic_routes_per_region_per_peering_group\",\n                \"compute.googleapis.com/global_internal_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/instances_per_peering_group\",\n                \"compute.googleapis.com/instances_per_vpc_network\",\n                \"compute.googleapis.com/internal_lb_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_managed_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_protocol_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/ip_aliases_per_peering_group\",\n                \"compute.googleapis.com/ip_aliases_per_vpc_network\",\n                \"compute.googleapis.com/peerings_per_vpc_network\",\n                \"compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network\",\n                \"compute.googleapis.com/psc_propagated_connections_per_vpc_network\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/multicast_consumers_per_zone_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/exceeded\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/regional_external_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/regional_internal_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/static_routes_per_peering_group\",\n                \"compute.googleapis.com/static_routes_per_vpc_network\",\n                \"compute.googleapis.com/subnet_ranges_per_peering_group\",\n                \"compute.googleapis.com/subnet_ranges_per_vpc_network\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Location\",\n              \"metrics\": [\n                \"compute.googleapis.com/cpus_per_vm_family\",\n                \"compute.googleapis.com/global_dns/request_count\",\n                \"compute.googleapis.com/gpus_per_gpu_family\",\n                \"compute.googleapis.com/inter_region_egress_bandwidth\",\n                \"compute.googleapis.com/local_ssd_total_storage_per_vm_family\",\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/exceeded\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/exceeded\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/exceeded\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/usage\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/exceeded\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/exceeded\",\n                \"compute.googleapis.com/quota/tpus_per_tpu_family/exceeded\",\n                \"compute.googleapis.com/tpus_per_tpu_family\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Interconnect\",\n              \"metrics\": [\n                \"compute.googleapis.com/interconnect_attachments_per_interconnect\",\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/exceeded\",\n                \"compute.googleapis.com/quota/wire_groups_per_interconnect/exceeded\",\n                \"compute.googleapis.com/wire_groups_per_interconnect\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/FirewallPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/fqdns_per_global_network_firewall_policy\",\n                \"compute.googleapis.com/fqdns_per_hierarchical_firewall_policy\",\n                \"compute.googleapis.com/fqdns_per_regional_network_firewall_policy\",\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/rule_attributes_per_global_network_firewall_policy\",\n                \"compute.googleapis.com/rule_attributes_per_hierarchical_firewall_policy\",\n                \"compute.googleapis.com/rule_attributes_per_regional_network_firewall_policy\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/SecurityPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/advanced_rules_per_edge_security_policy\",\n                \"compute.googleapis.com/advanced_rules_per_regional_security_policy\",\n                \"compute.googleapis.com/advanced_rules_per_security_policy\",\n                \"compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/exceeded\",\n                \"compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/exceeded\",\n                \"compute.googleapis.com/quota/advanced_rules_per_security_policy/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/OperationType\",\n              \"metrics\": [\n                \"compute.googleapis.com/global_concurrent_operations\",\n                \"compute.googleapis.com/quota/concurrent/global_concurrent_operations/exceeded\",\n                \"compute.googleapis.com/quota/concurrent/internal/global_concurrent_operations/combined_units\",\n                \"compute.googleapis.com/quota/concurrent/internal/regional_concurrent_operations/combined_units\",\n                \"compute.googleapis.com/quota/concurrent/regional_concurrent_operations/exceeded\",\n                \"compute.googleapis.com/regional_concurrent_operations\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"gce_instance\",\n              \"metrics\": [\n                \"compute.googleapis.com/instance/global_dns/request_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Reservation\",\n              \"metrics\": [\n                \"compute.googleapis.com/reservation/reserved\",\n                \"compute.googleapis.com/reservation/assured\",\n                \"compute.googleapis.com/reservation/used\",\n                \"compute.googleapis.com/reservation/internal/matching_instances\",\n                \"compute.googleapis.com/reservation/internal/prespuns_by_state\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/StoragePool\",\n              \"metrics\": [\n                \"compute.googleapis.com/storage_pool/disks\",\n                \"compute.googleapis.com/storage_pool/provisioned_capacity\",\n                \"compute.googleapis.com/storage_pool/used_capacity\",\n                \"compute.googleapis.com/storage_pool/total_disk_provisioned_capacity\",\n                \"compute.googleapis.com/storage_pool/provisioned_iops\",\n                \"compute.googleapis.com/storage_pool/used_iops\",\n                \"compute.googleapis.com/storage_pool/total_disk_provisioned_iops\",\n                \"compute.googleapis.com/storage_pool/provisioned_throughput\",\n                \"compute.googleapis.com/storage_pool/used_throughput\",\n                \"compute.googleapis.com/storage_pool/total_disk_provisioned_throughput\",\n                \"compute.googleapis.com/storage_pool/capacity_utilization\",\n                \"compute.googleapis.com/storage_pool/iops_utilization\",\n                \"compute.googleapis.com/storage_pool/throughput_utilization\",\n                \"compute.googleapis.com/storage_pool/capacity_overprovisioning\",\n                \"compute.googleapis.com/storage_pool/iops_overprovisioning\",\n                \"compute.googleapis.com/storage_pool/throughput_overprovisioning\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Location\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/limit\",\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/usage\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/limit\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/usage\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/limit\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/limit\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/usage\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/limit\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/usage\",\n                \"compute.googleapis.com/quota/tpus_per_tpu_family/limit\",\n                \"compute.googleapis.com/quota/tpus_per_tpu_family/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/limit\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/usage\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/multicast_consumers_per_zone_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/multicast_consumers_per_zone_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/limit\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/usage\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Interconnect\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/limit\",\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/usage\",\n                \"compute.googleapis.com/quota/wire_groups_per_interconnect/limit\",\n                \"compute.googleapis.com/quota/wire_groups_per_interconnect/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/FirewallPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/SecurityPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/limit\",\n                \"compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/usage\",\n                \"compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/limit\",\n                \"compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/usage\",\n                \"compute.googleapis.com/quota/advanced_rules_per_security_policy/limit\",\n                \"compute.googleapis.com/quota/advanced_rules_per_security_policy/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/OperationType\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/concurrent/global_concurrent_operations/limit\",\n                \"compute.googleapis.com/quota/concurrent/regional_concurrent_operations/limit\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/NetworkPathQuotasResource\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/wire_groups_bronze_unmetered_bandwidth_gbps/exceeded\",\n                \"compute.googleapis.com/quota/wire_groups_gold_unmetered_bandwidth_gbps/exceeded\",\n                \"compute.googleapis.com/quota/wire_groups_silver_unmetered_bandwidth_gbps/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/NetworkPathQuotasResource\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/wire_groups_bronze_unmetered_bandwidth_gbps/limit\",\n                \"compute.googleapis.com/quota/wire_groups_bronze_unmetered_bandwidth_gbps/usage\",\n                \"compute.googleapis.com/quota/wire_groups_gold_unmetered_bandwidth_gbps/limit\",\n                \"compute.googleapis.com/quota/wire_groups_gold_unmetered_bandwidth_gbps/usage\",\n                \"compute.googleapis.com/quota/wire_groups_silver_unmetered_bandwidth_gbps/limit\",\n                \"compute.googleapis.com/quota/wire_groups_silver_unmetered_bandwidth_gbps/usage\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340071\"\n    },\n    {\n      \"name\": \"projects/12340071/services/computescanning.googleapis.com\",\n      \"config\": {\n        \"name\": \"computescanning.googleapis.com\",\n        \"title\": \"Compute Scanning API\",\n        \"documentation\": {\n          \"summary\": \"A service to scan compute resources.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"serviceruntime.googleapis.com/api\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_version\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_method\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/consumer_project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/consumer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/producer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/consumer_resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/api\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/api/consumer/request_count\",\n                \"serviceruntime.googleapis.com/api/consumer/error_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_used_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_refund_count\",\n                \"serviceruntime.googleapis.com/api/consumer/total_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_overhead_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/backend_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/response_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer\",\n                \"serviceruntime.googleapis.com/quota/used\",\n                \"serviceruntime.googleapis.com/quota/limit\",\n                \"serviceruntime.googleapis.com/quota/exceeded\",\n                \"serviceruntime.googleapis.com/allocation/consumer/quota_used_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/consumer_quota\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/quota/rate/consumer/used_count\",\n                \"serviceruntime.googleapis.com/quota/rate/consumer/refund_count\",\n                \"serviceruntime.googleapis.com/quota/allocation/consumer/usage\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340071\"\n    },\n    {\n      \"name\": \"projects/12340071/services/container.googleapis.com\",\n      \"config\": {\n        \"name\": \"container.googleapis.com\",\n        \"title\": \"Kubernetes Engine API\",\n        \"documentation\": {\n          \"summary\": \"Builds and manages container-based applications, powered by the open source Kubernetes technology.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"container.googleapis.com/Cluster\",\n            \"displayName\": \"Kubernetes Cluster Limits\",\n            \"description\": \"Kubernetes Cluster.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"Project or organization.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Region or zone where the cluster was created.\"\n              },\n              {\n                \"key\": \"cluster_name\",\n                \"description\": \"Cluster name.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"container.googleapis.com/NodePool\",\n            \"displayName\": \"GKE Node Pool\",\n            \"description\": \"GKE Node Pool.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"Project or organization.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Region or zone where the cluster was created.\"\n              },\n              {\n                \"key\": \"cluster_name\",\n                \"description\": \"Cluster name.\"\n              },\n              {\n                \"key\": \"node_pool_name\",\n                \"description\": \"Node pool name.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"container.googleapis.com/Cluster\",\n              \"metrics\": [\n                \"container.googleapis.com/quota/containers_per_cluster_autopilot\",\n                \"container.googleapis.com/quota/containers_per_cluster_standard\",\n                \"container.googleapis.com/quota/etcd_database_size_bytes\",\n                \"container.googleapis.com/quota/nodes_per_cluster\",\n                \"container.googleapis.com/quota/operations_per_regional_cluster/exceeded\",\n                \"container.googleapis.com/quota/operations_per_zonal_cluster/exceeded\",\n                \"container.googleapis.com/quota/pods_per_cluster_autopilot\",\n                \"container.googleapis.com/quota/pods_per_cluster_standard\",\n                \"container.googleapis.com/quota/quota/containers_per_cluster_autopilot/exceeded\",\n                \"container.googleapis.com/quota/quota/containers_per_cluster_standard/exceeded\",\n                \"container.googleapis.com/quota/quota/etcd_database_size_bytes/exceeded\",\n                \"container.googleapis.com/quota/quota/nodes_per_cluster/exceeded\",\n                \"container.googleapis.com/quota/quota/pods_per_cluster_autopilot/exceeded\",\n                \"container.googleapis.com/quota/quota/pods_per_cluster_standard/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"container.googleapis.com/NodePool\",\n              \"metrics\": [\n                \"container.googleapis.com/quota/nodes_per_node_pool\",\n                \"container.googleapis.com/quota/quota/nodes_per_node_pool/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"container.googleapis.com/Cluster\",\n              \"metrics\": [\n                \"container.googleapis.com/quota/operations_per_regional_cluster/limit\",\n                \"container.googleapis.com/quota/operations_per_regional_cluster/usage\",\n                \"container.googleapis.com/quota/operations_per_zonal_cluster/limit\",\n                \"container.googleapis.com/quota/operations_per_zonal_cluster/usage\",\n                \"container.googleapis.com/quota/quota/containers_per_cluster_autopilot/limit\",\n                \"container.googleapis.com/quota/quota/containers_per_cluster_autopilot/usage\",\n                \"container.googleapis.com/quota/quota/containers_per_cluster_standard/limit\",\n                \"container.googleapis.com/quota/quota/containers_per_cluster_standard/usage\",\n                \"container.googleapis.com/quota/quota/etcd_database_size_bytes/limit\",\n                \"container.googleapis.com/quota/quota/etcd_database_size_bytes/usage\",\n                \"container.googleapis.com/quota/quota/nodes_per_cluster/limit\",\n                \"container.googleapis.com/quota/quota/nodes_per_cluster/usage\",\n                \"container.googleapis.com/quota/quota/pods_per_cluster_autopilot/limit\",\n                \"container.googleapis.com/quota/quota/pods_per_cluster_autopilot/usage\",\n                \"container.googleapis.com/quota/quota/pods_per_cluster_standard/limit\",\n                \"container.googleapis.com/quota/quota/pods_per_cluster_standard/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"container.googleapis.com/NodePool\",\n              \"metrics\": [\n                \"container.googleapis.com/quota/quota/nodes_per_node_pool/limit\",\n                \"container.googleapis.com/quota/quota/nodes_per_node_pool/usage\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340071\"\n    },\n    {\n      \"name\": \"projects/12340071/services/containeranalysis.googleapis.com\",\n      \"config\": {\n        \"name\": \"containeranalysis.googleapis.com\",\n        \"title\": \"Container Analysis API\",\n        \"documentation\": {\n          \"summary\": \"This API is a prerequisite for leveraging Artifact Analysis scanning\\ncapabilities in both Artifact Registry and with Advanced Vulnerability\\nInsights (runtime scanning) in GKE.\\n\\nIn addition, the Container Analysis API is an implementation of the Grafeas\\nAPI, which enables storing, querying, and retrieval of critical metadata\\nabout all of your software artifacts.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340071\"\n    },\n    {\n      \"name\": \"projects/12340071/services/containerfilesystem.googleapis.com\",\n      \"config\": {\n        \"name\": \"containerfilesystem.googleapis.com\",\n        \"title\": \"Container File System API\",\n        \"documentation\": {\n          \"summary\": \"Stream images stored in Artifact Registry to GKE\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340071\"\n    },\n    {\n      \"name\": \"projects/12340071/services/containerregistry.googleapis.com\",\n      \"config\": {\n        \"name\": \"containerregistry.googleapis.com\",\n        \"title\": \"Container Registry API\",\n        \"documentation\": {\n          \"summary\": \"Google Container Registry provides secure, private Docker image storage on Google Cloud Platform.  Our API follows the Docker Registry API specification, so we are fully compatible with the Docker CLI client, as well as standard tooling using the Docker Registry API.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340071\"\n    },\n    {\n      \"name\": \"projects/12340071/services/containerscanning.googleapis.com\",\n      \"config\": {\n        \"name\": \"containerscanning.googleapis.com\",\n        \"title\": \"Container Scanning API\",\n        \"documentation\": {\n          \"summary\": \"A service to scan containers for vulnerabilities.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"serviceruntime.googleapis.com/api\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_version\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_method\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/consumer_project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/consumer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/producer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/consumer_resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/api\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/api/consumer/request_count\",\n                \"serviceruntime.googleapis.com/api/consumer/error_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_used_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_refund_count\",\n                \"serviceruntime.googleapis.com/api/consumer/total_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_overhead_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/backend_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/response_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer\",\n                \"serviceruntime.googleapis.com/quota/used\",\n                \"serviceruntime.googleapis.com/quota/limit\",\n                \"serviceruntime.googleapis.com/quota/exceeded\",\n                \"serviceruntime.googleapis.com/allocation/consumer/quota_used_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/consumer_quota\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/quota/rate/consumer/used_count\",\n                \"serviceruntime.googleapis.com/quota/rate/consumer/refund_count\",\n                \"serviceruntime.googleapis.com/quota/allocation/consumer/usage\",\n                \"serviceruntime.googleapis.com/quota/consumer/limit\",\n                \"serviceruntime.googleapis.com/quota/consumer/exceeded\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340071\"\n    },\n    {\n      \"name\": \"projects/12340071/services/datacatalog.googleapis.com\",\n      \"config\": {\n        \"name\": \"datacatalog.googleapis.com\",\n        \"title\": \"Google Cloud Data Catalog API\",\n        \"documentation\": {\n          \"summary\": \"A fully managed and highly scalable data discovery and metadata management service.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340071\"\n    },\n    {\n      \"name\": \"projects/12340071/services/dataflow.googleapis.com\",\n      \"config\": {\n        \"name\": \"dataflow.googleapis.com\",\n        \"title\": \"Dataflow API\",\n        \"documentation\": {\n          \"summary\": \"Manages Google Cloud Dataflow projects on Google Cloud Platform.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/billing-enabled\",\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"dataflow.googleapis.com/Project\",\n            \"displayName\": \"Dataflow Project\",\n            \"description\": \"A project level monitored resource for Dataflow.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as \\\"my-project\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location where Dataflow jobs are running.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"dataflow.googleapis.com/Project\",\n              \"metrics\": [\n                \"dataflow.googleapis.com/quota/region_endpoint_shuffle_slot/exceeded\",\n                \"dataflow.googleapis.com/region_endpoint_shuffle_slot\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"dataflow.googleapis.com/Project\",\n              \"metrics\": [\n                \"dataflow.googleapis.com/quota/region_endpoint_shuffle_slot/limit\",\n                \"dataflow.googleapis.com/quota/region_endpoint_shuffle_slot/usage\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340071\"\n    },\n    {\n      \"name\": \"projects/12340071/services/dataform.googleapis.com\",\n      \"config\": {\n        \"name\": \"dataform.googleapis.com\",\n        \"title\": \"Dataform API\",\n        \"documentation\": {\n          \"summary\": \"Service to develop, version control, and operationalize SQL pipelines in BigQuery.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340071\"\n    },\n    {\n      \"name\": \"projects/12340071/services/datafusion.googleapis.com\",\n      \"config\": {\n        \"name\": \"datafusion.googleapis.com\",\n        \"title\": \"Cloud Data Fusion API\",\n        \"documentation\": {\n          \"summary\": \"Cloud Data Fusion is a fully-managed, cloud native, enterprise data integration service for\\n    quickly building and managing data pipelines. It provides a graphical interface to increase\\n    time efficiency and reduce complexity, and allows business users, developers, and data\\n    scientists to easily and reliably build scalable data integration solutions to cleanse,\\n    prepare, blend, transfer and transform data without having to wrestle with infrastructure.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"datafusion.googleapis.com/Pipeline\",\n            \"displayName\": \"Pipeline\",\n            \"description\": \"A deployed Pipeline in a Cloud Data Fusion instance.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The ID of the customer project.\"\n              },\n              {\n                \"key\": \"org_id\",\n                \"description\": \"The ID of the organization that the customer project belongs to.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The zone/region that the instance is hosted in.\"\n              },\n              {\n                \"key\": \"edition\",\n                \"description\": \"The edition of the instance.\"\n              },\n              {\n                \"key\": \"is_private\",\n                \"description\": \"Does the instance use private IP.\"\n              },\n              {\n                \"key\": \"instance_id\",\n                \"description\": \"The instance ID.\"\n              },\n              {\n                \"key\": \"compute_engine\",\n                \"description\": \"The compute engine used for this Pipeline (MapReduce or Spark).\"\n              },\n              {\n                \"key\": \"pipeline_id\",\n                \"description\": \"The Pipeline ID.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"datafusion.googleapis.com/Instance\",\n            \"displayName\": \"Instance\",\n            \"description\": \"An instance of Cloud Data Fusion.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The ID of the customer project.\"\n              },\n              {\n                \"key\": \"org_id\",\n                \"description\": \"The ID of the organization that the customer project belongs to.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The zone/region that the instance is hosted in.\"\n              },\n              {\n                \"key\": \"version\",\n                \"description\": \"The data plane version of the instance.\"\n              },\n              {\n                \"key\": \"edition\",\n                \"description\": \"The edition of the instance.\"\n              },\n              {\n                \"key\": \"is_private\",\n                \"description\": \"Does the instance use private IP.\"\n              },\n              {\n                \"key\": \"instance_id\",\n                \"description\": \"The instance ID.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"datafusion.googleapis.com/Plugin\",\n            \"displayName\": \"Plugin\",\n            \"description\": \"An instance of a plugin in a deployed pipeline.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The ID of the customer project.\"\n              },\n              {\n                \"key\": \"org_id\",\n                \"description\": \"The ID of the organization that the customer project belongs to.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The zone/region that the instance is hosted in.\"\n              },\n              {\n                \"key\": \"instance_id\",\n                \"description\": \"The instance ID.\"\n              },\n              {\n                \"key\": \"edition\",\n                \"description\": \"The edition of the instance.\"\n              },\n              {\n                \"key\": \"is_private\",\n                \"description\": \"Does the instance use private IP.\"\n              },\n              {\n                \"key\": \"plugin_type\",\n                \"description\": \"The type of the plugin.\"\n              },\n              {\n                \"key\": \"plugin_name\",\n                \"description\": \"The name of the plugin.\"\n              },\n              {\n                \"key\": \"plugin_version\",\n                \"description\": \"The version of the plugin.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"datafusion.googleapis.com/MonitoringAgent\",\n            \"displayName\": \"MonitoringAgent\",\n            \"description\": \"An instance of Monitoring Agent in Cloud Data Fusion.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The ID of the customer project.\"\n              },\n              {\n                \"key\": \"org_id\",\n                \"description\": \"The ID of the organization that the customer project belongs to.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The zone/region that the instance is hosted in.\"\n              },\n              {\n                \"key\": \"version\",\n                \"description\": \"The data plane version of the instance.\"\n              },\n              {\n                \"key\": \"edition\",\n                \"description\": \"The edition of the instance.\"\n              },\n              {\n                \"key\": \"is_private\",\n                \"description\": \"Does the instance use private IP.\"\n              },\n              {\n                \"key\": \"instance_id\",\n                \"description\": \"The instance ID.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"datafusion.googleapis.com/ExternalPipeline\",\n            \"displayName\": \"Pipeline\",\n            \"description\": \"A deployed Pipeline in an external (not in GCP) Data Fusion instance.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The ID of the customer project.\"\n              },\n              {\n                \"key\": \"org_id\",\n                \"description\": \"The ID of the organization that the customer project belongs to.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The GCP region where to store metrics.\"\n              },\n              {\n                \"key\": \"cluster_id\",\n                \"description\": \"Cluster ID that the instance is hosted in.\"\n              },\n              {\n                \"key\": \"instance_id\",\n                \"description\": \"The instance ID.\"\n              },\n              {\n                \"key\": \"pipeline_id\",\n                \"description\": \"The Pipeline ID.\"\n              },\n              {\n                \"key\": \"version\",\n                \"description\": \"The data plane version of the instance.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"datafusion.googleapis.com/ExternalInstance\",\n            \"displayName\": \"Instance\",\n            \"description\": \"An instance of external (not in GCP) Data Fusion.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The ID of the customer project.\"\n              },\n              {\n                \"key\": \"org_id\",\n                \"description\": \"The ID of the organization that the customer project belongs to.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The GCP region where to store metrics.\"\n              },\n              {\n                \"key\": \"cluster_id\",\n                \"description\": \"Cluster ID that the instance is hosted in.\"\n              },\n              {\n                \"key\": \"version\",\n                \"description\": \"The data plane version of the instance.\"\n              },\n              {\n                \"key\": \"instance_id\",\n                \"description\": \"The instance ID.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"datafusion.googleapis.com/ExternalPlugin\",\n            \"displayName\": \"Plugin\",\n            \"description\": \"An instance of a plugin in a deployed pipeline in an external (not in GCP) Data Fusion instance.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The ID of the customer project.\"\n              },\n              {\n                \"key\": \"org_id\",\n                \"description\": \"The ID of the organization that the customer project belongs to.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The zone/region that the instance is hosted in.\"\n              },\n              {\n                \"key\": \"instance_id\",\n                \"description\": \"The instance ID.\"\n              },\n              {\n                \"key\": \"plugin_type\",\n                \"description\": \"The type of the plugin.\"\n              },\n              {\n                \"key\": \"plugin_name\",\n                \"description\": \"The name of the plugin.\"\n              },\n              {\n                \"key\": \"plugin_version\",\n                \"description\": \"The version of the plugin.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"datafusion.googleapis.com/ExternalMonitoringAgent\",\n            \"displayName\": \"MonitoringAgent\",\n            \"description\": \"An instance of external Monitoring Agent (not in GCP).\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The ID of the customer project.\"\n              },\n              {\n                \"key\": \"org_id\",\n                \"description\": \"The ID of the organization that the customer project belongs to.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The zone/region that the instance is hosted in.\"\n              },\n              {\n                \"key\": \"version\",\n                \"description\": \"The data plane version of the instance.\"\n              },\n              {\n                \"key\": \"instance_id\",\n                \"description\": \"The instance ID.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"datafusion.googleapis.com/Pipeline\",\n              \"metrics\": [\n                \"datafusion.googleapis.com/pipeline/runs_completed_count\",\n                \"datafusion.googleapis.com/pipeline/plugin/records_in_count\",\n                \"datafusion.googleapis.com/pipeline/plugin/records_out_count\",\n                \"datafusion.googleapis.com/pipeline/plugin/bytes_in_count\",\n                \"datafusion.googleapis.com/pipeline/plugin/bytes_out_count\",\n                \"datafusion.googleapis.com/pipeline/dataproc/provisioning_latency\",\n                \"datafusion.googleapis.com/pipeline/dataproc/api_request_count\",\n                \"datafusion.googleapis.com/pipeline/pipeline_run_time\",\n                \"datafusion.googleapis.com/pipeline/preview_run_time\",\n                \"datafusion.googleapis.com/pipeline/bytes_read_count\",\n                \"datafusion.googleapis.com/pipeline/bytes_shuffled_count\",\n                \"datafusion.googleapis.com/pipeline/bytes_written_count\",\n                \"datafusion.googleapis.com/pipeline/plugin_count\",\n                \"datafusion.googleapis.com/instance/tms_persist_count\",\n                \"datafusion.googleapis.com/instance/tms_subscriber_fetch_count\",\n                \"datafusion.googleapis.com/instance/tms_subscriber_fetch_time\",\n                \"datafusion.googleapis.com/instance/tms_subscriber_process_delay\",\n                \"datafusion.googleapis.com/instance/tms_subscriber_process_duration\",\n                \"datafusion.googleapis.com/pipeline/pipeline_start_latency\",\n                \"datafusion.googleapis.com/pipeline/logs_count\",\n                \"datafusion.googleapis.com/pipeline/failed_runs_classified_count\",\n                \"datafusion.googleapis.com/pipeline/schedule_job_count\",\n                \"datafusion.googleapis.com/pipeline/schedule_job_latency\",\n                \"datafusion.googleapis.com/pipeline/schedule_job_notification_failure_count\",\n                \"datafusion.googleapis.com/pipeline/bqpushdown/engine_bytes_billed_count\",\n                \"datafusion.googleapis.com/pipeline/bqpushdown/engine_bytes_processed_count\",\n                \"datafusion.googleapis.com/pipeline/bqpushdown/engine_slot_count\",\n                \"datafusion.googleapis.com/pipeline/bqpushdown/records_in_count\",\n                \"datafusion.googleapis.com/pipeline/bqpushdown/records_out_count\",\n                \"datafusion.googleapis.com/pipeline/bqpushdown/records_pulled_count\",\n                \"datafusion.googleapis.com/pipeline/bqpushdown/records_pushed_count\",\n                \"datafusion.googleapis.com/pipeline/bqpushdown/stages_count\",\n                \"datafusion.googleapis.com/pipeline/bqpushdown/stages_join_count\",\n                \"datafusion.googleapis.com/pipeline/bqpushdown/stages_transform_count\",\n                \"datafusion.googleapis.com/pipeline/bqpushdown/stages_pulled_count\",\n                \"datafusion.googleapis.com/pipeline/bqpushdown/stages_pushed_count\",\n                \"datafusion.googleapis.com/pipeline/bqpushdown/stages_spark_pulled_count\",\n                \"datafusion.googleapis.com/pipeline/bqpushdown/stages_spark_pushed_count\",\n                \"datafusion.googleapis.com/pipeline/bqpushdown/stages_read_count\",\n                \"datafusion.googleapis.com/pipeline/bqpushdown/stages_write_count\",\n                \"datafusion.googleapis.com/pipeline/streaming_multi_source_count\",\n                \"datafusion.googleapis.com/pipeline/streaming_atleastonce_count\",\n                \"datafusion.googleapis.com/pipeline/state_store_access_count\",\n                \"datafusion.googleapis.com/pipeline/state_store_access_latency\",\n                \"datafusion.googleapis.com/pipeline/program_status_event_published_count\",\n                \"datafusion.googleapis.com/pipeline/program_status_event_spark_metrics_fetch_latency\",\n                \"datafusion.googleapis.com/pipeline/create_deploy_event_count\",\n                \"datafusion.googleapis.com/pipeline/edit_deploy_event_count\",\n                \"datafusion.googleapis.com/pipeline/upgrade_deploy_event_count\",\n                \"datafusion.googleapis.com/pipeline/wrangler_directive_count\",\n                \"datafusion.googleapis.com/pipeline/wrangler_jexl_category_count\",\n                \"datafusion.googleapis.com/pipeline/wrangler_hash_algo_count\",\n                \"datafusion.googleapis.com/pipeline/lineage/attempted_calls_count\",\n                \"datafusion.googleapis.com/pipeline/lineage/failed_calls_count\",\n                \"datafusion.googleapis.com/pipeline/lineage/processes_count\",\n                \"datafusion.googleapis.com/pipeline/lineage/runs_count\",\n                \"datafusion.googleapis.com/pipeline/lineage/lineage_events_count\",\n                \"datafusion.googleapis.com/pipeline/bytes_processed_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"datafusion.googleapis.com/Instance\",\n              \"metrics\": [\n                \"datafusion.googleapis.com/instance/api_request_count\",\n                \"datafusion.googleapis.com/instance/api_request_received_count\",\n                \"datafusion.googleapis.com/instance/metric_emitted_count\",\n                \"datafusion.googleapis.com/instance/service_available\",\n                \"datafusion.googleapis.com/instance/pipeline_count\",\n                \"datafusion.googleapis.com/instance/concurrent_pipeline_launches_count\",\n                \"datafusion.googleapis.com/instance/concurrent_pipeline_running_count\",\n                \"datafusion.googleapis.com/instance/draft_count\",\n                \"datafusion.googleapis.com/instance/namespace_count\",\n                \"datafusion.googleapis.com/instance/pod_restart_count\",\n                \"datafusion.googleapis.com/instance/pod_status\",\n                \"datafusion.googleapis.com/instance/api_response_times\",\n                \"datafusion.googleapis.com/instance/system_logs_count\",\n                \"datafusion.googleapis.com/instance/log_event_queue_size\",\n                \"datafusion.googleapis.com/instance/log_process_min_delay\",\n                \"datafusion.googleapis.com/instance/log_process_max_delay\",\n                \"datafusion.googleapis.com/instance/log_process_count\",\n                \"datafusion.googleapis.com/instance/authorization_check_count\",\n                \"datafusion.googleapis.com/instance/authorization_check_time\",\n                \"datafusion.googleapis.com/instance/pipeline_connection_request_count\",\n                \"datafusion.googleapis.com/instance/heap_memory_used\",\n                \"datafusion.googleapis.com/instance/heap_memory_max\",\n                \"datafusion.googleapis.com/instance/cpu_load_per_processor_scaled\",\n                \"datafusion.googleapis.com/instance/total_thread_count\",\n                \"datafusion.googleapis.com/instance/source_control_management/git_operation_times\",\n                \"datafusion.googleapis.com/instance/source_control_management/repository_sizes\",\n                \"datafusion.googleapis.com/instance/workload_identity_namespaces\",\n                \"datafusion.googleapis.com/instance/credential_identities\",\n                \"datafusion.googleapis.com/instance/credential_profiles\",\n                \"datafusion.googleapis.com/instance/source_control_management/total_operation_count\",\n                \"datafusion.googleapis.com/instance/source_control_management/total_app_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"datafusion.googleapis.com/Plugin\",\n              \"metrics\": [\n                \"datafusion.googleapis.com/plugin/deployed_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"datafusion.googleapis.com/MonitoringAgent\",\n              \"metrics\": [\n                \"datafusion.googleapis.com/monitoring_agent/workers\",\n                \"datafusion.googleapis.com/monitoring_agent/pipeline_logs_count\",\n                \"datafusion.googleapis.com/monitoring_agent/system_logs_count\",\n                \"datafusion.googleapis.com/monitoring_agent/logs_process_duration\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"datafusion.googleapis.com/ExternalPipeline\",\n              \"metrics\": [\n                \"datafusion.googleapis.com/external_pipeline/runs_completed_count\",\n                \"datafusion.googleapis.com/external_pipeline/failed_runs_classified_count\",\n                \"datafusion.googleapis.com/external_pipeline/pipeline_run_time\",\n                \"datafusion.googleapis.com/external_pipeline/preview_run_time\",\n                \"datafusion.googleapis.com/external_pipeline/plugin_count\",\n                \"datafusion.googleapis.com/external_pipeline/provisioner/provisioning_latency\",\n                \"datafusion.googleapis.com/external_pipeline/streaming_multi_source_count\",\n                \"datafusion.googleapis.com/external_pipeline/streaming_atleastonce_count\",\n                \"datafusion.googleapis.com/external_pipeline/state_store_access_count\",\n                \"datafusion.googleapis.com/external_pipeline/state_store_access_latency\",\n                \"datafusion.googleapis.com/external_pipeline/create_deploy_event_count\",\n                \"datafusion.googleapis.com/external_pipeline/edit_deploy_event_count\",\n                \"datafusion.googleapis.com/external_pipeline/upgrade_deploy_event_count\",\n                \"datafusion.googleapis.com/external_pipeline/bytes_processed_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"datafusion.googleapis.com/ExternalInstance\",\n              \"metrics\": [\n                \"datafusion.googleapis.com/external_instance/api_request_count\",\n                \"datafusion.googleapis.com/external_instance/heap_memory_used\",\n                \"datafusion.googleapis.com/external_instance/heap_memory_max\",\n                \"datafusion.googleapis.com/external_instance/cpu_load_per_processor_scaled\",\n                \"datafusion.googleapis.com/external_instance/total_thread_count\",\n                \"datafusion.googleapis.com/external_instance/service_available\",\n                \"datafusion.googleapis.com/external_instance/pipeline_count\",\n                \"datafusion.googleapis.com/external_instance/draft_count\",\n                \"datafusion.googleapis.com/external_instance/namespace_count\",\n                \"datafusion.googleapis.com/external_instance/pod_restart_count\",\n                \"datafusion.googleapis.com/external_instance/pod_status\",\n                \"datafusion.googleapis.com/external_instance/metric_emitted_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"datafusion.googleapis.com/ExternalPlugin\",\n              \"metrics\": [\n                \"datafusion.googleapis.com/external_plugin/deployed_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"datafusion.googleapis.com/ExternalMonitoringAgent\",\n              \"metrics\": [\n                \"datafusion.googleapis.com/external_monitoring_agent/workers\",\n                \"datafusion.googleapis.com/external_monitoring_agent/pipeline_logs_count\",\n                \"datafusion.googleapis.com/external_monitoring_agent/system_logs_count\",\n                \"datafusion.googleapis.com/external_monitoring_agent/logs_process_duration\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340071\"\n    },\n    {\n      \"name\": \"projects/12340071/services/dataplex.googleapis.com\",\n      \"config\": {\n        \"name\": \"dataplex.googleapis.com\",\n        \"title\": \"Cloud Dataplex API\",\n        \"documentation\": {\n          \"summary\": \"Dataplex API is used to manage the lifecycle of data lakes.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"dataplex.googleapis.com/Lake\",\n            \"displayName\": \"Cloud Dataplex Lake\",\n            \"description\": \"A Cloud Dataplex Lake.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of GCP project associated with this resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The GCP region associated with this resource.\"\n              },\n              {\n                \"key\": \"lake_id\",\n                \"description\": \"The identifier of this Lake resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"dataplex.googleapis.com/Zone\",\n            \"displayName\": \"Cloud Dataplex Zone\",\n            \"description\": \"A Zone within a Cloud Dataplex Lake.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of GCP project associated with this resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The GCP region associated with this resource.\"\n              },\n              {\n                \"key\": \"lake_id\",\n                \"description\": \"The identifier of the Lake resource containing this resource.\"\n              },\n              {\n                \"key\": \"zone_id\",\n                \"description\": \"The identifier of this Zone resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"dataplex.googleapis.com/Asset\",\n            \"displayName\": \"Cloud Dataplex Asset\",\n            \"description\": \"An Asset within a Cloud Dataplex Lake.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of GCP project associated with this resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The GCP region associated with this resource.\"\n              },\n              {\n                \"key\": \"lake_id\",\n                \"description\": \"The identifier of the Lake resource containing this resource.\"\n              },\n              {\n                \"key\": \"zone_id\",\n                \"description\": \"The identifier of the Zone resource containing this resource.\"\n              },\n              {\n                \"key\": \"asset_id\",\n                \"description\": \"The identifier of this Asset resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"dataplex.googleapis.com/Environment\",\n            \"displayName\": \"Cloud Dataplex Environment\",\n            \"description\": \"An Environment within a Cloud Dataplex Lake.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of GCP project associated with this resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The GCP region associated with this resource.\"\n              },\n              {\n                \"key\": \"lake_id\",\n                \"description\": \"The identifier of the Lake resource containing this resource.\"\n              },\n              {\n                \"key\": \"environment_id\",\n                \"description\": \"The identifier of this Environment resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"dataplex.googleapis.com/Lake\",\n              \"metrics\": [\n                \"dataplex.googleapis.com/lake/requires_action\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"dataplex.googleapis.com/Zone\",\n              \"metrics\": [\n                \"dataplex.googleapis.com/zone/requires_action\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"dataplex.googleapis.com/Asset\",\n              \"metrics\": [\n                \"dataplex.googleapis.com/asset/requires_action\",\n                \"dataplex.googleapis.com/asset/active\",\n                \"dataplex.googleapis.com/asset/data_items\",\n                \"dataplex.googleapis.com/asset/data_size\",\n                \"dataplex.googleapis.com/asset/tables\",\n                \"dataplex.googleapis.com/asset/filesets\",\n                \"dataplex.googleapis.com/asset/entities_pending_bigquery_metadata_updates\",\n                \"dataplex.googleapis.com/asset/entities_pending_bigquery_iampolicy_updates\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340071\"\n    },\n    {\n      \"name\": \"projects/12340071/services/dataproc-control.googleapis.com\",\n      \"config\": {\n        \"name\": \"dataproc-control.googleapis.com\",\n        \"title\": \"Cloud Dataproc Control API\",\n        \"documentation\": {\n          \"summary\": \"Manages internal resources for Google Cloud Dataproc.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340071\"\n    },\n    {\n      \"name\": \"projects/12340071/services/dataproc.googleapis.com\",\n      \"config\": {\n        \"name\": \"dataproc.googleapis.com\",\n        \"title\": \"Cloud Dataproc API\",\n        \"documentation\": {\n          \"summary\": \"Manages Hadoop-based clusters and jobs on Google Cloud Platform.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340071\"\n    },\n    {\n      \"name\": \"projects/12340071/services/datastore.googleapis.com\",\n      \"config\": {\n        \"name\": \"datastore.googleapis.com\",\n        \"title\": \"Cloud Datastore API\",\n        \"documentation\": {\n          \"summary\": \"Accesses the schemaless NoSQL database to provide fully managed, robust, scalable storage for your application.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340071\"\n    },\n    {\n      \"name\": \"projects/12340071/services/deploymentmanager.googleapis.com\",\n      \"config\": {\n        \"name\": \"deploymentmanager.googleapis.com\",\n        \"title\": \"Cloud Deployment Manager V2 API\",\n        \"documentation\": {\n          \"summary\": \"The Google Cloud Deployment Manager v2 API provides services for configuring, deploying, and\\nviewing Google Cloud services and APIs via templates which specify deployments of Cloud\\nresources.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340071\"\n    },\n    {\n      \"name\": \"projects/12340071/services/dns.googleapis.com\",\n      \"config\": {\n        \"name\": \"dns.googleapis.com\",\n        \"title\": \"Cloud DNS API\",\n        \"documentation\": {},\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340071\"\n    },\n    {\n      \"name\": \"projects/12340071/services/essentialcontacts.googleapis.com\",\n      \"config\": {\n        \"name\": \"essentialcontacts.googleapis.com\",\n        \"title\": \"Essential Contacts API\",\n        \"documentation\": {},\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340071\"\n    },\n    {\n      \"name\": \"projects/12340071/services/gkebackup.googleapis.com\",\n      \"config\": {\n        \"name\": \"gkebackup.googleapis.com\",\n        \"title\": \"Backup for GKE API\",\n        \"documentation\": {\n          \"summary\": \"Backup for GKE is a managed Kubernetes workload backup and restore service\\nfor GKE clusters.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"gkebackup.googleapis.com/BackupPlan\",\n            \"displayName\": \"GKE Backup Plan\",\n            \"description\": \"A backup plan provides configuration, location, and management functions for a sequence of backups.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the Google Cloud container associated with the resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The Google Cloud location where this backupPlan resides.\"\n              },\n              {\n                \"key\": \"backup_plan_id\",\n                \"description\": \"The name of the backupPlan.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"gkebackup.googleapis.com/RestorePlan\",\n            \"displayName\": \"GKE Restore Plan\",\n            \"description\": \"A restore plan defines the configuration of a series of restore operations to be performed against backups which belong to the specified backup plan.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the Google Cloud container associated with the resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The Google Cloud location where this restorePlan resides.\"\n              },\n              {\n                \"key\": \"restore_plan_id\",\n                \"description\": \"The name of the restorePlan.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"gkebackup.googleapis.com/Project\",\n            \"displayName\": \"Backup for GKE Project\",\n            \"description\": \"A Project in the Backup for GKE API.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project associated with this resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The Google Cloud location of the resource.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"gkebackup.googleapis.com/BackupPlan\",\n              \"metrics\": [\n                \"gkebackup.googleapis.com/backup_created_count\",\n                \"gkebackup.googleapis.com/backup_deleted_count\",\n                \"gkebackup.googleapis.com/backup_completion_times\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"gkebackup.googleapis.com/RestorePlan\",\n              \"metrics\": [\n                \"gkebackup.googleapis.com/restore_created_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"gkebackup.googleapis.com/Project\",\n              \"metrics\": [\n                \"gkebackup.googleapis.com/internal/backup_plan_existence\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340071\"\n    },\n    {\n      \"name\": \"projects/12340071/services/iam.googleapis.com\",\n      \"config\": {\n        \"name\": \"iam.googleapis.com\",\n        \"title\": \"Identity and Access Management (IAM) API\",\n        \"documentation\": {\n          \"summary\": \"Manages identity and access control for Google Cloud resources, including the creation of service accounts, which you can use to authenticate to Google and make API calls. Enabling this API also enables the IAM Service Account Credentials API (iamcredentials.googleapis.com). However, disabling this API doesn't disable the IAM Service Account Credentials API.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"iam_service_account\",\n            \"displayName\": \"IAM Service Account\",\n            \"description\": \"An IAM Service Account.\",\n            \"labels\": [\n              {\n                \"key\": \"project_id\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"unique_id\",\n                \"description\": \"The unique_id of the service account.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"iam.googleapis.com/WorkloadIdentityPoolProvider\",\n            \"displayName\": \"Workload Identity Pool Provider\",\n            \"description\": \"A workload identity pool provider.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location of the resource.\"\n              },\n              {\n                \"key\": \"pool_id\",\n                \"description\": \"The ID of the provider's workload identity pool parent resource.\"\n              },\n              {\n                \"key\": \"provider_id\",\n                \"description\": \"The ID of the workload identity pool provider resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"iam.googleapis.com/WorkforcePoolProvider\",\n            \"displayName\": \"Workforce Identity Pool Provider\",\n            \"description\": \"A workforce identity pool provider.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the Google Cloud organization associated with this resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location of the resource.\"\n              },\n              {\n                \"key\": \"pool_id\",\n                \"description\": \"The ID of the provider's workforce pool parent resource.\"\n              },\n              {\n                \"key\": \"provider_id\",\n                \"description\": \"The ID of the workforce pool provider resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"iam.googleapis.com/WorkforcePoolProvider\",\n              \"metrics\": [\n                \"iam.googleapis.com/workforce_identity_federation/count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"iam.googleapis.com/WorkloadIdentityPoolProvider\",\n              \"metrics\": [\n                \"iam.googleapis.com/workload_identity_federation/count\",\n                \"iam.googleapis.com/workload_identity_federation/key_usage_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"iam_service_account\",\n              \"metrics\": [\n                \"iam.googleapis.com/service_account/authn_events_count\",\n                \"iam.googleapis.com/service_account/key/authn_events_count\",\n                \"iam.googleapis.com/service_account/authn_events_count_preprod\",\n                \"iam.googleapis.com/service_account/key/authn_events_count_preprod\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340071\"\n    },\n    {\n      \"name\": \"projects/12340071/services/iamcredentials.googleapis.com\",\n      \"config\": {\n        \"name\": \"iamcredentials.googleapis.com\",\n        \"title\": \"IAM Service Account Credentials API\",\n        \"documentation\": {\n          \"summary\": \"Creates short-lived credentials for impersonating IAM service accounts. Disabling this API also disables the IAM API (iam.googleapis.com). However, enabling this API doesn't enable the IAM API.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340071\"\n    },\n    {\n      \"name\": \"projects/12340071/services/iap.googleapis.com\",\n      \"config\": {\n        \"name\": \"iap.googleapis.com\",\n        \"title\": \"Cloud Identity-Aware Proxy API\",\n        \"documentation\": {\n          \"summary\": \"Controls access to cloud applications running on Google Cloud Platform.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340071\"\n    },\n    {\n      \"name\": \"projects/12340071/services/logging.googleapis.com\",\n      \"config\": {\n        \"name\": \"logging.googleapis.com\",\n        \"title\": \"Cloud Logging API\",\n        \"documentation\": {\n          \"summary\": \"Writes log entries and manages your Cloud Logging configuration.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"logging.googleapis.com/ChargedProject\",\n            \"displayName\": \"Cloud logging target\",\n            \"description\": \"A cloud logging specialization target schema of cloud.ChargedProject.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The monitored resource container. Could be project, workspace, etc.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The service-specific notion of location.\"\n              },\n              {\n                \"key\": \"service\",\n                \"description\": \"The name of the API service with which the data is associated (e.g.,'logging.googleapis.com').\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"logging.googleapis.com/ChargedProject\",\n              \"metrics\": [\n                \"logging.googleapis.com/billing/ingested_bytes\",\n                \"logging.googleapis.com/billing/stored_bytes\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340071\"\n    },\n    {\n      \"name\": \"projects/12340071/services/monitoring.googleapis.com\",\n      \"config\": {\n        \"name\": \"monitoring.googleapis.com\",\n        \"title\": \"Cloud Monitoring API\",\n        \"documentation\": {\n          \"summary\": \"Manages your Cloud Monitoring data and configurations.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"monitoring.googleapis.com/ChargedProject\",\n            \"displayName\": \"Cloud monitoring target\",\n            \"description\": \"A cloud monitoring specialization target schema of cloud.ChargedProject.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The monitored resource container. Could be project, workspace, etc.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The service-specific notion of location.\"\n              },\n              {\n                \"key\": \"service\",\n                \"description\": \"The name of the API service with which the data is associated (e.g.,'monitoring.googleapis.com').\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"monitoring.googleapis.com/MetricStatistics\",\n            \"displayName\": \"Metric Statistics\",\n            \"description\": \"Information about a user-written metric in Cloud Monitoring.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project to which the metric is written, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The cloud region where the metric was received.\"\n              },\n              {\n                \"key\": \"metric_type\",\n                \"description\": \"The metric type.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"monitoring.googleapis.com/MetricIngestionAttribution\",\n            \"displayName\": \"Metric Ingestion Attribution\",\n            \"description\": \"Attribution for metric ingestion.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project to which the metric is written, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location of the resource that the metric ingestion was associated with, unless it was 'global', in which case this will be the cloud region where the metric was received.\"\n              },\n              {\n                \"key\": \"attribution_dimension\",\n                \"description\": \"The dimension used for attribution reporting. It is not recommended that aggregations are performed across dimensions because a single metric point can be recorded with multiple dimensions which could cause double counting. Currently only \\\"namespace\\\" and \\\"cluster\\\" are supported.\"\n              },\n              {\n                \"key\": \"attribution_id\",\n                \"description\": \"The attribution id of the source of the metric write.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"monitoring.googleapis.com/ChargedProject\",\n              \"metrics\": [\n                \"monitoring.googleapis.com/billing/bytes_ingested\",\n                \"monitoring.googleapis.com/billing/samples_ingested\",\n                \"monitoring.googleapis.com/internal/billing/non_chargeable_samples_ingested\",\n                \"monitoring.googleapis.com/internal/stats/filtered_sample_count\",\n                \"monitoring.googleapis.com/internal/stats/filtered_byte_count\",\n                \"monitoring.googleapis.com/internal/stats/metrics_queried_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"monitoring.googleapis.com/MetricStatistics\",\n              \"metrics\": [\n                \"monitoring.googleapis.com/collection/write_request_count\",\n                \"monitoring.googleapis.com/collection/write_request_point_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"monitoring.googleapis.com/MetricIngestionAttribution\",\n              \"metrics\": [\n                \"monitoring.googleapis.com/collection/attribution/sample_count\",\n                \"monitoring.googleapis.com/collection/attribution/write_sample_count\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340071\"\n    }\n  ],\n  \"nextPageToken\": \"ch0KG0IZbW9uaXRvcmluZy5nb29nbGVhcGlzLmNvbQ==\"\n}\n"
  },
  {
    "path": "test-data/cloudasset1/project.tf",
    "content": "/**\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nlocals {\n  project_id = var.project_id\n}\n\nprovider \"google\" {\n  project = local.project_id\n}\n\nresource \"google_project_service\" \"cloudasset\" {\n  project = var.project_id\n  service = \"cloudasset.googleapis.com\"\n}\n\noutput \"project_nr\" {\n  value = var.project_nr\n}\n\noutput \"org_id\" {\n  value = var.org_id\n}\n\noutput \"project_id\" {\n  value = local.project_id\n}\n\noutput \"folder_id\" {\n  value = var.folder_id\n}\n"
  },
  {
    "path": "test-data/cloudasset1/variable.tf",
    "content": "variable \"billing_account_id\" { default = \"\" }\n\nvariable \"org_id\" { default = \"\" }\nvariable \"folder_id\" { default = \"\" }\nvariable \"project_id\" { default = \"\" }\nvariable \"project_nr\" { default = \" \" }\n"
  },
  {
    "path": "test-data/cloudrun1/Makefile",
    "content": "PROJECT_ID  := $(shell terraform output -raw project_id)\nPROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix)\nPROJECT_NR  := $(shell terraform output -raw project_nr)\nORG_ID      := $(shell terraform output -raw org_id)\nCURL         = ../../bin/curl-wrap.sh\nJSON_CLEANER = ../../bin/json-cleaner\nREGION_1     = us-central1\n\nFAKE_PROJECT_ID_SUFFIX = aaaa\nFAKE_PROJECT_NR = 123400010\nFAKE_ORG_ID = 11112222\nSED_SUBST_FAKE = sed -e \"s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/\" \\\n\t\t     -e \"s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/\" \\\n\t\t     -e \"s/$(ORG_ID)/$(FAKE_ORG_ID)/\" \\\n\nall:\t\\\n\tjson-dumps/locations.json \\\n\tjson-dumps/cloudrun_services.json \\\n\tjson-dumps/iam-policy.json \\\n\tjson-dumps/iam-service-accounts.json \\\n\tjson-dumps/project.json \\\n\tjson-dumps/services.json\n\njson-dumps/project.json:\n\t$(CURL) -fsS \\\n\t\t'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/services.json:\n\t$(CURL) -fv \\\n\t        'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/cloudrun_services.json:\n\t$(CURL) -fsS \\\n\t  'https://run.googleapis.com/v1/projects/$(PROJECT_ID)/locations/$(REGION_1)/services' \\\n\t\t| $(JSON_CLEANER) cloudrun \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/iam-service-accounts.json:\n\t$(CURL) -fsS \\\n\t\t'https://iam.googleapis.com/v1/projects/$(PROJECT_ID)/serviceAccounts' \\\n\t\t| $(JSON_CLEANER) service-accounts \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/iam-policy.json:\n\t$(CURL) -fsS \\\n\t\t'https://cloudresourcemanager.googleapis.com/v1/projects/$(PROJECT_ID):getIamPolicy' \\\n\t\t-X POST  --header \"Content-Type:text/json\" \\\n\t\t-d \"\" \\\n\t\t| $(JSON_CLEANER) other \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/locations.json:\n\t$(CURL) -fsS \\\n\t  'https://run.googleapis.com/v1/projects/$(PROJECT_ID)/locations' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n"
  },
  {
    "path": "test-data/cloudrun1/cloudrun1.tf",
    "content": "resource \"google_cloud_run_service\" \"default\" {\n  project  = google_project.project.project_id\n  name     = \"cloudrun1\"\n  location = \"us-central1\"\n\n  template {\n    spec {\n      containers {\n        image = \"us-docker.pkg.dev/cloudrun/container/hello\"\n      }\n    }\n  }\n\n  traffic {\n    percent         = 100\n    latest_revision = true\n  }\n}\n"
  },
  {
    "path": "test-data/cloudrun1/json-dumps/cloudrun_services.json",
    "content": "{\n  \"services\": [\n    {\n      \"conditions\": [\n        {\n          \"lastTransitionTime\": \"2022-08-12T11:55:27.598596Z\",\n          \"state\": \"CONDITION_SUCCEEDED\",\n          \"type\": \"RoutesReady\"\n        },\n        {\n          \"lastTransitionTime\": \"2022-08-12T11:55:26.536145Z\",\n          \"state\": \"CONDITION_SUCCEEDED\",\n          \"type\": \"ConfigurationsReady\"\n        }\n      ],\n      \"createTime\": \"2022-08-12T11:55:14.685868Z\",\n      \"creator\": \"REDACTED\",\n      \"etag\": \"\\\"CKL_2JcGEOCHhscC/cHJvamVjdHMvZ2NwZGlhZy1jbG91ZHJ1bjEtNWFlY2xtbHQvbG9jYXRpb25zL3VzLWNlbnRyYWwxL3NlcnZpY2VzL2Nsb3VkcnVuMQ\\\"\",\n      \"generation\": \"1\",\n      \"ingress\": \"INGRESS_TRAFFIC_ALL\",\n      \"lastModifier\": \"testuser@example.com\",\n      \"latestCreatedRevision\": \"projects/gcpdiag-cloudrun1-aaaa/locations/us-central1/services/cloudrun1/revisions/cloudrun1-fzzds\",\n      \"latestReadyRevision\": \"projects/gcpdiag-cloudrun1-aaaa/locations/us-central1/services/cloudrun1/revisions/cloudrun1-fzzds\",\n      \"launchStage\": \"GA\",\n      \"name\": \"projects/gcpdiag-cloudrun1-aaaa/locations/us-central1/services/cloudrun1\",\n      \"observedGeneration\": \"1\",\n      \"template\": {\n        \"containers\": [\n          {\n            \"image\": \"us-docker.pkg.dev/cloudrun/container/hello\",\n            \"ports\": [\n              {\n                \"containerPort\": 8080,\n                \"name\": \"http1\"\n              }\n            ],\n            \"resources\": {\n              \"cpuIdle\": true,\n              \"limits\": {\n                \"cpu\": \"1000m\",\n                \"memory\": \"512Mi\"\n              }\n            }\n          }\n        ],\n        \"maxInstanceRequestConcurrency\": 80,\n        \"scaling\": {\n          \"maxInstanceCount\": 100\n        },\n        \"serviceAccount\": \"123400010-compute@developer.gserviceaccount.com\",\n        \"timeout\": \"300s\"\n      },\n      \"terminalCondition\": {\n        \"lastTransitionTime\": \"2022-08-12T11:55:27.598596Z\",\n        \"state\": \"CONDITION_SUCCEEDED\",\n        \"type\": \"Ready\"\n      },\n      \"traffic\": [\n        {\n          \"percent\": 100,\n          \"type\": \"TRAFFIC_TARGET_ALLOCATION_TYPE_REVISION\"\n        }\n      ],\n      \"trafficStatuses\": [\n        {\n          \"percent\": 100,\n          \"type\": \"TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST\"\n        }\n      ],\n      \"uid\": \"4d9c2cd0-a23c-499a-adaf-844db1fc7350\",\n      \"updateTime\": \"2022-08-12T11:55:14.685868Z\",\n      \"uri\": \"https://cloudrun1-vavezhxkqq-uc.a.run.app\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/cloudrun1/json-dumps/iam-policy.json",
    "content": "{\n  \"bindings\": [\n    {\n      \"members\": [\n        \"serviceAccount:123400010@cloudbuild.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/cloudbuild.builds.builder\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-123400010@gcp-sa-cloudbuild.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/cloudbuild.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-123400010@containerregistry.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/containerregistry.ServiceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:123400010-compute@developer.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/editor\"\n    },\n    {\n      \"members\": [\n        \"user:testuser@example.com\"\n      ],\n      \"role\": \"roles/owner\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-123400010@gcp-sa-pubsub.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/pubsub.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-123400010@serverless-robot-prod.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/run.serviceAgent\"\n    }\n  ],\n  \"etag\": \"BwXmCdbeyfA=\",\n  \"version\": 1\n}\n"
  },
  {
    "path": "test-data/cloudrun1/json-dumps/iam-service-accounts.json",
    "content": "{\n  \"accounts\": [\n    {\n      \"displayName\": \"Default compute service account\",\n      \"email\": \"123400010-compute@developer.gserviceaccount.com\",\n      \"etag\": \"MDEwMjE5MjA=\",\n      \"name\": \"projects/gcpdiag-cloudrun1-aaaa/serviceAccounts/123400010-compute@developer.gserviceaccount.com\",\n      \"oauth2ClientId\": \"REDACTED\",\n      \"projectId\": \"gcpdiag-cloudrun1-aaaa\",\n      \"uniqueId\": \"115693944847802201137\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/cloudrun1/json-dumps/locations.json",
    "content": "{\n  \"locations\": [\n    {\n      \"name\": \"gcpdiag-cloudrun1-aaaa/locations/asia-east1\",\n      \"locationId\": \"asia-east1\",\n      \"displayName\": \"Taiwan\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun1-aaaa/locations/asia-east2\",\n      \"locationId\": \"asia-east2\",\n      \"displayName\": \"Hong Kong\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun1-aaaa/locations/asia-northeast1\",\n      \"locationId\": \"asia-northeast1\",\n      \"displayName\": \"Tokyo\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun1-aaaa/locations/asia-northeast2\",\n      \"locationId\": \"asia-northeast2\",\n      \"displayName\": \"Osaka\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun1-aaaa/locations/asia-northeast3\",\n      \"locationId\": \"asia-northeast3\",\n      \"displayName\": \"Seoul\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun1-aaaa/locations/asia-south1\",\n      \"locationId\": \"asia-south1\",\n      \"displayName\": \"Mumbai\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun1-aaaa/locations/asia-south2\",\n      \"locationId\": \"asia-south2\",\n      \"displayName\": \"Delhi\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun1-aaaa/locations/asia-southeast1\",\n      \"locationId\": \"asia-southeast1\",\n      \"displayName\": \"Singapore\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun1-aaaa/locations/asia-southeast2\",\n      \"locationId\": \"asia-southeast2\",\n      \"displayName\": \"Jakarta\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun1-aaaa/locations/australia-southeast1\",\n      \"locationId\": \"australia-southeast1\",\n      \"displayName\": \"Sydney\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun1-aaaa/locations/australia-southeast2\",\n      \"locationId\": \"australia-southeast2\",\n      \"displayName\": \"Melbourne\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun1-aaaa/locations/europe-central2\",\n      \"locationId\": \"europe-central2\",\n      \"displayName\": \"Warsaw\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun1-aaaa/locations/europe-north1\",\n      \"locationId\": \"europe-north1\",\n      \"displayName\": \"Finland\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun1-aaaa/locations/europe-southwest1\",\n      \"locationId\": \"europe-southwest1\",\n      \"displayName\": \"Madrid\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun1-aaaa/locations/europe-west1\",\n      \"locationId\": \"europe-west1\",\n      \"displayName\": \"Belgium\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun1-aaaa/locations/europe-west2\",\n      \"locationId\": \"europe-west2\",\n      \"displayName\": \"London\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun1-aaaa/locations/europe-west3\",\n      \"locationId\": \"europe-west3\",\n      \"displayName\": \"Frankfurt\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun1-aaaa/locations/europe-west4\",\n      \"locationId\": \"europe-west4\",\n      \"displayName\": \"Netherlands\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun1-aaaa/locations/europe-west6\",\n      \"locationId\": \"europe-west6\",\n      \"displayName\": \"Zurich\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun1-aaaa/locations/europe-west8\",\n      \"locationId\": \"europe-west8\",\n      \"displayName\": \"Milan\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun1-aaaa/locations/europe-west9\",\n      \"locationId\": \"europe-west9\",\n      \"displayName\": \"Paris\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun1-aaaa/locations/northamerica-northeast1\",\n      \"locationId\": \"northamerica-northeast1\",\n      \"displayName\": \"Montréal\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun1-aaaa/locations/northamerica-northeast2\",\n      \"locationId\": \"northamerica-northeast2\",\n      \"displayName\": \"Toronto\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun1-aaaa/locations/southamerica-east1\",\n      \"locationId\": \"southamerica-east1\",\n      \"displayName\": \"São Paulo\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun1-aaaa/locations/southamerica-west1\",\n      \"locationId\": \"southamerica-west1\",\n      \"displayName\": \"Santiago\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun1-aaaa/locations/us-central1\",\n      \"locationId\": \"us-central1\",\n      \"displayName\": \"Iowa\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun1-aaaa/locations/us-east1\",\n      \"locationId\": \"us-east1\",\n      \"displayName\": \"South Carolina\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun1-aaaa/locations/us-east4\",\n      \"locationId\": \"us-east4\",\n      \"displayName\": \"Northern Virginia\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun1-aaaa/locations/us-east5\",\n      \"locationId\": \"us-east5\",\n      \"displayName\": \"Columbus\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun1-aaaa/locations/us-south1\",\n      \"locationId\": \"us-south1\",\n      \"displayName\": \"Dallas\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun1-aaaa/locations/us-west1\",\n      \"locationId\": \"us-west1\",\n      \"displayName\": \"Oregon\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun1-aaaa/locations/us-west2\",\n      \"locationId\": \"us-west2\",\n      \"displayName\": \"Los Angeles\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun1-aaaa/locations/us-west3\",\n      \"locationId\": \"us-west3\",\n      \"displayName\": \"Salt Lake City\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun1-aaaa/locations/us-west4\",\n      \"locationId\": \"us-west4\",\n      \"displayName\": \"Las Vegas\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/cloudrun1/json-dumps/project.json",
    "content": "{\n  \"name\": \"projects/123400010\",\n  \"parent\": \"folders/373737373737\",\n  \"projectId\": \"gcpdiag-cloudrun1-aaaa\",\n  \"state\": \"ACTIVE\",\n  \"displayName\": \"gcpdiag test - cloudrun1\",\n  \"createTime\": \"2022-08-12T11:45:50.484Z\",\n  \"updateTime\": \"2022-08-12T11:45:51.971Z\",\n  \"etag\": \"O/fr9Ol/yE2tzfNqR7HTow==\",\n  \"labels\": {\n    \"gcpdiag\": \"test\"\n  }\n}\n"
  },
  {
    "path": "test-data/cloudrun1/json-dumps/services.json",
    "content": "{\n  \"services\": [\n    {\n      \"name\": \"projects/123400010/services/cloudbuild.googleapis.com\",\n      \"config\": {\n        \"name\": \"cloudbuild.googleapis.com\",\n        \"title\": \"Cloud Build API\",\n        \"documentation\": {\n          \"summary\": \"Creates and manages builds on Google Cloud Platform.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/123400010\"\n    },\n    {\n      \"name\": \"projects/123400010/services/containerregistry.googleapis.com\",\n      \"config\": {\n        \"name\": \"containerregistry.googleapis.com\",\n        \"title\": \"Container Registry API\",\n        \"documentation\": {\n          \"summary\": \"Google Container Registry provides secure, private Docker image storage on Google Cloud Platform.  Our API follows the Docker Registry API specification, so we are fully compatible with the Docker CLI client, as well as standard tooling using the Docker Registry API.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/123400010\"\n    },\n    {\n      \"name\": \"projects/123400010/services/logging.googleapis.com\",\n      \"config\": {\n        \"name\": \"logging.googleapis.com\",\n        \"title\": \"Cloud Logging API\",\n        \"documentation\": {\n          \"summary\": \"Writes log entries and manages your Cloud Logging configuration.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"logging.googleapis.com/ChargedProject\",\n            \"displayName\": \"Cloud logging target\",\n            \"description\": \"A cloud logging specialization target schema of cloud.ChargedProject.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The monitored resource container. Could be project, workspace, etc.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The service-specific notion of location.\"\n              },\n              {\n                \"key\": \"service\",\n                \"description\": \"The name of the API service with which the data is associated (e.g.,'logging.googleapis.com').\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"logging.googleapis.com/ChargedProject\",\n              \"metrics\": [\n                \"logging.googleapis.com/billing/ingested_bytes\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/123400010\"\n    },\n    {\n      \"name\": \"projects/123400010/services/pubsub.googleapis.com\",\n      \"config\": {\n        \"name\": \"pubsub.googleapis.com\",\n        \"title\": \"Cloud Pub/Sub API\",\n        \"documentation\": {\n          \"summary\": \"Provides reliable, many-to-many, asynchronous messaging between applications.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/123400010\"\n    },\n    {\n      \"name\": \"projects/123400010/services/run.googleapis.com\",\n      \"config\": {\n        \"name\": \"run.googleapis.com\",\n        \"title\": \"Cloud Run Admin API\",\n        \"documentation\": {\n          \"summary\": \"Deploy and manage user provided container images that scale automatically based on incoming requests. The Cloud Run Admin API v1 follows the Knative Serving API specification, while v2 is aligned with Google Cloud AIP-based API standards, as described in https://google.aip.dev/.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"run.googleapis.com/revision\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"run.googleapis.com/service_name\"\n              },\n              {\n                \"key\": \"run.googleapis.com/revision_name\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"run.googleapis.com/configuration_name\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              }\n            ]\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"run.googleapis.com/revision\",\n              \"metrics\": [\n                \"run.googleapis.com/request_count\",\n                \"run.googleapis.com/request_latencies\",\n                \"run.googleapis.com/container/instance_time\",\n                \"run.googleapis.com/container/cpu/allocation_time\",\n                \"run.googleapis.com/container/memory/allocation_time\",\n                \"run.googleapis.com/container/labelled_instance_time\",\n                \"run.googleapis.com/container/cpu/scaled_usage\",\n                \"run.googleapis.com/container/memory/utilization\",\n                \"run.googleapis.com/tenant_project\",\n                \"run.googleapis.com/internal/eventflow_filter/cloudevent_recordedtime_latencies\",\n                \"run.googleapis.com/internal/eventflow_filter/cloudevent_time_latencies\",\n                \"run.googleapis.com/internal/eventflow_filter/transformation_count\",\n                \"run.googleapis.com/internal/eventflow_filter/transformation_latencies\",\n                \"run.googleapis.com/internal/pod_service_client/request_count\",\n                \"run.googleapis.com/internal/pod_service_client/request_latencies\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/123400010\"\n    },\n    {\n      \"name\": \"projects/123400010/services/storage-api.googleapis.com\",\n      \"config\": {\n        \"name\": \"storage-api.googleapis.com\",\n        \"title\": \"Google Cloud Storage JSON API\",\n        \"documentation\": {\n          \"summary\": \"Lets you store and retrieve potentially-large, immutable data objects.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/123400010\"\n    },\n    {\n      \"name\": \"projects/123400010/services/storage-component.googleapis.com\",\n      \"config\": {\n        \"name\": \"storage-component.googleapis.com\",\n        \"title\": \"Cloud Storage\",\n        \"documentation\": {\n          \"summary\": \"Google Cloud Storage is a RESTful service for storing and accessing your data on Google's\\n    infrastructure.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"serviceruntime.googleapis.com/api\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_version\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_method\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/consumer_project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/consumer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/producer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/consumer_resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/api\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/api/consumer/request_count\",\n                \"serviceruntime.googleapis.com/api/consumer/error_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_used_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_refund_count\",\n                \"serviceruntime.googleapis.com/api/consumer/total_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_overhead_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/backend_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/response_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer\",\n                \"serviceruntime.googleapis.com/quota/used\",\n                \"serviceruntime.googleapis.com/quota/limit\",\n                \"serviceruntime.googleapis.com/quota/exceeded\",\n                \"serviceruntime.googleapis.com/allocation/consumer/quota_used_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/consumer_quota\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/quota/rate/consumer/used_count\",\n                \"serviceruntime.googleapis.com/quota/rate/consumer/refund_count\",\n                \"serviceruntime.googleapis.com/quota/allocation/consumer/usage\",\n                \"serviceruntime.googleapis.com/quota/consumer/limit\",\n                \"serviceruntime.googleapis.com/quota/consumer/exceeded\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/123400010\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/cloudrun1/project.tf",
    "content": "/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nresource \"random_string\" \"project_id_suffix\" {\n  length  = 8\n  number  = true\n  lower   = true\n  upper   = false\n  special = false\n}\n\nresource \"google_project\" \"project\" {\n  name            = \"gcpdiag test - cloudrun1\"\n  project_id      = \"gcpdiag-cloudrun1-${random_string.project_id_suffix.id}\"\n  org_id          = var.folder_id == \"\" ? var.org_id : null\n  folder_id       = var.folder_id != \"\" ? var.folder_id : null\n  billing_account = var.billing_account_id\n  labels = {\n    gcpdiag : \"test\"\n  }\n}\n\nresource \"google_project_service\" \"cloudbuild\" {\n  project = google_project.project.project_id\n  service = \"cloudbuild.googleapis.com\"\n}\n\nresource \"google_project_service\" \"run\" {\n  project    = google_project.project.project_id\n  service    = \"run.googleapis.com\"\n  depends_on = [google_project_service.cloudbuild]\n}\n\noutput \"project_id\" {\n  value = google_project.project.project_id\n}\n\noutput \"project_id_suffix\" {\n  value = random_string.project_id_suffix.id\n}\n\noutput \"project_nr\" {\n  value = google_project.project.number\n}\n\noutput \"org_id\" {\n  value = var.org_id\n}\n"
  },
  {
    "path": "test-data/cloudrun1/variables.tf",
    "content": "variable \"billing_account_id\" {}\n\nvariable \"org_id\" {}\nvariable \"folder_id\" { default = \"\" }\n"
  },
  {
    "path": "test-data/cloudrun2/Makefile",
    "content": "PROJECT_ID  := $(shell terraform output -raw project_id)\nPROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix)\nPROJECT_NR  := $(shell terraform output -raw project_nr)\nORG_ID      := $(shell terraform output -raw org_id)\nCURL         = ../../bin/curl-wrap.sh\nJSON_CLEANER = ../../bin/json-cleaner\nREGION_1     = us-central1\n\nFAKE_PROJECT_ID_SUFFIX = aaaa\nFAKE_PROJECT_NR = 123400010\nFAKE_ORG_ID = 11112222\nSED_SUBST_FAKE = sed -e \"s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/\" \\\n\t\t     -e \"s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/\" \\\n\t\t     -e \"s/$(ORG_ID)/$(FAKE_ORG_ID)/\" \\\n\nall:\t\\\n\tjson-dumps/locations.json \\\n\tjson-dumps/cloudrun_services.json \\\n\tjson-dumps/iam-policy.json \\\n\tjson-dumps/iam-service-accounts.json \\\n\tjson-dumps/project.json \\\n\tjson-dumps/services.json\n\njson-dumps/project.json:\n\t$(CURL) -fsS \\\n\t\t'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/services.json:\n\t$(CURL) -fv \\\n\t        'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/cloudrun_services.json:\n\t$(CURL) -fsS \\\n\t  'https://run.googleapis.com/v2/projects/$(PROJECT_ID)/locations/$(REGION_1)/services' \\\n\t\t| $(JSON_CLEANER) cloudrun \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/iam-service-accounts.json:\n\t$(CURL) -fsS \\\n\t\t'https://iam.googleapis.com/v1/projects/$(PROJECT_ID)/serviceAccounts' \\\n\t\t| $(JSON_CLEANER) service-accounts \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/iam-policy.json:\n\t$(CURL) -fsS \\\n\t\t'https://cloudresourcemanager.googleapis.com/v1/projects/$(PROJECT_ID):getIamPolicy' \\\n\t\t-X POST  --header \"Content-Type:text/json\" \\\n\t\t-d \"\" \\\n\t\t| $(JSON_CLEANER) other \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/locations.json:\n\t$(CURL) -fsS \\\n\t  'https://run.googleapis.com/v1/projects/$(PROJECT_ID)/locations' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n"
  },
  {
    "path": "test-data/cloudrun2/artifact_registry.tf",
    "content": "data \"google_client_config\" \"default\" {\n}\n\ndata \"google_client_openid_userinfo\" \"me\" {\n}\n\nresource \"google_artifact_registry_repository\" \"cloudrun_repo\" {\n\n  project       = google_project.project.project_id\n  location      = \"us-central1\"\n  repository_id = \"cloudrun-repository\"\n  format        = \"DOCKER\"\n}\n\n\nlocals {\n  repository_url = \"${google_artifact_registry_repository.cloudrun_repo.location}-docker.pkg.dev/${google_project.project.project_id}/${google_artifact_registry_repository.cloudrun_repo.repository_id}\"\n}\n"
  },
  {
    "path": "test-data/cloudrun2/build_configs/deploy_run_with_bad_container/Dockerfile",
    "content": "FROM ubuntu:24.04@sha256:a08e551cb33850e4740772b38217fc1796a66da2506d312abe51acda354ff061\n"
  },
  {
    "path": "test-data/cloudrun2/build_configs/deploy_run_with_bad_container/cloudbuild.yaml",
    "content": "steps:\n  - name: gcr.io/cloud-builders/docker\n    args:\n      - build\n      - -t\n      - ${_IMAGE}\n      - .\n  - name: gcr.io/cloud-builders/docker\n    args:\n      - push\n      - ${_IMAGE}\n  - name: gcr.io/cloud-builders/gcloud\n    args:\n      - run\n      - deploy\n      - invalid-container\n      - --region\n      - us-central1\n      - --image\n      - ${_IMAGE}\n      - --no-allow-unauthenticated\n    allowFailure: true\n"
  },
  {
    "path": "test-data/cloudrun2/cloud_run.tf",
    "content": "# We are not using cloud run terraform resource in this file since we want to make the service to fail to deploy which would break\nresource \"null_resource\" \"failed_deployment1\" {\n  provisioner \"local-exec\" {\n    command = <<-EOT\n      cd build_configs/deploy_run_with_bad_container\n      gcloud builds submit --project ${google_project.project.project_id} --config cloudbuild.yaml \\\n        --substitutions _IMAGE=${local.repository_url}/not_http_image\n    EOT\n  }\n  depends_on = [google_artifact_registry_repository.cloudrun_repo]\n}\n\nresource \"null_resource\" \"failed_deployment2\" {\n  provisioner \"local-exec\" {\n    command = <<-EOT\n              gcloud run deploy no-image-permission \\\n                --project ${google_project.project.project_id} \\\n                --region us-central1 \\\n                --image gcr.io/private-project/image \\\n                --no-allow-unauthenticated \\\n                || true\n    EOT\n  }\n  depends_on = [google_artifact_registry_repository.cloudrun_repo]\n}\n\nresource \"null_resource\" \"failed_deployment3\" {\n  provisioner \"local-exec\" {\n    command = <<-EOT\n              gcloud run deploy image-does-not-exist \\\n                --project ${google_project.project.project_id} \\\n                --region us-central1 \\\n                --image ${local.repository_url}/missing-image \\\n                --no-allow-unauthenticated \\\n                || true\n    EOT\n  }\n  depends_on = [google_artifact_registry_repository.cloudrun_repo]\n}\n"
  },
  {
    "path": "test-data/cloudrun2/json-dumps/cloudrun_services.json",
    "content": "{\n  \"services\": [\n    {\n      \"client\": \"gcloud\",\n      \"clientVersion\": \"481.0.0\",\n      \"conditions\": [\n        {\n          \"lastTransitionTime\": \"2024-06-28T14:22:04.115832Z\",\n          \"message\": \"Revision 'invalid-container-00001-glb' is not ready and cannot serve traffic. The user-provided container failed to start and listen on the port defined provided by the PORT=8080 environment variable. Logs for this revision might contain more information.\\n\\nLogs URL: https://console.cloud.google.com/logs/viewer?project=gcpdiag-cloudrun2-aaaa&resource=cloud_run_revision/service_name/invalid-container/revision_name/invalid-container-00001-glb&advancedFilter=resource.type%3D%22cloud_run_revision%22%0Aresource.labels.service_name%3D%22invalid-container%22%0Aresource.labels.revision_name%3D%22invalid-container-00001-glb%22 \\nFor more troubleshooting guidance, see https://cloud.google.com/run/docs/troubleshooting#container-failed-to-start\",\n          \"revisionReason\": \"HEALTH_CHECK_CONTAINER_ERROR\",\n          \"state\": \"CONDITION_FAILED\",\n          \"type\": \"RoutesReady\"\n        },\n        {\n          \"lastTransitionTime\": \"2024-06-28T14:21:58.515179Z\",\n          \"state\": \"CONDITION_SUCCEEDED\",\n          \"type\": \"ConfigurationsReady\"\n        }\n      ],\n      \"createTime\": \"2024-06-28T14:21:58.431731Z\",\n      \"creator\": \"REDACTED\",\n      \"etag\": \"\\\"CIaO-7MGELji7s0B/cHJvamVjdHMvZ2NwZGlhZy1jbG91ZHJ1bjItNGZvYXMzbWovbG9jYXRpb25zL3VzLWNlbnRyYWwxL3NlcnZpY2VzL2ludmFsaWQtY29udGFpbmVy\\\"\",\n      \"generation\": \"1\",\n      \"ingress\": \"INGRESS_TRAFFIC_ALL\",\n      \"lastModifier\": \"123400010-compute@developer.gserviceaccount.com\",\n      \"latestCreatedRevision\": \"projects/gcpdiag-cloudrun2-aaaa/locations/us-central1/services/invalid-container/revisions/invalid-container-00001-glb\",\n      \"latestReadyRevision\": \"projects/gcpdiag-cloudrun2-aaaa/locations/us-central1/services/invalid-container/revisions/invalid-container-00001-glb\",\n      \"launchStage\": \"GA\",\n      \"name\": \"projects/gcpdiag-cloudrun2-aaaa/locations/us-central1/services/invalid-container\",\n      \"observedGeneration\": \"1\",\n      \"template\": {\n        \"containers\": [\n          {\n            \"image\": \"us-central1-docker.pkg.dev/gcpdiag-cloudrun2-aaaa/cloudrun-repository/not_http_image\",\n            \"ports\": [\n              {\n                \"containerPort\": 8080,\n                \"name\": \"http1\"\n              }\n            ],\n            \"resources\": {\n              \"cpuIdle\": true,\n              \"limits\": {\n                \"cpu\": \"1000m\",\n                \"memory\": \"512Mi\"\n              },\n              \"startupCpuBoost\": true\n            },\n            \"startupProbe\": {\n              \"failureThreshold\": 1,\n              \"periodSeconds\": 240,\n              \"tcpSocket\": {\n                \"port\": 8080\n              },\n              \"timeoutSeconds\": 240\n            }\n          }\n        ],\n        \"maxInstanceRequestConcurrency\": 80,\n        \"scaling\": {\n          \"maxInstanceCount\": 100\n        },\n        \"serviceAccount\": \"123400010-compute@developer.gserviceaccount.com\",\n        \"timeout\": \"300s\"\n      },\n      \"terminalCondition\": {\n        \"lastTransitionTime\": \"2024-06-28T14:22:04.115832Z\",\n        \"message\": \"Revision 'invalid-container-00001-glb' is not ready and cannot serve traffic. The user-provided container failed to start and listen on the port defined provided by the PORT=8080 environment variable. Logs for this revision might contain more information.\\n\\nLogs URL: https://console.cloud.google.com/logs/viewer?project=gcpdiag-cloudrun2-aaaa&resource=cloud_run_revision/service_name/invalid-container/revision_name/invalid-container-00001-glb&advancedFilter=resource.type%3D%22cloud_run_revision%22%0Aresource.labels.service_name%3D%22invalid-container%22%0Aresource.labels.revision_name%3D%22invalid-container-00001-glb%22 \\nFor more troubleshooting guidance, see https://cloud.google.com/run/docs/troubleshooting#container-failed-to-start\",\n        \"revisionReason\": \"HEALTH_CHECK_CONTAINER_ERROR\",\n        \"state\": \"CONDITION_FAILED\",\n        \"type\": \"Ready\"\n      },\n      \"traffic\": [\n        {\n          \"percent\": 100,\n          \"type\": \"TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST\"\n        }\n      ],\n      \"uid\": \"4ca2c930-7962-4fce-9470-987642372120\",\n      \"updateTime\": \"2024-06-28T14:21:58.431731Z\"\n    },\n    {\n      \"client\": \"gcloud\",\n      \"clientVersion\": \"482.0.0\",\n      \"conditions\": [\n        {\n          \"lastTransitionTime\": \"2024-06-28T14:21:38.354602Z\",\n          \"message\": \"Revision 'no-image-permission-00001-fst' is not ready and cannot serve traffic. Google Cloud Run Service Agent service-123400010@serverless-robot-prod.iam.gserviceaccount.com must have permission to read the image, gcr.io/private-project/image. Ensure that the provided container image URL is correct and that the above account has permission to access the image. If you just enabled the Cloud Run API, the permissions might take a few minutes to propagate. Note that the image is from project [private-project], which is not the same as this project [gcpdiag-cloudrun2-aaaa]. Permission must be granted to the Google Cloud Run Service Agent service-1076942843663@serverless-robot-prod.iam.gserviceaccount.com from this project. See https://cloud.google.com/run/docs/deploying#other-projects\",\n          \"reason\": \"CONTAINER_PERMISSION_DENIED\",\n          \"state\": \"CONDITION_FAILED\",\n          \"type\": \"RoutesReady\"\n        },\n        {\n          \"lastTransitionTime\": \"2024-06-28T14:21:38.119970Z\",\n          \"state\": \"CONDITION_SUCCEEDED\",\n          \"type\": \"ConfigurationsReady\"\n        }\n      ],\n      \"createTime\": \"2024-06-28T14:21:38.037709Z\",\n      \"creator\": \"REDACTED\",\n      \"etag\": \"\\\"CPKN-7MGEMjJ_RE/cHJvamVjdHMvZ2NwZGlhZy1jbG91ZHJ1bjItNGZvYXMzbWovbG9jYXRpb25zL3VzLWNlbnRyYWwxL3NlcnZpY2VzL25vLWltYWdlLXBlcm1pc3Npb24\\\"\",\n      \"generation\": \"1\",\n      \"ingress\": \"INGRESS_TRAFFIC_ALL\",\n      \"lastModifier\": \"testuser@example.com\",\n      \"latestCreatedRevision\": \"projects/gcpdiag-cloudrun2-aaaa/locations/us-central1/services/no-image-permission/revisions/no-image-permission-00001-fst\",\n      \"launchStage\": \"GA\",\n      \"name\": \"projects/gcpdiag-cloudrun2-aaaa/locations/us-central1/services/no-image-permission\",\n      \"observedGeneration\": \"1\",\n      \"template\": {\n        \"containers\": [\n          {\n            \"image\": \"gcr.io/private-project/image\",\n            \"ports\": [\n              {\n                \"containerPort\": 8080,\n                \"name\": \"http1\"\n              }\n            ],\n            \"resources\": {\n              \"cpuIdle\": true,\n              \"limits\": {\n                \"cpu\": \"1000m\",\n                \"memory\": \"512Mi\"\n              },\n              \"startupCpuBoost\": true\n            },\n            \"startupProbe\": {\n              \"failureThreshold\": 1,\n              \"periodSeconds\": 240,\n              \"tcpSocket\": {\n                \"port\": 8080\n              },\n              \"timeoutSeconds\": 240\n            }\n          }\n        ],\n        \"maxInstanceRequestConcurrency\": 80,\n        \"scaling\": {\n          \"maxInstanceCount\": 100\n        },\n        \"serviceAccount\": \"123400010-compute@developer.gserviceaccount.com\",\n        \"timeout\": \"300s\"\n      },\n      \"terminalCondition\": {\n        \"lastTransitionTime\": \"2024-06-28T14:21:38.354602Z\",\n        \"message\": \"Revision 'no-image-permission-00001-fst' is not ready and cannot serve traffic. Google Cloud Run Service Agent service-123400010@serverless-robot-prod.iam.gserviceaccount.com must have permission to read the image, gcr.io/private-project/image. Ensure that the provided container image URL is correct and that the above account has permission to access the image. If you just enabled the Cloud Run API, the permissions might take a few minutes to propagate. Note that the image is from project [private-project], which is not the same as this project [gcpdiag-cloudrun2-aaaa]. Permission must be granted to the Google Cloud Run Service Agent service-1076942843663@serverless-robot-prod.iam.gserviceaccount.com from this project. See https://cloud.google.com/run/docs/deploying#other-projects\",\n        \"reason\": \"CONTAINER_PERMISSION_DENIED\",\n        \"state\": \"CONDITION_FAILED\",\n        \"type\": \"Ready\"\n      },\n      \"traffic\": [\n        {\n          \"percent\": 100,\n          \"type\": \"TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST\"\n        }\n      ],\n      \"uid\": \"7af8a1c8-8758-48d4-9476-024c0f62c4d7\",\n      \"updateTime\": \"2024-06-28T14:21:38.037709Z\"\n    },\n    {\n      \"client\": \"gcloud\",\n      \"clientVersion\": \"482.0.0\",\n      \"conditions\": [\n        {\n          \"lastTransitionTime\": \"2024-06-28T14:21:38.873277Z\",\n          \"message\": \"Revision 'image-does-not-exist-00001-5w5' is not ready and cannot serve traffic. Image 'us-central1-docker.pkg.dev/gcpdiag-cloudrun2-aaaa/cloudrun-repository/missing-image' not found.\",\n          \"reason\": \"REVISION_FAILED\",\n          \"state\": \"CONDITION_FAILED\",\n          \"type\": \"RoutesReady\"\n        },\n        {\n          \"lastTransitionTime\": \"2024-06-28T14:21:37.988614Z\",\n          \"state\": \"CONDITION_SUCCEEDED\",\n          \"type\": \"ConfigurationsReady\"\n        }\n      ],\n      \"createTime\": \"2024-06-28T14:21:37.899709Z\",\n      \"creator\": \"REDACTED\",\n      \"etag\": \"\\\"CPGN-7MGEMjwga0D/cHJvamVjdHMvZ2NwZGlhZy1jbG91ZHJ1bjItNGZvYXMzbWovbG9jYXRpb25zL3VzLWNlbnRyYWwxL3NlcnZpY2VzL2ltYWdlLWRvZXMtbm90LWV4aXN0\\\"\",\n      \"generation\": \"1\",\n      \"ingress\": \"INGRESS_TRAFFIC_ALL\",\n      \"lastModifier\": \"testuser@example.com\",\n      \"latestCreatedRevision\": \"projects/gcpdiag-cloudrun2-aaaa/locations/us-central1/services/image-does-not-exist/revisions/image-does-not-exist-00001-5w5\",\n      \"launchStage\": \"GA\",\n      \"name\": \"projects/gcpdiag-cloudrun2-aaaa/locations/us-central1/services/image-does-not-exist\",\n      \"observedGeneration\": \"1\",\n      \"template\": {\n        \"containers\": [\n          {\n            \"image\": \"us-central1-docker.pkg.dev/gcpdiag-cloudrun2-aaaa/cloudrun-repository/missing-image\",\n            \"ports\": [\n              {\n                \"containerPort\": 8080,\n                \"name\": \"http1\"\n              }\n            ],\n            \"resources\": {\n              \"cpuIdle\": true,\n              \"limits\": {\n                \"cpu\": \"1000m\",\n                \"memory\": \"512Mi\"\n              },\n              \"startupCpuBoost\": true\n            },\n            \"startupProbe\": {\n              \"failureThreshold\": 1,\n              \"periodSeconds\": 240,\n              \"tcpSocket\": {\n                \"port\": 8080\n              },\n              \"timeoutSeconds\": 240\n            }\n          }\n        ],\n        \"maxInstanceRequestConcurrency\": 80,\n        \"scaling\": {\n          \"maxInstanceCount\": 100\n        },\n        \"serviceAccount\": \"123400010-compute@developer.gserviceaccount.com\",\n        \"timeout\": \"300s\"\n      },\n      \"terminalCondition\": {\n        \"lastTransitionTime\": \"2024-06-28T14:21:38.873277Z\",\n        \"message\": \"Revision 'image-does-not-exist-00001-5w5' is not ready and cannot serve traffic. Image 'us-central1-docker.pkg.dev/gcpdiag-cloudrun2-aaaa/cloudrun-repository/missing-image' not found.\",\n        \"reason\": \"REVISION_FAILED\",\n        \"state\": \"CONDITION_FAILED\",\n        \"type\": \"Ready\"\n      },\n      \"traffic\": [\n        {\n          \"percent\": 100,\n          \"type\": \"TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST\"\n        }\n      ],\n      \"uid\": \"37324495-a964-42ce-a080-2995f68c8f35\",\n      \"updateTime\": \"2024-06-28T14:21:37.899709Z\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/cloudrun2/json-dumps/iam-policy.json",
    "content": "{\n  \"bindings\": [\n    {\n      \"members\": [\n        \"serviceAccount:service-123400010@gcp-sa-artifactregistry.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/artifactregistry.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:123400010@cloudbuild.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/cloudbuild.builds.builder\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-123400010@gcp-sa-cloudbuild.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/cloudbuild.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-123400010@containerregistry.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/containerregistry.ServiceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:123400010-compute@developer.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/editor\"\n    },\n    {\n      \"members\": [\n        \"user:testuser@example.com\"\n      ],\n      \"role\": \"roles/owner\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-123400010@gcp-sa-pubsub.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/pubsub.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-123400010@serverless-robot-prod.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/run.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-123400010@gcp-sa-websecurityscanner.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/websecurityscanner.serviceAgent\"\n    }\n  ],\n  \"etag\": \"BwYbovlVX5c=\",\n  \"version\": 1\n}\n"
  },
  {
    "path": "test-data/cloudrun2/json-dumps/iam-service-accounts.json",
    "content": "{\n  \"accounts\": [\n    {\n      \"displayName\": \"Default compute service account\",\n      \"email\": \"123400010-compute@developer.gserviceaccount.com\",\n      \"etag\": \"MDEwMjE5MjA=\",\n      \"name\": \"projects/gcpdiag-cloudrun2-aaaa/serviceAccounts/123400010-compute@developer.gserviceaccount.com\",\n      \"oauth2ClientId\": \"REDACTED\",\n      \"projectId\": \"gcpdiag-cloudrun2-aaaa\",\n      \"uniqueId\": \"106786160591595959857\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/cloudrun2/json-dumps/locations.json",
    "content": "{\n  \"locations\": [\n    {\n      \"name\": \"gcpdiag-cloudrun2-aaaa/locations/africa-south1\",\n      \"locationId\": \"africa-south1\",\n      \"displayName\": \"Johannesburg\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun2-aaaa/locations/asia-east1\",\n      \"locationId\": \"asia-east1\",\n      \"displayName\": \"Taiwan\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun2-aaaa/locations/asia-east2\",\n      \"labels\": {\n        \"run.googleapis.com/supportsPzs\": \"true\"\n      },\n      \"locationId\": \"asia-east2\",\n      \"displayName\": \"Hong Kong\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun2-aaaa/locations/asia-northeast1\",\n      \"locationId\": \"asia-northeast1\",\n      \"displayName\": \"Tokyo\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun2-aaaa/locations/asia-northeast2\",\n      \"locationId\": \"asia-northeast2\",\n      \"displayName\": \"Osaka\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun2-aaaa/locations/asia-northeast3\",\n      \"locationId\": \"asia-northeast3\",\n      \"displayName\": \"Seoul\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun2-aaaa/locations/asia-south1\",\n      \"locationId\": \"asia-south1\",\n      \"displayName\": \"Mumbai\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun2-aaaa/locations/asia-south2\",\n      \"locationId\": \"asia-south2\",\n      \"displayName\": \"Delhi\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun2-aaaa/locations/asia-southeast1\",\n      \"locationId\": \"asia-southeast1\",\n      \"displayName\": \"Singapore\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun2-aaaa/locations/asia-southeast2\",\n      \"locationId\": \"asia-southeast2\",\n      \"displayName\": \"Jakarta\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun2-aaaa/locations/australia-southeast1\",\n      \"labels\": {\n        \"run.googleapis.com/supportsPzs\": \"true\"\n      },\n      \"locationId\": \"australia-southeast1\",\n      \"displayName\": \"Sydney\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun2-aaaa/locations/australia-southeast2\",\n      \"locationId\": \"australia-southeast2\",\n      \"displayName\": \"Melbourne\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun2-aaaa/locations/europe-central2\",\n      \"locationId\": \"europe-central2\",\n      \"displayName\": \"Warsaw\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun2-aaaa/locations/europe-north1\",\n      \"locationId\": \"europe-north1\",\n      \"displayName\": \"Finland\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun2-aaaa/locations/europe-southwest1\",\n      \"locationId\": \"europe-southwest1\",\n      \"displayName\": \"Madrid\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun2-aaaa/locations/europe-west1\",\n      \"locationId\": \"europe-west1\",\n      \"displayName\": \"Belgium\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun2-aaaa/locations/europe-west10\",\n      \"locationId\": \"europe-west10\",\n      \"displayName\": \"Berlin\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun2-aaaa/locations/europe-west12\",\n      \"locationId\": \"europe-west12\",\n      \"displayName\": \"Turin\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun2-aaaa/locations/europe-west2\",\n      \"labels\": {\n        \"run.googleapis.com/supportsPzs\": \"true\"\n      },\n      \"locationId\": \"europe-west2\",\n      \"displayName\": \"London\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun2-aaaa/locations/europe-west3\",\n      \"labels\": {\n        \"run.googleapis.com/supportsPzs\": \"true\"\n      },\n      \"locationId\": \"europe-west3\",\n      \"displayName\": \"Frankfurt\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun2-aaaa/locations/europe-west4\",\n      \"locationId\": \"europe-west4\",\n      \"displayName\": \"Netherlands\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun2-aaaa/locations/europe-west6\",\n      \"locationId\": \"europe-west6\",\n      \"displayName\": \"Zurich\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun2-aaaa/locations/europe-west8\",\n      \"locationId\": \"europe-west8\",\n      \"displayName\": \"Milan\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun2-aaaa/locations/europe-west9\",\n      \"locationId\": \"europe-west9\",\n      \"displayName\": \"Paris\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun2-aaaa/locations/me-central1\",\n      \"locationId\": \"me-central1\",\n      \"displayName\": \"Doha\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun2-aaaa/locations/me-central2\",\n      \"locationId\": \"me-central2\",\n      \"displayName\": \"Dammam\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun2-aaaa/locations/me-west1\",\n      \"locationId\": \"me-west1\",\n      \"displayName\": \"Tel Aviv\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun2-aaaa/locations/northamerica-northeast1\",\n      \"locationId\": \"northamerica-northeast1\",\n      \"displayName\": \"Montréal\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun2-aaaa/locations/northamerica-northeast2\",\n      \"locationId\": \"northamerica-northeast2\",\n      \"displayName\": \"Toronto\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun2-aaaa/locations/southamerica-east1\",\n      \"locationId\": \"southamerica-east1\",\n      \"displayName\": \"São Paulo\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun2-aaaa/locations/southamerica-west1\",\n      \"locationId\": \"southamerica-west1\",\n      \"displayName\": \"Santiago\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun2-aaaa/locations/us-central1\",\n      \"labels\": {\n        \"initialized\": \"true\"\n      },\n      \"locationId\": \"us-central1\",\n      \"displayName\": \"Iowa\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun2-aaaa/locations/us-east1\",\n      \"locationId\": \"us-east1\",\n      \"displayName\": \"South Carolina\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun2-aaaa/locations/us-east4\",\n      \"labels\": {\n        \"run.googleapis.com/supportsPzs\": \"true\"\n      },\n      \"locationId\": \"us-east4\",\n      \"displayName\": \"Northern Virginia\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun2-aaaa/locations/us-east5\",\n      \"locationId\": \"us-east5\",\n      \"displayName\": \"Columbus\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun2-aaaa/locations/us-south1\",\n      \"locationId\": \"us-south1\",\n      \"displayName\": \"Dallas\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun2-aaaa/locations/us-west1\",\n      \"locationId\": \"us-west1\",\n      \"displayName\": \"Oregon\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun2-aaaa/locations/us-west2\",\n      \"locationId\": \"us-west2\",\n      \"displayName\": \"Los Angeles\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun2-aaaa/locations/us-west3\",\n      \"labels\": {\n        \"run.googleapis.com/supportsPzs\": \"true\"\n      },\n      \"locationId\": \"us-west3\",\n      \"displayName\": \"Salt Lake City\"\n    },\n    {\n      \"name\": \"gcpdiag-cloudrun2-aaaa/locations/us-west4\",\n      \"locationId\": \"us-west4\",\n      \"displayName\": \"Las Vegas\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/cloudrun2/json-dumps/project.json",
    "content": "{\n  \"name\": \"projects/123400010\",\n  \"parent\": \"folders/373737373737\",\n  \"projectId\": \"gcpdiag-cloudrun2-aaaa\",\n  \"state\": \"ACTIVE\",\n  \"displayName\": \"gcpdiag test - cloudrun2 \",\n  \"createTime\": \"2024-06-20T14:48:05.952136Z\",\n  \"updateTime\": \"2024-06-20T14:55:46.631667Z\",\n  \"etag\": \"W/\\\"77494eee40d241da\\\"\",\n  \"labels\": {\n    \"gcpdiag\": \"test\"\n  }\n}\n"
  },
  {
    "path": "test-data/cloudrun2/json-dumps/services.json",
    "content": "{\n  \"services\": [\n    {\n      \"name\": \"projects/123400010/services/artifactregistry.googleapis.com\",\n      \"config\": {\n        \"name\": \"artifactregistry.googleapis.com\",\n        \"title\": \"Artifact Registry API\",\n        \"documentation\": {\n          \"summary\": \"Store and manage build artifacts in a scalable and integrated service built on Google infrastructure.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"artifactregistry.googleapis.com/Location\",\n            \"displayName\": \"Artifact Registry Location\",\n            \"description\": \"A location in Artifact Registry.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP resource container associated with this resource, such as \\\"my_project\\\" or \\\"organizations/5678\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"artifactregistry.googleapis.com/Project\",\n            \"displayName\": \"Artifact Registry Project\",\n            \"description\": \"A Cloud project in Artifact Registry.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP resource container associated with this resource, such as \\\"my_project\\\" or \\\"organizations/5678\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"artifactregistry.googleapis.com/Repository\",\n            \"displayName\": \"Artifact Registry Repository\",\n            \"description\": \"A repository in Artifact Registry.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP resource container associated with this resource, such as \\\"my_project\\\" or \\\"organizations/5678\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              },\n              {\n                \"key\": \"repository_id\",\n                \"description\": \"The identifier of the Artifact Registry repository, such as \\\"my_repository\\\".\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"artifactregistry.googleapis.com/Location\",\n              \"metrics\": [\n                \"artifactregistry.googleapis.com/asia_multi_region_upstream_host_reads\",\n                \"artifactregistry.googleapis.com/europe_multi_region_upstream_host_reads\",\n                \"artifactregistry.googleapis.com/project_asia_multi_region_upstream_host_reads\",\n                \"artifactregistry.googleapis.com/project_europe_multi_region_upstream_host_reads\",\n                \"artifactregistry.googleapis.com/project_region_upstream_host_reads\",\n                \"artifactregistry.googleapis.com/project_us_multi_region_upstream_host_reads\",\n                \"artifactregistry.googleapis.com/quota/asia_multi_region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/asia_multi_region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/quota/europe_multi_region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/europe_multi_region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/quota/project_asia_multi_region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/project_asia_multi_region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/quota/project_europe_multi_region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/project_europe_multi_region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/quota/project_region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/project_region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/quota/project_us_multi_region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/project_us_multi_region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/quota/region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/quota/us_multi_region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/us_multi_region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/region_upstream_host_reads\",\n                \"artifactregistry.googleapis.com/us_multi_region_upstream_host_reads\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"artifactregistry.googleapis.com/Location\",\n              \"metrics\": [\n                \"artifactregistry.googleapis.com/quota/asia_multi_region_upstream_host_reads/limit\",\n                \"artifactregistry.googleapis.com/quota/europe_multi_region_upstream_host_reads/limit\",\n                \"artifactregistry.googleapis.com/quota/project_asia_multi_region_upstream_host_reads/limit\",\n                \"artifactregistry.googleapis.com/quota/project_europe_multi_region_upstream_host_reads/limit\",\n                \"artifactregistry.googleapis.com/quota/project_region_upstream_host_reads/limit\",\n                \"artifactregistry.googleapis.com/quota/project_us_multi_region_upstream_host_reads/limit\",\n                \"artifactregistry.googleapis.com/quota/region_upstream_host_reads/limit\",\n                \"artifactregistry.googleapis.com/quota/us_multi_region_upstream_host_reads/limit\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"artifactregistry.googleapis.com/Project\",\n              \"metrics\": [\n                \"artifactregistry.googleapis.com/project/api/request_count\",\n                \"artifactregistry.googleapis.com/project/api/request_latencies\",\n                \"artifactregistry.googleapis.com/project/request_count\",\n                \"artifactregistry.googleapis.com/project/request_latencies\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"artifactregistry.googleapis.com/Repository\",\n              \"metrics\": [\n                \"artifactregistry.googleapis.com/repository/api/request_count\",\n                \"artifactregistry.googleapis.com/repository/api/request_latencies\",\n                \"artifactregistry.googleapis.com/repository/request_count\",\n                \"artifactregistry.googleapis.com/repository/request_latencies\",\n                \"artifactregistry.googleapis.com/repository/size\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/123400010\"\n    },\n    {\n      \"name\": \"projects/123400010/services/cloudbuild.googleapis.com\",\n      \"config\": {\n        \"name\": \"cloudbuild.googleapis.com\",\n        \"title\": \"Cloud Build API\",\n        \"documentation\": {\n          \"summary\": \"Creates and manages builds on Google Cloud Platform.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"cloudbuild.googleapis.com/Location\",\n            \"displayName\": \"Cloud Build Location\",\n            \"description\": \"A location in the Cloud Build API.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identified of the GCP resource container associated with this resource, such as \\\"my_project\\\" or \\\"organizations/5678\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"cloudbuild.googleapis.com/GkeInstance\",\n            \"displayName\": \"GKE instance\",\n            \"description\": \"GKE instance.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP resource container associated with this resource, such as \\\"my_project\\\" or \\\"organizations/5678\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              },\n              {\n                \"key\": \"gke_instance_id\",\n                \"description\": \"The identifier of the GKE instance.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"cloudbuild.googleapis.com/PrivatePool\",\n            \"displayName\": \"Private Worker Pool\",\n            \"description\": \"Private Worker Pool.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP resource container associated with this resource, such as \\\"my_project\\\" or \\\"organizations/5678\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              },\n              {\n                \"key\": \"worker_pool_uuid\",\n                \"description\": \"The UUID of the worker pool.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"cloudbuild.googleapis.com/GkeInstance\",\n              \"metrics\": [\n                \"cloudbuild.googleapis.com/internal/gke_instance/pod\",\n                \"cloudbuild.googleapis.com/internal/gke_instance/node\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"cloudbuild.googleapis.com/PrivatePool\",\n              \"metrics\": [\n                \"cloudbuild.googleapis.com/internal/private_pool_ready_worker_replicas\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"cloudbuild.googleapis.com/Location\",\n              \"metrics\": [\n                \"cloudbuild.googleapis.com/concurrent_public_pool_build_cpus\",\n                \"cloudbuild.googleapis.com/quota/concurrent_public_pool_build_cpus/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"cloudbuild.googleapis.com/Location\",\n              \"metrics\": [\n                \"cloudbuild.googleapis.com/quota/concurrent_public_pool_build_cpus/limit\",\n                \"cloudbuild.googleapis.com/quota/concurrent_public_pool_build_cpus/usage\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/123400010\"\n    },\n    {\n      \"name\": \"projects/123400010/services/containerregistry.googleapis.com\",\n      \"config\": {\n        \"name\": \"containerregistry.googleapis.com\",\n        \"title\": \"Container Registry API\",\n        \"documentation\": {\n          \"summary\": \"Google Container Registry provides secure, private Docker image storage on Google Cloud Platform.  Our API follows the Docker Registry API specification, so we are fully compatible with the Docker CLI client, as well as standard tooling using the Docker Registry API.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/123400010\"\n    },\n    {\n      \"name\": \"projects/123400010/services/iam.googleapis.com\",\n      \"config\": {\n        \"name\": \"iam.googleapis.com\",\n        \"title\": \"Identity and Access Management (IAM) API\",\n        \"documentation\": {\n          \"summary\": \"Manages identity and access control for Google Cloud resources, including the creation of service accounts, which you can use to authenticate to Google and make API calls. Enabling this API also enables the IAM Service Account Credentials API (iamcredentials.googleapis.com). However, disabling this API doesn't disable the IAM Service Account Credentials API.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"iam_service_account\",\n            \"displayName\": \"IAM Service Account\",\n            \"description\": \"An IAM Service Account.\",\n            \"labels\": [\n              {\n                \"key\": \"project_id\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"unique_id\",\n                \"description\": \"The unique_id of the service account.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"iam.googleapis.com/WorkloadIdentityPoolProvider\",\n            \"displayName\": \"Workload Identity Pool Provider\",\n            \"description\": \"A workload identity pool provider.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location of the resource.\"\n              },\n              {\n                \"key\": \"pool_id\",\n                \"description\": \"The ID of the provider's workload identity pool parent resource.\"\n              },\n              {\n                \"key\": \"provider_id\",\n                \"description\": \"The ID of the workload identity pool provider resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"iam.googleapis.com/WorkforcePoolProvider\",\n            \"displayName\": \"Workforce Identity Pool Provider\",\n            \"description\": \"A workforce identity pool provider.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the Google Cloud organization associated with this resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location of the resource.\"\n              },\n              {\n                \"key\": \"pool_id\",\n                \"description\": \"The ID of the provider's workforce pool parent resource.\"\n              },\n              {\n                \"key\": \"provider_id\",\n                \"description\": \"The ID of the workforce pool provider resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"iam.googleapis.com/WorkloadIdentityPoolProvider\",\n              \"metrics\": [\n                \"iam.googleapis.com/workload_identity_federation/count\",\n                \"iam.googleapis.com/workload_identity_federation/key_usage_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"iam_service_account\",\n              \"metrics\": [\n                \"iam.googleapis.com/service_account/authn_events_count\",\n                \"iam.googleapis.com/service_account/key/authn_events_count\",\n                \"iam.googleapis.com/service_account/authn_events_count_preprod\",\n                \"iam.googleapis.com/service_account/key/authn_events_count_preprod\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"iam.googleapis.com/WorkforcePoolProvider\",\n              \"metrics\": [\n                \"iam.googleapis.com/workforce_identity_federation/count\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/123400010\"\n    },\n    {\n      \"name\": \"projects/123400010/services/iamcredentials.googleapis.com\",\n      \"config\": {\n        \"name\": \"iamcredentials.googleapis.com\",\n        \"title\": \"IAM Service Account Credentials API\",\n        \"documentation\": {\n          \"summary\": \"Creates short-lived credentials for impersonating IAM service accounts. Disabling this API also disables the IAM API (iam.googleapis.com). However, enabling this API doesn't enable the IAM API.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/123400010\"\n    },\n    {\n      \"name\": \"projects/123400010/services/logging.googleapis.com\",\n      \"config\": {\n        \"name\": \"logging.googleapis.com\",\n        \"title\": \"Cloud Logging API\",\n        \"documentation\": {\n          \"summary\": \"Writes log entries and manages your Cloud Logging configuration.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"logging.googleapis.com/ChargedProject\",\n            \"displayName\": \"Cloud logging target\",\n            \"description\": \"A cloud logging specialization target schema of cloud.ChargedProject.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The monitored resource container. Could be project, workspace, etc.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The service-specific notion of location.\"\n              },\n              {\n                \"key\": \"service\",\n                \"description\": \"The name of the API service with which the data is associated (e.g.,'logging.googleapis.com').\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"logging.googleapis.com/ChargedProject\",\n              \"metrics\": [\n                \"logging.googleapis.com/billing/ingested_bytes\",\n                \"logging.googleapis.com/billing/stored_bytes\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/123400010\"\n    },\n    {\n      \"name\": \"projects/123400010/services/pubsub.googleapis.com\",\n      \"config\": {\n        \"name\": \"pubsub.googleapis.com\",\n        \"title\": \"Cloud Pub/Sub API\",\n        \"documentation\": {\n          \"summary\": \"Provides reliable, many-to-many, asynchronous messaging between applications.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/123400010\"\n    },\n    {\n      \"name\": \"projects/123400010/services/run.googleapis.com\",\n      \"config\": {\n        \"name\": \"run.googleapis.com\",\n        \"title\": \"Cloud Run Admin API\",\n        \"documentation\": {\n          \"summary\": \"Deploy and manage user provided container images that scale automatically based on incoming requests. The Cloud Run Admin API v1 follows the Knative Serving API specification, while v2 is aligned with Google Cloud AIP-based API standards, as described in https://google.aip.dev/.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"run.googleapis.com/revision\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"run.googleapis.com/service_name\"\n              },\n              {\n                \"key\": \"run.googleapis.com/revision_name\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"run.googleapis.com/configuration_name\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              }\n            ]\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"run.googleapis.com/revision\",\n              \"metrics\": [\n                \"run.googleapis.com/request_count\",\n                \"run.googleapis.com/request_latencies\",\n                \"run.googleapis.com/container/instance_time\",\n                \"run.googleapis.com/container/cpu/allocation_time\",\n                \"run.googleapis.com/container/memory/allocation_time\",\n                \"run.googleapis.com/container/labelled_instance_time\",\n                \"run.googleapis.com/container/cpu/scaled_usage\",\n                \"run.googleapis.com/container/memory/utilization\",\n                \"run.googleapis.com/tenant_project\",\n                \"run.googleapis.com/internal/eventflow_filter/cloudevent_recordedtime_latencies\",\n                \"run.googleapis.com/internal/eventflow_filter/cloudevent_time_latencies\",\n                \"run.googleapis.com/internal/eventflow_filter/transformation_count\",\n                \"run.googleapis.com/internal/eventflow_filter/transformation_latencies\",\n                \"run.googleapis.com/internal/pod_service_client/request_count\",\n                \"run.googleapis.com/internal/pod_service_client/request_latencies\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/123400010\"\n    },\n    {\n      \"name\": \"projects/123400010/services/storage-api.googleapis.com\",\n      \"config\": {\n        \"name\": \"storage-api.googleapis.com\",\n        \"title\": \"Google Cloud Storage JSON API\",\n        \"documentation\": {\n          \"summary\": \"Lets you store and retrieve potentially-large, immutable data objects.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/123400010\"\n    },\n    {\n      \"name\": \"projects/123400010/services/storage-component.googleapis.com\",\n      \"config\": {\n        \"name\": \"storage-component.googleapis.com\",\n        \"title\": \"Cloud Storage\",\n        \"documentation\": {\n          \"summary\": \"Google Cloud Storage is a RESTful service for storing and accessing your data on Google's\\n    infrastructure.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"serviceruntime.googleapis.com/api\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_version\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_method\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/consumer_project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/consumer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/producer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/consumer_resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/api\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/api/consumer/request_count\",\n                \"serviceruntime.googleapis.com/api/consumer/error_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_used_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_refund_count\",\n                \"serviceruntime.googleapis.com/api/consumer/total_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_overhead_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/backend_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/response_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer\",\n                \"serviceruntime.googleapis.com/quota/used\",\n                \"serviceruntime.googleapis.com/quota/limit\",\n                \"serviceruntime.googleapis.com/quota/exceeded\",\n                \"serviceruntime.googleapis.com/allocation/consumer/quota_used_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/consumer_quota\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/quota/rate/consumer/used_count\",\n                \"serviceruntime.googleapis.com/quota/rate/consumer/refund_count\",\n                \"serviceruntime.googleapis.com/quota/allocation/consumer/usage\",\n                \"serviceruntime.googleapis.com/quota/consumer/limit\",\n                \"serviceruntime.googleapis.com/quota/consumer/exceeded\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/123400010\"\n    },\n    {\n      \"name\": \"projects/123400010/services/websecurityscanner.googleapis.com\",\n      \"config\": {\n        \"name\": \"websecurityscanner.googleapis.com\",\n        \"title\": \"Web Security Scanner API\",\n        \"documentation\": {\n          \"summary\": \"Scans your Compute and App Engine apps for common web vulnerabilities.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/123400010\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/cloudrun2/project.tf",
    "content": "/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nresource \"random_string\" \"project_id_suffix\" {\n  length  = 8\n  number  = true\n  lower   = true\n  upper   = false\n  special = false\n}\n\nresource \"google_project\" \"project\" {\n  name            = \"gcpdiag test - cloudrun2 \"\n  project_id      = var.project_id != \"\" ? var.project_id : \"gcpdiag-cloudrun2-${random_string.project_id_suffix.id}\"\n  org_id          = var.folder_id == \"\" ? var.org_id : null\n  folder_id       = var.folder_id != \"\" ? var.folder_id : null\n  billing_account = var.billing_account_id\n  labels = {\n    gcpdiag : \"test\"\n  }\n}\n\nresource \"google_project_service\" \"cloudbuild\" {\n  project = google_project.project.project_id\n  service = \"cloudbuild.googleapis.com\"\n}\n\nresource \"google_project_service\" \"artifactregistry\" {\n  project = google_project.project.project_id\n  service = \"artifactregistry.googleapis.com\"\n}\n\nresource \"google_project_service\" \"run\" {\n  project    = google_project.project.project_id\n  service    = \"run.googleapis.com\"\n  depends_on = [google_project_service.cloudbuild]\n}\n\noutput \"project_id\" {\n  value = google_project.project.project_id\n}\n\noutput \"project_id_suffix\" {\n  value = random_string.project_id_suffix.id\n}\n\noutput \"project_nr\" {\n  value = google_project.project.number\n}\n\noutput \"org_id\" {\n  value = var.org_id\n}\n"
  },
  {
    "path": "test-data/cloudrun2/variables.tf",
    "content": "variable \"billing_account_id\" {}\n\nvariable \"org_id\" {}\nvariable \"folder_id\" { default = \"\" }\nvariable \"project_id\" { default = \"\" }\n"
  },
  {
    "path": "test-data/cloudsql1/Makefile",
    "content": "PROJECT_ID  := $(shell terraform output -raw project_id)\nPROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix)\nPROJECT_NR  := $(shell terraform output -raw project_nr)\nCURL         = ../../bin/curl-wrap.sh\nJSON_CLEANER = ../../bin/json-cleaner\n\nFAKE_PROJECT_ID_SUFFIX = aaaa\nFAKE_PROJECT_NR = 12340006\nFAKE_ORG_ID = 11112222\nSED_SUBST_FAKE = sed -e \"s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/\" \\\n\t\t     -e \"s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/\" \\\n\t\t     -e \"s/$(ORG_ID)/$(FAKE_ORG_ID)/\" \\\n\nall:\t\\\n\tjson-dumps/services.json \\\n\tjson-dumps/project.json \\\n\tjson-dumps/cloudsql-instances.json\n\njson-dumps/services.json:\n\t$(CURL) -fsS \\\n\t  'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \\\n\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/project.json:\n\t$(CURL) -fsS \\\n\t  'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \\\n\t  | $(SED_SUBST_FAKE) >$@\n\njson-dumps/cloudsql-instances.json:\n\t$(CURL) -fsS \\\n\t  'https://sqladmin.googleapis.com/v1/projects/$(PROJECT_ID)/instances' \\\n\t  | $(SED_SUBST_FAKE) >$@\n"
  },
  {
    "path": "test-data/cloudsql1/json-dumps/cloudsql-instances.json",
    "content": "{\n  \"items\": [\n    {\n      \"kind\": \"sql#instance\",\n      \"state\": \"RUNNABLE\",\n      \"databaseVersion\": \"MYSQL_8_0\",\n      \"settings\": {\n        \"authorizedGaeApplications\": [],\n        \"tier\": \"db-f1-micro\",\n        \"kind\": \"sql#settings\",\n        \"availabilityType\": \"ZONAL\",\n        \"pricingPlan\": \"PER_USE\",\n        \"replicationType\": \"SYNCHRONOUS\",\n        \"activationPolicy\": \"ALWAYS\",\n        \"ipConfiguration\": {\n          \"privateNetwork\": \"projects/gcpdiag-cloudsql1-aaaa/global/networks/private-network\",\n          \"authorizedNetworks\": [],\n          \"ipv4Enabled\": false,\n          \"requireSsl\": false\n        },\n        \"locationPreference\": {\n          \"zone\": \"us-central1-a\",\n          \"kind\": \"sql#locationPreference\"\n        },\n        \"dataDiskType\": \"PD_SSD\",\n        \"backupConfiguration\": {\n          \"startTime\": \"06:00\",\n          \"kind\": \"sql#backupConfiguration\",\n          \"backupRetentionSettings\": {\n            \"retentionUnit\": \"COUNT\",\n            \"retainedBackups\": 7\n          },\n          \"enabled\": false,\n          \"transactionLogRetentionDays\": 7\n        },\n        \"settingsVersion\": \"1\",\n        \"storageAutoResizeLimit\": \"0\",\n        \"storageAutoResize\": true,\n        \"dataDiskSizeGb\": \"10\"\n      },\n      \"etag\": \"c4c69a19f017f91e28c66158a50b9a752d85b6aa8f5dbdd4ba018f656d96933b\",\n      \"ipAddresses\": [\n        {\n          \"type\": \"PRIVATE\",\n          \"ipAddress\": \"172.17.0.3\"\n        }\n      ],\n      \"serverCaCert\": {\n        \"kind\": \"sql#sslCert\",\n        \"certSerialNumber\": \"0\",\n        \"cert\": \"-----BEGIN CERTIFICATE-----\\nMIIDfzCCAmegAwIBAgIBADANBgkqhkiG9w0BAQsFADB3MS0wKwYDVQQuEyQzZTFm\\nYTc5OC0wYzc1LTRjMWEtYmRkZi00ZGZjZDVhY2YwNjQxIzAhBgNVBAMTGkdvb2ds\\nZSBDbG91ZCBTUUwgU2VydmVyIENBMRQwEgYDVQQKEwtHb29nbGUsIEluYzELMAkG\\nA1UEBhMCVVMwHhcNMjIwNTEwMDg0MDA2WhcNMzIwNTA3MDg0MTA2WjB3MS0wKwYD\\nVQQuEyQzZTFmYTc5OC0wYzc1LTRjMWEtYmRkZi00ZGZjZDVhY2YwNjQxIzAhBgNV\\nBAMTGkdvb2dsZSBDbG91ZCBTUUwgU2VydmVyIENBMRQwEgYDVQQKEwtHb29nbGUs\\nIEluYzELMAkGA1UEBhMCVVMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\\nAQDGV9bVV88MjegjzE4iZyP1GjxK4ahSffXDI5CwqIA+XYEFeA5JYY/5D3Amka9M\\nS/mgI/6Rhe9C46JPqG2vIkUsjrs1AZPWS7qJyQN2SZXqfl+vaMJHtHh88fQUjru4\\nixE/5W+PonhCUS6Amq3xm0rW929FuuVdzzTC5PC8ShCaprjEw0o6y0sa7fpS8vlp\\nGNrYwZdDViLIm+OuoIRIm7eVLx09GSpk5O0UTzqyPqNOXa1CB4bGYxuTlHCk+m32\\ntiKapH6Ee+vdhw1YppJVk9DDFn2EjcAjf+jxda1nBUxmX1uxHn8RsZUnztVdytxJ\\nHN3vy7t3q7Rmq/LF+djEODJ3AgMBAAGjFjAUMBIGA1UdEwEB/wQIMAYBAf8CAQAw\\nDQYJKoZIhvcNAQELBQADggEBABZjnPfPAFw/TP0nFnUbGMKgy6gwc30rdsAXS0qB\\n8H25ZUor6IXfCiQzmmMQYfyIG5T6/JuY83PKgRxew0XjKBYaCVa+GcOogzPrLCl4\\nLcfyJeGLJVZ5dqYaK9Qcm4Qp2KoN3iaEyX9q6Dbrw8owo28VFjBMULeNglh5Kb7/\\nZgv7vIV8R8Z04GQteeHk8y/OJwrA0i0v9gZSy+prZzqr8LXbIH59kziSf8IEfAQc\\n4LFXaQjxHYMQfGqcH8bZEqGzA/sL9wHMDUoUqNybKI7BacRiV2tdad0xUGDyEqUj\\nbSTk1IzCCWNwqwtWWTr10O118ezIk12hwNxC1VrQ8+pCNug=\\n-----END CERTIFICATE-----\",\n        \"commonName\": \"C=US,O=Google\\\\, Inc,CN=Google Cloud SQL Server CA,dnQualifier=3e1fa798-0c75-4c1a-bddf-4dfcd5acf064\",\n        \"sha1Fingerprint\": \"0502e192d2b9abe562a339192263ad9b3c26198c\",\n        \"instance\": \"sql1\",\n        \"createTime\": \"2022-05-10T08:40:06.232Z\",\n        \"expirationTime\": \"2032-05-07T08:41:06.232Z\"\n      },\n      \"instanceType\": \"CLOUD_SQL_INSTANCE\",\n      \"project\": \"gcpdiag-cloudsql1-aaaa\",\n      \"serviceAccountEmailAddress\": \"p12340006-4lw5u9@gcp-sa-cloud-sql.iam.gserviceaccount.com\",\n      \"backendType\": \"SECOND_GEN\",\n      \"selfLink\": \"https://sqladmin.googleapis.com/v1/projects/gcpdiag-cloudsql1-aaaa/instances/sql1\",\n      \"connectionName\": \"gcpdiag-cloudsql1-aaaa:us-central1:sql1\",\n      \"name\": \"sql1\",\n      \"region\": \"us-central1\",\n      \"gceZone\": \"us-central1-a\",\n      \"databaseInstalledVersion\": \"MYSQL_8_0_26\",\n      \"createTime\": \"2022-05-10T08:37:30.089Z\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/cloudsql1/json-dumps/iam-policy.json",
    "content": "{\n  \"bindings\": [\n    {\n      \"members\": [\n        \"user:testuser@example.com\"\n      ],\n      \"role\": \"roles/owner\"\n    }\n  ],\n  \"etag\": \"BwXXim1ZMUM=\",\n  \"version\": 1\n}\n"
  },
  {
    "path": "test-data/cloudsql1/json-dumps/monitoring-query.json",
    "content": "{\n  \"timeSeriesDescriptor\": {}\n}\n"
  },
  {
    "path": "test-data/cloudsql1/json-dumps/project.json",
    "content": "{\n  \"name\": \"projects/12340006\",\n  \"parent\": \"folders/373737373737\",\n  \"projectId\": \"gcpdiag-cloudsql1-aaaa\",\n  \"state\": \"ACTIVE\",\n  \"displayName\": \"gcpdiag test - cloudsql1\",\n  \"createTime\": \"2022-05-10T06:02:40.497Z\",\n  \"updateTime\": \"2022-05-10T06:02:42.299Z\",\n  \"etag\": \"ud0/Jmo6QENQzBQk9e7x4g==\"\n}\n"
  },
  {
    "path": "test-data/cloudsql1/json-dumps/services.json",
    "content": "{\n  \"services\": [\n    {\n      \"name\": \"projects/12340006/services/compute.googleapis.com\",\n      \"config\": {\n        \"name\": \"compute.googleapis.com\",\n        \"title\": \"Compute Engine API\",\n        \"documentation\": {\n          \"summary\": \"Creates and runs virtual machines on Google Cloud Platform.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"compute.googleapis.com/VpcNetwork\",\n            \"displayName\": \"VPC Network\",\n            \"description\": \"VPC Network.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the VPC Network.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the VPC Network, global always.\"\n              },\n              {\n                \"key\": \"network_id\",\n                \"description\": \"VPC Network resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Location\",\n            \"displayName\": \"Compute Location\",\n            \"description\": \"A location in the Compute API.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the Compute Location.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/instances_per_vpc_network\",\n                \"compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/ip_aliases_per_vpc_network\",\n                \"compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/instances_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/subnet_ranges_per_vpc_network\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/instances_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/instances_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/instances_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Location\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Location\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/usage\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340006\"\n    },\n    {\n      \"name\": \"projects/12340006/services/oslogin.googleapis.com\",\n      \"config\": {\n        \"name\": \"oslogin.googleapis.com\",\n        \"title\": \"Cloud OS Login API\",\n        \"documentation\": {\n          \"summary\": \"You can use OS Login to manage access to your VM instances using IAM roles.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340006\"\n    },\n    {\n      \"name\": \"projects/12340006/services/servicenetworking.googleapis.com\",\n      \"config\": {\n        \"name\": \"servicenetworking.googleapis.com\",\n        \"title\": \"Service Networking API\",\n        \"documentation\": {\n          \"summary\": \"Provides automatic management of network configurations necessary for certain services.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340006\"\n    },\n    {\n      \"name\": \"projects/12340006/services/sqladmin.googleapis.com\",\n      \"config\": {\n        \"name\": \"sqladmin.googleapis.com\",\n        \"title\": \"Cloud SQL Admin API\",\n        \"documentation\": {\n          \"summary\": \"API for Cloud SQL database instance management\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340006\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/cloudsql1/project.tf",
    "content": "resource \"random_string\" \"project_id\" {\n  length  = 8\n  number  = true\n  lower   = true\n  upper   = false\n  special = false\n}\n\nresource \"google_project\" \"project\" {\n  name            = \"gcpdiag test - cloudsql1\"\n  project_id      = \"gcpdiag-cloudsql1-${random_string.project_id.id}\"\n  org_id          = var.folder_id == \"\" ? var.org_id : null\n  folder_id       = var.folder_id != \"\" ? var.folder_id : null\n  billing_account = var.billing_account_id\n}\n\nresource \"google_project_service\" \"compute\" {\n  project = google_project.project.project_id\n  service = \"compute.googleapis.com\"\n}\n\nresource \"google_project_service\" \"servicenetworking\" {\n  project = google_project.project.project_id\n  service = \"servicenetworking.googleapis.com\"\n}\n\nresource \"google_project_service\" \"sqladmin\" {\n  project            = google_project.project.project_id\n  service            = \"sqladmin.googleapis.com\"\n  disable_on_destroy = false\n}\n\noutput \"project_id\" {\n  value = google_project.project.project_id\n}\n\noutput \"project_id_suffix\" {\n  value = random_string.project_id.id\n}\n\noutput \"project_nr\" {\n  value = google_project.project.number\n}\n\noutput \"org_id\" {\n  value = var.org_id\n}\n"
  },
  {
    "path": "test-data/cloudsql1/sql1.tf",
    "content": "resource \"google_compute_network\" \"private_network\" {\n  project                 = google_project.project.project_id\n  name                    = \"private-network\"\n  auto_create_subnetworks = \"false\"\n}\n\nresource \"google_compute_global_address\" \"private_ip_address\" {\n  project       = google_project.project.project_id\n  name          = \"private-ip-address\"\n  purpose       = \"VPC_PEERING\"\n  address_type  = \"INTERNAL\"\n  prefix_length = 20\n  network       = google_compute_network.private_network.id\n  address       = \"172.17.0.0\"\n\n  depends_on = [google_project_service.compute,\n  google_compute_network.private_network]\n\n}\n\nresource \"google_service_networking_connection\" \"private_vpc_connection\" {\n  network                 = google_compute_network.private_network.id\n  service                 = \"servicenetworking.googleapis.com\"\n  reserved_peering_ranges = [google_compute_global_address.private_ip_address.name]\n\n  depends_on = [google_project_service.servicenetworking,\n  google_compute_global_address.private_ip_address]\n}\n\nresource \"google_sql_database_instance\" \"sql1\" {\n  project          = google_project.project.project_id\n  name             = \"sql1\"\n  region           = \"us-central1\"\n  database_version = \"MYSQL_8_0\"\n\n  depends_on = [google_project_service.sqladmin,\n  google_service_networking_connection.private_vpc_connection]\n\n  settings {\n    tier = \"db-f1-micro\"\n    ip_configuration {\n      ipv4_enabled    = false\n      private_network = google_compute_network.private_network.id\n    }\n  }\n}\n\nprovider \"google-beta\" {\n  region = \"us-central1\"\n  zone   = \"us-central1-a\"\n}\n"
  },
  {
    "path": "test-data/cloudsql1/variables.tf",
    "content": "variable \"billing_account_id\" {}\n\nvariable \"org_id\" {}\nvariable \"folder_id\" { default = \"\" }\n"
  },
  {
    "path": "test-data/composer1/Makefile",
    "content": "PROJECT_ID  := $(shell terraform output -raw project_id)\nPROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix)\nPROJECT_NR  := $(shell terraform output -raw project_nr)\nORG_ID      := $(shell terraform output -raw org_id)\nENV2_SA     := $(shell terraform output -raw env2_sa)\nCURL         = ../../bin/curl-wrap.sh\nJSON_CLEANER = ../../bin/json-cleaner\nREGION_1     = us-central1\n\nFAKE_PROJECT_ID_SUFFIX = aaaa\nFAKE_PROJECT_NR = 12340005\nFAKE_ORG_ID = 11112222\nSED_SUBST_FAKE = sed -e \"s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/\" \\\n\t\t     -e \"s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/\" \\\n\t\t     -e \"s/$(ORG_ID)/$(FAKE_ORG_ID)/\" \\\n\nall:\t\\\n\tjson-dumps/compute-regions.json \\\n\tjson-dumps/services.json \\\n\tjson-dumps/composer-environments-$(REGION_1).json \\\n\tjson-dumps/project.json \\\n\tjson-dumps/iam-policy.json \\\n\tjson-dumps/iam-service-accounts.json \\\n\tjson-dumps/iam-service-account-policy.json\n\njson-dumps/compute-regions.json:\n\t$(CURL) -fsS \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/regions' \\\n\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/services.json:\n\t$(CURL) -fsS \\\n\t  'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \\\n\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/composer-environments-$(REGION_1).json:\n\t$(CURL) -fsS \\\n\t  'https://composer.googleapis.com/v1/projects/$(PROJECT_ID)/locations/$(REGION_1)/environments' \\\n\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/project.json:\n\t$(CURL) -fsS \\\n\t  'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \\\n\t  | $(SED_SUBST_FAKE) >$@\n\njson-dumps/iam-policy.json:\n\t$(CURL) -fsS \\\n\t  'https://cloudresourcemanager.googleapis.com/v1/projects/$(PROJECT_ID):getIamPolicy' \\\n\t  -X POST  --header \"Content-Type:text/json\" \\\n\t  -d \"\" \\\n\t  | $(JSON_CLEANER) other \\\n\t  | $(SED_SUBST_FAKE) >$@\n\njson-dumps/iam-service-accounts.json:\n\t$(CURL) -fsS \\\n\t  'https://iam.googleapis.com/v1/projects/$(PROJECT_ID)/serviceAccounts' \\\n\t  | $(JSON_CLEANER) service-accounts \\\n\t  | $(SED_SUBST_FAKE) >$@\n\njson-dumps/iam-service-account-policy.json:\n\t$(CURL) -fsS \\\n\t  'https://iam.googleapis.com/v1/$(ENV2_SA):getIamPolicy' \\\n\t  -X POST  --header \"Content-Type:text/json\" \\\n\t  -d \"\" \\\n\t  | $(JSON_CLEANER) other \\\n\t  | $(SED_SUBST_FAKE) >$@\n"
  },
  {
    "path": "test-data/composer1/README.md",
    "content": "Create terraform project\n\n```\nterraform plan -var=\"billing_account_id=0123456-ABCDEF-987654\" -var=\"org_id=123456789012\"\nterraform apply -var=\"billing_account_id=0123456-ABCDEF-987654\" -var=\"org_id=123456789012\"\n```\n\nRefresh json dumps:\n```\nmake all\n```\n"
  },
  {
    "path": "test-data/composer1/composer-env1.tf",
    "content": "resource \"google_composer_environment\" \"env1\" {\n  name    = \"env1\"\n  region  = \"us-central1\"\n  project = google_project.project.project_id\n\n  depends_on = [google_project_service.composer]\n}\n"
  },
  {
    "path": "test-data/composer1/composer-env2.tf",
    "content": "resource \"google_service_account\" \"env2_sa\" {\n  project      = google_project.project.project_id\n  account_id   = \"env2sa\"\n  display_name = \"Composer Environment 2 Service Account\"\n}\n\nresource \"google_project_iam_member\" \"env2_sa\" {\n  project = google_project.project.project_id\n  role    = \"roles/composer.worker\"\n  member  = \"serviceAccount:${google_service_account.env2_sa.email}\"\n}\n\nresource \"google_composer_environment\" \"env2\" {\n  name    = \"env2\"\n  region  = \"us-central1\"\n  project = google_project.project.project_id\n\n  config {\n    node_config {\n      service_account = google_service_account.env2_sa.name\n\n      ip_allocation_policy {\n        use_ip_aliases = true\n      }\n    }\n\n    private_environment_config {\n      enable_private_endpoint = true\n    }\n  }\n\n  depends_on = [google_project_service.composer]\n}\n"
  },
  {
    "path": "test-data/composer1/json-dumps/composer-environments-us-central1.json",
    "content": "{\n  \"environments\": [\n    {\n      \"name\": \"projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env2\",\n      \"config\": {\n        \"gkeCluster\": \"projects/gcpdiag-composer1-aaaa/zones/us-central1-c/clusters/us-central1-env2-941355a9-gke\",\n        \"dagGcsPrefix\": \"gs://us-central1-env2-941355a9-bucket/dags\",\n        \"nodeCount\": 3,\n        \"softwareConfig\": {\n          \"imageVersion\": \"composer-1.17.10-airflow-1.10.15\",\n          \"pythonVersion\": \"3\",\n          \"schedulerCount\": 1\n        },\n        \"nodeConfig\": {\n          \"location\": \"projects/gcpdiag-composer1-aaaa/zones/us-central1-c\",\n          \"machineType\": \"projects/gcpdiag-composer1-aaaa/zones/us-central1-c/machineTypes/n1-standard-1\",\n          \"network\": \"projects/gcpdiag-composer1-aaaa/global/networks/default\",\n          \"diskSizeGb\": 100,\n          \"oauthScopes\": [\n            \"https://www.googleapis.com/auth/cloud-platform\"\n          ],\n          \"serviceAccount\": \"env2sa@gcpdiag-composer1-aaaa.iam.gserviceaccount.com\",\n          \"ipAllocationPolicy\": {\n            \"useIpAliases\": true\n          }\n        },\n        \"airflowUri\": \"https://dbf98c0de9a7bf17dp-tp.appspot.com\",\n        \"privateEnvironmentConfig\": {\n          \"enablePrivateEnvironment\": true,\n          \"privateClusterConfig\": {\n            \"enablePrivateEndpoint\": true,\n            \"masterIpv4CidrBlock\": \"172.16.20.0/23\",\n            \"masterIpv4ReservedRange\": \"172.16.20.0/28\"\n          },\n          \"webServerIpv4CidrBlock\": \"172.31.245.0/24\",\n          \"cloudSqlIpv4CidrBlock\": \"10.0.0.0/12\",\n          \"webServerIpv4ReservedRange\": \"172.31.245.0/29\"\n        },\n        \"webServerNetworkAccessControl\": {\n          \"allowedIpRanges\": [\n            {\n              \"value\": \"0.0.0.0/0\",\n              \"description\": \"Allows access from all IPv4 addresses (default value)\"\n            },\n            {\n              \"value\": \"::0/0\",\n              \"description\": \"Allows access from all IPv6 addresses (default value)\"\n            }\n          ]\n        },\n        \"databaseConfig\": {\n          \"machineType\": \"db-n1-standard-2\"\n        },\n        \"webServerConfig\": {\n          \"machineType\": \"composer-n1-webserver-2\"\n        },\n        \"encryptionConfig\": {},\n        \"maintenanceWindow\": {\n          \"startTime\": \"1970-01-01T00:00:00Z\",\n          \"endTime\": \"1970-01-01T04:00:00Z\",\n          \"recurrence\": \"FREQ=WEEKLY;BYDAY=FR,SA,SU\"\n        },\n        \"workloadsConfig\": {}\n      },\n      \"uuid\": \"64f43466-ae3a-4cf3-b749-da9e9fd7fb89\",\n      \"state\": \"RUNNING\",\n      \"createTime\": \"2022-02-15T13:43:01.942Z\",\n      \"updateTime\": \"2022-02-15T14:08:07.055420Z\"\n    },\n    {\n      \"name\": \"projects/gcpdiag-composer1-aaaa/locations/us-central1/environments/env1\",\n      \"config\": {\n        \"gkeCluster\": \"projects/gcpdiag-composer1-aaaa/zones/us-central1-c/clusters/us-central1-env1-83babad2-gke\",\n        \"dagGcsPrefix\": \"gs://us-central1-env1-83babad2-bucket/dags\",\n        \"nodeCount\": 3,\n        \"softwareConfig\": {\n          \"imageVersion\": \"composer-1.17.10-airflow-1.10.15\",\n          \"pythonVersion\": \"3\",\n          \"schedulerCount\": 1\n        },\n        \"nodeConfig\": {\n          \"location\": \"projects/gcpdiag-composer1-aaaa/zones/us-central1-c\",\n          \"machineType\": \"projects/gcpdiag-composer1-aaaa/zones/us-central1-c/machineTypes/n1-standard-1\",\n          \"network\": \"projects/gcpdiag-composer1-aaaa/global/networks/default\",\n          \"diskSizeGb\": 100,\n          \"oauthScopes\": [\n            \"https://www.googleapis.com/auth/cloud-platform\"\n          ],\n          \"serviceAccount\": \"12340005-compute@developer.gserviceaccount.com\",\n          \"ipAllocationPolicy\": {}\n        },\n        \"airflowUri\": \"https://h5e4e6d46fe855ee0p-tp.appspot.com\",\n        \"privateEnvironmentConfig\": {\n          \"privateClusterConfig\": {},\n          \"webServerIpv4CidrBlock\": \"172.31.245.0/24\",\n          \"cloudSqlIpv4CidrBlock\": \"10.0.0.0/12\"\n        },\n        \"webServerNetworkAccessControl\": {\n          \"allowedIpRanges\": [\n            {\n              \"value\": \"0.0.0.0/0\",\n              \"description\": \"Allows access from all IPv4 addresses (default value)\"\n            },\n            {\n              \"value\": \"::0/0\",\n              \"description\": \"Allows access from all IPv6 addresses (default value)\"\n            }\n          ]\n        },\n        \"databaseConfig\": {\n          \"machineType\": \"db-n1-standard-2\"\n        },\n        \"webServerConfig\": {\n          \"machineType\": \"composer-n1-webserver-2\"\n        },\n        \"encryptionConfig\": {},\n        \"maintenanceWindow\": {\n          \"startTime\": \"1970-01-01T00:00:00Z\",\n          \"endTime\": \"1970-01-01T04:00:00Z\",\n          \"recurrence\": \"FREQ=WEEKLY;BYDAY=FR,SA,SU\"\n        },\n        \"workloadsConfig\": {}\n      },\n      \"uuid\": \"f56c0072-c520-46ff-98c7-a2af4c703782\",\n      \"state\": \"RUNNING\",\n      \"createTime\": \"2022-02-15T13:08:11.626Z\",\n      \"updateTime\": \"2022-02-15T13:28:16.349130Z\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/composer1/json-dumps/compute-regions.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-composer1-aaaa/regions\",\n  \"items\": [\n    {\n      \"id\": \"1220\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east1\",\n      \"description\": \"asia-east1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-east1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-east1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-east1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/asia-east1\",\n      \"supportsPzs\": false,\n      \"kind\": \"compute#region\"\n    },\n    {\n      \"id\": \"1370\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east2\",\n      \"description\": \"asia-east2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-east2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-east2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-east2-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/asia-east2\",\n      \"supportsPzs\": true,\n      \"kind\": \"compute#region\"\n    },\n    {\n      \"id\": \"1250\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast1\",\n      \"description\": \"asia-northeast1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-northeast1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-northeast1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-northeast1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/asia-northeast1\",\n      \"supportsPzs\": false,\n      \"kind\": \"compute#region\"\n    },\n    {\n      \"id\": \"1390\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast2\",\n      \"description\": \"asia-northeast2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-northeast2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-northeast2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-northeast2-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/asia-northeast2\",\n      \"supportsPzs\": false,\n      \"kind\": \"compute#region\"\n    },\n    {\n      \"id\": \"1410\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast3\",\n      \"description\": \"asia-northeast3\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-northeast3-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-northeast3-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-northeast3-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/asia-northeast3\",\n      \"supportsPzs\": false,\n      \"kind\": \"compute#region\"\n    },\n    {\n      \"id\": \"1320\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south1\",\n      \"description\": \"asia-south1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-south1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-south1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-south1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/asia-south1\",\n      \"supportsPzs\": false,\n      \"kind\": \"compute#region\"\n    },\n    {\n      \"id\": \"1470\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south2\",\n      \"description\": \"asia-south2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-south2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-south2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-south2-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 5,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/asia-south2\",\n      \"supportsPzs\": false,\n      \"kind\": \"compute#region\"\n    },\n    {\n      \"id\": \"1260\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast1\",\n      \"description\": \"asia-southeast1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-southeast1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-southeast1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-southeast1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/asia-southeast1\",\n      \"supportsPzs\": false,\n      \"kind\": \"compute#region\"\n    },\n    {\n      \"id\": \"1440\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast2\",\n      \"description\": \"asia-southeast2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-southeast2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-southeast2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/asia-southeast2-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/asia-southeast2\",\n      \"supportsPzs\": false,\n      \"kind\": \"compute#region\"\n    },\n    {\n      \"id\": \"1280\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast1\",\n      \"description\": \"australia-southeast1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/australia-southeast1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/australia-southeast1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/australia-southeast1-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/australia-southeast1\",\n      \"supportsPzs\": true,\n      \"kind\": \"compute#region\"\n    },\n    {\n      \"id\": \"1480\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast2\",\n      \"description\": \"australia-southeast2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/australia-southeast2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/australia-southeast2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/australia-southeast2-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 5,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/australia-southeast2\",\n      \"supportsPzs\": false,\n      \"kind\": \"compute#region\"\n    },\n    {\n      \"id\": \"1450\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-central2\",\n      \"description\": \"europe-central2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/europe-central2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/europe-central2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/europe-central2-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 5,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/europe-central2\",\n      \"supportsPzs\": false,\n      \"kind\": \"compute#region\"\n    },\n    {\n      \"id\": \"1350\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-north1\",\n      \"description\": \"europe-north1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/europe-north1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/europe-north1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/europe-north1-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/europe-north1\",\n      \"supportsPzs\": false,\n      \"kind\": \"compute#region\"\n    },\n    {\n      \"id\": \"1100\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west1\",\n      \"description\": \"europe-west1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/europe-west1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/europe-west1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/europe-west1-d\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/europe-west1\",\n      \"supportsPzs\": false,\n      \"kind\": \"compute#region\"\n    },\n    {\n      \"id\": \"1290\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west2\",\n      \"description\": \"europe-west2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/europe-west2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/europe-west2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/europe-west2-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/europe-west2\",\n      \"supportsPzs\": true,\n      \"kind\": \"compute#region\"\n    },\n    {\n      \"id\": \"1300\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west3\",\n      \"description\": \"europe-west3\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/europe-west3-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/europe-west3-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/europe-west3-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/europe-west3\",\n      \"supportsPzs\": true,\n      \"kind\": \"compute#region\"\n    },\n    {\n      \"id\": \"1340\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west4\",\n      \"description\": \"europe-west4\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/europe-west4-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/europe-west4-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/europe-west4-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/europe-west4\",\n      \"supportsPzs\": false,\n      \"kind\": \"compute#region\"\n    },\n    {\n      \"id\": \"1380\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west6\",\n      \"description\": \"europe-west6\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/europe-west6-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/europe-west6-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/europe-west6-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/europe-west6\",\n      \"supportsPzs\": false,\n      \"kind\": \"compute#region\"\n    },\n    {\n      \"id\": \"1330\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast1\",\n      \"description\": \"northamerica-northeast1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/northamerica-northeast1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/northamerica-northeast1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/northamerica-northeast1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/northamerica-northeast1\",\n      \"supportsPzs\": false,\n      \"kind\": \"compute#region\"\n    },\n    {\n      \"id\": \"1460\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast2\",\n      \"description\": \"northamerica-northeast2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/northamerica-northeast2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/northamerica-northeast2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/northamerica-northeast2-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 5,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/northamerica-northeast2\",\n      \"supportsPzs\": false,\n      \"kind\": \"compute#region\"\n    },\n    {\n      \"id\": \"1310\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-east1\",\n      \"description\": \"southamerica-east1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/southamerica-east1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/southamerica-east1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/southamerica-east1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/southamerica-east1\",\n      \"supportsPzs\": false,\n      \"kind\": \"compute#region\"\n    },\n    {\n      \"id\": \"1490\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-west1\",\n      \"description\": \"southamerica-west1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/southamerica-west1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/southamerica-west1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/southamerica-west1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 5,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/southamerica-west1\",\n      \"supportsPzs\": false,\n      \"kind\": \"compute#region\"\n    },\n    {\n      \"id\": \"1000\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1\",\n      \"description\": \"us-central1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/us-central1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/us-central1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/us-central1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/us-central1-f\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 6\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 604\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 3\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 2\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 2\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 6\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/us-central1\",\n      \"supportsPzs\": false,\n      \"kind\": \"compute#region\"\n    },\n    {\n      \"id\": \"1230\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east1\",\n      \"description\": \"us-east1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/us-east1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/us-east1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/us-east1-d\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/us-east1\",\n      \"supportsPzs\": false,\n      \"kind\": \"compute#region\"\n    },\n    {\n      \"id\": \"1270\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east4\",\n      \"description\": \"us-east4\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/us-east4-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/us-east4-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/us-east4-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/us-east4\",\n      \"supportsPzs\": true,\n      \"kind\": \"compute#region\"\n    },\n    {\n      \"id\": \"1210\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west1\",\n      \"description\": \"us-west1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/us-west1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/us-west1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/us-west1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/us-west1\",\n      \"supportsPzs\": false,\n      \"kind\": \"compute#region\"\n    },\n    {\n      \"id\": \"1360\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west2\",\n      \"description\": \"us-west2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/us-west2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/us-west2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/us-west2-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/us-west2\",\n      \"supportsPzs\": false,\n      \"kind\": \"compute#region\"\n    },\n    {\n      \"id\": \"1420\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west3\",\n      \"description\": \"us-west3\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/us-west3-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/us-west3-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/us-west3-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/us-west3\",\n      \"supportsPzs\": false,\n      \"kind\": \"compute#region\"\n    },\n    {\n      \"id\": \"1430\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west4\",\n      \"description\": \"us-west4\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/us-west4-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/us-west4-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/zones/us-west4-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions/us-west4\",\n      \"supportsPzs\": false,\n      \"kind\": \"compute#region\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-composer1-aaaa/regions\",\n  \"kind\": \"compute#regionList\"\n}\n"
  },
  {
    "path": "test-data/composer1/json-dumps/iam-policy.json",
    "content": "{\n  \"bindings\": [\n    {\n      \"members\": [\n        \"serviceAccount:service-12340005@gcp-sa-artifactregistry.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/artifactregistry.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:12340005@cloudbuild.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/cloudbuild.builds.builder\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12340005@gcp-sa-cloudbuild.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/cloudbuild.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12340005@cloudcomposer-accounts.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/composer.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:env2sa@gcpdiag-composer1-aaaa.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/composer.worker\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12340005@compute-system.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/compute.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12340005@container-engine-robot.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/container.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12340005@containerregistry.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/containerregistry.ServiceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12340005@gcp-sa-ktd-control.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/containerthreatdetection.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:12340005-compute@developer.gserviceaccount.com\",\n        \"serviceAccount:12340005@cloudservices.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/editor\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12340005@gcp-sa-pubsub.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/pubsub.serviceAgent\"\n    }\n  ],\n  \"etag\": \"BwXYDrZkJbI=\",\n  \"version\": 1\n}\n"
  },
  {
    "path": "test-data/composer1/json-dumps/iam-service-account-policy.json",
    "content": "{\n  \"etag\": \"ACAB\"\n}\n"
  },
  {
    "path": "test-data/composer1/json-dumps/iam-service-accounts.json",
    "content": "{\n  \"accounts\": [\n    {\n      \"displayName\": \"Composer Environment 2 Service Account\",\n      \"email\": \"env2sa@gcpdiag-composer1-aaaa.iam.gserviceaccount.com\",\n      \"etag\": \"MDEwMjE5MjA=\",\n      \"name\": \"projects/gcpdiag-composer1-aaaa/serviceAccounts/env2sa@gcpdiag-composer1-0j67y05x.iam.gserviceaccount.com\",\n      \"oauth2ClientId\": \"REDACTED\",\n      \"projectId\": \"gcpdiag-composer1-aaaa\",\n      \"uniqueId\": \"102376921990513050343\"\n    },\n    {\n      \"displayName\": \"Compute Engine default service account\",\n      \"email\": \"12340005-compute@developer.gserviceaccount.com\",\n      \"etag\": \"MDEwMjE5MjA=\",\n      \"name\": \"projects/gcpdiag-composer1-aaaa/serviceAccounts/12340005-compute@developer.gserviceaccount.com\",\n      \"oauth2ClientId\": \"REDACTED\",\n      \"projectId\": \"gcpdiag-composer1-aaaa\",\n      \"uniqueId\": \"116364707018337704682\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/composer1/json-dumps/logging-entries-1.json",
    "content": "{\n  \"entries\": [\n  ]\n}\n"
  },
  {
    "path": "test-data/composer1/json-dumps/monitoring-query.json",
    "content": "{\n  \"timeSeriesDescriptor\": {\n    \"labelDescriptors\": [\n      {\n        \"key\": \"resource.project_id\"\n      },\n      {\n        \"key\": \"resource.location\"\n      },\n      {\n        \"key\": \"resource.cluster_name\"\n      }\n    ],\n    \"pointDescriptors\": [\n      {\n        \"key\": \"value_utilization_max\",\n        \"valueType\": \"DOUBLE\",\n        \"metricKind\": \"GAUGE\",\n        \"unit\": \"1\"\n      }\n    ]\n  },\n  \"timeSeriesData\": [\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"gcpdiag-composer1-aaaa\"\n        },\n        {\n          \"stringValue\": \"us-central1\"\n        },\n        {\n          \"stringValue\": \"us-central1-env2-941355a9-gke\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\":0.06922396810093948\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2023-11-06T00:51:33.181476Z\",\n            \"endTime\": \"2023-11-06T00:51:33.181476Z\"\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/composer1/json-dumps/project.json",
    "content": "{\n  \"name\": \"projects/12340005\",\n  \"parent\": \"organizations/11112222\",\n  \"projectId\": \"gcpdiag-composer1-aaaa\",\n  \"state\": \"ACTIVE\",\n  \"displayName\": \"gcpdiag test - composer1\",\n  \"createTime\": \"2022-02-15T13:06:30.006Z\",\n  \"updateTime\": \"2022-02-15T13:06:31.796Z\",\n  \"etag\": \"Q7kuUzNEqrwCj/KHaetQyg==\"\n}\n"
  },
  {
    "path": "test-data/composer1/json-dumps/services.json",
    "content": "{\n  \"services\": [\n    {\n      \"name\": \"projects/12340005/services/artifactregistry.googleapis.com\",\n      \"config\": {\n        \"name\": \"artifactregistry.googleapis.com\",\n        \"title\": \"Artifact Registry API\",\n        \"documentation\": {\n          \"summary\": \"Store and manage build artifacts in a scalable and integrated service built on Google infrastructure.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340005\"\n    },\n    {\n      \"name\": \"projects/12340005/services/autoscaling.googleapis.com\",\n      \"config\": {\n        \"name\": \"autoscaling.googleapis.com\",\n        \"title\": \"Cloud Autoscaling API\",\n        \"documentation\": {\n          \"summary\": \"An API for the Cloud Autoscaling for consuming autoscaling signals.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340005\"\n    },\n    {\n      \"name\": \"projects/12340005/services/bigquery.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigquery.googleapis.com\",\n        \"title\": \"BigQuery API\",\n        \"documentation\": {\n          \"summary\": \"A data platform for customers to create, manage, share and query data.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340005\"\n    },\n    {\n      \"name\": \"projects/12340005/services/bigquerystorage.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigquerystorage.googleapis.com\",\n        \"title\": \"BigQuery Storage API\",\n        \"documentation\": {},\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340005\"\n    },\n    {\n      \"name\": \"projects/12340005/services/cloudbuild.googleapis.com\",\n      \"config\": {\n        \"name\": \"cloudbuild.googleapis.com\",\n        \"title\": \"Cloud Build API\",\n        \"documentation\": {\n          \"summary\": \"Creates and manages builds on Google Cloud Platform.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340005\"\n    },\n    {\n      \"name\": \"projects/12340005/services/cloudresourcemanager.googleapis.com\",\n      \"config\": {\n        \"name\": \"cloudresourcemanager.googleapis.com\",\n        \"title\": \"Cloud Resource Manager API\",\n        \"documentation\": {\n          \"summary\": \"Creates, reads, and updates metadata for Google Cloud Platform resource containers.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"serviceruntime.googleapis.com/api\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_version\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_method\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/consumer_project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/consumer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/producer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/consumer_resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/api\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/api/consumer/quota_used_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_refund_count\",\n                \"serviceruntime.googleapis.com/quota/used\",\n                \"serviceruntime.googleapis.com/quota/limit\",\n                \"serviceruntime.googleapis.com/quota/exceeded\",\n                \"serviceruntime.googleapis.com/allocation/consumer/quota_used_count\",\n                \"serviceruntime.googleapis.com/api/consumer/request_count\",\n                \"serviceruntime.googleapis.com/api/consumer/error_count\",\n                \"serviceruntime.googleapis.com/api/consumer/total_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_overhead_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/backend_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/response_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/consumer_quota\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/quota/rate/consumer/used_count\",\n                \"serviceruntime.googleapis.com/quota/rate/consumer/refund_count\",\n                \"serviceruntime.googleapis.com/quota/allocation/consumer/usage\",\n                \"serviceruntime.googleapis.com/quota/consumer/limit\",\n                \"serviceruntime.googleapis.com/quota/consumer/exceeded\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340005\"\n    },\n    {\n      \"name\": \"projects/12340005/services/composer.googleapis.com\",\n      \"config\": {\n        \"name\": \"composer.googleapis.com\",\n        \"title\": \"Cloud Composer API\",\n        \"documentation\": {\n          \"summary\": \"Manages Apache Airflow environments on Google Cloud Platform.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/billing-enabled\",\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340005\"\n    },\n    {\n      \"name\": \"projects/12340005/services/compute.googleapis.com\",\n      \"config\": {\n        \"name\": \"compute.googleapis.com\",\n        \"title\": \"Compute Engine API\",\n        \"documentation\": {\n          \"summary\": \"Creates and runs virtual machines on Google Cloud Platform.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"compute.googleapis.com/VpcNetwork\",\n            \"displayName\": \"VPC Network\",\n            \"description\": \"VPC Network.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the VPC Network.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the VPC Network, global always.\"\n              },\n              {\n                \"key\": \"network_id\",\n                \"description\": \"VPC Network resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/instances_per_vpc_network\",\n                \"compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/ip_aliases_per_vpc_network\",\n                \"compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/instances_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/subnet_ranges_per_vpc_network\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/instances_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/instances_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/instances_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340005\"\n    },\n    {\n      \"name\": \"projects/12340005/services/container.googleapis.com\",\n      \"config\": {\n        \"name\": \"container.googleapis.com\",\n        \"title\": \"Kubernetes Engine API\",\n        \"documentation\": {\n          \"summary\": \"Builds and manages container-based applications, powered by the open source Kubernetes technology.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340005\"\n    },\n    {\n      \"name\": \"projects/12340005/services/containerfilesystem.googleapis.com\",\n      \"config\": {\n        \"name\": \"containerfilesystem.googleapis.com\",\n        \"title\": \"Container File System API\",\n        \"documentation\": {},\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340005\"\n    },\n    {\n      \"name\": \"projects/12340005/services/containerregistry.googleapis.com\",\n      \"config\": {\n        \"name\": \"containerregistry.googleapis.com\",\n        \"title\": \"Container Registry API\",\n        \"documentation\": {\n          \"summary\": \"Google Container Registry provides secure, private Docker image storage on Google Cloud Platform.  Our API follows the Docker Registry API specification, so we are fully compatible with the Docker CLI client, as well as standard tooling using the Docker Registry API.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"serviceruntime.googleapis.com/api\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_version\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_method\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/consumer_project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/consumer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/producer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/consumer_resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/api\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/api/consumer/quota_used_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_refund_count\",\n                \"serviceruntime.googleapis.com/quota/used\",\n                \"serviceruntime.googleapis.com/quota/limit\",\n                \"serviceruntime.googleapis.com/quota/exceeded\",\n                \"serviceruntime.googleapis.com/allocation/consumer/quota_used_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/consumer_quota\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/quota/rate/consumer/used_count\",\n                \"serviceruntime.googleapis.com/quota/rate/consumer/refund_count\",\n                \"serviceruntime.googleapis.com/quota/allocation/consumer/usage\",\n                \"serviceruntime.googleapis.com/quota/consumer/limit\",\n                \"serviceruntime.googleapis.com/quota/consumer/exceeded\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340005\"\n    },\n    {\n      \"name\": \"projects/12340005/services/containerthreatdetection.googleapis.com\",\n      \"config\": {\n        \"name\": \"containerthreatdetection.googleapis.com\",\n        \"title\": \"Container Threat Detection API\",\n        \"documentation\": {},\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340005\"\n    },\n    {\n      \"name\": \"projects/12340005/services/deploymentmanager.googleapis.com\",\n      \"config\": {\n        \"name\": \"deploymentmanager.googleapis.com\",\n        \"title\": \"Cloud Deployment Manager V2 API\",\n        \"documentation\": {\n          \"summary\": \"The Google Cloud Deployment Manager v2 API provides services for configuring, deploying, and\\nviewing Google Cloud services and APIs via templates which specify deployments of Cloud\\nresources.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340005\"\n    },\n    {\n      \"name\": \"projects/12340005/services/iam.googleapis.com\",\n      \"config\": {\n        \"name\": \"iam.googleapis.com\",\n        \"title\": \"Identity and Access Management (IAM) API\",\n        \"documentation\": {\n          \"summary\": \"Manages identity and access control for Google Cloud Platform resources, including the creation of service accounts, which you can use to authenticate to Google and make API calls.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"iam_service_account\",\n            \"displayName\": \"IAM Service Account\",\n            \"description\": \"An IAM Service Account.\",\n            \"labels\": [\n              {\n                \"key\": \"project_id\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"unique_id\",\n                \"description\": \"The unique_id of the service account.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"iam.googleapis.com/WorkloadIdentityPoolProvider\",\n            \"displayName\": \"Workload Identity Pool Provider\",\n            \"description\": \"A workload identity pool provider.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location of the resource.\"\n              },\n              {\n                \"key\": \"pool_id\",\n                \"description\": \"The ID of the provider's workload identity pool parent resource.\"\n              },\n              {\n                \"key\": \"provider_id\",\n                \"description\": \"The ID of the workload identity pool provider resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"iam.googleapis.com/WorkloadIdentityPoolProvider\",\n              \"metrics\": [\n                \"iam.googleapis.com/workload_identity_federation/count\",\n                \"iam.googleapis.com/workload_identity_federation/key_usage_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"iam_service_account\",\n              \"metrics\": [\n                \"iam.googleapis.com/service_account/authn_events_count\",\n                \"iam.googleapis.com/service_account/key/authn_events_count\",\n                \"iam.googleapis.com/service_account/authn_events_count_preprod\",\n                \"iam.googleapis.com/service_account/key/authn_events_count_preprod\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340005\"\n    },\n    {\n      \"name\": \"projects/12340005/services/iamcredentials.googleapis.com\",\n      \"config\": {\n        \"name\": \"iamcredentials.googleapis.com\",\n        \"title\": \"IAM Service Account Credentials API\",\n        \"documentation\": {\n          \"summary\": \"Creates short-lived credentials for impersonating IAM service accounts. To enable this API, you must enable the IAM API (iam.googleapis.com).\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"serviceruntime.googleapis.com/api\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_version\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_method\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/consumer_project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              }\n            ]\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/api\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/api/consumer/quota_used_count\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340005\"\n    },\n    {\n      \"name\": \"projects/12340005/services/logging.googleapis.com\",\n      \"config\": {\n        \"name\": \"logging.googleapis.com\",\n        \"title\": \"Cloud Logging API\",\n        \"documentation\": {\n          \"summary\": \"Writes log entries and manages your Cloud Logging configuration.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"logging.googleapis.com/ChargedProject\",\n            \"displayName\": \"Cloud logging target\",\n            \"description\": \"A cloud logging specialization target schema of cloud.ChargedProject.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The monitored resource container. Could be project, workspace, etc.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The service-specific notion of location.\"\n              },\n              {\n                \"key\": \"service\",\n                \"description\": \"The name of the API service with which the data is associated (e.g.,'logging.googleapis.com').\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"logging.googleapis.com/ChargedProject\",\n              \"metrics\": [\n                \"logging.googleapis.com/billing/ingested_bytes\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340005\"\n    },\n    {\n      \"name\": \"projects/12340005/services/monitoring.googleapis.com\",\n      \"config\": {\n        \"name\": \"monitoring.googleapis.com\",\n        \"title\": \"Cloud Monitoring API\",\n        \"documentation\": {\n          \"summary\": \"Manages your Cloud Monitoring data and configurations.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"monitoring.googleapis.com/ChargedProject\",\n            \"displayName\": \"Cloud monitoring target\",\n            \"description\": \"A cloud monitoring specialization target schema of cloud.ChargedProject.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The monitored resource container. Could be project, workspace, etc.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The service-specific notion of location.\"\n              },\n              {\n                \"key\": \"service\",\n                \"description\": \"The name of the API service with which the data is associated (e.g.,'monitoring.googleapis.com').\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"monitoring.googleapis.com/MetricStatistics\",\n            \"displayName\": \"Metric Statistics\",\n            \"description\": \"Information about a user-written metric in Cloud Monitoring.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project to which the metric is written, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The cloud region where the metric was received.\"\n              },\n              {\n                \"key\": \"metric_type\",\n                \"description\": \"The metric type.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"monitoring.googleapis.com/MetricIngestionAttribution\",\n            \"displayName\": \"Metric Ingestion Attribution\",\n            \"description\": \"Attribution for metric ingestion.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project to which the metric is written, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The cloud region where the metric was received.\"\n              },\n              {\n                \"key\": \"attribution_dimension\",\n                \"description\": \"The dimension used for attribution reporting. It is not recommended that aggregations are performed across dimensions because a single metric point can be recorded with multiple dimensions which could cause double counting. Currently only \\\"namespace\\\" is supported.\"\n              },\n              {\n                \"key\": \"attribution_id\",\n                \"description\": \"The attribution id of the source of the metric write.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"monitoring.googleapis.com/ChargedProject\",\n              \"metrics\": [\n                \"monitoring.googleapis.com/billing/bytes_ingested\",\n                \"monitoring.googleapis.com/billing/samples_ingested\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"monitoring.googleapis.com/MetricStatistics\",\n              \"metrics\": [\n                \"monitoring.googleapis.com/collection/write_request_count\",\n                \"monitoring.googleapis.com/collection/write_request_point_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"monitoring.googleapis.com/MetricIngestionAttribution\",\n              \"metrics\": [\n                \"monitoring.googleapis.com/collection/attribution/sample_count\",\n                \"monitoring.googleapis.com/collection/attribution/write_sample_count\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340005\"\n    },\n    {\n      \"name\": \"projects/12340005/services/oslogin.googleapis.com\",\n      \"config\": {\n        \"name\": \"oslogin.googleapis.com\",\n        \"title\": \"Cloud OS Login API\",\n        \"documentation\": {\n          \"summary\": \"You can use OS Login to manage access to your VM instances using IAM roles.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340005\"\n    },\n    {\n      \"name\": \"projects/12340005/services/pubsub.googleapis.com\",\n      \"config\": {\n        \"name\": \"pubsub.googleapis.com\",\n        \"title\": \"Cloud Pub/Sub API\",\n        \"documentation\": {\n          \"summary\": \"Provides reliable, many-to-many, asynchronous messaging between applications.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340005\"\n    },\n    {\n      \"name\": \"projects/12340005/services/sqladmin.googleapis.com\",\n      \"config\": {\n        \"name\": \"sqladmin.googleapis.com\",\n        \"title\": \"Cloud SQL Admin API\",\n        \"documentation\": {\n          \"summary\": \"API for Cloud SQL database instance management\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340005\"\n    },\n    {\n      \"name\": \"projects/12340005/services/storage-api.googleapis.com\",\n      \"config\": {\n        \"name\": \"storage-api.googleapis.com\",\n        \"title\": \"Google Cloud Storage JSON API\",\n        \"documentation\": {\n          \"summary\": \"Lets you store and retrieve potentially-large, immutable data objects.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340005\"\n    },\n    {\n      \"name\": \"projects/12340005/services/storage-component.googleapis.com\",\n      \"config\": {\n        \"name\": \"storage-component.googleapis.com\",\n        \"title\": \"Cloud Storage\",\n        \"documentation\": {\n          \"summary\": \"Google Cloud Storage is a RESTful service for storing and accessing your data on Google's\\n    infrastructure.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"serviceruntime.googleapis.com/api\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_version\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_method\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/consumer_project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/consumer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/producer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/consumer_resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/api\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/api/consumer/request_count\",\n                \"serviceruntime.googleapis.com/api/consumer/error_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_used_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_refund_count\",\n                \"serviceruntime.googleapis.com/api/consumer/total_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_overhead_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/backend_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/response_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer\",\n                \"serviceruntime.googleapis.com/quota/used\",\n                \"serviceruntime.googleapis.com/quota/limit\",\n                \"serviceruntime.googleapis.com/quota/exceeded\",\n                \"serviceruntime.googleapis.com/allocation/consumer/quota_used_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/consumer_quota\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/quota/rate/consumer/used_count\",\n                \"serviceruntime.googleapis.com/quota/rate/consumer/refund_count\",\n                \"serviceruntime.googleapis.com/quota/allocation/consumer/usage\",\n                \"serviceruntime.googleapis.com/quota/consumer/limit\",\n                \"serviceruntime.googleapis.com/quota/consumer/exceeded\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340005\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/composer1/project.tf",
    "content": "resource \"random_string\" \"project_id\" {\n  length  = 8\n  number  = true\n  lower   = true\n  upper   = false\n  special = false\n}\n\nresource \"google_project\" \"project\" {\n  name            = \"gcpdiag test - composer1\"\n  project_id      = \"gcpdiag-composer1-${random_string.project_id.id}\"\n  org_id          = var.folder_id == \"\" ? var.org_id : null\n  folder_id       = var.folder_id != \"\" ? var.folder_id : null\n  billing_account = var.billing_account_id\n}\n\nresource \"google_project_service\" \"composer\" {\n  project            = google_project.project.project_id\n  service            = \"composer.googleapis.com\"\n  disable_on_destroy = false\n}\n\noutput \"project_id\" {\n  value = google_project.project.project_id\n}\n\noutput \"project_id_suffix\" {\n  value = random_string.project_id.id\n}\n\noutput \"project_nr\" {\n  value = google_project.project.number\n}\n\noutput \"org_id\" {\n  value = var.org_id\n}\n\noutput \"env2_sa\" {\n  value = google_service_account.env2_sa.name\n}\n"
  },
  {
    "path": "test-data/composer1/provider.tf",
    "content": "provider \"google\" {}\n"
  },
  {
    "path": "test-data/composer1/variables.tf",
    "content": "variable \"billing_account_id\" {}\n\nvariable \"org_id\" {}\nvariable \"folder_id\" { default = \"\" }\n"
  },
  {
    "path": "test-data/dataflow1/Makefile",
    "content": "PROJECT_ID  := $(shell /google/data/ro/teams/terraform/bin/terraform output project_id)\nPROJECT_ID_SUFFIX := $(shell terraform output project_id_suffix)\nPROJECT_NR  := $(shell terraform output project_nr)\nORG_ID      := $(shell terraform output org_id)\nCURL         = ../../bin/curl-wrap.sh\nJSON_CLEANER = ../../bin/json-cleaner\nREGION = us-central1\nSTREAMING_JOB := $(shell terraform output job_id)\n\nFAKE_PROJECT_ID_SUFFIX = aaaa\nFAKE_PROJECT_NR = 12340010\nFAKE_ORG_ID = 11112222\nSED_SUBST_FAKE = sed -e \"s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/\" \\\n\t\t     -e \"s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/\" \\\n\t\t     -e \"s/$(ORG_ID)/$(FAKE_ORG_ID)/\" \\\n\nall:\t\\\n\tjson-dumps/services.json \\\n\tjson-dumps/dataflow-jobs-${REGION}.json \\\n\tjson-dumps/dataflow-jobs-${REGION}-streaming.json \\\n\tjson-dumps/log-exclusions.json \\\n\tjson-dumps/dataflow-jobs-aggregated\n\ninclude ../Makefile.inc\n\njson-dumps/dataflow-jobs-${REGION}.json:\n\t$(CURL) -fsS \\\n\t\t\"https://dataflow.googleapis.com/v1b3/projects/${PROJECT_ID}/locations/${REGION}/jobs\" \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/dataflow-jobs-${REGION}-streaming.json:\n\t$(CURL) -fsS \\\n\t\t\"https://dataflow.googleapis.com/v1b3/projects/${PROJECT_ID}/locations/${REGION}/jobs/${STREAMING_JOB}\" \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/log-exclusions.json:\n\t$(CURL) -fsS \\\n\t\t\"https://logging.googleapis.com/v2/projects/${PROJECT_ID}/exclusions\" \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/dataflow-jobs-aggregated.json:\n\t$(CURL) -fsS \\\n\t\t\"https://dataflow.googleapis.com/v1b3/projects/${PROJECT_ID}/jobs:aggregated\" \\\n\t\t| $(SED_SUBST_FAKE) >$@\n"
  },
  {
    "path": "test-data/dataflow1/bucket.tf",
    "content": "resource \"google_storage_bucket\" \"dataflow_out\" {\n  name          = \"dataflow_out_${random_string.project_id_suffix.id}\"\n  location      = \"US\"\n  force_destroy = true\n  project       = google_project.project.project_id\n}\n\nresource \"google_storage_bucket\" \"dataflow_streaming\" {\n  name          = \"dataflow_streaming_${random_string.project_id_suffix.id}\"\n  location      = \"US\"\n  force_destroy = true\n  project       = google_project.project.project_id\n}\n"
  },
  {
    "path": "test-data/dataflow1/job.tf",
    "content": "resource \"google_dataflow_job\" \"wordcount\" {\n  project           = google_project.project.project_id\n  region            = \"us-central1\"\n  zone              = \"us-central1-a\"\n  name              = \"wordcount\"\n  template_gcs_path = \"gs://dataflow-templates-us-central1/latest/Word_Count\"\n  temp_gcs_location = \"gs://${google_storage_bucket.dataflow_out.name}/temp\"\n  parameters = {\n    inputFile = \"gs://dataflow-samples/shakespeare/kinglear.txt\"\n    output    = \"gs://${google_storage_bucket.dataflow_out.name}/wordcount/output\"\n  }\n}\n"
  },
  {
    "path": "test-data/dataflow1/json-dumps/dataflow-jobs-aggregated.json",
    "content": "{\n  \"jobs\": [\n    {\n      \"id\": \"2025-07-22_22_34_10-17451985144539182981\",\n      \"projectId\": \"gcpdiag-datafusion1-aaaa\",\n      \"name\": \"job4\",\n      \"type\": \"JOB_TYPE_BATCH\",\n      \"currentState\": \"JOB_STATE_DONE\",\n      \"currentStateTime\": \"2025-07-23T05:38:11.317430Z\",\n      \"createTime\": \"2025-07-23T05:34:10.924396Z\",\n      \"location\": \"us-central1\",\n      \"jobMetadata\": {\n        \"sdkVersion\": {\n          \"version\": \"2.66.0\",\n          \"versionDisplayName\": \"Apache Beam SDK for Java\",\n          \"sdkSupportStatus\": \"SUPPORTED\"\n        }\n      },\n      \"startTime\": \"2025-07-23T05:34:10.924396Z\"\n    },\n    {\n      \"id\": \"2025-07-22_21_52_11-3966210819828600312\",\n      \"projectId\": \"gcpdiag-datafusion1-aaaa\",\n      \"name\": \"job3\",\n      \"type\": \"JOB_TYPE_BATCH\",\n      \"currentState\": \"JOB_STATE_DONE\",\n      \"currentStateTime\": \"2025-07-23T04:58:47.825097Z\",\n      \"createTime\": \"2025-07-23T04:52:14.529770Z\",\n      \"location\": \"southamerica-west1\",\n      \"jobMetadata\": {\n        \"sdkVersion\": {\n          \"version\": \"2.66.0\",\n          \"versionDisplayName\": \"Apache Beam SDK for Java\",\n          \"sdkSupportStatus\": \"SUPPORTED\"\n        }\n      },\n      \"startTime\": \"2025-07-23T04:52:14.529770Z\"\n    },\n    {\n      \"id\": \"2025-07-22_21_51_15-11871078573741836091\",\n      \"projectId\": \"gcpdiag-datafusion1-aaaa\",\n      \"name\": \"job2\",\n      \"type\": \"JOB_TYPE_BATCH\",\n      \"currentState\": \"JOB_STATE_DONE\",\n      \"currentStateTime\": \"2025-07-23T04:56:03.680855Z\",\n      \"createTime\": \"2025-07-23T04:51:17.831890Z\",\n      \"location\": \"europe-west1\",\n      \"jobMetadata\": {\n        \"sdkVersion\": {\n          \"version\": \"2.66.0\",\n          \"versionDisplayName\": \"Apache Beam SDK for Java\",\n          \"sdkSupportStatus\": \"SUPPORTED\"\n        }\n      },\n      \"startTime\": \"2025-07-23T04:51:17.831890Z\"\n    },\n    {\n      \"id\": \"2025-07-22_21_47_07-15366228931864371363\",\n      \"projectId\": \"gcpdiag-datafusion1-aaaa\",\n      \"name\": \"job1\",\n      \"type\": \"JOB_TYPE_BATCH\",\n      \"currentState\": \"JOB_STATE_DONE\",\n      \"currentStateTime\": \"2025-07-23T04:50:48.311811Z\",\n      \"createTime\": \"2025-07-23T04:47:08.425668Z\",\n      \"location\": \"us-central1\",\n      \"jobMetadata\": {\n        \"sdkVersion\": {\n          \"version\": \"2.66.0\",\n          \"versionDisplayName\": \"Apache Beam SDK for Java\",\n          \"sdkSupportStatus\": \"SUPPORTED\"\n        }\n      },\n      \"startTime\": \"2025-07-23T04:47:08.425668Z\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/dataflow1/json-dumps/dataflow-jobs-us-central1-2024-06-19_09_43_07-14927685200167458422.json",
    "content": "{\n  \"id\": \"2024-06-19_09_43_07-14927685200167458422\",\n  \"projectId\": \"gcpdiag-dataflow1-aaaa\",\n  \"name\": \"gcs_to_pubsub\",\n  \"type\": \"JOB_TYPE_STREAMING\",\n  \"environment\": {\n    \"userAgent\": {\n      \"os.version\": \"5.15.0-1058-gcp\",\n      \"legacy.container.version\": \"2.56.0\",\n      \"fnapi.environment.major.version\": \"8\",\n      \"java.version\": \"11.0.23\",\n      \"name\": \"Apache Beam SDK for Java\",\n      \"fnapi.container.version\": \"2.56.0\",\n      \"legacy.environment.major.version\": \"8\",\n      \"java.vendor\": \"Eclipse Adoptium\",\n      \"os.arch\": \"amd64\",\n      \"container.base_repository\": \"gcr.io/cloud-dataflow/v1beta3\",\n      \"os.name\": \"Linux\",\n      \"version\": \"2.56.0\"\n    },\n    \"version\": {\n      \"job_type\": \"STREAMING\",\n      \"major\": \"8\"\n    }\n  },\n  \"currentState\": \"JOB_STATE_RUNNING\",\n  \"currentStateTime\": \"2024-06-19T16:43:28.116816Z\",\n  \"createTime\": \"2024-06-19T16:43:08.018899Z\",\n  \"labels\": {\n    \"goog-dataflow-provided-template-type\": \"legacy\",\n    \"goog-dataflow-provided-template-version\": \"2024-06-11-00_rc00\",\n    \"goog-dataflow-provided-template-name\": \"stream_gcs_text_to_cloud_pubsub\"\n  },\n  \"location\": \"us-central1\",\n  \"stageStates\": [\n    {\n      \"executionStageName\": \"move_stop_computation_step39\",\n      \"executionStageState\": \"JOB_STATE_PENDING\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.105Z\"\n    },\n    {\n      \"executionStageName\": \"move_attach_disks_step41\",\n      \"executionStageState\": \"JOB_STATE_PENDING\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.105Z\"\n    },\n    {\n      \"executionStageName\": \"topology_move_out_disk_input_step\",\n      \"executionStageState\": \"JOB_STATE_PENDING\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.105Z\"\n    },\n    {\n      \"executionStageName\": \"F27\",\n      \"executionStageState\": \"JOB_STATE_RUNNING\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.254Z\"\n    },\n    {\n      \"executionStageName\": \"init_attach_disk_step36\",\n      \"executionStageState\": \"JOB_STATE_PENDING\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.105Z\"\n    },\n    {\n      \"executionStageName\": \"pause_stop_computation_step43\",\n      \"executionStageState\": \"JOB_STATE_PENDING\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.105Z\"\n    },\n    {\n      \"executionStageName\": \"setup_resource_global_gce_worker_pool31\",\n      \"executionStageState\": \"JOB_STATE_DONE\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.393Z\"\n    },\n    {\n      \"executionStageName\": \"init_start_computation_step37\",\n      \"executionStageState\": \"JOB_STATE_PENDING\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.105Z\"\n    },\n    {\n      \"executionStageName\": \"move_detach_disks_step40\",\n      \"executionStageState\": \"JOB_STATE_PENDING\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.105Z\"\n    },\n    {\n      \"executionStageName\": \"move_wait_windmill_setup_step38\",\n      \"executionStageState\": \"JOB_STATE_PENDING\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.105Z\"\n    },\n    {\n      \"executionStageName\": \"F26\",\n      \"executionStageState\": \"JOB_STATE_RUNNING\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.227Z\"\n    },\n    {\n      \"executionStageName\": \"move_start_computation_step42\",\n      \"executionStageState\": \"JOB_STATE_PENDING\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.105Z\"\n    },\n    {\n      \"executionStageName\": \"setup_resource_disks_harness33\",\n      \"executionStageState\": \"JOB_STATE_DONE\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.476Z\"\n    },\n    {\n      \"executionStageName\": \"teardown_resource_disks_harness34\",\n      \"executionStageState\": \"JOB_STATE_DONE\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.509Z\"\n    },\n    {\n      \"executionStageName\": \"failure46\",\n      \"executionStageState\": \"JOB_STATE_PENDING\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.105Z\"\n    },\n    {\n      \"executionStageName\": \"pause_detach_disk_step44\",\n      \"executionStageState\": \"JOB_STATE_PENDING\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.105Z\"\n    },\n    {\n      \"executionStageName\": \"topology_move_in_disk_input_step\",\n      \"executionStageState\": \"JOB_STATE_PENDING\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.105Z\"\n    },\n    {\n      \"executionStageName\": \"F29\",\n      \"executionStageState\": \"JOB_STATE_RUNNING\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.305Z\"\n    },\n    {\n      \"executionStageName\": \"teardown_resource_global_gce_worker_pool32\",\n      \"executionStageState\": \"JOB_STATE_DONE\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.445Z\"\n    },\n    {\n      \"executionStageName\": \"F28\",\n      \"executionStageState\": \"JOB_STATE_RUNNING\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.278Z\"\n    },\n    {\n      \"executionStageName\": \"F30\",\n      \"executionStageState\": \"JOB_STATE_RUNNING\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.332Z\"\n    },\n    {\n      \"executionStageName\": \"topology_init_attach_disk_input_step\",\n      \"executionStageState\": \"JOB_STATE_PENDING\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.105Z\"\n    },\n    {\n      \"executionStageName\": \"setup_windmill35\",\n      \"executionStageState\": \"JOB_STATE_DONE\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.414Z\"\n    },\n    {\n      \"executionStageName\": \"start47\",\n      \"executionStageState\": \"JOB_STATE_DONE\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.212Z\"\n    },\n    {\n      \"executionStageName\": \"topology_pause_input_step\",\n      \"executionStageState\": \"JOB_STATE_PENDING\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.105Z\"\n    },\n    {\n      \"executionStageName\": \"success45\",\n      \"executionStageState\": \"JOB_STATE_PENDING\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.105Z\"\n    }\n  ],\n  \"jobMetadata\": {\n    \"sdkVersion\": {\n      \"version\": \"2.56.0\",\n      \"versionDisplayName\": \"Apache Beam SDK for Java\",\n      \"sdkSupportStatus\": \"SUPPORTED\"\n    }\n  },\n  \"startTime\": \"2024-06-19T16:43:08.018899Z\"\n}\n"
  },
  {
    "path": "test-data/dataflow1/json-dumps/dataflow-jobs-us-central1-streaming.json",
    "content": "{\n  \"id\": \"2024-06-19_09_43_07-14927685200167458422\",\n  \"projectId\": \"gcpdiag-dataflow1-aaaa\",\n  \"name\": \"gcs_to_pubsub\",\n  \"type\": \"JOB_TYPE_STREAMING\",\n  \"environment\": {\n    \"userAgent\": {\n      \"fnapi.environment.major.version\": \"8\",\n      \"fnapi.container.version\": \"2.56.0\",\n      \"container.base_repository\": \"gcr.io/cloud-dataflow/v1beta3\",\n      \"os.arch\": \"amd64\",\n      \"os.name\": \"Linux\",\n      \"os.version\": \"5.15.0-1058-gcp\",\n      \"java.vendor\": \"Eclipse Adoptium\",\n      \"version\": \"2.56.0\",\n      \"name\": \"Apache Beam SDK for Java\",\n      \"legacy.container.version\": \"2.56.0\",\n      \"legacy.environment.major.version\": \"8\",\n      \"java.version\": \"11.0.23\"\n    },\n    \"version\": {\n      \"major\": \"8\",\n      \"job_type\": \"STREAMING\"\n    }\n  },\n  \"currentState\": \"JOB_STATE_RUNNING\",\n  \"currentStateTime\": \"2024-06-19T16:43:28.116816Z\",\n  \"createTime\": \"2024-06-19T16:43:08.018899Z\",\n  \"labels\": {\n    \"goog-dataflow-provided-template-name\": \"stream_gcs_text_to_cloud_pubsub\",\n    \"goog-dataflow-provided-template-type\": \"legacy\",\n    \"goog-dataflow-provided-template-version\": \"2024-06-11-00_rc00\"\n  },\n  \"location\": \"us-central1\",\n  \"stageStates\": [\n    {\n      \"executionStageName\": \"topology_init_attach_disk_input_step\",\n      \"executionStageState\": \"JOB_STATE_PENDING\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.105Z\"\n    },\n    {\n      \"executionStageName\": \"success45\",\n      \"executionStageState\": \"JOB_STATE_PENDING\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.105Z\"\n    },\n    {\n      \"executionStageName\": \"move_stop_computation_step39\",\n      \"executionStageState\": \"JOB_STATE_PENDING\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.105Z\"\n    },\n    {\n      \"executionStageName\": \"setup_resource_disks_harness33\",\n      \"executionStageState\": \"JOB_STATE_DONE\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.476Z\"\n    },\n    {\n      \"executionStageName\": \"init_attach_disk_step36\",\n      \"executionStageState\": \"JOB_STATE_PENDING\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.105Z\"\n    },\n    {\n      \"executionStageName\": \"failure46\",\n      \"executionStageState\": \"JOB_STATE_PENDING\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.105Z\"\n    },\n    {\n      \"executionStageName\": \"F27\",\n      \"executionStageState\": \"JOB_STATE_RUNNING\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.254Z\"\n    },\n    {\n      \"executionStageName\": \"topology_move_in_disk_input_step\",\n      \"executionStageState\": \"JOB_STATE_PENDING\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.105Z\"\n    },\n    {\n      \"executionStageName\": \"teardown_resource_disks_harness34\",\n      \"executionStageState\": \"JOB_STATE_DONE\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.509Z\"\n    },\n    {\n      \"executionStageName\": \"pause_stop_computation_step43\",\n      \"executionStageState\": \"JOB_STATE_PENDING\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.105Z\"\n    },\n    {\n      \"executionStageName\": \"setup_resource_global_gce_worker_pool31\",\n      \"executionStageState\": \"JOB_STATE_DONE\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.393Z\"\n    },\n    {\n      \"executionStageName\": \"teardown_resource_global_gce_worker_pool32\",\n      \"executionStageState\": \"JOB_STATE_DONE\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.445Z\"\n    },\n    {\n      \"executionStageName\": \"topology_move_out_disk_input_step\",\n      \"executionStageState\": \"JOB_STATE_PENDING\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.105Z\"\n    },\n    {\n      \"executionStageName\": \"F30\",\n      \"executionStageState\": \"JOB_STATE_RUNNING\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.332Z\"\n    },\n    {\n      \"executionStageName\": \"F29\",\n      \"executionStageState\": \"JOB_STATE_RUNNING\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.305Z\"\n    },\n    {\n      \"executionStageName\": \"move_detach_disks_step40\",\n      \"executionStageState\": \"JOB_STATE_PENDING\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.105Z\"\n    },\n    {\n      \"executionStageName\": \"init_start_computation_step37\",\n      \"executionStageState\": \"JOB_STATE_PENDING\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.105Z\"\n    },\n    {\n      \"executionStageName\": \"F26\",\n      \"executionStageState\": \"JOB_STATE_RUNNING\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.227Z\"\n    },\n    {\n      \"executionStageName\": \"setup_windmill35\",\n      \"executionStageState\": \"JOB_STATE_DONE\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.414Z\"\n    },\n    {\n      \"executionStageName\": \"move_attach_disks_step41\",\n      \"executionStageState\": \"JOB_STATE_PENDING\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.105Z\"\n    },\n    {\n      \"executionStageName\": \"start47\",\n      \"executionStageState\": \"JOB_STATE_DONE\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.212Z\"\n    },\n    {\n      \"executionStageName\": \"topology_pause_input_step\",\n      \"executionStageState\": \"JOB_STATE_PENDING\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.105Z\"\n    },\n    {\n      \"executionStageName\": \"F28\",\n      \"executionStageState\": \"JOB_STATE_RUNNING\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.278Z\"\n    },\n    {\n      \"executionStageName\": \"move_wait_windmill_setup_step38\",\n      \"executionStageState\": \"JOB_STATE_PENDING\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.105Z\"\n    },\n    {\n      \"executionStageName\": \"move_start_computation_step42\",\n      \"executionStageState\": \"JOB_STATE_PENDING\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.105Z\"\n    },\n    {\n      \"executionStageName\": \"pause_detach_disk_step44\",\n      \"executionStageState\": \"JOB_STATE_PENDING\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.105Z\"\n    }\n  ],\n  \"jobMetadata\": {\n    \"sdkVersion\": {\n      \"version\": \"2.56.0\",\n      \"versionDisplayName\": \"Apache Beam SDK for Java\",\n      \"sdkSupportStatus\": \"SUPPORTED\"\n    }\n  },\n  \"startTime\": \"2024-06-19T16:43:08.018899Z\"\n}\n"
  },
  {
    "path": "test-data/dataflow1/json-dumps/dataflow-jobs-us-central1.json",
    "content": "{\n  \"jobs\": [\n    {\n      \"id\": \"2024-06-19_09_43_07-14927685200167458422\",\n      \"projectId\": \"gcpdiag-dataflow1-aaaa\",\n      \"name\": \"gcs_to_pubsub\",\n      \"type\": \"JOB_TYPE_STREAMING\",\n      \"currentState\": \"JOB_STATE_RUNNING\",\n      \"currentStateTime\": \"2024-06-19T16:43:28.116816Z\",\n      \"createTime\": \"2024-06-19T16:43:08.018899Z\",\n      \"location\": \"us-central1\",\n      \"jobMetadata\": {\n        \"sdkVersion\": {\n          \"version\": \"2.56.0\",\n          \"versionDisplayName\": \"Apache Beam SDK for Java\",\n          \"sdkSupportStatus\": \"SUPPORTED\"\n        }\n      },\n      \"startTime\": \"2024-06-19T16:43:08.018899Z\"\n    },\n    {\n      \"id\": \"2024-06-19_09_41_43-15216240402532481212\",\n      \"projectId\": \"gcpdiag-dataflow1-aaaa\",\n      \"name\": \"wordcount\",\n      \"type\": \"JOB_TYPE_BATCH\",\n      \"currentState\": \"JOB_STATE_RUNNING\",\n      \"currentStateTime\": \"2024-06-19T16:42:05.007311Z\",\n      \"createTime\": \"2024-06-19T16:41:44.282745Z\",\n      \"location\": \"us-central1\",\n      \"jobMetadata\": {\n        \"sdkVersion\": {\n          \"version\": \"2.56.0\",\n          \"versionDisplayName\": \"Apache Beam SDK for Java\",\n          \"sdkSupportStatus\": \"SUPPORTED\"\n        }\n      },\n      \"startTime\": \"2024-06-19T16:41:44.282745Z\"\n    },\n    {\n      \"id\": \"2024-06-19_08_10_38-15531843170089278179\",\n      \"projectId\": \"gcpdiag-dataflow1-aaaa\",\n      \"name\": \"wordcount\",\n      \"type\": \"JOB_TYPE_BATCH\",\n      \"currentState\": \"JOB_STATE_DONE\",\n      \"currentStateTime\": \"2024-06-19T15:14:14.365221Z\",\n      \"createTime\": \"2024-06-19T15:10:38.936010Z\",\n      \"location\": \"us-central1\",\n      \"jobMetadata\": {\n        \"sdkVersion\": {\n          \"version\": \"2.56.0\",\n          \"versionDisplayName\": \"Apache Beam SDK for Java\",\n          \"sdkSupportStatus\": \"SUPPORTED\"\n        }\n      },\n      \"startTime\": \"2024-06-19T15:10:38.936010Z\"\n    },\n    {\n      \"id\": \"2024-06-19_07_59_26-766567214503751731\",\n      \"projectId\": \"gcpdiag-dataflow1-aaaa\",\n      \"name\": \"wordcount\",\n      \"type\": \"JOB_TYPE_BATCH\",\n      \"currentState\": \"JOB_STATE_DONE\",\n      \"currentStateTime\": \"2024-06-19T15:03:16.392683Z\",\n      \"createTime\": \"2024-06-19T14:59:27.276728Z\",\n      \"location\": \"us-central1\",\n      \"jobMetadata\": {\n        \"sdkVersion\": {\n          \"version\": \"2.56.0\",\n          \"versionDisplayName\": \"Apache Beam SDK for Java\",\n          \"sdkSupportStatus\": \"SUPPORTED\"\n        }\n      },\n      \"startTime\": \"2024-06-19T14:59:27.276728Z\"\n    },\n    {\n      \"id\": \"2024-06-19_07_51_58-13902424742190346031\",\n      \"projectId\": \"gcpdiag-dataflow1-aaaa\",\n      \"name\": \"wordcount\",\n      \"type\": \"JOB_TYPE_BATCH\",\n      \"currentState\": \"JOB_STATE_DONE\",\n      \"currentStateTime\": \"2024-06-19T14:55:38.822058Z\",\n      \"createTime\": \"2024-06-19T14:51:58.893292Z\",\n      \"location\": \"us-central1\",\n      \"jobMetadata\": {\n        \"sdkVersion\": {\n          \"version\": \"2.56.0\",\n          \"versionDisplayName\": \"Apache Beam SDK for Java\",\n          \"sdkSupportStatus\": \"SUPPORTED\"\n        }\n      },\n      \"startTime\": \"2024-06-19T14:51:58.893292Z\"\n    },\n    {\n      \"id\": \"2024-06-19_07_42_27-12921783906907618720\",\n      \"projectId\": \"gcpdiag-dataflow1-aaaa\",\n      \"name\": \"wordcount\",\n      \"type\": \"JOB_TYPE_BATCH\",\n      \"currentState\": \"JOB_STATE_DONE\",\n      \"currentStateTime\": \"2024-06-19T14:45:58.411614Z\",\n      \"createTime\": \"2024-06-19T14:42:28.343181Z\",\n      \"location\": \"us-central1\",\n      \"jobMetadata\": {\n        \"sdkVersion\": {\n          \"version\": \"2.56.0\",\n          \"versionDisplayName\": \"Apache Beam SDK for Java\",\n          \"sdkSupportStatus\": \"SUPPORTED\"\n        }\n      },\n      \"startTime\": \"2024-06-19T14:42:28.343181Z\"\n    },\n    {\n      \"id\": \"2024-06-19_07_37_46-7047804751824995263\",\n      \"projectId\": \"gcpdiag-dataflow1-aaaa\",\n      \"name\": \"wordcount\",\n      \"type\": \"JOB_TYPE_BATCH\",\n      \"currentState\": \"JOB_STATE_DONE\",\n      \"currentStateTime\": \"2024-06-19T14:41:25.220041Z\",\n      \"createTime\": \"2024-06-19T14:37:46.585152Z\",\n      \"location\": \"us-central1\",\n      \"jobMetadata\": {\n        \"sdkVersion\": {\n          \"version\": \"2.56.0\",\n          \"versionDisplayName\": \"Apache Beam SDK for Java\",\n          \"sdkSupportStatus\": \"SUPPORTED\"\n        }\n      },\n      \"startTime\": \"2024-06-19T14:37:46.585152Z\"\n    },\n    {\n      \"id\": \"2024-06-19_07_33_03-9867569406752004768\",\n      \"projectId\": \"gcpdiag-dataflow1-aaaa\",\n      \"name\": \"wordcount\",\n      \"type\": \"JOB_TYPE_BATCH\",\n      \"currentState\": \"JOB_STATE_DONE\",\n      \"currentStateTime\": \"2024-06-19T14:37:09.875218Z\",\n      \"createTime\": \"2024-06-19T14:33:04.923545Z\",\n      \"location\": \"us-central1\",\n      \"jobMetadata\": {\n        \"sdkVersion\": {\n          \"version\": \"2.56.0\",\n          \"versionDisplayName\": \"Apache Beam SDK for Java\",\n          \"sdkSupportStatus\": \"SUPPORTED\"\n        }\n      },\n      \"startTime\": \"2024-06-19T14:33:04.923545Z\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/dataflow1/json-dumps/iam-policy.json",
    "content": "{\n  \"bindings\": [\n    {\n      \"members\": [\n        \"serviceAccount:service-12340005@compute-system.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/compute.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12340005@dataproc-accounts.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/dataproc.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:saworker@gcpdiag-dataproc1-aaaa.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/dataproc.worker\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:12340005@cloudservices.gserviceaccount.com\",\n        \"serviceAccount:12340005-compute@developer.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/editor\"\n    },\n    {\n      \"members\": [\n        \"user:testuser@example.com\"\n      ],\n      \"role\": \"roles/owner\"\n    }\n  ],\n  \"etag\": \"BwXpl3K8tAs=\",\n  \"version\": 1\n}\n"
  },
  {
    "path": "test-data/dataflow1/json-dumps/iam-service-accounts.json",
    "content": "{\n      \"accounts\": [\n            {\n                  \"displayName\": \"Dataproc VM Service account with Dataproc Worker role\",\n                  \"email\": \"saworker@gcpdiag-dataproc1-aaaa.iam.gserviceaccount.com\",\n                  \"etag\": \"MDEwMjE5MjA=\",\n                  \"name\": \"projects/gcpdiag-dataproc1-aaaa/serviceAccounts/saworker@gcpdiag-dataproc1-kn5j5rip.iam.gserviceaccount.com\",\n                  \"oauth2ClientId\": \"REDACTED\",\n                  \"projectId\": \"gcpdiag-dataproc1-aaaa\",\n                  \"uniqueId\": \"105281637601268155015\"\n            },\n            {\n                  \"displayName\": \"Compute Engine default service account\",\n                  \"email\": \"12340005-compute@developer.gserviceaccount.com\",\n                  \"etag\": \"MDEwMjE5MjA=\",\n                  \"name\": \"projects/gcpdiag-dataproc1-aaaa/serviceAccounts/12340005-compute@developer.gserviceaccount.com\",\n                  \"oauth2ClientId\": \"REDACTED\",\n                  \"projectId\": \"gcpdiag-dataproc1-aaaa\",\n                  \"uniqueId\": \"117777538759795875305\"\n            }\n      ]\n}\n"
  },
  {
    "path": "test-data/dataflow1/json-dumps/log-exclusions.json",
    "content": "{}\n"
  },
  {
    "path": "test-data/dataflow1/json-dumps/logging-entries-1.json",
    "content": "{\n  \"entries\": [\n  ]\n}\n"
  },
  {
    "path": "test-data/dataflow1/json-dumps/project.json",
    "content": "{\n  \"name\": \"projects/12340010\",\n  \"parent\": \"folders/373737373737\",\n  \"projectId\": \"gcpdiag-datafusion1-aaaa\",\n  \"state\": \"ACTIVE\",\n  \"displayName\": \"gcpdiag test - datafusion1\",\n  \"createTime\": \"2022-08-22T00:30:38.739Z\",\n  \"updateTime\": \"2022-08-22T00:30:40.979Z\",\n  \"etag\": \"GR9oFf6Dr8RG0RV6c2fhYg==\"\n}\n"
  },
  {
    "path": "test-data/dataflow1/json-dumps/services.json",
    "content": "{\n  \"services\": [\n    {\n      \"name\": \"projects/12340010/services/cloudresourcemanager.googleapis.com\",\n      \"config\": {\n        \"name\": \"cloudresourcemanager.googleapis.com\",\n        \"title\": \"Cloud Resource Manager API\",\n        \"documentation\": {\n          \"summary\": \"Creates, reads, and updates metadata for Google Cloud Platform resource containers.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"serviceruntime.googleapis.com/api\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_version\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_method\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/consumer_project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/consumer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/producer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/consumer_resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/api\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/api/consumer/quota_used_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_refund_count\",\n                \"serviceruntime.googleapis.com/quota/used\",\n                \"serviceruntime.googleapis.com/quota/limit\",\n                \"serviceruntime.googleapis.com/quota/exceeded\",\n                \"serviceruntime.googleapis.com/allocation/consumer/quota_used_count\",\n                \"serviceruntime.googleapis.com/api/consumer/request_count\",\n                \"serviceruntime.googleapis.com/api/consumer/error_count\",\n                \"serviceruntime.googleapis.com/api/consumer/total_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_overhead_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/backend_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/response_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/consumer_quota\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/quota/rate/consumer/used_count\",\n                \"serviceruntime.googleapis.com/quota/rate/consumer/refund_count\",\n                \"serviceruntime.googleapis.com/quota/allocation/consumer/usage\",\n                \"serviceruntime.googleapis.com/quota/consumer/limit\",\n                \"serviceruntime.googleapis.com/quota/consumer/exceeded\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340010\"\n    },\n    {\n      \"name\": \"projects/12340010/services/compute.googleapis.com\",\n      \"config\": {\n        \"name\": \"compute.googleapis.com\",\n        \"title\": \"Compute Engine API\",\n        \"documentation\": {\n          \"summary\": \"Creates and runs virtual machines on Google Cloud Platform.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"compute.googleapis.com/VpcNetwork\",\n            \"displayName\": \"VPC Network\",\n            \"description\": \"VPC Network.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the VPC Network.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the VPC Network, global always.\"\n              },\n              {\n                \"key\": \"network_id\",\n                \"description\": \"VPC Network resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Location\",\n            \"displayName\": \"Compute Location\",\n            \"description\": \"A location in the Compute API.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the Compute Location.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/instances_per_vpc_network\",\n                \"compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/ip_aliases_per_vpc_network\",\n                \"compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/subnet_ranges_per_vpc_network\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Location\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Location\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340010\"\n    },\n    {\n      \"name\": \"projects/12340010/services/dataflow.googleapis.com\",\n      \"config\": {\n        \"name\": \"dataflow.googleapis.com\",\n        \"title\": \"Dataflow API\",\n        \"documentation\": {\n          \"summary\": \"Manages Google Cloud Dataflow projects on Google Cloud Platform.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/billing-enabled\",\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"dataflow.googleapis.com/Project\",\n            \"displayName\": \"Dataflow Project\",\n            \"description\": \"A project level monitored resource for Dataflow.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as \\\"my-project\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location where Dataflow jobs are running.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"dataflow.googleapis.com/Project\",\n              \"metrics\": [\n                \"dataflow.googleapis.com/quota/region_endpoint_shuffle_slot/exceeded\",\n                \"dataflow.googleapis.com/region_endpoint_shuffle_slot\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"dataflow.googleapis.com/Project\",\n              \"metrics\": [\n                \"dataflow.googleapis.com/quota/region_endpoint_shuffle_slot/limit\",\n                \"dataflow.googleapis.com/quota/region_endpoint_shuffle_slot/usage\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340010\"\n    },\n    {\n      \"name\": \"projects/12340010/services/deploymentmanager.googleapis.com\",\n      \"config\": {\n        \"name\": \"deploymentmanager.googleapis.com\",\n        \"title\": \"Cloud Deployment Manager V2 API\",\n        \"documentation\": {\n          \"summary\": \"The Google Cloud Deployment Manager v2 API provides services for configuring, deploying, and\\nviewing Google Cloud services and APIs via templates which specify deployments of Cloud\\nresources.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340010\"\n    },\n    {\n      \"name\": \"projects/12340010/services/iam.googleapis.com\",\n      \"config\": {\n        \"name\": \"iam.googleapis.com\",\n        \"title\": \"Identity and Access Management (IAM) API\",\n        \"documentation\": {\n          \"summary\": \"Manages identity and access control for Google Cloud Platform resources, including the creation of service accounts, which you can use to authenticate to Google and make API calls.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"iam_service_account\",\n            \"displayName\": \"IAM Service Account\",\n            \"description\": \"An IAM Service Account.\",\n            \"labels\": [\n              {\n                \"key\": \"project_id\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"unique_id\",\n                \"description\": \"The unique_id of the service account.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"iam.googleapis.com/WorkloadIdentityPoolProvider\",\n            \"displayName\": \"Workload Identity Pool Provider\",\n            \"description\": \"A workload identity pool provider.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location of the resource.\"\n              },\n              {\n                \"key\": \"pool_id\",\n                \"description\": \"The ID of the provider's workload identity pool parent resource.\"\n              },\n              {\n                \"key\": \"provider_id\",\n                \"description\": \"The ID of the workload identity pool provider resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"iam.googleapis.com/WorkloadIdentityPoolProvider\",\n              \"metrics\": [\n                \"iam.googleapis.com/workload_identity_federation/count\",\n                \"iam.googleapis.com/workload_identity_federation/key_usage_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"iam_service_account\",\n              \"metrics\": [\n                \"iam.googleapis.com/service_account/authn_events_count\",\n                \"iam.googleapis.com/service_account/key/authn_events_count\",\n                \"iam.googleapis.com/service_account/authn_events_count_preprod\",\n                \"iam.googleapis.com/service_account/key/authn_events_count_preprod\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340010\"\n    },\n    {\n      \"name\": \"projects/12340010/services/iamcredentials.googleapis.com\",\n      \"config\": {\n        \"name\": \"iamcredentials.googleapis.com\",\n        \"title\": \"IAM Service Account Credentials API\",\n        \"documentation\": {\n          \"summary\": \"Creates short-lived credentials for impersonating IAM service accounts. To enable this API, you must enable the IAM API (iam.googleapis.com).\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340010\"\n    },\n    {\n      \"name\": \"projects/12340010/services/logging.googleapis.com\",\n      \"config\": {\n        \"name\": \"logging.googleapis.com\",\n        \"title\": \"Cloud Logging API\",\n        \"documentation\": {\n          \"summary\": \"Writes log entries and manages your Cloud Logging configuration.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"logging.googleapis.com/ChargedProject\",\n            \"displayName\": \"Cloud logging target\",\n            \"description\": \"A cloud logging specialization target schema of cloud.ChargedProject.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The monitored resource container. Could be project, workspace, etc.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The service-specific notion of location.\"\n              },\n              {\n                \"key\": \"service\",\n                \"description\": \"The name of the API service with which the data is associated (e.g.,'logging.googleapis.com').\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"logging.googleapis.com/ChargedProject\",\n              \"metrics\": [\n                \"logging.googleapis.com/billing/ingested_bytes\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340010\"\n    },\n    {\n      \"name\": \"projects/12340010/services/oslogin.googleapis.com\",\n      \"config\": {\n        \"name\": \"oslogin.googleapis.com\",\n        \"title\": \"Cloud OS Login API\",\n        \"documentation\": {\n          \"summary\": \"You can use OS Login to manage access to your VM instances using IAM roles.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340010\"\n    },\n    {\n      \"name\": \"projects/12340010/services/storage-api.googleapis.com\",\n      \"config\": {\n        \"name\": \"storage-api.googleapis.com\",\n        \"title\": \"Google Cloud Storage JSON API\",\n        \"documentation\": {\n          \"summary\": \"Lets you store and retrieve potentially-large, immutable data objects.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340010\"\n    },\n    {\n      \"name\": \"projects/12340010/services/storage-component.googleapis.com\",\n      \"config\": {\n        \"name\": \"storage-component.googleapis.com\",\n        \"title\": \"Cloud Storage\",\n        \"documentation\": {\n          \"summary\": \"Google Cloud Storage is a RESTful service for storing and accessing your data on Google's\\n    infrastructure.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"serviceruntime.googleapis.com/api\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_version\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_method\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/consumer_project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/consumer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/producer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/consumer_resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/api\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/api/consumer/request_count\",\n                \"serviceruntime.googleapis.com/api/consumer/error_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_used_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_refund_count\",\n                \"serviceruntime.googleapis.com/api/consumer/total_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_overhead_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/backend_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/response_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer\",\n                \"serviceruntime.googleapis.com/quota/used\",\n                \"serviceruntime.googleapis.com/quota/limit\",\n                \"serviceruntime.googleapis.com/quota/exceeded\",\n                \"serviceruntime.googleapis.com/allocation/consumer/quota_used_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/consumer_quota\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/quota/rate/consumer/used_count\",\n                \"serviceruntime.googleapis.com/quota/rate/consumer/refund_count\",\n                \"serviceruntime.googleapis.com/quota/allocation/consumer/usage\",\n                \"serviceruntime.googleapis.com/quota/consumer/limit\",\n                \"serviceruntime.googleapis.com/quota/consumer/exceeded\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340010\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/dataflow1/project.tf",
    "content": "resource \"random_string\" \"project_id_suffix\" {\n  length  = 8\n  number  = true\n  lower   = true\n  upper   = false\n  special = false\n}\n\nresource \"google_project\" \"project\" {\n  name       = \"gcpdiag test - dataflow1\"\n  project_id = \"gcpdiag-dataflow1-${random_string.project_id_suffix.id}\"\n  org_id     = var.folder_id == \"\" ? var.org_id : null\n  folder_id  = var.folder_id != \"\" ? var.folder_id : null\n  # billing_account = var.billing_account_id\n  labels = {\n    gcpdiag : \"test\"\n  }\n  lifecycle {\n    ignore_changes = all\n  }\n}\n\nresource \"google_project_service\" \"dataflow\" {\n  project = google_project.project.project_id\n  service = \"dataflow.googleapis.com\"\n}\n\nresource \"google_project_service\" \"iam\" {\n  project = google_project.project.project_id\n  service = \"iam.googleapis.com\"\n}\n\noutput \"project_id\" {\n  value = google_project.project.project_id\n}\n\noutput \"project_id_suffix\" {\n  value = random_string.project_id_suffix.id\n}\n\noutput \"project_nr\" {\n  value = google_project.project.number\n}\n\noutput \"org_id\" {\n  value = var.org_id\n}\n\noutput \"job_id\" {\n  value = google_dataflow_job.gcs_to_pubsub_dataflow_streaming.id\n}\n"
  },
  {
    "path": "test-data/dataflow1/streaming_job.tf",
    "content": "# https://cloud.google.com/dataflow/docs/guides/templates/provided-templates\n# https://cloud.google.com/dataflow/docs/guides/templates/using-flex-templates\n\nresource \"google_dataflow_job\" \"gcs_to_pubsub_dataflow_streaming\" {\n  project           = google_project.project.project_id\n  region            = \"us-central1\"\n  zone              = \"us-central1-a\"\n  name              = \"gcs_to_pubsub\"\n  template_gcs_path = \"gs://dataflow-templates-europe-north1/latest/Stream_GCS_Text_to_Cloud_PubSub\"\n  temp_gcs_location = \"gs://${google_storage_bucket.dataflow_streaming.name}/gcs_to_pubsub/temp\"\n  parameters = {\n    inputFilePattern = \"${google_storage_bucket.dataflow_streaming.url}/input/*.json\"\n    outputTopic      = google_pubsub_topic.topic.id\n  }\n  transform_name_mapping = {\n    name = \"test_job\"\n    env  = \"test\"\n  }\n  on_delete = \"cancel\"\n}\n\nresource \"google_pubsub_topic\" \"topic\" {\n  name    = \"dataflow-job-streaming\"\n  project = google_project.project.project_id\n}\n\n# https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/dataflow_job\n"
  },
  {
    "path": "test-data/dataflow1/variables.tf",
    "content": "variable \"billing_account_id\" {}\n\nvariable \"org_id\" {}\nvariable \"folder_id\" { default = \"\" }\n"
  },
  {
    "path": "test-data/datafusion1/Makefile",
    "content": "PROJECT_ID  := $(shell terraform output -raw project_id)\nPROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix)\nPROJECT_NR  := $(shell terraform output -raw project_nr)\nORG_ID      := $(shell terraform output -raw org_id)\nCURL         = ../../bin/curl-wrap.sh\nJSON_CLEANER = ../../bin/json-cleaner\nREGION_1     = us-central1\nZONE_1       = us-central1-b\nZONE_2       = us-central1-a\n\nFAKE_PROJECT_ID_SUFFIX = aaaa\nFAKE_PROJECT_NR = 12340010\nFAKE_ORG_ID = 11112222\nSED_SUBST_FAKE = sed -e \"s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/\" \\\n\t\t     -e \"s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/\" \\\n\t\t     -e \"s/$(ORG_ID)/$(FAKE_ORG_ID)/\" \\\n\n\nall:\t\\\n\tjson-dumps/project.json \\\n\tjson-dumps/services.json \\\n\tjson-dumps/datafusion-instances.json \\\n\tjson-dumps/iam-policy.json \\\n        json-dumps/iam-service-accounts.json \\\n        json-dumps/iam-service-account-policy.json \\\n\tjson-dumps/compute-network-default.json \\\n\tjson-dumps/compute-subnetworks-europe-west4.json \\\n\tjson-dumps/compute-subnetworks-us-central1.json \\\n\tjson-dumps/compute-effective-firewalls-default.json \\\n\tjson-dumps/compute-subnetworks-aggregated.json \\\n\ninclude ../Makefile.inc\n\njson-dumps/datafusion-instances.json:\n\t$(CURL) -fsS \\\n\t  \t'https://datafusion.googleapis.com/v1/projects/$(PROJECT_ID)/locations/-/instances' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/iam-service-account-policy.json:\n\t$(CURL) -fsS \\\n\t  'https://iam.googleapis.com/v1/projects/$(PROJECT_ID)/serviceAccounts/$(SERVICE_ACCOUNT):getIamPolicy' \\\n\t  | $(JSON_CLEANER) service-accounts \\\n\t  | $(SED_SUBST_FAKE) >$@\n"
  },
  {
    "path": "test-data/datafusion1/README.md",
    "content": "Create terraform project\n\n```\nterraform plan -var=\"billing_account_id=0123456-ABCDEF-987654\" -var=\"org_id=123456789012\"\nterraform apply -var=\"billing_account_id=0123456-ABCDEF-987654\" -var=\"org_id=123456789012\"\n```\n\nRefresh json dumps:\n```\nmake all\n```\n"
  },
  {
    "path": "test-data/datafusion1/datafusion.tf",
    "content": "/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nresource \"google_data_fusion_instance\" \"datafusion1\" {\n  # https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/data_fusion_instance\n  project                       = google_project.project.project_id\n  name                          = \"datafusion1\"\n  description                   = \"gcpdiag Test Data Fusion instance\"\n  region                        = \"us-central1\"\n  type                          = \"BASIC\"\n  enable_stackdriver_logging    = true\n  enable_stackdriver_monitoring = true\n  labels = {\n    gcpdiag = \"test\"\n  }\n  private_instance = true\n  network_config {\n    network       = \"default\"\n    ip_allocation = \"10.89.48.0/22\"\n  }\n}\n"
  },
  {
    "path": "test-data/datafusion1/json-dumps/compute-effective-firewalls-default.json",
    "content": "{\n  \"firewalls\": [\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"6309553779892444789\",\n      \"creationTimestamp\": \"2022-09-09T17:55:54.139-07:00\",\n      \"name\": \"default-allow-ssh\",\n      \"description\": \"Allow SSH from anywhere\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default\",\n      \"priority\": 65534,\n      \"sourceRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"22\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/firewalls/default-allow-ssh\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"7541653105385299573\",\n      \"creationTimestamp\": \"2022-09-09T17:55:54.259-07:00\",\n      \"name\": \"default-allow-icmp\",\n      \"description\": \"Allow ICMP from anywhere\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default\",\n      \"priority\": 65534,\n      \"sourceRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"icmp\"\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/firewalls/default-allow-icmp\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"647222287308054133\",\n      \"creationTimestamp\": \"2022-09-09T17:55:54.079-07:00\",\n      \"name\": \"default-allow-internal\",\n      \"description\": \"Allow internal traffic on the default network\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default\",\n      \"priority\": 65534,\n      \"sourceRanges\": [\n        \"10.128.0.0/9\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"0-65535\"\n          ]\n        },\n        {\n          \"IPProtocol\": \"udp\",\n          \"ports\": [\n            \"0-65535\"\n          ]\n        },\n        {\n          \"IPProtocol\": \"icmp\"\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/firewalls/default-allow-internal\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"6949887662324342389\",\n      \"creationTimestamp\": \"2022-09-09T17:55:54.199-07:00\",\n      \"name\": \"default-allow-rdp\",\n      \"description\": \"Allow RDP from anywhere\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default\",\n      \"priority\": 65534,\n      \"sourceRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"3389\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/firewalls/default-allow-rdp\"\n    }\n  ],\n  \"firewallPolicys\": [\n    {\n      \"name\": \"902824820698\",\n      \"type\": \"HIERARCHY\",\n      \"shortName\": \"default-firewall-policy\",\n      \"displayName\": \"default-firewall-policy\",\n      \"rules\": [\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 0,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"34.82.66.0/24\",\n              \"34.82.90.0/24\",\n              \"34.82.98.0/24\",\n              \"34.82.160.0/24\",\n              \"34.82.166.128/25\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"tcp\"\n              },\n              {\n                \"ipProtocol\": \"udp\"\n              }\n            ]\n          },\n          \"action\": \"allow\",\n          \"direction\": \"INGRESS\"\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 1,\n          \"match\": {\n            \"destIpRanges\": [\n              \"34.83.160.25/32\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"tcp\"\n              },\n              {\n                \"ipProtocol\": \"udp\"\n              }\n            ]\n          },\n          \"action\": \"allow\",\n          \"direction\": \"EGRESS\"\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 2,\n          \"match\": {\n            \"destIpRanges\": [\n              \"34.66.22.47/32\",\n              \"34.66.157.124/32\",\n              \"34.66.164.57/32\",\n              \"34.66.184.118/32\",\n              \"34.66.236.234/32\",\n              \"34.73.86.171/32\",\n              \"34.73.183.215/32\",\n              \"34.76.42.179/32\",\n              \"34.76.71.13/32\",\n              \"34.76.143.192/32\",\n              \"34.76.244.236/32\",\n              \"35.184.49.127/32\",\n              \"35.184.70.255/32\",\n              \"35.184.144.234/32\",\n              \"35.184.228.49/32\",\n              \"35.185.65.36/32\",\n              \"35.185.252.238/32\",\n              \"35.186.160.196/32\",\n              \"35.186.167.183/32\",\n              \"35.186.182.184/32\",\n              \"35.187.2.178/32\",\n              \"35.187.82.234/32\",\n              \"35.187.121.21/32\",\n              \"35.187.169.157/32\",\n              \"35.187.189.105/32\",\n              \"35.188.28.255/32\",\n              \"35.188.58.237/32\",\n              \"35.188.97.47/32\",\n              \"35.188.225.200/32\",\n              \"35.188.244.131/32\",\n              \"35.189.66.48/32\",\n              \"35.189.85.77/32\",\n              \"35.189.87.27/32\",\n              \"35.189.87.89/32\",\n              \"35.189.88.203/32\",\n              \"35.189.93.96/32\",\n              \"35.189.99.57/32\",\n              \"35.189.109.1/32\",\n              \"35.189.114.89/32\",\n              \"35.189.228.0/32\",\n              \"35.189.236.145/32\",\n              \"35.190.139.214/32\",\n              \"35.190.154.170/32\",\n              \"35.190.196.20/32\",\n              \"35.192.2.32/32\",\n              \"35.192.62.107/32\",\n              \"35.192.160.155/32\",\n              \"35.192.233.245/32\",\n              \"35.192.235.233/32\",\n              \"35.193.56.224/32\",\n              \"35.193.76.157/32\",\n              \"35.193.123.0/32\",\n              \"35.193.195.38/32\",\n              \"35.193.200.222/32\",\n              \"35.193.229.109/32\",\n              \"35.193.242.255/32\",\n              \"35.194.66.217/32\",\n              \"35.194.70.28/32\",\n              \"35.195.3.83/32\",\n              \"35.195.53.78/32\",\n              \"35.195.68.98/32\",\n              \"35.195.101.29/32\",\n              \"35.195.113.177/32\",\n              \"35.195.114.253/32\",\n              \"35.195.123.113/32\",\n              \"35.195.140.251/32\",\n              \"35.195.156.23/32\",\n              \"35.195.206.55/32\",\n              \"35.196.5.130/32\",\n              \"35.196.20.59/32\",\n              \"35.196.89.212/32\",\n              \"35.196.115.11/32\",\n              \"35.196.138.125/32\",\n              \"35.196.140.152/32\",\n              \"35.196.217.248/32\",\n              \"35.196.220.144/32\",\n              \"35.197.30.80/32\",\n              \"35.197.38.28/32\",\n              \"35.197.50.103/32\",\n              \"35.197.53.127/32\",\n              \"35.197.55.215/32\",\n              \"35.197.56.191/32\",\n              \"35.197.65.24/32\",\n              \"35.197.75.108/32\",\n              \"35.197.85.13/32\",\n              \"35.197.107.117/32\",\n              \"35.197.108.157/32\",\n              \"35.197.112.50/32\",\n              \"35.197.115.114/32\",\n              \"35.197.125.130/32\",\n              \"35.197.192.22/32\",\n              \"35.197.205.253/32\",\n              \"35.197.210.140/32\",\n              \"35.197.226.207/32\",\n              \"35.197.233.133/32\",\n              \"35.197.246.39/32\",\n              \"35.197.252.73/32\",\n              \"35.197.252.248/32\",\n              \"35.197.254.244/32\",\n              \"35.198.78.35/32\",\n              \"35.198.79.98/32\",\n              \"35.198.84.172/32\",\n              \"35.198.106.28/32\",\n              \"35.198.140.217/32\",\n              \"35.198.158.161/32\",\n              \"35.198.159.26/32\",\n              \"35.199.12.20/32\",\n              \"35.199.27.54/32\",\n              \"35.199.39.165/32\",\n              \"35.199.40.52/32\",\n              \"35.199.54.197/32\",\n              \"35.199.56.100/32\",\n              \"35.199.58.90/32\",\n              \"35.199.154.123/32\",\n              \"35.199.162.95/32\",\n              \"35.199.162.137/32\",\n              \"35.199.175.152/32\",\n              \"35.202.32.145/32\",\n              \"35.202.62.128/32\",\n              \"35.202.98.132/32\",\n              \"35.202.118.10/32\",\n              \"35.202.240.183/32\",\n              \"35.203.142.250/32\",\n              \"35.203.145.190/32\",\n              \"35.203.151.233/32\",\n              \"35.203.155.169/32\",\n              \"35.203.161.173/32\",\n              \"35.203.175.233/32\",\n              \"35.203.184.97/32\",\n              \"35.203.191.135/32\",\n              \"35.204.1.221/32\",\n              \"35.204.12.60/32\",\n              \"35.204.14.12/32\",\n              \"35.204.15.55/32\",\n              \"35.204.15.122/32\",\n              \"35.204.24.135/32\",\n              \"35.204.37.76/32\",\n              \"35.204.46.52/32\",\n              \"35.204.50.90/32\",\n              \"35.204.52.86/32\",\n              \"35.204.60.99/32\",\n              \"35.204.66.9/32\",\n              \"35.204.66.56/32\",\n              \"35.204.74.72/32\",\n              \"35.204.78.201/32\",\n              \"35.204.88.26/32\",\n              \"35.204.98.108/32\",\n              \"35.204.105.22/32\",\n              \"35.204.108.151/32\",\n              \"35.204.115.3/32\",\n              \"35.204.119.162/32\",\n              \"35.204.122.243/32\",\n              \"35.204.123.133/32\",\n              \"35.204.126.58/32\",\n              \"35.204.126.80/32\",\n              \"35.204.129.200/32\",\n              \"35.204.130.59/32\",\n              \"35.204.131.109/32\",\n              \"35.204.141.187/32\",\n              \"35.204.142.195/32\",\n              \"35.204.152.168/32\",\n              \"35.204.162.183/32\",\n              \"35.204.167.122/32\",\n              \"35.204.169.211/32\",\n              \"35.204.172.80/32\",\n              \"35.204.178.217/32\",\n              \"35.204.179.111/32\",\n              \"35.204.190.183/32\",\n              \"35.204.195.27/32\",\n              \"35.204.195.49/32\",\n              \"35.204.196.11/32\",\n              \"35.204.201.70/32\",\n              \"35.204.203.109/32\",\n              \"35.204.207.219/32\",\n              \"35.204.208.228/32\",\n              \"35.204.215.87/32\",\n              \"35.204.217.46/32\",\n              \"35.204.223.176/32\",\n              \"35.204.225.30/32\",\n              \"35.204.225.143/32\",\n              \"35.204.231.201/32\",\n              \"35.204.241.10/32\",\n              \"35.204.251.54/32\",\n              \"35.204.255.0/32\",\n              \"35.205.72.232/32\",\n              \"35.205.138.68/32\",\n              \"35.205.159.40/32\",\n              \"35.205.227.167/32\",\n              \"35.205.228.216/32\",\n              \"35.221.0.61/32\",\n              \"35.221.3.121/32\",\n              \"35.221.3.125/32\",\n              \"35.221.5.200/32\",\n              \"35.221.6.218/32\",\n              \"35.221.13.23/32\",\n              \"35.221.13.133/32\",\n              \"35.221.15.163/32\",\n              \"35.221.16.189/32\",\n              \"35.221.23.24/32\",\n              \"35.221.24.229/32\",\n              \"35.221.24.236/32\",\n              \"35.221.28.149/32\",\n              \"35.221.32.150/32\",\n              \"35.221.32.171/32\",\n              \"35.221.48.160/32\",\n              \"35.221.51.129/32\",\n              \"35.221.55.211/32\",\n              \"35.221.57.195/32\",\n              \"35.222.15.64/32\",\n              \"35.222.245.253/32\",\n              \"35.224.62.254/32\",\n              \"35.224.106.23/32\",\n              \"35.224.115.137/32\",\n              \"35.224.231.238/32\",\n              \"35.225.8.27/32\",\n              \"35.225.39.39/32\",\n              \"35.225.49.103/32\",\n              \"35.225.181.33/32\",\n              \"35.225.226.221/32\",\n              \"35.226.0.100/32\",\n              \"35.226.37.22/32\",\n              \"35.226.94.146/32\",\n              \"35.226.134.67/32\",\n              \"35.226.227.112/32\",\n              \"35.227.24.50/32\",\n              \"35.227.63.36/32\",\n              \"35.227.148.154/32\",\n              \"35.227.164.46/32\",\n              \"35.227.166.150/32\",\n              \"35.227.169.20/32\",\n              \"35.227.185.153/32\",\n              \"35.228.12.151/32\",\n              \"35.228.23.19/32\",\n              \"35.228.24.225/32\",\n              \"35.228.24.253/32\",\n              \"35.228.43.115/32\",\n              \"35.228.46.55/32\",\n              \"35.228.50.150/32\",\n              \"35.228.61.168/32\",\n              \"35.228.62.248/32\",\n              \"35.228.73.69/32\",\n              \"35.228.126.203/32\",\n              \"35.228.133.241/32\",\n              \"35.228.136.253/32\",\n              \"35.228.141.80/32\",\n              \"35.228.151.221/32\",\n              \"35.228.153.106/32\",\n              \"35.228.153.173/32\",\n              \"35.228.165.20/32\",\n              \"35.228.182.144/32\",\n              \"35.228.194.236/32\",\n              \"35.228.207.201/32\",\n              \"35.228.211.51/32\",\n              \"35.228.225.15/32\",\n              \"35.228.240.231/32\",\n              \"35.228.241.74/32\",\n              \"35.228.243.184/32\",\n              \"35.228.247.232/32\",\n              \"35.228.248.131/32\",\n              \"35.228.248.202/32\",\n              \"35.229.32.120/32\",\n              \"35.229.40.166/32\",\n              \"35.229.98.55/32\",\n              \"35.229.121.90/32\",\n              \"35.230.1.88/32\",\n              \"35.230.9.24/32\",\n              \"35.230.25.200/32\",\n              \"35.230.49.71/32\",\n              \"35.230.81.240/32\",\n              \"35.230.85.180/32\",\n              \"35.230.108.26/32\",\n              \"35.230.119.89/32\",\n              \"35.230.125.171/32\",\n              \"35.230.130.62/32\",\n              \"35.230.133.130/32\",\n              \"35.230.136.123/32\",\n              \"35.230.136.172/32\",\n              \"35.230.137.112/32\",\n              \"35.230.138.244/32\",\n              \"35.230.144.1/32\",\n              \"35.230.149.124/32\",\n              \"35.230.150.81/32\",\n              \"35.230.150.240/32\",\n              \"35.230.154.90/32\",\n              \"35.230.174.232/32\",\n              \"35.230.177.25/32\",\n              \"35.230.177.73/32\",\n              \"35.230.182.231/32\",\n              \"35.230.189.18/32\",\n              \"35.231.27.146/32\",\n              \"35.231.37.13/32\",\n              \"35.231.76.215/32\",\n              \"35.231.79.129/32\",\n              \"35.231.92.50/32\",\n              \"35.231.193.144/32\",\n              \"35.231.200.66/32\",\n              \"35.231.205.62/32\",\n              \"35.231.250.82/32\",\n              \"35.232.45.232/32\",\n              \"35.232.94.168/32\",\n              \"35.232.103.119/32\",\n              \"35.232.127.101/32\",\n              \"35.232.139.151/32\",\n              \"35.232.180.7/32\",\n              \"35.233.28.18/32\",\n              \"35.233.40.72/32\",\n              \"35.233.72.242/32\",\n              \"35.233.89.166/32\",\n              \"35.233.99.60/32\",\n              \"35.233.123.101/32\",\n              \"35.233.131.47/32\",\n              \"35.233.132.228/32\",\n              \"35.233.135.75/32\",\n              \"35.233.136.180/32\",\n              \"35.233.139.203/32\",\n              \"35.233.139.255/32\",\n              \"35.233.141.127/32\",\n              \"35.233.146.241/32\",\n              \"35.233.152.253/32\",\n              \"35.233.155.27/32\",\n              \"35.233.159.73/32\",\n              \"35.233.160.114/32\",\n              \"35.233.170.137/32\",\n              \"35.233.177.225/32\",\n              \"35.233.181.13/32\",\n              \"35.233.209.158/32\",\n              \"35.233.211.146/32\",\n              \"35.233.215.174/32\",\n              \"35.233.230.10/32\",\n              \"35.233.237.249/32\",\n              \"35.233.240.97/32\",\n              \"35.233.242.76/32\",\n              \"35.233.243.235/32\",\n              \"35.233.248.120/32\",\n              \"35.233.251.200/32\",\n              \"35.234.74.152/32\",\n              \"35.234.76.60/32\",\n              \"35.234.82.93/32\",\n              \"35.234.97.50/32\",\n              \"35.234.101.43/32\",\n              \"35.234.113.47/32\",\n              \"35.234.124.92/32\",\n              \"35.234.131.84/32\",\n              \"35.234.133.222/32\",\n              \"35.234.141.85/32\",\n              \"35.234.145.128/32\",\n              \"35.234.149.213/32\",\n              \"35.234.150.44/32\",\n              \"35.234.154.126/32\",\n              \"35.234.156.114/32\",\n              \"35.235.66.156/32\",\n              \"35.235.67.142/32\",\n              \"35.235.70.49/32\",\n              \"35.235.77.169/32\",\n              \"35.235.78.149/32\",\n              \"35.235.79.199/32\",\n              \"35.235.82.180/32\",\n              \"35.235.87.249/32\",\n              \"35.235.91.184/32\",\n              \"35.235.92.0/32\",\n              \"35.235.93.225/32\",\n              \"35.235.96.28/32\",\n              \"35.235.100.190/32\",\n              \"35.235.103.216/32\",\n              \"35.235.109.42/32\",\n              \"35.235.110.23/32\",\n              \"35.235.111.166/32\",\n              \"35.235.114.124/32\",\n              \"35.235.114.133/32\",\n              \"35.235.115.36/32\",\n              \"35.235.119.204/32\",\n              \"35.235.120.50/32\",\n              \"35.235.122.190/32\",\n              \"35.235.123.217/32\",\n              \"35.235.124.32/32\",\n              \"35.235.127.151/32\",\n              \"35.236.3.134/32\",\n              \"35.236.6.28/32\",\n              \"35.236.8.4/32\",\n              \"35.236.9.102/32\",\n              \"35.236.10.36/32\",\n              \"35.236.11.136/32\",\n              \"35.236.13.104/32\",\n              \"35.236.16.239/32\",\n              \"35.236.17.90/32\",\n              \"35.236.18.17/32\",\n              \"35.236.23.120/32\",\n              \"35.236.23.130/32\",\n              \"35.236.24.148/32\",\n              \"35.236.27.126/32\",\n              \"35.236.30.92/32\",\n              \"35.236.32.83/32\",\n              \"35.236.41.7/32\",\n              \"35.236.45.102/32\",\n              \"35.236.48.119/32\",\n              \"35.236.48.252/32\",\n              \"35.236.49.204/32\",\n              \"35.236.50.63/32\",\n              \"35.236.50.98/32\",\n              \"35.236.52.137/32\",\n              \"35.236.52.183/32\",\n              \"35.236.54.197/32\",\n              \"35.236.54.236/32\",\n              \"35.236.54.249/32\",\n              \"35.236.66.213/32\",\n              \"35.236.68.82/32\",\n              \"35.236.69.183/32\",\n              \"35.236.72.182/32\",\n              \"35.236.76.220/32\",\n              \"35.236.77.63/32\",\n              \"35.236.77.180/32\",\n              \"35.236.80.100/32\",\n              \"35.236.82.58/32\",\n              \"35.236.83.60/32\",\n              \"35.236.84.168/32\",\n              \"35.236.86.111/32\",\n              \"35.236.87.95/32\",\n              \"35.236.90.57/32\",\n              \"35.236.94.222/32\",\n              \"35.236.97.24/32\",\n              \"35.236.100.13/32\",\n              \"35.236.103.215/32\",\n              \"35.236.107.110/32\",\n              \"35.236.109.101/32\",\n              \"35.236.110.188/32\",\n              \"35.236.111.104/32\",\n              \"35.236.113.26/32\",\n              \"35.236.114.139/32\",\n              \"35.236.116.189/32\",\n              \"35.236.118.35/32\",\n              \"35.236.120.14/32\",\n              \"35.236.123.127/32\",\n              \"35.236.124.70/32\",\n              \"35.236.125.16/32\",\n              \"35.236.126.78/32\",\n              \"35.236.194.140/32\",\n              \"35.236.196.78/32\",\n              \"35.236.204.22/32\",\n              \"35.236.207.204/32\",\n              \"35.236.209.10/32\",\n              \"35.236.219.57/32\",\n              \"35.236.225.160/32\",\n              \"35.236.226.16/32\",\n              \"35.236.228.33/32\",\n              \"35.236.228.41/32\",\n              \"35.236.241.145/32\",\n              \"35.236.242.169/32\",\n              \"35.237.6.119/32\",\n              \"35.237.16.252/32\",\n              \"35.237.32.116/32\",\n              \"35.237.33.255/32\",\n              \"35.237.61.35/32\",\n              \"35.237.129.145/32\",\n              \"35.237.134.39/32\",\n              \"35.237.182.230/32\",\n              \"35.237.209.128/32\",\n              \"35.237.210.45/32\",\n              \"35.237.222.50/32\",\n              \"35.237.235.241/32\",\n              \"35.237.241.81/32\",\n              \"35.237.241.194/32\",\n              \"35.237.245.143/32\",\n              \"35.237.248.171/32\",\n              \"35.239.35.153/32\",\n              \"35.239.51.8/32\",\n              \"35.239.54.20/32\",\n              \"35.239.68.63/32\",\n              \"35.240.58.39/32\",\n              \"35.240.104.231/32\",\n              \"35.241.144.57/32\",\n              \"35.241.145.54/32\",\n              \"35.241.197.193/32\",\n              \"35.241.216.166/32\",\n              \"35.241.229.156/32\",\n              \"35.241.233.190/32\",\n              \"35.242.129.249/32\",\n              \"35.242.129.253/32\",\n              \"35.242.138.94/32\",\n              \"35.242.140.69/32\",\n              \"35.242.142.106/32\",\n              \"35.242.152.55/32\",\n              \"35.242.154.29/32\",\n              \"35.242.154.92/32\",\n              \"35.242.158.36/32\",\n              \"35.242.164.105/32\",\n              \"35.242.166.56/32\",\n              \"35.242.170.95/32\",\n              \"35.242.173.23/32\",\n              \"35.242.175.90/32\",\n              \"35.242.175.97/32\",\n              \"35.242.180.151/32\",\n              \"35.242.181.42/32\",\n              \"35.242.185.45/32\",\n              \"35.242.204.141/32\",\n              \"35.242.205.212/32\",\n              \"35.242.207.188/32\",\n              \"35.242.214.46/32\",\n              \"35.242.217.158/32\",\n              \"35.242.241.237/32\",\n              \"35.242.245.200/32\",\n              \"35.242.248.79/32\",\n              \"35.242.254.63/32\",\n              \"35.243.170.35/32\",\n              \"35.243.182.120/32\",\n              \"35.243.196.214/32\",\n              \"35.243.220.101/32\",\n              \"35.245.1.43/32\",\n              \"35.245.9.122/32\",\n              \"35.245.22.62/32\",\n              \"35.245.24.132/32\",\n              \"35.245.27.85/32\",\n              \"35.245.30.90/32\",\n              \"35.245.34.81/32\",\n              \"35.245.42.72/32\",\n              \"35.245.45.3/32\",\n              \"35.245.57.50/32\",\n              \"35.245.75.145/32\",\n              \"35.245.78.59/32\",\n              \"35.245.88.198/32\",\n              \"35.245.93.125/32\",\n              \"35.245.96.171/32\",\n              \"35.245.98.28/32\",\n              \"35.245.110.144/32\",\n              \"35.245.120.13/32\",\n              \"35.245.145.56/32\",\n              \"35.245.159.53/32\",\n              \"35.245.170.193/32\",\n              \"35.245.174.162/32\",\n              \"35.245.189.22/32\",\n              \"35.245.216.119/32\",\n              \"35.245.237.81/32\",\n              \"35.245.246.95/32\",\n              \"35.245.247.140/32\",\n              \"35.245.248.36/32\",\n              \"35.246.2.43/32\",\n              \"35.246.4.121/32\",\n              \"35.246.7.114/32\",\n              \"35.246.10.143/32\",\n              \"35.246.10.171/32\",\n              \"35.246.37.189/32\",\n              \"35.246.42.142/32\",\n              \"35.246.43.190/32\",\n              \"35.246.48.237/32\",\n              \"35.246.49.124/32\",\n              \"35.246.52.251/32\",\n              \"35.246.54.37/32\",\n              \"35.246.54.181/32\",\n              \"35.246.63.228/32\",\n              \"35.246.66.175/32\",\n              \"35.246.68.114/32\",\n              \"35.246.70.66/32\",\n              \"35.246.71.83/32\",\n              \"35.246.73.137/32\",\n              \"35.246.73.145/32\",\n              \"35.246.75.188/32\",\n              \"35.246.77.251/32\",\n              \"35.246.85.156/32\",\n              \"35.246.87.183/32\",\n              \"35.246.90.190/32\",\n              \"35.246.94.110/32\",\n              \"35.246.97.150/32\",\n              \"35.246.105.99/32\",\n              \"35.246.111.223/32\",\n              \"35.247.1.109/32\",\n              \"35.247.43.108/32\",\n              \"35.247.43.209/32\",\n              \"35.247.50.154/32\",\n              \"35.247.65.167/32\",\n              \"35.247.118.218/32\",\n              \"104.154.113.115/32\",\n              \"104.154.208.253/32\",\n              \"104.154.209.62/32\",\n              \"104.155.18.24/32\",\n              \"104.155.21.175/32\",\n              \"104.155.33.97/32\",\n              \"104.155.105.38/32\",\n              \"104.155.111.169/32\",\n              \"104.155.121.201/32\",\n              \"104.155.143.151/32\",\n              \"104.196.4.14/32\",\n              \"104.196.46.139/32\",\n              \"104.196.49.118/32\",\n              \"104.196.100.39/32\",\n              \"104.196.171.139/32\",\n              \"104.196.231.87/32\",\n              \"104.196.241.37/32\",\n              \"104.196.244.23/32\",\n              \"104.196.246.50/32\",\n              \"104.197.115.25/32\",\n              \"104.197.119.104/32\",\n              \"104.197.181.96/32\",\n              \"104.197.193.37/32\",\n              \"104.197.239.95/32\",\n              \"104.198.14.68/32\",\n              \"104.198.99.186/32\",\n              \"104.198.179.193/32\",\n              \"104.198.223.59/32\",\n              \"104.198.228.146/32\",\n              \"104.198.255.246/32\",\n              \"104.199.4.115/32\",\n              \"146.148.12.186/32\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"tcp\"\n              },\n              {\n                \"ipProtocol\": \"udp\"\n              }\n            ]\n          },\n          \"action\": \"allow\",\n          \"direction\": \"EGRESS\"\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 307,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"99.250.130.235\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"allow\",\n          \"direction\": \"INGRESS\"\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 480,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"201.110.0.0/16\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\"\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 600,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"35.235.240.0/20\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"tcp\",\n                \"ports\": [\n                  \"22\",\n                  \"3389\"\n                ]\n              }\n            ]\n          },\n          \"action\": \"allow\",\n          \"direction\": \"INGRESS\"\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 601,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"35.191.0.0/16\",\n              \"130.211.0.0/22\",\n              \"209.85.152.0/22\",\n              \"209.85.204.0/22\",\n              \"169.254.169.254\",\n              \"108.170.220.0/23\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\"\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 602,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"10.0.0.0/8\",\n              \"172.16.0.0/12\",\n              \"192.168.0.0/16\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\"\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 603,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"35.199.192.0/19\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"tcp\",\n                \"ports\": [\n                  \"53\"\n                ]\n              },\n              {\n                \"ipProtocol\": \"udp\",\n                \"ports\": [\n                  \"53\"\n                ]\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\"\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 604,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"107.178.230.64/26\",\n              \"35.199.224.0/19\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"tcp\",\n                \"ports\": [\n                  \"667\"\n                ]\n              },\n              {\n                \"ipProtocol\": \"udp\",\n                \"ports\": [\n                  \"665-666\"\n                ]\n              },\n              {\n                \"ipProtocol\": \"icmp\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\"\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 2147483644,\n          \"match\": {\n            \"destIpRanges\": [\n              \"::/0\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"EGRESS\"\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 2147483645,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"::/0\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\"\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 2147483646,\n          \"match\": {\n            \"destIpRanges\": [\n              \"0.0.0.0/0\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"EGRESS\"\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 2147483647,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"0.0.0.0/0\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\"\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/datafusion1/json-dumps/compute-network-default.json",
    "content": "{\n  \"kind\": \"compute#network\",\n  \"id\": \"6108781384702516881\",\n  \"creationTimestamp\": \"2022-09-09T17:55:26.430-07:00\",\n  \"name\": \"default\",\n  \"description\": \"Default network for the project\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default\",\n  \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/6108781384702516881\",\n  \"autoCreateSubnetworks\": true,\n  \"subnetworks\": [\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-northeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-west2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-west4/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-west6/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/southamerica-east1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-southeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-central1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-east1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-south2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-west4/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-east1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/northamerica-northeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-southeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-west3/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/southamerica-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-east2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-south1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-west8/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/australia-southeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-northeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-north1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/me-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/northamerica-northeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-west2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-east5/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-central2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-west9/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-southwest1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-south1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/australia-southeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-east4/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-northeast3/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-east7/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-west3/subnetworks/default\"\n  ],\n  \"routingConfig\": {\n    \"routingMode\": \"REGIONAL\"\n  },\n  \"networkFirewallPolicyEnforcementOrder\": \"AFTER_CLASSIC_FIREWALL\"\n}\n"
  },
  {
    "path": "test-data/datafusion1/json-dumps/compute-subnetworks-aggregated.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-datafusion1-aaaa/aggregated/subnetworks\",\n  \"items\": {\n    \"regions/asia-east1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-11-25T07:28:17.985-08:00\",\n          \"fingerprint\": \"UIxmIBDKcHM=\",\n          \"gatewayAddress\": \"10.140.0.1\",\n          \"id\": \"3554300412316967422\",\n          \"ipCidrRange\": \"10.140.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-east1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-east1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-east2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-11-25T07:28:16.951-08:00\",\n          \"fingerprint\": \"C42zHzfLj4Q=\",\n          \"gatewayAddress\": \"10.170.0.1\",\n          \"id\": \"5234306127464587775\",\n          \"ipCidrRange\": \"10.170.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-east2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-east2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-northeast1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-11-25T07:28:15.870-08:00\",\n          \"fingerprint\": \"YMaJ92Slock=\",\n          \"gatewayAddress\": \"10.146.0.1\",\n          \"id\": \"2436880755191538144\",\n          \"ipCidrRange\": \"10.146.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-northeast1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-northeast1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-northeast2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-11-25T07:28:16.828-08:00\",\n          \"fingerprint\": \"A932OYYtMwg=\",\n          \"gatewayAddress\": \"10.174.0.1\",\n          \"id\": \"3941435767807369727\",\n          \"ipCidrRange\": \"10.174.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-northeast2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-northeast2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-northeast3\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-11-25T07:28:16.966-08:00\",\n          \"fingerprint\": \"PWN48R8SZds=\",\n          \"gatewayAddress\": \"10.178.0.1\",\n          \"id\": \"2901987561153847807\",\n          \"ipCidrRange\": \"10.178.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-northeast3\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-northeast3/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-south1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-11-25T07:28:17.167-08:00\",\n          \"fingerprint\": \"uWKtkLiouX8=\",\n          \"gatewayAddress\": \"10.160.0.1\",\n          \"id\": \"580777193314804222\",\n          \"ipCidrRange\": \"10.160.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-south1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-south1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-south2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-11-25T07:28:17.120-08:00\",\n          \"fingerprint\": \"5EEsJtTci4E=\",\n          \"gatewayAddress\": \"10.190.0.1\",\n          \"id\": \"6176295745145889278\",\n          \"ipCidrRange\": \"10.190.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-south2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-south2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-southeast1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-11-25T07:28:16.883-08:00\",\n          \"fingerprint\": \"mkoVDvnnqsU=\",\n          \"gatewayAddress\": \"10.148.0.1\",\n          \"id\": \"8697845300593517055\",\n          \"ipCidrRange\": \"10.148.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-southeast1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-southeast1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-southeast2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-11-25T07:28:16.923-08:00\",\n          \"fingerprint\": \"ZGru5uwSu3M=\",\n          \"gatewayAddress\": \"10.184.0.1\",\n          \"id\": \"2547807532675326463\",\n          \"ipCidrRange\": \"10.184.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-southeast2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/asia-southeast2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/australia-southeast1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-11-25T07:28:16.991-08:00\",\n          \"fingerprint\": \"1dxOPdNKE5c=\",\n          \"gatewayAddress\": \"10.152.0.1\",\n          \"id\": \"5860266871775650303\",\n          \"ipCidrRange\": \"10.152.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/australia-southeast1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/australia-southeast1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/australia-southeast2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-11-25T07:28:16.958-08:00\",\n          \"fingerprint\": \"5Ok7m17FtOw=\",\n          \"gatewayAddress\": \"10.192.0.1\",\n          \"id\": \"1103279219211592191\",\n          \"ipCidrRange\": \"10.192.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/australia-southeast2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/australia-southeast2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-central2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-11-25T07:28:17.739-08:00\",\n          \"fingerprint\": \"47-ceOVcrDU=\",\n          \"gatewayAddress\": \"10.186.0.1\",\n          \"id\": \"297360852731650558\",\n          \"ipCidrRange\": \"10.186.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-central2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-central2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-north1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-11-25T07:28:16.642-08:00\",\n          \"fingerprint\": \"qYfAq8zCcL0=\",\n          \"gatewayAddress\": \"10.166.0.1\",\n          \"id\": \"5472143407519195647\",\n          \"ipCidrRange\": \"10.166.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-north1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-north1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-southwest1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-11-25T07:28:17.688-08:00\",\n          \"fingerprint\": \"uSpWExLsC00=\",\n          \"gatewayAddress\": \"10.204.0.1\",\n          \"id\": \"8792979977251152382\",\n          \"ipCidrRange\": \"10.204.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-southwest1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-southwest1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-11-25T07:28:15.916-08:00\",\n          \"fingerprint\": \"A0gpQMJuUOw=\",\n          \"gatewayAddress\": \"10.132.0.1\",\n          \"id\": \"1679755935908454880\",\n          \"ipCidrRange\": \"10.132.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-west1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-west1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-11-25T07:28:16.347-08:00\",\n          \"fingerprint\": \"JW0ii1T1tZI=\",\n          \"gatewayAddress\": \"10.154.0.1\",\n          \"id\": \"2198868661378048511\",\n          \"ipCidrRange\": \"10.154.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-west2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-west2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west3\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-11-25T07:28:16.463-08:00\",\n          \"fingerprint\": \"p8P8kReXUq8=\",\n          \"gatewayAddress\": \"10.156.0.1\",\n          \"id\": \"6946174229296275967\",\n          \"ipCidrRange\": \"10.156.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-west3\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-west3/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west4\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-11-25T07:28:17.562-08:00\",\n          \"fingerprint\": \"uu4wqHFsaWo=\",\n          \"gatewayAddress\": \"10.164.0.1\",\n          \"id\": \"2989708711941726718\",\n          \"ipCidrRange\": \"10.164.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-west4\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-west4/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west6\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-11-25T07:28:16.755-08:00\",\n          \"fingerprint\": \"gRlFw6GPUyI=\",\n          \"gatewayAddress\": \"10.172.0.1\",\n          \"id\": \"8741485097488572927\",\n          \"ipCidrRange\": \"10.172.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-west6\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-west6/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west8\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-11-25T07:28:17.668-08:00\",\n          \"fingerprint\": \"5iN1Yf4gl0E=\",\n          \"gatewayAddress\": \"10.198.0.1\",\n          \"id\": \"682099749614871038\",\n          \"ipCidrRange\": \"10.198.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-west8\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-west8/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west9\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-11-25T07:28:17.551-08:00\",\n          \"fingerprint\": \"4N7yZP0o7b8=\",\n          \"gatewayAddress\": \"10.200.0.1\",\n          \"id\": \"5749714911792816638\",\n          \"ipCidrRange\": \"10.200.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-west9\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-west9/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/me-west1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-11-25T07:28:17.092-08:00\",\n          \"fingerprint\": \"lJY2KLYo9go=\",\n          \"gatewayAddress\": \"10.208.0.1\",\n          \"id\": \"191962033165263358\",\n          \"ipCidrRange\": \"10.208.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/me-west1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/me-west1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/northamerica-northeast1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-11-25T07:28:17.065-08:00\",\n          \"fingerprint\": \"M5anJRIOlcQ=\",\n          \"gatewayAddress\": \"10.162.0.1\",\n          \"id\": \"3668864597603738110\",\n          \"ipCidrRange\": \"10.162.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/northamerica-northeast1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/northamerica-northeast1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/northamerica-northeast2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-11-25T07:28:16.890-08:00\",\n          \"fingerprint\": \"GJla43qJ78g=\",\n          \"gatewayAddress\": \"10.188.0.1\",\n          \"id\": \"72283392232481279\",\n          \"ipCidrRange\": \"10.188.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/northamerica-northeast2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/northamerica-northeast2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/southamerica-east1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-11-25T07:28:15.972-08:00\",\n          \"fingerprint\": \"jC4c917UM5I=\",\n          \"gatewayAddress\": \"10.158.0.1\",\n          \"id\": \"2484548578575213024\",\n          \"ipCidrRange\": \"10.158.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/southamerica-east1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/southamerica-east1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/southamerica-west1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-11-25T07:28:16.999-08:00\",\n          \"fingerprint\": \"ewH6dhEJmVs=\",\n          \"gatewayAddress\": \"10.194.0.1\",\n          \"id\": \"7521484591789335039\",\n          \"ipCidrRange\": \"10.194.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/southamerica-west1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/southamerica-west1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-central1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-11-25T07:28:15.674-08:00\",\n          \"fingerprint\": \"eb-vO3jKaYQ=\",\n          \"gatewayAddress\": \"10.128.0.1\",\n          \"id\": \"1942447882467369440\",\n          \"ipCidrRange\": \"10.128.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-central1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-central1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-east1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-11-25T07:28:16.930-08:00\",\n          \"fingerprint\": \"9anWMHKuPVI=\",\n          \"gatewayAddress\": \"10.142.0.1\",\n          \"id\": \"8554359952291750399\",\n          \"ipCidrRange\": \"10.142.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-east1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-east1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-east4\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-11-25T07:28:15.779-08:00\",\n          \"fingerprint\": \"cVlKGwsFjfo=\",\n          \"gatewayAddress\": \"10.150.0.1\",\n          \"id\": \"5751599680881254880\",\n          \"ipCidrRange\": \"10.150.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-east4\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-east4/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-east5\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-11-25T07:28:16.904-08:00\",\n          \"fingerprint\": \"6dSUAEtRJg0=\",\n          \"gatewayAddress\": \"10.202.0.1\",\n          \"id\": \"5068731758064525823\",\n          \"ipCidrRange\": \"10.202.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-east5\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-east5/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-south1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-11-25T07:28:16.871-08:00\",\n          \"fingerprint\": \"1e9Oc9lTWo0=\",\n          \"gatewayAddress\": \"10.206.0.1\",\n          \"id\": \"3397158463878291967\",\n          \"ipCidrRange\": \"10.206.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-south1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-south1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-west1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-11-25T07:28:15.886-08:00\",\n          \"fingerprint\": \"TU4rTtsp6QU=\",\n          \"gatewayAddress\": \"10.138.0.1\",\n          \"id\": \"871923470008410592\",\n          \"ipCidrRange\": \"10.138.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-west1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-west1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-west2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-11-25T07:28:17.228-08:00\",\n          \"fingerprint\": \"1mdf4p1jjF4=\",\n          \"gatewayAddress\": \"10.168.0.1\",\n          \"id\": \"4810812087107150334\",\n          \"ipCidrRange\": \"10.168.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-west2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-west2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-west3\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-11-25T07:28:16.932-08:00\",\n          \"fingerprint\": \"AYNkvHJU9JY=\",\n          \"gatewayAddress\": \"10.180.0.1\",\n          \"id\": \"5850991546302554623\",\n          \"ipCidrRange\": \"10.180.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-west3\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-west3/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-west4\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-11-25T07:28:17.073-08:00\",\n          \"fingerprint\": \"PZgA2lwEJ0w=\",\n          \"gatewayAddress\": \"10.182.0.1\",\n          \"id\": \"7734757003962966526\",\n          \"ipCidrRange\": \"10.182.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-west4\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-west4/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    }\n  },\n  \"kind\": \"compute#subnetworkAggregatedList\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/aggregated/subnetworks\"\n}\n"
  },
  {
    "path": "test-data/datafusion1/json-dumps/compute-subnetworks-europe-west4.json",
    "content": "{\n  \"kind\": \"compute#subnetworkList\",\n  \"id\": \"projects/gcpdiag-datafusion1-aaaa/regions/europe-west4/subnetworks\",\n  \"items\": [\n    {\n      \"kind\": \"compute#subnetwork\",\n      \"id\": \"7558389635160104551\",\n      \"creationTimestamp\": \"2022-09-09T17:55:36.770-07:00\",\n      \"name\": \"default\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default\",\n      \"ipCidrRange\": \"10.164.0.0/20\",\n      \"gatewayAddress\": \"10.164.0.1\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-west4/subnetworks/default\",\n      \"privateIpGoogleAccess\": false,\n      \"fingerprint\": \"mCmeH1kUbwA=\",\n      \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n      \"purpose\": \"PRIVATE\",\n      \"stackType\": \"IPV4_ONLY\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/europe-west4/subnetworks\"\n}\n"
  },
  {
    "path": "test-data/datafusion1/json-dumps/compute-subnetworks-us-central1.json",
    "content": "{\n  \"kind\": \"compute#subnetworkList\",\n  \"id\": \"projects/gcpdiag-datafusion1-aaaa/regions/us-central1/subnetworks\",\n  \"items\": [\n    {\n      \"kind\": \"compute#subnetwork\",\n      \"id\": \"1229138953747455592\",\n      \"creationTimestamp\": \"2022-09-09T17:55:35.900-07:00\",\n      \"name\": \"default\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/global/networks/default\",\n      \"ipCidrRange\": \"10.128.0.0/20\",\n      \"gatewayAddress\": \"10.128.0.1\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-central1/subnetworks/default\",\n      \"privateIpGoogleAccess\": false,\n      \"fingerprint\": \"G6chyEnHoHE=\",\n      \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n      \"purpose\": \"PRIVATE\",\n      \"stackType\": \"IPV4_ONLY\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-datafusion1-aaaa/regions/us-central1/subnetworks\"\n}\n"
  },
  {
    "path": "test-data/datafusion1/json-dumps/datafusion-default-application-pipeline1-preferences.json",
    "content": "{\n  \"system.profile.properties.imageVersion\": \"2.2\"\n }\n"
  },
  {
    "path": "test-data/datafusion1/json-dumps/datafusion-default-applications.json",
    "content": "[\n  {\n    \"type\": \"App\",\n    \"name\": \"pipeline1\",\n    \"version\": \"0ced9d03-6aad-11ef-bb93-4ee099d66111\",\n    \"description\": \"Data Pipeline Application\",\n    \"artifact\": {\n      \"name\": \"cdap-data-pipeline\",\n      \"version\": \"6.10.1\",\n      \"scope\": \"SYSTEM\"\n    },\n    \"change\": {\n      \"author\": \"cdap\",\n      \"creationTimeMillis\": 1725447695199,\n      \"latest\": true\n    }\n  }\n]\n"
  },
  {
    "path": "test-data/datafusion1/json-dumps/datafusion-default-namespace-preferences.json",
    "content": "{\n  \"system.profile.properties.imageVersion\": \"2.1\"\n}\n"
  },
  {
    "path": "test-data/datafusion1/json-dumps/datafusion-default-user-compute-profile.json",
    "content": "[\n  {\n  \"name\": \"namespace_profile\",\n  \"label\": \"namespace_profile\",\n  \"description\": \"namespace_profile\",\n  \"scope\": \"USER\",\n  \"status\": \"ENABLED\",\n  \"provisioner\": {\n    \"name\": \"gcp-dataproc\",\n    \"properties\": [\n      {\n        \"name\": \"accountKey\",\n        \"value\": \"\",\n        \"isEditable\": true\n      },\n      {\n        \"name\": \"autoScalingPolicy\",\n        \"value\": \"projects/gcpdiag-dataproc1-aaaa/regions/us-central1/autoscalingPolicies/CDF_AUTOSCALING_POLICY_V1\",\n        \"isEditable\": true\n      },\n      {\n        \"name\": \"region\",\n        \"value\": \"us-east1\",\n        \"isEditable\": true\n      },\n      {\n        \"name\": \"zone\",\n        \"value\": \"\",\n        \"isEditable\": true\n      },\n      {\n        \"name\": \"network\",\n        \"value\": \"default\",\n        \"isEditable\": true\n      },\n      {\n        \"name\": \"networkHostProjectId\",\n        \"value\": \"\",\n        \"isEditable\": true\n      },\n      {\n        \"name\": \"subnet\",\n        \"value\": \"\",\n        \"isEditable\": true\n      },\n      {\n        \"name\": \"serviceAccount\",\n        \"value\": \"\",\n        \"isEditable\": true\n      },\n      {\n        \"name\": \"masterNumNodes\",\n        \"value\": \"1\",\n        \"isEditable\": true\n      },\n      {\n        \"name\": \"masterMachineType\",\n        \"value\": \"e2\",\n        \"isEditable\": true\n      },\n      {\n        \"name\": \"masterCPUs\",\n        \"value\": \"2\",\n        \"isEditable\": true\n      },\n      {\n        \"name\": \"masterMemoryMB\",\n        \"value\": \"8192\",\n        \"isEditable\": true\n      },\n      {\n        \"name\": \"masterDiskGB\",\n        \"value\": \"1000\",\n        \"isEditable\": true\n      },\n      {\n        \"name\": \"masterDiskType\",\n        \"value\": \"pd-standard\",\n        \"isEditable\": true\n      },\n      {\n        \"name\": \"workerMachineType\",\n        \"value\": \"e2\",\n        \"isEditable\": true\n      },\n      {\n        \"name\": \"workerCPUs\",\n        \"value\": \"2\",\n        \"isEditable\": true\n      },\n      {\n        \"name\": \"workerMemoryMB\",\n        \"value\": \"8192\",\n        \"isEditable\": true\n      },\n      {\n        \"name\": \"workerDiskGB\",\n        \"value\": \"1000\",\n        \"isEditable\": true\n      },\n      {\n        \"name\": \"workerDiskType\",\n        \"value\": \"pd-standard\",\n        \"isEditable\": true\n      },\n      {\n        \"name\": \"enablePredefinedAutoScaling\",\n        \"value\": \"false\",\n        \"isEditable\": true\n      },\n      {\n        \"name\": \"clusterMetaData\",\n        \"value\": \"\",\n        \"isEditable\": true\n      },\n      {\n        \"name\": \"networkTags\",\n        \"value\": \"\",\n        \"isEditable\": true\n      },\n      {\n        \"name\": \"secureBootEnabled\",\n        \"value\": \"false\",\n        \"isEditable\": true\n      },\n      {\n        \"name\": \"vTpmEnabled\",\n        \"value\": \"false\",\n        \"isEditable\": true\n      },\n      {\n        \"name\": \"integrityMonitoringEnabled\",\n        \"value\": \"false\",\n        \"isEditable\": true\n      },\n      {\n        \"name\": \"imageVersion\",\n        \"value\": \"2.0\",\n        \"isEditable\": true\n      },\n      {\n        \"name\": \"customImageUri\",\n        \"value\": \"\",\n        \"isEditable\": true\n      },\n      {\n        \"name\": \"gcsBucket\",\n        \"value\": \"\",\n        \"isEditable\": true\n      },\n      {\n        \"name\": \"tempBucket\",\n        \"value\": \"\",\n        \"isEditable\": true\n      },\n      {\n        \"name\": \"encryptionKeyName\",\n        \"value\": \"\",\n        \"isEditable\": true\n      },\n      {\n        \"name\": \"scopes\",\n        \"value\": \"\",\n        \"isEditable\": true\n      },\n      {\n        \"name\": \"initActions\",\n        \"value\": \"\",\n        \"isEditable\": true\n      },\n      {\n        \"name\": \"clusterProperties\",\n        \"value\": \"\",\n        \"isEditable\": true\n      },\n      {\n        \"name\": \"labels\",\n        \"value\": \"\",\n        \"isEditable\": true\n      },\n      {\n        \"name\": \"clusterLabels\",\n        \"value\": \"\",\n        \"isEditable\": true\n      },\n      {\n        \"name\": \"idleTTL\",\n        \"value\": \"30\",\n        \"isEditable\": true\n      },\n      {\n        \"name\": \"skipDelete\",\n        \"value\": \"false\",\n        \"isEditable\": true\n      },\n      {\n        \"name\": \"stackdriverLoggingEnabled\",\n        \"value\": \"true\",\n        \"isEditable\": true\n      },\n      {\n        \"name\": \"stackdriverMonitoringEnabled\",\n        \"value\": \"true\",\n        \"isEditable\": true\n      },\n      {\n        \"name\": \"componentGatewayEnabled\",\n        \"value\": \"false\",\n        \"isEditable\": true\n      },\n      {\n        \"name\": \"launchMode\",\n        \"value\": \"cluster\",\n        \"isEditable\": true\n      },\n      {\n        \"name\": \"preferExternalIP\",\n        \"value\": \"false\",\n        \"isEditable\": true\n      },\n      {\n        \"name\": \"pollCreateDelay\",\n        \"value\": \"60\",\n        \"isEditable\": true\n      },\n      {\n        \"name\": \"pollCreateJitter\",\n        \"value\": \"20\",\n        \"isEditable\": true\n      },\n      {\n        \"name\": \"pollDeleteDelay\",\n        \"value\": \"30\",\n        \"isEditable\": true\n      },\n      {\n        \"name\": \"pollInterval\",\n        \"value\": \"2\",\n        \"isEditable\": true\n      }\n    ],\n    \"totalProcessingCpusLabel\": \"Up to 84\"\n  },\n  \"created\": 1710745601\n}\n]\n"
  },
  {
    "path": "test-data/datafusion1/json-dumps/datafusion-instances.json",
    "content": "{\n  \"instances\": [\n    {\n      \"name\": \"projects/gcpdiag-datafusion1-aaaa/locations/us-central1/instances/my-instance\",\n      \"description\": \"My Data Fusion instance\",\n      \"type\": \"BASIC\",\n      \"enableStackdriverLogging\": true,\n      \"enableStackdriverMonitoring\": true,\n      \"privateInstance\": true,\n      \"networkConfig\": {\n        \"network\": \"default\",\n        \"ipAllocation\": \"10.89.48.0/22\"\n      },\n      \"labels\": {\n        \"gcpdiag\": \"test\"\n      },\n      \"createTime\": \"2022-08-22T01:02:51.254892028Z\",\n      \"updateTime\": \"2022-08-22T01:18:39.219561056Z\",\n      \"state\": \"ACTIVE\",\n      \"serviceEndpoint\": \"https://my-instance-gcpdiag-datafusion1-aaaa-dot-usc1.datafusion.googleusercontent.com\",\n      \"version\": \"6.7.1\",\n      \"serviceAccount\": \"cloud-datafusion-management-sa@fd736090192f24d58-tp.iam.gserviceaccount.com\",\n      \"availableVersion\": [\n        {\n          \"versionNumber\": \"latest\"\n        }\n      ],\n      \"apiEndpoint\": \"https://my-instance-gcpdiag-datafusion1-aaaa-dot-usc1.datafusion.googleusercontent.com/api\",\n      \"gcsBucket\": \"gs://df-10083849341129831474-pnatxkzbw4i63fqxaizbbqaaaa\",\n      \"p4ServiceAccount\": \"service-12340010@gcp-sa-datafusion.iam.gserviceaccount.com\",\n      \"tenantProjectId\": \"fd736090192f24d58-tp\",\n      \"dataprocServiceAccount\": \"12340010-compute@developer.gserviceaccount.com\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/datafusion1/json-dumps/datafusion-instances1.json",
    "content": "{\n  \"instances\": [\n{\n  \"name\": \"projects/gcpdiag-datafusion1-aaaa/locations/us-central1/instances/bug-244411025-instance\",\n  \"description\": \"datafusion instance created for b/244411025\",\n  \"type\": \"BASIC\",\n  \"enableStackdriverLogging\": true,\n  \"enableStackdriverMonitoring\": true,\n  \"privateInstance\": true,\n  \"networkConfig\": {\n    \"network\": \"default\",\n    \"ipAllocation\": \"10.89.48.0/22\"\n  },\n  \"labels\": {\n    \"gcpdiag\": \"test\"\n  },\n  \"createTime\": \"2022-09-24T08:55:01.910558135Z\",\n  \"updateTime\": \"2022-09-24T09:11:48.951872261Z\",\n  \"state\": \"ACTIVE\",\n  \"serviceEndpoint\": \"https://bug-244411025-instance-gcpdiag-datafusion1-aaaa-dot-usc1.datafusion.googleusercontent.com\",\n  \"version\": \"6.7.1\",\n  \"serviceAccount\": \"cloud-datafusion-management-sa@r1718446da669444c-tp.iam.gserviceaccount.com\",\n  \"apiEndpoint\": \"https://bug-244411025-instance-gcpdiag-datafusion1-aaaa-dot-usc1.datafusion.googleusercontent.com/api\",\n  \"gcsBucket\": \"gs://df-3858180334335634755-7nugtmb344i63jb4aizbbqaaaa\",\n  \"p4ServiceAccount\": \"service-12340018@gcp-sa-datafusion.iam.gserviceaccount.com\",\n  \"tenantProjectId\": \"r1718446da669444c-tp\",\n  \"dataprocServiceAccount\": \"12340018-compute@developer.gserviceaccount.com\"\n}\n  ]\n}\n"
  },
  {
    "path": "test-data/datafusion1/json-dumps/datafusion-system-compute-profile.json",
    "content": "\n[\n  {\n    \"name\": \"autoscaling-dataproc\",\n    \"label\": \"Autoscaling Dataproc\",\n    \"description\": \"Creates Autoscaling Dataproc clusters for program runs\",\n    \"scope\": \"SYSTEM\",\n    \"status\": \"ENABLED\",\n    \"provisioner\": {\n      \"name\": \"gcp-dataproc\",\n      \"properties\": [\n        {\n          \"name\": \"masterMachineType\",\n          \"value\": \"e2\",\n          \"isEditable\": true\n        },\n        {\n          \"name\": \"masterNumNodes\",\n          \"value\": \"1\",\n          \"isEditable\": true\n        },\n        {\n          \"name\": \"masterCPUs\",\n          \"value\": \"2\",\n          \"isEditable\": true\n        },\n        {\n          \"name\": \"masterMemoryMB\",\n          \"value\": \"8192\",\n          \"isEditable\": true\n        },\n        {\n          \"name\": \"masterDiskGB\",\n          \"value\": \"1000\",\n          \"isEditable\": true\n        },\n        {\n          \"name\": \"workerCPUs\",\n          \"value\": \"2\",\n          \"isEditable\": true\n        },\n        {\n          \"name\": \"workerMemoryMB\",\n          \"value\": \"8192\",\n          \"isEditable\": true\n        },\n        {\n          \"name\": \"workerDiskGB\",\n          \"value\": \"200\",\n          \"isEditable\": true\n        },\n        {\n          \"name\": \"workerMachineType\",\n          \"value\": \"e2\",\n          \"isEditable\": true\n        },\n        {\n          \"name\": \"enablePredefinedAutoScaling\",\n          \"value\": \"true\",\n          \"isEditable\": true\n        }\n      ],\n      \"totalProcessingCpusLabel\": \"Up to 84\"\n    },\n    \"created\": 1709651868\n  },\n  {\n    \"name\": \"dataproc\",\n    \"label\": \"Dataproc\",\n    \"description\": \"Creates Dataproc clusters for program runs\",\n    \"scope\": \"SYSTEM\",\n    \"status\": \"ENABLED\",\n    \"provisioner\": {\n      \"name\": \"gcp-dataproc\",\n      \"properties\": [\n        {\n          \"name\": \"masterMachineType\",\n          \"value\": \"e2\",\n          \"isEditable\": true\n        },\n        {\n          \"name\": \"masterNumNodes\",\n          \"value\": \"1\",\n          \"isEditable\": true\n        },\n        {\n          \"name\": \"masterCPUs\",\n          \"value\": \"2\",\n          \"isEditable\": true\n        },\n        {\n          \"name\": \"masterMemoryMB\",\n          \"value\": \"8192\",\n          \"isEditable\": true\n        },\n        {\n          \"name\": \"masterDiskGB\",\n          \"value\": \"1000\",\n          \"isEditable\": true\n        },\n        {\n          \"name\": \"workerMachineType\",\n          \"value\": \"e2\",\n          \"isEditable\": true\n        },\n        {\n          \"name\": \"workerNumNodes\",\n          \"value\": \"2\",\n          \"isEditable\": true\n        },\n        {\n          \"name\": \"workerCPUs\",\n          \"value\": \"2\",\n          \"isEditable\": true\n        },\n        {\n          \"name\": \"workerMemoryMB\",\n          \"value\": \"8192\",\n          \"isEditable\": true\n        },\n        {\n          \"name\": \"workerDiskGB\",\n          \"value\": \"1000\",\n          \"isEditable\": true\n        }\n      ],\n      \"totalProcessingCpusLabel\": \"4\"\n    },\n    \"created\": 1709651868\n  },\n  {\n    \"name\": \"native\",\n    \"label\": \"native\",\n    \"description\": \"Runs programs locally on the cluster\",\n    \"scope\": \"SYSTEM\",\n    \"status\": \"ENABLED\",\n    \"provisioner\": {\n      \"name\": \"native\",\n      \"properties\": [],\n      \"totalProcessingCpusLabel\": \"Custom\"\n    },\n    \"created\": 1709651867\n  }\n]\n"
  },
  {
    "path": "test-data/datafusion1/json-dumps/datafusion-system-preferences.json",
    "content": "{\n \"system.profile.name\": \"SYSTEM:dataproc\",\n \"system.profile.properties.imageVersion\": \"2.1\"\n}\n"
  },
  {
    "path": "test-data/datafusion1/json-dumps/iam-policy.json",
    "content": "{\n  \"bindings\": [\n    {\n      \"members\": [\n        \"serviceAccount:service-12340010@compute-system.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/compute.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12340010@container-engine-robot.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/container.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12340010@containerregistry.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/containerregistry.ServiceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:12340010-compute@developer.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/datafusion.runner\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:12340010-compute@developer.gserviceaccount.com\",\n        \"serviceAccount:service-12340010@gcp-sa-datafusion.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/datafusion.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12340010@dataproc-accounts.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/dataproc.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:12340010-compute@developer.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/dataproc.worker\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:12340010-compute@developer.gserviceaccount.com\",\n        \"serviceAccount:12340010@cloudservices.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/editor\"\n    },\n    {\n      \"members\": [\n        \"user:bhargavak@premium-cloud-support.com\"\n      ],\n      \"role\": \"roles/owner\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12340010@gcp-sa-pubsub.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/pubsub.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:12340010-compute@developer.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/storage.admin\"\n    }\n  ],\n  \"etag\": \"BwXpbfPrzIQ=\",\n  \"version\": 1\n}\n"
  },
  {
    "path": "test-data/datafusion1/json-dumps/iam-service-account-policy.json",
    "content": "{\n  \"version\": 1,\n  \"etag\": \"BwXpaky4imI=\",\n  \"bindings\": [\n    {\n      \"role\": \"roles/iam.serviceAccountUser\",\n      \"members\": [\n        \"serviceAccount:service-12340010@gcp-sa-datafusion.iam.gserviceaccount.com\"\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/datafusion1/json-dumps/iam-service-accounts.json",
    "content": "{\n  \"accounts\": [\n    {\n      \"displayName\": \"Compute Engine default service account\",\n      \"email\": \"12340010-compute@developer.gserviceaccount.com\",\n      \"etag\": \"MDEwMjE5MjA=\",\n      \"name\": \"projects/gcpdiag-datafusion1-aaaa/serviceAccounts/12340010-compute@developer.gserviceaccount.com\",\n      \"oauth2ClientId\": \"REDACTED\",\n      \"projectId\": \"gcpdiag-datafusion1-aaaa\",\n      \"uniqueId\": \"114930481874391279974\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/datafusion1/json-dumps/logging-entries-1.json",
    "content": "{\n  \"entries\": [\n  ]\n}\n"
  },
  {
    "path": "test-data/datafusion1/json-dumps/namespaces.json",
    "content": "[\n  {\n    \"name\": \"default\",\n    \"description\": \"This is the default namespace, which is automatically created, and is always available.\",\n    \"generation\": 0,\n    \"config\": {\n      \"scheduler.queue.name\": \"\"\n    }\n  }\n]\n"
  },
  {
    "path": "test-data/datafusion1/json-dumps/project.json",
    "content": "{\n  \"name\": \"projects/12340010\",\n  \"parent\": \"folders/373737373737\",\n  \"projectId\": \"gcpdiag-datafusion1-aaaa\",\n  \"state\": \"ACTIVE\",\n  \"displayName\": \"gcpdiag test - datafusion1\",\n  \"createTime\": \"2022-08-22T00:30:38.739Z\",\n  \"updateTime\": \"2022-08-22T00:30:40.979Z\",\n  \"etag\": \"GR9oFf6Dr8RG0RV6c2fhYg==\"\n}\n"
  },
  {
    "path": "test-data/datafusion1/json-dumps/services.json",
    "content": "{\n  \"services\": [\n    {\n      \"name\": \"projects/12340001/services/autoscaling.googleapis.com\",\n      \"config\": {\n        \"name\": \"autoscaling.googleapis.com\",\n        \"title\": \"Cloud Autoscaling API\",\n        \"documentation\": {\n          \"summary\": \"An API for the Cloud Autoscaling for consuming autoscaling signals.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340001\"\n    },\n    {\n      \"name\": \"projects/12340001/services/bigquery.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigquery.googleapis.com\",\n        \"title\": \"BigQuery API\",\n        \"documentation\": {\n          \"summary\": \"A data platform for customers to create, manage, share and query data.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340001\"\n    },\n    {\n      \"name\": \"projects/12340001/services/bigquerymigration.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigquerymigration.googleapis.com\",\n        \"title\": \"BigQuery Migration API\",\n        \"documentation\": {\n          \"summary\": \"The migration service, exposing apis for migration jobs operations, and agent management.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340001\"\n    },\n    {\n      \"name\": \"projects/12340001/services/bigquerystorage.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigquerystorage.googleapis.com\",\n        \"title\": \"BigQuery Storage API\",\n        \"documentation\": {},\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340001\"\n    },\n    {\n      \"name\": \"projects/12340001/services/compute.googleapis.com\",\n      \"config\": {\n        \"name\": \"compute.googleapis.com\",\n        \"title\": \"Compute Engine API\",\n        \"documentation\": {\n          \"summary\": \"Creates and runs virtual machines on Google Cloud Platform.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"compute.googleapis.com/VpcNetwork\",\n            \"displayName\": \"VPC Network\",\n            \"description\": \"VPC Network.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the VPC Network.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the VPC Network, global always.\"\n              },\n              {\n                \"key\": \"network_id\",\n                \"description\": \"VPC Network resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Location\",\n            \"displayName\": \"Compute Location\",\n            \"description\": \"A location in the Compute API.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the Compute Location.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/instances_per_vpc_network\",\n                \"compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/ip_aliases_per_vpc_network\",\n                \"compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/subnet_ranges_per_vpc_network\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Location\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Location\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340001\"\n    },\n    {\n      \"name\": \"projects/12340001/services/container.googleapis.com\",\n      \"config\": {\n        \"name\": \"container.googleapis.com\",\n        \"title\": \"Kubernetes Engine API\",\n        \"documentation\": {\n          \"summary\": \"Builds and manages container-based applications, powered by the open source Kubernetes technology.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340001\"\n    },\n    {\n      \"name\": \"projects/12340001/services/containerfilesystem.googleapis.com\",\n      \"config\": {\n        \"name\": \"containerfilesystem.googleapis.com\",\n        \"title\": \"Container File System API\",\n        \"documentation\": {},\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340001\"\n    },\n    {\n      \"name\": \"projects/12340001/services/containerregistry.googleapis.com\",\n      \"config\": {\n        \"name\": \"containerregistry.googleapis.com\",\n        \"title\": \"Container Registry API\",\n        \"documentation\": {\n          \"summary\": \"Google Container Registry provides secure, private Docker image storage on Google Cloud Platform.  Our API follows the Docker Registry API specification, so we are fully compatible with the Docker CLI client, as well as standard tooling using the Docker Registry API.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340001\"\n    },\n    {\n      \"name\": \"projects/12340001/services/datafusion.googleapis.com\",\n      \"config\": {\n        \"name\": \"datafusion.googleapis.com\",\n        \"title\": \"Cloud Data Fusion API\",\n        \"documentation\": {\n          \"summary\": \"Cloud Data Fusion is a fully-managed, cloud native, enterprise data integration service for\\n    quickly building and managing data pipelines. It provides a graphical interface to increase\\n    time efficiency and reduce complexity, and allows business users, developers, and data\\n    scientists to easily and reliably build scalable data integration solutions to cleanse,\\n    prepare, blend, transfer and transform data without having to wrestle with infrastructure.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"datafusion.googleapis.com/Pipeline\",\n            \"displayName\": \"Pipeline\",\n            \"description\": \"A deployed Pipeline in a Cloud Data Fusion instance.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The ID of the customer project.\"\n              },\n              {\n                \"key\": \"org_id\",\n                \"description\": \"The ID of the organization that the customer project belongs to.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The zone/region that the instance is hosted in.\"\n              },\n              {\n                \"key\": \"edition\",\n                \"description\": \"The edition of the instance.\"\n              },\n              {\n                \"key\": \"is_private\",\n                \"description\": \"Does the instance use private IP.\"\n              },\n              {\n                \"key\": \"instance_id\",\n                \"description\": \"The instance ID.\"\n              },\n              {\n                \"key\": \"compute_engine\",\n                \"description\": \"The compute engine used for this Pipeline (MapReduce or Spark).\"\n              },\n              {\n                \"key\": \"pipeline_id\",\n                \"description\": \"The Pipeline ID.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"datafusion.googleapis.com/Instance\",\n            \"displayName\": \"Instance\",\n            \"description\": \"An instance of Cloud Data Fusion.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The ID of the customer project.\"\n              },\n              {\n                \"key\": \"org_id\",\n                \"description\": \"The ID of the organization that the customer project belongs to.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The zone/region that the instance is hosted in.\"\n              },\n              {\n                \"key\": \"version\",\n                \"description\": \"The data plane version of the instance.\"\n              },\n              {\n                \"key\": \"edition\",\n                \"description\": \"The edition of the instance.\"\n              },\n              {\n                \"key\": \"is_private\",\n                \"description\": \"Does the instance use private IP.\"\n              },\n              {\n                \"key\": \"instance_id\",\n                \"description\": \"The instance ID.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"datafusion.googleapis.com/Plugin\",\n            \"displayName\": \"Plugin\",\n            \"description\": \"An instance of a plugin in a deployed pipeline.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The ID of the customer project.\"\n              },\n              {\n                \"key\": \"org_id\",\n                \"description\": \"The ID of the organization that the customer project belongs to.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The zone/region that the instance is hosted in.\"\n              },\n              {\n                \"key\": \"instance_id\",\n                \"description\": \"The instance ID.\"\n              },\n              {\n                \"key\": \"edition\",\n                \"description\": \"The edition of the instance.\"\n              },\n              {\n                \"key\": \"is_private\",\n                \"description\": \"Does the instance use private IP.\"\n              },\n              {\n                \"key\": \"plugin_type\",\n                \"description\": \"The type of the plugin.\"\n              },\n              {\n                \"key\": \"plugin_name\",\n                \"description\": \"The name of the plugin.\"\n              },\n              {\n                \"key\": \"plugin_version\",\n                \"description\": \"The version of the plugin.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"datafusion.googleapis.com/MonitoringAgent\",\n            \"displayName\": \"MonitoringAgent\",\n            \"description\": \"An instance of Monitoring Agent in Cloud Data Fusion.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The ID of the customer project.\"\n              },\n              {\n                \"key\": \"org_id\",\n                \"description\": \"The ID of the organization that the customer project belongs to.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The zone/region that the instance is hosted in.\"\n              },\n              {\n                \"key\": \"version\",\n                \"description\": \"The data plane version of the instance.\"\n              },\n              {\n                \"key\": \"edition\",\n                \"description\": \"The edition of the instance.\"\n              },\n              {\n                \"key\": \"is_private\",\n                \"description\": \"Does the instance use private IP.\"\n              },\n              {\n                \"key\": \"instance_id\",\n                \"description\": \"The instance ID.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"datafusion.googleapis.com/ExternalPipeline\",\n            \"displayName\": \"Pipeline\",\n            \"description\": \"A deployed Pipeline in an external (not in GCP) Data Fusion instance.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The ID of the customer project.\"\n              },\n              {\n                \"key\": \"org_id\",\n                \"description\": \"The ID of the organization that the customer project belongs to.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The GCP region where to store metrics.\"\n              },\n              {\n                \"key\": \"cluster_id\",\n                \"description\": \"Cluster ID that the instance is hosted in.\"\n              },\n              {\n                \"key\": \"instance_id\",\n                \"description\": \"The instance ID.\"\n              },\n              {\n                \"key\": \"pipeline_id\",\n                \"description\": \"The Pipeline ID.\"\n              },\n              {\n                \"key\": \"version\",\n                \"description\": \"The data plane version of the instance.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"datafusion.googleapis.com/ExternalInstance\",\n            \"displayName\": \"Instance\",\n            \"description\": \"An instance of external (not in GCP) Data Fusion.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The ID of the customer project.\"\n              },\n              {\n                \"key\": \"org_id\",\n                \"description\": \"The ID of the organization that the customer project belongs to.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The GCP region where to store metrics.\"\n              },\n              {\n                \"key\": \"cluster_id\",\n                \"description\": \"Cluster ID that the instance is hosted in.\"\n              },\n              {\n                \"key\": \"version\",\n                \"description\": \"The data plane version of the instance.\"\n              },\n              {\n                \"key\": \"instance_id\",\n                \"description\": \"The instance ID.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"datafusion.googleapis.com/Pipeline\",\n              \"metrics\": [\n                \"datafusion.googleapis.com/pipeline/runs_completed_count\",\n                \"datafusion.googleapis.com/pipeline/plugin/records_in_count\",\n                \"datafusion.googleapis.com/pipeline/plugin/records_out_count\",\n                \"datafusion.googleapis.com/pipeline/plugin/bytes_in_count\",\n                \"datafusion.googleapis.com/pipeline/plugin/bytes_out_count\",\n                \"datafusion.googleapis.com/pipeline/dataproc/provisioning_latency\",\n                \"datafusion.googleapis.com/pipeline/dataproc/api_request_count\",\n                \"datafusion.googleapis.com/pipeline/pipeline_run_time\",\n                \"datafusion.googleapis.com/pipeline/preview_run_time\",\n                \"datafusion.googleapis.com/pipeline/bytes_read_count\",\n                \"datafusion.googleapis.com/pipeline/bytes_shuffled_count\",\n                \"datafusion.googleapis.com/pipeline/bytes_written_count\",\n                \"datafusion.googleapis.com/pipeline/plugin_count\",\n                \"datafusion.googleapis.com/instance/tms_persist_count\",\n                \"datafusion.googleapis.com/instance/tms_subscriber_fetch_count\",\n                \"datafusion.googleapis.com/instance/tms_subscriber_fetch_time\",\n                \"datafusion.googleapis.com/instance/tms_subscriber_process_delay\",\n                \"datafusion.googleapis.com/instance/tms_subscriber_process_duration\",\n                \"datafusion.googleapis.com/pipeline/pipeline_start_latency\",\n                \"datafusion.googleapis.com/pipeline/logs_count\",\n                \"datafusion.googleapis.com/pipeline/failed_runs_classified_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"datafusion.googleapis.com/Instance\",\n              \"metrics\": [\n                \"datafusion.googleapis.com/instance/api_request_count\",\n                \"datafusion.googleapis.com/instance/metric_emitted_count\",\n                \"datafusion.googleapis.com/instance/service_available\",\n                \"datafusion.googleapis.com/instance/pipeline_count\",\n                \"datafusion.googleapis.com/instance/draft_count\",\n                \"datafusion.googleapis.com/instance/namespace_count\",\n                \"datafusion.googleapis.com/instance/pod_restart_count\",\n                \"datafusion.googleapis.com/instance/pod_status\",\n                \"datafusion.googleapis.com/instance/system_logs_count\",\n                \"datafusion.googleapis.com/instance/log_event_queue_size\",\n                \"datafusion.googleapis.com/instance/log_process_min_delay\",\n                \"datafusion.googleapis.com/instance/log_process_max_delay\",\n                \"datafusion.googleapis.com/instance/log_process_count\",\n                \"datafusion.googleapis.com/instance/concurrent_pipeline_launches_count\",\n                \"datafusion.googleapis.com/instance/concurrent_pipeline_runs_count\",\n                \"datafusion.googleapis.com/instance/api_response_times\",\n                \"datafusion.googleapis.com/instance/concurrent_pipeline_running_count\",\n                \"datafusion.googleapis.com/instance/authorization_internal_check_success_count\",\n                \"datafusion.googleapis.com/instance/authorization_internal_check_failure_count\",\n                \"datafusion.googleapis.com/instance/authorization_internal_visibility_count\",\n                \"datafusion.googleapis.com/instance/authorization_extension_check_success_count\",\n                \"datafusion.googleapis.com/instance/authorization_extension_check_failure_count\",\n                \"datafusion.googleapis.com/instance/authorization_extension_visibility_count\",\n                \"datafusion.googleapis.com/instance/authorization_extension_bypass_count\",\n                \"datafusion.googleapis.com/instance/authorization_extension_check_time\",\n                \"datafusion.googleapis.com/instance/authorization_extension_visibility_time\",\n                \"datafusion.googleapis.com/instance/api_request_received_count\",\n                \"datafusion.googleapis.com/instance/authorization_check_count\",\n                \"datafusion.googleapis.com/instance/authorization_check_time\",\n                \"datafusion.googleapis.com/instance/pipeline_connection_request_count\",\n                \"datafusion.googleapis.com/instance/heap_memory_used\",\n                \"datafusion.googleapis.com/instance/heap_memory_max\",\n                \"datafusion.googleapis.com/instance/cpu_load_per_processor_scaled\",\n                \"datafusion.googleapis.com/instance/total_thread_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"datafusion.googleapis.com/Plugin\",\n              \"metrics\": [\n                \"datafusion.googleapis.com/plugin/deployed_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"datafusion.googleapis.com/MonitoringAgent\",\n              \"metrics\": [\n                \"datafusion.googleapis.com/monitoring_agent/workers\",\n                \"datafusion.googleapis.com/monitoring_agent/pipeline_logs_count\",\n                \"datafusion.googleapis.com/monitoring_agent/system_logs_count\",\n                \"datafusion.googleapis.com/monitoring_agent/logs_process_duration\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"datafusion.googleapis.com/ExternalPipeline\",\n              \"metrics\": [\n                \"datafusion.googleapis.com/external_pipeline/runs_completed_count\",\n                \"datafusion.googleapis.com/external_pipeline/pipeline_run_time\",\n                \"datafusion.googleapis.com/external_pipeline/preview_run_time\",\n                \"datafusion.googleapis.com/external_pipeline/plugin_count\",\n                \"datafusion.googleapis.com/external_pipeline/provisioner/provisioning_latency\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"datafusion.googleapis.com/ExternalInstance\",\n              \"metrics\": [\n                \"datafusion.googleapis.com/external_instance/api_request_count\",\n                \"datafusion.googleapis.com/external_instance/heap_memory_used\",\n                \"datafusion.googleapis.com/external_instance/heap_memory_max\",\n                \"datafusion.googleapis.com/external_instance/cpu_load_per_processor_scaled\",\n                \"datafusion.googleapis.com/external_instance/total_thread_count\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340001\"\n    },\n    {\n      \"name\": \"projects/12340001/services/dataproc-control.googleapis.com\",\n      \"config\": {\n        \"name\": \"dataproc-control.googleapis.com\",\n        \"title\": \"Cloud Dataproc Control API\",\n        \"documentation\": {\n          \"summary\": \"Manages internal resources for Google Cloud Dataproc.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340001\"\n    },\n    {\n      \"name\": \"projects/12340001/services/dataproc.googleapis.com\",\n      \"config\": {\n        \"name\": \"dataproc.googleapis.com\",\n        \"title\": \"Cloud Dataproc API\",\n        \"documentation\": {\n          \"summary\": \"Manages Hadoop-based clusters and jobs on Google Cloud Platform.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340001\"\n    },\n    {\n      \"name\": \"projects/12340001/services/deploymentmanager.googleapis.com\",\n      \"config\": {\n        \"name\": \"deploymentmanager.googleapis.com\",\n        \"title\": \"Cloud Deployment Manager V2 API\",\n        \"documentation\": {\n          \"summary\": \"The Google Cloud Deployment Manager v2 API provides services for configuring, deploying, and\\nviewing Google Cloud services and APIs via templates which specify deployments of Cloud\\nresources.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340001\"\n    },\n    {\n      \"name\": \"projects/12340001/services/iam.googleapis.com\",\n      \"config\": {\n        \"name\": \"iam.googleapis.com\",\n        \"title\": \"Identity and Access Management (IAM) API\",\n        \"documentation\": {\n          \"summary\": \"Manages identity and access control for Google Cloud Platform resources, including the creation of service accounts, which you can use to authenticate to Google and make API calls.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"iam_service_account\",\n            \"displayName\": \"IAM Service Account\",\n            \"description\": \"An IAM Service Account.\",\n            \"labels\": [\n              {\n                \"key\": \"project_id\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"unique_id\",\n                \"description\": \"The unique_id of the service account.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"iam.googleapis.com/WorkloadIdentityPoolProvider\",\n            \"displayName\": \"Workload Identity Pool Provider\",\n            \"description\": \"A workload identity pool provider.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location of the resource.\"\n              },\n              {\n                \"key\": \"pool_id\",\n                \"description\": \"The ID of the provider's workload identity pool parent resource.\"\n              },\n              {\n                \"key\": \"provider_id\",\n                \"description\": \"The ID of the workload identity pool provider resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"iam.googleapis.com/WorkloadIdentityPoolProvider\",\n              \"metrics\": [\n                \"iam.googleapis.com/workload_identity_federation/count\",\n                \"iam.googleapis.com/workload_identity_federation/key_usage_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"iam_service_account\",\n              \"metrics\": [\n                \"iam.googleapis.com/service_account/authn_events_count\",\n                \"iam.googleapis.com/service_account/key/authn_events_count\",\n                \"iam.googleapis.com/service_account/authn_events_count_preprod\",\n                \"iam.googleapis.com/service_account/key/authn_events_count_preprod\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340001\"\n    },\n    {\n      \"name\": \"projects/12340001/services/iamcredentials.googleapis.com\",\n      \"config\": {\n        \"name\": \"iamcredentials.googleapis.com\",\n        \"title\": \"IAM Service Account Credentials API\",\n        \"documentation\": {\n          \"summary\": \"Creates short-lived credentials for impersonating IAM service accounts. To enable this API, you must enable the IAM API (iam.googleapis.com).\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340001\"\n    },\n    {\n      \"name\": \"projects/12340001/services/monitoring.googleapis.com\",\n      \"config\": {\n        \"name\": \"monitoring.googleapis.com\",\n        \"title\": \"Cloud Monitoring API\",\n        \"documentation\": {\n          \"summary\": \"Manages your Cloud Monitoring data and configurations.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"monitoring.googleapis.com/ChargedProject\",\n            \"displayName\": \"Cloud monitoring target\",\n            \"description\": \"A cloud monitoring specialization target schema of cloud.ChargedProject.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The monitored resource container. Could be project, workspace, etc.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The service-specific notion of location.\"\n              },\n              {\n                \"key\": \"service\",\n                \"description\": \"The name of the API service with which the data is associated (e.g.,'monitoring.googleapis.com').\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"monitoring.googleapis.com/MetricStatistics\",\n            \"displayName\": \"Metric Statistics\",\n            \"description\": \"Information about a user-written metric in Cloud Monitoring.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project to which the metric is written, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The cloud region where the metric was received.\"\n              },\n              {\n                \"key\": \"metric_type\",\n                \"description\": \"The metric type.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"monitoring.googleapis.com/MetricIngestionAttribution\",\n            \"displayName\": \"Metric Ingestion Attribution\",\n            \"description\": \"Attribution for metric ingestion.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project to which the metric is written, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location of the resource that the metric ingestion was associated with, unless it was 'global', in which case this will be the cloud region where the metric was received.\"\n              },\n              {\n                \"key\": \"attribution_dimension\",\n                \"description\": \"The dimension used for attribution reporting. It is not recommended that aggregations are performed across dimensions because a single metric point can be recorded with multiple dimensions which could cause double counting. Currently only \\\"namespace\\\" and \\\"cluster\\\" are supported.\"\n              },\n              {\n                \"key\": \"attribution_id\",\n                \"description\": \"The attribution id of the source of the metric write.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"monitoring.googleapis.com/ChargedProject\",\n              \"metrics\": [\n                \"monitoring.googleapis.com/billing/bytes_ingested\",\n                \"monitoring.googleapis.com/billing/samples_ingested\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"monitoring.googleapis.com/MetricStatistics\",\n              \"metrics\": [\n                \"monitoring.googleapis.com/collection/write_request_count\",\n                \"monitoring.googleapis.com/collection/write_request_point_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"monitoring.googleapis.com/MetricIngestionAttribution\",\n              \"metrics\": [\n                \"monitoring.googleapis.com/collection/attribution/sample_count\",\n                \"monitoring.googleapis.com/collection/attribution/write_sample_count\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340001\"\n    },\n    {\n      \"name\": \"projects/12340001/services/oslogin.googleapis.com\",\n      \"config\": {\n        \"name\": \"oslogin.googleapis.com\",\n        \"title\": \"Cloud OS Login API\",\n        \"documentation\": {\n          \"summary\": \"You can use OS Login to manage access to your VM instances using IAM roles.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340001\"\n    },\n    {\n      \"name\": \"projects/12340001/services/pubsub.googleapis.com\",\n      \"config\": {\n        \"name\": \"pubsub.googleapis.com\",\n        \"title\": \"Cloud Pub/Sub API\",\n        \"documentation\": {\n          \"summary\": \"Provides reliable, many-to-many, asynchronous messaging between applications.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340001\"\n    },\n    {\n      \"name\": \"projects/12340001/services/storage-api.googleapis.com\",\n      \"config\": {\n        \"name\": \"storage-api.googleapis.com\",\n        \"title\": \"Google Cloud Storage JSON API\",\n        \"documentation\": {\n          \"summary\": \"Lets you store and retrieve potentially-large, immutable data objects.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340001\"\n    },\n    {\n      \"name\": \"projects/12340001/services/storage-component.googleapis.com\",\n      \"config\": {\n        \"name\": \"storage-component.googleapis.com\",\n        \"title\": \"Cloud Storage\",\n        \"documentation\": {\n          \"summary\": \"Google Cloud Storage is a RESTful service for storing and accessing your data on Google's\\n    infrastructure.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"serviceruntime.googleapis.com/api\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_version\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_method\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/consumer_project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/consumer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/producer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/consumer_resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/api\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/api/consumer/request_count\",\n                \"serviceruntime.googleapis.com/api/consumer/error_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_used_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_refund_count\",\n                \"serviceruntime.googleapis.com/api/consumer/total_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_overhead_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/backend_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/response_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer\",\n                \"serviceruntime.googleapis.com/quota/used\",\n                \"serviceruntime.googleapis.com/quota/limit\",\n                \"serviceruntime.googleapis.com/quota/exceeded\",\n                \"serviceruntime.googleapis.com/allocation/consumer/quota_used_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/consumer_quota\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/quota/rate/consumer/used_count\",\n                \"serviceruntime.googleapis.com/quota/rate/consumer/refund_count\",\n                \"serviceruntime.googleapis.com/quota/allocation/consumer/usage\",\n                \"serviceruntime.googleapis.com/quota/consumer/limit\",\n                \"serviceruntime.googleapis.com/quota/consumer/exceeded\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340001\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/datafusion1/project.tf",
    "content": "/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nresource \"random_string\" \"project_id\" {\n  length  = 8\n  number  = true\n  lower   = true\n  upper   = false\n  special = false\n}\n\nresource \"google_project\" \"project\" {\n  name            = \"gcpdiag test - datafusion1\"\n  project_id      = \"gcpdiag-datafusion1-${random_string.project_id.id}\"\n  org_id          = var.folder_id == \"\" ? var.org_id : null\n  folder_id       = var.folder_id != \"\" ? var.folder_id : null\n  billing_account = var.billing_account_id\n}\n\nresource \"google_project_service\" \"datafusion\" {\n  project            = google_project.project.project_id\n  service            = \"datafusion.googleapis.com\"\n  disable_on_destroy = false\n}\n\noutput \"project_id\" {\n  value = google_project.project.project_id\n}\n\noutput \"project_id_suffix\" {\n  value = random_string.project_id.id\n}\n\noutput \"project_nr\" {\n  value = google_project.project.number\n}\n\noutput \"org_id\" {\n  value = var.org_id\n}\n"
  },
  {
    "path": "test-data/datafusion1/variables.tf",
    "content": "variable \"billing_account_id\" {}\n\nvariable \"org_id\" {}\nvariable \"folder_id\" { default = \"\" }\n"
  },
  {
    "path": "test-data/dataproc1/Makefile",
    "content": "PROJECT_ID  := $(shell terraform output project_id)\nPROJECT_ID_SUFFIX := $(shell terraform output project_id_suffix)\nPROJECT_NR  := $(shell terraform output project_nr)\nORG_ID      := $(shell terraform output org_id)\nSUCCESS_JOB_ID      := $(shell terraform output job-success-id)\nFAILED_JOB_ID      := $(shell terraform output job-failed-id)\n\nCURL         = ../../bin/curl-wrap.sh\nJSON_CLEANER = ../../bin/json-cleaner\nREGION_1     = us-central1\nREGION       = europe-west4\nZONE         = us-central1-a\nZONE_1         = us-central1-b\nZONE_2         = us-central1-c\nZONE_3         = us-central1-f\n\nFAKE_PROJECT_ID_SUFFIX = aaaa\nFAKE_PROJECT_NR = 12340005\nFAKE_ORG_ID = 11112222\nFAKE_SUCCESS_JOB_ID = 1234567890\nFAKE_FAILED_JOB_ID = 1234567891\n\nSED_JOB_FAKE = sed -e \"s/$(SUCCESS_JOB_ID)/$(FAKE_SUCCESS_JOB_ID)/\" \\\n                   -e \"s/$(FAILED_JOB_ID)/$(FAKE_FAILED_JOB_ID)/\"\n\nall:\t\\\n  json-dumps/project.json \\\n\tjson-dumps/compute-regions.json \\\n\tjson-dumps/dataproc-clusters-$(REGION_1).json \\\n\tjson-dumps/dataproc-job-failed.json \\\n\tjson-dumps/dataproc-job-success.json \\\n\tjson-dumps/services.json \\\n\tjson-dumps/iam-service-accounts.json \\\n\tjson-dumps/iam-policy.json \\\n\tjson-dumps/compute-instances-$(ZONE).json \\\n\tjson-dumps/compute-instances-$(ZONE_1).json \\\n\tjson-dumps/compute-instances-$(ZONE_2).json \\\n\tjson-dumps/compute-instances-$(ZONE_3).json \\\n\tjson-dumps/compute-subnetworks-aggregated.json \\\n\tjson-dumps/logging-entries-1.json \\\n\tjson-dumps/compute-network-test-bad-network.json \\\n\ninclude ../Makefile.inc\n\njson-dumps/project.json:\n\t$(CURL) -fsS \\\n\t\t'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-regions.json:\n\t$(CURL) -fsS \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/regions' \\\n\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/dataproc-clusters-$(REGION_1).json:\n\t$(CURL) -fsS \\\n\t  'https://dataproc.googleapis.com/v1/projects/$(PROJECT_ID)/regions/$(REGION_1)/clusters' \\\n\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/dataproc-job-failed.json:\n\t$(CURL) -fsS \\\n\t  'https://dataproc.googleapis.com/v1/projects/$(PROJECT_ID)/regions/$(REGION_1)/jobs/$(FAILED_JOB_ID)' \\\n\t| $(SED_SUBST_FAKE) \\\n\t| $(SED_JOB_FAKE) >$@\n\njson-dumps/dataproc-job-success.json:\n\t$(CURL) -fsS \\\n\t  'https://dataproc.googleapis.com/v1/projects/$(PROJECT_ID)/regions/$(REGION_1)/jobs/$(SUCCESS_JOB_ID)' \\\n\t| $(SED_SUBST_FAKE) \\\n\t| $(SED_JOB_FAKE) >$@\n\njson-dumps/services.json:\n\t$(CURL) -fsS \\\n\t  'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \\\n\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/iam-service-accounts.json:\n\t$(CURL) -fsS \\\n\t\t'https://iam.googleapis.com/v1/projects/$(PROJECT_ID)/serviceAccounts' \\\n\t\t| $(JSON_CLEANER) service-accounts \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/iam-policy.json:\n\t$(CURL) -fsS \\\n\t\t'https://cloudresourcemanager.googleapis.com/v1/projects/$(PROJECT_ID):getIamPolicy' \\\n\t\t-X POST  --header \"Content-Type:text/json\" \\\n\t\t-d \"\" \\\n\t\t| $(JSON_CLEANER) other \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\n\n# If you need to recreate the JSON: adapt the timestamp and make sure that there are some entries found.\ndefine LOGGING_ENTRIES_BODY\n{\n\t\"resourceNames\": [\"projects/$(PROJECT_ID)\"],\n\t\"orderBy\": \"timestamp desc\",\n\t\"filter\": \"\n\t\ttimestamp > \\\"2024-06-24T00:00:00+00:00\\\" AND\n\t\ttimestamp < \\\"2024-06-26T00:00:00+00:00\\\" AND\n\t\tresource.type=\\\"cloud_dataproc_cluster\\\" AND\n\t\tlog_id(\\\"cloudaudit.googleapis.com%2Factivity\\\")\n\t\"\n}\nendef\nexport LOGGING_ENTRIES_BODY\n\njson-dumps/logging-entries-1.json:\n\t$(CURL) -fsS \\\n\t\t'https://logging.googleapis.com/v2/entries:list' \\\n\t\t--header \"Content-Type:text/json\" \\\n\t\t-d \"$$LOGGING_ENTRIES_BODY\" \\\n\t\t| $(SED_SUBST_FAKE) >$@\n"
  },
  {
    "path": "test-data/dataproc1/README.md",
    "content": "Create terraform project\n\n```\nterraform plan -var=\"billing_account_id=0123456-ABCDEF-987654\" -var=\"org_id=123456789012\"\nterraform apply -var=\"billing_account_id=0123456-ABCDEF-987654\" -var=\"org_id=123456789012\"\n```\n\nRefresh json dumps:\n```\nmake all\n```\n"
  },
  {
    "path": "test-data/dataproc1/dataproc_cluster.tf",
    "content": "resource \"google_dataproc_cluster\" \"good\" {\n  depends_on = [google_project_service.dataproc]\n  project    = google_project.project.project_id\n  name       = \"good\"\n  region     = \"us-central1\"\n\n  cluster_config {\n    gce_cluster_config {\n      internal_ip_only = false\n    }\n\n    master_config {\n      num_instances = 1\n      machine_type  = \"e2-medium\"\n      disk_config {\n        boot_disk_size_gb = 30\n      }\n    }\n\n    worker_config {\n      num_instances = 2\n      machine_type  = \"e2-medium\"\n      disk_config {\n        boot_disk_size_gb = 30\n      }\n    }\n  }\n}\n\nresource \"google_dataproc_cluster\" \"test-best-practices-enabled\" {\n  depends_on = [google_project_service.dataproc]\n  project    = google_project.project.project_id\n  name       = \"test-best-practices-enabled\"\n  region     = \"us-central1\"\n\n  cluster_config {\n    gce_cluster_config {\n      service_account  = google_service_account.sa_worker.email\n      zone             = \"us-central1-b\"\n      internal_ip_only = false\n    }\n\n    master_config {\n      num_instances = 1\n      machine_type  = \"e2-medium\"\n      disk_config {\n        boot_disk_size_gb = 30\n      }\n    }\n\n    worker_config {\n      num_instances = 2\n      machine_type  = \"e2-medium\"\n      disk_config {\n        boot_disk_size_gb = 30\n      }\n    }\n\n    # Override or set some custom properties\n    software_config {\n      override_properties = {\n        # enable cloud monitoring\n        \"dataproc:dataproc.monitoring.stackdriver.enable\" = \"true\"\n      }\n    }\n  }\n}\n\nresource \"google_service_account\" \"sa_worker\" {\n  project      = google_project.project.project_id\n  account_id   = \"saworker\"\n  display_name = \"Dataproc VM Service account with Dataproc Worker role\"\n}\n\nresource \"google_project_iam_member\" \"sa_worker\" {\n  project = google_project.project.project_id\n  role    = \"roles/dataproc.worker\"\n  member  = \"serviceAccount:${google_service_account.sa_worker.email}\"\n}\n\nresource \"google_dataproc_cluster\" \"test-best-practices-disabled\" {\n  depends_on = [google_project_service.dataproc]\n  project    = google_project.project.project_id\n  name       = \"test-best-practices-disabled\"\n  region     = \"us-central1\"\n\n  cluster_config {\n    gce_cluster_config {\n      internal_ip_only = false\n    }\n\n    master_config {\n      num_instances = 1\n      machine_type  = \"e2-medium\"\n      disk_config {\n        boot_disk_size_gb = 30\n      }\n    }\n\n    worker_config {\n      num_instances = 2\n      machine_type  = \"e2-medium\"\n      disk_config {\n        boot_disk_size_gb = 30\n      }\n    }\n\n    # Override or set some custom properties\n    software_config {\n      override_properties = {\n        \"dataproc:dataproc.logging.stackdriver.enable\" = \"false\"\n      }\n    }\n  }\n}\n\n# Expected to fail on apply, run terraform untaint google_dataproc_cluster.test-deny-icmp then terraform apply again\nresource \"google_dataproc_cluster\" \"test-deny-icmp\" {\n  depends_on = [google_project_service.dataproc]\n  project    = google_project.project.project_id\n  name       = \"test-deny-icmp\"\n  region     = \"us-central1\"\n\n  cluster_config {\n    gce_cluster_config {\n      zone             = \"us-central1-a\"\n      subnetwork       = google_compute_subnetwork.test-bad-subnet.name\n      tags             = [\"icmp-deny\"]\n      internal_ip_only = false\n    }\n  }\n}\n\nresource \"google_dataproc_cluster\" \"job-failed\" {\n  depends_on = [google_project_service.dataproc]\n  project    = google_project.project.project_id\n  name       = \"job-failed\"\n  region     = \"us-central1\"\n\n  cluster_config {\n    gce_cluster_config {\n      internal_ip_only = false\n    }\n\n    master_config {\n      num_instances = 1\n      machine_type  = \"e2-medium\"\n      disk_config {\n        boot_disk_size_gb = 30\n      }\n    }\n\n    worker_config {\n      num_instances = 2\n      machine_type  = \"e2-medium\"\n      disk_config {\n        boot_disk_size_gb = 30\n      }\n    }\n  }\n}\n\nresource \"google_dataproc_cluster\" \"job-success\" {\n  depends_on = [google_project_service.dataproc]\n  project    = google_project.project.project_id\n  name       = \"job-success\"\n  region     = \"us-central1\"\n\n  cluster_config {\n    gce_cluster_config {\n      internal_ip_only = false\n    }\n\n    master_config {\n      num_instances = 1\n      machine_type  = \"n2-standard-4\"\n      disk_config {\n        boot_disk_size_gb = 30\n      }\n    }\n\n    worker_config {\n      num_instances = 2\n      machine_type  = \"n2-standard-4\"\n      disk_config {\n        boot_disk_size_gb = 30\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "test-data/dataproc1/job.tf",
    "content": "resource \"google_dataproc_job\" \"job-failed\" {\n  region       = google_dataproc_cluster.job-failed.region\n  project      = google_dataproc_cluster.job-failed.project\n  force_delete = true\n  placement {\n    cluster_name = google_dataproc_cluster.job-failed.name\n  }\n\n  spark_config {\n    main_class    = \"org.apache.spark.examples.SparkPi\"\n    jar_file_uris = [\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"]\n    args          = [\"10000\"]\n\n    properties = {\n      \"spark.logConf\" = \"true\"\n    }\n\n    logging_config {\n      driver_log_levels = {\n        \"root\" = \"INFO\"\n      }\n    }\n  }\n}\n\nresource \"google_dataproc_job\" \"job-success\" {\n  region       = google_dataproc_cluster.job-success.region\n  project      = google_dataproc_cluster.job-success.project\n  force_delete = true\n  placement {\n    cluster_name = google_dataproc_cluster.job-success.name\n  }\n\n  spark_config {\n    main_class    = \"org.apache.spark.examples.SparkPi\"\n    jar_file_uris = [\"file:///usr/lib/spark/examples/jars/spark-examples.jar\"]\n    args          = [\"10\"]\n\n    properties = {\n      \"spark.logConf\" = \"true\"\n    }\n\n    logging_config {\n      driver_log_levels = {\n        \"root\" = \"INFO\"\n      }\n    }\n  }\n}\n\noutput \"job-failed-id\" {\n  value = google_dataproc_job.job-failed.reference[0].job_id\n}\n\noutput \"job-success-id\" {\n  value = google_dataproc_job.job-success.reference[0].job_id\n}\n"
  },
  {
    "path": "test-data/dataproc1/json-dumps/autoscaling-policy.json",
    "content": "{\n  \"id\": \"CDF_AUTOSCALING_POLICY_V1\",\n  \"name\": \"projects/gcpdiag-dataproc1-aaaa/regions/us-central1/autoscalingPolicies/CDF_AUTOSCALING_POLICY_V1\",\n  \"basicAlgorithm\": {\n    \"yarnConfig\": {\n      \"scaleUpFactor\": 0.2,\n      \"scaleDownFactor\": 1.0,\n      \"scaleUpMinWorkerFraction\": 0.75,\n      \"gracefulDecommissionTimeout\": \"86400s\"\n    },\n    \"cooldownPeriod\": \"120s\"\n  },\n  \"workerConfig\": {\n    \"minInstances\": 2,\n    \"maxInstances\": 2,\n    \"weight\": 1\n  },\n  \"secondaryWorkerConfig\": {\n    \"maxInstances\": 40,\n    \"weight\": 1\n  }\n}\n"
  },
  {
    "path": "test-data/dataproc1/json-dumps/compute-instances-us-central1-a.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-dataproc1-aaaa/zones/us-central1-a/instances\",\n  \"items\": [\n    {\n      \"cpuPlatform\": \"Unknown CPU Platform\",\n      \"creationTimestamp\": \"2024-10-30T20:33:19.158-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"1000\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            },\n            {\n              \"type\": \"SEV_LIVE_MIGRATABLE_V2\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/cloud-dataproc/global/licenses/dataproc\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-a/disks/test-deny-icmp-m\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"3441797725372236946\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"tjiU9HDVBJ4=\",\n      \"labels\": {\n        \"goog-dataproc-cluster-name\": \"test-deny-icmp\",\n        \"goog-dataproc-cluster-uuid\": \"f0ce26dc-87e9-40d0-a75c-ca6c0ae78cf4\",\n        \"goog-dataproc-location\": \"us-central1\"\n      },\n      \"lastStartTimestamp\": \"2024-10-30T20:33:24.200-07:00\",\n      \"lastStopTimestamp\": \"2024-10-30T23:19:32.090-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-a/machineTypes/n2-standard-4\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"dataproc-bucket\",\n            \"value\": \"dataproc-staging-us-central1-12340005-9v6173vh\"\n          },\n          {\n            \"key\": \"dataproc-cloud-logging-enabled\",\n            \"value\": \"false\"\n          },\n          {\n            \"key\": \"dataproc-cluster-configuration-directory\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/f0ce26dc-87e9-40d0-a75c-ca6c0ae78cf4/\"\n          },\n          {\n            \"key\": \"dataproc-cluster-name\",\n            \"value\": \"test-deny-icmp\"\n          },\n          {\n            \"key\": \"dataproc-cluster-uuid\",\n            \"value\": \"f0ce26dc-87e9-40d0-a75c-ca6c0ae78cf4\"\n          },\n          {\n            \"key\": \"dataproc-exclude-file-location\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/f0ce26dc-87e9-40d0-a75c-ca6c0ae78cf4/nodes_exclude.xml\"\n          },\n          {\n            \"key\": \"dataproc-include-file-location\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/f0ce26dc-87e9-40d0-a75c-ca6c0ae78cf4/nodes_include\"\n          },\n          {\n            \"key\": \"dataproc-initialization-script-count\",\n            \"value\": \"0\"\n          },\n          {\n            \"key\": \"dataproc-master\",\n            \"value\": \"test-deny-icmp-m\"\n          },\n          {\n            \"key\": \"dataproc-master-additional\",\n            \"value\": \"\"\n          },\n          {\n            \"key\": \"dataproc-region\",\n            \"value\": \"us-central1\"\n          },\n          {\n            \"key\": \"dataproc-temp-bucket\",\n            \"value\": \"dataproc-temp-us-central1-12340005-xslkmij6\"\n          },\n          {\n            \"key\": \"dataproc-worker-agent-runner-daemon-timeout\",\n            \"value\": \"60\"\n          },\n          {\n            \"key\": \"dataproc-worker-count\",\n            \"value\": \"2\"\n          },\n          {\n            \"key\": \"has-driver-pool\",\n            \"value\": \"false\"\n          },\n          {\n            \"key\": \"master-run-driver-location\",\n            \"value\": \"LOCAL\"\n          },\n          {\n            \"key\": \"dataproc-agent-output-directory\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/f0ce26dc-87e9-40d0-a75c-ca6c0ae78cf4/test-deny-icmp-m\"\n          },\n          {\n            \"key\": \"dataproc-cluster-properties\",\n            \"value\": \"ZIPPY:eJylWNtOIzkQfecrkOZ1beVCLkTqhwyEhV1IUJrZ3VkhRU63k3jwpdd2h8l8/Zb7EtKJm3AREiH0OVXl8nFVub9c8NRYqk8TrRKqLaPm5MvfND6dRPa03ThtNQbt9qDZO72/fIAvrbOTiCQkYnaDTLSiccqpfhxsiJZ4+x2XEKypUamOKIoIj1JOrNKB0kvsnq8oXpFYqQRn7NQyvsXjSyWYJNJOi39cbPnv86+UxTFdkJRbrHRMNZNLlCjOok2wIAysKU0fBwuDlwbPuYqesGG/aNBsn7WavV6rXwEIaklMLAEHLnwqyZxTsMMNLXDFiozhxdMYQ2KtihQ3wcNtuG7+lv3G5WfrxBkETPQ4IEsqLTYJ0U841mwNK6EigWX8IDqwOqW7WAGGmSB6M1OSb4ogXp6Xf2HyTJhFkj6jZ6WfqDbIUL1msCeaLpmxmlimZD0/yvWBVpRwu8KwEE4jiyIlEiUhXiRVTJEkgpr9GA9sQP40i8zWiNu2nF8+KZJ21JK1TiyJ0oURElm2hh2vJ5bxGmQVEkoy0JI/Fat4YU6dVb8daSK9Sazb1zWL3R7lMqj3LK1WHCWcSIpiCpEIZgx4Ai0eX3DOxkXEjlIEDYeIvZluiXnCTK4JZ3G2SvgCeYTvWDDOmQk6jUbjqAVN/0upsR8jQ4IpyDZO8zzDOqKg6+eB2LSdU2KxIG6/8SLzLKNNxmofIeVK3yOhpo/0Q81xKb4ixy+ryyP00YqwIlCjEkBgFjsJgjjASkyD6bfx7OvoajIdzcLR9K+bi1HoNVN4dmcgL4PuL0EklAKNiyN3RF87yigrXfU0fYRpNrA+8Q4DLo/ZAt7v21gSPZX1brekemguPUut0sTtjZIx1L9aF1vsS1mptQutb6E0JB7OVbkCELalchtU/SF7aTyC/ITKKKNUa1caISkmaLaOcwQVSm9QasBLA5/7CIWmP6i4TNISJF0UUExSq5y+XqlBW06mTkGY29wsTtfSaOYcVfbtUybsCrr/SvEYP7F50O102t33Wipy9JlgChOfD+YzURxx787aCsQJJAzNbFnfNw0TCWcLBmOIiXY3ex+YHV2ulogsl9AMiWcF4DBKHgcCGKBcd05IApPJmmCVWBOgf8TPXrcvaoD5GrGYB003RB6Cio83GSztVm3msxeicv04uB5eTib3s8vhw3A8uRzNJvcPYWax02yJE9fh4WjBUOcykG0EiWNIuYHTl/08Ds773a4PuLI28aLP6tDGC+/44CyJvODeDtiNWrltIuNs2lWptEGr4cWAf+Sx2KtFGy+86YODsihoCvYjibYsC/MBTDlyg1gkEiQeB/1Gx+ttW8Fro+z2j/O88XbP/cR8cKomrlkTXIY9urLmSS7Liuz+mHydXd+ED5Ppd1eLR9PZ9Wh4H978OwrO3KSUU3YVnY0hJDFBq1nztPjTcPUMDVPbbKLl1NI440HX6LzKNEHP/7ysJBrSCnUYhiX4SqFREFjz4WXthbtu4ZXB1zk9hHxRfUvXlMfz0BJLQ2cmzNPo8eyKQpSkeO0uTtAlayDVetDqNaAg+JEv1aDd7nc9oOLjiFNvHarze1CIalzn47fCBi4sDtbqvKCy0kuS3czClOxuCSBTVBOCn7S9PsMa0cEaj3DK6LP7Zy7n8H44/ROK6OhuMp7dwe/p90zAIgdBf8nvqtu7Zrx2E1QM48nCzd+M2/127CeWo5YJYN14qdSSOwWqNC6uw7vz2WXBusvntNuCW2Pa/MdB5UxeQM1grq1NafYi4C1hOS5X0DixJhKCSM0qVs/yrVTYOybYL/DlAsCL1Bx01beQOV1YQwXLjEDpg3P2MUNuBCDwkc7hWgR6fV9A8B+g2QJ+pWBY0ReuMviI+UgHo+2UGrhXhO6dSqtx1t9XToHLzg9I67y7B6A/aZS6O1ku5lbNUyahJsroFUThotvs9GpcjOQaT+5H46+3w3A2/nY3e7iejoaXIZygCj7h6RL8lVcmJ79D1W4zV4o1dNz7jFo1t3MRcGP81fBmugeA3Edz9co2VXdZQ1Njgrq3WUpc5Ucwk05CrBs9XzGUMuxeqQSN6r/zwiG2OTyDApC9dcmKxPfhdDxzQ9bdcDz8fbfXNbvt/j5wOgon36YXh+CsMe6BH27uRrc345G3iTpsUdR2L80H00C/0erWgX0F8+wouJjX3dzZ7pxV8CWm5Oy97sledhn0TCzsevUpYgt4iswqXSw4RU5A+Q69Yn0nOrTUJKKLlFfeMCGnBJVaBDOTCWBGreatcgllIhWIcFfvspuQb3k7BLiBeggn/wMsmjgT\"\n          },\n          {\n            \"key\": \"dataproc-cluster-properties-file\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/f0ce26dc-87e9-40d0-a75c-ca6c0ae78cf4/cluster.properties\"\n          },\n          {\n            \"key\": \"dataproc-datanode-enabled\",\n            \"value\": \"false\"\n          },\n          {\n            \"key\": \"dataproc-option-run-init-actions-early\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"dataproc-protocol-spec\",\n            \"value\": \"EoQBCipkYXRhcHJvY2NvbnRyb2wtdXMtY2VudHJhbDEuZ29vZ2xlYXBpcy5jb20SKmRhdGFwcm9jY29udHJvbC11cy1jZW50cmFsMS5nb29nbGVhcGlzLmNvbSIqZGF0YXByb2Njb250cm9sLXVzLWNlbnRyYWwxLmdvb2dsZWFwaXMuY29t\"\n          },\n          {\n            \"key\": \"dataproc-role\",\n            \"value\": \"Master\"\n          },\n          {\n            \"key\": \"node-group-roles\",\n            \"value\": \"MASTER\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"test-deny-icmp-m\",\n      \"networkInterfaces\": [\n        {\n          \"accessConfigs\": [\n            {\n              \"kind\": \"compute#accessConfig\",\n              \"name\": \"External NAT\",\n              \"networkTier\": \"PREMIUM\",\n              \"type\": \"ONE_TO_ONE_NAT\"\n            }\n          ],\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/test-bad-network\",\n          \"networkIP\": \"10.128.0.4\",\n          \"nicType\": \"GVNIC\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-central1/subnetworks/test-bad-subnet\"\n        }\n      ],\n      \"satisfiesPzi\": true,\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-a/instances/test-deny-icmp-m\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"12340005-compute@developer.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/cloud-platform\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": true,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"TERMINATED\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"icmp-deny\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-a\"\n    },\n    {\n      \"cpuPlatform\": \"Unknown CPU Platform\",\n      \"creationTimestamp\": \"2024-10-30T20:33:18.034-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"1000\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            },\n            {\n              \"type\": \"SEV_LIVE_MIGRATABLE_V2\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/cloud-dataproc/global/licenses/dataproc\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-a/disks/test-deny-icmp-w-0\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"5459908484446241938\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"tjiU9HDVBJ4=\",\n      \"labels\": {\n        \"goog-dataproc-cluster-name\": \"test-deny-icmp\",\n        \"goog-dataproc-cluster-uuid\": \"f0ce26dc-87e9-40d0-a75c-ca6c0ae78cf4\",\n        \"goog-dataproc-location\": \"us-central1\"\n      },\n      \"lastStartTimestamp\": \"2024-10-30T20:33:26.580-07:00\",\n      \"lastStopTimestamp\": \"2024-10-30T23:20:52.153-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-a/machineTypes/n2-standard-4\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"dataproc-bucket\",\n            \"value\": \"dataproc-staging-us-central1-12340005-9v6173vh\"\n          },\n          {\n            \"key\": \"dataproc-cloud-logging-enabled\",\n            \"value\": \"false\"\n          },\n          {\n            \"key\": \"dataproc-cluster-configuration-directory\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/f0ce26dc-87e9-40d0-a75c-ca6c0ae78cf4/\"\n          },\n          {\n            \"key\": \"dataproc-cluster-name\",\n            \"value\": \"test-deny-icmp\"\n          },\n          {\n            \"key\": \"dataproc-cluster-uuid\",\n            \"value\": \"f0ce26dc-87e9-40d0-a75c-ca6c0ae78cf4\"\n          },\n          {\n            \"key\": \"dataproc-exclude-file-location\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/f0ce26dc-87e9-40d0-a75c-ca6c0ae78cf4/nodes_exclude.xml\"\n          },\n          {\n            \"key\": \"dataproc-include-file-location\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/f0ce26dc-87e9-40d0-a75c-ca6c0ae78cf4/nodes_include\"\n          },\n          {\n            \"key\": \"dataproc-initialization-script-count\",\n            \"value\": \"0\"\n          },\n          {\n            \"key\": \"dataproc-master\",\n            \"value\": \"test-deny-icmp-m\"\n          },\n          {\n            \"key\": \"dataproc-master-additional\",\n            \"value\": \"\"\n          },\n          {\n            \"key\": \"dataproc-region\",\n            \"value\": \"us-central1\"\n          },\n          {\n            \"key\": \"dataproc-temp-bucket\",\n            \"value\": \"dataproc-temp-us-central1-12340005-xslkmij6\"\n          },\n          {\n            \"key\": \"dataproc-worker-agent-runner-daemon-timeout\",\n            \"value\": \"60\"\n          },\n          {\n            \"key\": \"dataproc-worker-count\",\n            \"value\": \"2\"\n          },\n          {\n            \"key\": \"has-driver-pool\",\n            \"value\": \"false\"\n          },\n          {\n            \"key\": \"master-run-driver-location\",\n            \"value\": \"LOCAL\"\n          },\n          {\n            \"key\": \"dataproc-agent-output-directory\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/f0ce26dc-87e9-40d0-a75c-ca6c0ae78cf4/test-deny-icmp-w-0\"\n          },\n          {\n            \"key\": \"dataproc-cluster-properties\",\n            \"value\": \"ZIPPY:eJylWNtOIzkQfecrkOZ1beVCLkTqhwyEhV1IUJrZ3VkhRU63k3jwpdd2h8l8/Zb7EtKJm3AREiH0OVXl8nFVub9c8NRYqk8TrRKqLaPm5MvfND6dRPa03ThtNQbt9qDZO72/fIAvrbOTiCQkYnaDTLSiccqpfhxsiJZ4+x2XEKypUamOKIoIj1JOrNKB0kvsnq8oXpFYqQRn7NQyvsXjSyWYJNJOi39cbPnv86+UxTFdkJRbrHRMNZNLlCjOok2wIAysKU0fBwuDlwbPuYqesGG/aNBsn7WavV6rXwEIaklMLAEHLnwqyZxTsMMNLXDFiozhxdMYQ2KtihQ3wcNtuG7+lv3G5WfrxBkETPQ4IEsqLTYJ0U841mwNK6EigWX8IDqwOqW7WAGGmSB6M1OSb4ogXp6Xf2HyTJhFkj6jZ6WfqDbIUL1msCeaLpmxmlimZD0/yvWBVpRwu8KwEE4jiyIlEiUhXiRVTJEkgpr9GA9sQP40i8zWiNu2nF8+KZJ21JK1TiyJ0oURElm2hh2vJ5bxGmQVEkoy0JI/Fat4YU6dVb8daSK9Sazb1zWL3R7lMqj3LK1WHCWcSIpiCpEIZgx4Ai0eX3DOxkXEjlIEDYeIvZluiXnCTK4JZ3G2SvgCeYTvWDDOmQk6jUbjqAVN/0upsR8jQ4IpyDZO8zzDOqKg6+eB2LSdU2KxIG6/8SLzLKNNxmofIeVK3yOhpo/0Q81xKb4ixy+ryyP00YqwIlCjEkBgFjsJgjjASkyD6bfx7OvoajIdzcLR9K+bi1HoNVN4dmcgL4PuL0EklAKNiyN3RF87yigrXfU0fYRpNrA+8Q4DLo/ZAt7v21gSPZX1brekemguPUut0sTtjZIx1L9aF1vsS1mptQutb6E0JB7OVbkCELalchtU/SF7aTyC/ITKKKNUa1caISkmaLaOcwQVSm9QasBLA5/7CIWmP6i4TNISJF0UUExSq5y+XqlBW06mTkGY29wsTtfSaOYcVfbtUybsCrr/SvEYP7F50O102t33Wipy9JlgChOfD+YzURxx787aCsQJJAzNbFnfNw0TCWcLBmOIiXY3ex+YHV2ulogsl9AMiWcF4DBKHgcCGKBcd05IApPJmmCVWBOgf8TPXrcvaoD5GrGYB003RB6Cio83GSztVm3msxeicv04uB5eTib3s8vhw3A8uRzNJvcPYWax02yJE9fh4WjBUOcykG0EiWNIuYHTl/08Ds773a4PuLI28aLP6tDGC+/44CyJvODeDtiNWrltIuNs2lWptEGr4cWAf+Sx2KtFGy+86YODsihoCvYjibYsC/MBTDlyg1gkEiQeB/1Gx+ttW8Fro+z2j/O88XbP/cR8cKomrlkTXIY9urLmSS7Liuz+mHydXd+ED5Ppd1eLR9PZ9Wh4H978OwrO3KSUU3YVnY0hJDFBq1nztPjTcPUMDVPbbKLl1NI440HX6LzKNEHP/7ysJBrSCnUYhiX4SqFREFjz4WXthbtu4ZXB1zk9hHxRfUvXlMfz0BJLQ2cmzNPo8eyKQpSkeO0uTtAlayDVetDqNaAg+JEv1aDd7nc9oOLjiFNvHarze1CIalzn47fCBi4sDtbqvKCy0kuS3czClOxuCSBTVBOCn7S9PsMa0cEaj3DK6LP7Zy7n8H44/ROK6OhuMp7dwe/p90zAIgdBf8nvqtu7Zrx2E1QM48nCzd+M2/127CeWo5YJYN14qdSSOwWqNC6uw7vz2WXBusvntNuCW2Pa/MdB5UxeQM1grq1NafYi4C1hOS5X0DixJhKCSM0qVs/yrVTYOybYL/DlAsCL1Bx01beQOV1YQwXLjEDpg3P2MUNuBCDwkc7hWgR6fV9A8B+g2QJ+pWBY0ReuMviI+UgHo+2UGrhXhO6dSqtx1t9XToHLzg9I67y7B6A/aZS6O1ku5lbNUyahJsroFUThotvs9GpcjOQaT+5H46+3w3A2/nY3e7iejoaXIZygCj7h6RL8lVcmJ79D1W4zV4o1dNz7jFo1t3MRcGP81fBmugeA3Edz9co2VXdZQ1Njgrq3WUpc5Ucwk05CrBs9XzGUMuxeqQSN6r/zwiG2OTyDApC9dcmKxPfhdDxzQ9bdcDz8fbfXNbvt/j5wOgon36YXh+CsMe6BH27uRrc345G3iTpsUdR2L80H00C/0erWgX0F8+wouJjX3dzZ7pxV8CWm5Oy97sledhn0TCzsevUpYgt4iswqXSw4RU5A+Q69Yn0nOrTUJKKLlFfeMCGnBJVaBDOTCWBGreatcgllIhWIcFfvspuQb3k7BLiBeggn/wMsmjgT\"\n          },\n          {\n            \"key\": \"dataproc-cluster-properties-file\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/f0ce26dc-87e9-40d0-a75c-ca6c0ae78cf4/cluster.properties\"\n          },\n          {\n            \"key\": \"dataproc-datanode-enabled\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"dataproc-option-run-init-actions-early\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"dataproc-protocol-spec\",\n            \"value\": \"EoQBCipkYXRhcHJvY2NvbnRyb2wtdXMtY2VudHJhbDEuZ29vZ2xlYXBpcy5jb20SKmRhdGFwcm9jY29udHJvbC11cy1jZW50cmFsMS5nb29nbGVhcGlzLmNvbSIqZGF0YXByb2Njb250cm9sLXVzLWNlbnRyYWwxLmdvb2dsZWFwaXMuY29t\"\n          },\n          {\n            \"key\": \"dataproc-role\",\n            \"value\": \"Worker\"\n          },\n          {\n            \"key\": \"node-group-roles\",\n            \"value\": \"PRIMARY_WORKER\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"test-deny-icmp-w-0\",\n      \"networkInterfaces\": [\n        {\n          \"accessConfigs\": [\n            {\n              \"kind\": \"compute#accessConfig\",\n              \"name\": \"External NAT\",\n              \"networkTier\": \"PREMIUM\",\n              \"type\": \"ONE_TO_ONE_NAT\"\n            }\n          ],\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/test-bad-network\",\n          \"networkIP\": \"10.128.0.2\",\n          \"nicType\": \"GVNIC\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-central1/subnetworks/test-bad-subnet\"\n        }\n      ],\n      \"satisfiesPzi\": true,\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-a/instances/test-deny-icmp-w-0\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"12340005-compute@developer.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/cloud-platform\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": true,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"TERMINATED\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"icmp-deny\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-a\"\n    },\n    {\n      \"cpuPlatform\": \"Unknown CPU Platform\",\n      \"creationTimestamp\": \"2024-10-30T20:33:18.781-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"1000\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            },\n            {\n              \"type\": \"SEV_LIVE_MIGRATABLE_V2\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/cloud-dataproc/global/licenses/dataproc\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-a/disks/test-deny-icmp-w-1\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"9021823956504495250\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"tjiU9HDVBJ4=\",\n      \"labels\": {\n        \"goog-dataproc-cluster-name\": \"test-deny-icmp\",\n        \"goog-dataproc-cluster-uuid\": \"f0ce26dc-87e9-40d0-a75c-ca6c0ae78cf4\",\n        \"goog-dataproc-location\": \"us-central1\"\n      },\n      \"lastStartTimestamp\": \"2024-10-30T20:33:25.604-07:00\",\n      \"lastStopTimestamp\": \"2024-10-30T23:20:50.922-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-a/machineTypes/n2-standard-4\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"dataproc-bucket\",\n            \"value\": \"dataproc-staging-us-central1-12340005-9v6173vh\"\n          },\n          {\n            \"key\": \"dataproc-cloud-logging-enabled\",\n            \"value\": \"false\"\n          },\n          {\n            \"key\": \"dataproc-cluster-configuration-directory\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/f0ce26dc-87e9-40d0-a75c-ca6c0ae78cf4/\"\n          },\n          {\n            \"key\": \"dataproc-cluster-name\",\n            \"value\": \"test-deny-icmp\"\n          },\n          {\n            \"key\": \"dataproc-cluster-uuid\",\n            \"value\": \"f0ce26dc-87e9-40d0-a75c-ca6c0ae78cf4\"\n          },\n          {\n            \"key\": \"dataproc-exclude-file-location\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/f0ce26dc-87e9-40d0-a75c-ca6c0ae78cf4/nodes_exclude.xml\"\n          },\n          {\n            \"key\": \"dataproc-include-file-location\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/f0ce26dc-87e9-40d0-a75c-ca6c0ae78cf4/nodes_include\"\n          },\n          {\n            \"key\": \"dataproc-initialization-script-count\",\n            \"value\": \"0\"\n          },\n          {\n            \"key\": \"dataproc-master\",\n            \"value\": \"test-deny-icmp-m\"\n          },\n          {\n            \"key\": \"dataproc-master-additional\",\n            \"value\": \"\"\n          },\n          {\n            \"key\": \"dataproc-region\",\n            \"value\": \"us-central1\"\n          },\n          {\n            \"key\": \"dataproc-temp-bucket\",\n            \"value\": \"dataproc-temp-us-central1-12340005-xslkmij6\"\n          },\n          {\n            \"key\": \"dataproc-worker-agent-runner-daemon-timeout\",\n            \"value\": \"60\"\n          },\n          {\n            \"key\": \"dataproc-worker-count\",\n            \"value\": \"2\"\n          },\n          {\n            \"key\": \"has-driver-pool\",\n            \"value\": \"false\"\n          },\n          {\n            \"key\": \"master-run-driver-location\",\n            \"value\": \"LOCAL\"\n          },\n          {\n            \"key\": \"dataproc-agent-output-directory\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/f0ce26dc-87e9-40d0-a75c-ca6c0ae78cf4/test-deny-icmp-w-1\"\n          },\n          {\n            \"key\": \"dataproc-cluster-properties\",\n            \"value\": \"ZIPPY:eJylWNtOIzkQfecrkOZ1beVCLkTqhwyEhV1IUJrZ3VkhRU63k3jwpdd2h8l8/Zb7EtKJm3AREiH0OVXl8nFVub9c8NRYqk8TrRKqLaPm5MvfND6dRPa03ThtNQbt9qDZO72/fIAvrbOTiCQkYnaDTLSiccqpfhxsiJZ4+x2XEKypUamOKIoIj1JOrNKB0kvsnq8oXpFYqQRn7NQyvsXjSyWYJNJOi39cbPnv86+UxTFdkJRbrHRMNZNLlCjOok2wIAysKU0fBwuDlwbPuYqesGG/aNBsn7WavV6rXwEIaklMLAEHLnwqyZxTsMMNLXDFiozhxdMYQ2KtihQ3wcNtuG7+lv3G5WfrxBkETPQ4IEsqLTYJ0U841mwNK6EigWX8IDqwOqW7WAGGmSB6M1OSb4ogXp6Xf2HyTJhFkj6jZ6WfqDbIUL1msCeaLpmxmlimZD0/yvWBVpRwu8KwEE4jiyIlEiUhXiRVTJEkgpr9GA9sQP40i8zWiNu2nF8+KZJ21JK1TiyJ0oURElm2hh2vJ5bxGmQVEkoy0JI/Fat4YU6dVb8daSK9Sazb1zWL3R7lMqj3LK1WHCWcSIpiCpEIZgx4Ai0eX3DOxkXEjlIEDYeIvZluiXnCTK4JZ3G2SvgCeYTvWDDOmQk6jUbjqAVN/0upsR8jQ4IpyDZO8zzDOqKg6+eB2LSdU2KxIG6/8SLzLKNNxmofIeVK3yOhpo/0Q81xKb4ixy+ryyP00YqwIlCjEkBgFjsJgjjASkyD6bfx7OvoajIdzcLR9K+bi1HoNVN4dmcgL4PuL0EklAKNiyN3RF87yigrXfU0fYRpNrA+8Q4DLo/ZAt7v21gSPZX1brekemguPUut0sTtjZIx1L9aF1vsS1mptQutb6E0JB7OVbkCELalchtU/SF7aTyC/ITKKKNUa1caISkmaLaOcwQVSm9QasBLA5/7CIWmP6i4TNISJF0UUExSq5y+XqlBW06mTkGY29wsTtfSaOYcVfbtUybsCrr/SvEYP7F50O102t33Wipy9JlgChOfD+YzURxx787aCsQJJAzNbFnfNw0TCWcLBmOIiXY3ex+YHV2ulogsl9AMiWcF4DBKHgcCGKBcd05IApPJmmCVWBOgf8TPXrcvaoD5GrGYB003RB6Cio83GSztVm3msxeicv04uB5eTib3s8vhw3A8uRzNJvcPYWax02yJE9fh4WjBUOcykG0EiWNIuYHTl/08Ds773a4PuLI28aLP6tDGC+/44CyJvODeDtiNWrltIuNs2lWptEGr4cWAf+Sx2KtFGy+86YODsihoCvYjibYsC/MBTDlyg1gkEiQeB/1Gx+ttW8Fro+z2j/O88XbP/cR8cKomrlkTXIY9urLmSS7Liuz+mHydXd+ED5Ppd1eLR9PZ9Wh4H978OwrO3KSUU3YVnY0hJDFBq1nztPjTcPUMDVPbbKLl1NI440HX6LzKNEHP/7ysJBrSCnUYhiX4SqFREFjz4WXthbtu4ZXB1zk9hHxRfUvXlMfz0BJLQ2cmzNPo8eyKQpSkeO0uTtAlayDVetDqNaAg+JEv1aDd7nc9oOLjiFNvHarze1CIalzn47fCBi4sDtbqvKCy0kuS3czClOxuCSBTVBOCn7S9PsMa0cEaj3DK6LP7Zy7n8H44/ROK6OhuMp7dwe/p90zAIgdBf8nvqtu7Zrx2E1QM48nCzd+M2/127CeWo5YJYN14qdSSOwWqNC6uw7vz2WXBusvntNuCW2Pa/MdB5UxeQM1grq1NafYi4C1hOS5X0DixJhKCSM0qVs/yrVTYOybYL/DlAsCL1Bx01beQOV1YQwXLjEDpg3P2MUNuBCDwkc7hWgR6fV9A8B+g2QJ+pWBY0ReuMviI+UgHo+2UGrhXhO6dSqtx1t9XToHLzg9I67y7B6A/aZS6O1ku5lbNUyahJsroFUThotvs9GpcjOQaT+5H46+3w3A2/nY3e7iejoaXIZygCj7h6RL8lVcmJ79D1W4zV4o1dNz7jFo1t3MRcGP81fBmugeA3Edz9co2VXdZQ1Njgrq3WUpc5Ucwk05CrBs9XzGUMuxeqQSN6r/zwiG2OTyDApC9dcmKxPfhdDxzQ9bdcDz8fbfXNbvt/j5wOgon36YXh+CsMe6BH27uRrc345G3iTpsUdR2L80H00C/0erWgX0F8+wouJjX3dzZ7pxV8CWm5Oy97sledhn0TCzsevUpYgt4iswqXSw4RU5A+Q69Yn0nOrTUJKKLlFfeMCGnBJVaBDOTCWBGreatcgllIhWIcFfvspuQb3k7BLiBeggn/wMsmjgT\"\n          },\n          {\n            \"key\": \"dataproc-cluster-properties-file\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/f0ce26dc-87e9-40d0-a75c-ca6c0ae78cf4/cluster.properties\"\n          },\n          {\n            \"key\": \"dataproc-datanode-enabled\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"dataproc-option-run-init-actions-early\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"dataproc-protocol-spec\",\n            \"value\": \"EoQBCipkYXRhcHJvY2NvbnRyb2wtdXMtY2VudHJhbDEuZ29vZ2xlYXBpcy5jb20SKmRhdGFwcm9jY29udHJvbC11cy1jZW50cmFsMS5nb29nbGVhcGlzLmNvbSIqZGF0YXByb2Njb250cm9sLXVzLWNlbnRyYWwxLmdvb2dsZWFwaXMuY29t\"\n          },\n          {\n            \"key\": \"dataproc-role\",\n            \"value\": \"Worker\"\n          },\n          {\n            \"key\": \"node-group-roles\",\n            \"value\": \"PRIMARY_WORKER\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"test-deny-icmp-w-1\",\n      \"networkInterfaces\": [\n        {\n          \"accessConfigs\": [\n            {\n              \"kind\": \"compute#accessConfig\",\n              \"name\": \"External NAT\",\n              \"networkTier\": \"PREMIUM\",\n              \"type\": \"ONE_TO_ONE_NAT\"\n            }\n          ],\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/test-bad-network\",\n          \"networkIP\": \"10.128.0.3\",\n          \"nicType\": \"GVNIC\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-central1/subnetworks/test-bad-subnet\"\n        }\n      ],\n      \"satisfiesPzi\": true,\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-a/instances/test-deny-icmp-w-1\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"12340005-compute@developer.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/cloud-platform\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": true,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"TERMINATED\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"icmp-deny\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-a\"\n    }\n  ],\n  \"kind\": \"compute#instanceList\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-a/instances\"\n}\n"
  },
  {
    "path": "test-data/dataproc1/json-dumps/compute-instances-us-central1-b.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-dataproc1-aaaa/zones/us-central1-b/instances\",\n  \"items\": [\n    {\n      \"cpuPlatform\": \"Unknown CPU Platform\",\n      \"creationTimestamp\": \"2024-10-30T20:34:25.136-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"30\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            },\n            {\n              \"type\": \"SEV_LIVE_MIGRATABLE_V2\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/cloud-dataproc/global/licenses/dataproc\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-b/disks/test-best-practices-enabled-m\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"3152771036514042960\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"MyeLZ2zkVRM=\",\n      \"labels\": {\n        \"goog-dataproc-cluster-name\": \"test-best-practices-enabled\",\n        \"goog-dataproc-cluster-uuid\": \"30695901-ea88-41e7-9c97-bb55067a4540\",\n        \"goog-dataproc-location\": \"us-central1\"\n      },\n      \"lastStartTimestamp\": \"2024-10-30T20:34:43.346-07:00\",\n      \"lastStopTimestamp\": \"2024-10-30T23:19:37.166-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-b/machineTypes/e2-medium\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"dataproc-bucket\",\n            \"value\": \"dataproc-staging-us-central1-12340005-9v6173vh\"\n          },\n          {\n            \"key\": \"dataproc-cloud-logging-enabled\",\n            \"value\": \"false\"\n          },\n          {\n            \"key\": \"dataproc-cluster-configuration-directory\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/30695901-ea88-41e7-9c97-bb55067a4540/\"\n          },\n          {\n            \"key\": \"dataproc-cluster-name\",\n            \"value\": \"test-best-practices-enabled\"\n          },\n          {\n            \"key\": \"dataproc-cluster-uuid\",\n            \"value\": \"30695901-ea88-41e7-9c97-bb55067a4540\"\n          },\n          {\n            \"key\": \"dataproc-exclude-file-location\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/30695901-ea88-41e7-9c97-bb55067a4540/nodes_exclude.xml\"\n          },\n          {\n            \"key\": \"dataproc-include-file-location\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/30695901-ea88-41e7-9c97-bb55067a4540/nodes_include\"\n          },\n          {\n            \"key\": \"dataproc-initialization-script-count\",\n            \"value\": \"0\"\n          },\n          {\n            \"key\": \"dataproc-master\",\n            \"value\": \"test-best-practices-enabled-m\"\n          },\n          {\n            \"key\": \"dataproc-master-additional\",\n            \"value\": \"\"\n          },\n          {\n            \"key\": \"dataproc-region\",\n            \"value\": \"us-central1\"\n          },\n          {\n            \"key\": \"dataproc-temp-bucket\",\n            \"value\": \"dataproc-temp-us-central1-12340005-xslkmij6\"\n          },\n          {\n            \"key\": \"dataproc-worker-agent-runner-daemon-timeout\",\n            \"value\": \"60\"\n          },\n          {\n            \"key\": \"dataproc-worker-count\",\n            \"value\": \"2\"\n          },\n          {\n            \"key\": \"has-driver-pool\",\n            \"value\": \"false\"\n          },\n          {\n            \"key\": \"master-run-driver-location\",\n            \"value\": \"LOCAL\"\n          },\n          {\n            \"key\": \"dataproc-agent-output-directory\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/30695901-ea88-41e7-9c97-bb55067a4540/test-best-practices-enabled-m\"\n          },\n          {\n            \"key\": \"dataproc-cluster-properties\",\n            \"value\": \"ZIPPY:eJylWG1P4zgQ/s6vQNqvZ6tNaYFK+dCFcnAHLWrZu9sTUuUmbuvFLznbKdv99Td2ktIXh/IiJErJ88yMx49nxvlywXNjqT7OtMqotoyaoy9/0/R4mNjjVuM4anRbJ92odXx/+QBfopOjhGQkYXaFTLKgac6pfuyuiJZ4/R1XEKypUblOKEoIT3JOrNKx0nPsni8oXpBUqQx7dm4ZX+PxpRJMEmlH5T8u1vz3+VfK4pTOSM4tVjqlmsk5yhRnySqeEQbWlKaP3ZnBc4OnXCVP2LBfNG62TqLm6Wl0tgUQ1JKUWAIOXPhUkimnYIcbWuLKFRnDy6cphsRalShu4ofb8bL5m/+Nq8/oyBkETPLYJXMqLTYZ0U841WwJK6Eig2X8IDq2OqebWAGGmSB6NVGSr8ogXp5Xf2HyTJhFkj6jZ6WfqDbIUL1ksCeazpmxmlimZD0/KfSBFpRwu8CwEE4TixIlMiUhXiRVSpEkgprdGPdsQP40S8zaiNu2gl89KZN20JK1TiyZ0qURkli2hB2vJ1bxGmQVEkoy0FI4FYt0Zo6d1bAdaRK9yqzb1yVL3R4VMqj3LK1WHGWcSIpSCpEIZgx4Ai0eXnDBxmXEjlIGDYeIvZluiXnCTC4JZ6lfJXyBPMJ3LBjnzMTtRqNx0IKm/+XU2I+RIcEUZJvmRZ5hHUncCfNAbNpOKbFYELffeOY9y2TlWa0DpELpOyTUDJF+qCmuxFfm+GV1RYQhWhlWAmpUAgjMYidBEAdYSWk8+jaYfO1fDUf9ybg/+uvmoj8Omik9uzNQlEH3lyASSoHG5ZE7oK8NZVSVbvs0fYRpVrA+8Q4DLo9+Ae/3bSxJnqp69zrLZWeuVZ65rVEyhfJ3GPtSVWqLHHS+mdKQdzhW1QJA15bKdUz1Z+yl7wjyEwqjTHKtXWWEnMDROEwRVCi9QrkBJw18HiKUiv6g3rygJQi6LJ+Y5FY5db1SgdYcr01BmNtaH6draNQ7R1u79ikTdgG9f6F4ip/YNO60263Oey2VOfpMMKWJzwfzmSgOuHcnbQHaBBKGVjav75qGiYyzGYMhxCSbm70L9AeXqzki8zm0QhJYAThMsseuAAYo1x0TksFcsiRYZdbE6B/xs33aETXAYo1YTOPTzlkAU368yV5ldstkMXchKpeP3eve5XB4P7nsPfQGw8v+ZHj/MC4MNiNx5Lo7HCwY6Nz6/TaQNIWEGzh7/uexe37W6YSAC2uzIPqkDm2C8HYIzrIkCD7dALsxq7BNZOonXZVLG0eNIAb8o4DF01q0CcKbITjoioKiYDuyZM2yMBugqfuVaVeeEmpQKSMkHrtnjXbQ9bqW14bsdvgQLxh85zxMLCao7Sw2a4Lz2Pcts3lU6HVLkH8Mv06ub8YPw9F3V6P7o8l1v3c/vvm3D67hYlVQNqXuhxOSmfi85mH5p+HqGbqotn7M5dTS1NOgmbRfZZq4GX5eFRgNKYbyDBMUfKXQPwisf/8G98JdRnhh8HVBH0PuqL6lS8rT6dgSS8fOzLhIacCzqxVJluOlu02Fg9uvO81WsylqkC9VotlphbJYfmw4jepR236jThSF/O4VqFZ0ehbAFTO5wgZuMQ4WtTtrlK/IJNvMLIzO7uoAkkU1Sw+T1ndqWCPaS+wBTpU4fykt1Dy+743+hOravxsOJnfwe/Td61cUIGg7xQV2fQFNl26uSmFqmbmhnHG726XDxGoAMzGsG8+VmnOnQJWn5R15c2q7LFl3xfR2W3JrTJv/OKicyQuoH8x1uxH1bwfeEpbjcgX9FGsiIYjcLFL1LN9Khb1jgv0CXy4APMvNXrN9C5nTmTVUMG8EyiCcs48ZcpMBgY98Cncl0Ov7AoL/AM2W8CsFM4y+cJUhRCwmPZh4R9TAZWPsXrT4nhyE+eMTUhb9SZPc3dMqLYefMgklUSb+RIcRlYuo3a5x0ZdLPLzvD77e9saTwbe7ycP1qN+7HO86zXg+B3/VNcqpb1+068RVWh077r2nbpvbuB644f6qdzPaAUDqk6l6ZZe2N1lDf2OCujdcSlwVJ9ArJyPWDaSvGMoZdq9Z4sb2v4u6Iaocdk4a4si/ifE14ntvNJi44euuN+j9vtnpThrnu7hRfzz8NrrYx/quuAN+uLnr394M+sEO6rBlSdu8R+/NBWeNqFMHDpXL6CC4HOKrYr8BryAVZecFkH/9ZdAzsbDn208Rm8FTZBb5bMYpcvIp9ucV6xvBoTkMJ3SW8613TsjpQOUWwfBkYphcG41Ne1sXUyZygQh3xc7fjgKr28DDpXQf3zz6H1t9QEo=\"\n          },\n          {\n            \"key\": \"dataproc-cluster-properties-file\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/30695901-ea88-41e7-9c97-bb55067a4540/cluster.properties\"\n          },\n          {\n            \"key\": \"dataproc-datanode-enabled\",\n            \"value\": \"false\"\n          },\n          {\n            \"key\": \"dataproc-option-run-init-actions-early\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"dataproc-protocol-spec\",\n            \"value\": \"EoQBCipkYXRhcHJvY2NvbnRyb2wtdXMtY2VudHJhbDEuZ29vZ2xlYXBpcy5jb20SKmRhdGFwcm9jY29udHJvbC11cy1jZW50cmFsMS5nb29nbGVhcGlzLmNvbSIqZGF0YXByb2Njb250cm9sLXVzLWNlbnRyYWwxLmdvb2dsZWFwaXMuY29t\"\n          },\n          {\n            \"key\": \"dataproc-role\",\n            \"value\": \"Master\"\n          },\n          {\n            \"key\": \"node-group-roles\",\n            \"value\": \"MASTER\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"test-best-practices-enabled-m\",\n      \"networkInterfaces\": [\n        {\n          \"accessConfigs\": [\n            {\n              \"kind\": \"compute#accessConfig\",\n              \"name\": \"External NAT\",\n              \"networkTier\": \"PREMIUM\",\n              \"type\": \"ONE_TO_ONE_NAT\"\n            }\n          ],\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"networkIP\": \"10.128.0.13\",\n          \"nicType\": \"GVNIC\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-central1/subnetworks/default\"\n        }\n      ],\n      \"satisfiesPzi\": true,\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-b/instances/test-best-practices-enabled-m\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"saworker@gcpdiag-dataproc1-aaaa.iam.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/cloud-platform\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": true,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"TERMINATED\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\"\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-b\"\n    },\n    {\n      \"cpuPlatform\": \"Unknown CPU Platform\",\n      \"creationTimestamp\": \"2024-10-30T20:34:23.942-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"30\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            },\n            {\n              \"type\": \"SEV_LIVE_MIGRATABLE_V2\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/cloud-dataproc/global/licenses/dataproc\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-b/disks/test-best-practices-enabled-w-0\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"2717493207919182928\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"MyeLZ2zkVRM=\",\n      \"labels\": {\n        \"goog-dataproc-cluster-name\": \"test-best-practices-enabled\",\n        \"goog-dataproc-cluster-uuid\": \"30695901-ea88-41e7-9c97-bb55067a4540\",\n        \"goog-dataproc-location\": \"us-central1\"\n      },\n      \"lastStartTimestamp\": \"2024-10-30T20:34:38.033-07:00\",\n      \"lastStopTimestamp\": \"2024-10-30T23:19:37.334-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-b/machineTypes/e2-medium\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"dataproc-bucket\",\n            \"value\": \"dataproc-staging-us-central1-12340005-9v6173vh\"\n          },\n          {\n            \"key\": \"dataproc-cloud-logging-enabled\",\n            \"value\": \"false\"\n          },\n          {\n            \"key\": \"dataproc-cluster-configuration-directory\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/30695901-ea88-41e7-9c97-bb55067a4540/\"\n          },\n          {\n            \"key\": \"dataproc-cluster-name\",\n            \"value\": \"test-best-practices-enabled\"\n          },\n          {\n            \"key\": \"dataproc-cluster-uuid\",\n            \"value\": \"30695901-ea88-41e7-9c97-bb55067a4540\"\n          },\n          {\n            \"key\": \"dataproc-exclude-file-location\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/30695901-ea88-41e7-9c97-bb55067a4540/nodes_exclude.xml\"\n          },\n          {\n            \"key\": \"dataproc-include-file-location\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/30695901-ea88-41e7-9c97-bb55067a4540/nodes_include\"\n          },\n          {\n            \"key\": \"dataproc-initialization-script-count\",\n            \"value\": \"0\"\n          },\n          {\n            \"key\": \"dataproc-master\",\n            \"value\": \"test-best-practices-enabled-m\"\n          },\n          {\n            \"key\": \"dataproc-master-additional\",\n            \"value\": \"\"\n          },\n          {\n            \"key\": \"dataproc-region\",\n            \"value\": \"us-central1\"\n          },\n          {\n            \"key\": \"dataproc-temp-bucket\",\n            \"value\": \"dataproc-temp-us-central1-12340005-xslkmij6\"\n          },\n          {\n            \"key\": \"dataproc-worker-agent-runner-daemon-timeout\",\n            \"value\": \"60\"\n          },\n          {\n            \"key\": \"dataproc-worker-count\",\n            \"value\": \"2\"\n          },\n          {\n            \"key\": \"has-driver-pool\",\n            \"value\": \"false\"\n          },\n          {\n            \"key\": \"master-run-driver-location\",\n            \"value\": \"LOCAL\"\n          },\n          {\n            \"key\": \"dataproc-agent-output-directory\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/30695901-ea88-41e7-9c97-bb55067a4540/test-best-practices-enabled-w-0\"\n          },\n          {\n            \"key\": \"dataproc-cluster-properties\",\n            \"value\": \"ZIPPY:eJylWG1P4zgQ/s6vQNqvZ6tNaYFK+dCFcnAHLWrZu9sTUuUmbuvFLznbKdv99Td2ktIXh/IiJErJ88yMx49nxvlywXNjqT7OtMqotoyaoy9/0/R4mNjjVuM4anRbJ92odXx/+QBfopOjhGQkYXaFTLKgac6pfuyuiJZ4/R1XEKypUblOKEoIT3JOrNKx0nPsni8oXpBUqQx7dm4ZX+PxpRJMEmlH5T8u1vz3+VfK4pTOSM4tVjqlmsk5yhRnySqeEQbWlKaP3ZnBc4OnXCVP2LBfNG62TqLm6Wl0tgUQ1JKUWAIOXPhUkimnYIcbWuLKFRnDy6cphsRalShu4ofb8bL5m/+Nq8/oyBkETPLYJXMqLTYZ0U841WwJK6Eig2X8IDq2OqebWAGGmSB6NVGSr8ogXp5Xf2HyTJhFkj6jZ6WfqDbIUL1ksCeazpmxmlimZD0/KfSBFpRwu8CwEE4TixIlMiUhXiRVSpEkgprdGPdsQP40S8zaiNu2gl89KZN20JK1TiyZ0qURkli2hB2vJ1bxGmQVEkoy0FI4FYt0Zo6d1bAdaRK9yqzb1yVL3R4VMqj3LK1WHGWcSIpSCpEIZgx4Ai0eXnDBxmXEjlIGDYeIvZluiXnCTC4JZ6lfJXyBPMJ3LBjnzMTtRqNx0IKm/+XU2I+RIcEUZJvmRZ5hHUncCfNAbNpOKbFYELffeOY9y2TlWa0DpELpOyTUDJF+qCmuxFfm+GV1RYQhWhlWAmpUAgjMYidBEAdYSWk8+jaYfO1fDUf9ybg/+uvmoj8Omik9uzNQlEH3lyASSoHG5ZE7oK8NZVSVbvs0fYRpVrA+8Q4DLo9+Ae/3bSxJnqp69zrLZWeuVZ65rVEyhfJ3GPtSVWqLHHS+mdKQdzhW1QJA15bKdUz1Z+yl7wjyEwqjTHKtXWWEnMDROEwRVCi9QrkBJw18HiKUiv6g3rygJQi6LJ+Y5FY5db1SgdYcr01BmNtaH6draNQ7R1u79ikTdgG9f6F4ip/YNO60263Oey2VOfpMMKWJzwfzmSgOuHcnbQHaBBKGVjav75qGiYyzGYMhxCSbm70L9AeXqzki8zm0QhJYAThMsseuAAYo1x0TksFcsiRYZdbE6B/xs33aETXAYo1YTOPTzlkAU368yV5ldstkMXchKpeP3eve5XB4P7nsPfQGw8v+ZHj/MC4MNiNx5Lo7HCwY6Nz6/TaQNIWEGzh7/uexe37W6YSAC2uzIPqkDm2C8HYIzrIkCD7dALsxq7BNZOonXZVLG0eNIAb8o4DF01q0CcKbITjoioKiYDuyZM2yMBugqfuVaVeeEmpQKSMkHrtnjXbQ9bqW14bsdvgQLxh85zxMLCao7Sw2a4Lz2Pcts3lU6HVLkH8Mv06ub8YPw9F3V6P7o8l1v3c/vvm3D67hYlVQNqXuhxOSmfi85mH5p+HqGbqotn7M5dTS1NOgmbRfZZq4GX5eFRgNKYbyDBMUfKXQPwisf/8G98JdRnhh8HVBH0PuqL6lS8rT6dgSS8fOzLhIacCzqxVJluOlu02Fg9uvO81WsylqkC9VotlphbJYfmw4jepR236jThSF/O4VqFZ0ehbAFTO5wgZuMQ4WtTtrlK/IJNvMLIzO7uoAkkU1Sw+T1ndqWCPaS+wBTpU4fykt1Dy+743+hOravxsOJnfwe/Td61cUIGg7xQV2fQFNl26uSmFqmbmhnHG726XDxGoAMzGsG8+VmnOnQJWn5R15c2q7LFl3xfR2W3JrTJv/OKicyQuoH8x1uxH1bwfeEpbjcgX9FGsiIYjcLFL1LN9Khb1jgv0CXy4APMvNXrN9C5nTmTVUMG8EyiCcs48ZcpMBgY98Cncl0Ov7AoL/AM2W8CsFM4y+cJUhRCwmPZh4R9TAZWPsXrT4nhyE+eMTUhb9SZPc3dMqLYefMgklUSb+RIcRlYuo3a5x0ZdLPLzvD77e9saTwbe7ycP1qN+7HO86zXg+B3/VNcqpb1+068RVWh077r2nbpvbuB644f6qdzPaAUDqk6l6ZZe2N1lDf2OCujdcSlwVJ9ArJyPWDaSvGMoZdq9Z4sb2v4u6Iaocdk4a4si/ifE14ntvNJi44euuN+j9vtnpThrnu7hRfzz8NrrYx/quuAN+uLnr394M+sEO6rBlSdu8R+/NBWeNqFMHDpXL6CC4HOKrYr8BryAVZecFkH/9ZdAzsbDn208Rm8FTZBb5bMYpcvIp9ucV6xvBoTkMJ3SW8613TsjpQOUWwfBkYphcG41Ne1sXUyZygQh3xc7fjgKr28DDpXQf3zz6H1t9QEo=\"\n          },\n          {\n            \"key\": \"dataproc-cluster-properties-file\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/30695901-ea88-41e7-9c97-bb55067a4540/cluster.properties\"\n          },\n          {\n            \"key\": \"dataproc-datanode-enabled\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"dataproc-option-run-init-actions-early\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"dataproc-protocol-spec\",\n            \"value\": \"EoQBCipkYXRhcHJvY2NvbnRyb2wtdXMtY2VudHJhbDEuZ29vZ2xlYXBpcy5jb20SKmRhdGFwcm9jY29udHJvbC11cy1jZW50cmFsMS5nb29nbGVhcGlzLmNvbSIqZGF0YXByb2Njb250cm9sLXVzLWNlbnRyYWwxLmdvb2dsZWFwaXMuY29t\"\n          },\n          {\n            \"key\": \"dataproc-role\",\n            \"value\": \"Worker\"\n          },\n          {\n            \"key\": \"node-group-roles\",\n            \"value\": \"PRIMARY_WORKER\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"test-best-practices-enabled-w-0\",\n      \"networkInterfaces\": [\n        {\n          \"accessConfigs\": [\n            {\n              \"kind\": \"compute#accessConfig\",\n              \"name\": \"External NAT\",\n              \"networkTier\": \"PREMIUM\",\n              \"type\": \"ONE_TO_ONE_NAT\"\n            }\n          ],\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"networkIP\": \"10.128.0.11\",\n          \"nicType\": \"GVNIC\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-central1/subnetworks/default\"\n        }\n      ],\n      \"satisfiesPzi\": true,\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-b/instances/test-best-practices-enabled-w-0\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"saworker@gcpdiag-dataproc1-aaaa.iam.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/cloud-platform\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": true,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"TERMINATED\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\"\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-b\"\n    },\n    {\n      \"cpuPlatform\": \"Unknown CPU Platform\",\n      \"creationTimestamp\": \"2024-10-30T20:34:24.953-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"30\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            },\n            {\n              \"type\": \"SEV_LIVE_MIGRATABLE_V2\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/cloud-dataproc/global/licenses/dataproc\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-b/disks/test-best-practices-enabled-w-1\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"1874862079468323920\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"MyeLZ2zkVRM=\",\n      \"labels\": {\n        \"goog-dataproc-cluster-name\": \"test-best-practices-enabled\",\n        \"goog-dataproc-cluster-uuid\": \"30695901-ea88-41e7-9c97-bb55067a4540\",\n        \"goog-dataproc-location\": \"us-central1\"\n      },\n      \"lastStartTimestamp\": \"2024-10-30T20:34:40.297-07:00\",\n      \"lastStopTimestamp\": \"2024-10-30T23:19:52.766-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-b/machineTypes/e2-medium\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"dataproc-bucket\",\n            \"value\": \"dataproc-staging-us-central1-12340005-9v6173vh\"\n          },\n          {\n            \"key\": \"dataproc-cloud-logging-enabled\",\n            \"value\": \"false\"\n          },\n          {\n            \"key\": \"dataproc-cluster-configuration-directory\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/30695901-ea88-41e7-9c97-bb55067a4540/\"\n          },\n          {\n            \"key\": \"dataproc-cluster-name\",\n            \"value\": \"test-best-practices-enabled\"\n          },\n          {\n            \"key\": \"dataproc-cluster-uuid\",\n            \"value\": \"30695901-ea88-41e7-9c97-bb55067a4540\"\n          },\n          {\n            \"key\": \"dataproc-exclude-file-location\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/30695901-ea88-41e7-9c97-bb55067a4540/nodes_exclude.xml\"\n          },\n          {\n            \"key\": \"dataproc-include-file-location\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/30695901-ea88-41e7-9c97-bb55067a4540/nodes_include\"\n          },\n          {\n            \"key\": \"dataproc-initialization-script-count\",\n            \"value\": \"0\"\n          },\n          {\n            \"key\": \"dataproc-master\",\n            \"value\": \"test-best-practices-enabled-m\"\n          },\n          {\n            \"key\": \"dataproc-master-additional\",\n            \"value\": \"\"\n          },\n          {\n            \"key\": \"dataproc-region\",\n            \"value\": \"us-central1\"\n          },\n          {\n            \"key\": \"dataproc-temp-bucket\",\n            \"value\": \"dataproc-temp-us-central1-12340005-xslkmij6\"\n          },\n          {\n            \"key\": \"dataproc-worker-agent-runner-daemon-timeout\",\n            \"value\": \"60\"\n          },\n          {\n            \"key\": \"dataproc-worker-count\",\n            \"value\": \"2\"\n          },\n          {\n            \"key\": \"has-driver-pool\",\n            \"value\": \"false\"\n          },\n          {\n            \"key\": \"master-run-driver-location\",\n            \"value\": \"LOCAL\"\n          },\n          {\n            \"key\": \"dataproc-agent-output-directory\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/30695901-ea88-41e7-9c97-bb55067a4540/test-best-practices-enabled-w-1\"\n          },\n          {\n            \"key\": \"dataproc-cluster-properties\",\n            \"value\": \"ZIPPY:eJylWG1P4zgQ/s6vQNqvZ6tNaYFK+dCFcnAHLWrZu9sTUuUmbuvFLznbKdv99Td2ktIXh/IiJErJ88yMx49nxvlywXNjqT7OtMqotoyaoy9/0/R4mNjjVuM4anRbJ92odXx/+QBfopOjhGQkYXaFTLKgac6pfuyuiJZ4/R1XEKypUblOKEoIT3JOrNKx0nPsni8oXpBUqQx7dm4ZX+PxpRJMEmlH5T8u1vz3+VfK4pTOSM4tVjqlmsk5yhRnySqeEQbWlKaP3ZnBc4OnXCVP2LBfNG62TqLm6Wl0tgUQ1JKUWAIOXPhUkimnYIcbWuLKFRnDy6cphsRalShu4ofb8bL5m/+Nq8/oyBkETPLYJXMqLTYZ0U841WwJK6Eig2X8IDq2OqebWAGGmSB6NVGSr8ogXp5Xf2HyTJhFkj6jZ6WfqDbIUL1ksCeazpmxmlimZD0/KfSBFpRwu8CwEE4TixIlMiUhXiRVSpEkgprdGPdsQP40S8zaiNu2gl89KZN20JK1TiyZ0qURkli2hB2vJ1bxGmQVEkoy0FI4FYt0Zo6d1bAdaRK9yqzb1yVL3R4VMqj3LK1WHGWcSIpSCpEIZgx4Ai0eXnDBxmXEjlIGDYeIvZluiXnCTC4JZ6lfJXyBPMJ3LBjnzMTtRqNx0IKm/+XU2I+RIcEUZJvmRZ5hHUncCfNAbNpOKbFYELffeOY9y2TlWa0DpELpOyTUDJF+qCmuxFfm+GV1RYQhWhlWAmpUAgjMYidBEAdYSWk8+jaYfO1fDUf9ybg/+uvmoj8Omik9uzNQlEH3lyASSoHG5ZE7oK8NZVSVbvs0fYRpVrA+8Q4DLo9+Ae/3bSxJnqp69zrLZWeuVZ65rVEyhfJ3GPtSVWqLHHS+mdKQdzhW1QJA15bKdUz1Z+yl7wjyEwqjTHKtXWWEnMDROEwRVCi9QrkBJw18HiKUiv6g3rygJQi6LJ+Y5FY5db1SgdYcr01BmNtaH6draNQ7R1u79ikTdgG9f6F4ip/YNO60263Oey2VOfpMMKWJzwfzmSgOuHcnbQHaBBKGVjav75qGiYyzGYMhxCSbm70L9AeXqzki8zm0QhJYAThMsseuAAYo1x0TksFcsiRYZdbE6B/xs33aETXAYo1YTOPTzlkAU368yV5ldstkMXchKpeP3eve5XB4P7nsPfQGw8v+ZHj/MC4MNiNx5Lo7HCwY6Nz6/TaQNIWEGzh7/uexe37W6YSAC2uzIPqkDm2C8HYIzrIkCD7dALsxq7BNZOonXZVLG0eNIAb8o4DF01q0CcKbITjoioKiYDuyZM2yMBugqfuVaVeeEmpQKSMkHrtnjXbQ9bqW14bsdvgQLxh85zxMLCao7Sw2a4Lz2Pcts3lU6HVLkH8Mv06ub8YPw9F3V6P7o8l1v3c/vvm3D67hYlVQNqXuhxOSmfi85mH5p+HqGbqotn7M5dTS1NOgmbRfZZq4GX5eFRgNKYbyDBMUfKXQPwisf/8G98JdRnhh8HVBH0PuqL6lS8rT6dgSS8fOzLhIacCzqxVJluOlu02Fg9uvO81WsylqkC9VotlphbJYfmw4jepR236jThSF/O4VqFZ0ehbAFTO5wgZuMQ4WtTtrlK/IJNvMLIzO7uoAkkU1Sw+T1ndqWCPaS+wBTpU4fykt1Dy+743+hOravxsOJnfwe/Td61cUIGg7xQV2fQFNl26uSmFqmbmhnHG726XDxGoAMzGsG8+VmnOnQJWn5R15c2q7LFl3xfR2W3JrTJv/OKicyQuoH8x1uxH1bwfeEpbjcgX9FGsiIYjcLFL1LN9Khb1jgv0CXy4APMvNXrN9C5nTmTVUMG8EyiCcs48ZcpMBgY98Cncl0Ov7AoL/AM2W8CsFM4y+cJUhRCwmPZh4R9TAZWPsXrT4nhyE+eMTUhb9SZPc3dMqLYefMgklUSb+RIcRlYuo3a5x0ZdLPLzvD77e9saTwbe7ycP1qN+7HO86zXg+B3/VNcqpb1+068RVWh077r2nbpvbuB644f6qdzPaAUDqk6l6ZZe2N1lDf2OCujdcSlwVJ9ArJyPWDaSvGMoZdq9Z4sb2v4u6Iaocdk4a4si/ifE14ntvNJi44euuN+j9vtnpThrnu7hRfzz8NrrYx/quuAN+uLnr394M+sEO6rBlSdu8R+/NBWeNqFMHDpXL6CC4HOKrYr8BryAVZecFkH/9ZdAzsbDn208Rm8FTZBb5bMYpcvIp9ucV6xvBoTkMJ3SW8613TsjpQOUWwfBkYphcG41Ne1sXUyZygQh3xc7fjgKr28DDpXQf3zz6H1t9QEo=\"\n          },\n          {\n            \"key\": \"dataproc-cluster-properties-file\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/30695901-ea88-41e7-9c97-bb55067a4540/cluster.properties\"\n          },\n          {\n            \"key\": \"dataproc-datanode-enabled\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"dataproc-option-run-init-actions-early\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"dataproc-protocol-spec\",\n            \"value\": \"EoQBCipkYXRhcHJvY2NvbnRyb2wtdXMtY2VudHJhbDEuZ29vZ2xlYXBpcy5jb20SKmRhdGFwcm9jY29udHJvbC11cy1jZW50cmFsMS5nb29nbGVhcGlzLmNvbSIqZGF0YXByb2Njb250cm9sLXVzLWNlbnRyYWwxLmdvb2dsZWFwaXMuY29t\"\n          },\n          {\n            \"key\": \"dataproc-role\",\n            \"value\": \"Worker\"\n          },\n          {\n            \"key\": \"node-group-roles\",\n            \"value\": \"PRIMARY_WORKER\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"test-best-practices-enabled-w-1\",\n      \"networkInterfaces\": [\n        {\n          \"accessConfigs\": [\n            {\n              \"kind\": \"compute#accessConfig\",\n              \"name\": \"External NAT\",\n              \"networkTier\": \"PREMIUM\",\n              \"type\": \"ONE_TO_ONE_NAT\"\n            }\n          ],\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"networkIP\": \"10.128.0.12\",\n          \"nicType\": \"GVNIC\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-central1/subnetworks/default\"\n        }\n      ],\n      \"satisfiesPzi\": true,\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-b/instances/test-best-practices-enabled-w-1\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"saworker@gcpdiag-dataproc1-aaaa.iam.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/cloud-platform\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": true,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"TERMINATED\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\"\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-b\"\n    }\n  ],\n  \"kind\": \"compute#instanceList\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-b/instances\"\n}\n"
  },
  {
    "path": "test-data/dataproc1/json-dumps/compute-instances-us-central1-c.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-dataproc1-aaaa/zones/us-central1-c/instances\",\n  \"kind\": \"compute#instanceList\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-c/instances\"\n}\n"
  },
  {
    "path": "test-data/dataproc1/json-dumps/compute-instances-us-central1-f.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f/instances\",\n  \"items\": [\n    {\n      \"cpuPlatform\": \"Unknown CPU Platform\",\n      \"creationTimestamp\": \"2024-10-30T20:32:54.062-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"30\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            },\n            {\n              \"type\": \"SEV_LIVE_MIGRATABLE_V2\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/cloud-dataproc/global/licenses/dataproc\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f/disks/good-m\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"7985437924094067850\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"i07p_VesMMc=\",\n      \"labels\": {\n        \"goog-dataproc-autozone\": \"enabled\",\n        \"goog-dataproc-cluster-name\": \"good\",\n        \"goog-dataproc-cluster-uuid\": \"ae0a9260-f4a1-49ad-9593-8451a2536e59\",\n        \"goog-dataproc-location\": \"us-central1\"\n      },\n      \"lastStartTimestamp\": \"2024-10-30T20:33:06.277-07:00\",\n      \"lastStopTimestamp\": \"2024-10-30T23:19:32.290-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f/machineTypes/e2-medium\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"dataproc-bucket\",\n            \"value\": \"dataproc-staging-us-central1-12340005-9v6173vh\"\n          },\n          {\n            \"key\": \"dataproc-cloud-logging-enabled\",\n            \"value\": \"false\"\n          },\n          {\n            \"key\": \"dataproc-cluster-configuration-directory\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/ae0a9260-f4a1-49ad-9593-8451a2536e59/\"\n          },\n          {\n            \"key\": \"dataproc-cluster-name\",\n            \"value\": \"good\"\n          },\n          {\n            \"key\": \"dataproc-cluster-uuid\",\n            \"value\": \"ae0a9260-f4a1-49ad-9593-8451a2536e59\"\n          },\n          {\n            \"key\": \"dataproc-exclude-file-location\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/ae0a9260-f4a1-49ad-9593-8451a2536e59/nodes_exclude.xml\"\n          },\n          {\n            \"key\": \"dataproc-include-file-location\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/ae0a9260-f4a1-49ad-9593-8451a2536e59/nodes_include\"\n          },\n          {\n            \"key\": \"dataproc-initialization-script-count\",\n            \"value\": \"0\"\n          },\n          {\n            \"key\": \"dataproc-master\",\n            \"value\": \"good-m\"\n          },\n          {\n            \"key\": \"dataproc-master-additional\",\n            \"value\": \"\"\n          },\n          {\n            \"key\": \"dataproc-region\",\n            \"value\": \"us-central1\"\n          },\n          {\n            \"key\": \"dataproc-temp-bucket\",\n            \"value\": \"dataproc-temp-us-central1-12340005-xslkmij6\"\n          },\n          {\n            \"key\": \"dataproc-worker-agent-runner-daemon-timeout\",\n            \"value\": \"60\"\n          },\n          {\n            \"key\": \"dataproc-worker-count\",\n            \"value\": \"2\"\n          },\n          {\n            \"key\": \"has-driver-pool\",\n            \"value\": \"false\"\n          },\n          {\n            \"key\": \"master-run-driver-location\",\n            \"value\": \"LOCAL\"\n          },\n          {\n            \"key\": \"dataproc-agent-output-directory\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/ae0a9260-f4a1-49ad-9593-8451a2536e59/good-m\"\n          },\n          {\n            \"key\": \"dataproc-cluster-properties\",\n            \"value\": \"ZIPPY:eJylWG1v4jgQ/t5fUWm/ni0IhbZI+cC29Nq7FirSvbs9VUImMeCtHedshy7762/sJDSAU/qiSqU0zzMzHj+eGefLBc+1oeo4UzKjyjCqj778TZPjcWyOO63joNXvBP1ucHx/+QBfgpOjmGQkZmaNdLykSc6peuyviUrx5juuIFhRLXMVUxQTHuecGKlCqRbYPl9SvCSJlBl27NwwvsHjSylYSlIzKf9xseG/z7+UBid0TnJusFQJVSxdoExyFq/DOWFgTSr62J9rvNB4xmX8hDX7RcN25yRon54GZ1sAQQ1JiCHgwIZPUzLjFOxwTUtcuSKtefk0wZBYI2PJdfhwG63av7nfuPoMjqxBwMSPfbKgqcE6I+oJJ4qtYCVUZLCMH0SFRuW0jhVgmAmi1lOZ8nUZxMvz6i9MngkzKKXP6FmqJ6o00lStGOyJogumjSKGybSZHxf6QEtKuFliWAinsUGxFJlMIV6UyoSilAiqd2PcswH5UyzWGyN22wp+9aRM2kFLxlixZFKVRkhs2Ap2vJlYxauRkUjIlIGW/KlYJnN9bK367aQ6VuvM2H1dscTuUSGDZs+pUZKjjJOUooRCJIJpDZ5Ai4cXXLBxGbGllEHDIWJvphuinzBLV4SzxK0SvkAe4TsWjHOmw26r1TpoQdH/cqrNx8iQYAqyTfIiz7COOOz5eSA2ZWaUGCyI3W88d57TeO1YnQOkQuk7JNT2kX7IGa7EV+b4ZXVFhD5aGVYMapQCCMxgK0EQB1hJaDj5Npp+HV6NJ8NpNJz8dXMxjLxmSs/2DBRl0P4lSAqlQOHyyB3QV00ZVaXbPk0fYeo1rE+8w4DNo1vA+31rQ+Knqt7VS6qHZtOzUDLP7N7INIH61+hig30pK412ofXNpYLEw7mqVgDCNjTdBNV8yF4ajyA/oTKmca6ULY2QFDgbhymCCqnWKNfgpIXPfYRS0h8UnFN0Coou6ycmuZFWXq+UoA3HiVMQZvfWxWk7GnXO0da2fcqEWULzX0qe4Cc2C3vdbqf3Xktljj4TTGni88F8JooD7u1RW4I2gYShly2a26ZmIuNszmAK0XF9s3eB7uRyuUBksYBeSDwrAIdx9tgXwADl2mNCMhhMVgTLzOgQ/SN+dk97ogFYrBGLWXjaO/Ngyo832avMbpksBi9E09Vj/3pwOR7fTy8HD4PR+HI4Hd8/RIXBdiCObHuHgwUTnV2/2waSJJBwDWfP/Tz2z896PR9waUzmRZ80obUX3vXBWRZ7wac1sJ2zCtskTdyoK/PUhEHLiwH/yGPxtBGtvfC2Dw66oqAo2I4s3rAWUiZIPPbPWl2vj03RbozNbuUhnjfK3rmfWMxK2+lqNwTnsA3raR8VCtyS2B/jr9Prm+hhPPluq+5wMr0eDu6jm3+H4APuSgWlLl43b5BMh+cND8s/NZfP0BiVcZMrp4YmjgbtofsqU4dt//OqZCjIJRRcGIrgK4WOQGCh+5eyF+4qwEuNrwt6BEmi6pauKE9mkSGGRtZMVOTO49me/jjL8cpekPzB7VeSdqfdFg3Il3Pf7nV8WSw/ak6DZtS236AXBD6/eyWnE5yeeXDFmC2xhouJhQXd3gblaizJ6pmFadjeBkCbqGHpftLmmgxrRHuJPcCpEufumYWao/vB5E+ol8O78Wh6B78n351+RQGCRlLcSTd3ymRlJ6UE5pC5nbMZN7t910+sRiodwroxnK4FtwqUeVJee+tz2GXJuivmsduS22Ba/8dB5Sy9gELBbP+aUHfhf0tYlgt3f+jKiqQQRK6XiXxO30qFvWOC/QJfNgA8z/Ve+3wLmdO50VQwZwTqHZyzjxmyvZ7ARz6D6w/o9X0BwX+AZkr4lYSpRF3YyuAjFrMbzLATquH+ENl3J67LemHu+PiURX/SOLdXr0rL/qcshZKYxu5E+xGVi6DbbXAxTFd4fD8cfb0dRNPRt7vpw/VkOLiMdp1mPF+Av+pmZNW3L9pN4iqtRpZ776jb5moDvx3XrwY3kx0ApD6eyVd2aXuTFTQyJqh9aSXFVXECnXIyYuyI+YqhnGH75iRsbf+7qBuiymHvpCWO3MsVVyO+DyajqR2n7gajwe/1TnfSOt/FTYbR+NvkYh/ruuIO+OHmbnh7Mxp6O6jFliWtfjXeGwDOWkGvCewrl8FBcDmWV8W+Bq8gFWXnnY57o6XRMzGw59tPEZvDU6SX+XzOKbLyKfbnFeu14NBCkZjOc771GglZHcjcIJiSdAizaKtVt7d11WQiF4hwW+zcfcezuhoerpn7+PbR/3KYLus=\"\n          },\n          {\n            \"key\": \"dataproc-cluster-properties-file\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/ae0a9260-f4a1-49ad-9593-8451a2536e59/cluster.properties\"\n          },\n          {\n            \"key\": \"dataproc-datanode-enabled\",\n            \"value\": \"false\"\n          },\n          {\n            \"key\": \"dataproc-option-run-init-actions-early\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"dataproc-protocol-spec\",\n            \"value\": \"EoQBCipkYXRhcHJvY2NvbnRyb2wtdXMtY2VudHJhbDEuZ29vZ2xlYXBpcy5jb20SKmRhdGFwcm9jY29udHJvbC11cy1jZW50cmFsMS5nb29nbGVhcGlzLmNvbSIqZGF0YXByb2Njb250cm9sLXVzLWNlbnRyYWwxLmdvb2dsZWFwaXMuY29t\"\n          },\n          {\n            \"key\": \"dataproc-role\",\n            \"value\": \"Master\"\n          },\n          {\n            \"key\": \"node-group-roles\",\n            \"value\": \"MASTER\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"good-m\",\n      \"networkInterfaces\": [\n        {\n          \"accessConfigs\": [\n            {\n              \"kind\": \"compute#accessConfig\",\n              \"name\": \"External NAT\",\n              \"networkTier\": \"PREMIUM\",\n              \"type\": \"ONE_TO_ONE_NAT\"\n            }\n          ],\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"networkIP\": \"10.128.0.7\",\n          \"nicType\": \"GVNIC\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-central1/subnetworks/default\"\n        }\n      ],\n      \"satisfiesPzi\": false,\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f/instances/good-m\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"12340005-compute@developer.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/cloud-platform\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": true,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"TERMINATED\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\"\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f\"\n    },\n    {\n      \"cpuPlatform\": \"Unknown CPU Platform\",\n      \"creationTimestamp\": \"2024-10-30T20:32:54.823-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"30\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            },\n            {\n              \"type\": \"SEV_LIVE_MIGRATABLE_V2\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/cloud-dataproc/global/licenses/dataproc\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f/disks/good-w-0\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"4718619462986581130\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"i07p_VesMMc=\",\n      \"labels\": {\n        \"goog-dataproc-autozone\": \"enabled\",\n        \"goog-dataproc-cluster-name\": \"good\",\n        \"goog-dataproc-cluster-uuid\": \"ae0a9260-f4a1-49ad-9593-8451a2536e59\",\n        \"goog-dataproc-location\": \"us-central1\"\n      },\n      \"lastStartTimestamp\": \"2024-10-30T20:33:06.358-07:00\",\n      \"lastStopTimestamp\": \"2024-10-30T23:19:27.106-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f/machineTypes/e2-medium\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"dataproc-bucket\",\n            \"value\": \"dataproc-staging-us-central1-12340005-9v6173vh\"\n          },\n          {\n            \"key\": \"dataproc-cloud-logging-enabled\",\n            \"value\": \"false\"\n          },\n          {\n            \"key\": \"dataproc-cluster-configuration-directory\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/ae0a9260-f4a1-49ad-9593-8451a2536e59/\"\n          },\n          {\n            \"key\": \"dataproc-cluster-name\",\n            \"value\": \"good\"\n          },\n          {\n            \"key\": \"dataproc-cluster-uuid\",\n            \"value\": \"ae0a9260-f4a1-49ad-9593-8451a2536e59\"\n          },\n          {\n            \"key\": \"dataproc-exclude-file-location\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/ae0a9260-f4a1-49ad-9593-8451a2536e59/nodes_exclude.xml\"\n          },\n          {\n            \"key\": \"dataproc-include-file-location\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/ae0a9260-f4a1-49ad-9593-8451a2536e59/nodes_include\"\n          },\n          {\n            \"key\": \"dataproc-initialization-script-count\",\n            \"value\": \"0\"\n          },\n          {\n            \"key\": \"dataproc-master\",\n            \"value\": \"good-m\"\n          },\n          {\n            \"key\": \"dataproc-master-additional\",\n            \"value\": \"\"\n          },\n          {\n            \"key\": \"dataproc-region\",\n            \"value\": \"us-central1\"\n          },\n          {\n            \"key\": \"dataproc-temp-bucket\",\n            \"value\": \"dataproc-temp-us-central1-12340005-xslkmij6\"\n          },\n          {\n            \"key\": \"dataproc-worker-agent-runner-daemon-timeout\",\n            \"value\": \"60\"\n          },\n          {\n            \"key\": \"dataproc-worker-count\",\n            \"value\": \"2\"\n          },\n          {\n            \"key\": \"has-driver-pool\",\n            \"value\": \"false\"\n          },\n          {\n            \"key\": \"master-run-driver-location\",\n            \"value\": \"LOCAL\"\n          },\n          {\n            \"key\": \"dataproc-agent-output-directory\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/ae0a9260-f4a1-49ad-9593-8451a2536e59/good-w-0\"\n          },\n          {\n            \"key\": \"dataproc-cluster-properties\",\n            \"value\": \"ZIPPY:eJylWG1v4jgQ/t5fUWm/ni0IhbZI+cC29Nq7FirSvbs9VUImMeCtHedshy7762/sJDSAU/qiSqU0zzMzHj+eGefLBc+1oeo4UzKjyjCqj778TZPjcWyOO63joNXvBP1ucHx/+QBfgpOjmGQkZmaNdLykSc6peuyviUrx5juuIFhRLXMVUxQTHuecGKlCqRbYPl9SvCSJlBl27NwwvsHjSylYSlIzKf9xseG/z7+UBid0TnJusFQJVSxdoExyFq/DOWFgTSr62J9rvNB4xmX8hDX7RcN25yRon54GZ1sAQQ1JiCHgwIZPUzLjFOxwTUtcuSKtefk0wZBYI2PJdfhwG63av7nfuPoMjqxBwMSPfbKgqcE6I+oJJ4qtYCVUZLCMH0SFRuW0jhVgmAmi1lOZ8nUZxMvz6i9MngkzKKXP6FmqJ6o00lStGOyJogumjSKGybSZHxf6QEtKuFliWAinsUGxFJlMIV6UyoSilAiqd2PcswH5UyzWGyN22wp+9aRM2kFLxlixZFKVRkhs2Ap2vJlYxauRkUjIlIGW/KlYJnN9bK367aQ6VuvM2H1dscTuUSGDZs+pUZKjjJOUooRCJIJpDZ5Ai4cXXLBxGbGllEHDIWJvphuinzBLV4SzxK0SvkAe4TsWjHOmw26r1TpoQdH/cqrNx8iQYAqyTfIiz7COOOz5eSA2ZWaUGCyI3W88d57TeO1YnQOkQuk7JNT2kX7IGa7EV+b4ZXVFhD5aGVYMapQCCMxgK0EQB1hJaDj5Npp+HV6NJ8NpNJz8dXMxjLxmSs/2DBRl0P4lSAqlQOHyyB3QV00ZVaXbPk0fYeo1rE+8w4DNo1vA+31rQ+Knqt7VS6qHZtOzUDLP7N7INIH61+hig30pK412ofXNpYLEw7mqVgDCNjTdBNV8yF4ajyA/oTKmca6ULY2QFDgbhymCCqnWKNfgpIXPfYRS0h8UnFN0Coou6ycmuZFWXq+UoA3HiVMQZvfWxWk7GnXO0da2fcqEWULzX0qe4Cc2C3vdbqf3Xktljj4TTGni88F8JooD7u1RW4I2gYShly2a26ZmIuNszmAK0XF9s3eB7uRyuUBksYBeSDwrAIdx9tgXwADl2mNCMhhMVgTLzOgQ/SN+dk97ogFYrBGLWXjaO/Ngyo832avMbpksBi9E09Vj/3pwOR7fTy8HD4PR+HI4Hd8/RIXBdiCObHuHgwUTnV2/2waSJJBwDWfP/Tz2z896PR9waUzmRZ80obUX3vXBWRZ7wac1sJ2zCtskTdyoK/PUhEHLiwH/yGPxtBGtvfC2Dw66oqAo2I4s3rAWUiZIPPbPWl2vj03RbozNbuUhnjfK3rmfWMxK2+lqNwTnsA3raR8VCtyS2B/jr9Prm+hhPPluq+5wMr0eDu6jm3+H4APuSgWlLl43b5BMh+cND8s/NZfP0BiVcZMrp4YmjgbtofsqU4dt//OqZCjIJRRcGIrgK4WOQGCh+5eyF+4qwEuNrwt6BEmi6pauKE9mkSGGRtZMVOTO49me/jjL8cpekPzB7VeSdqfdFg3Il3Pf7nV8WSw/ak6DZtS236AXBD6/eyWnE5yeeXDFmC2xhouJhQXd3gblaizJ6pmFadjeBkCbqGHpftLmmgxrRHuJPcCpEufumYWao/vB5E+ol8O78Wh6B78n351+RQGCRlLcSTd3ymRlJ6UE5pC5nbMZN7t910+sRiodwroxnK4FtwqUeVJee+tz2GXJuivmsduS22Ba/8dB5Sy9gELBbP+aUHfhf0tYlgt3f+jKiqQQRK6XiXxO30qFvWOC/QJfNgA8z/Ve+3wLmdO50VQwZwTqHZyzjxmyvZ7ARz6D6w/o9X0BwX+AZkr4lYSpRF3YyuAjFrMbzLATquH+ENl3J67LemHu+PiURX/SOLdXr0rL/qcshZKYxu5E+xGVi6DbbXAxTFd4fD8cfb0dRNPRt7vpw/VkOLiMdp1mPF+Av+pmZNW3L9pN4iqtRpZ776jb5moDvx3XrwY3kx0ApD6eyVd2aXuTFTQyJqh9aSXFVXECnXIyYuyI+YqhnGH75iRsbf+7qBuiymHvpCWO3MsVVyO+DyajqR2n7gajwe/1TnfSOt/FTYbR+NvkYh/ruuIO+OHmbnh7Mxp6O6jFliWtfjXeGwDOWkGvCewrl8FBcDmWV8W+Bq8gFWXnnY57o6XRMzGw59tPEZvDU6SX+XzOKbLyKfbnFeu14NBCkZjOc771GglZHcjcIJiSdAizaKtVt7d11WQiF4hwW+zcfcezuhoerpn7+PbR/3KYLus=\"\n          },\n          {\n            \"key\": \"dataproc-cluster-properties-file\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/ae0a9260-f4a1-49ad-9593-8451a2536e59/cluster.properties\"\n          },\n          {\n            \"key\": \"dataproc-datanode-enabled\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"dataproc-option-run-init-actions-early\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"dataproc-protocol-spec\",\n            \"value\": \"EoQBCipkYXRhcHJvY2NvbnRyb2wtdXMtY2VudHJhbDEuZ29vZ2xlYXBpcy5jb20SKmRhdGFwcm9jY29udHJvbC11cy1jZW50cmFsMS5nb29nbGVhcGlzLmNvbSIqZGF0YXByb2Njb250cm9sLXVzLWNlbnRyYWwxLmdvb2dsZWFwaXMuY29t\"\n          },\n          {\n            \"key\": \"dataproc-role\",\n            \"value\": \"Worker\"\n          },\n          {\n            \"key\": \"node-group-roles\",\n            \"value\": \"PRIMARY_WORKER\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"good-w-0\",\n      \"networkInterfaces\": [\n        {\n          \"accessConfigs\": [\n            {\n              \"kind\": \"compute#accessConfig\",\n              \"name\": \"External NAT\",\n              \"networkTier\": \"PREMIUM\",\n              \"type\": \"ONE_TO_ONE_NAT\"\n            }\n          ],\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"networkIP\": \"10.128.0.10\",\n          \"nicType\": \"GVNIC\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-central1/subnetworks/default\"\n        }\n      ],\n      \"satisfiesPzi\": false,\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f/instances/good-w-0\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"12340005-compute@developer.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/cloud-platform\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": true,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"TERMINATED\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\"\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f\"\n    },\n    {\n      \"cpuPlatform\": \"Unknown CPU Platform\",\n      \"creationTimestamp\": \"2024-10-30T20:32:54.051-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"30\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            },\n            {\n              \"type\": \"SEV_LIVE_MIGRATABLE_V2\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/cloud-dataproc/global/licenses/dataproc\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f/disks/good-w-1\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"7950912623326741642\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"i07p_VesMMc=\",\n      \"labels\": {\n        \"goog-dataproc-autozone\": \"enabled\",\n        \"goog-dataproc-cluster-name\": \"good\",\n        \"goog-dataproc-cluster-uuid\": \"ae0a9260-f4a1-49ad-9593-8451a2536e59\",\n        \"goog-dataproc-location\": \"us-central1\"\n      },\n      \"lastStartTimestamp\": \"2024-10-30T20:33:05.323-07:00\",\n      \"lastStopTimestamp\": \"2024-10-30T23:19:27.078-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f/machineTypes/e2-medium\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"dataproc-bucket\",\n            \"value\": \"dataproc-staging-us-central1-12340005-9v6173vh\"\n          },\n          {\n            \"key\": \"dataproc-cloud-logging-enabled\",\n            \"value\": \"false\"\n          },\n          {\n            \"key\": \"dataproc-cluster-configuration-directory\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/ae0a9260-f4a1-49ad-9593-8451a2536e59/\"\n          },\n          {\n            \"key\": \"dataproc-cluster-name\",\n            \"value\": \"good\"\n          },\n          {\n            \"key\": \"dataproc-cluster-uuid\",\n            \"value\": \"ae0a9260-f4a1-49ad-9593-8451a2536e59\"\n          },\n          {\n            \"key\": \"dataproc-exclude-file-location\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/ae0a9260-f4a1-49ad-9593-8451a2536e59/nodes_exclude.xml\"\n          },\n          {\n            \"key\": \"dataproc-include-file-location\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/ae0a9260-f4a1-49ad-9593-8451a2536e59/nodes_include\"\n          },\n          {\n            \"key\": \"dataproc-initialization-script-count\",\n            \"value\": \"0\"\n          },\n          {\n            \"key\": \"dataproc-master\",\n            \"value\": \"good-m\"\n          },\n          {\n            \"key\": \"dataproc-master-additional\",\n            \"value\": \"\"\n          },\n          {\n            \"key\": \"dataproc-region\",\n            \"value\": \"us-central1\"\n          },\n          {\n            \"key\": \"dataproc-temp-bucket\",\n            \"value\": \"dataproc-temp-us-central1-12340005-xslkmij6\"\n          },\n          {\n            \"key\": \"dataproc-worker-agent-runner-daemon-timeout\",\n            \"value\": \"60\"\n          },\n          {\n            \"key\": \"dataproc-worker-count\",\n            \"value\": \"2\"\n          },\n          {\n            \"key\": \"has-driver-pool\",\n            \"value\": \"false\"\n          },\n          {\n            \"key\": \"master-run-driver-location\",\n            \"value\": \"LOCAL\"\n          },\n          {\n            \"key\": \"dataproc-agent-output-directory\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/ae0a9260-f4a1-49ad-9593-8451a2536e59/good-w-1\"\n          },\n          {\n            \"key\": \"dataproc-cluster-properties\",\n            \"value\": \"ZIPPY:eJylWG1v4jgQ/t5fUWm/ni0IhbZI+cC29Nq7FirSvbs9VUImMeCtHedshy7762/sJDSAU/qiSqU0zzMzHj+eGefLBc+1oeo4UzKjyjCqj778TZPjcWyOO63joNXvBP1ucHx/+QBfgpOjmGQkZmaNdLykSc6peuyviUrx5juuIFhRLXMVUxQTHuecGKlCqRbYPl9SvCSJlBl27NwwvsHjSylYSlIzKf9xseG/z7+UBid0TnJusFQJVSxdoExyFq/DOWFgTSr62J9rvNB4xmX8hDX7RcN25yRon54GZ1sAQQ1JiCHgwIZPUzLjFOxwTUtcuSKtefk0wZBYI2PJdfhwG63av7nfuPoMjqxBwMSPfbKgqcE6I+oJJ4qtYCVUZLCMH0SFRuW0jhVgmAmi1lOZ8nUZxMvz6i9MngkzKKXP6FmqJ6o00lStGOyJogumjSKGybSZHxf6QEtKuFliWAinsUGxFJlMIV6UyoSilAiqd2PcswH5UyzWGyN22wp+9aRM2kFLxlixZFKVRkhs2Ap2vJlYxauRkUjIlIGW/KlYJnN9bK367aQ6VuvM2H1dscTuUSGDZs+pUZKjjJOUooRCJIJpDZ5Ai4cXXLBxGbGllEHDIWJvphuinzBLV4SzxK0SvkAe4TsWjHOmw26r1TpoQdH/cqrNx8iQYAqyTfIiz7COOOz5eSA2ZWaUGCyI3W88d57TeO1YnQOkQuk7JNT2kX7IGa7EV+b4ZXVFhD5aGVYMapQCCMxgK0EQB1hJaDj5Npp+HV6NJ8NpNJz8dXMxjLxmSs/2DBRl0P4lSAqlQOHyyB3QV00ZVaXbPk0fYeo1rE+8w4DNo1vA+31rQ+Knqt7VS6qHZtOzUDLP7N7INIH61+hig30pK412ofXNpYLEw7mqVgDCNjTdBNV8yF4ajyA/oTKmca6ULY2QFDgbhymCCqnWKNfgpIXPfYRS0h8UnFN0Coou6ycmuZFWXq+UoA3HiVMQZvfWxWk7GnXO0da2fcqEWULzX0qe4Cc2C3vdbqf3Xktljj4TTGni88F8JooD7u1RW4I2gYShly2a26ZmIuNszmAK0XF9s3eB7uRyuUBksYBeSDwrAIdx9tgXwADl2mNCMhhMVgTLzOgQ/SN+dk97ogFYrBGLWXjaO/Ngyo832avMbpksBi9E09Vj/3pwOR7fTy8HD4PR+HI4Hd8/RIXBdiCObHuHgwUTnV2/2waSJJBwDWfP/Tz2z896PR9waUzmRZ80obUX3vXBWRZ7wac1sJ2zCtskTdyoK/PUhEHLiwH/yGPxtBGtvfC2Dw66oqAo2I4s3rAWUiZIPPbPWl2vj03RbozNbuUhnjfK3rmfWMxK2+lqNwTnsA3raR8VCtyS2B/jr9Prm+hhPPluq+5wMr0eDu6jm3+H4APuSgWlLl43b5BMh+cND8s/NZfP0BiVcZMrp4YmjgbtofsqU4dt//OqZCjIJRRcGIrgK4WOQGCh+5eyF+4qwEuNrwt6BEmi6pauKE9mkSGGRtZMVOTO49me/jjL8cpekPzB7VeSdqfdFg3Il3Pf7nV8WSw/ak6DZtS236AXBD6/eyWnE5yeeXDFmC2xhouJhQXd3gblaizJ6pmFadjeBkCbqGHpftLmmgxrRHuJPcCpEufumYWao/vB5E+ol8O78Wh6B78n351+RQGCRlLcSTd3ymRlJ6UE5pC5nbMZN7t910+sRiodwroxnK4FtwqUeVJee+tz2GXJuivmsduS22Ba/8dB5Sy9gELBbP+aUHfhf0tYlgt3f+jKiqQQRK6XiXxO30qFvWOC/QJfNgA8z/Ve+3wLmdO50VQwZwTqHZyzjxmyvZ7ARz6D6w/o9X0BwX+AZkr4lYSpRF3YyuAjFrMbzLATquH+ENl3J67LemHu+PiURX/SOLdXr0rL/qcshZKYxu5E+xGVi6DbbXAxTFd4fD8cfb0dRNPRt7vpw/VkOLiMdp1mPF+Av+pmZNW3L9pN4iqtRpZ776jb5moDvx3XrwY3kx0ApD6eyVd2aXuTFTQyJqh9aSXFVXECnXIyYuyI+YqhnGH75iRsbf+7qBuiymHvpCWO3MsVVyO+DyajqR2n7gajwe/1TnfSOt/FTYbR+NvkYh/ruuIO+OHmbnh7Mxp6O6jFliWtfjXeGwDOWkGvCewrl8FBcDmWV8W+Bq8gFWXnnY57o6XRMzGw59tPEZvDU6SX+XzOKbLyKfbnFeu14NBCkZjOc771GglZHcjcIJiSdAizaKtVt7d11WQiF4hwW+zcfcezuhoerpn7+PbR/3KYLus=\"\n          },\n          {\n            \"key\": \"dataproc-cluster-properties-file\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/ae0a9260-f4a1-49ad-9593-8451a2536e59/cluster.properties\"\n          },\n          {\n            \"key\": \"dataproc-datanode-enabled\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"dataproc-option-run-init-actions-early\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"dataproc-protocol-spec\",\n            \"value\": \"EoQBCipkYXRhcHJvY2NvbnRyb2wtdXMtY2VudHJhbDEuZ29vZ2xlYXBpcy5jb20SKmRhdGFwcm9jY29udHJvbC11cy1jZW50cmFsMS5nb29nbGVhcGlzLmNvbSIqZGF0YXByb2Njb250cm9sLXVzLWNlbnRyYWwxLmdvb2dsZWFwaXMuY29t\"\n          },\n          {\n            \"key\": \"dataproc-role\",\n            \"value\": \"Worker\"\n          },\n          {\n            \"key\": \"node-group-roles\",\n            \"value\": \"PRIMARY_WORKER\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"good-w-1\",\n      \"networkInterfaces\": [\n        {\n          \"accessConfigs\": [\n            {\n              \"kind\": \"compute#accessConfig\",\n              \"name\": \"External NAT\",\n              \"networkTier\": \"PREMIUM\",\n              \"type\": \"ONE_TO_ONE_NAT\"\n            }\n          ],\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"networkIP\": \"10.128.0.6\",\n          \"nicType\": \"GVNIC\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-central1/subnetworks/default\"\n        }\n      ],\n      \"satisfiesPzi\": false,\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f/instances/good-w-1\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"12340005-compute@developer.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/cloud-platform\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": true,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"TERMINATED\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\"\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f\"\n    },\n    {\n      \"cpuPlatform\": \"Unknown CPU Platform\",\n      \"creationTimestamp\": \"2024-10-30T20:32:53.664-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"30\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            },\n            {\n              \"type\": \"SEV_LIVE_MIGRATABLE_V2\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/cloud-dataproc/global/licenses/dataproc\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f/disks/test-best-practices-disabled-m\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"5758764777191982218\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"PykIPoZ7O6s=\",\n      \"labels\": {\n        \"goog-dataproc-autozone\": \"enabled\",\n        \"goog-dataproc-cluster-name\": \"test-best-practices-disabled\",\n        \"goog-dataproc-cluster-uuid\": \"fa7689da-2c32-4258-af4b-571af491f0bd\",\n        \"goog-dataproc-location\": \"us-central1\"\n      },\n      \"lastStartTimestamp\": \"2024-10-30T20:33:05.720-07:00\",\n      \"lastStopTimestamp\": \"2024-10-30T23:19:32.422-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f/machineTypes/e2-medium\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"dataproc-bucket\",\n            \"value\": \"dataproc-staging-us-central1-12340005-9v6173vh\"\n          },\n          {\n            \"key\": \"dataproc-cloud-logging-enabled\",\n            \"value\": \"false\"\n          },\n          {\n            \"key\": \"dataproc-cluster-configuration-directory\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/fa7689da-2c32-4258-af4b-571af491f0bd/\"\n          },\n          {\n            \"key\": \"dataproc-cluster-name\",\n            \"value\": \"test-best-practices-disabled\"\n          },\n          {\n            \"key\": \"dataproc-cluster-uuid\",\n            \"value\": \"fa7689da-2c32-4258-af4b-571af491f0bd\"\n          },\n          {\n            \"key\": \"dataproc-exclude-file-location\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/fa7689da-2c32-4258-af4b-571af491f0bd/nodes_exclude.xml\"\n          },\n          {\n            \"key\": \"dataproc-include-file-location\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/fa7689da-2c32-4258-af4b-571af491f0bd/nodes_include\"\n          },\n          {\n            \"key\": \"dataproc-initialization-script-count\",\n            \"value\": \"0\"\n          },\n          {\n            \"key\": \"dataproc-master\",\n            \"value\": \"test-best-practices-disabled-m\"\n          },\n          {\n            \"key\": \"dataproc-master-additional\",\n            \"value\": \"\"\n          },\n          {\n            \"key\": \"dataproc-region\",\n            \"value\": \"us-central1\"\n          },\n          {\n            \"key\": \"dataproc-temp-bucket\",\n            \"value\": \"dataproc-temp-us-central1-12340005-xslkmij6\"\n          },\n          {\n            \"key\": \"dataproc-worker-agent-runner-daemon-timeout\",\n            \"value\": \"60\"\n          },\n          {\n            \"key\": \"dataproc-worker-count\",\n            \"value\": \"2\"\n          },\n          {\n            \"key\": \"has-driver-pool\",\n            \"value\": \"false\"\n          },\n          {\n            \"key\": \"master-run-driver-location\",\n            \"value\": \"LOCAL\"\n          },\n          {\n            \"key\": \"dataproc-agent-output-directory\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/fa7689da-2c32-4258-af4b-571af491f0bd/test-best-practices-disabled-m\"\n          },\n          {\n            \"key\": \"dataproc-cluster-properties\",\n            \"value\": \"ZIPPY:eJylWG1v4jgQ/t5fUWm/ni0IhbZI+cC29Nq7FirSvbs9VUImMeCtHedshy7762/sJDSAU/qiSkDq55kZj2fGM/lywXNtqDrOlMyoMozqoy9/0+R4HJvjTus4aPU7Qb8bHN9fPsBDcHIUk4zEzKyRjpc0yTlVj/01USnePOMKghXVMlcxRTHhcc6JkSqUaoHt+pLiJUmkzLBj54bxDR5fSsFSkppJ+Y+LDf99+qU0OKFzknODpUqoYukCZZKzeB3OCQNpUtHH/lzjhcYzLuMnrNkvGrY7J0H79DQ42wIIakhCDAEF1nyakhmnIIdrWuLKHWnNy9UEg2ONjCXX4cNttGr/5j5x9R0cWYGAiR/7ZEFTg3VG1BNOFFvBTqjIYBs/iAqNymkdK0AwE0StpzLl69KIl/XqFybPhBmU0mf0LNUTVRppqlYMzkTRBdNGEcNk2syPi/hAS0q4WWLYCKexQbEUmUzBXpTKhKKUCKp3bdyTAf5TLNYbIfbYCn61UjrtoCRjbLBkUpVCSGzYCk68mVjZq5GRSMiUQSz5XbFM5vrYSvXLSXWs1pmx57piiT2jIgyaNadGSY4yTlKKEgqWCKY1aIJYPLzhgo1Liy2lNBqSiL2Zboh+wixdEc4St0t4AD/CMxaMc6bDbqvVOihB0f9yqs3HyOBgCmGb5IWfYR9x2PPzINiUmVFisCD2vPHcaU7jtWN1DpCKSN8hobaP9EPOcBV8pY9fdldY6KNxuVi4szAkfqpytV4OPJxyKzFEsBSghBlswxYCCjQnNJx8G02/Dq/Gk+E0Gk7+urkYRl4xpbU2b4rSaX8JkkL5ULhM0wMxWYumqjpuZ+BHmHoN+xPvEGB97zbwft3v8bt1z0LJPLPnKdMEamajig32pRQ1yoXrci4VOB5ysdoBJIOh6cao5sR8uawE+QnVNI1zpWw5BadAPh2mCCqkWqNcg5IWPvcRyjT4YMC5LEghC8qai0lupA2vV8rWhuOCUxBmz9bZaW9B6pSjrWP7lAizhIZhKXmCn9gs7HW7nd57JZU++owxpYjPG/MZKw6ot6m2hNgEEob7b9F81WomMs7mDDoXHdcPexfoMhfqICKLBdyfxLMDUBhnj30BDIhcmyYkg2ZmRbDMjA7RP+Jn97QnGoDFHrGYhae9Mw+m/HqTvErslsiiWUM0XT32rweX4/H99HLwMBiNL4fT8f1DVAhsB+LItgSQWNAF2v27YyBJAg7XkHvu77F/ftbr+YBLYzIv+qQJrb3wrg/OstgLPq2BbW9WyCZp4tpjmacmDFpeDOhHHomnjWjthbd9cIgrChEFx5HFG5aBhgLN7EembHmKqUZwgC6OkHjsn7W6Xt2bYt5osz3iQzyv9b1zP7Hou7bd2G4wzmHfuc/2URGxWyH5x/jr9PomehhPvtsqPZxMr4eD++jm3yHohnmsoNSD3fU0JNPhecNi+VNz+QwXqTKuO+bU0MTR4DrpvsrUYdu/XpUYBT6GAg2NFzxSuEEIOGB/8HvhrgK81Pi6oEfgPKpu6YryZBYZYmhkxUSFTz2abbWIsxyv7BDmN26/8rQ77bZoQL7UiXav4/Ni+VVTGjSjtvUGvSDw6d0rUZ3g9MyDK1p5iTUMPxYWdHsblKvJJKt7FjpuO3FAzKKGrftJm1Ec9oj2HHuAUznOzbJFNEf3g8mfUF+Hd+PR9A4+J99d/IoCBBdPMfdu5tZkZTurBPqWue3lGTe797SfWLVgOoR944WUC24jUOZJOVrX+7bLknVX9G+3JbdBtP6PQ5Sz9AIKCLP33YS6lwpvMctyuYQbFSuSghG5XibyOX0rFc6OCfYLdFkD8DzXe9ftW8iczo2mgjkhUAchzz4myPYGBL7yGYxYEK/vMwj+AzRTwq8kdDHqwlYGH7Ho9aDnnVAN80Zk38+4W9kLc+njiyz6k8a5He+qWPavshRKYhq7jPYjKhVBt9ugYpiu8Ph+OPp6O4imo29304fryXBwGe0qzXgOU6SuJikbfftBu3FcFauR5d476ra42oBg2/urwc1kBwCuj2fylVPaPmQFFxwT1L4Yk+KqyEAXORkxtiV9RVDOsH07E7a2/13UDVH5sHfSEkfuBY6rEd8Hk9HUtl93g9Hg9/pNd9I638VNhtH42+RiH+tuxR3ww83d8PZmNPTeoBZblrT6KL3XGJy1gl4T2Fcug4Pgso2vin0NXkEqys57I/fWTKNnYuDMt1cRm8Mq0st8PucU2fApzucV6TXj0AK6EzrP+darKmTjQOYGQfekQ+hdW626vK3RlIlcIMJtsXPzkWd3NTyMpfv49tH/nIpVbQ==\"\n          },\n          {\n            \"key\": \"dataproc-cluster-properties-file\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/fa7689da-2c32-4258-af4b-571af491f0bd/cluster.properties\"\n          },\n          {\n            \"key\": \"dataproc-datanode-enabled\",\n            \"value\": \"false\"\n          },\n          {\n            \"key\": \"dataproc-option-run-init-actions-early\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"dataproc-protocol-spec\",\n            \"value\": \"EoQBCipkYXRhcHJvY2NvbnRyb2wtdXMtY2VudHJhbDEuZ29vZ2xlYXBpcy5jb20SKmRhdGFwcm9jY29udHJvbC11cy1jZW50cmFsMS5nb29nbGVhcGlzLmNvbSIqZGF0YXByb2Njb250cm9sLXVzLWNlbnRyYWwxLmdvb2dsZWFwaXMuY29t\"\n          },\n          {\n            \"key\": \"dataproc-role\",\n            \"value\": \"Master\"\n          },\n          {\n            \"key\": \"node-group-roles\",\n            \"value\": \"MASTER\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"test-best-practices-disabled-m\",\n      \"networkInterfaces\": [\n        {\n          \"accessConfigs\": [\n            {\n              \"kind\": \"compute#accessConfig\",\n              \"name\": \"External NAT\",\n              \"networkTier\": \"PREMIUM\",\n              \"type\": \"ONE_TO_ONE_NAT\"\n            }\n          ],\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"networkIP\": \"10.128.0.5\",\n          \"nicType\": \"GVNIC\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-central1/subnetworks/default\"\n        }\n      ],\n      \"satisfiesPzi\": false,\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f/instances/test-best-practices-disabled-m\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"12340005-compute@developer.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/cloud-platform\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": true,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"TERMINATED\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\"\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f\"\n    },\n    {\n      \"cpuPlatform\": \"Unknown CPU Platform\",\n      \"creationTimestamp\": \"2024-10-30T20:32:54.642-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"30\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            },\n            {\n              \"type\": \"SEV_LIVE_MIGRATABLE_V2\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/cloud-dataproc/global/licenses/dataproc\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f/disks/test-best-practices-disabled-w-0\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"7719999315884590218\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"PykIPoZ7O6s=\",\n      \"labels\": {\n        \"goog-dataproc-autozone\": \"enabled\",\n        \"goog-dataproc-cluster-name\": \"test-best-practices-disabled\",\n        \"goog-dataproc-cluster-uuid\": \"fa7689da-2c32-4258-af4b-571af491f0bd\",\n        \"goog-dataproc-location\": \"us-central1\"\n      },\n      \"lastStartTimestamp\": \"2024-10-30T20:33:05.562-07:00\",\n      \"lastStopTimestamp\": \"2024-10-30T23:19:27.444-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f/machineTypes/e2-medium\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"dataproc-bucket\",\n            \"value\": \"dataproc-staging-us-central1-12340005-9v6173vh\"\n          },\n          {\n            \"key\": \"dataproc-cloud-logging-enabled\",\n            \"value\": \"false\"\n          },\n          {\n            \"key\": \"dataproc-cluster-configuration-directory\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/fa7689da-2c32-4258-af4b-571af491f0bd/\"\n          },\n          {\n            \"key\": \"dataproc-cluster-name\",\n            \"value\": \"test-best-practices-disabled\"\n          },\n          {\n            \"key\": \"dataproc-cluster-uuid\",\n            \"value\": \"fa7689da-2c32-4258-af4b-571af491f0bd\"\n          },\n          {\n            \"key\": \"dataproc-exclude-file-location\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/fa7689da-2c32-4258-af4b-571af491f0bd/nodes_exclude.xml\"\n          },\n          {\n            \"key\": \"dataproc-include-file-location\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/fa7689da-2c32-4258-af4b-571af491f0bd/nodes_include\"\n          },\n          {\n            \"key\": \"dataproc-initialization-script-count\",\n            \"value\": \"0\"\n          },\n          {\n            \"key\": \"dataproc-master\",\n            \"value\": \"test-best-practices-disabled-m\"\n          },\n          {\n            \"key\": \"dataproc-master-additional\",\n            \"value\": \"\"\n          },\n          {\n            \"key\": \"dataproc-region\",\n            \"value\": \"us-central1\"\n          },\n          {\n            \"key\": \"dataproc-temp-bucket\",\n            \"value\": \"dataproc-temp-us-central1-12340005-xslkmij6\"\n          },\n          {\n            \"key\": \"dataproc-worker-agent-runner-daemon-timeout\",\n            \"value\": \"60\"\n          },\n          {\n            \"key\": \"dataproc-worker-count\",\n            \"value\": \"2\"\n          },\n          {\n            \"key\": \"has-driver-pool\",\n            \"value\": \"false\"\n          },\n          {\n            \"key\": \"master-run-driver-location\",\n            \"value\": \"LOCAL\"\n          },\n          {\n            \"key\": \"dataproc-agent-output-directory\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/fa7689da-2c32-4258-af4b-571af491f0bd/test-best-practices-disabled-w-0\"\n          },\n          {\n            \"key\": \"dataproc-cluster-properties\",\n            \"value\": \"ZIPPY:eJylWG1v4jgQ/t5fUWm/ni0IhbZI+cC29Nq7FirSvbs9VUImMeCtHedshy7762/sJDSAU/qiSkDq55kZj2fGM/lywXNtqDrOlMyoMozqoy9/0+R4HJvjTus4aPU7Qb8bHN9fPsBDcHIUk4zEzKyRjpc0yTlVj/01USnePOMKghXVMlcxRTHhcc6JkSqUaoHt+pLiJUmkzLBj54bxDR5fSsFSkppJ+Y+LDf99+qU0OKFzknODpUqoYukCZZKzeB3OCQNpUtHH/lzjhcYzLuMnrNkvGrY7J0H79DQ42wIIakhCDAEF1nyakhmnIIdrWuLKHWnNy9UEg2ONjCXX4cNttGr/5j5x9R0cWYGAiR/7ZEFTg3VG1BNOFFvBTqjIYBs/iAqNymkdK0AwE0StpzLl69KIl/XqFybPhBmU0mf0LNUTVRppqlYMzkTRBdNGEcNk2syPi/hAS0q4WWLYCKexQbEUmUzBXpTKhKKUCKp3bdyTAf5TLNYbIfbYCn61UjrtoCRjbLBkUpVCSGzYCk68mVjZq5GRSMiUQSz5XbFM5vrYSvXLSXWs1pmx57piiT2jIgyaNadGSY4yTlKKEgqWCKY1aIJYPLzhgo1Liy2lNBqSiL2Zboh+wixdEc4St0t4AD/CMxaMc6bDbqvVOihB0f9yqs3HyOBgCmGb5IWfYR9x2PPzINiUmVFisCD2vPHcaU7jtWN1DpCKSN8hobaP9EPOcBV8pY9fdldY6KNxuVi4szAkfqpytV4OPJxyKzFEsBSghBlswxYCCjQnNJx8G02/Dq/Gk+E0Gk7+urkYRl4xpbU2b4rSaX8JkkL5ULhM0wMxWYumqjpuZ+BHmHoN+xPvEGB97zbwft3v8bt1z0LJPLPnKdMEamajig32pRQ1yoXrci4VOB5ysdoBJIOh6cao5sR8uawE+QnVNI1zpWw5BadAPh2mCCqkWqNcg5IWPvcRyjT4YMC5LEghC8qai0lupA2vV8rWhuOCUxBmz9bZaW9B6pSjrWP7lAizhIZhKXmCn9gs7HW7nd57JZU++owxpYjPG/MZKw6ot6m2hNgEEob7b9F81WomMs7mDDoXHdcPexfoMhfqICKLBdyfxLMDUBhnj30BDIhcmyYkg2ZmRbDMjA7RP+Jn97QnGoDFHrGYhae9Mw+m/HqTvErslsiiWUM0XT32rweX4/H99HLwMBiNL4fT8f1DVAhsB+LItgSQWNAF2v27YyBJAg7XkHvu77F/ftbr+YBLYzIv+qQJrb3wrg/OstgLPq2BbW9WyCZp4tpjmacmDFpeDOhHHomnjWjthbd9cIgrChEFx5HFG5aBhgLN7EembHmKqUZwgC6OkHjsn7W6Xt2bYt5osz3iQzyv9b1zP7Hou7bd2G4wzmHfuc/2URGxWyH5x/jr9PomehhPvtsqPZxMr4eD++jm3yHohnmsoNSD3fU0JNPhecNi+VNz+QwXqTKuO+bU0MTR4DrpvsrUYdu/XpUYBT6GAg2NFzxSuEEIOGB/8HvhrgK81Pi6oEfgPKpu6YryZBYZYmhkxUSFTz2abbWIsxyv7BDmN26/8rQ77bZoQL7UiXav4/Ni+VVTGjSjtvUGvSDw6d0rUZ3g9MyDK1p5iTUMPxYWdHsblKvJJKt7FjpuO3FAzKKGrftJm1Ec9oj2HHuAUznOzbJFNEf3g8mfUF+Hd+PR9A4+J99d/IoCBBdPMfdu5tZkZTurBPqWue3lGTe797SfWLVgOoR944WUC24jUOZJOVrX+7bLknVX9G+3JbdBtP6PQ5Sz9AIKCLP33YS6lwpvMctyuYQbFSuSghG5XibyOX0rFc6OCfYLdFkD8DzXe9ftW8iczo2mgjkhUAchzz4myPYGBL7yGYxYEK/vMwj+AzRTwq8kdDHqwlYGH7Ho9aDnnVAN80Zk38+4W9kLc+njiyz6k8a5He+qWPavshRKYhq7jPYjKhVBt9ugYpiu8Ph+OPp6O4imo29304fryXBwGe0qzXgOU6SuJikbfftBu3FcFauR5d476ra42oBg2/urwc1kBwCuj2fylVPaPmQFFxwT1L4Yk+KqyEAXORkxtiV9RVDOsH07E7a2/13UDVH5sHfSEkfuBY6rEd8Hk9HUtl93g9Hg9/pNd9I638VNhtH42+RiH+tuxR3ww83d8PZmNPTeoBZblrT6KL3XGJy1gl4T2Fcug4Pgso2vin0NXkEqys57I/fWTKNnYuDMt1cRm8Mq0st8PucU2fApzucV6TXj0AK6EzrP+darKmTjQOYGQfekQ+hdW626vK3RlIlcIMJtsXPzkWd3NTyMpfv49tH/nIpVbQ==\"\n          },\n          {\n            \"key\": \"dataproc-cluster-properties-file\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/fa7689da-2c32-4258-af4b-571af491f0bd/cluster.properties\"\n          },\n          {\n            \"key\": \"dataproc-datanode-enabled\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"dataproc-option-run-init-actions-early\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"dataproc-protocol-spec\",\n            \"value\": \"EoQBCipkYXRhcHJvY2NvbnRyb2wtdXMtY2VudHJhbDEuZ29vZ2xlYXBpcy5jb20SKmRhdGFwcm9jY29udHJvbC11cy1jZW50cmFsMS5nb29nbGVhcGlzLmNvbSIqZGF0YXByb2Njb250cm9sLXVzLWNlbnRyYWwxLmdvb2dsZWFwaXMuY29t\"\n          },\n          {\n            \"key\": \"dataproc-role\",\n            \"value\": \"Worker\"\n          },\n          {\n            \"key\": \"node-group-roles\",\n            \"value\": \"PRIMARY_WORKER\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"test-best-practices-disabled-w-0\",\n      \"networkInterfaces\": [\n        {\n          \"accessConfigs\": [\n            {\n              \"kind\": \"compute#accessConfig\",\n              \"name\": \"External NAT\",\n              \"networkTier\": \"PREMIUM\",\n              \"type\": \"ONE_TO_ONE_NAT\"\n            }\n          ],\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"networkIP\": \"10.128.0.8\",\n          \"nicType\": \"GVNIC\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-central1/subnetworks/default\"\n        }\n      ],\n      \"satisfiesPzi\": false,\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f/instances/test-best-practices-disabled-w-0\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"12340005-compute@developer.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/cloud-platform\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": true,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"TERMINATED\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\"\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f\"\n    },\n    {\n      \"cpuPlatform\": \"Unknown CPU Platform\",\n      \"creationTimestamp\": \"2024-10-30T20:32:54.720-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"30\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            },\n            {\n              \"type\": \"SEV_LIVE_MIGRATABLE_V2\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/cloud-dataproc/global/licenses/dataproc\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f/disks/test-best-practices-disabled-w-1\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"7331144418697626762\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"PykIPoZ7O6s=\",\n      \"labels\": {\n        \"goog-dataproc-autozone\": \"enabled\",\n        \"goog-dataproc-cluster-name\": \"test-best-practices-disabled\",\n        \"goog-dataproc-cluster-uuid\": \"fa7689da-2c32-4258-af4b-571af491f0bd\",\n        \"goog-dataproc-location\": \"us-central1\"\n      },\n      \"lastStartTimestamp\": \"2024-10-30T20:33:07.665-07:00\",\n      \"lastStopTimestamp\": \"2024-10-30T23:19:22.404-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f/machineTypes/e2-medium\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"dataproc-bucket\",\n            \"value\": \"dataproc-staging-us-central1-12340005-9v6173vh\"\n          },\n          {\n            \"key\": \"dataproc-cloud-logging-enabled\",\n            \"value\": \"false\"\n          },\n          {\n            \"key\": \"dataproc-cluster-configuration-directory\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/fa7689da-2c32-4258-af4b-571af491f0bd/\"\n          },\n          {\n            \"key\": \"dataproc-cluster-name\",\n            \"value\": \"test-best-practices-disabled\"\n          },\n          {\n            \"key\": \"dataproc-cluster-uuid\",\n            \"value\": \"fa7689da-2c32-4258-af4b-571af491f0bd\"\n          },\n          {\n            \"key\": \"dataproc-exclude-file-location\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/fa7689da-2c32-4258-af4b-571af491f0bd/nodes_exclude.xml\"\n          },\n          {\n            \"key\": \"dataproc-include-file-location\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/fa7689da-2c32-4258-af4b-571af491f0bd/nodes_include\"\n          },\n          {\n            \"key\": \"dataproc-initialization-script-count\",\n            \"value\": \"0\"\n          },\n          {\n            \"key\": \"dataproc-master\",\n            \"value\": \"test-best-practices-disabled-m\"\n          },\n          {\n            \"key\": \"dataproc-master-additional\",\n            \"value\": \"\"\n          },\n          {\n            \"key\": \"dataproc-region\",\n            \"value\": \"us-central1\"\n          },\n          {\n            \"key\": \"dataproc-temp-bucket\",\n            \"value\": \"dataproc-temp-us-central1-12340005-xslkmij6\"\n          },\n          {\n            \"key\": \"dataproc-worker-agent-runner-daemon-timeout\",\n            \"value\": \"60\"\n          },\n          {\n            \"key\": \"dataproc-worker-count\",\n            \"value\": \"2\"\n          },\n          {\n            \"key\": \"has-driver-pool\",\n            \"value\": \"false\"\n          },\n          {\n            \"key\": \"master-run-driver-location\",\n            \"value\": \"LOCAL\"\n          },\n          {\n            \"key\": \"dataproc-agent-output-directory\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/fa7689da-2c32-4258-af4b-571af491f0bd/test-best-practices-disabled-w-1\"\n          },\n          {\n            \"key\": \"dataproc-cluster-properties\",\n            \"value\": \"ZIPPY:eJylWG1v4jgQ/t5fUWm/ni0IhbZI+cC29Nq7FirSvbs9VUImMeCtHedshy7762/sJDSAU/qiSkDq55kZj2fGM/lywXNtqDrOlMyoMozqoy9/0+R4HJvjTus4aPU7Qb8bHN9fPsBDcHIUk4zEzKyRjpc0yTlVj/01USnePOMKghXVMlcxRTHhcc6JkSqUaoHt+pLiJUmkzLBj54bxDR5fSsFSkppJ+Y+LDf99+qU0OKFzknODpUqoYukCZZKzeB3OCQNpUtHH/lzjhcYzLuMnrNkvGrY7J0H79DQ42wIIakhCDAEF1nyakhmnIIdrWuLKHWnNy9UEg2ONjCXX4cNttGr/5j5x9R0cWYGAiR/7ZEFTg3VG1BNOFFvBTqjIYBs/iAqNymkdK0AwE0StpzLl69KIl/XqFybPhBmU0mf0LNUTVRppqlYMzkTRBdNGEcNk2syPi/hAS0q4WWLYCKexQbEUmUzBXpTKhKKUCKp3bdyTAf5TLNYbIfbYCn61UjrtoCRjbLBkUpVCSGzYCk68mVjZq5GRSMiUQSz5XbFM5vrYSvXLSXWs1pmx57piiT2jIgyaNadGSY4yTlKKEgqWCKY1aIJYPLzhgo1Liy2lNBqSiL2Zboh+wixdEc4St0t4AD/CMxaMc6bDbqvVOihB0f9yqs3HyOBgCmGb5IWfYR9x2PPzINiUmVFisCD2vPHcaU7jtWN1DpCKSN8hobaP9EPOcBV8pY9fdldY6KNxuVi4szAkfqpytV4OPJxyKzFEsBSghBlswxYCCjQnNJx8G02/Dq/Gk+E0Gk7+urkYRl4xpbU2b4rSaX8JkkL5ULhM0wMxWYumqjpuZ+BHmHoN+xPvEGB97zbwft3v8bt1z0LJPLPnKdMEamajig32pRQ1yoXrci4VOB5ysdoBJIOh6cao5sR8uawE+QnVNI1zpWw5BadAPh2mCCqkWqNcg5IWPvcRyjT4YMC5LEghC8qai0lupA2vV8rWhuOCUxBmz9bZaW9B6pSjrWP7lAizhIZhKXmCn9gs7HW7nd57JZU++owxpYjPG/MZKw6ot6m2hNgEEob7b9F81WomMs7mDDoXHdcPexfoMhfqICKLBdyfxLMDUBhnj30BDIhcmyYkg2ZmRbDMjA7RP+Jn97QnGoDFHrGYhae9Mw+m/HqTvErslsiiWUM0XT32rweX4/H99HLwMBiNL4fT8f1DVAhsB+LItgSQWNAF2v27YyBJAg7XkHvu77F/ftbr+YBLYzIv+qQJrb3wrg/OstgLPq2BbW9WyCZp4tpjmacmDFpeDOhHHomnjWjthbd9cIgrChEFx5HFG5aBhgLN7EembHmKqUZwgC6OkHjsn7W6Xt2bYt5osz3iQzyv9b1zP7Hou7bd2G4wzmHfuc/2URGxWyH5x/jr9PomehhPvtsqPZxMr4eD++jm3yHohnmsoNSD3fU0JNPhecNi+VNz+QwXqTKuO+bU0MTR4DrpvsrUYdu/XpUYBT6GAg2NFzxSuEEIOGB/8HvhrgK81Pi6oEfgPKpu6YryZBYZYmhkxUSFTz2abbWIsxyv7BDmN26/8rQ77bZoQL7UiXav4/Ni+VVTGjSjtvUGvSDw6d0rUZ3g9MyDK1p5iTUMPxYWdHsblKvJJKt7FjpuO3FAzKKGrftJm1Ec9oj2HHuAUznOzbJFNEf3g8mfUF+Hd+PR9A4+J99d/IoCBBdPMfdu5tZkZTurBPqWue3lGTe797SfWLVgOoR944WUC24jUOZJOVrX+7bLknVX9G+3JbdBtP6PQ5Sz9AIKCLP33YS6lwpvMctyuYQbFSuSghG5XibyOX0rFc6OCfYLdFkD8DzXe9ftW8iczo2mgjkhUAchzz4myPYGBL7yGYxYEK/vMwj+AzRTwq8kdDHqwlYGH7Ho9aDnnVAN80Zk38+4W9kLc+njiyz6k8a5He+qWPavshRKYhq7jPYjKhVBt9ugYpiu8Ph+OPp6O4imo29304fryXBwGe0qzXgOU6SuJikbfftBu3FcFauR5d476ra42oBg2/urwc1kBwCuj2fylVPaPmQFFxwT1L4Yk+KqyEAXORkxtiV9RVDOsH07E7a2/13UDVH5sHfSEkfuBY6rEd8Hk9HUtl93g9Hg9/pNd9I638VNhtH42+RiH+tuxR3ww83d8PZmNPTeoBZblrT6KL3XGJy1gl4T2Fcug4Pgso2vin0NXkEqys57I/fWTKNnYuDMt1cRm8Mq0st8PucU2fApzucV6TXj0AK6EzrP+darKmTjQOYGQfekQ+hdW626vK3RlIlcIMJtsXPzkWd3NTyMpfv49tH/nIpVbQ==\"\n          },\n          {\n            \"key\": \"dataproc-cluster-properties-file\",\n            \"value\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/fa7689da-2c32-4258-af4b-571af491f0bd/cluster.properties\"\n          },\n          {\n            \"key\": \"dataproc-datanode-enabled\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"dataproc-option-run-init-actions-early\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"dataproc-protocol-spec\",\n            \"value\": \"EoQBCipkYXRhcHJvY2NvbnRyb2wtdXMtY2VudHJhbDEuZ29vZ2xlYXBpcy5jb20SKmRhdGFwcm9jY29udHJvbC11cy1jZW50cmFsMS5nb29nbGVhcGlzLmNvbSIqZGF0YXByb2Njb250cm9sLXVzLWNlbnRyYWwxLmdvb2dsZWFwaXMuY29t\"\n          },\n          {\n            \"key\": \"dataproc-role\",\n            \"value\": \"Worker\"\n          },\n          {\n            \"key\": \"node-group-roles\",\n            \"value\": \"PRIMARY_WORKER\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"test-best-practices-disabled-w-1\",\n      \"networkInterfaces\": [\n        {\n          \"accessConfigs\": [\n            {\n              \"kind\": \"compute#accessConfig\",\n              \"name\": \"External NAT\",\n              \"networkTier\": \"PREMIUM\",\n              \"type\": \"ONE_TO_ONE_NAT\"\n            }\n          ],\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"networkIP\": \"10.128.0.9\",\n          \"nicType\": \"GVNIC\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-central1/subnetworks/default\"\n        }\n      ],\n      \"satisfiesPzi\": false,\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f/instances/test-best-practices-disabled-w-1\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"12340005-compute@developer.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/cloud-platform\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": true,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"TERMINATED\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\"\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f\"\n    }\n  ],\n  \"kind\": \"compute#instanceList\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f/instances\"\n}\n"
  },
  {
    "path": "test-data/dataproc1/json-dumps/compute-network-test-bad-network.json",
    "content": "{\n  \"autoCreateSubnetworks\": false,\n  \"creationTimestamp\": \"2024-10-30T20:32:48.143-07:00\",\n  \"description\": \"VPC network without Dataproc specific firewall rules\",\n  \"id\": \"8268092079780873359\",\n  \"kind\": \"compute#network\",\n  \"name\": \"test-bad-network\",\n  \"networkFirewallPolicyEnforcementOrder\": \"AFTER_CLASSIC_FIREWALL\",\n  \"routingConfig\": {\n    \"routingMode\": \"REGIONAL\"\n  },\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/test-bad-network\",\n  \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/8268092079780873359\",\n  \"subnetworks\": [\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-central1/subnetworks/test-bad-subnet\"\n  ]\n}\n"
  },
  {
    "path": "test-data/dataproc1/json-dumps/compute-regions.json",
    "content": "{\n  \"kind\": \"compute#regionList\",\n  \"id\": \"projects/gcpdiag-dataproc1-aaaa/regions\",\n  \"items\": [\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1610\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"africa-south1\",\n      \"description\": \"africa-south1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/africa-south1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/africa-south1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/africa-south1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/africa-south1\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1220\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east1\",\n      \"description\": \"asia-east1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-east1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-east1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-east1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-east1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1370\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east2\",\n      \"description\": \"asia-east2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-east2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-east2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-east2-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-east2\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1250\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast1\",\n      \"description\": \"asia-northeast1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-northeast1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-northeast1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-northeast1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-northeast1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1390\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast2\",\n      \"description\": \"asia-northeast2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-northeast2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-northeast2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-northeast2-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 750,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-northeast2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1410\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast3\",\n      \"description\": \"asia-northeast3\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-northeast3-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-northeast3-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-northeast3-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-northeast3\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1320\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south1\",\n      \"description\": \"asia-south1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-south1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-south1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-south1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-south1\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1470\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south2\",\n      \"description\": \"asia-south2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-south2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-south2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-south2-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 750,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-south2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1260\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast1\",\n      \"description\": \"asia-southeast1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-southeast1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-southeast1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-southeast1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-southeast1\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1440\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast2\",\n      \"description\": \"asia-southeast2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-southeast2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-southeast2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/asia-southeast2-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-southeast2\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1280\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast1\",\n      \"description\": \"australia-southeast1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/australia-southeast1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/australia-southeast1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/australia-southeast1-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/australia-southeast1\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1480\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast2\",\n      \"description\": \"australia-southeast2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/australia-southeast2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/australia-southeast2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/australia-southeast2-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 750,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/australia-southeast2\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1450\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-central2\",\n      \"description\": \"europe-central2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-central2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-central2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-central2-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 750,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-central2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1350\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-north1\",\n      \"description\": \"europe-north1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-north1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-north1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-north1-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-north1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1540\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-southwest1\",\n      \"description\": \"europe-southwest1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-southwest1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-southwest1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-southwest1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 750,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-southwest1\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1100\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west1\",\n      \"description\": \"europe-west1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west1-d\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1590\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west10\",\n      \"description\": \"europe-west10\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west10-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west10-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west10-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 750,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west10\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1570\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west12\",\n      \"description\": \"europe-west12\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west12-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west12-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west12-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 750,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west12\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1290\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west2\",\n      \"description\": \"europe-west2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west2-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west2\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1300\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west3\",\n      \"description\": \"europe-west3\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west3-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west3-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west3-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west3\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1340\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west4\",\n      \"description\": \"europe-west4\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west4-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west4-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west4-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west4\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1380\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west6\",\n      \"description\": \"europe-west6\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west6-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west6-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west6-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 750,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west6\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1510\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west8\",\n      \"description\": \"europe-west8\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west8-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west8-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west8-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 750,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west8\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1520\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west9\",\n      \"description\": \"europe-west9\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west9-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west9-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/europe-west9-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 750,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west9\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1580\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central1\",\n      \"description\": \"me-central1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/me-central1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/me-central1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/me-central1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 750,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/me-central1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1600\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central2\",\n      \"description\": \"me-central2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/me-central2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/me-central2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/me-central2-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/me-central2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1560\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-west1\",\n      \"description\": \"me-west1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/me-west1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/me-west1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/me-west1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 750,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/me-west1\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1330\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast1\",\n      \"description\": \"northamerica-northeast1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/northamerica-northeast1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/northamerica-northeast1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/northamerica-northeast1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/northamerica-northeast1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1460\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast2\",\n      \"description\": \"northamerica-northeast2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/northamerica-northeast2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/northamerica-northeast2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/northamerica-northeast2-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 750,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/northamerica-northeast2\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1310\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-east1\",\n      \"description\": \"southamerica-east1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/southamerica-east1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/southamerica-east1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/southamerica-east1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/southamerica-east1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1490\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-west1\",\n      \"description\": \"southamerica-west1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/southamerica-west1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/southamerica-west1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/southamerica-west1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/southamerica-west1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1000\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1\",\n      \"description\": \"us-central1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 3270\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 12\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-central1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1230\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east1\",\n      \"description\": \"us-east1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-east1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-east1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-east1-d\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-east1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1270\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east4\",\n      \"description\": \"us-east4\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-east4-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-east4-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-east4-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-east4\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1530\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east5\",\n      \"description\": \"us-east5\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-east5-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-east5-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-east5-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 750,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-east5\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1550\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-south1\",\n      \"description\": \"us-south1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-south1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-south1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-south1-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 750,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-south1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1210\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west1\",\n      \"description\": \"us-west1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-west1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-west1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-west1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-west1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1360\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west2\",\n      \"description\": \"us-west2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-west2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-west2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-west2-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-west2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1420\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west3\",\n      \"description\": \"us-west3\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-west3-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-west3-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-west3-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-west3\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1430\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west4\",\n      \"description\": \"us-west4\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-west4-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-west4-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-west4-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-west4\",\n      \"supportsPzs\": false\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions\"\n}\n"
  },
  {
    "path": "test-data/dataproc1/json-dumps/compute-subnetworks-aggregated.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-dataproc1-aaaa/aggregated/subnetworks\",\n  \"items\": {\n    \"regions/africa-south1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2024-10-30T20:09:54.578-07:00\",\n          \"fingerprint\": \"K_TjomHZjl4=\",\n          \"gatewayAddress\": \"10.218.0.1\",\n          \"id\": \"2036526087303810029\",\n          \"ipCidrRange\": \"10.218.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/africa-south1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/africa-south1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-east1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2024-10-30T20:09:54.410-07:00\",\n          \"fingerprint\": \"rjs1ykuo3tw=\",\n          \"gatewayAddress\": \"10.140.0.1\",\n          \"id\": \"3951707731790875629\",\n          \"ipCidrRange\": \"10.140.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-east1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-east1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-east2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2024-10-30T20:09:54.383-07:00\",\n          \"fingerprint\": \"0rDL9-q9GaE=\",\n          \"gatewayAddress\": \"10.170.0.1\",\n          \"id\": \"1183485530085477357\",\n          \"ipCidrRange\": \"10.170.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-east2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-east2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-northeast1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2024-10-30T20:09:54.413-07:00\",\n          \"fingerprint\": \"IhO0OWYpHwc=\",\n          \"gatewayAddress\": \"10.146.0.1\",\n          \"id\": \"8204009831989726189\",\n          \"ipCidrRange\": \"10.146.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-northeast1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-northeast1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-northeast2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2024-10-30T20:09:54.427-07:00\",\n          \"fingerprint\": \"eOIJIvzkq0U=\",\n          \"gatewayAddress\": \"10.174.0.1\",\n          \"id\": \"8390895116147969005\",\n          \"ipCidrRange\": \"10.174.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-northeast2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-northeast2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-northeast3\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2024-10-30T20:09:54.457-07:00\",\n          \"fingerprint\": \"1ifQDQNTLeo=\",\n          \"gatewayAddress\": \"10.178.0.1\",\n          \"id\": \"7400179343601650669\",\n          \"ipCidrRange\": \"10.178.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-northeast3\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-northeast3/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-south1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2024-10-30T20:09:54.768-07:00\",\n          \"fingerprint\": \"aBuFpAtP0lo=\",\n          \"gatewayAddress\": \"10.160.0.1\",\n          \"id\": \"611661916532591597\",\n          \"ipCidrRange\": \"10.160.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-south1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-south1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-south2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2024-10-30T20:09:54.885-07:00\",\n          \"fingerprint\": \"pEMV2GosmqE=\",\n          \"gatewayAddress\": \"10.190.0.1\",\n          \"id\": \"6010033145830657005\",\n          \"ipCidrRange\": \"10.190.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-south2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-south2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-southeast1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2024-10-30T20:09:54.427-07:00\",\n          \"fingerprint\": \"RxxAabKP9Hc=\",\n          \"gatewayAddress\": \"10.148.0.1\",\n          \"id\": \"8664585932786060269\",\n          \"ipCidrRange\": \"10.148.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-southeast1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-southeast1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-southeast2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2024-10-30T20:09:54.591-07:00\",\n          \"fingerprint\": \"VttTaCLJKp4=\",\n          \"gatewayAddress\": \"10.184.0.1\",\n          \"id\": \"3500018798798261229\",\n          \"ipCidrRange\": \"10.184.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-southeast2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/asia-southeast2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/australia-southeast1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2024-10-30T20:09:55.911-07:00\",\n          \"fingerprint\": \"SKI1QPTXWkI=\",\n          \"gatewayAddress\": \"10.152.0.1\",\n          \"id\": \"4147067261302033388\",\n          \"ipCidrRange\": \"10.152.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/australia-southeast1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/australia-southeast1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/australia-southeast2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2024-10-30T20:09:54.768-07:00\",\n          \"fingerprint\": \"roDvcwyK4o0=\",\n          \"gatewayAddress\": \"10.192.0.1\",\n          \"id\": \"6144531807641488365\",\n          \"ipCidrRange\": \"10.192.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/australia-southeast2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/australia-southeast2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-central2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2024-10-30T20:09:54.230-07:00\",\n          \"fingerprint\": \"CzW-IgT2D9c=\",\n          \"gatewayAddress\": \"10.186.0.1\",\n          \"id\": \"7956940605631712237\",\n          \"ipCidrRange\": \"10.186.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-central2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-central2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-north1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2024-10-30T20:09:54.272-07:00\",\n          \"fingerprint\": \"zL79HscHFno=\",\n          \"gatewayAddress\": \"10.166.0.1\",\n          \"id\": \"2647689251940944877\",\n          \"ipCidrRange\": \"10.166.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-north1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-north1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-north2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2024-10-31T11:19:42.403-07:00\",\n          \"fingerprint\": \"ZYmDX0TlqDE=\",\n          \"gatewayAddress\": \"10.226.0.1\",\n          \"id\": \"284515129474577617\",\n          \"ipCidrRange\": \"10.226.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-north2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-north2/subnetworks/default\"\n        }\n      ]\n    },\n    \"regions/europe-southwest1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2024-10-30T20:09:54.237-07:00\",\n          \"fingerprint\": \"u6btqjgh5-w=\",\n          \"gatewayAddress\": \"10.204.0.1\",\n          \"id\": \"3269305898825108461\",\n          \"ipCidrRange\": \"10.204.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-southwest1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-southwest1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2024-10-30T20:09:54.224-07:00\",\n          \"fingerprint\": \"FkOS5NL5I4w=\",\n          \"gatewayAddress\": \"10.132.0.1\",\n          \"id\": \"8179850731144039405\",\n          \"ipCidrRange\": \"10.132.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west10\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2024-10-30T20:09:54.251-07:00\",\n          \"fingerprint\": \"kB0nmLE2Wbg=\",\n          \"gatewayAddress\": \"10.214.0.1\",\n          \"id\": \"6379349064262044653\",\n          \"ipCidrRange\": \"10.214.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west10\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west10/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west12\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2024-10-30T20:09:54.261-07:00\",\n          \"fingerprint\": \"9lS_X59YyYs=\",\n          \"gatewayAddress\": \"10.210.0.1\",\n          \"id\": \"6874450714933808109\",\n          \"ipCidrRange\": \"10.210.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west12\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west12/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2024-10-30T20:09:54.242-07:00\",\n          \"fingerprint\": \"zBIHvxFbsx4=\",\n          \"gatewayAddress\": \"10.154.0.1\",\n          \"id\": \"3213715802105531373\",\n          \"ipCidrRange\": \"10.154.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west3\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2024-10-30T20:09:54.248-07:00\",\n          \"fingerprint\": \"iF2usLrfY7s=\",\n          \"gatewayAddress\": \"10.156.0.1\",\n          \"id\": \"3344984691459443693\",\n          \"ipCidrRange\": \"10.156.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west3\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west3/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west4\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2024-10-30T20:09:54.261-07:00\",\n          \"fingerprint\": \"GcAa-AJ5MeA=\",\n          \"gatewayAddress\": \"10.164.0.1\",\n          \"id\": \"6790712910089767917\",\n          \"ipCidrRange\": \"10.164.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west4\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west4/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west6\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2024-10-30T20:09:54.280-07:00\",\n          \"fingerprint\": \"ttRYNmaXVRE=\",\n          \"gatewayAddress\": \"10.172.0.1\",\n          \"id\": \"644308323726740461\",\n          \"ipCidrRange\": \"10.172.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west6\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west6/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west8\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2024-10-30T20:09:54.232-07:00\",\n          \"fingerprint\": \"y4G90a6rbwI=\",\n          \"gatewayAddress\": \"10.198.0.1\",\n          \"id\": \"2760645573270785005\",\n          \"ipCidrRange\": \"10.198.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west8\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west8/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west9\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2024-10-30T20:09:54.221-07:00\",\n          \"fingerprint\": \"e0_OX9F989g=\",\n          \"gatewayAddress\": \"10.200.0.1\",\n          \"id\": \"5545354372014099437\",\n          \"ipCidrRange\": \"10.200.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west9\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/europe-west9/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/me-central1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2024-10-30T20:09:54.984-07:00\",\n          \"fingerprint\": \"ymImy2WxDJY=\",\n          \"gatewayAddress\": \"10.212.0.1\",\n          \"id\": \"3586886990555991021\",\n          \"ipCidrRange\": \"10.212.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/me-central1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/me-central1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/me-central2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/me-central2\"\n          }\n        ],\n        \"message\": \"There are no results for scope 'regions/me-central2' on this page.\"\n      }\n    },\n    \"regions/me-west1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2024-10-30T20:09:54.824-07:00\",\n          \"fingerprint\": \"nL9f780Q4D4=\",\n          \"gatewayAddress\": \"10.208.0.1\",\n          \"id\": \"7957203337371143149\",\n          \"ipCidrRange\": \"10.208.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/me-west1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/me-west1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/northamerica-northeast1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2024-10-30T20:09:54.093-07:00\",\n          \"fingerprint\": \"zLDvqvSbnf8=\",\n          \"gatewayAddress\": \"10.162.0.1\",\n          \"id\": \"4803467985028074477\",\n          \"ipCidrRange\": \"10.162.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/northamerica-northeast1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/northamerica-northeast1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/northamerica-northeast2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2024-10-30T20:09:54.194-07:00\",\n          \"fingerprint\": \"pXSmxJVG2lg=\",\n          \"gatewayAddress\": \"10.188.0.1\",\n          \"id\": \"8515223535920040941\",\n          \"ipCidrRange\": \"10.188.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/northamerica-northeast2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/northamerica-northeast2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/northamerica-south1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2024-10-31T06:34:58.775-07:00\",\n          \"fingerprint\": \"qiunGmbBzvg=\",\n          \"gatewayAddress\": \"10.224.0.1\",\n          \"id\": \"573987558628669805\",\n          \"ipCidrRange\": \"10.224.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/northamerica-south1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/northamerica-south1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/southamerica-east1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2024-10-30T20:09:54.330-07:00\",\n          \"fingerprint\": \"YxKOSMVqxe4=\",\n          \"gatewayAddress\": \"10.158.0.1\",\n          \"id\": \"5590051289209719789\",\n          \"ipCidrRange\": \"10.158.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/southamerica-east1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/southamerica-east1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/southamerica-west1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2024-10-30T20:09:55.991-07:00\",\n          \"fingerprint\": \"qEV74lNDNVQ=\",\n          \"gatewayAddress\": \"10.194.0.1\",\n          \"id\": \"592496428133075948\",\n          \"ipCidrRange\": \"10.194.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/southamerica-west1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/southamerica-west1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-central1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2024-10-30T20:09:54.091-07:00\",\n          \"fingerprint\": \"ep6a2XTTwjo=\",\n          \"gatewayAddress\": \"10.128.0.1\",\n          \"id\": \"360743471764425709\",\n          \"ipCidrRange\": \"10.128.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-central1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-central1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        },\n        {\n          \"creationTimestamp\": \"2024-10-30T20:33:01.295-07:00\",\n          \"enableFlowLogs\": false,\n          \"fingerprint\": \"Z7sFiSXz21Q=\",\n          \"gatewayAddress\": \"10.128.0.1\",\n          \"id\": \"760717609784001666\",\n          \"ipCidrRange\": \"10.128.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"logConfig\": {\n            \"enable\": false\n          },\n          \"name\": \"test-bad-subnet\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/test-bad-network\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-central1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-central1/subnetworks/test-bad-subnet\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-east1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2024-10-30T20:09:54.035-07:00\",\n          \"fingerprint\": \"aled3BHClzE=\",\n          \"gatewayAddress\": \"10.142.0.1\",\n          \"id\": \"1399812742043356141\",\n          \"ipCidrRange\": \"10.142.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-east1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-east1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-east4\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2024-10-30T20:09:54.051-07:00\",\n          \"fingerprint\": \"gFWfnsIodm4=\",\n          \"gatewayAddress\": \"10.150.0.1\",\n          \"id\": \"2785278774081440749\",\n          \"ipCidrRange\": \"10.150.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-east4\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-east4/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-east5\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2024-10-30T20:09:54.196-07:00\",\n          \"fingerprint\": \"kVNcfjD2LRs=\",\n          \"gatewayAddress\": \"10.202.0.1\",\n          \"id\": \"8813624914319723501\",\n          \"ipCidrRange\": \"10.202.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-east5\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-east5/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-east7\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2024-10-31T00:19:52.943-07:00\",\n          \"fingerprint\": \"Wn-jOZomxFk=\",\n          \"gatewayAddress\": \"10.196.0.1\",\n          \"id\": \"6483456266903392631\",\n          \"ipCidrRange\": \"10.196.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-east7\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-east7/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-south1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2024-10-30T20:09:54.114-07:00\",\n          \"fingerprint\": \"07LhpxVkTl0=\",\n          \"gatewayAddress\": \"10.206.0.1\",\n          \"id\": \"8688637599319804909\",\n          \"ipCidrRange\": \"10.206.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-south1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-south1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-west1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2024-10-30T20:09:54.194-07:00\",\n          \"fingerprint\": \"7274CF_uPYc=\",\n          \"gatewayAddress\": \"10.138.0.1\",\n          \"id\": \"3135513119184341997\",\n          \"ipCidrRange\": \"10.138.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-west1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-west1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-west2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2024-10-30T20:09:54.610-07:00\",\n          \"fingerprint\": \"TQw4X4emfCg=\",\n          \"gatewayAddress\": \"10.168.0.1\",\n          \"id\": \"3941601411750382573\",\n          \"ipCidrRange\": \"10.168.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-west2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-west2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-west3\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2024-10-30T20:09:54.157-07:00\",\n          \"fingerprint\": \"mo0aGmQD-1w=\",\n          \"gatewayAddress\": \"10.180.0.1\",\n          \"id\": \"1913782755277097965\",\n          \"ipCidrRange\": \"10.180.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-west3\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-west3/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-west4\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2024-10-30T20:09:54.355-07:00\",\n          \"fingerprint\": \"Hsp8Z3Q-kQc=\",\n          \"gatewayAddress\": \"10.182.0.1\",\n          \"id\": \"6977273284267035629\",\n          \"ipCidrRange\": \"10.182.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-west4\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-west4/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-west8\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2024-10-31T02:11:02.902-07:00\",\n          \"fingerprint\": \"v-TCDZnMAX4=\",\n          \"gatewayAddress\": \"10.220.0.1\",\n          \"id\": \"5081724102793688905\",\n          \"ipCidrRange\": \"10.220.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-west8\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-west8/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    }\n  },\n  \"kind\": \"compute#subnetworkAggregatedList\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/aggregated/subnetworks\"\n}\n"
  },
  {
    "path": "test-data/dataproc1/json-dumps/connectivity-test.json",
    "content": "{\n  \"name\": \"projects/gcpdiag-dataproc1-aaaa/locations/global/connectivityTests/vmexternalipconnectivitytest\",\n  \"source\": {\n    \"ipAddress\": \"10.10.0.3\",\n    \"network\": \"projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n    \"projectId\": \"gcpdiag-dataproc1-aaaa\",\n    \"cloudFunction\": {},\n    \"appEngineVersion\": {},\n    \"cloudRunRevision\": {}\n  },\n  \"destination\": {\n    \"ipAddress\": \"151.101.3.5\",\n    \"port\": 443,\n    \"networkType\": \"NON_GCP_NETWORK\",\n    \"cloudFunction\": {},\n    \"appEngineVersion\": {},\n    \"cloudRunRevision\": {}\n  },\n  \"protocol\": \"TCP\",\n  \"displayName\": \"vmexternalipconnectivitytest\",\n  \"createTime\": \"2024-05-31T16:02:44.883795965Z\",\n  \"updateTime\": \"2024-06-04T00:31:09.639861810Z\",\n  \"reachabilityDetails\": {\n    \"result\": \"REACHABLE\",\n    \"verifyTime\": \"2024-06-04T00:31:09.450544252Z\",\n    \"traces\": [\n      {\n        \"endpointInfo\": {\n          \"sourceIp\": \"10.10.0.3\",\n          \"destinationIp\": \"151.101.3.5\",\n          \"protocol\": \"TCP\",\n          \"sourcePort\": 63951,\n          \"destinationPort\": 443,\n          \"sourceNetworkUri\": \"projects/gcpdiag-dataproc1-aaaa/global/networks/default\"\n        },\n        \"steps\": [\n          {\n            \"description\": \"Initial state: packet originating from a Compute Engine instance.\",\n            \"state\": \"START_FROM_INSTANCE\",\n            \"projectId\": \"gcpdiag-dataproc1-aaaa\",\n            \"instance\": {\n              \"displayName\": \"private-linux-valid\",\n              \"uri\": \"projects/gcpdiag-dataproc1-aaaa/zones/us-central1-a/instances/private-linux-valid\",\n              \"interface\": \"nic0\",\n              \"networkUri\": \"projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n              \"internalIp\": \"10.10.0.3\",\n              \"networkTags\": [\n                \"valid-vpc-instance-private\"\n              ]\n            }\n          },\n          {\n            \"description\": \"Config checking state: verify EGRESS firewall rule.\",\n            \"state\": \"APPLY_EGRESS_FIREWALL_RULE\",\n            \"projectId\": \"gcpdiag-dataproc1-aaaa\",\n            \"firewall\": {\n              \"displayName\": \"private-linux-egress-allow\",\n              \"uri\": \"projects/gcpdiag-dataproc1-aaaa/global/firewalls/private-linux-egress-allow\",\n              \"direction\": \"EGRESS\",\n              \"action\": \"ALLOW\",\n              \"priority\": 920,\n              \"networkUri\": \"projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n              \"targetTags\": [\n                \"valid-vpc-instance-private\"\n              ],\n              \"firewallRuleType\": \"VPC_FIREWALL_RULE\"\n            }\n          },\n          {\n            \"description\": \"Config checking state: verify route.\",\n            \"state\": \"APPLY_ROUTE\",\n            \"projectId\": \"gcpdiag-dataproc1-aaaa\",\n            \"route\": {\n              \"displayName\": \"default-route-733dd203fb86133b\",\n              \"uri\": \"projects/gcpdiag-dataproc1-aaaa/global/routes/default-route-733dd203fb86133b\",\n              \"destIpRange\": \"0.0.0.0/0\",\n              \"nextHop\": \"internet gateway\",\n              \"networkUri\": \"projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n              \"priority\": 1000,\n              \"routeType\": \"STATIC\",\n              \"nextHopType\": \"NEXT_HOP_INTERNET_GATEWAY\",\n              \"routeScope\": \"NETWORK\"\n            }\n          },\n          {\n            \"description\": \"Transition state: packet header translated due to Cloud NAT and NAT IP chosen randomly from [34.123.41.124/32].\",\n            \"state\": \"NAT\",\n            \"projectId\": \"gcpdiag-dataproc1-aaaa\",\n            \"nat\": {\n              \"type\": \"CLOUD_NAT\",\n              \"protocol\": \"TCP\",\n              \"networkUri\": \"projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n              \"oldSourceIp\": \"10.10.0.3\",\n              \"newSourceIp\": \"34.123.41.124\",\n              \"oldDestinationIp\": \"151.101.3.5\",\n              \"newDestinationIp\": \"151.101.3.5\",\n              \"oldSourcePort\": 63951,\n              \"newSourcePort\": 49732,\n              \"oldDestinationPort\": 443,\n              \"newDestinationPort\": 443,\n              \"routerUri\": \"projects/gcpdiag-dataproc1-aaaa/regions/us-central1/routers/nat-router\",\n              \"natGatewayName\": \"nat-gateway\"\n            }\n          },\n          {\n            \"description\": \"Final state: packet delivered to Internet.\",\n            \"state\": \"DELIVER\",\n            \"deliver\": {\n              \"target\": \"INTERNET\",\n              \"ipAddress\": \"151.101.3.5\"\n            }\n          }\n        ],\n        \"forwardTraceId\": 1\n      }\n    ]\n  },\n  \"probingDetails\": {\n    \"result\": \"REACHABLE\",\n    \"verifyTime\": \"2024-06-04T00:30:59.820702Z\",\n    \"sentProbeCount\": 50,\n    \"successfulProbeCount\": 50,\n    \"probingLatency\": {\n      \"latencyPercentiles\": [\n        {\n          \"percent\": 50,\n          \"latencyMicros\": \"4940\"\n        },\n        {\n          \"percent\": 95,\n          \"latencyMicros\": \"5094\"\n        }\n      ]\n    },\n    \"destinationEgressLocation\": {\n      \"metropolitanArea\": \"Chicago, IL, US\"\n    }\n  }\n}\n"
  },
  {
    "path": "test-data/dataproc1/json-dumps/dataproc-clusters-us-central1.json",
    "content": "{\n  \"clusters\": [\n    {\n      \"projectId\": \"gcpdiag-dataproc1-aaaa\",\n      \"clusterName\": \"good\",\n      \"config\": {\n        \"configBucket\": \"dataproc-staging-us-central1-12340005-9v6173vh\",\n        \"tempBucket\": \"dataproc-temp-us-central1-12340005-xslkmij6\",\n        \"gceClusterConfig\": {\n          \"zoneUri\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f\",\n          \"networkUri\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"serviceAccountScopes\": [\n            \"https://www.googleapis.com/auth/cloud-platform\"\n          ],\n          \"internalIpOnly\": false,\n          \"shieldedInstanceConfig\": {\n            \"enableSecureBoot\": true,\n            \"enableVtpm\": true,\n            \"enableIntegrityMonitoring\": true\n          }\n        },\n        \"masterConfig\": {\n          \"numInstances\": 1,\n          \"instanceNames\": [\n            \"good-m\"\n          ],\n          \"imageUri\": \"https://www.googleapis.com/compute/v1/projects/cloud-dataproc/global/images/dataproc-2-2-deb12-20241018-045100-rc01\",\n          \"machineTypeUri\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f/machineTypes/e2-medium\",\n          \"diskConfig\": {\n            \"bootDiskSizeGb\": 30,\n            \"bootDiskType\": \"pd-standard\"\n          },\n          \"minCpuPlatform\": \"AUTOMATIC\",\n          \"preemptibility\": \"NON_PREEMPTIBLE\"\n        },\n        \"workerConfig\": {\n          \"numInstances\": 2,\n          \"instanceNames\": [\n            \"good-w-0\",\n            \"good-w-1\"\n          ],\n          \"imageUri\": \"https://www.googleapis.com/compute/v1/projects/cloud-dataproc/global/images/dataproc-2-2-deb12-20241018-045100-rc01\",\n          \"machineTypeUri\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f/machineTypes/e2-medium\",\n          \"diskConfig\": {\n            \"bootDiskSizeGb\": 30,\n            \"bootDiskType\": \"pd-standard\"\n          },\n          \"minCpuPlatform\": \"AUTOMATIC\",\n          \"preemptibility\": \"NON_PREEMPTIBLE\"\n        },\n        \"softwareConfig\": {\n          \"imageVersion\": \"2.2.38-debian12\",\n          \"properties\": {\n            \"capacity-scheduler:yarn.scheduler.capacity.resource-calculator\": \"org.apache.hadoop.yarn.util.resource.DominantResourceCalculator\",\n            \"capacity-scheduler:yarn.scheduler.capacity.root.default.ordering-policy\": \"fair\",\n            \"core:fs.gs.block.size\": \"134217728\",\n            \"core:fs.gs.metadata.cache.enable\": \"false\",\n            \"core:hadoop.ssl.enabled.protocols\": \"TLSv1,TLSv1.1,TLSv1.2\",\n            \"distcp:mapreduce.map.java.opts\": \"-Xmx576m\",\n            \"distcp:mapreduce.map.memory.mb\": \"768\",\n            \"distcp:mapreduce.reduce.java.opts\": \"-Xmx576m\",\n            \"distcp:mapreduce.reduce.memory.mb\": \"768\",\n            \"hadoop-env:HADOOP_DATANODE_OPTS\": \"-Xmx512m\",\n            \"hdfs:dfs.datanode.address\": \"0.0.0.0:9866\",\n            \"hdfs:dfs.datanode.http.address\": \"0.0.0.0:9864\",\n            \"hdfs:dfs.datanode.https.address\": \"0.0.0.0:9865\",\n            \"hdfs:dfs.datanode.ipc.address\": \"0.0.0.0:9867\",\n            \"hdfs:dfs.namenode.handler.count\": \"20\",\n            \"hdfs:dfs.namenode.http-address\": \"0.0.0.0:9870\",\n            \"hdfs:dfs.namenode.https-address\": \"0.0.0.0:9871\",\n            \"hdfs:dfs.namenode.lifeline.rpc-address\": \"good-m:8050\",\n            \"hdfs:dfs.namenode.secondary.http-address\": \"0.0.0.0:9868\",\n            \"hdfs:dfs.namenode.secondary.https-address\": \"0.0.0.0:9869\",\n            \"hdfs:dfs.namenode.service.handler.count\": \"10\",\n            \"hdfs:dfs.namenode.servicerpc-address\": \"good-m:8051\",\n            \"mapred-env:HADOOP_JOB_HISTORYSERVER_HEAPSIZE\": \"1024\",\n            \"mapred:mapreduce.job.maps\": \"9\",\n            \"mapred:mapreduce.job.reduce.slowstart.completedmaps\": \"0.95\",\n            \"mapred:mapreduce.job.reduces\": \"1\",\n            \"mapred:mapreduce.jobhistory.recovery.store.class\": \"org.apache.hadoop.mapreduce.v2.hs.HistoryServerLeveldbStateStoreService\",\n            \"mapred:mapreduce.map.cpu.vcores\": \"1\",\n            \"mapred:mapreduce.map.java.opts\": \"-Xmx1311m\",\n            \"mapred:mapreduce.map.memory.mb\": \"1639\",\n            \"mapred:mapreduce.reduce.cpu.vcores\": \"2\",\n            \"mapred:mapreduce.reduce.java.opts\": \"-Xmx2622m\",\n            \"mapred:mapreduce.reduce.memory.mb\": \"3278\",\n            \"mapred:mapreduce.task.io.sort.mb\": \"256\",\n            \"mapred:yarn.app.mapreduce.am.command-opts\": \"-Xmx1311m\",\n            \"mapred:yarn.app.mapreduce.am.resource.cpu-vcores\": \"1\",\n            \"mapred:yarn.app.mapreduce.am.resource.mb\": \"1639\",\n            \"spark-env:SPARK_DAEMON_MEMORY\": \"1024m\",\n            \"spark:spark.driver.maxResultSize\": \"512m\",\n            \"spark:spark.driver.memory\": \"1024m\",\n            \"spark:spark.executor.cores\": \"1\",\n            \"spark:spark.executor.instances\": \"2\",\n            \"spark:spark.executor.memory\": \"1255m\",\n            \"spark:spark.executorEnv.OPENBLAS_NUM_THREADS\": \"1\",\n            \"spark:spark.plugins.defaultList\": \"com.google.cloud.dataproc.DataprocSparkPlugin\",\n            \"spark:spark.scheduler.mode\": \"FAIR\",\n            \"spark:spark.sql.cbo.enabled\": \"true\",\n            \"spark:spark.sql.optimizer.runtime.bloomFilter.join.pattern.enabled\": \"true\",\n            \"spark:spark.ui.port\": \"0\",\n            \"spark:spark.yarn.am.memory\": \"640m\",\n            \"yarn-env:YARN_NODEMANAGER_HEAPSIZE\": \"409\",\n            \"yarn-env:YARN_RESOURCEMANAGER_HEAPSIZE\": \"1024\",\n            \"yarn-env:YARN_TIMELINESERVER_HEAPSIZE\": \"1024\",\n            \"yarn:yarn.nodemanager.address\": \"0.0.0.0:8026\",\n            \"yarn:yarn.nodemanager.resource.cpu-vcores\": \"2\",\n            \"yarn:yarn.nodemanager.resource.memory-mb\": \"3278\",\n            \"yarn:yarn.resourcemanager.decommissioning-nodes-watcher.decommission-if-no-shuffle-data\": \"true\",\n            \"yarn:yarn.resourcemanager.nodemanager-graceful-decommission-timeout-secs\": \"86400\",\n            \"yarn:yarn.scheduler.maximum-allocation-mb\": \"3278\",\n            \"yarn:yarn.scheduler.minimum-allocation-mb\": \"1\"\n          }\n        },\n        \"endpointConfig\": {}\n      },\n      \"status\": {\n        \"state\": \"RUNNING\",\n        \"stateStartTime\": \"2024-10-31T03:38:22.167627Z\"\n      },\n      \"clusterUuid\": \"ae0a9260-f4a1-49ad-9593-8451a2536e59\",\n      \"statusHistory\": [\n        {\n          \"state\": \"CREATING\",\n          \"stateStartTime\": \"2024-10-31T03:32:52.365558Z\"\n        }\n      ],\n      \"labels\": {\n        \"goog-dataproc-cluster-name\": \"good\",\n        \"goog-dataproc-cluster-uuid\": \"ae0a9260-f4a1-49ad-9593-8451a2536e59\",\n        \"goog-dataproc-location\": \"us-central1\",\n        \"goog-dataproc-autozone\": \"enabled\"\n      },\n      \"metrics\": {\n        \"hdfsMetrics\": {\n          \"dfs-capacity-used\": \"57344\",\n          \"dfs-nodes-running\": \"2\",\n          \"dfs-capacity-total\": \"62920859648\",\n          \"dfs-blocks-missing-repl-one\": \"0\",\n          \"dfs-nodes-decommissioned\": \"0\",\n          \"dfs-capacity-present\": \"29422120960\",\n          \"dfs-capacity-remaining\": \"29422063616\",\n          \"dfs-nodes-decommissioning\": \"0\",\n          \"dfs-blocks-missing\": \"0\",\n          \"dfs-blocks-pending-deletion\": \"0\",\n          \"dfs-blocks-under-replication\": \"0\",\n          \"dfs-blocks-corrupt\": \"0\",\n          \"dfs-blocks-default-replication-factor\": \"2\"\n        },\n        \"yarnMetrics\": {\n          \"yarn-nodes-shutdown\": \"0\",\n          \"yarn-nodes-unhealthy\": \"0\",\n          \"yarn-memory-mb-available\": \"6556\",\n          \"yarn-containers-reserved\": \"0\",\n          \"yarn-memory-mb-pending\": \"0\",\n          \"yarn-nodes-rebooted\": \"0\",\n          \"yarn-memory-mb-total\": \"6556\",\n          \"yarn-containers-pending\": \"0\",\n          \"yarn-apps-completed\": \"0\",\n          \"yarn-apps-running\": \"0\",\n          \"yarn-vcores-allocated\": \"0\",\n          \"yarn-vcores-reserved\": \"0\",\n          \"yarn-memory-mb-reserved\": \"0\",\n          \"yarn-nodes-active\": \"2\",\n          \"yarn-apps-pending\": \"0\",\n          \"yarn-apps-failed\": \"0\",\n          \"yarn-containers-allocated\": \"0\",\n          \"yarn-memory-mb-allocated\": \"0\",\n          \"yarn-apps-killed\": \"0\",\n          \"yarn-vcores-pending\": \"0\",\n          \"yarn-nodes-lost\": \"0\",\n          \"yarn-nodes-decommissioned\": \"0\",\n          \"yarn-nodes-new\": \"0\",\n          \"yarn-vcores-available\": \"4\",\n          \"yarn-vcores-total\": \"4\",\n          \"yarn-nodes-decommissioning\": \"0\",\n          \"yarn-apps-submitted\": \"0\"\n        }\n      }\n    },\n    {\n      \"projectId\": \"gcpdiag-dataproc1-aaaa\",\n      \"clusterName\": \"test-best-practices-disabled\",\n      \"config\": {\n        \"configBucket\": \"dataproc-staging-us-central1-12340005-9v6173vh\",\n        \"tempBucket\": \"dataproc-temp-us-central1-12340005-xslkmij6\",\n        \"gceClusterConfig\": {\n          \"zoneUri\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f\",\n          \"networkUri\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"serviceAccountScopes\": [\n            \"https://www.googleapis.com/auth/cloud-platform\"\n          ],\n          \"internalIpOnly\": false,\n          \"shieldedInstanceConfig\": {\n            \"enableSecureBoot\": true,\n            \"enableVtpm\": true,\n            \"enableIntegrityMonitoring\": true\n          }\n        },\n        \"masterConfig\": {\n          \"numInstances\": 1,\n          \"instanceNames\": [\n            \"test-best-practices-disabled-m\"\n          ],\n          \"imageUri\": \"https://www.googleapis.com/compute/v1/projects/cloud-dataproc/global/images/dataproc-2-2-deb12-20241018-045100-rc01\",\n          \"machineTypeUri\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f/machineTypes/e2-medium\",\n          \"diskConfig\": {\n            \"bootDiskSizeGb\": 30,\n            \"bootDiskType\": \"pd-standard\"\n          },\n          \"minCpuPlatform\": \"AUTOMATIC\",\n          \"preemptibility\": \"NON_PREEMPTIBLE\"\n        },\n        \"workerConfig\": {\n          \"numInstances\": 2,\n          \"instanceNames\": [\n            \"test-best-practices-disabled-w-0\",\n            \"test-best-practices-disabled-w-1\"\n          ],\n          \"imageUri\": \"https://www.googleapis.com/compute/v1/projects/cloud-dataproc/global/images/dataproc-2-2-deb12-20241018-045100-rc01\",\n          \"machineTypeUri\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-f/machineTypes/e2-medium\",\n          \"diskConfig\": {\n            \"bootDiskSizeGb\": 30,\n            \"bootDiskType\": \"pd-standard\"\n          },\n          \"minCpuPlatform\": \"AUTOMATIC\",\n          \"preemptibility\": \"NON_PREEMPTIBLE\"\n        },\n        \"softwareConfig\": {\n          \"imageVersion\": \"2.2.38-debian12\",\n          \"properties\": {\n            \"capacity-scheduler:yarn.scheduler.capacity.resource-calculator\": \"org.apache.hadoop.yarn.util.resource.DominantResourceCalculator\",\n            \"capacity-scheduler:yarn.scheduler.capacity.root.default.ordering-policy\": \"fair\",\n            \"core:fs.gs.block.size\": \"134217728\",\n            \"core:fs.gs.metadata.cache.enable\": \"false\",\n            \"core:hadoop.ssl.enabled.protocols\": \"TLSv1,TLSv1.1,TLSv1.2\",\n            \"dataproc:dataproc.logging.stackdriver.enable\": \"false\",\n            \"distcp:mapreduce.map.java.opts\": \"-Xmx576m\",\n            \"distcp:mapreduce.map.memory.mb\": \"768\",\n            \"distcp:mapreduce.reduce.java.opts\": \"-Xmx576m\",\n            \"distcp:mapreduce.reduce.memory.mb\": \"768\",\n            \"hadoop-env:HADOOP_DATANODE_OPTS\": \"-Xmx512m\",\n            \"hdfs:dfs.datanode.address\": \"0.0.0.0:9866\",\n            \"hdfs:dfs.datanode.http.address\": \"0.0.0.0:9864\",\n            \"hdfs:dfs.datanode.https.address\": \"0.0.0.0:9865\",\n            \"hdfs:dfs.datanode.ipc.address\": \"0.0.0.0:9867\",\n            \"hdfs:dfs.namenode.handler.count\": \"20\",\n            \"hdfs:dfs.namenode.http-address\": \"0.0.0.0:9870\",\n            \"hdfs:dfs.namenode.https-address\": \"0.0.0.0:9871\",\n            \"hdfs:dfs.namenode.lifeline.rpc-address\": \"test-best-practices-disabled-m:8050\",\n            \"hdfs:dfs.namenode.secondary.http-address\": \"0.0.0.0:9868\",\n            \"hdfs:dfs.namenode.secondary.https-address\": \"0.0.0.0:9869\",\n            \"hdfs:dfs.namenode.service.handler.count\": \"10\",\n            \"hdfs:dfs.namenode.servicerpc-address\": \"test-best-practices-disabled-m:8051\",\n            \"mapred-env:HADOOP_JOB_HISTORYSERVER_HEAPSIZE\": \"1024\",\n            \"mapred:mapreduce.job.maps\": \"9\",\n            \"mapred:mapreduce.job.reduce.slowstart.completedmaps\": \"0.95\",\n            \"mapred:mapreduce.job.reduces\": \"1\",\n            \"mapred:mapreduce.jobhistory.recovery.store.class\": \"org.apache.hadoop.mapreduce.v2.hs.HistoryServerLeveldbStateStoreService\",\n            \"mapred:mapreduce.map.cpu.vcores\": \"1\",\n            \"mapred:mapreduce.map.java.opts\": \"-Xmx1311m\",\n            \"mapred:mapreduce.map.memory.mb\": \"1639\",\n            \"mapred:mapreduce.reduce.cpu.vcores\": \"2\",\n            \"mapred:mapreduce.reduce.java.opts\": \"-Xmx2622m\",\n            \"mapred:mapreduce.reduce.memory.mb\": \"3278\",\n            \"mapred:mapreduce.task.io.sort.mb\": \"256\",\n            \"mapred:yarn.app.mapreduce.am.command-opts\": \"-Xmx1311m\",\n            \"mapred:yarn.app.mapreduce.am.resource.cpu-vcores\": \"1\",\n            \"mapred:yarn.app.mapreduce.am.resource.mb\": \"1639\",\n            \"spark-env:SPARK_DAEMON_MEMORY\": \"1024m\",\n            \"spark:spark.driver.maxResultSize\": \"512m\",\n            \"spark:spark.driver.memory\": \"1024m\",\n            \"spark:spark.executor.cores\": \"1\",\n            \"spark:spark.executor.instances\": \"2\",\n            \"spark:spark.executor.memory\": \"1255m\",\n            \"spark:spark.executorEnv.OPENBLAS_NUM_THREADS\": \"1\",\n            \"spark:spark.plugins.defaultList\": \"com.google.cloud.dataproc.DataprocSparkPlugin\",\n            \"spark:spark.scheduler.mode\": \"FAIR\",\n            \"spark:spark.sql.cbo.enabled\": \"true\",\n            \"spark:spark.sql.optimizer.runtime.bloomFilter.join.pattern.enabled\": \"true\",\n            \"spark:spark.ui.port\": \"0\",\n            \"spark:spark.yarn.am.memory\": \"640m\",\n            \"yarn-env:YARN_NODEMANAGER_HEAPSIZE\": \"409\",\n            \"yarn-env:YARN_RESOURCEMANAGER_HEAPSIZE\": \"1024\",\n            \"yarn-env:YARN_TIMELINESERVER_HEAPSIZE\": \"1024\",\n            \"yarn:yarn.nodemanager.address\": \"0.0.0.0:8026\",\n            \"yarn:yarn.nodemanager.resource.cpu-vcores\": \"2\",\n            \"yarn:yarn.nodemanager.resource.memory-mb\": \"3278\",\n            \"yarn:yarn.resourcemanager.decommissioning-nodes-watcher.decommission-if-no-shuffle-data\": \"true\",\n            \"yarn:yarn.resourcemanager.nodemanager-graceful-decommission-timeout-secs\": \"86400\",\n            \"yarn:yarn.scheduler.maximum-allocation-mb\": \"3278\",\n            \"yarn:yarn.scheduler.minimum-allocation-mb\": \"1\"\n          }\n        },\n        \"endpointConfig\": {}\n      },\n      \"status\": {\n        \"state\": \"RUNNING\",\n        \"stateStartTime\": \"2024-10-31T03:37:34.753007Z\"\n      },\n      \"clusterUuid\": \"fa7689da-2c32-4258-af4b-571af491f0bd\",\n      \"statusHistory\": [\n        {\n          \"state\": \"CREATING\",\n          \"stateStartTime\": \"2024-10-31T03:32:52.067616Z\"\n        }\n      ],\n      \"labels\": {\n        \"goog-dataproc-cluster-name\": \"test-best-practices-disabled\",\n        \"goog-dataproc-cluster-uuid\": \"fa7689da-2c32-4258-af4b-571af491f0bd\",\n        \"goog-dataproc-location\": \"us-central1\",\n        \"goog-dataproc-autozone\": \"enabled\"\n      },\n      \"metrics\": {\n        \"hdfsMetrics\": {\n          \"dfs-capacity-used\": \"57344\",\n          \"dfs-nodes-running\": \"2\",\n          \"dfs-capacity-total\": \"62920859648\",\n          \"dfs-blocks-missing-repl-one\": \"0\",\n          \"dfs-nodes-decommissioned\": \"0\",\n          \"dfs-capacity-present\": \"15304220672\",\n          \"dfs-capacity-remaining\": \"15304163328\",\n          \"dfs-nodes-decommissioning\": \"0\",\n          \"dfs-blocks-missing\": \"0\",\n          \"dfs-blocks-pending-deletion\": \"0\",\n          \"dfs-blocks-under-replication\": \"0\",\n          \"dfs-blocks-corrupt\": \"0\",\n          \"dfs-blocks-default-replication-factor\": \"2\"\n        },\n        \"yarnMetrics\": {\n          \"yarn-nodes-shutdown\": \"0\",\n          \"yarn-nodes-unhealthy\": \"0\",\n          \"yarn-memory-mb-available\": \"6556\",\n          \"yarn-containers-reserved\": \"0\",\n          \"yarn-memory-mb-pending\": \"0\",\n          \"yarn-nodes-rebooted\": \"0\",\n          \"yarn-memory-mb-total\": \"6556\",\n          \"yarn-containers-pending\": \"0\",\n          \"yarn-apps-completed\": \"0\",\n          \"yarn-apps-running\": \"0\",\n          \"yarn-vcores-allocated\": \"0\",\n          \"yarn-vcores-reserved\": \"0\",\n          \"yarn-memory-mb-reserved\": \"0\",\n          \"yarn-nodes-active\": \"2\",\n          \"yarn-apps-pending\": \"0\",\n          \"yarn-apps-failed\": \"0\",\n          \"yarn-containers-allocated\": \"0\",\n          \"yarn-memory-mb-allocated\": \"0\",\n          \"yarn-apps-killed\": \"0\",\n          \"yarn-vcores-pending\": \"0\",\n          \"yarn-nodes-lost\": \"0\",\n          \"yarn-nodes-decommissioned\": \"0\",\n          \"yarn-nodes-new\": \"0\",\n          \"yarn-vcores-available\": \"4\",\n          \"yarn-vcores-total\": \"4\",\n          \"yarn-nodes-decommissioning\": \"0\",\n          \"yarn-apps-submitted\": \"0\"\n        }\n      }\n    },\n    {\n      \"projectId\": \"gcpdiag-dataproc1-aaaa\",\n      \"clusterName\": \"test-best-practices-enabled\",\n      \"config\": {\n        \"configBucket\": \"dataproc-staging-us-central1-12340005-9v6173vh\",\n        \"tempBucket\": \"dataproc-temp-us-central1-12340005-xslkmij6\",\n        \"gceClusterConfig\": {\n          \"zoneUri\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-b\",\n          \"networkUri\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/global/networks/default\",\n          \"serviceAccountScopes\": [\n            \"https://www.googleapis.com/auth/cloud-platform\"\n          ],\n          \"internalIpOnly\": false,\n          \"serviceAccount\": \"saworker@gcpdiag-dataproc1-aaaa.iam.gserviceaccount.com\",\n          \"shieldedInstanceConfig\": {\n            \"enableSecureBoot\": true,\n            \"enableVtpm\": true,\n            \"enableIntegrityMonitoring\": true\n          }\n        },\n        \"masterConfig\": {\n          \"numInstances\": 1,\n          \"instanceNames\": [\n            \"test-best-practices-enabled-m\"\n          ],\n          \"imageUri\": \"https://www.googleapis.com/compute/v1/projects/cloud-dataproc/global/images/dataproc-2-2-deb12-20241018-045100-rc01\",\n          \"machineTypeUri\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-b/machineTypes/e2-medium\",\n          \"diskConfig\": {\n            \"bootDiskSizeGb\": 30,\n            \"bootDiskType\": \"pd-standard\"\n          },\n          \"minCpuPlatform\": \"AUTOMATIC\",\n          \"preemptibility\": \"NON_PREEMPTIBLE\"\n        },\n        \"workerConfig\": {\n          \"numInstances\": 2,\n          \"instanceNames\": [\n            \"test-best-practices-enabled-w-0\",\n            \"test-best-practices-enabled-w-1\"\n          ],\n          \"imageUri\": \"https://www.googleapis.com/compute/v1/projects/cloud-dataproc/global/images/dataproc-2-2-deb12-20241018-045100-rc01\",\n          \"machineTypeUri\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-b/machineTypes/e2-medium\",\n          \"diskConfig\": {\n            \"bootDiskSizeGb\": 30,\n            \"bootDiskType\": \"pd-standard\"\n          },\n          \"minCpuPlatform\": \"AUTOMATIC\",\n          \"preemptibility\": \"NON_PREEMPTIBLE\"\n        },\n        \"softwareConfig\": {\n          \"imageVersion\": \"2.2.38-debian12\",\n          \"properties\": {\n            \"capacity-scheduler:yarn.scheduler.capacity.resource-calculator\": \"org.apache.hadoop.yarn.util.resource.DominantResourceCalculator\",\n            \"capacity-scheduler:yarn.scheduler.capacity.root.default.ordering-policy\": \"fair\",\n            \"core:fs.gs.block.size\": \"134217728\",\n            \"core:fs.gs.metadata.cache.enable\": \"false\",\n            \"core:hadoop.ssl.enabled.protocols\": \"TLSv1,TLSv1.1,TLSv1.2\",\n            \"dataproc:dataproc.monitoring.stackdriver.enable\": \"true\",\n            \"distcp:mapreduce.map.java.opts\": \"-Xmx576m\",\n            \"distcp:mapreduce.map.memory.mb\": \"768\",\n            \"distcp:mapreduce.reduce.java.opts\": \"-Xmx576m\",\n            \"distcp:mapreduce.reduce.memory.mb\": \"768\",\n            \"hadoop-env:HADOOP_DATANODE_OPTS\": \"-Xmx512m\",\n            \"hdfs:dfs.datanode.address\": \"0.0.0.0:9866\",\n            \"hdfs:dfs.datanode.http.address\": \"0.0.0.0:9864\",\n            \"hdfs:dfs.datanode.https.address\": \"0.0.0.0:9865\",\n            \"hdfs:dfs.datanode.ipc.address\": \"0.0.0.0:9867\",\n            \"hdfs:dfs.namenode.handler.count\": \"20\",\n            \"hdfs:dfs.namenode.http-address\": \"0.0.0.0:9870\",\n            \"hdfs:dfs.namenode.https-address\": \"0.0.0.0:9871\",\n            \"hdfs:dfs.namenode.lifeline.rpc-address\": \"test-best-practices-enabled-m:8050\",\n            \"hdfs:dfs.namenode.secondary.http-address\": \"0.0.0.0:9868\",\n            \"hdfs:dfs.namenode.secondary.https-address\": \"0.0.0.0:9869\",\n            \"hdfs:dfs.namenode.service.handler.count\": \"10\",\n            \"hdfs:dfs.namenode.servicerpc-address\": \"test-best-practices-enabled-m:8051\",\n            \"mapred-env:HADOOP_JOB_HISTORYSERVER_HEAPSIZE\": \"1024\",\n            \"mapred:mapreduce.job.maps\": \"9\",\n            \"mapred:mapreduce.job.reduce.slowstart.completedmaps\": \"0.95\",\n            \"mapred:mapreduce.job.reduces\": \"1\",\n            \"mapred:mapreduce.jobhistory.recovery.store.class\": \"org.apache.hadoop.mapreduce.v2.hs.HistoryServerLeveldbStateStoreService\",\n            \"mapred:mapreduce.map.cpu.vcores\": \"1\",\n            \"mapred:mapreduce.map.java.opts\": \"-Xmx1311m\",\n            \"mapred:mapreduce.map.memory.mb\": \"1639\",\n            \"mapred:mapreduce.reduce.cpu.vcores\": \"2\",\n            \"mapred:mapreduce.reduce.java.opts\": \"-Xmx2622m\",\n            \"mapred:mapreduce.reduce.memory.mb\": \"3278\",\n            \"mapred:mapreduce.task.io.sort.mb\": \"256\",\n            \"mapred:yarn.app.mapreduce.am.command-opts\": \"-Xmx1311m\",\n            \"mapred:yarn.app.mapreduce.am.resource.cpu-vcores\": \"1\",\n            \"mapred:yarn.app.mapreduce.am.resource.mb\": \"1639\",\n            \"spark-env:SPARK_DAEMON_MEMORY\": \"1024m\",\n            \"spark:spark.driver.maxResultSize\": \"512m\",\n            \"spark:spark.driver.memory\": \"1024m\",\n            \"spark:spark.executor.cores\": \"1\",\n            \"spark:spark.executor.instances\": \"2\",\n            \"spark:spark.executor.memory\": \"1255m\",\n            \"spark:spark.executorEnv.OPENBLAS_NUM_THREADS\": \"1\",\n            \"spark:spark.plugins.defaultList\": \"com.google.cloud.dataproc.DataprocSparkPlugin\",\n            \"spark:spark.scheduler.mode\": \"FAIR\",\n            \"spark:spark.sql.cbo.enabled\": \"true\",\n            \"spark:spark.sql.optimizer.runtime.bloomFilter.join.pattern.enabled\": \"true\",\n            \"spark:spark.ui.port\": \"0\",\n            \"spark:spark.yarn.am.memory\": \"640m\",\n            \"yarn-env:YARN_NODEMANAGER_HEAPSIZE\": \"409\",\n            \"yarn-env:YARN_RESOURCEMANAGER_HEAPSIZE\": \"1024\",\n            \"yarn-env:YARN_TIMELINESERVER_HEAPSIZE\": \"1024\",\n            \"yarn:yarn.nodemanager.address\": \"0.0.0.0:8026\",\n            \"yarn:yarn.nodemanager.resource.cpu-vcores\": \"2\",\n            \"yarn:yarn.nodemanager.resource.memory-mb\": \"3278\",\n            \"yarn:yarn.resourcemanager.decommissioning-nodes-watcher.decommission-if-no-shuffle-data\": \"true\",\n            \"yarn:yarn.resourcemanager.nodemanager-graceful-decommission-timeout-secs\": \"86400\",\n            \"yarn:yarn.scheduler.maximum-allocation-mb\": \"3278\",\n            \"yarn:yarn.scheduler.minimum-allocation-mb\": \"1\"\n          }\n        },\n        \"endpointConfig\": {}\n      },\n      \"status\": {\n        \"state\": \"RUNNING\",\n        \"stateStartTime\": \"2024-10-31T03:40:37.410555Z\"\n      },\n      \"clusterUuid\": \"30695901-ea88-41e7-9c97-bb55067a4540\",\n      \"statusHistory\": [\n        {\n          \"state\": \"CREATING\",\n          \"stateStartTime\": \"2024-10-31T03:34:22.567338Z\"\n        }\n      ],\n      \"labels\": {\n        \"goog-dataproc-cluster-name\": \"test-best-practices-enabled\",\n        \"goog-dataproc-cluster-uuid\": \"30695901-ea88-41e7-9c97-bb55067a4540\",\n        \"goog-dataproc-location\": \"us-central1\"\n      },\n      \"metrics\": {\n        \"hdfsMetrics\": {\n          \"dfs-capacity-used\": \"57344\",\n          \"dfs-nodes-running\": \"2\",\n          \"dfs-capacity-total\": \"62920859648\",\n          \"dfs-blocks-missing-repl-one\": \"0\",\n          \"dfs-nodes-decommissioned\": \"0\",\n          \"dfs-capacity-present\": \"29054734336\",\n          \"dfs-capacity-remaining\": \"29054676992\",\n          \"dfs-nodes-decommissioning\": \"0\",\n          \"dfs-blocks-missing\": \"0\",\n          \"dfs-blocks-pending-deletion\": \"0\",\n          \"dfs-blocks-under-replication\": \"0\",\n          \"dfs-blocks-corrupt\": \"0\",\n          \"dfs-blocks-default-replication-factor\": \"2\"\n        },\n        \"yarnMetrics\": {\n          \"yarn-nodes-shutdown\": \"0\",\n          \"yarn-nodes-unhealthy\": \"0\",\n          \"yarn-memory-mb-available\": \"6556\",\n          \"yarn-containers-reserved\": \"0\",\n          \"yarn-memory-mb-pending\": \"0\",\n          \"yarn-nodes-rebooted\": \"0\",\n          \"yarn-memory-mb-total\": \"6556\",\n          \"yarn-containers-pending\": \"0\",\n          \"yarn-apps-completed\": \"0\",\n          \"yarn-apps-running\": \"0\",\n          \"yarn-vcores-allocated\": \"0\",\n          \"yarn-vcores-reserved\": \"0\",\n          \"yarn-memory-mb-reserved\": \"0\",\n          \"yarn-nodes-active\": \"2\",\n          \"yarn-apps-pending\": \"0\",\n          \"yarn-apps-failed\": \"0\",\n          \"yarn-containers-allocated\": \"0\",\n          \"yarn-memory-mb-allocated\": \"0\",\n          \"yarn-apps-killed\": \"0\",\n          \"yarn-vcores-pending\": \"0\",\n          \"yarn-nodes-lost\": \"0\",\n          \"yarn-nodes-decommissioned\": \"0\",\n          \"yarn-nodes-new\": \"0\",\n          \"yarn-vcores-available\": \"4\",\n          \"yarn-vcores-total\": \"4\",\n          \"yarn-nodes-decommissioning\": \"0\",\n          \"yarn-apps-submitted\": \"0\"\n        }\n      }\n    },\n    {\n      \"projectId\": \"gcpdiag-dataproc1-aaaa\",\n      \"clusterName\": \"test-deny-icmp\",\n      \"config\": {\n        \"configBucket\": \"dataproc-staging-us-central1-12340005-9v6173vh\",\n        \"tempBucket\": \"dataproc-temp-us-central1-12340005-xslkmij6\",\n        \"gceClusterConfig\": {\n          \"zoneUri\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-a\",\n          \"serviceAccountScopes\": [\n            \"https://www.googleapis.com/auth/cloud-platform\"\n          ],\n          \"tags\": [\n            \"icmp-deny\"\n          ],\n          \"subnetworkUri\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/regions/us-central1/subnetworks/test-bad-subnet\",\n          \"internalIpOnly\": false,\n          \"shieldedInstanceConfig\": {\n            \"enableSecureBoot\": true,\n            \"enableVtpm\": true,\n            \"enableIntegrityMonitoring\": true\n          }\n        },\n        \"masterConfig\": {\n          \"numInstances\": 1,\n          \"instanceNames\": [\n            \"test-deny-icmp-m\"\n          ],\n          \"imageUri\": \"https://www.googleapis.com/compute/v1/projects/cloud-dataproc/global/images/dataproc-2-2-deb12-20241018-045100-rc01\",\n          \"machineTypeUri\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-a/machineTypes/n2-standard-4\",\n          \"diskConfig\": {\n            \"bootDiskSizeGb\": 1000,\n            \"bootDiskType\": \"pd-standard\"\n          },\n          \"minCpuPlatform\": \"AUTOMATIC\",\n          \"preemptibility\": \"NON_PREEMPTIBLE\"\n        },\n        \"workerConfig\": {\n          \"numInstances\": 2,\n          \"instanceNames\": [\n            \"test-deny-icmp-w-0\",\n            \"test-deny-icmp-w-1\"\n          ],\n          \"imageUri\": \"https://www.googleapis.com/compute/v1/projects/cloud-dataproc/global/images/dataproc-2-2-deb12-20241018-045100-rc01\",\n          \"machineTypeUri\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-dataproc1-aaaa/zones/us-central1-a/machineTypes/n2-standard-4\",\n          \"diskConfig\": {\n            \"bootDiskSizeGb\": 1000,\n            \"bootDiskType\": \"pd-standard\"\n          },\n          \"minCpuPlatform\": \"AUTOMATIC\",\n          \"preemptibility\": \"NON_PREEMPTIBLE\"\n        },\n        \"softwareConfig\": {\n          \"imageVersion\": \"2.2.38-debian12\",\n          \"properties\": {\n            \"capacity-scheduler:yarn.scheduler.capacity.resource-calculator\": \"org.apache.hadoop.yarn.util.resource.DominantResourceCalculator\",\n            \"capacity-scheduler:yarn.scheduler.capacity.root.default.ordering-policy\": \"fair\",\n            \"core:fs.gs.block.size\": \"134217728\",\n            \"core:fs.gs.metadata.cache.enable\": \"false\",\n            \"core:hadoop.ssl.enabled.protocols\": \"TLSv1,TLSv1.1,TLSv1.2\",\n            \"distcp:mapreduce.map.java.opts\": \"-Xmx768m\",\n            \"distcp:mapreduce.map.memory.mb\": \"1024\",\n            \"distcp:mapreduce.reduce.java.opts\": \"-Xmx768m\",\n            \"distcp:mapreduce.reduce.memory.mb\": \"1024\",\n            \"hadoop-env:HADOOP_DATANODE_OPTS\": \"-Xmx512m\",\n            \"hdfs:dfs.datanode.address\": \"0.0.0.0:9866\",\n            \"hdfs:dfs.datanode.http.address\": \"0.0.0.0:9864\",\n            \"hdfs:dfs.datanode.https.address\": \"0.0.0.0:9865\",\n            \"hdfs:dfs.datanode.ipc.address\": \"0.0.0.0:9867\",\n            \"hdfs:dfs.namenode.handler.count\": \"20\",\n            \"hdfs:dfs.namenode.http-address\": \"0.0.0.0:9870\",\n            \"hdfs:dfs.namenode.https-address\": \"0.0.0.0:9871\",\n            \"hdfs:dfs.namenode.lifeline.rpc-address\": \"test-deny-icmp-m:8050\",\n            \"hdfs:dfs.namenode.secondary.http-address\": \"0.0.0.0:9868\",\n            \"hdfs:dfs.namenode.secondary.https-address\": \"0.0.0.0:9869\",\n            \"hdfs:dfs.namenode.service.handler.count\": \"10\",\n            \"hdfs:dfs.namenode.servicerpc-address\": \"test-deny-icmp-m:8051\",\n            \"mapred-env:HADOOP_JOB_HISTORYSERVER_HEAPSIZE\": \"4000\",\n            \"mapred:mapreduce.job.maps\": \"21\",\n            \"mapred:mapreduce.job.reduce.slowstart.completedmaps\": \"0.95\",\n            \"mapred:mapreduce.job.reduces\": \"7\",\n            \"mapred:mapreduce.jobhistory.recovery.store.class\": \"org.apache.hadoop.mapreduce.v2.hs.HistoryServerLeveldbStateStoreService\",\n            \"mapred:mapreduce.map.cpu.vcores\": \"1\",\n            \"mapred:mapreduce.map.java.opts\": \"-Xmx2708m\",\n            \"mapred:mapreduce.map.memory.mb\": \"3386\",\n            \"mapred:mapreduce.reduce.cpu.vcores\": \"1\",\n            \"mapred:mapreduce.reduce.java.opts\": \"-Xmx2708m\",\n            \"mapred:mapreduce.reduce.memory.mb\": \"3386\",\n            \"mapred:mapreduce.task.io.sort.mb\": \"256\",\n            \"mapred:yarn.app.mapreduce.am.command-opts\": \"-Xmx2708m\",\n            \"mapred:yarn.app.mapreduce.am.resource.cpu-vcores\": \"1\",\n            \"mapred:yarn.app.mapreduce.am.resource.mb\": \"3386\",\n            \"spark-env:SPARK_DAEMON_MEMORY\": \"4000m\",\n            \"spark:spark.driver.maxResultSize\": \"2048m\",\n            \"spark:spark.driver.memory\": \"4096m\",\n            \"spark:spark.executor.cores\": \"2\",\n            \"spark:spark.executor.instances\": \"2\",\n            \"spark:spark.executor.memory\": \"6157m\",\n            \"spark:spark.executorEnv.OPENBLAS_NUM_THREADS\": \"1\",\n            \"spark:spark.plugins.defaultList\": \"com.google.cloud.dataproc.DataprocSparkPlugin\",\n            \"spark:spark.scheduler.mode\": \"FAIR\",\n            \"spark:spark.sql.cbo.enabled\": \"true\",\n            \"spark:spark.sql.optimizer.runtime.bloomFilter.join.pattern.enabled\": \"true\",\n            \"spark:spark.ui.port\": \"0\",\n            \"spark:spark.yarn.am.memory\": \"640m\",\n            \"yarn-env:YARN_NODEMANAGER_HEAPSIZE\": \"1638\",\n            \"yarn-env:YARN_RESOURCEMANAGER_HEAPSIZE\": \"4000\",\n            \"yarn-env:YARN_TIMELINESERVER_HEAPSIZE\": \"4000\",\n            \"yarn:yarn.nodemanager.address\": \"0.0.0.0:8026\",\n            \"yarn:yarn.nodemanager.resource.cpu-vcores\": \"4\",\n            \"yarn:yarn.nodemanager.resource.memory-mb\": \"13544\",\n            \"yarn:yarn.resourcemanager.decommissioning-nodes-watcher.decommission-if-no-shuffle-data\": \"true\",\n            \"yarn:yarn.resourcemanager.nodemanager-graceful-decommission-timeout-secs\": \"86400\",\n            \"yarn:yarn.scheduler.maximum-allocation-mb\": \"13544\",\n            \"yarn:yarn.scheduler.minimum-allocation-mb\": \"1\"\n          }\n        },\n        \"endpointConfig\": {}\n      },\n      \"status\": {\n        \"state\": \"ERROR\",\n        \"stateStartTime\": \"2024-10-31T03:45:16.984234Z\"\n      },\n      \"clusterUuid\": \"f0ce26dc-87e9-40d0-a75c-ca6c0ae78cf4\",\n      \"statusHistory\": [\n        {\n          \"state\": \"CREATING\",\n          \"stateStartTime\": \"2024-10-31T03:33:16.561835Z\"\n        }\n      ],\n      \"labels\": {\n        \"goog-dataproc-cluster-name\": \"test-deny-icmp\",\n        \"goog-dataproc-cluster-uuid\": \"f0ce26dc-87e9-40d0-a75c-ca6c0ae78cf4\",\n        \"goog-dataproc-location\": \"us-central1\"\n      }\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/dataproc1/json-dumps/dataproc-job-failed.json",
    "content": "{\n  \"reference\": {\n    \"projectId\": \"gcpdiag-dataproc1-aaaa\",\n    \"jobId\": \"1234567891\"\n  },\n  \"placement\": {\n    \"clusterName\": \"job-failed\",\n    \"clusterUuid\": \"94b9d209-dbd2-49bf-a1fb-cb15348cc0fb\"\n  },\n  \"sparkJob\": {\n    \"mainClass\": \"org.apache.spark.examples.SparkPi\",\n    \"args\": [\n      \"10000\"\n    ],\n    \"jarFileUris\": [\n      \"file:///usr/lib/spark/examples/jars/spark-examples.jar\"\n    ],\n    \"properties\": {\n      \"spark.logConf\": \"true\"\n    },\n    \"loggingConfig\": {\n      \"driverLogLevels\": {\n        \"root\": \"INFO\"\n      }\n    }\n  },\n  \"status\": {\n    \"state\": \"ERROR\",\n    \"details\": \"Driver received SIGTERM/SIGKILL signal and exited with 143 code, which potentially signifies a memory pressure.\\nGoogle Cloud Dataproc Agent reports job failure. If logs are available, they can be found at:\\nhttps://console.cloud.google.com/dataproc/jobs/1234567891?project=gcpdiag-dataproc1-aaaa&region=us-central1\\ngcloud dataproc jobs wait 'afea8b77-c4b5-413d-b853-6c30b1c601de' --region 'us-central1' --project 'gcpdiag-dataproc1-f914htnn'\\nhttps://console.cloud.google.com/storage/browser/dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/94b9d209-dbd2-49bf-a1fb-cb15348cc0fb/jobs/afea8b77-c4b5-413d-b853-6c30b1c601de/\\ngs://dataproc-staging-us-central1-867564666308-9v6173vh/google-cloud-dataproc-metainfo/94b9d209-dbd2-49bf-a1fb-cb15348cc0fb/jobs/afea8b77-c4b5-413d-b853-6c30b1c601de/driveroutput.*\",\n    \"stateStartTime\": \"2024-11-01T03:13:26.981926Z\"\n  },\n  \"statusHistory\": [\n    {\n      \"state\": \"PENDING\",\n      \"stateStartTime\": \"2024-11-01T03:12:34.648195Z\"\n    },\n    {\n      \"state\": \"SETUP_DONE\",\n      \"stateStartTime\": \"2024-11-01T03:12:34.680296Z\"\n    },\n    {\n      \"state\": \"RUNNING\",\n      \"stateStartTime\": \"2024-11-01T03:12:35.635169Z\"\n    }\n  ],\n  \"driverControlFilesUri\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/94b9d209-dbd2-49bf-a1fb-cb15348cc0fb/jobs/1234567891/\",\n  \"driverOutputResourceUri\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/94b9d209-dbd2-49bf-a1fb-cb15348cc0fb/jobs/1234567891/driveroutput\",\n  \"labels\": {\n    \"goog-terraform-provisioned\": \"true\"\n  },\n  \"jobUuid\": \"1234567891\",\n  \"done\": true\n}\n"
  },
  {
    "path": "test-data/dataproc1/json-dumps/dataproc-job-success.json",
    "content": "{\n  \"reference\": {\n    \"projectId\": \"gcpdiag-dataproc1-aaaa\",\n    \"jobId\": \"1234567890\"\n  },\n  \"placement\": {\n    \"clusterName\": \"job-success\",\n    \"clusterUuid\": \"02eb914f-566d-4e20-a23b-895ebcadfa54\"\n  },\n  \"sparkJob\": {\n    \"mainClass\": \"org.apache.spark.examples.SparkPi\",\n    \"args\": [\n      \"10\"\n    ],\n    \"jarFileUris\": [\n      \"file:///usr/lib/spark/examples/jars/spark-examples.jar\"\n    ],\n    \"properties\": {\n      \"spark.logConf\": \"true\"\n    },\n    \"loggingConfig\": {\n      \"driverLogLevels\": {\n        \"root\": \"INFO\"\n      }\n    }\n  },\n  \"status\": {\n    \"state\": \"DONE\",\n    \"stateStartTime\": \"2024-11-01T02:58:57.465011Z\"\n  },\n  \"yarnApplications\": [\n    {\n      \"name\": \"Spark Pi\",\n      \"state\": \"FINISHED\",\n      \"progress\": 1,\n      \"trackingUrl\": \"http://job-success-m.c.gcpdiag-dataproc1-aaaa.internal.:8088/proxy/application_1730429847891_0001/\"\n    }\n  ],\n  \"statusHistory\": [\n    {\n      \"state\": \"PENDING\",\n      \"stateStartTime\": \"2024-11-01T02:58:22.207045Z\"\n    },\n    {\n      \"state\": \"SETUP_DONE\",\n      \"stateStartTime\": \"2024-11-01T02:58:22.240406Z\"\n    },\n    {\n      \"state\": \"RUNNING\",\n      \"details\": \"Agent reported job success\",\n      \"stateStartTime\": \"2024-11-01T02:58:22.604010Z\"\n    }\n  ],\n  \"driverControlFilesUri\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/02eb914f-566d-4e20-a23b-895ebcadfa54/jobs/1234567890/\",\n  \"driverOutputResourceUri\": \"gs://dataproc-staging-us-central1-12340005-9v6173vh/google-cloud-dataproc-metainfo/02eb914f-566d-4e20-a23b-895ebcadfa54/jobs/1234567890/driveroutput\",\n  \"labels\": {\n    \"goog-terraform-provisioned\": \"true\"\n  },\n  \"jobUuid\": \"1234567890\",\n  \"done\": true\n}\n"
  },
  {
    "path": "test-data/dataproc1/json-dumps/iam-policy.json",
    "content": "{\n  \"bindings\": [\n    {\n      \"members\": [\n        \"serviceAccount:service-12340005@compute-system.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/compute.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12340005@dataproc-accounts.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/dataproc.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:saworker@gcpdiag-dataproc1-aaaa.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/dataproc.worker\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:12340005-compute@developer.gserviceaccount.com\",\n        \"serviceAccount:12340005@cloudservices.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/editor\"\n    },\n    {\n      \"members\": [\n        \"user:testuser@example.com\"\n      ],\n      \"role\": \"roles/owner\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12340005@gcp-sa-websecurityscanner.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/websecurityscanner.serviceAgent\"\n    }\n  ],\n  \"etag\": \"BwYlyYOz+hk=\",\n  \"version\": 1\n}\n"
  },
  {
    "path": "test-data/dataproc1/json-dumps/iam-service-accounts.json",
    "content": "{\n  \"accounts\": [\n    {\n      \"displayName\": \"Compute Engine default service account\",\n      \"email\": \"12340005-compute@developer.gserviceaccount.com\",\n      \"etag\": \"MDEwMjE5MjA=\",\n      \"name\": \"projects/gcpdiag-dataproc1-aaaa/serviceAccounts/12340005-compute@developer.gserviceaccount.com\",\n      \"oauth2ClientId\": \"REDACTED\",\n      \"projectId\": \"gcpdiag-dataproc1-aaaa\",\n      \"uniqueId\": \"105677253164431506005\"\n    },\n    {\n      \"displayName\": \"Dataproc VM Service account with Dataproc Worker role\",\n      \"email\": \"saworker@gcpdiag-dataproc1-aaaa.iam.gserviceaccount.com\",\n      \"etag\": \"MDEwMjE5MjA=\",\n      \"name\": \"projects/gcpdiag-dataproc1-aaaa/serviceAccounts/saworker@gcpdiag-dataproc1-f914htnn.iam.gserviceaccount.com\",\n      \"oauth2ClientId\": \"REDACTED\",\n      \"projectId\": \"gcpdiag-dataproc1-aaaa\",\n      \"uniqueId\": \"112855465650618767611\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/dataproc1/json-dumps/logging-entries-1.json",
    "content": "{}\n"
  },
  {
    "path": "test-data/dataproc1/json-dumps/project.json",
    "content": "{\n  \"name\": \"projects/12340005\",\n  \"parent\": \"folders/348077457356\",\n  \"projectId\": \"gcpdiag-dataproc1-aaaa\",\n  \"state\": \"ACTIVE\",\n  \"displayName\": \"gcpdiag test - dataproc1\",\n  \"createTime\": \"2024-10-31T03:04:58.584562Z\",\n  \"updateTime\": \"2024-10-31T06:18:28.441603Z\",\n  \"etag\": \"W/\\\"520c285328f06d6d\\\"\",\n  \"labels\": {\n    \"gcpdiag\": \"test\",\n    \"goog-terraform-provisioned\": \"true\"\n  }\n}\n"
  },
  {
    "path": "test-data/dataproc1/json-dumps/services.json",
    "content": "{\n  \"services\": [\n    {\n      \"name\": \"projects/12340005/services/compute.googleapis.com\",\n      \"config\": {\n        \"name\": \"compute.googleapis.com\",\n        \"title\": \"Compute Engine API\",\n        \"documentation\": {\n          \"summary\": \"Creates and runs virtual machines on Google Cloud Platform.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"compute.googleapis.com/VpcNetwork\",\n            \"displayName\": \"VPC Network\",\n            \"description\": \"VPC Network.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the VPC Network.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the VPC Network, global always.\"\n              },\n              {\n                \"key\": \"network_id\",\n                \"description\": \"VPC Network resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Location\",\n            \"displayName\": \"Compute Location\",\n            \"description\": \"A location in the Compute API.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the Compute Location.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Interconnect\",\n            \"displayName\": \"Interconnect\",\n            \"description\": \"Interconnect.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the Interconnect.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the Interconnect.\"\n              },\n              {\n                \"key\": \"interconnect_id\",\n                \"description\": \"Interconnect resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/FirewallPolicy\",\n            \"displayName\": \"Firewall policy\",\n            \"description\": \"Firewall policy.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project or organization) associated with the firewall policy.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the firewall policy.\"\n              },\n              {\n                \"key\": \"firewall_policy_id\",\n                \"description\": \"Firewall policy resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/SecurityPolicy\",\n            \"displayName\": \"Security policy\",\n            \"description\": \"Security policy.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the security policy.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the security policy.\"\n              },\n              {\n                \"key\": \"security_policy_id\",\n                \"description\": \"Security policy resource ID.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/OperationType\",\n            \"displayName\": \"Operation Type\",\n            \"description\": \"Operation Type.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the operation.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the operation.\"\n              },\n              {\n                \"key\": \"operation_type\",\n                \"description\": \"Operation type.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Reservation\",\n            \"displayName\": \"Reservation\",\n            \"description\": \"Monitored resource representing a reservation.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container (e.g. project number) associated with the reservation.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The zone that contains the reservation.\"\n              },\n              {\n                \"key\": \"reservation_id\",\n                \"description\": \"Reservation resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/StoragePool\",\n            \"displayName\": \"Storage Pool\",\n            \"description\": \"Monitored resource representing a storage pool.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container (e.g. project number) associated with the storage pool.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location that contains the storage pool.\"\n              },\n              {\n                \"key\": \"storage_pool_id\",\n                \"description\": \"Numerical resource ID of the storage pool.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"gce_instance\",\n            \"displayName\": \"VM Instance\",\n            \"description\": \"A virtual machine instance hosted in Compute Engine.\",\n            \"labels\": [\n              {\n                \"key\": \"project_id\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as \\\"my-project\\\".\"\n              },\n              {\n                \"key\": \"instance_id\",\n                \"description\": \"The numeric VM instance identifier assigned by Compute Engine.\"\n              },\n              {\n                \"key\": \"zone\",\n                \"description\": \"The Compute Engine zone in which the VM is running.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network\",\n                \"compute.googleapis.com/cloud_router_prefixes_from_own_region_per_region_per_vpc_network\",\n                \"compute.googleapis.com/dynamic_routes_per_region_per_peering_group\",\n                \"compute.googleapis.com/global_internal_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/instances_per_peering_group\",\n                \"compute.googleapis.com/instances_per_vpc_network\",\n                \"compute.googleapis.com/internal_lb_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_managed_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_protocol_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/ip_aliases_per_peering_group\",\n                \"compute.googleapis.com/ip_aliases_per_vpc_network\",\n                \"compute.googleapis.com/peerings_per_vpc_network\",\n                \"compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network\",\n                \"compute.googleapis.com/psc_propagated_connections_per_vpc_network\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/multicast_consumers_per_zone_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/exceeded\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/regional_external_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/regional_internal_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/static_routes_per_peering_group\",\n                \"compute.googleapis.com/static_routes_per_vpc_network\",\n                \"compute.googleapis.com/subnet_ranges_per_peering_group\",\n                \"compute.googleapis.com/subnet_ranges_per_vpc_network\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Location\",\n              \"metrics\": [\n                \"compute.googleapis.com/cpus_per_vm_family\",\n                \"compute.googleapis.com/global_dns/request_count\",\n                \"compute.googleapis.com/gpus_per_gpu_family\",\n                \"compute.googleapis.com/inter_region_egress_bandwidth\",\n                \"compute.googleapis.com/local_ssd_total_storage_per_vm_family\",\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/exceeded\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/exceeded\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/exceeded\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/usage\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/exceeded\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/exceeded\",\n                \"compute.googleapis.com/quota/tpus_per_tpu_family/exceeded\",\n                \"compute.googleapis.com/tpus_per_tpu_family\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Interconnect\",\n              \"metrics\": [\n                \"compute.googleapis.com/interconnect_attachments_per_interconnect\",\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/FirewallPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/fqdns_per_global_network_firewall_policy\",\n                \"compute.googleapis.com/fqdns_per_hierarchical_firewall_policy\",\n                \"compute.googleapis.com/fqdns_per_regional_network_firewall_policy\",\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/rule_attributes_per_global_network_firewall_policy\",\n                \"compute.googleapis.com/rule_attributes_per_hierarchical_firewall_policy\",\n                \"compute.googleapis.com/rule_attributes_per_regional_network_firewall_policy\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/SecurityPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/advanced_rules_per_edge_security_policy\",\n                \"compute.googleapis.com/advanced_rules_per_regional_security_policy\",\n                \"compute.googleapis.com/advanced_rules_per_security_policy\",\n                \"compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/exceeded\",\n                \"compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/exceeded\",\n                \"compute.googleapis.com/quota/advanced_rules_per_security_policy/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/OperationType\",\n              \"metrics\": [\n                \"compute.googleapis.com/global_concurrent_operations\",\n                \"compute.googleapis.com/quota/concurrent/global_concurrent_operations/exceeded\",\n                \"compute.googleapis.com/quota/concurrent/internal/global_concurrent_operations/combined_units\",\n                \"compute.googleapis.com/quota/concurrent/internal/regional_concurrent_operations/combined_units\",\n                \"compute.googleapis.com/quota/concurrent/regional_concurrent_operations/exceeded\",\n                \"compute.googleapis.com/regional_concurrent_operations\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"gce_instance\",\n              \"metrics\": [\n                \"compute.googleapis.com/instance/global_dns/request_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Reservation\",\n              \"metrics\": [\n                \"compute.googleapis.com/reservation/reserved\",\n                \"compute.googleapis.com/reservation/assured\",\n                \"compute.googleapis.com/reservation/used\",\n                \"compute.googleapis.com/reservation/internal/matching_instances\",\n                \"compute.googleapis.com/reservation/internal/prespuns_by_state\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/StoragePool\",\n              \"metrics\": [\n                \"compute.googleapis.com/storage_pool/disks\",\n                \"compute.googleapis.com/storage_pool/provisioned_capacity\",\n                \"compute.googleapis.com/storage_pool/used_capacity\",\n                \"compute.googleapis.com/storage_pool/total_disk_provisioned_capacity\",\n                \"compute.googleapis.com/storage_pool/provisioned_iops\",\n                \"compute.googleapis.com/storage_pool/used_iops\",\n                \"compute.googleapis.com/storage_pool/total_disk_provisioned_iops\",\n                \"compute.googleapis.com/storage_pool/provisioned_throughput\",\n                \"compute.googleapis.com/storage_pool/used_throughput\",\n                \"compute.googleapis.com/storage_pool/total_disk_provisioned_throughput\",\n                \"compute.googleapis.com/storage_pool/capacity_utilization\",\n                \"compute.googleapis.com/storage_pool/iops_utilization\",\n                \"compute.googleapis.com/storage_pool/throughput_utilization\",\n                \"compute.googleapis.com/storage_pool/capacity_overprovisioning\",\n                \"compute.googleapis.com/storage_pool/iops_overprovisioning\",\n                \"compute.googleapis.com/storage_pool/throughput_overprovisioning\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Location\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/limit\",\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/usage\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/limit\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/usage\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/limit\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/limit\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/usage\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/limit\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/usage\",\n                \"compute.googleapis.com/quota/tpus_per_tpu_family/limit\",\n                \"compute.googleapis.com/quota/tpus_per_tpu_family/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/limit\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/usage\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/multicast_consumers_per_zone_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/multicast_consumers_per_zone_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/limit\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/usage\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Interconnect\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/limit\",\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/FirewallPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/SecurityPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/limit\",\n                \"compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/usage\",\n                \"compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/limit\",\n                \"compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/usage\",\n                \"compute.googleapis.com/quota/advanced_rules_per_security_policy/limit\",\n                \"compute.googleapis.com/quota/advanced_rules_per_security_policy/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/OperationType\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/concurrent/global_concurrent_operations/limit\",\n                \"compute.googleapis.com/quota/concurrent/regional_concurrent_operations/limit\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340005\"\n    },\n    {\n      \"name\": \"projects/12340005/services/dataproc-control.googleapis.com\",\n      \"config\": {\n        \"name\": \"dataproc-control.googleapis.com\",\n        \"title\": \"Cloud Dataproc Control API\",\n        \"documentation\": {\n          \"summary\": \"Manages internal resources for Google Cloud Dataproc.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340005\"\n    },\n    {\n      \"name\": \"projects/12340005/services/dataproc.googleapis.com\",\n      \"config\": {\n        \"name\": \"dataproc.googleapis.com\",\n        \"title\": \"Cloud Dataproc API\",\n        \"documentation\": {\n          \"summary\": \"Manages Hadoop-based clusters and jobs on Google Cloud Platform.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340005\"\n    },\n    {\n      \"name\": \"projects/12340005/services/oslogin.googleapis.com\",\n      \"config\": {\n        \"name\": \"oslogin.googleapis.com\",\n        \"title\": \"Cloud OS Login API\",\n        \"documentation\": {\n          \"summary\": \"You can use OS Login to manage access to your VM instances using IAM roles.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340005\"\n    },\n    {\n      \"name\": \"projects/12340005/services/storage-api.googleapis.com\",\n      \"config\": {\n        \"name\": \"storage-api.googleapis.com\",\n        \"title\": \"Google Cloud Storage JSON API\",\n        \"documentation\": {\n          \"summary\": \"Lets you store and retrieve potentially-large, immutable data objects.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340005\"\n    },\n    {\n      \"name\": \"projects/12340005/services/storage-component.googleapis.com\",\n      \"config\": {\n        \"name\": \"storage-component.googleapis.com\",\n        \"title\": \"Cloud Storage\",\n        \"documentation\": {\n          \"summary\": \"Google Cloud Storage is a RESTful service for storing and accessing your data on Google's\\n    infrastructure.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"serviceruntime.googleapis.com/api\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_version\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_method\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/consumer_project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/consumer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/producer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/consumer_resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/api\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/api/consumer/request_count\",\n                \"serviceruntime.googleapis.com/api/consumer/error_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_used_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_refund_count\",\n                \"serviceruntime.googleapis.com/api/consumer/total_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_overhead_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/backend_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/response_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer\",\n                \"serviceruntime.googleapis.com/quota/used\",\n                \"serviceruntime.googleapis.com/quota/limit\",\n                \"serviceruntime.googleapis.com/quota/exceeded\",\n                \"serviceruntime.googleapis.com/allocation/consumer/quota_used_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/consumer_quota\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/quota/rate/consumer/used_count\",\n                \"serviceruntime.googleapis.com/quota/rate/consumer/refund_count\",\n                \"serviceruntime.googleapis.com/quota/allocation/consumer/usage\",\n                \"serviceruntime.googleapis.com/quota/consumer/limit\",\n                \"serviceruntime.googleapis.com/quota/consumer/exceeded\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340005\"\n    },\n    {\n      \"name\": \"projects/12340005/services/websecurityscanner.googleapis.com\",\n      \"config\": {\n        \"name\": \"websecurityscanner.googleapis.com\",\n        \"title\": \"Web Security Scanner API\",\n        \"documentation\": {\n          \"summary\": \"Scans your Compute and App Engine apps for common web vulnerabilities.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340005\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/dataproc1/network.tf",
    "content": "\nresource \"google_compute_network\" \"test-bad-network\" {\n  name                    = \"test-bad-network\"\n  description             = \"VPC network without Dataproc specific firewall rules\"\n  auto_create_subnetworks = false\n  project                 = google_project.project.project_id\n}\nresource \"google_compute_subnetwork\" \"test-bad-subnet\" {\n  name          = \"test-bad-subnet\"\n  ip_cidr_range = \"10.128.0.0/20\"\n  region        = \"us-central1\"\n  network       = google_compute_network.test-bad-network.id\n  project       = google_project.project.project_id\n}\n\nresource \"google_compute_firewall\" \"deny-icmp\" {\n  name    = \"deny-icmp\"\n  network = google_compute_network.test-bad-network.name\n  project = google_project.project.project_id\n  deny {\n    protocol = \"icmp\"\n  }\n  source_tags = [\"icmp-deny\"]\n}\n"
  },
  {
    "path": "test-data/dataproc1/project.tf",
    "content": "resource \"random_string\" \"project_id_suffix\" {\n  length  = 8\n  number  = true\n  lower   = true\n  upper   = false\n  special = false\n}\n\nresource \"google_project\" \"project\" {\n  name            = \"gcpdiag test - dataproc1\"\n  project_id      = \"gcpdiag-dataproc1-${random_string.project_id_suffix.id}\"\n  org_id          = var.folder_id == \"\" ? var.org_id : null\n  folder_id       = var.folder_id != \"\" ? var.folder_id : null\n  billing_account = var.billing_account_id\n  labels = {\n    gcpdiag : \"test\"\n  }\n}\n\n\nresource \"google_project_service\" \"compute\" {\n  project = google_project.project.project_id\n  service = \"compute.googleapis.com\"\n}\n\nresource \"google_project_service\" \"dataproc\" {\n  project            = google_project.project.project_id\n  service            = \"dataproc.googleapis.com\"\n  disable_on_destroy = false\n}\n\noutput \"project_id\" {\n  value = google_project.project.project_id\n}\n\noutput \"project_id_suffix\" {\n  value = random_string.project_id_suffix.id\n}\n\noutput \"project_nr\" {\n  value = google_project.project.number\n}\n\noutput \"org_id\" {\n  value = var.org_id\n}\n"
  },
  {
    "path": "test-data/dataproc1/provider.tf",
    "content": "provider \"google\" {}\n"
  },
  {
    "path": "test-data/dataproc1/variables.tf",
    "content": "variable \"billing_account_id\" {}\n\nvariable \"org_id\" {}\n\nvariable \"folder_id\" { default = \"\" }\n"
  },
  {
    "path": "test-data/dataproc2/json-dumps/logging-entries-1.json",
    "content": "{\n  \"entries\": [\n    {\n      \"insertId\": \"nwjwc8e2b9ir\",\n      \"logName\": \"projects/gcpdiag-dataproc2-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\",\n          \"principalSubject\": \"user:testuser@example.com\"\n        },\n        \"authorizationInfo\": [\n          {\n            \"granted\": true,\n            \"permission\": \"dataproc.clusters.create\",\n            \"permissionType\": \"ADMIN_WRITE\",\n            \"resource\": \"projects/gcpdiag-dataproc2-aaaa/regions/us-central1/clusters/cluster-quota-issues\",\n            \"resourceAttributes\": {\n              \"name\": \"projects/gcpdiag-dataproc2-aaaa/regions/us-central1/clusters/cluster-quota-issues\",\n              \"service\": \"dataproc.googleapis.com\",\n              \"type\": \"dataproc.googleapis.com/Cluster\"\n            }\n          }\n        ],\n        \"methodName\": \"google.cloud.dataproc.v1.ClusterController.CreateCluster\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/google.cloud.dataproc.v1.CreateClusterRequest\",\n          \"cluster\": {\n            \"clusterName\": \"cluster-quota-issues\",\n            \"config\": {\n              \"gceClusterConfig\": {\n                \"internalIpOnly\": false\n              },\n              \"masterConfig\": {\n                \"accelerators\": [\n                  {\n                    \"acceleratorCount\": 1,\n                    \"acceleratorTypeUri\": \"nvidia-a100-80gb\"\n                  }\n                ],\n                \"diskConfig\": {\n                  \"bootDiskSizeGb\": 30,\n                  \"bootDiskType\": \"pd-standard\"\n                },\n                \"machineTypeUri\": \"a2-ultragpu-1g\"\n              },\n              \"workerConfig\": {\n                \"accelerators\": [\n                  {\n                    \"acceleratorCount\": 4,\n                    \"acceleratorTypeUri\": \"nvidia-a100-80gb\"\n                  }\n                ],\n                \"diskConfig\": {\n                  \"bootDiskSizeGb\": 30,\n                  \"bootDiskType\": \"pd-standard\"\n                },\n                \"machineTypeUri\": \"a2-ultragpu-1g\",\n                \"numInstances\": 4\n              }\n            },\n            \"projectId\": \"gcpdiag-dataproc2-aaaa\"\n          },\n          \"projectId\": \"gcpdiag-dataproc2-aaaa\",\n          \"region\": \"us-central1\"\n        },\n        \"requestMetadata\": {\n          \"callerIp\": \"gce-internal-ip\",\n          \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 Terraform/1.5.7 (+https://www.terraform.io) Terraform-Plugin-SDK/2.36.0 terraform-provider-google/6.38.0,gzip(gfe)\",\n          \"destinationAttributes\": {},\n          \"requestAttributes\": {\n            \"auth\": {},\n            \"time\": \"2025-06-13T16:14:55.949855486Z\"\n          }\n        },\n        \"resourceLocation\": {\n          \"currentLocations\": [\n            \"us-central1\"\n          ]\n        },\n        \"resourceName\": \"projects/gcpdiag-dataproc2-aaaa/regions/us-central1/clusters/cluster-quota-issues\",\n        \"serviceName\": \"dataproc.googleapis.com\",\n        \"status\": {\n          \"code\": 3,\n          \"message\": \"Insufficient 'NVIDIA_A100_80GB_GPUS' quota. Requested 5.0, available 0.0. Your resource request exceeds your available quota. See https://cloud.google.com/compute/resource-usage. Use https://cloud.google.com/docs/quotas/view-manage#requesting_higher_quota to request additional quota.\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-06-13T16:14:58.745087897Z\",\n      \"resource\": {\n        \"labels\": {\n          \"cluster_name\": \"cluster-quota-issues\",\n          \"cluster_uuid\": \"\",\n          \"project_id\": \"gcpdiag-dataproc2-aaaa\",\n          \"region\": \"us-central1\"\n        },\n        \"type\": \"cloud_dataproc_cluster\"\n      },\n      \"severity\": \"ERROR\",\n      \"timestamp\": \"2025-06-13T16:14:55.930548627Z\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/dataproc2/json-dumps/project.json",
    "content": "{\n  \"name\": \"projects/12340099\",\n  \"parent\": \"folders/348077457356\",\n  \"projectId\": \"gcpdiag-dataproc2-aaaa\",\n  \"state\": \"ACTIVE\",\n  \"displayName\": \"gcpdiag test - dataproc2\",\n  \"createTime\": \"2024-10-31T03:04:58.584562Z\",\n  \"updateTime\": \"2024-10-31T06:18:28.441603Z\",\n  \"etag\": \"W/\\\"520c285328f06d6d\\\"\",\n  \"labels\": {\n    \"gcpdiag\": \"test\",\n    \"goog-terraform-provisioned\": \"true\"\n  }\n}\n"
  },
  {
    "path": "test-data/dataproc2/json-dumps/services.json",
    "content": "{\n  \"services\": [\n    {\n      \"name\": \"projects/12340099/services/compute.googleapis.com\",\n      \"config\": {\n        \"name\": \"compute.googleapis.com\",\n        \"title\": \"Compute Engine API\",\n        \"documentation\": {\n          \"summary\": \"Creates and runs virtual machines on Google Cloud Platform.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"compute.googleapis.com/VpcNetwork\",\n            \"displayName\": \"VPC Network\",\n            \"description\": \"VPC Network.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the VPC Network.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the VPC Network, global always.\"\n              },\n              {\n                \"key\": \"network_id\",\n                \"description\": \"VPC Network resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Location\",\n            \"displayName\": \"Compute Location\",\n            \"description\": \"A location in the Compute API.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the Compute Location.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Interconnect\",\n            \"displayName\": \"Interconnect\",\n            \"description\": \"Interconnect.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the Interconnect.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the Interconnect.\"\n              },\n              {\n                \"key\": \"interconnect_id\",\n                \"description\": \"Interconnect resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/FirewallPolicy\",\n            \"displayName\": \"Firewall policy\",\n            \"description\": \"Firewall policy.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project or organization) associated with the firewall policy.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the firewall policy.\"\n              },\n              {\n                \"key\": \"firewall_policy_id\",\n                \"description\": \"Firewall policy resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/SecurityPolicy\",\n            \"displayName\": \"Security policy\",\n            \"description\": \"Security policy.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the security policy.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the security policy.\"\n              },\n              {\n                \"key\": \"security_policy_id\",\n                \"description\": \"Security policy resource ID.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/OperationType\",\n            \"displayName\": \"Operation Type\",\n            \"description\": \"Operation Type.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the operation.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the operation.\"\n              },\n              {\n                \"key\": \"operation_type\",\n                \"description\": \"Operation type.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Reservation\",\n            \"displayName\": \"Reservation\",\n            \"description\": \"Monitored resource representing a reservation.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container (e.g. project number) associated with the reservation.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The zone that contains the reservation.\"\n              },\n              {\n                \"key\": \"reservation_id\",\n                \"description\": \"Reservation resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/StoragePool\",\n            \"displayName\": \"Storage Pool\",\n            \"description\": \"Monitored resource representing a storage pool.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container (e.g. project number) associated with the storage pool.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location that contains the storage pool.\"\n              },\n              {\n                \"key\": \"storage_pool_id\",\n                \"description\": \"Numerical resource ID of the storage pool.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"gce_instance\",\n            \"displayName\": \"VM Instance\",\n            \"description\": \"A virtual machine instance hosted in Compute Engine.\",\n            \"labels\": [\n              {\n                \"key\": \"project_id\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as \\\"my-project\\\".\"\n              },\n              {\n                \"key\": \"instance_id\",\n                \"description\": \"The numeric VM instance identifier assigned by Compute Engine.\"\n              },\n              {\n                \"key\": \"zone\",\n                \"description\": \"The Compute Engine zone in which the VM is running.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network\",\n                \"compute.googleapis.com/cloud_router_prefixes_from_own_region_per_region_per_vpc_network\",\n                \"compute.googleapis.com/dynamic_routes_per_region_per_peering_group\",\n                \"compute.googleapis.com/global_internal_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/instances_per_peering_group\",\n                \"compute.googleapis.com/instances_per_vpc_network\",\n                \"compute.googleapis.com/internal_lb_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_managed_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_protocol_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/ip_aliases_per_peering_group\",\n                \"compute.googleapis.com/ip_aliases_per_vpc_network\",\n                \"compute.googleapis.com/peerings_per_vpc_network\",\n                \"compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network\",\n                \"compute.googleapis.com/psc_propagated_connections_per_vpc_network\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/multicast_consumers_per_zone_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/exceeded\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/regional_external_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/regional_internal_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/static_routes_per_peering_group\",\n                \"compute.googleapis.com/static_routes_per_vpc_network\",\n                \"compute.googleapis.com/subnet_ranges_per_peering_group\",\n                \"compute.googleapis.com/subnet_ranges_per_vpc_network\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Location\",\n              \"metrics\": [\n                \"compute.googleapis.com/cpus_per_vm_family\",\n                \"compute.googleapis.com/global_dns/request_count\",\n                \"compute.googleapis.com/gpus_per_gpu_family\",\n                \"compute.googleapis.com/inter_region_egress_bandwidth\",\n                \"compute.googleapis.com/local_ssd_total_storage_per_vm_family\",\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/exceeded\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/exceeded\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/exceeded\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/usage\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/exceeded\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/exceeded\",\n                \"compute.googleapis.com/quota/tpus_per_tpu_family/exceeded\",\n                \"compute.googleapis.com/tpus_per_tpu_family\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Interconnect\",\n              \"metrics\": [\n                \"compute.googleapis.com/interconnect_attachments_per_interconnect\",\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/FirewallPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/fqdns_per_global_network_firewall_policy\",\n                \"compute.googleapis.com/fqdns_per_hierarchical_firewall_policy\",\n                \"compute.googleapis.com/fqdns_per_regional_network_firewall_policy\",\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/rule_attributes_per_global_network_firewall_policy\",\n                \"compute.googleapis.com/rule_attributes_per_hierarchical_firewall_policy\",\n                \"compute.googleapis.com/rule_attributes_per_regional_network_firewall_policy\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/SecurityPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/advanced_rules_per_edge_security_policy\",\n                \"compute.googleapis.com/advanced_rules_per_regional_security_policy\",\n                \"compute.googleapis.com/advanced_rules_per_security_policy\",\n                \"compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/exceeded\",\n                \"compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/exceeded\",\n                \"compute.googleapis.com/quota/advanced_rules_per_security_policy/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/OperationType\",\n              \"metrics\": [\n                \"compute.googleapis.com/global_concurrent_operations\",\n                \"compute.googleapis.com/quota/concurrent/global_concurrent_operations/exceeded\",\n                \"compute.googleapis.com/quota/concurrent/internal/global_concurrent_operations/combined_units\",\n                \"compute.googleapis.com/quota/concurrent/internal/regional_concurrent_operations/combined_units\",\n                \"compute.googleapis.com/quota/concurrent/regional_concurrent_operations/exceeded\",\n                \"compute.googleapis.com/regional_concurrent_operations\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"gce_instance\",\n              \"metrics\": [\n                \"compute.googleapis.com/instance/global_dns/request_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Reservation\",\n              \"metrics\": [\n                \"compute.googleapis.com/reservation/reserved\",\n                \"compute.googleapis.com/reservation/assured\",\n                \"compute.googleapis.com/reservation/used\",\n                \"compute.googleapis.com/reservation/internal/matching_instances\",\n                \"compute.googleapis.com/reservation/internal/prespuns_by_state\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/StoragePool\",\n              \"metrics\": [\n                \"compute.googleapis.com/storage_pool/disks\",\n                \"compute.googleapis.com/storage_pool/provisioned_capacity\",\n                \"compute.googleapis.com/storage_pool/used_capacity\",\n                \"compute.googleapis.com/storage_pool/total_disk_provisioned_capacity\",\n                \"compute.googleapis.com/storage_pool/provisioned_iops\",\n                \"compute.googleapis.com/storage_pool/used_iops\",\n                \"compute.googleapis.com/storage_pool/total_disk_provisioned_iops\",\n                \"compute.googleapis.com/storage_pool/provisioned_throughput\",\n                \"compute.googleapis.com/storage_pool/used_throughput\",\n                \"compute.googleapis.com/storage_pool/total_disk_provisioned_throughput\",\n                \"compute.googleapis.com/storage_pool/capacity_utilization\",\n                \"compute.googleapis.com/storage_pool/iops_utilization\",\n                \"compute.googleapis.com/storage_pool/throughput_utilization\",\n                \"compute.googleapis.com/storage_pool/capacity_overprovisioning\",\n                \"compute.googleapis.com/storage_pool/iops_overprovisioning\",\n                \"compute.googleapis.com/storage_pool/throughput_overprovisioning\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Location\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/limit\",\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/usage\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/limit\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/usage\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/limit\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/limit\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/usage\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/limit\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/usage\",\n                \"compute.googleapis.com/quota/tpus_per_tpu_family/limit\",\n                \"compute.googleapis.com/quota/tpus_per_tpu_family/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/limit\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/usage\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/multicast_consumers_per_zone_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/multicast_consumers_per_zone_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/limit\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/usage\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Interconnect\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/limit\",\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/FirewallPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/SecurityPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/limit\",\n                \"compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/usage\",\n                \"compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/limit\",\n                \"compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/usage\",\n                \"compute.googleapis.com/quota/advanced_rules_per_security_policy/limit\",\n                \"compute.googleapis.com/quota/advanced_rules_per_security_policy/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/OperationType\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/concurrent/global_concurrent_operations/limit\",\n                \"compute.googleapis.com/quota/concurrent/regional_concurrent_operations/limit\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340099\"\n    },\n    {\n      \"name\": \"projects/12340099/services/dataproc-control.googleapis.com\",\n      \"config\": {\n        \"name\": \"dataproc-control.googleapis.com\",\n        \"title\": \"Cloud Dataproc Control API\",\n        \"documentation\": {\n          \"summary\": \"Manages internal resources for Google Cloud Dataproc.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340099\"\n    },\n    {\n      \"name\": \"projects/12340099/services/dataproc.googleapis.com\",\n      \"config\": {\n        \"name\": \"dataproc.googleapis.com\",\n        \"title\": \"Cloud Dataproc API\",\n        \"documentation\": {\n          \"summary\": \"Manages Hadoop-based clusters and jobs on Google Cloud Platform.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340099\"\n    },\n    {\n      \"name\": \"projects/12340099/services/oslogin.googleapis.com\",\n      \"config\": {\n        \"name\": \"oslogin.googleapis.com\",\n        \"title\": \"Cloud OS Login API\",\n        \"documentation\": {\n          \"summary\": \"You can use OS Login to manage access to your VM instances using IAM roles.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340099\"\n    },\n    {\n      \"name\": \"projects/12340099/services/storage-api.googleapis.com\",\n      \"config\": {\n        \"name\": \"storage-api.googleapis.com\",\n        \"title\": \"Google Cloud Storage JSON API\",\n        \"documentation\": {\n          \"summary\": \"Lets you store and retrieve potentially-large, immutable data objects.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340099\"\n    },\n    {\n      \"name\": \"projects/12340099/services/storage-component.googleapis.com\",\n      \"config\": {\n        \"name\": \"storage-component.googleapis.com\",\n        \"title\": \"Cloud Storage\",\n        \"documentation\": {\n          \"summary\": \"Google Cloud Storage is a RESTful service for storing and accessing your data on Google's\\n    infrastructure.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"serviceruntime.googleapis.com/api\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_version\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_method\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/consumer_project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/consumer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/producer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/consumer_resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/api\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/api/consumer/request_count\",\n                \"serviceruntime.googleapis.com/api/consumer/error_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_used_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_refund_count\",\n                \"serviceruntime.googleapis.com/api/consumer/total_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_overhead_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/backend_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/response_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer\",\n                \"serviceruntime.googleapis.com/quota/used\",\n                \"serviceruntime.googleapis.com/quota/limit\",\n                \"serviceruntime.googleapis.com/quota/exceeded\",\n                \"serviceruntime.googleapis.com/allocation/consumer/quota_used_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/consumer_quota\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/quota/rate/consumer/used_count\",\n                \"serviceruntime.googleapis.com/quota/rate/consumer/refund_count\",\n                \"serviceruntime.googleapis.com/quota/allocation/consumer/usage\",\n                \"serviceruntime.googleapis.com/quota/consumer/limit\",\n                \"serviceruntime.googleapis.com/quota/consumer/exceeded\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340099\"\n    },\n    {\n      \"name\": \"projects/12340099/services/websecurityscanner.googleapis.com\",\n      \"config\": {\n        \"name\": \"websecurityscanner.googleapis.com\",\n        \"title\": \"Web Security Scanner API\",\n        \"documentation\": {\n          \"summary\": \"Scans your Compute and App Engine apps for common web vulnerabilities.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340099\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/dataproc3/json-dumps/logging-entries-1.json",
    "content": "{\n  \"entries\": [\n    {\n      \"insertId\": \"nwjwc8e2b9iz\",\n      \"logName\": \"projects/gcpdiag-dataproc3-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\",\n          \"principalSubject\": \"user:testuser@example.com\"\n        },\n        \"authorizationInfo\": [\n          {\n            \"granted\": true,\n            \"permission\": \"dataproc.clusters.create\",\n            \"permissionType\": \"ADMIN_WRITE\",\n            \"resource\": \"projects/gcpdiag-dataproc3-aaaa/regions/us-central1/clusters/cluster-stockout-issues\",\n            \"resourceAttributes\": {\n              \"name\": \"projects/gcpdiag-dataproc3-aaaa/regions/us-central1/clusters/cluster-stockout-issues\",\n              \"service\": \"dataproc.googleapis.com\",\n              \"type\": \"dataproc.googleapis.com/Cluster\"\n            }\n          }\n        ],\n        \"methodName\": \"google.cloud.dataproc.v1.ClusterController.CreateCluster\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/google.cloud.dataproc.v1.CreateClusterRequest\",\n          \"cluster\": {\n            \"clusterName\": \"cluster-stockout-issues\",\n            \"config\": {\n              \"gceClusterConfig\": {\n                \"internalIpOnly\": false\n              },\n              \"masterConfig\": {\n                \"accelerators\": [\n                  {\n                    \"acceleratorCount\": 1,\n                    \"acceleratorTypeUri\": \"nvidia-a100-80gb\"\n                  }\n                ],\n                \"diskConfig\": {\n                  \"bootDiskSizeGb\": 30,\n                  \"bootDiskType\": \"pd-standard\"\n                },\n                \"machineTypeUri\": \"a2-ultragpu-1g\"\n              },\n              \"workerConfig\": {\n                \"accelerators\": [\n                  {\n                    \"acceleratorCount\": 4,\n                    \"acceleratorTypeUri\": \"nvidia-a100-80gb\"\n                  }\n                ],\n                \"diskConfig\": {\n                  \"bootDiskSizeGb\": 30,\n                  \"bootDiskType\": \"pd-standard\"\n                },\n                \"machineTypeUri\": \"a2-ultragpu-1g\",\n                \"numInstances\": 4\n              }\n            },\n            \"projectId\": \"gcpdiag-dataproc3-aaaa\"\n          },\n          \"projectId\": \"gcpdiag-dataproc3-aaaa\",\n          \"region\": \"us-central1\"\n        },\n        \"requestMetadata\": {\n          \"callerIp\": \"gce-internal-ip\",\n          \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 Terraform/1.5.7 (+https://www.terraform.io) Terraform-Plugin-SDK/2.36.0 terraform-provider-google/6.38.0,gzip(gfe)\",\n          \"destinationAttributes\": {},\n          \"requestAttributes\": {\n            \"auth\": {},\n            \"time\": \"2025-06-13T16:14:55.949855486Z\"\n          }\n        },\n        \"resourceLocation\": {\n          \"currentLocations\": [\n            \"us-central1\"\n          ]\n        },\n        \"resourceName\": \"projects/gcpdiag-dataproc3-aaaa/regions/us-central1/clusters/cluster-stockout-issues\",\n        \"serviceName\": \"dataproc.googleapis.com\",\n        \"status\": {\n          \"code\": 3,\n          \"message\": \"The zone 'projects/gcpdiag-dataproc3-aaaa/zones/us-central1-b' does not have enough resources available to fulfill the request.  '(resource type:compute)'.\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-06-13T16:14:58.745087897Z\",\n      \"resource\": {\n        \"labels\": {\n          \"cluster_name\": \"cluster-stockout-issues\",\n          \"cluster_uuid\": \"\",\n          \"project_id\": \"gcpdiag-dataproc3-aaaa\",\n          \"region\": \"us-central1\"\n        },\n        \"type\": \"cloud_dataproc_cluster\"\n      },\n      \"severity\": \"ERROR\",\n      \"timestamp\": \"2025-06-13T16:14:55.930548627Z\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/dataproc3/json-dumps/project.json",
    "content": "{\n  \"name\": \"projects/12340098\",\n  \"parent\": \"folders/348077457356\",\n  \"projectId\": \"gcpdiag-dataproc3-aaaa\",\n  \"state\": \"ACTIVE\",\n  \"displayName\": \"gcpdiag test - dataproc3\",\n  \"createTime\": \"2024-10-31T03:04:58.584562Z\",\n  \"updateTime\": \"2024-10-31T06:18:28.441603Z\",\n  \"etag\": \"W/\\\"520c285328f06d6d\\\"\",\n  \"labels\": {\n    \"gcpdiag\": \"test\",\n    \"goog-terraform-provisioned\": \"true\"\n  }\n}\n"
  },
  {
    "path": "test-data/dataproc3/json-dumps/services.json",
    "content": "{\n  \"services\": [\n    {\n      \"name\": \"projects/12340098/services/compute.googleapis.com\",\n      \"config\": {\n        \"name\": \"compute.googleapis.com\",\n        \"title\": \"Compute Engine API\",\n        \"documentation\": {\n          \"summary\": \"Creates and runs virtual machines on Google Cloud Platform.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"compute.googleapis.com/VpcNetwork\",\n            \"displayName\": \"VPC Network\",\n            \"description\": \"VPC Network.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the VPC Network.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the VPC Network, global always.\"\n              },\n              {\n                \"key\": \"network_id\",\n                \"description\": \"VPC Network resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Location\",\n            \"displayName\": \"Compute Location\",\n            \"description\": \"A location in the Compute API.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the Compute Location.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Interconnect\",\n            \"displayName\": \"Interconnect\",\n            \"description\": \"Interconnect.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the Interconnect.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the Interconnect.\"\n              },\n              {\n                \"key\": \"interconnect_id\",\n                \"description\": \"Interconnect resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/FirewallPolicy\",\n            \"displayName\": \"Firewall policy\",\n            \"description\": \"Firewall policy.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project or organization) associated with the firewall policy.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the firewall policy.\"\n              },\n              {\n                \"key\": \"firewall_policy_id\",\n                \"description\": \"Firewall policy resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/SecurityPolicy\",\n            \"displayName\": \"Security policy\",\n            \"description\": \"Security policy.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the security policy.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the security policy.\"\n              },\n              {\n                \"key\": \"security_policy_id\",\n                \"description\": \"Security policy resource ID.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/OperationType\",\n            \"displayName\": \"Operation Type\",\n            \"description\": \"Operation Type.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the operation.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the operation.\"\n              },\n              {\n                \"key\": \"operation_type\",\n                \"description\": \"Operation type.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Reservation\",\n            \"displayName\": \"Reservation\",\n            \"description\": \"Monitored resource representing a reservation.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container (e.g. project number) associated with the reservation.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The zone that contains the reservation.\"\n              },\n              {\n                \"key\": \"reservation_id\",\n                \"description\": \"Reservation resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/StoragePool\",\n            \"displayName\": \"Storage Pool\",\n            \"description\": \"Monitored resource representing a storage pool.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container (e.g. project number) associated with the storage pool.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location that contains the storage pool.\"\n              },\n              {\n                \"key\": \"storage_pool_id\",\n                \"description\": \"Numerical resource ID of the storage pool.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"gce_instance\",\n            \"displayName\": \"VM Instance\",\n            \"description\": \"A virtual machine instance hosted in Compute Engine.\",\n            \"labels\": [\n              {\n                \"key\": \"project_id\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as \\\"my-project\\\".\"\n              },\n              {\n                \"key\": \"instance_id\",\n                \"description\": \"The numeric VM instance identifier assigned by Compute Engine.\"\n              },\n              {\n                \"key\": \"zone\",\n                \"description\": \"The Compute Engine zone in which the VM is running.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network\",\n                \"compute.googleapis.com/cloud_router_prefixes_from_own_region_per_region_per_vpc_network\",\n                \"compute.googleapis.com/dynamic_routes_per_region_per_peering_group\",\n                \"compute.googleapis.com/global_internal_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/instances_per_peering_group\",\n                \"compute.googleapis.com/instances_per_vpc_network\",\n                \"compute.googleapis.com/internal_lb_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_managed_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_protocol_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/ip_aliases_per_peering_group\",\n                \"compute.googleapis.com/ip_aliases_per_vpc_network\",\n                \"compute.googleapis.com/peerings_per_vpc_network\",\n                \"compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network\",\n                \"compute.googleapis.com/psc_propagated_connections_per_vpc_network\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/multicast_consumers_per_zone_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/exceeded\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/regional_external_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/regional_internal_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/static_routes_per_peering_group\",\n                \"compute.googleapis.com/static_routes_per_vpc_network\",\n                \"compute.googleapis.com/subnet_ranges_per_peering_group\",\n                \"compute.googleapis.com/subnet_ranges_per_vpc_network\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Location\",\n              \"metrics\": [\n                \"compute.googleapis.com/cpus_per_vm_family\",\n                \"compute.googleapis.com/global_dns/request_count\",\n                \"compute.googleapis.com/gpus_per_gpu_family\",\n                \"compute.googleapis.com/inter_region_egress_bandwidth\",\n                \"compute.googleapis.com/local_ssd_total_storage_per_vm_family\",\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/exceeded\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/exceeded\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/exceeded\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/usage\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/exceeded\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/exceeded\",\n                \"compute.googleapis.com/quota/tpus_per_tpu_family/exceeded\",\n                \"compute.googleapis.com/tpus_per_tpu_family\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Interconnect\",\n              \"metrics\": [\n                \"compute.googleapis.com/interconnect_attachments_per_interconnect\",\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/FirewallPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/fqdns_per_global_network_firewall_policy\",\n                \"compute.googleapis.com/fqdns_per_hierarchical_firewall_policy\",\n                \"compute.googleapis.com/fqdns_per_regional_network_firewall_policy\",\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/rule_attributes_per_global_network_firewall_policy\",\n                \"compute.googleapis.com/rule_attributes_per_hierarchical_firewall_policy\",\n                \"compute.googleapis.com/rule_attributes_per_regional_network_firewall_policy\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/SecurityPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/advanced_rules_per_edge_security_policy\",\n                \"compute.googleapis.com/advanced_rules_per_regional_security_policy\",\n                \"compute.googleapis.com/advanced_rules_per_security_policy\",\n                \"compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/exceeded\",\n                \"compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/exceeded\",\n                \"compute.googleapis.com/quota/advanced_rules_per_security_policy/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/OperationType\",\n              \"metrics\": [\n                \"compute.googleapis.com/global_concurrent_operations\",\n                \"compute.googleapis.com/quota/concurrent/global_concurrent_operations/exceeded\",\n                \"compute.googleapis.com/quota/concurrent/internal/global_concurrent_operations/combined_units\",\n                \"compute.googleapis.com/quota/concurrent/internal/regional_concurrent_operations/combined_units\",\n                \"compute.googleapis.com/quota/concurrent/regional_concurrent_operations/exceeded\",\n                \"compute.googleapis.com/regional_concurrent_operations\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"gce_instance\",\n              \"metrics\": [\n                \"compute.googleapis.com/instance/global_dns/request_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Reservation\",\n              \"metrics\": [\n                \"compute.googleapis.com/reservation/reserved\",\n                \"compute.googleapis.com/reservation/assured\",\n                \"compute.googleapis.com/reservation/used\",\n                \"compute.googleapis.com/reservation/internal/matching_instances\",\n                \"compute.googleapis.com/reservation/internal/prespuns_by_state\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/StoragePool\",\n              \"metrics\": [\n                \"compute.googleapis.com/storage_pool/disks\",\n                \"compute.googleapis.com/storage_pool/provisioned_capacity\",\n                \"compute.googleapis.com/storage_pool/used_capacity\",\n                \"compute.googleapis.com/storage_pool/total_disk_provisioned_capacity\",\n                \"compute.googleapis.com/storage_pool/provisioned_iops\",\n                \"compute.googleapis.com/storage_pool/used_iops\",\n                \"compute.googleapis.com/storage_pool/total_disk_provisioned_iops\",\n                \"compute.googleapis.com/storage_pool/provisioned_throughput\",\n                \"compute.googleapis.com/storage_pool/used_throughput\",\n                \"compute.googleapis.com/storage_pool/total_disk_provisioned_throughput\",\n                \"compute.googleapis.com/storage_pool/capacity_utilization\",\n                \"compute.googleapis.com/storage_pool/iops_utilization\",\n                \"compute.googleapis.com/storage_pool/throughput_utilization\",\n                \"compute.googleapis.com/storage_pool/capacity_overprovisioning\",\n                \"compute.googleapis.com/storage_pool/iops_overprovisioning\",\n                \"compute.googleapis.com/storage_pool/throughput_overprovisioning\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Location\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/limit\",\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/usage\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/limit\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/usage\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/limit\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/limit\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/usage\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/limit\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/usage\",\n                \"compute.googleapis.com/quota/tpus_per_tpu_family/limit\",\n                \"compute.googleapis.com/quota/tpus_per_tpu_family/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/limit\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/usage\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/multicast_consumers_per_zone_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/multicast_consumers_per_zone_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/limit\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/usage\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Interconnect\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/limit\",\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/FirewallPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/SecurityPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/limit\",\n                \"compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/usage\",\n                \"compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/limit\",\n                \"compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/usage\",\n                \"compute.googleapis.com/quota/advanced_rules_per_security_policy/limit\",\n                \"compute.googleapis.com/quota/advanced_rules_per_security_policy/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/OperationType\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/concurrent/global_concurrent_operations/limit\",\n                \"compute.googleapis.com/quota/concurrent/regional_concurrent_operations/limit\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340098\"\n    },\n    {\n      \"name\": \"projects/12340098/services/dataproc-control.googleapis.com\",\n      \"config\": {\n        \"name\": \"dataproc-control.googleapis.com\",\n        \"title\": \"Cloud Dataproc Control API\",\n        \"documentation\": {\n          \"summary\": \"Manages internal resources for Google Cloud Dataproc.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340098\"\n    },\n    {\n      \"name\": \"projects/12340098/services/dataproc.googleapis.com\",\n      \"config\": {\n        \"name\": \"dataproc.googleapis.com\",\n        \"title\": \"Cloud Dataproc API\",\n        \"documentation\": {\n          \"summary\": \"Manages Hadoop-based clusters and jobs on Google Cloud Platform.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340098\"\n    },\n    {\n      \"name\": \"projects/12340098/services/oslogin.googleapis.com\",\n      \"config\": {\n        \"name\": \"oslogin.googleapis.com\",\n        \"title\": \"Cloud OS Login API\",\n        \"documentation\": {\n          \"summary\": \"You can use OS Login to manage access to your VM instances using IAM roles.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340098\"\n    },\n    {\n      \"name\": \"projects/12340098/services/storage-api.googleapis.com\",\n      \"config\": {\n        \"name\": \"storage-api.googleapis.com\",\n        \"title\": \"Google Cloud Storage JSON API\",\n        \"documentation\": {\n          \"summary\": \"Lets you store and retrieve potentially-large, immutable data objects.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340098\"\n    },\n    {\n      \"name\": \"projects/12340098/services/storage-component.googleapis.com\",\n      \"config\": {\n        \"name\": \"storage-component.googleapis.com\",\n        \"title\": \"Cloud Storage\",\n        \"documentation\": {\n          \"summary\": \"Google Cloud Storage is a RESTful service for storing and accessing your data on Google's\\n    infrastructure.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"serviceruntime.googleapis.com/api\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_version\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_method\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/consumer_project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/consumer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/producer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/consumer_resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/api\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/api/consumer/request_count\",\n                \"serviceruntime.googleapis.com/api/consumer/error_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_used_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_refund_count\",\n                \"serviceruntime.googleapis.com/api/consumer/total_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_overhead_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/backend_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/response_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer\",\n                \"serviceruntime.googleapis.com/quota/used\",\n                \"serviceruntime.googleapis.com/quota/limit\",\n                \"serviceruntime.googleapis.com/quota/exceeded\",\n                \"serviceruntime.googleapis.com/allocation/consumer/quota_used_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/consumer_quota\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/quota/rate/consumer/used_count\",\n                \"serviceruntime.googleapis.com/quota/rate/consumer/refund_count\",\n                \"serviceruntime.googleapis.com/quota/allocation/consumer/usage\",\n                \"serviceruntime.googleapis.com/quota/consumer/limit\",\n                \"serviceruntime.googleapis.com/quota/consumer/exceeded\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340098\"\n    },\n    {\n      \"name\": \"projects/12340098/services/websecurityscanner.googleapis.com\",\n      \"config\": {\n        \"name\": \"websecurityscanner.googleapis.com\",\n        \"title\": \"Web Security Scanner API\",\n        \"documentation\": {\n          \"summary\": \"Scans your Compute and App Engine apps for common web vulnerabilities.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340098\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/fw-policy/Makefile",
    "content": "PROJECT_ID  := $(shell terraform output -raw project_id)\nPROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix)\nPROJECT_NR  := $(shell terraform output -raw project_nr)\nORG_ID      := $(shell terraform output -raw org_id)\nFOLDER_ID_1 := $(shell terraform output -raw folder_id_1)\nFOLDER_ID_2 := $(shell terraform output -raw folder_id_2)\n\nFAKE_PROJECT_ID_SUFFIX = aaaa\nFAKE_PROJECT_NR = 12340004\nFAKE_ORG_ID = 11112222\nFAKE_FOLDER_ID_1 = 100001\nFAKE_FOLDER_ID_2 = 100002\n\nORG_POLICY_CONSTRAINTS = \\\n\tjson-dumps/org-constraint-compute.disableSerialPortAccess.json \\\n\tjson-dumps/org-constraint-compute.requireOsLogin.json \\\n\tjson-dumps/org-constraint-compute.requireShieldedVm.json \\\n\tjson-dumps/org-constraints.json \\\n\tjson-dumps/org-constraint-custom.arEnforceImmutableTags.json\n\nall:\t\\\n\tjson-dumps/compute-effective-firewalls-default.json \\\n\tjson-dumps/compute-instances-europe-west1-b.json \\\n\tjson-dumps/compute-instances-empty.json \\\n\tjson-dumps/compute-migs-europe-west1-b.json \\\n\tjson-dumps/compute-migs-empty.json \\\n\tjson-dumps/compute-network-default.json \\\n\tjson-dumps/compute-project.json \\\n\tjson-dumps/compute-subnetworks-aggregated.json \\\n\tjson-dumps/compute-zones.json \\\n\tjson-dumps/iam-policy.json \\\n\tjson-dumps/iam-roles-custom.json \\\n\tjson-dumps/iam-service-accounts.json \\\n\tjson-dumps/project.json \\\n\tjson-dumps/services.json \\\n\t$(ORG_POLICY_CONSTRAINTS) \\\n\tjson-dumps/org-policies.json \\\n\ninclude ../Makefile.inc\n"
  },
  {
    "path": "test-data/fw-policy/README.md",
    "content": "This project is used to test firewall security policies configured\nin a folder hierarchy.\n"
  },
  {
    "path": "test-data/fw-policy/firewall.tf",
    "content": "resource \"google_compute_firewall\" \"fw-test-800\" {\n  project    = google_project.project.project_id\n  depends_on = [google_project_service.compute]\n  name       = \"fw-test-800\"\n  network    = \"default\"\n  priority   = 800\n\n  source_ranges = [\"10.100.0.0/24\"]\n\n  deny {\n    protocol = \"tcp\"\n    ports    = [\"1001-1002\"]\n  }\n}\n\nresource \"google_compute_firewall\" \"fw-test-900\" {\n  project    = google_project.project.project_id\n  depends_on = [google_project_service.compute]\n  name       = \"fw-test-900\"\n  network    = \"default\"\n  priority   = 900\n\n  source_ranges = [\"10.100.0.0/24\"]\n  source_tags   = [\"foobar\", \"foo\", \"bar\"]\n\n  allow {\n    protocol = \"tcp\"\n    ports    = [\"1234\", \"1000-2000\", \"2033\"]\n  }\n}\n\nresource \"google_compute_firewall\" \"fw-test-901\" {\n  project    = google_project.project.project_id\n  depends_on = [google_project_service.compute]\n  name       = \"fw-test-901\"\n  network    = \"default\"\n  priority   = 901\n\n  source_service_accounts = [\"service-12340002@compute-system.iam.gserviceaccount.com\"]\n\n  allow {\n    protocol = \"tcp\"\n    ports    = [\"4000\"]\n  }\n}\n\nresource \"google_compute_firewall\" \"fw-test-902\" {\n  project    = google_project.project.project_id\n  depends_on = [google_project_service.compute]\n  name       = \"fw-test-902\"\n  network    = \"default\"\n  priority   = 902\n\n  source_ranges           = [\"0.0.0.0/0\"]\n  target_service_accounts = [\"service-12340002@compute-system.iam.gserviceaccount.com\"]\n\n  allow {\n    protocol = \"tcp\"\n    ports    = [\"4001\"]\n  }\n}\n\nresource \"google_compute_firewall\" \"fw-test-903\" {\n  project    = google_project.project.project_id\n  depends_on = [google_project_service.compute]\n  name       = \"fw-test-903\"\n  network    = \"default\"\n  priority   = 903\n\n  source_ranges = [\"0.0.0.0/0\"]\n  target_tags   = [\"bar\"]\n\n  allow {\n    protocol = \"tcp\"\n    ports    = [\"1234\"]\n  }\n}\n\nresource \"google_compute_firewall\" \"fw-test-950\" {\n  project    = google_project.project.project_id\n  depends_on = [google_project_service.compute]\n  name       = \"fw-test-950\"\n  network    = \"default\"\n  priority   = 950\n\n  source_ranges = [\"0.0.0.0/0\"]\n\n  deny {\n    protocol = \"tcp\"\n    ports    = [\"1006\"]\n  }\n}\n"
  },
  {
    "path": "test-data/fw-policy/fw-policy.tf",
    "content": "resource \"google_compute_firewall_policy\" \"parent\" {\n  provider   = google-beta\n  short_name = \"parent-folder-policy\"\n  parent     = \"folders/422810093603\"\n}\n\nresource \"google_compute_firewall_policy\" \"sub\" {\n  provider   = google-beta\n  short_name = \"sub-folder-policy\"\n  parent     = \"folders/392556968391\"\n}\n\nresource \"google_compute_firewall_policy_association\" \"parent\" {\n  name              = \"parent-association\"\n  firewall_policy   = google_compute_firewall_policy.parent.id\n  attachment_target = google_compute_firewall_policy.parent.parent\n}\n\nresource \"google_compute_firewall_policy_association\" \"sub\" {\n  name              = \"sub-association\"\n  firewall_policy   = google_compute_firewall_policy.sub.id\n  attachment_target = google_compute_firewall_policy.sub.parent\n}\n\nresource \"google_compute_firewall_policy_rule\" \"parent-1\" {\n  firewall_policy = google_compute_firewall_policy.parent.id\n  description     = \"parent-1-rule\"\n  priority        = 9000\n  action          = \"allow\"\n  direction       = \"INGRESS\"\n  match {\n    src_ip_ranges = [\"10.101.0.1/32\"]\n    layer4_configs {\n      ip_protocol = \"tcp\"\n      ports       = [\"2000-2002\"]\n    }\n  }\n}\n\nresource \"google_compute_firewall_policy_rule\" \"sub-1\" {\n  firewall_policy  = google_compute_firewall_policy.sub.id\n  description      = \"sub-1-rule\"\n  priority         = 9000\n  action           = \"allow\"\n  direction        = \"INGRESS\"\n  target_resources = [data.google_compute_network.default.self_link]\n  match {\n    src_ip_ranges = [\"10.101.0.1/32\"]\n    layer4_configs {\n      ip_protocol = \"tcp\"\n      ports       = [\"2003\"]\n    }\n  }\n}\n\nresource \"google_compute_firewall_policy_rule\" \"sub-2\" {\n  firewall_policy         = google_compute_firewall_policy.sub.id\n  description             = \"sub-1-rule\"\n  priority                = 8999\n  action                  = \"allow\"\n  direction               = \"INGRESS\"\n  target_service_accounts = [\"service-12340002@compute-system.iam.gserviceaccount.com\"]\n  match {\n    src_ip_ranges = [\"10.102.0.1/32\"]\n    layer4_configs {\n      ip_protocol = \"all\"\n    }\n  }\n}\n\nresource \"google_compute_firewall_policy_rule\" \"disabled\" {\n  firewall_policy         = google_compute_firewall_policy.sub.id\n  description             = \"sub-1-rule\"\n  priority                = 7000\n  action                  = \"allow\"\n  direction               = \"INGRESS\"\n  disabled                = true\n  target_service_accounts = [\"service-12340002@compute-system.iam.gserviceaccount.com\"]\n  match {\n    src_ip_ranges = [\"0.0.0.0/32\"]\n    layer4_configs {\n      ip_protocol = \"all\"\n    }\n  }\n}\n"
  },
  {
    "path": "test-data/fw-policy/json-dumps/compute-effective-firewalls-default.json",
    "content": "{\n  \"firewalls\": [\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"1586287710887445984\",\n      \"creationTimestamp\": \"2021-12-06T08:32:15.983-08:00\",\n      \"name\": \"fw-test-900\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default\",\n      \"priority\": 900,\n      \"sourceRanges\": [\n        \"10.100.0.0/24\"\n      ],\n      \"sourceTags\": [\n        \"bar\",\n        \"foo\",\n        \"foobar\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"1234\",\n            \"1000-2000\",\n            \"2033\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/firewalls/fw-test-900\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"4374547412497434080\",\n      \"creationTimestamp\": \"2021-12-06T08:32:15.958-08:00\",\n      \"name\": \"fw-test-950\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default\",\n      \"priority\": 950,\n      \"sourceRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"denied\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"1006\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/firewalls/fw-test-950\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"3934489538667891704\",\n      \"creationTimestamp\": \"2022-04-26T06:35:19.380-07:00\",\n      \"name\": \"gke-gke1-c8fb19cb-vms\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default\",\n      \"priority\": 1000,\n      \"sourceRanges\": [\n        \"10.128.0.0/9\"\n      ],\n      \"targetTags\": [\n        \"gke-gke1-c8fb19cb-node\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"icmp\"\n        },\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"1-65535\"\n          ]\n        },\n        {\n          \"IPProtocol\": \"udp\",\n          \"ports\": [\n            \"1-65535\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/firewalls/gke-gke1-c8fb19cb-vms\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"2493080101642798591\",\n      \"creationTimestamp\": \"2021-12-06T08:32:16.212-08:00\",\n      \"name\": \"fw-test-901\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default\",\n      \"priority\": 901,\n      \"sourceServiceAccounts\": [\n        \"service-12340002@compute-system.iam.gserviceaccount.com\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"4000\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/firewalls/fw-test-901\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"4090334076307997726\",\n      \"creationTimestamp\": \"2021-12-06T08:31:45.288-08:00\",\n      \"name\": \"default-allow-icmp\",\n      \"description\": \"Allow ICMP from anywhere\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default\",\n      \"priority\": 65534,\n      \"sourceRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"icmp\"\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/firewalls/default-allow-icmp\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"3146660543683884546\",\n      \"creationTimestamp\": \"2021-12-06T09:31:25.256-08:00\",\n      \"name\": \"fw-test-903\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default\",\n      \"priority\": 903,\n      \"sourceRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"targetTags\": [\n        \"bar\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"1234\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/firewalls/fw-test-903\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"294281872312337888\",\n      \"creationTimestamp\": \"2021-12-06T08:32:15.943-08:00\",\n      \"name\": \"fw-test-800\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default\",\n      \"priority\": 800,\n      \"sourceRanges\": [\n        \"10.100.0.0/24\"\n      ],\n      \"denied\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"1001-1002\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/firewalls/fw-test-800\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"41078775488334840\",\n      \"creationTimestamp\": \"2022-04-26T06:35:19.625-07:00\",\n      \"name\": \"gke-gke1-c8fb19cb-all\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default\",\n      \"priority\": 1000,\n      \"sourceRanges\": [\n        \"10.4.0.0/14\"\n      ],\n      \"targetTags\": [\n        \"gke-gke1-c8fb19cb-node\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"esp\"\n        },\n        {\n          \"IPProtocol\": \"ah\"\n        },\n        {\n          \"IPProtocol\": \"sctp\"\n        },\n        {\n          \"IPProtocol\": \"tcp\"\n        },\n        {\n          \"IPProtocol\": \"udp\"\n        },\n        {\n          \"IPProtocol\": \"icmp\"\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/firewalls/gke-gke1-c8fb19cb-all\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"8722045246608999454\",\n      \"creationTimestamp\": \"2021-12-06T08:31:45.223-08:00\",\n      \"name\": \"default-allow-internal\",\n      \"description\": \"Allow internal traffic on the default network\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default\",\n      \"priority\": 65534,\n      \"sourceRanges\": [\n        \"10.128.0.0/9\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"0-65535\"\n          ]\n        },\n        {\n          \"IPProtocol\": \"udp\",\n          \"ports\": [\n            \"0-65535\"\n          ]\n        },\n        {\n          \"IPProtocol\": \"icmp\"\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/firewalls/default-allow-internal\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"5657786582871278622\",\n      \"creationTimestamp\": \"2021-12-06T08:31:45.245-08:00\",\n      \"name\": \"default-allow-ssh\",\n      \"description\": \"Allow SSH from anywhere\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default\",\n      \"priority\": 65534,\n      \"sourceRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"22\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/firewalls/default-allow-ssh\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"7387195472873780738\",\n      \"creationTimestamp\": \"2021-12-06T09:31:25.228-08:00\",\n      \"name\": \"fw-test-902\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default\",\n      \"priority\": 902,\n      \"sourceRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"targetServiceAccounts\": [\n        \"service-12340002@compute-system.iam.gserviceaccount.com\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"4001\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/firewalls/fw-test-902\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"1583992647830883321\",\n      \"creationTimestamp\": \"2022-04-26T06:35:19.012-07:00\",\n      \"name\": \"gke-gke1-c8fb19cb-ssh\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default\",\n      \"priority\": 1000,\n      \"sourceRanges\": [\n        \"34.77.103.187/32\"\n      ],\n      \"targetTags\": [\n        \"gke-gke1-c8fb19cb-node\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"22\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/firewalls/gke-gke1-c8fb19cb-ssh\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"3709819709257122846\",\n      \"creationTimestamp\": \"2021-12-06T08:31:45.266-08:00\",\n      \"name\": \"default-allow-rdp\",\n      \"description\": \"Allow RDP from anywhere\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default\",\n      \"priority\": 65534,\n      \"sourceRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"3389\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/firewalls/default-allow-rdp\"\n    }\n  ],\n  \"firewallPolicys\": [\n    {\n      \"name\": \"856256210981\",\n      \"type\": \"HIERARCHY\",\n      \"shortName\": \"parent-folder-policy\",\n      \"displayName\": \"parent-folder-policy\",\n      \"rules\": [\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 9000,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"10.101.0.1/32\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"tcp\",\n                \"ports\": [\n                  \"2000-2002\"\n                ]\n              }\n            ]\n          },\n          \"action\": \"allow\",\n          \"direction\": \"INGRESS\"\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 2147483644,\n          \"match\": {\n            \"destIpRanges\": [\n              \"::/0\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"EGRESS\"\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 2147483645,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"::/0\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\"\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 2147483646,\n          \"match\": {\n            \"destIpRanges\": [\n              \"0.0.0.0/0\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"EGRESS\"\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 2147483647,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"0.0.0.0/0\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\"\n        }\n      ]\n    },\n    {\n      \"name\": \"203310830110\",\n      \"type\": \"HIERARCHY\",\n      \"shortName\": \"sub-folder-policy\",\n      \"displayName\": \"sub-folder-policy\",\n      \"rules\": [\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 8999,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"10.102.0.1/32\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"allow\",\n          \"direction\": \"INGRESS\",\n          \"targetServiceAccounts\": [\n            \"service-12340002@compute-system.iam.gserviceaccount.com\"\n          ]\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 9000,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"10.101.0.1/32\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"tcp\",\n                \"ports\": [\n                  \"2003\"\n                ]\n              }\n            ]\n          },\n          \"action\": \"allow\",\n          \"direction\": \"INGRESS\"\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 2147483644,\n          \"match\": {\n            \"destIpRanges\": [\n              \"::/0\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"EGRESS\"\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 2147483645,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"::/0\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\"\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 2147483646,\n          \"match\": {\n            \"destIpRanges\": [\n              \"0.0.0.0/0\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"EGRESS\"\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 2147483647,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"0.0.0.0/0\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\"\n        }\n      ]\n    },\n    {\n      \"name\": \"test-sorting-policy-same-ip\",\n      \"type\": \"HIERARCHY\",\n      \"shortName\": \"test-sorting-same-ip-policy\",\n      \"displayName\": \"test-sorting-same-ip-policy\",\n      \"rules\": [\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"allow rule with priority 1000 and same src ip range\",\n          \"priority\": 1000,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"10.104.0.1/32\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"tcp\",\n                \"ports\": [\n                  \"80\"\n                ]\n              }\n            ]\n          },\n          \"action\": \"allow\",\n          \"direction\": \"INGRESS\"\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"deny rule with priority 1000 and same src ip range\",\n          \"priority\": 1000,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"10.104.0.1/32\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"tcp\",\n                \"ports\": [\n                  \"80\"\n                ]\n              }\n            ]\n          },\n          \"action\": \"deny\",\n          \"direction\": \"INGRESS\"\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 2147483647,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"0.0.0.0/0\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\"\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/fw-policy/json-dumps/compute-instances-europe-west2-b.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-fw-policy-aaaa/zones/europe-west2-b/instances\",\n  \"kind\": \"compute#instanceList\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/europe-west2-b/instances\"\n}\n"
  },
  {
    "path": "test-data/fw-policy/json-dumps/compute-migs-europe-west2-b.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-fw-policy-aaaa/zones/europe-west2-b/instanceGroupManagers\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/europe-west2-b/instanceGroupManagers\",\n  \"kind\": \"compute#instanceGroupManagerList\"\n}\n"
  },
  {
    "path": "test-data/fw-policy/json-dumps/compute-network-default.json",
    "content": "{\n  \"kind\": \"compute#network\",\n  \"id\": \"8490460086022669371\",\n  \"creationTimestamp\": \"2021-12-06T08:31:16.305-08:00\",\n  \"name\": \"default\",\n  \"description\": \"Default network for the project\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default\",\n  \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/8490460086022669371\",\n  \"autoCreateSubnetworks\": true,\n  \"subnetworks\": [\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/northamerica-northeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-northeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-south1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west6/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-east7/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west3/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-east1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-east2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-east4/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/australia-southeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-west4/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west8/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/northamerica-northeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/southamerica-east1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/australia-southeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-central1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-south2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-east5/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-southeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-west2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-central2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-southeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/southamerica-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-east1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west4/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-northeast3/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west9/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-west3/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-northeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-north1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-southwest1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west2/subnetworks/default\"\n  ],\n  \"routingConfig\": {\n    \"routingMode\": \"REGIONAL\"\n  },\n  \"networkFirewallPolicyEnforcementOrder\": \"AFTER_CLASSIC_FIREWALL\"\n}\n"
  },
  {
    "path": "test-data/fw-policy/json-dumps/compute-project.json",
    "content": "{\n  \"commonInstanceMetadata\": {\n    \"fingerprint\": \"O3sXwEaEuMA=\",\n    \"items\": [\n      {\n        \"key\": \"gke-gke1-c8fb19cb-secondary-ranges\",\n        \"value\": \"services:default:default:gke-gke1-services-c8fb19cb,pods:default:default:gke-gke1-pods-c8fb19cb\"\n      }\n    ],\n    \"kind\": \"compute#metadata\"\n  },\n  \"creationTimestamp\": \"2021-12-06T08:31:05.630-08:00\",\n  \"defaultNetworkTier\": \"PREMIUM\",\n  \"defaultServiceAccount\": \"12340004-compute@developer.gserviceaccount.com\",\n  \"id\": \"6021859261062284326\",\n  \"kind\": \"compute#project\",\n  \"name\": \"gcpdiag-fw-policy-aaaa\",\n  \"quotas\": [\n    {\n      \"limit\": 10000,\n      \"metric\": \"SNAPSHOTS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 30,\n      \"metric\": \"NETWORKS\",\n      \"usage\": 1\n    },\n    {\n      \"limit\": 500,\n      \"metric\": \"FIREWALLS\",\n      \"usage\": 13\n    },\n    {\n      \"limit\": 5000,\n      \"metric\": \"IMAGES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 175,\n      \"metric\": \"STATIC_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 300,\n      \"metric\": \"ROUTES\",\n      \"usage\": 1\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"FORWARDING_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 500,\n      \"metric\": \"TARGET_POOLS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 500,\n      \"metric\": \"HEALTH_CHECKS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 575,\n      \"metric\": \"IN_USE_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 500,\n      \"metric\": \"TARGET_INSTANCES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_HTTP_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"URL_MAPS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"BACKEND_SERVICES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1000,\n      \"metric\": \"INSTANCE_TEMPLATES\",\n      \"usage\": 1\n    },\n    {\n      \"limit\": 50,\n      \"metric\": \"TARGET_VPN_GATEWAYS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"VPN_TUNNELS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 30,\n      \"metric\": \"BACKEND_BUCKETS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 20,\n      \"metric\": \"ROUTERS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_SSL_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_HTTPS_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"SSL_CERTIFICATES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 275,\n      \"metric\": \"SUBNETWORKS\",\n      \"usage\": 34\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_TCP_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 10,\n      \"metric\": \"SECURITY_POLICIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 200,\n      \"metric\": \"SECURITY_POLICY_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1000,\n      \"metric\": \"XPN_SERVICE_PROJECTS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"PACKET_MIRRORINGS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1000,\n      \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 6,\n      \"metric\": \"INTERCONNECTS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 5000,\n      \"metric\": \"GLOBAL_INTERNAL_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 50,\n      \"metric\": \"VPN_GATEWAYS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 5000,\n      \"metric\": \"MACHINE_IMAGES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 20,\n      \"metric\": \"SECURITY_POLICY_CEVAL_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 50,\n      \"metric\": \"EXTERNAL_VPN_GATEWAYS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1,\n      \"metric\": \"PUBLIC_ADVERTISED_PREFIXES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 10,\n      \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1024,\n      \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"INTERNAL_TRAFFIC_DIRECTOR_FORWARDING_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"GLOBAL_EXTERNAL_MANAGED_FORWARDING_RULES\",\n      \"usage\": 0\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa\",\n  \"xpnProjectStatus\": \"UNSPECIFIED_XPN_PROJECT_STATUS\"\n}\n"
  },
  {
    "path": "test-data/fw-policy/json-dumps/compute-subnetworks-aggregated.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-fw-policy-aaaa/aggregated/subnetworks\",\n  \"items\": {\n    \"regions/asia-east1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-17T08:26:05.146-07:00\",\n          \"fingerprint\": \"1YYNoopRKE0=\",\n          \"gatewayAddress\": \"10.140.0.1\",\n          \"id\": \"6852052907234216674\",\n          \"ipCidrRange\": \"10.140.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-east1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-east1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-east2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-17T08:26:05.333-07:00\",\n          \"fingerprint\": \"MK6q8_sLJJc=\",\n          \"gatewayAddress\": \"10.170.0.1\",\n          \"id\": \"1125525225671281378\",\n          \"ipCidrRange\": \"10.170.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-east2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-east2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-northeast1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-17T08:26:05.247-07:00\",\n          \"fingerprint\": \"3cfh-73ffVA=\",\n          \"gatewayAddress\": \"10.146.0.1\",\n          \"id\": \"820665281610304226\",\n          \"ipCidrRange\": \"10.146.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-northeast1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-northeast1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-northeast2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-17T08:26:05.330-07:00\",\n          \"fingerprint\": \"9Tp1AbsCmMo=\",\n          \"gatewayAddress\": \"10.174.0.1\",\n          \"id\": \"6054847225511594722\",\n          \"ipCidrRange\": \"10.174.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-northeast2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-northeast2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-northeast3\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-17T08:26:05.324-07:00\",\n          \"fingerprint\": \"JehCxwfsXB0=\",\n          \"gatewayAddress\": \"10.178.0.1\",\n          \"id\": \"4459529744225979106\",\n          \"ipCidrRange\": \"10.178.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-northeast3\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-northeast3/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-south1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-17T08:26:05.347-07:00\",\n          \"fingerprint\": \"8tYGaYiNY3o=\",\n          \"gatewayAddress\": \"10.160.0.1\",\n          \"id\": \"869720697258167010\",\n          \"ipCidrRange\": \"10.160.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-south1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-south1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-south2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-17T08:26:05.433-07:00\",\n          \"fingerprint\": \"fv0Mm4bip0U=\",\n          \"gatewayAddress\": \"10.190.0.1\",\n          \"id\": \"6746956599394355938\",\n          \"ipCidrRange\": \"10.190.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-south2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-south2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-southeast1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-17T08:26:05.319-07:00\",\n          \"fingerprint\": \"JnzO3Hi7eqM=\",\n          \"gatewayAddress\": \"10.148.0.1\",\n          \"id\": \"9070806327716006626\",\n          \"ipCidrRange\": \"10.148.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-southeast1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-southeast1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-southeast2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-17T08:26:05.384-07:00\",\n          \"fingerprint\": \"k9KEDcmlCMs=\",\n          \"gatewayAddress\": \"10.184.0.1\",\n          \"id\": \"7620656477587426018\",\n          \"ipCidrRange\": \"10.184.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-southeast2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-southeast2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/australia-southeast1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-17T08:26:05.348-07:00\",\n          \"fingerprint\": \"D8uKEE8gYDM=\",\n          \"gatewayAddress\": \"10.152.0.1\",\n          \"id\": \"1489494304956140258\",\n          \"ipCidrRange\": \"10.152.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/australia-southeast1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/australia-southeast1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/australia-southeast2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-17T08:26:05.378-07:00\",\n          \"fingerprint\": \"AO6HqZDHx5Q=\",\n          \"gatewayAddress\": \"10.192.0.1\",\n          \"id\": \"3580328777430911714\",\n          \"ipCidrRange\": \"10.192.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/australia-southeast2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/australia-southeast2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-central2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-17T08:26:05.312-07:00\",\n          \"fingerprint\": \"Y54Lf0vqqc4=\",\n          \"gatewayAddress\": \"10.186.0.1\",\n          \"id\": \"3365031953897147106\",\n          \"ipCidrRange\": \"10.186.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-central2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-central2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-north1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-17T08:26:06.293-07:00\",\n          \"fingerprint\": \"6urF6-w4Ayg=\",\n          \"gatewayAddress\": \"10.166.0.1\",\n          \"id\": \"5830023752198441697\",\n          \"ipCidrRange\": \"10.166.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-north1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-north1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-southwest1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-17T08:26:05.357-07:00\",\n          \"fingerprint\": \"ncbzqTUZf1c=\",\n          \"gatewayAddress\": \"10.204.0.1\",\n          \"id\": \"2060615459427896034\",\n          \"ipCidrRange\": \"10.204.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-southwest1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-southwest1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-17T08:26:05.256-07:00\",\n          \"fingerprint\": \"ypgP-7I6ZPI=\",\n          \"gatewayAddress\": \"10.132.0.1\",\n          \"id\": \"7538294393717967586\",\n          \"ipCidrRange\": \"10.132.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-17T08:26:05.909-07:00\",\n          \"fingerprint\": \"S7Er80MBb9Q=\",\n          \"gatewayAddress\": \"10.154.0.1\",\n          \"id\": \"112506061618989794\",\n          \"ipCidrRange\": \"10.154.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west3\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-17T08:26:06.063-07:00\",\n          \"fingerprint\": \"b5VFFPF2eII=\",\n          \"gatewayAddress\": \"10.156.0.1\",\n          \"id\": \"8197671525485169377\",\n          \"ipCidrRange\": \"10.156.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west3\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west3/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west4\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-17T08:26:06.005-07:00\",\n          \"fingerprint\": \"ukoy6ccv6EM=\",\n          \"gatewayAddress\": \"10.164.0.1\",\n          \"id\": \"4841845905892100833\",\n          \"ipCidrRange\": \"10.164.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west4\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west4/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west6\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-17T08:26:05.200-07:00\",\n          \"fingerprint\": \"vUQsVq30FzQ=\",\n          \"gatewayAddress\": \"10.172.0.1\",\n          \"id\": \"7701367193776212706\",\n          \"ipCidrRange\": \"10.172.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west6\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west6/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west8\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-17T08:26:05.263-07:00\",\n          \"fingerprint\": \"Ax9fjZDfznM=\",\n          \"gatewayAddress\": \"10.198.0.1\",\n          \"id\": \"3641025706229549794\",\n          \"ipCidrRange\": \"10.198.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west8\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west8/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west9\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-17T08:26:05.225-07:00\",\n          \"fingerprint\": \"9wMs1TOjwS4=\",\n          \"gatewayAddress\": \"10.200.0.1\",\n          \"id\": \"5461192301783075554\",\n          \"ipCidrRange\": \"10.200.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west9\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west9/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/me-west1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-17T08:26:05.320-07:00\",\n          \"fingerprint\": \"a7Ep2qiL77Q=\",\n          \"gatewayAddress\": \"10.208.0.1\",\n          \"id\": \"1672344055022930658\",\n          \"ipCidrRange\": \"10.208.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/me-west1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/me-west1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/northamerica-northeast1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-17T08:26:05.135-07:00\",\n          \"fingerprint\": \"vVxCaMhS8Y4=\",\n          \"gatewayAddress\": \"10.162.0.1\",\n          \"id\": \"7587754571378772706\",\n          \"ipCidrRange\": \"10.162.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/northamerica-northeast1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/northamerica-northeast1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/northamerica-northeast2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-17T08:26:05.247-07:00\",\n          \"fingerprint\": \"6joNUA4iKb4=\",\n          \"gatewayAddress\": \"10.188.0.1\",\n          \"id\": \"2622110728900889314\",\n          \"ipCidrRange\": \"10.188.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/northamerica-northeast2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/northamerica-northeast2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/southamerica-east1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-17T08:26:05.311-07:00\",\n          \"fingerprint\": \"ej0aDE8R868=\",\n          \"gatewayAddress\": \"10.158.0.1\",\n          \"id\": \"6807818940268464866\",\n          \"ipCidrRange\": \"10.158.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/southamerica-east1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/southamerica-east1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/southamerica-west1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-17T08:26:05.246-07:00\",\n          \"fingerprint\": \"CWfv3RPrHOE=\",\n          \"gatewayAddress\": \"10.194.0.1\",\n          \"id\": \"3876390708619299554\",\n          \"ipCidrRange\": \"10.194.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/southamerica-west1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/southamerica-west1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-central1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-17T08:26:05.046-07:00\",\n          \"fingerprint\": \"DGMHzKEyKbE=\",\n          \"gatewayAddress\": \"10.128.0.1\",\n          \"id\": \"1093382094154943202\",\n          \"ipCidrRange\": \"10.128.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-central1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-central1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-east1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-17T08:26:05.277-07:00\",\n          \"fingerprint\": \"BPggPaul-ZQ=\",\n          \"gatewayAddress\": \"10.142.0.1\",\n          \"id\": \"5201598787581168354\",\n          \"ipCidrRange\": \"10.142.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-east1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-east1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-east4\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-17T08:26:05.317-07:00\",\n          \"fingerprint\": \"OPh44V64snQ=\",\n          \"gatewayAddress\": \"10.150.0.1\",\n          \"id\": \"8682586312594737890\",\n          \"ipCidrRange\": \"10.150.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-east4\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-east4/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-east5\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-17T08:26:05.192-07:00\",\n          \"fingerprint\": \"mBkXJMiNnAM=\",\n          \"gatewayAddress\": \"10.202.0.1\",\n          \"id\": \"1181975329462340322\",\n          \"ipCidrRange\": \"10.202.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-east5\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-east5/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-east7\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-18T02:53:11.884-07:00\",\n          \"fingerprint\": \"AZ566ykbny8=\",\n          \"gatewayAddress\": \"10.196.0.1\",\n          \"id\": \"5314748717446973800\",\n          \"ipCidrRange\": \"10.196.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-east7\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-east7/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-south1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-17T08:26:05.124-07:00\",\n          \"fingerprint\": \"OWloc4TdZFw=\",\n          \"gatewayAddress\": \"10.206.0.1\",\n          \"id\": \"8098556131403680482\",\n          \"ipCidrRange\": \"10.206.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-south1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-south1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-west1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-17T08:26:05.135-07:00\",\n          \"fingerprint\": \"oPGT2mYa-7Q=\",\n          \"gatewayAddress\": \"10.138.0.1\",\n          \"id\": \"7256027175929826018\",\n          \"ipCidrRange\": \"10.138.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-west1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-west1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-west2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-17T08:26:05.193-07:00\",\n          \"fingerprint\": \"KkbwtA-tzTk=\",\n          \"gatewayAddress\": \"10.168.0.1\",\n          \"id\": \"2918242483372608226\",\n          \"ipCidrRange\": \"10.168.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-west2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-west2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-west3\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-17T08:26:05.425-07:00\",\n          \"fingerprint\": \"ykcQm_iZ3e0=\",\n          \"gatewayAddress\": \"10.180.0.1\",\n          \"id\": \"5655741620073581282\",\n          \"ipCidrRange\": \"10.180.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-west3\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-west3/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-west4\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-17T08:26:05.582-07:00\",\n          \"fingerprint\": \"2HTuQEZecws=\",\n          \"gatewayAddress\": \"10.182.0.1\",\n          \"id\": \"7895999026978409186\",\n          \"ipCidrRange\": \"10.182.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-west4\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-west4/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    }\n  },\n  \"kind\": \"compute#subnetworkAggregatedList\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/aggregated/subnetworks\"\n}\n"
  },
  {
    "path": "test-data/fw-policy/json-dumps/compute-subnetworks-europe-west4.json",
    "content": "{\n  \"kind\": \"compute#subnetworkList\",\n  \"id\": \"projects/gcpdiag-fw-policy-aaaa/regions/europe-west4/subnetworks\",\n  \"items\": [\n    {\n      \"kind\": \"compute#subnetwork\",\n      \"id\": \"1510756175501820978\",\n      \"creationTimestamp\": \"2021-12-06T08:31:25.950-08:00\",\n      \"name\": \"default\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/global/networks/default\",\n      \"ipCidrRange\": \"10.164.0.0/20\",\n      \"gatewayAddress\": \"10.164.0.1\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west4/subnetworks/default\",\n      \"privateIpGoogleAccess\": false,\n      \"fingerprint\": \"Zuro06Cq_IY=\",\n      \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n      \"purpose\": \"PRIVATE\",\n      \"stackType\": \"IPV4_ONLY\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west4/subnetworks\"\n}\n"
  },
  {
    "path": "test-data/fw-policy/json-dumps/compute-zones.json",
    "content": "{\n  \"kind\": \"compute#zoneList\",\n  \"id\": \"projects/gcpdiag-fw-policy-aaaa/zones\",\n  \"items\": [\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2231\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east1-b\",\n      \"description\": \"us-east1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/us-east1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2233\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east1-c\",\n      \"description\": \"us-east1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/us-east1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2234\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east1-d\",\n      \"description\": \"us-east1-d\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/us-east1-d\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2272\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east4-c\",\n      \"description\": \"us-east4-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-east4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/us-east4-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2271\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east4-b\",\n      \"description\": \"us-east4-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-east4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/us-east4-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2270\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east4-a\",\n      \"description\": \"us-east4-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-east4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/us-east4-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2002\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1-c\",\n      \"description\": \"us-central1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/us-central1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2000\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1-a\",\n      \"description\": \"us-central1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/us-central1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2004\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1-f\",\n      \"description\": \"us-central1-f\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/us-central1-f\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2001\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1-b\",\n      \"description\": \"us-central1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/us-central1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2211\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west1-b\",\n      \"description\": \"us-west1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/us-west1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2212\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west1-c\",\n      \"description\": \"us-west1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/us-west1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2210\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west1-a\",\n      \"description\": \"us-west1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/us-west1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2342\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west4-a\",\n      \"description\": \"europe-west4-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/europe-west4-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2341\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west4-b\",\n      \"description\": \"europe-west4-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/europe-west4-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2340\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west4-c\",\n      \"description\": \"europe-west4-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/europe-west4-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2101\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west1-b\",\n      \"description\": \"europe-west1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/europe-west1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2104\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west1-d\",\n      \"description\": \"europe-west1-d\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/europe-west1-d\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2103\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west1-c\",\n      \"description\": \"europe-west1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/europe-west1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2300\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west3-c\",\n      \"description\": \"europe-west3-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/europe-west3-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2301\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west3-a\",\n      \"description\": \"europe-west3-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/europe-west3-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2302\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west3-b\",\n      \"description\": \"europe-west3-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/europe-west3-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2292\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west2-c\",\n      \"description\": \"europe-west2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/europe-west2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2291\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west2-b\",\n      \"description\": \"europe-west2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/europe-west2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2290\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west2-a\",\n      \"description\": \"europe-west2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/europe-west2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2221\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east1-b\",\n      \"description\": \"asia-east1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-east1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2220\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east1-a\",\n      \"description\": \"asia-east1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-east1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2222\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east1-c\",\n      \"description\": \"asia-east1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-east1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2261\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast1-b\",\n      \"description\": \"asia-southeast1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-southeast1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2260\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast1-a\",\n      \"description\": \"asia-southeast1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-southeast1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2262\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast1-c\",\n      \"description\": \"asia-southeast1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-southeast1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2251\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast1-b\",\n      \"description\": \"asia-northeast1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-northeast1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2252\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast1-c\",\n      \"description\": \"asia-northeast1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-northeast1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2250\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast1-a\",\n      \"description\": \"asia-northeast1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-northeast1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2322\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south1-c\",\n      \"description\": \"asia-south1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-south1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2320\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south1-b\",\n      \"description\": \"asia-south1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-south1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2321\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south1-a\",\n      \"description\": \"asia-south1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-south1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2282\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast1-b\",\n      \"description\": \"australia-southeast1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/australia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/australia-southeast1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2280\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast1-c\",\n      \"description\": \"australia-southeast1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/australia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/australia-southeast1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2281\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast1-a\",\n      \"description\": \"australia-southeast1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/australia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/australia-southeast1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2311\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-east1-b\",\n      \"description\": \"southamerica-east1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/southamerica-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/southamerica-east1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2312\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-east1-c\",\n      \"description\": \"southamerica-east1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/southamerica-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/southamerica-east1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2310\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-east1-a\",\n      \"description\": \"southamerica-east1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/southamerica-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/southamerica-east1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2372\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east2-a\",\n      \"description\": \"asia-east2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-east2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-east2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2371\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east2-b\",\n      \"description\": \"asia-east2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-east2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-east2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2370\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east2-c\",\n      \"description\": \"asia-east2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-east2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-east2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2392\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast2-a\",\n      \"description\": \"asia-northeast2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-northeast2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2390\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast2-b\",\n      \"description\": \"asia-northeast2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-northeast2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2391\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast2-c\",\n      \"description\": \"asia-northeast2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-northeast2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2410\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast3-a\",\n      \"description\": \"asia-northeast3-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-northeast3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-northeast3-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2412\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast3-b\",\n      \"description\": \"asia-northeast3-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-northeast3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-northeast3-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2411\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast3-c\",\n      \"description\": \"asia-northeast3-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-northeast3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-northeast3-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2470\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south2-a\",\n      \"description\": \"asia-south2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-south2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-south2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2472\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south2-b\",\n      \"description\": \"asia-south2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-south2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-south2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2471\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south2-c\",\n      \"description\": \"asia-south2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-south2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-south2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2440\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast2-a\",\n      \"description\": \"asia-southeast2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-southeast2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2442\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast2-b\",\n      \"description\": \"asia-southeast2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-southeast2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2441\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast2-c\",\n      \"description\": \"asia-southeast2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/asia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/asia-southeast2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2480\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast2-a\",\n      \"description\": \"australia-southeast2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/australia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/australia-southeast2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2482\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast2-b\",\n      \"description\": \"australia-southeast2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/australia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/australia-southeast2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2481\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast2-c\",\n      \"description\": \"australia-southeast2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/australia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/australia-southeast2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2452\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-central2-a\",\n      \"description\": \"europe-central2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-central2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/europe-central2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2450\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-central2-b\",\n      \"description\": \"europe-central2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-central2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/europe-central2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2451\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-central2-c\",\n      \"description\": \"europe-central2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-central2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/europe-central2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2352\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-north1-a\",\n      \"description\": \"europe-north1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-north1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/europe-north1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2350\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-north1-b\",\n      \"description\": \"europe-north1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-north1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/europe-north1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2351\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-north1-c\",\n      \"description\": \"europe-north1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-north1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/europe-north1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2382\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west6-a\",\n      \"description\": \"europe-west6-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west6\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/europe-west6-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2380\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west6-b\",\n      \"description\": \"europe-west6-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west6\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/europe-west6-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2381\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west6-c\",\n      \"description\": \"europe-west6-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west6\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/europe-west6-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2510\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west8-a\",\n      \"description\": \"europe-west8-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west8\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/europe-west8-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2511\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west8-b\",\n      \"description\": \"europe-west8-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west8\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/europe-west8-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2512\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west8-c\",\n      \"description\": \"europe-west8-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/europe-west8\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/europe-west8-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2330\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast1-a\",\n      \"description\": \"northamerica-northeast1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/northamerica-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/northamerica-northeast1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2331\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast1-b\",\n      \"description\": \"northamerica-northeast1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/northamerica-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/northamerica-northeast1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2332\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast1-c\",\n      \"description\": \"northamerica-northeast1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/northamerica-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/northamerica-northeast1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2461\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast2-a\",\n      \"description\": \"northamerica-northeast2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/northamerica-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/northamerica-northeast2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2460\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast2-b\",\n      \"description\": \"northamerica-northeast2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/northamerica-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/northamerica-northeast2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2462\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast2-c\",\n      \"description\": \"northamerica-northeast2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/northamerica-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/northamerica-northeast2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2490\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-west1-a\",\n      \"description\": \"southamerica-west1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/southamerica-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/southamerica-west1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2491\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-west1-b\",\n      \"description\": \"southamerica-west1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/southamerica-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/southamerica-west1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2492\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-west1-c\",\n      \"description\": \"southamerica-west1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/southamerica-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/southamerica-west1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2362\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west2-a\",\n      \"description\": \"us-west2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/us-west2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2361\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west2-b\",\n      \"description\": \"us-west2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/us-west2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2360\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west2-c\",\n      \"description\": \"us-west2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/us-west2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2420\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west3-a\",\n      \"description\": \"us-west3-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/us-west3-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2421\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west3-b\",\n      \"description\": \"us-west3-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/us-west3-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2422\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west3-c\",\n      \"description\": \"us-west3-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/us-west3-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2431\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west4-a\",\n      \"description\": \"us-west4-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/us-west4-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2432\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west4-b\",\n      \"description\": \"us-west4-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/us-west4-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2430\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west4-c\",\n      \"description\": \"us-west4-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/regions/us-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones/us-west4-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-fw-policy-aaaa/zones\"\n}\n"
  },
  {
    "path": "test-data/fw-policy/json-dumps/iam-policy.json",
    "content": "{\n  \"bindings\": [\n    {\n      \"members\": [\n        \"serviceAccount:service-12340004@compute-system.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/compute.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12340004@container-engine-robot.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/container.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12340004@containerregistry.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/containerregistry.ServiceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:12340004-compute@developer.gserviceaccount.com\",\n        \"serviceAccount:12340004@cloudservices.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/editor\"\n    },\n    {\n      \"members\": [\n        \"user:testuser@example.com\"\n      ],\n      \"role\": \"roles/owner\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12340004@gcp-sa-pubsub.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/pubsub.serviceAgent\"\n    }\n  ],\n  \"etag\": \"BwXdjsAMxlc=\",\n  \"version\": 1\n}\n"
  },
  {
    "path": "test-data/fw-policy/json-dumps/iam-roles-custom.json",
    "content": "{}\n"
  },
  {
    "path": "test-data/fw-policy/json-dumps/iam-service-accounts.json",
    "content": "{\n  \"accounts\": [\n    {\n      \"displayName\": \"Compute Engine default service account\",\n      \"email\": \"12340004-compute@developer.gserviceaccount.com\",\n      \"etag\": \"MDEwMjE5MjA=\",\n      \"name\": \"projects/gcpdiag-fw-policy-aaaa/serviceAccounts/12340004-compute@developer.gserviceaccount.com\",\n      \"oauth2ClientId\": \"REDACTED\",\n      \"projectId\": \"gcpdiag-fw-policy-aaaa\",\n      \"uniqueId\": \"101256181481776388736\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/fw-policy/json-dumps/org-constraint-compute.disableSerialPortAccess.json",
    "content": "{\n  \"booleanPolicy\": {\n    \"enforced\": true\n  },\n  \"constraint\": \"constraints/compute.disableSerialPortAccess\"\n}\n"
  },
  {
    "path": "test-data/fw-policy/json-dumps/org-constraint-compute.disableSerialPortLogging.json",
    "content": "{\n  \"booleanPolicy\":{},\n  \"constraint\": \"constraints/compute.disableSerialPortLogging\"\n}\n"
  },
  {
    "path": "test-data/fw-policy/json-dumps/org-constraint-compute.disableSshInBrowser.json",
    "content": "{\n  \"booleanPolicy\": {\n    \"enforced\": true\n  },\n  \"constraint\": \"constraints/compute.disableSshInBrowser\"\n}\n"
  },
  {
    "path": "test-data/fw-policy/json-dumps/org-constraint-compute.requireOsLogin.json",
    "content": "{\n  \"booleanPolicy\": {},\n  \"constraint\": \"constraints/compute.requireOsLogin\"\n}\n"
  },
  {
    "path": "test-data/fw-policy/json-dumps/org-constraint-compute.requireShieldedVm.json",
    "content": "{\n  \"booleanPolicy\": {},\n  \"constraint\": \"constraints/compute.requireShieldedVm\"\n}\n"
  },
  {
    "path": "test-data/fw-policy/json-dumps/org-constraint-custom.arEnforceImmutableTags.json",
    "content": "{\n  \"constraint\": \"customConstraints/custom.arEnforceImmutableTags\",\n  \"booleanPolicy\": {}\n}\n"
  },
  {
    "path": "test-data/fw-policy/json-dumps/org-constraint-iam.automaticIamGrantsForDefaultServiceAccounts.json",
    "content": "{\n  \"booleanPolicy\":{},\n  \"constraint\": \"constraints/iam.automaticIamGrantsForDefaultServiceAccounts\"\n}\n"
  },
  {
    "path": "test-data/fw-policy/json-dumps/org-constraint-iam.disableCrossProjectServiceAccountUsage.json",
    "content": "{\n  \"booleanPolicy\": {},\n  \"constraint\": \"constraints/iam.disableCrossProjectServiceAccountUsage\"\n}\n"
  },
  {
    "path": "test-data/fw-policy/json-dumps/org-constraints.json",
    "content": "{\n  \"constraints\": [\n    {\n      \"booleanConstraint\": {},\n      \"constraintDefault\": \"ALLOW\",\n      \"description\": \"This boolean constraint disables serial port access to Compute Engine VMs belonging to the organization, project, or folder where this constraint is set to True. By default, customers can enable serial port access for Compute Engine VMs on a per-VM or per-project basis using metadata attributes. Enforcing this constraint will disable serial port access for Compute Engine VMs, regardless of the metadata attributes.\",\n      \"displayName\": \"Disable VM serial port access\",\n      \"name\": \"constraints/compute.disableSerialPortAccess\"\n    },\n    {\n      \"booleanConstraint\": {},\n      \"constraintDefault\": \"ALLOW\",\n      \"description\": \"This boolean constraint disables serial port logging to Stackdriver from Compute Engine VMs belonging to the organization, project, or folder where this constraint is being enforced. By default, serial port logging for Compute Engine VMs is disabled, and can be selectively enabled on a per-VM or per-project basis using metadata attributes. When enforced, this constraint disables serial port logging for new Compute Engine VMs whenever a new VM is created, as well as preventing users from changing the metadata attribute of any VMs (old or new) to True. Disabling serial port logging can cause certain services that rely on it, such as Google Kubernetes Engine clusters, to not function correctly. Before you enforce this constraint, verify that the products in your project do not rely on serial port logging.\",\n      \"displayName\": \"Disable VM serial port logging to Stackdriver\",\n      \"name\": \"constraints/compute.disableSerialPortLogging\"\n    },\n    {\n      \"booleanConstraint\": {},\n      \"constraintDefault\": \"ALLOW\",\n      \"description\": \"This boolean constraint disables the SSH-in-browser tool in the Cloud Console for VMs that use OS Login and App Engine flexible environment VMs. When enforced, the SSH-in-browser button is disabled. By default, using the SSH-in-browser tool is allowed.\",\n      \"displayName\": \"Disable SSH-in-browser\",\n      \"name\": \"constraints/compute.disableSshInBrowser\"\n    },\n    {\n      \"booleanConstraint\": {},\n      \"constraintDefault\": \"ALLOW\",\n      \"description\": \"This boolean constraint, when set to true, enables OS Login on all newly created Projects. All VM instances created in new projects will have OS Login enabled. On new and existing projects, this constraint prevents metadata updates that disable OS Login at the project or instance level. By default, the OS Login feature is disabled on Compute Engine projects.GKE instances in private clusters running node pool versions 1.20.5-gke.2000 and later support OS Login. GKE instances in public clusters do not currently support OS Login. If this constraint is applied to a Project running public clusters, GKE instances running in that Project may not function properly.\",\n      \"displayName\": \"Require OS Login\",\n      \"name\": \"constraints/compute.requireOsLogin\"\n    },\n    {\n      \"booleanConstraint\": {},\n      \"constraintDefault\": \"ALLOW\",\n      \"description\": \"This boolean constraint, when set to True, requires that all new Compute Engine VM instances use Shielded disk images with Secure Boot, vTPM, and Integrity Monitoring options enabled. Secure Boot can be disabled after creation, if desired. Existing running instances will continue to work as usual. By default, Shielded VM features do not need to be enabled in order to create Compute Engine VM instances. Shielded VM features add verifiable integrity and exfiltration resistance to your VMs.\",\n      \"displayName\": \"Shielded VMs\",\n      \"name\": \"constraints/compute.requireShieldedVm\"\n    },\n    {\n      \"booleanConstraint\": {},\n      \"constraintDefault\": \"ALLOW\",\n      \"description\": \"This boolean constraint, when enforced, prevents the default App Engine and Compute Engine service accounts that are created in your projects from being automatically granted any IAM role on the project when the accounts are created. By default, these service accounts automatically receive the Editor role when they are created. To learn about default service accounts, see https://cloud.google.com/iam/help/service-accounts/default. To learn which roles to grant instead of the Editor role, see https://cloud.google.com/iam/help/service-accounts/troubleshoot-roles-default.\",\n      \"displayName\": \"Disable Automatic IAM Grants for Default Service Accounts\",\n      \"name\": \"constraints/iam.automaticIamGrantsForDefaultServiceAccounts\"\n    },\n    {\n      \"booleanConstraint\": {},\n      \"constraintDefault\": \"DENY\",\n      \"description\": \"When enforced, service accounts can only be deployed (using ServiceAccountUser role) to jobs (vms, functions, etc) running in the same project as the service account.\",\n      \"displayName\": \"Disable Cross-Project Service Account Usage\",\n      \"name\": \"constraints/iam.disableCrossProjectServiceAccountUsage\"\n    },\n    {\n      \"booleanConstraint\": {},\n      \"constraintDefault\": \"ALLOW\",\n      \"description\": \"All new Docker repositories must have tag immutability enabled.\",\n      \"displayName\": \"Enforce Immutable Tags\",\n      \"name\": \"customConstraints/custom.arEnforceImmutableTags\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/fw-policy/json-dumps/org-policies.json",
    "content": "{\n  \"policies\": [\n    {\n      \"version\": 2,\n      \"constraint\": \"constraints/cloudbuild.allowedWorkerPools\",\n      \"etag\": \"CNmNp74GEPCmnzw=\",\n      \"updateTime\": \"2025-03-06T16:01:29.126342Z\",\n      \"listPolicy\": {\n        \"allowedValues\": [\n          \"projects/12340004/locations/us-central1/workerPools/test-pool\"\n        ]\n      }\n    },\n    {\n      \"constraint\": \"constraints/compute.skipDefaultNetworkCreation\",\n      \"etag\": \"CL2Kp74GENDg7McD\",\n      \"updateTime\": \"2025-03-06T15:54:37.955986Z\",\n      \"booleanPolicy\": {}\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/fw-policy/json-dumps/project.json",
    "content": "{\n  \"name\": \"projects/12340004\",\n  \"parent\": \"folders/100002\",\n  \"projectId\": \"gcpdiag-fw-policy-aaaa\",\n  \"state\": \"ACTIVE\",\n  \"displayName\": \"gcpdiag test - fw-policy\",\n  \"createTime\": \"2021-12-06T16:30:26.953Z\",\n  \"updateTime\": \"2022-04-25T16:06:00.374Z\",\n  \"etag\": \"+uU+KxzozpwgpdToJJzXew==\",\n  \"labels\": {\n    \"gcpdiag\": \"test\"\n  }\n}\n"
  },
  {
    "path": "test-data/fw-policy/json-dumps/services.json",
    "content": "{\n  \"services\": [\n    {\n      \"name\": \"projects/12340004/services/autoscaling.googleapis.com\",\n      \"config\": {\n        \"name\": \"autoscaling.googleapis.com\",\n        \"title\": \"Cloud Autoscaling API\",\n        \"documentation\": {\n          \"summary\": \"An API for the Cloud Autoscaling for consuming autoscaling signals.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340004\"\n    },\n    {\n      \"name\": \"projects/12340004/services/bigquery.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigquery.googleapis.com\",\n        \"title\": \"BigQuery API\",\n        \"documentation\": {\n          \"summary\": \"A data platform for customers to create, manage, share and query data.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340004\"\n    },\n    {\n      \"name\": \"projects/12340004/services/bigquerymigration.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigquerymigration.googleapis.com\",\n        \"title\": \"BigQuery Migration API\",\n        \"documentation\": {\n          \"summary\": \"The migration service, exposing apis for migration jobs operations, and agent management.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340004\"\n    },\n    {\n      \"name\": \"projects/12340004/services/bigquerystorage.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigquerystorage.googleapis.com\",\n        \"title\": \"BigQuery Storage API\",\n        \"documentation\": {},\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340004\"\n    },\n    {\n      \"name\": \"projects/12340004/services/compute.googleapis.com\",\n      \"config\": {\n        \"name\": \"compute.googleapis.com\",\n        \"title\": \"Compute Engine API\",\n        \"documentation\": {\n          \"summary\": \"Creates and runs virtual machines on Google Cloud Platform.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"compute.googleapis.com/VpcNetwork\",\n            \"displayName\": \"VPC Network\",\n            \"description\": \"VPC Network.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the VPC Network.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the VPC Network, global always.\"\n              },\n              {\n                \"key\": \"network_id\",\n                \"description\": \"VPC Network resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/instances_per_vpc_network\",\n                \"compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/ip_aliases_per_vpc_network\",\n                \"compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/instances_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/subnet_ranges_per_vpc_network\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/instances_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/instances_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/instances_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340004\"\n    },\n    {\n      \"name\": \"projects/12340004/services/container.googleapis.com\",\n      \"config\": {\n        \"name\": \"container.googleapis.com\",\n        \"title\": \"Kubernetes Engine API\",\n        \"documentation\": {\n          \"summary\": \"Builds and manages container-based applications, powered by the open source Kubernetes technology.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340004\"\n    },\n    {\n      \"name\": \"projects/12340004/services/containerfilesystem.googleapis.com\",\n      \"config\": {\n        \"name\": \"containerfilesystem.googleapis.com\",\n        \"title\": \"Container File System API\",\n        \"documentation\": {},\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340004\"\n    },\n    {\n      \"name\": \"projects/12340004/services/containerregistry.googleapis.com\",\n      \"config\": {\n        \"name\": \"containerregistry.googleapis.com\",\n        \"title\": \"Container Registry API\",\n        \"documentation\": {\n          \"summary\": \"Google Container Registry provides secure, private Docker image storage on Google Cloud Platform.  Our API follows the Docker Registry API specification, so we are fully compatible with the Docker CLI client, as well as standard tooling using the Docker Registry API.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"serviceruntime.googleapis.com/api\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_version\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_method\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/consumer_project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/consumer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/producer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/consumer_resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/api\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/api/consumer/quota_used_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_refund_count\",\n                \"serviceruntime.googleapis.com/quota/used\",\n                \"serviceruntime.googleapis.com/quota/limit\",\n                \"serviceruntime.googleapis.com/quota/exceeded\",\n                \"serviceruntime.googleapis.com/allocation/consumer/quota_used_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/consumer_quota\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/quota/rate/consumer/used_count\",\n                \"serviceruntime.googleapis.com/quota/rate/consumer/refund_count\",\n                \"serviceruntime.googleapis.com/quota/allocation/consumer/usage\",\n                \"serviceruntime.googleapis.com/quota/consumer/limit\",\n                \"serviceruntime.googleapis.com/quota/consumer/exceeded\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340004\"\n    },\n    {\n      \"name\": \"projects/12340004/services/iam.googleapis.com\",\n      \"config\": {\n        \"name\": \"iam.googleapis.com\",\n        \"title\": \"Identity and Access Management (IAM) API\",\n        \"documentation\": {\n          \"summary\": \"Manages identity and access control for Google Cloud Platform resources, including the creation of service accounts, which you can use to authenticate to Google and make API calls.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"iam_service_account\",\n            \"displayName\": \"IAM Service Account\",\n            \"description\": \"An IAM Service Account.\",\n            \"labels\": [\n              {\n                \"key\": \"project_id\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"unique_id\",\n                \"description\": \"The unique_id of the service account.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"iam.googleapis.com/WorkloadIdentityPoolProvider\",\n            \"displayName\": \"Workload Identity Pool Provider\",\n            \"description\": \"A workload identity pool provider.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location of the resource.\"\n              },\n              {\n                \"key\": \"pool_id\",\n                \"description\": \"The ID of the provider's workload identity pool parent resource.\"\n              },\n              {\n                \"key\": \"provider_id\",\n                \"description\": \"The ID of the workload identity pool provider resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"iam.googleapis.com/WorkloadIdentityPoolProvider\",\n              \"metrics\": [\n                \"iam.googleapis.com/workload_identity_federation/count\",\n                \"iam.googleapis.com/workload_identity_federation/key_usage_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"iam_service_account\",\n              \"metrics\": [\n                \"iam.googleapis.com/service_account/authn_events_count\",\n                \"iam.googleapis.com/service_account/key/authn_events_count\",\n                \"iam.googleapis.com/service_account/authn_events_count_preprod\",\n                \"iam.googleapis.com/service_account/key/authn_events_count_preprod\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340004\"\n    },\n    {\n      \"name\": \"projects/12340004/services/iamcredentials.googleapis.com\",\n      \"config\": {\n        \"name\": \"iamcredentials.googleapis.com\",\n        \"title\": \"IAM Service Account Credentials API\",\n        \"documentation\": {\n          \"summary\": \"Creates short-lived credentials for impersonating IAM service accounts. To enable this API, you must enable the IAM API (iam.googleapis.com).\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"serviceruntime.googleapis.com/api\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_version\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_method\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/consumer_project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              }\n            ]\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/api\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/api/consumer/quota_used_count\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340004\"\n    },\n    {\n      \"name\": \"projects/12340004/services/monitoring.googleapis.com\",\n      \"config\": {\n        \"name\": \"monitoring.googleapis.com\",\n        \"title\": \"Cloud Monitoring API\",\n        \"documentation\": {\n          \"summary\": \"Manages your Cloud Monitoring data and configurations.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"monitoring.googleapis.com/ChargedProject\",\n            \"displayName\": \"Cloud monitoring target\",\n            \"description\": \"A cloud monitoring specialization target schema of cloud.ChargedProject.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The monitored resource container. Could be project, workspace, etc.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The service-specific notion of location.\"\n              },\n              {\n                \"key\": \"service\",\n                \"description\": \"The name of the API service with which the data is associated (e.g.,'monitoring.googleapis.com').\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"monitoring.googleapis.com/MetricStatistics\",\n            \"displayName\": \"Metric Statistics\",\n            \"description\": \"Information about a user-written metric in Cloud Monitoring.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project to which the metric is written, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The cloud region where the metric was received.\"\n              },\n              {\n                \"key\": \"metric_type\",\n                \"description\": \"The metric type.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"monitoring.googleapis.com/MetricIngestionAttribution\",\n            \"displayName\": \"Metric Ingestion Attribution\",\n            \"description\": \"Attribution for metric ingestion.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project to which the metric is written, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The cloud region where the metric was received.\"\n              },\n              {\n                \"key\": \"attribution_dimension\",\n                \"description\": \"The dimension used for attribution reporting. It is not recommended that aggregations are performed across dimensions because a single metric point can be recorded with multiple dimensions which could cause double counting. Currently only \\\"namespace\\\" is supported.\"\n              },\n              {\n                \"key\": \"attribution_id\",\n                \"description\": \"The attribution id of the source of the metric write.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"monitoring.googleapis.com/ChargedProject\",\n              \"metrics\": [\n                \"monitoring.googleapis.com/billing/bytes_ingested\",\n                \"monitoring.googleapis.com/billing/samples_ingested\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"monitoring.googleapis.com/MetricStatistics\",\n              \"metrics\": [\n                \"monitoring.googleapis.com/collection/write_request_count\",\n                \"monitoring.googleapis.com/collection/write_request_point_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"monitoring.googleapis.com/MetricIngestionAttribution\",\n              \"metrics\": [\n                \"monitoring.googleapis.com/collection/attribution/sample_count\",\n                \"monitoring.googleapis.com/collection/attribution/write_sample_count\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340004\"\n    },\n    {\n      \"name\": \"projects/12340004/services/oslogin.googleapis.com\",\n      \"config\": {\n        \"name\": \"oslogin.googleapis.com\",\n        \"title\": \"Cloud OS Login API\",\n        \"documentation\": {\n          \"summary\": \"You can use OS Login to manage access to your VM instances using IAM roles.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340004\"\n    },\n    {\n      \"name\": \"projects/12340004/services/pubsub.googleapis.com\",\n      \"config\": {\n        \"name\": \"pubsub.googleapis.com\",\n        \"title\": \"Cloud Pub/Sub API\",\n        \"documentation\": {\n          \"summary\": \"Provides reliable, many-to-many, asynchronous messaging between applications.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340004\"\n    },\n    {\n      \"name\": \"projects/12340004/services/storage-api.googleapis.com\",\n      \"config\": {\n        \"name\": \"storage-api.googleapis.com\",\n        \"title\": \"Google Cloud Storage JSON API\",\n        \"documentation\": {\n          \"summary\": \"Lets you store and retrieve potentially-large, immutable data objects.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340004\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/fw-policy/org-policy.tf",
    "content": "resource \"google_org_policy_policy\" \"disable_serial_port_access\" {\n  name   = \"${data.google_folder.parent.name}/policies/compute.disableSerialPortAccess\"\n  parent = data.google_folder.parent.name\n  spec {\n    rules {\n      enforce = \"TRUE\"\n    }\n  }\n}\n"
  },
  {
    "path": "test-data/fw-policy/project.tf",
    "content": "/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nresource \"random_string\" \"project_id_suffix\" {\n  length  = 8\n  number  = true\n  lower   = true\n  upper   = false\n  special = false\n}\n\nresource \"google_project\" \"project\" {\n  name            = \"gcpdiag test - fw-policy\"\n  project_id      = \"gcpdiag-fw-policy-${random_string.project_id_suffix.id}\"\n  billing_account = var.billing_account_id\n  folder_id       = \"folders/${var.sub_folder_id}\"\n  labels = {\n    gcpdiag : \"test\"\n  }\n}\n\nresource \"google_project_service\" \"compute\" {\n  project = google_project.project.project_id\n  service = \"compute.googleapis.com\"\n}\n\nresource \"google_project_service\" \"container\" {\n  project = google_project.project.project_id\n  service = \"container.googleapis.com\"\n\n  depends_on = [google_project_service.compute]\n}\n\ndata \"google_folder\" \"parent\" {\n  folder              = \"folders/${var.parent_folder_id}\"\n  lookup_organization = true\n}\n\ndata \"google_folder\" \"sub\" {\n  folder = \"folders/${var.sub_folder_id}\"\n}\n\ndata \"google_compute_network\" \"default\" {\n  project = google_project.project.project_id\n  name    = \"default\"\n}\n\noutput \"project_id\" {\n  value = google_project.project.project_id\n}\n\noutput \"project_id_suffix\" {\n  value = random_string.project_id_suffix.id\n}\n\noutput \"project_nr\" {\n  value = google_project.project.number\n}\n\noutput \"org_id\" {\n  value = regex(\"organizations/(\\\\d+)\", data.google_folder.parent.organization)[0]\n}\n\noutput \"folder_id_1\" {\n  value = regex(\"folders/(\\\\d+)\", data.google_folder.parent.id)[0]\n}\n\noutput \"folder_id_2\" {\n  value = regex(\"folders/(\\\\d+)\", data.google_folder.sub.id)[0]\n}\n"
  },
  {
    "path": "test-data/fw-policy/variables.tf",
    "content": "variable \"billing_account_id\" {}\n\nvariable \"parent_folder_id\" {}\n\nvariable \"sub_folder_id\" {}\n"
  },
  {
    "path": "test-data/gaes1/Makefile",
    "content": "PROJECT_ID  := $(shell terraform output -raw project_id)\nPROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix)\nPROJECT_NR  := $(shell terraform output -raw project_nr)\nORG_ID      := $(shell terraform output -raw org_id)\nCURL         = ../../bin/curl-wrap.sh\nJSON_CLEANER = ../../bin/json-cleaner\nREGION_1     = us-central1\nREGION_2     = europe-west1\n\nFAKE_PROJECT_ID_SUFFIX = aaaa\nFAKE_PROJECT_NR = 123400010\nFAKE_ORG_ID = 11112222\nSED_SUBST_FAKE = sed -e \"s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/\" \\\n\t\t     -e \"s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/\" \\\n\t\t     -e \"s/$(ORG_ID)/$(FAKE_ORG_ID)/\" \\\n\nall:\t\\\n\tjson-dumps/versions.json \\\n\tjson-dumps/project.json \\\n\tjson-dumps/services.json \\\n\tjson-dumps/appengine_services.json \\\n\tjson-dumps/logging-entries-1.json\n\njson-dumps/project.json:\n\t$(CURL) -fsS \\\n\t\t'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/services.json:\n\t$(CURL) -fsS \\\n\t  'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/versions.json:\n\t$(CURL) -fsS \\\n\t  'https://appengine.googleapis.com/v1/apps/$(PROJECT_ID)/services/default/versions' \\\n\t  | $(JSON_CLEANER) appengine_versions \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/appengine_services.json:\n\t$(CURL) -fsS \\\n\t  'https://appengine.googleapis.com/v1/apps/$(PROJECT_ID)/services' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n"
  },
  {
    "path": "test-data/gaes1/gaes1-bucket-object.tf",
    "content": "resource \"google_storage_bucket_object\" \"hello_world\" {\n  name   = \"hello_world.zip\"\n  source = \"hello_world.zip\"\n  bucket = \"gaes1-bucket\"\n}\n"
  },
  {
    "path": "test-data/gaes1/gaes1-bucket.tf",
    "content": "resource \"google_storage_bucket\" \"gaes1-bucket\" {\n  name     = \"gaes1-bucket\"\n  location = \"EU\"\n  project  = \"gcpdiag-gaes1-vvdo0yn5\"\n}\n"
  },
  {
    "path": "test-data/gaes1/gaes1.tf",
    "content": "resource \"google_app_engine_standard_app_version\" \"version1\" {\n  version_id = \"v1\"\n  service    = \"default\"\n  runtime    = \"python39\"\n\n  project = \"gcpdiag-gaes1-vvdo0yn5\"\n\n  entrypoint {\n    shell = \"python ./main.py\"\n  }\n\n  deployment {\n    zip {\n      source_url = \"https://storage.googleapis.com/gaes1-bucket/hello_world.zip\"\n    }\n  }\n\n  env_variables = {\n    port = \"8080\"\n  }\n\n  automatic_scaling {\n    min_idle_instances = 0\n    max_idle_instances = 1\n  }\n\n  delete_service_on_destroy = true\n}\n"
  },
  {
    "path": "test-data/gaes1/json-dumps/appengine_services.json",
    "content": "{\n  \"services\": [\n    {\n      \"name\": \"apps/gcpdiag-gaes1-aaaa/services/default\",\n      \"id\": \"default\",\n      \"split\": {\n        \"allocations\": {\n          \"v1\": 1\n        }\n      }\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gaes1/json-dumps/logging-entries-1.json",
    "content": "{\n  \"entries\": []\n}\n"
  },
  {
    "path": "test-data/gaes1/json-dumps/project.json",
    "content": "{\n  \"name\": \"projects/123400010\",\n  \"parent\": \"organizations/11112222\",\n  \"projectId\": \"gcpdiag-gaes1-aaaa\",\n  \"state\": \"ACTIVE\",\n  \"displayName\": \"gcpdiag test - gaes1\",\n  \"createTime\": \"2022-01-16T15:01:44.243Z\",\n  \"updateTime\": \"2022-01-16T15:01:46.204Z\",\n  \"etag\": \"+KU/oa5enHLJr4zqmCD/8w==\",\n  \"labels\": {\n    \"gcpdiag\": \"test\"\n  }\n}\n"
  },
  {
    "path": "test-data/gaes1/json-dumps/services.json",
    "content": "{\n  \"services\": [\n    {\n      \"name\": \"projects/123400010/services/appengine.googleapis.com\",\n      \"config\": {\n        \"name\": \"appengine.googleapis.com\",\n        \"title\": \"App Engine Admin API\",\n        \"documentation\": {\n          \"summary\": \"Provisions and manages developers' App Engine applications.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"serviceruntime.googleapis.com/api\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_version\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_method\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/consumer_project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/consumer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/producer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/consumer_resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/api\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/api/consumer/request_count\",\n                \"serviceruntime.googleapis.com/api/consumer/error_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_used_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_refund_count\",\n                \"serviceruntime.googleapis.com/api/consumer/total_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_overhead_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/backend_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/response_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer\",\n                \"serviceruntime.googleapis.com/quota/used\",\n                \"serviceruntime.googleapis.com/quota/limit\",\n                \"serviceruntime.googleapis.com/quota/exceeded\",\n                \"serviceruntime.googleapis.com/allocation/consumer/quota_used_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/consumer_quota\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/quota/rate/consumer/used_count\",\n                \"serviceruntime.googleapis.com/quota/rate/consumer/refund_count\",\n                \"serviceruntime.googleapis.com/quota/allocation/consumer/usage\",\n                \"serviceruntime.googleapis.com/quota/consumer/limit\",\n                \"serviceruntime.googleapis.com/quota/consumer/exceeded\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/123400010\"\n    },\n    {\n      \"name\": \"projects/123400010/services/cloudbuild.googleapis.com\",\n      \"config\": {\n        \"name\": \"cloudbuild.googleapis.com\",\n        \"title\": \"Cloud Build API\",\n        \"documentation\": {\n          \"summary\": \"Creates and manages builds on Google Cloud Platform.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/123400010\"\n    },\n    {\n      \"name\": \"projects/123400010/services/containerregistry.googleapis.com\",\n      \"config\": {\n        \"name\": \"containerregistry.googleapis.com\",\n        \"title\": \"Container Registry API\",\n        \"documentation\": {\n          \"summary\": \"Google Container Registry provides secure, private Docker image storage on Google Cloud Platform.  Our API follows the Docker Registry API specification, so we are fully compatible with the Docker CLI client, as well as standard tooling using the Docker Registry API.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"serviceruntime.googleapis.com/api\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_version\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_method\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/consumer_project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/consumer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/producer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/consumer_resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/api\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/api/consumer/quota_used_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_refund_count\",\n                \"serviceruntime.googleapis.com/quota/used\",\n                \"serviceruntime.googleapis.com/quota/limit\",\n                \"serviceruntime.googleapis.com/quota/exceeded\",\n                \"serviceruntime.googleapis.com/allocation/consumer/quota_used_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/consumer_quota\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/quota/rate/consumer/used_count\",\n                \"serviceruntime.googleapis.com/quota/rate/consumer/refund_count\",\n                \"serviceruntime.googleapis.com/quota/allocation/consumer/usage\",\n                \"serviceruntime.googleapis.com/quota/consumer/limit\",\n                \"serviceruntime.googleapis.com/quota/consumer/exceeded\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/123400010\"\n    },\n    {\n      \"name\": \"projects/123400010/services/logging.googleapis.com\",\n      \"config\": {\n        \"name\": \"logging.googleapis.com\",\n        \"title\": \"Cloud Logging API\",\n        \"documentation\": {\n          \"summary\": \"Writes log entries and manages your Cloud Logging configuration.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"logging.googleapis.com/ChargedProject\",\n            \"displayName\": \"Cloud logging target\",\n            \"description\": \"A cloud logging specialization target schema of cloud.ChargedProject.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The monitored resource container. Could be project, workspace, etc.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The service-specific notion of location.\"\n              },\n              {\n                \"key\": \"service\",\n                \"description\": \"The name of the API service with which the data is associated (e.g.,'logging.googleapis.com').\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"logging.googleapis.com/ChargedProject\",\n              \"metrics\": [\n                \"logging.googleapis.com/billing/ingested_bytes\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/123400010\"\n    },\n    {\n      \"name\": \"projects/123400010/services/pubsub.googleapis.com\",\n      \"config\": {\n        \"name\": \"pubsub.googleapis.com\",\n        \"title\": \"Cloud Pub/Sub API\",\n        \"documentation\": {\n          \"summary\": \"Provides reliable, many-to-many, asynchronous messaging between applications.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/123400010\"\n    },\n    {\n      \"name\": \"projects/123400010/services/storage-api.googleapis.com\",\n      \"config\": {\n        \"name\": \"storage-api.googleapis.com\",\n        \"title\": \"Google Cloud Storage JSON API\",\n        \"documentation\": {\n          \"summary\": \"Lets you store and retrieve potentially-large, immutable data objects.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/123400010\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gaes1/json-dumps/versions.json",
    "content": "{\n  \"versions\": [\n    {\n      \"automaticScaling\": {\n        \"maxIdleInstances\": 1\n      },\n      \"createTime\": \"2022-01-16T15:24:02Z\",\n      \"createdBy\": \"REDACTED\",\n      \"diskUsageBytes\": \"2488636\",\n      \"env\": \"standard\",\n      \"id\": \"v1\",\n      \"instanceClass\": \"F1\",\n      \"name\": \"apps/gcpdiag-gaes1-aaaa/services/default/versions/v1\",\n      \"network\": {},\n      \"runtime\": \"python39\",\n      \"runtimeChannel\": \"default\",\n      \"servingStatus\": \"SERVING\",\n      \"threadsafe\": true,\n      \"versionUrl\": \"https://v1-dot-gcpdiag-gaes1-aaaa.appspot.com\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gaes1/project.tf",
    "content": "/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nresource \"random_string\" \"project_id_suffix\" {\n  length  = 8\n  number  = true\n  lower   = true\n  upper   = false\n  special = false\n}\n\nresource \"google_project\" \"project\" {\n  name            = \"gcpdiag test - gaes1\"\n  project_id      = \"gcpdiag-gaes1-${random_string.project_id_suffix.id}\"\n  org_id          = var.folder_id == \"\" ? var.org_id : null\n  folder_id       = var.folder_id != \"\" ? var.folder_id : null\n  billing_account = var.billing_account_id\n  labels = {\n    gcpdiag : \"test\"\n  }\n}\n\nresource \"google_project_service\" \"cloudbuild\" {\n  project = google_project.project.project_id\n  service = \"cloudbuild.googleapis.com\"\n}\n\nresource \"google_project_service\" \"appengine\" {\n  project = google_project.project.project_id\n  service = \"appengine.googleapis.com\"\n}\n\noutput \"project_id\" {\n  value = google_project.project.project_id\n}\n\noutput \"project_id_suffix\" {\n  value = random_string.project_id_suffix.id\n}\n\noutput \"project_nr\" {\n  value = google_project.project.number\n}\n\noutput \"org_id\" {\n  value = var.org_id\n}\n"
  },
  {
    "path": "test-data/gaes1/variables.tf",
    "content": "variable \"billing_account_id\" {}\n\nvariable \"org_id\" {}\nvariable \"folder_id\" { default = \"\" }\n"
  },
  {
    "path": "test-data/gcb1/Makefile",
    "content": "PROJECT_ID  := $(shell terraform output -raw project_id)\nPROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix)\nPROJECT_NR  := $(shell terraform output -raw project_nr)\nORG_ID      := $(shell terraform output -raw org_id)\nBUILD1_CONFIG            := $(shell terraform output -raw build1_config)\nBUILD1B_CONFIG           := $(shell terraform output -raw build1b_config)\nBUILD2_CONFIG            := $(shell terraform output -raw build2_config)\nBUILD3_CONFIG            := $(shell terraform output -raw build3_config)\nBUILD4_CONFIG            := $(shell terraform output -raw build4_config)\nBUCKET_WITH_RETENTION    := $(shell terraform output -raw bucket_with_retention)\nARTIFACT_REGISTRY        := $(shell terraform output -raw artifact_registry)\nCURL         = ../../bin/curl-wrap.sh\nJSON_CLEANER = ../../bin/json-cleaner\nREGION_1     = us-central1\nREGION_2     = europe-west1\n\nFAKE_PROJECT_ID_SUFFIX = aaaa\nFAKE_PROJECT_NR = 12340005\nFAKE_ORG_ID = 11112222\nSED_SUBST_FAKE = sed -e \"s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/\" \\\n\t\t     -e \"s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/\" \\\n\t\t     -e \"s/$(ORG_ID)/$(FAKE_ORG_ID)/\" \\\n\nall:\t\\\n\tjson-dumps/cloudbuild.json \\\n\tjson-dumps/cloudbuild-$(REGION_1).json \\\n\tjson-dumps/cloudbuild-empty.json \\\n\tjson-dumps/cloudbuild-triggers.json \\\n\tjson-dumps/bucket-gcpdiag-gcb1-bucket1-aaaa.json \\\n\tjson-dumps/artifact-registry-policy.json \\\n\tjson-dumps/artifact-registry-project-settings.json \\\n\tjson-dumps/iam-service-accounts.json \\\n\tjson-dumps/project.json \\\n\tjson-dumps/services.json\n\nrun-builds:\n\tgcloud builds submit --no-source --config $(BUILD1_CONFIG) \\\n\t\t--project $(PROJECT_ID) || true\n\tgcloud builds submit --no-source --config $(BUILD1B_CONFIG) \\\n\t\t--project $(PROJECT_ID) || true\n\tgcloud builds submit --no-source --config $(BUILD2_CONFIG) \\\n\t\t--project $(PROJECT_ID) || true\n\tgcloud builds submit --no-source --config $(BUILD3_CONFIG) \\\n\t\t--project $(PROJECT_ID) || true\n\tgcloud builds submit --no-source --config $(BUILD4_CONFIG) \\\n\t\t--project $(PROJECT_ID) || true\n\tgcloud builds submit --no-source --region $(REGION_1) --config $(BUILD3_CONFIG) \\\n\t\t--project $(PROJECT_ID) || true\n\njson-dumps/project.json:\n\t$(CURL) -fsS \\\n\t\t'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/services.json:\n\t$(CURL) -fsS \\\n\t  'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/cloudbuild.json:\n\t$(CURL) -fsS \\\n\t  'https://cloudbuild.googleapis.com/v1/projects/$(PROJECT_ID)/locations/-/builds' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/cloudbuild-$(REGION_1).json:\n\t$(CURL) -fsS \\\n\t  'https://cloudbuild.googleapis.com/v1/projects/$(PROJECT_ID)/locations/$(REGION_1)/builds' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/cloudbuild-empty.json:\n\t$(CURL) -fsS \\\n\t  'https://cloudbuild.googleapis.com/v1/projects/$(PROJECT_ID)/locations/$(REGION_2)/builds' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/cloudbuild-triggers.json:\n\t$(CURL) -fsS \\\n\t  'https://cloudbuild.googleapis.com/v1/projects/$(PROJECT_ID)/triggers' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/bucket-gcpdiag-gcb1-bucket1-aaaa.json:\n\t$(CURL) -fv \\\n\t\t'https://storage.googleapis.com/storage/v1/b/${BUCKET_WITH_RETENTION}' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/artifact-registry-policy.json:\n\t$(CURL) -fv \\\n\t\t'https://artifactregistry.googleapis.com/v1/$(ARTIFACT_REGISTRY):getIamPolicy' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/artifact-registry-project-settings.json:\n\t$(CURL) -fv \\\n\t\t'https://artifactregistry.googleapis.com/v1/projects/$(PROJECT_ID)/projectSettings' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/iam-service-accounts.json:\n\t$(CURL) -fsS \\\n\t\t'https://iam.googleapis.com/v1/projects/$(PROJECT_ID)/serviceAccounts' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n"
  },
  {
    "path": "test-data/gcb1/README.md",
    "content": "# Generating builds history data.\n## TLDR\nAfter initializing the repository to generate build history run\n`make run-builds` once and only once.\n\n## Explanation\n\nTerraform does not allow to run builds since it is not a resource,\nbut imperative procedure. Also there is no way to clear builds history, so it is\nimportant that running builds happens only once.\n\nIf you want to add some data to build history, and you need to retry build\nseveral times to get desired outcome, then after you got to desired effect\neither run `terraform destroy` and initialize a new project or manually remove\nolder builds from json dump.\n"
  },
  {
    "path": "test-data/gcb1/artifact_registry.tf",
    "content": "data \"google_client_config\" \"default\" {\n}\n\ndata \"google_client_openid_userinfo\" \"me\" {\n}\n\nresource \"google_artifact_registry_repository\" \"gcb1_repo\" {\n  provider = google-beta\n\n  project       = google_project.project.project_id\n  location      = \"us-central1\"\n  repository_id = \"gcb1-repository\"\n  description   = \"example docker repository\"\n  format        = \"DOCKER\"\n}\n\n//   https://cloud.google.com/artifact-registry/docs/transition/setup-gcr-repo#redirect-enable\nresource \"google_artifact_registry_repository\" \"legacy\" {\n  location      = \"us\"\n  project       = google_project.project.project_id\n  description   = \"gcr.io repository\"\n  format        = \"DOCKER\"\n  repository_id = \"gcr.io\"\n}\n\n\nresource \"google_project_iam_binding\" \"storageAdmin\" {\n  project = google_project.project.project_id\n  role    = \"roles/storage.admin\"\n\n  members = [\n    \"user:${data.google_client_openid_userinfo.me.email}\",\n  ]\n}\n\nresource \"null_resource\" \"ar-redirect\" {\n\n  provisioner \"local-exec\" {\n    command = <<-EOT\n      curl -H 'Authorization: Bearer nonsensitive(${data.google_client_config.default.access_token})' \\\n      -H 'Content-type: application/json' \\\n      https://artifactregistry.googleapis.com/v1/projects/${google_project.project.project_id}/projectSettings?updateMask=legacyRedirectionState \\\n      -X PATCH \\\n      --data '{\n        \"legacyRedirectionState\": \"REDIRECTION_FROM_GCR_IO_ENABLED\"\n      }'\n    EOT\n  }\n  depends_on = [\n    google_project_iam_binding.storageAdmin\n  ]\n}\n\nresource \"google_artifact_registry_repository_iam_binding\" \"binding\" {\n  provider   = google-beta\n  project    = google_artifact_registry_repository.gcb1_repo.project\n  location   = google_artifact_registry_repository.gcb1_repo.location\n  repository = google_artifact_registry_repository.gcb1_repo.name\n  role       = \"roles/artifactregistry.admin\"\n  members = [\n    \"serviceAccount:${google_service_account.service_account_custom2.email}\",\n  ]\n}\n\nlocals {\n  repository_url        = \"${google_artifact_registry_repository.gcb1_repo.location}-docker.pkg.dev/${google_project.project.project_id}/${google_artifact_registry_repository.gcb1_repo.repository_id}\"\n  legacy_repository_url = \"${google_artifact_registry_repository.legacy.repository_id}/${google_project.project.project_id}\"\n}\n\noutput \"artifact_registry\" {\n  value = google_artifact_registry_repository.gcb1_repo.id\n}\n\noutput \"legacy_artifact_registry\" {\n  value = google_artifact_registry_repository.legacy.repository_id\n}\n"
  },
  {
    "path": "test-data/gcb1/buckets.tf",
    "content": "resource \"google_storage_bucket\" \"bucket_with_retention\" {\n  project       = google_project.project.project_id\n  name          = \"gcpdiag-gcb1-bucket1-${random_string.project_id_suffix.id}\"\n  location      = \"US\"\n  storage_class = \"STANDARD\"\n  retention_policy {\n    retention_period = 10\n  }\n}\n\noutput \"bucket_with_retention\" {\n  value = google_storage_bucket.bucket_with_retention.name\n}\n"
  },
  {
    "path": "test-data/gcb1/build_configs/.gitignore",
    "content": "*.yaml\n"
  },
  {
    "path": "test-data/gcb1/build_configs/cloudbuild1.yaml.tpl",
    "content": "# Builds an image but errors on uploading it to artifact registry due to lack of\n# permissions.\nsteps:\n- name: gcr.io/cloud-builders/docker\n  args: [\"tag\", \"gcr.io/cloud-builders/docker\", \"${image}\"]\nimages:\n- ${image}\nserviceAccount: '${sa}'\noptions:\n  logging: CLOUD_LOGGING_ONLY\n"
  },
  {
    "path": "test-data/gcb1/build_configs/cloudbuild2.yaml.tpl",
    "content": "# Errors on uploading logs to bucket with retention policy.\nsteps:\n- name: gcr.io/cloud-builders/docker\n  args: [\"ps\"]\nlogsBucket: 'gs://${bucket}'\n"
  },
  {
    "path": "test-data/gcb1/build_configs/cloudbuild3.yaml.tpl",
    "content": "# Errors in one of the steps.\nsteps:\n- name: ubuntu\n  args: [bash, -c, \"[ 1 == 2 ]\"]\n"
  },
  {
    "path": "test-data/gcb1/build_configs/cloudbuild4.yaml.tpl",
    "content": "# Successfully uploads logs to bucket with retention policy.\nsteps:\n- name: gcr.io/cloud-builders/docker\n  args: [\"ps\"]\nlogsBucket: 'gs://${bucket}'\noptions:\n  logging: GCS_ONLY\n  logStreamingOption: STREAM_OFF\n"
  },
  {
    "path": "test-data/gcb1/build_configs.tf",
    "content": "resource \"local_file\" \"build1_config\" {\n  content = templatefile(\n    \"${path.module}/build_configs/cloudbuild1.yaml.tpl\",\n    {\n      image = \"${local.repository_url}/image\",\n      sa    = google_service_account.service_account_custom1.name\n  })\n  filename = \"${path.module}/build_configs/cloudbuild1.yaml\"\n}\n\nresource \"local_file\" \"build1b_config\" {\n  content = templatefile(\n    \"${path.module}/build_configs/cloudbuild1.yaml.tpl\",\n    {\n      image = \"${local.legacy_repository_url}/image\",\n      sa    = google_service_account.service_account_custom1.name\n  })\n  filename = \"${path.module}/build_configs/cloudbuild1b.yaml\"\n}\n\nresource \"local_file\" \"build2_config\" {\n  content = templatefile(\n    \"${path.module}/build_configs/cloudbuild2.yaml.tpl\",\n    {\n      bucket = google_storage_bucket.bucket_with_retention.name,\n  })\n  filename = \"${path.module}/build_configs/cloudbuild2.yaml\"\n}\n\nresource \"local_file\" \"build3_config\" {\n  content = templatefile(\n  \"${path.module}/build_configs/cloudbuild3.yaml.tpl\", {})\n  filename = \"${path.module}/build_configs/cloudbuild3.yaml\"\n}\n\nresource \"local_file\" \"build4_config\" {\n  content = templatefile(\n    \"${path.module}/build_configs/cloudbuild4.yaml.tpl\",\n    {\n      bucket = google_storage_bucket.bucket_with_retention.name,\n  })\n  filename = \"${path.module}/build_configs/cloudbuild4.yaml\"\n}\n\noutput \"build1_config\" {\n  value = local_file.build1_config.filename\n}\n\noutput \"build1b_config\" {\n  value = local_file.build1b_config.filename\n}\n\noutput \"build2_config\" {\n  value = local_file.build2_config.filename\n}\n\noutput \"build3_config\" {\n  value = local_file.build3_config.filename\n}\n\noutput \"build4_config\" {\n  value = local_file.build4_config.filename\n}\n"
  },
  {
    "path": "test-data/gcb1/json-dumps/artifact-registry-policy.json",
    "content": "{\n  \"version\": 1,\n  \"etag\": \"BwXb+QqqmFg=\",\n  \"bindings\": [\n    {\n      \"role\": \"roles/artifactregistry.admin\",\n      \"members\": [\n        \"serviceAccount:gcb-custom2@gcpdiag-gcb1-aaaa.iam.gserviceaccount.com\"\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gcb1/json-dumps/artifact-registry-project-settings.json",
    "content": "{\n  \"legacyRedirectionState\": \"REDIRECTION_FROM_GCR_IO_ENABLED\"\n}\n"
  },
  {
    "path": "test-data/gcb1/json-dumps/bucket-gcpdiag-gcb1-bucket1-aaaa.json",
    "content": "{\n  \"kind\": \"storage#bucket\",\n  \"selfLink\": \"https://www.googleapis.com/storage/v1/b/gcpdiag-gcb1-bucket1-aaaa\",\n  \"id\": \"gcpdiag-gcb1-bucket1-aaaa\",\n  \"name\": \"gcpdiag-gcb1-bucket1-aaaa\",\n  \"projectNumber\": \"12340005\",\n  \"metageneration\": \"2\",\n  \"location\": \"US\",\n  \"storageClass\": \"STANDARD\",\n  \"etag\": \"CAI=\",\n  \"timeCreated\": \"2022-04-05T10:41:00.004Z\",\n  \"updated\": \"2022-04-05T11:19:01.187Z\",\n  \"retentionPolicy\": {\n    \"retentionPeriod\": \"10\",\n    \"effectiveTime\": \"2022-04-05T11:20:01.062Z\"\n  },\n  \"iamConfiguration\": {\n    \"bucketPolicyOnly\": {\n      \"enabled\": false\n    },\n    \"uniformBucketLevelAccess\": {\n      \"enabled\": false\n    },\n    \"publicAccessPrevention\": \"inherited\"\n  },\n  \"locationType\": \"multi-region\",\n  \"rpo\": \"DEFAULT\"\n}\n"
  },
  {
    "path": "test-data/gcb1/json-dumps/cloudbuild-empty.json",
    "content": "{}\n"
  },
  {
    "path": "test-data/gcb1/json-dumps/cloudbuild-triggers.json",
    "content": "{\n  \"triggers\": [\n    {\n      \"id\": \"1affbb4f-7b0b-4ebe-bb44-c440b574279d\",\n      \"build\": {\n        \"steps\": [\n          {\n            \"name\": \"gcr.io/cloud-builders/gsutil\"\n          }\n        ],\n        \"timeout\": \"600s\"\n      },\n      \"createTime\": \"2022-04-03T14:02:31.203612089Z\",\n      \"triggerTemplate\": {\n        \"projectId\": \"gcpdiag-gcb1-aaaa\",\n        \"repoName\": \"test-repo\",\n        \"branchName\": \"main\"\n      },\n      \"name\": \"trigger\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gcb1/json-dumps/cloudbuild-us-central1.json",
    "content": "{\n  \"builds\": [\n    {\n      \"id\": \"f055f209-21ef-4fa1-84f8-8509d24b0fae\",\n      \"status\": \"FAILURE\",\n      \"createTime\": \"2022-06-19T13:07:41.315702640Z\",\n      \"startTime\": \"2022-06-19T13:07:41.853968180Z\",\n      \"finishTime\": \"2022-06-19T13:07:47.857781608Z\",\n      \"results\": {\n        \"buildStepImages\": [\n          \"sha256:b6b83d3c331794420340093eb706a6f152d9c1fa51b262d9bf34594887c2c7ac\"\n        ],\n        \"buildStepOutputs\": [\n          \"\"\n        ]\n      },\n      \"steps\": [\n        {\n          \"name\": \"ubuntu\",\n          \"args\": [\n            \"bash\",\n            \"-c\",\n            \"[ 1 == 2 ]\"\n          ],\n          \"timing\": {\n            \"startTime\": \"2022-06-19T13:07:42.855671750Z\",\n            \"endTime\": \"2022-06-19T13:07:47.371799580Z\"\n          },\n          \"status\": \"FAILURE\",\n          \"pullTiming\": {\n            \"startTime\": \"2022-06-19T13:07:42.855671750Z\",\n            \"endTime\": \"2022-06-19T13:07:46.729940784Z\"\n          }\n        }\n      ],\n      \"timeout\": \"1800s\",\n      \"projectId\": \"gcpdiag-gcb1-aaaa\",\n      \"logsBucket\": \"gs://12340005.cloudbuild-logs.googleusercontent.com\",\n      \"sourceProvenance\": {},\n      \"options\": {\n        \"logging\": \"LEGACY\",\n        \"pool\": {}\n      },\n      \"logUrl\": \"https://console.cloud.google.com/cloud-build/builds;region=us-central1/f055f209-21ef-4fa1-84f8-8509d24b0fae?project=12340005\",\n      \"timing\": {\n        \"BUILD\": {\n          \"startTime\": \"2022-06-19T13:07:42.252766500Z\",\n          \"endTime\": \"2022-06-19T13:07:47.371926312Z\"\n        }\n      },\n      \"queueTtl\": \"3600s\",\n      \"name\": \"projects/12340005/locations/us-central1/builds/f055f209-21ef-4fa1-84f8-8509d24b0fae\",\n      \"failureInfo\": {\n        \"type\": \"USER_BUILD_STEP\",\n        \"detail\": \"Build step failure: build step 0 \\\"ubuntu\\\" failed: step exited with non-zero status: 1\"\n      }\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gcb1/json-dumps/cloudbuild.json",
    "content": "{\n  \"builds\": [\n    {\n      \"id\": \"4b040094-4204-4f00-a7bd-302639dd6785\",\n      \"status\": \"SUCCESS\",\n      \"createTime\": \"2022-05-20T12:34:10.791863494Z\",\n      \"startTime\": \"2022-05-20T12:34:11.439000115Z\",\n      \"finishTime\": \"2022-05-20T12:34:13.628759Z\",\n      \"results\": {\n        \"buildStepImages\": [\n          \"sha256:0917313aa0c9da1bfe297c502bc09af4fd75950b81cd761169ff0f3f544cc68d\"\n        ],\n        \"buildStepOutputs\": [\n          \"\"\n        ]\n      },\n      \"steps\": [\n        {\n          \"name\": \"gcr.io/cloud-builders/docker\",\n          \"args\": [\n            \"ps\"\n          ],\n          \"timing\": {\n            \"startTime\": \"2022-05-20T12:34:12.234187301Z\",\n            \"endTime\": \"2022-05-20T12:34:13.280971897Z\"\n          },\n          \"status\": \"SUCCESS\",\n          \"pullTiming\": {\n            \"startTime\": \"2022-05-20T12:34:12.234187301Z\",\n            \"endTime\": \"2022-05-20T12:34:12.237976136Z\"\n          }\n        }\n      ],\n      \"timeout\": \"1800s\",\n      \"projectId\": \"gcpdiag-gcb1-aaaa\",\n      \"logsBucket\": \"gs://gcpdiag-gcb1-bucket1-aaaa\",\n      \"sourceProvenance\": {},\n      \"options\": {\n        \"logStreamingOption\": \"STREAM_OFF\",\n        \"logging\": \"GCS_ONLY\",\n        \"pool\": {}\n      },\n      \"logUrl\": \"https://console.cloud.google.com/cloud-build/builds/4b040094-4204-4f00-a7bd-302639dd6785?project=12340005\",\n      \"timing\": {\n        \"BUILD\": {\n          \"startTime\": \"2022-05-20T12:34:11.696110664Z\",\n          \"endTime\": \"2022-05-20T12:34:13.281028898Z\"\n        }\n      },\n      \"queueTtl\": \"3600s\",\n      \"name\": \"projects/12340005/locations/global/builds/4b040094-4204-4f00-a7bd-302639dd6785\"\n    },\n    {\n      \"id\": \"01ff384c-d7f2-4295-ad68-5c32529d8b85\",\n      \"status\": \"FAILURE\",\n      \"createTime\": \"2022-04-05T11:54:05.438831262Z\",\n      \"startTime\": \"2022-04-05T11:54:06.585702187Z\",\n      \"finishTime\": \"2022-04-05T11:54:10.754613900Z\",\n      \"results\": {\n        \"buildStepImages\": [\n          \"sha256:bea6d19168bbfd6af8d77c2cc3c572114eb5d113e6f422573c93cb605a0e2ffb\"\n        ],\n        \"buildStepOutputs\": [\n          \"\"\n        ]\n      },\n      \"steps\": [\n        {\n          \"name\": \"ubuntu\",\n          \"args\": [\n            \"bash\",\n            \"-c\",\n            \"[ 1 == 2 ]\"\n          ],\n          \"timing\": {\n            \"startTime\": \"2022-04-05T11:54:07.804641745Z\",\n            \"endTime\": \"2022-04-05T11:54:10.169720241Z\"\n          },\n          \"status\": \"FAILURE\",\n          \"pullTiming\": {\n            \"startTime\": \"2022-04-05T11:54:07.804641745Z\",\n            \"endTime\": \"2022-04-05T11:54:09.312828516Z\"\n          }\n        }\n      ],\n      \"timeout\": \"1800s\",\n      \"projectId\": \"gcpdiag-gcb1-aaaa\",\n      \"logsBucket\": \"gs://12340005.cloudbuild-logs.googleusercontent.com\",\n      \"sourceProvenance\": {},\n      \"options\": {\n        \"logging\": \"LEGACY\",\n        \"pool\": {}\n      },\n      \"logUrl\": \"https://console.cloud.google.com/cloud-build/builds/32ca4219-dc76-4ab7-bb6f-f183facf73ed?project=12340005\",\n      \"timing\": {\n        \"BUILD\": {\n          \"startTime\": \"2022-04-05T11:54:07.097181515Z\",\n          \"endTime\": \"2022-04-05T11:54:10.169908787Z\"\n        }\n      },\n      \"queueTtl\": \"3600s\",\n      \"name\": \"projects/12340005/locations/global/builds/32ca4219-dc76-4ab7-bb6f-f183facf73ed\",\n      \"failureInfo\": {\n        \"type\": \"USER_BUILD_STEP\",\n        \"detail\": \"Build step failure: build step 0 \\\"ubuntu\\\" failed: step exited with non-zero status: 1\"\n      }\n    },\n    {\n      \"id\": \"58c22070-5629-480e-b822-cd8eff7befb8\",\n      \"status\": \"FAILURE\",\n      \"createTime\": \"2022-04-05T11:53:57.024283109Z\",\n      \"startTime\": \"2022-04-05T11:53:58.105300833Z\",\n      \"finishTime\": \"2022-04-05T11:54:02.526820640Z\",\n      \"results\": {\n        \"buildStepImages\": [\n          \"sha256:ace8974a1cadb3dfb95653973af926e01755613afb943d5deab41539cde70051\"\n        ],\n        \"buildStepOutputs\": [\n          \"\"\n        ]\n      },\n      \"steps\": [\n        {\n          \"name\": \"gcr.io/cloud-builders/docker\",\n          \"args\": [\n            \"ps\"\n          ],\n          \"timing\": {\n            \"startTime\": \"2022-04-05T11:53:59.371129057Z\",\n            \"endTime\": \"2022-04-05T11:54:00.490704415Z\"\n          },\n          \"status\": \"SUCCESS\",\n          \"pullTiming\": {\n            \"startTime\": \"2022-04-05T11:53:59.371129057Z\",\n            \"endTime\": \"2022-04-05T11:53:59.378457305Z\"\n          }\n        }\n      ],\n      \"timeout\": \"1800s\",\n      \"projectId\": \"gcpdiag-gcb1-aaaa\",\n      \"logsBucket\": \"gs://gcpdiag-gcb1-bucket1-aaaa\",\n      \"sourceProvenance\": {},\n      \"options\": {\n        \"logging\": \"LEGACY\",\n        \"pool\": {}\n      },\n      \"logUrl\": \"https://console.cloud.google.com/cloud-build/builds/58c22070-5629-480e-b822-cd8eff7befb8?project=12340005\",\n      \"timing\": {\n        \"BUILD\": {\n          \"startTime\": \"2022-04-05T11:53:58.663154626Z\",\n          \"endTime\": \"2022-04-05T11:54:00.490785587Z\"\n        }\n      },\n      \"queueTtl\": \"3600s\",\n      \"name\": \"projects/12340005/locations/global/builds/58c22070-5629-480e-b822-cd8eff7befb8\",\n      \"failureInfo\": {\n        \"type\": \"LOGGING_FAILURE\",\n        \"detail\": \"Cloud Storage logging failed. Try again in a few minutes.\"\n      }\n    },\n    {\n      \"id\": \"db540598-5a45-46f3-a716-39d834e884c6\",\n      \"status\": \"FAILURE\",\n      \"createTime\": \"2022-04-05T11:53:16.584630234Z\",\n      \"startTime\": \"2022-04-05T11:53:17.567161242Z\",\n      \"finishTime\": \"2022-04-05T11:53:53.826458203Z\",\n      \"results\": {\n        \"buildStepImages\": [\n          \"sha256:ace8974a1cadb3dfb95653973af926e01755613afb943d5deab41539cde70051\"\n        ],\n        \"buildStepOutputs\": [\n          \"\"\n        ]\n      },\n      \"steps\": [\n        {\n          \"name\": \"gcr.io/cloud-builders/docker\",\n          \"args\": [\n            \"tag\",\n            \"gcr.io/cloud-builders/docker\",\n            \"us-central1-docker.pkg.dev/gcpdiag-gcb1-aaaa/gcb1-repository/image\"\n          ],\n          \"timing\": {\n            \"startTime\": \"2022-04-05T11:53:18.508651083Z\",\n            \"endTime\": \"2022-04-05T11:53:19.553011555Z\"\n          },\n          \"status\": \"SUCCESS\",\n          \"pullTiming\": {\n            \"startTime\": \"2022-04-05T11:53:18.508651083Z\",\n            \"endTime\": \"2022-04-05T11:53:18.512797521Z\"\n          }\n        }\n      ],\n      \"timeout\": \"1800s\",\n      \"images\": [\n        \"us-central1-docker.pkg.dev/gcpdiag-gcb1-aaaa/gcb1-repository/image\"\n      ],\n      \"projectId\": \"gcpdiag-gcb1-aaaa\",\n      \"sourceProvenance\": {},\n      \"options\": {\n        \"logging\": \"CLOUD_LOGGING_ONLY\",\n        \"pool\": {}\n      },\n      \"logUrl\": \"https://console.cloud.google.com/cloud-build/builds/db540598-5a45-46f3-a716-39d834e884c6?project=12340005\",\n      \"timing\": {\n        \"BUILD\": {\n          \"startTime\": \"2022-04-05T11:53:17.864543307Z\",\n          \"endTime\": \"2022-04-05T11:53:19.594071402Z\"\n        },\n        \"PUSH\": {\n          \"startTime\": \"2022-04-05T11:53:19.594176772Z\",\n          \"endTime\": \"2022-04-05T11:53:53.639779579Z\"\n        }\n      },\n      \"artifacts\": {\n        \"images\": [\n          \"us-central1-docker.pkg.dev/gcpdiag-gcb1-aaaa/gcb1-repository/image\"\n        ]\n      },\n      \"queueTtl\": \"3600s\",\n      \"serviceAccount\": \"projects/gcpdiag-gcb1-aaaa/serviceAccounts/gcb-custom1@gcpdiag-gcb1-aaaa.iam.gserviceaccount.com\",\n      \"name\": \"projects/12340005/locations/global/builds/db540598-5a45-46f3-a716-39d834e884c6\",\n      \"warnings\": [\n        {\n          \"text\": \"The service account running this build does not have permission to write logs. To fix this, grant the Logs Writer (roles/logging.logWriter) role to the service account.\",\n          \"priority\": \"INFO\"\n        }\n      ]\n    },\n    {\n      \"artifacts\": {\n        \"images\": [\n          \"gcr.io/gcpdiag-gcb1-aaaa/image\"\n        ]\n      },\n      \"createTime\": \"2023-03-09T10:37:31.359018970Z\",\n      \"failureInfo\": {\n        \"detail\": \"Docker image push failure (\\\"The push refers to repository [gcr.io/gcpdiag-gcb1-aaaa/image]\\n71ab6bbb10b7: Preparing\\n0517ac42801f: Preparing\\n84ff92691f90: Preparing\\n90d624ea42b1: Preparing\\n0d7cb9e02e7b: Preparing\\ndenied: Token exchange failed for project 'gcpdiag-gcb1-aaaa'. Caller does not have permission 'storage.buckets.create'. To configure permissions, follow instructions at: https://cloud.google.com/container-registry/docs/access-control\\n\\\"): You are not authorized to use project gcpdiag-gcb1-aaaa. Request a project owner of gcpdiag-gcb1-aaaa to grant ‘Cloud Build Editor’ IAM role to your 'user' account.\",\n        \"type\": \"PUSH_NOT_AUTHORIZED\"\n      },\n      \"finishTime\": \"2023-03-09T10:38:12.131615289Z\",\n      \"id\": \"d2a2f7f0-f660-40cb-8cb1-574d29832e74\",\n      \"images\": [\n        \"gcr.io/gcpdiag-gcb1-aaaa/image\"\n      ],\n      \"logUrl\": \"https://console.cloud.google.com/cloud-build/builds/d2a2f7f0-f660-40cb-8cb1-574d29832e74?project=86947272951\",\n      \"name\": \"projects/86947272951/locations/global/builds/d2a2f7f0-f660-40cb-8cb1-574d29832e74\",\n      \"options\": {\n        \"logging\": \"CLOUD_LOGGING_ONLY\",\n        \"pool\": {}\n      },\n      \"projectId\": \"gcpdiag-gcb1-aaaa\",\n      \"queueTtl\": \"3600s\",\n      \"results\": {\n        \"buildStepImages\": [\n          \"sha256:57a455a66834d73eb387c54bb92fddd707c877ef33863f089b56f86945960afe\"\n        ],\n        \"buildStepOutputs\": [\n          \"\"\n        ]\n      },\n      \"serviceAccount\": \"projects/gcpdiag-gcb1-aaaa/serviceAccounts/gcb-custom1@gcpdiag-gcb1-aaaa.iam.gserviceaccount.com\",\n      \"sourceProvenance\": {},\n      \"startTime\": \"2023-03-09T10:37:32.033586269Z\",\n      \"status\": \"FAILURE\",\n      \"steps\": [\n        {\n          \"args\": [\n            \"tag\",\n            \"gcr.io/cloud-builders/docker\",\n            \"gcr.io/gcpdiag-gcb1-aaaa/image\"\n          ],\n          \"name\": \"gcr.io/cloud-builders/docker\",\n          \"pullTiming\": {\n            \"endTime\": \"2023-03-09T10:37:33.023325973Z\",\n            \"startTime\": \"2023-03-09T10:37:33.020467099Z\"\n          },\n          \"status\": \"SUCCESS\",\n          \"timing\": {\n            \"endTime\": \"2023-03-09T10:37:33.986570836Z\",\n            \"startTime\": \"2023-03-09T10:37:33.020467099Z\"\n          }\n        }\n      ],\n      \"timeout\": \"3600s\",\n      \"timing\": {\n        \"BUILD\": {\n          \"endTime\": \"2023-03-09T10:37:34.020105149Z\",\n          \"startTime\": \"2023-03-09T10:37:32.465794969Z\"\n        },\n        \"PUSH\": {\n          \"endTime\": \"2023-03-09T10:38:11.956215143Z\",\n          \"startTime\": \"2023-03-09T10:37:34.020186956Z\"\n        }\n      },\n      \"warnings\": [\n        {\n          \"priority\": \"INFO\",\n          \"text\": \"The service account running this build does not have permission to write logs. To fix this, grant the Logs Writer (roles/logging.logWriter) role to the service account.\"\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gcb1/json-dumps/iam-policy.json",
    "content": "{\n  \"bindings\": [\n    {\n      \"members\": [\n        \"user:testuser@example.com\"\n      ],\n      \"role\": \"roles/owner\"\n    }\n  ],\n  \"etag\": \"BwXXikLqmJg=\",\n  \"version\": 1\n}\n"
  },
  {
    "path": "test-data/gcb1/json-dumps/iam-service-accounts.json",
    "content": "{\n  \"accounts\": [\n    {\n      \"name\": \"projects/gcpdiag-gcb1-aaaa/serviceAccounts/gcb-custom1@gcpdiag-gcb1-xczqvxgx.iam.gserviceaccount.com\",\n      \"projectId\": \"gcpdiag-gcb1-aaaa\",\n      \"uniqueId\": \"103329727439765904040\",\n      \"email\": \"gcb-custom1@gcpdiag-gcb1-aaaa.iam.gserviceaccount.com\",\n      \"displayName\": \"Custom Service Account 1\",\n      \"etag\": \"MDEwMjE5MjA=\",\n      \"oauth2ClientId\": \"103329727439765904040\"\n    },\n    {\n      \"name\": \"projects/gcpdiag-gcb1-aaaa/serviceAccounts/gcb-custom2@gcpdiag-gcb1-xczqvxgx.iam.gserviceaccount.com\",\n      \"projectId\": \"gcpdiag-gcb1-aaaa\",\n      \"uniqueId\": \"110794748159318559011\",\n      \"email\": \"gcb-custom2@gcpdiag-gcb1-aaaa.iam.gserviceaccount.com\",\n      \"displayName\": \"Custom Service Account 2\",\n      \"etag\": \"MDEwMjE5MjA=\",\n      \"oauth2ClientId\": \"110794748159318559011\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gcb1/json-dumps/project.json",
    "content": "{\n  \"name\": \"projects/12340005\",\n  \"parent\": \"organizations/11112222\",\n  \"projectId\": \"gcpdiag-gcb1-aaaa\",\n  \"state\": \"ACTIVE\",\n  \"displayName\": \"gcpdiag test - gcb1\",\n  \"createTime\": \"2022-01-03T12:54:55.918Z\",\n  \"updateTime\": \"2022-01-03T12:54:57.836Z\",\n  \"etag\": \"+v5vT5jPhqSQRHfTtWvuWQ==\",\n  \"labels\": {\n    \"gcpdiag\": \"test\"\n  }\n}\n"
  },
  {
    "path": "test-data/gcb1/json-dumps/services.json",
    "content": "{\n  \"services\": [\n    {\n      \"name\": \"projects/12340005/services/artifactregistry.googleapis.com\",\n      \"config\": {\n        \"name\": \"artifactregistry.googleapis.com\",\n        \"title\": \"Artifact Registry API\",\n        \"documentation\": {\n          \"summary\": \"Store and manage build artifacts in a scalable and integrated service built on Google infrastructure.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340005\"\n    },\n    {\n      \"name\": \"projects/12340005/services/cloudbuild.googleapis.com\",\n      \"config\": {\n        \"name\": \"cloudbuild.googleapis.com\",\n        \"title\": \"Cloud Build API\",\n        \"documentation\": {\n          \"summary\": \"Creates and manages builds on Google Cloud Platform.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340005\"\n    },\n    {\n      \"name\": \"projects/12340005/services/containerregistry.googleapis.com\",\n      \"config\": {\n        \"name\": \"containerregistry.googleapis.com\",\n        \"title\": \"Container Registry API\",\n        \"documentation\": {\n          \"summary\": \"Google Container Registry provides secure, private Docker image storage on Google Cloud Platform.  Our API follows the Docker Registry API specification, so we are fully compatible with the Docker CLI client, as well as standard tooling using the Docker Registry API.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"serviceruntime.googleapis.com/api\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_version\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_method\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/consumer_project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/consumer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/producer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/consumer_resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/api\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/api/consumer/quota_used_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_refund_count\",\n                \"serviceruntime.googleapis.com/quota/used\",\n                \"serviceruntime.googleapis.com/quota/limit\",\n                \"serviceruntime.googleapis.com/quota/exceeded\",\n                \"serviceruntime.googleapis.com/allocation/consumer/quota_used_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/consumer_quota\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/quota/rate/consumer/used_count\",\n                \"serviceruntime.googleapis.com/quota/rate/consumer/refund_count\",\n                \"serviceruntime.googleapis.com/quota/allocation/consumer/usage\",\n                \"serviceruntime.googleapis.com/quota/consumer/limit\",\n                \"serviceruntime.googleapis.com/quota/consumer/exceeded\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340005\"\n    },\n    {\n      \"name\": \"projects/12340005/services/iam.googleapis.com\",\n      \"config\": {\n        \"name\": \"iam.googleapis.com\",\n        \"title\": \"Identity and Access Management (IAM) API\",\n        \"documentation\": {\n          \"summary\": \"Manages identity and access control for Google Cloud Platform resources, including the creation of service accounts, which you can use to authenticate to Google and make API calls.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"iam_service_account\",\n            \"displayName\": \"IAM Service Account\",\n            \"description\": \"An IAM Service Account.\",\n            \"labels\": [\n              {\n                \"key\": \"project_id\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"unique_id\",\n                \"description\": \"The unique_id of the service account.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"iam.googleapis.com/WorkloadIdentityPoolProvider\",\n            \"displayName\": \"Workload Identity Pool Provider\",\n            \"description\": \"A workload identity pool provider.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location of the resource.\"\n              },\n              {\n                \"key\": \"pool_id\",\n                \"description\": \"The ID of the provider's workload identity pool parent resource.\"\n              },\n              {\n                \"key\": \"provider_id\",\n                \"description\": \"The ID of the workload identity pool provider resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"iam.googleapis.com/WorkloadIdentityPoolProvider\",\n              \"metrics\": [\n                \"iam.googleapis.com/workload_identity_federation/count\",\n                \"iam.googleapis.com/workload_identity_federation/key_usage_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"iam_service_account\",\n              \"metrics\": [\n                \"iam.googleapis.com/service_account/authn_events_count\",\n                \"iam.googleapis.com/service_account/key/authn_events_count\",\n                \"iam.googleapis.com/service_account/authn_events_count_preprod\",\n                \"iam.googleapis.com/service_account/key/authn_events_count_preprod\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340005\"\n    },\n    {\n      \"name\": \"projects/12340005/services/iamcredentials.googleapis.com\",\n      \"config\": {\n        \"name\": \"iamcredentials.googleapis.com\",\n        \"title\": \"IAM Service Account Credentials API\",\n        \"documentation\": {\n          \"summary\": \"Creates short-lived credentials for impersonating IAM service accounts. To enable this API, you must enable the IAM API (iam.googleapis.com).\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"serviceruntime.googleapis.com/api\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_version\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_method\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/consumer_project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              }\n            ]\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/api\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/api/consumer/quota_used_count\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340005\"\n    },\n    {\n      \"name\": \"projects/12340005/services/logging.googleapis.com\",\n      \"config\": {\n        \"name\": \"logging.googleapis.com\",\n        \"title\": \"Cloud Logging API\",\n        \"documentation\": {\n          \"summary\": \"Writes log entries and manages your Cloud Logging configuration.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"logging.googleapis.com/ChargedProject\",\n            \"displayName\": \"Cloud logging target\",\n            \"description\": \"A cloud logging specialization target schema of cloud.ChargedProject.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The monitored resource container. Could be project, workspace, etc.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The service-specific notion of location.\"\n              },\n              {\n                \"key\": \"service\",\n                \"description\": \"The name of the API service with which the data is associated (e.g.,'logging.googleapis.com').\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"logging.googleapis.com/ChargedProject\",\n              \"metrics\": [\n                \"logging.googleapis.com/billing/ingested_bytes\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340005\"\n    },\n    {\n      \"name\": \"projects/12340005/services/pubsub.googleapis.com\",\n      \"config\": {\n        \"name\": \"pubsub.googleapis.com\",\n        \"title\": \"Cloud Pub/Sub API\",\n        \"documentation\": {\n          \"summary\": \"Provides reliable, many-to-many, asynchronous messaging between applications.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340005\"\n    },\n    {\n      \"name\": \"projects/12340005/services/sourcerepo.googleapis.com\",\n      \"config\": {\n        \"name\": \"sourcerepo.googleapis.com\",\n        \"title\": \"Cloud Source Repositories API\",\n        \"documentation\": {\n          \"summary\": \"Accesses source code repositories hosted by Google.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"serviceruntime.googleapis.com/api\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_version\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_method\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/consumer_project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/consumer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/producer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/consumer_resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/api\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/api/consumer/request_count\",\n                \"serviceruntime.googleapis.com/api/consumer/error_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_used_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_refund_count\",\n                \"serviceruntime.googleapis.com/api/consumer/total_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_overhead_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/backend_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/response_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer\",\n                \"serviceruntime.googleapis.com/quota/used\",\n                \"serviceruntime.googleapis.com/quota/limit\",\n                \"serviceruntime.googleapis.com/quota/exceeded\",\n                \"serviceruntime.googleapis.com/allocation/consumer/quota_used_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/consumer_quota\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/quota/rate/consumer/used_count\",\n                \"serviceruntime.googleapis.com/quota/rate/consumer/refund_count\",\n                \"serviceruntime.googleapis.com/quota/allocation/consumer/usage\",\n                \"serviceruntime.googleapis.com/quota/consumer/limit\",\n                \"serviceruntime.googleapis.com/quota/consumer/exceeded\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340005\"\n    },\n    {\n      \"name\": \"projects/12340005/services/storage-api.googleapis.com\",\n      \"config\": {\n        \"name\": \"storage-api.googleapis.com\",\n        \"title\": \"Google Cloud Storage JSON API\",\n        \"documentation\": {\n          \"summary\": \"Lets you store and retrieve potentially-large, immutable data objects.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340005\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gcb1/project.tf",
    "content": "/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nresource \"random_string\" \"project_id_suffix\" {\n  length  = 8\n  number  = true\n  lower   = true\n  upper   = false\n  special = false\n}\n\nresource \"google_project\" \"project\" {\n  name            = \"gcpdiag test - gcb1\"\n  project_id      = \"gcpdiag-gcb1-${random_string.project_id_suffix.id}\"\n  org_id          = var.folder_id == \"\" ? var.org_id : null\n  folder_id       = var.folder_id != \"\" ? var.folder_id : null\n  billing_account = var.billing_account_id\n  labels = {\n    gcpdiag : \"test\"\n  }\n}\n\nresource \"google_project_service\" \"cloudbuild\" {\n  project = google_project.project.project_id\n  service = \"cloudbuild.googleapis.com\"\n}\n\nresource \"google_project_service\" \"sourcerepo\" {\n  project = google_project.project.project_id\n  service = \"sourcerepo.googleapis.com\"\n}\n\nresource \"google_project_service\" \"iam\" {\n  project = google_project.project.project_id\n  service = \"iam.googleapis.com\"\n}\n\nresource \"google_project_service\" \"artifactregistry\" {\n  project = google_project.project.project_id\n  service = \"artifactregistry.googleapis.com\"\n}\n\noutput \"project_id\" {\n  value = google_project.project.project_id\n}\n\noutput \"project_id_suffix\" {\n  value = random_string.project_id_suffix.id\n}\n\noutput \"project_nr\" {\n  value = google_project.project.number\n}\n\noutput \"org_id\" {\n  value = var.org_id\n}\n"
  },
  {
    "path": "test-data/gcb1/service_accounts.tf",
    "content": "resource \"google_service_account\" \"service_account_custom1\" {\n  account_id   = \"gcb-custom1\"\n  display_name = \"Custom Service Account 1\"\n  project      = google_project.project.project_id\n}\n\nresource \"google_service_account\" \"service_account_custom2\" {\n  account_id   = \"gcb-custom2\"\n  display_name = \"Custom Service Account 2\"\n  project      = google_project.project.project_id\n}\n\noutput \"service_account_custom1_email\" {\n  value = google_service_account.service_account_custom1.email\n}\n"
  },
  {
    "path": "test-data/gcb1/source_repository.tf",
    "content": "resource \"google_sourcerepo_repository\" \"test-repo\" {\n  name       = \"test-repo\"\n  project    = google_project.project.project_id\n  depends_on = [google_project_service.sourcerepo]\n}\n"
  },
  {
    "path": "test-data/gcb1/trigger.tf",
    "content": "resource \"google_cloudbuild_trigger\" \"trigger\" {\n  project = google_project.project.project_id\n  trigger_template {\n    branch_name = \"main\"\n    repo_name   = \"test-repo\"\n  }\n  build {\n    step {\n      name = \"gcr.io/cloud-builders/gcloud\"\n    }\n  }\n  depends_on = [google_project_service.cloudbuild]\n}\n"
  },
  {
    "path": "test-data/gcb1/variables.tf",
    "content": "variable \"billing_account_id\" {}\n\nvariable \"org_id\" {}\nvariable \"folder_id\" { default = \"\" }\n"
  },
  {
    "path": "test-data/gce-image-license/Makefile",
    "content": "CURL         = ../../bin/curl-wrap.sh\nJSON_CLEANER = ../../bin/json-cleaner\n\nCENTOS_CLOUD= centos-cloud\nCOS_CLOUD= cos-cloud\nDEBIAN_CLOUD= debian-cloud\nFEDORA_CLOUD= fedora-cloud\nFEDORA_CORECOS_CLOUD= fedora-coreos-cloud\nOPENSUSE_CLOUD= opensuse-cloud\nRHEL_CLOUD= rhel-cloud\nRHEL_SAP_CLOUD= rhel-sap-cloud\nROCKY_LINUX_CLOUD= rocky-linux-cloud\nSUSE_CLOUD= suse-cloud\nSUSE_SAP_CLOUD= suse-sap-cloud\nUBUNTU_OS_CLOUD= ubuntu-os-cloud\nUBUNTU_OS_PRO_CLOUD= ubuntu-os-pro-cloud\nWINDOW_CLOUD= windows-cloud\nWINDOWS_SQL_CLOUD= windows-sql-cloud\n\nall:\t\\\n\tjson-dumps/${CENTOS_CLOUD}-licenses.json \\\n\tjson-dumps/${COS_CLOUD}-licenses.json \\\n\tjson-dumps/${DEBIAN_CLOUD}-licenses.json \\\n\tjson-dumps/${FEDORA_CLOUD}-licenses.json \\\n\tjson-dumps/${FEDORA_CORECOS_CLOUD}-licenses.json \\\n\tjson-dumps/${OPENSUSE_CLOUD}-licenses.json \\\n\tjson-dumps/${RHEL_CLOUD}-licenses.json \\\n\tjson-dumps/${RHEL_SAP_CLOUD}-licenses.json \\\n\tjson-dumps/${ROCKY_LINUX_CLOUD}-licenses.json \\\n\tjson-dumps/${SUSE_CLOUD}-licenses.json \\\n\tjson-dumps/${SUSE_SAP_CLOUD}-licenses.json \\\n\tjson-dumps/${UBUNTU_OS_CLOUD}-licenses.json \\\n\tjson-dumps/${UBUNTU_OS_PRO_CLOUD}-licenses.json \\\n\tjson-dumps/${WINDOW_CLOUD}-licenses.json \\\n\tjson-dumps/${WINDOWS_SQL_CLOUD}-licenses.json\n\njson-dumps/%-licenses.json:\n\t$(CURL) -fsS \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/$*/global/licenses' \\\n\t\t--header \"Content-Type:text/json\" > $@\n"
  },
  {
    "path": "test-data/gce-image-license/json-dumps/centos-cloud-licenses.json",
    "content": "{\n  \"id\": \"projects/centos-cloud/global/licenses\",\n  \"items\": [\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"centos-6\",\n      \"chargesUseFee\": true,\n      \"id\": \"6261635378630811686\",\n      \"licenseCode\": \"1000206\",\n      \"creationTimestamp\": \"2016-02-09T14:08:14.000-08:00\",\n      \"description\": \"CentOS 6\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/centos-cloud/global/licenses/centos-6\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"centos-7\",\n      \"chargesUseFee\": true,\n      \"id\": \"1590725888655155238\",\n      \"licenseCode\": \"1000207\",\n      \"creationTimestamp\": \"2016-02-09T14:08:14.000-08:00\",\n      \"description\": \"CentOS 7\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/centos-cloud/global/licenses/centos-7\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"centos-8\",\n      \"chargesUseFee\": false,\n      \"id\": \"3549388059678600306\",\n      \"licenseCode\": \"5731035067256925298\",\n      \"creationTimestamp\": \"2019-09-24T10:30:05.016-07:00\",\n      \"description\": \"CentOS 8\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/centos-cloud/global/licenses/centos-8\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"centos-stream\",\n      \"chargesUseFee\": false,\n      \"id\": \"2847851129470332745\",\n      \"licenseCode\": \"3197331720697687881\",\n      \"creationTimestamp\": \"2020-12-29T12:29:26.821-08:00\",\n      \"description\": \"CentOS Stream\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/centos-cloud/global/licenses/centos-stream\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"centos-stream-9\",\n      \"chargesUseFee\": false,\n      \"id\": \"8153611294265844894\",\n      \"licenseCode\": \"2587764519704208542\",\n      \"creationTimestamp\": \"2022-02-01T12:39:13.879-08:00\",\n      \"description\": \"CentOS Stream 9\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/centos-cloud/global/licenses/centos-stream-9\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/centos-cloud/global/licenses\"\n}\n"
  },
  {
    "path": "test-data/gce-image-license/json-dumps/cos-cloud-licenses.json",
    "content": "{\n  \"id\": \"projects/cos-cloud/global/licenses\",\n  \"items\": [\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"cos\",\n      \"chargesUseFee\": false,\n      \"id\": \"1860921057156066203\",\n      \"licenseCode\": \"1001010\",\n      \"creationTimestamp\": \"2017-01-13T12:51:38.000-08:00\",\n      \"description\": \"Container-Optimized OS from Google\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"cos-gpu\",\n      \"chargesUseFee\": false,\n      \"id\": \"7123420343221295763\",\n      \"licenseCode\": \"146969651383835282\",\n      \"creationTimestamp\": \"2017-10-02T13:41:33.043-07:00\",\n      \"description\": \"Container-Optimized OS from Google, with GPU drivers\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-gpu\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"cos-pcid\",\n      \"chargesUseFee\": false,\n      \"id\": \"9020039035948176868\",\n      \"licenseCode\": \"6880041984096540132\",\n      \"creationTimestamp\": \"2018-08-15T15:36:59.739-07:00\",\n      \"description\": \"Container-Optimized OS - PCID Whitelisted\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"cos-st\",\n      \"chargesUseFee\": false,\n      \"id\": \"7258840043588497590\",\n      \"licenseCode\": \"9084803053990260918\",\n      \"creationTimestamp\": \"2017-10-04T00:31:37.769-07:00\",\n      \"description\": \"Container-Optimized OS from Google, with Snaggletooth drivers\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-st\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses\"\n}\n"
  },
  {
    "path": "test-data/gce-image-license/json-dumps/debian-cloud-licenses.json",
    "content": "{\n  \"id\": \"projects/debian-cloud/global/licenses\",\n  \"items\": [\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"debian-10-buster\",\n      \"chargesUseFee\": false,\n      \"id\": \"7165099968554055853\",\n      \"licenseCode\": \"5543610867827062957\",\n      \"creationTimestamp\": \"2018-08-22T17:56:34.778-07:00\",\n      \"description\": \"Debian 10 Buster\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-10-buster\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"debian-11-bullseye\",\n      \"chargesUseFee\": false,\n      \"id\": \"8474191643257863115\",\n      \"licenseCode\": \"3853522013536123851\",\n      \"creationTimestamp\": \"2021-03-23T12:44:36.568-07:00\",\n      \"description\": \"Debian 11 Bullseye\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"debian-12-bookworm\",\n      \"chargesUseFee\": false,\n      \"id\": \"50032240371219040\",\n      \"licenseCode\": \"2147286739765738111\",\n      \"creationTimestamp\": \"2023-03-08T13:56:32.072-08:00\",\n      \"description\": \"Debian 12 Bookworm\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-12-bookworm\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"debian-7-wheezy\",\n      \"chargesUseFee\": true,\n      \"id\": \"5548643783560585255\",\n      \"licenseCode\": \"1000203\",\n      \"creationTimestamp\": \"2016-02-09T14:08:14.000-08:00\",\n      \"description\": \"Debian 7 Wheezy\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-7-wheezy\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"debian-8-jessie\",\n      \"chargesUseFee\": true,\n      \"id\": \"4583190536202936358\",\n      \"licenseCode\": \"1000204\",\n      \"creationTimestamp\": \"2016-02-09T14:08:14.000-08:00\",\n      \"description\": \"Debian 8 Jessie\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-8-jessie\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"debian-9-stretch\",\n      \"chargesUseFee\": true,\n      \"id\": \"422202477258924070\",\n      \"licenseCode\": \"1000205\",\n      \"creationTimestamp\": \"2016-02-09T14:08:14.000-08:00\",\n      \"description\": \"Debian 9 Stretch\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-9-stretch\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses\"\n}\n"
  },
  {
    "path": "test-data/gce-image-license/json-dumps/fedora-cloud-licenses.json",
    "content": "{\n  \"id\": \"projects/fedora-cloud/global/licenses\",\n  \"items\": [\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"fedora-33-cloud-base\",\n      \"chargesUseFee\": false,\n      \"id\": \"646646099248634613\",\n      \"licenseCode\": \"8809591208937216757\",\n      \"creationTimestamp\": \"2020-11-19T13:31:06.831-08:00\",\n      \"description\": \"Fedora 33 Cloud Base\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/fedora-cloud/global/licenses/fedora-33-cloud-base\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"fedora-34-cloud-base\",\n      \"chargesUseFee\": false,\n      \"id\": \"4865478576897108243\",\n      \"licenseCode\": \"2706998670158047507\",\n      \"creationTimestamp\": \"2021-05-06T09:23:24.362-07:00\",\n      \"description\": \"Fedora 34 Cloud Base\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/fedora-cloud/global/licenses/fedora-34-cloud-base\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"fedora-35-cloud-base\",\n      \"chargesUseFee\": false,\n      \"id\": \"3861096437478587519\",\n      \"licenseCode\": \"1001413950881922175\",\n      \"creationTimestamp\": \"2021-12-21T13:09:36.291-08:00\",\n      \"description\": \"Fedora 35 Cloud Base\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/fedora-cloud/global/licenses/fedora-35-cloud-base\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"fedora-36-cloud-base\",\n      \"chargesUseFee\": false,\n      \"id\": \"2979243289693777887\",\n      \"licenseCode\": \"4937629199917248478\",\n      \"creationTimestamp\": \"2022-08-22T21:01:53.021-07:00\",\n      \"description\": \"Fedora 36 Cloud Base\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/fedora-cloud/global/licenses/fedora-36-cloud-base\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"fedora-37-beta-cloud-base\",\n      \"chargesUseFee\": false,\n      \"id\": \"7460591022215304124\",\n      \"licenseCode\": \"7842126891402957754\",\n      \"creationTimestamp\": \"2022-09-25T21:40:53.208-07:00\",\n      \"description\": \"Fedora 37 Beta Cloud Base\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/fedora-cloud/global/licenses/fedora-37-beta-cloud-base\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"fedora-37-cloud-base\",\n      \"chargesUseFee\": false,\n      \"id\": \"8530529652626673835\",\n      \"licenseCode\": \"6298964164312289450\",\n      \"creationTimestamp\": \"2023-03-15T18:17:57.197-07:00\",\n      \"description\": \"Fedora 37 Cloud Base\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/fedora-cloud/global/licenses/fedora-37-cloud-base\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"fedora-38-cloud-base\",\n      \"chargesUseFee\": false,\n      \"id\": \"8626823085690963723\",\n      \"licenseCode\": \"5898834260713785099\",\n      \"creationTimestamp\": \"2023-03-15T19:07:32.800-07:00\",\n      \"description\": \"Fedora 38 Cloud Base\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/fedora-cloud/global/licenses/fedora-38-cloud-base\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"fedora-39-cloud-base\",\n      \"chargesUseFee\": false,\n      \"id\": \"4256409977573932653\",\n      \"licenseCode\": \"725690115706912365\",\n      \"creationTimestamp\": \"2023-09-28T01:59:46.561-07:00\",\n      \"description\": \"Fedora 39 Cloud Base\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/fedora-cloud/global/licenses/fedora-39-cloud-base\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/fedora-cloud/global/licenses\"\n}\n"
  },
  {
    "path": "test-data/gce-image-license/json-dumps/fedora-coreos-cloud-licenses.json",
    "content": "{\n  \"id\": \"projects/fedora-coreos-cloud/global/licenses\",\n  \"items\": [\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"fedora-coreos-branched\",\n      \"chargesUseFee\": false,\n      \"id\": \"7090747570141108142\",\n      \"licenseCode\": \"1137282471016634286\",\n      \"creationTimestamp\": \"2021-05-06T10:37:05.779-07:00\",\n      \"description\": \"Fedora CoreOS Branched\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/fedora-coreos-cloud/global/licenses/fedora-coreos-branched\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"fedora-coreos-next\",\n      \"chargesUseFee\": false,\n      \"id\": \"556917158607495357\",\n      \"licenseCode\": \"8565510459461902525\",\n      \"creationTimestamp\": \"2020-05-06T13:30:10.447-07:00\",\n      \"description\": \"Fedora CoreOS Next\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/fedora-coreos-cloud/global/licenses/fedora-coreos-next\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"fedora-coreos-next-devel\",\n      \"chargesUseFee\": false,\n      \"id\": \"1767594780660769675\",\n      \"licenseCode\": \"3659048100932002699\",\n      \"creationTimestamp\": \"2020-05-06T13:26:12.829-07:00\",\n      \"description\": \"Fedora CoreOS Next-Devel\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/fedora-coreos-cloud/global/licenses/fedora-coreos-next-devel\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"fedora-coreos-rawhide\",\n      \"chargesUseFee\": false,\n      \"id\": \"5967584498063875084\",\n      \"licenseCode\": \"6563587759585991692\",\n      \"creationTimestamp\": \"2021-05-06T10:09:55.444-07:00\",\n      \"description\": \"Fedora CoreOS Rawhide\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/fedora-coreos-cloud/global/licenses/fedora-coreos-rawhide\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"fedora-coreos-stable\",\n      \"chargesUseFee\": false,\n      \"id\": \"1225811452571328641\",\n      \"licenseCode\": \"3474194821636071553\",\n      \"creationTimestamp\": \"2020-05-06T13:30:38.353-07:00\",\n      \"description\": \"Fedora CoreOS Stable\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/fedora-coreos-cloud/global/licenses/fedora-coreos-stable\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"fedora-coreos-testing\",\n      \"chargesUseFee\": false,\n      \"id\": \"6129359340783444110\",\n      \"licenseCode\": \"3779260279882162318\",\n      \"creationTimestamp\": \"2020-05-06T13:30:25.861-07:00\",\n      \"description\": \"Fedora CoreOS Testing\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/fedora-coreos-cloud/global/licenses/fedora-coreos-testing\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"fedora-coreos-testing-devel\",\n      \"chargesUseFee\": false,\n      \"id\": \"4589800477849198811\",\n      \"licenseCode\": \"844225830482518235\",\n      \"creationTimestamp\": \"2020-05-06T13:29:40.400-07:00\",\n      \"description\": \"Fedora CoreOS Testing-Devel\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/fedora-coreos-cloud/global/licenses/fedora-coreos-testing-devel\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/fedora-coreos-cloud/global/licenses\"\n}\n"
  },
  {
    "path": "test-data/gce-image-license/json-dumps/opensuse-cloud-licenses.json",
    "content": "{\n  \"id\": \"projects/opensuse-cloud/global/licenses\",\n  \"items\": [\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"opensuse-13\",\n      \"chargesUseFee\": true,\n      \"id\": \"6264275645351518247\",\n      \"licenseCode\": \"1000211\",\n      \"creationTimestamp\": \"2016-02-09T14:08:14.000-08:00\",\n      \"description\": \"OpenSUSE 13\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/opensuse-cloud/global/licenses/opensuse-13\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"opensuse-leap-42\",\n      \"chargesUseFee\": true,\n      \"id\": \"8399628480346513446\",\n      \"licenseCode\": \"1000212\",\n      \"creationTimestamp\": \"2016-02-09T14:08:14.000-08:00\",\n      \"description\": \"OpenSUSE Leap 42\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/opensuse-cloud/global/licenses/opensuse-leap-42\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/opensuse-cloud/global/licenses\"\n}\n"
  },
  {
    "path": "test-data/gce-image-license/json-dumps/rhel-cloud-licenses.json",
    "content": "{\n  \"id\": \"projects/rhel-cloud/global/licenses\",\n  \"items\": [\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"rhel-6-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"2285321382868516082\",\n      \"licenseCode\": \"2862452038400965874\",\n      \"creationTimestamp\": \"2017-10-05T16:37:01.816-07:00\",\n      \"description\": \"Red Hat Enterprise Linux 6 BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/rhel-cloud/global/licenses/rhel-6-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"rhel-6-byos\",\n      \"chargesUseFee\": false,\n      \"id\": \"8599870313857478211\",\n      \"licenseCode\": \"4720191914037931587\",\n      \"creationTimestamp\": \"2019-08-07T15:29:00.736-07:00\",\n      \"description\": \"Red Hat Enterprise Linux 6 BYOS\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/rhel-cloud/global/licenses/rhel-6-byos\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"rhel-6-els\",\n      \"chargesUseFee\": false,\n      \"id\": \"349077510725721113\",\n      \"licenseCode\": \"1176308840663243801\",\n      \"creationTimestamp\": \"2020-09-02T11:22:46.089-07:00\",\n      \"description\": \"Red Hat Enterprise Linux 6 Extended Life Cycle Support\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/rhel-cloud/global/licenses/rhel-6-els\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"rhel-6-server\",\n      \"chargesUseFee\": true,\n      \"id\": \"6080198141787314983\",\n      \"licenseCode\": \"1000002\",\n      \"creationTimestamp\": \"2013-08-19T17:17:57.000-07:00\",\n      \"description\": \"RedHat Enterprise Linux 6\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/rhel-cloud/global/licenses/rhel-6-server\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"rhel-7-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"5226391214801780519\",\n      \"licenseCode\": \"4621277670514851623\",\n      \"creationTimestamp\": \"2017-10-05T16:35:36.053-07:00\",\n      \"description\": \"Red Hat Enterprise Linux 7 BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/rhel-cloud/global/licenses/rhel-7-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"rhel-7-byos\",\n      \"chargesUseFee\": false,\n      \"id\": \"242324105752669770\",\n      \"licenseCode\": \"1492188837615955530\",\n      \"creationTimestamp\": \"2019-08-07T15:28:53.703-07:00\",\n      \"description\": \"Red Hat Enterprise Linux 7 BYOS\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/rhel-cloud/global/licenses/rhel-7-byos\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"rhel-7-els\",\n      \"chargesUseFee\": false,\n      \"id\": \"1277727991743525253\",\n      \"licenseCode\": \"4646774207868449156\",\n      \"creationTimestamp\": \"2024-02-28T11:54:18.289-08:00\",\n      \"description\": \"Red Hat Enterprise Linux 7 Extended Life Cycle Support\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/rhel-cloud/global/licenses/rhel-7-els\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"rhel-7-server\",\n      \"chargesUseFee\": true,\n      \"id\": \"6080198135500386054\",\n      \"licenseCode\": \"1000006\",\n      \"creationTimestamp\": \"2013-08-19T17:17:57.000-07:00\",\n      \"description\": \"RedHat Enterprise Linux 7\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/rhel-cloud/global/licenses/rhel-7-server\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"rhel-8-byos\",\n      \"chargesUseFee\": false,\n      \"id\": \"7836451121217859165\",\n      \"licenseCode\": \"8475125252192923229\",\n      \"creationTimestamp\": \"2019-08-07T15:29:06.897-07:00\",\n      \"description\": \"Red Hat Enterprise Linux 8 BYOS\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/rhel-cloud/global/licenses/rhel-8-byos\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"rhel-8-server\",\n      \"chargesUseFee\": false,\n      \"id\": \"3637965609761428989\",\n      \"licenseCode\": \"601259152637613565\",\n      \"creationTimestamp\": \"2019-01-22T11:12:19.065-08:00\",\n      \"description\": \"RedHat Enterprise Linux 8\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/rhel-cloud/global/licenses/rhel-8-server\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"rhel-9-byos\",\n      \"chargesUseFee\": false,\n      \"id\": \"1643200137801707630\",\n      \"licenseCode\": \"3837518230911135854\",\n      \"creationTimestamp\": \"2022-03-07T15:00:17.359-08:00\",\n      \"description\": \"Red Hat Enterprise Linux 9 BYOS\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/rhel-cloud/global/licenses/rhel-9-byos\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"rhel-9-server\",\n      \"chargesUseFee\": false,\n      \"id\": \"7600336033804923015\",\n      \"licenseCode\": \"7883559014960410759\",\n      \"creationTimestamp\": \"2022-03-07T14:59:52.389-08:00\",\n      \"description\": \"Red Hat Enterprise Linux 9\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/rhel-cloud/global/licenses/rhel-9-server\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/rhel-cloud/global/licenses\"\n}\n"
  },
  {
    "path": "test-data/gce-image-license/json-dumps/rhel-sap-cloud-licenses.json",
    "content": "{\n  \"id\": \"projects/rhel-sap-cloud/global/licenses\",\n  \"items\": [\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"rhel-7-sap\",\n      \"chargesUseFee\": false,\n      \"id\": \"5604538286035877319\",\n      \"licenseCode\": \"8555687517154622919\",\n      \"creationTimestamp\": \"2018-09-07T16:00:56.178-07:00\",\n      \"description\": \"Red Hat Enterprise Linux for SAP with High Availability and Update Services\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/rhel-sap-cloud/global/licenses/rhel-7-sap\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"rhel-7-sap-apps\",\n      \"chargesUseFee\": false,\n      \"id\": \"240630458432039891\",\n      \"licenseCode\": \"5955710252559838163\",\n      \"creationTimestamp\": \"2018-01-10T14:35:40.112-08:00\",\n      \"description\": \"RHEL 7 for SAP Applications\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/rhel-sap-cloud/global/licenses/rhel-7-sap-apps\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"rhel-7-sap-hana\",\n      \"chargesUseFee\": false,\n      \"id\": \"1819405748623059915\",\n      \"licenseCode\": \"996690525257673675\",\n      \"creationTimestamp\": \"2018-01-10T14:35:16.300-08:00\",\n      \"description\": \"RHEL 7 for SAP HANA\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/rhel-sap-cloud/global/licenses/rhel-7-sap-hana\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"rhel-7-sap-solutions\",\n      \"chargesUseFee\": false,\n      \"id\": \"7327934045737262966\",\n      \"licenseCode\": \"1785892118823772022\",\n      \"creationTimestamp\": \"2018-05-22T16:02:49.771-07:00\",\n      \"description\": \"Red Hat Enterprise Linux for SAP with High Availability and Update Services\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/rhel-sap-cloud/global/licenses/rhel-7-sap-solutions\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"rhel-7-sap-us\",\n      \"chargesUseFee\": false,\n      \"id\": \"7350733497329754778\",\n      \"licenseCode\": \"5882583258875011738\",\n      \"creationTimestamp\": \"2019-01-24T12:13:41.931-08:00\",\n      \"description\": \"Red Hat Enterprise Linux for SAP with Update Services\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/rhel-sap-cloud/global/licenses/rhel-7-sap-us\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"rhel-8-sap\",\n      \"chargesUseFee\": false,\n      \"id\": \"4048768305189858476\",\n      \"licenseCode\": \"1270685562947480748\",\n      \"creationTimestamp\": \"2020-01-14T11:10:59.082-08:00\",\n      \"description\": \"Red Hat Enterprise Linux for SAP with High Availability and Update Services\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/rhel-sap-cloud/global/licenses/rhel-8-sap\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"rhel-8-sap-byos\",\n      \"chargesUseFee\": false,\n      \"id\": \"4694240906525046332\",\n      \"licenseCode\": \"489291035512960571\",\n      \"creationTimestamp\": \"2023-10-10T14:57:40.183-07:00\",\n      \"description\": \"Red Hat Enterprise Linux 8 for SAP BYOS\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/rhel-sap-cloud/global/licenses/rhel-8-sap-byos\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"rhel-9-sap\",\n      \"chargesUseFee\": false,\n      \"id\": \"5536778078288293918\",\n      \"licenseCode\": \"8291906032809750558\",\n      \"creationTimestamp\": \"2022-03-07T15:02:09.839-08:00\",\n      \"description\": \"Red Hat Enterprise Linux 9 for SAP with High Availability and Update Services\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/rhel-sap-cloud/global/licenses/rhel-9-sap\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"rhel-9-sap-byos\",\n      \"chargesUseFee\": false,\n      \"id\": \"6784251256380093966\",\n      \"licenseCode\": \"6753525580035552782\",\n      \"creationTimestamp\": \"2023-10-10T14:57:53.794-07:00\",\n      \"description\": \"Red Hat Enterprise Linux 9 for SAP BYOS\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/rhel-sap-cloud/global/licenses/rhel-9-sap-byos\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/rhel-sap-cloud/global/licenses\"\n}\n"
  },
  {
    "path": "test-data/gce-image-license/json-dumps/rocky-linux-cloud-licenses.json",
    "content": "{\n  \"id\": \"projects/rocky-linux-cloud/global/licenses\",\n  \"items\": [\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"rocky-linux-8\",\n      \"chargesUseFee\": false,\n      \"id\": \"292266368701429789\",\n      \"licenseCode\": \"4496053841174591517\",\n      \"creationTimestamp\": \"2021-05-03T11:54:42.661-07:00\",\n      \"description\": \"Rocky Linux 8\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/rocky-linux-cloud/global/licenses/rocky-linux-8\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"rocky-linux-8-optimized-gcp\",\n      \"chargesUseFee\": false,\n      \"id\": \"8825802357826528356\",\n      \"licenseCode\": \"6558362506632242275\",\n      \"creationTimestamp\": \"2022-06-10T12:24:59.793-07:00\",\n      \"description\": \"Rocky Linux 8 Optimized for GCP\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/rocky-linux-cloud/global/licenses/rocky-linux-8-optimized-gcp\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"rocky-linux-9\",\n      \"chargesUseFee\": false,\n      \"id\": \"8997780373141070933\",\n      \"licenseCode\": \"1393672665428796501\",\n      \"creationTimestamp\": \"2022-06-10T12:25:46.595-07:00\",\n      \"description\": \"Rocky Linux 9\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/rocky-linux-cloud/global/licenses/rocky-linux-9\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"rocky-linux-9-optimized-gcp\",\n      \"chargesUseFee\": false,\n      \"id\": \"3606573183652471876\",\n      \"licenseCode\": \"3313713657389392963\",\n      \"creationTimestamp\": \"2022-06-10T12:25:32.158-07:00\",\n      \"description\": \"Rocky Linux 9 Optimized for GCP\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/rocky-linux-cloud/global/licenses/rocky-linux-9-optimized-gcp\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/rocky-linux-cloud/global/licenses\"\n}\n"
  },
  {
    "path": "test-data/gce-image-license/json-dumps/suse-cloud-licenses.json",
    "content": "{\n  \"id\": \"projects/suse-cloud/global/licenses\",\n  \"items\": [\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"sles-11\",\n      \"chargesUseFee\": true,\n      \"id\": \"6080198140089510959\",\n      \"licenseCode\": \"1000004\",\n      \"creationTimestamp\": \"2013-08-19T17:17:57.000-07:00\",\n      \"description\": \"SUSE Enterprise Linux 11\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/suse-cloud/global/licenses/sles-11\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"sles-12\",\n      \"chargesUseFee\": true,\n      \"id\": \"6080198141760474759\",\n      \"licenseCode\": \"1000008\",\n      \"creationTimestamp\": \"2014-10-13T16:11:00.000-07:00\",\n      \"description\": \"SUSE Linux Enterprise 12\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/suse-cloud/global/licenses/sles-12\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"sles-15\",\n      \"chargesUseFee\": false,\n      \"id\": \"3729649224393683136\",\n      \"licenseCode\": \"5422776498422280384\",\n      \"creationTimestamp\": \"2018-01-22T12:48:47.760-08:00\",\n      \"description\": \"SUSE Linux Enterprise Server 15\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/suse-cloud/global/licenses/sles-15\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/suse-cloud/global/licenses\"\n}\n"
  },
  {
    "path": "test-data/gce-image-license/json-dumps/suse-sap-cloud-licenses.json",
    "content": "{\n  \"id\": \"projects/suse-sap-cloud/global/licenses\",\n  \"items\": [\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"sles-sap-12\",\n      \"chargesUseFee\": false,\n      \"id\": \"7819209786793516810\",\n      \"licenseCode\": \"4079932016749305610\",\n      \"creationTimestamp\": \"2017-03-02T10:18:13.971-08:00\",\n      \"description\": \"SLES 12 for SAP\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/suse-sap-cloud/global/licenses/sles-sap-12\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"sles-sap-15\",\n      \"chargesUseFee\": false,\n      \"id\": \"6924394672531508922\",\n      \"licenseCode\": \"4764125400812555962\",\n      \"creationTimestamp\": \"2018-02-02T10:39:17.468-08:00\",\n      \"description\": \"SLES 15 For SAP\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/suse-sap-cloud/global/licenses/sles-sap-15\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/suse-sap-cloud/global/licenses\"\n}\n"
  },
  {
    "path": "test-data/gce-image-license/json-dumps/ubuntu-os-cloud-licenses.json",
    "content": "{\n  \"id\": \"projects/ubuntu-os-cloud/global/licenses\",\n  \"items\": [\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-1204-precise\",\n      \"chargesUseFee\": true,\n      \"id\": \"6080198136355458115\",\n      \"licenseCode\": \"1000009\",\n      \"creationTimestamp\": \"2014-10-23T08:51:25.000-07:00\",\n      \"description\": \"Ubuntu 12.04 LTS (Precise Pangolin)\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-1204-precise\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-1404-trusty\",\n      \"chargesUseFee\": true,\n      \"id\": \"6080198139190250694\",\n      \"licenseCode\": \"1000010\",\n      \"creationTimestamp\": \"2014-10-23T08:51:25.000-07:00\",\n      \"description\": \"Ubuntu 14.04 LTS (Trusty Tahr)\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-1404-trusty\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-1410-utopic\",\n      \"chargesUseFee\": true,\n      \"id\": \"6080198139293189152\",\n      \"licenseCode\": \"1000011\",\n      \"creationTimestamp\": \"2014-10-23T08:51:25.000-07:00\",\n      \"description\": \"Ubuntu 14.10 (Utopic Unicorn)\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-1410-utopic\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-1504-vivid\",\n      \"chargesUseFee\": true,\n      \"id\": \"6093160693684590177\",\n      \"licenseCode\": \"1000012\",\n      \"creationTimestamp\": \"2014-12-09T12:30:00.000-08:00\",\n      \"description\": \"Ubuntu 15.04 (Vivid Vervet)\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-1504-vivid\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-1510-wily\",\n      \"chargesUseFee\": true,\n      \"id\": \"6089610342019049344\",\n      \"licenseCode\": \"1000200\",\n      \"creationTimestamp\": \"2015-10-28T15:14:24.000-07:00\",\n      \"description\": \"Ubuntu 15.10 (Wily Werewolf)\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-1510-wily\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-1604-xenial\",\n      \"chargesUseFee\": true,\n      \"id\": \"2152070885817132928\",\n      \"licenseCode\": \"1000201\",\n      \"creationTimestamp\": \"2015-10-28T15:14:24.000-07:00\",\n      \"description\": \"Ubuntu 16.04 (Xenial Xerus)\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-1604-xenial\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-1610-yakkety\",\n      \"chargesUseFee\": true,\n      \"id\": \"834065896528093185\",\n      \"licenseCode\": \"1000221\",\n      \"creationTimestamp\": \"2015-10-28T15:14:24.000-07:00\",\n      \"description\": \"Ubuntu 16.10 (Yakkety Yak)\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-1610-yakkety\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-1704-zesty\",\n      \"chargesUseFee\": false,\n      \"id\": \"3665852604842439566\",\n      \"licenseCode\": \"1000227\",\n      \"creationTimestamp\": \"2016-11-29T13:32:44.000-08:00\",\n      \"description\": \"Ubuntu 17.04 (Zesty Zapus)\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-1704-zesty\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-1710\",\n      \"chargesUseFee\": false,\n      \"id\": \"3417580439768898142\",\n      \"licenseCode\": \"3533844014765677150\",\n      \"creationTimestamp\": \"2017-05-09T13:21:05.208-07:00\",\n      \"description\": \"Ubuntu 17.10 (Artful Aardvark)\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-1710\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-1804-lts\",\n      \"chargesUseFee\": false,\n      \"id\": \"7416677643538051184\",\n      \"licenseCode\": \"5926592092274602096\",\n      \"creationTimestamp\": \"2017-11-11T06:52:15.073-08:00\",\n      \"description\": \"Ubuntu 18.04 LTS (Bionic Beaver)\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-1804-lts\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-1810\",\n      \"chargesUseFee\": false,\n      \"id\": \"5189792346744345861\",\n      \"licenseCode\": \"3900875328389436677\",\n      \"creationTimestamp\": \"2018-06-01T08:53:14.479-07:00\",\n      \"description\": \"Ubuntu 18.10 (Cosmic Cuttlefish)\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-1810\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-1904\",\n      \"chargesUseFee\": false,\n      \"id\": \"7040385920840434261\",\n      \"licenseCode\": \"8810085950586290773\",\n      \"creationTimestamp\": \"2018-11-22T06:27:06.728-08:00\",\n      \"description\": \"Ubuntu 19.04 (Disco Dingo)\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-1904\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-1910\",\n      \"chargesUseFee\": false,\n      \"id\": \"6141392688134340342\",\n      \"licenseCode\": \"1171116710542819062\",\n      \"creationTimestamp\": \"2019-04-23T23:20:09.171-07:00\",\n      \"description\": \"Ubuntu 19.10 (Eoan)\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-1910\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-2004-lts\",\n      \"chargesUseFee\": false,\n      \"id\": \"7845324931658182311\",\n      \"licenseCode\": \"2211838267635035815\",\n      \"creationTimestamp\": \"2019-10-21T08:35:36.181-07:00\",\n      \"description\": \"Ubuntu 20.04 LTS (Focal Fossa)\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-2004-lts\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-2010\",\n      \"chargesUseFee\": false,\n      \"id\": \"2446970658841342615\",\n      \"licenseCode\": \"769514169992655511\",\n      \"creationTimestamp\": \"2020-04-27T09:46:48.045-07:00\",\n      \"description\": \"Ubuntu 20.10 (Groovy Gorilla)\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-2010\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-2104\",\n      \"chargesUseFee\": false,\n      \"id\": \"5897560342383784471\",\n      \"licenseCode\": \"7272665912576537111\",\n      \"creationTimestamp\": \"2020-10-29T07:08:56.464-07:00\",\n      \"description\": \"Ubuntu 21.04 LTS (Hirsute Hippo)\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-2104\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-2110\",\n      \"chargesUseFee\": false,\n      \"id\": \"8902766118812014259\",\n      \"licenseCode\": \"1732575731494180531\",\n      \"creationTimestamp\": \"2021-04-22T14:19:24.492-07:00\",\n      \"description\": \"Ubuntu 21.10 (Impish Indri)\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-2110\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-2204-lts\",\n      \"chargesUseFee\": false,\n      \"id\": \"9222026843429805123\",\n      \"licenseCode\": \"5511465778777431107\",\n      \"creationTimestamp\": \"2021-10-18T09:37:00.877-07:00\",\n      \"description\": \"Ubuntu 22.04 LTS (Jammy Jellyfish)\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-2204-lts\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-2210\",\n      \"chargesUseFee\": false,\n      \"id\": \"2755274802620387700\",\n      \"licenseCode\": \"3210324663486239092\",\n      \"creationTimestamp\": \"2022-04-26T15:18:03.644-07:00\",\n      \"description\": \"Ubuntu 22.10 (Kinetic Kudu)\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-2210\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-2304\",\n      \"chargesUseFee\": false,\n      \"id\": \"3127688745403688989\",\n      \"licenseCode\": \"870135758600939548\",\n      \"creationTimestamp\": \"2022-11-09T04:02:59.227-08:00\",\n      \"description\": \"Ubuntu 23.04 (Lunar Lobster)\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-2304\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-2310\",\n      \"chargesUseFee\": false,\n      \"id\": \"3316313456908559106\",\n      \"licenseCode\": \"3279655455770665730\",\n      \"creationTimestamp\": \"2023-04-28T16:59:41.796-07:00\",\n      \"description\": \"Ubuntu 23.10 (Mantic Minotaur)\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-2310\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-2404-lts\",\n      \"chargesUseFee\": false,\n      \"id\": \"237675062287091321\",\n      \"licenseCode\": \"3242930272766215801\",\n      \"creationTimestamp\": \"2023-10-26T16:39:02.390-07:00\",\n      \"description\": \"Ubuntu 24.04 LTS (Noble Numbat)\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-2404-lts\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-2410\",\n      \"chargesUseFee\": false,\n      \"id\": \"1848982427593022524\",\n      \"licenseCode\": \"5563637729949850684\",\n      \"creationTimestamp\": \"2024-05-01T13:15:15.822-07:00\",\n      \"description\": \"Ubuntu 24.10 (Oracular Oriole)\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-2410\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-core-16\",\n      \"chargesUseFee\": false,\n      \"id\": \"4480268362245049223\",\n      \"licenseCode\": \"6379422142266182535\",\n      \"creationTimestamp\": \"2017-02-15T03:03:04.172-08:00\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-core-16\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-core-devel\",\n      \"chargesUseFee\": true,\n      \"id\": \"6093160695016832855\",\n      \"licenseCode\": \"1000014\",\n      \"creationTimestamp\": \"2014-12-10T17:03:26.000-08:00\",\n      \"description\": \"Ubuntu Core (devel)\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-core-devel\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-devel\",\n      \"chargesUseFee\": true,\n      \"id\": \"6093160694174928674\",\n      \"licenseCode\": \"1000013\",\n      \"creationTimestamp\": \"2014-12-10T17:03:26.000-08:00\",\n      \"description\": \"Ubuntu Development (devel)\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-devel\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-minimal-1604-lts\",\n      \"chargesUseFee\": false,\n      \"id\": \"4009076425138393981\",\n      \"licenseCode\": \"1221576520422937469\",\n      \"creationTimestamp\": \"2018-08-07T12:05:54.362-07:00\",\n      \"description\": \"Ubuntu Minimal 16.04 LTS (Xenial Xerus)\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-minimal-1604-lts\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-minimal-1804-lts\",\n      \"chargesUseFee\": false,\n      \"id\": \"2111994026239742826\",\n      \"licenseCode\": \"5378856944553710442\",\n      \"creationTimestamp\": \"2018-08-07T12:05:41.978-07:00\",\n      \"description\": \"Ubuntu Minimal 18.04 LTS (Bionic Beaver)\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-minimal-1804-lts\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-minimal-1810\",\n      \"chargesUseFee\": false,\n      \"id\": \"5164736619936502740\",\n      \"licenseCode\": \"7419213078715454420\",\n      \"creationTimestamp\": \"2018-08-07T12:04:27.422-07:00\",\n      \"description\": \"Ubuntu Minimal 18.10 (Cosmic Cuttlefish)\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-minimal-1810\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-minimal-1904\",\n      \"chargesUseFee\": false,\n      \"id\": \"8618803990011511401\",\n      \"licenseCode\": \"715112593892246121\",\n      \"creationTimestamp\": \"2018-11-22T06:26:14.989-08:00\",\n      \"description\": \"Ubuntu Minimal 19.04 (Disco Dingo)\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-minimal-1904\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-minimal-1910\",\n      \"chargesUseFee\": false,\n      \"id\": \"1465136496451107883\",\n      \"licenseCode\": \"7538805764411735083\",\n      \"creationTimestamp\": \"2019-04-23T23:31:32.434-07:00\",\n      \"description\": \"Ubuntu Minimal 19.10 (Eoan)\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-minimal-1910\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-minimal-2004-lts\",\n      \"chargesUseFee\": false,\n      \"id\": \"6035068921600568960\",\n      \"licenseCode\": \"4650988716595113600\",\n      \"creationTimestamp\": \"2019-10-21T08:36:15.877-07:00\",\n      \"description\": \"Ubuntu Minimal 20.04 LTS (Focal Fossa)\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-minimal-2004-lts\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-minimal-2010\",\n      \"chargesUseFee\": false,\n      \"id\": \"4889654405597147750\",\n      \"licenseCode\": \"8143918599989015142\",\n      \"creationTimestamp\": \"2020-04-27T09:47:05.752-07:00\",\n      \"description\": \"Ubuntu Minimal 20.10 (Groovy Gorilla)\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-minimal-2010\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-minimal-2104\",\n      \"chargesUseFee\": false,\n      \"id\": \"218721005558264795\",\n      \"licenseCode\": \"4947589846537827291\",\n      \"creationTimestamp\": \"2020-10-29T07:09:56.767-07:00\",\n      \"description\": \"Ubuntu Minimal 21.04 LTS (Hirsute Hippo)\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-minimal-2104\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-minimal-2110\",\n      \"chargesUseFee\": false,\n      \"id\": \"4892576431804798616\",\n      \"licenseCode\": \"4116013191835440792\",\n      \"creationTimestamp\": \"2021-04-22T14:19:51.199-07:00\",\n      \"description\": \"Ubuntu Minimal 21.10 (Impish Indri)\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-minimal-2110\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-minimal-2204-lts\",\n      \"chargesUseFee\": false,\n      \"id\": \"30277383760125210\",\n      \"licenseCode\": \"591260547102547226\",\n      \"creationTimestamp\": \"2021-10-18T09:42:30.042-07:00\",\n      \"description\": \"Ubuntu Minimal 22.04 LTS (Jammy Jellyfish)\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-minimal-2204-lts\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-minimal-2210\",\n      \"chargesUseFee\": false,\n      \"id\": \"2970203014880940354\",\n      \"licenseCode\": \"2314222210107429186\",\n      \"creationTimestamp\": \"2022-04-26T15:18:21.378-07:00\",\n      \"description\": \"Ubuntu Minimal 22.10 (Kinetic Kudu)\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-minimal-2210\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-minimal-2304\",\n      \"chargesUseFee\": false,\n      \"id\": \"7737788817092258286\",\n      \"licenseCode\": \"8188837469245286894\",\n      \"creationTimestamp\": \"2022-11-09T04:03:13.304-08:00\",\n      \"description\": \"Ubuntu Minimal 23.04 (Lunar Lobster)\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-minimal-2304\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-minimal-2310\",\n      \"chargesUseFee\": false,\n      \"id\": \"5399070251245756586\",\n      \"licenseCode\": \"9148128026895179945\",\n      \"creationTimestamp\": \"2023-04-28T17:01:10.106-07:00\",\n      \"description\": \"Ubuntu Minimal 23.10 (Mantic Minotaur)\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-minimal-2310\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-minimal-2404-lts\",\n      \"chargesUseFee\": false,\n      \"id\": \"3936467139159344734\",\n      \"licenseCode\": \"6508311393003325021\",\n      \"creationTimestamp\": \"2023-10-26T16:39:29.979-07:00\",\n      \"description\": \"Ubuntu Minimal 24.04 LTS (Noble Numbat)\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-minimal-2404-lts\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-minimal-2410\",\n      \"chargesUseFee\": false,\n      \"id\": \"3174199534576147923\",\n      \"licenseCode\": \"7255279009718541779\",\n      \"creationTimestamp\": \"2024-05-01T13:17:00.704-07:00\",\n      \"description\": \"Ubuntu Minimal 24.10 (Oracular Oriole)\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-minimal-2410\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-snappy-1604\",\n      \"chargesUseFee\": true,\n      \"id\": \"6925504719776851840\",\n      \"licenseCode\": \"1000202\",\n      \"creationTimestamp\": \"2015-10-28T15:14:24.000-07:00\",\n      \"description\": \"Ubuntu Snappy 16.04\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-snappy-1604\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses\"\n}\n"
  },
  {
    "path": "test-data/gce-image-license/json-dumps/ubuntu-os-pro-cloud-licenses.json",
    "content": "{\n  \"id\": \"projects/ubuntu-os-pro-cloud/global/licenses\",\n  \"items\": [\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-pro-1604-lts\",\n      \"chargesUseFee\": false,\n      \"id\": \"3941006390333842763\",\n      \"licenseCode\": \"8045211386737108299\",\n      \"creationTimestamp\": \"2020-12-03T09:08:52.513-08:00\",\n      \"description\": \"Ubuntu Pro 16.04 LTS (Xenial Xerus)\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-pro-cloud/global/licenses/ubuntu-pro-1604-lts\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-pro-1804-bionic-arm64\",\n      \"chargesUseFee\": false,\n      \"id\": \"7326263841230969689\",\n      \"licenseCode\": \"3631530139086248793\",\n      \"creationTimestamp\": \"2024-03-13T10:43:18.670-07:00\",\n      \"description\": \"ubuntu-pro-1804-bionic-arm64\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-pro-cloud/global/licenses/ubuntu-pro-1804-bionic-arm64\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-pro-1804-lts\",\n      \"chargesUseFee\": false,\n      \"id\": \"5618755422289962359\",\n      \"licenseCode\": \"6022427724719891830\",\n      \"creationTimestamp\": \"2020-12-03T09:08:41.124-08:00\",\n      \"description\": \"Ubuntu Pro 18.04 LTS (Bionic Beaver)\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-pro-cloud/global/licenses/ubuntu-pro-1804-lts\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-pro-2004-focal-arm64\",\n      \"chargesUseFee\": false,\n      \"id\": \"8677376590236900130\",\n      \"licenseCode\": \"8885648217368976162\",\n      \"creationTimestamp\": \"2024-03-13T10:43:41.581-07:00\",\n      \"description\": \"ubuntu-pro-2004-focal-arm64\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-pro-cloud/global/licenses/ubuntu-pro-2004-focal-arm64\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-pro-2004-lts\",\n      \"chargesUseFee\": false,\n      \"id\": \"8936529431231768014\",\n      \"licenseCode\": \"599959289349842382\",\n      \"creationTimestamp\": \"2020-12-03T09:06:41.907-08:00\",\n      \"description\": \"Ubuntu Pro 20.04 LTS (Focal Fossa)\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-pro-cloud/global/licenses/ubuntu-pro-2004-lts\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-pro-2204-jammy-arm64\",\n      \"chargesUseFee\": false,\n      \"id\": \"2278827998777727759\",\n      \"licenseCode\": \"3644693775761824526\",\n      \"creationTimestamp\": \"2024-03-13T10:44:00.907-07:00\",\n      \"description\": \"ubuntu-pro-2204-jammy-arm64\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-pro-cloud/global/licenses/ubuntu-pro-2204-jammy-arm64\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-pro-2204-lts\",\n      \"chargesUseFee\": false,\n      \"id\": \"1661165809961015888\",\n      \"licenseCode\": \"2592866803419978320\",\n      \"creationTimestamp\": \"2021-10-18T09:45:51.910-07:00\",\n      \"description\": \"Ubuntu Pro 22.04 LTS (Jammy Jellyfish)\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-pro-cloud/global/licenses/ubuntu-pro-2204-lts\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-pro-2404-lts\",\n      \"chargesUseFee\": false,\n      \"id\": \"7234930073195138986\",\n      \"licenseCode\": \"2176054482269786025\",\n      \"creationTimestamp\": \"2023-10-27T10:20:05.914-07:00\",\n      \"description\": \"Ubuntu Pro 24.04 LTS (Noble Numbat)\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-pro-cloud/global/licenses/ubuntu-pro-2404-lts\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-pro-fips-1804-lts\",\n      \"chargesUseFee\": false,\n      \"id\": \"3014414184157572334\",\n      \"licenseCode\": \"2609515522535746798\",\n      \"creationTimestamp\": \"2022-03-16T05:03:13.515-07:00\",\n      \"description\": \"Ubuntu Pro FIPS 18.04 LTS (Bionic Beaver)\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-pro-cloud/global/licenses/ubuntu-pro-fips-1804-lts\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-pro-fips-2004-lts\",\n      \"chargesUseFee\": false,\n      \"id\": \"4638035787686636796\",\n      \"licenseCode\": \"892251481491401980\",\n      \"creationTimestamp\": \"2022-03-16T05:03:31.188-07:00\",\n      \"description\": \"Ubuntu Pro FIPS 20.04 LTS (Focal Fossa)\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-pro-cloud/global/licenses/ubuntu-pro-fips-2004-lts\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-pro-fips-2204-lts\",\n      \"chargesUseFee\": false,\n      \"id\": \"3480614574692789277\",\n      \"licenseCode\": \"4663571520039971869\",\n      \"creationTimestamp\": \"2022-03-16T05:07:14.303-07:00\",\n      \"description\": \"Ubuntu Pro FIPS 22.04 LTS (Jammy Jellyfish)\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-pro-cloud/global/licenses/ubuntu-pro-fips-2204-lts\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"ubuntu-pro-fips-2404-lts\",\n      \"chargesUseFee\": false,\n      \"id\": \"4890027961376722813\",\n      \"licenseCode\": \"8575064881497526141\",\n      \"creationTimestamp\": \"2023-10-27T10:21:22.731-07:00\",\n      \"description\": \"Ubuntu Pro FIPS 24.04 LTS (Noble Numbat)\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-pro-cloud/global/licenses/ubuntu-pro-fips-2404-lts\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-pro-cloud/global/licenses\"\n}\n"
  },
  {
    "path": "test-data/gce-image-license/json-dumps/windows-cloud-licenses.json",
    "content": "{\n  \"id\": \"projects/windows-cloud/global/licenses\",\n  \"items\": [\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"mirantis-container-runtime\",\n      \"chargesUseFee\": false,\n      \"id\": \"3607075093511293736\",\n      \"licenseCode\": \"879005342760323879\",\n      \"creationTimestamp\": \"2023-04-28T09:35:20.284-07:00\",\n      \"description\": \"Mirantis Container Runtime\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/mirantis-container-runtime\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-10-enterprise-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"5769580143916819783\",\n      \"licenseCode\": \"2089835370828997959\",\n      \"creationTimestamp\": \"2018-11-07T00:00:40.302-08:00\",\n      \"description\": \"Windows 10 Enterprise BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-10-enterprise-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-10-x64-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"5572284649276248982\",\n      \"licenseCode\": \"8727879116868096918\",\n      \"creationTimestamp\": \"2019-11-19T19:05:29.677-08:00\",\n      \"description\": \"Windows 10 64-bit BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-10-x64-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-10-x86-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"1279231564365501289\",\n      \"licenseCode\": \"3732182829874353001\",\n      \"creationTimestamp\": \"2019-11-19T19:05:42.089-08:00\",\n      \"description\": \"Windows 10 32-bit BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-10-x86-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-11-x64-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"3804262737275203477\",\n      \"licenseCode\": \"5378533650449772437\",\n      \"creationTimestamp\": \"2021-08-25T11:52:42.711-07:00\",\n      \"description\": \"Windows 11 64-bit BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-11-x64-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-7-enterprise-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"2913052624331679126\",\n      \"licenseCode\": \"752112173778412950\",\n      \"creationTimestamp\": \"2018-11-06T23:59:53.727-08:00\",\n      \"description\": \"Windows 7 Enterprise BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-7-enterprise-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-7-x64-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"6501903266496451262\",\n      \"licenseCode\": \"5016528181960184510\",\n      \"creationTimestamp\": \"2019-11-19T19:00:33.621-08:00\",\n      \"description\": \"Windows 7 64-bit BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-7-x64-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-7-x86-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"4058550282231550561\",\n      \"licenseCode\": \"622639362407469665\",\n      \"creationTimestamp\": \"2019-11-19T19:01:34.532-08:00\",\n      \"description\": \"Windows 7 32-bit BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-7-x86-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-8-x64-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"7710168160606425653\",\n      \"licenseCode\": \"7036859048284197429\",\n      \"creationTimestamp\": \"2019-11-19T19:02:50.559-08:00\",\n      \"description\": \"Windows 8.x 64-bit BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-8-x64-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-8-x86-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"2601192579332117498\",\n      \"licenseCode\": \"3720924436396315642\",\n      \"creationTimestamp\": \"2019-11-19T19:03:49.785-08:00\",\n      \"description\": \"Windows 8.x 32-bit BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-8-x86-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-81-x64-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"5692263345196614391\",\n      \"licenseCode\": \"5366577783322166007\",\n      \"creationTimestamp\": \"2019-04-28T21:22:48.487-07:00\",\n      \"description\": \"Windows 8.1 Enterprise x64 BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-81-x64-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-ent\",\n      \"chargesUseFee\": false,\n      \"id\": \"1257656105385958662\",\n      \"licenseCode\": \"2967169933779246342\",\n      \"creationTimestamp\": \"2019-09-25T19:35:21.078-07:00\",\n      \"description\": \"Windows Enterprise\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-ent\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-for-containers\",\n      \"chargesUseFee\": false,\n      \"id\": \"7423076496314791885\",\n      \"licenseCode\": \"2643967004807329741\",\n      \"creationTimestamp\": \"2017-09-25T11:21:22.120-07:00\",\n      \"description\": \"Windows container host\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-for-containers\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-1709-dc\",\n      \"chargesUseFee\": false,\n      \"id\": \"2638722841150638382\",\n      \"licenseCode\": \"5194306116883728686\",\n      \"creationTimestamp\": \"2017-10-03T13:49:05.759-07:00\",\n      \"description\": \"Windows Server 1709 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-1709-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-1803-dc\",\n      \"chargesUseFee\": false,\n      \"id\": \"991969583094905153\",\n      \"licenseCode\": \"6476660300603799873\",\n      \"creationTimestamp\": \"2018-05-07T10:06:54.761-07:00\",\n      \"description\": \"Windows Server version 1803 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-1803-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-1809-dc\",\n      \"chargesUseFee\": false,\n      \"id\": \"2197036663612051569\",\n      \"licenseCode\": \"8597854123084943473\",\n      \"creationTimestamp\": \"2018-10-04T17:21:50.249-07:00\",\n      \"description\": \"Windows Server version 1809 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-1809-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-1903-dc\",\n      \"chargesUseFee\": false,\n      \"id\": \"783754911489890105\",\n      \"licenseCode\": \"5980382382909462329\",\n      \"creationTimestamp\": \"2019-06-10T21:11:02.733-07:00\",\n      \"description\": \"Windows Server version 1903 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-1903-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-1909-dc\",\n      \"chargesUseFee\": false,\n      \"id\": \"1504783339576403625\",\n      \"licenseCode\": \"1413572828508235433\",\n      \"creationTimestamp\": \"2019-11-14T01:03:02.101-08:00\",\n      \"description\": \"Windows Server version 1909 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-1909-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2000\",\n      \"chargesUseFee\": false,\n      \"id\": \"77415431498093015\",\n      \"licenseCode\": \"5507061839551517143\",\n      \"creationTimestamp\": \"2021-03-02T09:00:40.478-08:00\",\n      \"description\": \"Windows Server 2000\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2000\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2003\",\n      \"chargesUseFee\": false,\n      \"id\": \"8972483680585271920\",\n      \"licenseCode\": \"5030842449011296880\",\n      \"creationTimestamp\": \"2017-04-10T14:09:51.924-07:00\",\n      \"description\": \"Windows Server 2003\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2003\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2004-dc\",\n      \"chargesUseFee\": false,\n      \"id\": \"6915731882356532357\",\n      \"licenseCode\": \"6710259852346942597\",\n      \"creationTimestamp\": \"2020-07-23T11:43:54.418-07:00\",\n      \"description\": \"Windows Server version 2004 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2004-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2008\",\n      \"chargesUseFee\": false,\n      \"id\": \"2740560588278180852\",\n      \"licenseCode\": \"1656378918552316916\",\n      \"creationTimestamp\": \"2022-11-09T13:01:15.565-08:00\",\n      \"description\": \"Windows Server 2008 Standard Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2008\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2008-dc\",\n      \"chargesUseFee\": true,\n      \"id\": \"5520530534018080146\",\n      \"licenseCode\": \"1000502\",\n      \"creationTimestamp\": \"2015-06-03T17:05:28.000-07:00\",\n      \"description\": \"Windows Server 2008 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2008-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2008-r2\",\n      \"chargesUseFee\": false,\n      \"id\": \"4293107698603502582\",\n      \"licenseCode\": \"3284763237085719542\",\n      \"creationTimestamp\": \"2022-11-09T13:01:13.386-08:00\",\n      \"description\": \"Windows Server 2008 R2 Standard Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2008-r2\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2008-r2-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"6485631155857676024\",\n      \"licenseCode\": \"4551215591257167608\",\n      \"creationTimestamp\": \"2018-10-05T15:39:19.139-07:00\",\n      \"description\": \"Windows Server 2008R2 BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2008-r2-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2008-r2-dc\",\n      \"chargesUseFee\": true,\n      \"id\": \"6080198139471122848\",\n      \"licenseCode\": \"1000000\",\n      \"creationTimestamp\": \"2013-08-19T17:17:57.000-07:00\",\n      \"description\": \"Windows Server 2008 R2 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2008-r2-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2012\",\n      \"chargesUseFee\": false,\n      \"id\": \"4571663854194502649\",\n      \"licenseCode\": \"7695108898142923768\",\n      \"creationTimestamp\": \"2022-11-09T13:01:10.861-08:00\",\n      \"description\": \"Windows Server 2012 Standard Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2012\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2012-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"2247304514167789851\",\n      \"licenseCode\": \"5559842820536817947\",\n      \"creationTimestamp\": \"2018-10-05T15:38:44.367-07:00\",\n      \"description\": \"Windows Server 2012 BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2012-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2012-dc\",\n      \"chargesUseFee\": true,\n      \"id\": \"6102042211374830963\",\n      \"licenseCode\": \"1000015\",\n      \"creationTimestamp\": \"2015-01-05T16:58:27.000-08:00\",\n      \"description\": \"Windows Server 2012 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2012-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2012-r2\",\n      \"chargesUseFee\": false,\n      \"id\": \"975226805105568736\",\n      \"licenseCode\": \"7798417859637521376\",\n      \"creationTimestamp\": \"2022-11-09T13:01:03.469-08:00\",\n      \"description\": \"Windows Server 2012 R2 Standard Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2012-r2\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2012-r2-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"11586629996795623\",\n      \"licenseCode\": \"6738952703547430631\",\n      \"creationTimestamp\": \"2018-10-05T15:39:04.149-07:00\",\n      \"description\": \"Windows Server 2012R2 BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2012-r2-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2012-r2-dc\",\n      \"chargesUseFee\": true,\n      \"id\": \"6102042209776448355\",\n      \"licenseCode\": \"1000017\",\n      \"creationTimestamp\": \"2015-01-05T16:58:27.000-08:00\",\n      \"description\": \"Windows Server 2012 R2 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2012-r2-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2012-r2-dc-in-place-upgrade\",\n      \"chargesUseFee\": false,\n      \"id\": \"1687636345185865342\",\n      \"licenseCode\": \"7123010349826543230\",\n      \"creationTimestamp\": \"2020-03-24T09:08:49.417-07:00\",\n      \"description\": \"Windows Server 2008 R2 to 2012 R2 in place upgrade\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2012-r2-dc-in-place-upgrade\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2016\",\n      \"chargesUseFee\": false,\n      \"id\": \"2566166048269249507\",\n      \"licenseCode\": \"4819555115818134498\",\n      \"creationTimestamp\": \"2022-11-09T13:01:01.077-08:00\",\n      \"description\": \"Windows Server 2016 Standard Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2016\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2016-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"6580557195888974094\",\n      \"licenseCode\": \"4322823184804632846\",\n      \"creationTimestamp\": \"2018-10-05T15:38:26.021-07:00\",\n      \"description\": \"Windows Server 2016 BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2016-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2016-dc\",\n      \"chargesUseFee\": true,\n      \"id\": \"2483536683413682772\",\n      \"licenseCode\": \"1000213\",\n      \"creationTimestamp\": \"2016-05-02T14:35:54.000-07:00\",\n      \"description\": \"Windows Server 2016 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2016-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2016-dc-in-place-upgrade\",\n      \"chargesUseFee\": false,\n      \"id\": \"7616085184958426941\",\n      \"licenseCode\": \"5199320590876405565\",\n      \"creationTimestamp\": \"2022-03-04T09:52:18.982-08:00\",\n      \"description\": \"in-place upgraded to Windows Server 2016\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2016-dc-in-place-upgrade\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2016-nano\",\n      \"chargesUseFee\": true,\n      \"id\": \"2282594357842688596\",\n      \"licenseCode\": \"1000214\",\n      \"creationTimestamp\": \"2016-05-02T14:35:54.000-07:00\",\n      \"description\": \"Windows Server 2016 Nano\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2016-nano\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2019\",\n      \"chargesUseFee\": false,\n      \"id\": \"3525541779464104933\",\n      \"licenseCode\": \"4874454843789519845\",\n      \"creationTimestamp\": \"2022-11-09T13:00:58.674-08:00\",\n      \"description\": \"Windows Server 2019 Standard Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2019\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2019-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"1090214026507846099\",\n      \"licenseCode\": \"6532438499690676691\",\n      \"creationTimestamp\": \"2019-09-25T12:25:48.522-07:00\",\n      \"description\": \"Windows Server 2019 BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2019-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2019-dc\",\n      \"chargesUseFee\": false,\n      \"id\": \"5993475225685790965\",\n      \"licenseCode\": \"3389558045860892917\",\n      \"creationTimestamp\": \"2018-10-04T17:19:38.568-07:00\",\n      \"description\": \"Windows Server 2019 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2019-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2019-dc-in-place-upgrade\",\n      \"chargesUseFee\": false,\n      \"id\": \"7388112379630840967\",\n      \"licenseCode\": \"3156934045285215367\",\n      \"creationTimestamp\": \"2022-03-04T09:54:48.827-08:00\",\n      \"description\": \"in-place upgraded to Windows Server 2019\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2019-dc-in-place-upgrade\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2022\",\n      \"chargesUseFee\": false,\n      \"id\": \"8141439404167244305\",\n      \"licenseCode\": \"6107784707477449232\",\n      \"creationTimestamp\": \"2022-11-09T13:00:46.975-08:00\",\n      \"description\": \"Windows Server 2022 Standard Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2022\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2022-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"2150336909657452508\",\n      \"licenseCode\": \"2808834792899686364\",\n      \"creationTimestamp\": \"2021-08-25T11:51:31.527-07:00\",\n      \"description\": \"Windows Server 2022 BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2022-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2022-dc\",\n      \"chargesUseFee\": false,\n      \"id\": \"2525168283357630087\",\n      \"licenseCode\": \"4079807029871201927\",\n      \"creationTimestamp\": \"2021-09-02T08:40:24.070-07:00\",\n      \"description\": \"Windows Server 2022 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2022-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2022-dc-in-place-upgrade\",\n      \"chargesUseFee\": false,\n      \"id\": \"7118639573064740016\",\n      \"licenseCode\": \"4670175393034005680\",\n      \"creationTimestamp\": \"2022-03-04T09:54:39.255-08:00\",\n      \"description\": \"in-place upgraded to Windows Server 2022\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2022-dc-in-place-upgrade\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2025\",\n      \"chargesUseFee\": false,\n      \"id\": \"5184168856764447080\",\n      \"licenseCode\": \"973054079889996136\",\n      \"creationTimestamp\": \"2024-02-01T08:32:07.510-08:00\",\n      \"description\": \"Windows Server 2025 Standard Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2025\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2025-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"8692163681596111212\",\n      \"licenseCode\": \"6621875542391421291\",\n      \"creationTimestamp\": \"2024-02-01T08:32:04.107-08:00\",\n      \"description\": \"Windows Server 2025 BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2025-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2025-dc\",\n      \"chargesUseFee\": false,\n      \"id\": \"3821821448269756778\",\n      \"licenseCode\": \"7142647615590922601\",\n      \"creationTimestamp\": \"2024-02-01T08:32:05.921-08:00\",\n      \"description\": \"Windows Server 2025 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2025-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2025-dc-in-place-upgrade\",\n      \"chargesUseFee\": false,\n      \"id\": \"7345581006395963746\",\n      \"licenseCode\": \"3883045502699600225\",\n      \"creationTimestamp\": \"2024-02-01T08:32:14.116-08:00\",\n      \"description\": \"In-place upgraded to Windows Server 2025 Datacenter\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2025-dc-in-place-upgrade\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2025-in-place-upgrade\",\n      \"chargesUseFee\": false,\n      \"id\": \"6466420601272039803\",\n      \"licenseCode\": \"3898871898839611771\",\n      \"creationTimestamp\": \"2024-02-01T08:32:20.801-08:00\",\n      \"description\": \"In-place upgraded to Windows Server 2025 Standard\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2025-in-place-upgrade\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-20h2-dc\",\n      \"chargesUseFee\": false,\n      \"id\": \"2209136415345591070\",\n      \"licenseCode\": \"8578754948912497438\",\n      \"creationTimestamp\": \"2020-11-02T13:45:21.528-08:00\",\n      \"description\": \"Windows Server version 20H2 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-20h2-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-21h1-dc\",\n      \"chargesUseFee\": false,\n      \"id\": \"8661389914554199433\",\n      \"licenseCode\": \"7248135684629163401\",\n      \"creationTimestamp\": \"2021-04-29T08:40:22.527-07:00\",\n      \"description\": \"Windows Server version 21h1 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-21h1-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-core\",\n      \"chargesUseFee\": true,\n      \"id\": \"7184832379764048457\",\n      \"licenseCode\": \"1000226\",\n      \"creationTimestamp\": \"2016-11-07T13:21:29.000-08:00\",\n      \"description\": \"Windows Server Core\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-core\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses\"\n}\n"
  },
  {
    "path": "test-data/gce-image-license/json-dumps/windows-sql-cloud-licenses.json",
    "content": "{\n  \"id\": \"projects/windows-sql-cloud/global/licenses\",\n  \"items\": [\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"sql-server-2012-enterprise\",\n      \"chargesUseFee\": true,\n      \"id\": \"1019197322190909629\",\n      \"licenseCode\": \"1000222\",\n      \"creationTimestamp\": \"2016-05-02T14:35:54.000-07:00\",\n      \"description\": \"SQL Server 2012 Enterprise\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-sql-cloud/global/licenses/sql-server-2012-enterprise\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"sql-server-2012-standard\",\n      \"chargesUseFee\": true,\n      \"id\": \"6498737321656908670\",\n      \"licenseCode\": \"1000220\",\n      \"creationTimestamp\": \"2016-05-02T14:35:54.000-07:00\",\n      \"description\": \"SQL Server 2012 Standard\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-sql-cloud/global/licenses/sql-server-2012-standard\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"sql-server-2012-web\",\n      \"chargesUseFee\": true,\n      \"id\": \"4544654693774126004\",\n      \"licenseCode\": \"1000223\",\n      \"creationTimestamp\": \"2016-05-02T14:35:54.000-07:00\",\n      \"description\": \"SQL Server 2012 Web\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-sql-cloud/global/licenses/sql-server-2012-web\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"sql-server-2014-enterprise\",\n      \"chargesUseFee\": true,\n      \"id\": \"1844915350471588436\",\n      \"licenseCode\": \"1000216\",\n      \"creationTimestamp\": \"2016-05-02T14:35:54.000-07:00\",\n      \"description\": \"SQL Server 2014 Enterprise\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-sql-cloud/global/licenses/sql-server-2014-enterprise\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"sql-server-2014-standard\",\n      \"chargesUseFee\": true,\n      \"id\": \"3705777654507911764\",\n      \"licenseCode\": \"1000215\",\n      \"creationTimestamp\": \"2016-05-02T14:35:54.000-07:00\",\n      \"description\": \"SQL Server 2014 Standard\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-sql-cloud/global/licenses/sql-server-2014-standard\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"sql-server-2014-web\",\n      \"chargesUseFee\": true,\n      \"id\": \"192393444583684692\",\n      \"licenseCode\": \"1000217\",\n      \"creationTimestamp\": \"2016-05-02T14:35:54.000-07:00\",\n      \"description\": \"SQL Server 2014 Web\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-sql-cloud/global/licenses/sql-server-2014-web\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"sql-server-2016-enterprise\",\n      \"chargesUseFee\": true,\n      \"id\": \"4374019495694842452\",\n      \"licenseCode\": \"1000219\",\n      \"creationTimestamp\": \"2016-05-02T14:35:54.000-07:00\",\n      \"description\": \"SQL Server 2016 Enterprise\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-sql-cloud/global/licenses/sql-server-2016-enterprise\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"sql-server-2016-express\",\n      \"chargesUseFee\": true,\n      \"id\": \"1256146342879158924\",\n      \"licenseCode\": \"1000225\",\n      \"creationTimestamp\": \"2016-05-02T14:35:54.000-07:00\",\n      \"description\": \"SQL Server 2016 Express\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-sql-cloud/global/licenses/sql-server-2016-express\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"sql-server-2016-standard\",\n      \"chargesUseFee\": true,\n      \"id\": \"3762728117693987412\",\n      \"licenseCode\": \"1000218\",\n      \"creationTimestamp\": \"2016-05-02T14:35:54.000-07:00\",\n      \"description\": \"SQL Server 2016 Standard\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-sql-cloud/global/licenses/sql-server-2016-standard\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"sql-server-2016-web\",\n      \"chargesUseFee\": true,\n      \"id\": \"2341292125388798373\",\n      \"licenseCode\": \"1000224\",\n      \"creationTimestamp\": \"2016-05-02T14:35:54.000-07:00\",\n      \"description\": \"SQL Server 2016 Web\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-sql-cloud/global/licenses/sql-server-2016-web\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"sql-server-2017-enterprise\",\n      \"chargesUseFee\": false,\n      \"id\": \"5251530023456011222\",\n      \"licenseCode\": \"1741222371620352982\",\n      \"creationTimestamp\": \"2017-09-25T11:38:49.539-07:00\",\n      \"description\": \"SQL Server 2017 Enterprise\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-sql-cloud/global/licenses/sql-server-2017-enterprise\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"sql-server-2017-express\",\n      \"chargesUseFee\": false,\n      \"id\": \"755737010247103372\",\n      \"licenseCode\": \"4315490921280396\",\n      \"creationTimestamp\": \"2017-09-25T11:39:31.203-07:00\",\n      \"description\": \"SQL Server 2017 Express\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-sql-cloud/global/licenses/sql-server-2017-express\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"sql-server-2017-standard\",\n      \"chargesUseFee\": false,\n      \"id\": \"923950005690364768\",\n      \"licenseCode\": \"6795597790302237536\",\n      \"creationTimestamp\": \"2017-09-25T11:40:15.938-07:00\",\n      \"description\": \"SQL Server 2017 Standard\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-sql-cloud/global/licenses/sql-server-2017-standard\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"sql-server-2017-web\",\n      \"chargesUseFee\": false,\n      \"id\": \"7215797861326582678\",\n      \"licenseCode\": \"3398668354433905558\",\n      \"creationTimestamp\": \"2017-09-25T11:39:53.032-07:00\",\n      \"description\": \"SQL Server 2017 Web\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-sql-cloud/global/licenses/sql-server-2017-web\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"sql-server-2019-enterprise\",\n      \"chargesUseFee\": false,\n      \"id\": \"1115216916632473700\",\n      \"licenseCode\": \"3039072951948447844\",\n      \"creationTimestamp\": \"2019-11-15T15:02:35.345-08:00\",\n      \"description\": \"SQL Server 2019 Enterprise\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-sql-cloud/global/licenses/sql-server-2019-enterprise\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"sql-server-2019-express\",\n      \"chargesUseFee\": false,\n      \"id\": \"6719031184910880891\",\n      \"licenseCode\": \"6367554477567938683\",\n      \"creationTimestamp\": \"2019-11-15T15:02:44.631-08:00\",\n      \"description\": \"SQL Server 2019 Express\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-sql-cloud/global/licenses/sql-server-2019-express\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"sql-server-2019-standard\",\n      \"chargesUseFee\": false,\n      \"id\": \"7011009714597302387\",\n      \"licenseCode\": \"3042936622923550835\",\n      \"creationTimestamp\": \"2019-11-15T15:02:53.011-08:00\",\n      \"description\": \"SQL Server 2019 Standard\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-sql-cloud/global/licenses/sql-server-2019-standard\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"sql-server-2019-web\",\n      \"chargesUseFee\": false,\n      \"id\": \"7336830812754710569\",\n      \"licenseCode\": \"6213885950785916969\",\n      \"creationTimestamp\": \"2019-11-15T15:03:34.508-08:00\",\n      \"description\": \"SQL Server 2019 Web\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-sql-cloud/global/licenses/sql-server-2019-web\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"sql-server-2022-enterprise\",\n      \"chargesUseFee\": false,\n      \"id\": \"115249055344003240\",\n      \"licenseCode\": \"1239729342351313064\",\n      \"creationTimestamp\": \"2022-07-19T15:55:03.422-07:00\",\n      \"description\": \"SQL Server 2022 Enterprise\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-sql-cloud/global/licenses/sql-server-2022-enterprise\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"sql-server-2022-express\",\n      \"chargesUseFee\": false,\n      \"id\": \"5357714831518107650\",\n      \"licenseCode\": \"2745185555069962241\",\n      \"creationTimestamp\": \"2022-07-19T15:57:49.861-07:00\",\n      \"description\": \"SQL Server 2022 Express\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-sql-cloud/global/licenses/sql-server-2022-express\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"sql-server-2022-standard\",\n      \"chargesUseFee\": false,\n      \"id\": \"19382503374227483\",\n      \"licenseCode\": \"7764068523658872858\",\n      \"creationTimestamp\": \"2022-07-19T15:57:57.033-07:00\",\n      \"description\": \"SQL Server 2022 Standard\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-sql-cloud/global/licenses/sql-server-2022-standard\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"sql-server-2022-web\",\n      \"chargesUseFee\": false,\n      \"id\": \"2954436675263694869\",\n      \"licenseCode\": \"1086120352405948436\",\n      \"creationTimestamp\": \"2022-07-19T15:58:02.857-07:00\",\n      \"description\": \"SQL Server 2022 Web\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-sql-cloud/global/licenses/sql-server-2022-web\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/windows-sql-cloud/global/licenses\"\n}\n"
  },
  {
    "path": "test-data/gce1/Makefile",
    "content": "PROJECT_ID  := $(shell terraform output -raw project_id)\nPROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix)\nPROJECT_NR  := $(shell terraform output -raw project_nr)\nORG_ID      := $(shell terraform output -raw org_id)\nCURL         = ../../bin/curl-wrap.sh\nJSON_CLEANER = ../../bin/json-cleaner\nZONE_1       = europe-west1-b\nZONE_2       = europe-west4-a\nZONE_3       = europe-west4-b\n\nFAKE_PROJECT_ID_SUFFIX = aaaa\nFAKE_PROJECT_NR = 12340001\nFAKE_ORG_ID = 11112222\n\nSED_SUBST_FAKE = sed -e \"s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/\" \\\n\t\t     -e \"s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/\" \\\n\t\t     -e \"s/$(ORG_ID)/$(FAKE_ORG_ID)/\"\n\nCOMPUTE_INSTANCES_MAXRESULTS=3\n\nINSTANCE_NAME_GCE2=gce2\nINSTANCE_NAME_GCE1=gce1\n\nall:\t\\\n\tjson-dumps/compute-effective-firewalls-default.json \\\n\tjson-dumps/compute-igs-$(ZONE_1).json \\\n\tjson-dumps/compute-igs-$(ZONE_2).json \\\n\tjson-dumps/compute-igs-$(ZONE_3).json \\\n\tjson-dumps/compute-igs-empty.json \\\n\tjson-dumps/compute-instances-$(ZONE_1).json \\\n\tjson-dumps/compute-instances-$(ZONE_1)-2.json \\\n\tjson-dumps/compute-instances-$(ZONE_2).json \\\n\tjson-dumps/compute-instances-$(ZONE_2)-2.json \\\n\tjson-dumps/compute-instances-$(ZONE_3).json \\\n\tjson-dumps/compute-instances-empty.json \\\n\tjson-dumps/compute-migs-$(ZONE_1).json \\\n\tjson-dumps/compute-migs-$(ZONE_2).json \\\n\tjson-dumps/compute-migs-empty.json \\\n\tjson-dumps/compute-negs-$(ZONE_1).json \\\n\tjson-dumps/compute-negs-$(ZONE_3).json \\\n\tjson-dumps/compute-negs-empty.json \\\n\tjson-dumps/compute-disks-$(ZONE_1).json \\\n\tjson-dumps/compute-disks-$(ZONE_2).json \\\n\tjson-dumps/compute-disks-empty.json \\\n\tjson-dumps/compute-network-default.json \\\n\tjson-dumps/compute-project.json \\\n\tjson-dumps/compute-regions.json \\\n\tjson-dumps/compute-templates.json \\\n\tjson-dumps/compute-zones.json \\\n\tjson-dumps/iam-policy.json \\\n\tjson-dumps/iam-service-accounts.json \\\n\tjson-dumps/monitoring-query.json \\\n\tjson-dumps/project.json \\\n\tjson-dumps/services.json \\\n\tjson-dumps/serial-port-logging-entries-1.json \\\n\tjson-dumps/healthChecks.json \\\n  json-dumps/compute-instances-aggregated.json \\\n\tjson-dumps/compute-igs-aggregated.json \\\n\tjson-dumps/compute-migs-aggregated.json\n\ninclude ../Makefile.inc\n\ndefine MONITORING_QUERY\n{ \\\n  \"query\": \"fetch gce_instance::compute.googleapis.com/instance/uptime_total \\\n  | within 10m \\\n  | group_by [resource.zone, metric.instance_name] \\\n  | group_by 5m, [.mean, .count] \\\n  \" \\\n}\nendef\njson-dumps/monitoring-query.json:\n\t$(CURL) -fsS \\\n\t\t'https://monitoring.googleapis.com/v3/projects/$(PROJECT_ID)/timeSeries:query' \\\n\t\t--header \"Content-Type: application/json\" -X POST \\\n\t\t--data '$(MONITORING_QUERY)' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-serial-port-output-1.json:\n\t$(CURL) -fsS \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$(ZONE_2)/instances/$(INSTANCE_NAME_GCE2)/serialPort?start=-1000000' \\\n\t\t--header \"Content-Type:text/json\" \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/healthChecks.json:\n\t$(CURL) -fsS \\\n\t        'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/global/healthChecks/' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n"
  },
  {
    "path": "test-data/gce1/gce1.tf",
    "content": "/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nresource \"google_compute_instance\" \"gce1\" {\n  project        = google_project.project.project_id\n  depends_on     = [google_project_service.compute]\n  name           = \"gce1\"\n  machine_type   = \"e2-micro\"\n  zone           = \"europe-west4-a\"\n  desired_status = \"RUNNING\"\n  network_interface {\n    network = \"default\"\n  }\n  tags = [\"secured-instance\"]\n  scheduling {\n    preemptible       = true\n    automatic_restart = false\n  }\n  boot_disk {\n    initialize_params {\n      image = data.google_compute_image.windows.self_link\n    }\n  }\n  service_account {\n    email = data.google_compute_default_service_account.default.email\n    scopes = [\n      \"https://www.googleapis.com/auth/devstorage.read_only\",\n      \"https://www.googleapis.com/auth/logging.write\",\n      \"https://www.googleapis.com/auth/monitoring.write\",\n      \"https://www.googleapis.com/auth/service.management.readonly\",\n      \"https://www.googleapis.com/auth/servicecontrol\"\n    ]\n  }\n  labels = {\n    foo = \"bar\"\n  }\n}\n\nresource \"google_compute_instance\" \"gce1_europe-west4-b\" {\n  project        = google_project.project.project_id\n  depends_on     = [google_project_service.compute]\n  name           = \"gce1\"\n  machine_type   = \"f1-micro\"\n  zone           = \"europe-west4-b\"\n  desired_status = \"RUNNING\"\n  network_interface {\n    network = \"default\"\n  }\n  tags = [\"secured-instance\"]\n  scheduling {\n    preemptible       = true\n    automatic_restart = false\n  }\n  boot_disk {\n    initialize_params {\n      image = data.google_compute_image.windows.self_link\n    }\n  }\n  service_account {\n    email = data.google_compute_default_service_account.default.email\n    scopes = [\n      \"https://www.googleapis.com/auth/devstorage.read_only\",\n      \"https://www.googleapis.com/auth/logging.write\",\n      \"https://www.googleapis.com/auth/monitoring.write\",\n      \"https://www.googleapis.com/auth/service.management.readonly\",\n      \"https://www.googleapis.com/auth/servicecontrol\"\n    ]\n  }\n}\n\n# firewall configuration used for connectivity testing\n\nresource \"google_compute_firewall\" \"secured_instance_test_deny\" {\n  name    = \"gce-secured-instance-test-deny\"\n  network = \"default\"\n  project = google_project.project.project_id\n\n  priority = 900\n\n  deny {\n    ports    = [\"22\", \"3389\"]\n    protocol = \"tcp\"\n  }\n\n  source_ranges = [\"0.0.0.0/0\"]\n\n  target_tags = google_compute_instance.gce1.tags\n\n  depends_on = [google_compute_instance.gce1]\n}\n\n# simple unattached bootable disk\nresource \"google_compute_disk\" \"unattached\" {\n  name    = \"unattached-disk\"\n  project = google_project.project.project_id\n\n  type  = \"pd-ssd\"\n  zone  = \"europe-west4-a\"\n  image = \"debian-9-stretch-v20200805\"\n  labels = {\n    environment = \"dev\"\n  }\n  physical_block_size_bytes = 4096\n}\n"
  },
  {
    "path": "test-data/gce1/gce2.tf",
    "content": "/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nresource \"google_compute_instance\" \"gce2\" {\n  project        = google_project.project.project_id\n  depends_on     = [google_project_service.compute]\n  name           = \"gce2\"\n  machine_type   = \"e2-micro\"\n  zone           = \"europe-west4-a\"\n  desired_status = \"RUNNING\"\n  network_interface {\n    network = \"default\"\n  }\n  tags = [\"secured-instance\"]\n  scheduling {\n    preemptible       = true\n    automatic_restart = false\n  }\n  boot_disk {\n    initialize_params {\n      image = data.google_compute_image.cos.self_link\n    }\n  }\n  service_account {\n    email = data.google_compute_default_service_account.default.email\n    scopes = [\n      \"https://www.googleapis.com/auth/devstorage.read_only\",\n      \"https://www.googleapis.com/auth/logging.write\",\n      \"https://www.googleapis.com/auth/monitoring.write\",\n      \"https://www.googleapis.com/auth/service.management.readonly\",\n      \"https://www.googleapis.com/auth/servicecontrol\"\n    ]\n  }\n  metadata = {\n    serial-port-logging-enable = \"false\"\n  }\n}\n"
  },
  {
    "path": "test-data/gce1/gke.tf",
    "content": "/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n# Also include a small GKE cluster to test GKE node detection.\nresource \"google_container_cluster\" \"gke1\" {\n  provider           = google\n  project            = google_project.project.project_id\n  depends_on         = [google_project_service.container]\n  name               = \"gke1\"\n  location           = \"europe-west1-b\"\n  initial_node_count = 4\n  node_config {\n    machine_type = \"e2-small\"\n  }\n  resource_labels = {\n    gcp_doctor_test = \"gke\"\n  }\n}\n"
  },
  {
    "path": "test-data/gce1/healthchecks.tf",
    "content": "# [START cloudloadbalancing_ext_http_gce_instance_health_check]\nresource \"google_compute_health_check\" \"default\" {\n  provider           = google-beta\n  depends_on         = [google_project_service.compute]\n  name               = \"http-basic-check\"\n  project            = google_project.project.project_id\n  check_interval_sec = 5\n  healthy_threshold  = 2\n\n  http_health_check {\n    port               = 80\n    port_specification = \"USE_FIXED_PORT\"\n    proxy_header       = \"NONE\"\n    request_path       = \"/\"\n  }\n\n  log_config {\n    enable = true\n  }\n\n  timeout_sec         = 5\n  unhealthy_threshold = 2\n}\n# [END cloudloadbalancing_ext_http_gce_instance_health_check]\n\n# [START cloudloadbalancing_ext_http_gce_instance_health_check]\nresource \"google_compute_health_check\" \"http-basic-check-2\" {\n  depends_on         = [google_project_service.compute]\n  name               = \"http-basic-check-2\"\n  project            = google_project.project.project_id\n  check_interval_sec = 5\n  healthy_threshold  = 2\n\n  http_health_check {\n    port               = 80\n    port_specification = \"USE_FIXED_PORT\"\n    proxy_header       = \"NONE\"\n    request_path       = \"/\"\n  }\n\n  timeout_sec         = 5\n  unhealthy_threshold = 2\n}\n# [END cloudloadbalancing_ext_http_gce_instance_health_check]\n\n# [START cloudloadbalancing_ext_tcp_gce_instance_health_check]\nresource \"google_compute_health_check\" \"tcp-basic-check-1\" {\n  provider   = google-beta\n  depends_on = [google_project_service.compute]\n  name       = \"tcp-basic-check-1\"\n  project    = google_project.project.project_id\n\n  check_interval_sec = 5\n  timeout_sec        = 5\n\n  tcp_health_check {\n    port = 80\n  }\n\n  log_config {\n    enable = true\n  }\n\n}\n# [END cloudloadbalancing_ext_tcp_gce_instance_health_check]\n"
  },
  {
    "path": "test-data/gce1/ig1.tf",
    "content": "resource \"google_compute_instance_group\" \"instance_group_1\" {\n  project = google_project.project.project_id\n  name    = \"instance-group-1\"\n\n  instances = [\n    google_compute_instance.gce1.id,\n  ]\n\n  named_port {\n    name = \"http\"\n    port = \"8080\"\n  }\n\n  named_port {\n    name = \"http\"\n    port = \"8443\"\n  }\n\n  zone       = \"europe-west4-a\"\n  depends_on = [google_project_service.compute]\n}\n\nresource \"google_compute_instance_group\" \"instance_group_1_europe-west4-b\" {\n  project = google_project.project.project_id\n  name    = \"instance-group-1\"\n\n  instances = [\n    google_compute_instance.gce1_europe-west4-b.id,\n  ]\n\n  named_port {\n    name = \"http\"\n    port = \"8080\"\n  }\n\n  named_port {\n    name = \"http\"\n    port = \"8443\"\n  }\n\n  zone       = \"europe-west4-b\"\n  depends_on = [google_project_service.compute]\n}\n\nresource \"google_compute_instance_group\" \"instance_group_2\" {\n  project = google_project.project.project_id\n  name    = \"instance-group-2\"\n\n  instances = [\n    google_compute_instance.gce2.id,\n  ]\n\n  named_port {\n    name = \"http\"\n    port = \"8080\"\n  }\n\n  named_port {\n    name = \"https\"\n    port = \"8443\"\n  }\n\n  zone       = \"europe-west4-a\"\n  depends_on = [google_project_service.compute]\n}\n"
  },
  {
    "path": "test-data/gce1/json-dumps/compute-disks-europe-west1-b.json",
    "content": "{\n  \"kind\": \"compute#diskList\",\n  \"id\": \"projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/disks\",\n  \"items\": [\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"7550338177783293118\",\n      \"creationTimestamp\": \"2022-05-10T05:28:01.712-07:00\",\n      \"name\": \"gke-gke1-default-pool-5665d797-62lh\",\n      \"sizeGb\": \"100\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/disks/gke-gke1-default-pool-5665d797-62lh\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-12110-gke2000-cos-89-16108-604-19-v220317-c-pre\",\n      \"sourceImageId\": \"8040052912969817984\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/diskTypes/pd-standard\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"UEFI_COMPATIBLE\"\n        },\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        },\n        {\n          \"type\": \"SEV_CAPABLE\"\n        },\n        {\n          \"type\": \"SECURE_BOOT\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2022-05-10T05:28:01.713-07:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances/gke-gke1-default-pool-5665d797-62lh\"\n      ],\n      \"labels\": {\n        \"gcp_doctor_test\": \"gke\",\n        \"goog-gke-node\": \"\"\n      },\n      \"labelFingerprint\": \"mUgogP08_Iw=\",\n      \"licenseCodes\": [\n        \"1001003\",\n        \"1001010\",\n        \"166739712233658766\",\n        \"6880041984096540132\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\"\n    },\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"7424433754121692350\",\n      \"creationTimestamp\": \"2022-05-10T05:28:02.097-07:00\",\n      \"name\": \"gke-gke1-default-pool-5665d797-hz12\",\n      \"sizeGb\": \"100\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/disks/gke-gke1-default-pool-5665d797-hz12\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-12110-gke2000-cos-89-16108-604-19-v220317-c-pre\",\n      \"sourceImageId\": \"8040052912969817984\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/diskTypes/pd-standard\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"UEFI_COMPATIBLE\"\n        },\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        },\n        {\n          \"type\": \"SEV_CAPABLE\"\n        },\n        {\n          \"type\": \"SECURE_BOOT\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2022-05-10T05:28:02.097-07:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances/gke-gke1-default-pool-5665d797-hz12\"\n      ],\n      \"labels\": {\n        \"gcp_doctor_test\": \"gke\",\n        \"goog-gke-node\": \"\"\n      },\n      \"labelFingerprint\": \"mUgogP08_Iw=\",\n      \"licenseCodes\": [\n        \"1001003\",\n        \"1001010\",\n        \"166739712233658766\",\n        \"6880041984096540132\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\"\n    },\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"8594043929682764990\",\n      \"creationTimestamp\": \"2022-05-10T05:28:02.179-07:00\",\n      \"name\": \"gke-gke1-default-pool-5665d797-jd80\",\n      \"sizeGb\": \"100\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/disks/gke-gke1-default-pool-5665d797-jd80\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-12110-gke2000-cos-89-16108-604-19-v220317-c-pre\",\n      \"sourceImageId\": \"8040052912969817984\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/diskTypes/pd-standard\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"UEFI_COMPATIBLE\"\n        },\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        },\n        {\n          \"type\": \"SEV_CAPABLE\"\n        },\n        {\n          \"type\": \"SECURE_BOOT\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2022-05-10T05:28:02.179-07:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances/gke-gke1-default-pool-5665d797-jd80\"\n      ],\n      \"labels\": {\n        \"gcp_doctor_test\": \"gke\",\n        \"goog-gke-node\": \"\"\n      },\n      \"labelFingerprint\": \"mUgogP08_Iw=\",\n      \"licenseCodes\": [\n        \"1001003\",\n        \"1001010\",\n        \"166739712233658766\",\n        \"6880041984096540132\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\"\n    },\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"7088717128623711421\",\n      \"creationTimestamp\": \"2022-05-10T05:28:03.186-07:00\",\n      \"name\": \"gke-gke1-default-pool-5665d797-z9kh\",\n      \"sizeGb\": \"100\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/disks/gke-gke1-default-pool-5665d797-z9kh\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-12110-gke2000-cos-89-16108-604-19-v220317-c-pre\",\n      \"sourceImageId\": \"8040052912969817984\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/diskTypes/pd-standard\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"UEFI_COMPATIBLE\"\n        },\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        },\n        {\n          \"type\": \"SEV_CAPABLE\"\n        },\n        {\n          \"type\": \"SECURE_BOOT\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2022-05-10T05:28:03.187-07:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances/gke-gke1-default-pool-5665d797-z9kh\"\n      ],\n      \"labels\": {\n        \"gcp_doctor_test\": \"gke\",\n        \"goog-gke-node\": \"\"\n      },\n      \"labelFingerprint\": \"mUgogP08_Iw=\",\n      \"licenseCodes\": [\n        \"1001003\",\n        \"1001010\",\n        \"166739712233658766\",\n        \"6880041984096540132\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/disks\"\n}\n"
  },
  {
    "path": "test-data/gce1/json-dumps/compute-disks-europe-west2-b.json",
    "content": "{\n  \"kind\": \"compute#diskList\",\n  \"id\": \"projects/gcpdiag-gce1-aaaa/zones/europe-west2-b/disks\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west2-b/disks\"\n}\n"
  },
  {
    "path": "test-data/gce1/json-dumps/compute-disks-europe-west4-a.json",
    "content": "{\n  \"kind\": \"compute#diskList\",\n  \"id\": \"projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks\",\n  \"items\": [\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"4897755586815845618\",\n      \"creationTimestamp\": \"2022-05-10T05:27:10.646-07:00\",\n      \"name\": \"gce1\",\n      \"sizeGb\": \"32\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/gce1\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/images/windows-server-2019-dc-core-v20220414\",\n      \"sourceImageId\": \"3529112155699095586\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/diskTypes/pd-standard\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2019-dc\",\n        \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-core\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"MULTI_IP_SUBNET\"\n        },\n        {\n          \"type\": \"UEFI_COMPATIBLE\"\n        },\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        },\n        {\n          \"type\": \"WINDOWS\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2022-05-10T05:27:10.647-07:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1\"\n      ],\n      \"labelFingerprint\": \"42WmSpB8rSM=\",\n      \"licenseCodes\": [\n        \"3389558045860892917\",\n        \"1000226\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\"\n    },\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"7436782321968604403\",\n      \"creationTimestamp\": \"2022-05-10T05:27:09.694-07:00\",\n      \"name\": \"gce2\",\n      \"sizeGb\": \"10\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/gce2\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/images/cos-85-13310-1453-5\",\n      \"sourceImageId\": \"1276396551904338204\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/diskTypes/pd-standard\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        },\n        {\n          \"type\": \"SEV_CAPABLE\"\n        },\n        {\n          \"type\": \"UEFI_COMPATIBLE\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2022-05-10T05:27:09.695-07:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2\"\n      ],\n      \"labelFingerprint\": \"42WmSpB8rSM=\",\n      \"licenseCodes\": [\n        \"6880041984096540132\",\n        \"1001010\",\n        \"166739712233658766\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\"\n    },\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"2534143966095860953\",\n      \"creationTimestamp\": \"2022-05-10T05:27:34.871-07:00\",\n      \"name\": \"mig-926f\",\n      \"sizeGb\": \"10\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/mig-926f\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-9-stretch-v20220406\",\n      \"sourceImageId\": \"1994093915008945255\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/diskTypes/pd-standard\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-9-stretch\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2022-05-10T05:27:34.872-07:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-926f\"\n      ],\n      \"labelFingerprint\": \"42WmSpB8rSM=\",\n      \"licenseCodes\": [\n        \"1000205\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\"\n    },\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"3703127063546815705\",\n      \"creationTimestamp\": \"2022-05-10T05:27:35.177-07:00\",\n      \"name\": \"mig-hmnt\",\n      \"sizeGb\": \"10\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/mig-hmnt\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-9-stretch-v20220406\",\n      \"sourceImageId\": \"1994093915008945255\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/diskTypes/pd-standard\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-9-stretch\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2022-05-10T05:27:35.178-07:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-hmnt\"\n      ],\n      \"labelFingerprint\": \"42WmSpB8rSM=\",\n      \"licenseCodes\": [\n        \"1000205\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\"\n    },\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"4944833045469848960\",\n      \"creationTimestamp\": \"2022-05-10T05:32:47.994-07:00\",\n      \"name\": \"unattached-disk\",\n      \"sizeGb\": \"10\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/unattached-disk\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-9-stretch-v20200805\",\n      \"sourceImageId\": \"6709658075886210235\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/diskTypes/pd-ssd\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-9-stretch\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        }\n      ],\n      \"labels\": {\n        \"environment\": \"dev\"\n      },\n      \"labelFingerprint\": \"a6HI36FuYIQ=\",\n      \"licenseCodes\": [\n        \"1000205\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks\"\n}\n"
  },
  {
    "path": "test-data/gce1/json-dumps/compute-effective-firewalls-default.json",
    "content": "{\n  \"firewalls\": [\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"8287498013380842772\",\n      \"creationTimestamp\": \"2022-08-19T08:27:55.939-07:00\",\n      \"name\": \"default-allow-ssh\",\n      \"description\": \"Allow SSH from anywhere\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n      \"priority\": 5,\n      \"destinationRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"22\"\n          ]\n        }\n      ],\n      \"direction\": \"EGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/firewalls/default-allow-ssh\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"4377979765631620372\",\n      \"creationTimestamp\": \"2022-08-19T08:27:55.962-07:00\",\n      \"name\": \"default-allow-rdp\",\n      \"description\": \"Allow RDP from anywhere\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n      \"priority\": 5,\n      \"destinationRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"3389\"\n          ]\n        }\n      ],\n      \"direction\": \"EGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/firewalls/default-allow-rdp\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"5761556003477107473\",\n      \"creationTimestamp\": \"2022-04-26T08:21:34.308-07:00\",\n      \"name\": \"gke-gke1-f36cf6dd-all\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n      \"priority\": 1000,\n      \"sourceRanges\": [\n        \"10.0.0.0/14\"\n      ],\n      \"targetTags\": [\n        \"gke-gke1-f36cf6dd-node\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\"\n        },\n        {\n          \"IPProtocol\": \"udp\"\n        },\n        {\n          \"IPProtocol\": \"icmp\"\n        },\n        {\n          \"IPProtocol\": \"esp\"\n        },\n        {\n          \"IPProtocol\": \"ah\"\n        },\n        {\n          \"IPProtocol\": \"sctp\"\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/firewalls/gke-gke1-f36cf6dd-all\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"2052805937554895685\",\n      \"creationTimestamp\": \"2022-04-26T08:20:10.123-07:00\",\n      \"name\": \"default-allow-icmp\",\n      \"description\": \"Allow ICMP from anywhere\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n      \"priority\": 65534,\n      \"sourceRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"icmp\"\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/firewalls/default-allow-icmp\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"9213276775227175750\",\n      \"creationTimestamp\": \"2022-04-26T08:20:09.988-07:00\",\n      \"name\": \"default-allow-ssh\",\n      \"description\": \"Allow SSH from anywhere\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n      \"priority\": 65534,\n      \"sourceRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"22\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/firewalls/default-allow-ssh\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"5745387556141642506\",\n      \"creationTimestamp\": \"2022-04-26T08:21:09.764-07:00\",\n      \"name\": \"gce-secured-instance-test-deny\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n      \"priority\": 900,\n      \"sourceRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"targetTags\": [\n        \"secured-instance\"\n      ],\n      \"denied\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"22\",\n            \"3389\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/firewalls/gce-secured-instance-test-deny\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"1755568203234652997\",\n      \"creationTimestamp\": \"2022-04-26T08:20:10.056-07:00\",\n      \"name\": \"default-allow-rdp\",\n      \"description\": \"Allow RDP from anywhere\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n      \"priority\": 65534,\n      \"sourceRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"3389\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/firewalls/default-allow-rdp\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"5005632031280182033\",\n      \"creationTimestamp\": \"2022-04-26T08:21:34.485-07:00\",\n      \"name\": \"gke-gke1-f36cf6dd-vms\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n      \"priority\": 1000,\n      \"sourceRanges\": [\n        \"10.128.0.0/9\"\n      ],\n      \"targetTags\": [\n        \"gke-gke1-f36cf6dd-node\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"icmp\"\n        },\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"1-65535\"\n          ]\n        },\n        {\n          \"IPProtocol\": \"udp\",\n          \"ports\": [\n            \"1-65535\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/firewalls/gke-gke1-f36cf6dd-vms\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"7319950303754040081\",\n      \"creationTimestamp\": \"2022-04-26T08:21:34.304-07:00\",\n      \"name\": \"gke-gke1-f36cf6dd-ssh\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n      \"priority\": 1000,\n      \"sourceRanges\": [\n        \"35.205.188.165/32\"\n      ],\n      \"targetTags\": [\n        \"gke-gke1-f36cf6dd-node\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"22\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/firewalls/gke-gke1-f36cf6dd-ssh\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"3839435255207801670\",\n      \"creationTimestamp\": \"2022-04-26T08:20:09.920-07:00\",\n      \"name\": \"default-allow-internal\",\n      \"description\": \"Allow internal traffic on the default network\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n      \"priority\": 65534,\n      \"sourceRanges\": [\n        \"10.128.0.0/9\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"0-65535\"\n          ]\n        },\n        {\n          \"IPProtocol\": \"udp\",\n          \"ports\": [\n            \"0-65535\"\n          ]\n        },\n        {\n          \"IPProtocol\": \"icmp\"\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/firewalls/default-allow-internal\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"2293043103564898734\",\n      \"creationTimestamp\": \"2023-03-08T06:44:17.669-08:00\",\n      \"name\": \"fw-test-1000\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n      \"priority\": 1,\n      \"destinationRanges\": [\n        \"35.190.247.13/32\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"1688\"\n          ]\n        }\n      ],\n      \"direction\": \"EGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/firewalls/fw-test-1000\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"8914053335820440597\",\n      \"creationTimestamp\": \"2021-06-29T07:15:22.403-07:00\",\n      \"name\": \"fw-test-925\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n      \"priority\": 2,\n      \"destinationRanges\": [\n        \"142.250.125.95/32\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"all\"\n        }\n      ],\n      \"direction\": \"EGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/firewalls/fw-test-925\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"18379809113245518637\",\n      \"creationTimestamp\": \"2023-03-14T07:46:26.578-07:00\",\n      \"name\": \"fw-test-1050\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n      \"priority\": 40,\n      \"destinationRanges\": [\n        \"45.100.0.0/24\"\n      ],\n      \"sourceTags\": [\n        \"foo\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"1234\",\n            \"1000-2000\",\n            \"2033\"\n          ]\n        }\n      ],\n      \"direction\": \"EGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/firewalls/fw-test-1050\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"18379809113245518637\",\n      \"creationTimestamp\": \"2023-03-14T07:46:26.578-07:00\",\n      \"name\": \"fw-test-1025\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n      \"priority\": 45,\n      \"destinationRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"targetTags\": [\n        \"bar\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"all\"\n        }\n      ],\n      \"direction\": \"EGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/firewalls/fw-test-1025\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"1837980911849518637\",\n      \"creationTimestamp\": \"2023-03-14T07:46:26.578-07:00\",\n      \"name\": \"fw-test-950\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n      \"priority\": 50,\n      \"destinationRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"denied\": [\n        {\n          \"IPProtocol\": \"all\"\n        }\n      ],\n      \"direction\": \"EGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/firewalls/fw-test-950\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"2493080101642798591\",\n      \"creationTimestamp\": \"2021-12-06T08:32:16.212-08:00\",\n      \"name\": \"fw-test-1075\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n      \"priority\": 45,\n      \"sourceServiceAccounts\": [\n        \"service-12340002@compute-system.iam.gserviceaccount.com\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"4000\"\n          ]\n        }\n      ],\n      \"direction\": \"EGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/firewalls/fw-test-1075\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"2493080101642798591\",\n      \"creationTimestamp\": \"2021-12-06T08:32:16.212-08:00\",\n      \"name\": \"fw-test-1065\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n      \"priority\": 45,\n      \"targetServiceAccounts\": [\n        \"service-12340002@compute-system.iam.gserviceaccount.com\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"4000\"\n          ]\n        }\n      ],\n      \"direction\": \"EGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/firewalls/fw-test-1065\"\n    }\n  ],\n  \"firewallPolicys\": [\n    {\n      \"name\": \"856256210981\",\n      \"type\": \"HIERARCHY\",\n      \"shortName\": \"parent-folder-policy\",\n      \"displayName\": \"parent-folder-policy\",\n      \"rules\": [\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 30,\n          \"match\": {\n            \"destIpRanges\": [\n              \"10.101.0.1/32\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"tcp\",\n                \"ports\": [\n                  \"2000-2002\"\n                ]\n              }\n            ]\n          },\n          \"action\": \"allow\",\n          \"direction\": \"EGRESS\"\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 2147483644,\n          \"match\": {\n            \"destIpRanges\": [\n              \"::/0\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"EGRESS\"\n        }\n      ]\n    },\n    {\n      \"name\": \"203310830110\",\n      \"type\": \"HIERARCHY\",\n      \"shortName\": \"sub-folder-policy\",\n      \"displayName\": \"sub-folder-policy\",\n      \"rules\": [\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 25,\n          \"match\": {\n            \"destIpRanges\": [\n              \"10.102.0.1/32\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"allow\",\n          \"direction\": \"EGRESS\",\n          \"targetServiceAccounts\": [\n            \"service-12340002@compute-system.iam.gserviceaccount.com\"\n          ]\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 25,\n          \"match\": {\n            \"destIpRanges\": [\n              \"10.102.0.1/32\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"tcp\",\n                \"ports\": [\n                  \"2003\"\n                ]\n              }\n            ]\n          },\n          \"action\": \"allow\",\n          \"direction\": \"EGRESS\"\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gce1/json-dumps/compute-igs-aggregated.json",
    "content": "{\n  \"kind\": \"compute#instanceGroupAggregatedList\",\n  \"id\": \"projects/gcpdiag-gce1-aaaa/aggregated/instanceGroups\",\n  \"items\": {\n    \"regions/us-central1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-central1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-central1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-central2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-central2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-central2\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-west1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-west1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-west1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west1\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-east1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/asia-east1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-east1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-east1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-east1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-east1\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-northeast1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/asia-northeast1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-northeast1\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-southeast1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/asia-southeast1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-southeast1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-east4\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-east4'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-east4\"\n          }\n        ]\n      }\n    },\n    \"regions/australia-southeast1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/australia-southeast1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/australia-southeast1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-west2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west2\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west3\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-west3'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west3\"\n          }\n        ]\n      }\n    },\n    \"regions/southamerica-east1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/southamerica-east1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/southamerica-east1\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-south1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/asia-south1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-south1\"\n          }\n        ]\n      }\n    },\n    \"regions/northamerica-northeast1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/northamerica-northeast1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/northamerica-northeast1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west4\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-west4'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west4\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-north1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-north1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-north1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-west2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-west2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west2\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-east2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/asia-east2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-east2\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west6\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-west6'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west6\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-northeast2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/asia-northeast2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-northeast2\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-northeast3\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/asia-northeast3'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-northeast3\"\n          }\n        ]\n      }\n    },\n    \"regions/us-west3\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-west3'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west3\"\n          }\n        ]\n      }\n    },\n    \"regions/us-west4\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-west4'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west4\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-southeast2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/asia-southeast2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-southeast2\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-central2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-central2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-central2\"\n          }\n        ]\n      }\n    },\n    \"regions/northamerica-northeast2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/northamerica-northeast2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/northamerica-northeast2\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-south2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/asia-south2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-south2\"\n          }\n        ]\n      }\n    },\n    \"regions/australia-southeast2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/australia-southeast2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/australia-southeast2\"\n          }\n        ]\n      }\n    },\n    \"regions/southamerica-west1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/southamerica-west1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/southamerica-west1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-east7\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-east7'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-east7\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west8\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-west8'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west8\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west9\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-west9'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west9\"\n          }\n        ]\n      }\n    },\n    \"regions/us-east5\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-east5'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-east5\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-southwest1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-southwest1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-southwest1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-south1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-south1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-south1\"\n          }\n        ]\n      }\n    },\n    \"regions/me-west1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/me-west1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/me-west1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west12\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-west12'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west12\"\n          }\n        ]\n      }\n    },\n    \"regions/me-central1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/me-central1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/me-central1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west10\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-west10'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west10\"\n          }\n        ]\n      }\n    },\n    \"regions/me-central2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/me-central2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/me-central2\"\n          }\n        ]\n      }\n    },\n    \"regions/africa-south1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/africa-south1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/africa-south1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-west8\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-west8'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west8\"\n          }\n        ]\n      }\n    },\n    \"regions/northamerica-south1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/northamerica-south1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/northamerica-south1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-north2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-north2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-north2\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-central1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-central1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-central1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central1-f\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-central1-f'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central1-f\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-central2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-central2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-central2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central2-d\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-central2-d'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central2-d\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west1-d\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west1-d'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west1-d\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-east1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-east1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-east1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east1-d\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east1-d'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east1-d\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-southeast1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-southeast1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-southeast1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east4-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east4-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east4-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east4-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east4-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east4-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east4-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east4-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east4-c\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/australia-southeast1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/australia-southeast1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/australia-southeast1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west3-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west3-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west3-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west3-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west3-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west3-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west3-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west3-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west3-b\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-east1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/southamerica-east1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-east1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-east1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/southamerica-east1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-east1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-east1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/southamerica-east1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-east1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-south1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-south1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-south1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-northeast1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-northeast1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-northeast1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west4-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west4-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west4-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west4-b\": {\n      \"instanceGroups\": [\n        {\n          \"kind\": \"compute#instanceGroup\",\n          \"id\": \"8902174216398213342\",\n          \"creationTimestamp\": \"2025-02-05T01:24:01.563-08:00\",\n          \"name\": \"instance-group-1\",\n          \"description\": \"\",\n          \"namedPorts\": [\n            {\n              \"name\": \"http\",\n              \"port\": 8080\n            },\n            {\n              \"name\": \"http\",\n              \"port\": 8443\n            }\n          ],\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n          \"fingerprint\": \"bPhGeNqJuxo=\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-b\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instanceGroups/instance-group-1\",\n          \"size\": 1,\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default\"\n        }\n      ]\n    },\n    \"zones/europe-west4-a\": {\n      \"instanceGroups\": [\n        {\n          \"kind\": \"compute#instanceGroup\",\n          \"id\": \"5126889459178967262\",\n          \"creationTimestamp\": \"2025-02-05T01:24:01.313-08:00\",\n          \"name\": \"instance-group-1\",\n          \"description\": \"\",\n          \"namedPorts\": [\n            {\n              \"name\": \"http\",\n              \"port\": 8080\n            },\n            {\n              \"name\": \"http\",\n              \"port\": 8443\n            }\n          ],\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n          \"fingerprint\": \"bPhGeNqJuxo=\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups/instance-group-1\",\n          \"size\": 1,\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default\"\n        },\n        {\n          \"kind\": \"compute#instanceGroup\",\n          \"id\": \"685289583101776064\",\n          \"creationTimestamp\": \"2025-02-05T01:23:59.990-08:00\",\n          \"name\": \"instance-group-2\",\n          \"description\": \"\",\n          \"namedPorts\": [\n            {\n              \"name\": \"http\",\n              \"port\": 8080\n            },\n            {\n              \"name\": \"https\",\n              \"port\": 8443\n            }\n          ],\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n          \"fingerprint\": \"OMWWjJuNHl0=\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups/instance-group-2\",\n          \"size\": 1,\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default\"\n        },\n        {\n          \"kind\": \"compute#instanceGroup\",\n          \"id\": \"4897701714977525962\",\n          \"creationTimestamp\": \"2025-02-05T01:23:49.664-08:00\",\n          \"name\": \"mig\",\n          \"description\": \"This instance group is controlled by Instance Group Manager 'mig'. To modify instances in this group, use the Instance Group Manager API: https://cloud.google.com/compute/docs/reference/latest/instanceGroupManagers\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n          \"fingerprint\": \"42WmSpB8rSM=\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups/mig\",\n          \"size\": 2,\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default\"\n        }\n      ]\n    },\n    \"zones/europe-north1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-north1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-north1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-north1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-east2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-east2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-east2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west6-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west6-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west6-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west6-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west6-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west6-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west6-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west6-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west6-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast3-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast3-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast3-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast3-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast3-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast3-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast3-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast3-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast3-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west3-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west3-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west3-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west3-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west3-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west3-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west3-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west3-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west3-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west4-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west4-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west4-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west4-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west4-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west4-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west4-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west4-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west4-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-southeast2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-southeast2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-southeast2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-central2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-central2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-central2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-central2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-central2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-central2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-central2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-central2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-central2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-northeast2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-northeast2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-northeast2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-south2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-south2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-south2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/australia-southeast2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/australia-southeast2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/australia-southeast2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-west1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/southamerica-west1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-west1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-west1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/southamerica-west1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-west1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-west1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/southamerica-west1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-west1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east7-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east7-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east7-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east7-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east7-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east7-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east7-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east7-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east7-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west8-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west8-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west8-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west8-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west8-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west8-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west8-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west8-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west8-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west9-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west9-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west9-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west9-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west9-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west9-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west9-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west9-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west9-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east5-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east5-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east5-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east5-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east5-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east5-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east5-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east5-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east5-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-southwest1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-southwest1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-southwest1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-southwest1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-southwest1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-southwest1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-southwest1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-southwest1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-southwest1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-south1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-south1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-south1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-south1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-south1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-south1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-south1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-south1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-south1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-west1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-west1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-west1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-west1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-west1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-west1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/me-west1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-west1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-west1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west12-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west12-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west12-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west12-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west12-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west12-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west12-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west12-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west12-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-central1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-central1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-central1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west10-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west10-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west10-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west10-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west10-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west10-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west10-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west10-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west10-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-central2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-central2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-central2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/africa-south1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/africa-south1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/africa-south1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/africa-south1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/africa-south1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/africa-south1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/africa-south1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/africa-south1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/africa-south1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west8-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west8-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west8-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west8-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west8-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west8-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west8-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west8-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west8-b\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-south1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-south1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-south1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-south1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-south1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-south1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-south1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-south1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-south1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-north2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-north2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-north2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north2-b\"\n          }\n        ]\n      }\n    }\n  },\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/aggregated/instanceGroups\"\n}\n"
  },
  {
    "path": "test-data/gce1/json-dumps/compute-igs-europe-west1-b.json",
    "content": "{\n  \"kind\": \"compute#instanceGroupList\",\n  \"id\": \"projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instanceGroups\",\n  \"items\": [\n    {\n      \"kind\": \"compute#instanceGroup\",\n      \"id\": \"4752839275668943076\",\n      \"creationTimestamp\": \"2022-04-26T08:21:47.107-07:00\",\n      \"name\": \"gke-gke1-default-pool-35923fbc-grp\",\n      \"description\": \"This instance group is controlled by Instance Group Manager 'gke-gke1-default-pool-35923fbc-grp'. To modify instances in this group, use the Instance Group Manager API: https://cloud.google.com/compute/docs/reference/latest/instanceGroupManagers\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n      \"fingerprint\": \"42WmSpB8rSM=\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instanceGroups/gke-gke1-default-pool-35923fbc-grp\",\n      \"size\": 4,\n      \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west1/subnetworks/default\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instanceGroups\"\n}\n"
  },
  {
    "path": "test-data/gce1/json-dumps/compute-igs-europe-west2-b.json",
    "content": "{\n  \"kind\": \"compute#instanceGroupList\",\n  \"id\": \"projects/gcpdiag-gce1-aaaa/zones/europe-west2-b/instanceGroups\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west2-b/instanceGroups\"\n}\n"
  },
  {
    "path": "test-data/gce1/json-dumps/compute-igs-europe-west4-a.json",
    "content": "{\n  \"kind\": \"compute#instanceGroupList\",\n  \"id\": \"projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups\",\n  \"items\": [\n    {\n      \"kind\": \"compute#instanceGroup\",\n      \"id\": \"3671191198561055498\",\n      \"creationTimestamp\": \"2022-04-26T08:21:09.998-07:00\",\n      \"name\": \"instance-group-1\",\n      \"description\": \"\",\n      \"namedPorts\": [\n        {\n          \"name\": \"http\",\n          \"port\": 8080\n        },\n        {\n          \"name\": \"http\",\n          \"port\": 8443\n        }\n      ],\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n      \"fingerprint\": \"bPhGeNqJuxo=\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups/instance-group-1\",\n      \"size\": 1,\n      \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default\"\n    },\n    {\n      \"kind\": \"compute#instanceGroup\",\n      \"id\": \"2978499701990863624\",\n      \"creationTimestamp\": \"2022-04-26T08:21:11.396-07:00\",\n      \"name\": \"instance-group-2\",\n      \"description\": \"\",\n      \"namedPorts\": [\n        {\n          \"name\": \"http\",\n          \"port\": 8080\n        },\n        {\n          \"name\": \"https\",\n          \"port\": 8443\n        }\n      ],\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n      \"fingerprint\": \"OMWWjJuNHl0=\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups/instance-group-2\",\n      \"size\": 1,\n      \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default\"\n    },\n    {\n      \"kind\": \"compute#instanceGroup\",\n      \"id\": \"4528539620862178056\",\n      \"creationTimestamp\": \"2022-04-26T08:21:11.080-07:00\",\n      \"name\": \"mig\",\n      \"description\": \"This instance group is controlled by Instance Group Manager 'mig'. To modify instances in this group, use the Instance Group Manager API: https://cloud.google.com/compute/docs/reference/latest/instanceGroupManagers\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n      \"fingerprint\": \"42WmSpB8rSM=\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups/mig\",\n      \"size\": 2,\n      \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups\"\n}\n"
  },
  {
    "path": "test-data/gce1/json-dumps/compute-igs-europe-west4-b.json",
    "content": "{\n  \"kind\": \"compute#instanceGroupList\",\n  \"id\": \"projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instanceGroups\",\n  \"items\": [\n    {\n      \"kind\": \"compute#instanceGroup\",\n      \"id\": \"3498839267610641831\",\n      \"creationTimestamp\": \"2024-08-07T06:48:56.678-07:00\",\n      \"name\": \"instance-group-1\",\n      \"description\": \"\",\n      \"namedPorts\": [\n        {\n          \"name\": \"http\",\n          \"port\": 8080\n        },\n        {\n          \"name\": \"http\",\n          \"port\": 8443\n        }\n      ],\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n      \"fingerprint\": \"bPhGeNqJuxo=\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-b\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instanceGroups/instance-group-1\",\n      \"size\": 1,\n      \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instanceGroups\"\n}\n"
  },
  {
    "path": "test-data/gce1/json-dumps/compute-instances-aggregated.json",
    "content": "{\n  \"kind\": \"compute#instanceAggregatedList\",\n  \"id\": \"projects/gcpdiag-gce1-aaaa/aggregated/instances\",\n  \"items\": {\n    \"zones/us-central1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-central1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-central1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-central1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central1-f\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-central1-f'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central1-f\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-central2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-central2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-central2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central2-d\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-central2-d'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central2-d\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west4-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west4-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west4-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west1-d\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west1-d'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west1-d\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-east1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-east1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-east1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east1-d\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east1-d'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east1-d\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-southeast1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-southeast1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-southeast1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east4-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east4-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east4-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east4-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east4-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east4-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east4-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east4-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east4-c\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/australia-southeast1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/australia-southeast1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/australia-southeast1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west3-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west3-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west3-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west3-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west3-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west3-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west3-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west3-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west3-b\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-east1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/southamerica-east1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-east1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-east1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/southamerica-east1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-east1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-east1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/southamerica-east1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-east1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-south1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-south1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-south1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-northeast1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-northeast1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-northeast1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west4-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west4-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west4-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west4-b\": {\n      \"instances\": [\n        {\n          \"kind\": \"compute#instance\",\n          \"id\": \"5259249240161292536\",\n          \"creationTimestamp\": \"2025-02-05T01:23:35.933-08:00\",\n          \"name\": \"gce1\",\n          \"tags\": {\n            \"items\": [\n              \"secured-instance\"\n            ],\n            \"fingerprint\": \"OcWEGzD6ieA=\"\n          },\n          \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/machineTypes/f1-micro\",\n          \"status\": \"RUNNING\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-b\",\n          \"canIpForward\": false,\n          \"networkInterfaces\": [\n            {\n              \"kind\": \"compute#networkInterface\",\n              \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n              \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default\",\n              \"networkIP\": \"10.164.0.3\",\n              \"name\": \"nic0\",\n              \"fingerprint\": \"eM7_FmHujyU=\",\n              \"stackType\": \"IPV4_ONLY\"\n            }\n          ],\n          \"disks\": [\n            {\n              \"kind\": \"compute#attachedDisk\",\n              \"type\": \"PERSISTENT\",\n              \"mode\": \"READ_WRITE\",\n              \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/disks/gce1\",\n              \"deviceName\": \"persistent-disk-0\",\n              \"index\": 0,\n              \"boot\": true,\n              \"autoDelete\": true,\n              \"licenses\": [\n                \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2019-dc\",\n                \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-core\"\n              ],\n              \"interface\": \"SCSI\",\n              \"guestOsFeatures\": [\n                {\n                  \"type\": \"MULTI_IP_SUBNET\"\n                },\n                {\n                  \"type\": \"UEFI_COMPATIBLE\"\n                },\n                {\n                  \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n                },\n                {\n                  \"type\": \"GVNIC\"\n                },\n                {\n                  \"type\": \"WINDOWS\"\n                }\n              ],\n              \"diskSizeGb\": \"32\",\n              \"architecture\": \"X86_64\"\n            }\n          ],\n          \"metadata\": {\n            \"kind\": \"compute#metadata\",\n            \"fingerprint\": \"b5_sNtXJEts=\"\n          },\n          \"serviceAccounts\": [\n            {\n              \"email\": \"12340001-compute@developer.gserviceaccount.com\",\n              \"scopes\": [\n                \"https://www.googleapis.com/auth/devstorage.read_only\",\n                \"https://www.googleapis.com/auth/logging.write\",\n                \"https://www.googleapis.com/auth/monitoring.write\",\n                \"https://www.googleapis.com/auth/service.management.readonly\",\n                \"https://www.googleapis.com/auth/servicecontrol\"\n              ]\n            }\n          ],\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1\",\n          \"scheduling\": {\n            \"onHostMaintenance\": \"TERMINATE\",\n            \"automaticRestart\": false,\n            \"preemptible\": true\n          },\n          \"cpuPlatform\": \"Intel Skylake\",\n          \"labels\": {\n            \"goog-terraform-provisioned\": \"true\"\n          },\n          \"labelFingerprint\": \"vezUS-42LLM=\",\n          \"startRestricted\": false,\n          \"deletionProtection\": false,\n          \"shieldedInstanceConfig\": {\n            \"enableSecureBoot\": false,\n            \"enableVtpm\": true,\n            \"enableIntegrityMonitoring\": true\n          },\n          \"shieldedInstanceIntegrityPolicy\": {\n            \"updateAutoLearnPolicy\": true\n          },\n          \"fingerprint\": \"zF_QjmTDeU8=\",\n          \"lastStartTimestamp\": \"2025-02-05T01:23:43.722-08:00\",\n          \"satisfiesPzi\": true\n        }\n      ]\n    },\n    \"zones/europe-west4-a\": {\n      \"instances\": [\n        {\n          \"kind\": \"compute#instance\",\n          \"id\": \"7276406499315716343\",\n          \"creationTimestamp\": \"2025-02-05T01:23:36.842-08:00\",\n          \"name\": \"gce1\",\n          \"tags\": {\n            \"items\": [\n              \"secured-instance\"\n            ],\n            \"fingerprint\": \"OcWEGzD6ieA=\"\n          },\n          \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/machineTypes/e2-micro\",\n          \"status\": \"RUNNING\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a\",\n          \"canIpForward\": false,\n          \"networkInterfaces\": [\n            {\n              \"kind\": \"compute#networkInterface\",\n              \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n              \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default\",\n              \"networkIP\": \"10.164.0.4\",\n              \"name\": \"nic0\",\n              \"fingerprint\": \"O_a09qdAaTE=\",\n              \"stackType\": \"IPV4_ONLY\"\n            }\n          ],\n          \"disks\": [\n            {\n              \"kind\": \"compute#attachedDisk\",\n              \"type\": \"PERSISTENT\",\n              \"mode\": \"READ_WRITE\",\n              \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/gce1\",\n              \"deviceName\": \"persistent-disk-0\",\n              \"index\": 0,\n              \"boot\": true,\n              \"autoDelete\": true,\n              \"licenses\": [\n                \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2019-dc\",\n                \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-core\"\n              ],\n              \"interface\": \"SCSI\",\n              \"guestOsFeatures\": [\n                {\n                  \"type\": \"MULTI_IP_SUBNET\"\n                },\n                {\n                  \"type\": \"UEFI_COMPATIBLE\"\n                },\n                {\n                  \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n                },\n                {\n                  \"type\": \"GVNIC\"\n                },\n                {\n                  \"type\": \"WINDOWS\"\n                }\n              ],\n              \"diskSizeGb\": \"32\",\n              \"architecture\": \"X86_64\"\n            }\n          ],\n          \"metadata\": {\n            \"kind\": \"compute#metadata\",\n            \"fingerprint\": \"b5_sNtXJEts=\"\n          },\n          \"serviceAccounts\": [\n            {\n              \"email\": \"12340001-compute@developer.gserviceaccount.com\",\n              \"scopes\": [\n                \"https://www.googleapis.com/auth/devstorage.read_only\",\n                \"https://www.googleapis.com/auth/logging.write\",\n                \"https://www.googleapis.com/auth/monitoring.write\",\n                \"https://www.googleapis.com/auth/service.management.readonly\",\n                \"https://www.googleapis.com/auth/servicecontrol\"\n              ]\n            }\n          ],\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1\",\n          \"scheduling\": {\n            \"onHostMaintenance\": \"TERMINATE\",\n            \"automaticRestart\": false,\n            \"preemptible\": true\n          },\n          \"cpuPlatform\": \"Intel Broadwell\",\n          \"labels\": {\n            \"foo\": \"bar\"\n          },\n          \"labelFingerprint\": \"cLOO6l7pJAo=\",\n          \"startRestricted\": false,\n          \"deletionProtection\": false,\n          \"shieldedInstanceConfig\": {\n            \"enableSecureBoot\": false,\n            \"enableVtpm\": true,\n            \"enableIntegrityMonitoring\": true\n          },\n          \"shieldedInstanceIntegrityPolicy\": {\n            \"updateAutoLearnPolicy\": true\n          },\n          \"fingerprint\": \"W9T2Bn2xXbE=\",\n          \"lastStartTimestamp\": \"2025-02-05T01:23:46.347-08:00\",\n          \"satisfiesPzi\": true\n        },\n        {\n          \"kind\": \"compute#instance\",\n          \"id\": \"1010101011\",\n          \"creationTimestamp\": \"2025-02-05T01:23:35.626-08:00\",\n          \"name\": \"gce2\",\n          \"tags\": {\n            \"items\": [\n              \"secured-instance\"\n            ],\n            \"fingerprint\": \"OcWEGzD6ieA=\"\n          },\n          \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/machineTypes/e2-micro\",\n          \"status\": \"RUNNING\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a\",\n          \"canIpForward\": false,\n          \"networkInterfaces\": [\n            {\n              \"kind\": \"compute#networkInterface\",\n              \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n              \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default\",\n              \"networkIP\": \"10.164.0.2\",\n              \"name\": \"nic0\",\n              \"fingerprint\": \"AvD0StiibEE=\",\n              \"stackType\": \"IPV4_ONLY\"\n            }\n          ],\n          \"disks\": [\n            {\n              \"kind\": \"compute#attachedDisk\",\n              \"type\": \"PERSISTENT\",\n              \"mode\": \"READ_WRITE\",\n              \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/gce2\",\n              \"deviceName\": \"persistent-disk-0\",\n              \"index\": 0,\n              \"boot\": true,\n              \"autoDelete\": true,\n              \"licenses\": [\n                \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2019-dc\",\n                \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-core\"\n              ],\n              \"interface\": \"SCSI\",\n              \"guestOsFeatures\": [\n                {\n                  \"type\": \"MULTI_IP_SUBNET\"\n                },\n                {\n                  \"type\": \"UEFI_COMPATIBLE\"\n                },\n                {\n                  \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n                },\n                {\n                  \"type\": \"GVNIC\"\n                },\n                {\n                  \"type\": \"WINDOWS\"\n                }\n              ],\n              \"diskSizeGb\": \"32\",\n              \"architecture\": \"X86_64\"\n            }\n          ],\n          \"metadata\": {\n            \"kind\": \"compute#metadata\",\n            \"fingerprint\": \"xkTdem40Dus=\",\n            \"items\": [\n              {\n                \"key\": \"serial-port-logging-enable\",\n                \"value\": \"false\"\n              }\n            ]\n          },\n          \"serviceAccounts\": [\n            {\n              \"email\": \"12340001-compute@developer.gserviceaccount.com\",\n              \"scopes\": [\n                \"https://www.googleapis.com/auth/devstorage.read_only\",\n                \"https://www.googleapis.com/auth/logging.write\",\n                \"https://www.googleapis.com/auth/monitoring.write\",\n                \"https://www.googleapis.com/auth/service.management.readonly\",\n                \"https://www.googleapis.com/auth/servicecontrol\"\n              ]\n            }\n          ],\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2\",\n          \"scheduling\": {\n            \"onHostMaintenance\": \"TERMINATE\",\n            \"automaticRestart\": false,\n            \"preemptible\": true\n          },\n          \"cpuPlatform\": \"Intel Broadwell\",\n          \"labels\": {\n            \"goog-terraform-provisioned\": \"true\"\n          },\n          \"labelFingerprint\": \"vezUS-42LLM=\",\n          \"startRestricted\": false,\n          \"deletionProtection\": false,\n          \"shieldedInstanceConfig\": {\n            \"enableSecureBoot\": false,\n            \"enableVtpm\": true,\n            \"enableIntegrityMonitoring\": true\n          },\n          \"shieldedInstanceIntegrityPolicy\": {\n            \"updateAutoLearnPolicy\": true\n          },\n          \"fingerprint\": \"vhIIJ6NdgqM=\",\n          \"lastStartTimestamp\": \"2025-02-05T01:23:43.592-08:00\",\n          \"satisfiesPzi\": true\n        },\n        {\n          \"kind\": \"compute#instance\",\n          \"id\": \"4335690972119601373\",\n          \"creationTimestamp\": \"2025-02-05T01:24:02.564-08:00\",\n          \"name\": \"mig-bzvx\",\n          \"tags\": {\n            \"fingerprint\": \"42WmSpB8rSM=\"\n          },\n          \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/machineTypes/e2-micro\",\n          \"status\": \"RUNNING\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a\",\n          \"networkInterfaces\": [\n            {\n              \"kind\": \"compute#networkInterface\",\n              \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n              \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default\",\n              \"networkIP\": \"10.164.0.6\",\n              \"name\": \"nic0\",\n              \"fingerprint\": \"RVABl1VJZQI=\",\n              \"stackType\": \"IPV4_ONLY\"\n            }\n          ],\n          \"disks\": [\n            {\n              \"kind\": \"compute#attachedDisk\",\n              \"type\": \"PERSISTENT\",\n              \"mode\": \"READ_WRITE\",\n              \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/mig-bzvx\",\n              \"deviceName\": \"persistent-disk-0\",\n              \"index\": 0,\n              \"boot\": true,\n              \"autoDelete\": true,\n              \"licenses\": [\n                \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye\"\n              ],\n              \"interface\": \"SCSI\",\n              \"guestOsFeatures\": [\n                {\n                  \"type\": \"UEFI_COMPATIBLE\"\n                },\n                {\n                  \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n                },\n                {\n                  \"type\": \"GVNIC\"\n                }\n              ],\n              \"diskSizeGb\": \"10\",\n              \"architecture\": \"X86_64\"\n            }\n          ],\n          \"metadata\": {\n            \"kind\": \"compute#metadata\",\n            \"fingerprint\": \"QiZsHXut0E8=\",\n            \"items\": [\n              {\n                \"key\": \"instance-template\",\n                \"value\": \"projects/12340001/global/instanceTemplates/mig-template\"\n              },\n              {\n                \"key\": \"created-by\",\n                \"value\": \"projects/12340001/zones/europe-west4-a/instanceGroupManagers/mig\"\n              }\n            ]\n          },\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-bzvx\",\n          \"scheduling\": {\n            \"onHostMaintenance\": \"MIGRATE\",\n            \"automaticRestart\": true,\n            \"preemptible\": false,\n            \"provisioningModel\": \"STANDARD\"\n          },\n          \"cpuPlatform\": \"Intel Broadwell\",\n          \"labels\": {\n            \"gcpdiag-test\": \"mig\"\n          },\n          \"labelFingerprint\": \"vezUS-42LLM=\",\n          \"startRestricted\": false,\n          \"deletionProtection\": false,\n          \"shieldedInstanceConfig\": {\n            \"enableSecureBoot\": false,\n            \"enableVtpm\": true,\n            \"enableIntegrityMonitoring\": true\n          },\n          \"shieldedInstanceIntegrityPolicy\": {\n            \"updateAutoLearnPolicy\": true\n          },\n          \"fingerprint\": \"Cw2v9zg_VlY=\",\n          \"lastStartTimestamp\": \"2025-02-05T01:24:11.476-08:00\",\n          \"satisfiesPzi\": true\n        },\n        {\n          \"canIpForward\": true,\n          \"cpuPlatform\": \"Intel Broadwell\",\n          \"creationTimestamp\": \"2022-04-26T08:21:56.296-07:00\",\n          \"deletionProtection\": false,\n          \"disks\": [\n            {\n              \"autoDelete\": true,\n              \"boot\": true,\n              \"deviceName\": \"persistent-disk-0\",\n              \"diskSizeGb\": \"100\",\n              \"guestOsFeatures\": [\n                {\n                  \"type\": \"UEFI_COMPATIBLE\"\n                },\n                {\n                  \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n                },\n                {\n                  \"type\": \"SEV_CAPABLE\"\n                },\n                {\n                  \"type\": \"SECURE_BOOT\"\n                }\n              ],\n              \"index\": 0,\n              \"interface\": \"SCSI\",\n              \"kind\": \"compute#attachedDisk\",\n              \"licenses\": [\n                \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node\",\n                \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n                \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\",\n                \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\"\n              ],\n              \"mode\": \"READ_WRITE\",\n              \"shieldedInstanceInitialState\": {\n                \"dbs\": [\n                  {\n                    \"content\": \"REDACTED\",\n                    \"fileType\": \"X509\"\n                  }\n                ],\n                \"dbxs\": [\n                  {\n                    \"content\": \"REDACTED\",\n                    \"fileType\": \"X509\"\n                  },\n                  {\n                    \"content\": \"REDACTED\",\n                    \"fileType\": \"X509\"\n                  },\n                  {\n                    \"content\": \"REDACTED\",\n                    \"fileType\": \"X509\"\n                  },\n                  {\n                    \"content\": \"REDACTED\",\n                    \"fileType\": \"X509\"\n                  }\n                ],\n                \"keks\": [\n                  {\n                    \"content\": \"REDACTED\",\n                    \"fileType\": \"X509\"\n                  }\n                ],\n                \"pk\": {\n                  \"content\": \"REDACTED\",\n                  \"fileType\": \"X509\"\n                }\n              },\n              \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/gke-gke1-default-pool-35923fbc-2xxp\",\n              \"type\": \"PERSISTENT\"\n            }\n          ],\n          \"fingerprint\": \"REDACTED\",\n          \"id\": \"1470007467084984573\",\n          \"kind\": \"compute#instance\",\n          \"labelFingerprint\": \"mUgogP08_Iw=\",\n          \"labels\": {\n            \"gcp_doctor_test\": \"gke\",\n            \"goog-gke-node\": \"\"\n          },\n          \"lastStartTimestamp\": \"2022-04-26T08:22:05.407-07:00\",\n          \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/machineTypes/e2-small\",\n          \"metadata\": {\n            \"fingerprint\": \"REDACTED\",\n            \"items\": [\n              {\n                \"key\": \"instance-template\",\n                \"value\": \"projects/12340001/global/instanceTemplates/gke-gke1-default-pool-35923fbc\"\n              },\n              {\n                \"key\": \"created-by\",\n                \"value\": \"projects/12340001/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-35923fbc-grp\"\n              },\n              {\n                \"key\": \"serial-port-logging-enable\",\n                \"value\": \"true\"\n              },\n              {\n                \"key\": \"kube-labels\",\n                \"value\": \"cloud.google.com/gke-boot-disk=pd-standard,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/machine-family=e2\"\n              },\n              {\n                \"key\": \"google-compute-enable-pcid\",\n                \"value\": \"true\"\n              },\n              {\n                \"key\": \"enable-oslogin\",\n                \"value\": \"false\"\n              },\n              {\n                \"key\": \"kubelet-config\",\n                \"value\": \"apiVersion: kubelet.config.k8s.io/v1beta1\\nauthentication:\\n  anonymous:\\n    enabled: false\\n  webhook:\\n    enabled: true\\n  x509:\\n    clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\\nauthorization:\\n  mode: Webhook\\ncgroupRoot: /\\nclusterDNS:\\n- 10.3.240.10\\nclusterDomain: cluster.local\\nenableDebuggingHandlers: true\\nevictionHard:\\n  memory.available: 100Mi\\n  nodefs.available: 10%\\n  nodefs.inodesFree: 5%\\n  pid.available: 10%\\nfeatureGates:\\n  DynamicKubeletConfig: false\\n  ExecProbeTimeout: false\\n  InTreePluginAWSUnregister: true\\n  InTreePluginAzureDiskUnregister: true\\n  InTreePluginOpenStackUnregister: true\\n  InTreePluginvSphereUnregister: true\\n  RotateKubeletServerCertificate: true\\nkernelMemcgNotification: true\\nkind: KubeletConfiguration\\nkubeReserved:\\n  cpu: 1060m\\n  ephemeral-storage: 41Gi\\n  memory: 512Mi\\nreadOnlyPort: 10255\\nserverTLSBootstrap: true\\nstaticPodPath: /etc/kubernetes/manifests\\n\"\n              },\n              {\n                \"key\": \"kubeconfig\",\n                \"value\": \"apiVersion: v1\\nkind: Config\\nclusters:\\n- cluster:\\n    server: https://35.205.188.165\\n    certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\\n  name: default-cluster\\ncontexts:\\n- context:\\n    cluster: default-cluster\\n    namespace: default\\n    user: exec-plugin-auth\\n  name: default-context\\ncurrent-context: default-context\\nusers:\\n- name: exec-plugin-auth\\n  user:\\n    exec:\\n      apiVersion: \\\"client.authentication.k8s.io/v1alpha1\\\"\\n      command: '/home/kubernetes/bin/gke-exec-auth-plugin'\\n      args: [\\\"--cache-dir\\\", '/var/lib/kubelet/pki/']\\n\"\n              },\n              {\n                \"key\": \"cluster-name\",\n                \"value\": \"gke1\"\n              },\n              {\n                \"key\": \"gci-update-strategy\",\n                \"value\": \"update_disabled\"\n              },\n              {\n                \"key\": \"gci-metrics-enabled\",\n                \"value\": \"true\"\n              },\n              {\n                \"key\": \"configure-sh\",\n                \"value\": \"REDACTED\"\n              },\n              {\n                \"key\": \"gci-ensure-gke-docker\",\n                \"value\": \"true\"\n              },\n              {\n                \"key\": \"disable-legacy-endpoints\",\n                \"value\": \"true\"\n              },\n              {\n                \"key\": \"user-data\",\n                \"value\": \"REDACTED\"\n              },\n              {\n                \"key\": \"kube-env\",\n                \"value\": \"REDACTED\"\n              },\n              {\n                \"key\": \"cluster-uid\",\n                \"value\": \"f36cf6ddd50c4b998cf1921fbc3e11fc6895bf0ad2d841e7956d7fca6e7024b4\"\n              },\n              {\n                \"key\": \"cluster-location\",\n                \"value\": \"europe-west4-a\"\n              }\n            ],\n            \"kind\": \"compute#metadata\"\n          },\n          \"name\": \"gke-gke1-default-pool-35923fbc-2xxp\",\n          \"networkInterfaces\": [\n            {\n              \"accessConfigs\": [\n                {\n                  \"kind\": \"compute#accessConfig\",\n                  \"name\": \"external-nat\",\n                  \"natIP\": \"34.78.171.82\",\n                  \"networkTier\": \"PREMIUM\",\n                  \"type\": \"ONE_TO_ONE_NAT\"\n                }\n              ],\n              \"fingerprint\": \"REDACTED\",\n              \"kind\": \"compute#networkInterface\",\n              \"name\": \"nic0\",\n              \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n              \"networkIP\": \"10.132.0.5\",\n              \"stackType\": \"IPV4_ONLY\",\n              \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west1/subnetworks/default\"\n            }\n          ],\n          \"networkPerformanceConfig\": {\n            \"totalEgressBandwidthTier\": \"DEFAULT\"\n          },\n          \"scheduling\": {\n            \"automaticRestart\": true,\n            \"onHostMaintenance\": \"MIGRATE\",\n            \"preemptible\": false,\n            \"provisioningModel\": \"STANDARD\"\n          },\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gke-gke1-default-pool-35923fbc-2xxp\",\n          \"serviceAccounts\": [\n            {\n              \"email\": \"12340001-compute@developer.gserviceaccount.com\",\n              \"scopes\": [\n                \"https://www.googleapis.com/auth/logging.write\",\n                \"https://www.googleapis.com/auth/monitoring\"\n              ]\n            }\n          ],\n          \"shieldedInstanceConfig\": {\n            \"enableIntegrityMonitoring\": true,\n            \"enableSecureBoot\": false,\n            \"enableVtpm\": true\n          },\n          \"shieldedInstanceIntegrityPolicy\": {\n            \"updateAutoLearnPolicy\": true\n          },\n          \"startRestricted\": false,\n          \"status\": \"RUNNING\",\n          \"tags\": {\n            \"fingerprint\": \"REDACTED\",\n            \"items\": [\n              \"gke-gke1-f36cf6dd-node\"\n            ]\n          },\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a\"\n        },\n        {\n          \"kind\": \"compute#instance\",\n          \"id\": \"7786653639192252637\",\n          \"creationTimestamp\": \"2025-02-05T01:24:02.335-08:00\",\n          \"name\": \"mig-l40g\",\n          \"tags\": {\n            \"fingerprint\": \"42WmSpB8rSM=\"\n          },\n          \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/machineTypes/e2-micro\",\n          \"status\": \"RUNNING\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a\",\n          \"networkInterfaces\": [\n            {\n              \"kind\": \"compute#networkInterface\",\n              \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n              \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default\",\n              \"networkIP\": \"10.164.0.5\",\n              \"name\": \"nic0\",\n              \"fingerprint\": \"Uzb8mp3_QBM=\",\n              \"stackType\": \"IPV4_ONLY\"\n            }\n          ],\n          \"disks\": [\n            {\n              \"kind\": \"compute#attachedDisk\",\n              \"type\": \"PERSISTENT\",\n              \"mode\": \"READ_WRITE\",\n              \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/mig-l40g\",\n              \"deviceName\": \"persistent-disk-0\",\n              \"index\": 0,\n              \"boot\": true,\n              \"autoDelete\": true,\n              \"licenses\": [\n                \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye\"\n              ],\n              \"interface\": \"SCSI\",\n              \"guestOsFeatures\": [\n                {\n                  \"type\": \"UEFI_COMPATIBLE\"\n                },\n                {\n                  \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n                },\n                {\n                  \"type\": \"GVNIC\"\n                }\n              ],\n              \"diskSizeGb\": \"10\",\n              \"architecture\": \"X86_64\"\n            }\n          ],\n          \"metadata\": {\n            \"kind\": \"compute#metadata\",\n            \"fingerprint\": \"QiZsHXut0E8=\",\n            \"items\": [\n              {\n                \"key\": \"instance-template\",\n                \"value\": \"projects/12340001/global/instanceTemplates/mig-template\"\n              },\n              {\n                \"key\": \"created-by\",\n                \"value\": \"projects/12340001/zones/europe-west4-a/instanceGroupManagers/mig\"\n              }\n            ]\n          },\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-l40g\",\n          \"scheduling\": {\n            \"onHostMaintenance\": \"MIGRATE\",\n            \"automaticRestart\": true,\n            \"preemptible\": false,\n            \"provisioningModel\": \"STANDARD\"\n          },\n          \"cpuPlatform\": \"Intel Broadwell\",\n          \"labels\": {\n            \"goog-terraform-provisioned\": \"true\"\n          },\n          \"labelFingerprint\": \"vezUS-42LLM=\",\n          \"startRestricted\": false,\n          \"deletionProtection\": false,\n          \"shieldedInstanceConfig\": {\n            \"enableSecureBoot\": false,\n            \"enableVtpm\": true,\n            \"enableIntegrityMonitoring\": true\n          },\n          \"shieldedInstanceIntegrityPolicy\": {\n            \"updateAutoLearnPolicy\": true\n          },\n          \"fingerprint\": \"rixQDgLs8S0=\",\n          \"lastStartTimestamp\": \"2025-02-05T01:24:12.082-08:00\",\n          \"satisfiesPzi\": true\n        }\n      ]\n    },\n    \"zones/europe-north1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-north1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-north1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-north1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-east2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-east2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-east2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west6-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west6-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west6-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west6-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west6-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west6-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west6-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west6-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west6-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast3-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast3-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast3-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast3-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast3-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast3-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast3-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast3-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast3-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west3-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west3-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west3-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west3-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west3-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west3-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west3-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west3-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west3-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west4-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west4-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west4-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west4-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west4-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west4-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west4-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west4-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west4-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-southeast2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-southeast2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-southeast2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-central2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-central2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-central2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-central2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-central2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-central2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-central2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-central2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-central2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-northeast2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-northeast2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-northeast2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-south2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-south2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-south2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/australia-southeast2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/australia-southeast2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/australia-southeast2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-west1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/southamerica-west1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-west1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-west1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/southamerica-west1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-west1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-west1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/southamerica-west1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-west1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east7-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east7-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east7-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east7-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east7-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east7-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east7-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east7-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east7-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west8-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west8-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west8-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west8-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west8-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west8-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west8-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west8-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west8-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west9-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west9-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west9-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west9-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west9-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west9-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west9-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west9-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west9-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east5-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east5-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east5-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east5-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east5-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east5-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east5-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east5-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east5-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-southwest1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-southwest1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-southwest1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-southwest1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-southwest1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-southwest1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-southwest1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-southwest1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-southwest1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-south1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-south1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-south1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-south1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-south1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-south1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-south1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-south1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-south1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-west1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-west1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-west1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-west1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-west1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-west1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/me-west1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-west1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-west1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west12-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west12-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west12-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west12-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west12-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west12-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west12-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west12-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west12-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-central1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-central1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-central1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west10-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west10-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west10-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west10-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west10-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west10-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west10-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west10-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west10-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-central2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-central2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-central2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/africa-south1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/africa-south1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/africa-south1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/africa-south1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/africa-south1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/africa-south1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/africa-south1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/africa-south1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/africa-south1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west8-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west8-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west8-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west8-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west8-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west8-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west8-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west8-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west8-b\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-south1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-south1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-south1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-south1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-south1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-south1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-south1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-south1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-south1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-north2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-north2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-north2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north2-b\"\n          }\n        ]\n      }\n    }\n  },\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/aggregated/instances\"\n}\n"
  },
  {
    "path": "test-data/gce1/json-dumps/compute-instances-europe-west1-b-2.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances\",\n  \"items\": [\n    {\n      \"canIpForward\": true,\n      \"cpuPlatform\": \"Intel Broadwell\",\n      \"creationTimestamp\": \"2022-04-26T08:21:54.798-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"100\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            },\n            {\n              \"type\": \"SECURE_BOOT\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"shieldedInstanceInitialState\": {\n            \"dbs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"dbxs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"keks\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"pk\": {\n              \"content\": \"REDACTED\",\n              \"fileType\": \"X509\"\n            }\n          },\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/disks/gke-gke1-default-pool-35923fbc-k05c\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"3147904666822881533\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"mUgogP08_Iw=\",\n      \"labels\": {\n        \"gcp_doctor_test\": \"gke\",\n        \"goog-gke-node\": \"\"\n      },\n      \"lastStartTimestamp\": \"2022-04-26T08:22:01.245-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/machineTypes/e2-small\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"instance-template\",\n            \"value\": \"projects/12340001/global/instanceTemplates/gke-gke1-default-pool-35923fbc\"\n          },\n          {\n            \"key\": \"created-by\",\n            \"value\": \"projects/12340001/zones/europe-west1-b/instanceGroupManagers/gke-gke1-default-pool-35923fbc-grp\"\n          },\n          {\n            \"key\": \"serial-port-logging-enable\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"kube-labels\",\n            \"value\": \"cloud.google.com/gke-boot-disk=pd-standard,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/machine-family=e2\"\n          },\n          {\n            \"key\": \"google-compute-enable-pcid\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"enable-oslogin\",\n            \"value\": \"false\"\n          },\n          {\n            \"key\": \"kubelet-config\",\n            \"value\": \"apiVersion: kubelet.config.k8s.io/v1beta1\\nauthentication:\\n  anonymous:\\n    enabled: false\\n  webhook:\\n    enabled: true\\n  x509:\\n    clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\\nauthorization:\\n  mode: Webhook\\ncgroupRoot: /\\nclusterDNS:\\n- 10.3.240.10\\nclusterDomain: cluster.local\\nenableDebuggingHandlers: true\\nevictionHard:\\n  memory.available: 100Mi\\n  nodefs.available: 10%\\n  nodefs.inodesFree: 5%\\n  pid.available: 10%\\nfeatureGates:\\n  DynamicKubeletConfig: false\\n  ExecProbeTimeout: false\\n  InTreePluginAWSUnregister: true\\n  InTreePluginAzureDiskUnregister: true\\n  InTreePluginOpenStackUnregister: true\\n  InTreePluginvSphereUnregister: true\\n  RotateKubeletServerCertificate: true\\nkernelMemcgNotification: true\\nkind: KubeletConfiguration\\nkubeReserved:\\n  cpu: 1060m\\n  ephemeral-storage: 41Gi\\n  memory: 512Mi\\nreadOnlyPort: 10255\\nserverTLSBootstrap: true\\nstaticPodPath: /etc/kubernetes/manifests\\n\"\n          },\n          {\n            \"key\": \"kubeconfig\",\n            \"value\": \"apiVersion: v1\\nkind: Config\\nclusters:\\n- cluster:\\n    server: https://35.205.188.165\\n    certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\\n  name: default-cluster\\ncontexts:\\n- context:\\n    cluster: default-cluster\\n    namespace: default\\n    user: exec-plugin-auth\\n  name: default-context\\ncurrent-context: default-context\\nusers:\\n- name: exec-plugin-auth\\n  user:\\n    exec:\\n      apiVersion: \\\"client.authentication.k8s.io/v1alpha1\\\"\\n      command: '/home/kubernetes/bin/gke-exec-auth-plugin'\\n      args: [\\\"--cache-dir\\\", '/var/lib/kubelet/pki/']\\n\"\n          },\n          {\n            \"key\": \"cluster-name\",\n            \"value\": \"gke1\"\n          },\n          {\n            \"key\": \"gci-update-strategy\",\n            \"value\": \"update_disabled\"\n          },\n          {\n            \"key\": \"gci-metrics-enabled\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"configure-sh\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"gci-ensure-gke-docker\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"disable-legacy-endpoints\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"user-data\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"kube-env\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"cluster-uid\",\n            \"value\": \"f36cf6ddd50c4b998cf1921fbc3e11fc6895bf0ad2d841e7956d7fca6e7024b4\"\n          },\n          {\n            \"key\": \"cluster-location\",\n            \"value\": \"europe-west1-b\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"gke-gke1-default-pool-35923fbc-k05c\",\n      \"networkInterfaces\": [\n        {\n          \"accessConfigs\": [\n            {\n              \"kind\": \"compute#accessConfig\",\n              \"name\": \"external-nat\",\n              \"natIP\": \"34.79.110.136\",\n              \"networkTier\": \"PREMIUM\",\n              \"type\": \"ONE_TO_ONE_NAT\"\n            }\n          ],\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n          \"networkIP\": \"10.132.0.2\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west1/subnetworks/default\"\n        }\n      ],\n      \"networkPerformanceConfig\": {\n        \"totalEgressBandwidthTier\": \"DEFAULT\"\n      },\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances/gke-gke1-default-pool-35923fbc-k05c\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"12340001-compute@developer.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/logging.write\",\n            \"https://www.googleapis.com/auth/monitoring\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"gke-gke1-f36cf6dd-node\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b\"\n    }\n  ],\n  \"kind\": \"compute#instanceList\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances\"\n}\n"
  },
  {
    "path": "test-data/gce1/json-dumps/compute-instances-europe-west1-b.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances\",\n  \"items\": [\n    {\n      \"canIpForward\": true,\n      \"cpuPlatform\": \"Intel Broadwell\",\n      \"creationTimestamp\": \"2022-04-26T08:21:56.296-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"100\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            },\n            {\n              \"type\": \"SECURE_BOOT\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"shieldedInstanceInitialState\": {\n            \"dbs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"dbxs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"keks\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"pk\": {\n              \"content\": \"REDACTED\",\n              \"fileType\": \"X509\"\n            }\n          },\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/disks/gke-gke1-default-pool-35923fbc-2xxp\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"1470007467084984573\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"mUgogP08_Iw=\",\n      \"labels\": {\n        \"gcp_doctor_test\": \"gke\",\n        \"goog-gke-node\": \"\"\n      },\n      \"lastStartTimestamp\": \"2022-04-26T08:22:05.407-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/machineTypes/e2-small\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"instance-template\",\n            \"value\": \"projects/12340001/global/instanceTemplates/gke-gke1-default-pool-35923fbc\"\n          },\n          {\n            \"key\": \"created-by\",\n            \"value\": \"projects/12340001/zones/europe-west1-b/instanceGroupManagers/gke-gke1-default-pool-35923fbc-grp\"\n          },\n          {\n            \"key\": \"serial-port-logging-enable\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"kube-labels\",\n            \"value\": \"cloud.google.com/gke-boot-disk=pd-standard,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/machine-family=e2\"\n          },\n          {\n            \"key\": \"google-compute-enable-pcid\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"enable-oslogin\",\n            \"value\": \"false\"\n          },\n          {\n            \"key\": \"kubelet-config\",\n            \"value\": \"apiVersion: kubelet.config.k8s.io/v1beta1\\nauthentication:\\n  anonymous:\\n    enabled: false\\n  webhook:\\n    enabled: true\\n  x509:\\n    clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\\nauthorization:\\n  mode: Webhook\\ncgroupRoot: /\\nclusterDNS:\\n- 10.3.240.10\\nclusterDomain: cluster.local\\nenableDebuggingHandlers: true\\nevictionHard:\\n  memory.available: 100Mi\\n  nodefs.available: 10%\\n  nodefs.inodesFree: 5%\\n  pid.available: 10%\\nfeatureGates:\\n  DynamicKubeletConfig: false\\n  ExecProbeTimeout: false\\n  InTreePluginAWSUnregister: true\\n  InTreePluginAzureDiskUnregister: true\\n  InTreePluginOpenStackUnregister: true\\n  InTreePluginvSphereUnregister: true\\n  RotateKubeletServerCertificate: true\\nkernelMemcgNotification: true\\nkind: KubeletConfiguration\\nkubeReserved:\\n  cpu: 1060m\\n  ephemeral-storage: 41Gi\\n  memory: 512Mi\\nreadOnlyPort: 10255\\nserverTLSBootstrap: true\\nstaticPodPath: /etc/kubernetes/manifests\\n\"\n          },\n          {\n            \"key\": \"kubeconfig\",\n            \"value\": \"apiVersion: v1\\nkind: Config\\nclusters:\\n- cluster:\\n    server: https://35.205.188.165\\n    certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\\n  name: default-cluster\\ncontexts:\\n- context:\\n    cluster: default-cluster\\n    namespace: default\\n    user: exec-plugin-auth\\n  name: default-context\\ncurrent-context: default-context\\nusers:\\n- name: exec-plugin-auth\\n  user:\\n    exec:\\n      apiVersion: \\\"client.authentication.k8s.io/v1alpha1\\\"\\n      command: '/home/kubernetes/bin/gke-exec-auth-plugin'\\n      args: [\\\"--cache-dir\\\", '/var/lib/kubelet/pki/']\\n\"\n          },\n          {\n            \"key\": \"cluster-name\",\n            \"value\": \"gke1\"\n          },\n          {\n            \"key\": \"gci-update-strategy\",\n            \"value\": \"update_disabled\"\n          },\n          {\n            \"key\": \"gci-metrics-enabled\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"configure-sh\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"gci-ensure-gke-docker\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"disable-legacy-endpoints\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"user-data\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"kube-env\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"cluster-uid\",\n            \"value\": \"f36cf6ddd50c4b998cf1921fbc3e11fc6895bf0ad2d841e7956d7fca6e7024b4\"\n          },\n          {\n            \"key\": \"cluster-location\",\n            \"value\": \"europe-west1-b\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"gke-gke1-default-pool-35923fbc-2xxp\",\n      \"networkInterfaces\": [\n        {\n          \"accessConfigs\": [\n            {\n              \"kind\": \"compute#accessConfig\",\n              \"name\": \"external-nat\",\n              \"natIP\": \"34.78.171.82\",\n              \"networkTier\": \"PREMIUM\",\n              \"type\": \"ONE_TO_ONE_NAT\"\n            }\n          ],\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n          \"networkIP\": \"10.132.0.5\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west1/subnetworks/default\"\n        }\n      ],\n      \"networkPerformanceConfig\": {\n        \"totalEgressBandwidthTier\": \"DEFAULT\"\n      },\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances/gke-gke1-default-pool-35923fbc-2xxp\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"12340001-compute@developer.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/logging.write\",\n            \"https://www.googleapis.com/auth/monitoring\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"gke-gke1-f36cf6dd-node\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b\"\n    },\n    {\n      \"canIpForward\": true,\n      \"cpuPlatform\": \"Intel Broadwell\",\n      \"creationTimestamp\": \"2022-04-26T08:21:55.180-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"100\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            },\n            {\n              \"type\": \"SECURE_BOOT\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"shieldedInstanceInitialState\": {\n            \"dbs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"dbxs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"keks\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"pk\": {\n              \"content\": \"REDACTED\",\n              \"fileType\": \"X509\"\n            }\n          },\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/disks/gke-gke1-default-pool-35923fbc-c12f\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"183710301471224061\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"mUgogP08_Iw=\",\n      \"labels\": {\n        \"gcp_doctor_test\": \"gke\",\n        \"goog-gke-node\": \"\"\n      },\n      \"lastStartTimestamp\": \"2022-04-26T08:22:02.051-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/machineTypes/e2-small\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"instance-template\",\n            \"value\": \"projects/12340001/global/instanceTemplates/gke-gke1-default-pool-35923fbc\"\n          },\n          {\n            \"key\": \"created-by\",\n            \"value\": \"projects/12340001/zones/europe-west1-b/instanceGroupManagers/gke-gke1-default-pool-35923fbc-grp\"\n          },\n          {\n            \"key\": \"serial-port-logging-enable\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"kube-labels\",\n            \"value\": \"cloud.google.com/gke-boot-disk=pd-standard,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/machine-family=e2\"\n          },\n          {\n            \"key\": \"google-compute-enable-pcid\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"enable-oslogin\",\n            \"value\": \"false\"\n          },\n          {\n            \"key\": \"kubelet-config\",\n            \"value\": \"apiVersion: kubelet.config.k8s.io/v1beta1\\nauthentication:\\n  anonymous:\\n    enabled: false\\n  webhook:\\n    enabled: true\\n  x509:\\n    clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\\nauthorization:\\n  mode: Webhook\\ncgroupRoot: /\\nclusterDNS:\\n- 10.3.240.10\\nclusterDomain: cluster.local\\nenableDebuggingHandlers: true\\nevictionHard:\\n  memory.available: 100Mi\\n  nodefs.available: 10%\\n  nodefs.inodesFree: 5%\\n  pid.available: 10%\\nfeatureGates:\\n  DynamicKubeletConfig: false\\n  ExecProbeTimeout: false\\n  InTreePluginAWSUnregister: true\\n  InTreePluginAzureDiskUnregister: true\\n  InTreePluginOpenStackUnregister: true\\n  InTreePluginvSphereUnregister: true\\n  RotateKubeletServerCertificate: true\\nkernelMemcgNotification: true\\nkind: KubeletConfiguration\\nkubeReserved:\\n  cpu: 1060m\\n  ephemeral-storage: 41Gi\\n  memory: 512Mi\\nreadOnlyPort: 10255\\nserverTLSBootstrap: true\\nstaticPodPath: /etc/kubernetes/manifests\\n\"\n          },\n          {\n            \"key\": \"kubeconfig\",\n            \"value\": \"apiVersion: v1\\nkind: Config\\nclusters:\\n- cluster:\\n    server: https://35.205.188.165\\n    certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\\n  name: default-cluster\\ncontexts:\\n- context:\\n    cluster: default-cluster\\n    namespace: default\\n    user: exec-plugin-auth\\n  name: default-context\\ncurrent-context: default-context\\nusers:\\n- name: exec-plugin-auth\\n  user:\\n    exec:\\n      apiVersion: \\\"client.authentication.k8s.io/v1alpha1\\\"\\n      command: '/home/kubernetes/bin/gke-exec-auth-plugin'\\n      args: [\\\"--cache-dir\\\", '/var/lib/kubelet/pki/']\\n\"\n          },\n          {\n            \"key\": \"cluster-name\",\n            \"value\": \"gke1\"\n          },\n          {\n            \"key\": \"gci-update-strategy\",\n            \"value\": \"update_disabled\"\n          },\n          {\n            \"key\": \"gci-metrics-enabled\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"configure-sh\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"gci-ensure-gke-docker\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"disable-legacy-endpoints\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"user-data\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"kube-env\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"cluster-uid\",\n            \"value\": \"f36cf6ddd50c4b998cf1921fbc3e11fc6895bf0ad2d841e7956d7fca6e7024b4\"\n          },\n          {\n            \"key\": \"cluster-location\",\n            \"value\": \"europe-west1-b\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"gke-gke1-default-pool-35923fbc-c12f\",\n      \"networkInterfaces\": [\n        {\n          \"accessConfigs\": [\n            {\n              \"kind\": \"compute#accessConfig\",\n              \"name\": \"external-nat\",\n              \"natIP\": \"34.76.115.182\",\n              \"networkTier\": \"PREMIUM\",\n              \"type\": \"ONE_TO_ONE_NAT\"\n            }\n          ],\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n          \"networkIP\": \"10.132.0.3\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west1/subnetworks/default\"\n        }\n      ],\n      \"networkPerformanceConfig\": {\n        \"totalEgressBandwidthTier\": \"DEFAULT\"\n      },\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances/gke-gke1-default-pool-35923fbc-c12f\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"12340001-compute@developer.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/logging.write\",\n            \"https://www.googleapis.com/auth/monitoring\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"gke-gke1-f36cf6dd-node\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b\"\n    },\n    {\n      \"canIpForward\": true,\n      \"cpuPlatform\": \"Intel Broadwell\",\n      \"creationTimestamp\": \"2022-04-26T08:21:56.318-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"100\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            },\n            {\n              \"type\": \"SECURE_BOOT\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"shieldedInstanceInitialState\": {\n            \"dbs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"dbxs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"keks\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"pk\": {\n              \"content\": \"REDACTED\",\n              \"fileType\": \"X509\"\n            }\n          },\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/disks/gke-gke1-default-pool-35923fbc-fv50\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"148164482114629885\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"mUgogP08_Iw=\",\n      \"labels\": {\n        \"gcp_doctor_test\": \"gke\",\n        \"goog-gke-node\": \"\"\n      },\n      \"lastStartTimestamp\": \"2022-04-26T08:22:05.433-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/machineTypes/e2-small\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"instance-template\",\n            \"value\": \"projects/12340001/global/instanceTemplates/gke-gke1-default-pool-35923fbc\"\n          },\n          {\n            \"key\": \"created-by\",\n            \"value\": \"projects/12340001/zones/europe-west1-b/instanceGroupManagers/gke-gke1-default-pool-35923fbc-grp\"\n          },\n          {\n            \"key\": \"serial-port-logging-enable\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"kube-labels\",\n            \"value\": \"cloud.google.com/gke-boot-disk=pd-standard,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/machine-family=e2\"\n          },\n          {\n            \"key\": \"google-compute-enable-pcid\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"enable-oslogin\",\n            \"value\": \"false\"\n          },\n          {\n            \"key\": \"kubelet-config\",\n            \"value\": \"apiVersion: kubelet.config.k8s.io/v1beta1\\nauthentication:\\n  anonymous:\\n    enabled: false\\n  webhook:\\n    enabled: true\\n  x509:\\n    clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\\nauthorization:\\n  mode: Webhook\\ncgroupRoot: /\\nclusterDNS:\\n- 10.3.240.10\\nclusterDomain: cluster.local\\nenableDebuggingHandlers: true\\nevictionHard:\\n  memory.available: 100Mi\\n  nodefs.available: 10%\\n  nodefs.inodesFree: 5%\\n  pid.available: 10%\\nfeatureGates:\\n  DynamicKubeletConfig: false\\n  ExecProbeTimeout: false\\n  InTreePluginAWSUnregister: true\\n  InTreePluginAzureDiskUnregister: true\\n  InTreePluginOpenStackUnregister: true\\n  InTreePluginvSphereUnregister: true\\n  RotateKubeletServerCertificate: true\\nkernelMemcgNotification: true\\nkind: KubeletConfiguration\\nkubeReserved:\\n  cpu: 1060m\\n  ephemeral-storage: 41Gi\\n  memory: 512Mi\\nreadOnlyPort: 10255\\nserverTLSBootstrap: true\\nstaticPodPath: /etc/kubernetes/manifests\\n\"\n          },\n          {\n            \"key\": \"kubeconfig\",\n            \"value\": \"apiVersion: v1\\nkind: Config\\nclusters:\\n- cluster:\\n    server: https://35.205.188.165\\n    certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\\n  name: default-cluster\\ncontexts:\\n- context:\\n    cluster: default-cluster\\n    namespace: default\\n    user: exec-plugin-auth\\n  name: default-context\\ncurrent-context: default-context\\nusers:\\n- name: exec-plugin-auth\\n  user:\\n    exec:\\n      apiVersion: \\\"client.authentication.k8s.io/v1alpha1\\\"\\n      command: '/home/kubernetes/bin/gke-exec-auth-plugin'\\n      args: [\\\"--cache-dir\\\", '/var/lib/kubelet/pki/']\\n\"\n          },\n          {\n            \"key\": \"cluster-name\",\n            \"value\": \"gke1\"\n          },\n          {\n            \"key\": \"gci-update-strategy\",\n            \"value\": \"update_disabled\"\n          },\n          {\n            \"key\": \"gci-metrics-enabled\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"configure-sh\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"gci-ensure-gke-docker\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"disable-legacy-endpoints\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"user-data\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"kube-env\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"cluster-uid\",\n            \"value\": \"f36cf6ddd50c4b998cf1921fbc3e11fc6895bf0ad2d841e7956d7fca6e7024b4\"\n          },\n          {\n            \"key\": \"cluster-location\",\n            \"value\": \"europe-west1-b\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"gke-gke1-default-pool-35923fbc-fv50\",\n      \"networkInterfaces\": [\n        {\n          \"accessConfigs\": [\n            {\n              \"kind\": \"compute#accessConfig\",\n              \"name\": \"external-nat\",\n              \"natIP\": \"35.205.62.74\",\n              \"networkTier\": \"PREMIUM\",\n              \"type\": \"ONE_TO_ONE_NAT\"\n            }\n          ],\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n          \"networkIP\": \"10.132.0.4\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west1/subnetworks/default\"\n        }\n      ],\n      \"networkPerformanceConfig\": {\n        \"totalEgressBandwidthTier\": \"DEFAULT\"\n      },\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances/gke-gke1-default-pool-35923fbc-fv50\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"12340001-compute@developer.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/logging.write\",\n            \"https://www.googleapis.com/auth/monitoring\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"gke-gke1-f36cf6dd-node\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b\"\n    }\n  ],\n  \"kind\": \"compute#instanceList\",\n  \"nextPageToken\": \"ClgI-fiQw4y09wI6TQoCGAMKAyC1EAoCGAIKByDg3fmMvREKAhgHCiUqI2drZS1na2UxLWRlZmF1bHQtcG9vbC0zNTkyM2ZiYy1mdjUwCgog_eGW5vvZmIcC\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances\"\n}\n"
  },
  {
    "path": "test-data/gce1/json-dumps/compute-instances-europe-west2-b.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gce1-aaaa/zones/europe-west2-b/instances\",\n  \"kind\": \"compute#instanceList\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west2-b/instances\"\n}\n"
  },
  {
    "path": "test-data/gce1/json-dumps/compute-instances-europe-west4-a-2.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances\",\n  \"items\": [\n    {\n      \"cpuPlatform\": \"Intel Broadwell\",\n      \"creationTimestamp\": \"2022-04-26T08:21:18.746-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"10\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-9-stretch\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/mig-7pvl\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"4022531639476597505\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"42WmSpB8rSM=\",\n      \"lastStartTimestamp\": \"2022-04-26T08:21:24.395-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/machineTypes/e2-micro\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"instance-template\",\n            \"value\": \"projects/12340001/global/instanceTemplates/mig-template\"\n          },\n          {\n            \"key\": \"created-by\",\n            \"value\": \"projects/12340001/zones/europe-west4-a/instanceGroupManagers/mig\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"mig-7pvl\",\n      \"networkInterfaces\": [\n        {\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n          \"networkIP\": \"10.164.0.4\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default\"\n        }\n      ],\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-7pvl\",\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\"\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a\"\n    }\n  ],\n  \"kind\": \"compute#instanceList\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances\"\n}\n"
  },
  {
    "path": "test-data/gce1/json-dumps/compute-instances-europe-west4-a.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances\",\n  \"items\": [\n    {\n      \"canIpForward\": false,\n      \"cpuPlatform\": \"Intel Skylake\",\n      \"creationTimestamp\": \"2022-04-26T08:20:51.863-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"32\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"MULTI_IP_SUBNET\"\n            },\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"WINDOWS\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2019-dc-byol\",\n            \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-core\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/gce1\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"1010101012\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"1TQLkowq0ZY=\",\n      \"labels\": {\n        \"foo\": \"bar\"\n      },\n      \"lastStartTimestamp\": \"2022-04-26T08:20:58.538-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/machineTypes/e2-micro\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"kind\": \"compute#metadata\"\n      },\n      \"minCpuPlatform\": \"Intel Skylake\",\n      \"name\": \"gce1\",\n      \"networkInterfaces\": [\n        {\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n          \"networkIP\": \"10.164.0.2\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default\"\n        }\n      ],\n      \"scheduling\": {\n        \"automaticRestart\": false,\n        \"onHostMaintenance\": \"TERMINATE\",\n        \"preemptible\": true\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"12340001-compute@developer.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/devstorage.read_only\",\n            \"https://www.googleapis.com/auth/logging.write\",\n            \"https://www.googleapis.com/auth/monitoring.write\",\n            \"https://www.googleapis.com/auth/service.management.readonly\",\n            \"https://www.googleapis.com/auth/servicecontrol\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"secured-instance\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a\"\n    },\n    {\n      \"canIpForward\": false,\n      \"cpuPlatform\": \"Intel Skylake\",\n      \"creationTimestamp\": \"2022-04-26T08:20:51.863-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"32\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"MULTI_IP_SUBNET\"\n            },\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"WINDOWS\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2019-dc-byol\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/gce1\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"1010101013\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"1TQLkowq0ZY=\",\n      \"labels\": {\n        \"foo\": \"bar\"\n      },\n      \"lastStartTimestamp\": \"2022-04-26T08:20:58.538-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/machineTypes/e2-micro\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"windows-test\",\n      \"networkInterfaces\": [\n        {\n          \"accessConfigs\": [\n            {\n              \"kind\": \"compute#accessConfig\",\n              \"name\": \"external-nat\",\n              \"natIP\": \"34.78.171.82\",\n              \"networkTier\": \"PREMIUM\",\n              \"type\": \"ONE_TO_ONE_NAT\"\n            }\n          ],\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n          \"networkIP\": \"10.164.0.2\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default\"\n        }\n      ],\n      \"scheduling\": {\n        \"automaticRestart\": false,\n        \"onHostMaintenance\": \"TERMINATE\",\n        \"preemptible\": true\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/windows-test\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"12340001-compute@developer.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/devstorage.read_only\",\n            \"https://www.googleapis.com/auth/logging.write\",\n            \"https://www.googleapis.com/auth/monitoring.write\",\n            \"https://www.googleapis.com/auth/service.management.readonly\",\n            \"https://www.googleapis.com/auth/servicecontrol\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"secured-instance\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a\"\n    },\n    {\n      \"canIpForward\": false,\n      \"cpuPlatform\": \"Intel Skylake\",\n      \"creationTimestamp\": \"2022-04-26T08:20:53.544-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"10\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            },\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"shieldedInstanceInitialState\": {\n            \"dbs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"dbxs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"keks\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"pk\": {\n              \"content\": \"REDACTED\",\n              \"fileType\": \"X509\"\n            }\n          },\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/gce2\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"1010101011\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"42WmSpB8rSM=\",\n      \"lastStartTimestamp\": \"2022-04-26T08:21:01.453-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/machineTypes/e2-micro\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"serial-port-logging-enable\",\n            \"value\": \"false\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n\n      \"name\": \"gce2\",\n      \"networkInterfaces\": [\n        {\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n          \"networkIP\": \"10.164.0.3\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default\"\n        }\n      ],\n      \"scheduling\": {\n        \"automaticRestart\": false,\n        \"onHostMaintenance\": \"TERMINATE\",\n        \"preemptible\": true\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"12340001-compute@developer.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/devstorage.read_only\",\n            \"https://www.googleapis.com/auth/logging.write\",\n            \"https://www.googleapis.com/auth/monitoring.write\",\n            \"https://www.googleapis.com/auth/service.management.readonly\",\n            \"https://www.googleapis.com/auth/servicecontrol\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"secured-instance\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a\"\n    },\n    {\n      \"cpuPlatform\": \"Intel Broadwell\",\n      \"creationTimestamp\": \"2022-04-26T08:21:19.061-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"10\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-9-stretch\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/mig-4h21\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"1010101014\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"42WmSpB8rSM=\",\n      \"lastStartTimestamp\": \"2022-04-26T08:21:25.221-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/machineTypes/e2-micro\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"instance-template\",\n            \"value\": \"projects/12340001/global/instanceTemplates/mig-template\"\n          },\n          {\n            \"key\": \"created-by\",\n            \"value\": \"projects/12340001/zones/europe-west4-a/instanceGroupManagers/mig\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"mig-4h21\",\n      \"networkInterfaces\": [\n        {\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n          \"networkIP\": \"10.164.0.5\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default\"\n        }\n      ],\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-4h21\",\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\"\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a\"\n    }\n  ],\n  \"kind\": \"compute#instanceList\",\n  \"nextPageToken\": \"Cj0It-i3w4y09wI6MgoCGAMKAyCmEgoCGAIKByDg3fmMvREKAhgHCgoqCG1pZy00aDIxCgoggeaW5uuu8YE7\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances\"\n}\n"
  },
  {
    "path": "test-data/gce1/json-dumps/compute-instances-europe-west4-b.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances\",\n  \"items\": [\n    {\n      \"canIpForward\": false,\n      \"cpuPlatform\": \"Intel Skylake\",\n      \"creationTimestamp\": \"2024-08-07T06:47:30.127-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"architecture\": \"X86_64\",\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"32\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"MULTI_IP_SUBNET\"\n            },\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            },\n            {\n              \"type\": \"WINDOWS\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2019-dc\",\n            \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-core\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/disks/gce1\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"6593799323947811870\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"42WmSpB8rSM=\",\n      \"lastStartTimestamp\": \"2024-08-07T06:48:46.393-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/machineTypes/f1-micro\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"gce1\",\n      \"networkInterfaces\": [\n        {\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n          \"networkIP\": \"10.164.0.6\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default\"\n        }\n      ],\n      \"satisfiesPzi\": true,\n      \"scheduling\": {\n        \"automaticRestart\": false,\n        \"onHostMaintenance\": \"TERMINATE\",\n        \"preemptible\": true\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances/gce1\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"12340001-compute@developer.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/devstorage.read_only\",\n            \"https://www.googleapis.com/auth/logging.write\",\n            \"https://www.googleapis.com/auth/monitoring.write\",\n            \"https://www.googleapis.com/auth/service.management.readonly\",\n            \"https://www.googleapis.com/auth/servicecontrol\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"secured-instance\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-b\"\n    }\n  ],\n  \"kind\": \"compute#instanceList\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/instances\"\n}\n"
  },
  {
    "path": "test-data/gce1/json-dumps/compute-licenses.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gce1-aaaa/global/licenses\",\n  \"items\": [\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-10-enterprise-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"5769580143916819783\",\n      \"licenseCode\": \"2089835370828997959\",\n      \"creationTimestamp\": \"2018-11-07T00:00:40.302-08:00\",\n      \"description\": \"Windows 10 Enterprise BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-10-enterprise-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-10-x64-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"5572284649276248982\",\n      \"licenseCode\": \"8727879116868096918\",\n      \"creationTimestamp\": \"2019-11-19T19:05:29.677-08:00\",\n      \"description\": \"Windows 10 64-bit BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-10-x64-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-10-x86-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"1279231564365501289\",\n      \"licenseCode\": \"3732182829874353001\",\n      \"creationTimestamp\": \"2019-11-19T19:05:42.089-08:00\",\n      \"description\": \"Windows 10 32-bit BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-10-x86-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-11-x64-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"3804262737275203477\",\n      \"licenseCode\": \"5378533650449772437\",\n      \"creationTimestamp\": \"2021-08-25T11:52:42.711-07:00\",\n      \"description\": \"Windows 11 64-bit BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-11-x64-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-7-enterprise-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"2913052624331679126\",\n      \"licenseCode\": \"752112173778412950\",\n      \"creationTimestamp\": \"2018-11-06T23:59:53.727-08:00\",\n      \"description\": \"Windows 7 Enterprise BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-7-enterprise-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-7-x64-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"6501903266496451262\",\n      \"licenseCode\": \"5016528181960184510\",\n      \"creationTimestamp\": \"2019-11-19T19:00:33.621-08:00\",\n      \"description\": \"Windows 7 64-bit BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-7-x64-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-7-x86-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"4058550282231550561\",\n      \"licenseCode\": \"622639362407469665\",\n      \"creationTimestamp\": \"2019-11-19T19:01:34.532-08:00\",\n      \"description\": \"Windows 7 32-bit BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-7-x86-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-8-x64-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"7710168160606425653\",\n      \"licenseCode\": \"7036859048284197429\",\n      \"creationTimestamp\": \"2019-11-19T19:02:50.559-08:00\",\n      \"description\": \"Windows 8.x 64-bit BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-8-x64-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-8-x86-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"2601192579332117498\",\n      \"licenseCode\": \"3720924436396315642\",\n      \"creationTimestamp\": \"2019-11-19T19:03:49.785-08:00\",\n      \"description\": \"Windows 8.x 32-bit BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-8-x86-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-81-x64-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"5692263345196614391\",\n      \"licenseCode\": \"5366577783322166007\",\n      \"creationTimestamp\": \"2019-04-28T21:22:48.487-07:00\",\n      \"description\": \"Windows 8.1 Enterprise x64 BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-81-x64-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-ent\",\n      \"chargesUseFee\": false,\n      \"id\": \"1257656105385958662\",\n      \"licenseCode\": \"2967169933779246342\",\n      \"creationTimestamp\": \"2019-09-25T19:35:21.078-07:00\",\n      \"description\": \"Windows Enterprise\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-ent\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-for-containers\",\n      \"chargesUseFee\": false,\n      \"id\": \"7423076496314791885\",\n      \"licenseCode\": \"2643967004807329741\",\n      \"creationTimestamp\": \"2017-09-25T11:21:22.120-07:00\",\n      \"description\": \"Windows container host\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-for-containers\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-1709-dc\",\n      \"chargesUseFee\": false,\n      \"id\": \"2638722841150638382\",\n      \"licenseCode\": \"5194306116883728686\",\n      \"creationTimestamp\": \"2017-10-03T13:49:05.759-07:00\",\n      \"description\": \"Windows Server 1709 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-1709-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-1803-dc\",\n      \"chargesUseFee\": false,\n      \"id\": \"991969583094905153\",\n      \"licenseCode\": \"6476660300603799873\",\n      \"creationTimestamp\": \"2018-05-07T10:06:54.761-07:00\",\n      \"description\": \"Windows Server version 1803 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-1803-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-1809-dc\",\n      \"chargesUseFee\": false,\n      \"id\": \"2197036663612051569\",\n      \"licenseCode\": \"8597854123084943473\",\n      \"creationTimestamp\": \"2018-10-04T17:21:50.249-07:00\",\n      \"description\": \"Windows Server version 1809 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-1809-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-1903-dc\",\n      \"chargesUseFee\": false,\n      \"id\": \"783754911489890105\",\n      \"licenseCode\": \"5980382382909462329\",\n      \"creationTimestamp\": \"2019-06-10T21:11:02.733-07:00\",\n      \"description\": \"Windows Server version 1903 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-1903-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-1909-dc\",\n      \"chargesUseFee\": false,\n      \"id\": \"1504783339576403625\",\n      \"licenseCode\": \"1413572828508235433\",\n      \"creationTimestamp\": \"2019-11-14T01:03:02.101-08:00\",\n      \"description\": \"Windows Server version 1909 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-1909-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2000\",\n      \"chargesUseFee\": false,\n      \"id\": \"77415431498093015\",\n      \"licenseCode\": \"5507061839551517143\",\n      \"creationTimestamp\": \"2021-03-02T09:00:40.478-08:00\",\n      \"description\": \"Windows Server 2000\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2000\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2003\",\n      \"chargesUseFee\": false,\n      \"id\": \"8972483680585271920\",\n      \"licenseCode\": \"5030842449011296880\",\n      \"creationTimestamp\": \"2017-04-10T14:09:51.924-07:00\",\n      \"description\": \"Windows Server 2003\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2003\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2004-dc\",\n      \"chargesUseFee\": false,\n      \"id\": \"6915731882356532357\",\n      \"licenseCode\": \"6710259852346942597\",\n      \"creationTimestamp\": \"2020-07-23T11:43:54.418-07:00\",\n      \"description\": \"Windows Server version 2004 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2004-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2008\",\n      \"chargesUseFee\": false,\n      \"id\": \"2740560588278180852\",\n      \"licenseCode\": \"1656378918552316916\",\n      \"creationTimestamp\": \"2022-11-09T13:01:15.565-08:00\",\n      \"description\": \"Windows Server 2008 Standard Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2008\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2008-dc\",\n      \"chargesUseFee\": true,\n      \"id\": \"5520530534018080146\",\n      \"licenseCode\": \"1000502\",\n      \"creationTimestamp\": \"2015-06-03T17:05:28.000-07:00\",\n      \"description\": \"Windows Server 2008 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2008-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2008-r2\",\n      \"chargesUseFee\": false,\n      \"id\": \"4293107698603502582\",\n      \"licenseCode\": \"3284763237085719542\",\n      \"creationTimestamp\": \"2022-11-09T13:01:13.386-08:00\",\n      \"description\": \"Windows Server 2008 R2 Standard Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2008-r2\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2008-r2-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"6485631155857676024\",\n      \"licenseCode\": \"4551215591257167608\",\n      \"creationTimestamp\": \"2018-10-05T15:39:19.139-07:00\",\n      \"description\": \"Windows Server 2008R2 BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2008-r2-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2008-r2-dc\",\n      \"chargesUseFee\": true,\n      \"id\": \"6080198139471122848\",\n      \"licenseCode\": \"1000000\",\n      \"creationTimestamp\": \"2013-08-19T17:17:57.000-07:00\",\n      \"description\": \"Windows Server 2008 R2 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2008-r2-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2012\",\n      \"chargesUseFee\": false,\n      \"id\": \"4571663854194502649\",\n      \"licenseCode\": \"7695108898142923768\",\n      \"creationTimestamp\": \"2022-11-09T13:01:10.861-08:00\",\n      \"description\": \"Windows Server 2012 Standard Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2012\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2012-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"2247304514167789851\",\n      \"licenseCode\": \"5559842820536817947\",\n      \"creationTimestamp\": \"2018-10-05T15:38:44.367-07:00\",\n      \"description\": \"Windows Server 2012 BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2012-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2012-dc\",\n      \"chargesUseFee\": true,\n      \"id\": \"6102042211374830963\",\n      \"licenseCode\": \"1000015\",\n      \"creationTimestamp\": \"2015-01-05T16:58:27.000-08:00\",\n      \"description\": \"Windows Server 2012 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2012-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2012-r2\",\n      \"chargesUseFee\": false,\n      \"id\": \"975226805105568736\",\n      \"licenseCode\": \"7798417859637521376\",\n      \"creationTimestamp\": \"2022-11-09T13:01:03.469-08:00\",\n      \"description\": \"Windows Server 2012 R2 Standard Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2012-r2\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2012-r2-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"11586629996795623\",\n      \"licenseCode\": \"6738952703547430631\",\n      \"creationTimestamp\": \"2018-10-05T15:39:04.149-07:00\",\n      \"description\": \"Windows Server 2012R2 BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2012-r2-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2012-r2-dc\",\n      \"chargesUseFee\": true,\n      \"id\": \"6102042209776448355\",\n      \"licenseCode\": \"1000017\",\n      \"creationTimestamp\": \"2015-01-05T16:58:27.000-08:00\",\n      \"description\": \"Windows Server 2012 R2 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2012-r2-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2012-r2-dc-in-place-upgrade\",\n      \"chargesUseFee\": false,\n      \"id\": \"1687636345185865342\",\n      \"licenseCode\": \"7123010349826543230\",\n      \"creationTimestamp\": \"2020-03-24T09:08:49.417-07:00\",\n      \"description\": \"Windows Server 2008 R2 to 2012 R2 in place upgrade\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2012-r2-dc-in-place-upgrade\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2016\",\n      \"chargesUseFee\": false,\n      \"id\": \"2566166048269249507\",\n      \"licenseCode\": \"4819555115818134498\",\n      \"creationTimestamp\": \"2022-11-09T13:01:01.077-08:00\",\n      \"description\": \"Windows Server 2016 Standard Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2016\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2016-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"6580557195888974094\",\n      \"licenseCode\": \"4322823184804632846\",\n      \"creationTimestamp\": \"2018-10-05T15:38:26.021-07:00\",\n      \"description\": \"Windows Server 2016 BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2016-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2016-dc\",\n      \"chargesUseFee\": true,\n      \"id\": \"2483536683413682772\",\n      \"licenseCode\": \"1000213\",\n      \"creationTimestamp\": \"2016-05-02T14:35:54.000-07:00\",\n      \"description\": \"Windows Server 2016 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2016-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2016-dc-in-place-upgrade\",\n      \"chargesUseFee\": false,\n      \"id\": \"7616085184958426941\",\n      \"licenseCode\": \"5199320590876405565\",\n      \"creationTimestamp\": \"2022-03-04T09:52:18.982-08:00\",\n      \"description\": \"in-place upgraded to Windows Server 2016\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2016-dc-in-place-upgrade\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2016-nano\",\n      \"chargesUseFee\": true,\n      \"id\": \"2282594357842688596\",\n      \"licenseCode\": \"1000214\",\n      \"creationTimestamp\": \"2016-05-02T14:35:54.000-07:00\",\n      \"description\": \"Windows Server 2016 Nano\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2016-nano\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2019\",\n      \"chargesUseFee\": false,\n      \"id\": \"3525541779464104933\",\n      \"licenseCode\": \"4874454843789519845\",\n      \"creationTimestamp\": \"2022-11-09T13:00:58.674-08:00\",\n      \"description\": \"Windows Server 2019 Standard Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2019\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2019-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"1090214026507846099\",\n      \"licenseCode\": \"6532438499690676691\",\n      \"creationTimestamp\": \"2019-09-25T12:25:48.522-07:00\",\n      \"description\": \"Windows Server 2019 BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2019-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2019-dc\",\n      \"chargesUseFee\": false,\n      \"id\": \"5993475225685790965\",\n      \"licenseCode\": \"3389558045860892917\",\n      \"creationTimestamp\": \"2018-10-04T17:19:38.568-07:00\",\n      \"description\": \"Windows Server 2019 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2019-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2019-dc-in-place-upgrade\",\n      \"chargesUseFee\": false,\n      \"id\": \"7388112379630840967\",\n      \"licenseCode\": \"3156934045285215367\",\n      \"creationTimestamp\": \"2022-03-04T09:54:48.827-08:00\",\n      \"description\": \"in-place upgraded to Windows Server 2019\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2019-dc-in-place-upgrade\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2022\",\n      \"chargesUseFee\": false,\n      \"id\": \"8141439404167244305\",\n      \"licenseCode\": \"6107784707477449232\",\n      \"creationTimestamp\": \"2022-11-09T13:00:46.975-08:00\",\n      \"description\": \"Windows Server 2022 Standard Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2022\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2022-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"2150336909657452508\",\n      \"licenseCode\": \"2808834792899686364\",\n      \"creationTimestamp\": \"2021-08-25T11:51:31.527-07:00\",\n      \"description\": \"Windows Server 2022 BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2022-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2022-dc\",\n      \"chargesUseFee\": false,\n      \"id\": \"2525168283357630087\",\n      \"licenseCode\": \"4079807029871201927\",\n      \"creationTimestamp\": \"2021-09-02T08:40:24.070-07:00\",\n      \"description\": \"Windows Server 2022 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2022-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2022-dc-in-place-upgrade\",\n      \"chargesUseFee\": false,\n      \"id\": \"7118639573064740016\",\n      \"licenseCode\": \"4670175393034005680\",\n      \"creationTimestamp\": \"2022-03-04T09:54:39.255-08:00\",\n      \"description\": \"in-place upgraded to Windows Server 2022\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2022-dc-in-place-upgrade\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-20h2-dc\",\n      \"chargesUseFee\": false,\n      \"id\": \"2209136415345591070\",\n      \"licenseCode\": \"8578754948912497438\",\n      \"creationTimestamp\": \"2020-11-02T13:45:21.528-08:00\",\n      \"description\": \"Windows Server version 20H2 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-20h2-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-21h1-dc\",\n      \"chargesUseFee\": false,\n      \"id\": \"8661389914554199433\",\n      \"licenseCode\": \"7248135684629163401\",\n      \"creationTimestamp\": \"2021-04-29T08:40:22.527-07:00\",\n      \"description\": \"Windows Server version 21h1 Datacenter Edition\",\n      \"transferable\": true,\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-21h1-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-core\",\n      \"chargesUseFee\": true,\n      \"id\": \"7184832379764048457\",\n      \"licenseCode\": \"1000226\",\n      \"creationTimestamp\": \"2016-11-07T13:21:29.000-08:00\",\n      \"description\": \"Windows Server Core\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-core\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses\"\n}\n"
  },
  {
    "path": "test-data/gce1/json-dumps/compute-migs-aggregated.json",
    "content": "{\n  \"kind\": \"compute#instanceGroupManagerAggregatedList\",\n  \"id\": \"projects/gcpdiag-gce1-aaaa/aggregated/instanceGroupManagers\",\n  \"items\": {\n    \"regions/us-central1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-central1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-central1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-central2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-central2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-central2\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-west1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-west1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-west1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west1\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-east1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/asia-east1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-east1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-east1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-east1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-east1\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-northeast1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/asia-northeast1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-northeast1\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-southeast1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/asia-southeast1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-southeast1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-east4\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-east4'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-east4\"\n          }\n        ]\n      }\n    },\n    \"regions/australia-southeast1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/australia-southeast1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/australia-southeast1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-west2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west2\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west3\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-west3'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west3\"\n          }\n        ]\n      }\n    },\n    \"regions/southamerica-east1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/southamerica-east1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/southamerica-east1\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-south1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/asia-south1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-south1\"\n          }\n        ]\n      }\n    },\n    \"regions/northamerica-northeast1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/northamerica-northeast1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/northamerica-northeast1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west4\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-west4'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west4\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-north1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-north1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-north1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-west2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-west2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west2\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-east2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/asia-east2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-east2\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west6\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-west6'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west6\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-northeast2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/asia-northeast2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-northeast2\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-northeast3\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/asia-northeast3'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-northeast3\"\n          }\n        ]\n      }\n    },\n    \"regions/us-west3\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-west3'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west3\"\n          }\n        ]\n      }\n    },\n    \"regions/us-west4\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-west4'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west4\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-southeast2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/asia-southeast2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-southeast2\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-central2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-central2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-central2\"\n          }\n        ]\n      }\n    },\n    \"regions/northamerica-northeast2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/northamerica-northeast2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/northamerica-northeast2\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-south2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/asia-south2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-south2\"\n          }\n        ]\n      }\n    },\n    \"regions/australia-southeast2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/australia-southeast2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/australia-southeast2\"\n          }\n        ]\n      }\n    },\n    \"regions/southamerica-west1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/southamerica-west1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/southamerica-west1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-east7\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-east7'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-east7\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west8\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-west8'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west8\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west9\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-west9'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west9\"\n          }\n        ]\n      }\n    },\n    \"regions/us-east5\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-east5'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-east5\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-southwest1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-southwest1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-southwest1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-south1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-south1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-south1\"\n          }\n        ]\n      }\n    },\n    \"regions/me-west1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/me-west1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/me-west1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west12\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-west12'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west12\"\n          }\n        ]\n      }\n    },\n    \"regions/me-central1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/me-central1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/me-central1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west10\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-west10'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west10\"\n          }\n        ]\n      }\n    },\n    \"regions/me-central2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/me-central2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/me-central2\"\n          }\n        ]\n      }\n    },\n    \"regions/africa-south1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/africa-south1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/africa-south1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-west8\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-west8'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west8\"\n          }\n        ]\n      }\n    },\n    \"regions/northamerica-south1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/northamerica-south1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/northamerica-south1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-north2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-north2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-north2\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-central1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-central1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-central1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central1-f\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-central1-f'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central1-f\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-central2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-central2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-central2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central2-d\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-central2-d'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central2-d\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west1-d\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west1-d'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west1-d\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-east1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-east1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-east1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east1-d\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east1-d'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east1-d\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-southeast1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-southeast1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-southeast1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east4-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east4-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east4-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east4-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east4-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east4-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east4-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east4-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east4-c\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/australia-southeast1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/australia-southeast1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/australia-southeast1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west3-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west3-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west3-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west3-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west3-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west3-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west3-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west3-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west3-b\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-east1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/southamerica-east1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-east1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-east1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/southamerica-east1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-east1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-east1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/southamerica-east1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-east1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-south1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-south1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-south1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-northeast1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-northeast1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-northeast1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west4-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west4-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west4-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west4-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west4-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west4-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west4-a\": {\n      \"instanceGroupManagers\": [\n        {\n          \"kind\": \"compute#instanceGroupManager\",\n          \"id\": \"8122805250387700905\",\n          \"creationTimestamp\": \"2025-02-06T07:16:22.950-08:00\",\n          \"name\": \"gke-gke1-default-pool-35923fbc-grp\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a\",\n          \"instanceTemplate\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/instanceTemplates/gke-gke1-default-pool-35923fbc\",\n          \"versions\": [\n            {\n              \"instanceTemplate\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/instanceTemplates/gke-gke1-default-pool-35923fbc\",\n              \"targetSize\": {\n                \"calculated\": 1\n              }\n            }\n          ],\n          \"instanceGroup\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups/gke-gke1-default-pool-35923fbc-grp\",\n          \"baseInstanceName\": \"gke-gke1-default-pool-35923fbc\",\n          \"fingerprint\": \"1CgCkMYBqiQ=\",\n          \"currentActions\": {\n            \"none\": 1,\n            \"creating\": 0,\n            \"creatingWithoutRetries\": 0,\n            \"verifying\": 0,\n            \"recreating\": 0,\n            \"deleting\": 0,\n            \"abandoning\": 0,\n            \"restarting\": 0,\n            \"refreshing\": 0,\n            \"suspending\": 0,\n            \"resuming\": 0,\n            \"stopping\": 0,\n            \"starting\": 0\n          },\n          \"status\": {\n            \"isStable\": true,\n            \"allInstancesConfig\": {\n              \"effective\": true\n            },\n            \"versionTarget\": {\n              \"isReached\": true\n            },\n            \"stateful\": {\n              \"hasStatefulConfig\": false,\n              \"perInstanceConfigs\": {\n                \"allEffective\": true\n              }\n            }\n          },\n          \"targetSize\": 1,\n          \"targetStoppedSize\": 0,\n          \"targetSuspendedSize\": 0,\n          \"listManagedInstancesResults\": \"PAGINATED\",\n          \"standbyPolicy\": {\n            \"mode\": \"MANUAL\"\n          },\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-35923fbc-grp\",\n          \"updatePolicy\": {\n            \"type\": \"OPPORTUNISTIC\",\n            \"minimalAction\": \"REPLACE\",\n            \"maxSurge\": {\n              \"fixed\": 1,\n              \"calculated\": 1\n            },\n            \"maxUnavailable\": {\n              \"fixed\": 1,\n              \"calculated\": 1\n            },\n            \"replacementMethod\": \"SUBSTITUTE\"\n          },\n          \"instanceLifecyclePolicy\": {\n            \"forceUpdateOnRepair\": \"YES\",\n            \"defaultActionOnFailure\": \"REPAIR\"\n          },\n          \"satisfiesPzi\": true,\n          \"satisfiesPzs\": true\n        },\n        {\n          \"kind\": \"compute#instanceGroupManager\",\n          \"id\": \"1150095616799314165\",\n          \"creationTimestamp\": \"2025-02-05T01:23:38.353-08:00\",\n          \"name\": \"mig\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a\",\n          \"instanceTemplate\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/instanceTemplates/mig-template\",\n          \"versions\": [\n            {\n              \"instanceTemplate\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/instanceTemplates/mig-template\",\n              \"targetSize\": {\n                \"calculated\": 2\n              }\n            }\n          ],\n          \"instanceGroup\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups/mig\",\n          \"baseInstanceName\": \"mig\",\n          \"fingerprint\": \"5RLx-oKUGrQ=\",\n          \"currentActions\": {\n            \"none\": 2,\n            \"creating\": 0,\n            \"creatingWithoutRetries\": 0,\n            \"verifying\": 0,\n            \"recreating\": 0,\n            \"deleting\": 0,\n            \"abandoning\": 0,\n            \"restarting\": 0,\n            \"refreshing\": 0,\n            \"suspending\": 0,\n            \"resuming\": 0,\n            \"stopping\": 0,\n            \"starting\": 0\n          },\n          \"status\": {\n            \"isStable\": true,\n            \"allInstancesConfig\": {\n              \"effective\": true\n            },\n            \"versionTarget\": {\n              \"isReached\": true\n            },\n            \"stateful\": {\n              \"hasStatefulConfig\": false,\n              \"perInstanceConfigs\": {\n                \"allEffective\": true\n              }\n            }\n          },\n          \"targetSize\": 2,\n          \"targetStoppedSize\": 0,\n          \"targetSuspendedSize\": 0,\n          \"listManagedInstancesResults\": \"PAGELESS\",\n          \"standbyPolicy\": {\n            \"mode\": \"MANUAL\"\n          },\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroupManagers/mig\",\n          \"updatePolicy\": {\n            \"type\": \"OPPORTUNISTIC\",\n            \"minimalAction\": \"REPLACE\",\n            \"maxSurge\": {\n              \"fixed\": 1,\n              \"calculated\": 1\n            },\n            \"maxUnavailable\": {\n              \"fixed\": 1,\n              \"calculated\": 1\n            },\n            \"replacementMethod\": \"SUBSTITUTE\"\n          },\n          \"instanceLifecyclePolicy\": {\n            \"forceUpdateOnRepair\": \"NO\",\n            \"defaultActionOnFailure\": \"REPAIR\"\n          },\n          \"satisfiesPzi\": true,\n          \"satisfiesPzs\": true\n        }\n      ]\n    },\n    \"zones/europe-north1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-north1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-north1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-north1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-east2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-east2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-east2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west6-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west6-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west6-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west6-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west6-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west6-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west6-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west6-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west6-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast3-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast3-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast3-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast3-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast3-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast3-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast3-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast3-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast3-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west3-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west3-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west3-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west3-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west3-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west3-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west3-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west3-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west3-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west4-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west4-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west4-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west4-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west4-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west4-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west4-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west4-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west4-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-southeast2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-southeast2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-southeast2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-central2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-central2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-central2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-central2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-central2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-central2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-central2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-central2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-central2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-northeast2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-northeast2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-northeast2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-south2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-south2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-south2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/australia-southeast2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/australia-southeast2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/australia-southeast2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-west1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/southamerica-west1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-west1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-west1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/southamerica-west1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-west1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-west1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/southamerica-west1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-west1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east7-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east7-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east7-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east7-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east7-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east7-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east7-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east7-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east7-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west8-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west8-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west8-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west8-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west8-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west8-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west8-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west8-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west8-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west9-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west9-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west9-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west9-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west9-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west9-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west9-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west9-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west9-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east5-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east5-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east5-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east5-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east5-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east5-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east5-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east5-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east5-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-southwest1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-southwest1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-southwest1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-southwest1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-southwest1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-southwest1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-southwest1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-southwest1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-southwest1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-south1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-south1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-south1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-south1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-south1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-south1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-south1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-south1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-south1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-west1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-west1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-west1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-west1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-west1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-west1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/me-west1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-west1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-west1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west12-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west12-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west12-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west12-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west12-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west12-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west12-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west12-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west12-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-central1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-central1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-central1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west10-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west10-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west10-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west10-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west10-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west10-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west10-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west10-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west10-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-central2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-central2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-central2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/africa-south1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/africa-south1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/africa-south1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/africa-south1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/africa-south1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/africa-south1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/africa-south1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/africa-south1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/africa-south1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west8-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west8-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west8-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west8-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west8-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west8-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west8-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west8-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west8-b\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-south1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-south1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-south1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-south1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-south1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-south1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-south1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-south1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-south1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-north2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-north2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-north2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north2-b\"\n          }\n        ]\n      }\n    }\n  },\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/aggregated/instanceGroupManagers\"\n}\n"
  },
  {
    "path": "test-data/gce1/json-dumps/compute-migs-europe-west1-b.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instanceGroupManagers\",\n  \"items\": [\n    {\n      \"kind\": \"compute#instanceGroupManager\",\n      \"id\": \"1906946679224250602\",\n      \"creationTimestamp\": \"2022-04-26T08:21:41.088-07:00\",\n      \"name\": \"gke-gke1-default-pool-35923fbc-grp\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b\",\n      \"instanceTemplate\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/instanceTemplates/gke-gke1-default-pool-35923fbc\",\n      \"versions\": [\n        {\n          \"instanceTemplate\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/instanceTemplates/gke-gke1-default-pool-35923fbc\",\n          \"targetSize\": {\n            \"calculated\": 4\n          }\n        }\n      ],\n      \"instanceGroup\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instanceGroups/gke-gke1-default-pool-35923fbc-grp\",\n      \"baseInstanceName\": \"gke-gke1-default-pool-35923fbc\",\n      \"fingerprint\": \"cFBmeZR_JvQ=\",\n      \"currentActions\": {\n        \"none\": 4,\n        \"creating\": 0,\n        \"creatingWithoutRetries\": 0,\n        \"verifying\": 0,\n        \"recreating\": 0,\n        \"deleting\": 0,\n        \"abandoning\": 0,\n        \"restarting\": 0,\n        \"refreshing\": 0,\n        \"suspending\": 0,\n        \"resuming\": 0,\n        \"stopping\": 0,\n        \"starting\": 0\n      },\n      \"status\": {\n        \"isStable\": true,\n        \"versionTarget\": {\n          \"isReached\": true\n        },\n        \"stateful\": {\n          \"hasStatefulConfig\": false,\n          \"perInstanceConfigs\": {\n            \"allEffective\": true\n          }\n        }\n      },\n      \"targetSize\": 4,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instanceGroupManagers/gke-gke1-default-pool-35923fbc-grp\",\n      \"updatePolicy\": {\n        \"type\": \"OPPORTUNISTIC\",\n        \"minimalAction\": \"REPLACE\",\n        \"maxSurge\": {\n          \"fixed\": 1,\n          \"calculated\": 1\n        },\n        \"maxUnavailable\": {\n          \"fixed\": 1,\n          \"calculated\": 1\n        },\n        \"replacementMethod\": \"SUBSTITUTE\"\n      }\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instanceGroupManagers\",\n  \"kind\": \"compute#instanceGroupManagerList\"\n}\n"
  },
  {
    "path": "test-data/gce1/json-dumps/compute-migs-europe-west2-b.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gce1-aaaa/zones/europe-west2-b/instanceGroupManagers\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west2-b/instanceGroupManagers\",\n  \"kind\": \"compute#instanceGroupManagerList\"\n}\n"
  },
  {
    "path": "test-data/gce1/json-dumps/compute-migs-europe-west4-a.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroupManagers\",\n  \"items\": [\n    {\n      \"kind\": \"compute#instanceGroupManager\",\n      \"id\": \"7183453391228875571\",\n      \"creationTimestamp\": \"2022-04-26T08:21:00.715-07:00\",\n      \"name\": \"mig\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a\",\n      \"instanceTemplate\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/instanceTemplates/mig-template\",\n      \"versions\": [\n        {\n          \"instanceTemplate\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/instanceTemplates/mig-template\",\n          \"targetSize\": {\n            \"calculated\": 2\n          }\n        }\n      ],\n      \"instanceGroup\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups/mig\",\n      \"baseInstanceName\": \"mig\",\n      \"fingerprint\": \"lss-DXagYSg=\",\n      \"currentActions\": {\n        \"none\": 2,\n        \"creating\": 0,\n        \"creatingWithoutRetries\": 0,\n        \"verifying\": 0,\n        \"recreating\": 0,\n        \"deleting\": 0,\n        \"abandoning\": 0,\n        \"restarting\": 0,\n        \"refreshing\": 0,\n        \"suspending\": 0,\n        \"resuming\": 0,\n        \"stopping\": 0,\n        \"starting\": 0\n      },\n      \"status\": {\n        \"isStable\": true,\n        \"versionTarget\": {\n          \"isReached\": true\n        },\n        \"stateful\": {\n          \"hasStatefulConfig\": false,\n          \"perInstanceConfigs\": {\n            \"allEffective\": true\n          }\n        }\n      },\n      \"targetSize\": 2,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroupManagers/mig\",\n      \"updatePolicy\": {\n        \"type\": \"OPPORTUNISTIC\",\n        \"minimalAction\": \"REPLACE\",\n        \"maxSurge\": {\n          \"fixed\": 1,\n          \"calculated\": 1\n        },\n        \"maxUnavailable\": {\n          \"fixed\": 1,\n          \"calculated\": 1\n        },\n        \"replacementMethod\": \"SUBSTITUTE\"\n      }\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroupManagers\",\n  \"kind\": \"compute#instanceGroupManagerList\"\n}\n"
  },
  {
    "path": "test-data/gce1/json-dumps/compute-negs-empty.json",
    "content": ""
  },
  {
    "path": "test-data/gce1/json-dumps/compute-negs-europe-west1-b.json",
    "content": "{\n  \"kind\": \"compute#networkEndpointGroupList\",\n  \"id\": \"projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/networkEndpointGroups\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/networkEndpointGroups\"\n}\n"
  },
  {
    "path": "test-data/gce1/json-dumps/compute-negs-europe-west4-b.json",
    "content": "{\n  \"kind\": \"compute#networkEndpointGroupList\",\n  \"id\": \"projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/networkEndpointGroups\",\n  \"items\": [\n    {\n      \"kind\": \"compute#networkEndpointGroup\",\n      \"id\": \"6733748123162931851\",\n      \"creationTimestamp\": \"2024-08-12T01:48:36.816-07:00\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/networkEndpointGroups/neg1\",\n      \"name\": \"neg1\",\n      \"networkEndpointType\": \"GCE_VM_IP_PORT\",\n      \"size\": 1,\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-b\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n      \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default\",\n      \"defaultPort\": 90\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-b/networkEndpointGroups\"\n}\n"
  },
  {
    "path": "test-data/gce1/json-dumps/compute-network-default.json",
    "content": "{\n  \"kind\": \"compute#network\",\n  \"id\": \"1705778614467146592\",\n  \"creationTimestamp\": \"2022-04-26T08:19:43.703-07:00\",\n  \"name\": \"default\",\n  \"description\": \"Default network for the project\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n  \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/1705778614467146592\",\n  \"autoCreateSubnetworks\": true,\n  \"subnetworks\": [\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-northeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west3/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-southeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/australia-southeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-west3/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-east4/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-south1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west9/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west6/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-northeast3/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-southwest1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/northamerica-northeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-east1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-east5/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-southeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-northeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-east2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-central1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-central2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-east7/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/southamerica-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-west4/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west8/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-east1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-south2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/southamerica-east1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/northamerica-northeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-north1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/australia-southeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-west2/subnetworks/default\"\n  ],\n  \"routingConfig\": {\n    \"routingMode\": \"REGIONAL\"\n  },\n  \"networkFirewallPolicyEnforcementOrder\": \"AFTER_CLASSIC_FIREWALL\"\n}\n"
  },
  {
    "path": "test-data/gce1/json-dumps/compute-network-routes.json",
    "content": "{\n  \"kind\": \"compute#routeList\",\n  \"id\": \"projects/gcpdiag-gce1-aaaa/global/routes\",\n  \"items\": [\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"2670539294019165993\",\n      \"creationTimestamp\": \"2023-03-15T03:45:27.008-07:00\",\n      \"name\": \"default\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n      \"destRange\": \"0.0.0.0/0\",\n      \"priority\": 1,\n      \"nextHopGateway\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/gateways/default-internet-gateway\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/routes/default\"\n    },\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"2178241415220915600\",\n      \"creationTimestamp\": \"2023-02-09T03:05:35.107-08:00\",\n      \"name\": \"peering-route-299fcb697f2532b0\",\n      \"description\": \"Auto generated route via peering [peering-r544dd974f1bc5396-tp-default].\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n      \"destRange\": \"192.168.0.0/26\",\n      \"priority\": 0,\n      \"nextHopPeering\": \"peering-r544dd974f1bc5396-tp-default\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/routes/peering-route-299fcb697f2532b0\"\n    },\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"8223547831511088095\",\n      \"creationTimestamp\": \"2023-03-10T06:56:48.979-08:00\",\n      \"name\": \"real-allow-kms\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n      \"tags\": [\n        \"windows\"\n      ],\n      \"destRange\": \"35.190.247.13/32\",\n      \"priority\": 1,\n      \"nextHopGateway\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/gateways/default-internet-gateway\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/routes/real-allow-kms\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/routes\"\n}\n"
  },
  {
    "path": "test-data/gce1/json-dumps/compute-project.json",
    "content": "{\n  \"commonInstanceMetadata\": {\n    \"fingerprint\": \"5WfGmP2rsbA=\",\n    \"items\": [\n      {\n        \"key\": \"serial-port-logging-enable\",\n        \"value\": \"true\"\n      },\n      {\n        \"key\": \"gke-gke1-f36cf6dd-cidr\",\n        \"value\": \"default:10.0.0.0/14\"\n      }\n    ],\n    \"kind\": \"compute#metadata\"\n  },\n  \"creationTimestamp\": \"2022-04-26T08:19:36.093-07:00\",\n  \"defaultNetworkTier\": \"PREMIUM\",\n  \"defaultServiceAccount\": \"12340001-compute@developer.gserviceaccount.com\",\n  \"id\": \"7145890083999429480\",\n  \"kind\": \"compute#project\",\n  \"name\": \"gcpdiag-gce1-aaaa\",\n  \"quotas\": [\n    {\n      \"limit\": 10000,\n      \"metric\": \"SNAPSHOTS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 30,\n      \"metric\": \"NETWORKS\",\n      \"usage\": 1\n    },\n    {\n      \"limit\": 500,\n      \"metric\": \"FIREWALLS\",\n      \"usage\": 8\n    },\n    {\n      \"limit\": 5000,\n      \"metric\": \"IMAGES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 175,\n      \"metric\": \"STATIC_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 300,\n      \"metric\": \"ROUTES\",\n      \"usage\": 5\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"FORWARDING_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 500,\n      \"metric\": \"TARGET_POOLS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 500,\n      \"metric\": \"HEALTH_CHECKS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 575,\n      \"metric\": \"IN_USE_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 500,\n      \"metric\": \"TARGET_INSTANCES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_HTTP_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"URL_MAPS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"BACKEND_SERVICES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1000,\n      \"metric\": \"INSTANCE_TEMPLATES\",\n      \"usage\": 2\n    },\n    {\n      \"limit\": 50,\n      \"metric\": \"TARGET_VPN_GATEWAYS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"VPN_TUNNELS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 30,\n      \"metric\": \"BACKEND_BUCKETS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 20,\n      \"metric\": \"ROUTERS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_SSL_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_HTTPS_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"SSL_CERTIFICATES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 275,\n      \"metric\": \"SUBNETWORKS\",\n      \"usage\": 35\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_TCP_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 10,\n      \"metric\": \"SECURITY_POLICIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 200,\n      \"metric\": \"SECURITY_POLICY_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1000,\n      \"metric\": \"XPN_SERVICE_PROJECTS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"PACKET_MIRRORINGS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1000,\n      \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 6,\n      \"metric\": \"INTERCONNECTS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 5000,\n      \"metric\": \"GLOBAL_INTERNAL_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 50,\n      \"metric\": \"VPN_GATEWAYS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 5000,\n      \"metric\": \"MACHINE_IMAGES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 20,\n      \"metric\": \"SECURITY_POLICY_CEVAL_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 50,\n      \"metric\": \"EXTERNAL_VPN_GATEWAYS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1,\n      \"metric\": \"PUBLIC_ADVERTISED_PREFIXES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 10,\n      \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1024,\n      \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"INTERNAL_TRAFFIC_DIRECTOR_FORWARDING_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"GLOBAL_EXTERNAL_MANAGED_FORWARDING_RULES\",\n      \"usage\": 0\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa\",\n  \"xpnProjectStatus\": \"UNSPECIFIED_XPN_PROJECT_STATUS\"\n}\n"
  },
  {
    "path": "test-data/gce1/json-dumps/compute-regions.json",
    "content": "{\n  \"kind\": \"compute#regionList\",\n  \"id\": \"projects/gcpdiag-gce1-aaaa/regions\",\n  \"items\": [\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1220\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east1\",\n      \"description\": \"asia-east1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-east1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-east1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-east1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-east1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1370\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east2\",\n      \"description\": \"asia-east2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-east2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-east2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-east2-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-east2\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1250\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast1\",\n      \"description\": \"asia-northeast1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-northeast1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-northeast1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-northeast1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-northeast1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1390\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast2\",\n      \"description\": \"asia-northeast2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-northeast2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-northeast2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-northeast2-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-northeast2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1410\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast3\",\n      \"description\": \"asia-northeast3\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-northeast3-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-northeast3-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-northeast3-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-northeast3\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1320\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south1\",\n      \"description\": \"asia-south1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-south1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-south1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-south1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-south1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1470\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south2\",\n      \"description\": \"asia-south2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-south2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-south2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-south2-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 5,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-south2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1260\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast1\",\n      \"description\": \"asia-southeast1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-southeast1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-southeast1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-southeast1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-southeast1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1440\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast2\",\n      \"description\": \"asia-southeast2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-southeast2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-southeast2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-southeast2-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-southeast2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1280\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast1\",\n      \"description\": \"australia-southeast1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/australia-southeast1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/australia-southeast1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/australia-southeast1-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/australia-southeast1\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1480\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast2\",\n      \"description\": \"australia-southeast2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/australia-southeast2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/australia-southeast2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/australia-southeast2-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 5,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/australia-southeast2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1450\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-central2\",\n      \"description\": \"europe-central2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-central2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-central2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-central2-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 5,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-central2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1350\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-north1\",\n      \"description\": \"europe-north1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-north1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-north1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-north1-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-north1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1100\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west1\",\n      \"description\": \"europe-west1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-d\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 4\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 400\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 4\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 1\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 1\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 4\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1290\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west2\",\n      \"description\": \"europe-west2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west2-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west2\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1300\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west3\",\n      \"description\": \"europe-west3\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west3-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west3-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west3-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west3\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1340\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west4\",\n      \"description\": \"europe-west4\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 2\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 62\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 3\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 1\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 4\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 2\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1380\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west6\",\n      \"description\": \"europe-west6\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west6-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west6-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west6-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west6\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1510\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west8\",\n      \"description\": \"europe-west8\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west8-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west8-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west8-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 4096,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 5,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west8\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1330\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast1\",\n      \"description\": \"northamerica-northeast1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/northamerica-northeast1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/northamerica-northeast1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/northamerica-northeast1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/northamerica-northeast1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1460\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast2\",\n      \"description\": \"northamerica-northeast2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/northamerica-northeast2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/northamerica-northeast2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/northamerica-northeast2-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 5,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/northamerica-northeast2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1310\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-east1\",\n      \"description\": \"southamerica-east1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/southamerica-east1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/southamerica-east1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/southamerica-east1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/southamerica-east1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1490\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-west1\",\n      \"description\": \"southamerica-west1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/southamerica-west1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/southamerica-west1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/southamerica-west1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 5,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/southamerica-west1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1000\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1\",\n      \"description\": \"us-central1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-central1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-central1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-central1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-central1-f\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-central1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1230\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east1\",\n      \"description\": \"us-east1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-east1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-east1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-east1-d\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-east1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1270\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east4\",\n      \"description\": \"us-east4\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-east4-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-east4-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-east4-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-east4\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1210\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west1\",\n      \"description\": \"us-west1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-west1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-west1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-west1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-west1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1360\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west2\",\n      \"description\": \"us-west2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-west2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-west2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-west2-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-west2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1420\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west3\",\n      \"description\": \"us-west3\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-west3-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-west3-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-west3-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-west3\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1430\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west4\",\n      \"description\": \"us-west4\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-west4-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-west4-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-west4-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-west4\",\n      \"supportsPzs\": false\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions\"\n}\n"
  },
  {
    "path": "test-data/gce1/json-dumps/compute-serial-port-output-1010101010.json",
    "content": "{\n  \"kind\": \"compute#serialPortOutput\",\n  \"contents\": \"\\u001b[2J\\u001b[01;01H\\u001b[=3h\\u001b[2J\\u001b[01;01H\\u001b[2J\\u001b[01;01H\\u001b[=3h\\u001b[2J\\u001b[01;01HCSM BBS Table full.\\r\\nBdsDxe: loading Boot0001 \\\"UEFI Google PersistentDisk \\\" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\\r\\nBdsDxe: starting Boot0001 \\\"UEFI Google PersistentDisk \\\" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\\r\\n\\r\\nUEFI: Attempting to start image.\\r\\nDescription: UEFI Google PersistentDisk \\r\\nFilePath: PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\\r\\nOptionNumber: 1.\\r\\n[   20.5] cloud-init[56]: Cloud-init v. 21.4 finished at Thu, 13 Apr 2023 13:53:15 +0000. Datasource DataSourceGCE.  Up 20.49 seconds\",\n  \"start\": \"0\",\n  \"next\": \"63414\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/1010101010/serialPortOutput\"\n}\n"
  },
  {
    "path": "test-data/gce1/json-dumps/compute-serial-port-output-1010101011.json",
    "content": "{\n  \"kind\": \"compute#serialPortOutput\",\n  \"contents\": \"\\u001b[2J\\u001b[01;01H\\u001b[=3h\\u001b[2J\\u001b[01;01H\\u001b[2J\\u001b[01;01H\\u001b[=3h\\u001b[2J\\u001b[01;01HCSM BBS Table full.\\r\\nBdsDxe: loading Boot0001 \\\"UEFI Google PersistentDisk \\\" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\\r\\nBdsDxe: starting Boot0001 \\\"UEFI Google PersistentDisk \\\" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\\r\\n\\r\\nUEFI: Attempting to start image.\\r\\nDescription: UEFI Google PersistentDisk \\r\\nFilePath: PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\\r\\nOptionNumber: 1.\\r\\n[   20.5] cloud-init[56]: Cloud-init v. 21.4 finished at Thu, 13 Apr 2023 13:53:15 +0000. Datasource DataSourceGCE.  Up 20.49 seconds\",\n  \"start\": \"0\",\n  \"next\": \"63414\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/1010101010/serialPortOutput\"\n}\n"
  },
  {
    "path": "test-data/gce1/json-dumps/compute-subnetwork-policy.json",
    "content": "{\n  \"bindings\": [\n    {\n      \"members\": [\n        \"serviceAccount:gke1sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/compute.networkUser\"\n    }\n  ],\n  \"etag\": \"BwXba-kLoiA=\",\n  \"version\": 1\n}\n"
  },
  {
    "path": "test-data/gce1/json-dumps/compute-subnetworks-aggregated.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gke1-aaaa/aggregated/subnetworks\",\n  \"items\": {\n    \"regions/asia-east1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.626-07:00\",\n          \"fingerprint\": \"ExVityxQ7Zw=\",\n          \"gatewayAddress\": \"10.140.0.1\",\n          \"id\": \"7865289181883843690\",\n          \"ipCidrRange\": \"10.140.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-east1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-east1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-east2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.735-07:00\",\n          \"fingerprint\": \"WEPpLpqTaII=\",\n          \"gatewayAddress\": \"10.170.0.1\",\n          \"id\": \"1625232185091474538\",\n          \"ipCidrRange\": \"10.170.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-east2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-east2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-northeast1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.546-07:00\",\n          \"fingerprint\": \"bQ24OL6A-_g=\",\n          \"gatewayAddress\": \"10.146.0.1\",\n          \"id\": \"1533136348119614570\",\n          \"ipCidrRange\": \"10.146.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-northeast2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.673-07:00\",\n          \"fingerprint\": \"V5llMO8nmmI=\",\n          \"gatewayAddress\": \"10.174.0.1\",\n          \"id\": \"9108510720326681706\",\n          \"ipCidrRange\": \"10.174.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-northeast3\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.690-07:00\",\n          \"fingerprint\": \"YvlSkRtP_4s=\",\n          \"gatewayAddress\": \"10.178.0.1\",\n          \"id\": \"4106072082002527338\",\n          \"ipCidrRange\": \"10.178.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast3\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast3/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-south1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.687-07:00\",\n          \"fingerprint\": \"wpauE-6Ls5k=\",\n          \"gatewayAddress\": \"10.160.0.1\",\n          \"id\": \"799045077667726442\",\n          \"ipCidrRange\": \"10.160.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-south1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-south1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-south2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.745-07:00\",\n          \"fingerprint\": \"Q7YnvFsvcIs=\",\n          \"gatewayAddress\": \"10.190.0.1\",\n          \"id\": \"5569943562367845482\",\n          \"ipCidrRange\": \"10.190.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-south2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-south2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-southeast1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.680-07:00\",\n          \"fingerprint\": \"9qw_IGoz63I=\",\n          \"gatewayAddress\": \"10.148.0.1\",\n          \"id\": \"1399967472608134250\",\n          \"ipCidrRange\": \"10.148.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-southeast1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-southeast1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-southeast2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.669-07:00\",\n          \"fingerprint\": \"A364yIYGdbo=\",\n          \"gatewayAddress\": \"10.184.0.1\",\n          \"id\": \"925018594468217962\",\n          \"ipCidrRange\": \"10.184.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-southeast2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-southeast2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/australia-southeast1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.681-07:00\",\n          \"fingerprint\": \"nW5ufndV5Es=\",\n          \"gatewayAddress\": \"10.152.0.1\",\n          \"id\": \"3491955985615471722\",\n          \"ipCidrRange\": \"10.152.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/australia-southeast1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/australia-southeast1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/australia-southeast2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.656-07:00\",\n          \"fingerprint\": \"DrRYoQz8MQQ=\",\n          \"gatewayAddress\": \"10.192.0.1\",\n          \"id\": \"3881444575162188906\",\n          \"ipCidrRange\": \"10.192.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/australia-southeast2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/australia-southeast2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-central2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.681-07:00\",\n          \"fingerprint\": \"Fkp5Ia_kWjU=\",\n          \"gatewayAddress\": \"10.186.0.1\",\n          \"id\": \"7309165993080177770\",\n          \"ipCidrRange\": \"10.186.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-central2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-central2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-north1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.676-07:00\",\n          \"fingerprint\": \"uAKn9PpojKc=\",\n          \"gatewayAddress\": \"10.166.0.1\",\n          \"id\": \"5895305034600072298\",\n          \"ipCidrRange\": \"10.166.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-north1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-north1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-southwest1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:34.478-07:00\",\n          \"fingerprint\": \"7puHFtbgohs=\",\n          \"gatewayAddress\": \"10.204.0.1\",\n          \"id\": \"6503801733215994985\",\n          \"ipCidrRange\": \"10.204.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-southwest1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-southwest1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.565-07:00\",\n          \"fingerprint\": \"RYxGa4BdqVw=\",\n          \"gatewayAddress\": \"10.132.0.1\",\n          \"id\": \"4254674819412968554\",\n          \"ipCidrRange\": \"10.132.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.592-07:00\",\n          \"fingerprint\": \"InwBX-PAmxE=\",\n          \"gatewayAddress\": \"10.154.0.1\",\n          \"id\": \"8673388756094993514\",\n          \"ipCidrRange\": \"10.154.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west3\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:34.435-07:00\",\n          \"fingerprint\": \"jtqiYE_BvSA=\",\n          \"gatewayAddress\": \"10.156.0.1\",\n          \"id\": \"2730999123496453225\",\n          \"ipCidrRange\": \"10.156.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west3\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west3/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west4\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.623-07:00\",\n          \"fingerprint\": \"sfuW5PvbdEI=\",\n          \"gatewayAddress\": \"10.164.0.1\",\n          \"id\": \"1461822054006834282\",\n          \"ipCidrRange\": \"10.164.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": true,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4\",\n          \"secondaryIpRanges\": [\n            {\n              \"ipCidrRange\": \"10.85.0.0/17\",\n              \"rangeName\": \"gke-autopilot-gke1-pods-6a0c2f5b\"\n            },\n            {\n              \"ipCidrRange\": \"10.85.128.0/22\",\n              \"rangeName\": \"gke-autopilot-gke1-services-6a0c2f5b\"\n            },\n            {\n              \"ipCidrRange\": \"10.60.0.0/20\",\n              \"rangeName\": \"gke-gke4-services-e4411110\"\n            },\n            {\n              \"ipCidrRange\": \"10.56.0.0/14\",\n              \"rangeName\": \"gke-gke4-pods-e4411110\"\n            },\n            {\n              \"ipCidrRange\": \"10.60.96.0/22\",\n              \"rangeName\": \"gke-autopilot-gke2-services-3fbbc734\"\n            },\n            {\n              \"ipCidrRange\": \"10.60.128.0/17\",\n              \"rangeName\": \"gke-autopilot-gke2-pods-3fbbc734\"\n            }\n          ],\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        },\n        {\n          \"creationTimestamp\": \"2022-10-11T07:16:29.795-07:00\",\n          \"enableFlowLogs\": false,\n          \"fingerprint\": \"PE0z2PNqD2Y=\",\n          \"gatewayAddress\": \"192.168.0.1\",\n          \"id\": \"7423481761753515090\",\n          \"ipCidrRange\": \"192.168.0.0/24\",\n          \"kind\": \"compute#subnetwork\",\n          \"logConfig\": {\n            \"aggregationInterval\": \"INTERVAL_5_SEC\",\n            \"enable\": false,\n            \"flowSampling\": 0.5,\n            \"metadata\": \"INCLUDE_ALL_METADATA\"\n          },\n          \"name\": \"gke1-subnet\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4\",\n          \"secondaryIpRanges\": [\n            {\n              \"ipCidrRange\": \"192.168.1.0/24\",\n              \"rangeName\": \"gke1-secondary-range-pod\"\n            },\n            {\n              \"ipCidrRange\": \"192.168.2.0/24\",\n              \"rangeName\": \"gke1-secondary-range-svc\"\n            }\n          ],\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/gke1-subnet\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west6\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.530-07:00\",\n          \"fingerprint\": \"Ic4Y34BRjOE=\",\n          \"gatewayAddress\": \"10.172.0.1\",\n          \"id\": \"3567972882370315370\",\n          \"ipCidrRange\": \"10.172.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west6\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west6/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west8\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.586-07:00\",\n          \"fingerprint\": \"_MhtvVpnR5c=\",\n          \"gatewayAddress\": \"10.198.0.1\",\n          \"id\": \"5905962051052291178\",\n          \"ipCidrRange\": \"10.198.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west8\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west8/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west9\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.638-07:00\",\n          \"fingerprint\": \"0uz_7VhFjLE=\",\n          \"gatewayAddress\": \"10.200.0.1\",\n          \"id\": \"5697832252330263658\",\n          \"ipCidrRange\": \"10.200.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west9\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west9/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/me-west1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.741-07:00\",\n          \"fingerprint\": \"70g6IoCP0CM=\",\n          \"gatewayAddress\": \"10.208.0.1\",\n          \"id\": \"2381367997960340586\",\n          \"ipCidrRange\": \"10.208.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/me-west1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/me-west1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/northamerica-northeast1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.499-07:00\",\n          \"fingerprint\": \"vNYpwgnkSCI=\",\n          \"gatewayAddress\": \"10.162.0.1\",\n          \"id\": \"5798419596128601194\",\n          \"ipCidrRange\": \"10.162.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/northamerica-northeast1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/northamerica-northeast1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/northamerica-northeast2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.493-07:00\",\n          \"fingerprint\": \"7ik2BWFfN84=\",\n          \"gatewayAddress\": \"10.188.0.1\",\n          \"id\": \"711542983096845418\",\n          \"ipCidrRange\": \"10.188.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/northamerica-northeast2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/northamerica-northeast2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/southamerica-east1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.668-07:00\",\n          \"fingerprint\": \"pqhad5TnzVc=\",\n          \"gatewayAddress\": \"10.158.0.1\",\n          \"id\": \"2301799042992620650\",\n          \"ipCidrRange\": \"10.158.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/southamerica-east1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/southamerica-east1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/southamerica-west1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.648-07:00\",\n          \"fingerprint\": \"ea50MPZjruA=\",\n          \"gatewayAddress\": \"10.194.0.1\",\n          \"id\": \"6124576470534243434\",\n          \"ipCidrRange\": \"10.194.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/southamerica-west1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/southamerica-west1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-central1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.382-07:00\",\n          \"fingerprint\": \"pb4O-4ISjAE=\",\n          \"gatewayAddress\": \"10.128.0.1\",\n          \"id\": \"6250438653192488042\",\n          \"ipCidrRange\": \"10.128.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-central1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-central1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-east1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.368-07:00\",\n          \"fingerprint\": \"bvN-N8FS9U4=\",\n          \"gatewayAddress\": \"10.142.0.1\",\n          \"id\": \"1443866556678849642\",\n          \"ipCidrRange\": \"10.142.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-east4\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.486-07:00\",\n          \"fingerprint\": \"jew6EZUeYrM=\",\n          \"gatewayAddress\": \"10.150.0.1\",\n          \"id\": \"5871230243962405994\",\n          \"ipCidrRange\": \"10.150.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-east5\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.504-07:00\",\n          \"fingerprint\": \"KVZisxAl1CI=\",\n          \"gatewayAddress\": \"10.202.0.1\",\n          \"id\": \"4332627157280408682\",\n          \"ipCidrRange\": \"10.202.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east5\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east5/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-east7\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T09:13:19.272-07:00\",\n          \"fingerprint\": \"BEZq6cSPkco=\",\n          \"gatewayAddress\": \"10.196.0.1\",\n          \"id\": \"7977046348344600816\",\n          \"ipCidrRange\": \"10.196.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east7\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east7/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-south1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.435-07:00\",\n          \"fingerprint\": \"1Se61ZXzpjY=\",\n          \"gatewayAddress\": \"10.206.0.1\",\n          \"id\": \"7154466601132672106\",\n          \"ipCidrRange\": \"10.206.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-south1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-south1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-west1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.499-07:00\",\n          \"fingerprint\": \"E0k7cQEp7_I=\",\n          \"gatewayAddress\": \"10.138.0.1\",\n          \"id\": \"5323136092791686250\",\n          \"ipCidrRange\": \"10.138.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-west2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.549-07:00\",\n          \"fingerprint\": \"-JD9bbh-QlA=\",\n          \"gatewayAddress\": \"10.168.0.1\",\n          \"id\": \"4458757238523741290\",\n          \"ipCidrRange\": \"10.168.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-west3\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.524-07:00\",\n          \"fingerprint\": \"P01BE480Q2I=\",\n          \"gatewayAddress\": \"10.180.0.1\",\n          \"id\": \"1135562538472752234\",\n          \"ipCidrRange\": \"10.180.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west3\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west3/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-west4\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.521-07:00\",\n          \"fingerprint\": \"2k-WBaR7JKQ=\",\n          \"gatewayAddress\": \"10.182.0.1\",\n          \"id\": \"7061406355024299114\",\n          \"ipCidrRange\": \"10.182.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west4\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west4/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    }\n  },\n  \"kind\": \"compute#subnetworkAggregatedList\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/aggregated/subnetworks\"\n}\n"
  },
  {
    "path": "test-data/gce1/json-dumps/compute-subnetworks-europe-west4.json",
    "content": "{\n  \"kind\": \"compute#subnetworkList\",\n  \"id\": \"projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks\",\n  \"items\": [\n    {\n      \"kind\": \"compute#subnetwork\",\n      \"id\": \"4774247690482065659\",\n      \"creationTimestamp\": \"2022-03-30T02:08:36.021-07:00\",\n      \"name\": \"default\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n      \"ipCidrRange\": \"10.164.0.0/20\",\n      \"gatewayAddress\": \"10.164.0.1\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default\",\n      \"privateIpGoogleAccess\": true,\n      \"secondaryIpRanges\": [\n        {\n          \"rangeName\": \"gke-gke4-services-93befb7e\",\n          \"ipCidrRange\": \"10.60.0.0/20\"\n        },\n        {\n          \"rangeName\": \"gke-gke4-pods-93befb7e\",\n          \"ipCidrRange\": \"10.56.0.0/14\"\n        },\n        {\n          \"rangeName\": \"gke-autopilot-gke1-services-19977223\",\n          \"ipCidrRange\": \"10.85.128.0/22\"\n        },\n        {\n          \"rangeName\": \"gke-autopilot-gke1-pods-19977223\",\n          \"ipCidrRange\": \"10.85.0.0/17\"\n        },\n        {\n          \"rangeName\": \"gke-autopilot-gke2-pods-65d1ba15\",\n          \"ipCidrRange\": \"10.60.128.0/17\"\n        },\n        {\n          \"rangeName\": \"gke-autopilot-gke2-services-65d1ba15\",\n          \"ipCidrRange\": \"10.60.96.0/22\"\n        }\n      ],\n      \"fingerprint\": \"-9hqGif0SQ0=\",\n      \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n      \"purpose\": \"PRIVATE\",\n      \"stackType\": \"IPV4_ONLY\"\n    },\n    {\n      \"kind\": \"compute#subnetwork\",\n      \"id\": \"1818761461517361320\",\n      \"creationTimestamp\": \"2022-03-30T02:09:27.964-07:00\",\n      \"name\": \"gke1-subnet\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n      \"ipCidrRange\": \"192.168.0.0/24\",\n      \"gatewayAddress\": \"192.168.0.1\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/gke1-subnet\",\n      \"privateIpGoogleAccess\": false,\n      \"secondaryIpRanges\": [\n        {\n          \"rangeName\": \"gke1-secondary-range-pod\",\n          \"ipCidrRange\": \"192.168.1.0/24\"\n        },\n        {\n          \"rangeName\": \"gke1-secondary-range-svc\",\n          \"ipCidrRange\": \"192.168.2.0/24\"\n        }\n      ],\n      \"fingerprint\": \"Ir2p9uebpiE=\",\n      \"enableFlowLogs\": false,\n      \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n      \"purpose\": \"PRIVATE\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"stackType\": \"IPV4_ONLY\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks\"\n}\n"
  },
  {
    "path": "test-data/gce1/json-dumps/compute-templates.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gce1-aaaa/global/instanceTemplates\",\n  \"items\": [\n    {\n      \"creationTimestamp\": \"2022-04-26T08:21:35.891-07:00\",\n      \"description\": \"\",\n      \"id\": \"4047445761213182736\",\n      \"kind\": \"compute#instanceTemplate\",\n      \"name\": \"gke-gke1-default-pool-35923fbc\",\n      \"properties\": {\n        \"canIpForward\": true,\n        \"disks\": [\n          {\n            \"autoDelete\": true,\n            \"boot\": true,\n            \"deviceName\": \"persistent-disk-0\",\n            \"index\": 0,\n            \"initializeParams\": {\n              \"diskSizeGb\": \"100\",\n              \"diskType\": \"pd-standard\",\n              \"labels\": {\n                \"gcp_doctor_test\": \"gke\",\n                \"goog-gke-node\": \"\"\n              },\n              \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-12110-gke2000-cos-89-16108-604-19-v220317-c-pre\"\n            },\n            \"kind\": \"compute#attachedDisk\",\n            \"mode\": \"READ_WRITE\",\n            \"type\": \"PERSISTENT\"\n          }\n        ],\n        \"labels\": {\n          \"gcp_doctor_test\": \"gke\",\n          \"goog-gke-node\": \"\"\n        },\n        \"machineType\": \"e2-small\",\n        \"metadata\": {\n          \"fingerprint\": \"REDACTED\",\n          \"items\": [\n            {\n              \"key\": \"kube-env\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"kubelet-config\",\n              \"value\": \"apiVersion: kubelet.config.k8s.io/v1beta1\\nauthentication:\\n  anonymous:\\n    enabled: false\\n  webhook:\\n    enabled: true\\n  x509:\\n    clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\\nauthorization:\\n  mode: Webhook\\ncgroupRoot: /\\nclusterDNS:\\n- 10.3.240.10\\nclusterDomain: cluster.local\\nenableDebuggingHandlers: true\\nevictionHard:\\n  memory.available: 100Mi\\n  nodefs.available: 10%\\n  nodefs.inodesFree: 5%\\n  pid.available: 10%\\nfeatureGates:\\n  DynamicKubeletConfig: false\\n  ExecProbeTimeout: false\\n  InTreePluginAWSUnregister: true\\n  InTreePluginAzureDiskUnregister: true\\n  InTreePluginOpenStackUnregister: true\\n  InTreePluginvSphereUnregister: true\\n  RotateKubeletServerCertificate: true\\nkernelMemcgNotification: true\\nkind: KubeletConfiguration\\nkubeReserved:\\n  cpu: 1060m\\n  ephemeral-storage: 41Gi\\n  memory: 512Mi\\nreadOnlyPort: 10255\\nserverTLSBootstrap: true\\nstaticPodPath: /etc/kubernetes/manifests\\n\"\n            },\n            {\n              \"key\": \"kube-labels\",\n              \"value\": \"cloud.google.com/gke-boot-disk=pd-standard,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/machine-family=e2\"\n            },\n            {\n              \"key\": \"disable-legacy-endpoints\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"configure-sh\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"gci-update-strategy\",\n              \"value\": \"update_disabled\"\n            },\n            {\n              \"key\": \"enable-oslogin\",\n              \"value\": \"false\"\n            },\n            {\n              \"key\": \"kubeconfig\",\n              \"value\": \"apiVersion: v1\\nkind: Config\\nclusters:\\n- cluster:\\n    server: https://35.205.188.165\\n    certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\\n  name: default-cluster\\ncontexts:\\n- context:\\n    cluster: default-cluster\\n    namespace: default\\n    user: exec-plugin-auth\\n  name: default-context\\ncurrent-context: default-context\\nusers:\\n- name: exec-plugin-auth\\n  user:\\n    exec:\\n      apiVersion: \\\"client.authentication.k8s.io/v1alpha1\\\"\\n      command: '/home/kubernetes/bin/gke-exec-auth-plugin'\\n      args: [\\\"--cache-dir\\\", '/var/lib/kubelet/pki/']\\n\"\n            },\n            {\n              \"key\": \"user-data\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"gci-metrics-enabled\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"gci-ensure-gke-docker\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"serial-port-logging-enable\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"cluster-location\",\n              \"value\": \"europe-west1-b\"\n            },\n            {\n              \"key\": \"google-compute-enable-pcid\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"cluster-name\",\n              \"value\": \"gke1\"\n            },\n            {\n              \"key\": \"cluster-uid\",\n              \"value\": \"f36cf6ddd50c4b998cf1921fbc3e11fc6895bf0ad2d841e7956d7fca6e7024b4\"\n            }\n          ],\n          \"kind\": \"compute#metadata\"\n        },\n        \"networkInterfaces\": [\n          {\n            \"accessConfigs\": [\n              {\n                \"kind\": \"compute#accessConfig\",\n                \"name\": \"external-nat\",\n                \"networkTier\": \"PREMIUM\",\n                \"type\": \"ONE_TO_ONE_NAT\"\n              }\n            ],\n            \"kind\": \"compute#networkInterface\",\n            \"name\": \"nic0\",\n            \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n            \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west1/subnetworks/default\"\n          }\n        ],\n        \"networkPerformanceConfig\": {\n          \"totalEgressBandwidthTier\": \"DEFAULT\"\n        },\n        \"scheduling\": {\n          \"automaticRestart\": true,\n          \"onHostMaintenance\": \"MIGRATE\",\n          \"preemptible\": false,\n          \"provisioningModel\": \"STANDARD\"\n        },\n        \"serviceAccounts\": [\n          {\n            \"email\": \"default\",\n            \"scopes\": [\n              \"https://www.googleapis.com/auth/logging.write\",\n              \"https://www.googleapis.com/auth/monitoring\"\n            ]\n          }\n        ],\n        \"shieldedInstanceConfig\": {\n          \"enableIntegrityMonitoring\": true,\n          \"enableSecureBoot\": false,\n          \"enableVtpm\": true\n        },\n        \"tags\": {\n          \"items\": [\n            \"gke-gke1-f36cf6dd-node\"\n          ]\n        }\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/instanceTemplates/gke-gke1-default-pool-35923fbc\"\n    },\n    {\n      \"creationTimestamp\": \"2022-04-26T08:20:48.842-07:00\",\n      \"description\": \"\",\n      \"id\": \"7086722794918359871\",\n      \"kind\": \"compute#instanceTemplate\",\n      \"name\": \"mig-template\",\n      \"properties\": {\n        \"disks\": [\n          {\n            \"autoDelete\": true,\n            \"boot\": true,\n            \"deviceName\": \"persistent-disk-0\",\n            \"index\": 0,\n            \"initializeParams\": {\n              \"diskType\": \"pd-standard\",\n              \"sourceImage\": \"projects/debian-cloud/global/images/family/debian-9\"\n            },\n            \"interface\": \"SCSI\",\n            \"kind\": \"compute#attachedDisk\",\n            \"mode\": \"READ_WRITE\",\n            \"type\": \"PERSISTENT\"\n          }\n        ],\n        \"machineType\": \"e2-micro\",\n        \"metadata\": {\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#metadata\"\n        },\n        \"networkInterfaces\": [\n          {\n            \"kind\": \"compute#networkInterface\",\n            \"name\": \"nic0\",\n            \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\"\n          }\n        ],\n        \"scheduling\": {\n          \"automaticRestart\": true,\n          \"onHostMaintenance\": \"MIGRATE\",\n          \"preemptible\": false,\n          \"provisioningModel\": \"STANDARD\"\n        }\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/instanceTemplates/mig-template\"\n    },\n    {\n      \"creationTimestamp\": \"2022-04-26T08:21:35.891-07:00\",\n      \"description\": \"\",\n      \"id\": \"4047445761213182736\",\n      \"kind\": \"compute#instanceTemplate\",\n      \"name\": \"gke-gke1-default-pool-671518f6\",\n      \"properties\": {\n        \"canIpForward\": true,\n        \"disks\": [\n          {\n            \"autoDelete\": true,\n            \"boot\": true,\n            \"deviceName\": \"persistent-disk-0\",\n            \"index\": 0,\n            \"initializeParams\": {\n              \"diskSizeGb\": \"100\",\n              \"diskType\": \"pd-standard\",\n              \"labels\": {\n                \"gcp_doctor_test\": \"gke\",\n                \"goog-gke-node\": \"\"\n              },\n              \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-12110-gke2000-cos-89-16108-604-19-v220317-c-pre\"\n            },\n            \"kind\": \"compute#attachedDisk\",\n            \"mode\": \"READ_WRITE\",\n            \"type\": \"PERSISTENT\"\n          }\n        ],\n        \"labels\": {\n          \"gcp_doctor_test\": \"gke\",\n          \"goog-gke-node\": \"\"\n        },\n        \"machineType\": \"e2-small\",\n        \"metadata\": {\n          \"fingerprint\": \"REDACTED\",\n          \"items\": [\n            {\n              \"key\": \"kube-env\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"kubelet-config\",\n              \"value\": \"apiVersion: kubelet.config.k8s.io/v1beta1\\nauthentication:\\n  anonymous:\\n    enabled: false\\n  webhook:\\n    enabled: true\\n  x509:\\n    clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\\nauthorization:\\n  mode: Webhook\\ncgroupRoot: /\\nclusterDNS:\\n- 10.3.240.10\\nclusterDomain: cluster.local\\nenableDebuggingHandlers: true\\nevictionHard:\\n  memory.available: 100Mi\\n  nodefs.available: 10%\\n  nodefs.inodesFree: 5%\\n  pid.available: 10%\\nfeatureGates:\\n  DynamicKubeletConfig: false\\n  ExecProbeTimeout: false\\n  InTreePluginAWSUnregister: true\\n  InTreePluginAzureDiskUnregister: true\\n  InTreePluginOpenStackUnregister: true\\n  InTreePluginvSphereUnregister: true\\n  RotateKubeletServerCertificate: true\\nkernelMemcgNotification: true\\nkind: KubeletConfiguration\\nkubeReserved:\\n  cpu: 1060m\\n  ephemeral-storage: 41Gi\\n  memory: 512Mi\\nreadOnlyPort: 10255\\nserverTLSBootstrap: true\\nstaticPodPath: /etc/kubernetes/manifests\\n\"\n            },\n            {\n              \"key\": \"kube-labels\",\n              \"value\": \"cloud.google.com/gke-boot-disk=pd-standard,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/machine-family=e2\"\n            },\n            {\n              \"key\": \"disable-legacy-endpoints\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"configure-sh\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"gci-update-strategy\",\n              \"value\": \"update_disabled\"\n            },\n            {\n              \"key\": \"enable-oslogin\",\n              \"value\": \"false\"\n            },\n            {\n              \"key\": \"kubeconfig\",\n              \"value\": \"apiVersion: v1\\nkind: Config\\nclusters:\\n- cluster:\\n    server: https://35.205.188.165\\n    certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\\n  name: default-cluster\\ncontexts:\\n- context:\\n    cluster: default-cluster\\n    namespace: default\\n    user: exec-plugin-auth\\n  name: default-context\\ncurrent-context: default-context\\nusers:\\n- name: exec-plugin-auth\\n  user:\\n    exec:\\n      apiVersion: \\\"client.authentication.k8s.io/v1alpha1\\\"\\n      command: '/home/kubernetes/bin/gke-exec-auth-plugin'\\n      args: [\\\"--cache-dir\\\", '/var/lib/kubelet/pki/']\\n\"\n            },\n            {\n              \"key\": \"user-data\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"gci-metrics-enabled\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"gci-ensure-gke-docker\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"serial-port-logging-enable\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"cluster-location\",\n              \"value\": \"europe-west1-b\"\n            },\n            {\n              \"key\": \"google-compute-enable-pcid\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"cluster-name\",\n              \"value\": \"gke1\"\n            },\n            {\n              \"key\": \"cluster-uid\",\n              \"value\": \"f36cf6ddd50c4b998cf1921fbc3e11fc6895bf0ad2d841e7956d7fca6e7024b4\"\n            }\n          ],\n          \"kind\": \"compute#metadata\"\n        },\n        \"networkInterfaces\": [\n          {\n            \"accessConfigs\": [\n              {\n                \"kind\": \"compute#accessConfig\",\n                \"name\": \"external-nat\",\n                \"networkTier\": \"PREMIUM\",\n                \"type\": \"ONE_TO_ONE_NAT\"\n              }\n            ],\n            \"kind\": \"compute#networkInterface\",\n            \"name\": \"nic0\",\n            \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n            \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west1/subnetworks/default\"\n          }\n        ],\n        \"networkPerformanceConfig\": {\n          \"totalEgressBandwidthTier\": \"DEFAULT\"\n        },\n        \"scheduling\": {\n          \"automaticRestart\": true,\n          \"onHostMaintenance\": \"MIGRATE\",\n          \"preemptible\": false,\n          \"provisioningModel\": \"STANDARD\"\n        },\n        \"serviceAccounts\": [\n          {\n            \"email\": \"default\",\n            \"scopes\": [\n              \"https://www.googleapis.com/auth/logging.write\",\n              \"https://www.googleapis.com/auth/monitoring\"\n            ]\n          }\n        ],\n        \"shieldedInstanceConfig\": {\n          \"enableIntegrityMonitoring\": true,\n          \"enableSecureBoot\": false,\n          \"enableVtpm\": true\n        },\n        \"tags\": {\n          \"items\": [\n            \"gke-gke1-f36cf6dd-node\"\n          ]\n        }\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/instanceTemplates/gke-gke1-default-pool-671518f6\"\n    }\n  ],\n  \"kind\": \"compute#instanceTemplateList\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/instanceTemplates\"\n}\n"
  },
  {
    "path": "test-data/gce1/json-dumps/compute-zones.json",
    "content": "{\n  \"kind\": \"compute#zoneList\",\n  \"id\": \"projects/gcpdiag-gce1-aaaa/zones\",\n  \"items\": [\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2231\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east1-b\",\n      \"description\": \"us-east1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-east1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2233\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east1-c\",\n      \"description\": \"us-east1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-east1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2234\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east1-d\",\n      \"description\": \"us-east1-d\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-east1-d\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2272\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east4-c\",\n      \"description\": \"us-east4-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-east4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-east4-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2271\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east4-b\",\n      \"description\": \"us-east4-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-east4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-east4-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2270\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east4-a\",\n      \"description\": \"us-east4-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-east4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-east4-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2002\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1-c\",\n      \"description\": \"us-central1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-central1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2000\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1-a\",\n      \"description\": \"us-central1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-central1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2004\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1-f\",\n      \"description\": \"us-central1-f\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-central1-f\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2001\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1-b\",\n      \"description\": \"us-central1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-central1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2211\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west1-b\",\n      \"description\": \"us-west1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-west1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2212\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west1-c\",\n      \"description\": \"us-west1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-west1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2210\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west1-a\",\n      \"description\": \"us-west1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-west1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2342\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west4-a\",\n      \"description\": \"europe-west4-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2341\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west4-b\",\n      \"description\": \"europe-west4-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2340\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west4-c\",\n      \"description\": \"europe-west4-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2101\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west1-b\",\n      \"description\": \"europe-west1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2104\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west1-d\",\n      \"description\": \"europe-west1-d\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-d\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2103\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west1-c\",\n      \"description\": \"europe-west1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2300\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west3-c\",\n      \"description\": \"europe-west3-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west3-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2301\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west3-a\",\n      \"description\": \"europe-west3-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west3-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2302\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west3-b\",\n      \"description\": \"europe-west3-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west3-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2292\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west2-c\",\n      \"description\": \"europe-west2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2291\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west2-b\",\n      \"description\": \"europe-west2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2290\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west2-a\",\n      \"description\": \"europe-west2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2221\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east1-b\",\n      \"description\": \"asia-east1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-east1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2220\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east1-a\",\n      \"description\": \"asia-east1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-east1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2222\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east1-c\",\n      \"description\": \"asia-east1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-east1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2261\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast1-b\",\n      \"description\": \"asia-southeast1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-southeast1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2260\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast1-a\",\n      \"description\": \"asia-southeast1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-southeast1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2262\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast1-c\",\n      \"description\": \"asia-southeast1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-southeast1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2251\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast1-b\",\n      \"description\": \"asia-northeast1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-northeast1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2252\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast1-c\",\n      \"description\": \"asia-northeast1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-northeast1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2250\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast1-a\",\n      \"description\": \"asia-northeast1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-northeast1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2322\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south1-c\",\n      \"description\": \"asia-south1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-south1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2320\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south1-b\",\n      \"description\": \"asia-south1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-south1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2321\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south1-a\",\n      \"description\": \"asia-south1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-south1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2282\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast1-b\",\n      \"description\": \"australia-southeast1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/australia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/australia-southeast1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2280\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast1-c\",\n      \"description\": \"australia-southeast1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/australia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/australia-southeast1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2281\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast1-a\",\n      \"description\": \"australia-southeast1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/australia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/australia-southeast1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2311\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-east1-b\",\n      \"description\": \"southamerica-east1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/southamerica-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/southamerica-east1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2312\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-east1-c\",\n      \"description\": \"southamerica-east1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/southamerica-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/southamerica-east1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2310\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-east1-a\",\n      \"description\": \"southamerica-east1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/southamerica-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/southamerica-east1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2372\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east2-a\",\n      \"description\": \"asia-east2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-east2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-east2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2371\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east2-b\",\n      \"description\": \"asia-east2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-east2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-east2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2370\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east2-c\",\n      \"description\": \"asia-east2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-east2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-east2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2392\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast2-a\",\n      \"description\": \"asia-northeast2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-northeast2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2390\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast2-b\",\n      \"description\": \"asia-northeast2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-northeast2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2391\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast2-c\",\n      \"description\": \"asia-northeast2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-northeast2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2410\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast3-a\",\n      \"description\": \"asia-northeast3-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-northeast3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-northeast3-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2412\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast3-b\",\n      \"description\": \"asia-northeast3-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-northeast3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-northeast3-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2411\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast3-c\",\n      \"description\": \"asia-northeast3-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-northeast3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-northeast3-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2470\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south2-a\",\n      \"description\": \"asia-south2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-south2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-south2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2472\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south2-b\",\n      \"description\": \"asia-south2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-south2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-south2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2471\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south2-c\",\n      \"description\": \"asia-south2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-south2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-south2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2440\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast2-a\",\n      \"description\": \"asia-southeast2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-southeast2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2442\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast2-b\",\n      \"description\": \"asia-southeast2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-southeast2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2441\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast2-c\",\n      \"description\": \"asia-southeast2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/asia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/asia-southeast2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2480\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast2-a\",\n      \"description\": \"australia-southeast2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/australia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/australia-southeast2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2482\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast2-b\",\n      \"description\": \"australia-southeast2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/australia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/australia-southeast2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2481\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast2-c\",\n      \"description\": \"australia-southeast2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/australia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/australia-southeast2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2452\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-central2-a\",\n      \"description\": \"europe-central2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-central2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-central2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2450\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-central2-b\",\n      \"description\": \"europe-central2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-central2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-central2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2451\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-central2-c\",\n      \"description\": \"europe-central2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-central2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-central2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2352\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-north1-a\",\n      \"description\": \"europe-north1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-north1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-north1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2350\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-north1-b\",\n      \"description\": \"europe-north1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-north1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-north1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2351\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-north1-c\",\n      \"description\": \"europe-north1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-north1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-north1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2382\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west6-a\",\n      \"description\": \"europe-west6-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west6\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west6-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2380\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west6-b\",\n      \"description\": \"europe-west6-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west6\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west6-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2381\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west6-c\",\n      \"description\": \"europe-west6-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west6\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west6-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2510\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west8-a\",\n      \"description\": \"europe-west8-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west8\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west8-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2511\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west8-b\",\n      \"description\": \"europe-west8-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west8\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west8-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2512\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west8-c\",\n      \"description\": \"europe-west8-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west8\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west8-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2330\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast1-a\",\n      \"description\": \"northamerica-northeast1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/northamerica-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/northamerica-northeast1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2331\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast1-b\",\n      \"description\": \"northamerica-northeast1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/northamerica-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/northamerica-northeast1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2332\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast1-c\",\n      \"description\": \"northamerica-northeast1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/northamerica-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/northamerica-northeast1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2461\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast2-a\",\n      \"description\": \"northamerica-northeast2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/northamerica-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/northamerica-northeast2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2460\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast2-b\",\n      \"description\": \"northamerica-northeast2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/northamerica-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/northamerica-northeast2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2462\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast2-c\",\n      \"description\": \"northamerica-northeast2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/northamerica-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/northamerica-northeast2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2490\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-west1-a\",\n      \"description\": \"southamerica-west1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/southamerica-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/southamerica-west1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2491\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-west1-b\",\n      \"description\": \"southamerica-west1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/southamerica-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/southamerica-west1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2492\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-west1-c\",\n      \"description\": \"southamerica-west1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/southamerica-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/southamerica-west1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2362\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west2-a\",\n      \"description\": \"us-west2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-west2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2361\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west2-b\",\n      \"description\": \"us-west2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-west2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2360\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west2-c\",\n      \"description\": \"us-west2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-west2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2420\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west3-a\",\n      \"description\": \"us-west3-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-west3-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2421\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west3-b\",\n      \"description\": \"us-west3-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-west3-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2422\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west3-c\",\n      \"description\": \"us-west3-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-west3-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2431\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west4-a\",\n      \"description\": \"us-west4-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-west4-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2432\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west4-b\",\n      \"description\": \"us-west4-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-west4-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2430\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west4-c\",\n      \"description\": \"us-west4-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/us-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/us-west4-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones\"\n}\n"
  },
  {
    "path": "test-data/gce1/json-dumps/healthChecks.json",
    "content": "{\n  \"kind\": \"compute#healthCheckList\",\n  \"id\": \"projects/gcpdiag-gce1-aaaa/global/healthChecks/\",\n  \"items\": [\n    {\n      \"kind\": \"compute#healthCheck\",\n      \"id\": \"6570916794820924287\",\n      \"creationTimestamp\": \"2023-11-22T17:40:32.481-08:00\",\n      \"name\": \"http-basic-check\",\n      \"checkIntervalSec\": 5,\n      \"timeoutSec\": 5,\n      \"unhealthyThreshold\": 2,\n      \"healthyThreshold\": 2,\n      \"type\": \"HTTP\",\n      \"httpHealthCheck\": {\n        \"port\": 80,\n        \"portSpecification\": \"USE_FIXED_PORT\",\n        \"requestPath\": \"/\",\n        \"proxyHeader\": \"NONE\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/healthChecks/http-basic-check\",\n      \"logConfig\": {\n        \"enable\": true\n      }\n    },\n    {\n      \"kind\": \"compute#healthCheck\",\n      \"id\": \"2011808073814110499\",\n      \"creationTimestamp\": \"2023-11-22T11:00:28.722-08:00\",\n      \"name\": \"http-basic-check-2\",\n      \"checkIntervalSec\": 5,\n      \"timeoutSec\": 5,\n      \"unhealthyThreshold\": 2,\n      \"healthyThreshold\": 2,\n      \"type\": \"HTTP\",\n      \"httpHealthCheck\": {\n        \"port\": 80,\n        \"portSpecification\": \"USE_FIXED_PORT\",\n        \"requestPath\": \"/\",\n        \"proxyHeader\": \"NONE\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/healthChecks/http-basic-check-2\"\n    },\n    {\n      \"kind\": \"compute#healthCheck\",\n      \"id\": \"4700445592381550883\",\n      \"creationTimestamp\": \"2023-11-22T11:00:28.748-08:00\",\n      \"name\": \"tcp-basic-check-1\",\n      \"checkIntervalSec\": 5,\n      \"timeoutSec\": 5,\n      \"unhealthyThreshold\": 2,\n      \"healthyThreshold\": 2,\n      \"type\": \"TCP\",\n      \"tcpHealthCheck\": {\n        \"port\": 80,\n        \"proxyHeader\": \"NONE\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/healthChecks/tcp-basic-check-1\",\n      \"logConfig\": {\n        \"enable\": true\n      }\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/healthChecks/\"\n}\n"
  },
  {
    "path": "test-data/gce1/json-dumps/iam-policy.json",
    "content": "{\n  \"bindings\": [\n    {\n      \"members\": [\n        \"serviceAccount:service-12340001@compute-system.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/compute.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12340001@container-engine-robot.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/container.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12340001@containerregistry.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/containerregistry.ServiceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:12340001-compute@developer.gserviceaccount.com\",\n        \"serviceAccount:12340001@cloudservices.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/editor\"\n    },\n    {\n      \"members\": [\n        \"user:testuser@example.com\"\n      ],\n      \"role\": \"roles/owner\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12340001@gcp-sa-pubsub.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/pubsub.serviceAgent\"\n    }\n  ],\n  \"etag\": \"BwXdkD1p/AI=\",\n  \"version\": 1\n}\n"
  },
  {
    "path": "test-data/gce1/json-dumps/iam-roles-get.json",
    "content": "{\"roles\":\n[]}\n"
  },
  {
    "path": "test-data/gce1/json-dumps/iam-service-accounts.json",
    "content": "{\n  \"accounts\": [\n    {\n      \"displayName\": \"Compute Engine default service account\",\n      \"email\": \"12340001-compute@developer.gserviceaccount.com\",\n      \"etag\": \"MDEwMjE5MjA=\",\n      \"name\": \"projects/gcpdiag-gce1-aaaa/serviceAccounts/12340001-compute@developer.gserviceaccount.com\",\n      \"oauth2ClientId\": \"REDACTED\",\n      \"projectId\": \"gcpdiag-gce1-aaaa\",\n      \"uniqueId\": \"108672510563148525670\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gce1/json-dumps/logging-entries-1.json",
    "content": "{\n  \"entries\": [\n    {\n      \"protoPayload\": {\n        \"methodName\": \"compute.instances.insert\",\n        \"status\": {\n          \"message\": \"ZONE_RESOURCE_POOL_EXHAUSTED\"\n        }\n      },\n      \"resource\": {\n        \"labels\": {\n          \"zone\": \"us-central1-a\"\n        }\n      },\n      \"severity\": \"ERROR\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gce1/json-dumps/monitoring-query.json",
    "content": "{\n  \"timeSeriesDescriptor\": {\n    \"labelDescriptors\": [\n      {\n        \"key\": \"resource.zone\"\n      },\n      {\n        \"key\": \"metric.instance_name\"\n      }\n    ],\n    \"pointDescriptors\": [\n      {\n        \"key\": \"value_uptime_total_aggregate_mean\",\n        \"valueType\": \"DOUBLE\",\n        \"metricKind\": \"GAUGE\",\n        \"unit\": \"s\"\n      },\n      {\n        \"key\": \"value_uptime_total_aggregate_count\",\n        \"valueType\": \"INT64\",\n        \"metricKind\": \"GAUGE\",\n        \"unit\": \"1\"\n      }\n    ]\n  },\n  \"timeSeriesData\": [\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"europe-west4-a\"\n        },\n        {\n          \"stringValue\": \"mig-7pvl\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 70829\n            },\n            {\n              \"int64Value\": \"4\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2022-04-27T11:05:16.345995Z\",\n            \"endTime\": \"2022-04-27T11:05:16.345995Z\"\n          }\n        },\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 70559\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2022-04-27T11:00:16.345995Z\",\n            \"endTime\": \"2022-04-27T11:00:16.345995Z\"\n          }\n        }\n      ]\n    },\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"europe-west4-a\"\n        },\n        {\n          \"stringValue\": \"mig-4h21\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 70829\n            },\n            {\n              \"int64Value\": \"4\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2022-04-27T11:05:16.345995Z\",\n            \"endTime\": \"2022-04-27T11:05:16.345995Z\"\n          }\n        },\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 70559\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2022-04-27T11:00:16.345995Z\",\n            \"endTime\": \"2022-04-27T11:00:16.345995Z\"\n          }\n        }\n      ]\n    },\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"europe-west4-a\"\n        },\n        {\n          \"stringValue\": \"gce2\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 70889\n            },\n            {\n              \"int64Value\": \"4\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2022-04-27T11:05:16.345995Z\",\n            \"endTime\": \"2022-04-27T11:05:16.345995Z\"\n          }\n        },\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 70619\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2022-04-27T11:00:16.345995Z\",\n            \"endTime\": \"2022-04-27T11:00:16.345995Z\"\n          }\n        }\n      ]\n    },\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"europe-west4-a\"\n        },\n        {\n          \"stringValue\": \"gce1\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 70889\n            },\n            {\n              \"int64Value\": \"4\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2022-04-27T11:05:16.345995Z\",\n            \"endTime\": \"2022-04-27T11:05:16.345995Z\"\n          }\n        },\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 70619\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2022-04-27T11:00:16.345995Z\",\n            \"endTime\": \"2022-04-27T11:00:16.345995Z\"\n          }\n        }\n      ]\n    },\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"europe-west1-b\"\n        },\n        {\n          \"stringValue\": \"gke-gke1-default-pool-35923fbc-k05c\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 70829\n            },\n            {\n              \"int64Value\": \"4\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2022-04-27T11:05:16.345995Z\",\n            \"endTime\": \"2022-04-27T11:05:16.345995Z\"\n          }\n        },\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 70559\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2022-04-27T11:00:16.345995Z\",\n            \"endTime\": \"2022-04-27T11:00:16.345995Z\"\n          }\n        }\n      ]\n    },\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"europe-west1-b\"\n        },\n        {\n          \"stringValue\": \"gke-gke1-default-pool-35923fbc-fv50\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 70770\n            },\n            {\n              \"int64Value\": \"4\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2022-04-27T11:05:16.345995Z\",\n            \"endTime\": \"2022-04-27T11:05:16.345995Z\"\n          }\n        },\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 70500\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2022-04-27T11:00:16.345995Z\",\n            \"endTime\": \"2022-04-27T11:00:16.345995Z\"\n          }\n        }\n      ]\n    },\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"europe-west1-b\"\n        },\n        {\n          \"stringValue\": \"gke-gke1-default-pool-35923fbc-c12f\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 70829\n            },\n            {\n              \"int64Value\": \"4\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2022-04-27T11:05:16.345995Z\",\n            \"endTime\": \"2022-04-27T11:05:16.345995Z\"\n          }\n        },\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 70559\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2022-04-27T11:00:16.345995Z\",\n            \"endTime\": \"2022-04-27T11:00:16.345995Z\"\n          }\n        }\n      ]\n    },\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"europe-west1-b\"\n        },\n        {\n          \"stringValue\": \"gke-gke1-default-pool-35923fbc-2xxp\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 70769\n            },\n            {\n              \"int64Value\": \"4\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2022-04-27T11:05:16.345995Z\",\n            \"endTime\": \"2022-04-27T11:05:16.345995Z\"\n          }\n        },\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 70499\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2022-04-27T11:00:16.345995Z\",\n            \"endTime\": \"2022-04-27T11:00:16.345995Z\"\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gce1/json-dumps/project.json",
    "content": "{\n  \"name\": \"projects/12340001\",\n  \"parent\": \"organizations/11112222\",\n  \"projectId\": \"gcpdiag-gce1-aaaa\",\n  \"state\": \"ACTIVE\",\n  \"displayName\": \"gcpdiag test - gce1\",\n  \"createTime\": \"2022-04-26T15:18:57.559Z\",\n  \"updateTime\": \"2022-04-26T15:18:59.029Z\",\n  \"etag\": \"MQV1kuwMB6N2UKQqCiihhA==\",\n  \"labels\": {\n    \"gcpdiag\": \"test\"\n  }\n}\n"
  },
  {
    "path": "test-data/gce1/json-dumps/services.json",
    "content": "{\n  \"services\": [\n    {\n      \"name\": \"projects/12340001/services/autoscaling.googleapis.com\",\n      \"config\": {\n        \"name\": \"autoscaling.googleapis.com\",\n        \"title\": \"Cloud Autoscaling API\",\n        \"documentation\": {\n          \"summary\": \"An API for the Cloud Autoscaling for consuming autoscaling signals.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340001\"\n    },\n    {\n      \"name\": \"projects/12340001/services/bigquery.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigquery.googleapis.com\",\n        \"title\": \"BigQuery API\",\n        \"documentation\": {\n          \"summary\": \"A data platform for customers to create, manage, share and query data.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340001\"\n    },\n    {\n      \"name\": \"projects/12340001/services/bigquerymigration.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigquerymigration.googleapis.com\",\n        \"title\": \"BigQuery Migration API\",\n        \"documentation\": {\n          \"summary\": \"The migration service, exposing apis for migration jobs operations, and agent management.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340001\"\n    },\n    {\n      \"name\": \"projects/12340001/services/bigquerystorage.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigquerystorage.googleapis.com\",\n        \"title\": \"BigQuery Storage API\",\n        \"documentation\": {},\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340001\"\n    },\n    {\n      \"name\": \"projects/12340001/services/compute.googleapis.com\",\n      \"config\": {\n        \"name\": \"compute.googleapis.com\",\n        \"title\": \"Compute Engine API\",\n        \"documentation\": {\n          \"summary\": \"Creates and runs virtual machines on Google Cloud Platform.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"compute.googleapis.com/VpcNetwork\",\n            \"displayName\": \"VPC Network\",\n            \"description\": \"VPC Network.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the VPC Network.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the VPC Network, global always.\"\n              },\n              {\n                \"key\": \"network_id\",\n                \"description\": \"VPC Network resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/instances_per_vpc_network\",\n                \"compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/ip_aliases_per_vpc_network\",\n                \"compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/instances_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/subnet_ranges_per_vpc_network\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/instances_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/instances_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/instances_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340001\"\n    },\n    {\n      \"name\": \"projects/12340001/services/container.googleapis.com\",\n      \"config\": {\n        \"name\": \"container.googleapis.com\",\n        \"title\": \"Kubernetes Engine API\",\n        \"documentation\": {\n          \"summary\": \"Builds and manages container-based applications, powered by the open source Kubernetes technology.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340001\"\n    },\n    {\n      \"name\": \"projects/12340001/services/containerfilesystem.googleapis.com\",\n      \"config\": {\n        \"name\": \"containerfilesystem.googleapis.com\",\n        \"title\": \"Container File System API\",\n        \"documentation\": {},\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340001\"\n    },\n    {\n      \"name\": \"projects/12340001/services/containerregistry.googleapis.com\",\n      \"config\": {\n        \"name\": \"containerregistry.googleapis.com\",\n        \"title\": \"Container Registry API\",\n        \"documentation\": {\n          \"summary\": \"Google Container Registry provides secure, private Docker image storage on Google Cloud Platform.  Our API follows the Docker Registry API specification, so we are fully compatible with the Docker CLI client, as well as standard tooling using the Docker Registry API.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"serviceruntime.googleapis.com/api\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_version\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_method\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/consumer_project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              }\n            ]\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/api\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/api/consumer/quota_used_count\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340001\"\n    },\n    {\n      \"name\": \"projects/12340001/services/iam.googleapis.com\",\n      \"config\": {\n        \"name\": \"iam.googleapis.com\",\n        \"title\": \"Identity and Access Management (IAM) API\",\n        \"documentation\": {\n          \"summary\": \"Manages identity and access control for Google Cloud Platform resources, including the creation of service accounts, which you can use to authenticate to Google and make API calls.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"iam_service_account\",\n            \"displayName\": \"IAM Service Account\",\n            \"description\": \"An IAM Service Account.\",\n            \"labels\": [\n              {\n                \"key\": \"project_id\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"unique_id\",\n                \"description\": \"The unique_id of the service account.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"iam.googleapis.com/WorkloadIdentityPoolProvider\",\n            \"displayName\": \"Workload Identity Pool Provider\",\n            \"description\": \"A workload identity pool provider.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location of the resource.\"\n              },\n              {\n                \"key\": \"pool_id\",\n                \"description\": \"The ID of the provider's workload identity pool parent resource.\"\n              },\n              {\n                \"key\": \"provider_id\",\n                \"description\": \"The ID of the workload identity pool provider resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"iam.googleapis.com/WorkloadIdentityPoolProvider\",\n              \"metrics\": [\n                \"iam.googleapis.com/workload_identity_federation/count\",\n                \"iam.googleapis.com/workload_identity_federation/key_usage_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"iam_service_account\",\n              \"metrics\": [\n                \"iam.googleapis.com/service_account/authn_events_count\",\n                \"iam.googleapis.com/service_account/key/authn_events_count\",\n                \"iam.googleapis.com/service_account/authn_events_count_preprod\",\n                \"iam.googleapis.com/service_account/key/authn_events_count_preprod\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340001\"\n    },\n    {\n      \"name\": \"projects/12340001/services/iamcredentials.googleapis.com\",\n      \"config\": {\n        \"name\": \"iamcredentials.googleapis.com\",\n        \"title\": \"IAM Service Account Credentials API\",\n        \"documentation\": {\n          \"summary\": \"Creates short-lived credentials for impersonating IAM service accounts. To enable this API, you must enable the IAM API (iam.googleapis.com).\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"serviceruntime.googleapis.com/api\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_version\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_method\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/consumer_project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              }\n            ]\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/api\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/api/consumer/quota_used_count\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340001\"\n    },\n    {\n      \"name\": \"projects/12340001/services/logging.googleapis.com\",\n      \"config\": {\n        \"name\": \"logging.googleapis.com\",\n        \"title\": \"Cloud Logging API\",\n        \"documentation\": {},\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340001\"\n    },\n    {\n      \"name\": \"projects/12340001/services/monitoring.googleapis.com\",\n      \"config\": {\n        \"name\": \"monitoring.googleapis.com\",\n        \"title\": \"Cloud Monitoring API\",\n        \"documentation\": {\n          \"summary\": \"Manages your Cloud Monitoring data and configurations.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"monitoring.googleapis.com/ChargedProject\",\n            \"displayName\": \"Cloud monitoring target\",\n            \"description\": \"A cloud monitoring specialization target schema of cloud.ChargedProject.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The monitored resource container. Could be project, workspace, etc.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The service-specific notion of location.\"\n              },\n              {\n                \"key\": \"service\",\n                \"description\": \"The name of the API service with which the data is associated (e.g.,'monitoring.googleapis.com').\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"monitoring.googleapis.com/MetricStatistics\",\n            \"displayName\": \"Metric Statistics\",\n            \"description\": \"Information about a user-written metric in Cloud Monitoring.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project to which the metric is written, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The cloud region where the metric was received.\"\n              },\n              {\n                \"key\": \"metric_type\",\n                \"description\": \"The metric type.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"monitoring.googleapis.com/MetricIngestionAttribution\",\n            \"displayName\": \"Metric Ingestion Attribution\",\n            \"description\": \"Attribution for metric ingestion.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project to which the metric is written, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The cloud region where the metric was received.\"\n              },\n              {\n                \"key\": \"attribution_dimension\",\n                \"description\": \"The dimension used for attribution reporting. It is not recommended that aggregations are performed across dimensions because a single metric point can be recorded with multiple dimensions which could cause double counting. Currently only \\\"namespace\\\" is supported.\"\n              },\n              {\n                \"key\": \"attribution_id\",\n                \"description\": \"The attribution id of the source of the metric write.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"monitoring.googleapis.com/ChargedProject\",\n              \"metrics\": [\n                \"monitoring.googleapis.com/billing/bytes_ingested\",\n                \"monitoring.googleapis.com/billing/samples_ingested\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"monitoring.googleapis.com/MetricStatistics\",\n              \"metrics\": [\n                \"monitoring.googleapis.com/collection/write_request_count\",\n                \"monitoring.googleapis.com/collection/write_request_point_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"monitoring.googleapis.com/MetricIngestionAttribution\",\n              \"metrics\": [\n                \"monitoring.googleapis.com/collection/attribution/sample_count\",\n                \"monitoring.googleapis.com/collection/attribution/write_sample_count\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340001\"\n    },\n    {\n      \"name\": \"projects/12340001/services/oslogin.googleapis.com\",\n      \"config\": {\n        \"name\": \"oslogin.googleapis.com\",\n        \"title\": \"Cloud OS Login API\",\n        \"documentation\": {\n          \"summary\": \"You can use OS Login to manage access to your VM instances using IAM roles.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340001\"\n    },\n    {\n      \"name\": \"projects/12340001/services/pubsub.googleapis.com\",\n      \"config\": {\n        \"name\": \"pubsub.googleapis.com\",\n        \"title\": \"Cloud Pub/Sub API\",\n        \"documentation\": {\n          \"summary\": \"Provides reliable, many-to-many, asynchronous messaging between applications.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340001\"\n    },\n    {\n      \"name\": \"projects/12340001/services/storage-api.googleapis.com\",\n      \"config\": {\n        \"name\": \"storage-api.googleapis.com\",\n        \"title\": \"Google Cloud Storage JSON API\",\n        \"documentation\": {\n          \"summary\": \"Lets you store and retrieve potentially-large, immutable data objects.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340001\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gce1/mig.tf",
    "content": "/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nresource \"google_compute_instance_template\" \"default\" {\n  project      = google_project.project.project_id\n  depends_on   = [google_project_service.compute]\n  name         = \"mig-template\"\n  machine_type = \"e2-micro\"\n  disk {\n    source_image = \"debian-cloud/debian-11\"\n    auto_delete  = true\n    boot         = true\n  }\n  network_interface {\n    network = \"default\"\n  }\n}\n\nresource \"google_compute_instance_group_manager\" \"mig\" {\n  project            = google_project.project.project_id\n  depends_on         = [google_project_service.compute]\n  name               = \"mig\"\n  base_instance_name = \"mig\"\n  zone               = \"europe-west4-a\"\n  version {\n    instance_template = google_compute_instance_template.default.id\n  }\n  target_size = 2\n}\n"
  },
  {
    "path": "test-data/gce1/neg1.tf",
    "content": "\nresource \"google_compute_network_endpoint\" \"default-endpoint\" {\n  project                = google_project.project.project_id\n  network_endpoint_group = google_compute_network_endpoint_group.neg1.name\n  zone                   = \"europe-west4-b\"\n\n  instance   = google_compute_instance.neg-vm.name\n  port       = google_compute_network_endpoint_group.neg1.default_port\n  ip_address = google_compute_instance.neg-vm.network_interface[0].network_ip\n}\n\nresource \"google_compute_instance\" \"neg-vm\" {\n  project = google_project.project.project_id\n\n  name           = \"neg-vm\"\n  machine_type   = \"e2-medium\"\n  zone           = \"europe-west4-b\"\n  desired_status = \"RUNNING\"\n  network_interface {\n    subnetwork_project = google_project.project.project_id\n    subnetwork         = \"default\"\n  }\n\n  boot_disk {\n    initialize_params {\n      image = data.google_compute_image.windows.self_link\n    }\n  }\n  depends_on = [google_project_service.compute]\n\n}\n\nresource \"google_compute_network_endpoint_group\" \"neg1\" {\n  project      = google_project.project.project_id\n  name         = \"neg1\"\n  network      = \"default\"\n  subnetwork   = \"default\"\n  default_port = \"90\"\n  zone         = \"europe-west4-b\"\n  depends_on   = [google_project_service.compute]\n}\n"
  },
  {
    "path": "test-data/gce1/project.tf",
    "content": "/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nresource \"random_string\" \"project_id_suffix\" {\n  length  = 8\n  number  = true\n  lower   = true\n  upper   = false\n  special = false\n}\n\nresource \"google_project\" \"project\" {\n  name            = \"gcpdiag test - gce1\"\n  project_id      = \"gcpdiag-gce1-${random_string.project_id_suffix.id}\"\n  org_id          = var.folder_id == \"\" ? var.org_id : null\n  folder_id       = var.folder_id != \"\" ? var.folder_id : null\n  billing_account = var.billing_account_id\n  labels = {\n    gcpdiag : \"test\"\n  }\n}\n\nresource \"google_project_service\" \"compute\" {\n  project = google_project.project.project_id\n  service = \"compute.googleapis.com\"\n}\n\nresource \"google_project_service\" \"container\" {\n  project = google_project.project.project_id\n  service = \"container.googleapis.com\"\n\n  depends_on = [google_project_service.compute]\n}\n\nresource \"google_compute_project_metadata_item\" \"serial_logging\" {\n  project    = google_project.project.project_id\n  depends_on = [google_project_service.compute]\n  key        = \"serial-port-logging-enable\"\n  value      = \"true\"\n}\n\ndata \"google_compute_default_service_account\" \"default\" {\n  project    = google_project.project.project_id\n  depends_on = [google_project_service.compute]\n}\n\ndata \"google_compute_image\" \"cos\" {\n  family  = \"cos-101-lts\"\n  project = \"cos-cloud\"\n}\n\ndata \"google_compute_image\" \"windows\" {\n  family  = \"windows-2019-core\"\n  project = \"windows-cloud\"\n}\n\noutput \"project_id\" {\n  value = google_project.project.project_id\n}\n\noutput \"project_id_suffix\" {\n  value = random_string.project_id_suffix.id\n}\n\noutput \"project_nr\" {\n  value = google_project.project.number\n}\n\noutput \"org_id\" {\n  value = var.org_id\n}\n"
  },
  {
    "path": "test-data/gce1/terraform",
    "content": "#!/bin/sh\n\n# terraform wrapper using docker\n\nUSE_TTY=\"\"\nCWD=$(pwd)\n[ -t 0 ] && USE_TTY=\"-it\"\n\nexec docker run $USE_TTY \\\n  --rm \\\n  -u \"$(id -u):$(id -g)\" \\\n  -e \"USER=$(id -n -u)\" \\\n  -e \"GROUP=$(id -n -g)\" \\\n  -e \"HOME=$HOME\" \\\n  -e \"LANG=$LANG\" \\\n  -e \"SHELL=/bin/bash\" \\\n  -v \"$CWD:$CWD\" \\\n  -v \"$HOME/.config/gcloud:/home/.config/gcloud\" \\\n  -w \"$CWD\" \\\n  mirror.gcr.io/hashicorp/terraform:light \"$@\"\n"
  },
  {
    "path": "test-data/gce1/variables.tf",
    "content": "variable \"billing_account_id\" {}\n\nvariable \"org_id\" {}\nvariable \"folder_id\" { default = \"\" }\n"
  },
  {
    "path": "test-data/gce2/Makefile",
    "content": "PROJECT_ID  := $(shell terraform output project_id)\nPROJECT_ID_SUFFIX := $(shell terraform output project_id_suffix)\nPROJECT_NR  := $(shell terraform output project_nr)\nORG_ID      := $(shell terraform output org_id)\nCURL         = ../../bin/curl-wrap.sh\nJSON_CLEANER = ../../bin/json-cleaner\nZONE_1       = europe-west2-a\n\nFAKE_PROJECT_ID_SUFFIX = runbook\nFAKE_PROJECT_NR = 12345601\nFAKE_ORG_ID = 11112222\n\nCOMPUTE_INSTANCES_MAXRESULTS=3\n\nINSTANCE_NAME_GCE1=valid-linux-ssh\nINSTANCE_NAME_GCE2=faulty-linux-ssh\nINSTANCE_NAME_GCE3=valid-windows-ssh\nINSTANCE_NAME_GCE4=faulty-windows-ssh\n\nall:\t\\\n\tjson-dumps/compute-effective-firewalls-default.json \\\n\tjson-dumps/compute-instances-$(ZONE_1).json \\\n\tjson-dumps/compute-instances-empty.json \\\n\tjson-dumps/compute-disks-$(ZONE_1).json \\\n\tjson-dumps/compute-disks-empty.json \\\n\tjson-dumps/compute-network-default.json \\\n\tjson-dumps/compute-project.json \\\n\tjson-dumps/compute-regions.json \\\n\tjson-dumps/compute-zones.json \\\n\tjson-dumps/iam-policy.json \\\n\tjson-dumps/iam-service-accounts.json \\\n\tjson-dumps/monitoring-query.json \\\n\tjson-dumps/project.json \\\n\tjson-dumps/services.json \\\n\tjson-dumps/compute-serial-port-output-$(INSTANCE_NAME_GCE1).json \\\n\tjson-dumps/compute-serial-port-output-$(INSTANCE_NAME_GCE2).json \\\n\tjson-dumps/compute-serial-port-output-$(INSTANCE_NAME_GCE3).json \\\n\tjson-dumps/compute-serial-port-output-$(INSTANCE_NAME_GCE4).json \\\n\ninclude ../Makefile.inc\n\ndefine MONITORING_QUERY\n{ \\\n  \"query\": \"fetch gce_instance \\\n            | metric 'compute.googleapis.com/instance/cpu/utilization' \\\n            | group_by 5m, [value_utilization_max: max(value.utilization)] \\\n            | every 5m \\\n  \t\t\t\t\t\" \\\n}\nendef\njson-dumps/monitoring-query.json:\n\t$(CURL) -fsS \\\n\t\t'https://monitoring.googleapis.com/v3/projects/$(PROJECT_ID)/timeSeries:query' \\\n\t\t--header \"Content-Type: application/json\" -X POST \\\n\t\t--data '$(MONITORING_QUERY)' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-serial-port-output-%.json:\n\t$(CURL) -fsS \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$(ZONE_1)/instances/$*/serialPort?start=-1000000' \\\n\t\t--header \"Content-Type:text/json\" \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-serial-port-output-%.json:\n\t$(CURL) -fsS \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$(ZONE_1)/instances/$*/serialPort?start=-1000000' \\\n\t\t--header \"Content-Type:text/json\" \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-serial-port-output-%.json:\n\t$(CURL) -fsS \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$(ZONE_1)/instances/$*/serialPort?start=-1000000' \\\n\t\t--header \"Content-Type:text/json\" \\\n\t\t| $(SED_SUBST_FAKE) >$@\njson-dumps/compute-serial-port-output-%.json:\n\t$(CURL) -fsS \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$(ZONE_1)/instances/$*/serialPort?start=-1000000' \\\n\t\t--header \"Content-Type:text/json\" \\\n\t\t| $(SED_SUBST_FAKE) >$@\n"
  },
  {
    "path": "test-data/gce2/gce_faulty_ssh.tf",
    "content": "/**\n * Copyright 2023 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nresource \"google_compute_instance\" \"faulty_linux_ssh\" {\n  project        = google_project.project.project_id\n  depends_on     = [google_project_service.compute]\n  name           = \"faulty-linux-ssh\"\n  machine_type   = \"e2-micro\"\n  zone           = \"europe-west2-a\"\n  desired_status = \"RUNNING\"\n  network_interface {\n    network = \"default\"\n  }\n  tags = [\"faulty-ssh-instance\", \"gce-secured-instance-test-deny\"]\n  scheduling {\n    preemptible       = true\n    automatic_restart = false\n  }\n  boot_disk {\n    initialize_params {\n      image = data.google_compute_image.debian.self_link\n    }\n  }\n  service_account {\n    email = data.google_compute_default_service_account.default.email\n    scopes = [\n      \"https://www.googleapis.com/auth/devstorage.read_only\",\n      \"https://www.googleapis.com/auth/logging.write\",\n      \"https://www.googleapis.com/auth/monitoring.write\",\n      \"https://www.googleapis.com/auth/service.management.readonly\",\n      \"https://www.googleapis.com/auth/servicecontrol\"\n    ]\n  }\n  labels = {\n    foo = \"bar\"\n  }\n  metadata_startup_script = <<-EOT\n  #!/bin/bash\n  # stop sshd\n  systemctl stop ssh\n\n  while true; do\n    : # Do nothing, which consumes CPU cycles\n  done\n  EOT\n  metadata = {\n    enable-oslogin = false\n  }\n}\n\n# Fault windows running ssh\n\nresource \"google_compute_instance\" \"faulty_windows_ssh\" {\n  project        = google_project.project.project_id\n  depends_on     = [google_project_service.compute]\n  name           = \"faulty-windows-ssh\"\n  machine_type   = \"e2-standard-2\"\n  zone           = \"europe-west2-a\"\n  desired_status = \"RUNNING\"\n  network_interface {\n    network = \"default\"\n  }\n  tags = [\"faulty-ssh-instance\", \"gce-secured-instance-test-deny\"]\n  scheduling {\n    preemptible       = true\n    automatic_restart = false\n  }\n  boot_disk {\n    initialize_params {\n      image = data.google_compute_image.windows.self_link\n    }\n  }\n  service_account {\n    email = data.google_compute_default_service_account.default.email\n    scopes = [\n      \"https://www.googleapis.com/auth/devstorage.read_only\",\n      \"https://www.googleapis.com/auth/logging.write\",\n      \"https://www.googleapis.com/auth/monitoring.write\",\n      \"https://www.googleapis.com/auth/service.management.readonly\",\n      \"https://www.googleapis.com/auth/servicecontrol\"\n    ]\n  }\n  labels = {\n    foo = \"bar\"\n  }\n  metadata = {\n    enable-oslogin = true\n  }\n  metadata_startup_script = <<-EOT\n  #!/bin/bash\n\n  shutdown -h now\n  EOT\n}\n\n# firewall configuration used for connectivity testing\n\nresource \"google_compute_firewall\" \"secured_instance_test_deny\" {\n  name    = \"gce-secured-instance-test-deny\"\n  network = \"default\"\n  project = var.project_id\n\n  priority = 900\n\n  deny {\n    ports    = [\"22\"]\n    protocol = \"tcp\"\n  }\n\n  source_ranges = [\n    \"0.0.0.0/0\",      # Block external access\n    \"35.235.240.0/20\" # block IAP\n  ]\n\n  target_tags = google_compute_instance.faulty_linux_ssh.tags\n  depends_on  = [google_compute_instance.faulty_linux_ssh]\n}\n\nresource \"google_service_account\" \"service_account\" {\n  account_id   = \"cannotssh\"\n  display_name = \"Cannot SSH Service Account\"\n  project      = var.project_id\n}\n\n\nresource \"google_compute_project_metadata\" \"dummy_key\" {\n  project = var.project_id\n  metadata = {\n    ssh-keys = <<EOF\n      foo:ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILg6UtHDNyMNAh0GjaytsJdrUxjtLy3APXqZfNZhvCeT foo\n    EOF\n  }\n}\n"
  },
  {
    "path": "test-data/gce2/gce_valid_ssh.tf",
    "content": "/**\n * Copyright 2023 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nresource \"google_compute_instance\" \"valid_linux_ssh\" {\n  project        = google_project.project.project_id\n  depends_on     = [google_project_service.compute]\n  name           = \"valid-linux-ssh\"\n  machine_type   = \"e2-micro\"\n  zone           = \"europe-west2-a\"\n  desired_status = \"RUNNING\"\n  network_interface {\n    network = \"default\"\n  }\n  tags = [\"valid-ssh-instance\"]\n  scheduling {\n    preemptible       = true\n    automatic_restart = false\n  }\n  boot_disk {\n    initialize_params {\n      image = data.google_compute_image.debian.self_link\n    }\n  }\n  service_account {\n    email = data.google_compute_default_service_account.default.email\n    scopes = [\n      \"https://www.googleapis.com/auth/devstorage.read_only\",\n      \"https://www.googleapis.com/auth/logging.write\",\n      \"https://www.googleapis.com/auth/monitoring.write\",\n      \"https://www.googleapis.com/auth/service.management.readonly\",\n      \"https://www.googleapis.com/auth/servicecontrol\"\n    ]\n  }\n  labels = {\n    foo = \"bar\"\n  }\n  metadata = {\n    enable-oslogin = true\n  }\n  metadata_startup_script = <<-EOT\n  #!/bin/bash\n\n  curl -sSO https://dl.google.com/cloudagents/add-google-cloud-ops-agent-repo.sh\n  sudo bash add-google-cloud-ops-agent-repo.sh --also-install\n  EOT\n}\n\n# Fault windows running ssh\n\nresource \"google_compute_instance\" \"valid_windows_ssh\" {\n  project        = google_project.project.project_id\n  depends_on     = [google_project_service.compute]\n  name           = \"valid-windows-ssh\"\n  machine_type   = \"e2-micro\"\n  zone           = \"europe-west2-a\"\n  desired_status = \"RUNNING\"\n  network_interface {\n    network = \"default\"\n  }\n  tags = [\"valid-ssh-instance\"]\n  scheduling {\n    preemptible       = true\n    automatic_restart = false\n  }\n  boot_disk {\n    initialize_params {\n      image = data.google_compute_image.windows.self_link\n    }\n  }\n  service_account {\n    email = data.google_compute_default_service_account.default.email\n    scopes = [\n      \"https://www.googleapis.com/auth/devstorage.read_only\",\n      \"https://www.googleapis.com/auth/logging.write\",\n      \"https://www.googleapis.com/auth/monitoring.write\",\n      \"https://www.googleapis.com/auth/service.management.readonly\",\n      \"https://www.googleapis.com/auth/servicecontrol\"\n    ]\n  }\n  labels = {\n    foo = \"bar\"\n  }\n  metadata = {\n    enable-oslogin = true\n  }\n}\n\n# firewall configuration used for connectivity testing\n\nresource \"google_compute_firewall\" \"secured_instance_test_allow\" {\n  name    = \"gce-secured-instance-test-allow\"\n  network = \"default\"\n  project = google_project.project.project_id\n\n  priority = 900\n\n  allow {\n    ports    = [\"22\"]\n    protocol = \"tcp\"\n  }\n\n  # allow external access and IAP\n  source_ranges = [\n    \"0.0.0.0/0\",\n    \"35.235.240.0/20\"\n  ]\n\n  target_tags = google_compute_instance.faulty_linux_ssh.tags\n  depends_on  = [google_compute_instance.faulty_linux_ssh]\n}\n\nresource \"google_service_account\" \"canssh_service_account\" {\n  account_id   = \"canssh\"\n  display_name = \"Can SSH Service Account\"\n  project      = var.project_id\n}\n\nresource \"google_project_iam_member\" \"service_account_member_policy\" {\n  for_each   = { for role in var.roles : role => role }\n  project    = var.project_id\n  role       = each.value\n  member     = \"serviceAccount:${google_service_account.canssh_service_account.name}\"\n  depends_on = [google_service_account.canssh_service_account]\n}\n"
  },
  {
    "path": "test-data/gce2/json-dumps/compute-disks-europe-west1-b.json",
    "content": "{\n  \"kind\": \"compute#diskList\",\n  \"id\": \"projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/disks\",\n  \"items\": [\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"7550338177783293118\",\n      \"creationTimestamp\": \"2022-05-10T05:28:01.712-07:00\",\n      \"name\": \"gke-gke1-default-pool-5665d797-62lh\",\n      \"sizeGb\": \"100\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/disks/gke-gke1-default-pool-5665d797-62lh\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-12110-gke2000-cos-89-16108-604-19-v220317-c-pre\",\n      \"sourceImageId\": \"8040052912969817984\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/diskTypes/pd-standard\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"UEFI_COMPATIBLE\"\n        },\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        },\n        {\n          \"type\": \"SEV_CAPABLE\"\n        },\n        {\n          \"type\": \"SECURE_BOOT\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2022-05-10T05:28:01.713-07:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances/gke-gke1-default-pool-5665d797-62lh\"\n      ],\n      \"labels\": {\n        \"gcp_doctor_test\": \"gke\",\n        \"goog-gke-node\": \"\"\n      },\n      \"labelFingerprint\": \"mUgogP08_Iw=\",\n      \"licenseCodes\": [\n        \"1001003\",\n        \"1001010\",\n        \"166739712233658766\",\n        \"6880041984096540132\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\"\n    },\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"7424433754121692350\",\n      \"creationTimestamp\": \"2022-05-10T05:28:02.097-07:00\",\n      \"name\": \"gke-gke1-default-pool-5665d797-hz12\",\n      \"sizeGb\": \"100\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/disks/gke-gke1-default-pool-5665d797-hz12\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-12110-gke2000-cos-89-16108-604-19-v220317-c-pre\",\n      \"sourceImageId\": \"8040052912969817984\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/diskTypes/pd-standard\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"UEFI_COMPATIBLE\"\n        },\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        },\n        {\n          \"type\": \"SEV_CAPABLE\"\n        },\n        {\n          \"type\": \"SECURE_BOOT\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2022-05-10T05:28:02.097-07:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances/gke-gke1-default-pool-5665d797-hz12\"\n      ],\n      \"labels\": {\n        \"gcp_doctor_test\": \"gke\",\n        \"goog-gke-node\": \"\"\n      },\n      \"labelFingerprint\": \"mUgogP08_Iw=\",\n      \"licenseCodes\": [\n        \"1001003\",\n        \"1001010\",\n        \"166739712233658766\",\n        \"6880041984096540132\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\"\n    },\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"8594043929682764990\",\n      \"creationTimestamp\": \"2022-05-10T05:28:02.179-07:00\",\n      \"name\": \"gke-gke1-default-pool-5665d797-jd80\",\n      \"sizeGb\": \"100\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/disks/gke-gke1-default-pool-5665d797-jd80\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-12110-gke2000-cos-89-16108-604-19-v220317-c-pre\",\n      \"sourceImageId\": \"8040052912969817984\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/diskTypes/pd-standard\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"UEFI_COMPATIBLE\"\n        },\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        },\n        {\n          \"type\": \"SEV_CAPABLE\"\n        },\n        {\n          \"type\": \"SECURE_BOOT\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2022-05-10T05:28:02.179-07:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances/gke-gke1-default-pool-5665d797-jd80\"\n      ],\n      \"labels\": {\n        \"gcp_doctor_test\": \"gke\",\n        \"goog-gke-node\": \"\"\n      },\n      \"labelFingerprint\": \"mUgogP08_Iw=\",\n      \"licenseCodes\": [\n        \"1001003\",\n        \"1001010\",\n        \"166739712233658766\",\n        \"6880041984096540132\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\"\n    },\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"7088717128623711421\",\n      \"creationTimestamp\": \"2022-05-10T05:28:03.186-07:00\",\n      \"name\": \"gke-gke1-default-pool-5665d797-z9kh\",\n      \"sizeGb\": \"100\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/disks/gke-gke1-default-pool-5665d797-z9kh\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-12110-gke2000-cos-89-16108-604-19-v220317-c-pre\",\n      \"sourceImageId\": \"8040052912969817984\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/diskTypes/pd-standard\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"UEFI_COMPATIBLE\"\n        },\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        },\n        {\n          \"type\": \"SEV_CAPABLE\"\n        },\n        {\n          \"type\": \"SECURE_BOOT\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2022-05-10T05:28:03.187-07:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances/gke-gke1-default-pool-5665d797-z9kh\"\n      ],\n      \"labels\": {\n        \"gcp_doctor_test\": \"gke\",\n        \"goog-gke-node\": \"\"\n      },\n      \"labelFingerprint\": \"mUgogP08_Iw=\",\n      \"licenseCodes\": [\n        \"1001003\",\n        \"1001010\",\n        \"166739712233658766\",\n        \"6880041984096540132\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/disks\"\n}\n"
  },
  {
    "path": "test-data/gce2/json-dumps/compute-disks-europe-west2-a.json",
    "content": "{\n  \"kind\": \"compute#diskList\",\n  \"id\": \"projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/disks\",\n  \"items\": [\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"1020012628094441724\",\n      \"creationTimestamp\": \"2023-11-16T20:03:33.349-08:00\",\n      \"name\": \"faulty-linux-ssh\",\n      \"sizeGb\": \"10\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/disks/faulty-linux-ssh\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-11-bullseye-v20231115\",\n      \"sourceImageId\": \"3081125733607199085\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/diskTypes/pd-standard\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"UEFI_COMPATIBLE\"\n        },\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        },\n        {\n          \"type\": \"GVNIC\"\n        },\n        {\n          \"type\": \"SEV_CAPABLE\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2023-11-16T20:03:33.350-08:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/faulty-linux-ssh\"\n      ],\n      \"labelFingerprint\": \"42WmSpB8rSM=\",\n      \"licenseCodes\": [\n        \"3853522013536123851\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\",\n      \"architecture\": \"X86_64\"\n    },\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"5193645208196831705\",\n      \"creationTimestamp\": \"2023-11-16T20:08:24.574-08:00\",\n      \"name\": \"faulty-windows-ssh\",\n      \"sizeGb\": \"32\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/disks/faulty-windows-ssh\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/images/windows-server-2019-dc-core-v20231115\",\n      \"sourceImageId\": \"4704563576960484445\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/diskTypes/pd-standard\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2019-dc\",\n        \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-core\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"MULTI_IP_SUBNET\"\n        },\n        {\n          \"type\": \"UEFI_COMPATIBLE\"\n        },\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        },\n        {\n          \"type\": \"GVNIC\"\n        },\n        {\n          \"type\": \"WINDOWS\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2023-11-16T20:08:24.575-08:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/faulty-windows-ssh\"\n      ],\n      \"labelFingerprint\": \"42WmSpB8rSM=\",\n      \"licenseCodes\": [\n        \"3389558045860892917\",\n        \"1000226\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\",\n      \"architecture\": \"X86_64\"\n    },\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"7702462607973374205\",\n      \"creationTimestamp\": \"2023-11-16T20:03:32.812-08:00\",\n      \"name\": \"valid-linux-ssh\",\n      \"sizeGb\": \"10\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/disks/valid-linux-ssh\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-11-bullseye-v20231115\",\n      \"sourceImageId\": \"3081125733607199085\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/diskTypes/pd-standard\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"UEFI_COMPATIBLE\"\n        },\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        },\n        {\n          \"type\": \"GVNIC\"\n        },\n        {\n          \"type\": \"SEV_CAPABLE\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2023-11-16T20:03:32.812-08:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/valid-linux-ssh\"\n      ],\n      \"labelFingerprint\": \"42WmSpB8rSM=\",\n      \"licenseCodes\": [\n        \"3853522013536123851\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\",\n      \"architecture\": \"X86_64\"\n    },\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"5223308949582469373\",\n      \"creationTimestamp\": \"2023-11-16T20:03:32.839-08:00\",\n      \"name\": \"valid-windows-ssh\",\n      \"sizeGb\": \"32\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/disks/valid-windows-ssh\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/images/windows-server-2019-dc-core-v20231115\",\n      \"sourceImageId\": \"4704563576960484445\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/diskTypes/pd-standard\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2019-dc\",\n        \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-core\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"MULTI_IP_SUBNET\"\n        },\n        {\n          \"type\": \"UEFI_COMPATIBLE\"\n        },\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        },\n        {\n          \"type\": \"GVNIC\"\n        },\n        {\n          \"type\": \"WINDOWS\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2023-11-16T20:03:32.839-08:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/valid-windows-ssh\"\n      ],\n      \"labelFingerprint\": \"42WmSpB8rSM=\",\n      \"licenseCodes\": [\n        \"3389558045860892917\",\n        \"1000226\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\",\n      \"architecture\": \"X86_64\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/disks\"\n}\n"
  },
  {
    "path": "test-data/gce2/json-dumps/compute-disks-europe-west2-b.json",
    "content": "{\n  \"kind\": \"compute#diskList\",\n  \"id\": \"projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-b/disks\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-b/disks\"\n}\n"
  },
  {
    "path": "test-data/gce2/json-dumps/compute-disks-europe-west4-a.json",
    "content": "{\n  \"kind\": \"compute#diskList\",\n  \"id\": \"projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks\",\n  \"items\": [\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"4897755586815845618\",\n      \"creationTimestamp\": \"2022-05-10T05:27:10.646-07:00\",\n      \"name\": \"gce1\",\n      \"sizeGb\": \"32\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/gce1\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/images/windows-server-2019-dc-core-v20220414\",\n      \"sourceImageId\": \"3529112155699095586\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/diskTypes/pd-standard\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2019-dc\",\n        \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-core\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"MULTI_IP_SUBNET\"\n        },\n        {\n          \"type\": \"UEFI_COMPATIBLE\"\n        },\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        },\n        {\n          \"type\": \"WINDOWS\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2022-05-10T05:27:10.647-07:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1\"\n      ],\n      \"labelFingerprint\": \"42WmSpB8rSM=\",\n      \"licenseCodes\": [\n        \"3389558045860892917\",\n        \"1000226\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\"\n    },\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"7436782321968604403\",\n      \"creationTimestamp\": \"2022-05-10T05:27:09.694-07:00\",\n      \"name\": \"gce2\",\n      \"sizeGb\": \"10\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/gce2\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/images/cos-85-13310-1453-5\",\n      \"sourceImageId\": \"1276396551904338204\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/diskTypes/pd-standard\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        },\n        {\n          \"type\": \"SEV_CAPABLE\"\n        },\n        {\n          \"type\": \"UEFI_COMPATIBLE\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2022-05-10T05:27:09.695-07:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2\"\n      ],\n      \"labelFingerprint\": \"42WmSpB8rSM=\",\n      \"licenseCodes\": [\n        \"6880041984096540132\",\n        \"1001010\",\n        \"166739712233658766\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\"\n    },\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"2534143966095860953\",\n      \"creationTimestamp\": \"2022-05-10T05:27:34.871-07:00\",\n      \"name\": \"mig-926f\",\n      \"sizeGb\": \"10\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/mig-926f\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-9-stretch-v20220406\",\n      \"sourceImageId\": \"1994093915008945255\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/diskTypes/pd-standard\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-9-stretch\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2022-05-10T05:27:34.872-07:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-926f\"\n      ],\n      \"labelFingerprint\": \"42WmSpB8rSM=\",\n      \"licenseCodes\": [\n        \"1000205\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\"\n    },\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"3703127063546815705\",\n      \"creationTimestamp\": \"2022-05-10T05:27:35.177-07:00\",\n      \"name\": \"mig-hmnt\",\n      \"sizeGb\": \"10\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/mig-hmnt\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-9-stretch-v20220406\",\n      \"sourceImageId\": \"1994093915008945255\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/diskTypes/pd-standard\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-9-stretch\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2022-05-10T05:27:35.178-07:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-hmnt\"\n      ],\n      \"labelFingerprint\": \"42WmSpB8rSM=\",\n      \"licenseCodes\": [\n        \"1000205\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\"\n    },\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"4944833045469848960\",\n      \"creationTimestamp\": \"2022-05-10T05:32:47.994-07:00\",\n      \"name\": \"unattached-disk\",\n      \"sizeGb\": \"10\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/unattached-disk\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-9-stretch-v20200805\",\n      \"sourceImageId\": \"6709658075886210235\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/diskTypes/pd-ssd\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-9-stretch\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        }\n      ],\n      \"labels\": {\n        \"environment\": \"dev\"\n      },\n      \"labelFingerprint\": \"a6HI36FuYIQ=\",\n      \"licenseCodes\": [\n        \"1000205\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks\"\n}\n"
  },
  {
    "path": "test-data/gce2/json-dumps/compute-effective-firewalls-default.json",
    "content": "{\n  \"firewalls\": [\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"6654944905093765942\",\n      \"creationTimestamp\": \"2023-11-03T14:27:53.667-07:00\",\n      \"name\": \"default-allow-icmp\",\n      \"description\": \"Allow ICMP from anywhere\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/networks/default\",\n      \"priority\": 65534,\n      \"sourceRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"icmp\"\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/firewalls/default-allow-icmp\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"4341098039640382262\",\n      \"creationTimestamp\": \"2023-11-03T14:27:53.660-07:00\",\n      \"name\": \"default-allow-ssh\",\n      \"description\": \"Allow SSH from anywhere\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/networks/default\",\n      \"priority\": 65534,\n      \"sourceRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"22\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/firewalls/default-allow-ssh\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"3384956594912865471\",\n      \"creationTimestamp\": \"2023-11-05T14:08:16.385-08:00\",\n      \"name\": \"gce-secured-instance-test-allow\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/networks/default\",\n      \"priority\": 900,\n      \"sourceRanges\": [\n        \"0.0.0.0/0\",\n        \"35.235.240.0/20\"\n      ],\n      \"targetTags\": [\n        \"faulty-ssh-instance\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"22\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/firewalls/gce-secured-instance-test-allow\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"2430705094709795638\",\n      \"creationTimestamp\": \"2023-11-03T14:27:53.657-07:00\",\n      \"name\": \"default-allow-internal\",\n      \"description\": \"Allow internal traffic on the default network\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/networks/default\",\n      \"priority\": 65534,\n      \"sourceRanges\": [\n        \"10.128.0.0/9\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"0-65535\"\n          ]\n        },\n        {\n          \"IPProtocol\": \"udp\",\n          \"ports\": [\n            \"0-65535\"\n          ]\n        },\n        {\n          \"IPProtocol\": \"icmp\"\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/firewalls/default-allow-internal\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"4126568254316010294\",\n      \"creationTimestamp\": \"2023-11-03T14:27:53.664-07:00\",\n      \"name\": \"default-allow-rdp\",\n      \"description\": \"Allow RDP from anywhere\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/networks/default\",\n      \"priority\": 65534,\n      \"sourceRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"3389\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/firewalls/default-allow-rdp\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"8244892118186044576\",\n      \"creationTimestamp\": \"2023-11-05T14:08:15.743-08:00\",\n      \"name\": \"gce-secured-instance-test-deny\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/networks/default\",\n      \"priority\": 900,\n      \"sourceRanges\": [\n        \"0.0.0.0/0\",\n        \"35.235.240.0/20\"\n      ],\n      \"targetTags\": [\n        \"faulty-ssh-instance\"\n      ],\n      \"denied\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"22\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/firewalls/gce-secured-instance-test-deny\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gce2/json-dumps/compute-igs-europe-west1-b.json",
    "content": "{\n  \"kind\": \"compute#instanceGroupList\",\n  \"id\": \"projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instanceGroups\",\n  \"items\": [\n    {\n      \"kind\": \"compute#instanceGroup\",\n      \"id\": \"4752839275668943076\",\n      \"creationTimestamp\": \"2022-04-26T08:21:47.107-07:00\",\n      \"name\": \"gke-gke1-default-pool-35923fbc-grp\",\n      \"description\": \"This instance group is controlled by Instance Group Manager 'gke-gke1-default-pool-35923fbc-grp'. To modify instances in this group, use the Instance Group Manager API: https://cloud.google.com/compute/docs/reference/latest/instanceGroupManagers\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n      \"fingerprint\": \"42WmSpB8rSM=\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instanceGroups/gke-gke1-default-pool-35923fbc-grp\",\n      \"size\": 4,\n      \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west1/subnetworks/default\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instanceGroups\"\n}\n"
  },
  {
    "path": "test-data/gce2/json-dumps/compute-igs-europe-west2-b.json",
    "content": "{\n  \"kind\": \"compute#instanceGroupList\",\n  \"id\": \"projects/gcpdiag-gce1-aaaa/zones/europe-west2-b/instanceGroups\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west2-b/instanceGroups\"\n}\n"
  },
  {
    "path": "test-data/gce2/json-dumps/compute-igs-europe-west4-a.json",
    "content": "{\n  \"kind\": \"compute#instanceGroupList\",\n  \"id\": \"projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups\",\n  \"items\": [\n    {\n      \"kind\": \"compute#instanceGroup\",\n      \"id\": \"3671191198561055498\",\n      \"creationTimestamp\": \"2022-04-26T08:21:09.998-07:00\",\n      \"name\": \"instance-group-1\",\n      \"description\": \"\",\n      \"namedPorts\": [\n        {\n          \"name\": \"http\",\n          \"port\": 8080\n        },\n        {\n          \"name\": \"http\",\n          \"port\": 8443\n        }\n      ],\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n      \"fingerprint\": \"bPhGeNqJuxo=\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups/instance-group-1\",\n      \"size\": 1,\n      \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default\"\n    },\n    {\n      \"kind\": \"compute#instanceGroup\",\n      \"id\": \"2978499701990863624\",\n      \"creationTimestamp\": \"2022-04-26T08:21:11.396-07:00\",\n      \"name\": \"instance-group-2\",\n      \"description\": \"\",\n      \"namedPorts\": [\n        {\n          \"name\": \"http\",\n          \"port\": 8080\n        },\n        {\n          \"name\": \"https\",\n          \"port\": 8443\n        }\n      ],\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n      \"fingerprint\": \"OMWWjJuNHl0=\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups/instance-group-2\",\n      \"size\": 1,\n      \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default\"\n    },\n    {\n      \"kind\": \"compute#instanceGroup\",\n      \"id\": \"4528539620862178056\",\n      \"creationTimestamp\": \"2022-04-26T08:21:11.080-07:00\",\n      \"name\": \"mig\",\n      \"description\": \"This instance group is controlled by Instance Group Manager 'mig'. To modify instances in this group, use the Instance Group Manager API: https://cloud.google.com/compute/docs/reference/latest/instanceGroupManagers\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n      \"fingerprint\": \"42WmSpB8rSM=\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups/mig\",\n      \"size\": 2,\n      \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups\"\n}\n"
  },
  {
    "path": "test-data/gce2/json-dumps/compute-instances-europe-west1-b-2.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances\",\n  \"items\": [\n    {\n      \"canIpForward\": true,\n      \"cpuPlatform\": \"Intel Broadwell\",\n      \"creationTimestamp\": \"2022-04-26T08:21:54.798-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"100\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            },\n            {\n              \"type\": \"SECURE_BOOT\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"shieldedInstanceInitialState\": {\n            \"dbs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"dbxs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"keks\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"pk\": {\n              \"content\": \"REDACTED\",\n              \"fileType\": \"X509\"\n            }\n          },\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/disks/gke-gke1-default-pool-35923fbc-k05c\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"3147904666822881533\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"mUgogP08_Iw=\",\n      \"labels\": {\n        \"gcp_doctor_test\": \"gke\",\n        \"goog-gke-node\": \"\"\n      },\n      \"lastStartTimestamp\": \"2022-04-26T08:22:01.245-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/machineTypes/e2-small\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"instance-template\",\n            \"value\": \"projects/12340001/global/instanceTemplates/gke-gke1-default-pool-35923fbc\"\n          },\n          {\n            \"key\": \"created-by\",\n            \"value\": \"projects/12340001/zones/europe-west1-b/instanceGroupManagers/gke-gke1-default-pool-35923fbc-grp\"\n          },\n          {\n            \"key\": \"serial-port-logging-enable\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"kube-labels\",\n            \"value\": \"cloud.google.com/gke-boot-disk=pd-standard,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/machine-family=e2\"\n          },\n          {\n            \"key\": \"google-compute-enable-pcid\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"enable-oslogin\",\n            \"value\": \"false\"\n          },\n          {\n            \"key\": \"kubelet-config\",\n            \"value\": \"apiVersion: kubelet.config.k8s.io/v1beta1\\nauthentication:\\n  anonymous:\\n    enabled: false\\n  webhook:\\n    enabled: true\\n  x509:\\n    clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\\nauthorization:\\n  mode: Webhook\\ncgroupRoot: /\\nclusterDNS:\\n- 10.3.240.10\\nclusterDomain: cluster.local\\nenableDebuggingHandlers: true\\nevictionHard:\\n  memory.available: 100Mi\\n  nodefs.available: 10%\\n  nodefs.inodesFree: 5%\\n  pid.available: 10%\\nfeatureGates:\\n  DynamicKubeletConfig: false\\n  ExecProbeTimeout: false\\n  InTreePluginAWSUnregister: true\\n  InTreePluginAzureDiskUnregister: true\\n  InTreePluginOpenStackUnregister: true\\n  InTreePluginvSphereUnregister: true\\n  RotateKubeletServerCertificate: true\\nkernelMemcgNotification: true\\nkind: KubeletConfiguration\\nkubeReserved:\\n  cpu: 1060m\\n  ephemeral-storage: 41Gi\\n  memory: 512Mi\\nreadOnlyPort: 10255\\nserverTLSBootstrap: true\\nstaticPodPath: /etc/kubernetes/manifests\\n\"\n          },\n          {\n            \"key\": \"kubeconfig\",\n            \"value\": \"apiVersion: v1\\nkind: Config\\nclusters:\\n- cluster:\\n    server: https://35.205.188.165\\n    certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\\n  name: default-cluster\\ncontexts:\\n- context:\\n    cluster: default-cluster\\n    namespace: default\\n    user: exec-plugin-auth\\n  name: default-context\\ncurrent-context: default-context\\nusers:\\n- name: exec-plugin-auth\\n  user:\\n    exec:\\n      apiVersion: \\\"client.authentication.k8s.io/v1alpha1\\\"\\n      command: '/home/kubernetes/bin/gke-exec-auth-plugin'\\n      args: [\\\"--cache-dir\\\", '/var/lib/kubelet/pki/']\\n\"\n          },\n          {\n            \"key\": \"cluster-name\",\n            \"value\": \"gke1\"\n          },\n          {\n            \"key\": \"gci-update-strategy\",\n            \"value\": \"update_disabled\"\n          },\n          {\n            \"key\": \"gci-metrics-enabled\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"configure-sh\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"gci-ensure-gke-docker\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"disable-legacy-endpoints\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"user-data\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"kube-env\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"cluster-uid\",\n            \"value\": \"f36cf6ddd50c4b998cf1921fbc3e11fc6895bf0ad2d841e7956d7fca6e7024b4\"\n          },\n          {\n            \"key\": \"cluster-location\",\n            \"value\": \"europe-west1-b\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"gke-gke1-default-pool-35923fbc-k05c\",\n      \"networkInterfaces\": [\n        {\n          \"accessConfigs\": [\n            {\n              \"kind\": \"compute#accessConfig\",\n              \"name\": \"external-nat\",\n              \"natIP\": \"34.79.110.136\",\n              \"networkTier\": \"PREMIUM\",\n              \"type\": \"ONE_TO_ONE_NAT\"\n            }\n          ],\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n          \"networkIP\": \"10.132.0.2\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west1/subnetworks/default\"\n        }\n      ],\n      \"networkPerformanceConfig\": {\n        \"totalEgressBandwidthTier\": \"DEFAULT\"\n      },\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances/gke-gke1-default-pool-35923fbc-k05c\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"12340001-compute@developer.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/logging.write\",\n            \"https://www.googleapis.com/auth/monitoring\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"gke-gke1-f36cf6dd-node\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b\"\n    }\n  ],\n  \"kind\": \"compute#instanceList\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances\"\n}\n"
  },
  {
    "path": "test-data/gce2/json-dumps/compute-instances-europe-west1-b.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances\",\n  \"items\": [\n    {\n      \"canIpForward\": true,\n      \"cpuPlatform\": \"Intel Broadwell\",\n      \"creationTimestamp\": \"2022-04-26T08:21:56.296-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"100\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            },\n            {\n              \"type\": \"SECURE_BOOT\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"shieldedInstanceInitialState\": {\n            \"dbs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"dbxs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"keks\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"pk\": {\n              \"content\": \"REDACTED\",\n              \"fileType\": \"X509\"\n            }\n          },\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/disks/gke-gke1-default-pool-35923fbc-2xxp\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"1470007467084984573\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"mUgogP08_Iw=\",\n      \"labels\": {\n        \"gcp_doctor_test\": \"gke\",\n        \"goog-gke-node\": \"\"\n      },\n      \"lastStartTimestamp\": \"2022-04-26T08:22:05.407-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/machineTypes/e2-small\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"instance-template\",\n            \"value\": \"projects/12340001/global/instanceTemplates/gke-gke1-default-pool-35923fbc\"\n          },\n          {\n            \"key\": \"created-by\",\n            \"value\": \"projects/12340001/zones/europe-west1-b/instanceGroupManagers/gke-gke1-default-pool-35923fbc-grp\"\n          },\n          {\n            \"key\": \"serial-port-logging-enable\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"kube-labels\",\n            \"value\": \"cloud.google.com/gke-boot-disk=pd-standard,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/machine-family=e2\"\n          },\n          {\n            \"key\": \"google-compute-enable-pcid\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"enable-oslogin\",\n            \"value\": \"false\"\n          },\n          {\n            \"key\": \"kubelet-config\",\n            \"value\": \"apiVersion: kubelet.config.k8s.io/v1beta1\\nauthentication:\\n  anonymous:\\n    enabled: false\\n  webhook:\\n    enabled: true\\n  x509:\\n    clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\\nauthorization:\\n  mode: Webhook\\ncgroupRoot: /\\nclusterDNS:\\n- 10.3.240.10\\nclusterDomain: cluster.local\\nenableDebuggingHandlers: true\\nevictionHard:\\n  memory.available: 100Mi\\n  nodefs.available: 10%\\n  nodefs.inodesFree: 5%\\n  pid.available: 10%\\nfeatureGates:\\n  DynamicKubeletConfig: false\\n  ExecProbeTimeout: false\\n  InTreePluginAWSUnregister: true\\n  InTreePluginAzureDiskUnregister: true\\n  InTreePluginOpenStackUnregister: true\\n  InTreePluginvSphereUnregister: true\\n  RotateKubeletServerCertificate: true\\nkernelMemcgNotification: true\\nkind: KubeletConfiguration\\nkubeReserved:\\n  cpu: 1060m\\n  ephemeral-storage: 41Gi\\n  memory: 512Mi\\nreadOnlyPort: 10255\\nserverTLSBootstrap: true\\nstaticPodPath: /etc/kubernetes/manifests\\n\"\n          },\n          {\n            \"key\": \"kubeconfig\",\n            \"value\": \"apiVersion: v1\\nkind: Config\\nclusters:\\n- cluster:\\n    server: https://35.205.188.165\\n    certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\\n  name: default-cluster\\ncontexts:\\n- context:\\n    cluster: default-cluster\\n    namespace: default\\n    user: exec-plugin-auth\\n  name: default-context\\ncurrent-context: default-context\\nusers:\\n- name: exec-plugin-auth\\n  user:\\n    exec:\\n      apiVersion: \\\"client.authentication.k8s.io/v1alpha1\\\"\\n      command: '/home/kubernetes/bin/gke-exec-auth-plugin'\\n      args: [\\\"--cache-dir\\\", '/var/lib/kubelet/pki/']\\n\"\n          },\n          {\n            \"key\": \"cluster-name\",\n            \"value\": \"gke1\"\n          },\n          {\n            \"key\": \"gci-update-strategy\",\n            \"value\": \"update_disabled\"\n          },\n          {\n            \"key\": \"gci-metrics-enabled\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"configure-sh\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"gci-ensure-gke-docker\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"disable-legacy-endpoints\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"user-data\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"kube-env\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"cluster-uid\",\n            \"value\": \"f36cf6ddd50c4b998cf1921fbc3e11fc6895bf0ad2d841e7956d7fca6e7024b4\"\n          },\n          {\n            \"key\": \"cluster-location\",\n            \"value\": \"europe-west1-b\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"gke-gke1-default-pool-35923fbc-2xxp\",\n      \"networkInterfaces\": [\n        {\n          \"accessConfigs\": [\n            {\n              \"kind\": \"compute#accessConfig\",\n              \"name\": \"external-nat\",\n              \"natIP\": \"34.78.171.82\",\n              \"networkTier\": \"PREMIUM\",\n              \"type\": \"ONE_TO_ONE_NAT\"\n            }\n          ],\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n          \"networkIP\": \"10.132.0.5\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west1/subnetworks/default\"\n        }\n      ],\n      \"networkPerformanceConfig\": {\n        \"totalEgressBandwidthTier\": \"DEFAULT\"\n      },\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances/gke-gke1-default-pool-35923fbc-2xxp\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"12340001-compute@developer.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/logging.write\",\n            \"https://www.googleapis.com/auth/monitoring\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"gke-gke1-f36cf6dd-node\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b\"\n    },\n    {\n      \"canIpForward\": true,\n      \"cpuPlatform\": \"Intel Broadwell\",\n      \"creationTimestamp\": \"2022-04-26T08:21:55.180-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"100\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            },\n            {\n              \"type\": \"SECURE_BOOT\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"shieldedInstanceInitialState\": {\n            \"dbs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"dbxs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"keks\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"pk\": {\n              \"content\": \"REDACTED\",\n              \"fileType\": \"X509\"\n            }\n          },\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/disks/gke-gke1-default-pool-35923fbc-c12f\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"183710301471224061\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"mUgogP08_Iw=\",\n      \"labels\": {\n        \"gcp_doctor_test\": \"gke\",\n        \"goog-gke-node\": \"\"\n      },\n      \"lastStartTimestamp\": \"2022-04-26T08:22:02.051-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/machineTypes/e2-small\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"instance-template\",\n            \"value\": \"projects/12340001/global/instanceTemplates/gke-gke1-default-pool-35923fbc\"\n          },\n          {\n            \"key\": \"created-by\",\n            \"value\": \"projects/12340001/zones/europe-west1-b/instanceGroupManagers/gke-gke1-default-pool-35923fbc-grp\"\n          },\n          {\n            \"key\": \"serial-port-logging-enable\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"kube-labels\",\n            \"value\": \"cloud.google.com/gke-boot-disk=pd-standard,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/machine-family=e2\"\n          },\n          {\n            \"key\": \"google-compute-enable-pcid\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"enable-oslogin\",\n            \"value\": \"false\"\n          },\n          {\n            \"key\": \"kubelet-config\",\n            \"value\": \"apiVersion: kubelet.config.k8s.io/v1beta1\\nauthentication:\\n  anonymous:\\n    enabled: false\\n  webhook:\\n    enabled: true\\n  x509:\\n    clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\\nauthorization:\\n  mode: Webhook\\ncgroupRoot: /\\nclusterDNS:\\n- 10.3.240.10\\nclusterDomain: cluster.local\\nenableDebuggingHandlers: true\\nevictionHard:\\n  memory.available: 100Mi\\n  nodefs.available: 10%\\n  nodefs.inodesFree: 5%\\n  pid.available: 10%\\nfeatureGates:\\n  DynamicKubeletConfig: false\\n  ExecProbeTimeout: false\\n  InTreePluginAWSUnregister: true\\n  InTreePluginAzureDiskUnregister: true\\n  InTreePluginOpenStackUnregister: true\\n  InTreePluginvSphereUnregister: true\\n  RotateKubeletServerCertificate: true\\nkernelMemcgNotification: true\\nkind: KubeletConfiguration\\nkubeReserved:\\n  cpu: 1060m\\n  ephemeral-storage: 41Gi\\n  memory: 512Mi\\nreadOnlyPort: 10255\\nserverTLSBootstrap: true\\nstaticPodPath: /etc/kubernetes/manifests\\n\"\n          },\n          {\n            \"key\": \"kubeconfig\",\n            \"value\": \"apiVersion: v1\\nkind: Config\\nclusters:\\n- cluster:\\n    server: https://35.205.188.165\\n    certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\\n  name: default-cluster\\ncontexts:\\n- context:\\n    cluster: default-cluster\\n    namespace: default\\n    user: exec-plugin-auth\\n  name: default-context\\ncurrent-context: default-context\\nusers:\\n- name: exec-plugin-auth\\n  user:\\n    exec:\\n      apiVersion: \\\"client.authentication.k8s.io/v1alpha1\\\"\\n      command: '/home/kubernetes/bin/gke-exec-auth-plugin'\\n      args: [\\\"--cache-dir\\\", '/var/lib/kubelet/pki/']\\n\"\n          },\n          {\n            \"key\": \"cluster-name\",\n            \"value\": \"gke1\"\n          },\n          {\n            \"key\": \"gci-update-strategy\",\n            \"value\": \"update_disabled\"\n          },\n          {\n            \"key\": \"gci-metrics-enabled\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"configure-sh\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"gci-ensure-gke-docker\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"disable-legacy-endpoints\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"user-data\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"kube-env\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"cluster-uid\",\n            \"value\": \"f36cf6ddd50c4b998cf1921fbc3e11fc6895bf0ad2d841e7956d7fca6e7024b4\"\n          },\n          {\n            \"key\": \"cluster-location\",\n            \"value\": \"europe-west1-b\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"gke-gke1-default-pool-35923fbc-c12f\",\n      \"networkInterfaces\": [\n        {\n          \"accessConfigs\": [\n            {\n              \"kind\": \"compute#accessConfig\",\n              \"name\": \"external-nat\",\n              \"natIP\": \"34.76.115.182\",\n              \"networkTier\": \"PREMIUM\",\n              \"type\": \"ONE_TO_ONE_NAT\"\n            }\n          ],\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n          \"networkIP\": \"10.132.0.3\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west1/subnetworks/default\"\n        }\n      ],\n      \"networkPerformanceConfig\": {\n        \"totalEgressBandwidthTier\": \"DEFAULT\"\n      },\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances/gke-gke1-default-pool-35923fbc-c12f\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"12340001-compute@developer.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/logging.write\",\n            \"https://www.googleapis.com/auth/monitoring\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"gke-gke1-f36cf6dd-node\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b\"\n    },\n    {\n      \"canIpForward\": true,\n      \"cpuPlatform\": \"Intel Broadwell\",\n      \"creationTimestamp\": \"2022-04-26T08:21:56.318-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"100\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            },\n            {\n              \"type\": \"SECURE_BOOT\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"shieldedInstanceInitialState\": {\n            \"dbs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"dbxs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"keks\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"pk\": {\n              \"content\": \"REDACTED\",\n              \"fileType\": \"X509\"\n            }\n          },\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/disks/gke-gke1-default-pool-35923fbc-fv50\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"148164482114629885\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"mUgogP08_Iw=\",\n      \"labels\": {\n        \"gcp_doctor_test\": \"gke\",\n        \"goog-gke-node\": \"\"\n      },\n      \"lastStartTimestamp\": \"2022-04-26T08:22:05.433-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/machineTypes/e2-small\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"instance-template\",\n            \"value\": \"projects/12340001/global/instanceTemplates/gke-gke1-default-pool-35923fbc\"\n          },\n          {\n            \"key\": \"created-by\",\n            \"value\": \"projects/12340001/zones/europe-west1-b/instanceGroupManagers/gke-gke1-default-pool-35923fbc-grp\"\n          },\n          {\n            \"key\": \"serial-port-logging-enable\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"kube-labels\",\n            \"value\": \"cloud.google.com/gke-boot-disk=pd-standard,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/machine-family=e2\"\n          },\n          {\n            \"key\": \"google-compute-enable-pcid\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"enable-oslogin\",\n            \"value\": \"false\"\n          },\n          {\n            \"key\": \"kubelet-config\",\n            \"value\": \"apiVersion: kubelet.config.k8s.io/v1beta1\\nauthentication:\\n  anonymous:\\n    enabled: false\\n  webhook:\\n    enabled: true\\n  x509:\\n    clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\\nauthorization:\\n  mode: Webhook\\ncgroupRoot: /\\nclusterDNS:\\n- 10.3.240.10\\nclusterDomain: cluster.local\\nenableDebuggingHandlers: true\\nevictionHard:\\n  memory.available: 100Mi\\n  nodefs.available: 10%\\n  nodefs.inodesFree: 5%\\n  pid.available: 10%\\nfeatureGates:\\n  DynamicKubeletConfig: false\\n  ExecProbeTimeout: false\\n  InTreePluginAWSUnregister: true\\n  InTreePluginAzureDiskUnregister: true\\n  InTreePluginOpenStackUnregister: true\\n  InTreePluginvSphereUnregister: true\\n  RotateKubeletServerCertificate: true\\nkernelMemcgNotification: true\\nkind: KubeletConfiguration\\nkubeReserved:\\n  cpu: 1060m\\n  ephemeral-storage: 41Gi\\n  memory: 512Mi\\nreadOnlyPort: 10255\\nserverTLSBootstrap: true\\nstaticPodPath: /etc/kubernetes/manifests\\n\"\n          },\n          {\n            \"key\": \"kubeconfig\",\n            \"value\": \"apiVersion: v1\\nkind: Config\\nclusters:\\n- cluster:\\n    server: https://35.205.188.165\\n    certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\\n  name: default-cluster\\ncontexts:\\n- context:\\n    cluster: default-cluster\\n    namespace: default\\n    user: exec-plugin-auth\\n  name: default-context\\ncurrent-context: default-context\\nusers:\\n- name: exec-plugin-auth\\n  user:\\n    exec:\\n      apiVersion: \\\"client.authentication.k8s.io/v1alpha1\\\"\\n      command: '/home/kubernetes/bin/gke-exec-auth-plugin'\\n      args: [\\\"--cache-dir\\\", '/var/lib/kubelet/pki/']\\n\"\n          },\n          {\n            \"key\": \"cluster-name\",\n            \"value\": \"gke1\"\n          },\n          {\n            \"key\": \"gci-update-strategy\",\n            \"value\": \"update_disabled\"\n          },\n          {\n            \"key\": \"gci-metrics-enabled\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"configure-sh\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"gci-ensure-gke-docker\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"disable-legacy-endpoints\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"user-data\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"kube-env\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"cluster-uid\",\n            \"value\": \"f36cf6ddd50c4b998cf1921fbc3e11fc6895bf0ad2d841e7956d7fca6e7024b4\"\n          },\n          {\n            \"key\": \"cluster-location\",\n            \"value\": \"europe-west1-b\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"gke-gke1-default-pool-35923fbc-fv50\",\n      \"networkInterfaces\": [\n        {\n          \"accessConfigs\": [\n            {\n              \"kind\": \"compute#accessConfig\",\n              \"name\": \"external-nat\",\n              \"natIP\": \"35.205.62.74\",\n              \"networkTier\": \"PREMIUM\",\n              \"type\": \"ONE_TO_ONE_NAT\"\n            }\n          ],\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n          \"networkIP\": \"10.132.0.4\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west1/subnetworks/default\"\n        }\n      ],\n      \"networkPerformanceConfig\": {\n        \"totalEgressBandwidthTier\": \"DEFAULT\"\n      },\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances/gke-gke1-default-pool-35923fbc-fv50\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"12340001-compute@developer.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/logging.write\",\n            \"https://www.googleapis.com/auth/monitoring\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"gke-gke1-f36cf6dd-node\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b\"\n    }\n  ],\n  \"kind\": \"compute#instanceList\",\n  \"nextPageToken\": \"ClgI-fiQw4y09wI6TQoCGAMKAyC1EAoCGAIKByDg3fmMvREKAhgHCiUqI2drZS1na2UxLWRlZmF1bHQtcG9vbC0zNTkyM2ZiYy1mdjUwCgog_eGW5vvZmIcC\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances\"\n}\n"
  },
  {
    "path": "test-data/gce2/json-dumps/compute-instances-europe-west2-a.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances\",\n  \"items\": [\n    {\n      \"canIpForward\": false,\n      \"cpuPlatform\": \"Intel Broadwell\",\n      \"creationTimestamp\": \"2023-11-16T20:03:33.344-08:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"architecture\": \"X86_64\",\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"10\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/disks/faulty-linux-ssh\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"3256822971556911357\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"1TQLkowq0ZY=\",\n      \"labels\": {\n        \"foo\": \"bar\"\n      },\n      \"lastStartTimestamp\": \"2023-11-16T20:03:39.756-08:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/machineTypes/e2-micro\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"enable-oslogin\",\n            \"value\": \"false\"\n          },\n          {\n            \"key\": \"startup-script\",\n            \"value\": \"#!/bin/bash\\n# stop sshd\\nsystemctl stop ssh\\n\\nwhile true; do\\n  : # Do nothing, which consumes CPU cycles\\ndone\\n\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"faulty-linux-ssh\",\n      \"networkInterfaces\": [\n        {\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/networks/default\",\n          \"networkIP\": \"10.154.0.14\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west2/subnetworks/default\"\n        }\n      ],\n      \"scheduling\": {\n        \"automaticRestart\": false,\n        \"onHostMaintenance\": \"TERMINATE\",\n        \"preemptible\": true\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/faulty-linux-ssh\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"12345601-compute@developer.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/devstorage.read_only\",\n            \"https://www.googleapis.com/auth/logging.write\",\n            \"https://www.googleapis.com/auth/monitoring.write\",\n            \"https://www.googleapis.com/auth/service.management.readonly\",\n            \"https://www.googleapis.com/auth/servicecontrol\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"faulty-ssh-instance\",\n          \"gce-secured-instance-test-deny\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a\"\n    },\n    {\n      \"canIpForward\": false,\n      \"cpuPlatform\": \"Unknown CPU Platform\",\n      \"creationTimestamp\": \"2023-11-16T20:08:24.568-08:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"architecture\": \"X86_64\",\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"32\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"MULTI_IP_SUBNET\"\n            },\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            },\n            {\n              \"type\": \"WINDOWS\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2019-dc\",\n            \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-core\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/disks/faulty-windows-ssh\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"8620994183730780633\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"1TQLkowq0ZY=\",\n      \"labels\": {\n        \"foo\": \"bar\"\n      },\n      \"lastStartTimestamp\": \"2023-11-16T20:08:30.833-08:00\",\n      \"lastStopTimestamp\": \"2023-11-16T20:15:59.465-08:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/machineTypes/e2-standard-2\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"enable-oslogin\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"startup-script\",\n            \"value\": \"#!/bin/bash\\n\\nshutdown -h now\\n\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"faulty-windows-ssh\",\n      \"networkInterfaces\": [\n        {\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/networks/default\",\n          \"networkIP\": \"10.154.0.16\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west2/subnetworks/default\"\n        }\n      ],\n      \"scheduling\": {\n        \"automaticRestart\": false,\n        \"onHostMaintenance\": \"TERMINATE\",\n        \"preemptible\": true\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/faulty-windows-ssh\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"12345601-compute@developer.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/devstorage.read_only\",\n            \"https://www.googleapis.com/auth/logging.write\",\n            \"https://www.googleapis.com/auth/monitoring.write\",\n            \"https://www.googleapis.com/auth/service.management.readonly\",\n            \"https://www.googleapis.com/auth/servicecontrol\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"TERMINATED\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"faulty-ssh-instance\",\n          \"gce-secured-instance-test-deny\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a\"\n    },\n    {\n      \"canIpForward\": false,\n      \"cpuPlatform\": \"Intel Broadwell\",\n      \"creationTimestamp\": \"2023-11-16T20:03:32.807-08:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"architecture\": \"X86_64\",\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"10\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/disks/valid-linux-ssh\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"4683873813257738493\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"1TQLkowq0ZY=\",\n      \"labels\": {\n        \"foo\": \"bar\"\n      },\n      \"lastStartTimestamp\": \"2023-11-16T20:03:38.817-08:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/machineTypes/e2-micro\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"enable-oslogin\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"startup-script\",\n            \"value\": \"#!/bin/bash\\n\\ncurl -sSO https://dl.google.com/cloudagents/add-google-cloud-ops-agent-repo.sh\\nsudo bash add-google-cloud-ops-agent-repo.sh --also-install\\n\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"valid-linux-ssh\",\n      \"networkInterfaces\": [\n        {\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/networks/default\",\n          \"networkIP\": \"10.154.0.12\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west2/subnetworks/default\"\n        }\n      ],\n      \"scheduling\": {\n        \"automaticRestart\": false,\n        \"onHostMaintenance\": \"TERMINATE\",\n        \"preemptible\": true\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/valid-linux-ssh\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"12345601-compute@developer.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/devstorage.read_only\",\n            \"https://www.googleapis.com/auth/logging.write\",\n            \"https://www.googleapis.com/auth/monitoring.write\",\n            \"https://www.googleapis.com/auth/service.management.readonly\",\n            \"https://www.googleapis.com/auth/servicecontrol\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"valid-ssh-instance\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a\"\n    }\n  ],\n  \"kind\": \"compute#instanceList\",\n  \"nextPageToken\": \"CkQIiOr-rJjKggM6OQoCGAMKAyDyEQoCGAIKByD_srD9xQkKAhgHChEqD3ZhbGlkLWxpbnV4LXNzaAoKIP2x7d-rzZ2AQQ==\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances\"\n}\n"
  },
  {
    "path": "test-data/gce2/json-dumps/compute-instances-europe-west2-b.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-b/instances\",\n  \"kind\": \"compute#instanceList\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-b/instances\"\n}\n"
  },
  {
    "path": "test-data/gce2/json-dumps/compute-instances-europe-west4-a-2.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances\",\n  \"items\": [\n    {\n      \"cpuPlatform\": \"Intel Broadwell\",\n      \"creationTimestamp\": \"2022-04-26T08:21:18.746-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"10\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-9-stretch\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/mig-7pvl\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"4022531639476597505\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"42WmSpB8rSM=\",\n      \"lastStartTimestamp\": \"2022-04-26T08:21:24.395-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/machineTypes/e2-micro\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"instance-template\",\n            \"value\": \"projects/12340001/global/instanceTemplates/mig-template\"\n          },\n          {\n            \"key\": \"created-by\",\n            \"value\": \"projects/12340001/zones/europe-west4-a/instanceGroupManagers/mig\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"mig-7pvl\",\n      \"networkInterfaces\": [\n        {\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n          \"networkIP\": \"10.164.0.4\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default\"\n        }\n      ],\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-7pvl\",\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\"\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a\"\n    }\n  ],\n  \"kind\": \"compute#instanceList\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances\"\n}\n"
  },
  {
    "path": "test-data/gce2/json-dumps/compute-instances-europe-west4-a.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances\",\n  \"items\": [\n    {\n      \"canIpForward\": false,\n      \"cpuPlatform\": \"Intel Skylake\",\n      \"creationTimestamp\": \"2022-04-26T08:20:51.863-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"32\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"MULTI_IP_SUBNET\"\n            },\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"WINDOWS\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2019-dc-byol\",\n            \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-core\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/gce1\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"1010101012\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"1TQLkowq0ZY=\",\n      \"labels\": {\n        \"foo\": \"bar\"\n      },\n      \"lastStartTimestamp\": \"2022-04-26T08:20:58.538-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/machineTypes/e2-micro\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"gce1\",\n      \"networkInterfaces\": [\n        {\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n          \"networkIP\": \"10.164.0.2\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default\"\n        }\n      ],\n      \"scheduling\": {\n        \"automaticRestart\": false,\n        \"onHostMaintenance\": \"TERMINATE\",\n        \"preemptible\": true\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"12340001-compute@developer.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/devstorage.read_only\",\n            \"https://www.googleapis.com/auth/logging.write\",\n            \"https://www.googleapis.com/auth/monitoring.write\",\n            \"https://www.googleapis.com/auth/service.management.readonly\",\n            \"https://www.googleapis.com/auth/servicecontrol\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"secured-instance\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a\"\n    },\n    {\n      \"canIpForward\": false,\n      \"cpuPlatform\": \"Intel Skylake\",\n      \"creationTimestamp\": \"2022-04-26T08:20:51.863-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"32\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"MULTI_IP_SUBNET\"\n            },\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"WINDOWS\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2019-dc-byol\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/gce1\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"1010101013\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"1TQLkowq0ZY=\",\n      \"labels\": {\n        \"foo\": \"bar\"\n      },\n      \"lastStartTimestamp\": \"2022-04-26T08:20:58.538-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/machineTypes/e2-micro\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"windows-test\",\n      \"networkInterfaces\": [\n        {\n          \"accessConfigs\": [\n            {\n              \"kind\": \"compute#accessConfig\",\n              \"name\": \"external-nat\",\n              \"natIP\": \"34.78.171.82\",\n              \"networkTier\": \"PREMIUM\",\n              \"type\": \"ONE_TO_ONE_NAT\"\n            }\n          ],\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n          \"networkIP\": \"10.164.0.2\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default\"\n        }\n      ],\n      \"scheduling\": {\n        \"automaticRestart\": false,\n        \"onHostMaintenance\": \"TERMINATE\",\n        \"preemptible\": true\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/windows-test\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"12340001-compute@developer.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/devstorage.read_only\",\n            \"https://www.googleapis.com/auth/logging.write\",\n            \"https://www.googleapis.com/auth/monitoring.write\",\n            \"https://www.googleapis.com/auth/service.management.readonly\",\n            \"https://www.googleapis.com/auth/servicecontrol\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"secured-instance\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a\"\n    },\n    {\n      \"canIpForward\": false,\n      \"cpuPlatform\": \"Intel Skylake\",\n      \"creationTimestamp\": \"2022-04-26T08:20:53.544-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"10\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            },\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"shieldedInstanceInitialState\": {\n            \"dbs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"dbxs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"keks\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"pk\": {\n              \"content\": \"REDACTED\",\n              \"fileType\": \"X509\"\n            }\n          },\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/gce2\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"1010101011\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"42WmSpB8rSM=\",\n      \"lastStartTimestamp\": \"2022-04-26T08:21:01.453-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/machineTypes/e2-micro\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"serial-port-logging-enable\",\n            \"value\": \"false\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"gce2\",\n      \"networkInterfaces\": [\n        {\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n          \"networkIP\": \"10.164.0.3\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default\"\n        }\n      ],\n      \"scheduling\": {\n        \"automaticRestart\": false,\n        \"onHostMaintenance\": \"TERMINATE\",\n        \"preemptible\": true\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"12340001-compute@developer.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/devstorage.read_only\",\n            \"https://www.googleapis.com/auth/logging.write\",\n            \"https://www.googleapis.com/auth/monitoring.write\",\n            \"https://www.googleapis.com/auth/service.management.readonly\",\n            \"https://www.googleapis.com/auth/servicecontrol\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"secured-instance\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a\"\n    },\n    {\n      \"cpuPlatform\": \"Intel Broadwell\",\n      \"creationTimestamp\": \"2022-04-26T08:21:19.061-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"10\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-9-stretch\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/mig-4h21\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"1010101014\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"42WmSpB8rSM=\",\n      \"lastStartTimestamp\": \"2022-04-26T08:21:25.221-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/machineTypes/e2-micro\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"instance-template\",\n            \"value\": \"projects/12340001/global/instanceTemplates/mig-template\"\n          },\n          {\n            \"key\": \"created-by\",\n            \"value\": \"projects/12340001/zones/europe-west4-a/instanceGroupManagers/mig\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"mig-4h21\",\n      \"networkInterfaces\": [\n        {\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n          \"networkIP\": \"10.164.0.5\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default\"\n        }\n      ],\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-4h21\",\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\"\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a\"\n    }\n  ],\n  \"kind\": \"compute#instanceList\",\n  \"nextPageToken\": \"Cj0It-i3w4y09wI6MgoCGAMKAyCmEgoCGAIKByDg3fmMvREKAhgHCgoqCG1pZy00aDIxCgoggeaW5uuu8YE7\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances\"\n}\n"
  },
  {
    "path": "test-data/gce2/json-dumps/compute-licenses.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gce1-aaaa/global/licenses\",\n  \"items\": [\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-10-enterprise-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"5769580143916819783\",\n      \"licenseCode\": \"2089835370828997959\",\n      \"creationTimestamp\": \"2018-11-07T00:00:40.302-08:00\",\n      \"description\": \"Windows 10 Enterprise BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-10-enterprise-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-10-x64-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"5572284649276248982\",\n      \"licenseCode\": \"8727879116868096918\",\n      \"creationTimestamp\": \"2019-11-19T19:05:29.677-08:00\",\n      \"description\": \"Windows 10 64-bit BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-10-x64-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-10-x86-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"1279231564365501289\",\n      \"licenseCode\": \"3732182829874353001\",\n      \"creationTimestamp\": \"2019-11-19T19:05:42.089-08:00\",\n      \"description\": \"Windows 10 32-bit BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-10-x86-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-11-x64-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"3804262737275203477\",\n      \"licenseCode\": \"5378533650449772437\",\n      \"creationTimestamp\": \"2021-08-25T11:52:42.711-07:00\",\n      \"description\": \"Windows 11 64-bit BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-11-x64-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-7-enterprise-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"2913052624331679126\",\n      \"licenseCode\": \"752112173778412950\",\n      \"creationTimestamp\": \"2018-11-06T23:59:53.727-08:00\",\n      \"description\": \"Windows 7 Enterprise BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-7-enterprise-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-7-x64-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"6501903266496451262\",\n      \"licenseCode\": \"5016528181960184510\",\n      \"creationTimestamp\": \"2019-11-19T19:00:33.621-08:00\",\n      \"description\": \"Windows 7 64-bit BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-7-x64-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-7-x86-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"4058550282231550561\",\n      \"licenseCode\": \"622639362407469665\",\n      \"creationTimestamp\": \"2019-11-19T19:01:34.532-08:00\",\n      \"description\": \"Windows 7 32-bit BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-7-x86-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-8-x64-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"7710168160606425653\",\n      \"licenseCode\": \"7036859048284197429\",\n      \"creationTimestamp\": \"2019-11-19T19:02:50.559-08:00\",\n      \"description\": \"Windows 8.x 64-bit BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-8-x64-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-8-x86-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"2601192579332117498\",\n      \"licenseCode\": \"3720924436396315642\",\n      \"creationTimestamp\": \"2019-11-19T19:03:49.785-08:00\",\n      \"description\": \"Windows 8.x 32-bit BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-8-x86-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-81-x64-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"5692263345196614391\",\n      \"licenseCode\": \"5366577783322166007\",\n      \"creationTimestamp\": \"2019-04-28T21:22:48.487-07:00\",\n      \"description\": \"Windows 8.1 Enterprise x64 BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-81-x64-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-ent\",\n      \"chargesUseFee\": false,\n      \"id\": \"1257656105385958662\",\n      \"licenseCode\": \"2967169933779246342\",\n      \"creationTimestamp\": \"2019-09-25T19:35:21.078-07:00\",\n      \"description\": \"Windows Enterprise\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-ent\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-for-containers\",\n      \"chargesUseFee\": false,\n      \"id\": \"7423076496314791885\",\n      \"licenseCode\": \"2643967004807329741\",\n      \"creationTimestamp\": \"2017-09-25T11:21:22.120-07:00\",\n      \"description\": \"Windows container host\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-for-containers\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-1709-dc\",\n      \"chargesUseFee\": false,\n      \"id\": \"2638722841150638382\",\n      \"licenseCode\": \"5194306116883728686\",\n      \"creationTimestamp\": \"2017-10-03T13:49:05.759-07:00\",\n      \"description\": \"Windows Server 1709 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-1709-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-1803-dc\",\n      \"chargesUseFee\": false,\n      \"id\": \"991969583094905153\",\n      \"licenseCode\": \"6476660300603799873\",\n      \"creationTimestamp\": \"2018-05-07T10:06:54.761-07:00\",\n      \"description\": \"Windows Server version 1803 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-1803-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-1809-dc\",\n      \"chargesUseFee\": false,\n      \"id\": \"2197036663612051569\",\n      \"licenseCode\": \"8597854123084943473\",\n      \"creationTimestamp\": \"2018-10-04T17:21:50.249-07:00\",\n      \"description\": \"Windows Server version 1809 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-1809-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-1903-dc\",\n      \"chargesUseFee\": false,\n      \"id\": \"783754911489890105\",\n      \"licenseCode\": \"5980382382909462329\",\n      \"creationTimestamp\": \"2019-06-10T21:11:02.733-07:00\",\n      \"description\": \"Windows Server version 1903 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-1903-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-1909-dc\",\n      \"chargesUseFee\": false,\n      \"id\": \"1504783339576403625\",\n      \"licenseCode\": \"1413572828508235433\",\n      \"creationTimestamp\": \"2019-11-14T01:03:02.101-08:00\",\n      \"description\": \"Windows Server version 1909 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-1909-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2000\",\n      \"chargesUseFee\": false,\n      \"id\": \"77415431498093015\",\n      \"licenseCode\": \"5507061839551517143\",\n      \"creationTimestamp\": \"2021-03-02T09:00:40.478-08:00\",\n      \"description\": \"Windows Server 2000\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2000\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2003\",\n      \"chargesUseFee\": false,\n      \"id\": \"8972483680585271920\",\n      \"licenseCode\": \"5030842449011296880\",\n      \"creationTimestamp\": \"2017-04-10T14:09:51.924-07:00\",\n      \"description\": \"Windows Server 2003\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2003\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2004-dc\",\n      \"chargesUseFee\": false,\n      \"id\": \"6915731882356532357\",\n      \"licenseCode\": \"6710259852346942597\",\n      \"creationTimestamp\": \"2020-07-23T11:43:54.418-07:00\",\n      \"description\": \"Windows Server version 2004 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2004-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2008\",\n      \"chargesUseFee\": false,\n      \"id\": \"2740560588278180852\",\n      \"licenseCode\": \"1656378918552316916\",\n      \"creationTimestamp\": \"2022-11-09T13:01:15.565-08:00\",\n      \"description\": \"Windows Server 2008 Standard Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2008\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2008-dc\",\n      \"chargesUseFee\": true,\n      \"id\": \"5520530534018080146\",\n      \"licenseCode\": \"1000502\",\n      \"creationTimestamp\": \"2015-06-03T17:05:28.000-07:00\",\n      \"description\": \"Windows Server 2008 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2008-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2008-r2\",\n      \"chargesUseFee\": false,\n      \"id\": \"4293107698603502582\",\n      \"licenseCode\": \"3284763237085719542\",\n      \"creationTimestamp\": \"2022-11-09T13:01:13.386-08:00\",\n      \"description\": \"Windows Server 2008 R2 Standard Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2008-r2\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2008-r2-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"6485631155857676024\",\n      \"licenseCode\": \"4551215591257167608\",\n      \"creationTimestamp\": \"2018-10-05T15:39:19.139-07:00\",\n      \"description\": \"Windows Server 2008R2 BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2008-r2-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2008-r2-dc\",\n      \"chargesUseFee\": true,\n      \"id\": \"6080198139471122848\",\n      \"licenseCode\": \"1000000\",\n      \"creationTimestamp\": \"2013-08-19T17:17:57.000-07:00\",\n      \"description\": \"Windows Server 2008 R2 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2008-r2-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2012\",\n      \"chargesUseFee\": false,\n      \"id\": \"4571663854194502649\",\n      \"licenseCode\": \"7695108898142923768\",\n      \"creationTimestamp\": \"2022-11-09T13:01:10.861-08:00\",\n      \"description\": \"Windows Server 2012 Standard Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2012\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2012-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"2247304514167789851\",\n      \"licenseCode\": \"5559842820536817947\",\n      \"creationTimestamp\": \"2018-10-05T15:38:44.367-07:00\",\n      \"description\": \"Windows Server 2012 BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2012-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2012-dc\",\n      \"chargesUseFee\": true,\n      \"id\": \"6102042211374830963\",\n      \"licenseCode\": \"1000015\",\n      \"creationTimestamp\": \"2015-01-05T16:58:27.000-08:00\",\n      \"description\": \"Windows Server 2012 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2012-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2012-r2\",\n      \"chargesUseFee\": false,\n      \"id\": \"975226805105568736\",\n      \"licenseCode\": \"7798417859637521376\",\n      \"creationTimestamp\": \"2022-11-09T13:01:03.469-08:00\",\n      \"description\": \"Windows Server 2012 R2 Standard Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2012-r2\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2012-r2-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"11586629996795623\",\n      \"licenseCode\": \"6738952703547430631\",\n      \"creationTimestamp\": \"2018-10-05T15:39:04.149-07:00\",\n      \"description\": \"Windows Server 2012R2 BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2012-r2-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2012-r2-dc\",\n      \"chargesUseFee\": true,\n      \"id\": \"6102042209776448355\",\n      \"licenseCode\": \"1000017\",\n      \"creationTimestamp\": \"2015-01-05T16:58:27.000-08:00\",\n      \"description\": \"Windows Server 2012 R2 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2012-r2-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2012-r2-dc-in-place-upgrade\",\n      \"chargesUseFee\": false,\n      \"id\": \"1687636345185865342\",\n      \"licenseCode\": \"7123010349826543230\",\n      \"creationTimestamp\": \"2020-03-24T09:08:49.417-07:00\",\n      \"description\": \"Windows Server 2008 R2 to 2012 R2 in place upgrade\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2012-r2-dc-in-place-upgrade\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2016\",\n      \"chargesUseFee\": false,\n      \"id\": \"2566166048269249507\",\n      \"licenseCode\": \"4819555115818134498\",\n      \"creationTimestamp\": \"2022-11-09T13:01:01.077-08:00\",\n      \"description\": \"Windows Server 2016 Standard Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2016\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2016-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"6580557195888974094\",\n      \"licenseCode\": \"4322823184804632846\",\n      \"creationTimestamp\": \"2018-10-05T15:38:26.021-07:00\",\n      \"description\": \"Windows Server 2016 BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2016-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2016-dc\",\n      \"chargesUseFee\": true,\n      \"id\": \"2483536683413682772\",\n      \"licenseCode\": \"1000213\",\n      \"creationTimestamp\": \"2016-05-02T14:35:54.000-07:00\",\n      \"description\": \"Windows Server 2016 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2016-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2016-dc-in-place-upgrade\",\n      \"chargesUseFee\": false,\n      \"id\": \"7616085184958426941\",\n      \"licenseCode\": \"5199320590876405565\",\n      \"creationTimestamp\": \"2022-03-04T09:52:18.982-08:00\",\n      \"description\": \"in-place upgraded to Windows Server 2016\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2016-dc-in-place-upgrade\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2016-nano\",\n      \"chargesUseFee\": true,\n      \"id\": \"2282594357842688596\",\n      \"licenseCode\": \"1000214\",\n      \"creationTimestamp\": \"2016-05-02T14:35:54.000-07:00\",\n      \"description\": \"Windows Server 2016 Nano\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2016-nano\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2019\",\n      \"chargesUseFee\": false,\n      \"id\": \"3525541779464104933\",\n      \"licenseCode\": \"4874454843789519845\",\n      \"creationTimestamp\": \"2022-11-09T13:00:58.674-08:00\",\n      \"description\": \"Windows Server 2019 Standard Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2019\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2019-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"1090214026507846099\",\n      \"licenseCode\": \"6532438499690676691\",\n      \"creationTimestamp\": \"2019-09-25T12:25:48.522-07:00\",\n      \"description\": \"Windows Server 2019 BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2019-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2019-dc\",\n      \"chargesUseFee\": false,\n      \"id\": \"5993475225685790965\",\n      \"licenseCode\": \"3389558045860892917\",\n      \"creationTimestamp\": \"2018-10-04T17:19:38.568-07:00\",\n      \"description\": \"Windows Server 2019 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2019-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2019-dc-in-place-upgrade\",\n      \"chargesUseFee\": false,\n      \"id\": \"7388112379630840967\",\n      \"licenseCode\": \"3156934045285215367\",\n      \"creationTimestamp\": \"2022-03-04T09:54:48.827-08:00\",\n      \"description\": \"in-place upgraded to Windows Server 2019\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2019-dc-in-place-upgrade\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2022\",\n      \"chargesUseFee\": false,\n      \"id\": \"8141439404167244305\",\n      \"licenseCode\": \"6107784707477449232\",\n      \"creationTimestamp\": \"2022-11-09T13:00:46.975-08:00\",\n      \"description\": \"Windows Server 2022 Standard Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2022\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2022-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"2150336909657452508\",\n      \"licenseCode\": \"2808834792899686364\",\n      \"creationTimestamp\": \"2021-08-25T11:51:31.527-07:00\",\n      \"description\": \"Windows Server 2022 BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2022-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2022-dc\",\n      \"chargesUseFee\": false,\n      \"id\": \"2525168283357630087\",\n      \"licenseCode\": \"4079807029871201927\",\n      \"creationTimestamp\": \"2021-09-02T08:40:24.070-07:00\",\n      \"description\": \"Windows Server 2022 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2022-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2022-dc-in-place-upgrade\",\n      \"chargesUseFee\": false,\n      \"id\": \"7118639573064740016\",\n      \"licenseCode\": \"4670175393034005680\",\n      \"creationTimestamp\": \"2022-03-04T09:54:39.255-08:00\",\n      \"description\": \"in-place upgraded to Windows Server 2022\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-2022-dc-in-place-upgrade\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-20h2-dc\",\n      \"chargesUseFee\": false,\n      \"id\": \"2209136415345591070\",\n      \"licenseCode\": \"8578754948912497438\",\n      \"creationTimestamp\": \"2020-11-02T13:45:21.528-08:00\",\n      \"description\": \"Windows Server version 20H2 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-20h2-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-21h1-dc\",\n      \"chargesUseFee\": false,\n      \"id\": \"8661389914554199433\",\n      \"licenseCode\": \"7248135684629163401\",\n      \"creationTimestamp\": \"2021-04-29T08:40:22.527-07:00\",\n      \"description\": \"Windows Server version 21h1 Datacenter Edition\",\n      \"transferable\": true,\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-21h1-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-core\",\n      \"chargesUseFee\": true,\n      \"id\": \"7184832379764048457\",\n      \"licenseCode\": \"1000226\",\n      \"creationTimestamp\": \"2016-11-07T13:21:29.000-08:00\",\n      \"description\": \"Windows Server Core\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses/windows-server-core\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/licenses\"\n}\n"
  },
  {
    "path": "test-data/gce2/json-dumps/compute-migs-europe-west1-b.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instanceGroupManagers\",\n  \"items\": [\n    {\n      \"kind\": \"compute#instanceGroupManager\",\n      \"id\": \"1906946679224250602\",\n      \"creationTimestamp\": \"2022-04-26T08:21:41.088-07:00\",\n      \"name\": \"gke-gke1-default-pool-35923fbc-grp\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b\",\n      \"instanceTemplate\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/instanceTemplates/gke-gke1-default-pool-35923fbc\",\n      \"versions\": [\n        {\n          \"instanceTemplate\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/instanceTemplates/gke-gke1-default-pool-35923fbc\",\n          \"targetSize\": {\n            \"calculated\": 4\n          }\n        }\n      ],\n      \"instanceGroup\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instanceGroups/gke-gke1-default-pool-35923fbc-grp\",\n      \"baseInstanceName\": \"gke-gke1-default-pool-35923fbc\",\n      \"fingerprint\": \"cFBmeZR_JvQ=\",\n      \"currentActions\": {\n        \"none\": 4,\n        \"creating\": 0,\n        \"creatingWithoutRetries\": 0,\n        \"verifying\": 0,\n        \"recreating\": 0,\n        \"deleting\": 0,\n        \"abandoning\": 0,\n        \"restarting\": 0,\n        \"refreshing\": 0,\n        \"suspending\": 0,\n        \"resuming\": 0,\n        \"stopping\": 0,\n        \"starting\": 0\n      },\n      \"status\": {\n        \"isStable\": true,\n        \"versionTarget\": {\n          \"isReached\": true\n        },\n        \"stateful\": {\n          \"hasStatefulConfig\": false,\n          \"perInstanceConfigs\": {\n            \"allEffective\": true\n          }\n        }\n      },\n      \"targetSize\": 4,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instanceGroupManagers/gke-gke1-default-pool-35923fbc-grp\",\n      \"updatePolicy\": {\n        \"type\": \"OPPORTUNISTIC\",\n        \"minimalAction\": \"REPLACE\",\n        \"maxSurge\": {\n          \"fixed\": 1,\n          \"calculated\": 1\n        },\n        \"maxUnavailable\": {\n          \"fixed\": 1,\n          \"calculated\": 1\n        },\n        \"replacementMethod\": \"SUBSTITUTE\"\n      }\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instanceGroupManagers\",\n  \"kind\": \"compute#instanceGroupManagerList\"\n}\n"
  },
  {
    "path": "test-data/gce2/json-dumps/compute-migs-europe-west2-b.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gce1-aaaa/zones/europe-west2-b/instanceGroupManagers\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west2-b/instanceGroupManagers\",\n  \"kind\": \"compute#instanceGroupManagerList\"\n}\n"
  },
  {
    "path": "test-data/gce2/json-dumps/compute-migs-europe-west4-a.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroupManagers\",\n  \"items\": [\n    {\n      \"kind\": \"compute#instanceGroupManager\",\n      \"id\": \"7183453391228875571\",\n      \"creationTimestamp\": \"2022-04-26T08:21:00.715-07:00\",\n      \"name\": \"mig\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a\",\n      \"instanceTemplate\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/instanceTemplates/mig-template\",\n      \"versions\": [\n        {\n          \"instanceTemplate\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/instanceTemplates/mig-template\",\n          \"targetSize\": {\n            \"calculated\": 2\n          }\n        }\n      ],\n      \"instanceGroup\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups/mig\",\n      \"baseInstanceName\": \"mig\",\n      \"fingerprint\": \"lss-DXagYSg=\",\n      \"currentActions\": {\n        \"none\": 2,\n        \"creating\": 0,\n        \"creatingWithoutRetries\": 0,\n        \"verifying\": 0,\n        \"recreating\": 0,\n        \"deleting\": 0,\n        \"abandoning\": 0,\n        \"restarting\": 0,\n        \"refreshing\": 0,\n        \"suspending\": 0,\n        \"resuming\": 0,\n        \"stopping\": 0,\n        \"starting\": 0\n      },\n      \"status\": {\n        \"isStable\": true,\n        \"versionTarget\": {\n          \"isReached\": true\n        },\n        \"stateful\": {\n          \"hasStatefulConfig\": false,\n          \"perInstanceConfigs\": {\n            \"allEffective\": true\n          }\n        }\n      },\n      \"targetSize\": 2,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroupManagers/mig\",\n      \"updatePolicy\": {\n        \"type\": \"OPPORTUNISTIC\",\n        \"minimalAction\": \"REPLACE\",\n        \"maxSurge\": {\n          \"fixed\": 1,\n          \"calculated\": 1\n        },\n        \"maxUnavailable\": {\n          \"fixed\": 1,\n          \"calculated\": 1\n        },\n        \"replacementMethod\": \"SUBSTITUTE\"\n      }\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroupManagers\",\n  \"kind\": \"compute#instanceGroupManagerList\"\n}\n"
  },
  {
    "path": "test-data/gce2/json-dumps/compute-network-default.json",
    "content": "{\n  \"autoCreateSubnetworks\": true,\n  \"creationTimestamp\": \"2023-11-03T14:27:06.884-07:00\",\n  \"description\": \"Default network for the project\",\n  \"id\": \"4415164866624019269\",\n  \"kind\": \"compute#network\",\n  \"name\": \"default\",\n  \"networkFirewallPolicyEnforcementOrder\": \"AFTER_CLASSIC_FIREWALL\",\n  \"routingConfig\": {\n    \"routingMode\": \"REGIONAL\"\n  },\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/networks/default\",\n  \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/networks/4415164866624019269\",\n  \"subnetworks\": [\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-southeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-east7/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/africa-south1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-west2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/me-central2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-east1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-west8/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west10/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/me-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/northamerica-northeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-northeast3/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-east4/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/me-central1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/australia-southeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-northeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-east5/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-central2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-east1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-south2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-southeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-northeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/southamerica-east1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west9/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-south1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-west3/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west6/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-north1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west3/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/southamerica-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/australia-southeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-east2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west8/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/northamerica-northeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-south1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west4/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-southwest1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-central1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-west4/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west12/subnetworks/default\"\n  ]\n}\n"
  },
  {
    "path": "test-data/gce2/json-dumps/compute-network-routes.json",
    "content": "{\n  \"kind\": \"compute#routeList\",\n  \"id\": \"projects/gcpdiag-gce1-aaaa/global/routes\",\n  \"items\": [\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"2670539294019165993\",\n      \"creationTimestamp\": \"2023-03-15T03:45:27.008-07:00\",\n      \"name\": \"default\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n      \"destRange\": \"0.0.0.0/0\",\n      \"priority\": 1,\n      \"nextHopGateway\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/gateways/default-internet-gateway\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/routes/default\"\n    },\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"2178241415220915600\",\n      \"creationTimestamp\": \"2023-02-09T03:05:35.107-08:00\",\n      \"name\": \"peering-route-299fcb697f2532b0\",\n      \"description\": \"Auto generated route via peering [peering-r544dd974f1bc5396-tp-default].\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n      \"destRange\": \"192.168.0.0/26\",\n      \"priority\": 0,\n      \"nextHopPeering\": \"peering-r544dd974f1bc5396-tp-default\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/routes/peering-route-299fcb697f2532b0\"\n    },\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"8223547831511088095\",\n      \"creationTimestamp\": \"2023-03-10T06:56:48.979-08:00\",\n      \"name\": \"real-allow-kms\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n      \"tags\": [\n        \"windows\"\n      ],\n      \"destRange\": \"35.190.247.13/32\",\n      \"priority\": 1,\n      \"nextHopGateway\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/gateways/default-internet-gateway\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/routes/real-allow-kms\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/routes\"\n}\n"
  },
  {
    "path": "test-data/gce2/json-dumps/compute-project.json",
    "content": "{\n  \"commonInstanceMetadata\": {\n    \"fingerprint\": \"HTt6ps4-I3s=\",\n    \"items\": [\n      {\n        \"key\": \"ssh-keys\",\n        \"value\": \"      foo:ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILg6UtHDNyMNAh0GjaytsJdrUxjtLy3APXqZfNZhvCeT foo\\n\"\n      }\n    ],\n    \"kind\": \"compute#metadata\"\n  },\n  \"creationTimestamp\": \"2023-11-03T14:26:59.007-07:00\",\n  \"defaultNetworkTier\": \"PREMIUM\",\n  \"defaultServiceAccount\": \"12345601-compute@developer.gserviceaccount.com\",\n  \"id\": \"7025536248423439181\",\n  \"kind\": \"compute#project\",\n  \"name\": \"gcpdiag-gce-faultyssh-runbook\",\n  \"quotas\": [\n    {\n      \"limit\": 10000,\n      \"metric\": \"SNAPSHOTS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 30,\n      \"metric\": \"NETWORKS\",\n      \"usage\": 1\n    },\n    {\n      \"limit\": 500,\n      \"metric\": \"FIREWALLS\",\n      \"usage\": 6\n    },\n    {\n      \"limit\": 5000,\n      \"metric\": \"IMAGES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 175,\n      \"metric\": \"STATIC_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 300,\n      \"metric\": \"ROUTES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"FORWARDING_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 500,\n      \"metric\": \"TARGET_POOLS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1000,\n      \"metric\": \"HEALTH_CHECKS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 575,\n      \"metric\": \"IN_USE_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 500,\n      \"metric\": \"TARGET_INSTANCES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_HTTP_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"URL_MAPS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"BACKEND_SERVICES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1000,\n      \"metric\": \"INSTANCE_TEMPLATES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 50,\n      \"metric\": \"TARGET_VPN_GATEWAYS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"VPN_TUNNELS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 30,\n      \"metric\": \"BACKEND_BUCKETS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 20,\n      \"metric\": \"ROUTERS\",\n      \"usage\": 1\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_SSL_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_HTTPS_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"SSL_CERTIFICATES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 275,\n      \"metric\": \"SUBNETWORKS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_TCP_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 10,\n      \"metric\": \"SECURITY_POLICIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 200,\n      \"metric\": \"SECURITY_POLICY_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1000,\n      \"metric\": \"XPN_SERVICE_PROJECTS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"PACKET_MIRRORINGS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1000,\n      \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 6,\n      \"metric\": \"INTERCONNECTS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 5000,\n      \"metric\": \"GLOBAL_INTERNAL_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 50,\n      \"metric\": \"VPN_GATEWAYS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 5000,\n      \"metric\": \"MACHINE_IMAGES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 20,\n      \"metric\": \"SECURITY_POLICY_CEVAL_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 50,\n      \"metric\": \"EXTERNAL_VPN_GATEWAYS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1,\n      \"metric\": \"PUBLIC_ADVERTISED_PREFIXES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 10,\n      \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1024,\n      \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 60,\n      \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"INTERNAL_TRAFFIC_DIRECTOR_FORWARDING_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"GLOBAL_EXTERNAL_MANAGED_FORWARDING_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"GLOBAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"GLOBAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"GLOBAL_EXTERNAL_PROXY_LB_BACKEND_SERVICES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 750,\n      \"metric\": \"GLOBAL_INTERNAL_TRAFFIC_DIRECTOR_BACKEND_SERVICES\",\n      \"usage\": 0\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook\",\n  \"vmDnsSetting\": \"GLOBAL_DEFAULT\",\n  \"xpnProjectStatus\": \"UNSPECIFIED_XPN_PROJECT_STATUS\"\n}\n"
  },
  {
    "path": "test-data/gce2/json-dumps/compute-regions.json",
    "content": "{\n  \"kind\": \"compute#regionList\",\n  \"id\": \"projects/gcpdiag-gce-faultyssh-runbook/regions\",\n  \"items\": [\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1220\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east1\",\n      \"description\": \"asia-east1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-east1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-east1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-east1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-east1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1370\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east2\",\n      \"description\": \"asia-east2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-east2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-east2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-east2-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-east2\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1250\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast1\",\n      \"description\": \"asia-northeast1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-northeast1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-northeast1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-northeast1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-northeast1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1390\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast2\",\n      \"description\": \"asia-northeast2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-northeast2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-northeast2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-northeast2-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-northeast2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1410\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast3\",\n      \"description\": \"asia-northeast3\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-northeast3-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-northeast3-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-northeast3-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-northeast3\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1320\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south1\",\n      \"description\": \"asia-south1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-south1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-south1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-south1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-south1\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1470\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south2\",\n      \"description\": \"asia-south2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-south2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-south2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-south2-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-south2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1260\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast1\",\n      \"description\": \"asia-southeast1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-southeast1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-southeast1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-southeast1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-southeast1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1440\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast2\",\n      \"description\": \"asia-southeast2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-southeast2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-southeast2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-southeast2-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-southeast2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1280\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast1\",\n      \"description\": \"australia-southeast1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/australia-southeast1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/australia-southeast1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/australia-southeast1-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/australia-southeast1\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1480\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast2\",\n      \"description\": \"australia-southeast2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/australia-southeast2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/australia-southeast2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/australia-southeast2-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/australia-southeast2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1450\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-central2\",\n      \"description\": \"europe-central2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-central2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-central2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-central2-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-central2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1350\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-north1\",\n      \"description\": \"europe-north1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-north1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-north1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-north1-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-north1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1540\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-southwest1\",\n      \"description\": \"europe-southwest1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-southwest1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-southwest1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-southwest1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-southwest1\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1100\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west1\",\n      \"description\": \"europe-west1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west1-d\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1590\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west10\",\n      \"description\": \"europe-west10\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west10-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west10-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west10-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west10\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1570\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west12\",\n      \"description\": \"europe-west12\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west12-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west12-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west12-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west12\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1290\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west2\",\n      \"description\": \"europe-west2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 84\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 4\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 3\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west2\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1300\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west3\",\n      \"description\": \"europe-west3\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west3-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west3-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west3-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west3\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1340\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west4\",\n      \"description\": \"europe-west4\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west4-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west4-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west4-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west4\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1380\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west6\",\n      \"description\": \"europe-west6\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west6-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west6-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west6-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west6\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1510\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west8\",\n      \"description\": \"europe-west8\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west8-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west8-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west8-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west8\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1520\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west9\",\n      \"description\": \"europe-west9\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west9-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west9-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west9-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west9\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1580\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central1\",\n      \"description\": \"me-central1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/me-central1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/me-central1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/me-central1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/me-central1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1600\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central2\",\n      \"description\": \"me-central2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/me-central2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/me-central2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/me-central2-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/me-central2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1560\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-west1\",\n      \"description\": \"me-west1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/me-west1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/me-west1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/me-west1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/me-west1\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1330\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast1\",\n      \"description\": \"northamerica-northeast1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/northamerica-northeast1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/northamerica-northeast1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/northamerica-northeast1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/northamerica-northeast1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1460\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast2\",\n      \"description\": \"northamerica-northeast2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/northamerica-northeast2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/northamerica-northeast2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/northamerica-northeast2-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/northamerica-northeast2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1310\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-east1\",\n      \"description\": \"southamerica-east1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/southamerica-east1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/southamerica-east1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/southamerica-east1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/southamerica-east1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1490\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-west1\",\n      \"description\": \"southamerica-west1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/southamerica-west1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/southamerica-west1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/southamerica-west1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/southamerica-west1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1000\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1\",\n      \"description\": \"us-central1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-central1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-central1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-central1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-central1-f\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-central1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1230\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east1\",\n      \"description\": \"us-east1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-east1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-east1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-east1-d\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-east1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1270\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east4\",\n      \"description\": \"us-east4\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-east4-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-east4-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-east4-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-east4\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1530\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east5\",\n      \"description\": \"us-east5\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-east5-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-east5-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-east5-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-east5\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1550\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-south1\",\n      \"description\": \"us-south1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-south1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-south1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-south1-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-south1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1210\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west1\",\n      \"description\": \"us-west1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-west1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-west1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-west1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-west1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1360\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west2\",\n      \"description\": \"us-west2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-west2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-west2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-west2-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-west2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1420\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west3\",\n      \"description\": \"us-west3\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-west3-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-west3-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-west3-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-west3\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1430\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west4\",\n      \"description\": \"us-west4\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-west4-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-west4-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-west4-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-west4\",\n      \"supportsPzs\": false\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions\"\n}\n"
  },
  {
    "path": "test-data/gce2/json-dumps/compute-serial-port-output-1010101010.json",
    "content": "{\n  \"kind\": \"compute#serialPortOutput\",\n  \"contents\": \"\\u001b[2J\\u001b[01;01H\\u001b[=3h\\u001b[2J\\u001b[01;01H\\u001b[2J\\u001b[01;01H\\u001b[=3h\\u001b[2J\\u001b[01;01HCSM BBS Table full.\\r\\nBdsDxe: loading Boot0001 \\\"UEFI Google PersistentDisk \\\" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\\r\\nBdsDxe: starting Boot0001 \\\"UEFI Google PersistentDisk \\\" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\\r\\n\\r\\nUEFI: Attempting to start image.\\r\\nDescription: UEFI Google PersistentDisk \\r\\nFilePath: PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\\r\\nOptionNumber: 1.\\r\\n[   20.5] cloud-init[56]: Cloud-init v. 21.4 finished at Thu, 13 Apr 2023 13:53:15 +0000. Datasource DataSourceGCE.  Up 20.49 seconds\",\n  \"start\": \"0\",\n  \"next\": \"63414\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/1010101010/serialPortOutput\"\n}\n"
  },
  {
    "path": "test-data/gce2/json-dumps/compute-serial-port-output-1010101011.json",
    "content": "{\n  \"kind\": \"compute#serialPortOutput\",\n  \"contents\": \"\\u001b[2J\\u001b[01;01H\\u001b[=3h\\u001b[2J\\u001b[01;01H\\u001b[2J\\u001b[01;01H\\u001b[=3h\\u001b[2J\\u001b[01;01HCSM BBS Table full.\\r\\nBdsDxe: loading Boot0001 \\\"UEFI Google PersistentDisk \\\" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\\r\\nBdsDxe: starting Boot0001 \\\"UEFI Google PersistentDisk \\\" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\\r\\n\\r\\nUEFI: Attempting to start image.\\r\\nDescription: UEFI Google PersistentDisk \\r\\nFilePath: PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\\r\\nOptionNumber: 1.\\r\\n[   20.5] cloud-init[56]: Cloud-init v. 21.4 finished at Thu, 13 Apr 2023 13:53:15 +0000. Datasource DataSourceGCE.  Up 20.49 seconds\",\n  \"start\": \"0\",\n  \"next\": \"63414\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/1010101010/serialPortOutput\"\n}\n"
  },
  {
    "path": "test-data/gce2/json-dumps/compute-serial-port-output-faulty-linux-ssh.json",
    "content": "{\n  \"kind\": \"compute#serialPortOutput\",\n  \"contents\": \"\\u001b[2J\\u001b[01;01H\\u001b[=3h\\u001b[2J\\u001b[01;01H\\u001b[2J\\u001b[01;01H\\u001b[=3h\\u001b[2J\\u001b[01;01HCSM BBS Table full.\\r\\nBdsDxe: loading Boot0001 \\\"UEFI Google PersistentDisk \\\" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\\r\\nBdsDxe: starting Boot0001 \\\"UEFI Google PersistentDisk \\\" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\\r\\n\\r\\nUEFI: Attempting to start image.\\r\\nDescription: UEFI Google PersistentDisk \\r\\nFilePath: PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\\r\\nOptionNumber: 1.\\r\\n\\r\\n\\u001b[0m\\u001b[30m\\u001b[47mWelcome to GRUB!\\n\\r\\n\\r\\u001b[0m\\u001b[37m\\u001b[40m\\u001b[0m\\u001b[30m\\u001b[40m\\u001b[2J\\u001b[01;01H\\u001b[0m\\u001b[37m\\u001b[40m\\u001b[H\\u001b[J\\u001b[1;1H\\u001b[H\\u001b[J\\u001b[1;1H\\u001b[0m\\u001b[30m\\u001b[40m\\u001b[2J\\u001b[01;01H\\u001b[0m\\u001b[37m\\u001b[40m    Booting `Debian GNU/Linux'Booting `Debian GNU/Linux'\\n\\r\\n\\r\\n\\r\\n\\rLoading Linux 5.10.0-26-cloud-amd64 ...Loading Linux 5.10.0-26-cloud-amd64 ...\\n\\r\\n\\rLoading initial ramdisk ...Loading initial ramdisk ...\\n\\r\\n\\rerror: no suitable video mode found.\\n\\rerror: no suitable video mode found.\\n\\rBooting in blind modeBooting in blind mode\\n\\r\\n\\r[    0.000000] Linux version 5.10.0-26-cloud-amd64 (debian-kernel@lists.debian.org) (gcc-10 (Debian 10.2.1-6) 10.2.1 20210110, GNU ld (GNU Binutils for Debian) 2.35.2) #1 SMP Debian 5.10.197-1 (2023-09-29)\\r\\n[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-5.10.0-26-cloud-amd64 root=UUID=e6fe3fcb-2478-4e7e-8072-4ced46dceac5 ro console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0 intel_iommu=off\\r\\n[    0.000000] BIOS-provided physical RAM map:\\r\\n[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x0000000000000fff] reserved\\r\\n[    0.000000] BIOS-e820: [mem 0x0000000000001000-0x0000000000054fff] usable\\r\\n[    0.000000] BIOS-e820: [mem 0x0000000000055000-0x000000000005ffff] reserved\\r\\n[    0.000000] BIOS-e820: [mem 0x0000000000060000-0x0000000000097fff] usable\\r\\n[    0.000000] BIOS-e820: [mem 0x0000000000098000-0x000000000009ffff] reserved\\r\\n[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x0000000025eecfff] usable\\r\\n[    0.000000] BIOS-e820: [mem 0x0000000025eed000-0x0000000025fecfff] reserved\\r\\n[    0.000000] BIOS-e820: [mem 0x0000000025fed000-0x00000000260ecfff] type 20\\r\\n[    0.000000] BIOS-e820: [mem 0x00000000260ed000-0x000000002616cfff] reserved\\r\\n[    0.000000] BIOS-e820: [mem 0x000000002616d000-0x000000002617efff] ACPI data\\r\\n[    0.000000] BIOS-e820: [mem 0x000000002617f000-0x00000000261fefff] ACPI NVS\\r\\n[    0.000000] BIOS-e820: [mem 0x00000000261ff000-0x00000000265dffff] usable\\r\\n[    0.000000] BIOS-e820: [mem 0x00000000265e0000-0x00000000265fffff] reserved\\r\\n[    0.000000] printk: bootconsole [earlyser0] enabled\\r\\n[    0.000000] NX (Execute Disable) protection: active\\r\\n[    0.000000] efi: EFI v2.70 by EDK II\\r\\n[    0.000000] efi: TPMFinalLog=0x261f7000 ACPI=0x2617e000 ACPI 2.0=0x2617e014 SMBIOS=0x25fca000 MEMATTR=0x249a0018 \\r\\n[    0.000000] secureboot: Secure boot disabled\\r\\n[    0.000000] SMBIOS 2.4 present.\\r\\n[    0.000000] DMI: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/09/2023\\r\\n[    0.000000] Hypervisor detected: KVM\\r\\n[    0.000000] kvm-clock: Using msrs 4b564d01 and 4b564d00\\r\\n[    0.000000] kvm-clock: cpu 0, msr 11601001, primary cpu clock\\r\\n[    0.000000] kvm-clock: using sched offset of 6574541159 cycles\\r\\n[    0.000750] clocksource: kvm-clock: mask: 0xffffffffffffffff max_cycles: 0x1cd42e4dffb, max_idle_ns: 881590591483 ns\\r\\n[    0.003137] tsc: Detected 2200.170 MHz processor\\r\\n[    0.003944] last_pfn = 0x265e0 max_arch_pfn = 0x400000000\\r\\n[    0.004756] x86/PAT: Configuration [0-7]: WB  WC  UC- UC  WB  WP  UC- WT  \\r\\nMemory KASLR using RDRAND RDTSC...\\r\\n[    0.006413] Using GB pages for direct mapping\\r\\n[    0.007451] RAMDISK: [mem 0x2327f000-0x24000fff]\\r\\n[    0.008104] ACPI: Early table checksum verification disabled\\r\\n[    0.008840] ACPI: RSDP 0x000000002617E014 000024 (v02 Google)\\r\\n[    0.009613] ACPI: XSDT 0x000000002617D0E8 00005C (v01 Google GOOGFACP 00000001      01000013)\\r\\n[    0.010705] ACPI: FACP 0x0000000026178000 0000F4 (v02 Google GOOGFACP 00000001 GOOG 00000001)\\r\\n[    0.011795] ACPI: DSDT 0x0000000026179000 001A64 (v01 Google GOOGDSDT 00000001 GOOG 00000001)\\r\\n[    0.013148] ACPI: FACS 0x00000000261F2000 000040\\r\\n[    0.013789] ACPI: SSDT 0x000000002617C000 000316 (v02 GOOGLE Tpm2Tabl 00001000 INTL 20211217)\\r\\n[    0.015074] ACPI: TPM2 0x000000002617B000 000034 (v04 GOOGLE          00000001 GOOG 00000001)\\r\\n[    0.016308] ACPI: SRAT 0x0000000026177000 0000B8 (v03 Google GOOGSRAT 00000001 GOOG 00000001)\\r\\n[    0.017416] ACPI: APIC 0x0000000026176000 00006E (v05 Google GOOGAPIC 00000001 GOOG 00000001)\\r\\n[    0.018848] ACPI: SSDT 0x0000000026175000 00091F (v01 Google GOOGSSDT 00000001 GOOG 00000001)\\r\\n[    0.019981] ACPI: WAET 0x0000000026174000 000028 (v01 Google GOOGWAET 00000001 GOOG 00000001)\\r\\n[    0.021071] ACPI: Reserving FACP table memory at [mem 0x26178000-0x261780f3]\\r\\n[    0.021968] ACPI: Reserving DSDT table memory at [mem 0x26179000-0x2617aa63]\\r\\n[    0.022868] ACPI: Reserving FACS table memory at [mem 0x261f2000-0x261f203f]\\r\\n[    0.024195] ACPI: Reserving SSDT table memory at [mem 0x2617c000-0x2617c315]\\r\\n[    0.025096] ACPI: Reserving TPM2 table memory at [mem 0x2617b000-0x2617b033]\\r\\n[    0.026077] ACPI: Reserving SRAT table memory at [mem 0x26177000-0x261770b7]\\r\\n[    0.026976] ACPI: Reserving APIC table memory at [mem 0x26176000-0x2617606d]\\r\\n[    0.028016] ACPI: Reserving SSDT table memory at [mem 0x26175000-0x2617591e]\\r\\n[    0.028910] ACPI: Reserving WAET table memory at [mem 0x26174000-0x26174027]\\r\\n[    0.029920] SRAT: PXM 0 -\\u003e APIC 0x00 -\\u003e Node 0\\r\\n[    0.030516] ACPI: SRAT: Node 0 PXM 0 [mem 0x00000000-0x0009ffff]\\r\\n[    0.031283] ACPI: SRAT: Node 0 PXM 0 [mem 0x00100000-0x265fffff]\\r\\n[    0.032201] NUMA: Node 0 [mem 0x00000000-0x0009ffff] + [mem 0x00100000-0x265dffff] -\\u003e [mem 0x00000000-0x265dffff]\\r\\n[    0.034082] NODE_DATA(0) allocated [mem 0x26498000-0x264c1fff]\\r\\n[    0.035210] Zone ranges:\\r\\n[    0.035556]   DMA      [mem 0x0000000000001000-0x0000000000ffffff]\\r\\n[    0.036346]   DMA32    [mem 0x0000000001000000-0x00000000265dffff]\\r\\n[    0.037132]   Normal   empty\\r\\n[    0.037500]   Device   empty\\r\\n[    0.037865] Movable zone start for each node\\r\\n[    0.038411] Early memory node ranges\\r\\n[    0.038866]   node   0: [mem 0x0000000000001000-0x0000000000054fff]\\r\\n[    0.039666]   node   0: [mem 0x0000000000060000-0x0000000000097fff]\\r\\n[    0.040501]   node   0: [mem 0x0000000000100000-0x0000000025eecfff]\\r\\n[    0.041319]   node   0: [mem 0x00000000261ff000-0x00000000265dffff]\\r\\n[    0.042118] Initmem setup node 0 [mem 0x0000000000001000-0x00000000265dffff]\\r\\n[    0.043516] On node 0, zone DMA: 1 pages in unavailable ranges\\r\\n[    0.043518] On node 0, zone DMA: 11 pages in unavailable ranges\\r\\n[    0.044348] On node 0, zone DMA: 104 pages in unavailable ranges\\r\\n[    0.046817] On node 0, zone DMA32: 786 pages in unavailable ranges\\r\\n[    0.047679] On node 0, zone DMA32: 6688 pages in unavailable ranges\\r\\n[    0.048980] ACPI: PM-Timer IO Port: 0xb008\\r\\n[    0.050442] ACPI: LAPIC_NMI (acpi_id[0xff] dfl dfl lint[0x1])\\r\\n[    0.051354] IOAPIC[0]: apic_id 0, version 17, address 0xfec00000, GSI 0-23\\r\\n[    0.052270] ACPI: INT_SRC_OVR (bus 0 bus_irq 5 global_irq 5 high level)\\r\\n[    0.053112] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)\\r\\n[    0.054025] ACPI: INT_SRC_OVR (bus 0 bus_irq 10 global_irq 10 high level)\\r\\n[    0.054888] ACPI: INT_SRC_OVR (bus 0 bus_irq 11 global_irq 11 high level)\\r\\n[    0.055764] Using ACPI (MADT) for SMP configuration information\\r\\n[    0.056581] smpboot: Allowing 1 CPUs, 0 hotplug CPUs\\r\\n[    0.057278] PM: hibernation: Registered nosave memory: [mem 0x00000000-0x00000fff]\\r\\n[    0.058289] PM: hibernation: Registered nosave memory: [mem 0x00055000-0x0005ffff]\\r\\n[    0.059254] PM: hibernation: Registered nosave memory: [mem 0x00098000-0x0009ffff]\\r\\n[    0.060218] PM: hibernation: Registered nosave memory: [mem 0x000a0000-0x000fffff]\\r\\n[    0.061186] PM: hibernation: Registered nosave memory: [mem 0x25eed000-0x25fecfff]\\r\\n[    0.062153] PM: hibernation: Registered nosave memory: [mem 0x25fed000-0x260ecfff]\\r\\n[    0.063119] PM: hibernation: Registered nosave memory: [mem 0x260ed000-0x2616cfff]\\r\\n[    0.064086] PM: hibernation: Registered nosave memory: [mem 0x2616d000-0x2617efff]\\r\\n[    0.065051] PM: hibernation: Registered nosave memory: [mem 0x2617f000-0x261fefff]\\r\\n[    0.066343] [mem 0x26600000-0xffffffff] available for PCI devices\\r\\n[    0.067140] Booting paravirtualized kernel on KVM\\r\\n[    0.067740] clocksource: refined-jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645519600211568 ns\\r\\n[    0.073455] setup_percpu: NR_CPUS:8192 nr_cpumask_bits:1 nr_cpu_ids:1 nr_node_ids:1\\r\\n[    0.075118] percpu: Embedded 63 pages/cpu s221184 r8192 d28672 u2097152\\r\\n[    0.076074] kvm-guest: PV spinlocks disabled, single CPU\\r\\n[    0.076805] Built 1 zonelists, mobility grouping on.  Total pages: 150673\\r\\n[    0.077803] Policy zone: DMA32\\r\\n[    0.078192] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-5.10.0-26-cloud-amd64 root=UUID=e6fe3fcb-2478-4e7e-8072-4ced46dceac5 ro console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0 intel_iommu=off\\r\\n[    0.080817] DMAR: IOMMU disabled\\r\\n[    0.081474] Dentry cache hash table entries: 131072 (order: 8, 1048576 bytes, linear)\\r\\n[    0.082690] Inode-cache hash table entries: 65536 (order: 7, 524288 bytes, linear)\\r\\n[    0.083743] mem auto-init: stack:off, heap alloc:on, heap free:off\\r\\n[    0.087100] Memory: 233576K/625000K available (12296K kernel code, 2552K rwdata, 6956K rodata, 2468K init, 3724K bss, 103652K reserved, 0K cma-reserved)\\r\\n[    0.089122] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1\\r\\n[    0.090012] Kernel/User page tables isolation: enabled\\r\\nPoking KASLR using RDRAND RDTSC...\\r\\n[    0.091151] ftrace: allocating 33918 entries in 133 pages\\r\\n[    0.111503] ftrace: allocated 133 pages with 3 groups\\r\\n[    0.112765] rcu: Hierarchical RCU implementation.\\r\\n[    0.113378] rcu: \\tRCU restricting CPUs from NR_CPUS=8192 to nr_cpu_ids=1.\\r\\n[    0.114278] \\tRude variant of Tasks RCU enabled.\\r\\n[    0.114855] \\tTracing variant of Tasks RCU enabled.\\r\\n[    0.115469] rcu: RCU calculated value of scheduler-enlistment delay is 25 jiffies.\\r\\n[    0.116433] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=1\\r\\n[    0.121697] NR_IRQS: 524544, nr_irqs: 256, preallocated irqs: 16\\r\\n[    0.122810] random: crng init done\\r\\n[    0.123274] Console: colour dummy device 80x25\\r\\n[    0.124053] printk: console [tty0] enabled\\r\\n[    0.124835] printk: console [ttyS0] enabled\\r\\n[    0.124835] printk: console [ttyS0] enabled\\r\\n[    0.126039] printk: bootconsole [earlyser0] disabled\\r\\n[    0.126039] printk: bootconsole [earlyser0] disabled\\r\\n[    0.127441] ACPI: Core revision 20200925\\r\\n[    0.128098] APIC: Switch to symmetric I/O mode setup\\r\\n[    0.129244] x2apic enabled\\r\\n[    0.131960] Switched APIC routing to physical x2apic.\\r\\n[    0.136632] ..TIMER: vector=0x30 apic1=0 pin1=0 apic2=-1 pin2=-1\\r\\n[    0.137712] clocksource: tsc-early: mask: 0xffffffffffffffff max_cycles: 0x1fb6d394f62, max_idle_ns: 440795316813 ns\\r\\n[    0.139157] Calibrating delay loop (skipped) preset value.. 4400.34 BogoMIPS (lpj=8800680)\\r\\n[    0.143263] Last level iTLB entries: 4KB 64, 2MB 8, 4MB 8\\r\\n[    0.144056] Last level dTLB entries: 4KB 64, 2MB 0, 4MB 0, 1GB 4\\r\\n[    0.144991] Spectre V1 : Mitigation: usercopy/swapgs barriers and __user pointer sanitization\\r\\n[    0.146142] Spectre V2 : Mitigation: IBRS\\r\\n[    0.146695] Spectre V2 : Spectre v2 / SpectreRSB mitigation: Filling RSB on context switch\\r\\n[    0.147156] Spectre V2 : Spectre v2 / SpectreRSB : Filling RSB on VMEXIT\\r\\n[    0.148095] RETBleed: Mitigation: IBRS\\r\\n[    0.148658] Spectre V2 : mitigation: Enabling conditional Indirect Branch Prediction Barrier\\r\\n[    0.149882] Speculative Store Bypass: Mitigation: Speculative Store Bypass disabled via prctl and seccomp\\r\\n[    0.151163] MDS: Mitigation: Clear CPU buffers\\r\\n[    0.151804] TAA: Mitigation: Clear CPU buffers\\r\\n[    0.152445] MMIO Stale Data: Vulnerable: Clear CPU buffers attempted, no microcode\\r\\n[    0.153624] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'\\r\\n[    0.155158] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'\\r\\n[    0.156050] x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers'\\r\\n[    0.156905] x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]:  256\\r\\n[    0.157851] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.\\r\\n[    0.177428] Freeing SMP alternatives memory: 32K\\r\\n[    0.179890] pid_max: default: 32768 minimum: 301\\r\\n[    0.188030] LSM: Security Framework initializing\\r\\n[    0.188748] Yama: disabled by default; enable with sysctl kernel.yama.*\\r\\n[    0.189713] AppArmor: AppArmor initialized\\r\\n[    0.190294] TOMOYO Linux initialized\\r\\n[    0.190806] Mount-cache hash table entries: 2048 (order: 2, 16384 bytes, linear)\\r\\n[    0.191158] Mountpoint-cache hash table entries: 2048 (order: 2, 16384 bytes, linear)\\r\\n[    0.301178] smpboot: CPU0: Intel(R) Xeon(R) CPU @ 2.20GHz (family: 0x6, model: 0x4f, stepping: 0x0)\\r\\n[    0.303030] Performance Events: unsupported p6 CPU model 79 no PMU driver, software events only.\\r\\n[    0.303154] rcu: Hierarchical SRCU implementation.\\r\\n[    0.303232] NMI watchdog: Perf NMI watchdog permanently disabled\\r\\n[    0.304156] smp: Bringing up secondary CPUs ...\\r\\n[    0.304775] smp: Brought up 1 node, 1 CPU\\r\\n[    0.305377] smpboot: Max logical packages: 1\\r\\n[    0.305973] smpboot: Total of 1 processors activated (4400.34 BogoMIPS)\\r\\n[    0.308500] node 0 deferred pages initialised in 4ms\\r\\n[    0.309336] devtmpfs: initialized\\r\\n[    0.309853] x86/mm: Memory block size: 128MB\\r\\n[    0.310586] PM: Registering ACPI NVS region [mem 0x2617f000-0x261fefff] (524288 bytes)\\r\\n[    0.311201] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns\\r\\n[    0.312491] futex hash table entries: 256 (order: 2, 16384 bytes, linear)\\r\\n[    0.313553] NET: Registered protocol family 16\\r\\n[    0.314323] DMA: preallocated 128 KiB GFP_KERNEL pool for atomic allocations\\r\\n[    0.315262] DMA: preallocated 128 KiB GFP_KERNEL|GFP_DMA pool for atomic allocations\\r\\n[    0.316351] DMA: preallocated 128 KiB GFP_KERNEL|GFP_DMA32 pool for atomic allocations\\r\\n[    0.317444] audit: initializing netlink subsys (disabled)\\r\\n[    0.318358] thermal_sys: Registered thermal governor 'fair_share'\\r\\n[    0.318358] thermal_sys: Registered thermal governor 'bang_bang'\\r\\n[    0.319159] thermal_sys: Registered thermal governor 'step_wise'\\r\\n[    0.319988] thermal_sys: Registered thermal governor 'user_space'\\r\\n[    0.320815] thermal_sys: Registered thermal governor 'power_allocator'\\r\\n[    0.321635] cpuidle: using governor ladder\\r\\n[    0.323161] audit: type=2000 audit(1700193824.940:1): state=initialized audit_enabled=0 res=1\\r\\n[    0.324328] cpuidle: using governor menu\\r\\n[    0.324906] ACPI: bus type PCI registered\\r\\n[    0.325460] acpiphp: ACPI Hot Plug PCI Controller Driver version: 0.5\\r\\n[    0.326421] PCI: Using configuration type 1 for base access\\r\\n[    0.327802] Kprobes globally optimized\\r\\n[    0.328452] HugeTLB registered 1.00 GiB page size, pre-allocated 0 pages\\r\\n[    0.329351] HugeTLB registered 2.00 MiB page size, pre-allocated 0 pages\\r\\n[    0.457287] ACPI: Added _OSI(Module Device)\\r\\n[    0.457914] ACPI: Added _OSI(Processor Device)\\r\\n[    0.458520] ACPI: Added _OSI(3.0 _SCP Extensions)\\r\\n[    0.459158] ACPI: Added _OSI(Processor Aggregator Device)\\r\\n[    0.460010] ACPI: Added _OSI(Linux-Dell-Video)\\r\\n[    0.460629] ACPI: Added _OSI(Linux-Lenovo-NV-HDMI-Audio)\\r\\n[    0.461348] ACPI: Added _OSI(Linux-HPI-Hybrid-Graphics)\\r\\n[    0.462989] ACPI: 3 ACPI AML tables successfully acquired and loaded\\r\\n[    0.464105] ACPI: Interpreter enabled\\r\\n[    0.464646] ACPI: (supports S0 S3 S4 S5)\\r\\n[    0.465207] ACPI: Using IOAPIC for interrupt routing\\r\\n[    0.465937] PCI: Using host bridge windows from ACPI; if necessary, use \\\"pci=nocrs\\\" and report a bug\\r\\n[    0.467351] ACPI: Enabled 16 GPEs in block 00 to 0F\\r\\n[    0.469893] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff])\\r\\n[    0.471179] acpi PNP0A03:00: _OSC: OS supports [ASPM ClockPM Segments MSI HPX-Type3]\\r\\n[    0.472279] acpi PNP0A03:00: fail to add MMCONFIG information, can't access extended PCI configuration space under this bridge.\\r\\n[    0.474395] PCI host bridge to bus 0000:00\\r\\n[    0.475161] pci_bus 0000:00: root bus resource [io  0x0000-0x0cf7 window]\\r\\n[    0.476080] pci_bus 0000:00: root bus resource [io  0x0d00-0xffff window]\\r\\n[    0.476988] pci_bus 0000:00: root bus resource [mem 0x000a0000-0x000bffff window]\\r\\n[    0.478071] pci_bus 0000:00: root bus resource [mem 0x80000000-0xfebfefff window]\\r\\n[    0.479156] pci_bus 0000:00: root bus resource [bus 00-ff]\\r\\n[    0.479955] pci 0000:00:00.0: [8086:1237] type 00 class 0x060000\\r\\n[    0.483516] pci 0000:00:01.0: [8086:7110] type 00 class 0x060100\\r\\n[    0.497205] pci 0000:00:01.3: [8086:7113] type 00 class 0x068000\\r\\n[    0.510756] pci 0000:00:01.3: quirk: [io  0xb000-0xb03f] claimed by PIIX4 ACPI\\r\\n[    0.511429] pci 0000:00:03.0: [1af4:1004] type 00 class 0x000000\\r\\n[    0.518345] pci 0000:00:03.0: reg 0x10: [io  0xc040-0xc07f]\\r\\n[    0.523157] pci 0000:00:03.0: reg 0x14: [mem 0x80000000-0x8000007f]\\r\\n[    0.534975] pci 0000:00:04.0: [1af4:1000] type 00 class 0x020000\\r\\n[    0.540789] pci 0000:00:04.0: reg 0x10: [io  0xc000-0xc03f]\\r\\n[    0.544833] pci 0000:00:04.0: reg 0x14: [mem 0x80002000-0x8000203f]\\r\\n[    0.555412] pci 0000:00:05.0: [1af4:1005] type 00 class 0x00ff00\\r\\n[    0.560805] pci 0000:00:05.0: reg 0x10: [io  0xc080-0xc09f]\\r\\n[    0.564625] pci 0000:00:05.0: reg 0x14: [mem 0x80001000-0x8000103f]\\r\\n[    0.575564] ACPI: PCI Interrupt Link [LNKA] (IRQs 5 *10 11)\\r\\n[    0.577286] ACPI: PCI Interrupt Link [LNKB] (IRQs 5 *10 11)\\r\\n[    0.578886] ACPI: PCI Interrupt Link [LNKC] (IRQs 5 10 *11)\\r\\n[    0.579915] ACPI: PCI Interrupt Link [LNKD] (IRQs 5 10 *11)\\r\\n[    0.583168] ACPI: PCI Interrupt Link [LNKS] (IRQs *9)\\r\\n[    0.584105] iommu: Default domain type: Translated \\r\\n[    0.584854] vgaarb: loaded\\r\\n[    0.585334] Registered efivars operations\\r\\n[    0.586084] NetLabel: Initializing\\r\\n[    0.587156] NetLabel:  domain hash size = 128\\r\\n[    0.587827] NetLabel:  protocols = UNLABELED CIPSOv4 CALIPSO\\r\\n[    0.588621] NetLabel:  unlabeled traffic allowed by default\\r\\n[    0.589415] PCI: Using ACPI for IRQ routing\\r\\n[    0.590183] clocksource: Switched to clocksource kvm-clock\\r\\n[    0.599324] VFS: Disk quotas dquot_6.6.0\\r\\n[    0.599916] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)\\r\\n[    0.601024] AppArmor: AppArmor Filesystem Enabled\\r\\n[    0.601786] pnp: PnP ACPI init\\r\\n[    0.602662] pnp: PnP ACPI: found 7 devices\\r\\n[    0.608541] clocksource: acpi_pm: mask: 0xffffff max_cycles: 0xffffff, max_idle_ns: 2085701024 ns\\r\\n[    0.609795] NET: Registered protocol family 2\\r\\n[    0.610436] IP idents hash table entries: 16384 (order: 5, 131072 bytes, linear)\\r\\n[    0.612665] tcp_listen_portaddr_hash hash table entries: 512 (order: 1, 8192 bytes, linear)\\r\\n[    0.613850] TCP established hash table entries: 8192 (order: 4, 65536 bytes, linear)\\r\\n[    0.614940] TCP bind hash table entries: 8192 (order: 5, 131072 bytes, linear)\\r\\n[    0.615983] TCP: Hash tables configured (established 8192 bind 8192)\\r\\n[    0.616945] UDP hash table entries: 512 (order: 2, 16384 bytes, linear)\\r\\n[    0.617844] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes, linear)\\r\\n[    0.618844] NET: Registered protocol family 1\\r\\n[    0.619629] NET: Registered protocol family 44\\r\\n[    0.620246] pci_bus 0000:00: resource 4 [io  0x0000-0x0cf7 window]\\r\\n[    0.621100] pci_bus 0000:00: resource 5 [io  0x0d00-0xffff window]\\r\\n[    0.621946] pci_bus 0000:00: resource 6 [mem 0x000a0000-0x000bffff window]\\r\\n[    0.622980] pci_bus 0000:00: resource 7 [mem 0x80000000-0xfebfefff window]\\r\\n[    0.624039] pci 0000:00:00.0: Limiting direct PCI/PCI transfers\\r\\n[    0.624898] PCI: CLS 0 bytes, default 64\\r\\n[    0.625515] Trying to unpack rootfs image as initramfs...\\r\\n[    0.838263] Freeing initrd memory: 13832K\\r\\n[    0.838913] clocksource: tsc: mask: 0xffffffffffffffff max_cycles: 0x1fb6d394f62, max_idle_ns: 440795316813 ns\\r\\n[    0.840271] clocksource: Switched to clocksource tsc\\r\\n[    0.841223] Initialise system trusted keyrings\\r\\n[    0.841875] Key type blacklist registered\\r\\n[    0.842505] workingset: timestamp_bits=36 max_order=18 bucket_order=0\\r\\n[    0.844293] zbud: loaded\\r\\n[    0.844973] Key type asymmetric registered\\r\\n[    0.845539] Asymmetric key parser 'x509' registered\\r\\n[    0.846222] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 252)\\r\\n[    0.847278] io scheduler mq-deadline registered\\r\\n[    0.848485] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled\\r\\n[    0.849463] 00:03: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A\\r\\n[    0.850740] 00:04: ttyS1 at I/O 0x2f8 (irq = 3, base_baud = 115200) is a 16550A\\r\\n[    0.851965] 00:05: ttyS2 at I/O 0x3e8 (irq = 6, base_baud = 115200) is a 16550A\\r\\n[    0.853164] 00:06: ttyS3 at I/O 0x2e8 (irq = 7, base_baud = 115200) is a 16550A\\r\\n[    0.854467] i8042: PNP: PS/2 Controller [PNP0303:KBD,PNP0f13:MOU] at 0x60,0x64 irq 1,12\\r\\n[    0.855734] i8042: Warning: Keylock active\\r\\n[    0.857698] serio: i8042 KBD port at 0x60,0x64 irq 1\\r\\n[    0.858391] serio: i8042 AUX port at 0x60,0x64 irq 12\\r\\n[    0.859206] rtc_cmos 00:00: RTC can wake from S4\\r\\n[    0.860615] rtc_cmos 00:00: registered as rtc0\\r\\n[    0.861428] rtc_cmos 00:00: setting system clock to 2023-11-17T04:03:45 UTC (1700193825)\\r\\n[    0.862619] rtc_cmos 00:00: alarms up to one day, 114 bytes nvram\\r\\n[    0.863495] intel_pstate: CPU model not supported\\r\\n[    0.864350] NET: Registered protocol family 10\\r\\n[    0.872101] Segment Routing with IPv6\\r\\n[    0.872671] mip6: Mobile IPv6\\r\\n[    0.873091] NET: Registered protocol family 17\\r\\n[    0.873814] IPI shorthand broadcast: enabled\\r\\n[    0.874454] sched_clock: Marking stable (864288966, 8353340)-\\u003e(874836097, -2193791)\\r\\n[    0.875588] registered taskstats version 1\\r\\n[    0.876158] Loading compiled-in X.509 certificates\\r\\n[    0.908877] Loaded X.509 cert 'Debian Secure Boot CA: 6ccece7e4c6c0d1f6149f3dd27dfcc5cbb419ea1'\\r\\n[    0.910478] Loaded X.509 cert 'Debian Secure Boot Signer 2022 - linux: 14011249c2675ea8e5148542202005810584b25f'\\r\\n[    0.911923] Key type .fscrypt registered\\r\\n[    0.912517] Key type fscrypt-provisioning registered\\r\\n[    0.913253] AppArmor: AppArmor sha1 policy hashing enabled\\r\\n[    0.915720] Freeing unused decrypted memory: 2036K\\r\\n[    0.917013] Freeing unused kernel image (initmem) memory: 2468K\\r\\n[    0.924384] Write protecting the kernel read-only data: 22528k\\r\\n[    0.925931] Freeing unused kernel image (text/rodata gap) memory: 2036K\\r\\n[    0.927194] Freeing unused kernel image (rodata/data gap) memory: 1236K\\r\\n[    0.928659] x86/mm: Checked W+X mappings: passed, no W+X pages found.\\r\\n[    0.929536] x86/mm: Checking user space page tables\\r\\n[    0.930357] x86/mm: Checked W+X mappings: passed, no W+X pages found.\\r\\n[    0.931248] Run /init as init process\\r\\nLoading, please wait...\\r\\nStarting version 247.3-7+deb11u4\\r\\n[    0.999458] PCI Interrupt Link [LNKC] enabled at IRQ 11\\r\\n[    1.000238] virtio-pci 0000:00:03.0: virtio_pci: leaving for legacy driver\\r\\n[    1.026601] PCI Interrupt Link [LNKD] enabled at IRQ 10\\r\\n[    1.027444] virtio-pci 0000:00:04.0: virtio_pci: leaving for legacy driver\\r\\n[    1.031920] PCI Interrupt Link [LNKA] enabled at IRQ 10\\r\\n[    1.032814] virtio-pci 0000:00:05.0: virtio_pci: leaving for legacy driver\\r\\n[    1.054934] SCSI subsystem initialized\\r\\n[    1.061158] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input0\\r\\n[    1.075892] virtio_net virtio1 ens4: renamed from eth0\\r\\n[    1.085896] scsi host0: Virtio SCSI HBA\\r\\n[    1.091740] scsi 0:0:1:0: Direct-Access     Google   PersistentDisk   1    PQ: 0 ANSI: 6\\r\\n[    1.111855] sd 0:0:1:0: [sda] 20971520 512-byte logical blocks: (10.7 GB/10.0 GiB)\\r\\n[    1.112925] sd 0:0:1:0: [sda] 4096-byte physical blocks\\r\\n[    1.113940] sd 0:0:1:0: [sda] Write Protect is off\\r\\n[    1.114657] sd 0:0:1:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA\\r\\n[    1.118523]  sda: sda1 sda14 sda15\\r\\n[    1.126791] sd 0:0:1:0: [sda] Attached SCSI disk\\r\\nBegin: Loading essential drivers ... done.\\r\\nBegin: Running /scripts/init-premount ... done.\\r\\nBegin: Mounting root file system ... Begin: Running /scripts/local-top ... done.\\r\\nBegin: Running /scripts/local[    1.152781] gce-disk-expand: Resizing partition on \\r\\n-premount ... [    1.176849]  sda: sda1 sda14 sda15\\r\\n[    1.188392] gce-disk-expand: Disk /dev/sda1 doesn't need resizing.\\r\\ndone.\\r\\nBegin: Will now check root file system ... fsck from util-linux 2.36.1\\r\\n[/sbin/fsck.ext4 (1) -- /dev/sda1] fsck.ext4 -a -C0 /dev/sda1 \\r\\n/dev/sda1: clean, 82191/647168 files, 583028/2588667 blocks\\r\\ndone.\\r\\n[    1.254250] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null)\\r\\ndone.\\r\\nBegin: Running /scripts/local-bottom ... done.\\r\\nBegin: Running /scripts/init-bottom ... done.\\r\\n[    1.277595] Not activating Mandatory Access Control as /sbin/tomoyo-init does not exist.\\r\\n[    1.387488] systemd[1]: Inserted module 'autofs4'\\r\\n[    1.442681] systemd[1]: systemd 247.3-7+deb11u4 running in system mode. (+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +ZSTD +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=unified)\\r\\n[    1.445902] systemd[1]: Detected virtualization kvm.\\r\\n[    1.446600] systemd[1]: Detected architecture x86-64.\\r\\n\\r\\nWelcome to \\u001b[1mDebian GNU/Linux 11 (bullseye)\\u001b[0m!\\r\\n\\r\\n[    1.460843] systemd[1]: Set hostname to \\u003cdebian\\u003e.\\r\\n[    1.462651] systemd[1]: Initializing machine ID from KVM UUID.\\r\\n[    1.463576] systemd[1]: Installed transient /etc/machine-id file.\\r\\n[    1.919472] systemd[1]: Condition check resulted in Root Slice being skipped.\\r\\n[    1.920524] systemd[1]: Condition check resulted in System Slice being skipped.\\r\\n[    1.922280] systemd[1]: Queued start job for default target Graphical Interface.\\r\\n[    1.924563] systemd[1]: Created slice system-getty.slice.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Created slice \\u001b[0;1;39msystem-getty.slice\\u001b[0m.\\r\\n[    1.936671] systemd[1]: Created slice system-modprobe.slice.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Created slice \\u001b[0;1;39msystem-modprobe.slice\\u001b[0m.\\r\\n[    1.948711] systemd[1]: Created slice system-serial\\\\x2dgetty.slice.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Created slice \\u001b[0;1;39msystem-serial\\\\x2dgetty.slice\\u001b[0m.\\r\\n[    1.960656] systemd[1]: Created slice system-systemd\\\\x2dgrowfs.slice.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Created slice \\u001b[0;1;39msystem-systemd\\\\x2dgrowfs.slice\\u001b[0m.\\r\\n[    1.972612] systemd[1]: Created slice User and Session Slice.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Created slice \\u001b[0;1;39mUser and Session Slice\\u001b[0m.\\r\\n[    1.984482] systemd[1]: Started Dispatch Password Requests to Console Directory Watch.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mDispatch Password …ts to Console Directory Watch\\u001b[0m.\\r\\n[    1.996479] systemd[1]: Started Forward Password Requests to Wall Directory Watch.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mForward Password R…uests to Wall Directory Watch\\u001b[0m.\\r\\n[    2.008603] systemd[1]: Set up automount Arbitrary Executable File Formats File System Automount Point.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Set up automount \\u001b[0;1;39mArbitrary…s File System Automount Point\\u001b[0m.\\r\\n[    2.020467] systemd[1]: Reached target Local Encrypted Volumes.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mLocal Encrypted Volumes\\u001b[0m.\\r\\n[    2.032463] systemd[1]: Reached target Paths.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mPaths\\u001b[0m.\\r\\n[    2.044419] systemd[1]: Reached target Remote File Systems.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mRemote File Systems\\u001b[0m.\\r\\n[    2.056430] systemd[1]: Reached target Slices.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mSlices\\u001b[0m.\\r\\n[    2.068460] systemd[1]: Reached target Swap.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mSwap\\u001b[0m.\\r\\n[    2.080452] systemd[1]: Reached target System Time Set.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mSystem Time Set\\u001b[0m.\\r\\n[    2.092590] systemd[1]: Listening on Syslog Socket.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Listening on \\u001b[0;1;39mSyslog Socket\\u001b[0m.\\r\\n[    2.104541] systemd[1]: Listening on fsck to fsckd communication Socket.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Listening on \\u001b[0;1;39mfsck to fsckd communication Socket\\u001b[0m.\\r\\n[    2.116525] systemd[1]: Listening on initctl Compatibility Named Pipe.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Listening on \\u001b[0;1;39minitctl Compatibility Named Pipe\\u001b[0m.\\r\\n[    2.128652] systemd[1]: Listening on Journal Audit Socket.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Listening on \\u001b[0;1;39mJournal Audit Socket\\u001b[0m.\\r\\n[    2.140586] systemd[1]: Listening on Journal Socket (/dev/log).\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Listening on \\u001b[0;1;39mJournal Socket (/dev/log)\\u001b[0m.\\r\\n[    2.152608] systemd[1]: Listening on Journal Socket.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Listening on \\u001b[0;1;39mJournal Socket\\u001b[0m.\\r\\n[    2.164999] systemd[1]: Listening on udev Control Socket.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Listening on \\u001b[0;1;39mudev Control Socket\\u001b[0m.\\r\\n[    2.176533] systemd[1]: Listening on udev Kernel Socket.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Listening on \\u001b[0;1;39mudev Kernel Socket\\u001b[0m.\\r\\n[    2.189244] systemd[1]: Mounting Huge Pages File System...\\r\\n         Mounting \\u001b[0;1;39mHuge Pages File System\\u001b[0m...\\r\\n[    2.201151] systemd[1]: Mounting POSIX Message Queue File System...\\r\\n         Mounting \\u001b[0;1;39mPOSIX Message Queue File System\\u001b[0m...\\r\\n[    2.213139] systemd[1]: Mounting Kernel Debug File System...\\r\\n         Mounting \\u001b[0;1;39mKernel Debug File System\\u001b[0m...\\r\\n[    2.225136] systemd[1]: Mounting Kernel Trace File System...\\r\\n         Mounting \\u001b[0;1;39mKernel Trace File System\\u001b[0m...\\r\\n[    2.237190] systemd[1]: Starting Create list of static device nodes for the current kernel...\\r\\n         Starting \\u001b[0;1;39mCreate list of st…odes for the current kernel\\u001b[0m...\\r\\n[    2.249105] systemd[1]: Starting Load Kernel Module configfs...\\r\\n         Starting \\u001b[0;1;39mLoad Kernel Module configfs\\u001b[0m...\\r\\n[    2.261132] systemd[1]: Starting Load Kernel Module drm...\\r\\n         Starting \\u001b[0;1;39mLoad Kernel Module drm\\u001b[0m...\\r\\n[    2.273083] systemd[1]: Starting Load Kernel Module fuse...\\r\\n         Starting \\u001b[0;1;39mLoad Kernel Module fuse\\u001b[0m...\\r\\n[    2.283707] fuse: init (API version 7.32)\\r\\n[    2.284971] systemd[1]: Condition check resulted in Set Up Additional Binary Formats being skipped.\\r\\n[    2.286266] systemd[1]: Condition check resulted in File System Check on Root Device being skipped.\\r\\n[    2.288806] systemd[1]: Starting Journal Service...\\r\\n         Starting \\u001b[0;1;39mJournal Service\\u001b[0m...\\r\\n[    2.301746] systemd[1]: Starting Load Kernel Modules...\\r\\n         Starting \\u001b[0;1;39mLoad Kernel Modules\\u001b[0m...\\r\\n[    2.313052] systemd[1]: Starting Remount Root and Kernel File Systems...\\r\\n         Starting \\u001b[0;1;39mRemount Root and Kernel File Systems\\u001b[0m...\\r\\n[    2.317162] systemd[1]: Starting Coldplug All udev Devices...\\r\\n         Starting \\u001b[0;1;39mColdplug All udev Devices\\u001b[0m...\\r\\n[    2.322305] systemd[1]: Mounted Huge Pages File System.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Mounted \\u001b[0;1;39mHuge Pages File System\\u001b[0m.\\r\\n[    2.335757] systemd[1]: Mounted POSIX Message Queue File System.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Mounted \\u001b[0;1;39mPOSIX Message Queue File System\\u001b[0m.\\r\\n[    2.338494] systemd[1]: Mounted Kernel Debug File System.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Mounted \\u001b[0;1;39mKernel Debug File System\\u001b[0m.\\r\\n[    2.348486] EXT4-fs (sda1): re-mounted. Opts: discard,errors=remount-ro\\r\\n[    2.353065] systemd[1]: Mounted Kernel Trace File System.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Mounted \\u001b[0;1;39mKernel Trace File System\\u001b[0m.\\r\\n[    2.364540] systemd[1]: Started Journal Service.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mJournal Service\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mCreate list of st… nodes for the current kernel\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mLoad Kernel Module configfs\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mLoad Kernel Module drm\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mLoad Kernel Module fuse\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mLoad Kernel Modules\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mRemount Root and Kernel File Systems\\u001b[0m.\\r\\n         Mounting \\u001b[0;1;39mFUSE Control File System\\u001b[0m...\\r\\n         Mounting \\u001b[0;1;39mKernel Configuration File System\\u001b[0m...\\r\\n         Starting \\u001b[0;1;39mGrow File System on /\\u001b[0m...\\r\\n         Starting \\u001b[0;1;39mFlush Journal to Persistent Storage\\u001b[0m...\\r\\n[    2.488722] EXT4-fs (sda1): resizing filesystem from 2588667 to 2588667 blocks\\r\\n         Starting \\u001b[0;1;39mLoad/Save Random Seed\\u001b[0m...\\r\\n         Starting \\u001b[0;1;39mApply Kernel Variables\\u001b[0m...\\r\\n[    2.510094] systemd-journald[181]: Received client request to flush runtime journal.\\r\\n         Starting \\u001b[0;1;39mCreate System Users\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mColdplug All udev Devices\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Mounted \\u001b[0;1;39mFUSE Control File System\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Mounted \\u001b[0;1;39mKernel Configuration File System\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mGrow File System on /\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mFlush Journal to Persistent Storage\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mLoad/Save Random Seed\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mApply Kernel Variables\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mCreate System Users\\u001b[0m.\\r\\n         Starting \\u001b[0;1;39mHelper to synchronize boot up for ifupdown\\u001b[0m...\\r\\n         Starting \\u001b[0;1;39mCreate Static Device Nodes in /dev\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mHelper to synchronize boot up for ifupdown\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mCreate Static Device Nodes in /dev\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mLocal File Systems (Pre)\\u001b[0m.\\r\\n         Starting \\u001b[0;1;39mRule-based Manage…for Device Events and Files\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mRule-based Manager for Device Events and Files\\u001b[0m.\\r\\n[    2.759844] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input2\\r\\n[    2.784424] ACPI: Power Button [PWRF]\\r\\n[    2.785020] input: Sleep Button as /devices/LNXSYSTM:00/LNXSLPBN:00/input/input3\\r\\n[    2.786165] ACPI: Sleep Button [SLPF]\\r\\n[    2.797491] tpm_tis MSFT0101:00: 2.0 TPM (device-id 0x9009, rev-id 0)\\r\\n[    2.818744] sd 0:0:1:0: Attached scsi generic sg0 type 0\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Found device \\u001b[0;1;39m/dev/ttyS0\\u001b[0m.\\r\\n[    2.829489] pstore: Using crash dump compression: deflate\\r\\n[    2.830270] pstore: Registered efi as persistent store backend\\r\\n[    2.878870] RAPL PMU: API unit is 2^-32 Joules, 0 fixed counters, 10737418240 ms ovfl timer\\r\\n[    2.916156] cryptd: max_cpu_qlen set to 1000\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Found device \\u001b[0;1;39mPersistentDisk 15\\u001b[0m.\\r\\n[    2.945181] AVX2 version of gcm_enc/dec engaged.\\r\\n[    2.945881] AES CTR mode by8 optimization enabled\\r\\n         Mounting \\u001b[0;1;39m/boot/efi\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Mounted \\u001b[0;1;39m/boot/efi\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mLocal File Systems\\u001b[0m.\\r\\n         Starting \\u001b[0;1;39mLoad AppArmor profiles\\u001b[0m...\\r\\n         Starting \\u001b[0;1;39mCommit a transient machine-id on disk\\u001b[0m...\\r\\n         Starting \\u001b[0;1;39mCreate Volatile Files and Directories\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Found device \\u001b[0;1;39mVirtio network device\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mCreate Volatile Files and Directories\\u001b[0m.\\r\\n         Starting \\u001b[0;1;39mUpdate UTMP about System Boot/Shutdown\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mUpdate UTMP about System Boot/Shutdown\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mCommit a transient machine-id on disk\\u001b[0m.\\r\\n[    3.379173] audit: type=1400 audit(1700193828.011:2): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"nvidia_modprobe\\\" pid=292 comm=\\\"apparmor_parser\\\"\\r\\n[    3.382434] audit: type=1400 audit(1700193828.015:3): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"nvidia_modprobe//kmod\\\" pid=292 comm=\\\"apparmor_parser\\\"\\r\\n[    3.465172] audit: type=1400 audit(1700193828.099:4): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"/usr/sbin/chronyd\\\" pid=293 comm=\\\"apparmor_parser\\\"\\r\\n[    3.506572] audit: type=1400 audit(1700193828.139:5): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"lsb_release\\\" pid=294 comm=\\\"apparmor_parser\\\"\\r\\n[    3.625363] audit: type=1400 audit(1700193828.259:6): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"tcpdump\\\" pid=295 comm=\\\"apparmor_parser\\\"\\r\\n[    3.655070] audit: type=1400 audit(1700193828.287:7): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"/usr/sbin/haveged\\\" pid=296 comm=\\\"apparmor_parser\\\"\\r\\n[    3.720200] audit: type=1400 audit(1700193828.351:8): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"/usr/bin/man\\\" pid=297 comm=\\\"apparmor_parser\\\"\\r\\n[    3.723210] audit: type=1400 audit(1700193828.359:9): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"man_filter\\\" pid=297 comm=\\\"apparmor_parser\\\"\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mLoad AppArmor profiles\\u001b[0m[    3.728049] audit: type=1400 audit(1700193828.359:10): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"man_groff\\\" pid=297 comm=\\\"apparmor_parser\\\"\\r\\n.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mEntropy Daemon based on the HAVEGE algorithm\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mSystem Initialization\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mGCE Workload Certificate refresh timer\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mNSS cache refresh timer\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mDaily Cleanup of Temporary Directories\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Listening on \\u001b[0;1;39mD-Bus System Message Bus Socket\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Listening on \\u001b[0;1;39mUUID daemon activation socket\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mSockets\\u001b[0m.\\r\\n         Starting \\u001b[0;1;39mResize root filesystem if needed\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mifup for ens4\\u001b[0m.\\r\\n         Starting \\u001b[0;1;39mRaise network interfaces\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mResize root filesystem if needed\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mBasic System\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mRegular background program processing daemon\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mD-Bus System Message Bus\\u001b[0m.\\r\\n         Starting \\u001b[0;1;39mRemove Stale Onli…t4 Metadata Check Snapshots\\u001b[0m...\\r\\n         Starting \\u001b[0;1;39mSystem Logging Service\\u001b[0m...\\r\\n         Starting \\u001b[0;1;39mUser Login Management\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mSystem Logging Service\\u001b[0m.\\r\\nNov 17 04:03:48 debian kernel: [    0.000000] Linux version 5.10.0-26-cloud-amd64 (debian-kernel@lists.debian.org) (gcc-10 (Debian 10.2.1-6) 10.2.1 20210110, GNU ld (GNU Binutils for Debian) 2.35.2) #1 SMP Debian 5.10.197-1 (2023-09-29)\\r\\nNov 17 04:03:48 debian kernel: [    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-5.10.0-26-cloud-amd64 root=UUID=e6fe3fcb-2478-4e7e-8072-4ced46dceac5 ro console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0 intel_iommu=off\\r\\nNov 17 04:03:48 debian kernel: [    0.000000] BIOS-provided physical RAM map:\\r\\nNov 17 04:03:48 debian kernel: [    0.000000] BIOS-e820: [mem 0x0000000000000000-0x0000000000000fff] reserved\\r\\nNov 17 04:03:48 debian kernel: [    0.000000] BIOS-e820: [mem 0x0000000000001000-0x0000000000054fff] usable\\r\\nNov 17 04:03:48 debian kernel: [    0.000000] BIOS-e820: [mem 0x0000000000055000-0x000000000005ffff] reserved\\r\\nNov 17 04:03:48 debian kernel: [    0.000000] BIOS-e820: [mem 0x0000000000060000-0x0000000000097fff] usable\\r\\nNov 17 04:03:48 debian kernel: [    0.000000] BIOS-e820: [mem 0x0000000000098000-0x000000000009ffff] reserved\\r\\nNov 17 04:03:48 debian kernel: [    0.000000] BIOS-e820: [mem 0x0000000000100000-0x0000000025eecfff] usable\\r\\nNov 17 04:03:48 debian kernel: [    0.000000] BIOS-e820: [mem 0x0000000025eed000-0x0000000025fecfff] reserved\\r\\nNov 17 04:03:48 debian kernel: [    0.000000] BIOS-e820: [mem 0x0000000025fed000-0x00000000260ecfff] type 20\\r\\nNov 17 04:03:48 debian kernel: [    0.000000] BIOS-e820: [mem 0x00000000260ed000-0x000000002616cfff] reserved\\r\\nNov 17 04:03:48 debian kernel: [    0.000000] BIOS-e820: [mem 0x000000002616d000-0x000000002617efff] ACPI data\\r\\nNov 17 04:03:48 debian kernel: [    0.000000] BIOS-e820: [mem 0x000000002617f000-0x00000000261fefff] ACPI NVS\\r\\nNov 17 04:03:48 debian kernel: [    0.000000] BIOS-e820: [mem 0x00000000261ff000-0x00000000265dffff] usable\\r\\nNov 17 04:03:48 debian kernel: [    0.000000] BIOS-e820: [mem 0x00000000265e0000-0x00000000265fffff] reserved\\r\\nNov 17 04:03:48 debian kernel: [    0.000000] printk: bootconsole [earlyser0] enabled\\r\\nNov 17 04:03:48 debian kernel: [    0.000000] NX (Execute Disable) protection: active\\r\\nNov 17 04:03:48 debian kernel: [    0.000000] efi: EFI v2.70 by EDK II\\r\\nNov 17 04:03:48 debian kernel: [    0.000000] efi: TPMFinalLog=0x261f7000 ACPI=0x2617e000 ACPI 2.0=0x2617e014 SMBIOS=0x25fca000 MEMATTR=0x249a0018 \\r\\nNov 17 04:03:48 debian kernel: [    0.000000] secureboot: Secure boot disabled\\r\\nNov 17 04:03:48 debian kernel: [    0.000000] SMBIOS 2.4 present.\\r\\nNov 17 04:03:48 debian kernel: [    0.000000] DMI: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/09/2023\\r\\nNov 17 04:03:48 debian kernel: [    0.000000] Hypervisor detected: KVM\\r\\nNov 17 04:03:48 debian kernel: [    0.000000] kvm-clock: Using msrs 4b564d01 and 4b564d00\\r\\nNov 17 04:03:48 debian kernel: [    0.000000] kvm-clock: cpu 0, msr 11601001, primary cpu clock\\r\\nNov 17 04:03:48 debian kernel: [    0.000000] kvm-clock: using sched offset of 6574541159 cycles\\r\\nNov 17 04:03:48 debian kernel: [    0.000750] clocksource: kvm-clock: mask: 0xffffffffffffffff max_cycles: 0x1cd42e4dffb, max_idle_ns: 881590591483 ns\\r\\nNov 17 04:03:48 debian kernel: [    0.003137] tsc: Detected 2200.170 MHz processor\\r\\nNov 17 04:03:48 debian kernel: [    0.003934] e820: update [mem 0x00000000-0x00000fff] usable ==\\u003e reserved\\r\\nNov 17 04:03:48 debian kernel: [    0.003937] e820: remove [mem 0x000a0000-0x000fffff] usable\\r\\nNov 17 04:03:48 debian kernel: [    0.003944] last_pfn = 0x265e0 max_arch_pfn = 0x400000000\\r\\nNov 17 04:03:48 debian kernel: [    0.004733] MTRR default type: write-back\\r\\nNov 17 04:03:48 debian kernel: [    0.004734] MTRR fixed ranges enabled:\\r\\nNov 17 04:03:48 debian kernel: [    0.004736]   00000-9FFFF write-back\\r\\nNov 17 04:03:48 debian kernel: [    0.004737]   A0000-FFFFF uncachable\\r\\nNov 17 04:03:48 debian kernel: [    0.004738] MTRR variable ranges enabled:\\r\\nNov 17 04:03:48 debian kernel: [    0.004740]   0 base 000080000000 mask 3FFF80000000 uncachable\\r\\nNov 17 04:03:48 debian kernel: [    0.004741]   1 disabled\\r\\nNov 17 04:03:48 debian kernel: [    0.004741]   2 disabled\\r\\nNov 17 04:03:48 debian kernel: [    0.004742]   3 disabled\\r\\nNov 17 04:03:48 debian kernel: [    0.004743]   4 disabled\\r\\nNov 17 04:03:48 debian kernel: [    0.004743]   5 disabled\\r\\nNov 17 04:03:48 debian kernel: [    0.004744]   6 disabled\\r\\nNov 17 04:03:48 debian kernel: [    0.004744]   7 disabled\\r\\nNov 17 04:03:48 debian kernel: [    0.004756] x86/PAT: Configuration [0-7]: WB  WC  UC- UC  WB  WP  UC- WT  \\r\\nNov 17 04:03:48 debian kernel: [    0.006413] Using GB pages for direct mapping\\r\\nNov 17 04:03:48 debian kernel: [    0.007451] RAMDISK: [mem 0x2327f000-0x24000fff]\\r\\nNov 17 04:03:48 debian kernel: [    0.008104] ACPI: Early table checksum verification disabled\\r\\nNov 17 04:03:48 debian kernel: [    0.008840] ACPI: RSDP 0x000000002617E014 000024 (v02 Google)\\r\\nNov 17 04:03:48 debian kernel: [    0.009613] ACPI: XSDT 0x000000002617D0E8 00005C (v01 Google GOOGFACP 00000001      01000013)\\r\\nNov 17 04:03:48 debian kernel: [    0.010705] ACPI: FACP 0x0000000026178000 0000F4 (v02 Google GOOGFACP 00000001 GOOG 00000001)\\r\\nNov 17 04:03:48 debian kernel: [    0.011795] ACPI: DSDT 0x0000000026179000 001A64 (v01 Google GOOGDSDT 00000001 GOOG 00000001)\\r\\nNov 17 04:03:48 debian kernel: [    0.013148] ACPI: FACS 0x00000000261F2000 000040\\r\\nNov 17 04:03:48 debian kernel: [    0.013789] ACPI: SSDT 0x000000002617C000 000316 (v02 GOOGLE Tpm2Tabl 00001000 INTL 20211217)\\r\\nNov 17 04:03:48 debian kernel: [    0.015074] ACPI: TPM2 0x000000002617B000 000034 (v04 GOOGLE          00000001 GOOG 00000001)\\r\\nNov 17 04:03:48 debian kernel: [    0.016308] ACPI: SRAT 0x0000000026177000 0000B8 (v03 Google GOOGSRAT 00000001 GOOG 00000001)\\r\\nNov 17 04:03:48 debian kernel: [    0.017416] ACPI: APIC 0x0000000026176000 00006E (v05 Google GOOGAPIC 00000001 GOOG 00000001)\\r\\nNov 17 04:03:48 debian kernel: [    0.018848] ACPI: SSDT 0x0000000026175000 00091F (v01 Google GOOGSSDT 00000001 GOOG 00000001)\\r\\nNov 17 04:03:48 debian kernel: [    0.019981] ACPI: WAET 0x0000000026174000 000028 (v01 Google GOOGWAET 00000001 GOOG 00000001)\\r\\nNov 17 04:03:48 debian kernel: [    0.021071] ACPI: Reserving FACP table memory at [mem 0x26178000-0x261780f3]\\r\\nNov 17 04:03:48 debian kernel: [    0.021968] ACPI: Reserving DSDT table memory at [mem 0x26179000-0x2617aa63]\\r\\nNov 17 04:03:48 debian kernel: [    0.022868] ACPI: Reserving FACS table memory at [mem 0x261f2000-0x261f203f]\\r\\nNov 17 04:03:48 debian kernel: [    0.024195] ACPI: Reserving SSDT table memory at [mem 0x2617c000-0x2617c315]\\r\\nNov 17 04:03:48 debian kernel: [    0.025096] ACPI: Reserving TPM2 table memory at [mem 0x2617b000-0x2617b033]\\r\\nNov 17 04:03:48 debian kernel: [    0.026077] ACPI: Reserving SRAT table memory at [mem 0x26177000-0x261770b7]\\r\\nNov 17 04:03:48 debian kernel: [    0.026976] ACPI: Reserving APIC table memory at [mem 0x26176000-0x2617606d]\\r\\nNov 17 04:03:48 debian kernel: [    0.028016] ACPI: Reserving SSDT table memory at [mem 0x26175000-0x2617591e]\\r\\nNov 17 04:03:48 debian kernel: [    0.028910] ACPI: Reserving WAET table memory at [mem 0x26174000-0x26174027]\\r\\nNov 17 04:03:48 debian kernel: [    0.029888] ACPI: Local APIC address 0xfee00000\\r\\nNov 17 04:03:48 debian kernel: [    0.029920] SRAT: PXM 0 -\\u003e APIC 0x00 -\\u003e Node 0\\r\\nNov 17 04:03:48 debian kernel: [    0.030516] ACPI: SRAT: Node 0 PXM 0 [mem 0x00000000-0x0009ffff]\\r\\nNov 17 04:03:48 debian kernel: [    0.031283] ACPI: SRAT: Node 0 PXM 0 [mem 0x00100000-0x265fffff]\\r\\nNov 17 04:03:48 debian kernel: [    0.032201] NUMA: Node 0 [mem 0x00000000-0x0009ffff] + [mem 0x00100000-0x265dffff] -\\u003e [mem 0x00000000-0x265dffff]\\r\\nNov 17 04:03:48 debian kernel: [    0.034082] NODE_DATA(0) allocated [mem 0x26498000-0x264c1fff]\\r\\nNov 17 04:03:48 debian kernel: [    0.035210] Zone ranges:\\r\\nNov 17 04:03:48 debian kernel: [    0.035556]   DMA      [mem 0x0000000000001000-0x0000000000ffffff]\\r\\nNov 17 04:03:48 debian kernel: [    0.036346]   DMA32    [mem 0x0000000001000000-0x00000000265dffff]\\r\\nNov 17 04:03:48 debian kernel: [    0.037132]   Normal   empty\\r\\nNov 17 04:03:48 debian kernel: [    0.037500]   Device   empty\\r\\nNov 17 04:03:48 debian kernel: [    0.037865] Movable zone start for each node\\r\\nNov 17 04:03:48 debian kernel: [    0.038411] Early memory node ranges\\r\\nNov 17 04:03:48 debian kernel: [    0.038866]   node   0: [mem 0x0000000000001000-0x0000000000054fff]\\r\\nNov 17 04:03:48 debian kernel: [    0.039666]   node   0: [mem 0x0000000000060000-0x0000000000097fff]\\r\\nNov 17 04:03:48 debian kernel: [    0.040501]   node   0: [mem 0x0000000000100000-0x0000000025eecfff]\\r\\nNov 17 04:03:48 debian kernel: [    0.041319]   node   0: [mem 0x00000000261ff000-0x00000000265dffff]\\r\\nNov 17 04:03:48 debian kernel: [    0.042118] Initmem setup node 0 [mem 0x0000000000001000-0x00000000265dffff]\\r\\nNov 17 04:03:48 debian kernel: [    0.043037] On node 0 totalpages: 156250\\r\\nNov 17 04:03:48 debian kernel: [    0.043038]   DMA zone: 64 pages used for memmap\\r\\nNov 17 04:03:48 debian kernel: [    0.043039]   DMA zone: 3121 pages reserved\\r\\nNov 17 04:03:48 debian kernel: [    0.043040]   DMA zone: 3980 pages, LIFO batch:0\\r\\nNov 17 04:03:48 debian kernel: [    0.043042]   DMA32 zone: 2392 pages used for memmap\\r\\nNov 17 04:03:48 debian kernel: [    0.043042]   DMA32 zone: 152270 pages, LIFO batch:31\\r\\nNov 17 04:03:48 debian kernel: [    0.043516] On node 0, zone DMA: 1 pages in unavailable ranges\\r\\nNov 17 04:03:48 debian kernel: [    0.043518] On node 0, zone DMA: 11 pages in unavailable ranges\\r\\nNov 17 04:03:48 debian kernel: [    0.044348] On node 0, zone DMA: 104 pages in unavailable ranges\\r\\nNov 17 04:03:48 debian kernel: [    0.046817] On node 0, zone DMA32: 786 pages in unavailable ranges\\r\\nNov 17 04:03:48 debian kernel: [    0.047679] On node 0, zone DMA32: 6688 pages in unavailable ranges\\r\\nNov 17 04:03:48 debian kernel: [    0.048980] ACPI: PM-Timer IO Port: 0xb008\\r\\nNov 17 04:03:48 debian kernel: [    0.050430] ACPI: Local APIC address 0xfee00000\\r\\nNov 17 04:03:48 debian kernel: [    0.050442] ACPI: LAPIC_NMI (acpi_id[0xff] dfl dfl lint[0x1])\\r\\nNov 17 04:03:48 debian kernel: [    0.051354] IOAPIC[0]: apic_id 0, version 17, address 0xfec00000, GSI 0-23\\r\\nNov 17 04:03:48 debian kernel: [    0.052270] ACPI: INT_SRC_OVR (bus 0 bus_irq 5 global_irq 5 high level)\\r\\nNov 17 04:03:48 debian kernel: [    0.053112] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)\\r\\nNov 17 04:03:48 debian kernel: [    0.054025] ACPI: INT_SRC_OVR (bus 0 bus_irq 10 global_irq 10 high level)\\r\\nNov 17 04:03:48 debian kernel: [    0.054888] ACPI: INT_SRC_OVR (bus 0 bus_irq 11 global_irq 11 high level)\\r\\nNov 17 04:03:48 debian kernel: [    0.055759] ACPI: IRQ5 used by override.\\r\\nNov 17 04:03:48 debian kernel: [    0.055760] ACPI: IRQ9 used by override.\\r\\nNov 17 04:03:48 debian kernel: [    0.055761] ACPI: IRQ10 used by override.\\r\\nNov 17 04:03:48 debian kernel: [    0.055762] ACPI: IRQ11 used by override.\\r\\nNov 17 04:03:48 debian kernel: [    0.055764] Using ACPI (MADT) for SMP configuration information\\r\\nNov 17 04:03:48 debian kernel: [    0.056581] smpboot: Allowing 1 CPUs, 0 hotplug CPUs\\r\\nNov 17 04:03:48 debian kernel: [    0.057278] PM: hibernation: Registered nosave memory: [mem 0x00000000-0x00000fff]\\r\\nNov 17 04:03:48 debian kernel: [    0.058289] PM: hibernation: Registered nosave memory: [mem 0x00055000-0x0005ffff]\\r\\nNov 17 04:03:48 debian kernel: [    0.059254] PM: hibernation: Registered nosave memory: [mem 0x00098000-0x0009ffff]\\r\\nNov 17 04:03:48 debian kernel: [    0.060218] PM: hibernation: Registered nosave memory: [mem 0x000a0000-0x000fffff]\\r\\nNov 17 04:03:48 debian kernel: [    0.061186] PM: hibernation: Registered nosave memory: [mem 0x25eed000-0x25fecfff]\\r\\nNov 17 04:03:48 debian kernel: [    0.062153] PM: hibernation: Registered nosave memory: [mem 0x25fed000-0x260ecfff]\\r\\nNov 17 04:03:48 debian kernel: [    0.063119] PM: hibernation: Registered nosave memory: [mem 0x260ed000-0x2616cfff]\\r\\nNov 17 04:03:48 debian kernel: [    0.064086] PM: hibernation: Registered nosave memory: [mem 0x2616d000-0x2617efff]\\r\\nNov 17 04:03:48 debian kernel: [    0.065051] PM: hibernation: Registered nosave memory: [mem 0x2617f000-0x261fefff]\\r\\nNov 17 04:03:48 debian kernel: [    0.066343] [mem 0x26600000-0xffffffff] available for PCI devices\\r\\nNov 17 04:03:48 debian kernel: [    0.067140] Booting paravirtualized kernel on KVM\\r\\nNov 17 04:03:48 debian kernel: [    0.067740] clocksource: refined-jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645519600211568 ns\\r\\nNov 17 04:03:48 debian kernel: [    0.073455] setup_percpu: NR_CPUS:8192 nr_cpumask_bits:1 nr_cpu_ids:1 nr_node_ids:1\\r\\nNov 17 04:03:48 debian kernel: [    0.075118] percpu: Embedded 63 pages/cpu s221184 r8192 d28672 u2097152\\r\\nNov 17 04:03:48 debian kernel: [    0.076040] pcpu-alloc: s221184 r8192 d28672 u2097152 alloc=1*2097152\\r\\nNov 17 04:03:48 debian kernel: [    0.076042] pcpu-alloc: [0] 0 \\r\\nNov 17 04:03:48 debian kernel: [    0.076074] kvm-guest: PV spinlocks disabled, single CPU\\r\\nNov 17 04:03:48 debian kernel: [    0.076805] Built 1 zonelists, mobility grouping on.  Total pages: 150673\\r\\nNov 17 04:03:48 debian kernel: [    0.077803] Policy zone: DMA32\\r\\nNov 17 04:03:48 debian kernel: [    0.078192] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-5.10.0-26-cloud-amd64 root=UUID=e6fe3fcb-2478-4e7e-8072-4ced46dceac5 ro console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0 intel_iommu=off\\r\\nNov 17 04:03:48 debian kernel: [    0.080817] DMAR: IOMMU disabled\\r\\nNov 17 04:03:48 debian kernel: [    0.081474] Dentry cache hash table entries: 131072 (order: 8, 1048576 bytes, linear)\\r\\nNov 17 04:03:48 debian kernel: [    0.082690] Inode-cache hash table entries: 65536 (order: 7, 524288 bytes, linear)\\r\\nNov 17 04:03:48 debian kernel: [    0.083743] mem auto-init: stack:off, heap alloc:on, heap free:off\\r\\nNov 17 04:03:48 debian kernel: [    0.087100] Memory: 233576K/625000K available (12296K kernel code, 2552K rwdata, 6956K rodata, 2468K init, 3724K bss, 103652K reserved, 0K cma-reserved)\\r\\nNov 17 04:03:48 debian kernel: [    0.089122] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1\\r\\nNov 17 04:03:48 debian kernel: [    0.090012] Kernel/User page tables isolation: enabled\\r\\nNov 17 04:03:48 debian kernel: [    0.091151] ftrace: allocating 33918 entries in 133 pages\\r\\nNov 17 04:03:48 debian kernel: [    0.111503] ftrace: allocated 133 pages with 3 groups\\r\\nNov 17 04:03:48 debian kernel: [    0.112765] rcu: Hierarchical RCU implementation.\\r\\nNov 17 04:03:48 debian kernel: [    0.113378] rcu: \\tRCU restricting CPUs from NR_CPUS=8192 to nr_cpu_ids=1.\\r\\nNov 17 04:03:48 debian kernel: [    0.114278] \\tRude variant of Tasks RCU enabled.\\r\\nNov 17 04:03:48 debian kernel: [    0.114855] \\tTracing variant of Tasks RCU enabled.\\r\\nNov 17 04:03:48 debian kernel: [    0.115469] rcu: RCU calculated value of scheduler-enlistment delay is 25 jiffies.\\r\\nNov 17 04:03:48 debian kernel: [    0.116433] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=1\\r\\nNov 17 04:03:48 debian kernel: [    0.121697] NR_IRQS: 524544, nr_irqs: 256, preallocated irqs: 16\\r\\nNov 17 04:03:48 debian kernel: [    0.122810] random: crng init done\\r\\nNov 17 04:03:48 debian kernel: [    0.123274] Console: colour dummy device 80x25\\r\\nNov 17 04:03:48 debian kernel: [    0.124053] printk: console [tty0] enabled\\r\\nNov 17 04:03:48 debian kernel: [    0.124835] printk: console [ttyS0] enabled\\r\\nNov 17 04:03:48 debian kernel: [    0.126039] printk: bootconsole [earlyser0] disabled\\r\\nNov 17 04:03:48 debian kernel: [    0.127441] ACPI: Core revision 20200925\\r\\nNov 17 04:03:48 debian kernel: [    0.128098] APIC: Switch to symmetric I/O mode setup\\r\\nNov 17 04:03:48 debian kernel: [    0.129244] x2apic enabled\\r\\nNov 17 04:03:48 debian kernel: [    0.131960] Switched APIC routing to physical x2apic.\\r\\nNov 17 04:03:48 debian kernel: [    0.136632] ..TIMER: vector=0x30 apic1=0 pin1=0 apic2=-1 pin2=-1\\r\\nNov 17 04:03:48 debian kernel: [    0.137712] clocksource: tsc-early: mask: 0xffffffffffffffff max_cycles: 0x1fb6d394f62, max_idle_ns: 440795316813 ns\\r\\nNov 17 04:03:48 debian kernel: [    0.139157] Calibrating delay loop (skipped) preset value.. 4400.34 BogoMIPS (lpj=8800680)\\r\\nNov 17 04:03:48 debian kernel: [    0.143263] Last level iTLB entries: 4KB 64, 2MB 8, 4MB 8\\r\\nNov 17 04:03:48 debian kernel: [    0.144056] Last level dTLB entries: 4KB 64, 2MB 0, 4MB 0, 1GB 4\\r\\nNov 17 04:03:48 debian kernel: [    0.144991] Spectre V1 : Mitigation: usercopy/swapgs barriers and __user pointer sanitization\\r\\nNov 17 04:03:48 debian kernel: [    0.146142] Spectre V2 : Mitigation: IBRS\\r\\nNov 17 04:03:48 debian kernel: [    0.146695] Spectre V2 : Spectre v2 / SpectreRSB mitigation: Filling RSB on context switch\\r\\nNov 17 04:03:48 debian kernel: [    0.147156] Spectre V2 : Spectre v2 / SpectreRSB : Filling RSB on VMEXIT\\r\\nNov 17 04:03:48 debian kernel: [    0.148095] RETBleed: Mitigation: IBRS\\r\\nNov 17 04:03:48 debian kernel: [    0.148658] Spectre V2 : mitigation: Enabling conditional Indirect Branch Prediction Barrier\\r\\nNov 17 04:03:48 debian kernel: [    0.149882] Speculative Store Bypass: Mitigation: Speculative Store Bypass disabled via prctl and seccomp\\r\\nNov 17 04:03:48 debian kernel: [    0.151163] MDS: Mitigation: Clear CPU buffers\\r\\nNov 17 04:03:48 debian kernel: [    0.151804] TAA: Mitigation: Clear CPU buffers\\r\\nNov 17 04:03:48 debian kernel: [    0.152445] MMIO Stale Data: Vulnerable: Clear CPU buffers attempted, no microcode\\r\\nNov 17 04:03:48 debian kernel: [    0.153624] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'\\r\\nNov 17 04:03:48 debian kernel: [    0.155158] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'\\r\\nNov 17 04:03:48 debian kernel: [    0.156050] x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers'\\r\\nNov 17 04:03:48 debian kernel: [    0.156905] x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]:  256\\r\\nNov 17 04:03:48 debian kernel: [    0.157851] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.\\r\\nNov 17 04:03:48 debian kernel: [    0.177428] Freeing SMP alternatives memory: 32K\\r\\nNov 17 04:03:48 debian kernel: [    0.179890] pid_max: default: 32768 minimum: 301\\r\\nNov 17 04:03:48 debian kernel: [    0.188030] LSM: Security Framework initializing\\r\\nNov 17 04:03:48 debian kernel: [    0.188748] Yama: disabled by default; enable with sysctl kernel.yama.*\\r\\nNov 17 04:03:48 debian kernel: [    0.189713] AppArmor: AppArmor initialized\\r\\nNov 17 04:03:48 debian kernel: [    0.190294] TOMOYO Linux initialized\\r\\nNov 17 04:03:48 debian kernel: [    0.190806] Mount-cache hash table entries: 2048 (order: 2, 16384 bytes, linear)\\r\\nNov 17 04:03:48 debian kernel: [    0.191158] Mountpoint-cache hash table entries: 2048 (order: 2, 16384 bytes, linear)\\r\\nNov 17 04:03:48 debian kernel: [    0.301178] smpboot: CPU0: Intel(R) Xeon(R) CPU @ 2.20GHz (family: 0x6, model: 0x4f, stepping: 0x0)\\r\\nNov 17 04:03:48 debian kernel: [    0.303030] Performance Events: unsupported p6 CPU model 79 no PMU driver, software events only.\\r\\nNov 17 04:03:48 debian kernel: [    0.303154] rcu: Hierarchical SRCU implementation.\\r\\nNov 17 04:03:48 debian kernel: [    0.303232] NMI watchdog: Perf NMI watchdog permanently disabled\\r\\nNov 17 04:03:48 debian kernel: [    0.304156] smp: Bringing up secondary CPUs ...\\r\\nNov 17 04:03:48 debian kernel: [    0.304775] smp: Brought up 1 node, 1 CPU\\r\\nNov 17 04:03:48 debian kernel: [    0.305377] smpboot: Max logical packages: 1\\r\\nNov 17 04:03:48 debian kernel: [    0.305973] smpboot: Total of 1 processors activated (4400.34 BogoMIPS)\\r\\nNov 17 04:03:48 debian kernel: [    0.308500] node 0 deferred pages initialised in 4ms\\r\\nNov 17 04:03:48 debian kernel: [    0.309336] devtmpfs: initialized\\r\\nNov 17 04:03:48 debian kernel: [    0.309853] x86/mm: Memory block size: 128MB\\r\\nNov 17 04:03:48 debian kernel: [    0.310586] PM: Registering ACPI NVS region [mem 0x2617f000-0x261fefff] (524288 bytes)\\r\\nNov 17 04:03:48 debian kernel: [    0.311201] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns\\r\\nNov 17 04:03:48 debian kernel: [    0.312491] futex hash table entries: 256 (order: 2, 16384 bytes, linear)\\r\\nNov 17 04:03:48 debian kernel: [    0.313553] NET: Registered protocol family 16\\r\\nNov 17 04:03:48 debian kernel: [    0.314323] DMA: preallocated 128 KiB GFP_KERNEL pool for atomic allocations\\r\\nNov 17 04:03:48 debian kernel: [    0.315262] DMA: preallocated 128 KiB GFP_KERNEL|GFP_DMA pool for atomic allocations\\r\\nNov 17 04:03:48 debian kernel: [    0.316351] DMA: preallocated 128 KiB GFP_KERNEL|GFP_DMA32 pool for atomic allocations\\r\\nNov 17 04:03:48 debian kernel: [    0.317444] aud[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mUser Login Management\\u001b[0m.\\r\\nit: initializing netlink subsys (disabled)\\r\\nNov 17 04:03:48 debian kernel: [    0.318358] thermal_sys: Registered thermal governor 'fair_share'\\r\\nNov 17 04:03:48 debian kernel: [    0.318358] thermal_sys: Registered thermal governor 'bang_bang'\\r\\nNov 17 04:03:48 debian kernel: [    0.319159] thermal_sys: Registered thermal governor 'step_wise'\\r\\nNov 17 04:03:48 debian kernel: [    0.319988] thermal_sys: Registered thermal governor 'user_space'\\r\\nNov 17 04:03:48 debian kernel: [    0.320815] thermal_sys: Registered thermal governor 'power_allocator'\\r\\nNov 17 04:03:48 debian kernel: [    0.321635] cpuidle: using governor ladder\\r\\nNov 17 04:03:48 debian kernel: [    0.323161] audit: type=2000 audit(1700193824.940:1): state=initialized audit_enabled=0 res=1\\r\\nNov 17 04:03:48 debian kernel: [    0.324328] cpuidle: using governor menu\\r\\nNov 17 04:03:48 debian kernel: [    0.324906] ACPI: bus type PCI registered\\r\\nNov 17 04:03:48 debian kernel: [    0.325460] acpiphp: ACPI Hot Plug PCI Controller Driver version: 0.5\\r\\nNov 17 04:03:48 debian kernel: [    0.326421] PCI: Using configuration type 1 for base access\\r\\nNov 17 04:03:48 debian kernel: [    0.327802] Kprobes globally optimized\\r\\nNov 17 04:03:48 debian kernel: [    0.328452] HugeTLB registered 1.00 GiB page size, pre-allocated 0 pages\\r\\nNov 17 04:03:48 debian kernel: [    0.329351] HugeTLB registered 2.00 MiB page size, pre-allocated 0 pages\\r\\nNov 17 04:03:48 debian kernel: [    0.457287] ACPI: Added _OSI(Module Device)\\r\\nNov 17 04:03:48 debian kernel: [    0.457914] ACPI: Added _OSI(Processor Device)\\r\\nNov 17 04:03:48 debian kernel: [    0.458520] ACPI: Added _OSI(3.0 _SCP Extensions)\\r\\nNov 17 04:03:48 debian kernel: [    0.459158] ACPI: Added _OSI(Processor Aggregator Device)\\r\\nNov 17 04:03:48 debian kernel: [    0.460010] ACPI: Added _OSI(Linux-Dell-Video)\\r\\nNov 17 04:03:48 debian kernel: [    0.460629] ACPI: Added _OSI(Linux-Lenovo-NV-HDMI-Audio)\\r\\nNov 17 04:03:48 debian kernel: [    0.461348] ACPI: Added _OSI(Linux-HPI-Hybrid-Graphics)\\r\\nNov 17 04:03:48 debian kernel: [    0.462989] ACPI: 3 ACPI AML tables successfully acquired and loaded\\r\\nNov 17 04:03:48 debian kernel: [    0.464105] ACPI: Interpreter enabled\\r\\nNov 17 04:03:48 debian kernel: [    0.464646] ACPI: (supports S0 S3 S4 S5)\\r\\nNov 17 04:03:48 debian kernel: [    0.465207] ACPI: Using IOAPIC for interrupt routing\\r\\nNov 17 04:03:48 debian kernel: [    0.465937] PCI: Using host bridge windows from ACPI; if necessary, use \\\"pci=nocrs\\\" and report a bug\\r\\nNov 17 04:03:48 debian kernel: [    0.467351] ACPI: Enabled 16 GPEs in block 00 to 0F\\r\\nNov 17 04:03:48 debian kernel: [    0.469893] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff])\\r\\nNov 17 04:03:48 debian kernel: [    0.471179] acpi PNP0A03:00: _OSC: OS supports [ASPM ClockPM Segments MSI HPX-Type3]\\r\\nNov 17 04:03:48 debian kernel: [    0.472279] acpi PNP0A03:00: fail to add MMCONFIG information, can't access extended PCI configuration space under this bridge.\\r\\nNov 17 04:03:48 debian kernel: [    0.474395] PCI host bridge to bus 0000:00\\r\\nNov 17 04:03:48 debian kernel: [    0.475161] pci_bus 0000:00: root bus resource [io  0x0000-0x0cf7 window]\\r\\nNov 17 04:03:48 debian kernel: [    0.476080] pci_bus 0000:00: root bus resource [io  0x0d00-0xffff window]\\r\\nNov 17 04:03:48 debian kernel: [    0.476988] pci_bus 0000:00: root bus resource [mem 0x000a0000-0x000bffff window]\\r\\nNov 17 04:03:48 debian kernel: [    0.478071] pci_bus 0000:00: root bus resource [mem 0x80000000-0xfebfefff window]\\r\\nNov 17 04:03:48 debian kernel: [    0.479156] pci_bus 0000:00: root bus resource [bus 00-ff]\\r\\nNov 17 04:03:48 debian kernel: [    0.479955] pci 0000:00:00.0: [8086:1237] type 00 class 0x060000\\r\\nNov 17 04:03:48 debian kernel: [    0.483516] pci 0000:00:01.0: [8086:7110] type 00 class 0x060100\\r\\nNov 17 04:03:48 debian kernel: [    0.497205] pci 0000:00:01.3: [8086:7113] type 00 class 0x068000\\r\\nNov 17 04:03:48 debian kernel: [    0.510756] pci 0000:00:01.3: quirk: [io  0xb000-0xb03f] claimed by PIIX4 ACPI\\r\\nNov 17 04:03:48 debian kernel: [    0.511429] pci 0000:00:03.0: [1af4:1004] type 00 class 0x000000\\r\\nNov 17 04:03:48 debian kernel: [    0.518345] pci 0000:00:03.0: reg 0x10: [io  0xc040-0xc07f]\\r\\nNov 17 04:03:48 debian kernel: [    0.523157] pci 0000:00:03.0: reg 0x14: [mem 0x80000000-0x8000007f]\\r\\nNov 17 04:03:48 debian kernel: [    0.534975] pci 0000:00:04.0: [1af4:1000] type 00 class 0x020000\\r\\nNov 17 04:03:48 debian kernel: [    0.540789] pci 0000:00:04.0: reg 0x10: [io  0xc000-0xc03f]\\r\\nNov 17 04:03:48 debian kernel: [    0.544833] pci 0000:00:04.0: reg 0x14: [mem 0x80002000-0x8000203f]\\r\\nNov 17 04:03:48 debian kernel: [    0.555412] pci 0000:00:05.0: [1af4:1005] type 00 class 0x00ff00\\r\\nNov 17 04:03:48 debian kernel: [    0.560805] pci 0000:00:05.0: reg 0x10: [io  0xc080-0xc09f]\\r\\nNov 17 04:03:48 debian kernel: [    0.564625] pci 0000:00:05.0: reg 0x14: [mem 0x80001000-0x8000103f]\\r\\nNov 17 04:03:48 debian kernel: [    0.575564] ACPI: PCI Interrupt Link [LNKA] (IRQs 5 *10 11)\\r\\nNov 17 04:03:48 debian kernel: [    0.577286] ACPI: PCI Interrupt Link [LNKB] (IRQs 5 *10 11)\\r\\nNov 17 04:03:48 debian kernel: [    0.578886] ACPI: PCI Interrupt Link [LNKC] (IRQs 5 10 *11)\\r\\nNov 17 04:03:48 debian kernel: [    0.579915] ACPI: PCI Interrupt Link [LNKD] (IRQs 5 10 *11)\\r\\nNov 17 04:03:48 debian kernel: [    0.583168] ACPI: PCI Interrupt Link [LNKS] (IRQs *9)\\r\\nNov 17 04:03:48 debian kernel: [    0.584105] iommu: Default domain type: Translated \\r\\nNov 17 04:03:48 debian kernel: [    0.584854] vgaarb: loaded\\r\\nNov 17 04:03:48 debian kernel: [    0.585334] Registered efivars operations\\r\\nNov 17 04:03:48 debian kernel: [    0.586084] NetLabel: Initializing\\r\\nNov 17 04:03:48 debian kernel: [    0.587156] NetLabel:  domain hash size = 128\\r\\nNov 17 04:03:48 debian kernel: [    0.587827] NetLabel:  protocols = UNLABELED CIPSOv4 CALIPSO\\r\\nNov 17 04:03:48 debian kernel: [    0.588621] NetLabel:  unlabeled traffic allowed by default\\r\\nNov 17 04:03:48 debian kernel: [    0.589415] PCI: Using ACPI for IRQ routing\\r\\nNov 17 04:03:48 debian kernel: [    0.590046] PCI: pci_cache_line_size set to 64 bytes\\r\\nNov 17 04:03:48 debian kernel: [    0.590141] e820: reserve RAM buffer [mem 0x00055000-0x0005ffff]\\r\\nNov 17 04:03:48 debian kernel: [    0.590142] e820: reserve RAM buffer [mem 0x00098000-0x0009ffff]\\r\\nNov 17 04:03:48 debian kernel: [    0.590143] e820: reserve RAM buffer [mem 0x25eed000-0x27ffffff]\\r\\nNov 17 04:03:48 debian kernel: [    0.590144] e820: reserve RAM buffer [mem 0x265e0000-0x27ffffff]\\r\\nNov 17 04:03:48 debian kernel: [    0.590183] clocksource: Switched to clocksource kvm-clock\\r\\nNov 17 04:03:48 debian kernel: [    0.599324] VFS: Disk quotas dquot_6.6.0\\r\\nNov 17 04:03:48 debian kernel: [    0.599916] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)\\r\\nNov 17 04:03:48 debian kernel: [    0.601024] AppArmor: AppArmor Filesystem Enabled\\r\\nNov 17 04:03:48 debian kernel: [    0.601786] pnp: PnP ACPI init\\r\\nNov 17 04:03:48 debian kernel: [    0.602302] pnp 00:00: Plug and Play ACPI device, IDs PNP0b00 (active)\\r\\nNov 17 04:03:48 debian kernel: [    0.602352] pnp 00:01: Plug and Play ACPI device, IDs PNP0303 (active)\\r\\nNov 17 04:03:48 debian kernel: [    0.602384] pnp 00:02: Plug and Play ACPI device, IDs PNP0f13 (active)\\r\\nNov 17 04:03:48 debian kernel: [    0.602421] pnp 00:03: Plug and Play ACPI device, IDs PNP0501 (active)\\r\\nNov 17 04:03:48 debian kernel: [    0.602449] pnp 00:04: Plug and Play ACPI device, IDs PNP0501 (active)\\r\\nNov 17 04:03:48 debian kernel: [    0.602480] pnp 00:05: Plug and Play ACPI device, IDs PNP0501 (active)\\r\\nNov 17 04:03:48 debian kernel: [    0.602511] pnp 00:06: Plug and Play ACPI device, IDs PNP0501 (active)\\r\\nNov 17 04:03:48 debian kernel: [    0.602662] pnp: PnP ACPI: found 7 devices\\r\\nNov 17 04:03:48 debian kernel: [    0.608541] clocksource: acpi_pm: mask: 0xffffff max_cycles: 0xffffff, max_idle_ns: 2085701024 ns\\r\\nNov 17 04:03:48 debian kernel: [    0.609795] NET: Registered protocol family 2\\r\\nNov 17 04:03:48 debian kernel: [    0.610436] IP idents hash table entries: 16384 (order: 5, 131072 bytes, linear)\\r\\nNov 17 04:03:48 debian kernel: [    0.612665] tcp_listen_portaddr_hash hash table entries: 512 (order: 1, 8192 bytes, linear)\\r\\nNov 17 04:03:48 debian kernel: [    0.613850] TCP established hash table entries: 8192 (order: 4, 65536 bytes, linear)\\r\\nNov 17 04:03:48 debian kernel: [    0.614940] TCP bind hash table entries: 8192 (order: 5, 131072 bytes, linear)\\r\\nNov 17 04:03:48 debian kernel: [    0.615983] TCP: Hash tables configured (established 8192 bind 8192)\\r\\nNov 17 04:03:48 debian kernel: [    0.616945] UDP hash table entries: 512 (order: 2, 16384 bytes, linear)\\r\\nNov 17 04:03:48 debian kernel: [    0.617844] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes, linear)\\r\\nNov 17 04:03:48 debian kernel: [    0.618844] NET: Registered protocol family 1\\r\\nNov 17 04:03:48 debian kernel: [    0.619629] NET: Registered protocol family 44\\r\\nNov 17 04:03:48 debian kernel: [    0.620246] pci_bus 0000:00: resource 4 [io  0x0000-0x0cf7 window]\\r\\nNov 17 04:03:48 debian kernel: [    0.621100] pci_bus 0000:00: resource 5 [io  0x0d00-0xffff window]\\r\\nNov 17 04:03:48 debian kernel: [    0.621946] pci_bus 0000:00: resource 6 [mem 0x000a0000-0x000bffff window]\\r\\nNov 17 04:03:48 debian kernel: [    0.622980] pci_bus 0000:00: resource 7 [mem 0x80000000-0xfebfefff window]\\r\\nNov 17 04:03:48 debian kernel: [    0.624039] pci 0000:00:00.0: Limiting direct PCI/PCI transfers\\r\\nNov 17 04:03:48 debian kernel: [    0.624898] PCI: CLS 0 bytes, default 64\\r\\nNov 17 04:03:48 debian kernel: [    0.625515] Trying to unpack rootfs image as initramfs...\\r\\nNov 17 04:03:48 debian kernel: [    0.838263] Freeing initrd memory: 13832K\\r\\nNov 17 04:03:48 debian kernel: [    0.838913] clocksource: tsc: mask: 0xffffffffffffffff max_cycles: 0x1fb6d394f62, max_idle_ns: 440795316813 ns\\r\\nNov 17 04:03:48 debian kernel: [    0.840271] clocksource: Switched to clocksource tsc\\r\\nNov 17 04:03:48 debian kernel: [    0.841223] Initialise system trusted keyrings\\r\\nNov 17 04:03:48 debian kernel: [    0.841875] Key type blacklist registered\\r\\nNov 17 04:03:48 debian kernel: [    0.842505] workingset: timestamp_bits=36 max_order=18 bucket_order=0\\r\\nNov 17 04:03:48 debian kernel: [    0.844293] zbud: loaded\\r\\nNov 17 04:03:48 debian kernel: [    0.844973] Key type asymmetric registered\\r\\nNov 17 04:03:48 debian kernel: [    0.845539] Asymmetric key parser 'x509' registered\\r\\nNov 17 04:03:48 debian kernel: [    0.846222] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 252)\\r\\nNov 17 04:03:48 debian kernel: [    0.847278] io scheduler mq-deadline registered\\r\\nNov 17 04:03:48 debian kernel: [    0.848485] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled\\r\\nNov 17 04:03:48 debian kernel: [    0.849463] 00:03: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A\\r\\nNov 17 04:03:48 debian kernel: [    0.850740] 00:04: ttyS1 at I/O 0x2f8 (irq = 3, base_baud = 115200) is a 16550A\\r\\nNov 17 04:03:48 debian kernel: [    0.851965] 00:05: ttyS2 at I/O 0x3e8 (irq = 6, base_baud = 115200) is a 16550A\\r\\nNov 17 04:03:48 debian kernel: [    0.853164] 00:06: ttyS3 at I/O 0x2e8 (irq = 7, base_baud = 115200) is a 16550A\\r\\nNov 17 04:03:48 debian kernel: [    0.854467] i8042: PNP: PS/2 Controller [PNP0303:KBD,PNP0f13:MOU] at 0x60,0x64 irq 1,12\\r\\nNov 17 04:03:48 debian kernel: [    0.855734] i8042: Warning: Keylock active\\r\\nNov 17 04:03:48 debian kernel: [    0.857698] serio: i8042 KBD port at 0x60,0x64 irq 1\\r\\nNov 17 04:03:48 debian kernel: [    0.858391] serio: i8042 AUX port at 0x60,0x64 irq 12\\r\\nNov 17 04:03:48 debian kernel: [    0.859206] rtc_cmos 00:00: RTC can wake from S4\\r\\nNov 17 04:03:48 debian kernel: [    0.860615] rtc_cmos 00:00: registered as rtc0\\r\\nNov 17 04:03:48 debian kernel: [    0.861428] rtc_cmos 00:00: setting system clock to 2023-11-17T04:03:45 UTC (1700193825)\\r\\nNov 17 04:03:48 debian kernel: [    0.862619] rtc_cmos 00:00: alarms up to one day, 114 bytes nvram\\r\\nNov 17 04:03:48 debian kernel: [    0.863495] intel_pstate: CPU model not supported\\r\\nNov 17 04:03:48 debian kernel: [    0.864350] NET: Registered protocol family 10\\r\\nNov 17 04:03:48 debian kernel: [    0.872101] Segment Routing with IPv6\\r\\nNov 17 04:03:48 debian kernel: [    0.872671] mip6: Mobile IPv6\\r\\nNov 17 04:03:48 debian kernel: [    0.873091] NET: Registered protocol family 17\\r\\nNov 17 04:03:48 debian kernel: [    0.873814] IPI shorthand broadcast: enabled\\r\\nNov 17 04:03:48 debian kernel: [    0.874454] sched_clock: Marking stable (864288966, 8353340)-\\u003e(874836097, -2193791)\\r\\nNov 17 04:03:48 debian kernel: [    0.875588] registered taskstats version 1\\r\\nNov 17 04:03:48 debian kernel: [    0.876158] Loading compiled-in X.509 certificates\\r\\nNov 17 04:03:48 debian kernel: [    0.908877] Loaded X.509 cert 'Debian Secure Boot CA: 6ccece7e4c6c0d1f6149f3dd27dfcc5cbb419ea1'\\r\\nNov 17 04:03:48 debian kernel: [    0.910478] Loaded X.509 cert 'Debian Secure Boot Signer 2022 - linux: 14011249c2675ea8e5148542202005810584b25f'\\r\\nNov 17 04:03:48 debian kernel: [    0.911923] Key type .fscrypt registered\\r\\nNov 17 04:03:48 debian kernel: [    0.912517] Key type fscrypt-provisioning registered\\r\\nNov 17 04:03:48 debian kernel: [    0.913253] AppArmor: AppArmor sha1 policy hashing enabled\\r\\nNov 17 04:03:48 debian kernel: [    0.915720] Freeing unused decrypted memory: 2036K\\r\\nNov 17 04:03:48 debian kernel: [    0.917013] Freeing unused kernel image (initmem) memory: 2468K\\r\\nNov 17 04:03:48 debian kernel: [    [\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mRemove Stale Onli…ext4 Metadata Check Snapshots\\u001b[0m.\\r\\n0.924384] Write protecting the kernel read-only data: 22528k\\r\\nNov 17 04:03:48 debian kernel: [    0.925931] Freeing unused kernel image (text/rodata gap) memory: 2036K\\r\\nNov 17 04:03:48 debian kernel: [    0.927194] Freeing unused kernel image (rodata/data gap) memory: 1236K\\r\\nNov 17 04:03:48 debian kernel: [    0.928659] x86/mm: Checked W+X mappings: passed, no W+X pages found.\\r\\nNov 17 04:03:48 debian kernel: [    0.929536] x86/mm: Checking user space page tables\\r\\nNov 17 04:03:48 debian kernel: [    0.930357] x86/mm: Checked W+X mappings: passed, no W+X pages found.\\r\\nNov 17 04:03:48 debian kernel: [    0.931248] Run /init as init process\\r\\nNov 17 04:03:48 debian kernel: [    0.931826]   with arguments:\\r\\nNov 17 04:03:48 debian kernel: [    0.931827]     /init\\r\\nNov 17 04:03:48 debian kernel: [    0.931827]   with environment:\\r\\nNov 17 04:03:48 debian kernel: [    0.931828]     HOME=/\\r\\nNov 17 04:03:48 debian kernel: [    0.931829]     TERM=linux\\r\\nNov 17 04:03:48 debian kernel: [    0.931829]     BOOT_IMAGE=/boot/vmlinuz-5.10.0-26-cloud-amd64\\r\\nNov 17 04:03:48 debian kernel: [    0.931830]     intel_iommu=off\\r\\nNov 17 04:03:48 debian kernel: [    0.999458] PCI Interrupt Link [LNKC] enabled at IRQ 11\\r\\nNov 17 04:03:48 debian kernel: [    1.000238] virtio-pci 0000:00:03.0: virtio_pci: leaving for legacy driver\\r\\nNov 17 04:03:48 debian kernel: [    1.026601] PCI Interrupt Link [LNKD] enabled at IRQ 10\\r\\nNov 17 04:03:48 debian kernel: [    1.027444] virtio-pci 0000:00:04.0: virtio_pci: leaving for legacy driver\\r\\nNov 17 04:03:48 debian kernel: [    1.031920] PCI Interrupt Link [LNKA] enabled at IRQ 10\\r\\nNov 17 04:03:48 debian kernel: [    1.032814] virtio-pci 0000:00:05.0: virtio_pci: leaving for legacy driver\\r\\nNov 17 04:03:48 debian kernel: [    1.054934] SCSI subsystem initialized\\r\\nNov 17 04:03:48 debian kernel: [    1.061158] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input0\\r\\nNov 17 04:03:48 debian kernel: [    1.075892] virtio_net virtio1 ens4: renamed from eth0\\r\\nNov 17 04:03:48 debian kernel: [    1.085896] scsi host0: Virtio SCSI HBA\\r\\nNov 17 04:03:48 debian kernel: [    1.091740] scsi 0:0:1:0: Direct-Access     Google   PersistentDisk   1    PQ: 0 ANSI: 6\\r\\nNov 17 04:03:48 debian kernel: [    1.111855] sd 0:0:1:0: [sda] 20971520 512-byte logical blocks: (10.7 GB/10.0 GiB)\\r\\nNov 17 04:03:48 debian kernel: [    1.112925] sd 0:0:1:0: [sda] 4096-byte physical blocks\\r\\nNov 17 04:03:48 debian kernel: [    1.113940] sd 0:0:1:0: [sda] Write Protect is off\\r\\nNov 17 04:03:48 debian kernel: [    1.114612] sd 0:0:1:0: [sda] Mode Sense: 1f 00 00 08\\r\\nNov 17 04:03:48 debian kernel: [    1.114657] sd 0:0:1:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA\\r\\nNov 17 04:03:48 debian kernel: [    1.118523]  sda: sda1 sda14 sda15\\r\\nNov 17 04:03:48 debian kernel: [    1.126791] sd 0:0:1:0: [sda] Attached SCSI disk\\r\\nNov 17 04:03:48 debian kernel: [    1.176849]  sda: sda1 sda14 sda15\\r\\nNov 17 04:03:48 debian kernel: [    1.254250] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null)\\r\\nNov 17 04:03:48 debian kernel: [    1.277595] Not activating Mandatory Access Control as /sbin/tomoyo-init does not exist.\\r\\nNov 17 04:03:48 debian kernel: [    2.283707] fuse: init (API version 7.32)\\r\\nNov 17 04:03:48 debian kernel: [    2.348486] EXT4-fs (sda1): re-mounted. Opts: discard,errors=remount-ro\\r\\nNov 17 04:03:48 debian kernel: [    2.488722] EXT4-fs (sda1): resizing filesystem from 2588667 to 2588667 blocks\\r\\nNov 17 04:03:48 debian kernel: [    2.759844] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input2\\r\\nNov 17 04:03:48 debian kernel: [    2.784424] ACPI: Power Button [PWRF]\\r\\nNov 17 04:03:48 debian kernel: [    2.785020] input: Sleep Button as /devices/LNXSYSTM:00/LNXSLPBN:00/input/input3\\r\\nNov 17 04:03:48 debian kernel: [    2.786165] ACPI: Sleep Button [SLPF]\\r\\nNov 17 04:03:48 debian kernel: [    2.797491] tpm_tis MSFT0101:00: 2.0 TPM (device-id 0x9009, rev-id 0)\\r\\nNov 17 04:03:48 debian kernel: [    2.818744] sd 0:0:1:0: Attached scsi generic sg0 type 0\\r\\nNov 17 04:03:48 debian kernel: [    2.829489] pstore: Using crash dump compression: deflate\\r\\nNov 17 04:03:48 debian kernel: [    2.830270] pstore: Registered efi as persistent store backend\\r\\nNov 17 04:03:48 debian kernel: [    2.878870] RAPL PMU: API unit is 2^-32 Joules, 0 fixed counters, 10737418240 ms ovfl timer\\r\\nNov 17 04:03:48 debian kernel: [    2.916156] cryptd: max_cpu_qlen set to 1000\\r\\nNov 17 04:03:48 debian kernel: [    2.945181] AVX2 version of gcm_enc/dec engaged.\\r\\nNov 17 04:03:48 debian kernel: [    2.945881] AES CTR mode by8 optimization enabled\\r\\nNov 17 04:03:48 debian kernel: [    3.379173] audit: type=1400 audit(1700193828.011:2): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"nvidia_modprobe\\\" pid=292 comm=\\\"apparmor_parser\\\"\\r\\nNov 17 04:03:48 debian kernel: [    3.382434] audit: type=1400 audit(1700193828.015:3): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"nvidia_modprobe//kmod\\\" pid=292 comm=\\\"apparmor_parser\\\"\\r\\nNov 17 04:03:48 debian kernel: [    3.465172] audit: type=1400 audit(1700193828.099:4): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"/usr/sbin/chronyd\\\" pid=293 comm=\\\"apparmor_parser\\\"\\r\\nNov 17 04:03:48 debian kernel: [    3.506572] audit: type=1400 audit(1700193828.139:5): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"lsb_release\\\" pid=294 comm=\\\"apparmor_parser\\\"\\r\\nNov 17 04:03:48 debian kernel: [    3.625363] audit: type=1400 audit(1700193828.259:6): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"tcpdump\\\" pid=295 comm=\\\"apparmor_parser\\\"\\r\\nNov 17 04:03:48 debian kernel: [    3.655070] audit: type=1400 audit(1700193828.287:7): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"/usr/sbin/haveged\\\" pid=296 comm=\\\"apparmor_parser\\\"\\r\\nNov 17 04:03:48 debian kernel: [    3.720200] audit: type=1400 audit(1700193828.351:8): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"/usr/bin/man\\\" pid=297 comm=\\\"apparmor_parser\\\"\\r\\nNov 17 04:03:48 debian kernel: [    3.723210] audit: type=1400 audit(1700193828.359:9): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"man_filter\\\" pid=297 comm=\\\"apparmor_parser\\\"\\r\\nNov 17 04:03:48 debian kernel: [    3.728049] audit: type=1400 audit(1700193828.359:10): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"man_groff\\\" pid=297 comm=\\\"apparmor_parser\\\"\\r\\nNov 17 04:03:48 debian systemd[1]: Finished Create list of static device nodes for the current kernel.\\r\\nNov 17 04:03:48 debian systemd[1]: modprobe@configfs.service: Succeeded.\\r\\nNov 17 04:03:48 debian systemd[1]: Finished Load Kernel Module configfs.\\r\\nNov 17 04:03:48 debian systemd[1]: modprobe@drm.service: Succeeded.\\r\\nNov 17 04:03:48 debian systemd[1]: Finished Load Kernel Module drm.\\r\\nNov 17 04:03:48 debian systemd[1]: modprobe@fuse.service: Succeeded.\\r\\nNov 17 04:03:48 debian systemd[1]: Finished Load Kernel Module fuse.\\r\\nNov 17 04:03:48 debian systemd[1]: Finished Load Kernel Modules.\\r\\nNov 17 04:03:48 debian systemd[1]: Finished Remount Root and Kernel File Systems.\\r\\nNov 17 04:03:48 debian systemd[1]: Mounting FUSE Control File System...\\r\\nNov 17 04:03:48 debian systemd[1]: Mounting Kernel Configuration File System...\\r\\nNov 17 04:03:48 debian systemd[1]: Starting Grow File System on /...\\r\\nNov 17 04:03:48 debian systemd[1]: Condition check resulted in Rebuild Hardware Database being skipped.\\r\\nNov 17 04:03:48 debian systemd[1]: Starting Flush Journal to Persistent Storage...\\r\\nNov 17 04:03:48 debian systemd[1]: Condition check resulted in Platform Persistent Storage Archival being skipped.\\r\\nNov 17 04:03:48 debian systemd[1]: Starting Load/Save Random Seed...\\r\\nNov 17 04:03:48 debian systemd-growfs[189]: Successfully resized \\\"/\\\" to 9.8G bytes (3584 bytes lost due to blocksize).\\r\\nNov 17 04:03:48 debian systemd[1]: Starting Apply Kernel Variables...\\r\\nNov 17 04:03:48 debian systemd[1]: Starting Create System Users...\\r\\nNov 17 04:03:48 debian systemd[1]: Finished Coldplug All udev Devices.\\r\\nNov 17 04:03:48 debian systemd-sysusers[193]: Creating group systemd-timesync with gid 999.\\r\\nNov 17 04:03:48 debian systemd-sysusers[193]: Creating user systemd-timesync (systemd Time Synchronization) with uid 999 and gid 999.\\r\\nNov 17 04:03:48 debian systemd-sysusers[193]: Creating group systemd-coredump with gid 998.\\r\\nNov 17 04:03:48 debian systemd-sysusers[193]: Creating user systemd-coredump (systemd Core Dumper) with uid 998 and gid 998.\\r\\nNov 17 04:03:48 debian systemd[1]: Mounted FUSE Control File System.\\r\\nNov 17 04:03:48 debian systemd[1]: Mounted Kernel Configuration File System.\\r\\nNov 17 04:03:48 debian systemd[1]: Finished Grow File System on /.\\r\\nNov 17 04:03:48 debian systemd[1]: Finished Flush Journal to Persistent Storage.\\r\\nNov 17 04:03:48 debian systemd[1]: Finished Load/Save Random Seed.\\r\\nNov 17 04:03:48 debian systemd[1]: Finished Apply Kernel Variables.\\r\\nNov 17 04:03:48 debian systemd[1]: Finished Create System Users.\\r\\nNov 17 04:03:48 debian systemd[1]: Condition check resulted in First Boot Complete being skipped.\\r\\nNov 17 04:03:48 debian systemd[1]: Starting Helper to synchronize boot up for ifupdown...\\r\\nNov 17 04:03:48 debian systemd[1]: Starting Create Static Device Nodes in /dev...\\r\\nNov 17 04:03:48 debian systemd[1]: Finished Helper to synchronize boot up for ifupdown.\\r\\nNov 17 04:03:48 debian systemd[1]: Finished Create Static Device Nodes in /dev.\\r\\nNov 17 04:03:48 debian systemd[1]: Reached target Local File Systems (Pre).\\r\\nNov 17 04:03:48 debian systemd[1]: Starting Rule-based Manager for Device Events and Files...\\r\\nNov 17 04:03:48 debian systemd[1]: Started Rule-based Manager for Device Events and Files.\\r\\nNov 17 04:03:48 debian systemd-udevd[201]: Using default interface naming scheme 'v247'.\\r\\nNov 17 04:03:48 debian systemd-udevd[201]: ethtool: autonegotiation is unset or enabled, the speed and duplex are not writable.\\r\\nNov 17 04:03:48 debian systemd[1]: Found device /dev/ttyS0.\\r\\nNov 17 04:03:48 debian systemd-udevd[199]: ethtool: autonegotiation is unset or enabled, the speed and duplex are not writable.\\r\\nNov 17 04:03:48 debian systemd[1]: Found device PersistentDisk 15.\\r\\nNov 17 04:03:48 debian systemd[1]: Mounting /boot/efi...\\r\\nNov 17 04:03:48 debian cloud-ifupdown-helper: Generated configuration for ens4\\r\\nNov 17 04:03:48 debian systemd[1]: Mounted /boot/efi.\\r\\nNov 17 04:03:48 debian systemd[1]: Reached target Local File Systems.\\r\\nNov 17 04:03:48 debian systemd[1]: Starting Load AppArmor profiles...\\r\\nNov 17 04:03:48 debian systemd[1]: Condition check resulted in Store a System Token in an EFI Variable being skipped.\\r\\nNov 17 04:03:48 debian systemd[1]: Starting Commit a transient machine-id on disk...\\r\\nNov 17 04:03:48 debian systemd[1]: Starting Create Volatile Files and Directories...\\r\\nNov 17 04:03:48 debian systemd[1]: Found device Virtio network device.\\r\\nNov 17 04:03:48 debian apparmor.systemd[265]: Restarting AppArmor\\r\\nNov 17 04:03:48 debian apparmor.systemd[265]: Reloading AppArmor profiles\\r\\nNov 17 04:03:48 debian systemd[1]: Finished Create Volatile Files and Directories.\\r\\nNov 17 04:03:48 debian systemd[1]: Starting Update UTMP about System Boot/Shutdown...\\r\\nNov 17 04:03:48 debian systemd[1]: Finished Update UTMP about System Boot/Shutdown.\\r\\nNov 17 04:03:48 debian systemd[1]: etc-machine\\\\x2did.mount: Succeeded.\\r\\nNov 17 04:03:48 debian systemd[1]: Finished Commit a transient machine-id on disk.\\r\\nNov 17 04:03:48 debian systemd[1]: Finished Load AppArmor profiles.\\r\\nNov 17 04:03:48 debian systemd[1]: Started Entropy Daemon based on the HAVEGE algorithm.\\r\\nNov 17 04:03:48 debian systemd[1]: Reached target System Initialization.\\r\\nNov 17 04:03:48 debian haveged[298]: haveged: command socket is listening at fd 3\\r\\nNov 17 04:03:48 debian systemd[1]: Started GCE Workload Certificate refresh timer.\\r\\nNov 17 04:03:48 debian systemd[1]: Started NSS cache refresh timer.\\r\\nNov 17 04:03:48 debian systemd[1]: Started Daily Cleanup of Temporary Directories.\\r\\nNov 17 04:03:48 debian systemd[1]: Listening on D-Bus System Message Bus Socket.\\r\\nNov 17 04:03:48 debian systemd[1]: Listening on UUID daemon activation socket.\\r\\nNov 17 04:03:48 debian systemd[1]: Reached target Sockets.\\r\\nNov 17 04:03:48 debian systemd[1]: Starting Resize root filesystem if needed...\\r\\nNov 17 04:03:48 debian systemd[1]: Started ifup for ens4.\\r\\nNov 17 04:03:48 debian google_disk_expand[299]: Checking if filesystem on /dev/sda1 needs resizing\\r\\nNov 17 04:03:48 debian systemd[1]: Starting Raise network interfaces...\\r\\nNov 17 04:03:48 debian google_disk_expand[308]: resize2fs 1.46.2 (28-Feb-2021)\\r\\nNov 17 04:03:48 debian google_disk_expand[308]: The filesystem is already 2588667 (4k) blocks long.  Nothing to do!\\r\\nNov 17 04:03:48 debian google_disk_expand[299]: Done.\\r\\nNov 17 04:03:48 debian systemd[1]: google-disk-expand.service: Succeeded.\\r\\nNov 17 04:03:48 debian systemd[1]: Finished Resize root filesystem if needed.\\r\\nNov 17 04:03:48 debian systemd[1]: Reached target Basic System.\\r\\nNov 17 04:03:48 debian systemd[1]: Started Regular background program processing daemon.\\r\\nNov 17 04:03:48 debian systemd[1]: Started D-Bus System Message Bus.\\r\\nNov 17 04:03:48 debian dhclient[321]: Internet Systems Consortium DHCP Client 4.4.1\\r\\nNov 17 04:03:48 debian sh[321]: Internet Systems Consortium DHCP Client 4.4.1\\r\\nNov 17 04:03:48 debian dhclient[321]: Copyright 2004-2018 Internet Systems Consortium.\\r\\nNov 17 04:03:48 debian sh[321]: Copyright 2004-2018 Internet Systems Consortium.\\r\\nNov 17 04:03:48 debian dhclient[321]: All rights reserved.\\r\\nNov 17 04:03:48 debian sh[321]: All rights reserved.\\r\\nNov 17 04:03:48 debian dhclient[321]: For info, please visit https://www.isc.org/software/dhcp/\\r\\nNov 17 04:03:48 debian sh[321]: For info, please visit https://www.isc.org/software/dhcp/\\r\\nNov 17 04:03:48 debian dhclient[321]: \\r\\nNov 17 04:03:48 debian systemd[1]: Starting Remove Stale Online ext4 Metadata Check Snapshots...\\r\\nNov 17 04:03:48 debian systemd[1]: Condition check resulted in getty on tty2-tty6 if dbus and logind are not available being skipped.\\r\\nNov 17 04:03:48 debian systemd[1]: Starting System Logging Service...\\r\\nNov 17 04:03:48 debian systemd[1]: Starting User Login Management...\\r\\nNov 17 04:03:48 debian ifup[304]: ifup: waiting for lock on /run/network/ifstate.ens4\\r\\nNov 17 04:03:48 debian systemd[1]: Started System Logging Service.\\r\\nNov 17 04:03:48 debian dhclient[321]: Listening on LPF/ens4/42:01:0a:9a:00:0e\\r\\nNov 17 04:03:48 debian sh[321]: Listening on LPF/ens4/42:01:0a:9a:00:0e\\r\\nNov 17 04:03:48 debian sh[321]: Sending on   LPF/ens4/42:01:0a:9a:00:0e\\r\\nNov 17 04:03:48 debian sh[321]: Sending on   Socket/fallback\\r\\nNov 17 04:03:48 debian sh[321]: Created duid \\\"\\\\000\\\\001\\\\000\\\\001,\\\\351\\\\242\\\\244B\\\\001\\\\012\\\\232\\\\000\\\\016\\\".\\r\\nNov 17 04:03:48 debian sh[321]: DHCPDISCOVER on ens4 to 255.255.255.255 port 67 interval 7\\r\\nNov 17 04:03:48 debian dhclient[321]: Sending on   LPF/ens4/42:01:0a:9a:00:0e\\r\\nNov 17 04:03:48 debian dhclient[321]: Sending on   Socket/fallback\\r\\nNov 17 04:03:48 debian dhclient[321]: Created duid \\\"\\\\000\\\\001\\\\000\\\\001,\\\\351\\\\242\\\\244B\\\\001\\\\012\\\\232\\\\000\\\\016\\\".\\r\\nNov 17 04:03:48 debian dhclient[321]: DHCPDISCOVER on ens4 to 255.255.255.255 port 67 interval 7\\r\\nNov 17 04:03:48 debian dhclient[321]: DHCPOFFER of 10.154.0.14 from 169.254.169.254\\r\\nNov 17 04:03:48 debian sh[321]: DHCPOFFER of 10.154.0.14 from 169.254.169.254\\r\\nNov 17 04:03:48 debian sh[321]: DHCPREQUEST for 10.154.0.14 on ens4 to 255.255.255.255 port 67\\r\\nNov 17 04:03:48 debian dhclient[321]: DHCPREQUEST for 10.154.0.14 on ens4 to 255.255.255.255 port 67\\r\\nNov 17 04:03:48 debian dhclient[321]: DHCPACK of 10.154.0.14 from 169.254.169.254\\r\\nNov 17 04:03:48 debian sh[321]: DHCPACK of 10.154.0.14 from 169.254.169.254\\r\\nNov 17 04:03:48 debian systemd[1]: Started User Login Management.\\r\\nNov 17 04:03:48 debian haveged[298]: haveged: ver: 1.9.14; arch: x86; vend: GenuineIntel; build: (gcc 10.2.1 ITV); collect: 128K\\r\\nNov 17 04:03:48 debian haveged[298]: haveged: cpu: (L4 VC); data: 32K (L4 V); inst: 32K (L4 V); idx: 24/40; sz: 32154/54019\\r\\nNov 17 04:03:48 debian haveged[298]: haveged: tot tests(BA8): A:1/1 B:1/1 continuous tests(B):  last entropy estimate 7.99937\\r\\nNov 17 04:03:48 debian haveged[298]: haveged: fills: 0, generated: 0\\r\\nNov 17 04:03:48 debian dhclient[321]: bound to 10.154.0.14 -- renewal in 42095 seconds.\\r\\nNov 17 04:03:48 debian sh[321]: bound to 10.154.0.14 -- renewal in 42095 seconds.\\r\\nNov 17 04:03:48 debian systemd[1]: e2scrub_reap.service: Succeeded.\\r\\nNov 17 04:03:48 debian systemd[1]: Finished Remove Stale Online ext4 Metadata Check Snapshots.\\r\\nNov 17 04:03:49 debian dhclient[421]: Internet Systems Consortium DHCP Client 4.4.1\\r\\nNov 17 04:03:49 debian sh[421]: Internet Systems Consortium DHCP Client 4.4.1\\r\\nNov 17 04:03:49 debian dhclient[421]: Copyright 2004-2018 Internet Systems Consortium.\\r\\nNov 17 04:03:49 debian sh[421]: Copyright 2004-2018 Internet Systems Consortium.\\r\\nNov 17 04:03:49 debian dhclient[421]: All rights reserved.\\r\\nNov 17 04:03:49 debian sh[421]: All rights reserved.\\r\\nNov 17 04:03:49 debian dhclient[421]: For info, please visit https://www.isc.org/software/dhcp/\\r\\nNov 17 04:03:49 debian sh[421]: For info, please visit https://www.isc.org/software/dhcp/\\r\\nNov 17 04:03:49 debian dhclient[421]: \\r\\nNov 17 04:03:49 debian dhclient[421]: Listening on Socket/ens4\\r\\nNov 17 04:03:49 debian sh[421]: Listening on Socket/ens4\\r\\nNov 17 04:03:49 debian sh[421]: Sending on   Socket/ens4\\r\\nNov 17 04:03:49 debian sh[421]: PRC: Soliciting for leases (INIT).\\r\\nNov 17 04:03:49 debian dhclient[421]: Sending on   Socket/ens4\\r\\nNov 17 04:03:49 debian sh[454]: ens4=ens4\\r\\nNov 17 04:03:49 debian systemd[1]: Starting GCE Workload Certificate refresh...\\r\\n         Starting \\u001b[0;1;39mGCE Workload Certificate refresh\\u001b[0m...\\r\\nNov 17 04:03:49 debian dhclient[421]: XMT: Solicit on ens4, interval 1040ms.\\r\\nNov 17 04:03:49 debian systemd[1]: Starting NSS cache refresh...\\r\\n         Starting \\u001b[0;1;39mNSS cache refresh\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mRaise network interfaces\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mNetwork\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mNetwork is Online\\u001b[0m.\\r\\nNov 17 04:03:49 debian systemd[1]: Finished Raise network interfaces.\\r\\nNov 17 04:03:49 debian systemd[1]: Reached target Network.\\r\\nNov 17 04:03:49 debian systemd[1]: Reached target Network is Online.\\r\\nNov 17 04:03:49 debian systemd[1]: Starting chrony, an NTP client/server...\\r\\n         Starting \\u001b[0;1;39mchrony, an NTP client/server\\u001b[0m...\\r\\nNov 17 04:03:49 debian systemd[1]: Starting Google Compute Engine Guest Agent...\\r\\n         Starting \\u001b[0;1;39mGoogle Compute Engine Guest Agent\\u001b[0m...\\r\\nNov 17 04:03:49 debian systemd[1]: Started Google OSConfig Agent.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mGoogle OSConfig Agent\\u001b[0m.\\r\\nNov 17 04:03:49 debian systemd[1]: Starting Google Compute Engine Shutdown Scripts...\\r\\n         Starting \\u001b[0;1;39mGoogle Compute Engine Shutdown Scripts\\u001b[0m...\\r\\nNov 17 04:03:49 debian systemd[1]: Starting Permit User Sessions...\\r\\n         Starting \\u001b[0;1;39mPermit User Sessions\\u001b[0m...\\r\\nNov 17 04:03:49 debian systemd[1]: Started Unattended Upgrades Shutdown.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mUnattended Upgrades Shutdown\\u001b[0m.\\r\\nNov 17 04:03:49 debian systemd[1]: Finished Google Compute Engine Shutdown Scripts.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mGoogle Compute Engine Shutdown Scripts\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mPermit User Sessions\\u001b[0m.\\r\\nNov 17 04:03:49 debian systemd[1]: Finished Permit User Sessions.\\r\\nNov 17 04:03:49 debian systemd[1]: Started Getty on tty1.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mGetty on tty1\\u001b[0m.\\r\\nNov 17 04:03:49 debian systemd[1]: Started Serial Getty on ttyS0.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mSerial Getty on ttyS0\\u001b[0m.\\r\\nNov 17 04:03:49 debian systemd[1]: Reached target Login Prompts.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mLogin Prompts\\u001b[0m.\\r\\nNov 17 04:03:50 debian chronyd[484]: chronyd version 4.0 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SIGND +ASYNCDNS +NTS +SECHASH +IPV6 -DEBUG)\\r\\nNov 17 04:03:50 debian google_oslogin_nss_cache[457]: oslogin_cache_refresh[457]: Refreshing passwd entry cache\\r\\nNov 17 04:03:50 debian chronyd[484]: Loaded seccomp filter\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mchrony, an NTP client/server\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mSystem Time Synchronized\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mDaily apt download activities\\u001b[0m.\\r\\nNov 17 04:03:50 debian systemd[1]: Started chrony, an NTP client/server.\\r\\nNov 17 04:03:50 debian systemd[1]: Reached target System Time Synchronized.\\r\\nNov 17 04:03:50 debian systemd[1]: Started Daily apt download activities.\\r\\nNov 17 04:03:50 debian systemd[1]: Started Daily apt upgrade and clean activities.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mDaily apt upgrade and clean activities\\u001b[0m.\\r\\nNov 17 04:03:50 debian systemd[1]: Started Periodic ext4 Online Metadata Check for All Filesystems.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mPeriodic ext4 Onli…ata Check for All Filesystems\\u001b[0m.\\r\\nNov 17 04:03:50 debian systemd[1]: Started Daily exim4-base housekeeping.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mDaily exim4-base housekeeping\\u001b[0m.\\r\\nNov 17 04:03:50 debian systemd[1]: Started Discard unused blocks once a week.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mDiscard unused blocks once a week\\u001b[0m.\\r\\nNov 17 04:03:50 debian systemd[1]: Started Daily rotation of log files.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mDaily rotation of log files\\u001b[0m.\\r\\nNov 17 04:03:50 debian systemd[1]: Started Daily man-db regeneration.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mDaily man-db regeneration\\u001b[0m.\\r\\nNov 17 04:03:50 debian systemd[1]: Reached target Timers.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mTimers\\u001b[0m.\\r\\nNov 17 04:03:50 debian systemd[1]: Starting LSB: exim Mail Transport Agent...\\r\\n         Starting \\u001b[0;1;39mLSB: exim Mail Transport Agent\\u001b[0m...\\r\\nNov 17 04:03:50 debian google_oslogin_nss_cache[457]: oslogin_cache_refresh[457]: Refreshing group entry cache\\r\\nNov 17 04:03:50 debian systemd[1]: google-oslogin-cache.service: Succeeded.\\r\\nNov 17 04:03:50 debian systemd[1]: Finished NSS cache refresh.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mNSS cache refresh\\u001b[0m.\\r\\nNov 17 04:03:50 debian dhclient[421]: XMT: Solicit on ens4, interval 2030ms.\\r\\nNov 17 04:03:50 debian exim4[489]: Starting MTA:\\r\\nNov 17 04:03:50 debian exim4[508]: /usr/sbin/update-exim4.conf: 154: cannot open /etc/mailname: No such file\\r\\nNov 17 04:03:51 debian gce_workload_cert_refresh[456]: 2023/11/17 04:03:51: Done\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mGCE Workload Certificate refresh\\u001b[0m.\\r\\nNov 17 04:03:51 debian systemd[1]: gce-workload-cert-refresh.service: Succeeded.\\r\\nNov 17 04:03:51 debian systemd[1]: Finished GCE Workload Certificate refresh.\\r\\nNov 17 04:03:52 debian google_guest_agent[473]: GCE Agent Started (version 20231115.00)\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mLSB: exim Mail Transport Agent\\u001b[0m.\\r\\nNov 17 04:03:52 debian exim4[489]:  exim4.\\r\\nNov 17 04:03:52 debian systemd[1]: Started LSB: exim Mail Transport Agent.\\r\\nNov 17 04:03:52 debian google_guest_agent[473]: Instance ID changed, running first-boot actions\\r\\nNov 17 04:03:52 debian OSConfigAgent[474]: 2023-11-17T04:03:52.5997Z OSConfigAgent Info: OSConfig Agent (version 20231010.00-g1) started.\\r\\nNov 17 04:03:52 debian dhclient[421]: XMT: Solicit on ens4, interval 4070ms.\\r\\nNov 17 04:03:53 debian google_guest_agent[473]: Starting the scheduler to run jobs\\r\\nNov 17 04:03:53 debian google_guest_agent[473]: Scheduler - start: []\\r\\nNov 17 04:03:53 debian google_guest_agent[473]: Skipping scheduling credential generation job, failed to reach client credentials endpoint(instance/credentials/certs) with error: error connecting to metadata server, status code: 404\\r\\nNov 17 04:03:53 debian google_guest_agent[473]: ERROR scheduler.go:177 Failed to schedule job MTLS_MDS_Credential_Boostrapper with error: ShouldEnable() returned false, cannot schedule job MTLS_MDS_Credential_Boostrapper\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mGoogle Compute Engine Guest Agent\\u001b[0m.\\r\\nNov 17 04:03:53 debian systemd[1]: Started Google Compute Engine Guest Agent.\\r\\nNov 17 04:03:53 debian systemd[1]: Starting Google Compute Engine Startup Scripts...\\r\\n         Starting \\u001b[0;1;39mGoogle Compute Engine Startup Scripts\\u001b[0m...\\r\\nNov 17 04:03:53 debian systemd[1]: Starting OpenBSD Secure Shell server...\\r\\n         Starting \\u001b[0;1;39mOpenBSD Secure Shell server\\u001b[0m...\\r\\nNov 17 04:03:53 debian google_guest_agent[473]: Starting the scheduler to run jobs\\r\\nNov 17 04:03:53 debian google_guest_agent[473]: Scheduling job: telemetryJobID\\r\\nNov 17 04:03:53 debian google_guest_agent[473]: Scheduling job \\\"telemetryJobID\\\" to run at 24.000000 hr interval\\r\\nNov 17 04:03:53 debian google_guest_agent[473]: Successfully scheduled job telemetryJobID\\r\\nNov 17 04:03:53 debian google_guest_agent[473]: Invoking job \\\"telemetryJobID\\\"\\r\\nNov 17 04:03:53 debian google_guest_agent[473]: Scheduler - added: [now 2023-11-17 04:03:53.201836482 +0000 UTC entry 1 next 2023-11-18 04:03:53 +0000 UTC]\\r\\nNov 17 04:03:53 debian dhclient[817]: Internet Systems Consortium DHCP Client 4.4.1\\r\\nNov 17 04:03:53 debian dhclient[817]: Copyright 2004-2018 Internet Systems Consortium.\\r\\nNov 17 04:03:53 debian dhclient[817]: All rights reserved.\\r\\nNov 17 04:03:53 debian dhclient[817]: For info, please visit https://www.isc.org/software/dhcp/\\r\\nNov 17 04:03:53 debian dhclient[817]: \\r\\nNov 17 04:03:53 debian dhclient[817]: Listening on Socket/ens4\\r\\nNov 17 04:03:53 debian dhclient[817]: Sending on   Socket/ens4\\r\\nNov 17 04:03:53 debian dhclient[817]: Created duid \\\"\\\\000\\\\001\\\\000\\\\001,\\\\351\\\\242\\\\251B\\\\001\\\\012\\\\232\\\\000\\\\016\\\".\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mOpenBSD Secure Shell server\\u001b[0m.\\r\\nNov 17 04:03:53 debian systemd[1]: Started OpenBSD Secure Shell server.\\r\\nNov 17 04:03:53 debian systemd[1]: Stopping User Login Management...\\r\\n         Stopping \\u001b[0;1;39mUser Login Management\\u001b[0m...\\r\\nNov 17 04:03:53 debian systemd[1]: systemd-logind.service: Succeeded.\\r\\nNov 17 04:03:53 debian systemd[1]: Stopped User Login Management.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Stopped \\u001b[0;1;39mUser Login Management\\u001b[0m.\\r\\nNov 17 04:03:53 debian systemd[1]: Starting Load Kernel Module drm...\\r\\n         Starting \\u001b[0;1;39mLoad Kernel Module drm\\u001b[0m...\\r\\nNov 17 04:03:53 debian google_guest_agent[473]: Created google sudoers file\\r\\nNov 17 04:03:53 debian google_guest_agent[473]: Creating user foo.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mLoad Kernel Module drm\\u001b[0m.\\r\\nNov 17 04:03:53 debian systemd[1]: modprobe@drm.service: Succeeded.\\r\\nNov 17 04:03:53 debian systemd[1]: Finished Load Kernel Module drm.\\r\\nNov 17 04:03:53 debian systemd[1]: Starting User Login Management...\\r\\n         Starting \\u001b[0;1;39mUser Login Management\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mUser Login Management\\u001b[0m.\\r\\nNov 17 04:03:53 debian systemd[1]: Started User Login Management.\\r\\nNov 17 04:03:53 debian systemd[1]: Stopping Regular background program processing daemon...\\r\\n         Stopping \\u001b[0;1;39mRegular background program processing daemon\\u001b[0m...\\r\\nNov 17 04:03:53 debian systemd[1]: cron.service: Succeeded.\\r\\nNov 17 04:03:53 debian systemd[1]: Stopped Regular background program processing daemon.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Stopped \\u001b[0;1;39mRegular background program processing daemon\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mRegular background program processing daemon\\u001b[0m.\\r\\nNov 17 04:03:53 debian systemd[1]: Started Regular background program processing daemon.\\r\\nNov 17 04:03:53 debian google_metadata_script_runner[808]: Starting startup scripts (version dev).\\r\\nNov 17 04:03:53 debian google_metadata_script_runner[808]: Found startup-script in metadata.\\r\\nNov 17 04:03:53 debian systemd[1]: Reloading OpenBSD Secure Shell server.\\r\\nNov 17 04:03:53 debian systemd[1]: google-guest-agent.service: Got notification message from PID 848, but reception only permitted for main PID 473\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Stopped \\u001b[0;1;39mOpenBSD Secure Shell server\\u001b[0m.\\r\\nNov 17 04:03:53 debian systemd[1]: ssh.service: Control process exited, code=killed, status=15/TERM\\r\\nNov 17 04:03:53 debian systemd[1]: ssh.service: Failed with result 'signal'.\\r\\nNov 17 04:03:53 debian systemd[1]: Stopped OpenBSD Secure Shell server.\\r\\nNov 17 04:03:53 debian google_guest_agent[473]: ERROR oslogin.go:158 Error reloading service: Job for ssh.service canceled..\\r\\nNov 17 04:03:53 debian google_guest_agent[473]: Updating keys for user foo.\\r\\nNov 17 04:03:53 debian systemd[1]: Starting OpenBSD Secure Shell server...\\r\\n         Starting \\u001b[0;1;39mOpenBSD Secure Shell server\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mOpenBSD Secure Shell server\\u001b[0m.\\r\\nNov 17 04:03:53 debian systemd[1]: Started OpenBSD Secure Shell server.\\r\\nNov 17 04:03:54 debian chronyd[484]: Selected source 169.254.169.254 (metadata.google.internal)\\r\\n\\r\\r\\nDebian GNU/Linux 11 faulty-linux-ssh ttyS0\\r\\n\\r\\nfaulty-linux-ssh login: Nov 17 04:03:56 debian dhclient[421]: XMT: Solicit on ens4, interval 8010ms.\\r\\nNov 17 04:04:04 debian dhclient[421]: XMT: Solicit on ens4, interval 15860ms.\\r\\nNov 17 04:04:20 debian dhclient[421]: XMT: Solicit on ens4, interval 31990ms.\\r\\nNov 17 04:04:52 debian dhclient[421]: XMT: Solicit on ens4, interval 62240ms.\\r\\nNov 17 04:05:55 debian dhclient[421]: XMT: Solicit on ens4, interval 128800ms.\\r\\nNov 17 04:08:04 debian dhclient[421]: XMT: Solicit on ens4, interval 117650ms.\\r\\nNov 17 04:10:01 debian dhclient[421]: XMT: Solicit on ens4, interval 127600ms.\\r\\nNov 17 04:12:09 debian dhclient[421]: XMT: Solicit on ens4, interval 123590ms.\\r\\nNov 17 04:13:49 debian systemd[1]: Starting GCE Workload Certificate refresh...\\r\\nNov 17 04:13:50 debian gce_workload_cert_refresh[895]: 2023/11/17 04:13:50: Done\\r\\nNov 17 04:13:50 debian systemd[1]: gce-workload-cert-refresh.service: Succeeded.\\r\\nNov 17 04:13:50 debian systemd[1]: Finished GCE Workload Certificate refresh.\\r\\nNov 17 04:14:13 debian dhclient[421]: XMT: Solicit on ens4, interval 118200ms.\\r\\nNov 17 04:16:11 debian dhclient[421]: XMT: Solicit on ens4, interval 109360ms.\\r\\nNov 17 04:18:01 debian dhclient[421]: XMT: Solicit on ens4, interval 128660ms.\\r\\nNov 17 04:18:45 debian systemd[1]: Starting Cleanup of Temporary Directories...\\r\\nNov 17 04:18:45 debian systemd[1]: systemd-tmpfiles-clean.service: Succeeded.\\r\\nNov 17 04:18:45 debian systemd[1]: Finished Cleanup of Temporary Directories.\\r\\nNov 17 04:20:09 debian dhclient[421]: XMT: Solicit on ens4, interval 115450ms.\\r\\nNov 17 04:22:05 debian dhclient[421]: XMT: Solicit on ens4, interval 129250ms.\\r\\nNov 17 04:23:50 debian systemd[1]: Starting GCE Workload Certificate refresh...\\r\\nNov 17 04:23:50 debian gce_workload_cert_refresh[910]: 2023/11/17 04:23:50: Done\\r\\nNov 17 04:23:50 debian systemd[1]: gce-workload-cert-refresh.service: Succeeded.\\r\\nNov 17 04:23:50 debian systemd[1]: Finished GCE Workload Certificate refresh.\\r\\nNov 17 04:24:14 debian dhclient[421]: XMT: Solicit on ens4, interval 124470ms.\\r\\n\",\n  \"start\": \"0\",\n  \"next\": \"103446\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/faulty-linux-ssh/serialPortOutput\"\n}\n"
  },
  {
    "path": "test-data/gce2/json-dumps/compute-serial-port-output-faulty-windows-ssh.json",
    "content": "{\n  \"kind\": \"compute#serialPortOutput\",\n  \"contents\":\"empty\\nempty\",\n  \"start\": \"0\",\n  \"next\": \"311872\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/faulty-windows-ssh/serialPortOutput\"\n}\n"
  },
  {
    "path": "test-data/gce2/json-dumps/compute-serial-port-output-valid-linux-ssh.json",
    "content": "{\n  \"kind\": \"compute#serialPortOutput\",\n  \"contents\": \"\\u001b[2J\\u001b[01;01H\\u001b[=3h\\u001b[2J\\u001b[01;01H\\u001b[2J\\u001b[01;01H\\u001b[=3h\\u001b[2J\\u001b[01;01HCSM BBS Table full.\\r\\nBdsDxe: loading Boot0001 \\\"UEFI Google PersistentDisk \\\" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\\r\\nBdsDxe: starting Boot0001 \\\"UEFI Google PersistentDisk \\\" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\\r\\n\\r\\nUEFI: Attempting to start image.\\r\\nDescription: UEFI Google PersistentDisk \\r\\nFilePath: PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\\r\\nOptionNumber: 1.\\r\\n\\r\\n\\u001b[0m\\u001b[30m\\u001b[47mWelcome to GRUB!\\n\\r\\n\\r\\u001b[0m\\u001b[37m\\u001b[40m\\u001b[0m\\u001b[30m\\u001b[40m\\u001b[2J\\u001b[01;01H\\u001b[0m\\u001b[37m\\u001b[40m\\u001b[H\\u001b[J\\u001b[1;1H\\u001b[H\\u001b[J\\u001b[1;1H\\u001b[0m\\u001b[30m\\u001b[40m\\u001b[2J\\u001b[01;01H\\u001b[0m\\u001b[37m\\u001b[40m    Booting `Debian GNU/Linux'Booting `Debian GNU/Linux'\\n\\r\\n\\r\\n\\r\\n\\rLoading Linux 5.10.0-26-cloud-amd64 ...Loading Linux 5.10.0-26-cloud-amd64 ...\\n\\r\\n\\rLoading initial ramdisk ...Loading initial ramdisk ...\\n\\r\\n\\rerror: no suitable video mode found.\\n\\rerror: no suitable video mode found.\\n\\rBooting in blind modeBooting in blind mode\\n\\r\\n\\r[    0.000000] Linux version 5.10.0-26-cloud-amd64 (debian-kernel@lists.debian.org) (gcc-10 (Debian 10.2.1-6) 10.2.1 20210110, GNU ld (GNU Binutils for Debian) 2.35.2) #1 SMP Debian 5.10.197-1 (2023-09-29)\\r\\n[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-5.10.0-26-cloud-amd64 root=UUID=e6fe3fcb-2478-4e7e-8072-4ced46dceac5 ro console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0 intel_iommu=off\\r\\n[    0.000000] BIOS-provided physical RAM map:\\r\\n[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x0000000000000fff] reserved\\r\\n[    0.000000] BIOS-e820: [mem 0x0000000000001000-0x0000000000054fff] usable\\r\\n[    0.000000] BIOS-e820: [mem 0x0000000000055000-0x000000000005ffff] reserved\\r\\n[    0.000000] BIOS-e820: [mem 0x0000000000060000-0x0000000000097fff] usable\\r\\n[    0.000000] BIOS-e820: [mem 0x0000000000098000-0x000000000009ffff] reserved\\r\\n[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x0000000025eecfff] usable\\r\\n[    0.000000] BIOS-e820: [mem 0x0000000025eed000-0x0000000025fecfff] reserved\\r\\n[    0.000000] BIOS-e820: [mem 0x0000000025fed000-0x00000000260ecfff] type 20\\r\\n[    0.000000] BIOS-e820: [mem 0x00000000260ed000-0x000000002616cfff] reserved\\r\\n[    0.000000] BIOS-e820: [mem 0x000000002616d000-0x000000002617efff] ACPI data\\r\\n[    0.000000] BIOS-e820: [mem 0x000000002617f000-0x00000000261fefff] ACPI NVS\\r\\n[    0.000000] BIOS-e820: [mem 0x00000000261ff000-0x00000000265dffff] usable\\r\\n[    0.000000] BIOS-e820: [mem 0x00000000265e0000-0x00000000265fffff] reserved\\r\\n[    0.000000] printk: bootconsole [earlyser0] enabled\\r\\n[    0.000000] NX (Execute Disable) protection: active\\r\\n[    0.000000] efi: EFI v2.70 by EDK II\\r\\n[    0.000000] efi: TPMFinalLog=0x261f7000 ACPI=0x2617e000 ACPI 2.0=0x2617e014 SMBIOS=0x25fca000 MEMATTR=0x249a0018 \\r\\n[    0.000000] secureboot: Secure boot disabled\\r\\n[    0.000000] SMBIOS 2.4 present.\\r\\n[    0.000000] DMI: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/09/2023\\r\\n[    0.000000] Hypervisor detected: KVM\\r\\n[    0.000000] kvm-clock: Using msrs 4b564d01 and 4b564d00\\r\\n[    0.000000] kvm-clock: cpu 0, msr c201001, primary cpu clock\\r\\n[    0.000000] kvm-clock: using sched offset of 6456270974 cycles\\r\\n[    0.000734] clocksource: kvm-clock: mask: 0xffffffffffffffff max_cycles: 0x1cd42e4dffb, max_idle_ns: 881590591483 ns\\r\\n[    0.002884] tsc: Detected 2200.158 MHz processor\\r\\n[    0.003587] last_pfn = 0x265e0 max_arch_pfn = 0x400000000\\r\\n[    0.004363] x86/PAT: Configuration [0-7]: WB  WC  UC- UC  WB  WP  UC- WT  \\r\\nMemory KASLR using RDRAND RDTSC...\\r\\n[    0.005841] Using GB pages for direct mapping\\r\\n[    0.006760] RAMDISK: [mem 0x2327f000-0x24000fff]\\r\\n[    0.007361] ACPI: Early table checksum verification disabled\\r\\n[    0.008083] ACPI: RSDP 0x000000002617E014 000024 (v02 Google)\\r\\n[    0.008863] ACPI: XSDT 0x000000002617D0E8 00005C (v01 Google GOOGFACP 00000001      01000013)\\r\\n[    0.010056] ACPI: FACP 0x0000000026178000 0000F4 (v02 Google GOOGFACP 00000001 GOOG 00000001)\\r\\n[    0.011203] ACPI: DSDT 0x0000000026179000 001A64 (v01 Google GOOGDSDT 00000001 GOOG 00000001)\\r\\n[    0.012333] ACPI: FACS 0x00000000261F2000 000040\\r\\n[    0.012966] ACPI: SSDT 0x000000002617C000 000316 (v02 GOOGLE Tpm2Tabl 00001000 INTL 20211217)\\r\\n[    0.014054] ACPI: TPM2 0x000000002617B000 000034 (v04 GOOGLE          00000001 GOOG 00000001)\\r\\n[    0.015175] ACPI: SRAT 0x0000000026177000 0000B8 (v03 Google GOOGSRAT 00000001 GOOG 00000001)\\r\\n[    0.016277] ACPI: APIC 0x0000000026176000 00006E (v05 Google GOOGAPIC 00000001 GOOG 00000001)\\r\\n[    0.017366] ACPI: SSDT 0x0000000026175000 00091F (v01 Google GOOGSSDT 00000001 GOOG 00000001)\\r\\n[    0.018500] ACPI: WAET 0x0000000026174000 000028 (v01 Google GOOGWAET 00000001 GOOG 00000001)\\r\\n[    0.019702] ACPI: Reserving FACP table memory at [mem 0x26178000-0x261780f3]\\r\\n[    0.020615] ACPI: Reserving DSDT table memory at [mem 0x26179000-0x2617aa63]\\r\\n[    0.021530] ACPI: Reserving FACS table memory at [mem 0x261f2000-0x261f203f]\\r\\n[    0.022454] ACPI: Reserving SSDT table memory at [mem 0x2617c000-0x2617c315]\\r\\n[    0.023355] ACPI: Reserving TPM2 table memory at [mem 0x2617b000-0x2617b033]\\r\\n[    0.024340] ACPI: Reserving SRAT table memory at [mem 0x26177000-0x261770b7]\\r\\n[    0.025411] ACPI: Reserving APIC table memory at [mem 0x26176000-0x2617606d]\\r\\n[    0.026702] ACPI: Reserving SSDT table memory at [mem 0x26175000-0x2617591e]\\r\\n[    0.027613] ACPI: Reserving WAET table memory at [mem 0x26174000-0x26174027]\\r\\n[    0.028637] SRAT: PXM 0 -\\u003e APIC 0x00 -\\u003e Node 0\\r\\n[    0.029245] ACPI: SRAT: Node 0 PXM 0 [mem 0x00000000-0x0009ffff]\\r\\n[    0.030009] ACPI: SRAT: Node 0 PXM 0 [mem 0x00100000-0x265fffff]\\r\\n[    0.030872] NUMA: Node 0 [mem 0x00000000-0x0009ffff] + [mem 0x00100000-0x265dffff] -\\u003e [mem 0x00000000-0x265dffff]\\r\\n[    0.032225] NODE_DATA(0) allocated [mem 0x26498000-0x264c1fff]\\r\\n[    0.033370] Zone ranges:\\r\\n[    0.033725]   DMA      [mem 0x0000000000001000-0x0000000000ffffff]\\r\\n[    0.034554]   DMA32    [mem 0x0000000001000000-0x00000000265dffff]\\r\\n[    0.035451]   Normal   empty\\r\\n[    0.035842]   Device   empty\\r\\n[    0.036232] Movable zone start for each node\\r\\n[    0.036778] Early memory node ranges\\r\\n[    0.037243]   node   0: [mem 0x0000000000001000-0x0000000000054fff]\\r\\n[    0.038094]   node   0: [mem 0x0000000000060000-0x0000000000097fff]\\r\\n[    0.038947]   node   0: [mem 0x0000000000100000-0x0000000025eecfff]\\r\\n[    0.039805]   node   0: [mem 0x00000000261ff000-0x00000000265dffff]\\r\\n[    0.040633] Initmem setup node 0 [mem 0x0000000000001000-0x00000000265dffff]\\r\\n[    0.041989] On node 0, zone DMA: 1 pages in unavailable ranges\\r\\n[    0.041990] On node 0, zone DMA: 11 pages in unavailable ranges\\r\\n[    0.042798] On node 0, zone DMA: 104 pages in unavailable ranges\\r\\n[    0.045104] On node 0, zone DMA32: 786 pages in unavailable ranges\\r\\n[    0.046017] On node 0, zone DMA32: 6688 pages in unavailable ranges\\r\\n[    0.047186] ACPI: PM-Timer IO Port: 0xb008\\r\\n[    0.048565] ACPI: LAPIC_NMI (acpi_id[0xff] dfl dfl lint[0x1])\\r\\n[    0.049404] IOAPIC[0]: apic_id 0, version 17, address 0xfec00000, GSI 0-23\\r\\n[    0.050293] ACPI: INT_SRC_OVR (bus 0 bus_irq 5 global_irq 5 high level)\\r\\n[    0.051137] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)\\r\\n[    0.051992] ACPI: INT_SRC_OVR (bus 0 bus_irq 10 global_irq 10 high level)\\r\\n[    0.052890] ACPI: INT_SRC_OVR (bus 0 bus_irq 11 global_irq 11 high level)\\r\\n[    0.053812] Using ACPI (MADT) for SMP configuration information\\r\\n[    0.054586] smpboot: Allowing 1 CPUs, 0 hotplug CPUs\\r\\n[    0.055292] PM: hibernation: Registered nosave memory: [mem 0x00000000-0x00000fff]\\r\\n[    0.056302] PM: hibernation: Registered nosave memory: [mem 0x00055000-0x0005ffff]\\r\\n[    0.057269] PM: hibernation: Registered nosave memory: [mem 0x00098000-0x0009ffff]\\r\\n[    0.058272] PM: hibernation: Registered nosave memory: [mem 0x000a0000-0x000fffff]\\r\\n[    0.059273] PM: hibernation: Registered nosave memory: [mem 0x25eed000-0x25fecfff]\\r\\n[    0.060238] PM: hibernation: Registered nosave memory: [mem 0x25fed000-0x260ecfff]\\r\\n[    0.061203] PM: hibernation: Registered nosave memory: [mem 0x260ed000-0x2616cfff]\\r\\n[    0.062169] PM: hibernation: Registered nosave memory: [mem 0x2616d000-0x2617efff]\\r\\n[    0.063136] PM: hibernation: Registered nosave memory: [mem 0x2617f000-0x261fefff]\\r\\n[    0.064110] [mem 0x26600000-0xffffffff] available for PCI devices\\r\\n[    0.064881] Booting paravirtualized kernel on KVM\\r\\n[    0.065481] clocksource: refined-jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645519600211568 ns\\r\\n[    0.071199] setup_percpu: NR_CPUS:8192 nr_cpumask_bits:1 nr_cpu_ids:1 nr_node_ids:1\\r\\n[    0.072527] percpu: Embedded 63 pages/cpu s221184 r8192 d28672 u2097152\\r\\n[    0.073444] kvm-guest: PV spinlocks disabled, single CPU\\r\\n[    0.074171] Built 1 zonelists, mobility grouping on.  Total pages: 150673\\r\\n[    0.075108] Policy zone: DMA32\\r\\n[    0.075690] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-5.10.0-26-cloud-amd64 root=UUID=e6fe3fcb-2478-4e7e-8072-4ced46dceac5 ro console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0 intel_iommu=off\\r\\n[    0.078655] DMAR: IOMMU disabled\\r\\n[    0.079286] Dentry cache hash table entries: 131072 (order: 8, 1048576 bytes, linear)\\r\\n[    0.080546] Inode-cache hash table entries: 65536 (order: 7, 524288 bytes, linear)\\r\\n[    0.081583] mem auto-init: stack:off, heap alloc:on, heap free:off\\r\\n[    0.084292] Memory: 208948K/625000K available (12296K kernel code, 2552K rwdata, 6956K rodata, 2468K init, 3724K bss, 103652K reserved, 0K cma-reserved)\\r\\n[    0.086299] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1\\r\\n[    0.087268] Kernel/User page tables isolation: enabled\\r\\nPoking KASLR using RDRAND RDTSC...\\r\\n[    0.088415] ftrace: allocating 33918 entries in 133 pages\\r\\n[    0.108935] ftrace: allocated 133 pages with 3 groups\\r\\n[    0.110330] rcu: Hierarchical RCU implementation.\\r\\n[    0.110974] rcu: \\tRCU restricting CPUs from NR_CPUS=8192 to nr_cpu_ids=1.\\r\\n[    0.111865] \\tRude variant of Tasks RCU enabled.\\r\\n[    0.112441] \\tTracing variant of Tasks RCU enabled.\\r\\n[    0.113053] rcu: RCU calculated value of scheduler-enlistment delay is 25 jiffies.\\r\\n[    0.114064] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=1\\r\\n[    0.119409] NR_IRQS: 524544, nr_irqs: 256, preallocated irqs: 16\\r\\n[    0.120483] random: crng init done\\r\\n[    0.120945] Console: colour dummy device 80x25\\r\\n[    0.121763] printk: console [tty0] enabled\\r\\n[    0.122413] printk: console [ttyS0] enabled\\r\\n[    0.122413] printk: console [ttyS0] enabled\\r\\n[    0.123526] printk: bootconsole [earlyser0] disabled\\r\\n[    0.123526] printk: bootconsole [earlyser0] disabled\\r\\n[    0.124856] ACPI: Core revision 20200925\\r\\n[    0.125499] APIC: Switch to symmetric I/O mode setup\\r\\n[    0.126669] x2apic enabled\\r\\n[    0.129453] Switched APIC routing to physical x2apic.\\r\\n[    0.134129] ..TIMER: vector=0x30 apic1=0 pin1=0 apic2=-1 pin2=-1\\r\\n[    0.135170] clocksource: tsc-early: mask: 0xffffffffffffffff max_cycles: 0x1fb6c80a799, max_idle_ns: 440795272342 ns\\r\\n[    0.136571] Calibrating delay loop (skipped) preset value.. 4400.31 BogoMIPS (lpj=8800632)\\r\\n[    0.140680] Last level iTLB entries: 4KB 64, 2MB 8, 4MB 8\\r\\n[    0.141412] Last level dTLB entries: 4KB 64, 2MB 0, 4MB 0, 1GB 4\\r\\n[    0.142247] Spectre V1 : Mitigation: usercopy/swapgs barriers and __user pointer sanitization\\r\\n[    0.143390] Spectre V2 : Mitigation: IBRS\\r\\n[    0.143939] Spectre V2 : Spectre v2 / SpectreRSB mitigation: Filling RSB on context switch\\r\\n[    0.144568] Spectre V2 : Spectre v2 / SpectreRSB : Filling RSB on VMEXIT\\r\\n[    0.145466] RETBleed: Mitigation: IBRS\\r\\n[    0.145988] Spectre V2 : mitigation: Enabling conditional Indirect Branch Prediction Barrier\\r\\n[    0.147108] Speculative Store Bypass: Mitigation: Speculative Store Bypass disabled via prctl and seccomp\\r\\n[    0.148575] MDS: Mitigation: Clear CPU buffers\\r\\n[    0.149183] TAA: Mitigation: Clear CPU buffers\\r\\n[    0.149789] MMIO Stale Data: Vulnerable: Clear CPU buffers attempted, no microcode\\r\\n[    0.150817] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'\\r\\n[    0.151849] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'\\r\\n[    0.152568] x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers'\\r\\n[    0.153445] x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]:  256\\r\\n[    0.154319] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.\\r\\n[    0.174317] Freeing SMP alternatives memory: 32K\\r\\n[    0.176616] pid_max: default: 32768 minimum: 301\\r\\n[    0.189921] LSM: Security Framework initializing\\r\\n[    0.190777] Yama: disabled by default; enable with sysctl kernel.yama.*\\r\\n[    0.191718] AppArmor: AppArmor initialized\\r\\n[    0.192315] TOMOYO Linux initialized\\r\\n[    0.192585] Mount-cache hash table entries: 2048 (order: 2, 16384 bytes, linear)\\r\\n[    0.193586] Mountpoint-cache hash table entries: 2048 (order: 2, 16384 bytes, linear)\\r\\n[    0.303707] smpboot: CPU0: Intel(R) Xeon(R) CPU @ 2.20GHz (family: 0x6, model: 0x4f, stepping: 0x0)\\r\\n[    0.304567] Performance Events: unsupported p6 CPU model 79 no PMU driver, software events only.\\r\\n[    0.304567] rcu: Hierarchical SRCU implementation.\\r\\n[    0.304567] NMI watchdog: Perf NMI watchdog permanently disabled\\r\\n[    0.304607] smp: Bringing up secondary CPUs ...\\r\\n[    0.305254] smp: Brought up 1 node, 1 CPU\\r\\n[    0.305804] smpboot: Max logical packages: 1\\r\\n[    0.306388] smpboot: Total of 1 processors activated (4400.31 BogoMIPS)\\r\\n[    0.309894] node 0 deferred pages initialised in 4ms\\r\\n[    0.310840] devtmpfs: initialized\\r\\n[    0.311414] x86/mm: Memory block size: 128MB\\r\\n[    0.312326] PM: Registering ACPI NVS region [mem 0x2617f000-0x261fefff] (524288 bytes)\\r\\n[    0.312624] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns\\r\\n[    0.313984] futex hash table entries: 256 (order: 2, 16384 bytes, linear)\\r\\n[    0.315079] NET: Registered protocol family 16\\r\\n[    0.316708] DMA: preallocated 128 KiB GFP_KERNEL pool for atomic allocations\\r\\n[    0.317887] DMA: preallocated 128 KiB GFP_KERNEL|GFP_DMA pool for atomic allocations\\r\\n[    0.319088] DMA: preallocated 128 KiB GFP_KERNEL|GFP_DMA32 pool for atomic allocations\\r\\n[    0.320255] audit: initializing netlink subsys (disabled)\\r\\n[    0.320680] thermal_sys: Registered thermal governor 'fair_share'\\r\\n[    0.320681] thermal_sys: Registered thermal governor 'bang_bang'\\r\\n[    0.321534] thermal_sys: Registered thermal governor 'step_wise'\\r\\n[    0.322340] thermal_sys: Registered thermal governor 'user_space'\\r\\n[    0.323166] thermal_sys: Registered thermal governor 'power_allocator'\\r\\n[    0.324578] audit: type=2000 audit(1700193823.829:1): state=initialized audit_enabled=0 res=1\\r\\n[    0.326750] cpuidle: using governor ladder\\r\\n[    0.327347] cpuidle: using governor menu\\r\\n[    0.327968] ACPI: bus type PCI registered\\r\\n[    0.328539] acpiphp: ACPI Hot Plug PCI Controller Driver version: 0.5\\r\\n[    0.328668] PCI: Using configuration type 1 for base access\\r\\n[    0.330144] Kprobes globally optimized\\r\\n[    0.330823] HugeTLB registered 1.00 GiB page size, pre-allocated 0 pages\\r\\n[    0.332570] HugeTLB registered 2.00 MiB page size, pre-allocated 0 pages\\r\\n[    0.460132] ACPI: Added _OSI(Module Device)\\r\\n[    0.460570] ACPI: Added _OSI(Processor Device)\\r\\n[    0.461236] ACPI: Added _OSI(3.0 _SCP Extensions)\\r\\n[    0.461875] ACPI: Added _OSI(Processor Aggregator Device)\\r\\n[    0.462629] ACPI: Added _OSI(Linux-Dell-Video)\\r\\n[    0.463234] ACPI: Added _OSI(Linux-Lenovo-NV-HDMI-Audio)\\r\\n[    0.463951] ACPI: Added _OSI(Linux-HPI-Hybrid-Graphics)\\r\\n[    0.465493] ACPI: 3 ACPI AML tables successfully acquired and loaded\\r\\n[    0.467274] ACPI: Interpreter enabled\\r\\n[    0.467821] ACPI: (supports S0 S3 S4 S5)\\r\\n[    0.468579] ACPI: Using IOAPIC for interrupt routing\\r\\n[    0.469275] PCI: Using host bridge windows from ACPI; if necessary, use \\\"pci=nocrs\\\" and report a bug\\r\\n[    0.470653] ACPI: Enabled 16 GPEs in block 00 to 0F\\r\\n[    0.473239] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff])\\r\\n[    0.474122] acpi PNP0A03:00: _OSC: OS supports [ASPM ClockPM Segments MSI HPX-Type3]\\r\\n[    0.475162] acpi PNP0A03:00: fail to add MMCONFIG information, can't access extended PCI configuration space under this bridge.\\r\\n[    0.477146] PCI host bridge to bus 0000:00\\r\\n[    0.477709] pci_bus 0000:00: root bus resource [io  0x0000-0x0cf7 window]\\r\\n[    0.478715] pci_bus 0000:00: root bus resource [io  0x0d00-0xffff window]\\r\\n[    0.479663] pci_bus 0000:00: root bus resource [mem 0x000a0000-0x000bffff window]\\r\\n[    0.480578] pci_bus 0000:00: root bus resource [mem 0x80000000-0xfebfefff window]\\r\\n[    0.481576] pci_bus 0000:00: root bus resource [bus 00-ff]\\r\\n[    0.482365] pci 0000:00:00.0: [8086:1237] type 00 class 0x060000\\r\\n[    0.486019] pci 0000:00:01.0: [8086:7110] type 00 class 0x060100\\r\\n[    0.500825] pci 0000:00:01.3: [8086:7113] type 00 class 0x068000\\r\\n[    0.519681] pci 0000:00:01.3: quirk: [io  0xb000-0xb03f] claimed by PIIX4 ACPI\\r\\n[    0.520874] pci 0000:00:03.0: [1af4:1004] type 00 class 0x000000\\r\\n[    0.528575] pci 0000:00:03.0: reg 0x10: [io  0xc040-0xc07f]\\r\\n[    0.533672] pci 0000:00:03.0: reg 0x14: [mem 0x80000000-0x8000007f]\\r\\n[    0.548861] pci 0000:00:04.0: [1af4:1000] type 00 class 0x020000\\r\\n[    0.555665] pci 0000:00:04.0: reg 0x10: [io  0xc000-0xc03f]\\r\\n[    0.560572] pci 0000:00:04.0: reg 0x14: [mem 0x80002000-0x8000203f]\\r\\n[    0.573906] pci 0000:00:05.0: [1af4:1005] type 00 class 0x00ff00\\r\\n[    0.580574] pci 0000:00:05.0: reg 0x10: [io  0xc080-0xc09f]\\r\\n[    0.586726] pci 0000:00:05.0: reg 0x14: [mem 0x80001000-0x8000103f]\\r\\n[    0.601296] ACPI: PCI Interrupt Link [LNKA] (IRQs 5 *10 11)\\r\\n[    0.603312] ACPI: PCI Interrupt Link [LNKB] (IRQs 5 *10 11)\\r\\n[    0.605636] ACPI: PCI Interrupt Link [LNKC] (IRQs 5 10 *11)\\r\\n[    0.607598] ACPI: PCI Interrupt Link [LNKD] (IRQs 5 10 *11)\\r\\n[    0.611697] ACPI: PCI Interrupt Link [LNKS] (IRQs *9)\\r\\n[    0.612813] iommu: Default domain type: Translated \\r\\n[    0.613589] vgaarb: loaded\\r\\n[    0.614061] Registered efivars operations\\r\\n[    0.614787] NetLabel: Initializing\\r\\n[    0.615327] NetLabel:  domain hash size = 128\\r\\n[    0.615923] NetLabel:  protocols = UNLABELED CIPSOv4 CALIPSO\\r\\n[    0.616587] NetLabel:  unlabeled traffic allowed by default\\r\\n[    0.617348] PCI: Using ACPI for IRQ routing\\r\\n[    0.618056] clocksource: Switched to clocksource kvm-clock\\r\\n[    0.628891] VFS: Disk quotas dquot_6.6.0\\r\\n[    0.629490] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)\\r\\n[    0.630665] AppArmor: AppArmor Filesystem Enabled\\r\\n[    0.631324] pnp: PnP ACPI init\\r\\n[    0.632174] pnp: PnP ACPI: found 7 devices\\r\\n[    0.638068] clocksource: acpi_pm: mask: 0xffffff max_cycles: 0xffffff, max_idle_ns: 2085701024 ns\\r\\n[    0.639390] NET: Registered protocol family 2\\r\\n[    0.640279] IP idents hash table entries: 16384 (order: 5, 131072 bytes, linear)\\r\\n[    0.642617] tcp_listen_portaddr_hash hash table entries: 512 (order: 1, 8192 bytes, linear)\\r\\n[    0.643878] TCP established hash table entries: 8192 (order: 4, 65536 bytes, linear)\\r\\n[    0.644963] TCP bind hash table entries: 8192 (order: 5, 131072 bytes, linear)\\r\\n[    0.645946] TCP: Hash tables configured (established 8192 bind 8192)\\r\\n[    0.647263] UDP hash table entries: 512 (order: 2, 16384 bytes, linear)\\r\\n[    0.648178] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes, linear)\\r\\n[    0.649145] NET: Registered protocol family 1\\r\\n[    0.649746] NET: Registered protocol family 44\\r\\n[    0.650360] pci_bus 0000:00: resource 4 [io  0x0000-0x0cf7 window]\\r\\n[    0.651189] pci_bus 0000:00: resource 5 [io  0x0d00-0xffff window]\\r\\n[    0.652018] pci_bus 0000:00: resource 6 [mem 0x000a0000-0x000bffff window]\\r\\n[    0.653023] pci_bus 0000:00: resource 7 [mem 0x80000000-0xfebfefff window]\\r\\n[    0.654013] pci 0000:00:00.0: Limiting direct PCI/PCI transfers\\r\\n[    0.654965] PCI: CLS 0 bytes, default 64\\r\\n[    0.655545] Trying to unpack rootfs image as initramfs...\\r\\n[    0.868747] Freeing initrd memory: 13832K\\r\\n[    0.869409] clocksource: tsc: mask: 0xffffffffffffffff max_cycles: 0x1fb6c80a799, max_idle_ns: 440795272342 ns\\r\\n[    0.870790] clocksource: Switched to clocksource tsc\\r\\n[    0.871684] Initialise system trusted keyrings\\r\\n[    0.872370] Key type blacklist registered\\r\\n[    0.872996] workingset: timestamp_bits=36 max_order=18 bucket_order=0\\r\\n[    0.874768] zbud: loaded\\r\\n[    0.875451] Key type asymmetric registered\\r\\n[    0.876015] Asymmetric key parser 'x509' registered\\r\\n[    0.876717] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 252)\\r\\n[    0.877753] io scheduler mq-deadline registered\\r\\n[    0.878944] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled\\r\\n[    0.879891] 00:03: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A\\r\\n[    0.881103] 00:04: ttyS1 at I/O 0x2f8 (irq = 3, base_baud = 115200) is a 16550A\\r\\n[    0.882343] 00:05: ttyS2 at I/O 0x3e8 (irq = 6, base_baud = 115200) is a 16550A\\r\\n[    0.883609] 00:06: ttyS3 at I/O 0x2e8 (irq = 7, base_baud = 115200) is a 16550A\\r\\n[    0.884960] i8042: PNP: PS/2 Controller [PNP0303:KBD,PNP0f13:MOU] at 0x60,0x64 irq 1,12\\r\\n[    0.886134] i8042: Warning: Keylock active\\r\\n[    0.888083] serio: i8042 KBD port at 0x60,0x64 irq 1\\r\\n[    0.888821] serio: i8042 AUX port at 0x60,0x64 irq 12\\r\\n[    0.889640] rtc_cmos 00:00: RTC can wake from S4\\r\\n[    0.890965] rtc_cmos 00:00: registered as rtc0\\r\\n[    0.891673] rtc_cmos 00:00: setting system clock to 2023-11-17T04:03:44 UTC (1700193824)\\r\\n[    0.892826] rtc_cmos 00:00: alarms up to one day, 114 bytes nvram\\r\\n[    0.893666] intel_pstate: CPU model not supported\\r\\n[    0.894500] NET: Registered protocol family 10\\r\\n[    0.902476] Segment Routing with IPv6\\r\\n[    0.903051] mip6: Mobile IPv6\\r\\n[    0.903490] NET: Registered protocol family 17\\r\\n[    0.904345] IPI shorthand broadcast: enabled\\r\\n[    0.904948] sched_clock: Marking stable (892139515, 12093408)-\\u003e(906097741, -1864818)\\r\\n[    0.906042] registered taskstats version 1\\r\\n[    0.906630] Loading compiled-in X.509 certificates\\r\\n[    0.939254] Loaded X.509 cert 'Debian Secure Boot CA: 6ccece7e4c6c0d1f6149f3dd27dfcc5cbb419ea1'\\r\\n[    0.940959] Loaded X.509 cert 'Debian Secure Boot Signer 2022 - linux: 14011249c2675ea8e5148542202005810584b25f'\\r\\n[    0.942356] Key type .fscrypt registered\\r\\n[    0.942899] Key type fscrypt-provisioning registered\\r\\n[    0.943613] AppArmor: AppArmor sha1 policy hashing enabled\\r\\n[    0.945910] Freeing unused decrypted memory: 2036K\\r\\n[    0.947243] Freeing unused kernel image (initmem) memory: 2468K\\r\\n[    0.956128] Write protecting the kernel read-only data: 22528k\\r\\n[    0.957663] Freeing unused kernel image (text/rodata gap) memory: 2036K\\r\\n[    0.958870] Freeing unused kernel image (rodata/data gap) memory: 1236K\\r\\n[    0.960268] x86/mm: Checked W+X mappings: passed, no W+X pages found.\\r\\n[    0.961209] x86/mm: Checking user space page tables\\r\\n[    0.961951] x86/mm: Checked W+X mappings: passed, no W+X pages found.\\r\\n[    0.962845] Run /init as init process\\r\\nLoading, please wait...\\r\\nStarting version 247.3-7+deb11u4\\r\\n[    1.027130] PCI Interrupt Link [LNKC] enabled at IRQ 11\\r\\n[    1.027936] virtio-pci 0000:00:03.0: virtio_pci: leaving for legacy driver\\r\\n[    1.056157] PCI Interrupt Link [LNKD] enabled at IRQ 10\\r\\n[    1.056936] virtio-pci 0000:00:04.0: virtio_pci: leaving for legacy driver\\r\\n[    1.062192] PCI Interrupt Link [LNKA] enabled at IRQ 10\\r\\n[    1.062992] virtio-pci 0000:00:05.0: virtio_pci: leaving for legacy driver\\r\\n[    1.084419] SCSI subsystem initialized\\r\\n[    1.093724] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input0\\r\\n[    1.118084] virtio_net virtio1 ens4: renamed from eth0\\r\\n[    1.126364] scsi host0: Virtio SCSI HBA\\r\\n[    1.133045] scsi 0:0:1:0: Direct-Access     Google   PersistentDisk   1    PQ: 0 ANSI: 6\\r\\n[    1.153482] sd 0:0:1:0: [sda] 20971520 512-byte logical blocks: (10.7 GB/10.0 GiB)\\r\\n[    1.154594] sd 0:0:1:0: [sda] 4096-byte physical blocks\\r\\n[    1.155471] sd 0:0:1:0: [sda] Write Protect is off\\r\\n[    1.156440] sd 0:0:1:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA\\r\\n[    1.160803]  sda: sda1 sda14 sda15\\r\\n[    1.172566] sd 0:0:1:0: [sda] Attached SCSI disk\\r\\nBegin: Loading essential drivers ... done.\\r\\nBegin: Running /scripts/init-premount ... done.\\r\\nBegin: Mounting root file system ... Begin: Running /scripts/local-top ... done.\\r\\nBegin: Running /scripts/local[    1.198383] gce-disk-expand: Resizing partition on \\r\\n-premount ... [    1.222901]  sda: sda1 sda14 sda15\\r\\n[    1.234471] gce-disk-expand: Disk /dev/sda1 doesn't need resizing.\\r\\ndone.\\r\\nBegin: Will now check root file system ... fsck from util-linux 2.36.1\\r\\n[/sbin/fsck.ext4 (1) -- /dev/sda1] fsck.ext4 -a -C0 /dev/sda1 \\r\\n/dev/sda1: clean, 82191/647168 files, 583028/2588667 blocks\\r\\ndone.\\r\\n[    1.303453] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null)\\r\\ndone.\\r\\nBegin: Running /scripts/local-bottom ... done.\\r\\nBegin: Running /scripts/init-bottom ... done.\\r\\n[    1.328083] Not activating Mandatory Access Control as /sbin/tomoyo-init does not exist.\\r\\n[    1.437623] systemd[1]: Inserted module 'autofs4'\\r\\n[    1.493324] systemd[1]: systemd 247.3-7+deb11u4 running in system mode. (+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +ZSTD +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=unified)\\r\\n[    1.496588] systemd[1]: Detected virtualization kvm.\\r\\n[    1.497395] systemd[1]: Detected architecture x86-64.\\r\\n\\r\\nWelcome to \\u001b[1mDebian GNU/Linux 11 (bullseye)\\u001b[0m!\\r\\n\\r\\n[    1.508540] systemd[1]: Set hostname to \\u003cdebian\\u003e.\\r\\n[    1.511050] systemd[1]: Initializing machine ID from KVM UUID.\\r\\n[    1.511999] systemd[1]: Installed transient /etc/machine-id file.\\r\\n[    1.972842] systemd[1]: Condition check resulted in Root Slice being skipped.\\r\\n[    1.974079] systemd[1]: Condition check resulted in System Slice being skipped.\\r\\n[    1.975658] systemd[1]: Queued start job for default target Graphical Interface.\\r\\n[    1.977660] systemd[1]: Created slice system-getty.slice.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Created slice \\u001b[0;1;39msystem-getty.slice\\u001b[0m.\\r\\n[    1.988412] systemd[1]: Created slice system-modprobe.slice.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Created slice \\u001b[0;1;39msystem-modprobe.slice\\u001b[0m.\\r\\n[    2.000470] systemd[1]: Created slice system-serial\\\\x2dgetty.slice.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Created slice \\u001b[0;1;39msystem-serial\\\\x2dgetty.slice\\u001b[0m.\\r\\n[    2.012408] systemd[1]: Created slice system-systemd\\\\x2dgrowfs.slice.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Created slice \\u001b[0;1;39msystem-systemd\\\\x2dgrowfs.slice\\u001b[0m.\\r\\n[    2.024395] systemd[1]: Created slice User and Session Slice.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Created slice \\u001b[0;1;39mUser and Session Slice\\u001b[0m.\\r\\n[    2.036241] systemd[1]: Started Dispatch Password Requests to Console Directory Watch.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mDispatch Password …ts to Console Directory Watch\\u001b[0m.\\r\\n[    2.048216] systemd[1]: Started Forward Password Requests to Wall Directory Watch.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mForward Password R…uests to Wall Directory Watch\\u001b[0m.\\r\\n[    2.060352] systemd[1]: Set up automount Arbitrary Executable File Formats File System Automount Point.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Set up automount \\u001b[0;1;39mArbitrary…s File System Automount Point\\u001b[0m.\\r\\n[    2.072181] systemd[1]: Reached target Local Encrypted Volumes.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mLocal Encrypted Volumes\\u001b[0m.\\r\\n[    2.084183] systemd[1]: Reached target Paths.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mPaths\\u001b[0m.\\r\\n[    2.096149] systemd[1]: Reached target Remote File Systems.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mRemote File Systems\\u001b[0m.\\r\\n[    2.108140] systemd[1]: Reached target Slices.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mSlices\\u001b[0m.\\r\\n[    2.120166] systemd[1]: Reached target Swap.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mSwap\\u001b[0m.\\r\\n[    2.132147] systemd[1]: Reached target System Time Set.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mSystem Time Set\\u001b[0m.\\r\\n[    2.144334] systemd[1]: Listening on Syslog Socket.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Listening on \\u001b[0;1;39mSyslog Socket\\u001b[0m.\\r\\n[    2.156291] systemd[1]: Listening on fsck to fsckd communication Socket.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Listening on \\u001b[0;1;39mfsck to fsckd communication Socket\\u001b[0m.\\r\\n[    2.168285] systemd[1]: Listening on initctl Compatibility Named Pipe.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Listening on \\u001b[0;1;39minitctl Compatibility Named Pipe\\u001b[0m.\\r\\n[    2.180454] systemd[1]: Listening on Journal Audit Socket.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Listening on \\u001b[0;1;39mJournal Audit Socket\\u001b[0m.\\r\\n[    2.192301] systemd[1]: Listening on Journal Socket (/dev/log).\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Listening on \\u001b[0;1;39mJournal Socket (/dev/log)\\u001b[0m.\\r\\n[    2.204323] systemd[1]: Listening on Journal Socket.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Listening on \\u001b[0;1;39mJournal Socket\\u001b[0m.\\r\\n[    2.216869] systemd[1]: Listening on udev Control Socket.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Listening on \\u001b[0;1;39mudev Control Socket\\u001b[0m.\\r\\n[    2.228296] systemd[1]: Listening on udev Kernel Socket.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Listening on \\u001b[0;1;39mudev Kernel Socket\\u001b[0m.\\r\\n[    2.241091] systemd[1]: Mounting Huge Pages File System...\\r\\n         Mounting \\u001b[0;1;39mHuge Pages File System\\u001b[0m...\\r\\n[    2.252968] systemd[1]: Mounting POSIX Message Queue File System...\\r\\n         Mounting \\u001b[0;1;39mPOSIX Message Queue File System\\u001b[0m...\\r\\n[    2.264934] systemd[1]: Mounting Kernel Debug File System...\\r\\n         Mounting \\u001b[0;1;39mKernel Debug File System\\u001b[0m...\\r\\n[    2.276955] systemd[1]: Mounting Kernel Trace File System...\\r\\n         Mounting \\u001b[0;1;39mKernel Trace File System\\u001b[0m...\\r\\n[    2.289000] systemd[1]: Starting Create list of static device nodes for the current kernel...\\r\\n         Starting \\u001b[0;1;39mCreate list of st…odes for the current kernel\\u001b[0m...\\r\\n[    2.300930] systemd[1]: Starting Load Kernel Module configfs...\\r\\n         Starting \\u001b[0;1;39mLoad Kernel Module configfs\\u001b[0m...\\r\\n[    2.312919] systemd[1]: Starting Load Kernel Module drm...\\r\\n         Starting \\u001b[0;1;39mLoad Kernel Module drm\\u001b[0m...\\r\\n[    2.324883] systemd[1]: Starting Load Kernel Module fuse...\\r\\n         Starting \\u001b[0;1;39mLoad Kernel Module fuse\\u001b[0m...\\r\\n[    2.335869] fuse: init (API version 7.32)\\r\\n[    2.337237] systemd[1]: Condition check resulted in Set Up Additional Binary Formats being skipped.\\r\\n[    2.338529] systemd[1]: Condition check resulted in File System Check on Root Device being skipped.\\r\\n[    2.341100] systemd[1]: Starting Journal Service...\\r\\n         Starting \\u001b[0;1;39mJournal Service\\u001b[0m...\\r\\n[    2.353548] systemd[1]: Starting Load Kernel Modules...\\r\\n         Starting \\u001b[0;1;39mLoad Kernel Modules\\u001b[0m...\\r\\n[    2.364968] systemd[1]: Starting Remount Root and Kernel File Systems...\\r\\n         Starting \\u001b[0;1;39mRemount Root and Kernel File Systems\\u001b[0m...\\r\\n[    2.376830] systemd[1]: Starting Coldplug All udev Devices...\\r\\n         Starting \\u001b[0;1;39mColdplug All udev Devices\\u001b[0m...\\r\\n[    2.389695] systemd[1]: Mounted Huge Pages File System.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Mounted \\u001b[0;1;39mHuge Pages File System\\u001b[0m.\\r\\n[    2.392342] systemd[1]: Mounted POSIX Message Queue File System.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Mounted \\u001b[0;1;39mPOSIX Message Queue File System\\u001b[0m.\\r\\n[    2.396356] systemd[1]: Mounted Kernel Debug File System.\\r\\n[    2.397669] EXT4-fs (sda1): re-mounted. Opts: discard,errors=remount-ro\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Mounted \\u001b[0;1;39mKernel Debug File System\\u001b[0m.\\r\\n[    2.412895] systemd[1]: Mounted Kernel Trace File System.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Mounted \\u001b[0;1;39mKernel Trace File System\\u001b[0m.\\r\\n[    2.424280] systemd[1]: Started Journal Service.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mJournal Service\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mCreate list of st… nodes for the current kernel\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mLoad Kernel Module configfs\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mLoad Kernel Module drm\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mLoad Kernel Module fuse\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mLoad Kernel Modules\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mRemount Root and Kernel File Systems\\u001b[0m.\\r\\n         Mounting \\u001b[0;1;39mFUSE Control File System\\u001b[0m...\\r\\n         Mounting \\u001b[0;1;39mKernel Configuration File System\\u001b[0m...\\r\\n         Starting \\u001b[0;1;39mGrow File System on /\\u001b[0m...\\r\\n         Starting \\u001b[0;1;39mFlush Journal to Persistent Storage\\u001b[0m...\\r\\n[    2.550327] EXT4-fs (sda1): resizing filesystem from 2588667 to 2588667 blocks\\r\\n         Starting \\u001b[0;1;39mLoad/Save Random Seed\\u001b[0m...\\r\\n[    2.566378] systemd-journald[180]: Received client request to flush runtime journal.\\r\\n         Starting \\u001b[0;1;39mApply Kernel Variables\\u001b[0m...\\r\\n         Starting \\u001b[0;1;39mCreate System Users\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mColdplug All udev Devices\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Mounted \\u001b[0;1;39mFUSE Control File System\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Mounted \\u001b[0;1;39mKernel Configuration File System\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mGrow File System on /\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mFlush Journal to Persistent Storage\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mLoad/Save Random Seed\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mApply Kernel Variables\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mCreate System Users\\u001b[0m.\\r\\n         Starting \\u001b[0;1;39mHelper to synchronize boot up for ifupdown\\u001b[0m...\\r\\n         Starting \\u001b[0;1;39mCreate Static Device Nodes in /dev\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mHelper to synchronize boot up for ifupdown\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mCreate Static Device Nodes in /dev\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mLocal File Systems (Pre)\\u001b[0m.\\r\\n         Starting \\u001b[0;1;39mRule-based Manage…for Device Events and Files\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mRule-based Manager for Device Events and Files\\u001b[0m.\\r\\n[    2.817742] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input2\\r\\n[    2.832340] ACPI: Power Button [PWRF]\\r\\n[    2.832937] input: Sleep Button as /devices/LNXSYSTM:00/LNXSLPBN:00/input/input3\\r\\n[    2.833954] ACPI: Sleep Button [SLPF]\\r\\n[    2.858324] sd 0:0:1:0: Attached scsi generic sg0 type 0\\r\\n[    2.868718] tpm_tis MSFT0101:00: 2.0 TPM (device-id 0x9009, rev-id 0)\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Found device \\u001b[0;1;39m/dev/ttyS0\\u001b[0m.\\r\\n[    2.876076] pstore: Using crash dump compression: deflate\\r\\n[    2.876906] pstore: Registered efi as persistent store backend\\r\\n[    2.921526] RAPL PMU: API unit is 2^-32 Joules, 0 fixed counters, 10737418240 ms ovfl timer\\r\\n[    2.957276] cryptd: max_cpu_qlen set to 1000\\r\\n[    2.992561] AVX2 version of gcm_enc/dec engaged.\\r\\n[    2.993287] AES CTR mode by8 optimization enabled\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Found device \\u001b[0;1;39mPersistentDisk 15\\u001b[0m.\\r\\n         Mounting \\u001b[0;1;39m/boot/efi\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Mounted \\u001b[0;1;39m/boot/efi\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Found device \\u001b[0;1;39mVirtio network device\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mLocal File Systems\\u001b[0m.\\r\\n         Starting \\u001b[0;1;39mLoad AppArmor profiles\\u001b[0m...\\r\\n         Starting \\u001b[0;1;39mCommit a transient machine-id on disk\\u001b[0m...\\r\\n         Starting \\u001b[0;1;39mCreate Volatile Files and Directories\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mCreate Volatile Files and Directories\\u001b[0m.\\r\\n         Starting \\u001b[0;1;39mUpdate UTMP about System Boot/Shutdown\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mUpdate UTMP about System Boot/Shutdown\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mCommit a transient machine-id on disk\\u001b[0m.\\r\\n[    3.408377] audit: type=1400 audit(1700193827.016:2): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"nvidia_modprobe\\\" pid=292 comm=\\\"apparmor_parser\\\"\\r\\n[    3.411744] audit: type=1400 audit(1700193827.016:3): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"nvidia_modprobe//kmod\\\" pid=292 comm=\\\"apparmor_parser\\\"\\r\\n[    3.496816] audit: type=1400 audit(1700193827.104:4): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"/usr/sbin/chronyd\\\" pid=293 comm=\\\"apparmor_parser\\\"\\r\\n[    3.538548] audit: type=1400 audit(1700193827.144:5): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"lsb_release\\\" pid=294 comm=\\\"apparmor_parser\\\"\\r\\n[    3.657331] audit: type=1400 audit(1700193827.264:6): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"tcpdump\\\" pid=295 comm=\\\"apparmor_parser\\\"\\r\\n[    3.687179] audit: type=1400 audit(1700193827.292:7): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"/usr/sbin/haveged\\\" pid=296 comm=\\\"apparmor_parser\\\"\\r\\n[    3.752802] audit: type=1400 audit(1700193827.360:8): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"/usr/bin/man\\\" pid=297 comm=\\\"apparmor_parser\\\"\\r\\n[    3.755808] audit: type=1400 audit(1700193827.360:9): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"man_filter\\\" pid=297 comm=\\\"apparmor_parser\\\"\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mLoad AppAr[    3.760565] audit: type=1400 audit(1700193827.364:10): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"man_groff\\\" pid=297 comm=\\\"apparmor_parser\\\"\\r\\nmor profiles\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mEntropy Daemon based on the HAVEGE algorithm\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mSystem Initialization\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mGCE Workload Certificate refresh timer\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mNSS cache refresh timer\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mDaily Cleanup of Temporary Directories\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Listening on \\u001b[0;1;39mD-Bus System Message Bus Socket\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Listening on \\u001b[0;1;39mUUID daemon activation socket\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mSockets\\u001b[0m.\\r\\n         Starting \\u001b[0;1;39mResize root filesystem if needed\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mifup for ens4\\u001b[0m.\\r\\n         Starting \\u001b[0;1;39mRaise network interfaces\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mResize root filesystem if needed\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mBasic System\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mRegular background program processing daemon\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mD-Bus System Message Bus\\u001b[0m.\\r\\n         Starting \\u001b[0;1;39mRemove Stale Onli…t4 Metadata Check Snapshots\\u001b[0m...\\r\\n         Starting \\u001b[0;1;39mSystem Logging Service\\u001b[0m...\\r\\n         Starting \\u001b[0;1;39mUser Login Management\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mSystem Logging Service\\u001b[0m.\\r\\nNov 17 04:03:47 debian kernel: [    0.000000] Linux version 5.10.0-26-cloud-amd64 (debian-kernel@lists.debian.org) (gcc-10 (Debian 10.2.1-6) 10.2.1 20210110, GNU ld (GNU Binutils for Debian) 2.35.2) #1 SMP Debian 5.10.197-1 (2023-09-29)\\r\\nNov 17 04:03:47 debian kernel: [    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-5.10.0-26-cloud-amd64 root=UUID=e6fe3fcb-2478-4e7e-8072-4ced46dceac5 ro console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0 intel_iommu=off\\r\\nNov 17 04:03:47 debian kernel: [    0.000000] BIOS-provided physical RAM map:\\r\\nNov 17 04:03:47 debian kernel: [    0.000000] BIOS-e820: [mem 0x0000000000000000-0x0000000000000fff] reserved\\r\\nNov 17 04:03:47 debian kernel: [    0.000000] BIOS-e820: [mem 0x0000000000001000-0x0000000000054fff] usable\\r\\nNov 17 04:03:47 debian kernel: [    0.000000] BIOS-e820: [mem 0x0000000000055000-0x000000000005ffff] reserved\\r\\nNov 17 04:03:47 debian kernel: [    0.000000] BIOS-e820: [mem 0x0000000000060000-0x0000000000097fff] usable\\r\\nNov 17 04:03:47 debian kernel: [    0.000000] BIOS-e820: [mem 0x0000000000098000-0x000000000009ffff] reserved\\r\\nNov 17 04:03:47 debian kernel: [    0.000000] BIOS-e820: [mem 0x0000000000100000-0x0000000025eecfff] usable\\r\\nNov 17 04:03:47 debian kernel: [    0.000000] BIOS-e820: [mem 0x0000000025eed000-0x0000000025fecfff] reserved\\r\\nNov 17 04:03:47 debian kernel: [    0.000000] BIOS-e820: [mem 0x0000000025fed000-0x00000000260ecfff] type 20\\r\\nNov 17 04:03:47 debian kernel: [    0.000000] BIOS-e820: [mem 0x00000000260ed000-0x000000002616cfff] reserved\\r\\nNov 17 04:03:47 debian kernel: [    0.000000] BIOS-e820: [mem 0x000000002616d000-0x000000002617efff] ACPI data\\r\\nNov 17 04:03:47 debian kernel: [    0.000000] BIOS-e820: [mem 0x000000002617f000-0x00000000261fefff] ACPI NVS\\r\\nNov 17 04:03:47 debian kernel: [    0.000000] BIOS-e820: [mem 0x00000000261ff000-0x00000000265dffff] usable\\r\\nNov 17 04:03:47 debian kernel: [    0.000000] BIOS-e820: [mem 0x00000000265e0000-0x00000000265fffff] reserved\\r\\nNov 17 04:03:47 debian kernel: [    0.000000] printk: bootconsole [earlyser0] enabled\\r\\nNov 17 04:03:47 debian kernel: [    0.000000] NX (Execute Disable) protection: active\\r\\nNov 17 04:03:47 debian kernel: [    0.000000] efi: EFI v2.70 by EDK II\\r\\nNov 17 04:03:47 debian kernel: [    0.000000] efi: TPMFinalLog=0x261f7000 ACPI=0x2617e000 ACPI 2.0=0x2617e014 SMBIOS=0x25fca000 MEMATTR=0x249a0018 \\r\\nNov 17 04:03:47 debian kernel: [    0.000000] secureboot: Secure boot disabled\\r\\nNov 17 04:03:47 debian kernel: [    0.000000] SMBIOS 2.4 present.\\r\\nNov 17 04:03:47 debian kernel: [    0.000000] DMI: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/09/2023\\r\\nNov 17 04:03:47 debian kernel: [    0.000000] Hypervisor detected: KVM\\r\\nNov 17 04:03:47 debian kernel: [    0.000000] kvm-clock: Using msrs 4b564d01 and 4b564d00\\r\\nNov 17 04:03:47 debian kernel: [    0.000000] kvm-clock: cpu 0, msr c201001, primary cpu clock\\r\\nNov 17 04:03:47 debian kernel: [    0.000000] kvm-clock: using sched offset of 6456270974 cycles\\r\\nNov 17 04:03:47 debian kernel: [    0.000734] clocksource: kvm-clock: mask: 0xffffffffffffffff max_cycles: 0x1cd42e4dffb, max_idle_ns: 881590591483 ns\\r\\nNov 17 04:03:47 debian kernel: [    0.002884] tsc: Detected 2200.158 MHz processor\\r\\nNov 17 04:03:47 debian kernel: [    0.003576] e820: update [mem 0x00000000-0x00000fff] usable ==\\u003e reserved\\r\\nNov 17 04:03:47 debian kernel: [    0.003579] e820: remove [mem 0x000a0000-0x000fffff] usable\\r\\nNov 17 04:03:47 debian kernel: [    0.003587] last_pfn = 0x265e0 max_arch_pfn = 0x400000000\\r\\nNov 17 04:03:47 debian kernel: [    0.004341] MTRR default type: write-back\\r\\nNov 17 04:03:47 debian kernel: [    0.004342] MTRR fixed ranges enabled:\\r\\nNov 17 04:03:47 debian kernel: [    0.004343]   00000-9FFFF write-back\\r\\nNov 17 04:03:47 debian kernel: [    0.004344]   A0000-FFFFF uncachable\\r\\nNov 17 04:03:47 debian kernel: [    0.004345] MTRR variable ranges enabled:\\r\\nNov 17 04:03:47 debian kernel: [    0.004347]   0 base 000080000000 mask 3FFF80000000 uncachable\\r\\nNov 17 04:03:47 debian kernel: [    0.004347]   1 disabled\\r\\nNov 17 04:03:47 debian kernel: [    0.004348]   2 disabled\\r\\nNov 17 04:03:47 debian kernel: [    0.004349]   3 disabled\\r\\nNov 17 04:03:47 debian kernel: [    0.004349]   4 disabled\\r\\nNov 17 04:03:47 debian kernel: [    0.004350]   5 disabled\\r\\nNov 17 04:03:47 debian kernel: [    0.004350]   6 disabled\\r\\nNov 17 04:03:47 debian kernel: [    0.004351]   7 disabled\\r\\nNov 17 04:03:47 debian kernel: [    0.004363] x86/PAT: Configuration [0-7]: WB  WC  UC- UC  WB  WP  UC- WT  \\r\\nNov 17 04:03:47 debian kernel: [    0.005841] Using GB pages for direct mapping\\r\\nNov 17 04:03:47 debian kernel: [    0.006760] RAMDISK: [mem 0x2327f000-0x24000fff]\\r\\nNov 17 04:03:47 debian kernel: [    0.007361] ACPI: Early table checksum verification disabled\\r\\nNov 17 04:03:47 debian kernel: [    0.008083] ACPI: RSDP 0x000000002617E014 000024 (v02 Google)\\r\\nNov 17 04:03:47 debian kernel: [    0.008863] ACPI: XSDT 0x000000002617D0E8 00005C (v01 Google GOOGFACP 00000001      01000013)\\r\\nNov 17 04:03:47 debian kernel: [    0.010056] ACPI: FACP 0x0000000026178000 0000F4 (v02 Google GOOGFACP 00000001 GOOG 00000001)\\r\\nNov 17 04:03:47 debian kernel: [    0.011203] ACPI: DSDT 0x0000000026179000 001A64 (v01 Google GOOGDSDT 00000001 GOOG 00000001)\\r\\nNov 17 04:03:47 debian kernel: [    0.012333] ACPI: FACS 0x00000000261F2000 000040\\r\\nNov 17 04:03:47 debian kernel: [    0.012966] ACPI: SSDT 0x000000002617C000 000316 (v02 GOOGLE Tpm2Tabl 00001000 INTL 20211217)\\r\\nNov 17 04:03:47 debian kernel: [    0.014054] ACPI: TPM2 0x000000002617B000 000034 (v04 GOOGLE          00000001 GOOG 00000001)\\r\\nNov 17 04:03:47 debian kernel: [    0.015175] ACPI: SRAT 0x0000000026177000 0000B8 (v03 Google GOOGSRAT 00000001 GOOG 00000001)\\r\\nNov 17 04:03:47 debian kernel: [    0.016277] ACPI: APIC 0x0000000026176000 00006E (v05 Google GOOGAPIC 00000001 GOOG 00000001)\\r\\nNov 17 04:03:47 debian kernel: [    0.017366] ACPI: SSDT 0x0000000026175000 00091F (v01 Google GOOGSSDT 00000001 GOOG 00000001)\\r\\nNov 17 04:03:47 debian kernel: [    0.018500] ACPI: WAET 0x0000000026174000 000028 (v01 Google GOOGWAET 00000001 GOOG 00000001)\\r\\nNov 17 04:03:47 debian kernel: [    0.019702] ACPI: Reserving FACP table memory at [mem 0x26178000-0x261780f3]\\r\\nNov 17 04:03:47 debian kernel: [    0.020615] ACPI: Reserving DSDT table memory at [mem 0x26179000-0x2617aa63]\\r\\nNov 17 04:03:47 debian kernel: [    0.021530] ACPI: Reserving FACS table memory at [mem 0x261f2000-0x261f203f]\\r\\nNov 17 04:03:47 debian kernel: [    0.022454] ACPI: Reserving SSDT table memory at [mem 0x2617c000-0x2617c315]\\r\\nNov 17 04:03:47 debian kernel: [    0.023355] ACPI: Reserving TPM2 table memory at [mem 0x2617b000-0x2617b033]\\r\\nNov 17 04:03:47 debian kernel: [    0.024340] ACPI: Reserving SRAT table memory at [mem 0x26177000-0x261770b7]\\r\\nNov 17 04:03:47 debian kernel: [    0.025411] ACPI: Reserving APIC table memory at [mem 0x26176000-0x2617606d]\\r\\nNov 17 04:03:47 debian kernel: [    0.026702] ACPI: Reserving SSDT table memory at [mem 0x26175000-0x2617591e]\\r\\nNov 17 04:03:47 debian kernel: [    0.027613] ACPI: Reserving WAET table memory at [mem 0x26174000-0x26174027]\\r\\nNov 17 04:03:47 debian kernel: [    0.028605] ACPI: Local APIC address 0xfee00000\\r\\nNov 17 04:03:47 debian kernel: [    0.028637] SRAT: PXM 0 -\\u003e APIC 0x00 -\\u003e Node 0\\r\\nNov 17 04:03:47 debian kernel: [    0.029245] ACPI: SRAT: Node 0 PXM 0 [mem 0x00000000-0x0009ffff]\\r\\nNov 17 04:03:47 debian kernel: [    0.030009] ACPI: SRAT: Node 0 PXM 0 [mem 0x00100000-0x265fffff]\\r\\nNov 17 04:03:47 debian kernel: [    0.030872] NUMA: Node 0 [mem 0x00000000-0x0009ffff] + [mem 0x00100000-0x265dffff] -\\u003e [mem 0x00000000-0x265dffff]\\r\\nNov 17 04:03:47 debian kernel: [    0.032225] NODE_DATA(0) allocated [mem 0x26498000-0x264c1fff]\\r\\nNov 17 04:03:47 debian kernel: [    0.033370] Zone ranges:\\r\\nNov 17 04:03:47 debian kernel: [    0.033725]   DMA      [mem 0x0000000000001000-0x0000000000ffffff]\\r\\nNov 17 04:03:47 debian kernel: [    0.034554]   DMA32    [mem 0x0000000001000000-0x00000000265dffff]\\r\\nNov 17 04:03:47 debian kernel: [    0.035451]   Normal   empty\\r\\nNov 17 04:03:47 debian kernel: [    0.035842]   Device   empty\\r\\nNov 17 04:03:47 debian kernel: [    0.036232] Movable zone start for each node\\r\\nNov 17 04:03:47 debian kernel: [    0.036778] Early memory node ranges\\r\\nNov 17 04:03:47 debian kernel: [    0.037243]   node   0: [mem 0x0000000000001000-0x0000000000054fff]\\r\\nNov 17 04:03:47 debian kernel: [    0.038094]   node   0: [mem 0x0000000000060000-0x0000000000097fff]\\r\\nNov 17 04:03:47 debian kernel: [    0.038947]   node   0: [mem 0x0000000000100000-0x0000000025eecfff]\\r\\nNov 17 04:03:47 debian kernel: [    0.039805]   node   0: [mem 0x00000000261ff000-0x00000000265dffff]\\r\\nNov 17 04:03:47 debian kernel: [    0.040633] Initmem setup node 0 [mem 0x0000000000001000-0x00000000265dffff]\\r\\nNov 17 04:03:47 debian kernel: [    0.041544] On node 0 totalpages: 156250\\r\\nNov 17 04:03:47 debian kernel: [    0.041545]   DMA zone: 64 pages used for memmap\\r\\nNov 17 04:03:47 debian kernel: [    0.041546]   DMA zone: 3121 pages reserved\\r\\nNov 17 04:03:47 debian kernel: [    0.041548]   DMA zone: 3980 pages, LIFO batch:0\\r\\nNov 17 04:03:47 debian kernel: [    0.041549]   DMA32 zone: 2392 pages used for memmap\\r\\nNov 17 04:03:47 debian kernel: [    0.041550]   DMA32 zone: 152270 pages, LIFO batch:31\\r\\nNov 17 04:03:47 debian kernel: [    0.041989] On node 0, zone DMA: 1 pages in unavailable ranges\\r\\nNov 17 04:03:47 debian kernel: [    0.041990] On node 0, zone DMA: 11 pages in unavailable ranges\\r\\nNov 17 04:03:47 debian kernel: [    0.042798] On node 0, zone DMA: 104 pages in unavailable ranges\\r\\nNov 17 04:03:47 debian kernel: [    0.045104] On node 0, zone DMA32: 786 pages in unavailable ranges\\r\\nNov 17 04:03:47 debian kernel: [    0.046017] On node 0, zone DMA32: 6688 pages in unavailable ranges\\r\\nNov 17 04:03:47 debian kernel: [    0.047186] ACPI: PM-Timer IO Port: 0xb008\\r\\nNov 17 04:03:47 debian kernel: [    0.048553] ACPI: Local APIC address 0xfee00000\\r\\nNov 17 04:03:47 debian kernel: [    0.048565] ACPI: LAPIC_NMI (acpi_id[0xff] dfl dfl lint[0x1])\\r\\nNov 17 04:03:47 debian kernel: [    0.049404] IOAPIC[0]: apic_id 0, version 17, address 0xfec00000, GSI 0-23\\r\\nNov 17 04:03:47 debian kernel: [    0.050293] ACPI: INT_SRC_OVR (bus 0 bus_irq 5 global_irq 5 high level)\\r\\nNov 17 04:03:47 debian kernel: [    0.051137] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)\\r\\nNov 17 04:03:47 debian kernel: [    0.051992] ACPI: INT_SRC_OVR (bus 0 bus_irq 10 global_irq 10 high level)\\r\\nNov 17 04:03:47 debian kernel: [    0.052890] ACPI: INT_SRC_OVR (bus 0 bus_irq 11 global_irq 11 high level)\\r\\nNov 17 04:03:47 debian kernel: [    0.053807] ACPI: IRQ5 used by override.\\r\\nNov 17 04:03:47 debian kernel: [    0.053808] ACPI: IRQ9 used by override.\\r\\nNov 17 04:03:47 debian kernel: [    0.053809] ACPI: IRQ10 used by override.\\r\\nNov 17 04:03:47 debian kernel: [    0.053810] ACPI: IRQ11 used by override.\\r\\nNov 17 04:03:47 debian kernel: [    0.053812] Using ACPI (MADT) for SMP configuration information\\r\\nNov 17 04:03:47 debian kernel: [    0.054586] smpboot: Allowing 1 CPUs, 0 hotplug CPUs\\r\\nNov 17 04:03:47 debian kernel: [    0.055292] PM: hibernation: Registered nosave memory: [mem 0x00000000-0x00000fff]\\r\\nNov 17 04:03:47 debian kernel: [    0.056302] PM: hibernation: Registered nosave memory: [mem 0x00055000-0x0005ffff]\\r\\nNov 17 04:03:47 debian kernel: [    0.057269] PM: hibernation: Registered nosave memory: [mem 0x00098000-0x0009ffff]\\r\\nNov 17 04:03:47 debian kernel: [    0.058272] PM: hibernation: Registered nosave memory: [mem 0x000a0000-0x000fffff]\\r\\nNov 17 04:03:47 debian kernel: [    0.059273] PM: hibernation: Registered nosave memory: [mem 0x25eed000-0x25fecfff]\\r\\nNov 17 04:03:47 debian kernel: [    0.060238] PM: hibernation: Registered nosave memory: [mem 0x25fed000-0x260ecfff]\\r\\nNov 17 04:03:47 debian kernel: [    0.061203] PM: hibernation: Registered nosave memory: [mem 0x260ed000-0x2616cfff]\\r\\nNov 17 04:03:47 debian kernel: [    0.062169] PM: hibernation: Registered nosave memory: [mem 0x2616d000-0x2617efff]\\r\\nNov 17 04:03:47 debian kernel: [    0.063136] PM: hibernation: Registered nosave memory: [mem 0x2617f000-0x261fefff]\\r\\nNov 17 04:03:47 debian kernel: [    0.064110] [mem 0x26600000-0xffffffff] available for PCI devices\\r\\nNov 17 04:03:47 debian kernel: [    0.064881] Booting paravirtualized kernel on KVM\\r\\nNov 17 04:03:47 debian kernel: [    0.065481] clocksource: refined-jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645519600211568 ns\\r\\nNov 17 04:03:47 debian kernel: [    0.071199] setup_percpu: NR_CPUS:8192 nr_cpumask_bits:1 nr_cpu_ids:1 nr_node_ids:1\\r\\nNov 17 04:03:47 debian kernel: [    0.072527] percpu: Embedded 63 pages/cpu s221184 r8192 d28672 u2097152\\r\\nNov 17 04:03:47 debian kernel: [    0.073412] pcpu-alloc: s221184 r8192 d28672 u2097152 alloc=1*2097152\\r\\nNov 17 04:03:47 debian kernel: [    0.073414] pcpu-alloc: [0] 0 \\r\\nNov 17 04:03:47 debian kernel: [    0.073444] kvm-guest: PV spinlocks disabled, single CPU\\r\\nNov 17 04:03:47 debian kernel: [    0.074171] Built 1 zonelists, mobility grouping on.  Total pages: 150673\\r\\nNov 17 04:03:47 debian kernel: [    0.075108] Policy zone: DMA32\\r\\nNov 17 04:03:47 debian kernel: [    0.075690] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-5.10.0-26-cloud-amd64 root=UUID=e6fe3fcb-2478-4e7e-8072-4ced46dceac5 ro console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0 intel_iommu=off\\r\\nNov 17 04:03:47 debian kernel: [    0.078655] DMAR: IOMMU disabled\\r\\nNov 17 04:03:47 debian kernel: [    0.079286] Dentry cache hash table entries: 131072 (order: 8, 1048576 bytes, linear)\\r\\nNov 17 04:03:47 debian kernel: [    0.080546] Inode-cache hash table entries: 65536 (order: 7, 524288 bytes, linear)\\r\\nNov 17 04:03:47 debian kernel: [    0.081583] mem auto-init: stack:off, heap alloc:on, heap free:off\\r\\nNov 17 04:03:47 debian kernel: [    0.084292] Memory: 208948K/625000K available (12296K kernel code, 2552K rwdata, 6956K rodata, 2468K init, 3724K bss, 103652K reserved, 0K cma-reserved)\\r\\nNov 17 04:03:47 debian kernel: [    0.086299] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1\\r\\nNov 17 04:03:47 debian kernel: [    0.087268] Kernel/User page tables isolation: enabled\\r\\nNov 17 04:03:47 debian kernel: [    0.088415] ftrace: allocating 33918 entries in 133 pages\\r\\nNov 17 04:03:47 debian kernel: [    0.108935] ftrace: allocated 133 pages with 3 groups\\r\\nNov 17 04:03:47 debian kernel: [    0.110330] rcu: Hierarchical RCU implementation.\\r\\nNov 17 04:03:47 debian kernel: [    0.110974] rcu: \\tRCU restricting CPUs from NR_CPUS=8192 to nr_cpu_ids=1.\\r\\nNov 17 04:03:47 debian kernel: [    0.111865] \\tRude variant of Tasks RCU enabled.\\r\\nNov 17 04:03:47 debian kernel: [    0.112441] \\tTracing variant of Tasks RCU enabled.\\r\\nNov 17 04:03:47 debian kernel: [    0.113053] rcu: RCU calculated value of scheduler-enlistment delay is 25 jiffies.\\r\\nNov 17 04:03:47 debian kernel: [    0.114064] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=1\\r\\nNov 17 04:03:47 debian kernel: [    0.119409] NR_IRQS: 524544, nr_irqs: 256, preallocated irqs: 16\\r\\nNov 17 04:03:47 debian kernel: [    0.120483] random: crng init done\\r\\nNov 17 04:03:47 debian kernel: [    0.120945] Console: colour dummy device 80x25\\r\\nNov 17 04:03:47 debian kernel: [    0.121763] printk: console [tty0] enabled\\r\\nNov 17 04:03:47 debian kernel: [    0.122413] printk: console [ttyS0] enabled\\r\\nNov 17 04:03:47 debian kernel: [    0.123526] printk: bootconsole [earlyser0] disabled\\r\\nNov 17 04:03:47 debian kernel: [    0.124856] ACPI: Core revision 20200925\\r\\nNov 17 04:03:47 debian kernel: [    0.125499] APIC: Switch to symmetric I/O mode setup\\r\\nNov 17 04:03:47 debian kernel: [    0.126669] x2apic enabled\\r\\nNov 17 04:03:47 debian kernel: [    0.129453] Switched APIC routing to physical x2apic.\\r\\nNov 17 04:03:47 debian kernel: [    0.134129] ..TIMER: vector=0x30 apic1=0 pin1=0 apic2=-1 pin2=-1\\r\\nNov 17 04:03:47 debian kernel: [    0.135170] clocksource: tsc-early: mask: 0xffffffffffffffff max_cycles: 0x1fb6c80a799, max_idle_ns: 440795272342 ns\\r\\nNov 17 04:03:47 debian kernel: [    0.136571] Calibrating delay loop (skipped) preset value.. 4400.31 BogoMIPS (lpj=8800632)\\r\\nNov 17 04:03:47 debian kernel: [    0.140680] Last level iTLB entries: 4KB 64, 2MB 8, 4MB 8\\r\\nNov 17 04:03:47 debian kernel: [    0.141412] Last level dTLB entries: 4KB 64, 2MB 0, 4MB 0, 1GB 4\\r\\nNov 17 04:03:47 debian kernel: [    0.142247] Spectre V1 : Mitigation: usercopy/swapgs barriers and __user pointer sanitization\\r\\nNov 17 04[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mUser Login Management\\u001b[0m.\\r\\n:03:47 debian kernel: [    0.143390] Spectre V2 : Mitigation: IBRS\\r\\nNov 17 04:03:47 debian kernel: [    0.143939] Spectre V2 : Spectre v2 / SpectreRSB mitigation: Filling RSB on context switch\\r\\nNov 17 04:03:47 debian kernel: [    0.144568] Spectre V2 : Spectre v2 / SpectreRSB : Filling RSB on VMEXIT\\r\\nNov 17 04:03:47 debian kernel: [    0.145466] RETBleed: Mitigation: IBRS\\r\\nNov 17 04:03:47 debian kernel: [    0.145988] Spectre V2 : mitigation: Enabling conditional Indirect Branch Prediction Barrier\\r\\nNov 17 04:03:47 debian kernel: [    0.147108] Speculative Store Bypass: Mitigation: Speculative Store Bypass disabled via prctl and seccomp\\r\\nNov 17 04:03:47 debian kernel: [    0.148575] MDS: Mitigation: Clear CPU buffers\\r\\nNov 17 04:03:47 debian systemd[1]: Finished Create list of static device nodes for the current kernel.\\r\\nNov 17 04:03:47 debian systemd[1]: modprobe@configfs.service: Succeeded.\\r\\nNov 17 04:03:47 debian systemd[1]: Finished Load Kernel Module configfs.\\r\\nNov 17 04:03:47 debian systemd[1]: modprobe@drm.service: Succeeded.\\r\\nNov 17 04:03:47 debian systemd[1]: Finished Load Kernel Module drm.\\r\\nNov 17 04:03:47 debian systemd[1]: modprobe@fuse.service: Succeeded.\\r\\nNov 17 04:03:47 debian systemd[1]: Finished Load Kernel Module fuse.\\r\\nNov 17 04:03:47 debian systemd[1]: Finished Load Kernel Modules.\\r\\nNov 17 04:03:47 debian systemd[1]: Finished Remount Root and Kernel File Systems.\\r\\nNov 17 04:03:47 debian systemd[1]: Mounting FUSE Control File System...\\r\\nNov 17 04:03:47 debian systemd[1]: Mounting Kernel Configuration File System...\\r\\nNov 17 04:03:47 debian systemd[1]: Starting Grow File System on /...\\r\\nNov 17 04:03:47 debian systemd[1]: Condition check resulted in Rebuild Hardware Database being skipped.\\r\\nNov 17 04:03:47 debian systemd[1]: Starting Flush Journal to Persistent Storage...\\r\\nNov 17 04:03:47 debian systemd[1]: Condition check resulted in Platform Persistent Storage Archival being skipped.\\r\\nNov 17 04:03:47 debian systemd[1]: Starting Load/Save Random Seed...\\r\\nNov 17 04:03:47 debian systemd-growfs[189]: Successfully resized \\\"/\\\" to 9.8G bytes (3584 bytes lost due to blocksize).\\r\\nNov 17 04:03:47 debian systemd[1]: Starting Apply Kernel Variables...\\r\\nNov 17 04:03:47 debian systemd[1]: Starting Create System Users...\\r\\nNov 17 04:03:47 debian systemd[1]: Finished Coldplug All udev Devices.\\r\\nNov 17 04:03:47 debian systemd-sysusers[193]: Creating group systemd-timesync with gid 999.\\r\\nNov 17 04:03:47 debian systemd-sysusers[193]: Creating user systemd-timesync (systemd Time Synchronization) with uid 999 and gid 999.\\r\\nNov 17 04:03:47 debian systemd-sysusers[193]: Creating group systemd-coredump with gid 998.\\r\\nNov 17 04:03:47 debian systemd-sysusers[193]: Creating user systemd-coredump (systemd Core Dumper) with uid 998 and gid 998.\\r\\nNov 17 04:03:47 debian systemd[1]: Mounted FUSE Control File System.\\r\\nNov 17 04:03:47 debian systemd[1]: Mounted Kernel Configuration File System.\\r\\nNov 17 04:03:47 debian systemd[1]: Finished Grow File System on /.\\r\\nNov 17 04:03:47 debian systemd[1]: Finished Flush Journal to Persistent Storage.\\r\\nNov 17 04:03:47 debian systemd[1]: Finished Load/Save Random Seed.\\r\\nNov 17 04:03:47 debian systemd[1]: Finished Apply Kernel Variables.\\r\\nNov 17 04:03:47 debian systemd[1]: Finished Create System Users.\\r\\nNov 17 04:03:47 debian kernel: [    0.149183] TAA: Mitigation: Clear CPU buffers\\r\\nNov 17 04:03:47 debian kernel: [    0.149789] MMIO Stale Data: Vulnerable: Clear CPU buffers attempted, no microcode\\r\\nNov 17 04:03:47 debian kernel: [    0.150817] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'\\r\\nNov 17 04:03:47 debian kernel: [    0.151849] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'\\r\\nNov 17 04:03:47 debian kernel: [    0.152568] x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers'\\r\\nNov 17 04:03:47 debian kernel: [    0.153445] x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]:  256\\r\\nNov 17 04:03:47 debian kernel: [    0.154319] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.\\r\\nNov 17 04:03:47 debian kernel: [    0.174317] Freeing SMP alternatives memory: 32K\\r\\nNov 17 04:03:47 debian kernel: [    0.176616] pid_max: default: 32768 minimum: 301\\r\\nNov 17 04:03:47 debian kernel: [    0.189921] LSM: Security Framework initializing\\r\\nNov 17 04:03:47 debian kernel: [    0.190777] Yama: disabled by default; enable with sysctl kernel.yama.*\\r\\nNov 17 04:03:47 debian kernel: [    0.191718] AppArmor: AppArmor initialized\\r\\nNov 17 04:03:47 debian kernel: [    0.192315] TOMOYO Linux initialized\\r\\nNov 17 04:03:47 debian kernel: [    0.192585] Mount-cache hash table entries: 2048 (order: 2, 16384 bytes, linear)\\r\\nNov 17 04:03:47 debian kernel: [    0.193586] Mountpoint-cache hash table entries: 2048 (order: 2, 16384 bytes, linear)\\r\\nNov 17 04:03:47 debian kernel: [    0.303707] smpboot: CPU0: Intel(R) Xeon(R) CPU @ 2.20GHz (family: 0x6, model: 0x4f, stepping: 0x0)\\r\\nNov 17 04:03:47 debian kernel: [    0.304567] Performance Events: unsupported p6 CPU model 79 no PMU driver, software events only.\\r\\nNov 17 04:03:47 debian kernel: [    0.304567] rcu: Hierarchical SRCU implementation.\\r\\nNov 17 04:03:47 debian kernel: [    0.304567] NMI watchdog: Perf NMI watchdog permanently disabled\\r\\nNov 17 04:03:47 debian kernel: [    0.304607] smp: Bringing up secondary CPUs ...\\r\\nNov 17 04:03:47 debian kernel: [    0.305254] smp: Brought up 1 node, 1 CPU\\r\\nNov 17 04:03:47 debian kernel: [    0.305804] smpboot: Max logical packages: 1\\r\\nNov 17 04:03:47 debian kernel: [    0.306388] smpboot: Total of 1 processors activated (4400.31 BogoMIPS)\\r\\nNov 17 04:03:47 debian kernel: [    0.309894] node 0 deferred pages initialised in 4ms\\r\\nNov 17 04:03:47 debian kernel: [    0.310840] devtmpfs: initialized\\r\\nNov 17 04:03:47 debian kernel: [    0.311414] x86/mm: Memory block size: 128MB\\r\\nNov 17 04:03:47 debian kernel: [    0.312326] PM: Registering ACPI NVS region [mem 0x2617f000-0x261fefff] (524288 bytes)\\r\\nNov 17 04:03:47 debian kernel: [    0.312624] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns\\r\\nNov 17 04:03:47 debian kernel: [    0.313984] futex hash table entries: 256 (order: 2, 16384 bytes, linear)\\r\\nNov 17 04:03:47 debian kernel: [    0.315079] NET: Registered protocol family 16\\r\\nNov 17 04:03:47 debian kernel: [    0.316708] DMA: preallocated 128 KiB GFP_KERNEL pool for atomic allocations\\r\\nNov 17 04:03:47 debian kernel: [    0.317887] DMA: preallocated 128 KiB GFP_KERNEL|GFP_DMA pool for atomic allocations\\r\\nNov 17 04:03:47 debian kernel: [    0.319088] DMA: preallocated 128 KiB GFP_KERNEL|GFP_DMA32 pool for atomic allocations\\r\\nNov 17 04:03:47 debian kernel: [    0.320255] audit: initializing netlink subsys (disabled)\\r\\nNov 17 04:03:47 debian kernel: [    0.320680] thermal_sys: Registered thermal governor 'fair_share'\\r\\nNov 17 04:03:47 debian kernel: [    0.320681] thermal_sys: Registered thermal governor 'bang_bang'\\r\\nNov 17 04:03:47 debian kernel: [    0.321534] thermal_sys: Registered thermal governor 'step_wise'\\r\\nNov 17 04:03:47 debian kernel: [    0.322340] thermal_sys: Registered thermal governor 'user_space'\\r\\nNov 17 04:03:47 debian kernel: [    0.323166] thermal_sys: Registered thermal governor 'power_allocator'\\r\\nNov 17 04:03:47 debian kernel: [    0.324578] audit: type=2000 audit(1700193823.829:1): state=initialized audit_enabled=0 res=1\\r\\nNov 17 04:03:47 debian kernel: [    0.326750] cpuidle: using governor ladder\\r\\nNov 17 04:03:47 debian kernel: [    0.327347] cpuidle: using governor menu\\r\\nNov 17 04:03:47 debian kernel: [    0.327968] ACPI: bus type PCI registered\\r\\nNov 17 04:03:47 debian kernel: [    0.328539] acpiphp: ACPI Hot Plug PCI Controller Driver version: 0.5\\r\\nNov 17 04:03:47 debian kernel: [    0.328668] PCI: Using configuration type 1 for base access\\r\\nNov 17 04:03:47 debian kernel: [    0.330144] Kprobes globally optimized\\r\\nNov 17 04:03:47 debian kernel: [    0.330823] HugeTLB registered 1.00 GiB page size, pre-allocated 0 pages\\r\\nNov 17 04:03:47 debian kernel: [    0.332570] HugeTLB registered 2.00 MiB page size, pre-allocated 0 pages\\r\\nNov 17 04:03:47 debian kernel: [    0.460132] ACPI: Added _OSI(Module Device)\\r\\nNov 17 04:03:47 debian kernel: [    0.460570] ACPI: Added _OSI(Processor Device)\\r\\nNov 17 04:03:47 debian kernel: [    0.461236] ACPI: Added _OSI(3.0 _SCP Extensions)\\r\\nNov 17 04:03:47 debian kernel: [    0.461875] ACPI: Added _OSI(Processor Aggregator Device)\\r\\nNov 17 04:03:47 debian kernel: [    0.462629] ACPI: Added _OSI(Linux-Dell-Video)\\r\\nNov 17 04:03:47 debian kernel: [    0.463234] ACPI: Added _OSI(Linux-Lenovo-NV-HDMI-Audio)\\r\\nNov 17 04:03:47 debian kernel: [    0.463951] ACPI: Added _OSI(Linux-HPI-Hybrid-Graphics)\\r\\nNov 17 04:03:47 debian kernel: [    0.465493] ACPI: 3 ACPI AML tables successfully acquired and loaded\\r\\nNov 17 04:03:47 debian kernel: [    0.467274] ACPI: Interpreter enabled\\r\\nNov 17 04:03:47 debian kernel: [    0.467821] ACPI: (supports S0 S3 S4 S5)\\r\\nNov 17 04:03:47 debian kernel: [    0.468579] ACPI: Using IOAPIC for interrupt routing\\r\\nNov 17 04:03:47 debian kernel: [    0.469275] PCI: Using host bridge windows from ACPI; if necessary, use \\\"pci=nocrs\\\" and report a bug\\r\\nNov 17 04:03:47 debian kernel: [    0.470653] ACPI: Enabled 16 GPEs in block 00 to 0F\\r\\nNov 17 04:03:47 debian kernel: [    0.473239] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff])\\r\\nNov 17 04:03:47 debian kernel: [    0.474122] acpi PNP0A03:00: _OSC: OS supports [ASPM ClockPM Segments MSI HPX-Type3]\\r\\nNov 17 04:03:47 debian kernel: [    0.475162] acpi PNP0A03:00: fail to add MMCONFIG information, can't access extended PCI configuration space under this bridge.\\r\\nNov 17 04:03:47 debian kernel: [    0.477146] PCI host bridge to bus 0000:00\\r\\nNov 17 04:03:47 debian kernel: [    0.477709] pci_bus 0000:00: root bus resource [io  0x0000-0x0cf7 window]\\r\\nNov 17 04:03:47 debian kernel: [    0.478715] pci_bus 0000:00: root bus resource [io  0x0d00-0xffff window]\\r\\nNov 17 04:03:47 debian kernel: [    0.479663] pci_bus 0000:00: root bus resource [mem 0x000a0000-0x000bffff window]\\r\\nNov 17 04:03:47 debian kernel: [    0.480578] pci_bus 0000:00: root bus resource [mem 0x80000000-0xfebfefff window]\\r\\nNov 17 04:03:47 debian kernel: [    0.481576] pci_bus 0000:00: root bus resource [bus 00-ff]\\r\\nNov 17 04:03:47 debian kernel: [    0.482365] pci 0000:00:00.0: [8086:1237] type 00 class 0x060000\\r\\nNov 17 04:03:47 debian kernel: [    0.486019] pci 0000:00:01.0: [8086:7110] type 00 class 0x060100\\r\\nNov 17 04:03:47 debian kernel: [    0.500825] pci 0000:00:01.3: [8086:7113] type 00 class 0x068000\\r\\nNov 17 04:03:47 debian kernel: [    0.519681] pci 0000:00:01.3: quirk: [io  0xb000-0xb03f] claimed by PIIX4 ACPI\\r\\nNov 17 04:03:47 debian kernel: [    0.520874] pci 0000:00:03.0: [1af4:1004] type 00 class 0x000000\\r\\nNov 17 04:03:47 debian kernel: [    0.528575] pci 0000:00:03.0: reg 0x10: [io  0xc040-0xc07f]\\r\\nNov 17 04:03:47 debian kernel: [    0.533672] pci 0000:00:03.0: reg 0x14: [mem 0x80000000-0x8000007f]\\r\\nNov 17 04:03:47 debian kernel: [    0.548861] pci 0000:00:04.0: [1af4:1000] type 00 class 0x020000\\r\\nNov 17 04:03:47 debian kernel: [    0.555665] pci 0000:00:04.0: reg 0x10: [io  0xc000-0xc03f]\\r\\nNov 17 04:03:47 debian kernel: [    0.560572] pci 0000:00:04.0: reg 0x14: [mem 0x80002000-0x8000203f]\\r\\nNov 17 04:03:47 debian kernel: [    0.573906] pci 0000:00:05.0: [1af4:1005] type 00 class 0x00ff00\\r\\nNov 17 04:03:47 debian kernel: [    0.580574] pci 0000:00:05.0: reg 0x10: [io  0xc080-0xc09f]\\r\\nNov 17 04:03:47 debian kernel: [    0.586726] pci 0000:00:05.0: reg 0x14: [mem 0x80001000-0x8000103f]\\r\\nNov 17 04:03:47 debian kernel: [    0.601296] ACPI: PCI Interrupt Link [LNKA] (IRQs 5 *10 11)\\r\\nNov 17 04:03:47 debian kernel: [    0.603312] ACPI: PCI Interrupt Link [LNKB] (IRQs 5 *10 11)\\r\\nNov 17 04:03:47 debian kernel: [    0.605636] ACPI: PCI Interrupt Link [LNKC] (IRQs 5 10 *11)\\r\\nNov 17 04:03:47 debian kernel: [    0.607598] ACPI: PCI Interrupt Link [LNKD] (IRQs 5 10 *11)\\r\\nNov 17 04:03:47 debian kernel: [    0.611697] ACPI: PCI Interrupt Link [LNKS] (IRQs *9)\\r\\nNov 17 04:03:47 debian kernel: [    0.612813] iommu: Default domain type: Translated \\r\\nNov 17 04:03:47 debian kernel: [    0.613589] vgaarb: loaded\\r\\nNov 17 04:03:47 debian kernel: [    0.614061] Registered efivars operations\\r\\nNov 17 04:03:47 debian kernel: [    0.614787] NetLabel: Initializing\\r\\nNov 17 04:03:47 debian kernel: [    0.615327] NetLabel:  domain hash size = 128\\r\\nNov 17 04:03:47 debian kernel: [    0.615923] NetLabel:  protocols = UNLABELED CIPSOv4 CALIPSO\\r\\nNov 17 04:03:47 debian kernel: [    0.616587] NetLabel:  unlabeled traffic allowed by default\\r\\nNov 17 04:03:47 debian kernel: [    0.617348] PCI: Using ACPI for IRQ routing\\r\\nNov 17 04:03:47 debian kernel: [    0.617922] PCI: pci_cache_line_size set to 64 bytes\\r\\nNov 17 04:03:47 debian kernel: [    0.618015] e820: r[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mRemove Stale Onli…ext4 Metadata Check Snapshots\\u001b[0m.\\r\\neserve RAM buffer [mem 0x00055000-0x0005ffff]\\r\\nNov 17 04:03:47 debian kernel: [    0.618017] e820: reserve RAM buffer [mem 0x00098000-0x0009ffff]\\r\\nNov 17 04:03:47 debian kernel: [    0.618018] e820: reserve RAM buffer [mem 0x25eed000-0x27ffffff]\\r\\nNov 17 04:03:47 debian kernel: [    0.618019] e820: reserve RAM buffer [mem 0x265e0000-0x27ffffff]\\r\\nNov 17 04:03:47 debian kernel: [    0.618056] clocksource: Switched to clocksource kvm-clock\\r\\nNov 17 04:03:47 debian kernel: [    0.628891] VFS: Disk quotas dquot_6.6.0\\r\\nNov 17 04:03:47 debian kernel: [    0.629490] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)\\r\\nNov 17 04:03:47 debian kernel: [    0.630665] AppArmor: AppArmor Filesystem Enabled\\r\\nNov 17 04:03:47 debian kernel: [    0.631324] pnp: PnP ACPI init\\r\\nNov 17 04:03:47 debian kernel: [    0.631808] pnp 00:00: Plug and Play ACPI device, IDs PNP0b00 (active)\\r\\nNov 17 04:03:47 debian kernel: [    0.631858] pnp 00:01: Plug and Play ACPI device, IDs PNP0303 (active)\\r\\nNov 17 04:03:47 debian kernel: [    0.631890] pnp 00:02: Plug and Play ACPI device, IDs PNP0f13 (active)\\r\\nNov 17 04:03:47 debian kernel: [    0.631928] pnp 00:03: Plug and Play ACPI device, IDs PNP0501 (active)\\r\\nNov 17 04:03:47 debian kernel: [    0.631957] pnp 00:04: Plug and Play ACPI device, IDs PNP0501 (active)\\r\\nNov 17 04:03:47 debian kernel: [    0.631986] pnp 00:05: Plug and Play ACPI device, IDs PNP0501 (active)\\r\\nNov 17 04:03:47 debian kernel: [    0.632018] pnp 00:06: Plug and Play ACPI device, IDs PNP0501 (active)\\r\\nNov 17 04:03:47 debian kernel: [    0.632174] pnp: PnP ACPI: found 7 devices\\r\\nNov 17 04:03:47 debian kernel: [    0.638068] clocksource: acpi_pm: mask: 0xffffff max_cycles: 0xffffff, max_idle_ns: 2085701024 ns\\r\\nNov 17 04:03:47 debian kernel: [    0.639390] NET: Registered protocol family 2\\r\\nNov 17 04:03:47 debian kernel: [    0.640279] IP idents hash table entries: 16384 (order: 5, 131072 bytes, linear)\\r\\nNov 17 04:03:47 debian kernel: [    0.642617] tcp_listen_portaddr_hash hash table entries: 512 (order: 1, 8192 bytes, linear)\\r\\nNov 17 04:03:47 debian kernel: [    0.643878] TCP established hash table entries: 8192 (order: 4, 65536 bytes, linear)\\r\\nNov 17 04:03:47 debian kernel: [    0.644963] TCP bind hash table entries: 8192 (order: 5, 131072 bytes, linear)\\r\\nNov 17 04:03:47 debian kernel: [    0.645946] TCP: Hash tables configured (established 8192 bind 8192)\\r\\nNov 17 04:03:47 debian kernel: [    0.647263] UDP hash table entries: 512 (order: 2, 16384 bytes, linear)\\r\\nNov 17 04:03:47 debian kernel: [    0.648178] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes, linear)\\r\\nNov 17 04:03:47 debian kernel: [    0.649145] NET: Registered protocol family 1\\r\\nNov 17 04:03:47 debian kernel: [    0.649746] NET: Registered protocol family 44\\r\\nNov 17 04:03:47 debian kernel: [    0.650360] pci_bus 0000:00: resource 4 [io  0x0000-0x0cf7 window]\\r\\nNov 17 04:03:47 debian kernel: [    0.651189] pci_bus 0000:00: resource 5 [io  0x0d00-0xffff window]\\r\\nNov 17 04:03:47 debian kernel: [    0.652018] pci_bus 0000:00: resource 6 [mem 0x000a0000-0x000bffff window]\\r\\nNov 17 04:03:47 debian kernel: [    0.653023] pci_bus 0000:00: resource 7 [mem 0x80000000-0xfebfefff window]\\r\\nNov 17 04:03:47 debian kernel: [    0.654013] pci 0000:00:00.0: Limiting direct PCI/PCI transfers\\r\\nNov 17 04:03:47 debian kernel: [    0.654965] PCI: CLS 0 bytes, default 64\\r\\nNov 17 04:03:47 debian kernel: [    0.655545] Trying to unpack rootfs image as initramfs...\\r\\nNov 17 04:03:47 debian kernel: [    0.868747] Freeing initrd memory: 13832K\\r\\nNov 17 04:03:47 debian kernel: [    0.869409] clocksource: tsc: mask: 0xffffffffffffffff max_cycles: 0x1fb6c80a799, max_idle_ns: 440795272342 ns\\r\\nNov 17 04:03:47 debian kernel: [    0.870790] clocksource: Switched to clocksource tsc\\r\\nNov 17 04:03:47 debian kernel: [    0.871684] Initialise system trusted keyrings\\r\\nNov 17 04:03:47 debian kernel: [    0.872370] Key type blacklist registered\\r\\nNov 17 04:03:47 debian kernel: [    0.872996] workingset: timestamp_bits=36 max_order=18 bucket_order=0\\r\\nNov 17 04:03:47 debian kernel: [    0.874768] zbud: loaded\\r\\nNov 17 04:03:47 debian kernel: [    0.875451] Key type asymmetric registered\\r\\nNov 17 04:03:47 debian kernel: [    0.876015] Asymmetric key parser 'x509' registered\\r\\nNov 17 04:03:47 debian kernel: [    0.876717] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 252)\\r\\nNov 17 04:03:47 debian kernel: [    0.877753] io scheduler mq-deadline registered\\r\\nNov 17 04:03:47 debian kernel: [    0.878944] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled\\r\\nNov 17 04:03:47 debian kernel: [    0.879891] 00:03: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A\\r\\nNov 17 04:03:47 debian kernel: [    0.881103] 00:04: ttyS1 at I/O 0x2f8 (irq = 3, base_baud = 115200) is a 16550A\\r\\nNov 17 04:03:47 debian kernel: [    0.882343] 00:05: ttyS2 at I/O 0x3e8 (irq = 6, base_baud = 115200) is a 16550A\\r\\nNov 17 04:03:47 debian kernel: [    0.883609] 00:06: ttyS3 at I/O 0x2e8 (irq = 7, base_baud = 115200) is a 16550A\\r\\nNov 17 04:03:47 debian kernel: [    0.884960] i8042: PNP: PS/2 Controller [PNP0303:KBD,PNP0f13:MOU] at 0x60,0x64 irq 1,12\\r\\nNov 17 04:03:47 debian kernel: [    0.886134] i8042: Warning: Keylock active\\r\\nNov 17 04:03:47 debian kernel: [    0.888083] serio: i8042 KBD port at 0x60,0x64 irq 1\\r\\nNov 17 04:03:47 debian kernel: [    0.888821] serio: i8042 AUX port at 0x60,0x64 irq 12\\r\\nNov 17 04:03:47 debian kernel: [    0.889640] rtc_cmos 00:00: RTC can wake from S4\\r\\nNov 17 04:03:47 debian kernel: [    0.890965] rtc_cmos 00:00: registered as rtc0\\r\\nNov 17 04:03:47 debian kernel: [    0.891673] rtc_cmos 00:00: setting system clock to 2023-11-17T04:03:44 UTC (1700193824)\\r\\nNov 17 04:03:47 debian kernel: [    0.892826] rtc_cmos 00:00: alarms up to one day, 114 bytes nvram\\r\\nNov 17 04:03:47 debian kernel: [    0.893666] intel_pstate: CPU model not supported\\r\\nNov 17 04:03:47 debian kernel: [    0.894500] NET: Registered protocol family 10\\r\\nNov 17 04:03:47 debian kernel: [    0.902476] Segment Routing with IPv6\\r\\nNov 17 04:03:47 debian kernel: [    0.903051] mip6: Mobile IPv6\\r\\nNov 17 04:03:47 debian kernel: [    0.903490] NET: Registered protocol family 17\\r\\nNov 17 04:03:47 debian kernel: [    0.904345] IPI shorthand broadcast: enabled\\r\\nNov 17 04:03:47 debian kernel: [    0.904948] sched_clock: Marking stable (892139515, 12093408)-\\u003e(906097741, -1864818)\\r\\nNov 17 04:03:47 debian kernel: [    0.906042] registered taskstats version 1\\r\\nNov 17 04:03:47 debian kernel: [    0.906630] Loading compiled-in X.509 certificates\\r\\nNov 17 04:03:47 debian kernel: [    0.939254] Loaded X.509 cert 'Debian Secure Boot CA: 6ccece7e4c6c0d1f6149f3dd27dfcc5cbb419ea1'\\r\\nNov 17 04:03:47 debian kernel: [    0.940959] Loaded X.509 cert 'Debian Secure Boot Signer 2022 - linux: 14011249c2675ea8e5148542202005810584b25f'\\r\\nNov 17 04:03:47 debian kernel: [    0.942356] Key type .fscrypt registered\\r\\nNov 17 04:03:47 debian kernel: [    0.942899] Key type fscrypt-provisioning registered\\r\\nNov 17 04:03:47 debian kernel: [    0.943613] AppArmor: AppArmor sha1 policy hashing enabled\\r\\nNov 17 04:03:47 debian kernel: [    0.945910] Freeing unused decrypted memory: 2036K\\r\\nNov 17 04:03:47 debian kernel: [    0.947243] Freeing unused kernel image (initmem) memory: 2468K\\r\\nNov 17 04:03:47 debian kernel: [    0.956128] Write protecting the kernel read-only data: 22528k\\r\\nNov 17 04:03:47 debian kernel: [    0.957663] Freeing unused kernel image (text/rodata gap) memory: 2036K\\r\\nNov 17 04:03:47 debian kernel: [    0.958870] Freeing unused kernel image (rodata/data gap) memory: 1236K\\r\\nNov 17 04:03:47 debian kernel: [    0.960268] x86/mm: Checked W+X mappings: passed, no W+X pages found.\\r\\nNov 17 04:03:47 debian kernel: [    0.961209] x86/mm: Checking user space page tables\\r\\nNov 17 04:03:47 debian kernel: [    0.961951] x86/mm: Checked W+X mappings: passed, no W+X pages found.\\r\\nNov 17 04:03:47 debian kernel: [    0.962845] Run /init as init process\\r\\nNov 17 04:03:47 debian kernel: [    0.963353]   with arguments:\\r\\nNov 17 04:03:47 debian kernel: [    0.963353]     /init\\r\\nNov 17 04:03:47 debian kernel: [    0.963354]   with environment:\\r\\nNov 17 04:03:47 debian kernel: [    0.963355]     HOME=/\\r\\nNov 17 04:03:47 debian kernel: [    0.963355]     TERM=linux\\r\\nNov 17 04:03:47 debian kernel: [    0.963356]     BOOT_IMAGE=/boot/vmlinuz-5.10.0-26-cloud-amd64\\r\\nNov 17 04:03:47 debian kernel: [    0.963357]     intel_iommu=off\\r\\nNov 17 04:03:47 debian kernel: [    1.027130] PCI Interrupt Link [LNKC] enabled at IRQ 11\\r\\nNov 17 04:03:47 debian kernel: [    1.027936] virtio-pci 0000:00:03.0: virtio_pci: leaving for legacy driver\\r\\nNov 17 04:03:47 debian kernel: [    1.056157] PCI Interrupt Link [LNKD] enabled at IRQ 10\\r\\nNov 17 04:03:47 debian kernel: [    1.056936] virtio-pci 0000:00:04.0: virtio_pci: leaving for legacy driver\\r\\nNov 17 04:03:47 debian kernel: [    1.062192] PCI Interrupt Link [LNKA] enabled at IRQ 10\\r\\nNov 17 04:03:47 debian kernel: [    1.062992] virtio-pci 0000:00:05.0: virtio_pci: leaving for legacy driver\\r\\nNov 17 04:03:47 debian kernel: [    1.084419] SCSI subsystem initialized\\r\\nNov 17 04:03:47 debian kernel: [    1.093724] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input0\\r\\nNov 17 04:03:47 debian kernel: [    1.118084] virtio_net virtio1 ens4: renamed from eth0\\r\\nNov 17 04:03:47 debian kernel: [    1.126364] scsi host0: Virtio SCSI HBA\\r\\nNov 17 04:03:47 debian kernel: [    1.133045] scsi 0:0:1:0: Direct-Access     Google   PersistentDisk   1    PQ: 0 ANSI: 6\\r\\nNov 17 04:03:47 debian kernel: [    1.153482] sd 0:0:1:0: [sda] 20971520 512-byte logical blocks: (10.7 GB/10.0 GiB)\\r\\nNov 17 04:03:47 debian kernel: [    1.154594] sd 0:0:1:0: [sda] 4096-byte physical blocks\\r\\nNov 17 04:03:47 debian kernel: [    1.155471] sd 0:0:1:0: [sda] Write Protect is off\\r\\nNov 17 04:03:47 debian kernel: [    1.156202] sd 0:0:1:0: [sda] Mode Sense: 1f 00 00 08\\r\\nNov 17 04:03:47 debian kernel: [    1.156440] sd 0:0:1:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA\\r\\nNov 17 04:03:47 debian kernel: [    1.160803]  sda: sda1 sda14 sda15\\r\\nNov 17 04:03:47 debian kernel: [    1.172566] sd 0:0:1:0: [sda] Attached SCSI disk\\r\\nNov 17 04:03:47 debian kernel: [    1.222901]  sda: sda1 sda14 sda15\\r\\nNov 17 04:03:47 debian kernel: [    1.303453] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null)\\r\\nNov 17 04:03:47 debian kernel: [    1.328083] Not activating Mandatory Access Control as /sbin/tomoyo-init does not exist.\\r\\nNov 17 04:03:47 debian kernel: [    2.335869] fuse: init (API version 7.32)\\r\\nNov 17 04:03:47 debian kernel: [    2.397669] EXT4-fs (sda1): re-mounted. Opts: discard,errors=remount-ro\\r\\nNov 17 04:03:47 debian kernel: [    2.550327] EXT4-fs (sda1): resizing filesystem from 2588667 to 2588667 blocks\\r\\nNov 17 04:03:47 debian kernel: [    2.817742] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input2\\r\\nNov 17 04:03:47 debian kernel: [    2.832340] ACPI: Power Button [PWRF]\\r\\nNov 17 04:03:47 debian kernel: [    2.832937] input: Sleep Button as /devices/LNXSYSTM:00/LNXSLPBN:00/input/input3\\r\\nNov 17 04:03:47 debian kernel: [    2.833954] ACPI: Sleep Button [SLPF]\\r\\nNov 17 04:03:47 debian kernel: [    2.858324] sd 0:0:1:0: Attached scsi generic sg0 type 0\\r\\nNov 17 04:03:47 debian kernel: [    2.868718] tpm_tis MSFT0101:00: 2.0 TPM (device-id 0x9009, rev-id 0)\\r\\nNov 17 04:03:47 debian kernel: [    2.876076] pstore: Using crash dump compression: deflate\\r\\nNov 17 04:03:47 debian kernel: [    2.876906] pstore: Registered efi as persistent store backend\\r\\nNov 17 04:03:47 debian kernel: [    2.921526] RAPL PMU: API unit is 2^-32 Joules, 0 fixed counters, 10737418240 ms ovfl timer\\r\\nNov 17 04:03:47 debian kernel: [    2.957276] cryptd: max_cpu_qlen set to 1000\\r\\nNov 17 04:03:47 debian kernel: [    2.992561] AVX2 version of gcm_enc/dec engaged.\\r\\nNov 17 04:03:47 debian kernel: [    2.993287] AES CTR mode by8 optimization enabled\\r\\nNov 17 04:03:47 debian kernel: [    3.408377] audit: type=1400 audit(1700193827.016:2): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"nvidia_modprobe\\\" pid=292 comm=\\\"apparmor_parser\\\"\\r\\nNov 17 04:03:47 debian kernel: [    3.411744] audit: type=1400 audit(1700193827.016:3): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"nvidia_modprobe//kmod\\\" pid=292 comm=\\\"apparmor_parser\\\"\\r\\nNov 17 04:03:47 debian kernel: [    3.496816] audit: type=1400 audit(1700193827.104:4): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"/usr/sbin/chronyd\\\" pid=293 comm=\\\"apparmor_parser\\\"\\r\\nNov 17 04:03:47 debian kernel: [    3.538548] audit: type=1400 audit(1700193827.144:5): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"lsb_release\\\" pid=294 comm=\\\"apparmor_parser\\\"\\r\\nNov 17 04:03:47 debian kernel: [    3.657331] audit: type=1400 audit(1700193827.264:6): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"tcpdump\\\" pid=295 comm=\\\"apparmor_parser\\\"\\r\\nNov 17 04:03:47 debian kernel: [    3.687179] audit: type=1400 audit(1700193827.292:7): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"/usr/sbin/haveged\\\" pid=296 comm=\\\"apparmor_parser\\\"\\r\\nNov 17 04:03:47 debian kernel: [    3.752802] audit: type=1400 audit(1700193827.360:8): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"/usr/bin/man\\\" pid=297 comm=\\\"apparmor_parser\\\"\\r\\nNov 17 04:03:47 debian kernel: [    3.755808] audit: type=1400 audit(1700193827.360:9): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"man_filter\\\" pid=297 comm=\\\"apparmor_parser\\\"\\r\\nNov 17 04:03:47 debian kernel: [    3.760565] audit: type=1400 audit(1700193827.364:10): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"man_groff\\\" pid=297 comm=\\\"apparmor_parser\\\"\\r\\nNov 17 04:03:47 debian systemd[1]: Condition check resulted in First Boot Complete being skipped.\\r\\nNov 17 04:03:47 debian systemd[1]: Starting Helper to synchronize boot up for ifupdown...\\r\\nNov 17 04:03:47 debian systemd[1]: Starting Create Static Device Nodes in /dev...\\r\\nNov 17 04:03:47 debian systemd[1]: Finished Helper to synchronize boot up for ifupdown.\\r\\nNov 17 04:03:47 debian systemd[1]: Finished Create Static Device Nodes in /dev.\\r\\nNov 17 04:03:47 debian systemd[1]: Reached target Local File Systems (Pre).\\r\\nNov 17 04:03:47 debian systemd[1]: Starting Rule-based Manager for Device Events and Files...\\r\\nNov 17 04:03:47 debian systemd[1]: Started Rule-based Manager for Device Events and Files.\\r\\nNov 17 04:03:47 debian systemd-udevd[200]: Using default interface naming scheme 'v247'.\\r\\nNov 17 04:03:47 debian systemd-udevd[200]: ethtool: autonegotiation is unset or enabled, the speed and duplex are not writable.\\r\\nNov 17 04:03:47 debian systemd[1]: Found device /dev/ttyS0.\\r\\nNov 17 04:03:47 debian systemd-udevd[199]: ethtool: autonegotiation is unset or enabled, the speed and duplex are not writable.\\r\\nNov 17 04:03:47 debian systemd[1]: Found device PersistentDisk 15.\\r\\nNov 17 04:03:47 debian cloud-ifupdown-helper: Generated configuration for ens4\\r\\nNov 17 04:03:47 debian systemd[1]: Mounting /boot/efi...\\r\\nNov 17 04:03:47 debian systemd[1]: Mounted /boot/efi.\\r\\nNov 17 04:03:47 debian systemd[1]: Found device Virtio network device.\\r\\nNov 17 04:03:47 debian systemd[1]: Reached target Local File Systems.\\r\\nNov 17 04:03:47 debian systemd[1]: Starting Load AppArmor profiles...\\r\\nNov 17 04:03:47 debian systemd[1]: Condition check resulted in Store a System Token in an EFI Variable being skipped.\\r\\nNov 17 04:03:47 debian systemd[1]: Starting Commit a transient machine-id on disk...\\r\\nNov 17 04:03:47 debian apparmor.systemd[283]: Restarting AppArmor\\r\\nNov 17 04:03:47 debian apparmor.systemd[283]: Reloading AppArmor profiles\\r\\nNov 17 04:03:47 debian systemd[1]: Starting Create Volatile Files and Directories...\\r\\nNov 17 04:03:47 debian systemd[1]: Finished Create Volatile Files and Directories.\\r\\nNov 17 04:03:47 debian systemd[1]: Starting Update UTMP about System Boot/Shutdown...\\r\\nNov 17 04:03:47 debian systemd[1]: Finished Update UTMP about System Boot/Shutdown.\\r\\nNov 17 04:03:47 debian systemd[1]: etc-machine\\\\x2did.mount: Succeeded.\\r\\nNov 17 04:03:47 debian systemd[1]: Finished Commit a transient machine-id on disk.\\r\\nNov 17 04:03:47 debian systemd[1]: Finished Load AppArmor profiles.\\r\\nNov 17 04:03:47 debian systemd[1]: Started Entropy Daemon based on the HAVEGE algorithm.\\r\\nNov 17 04:03:47 debian systemd[1]: Reached target System Initialization.\\r\\nNov 17 04:03:47 debian haveged[298]: haveged: command socket is listening at fd 3\\r\\nNov 17 04:03:47 debian systemd[1]: Started GCE Workload Certificate refresh timer.\\r\\nNov 17 04:03:47 debian systemd[1]: Started NSS cache refresh timer.\\r\\nNov 17 04:03:47 debian systemd[1]: Started Daily Cleanup of Temporary Directories.\\r\\nNov 17 04:03:47 debian systemd[1]: Listening on D-Bus System Message Bus Socket.\\r\\nNov 17 04:03:47 debian systemd[1]: Listening on UUID daemon activation socket.\\r\\nNov 17 04:03:47 debian systemd[1]: Reached target Sockets.\\r\\nNov 17 04:03:47 debian systemd[1]: Starting Resize root filesystem if needed...\\r\\nNov 17 04:03:47 debian systemd[1]: Started ifup for ens4.\\r\\nNov 17 04:03:47 debian google_disk_expand[299]: Checking if filesystem on /dev/sda1 needs resizing\\r\\nNov 17 04:03:47 debian systemd[1]: Starting Raise network interfaces...\\r\\nNov 17 04:03:47 debian google_disk_expand[309]: resize2fs 1.46.2 (28-Feb-2021)\\r\\nNov 17 04:03:47 debian google_disk_expand[309]: The filesystem is already 2588667 (4k) blocks long.  Nothing to do!\\r\\nNov 17 04:03:47 debian google_disk_expand[299]: Done.\\r\\nNov 17 04:03:47 debian systemd[1]: google-disk-expand.service: Succeeded.\\r\\nNov 17 04:03:47 debian systemd[1]: Finished Resize root filesystem if needed.\\r\\nNov 17 04:03:47 debian systemd[1]: Reached target Basic System.\\r\\nNov 17 04:03:47 debian systemd[1]: Started Regular background program processing daemon.\\r\\nNov 17 04:03:47 debian systemd[1]: Started D-Bus System Message Bus.\\r\\nNov 17 04:03:47 debian systemd[1]: Starting Remove Stale Online ext4 Metadata Check Snapshots...\\r\\nNov 17 04:03:47 debian dhclient[321]: Internet Systems Consortium DHCP Client 4.4.1\\r\\nNov 17 04:03:47 debian sh[321]: Internet Systems Consortium DHCP Client 4.4.1\\r\\nNov 17 04:03:47 debian dhclient[321]: Copyright 2004-2018 Internet Systems Consortium.\\r\\nNov 17 04:03:47 debian sh[321]: Copyright 2004-2018 Internet Systems Consortium.\\r\\nNov 17 04:03:47 debian dhclient[321]: All rights reserved.\\r\\nNov 17 04:03:47 debian sh[321]: All rights reserved.\\r\\nNov 17 04:03:47 debian dhclient[321]: For info, please visit https://www.isc.org/software/dhcp/\\r\\nNov 17 04:03:47 debian sh[321]: For info, please visit https://www.isc.org/software/dhcp/\\r\\nNov 17 04:03:47 debian dhclient[321]: \\r\\nNov 17 04:03:47 debian systemd[1]: Condition check resulted in getty on tty2-tty6 if dbus and logind are not available being skipped.\\r\\nNov 17 04:03:47 debian systemd[1]: Starting System Logging Service...\\r\\nNov 17 04:03:47 debian systemd[1]: Starting User Login Management...\\r\\nNov 17 04:03:47 debian systemd[1]: Started System Logging Service.\\r\\nNov 17 04:03:47 debian ifup[304]: ifup: waiting for lock on /run/network/ifstate.ens4\\r\\nNov 17 04:03:47 debian dhclient[321]: Listening on LPF/ens4/42:01:0a:9a:00:0c\\r\\nNov 17 04:03:47 debian sh[321]: Listening on LPF/ens4/42:01:0a:9a:00:0c\\r\\nNov 17 04:03:47 debian sh[321]: Sending on   LPF/ens4/42:01:0a:9a:00:0c\\r\\nNov 17 04:03:47 debian sh[321]: Sending on   Socket/fallback\\r\\nNov 17 04:03:47 debian sh[321]: Created duid \\\"\\\\000\\\\001\\\\000\\\\001,\\\\351\\\\242\\\\243B\\\\001\\\\012\\\\232\\\\000\\\\014\\\".\\r\\nNov 17 04:03:47 debian sh[321]: DHCPDISCOVER on ens4 to 255.255.255.255 port 67 interval 7\\r\\nNov 17 04:03:47 debian dhclient[321]: Sending on   LPF/ens4/42:01:0a:9a:00:0c\\r\\nNov 17 04:03:47 debian dhclient[321]: Sending on   Socket/fallback\\r\\nNov 17 04:03:47 debian dhclient[321]: Created duid \\\"\\\\000\\\\001\\\\000\\\\001,\\\\351\\\\242\\\\243B\\\\001\\\\012\\\\232\\\\000\\\\014\\\".\\r\\nNov 17 04:03:47 debian dhclient[321]: DHCPDISCOVER on ens4 to 255.255.255.255 port 67 interval 7\\r\\nNov 17 04:03:47 debian dhclient[321]: DHCPOFFER of 10.154.0.12 from 169.254.169.254\\r\\nNov 17 04:03:47 debian sh[321]: DHCPOFFER of 10.154.0.12 from 169.254.169.254\\r\\nNov 17 04:03:47 debian sh[321]: DHCPREQUEST for 10.154.0.12 on ens4 to 255.255.255.255 port 67\\r\\nNov 17 04:03:47 debian dhclient[321]: DHCPREQUEST for 10.154.0.12 on ens4 to 255.255.255.255 port 67\\r\\nNov 17 04:03:47 debian dhclient[321]: DHCPACK of 10.154.0.12 from 169.254.169.254\\r\\nNov 17 04:03:47 debian sh[321]: DHCPACK of 10.154.0.12 from 169.254.169.254\\r\\nNov 17 04:03:47 debian systemd[1]: Started User Login Management.\\r\\nNov 17 04:03:47 debian dhclient[321]: bound to 10.154.0.12 -- renewal in 32899 seconds.\\r\\nNov 17 04:03:47 debian sh[321]: bound to 10.154.0.12 -- renewal in 32899 seconds.\\r\\nNov 17 04:03:47 debian haveged[298]: haveged: ver: 1.9.14; arch: x86; vend: GenuineIntel; build: (gcc 10.2.1 ITV); collect: 128K\\r\\nNov 17 04:03:47 debian haveged[298]: haveged: cpu: (L4 VC); data: 32K (L4 V); inst: 32K (L4 V); idx: 24/40; sz: 32154/54019\\r\\nNov 17 04:03:47 debian haveged[298]: haveged: tot tests(BA8): A:1/1 B:1/1 continuous tests(B):  last entropy estimate 7.99739\\r\\nNov 17 04:03:47 debian haveged[298]: haveged: fills: 0, generated: 0\\r\\nNov 17 04:03:47 debian systemd[1]: e2scrub_reap.service: Succeeded.\\r\\nNov 17 04:03:47 debian systemd[1]: Finished Remove Stale Online ext4 Metadata Check Snapshots.\\r\\nNov 17 04:03:49 debian dhclient[435]: Internet Systems Consortium DHCP Client 4.4.1\\r\\nNov 17 04:03:49 debian sh[435]: Internet Systems Consortium DHCP Client 4.4.1\\r\\nNov 17 04:03:49 debian dhclient[435]: Copyright 2004-2018 Internet Systems Consortium.\\r\\nNov 17 04:03:49 debian sh[435]: Copyright 2004-2018 Internet Systems Consortium.\\r\\nNov 17 04:03:49 debian dhclient[435]: All rights reserved.\\r\\nNov 17 04:03:49 debian sh[435]: All rights reserved.\\r\\nNov 17 04:03:49 debian dhclient[435]: For info, please visit https://www.isc.org/software/dhcp/\\r\\nNov 17 04:03:49 debian sh[435]: For info, please visit https://www.isc.org/software/dhcp/\\r\\nNov 17 04:03:49 debian dhclient[435]: \\r\\nNov 17 04:03:49 debian dhclient[435]: Listening on Socket/ens4\\r\\nNov 17 04:03:49 debian sh[435]: Listening on Socket/ens4\\r\\nNov 17 04:03:49 debian sh[435]: Sending on   Socket/ens4\\r\\nNov 17 04:03:49 debian sh[435]: PRC: Soliciting for leases (INIT).\\r\\nNov 17 04:03:49 debian dhclient[435]: Sending on   Socket/ens4\\r\\nNov 17 04:03:49 debian dhclient[435]: XMT: Solicit on ens4, interval 1010ms.\\r\\nNov 17 04:03:49 debian sh[468]: ens4=ens4\\r\\n         Starting \\u001b[0;1;39mGCE Workload Certificate refresh\\u001b[0m...\\r\\n         Starting \\u001b[0;1;39mNSS cache refresh\\u001b[0m...\\r\\nNov 17 04:03:49 debian systemd[1]: Starting GCE Workload Certificate refresh...\\r\\nNov 17 04:03:49 debian systemd[1]: Starting NSS cache refresh...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mRaise network interfaces\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mNetwork\\u001b[0m.\\r\\nNov 17 04:03:49 debian systemd[1]: Finished Raise network interfaces.\\r\\nNov 17 04:03:49 debian systemd[1]: Reached target Network.\\r\\nNov 17 04:03:49 debian systemd[1]: Reached target Network is Online.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mNetwork is Online\\u001b[0m.\\r\\nNov 17 04:03:49 debian systemd[1]: Starting chrony, an NTP client/server...\\r\\n         Starting \\u001b[0;1;39mchrony, an NTP client/server\\u001b[0m...\\r\\nNov 17 04:03:49 debian systemd[1]: Starting Google Compute Engine Guest Agent...\\r\\n         Starting \\u001b[0;1;39mGoogle Compute Engine Guest Agent\\u001b[0m...\\r\\nNov 17 04:03:49 debian systemd[1]: Started Google OSConfig Agent.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mGoogle OSConfig Agent\\u001b[0m.\\r\\nNov 17 04:03:49 debian systemd[1]: Starting Google Compute Engine Shutdown Scripts...\\r\\n         Starting \\u001b[0;1;39mGoogle Compute Engine Shutdown Scripts\\u001b[0m...\\r\\nNov 17 04:03:49 debian systemd[1]: Starting Permit User Sessions...\\r\\n         Starting \\u001b[0;1;39mPermit User Sessions\\u001b[0m...\\r\\nNov 17 04:03:49 debian systemd[1]: Started Unattended Upgrades Shutdown.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mUnattended Upgrades Shutdown\\u001b[0m.\\r\\nNov 17 04:03:49 debian systemd[1]: Finished Google Compute Engine Shutdown Scripts.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mGoogle Compute Engine Shutdown Scripts\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mPermit User Sessions\\u001b[0m.\\r\\nNov 17 04:03:49 debian systemd[1]: Finished Permit User Sessions.\\r\\nNov 17 04:03:49 debian systemd[1]: Started Getty on tty1.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mGetty on tty1\\u001b[0m.\\r\\nNov 17 04:03:49 debian systemd[1]: Started Serial Getty on ttyS0.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mSerial Getty on ttyS0\\u001b[0m.\\r\\nNov 17 04:03:49 debian systemd[1]: Reached target Login Prompts.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mLogin Prompts\\u001b[0m.\\r\\nNov 17 04:03:49 debian chronyd[498]: chronyd version 4.0 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SIGND +ASYNCDNS +NTS +SECHASH +IPV6 -DEBUG)\\r\\nNov 17 04:03:49 debian google_oslogin_nss_cache[471]: oslogin_cache_refresh[471]: Refreshing passwd entry cache\\r\\nNov 17 04:03:49 debian chronyd[498]: Loaded seccomp filter\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mchrony, an NTP client/server\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mSystem Time Synchronized\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mDaily apt download activities\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mDaily apt upgrade and clean activities\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mPeriodic ext4 Onli…ata Check for All Filesystems\\u001b[0m.\\r\\nNov 17 04:03:49 debian systemd[1]: Started chrony, an NTP client/server.\\r\\nNov 17 04:03:49 debian systemd[1]: Reached target System Time Synchronized.\\r\\nNov 17 04:03:49 debian systemd[1]: Started Daily apt download activities.\\r\\nNov 17 04:03:49 debian systemd[1]: Started Daily apt upgrade and clean activities.\\r\\nNov 17 04:03:49 debian systemd[1]: Started Periodic ext4 Online Metadata Check for All Filesystems.\\r\\nNov 17 04:03:49 debian systemd[1]: Started Daily exim4-base housekeeping.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mDaily exim4-base housekeeping\\u001b[0m.\\r\\nNov 17 04:03:49 debian systemd[1]: Started Discard unused blocks once a week.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mDiscard unused blocks once a week\\u001b[0m.\\r\\nNov 17 04:03:49 debian systemd[1]: Started Daily rotation of log files.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mDaily rotation of log files\\u001b[0m.\\r\\nNov 17 04:03:49 debian systemd[1]: Started Daily man-db regeneration.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mDaily man-db regeneration\\u001b[0m.\\r\\nNov 17 04:03:49 debian systemd[1]: Reached target Timers.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mTimers\\u001b[0m.\\r\\nNov 17 04:03:49 debian systemd[1]: Starting LSB: exim Mail Transport Agent...\\r\\n         Starting \\u001b[0;1;39mLSB: exim Mail Transport Agent\\u001b[0m...\\r\\nNov 17 04:03:50 debian google_oslogin_nss_cache[471]: oslogin_cache_refresh[471]: Refreshing group entry cache\\r\\nNov 17 04:03:50 debian dhclient[435]: XMT: Solicit on ens4, interval 2000ms.\\r\\nNov 17 04:03:50 debian exim4[504]: Starting MTA:\\r\\nNov 17 04:03:50 debian exim4[522]: /usr/sbin/update-exim4.conf: 154: cannot open /etc/mailname: No such file\\r\\nNov 17 04:03:51 debian gce_workload_cert_refresh[470]: 2023/11/17 04:03:51: Done\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mGCE Workload Certificate refresh\\u001b[0m.\\r\\nNov 17 04:03:51 debian systemd[1]: gce-workload-cert-refresh.service: Succeeded.\\r\\nNov 17 04:03:51 debian systemd[1]: Finished GCE Workload Certificate refresh.\\r\\nNov 17 04:03:51 debian google_guest_agent[487]: GCE Agent Started (version 20231115.00)\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mNSS cache refresh\\u001b[0m.\\r\\nNov 17 04:03:51 debian systemd[1]: google-oslogin-cache.service: Succeeded.\\r\\nNov 17 04:03:51 debian systemd[1]: Finished NSS cache refresh.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mLSB: exim Mail Transport Agent\\u001b[0m.\\r\\nNov 17 04:03:51 debian exim4[504]:  exim4.\\r\\nNov 17 04:03:51 debian systemd[1]: Started LSB: exim Mail Transport Agent.\\r\\nNov 17 04:03:52 debian google_guest_agent[487]: Instance ID changed, running first-boot actions\\r\\nNov 17 04:03:52 debian OSConfigAgent[489]: 2023-11-17T04:03:52.2878Z OSConfigAgent Info: OSConfig Agent (version 20231010.00-g1) started.\\r\\nNov 17 04:03:52 debian google_guest_agent[487]: Starting the scheduler to run jobs\\r\\nNov 17 04:03:52 debian google_guest_agent[487]: Scheduler - start: []\\r\\nNov 17 04:03:52 debian google_guest_agent[487]: Skipping scheduling credential generation job, failed to reach client credentials endpoint(instance/credentials/certs) with error: error connecting to metadata server, status code: 404\\r\\nNov 17 04:03:52 debian google_guest_agent[487]: ERROR scheduler.go:177 Failed to schedule job MTLS_MDS_Credential_Boostrapper with error: ShouldEnable() returned false, cannot schedule job MTLS_MDS_Credential_Boostrapper\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mGoogle Compute Engine Guest Agent\\u001b[0m.\\r\\nNov 17 04:03:52 debian systemd[1]: Started Google Compute Engine Guest Agent.\\r\\nNov 17 04:03:52 debian systemd[1]: Starting Google Compute Engine Startup Scripts...\\r\\n         Starting \\u001b[0;1;39mGoogle Compute Engine Startup Scripts\\u001b[0m...\\r\\nNov 17 04:03:52 debian systemd[1]: Starting OpenBSD Secure Shell server...\\r\\n         Starting \\u001b[0;1;39mOpenBSD Secure Shell server\\u001b[0m...\\r\\nNov 17 04:03:52 debian google_guest_agent[487]: Starting the scheduler to run jobs\\r\\nNov 17 04:03:52 debian google_guest_agent[487]: No restorecon available, not restoring SELinux context of: /etc/ssh/oslogin_trustedca.pub\\r\\nNov 17 04:03:52 debian google_guest_agent[487]: Enabling OS Login\\r\\nNov 17 04:03:52 debian google_guest_agent[487]: Scheduling job: telemetryJobID\\r\\nNov 17 04:03:52 debian google_guest_agent[487]: Scheduling job \\\"telemetryJobID\\\" to run at 24.000000 hr interval\\r\\nNov 17 04:03:52 debian google_guest_agent[487]: Successfully scheduled job telemetryJobID\\r\\nNov 17 04:03:52 debian google_guest_agent[487]: Invoking job \\\"telemetryJobID\\\"\\r\\nNov 17 04:03:52 debian google_guest_agent[487]: Scheduler - added: [now 2023-11-17 04:03:52.503242685 +0000 UTC entry 1 next 2023-11-18 04:03:52 +0000 UTC]\\r\\nNov 17 04:03:52 debian dhclient[435]: XMT: Solicit on ens4, interval 4010ms.\\r\\nNov 17 04:03:52 debian dhclient[826]: Internet Systems Consortium DHCP Client 4.4.1\\r\\nNov 17 04:03:52 debian dhclient[826]: Copyright 2004-2018 Internet Systems Consortium.\\r\\nNov 17 04:03:52 debian dhclient[826]: All rights reserved.\\r\\nNov 17 04:03:52 debian dhclient[826]: For info, please visit https://www.isc.org/software/dhcp/\\r\\nNov 17 04:03:52 debian dhclient[826]: \\r\\nNov 17 04:03:52 debian dhclient[826]: Listening on Socket/ens4\\r\\nNov 17 04:03:52 debian dhclient[826]: Sending on   Socket/ens4\\r\\nNov 17 04:03:52 debian dhclient[826]: Created duid \\\"\\\\000\\\\001\\\\000\\\\001,\\\\351\\\\242\\\\250B\\\\001\\\\012\\\\232\\\\000\\\\014\\\".\\r\\nNov 17 04:03:52 debian google_guest_agent[487]: Created google sudoers file\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mOpenBSD Secure Shell server\\u001b[0m.\\r\\nNov 17 04:03:52 debian systemd[1]: Started OpenBSD Secure Shell server.\\r\\nNov 17 04:03:52 debian systemd[1]: Stopping User Login Management...\\r\\n         Stopping \\u001b[0;1;39mUser Login Management\\u001b[0m...\\r\\nNov 17 04:03:52 debian systemd[1]: systemd-logind.service: Succeeded.\\r\\nNov 17 04:03:52 debian systemd[1]: Stopped User Login Management.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Stopped \\u001b[0;1;39mUser Login Management\\u001b[0m.\\r\\nNov 17 04:03:52 debian systemd[1]: Starting Load Kernel Module drm...\\r\\n         Starting \\u001b[0;1;39mLoad Kernel Module drm\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mLoad Kernel Module drm\\u001b[0m.\\r\\n         Starting \\u001b[0;1;39mUser Login Management\\u001b[0m...\\r\\nNov 17 04:03:52 debian systemd[1]: modprobe@drm.service: Succeeded.\\r\\nNov 17 04:03:52 debian systemd[1]: Finished Load Kernel Module drm.\\r\\nNov 17 04:03:52 debian systemd[1]: Starting User Login Management...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mUser Login Management\\u001b[0m.\\r\\nNov 17 04:03:52 debian systemd[1]: Started User Login Management.\\r\\nNov 17 04:03:52 debian systemd[1]: Stopping Regular background program processing daemon...\\r\\n         Stopping \\u001b[0;1;39mRegular background program processing daemon\\u001b[0m...\\r\\nNov 17 04:03:52 debian systemd[1]: cron.service: Succeeded.\\r\\nNov 17 04:03:52 debian systemd[1]: Stopped Regular background program processing daemon.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Stopped \\u001b[0;1;39mRegular background program processing daemon\\u001b[0m.\\r\\nNov 17 04:03:52 debian systemd[1]: Started Regular background program processing daemon.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mRegular background program processing daemon\\u001b[0m.\\r\\nNov 17 04:03:52 debian systemd[1]: Reloading OpenBSD Secure Shell server.\\r\\nNov 17 04:03:52 debian systemd[1]: Reloaded OpenBSD Secure Shell server.\\r\\nNov 17 04:03:53 debian google_metadata_script_runner[822]: Starting startup scripts (version dev).\\r\\nNov 17 04:03:53 debian google_metadata_script_runner[822]: Found startup-script in metadata.\\r\\nNov 17 04:03:53 debian google_metadata_script_runner[822]: startup-script: Hit:1 https://deb.debian.org/debian bullseye InRelease\\r\\nNov 17 04:03:53 debian google_metadata_script_runner[822]: startup-script: Get:2 https://deb.debian.org/debian-security bullseye-security InRelease [48.4 kB]\\r\\nNov 17 04:03:53 debian google_metadata_script_runner[822]: startup-script: Get:3 https://deb.debian.org/debian bullseye-updates InRelease [44.1 kB]\\r\\nNov 17 04:03:53 debian google_metadata_script_runner[822]: startup-script: Get:4 https://deb.debian.org/debian bullseye-backports InRelease [49.0 kB]\\r\\nNov 17 04:03:53 debian google_metadata_script_runner[822]: startup-script: Get:5 https://packages.cloud.google.com/apt google-compute-engine-bullseye-stable InRelease [5146 B]\\r\\nNov 17 04:03:53 debian google_metadata_script_runner[822]: startup-script: Hit:6 https://packages.cloud.google.com/apt cloud-sdk-bullseye InRelease\\r\\nNov 17 04:03:53 debian google_metadata_script_runner[822]: startup-script: Get:7 https://deb.debian.org/debian-security bullseye-security/main Sources [160 kB]\\r\\nNov 17 04:03:53 debian google_metadata_script_runner[822]: startup-script: Get:8 https://deb.debian.org/debian-security bullseye-security/main amd64 Packages [258 kB]\\r\\nNov 17 04:03:54 debian google_metadata_script_runner[822]: startup-script: Fetched 564 kB in 1s (776 kB/s)\\r\\nNov 17 04:03:54 debian chronyd[498]: Selected source 169.254.169.254 (metadata.google.internal)\\r\\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: Reading package lists...\\r\\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: Reading package lists...\\r\\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: Building dependency tree...\\r\\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: Reading state information...\\r\\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: The following NEW packages will be installed:\\r\\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script:   apt-transport-https\\r\\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.\\r\\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: Need to get 160 kB of archives.\\r\\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: After this operation, 166 kB of additional disk space will be used.\\r\\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: Get:1 https://deb.debian.org/debian bullseye/main amd64 apt-transport-https all 2.2.4 [160 kB]\\r\\n\\r\\r\\nDebian GNU/Linux 11 valid-linux-ssh ttyS0\\r\\n\\r\\nvalid-linux-ssh login: Nov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: debconf: unable to initialize frontend: Dialog\\r\\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: debconf: (Dialog frontend will not work on a dumb terminal, an emacs shell buffer, or without a controlling terminal.)\\r\\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: debconf: falling back to frontend: Readline\\r\\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: debconf: unable to initialize frontend: Readline\\r\\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: debconf: (Can't locate Term/ReadLine.pm in @INC (you may need to install the Term::ReadLine module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.32.1 /usr/local/share/perl/5.32.1 /usr/lib/x86_64-linux-gnu/perl5/5.32 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl-base /usr/lib/x86_64-linux-gnu/perl/5.32 /usr/share/perl/5.32 /usr/local/lib/site_perl) at /usr/share/perl5/Debconf/FrontEnd/Readline.pm line 7, \\u003c\\u003e line 1.)\\r\\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: debconf: falling back to frontend: Teletype\\r\\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: dpkg-preconfigure: unable to re-open stdin:\\r\\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: Fetched 160 kB in 0s (3831 kB/s)\\r\\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: Selecting previously unselected package apt-transport-https.\\r\\nNov 17 04:03:56 debian google_metadata_script_runner[822]: startup-script: (Reading database ... #015(Reading database ... 5%#015(Reading database ... 10%#015(Reading database ... 15%#015(Reading database ... 20%#015(Reading database ... 25%#015(Reading database ... 30%#015(Reading database ... 35%#015(Reading database ... 40%#015(Reading database ... 45%#015(Reading database ... 50%#015(Reading database ... 55%#015(Reading database ... 60%#015(Reading database ... 65%#015(Reading database ... 70%#015(Reading database ... 75%#015(Reading database ... 80%#015(Reading database ... 85%#015(Reading database ... 90%#015(Reading database ... 95%#015(Reading database ... 100%#015(Reading database ... 59476 files and directories currently installed.)\\r\\nNov 17 04:03:56 debian google_metadata_script_runner[822]: startup-script: Preparing to unpack .../apt-transport-https_2.2.4_all.deb ...\\r\\nNov 17 04:03:56 debian google_metadata_script_runner[822]: startup-script: Unpacking apt-transport-https (2.2.4) ...\\r\\nNov 17 04:03:56 debian google_metadata_script_runner[822]: startup-script: Setting up apt-transport-https (2.2.4) ...\\r\\nNov 17 04:03:56 debian google_metadata_script_runner[822]: startup-script: Adding agent repository for debian.\\r\\nNov 17 04:03:56 debian dhclient[435]: XMT: Solicit on ens4, interval 8170ms.\\r\\nNov 17 04:03:56 debian google_metadata_script_runner[822]: startup-script: deb [signed-by=/usr/share/keyrings/google-cloud-ops-agent-keyring.gpg] https://packages.cloud.google.com/apt google-cloud-ops-agent-bullseye-all main\\r\\nNov 17 04:03:56 debian google_metadata_script_runner[822]: startup-script: Hit:1 https://deb.debian.org/debian bullseye InRelease\\r\\nNov 17 04:03:56 debian google_metadata_script_runner[822]: startup-script: Hit:2 https://deb.debian.org/debian-security bullseye-security InRelease\\r\\nNov 17 04:03:56 debian google_metadata_script_runner[822]: startup-script: Hit:3 https://deb.debian.org/debian bullseye-updates InRelease\\r\\nNov 17 04:03:56 debian google_metadata_script_runner[822]: startup-script: Hit:4 https://deb.debian.org/debian bullseye-backports InRelease\\r\\nNov 17 04:03:57 debian google_metadata_script_runner[822]: startup-script: Get:5 https://packages.cloud.google.com/apt google-cloud-ops-agent-bullseye-all InRelease [5115 B]\\r\\nNov 17 04:03:57 debian google_metadata_script_runner[822]: startup-script: Hit:6 https://packages.cloud.google.com/apt google-compute-engine-bullseye-stable InRelease\\r\\nNov 17 04:03:57 debian google_metadata_script_runner[822]: startup-script: Hit:7 https://packages.cloud.google.com/apt cloud-sdk-bullseye InRelease\\r\\nNov 17 04:03:57 debian google_metadata_script_runner[822]: startup-script: Get:8 https://packages.cloud.google.com/apt google-cloud-ops-agent-bullseye-all/main amd64 Packages [7973 B]\\r\\nNov 17 04:03:57 debian google_metadata_script_runner[822]: startup-script: Fetched 13.1 kB in 1s (19.6 kB/s)\\r\\nNov 17 04:03:58 debian google_metadata_script_runner[822]: startup-script: Reading package lists...\\r\\nNov 17 04:03:58 debian google_metadata_script_runner[822]: startup-script: Reading package lists...\\r\\nNov 17 04:03:58 debian google_metadata_script_runner[822]: startup-script: Building dependency tree...\\r\\nNov 17 04:03:58 debian google_metadata_script_runner[822]: startup-script: Reading state information...\\r\\nNov 17 04:03:58 debian google_metadata_script_runner[822]: startup-script: The following NEW packages will be installed:\\r\\nNov 17 04:03:58 debian google_metadata_script_runner[822]: startup-script:   google-cloud-ops-agent\\r\\nNov 17 04:03:58 debian google_metadata_script_runner[822]: startup-script: 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.\\r\\nNov 17 04:03:58 debian google_metadata_script_runner[822]: startup-script: Need to get 92.1 MB of archives.\\r\\nNov 17 04:03:58 debian google_metadata_script_runner[822]: startup-script: After this operation, 398 MB of additional disk space will be used.\\r\\nNov 17 04:03:58 debian google_metadata_script_runner[822]: startup-script: Get:1 https://packages.cloud.google.com/apt google-cloud-ops-agent-bullseye-all/main amd64 google-cloud-ops-agent amd64 2.43.0~debian11 [92.1 MB]\\r\\nNov 17 04:04:01 debian google_metadata_script_runner[822]: startup-script: debconf: unable to initialize frontend: Dialog\\r\\nNov 17 04:04:01 debian google_metadata_script_runner[822]: startup-script: debconf: (Dialog frontend will not work on a dumb terminal, an emacs shell buffer, or without a controlling terminal.)\\r\\nNov 17 04:04:01 debian google_metadata_script_runner[822]: startup-script: debconf: falling back to frontend: Readline\\r\\nNov 17 04:04:01 debian google_metadata_script_runner[822]: startup-script: debconf: unable to initialize frontend: Readline\\r\\nNov 17 04:04:01 debian google_metadata_script_runner[822]: startup-script: debconf: (Can't locate Term/ReadLine.pm in @INC (you may need to install the Term::ReadLine module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.32.1 /usr/local/share/perl/5.32.1 /usr/lib/x86_64-linux-gnu/perl5/5.32 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl-base /usr/lib/x86_64-linux-gnu/perl/5.32 /usr/share/perl/5.32 /usr/local/lib/site_perl) at /usr/share/perl5/Debconf/FrontEnd/Readline.pm line 7, \\u003c\\u003e line 1.)\\r\\nNov 17 04:04:01 debian google_metadata_script_runner[822]: startup-script: debconf: falling back to frontend: Teletype\\r\\nNov 17 04:04:01 debian google_metadata_script_runner[822]: startup-script: dpkg-preconfigure: unable to re-open stdin:\\r\\nNov 17 04:04:01 debian google_metadata_script_runner[822]: startup-script: Fetched 92.1 MB in 2s (45.1 MB/s)\\r\\nNov 17 04:04:01 debian google_metadata_script_runner[822]: startup-script: Selecting previously unselected package google-cloud-ops-agent.\\r\\nNov 17 04:04:01 debian google_metadata_script_runner[822]: startup-script: (Reading database ... #015(Reading database ... 5%#015(Reading database ... 10%#015(Reading database ... 15%#015(Reading database ... 20%#015(Reading database ... 25%#015(Reading database ... 30%#015(Reading database ... 35%#015(Reading database ... 40%#015(Reading database ... 45%#015(Reading database ... 50%#015(Reading database ... 55%#015(Reading database ... 60%#015(Reading database ... 65%#015(Reading database ... 70%#015(Reading database ... 75%#015(Reading database ... 80%#015(Reading database ... 85%#015(Reading database ... 90%#015(Reading database ... 95%#015(Reading database ... 100%#015(Reading database ... 59480 files and directories currently installed.)\\r\\nNov 17 04:04:01 debian google_metadata_script_runner[822]: startup-script: Preparing to unpack .../google-cloud-ops-agent_2.43.0~debian11_amd64.deb ...\\r\\nNov 17 04:04:01 debian google_metadata_script_runner[822]: startup-script: Unpacking google-cloud-ops-agent (2.43.0~debian11) ...\\r\\nNov 17 04:04:04 debian dhclient[435]: XMT: Solicit on ens4, interval 15830ms.\\r\\nNov 17 04:04:13 debian google_metadata_script_runner[822]: startup-script: Setting up google-cloud-ops-agent (2.43.0~debian11) ...\\r\\nNov 17 04:04:13 debian google_metadata_script_runner[822]: startup-script: Created symlink /etc/systemd/system/multi-user.target.wants/google-cloud-ops-agent.service → /lib/systemd/system/google-cloud-ops-agent.service.\\r\\nNov 17 04:04:13 debian systemd[1]: Reloading.\\r\\nNov 17 04:04:14 debian systemd[1]: Reloading.\\r\\nNov 17 04:04:14 debian systemd[1]: Started Google Cloud Ops Agent - Diagnostics.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mGoogle Cloud Ops Agent - Diagnostics\\u001b[0m.\\r\\n         Starting \\u001b[0;1;39mGoogle Cloud Ops Agent\\u001b[0m...\\r\\nNov 17 04:04:14 debian systemd[1]: Starting Google Cloud Ops Agent...\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: 2023/11/17 04:04:17 Built-in config:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: logging:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:   receivers:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:     syslog:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:       type: files\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:       include_paths:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:       - /var/log/messages\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:       - /var/log/syslog\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:   service:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:     pipelines:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:       default_pipeline:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:         receivers: [syslog]\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: metrics:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:   receivers:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:     hostmetrics:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:       type: hostmetrics\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:       collection_interval: 60s\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:   processors:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:     metrics_filter:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:       type: exclude_metrics\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:       metrics_pattern: []\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:   service:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:     pipelines:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:       default_pipeline:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:         receivers: [hostmetrics]\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:         processors: [metrics_filter]\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: 2023/11/17 04:04:17 Merged config:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: logging:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:   receivers:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:     syslog:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:       type: files\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:       include_paths:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:       - /var/log/messages\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:       - /var/log/syslog\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:   service:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:     pipelines:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:       default_pipeline:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:         receivers: [syslog]\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: metrics:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:   receivers:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:     hostmetrics:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:       type: hostmetrics\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:       collection_interval: 60s\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:   processors:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:     metrics_filter:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:       type: exclude_metrics\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:       metrics_pattern: []\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:   service:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:     pipelines:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:       default_pipeline:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:         receivers: [hostmetrics]\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:         processors: [metrics_filter]\\r\\nNov 17 04:04:20 debian dhclient[435]: XMT: Solicit on ens4, interval 32060ms.\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2070]: 2023/11/17 04:04:24 [Ports Check] Result: PASS\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2070]: 2023/11/17 04:04:24 [Network Check] Result: PASS\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2070]: 2023/11/17 04:04:24 [API Check] Result: FAIL, Error code: MonApiDisabledErr, Failure: The Monitoring API is disabled in the current Google Cloud project., Solution: Enable Monitoring API in the current Google Cloud project., Resource: https://cloud.google.com/monitoring/api/enable-api\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2070]: 2023/11/17 04:04:24 [API Check] Result: FAIL, Error code: LogApiDisabledErr, Failure: The Logging API is disabled in the current Google Cloud project., Solution: Enable Logging API in the current Google Cloud project., Resource: https://cloud.google.com/logging/docs/api/enable-api\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2070]: 2023/11/17 04:04:24 Startup checks finished\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mGoogle Cloud Ops Agent\\u001b[0m.\\r\\nNov 17 04:04:24 debian systemd[1]: Finished Google Cloud Ops Agent.\\r\\nNov 17 04:04:24 debian systemd[1]: Starting Google Cloud Ops Agent - Logging Agent...\\r\\n         Starting \\u001b[0;1;39mGoogle Cloud Ops Agent - Logging Agent\\u001b[0m...\\r\\nNov 17 04:04:24 debian systemd[1]: Starting Google Cloud Ops Agent - Metrics Agent...\\r\\n         Starting \\u001b[0;1;39mGoogle Cloud Ops Agent - Metrics Agent\\u001b[0m...\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: 2023/11/17 04:04:24 Built-in config:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: logging:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:   receivers:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:     syslog:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:       type: files\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:       include_paths:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:       - /var/log/messages\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:       - /var/log/syslog\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:   service:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:     pipelines:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:       default_pipeline:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:         receivers: [syslog]\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: metrics:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:   receivers:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:     hostmetrics:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:       type: hostmetrics\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:       collection_interval: 60s\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:   processors:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:     metrics_filter:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:       type: exclude_metrics\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:       metrics_pattern: []\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:   service:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:     pipelines:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:       default_pipeline:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:         receivers: [hostmetrics]\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:         processors: [metrics_filter]\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: 2023/11/17 04:04:24 Merged config:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: logging:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:   receivers:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:     syslog:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:       type: files\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:       include_paths:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:       - /var/log/messages\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:       - /var/log/syslog\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:   service:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:     pipelines:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:       default_pipeline:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:         receivers: [syslog]\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: metrics:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:   receivers:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:     hostmetrics:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:       type: hostmetrics\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:       collection_interval: 60s\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:   processors:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:     metrics_filter:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:       type: exclude_metrics\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:       metrics_pattern: []\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:   service:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:     pipelines:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:       default_pipeline:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:         receivers: [hostmetrics]\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:         processors: [metrics_filter]\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: 2023/11/17 04:04:24 Built-in config:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: logging:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:   receivers:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:     syslog:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:       type: files\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:       include_paths:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:       - /var/log/messages\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:       - /var/log/syslog\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:   service:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:     pipelines:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:       default_pipeline:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:         receivers: [syslog]\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: metrics:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:   receivers:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:     hostmetrics:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:       type: hostmetrics\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:       collection_interval: 60s\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:   processors:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:     metrics_filter:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:       type: exclude_metrics\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:       metrics_pattern: []\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:   service:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:     pipelines:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:       default_pipeline:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:         receivers: [hostmetrics]\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:         processors: [metrics_filter]\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: 2023/11/17 04:04:24 Merged config:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: logging:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:   receivers:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:     syslog:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:       type: files\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:       include_paths:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:       - /var/log/messages\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:       - /var/log/syslog\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:   service:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:     pipelines:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:       default_pipeline:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:         receivers: [syslog]\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: metrics:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:   receivers:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:     hostmetrics:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:       type: hostmetrics\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:       collection_interval: 60s\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:   processors:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:     metrics_filter:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:       type: exclude_metrics\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:       metrics_pattern: []\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:   service:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:     pipelines:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:       default_pipeline:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:         receivers: [hostmetrics]\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:         processors: [metrics_fil[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mGoogle Cloud Ops Agent - Logging Agent\\u001b[0m.\\r\\nter]\\r\\nNov 17 04:04:24 debian systemd[1]: Started Google Cloud Ops Agent - Logging Agent.\\r\\nNov 17 04:04:24 debian systemd[1]: Started Google Cloud Ops Agent - Metrics Agent.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mGoogle Cloud Ops Agent - Metrics Agent\\u001b[0m.\\r\\nNov 17 04:04:28 debian google_metadata_script_runner[822]: startup-script: google-cloud-ops-agent  installation succeeded.\\r\\nNov 17 04:04:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:04:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 12345601 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=11112222 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\r\\nNov 17 04:04:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\r\\nNov 17 04:04:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\r\\nNov 17 04:04:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:04:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\r\\nNov 17 04:04:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\r\\nNov 17 04:04:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mGoogle Compute Engine Startup Scripts\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mMulti-User System\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mGraphical Interface\\u001b[0m.\\r\\n         Starting \\u001b[0;1;39mUpdate UTMP about System Runlevel Changes\\u001b[0m...\\r\\nNov 17 04:04:29 debian google_metadata_script_runner[822]: startup-script exit status 0\\r\\nNov 17 04:04:29 debian google_metadata_script_runner[822]: Finished running startup scripts.\\r\\nNov 17 04:04:29 debian systemd[1]: google-startup-scripts.service: Succeeded.\\r\\nNov 17 04:04:29 debian systemd[1]: Finished Google Compute Engine Startup Scripts.\\r\\nNov 17 04:04:29 debian systemd[1]: google-startup-scripts.service: Consumed 15.644s CPU time.\\r\\nNov 17 04:04:29 debian systemd[1]: Reached target Multi-User System.\\r\\nNov 17 04:04:29 debian systemd[1]: Reached target Graphical Interface.\\r\\nNov 17 04:04:29 debian systemd[1]: Starting Update UTMP about System Runlevel Changes...\\r\\nNov 17 04:04:29 debian systemd[1]: systemd-update-utmp-runlevel.service: Succeeded.\\r\\nNov 17 04:04:29 debian systemd[1]: Finished Update UTMP about System Runlevel Changes.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mUpdate UTMP about System Runlevel Changes\\u001b[0m.\\r\\nNov 17 04:04:29 debian systemd[1]: Startup finished in 1.399s (kernel) + 44.740s (userspace) = 46.140s.\\r\\n[   46.434139] process 'subagents/fluent-bit/bin/fluent-bit' started with executable stack\\r\\nNov 17 04:04:29 debian kernel: [   46.434139] process 'subagents/fluent-bit/bin/fluent-bit' started with executable stack\\r\\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.529Z#011info#011service/telemetry.go:81#011Setting up own telemetry...\\r\\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.565Z#011info#011service/telemetry.go:104#011Serving Prometheus metrics#011{\\\"address\\\": \\\"0.0.0.0:20201\\\", \\\"level\\\": \\\"Basic\\\"}\\r\\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.642Z#011info#011filterprocessor@v0.81.0/metrics.go:89#011Metric filter configured#011{\\\"include match_type\\\": \\\"\\\", \\\"include expressions\\\": [], \\\"include metric names\\\": [], \\\"include metrics with resource attributes\\\": null, \\\"exclude match_type\\\": \\\"regexp\\\", \\\"exclude expressions\\\": [], \\\"exclude metric names\\\": [], \\\"exclude metrics with resource attributes\\\": null}\\r\\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.649Z#011info#011filterprocessor@v0.81.0/metrics.go:89#011Metric filter configured#011{\\\"include match_type\\\": \\\"\\\", \\\"include expressions\\\": [], \\\"include metric names\\\": [], \\\"include metrics with resource attributes\\\": null, \\\"exclude match_type\\\": \\\"strict\\\", \\\"exclude expressions\\\": [], \\\"exclude metric names\\\": [\\\"system.cpu.time\\\", \\\"system.network.dropped\\\", \\\"system.filesystem.inodes.usage\\\", \\\"system.paging.faults\\\", \\\"system.disk.operation_time\\\"], \\\"exclude metrics with resource attributes\\\": null}\\r\\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.649Z#011info#011filterprocessor@v0.81.0/metrics.go:89#011Metric filter configured#011{\\\"include match_type\\\": \\\"strict\\\", \\\"include expressions\\\": [], \\\"include metric names\\\": [\\\"otelcol_process_uptime\\\", \\\"otelcol_process_memory_rss\\\", \\\"otelcol_grpc_io_client_completed_rpcs\\\", \\\"otelcol_googlecloudmonitoring_point_count\\\"], \\\"include metrics with resource attributes\\\": null, \\\"exclude match_type\\\": \\\"\\\", \\\"exclude expressions\\\": [], \\\"exclude metric names\\\": [], \\\"exclude metrics with resource attributes\\\": null}\\r\\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.650Z#011info#011filterprocessor@v0.81.0/metrics.go:89#011Metric filter configured#011{\\\"include match_type\\\": \\\"strict\\\", \\\"include expressions\\\": [], \\\"include metric names\\\": [\\\"fluentbit_uptime\\\", \\\"fluentbit_stackdriver_requests_total\\\", \\\"fluentbit_stackdriver_proc_records_total\\\", \\\"fluentbit_stackdriver_retried_records_total\\\"], \\\"include metrics with resource attributes\\\": null, \\\"exclude match_type\\\": \\\"\\\", \\\"exclude expressions\\\": [], \\\"exclude metric names\\\": [], \\\"exclude metrics with resource attributes\\\": null}\\r\\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.650Z#011info#011service/service.go:131#011Starting google-cloud-metrics-agent...#011{\\\"Version\\\": \\\"latest\\\", \\\"NumCPU\\\": 1}\\r\\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.650Z#011info#011extensions/extensions.go:30#011Starting extensions...\\r\\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.743Z#011info#011internal/resourcedetection.go:125#011began detecting resource information\\r\\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.760Z#011info#011internal/resourcedetection.go:139#011detected resource information#011{\\\"resource\\\": {\\\"cloud.account.id\\\":\\\"gcpdiag-gce-faultyssh-runbook\\\",\\\"cloud.availability_zone\\\":\\\"europe-west2-a\\\",\\\"cloud.platform\\\":\\\"gcp_compute_engine\\\",\\\"cloud.provider\\\":\\\"gcp\\\",\\\"cloud.region\\\":\\\"europe-west2\\\",\\\"host.id\\\":\\\"4683873813257738493\\\",\\\"host.name\\\":\\\"valid-linux-ssh\\\",\\\"host.type\\\":\\\"projects/328022628735/machineTypes/e2-micro\\\"}}\\r\\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.772Z#011info#011prometheusreceiver/metrics_receiver.go:243#011Scrape job added#011{\\\"jobName\\\": \\\"logging-collector\\\"}\\r\\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.781Z#011info#011prometheusreceiver/metrics_receiver.go:255#011Starting discovery manager\\r\\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.802Z#011info#011prometheusreceiver/metrics_receiver.go:243#011Scrape job added#011{\\\"jobName\\\": \\\"otel-collector\\\"}\\r\\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.802Z#011info#011service/service.go:148#011Everything is ready. Begin running and processing data.\\r\\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.824Z#011info#011prometheusreceiver/metrics_receiver.go:290#011Starting scrape manager\\r\\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.824Z#011info#011prometheusreceiver/metrics_receiver.go:255#011Starting discovery manager\\r\\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.825Z#011info#011prometheusreceiver/metrics_receiver.go:290#011Starting scrape manager\\r\\nNov 17 04:04:33 debian otelopscol[2111]: 2023-11-17T04:04:33.924Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\", \\\"errorCauses\\\": [{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}]}\\r\\nNov 17 04:04:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:04:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:04:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:04:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:04:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:04:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:04:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:04:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:04:52 debian dhclient[435]: XMT: Solicit on ens4, interval 66360ms.\\r\\nNov 17 04:05:24 debian otelopscol[2111]: 2023-11-17T04:05:24.519Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}\\r\\nNov 17 04:05:24 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:05:24 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:05:24 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:05:24 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:05:24 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:05:24 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:05:24 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:05:24 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:05:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:05:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\r\\nNov 17 04:05:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\r\\nNov 17 04:05:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\r\\nNov 17 04:05:58 debian dhclient[435]: XMT: Solicit on ens4, interval 109720ms.\\r\\nNov 17 04:06:21 debian otelopscol[2111]: 2023-11-17T04:06:21.910Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}\\r\\nNov 17 04:06:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:06:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:06:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:06:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:06:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:06:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:06:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:06:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:06:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:06:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\r\\nNov 17 04:06:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\r\\nNov 17 04:06:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\r\\nNov 17 04:06:33 debian otelopscol[2111]: 2023-11-17T04:06:33.885Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\", \\\"errorCauses\\\": [{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}]}\\r\\nNov 17 04:06:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:06:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:06:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:06:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:06:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:06:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:06:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:06:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:07:21 debian otelopscol[2111]: 2023-11-17T04:07:21.907Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}\\r\\nNov 17 04:07:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:07:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:07:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:07:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:07:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:07:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:07:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:07:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:07:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:07:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\r\\nNov 17 04:07:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\r\\nNov 17 04:07:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\r\\nNov 17 04:07:33 debian otelopscol[2111]: 2023-11-17T04:07:33.868Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\", \\\"errorCauses\\\": [{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}]}\\r\\nNov 17 04:07:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:07:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:07:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:07:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:07:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:07:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:07:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:07:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:07:48 debian dhclient[435]: XMT: Solicit on ens4, interval 119890ms.\\r\\nNov 17 04:08:21 debian otelopscol[2111]: 2023-11-17T04:08:21.904Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}\\r\\nNov 17 04:08:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:08:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:08:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:08:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:08:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:08:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:08:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:08:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:08:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:08:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\r\\nNov 17 04:08:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\r\\nNov 17 04:08:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\r\\nNov 17 04:08:33 debian otelopscol[2111]: 2023-11-17T04:08:33.885Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\", \\\"errorCauses\\\": [{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}]}\\r\\nNov 17 04:08:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:08:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:08:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:08:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:08:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:08:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:08:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:08:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:09:21 debian otelopscol[2111]: 2023-11-17T04:09:21.913Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}\\r\\nNov 17 04:09:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:09:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:09:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:09:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:09:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:09:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:09:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:09:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:09:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:09:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\r\\nNov 17 04:09:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\r\\nNov 17 04:09:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\r\\nNov 17 04:09:33 debian otelopscol[2111]: 2023-11-17T04:09:33.868Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\", \\\"errorCauses\\\": [{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}]}\\r\\nNov 17 04:09:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:09:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:09:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:09:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:09:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:09:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:09:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:09:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:09:48 debian dhclient[435]: XMT: Solicit on ens4, interval 123690ms.\\r\\nNov 17 04:10:21 debian otelopscol[2111]: 2023-11-17T04:10:21.909Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}\\r\\nNov 17 04:10:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:10:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:10:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:10:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:10:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:10:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:10:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:10:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:10:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:10:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\r\\nNov 17 04:10:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\r\\nNov 17 04:10:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\r\\nNov 17 04:10:33 debian otelopscol[2111]: 2023-11-17T04:10:33.892Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\", \\\"errorCauses\\\": [{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}]}\\r\\nNov 17 04:10:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:10:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:10:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:10:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:10:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:10:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:10:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:10:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:11:21 debian otelopscol[2111]: 2023-11-17T04:11:21.906Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}\\r\\nNov 17 04:11:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:11:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:11:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:11:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:11:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:11:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:11:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:11:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:11:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:11:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\r\\nNov 17 04:11:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\r\\nNov 17 04:11:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\r\\nNov 17 04:11:33 debian otelopscol[2111]: 2023-11-17T04:11:33.860Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\", \\\"errorCauses\\\": [{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}]}\\r\\nNov 17 04:11:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:11:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:11:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:11:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:11:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:11:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:11:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:11:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:11:52 debian dhclient[435]: XMT: Solicit on ens4, interval 124490ms.\\r\\nNov 17 04:12:21 debian otelopscol[2111]: 2023-11-17T04:12:21.907Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}\\r\\nNov 17 04:12:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:12:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:12:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:12:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:12:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:12:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:12:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:12:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:12:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:12:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\r\\nNov 17 04:12:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\r\\nNov 17 04:12:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\r\\nNov 17 04:12:33 debian otelopscol[2111]: 2023-11-17T04:12:33.865Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\", \\\"errorCauses\\\": [{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}]}\\r\\nNov 17 04:12:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:12:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:12:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:12:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:12:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:12:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:12:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:12:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:13:21 debian otelopscol[2111]: 2023-11-17T04:13:21.914Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}\\r\\nNov 17 04:13:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:13:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:13:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:13:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:13:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:13:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:13:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:13:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:13:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:13:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\r\\nNov 17 04:13:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\r\\nNov 17 04:13:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\r\\nNov 17 04:13:33 debian otelopscol[2111]: 2023-11-17T04:13:33.864Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\", \\\"errorCauses\\\": [{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}]}\\r\\nNov 17 04:13:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:13:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:13:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:13:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:13:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:13:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:13:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:13:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:13:56 debian systemd[1]: Starting GCE Workload Certificate refresh...\\r\\nNov 17 04:13:56 debian gce_workload_cert_refresh[2146]: 2023/11/17 04:13:56: Done\\r\\nNov 17 04:13:56 debian systemd[1]: gce-workload-cert-refresh.service: Succeeded.\\r\\nNov 17 04:13:56 debian systemd[1]: Finished GCE Workload Certificate refresh.\\r\\nNov 17 04:13:56 debian dhclient[435]: XMT: Solicit on ens4, interval 126650ms.\\r\\nNov 17 04:14:21 debian otelopscol[2111]: 2023-11-17T04:14:21.910Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}\\r\\nNov 17 04:14:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:14:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:14:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:14:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:14:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:14:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:14:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:14:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:14:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:14:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\r\\nNov 17 04:14:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\r\\nNov 17 04:14:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\r\\nNov 17 04:14:33 debian otelopscol[2111]: 2023-11-17T04:14:33.864Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\", \\\"errorCauses\\\": [{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}]}\\r\\nNov 17 04:14:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:14:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:14:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:14:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:14:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:14:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:14:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:14:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:15:21 debian otelopscol[2111]: 2023-11-17T04:15:21.909Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}\\r\\nNov 17 04:15:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:15:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:15:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:15:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:15:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:15:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:15:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:15:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:15:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:15:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\r\\nNov 17 04:15:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\r\\nNov 17 04:15:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\r\\nNov 17 04:15:33 debian otelopscol[2111]: 2023-11-17T04:15:33.859Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\", \\\"errorCauses\\\": [{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}]}\\r\\nNov 17 04:15:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:15:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:15:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:15:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:15:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:15:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:15:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:15:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:16:03 debian dhclient[435]: XMT: Solicit on ens4, interval 110910ms.\\r\\nNov 17 04:16:21 debian otelopscol[2111]: 2023-11-17T04:16:21.905Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}\\r\\nNov 17 04:16:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:16:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:16:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:16:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:16:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:16:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:16:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:16:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:16:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:16:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\r\\nNov 17 04:16:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\r\\nNov 17 04:16:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\r\\nNov 17 04:16:33 debian otelopscol[2111]: 2023-11-17T04:16:33.874Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\", \\\"errorCauses\\\": [{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}]}\\r\\nNov 17 04:16:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:16:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:16:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:16:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:16:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:16:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:16:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:16:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:17:21 debian otelopscol[2111]: 2023-11-17T04:17:21.907Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}\\r\\nNov 17 04:17:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:17:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:17:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:17:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:17:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:17:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:17:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:17:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:17:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:17:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\r\\nNov 17 04:17:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\r\\nNov 17 04:17:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\r\\nNov 17 04:17:33 debian otelopscol[2111]: 2023-11-17T04:17:33.863Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\", \\\"errorCauses\\\": [{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}]}\\r\\nNov 17 04:17:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:17:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:17:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:17:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:17:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:17:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:17:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:17:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:17:54 debian dhclient[435]: XMT: Solicit on ens4, interval 111550ms.\\r\\nNov 17 04:18:21 debian otelopscol[2111]: 2023-11-17T04:18:21.910Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}\\r\\nNov 17 04:18:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:18:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:18:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:18:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:18:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:18:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:18:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:18:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:18:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:18:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\r\\nNov 17 04:18:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\r\\nNov 17 04:18:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\r\\nNov 17 04:18:33 debian otelopscol[2111]: 2023-11-17T04:18:33.861Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\", \\\"errorCauses\\\": [{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}]}\\r\\nNov 17 04:18:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:18:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:18:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:18:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:18:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:18:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:18:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:18:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:18:56 debian systemd[1]: Starting Cleanup of Temporary Directories...\\r\\nNov 17 04:18:56 debian systemd[1]: systemd-tmpfiles-clean.service: Succeeded.\\r\\nNov 17 04:18:56 debian systemd[1]: Finished Cleanup of Temporary Directories.\\r\\nNov 17 04:19:21 debian otelopscol[2111]: 2023-11-17T04:19:21.908Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}\\r\\nNov 17 04:19:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:19:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:19:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:19:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:19:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:19:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:19:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:19:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:19:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:19:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\r\\nNov 17 04:19:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\r\\nNov 17 04:19:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\r\\nNov 17 04:19:33 debian otelopscol[2111]: 2023-11-17T04:19:33.858Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\", \\\"errorCauses\\\": [{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}]}\\r\\nNov 17 04:19:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:19:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:19:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:19:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:19:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:19:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:19:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:19:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:19:45 debian dhclient[435]: XMT: Solicit on ens4, interval 110200ms.\\r\\nNov 17 04:20:21 debian otelopscol[2111]: 2023-11-17T04:20:21.910Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}\\r\\nNov 17 04:20:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:20:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:20:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:20:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:20:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:20:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:20:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:20:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:20:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:20:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\r\\nNov 17 04:20:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\r\\nNov 17 04:20:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\r\\nNov 17 04:20:33 debian otelopscol[2111]: 2023-11-17T04:20:33.862Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\", \\\"errorCauses\\\": [{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}]}\\r\\nNov 17 04:20:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:20:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:20:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:20:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:20:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:20:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:20:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:20:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:21:21 debian otelopscol[2111]: 2023-11-17T04:21:21.904Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}\\r\\nNov 17 04:21:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:21:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:21:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:21:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:21:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:21:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:21:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:21:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:21:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:21:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\r\\nNov 17 04:21:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\r\\nNov 17 04:21:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\r\\nNov 17 04:21:33 debian otelopscol[2111]: 2023-11-17T04:21:33.856Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\", \\\"errorCauses\\\": [{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}]}\\r\\nNov 17 04:21:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:21:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:21:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:21:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:21:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:21:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:21:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:21:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:21:36 debian dhclient[435]: XMT: Solicit on ens4, interval 124490ms.\\r\\nNov 17 04:22:21 debian otelopscol[2111]: 2023-11-17T04:22:21.905Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}\\r\\nNov 17 04:22:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:22:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:22:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:22:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:22:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:22:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:22:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:22:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:22:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:22:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\r\\nNov 17 04:22:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\r\\nNov 17 04:22:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\r\\nNov 17 04:22:33 debian otelopscol[2111]: 2023-11-17T04:22:33.849Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\", \\\"errorCauses\\\": [{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}]}\\r\\nNov 17 04:22:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:22:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:22:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:22:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:22:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:22:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:22:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:22:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:23:21 debian otelopscol[2111]: 2023-11-17T04:23:21.905Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}\\r\\nNov 17 04:23:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:23:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:23:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:23:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:23:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:23:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:23:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:23:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:23:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:23:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\r\\nNov 17 04:23:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\r\\nNov 17 04:23:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\r\\nNov 17 04:23:33 debian otelopscol[2111]: 2023-11-17T04:23:33.855Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\", \\\"errorCauses\\\": [{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}]}\\r\\nNov 17 04:23:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:23:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:23:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:23:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:23:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:23:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:23:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:23:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:23:40 debian dhclient[435]: XMT: Solicit on ens4, interval 113100ms.\\r\\nNov 17 04:24:21 debian otelopscol[2111]: 2023-11-17T04:24:21.908Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}\\r\\nNov 17 04:24:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:24:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:24:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:24:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:24:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:24:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:24:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:24:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:24:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:24:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\r\\nNov 17 04:24:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\r\\nNov 17 04:24:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\r\\nNov 17 04:24:33 debian otelopscol[2111]: 2023-11-17T04:24:33.853Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\", \\\"errorCauses\\\": [{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}]}\\r\\nNov 17 04:24:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:24:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:24:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:24:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:24:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:24:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:24:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:24:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:24:56 debian systemd[1]: Starting GCE Workload Certificate refresh...\\r\\nNov 17 04:24:56 debian gce_workload_cert_refresh[2159]: 2023/11/17 04:24:56: Done\\r\\nNov 17 04:24:56 debian systemd[1]: gce-workload-cert-refresh.service: Succeeded.\\r\\nNov 17 04:24:56 debian systemd[1]: Finished GCE Workload Certificate refresh.\\r\\n\",\n  \"start\": \"0\",\n  \"next\": \"311872\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/valid-linux-ssh/serialPortOutput\"\n}\n"
  },
  {
    "path": "test-data/gce2/json-dumps/compute-serial-port-output-valid-windows-ssh.json",
    "content": "{\n  \"kind\": \"compute#serialPortOutput\",\n  \"contents\": \"\\u001b[2J\\u001b[01;01H\\u001b[=3h\\u001b[2J\\u001b[01;01H\\u001b[2J\\u001b[01;01H\\u001b[=3h\\u001b[2J\\u001b[01;01HCSM BBS Table full.\\r\\nBdsDxe: loading Boot0001 \\\"UEFI Google PersistentDisk \\\" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\\r\\nBdsDxe: starting Boot0001 \\\"UEFI Google PersistentDisk \\\" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\\r\\n\\r\\nUEFI: Attempting to start image.\\r\\nDescription: UEFI Google PersistentDisk \\r\\nFilePath: PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\\r\\nOptionNumber: 1.\\r\\n\\r\\n\\u001b[2J\\u001b[01;01H\\u001b[=3h\\u001b[2J\\u001b[01;01H\\u001b[1m\\u001b[37m\\u001b[40m\\u001b[2J\\u001b[01;01H2023/11/17 04:04:27 GCEGuestAgent: GCE Agent Started (version 20231004.02)\\n2023/11/17 04:04:27 GCEGuestAgent: Adding route to metadata server on adapter with index 5\\n2023/11/17 04:04:28 GCEGuestAgent: Starting the scheduler to run jobs\\n2023/11/17 04:04:28 GCEGuestAgent: start: []\\n2023/11/17 04:04:28 GCEGuestAgent: Successfully scheduled job telemetryJobID\\n2023/11/17 04:10:04 GCEInstanceSetup: Enable google_osconfig_agent during the specialize configuration pass.\\n2023/11/17 04:10:13 GCEInstanceSetup: Starting sysprep specialize phase.\\n2023/11/17 04:10:31 GCEInstanceSetup: All networks set to DHCP.\\n2023/11/17 04:10:32 GCEInstanceSetup: VirtIO network adapter detected.\\n2023/11/17 04:10:33 GCEInstanceSetup: Running 'netsh' with arguments 'interface ipv4 set interface Ethernet mtu=1460'\\n2023/11/17 04:10:44 GCEInstanceSetup: --\\u003e Ok.\\n2023/11/17 04:10:44 GCEInstanceSetup: MTU set to 1460.\\n2023/11/17 04:10:44 GCEInstanceSetup: Running 'route' with arguments '/p add 169.254.169.254 mask 255.255.255.255 0.0.0.0 if 5 metric 1'\\n2023/11/17 04:10:45 GCEInstanceSetup: --\\u003e OK!\\n2023/11/17 04:10:57 GCEInstanceSetup: Getting hostname from metadata server.\\n2023/11/17 04:10:58 GCEInstanceSetup: Renamed from WIN-4VMNVNB0HQV to valid-windows-ssh.\\n2023/11/17 04:10:58 GCEInstanceSetup: Configuring WinRM...\\n2023/11/17 04:11:15 GCEInstanceSetup: Running 'C:\\\\Program Files\\\\Google\\\\Compute Engine\\\\tools\\\\certgen.exe' with arguments '-outDir C:\\\\Windows\\\\TEMP\\\\cert -hostname valid-windows-ssh'\\n2023/11/17 04:11:19 GCEInstanceSetup: --\\u003e written C:\\\\Windows\\\\TEMP\\\\cert\\\\cert.p12\\n2023/11/17 04:11:21 GCEInstanceSetup: Waiting for WinRM to be running...\\n2023/11/17 04:11:30 GCEInstanceSetup: Setup of WinRM complete.\\n2023/11/17 04:11:32 GCEMetadataScripts: Starting specialize scripts (version 20231004.02).\\n2023/11/17 04:11:32 GCEMetadataScripts: No specialize scripts to run.\\n2023/11/17 04:11:32 GCEInstanceSetup: Finished with sysprep specialize phase, restarting...\\n2023/11/17 04:11:49 GCEGuestAgent: Error watching metadata: context canceled\\n2023/11/17 04:11:51 GCEGuestAgent: GCE Agent Stopped\\n\\u001b[2J\\u001b[01;01H\\u001b[=3h\\u001b[2J\\u001b[01;01H\\u001b[2J\\u001b[01;01H\\u001b[=3h\\u001b[2J\\u001b[01;01HCSM BBS Table full.\\r\\nBdsDxe: loading Boot0003 \\\"Windows Boot Manager\\\" from HD(2,GPT,E07BF2FB-B462-4D2C-955E-124C0C590313,0x8000,0x32000)/\\\\EFI\\\\Microsoft\\\\Boot\\\\bootmgfw.efi\\r\\nBdsDxe: starting Boot0003 \\\"Windows Boot Manager\\\" from HD(2,GPT,E07BF2FB-B462-4D2C-955E-124C0C590313,0x8000,0x32000)/\\\\EFI\\\\Microsoft\\\\Boot\\\\bootmgfw.efi\\r\\n\\r\\nUEFI: Attempting to start image.\\r\\nDescription: Windows Boot Manager\\r\\nFilePath: HD(2,GPT,E07BF2FB-B462-4D2C-955E-124C0C590313,0x8000,0x32000)/\\\\EFI\\\\Microsoft\\\\Boot\\\\bootmgfw.efi\\r\\nOptionNumber: 3.\\r\\n\\r\\n\\u001b[2J\\u001b[01;01H\\u001b[=3h\\u001b[2J\\u001b[01;01H\\u001b[1m\\u001b[37m\\u001b[40m\\u001b[2J\\u001b[01;01H2023/11/17 04:14:43 GCEInstanceSetup: Enable google_osconfig_agent during the specialize configuration pass.\\n2023/11/17 04:14:54 GCEInstanceSetup: WinRM certificate details: Subject: CN=valid-windows-ssh, Thumbprint: DF776825E4EFC3C6755C172199C8467279BDBD3D\\n2023/11/17 04:14:54 GCEInstanceSetup: RDP certificate details: Subject: CN=valid-windows-ssh, Thumbprint: 1998E382AD653F50CBBB2BD661F96F64DD7B89F7\\n2023/11/17 04:15:04 GCEInstanceSetup: Checking instance license activation status.\\n2023/11/17 04:15:19 GCEInstanceSetup: valid-windows-ssh needs to be activated by a KMS Server.\\n2023/11/17 04:15:21 GCEInstanceSetup: Key Management Service machine name set to kms.windows.googlecloud.com successfully.\\n2023/11/17 04:15:27 GCEInstanceSetup: Installed product key WMDGN-G9PQG-XVVXX-R3X43-63DFG successfully.\\n2023/11/17 04:15:27 GCEInstanceSetup: Activating instance...\\n2023/11/17 04:15:47 GCEInstanceSetup: Activating Windows(R), ServerDatacenter edition (34e1ae55-27f8-4950-8877-7a03be5fb181) ...\\n2023/11/17 04:15:47 GCEInstanceSetup: Product activated successfully.\\n2023/11/17 04:15:50 GCEInstanceSetup: Activation successful.\\n2023/11/17 04:15:50 GCEInstanceSetup: Running 'schtasks' with arguments '/change /tn GCEStartup /enable'\\n2023/11/17 04:15:51 GCEInstanceSetup: --\\u003e SUCCESS: The parameters of scheduled task \\\"GCEStartup\\\" have been changed.\\n2023/11/17 04:15:51 GCEInstanceSetup: Running 'schtasks' with arguments '/run /tn GCEStartup'\\n2023/11/17 04:15:51 GCEInstanceSetup: --\\u003e SUCCESS: Attempted to run the scheduled task \\\"GCEStartup\\\".\\n2023/11/17 04:15:51 GCEInstanceSetup: ------------------------------------------------------------\\n2023/11/17 04:15:51 GCEInstanceSetup: Instance setup finished. valid-windows-ssh is ready to use.\\n2023/11/17 04:15:51 GCEInstanceSetup: ------------------------------------------------------------\\n2023/11/17 04:16:06 GCEMetadataScripts: Starting startup scripts (version 20231004.02).\\n2023/11/17 04:16:09 GCEMetadataScripts: No startup scripts to run.\\n2023/11/17 04:16:10 GCEGuestAgent: GCE Agent Started (version 20231004.02)\\n2023/11/17 04:16:17 GCEGuestAgent: Starting the scheduler to run jobs\\n2023/11/17 04:16:19 GCEGuestAgent: start: []\\n2023/11/17 04:16:20 GCEGuestAgent: Scheduling job \\\"telemetryJobID\\\" to run at 24.000000 hr interval\\n2023/11/17 04:16:20 GCEGuestAgent: Successfully scheduled job telemetryJobID\\n2023/11/17 04:16:20 GCEGuestAgent: added: [now 2023-11-17 04:16:20.6575916 +0000 GMT entry 1 next 2023-11-18 04:16:20 +0000 GMT]\\n2023-11-17T04:16:37.9296Z OSConfigAgent Info: OSConfig Agent (version 20231010.00.0+win@1) started.\\n\",\n  \"start\": \"0\",\n  \"next\": \"5789\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/valid-windows-ssh/serialPortOutput\"\n}\n"
  },
  {
    "path": "test-data/gce2/json-dumps/compute-subnetwork-policy.json",
    "content": "{\n  \"bindings\": [\n    {\n      \"members\": [\n        \"serviceAccount:gke1sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/compute.networkUser\"\n    }\n  ],\n  \"etag\": \"BwXba-kLoiA=\",\n  \"version\": 1\n}\n"
  },
  {
    "path": "test-data/gce2/json-dumps/compute-subnetworks-aggregated.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gke1-aaaa/aggregated/subnetworks\",\n  \"items\": {\n    \"regions/asia-east1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.626-07:00\",\n          \"fingerprint\": \"ExVityxQ7Zw=\",\n          \"gatewayAddress\": \"10.140.0.1\",\n          \"id\": \"7865289181883843690\",\n          \"ipCidrRange\": \"10.140.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-east1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-east1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-east2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.735-07:00\",\n          \"fingerprint\": \"WEPpLpqTaII=\",\n          \"gatewayAddress\": \"10.170.0.1\",\n          \"id\": \"1625232185091474538\",\n          \"ipCidrRange\": \"10.170.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-east2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-east2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-northeast1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.546-07:00\",\n          \"fingerprint\": \"bQ24OL6A-_g=\",\n          \"gatewayAddress\": \"10.146.0.1\",\n          \"id\": \"1533136348119614570\",\n          \"ipCidrRange\": \"10.146.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-northeast2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.673-07:00\",\n          \"fingerprint\": \"V5llMO8nmmI=\",\n          \"gatewayAddress\": \"10.174.0.1\",\n          \"id\": \"9108510720326681706\",\n          \"ipCidrRange\": \"10.174.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-northeast3\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.690-07:00\",\n          \"fingerprint\": \"YvlSkRtP_4s=\",\n          \"gatewayAddress\": \"10.178.0.1\",\n          \"id\": \"4106072082002527338\",\n          \"ipCidrRange\": \"10.178.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast3\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast3/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-south1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.687-07:00\",\n          \"fingerprint\": \"wpauE-6Ls5k=\",\n          \"gatewayAddress\": \"10.160.0.1\",\n          \"id\": \"799045077667726442\",\n          \"ipCidrRange\": \"10.160.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-south1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-south1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-south2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.745-07:00\",\n          \"fingerprint\": \"Q7YnvFsvcIs=\",\n          \"gatewayAddress\": \"10.190.0.1\",\n          \"id\": \"5569943562367845482\",\n          \"ipCidrRange\": \"10.190.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-south2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-south2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-southeast1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.680-07:00\",\n          \"fingerprint\": \"9qw_IGoz63I=\",\n          \"gatewayAddress\": \"10.148.0.1\",\n          \"id\": \"1399967472608134250\",\n          \"ipCidrRange\": \"10.148.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-southeast1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-southeast1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-southeast2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.669-07:00\",\n          \"fingerprint\": \"A364yIYGdbo=\",\n          \"gatewayAddress\": \"10.184.0.1\",\n          \"id\": \"925018594468217962\",\n          \"ipCidrRange\": \"10.184.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-southeast2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-southeast2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/australia-southeast1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.681-07:00\",\n          \"fingerprint\": \"nW5ufndV5Es=\",\n          \"gatewayAddress\": \"10.152.0.1\",\n          \"id\": \"3491955985615471722\",\n          \"ipCidrRange\": \"10.152.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/australia-southeast1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/australia-southeast1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/australia-southeast2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.656-07:00\",\n          \"fingerprint\": \"DrRYoQz8MQQ=\",\n          \"gatewayAddress\": \"10.192.0.1\",\n          \"id\": \"3881444575162188906\",\n          \"ipCidrRange\": \"10.192.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/australia-southeast2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/australia-southeast2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-central2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.681-07:00\",\n          \"fingerprint\": \"Fkp5Ia_kWjU=\",\n          \"gatewayAddress\": \"10.186.0.1\",\n          \"id\": \"7309165993080177770\",\n          \"ipCidrRange\": \"10.186.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-central2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-central2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-north1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.676-07:00\",\n          \"fingerprint\": \"uAKn9PpojKc=\",\n          \"gatewayAddress\": \"10.166.0.1\",\n          \"id\": \"5895305034600072298\",\n          \"ipCidrRange\": \"10.166.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-north1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-north1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-southwest1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:34.478-07:00\",\n          \"fingerprint\": \"7puHFtbgohs=\",\n          \"gatewayAddress\": \"10.204.0.1\",\n          \"id\": \"6503801733215994985\",\n          \"ipCidrRange\": \"10.204.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-southwest1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-southwest1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.565-07:00\",\n          \"fingerprint\": \"RYxGa4BdqVw=\",\n          \"gatewayAddress\": \"10.132.0.1\",\n          \"id\": \"4254674819412968554\",\n          \"ipCidrRange\": \"10.132.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.592-07:00\",\n          \"fingerprint\": \"InwBX-PAmxE=\",\n          \"gatewayAddress\": \"10.154.0.1\",\n          \"id\": \"8673388756094993514\",\n          \"ipCidrRange\": \"10.154.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west3\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:34.435-07:00\",\n          \"fingerprint\": \"jtqiYE_BvSA=\",\n          \"gatewayAddress\": \"10.156.0.1\",\n          \"id\": \"2730999123496453225\",\n          \"ipCidrRange\": \"10.156.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west3\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west3/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west4\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.623-07:00\",\n          \"fingerprint\": \"sfuW5PvbdEI=\",\n          \"gatewayAddress\": \"10.164.0.1\",\n          \"id\": \"1461822054006834282\",\n          \"ipCidrRange\": \"10.164.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": true,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4\",\n          \"secondaryIpRanges\": [\n            {\n              \"ipCidrRange\": \"10.85.0.0/17\",\n              \"rangeName\": \"gke-autopilot-gke1-pods-6a0c2f5b\"\n            },\n            {\n              \"ipCidrRange\": \"10.85.128.0/22\",\n              \"rangeName\": \"gke-autopilot-gke1-services-6a0c2f5b\"\n            },\n            {\n              \"ipCidrRange\": \"10.60.0.0/20\",\n              \"rangeName\": \"gke-gke4-services-e4411110\"\n            },\n            {\n              \"ipCidrRange\": \"10.56.0.0/14\",\n              \"rangeName\": \"gke-gke4-pods-e4411110\"\n            },\n            {\n              \"ipCidrRange\": \"10.60.96.0/22\",\n              \"rangeName\": \"gke-autopilot-gke2-services-3fbbc734\"\n            },\n            {\n              \"ipCidrRange\": \"10.60.128.0/17\",\n              \"rangeName\": \"gke-autopilot-gke2-pods-3fbbc734\"\n            }\n          ],\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        },\n        {\n          \"creationTimestamp\": \"2022-10-11T07:16:29.795-07:00\",\n          \"enableFlowLogs\": false,\n          \"fingerprint\": \"PE0z2PNqD2Y=\",\n          \"gatewayAddress\": \"192.168.0.1\",\n          \"id\": \"7423481761753515090\",\n          \"ipCidrRange\": \"192.168.0.0/24\",\n          \"kind\": \"compute#subnetwork\",\n          \"logConfig\": {\n            \"aggregationInterval\": \"INTERVAL_5_SEC\",\n            \"enable\": false,\n            \"flowSampling\": 0.5,\n            \"metadata\": \"INCLUDE_ALL_METADATA\"\n          },\n          \"name\": \"gke1-subnet\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4\",\n          \"secondaryIpRanges\": [\n            {\n              \"ipCidrRange\": \"192.168.1.0/24\",\n              \"rangeName\": \"gke1-secondary-range-pod\"\n            },\n            {\n              \"ipCidrRange\": \"192.168.2.0/24\",\n              \"rangeName\": \"gke1-secondary-range-svc\"\n            }\n          ],\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/gke1-subnet\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west6\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.530-07:00\",\n          \"fingerprint\": \"Ic4Y34BRjOE=\",\n          \"gatewayAddress\": \"10.172.0.1\",\n          \"id\": \"3567972882370315370\",\n          \"ipCidrRange\": \"10.172.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west6\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west6/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west8\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.586-07:00\",\n          \"fingerprint\": \"_MhtvVpnR5c=\",\n          \"gatewayAddress\": \"10.198.0.1\",\n          \"id\": \"5905962051052291178\",\n          \"ipCidrRange\": \"10.198.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west8\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west8/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west9\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.638-07:00\",\n          \"fingerprint\": \"0uz_7VhFjLE=\",\n          \"gatewayAddress\": \"10.200.0.1\",\n          \"id\": \"5697832252330263658\",\n          \"ipCidrRange\": \"10.200.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west9\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west9/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/me-west1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.741-07:00\",\n          \"fingerprint\": \"70g6IoCP0CM=\",\n          \"gatewayAddress\": \"10.208.0.1\",\n          \"id\": \"2381367997960340586\",\n          \"ipCidrRange\": \"10.208.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/me-west1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/me-west1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/northamerica-northeast1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.499-07:00\",\n          \"fingerprint\": \"vNYpwgnkSCI=\",\n          \"gatewayAddress\": \"10.162.0.1\",\n          \"id\": \"5798419596128601194\",\n          \"ipCidrRange\": \"10.162.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/northamerica-northeast1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/northamerica-northeast1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/northamerica-northeast2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.493-07:00\",\n          \"fingerprint\": \"7ik2BWFfN84=\",\n          \"gatewayAddress\": \"10.188.0.1\",\n          \"id\": \"711542983096845418\",\n          \"ipCidrRange\": \"10.188.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/northamerica-northeast2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/northamerica-northeast2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/southamerica-east1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.668-07:00\",\n          \"fingerprint\": \"pqhad5TnzVc=\",\n          \"gatewayAddress\": \"10.158.0.1\",\n          \"id\": \"2301799042992620650\",\n          \"ipCidrRange\": \"10.158.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/southamerica-east1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/southamerica-east1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/southamerica-west1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.648-07:00\",\n          \"fingerprint\": \"ea50MPZjruA=\",\n          \"gatewayAddress\": \"10.194.0.1\",\n          \"id\": \"6124576470534243434\",\n          \"ipCidrRange\": \"10.194.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/southamerica-west1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/southamerica-west1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-central1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.382-07:00\",\n          \"fingerprint\": \"pb4O-4ISjAE=\",\n          \"gatewayAddress\": \"10.128.0.1\",\n          \"id\": \"6250438653192488042\",\n          \"ipCidrRange\": \"10.128.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-central1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-central1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-east1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.368-07:00\",\n          \"fingerprint\": \"bvN-N8FS9U4=\",\n          \"gatewayAddress\": \"10.142.0.1\",\n          \"id\": \"1443866556678849642\",\n          \"ipCidrRange\": \"10.142.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-east4\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.486-07:00\",\n          \"fingerprint\": \"jew6EZUeYrM=\",\n          \"gatewayAddress\": \"10.150.0.1\",\n          \"id\": \"5871230243962405994\",\n          \"ipCidrRange\": \"10.150.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-east5\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.504-07:00\",\n          \"fingerprint\": \"KVZisxAl1CI=\",\n          \"gatewayAddress\": \"10.202.0.1\",\n          \"id\": \"4332627157280408682\",\n          \"ipCidrRange\": \"10.202.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east5\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east5/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-east7\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T09:13:19.272-07:00\",\n          \"fingerprint\": \"BEZq6cSPkco=\",\n          \"gatewayAddress\": \"10.196.0.1\",\n          \"id\": \"7977046348344600816\",\n          \"ipCidrRange\": \"10.196.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east7\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east7/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-south1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.435-07:00\",\n          \"fingerprint\": \"1Se61ZXzpjY=\",\n          \"gatewayAddress\": \"10.206.0.1\",\n          \"id\": \"7154466601132672106\",\n          \"ipCidrRange\": \"10.206.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-south1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-south1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-west1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.499-07:00\",\n          \"fingerprint\": \"E0k7cQEp7_I=\",\n          \"gatewayAddress\": \"10.138.0.1\",\n          \"id\": \"5323136092791686250\",\n          \"ipCidrRange\": \"10.138.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-west2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.549-07:00\",\n          \"fingerprint\": \"-JD9bbh-QlA=\",\n          \"gatewayAddress\": \"10.168.0.1\",\n          \"id\": \"4458757238523741290\",\n          \"ipCidrRange\": \"10.168.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-west3\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.524-07:00\",\n          \"fingerprint\": \"P01BE480Q2I=\",\n          \"gatewayAddress\": \"10.180.0.1\",\n          \"id\": \"1135562538472752234\",\n          \"ipCidrRange\": \"10.180.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west3\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west3/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-west4\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.521-07:00\",\n          \"fingerprint\": \"2k-WBaR7JKQ=\",\n          \"gatewayAddress\": \"10.182.0.1\",\n          \"id\": \"7061406355024299114\",\n          \"ipCidrRange\": \"10.182.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west4\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west4/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    }\n  },\n  \"kind\": \"compute#subnetworkAggregatedList\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/aggregated/subnetworks\"\n}\n"
  },
  {
    "path": "test-data/gce2/json-dumps/compute-subnetworks-europe-west4.json",
    "content": "{\n  \"kind\": \"compute#subnetworkList\",\n  \"id\": \"projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks\",\n  \"items\": [\n    {\n      \"kind\": \"compute#subnetwork\",\n      \"id\": \"4774247690482065659\",\n      \"creationTimestamp\": \"2022-03-30T02:08:36.021-07:00\",\n      \"name\": \"default\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n      \"ipCidrRange\": \"10.164.0.0/20\",\n      \"gatewayAddress\": \"10.164.0.1\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default\",\n      \"privateIpGoogleAccess\": true,\n      \"secondaryIpRanges\": [\n        {\n          \"rangeName\": \"gke-gke4-services-93befb7e\",\n          \"ipCidrRange\": \"10.60.0.0/20\"\n        },\n        {\n          \"rangeName\": \"gke-gke4-pods-93befb7e\",\n          \"ipCidrRange\": \"10.56.0.0/14\"\n        },\n        {\n          \"rangeName\": \"gke-autopilot-gke1-services-19977223\",\n          \"ipCidrRange\": \"10.85.128.0/22\"\n        },\n        {\n          \"rangeName\": \"gke-autopilot-gke1-pods-19977223\",\n          \"ipCidrRange\": \"10.85.0.0/17\"\n        },\n        {\n          \"rangeName\": \"gke-autopilot-gke2-pods-65d1ba15\",\n          \"ipCidrRange\": \"10.60.128.0/17\"\n        },\n        {\n          \"rangeName\": \"gke-autopilot-gke2-services-65d1ba15\",\n          \"ipCidrRange\": \"10.60.96.0/22\"\n        }\n      ],\n      \"fingerprint\": \"-9hqGif0SQ0=\",\n      \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n      \"purpose\": \"PRIVATE\",\n      \"stackType\": \"IPV4_ONLY\"\n    },\n    {\n      \"kind\": \"compute#subnetwork\",\n      \"id\": \"1818761461517361320\",\n      \"creationTimestamp\": \"2022-03-30T02:09:27.964-07:00\",\n      \"name\": \"gke1-subnet\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n      \"ipCidrRange\": \"192.168.0.0/24\",\n      \"gatewayAddress\": \"192.168.0.1\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/gke1-subnet\",\n      \"privateIpGoogleAccess\": false,\n      \"secondaryIpRanges\": [\n        {\n          \"rangeName\": \"gke1-secondary-range-pod\",\n          \"ipCidrRange\": \"192.168.1.0/24\"\n        },\n        {\n          \"rangeName\": \"gke1-secondary-range-svc\",\n          \"ipCidrRange\": \"192.168.2.0/24\"\n        }\n      ],\n      \"fingerprint\": \"Ir2p9uebpiE=\",\n      \"enableFlowLogs\": false,\n      \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n      \"purpose\": \"PRIVATE\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"stackType\": \"IPV4_ONLY\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks\"\n}\n"
  },
  {
    "path": "test-data/gce2/json-dumps/compute-templates.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gce1-aaaa/global/instanceTemplates\",\n  \"items\": [\n    {\n      \"creationTimestamp\": \"2022-04-26T08:21:35.891-07:00\",\n      \"description\": \"\",\n      \"id\": \"4047445761213182736\",\n      \"kind\": \"compute#instanceTemplate\",\n      \"name\": \"gke-gke1-default-pool-35923fbc\",\n      \"properties\": {\n        \"canIpForward\": true,\n        \"disks\": [\n          {\n            \"autoDelete\": true,\n            \"boot\": true,\n            \"deviceName\": \"persistent-disk-0\",\n            \"index\": 0,\n            \"initializeParams\": {\n              \"diskSizeGb\": \"100\",\n              \"diskType\": \"pd-standard\",\n              \"labels\": {\n                \"gcp_doctor_test\": \"gke\",\n                \"goog-gke-node\": \"\"\n              },\n              \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-12110-gke2000-cos-89-16108-604-19-v220317-c-pre\"\n            },\n            \"kind\": \"compute#attachedDisk\",\n            \"mode\": \"READ_WRITE\",\n            \"type\": \"PERSISTENT\"\n          }\n        ],\n        \"labels\": {\n          \"gcp_doctor_test\": \"gke\",\n          \"goog-gke-node\": \"\"\n        },\n        \"machineType\": \"e2-small\",\n        \"metadata\": {\n          \"fingerprint\": \"REDACTED\",\n          \"items\": [\n            {\n              \"key\": \"kube-env\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"kubelet-config\",\n              \"value\": \"apiVersion: kubelet.config.k8s.io/v1beta1\\nauthentication:\\n  anonymous:\\n    enabled: false\\n  webhook:\\n    enabled: true\\n  x509:\\n    clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\\nauthorization:\\n  mode: Webhook\\ncgroupRoot: /\\nclusterDNS:\\n- 10.3.240.10\\nclusterDomain: cluster.local\\nenableDebuggingHandlers: true\\nevictionHard:\\n  memory.available: 100Mi\\n  nodefs.available: 10%\\n  nodefs.inodesFree: 5%\\n  pid.available: 10%\\nfeatureGates:\\n  DynamicKubeletConfig: false\\n  ExecProbeTimeout: false\\n  InTreePluginAWSUnregister: true\\n  InTreePluginAzureDiskUnregister: true\\n  InTreePluginOpenStackUnregister: true\\n  InTreePluginvSphereUnregister: true\\n  RotateKubeletServerCertificate: true\\nkernelMemcgNotification: true\\nkind: KubeletConfiguration\\nkubeReserved:\\n  cpu: 1060m\\n  ephemeral-storage: 41Gi\\n  memory: 512Mi\\nreadOnlyPort: 10255\\nserverTLSBootstrap: true\\nstaticPodPath: /etc/kubernetes/manifests\\n\"\n            },\n            {\n              \"key\": \"kube-labels\",\n              \"value\": \"cloud.google.com/gke-boot-disk=pd-standard,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/machine-family=e2\"\n            },\n            {\n              \"key\": \"disable-legacy-endpoints\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"configure-sh\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"gci-update-strategy\",\n              \"value\": \"update_disabled\"\n            },\n            {\n              \"key\": \"enable-oslogin\",\n              \"value\": \"false\"\n            },\n            {\n              \"key\": \"kubeconfig\",\n              \"value\": \"apiVersion: v1\\nkind: Config\\nclusters:\\n- cluster:\\n    server: https://35.205.188.165\\n    certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\\n  name: default-cluster\\ncontexts:\\n- context:\\n    cluster: default-cluster\\n    namespace: default\\n    user: exec-plugin-auth\\n  name: default-context\\ncurrent-context: default-context\\nusers:\\n- name: exec-plugin-auth\\n  user:\\n    exec:\\n      apiVersion: \\\"client.authentication.k8s.io/v1alpha1\\\"\\n      command: '/home/kubernetes/bin/gke-exec-auth-plugin'\\n      args: [\\\"--cache-dir\\\", '/var/lib/kubelet/pki/']\\n\"\n            },\n            {\n              \"key\": \"user-data\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"gci-metrics-enabled\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"gci-ensure-gke-docker\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"serial-port-logging-enable\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"cluster-location\",\n              \"value\": \"europe-west1-b\"\n            },\n            {\n              \"key\": \"google-compute-enable-pcid\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"cluster-name\",\n              \"value\": \"gke1\"\n            },\n            {\n              \"key\": \"cluster-uid\",\n              \"value\": \"f36cf6ddd50c4b998cf1921fbc3e11fc6895bf0ad2d841e7956d7fca6e7024b4\"\n            }\n          ],\n          \"kind\": \"compute#metadata\"\n        },\n        \"networkInterfaces\": [\n          {\n            \"accessConfigs\": [\n              {\n                \"kind\": \"compute#accessConfig\",\n                \"name\": \"external-nat\",\n                \"networkTier\": \"PREMIUM\",\n                \"type\": \"ONE_TO_ONE_NAT\"\n              }\n            ],\n            \"kind\": \"compute#networkInterface\",\n            \"name\": \"nic0\",\n            \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n            \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west1/subnetworks/default\"\n          }\n        ],\n        \"networkPerformanceConfig\": {\n          \"totalEgressBandwidthTier\": \"DEFAULT\"\n        },\n        \"scheduling\": {\n          \"automaticRestart\": true,\n          \"onHostMaintenance\": \"MIGRATE\",\n          \"preemptible\": false,\n          \"provisioningModel\": \"STANDARD\"\n        },\n        \"serviceAccounts\": [\n          {\n            \"email\": \"default\",\n            \"scopes\": [\n              \"https://www.googleapis.com/auth/logging.write\",\n              \"https://www.googleapis.com/auth/monitoring\"\n            ]\n          }\n        ],\n        \"shieldedInstanceConfig\": {\n          \"enableIntegrityMonitoring\": true,\n          \"enableSecureBoot\": false,\n          \"enableVtpm\": true\n        },\n        \"tags\": {\n          \"items\": [\n            \"gke-gke1-f36cf6dd-node\"\n          ]\n        }\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/instanceTemplates/gke-gke1-default-pool-35923fbc\"\n    },\n    {\n      \"creationTimestamp\": \"2022-04-26T08:20:48.842-07:00\",\n      \"description\": \"\",\n      \"id\": \"7086722794918359871\",\n      \"kind\": \"compute#instanceTemplate\",\n      \"name\": \"mig-template\",\n      \"properties\": {\n        \"disks\": [\n          {\n            \"autoDelete\": true,\n            \"boot\": true,\n            \"deviceName\": \"persistent-disk-0\",\n            \"index\": 0,\n            \"initializeParams\": {\n              \"diskType\": \"pd-standard\",\n              \"sourceImage\": \"projects/debian-cloud/global/images/family/debian-9\"\n            },\n            \"interface\": \"SCSI\",\n            \"kind\": \"compute#attachedDisk\",\n            \"mode\": \"READ_WRITE\",\n            \"type\": \"PERSISTENT\"\n          }\n        ],\n        \"machineType\": \"e2-micro\",\n        \"metadata\": {\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#metadata\"\n        },\n        \"networkInterfaces\": [\n          {\n            \"kind\": \"compute#networkInterface\",\n            \"name\": \"nic0\",\n            \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\"\n          }\n        ],\n        \"scheduling\": {\n          \"automaticRestart\": true,\n          \"onHostMaintenance\": \"MIGRATE\",\n          \"preemptible\": false,\n          \"provisioningModel\": \"STANDARD\"\n        }\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/instanceTemplates/mig-template\"\n    }\n  ],\n  \"kind\": \"compute#instanceTemplateList\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/instanceTemplates\"\n}\n"
  },
  {
    "path": "test-data/gce2/json-dumps/compute-zones.json",
    "content": "{\n  \"kind\": \"compute#zoneList\",\n  \"id\": \"projects/gcpdiag-gce-faultyssh-runbook/zones\",\n  \"items\": [\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2231\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east1-b\",\n      \"description\": \"us-east1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-east1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2233\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east1-c\",\n      \"description\": \"us-east1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-east1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2234\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east1-d\",\n      \"description\": \"us-east1-d\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-east1-d\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2272\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east4-c\",\n      \"description\": \"us-east4-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-east4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-east4-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2271\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east4-b\",\n      \"description\": \"us-east4-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-east4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-east4-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2270\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east4-a\",\n      \"description\": \"us-east4-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-east4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-east4-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2002\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1-c\",\n      \"description\": \"us-central1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-central1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2000\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1-a\",\n      \"description\": \"us-central1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-central1-a\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2004\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1-f\",\n      \"description\": \"us-central1-f\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-central1-f\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2001\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1-b\",\n      \"description\": \"us-central1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-central1-b\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2211\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west1-b\",\n      \"description\": \"us-west1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-west1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2212\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west1-c\",\n      \"description\": \"us-west1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-west1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2210\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west1-a\",\n      \"description\": \"us-west1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-west1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2342\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west4-a\",\n      \"description\": \"europe-west4-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west4-a\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2341\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west4-b\",\n      \"description\": \"europe-west4-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west4-b\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2340\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west4-c\",\n      \"description\": \"europe-west4-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west4-c\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2101\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west1-b\",\n      \"description\": \"europe-west1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2104\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west1-d\",\n      \"description\": \"europe-west1-d\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west1-d\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2103\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west1-c\",\n      \"description\": \"europe-west1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2300\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west3-c\",\n      \"description\": \"europe-west3-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west3-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2301\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west3-a\",\n      \"description\": \"europe-west3-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west3-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2302\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west3-b\",\n      \"description\": \"europe-west3-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west3-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2292\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west2-c\",\n      \"description\": \"europe-west2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2291\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west2-b\",\n      \"description\": \"europe-west2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2290\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west2-a\",\n      \"description\": \"europe-west2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2221\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east1-b\",\n      \"description\": \"asia-east1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-east1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2220\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east1-a\",\n      \"description\": \"asia-east1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-east1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2222\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east1-c\",\n      \"description\": \"asia-east1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-east1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2261\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast1-b\",\n      \"description\": \"asia-southeast1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-southeast1-b\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2260\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast1-a\",\n      \"description\": \"asia-southeast1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-southeast1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2262\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast1-c\",\n      \"description\": \"asia-southeast1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-southeast1-c\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2251\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast1-b\",\n      \"description\": \"asia-northeast1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-northeast1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2252\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast1-c\",\n      \"description\": \"asia-northeast1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-northeast1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2250\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast1-a\",\n      \"description\": \"asia-northeast1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-northeast1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2322\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south1-c\",\n      \"description\": \"asia-south1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-south1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2320\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south1-b\",\n      \"description\": \"asia-south1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-south1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2321\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south1-a\",\n      \"description\": \"asia-south1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-south1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2282\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast1-b\",\n      \"description\": \"australia-southeast1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/australia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/australia-southeast1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2280\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast1-c\",\n      \"description\": \"australia-southeast1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/australia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/australia-southeast1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2281\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast1-a\",\n      \"description\": \"australia-southeast1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/australia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/australia-southeast1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2311\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-east1-b\",\n      \"description\": \"southamerica-east1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/southamerica-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/southamerica-east1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2312\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-east1-c\",\n      \"description\": \"southamerica-east1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/southamerica-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/southamerica-east1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2310\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-east1-a\",\n      \"description\": \"southamerica-east1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/southamerica-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/southamerica-east1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2372\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east2-a\",\n      \"description\": \"asia-east2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-east2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-east2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2371\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east2-b\",\n      \"description\": \"asia-east2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-east2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-east2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2370\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east2-c\",\n      \"description\": \"asia-east2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-east2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-east2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2392\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast2-a\",\n      \"description\": \"asia-northeast2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-northeast2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2390\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast2-b\",\n      \"description\": \"asia-northeast2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-northeast2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2391\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast2-c\",\n      \"description\": \"asia-northeast2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-northeast2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2410\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast3-a\",\n      \"description\": \"asia-northeast3-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-northeast3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-northeast3-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2412\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast3-b\",\n      \"description\": \"asia-northeast3-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-northeast3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-northeast3-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2411\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast3-c\",\n      \"description\": \"asia-northeast3-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-northeast3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-northeast3-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2470\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south2-a\",\n      \"description\": \"asia-south2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-south2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-south2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2472\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south2-b\",\n      \"description\": \"asia-south2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-south2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-south2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2471\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south2-c\",\n      \"description\": \"asia-south2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-south2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-south2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2440\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast2-a\",\n      \"description\": \"asia-southeast2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-southeast2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2442\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast2-b\",\n      \"description\": \"asia-southeast2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-southeast2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2441\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast2-c\",\n      \"description\": \"asia-southeast2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/asia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/asia-southeast2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2480\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast2-a\",\n      \"description\": \"australia-southeast2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/australia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/australia-southeast2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2482\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast2-b\",\n      \"description\": \"australia-southeast2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/australia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/australia-southeast2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2481\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast2-c\",\n      \"description\": \"australia-southeast2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/australia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/australia-southeast2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2452\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-central2-a\",\n      \"description\": \"europe-central2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-central2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-central2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2450\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-central2-b\",\n      \"description\": \"europe-central2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-central2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-central2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2451\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-central2-c\",\n      \"description\": \"europe-central2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-central2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-central2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2352\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-north1-a\",\n      \"description\": \"europe-north1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-north1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-north1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2350\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-north1-b\",\n      \"description\": \"europe-north1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-north1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-north1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2351\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-north1-c\",\n      \"description\": \"europe-north1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-north1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-north1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2541\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-southwest1-a\",\n      \"description\": \"europe-southwest1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-southwest1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-southwest1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2540\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-southwest1-b\",\n      \"description\": \"europe-southwest1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-southwest1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-southwest1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2542\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-southwest1-c\",\n      \"description\": \"europe-southwest1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-southwest1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-southwest1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2591\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west10-a\",\n      \"description\": \"europe-west10-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west10\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west10-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2592\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west10-b\",\n      \"description\": \"europe-west10-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west10\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west10-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2590\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west10-c\",\n      \"description\": \"europe-west10-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west10\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west10-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2571\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west12-a\",\n      \"description\": \"europe-west12-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west12\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west12-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2572\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west12-b\",\n      \"description\": \"europe-west12-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west12\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west12-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2570\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west12-c\",\n      \"description\": \"europe-west12-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west12\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west12-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2382\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west6-a\",\n      \"description\": \"europe-west6-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west6\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west6-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2380\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west6-b\",\n      \"description\": \"europe-west6-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west6\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west6-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2381\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west6-c\",\n      \"description\": \"europe-west6-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west6\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west6-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2510\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west8-a\",\n      \"description\": \"europe-west8-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west8\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west8-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2511\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west8-b\",\n      \"description\": \"europe-west8-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west8\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west8-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2512\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west8-c\",\n      \"description\": \"europe-west8-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west8\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west8-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2521\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west9-a\",\n      \"description\": \"europe-west9-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west9\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west9-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2520\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west9-b\",\n      \"description\": \"europe-west9-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west9\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west9-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2522\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west9-c\",\n      \"description\": \"europe-west9-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west9\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west9-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2580\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central1-a\",\n      \"description\": \"me-central1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/me-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/me-central1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2581\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central1-b\",\n      \"description\": \"me-central1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/me-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/me-central1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2582\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central1-c\",\n      \"description\": \"me-central1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/me-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/me-central1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2601\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central2-a\",\n      \"description\": \"me-central2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/me-central2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/me-central2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2602\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central2-b\",\n      \"description\": \"me-central2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/me-central2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/me-central2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2600\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central2-c\",\n      \"description\": \"me-central2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/me-central2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/me-central2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2561\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-west1-a\",\n      \"description\": \"me-west1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/me-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/me-west1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2560\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-west1-b\",\n      \"description\": \"me-west1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/me-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/me-west1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2562\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-west1-c\",\n      \"description\": \"me-west1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/me-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/me-west1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2330\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast1-a\",\n      \"description\": \"northamerica-northeast1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/northamerica-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/northamerica-northeast1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2331\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast1-b\",\n      \"description\": \"northamerica-northeast1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/northamerica-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/northamerica-northeast1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2332\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast1-c\",\n      \"description\": \"northamerica-northeast1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/northamerica-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/northamerica-northeast1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2461\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast2-a\",\n      \"description\": \"northamerica-northeast2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/northamerica-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/northamerica-northeast2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2460\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast2-b\",\n      \"description\": \"northamerica-northeast2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/northamerica-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/northamerica-northeast2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2462\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast2-c\",\n      \"description\": \"northamerica-northeast2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/northamerica-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/northamerica-northeast2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2490\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-west1-a\",\n      \"description\": \"southamerica-west1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/southamerica-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/southamerica-west1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2491\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-west1-b\",\n      \"description\": \"southamerica-west1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/southamerica-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/southamerica-west1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2492\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-west1-c\",\n      \"description\": \"southamerica-west1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/southamerica-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/southamerica-west1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2532\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east5-a\",\n      \"description\": \"us-east5-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-east5\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-east5-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2531\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east5-b\",\n      \"description\": \"us-east5-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-east5\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-east5-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2530\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east5-c\",\n      \"description\": \"us-east5-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-east5\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-east5-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2551\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-south1-a\",\n      \"description\": \"us-south1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-south1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2552\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-south1-b\",\n      \"description\": \"us-south1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-south1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2550\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-south1-c\",\n      \"description\": \"us-south1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-south1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2362\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west2-a\",\n      \"description\": \"us-west2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-west2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2361\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west2-b\",\n      \"description\": \"us-west2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-west2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2360\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west2-c\",\n      \"description\": \"us-west2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-west2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2420\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west3-a\",\n      \"description\": \"us-west3-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-west3-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2421\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west3-b\",\n      \"description\": \"us-west3-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-west3-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2422\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west3-c\",\n      \"description\": \"us-west3-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-west3-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2431\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west4-a\",\n      \"description\": \"us-west4-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-west4-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2432\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west4-b\",\n      \"description\": \"us-west4-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-west4-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2430\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west4-c\",\n      \"description\": \"us-west4-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/us-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/us-west4-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones\"\n}\n"
  },
  {
    "path": "test-data/gce2/json-dumps/healthChecks.json",
    "content": "{\n  \"kind\": \"compute#healthCheckList\",\n  \"id\": \"projects/gcpdiag-gce1-aaaa/global/healthChecks/\",\n  \"items\": [\n    {\n      \"kind\": \"compute#healthCheck\",\n      \"id\": \"6570916794820924287\",\n      \"creationTimestamp\": \"2023-11-22T17:40:32.481-08:00\",\n      \"name\": \"http-basic-check\",\n      \"checkIntervalSec\": 5,\n      \"timeoutSec\": 5,\n      \"unhealthyThreshold\": 2,\n      \"healthyThreshold\": 2,\n      \"type\": \"HTTP\",\n      \"httpHealthCheck\": {\n        \"port\": 80,\n        \"portSpecification\": \"USE_FIXED_PORT\",\n        \"requestPath\": \"/\",\n        \"proxyHeader\": \"NONE\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/healthChecks/http-basic-check\",\n      \"logConfig\": {\n        \"enable\": true\n      }\n    },\n    {\n      \"kind\": \"compute#healthCheck\",\n      \"id\": \"2011808073814110499\",\n      \"creationTimestamp\": \"2023-11-22T11:00:28.722-08:00\",\n      \"name\": \"http-basic-check-2\",\n      \"checkIntervalSec\": 5,\n      \"timeoutSec\": 5,\n      \"unhealthyThreshold\": 2,\n      \"healthyThreshold\": 2,\n      \"type\": \"HTTP\",\n      \"httpHealthCheck\": {\n        \"port\": 80,\n        \"portSpecification\": \"USE_FIXED_PORT\",\n        \"requestPath\": \"/\",\n        \"proxyHeader\": \"NONE\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/healthChecks/http-basic-check-2\"\n    },\n    {\n      \"kind\": \"compute#healthCheck\",\n      \"id\": \"4700445592381550883\",\n      \"creationTimestamp\": \"2023-11-22T11:00:28.748-08:00\",\n      \"name\": \"tcp-basic-check-1\",\n      \"checkIntervalSec\": 5,\n      \"timeoutSec\": 5,\n      \"unhealthyThreshold\": 2,\n      \"healthyThreshold\": 2,\n      \"type\": \"TCP\",\n      \"tcpHealthCheck\": {\n        \"port\": 80,\n        \"proxyHeader\": \"NONE\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/healthChecks/tcp-basic-check-1\",\n      \"logConfig\": {\n        \"enable\": true\n      }\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/healthChecks/\"\n}\n"
  },
  {
    "path": "test-data/gce2/json-dumps/iam-policy.json",
    "content": "{\n  \"bindings\": [\n    {\n      \"members\": [\n        \"serviceAccount:canssh@gcpdiag-gce-faultyssh-runbook.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/compute.instanceAdmin.v1\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:canssh@gcpdiag-gce-faultyssh-runbook.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/compute.osAdminLogin\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:canssh@gcpdiag-gce-faultyssh-runbook.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/compute.osLogin\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12345601@compute-system.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/compute.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:12345601-compute@developer.gserviceaccount.com\",\n        \"serviceAccount:12345601@cloudservices.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/editor\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:canssh@gcpdiag-gce-faultyssh-runbook.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/iam.serviceAccountUser\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:canssh@gcpdiag-gce-faultyssh-runbook.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/iap.tunnelResourceAccessor\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:canssh@gcpdiag-gce-faultyssh-runbook.iam.gserviceaccount.com\",\n        \"user:testuser@example.com\"\n      ],\n      \"role\": \"roles/owner\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12345601@gcp-sa-websecurityscanner.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/websecurityscanner.serviceAgent\"\n    }\n  ],\n  \"etag\": \"BwYKUSKQwSE=\",\n  \"version\": 1\n}\n"
  },
  {
    "path": "test-data/gce2/json-dumps/iam-roles-get.json",
    "content": "{\"roles\":\n[]}\n"
  },
  {
    "path": "test-data/gce2/json-dumps/iam-service-accounts.json",
    "content": "{\n  \"accounts\": [\n    {\n      \"displayName\": \"Cannot SSH Service Account\",\n      \"email\": \"cannotssh@gcpdiag-gce-faultyssh-runbook.iam.gserviceaccount.com\",\n      \"etag\": \"MDEwMjE5MjA=\",\n      \"name\": \"projects/gcpdiag-gce-faultyssh-runbook/serviceAccounts/cannotssh@gcpdiag-gce-faultyssh-n2tgc4kt.iam.gserviceaccount.com\",\n      \"oauth2ClientId\": \"REDACTED\",\n      \"projectId\": \"gcpdiag-gce-faultyssh-runbook\",\n      \"uniqueId\": \"10333387329722592424890\"\n    },\n    {\n      \"displayName\": \"Compute Engine default service account\",\n      \"email\": \"12345601-compute@developer.gserviceaccount.com\",\n      \"etag\": \"MDEwMjE5MjA=\",\n      \"name\": \"projects/gcpdiag-gce-faultyssh-runbook/serviceAccounts/12345601-compute@developer.gserviceaccount.com\",\n      \"oauth2ClientId\": \"REDACTED\",\n      \"projectId\": \"gcpdiag-gce-faultyssh-runbook\",\n      \"uniqueId\": \"115133333227031909369\"\n    },\n    {\n      \"displayName\": \"Can SSH Service Account\",\n      \"email\": \"canssh@gcpdiag-gce-faultyssh-runbook.iam.gserviceaccount.com\",\n      \"etag\": \"MDEwMjE5MjA=\",\n      \"name\": \"projects/gcpdiag-gce-faultyssh-runbook/serviceAccounts/canssh@gcpdiag-gce-faultyssh-n2tgc4kt.iam.gserviceaccount.com\",\n      \"oauth2ClientId\": \"REDACTED\",\n      \"projectId\": \"gcpdiag-gce-faultyssh-runbook\",\n      \"uniqueId\": \"11795333333333337128185\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gce2/json-dumps/logging-entries-1.json",
    "content": "{\n  \"entries\": [\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-12340002@container-engine-robot.iam.gserviceaccount.com\"\n        },\n        \"requestMetadata\": {\n          \"callerIp\": \"2002:ae8:2d45::\",\n          \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 GoogleContainerEngine/v1\"\n        },\n        \"serviceName\": \"compute.googleapis.com\",\n        \"methodName\": \"beta.compute.instanceGroupManagers.insert\",\n        \"resourceName\": \"projects/gcpdiag-gke1-aaaa/zones/europe-west1-b/instanceGroupManagers/gke-gke2-default-pool-11b6ca8e-grp\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instanceGroupManagers.insert\"\n        }\n      },\n      \"insertId\": \"-4pqrg9dartq\",\n      \"resource\": {\n        \"type\": \"gce_instance_group_manager\",\n        \"labels\": {\n          \"instance_group_manager_id\": \"8700821884762314590\",\n          \"instance_group_manager_name\": \"gke-gke2-default-pool-11b6ca8e-grp\",\n          \"project_id\": \"gcpdiag-gke1-aaaa\",\n          \"location\": \"europe-west1-b\"\n        }\n      },\n      \"timestamp\": \"2021-11-24T16:35:22.615295Z\",\n      \"severity\": \"NOTICE\",\n      \"logName\": \"projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1637771697161-5d18b703b865a-dccbda35-ad8629c7\",\n        \"producer\": \"compute.googleapis.com\",\n        \"last\": true\n      },\n      \"receiveTimestamp\": \"2021-11-24T16:35:23.172680503Z\"\n    },\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-12340002@container-engine-robot.iam.gserviceaccount.com\"\n        },\n        \"requestMetadata\": {\n          \"callerIp\": \"2002:ae8:2d45::\",\n          \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 GoogleContainerEngine/v1\"\n        },\n        \"serviceName\": \"compute.googleapis.com\",\n        \"methodName\": \"beta.compute.instanceGroupManagers.insert\",\n        \"resourceName\": \"projects/gcpdiag-gke1-aaaa/zones/europe-west1-d/instanceGroupManagers/gke-gke2-default-pool-98631c84-grp\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instanceGroupManagers.insert\"\n        }\n      },\n      \"insertId\": \"-nuwdobe1byj2\",\n      \"resource\": {\n        \"type\": \"gce_instance_group_manager\",\n        \"labels\": {\n          \"instance_group_manager_name\": \"gke-gke2-default-pool-98631c84-grp\",\n          \"project_id\": \"gcpdiag-gke1-aaaa\",\n          \"location\": \"europe-west1-d\",\n          \"instance_group_manager_id\": \"6471686162526492481\"\n        }\n      },\n      \"timestamp\": \"2021-11-24T16:35:10.014049Z\",\n      \"severity\": \"NOTICE\",\n      \"logName\": \"projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1637771693512-5d18b7003d60c-2f9aaeaf-535e4f63\",\n        \"producer\": \"compute.googleapis.com\",\n        \"last\": true\n      },\n      \"receiveTimestamp\": \"2021-11-24T16:35:10.306123333Z\"\n    },\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-12340002@container-engine-robot.iam.gserviceaccount.com\"\n        },\n        \"requestMetadata\": {\n          \"callerIp\": \"2002:ae8:2d45::\",\n          \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 GoogleContainerEngine/v1\"\n        },\n        \"serviceName\": \"compute.googleapis.com\",\n        \"methodName\": \"beta.compute.instanceGroupManagers.insert\",\n        \"resourceName\": \"projects/gcpdiag-gke1-aaaa/zones/europe-west1-c/instanceGroupManagers/gke-gke2-default-pool-5e5781dd-grp\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instanceGroupManagers.insert\"\n        }\n      },\n      \"insertId\": \"tf2uocd1kpc\",\n      \"resource\": {\n        \"type\": \"gce_instance_group_manager\",\n        \"labels\": {\n          \"instance_group_manager_name\": \"gke-gke2-default-pool-5e5781dd-grp\",\n          \"project_id\": \"gcpdiag-gke1-aaaa\",\n          \"instance_group_manager_id\": \"5205754198527039297\",\n          \"location\": \"europe-west1-c\"\n        }\n      },\n      \"timestamp\": \"2021-11-24T16:35:08.922507Z\",\n      \"severity\": \"NOTICE\",\n      \"logName\": \"projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1637771693418-5d18b700269e6-19f4d541-4d012584\",\n        \"producer\": \"compute.googleapis.com\",\n        \"last\": true\n      },\n      \"receiveTimestamp\": \"2021-11-24T16:35:09.484397071Z\"\n    },\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-12340002@container-engine-robot.iam.gserviceaccount.com\"\n        },\n        \"requestMetadata\": {\n          \"callerIp\": \"2002:a05:601a:1550::\",\n          \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 GoogleContainerEngine/v1\"\n        },\n        \"serviceName\": \"compute.googleapis.com\",\n        \"methodName\": \"beta.compute.instanceGroupManagers.insert\",\n        \"resourceName\": \"projects/gcpdiag-gke1-aaaa/zones/europe-west1-c/instanceGroupManagers/gke-gke3-default-pool-013fb293-grp\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instanceGroupManagers.insert\"\n        }\n      },\n      \"insertId\": \"tf2uocd1kou\",\n      \"resource\": {\n        \"type\": \"gce_instance_group_manager\",\n        \"labels\": {\n          \"project_id\": \"gcpdiag-gke1-aaaa\",\n          \"instance_group_manager_id\": \"3383879657688651622\",\n          \"location\": \"europe-west1-c\",\n          \"instance_group_manager_name\": \"gke-gke3-default-pool-013fb293-grp\"\n        }\n      },\n      \"timestamp\": \"2021-11-24T16:34:38.479723Z\",\n      \"severity\": \"NOTICE\",\n      \"logName\": \"projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1637771657193-5d18b6dd9a974-6dee9d9a-988a4f6c\",\n        \"producer\": \"compute.googleapis.com\",\n        \"last\": true\n      },\n      \"receiveTimestamp\": \"2021-11-24T16:34:39.479072691Z\"\n    },\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-12340002@container-engine-robot.iam.gserviceaccount.com\"\n        },\n        \"requestMetadata\": {\n          \"callerIp\": \"2002:a05:601a:1550::\",\n          \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 GoogleContainerEngine/v1\"\n        },\n        \"serviceName\": \"compute.googleapis.com\",\n        \"methodName\": \"beta.compute.instanceGroupManagers.insert\",\n        \"resourceName\": \"projects/gcpdiag-gke1-aaaa/zones/europe-west1-b/instanceGroupManagers/gke-gke3-default-pool-597c9ca2-grp\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instanceGroupManagers.insert\"\n        }\n      },\n      \"insertId\": \"-4pqrg9darqs\",\n      \"resource\": {\n        \"type\": \"gce_instance_group_manager\",\n        \"labels\": {\n          \"location\": \"europe-west1-b\",\n          \"instance_group_manager_id\": \"5404218744580069225\",\n          \"instance_group_manager_name\": \"gke-gke3-default-pool-597c9ca2-grp\",\n          \"project_id\": \"gcpdiag-gke1-aaaa\"\n        }\n      },\n      \"timestamp\": \"2021-11-24T16:34:37.484721Z\",\n      \"severity\": \"NOTICE\",\n      \"logName\": \"projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1637771652136-5d18b6d8c7d4a-678a3896-62f6d812\",\n        \"producer\": \"compute.googleapis.com\",\n        \"last\": true\n      },\n      \"receiveTimestamp\": \"2021-11-24T16:34:38.168845698Z\"\n    },\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-12340002@container-engine-robot.iam.gserviceaccount.com\"\n        },\n        \"requestMetadata\": {\n          \"callerIp\": \"2002:a05:601a:1550::\",\n          \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 GoogleContainerEngine/v1\"\n        },\n        \"serviceName\": \"compute.googleapis.com\",\n        \"methodName\": \"beta.compute.instanceGroupManagers.insert\",\n        \"resourceName\": \"projects/gcpdiag-gke1-aaaa/zones/europe-west1-d/instanceGroupManagers/gke-gke3-default-pool-c125bae7-grp\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instanceGroupManagers.insert\"\n        }\n      },\n      \"insertId\": \"-31olexd4rpi\",\n      \"resource\": {\n        \"type\": \"gce_instance_group_manager\",\n        \"labels\": {\n          \"instance_group_manager_name\": \"gke-gke3-default-pool-c125bae7-grp\",\n          \"location\": \"europe-west1-d\",\n          \"project_id\": \"gcpdiag-gke1-aaaa\",\n          \"instance_group_manager_id\": \"1403931912127633256\"\n        }\n      },\n      \"timestamp\": \"2021-11-24T16:34:35.389660Z\",\n      \"severity\": \"NOTICE\",\n      \"logName\": \"projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1637771654866-5d18b6db6263d-009ad0ed-4b71b356\",\n        \"producer\": \"compute.googleapis.com\",\n        \"last\": true\n      },\n      \"receiveTimestamp\": \"2021-11-24T16:34:35.872428070Z\"\n    },\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-12340002@container-engine-robot.iam.gserviceaccount.com\"\n        },\n        \"requestMetadata\": {\n          \"callerIp\": \"2002:a17:907:3ea4::\",\n          \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 GoogleContainerEngine/v1\"\n        },\n        \"serviceName\": \"compute.googleapis.com\",\n        \"methodName\": \"beta.compute.instanceGroupManagers.insert\",\n        \"resourceName\": \"projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-dc4a8b29-grp\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instanceGroupManagers.insert\"\n        }\n      },\n      \"insertId\": \"-tt9mudi768\",\n      \"resource\": {\n        \"type\": \"gce_instance_group_manager\",\n        \"labels\": {\n          \"location\": \"europe-west4-a\",\n          \"instance_group_manager_id\": \"318228385164940970\",\n          \"project_id\": \"gcpdiag-gke1-aaaa\",\n          \"instance_group_manager_name\": \"gke-gke1-default-pool-dc4a8b29-grp\"\n        }\n      },\n      \"timestamp\": \"2021-11-24T16:29:21.943390Z\",\n      \"severity\": \"NOTICE\",\n      \"logName\": \"projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1637771331527-5d18b5a706163-f238dbec-106555c8\",\n        \"producer\": \"compute.googleapis.com\",\n        \"last\": true\n      },\n      \"receiveTimestamp\": \"2021-11-24T16:29:22.710110506Z\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gce2/json-dumps/monitoring-query.json",
    "content": "{\n  \"timeSeriesDescriptor\": {\n    \"labelDescriptors\": [\n      {\n        \"key\": \"resource.project_id\"\n      },\n      {\n        \"key\": \"resource.zone\"\n      },\n      {\n        \"key\": \"resource.instance_id\"\n      },\n      {\n        \"key\": \"metric.instance_name\"\n      }\n    ],\n    \"pointDescriptors\": [\n      {\n        \"key\": \"value_utilization_max\",\n        \"valueType\": \"DOUBLE\",\n        \"metricKind\": \"GAUGE\",\n        \"unit\": \"10^2.%\"\n      }\n    ]\n  },\n  \"timeSeriesData\": [\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"gcpdiag-gce-faultyssh-runbook\"\n        },\n        {\n          \"stringValue\": \"europe-west2-a\"\n        },\n        {\n          \"stringValue\": \"5942951451833189109\"\n        },\n        {\n          \"stringValue\": \"valid-linux-ssh\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 0.0045755313326865847\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2023-11-06T00:51:33.181476Z\",\n            \"endTime\": \"2023-11-06T00:51:33.181476Z\"\n          }\n        }\n      ]\n    },\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"gcpdiag-gce-faultyssh-runbook\"\n        },\n        {\n          \"stringValue\": \"europe-west2-a\"\n        },\n        {\n          \"stringValue\": \"3885320804588110182\"\n        },\n        {\n          \"stringValue\": \"faulty-windows-ssh\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 0.28800768913451219\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2023-11-06T00:51:33.181476Z\",\n            \"endTime\": \"2023-11-06T00:51:33.181476Z\"\n          }\n        }\n      ]\n    },\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"gcpdiag-gce-faultyssh-runbook\"\n        },\n        {\n          \"stringValue\": \"europe-west2-a\"\n        },\n        {\n          \"stringValue\": \"3200700792812650937\"\n        },\n        {\n          \"stringValue\": \"valid-windows-ssh\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 0.30707438214176364\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2023-11-06T00:51:33.181476Z\",\n            \"endTime\": \"2023-11-06T00:51:33.181476Z\"\n          }\n        }\n      ]\n    },\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"gcpdiag-gce-faultyssh-runbook\"\n        },\n        {\n          \"stringValue\": \"europe-west2-a\"\n        },\n        {\n          \"stringValue\": \"1843453795420711417\"\n        },\n        {\n          \"stringValue\": \"faulty-linux-ssh\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 0.99957377216799159\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2023-11-06T00:51:33.181476Z\",\n            \"endTime\": \"2023-11-06T00:51:33.181476Z\"\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gce2/json-dumps/project.json",
    "content": "{\n  \"name\": \"projects/12345601\",\n  \"parent\": \"folders/123456012\",\n  \"projectId\": \"gcpdiag-gce-faultyssh-runbook\",\n  \"state\": \"ACTIVE\",\n  \"displayName\": \"gcpdiag test - faultyssh\",\n  \"createTime\": \"2023-11-03T21:16:55.750643Z\",\n  \"updateTime\": \"2023-11-04T04:00:10.466760Z\",\n  \"etag\": \"W/\\\"80b0d9f39ba4a6c9\\\"\",\n  \"labels\": {\n    \"gcpdiag\": \"test\"\n  }\n}\n"
  },
  {
    "path": "test-data/gce2/json-dumps/services.json",
    "content": "{\n  \"services\": [\n    {\n      \"name\": \"projects/12345601/services/compute.googleapis.com\",\n      \"config\": {\n        \"name\": \"compute.googleapis.com\",\n        \"title\": \"Compute Engine API\",\n        \"documentation\": {\n          \"summary\": \"Creates and runs virtual machines on Google Cloud Platform.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"compute.googleapis.com/VpcNetwork\",\n            \"displayName\": \"VPC Network\",\n            \"description\": \"VPC Network.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the VPC Network.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the VPC Network, global always.\"\n              },\n              {\n                \"key\": \"network_id\",\n                \"description\": \"VPC Network resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Location\",\n            \"displayName\": \"Compute Location\",\n            \"description\": \"A location in the Compute API.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the Compute Location.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Interconnect\",\n            \"displayName\": \"Interconnect\",\n            \"description\": \"Interconnect.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the Interconnect.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the Interconnect.\"\n              },\n              {\n                \"key\": \"interconnect_id\",\n                \"description\": \"Interconnect resource ID.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/OperationType\",\n            \"displayName\": \"Operation Type\",\n            \"description\": \"Operation Type.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the operation.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the operation.\"\n              },\n              {\n                \"key\": \"operation_type\",\n                \"description\": \"Operation type.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Reservation\",\n            \"displayName\": \"Reservation\",\n            \"description\": \"Monitored resource representing a reservation.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container (e.g. project number) associated with the reservation.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The zone that contains the reservation.\"\n              },\n              {\n                \"key\": \"reservation_id\",\n                \"description\": \"Reservation resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"gce_instance\",\n            \"displayName\": \"VM Instance\",\n            \"description\": \"A virtual machine instance hosted in Compute Engine.\",\n            \"labels\": [\n              {\n                \"key\": \"project_id\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as \\\"my-project\\\".\"\n              },\n              {\n                \"key\": \"instance_id\",\n                \"description\": \"The numeric VM instance identifier assigned by Compute Engine.\"\n              },\n              {\n                \"key\": \"zone\",\n                \"description\": \"The Compute Engine zone in which the VM is running.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/FirewallPolicy\",\n            \"displayName\": \"Firewall policy\",\n            \"description\": \"Firewall policy.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project or organization) associated with the firewall policy.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the firewall policy.\"\n              },\n              {\n                \"key\": \"firewall_policy_id\",\n                \"description\": \"Firewall policy resource ID.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/dynamic_routes_per_region_per_peering_group\",\n                \"compute.googleapis.com/global_internal_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/instances_per_peering_group\",\n                \"compute.googleapis.com/instances_per_vpc_network\",\n                \"compute.googleapis.com/internal_lb_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_managed_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_protocol_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/ip_aliases_per_peering_group\",\n                \"compute.googleapis.com/ip_aliases_per_vpc_network\",\n                \"compute.googleapis.com/peerings_per_vpc_network\",\n                \"compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/exceeded\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/regional_external_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/regional_internal_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/static_routes_per_peering_group\",\n                \"compute.googleapis.com/static_routes_per_vpc_network\",\n                \"compute.googleapis.com/subnet_ranges_per_peering_group\",\n                \"compute.googleapis.com/subnet_ranges_per_vpc_network\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Location\",\n              \"metrics\": [\n                \"compute.googleapis.com/cpus_per_vm_family\",\n                \"compute.googleapis.com/global_dns/request_count\",\n                \"compute.googleapis.com/inter_region_egress_bandwidth\",\n                \"compute.googleapis.com/local_ssd_total_storage_per_vm_family\",\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/exceeded\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/exceeded\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/exceeded\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/usage\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/exceeded\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Interconnect\",\n              \"metrics\": [\n                \"compute.googleapis.com/interconnect_attachments_per_interconnect\",\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/OperationType\",\n              \"metrics\": [\n                \"compute.googleapis.com/global_concurrent_operations\",\n                \"compute.googleapis.com/quota/concurrent/global_concurrent_operations/exceeded\",\n                \"compute.googleapis.com/quota/concurrent/internal/global_concurrent_operations/combined_units\",\n                \"compute.googleapis.com/quota/concurrent/internal/regional_concurrent_operations/combined_units\",\n                \"compute.googleapis.com/quota/concurrent/regional_concurrent_operations/exceeded\",\n                \"compute.googleapis.com/regional_concurrent_operations\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"gce_instance\",\n              \"metrics\": [\n                \"compute.googleapis.com/instance/global_dns/request_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Reservation\",\n              \"metrics\": [\n                \"compute.googleapis.com/reservation/reserved\",\n                \"compute.googleapis.com/reservation/assured\",\n                \"compute.googleapis.com/reservation/used\",\n                \"compute.googleapis.com/reservation/internal/matching_instances\",\n                \"compute.googleapis.com/reservation/internal/prespuns_by_state\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Location\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/limit\",\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/usage\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/limit\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/usage\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/limit\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/limit\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/usage\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/limit\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/limit\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/usage\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/limit\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/usage\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Interconnect\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/limit\",\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/OperationType\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/concurrent/global_concurrent_operations/limit\",\n                \"compute.googleapis.com/quota/concurrent/regional_concurrent_operations/limit\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/FirewallPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/FirewallPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/usage\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345601\"\n    },\n    {\n      \"name\": \"projects/12345601/services/oslogin.googleapis.com\",\n      \"config\": {\n        \"name\": \"oslogin.googleapis.com\",\n        \"title\": \"Cloud OS Login API\",\n        \"documentation\": {\n          \"summary\": \"You can use OS Login to manage access to your VM instances using IAM roles.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345601\"\n    },\n    {\n      \"name\": \"projects/12345601/services/websecurityscanner.googleapis.com\",\n      \"config\": {\n        \"name\": \"websecurityscanner.googleapis.com\",\n        \"title\": \"Web Security Scanner API\",\n        \"documentation\": {\n          \"summary\": \"Scans your Compute and App Engine apps for common web vulnerabilities.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345601\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gce2/project.tf",
    "content": "/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nresource \"random_string\" \"project_id_suffix\" {\n  length  = 8\n  number  = true\n  lower   = true\n  upper   = false\n  special = false\n}\n\nresource \"google_project\" \"project\" {\n  name            = \"gcpdiag test - faultyssh\"\n  project_id      = var.project_id != \"\" ? var.project_id : \"gcpdiag-gce2-${random_string.project_id_suffix.id}\"\n  org_id          = var.folder_id == \"\" ? var.org_id : null\n  folder_id       = var.folder_id != \"\" ? var.folder_id : null\n  billing_account = var.billing_account_id\n  labels = {\n    gcpdiag : \"test\"\n  }\n}\n\nresource \"google_project_service\" \"compute\" {\n  project = google_project.project.project_id\n  service = \"compute.googleapis.com\"\n}\n\nresource \"google_compute_project_metadata_item\" \"serial_logging\" {\n  project    = google_project.project.project_id\n  depends_on = [google_project_service.compute]\n  key        = \"serial-port-logging-enable\"\n  value      = \"true\"\n}\n\ndata \"google_compute_default_service_account\" \"default\" {\n  project    = google_project.project.project_id\n  depends_on = [google_project_service.compute]\n}\n\ndata \"google_compute_image\" \"debian\" {\n  family  = \"debian-11\"\n  project = \"debian-cloud\"\n}\n\ndata \"google_compute_image\" \"windows\" {\n  family  = \"windows-2019-core\"\n  project = \"windows-cloud\"\n}\n\noutput \"project_id\" {\n  value = google_project.project.project_id\n}\n\noutput \"project_id_suffix\" {\n  value = random_string.project_id_suffix.id\n}\n\noutput \"project_nr\" {\n  value = google_project.project.number\n}\n\noutput \"org_id\" {\n  value = var.org_id\n}\n"
  },
  {
    "path": "test-data/gce2/variables.tf",
    "content": "variable \"project_id\" {\n  //default = \"use-an-existing-test-project\"\n}\nvariable \"billing_account_id\" {}\n\nvariable \"org_id\" {}\nvariable \"folder_id\" { default = \"\" }\n\nvariable \"roles\" {\n  description = \"List of SSH related roles to assign\"\n  type        = list(string)\n  default = [\n    \"roles/owner\",\n    \"roles/compute.osLogin\",\n    \"roles/compute.osAdminLogin\",\n    \"roles/iam.serviceAccountUser\",\n    \"roles/iap.tunnelResourceAccessor\",\n    \"roles/compute.instanceAdmin.v1\",\n  ]\n}\n"
  },
  {
    "path": "test-data/gce3/Makefile",
    "content": "PROJECT_ID  := $(shell terraform output -raw project_id)\nPROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix)\nPROJECT_NR  := $(shell terraform output -raw project_nr)\nORG_ID      := $(shell terraform output -raw org_id)\nCURL         = ../../bin/curl-wrap.sh\nJSON_CLEANER = ../../bin/json-cleaner\nZONE_1       = europe-west2-a\n\nFAKE_PROJECT_ID_SUFFIX = 'ops-agent'\nFAKE_PROJECT_NR = 12345001\nFAKE_ORG_ID = 11112222\n\nCOMPUTE_INSTANCES_MAXRESULTS=3\n\nINSTANCE_NAME_GCE2=working-opsagent\nINSTANCE_NAME_GCE1=faulty-opsagent\n\nORG_POLICY_CONSTRAINTS = \\\n\tjson-dumps/org-constraint-compute.disableSerialPortAccess.json \\\n  json-dumps/org-constraint-compute.requireOsLogin.json \\\n  json-dumps/org-constraint-compute.requireShieldedVm.json \\\n  json-dumps/org-constraint-iam.automaticIamGrantsForDefaultServiceAccounts.json \\\n  json-dumps/org-constraint-compute.disableSerialPortLogging.json \\\n  json-dumps/org-constraint-compute.disableSshInBrowser.json\n\n\nall:\t\\\n\tjson-dumps/compute-effective-firewalls-default.json \\\n\tjson-dumps/compute-instances-$(ZONE_1).json \\\n\tjson-dumps/compute-instances-empty.json \\\n\tjson-dumps/compute-disks-empty.json \\\n\tjson-dumps/compute-network-default.json \\\n\tjson-dumps/compute-project.json \\\n\tjson-dumps/compute-regions.json \\\n\tjson-dumps/compute-zones.json \\\n\tjson-dumps/iam-policy.json \\\n\tjson-dumps/iam-service-accounts.json \\\n\tjson-dumps/monitoring-query.json \\\n\tjson-dumps/project.json \\\n\tjson-dumps/services.json \\\n\tjson-dumps/iam-roles-get.json \\\n\tjson-dumps/iam-roles-custom.json \\\n  json-dumps/predefined-roles.json \\\n  ORG_POLICY_CONSTRAINTS\ninclude ../Makefile.inc\n\ndefine MONITORING_QUERY\n{ \\\n  \"query\": \"fetch gce_instance::compute.googleapis.com/instance/uptime_total \\\n  | within 10m \\\n  | group_by [resource.zone, metric.instance_name] \\\n  | group_by 5m, [.mean, .count] \\\n  \" \\\n}\nendef\njson-dumps/monitoring-query.json:\n\t$(CURL) -fsS \\\n\t\t'https://monitoring.googleapis.com/v3/projects/$(PROJECT_ID)/timeSeries:query' \\\n\t\t--header \"Content-Type: application/json\" -X POST \\\n\t\t--data '$(MONITORING_QUERY)' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/iam-roles-get.json:\n\t$(CURL) -fsS \\\n\t\t'https://iam.googleapis.com/v1/roles/logging.admin' \\\n\t\t| $(SED_SUBST_FAKE) \\\n\t\t| jq '{\"roles\": [.]}' >$@\n\njson-dumps/iam-roles-custom.json:\n\t$(CURL) -fsS \\\n\t\t'https://iam.googleapis.com/v1/projects/$(PROJECT_ID)/roles?view=FULL&pageSize=500' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n"
  },
  {
    "path": "test-data/gce3/faulty-opsagent.tf",
    "content": "/**\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nresource \"google_compute_instance\" \"faulty_opsagent\" {\n  project        = data.google_project.project.project_id\n  depends_on     = [google_project_service.compute]\n  name           = \"faulty-opsagent\"\n  machine_type   = \"e2-micro\"\n  zone           = \"europe-west2-a\"\n  desired_status = \"RUNNING\"\n  network_interface {\n    network = \"default\"\n  }\n  scheduling {\n    preemptible       = true\n    automatic_restart = false\n  }\n  boot_disk {\n    initialize_params {\n      image = data.google_compute_image.debian.self_link\n    }\n  }\n  service_account {\n    email = google_service_account.no_log_metric_perm_service_account.email\n    scopes = [\n      \"https://www.googleapis.com/auth/devstorage.read_only\",\n    ]\n  }\n  metadata = {\n    serial-port-logging-enable = \"false\"\n  }\n}\n\nresource \"google_compute_instance\" \"faulty_opsagent_no_sa\" {\n  project        = data.google_project.project.project_id\n  depends_on     = [google_project_service.compute]\n  name           = \"faulty-opsagent-no-sa\"\n  machine_type   = \"e2-micro\"\n  zone           = \"europe-west2-a\"\n  desired_status = \"RUNNING\"\n  network_interface {\n    network = \"default\"\n  }\n  scheduling {\n    preemptible       = true\n    automatic_restart = false\n  }\n  boot_disk {\n    initialize_params {\n      image = data.google_compute_image.debian.self_link\n    }\n  }\n  service_account {\n    scopes = [\n      \"https://www.googleapis.com/auth/devstorage.read_only\",\n    ]\n  }\n  metadata = {\n    serial-port-logging-enable = \"false\"\n  }\n}\n"
  },
  {
    "path": "test-data/gce3/json-dumps/compute-disks-europe-west2-b.json",
    "content": "{\n  \"kind\": \"compute#diskList\",\n  \"id\": \"projects/gcpdiag-gce3-aaaa/zones/europe-west2-b/disks\",\n  \"items\": [\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"7166944352958546654\",\n      \"creationTimestamp\": \"2024-02-01T07:43:45.923-08:00\",\n      \"name\": \"instance1\",\n      \"sizeGb\": \"10\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-b\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-b/disks/instance1\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-12-bookworm-v20240110\",\n      \"sourceImageId\": \"7748237884069727279\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-b/diskTypes/pd-balanced\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-12-bookworm\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"UEFI_COMPATIBLE\"\n        },\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        },\n        {\n          \"type\": \"GVNIC\"\n        },\n        {\n          \"type\": \"SEV_CAPABLE\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2024-02-01T07:43:45.923-08:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-b/instances/instance1\"\n      ],\n      \"labelFingerprint\": \"42WmSpB8rSM=\",\n      \"licenseCodes\": [\n        \"2147286739765738111\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\",\n      \"architecture\": \"X86_64\"\n    },\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"5777026617345865792\",\n      \"creationTimestamp\": \"2024-05-22T03:19:28.097-07:00\",\n      \"name\": \"rhel\",\n      \"sizeGb\": \"20\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-b\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-b/disks/rhel\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/rhel-cloud/global/images/rhel-8-v20240515\",\n      \"sourceImageId\": \"5034192189344274413\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-b/diskTypes/pd-balanced\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/rhel-cloud/global/licenses/rhel-8-server\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"UEFI_COMPATIBLE\"\n        },\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        },\n        {\n          \"type\": \"SEV_CAPABLE\"\n        },\n        {\n          \"type\": \"SEV_SNP_CAPABLE\"\n        },\n        {\n          \"type\": \"SEV_LIVE_MIGRATABLE\"\n        },\n        {\n          \"type\": \"SEV_LIVE_MIGRATABLE_V2\"\n        },\n        {\n          \"type\": \"GVNIC\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2024-05-22T03:19:28.097-07:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-b/instances/rhel\"\n      ],\n      \"labelFingerprint\": \"42WmSpB8rSM=\",\n      \"licenseCodes\": [\n        \"601259152637613565\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\",\n      \"satisfiesPzi\": false,\n      \"architecture\": \"X86_64\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-b/disks\"\n}\n"
  },
  {
    "path": "test-data/gce3/json-dumps/compute-effective-firewalls-default.json",
    "content": "{\n  \"firewalls\": [\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"1788225532538797299\",\n      \"creationTimestamp\": \"2023-02-17T05:33:16.236-08:00\",\n      \"name\": \"http-port\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/networks/default\",\n      \"priority\": 1000,\n      \"sourceRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"targetTags\": [\n        \"port-80\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"80\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": true,\n        \"metadata\": \"INCLUDE_ALL_METADATA\"\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/firewalls/http-port\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"1244235299898498970\",\n      \"creationTimestamp\": \"2024-02-27T09:52:53.714-08:00\",\n      \"name\": \"gke-cluster-1-884ca4e1-exkubelet\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/networks/default\",\n      \"priority\": 1000,\n      \"sourceRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"targetTags\": [\n        \"gke-cluster-1-884ca4e1-node\"\n      ],\n      \"denied\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"10255\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/firewalls/gke-cluster-1-884ca4e1-exkubelet\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"1300914097813168026\",\n      \"creationTimestamp\": \"2024-02-27T09:52:53.909-08:00\",\n      \"name\": \"gke-cluster-1-884ca4e1-vms\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/networks/default\",\n      \"priority\": 1000,\n      \"sourceRanges\": [\n        \"10.128.0.0/9\"\n      ],\n      \"targetTags\": [\n        \"gke-cluster-1-884ca4e1-node\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"icmp\"\n        },\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"1-65535\"\n          ]\n        },\n        {\n          \"IPProtocol\": \"udp\",\n          \"ports\": [\n            \"1-65535\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/firewalls/gke-cluster-1-884ca4e1-vms\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"4661233205710171863\",\n      \"creationTimestamp\": \"2020-08-10T11:21:44.205-07:00\",\n      \"name\": \"default-allow-rdp\",\n      \"description\": \"Allow RDP from anywhere\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/networks/default\",\n      \"priority\": 0,\n      \"sourceRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"3389\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": true,\n        \"metadata\": \"INCLUDE_ALL_METADATA\"\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/firewalls/default-allow-rdp\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"335207944630841047\",\n      \"creationTimestamp\": \"2020-08-10T11:21:44.147-07:00\",\n      \"name\": \"default-allow-internal\",\n      \"description\": \"Allow internal traffic on the default network\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/networks/default\",\n      \"priority\": 65534,\n      \"sourceRanges\": [\n        \"10.128.0.0/9\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"0-65535\"\n          ]\n        },\n        {\n          \"IPProtocol\": \"udp\",\n          \"ports\": [\n            \"0-65535\"\n          ]\n        },\n        {\n          \"IPProtocol\": \"icmp\"\n        },\n        {\n          \"IPProtocol\": \"esp\"\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": true,\n        \"metadata\": \"INCLUDE_ALL_METADATA\"\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/firewalls/default-allow-internal\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"1321540330359857049\",\n      \"creationTimestamp\": \"2024-02-27T09:52:54.337-08:00\",\n      \"name\": \"gke-cluster-1-884ca4e1-all\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/networks/default\",\n      \"priority\": 1000,\n      \"sourceRanges\": [\n        \"10.4.0.0/14\"\n      ],\n      \"targetTags\": [\n        \"gke-cluster-1-884ca4e1-node\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"icmp\"\n        },\n        {\n          \"IPProtocol\": \"esp\"\n        },\n        {\n          \"IPProtocol\": \"ah\"\n        },\n        {\n          \"IPProtocol\": \"sctp\"\n        },\n        {\n          \"IPProtocol\": \"tcp\"\n        },\n        {\n          \"IPProtocol\": \"udp\"\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/firewalls/gke-cluster-1-884ca4e1-all\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"2898450577279178561\",\n      \"creationTimestamp\": \"2020-09-25T05:59:26.480-07:00\",\n      \"name\": \"allow-health-check\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/networks/default\",\n      \"priority\": 1000,\n      \"sourceRanges\": [\n        \"130.211.0.0/22\",\n        \"35.191.0.0/16\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"80\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": true,\n        \"metadata\": \"INCLUDE_ALL_METADATA\"\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/firewalls/allow-health-check\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"8815473120383311769\",\n      \"creationTimestamp\": \"2024-02-27T09:52:54.337-08:00\",\n      \"name\": \"gke-cluster-1-884ca4e1-inkubelet\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/networks/default\",\n      \"priority\": 999,\n      \"sourceRanges\": [\n        \"10.4.0.0/14\"\n      ],\n      \"sourceTags\": [\n        \"gke-cluster-1-884ca4e1-node\"\n      ],\n      \"targetTags\": [\n        \"gke-cluster-1-884ca4e1-node\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"10255\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/firewalls/gke-cluster-1-884ca4e1-inkubelet\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"4950939530198662322\",\n      \"creationTimestamp\": \"2020-08-24T02:03:25.144-07:00\",\n      \"name\": \"default-allow-http\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/networks/default\",\n      \"priority\": 1000,\n      \"sourceRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"targetTags\": [\n        \"http-server\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"80\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": true,\n        \"metadata\": \"INCLUDE_ALL_METADATA\"\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/firewalls/default-allow-http\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"4628907370585406642\",\n      \"creationTimestamp\": \"2020-08-24T02:03:25.784-07:00\",\n      \"name\": \"default-allow-https\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/networks/default\",\n      \"priority\": 1000,\n      \"sourceRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"targetTags\": [\n        \"https-server\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"443\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": true,\n        \"metadata\": \"INCLUDE_ALL_METADATA\"\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/firewalls/default-allow-https\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"7385733757958528036\",\n      \"creationTimestamp\": \"2024-04-10T16:37:47.730-07:00\",\n      \"name\": \"ssh\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/networks/default\",\n      \"priority\": 1000,\n      \"sourceRanges\": [\n        \"34.141.189.94/32\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"22\",\n            \"5091\",\n            \"5901\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": true,\n        \"metadata\": \"INCLUDE_ALL_METADATA\"\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/firewalls/ssh\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"3658712715550797527\",\n      \"creationTimestamp\": \"2020-08-10T11:21:44.234-07:00\",\n      \"name\": \"default-allow-icmp\",\n      \"description\": \"Allow ICMP from anywhere\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/networks/default\",\n      \"priority\": 65534,\n      \"sourceRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"icmp\"\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": true,\n        \"metadata\": \"INCLUDE_ALL_METADATA\"\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/firewalls/default-allow-icmp\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"4002099376250707573\",\n      \"creationTimestamp\": \"2022-12-08T05:03:22.205-08:00\",\n      \"name\": \"allow-ingress-iap\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/networks/default\",\n      \"priority\": 500,\n      \"sourceRanges\": [\n        \"35.235.240.0/20\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"22\",\n            \"3389\",\n            \"5091\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/firewalls/allow-ingress-iap\"\n    }\n  ],\n  \"firewallPolicys\": [\n    {\n      \"name\": \"902824820698\",\n      \"type\": \"HIERARCHY\",\n      \"shortName\": \"default-firewall-policy\",\n      \"displayName\": \"default-firewall-policy\",\n      \"rules\": [\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 0,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"34.168.226.0/26\",\n              \"34.102.114.64/26\",\n              \"34.16.224.64/26\",\n              \"34.48.81.64/26\",\n              \"34.168.146.160/27\",\n              \"34.16.224.160/27\",\n              \"34.82.66.0/24\",\n              \"34.82.90.0/24\",\n              \"34.82.98.0/24\",\n              \"34.82.160.0/24\",\n              \"34.82.166.128/25\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"tcp\"\n              },\n              {\n                \"ipProtocol\": \"udp\"\n              }\n            ]\n          },\n          \"action\": \"allow\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 1,\n          \"match\": {\n            \"destIpRanges\": [\n              \"34.83.160.25/32\",\n              \"34.125.160.60/32\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"tcp\"\n              },\n              {\n                \"ipProtocol\": \"udp\"\n              }\n            ]\n          },\n          \"action\": \"allow\",\n          \"direction\": \"EGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 487,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"0.0.0.0/0\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\"\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 488,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"0.0.0.0/0\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\"\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 600,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"35.235.240.0/20\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"tcp\",\n                \"ports\": [\n                  \"22\",\n                  \"3389\",\n                  \"5900-5901\"\n                ]\n              }\n            ]\n          },\n          \"action\": \"allow\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 601,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"35.191.0.0/16\",\n              \"130.211.0.0/22\",\n              \"209.85.152.0/22\",\n              \"209.85.204.0/22\",\n              \"169.254.169.254\",\n              \"108.170.220.0/23\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 602,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"10.0.0.0/8\",\n              \"172.16.0.0/12\",\n              \"192.168.0.0/16\",\n              \"100.64.0.0/10\",\n              \"240.0.0.0/4\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 603,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"35.199.192.0/19\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"tcp\",\n                \"ports\": [\n                  \"53\"\n                ]\n              },\n              {\n                \"ipProtocol\": \"udp\",\n                \"ports\": [\n                  \"53\"\n                ]\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 604,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"107.178.230.64/26\",\n              \"35.199.224.0/19\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"tcp\",\n                \"ports\": [\n                  \"667\"\n                ]\n              },\n              {\n                \"ipProtocol\": \"udp\",\n                \"ports\": [\n                  \"665-666\"\n                ]\n              },\n              {\n                \"ipProtocol\": \"icmp\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 700,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"0.0.0.0/0\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"deny\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 2147483644,\n          \"match\": {\n            \"destIpRanges\": [\n              \"::/0\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"EGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 2147483645,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"::/0\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 2147483646,\n          \"match\": {\n            \"destIpRanges\": [\n              \"0.0.0.0/0\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"EGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 2147483647,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"0.0.0.0/0\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gce3/json-dumps/compute-instances-europe-west2-a.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances\",\n  \"items\": [\n    {\n      \"canIpForward\": false,\n      \"cpuPlatform\": \"Intel Broadwell\",\n      \"creationTimestamp\": \"2024-05-28T11:05:14.650-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"architecture\": \"X86_64\",\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"10\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/disks/faulty-opsagent\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"6455030489701655094\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"42WmSpB8rSM=\",\n      \"lastStartTimestamp\": \"2024-05-28T11:05:20.961-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/machineTypes/e2-micro\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"serial-port-logging-enable\",\n            \"value\": \"false\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"faulty-opsagent\",\n      \"networkInterfaces\": [\n        {\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/networks/default\",\n          \"networkIP\": \"10.154.0.69\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west2/subnetworks/default\"\n        }\n      ],\n      \"satisfiesPzi\": true,\n      \"scheduling\": {\n        \"automaticRestart\": false,\n        \"onHostMaintenance\": \"TERMINATE\",\n        \"preemptible\": true\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances/faulty-opsagent\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"no-logging-monitoring-perm@gcpdiag-gce3-aaaa.iam.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/devstorage.read_only\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\"\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-a\"\n    },\n    {\n      \"canIpForward\": false,\n      \"cpuPlatform\": \"Intel Broadwell\",\n      \"creationTimestamp\": \"2024-05-28T10:46:19.989-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"architecture\": \"X86_64\",\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"10\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/disks/faulty-opsagent-no-sa\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"3890206252528805508\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"42WmSpB8rSM=\",\n      \"lastStartTimestamp\": \"2024-05-28T10:46:24.523-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/machineTypes/e2-micro\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"serial-port-logging-enable\",\n            \"value\": \"false\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"faulty-opsagent-no-sa\",\n      \"networkInterfaces\": [\n        {\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/networks/default\",\n          \"networkIP\": \"10.154.0.68\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west2/subnetworks/default\"\n        }\n      ],\n      \"satisfiesPzi\": true,\n      \"scheduling\": {\n        \"automaticRestart\": false,\n        \"onHostMaintenance\": \"TERMINATE\",\n        \"preemptible\": true\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances/faulty-opsagent-no-sa\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"12345001-compute@developer.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/devstorage.read_only\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\"\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-a\"\n    },\n    {\n      \"canIpForward\": false,\n      \"cpuPlatform\": \"Intel Broadwell\",\n      \"creationTimestamp\": \"2024-05-28T10:45:18.408-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"architecture\": \"X86_64\",\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"10\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/disks/working-opsagent\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"2921639617738024642\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"nhRbbj57YcA=\",\n      \"labels\": {\n        \"env\": \"valid\"\n      },\n      \"lastStartTimestamp\": \"2024-05-28T10:45:23.910-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/machineTypes/e2-micro\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"working-opsagent\",\n      \"networkInterfaces\": [\n        {\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/networks/default\",\n          \"networkIP\": \"10.154.0.67\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west2/subnetworks/default\"\n        }\n      ],\n      \"satisfiesPzi\": true,\n      \"scheduling\": {\n        \"automaticRestart\": false,\n        \"onHostMaintenance\": \"TERMINATE\",\n        \"preemptible\": true\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances/working-opsagent\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"12345001-compute@developer.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/devstorage.read_only\",\n            \"https://www.googleapis.com/auth/logging.write\",\n            \"https://www.googleapis.com/auth/monitoring.write\",\n            \"https://www.googleapis.com/auth/service.management.readonly\",\n            \"https://www.googleapis.com/auth/servicecontrol\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"secured-instance\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-a\"\n    }\n  ],\n  \"kind\": \"compute#instanceList\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-a/instances\"\n}\n"
  },
  {
    "path": "test-data/gce3/json-dumps/compute-instances-europe-west2-b.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gce3-aaaa/zones/europe-west2-b/instances\",\n  \"kind\": \"compute#instanceList\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-b/instances\"\n}\n"
  },
  {
    "path": "test-data/gce3/json-dumps/compute-network-default.json",
    "content": "{\n  \"autoCreateSubnetworks\": true,\n  \"creationTimestamp\": \"2020-08-10T11:20:50.139-07:00\",\n  \"description\": \"Default network for the project\",\n  \"id\": \"5984955350541676269\",\n  \"kind\": \"compute#network\",\n  \"name\": \"default\",\n  \"networkFirewallPolicyEnforcementOrder\": \"AFTER_CLASSIC_FIREWALL\",\n  \"peerings\": [\n    {\n      \"autoCreateRoutes\": true,\n      \"exchangeSubnetRoutes\": true,\n      \"exportCustomRoutes\": true,\n      \"exportSubnetRoutesWithPublicIp\": true,\n      \"importCustomRoutes\": true,\n      \"importSubnetRoutesWithPublicIp\": false,\n      \"name\": \"peering-y7b5777b682d5ba4bp-tp-default\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/REDACTED/global/networks/servicenetworking\",\n      \"stackType\": \"IPV4_ONLY\",\n      \"state\": \"ACTIVE\",\n      \"stateDetails\": \"[2024-02-10T04:29:01.768-08:00]: Connected.\"\n    },\n    {\n      \"autoCreateRoutes\": true,\n      \"exchangeSubnetRoutes\": true,\n      \"exportCustomRoutes\": false,\n      \"exportSubnetRoutesWithPublicIp\": false,\n      \"importCustomRoutes\": false,\n      \"importSubnetRoutesWithPublicIp\": false,\n      \"name\": \"servicenetworking-googleapis-com\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/REDACTED/global/networks/servicenetworking\",\n      \"stackType\": \"IPV4_ONLY\",\n      \"state\": \"ACTIVE\",\n      \"stateDetails\": \"[2023-01-13T21:36:22.520-08:00]: Connected.\"\n    }\n  ],\n  \"routingConfig\": {\n    \"routingMode\": \"REGIONAL\"\n  },\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/networks/default\",\n  \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/global/networks/5984955350541676269\",\n  \"subnetworks\": [\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-east1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-southwest1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-central1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-east4/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-northeast3/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/australia-southeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/northamerica-northeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-north1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/southamerica-east1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-south1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-southeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west10/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-south1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-west8/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west3/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west6/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-east1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-east5/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/me-central2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-southeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/southamerica-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-east2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-west4/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/me-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/africa-south1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/me-central1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west8/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-northeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-northeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west9/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/northamerica-northeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-east7/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-central2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/australia-southeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west4/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-west2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-south2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west12/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-west3/subnetworks/default\"\n  ]\n}\n"
  },
  {
    "path": "test-data/gce3/json-dumps/compute-project.json",
    "content": "{\n  \"cloudArmorTier\": \"CA_STANDARD\",\n  \"commonInstanceMetadata\": {\n    \"fingerprint\": \"dzzoAfEyiME=\",\n    \"items\": [\n      {\n        \"key\": \"enable-guest-attributes\",\n        \"value\": \"TRUE\"\n      },\n      {\n        \"key\": \"enable-osconfig\",\n        \"value\": \"TRUE\"\n      },\n      {\n        \"key\": \"serial-port-logging-enable\",\n        \"value\": \"true\"\n      },\n      {\n        \"key\": \"ssh-keys\",\n        \"value\": \"kwesigraham:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDOlFswYm/MxkF+79ZeXa7WzB2u8DxY4mq3VdPvPoalj481IY5UfxXSvpGeNRZehap83aUH/ZbSJZLDw7vn2Y737yTHJK2sW95UvKVjzdOsuiiJu101HPv+ZB1QzUkXeg7LRpR5jjUHTcYMz4a/Krw7KqMKY8NUaB2vKsWOgo0WKqzXk9mGGG/Q1W63BOOGZNCBzl8ocx+nPgiJz7fjCG1yjbg+pQzVGP+Qlydd5OVjbFdjmD1Q4GGbVUw50ddZ/1mAZReIz6KaTAt1CoMMceSjUfeHW0AXKwJzl8cIe0SXVmxtRxFv4c0kolc+WjSkfwLQlHN5oRmHUx52QXiBa1gVVf36RnzgJIxa0w8MHBdBIIq+ML4uf8PUy9FWarkKuV83uil2DLrvo8Dj1tthjPlzh6Vgt07k2Ee2mSllFbVL32I/nPVN5vn02+Ln5b66zmWQnmPzm5B6Bg7O47AuvDKme6zuxH0Fxq93hESKTlkRqksx9/yzJjsmTTFI2sXlD9s= kwesigraham@cs-245386939121-ephemeral-qud5\"\n      }\n    ],\n    \"kind\": \"compute#metadata\"\n  },\n  \"creationTimestamp\": \"2020-08-10T11:20:43.961-07:00\",\n  \"defaultNetworkTier\": \"PREMIUM\",\n  \"defaultServiceAccount\": \"12345001-compute@developer.gserviceaccount.com\",\n  \"enabledFeatures\": [\n    \"alpha-api\"\n  ],\n  \"id\": \"7988415323333996820\",\n  \"kind\": \"compute#project\",\n  \"name\": \"gcpdiag-gce3-aaaa\",\n  \"quotas\": [\n    {\n      \"limit\": 180000,\n      \"metric\": \"SNAPSHOTS\",\n      \"usage\": 1\n    },\n    {\n      \"limit\": 30,\n      \"metric\": \"NETWORKS\",\n      \"usage\": 3\n    },\n    {\n      \"limit\": 500,\n      \"metric\": \"FIREWALLS\",\n      \"usage\": 13\n    },\n    {\n      \"limit\": 5000,\n      \"metric\": \"IMAGES\",\n      \"usage\": 3\n    },\n    {\n      \"limit\": 175,\n      \"metric\": \"STATIC_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 300,\n      \"metric\": \"ROUTES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"FORWARDING_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 500,\n      \"metric\": \"TARGET_POOLS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1000,\n      \"metric\": \"HEALTH_CHECKS\",\n      \"usage\": 1\n    },\n    {\n      \"limit\": 575,\n      \"metric\": \"IN_USE_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 500,\n      \"metric\": \"TARGET_INSTANCES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_HTTP_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"URL_MAPS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"BACKEND_SERVICES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1000,\n      \"metric\": \"INSTANCE_TEMPLATES\",\n      \"usage\": 5\n    },\n    {\n      \"limit\": 50,\n      \"metric\": \"TARGET_VPN_GATEWAYS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"VPN_TUNNELS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 30,\n      \"metric\": \"BACKEND_BUCKETS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 20,\n      \"metric\": \"ROUTERS\",\n      \"usage\": 3\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_SSL_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_HTTPS_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"SSL_CERTIFICATES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 300,\n      \"metric\": \"SUBNETWORKS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_TCP_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 10,\n      \"metric\": \"SECURITY_POLICIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 200,\n      \"metric\": \"SECURITY_POLICY_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1000,\n      \"metric\": \"XPN_SERVICE_PROJECTS\",\n      \"usage\": 1\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"PACKET_MIRRORINGS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1000,\n      \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 6,\n      \"metric\": \"INTERCONNECTS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 5000,\n      \"metric\": \"GLOBAL_INTERNAL_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 50,\n      \"metric\": \"VPN_GATEWAYS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 5000,\n      \"metric\": \"MACHINE_IMAGES\",\n      \"usage\": 3\n    },\n    {\n      \"limit\": 20,\n      \"metric\": \"SECURITY_POLICY_CEVAL_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 50,\n      \"metric\": \"EXTERNAL_VPN_GATEWAYS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1,\n      \"metric\": \"PUBLIC_ADVERTISED_PREFIXES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 10,\n      \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1024,\n      \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 60,\n      \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"INTERNAL_TRAFFIC_DIRECTOR_FORWARDING_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"GLOBAL_EXTERNAL_MANAGED_FORWARDING_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"GLOBAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"GLOBAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"GLOBAL_EXTERNAL_PROXY_LB_BACKEND_SERVICES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 750,\n      \"metric\": \"GLOBAL_INTERNAL_TRAFFIC_DIRECTOR_BACKEND_SERVICES\",\n      \"usage\": 0\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa\",\n  \"vmDnsSetting\": \"ZONAL_ONLY\",\n  \"xpnProjectStatus\": \"HOST\"\n}\n"
  },
  {
    "path": "test-data/gce3/json-dumps/compute-regions.json",
    "content": "{\n  \"kind\": \"compute#regionList\",\n  \"id\": \"projects/gcpdiag-gce3-aaaa/regions\",\n  \"items\": [\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1610\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"africa-south1\",\n      \"description\": \"africa-south1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/africa-south1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/africa-south1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/africa-south1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/africa-south1\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1220\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east1\",\n      \"description\": \"asia-east1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-east1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-east1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-east1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-east1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1370\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east2\",\n      \"description\": \"asia-east2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-east2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-east2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-east2-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-east2\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1250\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast1\",\n      \"description\": \"asia-northeast1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-northeast1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-northeast1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-northeast1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-northeast1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1390\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast2\",\n      \"description\": \"asia-northeast2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-northeast2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-northeast2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-northeast2-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-northeast2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1410\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast3\",\n      \"description\": \"asia-northeast3\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-northeast3-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-northeast3-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-northeast3-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-northeast3\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1320\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south1\",\n      \"description\": \"asia-south1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-south1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-south1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-south1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-south1\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1470\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south2\",\n      \"description\": \"asia-south2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-south2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-south2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-south2-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-south2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1260\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast1\",\n      \"description\": \"asia-southeast1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-southeast1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-southeast1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-southeast1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-southeast1\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1440\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast2\",\n      \"description\": \"asia-southeast2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-southeast2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-southeast2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-southeast2-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-southeast2\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1280\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast1\",\n      \"description\": \"australia-southeast1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/australia-southeast1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/australia-southeast1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/australia-southeast1-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/australia-southeast1\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1480\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast2\",\n      \"description\": \"australia-southeast2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/australia-southeast2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/australia-southeast2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/australia-southeast2-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/australia-southeast2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1450\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-central2\",\n      \"description\": \"europe-central2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-central2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-central2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-central2-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-central2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1350\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-north1\",\n      \"description\": \"europe-north1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-north1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-north1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-north1-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-north1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1540\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-southwest1\",\n      \"description\": \"europe-southwest1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-southwest1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-southwest1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-southwest1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-southwest1\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1100\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west1\",\n      \"description\": \"europe-west1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west1-d\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1590\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west10\",\n      \"description\": \"europe-west10\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west10-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west10-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west10-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west10\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1570\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west12\",\n      \"description\": \"europe-west12\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west12-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west12-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west12-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west12\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1290\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west2\",\n      \"description\": \"europe-west2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 3\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 3102\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 4\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 1550\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 7\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 3\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 1\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 2\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west2\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1490\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-west1\",\n      \"description\": \"southamerica-west1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/southamerica-west1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/southamerica-west1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/southamerica-west1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/southamerica-west1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1000\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1\",\n      \"description\": \"us-central1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-central1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-central1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-central1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-central1-f\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 3\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 1\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 3\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 300\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 1\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 1\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 3\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 26000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 2\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 1\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 2\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-central1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1230\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east1\",\n      \"description\": \"us-east1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-east1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-east1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-east1-d\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-east1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1270\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east4\",\n      \"description\": \"us-east4\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-east4-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-east4-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-east4-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-east4\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1530\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east5\",\n      \"description\": \"us-east5\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-east5-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-east5-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-east5-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-east5\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1550\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-south1\",\n      \"description\": \"us-south1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-south1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-south1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-south1-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-south1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1210\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west1\",\n      \"description\": \"us-west1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-west1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-west1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-west1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-west1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1360\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west2\",\n      \"description\": \"us-west2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-west2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-west2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-west2-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-west2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1420\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west3\",\n      \"description\": \"us-west3\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-west3-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-west3-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-west3-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-west3\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1430\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west4\",\n      \"description\": \"us-west4\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-west4-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-west4-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-west4-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-west4\",\n      \"supportsPzs\": false\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions\"\n}\n"
  },
  {
    "path": "test-data/gce3/json-dumps/compute-zones.json",
    "content": "{\n  \"kind\": \"compute#zoneList\",\n  \"id\": \"projects/gcpdiag-gce3-aaaa/zones\",\n  \"items\": [\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2231\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east1-b\",\n      \"description\": \"us-east1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-east1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2233\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east1-c\",\n      \"description\": \"us-east1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-east1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2234\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east1-d\",\n      \"description\": \"us-east1-d\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-east1-d\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2272\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east4-c\",\n      \"description\": \"us-east4-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-east4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-east4-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2271\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east4-b\",\n      \"description\": \"us-east4-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-east4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-east4-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2270\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east4-a\",\n      \"description\": \"us-east4-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-east4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-east4-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2002\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1-c\",\n      \"description\": \"us-central1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-central1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Arm Development Platform\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2000\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1-a\",\n      \"description\": \"us-central1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-central1-a\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Arm Development Platform\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2004\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1-f\",\n      \"description\": \"us-central1-f\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-central1-f\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2001\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1-b\",\n      \"description\": \"us-central1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-central1-b\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2211\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west1-b\",\n      \"description\": \"us-west1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-west1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2212\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west1-c\",\n      \"description\": \"us-west1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-west1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2210\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west1-a\",\n      \"description\": \"us-west1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-west1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2342\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west4-a\",\n      \"description\": \"europe-west4-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west4-a\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2341\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west4-b\",\n      \"description\": \"europe-west4-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west4-b\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2340\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west4-c\",\n      \"description\": \"europe-west4-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west4-c\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2101\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west1-b\",\n      \"description\": \"europe-west1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2104\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west1-d\",\n      \"description\": \"europe-west1-d\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west1-d\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2103\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west1-c\",\n      \"description\": \"europe-west1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2300\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west3-c\",\n      \"description\": \"europe-west3-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west3-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2301\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west3-a\",\n      \"description\": \"europe-west3-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west3-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2302\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west3-b\",\n      \"description\": \"europe-west3-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west3-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2292\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west2-c\",\n      \"description\": \"europe-west2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2291\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west2-b\",\n      \"description\": \"europe-west2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2290\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west2-a\",\n      \"description\": \"europe-west2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2221\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east1-b\",\n      \"description\": \"asia-east1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-east1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2220\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east1-a\",\n      \"description\": \"asia-east1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-east1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2222\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east1-c\",\n      \"description\": \"asia-east1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-east1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2261\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast1-b\",\n      \"description\": \"asia-southeast1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-southeast1-b\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2260\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast1-a\",\n      \"description\": \"asia-southeast1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-southeast1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2262\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast1-c\",\n      \"description\": \"asia-southeast1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-southeast1-c\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2251\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast1-b\",\n      \"description\": \"asia-northeast1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-northeast1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2252\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast1-c\",\n      \"description\": \"asia-northeast1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-northeast1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2250\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast1-a\",\n      \"description\": \"asia-northeast1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-northeast1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2322\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south1-c\",\n      \"description\": \"asia-south1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-south1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2320\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south1-b\",\n      \"description\": \"asia-south1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-south1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2321\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south1-a\",\n      \"description\": \"asia-south1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-south1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2282\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast1-b\",\n      \"description\": \"australia-southeast1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/australia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/australia-southeast1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2280\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast1-c\",\n      \"description\": \"australia-southeast1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/australia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/australia-southeast1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2281\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast1-a\",\n      \"description\": \"australia-southeast1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/australia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/australia-southeast1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2311\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-east1-b\",\n      \"description\": \"southamerica-east1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/southamerica-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/southamerica-east1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2312\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-east1-c\",\n      \"description\": \"southamerica-east1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/southamerica-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/southamerica-east1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2310\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-east1-a\",\n      \"description\": \"southamerica-east1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/southamerica-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/southamerica-east1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2611\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"africa-south1-a\",\n      \"description\": \"africa-south1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/africa-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/africa-south1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2610\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"africa-south1-b\",\n      \"description\": \"africa-south1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/africa-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/africa-south1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2612\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"africa-south1-c\",\n      \"description\": \"africa-south1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/africa-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/africa-south1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2372\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east2-a\",\n      \"description\": \"asia-east2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-east2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-east2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2371\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east2-b\",\n      \"description\": \"asia-east2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-east2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-east2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2370\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east2-c\",\n      \"description\": \"asia-east2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-east2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-east2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2392\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast2-a\",\n      \"description\": \"asia-northeast2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-northeast2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2390\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast2-b\",\n      \"description\": \"asia-northeast2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-northeast2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2391\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast2-c\",\n      \"description\": \"asia-northeast2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-northeast2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2410\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast3-a\",\n      \"description\": \"asia-northeast3-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-northeast3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-northeast3-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2412\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast3-b\",\n      \"description\": \"asia-northeast3-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-northeast3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-northeast3-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2411\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast3-c\",\n      \"description\": \"asia-northeast3-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-northeast3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-northeast3-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2470\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south2-a\",\n      \"description\": \"asia-south2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-south2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-south2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2472\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south2-b\",\n      \"description\": \"asia-south2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-south2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-south2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2471\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south2-c\",\n      \"description\": \"asia-south2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-south2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-south2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2440\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast2-a\",\n      \"description\": \"asia-southeast2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-southeast2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2442\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast2-b\",\n      \"description\": \"asia-southeast2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-southeast2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2441\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast2-c\",\n      \"description\": \"asia-southeast2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/asia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/asia-southeast2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2480\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast2-a\",\n      \"description\": \"australia-southeast2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/australia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/australia-southeast2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2482\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast2-b\",\n      \"description\": \"australia-southeast2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/australia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/australia-southeast2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2481\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast2-c\",\n      \"description\": \"australia-southeast2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/australia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/australia-southeast2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2452\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-central2-a\",\n      \"description\": \"europe-central2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-central2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-central2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2450\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-central2-b\",\n      \"description\": \"europe-central2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-central2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-central2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2451\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-central2-c\",\n      \"description\": \"europe-central2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-central2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-central2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2352\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-north1-a\",\n      \"description\": \"europe-north1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-north1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-north1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2350\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-north1-b\",\n      \"description\": \"europe-north1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-north1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-north1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2351\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-north1-c\",\n      \"description\": \"europe-north1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-north1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-north1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2541\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-southwest1-a\",\n      \"description\": \"europe-southwest1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-southwest1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-southwest1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2540\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-southwest1-b\",\n      \"description\": \"europe-southwest1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-southwest1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-southwest1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2542\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-southwest1-c\",\n      \"description\": \"europe-southwest1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-southwest1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-southwest1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2591\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west10-a\",\n      \"description\": \"europe-west10-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west10\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west10-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2592\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west10-b\",\n      \"description\": \"europe-west10-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west10\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west10-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2590\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west10-c\",\n      \"description\": \"europe-west10-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west10\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west10-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2571\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west12-a\",\n      \"description\": \"europe-west12-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west12\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west12-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2572\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west12-b\",\n      \"description\": \"europe-west12-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west12\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west12-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2570\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west12-c\",\n      \"description\": \"europe-west12-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west12\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west12-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2382\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west6-a\",\n      \"description\": \"europe-west6-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west6\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west6-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2380\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west6-b\",\n      \"description\": \"europe-west6-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west6\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west6-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2381\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west6-c\",\n      \"description\": \"europe-west6-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west6\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west6-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2510\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west8-a\",\n      \"description\": \"europe-west8-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west8\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west8-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2511\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west8-b\",\n      \"description\": \"europe-west8-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west8\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west8-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2512\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west8-c\",\n      \"description\": \"europe-west8-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west8\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west8-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2521\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west9-a\",\n      \"description\": \"europe-west9-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west9\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west9-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2520\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west9-b\",\n      \"description\": \"europe-west9-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west9\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west9-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2522\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west9-c\",\n      \"description\": \"europe-west9-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/europe-west9\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/europe-west9-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2580\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central1-a\",\n      \"description\": \"me-central1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/me-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/me-central1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2581\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central1-b\",\n      \"description\": \"me-central1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/me-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/me-central1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2582\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central1-c\",\n      \"description\": \"me-central1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/me-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/me-central1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2601\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central2-a\",\n      \"description\": \"me-central2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/me-central2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/me-central2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2602\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central2-b\",\n      \"description\": \"me-central2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/me-central2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/me-central2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2600\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central2-c\",\n      \"description\": \"me-central2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/me-central2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/me-central2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2561\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-west1-a\",\n      \"description\": \"me-west1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/me-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/me-west1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2560\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-west1-b\",\n      \"description\": \"me-west1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/me-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/me-west1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2562\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-west1-c\",\n      \"description\": \"me-west1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/me-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/me-west1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2330\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast1-a\",\n      \"description\": \"northamerica-northeast1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/northamerica-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/northamerica-northeast1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2331\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast1-b\",\n      \"description\": \"northamerica-northeast1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/northamerica-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/northamerica-northeast1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2332\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast1-c\",\n      \"description\": \"northamerica-northeast1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/northamerica-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/northamerica-northeast1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2461\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast2-a\",\n      \"description\": \"northamerica-northeast2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/northamerica-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/northamerica-northeast2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2460\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast2-b\",\n      \"description\": \"northamerica-northeast2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/northamerica-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/northamerica-northeast2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2462\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast2-c\",\n      \"description\": \"northamerica-northeast2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/northamerica-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/northamerica-northeast2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2490\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-west1-a\",\n      \"description\": \"southamerica-west1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/southamerica-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/southamerica-west1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2491\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-west1-b\",\n      \"description\": \"southamerica-west1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/southamerica-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/southamerica-west1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2492\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-west1-c\",\n      \"description\": \"southamerica-west1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/southamerica-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/southamerica-west1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2532\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east5-a\",\n      \"description\": \"us-east5-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-east5\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-east5-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2531\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east5-b\",\n      \"description\": \"us-east5-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-east5\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-east5-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2530\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east5-c\",\n      \"description\": \"us-east5-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-east5\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-east5-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2551\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-south1-a\",\n      \"description\": \"us-south1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-south1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2552\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-south1-b\",\n      \"description\": \"us-south1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-south1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2550\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-south1-c\",\n      \"description\": \"us-south1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-south1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2362\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west2-a\",\n      \"description\": \"us-west2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-west2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2361\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west2-b\",\n      \"description\": \"us-west2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-west2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2360\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west2-c\",\n      \"description\": \"us-west2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-west2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2420\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west3-a\",\n      \"description\": \"us-west3-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-west3-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2421\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west3-b\",\n      \"description\": \"us-west3-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-west3-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2422\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west3-c\",\n      \"description\": \"us-west3-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-west3-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2431\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west4-a\",\n      \"description\": \"us-west4-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-west4-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2432\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west4-b\",\n      \"description\": \"us-west4-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-west4-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2430\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west4-c\",\n      \"description\": \"us-west4-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/regions/us-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones/us-west4-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce3-aaaa/zones\"\n}\n"
  },
  {
    "path": "test-data/gce3/json-dumps/iam-policy.json",
    "content": "{\n  \"auditConfigs\": [\n    {\n      \"auditLogConfigs\": [\n        {\n          \"logType\": \"ADMIN_READ\"\n        },\n        {\n          \"logType\": \"DATA_READ\"\n        },\n        {\n          \"logType\": \"DATA_WRITE\"\n        }\n      ],\n      \"service\": \"datapipelines.googleapis.com\"\n    },\n    {\n      \"auditLogConfigs\": [\n        {\n          \"logType\": \"DATA_READ\"\n        },\n        {\n          \"logType\": \"DATA_WRITE\"\n        }\n      ],\n      \"service\": \"compute.googleapis.com\"\n    },\n    {\n      \"auditLogConfigs\": [\n        {\n          \"logType\": \"ADMIN_READ\"\n        },\n        {\n          \"logType\": \"DATA_READ\"\n        },\n        {\n          \"logType\": \"DATA_WRITE\"\n        }\n      ],\n      \"service\": \"osconfig.googleapis.com\"\n    },\n    {\n      \"auditLogConfigs\": [\n        {\n          \"logType\": \"DATA_WRITE\"\n        }\n      ],\n      \"service\": \"monitoring.googleapis.com\"\n    }\n  ],\n  \"bindings\": [\n    {\n      \"members\": [\n        \"serviceAccount:service-12345001@compute-system.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"projects/gcpdiag-gce3-aaaa/roles/instanceschedulerole\"\n    },\n    {\n      \"members\": [\n        \"user:testuser@example.com\"\n      ],\n      \"role\": \"roles/aiplatform.admin\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12345001@gcp-sa-aiplatform-cc.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/aiplatform.customCodeServiceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12345001@gcp-sa-aiplatform-vm.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/aiplatform.notebookServiceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12345001@gcp-sa-aiplatform.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/aiplatform.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12345001@gcp-sa-apigee.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/apigee.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12345001@gcp-gae-service.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/appengine.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"user:testuser@example.com\"\n      ],\n      \"role\": \"roles/artifactregistry.admin\"\n    },\n    {\n      \"members\": [\n        \"user:testuser@example.com\"\n      ],\n      \"role\": \"roles/artifactregistry.repoAdmin\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12345001@gcp-sa-artifactregistry.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/artifactregistry.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12345001@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/bigquerydatatransfer.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12345001@gcp-sa-cloudasset.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/cloudasset.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:12345001@cloudbuild.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/cloudbuild.builds.builder\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12345001@gcp-sa-cloudbuild.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/cloudbuild.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12345001@gcf-admin-robot.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/cloudfunctions.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12345001@gcp-sa-cloudiot.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/cloudiot.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12345001@gcp-sa-cloudscheduler.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/cloudscheduler.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12345001@cloudcomposer-accounts.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/composer.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:12345001@cloudbuild.gserviceaccount.com\",\n        \"user:testuser@example.com\"\n      ],\n      \"role\": \"roles/compute.admin\"\n    },\n    {\n      \"members\": [\n        \"user:testuser@example.com\"\n      ],\n      \"role\": \"roles/compute.networkAdmin\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12345001@compute-system.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/compute.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"user:testuser@example.com\"\n      ],\n      \"role\": \"roles/container.admin\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12345001@gcp-sa-gkenode.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/container.nodeServiceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12345001@container-engine-robot.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/container.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12345001@container-analysis.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/containeranalysis.ServiceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12345001@containerregistry.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/containerregistry.ServiceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12345001@gcp-sa-containerscanning.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/containerscanning.ServiceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12345001@gcp-sa-ktd-control.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/containerthreatdetection.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12345001@dataflow-service-producer-prod.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/dataflow.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12345001@gcp-sa-dataform.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/dataform.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12345001@gcp-sa-datafusion.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/datafusion.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12345001@gcp-sa-datamigration.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/datamigration.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12345001@dataproc-accounts.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/dataproc.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:12345001@cloudservices.gserviceaccount.com\",\n        \"serviceAccount:gcpdiag-gce3-aaaa@appspot.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/editor\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12345001@firebase-rules.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/firebaserules.system\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12345001@gcp-sa-firestore.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/firestore.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12345001@gcp-sa-gkebackup.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/gkebackup.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12345001@gcp-sa-healthcare.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/healthcare.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"user:testuser@example.com\"\n      ],\n      \"role\": \"roles/iam.serviceAccountAdmin\"\n    },\n    {\n      \"members\": [\n        \"user:testuser@example.com\"\n      ],\n      \"role\": \"roles/iam.serviceAccountTokenCreator\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:12345001-compute@developer.gserviceaccount.com\",\n        \"serviceAccount:12345001@cloudbuild.gserviceaccount.com\",\n        \"user:testuser@example.com\"\n      ],\n      \"role\": \"roles/iam.serviceAccountUser\"\n    },\n    {\n      \"members\": [\n        \"user:testuser@example.com\"\n      ],\n      \"role\": \"roles/iap.tunnelResourceAccessor\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:12345001-compute@developer.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/logging.admin\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:12345001-compute@developer.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/logging.logWriter\"\n    },\n    {\n      \"members\": [\n        \"user:testuser@example.com\"\n      ],\n      \"role\": \"roles/logging.viewer\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12345001@gcp-sa-mi.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/managedidentities.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:12345001-compute@developer.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/monitoring.admin\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:12345001-compute@developer.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/monitoring.metricWriter\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12345001@gcp-sa-mcmetering.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/multiclustermetering.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"user:testuser@example.com\"\n      ],\n      \"role\": \"roles/networkmanagement.admin\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12345001@gcp-sa-networkmanagement.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/networkmanagement.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12345001@gcp-sa-notebooks.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/notebooks.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12345001@gcp-sa-osconfig.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/osconfig.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:12345001-compute@developer.gserviceaccount.com\",\n        \"user:testuser@example.com\",\n        \"user:testuser@example.com\"\n      ],\n      \"role\": \"roles/owner\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12345001@cloud-redis.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/redis.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12345001@serverless-robot-prod.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/run.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12345001@service-networking.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/servicenetworking.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"user:testuser@example.com\"\n      ],\n      \"role\": \"roles/serviceusage.serviceUsageConsumer\"\n    },\n    {\n      \"members\": [\n        \"user:testuser@example.com\"\n      ],\n      \"role\": \"roles/storage.admin\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:gce-diagnostics-extract-logs@gcpdiag-gce3-aaaa.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/storage.objectCreator\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:gce-diagnostics-extract-logs@gcpdiag-gce3-aaaa.iam.gserviceaccount.com\",\n        \"serviceAccount:service-12345001@gcp-sa-artifactregistry.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/storage.objectViewer\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12345001@gcp-sa-vpcaccess.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/vpcaccess.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12345001@gcp-sa-websecurityscanner.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/websecurityscanner.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12345001@gcp-sa-workstations.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/workstations.serviceAgent\"\n    }\n  ],\n  \"etag\": \"BwYZh3AG4OA=\",\n  \"version\": 1\n}\n"
  },
  {
    "path": "test-data/gce3/json-dumps/iam-roles-custom.json",
    "content": "{\n  \"roles\": [\n    {\n      \"name\": \"projects/gcpdiag-gce3-aaaa/roles/CustomRole\",\n      \"title\": \"Impersonate\",\n      \"description\": \"Created on: 2022-06-30\",\n      \"includedPermissions\": [\n        \"iam.serviceAccounts.actAs\"\n      ],\n      \"stage\": \"GA\",\n      \"etag\": \"BwXiptUg0eA=\"\n    },\n    {\n      \"name\": \"projects/gcpdiag-gce3-aaaa/roles/developerNoAccelerator\",\n      \"title\": \"gce-developer-no-accelerator\",\n      \"description\": \"gce roles\",\n      \"includedPermissions\": [\n        \"compute.addresses.get\",\n        \"compute.addresses.list\",\n        \"compute.addresses.use\",\n        \"compute.autoscalers.create\",\n        \"compute.autoscalers.delete\",\n        \"compute.autoscalers.get\",\n        \"compute.autoscalers.list\",\n        \"compute.autoscalers.update\"\n      ],\n      \"stage\": \"GA\",\n      \"etag\": \"BwWxnPlh5ng=\"\n    },\n    {\n      \"name\": \"projects/gcpdiag-gce3-aaaa/roles/instanceschedulerole\",\n      \"title\": \"Instance Schedule role\",\n      \"description\": \"Created on: 2022-02-01\",\n      \"includedPermissions\": [\n        \"compute.instances.start\",\n        \"compute.instances.stop\"\n      ],\n      \"stage\": \"GA\",\n      \"etag\": \"BwXW6kp9+Xc=\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gce3/json-dumps/iam-roles-get.json",
    "content": "{\n  \"roles\": [\n    {\n      \"name\": \"roles/logging.admin\",\n      \"title\": \"Logging Admin\",\n      \"description\": \"Access to all logging permissions, and dependent permissions.\",\n      \"includedPermissions\": [\n        \"logging.buckets.copyLogEntries\",\n        \"logging.buckets.create\",\n        \"logging.buckets.delete\",\n        \"logging.buckets.get\",\n        \"logging.buckets.list\",\n        \"logging.buckets.undelete\",\n        \"logging.buckets.update\",\n        \"logging.exclusions.create\",\n        \"logging.exclusions.delete\",\n        \"logging.exclusions.get\",\n        \"logging.exclusions.list\",\n        \"logging.exclusions.update\",\n        \"logging.fields.access\",\n        \"logging.links.create\",\n        \"logging.links.delete\",\n        \"logging.links.get\",\n        \"logging.links.list\",\n        \"logging.locations.get\",\n        \"logging.locations.list\",\n        \"logging.logEntries.create\",\n        \"logging.logEntries.download\",\n        \"logging.logEntries.list\",\n        \"logging.logEntries.route\",\n        \"logging.logMetrics.create\",\n        \"logging.logMetrics.delete\",\n        \"logging.logMetrics.get\",\n        \"logging.logMetrics.list\",\n        \"logging.logMetrics.update\",\n        \"logging.logServiceIndexes.list\",\n        \"logging.logServices.list\",\n        \"logging.logs.delete\",\n        \"logging.logs.list\",\n        \"logging.notificationRules.create\",\n        \"logging.notificationRules.delete\",\n        \"logging.notificationRules.get\",\n        \"logging.notificationRules.list\",\n        \"logging.notificationRules.update\",\n        \"logging.operations.cancel\",\n        \"logging.operations.get\",\n        \"logging.operations.list\",\n        \"logging.privateLogEntries.list\",\n        \"logging.queries.create\",\n        \"logging.queries.delete\",\n        \"logging.queries.deleteShared\",\n        \"logging.queries.get\",\n        \"logging.queries.getShared\",\n        \"logging.queries.list\",\n        \"logging.queries.listShared\",\n        \"logging.queries.share\",\n        \"logging.queries.update\",\n        \"logging.queries.updateShared\",\n        \"logging.queries.usePrivate\",\n        \"logging.settings.get\",\n        \"logging.settings.update\",\n        \"logging.sinks.create\",\n        \"logging.sinks.delete\",\n        \"logging.sinks.get\",\n        \"logging.sinks.list\",\n        \"logging.sinks.update\",\n        \"logging.usage.get\",\n        \"logging.views.access\",\n        \"logging.views.create\",\n        \"logging.views.delete\",\n        \"logging.views.get\",\n        \"logging.views.getIamPolicy\",\n        \"logging.views.list\",\n        \"logging.views.listLogs\",\n        \"logging.views.listResourceKeys\",\n        \"logging.views.listResourceValues\",\n        \"logging.views.setIamPolicy\",\n        \"logging.views.update\",\n        \"resourcemanager.projects.get\",\n        \"resourcemanager.projects.list\"\n      ],\n      \"stage\": \"GA\",\n      \"etag\": \"AA==\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gce3/json-dumps/iam-service-accounts.json",
    "content": "{\n  \"accounts\": [\n    {\n      \"displayName\": \"GKE Service Account\",\n      \"email\": \"gke-service-account@gcpdiag-gce3-aaaa.iam.gserviceaccount.com\",\n      \"etag\": \"MDEwMjE5MjA=\",\n      \"name\": \"projects/gcpdiag-gce3-aaaa/serviceAccounts/gke-service-account@gcpdiag-gce3-aaaa.iam.gserviceaccount.com\",\n      \"oauth2ClientId\": \"REDACTED\",\n      \"projectId\": \"gcpdiag-gce3-aaaa\",\n      \"uniqueId\": \"110841227101987288779\"\n    },\n    {\n      \"displayName\": \"App Engine default service account\",\n      \"email\": \"gcpdiag-gce3-aaaa@appspot.gserviceaccount.com\",\n      \"etag\": \"MDEwMjE5MjA=\",\n      \"name\": \"projects/gcpdiag-gce3-aaaa/serviceAccounts/gcpdiag-gce3-aaaa@appspot.gserviceaccount.com\",\n      \"oauth2ClientId\": \"REDACTED\",\n      \"projectId\": \"gcpdiag-gce3-aaaa\",\n      \"uniqueId\": \"103882289235316552707\"\n    },\n    {\n      \"displayName\": \"testsa\",\n      \"email\": \"testsa@gcpdiag-gce3-aaaa.iam.gserviceaccount.com\",\n      \"etag\": \"MDEwMjE5MjA=\",\n      \"name\": \"projects/gcpdiag-gce3-aaaa/serviceAccounts/testsa@gcpdiag-gce3-aaaa.iam.gserviceaccount.com\",\n      \"oauth2ClientId\": \"REDACTED\",\n      \"projectId\": \"gcpdiag-gce3-aaaa\",\n      \"uniqueId\": \"112596801924940881681\"\n    },\n    {\n      \"displayName\": \"Compute Engine default service account\",\n      \"email\": \"12345001-compute@developer.gserviceaccount.com\",\n      \"etag\": \"MDEwMjE5MjA=\",\n      \"name\": \"projects/gcpdiag-gce3-aaaa/serviceAccounts/12345001-compute@developer.gserviceaccount.com\",\n      \"oauth2ClientId\": \"REDACTED\",\n      \"projectId\": \"gcpdiag-gce3-aaaa\",\n      \"uniqueId\": \"108447634636837352106\"\n    },\n    {\n      \"email\": \"gce-diagnostics-extract-logs@gcpdiag-gce3-aaaa.iam.gserviceaccount.com\",\n      \"etag\": \"MDEwMjE5MjA=\",\n      \"name\": \"projects/gcpdiag-gce3-aaaa/serviceAccounts/gce-diagnostics-extract-logs@gcpdiag-gce3-aaaa.iam.gserviceaccount.com\",\n      \"oauth2ClientId\": \"REDACTED\",\n      \"projectId\": \"gcpdiag-gce3-aaaa\",\n      \"uniqueId\": \"108136933288815174505\"\n    },\n    {\n      \"displayName\": \"Service Account without monitoring or logging permissions\",\n      \"email\": \"no-logging-monitoring-perm@gcpdiag-gce3-aaaa.iam.gserviceaccount.com\",\n      \"etag\": \"MDEwMjE5MjA=\",\n      \"name\": \"projects/gcpdiag-gce3-aaaa/serviceAccounts/no-logging-monitoring-perm@gcpdiag-gce3-aaaa.iam.gserviceaccount.com\",\n      \"oauth2ClientId\": \"REDACTED\",\n      \"projectId\": \"gcpdiag-gce3-aaaa\",\n      \"uniqueId\": \"110872649499211133855\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gce3/json-dumps/logging-entries-1.json",
    "content": "{\n  \"entries\": [\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-12340002@container-engine-robot.iam.gserviceaccount.com\"\n        },\n        \"requestMetadata\": {\n          \"callerIp\": \"2002:ae8:2d45::\",\n          \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 GoogleContainerEngine/v1\"\n        },\n        \"serviceName\": \"compute.googleapis.com\",\n        \"methodName\": \"beta.compute.instanceGroupManagers.insert\",\n        \"resourceName\": \"projects/gcpdiag-gke1-aaaa/zones/europe-west1-b/instanceGroupManagers/gke-gke2-default-pool-11b6ca8e-grp\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instanceGroupManagers.insert\"\n        }\n      },\n      \"insertId\": \"-4pqrg9dartq\",\n      \"resource\": {\n        \"type\": \"gce_instance_group_manager\",\n        \"labels\": {\n          \"instance_group_manager_id\": \"8700821884762314590\",\n          \"instance_group_manager_name\": \"gke-gke2-default-pool-11b6ca8e-grp\",\n          \"project_id\": \"gcpdiag-gke1-aaaa\",\n          \"location\": \"europe-west1-b\"\n        }\n      },\n      \"timestamp\": \"2021-11-24T16:35:22.615295Z\",\n      \"severity\": \"NOTICE\",\n      \"logName\": \"projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1637771697161-5d18b703b865a-dccbda35-ad8629c7\",\n        \"producer\": \"compute.googleapis.com\",\n        \"last\": true\n      },\n      \"receiveTimestamp\": \"2021-11-24T16:35:23.172680503Z\"\n    },\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-12340002@container-engine-robot.iam.gserviceaccount.com\"\n        },\n        \"requestMetadata\": {\n          \"callerIp\": \"2002:ae8:2d45::\",\n          \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 GoogleContainerEngine/v1\"\n        },\n        \"serviceName\": \"compute.googleapis.com\",\n        \"methodName\": \"beta.compute.instanceGroupManagers.insert\",\n        \"resourceName\": \"projects/gcpdiag-gke1-aaaa/zones/europe-west1-d/instanceGroupManagers/gke-gke2-default-pool-98631c84-grp\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instanceGroupManagers.insert\"\n        }\n      },\n      \"insertId\": \"-nuwdobe1byj2\",\n      \"resource\": {\n        \"type\": \"gce_instance_group_manager\",\n        \"labels\": {\n          \"instance_group_manager_name\": \"gke-gke2-default-pool-98631c84-grp\",\n          \"project_id\": \"gcpdiag-gke1-aaaa\",\n          \"location\": \"europe-west1-d\",\n          \"instance_group_manager_id\": \"6471686162526492481\"\n        }\n      },\n      \"timestamp\": \"2021-11-24T16:35:10.014049Z\",\n      \"severity\": \"NOTICE\",\n      \"logName\": \"projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1637771693512-5d18b7003d60c-2f9aaeaf-535e4f63\",\n        \"producer\": \"compute.googleapis.com\",\n        \"last\": true\n      },\n      \"receiveTimestamp\": \"2021-11-24T16:35:10.306123333Z\"\n    },\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-12340002@container-engine-robot.iam.gserviceaccount.com\"\n        },\n        \"requestMetadata\": {\n          \"callerIp\": \"2002:ae8:2d45::\",\n          \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 GoogleContainerEngine/v1\"\n        },\n        \"serviceName\": \"compute.googleapis.com\",\n        \"methodName\": \"beta.compute.instanceGroupManagers.insert\",\n        \"resourceName\": \"projects/gcpdiag-gke1-aaaa/zones/europe-west1-c/instanceGroupManagers/gke-gke2-default-pool-5e5781dd-grp\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instanceGroupManagers.insert\"\n        }\n      },\n      \"insertId\": \"tf2uocd1kpc\",\n      \"resource\": {\n        \"type\": \"gce_instance_group_manager\",\n        \"labels\": {\n          \"instance_group_manager_name\": \"gke-gke2-default-pool-5e5781dd-grp\",\n          \"project_id\": \"gcpdiag-gke1-aaaa\",\n          \"instance_group_manager_id\": \"5205754198527039297\",\n          \"location\": \"europe-west1-c\"\n        }\n      },\n      \"timestamp\": \"2021-11-24T16:35:08.922507Z\",\n      \"severity\": \"NOTICE\",\n      \"logName\": \"projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1637771693418-5d18b700269e6-19f4d541-4d012584\",\n        \"producer\": \"compute.googleapis.com\",\n        \"last\": true\n      },\n      \"receiveTimestamp\": \"2021-11-24T16:35:09.484397071Z\"\n    },\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-12340002@container-engine-robot.iam.gserviceaccount.com\"\n        },\n        \"requestMetadata\": {\n          \"callerIp\": \"2002:a05:601a:1550::\",\n          \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 GoogleContainerEngine/v1\"\n        },\n        \"serviceName\": \"compute.googleapis.com\",\n        \"methodName\": \"beta.compute.instanceGroupManagers.insert\",\n        \"resourceName\": \"projects/gcpdiag-gke1-aaaa/zones/europe-west1-c/instanceGroupManagers/gke-gke3-default-pool-013fb293-grp\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instanceGroupManagers.insert\"\n        }\n      },\n      \"insertId\": \"tf2uocd1kou\",\n      \"resource\": {\n        \"type\": \"gce_instance_group_manager\",\n        \"labels\": {\n          \"project_id\": \"gcpdiag-gke1-aaaa\",\n          \"instance_group_manager_id\": \"3383879657688651622\",\n          \"location\": \"europe-west1-c\",\n          \"instance_group_manager_name\": \"gke-gke3-default-pool-013fb293-grp\"\n        }\n      },\n      \"timestamp\": \"2021-11-24T16:34:38.479723Z\",\n      \"severity\": \"NOTICE\",\n      \"logName\": \"projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1637771657193-5d18b6dd9a974-6dee9d9a-988a4f6c\",\n        \"producer\": \"compute.googleapis.com\",\n        \"last\": true\n      },\n      \"receiveTimestamp\": \"2021-11-24T16:34:39.479072691Z\"\n    },\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-12340002@container-engine-robot.iam.gserviceaccount.com\"\n        },\n        \"requestMetadata\": {\n          \"callerIp\": \"2002:a05:601a:1550::\",\n          \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 GoogleContainerEngine/v1\"\n        },\n        \"serviceName\": \"compute.googleapis.com\",\n        \"methodName\": \"beta.compute.instanceGroupManagers.insert\",\n        \"resourceName\": \"projects/gcpdiag-gke1-aaaa/zones/europe-west1-b/instanceGroupManagers/gke-gke3-default-pool-597c9ca2-grp\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instanceGroupManagers.insert\"\n        }\n      },\n      \"insertId\": \"-4pqrg9darqs\",\n      \"resource\": {\n        \"type\": \"gce_instance_group_manager\",\n        \"labels\": {\n          \"location\": \"europe-west1-b\",\n          \"instance_group_manager_id\": \"5404218744580069225\",\n          \"instance_group_manager_name\": \"gke-gke3-default-pool-597c9ca2-grp\",\n          \"project_id\": \"gcpdiag-gke1-aaaa\"\n        }\n      },\n      \"timestamp\": \"2021-11-24T16:34:37.484721Z\",\n      \"severity\": \"NOTICE\",\n      \"logName\": \"projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1637771652136-5d18b6d8c7d4a-678a3896-62f6d812\",\n        \"producer\": \"compute.googleapis.com\",\n        \"last\": true\n      },\n      \"receiveTimestamp\": \"2021-11-24T16:34:38.168845698Z\"\n    },\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-12340002@container-engine-robot.iam.gserviceaccount.com\"\n        },\n        \"requestMetadata\": {\n          \"callerIp\": \"2002:a05:601a:1550::\",\n          \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 GoogleContainerEngine/v1\"\n        },\n        \"serviceName\": \"compute.googleapis.com\",\n        \"methodName\": \"beta.compute.instanceGroupManagers.insert\",\n        \"resourceName\": \"projects/gcpdiag-gke1-aaaa/zones/europe-west1-d/instanceGroupManagers/gke-gke3-default-pool-c125bae7-grp\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instanceGroupManagers.insert\"\n        }\n      },\n      \"insertId\": \"-31olexd4rpi\",\n      \"resource\": {\n        \"type\": \"gce_instance_group_manager\",\n        \"labels\": {\n          \"instance_group_manager_name\": \"gke-gke3-default-pool-c125bae7-grp\",\n          \"location\": \"europe-west1-d\",\n          \"project_id\": \"gcpdiag-gke1-aaaa\",\n          \"instance_group_manager_id\": \"1403931912127633256\"\n        }\n      },\n      \"timestamp\": \"2021-11-24T16:34:35.389660Z\",\n      \"severity\": \"NOTICE\",\n      \"logName\": \"projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1637771654866-5d18b6db6263d-009ad0ed-4b71b356\",\n        \"producer\": \"compute.googleapis.com\",\n        \"last\": true\n      },\n      \"receiveTimestamp\": \"2021-11-24T16:34:35.872428070Z\"\n    },\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-12340002@container-engine-robot.iam.gserviceaccount.com\"\n        },\n        \"requestMetadata\": {\n          \"callerIp\": \"2002:a17:907:3ea4::\",\n          \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 GoogleContainerEngine/v1\"\n        },\n        \"serviceName\": \"compute.googleapis.com\",\n        \"methodName\": \"beta.compute.instanceGroupManagers.insert\",\n        \"resourceName\": \"projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-dc4a8b29-grp\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instanceGroupManagers.insert\"\n        }\n      },\n      \"insertId\": \"-tt9mudi768\",\n      \"resource\": {\n        \"type\": \"gce_instance_group_manager\",\n        \"labels\": {\n          \"location\": \"europe-west4-a\",\n          \"instance_group_manager_id\": \"318228385164940970\",\n          \"project_id\": \"gcpdiag-gke1-aaaa\",\n          \"instance_group_manager_name\": \"gke-gke1-default-pool-dc4a8b29-grp\"\n        }\n      },\n      \"timestamp\": \"2021-11-24T16:29:21.943390Z\",\n      \"severity\": \"NOTICE\",\n      \"logName\": \"projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1637771331527-5d18b5a706163-f238dbec-106555c8\",\n        \"producer\": \"compute.googleapis.com\",\n        \"last\": true\n      },\n      \"receiveTimestamp\": \"2021-11-24T16:29:22.710110506Z\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gce3/json-dumps/monitoring-query.json",
    "content": "{\n  \"timeSeriesDescriptor\": {\n    \"labelDescriptors\": [\n      {\n        \"key\": \"resource.zone\"\n      },\n      {\n        \"key\": \"metric.instance_name\"\n      }\n    ],\n    \"pointDescriptors\": [\n      {\n        \"key\": \"value_uptime_total_aggregate_mean\",\n        \"valueType\": \"DOUBLE\",\n        \"metricKind\": \"GAUGE\",\n        \"unit\": \"s\"\n      },\n      {\n        \"key\": \"value_uptime_total_aggregate_count\",\n        \"valueType\": \"INT64\",\n        \"metricKind\": \"GAUGE\",\n        \"unit\": \"1\"\n      }\n    ]\n  },\n  \"timeSeriesData\": [\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"europe-west3-b\"\n        },\n        {\n          \"stringValue\": \"instance-20240219-145338\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 8575322\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-05-28T21:00:53.403141Z\",\n            \"endTime\": \"2024-05-28T21:00:53.403141Z\"\n          }\n        },\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 8575022\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-05-28T20:55:53.403141Z\",\n            \"endTime\": \"2024-05-28T20:55:53.403141Z\"\n          }\n        }\n      ]\n    },\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"europe-west2-b\"\n        },\n        {\n          \"stringValue\": \"instance1\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 4143969\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-05-28T21:00:53.403141Z\",\n            \"endTime\": \"2024-05-28T21:00:53.403141Z\"\n          }\n        },\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 4143669\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-05-28T20:55:53.403141Z\",\n            \"endTime\": \"2024-05-28T20:55:53.403141Z\"\n          }\n        }\n      ]\n    },\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"europe-west2-b\"\n        },\n        {\n          \"stringValue\": \"rhel\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 556620\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-05-28T21:00:53.403141Z\",\n            \"endTime\": \"2024-05-28T21:00:53.403141Z\"\n          }\n        },\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 556320\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-05-28T20:55:53.403141Z\",\n            \"endTime\": \"2024-05-28T20:55:53.403141Z\"\n          }\n        }\n      ]\n    },\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"europe-west2-a\"\n        },\n        {\n          \"stringValue\": \"instance-20240325-194207\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 1150989\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-05-28T21:00:53.403141Z\",\n            \"endTime\": \"2024-05-28T21:00:53.403141Z\"\n          }\n        },\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 1150689\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-05-28T20:55:53.403141Z\",\n            \"endTime\": \"2024-05-28T20:55:53.403141Z\"\n          }\n        }\n      ]\n    },\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"europe-west2-a\"\n        },\n        {\n          \"stringValue\": \"faulty-opsagent-no-sa\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 11460\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-05-28T21:00:53.403141Z\",\n            \"endTime\": \"2024-05-28T21:00:53.403141Z\"\n          }\n        },\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 11160\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-05-28T20:55:53.403141Z\",\n            \"endTime\": \"2024-05-28T20:55:53.403141Z\"\n          }\n        }\n      ]\n    },\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"europe-west2-a\"\n        },\n        {\n          \"stringValue\": \"working-opsagent\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 11520\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-05-28T21:00:53.403141Z\",\n            \"endTime\": \"2024-05-28T21:00:53.403141Z\"\n          }\n        },\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 11220\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-05-28T20:55:53.403141Z\",\n            \"endTime\": \"2024-05-28T20:55:53.403141Z\"\n          }\n        }\n      ]\n    },\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"europe-west2-a\"\n        },\n        {\n          \"stringValue\": \"faulty-opsagent\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 10320\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-05-28T21:00:53.403141Z\",\n            \"endTime\": \"2024-05-28T21:00:53.403141Z\"\n          }\n        },\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 10020\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-05-28T20:55:53.403141Z\",\n            \"endTime\": \"2024-05-28T20:55:53.403141Z\"\n          }\n        }\n      ]\n    },\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"europe-west2-a\"\n        },\n        {\n          \"stringValue\": \"sles-12\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 7888851\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-05-28T21:00:53.403141Z\",\n            \"endTime\": \"2024-05-28T21:00:53.403141Z\"\n          }\n        },\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 7888551\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-05-28T20:55:53.403141Z\",\n            \"endTime\": \"2024-05-28T20:55:53.403141Z\"\n          }\n        }\n      ]\n    },\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"us-central1-c\"\n        },\n        {\n          \"stringValue\": \"gke-cluster-1-default-pool-2df647f2-ybkj\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 911237\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-05-28T21:00:53.403141Z\",\n            \"endTime\": \"2024-05-28T21:00:53.403141Z\"\n          }\n        },\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 910937\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-05-28T20:55:53.403141Z\",\n            \"endTime\": \"2024-05-28T20:55:53.403141Z\"\n          }\n        }\n      ]\n    },\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"us-central1-c\"\n        },\n        {\n          \"stringValue\": \"gke-cluster-1-default-pool-2df647f2-hl7o\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 911552\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-05-28T21:00:53.403141Z\",\n            \"endTime\": \"2024-05-28T21:00:53.403141Z\"\n          }\n        },\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 911252\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-05-28T20:55:53.403141Z\",\n            \"endTime\": \"2024-05-28T20:55:53.403141Z\"\n          }\n        }\n      ]\n    },\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"us-central1-c\"\n        },\n        {\n          \"stringValue\": \"gke-cluster-1-default-pool-2df647f2-ct8v\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 911406\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-05-28T21:00:53.403141Z\",\n            \"endTime\": \"2024-05-28T21:00:53.403141Z\"\n          }\n        },\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 911106\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-05-28T20:55:53.403141Z\",\n            \"endTime\": \"2024-05-28T20:55:53.403141Z\"\n          }\n        }\n      ]\n    },\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"us-central1-a\"\n        },\n        {\n          \"stringValue\": \"instance-20240523-113600\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 465680\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-05-28T21:00:53.403141Z\",\n            \"endTime\": \"2024-05-28T21:00:53.403141Z\"\n          }\n        },\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 465380\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-05-28T20:55:53.403141Z\",\n            \"endTime\": \"2024-05-28T20:55:53.403141Z\"\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gce3/json-dumps/org-constraint-compute.disableSerialPortAccess.json",
    "content": "{\n  \"booleanPolicy\": {},\n  \"constraint\": \"constraints/compute.disableSerialPortAccess\"\n}\n"
  },
  {
    "path": "test-data/gce3/json-dumps/org-constraint-compute.disableSerialPortLogging.json",
    "content": "{\n  \"booleanPolicy\": {},\n  \"constraint\": \"constraints/compute.disableSerialPortLogging\"\n}\n"
  },
  {
    "path": "test-data/gce3/json-dumps/org-constraint-compute.disableSshInBrowser.json",
    "content": "{\n  \"booleanPolicy\": {},\n  \"constraint\": \"constraints/compute.disableSshInBrowser\"\n}\n"
  },
  {
    "path": "test-data/gce3/json-dumps/org-constraint-compute.requireOsLogin.json",
    "content": "{\n  \"booleanPolicy\": {},\n  \"constraint\": \"constraints/compute.requireOsLogin\"\n}\n"
  },
  {
    "path": "test-data/gce3/json-dumps/org-constraint-compute.requireShieldedVm.json",
    "content": "{\n  \"booleanPolicy\": {},\n  \"constraint\": \"constraints/compute.requireShieldedVm\"\n}\n"
  },
  {
    "path": "test-data/gce3/json-dumps/org-constraint-iam.automaticIamGrantsForDefaultServiceAccounts.json",
    "content": "{\n  \"booleanPolicy\": {},\n  \"constraint\": \"constraints/iam.automaticIamGrantsForDefaultServiceAccounts\"\n}\n"
  },
  {
    "path": "test-data/gce3/json-dumps/org-constraint-iam.disableCrossProjectServiceAccountUsage.json",
    "content": "{\n  \"booleanPolicy\": {},\n  \"constraint\": \"constraints/iam.disableCrossProjectServiceAccountUsage\"\n}\n"
  },
  {
    "path": "test-data/gce3/json-dumps/project.json",
    "content": "{\n  \"name\": \"projects/12345001\",\n  \"parent\": \"folders/12345001\",\n  \"projectId\": \"gcpdiag-gce3-aaaa\",\n  \"state\": \"ACTIVE\",\n  \"displayName\": \"gcpdiag-gce3-aaaa\",\n  \"createTime\": \"2020-08-06T19:08:55.510Z\",\n  \"updateTime\": \"2023-12-06T05:00:08.691346Z\",\n  \"etag\": \"W/\\\"f7696af71a06f1fc\\\"\"\n}\n"
  },
  {
    "path": "test-data/gce3/json-dumps/services.json",
    "content": "{\n  \"services\": [\n    {\n      \"name\": \"projects/12345001/services/accesscontextmanager.googleapis.com\",\n      \"config\": {\n        \"name\": \"accesscontextmanager.googleapis.com\",\n        \"title\": \"Access Context Manager API\",\n        \"documentation\": {\n          \"summary\": \"An API for setting attribute based access control to requests to Google Cloud services.\\n\\u003caside class=\\\"warning\\\"\\u003e\\u003cb\\u003eWarning:\\u003c/b\\u003e Do not mix \\u003cb\\u003ev1alpha\\u003c/b\\u003e and \\u003cb\\u003ev1\\u003c/b\\u003e API usage in the same access policy. The v1alpha API supports new Access Context Manager features, which may have different attributes or behaviors that are not supported by v1. The practice of mixed API usage within a policy may result in the inability to update that policy, including any access levels or service perimeters belonging to it. It is not recommended to use both v1 and v1alpha for modifying policies with critical service perimeters. Modifications using v1alpha should be limited to policies with non-production/non-critical service perimeters.\\u003c/aside\\u003e\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"accesscontextmanager.googleapis.com/Location\",\n            \"displayName\": \"Access Context Manager Location\",\n            \"description\": \"Access Context Manager Location.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The organization number of the policy, such as organizations/5678.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location of the policy.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"accesscontextmanager.googleapis.com/AccessPolicyQuotaResource\",\n            \"displayName\": \"Access policy resource.\",\n            \"description\": \"Access policy resource.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container associated with the metric.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location for the quota.\"\n              },\n              {\n                \"key\": \"access_policy\",\n                \"description\": \"The access policy custom dimension.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"accesscontextmanager.googleapis.com/Location\",\n              \"metrics\": [\n                \"accesscontextmanager.googleapis.com/access_levels_per_policy\",\n                \"accesscontextmanager.googleapis.com/perimeter_egress_policies_per_policy\",\n                \"accesscontextmanager.googleapis.com/perimeter_ingress_policies_per_policy\",\n                \"accesscontextmanager.googleapis.com/perimeter_protected_resources_per_policy\",\n                \"accesscontextmanager.googleapis.com/perimeters_per_policy\",\n                \"accesscontextmanager.googleapis.com/quota/access_levels_per_policy/exceeded\",\n                \"accesscontextmanager.googleapis.com/quota/perimeter_egress_policies_per_policy/exceeded\",\n                \"accesscontextmanager.googleapis.com/quota/perimeter_ingress_policies_per_policy/exceeded\",\n                \"accesscontextmanager.googleapis.com/quota/perimeter_members_per_policy/exceeded\",\n                \"accesscontextmanager.googleapis.com/quota/perimeter_protected_resources_per_policy/exceeded\",\n                \"accesscontextmanager.googleapis.com/quota/perimeters_per_policy/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"accesscontextmanager.googleapis.com/AccessPolicyQuotaResource\",\n              \"metrics\": [\n                \"accesscontextmanager.googleapis.com/quota/level_resources_per_policy/exceeded\",\n                \"accesscontextmanager.googleapis.com/quota/level_vpc_networks_per_policy/exceeded\",\n                \"accesscontextmanager.googleapis.com/quota/perimeter_protected_vpc_networks_per_policy/exceeded\",\n                \"accesscontextmanager.googleapis.com/quota/rule_attributes_per_policy/exceeded\",\n                \"accesscontextmanager.googleapis.com/quota/rule_resources_per_policy/exceeded\",\n                \"accesscontextmanager.googleapis.com/quota/rule_vpc_networks_per_policy/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"accesscontextmanager.googleapis.com/Location\",\n              \"metrics\": [\n                \"accesscontextmanager.googleapis.com/quota/access_levels_per_policy/limit\",\n                \"accesscontextmanager.googleapis.com/quota/access_levels_per_policy/usage\",\n                \"accesscontextmanager.googleapis.com/quota/perimeter_egress_policies_per_policy/limit\",\n                \"accesscontextmanager.googleapis.com/quota/perimeter_egress_policies_per_policy/usage\",\n                \"accesscontextmanager.googleapis.com/quota/perimeter_ingress_policies_per_policy/limit\",\n                \"accesscontextmanager.googleapis.com/quota/perimeter_ingress_policies_per_policy/usage\",\n                \"accesscontextmanager.googleapis.com/quota/perimeter_members_per_policy/limit\",\n                \"accesscontextmanager.googleapis.com/quota/perimeter_members_per_policy/usage\",\n                \"accesscontextmanager.googleapis.com/quota/perimeter_protected_resources_per_policy/limit\",\n                \"accesscontextmanager.googleapis.com/quota/perimeter_protected_resources_per_policy/usage\",\n                \"accesscontextmanager.googleapis.com/quota/perimeters_per_policy/limit\",\n                \"accesscontextmanager.googleapis.com/quota/perimeters_per_policy/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"accesscontextmanager.googleapis.com/AccessPolicyQuotaResource\",\n              \"metrics\": [\n                \"accesscontextmanager.googleapis.com/quota/level_resources_per_policy/limit\",\n                \"accesscontextmanager.googleapis.com/quota/level_resources_per_policy/usage\",\n                \"accesscontextmanager.googleapis.com/quota/level_vpc_networks_per_policy/limit\",\n                \"accesscontextmanager.googleapis.com/quota/level_vpc_networks_per_policy/usage\",\n                \"accesscontextmanager.googleapis.com/quota/perimeter_protected_vpc_networks_per_policy/limit\",\n                \"accesscontextmanager.googleapis.com/quota/perimeter_protected_vpc_networks_per_policy/usage\",\n                \"accesscontextmanager.googleapis.com/quota/rule_attributes_per_policy/limit\",\n                \"accesscontextmanager.googleapis.com/quota/rule_attributes_per_policy/usage\",\n                \"accesscontextmanager.googleapis.com/quota/rule_resources_per_policy/limit\",\n                \"accesscontextmanager.googleapis.com/quota/rule_resources_per_policy/usage\",\n                \"accesscontextmanager.googleapis.com/quota/rule_vpc_networks_per_policy/limit\",\n                \"accesscontextmanager.googleapis.com/quota/rule_vpc_networks_per_policy/usage\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345001\"\n    },\n    {\n      \"name\": \"projects/12345001/services/aiplatform.googleapis.com\",\n      \"config\": {\n        \"name\": \"aiplatform.googleapis.com\",\n        \"title\": \"Vertex AI API\",\n        \"documentation\": {\n          \"summary\": \"Train high-quality custom machine learning models with minimal machine learning expertise and effort.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"aiplatform.googleapis.com/DeploymentResourcePool\",\n            \"displayName\": \"Vertex AI Deployment Resource Pool\",\n            \"description\": \"A Vertex AI Deployment Resource Pool.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP Project owning the Deployment Resource Pool.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The region in which the service is running.\"\n              },\n              {\n                \"key\": \"deployment_resource_pool_id\",\n                \"description\": \"The ID of the Deployment Resource Pool.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"aiplatform.googleapis.com/Endpoint\",\n            \"displayName\": \"Vertex AI Endpoint\",\n            \"description\": \"A Vertex AI API Endpoint where Models are deployed into it.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP Project owning the Endpoint.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The region in which the service is running.\"\n              },\n              {\n                \"key\": \"endpoint_id\",\n                \"description\": \"The ID of the Endpoint.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"aiplatform.googleapis.com/ServingCluster\",\n            \"displayName\": \"Vertex AI Serving Cluster\",\n            \"description\": \"A Vertex AI Serving Cluster.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP User Project owning the cluster.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The region in which the service is running.\"\n              },\n              {\n                \"key\": \"cluster\",\n                \"description\": \"The GKE name of the cluster.\"\n              }\n            ],\n            \"launchStage\": \"PRELAUNCH\"\n          },\n          {\n            \"type\": \"aiplatform.googleapis.com/Featurestore\",\n            \"displayName\": \"Vertex AI Feature Store\",\n            \"description\": \"A Vertex AI Feature Store.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP Project owning the Featurestore.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The region in which the service is running.\"\n              },\n              {\n                \"key\": \"featurestore_id\",\n                \"description\": \"The ID of the Featurestore.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"aiplatform.googleapis.com/FeatureOnlineStore\",\n            \"displayName\": \"Vertex AI Feature Online Store\",\n            \"description\": \"A Vertex AI Feature Online Store.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP Project owning the FeatureOnlineStore.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The region in which the service is running.\"\n              },\n              {\n                \"key\": \"feature_online_store_id\",\n                \"description\": \"The ID of the Feature Online Store.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"aiplatform.googleapis.com/Index\",\n            \"displayName\": \"Matching Engine Index\",\n            \"description\": \"An Index built through the cloud Matching Engine service.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP Project owning the Index.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The region in which the service is running.\"\n              },\n              {\n                \"key\": \"index_id\",\n                \"description\": \"The ID of the Index.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"aiplatform.googleapis.com/IndexEndpoint\",\n            \"displayName\": \"Matching Engine Index Endpoint\",\n            \"description\": \"An Endpoint to which Matching Engine Indexes are deployed.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP Project owning the Index.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The region in which the service is running.\"\n              },\n              {\n                \"key\": \"index_endpoint_id\",\n                \"description\": \"The ID of the index endpoint.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"aiplatform.googleapis.com/PipelineJob\",\n            \"displayName\": \"Vertex Pipelines Job\",\n            \"description\": \"A Vertex Pipelines Job.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as \\\"my-project\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The region in which the service is running.\"\n              },\n              {\n                \"key\": \"pipeline_job_id\",\n                \"description\": \"The ID of the PipelineJob.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"aiplatform.googleapis.com/Location\",\n            \"displayName\": \"Location\",\n            \"description\": \"A Google Cloud Project and region where a job is running.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as \\\"my-project\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The region in which the service is running.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"aiplatform.googleapis.com/Model\",\n            \"displayName\": \"Vertex AI Model\",\n            \"description\": \"A Vertex AI Model.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP Project owning the Model.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The region in which the service is running.\"\n              },\n              {\n                \"key\": \"model\",\n                \"description\": \"The identifier of the Model.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"aiplatform.googleapis.com/NotebookRuntime\",\n            \"displayName\": \"Vertex AI Notebook Runtime\",\n            \"description\": \"A Vertex AI Notebook Runtime.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP Project owning the Notebook Runtime.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The region in which the notebook exists.\"\n              },\n              {\n                \"key\": \"notebook_runtime_id\",\n                \"description\": \"The identifier of the Notebook Runtime.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"aiplatform.googleapis.com/PublisherModel\",\n            \"displayName\": \"Vertex AI Model Garden Publisher Model\",\n            \"description\": \"A Vertex AI Model Garden Publisher Model.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP Project owning the Endpoint.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The region in which the service is running.\"\n              },\n              {\n                \"key\": \"publisher\",\n                \"description\": \"The publisher of the model.\"\n              },\n              {\n                \"key\": \"model_user_id\",\n                \"description\": \"The resource ID of the PublisherModel.\"\n              },\n              {\n                \"key\": \"model_version_id\",\n                \"description\": \"The version ID of the PublisherModel.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"aiplatform.googleapis.com/Endpoint\",\n              \"metrics\": [\n                \"aiplatform.googleapis.com/prediction/internal/online/cmle_backend_latencies\",\n                \"aiplatform.googleapis.com/prediction/internal/online/component_latencies\",\n                \"aiplatform.googleapis.com/prediction/internal/online/core_infra_latencies\",\n                \"aiplatform.googleapis.com/prediction/internal/online/custom/istio_request_duration_milliseconds\",\n                \"aiplatform.googleapis.com/prediction/internal/online/custom/istio_requests_total\",\n                \"aiplatform.googleapis.com/prediction/internal/online/custom/tfe_ie/tf_exit_total\",\n                \"aiplatform.googleapis.com/prediction/internal/online/custom/tfe_ie/tf_launch_total\",\n                \"aiplatform.googleapis.com/prediction/internal/online/custom/dynamic_loading/model_load_latencies\",\n                \"aiplatform.googleapis.com/prediction/internal/online/custom/dynamic_loading/model_load_count\",\n                \"aiplatform.googleapis.com/prediction/internal/online/custom/dynamic_loading/model_cache_lookup_count\",\n                \"aiplatform.googleapis.com/prediction/internal/online/custom/dynamic_loading/model_states\",\n                \"aiplatform.googleapis.com/prediction/internal/online/directpath_backend_latencies\",\n                \"aiplatform.googleapis.com/prediction/internal/online/harpoon_backend_latencies\",\n                \"aiplatform.googleapis.com/prediction/internal/online/llm_backend_latencies\",\n                \"aiplatform.googleapis.com/prediction/internal/online/internal_error_count\",\n                \"aiplatform.googleapis.com/prediction/internal/online/prediction_latencies\",\n                \"aiplatform.googleapis.com/prediction/internal/online/request_byte_count\",\n                \"aiplatform.googleapis.com/prediction/internal/online/response_count\",\n                \"aiplatform.googleapis.com/prediction/internal/online/concurrent_requests\",\n                \"aiplatform.googleapis.com/prediction/internal/online/throttled_request_count\",\n                \"aiplatform.googleapis.com/prediction/internal/online/resource_usage_error_count\",\n                \"aiplatform.googleapis.com/prediction/internal/online/lm_response_count\",\n                \"aiplatform.googleapis.com/prediction/internal/online/lm_internal_error_count\",\n                \"aiplatform.googleapis.com/prediction/internal/online/lm_internal_input_token_count\",\n                \"aiplatform.googleapis.com/prediction/internal/online/lm_internal_input_character_count\",\n                \"aiplatform.googleapis.com/prediction/internal/online/lm_internal_output_token_count\",\n                \"aiplatform.googleapis.com/prediction/internal/online/lm_internal_output_character_count\",\n                \"aiplatform.googleapis.com/prediction/internal/online/lm_prediction_latencies\",\n                \"aiplatform.googleapis.com/prediction/internal/online/lvm_request_count\",\n                \"aiplatform.googleapis.com/prediction/online/streaming_message_overhead_latencies\",\n                \"aiplatform.googleapis.com/prediction/online/streaming_message_count\",\n                \"aiplatform.googleapis.com/prediction/online/streaming_message_bytes_count\",\n                \"aiplatform.googleapis.com/prediction/online/open_streams\",\n                \"aiplatform.googleapis.com/prediction/online/error_count\",\n                \"aiplatform.googleapis.com/prediction/online/prediction_count\",\n                \"aiplatform.googleapis.com/prediction/online/prediction_latencies\",\n                \"aiplatform.googleapis.com/prediction/online/response_count\",\n                \"aiplatform.googleapis.com/prediction/online/replicas\",\n                \"aiplatform.googleapis.com/prediction/online/target_replicas\",\n                \"aiplatform.googleapis.com/prediction/internal/online/cpu/utilization\",\n                \"aiplatform.googleapis.com/prediction/internal/online/memory/bytes_used\",\n                \"aiplatform.googleapis.com/prediction/internal/online/accelerator/duty_cycle\",\n                \"aiplatform.googleapis.com/prediction/internal/online/accelerator/memory/bytes_used\",\n                \"aiplatform.googleapis.com/prediction/internal/online/network/received_bytes_count\",\n                \"aiplatform.googleapis.com/prediction/internal/online/network/sent_bytes_count\",\n                \"aiplatform.googleapis.com/prediction/internal/online/l2_operator_reconcile_latencies\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"aiplatform.googleapis.com/DeploymentResourcePool\",\n              \"metrics\": [\n                \"aiplatform.googleapis.com/prediction/online/deployment_resource_pool/replicas\",\n                \"aiplatform.googleapis.com/prediction/online/deployment_resource_pool/target_replicas\",\n                \"aiplatform.googleapis.com/prediction/online/deployment_resource_pool/cpu/utilization\",\n                \"aiplatform.googleapis.com/prediction/online/deployment_resource_pool/memory/bytes_used\",\n                \"aiplatform.googleapis.com/prediction/online/deployment_resource_pool/accelerator/duty_cycle\",\n                \"aiplatform.googleapis.com/prediction/online/deployment_resource_pool/accelerator/memory/bytes_used\",\n                \"aiplatform.googleapis.com/prediction/online/deployment_resource_pool/network/received_bytes_count\",\n                \"aiplatform.googleapis.com/prediction/online/deployment_resource_pool/network/sent_bytes_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"aiplatform.googleapis.com/IndexEndpoint\",\n              \"metrics\": [\n                \"aiplatform.googleapis.com/scann/query/request_count\",\n                \"aiplatform.googleapis.com/scann/query/latencies\",\n                \"aiplatform.googleapis.com/scann/internal/query/latency_bucketized\",\n                \"aiplatform.googleapis.com/matching_engine/query/request_count\",\n                \"aiplatform.googleapis.com/matching_engine/query/query_count\",\n                \"aiplatform.googleapis.com/matching_engine/query/request_count_v2\",\n                \"aiplatform.googleapis.com/matching_engine/internal/query/request_count\",\n                \"aiplatform.googleapis.com/matching_engine/query/latencies\",\n                \"aiplatform.googleapis.com/matching_engine/query/query_latencies\",\n                \"aiplatform.googleapis.com/matching_engine/internal/query/latency_bucketized\",\n                \"aiplatform.googleapis.com/matching_engine/internal/query/match_server_request_count\",\n                \"aiplatform.googleapis.com/matching_engine/internal/query/match_server_latencies\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"aiplatform.googleapis.com/IndexEndpoint\",\n              \"metrics\": [\n                \"aiplatform.googleapis.com/scann/current_shards\",\n                \"aiplatform.googleapis.com/scann/current_replicas\",\n                \"aiplatform.googleapis.com/matching_engine/current_shards\",\n                \"aiplatform.googleapis.com/matching_engine/current_replicas\",\n                \"aiplatform.googleapis.com/matching_engine/internal/current_replicas\",\n                \"aiplatform.googleapis.com/matching_engine/cpu/request_cores\",\n                \"aiplatform.googleapis.com/matching_engine/cpu/request_utilization\",\n                \"aiplatform.googleapis.com/matching_engine/memory/used_bytes\",\n                \"aiplatform.googleapis.com/matching_engine/memory/request_bytes\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"aiplatform.googleapis.com/Index\",\n              \"metrics\": [\n                \"aiplatform.googleapis.com/matching_engine/stream_update/datapoint_count\",\n                \"aiplatform.googleapis.com/matching_engine/stream_update/latency\",\n                \"aiplatform.googleapis.com/matching_engine/stream_update/latencies\",\n                \"aiplatform.googleapis.com/matching_engine/internal/stream_update/catchup_latency\",\n                \"aiplatform.googleapis.com/matching_engine/stream_update/request_count\",\n                \"aiplatform.googleapis.com/matching_engine/index/size\",\n                \"aiplatform.googleapis.com/matching_engine/index/embeddings\",\n                \"aiplatform.googleapis.com/matching_engine/index/last_batch_update_time\",\n                \"aiplatform.googleapis.com/matching_engine/index/last_compaction_time\",\n                \"aiplatform.googleapis.com/matching_engine/report_index_shard_stats_to_gcs/request_count\",\n                \"aiplatform.googleapis.com/matching_engine/empty_index/request_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"aiplatform.googleapis.com/Featurestore\",\n              \"metrics\": [\n                \"aiplatform.googleapis.com/featurestore/online_entities_updated\",\n                \"aiplatform.googleapis.com/featurestore/online_serving/request_count\",\n                \"aiplatform.googleapis.com/featurestore/online_serving/latencies\",\n                \"aiplatform.googleapis.com/featurestore/online_serving/response_size\",\n                \"aiplatform.googleapis.com/featurestore/online_serving/request_bytes_count\",\n                \"aiplatform.googleapis.com/featurestore/streaming_write/offline_processed_count\",\n                \"aiplatform.googleapis.com/featurestore/streaming_write/offline_write_delays\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"aiplatform.googleapis.com/Featurestore\",\n              \"metrics\": [\n                \"aiplatform.googleapis.com/featurestore/storage/stored_bytes\",\n                \"aiplatform.googleapis.com/featurestore/storage/billable_processed_bytes\",\n                \"aiplatform.googleapis.com/featurestore/node_count\",\n                \"aiplatform.googleapis.com/featurestore/cpu_load\",\n                \"aiplatform.googleapis.com/featurestore/cpu_load_hottest_node\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"aiplatform.googleapis.com/FeatureOnlineStore\",\n              \"metrics\": [\n                \"aiplatform.googleapis.com/featureonlinestore/online_serving/request_count\",\n                \"aiplatform.googleapis.com/featureonlinestore/online_serving/serving_bytes_count\",\n                \"aiplatform.googleapis.com/featureonlinestore/online_serving/serving_latencies\",\n                \"aiplatform.googleapis.com/featureonlinestore/serving_data_ages\",\n                \"aiplatform.googleapis.com/featureonlinestore/serving_data_by_sync_time\",\n                \"aiplatform.googleapis.com/feature_online_store/online_serving/internal/router/serving_latencies\",\n                \"aiplatform.googleapis.com/feature_online_store/online_serving/internal/leaf/request_count\",\n                \"aiplatform.googleapis.com/feature_online_store/online_serving/internal/leaf/serving_bytes_count\",\n                \"aiplatform.googleapis.com/feature_online_store/online_serving/internal/leaf/latencies\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"aiplatform.googleapis.com/FeatureOnlineStore\",\n              \"metrics\": [\n                \"aiplatform.googleapis.com/featureonlinestore/storage/stored_bytes\",\n                \"aiplatform.googleapis.com/featureonlinestore/storage/bigtable_cpu_load\",\n                \"aiplatform.googleapis.com/featureonlinestore/storage/bigtable_cpu_load_hottest_node\",\n                \"aiplatform.googleapis.com/featureonlinestore/storage/bigtable_nodes\",\n                \"aiplatform.googleapis.com/featureonlinestore/storage/optimized_nodes\",\n                \"aiplatform.googleapis.com/featureonlinestore/running_sync\",\n                \"aiplatform.googleapis.com/feature_online_store/online_serving/internal/router/memory/request_bytes\",\n                \"aiplatform.googleapis.com/feature_online_store/online_serving/internal/router/memory/used_bytes\",\n                \"aiplatform.googleapis.com/feature_online_store/online_serving/internal/router/cpu/request_utilization\",\n                \"aiplatform.googleapis.com/feature_online_store/online_serving/internal/router/cpu/request_cores\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"aiplatform.googleapis.com/Location\",\n              \"metrics\": [\n                \"aiplatform.googleapis.com/generate_content_requests_per_minute_per_project_per_base_model\",\n                \"aiplatform.googleapis.com/online_prediction_requests_per_base_model\",\n                \"aiplatform.googleapis.com/quota/generate_content_requests_per_day_per_project_per_base_model/exceeded\",\n                \"aiplatform.googleapis.com/quota/generate_content_requests_per_day_per_project_per_base_model/usage\",\n                \"aiplatform.googleapis.com/quota/generate_content_requests_per_minute_per_project_per_base_model/exceeded\",\n                \"aiplatform.googleapis.com/quota/generate_content_requests_per_minute_per_project_per_base_model/usage\",\n                \"aiplatform.googleapis.com/quota/online_prediction_dedicated_requests_per_base_model_version/exceeded\",\n                \"aiplatform.googleapis.com/quota/online_prediction_dedicated_requests_per_base_model_version/usage\",\n                \"aiplatform.googleapis.com/quota/online_prediction_dedicated_tokens_per_base_model_version/exceeded\",\n                \"aiplatform.googleapis.com/quota/online_prediction_dedicated_tokens_per_base_model_version/usage\",\n                \"aiplatform.googleapis.com/quota/online_prediction_output_tokens_per_minute_per_base_model/exceeded\",\n                \"aiplatform.googleapis.com/quota/online_prediction_output_tokens_per_minute_per_base_model/usage\",\n                \"aiplatform.googleapis.com/quota/online_prediction_requests_per_base_model/exceeded\",\n                \"aiplatform.googleapis.com/quota/online_prediction_requests_per_base_model/usage\",\n                \"aiplatform.googleapis.com/quota/online_prediction_requests_per_user_per_base_model/exceeded\",\n                \"aiplatform.googleapis.com/quota/online_prediction_requests_per_user_per_base_model/usage\",\n                \"aiplatform.googleapis.com/quota/shared_generate_content_requests_per_day_per_base_model/exceeded\",\n                \"aiplatform.googleapis.com/quota/shared_generate_content_requests_per_day_per_base_model/usage\",\n                \"aiplatform.googleapis.com/quota/shared_generate_content_requests_per_minute_per_base_model/exceeded\",\n                \"aiplatform.googleapis.com/quota/shared_generate_content_requests_per_minute_per_base_model/usage\",\n                \"aiplatform.googleapis.com/quota/shared_online_prediction_requests_per_base_model/exceeded\",\n                \"aiplatform.googleapis.com/quota/shared_online_prediction_requests_per_base_model/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"aiplatform.googleapis.com/Location\",\n              \"metrics\": [\n                \"aiplatform.googleapis.com/executing_vertexai_pipeline_jobs\",\n                \"aiplatform.googleapis.com/executing_vertexai_pipeline_tasks\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"aiplatform.googleapis.com/Model\",\n              \"metrics\": [\n                \"aiplatform.googleapis.com/model_monitoring/feature_drift_deviation\",\n                \"aiplatform.googleapis.com/model_monitoring/prediction_output_drift_deviation\",\n                \"aiplatform.googleapis.com/model_monitoring/feature_attribution_deviation\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"aiplatform.googleapis.com/PipelineJob\",\n              \"metrics\": [\n                \"aiplatform.googleapis.com/pipelinejob/duration\",\n                \"aiplatform.googleapis.com/pipelinejob/task_completed_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"aiplatform.googleapis.com/PublisherModel\",\n              \"metrics\": [\n                \"aiplatform.googleapis.com/publisher/online_serving/model_invocation_count\",\n                \"aiplatform.googleapis.com/publisher/online_serving/model_invocation_latencies\",\n                \"aiplatform.googleapis.com/publisher/online_serving/first_token_latencies\",\n                \"aiplatform.googleapis.com/publisher/online_serving/tokens\",\n                \"aiplatform.googleapis.com/publisher/online_serving/token_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"aiplatform.googleapis.com/ServingCluster\",\n              \"metrics\": [\n                \"aiplatform.googleapis.com/serving/controlplane/operator_reconcile_latency_seconds\",\n                \"aiplatform.googleapis.com/serving/controlplane/operator_workqueue_unfinished_work_seconds\",\n                \"aiplatform.googleapis.com/serving/controlplane/operator_workqueue_depth\",\n                \"aiplatform.googleapis.com/serving/controlplane/operator_version\",\n                \"aiplatform.googleapis.com/serving/controlplane/release_stage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"aiplatform.googleapis.com/NotebookRuntime\",\n              \"metrics\": [\n                \"aiplatform.googleapis.com/colab/internal/runtime/startup_duration\",\n                \"aiplatform.googleapis.com/colab/internal/runtime/health\",\n                \"aiplatform.googleapis.com/colab/internal/runtime/image_version\",\n                \"aiplatform.googleapis.com/colab/internal/runtime/uptime\",\n                \"aiplatform.googleapis.com/colab/internal/runtime/cpu/usage_time\",\n                \"aiplatform.googleapis.com/colab/internal/runtime/memory/limit\",\n                \"aiplatform.googleapis.com/colab/internal/runtime/memory/usage\",\n                \"aiplatform.googleapis.com/colab/internal/runtime/container/memory/usage\",\n                \"aiplatform.googleapis.com/colab/internal/runtime/disk/used_bytes\",\n                \"aiplatform.googleapis.com/colab/internal/runtime/disk/reserved_bytes\",\n                \"aiplatform.googleapis.com/colab/internal/runtime/disk/free_bytes\",\n                \"aiplatform.googleapis.com/colab/internal/runtime/network/received_bytes_count\",\n                \"aiplatform.googleapis.com/colab/internal/runtime/network/sent_bytes_count\",\n                \"aiplatform.googleapis.com/colab/internal/runtime/container/restart_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"aiplatform.googleapis.com/Location\",\n              \"metrics\": [\n                \"aiplatform.googleapis.com/quota/generate_content_requests_per_day_per_project_per_base_model/limit\",\n                \"aiplatform.googleapis.com/quota/generate_content_requests_per_minute_per_project_per_base_model/limit\",\n                \"aiplatform.googleapis.com/quota/online_prediction_dedicated_requests_per_base_model_version/limit\",\n                \"aiplatform.googleapis.com/quota/online_prediction_dedicated_tokens_per_base_model_version/limit\",\n                \"aiplatform.googleapis.com/quota/online_prediction_output_tokens_per_minute_per_base_model/limit\",\n                \"aiplatform.googleapis.com/quota/online_prediction_requests_per_base_model/limit\",\n                \"aiplatform.googleapis.com/quota/online_prediction_requests_per_user_per_base_model/limit\",\n                \"aiplatform.googleapis.com/quota/shared_generate_content_requests_per_day_per_base_model/limit\",\n                \"aiplatform.googleapis.com/quota/shared_generate_content_requests_per_minute_per_base_model/limit\",\n                \"aiplatform.googleapis.com/quota/shared_online_prediction_requests_per_base_model/limit\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345001\"\n    },\n    {\n      \"name\": \"projects/12345001/services/anthos.googleapis.com\",\n      \"config\": {\n        \"name\": \"anthos.googleapis.com\",\n        \"title\": \"Anthos API\",\n        \"documentation\": {\n          \"summary\": \"Anthos is a managed hybrid cloud solution\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345001\"\n    },\n    {\n      \"name\": \"projects/12345001/services/anthosconfigmanagement.googleapis.com\",\n      \"config\": {\n        \"name\": \"anthosconfigmanagement.googleapis.com\",\n        \"title\": \"Anthos Config Management API\",\n        \"documentation\": {\n          \"summary\": \"Anthos Config Management\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345001\"\n    },\n    {\n      \"name\": \"projects/12345001/services/anthospolicycontroller.googleapis.com\",\n      \"config\": {\n        \"name\": \"anthospolicycontroller.googleapis.com\",\n        \"title\": \"Anthos Policy Controller API\",\n        \"documentation\": {\n          \"summary\": \"Anthos Policy Controller\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345001\"\n    },\n    {\n      \"name\": \"projects/12345001/services/apigee.googleapis.com\",\n      \"config\": {\n        \"name\": \"apigee.googleapis.com\",\n        \"title\": \"Apigee API\",\n        \"documentation\": {\n          \"summary\": \"Use the Apigee API to programmatically develop and manage APIs\\nwith a set of RESTful operations. Develop and secure API proxies,\\ndeploy and undeploy API proxy revisions, monitor APIs, configure\\nenvironments, manage users, and more.\\n\\nNote: This product is available as a free trial\\nfor a time period of 60 days.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"apigee.googleapis.com/Proxy\",\n            \"displayName\": \"Apigee Proxy\",\n            \"description\": \"Monitored resource for Apigee API proxy.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP resource container associated with this resource, such as \\\"my-project\\\".\"\n              },\n              {\n                \"key\": \"org\",\n                \"description\": \"The identifier for the Apigee organization.\"\n              },\n              {\n                \"key\": \"env\",\n                \"description\": \"The identifier for the Apigee environment.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location where the Apigee runtime plane is provisioned.\"\n              },\n              {\n                \"key\": \"proxy_name\",\n                \"description\": \"The name of Apigee proxy deployed to the environment.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"apigee.googleapis.com/InternalProxy\",\n            \"displayName\": \"Apigee Internal Proxy\",\n            \"description\": \"A proxy deployed in Apigee.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP resource container associated with this resource, such as \\\"my-project\\\".\"\n              },\n              {\n                \"key\": \"org\",\n                \"description\": \"The identifier for the Apigee organization.\"\n              },\n              {\n                \"key\": \"env\",\n                \"description\": \"The identifier for the Apigee environment.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location where the Apigee infrastructure is provisioned.\"\n              },\n              {\n                \"key\": \"proxy_name\",\n                \"description\": \"The name of Apigee proxy deployed to the environment.\"\n              },\n              {\n                \"key\": \"runtime_version\",\n                \"description\": \"Version of the Apigee Runtime for the proxy.\"\n              },\n              {\n                \"key\": \"instance_id\",\n                \"description\": \"Instance ID of the Apigee application.\"\n              },\n              {\n                \"key\": \"pod_uid\",\n                \"description\": \"Unique identifier of the Kubernetes pod.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"apigee.googleapis.com/ProxyV2\",\n            \"displayName\": \"Apigee proxy (v2)\",\n            \"description\": \"Monitored resource for Apigee API proxy (v2).\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP project ID that writes to this monitored resource.\"\n              },\n              {\n                \"key\": \"org\",\n                \"description\": \"An organization is a container for all the objects in an Apigee account.\"\n              },\n              {\n                \"key\": \"env\",\n                \"description\": \"An environment is a runtime execution context for the proxies in an organization.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location where the Apigee infrastructure is provisioned.\"\n              },\n              {\n                \"key\": \"proxy_name\",\n                \"description\": \"A proxy is your interface to developers that want to use your backend services.\"\n              },\n              {\n                \"key\": \"runtime_version\",\n                \"description\": \"Version of the Apigee Runtime for the proxy.\"\n              },\n              {\n                \"key\": \"instance_id\",\n                \"description\": \"Instance ID of the Apigee application.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"apigee.googleapis.com/Environment\",\n            \"displayName\": \"Apigee environment\",\n            \"description\": \"Monitored resource for Apigee environment.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP project ID that writes to this monitored resource.\"\n              },\n              {\n                \"key\": \"org\",\n                \"description\": \"An organization is a container for all the objects in an Apigee account.\"\n              },\n              {\n                \"key\": \"env\",\n                \"description\": \"An environment is a runtime execution context for the proxies in an organization.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location where the Apigee infrastructure is provisioned.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"apigee.googleapis.com/TargetV2\",\n            \"displayName\": \"Apigee target (v2)\",\n            \"description\": \"Monitored resource for Apigee target (v2) with the host endpoint label.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP project ID that writes to this monitored resource.\"\n              },\n              {\n                \"key\": \"org\",\n                \"description\": \"An organization is a container for all the objects in an Apigee account.\"\n              },\n              {\n                \"key\": \"env\",\n                \"description\": \"An environment is a runtime execution context for the proxies in an organization.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location where the Apigee infrastructure is provisioned.\"\n              },\n              {\n                \"key\": \"proxy_name\",\n                \"description\": \"A proxy is your interface to developers that want to use your backend services.\"\n              },\n              {\n                \"key\": \"type\",\n                \"description\": \"Type of target such as service callout.\"\n              },\n              {\n                \"key\": \"endpoint\",\n                \"description\": \"Target endpoint URL.\"\n              },\n              {\n                \"key\": \"runtime_version\",\n                \"description\": \"Version of the Apigee Runtime for the proxy.\"\n              },\n              {\n                \"key\": \"instance_id\",\n                \"description\": \"Instance ID of the Apigee application.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"apigee.googleapis.com/InternalTarget\",\n            \"displayName\": \"Apigee internal target\",\n            \"description\": \"Monitored resource for Apigee target with the host endpoint label.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP resource container associated with this resource, such as \\\"my-project\\\".\"\n              },\n              {\n                \"key\": \"org\",\n                \"description\": \"The identifier for the Apigee organization.\"\n              },\n              {\n                \"key\": \"env\",\n                \"description\": \"The identifier for the Apigee environment.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location where the Apigee runtime plane is provisioned.\"\n              },\n              {\n                \"key\": \"proxy_name\",\n                \"description\": \"The name of Apigee proxy deployed to the environment.\"\n              },\n              {\n                \"key\": \"endpoint\",\n                \"description\": \"Endpoint is represented by statically defined hostnames or target servers. For IP Addresses and dynamically-configured endpoints, data is aggregated and presented under the static string \\\"IP Address\\\" and \\\"Dynamic Target\\\" respectively.\"\n              },\n              {\n                \"key\": \"runtime_version\",\n                \"description\": \"Version of the Apigee Runtime for the proxy.\"\n              },\n              {\n                \"key\": \"instance_id\",\n                \"description\": \"Instance ID of the Apigee application.\"\n              },\n              {\n                \"key\": \"pod_uid\",\n                \"description\": \"Unique identifier of the Kubernetes pod.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"apigee.googleapis.com/Target\",\n            \"displayName\": \"Apigee target\",\n            \"description\": \"Monitored resource for Apigee target with the host endpoint label.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP resource container associated with this resource, such as \\\"my-project\\\".\"\n              },\n              {\n                \"key\": \"org\",\n                \"description\": \"The identifier for the Apigee organization.\"\n              },\n              {\n                \"key\": \"env\",\n                \"description\": \"The identifier for the Apigee environment.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location where the Apigee runtime plane is provisioned.\"\n              },\n              {\n                \"key\": \"proxy_name\",\n                \"description\": \"The name of Apigee proxy deployed to the environment.\"\n              },\n              {\n                \"key\": \"endpoint\",\n                \"description\": \"Endpoint is represented by statically defined hostnames or target servers. For IP Addresses and dynamically-configured endpoints, data is aggregated and presented under the static string \\\"IP Address\\\" and \\\"Dynamic Target\\\" respectively.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"apigee.googleapis.com/EnvironmentInstance\",\n            \"displayName\": \"Apigee environment instance\",\n            \"description\": \"Monitored resource for Apigee instance attachment.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP project ID that writes to this monitored resource.\"\n              },\n              {\n                \"key\": \"org\",\n                \"description\": \"An organization is a container for all the objects in an Apigee account.\"\n              },\n              {\n                \"key\": \"env\",\n                \"description\": \"An environment is a runtime execution context for the proxies in an organization.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the Apigee Instance.\"\n              },\n              {\n                \"key\": \"instance_id\",\n                \"description\": \"ID of the Apigee instance.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"apigee.googleapis.com/SecurityProfileEnvironmentAssociation\",\n            \"displayName\": \"Apigee API Security Profile Environment Association\",\n            \"description\": \"Apigee Advanced API Security profile attached to Apigee environment.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as \\\"my-project\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the resource, global always.\"\n              },\n              {\n                \"key\": \"org\",\n                \"description\": \"The identifier of the Apigee organization associated with this resource, such as \\\"my-org\\\".\"\n              },\n              {\n                \"key\": \"profile\",\n                \"description\": \"Apigee API Security profile name, such as \\\"default\\\".\"\n              },\n              {\n                \"key\": \"env\",\n                \"description\": \"The identifier of Apigee environment associated with this resource, such as \\\"my-env\\\".\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"apigee.googleapis.com/SecurityDetectionRule\",\n            \"displayName\": \"Apigee API Security Detection Rule\",\n            \"description\": \"Apigee API Security abuse detection rule to detect unusual patterns in API traffic.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as \\\"my-project\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the resource, global always.\"\n              },\n              {\n                \"key\": \"org\",\n                \"description\": \"The identifier of the Apigee organization associated with this resource, such as \\\"my-org\\\".\"\n              },\n              {\n                \"key\": \"env\",\n                \"description\": \"The identifier of Apigee environment associated with this resource, such as \\\"my-env\\\".\"\n              },\n              {\n                \"key\": \"detection_rule\",\n                \"description\": \"Apigee API Security detection rule, such as \\\"Flooder\\\" or \\\"Static Content Scraper\\\".\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"apigee.googleapis.com/SecurityIncident\",\n            \"displayName\": \"Apigee API Security Incident\",\n            \"description\": \"A security incident is a group of events with similar patterns detected by Apigee Advanced API Security, which could represent an API attack.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as \\\"my-project\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the resource, global always.\"\n              },\n              {\n                \"key\": \"org\",\n                \"description\": \"The identifier of the Apigee organization associated with this resource, such as \\\"my-org\\\".\"\n              },\n              {\n                \"key\": \"env\",\n                \"description\": \"The identifier of Apigee environment associated with this resource, such as \\\"my-env\\\".\"\n              },\n              {\n                \"key\": \"incident_id\",\n                \"description\": \"Apigee API Security incident id.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"k8s_container\",\n            \"displayName\": \"Kubernetes Container\",\n            \"description\": \"A Kubernetes container instance.\",\n            \"labels\": [\n              {\n                \"key\": \"project_id\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as \\\"my-project\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The physical location of the cluster that contains the container.\"\n              },\n              {\n                \"key\": \"cluster_name\",\n                \"description\": \"The name of the cluster that the container is running in.\"\n              },\n              {\n                \"key\": \"namespace_name\",\n                \"description\": \"The name of the namespace that the container is running in.\"\n              },\n              {\n                \"key\": \"pod_name\",\n                \"description\": \"The name of the pod that the container is running in.\"\n              },\n              {\n                \"key\": \"container_name\",\n                \"description\": \"The name of the container.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"k8s_container\",\n              \"metrics\": [\n                \"apigee.googleapis.com/server/fault_count\",\n                \"apigee.googleapis.com/internal/server/prometheus_remote_storage_succeeded_samples_total\",\n                \"apigee.googleapis.com/server/nio\",\n                \"apigee.googleapis.com/server/num_threads\",\n                \"apigee.googleapis.com/server/request_count\",\n                \"apigee.googleapis.com/server/response_count\",\n                \"apigee.googleapis.com/server/latencies\",\n                \"apigee.googleapis.com/upstream/request_count\",\n                \"apigee.googleapis.com/upstream/response_count\",\n                \"apigee.googleapis.com/upstream/latencies\",\n                \"apigee.googleapis.com/internal/billing/api_call_count\",\n                \"apigee.googleapis.com/udca/server/local_file_oldest_ts\",\n                \"apigee.googleapis.com/udca/server/local_file_latest_ts\",\n                \"apigee.googleapis.com/udca/server/local_file_count\",\n                \"apigee.googleapis.com/udca/server/total_latencies\",\n                \"apigee.googleapis.com/udca/server/upload_latencies\",\n                \"apigee.googleapis.com/udca/upstream/http_error_count\",\n                \"apigee.googleapis.com/udca/upstream/http_latencies\",\n                \"apigee.googleapis.com/udca/upstream/uploaded_file_sizes\",\n                \"apigee.googleapis.com/udca/upstream/uploaded_file_count\",\n                \"apigee.googleapis.com/udca/disk/used_bytes\",\n                \"apigee.googleapis.com/udca/server/pruned_file_count\",\n                \"apigee.googleapis.com/udca/server/retry_cache_size\",\n                \"apigee.googleapis.com/cassandra/process_max_fds\",\n                \"apigee.googleapis.com/cassandra/process_open_fds\",\n                \"apigee.googleapis.com/cassandra/jvm_memory_pool_bytes_max\",\n                \"apigee.googleapis.com/cassandra/jvm_memory_pool_bytes_init\",\n                \"apigee.googleapis.com/cassandra/jvm_memory_bytes_max\",\n                \"apigee.googleapis.com/cassandra/process_cpu_seconds_total\",\n                \"apigee.googleapis.com/cassandra/jvm_memory_bytes_used\",\n                \"apigee.googleapis.com/cassandra/compaction_pendingtasks\",\n                \"apigee.googleapis.com/cassandra/jvm_memory_bytes_init\",\n                \"apigee.googleapis.com/cassandra/jvm_memory_pool_bytes_used\",\n                \"apigee.googleapis.com/cassandra/jvm_memory_pool_bytes_committed\",\n                \"apigee.googleapis.com/cassandra/clientrequest_latency\",\n                \"apigee.googleapis.com/cassandra/tablerequests_rate\",\n                \"apigee.googleapis.com/cassandra/tablerequests_latency\",\n                \"apigee.googleapis.com/cassandra/jvm_memory_bytes_committed\",\n                \"apigee.googleapis.com/internal/cluster/ready_replicas\",\n                \"apigee.googleapis.com/internal/cluster/total_replicas\",\n                \"apigee.googleapis.com/internal/accesslog/input_records_total_count\",\n                \"apigee.googleapis.com/internal/accesslog/output_records_total_count\",\n                \"apigee.googleapis.com/internal/accesslog/output_buffer_queue_length\",\n                \"apigee.googleapis.com/internal/accesslog/output_buffer_total_bytes\",\n                \"apigee.googleapis.com/internal/accesslog/output_emit_count_current\",\n                \"apigee.googleapis.com/internal/accesslog/output_errors_count_current\",\n                \"apigee.googleapis.com/internal/accesslog/output_retry_count_current\",\n                \"apigee.googleapis.com/connectagent/sent_bytes\",\n                \"apigee.googleapis.com/connectagent/received_bytes\",\n                \"apigee.googleapis.com/connectagent/sent_messages\",\n                \"apigee.googleapis.com/connectagent/received_messages\",\n                \"apigee.googleapis.com/connectagent/completed_rpcs_count\",\n                \"apigee.googleapis.com/connectagent/stream_liveness_time\",\n                \"apigee.googleapis.com/connectagent/dropped_requests\",\n                \"apigee.googleapis.com/connectagent/dropped_responses\",\n                \"apigee.googleapis.com/envoy/redis/downstream_rq_total\",\n                \"apigee.googleapis.com/envoy/redis/downstream_rq_active\",\n                \"apigee.googleapis.com/envoy/redis/downstream_cx_total\",\n                \"apigee.googleapis.com/envoy/redis/downstream_cx_active\",\n                \"apigee.googleapis.com/envoy/redis/commands/evalsha/total\",\n                \"apigee.googleapis.com/envoy/redis/commands/evalsha/success\",\n                \"apigee.googleapis.com/envoy/redis/commands/evalsha/error\",\n                \"apigee.googleapis.com/envoy/redis/commands/evalsha/latency\",\n                \"apigee.googleapis.com/envoy/redis/commands/get/total\",\n                \"apigee.googleapis.com/envoy/redis/commands/get/success\",\n                \"apigee.googleapis.com/envoy/redis/commands/get/error\",\n                \"apigee.googleapis.com/envoy/redis/commands/get/latency\",\n                \"apigee.googleapis.com/internal/server/google_token_generation_latencies\",\n                \"apigee.googleapis.com/internal/server/google_token_generation_count\",\n                \"apigee.googleapis.com/internal/envoy/gateway/downstream_request_count\",\n                \"apigee.googleapis.com/internal/envoy/gateway/downstream_latencies\",\n                \"apigee.googleapis.com/internal/envoy/gateway/downstream_response_count\",\n                \"apigee.googleapis.com/internal/envoy/gateway/upstream_request_count\",\n                \"apigee.googleapis.com/internal/envoy/gateway/upstream_latencies\",\n                \"apigee.googleapis.com/internal/envoy/gateway/grpc_access_logs_written_count\",\n                \"apigee.googleapis.com/internal/envoy/gateway/grpc_access_logs_dropped_count\",\n                \"apigee.googleapis.com/internal/envoy/adapter/request_count\",\n                \"apigee.googleapis.com/internal/envoy/adapter/auth_request_latencies\",\n                \"apigee.googleapis.com/internal/envoy/adapter/apigee_request_latencies\",\n                \"apigee.googleapis.com/internal/envoy/adapter/products_cached\",\n                \"apigee.googleapis.com/internal/envoy/adapter/analytics_records_batch_size\",\n                \"apigee.googleapis.com/internal/experiments/giraffe/snapshot/snapshot_version\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"apigee.googleapis.com/ProxyV2\",\n              \"metrics\": [\n                \"apigee.googleapis.com/mint/request_count\",\n                \"apigee.googleapis.com/mint/response_count\",\n                \"apigee.googleapis.com/mint/latencies_percentile\",\n                \"apigee.googleapis.com/internal/proxyv2/response_latencies_double\",\n                \"apigee.googleapis.com/proxyv2/request_count\",\n                \"apigee.googleapis.com/proxyv2/details\",\n                \"apigee.googleapis.com/proxyv2/response_count\",\n                \"apigee.googleapis.com/internal/proxyv2/latencies_bucket\",\n                \"apigee.googleapis.com/internal/proxyv2/latencies_count\",\n                \"apigee.googleapis.com/internal/proxyv2/latencies_sum\",\n                \"apigee.googleapis.com/proxyv2/latencies_percentile\",\n                \"apigee.googleapis.com/proxyv2/latencies\",\n                \"apigee.googleapis.com/internal/proxyv2/heartbeat\",\n                \"apigee.googleapis.com/policyv2/latencies\",\n                \"apigee.googleapis.com/policyv2/latencies_percentile\",\n                \"apigee.googleapis.com/internal/targetv2/response_count_delta\",\n                \"apigee.googleapis.com/internal/targetv2/response_latencies_double\",\n                \"apigee.googleapis.com/targetv2/request_count\",\n                \"apigee.googleapis.com/targetv2/response_count\",\n                \"apigee.googleapis.com/targetv2/latencies\",\n                \"apigee.googleapis.com/targetv2/latencies_percentile\",\n                \"apigee.googleapis.com/proxyv2/release/response_count\",\n                \"apigee.googleapis.com/proxyv2/release/latencies_percentile\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"apigee.googleapis.com/InternalProxy\",\n              \"metrics\": [\n                \"apigee.googleapis.com/internal/proxy/request_count\",\n                \"apigee.googleapis.com/internal/proxy/response_count\",\n                \"apigee.googleapis.com/internal/proxy/latencies\",\n                \"apigee.googleapis.com/internal/proxy/details\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"apigee.googleapis.com/Proxy\",\n              \"metrics\": [\n                \"apigee.googleapis.com/proxy/request_count\",\n                \"apigee.googleapis.com/proxy/response_count\",\n                \"apigee.googleapis.com/proxy/latencies\",\n                \"apigee.googleapis.com/proxy/details\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"apigee.googleapis.com/Environment\",\n              \"metrics\": [\n                \"apigee.googleapis.com/environment/anomaly_count\",\n                \"apigee.googleapis.com/security/request_count\",\n                \"apigee.googleapis.com/security/detected_request_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"apigee.googleapis.com/Environment\",\n              \"metrics\": [\n                \"apigee.googleapis.com/environment/active\",\n                \"apigee.googleapis.com/environment/api_call_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"apigee.googleapis.com/TargetV2\",\n              \"metrics\": [\n                \"apigee.googleapis.com/internal/targetv2/response_count_delta\",\n                \"apigee.googleapis.com/internal/targetv2/response_latencies_double\",\n                \"apigee.googleapis.com/targetv2/request_count\",\n                \"apigee.googleapis.com/targetv2/response_count\",\n                \"apigee.googleapis.com/targetv2/latencies\",\n                \"apigee.googleapis.com/targetv2/latencies_percentile\",\n                \"apigee.googleapis.com/targetv2/release/response_count\",\n                \"apigee.googleapis.com/targetv2/release/latencies_percentile\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"apigee.googleapis.com/InternalTarget\",\n              \"metrics\": [\n                \"apigee.googleapis.com/internal/target/request_count\",\n                \"apigee.googleapis.com/internal/target/response_count\",\n                \"apigee.googleapis.com/internal/target/latencies\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"apigee.googleapis.com/Target\",\n              \"metrics\": [\n                \"apigee.googleapis.com/target/request_count\",\n                \"apigee.googleapis.com/target/response_count\",\n                \"apigee.googleapis.com/target/latencies\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"apigee.googleapis.com/EnvironmentInstance\",\n              \"metrics\": [\n                \"apigee.googleapis.com/environment/instance/gateway_nodes\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"apigee.googleapis.com/SecurityProfileEnvironmentAssociation\",\n              \"metrics\": [\n                \"apigee.googleapis.com/security/proxy_score\",\n                \"apigee.googleapis.com/security/target_score\",\n                \"apigee.googleapis.com/security/source_score\",\n                \"apigee.googleapis.com/security/environment_score\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"apigee.googleapis.com/SecurityDetectionRule\",\n              \"metrics\": [\n                \"apigee.googleapis.com/security/detected_request_count_by_rule\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"apigee.googleapis.com/SecurityIncident\",\n              \"metrics\": [\n                \"apigee.googleapis.com/security/incident_request_count\",\n                \"apigee.googleapis.com/security/incident_request_count_by_rule\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345001\"\n    },\n    {\n      \"name\": \"projects/12345001/services/appenginereporting.googleapis.com\",\n      \"config\": {\n        \"name\": \"appenginereporting.googleapis.com\",\n        \"title\": \"App Engine\",\n        \"documentation\": {\n          \"summary\": \"Google App Engine Reporting Service\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345001\"\n    },\n    {\n      \"name\": \"projects/12345001/services/artifactregistry.googleapis.com\",\n      \"config\": {\n        \"name\": \"artifactregistry.googleapis.com\",\n        \"title\": \"Artifact Registry API\",\n        \"documentation\": {\n          \"summary\": \"Store and manage build artifacts in a scalable and integrated service built on Google infrastructure.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"artifactregistry.googleapis.com/Location\",\n            \"displayName\": \"Artifact Registry Location\",\n            \"description\": \"A location in Artifact Registry.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP resource container associated with this resource, such as \\\"my_project\\\" or \\\"organizations/5678\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"artifactregistry.googleapis.com/Project\",\n            \"displayName\": \"Artifact Registry Project\",\n            \"description\": \"A Cloud project in Artifact Registry.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP resource container associated with this resource, such as \\\"my_project\\\" or \\\"organizations/5678\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"artifactregistry.googleapis.com/Repository\",\n            \"displayName\": \"Artifact Registry Repository\",\n            \"description\": \"A repository in Artifact Registry.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP resource container associated with this resource, such as \\\"my_project\\\" or \\\"organizations/5678\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              },\n              {\n                \"key\": \"repository_id\",\n                \"description\": \"The identifier of the Artifact Registry repository, such as \\\"my_repository\\\".\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"artifactregistry.googleapis.com/Location\",\n              \"metrics\": [\n                \"artifactregistry.googleapis.com/asia_multi_region_upstream_host_reads\",\n                \"artifactregistry.googleapis.com/europe_multi_region_upstream_host_reads\",\n                \"artifactregistry.googleapis.com/project_asia_multi_region_upstream_host_reads\",\n                \"artifactregistry.googleapis.com/project_europe_multi_region_upstream_host_reads\",\n                \"artifactregistry.googleapis.com/project_region_upstream_host_reads\",\n                \"artifactregistry.googleapis.com/project_us_multi_region_upstream_host_reads\",\n                \"artifactregistry.googleapis.com/quota/asia_multi_region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/asia_multi_region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/quota/europe_multi_region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/europe_multi_region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/quota/project_asia_multi_region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/project_asia_multi_region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/quota/project_europe_multi_region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/project_europe_multi_region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/quota/project_region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/project_region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/quota/project_us_multi_region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/project_us_multi_region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/quota/region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/quota/us_multi_region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/us_multi_region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/region_upstream_host_reads\",\n                \"artifactregistry.googleapis.com/us_multi_region_upstream_host_reads\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"artifactregistry.googleapis.com/Location\",\n              \"metrics\": [\n                \"artifactregistry.googleapis.com/quota/asia_multi_region_upstream_host_reads/limit\",\n                \"artifactregistry.googleapis.com/quota/europe_multi_region_upstream_host_reads/limit\",\n                \"artifactregistry.googleapis.com/quota/project_asia_multi_region_upstream_host_reads/limit\",\n                \"artifactregistry.googleapis.com/quota/project_europe_multi_region_upstream_host_reads/limit\",\n                \"artifactregistry.googleapis.com/quota/project_region_upstream_host_reads/limit\",\n                \"artifactregistry.googleapis.com/quota/project_us_multi_region_upstream_host_reads/limit\",\n                \"artifactregistry.googleapis.com/quota/region_upstream_host_reads/limit\",\n                \"artifactregistry.googleapis.com/quota/us_multi_region_upstream_host_reads/limit\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"artifactregistry.googleapis.com/Project\",\n              \"metrics\": [\n                \"artifactregistry.googleapis.com/project/api/request_count\",\n                \"artifactregistry.googleapis.com/project/api/request_latencies\",\n                \"artifactregistry.googleapis.com/project/request_count\",\n                \"artifactregistry.googleapis.com/project/request_latencies\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"artifactregistry.googleapis.com/Repository\",\n              \"metrics\": [\n                \"artifactregistry.googleapis.com/repository/api/request_count\",\n                \"artifactregistry.googleapis.com/repository/api/request_latencies\",\n                \"artifactregistry.googleapis.com/repository/request_count\",\n                \"artifactregistry.googleapis.com/repository/request_latencies\",\n                \"artifactregistry.googleapis.com/repository/size\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345001\"\n    },\n    {\n      \"name\": \"projects/12345001/services/autoscaling.googleapis.com\",\n      \"config\": {\n        \"name\": \"autoscaling.googleapis.com\",\n        \"title\": \"Cloud Autoscaling API\",\n        \"documentation\": {\n          \"summary\": \"An API for the Cloud Autoscaling for consuming autoscaling signals.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345001\"\n    },\n    {\n      \"name\": \"projects/12345001/services/bigquery.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigquery.googleapis.com\",\n        \"title\": \"BigQuery API\",\n        \"documentation\": {\n          \"summary\": \"A data platform for customers to create, manage, share and query data.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"bigquery.googleapis.com/Table\",\n            \"displayName\": \"BigQuery Table Resource.\",\n            \"description\": \"BigQuery Table Resource.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP resource container associated with this resource, such as \\\"my-project\\\" or \\\"organizations/123\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The cloud location of the BigQuery table.\"\n              },\n              {\n                \"key\": \"table_reference\",\n                \"description\": \"The table reference in the format of project_id:dataset_id.table_id for the BigQuery table.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"bigquery.googleapis.com/Location\",\n            \"displayName\": \"CheckIamPolicy Request Location\",\n            \"description\": \"A BigQuery Location (sometimes called Region).\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The id of the GCP resource container associated with this resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"bigquery.googleapis.com/InternalDifferentialPrivacyBudget\",\n            \"displayName\": \"Differential Privacy Budget\",\n            \"description\": \"Differential Privacy Budget.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container associated with the metric.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location for the quota.\"\n              },\n              {\n                \"key\": \"budget_id\",\n                \"description\": \"A unique identifier for the budget basis of the privacy budget (e.g view_uuid for per-view budgets).\"\n              },\n              {\n                \"key\": \"multi_region\",\n                \"description\": \"The multi-region identifier for the associated resource (e.g \\\"us\\\", \\\"eu\\\"). Used only for multi-region quota metrics.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"bigquery.googleapis.com/ExternalDifferentialPrivacyBudget\",\n            \"displayName\": \"Differential Privacy Budget External\",\n            \"description\": \"Differential Privacy Budget exposed externally to provide privacy budget metrics.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container associated with the metric.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location for the quota.\"\n              },\n              {\n                \"key\": \"budget_id\",\n                \"description\": \"A unique identifier for the budget basis of the privacy budget (e.g view_uuid for per-view budgets).\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/Table\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_eu/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_us/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_eu/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_us/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/Location\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/quota/internalCheckIamPolicyRequests/exceeded\",\n                \"bigquery.googleapis.com/quota/internalCheckIamPolicyRequests/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/Location\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/quota/internalCheckIamPolicyRequests/limit\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/Table\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org/limit\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org/usage\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_eu/limit\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_eu/usage\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_us/limit\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_us/usage\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project/limit\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project/usage\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_eu/limit\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_eu/usage\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_us/limit\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_us/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/InternalDifferentialPrivacyBudget\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/internal/privacybudget/dp_delta_budget\",\n                \"bigquery.googleapis.com/internal/privacybudget/dp_delta_budget_multi_regional\",\n                \"bigquery.googleapis.com/internal/privacybudget/dp_epsilon_budget\",\n                \"bigquery.googleapis.com/internal/privacybudget/dp_epsilon_budget_multi_regional\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget_multi_regional/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget_multi_regional/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/InternalDifferentialPrivacyBudget\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget/limit\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget/usage\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget_multi_regional/limit\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget_multi_regional/usage\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget/limit\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget/usage\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget_multi_regional/limit\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget_multi_regional/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/ExternalDifferentialPrivacyBudget\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/privacybudget/dp_delta_budget\",\n                \"bigquery.googleapis.com/privacybudget/dp_epsilon_budget\",\n                \"bigquery.googleapis.com/quota/privacybudget/dp_delta_budget/exceeded\",\n                \"bigquery.googleapis.com/quota/privacybudget/dp_epsilon_budget/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/ExternalDifferentialPrivacyBudget\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/quota/privacybudget/dp_delta_budget/limit\",\n                \"bigquery.googleapis.com/quota/privacybudget/dp_delta_budget/usage\",\n                \"bigquery.googleapis.com/quota/privacybudget/dp_epsilon_budget/limit\",\n                \"bigquery.googleapis.com/quota/privacybudget/dp_epsilon_budget/usage\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345001\"\n    },\n    {\n      \"name\": \"projects/12345001/services/bigqueryconnection.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigqueryconnection.googleapis.com\",\n        \"title\": \"BigQuery Connection API\",\n        \"documentation\": {\n          \"summary\": \"Allows users to manage BigQuery connections to external data sources.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345001\"\n    },\n    {\n      \"name\": \"projects/12345001/services/bigquerydatatransfer.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigquerydatatransfer.googleapis.com\",\n        \"title\": \"BigQuery Data Transfer API\",\n        \"documentation\": {\n          \"summary\": \"Schedule queries or transfer external data from SaaS applications to Google BigQuery on a regular basis.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345001\"\n    },\n    {\n      \"name\": \"projects/12345001/services/bigquerymigration.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigquerymigration.googleapis.com\",\n        \"title\": \"BigQuery Migration API\",\n        \"documentation\": {\n          \"summary\": \"The migration service, exposing apis for migration jobs operations, and agent management.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345001\"\n    },\n    {\n      \"name\": \"projects/12345001/services/bigqueryreservation.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigqueryreservation.googleapis.com\",\n        \"title\": \"BigQuery Reservation API\",\n        \"documentation\": {\n          \"summary\": \"A service to modify your BigQuery flat-rate reservations.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345001\"\n    },\n    {\n      \"name\": \"projects/12345001/services/bigquerystorage.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigquerystorage.googleapis.com\",\n        \"title\": \"BigQuery Storage API\",\n        \"documentation\": {},\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"bigquerystorage.googleapis.com/DataflowWrite\",\n            \"displayName\": \"BigQuery Storage Write API metrics for Dataflow jobs.\",\n            \"description\": \"BigQuery Storage Write API metrics for Dataflow jobs.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project/folder/org associated with this resource. This is the project that runs the Dataflow job.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The BigQuery region in which the Storage API server locates.\"\n              },\n              {\n                \"key\": \"job_name\",\n                \"description\": \"The name of the Dataflow job this worker belongs to.\"\n              },\n              {\n                \"key\": \"job_id\",\n                \"description\": \"The id of the dataflow job the worker belongs to.\"\n              },\n              {\n                \"key\": \"worker_id\",\n                \"description\": \"The ID of the worker, unique for this job_id.\"\n              },\n              {\n                \"key\": \"destination_project\",\n                \"description\": \"The project of BigQuery destination table of the Dataflow job.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"bigquerystorage.googleapis.com/DataflowWrite\",\n              \"metrics\": [\n                \"bigquerystorage.googleapis.com/dataflow_write/request_count\",\n                \"bigquerystorage.googleapis.com/dataflow_write/uploaded_row_count\",\n                \"bigquerystorage.googleapis.com/dataflow_write/uploaded_bytes_count\",\n                \"bigquerystorage.googleapis.com/dataflow_write/billed_bytes_count\",\n                \"bigquerystorage.googleapis.com/dataflow_write/connection_results_count\",\n                \"bigquerystorage.googleapis.com/dataflow_write/server_side_latencies\",\n                \"bigquerystorage.googleapis.com/dataflow_write/transcoding_latencies\",\n                \"bigquerystorage.googleapis.com/dataflow_write/concurrent_connections\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345001\"\n    },\n    {\n      \"name\": \"projects/12345001/services/bigtable.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigtable.googleapis.com\",\n        \"title\": \"Cloud Bigtable API\",\n        \"documentation\": {\n          \"summary\": \"API for reading and writing the contents of Bigtable tables associated with a Google Cloud project.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345001\"\n    },\n    {\n      \"name\": \"projects/12345001/services/cloudaicompanion.googleapis.com\",\n      \"config\": {\n        \"name\": \"cloudaicompanion.googleapis.com\",\n        \"title\": \"Cloud AI Companion API\",\n        \"documentation\": {\n          \"summary\": \"The Cloud AI Companion API for Gemini for Google Cloud.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345001\"\n    },\n    {\n      \"name\": \"projects/12345001/services/cloudasset.googleapis.com\",\n      \"config\": {\n        \"name\": \"cloudasset.googleapis.com\",\n        \"title\": \"Cloud Asset API\",\n        \"documentation\": {\n          \"summary\": \"The Cloud Asset API manages the history and inventory of Google Cloud resources.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345001\"\n    },\n    {\n      \"name\": \"projects/12345001/services/cloudbuild.googleapis.com\",\n      \"config\": {\n        \"name\": \"cloudbuild.googleapis.com\",\n        \"title\": \"Cloud Build API\",\n        \"documentation\": {\n          \"summary\": \"Creates and manages builds on Google Cloud Platform.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"cloudbuild.googleapis.com/Location\",\n            \"displayName\": \"Cloud Build Location\",\n            \"description\": \"A location in the Cloud Build API.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identified of the GCP resource container associated with this resource, such as \\\"my_project\\\" or \\\"organizations/5678\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"cloudbuild.googleapis.com/GkeInstance\",\n            \"displayName\": \"GKE instance\",\n            \"description\": \"GKE instance.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP resource container associated with this resource, such as \\\"my_project\\\" or \\\"organizations/5678\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              },\n              {\n                \"key\": \"gke_instance_id\",\n                \"description\": \"The identifier of the GKE instance.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"cloudbuild.googleapis.com/PrivatePool\",\n            \"displayName\": \"Private Worker Pool\",\n            \"description\": \"Private Worker Pool.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP resource container associated with this resource, such as \\\"my_project\\\" or \\\"organizations/5678\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              },\n              {\n                \"key\": \"worker_pool_uuid\",\n                \"description\": \"The UUID of the worker pool.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"cloudbuild.googleapis.com/GkeInstance\",\n              \"metrics\": [\n                \"cloudbuild.googleapis.com/internal/gke_instance/pod\",\n                \"cloudbuild.googleapis.com/internal/gke_instance/node\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"cloudbuild.googleapis.com/PrivatePool\",\n              \"metrics\": [\n                \"cloudbuild.googleapis.com/internal/private_pool_ready_worker_replicas\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"cloudbuild.googleapis.com/Location\",\n              \"metrics\": [\n                \"cloudbuild.googleapis.com/concurrent_public_pool_build_cpus\",\n                \"cloudbuild.googleapis.com/quota/concurrent_public_pool_build_cpus/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"cloudbuild.googleapis.com/Location\",\n              \"metrics\": [\n                \"cloudbuild.googleapis.com/quota/concurrent_public_pool_build_cpus/limit\",\n                \"cloudbuild.googleapis.com/quota/concurrent_public_pool_build_cpus/usage\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345001\"\n    },\n    {\n      \"name\": \"projects/12345001/services/cloudfunctions.googleapis.com\",\n      \"config\": {\n        \"name\": \"cloudfunctions.googleapis.com\",\n        \"title\": \"Cloud Functions API\",\n        \"documentation\": {\n          \"summary\": \"Manages lightweight user-provided functions executed in response to events.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"cloudfunctions.googleapis.com/function\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloudfunctions.googleapis.com/function_name\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/api\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_version\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_method\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/consumer_project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/consumer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/producer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/consumer_resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"cloudfunctions.googleapis.com/function\",\n              \"metrics\": [\n                \"cloudfunctions.googleapis.com/function/execution_times\",\n                \"cloudfunctions.googleapis.com/function/execution_count\",\n                \"cloudfunctions.googleapis.com/function/user_memory_bytes\",\n                \"cloudfunctions.googleapis.com/function/network_egress\",\n                \"cloudfunctions.googleapis.com/function/active_instances\",\n                \"cloudfunctions.googleapis.com/function/execution_delays\",\n                \"cloudfunctions.googleapis.com/function/execution_count_internal\",\n                \"cloudfunctions.googleapis.com/function/supervisor_gcu_times\",\n                \"cloudfunctions.googleapis.com/function/supervisor_memory_bytes\",\n                \"cloudfunctions.googleapis.com/function/user_gcu_times\",\n                \"cloudfunctions.googleapis.com/function/supervisor_chemist_rpc_error_count\",\n                \"cloudfunctions.googleapis.com/function/supervisor_controlled_death_count\",\n                \"cloudfunctions.googleapis.com/function/supervisor_report_count\",\n                \"cloudfunctions.googleapis.com/function/supervisor_report_latencies\",\n                \"cloudfunctions.googleapis.com/function/supervisor_phase_latencies\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/api\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/api/consumer/request_count\",\n                \"serviceruntime.googleapis.com/api/consumer/error_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_used_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_refund_count\",\n                \"serviceruntime.googleapis.com/api/consumer/total_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_overhead_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/backend_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/response_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer\",\n                \"serviceruntime.googleapis.com/quota/used\",\n                \"serviceruntime.googleapis.com/quota/limit\",\n                \"serviceruntime.googleapis.com/quota/exceeded\",\n                \"serviceruntime.googleapis.com/allocation/consumer/quota_used_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/consumer_quota\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/quota/rate/consumer/used_count\",\n                \"serviceruntime.googleapis.com/quota/rate/consumer/refund_count\",\n                \"serviceruntime.googleapis.com/quota/allocation/consumer/usage\",\n                \"serviceruntime.googleapis.com/quota/consumer/limit\",\n                \"serviceruntime.googleapis.com/quota/consumer/exceeded\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345001\"\n    },\n    {\n      \"name\": \"projects/12345001/services/cloudidentity.googleapis.com\",\n      \"config\": {\n        \"name\": \"cloudidentity.googleapis.com\",\n        \"title\": \"Cloud Identity API\",\n        \"documentation\": {\n          \"summary\": \"API for provisioning and managing identity resources.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/universal\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345001\"\n    },\n    {\n      \"name\": \"projects/12345001/services/cloudresourcemanager.googleapis.com\",\n      \"config\": {\n        \"name\": \"cloudresourcemanager.googleapis.com\",\n        \"title\": \"Cloud Resource Manager API\",\n        \"documentation\": {\n          \"summary\": \"Creates, reads, and updates metadata for Google Cloud Platform resource containers.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345001\"\n    },\n    {\n      \"name\": \"projects/12345001/services/cloudscheduler.googleapis.com\",\n      \"config\": {\n        \"name\": \"cloudscheduler.googleapis.com\",\n        \"title\": \"Cloud Scheduler API\",\n        \"documentation\": {\n          \"summary\": \"Creates and manages jobs run on a regular recurring schedule.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345001\"\n    },\n    {\n      \"name\": \"projects/12345001/services/cloudtrace.googleapis.com\",\n      \"config\": {\n        \"name\": \"cloudtrace.googleapis.com\",\n        \"title\": \"Cloud Trace API\",\n        \"documentation\": {\n          \"summary\": \"Sends application trace data to Cloud Trace for viewing. Trace data is collected for all App Engine applications by default. Trace data from other applications can be provided using this API. This library is used to interact with the Cloud Trace API directly. If you are looking to instrument your application for Cloud Trace, we recommend using OpenTelemetry.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"cloudtrace.googleapis.com/charged_project\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"monitoring.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              }\n            ]\n          },\n          {\n            \"type\": \"cloudtrace.googleapis.com/ChargedProject\",\n            \"displayName\": \"Cloud trace target\",\n            \"description\": \"A cloud trace specialization target schema of cloud.ChargedProject.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The monitored resource container. Could be project, workspace, etc.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The service-specific notion of location.\"\n              },\n              {\n                \"key\": \"api_service\",\n                \"description\": \"The name of the API service with which the data is associated (e.g.,'cloudtrace.googleapis.com').\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"cloudtrace.googleapis.com/CloudtraceProject\",\n            \"displayName\": \"Cloud Trace\",\n            \"description\": \"Cloud trace resource, e.g. project.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container associated with the resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location that the Cloud Trace service recording the metrics is running.\"\n              }\n            ],\n            \"launchStage\": \"EARLY_ACCESS\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"cloudtrace.googleapis.com/ChargedProject\",\n              \"metrics\": [\n                \"cloudtrace.googleapis.com/billing/ingested_spans\",\n                \"cloudtrace.googleapis.com/billing/ingested_bytes\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"cloudtrace.googleapis.com/charged_project\",\n              \"metrics\": [\n                \"cloudtrace.googleapis.com/billing/retrieved_spans\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"cloudtrace.googleapis.com/CloudtraceProject\",\n              \"metrics\": [\n                \"cloudtrace.googleapis.com/internal/plugin_server_span_count\",\n                \"cloudtrace.googleapis.com/internal/reader_root_query_count\",\n                \"cloudtrace.googleapis.com/internal/reader_root_query_latencies\",\n                \"cloudtrace.googleapis.com/bigquery_export/exported_span_count\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345001\"\n    },\n    {\n      \"name\": \"projects/12345001/services/cloudvolumesgcp-api.netapp.com\",\n      \"config\": {\n        \"name\": \"cloudvolumesgcp-api.netapp.com\",\n        \"title\": \"NetApp Cloud Volumes API\",\n        \"documentation\": {\n          \"summary\": \"The NetApp Cloud Volumes API is used for creating and management of NetApp Cloud Volumes resources.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/service-procured\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"api\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_version\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_method\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/consumer_project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              }\n            ]\n          },\n          {\n            \"type\": \"cloudvolumesgcp-api.netapp.com/CloudVolume\",\n            \"displayName\": \"Monitored Resource for NetApp CVS\",\n            \"description\": \"Monitored Resource for NetApp CVS.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"Project information.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Region/Zone information.\"\n              },\n              {\n                \"key\": \"volume_id\",\n                \"description\": \"ID of the volume.\"\n              },\n              {\n                \"key\": \"service_type\",\n                \"description\": \"Service type of the volume or replication relationship.\"\n              },\n              {\n                \"key\": \"name\",\n                \"description\": \"Name of the volume or replication relationship.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"cloudvolumesgcp-api.netapp.com/CloudVolumePool\",\n            \"displayName\": \"Monitored Resource for NetApp CVS storage pool\",\n            \"description\": \"Monitored Resource for NetApp CVS storage pool.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"Project information.\"\n              },\n              {\n                \"key\": \"pool_id\",\n                \"description\": \"ID of the storage pool.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Region/zone of the storage pool.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"cloudvolumesgcp-api.netapp.com/CloudVolume\",\n              \"metrics\": [\n                \"cloudvolumesgcp-api.netapp.com/cloudvolume/volume_usage\",\n                \"cloudvolumesgcp-api.netapp.com/cloudvolume/volume_size\",\n                \"cloudvolumesgcp-api.netapp.com/cloudvolume/operation_count\",\n                \"cloudvolumesgcp-api.netapp.com/cloudvolume/read_bytes_count\",\n                \"cloudvolumesgcp-api.netapp.com/cloudvolume/write_bytes_count\",\n                \"cloudvolumesgcp-api.netapp.com/cloudvolume/request_latencies\",\n                \"cloudvolumesgcp-api.netapp.com/cloudvolume/inode_allocation\",\n                \"cloudvolumesgcp-api.netapp.com/cloudvolume/inode_usage\",\n                \"cloudvolumesgcp-api.netapp.com/cloudvolume/logical_bytes_backed_up\",\n                \"cloudvolumesgcp-api.netapp.com/cloudvolume/replication_healthy\",\n                \"cloudvolumesgcp-api.netapp.com/cloudvolume/replication_last_transfer_duration\",\n                \"cloudvolumesgcp-api.netapp.com/cloudvolume/replication_last_transfer_size\",\n                \"cloudvolumesgcp-api.netapp.com/cloudvolume/replication_total_transfer_bytes\",\n                \"cloudvolumesgcp-api.netapp.com/cloudvolume/replication_relationship_progress\",\n                \"cloudvolumesgcp-api.netapp.com/cloudvolume/replication_lag_time\",\n                \"cloudvolumesgcp-api.netapp.com/cloudvolume/replication_relationship_status\",\n                \"cloudvolumesgcp-api.netapp.com/cloudvolume/volume_percent_used\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"cloudvolumesgcp-api.netapp.com/CloudVolumePool\",\n              \"metrics\": [\n                \"cloudvolumesgcp-api.netapp.com/cloudvolumepool/usage\",\n                \"cloudvolumesgcp-api.netapp.com/cloudvolumepool/size\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"api\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/api/consumer/request_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_used_count\",\n                \"serviceruntime.googleapis.com/api/consumer/total_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/response_sizes\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345001\"\n    },\n    {\n      \"name\": \"projects/12345001/services/composer.googleapis.com\",\n      \"config\": {\n        \"name\": \"composer.googleapis.com\",\n        \"title\": \"Cloud Composer API\",\n        \"documentation\": {\n          \"summary\": \"Manages Apache Airflow environments on Google Cloud Platform.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/billing-enabled\",\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345001\"\n    },\n    {\n      \"name\": \"projects/12345001/services/compute.googleapis.com\",\n      \"config\": {\n        \"name\": \"compute.googleapis.com\",\n        \"title\": \"Compute Engine API\",\n        \"documentation\": {\n          \"summary\": \"Creates and runs virtual machines on Google Cloud Platform.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"compute.googleapis.com/VpcNetwork\",\n            \"displayName\": \"VPC Network\",\n            \"description\": \"VPC Network.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the VPC Network.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the VPC Network, global always.\"\n              },\n              {\n                \"key\": \"network_id\",\n                \"description\": \"VPC Network resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Location\",\n            \"displayName\": \"Compute Location\",\n            \"description\": \"A location in the Compute API.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the Compute Location.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Interconnect\",\n            \"displayName\": \"Interconnect\",\n            \"description\": \"Interconnect.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the Interconnect.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the Interconnect.\"\n              },\n              {\n                \"key\": \"interconnect_id\",\n                \"description\": \"Interconnect resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/FirewallPolicy\",\n            \"displayName\": \"Firewall policy\",\n            \"description\": \"Firewall policy.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project or organization) associated with the firewall policy.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the firewall policy.\"\n              },\n              {\n                \"key\": \"firewall_policy_id\",\n                \"description\": \"Firewall policy resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/OperationType\",\n            \"displayName\": \"Operation Type\",\n            \"description\": \"Operation Type.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the operation.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the operation.\"\n              },\n              {\n                \"key\": \"operation_type\",\n                \"description\": \"Operation type.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Reservation\",\n            \"displayName\": \"Reservation\",\n            \"description\": \"Monitored resource representing a reservation.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container (e.g. project number) associated with the reservation.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The zone that contains the reservation.\"\n              },\n              {\n                \"key\": \"reservation_id\",\n                \"description\": \"Reservation resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/StoragePool\",\n            \"displayName\": \"Storage Pool\",\n            \"description\": \"Monitored resource representing a storage pool.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container (e.g. project number) associated with the reservation.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location that contains the storage pool.\"\n              },\n              {\n                \"key\": \"storage_pool_id\",\n                \"description\": \"Numerical resource ID of the storage pool.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"gce_instance\",\n            \"displayName\": \"VM Instance\",\n            \"description\": \"A virtual machine instance hosted in Compute Engine.\",\n            \"labels\": [\n              {\n                \"key\": \"project_id\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as \\\"my-project\\\".\"\n              },\n              {\n                \"key\": \"instance_id\",\n                \"description\": \"The numeric VM instance identifier assigned by Compute Engine.\"\n              },\n              {\n                \"key\": \"zone\",\n                \"description\": \"The Compute Engine zone in which the VM is running.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/SecurityPolicy\",\n            \"displayName\": \"Security policy\",\n            \"description\": \"Security policy.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the security policy.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the security policy.\"\n              },\n              {\n                \"key\": \"security_policy_id\",\n                \"description\": \"Security policy resource ID.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/dynamic_routes_per_region_per_peering_group\",\n                \"compute.googleapis.com/global_internal_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/instances_per_peering_group\",\n                \"compute.googleapis.com/instances_per_vpc_network\",\n                \"compute.googleapis.com/internal_lb_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_managed_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_protocol_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/ip_aliases_per_peering_group\",\n                \"compute.googleapis.com/ip_aliases_per_vpc_network\",\n                \"compute.googleapis.com/peerings_per_vpc_network\",\n                \"compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network\",\n                \"compute.googleapis.com/psc_propagated_connections_per_vpc_network\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_accepted_connections_per_producer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_connections_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/exceeded\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/regional_external_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/regional_internal_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/static_routes_per_peering_group\",\n                \"compute.googleapis.com/static_routes_per_vpc_network\",\n                \"compute.googleapis.com/subnet_ranges_per_peering_group\",\n                \"compute.googleapis.com/subnet_ranges_per_vpc_network\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Location\",\n              \"metrics\": [\n                \"compute.googleapis.com/cpus_per_vm_family\",\n                \"compute.googleapis.com/global_dns/request_count\",\n                \"compute.googleapis.com/gpus_per_gpu_family\",\n                \"compute.googleapis.com/inter_region_egress_bandwidth\",\n                \"compute.googleapis.com/local_ssd_total_storage_per_vm_family\",\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/exceeded\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/exceeded\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/exceeded\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/usage\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/exceeded\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/exceeded\",\n                \"compute.googleapis.com/quota/tpus_per_tpu_family/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Interconnect\",\n              \"metrics\": [\n                \"compute.googleapis.com/interconnect_attachments_per_interconnect\",\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/FirewallPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/fqdns_per_global_network_firewall_policy\",\n                \"compute.googleapis.com/fqdns_per_regional_network_firewall_policy\",\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/rule_attributes_per_global_network_firewall_policy\",\n                \"compute.googleapis.com/rule_attributes_per_regional_network_firewall_policy\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/OperationType\",\n              \"metrics\": [\n                \"compute.googleapis.com/global_concurrent_operations\",\n                \"compute.googleapis.com/quota/concurrent/global_concurrent_operations/exceeded\",\n                \"compute.googleapis.com/quota/concurrent/internal/global_concurrent_operations/combined_units\",\n                \"compute.googleapis.com/quota/concurrent/internal/regional_concurrent_operations/combined_units\",\n                \"compute.googleapis.com/quota/concurrent/regional_concurrent_operations/exceeded\",\n                \"compute.googleapis.com/regional_concurrent_operations\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"gce_instance\",\n              \"metrics\": [\n                \"compute.googleapis.com/instance/global_dns/request_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Reservation\",\n              \"metrics\": [\n                \"compute.googleapis.com/reservation/reserved\",\n                \"compute.googleapis.com/reservation/assured\",\n                \"compute.googleapis.com/reservation/used\",\n                \"compute.googleapis.com/reservation/internal/matching_instances\",\n                \"compute.googleapis.com/reservation/internal/prespuns_by_state\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/StoragePool\",\n              \"metrics\": [\n                \"compute.googleapis.com/storage_pool/disks\",\n                \"compute.googleapis.com/storage_pool/provisioned_capacity\",\n                \"compute.googleapis.com/storage_pool/used_capacity\",\n                \"compute.googleapis.com/storage_pool/total_disk_provisioned_capacity\",\n                \"compute.googleapis.com/storage_pool/provisioned_iops\",\n                \"compute.googleapis.com/storage_pool/used_iops\",\n                \"compute.googleapis.com/storage_pool/total_disk_provisioned_iops\",\n                \"compute.googleapis.com/storage_pool/provisioned_throughput\",\n                \"compute.googleapis.com/storage_pool/used_throughput\",\n                \"compute.googleapis.com/storage_pool/total_disk_provisioned_throughput\",\n                \"compute.googleapis.com/storage_pool/capacity_utilization\",\n                \"compute.googleapis.com/storage_pool/iops_utilization\",\n                \"compute.googleapis.com/storage_pool/throughput_utilization\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Location\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/limit\",\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/usage\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/limit\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/usage\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/limit\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/limit\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/usage\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/limit\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/usage\",\n                \"compute.googleapis.com/quota/tpus_per_tpu_family/limit\",\n                \"compute.googleapis.com/quota/tpus_per_tpu_family/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/limit\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/usage\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_accepted_connections_per_producer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_accepted_connections_per_producer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_connections_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_connections_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/limit\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/usage\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Interconnect\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/limit\",\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/FirewallPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/OperationType\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/concurrent/global_concurrent_operations/limit\",\n                \"compute.googleapis.com/quota/concurrent/regional_concurrent_operations/limit\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/SecurityPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/exceeded\",\n                \"compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/exceeded\",\n                \"compute.googleapis.com/quota/advanced_rules_per_security_policy/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/SecurityPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/limit\",\n                \"compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/usage\",\n                \"compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/limit\",\n                \"compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/usage\",\n                \"compute.googleapis.com/quota/advanced_rules_per_security_policy/limit\",\n                \"compute.googleapis.com/quota/advanced_rules_per_security_policy/usage\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345001\"\n    },\n    {\n      \"name\": \"projects/12345001/services/config.googleapis.com\",\n      \"config\": {\n        \"name\": \"config.googleapis.com\",\n        \"title\": \"Infrastructure Manager API\",\n        \"documentation\": {\n          \"summary\": \"Creates and manages Google Cloud Platform resources and infrastructure.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345001\"\n    },\n    {\n      \"name\": \"projects/12345001/services/container.googleapis.com\",\n      \"config\": {\n        \"name\": \"container.googleapis.com\",\n        \"title\": \"Kubernetes Engine API\",\n        \"documentation\": {\n          \"summary\": \"Builds and manages container-based applications, powered by the open source Kubernetes technology.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"container.googleapis.com/Cluster\",\n            \"displayName\": \"Kubernetes Cluster Limits\",\n            \"description\": \"Kubernetes Cluster.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"Project or organization.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Region or zone where the cluster was created.\"\n              },\n              {\n                \"key\": \"cluster_name\",\n                \"description\": \"Cluster name.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"container.googleapis.com/NodePool\",\n            \"displayName\": \"GKE Node Pool\",\n            \"description\": \"GKE Node Pool.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"Project or organization.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Region or zone where the cluster was created.\"\n              },\n              {\n                \"key\": \"cluster_name\",\n                \"description\": \"Cluster name.\"\n              },\n              {\n                \"key\": \"node_pool_name\",\n                \"description\": \"Node pool name.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"container.googleapis.com/Cluster\",\n              \"metrics\": [\n                \"container.googleapis.com/quota/containers_per_cluster_autopilot\",\n                \"container.googleapis.com/quota/containers_per_cluster_standard\",\n                \"container.googleapis.com/quota/etcd_database_size_bytes\",\n                \"container.googleapis.com/quota/nodes_per_cluster\",\n                \"container.googleapis.com/quota/pods_per_cluster_autopilot\",\n                \"container.googleapis.com/quota/pods_per_cluster_standard\",\n                \"container.googleapis.com/quota/quota/containers_per_cluster_autopilot/exceeded\",\n                \"container.googleapis.com/quota/quota/containers_per_cluster_standard/exceeded\",\n                \"container.googleapis.com/quota/quota/etcd_database_size_bytes/exceeded\",\n                \"container.googleapis.com/quota/quota/etcd_database_size_gib/exceeded\",\n                \"container.googleapis.com/quota/quota/nodes_per_cluster/exceeded\",\n                \"container.googleapis.com/quota/quota/pods_per_cluster_autopilot/exceeded\",\n                \"container.googleapis.com/quota/quota/pods_per_cluster_standard/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"container.googleapis.com/NodePool\",\n              \"metrics\": [\n                \"container.googleapis.com/quota/nodes_per_node_pool\",\n                \"container.googleapis.com/quota/quota/nodes_per_node_pool/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"container.googleapis.com/Cluster\",\n              \"metrics\": [\n                \"container.googleapis.com/quota/quota/containers_per_cluster_autopilot/limit\",\n                \"container.googleapis.com/quota/quota/containers_per_cluster_autopilot/usage\",\n                \"container.googleapis.com/quota/quota/containers_per_cluster_standard/limit\",\n                \"container.googleapis.com/quota/quota/containers_per_cluster_standard/usage\",\n                \"container.googleapis.com/quota/quota/etcd_database_size_bytes/limit\",\n                \"container.googleapis.com/quota/quota/etcd_database_size_bytes/usage\",\n                \"container.googleapis.com/quota/quota/etcd_database_size_gib/limit\",\n                \"container.googleapis.com/quota/quota/etcd_database_size_gib/usage\",\n                \"container.googleapis.com/quota/quota/nodes_per_cluster/limit\",\n                \"container.googleapis.com/quota/quota/nodes_per_cluster/usage\",\n                \"container.googleapis.com/quota/quota/pods_per_cluster_autopilot/limit\",\n                \"container.googleapis.com/quota/quota/pods_per_cluster_autopilot/usage\",\n                \"container.googleapis.com/quota/quota/pods_per_cluster_standard/limit\",\n                \"container.googleapis.com/quota/quota/pods_per_cluster_standard/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"container.googleapis.com/NodePool\",\n              \"metrics\": [\n                \"container.googleapis.com/quota/quota/nodes_per_node_pool/limit\",\n                \"container.googleapis.com/quota/quota/nodes_per_node_pool/usage\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345001\"\n    },\n    {\n      \"name\": \"projects/12345001/services/containeranalysis.googleapis.com\",\n      \"config\": {\n        \"name\": \"containeranalysis.googleapis.com\",\n        \"title\": \"Container Analysis API\",\n        \"documentation\": {\n          \"summary\": \"This API is a prerequisite for leveraging Artifact Analysis scanning\\ncapabilities in both Artifact Registry and with Advanced Vulnerability\\nInsights (runtime scanning) in GKE.\\n\\nIn addition, the Container Analysis API is an implementation of the Grafeas\\nAPI, which enables storing, querying, and retrieval of critical metadata\\nabout all of your software artifacts.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345001\"\n    },\n    {\n      \"name\": \"projects/12345001/services/containerfilesystem.googleapis.com\",\n      \"config\": {\n        \"name\": \"containerfilesystem.googleapis.com\",\n        \"title\": \"Container File System API\",\n        \"documentation\": {\n          \"summary\": \"Stream images stored in Artifact Registry to GKE\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345001\"\n    },\n    {\n      \"name\": \"projects/12345001/services/containerregistry.googleapis.com\",\n      \"config\": {\n        \"name\": \"containerregistry.googleapis.com\",\n        \"title\": \"Container Registry API\",\n        \"documentation\": {\n          \"summary\": \"Google Container Registry provides secure, private Docker image storage on Google Cloud Platform.  Our API follows the Docker Registry API specification, so we are fully compatible with the Docker CLI client, as well as standard tooling using the Docker Registry API.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345001\"\n    },\n    {\n      \"name\": \"projects/12345001/services/containerscanning.googleapis.com\",\n      \"config\": {\n        \"name\": \"containerscanning.googleapis.com\",\n        \"title\": \"Container Scanning API\",\n        \"documentation\": {\n          \"summary\": \"A service to scan containers for vulnerabilities.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"serviceruntime.googleapis.com/api\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_version\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_method\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/consumer_project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/consumer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/producer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/consumer_resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/api\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/api/consumer/request_count\",\n                \"serviceruntime.googleapis.com/api/consumer/error_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_used_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_refund_count\",\n                \"serviceruntime.googleapis.com/api/consumer/total_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_overhead_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/backend_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/response_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer\",\n                \"serviceruntime.googleapis.com/quota/used\",\n                \"serviceruntime.googleapis.com/quota/limit\",\n                \"serviceruntime.googleapis.com/quota/exceeded\",\n                \"serviceruntime.googleapis.com/allocation/consumer/quota_used_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/consumer_quota\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/quota/rate/consumer/used_count\",\n                \"serviceruntime.googleapis.com/quota/rate/consumer/refund_count\",\n                \"serviceruntime.googleapis.com/quota/allocation/consumer/usage\",\n                \"serviceruntime.googleapis.com/quota/consumer/limit\",\n                \"serviceruntime.googleapis.com/quota/consumer/exceeded\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345001\"\n    },\n    {\n      \"name\": \"projects/12345001/services/containerthreatdetection.googleapis.com\",\n      \"config\": {\n        \"name\": \"containerthreatdetection.googleapis.com\",\n        \"title\": \"Container Threat Detection API\",\n        \"documentation\": {},\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345001\"\n    },\n    {\n      \"name\": \"projects/12345001/services/dataflow.googleapis.com\",\n      \"config\": {\n        \"name\": \"dataflow.googleapis.com\",\n        \"title\": \"Dataflow API\",\n        \"documentation\": {\n          \"summary\": \"Manages Google Cloud Dataflow projects on Google Cloud Platform.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/billing-enabled\",\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"dataflow.googleapis.com/Project\",\n            \"displayName\": \"Dataflow Project\",\n            \"description\": \"A project level monitored resource for Dataflow.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as \\\"my-project\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location where Dataflow jobs are running.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"dataflow.googleapis.com/Project\",\n              \"metrics\": [\n                \"dataflow.googleapis.com/quota/region_endpoint_shuffle_slot/exceeded\",\n                \"dataflow.googleapis.com/region_endpoint_shuffle_slot\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"dataflow.googleapis.com/Project\",\n              \"metrics\": [\n                \"dataflow.googleapis.com/quota/region_endpoint_shuffle_slot/limit\",\n                \"dataflow.googleapis.com/quota/region_endpoint_shuffle_slot/usage\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345001\"\n    },\n    {\n      \"name\": \"projects/12345001/services/dataform.googleapis.com\",\n      \"config\": {\n        \"name\": \"dataform.googleapis.com\",\n        \"title\": \"Dataform API\",\n        \"documentation\": {\n          \"summary\": \"Service to develop, version control, and operationalize SQL pipelines in BigQuery.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345001\"\n    },\n    {\n      \"name\": \"projects/12345001/services/datafusion.googleapis.com\",\n      \"config\": {\n        \"name\": \"datafusion.googleapis.com\",\n        \"title\": \"Cloud Data Fusion API\",\n        \"documentation\": {\n          \"summary\": \"Cloud Data Fusion is a fully-managed, cloud native, enterprise data integration service for\\n    quickly building and managing data pipelines. It provides a graphical interface to increase\\n    time efficiency and reduce complexity, and allows business users, developers, and data\\n    scientists to easily and reliably build scalable data integration solutions to cleanse,\\n    prepare, blend, transfer and transform data without having to wrestle with infrastructure.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"datafusion.googleapis.com/Pipeline\",\n            \"displayName\": \"Pipeline\",\n            \"description\": \"A deployed Pipeline in a Cloud Data Fusion instance.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The ID of the customer project.\"\n              },\n              {\n                \"key\": \"org_id\",\n                \"description\": \"The ID of the organization that the customer project belongs to.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The zone/region that the instance is hosted in.\"\n              },\n              {\n                \"key\": \"edition\",\n                \"description\": \"The edition of the instance.\"\n              },\n              {\n                \"key\": \"is_private\",\n                \"description\": \"Does the instance use private IP.\"\n              },\n              {\n                \"key\": \"instance_id\",\n                \"description\": \"The instance ID.\"\n              },\n              {\n                \"key\": \"compute_engine\",\n                \"description\": \"The compute engine used for this Pipeline (MapReduce or Spark).\"\n              },\n              {\n                \"key\": \"pipeline_id\",\n                \"description\": \"The Pipeline ID.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"datafusion.googleapis.com/Instance\",\n            \"displayName\": \"Instance\",\n            \"description\": \"An instance of Cloud Data Fusion.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The ID of the customer project.\"\n              },\n              {\n                \"key\": \"org_id\",\n                \"description\": \"The ID of the organization that the customer project belongs to.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The zone/region that the instance is hosted in.\"\n              },\n              {\n                \"key\": \"version\",\n                \"description\": \"The data plane version of the instance.\"\n              },\n              {\n                \"key\": \"edition\",\n                \"description\": \"The edition of the instance.\"\n              },\n              {\n                \"key\": \"is_private\",\n                \"description\": \"Does the instance use private IP.\"\n              },\n              {\n                \"key\": \"instance_id\",\n                \"description\": \"The instance ID.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"datafusion.googleapis.com/Plugin\",\n            \"displayName\": \"Plugin\",\n            \"description\": \"An instance of a plugin in a deployed pipeline.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The ID of the customer project.\"\n              },\n              {\n                \"key\": \"org_id\",\n                \"description\": \"The ID of the organization that the customer project belongs to.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The zone/region that the instance is hosted in.\"\n              },\n              {\n                \"key\": \"instance_id\",\n                \"description\": \"The instance ID.\"\n              },\n              {\n                \"key\": \"edition\",\n                \"description\": \"The edition of the instance.\"\n              },\n              {\n                \"key\": \"is_private\",\n                \"description\": \"Does the instance use private IP.\"\n              },\n              {\n                \"key\": \"plugin_type\",\n                \"description\": \"The type of the plugin.\"\n              },\n              {\n                \"key\": \"plugin_name\",\n                \"description\": \"The name of the plugin.\"\n              },\n              {\n                \"key\": \"plugin_version\",\n                \"description\": \"The version of the plugin.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"datafusion.googleapis.com/MonitoringAgent\",\n            \"displayName\": \"MonitoringAgent\",\n            \"description\": \"An instance of Monitoring Agent in Cloud Data Fusion.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The ID of the customer project.\"\n              },\n              {\n                \"key\": \"org_id\",\n                \"description\": \"The ID of the organization that the customer project belongs to.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The zone/region that the instance is hosted in.\"\n              },\n              {\n                \"key\": \"version\",\n                \"description\": \"The data plane version of the instance.\"\n              },\n              {\n                \"key\": \"edition\",\n                \"description\": \"The edition of the instance.\"\n              },\n              {\n                \"key\": \"is_private\",\n                \"description\": \"Does the instance use private IP.\"\n              },\n              {\n                \"key\": \"instance_id\",\n                \"description\": \"The instance ID.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"datafusion.googleapis.com/ExternalPipeline\",\n            \"displayName\": \"Pipeline\",\n            \"description\": \"A deployed Pipeline in an external (not in GCP) Data Fusion instance.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The ID of the customer project.\"\n              },\n              {\n                \"key\": \"org_id\",\n                \"description\": \"The ID of the organization that the customer project belongs to.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The GCP region where to store metrics.\"\n              },\n              {\n                \"key\": \"cluster_id\",\n                \"description\": \"Cluster ID that the instance is hosted in.\"\n              },\n              {\n                \"key\": \"instance_id\",\n                \"description\": \"The instance ID.\"\n              },\n              {\n                \"key\": \"pipeline_id\",\n                \"description\": \"The Pipeline ID.\"\n              },\n              {\n                \"key\": \"version\",\n                \"description\": \"The data plane version of the instance.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"datafusion.googleapis.com/ExternalInstance\",\n            \"displayName\": \"Instance\",\n            \"description\": \"An instance of external (not in GCP) Data Fusion.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The ID of the customer project.\"\n              },\n              {\n                \"key\": \"org_id\",\n                \"description\": \"The ID of the organization that the customer project belongs to.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The GCP region where to store metrics.\"\n              },\n              {\n                \"key\": \"cluster_id\",\n                \"description\": \"Cluster ID that the instance is hosted in.\"\n              },\n              {\n                \"key\": \"version\",\n                \"description\": \"The data plane version of the instance.\"\n              },\n              {\n                \"key\": \"instance_id\",\n                \"description\": \"The instance ID.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"datafusion.googleapis.com/ExternalPlugin\",\n            \"displayName\": \"Plugin\",\n            \"description\": \"An instance of a plugin in a deployed pipeline in an external (not in GCP) Data Fusion instance.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The ID of the customer project.\"\n              },\n              {\n                \"key\": \"org_id\",\n                \"description\": \"The ID of the organization that the customer project belongs to.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The zone/region that the instance is hosted in.\"\n              },\n              {\n                \"key\": \"instance_id\",\n                \"description\": \"The instance ID.\"\n              },\n              {\n                \"key\": \"plugin_type\",\n                \"description\": \"The type of the plugin.\"\n              },\n              {\n                \"key\": \"plugin_name\",\n                \"description\": \"The name of the plugin.\"\n              },\n              {\n                \"key\": \"plugin_version\",\n                \"description\": \"The version of the plugin.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"datafusion.googleapis.com/ExternalMonitoringAgent\",\n            \"displayName\": \"MonitoringAgent\",\n            \"description\": \"An instance of external Monitoring Agent (not in GCP).\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The ID of the customer project.\"\n              },\n              {\n                \"key\": \"org_id\",\n                \"description\": \"The ID of the organization that the customer project belongs to.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The zone/region that the instance is hosted in.\"\n              },\n              {\n                \"key\": \"version\",\n                \"description\": \"The data plane version of the instance.\"\n              },\n              {\n                \"key\": \"instance_id\",\n                \"description\": \"The instance ID.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"datafusion.googleapis.com/Pipeline\",\n              \"metrics\": [\n                \"datafusion.googleapis.com/pipeline/runs_completed_count\",\n                \"datafusion.googleapis.com/pipeline/plugin/records_in_count\",\n                \"datafusion.googleapis.com/pipeline/plugin/records_out_count\",\n                \"datafusion.googleapis.com/pipeline/plugin/bytes_in_count\",\n                \"datafusion.googleapis.com/pipeline/plugin/bytes_out_count\",\n                \"datafusion.googleapis.com/pipeline/dataproc/provisioning_latency\",\n                \"datafusion.googleapis.com/pipeline/dataproc/api_request_count\",\n                \"datafusion.googleapis.com/pipeline/pipeline_run_time\",\n                \"datafusion.googleapis.com/pipeline/preview_run_time\",\n                \"datafusion.googleapis.com/pipeline/bytes_read_count\",\n                \"datafusion.googleapis.com/pipeline/bytes_shuffled_count\",\n                \"datafusion.googleapis.com/pipeline/bytes_written_count\",\n                \"datafusion.googleapis.com/pipeline/plugin_count\",\n                \"datafusion.googleapis.com/instance/tms_persist_count\",\n                \"datafusion.googleapis.com/instance/tms_subscriber_fetch_count\",\n                \"datafusion.googleapis.com/instance/tms_subscriber_fetch_time\",\n                \"datafusion.googleapis.com/instance/tms_subscriber_process_delay\",\n                \"datafusion.googleapis.com/instance/tms_subscriber_process_duration\",\n                \"datafusion.googleapis.com/pipeline/pipeline_start_latency\",\n                \"datafusion.googleapis.com/pipeline/logs_count\",\n                \"datafusion.googleapis.com/pipeline/failed_runs_classified_count\",\n                \"datafusion.googleapis.com/pipeline/schedule_job_count\",\n                \"datafusion.googleapis.com/pipeline/schedule_job_latency\",\n                \"datafusion.googleapis.com/pipeline/schedule_job_notification_failure_count\",\n                \"datafusion.googleapis.com/pipeline/bqpushdown/engine_bytes_billed_count\",\n                \"datafusion.googleapis.com/pipeline/bqpushdown/engine_bytes_processed_count\",\n                \"datafusion.googleapis.com/pipeline/bqpushdown/engine_slot_count\",\n                \"datafusion.googleapis.com/pipeline/bqpushdown/records_in_count\",\n                \"datafusion.googleapis.com/pipeline/bqpushdown/records_out_count\",\n                \"datafusion.googleapis.com/pipeline/bqpushdown/records_pulled_count\",\n                \"datafusion.googleapis.com/pipeline/bqpushdown/records_pushed_count\",\n                \"datafusion.googleapis.com/pipeline/bqpushdown/stages_count\",\n                \"datafusion.googleapis.com/pipeline/bqpushdown/stages_join_count\",\n                \"datafusion.googleapis.com/pipeline/bqpushdown/stages_transform_count\",\n                \"datafusion.googleapis.com/pipeline/bqpushdown/stages_pulled_count\",\n                \"datafusion.googleapis.com/pipeline/bqpushdown/stages_pushed_count\",\n                \"datafusion.googleapis.com/pipeline/bqpushdown/stages_spark_pulled_count\",\n                \"datafusion.googleapis.com/pipeline/bqpushdown/stages_spark_pushed_count\",\n                \"datafusion.googleapis.com/pipeline/bqpushdown/stages_read_count\",\n                \"datafusion.googleapis.com/pipeline/bqpushdown/stages_write_count\",\n                \"datafusion.googleapis.com/pipeline/streaming_multi_source_count\",\n                \"datafusion.googleapis.com/pipeline/streaming_atleastonce_count\",\n                \"datafusion.googleapis.com/pipeline/state_store_access_count\",\n                \"datafusion.googleapis.com/pipeline/state_store_access_latency\",\n                \"datafusion.googleapis.com/pipeline/program_status_event_published_count\",\n                \"datafusion.googleapis.com/pipeline/program_status_event_spark_metrics_fetch_latency\",\n                \"datafusion.googleapis.com/pipeline/deploy_event_count\",\n                \"datafusion.googleapis.com/pipeline/create_deploy_event_count\",\n                \"datafusion.googleapis.com/pipeline/edit_deploy_event_count\",\n                \"datafusion.googleapis.com/pipeline/upgrade_deploy_event_count\",\n                \"datafusion.googleapis.com/pipeline/wrangler_directive_count\",\n                \"datafusion.googleapis.com/pipeline/wrangler_jexl_category_count\",\n                \"datafusion.googleapis.com/pipeline/wrangler_hash_algo_count\",\n                \"datafusion.googleapis.com/pipeline/lineage/attempted_calls_count\",\n                \"datafusion.googleapis.com/pipeline/lineage/failed_calls_count\",\n                \"datafusion.googleapis.com/pipeline/lineage/processes_count\",\n                \"datafusion.googleapis.com/pipeline/lineage/runs_count\",\n                \"datafusion.googleapis.com/pipeline/lineage/lineage_events_count\",\n                \"datafusion.googleapis.com/pipeline/bytes_processed_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"datafusion.googleapis.com/Instance\",\n              \"metrics\": [\n                \"datafusion.googleapis.com/instance/api_request_count\",\n                \"datafusion.googleapis.com/instance/api_request_received_count\",\n                \"datafusion.googleapis.com/instance/metric_emitted_count\",\n                \"datafusion.googleapis.com/instance/service_available\",\n                \"datafusion.googleapis.com/instance/pipeline_count\",\n                \"datafusion.googleapis.com/instance/concurrent_pipeline_launches_count\",\n                \"datafusion.googleapis.com/instance/concurrent_pipeline_running_count\",\n                \"datafusion.googleapis.com/instance/draft_count\",\n                \"datafusion.googleapis.com/instance/namespace_count\",\n                \"datafusion.googleapis.com/instance/pod_restart_count\",\n                \"datafusion.googleapis.com/instance/pod_status\",\n                \"datafusion.googleapis.com/instance/api_response_times\",\n                \"datafusion.googleapis.com/instance/system_logs_count\",\n                \"datafusion.googleapis.com/instance/log_event_queue_size\",\n                \"datafusion.googleapis.com/instance/log_process_min_delay\",\n                \"datafusion.googleapis.com/instance/log_process_max_delay\",\n                \"datafusion.googleapis.com/instance/log_process_count\",\n                \"datafusion.googleapis.com/instance/authorization_check_count\",\n                \"datafusion.googleapis.com/instance/authorization_check_time\",\n                \"datafusion.googleapis.com/instance/pipeline_connection_request_count\",\n                \"datafusion.googleapis.com/instance/heap_memory_used\",\n                \"datafusion.googleapis.com/instance/heap_memory_max\",\n                \"datafusion.googleapis.com/instance/cpu_load_per_processor_scaled\",\n                \"datafusion.googleapis.com/instance/total_thread_count\",\n                \"datafusion.googleapis.com/instance/source_control_management/git_operation_times\",\n                \"datafusion.googleapis.com/instance/source_control_management/repository_sizes\",\n                \"datafusion.googleapis.com/instance/workload_identity_namespaces\",\n                \"datafusion.googleapis.com/instance/credential_identities\",\n                \"datafusion.googleapis.com/instance/credential_profiles\",\n                \"datafusion.googleapis.com/instance/source_control_management/total_operation_count\",\n                \"datafusion.googleapis.com/instance/source_control_management/total_app_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"datafusion.googleapis.com/Plugin\",\n              \"metrics\": [\n                \"datafusion.googleapis.com/plugin/deployed_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"datafusion.googleapis.com/MonitoringAgent\",\n              \"metrics\": [\n                \"datafusion.googleapis.com/monitoring_agent/workers\",\n                \"datafusion.googleapis.com/monitoring_agent/pipeline_logs_count\",\n                \"datafusion.googleapis.com/monitoring_agent/system_logs_count\",\n                \"datafusion.googleapis.com/monitoring_agent/logs_process_duration\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"datafusion.googleapis.com/ExternalPipeline\",\n              \"metrics\": [\n                \"datafusion.googleapis.com/external_pipeline/runs_completed_count\",\n                \"datafusion.googleapis.com/external_pipeline/failed_runs_classified_count\",\n                \"datafusion.googleapis.com/external_pipeline/pipeline_run_time\",\n                \"datafusion.googleapis.com/external_pipeline/preview_run_time\",\n                \"datafusion.googleapis.com/external_pipeline/plugin_count\",\n                \"datafusion.googleapis.com/external_pipeline/provisioner/provisioning_latency\",\n                \"datafusion.googleapis.com/external_pipeline/streaming_multi_source_count\",\n                \"datafusion.googleapis.com/external_pipeline/streaming_atleastonce_count\",\n                \"datafusion.googleapis.com/external_pipeline/state_store_access_count\",\n                \"datafusion.googleapis.com/external_pipeline/state_store_access_latency\",\n                \"datafusion.googleapis.com/external_pipeline/deploy_event_count\",\n                \"datafusion.googleapis.com/external_pipeline/create_deploy_event_count\",\n                \"datafusion.googleapis.com/external_pipeline/edit_deploy_event_count\",\n                \"datafusion.googleapis.com/external_pipeline/upgrade_deploy_event_count\",\n                \"datafusion.googleapis.com/external_pipeline/bytes_processed_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"datafusion.googleapis.com/ExternalInstance\",\n              \"metrics\": [\n                \"datafusion.googleapis.com/external_instance/api_request_count\",\n                \"datafusion.googleapis.com/external_instance/heap_memory_used\",\n                \"datafusion.googleapis.com/external_instance/heap_memory_max\",\n                \"datafusion.googleapis.com/external_instance/cpu_load_per_processor_scaled\",\n                \"datafusion.googleapis.com/external_instance/total_thread_count\",\n                \"datafusion.googleapis.com/external_instance/service_available\",\n                \"datafusion.googleapis.com/external_instance/pipeline_count\",\n                \"datafusion.googleapis.com/external_instance/draft_count\",\n                \"datafusion.googleapis.com/external_instance/namespace_count\",\n                \"datafusion.googleapis.com/external_instance/pod_restart_count\",\n                \"datafusion.googleapis.com/external_instance/pod_status\",\n                \"datafusion.googleapis.com/external_instance/metric_emitted_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"datafusion.googleapis.com/ExternalPlugin\",\n              \"metrics\": [\n                \"datafusion.googleapis.com/external_plugin/deployed_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"datafusion.googleapis.com/ExternalMonitoringAgent\",\n              \"metrics\": [\n                \"datafusion.googleapis.com/external_monitoring_agent/workers\",\n                \"datafusion.googleapis.com/external_monitoring_agent/pipeline_logs_count\",\n                \"datafusion.googleapis.com/external_monitoring_agent/system_logs_count\",\n                \"datafusion.googleapis.com/external_monitoring_agent/logs_process_duration\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345001\"\n    },\n    {\n      \"name\": \"projects/12345001/services/datamigration.googleapis.com\",\n      \"config\": {\n        \"name\": \"datamigration.googleapis.com\",\n        \"title\": \"Database Migration API\",\n        \"documentation\": {\n          \"summary\": \"Manage Cloud Database Migration Service resources on Google Cloud Platform.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"datamigration.googleapis.com/MigrationJob\",\n            \"displayName\": \"Database migration service migration job\",\n            \"description\": \"Database migration service migration job.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The resource container (project ID).\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location.\"\n              },\n              {\n                \"key\": \"migration_job_id\",\n                \"description\": \"The migration job ID.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"datamigration.googleapis.com/MigrationJob\",\n              \"metrics\": [\n                \"datamigration.googleapis.com/migration_job/max_replica_bytes_lag\",\n                \"datamigration.googleapis.com/migration_job/max_replica_sec_lag\",\n                \"datamigration.googleapis.com/migration_job/initial_sync_complete\",\n                \"datamigration.googleapis.com/migration_job/write_bytes_count\",\n                \"datamigration.googleapis.com/migration_job/write_rows_count\",\n                \"datamigration.googleapis.com/internal/migration_job/worker/state\",\n                \"datamigration.googleapis.com/internal/migration_job/worker/last_processing_completion_timestamp\",\n                \"datamigration.googleapis.com/migration_job/sqlserver/processed_file_bytes_count\",\n                \"datamigration.googleapis.com/migration_job/sqlserver/processed_file_count\",\n                \"datamigration.googleapis.com/migration_job/sqlserver/unprocessed_file_bytes\",\n                \"datamigration.googleapis.com/migration_job/sqlserver/unprocessed_files\",\n                \"datamigration.googleapis.com/migration_job/sqlserver/transaction_log_upload_sec_lag\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"datamigration.googleapis.com/MigrationJob\",\n              \"metrics\": [\n                \"datamigration.googleapis.com/internal/migration_job/worker/input_bytes_count\",\n                \"datamigration.googleapis.com/internal/migration_job/worker/output_bytes_count\",\n                \"datamigration.googleapis.com/internal/migration_job/worker/input_rows_count\",\n                \"datamigration.googleapis.com/internal/migration_job/worker/output_rows_count\",\n                \"datamigration.googleapis.com/internal/migration_job/worker/processing_times\",\n                \"datamigration.googleapis.com/internal/migration_job/worker/total_lags\",\n                \"datamigration.googleapis.com/internal/migration_job/worker/max_replica_sec_lag\",\n                \"datamigration.googleapis.com/internal/migration_job/sqlserver/processed_file_bytes_count\",\n                \"datamigration.googleapis.com/internal/migration_job/sqlserver/processed_file_count\",\n                \"datamigration.googleapis.com/internal/migration_job/sqlserver/unprocessed_file_bytes\",\n                \"datamigration.googleapis.com/internal/migration_job/sqlserver/unprocessed_files\",\n                \"datamigration.googleapis.com/internal/migration_job/sqlserver/transaction_log_upload_sec_lag\",\n                \"datamigration.googleapis.com/internal/migration_job/worker/max_replica_bytes_lag\",\n                \"datamigration.googleapis.com/internal/migration_job/worker/processed_tasks_count\",\n                \"datamigration.googleapis.com/internal/migration_job/worker/processed_rows_lag\",\n                \"datamigration.googleapis.com/internal/migration_job/worker/sql_max_open_connections\",\n                \"datamigration.googleapis.com/internal/migration_job/worker/sql_open_connections\",\n                \"datamigration.googleapis.com/internal/migration_job/worker/sql_connection_wait\",\n                \"datamigration.googleapis.com/internal/migration_job/worker/sql_connection_wait_sec\",\n                \"datamigration.googleapis.com/internal/migration_job/worker/sql_connection_max_closed\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345001\"\n    },\n    {\n      \"name\": \"projects/12345001/services/dataproc-control.googleapis.com\",\n      \"config\": {\n        \"name\": \"dataproc-control.googleapis.com\",\n        \"title\": \"Cloud Dataproc Control API\",\n        \"documentation\": {\n          \"summary\": \"Manages internal resources for Google Cloud Dataproc.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345001\"\n    },\n    {\n      \"name\": \"projects/12345001/services/dataproc.googleapis.com\",\n      \"config\": {\n        \"name\": \"dataproc.googleapis.com\",\n        \"title\": \"Cloud Dataproc API\",\n        \"documentation\": {\n          \"summary\": \"Manages Hadoop-based clusters and jobs on Google Cloud Platform.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345001\"\n    },\n    {\n      \"name\": \"projects/12345001/services/datastore.googleapis.com\",\n      \"config\": {\n        \"name\": \"datastore.googleapis.com\",\n        \"title\": \"Cloud Datastore API\",\n        \"documentation\": {\n          \"summary\": \"Accesses the schemaless NoSQL database to provide fully managed, robust, scalable storage for your application.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345001\"\n    },\n    {\n      \"name\": \"projects/12345001/services/datastudio.googleapis.com\",\n      \"config\": {\n        \"name\": \"datastudio.googleapis.com\",\n        \"title\": \"Looker Studio API\",\n        \"documentation\": {\n          \"summary\": \"Allows programmatic viewing and editing of Looker Studio assets.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/universal\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345001\"\n    },\n    {\n      \"name\": \"projects/12345001/services/deploymentmanager.googleapis.com\",\n      \"config\": {\n        \"name\": \"deploymentmanager.googleapis.com\",\n        \"title\": \"Cloud Deployment Manager V2 API\",\n        \"documentation\": {\n          \"summary\": \"The Google Cloud Deployment Manager v2 API provides services for configuring, deploying, and\\nviewing Google Cloud services and APIs via templates which specify deployments of Cloud\\nresources.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345001\"\n    },\n    {\n      \"name\": \"projects/12345001/services/dialogflow.googleapis.com\",\n      \"config\": {\n        \"name\": \"dialogflow.googleapis.com\",\n        \"title\": \"Dialogflow API\",\n        \"documentation\": {\n          \"summary\": \"Builds conversational interfaces (for example, chatbots, and voice-powered apps and devices).\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"dialogflow.googleapis.com/Location\",\n            \"displayName\": \"Dialogflow Location\",\n            \"description\": \"A Dialogflow Location (sometimes called Region).\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The id of the GCP resource container associated with this resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"dialogflow.googleapis.com/Location\",\n              \"metrics\": [\n                \"dialogflow.googleapis.com/location/phone_call_count\",\n                \"dialogflow.googleapis.com/location/phone_call_duration_count\",\n                \"dialogflow.googleapis.com/quota/generator_suggestion_operations_per_model_type/exceeded\",\n                \"dialogflow.googleapis.com/quota/generator_suggestion_operations_per_model_type/usage\",\n                \"dialogflow.googleapis.com/quota/generator_suggestion_operations_per_model_type_per_region/exceeded\",\n                \"dialogflow.googleapis.com/quota/generator_suggestion_operations_per_model_type_per_region/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"dialogflow.googleapis.com/Location\",\n              \"metrics\": [\n                \"dialogflow.googleapis.com/quota/generator_suggestion_operations_per_model_type/limit\",\n                \"dialogflow.googleapis.com/quota/generator_suggestion_operations_per_model_type_per_region/limit\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345001\"\n    },\n    {\n      \"name\": \"projects/12345001/services/directions-backend.googleapis.com\",\n      \"config\": {\n        \"name\": \"directions-backend.googleapis.com\",\n        \"title\": \"Directions API\",\n        \"documentation\": {\n          \"summary\": \"Access driving, cycling, walking and public transportation routing with the\\n    Directions API using an HTTP request. Waypoints offer the\\n    ability to alter a route through a specific location. Specify origins,\\n    destinations and waypoints either as text strings (e.g. \\\"Chicago, IL\\\" or\\n    \\\"Darwin, NT, Australia\\\") or as latitude/longitude coordinates.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/maps\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"serviceruntime.googleapis.com/api\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_version\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_method\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/consumer_project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/consumer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/producer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/consumer_resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/api\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/api/consumer/quota_used_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_refund_count\",\n                \"serviceruntime.googleapis.com/quota/used\",\n                \"serviceruntime.googleapis.com/quota/limit\",\n                \"serviceruntime.googleapis.com/quota/exceeded\",\n                \"serviceruntime.googleapis.com/allocation/consumer/quota_used_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/consumer_quota\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/quota/rate/consumer/used_count\",\n                \"serviceruntime.googleapis.com/quota/rate/consumer/refund_count\",\n                \"serviceruntime.googleapis.com/quota/allocation/consumer/usage\",\n                \"serviceruntime.googleapis.com/quota/consumer/limit\",\n                \"serviceruntime.googleapis.com/quota/consumer/exceeded\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345001\"\n    },\n    {\n      \"name\": \"projects/12345001/services/distance-matrix-backend.googleapis.com\",\n      \"config\": {\n        \"name\": \"distance-matrix-backend.googleapis.com\",\n        \"title\": \"Distance Matrix API\",\n        \"documentation\": {\n          \"summary\": \"Access travel distance and time for a matrix of origins and destinations\\n    with the Distance Matrix API. The information returned is based\\n    on the recommended route between start and end points and consists of rows\\n    containing duration and distance values for each pair.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/maps\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"serviceruntime.googleapis.com/api\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_version\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_method\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/consumer_project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/consumer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/producer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/consumer_resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/api\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/api/consumer/quota_used_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_refund_count\",\n                \"serviceruntime.googleapis.com/quota/used\",\n                \"serviceruntime.googleapis.com/quota/limit\",\n                \"serviceruntime.googleapis.com/quota/exceeded\",\n                \"serviceruntime.googleapis.com/allocation/consumer/quota_used_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/consumer_quota\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/quota/rate/consumer/used_count\",\n                \"serviceruntime.googleapis.com/quota/rate/consumer/refund_count\",\n                \"serviceruntime.googleapis.com/quota/allocation/consumer/usage\",\n                \"serviceruntime.googleapis.com/quota/consumer/limit\",\n                \"serviceruntime.googleapis.com/quota/consumer/exceeded\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345001\"\n    },\n    {\n      \"name\": \"projects/12345001/services/dlp.googleapis.com\",\n      \"config\": {\n        \"name\": \"dlp.googleapis.com\",\n        \"title\": \"Sensitive Data Protection (DLP)\",\n        \"documentation\": {\n          \"summary\": \"Discover and protect your sensitive data. A fully managed service designed to help you discover, classify, and protect your valuable data assets with ease.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/billing-enabled\",\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345001\"\n    },\n    {\n      \"name\": \"projects/12345001/services/dns.googleapis.com\",\n      \"config\": {\n        \"name\": \"dns.googleapis.com\",\n        \"title\": \"Cloud DNS API\",\n        \"documentation\": {},\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345001\"\n    },\n    {\n      \"name\": \"projects/12345001/services/domains.googleapis.com\",\n      \"config\": {\n        \"name\": \"domains.googleapis.com\",\n        \"title\": \"Cloud Domains API\",\n        \"documentation\": {\n          \"summary\": \"Enables management and configuration of domain names.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/billing-enabled\",\n            \"serviceusage.googleapis.com/tos/universal\",\n            \"serviceusage.googleapis.com/tos/domains\",\n            \"serviceusage.googleapis.com/tos/tlds\",\n            \"serviceusage.googleapis.com/tos/keysystems\",\n            \"serviceusage.googleapis.com/tos/whoisprivacy\",\n            \"serviceusage.googleapis.com/tos/squarespace\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345001\"\n    }\n  ],\n  \"nextPageToken\": \"choKGEIWZG9tYWlucy5nb29nbGVhcGlzLmNvbQ==\"\n}\n"
  },
  {
    "path": "test-data/gce3/orgpolicy.tf",
    "content": ""
  },
  {
    "path": "test-data/gce3/project.tf",
    "content": "/**\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nprovider \"google\" {\n  project = var.project_id\n}\n\nresource \"random_string\" \"project_id_suffix\" {\n  length  = 8\n  lower   = true\n  upper   = false\n  special = false\n}\n\nresource \"google_project_service\" \"compute\" {\n  project = data.google_project.project.project_id\n  service = \"compute.googleapis.com\"\n}\n\nresource \"google_project_service\" \"logging\" {\n  project = data.google_project.project.project_id\n  service = \"logging.googleapis.com\"\n}\n\nresource \"google_project_service\" \"monitoring\" {\n  project = data.google_project.project.project_id\n  service = \"monitoring.googleapis.com\"\n}\n\nresource \"google_project_service\" \"osconfig\" {\n  project = data.google_project.project.project_id\n  service = \"osconfig.googleapis.com\"\n}\n\nresource \"google_compute_project_metadata_item\" \"serial_logging\" {\n  project    = data.google_project.project.project_id\n  depends_on = [google_project_service.compute]\n  key        = \"serial-port-logging-enable\"\n  value      = \"true\"\n}\n\ndata \"google_project\" \"project\" {\n  project_id = var.project_id\n}\n\ndata \"google_compute_image\" \"debian\" {\n  family  = \"debian-11\"\n  project = \"debian-cloud\"\n}\n\ndata \"google_compute_default_service_account\" \"default\" {\n  project    = data.google_project.project.project_id\n  depends_on = [google_project_service.compute]\n}\n\nresource \"google_service_account\" \"no_log_metric_perm_service_account\" {\n  account_id   = \"no-logging-monitoring-perm\"\n  project      = data.google_project.project.project_id\n  display_name = \"Service Account without monitoring or logging permissions\"\n}\n\n\noutput \"project_id\" {\n  value = data.google_project.project.project_id\n}\n\noutput \"project_id_suffix\" {\n  value = random_string.project_id_suffix.id\n}\n\noutput \"project_nr\" {\n  value = data.google_project.project.number\n}\n\noutput \"org_id\" {\n  value = var.org_id\n}\n\n/**\nmodule \"agent_policy\" {\n  source  = \"terraform-google-modules/cloud-operations/google//modules/agent-policy\"\n  version = \"~> 0.2.4\"\n\n  project_id = data.google_project.project.project_id\n  policy_id  = \"ops-agents-example-policy\"\n  agent_rules = [\n    {\n      type               = \"logging\"\n      version            = \"current-major\"\n      package_state      = \"installed\"\n      enable_autoupgrade = true\n    },\n    {\n      type               = \"metrics\"\n      version            = \"current-major\"\n      package_state      = \"installed\"\n      enable_autoupgrade = true\n    },\n  ]\n  group_labels = [\n    {\n      env = \"valid\"\n    }\n  ]\n  os_types = [\n    {\n      short_name = \"debian\"\n      version    = \"11\"\n    },\n  ]\n}\n**/\n"
  },
  {
    "path": "test-data/gce3/terraform",
    "content": "#!/bin/sh\n\n# terraform wrapper using docker\n\nUSE_TTY=\"\"\nCWD=$(pwd)\n[ -t 0 ] && USE_TTY=\"-it\"\n\nexec docker run $USE_TTY \\\n  --rm \\\n  -u \"$(id -u):$(id -g)\" \\\n  -e \"USER=$(id -n -u)\" \\\n  -e \"GROUP=$(id -n -g)\" \\\n  -e \"HOME=$HOME\" \\\n  -e \"LANG=$LANG\" \\\n  -e \"SHELL=/bin/bash\" \\\n  -v \"$CWD:$CWD\" \\\n  -v \"$HOME/.config/gcloud:/home/.config/gcloud\" \\\n  -w \"$CWD\" \\\n  mirror.gcr.io/hashicorp/terraform:light \"$@\"\n"
  },
  {
    "path": "test-data/gce3/variables.tf",
    "content": "variable \"billing_account_id\" {}\n\nvariable \"org_id\" {}\nvariable \"folder_id\" { default = \"\" }\nvariable \"project_id\" {}\n\nvariable \"roles\" {\n  description = \"List of logging and monitoring related roles to assign to default SA\"\n  type        = list(string)\n  default = [\n    \"roles/owner\",\n    \"roles/logging.admin\",\n    \"roles/logging.logWriter\",\n    \"roles/monitoring.admin\",\n    \"roles/monitoring.metricWriter\"\n  ]\n}\n"
  },
  {
    "path": "test-data/gce3/working-opsagent.tf",
    "content": "/**\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nresource \"google_compute_instance\" \"working_opsagent\" {\n  project        = data.google_project.project.project_id\n  depends_on     = [google_project_service.compute]\n  name           = \"working-opsagent\"\n  machine_type   = \"e2-micro\"\n  zone           = \"europe-west2-a\"\n  desired_status = \"RUNNING\"\n  network_interface {\n    network = \"default\"\n  }\n  tags = [\"secured-instance\"]\n  scheduling {\n    preemptible       = true\n    automatic_restart = false\n  }\n  boot_disk {\n    initialize_params {\n      image = data.google_compute_image.debian.self_link\n    }\n  }\n  service_account {\n    email = data.google_compute_default_service_account.default.email\n    scopes = [\n      \"https://www.googleapis.com/auth/devstorage.read_only\",\n      \"https://www.googleapis.com/auth/logging.write\",\n      \"https://www.googleapis.com/auth/monitoring.write\",\n      \"https://www.googleapis.com/auth/service.management.readonly\",\n      \"https://www.googleapis.com/auth/servicecontrol\"\n    ]\n  }\n  labels = {\n    env = \"valid\"\n\n  }\n}\n\nresource \"google_project_iam_member\" \"service_account_member_policy\" {\n  for_each   = { for role in var.roles : role => role }\n  project    = data.google_project.project.project_id\n  role       = each.value\n  member     = \"serviceAccount:${data.google_compute_default_service_account.default.email}\"\n  depends_on = [data.google_compute_default_service_account.default]\n}\n"
  },
  {
    "path": "test-data/gce4/Makefile",
    "content": "PROJECT_ID  := $(shell terraform output -raw project_id)\nPROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix)\nPROJECT_NR  := $(shell terraform output -raw project_nr)\nORG_ID      := $(shell terraform output -raw org_id)\nCURL         = ../../bin/curl-wrap.sh\nJSON_CLEANER = ../../bin/json-cleaner\nZONE_1       = europe-west2-a\n\nFAKE_PROJECT_ID = gcpdiag-gce4-aaaa\nFAKE_PROJECT_ID_SUFFIX = runbook\nFAKE_PROJECT_NR = 123456270\nFAKE_ORG_ID = 11112222\n\nCOMPUTE_INSTANCES_MAXRESULTS=3\n\nINSTANCE_NAME_GCE1=valid-linux-ssh\nINSTANCE_NAME_GCE2=faulty-linux-ssh\nINSTANCE_NAME_GCE3=valid-windows-ssh\nINSTANCE_NAME_GCE4=faulty-windows-ssh\n\nSED_SUBST_FAKE = sed -e \"s/$(PROJECT_ID)/$(FAKE_PROJECT_ID)/\" \\\n\t\t     -e \"s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/\" \\\n\t\t     -e \"s/$(ORG_ID)/$(FAKE_ORG_ID)/\"\n\nall:\t\\\n\tjson-dumps/compute-effective-firewalls-default.json \\\n\tjson-dumps/compute-instances-$(ZONE_1).json \\\n\tjson-dumps/compute-instances-empty.json \\\n\tjson-dumps/compute-disks-$(ZONE_1).json \\\n\tjson-dumps/compute-disks-empty.json \\\n\tjson-dumps/compute-network-default.json \\\n\tjson-dumps/compute-project.json \\\n\tjson-dumps/compute-regions.json \\\n\tjson-dumps/compute-zones.json \\\n\tjson-dumps/iam-policy.json \\\n\tjson-dumps/iam-service-accounts.json \\\n\tjson-dumps/monitoring-query.json \\\n\tjson-dumps/project.json \\\n\tjson-dumps/services.json \\\n\tjson-dumps/compute-serial-port-output-$(INSTANCE_NAME_GCE1).json \\\n\tjson-dumps/compute-serial-port-output-$(INSTANCE_NAME_GCE2).json \\\n\tjson-dumps/compute-serial-port-output-$(INSTANCE_NAME_GCE3).json \\\n\tjson-dumps/compute-serial-port-output-$(INSTANCE_NAME_GCE4).json \\\n\tjson-dumps/global-operations.json\n\ninclude ../Makefile.inc\n\ndefine MONITORING_QUERY\n{ \\\n  \"query\": \"fetch gce_instance \\\n            | metric 'compute.googleapis.com/instance/cpu/utilization' \\\n            | group_by 5m, [value_utilization_max: max(value.utilization)] \\\n            | every 5m \\\n  \t\t\t\t\t\" \\\n}\nendef\njson-dumps/monitoring-query.json:\n\t$(CURL) -fsS \\\n\t\t'https://monitoring.googleapis.com/v3/projects/$(PROJECT_ID)/timeSeries:query' \\\n\t\t--header \"Content-Type: application/json\" -X POST \\\n\t\t--data '$(MONITORING_QUERY)' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-serial-port-output-%.json:\n\t$(CURL) -fsS \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$(ZONE_1)/instances/$*/serialPort?start=-1000000' \\\n\t\t--header \"Content-Type:text/json\" \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-serial-port-output-%.json:\n\t$(CURL) -fsS \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$(ZONE_1)/instances/$*/serialPort?start=-1000000' \\\n\t\t--header \"Content-Type:text/json\" \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-serial-port-output-%.json:\n\t$(CURL) -fsS \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$(ZONE_1)/instances/$*/serialPort?start=-1000000' \\\n\t\t--header \"Content-Type:text/json\" \\\n\t\t| $(SED_SUBST_FAKE) >$@\njson-dumps/compute-serial-port-output-%.json:\n\t$(CURL) -fsS \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$(ZONE_1)/instances/$*/serialPort?start=-1000000' \\\n\t\t--header \"Content-Type:text/json\" \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/global-operations.json:\n\t$(CURL) -fsS \\\n\t  'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/aggregated/operations' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n"
  },
  {
    "path": "test-data/gce4/gce_faulty_ssh.tf",
    "content": "/**\n * Copyright 2023 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nresource \"google_compute_instance\" \"faulty_linux_ssh\" {\n  project        = google_project.project.project_id\n  depends_on     = [google_project_service.compute]\n  name           = \"faulty-linux-ssh\"\n  machine_type   = \"e2-standard-2\"\n  zone           = \"europe-west2-a\"\n  desired_status = \"RUNNING\"\n  network_interface {\n    network = \"default\"\n  }\n  tags = [\"faulty-ssh-instance\", \"gce-secured-instance-test-deny\"]\n  scheduling {\n    preemptible       = true\n    automatic_restart = false\n  }\n  boot_disk {\n    initialize_params {\n      image = data.google_compute_image.debian.self_link\n    }\n  }\n  service_account {\n    email = data.google_compute_default_service_account.default.email\n    scopes = [\n      \"https://www.googleapis.com/auth/devstorage.read_only\",\n      \"https://www.googleapis.com/auth/logging.write\",\n      \"https://www.googleapis.com/auth/monitoring.write\",\n      \"https://www.googleapis.com/auth/service.management.readonly\",\n      \"https://www.googleapis.com/auth/servicecontrol\"\n    ]\n  }\n  labels = {\n    foo = \"bar\"\n  }\n  metadata_startup_script = <<-EOT\n  #!/bin/bash\n  # Throw some errors to Serial console logs\n  echo \"blocked for more than 20 seconds\" > /dev/console\n  echo \"Corruption of in-memory data detected. Shutting down filesystem\" > /dev/console\n  echo \"Memory cgroup out of memory\" >> /dev/console\n  echo \"No space left on device\" >  /dev/console\n\n  apt install stress-ng -y\n\n  stress-ng --cpu 4 --vm 4 --vm-bytes 4G --io 5 --hdd 14--timeout 60m &\n\n  while true; do\n    : # Do nothing, which consumes CPU cycles\n  done\n\n  EOT\n}\n\n# Fault windows\n\nresource \"google_compute_instance\" \"faulty_windows_ssh\" {\n  project        = google_project.project.project_id\n  depends_on     = [google_project_service.compute]\n  name           = \"faulty-windows-ssh\"\n  machine_type   = \"e2-standard-2\"\n  zone           = \"europe-west2-a\"\n  desired_status = \"RUNNING\"\n  network_interface {\n    network = \"default\"\n  }\n  tags = [\"faulty-ssh-instance\", \"gce-secured-instance-test-deny\"]\n  scheduling {\n    preemptible       = true\n    automatic_restart = false\n  }\n  boot_disk {\n    initialize_params {\n      image = data.google_compute_image.windows.self_link\n    }\n  }\n  service_account {\n    email = data.google_compute_default_service_account.default.email\n    scopes = [\n      \"https://www.googleapis.com/auth/devstorage.read_only\",\n      \"https://www.googleapis.com/auth/logging.write\",\n      \"https://www.googleapis.com/auth/monitoring.write\",\n      \"https://www.googleapis.com/auth/service.management.readonly\",\n      \"https://www.googleapis.com/auth/servicecontrol\"\n    ]\n  }\n  labels = {\n    foo = \"bar\"\n  }\n  metadata_startup_script = <<-EOT\n  #!/bin/bash\n  echo \"disk is at or near capacity\" > /dev/console\n  echo \"The IO operation at logical block address 0x... for Disk 0 (PDO name: \\Device\\...) was retried\"  > /dev/console\n  EOT\n}\n"
  },
  {
    "path": "test-data/gce4/gce_valid_ssh.tf",
    "content": "/**\n * Copyright 2023 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nresource \"google_compute_instance\" \"valid_linux_ssh\" {\n  project        = google_project.project.project_id\n  depends_on     = [google_project_service.compute]\n  name           = \"valid-linux-ssh\"\n  machine_type   = \"e2-standard-2\"\n  zone           = \"europe-west2-a\"\n  desired_status = \"RUNNING\"\n  network_interface {\n    network = \"default\"\n  }\n  tags = [\"valid-ssh-instance\"]\n  scheduling {\n    preemptible       = true\n    automatic_restart = false\n  }\n  boot_disk {\n    initialize_params {\n      image = data.google_compute_image.debian.self_link\n    }\n  }\n  service_account {\n    email = data.google_compute_default_service_account.default.email\n    scopes = [\n      \"https://www.googleapis.com/auth/devstorage.read_only\",\n      \"https://www.googleapis.com/auth/logging.write\",\n      \"https://www.googleapis.com/auth/monitoring.write\",\n      \"https://www.googleapis.com/auth/service.management.readonly\",\n      \"https://www.googleapis.com/auth/servicecontrol\"\n    ]\n  }\n  labels = {\n    foo = \"bar\"\n  }\n}\n\n# Valid windows running ssh\n\nresource \"google_compute_instance\" \"valid_windows_ssh\" {\n  project        = google_project.project.project_id\n  depends_on     = [google_project_service.compute]\n  name           = \"valid-windows-ssh\"\n  machine_type   = \"e2-standard-2\"\n  zone           = \"europe-west2-a\"\n  desired_status = \"RUNNING\"\n  network_interface {\n    network = \"default\"\n  }\n  tags = [\"valid-ssh-instance\"]\n  scheduling {\n    preemptible       = true\n    automatic_restart = false\n  }\n  boot_disk {\n    initialize_params {\n      image = data.google_compute_image.windows.self_link\n    }\n  }\n  service_account {\n    email = data.google_compute_default_service_account.default.email\n    scopes = [\n      \"https://www.googleapis.com/auth/devstorage.read_only\",\n      \"https://www.googleapis.com/auth/logging.write\",\n      \"https://www.googleapis.com/auth/monitoring.write\",\n      \"https://www.googleapis.com/auth/service.management.readonly\",\n      \"https://www.googleapis.com/auth/servicecontrol\"\n    ]\n  }\n  labels = {\n    foo = \"bar\"\n  }\n}\n"
  },
  {
    "path": "test-data/gce4/json-dumps/compute-disks-europe-west1-b.json",
    "content": "{\n  \"kind\": \"compute#diskList\",\n  \"id\": \"projects/gcpdiag-gce-vm-performance/zones/europe-west1-b/disks\",\n  \"items\": [\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"7550338177783293118\",\n      \"creationTimestamp\": \"2022-05-10T05:28:01.712-07:00\",\n      \"name\": \"gke-gke1-default-pool-5665d797-62lh\",\n      \"sizeGb\": \"100\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west1-b\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west1-b/disks/gke-gke1-default-pool-5665d797-62lh\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-12110-gke2000-cos-89-16108-604-19-v220317-c-pre\",\n      \"sourceImageId\": \"8040052912969817984\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west1-b/diskTypes/pd-standard\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"UEFI_COMPATIBLE\"\n        },\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        },\n        {\n          \"type\": \"SEV_CAPABLE\"\n        },\n        {\n          \"type\": \"SECURE_BOOT\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2022-05-10T05:28:01.713-07:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west1-b/instances/gke-gke1-default-pool-5665d797-62lh\"\n      ],\n      \"labels\": {\n        \"gcp_doctor_test\": \"gke\",\n        \"goog-gke-node\": \"\"\n      },\n      \"labelFingerprint\": \"mUgogP08_Iw=\",\n      \"licenseCodes\": [\n        \"1001003\",\n        \"1001010\",\n        \"166739712233658766\",\n        \"6880041984096540132\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\"\n    },\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"7424433754121692350\",\n      \"creationTimestamp\": \"2022-05-10T05:28:02.097-07:00\",\n      \"name\": \"gke-gke1-default-pool-5665d797-hz12\",\n      \"sizeGb\": \"100\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west1-b\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west1-b/disks/gke-gke1-default-pool-5665d797-hz12\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-12110-gke2000-cos-89-16108-604-19-v220317-c-pre\",\n      \"sourceImageId\": \"8040052912969817984\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west1-b/diskTypes/pd-standard\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"UEFI_COMPATIBLE\"\n        },\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        },\n        {\n          \"type\": \"SEV_CAPABLE\"\n        },\n        {\n          \"type\": \"SECURE_BOOT\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2022-05-10T05:28:02.097-07:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west1-b/instances/gke-gke1-default-pool-5665d797-hz12\"\n      ],\n      \"labels\": {\n        \"gcp_doctor_test\": \"gke\",\n        \"goog-gke-node\": \"\"\n      },\n      \"labelFingerprint\": \"mUgogP08_Iw=\",\n      \"licenseCodes\": [\n        \"1001003\",\n        \"1001010\",\n        \"166739712233658766\",\n        \"6880041984096540132\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\"\n    },\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"8594043929682764990\",\n      \"creationTimestamp\": \"2022-05-10T05:28:02.179-07:00\",\n      \"name\": \"gke-gke1-default-pool-5665d797-jd80\",\n      \"sizeGb\": \"100\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west1-b\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west1-b/disks/gke-gke1-default-pool-5665d797-jd80\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-12110-gke2000-cos-89-16108-604-19-v220317-c-pre\",\n      \"sourceImageId\": \"8040052912969817984\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west1-b/diskTypes/pd-standard\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"UEFI_COMPATIBLE\"\n        },\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        },\n        {\n          \"type\": \"SEV_CAPABLE\"\n        },\n        {\n          \"type\": \"SECURE_BOOT\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2022-05-10T05:28:02.179-07:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west1-b/instances/gke-gke1-default-pool-5665d797-jd80\"\n      ],\n      \"labels\": {\n        \"gcp_doctor_test\": \"gke\",\n        \"goog-gke-node\": \"\"\n      },\n      \"labelFingerprint\": \"mUgogP08_Iw=\",\n      \"licenseCodes\": [\n        \"1001003\",\n        \"1001010\",\n        \"166739712233658766\",\n        \"6880041984096540132\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\"\n    },\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"7088717128623711421\",\n      \"creationTimestamp\": \"2022-05-10T05:28:03.186-07:00\",\n      \"name\": \"gke-gke1-default-pool-5665d797-z9kh\",\n      \"sizeGb\": \"100\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west1-b\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west1-b/disks/gke-gke1-default-pool-5665d797-z9kh\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-12110-gke2000-cos-89-16108-604-19-v220317-c-pre\",\n      \"sourceImageId\": \"8040052912969817984\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west1-b/diskTypes/pd-standard\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"UEFI_COMPATIBLE\"\n        },\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        },\n        {\n          \"type\": \"SEV_CAPABLE\"\n        },\n        {\n          \"type\": \"SECURE_BOOT\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2022-05-10T05:28:03.187-07:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west1-b/instances/gke-gke1-default-pool-5665d797-z9kh\"\n      ],\n      \"labels\": {\n        \"gcp_doctor_test\": \"gke\",\n        \"goog-gke-node\": \"\"\n      },\n      \"labelFingerprint\": \"mUgogP08_Iw=\",\n      \"licenseCodes\": [\n        \"1001003\",\n        \"1001010\",\n        \"166739712233658766\",\n        \"6880041984096540132\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west1-b/disks\"\n}\n"
  },
  {
    "path": "test-data/gce4/json-dumps/compute-disks-europe-west2-a.json",
    "content": "{\n  \"kind\": \"compute#diskList\",\n  \"id\": \"projects/gcpdiag-gce-vm-performance/zones/europe-west2-a/disks\",\n  \"items\": [\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"1020012628094441724\",\n      \"creationTimestamp\": \"2023-11-16T20:03:33.349-08:00\",\n      \"name\": \"faulty-linux-ssh\",\n      \"sizeGb\": \"10\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-a\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-a/disks/faulty-linux-ssh\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-11-bullseye-v20231115\",\n      \"sourceImageId\": \"3081125733607199085\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-a/diskTypes/pd-standard\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"UEFI_COMPATIBLE\"\n        },\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        },\n        {\n          \"type\": \"GVNIC\"\n        },\n        {\n          \"type\": \"SEV_CAPABLE\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2023-11-16T20:03:33.350-08:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-a/instances/faulty-linux-ssh\"\n      ],\n      \"labelFingerprint\": \"42WmSpB8rSM=\",\n      \"licenseCodes\": [\n        \"3853522013536123851\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\",\n      \"architecture\": \"X86_64\"\n    },\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"5193645208196831705\",\n      \"creationTimestamp\": \"2023-11-16T20:08:24.574-08:00\",\n      \"name\": \"faulty-windows-ssh\",\n      \"sizeGb\": \"32\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-a\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-a/disks/faulty-windows-ssh\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/images/windows-server-2019-dc-core-v20231115\",\n      \"sourceImageId\": \"4704563576960484445\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-a/diskTypes/pd-standard\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2019-dc\",\n        \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-core\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"MULTI_IP_SUBNET\"\n        },\n        {\n          \"type\": \"UEFI_COMPATIBLE\"\n        },\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        },\n        {\n          \"type\": \"GVNIC\"\n        },\n        {\n          \"type\": \"WINDOWS\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2023-11-16T20:08:24.575-08:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-a/instances/faulty-windows-ssh\"\n      ],\n      \"labelFingerprint\": \"42WmSpB8rSM=\",\n      \"licenseCodes\": [\n        \"3389558045860892917\",\n        \"1000226\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\",\n      \"architecture\": \"X86_64\"\n    },\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"7702462607973374205\",\n      \"creationTimestamp\": \"2023-11-16T20:03:32.812-08:00\",\n      \"name\": \"valid-linux-ssh\",\n      \"sizeGb\": \"10\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-a\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-a/disks/valid-linux-ssh\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-11-bullseye-v20231115\",\n      \"sourceImageId\": \"3081125733607199085\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-a/diskTypes/pd-standard\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"UEFI_COMPATIBLE\"\n        },\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        },\n        {\n          \"type\": \"GVNIC\"\n        },\n        {\n          \"type\": \"SEV_CAPABLE\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2023-11-16T20:03:32.812-08:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-a/instances/valid-linux-ssh\"\n      ],\n      \"labelFingerprint\": \"42WmSpB8rSM=\",\n      \"licenseCodes\": [\n        \"3853522013536123851\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\",\n      \"architecture\": \"X86_64\"\n    },\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"5223308949582469373\",\n      \"creationTimestamp\": \"2023-11-16T20:03:32.839-08:00\",\n      \"name\": \"valid-windows-ssh\",\n      \"sizeGb\": \"32\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-a\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-a/disks/valid-windows-ssh\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/images/windows-server-2019-dc-core-v20231115\",\n      \"sourceImageId\": \"4704563576960484445\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-a/diskTypes/pd-standard\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2019-dc\",\n        \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-core\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"MULTI_IP_SUBNET\"\n        },\n        {\n          \"type\": \"UEFI_COMPATIBLE\"\n        },\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        },\n        {\n          \"type\": \"GVNIC\"\n        },\n        {\n          \"type\": \"WINDOWS\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2023-11-16T20:03:32.839-08:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-a/instances/valid-windows-ssh\"\n      ],\n      \"labelFingerprint\": \"42WmSpB8rSM=\",\n      \"licenseCodes\": [\n        \"3389558045860892917\",\n        \"1000226\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\",\n      \"architecture\": \"X86_64\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-a/disks\"\n}\n"
  },
  {
    "path": "test-data/gce4/json-dumps/compute-disks-europe-west2-b.json",
    "content": "{\n  \"kind\": \"compute#diskList\",\n  \"id\": \"projects/gcpdiag-gce-vm-performance/zones/europe-west2-b/disks\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-b/disks\"\n}\n"
  },
  {
    "path": "test-data/gce4/json-dumps/compute-disks-europe-west4-a.json",
    "content": "{\n  \"kind\": \"compute#diskList\",\n  \"id\": \"projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/disks\",\n  \"items\": [\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"4897755586815845618\",\n      \"creationTimestamp\": \"2022-05-10T05:27:10.646-07:00\",\n      \"name\": \"gce1\",\n      \"sizeGb\": \"32\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/disks/gce1\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/images/windows-server-2019-dc-core-v20220414\",\n      \"sourceImageId\": \"3529112155699095586\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/diskTypes/pd-standard\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2019-dc\",\n        \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-core\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"MULTI_IP_SUBNET\"\n        },\n        {\n          \"type\": \"UEFI_COMPATIBLE\"\n        },\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        },\n        {\n          \"type\": \"WINDOWS\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2022-05-10T05:27:10.647-07:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instances/gce1\"\n      ],\n      \"labelFingerprint\": \"42WmSpB8rSM=\",\n      \"licenseCodes\": [\n        \"3389558045860892917\",\n        \"1000226\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\"\n    },\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"7436782321968604403\",\n      \"creationTimestamp\": \"2022-05-10T05:27:09.694-07:00\",\n      \"name\": \"gce2\",\n      \"sizeGb\": \"10\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/disks/gce2\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/images/cos-85-13310-1453-5\",\n      \"sourceImageId\": \"1276396551904338204\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/diskTypes/pd-standard\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        },\n        {\n          \"type\": \"SEV_CAPABLE\"\n        },\n        {\n          \"type\": \"UEFI_COMPATIBLE\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2022-05-10T05:27:09.695-07:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instances/gce2\"\n      ],\n      \"labelFingerprint\": \"42WmSpB8rSM=\",\n      \"licenseCodes\": [\n        \"6880041984096540132\",\n        \"1001010\",\n        \"166739712233658766\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\"\n    },\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"2534143966095860953\",\n      \"creationTimestamp\": \"2022-05-10T05:27:34.871-07:00\",\n      \"name\": \"mig-926f\",\n      \"sizeGb\": \"10\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/disks/mig-926f\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-9-stretch-v20220406\",\n      \"sourceImageId\": \"1994093915008945255\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/diskTypes/pd-standard\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-9-stretch\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2022-05-10T05:27:34.872-07:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instances/mig-926f\"\n      ],\n      \"labelFingerprint\": \"42WmSpB8rSM=\",\n      \"licenseCodes\": [\n        \"1000205\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\"\n    },\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"3703127063546815705\",\n      \"creationTimestamp\": \"2022-05-10T05:27:35.177-07:00\",\n      \"name\": \"mig-hmnt\",\n      \"sizeGb\": \"10\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/disks/mig-hmnt\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-9-stretch-v20220406\",\n      \"sourceImageId\": \"1994093915008945255\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/diskTypes/pd-standard\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-9-stretch\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2022-05-10T05:27:35.178-07:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instances/mig-hmnt\"\n      ],\n      \"labelFingerprint\": \"42WmSpB8rSM=\",\n      \"licenseCodes\": [\n        \"1000205\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\"\n    },\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"4944833045469848960\",\n      \"creationTimestamp\": \"2022-05-10T05:32:47.994-07:00\",\n      \"name\": \"unattached-disk\",\n      \"sizeGb\": \"10\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/disks/unattached-disk\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-9-stretch-v20200805\",\n      \"sourceImageId\": \"6709658075886210235\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/diskTypes/pd-ssd\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-9-stretch\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        }\n      ],\n      \"labels\": {\n        \"environment\": \"dev\"\n      },\n      \"labelFingerprint\": \"a6HI36FuYIQ=\",\n      \"licenseCodes\": [\n        \"1000205\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/disks\"\n}\n"
  },
  {
    "path": "test-data/gce4/json-dumps/compute-effective-firewalls-default.json",
    "content": "{\n  \"firewalls\": [\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"6654944905093765942\",\n      \"creationTimestamp\": \"2023-11-03T14:27:53.667-07:00\",\n      \"name\": \"default-allow-icmp\",\n      \"description\": \"Allow ICMP from anywhere\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/networks/default\",\n      \"priority\": 65534,\n      \"sourceRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"icmp\"\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/firewalls/default-allow-icmp\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"4341098039640382262\",\n      \"creationTimestamp\": \"2023-11-03T14:27:53.660-07:00\",\n      \"name\": \"default-allow-ssh\",\n      \"description\": \"Allow SSH from anywhere\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/networks/default\",\n      \"priority\": 65534,\n      \"sourceRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"22\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/firewalls/default-allow-ssh\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"3384956594912865471\",\n      \"creationTimestamp\": \"2023-11-05T14:08:16.385-08:00\",\n      \"name\": \"gce-secured-instance-test-allow\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/networks/default\",\n      \"priority\": 900,\n      \"sourceRanges\": [\n        \"0.0.0.0/0\",\n        \"35.235.240.0/20\"\n      ],\n      \"targetTags\": [\n        \"faulty-ssh-instance\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"22\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/firewalls/gce-secured-instance-test-allow\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"2430705094709795638\",\n      \"creationTimestamp\": \"2023-11-03T14:27:53.657-07:00\",\n      \"name\": \"default-allow-internal\",\n      \"description\": \"Allow internal traffic on the default network\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/networks/default\",\n      \"priority\": 65534,\n      \"sourceRanges\": [\n        \"10.128.0.0/9\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"0-65535\"\n          ]\n        },\n        {\n          \"IPProtocol\": \"udp\",\n          \"ports\": [\n            \"0-65535\"\n          ]\n        },\n        {\n          \"IPProtocol\": \"icmp\"\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/firewalls/default-allow-internal\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"4126568254316010294\",\n      \"creationTimestamp\": \"2023-11-03T14:27:53.664-07:00\",\n      \"name\": \"default-allow-rdp\",\n      \"description\": \"Allow RDP from anywhere\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/networks/default\",\n      \"priority\": 65534,\n      \"sourceRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"3389\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/firewalls/default-allow-rdp\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"8244892118186044576\",\n      \"creationTimestamp\": \"2023-11-05T14:08:15.743-08:00\",\n      \"name\": \"gce-secured-instance-test-deny\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/networks/default\",\n      \"priority\": 900,\n      \"sourceRanges\": [\n        \"0.0.0.0/0\",\n        \"35.235.240.0/20\"\n      ],\n      \"targetTags\": [\n        \"faulty-ssh-instance\"\n      ],\n      \"denied\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"22\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/firewalls/gce-secured-instance-test-deny\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gce4/json-dumps/compute-igs-europe-west1-b.json",
    "content": "{\n  \"kind\": \"compute#instanceGroupList\",\n  \"id\": \"projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instanceGroups\",\n  \"items\": [\n    {\n      \"kind\": \"compute#instanceGroup\",\n      \"id\": \"4752839275668943076\",\n      \"creationTimestamp\": \"2022-04-26T08:21:47.107-07:00\",\n      \"name\": \"gke-gke1-default-pool-35923fbc-grp\",\n      \"description\": \"This instance group is controlled by Instance Group Manager 'gke-gke1-default-pool-35923fbc-grp'. To modify instances in this group, use the Instance Group Manager API: https://cloud.google.com/compute/docs/reference/latest/instanceGroupManagers\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n      \"fingerprint\": \"42WmSpB8rSM=\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instanceGroups/gke-gke1-default-pool-35923fbc-grp\",\n      \"size\": 4,\n      \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west1/subnetworks/default\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instanceGroups\"\n}\n"
  },
  {
    "path": "test-data/gce4/json-dumps/compute-igs-europe-west2-b.json",
    "content": "{\n  \"kind\": \"compute#instanceGroupList\",\n  \"id\": \"projects/gcpdiag-gce1-aaaa/zones/europe-west2-b/instanceGroups\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west2-b/instanceGroups\"\n}\n"
  },
  {
    "path": "test-data/gce4/json-dumps/compute-igs-europe-west4-a.json",
    "content": "{\n  \"kind\": \"compute#instanceGroupList\",\n  \"id\": \"projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups\",\n  \"items\": [\n    {\n      \"kind\": \"compute#instanceGroup\",\n      \"id\": \"3671191198561055498\",\n      \"creationTimestamp\": \"2022-04-26T08:21:09.998-07:00\",\n      \"name\": \"instance-group-1\",\n      \"description\": \"\",\n      \"namedPorts\": [\n        {\n          \"name\": \"http\",\n          \"port\": 8080\n        },\n        {\n          \"name\": \"http\",\n          \"port\": 8443\n        }\n      ],\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n      \"fingerprint\": \"bPhGeNqJuxo=\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups/instance-group-1\",\n      \"size\": 1,\n      \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default\"\n    },\n    {\n      \"kind\": \"compute#instanceGroup\",\n      \"id\": \"2978499701990863624\",\n      \"creationTimestamp\": \"2022-04-26T08:21:11.396-07:00\",\n      \"name\": \"instance-group-2\",\n      \"description\": \"\",\n      \"namedPorts\": [\n        {\n          \"name\": \"http\",\n          \"port\": 8080\n        },\n        {\n          \"name\": \"https\",\n          \"port\": 8443\n        }\n      ],\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n      \"fingerprint\": \"OMWWjJuNHl0=\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups/instance-group-2\",\n      \"size\": 1,\n      \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default\"\n    },\n    {\n      \"kind\": \"compute#instanceGroup\",\n      \"id\": \"4528539620862178056\",\n      \"creationTimestamp\": \"2022-04-26T08:21:11.080-07:00\",\n      \"name\": \"mig\",\n      \"description\": \"This instance group is controlled by Instance Group Manager 'mig'. To modify instances in this group, use the Instance Group Manager API: https://cloud.google.com/compute/docs/reference/latest/instanceGroupManagers\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n      \"fingerprint\": \"42WmSpB8rSM=\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups/mig\",\n      \"size\": 2,\n      \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups\"\n}\n"
  },
  {
    "path": "test-data/gce4/json-dumps/compute-instances-europe-west1-b-2.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances\",\n  \"items\": [\n    {\n      \"canIpForward\": true,\n      \"cpuPlatform\": \"Intel Broadwell\",\n      \"creationTimestamp\": \"2022-04-26T08:21:54.798-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"100\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            },\n            {\n              \"type\": \"SECURE_BOOT\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"shieldedInstanceInitialState\": {\n            \"dbs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"dbxs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"keks\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"pk\": {\n              \"content\": \"REDACTED\",\n              \"fileType\": \"X509\"\n            }\n          },\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/disks/gke-gke1-default-pool-35923fbc-k05c\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"3147904666822881533\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"mUgogP08_Iw=\",\n      \"labels\": {\n        \"gcp_doctor_test\": \"gke\",\n        \"goog-gke-node\": \"\"\n      },\n      \"lastStartTimestamp\": \"2022-04-26T08:22:01.245-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/machineTypes/e2-small\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"instance-template\",\n            \"value\": \"projects/12340001/global/instanceTemplates/gke-gke1-default-pool-35923fbc\"\n          },\n          {\n            \"key\": \"created-by\",\n            \"value\": \"projects/12340001/zones/europe-west1-b/instanceGroupManagers/gke-gke1-default-pool-35923fbc-grp\"\n          },\n          {\n            \"key\": \"serial-port-logging-enable\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"kube-labels\",\n            \"value\": \"cloud.google.com/gke-boot-disk=pd-standard,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/machine-family=e2\"\n          },\n          {\n            \"key\": \"google-compute-enable-pcid\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"enable-oslogin\",\n            \"value\": \"false\"\n          },\n          {\n            \"key\": \"kubelet-config\",\n            \"value\": \"apiVersion: kubelet.config.k8s.io/v1beta1\\nauthentication:\\n  anonymous:\\n    enabled: false\\n  webhook:\\n    enabled: true\\n  x509:\\n    clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\\nauthorization:\\n  mode: Webhook\\ncgroupRoot: /\\nclusterDNS:\\n- 10.3.240.10\\nclusterDomain: cluster.local\\nenableDebuggingHandlers: true\\nevictionHard:\\n  memory.available: 100Mi\\n  nodefs.available: 10%\\n  nodefs.inodesFree: 5%\\n  pid.available: 10%\\nfeatureGates:\\n  DynamicKubeletConfig: false\\n  ExecProbeTimeout: false\\n  InTreePluginAWSUnregister: true\\n  InTreePluginAzureDiskUnregister: true\\n  InTreePluginOpenStackUnregister: true\\n  InTreePluginvSphereUnregister: true\\n  RotateKubeletServerCertificate: true\\nkernelMemcgNotification: true\\nkind: KubeletConfiguration\\nkubeReserved:\\n  cpu: 1060m\\n  ephemeral-storage: 41Gi\\n  memory: 512Mi\\nreadOnlyPort: 10255\\nserverTLSBootstrap: true\\nstaticPodPath: /etc/kubernetes/manifests\\n\"\n          },\n          {\n            \"key\": \"kubeconfig\",\n            \"value\": \"apiVersion: v1\\nkind: Config\\nclusters:\\n- cluster:\\n    server: https://35.205.188.165\\n    certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\\n  name: default-cluster\\ncontexts:\\n- context:\\n    cluster: default-cluster\\n    namespace: default\\n    user: exec-plugin-auth\\n  name: default-context\\ncurrent-context: default-context\\nusers:\\n- name: exec-plugin-auth\\n  user:\\n    exec:\\n      apiVersion: \\\"client.authentication.k8s.io/v1alpha1\\\"\\n      command: '/home/kubernetes/bin/gke-exec-auth-plugin'\\n      args: [\\\"--cache-dir\\\", '/var/lib/kubelet/pki/']\\n\"\n          },\n          {\n            \"key\": \"cluster-name\",\n            \"value\": \"gke1\"\n          },\n          {\n            \"key\": \"gci-update-strategy\",\n            \"value\": \"update_disabled\"\n          },\n          {\n            \"key\": \"gci-metrics-enabled\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"configure-sh\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"gci-ensure-gke-docker\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"disable-legacy-endpoints\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"user-data\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"kube-env\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"cluster-uid\",\n            \"value\": \"f36cf6ddd50c4b998cf1921fbc3e11fc6895bf0ad2d841e7956d7fca6e7024b4\"\n          },\n          {\n            \"key\": \"cluster-location\",\n            \"value\": \"europe-west1-b\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"gke-gke1-default-pool-35923fbc-k05c\",\n      \"networkInterfaces\": [\n        {\n          \"accessConfigs\": [\n            {\n              \"kind\": \"compute#accessConfig\",\n              \"name\": \"external-nat\",\n              \"natIP\": \"34.79.110.136\",\n              \"networkTier\": \"PREMIUM\",\n              \"type\": \"ONE_TO_ONE_NAT\"\n            }\n          ],\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n          \"networkIP\": \"10.132.0.2\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west1/subnetworks/default\"\n        }\n      ],\n      \"networkPerformanceConfig\": {\n        \"totalEgressBandwidthTier\": \"DEFAULT\"\n      },\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances/gke-gke1-default-pool-35923fbc-k05c\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"12340001-compute@developer.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/logging.write\",\n            \"https://www.googleapis.com/auth/monitoring\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"gke-gke1-f36cf6dd-node\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b\"\n    }\n  ],\n  \"kind\": \"compute#instanceList\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances\"\n}\n"
  },
  {
    "path": "test-data/gce4/json-dumps/compute-instances-europe-west1-b.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances\",\n  \"items\": [\n    {\n      \"canIpForward\": true,\n      \"cpuPlatform\": \"Intel Broadwell\",\n      \"creationTimestamp\": \"2022-04-26T08:21:56.296-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"100\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            },\n            {\n              \"type\": \"SECURE_BOOT\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"shieldedInstanceInitialState\": {\n            \"dbs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"dbxs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"keks\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"pk\": {\n              \"content\": \"REDACTED\",\n              \"fileType\": \"X509\"\n            }\n          },\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/disks/gke-gke1-default-pool-35923fbc-2xxp\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"1470007467084984573\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"mUgogP08_Iw=\",\n      \"labels\": {\n        \"gcp_doctor_test\": \"gke\",\n        \"goog-gke-node\": \"\"\n      },\n      \"lastStartTimestamp\": \"2022-04-26T08:22:05.407-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/machineTypes/e2-small\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"instance-template\",\n            \"value\": \"projects/12340001/global/instanceTemplates/gke-gke1-default-pool-35923fbc\"\n          },\n          {\n            \"key\": \"created-by\",\n            \"value\": \"projects/12340001/zones/europe-west1-b/instanceGroupManagers/gke-gke1-default-pool-35923fbc-grp\"\n          },\n          {\n            \"key\": \"serial-port-logging-enable\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"kube-labels\",\n            \"value\": \"cloud.google.com/gke-boot-disk=pd-standard,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/machine-family=e2\"\n          },\n          {\n            \"key\": \"google-compute-enable-pcid\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"enable-oslogin\",\n            \"value\": \"false\"\n          },\n          {\n            \"key\": \"kubelet-config\",\n            \"value\": \"apiVersion: kubelet.config.k8s.io/v1beta1\\nauthentication:\\n  anonymous:\\n    enabled: false\\n  webhook:\\n    enabled: true\\n  x509:\\n    clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\\nauthorization:\\n  mode: Webhook\\ncgroupRoot: /\\nclusterDNS:\\n- 10.3.240.10\\nclusterDomain: cluster.local\\nenableDebuggingHandlers: true\\nevictionHard:\\n  memory.available: 100Mi\\n  nodefs.available: 10%\\n  nodefs.inodesFree: 5%\\n  pid.available: 10%\\nfeatureGates:\\n  DynamicKubeletConfig: false\\n  ExecProbeTimeout: false\\n  InTreePluginAWSUnregister: true\\n  InTreePluginAzureDiskUnregister: true\\n  InTreePluginOpenStackUnregister: true\\n  InTreePluginvSphereUnregister: true\\n  RotateKubeletServerCertificate: true\\nkernelMemcgNotification: true\\nkind: KubeletConfiguration\\nkubeReserved:\\n  cpu: 1060m\\n  ephemeral-storage: 41Gi\\n  memory: 512Mi\\nreadOnlyPort: 10255\\nserverTLSBootstrap: true\\nstaticPodPath: /etc/kubernetes/manifests\\n\"\n          },\n          {\n            \"key\": \"kubeconfig\",\n            \"value\": \"apiVersion: v1\\nkind: Config\\nclusters:\\n- cluster:\\n    server: https://35.205.188.165\\n    certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\\n  name: default-cluster\\ncontexts:\\n- context:\\n    cluster: default-cluster\\n    namespace: default\\n    user: exec-plugin-auth\\n  name: default-context\\ncurrent-context: default-context\\nusers:\\n- name: exec-plugin-auth\\n  user:\\n    exec:\\n      apiVersion: \\\"client.authentication.k8s.io/v1alpha1\\\"\\n      command: '/home/kubernetes/bin/gke-exec-auth-plugin'\\n      args: [\\\"--cache-dir\\\", '/var/lib/kubelet/pki/']\\n\"\n          },\n          {\n            \"key\": \"cluster-name\",\n            \"value\": \"gke1\"\n          },\n          {\n            \"key\": \"gci-update-strategy\",\n            \"value\": \"update_disabled\"\n          },\n          {\n            \"key\": \"gci-metrics-enabled\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"configure-sh\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"gci-ensure-gke-docker\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"disable-legacy-endpoints\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"user-data\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"kube-env\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"cluster-uid\",\n            \"value\": \"f36cf6ddd50c4b998cf1921fbc3e11fc6895bf0ad2d841e7956d7fca6e7024b4\"\n          },\n          {\n            \"key\": \"cluster-location\",\n            \"value\": \"europe-west1-b\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"gke-gke1-default-pool-35923fbc-2xxp\",\n      \"networkInterfaces\": [\n        {\n          \"accessConfigs\": [\n            {\n              \"kind\": \"compute#accessConfig\",\n              \"name\": \"external-nat\",\n              \"natIP\": \"34.78.171.82\",\n              \"networkTier\": \"PREMIUM\",\n              \"type\": \"ONE_TO_ONE_NAT\"\n            }\n          ],\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n          \"networkIP\": \"10.132.0.5\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west1/subnetworks/default\"\n        }\n      ],\n      \"networkPerformanceConfig\": {\n        \"totalEgressBandwidthTier\": \"DEFAULT\"\n      },\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances/gke-gke1-default-pool-35923fbc-2xxp\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"12340001-compute@developer.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/logging.write\",\n            \"https://www.googleapis.com/auth/monitoring\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"gke-gke1-f36cf6dd-node\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b\"\n    },\n    {\n      \"canIpForward\": true,\n      \"cpuPlatform\": \"Intel Broadwell\",\n      \"creationTimestamp\": \"2022-04-26T08:21:55.180-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"100\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            },\n            {\n              \"type\": \"SECURE_BOOT\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"shieldedInstanceInitialState\": {\n            \"dbs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"dbxs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"keks\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"pk\": {\n              \"content\": \"REDACTED\",\n              \"fileType\": \"X509\"\n            }\n          },\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/disks/gke-gke1-default-pool-35923fbc-c12f\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"183710301471224061\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"mUgogP08_Iw=\",\n      \"labels\": {\n        \"gcp_doctor_test\": \"gke\",\n        \"goog-gke-node\": \"\"\n      },\n      \"lastStartTimestamp\": \"2022-04-26T08:22:02.051-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/machineTypes/e2-small\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"instance-template\",\n            \"value\": \"projects/12340001/global/instanceTemplates/gke-gke1-default-pool-35923fbc\"\n          },\n          {\n            \"key\": \"created-by\",\n            \"value\": \"projects/12340001/zones/europe-west1-b/instanceGroupManagers/gke-gke1-default-pool-35923fbc-grp\"\n          },\n          {\n            \"key\": \"serial-port-logging-enable\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"kube-labels\",\n            \"value\": \"cloud.google.com/gke-boot-disk=pd-standard,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/machine-family=e2\"\n          },\n          {\n            \"key\": \"google-compute-enable-pcid\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"enable-oslogin\",\n            \"value\": \"false\"\n          },\n          {\n            \"key\": \"kubelet-config\",\n            \"value\": \"apiVersion: kubelet.config.k8s.io/v1beta1\\nauthentication:\\n  anonymous:\\n    enabled: false\\n  webhook:\\n    enabled: true\\n  x509:\\n    clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\\nauthorization:\\n  mode: Webhook\\ncgroupRoot: /\\nclusterDNS:\\n- 10.3.240.10\\nclusterDomain: cluster.local\\nenableDebuggingHandlers: true\\nevictionHard:\\n  memory.available: 100Mi\\n  nodefs.available: 10%\\n  nodefs.inodesFree: 5%\\n  pid.available: 10%\\nfeatureGates:\\n  DynamicKubeletConfig: false\\n  ExecProbeTimeout: false\\n  InTreePluginAWSUnregister: true\\n  InTreePluginAzureDiskUnregister: true\\n  InTreePluginOpenStackUnregister: true\\n  InTreePluginvSphereUnregister: true\\n  RotateKubeletServerCertificate: true\\nkernelMemcgNotification: true\\nkind: KubeletConfiguration\\nkubeReserved:\\n  cpu: 1060m\\n  ephemeral-storage: 41Gi\\n  memory: 512Mi\\nreadOnlyPort: 10255\\nserverTLSBootstrap: true\\nstaticPodPath: /etc/kubernetes/manifests\\n\"\n          },\n          {\n            \"key\": \"kubeconfig\",\n            \"value\": \"apiVersion: v1\\nkind: Config\\nclusters:\\n- cluster:\\n    server: https://35.205.188.165\\n    certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\\n  name: default-cluster\\ncontexts:\\n- context:\\n    cluster: default-cluster\\n    namespace: default\\n    user: exec-plugin-auth\\n  name: default-context\\ncurrent-context: default-context\\nusers:\\n- name: exec-plugin-auth\\n  user:\\n    exec:\\n      apiVersion: \\\"client.authentication.k8s.io/v1alpha1\\\"\\n      command: '/home/kubernetes/bin/gke-exec-auth-plugin'\\n      args: [\\\"--cache-dir\\\", '/var/lib/kubelet/pki/']\\n\"\n          },\n          {\n            \"key\": \"cluster-name\",\n            \"value\": \"gke1\"\n          },\n          {\n            \"key\": \"gci-update-strategy\",\n            \"value\": \"update_disabled\"\n          },\n          {\n            \"key\": \"gci-metrics-enabled\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"configure-sh\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"gci-ensure-gke-docker\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"disable-legacy-endpoints\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"user-data\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"kube-env\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"cluster-uid\",\n            \"value\": \"f36cf6ddd50c4b998cf1921fbc3e11fc6895bf0ad2d841e7956d7fca6e7024b4\"\n          },\n          {\n            \"key\": \"cluster-location\",\n            \"value\": \"europe-west1-b\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"gke-gke1-default-pool-35923fbc-c12f\",\n      \"networkInterfaces\": [\n        {\n          \"accessConfigs\": [\n            {\n              \"kind\": \"compute#accessConfig\",\n              \"name\": \"external-nat\",\n              \"natIP\": \"34.76.115.182\",\n              \"networkTier\": \"PREMIUM\",\n              \"type\": \"ONE_TO_ONE_NAT\"\n            }\n          ],\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n          \"networkIP\": \"10.132.0.3\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west1/subnetworks/default\"\n        }\n      ],\n      \"networkPerformanceConfig\": {\n        \"totalEgressBandwidthTier\": \"DEFAULT\"\n      },\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances/gke-gke1-default-pool-35923fbc-c12f\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"12340001-compute@developer.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/logging.write\",\n            \"https://www.googleapis.com/auth/monitoring\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"gke-gke1-f36cf6dd-node\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b\"\n    },\n    {\n      \"canIpForward\": true,\n      \"cpuPlatform\": \"Intel Broadwell\",\n      \"creationTimestamp\": \"2022-04-26T08:21:56.318-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"100\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            },\n            {\n              \"type\": \"SECURE_BOOT\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"shieldedInstanceInitialState\": {\n            \"dbs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"dbxs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"keks\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"pk\": {\n              \"content\": \"REDACTED\",\n              \"fileType\": \"X509\"\n            }\n          },\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/disks/gke-gke1-default-pool-35923fbc-fv50\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"148164482114629885\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"mUgogP08_Iw=\",\n      \"labels\": {\n        \"gcp_doctor_test\": \"gke\",\n        \"goog-gke-node\": \"\"\n      },\n      \"lastStartTimestamp\": \"2022-04-26T08:22:05.433-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/machineTypes/e2-small\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"instance-template\",\n            \"value\": \"projects/12340001/global/instanceTemplates/gke-gke1-default-pool-35923fbc\"\n          },\n          {\n            \"key\": \"created-by\",\n            \"value\": \"projects/12340001/zones/europe-west1-b/instanceGroupManagers/gke-gke1-default-pool-35923fbc-grp\"\n          },\n          {\n            \"key\": \"serial-port-logging-enable\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"kube-labels\",\n            \"value\": \"cloud.google.com/gke-boot-disk=pd-standard,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/machine-family=e2\"\n          },\n          {\n            \"key\": \"google-compute-enable-pcid\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"enable-oslogin\",\n            \"value\": \"false\"\n          },\n          {\n            \"key\": \"kubelet-config\",\n            \"value\": \"apiVersion: kubelet.config.k8s.io/v1beta1\\nauthentication:\\n  anonymous:\\n    enabled: false\\n  webhook:\\n    enabled: true\\n  x509:\\n    clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\\nauthorization:\\n  mode: Webhook\\ncgroupRoot: /\\nclusterDNS:\\n- 10.3.240.10\\nclusterDomain: cluster.local\\nenableDebuggingHandlers: true\\nevictionHard:\\n  memory.available: 100Mi\\n  nodefs.available: 10%\\n  nodefs.inodesFree: 5%\\n  pid.available: 10%\\nfeatureGates:\\n  DynamicKubeletConfig: false\\n  ExecProbeTimeout: false\\n  InTreePluginAWSUnregister: true\\n  InTreePluginAzureDiskUnregister: true\\n  InTreePluginOpenStackUnregister: true\\n  InTreePluginvSphereUnregister: true\\n  RotateKubeletServerCertificate: true\\nkernelMemcgNotification: true\\nkind: KubeletConfiguration\\nkubeReserved:\\n  cpu: 1060m\\n  ephemeral-storage: 41Gi\\n  memory: 512Mi\\nreadOnlyPort: 10255\\nserverTLSBootstrap: true\\nstaticPodPath: /etc/kubernetes/manifests\\n\"\n          },\n          {\n            \"key\": \"kubeconfig\",\n            \"value\": \"apiVersion: v1\\nkind: Config\\nclusters:\\n- cluster:\\n    server: https://35.205.188.165\\n    certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\\n  name: default-cluster\\ncontexts:\\n- context:\\n    cluster: default-cluster\\n    namespace: default\\n    user: exec-plugin-auth\\n  name: default-context\\ncurrent-context: default-context\\nusers:\\n- name: exec-plugin-auth\\n  user:\\n    exec:\\n      apiVersion: \\\"client.authentication.k8s.io/v1alpha1\\\"\\n      command: '/home/kubernetes/bin/gke-exec-auth-plugin'\\n      args: [\\\"--cache-dir\\\", '/var/lib/kubelet/pki/']\\n\"\n          },\n          {\n            \"key\": \"cluster-name\",\n            \"value\": \"gke1\"\n          },\n          {\n            \"key\": \"gci-update-strategy\",\n            \"value\": \"update_disabled\"\n          },\n          {\n            \"key\": \"gci-metrics-enabled\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"configure-sh\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"gci-ensure-gke-docker\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"disable-legacy-endpoints\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"user-data\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"kube-env\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"cluster-uid\",\n            \"value\": \"f36cf6ddd50c4b998cf1921fbc3e11fc6895bf0ad2d841e7956d7fca6e7024b4\"\n          },\n          {\n            \"key\": \"cluster-location\",\n            \"value\": \"europe-west1-b\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"gke-gke1-default-pool-35923fbc-fv50\",\n      \"networkInterfaces\": [\n        {\n          \"accessConfigs\": [\n            {\n              \"kind\": \"compute#accessConfig\",\n              \"name\": \"external-nat\",\n              \"natIP\": \"35.205.62.74\",\n              \"networkTier\": \"PREMIUM\",\n              \"type\": \"ONE_TO_ONE_NAT\"\n            }\n          ],\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n          \"networkIP\": \"10.132.0.4\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west1/subnetworks/default\"\n        }\n      ],\n      \"networkPerformanceConfig\": {\n        \"totalEgressBandwidthTier\": \"DEFAULT\"\n      },\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances/gke-gke1-default-pool-35923fbc-fv50\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"12340001-compute@developer.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/logging.write\",\n            \"https://www.googleapis.com/auth/monitoring\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"gke-gke1-f36cf6dd-node\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b\"\n    }\n  ],\n  \"kind\": \"compute#instanceList\",\n  \"nextPageToken\": \"ClgI-fiQw4y09wI6TQoCGAMKAyC1EAoCGAIKByDg3fmMvREKAhgHCiUqI2drZS1na2UxLWRlZmF1bHQtcG9vbC0zNTkyM2ZiYy1mdjUwCgog_eGW5vvZmIcC\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instances\"\n}\n"
  },
  {
    "path": "test-data/gce4/json-dumps/compute-instances-europe-west2-a.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances\",\n  \"items\": [\n    {\n      \"canIpForward\": false,\n      \"cpuPlatform\": \"Intel Broadwell\",\n      \"creationTimestamp\": \"2023-11-16T20:03:33.344-08:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"architecture\": \"X86_64\",\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"10\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/disks/faulty-linux-ssh\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"3256822971556911357\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"1TQLkowq0ZY=\",\n      \"labels\": {\n        \"foo\": \"bar\"\n      },\n      \"lastStartTimestamp\": \"2023-11-16T20:03:39.756-08:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/machineTypes/e2-standard-2\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"enable-oslogin\",\n            \"value\": \"false\"\n          },\n          {\n            \"key\": \"startup-script\",\n            \"value\": \"#!/bin/bash\\n# stop sshd\\nsystemctl stop ssh\\n\\nwhile true; do\\n  : # Do nothing, which consumes CPU cycles\\ndone\\n\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"faulty-linux-ssh\",\n      \"networkInterfaces\": [\n        {\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/networks/default\",\n          \"networkIP\": \"10.154.0.14\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west2/subnetworks/default\"\n        }\n      ],\n      \"scheduling\": {\n        \"automaticRestart\": false,\n        \"onHostMaintenance\": \"TERMINATE\",\n        \"preemptible\": true\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/faulty-linux-ssh\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"12345601-compute@developer.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/devstorage.read_only\",\n            \"https://www.googleapis.com/auth/logging.write\",\n            \"https://www.googleapis.com/auth/monitoring.write\",\n            \"https://www.googleapis.com/auth/service.management.readonly\",\n            \"https://www.googleapis.com/auth/servicecontrol\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"faulty-ssh-instance\",\n          \"gce-secured-instance-test-deny\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a\"\n    },\n    {\n      \"canIpForward\": false,\n      \"cpuPlatform\": \"Unknown CPU Platform\",\n      \"creationTimestamp\": \"2023-11-16T20:08:24.568-08:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"architecture\": \"X86_64\",\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"32\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"MULTI_IP_SUBNET\"\n            },\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            },\n            {\n              \"type\": \"WINDOWS\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2019-dc\",\n            \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-core\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/disks/faulty-windows-ssh\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"8620994183730780633\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"1TQLkowq0ZY=\",\n      \"labels\": {\n        \"foo\": \"bar\"\n      },\n      \"lastStartTimestamp\": \"2023-11-16T20:08:30.833-08:00\",\n      \"lastStopTimestamp\": \"2023-11-16T20:15:59.465-08:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/machineTypes/e2-standard-2\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"enable-oslogin\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"startup-script\",\n            \"value\": \"#!/bin/bash\\n\\nshutdown -h now\\n\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"faulty-windows-ssh\",\n      \"networkInterfaces\": [\n        {\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/networks/default\",\n          \"networkIP\": \"10.154.0.16\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west2/subnetworks/default\"\n        }\n      ],\n      \"scheduling\": {\n        \"automaticRestart\": false,\n        \"onHostMaintenance\": \"TERMINATE\",\n        \"preemptible\": true\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/faulty-windows-ssh\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"12345601-compute@developer.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/devstorage.read_only\",\n            \"https://www.googleapis.com/auth/logging.write\",\n            \"https://www.googleapis.com/auth/monitoring.write\",\n            \"https://www.googleapis.com/auth/service.management.readonly\",\n            \"https://www.googleapis.com/auth/servicecontrol\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"TERMINATED\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"faulty-ssh-instance\",\n          \"gce-secured-instance-test-deny\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a\"\n    },\n    {\n      \"canIpForward\": false,\n      \"cpuPlatform\": \"Intel Broadwell\",\n      \"creationTimestamp\": \"2023-11-16T20:03:32.807-08:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"architecture\": \"X86_64\",\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"10\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/disks/valid-linux-ssh\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"4683873813257738493\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"1TQLkowq0ZY=\",\n      \"labels\": {\n        \"foo\": \"bar\"\n      },\n      \"lastStartTimestamp\": \"2023-11-16T20:03:38.817-08:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/machineTypes/e2-standard-2\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"enable-oslogin\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"startup-script\",\n            \"value\": \"#!/bin/bash\\n\\ncurl -sSO https://dl.google.com/cloudagents/add-google-cloud-ops-agent-repo.sh\\nsudo bash add-google-cloud-ops-agent-repo.sh --also-install\\n\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"valid-linux-ssh\",\n      \"networkInterfaces\": [\n        {\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/global/networks/default\",\n          \"networkIP\": \"10.154.0.12\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/regions/europe-west2/subnetworks/default\"\n        }\n      ],\n      \"scheduling\": {\n        \"automaticRestart\": false,\n        \"onHostMaintenance\": \"TERMINATE\",\n        \"preemptible\": true\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/valid-linux-ssh\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"12345601-compute@developer.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/devstorage.read_only\",\n            \"https://www.googleapis.com/auth/logging.write\",\n            \"https://www.googleapis.com/auth/monitoring.write\",\n            \"https://www.googleapis.com/auth/service.management.readonly\",\n            \"https://www.googleapis.com/auth/servicecontrol\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"valid-ssh-instance\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a\"\n    }\n  ],\n  \"kind\": \"compute#instanceList\",\n  \"nextPageToken\": \"CkQIiOr-rJjKggM6OQoCGAMKAyDyEQoCGAIKByD_srD9xQkKAhgHChEqD3ZhbGlkLWxpbnV4LXNzaAoKIP2x7d-rzZ2AQQ==\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances\"\n}\n"
  },
  {
    "path": "test-data/gce4/json-dumps/compute-instances-europe-west2-b.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-b/instances\",\n  \"kind\": \"compute#instanceList\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-b/instances\"\n}\n"
  },
  {
    "path": "test-data/gce4/json-dumps/compute-instances-europe-west4-a-2.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances\",\n  \"items\": [\n    {\n      \"cpuPlatform\": \"Intel Broadwell\",\n      \"creationTimestamp\": \"2022-04-26T08:21:18.746-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"10\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-9-stretch\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/mig-7pvl\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"4022531639476597505\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"42WmSpB8rSM=\",\n      \"lastStartTimestamp\": \"2022-04-26T08:21:24.395-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/machineTypes/e2-micro\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"instance-template\",\n            \"value\": \"projects/12340001/global/instanceTemplates/mig-template\"\n          },\n          {\n            \"key\": \"created-by\",\n            \"value\": \"projects/12340001/zones/europe-west4-a/instanceGroupManagers/mig\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"mig-7pvl\",\n      \"networkInterfaces\": [\n        {\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n          \"networkIP\": \"10.164.0.4\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default\"\n        }\n      ],\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-7pvl\",\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\"\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a\"\n    }\n  ],\n  \"kind\": \"compute#instanceList\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances\"\n}\n"
  },
  {
    "path": "test-data/gce4/json-dumps/compute-instances-europe-west4-a.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances\",\n  \"items\": [\n    {\n      \"canIpForward\": false,\n      \"cpuPlatform\": \"Intel Skylake\",\n      \"creationTimestamp\": \"2022-04-26T08:20:51.863-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"32\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"MULTI_IP_SUBNET\"\n            },\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"WINDOWS\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2019-dc-byol\",\n            \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-core\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/gce1\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"1010101012\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"1TQLkowq0ZY=\",\n      \"labels\": {\n        \"foo\": \"bar\"\n      },\n      \"lastStartTimestamp\": \"2022-04-26T08:20:58.538-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/machineTypes/e2-micro\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"gce1\",\n      \"networkInterfaces\": [\n        {\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n          \"networkIP\": \"10.164.0.2\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default\"\n        }\n      ],\n      \"scheduling\": {\n        \"automaticRestart\": false,\n        \"onHostMaintenance\": \"TERMINATE\",\n        \"preemptible\": true\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce1\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"12340001-compute@developer.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/devstorage.read_only\",\n            \"https://www.googleapis.com/auth/logging.write\",\n            \"https://www.googleapis.com/auth/monitoring.write\",\n            \"https://www.googleapis.com/auth/service.management.readonly\",\n            \"https://www.googleapis.com/auth/servicecontrol\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"secured-instance\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a\"\n    },\n    {\n      \"canIpForward\": false,\n      \"cpuPlatform\": \"Intel Skylake\",\n      \"creationTimestamp\": \"2022-04-26T08:20:51.863-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"32\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"MULTI_IP_SUBNET\"\n            },\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"WINDOWS\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2019-dc-byol\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/gce1\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"1010101013\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"1TQLkowq0ZY=\",\n      \"labels\": {\n        \"foo\": \"bar\"\n      },\n      \"lastStartTimestamp\": \"2022-04-26T08:20:58.538-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/machineTypes/e2-micro\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"windows-test\",\n      \"networkInterfaces\": [\n        {\n          \"accessConfigs\": [\n            {\n              \"kind\": \"compute#accessConfig\",\n              \"name\": \"external-nat\",\n              \"natIP\": \"34.78.171.82\",\n              \"networkTier\": \"PREMIUM\",\n              \"type\": \"ONE_TO_ONE_NAT\"\n            }\n          ],\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n          \"networkIP\": \"10.164.0.2\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default\"\n        }\n      ],\n      \"scheduling\": {\n        \"automaticRestart\": false,\n        \"onHostMaintenance\": \"TERMINATE\",\n        \"preemptible\": true\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/windows-test\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"12340001-compute@developer.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/devstorage.read_only\",\n            \"https://www.googleapis.com/auth/logging.write\",\n            \"https://www.googleapis.com/auth/monitoring.write\",\n            \"https://www.googleapis.com/auth/service.management.readonly\",\n            \"https://www.googleapis.com/auth/servicecontrol\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"secured-instance\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a\"\n    },\n    {\n      \"canIpForward\": false,\n      \"cpuPlatform\": \"Intel Skylake\",\n      \"creationTimestamp\": \"2022-04-26T08:20:53.544-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"10\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            },\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"shieldedInstanceInitialState\": {\n            \"dbs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"dbxs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"keks\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"pk\": {\n              \"content\": \"REDACTED\",\n              \"fileType\": \"X509\"\n            }\n          },\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/gce2\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"1010101011\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"42WmSpB8rSM=\",\n      \"lastStartTimestamp\": \"2022-04-26T08:21:01.453-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/machineTypes/e2-micro\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"serial-port-logging-enable\",\n            \"value\": \"false\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"gce2\",\n      \"networkInterfaces\": [\n        {\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n          \"networkIP\": \"10.164.0.3\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default\"\n        }\n      ],\n      \"scheduling\": {\n        \"automaticRestart\": false,\n        \"onHostMaintenance\": \"TERMINATE\",\n        \"preemptible\": true\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/gce2\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"12340001-compute@developer.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/devstorage.read_only\",\n            \"https://www.googleapis.com/auth/logging.write\",\n            \"https://www.googleapis.com/auth/monitoring.write\",\n            \"https://www.googleapis.com/auth/service.management.readonly\",\n            \"https://www.googleapis.com/auth/servicecontrol\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"secured-instance\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a\"\n    },\n    {\n      \"cpuPlatform\": \"Intel Broadwell\",\n      \"creationTimestamp\": \"2022-04-26T08:21:19.061-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"10\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-9-stretch\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/disks/mig-4h21\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"1010101014\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"42WmSpB8rSM=\",\n      \"lastStartTimestamp\": \"2022-04-26T08:21:25.221-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/machineTypes/e2-micro\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"instance-template\",\n            \"value\": \"projects/12340001/global/instanceTemplates/mig-template\"\n          },\n          {\n            \"key\": \"created-by\",\n            \"value\": \"projects/12340001/zones/europe-west4-a/instanceGroupManagers/mig\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"mig-4h21\",\n      \"networkInterfaces\": [\n        {\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/networks/default\",\n          \"networkIP\": \"10.164.0.5\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/regions/europe-west4/subnetworks/default\"\n        }\n      ],\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/mig-4h21\",\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\"\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a\"\n    }\n  ],\n  \"kind\": \"compute#instanceList\",\n  \"nextPageToken\": \"Cj0It-i3w4y09wI6MgoCGAMKAyCmEgoCGAIKByDg3fmMvREKAhgHCgoqCG1pZy00aDIxCgoggeaW5uuu8YE7\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances\"\n}\n"
  },
  {
    "path": "test-data/gce4/json-dumps/compute-licenses.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gce-vm-performance/global/licenses\",\n  \"items\": [\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-10-enterprise-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"5769580143916819783\",\n      \"licenseCode\": \"2089835370828997959\",\n      \"creationTimestamp\": \"2018-11-07T00:00:40.302-08:00\",\n      \"description\": \"Windows 10 Enterprise BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-10-enterprise-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-10-x64-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"5572284649276248982\",\n      \"licenseCode\": \"8727879116868096918\",\n      \"creationTimestamp\": \"2019-11-19T19:05:29.677-08:00\",\n      \"description\": \"Windows 10 64-bit BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-10-x64-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-10-x86-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"1279231564365501289\",\n      \"licenseCode\": \"3732182829874353001\",\n      \"creationTimestamp\": \"2019-11-19T19:05:42.089-08:00\",\n      \"description\": \"Windows 10 32-bit BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-10-x86-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-11-x64-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"3804262737275203477\",\n      \"licenseCode\": \"5378533650449772437\",\n      \"creationTimestamp\": \"2021-08-25T11:52:42.711-07:00\",\n      \"description\": \"Windows 11 64-bit BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-11-x64-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-7-enterprise-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"2913052624331679126\",\n      \"licenseCode\": \"752112173778412950\",\n      \"creationTimestamp\": \"2018-11-06T23:59:53.727-08:00\",\n      \"description\": \"Windows 7 Enterprise BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-7-enterprise-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-7-x64-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"6501903266496451262\",\n      \"licenseCode\": \"5016528181960184510\",\n      \"creationTimestamp\": \"2019-11-19T19:00:33.621-08:00\",\n      \"description\": \"Windows 7 64-bit BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-7-x64-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-7-x86-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"4058550282231550561\",\n      \"licenseCode\": \"622639362407469665\",\n      \"creationTimestamp\": \"2019-11-19T19:01:34.532-08:00\",\n      \"description\": \"Windows 7 32-bit BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-7-x86-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-8-x64-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"7710168160606425653\",\n      \"licenseCode\": \"7036859048284197429\",\n      \"creationTimestamp\": \"2019-11-19T19:02:50.559-08:00\",\n      \"description\": \"Windows 8.x 64-bit BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-8-x64-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-8-x86-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"2601192579332117498\",\n      \"licenseCode\": \"3720924436396315642\",\n      \"creationTimestamp\": \"2019-11-19T19:03:49.785-08:00\",\n      \"description\": \"Windows 8.x 32-bit BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-8-x86-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-81-x64-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"5692263345196614391\",\n      \"licenseCode\": \"5366577783322166007\",\n      \"creationTimestamp\": \"2019-04-28T21:22:48.487-07:00\",\n      \"description\": \"Windows 8.1 Enterprise x64 BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-81-x64-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-ent\",\n      \"chargesUseFee\": false,\n      \"id\": \"1257656105385958662\",\n      \"licenseCode\": \"2967169933779246342\",\n      \"creationTimestamp\": \"2019-09-25T19:35:21.078-07:00\",\n      \"description\": \"Windows Enterprise\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-ent\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-for-containers\",\n      \"chargesUseFee\": false,\n      \"id\": \"7423076496314791885\",\n      \"licenseCode\": \"2643967004807329741\",\n      \"creationTimestamp\": \"2017-09-25T11:21:22.120-07:00\",\n      \"description\": \"Windows container host\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-for-containers\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-1709-dc\",\n      \"chargesUseFee\": false,\n      \"id\": \"2638722841150638382\",\n      \"licenseCode\": \"5194306116883728686\",\n      \"creationTimestamp\": \"2017-10-03T13:49:05.759-07:00\",\n      \"description\": \"Windows Server 1709 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-1709-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-1803-dc\",\n      \"chargesUseFee\": false,\n      \"id\": \"991969583094905153\",\n      \"licenseCode\": \"6476660300603799873\",\n      \"creationTimestamp\": \"2018-05-07T10:06:54.761-07:00\",\n      \"description\": \"Windows Server version 1803 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-1803-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-1809-dc\",\n      \"chargesUseFee\": false,\n      \"id\": \"2197036663612051569\",\n      \"licenseCode\": \"8597854123084943473\",\n      \"creationTimestamp\": \"2018-10-04T17:21:50.249-07:00\",\n      \"description\": \"Windows Server version 1809 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-1809-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-1903-dc\",\n      \"chargesUseFee\": false,\n      \"id\": \"783754911489890105\",\n      \"licenseCode\": \"5980382382909462329\",\n      \"creationTimestamp\": \"2019-06-10T21:11:02.733-07:00\",\n      \"description\": \"Windows Server version 1903 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-1903-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-1909-dc\",\n      \"chargesUseFee\": false,\n      \"id\": \"1504783339576403625\",\n      \"licenseCode\": \"1413572828508235433\",\n      \"creationTimestamp\": \"2019-11-14T01:03:02.101-08:00\",\n      \"description\": \"Windows Server version 1909 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-1909-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2000\",\n      \"chargesUseFee\": false,\n      \"id\": \"77415431498093015\",\n      \"licenseCode\": \"5507061839551517143\",\n      \"creationTimestamp\": \"2021-03-02T09:00:40.478-08:00\",\n      \"description\": \"Windows Server 2000\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2000\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2003\",\n      \"chargesUseFee\": false,\n      \"id\": \"8972483680585271920\",\n      \"licenseCode\": \"5030842449011296880\",\n      \"creationTimestamp\": \"2017-04-10T14:09:51.924-07:00\",\n      \"description\": \"Windows Server 2003\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2003\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2004-dc\",\n      \"chargesUseFee\": false,\n      \"id\": \"6915731882356532357\",\n      \"licenseCode\": \"6710259852346942597\",\n      \"creationTimestamp\": \"2020-07-23T11:43:54.418-07:00\",\n      \"description\": \"Windows Server version 2004 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2004-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2008\",\n      \"chargesUseFee\": false,\n      \"id\": \"2740560588278180852\",\n      \"licenseCode\": \"1656378918552316916\",\n      \"creationTimestamp\": \"2022-11-09T13:01:15.565-08:00\",\n      \"description\": \"Windows Server 2008 Standard Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2008\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2008-dc\",\n      \"chargesUseFee\": true,\n      \"id\": \"5520530534018080146\",\n      \"licenseCode\": \"1000502\",\n      \"creationTimestamp\": \"2015-06-03T17:05:28.000-07:00\",\n      \"description\": \"Windows Server 2008 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2008-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2008-r2\",\n      \"chargesUseFee\": false,\n      \"id\": \"4293107698603502582\",\n      \"licenseCode\": \"3284763237085719542\",\n      \"creationTimestamp\": \"2022-11-09T13:01:13.386-08:00\",\n      \"description\": \"Windows Server 2008 R2 Standard Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2008-r2\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2008-r2-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"6485631155857676024\",\n      \"licenseCode\": \"4551215591257167608\",\n      \"creationTimestamp\": \"2018-10-05T15:39:19.139-07:00\",\n      \"description\": \"Windows Server 2008R2 BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2008-r2-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2008-r2-dc\",\n      \"chargesUseFee\": true,\n      \"id\": \"6080198139471122848\",\n      \"licenseCode\": \"1000000\",\n      \"creationTimestamp\": \"2013-08-19T17:17:57.000-07:00\",\n      \"description\": \"Windows Server 2008 R2 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2008-r2-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2012\",\n      \"chargesUseFee\": false,\n      \"id\": \"4571663854194502649\",\n      \"licenseCode\": \"7695108898142923768\",\n      \"creationTimestamp\": \"2022-11-09T13:01:10.861-08:00\",\n      \"description\": \"Windows Server 2012 Standard Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2012\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2012-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"2247304514167789851\",\n      \"licenseCode\": \"5559842820536817947\",\n      \"creationTimestamp\": \"2018-10-05T15:38:44.367-07:00\",\n      \"description\": \"Windows Server 2012 BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2012-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2012-dc\",\n      \"chargesUseFee\": true,\n      \"id\": \"6102042211374830963\",\n      \"licenseCode\": \"1000015\",\n      \"creationTimestamp\": \"2015-01-05T16:58:27.000-08:00\",\n      \"description\": \"Windows Server 2012 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2012-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2012-r2\",\n      \"chargesUseFee\": false,\n      \"id\": \"975226805105568736\",\n      \"licenseCode\": \"7798417859637521376\",\n      \"creationTimestamp\": \"2022-11-09T13:01:03.469-08:00\",\n      \"description\": \"Windows Server 2012 R2 Standard Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2012-r2\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2012-r2-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"11586629996795623\",\n      \"licenseCode\": \"6738952703547430631\",\n      \"creationTimestamp\": \"2018-10-05T15:39:04.149-07:00\",\n      \"description\": \"Windows Server 2012R2 BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2012-r2-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2012-r2-dc\",\n      \"chargesUseFee\": true,\n      \"id\": \"6102042209776448355\",\n      \"licenseCode\": \"1000017\",\n      \"creationTimestamp\": \"2015-01-05T16:58:27.000-08:00\",\n      \"description\": \"Windows Server 2012 R2 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2012-r2-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2012-r2-dc-in-place-upgrade\",\n      \"chargesUseFee\": false,\n      \"id\": \"1687636345185865342\",\n      \"licenseCode\": \"7123010349826543230\",\n      \"creationTimestamp\": \"2020-03-24T09:08:49.417-07:00\",\n      \"description\": \"Windows Server 2008 R2 to 2012 R2 in place upgrade\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2012-r2-dc-in-place-upgrade\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2016\",\n      \"chargesUseFee\": false,\n      \"id\": \"2566166048269249507\",\n      \"licenseCode\": \"4819555115818134498\",\n      \"creationTimestamp\": \"2022-11-09T13:01:01.077-08:00\",\n      \"description\": \"Windows Server 2016 Standard Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2016\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2016-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"6580557195888974094\",\n      \"licenseCode\": \"4322823184804632846\",\n      \"creationTimestamp\": \"2018-10-05T15:38:26.021-07:00\",\n      \"description\": \"Windows Server 2016 BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2016-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2016-dc\",\n      \"chargesUseFee\": true,\n      \"id\": \"2483536683413682772\",\n      \"licenseCode\": \"1000213\",\n      \"creationTimestamp\": \"2016-05-02T14:35:54.000-07:00\",\n      \"description\": \"Windows Server 2016 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2016-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2016-dc-in-place-upgrade\",\n      \"chargesUseFee\": false,\n      \"id\": \"7616085184958426941\",\n      \"licenseCode\": \"5199320590876405565\",\n      \"creationTimestamp\": \"2022-03-04T09:52:18.982-08:00\",\n      \"description\": \"in-place upgraded to Windows Server 2016\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2016-dc-in-place-upgrade\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2016-nano\",\n      \"chargesUseFee\": true,\n      \"id\": \"2282594357842688596\",\n      \"licenseCode\": \"1000214\",\n      \"creationTimestamp\": \"2016-05-02T14:35:54.000-07:00\",\n      \"description\": \"Windows Server 2016 Nano\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2016-nano\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2019\",\n      \"chargesUseFee\": false,\n      \"id\": \"3525541779464104933\",\n      \"licenseCode\": \"4874454843789519845\",\n      \"creationTimestamp\": \"2022-11-09T13:00:58.674-08:00\",\n      \"description\": \"Windows Server 2019 Standard Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2019\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2019-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"1090214026507846099\",\n      \"licenseCode\": \"6532438499690676691\",\n      \"creationTimestamp\": \"2019-09-25T12:25:48.522-07:00\",\n      \"description\": \"Windows Server 2019 BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2019-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2019-dc\",\n      \"chargesUseFee\": false,\n      \"id\": \"5993475225685790965\",\n      \"licenseCode\": \"3389558045860892917\",\n      \"creationTimestamp\": \"2018-10-04T17:19:38.568-07:00\",\n      \"description\": \"Windows Server 2019 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2019-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2019-dc-in-place-upgrade\",\n      \"chargesUseFee\": false,\n      \"id\": \"7388112379630840967\",\n      \"licenseCode\": \"3156934045285215367\",\n      \"creationTimestamp\": \"2022-03-04T09:54:48.827-08:00\",\n      \"description\": \"in-place upgraded to Windows Server 2019\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2019-dc-in-place-upgrade\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2022\",\n      \"chargesUseFee\": false,\n      \"id\": \"8141439404167244305\",\n      \"licenseCode\": \"6107784707477449232\",\n      \"creationTimestamp\": \"2022-11-09T13:00:46.975-08:00\",\n      \"description\": \"Windows Server 2022 Standard Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2022\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2022-byol\",\n      \"chargesUseFee\": false,\n      \"id\": \"2150336909657452508\",\n      \"licenseCode\": \"2808834792899686364\",\n      \"creationTimestamp\": \"2021-08-25T11:51:31.527-07:00\",\n      \"description\": \"Windows Server 2022 BYOL\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2022-byol\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2022-dc\",\n      \"chargesUseFee\": false,\n      \"id\": \"2525168283357630087\",\n      \"licenseCode\": \"4079807029871201927\",\n      \"creationTimestamp\": \"2021-09-02T08:40:24.070-07:00\",\n      \"description\": \"Windows Server 2022 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2022-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-2022-dc-in-place-upgrade\",\n      \"chargesUseFee\": false,\n      \"id\": \"7118639573064740016\",\n      \"licenseCode\": \"4670175393034005680\",\n      \"creationTimestamp\": \"2022-03-04T09:54:39.255-08:00\",\n      \"description\": \"in-place upgraded to Windows Server 2022\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-2022-dc-in-place-upgrade\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-20h2-dc\",\n      \"chargesUseFee\": false,\n      \"id\": \"2209136415345591070\",\n      \"licenseCode\": \"8578754948912497438\",\n      \"creationTimestamp\": \"2020-11-02T13:45:21.528-08:00\",\n      \"description\": \"Windows Server version 20H2 Datacenter Edition\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-20h2-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-21h1-dc\",\n      \"chargesUseFee\": false,\n      \"id\": \"8661389914554199433\",\n      \"licenseCode\": \"7248135684629163401\",\n      \"creationTimestamp\": \"2021-04-29T08:40:22.527-07:00\",\n      \"description\": \"Windows Server version 21h1 Datacenter Edition\",\n      \"transferable\": true,\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-21h1-dc\"\n    },\n    {\n      \"kind\": \"compute#license\",\n      \"name\": \"windows-server-core\",\n      \"chargesUseFee\": true,\n      \"id\": \"7184832379764048457\",\n      \"licenseCode\": \"1000226\",\n      \"creationTimestamp\": \"2016-11-07T13:21:29.000-08:00\",\n      \"description\": \"Windows Server Core\",\n      \"transferable\": true,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses/windows-server-core\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/licenses\"\n}\n"
  },
  {
    "path": "test-data/gce4/json-dumps/compute-migs-europe-west1-b.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instanceGroupManagers\",\n  \"items\": [\n    {\n      \"kind\": \"compute#instanceGroupManager\",\n      \"id\": \"1906946679224250602\",\n      \"creationTimestamp\": \"2022-04-26T08:21:41.088-07:00\",\n      \"name\": \"gke-gke1-default-pool-35923fbc-grp\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b\",\n      \"instanceTemplate\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/instanceTemplates/gke-gke1-default-pool-35923fbc\",\n      \"versions\": [\n        {\n          \"instanceTemplate\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/instanceTemplates/gke-gke1-default-pool-35923fbc\",\n          \"targetSize\": {\n            \"calculated\": 4\n          }\n        }\n      ],\n      \"instanceGroup\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instanceGroups/gke-gke1-default-pool-35923fbc-grp\",\n      \"baseInstanceName\": \"gke-gke1-default-pool-35923fbc\",\n      \"fingerprint\": \"cFBmeZR_JvQ=\",\n      \"currentActions\": {\n        \"none\": 4,\n        \"creating\": 0,\n        \"creatingWithoutRetries\": 0,\n        \"verifying\": 0,\n        \"recreating\": 0,\n        \"deleting\": 0,\n        \"abandoning\": 0,\n        \"restarting\": 0,\n        \"refreshing\": 0,\n        \"suspending\": 0,\n        \"resuming\": 0,\n        \"stopping\": 0,\n        \"starting\": 0\n      },\n      \"status\": {\n        \"isStable\": true,\n        \"versionTarget\": {\n          \"isReached\": true\n        },\n        \"stateful\": {\n          \"hasStatefulConfig\": false,\n          \"perInstanceConfigs\": {\n            \"allEffective\": true\n          }\n        }\n      },\n      \"targetSize\": 4,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instanceGroupManagers/gke-gke1-default-pool-35923fbc-grp\",\n      \"updatePolicy\": {\n        \"type\": \"OPPORTUNISTIC\",\n        \"minimalAction\": \"REPLACE\",\n        \"maxSurge\": {\n          \"fixed\": 1,\n          \"calculated\": 1\n        },\n        \"maxUnavailable\": {\n          \"fixed\": 1,\n          \"calculated\": 1\n        },\n        \"replacementMethod\": \"SUBSTITUTE\"\n      }\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west1-b/instanceGroupManagers\",\n  \"kind\": \"compute#instanceGroupManagerList\"\n}\n"
  },
  {
    "path": "test-data/gce4/json-dumps/compute-migs-europe-west2-b.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gce-vm-performance/zones/europe-west2-b/instanceGroupManagers\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-b/instanceGroupManagers\",\n  \"kind\": \"compute#instanceGroupManagerList\"\n}\n"
  },
  {
    "path": "test-data/gce4/json-dumps/compute-migs-europe-west4-a.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroupManagers\",\n  \"items\": [\n    {\n      \"kind\": \"compute#instanceGroupManager\",\n      \"id\": \"7183453391228875571\",\n      \"creationTimestamp\": \"2022-04-26T08:21:00.715-07:00\",\n      \"name\": \"mig\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a\",\n      \"instanceTemplate\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/instanceTemplates/mig-template\",\n      \"versions\": [\n        {\n          \"instanceTemplate\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/global/instanceTemplates/mig-template\",\n          \"targetSize\": {\n            \"calculated\": 2\n          }\n        }\n      ],\n      \"instanceGroup\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroups/mig\",\n      \"baseInstanceName\": \"mig\",\n      \"fingerprint\": \"lss-DXagYSg=\",\n      \"currentActions\": {\n        \"none\": 2,\n        \"creating\": 0,\n        \"creatingWithoutRetries\": 0,\n        \"verifying\": 0,\n        \"recreating\": 0,\n        \"deleting\": 0,\n        \"abandoning\": 0,\n        \"restarting\": 0,\n        \"refreshing\": 0,\n        \"suspending\": 0,\n        \"resuming\": 0,\n        \"stopping\": 0,\n        \"starting\": 0\n      },\n      \"status\": {\n        \"isStable\": true,\n        \"versionTarget\": {\n          \"isReached\": true\n        },\n        \"stateful\": {\n          \"hasStatefulConfig\": false,\n          \"perInstanceConfigs\": {\n            \"allEffective\": true\n          }\n        }\n      },\n      \"targetSize\": 2,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroupManagers/mig\",\n      \"updatePolicy\": {\n        \"type\": \"OPPORTUNISTIC\",\n        \"minimalAction\": \"REPLACE\",\n        \"maxSurge\": {\n          \"fixed\": 1,\n          \"calculated\": 1\n        },\n        \"maxUnavailable\": {\n          \"fixed\": 1,\n          \"calculated\": 1\n        },\n        \"replacementMethod\": \"SUBSTITUTE\"\n      }\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instanceGroupManagers\",\n  \"kind\": \"compute#instanceGroupManagerList\"\n}\n"
  },
  {
    "path": "test-data/gce4/json-dumps/compute-network-default.json",
    "content": "{\n  \"autoCreateSubnetworks\": true,\n  \"creationTimestamp\": \"2023-11-03T14:27:06.884-07:00\",\n  \"description\": \"Default network for the project\",\n  \"id\": \"4415164866624019269\",\n  \"kind\": \"compute#network\",\n  \"name\": \"default\",\n  \"networkFirewallPolicyEnforcementOrder\": \"AFTER_CLASSIC_FIREWALL\",\n  \"routingConfig\": {\n    \"routingMode\": \"REGIONAL\"\n  },\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default\",\n  \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/4415164866624019269\",\n  \"subnetworks\": [\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-southeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-east7/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/africa-south1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/me-central2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-east1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west8/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west10/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/me-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/northamerica-northeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-northeast3/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-east4/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/me-central1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/australia-southeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-northeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-east5/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-central2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-east1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-south2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-southeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-northeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/southamerica-east1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west9/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-south1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west3/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west6/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-north1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west3/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/southamerica-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/australia-southeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-east2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west8/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/northamerica-northeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-south1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west4/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-southwest1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-central1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west4/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west12/subnetworks/default\"\n  ]\n}\n"
  },
  {
    "path": "test-data/gce4/json-dumps/compute-network-routes.json",
    "content": "{\n  \"kind\": \"compute#routeList\",\n  \"id\": \"projects/gcpdiag-gce-vm-performance/global/routes\",\n  \"items\": [\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"2670539294019165993\",\n      \"creationTimestamp\": \"2023-03-15T03:45:27.008-07:00\",\n      \"name\": \"default\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default\",\n      \"destRange\": \"0.0.0.0/0\",\n      \"priority\": 1,\n      \"nextHopGateway\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/gateways/default-internet-gateway\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/routes/default\"\n    },\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"2178241415220915600\",\n      \"creationTimestamp\": \"2023-02-09T03:05:35.107-08:00\",\n      \"name\": \"peering-route-299fcb697f2532b0\",\n      \"description\": \"Auto generated route via peering [peering-r544dd974f1bc5396-tp-default].\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default\",\n      \"destRange\": \"192.168.0.0/26\",\n      \"priority\": 0,\n      \"nextHopPeering\": \"peering-r544dd974f1bc5396-tp-default\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/routes/peering-route-299fcb697f2532b0\"\n    },\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"8223547831511088095\",\n      \"creationTimestamp\": \"2023-03-10T06:56:48.979-08:00\",\n      \"name\": \"real-allow-kms\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default\",\n      \"tags\": [\n        \"windows\"\n      ],\n      \"destRange\": \"35.190.247.13/32\",\n      \"priority\": 1,\n      \"nextHopGateway\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/gateways/default-internet-gateway\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/routes/real-allow-kms\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/routes\"\n}\n"
  },
  {
    "path": "test-data/gce4/json-dumps/compute-project.json",
    "content": "{\n  \"commonInstanceMetadata\": {\n    \"fingerprint\": \"HTt6ps4-I3s=\",\n    \"items\": [\n      {\n        \"key\": \"ssh-keys\",\n        \"value\": \"      foo:ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILg6UtHDNyMNAh0GjaytsJdrUxjtLy3APXqZfNZhvCeT foo\\n\"\n      }\n    ],\n    \"kind\": \"compute#metadata\"\n  },\n  \"creationTimestamp\": \"2023-11-03T14:26:59.007-07:00\",\n  \"defaultNetworkTier\": \"PREMIUM\",\n  \"defaultServiceAccount\": \"12345601-compute@developer.gserviceaccount.com\",\n  \"id\": \"7025536248423439181\",\n  \"kind\": \"compute#project\",\n  \"name\": \"gcpdiag-gce-vm-perfrmance-runbook\",\n  \"quotas\": [\n    {\n      \"limit\": 10000,\n      \"metric\": \"SNAPSHOTS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 30,\n      \"metric\": \"NETWORKS\",\n      \"usage\": 1\n    },\n    {\n      \"limit\": 500,\n      \"metric\": \"FIREWALLS\",\n      \"usage\": 6\n    },\n    {\n      \"limit\": 5000,\n      \"metric\": \"IMAGES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 175,\n      \"metric\": \"STATIC_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 300,\n      \"metric\": \"ROUTES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"FORWARDING_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 500,\n      \"metric\": \"TARGET_POOLS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1000,\n      \"metric\": \"HEALTH_CHECKS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 575,\n      \"metric\": \"IN_USE_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 500,\n      \"metric\": \"TARGET_INSTANCES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_HTTP_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"URL_MAPS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"BACKEND_SERVICES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1000,\n      \"metric\": \"INSTANCE_TEMPLATES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 50,\n      \"metric\": \"TARGET_VPN_GATEWAYS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"VPN_TUNNELS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 30,\n      \"metric\": \"BACKEND_BUCKETS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 20,\n      \"metric\": \"ROUTERS\",\n      \"usage\": 1\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_SSL_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_HTTPS_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"SSL_CERTIFICATES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 275,\n      \"metric\": \"SUBNETWORKS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_TCP_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 10,\n      \"metric\": \"SECURITY_POLICIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 200,\n      \"metric\": \"SECURITY_POLICY_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1000,\n      \"metric\": \"XPN_SERVICE_PROJECTS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"PACKET_MIRRORINGS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1000,\n      \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 6,\n      \"metric\": \"INTERCONNECTS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 5000,\n      \"metric\": \"GLOBAL_INTERNAL_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 50,\n      \"metric\": \"VPN_GATEWAYS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 5000,\n      \"metric\": \"MACHINE_IMAGES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 20,\n      \"metric\": \"SECURITY_POLICY_CEVAL_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 50,\n      \"metric\": \"EXTERNAL_VPN_GATEWAYS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1,\n      \"metric\": \"PUBLIC_ADVERTISED_PREFIXES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 10,\n      \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1024,\n      \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 60,\n      \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"INTERNAL_TRAFFIC_DIRECTOR_FORWARDING_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"GLOBAL_EXTERNAL_MANAGED_FORWARDING_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"GLOBAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"GLOBAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"GLOBAL_EXTERNAL_PROXY_LB_BACKEND_SERVICES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 750,\n      \"metric\": \"GLOBAL_INTERNAL_TRAFFIC_DIRECTOR_BACKEND_SERVICES\",\n      \"usage\": 0\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-perfrmance-runbook\",\n  \"vmDnsSetting\": \"GLOBAL_DEFAULT\",\n  \"xpnProjectStatus\": \"UNSPECIFIED_XPN_PROJECT_STATUS\"\n}\n"
  },
  {
    "path": "test-data/gce4/json-dumps/compute-regions.json",
    "content": "{\n  \"kind\": \"compute#regionList\",\n  \"id\": \"projects/gcpdiag-gce-vm-performance/regions\",\n  \"items\": [\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1220\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east1\",\n      \"description\": \"asia-east1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-east1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-east1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-east1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-east1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1370\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east2\",\n      \"description\": \"asia-east2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-east2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-east2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-east2-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-east2\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1250\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast1\",\n      \"description\": \"asia-northeast1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-northeast1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-northeast1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-northeast1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-northeast1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1390\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast2\",\n      \"description\": \"asia-northeast2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-northeast2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-northeast2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-northeast2-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-northeast2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1410\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast3\",\n      \"description\": \"asia-northeast3\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-northeast3-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-northeast3-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-northeast3-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-northeast3\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1320\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south1\",\n      \"description\": \"asia-south1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-south1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-south1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-south1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-south1\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1470\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south2\",\n      \"description\": \"asia-south2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-south2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-south2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-south2-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-south2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1260\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast1\",\n      \"description\": \"asia-southeast1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-southeast1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-southeast1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-southeast1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-southeast1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1440\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast2\",\n      \"description\": \"asia-southeast2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-southeast2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-southeast2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-southeast2-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-southeast2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1280\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast1\",\n      \"description\": \"australia-southeast1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/australia-southeast1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/australia-southeast1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/australia-southeast1-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/australia-southeast1\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1480\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast2\",\n      \"description\": \"australia-southeast2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/australia-southeast2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/australia-southeast2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/australia-southeast2-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/australia-southeast2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1450\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-central2\",\n      \"description\": \"europe-central2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-central2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-central2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-central2-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-central2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1350\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-north1\",\n      \"description\": \"europe-north1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-north1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-north1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-north1-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-north1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1540\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-southwest1\",\n      \"description\": \"europe-southwest1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-southwest1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-southwest1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-southwest1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-southwest1\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1100\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west1\",\n      \"description\": \"europe-west1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west1-d\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1590\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west10\",\n      \"description\": \"europe-west10\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west10-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west10-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west10-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west10\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1570\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west12\",\n      \"description\": \"europe-west12\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west12-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west12-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west12-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west12\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1290\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west2\",\n      \"description\": \"europe-west2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 84\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 4\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 3\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west2\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1300\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west3\",\n      \"description\": \"europe-west3\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west3-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west3-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west3-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west3\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1340\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west4\",\n      \"description\": \"europe-west4\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west4\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1380\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west6\",\n      \"description\": \"europe-west6\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west6-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west6-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west6-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west6\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1510\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west8\",\n      \"description\": \"europe-west8\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west8-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west8-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west8-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west8\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1520\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west9\",\n      \"description\": \"europe-west9\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west9-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west9-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west9-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west9\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1580\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central1\",\n      \"description\": \"me-central1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/me-central1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/me-central1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/me-central1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/me-central1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1600\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central2\",\n      \"description\": \"me-central2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/me-central2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/me-central2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/me-central2-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/me-central2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1560\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-west1\",\n      \"description\": \"me-west1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/me-west1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/me-west1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/me-west1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/me-west1\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1330\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast1\",\n      \"description\": \"northamerica-northeast1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/northamerica-northeast1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/northamerica-northeast1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/northamerica-northeast1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/northamerica-northeast1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1460\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast2\",\n      \"description\": \"northamerica-northeast2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/northamerica-northeast2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/northamerica-northeast2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/northamerica-northeast2-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/northamerica-northeast2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1310\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-east1\",\n      \"description\": \"southamerica-east1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/southamerica-east1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/southamerica-east1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/southamerica-east1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/southamerica-east1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1490\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-west1\",\n      \"description\": \"southamerica-west1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/southamerica-west1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/southamerica-west1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/southamerica-west1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/southamerica-west1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1000\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1\",\n      \"description\": \"us-central1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-central1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-central1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-central1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-central1-f\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-central1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1230\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east1\",\n      \"description\": \"us-east1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-east1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-east1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-east1-d\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-east1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1270\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east4\",\n      \"description\": \"us-east4\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-east4-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-east4-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-east4-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-east4\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1530\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east5\",\n      \"description\": \"us-east5\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-east5-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-east5-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-east5-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-east5\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1550\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-south1\",\n      \"description\": \"us-south1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-south1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-south1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-south1-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-south1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1210\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west1\",\n      \"description\": \"us-west1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-west1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-west1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-west1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1360\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west2\",\n      \"description\": \"us-west2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-west2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-west2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-west2-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1420\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west3\",\n      \"description\": \"us-west3\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-west3-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-west3-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-west3-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west3\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1430\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west4\",\n      \"description\": \"us-west4\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-west4-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-west4-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-west4-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west4\",\n      \"supportsPzs\": false\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions\"\n}\n"
  },
  {
    "path": "test-data/gce4/json-dumps/compute-serial-port-output-1010101010.json",
    "content": "{\n  \"kind\": \"compute#serialPortOutput\",\n  \"contents\": \"\\u001b[2J\\u001b[01;01H\\u001b[=3h\\u001b[2J\\u001b[01;01H\\u001b[2J\\u001b[01;01H\\u001b[=3h\\u001b[2J\\u001b[01;01HCSM BBS Table full.\\r\\nBdsDxe: loading Boot0001 \\\"UEFI Google PersistentDisk \\\" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\\r\\nBdsDxe: starting Boot0001 \\\"UEFI Google PersistentDisk \\\" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\\r\\n\\r\\nUEFI: Attempting to start image.\\r\\nDescription: UEFI Google PersistentDisk \\r\\nFilePath: PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\\r\\nOptionNumber: 1.\\r\\n[   20.5] cloud-init[56]: Cloud-init v. 21.4 finished at Thu, 13 Apr 2023 13:53:15 +0000. Datasource DataSourceGCE.  Up 20.49 seconds\",\n  \"start\": \"0\",\n  \"next\": \"63414\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instances/1010101010/serialPortOutput\"\n}\n"
  },
  {
    "path": "test-data/gce4/json-dumps/compute-serial-port-output-1010101011.json",
    "content": "{\n  \"kind\": \"compute#serialPortOutput\",\n  \"contents\": \"\\u001b[2J\\u001b[01;01H\\u001b[=3h\\u001b[2J\\u001b[01;01H\\u001b[2J\\u001b[01;01H\\u001b[=3h\\u001b[2J\\u001b[01;01HCSM BBS Table full.\\r\\nBdsDxe: loading Boot0001 \\\"UEFI Google PersistentDisk \\\" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\\r\\nBdsDxe: starting Boot0001 \\\"UEFI Google PersistentDisk \\\" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\\r\\n\\r\\nUEFI: Attempting to start image.\\r\\nDescription: UEFI Google PersistentDisk \\r\\nFilePath: PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\\r\\nOptionNumber: 1.\\r\\n[   20.5] cloud-init[56]: Cloud-init v. 21.4 finished at Thu, 13 Apr 2023 13:53:15 +0000. Datasource DataSourceGCE.  Up 20.49 seconds\",\n  \"start\": \"0\",\n  \"next\": \"63414\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instances/1010101010/serialPortOutput\"\n}\n"
  },
  {
    "path": "test-data/gce4/json-dumps/compute-serial-port-output-faulty-linux-ssh.json",
    "content": "{\n  \"kind\": \"compute#serialPortOutput\",\n  \"contents\": \"\\u001b[2J\\u001b[01;01H\\u001b[=3h\\u001b[2J\\u001b[01;01H\\u001b[2J\\u001b[01;01H\\u001b[=3h\\u001b[2J\\u001b[01;01HCSM BBS Table full.\\r\\nBdsDxe: loading Boot0001 \\\"UEFI Google PersistentDisk \\\" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\\r\\nBdsDxe: starting Boot0001 \\\"UEFI Google PersistentDisk \\\" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\\r\\n\\r\\nUEFI: Attempting to start image.\\r\\nDescription: UEFI Google PersistentDisk \\r\\nFilePath: PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\\r\\nOptionNumber: 1.\\r\\n\\r\\n\\u001b[0m\\u001b[30m\\u001b[47mWelcome to GRUB!\\n\\r\\n\\r\\u001b[0m\\u001b[37m\\u001b[40m\\u001b[0m\\u001b[30m\\u001b[40m\\u001b[2J\\u001b[01;01H\\u001b[0m\\u001b[37m\\u001b[40m\\u001b[H\\u001b[J\\u001b[1;1H\\u001b[H\\u001b[J\\u001b[1;1H\\u001b[0m\\u001b[30m\\u001b[40m\\u001b[2J\\u001b[01;01H\\u001b[0m\\u001b[37m\\u001b[40m    Booting `Debian GNU/Linux'Booting `Debian GNU/Linux'\\n\\r\\n\\r\\n\\r\\n\\rLoading Linux 5.10.0-26-cloud-amd64 ...Loading Linux 5.10.0-26-cloud-amd64 ...\\n\\r\\n\\rLoading initial ramdisk ...Loading initial ramdisk ...\\n\\r\\n\\rerror: no suitable video mode found.\\n\\rerror: no suitable video mode found.\\n\\rBooting in blind modeBooting in blind mode\\n\\r\\n\\r[    0.000000] Linux version 5.10.0-26-cloud-amd64 (debian-kernel@lists.debian.org) (gcc-10 (Debian 10.2.1-6) 10.2.1 20210110, GNU ld (GNU Binutils for Debian) 2.35.2) #1 SMP Debian 5.10.197-1 (2023-09-29)\\r\\n[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-5.10.0-26-cloud-amd64 root=UUID=e6fe3fcb-2478-4e7e-8072-4ced46dceac5 ro console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0 intel_iommu=off\\r\\n[    0.000000] BIOS-provided physical RAM map:\\r\\n[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x0000000000000fff] reserved\\r\\n[    0.000000] BIOS-e820: [mem 0x0000000000001000-0x0000000000054fff] usable\\r\\n[    0.000000] BIOS-e820: [mem 0x0000000000055000-0x000000000005ffff] reserved\\r\\n[    0.000000] BIOS-e820: [mem 0x0000000000060000-0x0000000000097fff] usable\\r\\n[    0.000000] BIOS-e820: [mem 0x0000000000098000-0x000000000009ffff] reserved\\r\\n[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x0000000025eecfff] usable\\r\\n[    0.000000] BIOS-e820: [mem 0x0000000025eed000-0x0000000025fecfff] reserved\\r\\n[    0.000000] BIOS-e820: [mem 0x0000000025fed000-0x00000000260ecfff] type 20\\r\\n[    0.000000] BIOS-e820: [mem 0x00000000260ed000-0x000000002616cfff] reserved\\r\\n[    0.000000] BIOS-e820: [mem 0x000000002616d000-0x000000002617efff] ACPI data\\r\\n[    0.000000] BIOS-e820: [mem 0x000000002617f000-0x00000000261fefff] ACPI NVS\\r\\n[    0.000000] BIOS-e820: [mem 0x00000000261ff000-0x00000000265dffff] usable\\r\\n[    0.000000] BIOS-e820: [mem 0x00000000265e0000-0x00000000265fffff] reserved\\r\\n[    0.000000] printk: bootconsole [earlyser0] enabled\\r\\n[    0.000000] NX (Execute Disable) protection: active\\r\\n[    0.000000] efi: EFI v2.70 by EDK II\\r\\n[    0.000000] efi: TPMFinalLog=0x261f7000 ACPI=0x2617e000 ACPI 2.0=0x2617e014 SMBIOS=0x25fca000 MEMATTR=0x249a0018 \\r\\n[    0.000000] secureboot: Secure boot disabled\\r\\n[    0.000000] SMBIOS 2.4 present.\\r\\n[    0.000000] DMI: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/09/2023\\r\\n[    0.000000] Hypervisor detected: KVM\\r\\n[    0.000000] kvm-clock: Using msrs 4b564d01 and 4b564d00\\r\\n[    0.000000] kvm-clock: cpu 0, msr 11601001, primary cpu clock\\r\\n[    0.000000] kvm-clock: using sched offset of 6574541159 cycles\\r\\n[    0.000750] clocksource: kvm-clock: mask: 0xffffffffffffffff max_cycles: 0x1cd42e4dffb, max_idle_ns: 881590591483 ns\\r\\n[    0.003137] tsc: Detected 2200.170 MHz processor\\r\\n[    0.003944] last_pfn = 0x265e0 max_arch_pfn = 0x400000000\\r\\n[    0.004756] x86/PAT: Configuration [0-7]: WB  WC  UC- UC  WB  WP  UC- WT  \\r\\nMemory KASLR using RDRAND RDTSC...\\r\\n[    0.006413] Using GB pages for direct mapping\\r\\n[    0.007451] RAMDISK: [mem 0x2327f000-0x24000fff]\\r\\n[    0.008104] ACPI: Early table checksum verification disabled\\r\\n[    0.008840] ACPI: RSDP 0x000000002617E014 000024 (v02 Google)\\r\\n[    0.009613] ACPI: XSDT 0x000000002617D0E8 00005C (v01 Google GOOGFACP 00000001      01000013)\\r\\n[    0.010705] ACPI: FACP 0x0000000026178000 0000F4 (v02 Google GOOGFACP 00000001 GOOG 00000001)\\r\\n[    0.011795] ACPI: DSDT 0x0000000026179000 001A64 (v01 Google GOOGDSDT 00000001 GOOG 00000001)\\r\\n[    0.013148] ACPI: FACS 0x00000000261F2000 000040\\r\\n[    0.013789] ACPI: SSDT 0x000000002617C000 000316 (v02 GOOGLE Tpm2Tabl 00001000 INTL 20211217)\\r\\n[    0.015074] ACPI: TPM2 0x000000002617B000 000034 (v04 GOOGLE          00000001 GOOG 00000001)\\r\\n[    0.016308] ACPI: SRAT 0x0000000026177000 0000B8 (v03 Google GOOGSRAT 00000001 GOOG 00000001)\\r\\n[    0.017416] ACPI: APIC 0x0000000026176000 00006E (v05 Google GOOGAPIC 00000001 GOOG 00000001)\\r\\n[    0.018848] ACPI: SSDT 0x0000000026175000 00091F (v01 Google GOOGSSDT 00000001 GOOG 00000001)\\r\\n[    0.019981] ACPI: WAET 0x0000000026174000 000028 (v01 Google GOOGWAET 00000001 GOOG 00000001)\\r\\n[    0.021071] ACPI: Reserving FACP table memory at [mem 0x26178000-0x261780f3]\\r\\n[    0.021968] ACPI: Reserving DSDT table memory at [mem 0x26179000-0x2617aa63]\\r\\n[    0.022868] ACPI: Reserving FACS table memory at [mem 0x261f2000-0x261f203f]\\r\\n[    0.024195] ACPI: Reserving SSDT table memory at [mem 0x2617c000-0x2617c315]\\r\\n[    0.025096] ACPI: Reserving TPM2 table memory at [mem 0x2617b000-0x2617b033]\\r\\n[    0.026077] ACPI: Reserving SRAT table memory at [mem 0x26177000-0x261770b7]\\r\\n[    0.026976] ACPI: Reserving APIC table memory at [mem 0x26176000-0x2617606d]\\r\\n[    0.028016] ACPI: Reserving SSDT table memory at [mem 0x26175000-0x2617591e]\\r\\n[    0.028910] ACPI: Reserving WAET table memory at [mem 0x26174000-0x26174027]\\r\\n[    0.029920] SRAT: PXM 0 -\\u003e APIC 0x00 -\\u003e Node 0\\r\\n[    0.030516] ACPI: SRAT: Node 0 PXM 0 [mem 0x00000000-0x0009ffff]\\r\\n[    0.031283] ACPI: SRAT: Node 0 PXM 0 [mem 0x00100000-0x265fffff]\\r\\n[    0.032201] NUMA: Node 0 [mem 0x00000000-0x0009ffff] + [mem 0x00100000-0x265dffff] -\\u003e [mem 0x00000000-0x265dffff]\\r\\n[    0.034082] NODE_DATA(0) allocated [mem 0x26498000-0x264c1fff]\\r\\n[    0.035210] Zone ranges:\\r\\n[    0.035556]   DMA      [mem 0x0000000000001000-0x0000000000ffffff]\\r\\n[    0.036346]   DMA32    [mem 0x0000000001000000-0x00000000265dffff]\\r\\n[    0.037132]   Normal   empty\\r\\n[    0.037500]   Device   empty\\r\\n[    0.037865] Movable zone start for each node\\r\\n[    0.038411] Early memory node ranges\\r\\n[    0.038866]   node   0: [mem 0x0000000000001000-0x0000000000054fff]\\r\\n[    0.039666]   node   0: [mem 0x0000000000060000-0x0000000000097fff]\\r\\n[    0.040501]   node   0: [mem 0x0000000000100000-0x0000000025eecfff]\\r\\n[    0.041319]   node   0: [mem 0x00000000261ff000-0x00000000265dffff]\\r\\n[    0.042118] Initmem setup node 0 [mem 0x0000000000001000-0x00000000265dffff]\\r\\n[    0.043516] On node 0, zone DMA: 1 pages in unavailable ranges\\r\\n[    0.043518] On node 0, zone DMA: 11 pages in unavailable ranges\\r\\n[    0.044348] On node 0, zone DMA: 104 pages in unavailable ranges\\r\\n[    0.046817] On node 0, zone DMA32: 786 pages in unavailable ranges\\r\\n[    0.047679] On node 0, zone DMA32: 6688 pages in unavailable ranges\\r\\n[    0.048980] ACPI: PM-Timer IO Port: 0xb008\\r\\n[    0.050442] ACPI: LAPIC_NMI (acpi_id[0xff] dfl dfl lint[0x1])\\r\\n[    0.051354] IOAPIC[0]: apic_id 0, version 17, address 0xfec00000, GSI 0-23\\r\\n[    0.052270] ACPI: INT_SRC_OVR (bus 0 bus_irq 5 global_irq 5 high level)\\r\\n[    0.053112] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)\\r\\n[    0.054025] ACPI: INT_SRC_OVR (bus 0 bus_irq 10 global_irq 10 high level)\\r\\n[    0.054888] ACPI: INT_SRC_OVR (bus 0 bus_irq 11 global_irq 11 high level)\\r\\n[    0.055764] Using ACPI (MADT) for SMP configuration information\\r\\n[    0.056581] smpboot: Allowing 1 CPUs, 0 hotplug CPUs\\r\\n[    0.057278] PM: hibernation: Registered nosave memory: [mem 0x00000000-0x00000fff]\\r\\n[    0.058289] PM: hibernation: Registered nosave memory: [mem 0x00055000-0x0005ffff]\\r\\n[    0.059254] PM: hibernation: Registered nosave memory: [mem 0x00098000-0x0009ffff]\\r\\n[    0.060218] PM: hibernation: Registered nosave memory: [mem 0x000a0000-0x000fffff]\\r\\n[    0.061186] PM: hibernation: Registered nosave memory: [mem 0x25eed000-0x25fecfff]\\r\\n[    0.062153] PM: hibernation: Registered nosave memory: [mem 0x25fed000-0x260ecfff]\\r\\n[    0.063119] PM: hibernation: Registered nosave memory: [mem 0x260ed000-0x2616cfff]\\r\\n[    0.064086] PM: hibernation: Registered nosave memory: [mem 0x2616d000-0x2617efff]\\r\\n[    0.065051] PM: hibernation: Registered nosave memory: [mem 0x2617f000-0x261fefff]\\r\\n[    0.066343] [mem 0x26600000-0xffffffff] available for PCI devices\\r\\n[    0.067140] Booting paravirtualized kernel on KVM\\r\\n[    0.067740] clocksource: refined-jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645519600211568 ns\\r\\n[    0.073455] setup_percpu: NR_CPUS:8192 nr_cpumask_bits:1 nr_cpu_ids:1 nr_node_ids:1\\r\\n[    0.075118] percpu: Embedded 63 pages/cpu s221184 r8192 d28672 u2097152\\r\\n[    0.076074] kvm-guest: PV spinlocks disabled, single CPU\\r\\n[    0.076805] Built 1 zonelists, mobility grouping on.  Total pages: 150673\\r\\n[    0.077803] Policy zone: DMA32\\r\\n[    0.078192] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-5.10.0-26-cloud-amd64 root=UUID=e6fe3fcb-2478-4e7e-8072-4ced46dceac5 ro console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0 intel_iommu=off\\r\\n[    0.080817] DMAR: IOMMU disabled\\r\\n[    0.081474] Dentry cache hash table entries: 131072 (order: 8, 1048576 bytes, linear)\\r\\n[    0.082690] Inode-cache hash table entries: 65536 (order: 7, 524288 bytes, linear)\\r\\n[    0.083743] mem auto-init: stack:off, heap alloc:on, heap free:off\\r\\n[    0.087100] Memory: 233576K/625000K available (12296K kernel code, 2552K rwdata, 6956K rodata, 2468K init, 3724K bss, 103652K reserved, 0K cma-reserved)\\r\\n[    0.089122] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1\\r\\n[    0.090012] Kernel/User page tables isolation: enabled\\r\\nPoking KASLR using RDRAND RDTSC...\\r\\n[    0.091151] ftrace: allocating 33918 entries in 133 pages\\r\\n[    0.111503] ftrace: allocated 133 pages with 3 groups\\r\\n[    0.112765] rcu: Hierarchical RCU implementation.\\r\\n[    0.113378] rcu: \\tRCU restricting CPUs from NR_CPUS=8192 to nr_cpu_ids=1.\\r\\n[    0.114278] \\tRude variant of Tasks RCU enabled.\\r\\n[    0.114855] \\tTracing variant of Tasks RCU enabled.\\r\\n[    0.115469] rcu: RCU calculated value of scheduler-enlistment delay is 25 jiffies.\\r\\n[    0.116433] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=1\\r\\n[    0.121697] NR_IRQS: 524544, nr_irqs: 256, preallocated irqs: 16\\r\\n[    0.122810] random: crng init done\\r\\n[    0.123274] Console: colour dummy device 80x25\\r\\n[    0.124053] printk: console [tty0] enabled\\r\\n[    0.124835] printk: console [ttyS0] enabled\\r\\n[    0.124835] printk: console [ttyS0] enabled\\r\\n[    0.126039] printk: bootconsole [earlyser0] disabled\\r\\n[    0.126039] printk: bootconsole [earlyser0] disabled\\r\\n[    0.127441] ACPI: Core revision 20200925\\r\\n[    0.128098] APIC: Switch to symmetric I/O mode setup\\r\\n[    0.129244] x2apic enabled\\r\\n[    0.131960] Switched APIC routing to physical x2apic.\\r\\n[    0.136632] ..TIMER: vector=0x30 apic1=0 pin1=0 apic2=-1 pin2=-1\\r\\n[    0.137712] clocksource: tsc-early: mask: 0xffffffffffffffff max_cycles: 0x1fb6d394f62, max_idle_ns: 440795316813 ns\\r\\n[    0.139157] Calibrating delay loop (skipped) preset value.. 4400.34 BogoMIPS (lpj=8800680)\\r\\n[    0.143263] Last level iTLB entries: 4KB 64, 2MB 8, 4MB 8\\r\\n[    0.144056] Last level dTLB entries: 4KB 64, 2MB 0, 4MB 0, 1GB 4\\r\\n[    0.144991] Spectre V1 : Mitigation: usercopy/swapgs barriers and __user pointer sanitization\\r\\n[    0.146142] Spectre V2 : Mitigation: IBRS\\r\\n[    0.146695] Spectre V2 : Spectre v2 / SpectreRSB mitigation: Filling RSB on context switch\\r\\n[    0.147156] Spectre V2 : Spectre v2 / SpectreRSB : Filling RSB on VMEXIT\\r\\n[    0.148095] RETBleed: Mitigation: IBRS\\r\\n[    0.148658] Spectre V2 : mitigation: Enabling conditional Indirect Branch Prediction Barrier\\r\\n[    0.149882] Speculative Store Bypass: Mitigation: Speculative Store Bypass disabled via prctl and seccomp\\r\\n[    0.151163] MDS: Mitigation: Clear CPU buffers\\r\\n[    0.151804] TAA: Mitigation: Clear CPU buffers\\r\\n[    0.152445] MMIO Stale Data: Vulnerable: Clear CPU buffers attempted, no microcode\\r\\n[    0.153624] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'\\r\\n[    0.155158] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'\\r\\n[    0.156050] x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers'\\r\\n[    0.156905] x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]:  256\\r\\n[    0.157851] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.\\r\\n[    0.177428] Freeing SMP alternatives memory: 32K\\r\\n[    0.179890] pid_max: default: 32768 minimum: 301\\r\\n[    0.188030] LSM: Security Framework initializing\\r\\n[    0.188748] Yama: disabled by default; enable with sysctl kernel.yama.*\\r\\n[    0.189713] AppArmor: AppArmor initialized\\r\\n[    0.190294] TOMOYO Linux initialized\\r\\n[    0.190806] Mount-cache hash table entries: 2048 (order: 2, 16384 bytes, linear)\\r\\n[    0.191158] Mountpoint-cache hash table entries: 2048 (order: 2, 16384 bytes, linear)\\r\\n[    0.301178] smpboot: CPU0: Intel(R) Xeon(R) CPU @ 2.20GHz (family: 0x6, model: 0x4f, stepping: 0x0)\\r\\n[    0.303030] Performance Events: unsupported p6 CPU model 79 no PMU driver, software events only.\\r\\n[    0.303154] rcu: Hierarchical SRCU implementation.\\r\\n[    0.303232] NMI watchdog: Perf NMI watchdog permanently disabled\\r\\n[    0.304156] smp: Bringing up secondary CPUs ...\\r\\n[    0.304775] smp: Brought up 1 node, 1 CPU\\r\\n[    0.305377] smpboot: Max logical packages: 1\\r\\n[    0.305973] smpboot: Total of 1 processors activated (4400.34 BogoMIPS)\\r\\n[    0.308500] node 0 deferred pages initialised in 4ms\\r\\n[    0.309336] devtmpfs: initialized\\r\\n[    0.309853] x86/mm: Memory block size: 128MB\\r\\n[    0.310586] PM: Registering ACPI NVS region [mem 0x2617f000-0x261fefff] (524288 bytes)\\r\\n[    0.311201] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns\\r\\n[    0.312491] futex hash table entries: 256 (order: 2, 16384 bytes, linear)\\r\\n[    0.313553] NET: Registered protocol family 16\\r\\n[    0.314323] DMA: preallocated 128 KiB GFP_KERNEL pool for atomic allocations\\r\\n[    0.315262] DMA: preallocated 128 KiB GFP_KERNEL|GFP_DMA pool for atomic allocations\\r\\n[    0.316351] DMA: preallocated 128 KiB GFP_KERNEL|GFP_DMA32 pool for atomic allocations\\r\\n[    0.317444] audit: initializing netlink subsys (disabled)\\r\\n[    0.318358] thermal_sys: Registered thermal governor 'fair_share'\\r\\n[    0.318358] thermal_sys: Registered thermal governor 'bang_bang'\\r\\n[    0.319159] thermal_sys: Registered thermal governor 'step_wise'\\r\\n[    0.319988] thermal_sys: Registered thermal governor 'user_space'\\r\\n[    0.320815] thermal_sys: Registered thermal governor 'power_allocator'\\r\\n[    0.321635] cpuidle: using governor ladder\\r\\n[    0.323161] audit: type=2000 audit(1700193824.940:1): state=initialized audit_enabled=0 res=1\\r\\n[    0.324328] cpuidle: using governor menu\\r\\n[    0.324906] ACPI: bus type PCI registered\\r\\n[    0.325460] acpiphp: ACPI Hot Plug PCI Controller Driver version: 0.5\\r\\n[    0.326421] PCI: Using configuration type 1 for base access\\r\\n[    0.327802] Kprobes globally optimized\\r\\n[    0.328452] HugeTLB registered 1.00 GiB page size, pre-allocated 0 pages\\r\\n[    0.329351] HugeTLB registered 2.00 MiB page size, pre-allocated 0 pages\\r\\n[    0.457287] ACPI: Added _OSI(Module Device)\\r\\n[    0.457914] ACPI: Added _OSI(Processor Device)\\r\\n[    0.458520] ACPI: Added _OSI(3.0 _SCP Extensions)\\r\\n[    0.459158] ACPI: Added _OSI(Processor Aggregator Device)\\r\\n[    0.460010] ACPI: Added _OSI(Linux-Dell-Video)\\r\\n[    0.460629] ACPI: Added _OSI(Linux-Lenovo-NV-HDMI-Audio)\\r\\n[    0.461348] ACPI: Added _OSI(Linux-HPI-Hybrid-Graphics)\\r\\n[    0.462989] ACPI: 3 ACPI AML tables successfully acquired and loaded\\r\\n[    0.464105] ACPI: Interpreter enabled\\r\\n[    0.464646] ACPI: (supports S0 S3 S4 S5)\\r\\n[    0.465207] ACPI: Using IOAPIC for interrupt routing\\r\\n[    0.465937] PCI: Using host bridge windows from ACPI; if necessary, use \\\"pci=nocrs\\\" and report a bug\\r\\n[    0.467351] ACPI: Enabled 16 GPEs in block 00 to 0F\\r\\n[    0.469893] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff])\\r\\n[    0.471179] acpi PNP0A03:00: _OSC: OS supports [ASPM ClockPM Segments MSI HPX-Type3]\\r\\n[    0.472279] acpi PNP0A03:00: fail to add MMCONFIG information, can't access extended PCI configuration space under this bridge.\\r\\n[    0.474395] PCI host bridge to bus 0000:00\\r\\n[    0.475161] pci_bus 0000:00: root bus resource [io  0x0000-0x0cf7 window]\\r\\n[    0.476080] pci_bus 0000:00: root bus resource [io  0x0d00-0xffff window]\\r\\n[    0.476988] pci_bus 0000:00: root bus resource [mem 0x000a0000-0x000bffff window]\\r\\n[    0.478071] pci_bus 0000:00: root bus resource [mem 0x80000000-0xfebfefff window]\\r\\n[    0.479156] pci_bus 0000:00: root bus resource [bus 00-ff]\\r\\n[    0.479955] pci 0000:00:00.0: [8086:1237] type 00 class 0x060000\\r\\n[    0.483516] pci 0000:00:01.0: [8086:7110] type 00 class 0x060100\\r\\n[    0.497205] pci 0000:00:01.3: [8086:7113] type 00 class 0x068000\\r\\n[    0.510756] pci 0000:00:01.3: quirk: [io  0xb000-0xb03f] claimed by PIIX4 ACPI\\r\\n[    0.511429] pci 0000:00:03.0: [1af4:1004] type 00 class 0x000000\\r\\n[    0.518345] pci 0000:00:03.0: reg 0x10: [io  0xc040-0xc07f]\\r\\n[    0.523157] pci 0000:00:03.0: reg 0x14: [mem 0x80000000-0x8000007f]\\r\\n[    0.534975] pci 0000:00:04.0: [1af4:1000] type 00 class 0x020000\\r\\n[    0.540789] pci 0000:00:04.0: reg 0x10: [io  0xc000-0xc03f]\\r\\n[    0.544833] pci 0000:00:04.0: reg 0x14: [mem 0x80002000-0x8000203f]\\r\\n[    0.555412] pci 0000:00:05.0: [1af4:1005] type 00 class 0x00ff00\\r\\n[    0.560805] pci 0000:00:05.0: reg 0x10: [io  0xc080-0xc09f]\\r\\n[    0.564625] pci 0000:00:05.0: reg 0x14: [mem 0x80001000-0x8000103f]\\r\\n[    0.575564] ACPI: PCI Interrupt Link [LNKA] (IRQs 5 *10 11)\\r\\n[    0.577286] ACPI: PCI Interrupt Link [LNKB] (IRQs 5 *10 11)\\r\\n[    0.578886] ACPI: PCI Interrupt Link [LNKC] (IRQs 5 10 *11)\\r\\n[    0.579915] ACPI: PCI Interrupt Link [LNKD] (IRQs 5 10 *11)\\r\\n[    0.583168] ACPI: PCI Interrupt Link [LNKS] (IRQs *9)\\r\\n[    0.584105] iommu: Default domain type: Translated \\r\\n[    0.584854] vgaarb: loaded\\r\\n[    0.585334] Registered efivars operations\\r\\n[    0.586084] NetLabel: Initializing\\r\\n[    0.587156] NetLabel:  domain hash size = 128\\r\\n[    0.587827] NetLabel:  protocols = UNLABELED CIPSOv4 CALIPSO\\r\\n[    0.588621] NetLabel:  unlabeled traffic allowed by default\\r\\n[    0.589415] PCI: Using ACPI for IRQ routing\\r\\n[    0.590183] clocksource: Switched to clocksource kvm-clock\\r\\n[    0.599324] VFS: Disk quotas dquot_6.6.0\\r\\n[    0.599916] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)\\r\\n[    0.601024] AppArmor: AppArmor Filesystem Enabled\\r\\n[    0.601786] pnp: PnP ACPI init\\r\\n[    0.602662] pnp: PnP ACPI: found 7 devices\\r\\n[    0.608541] clocksource: acpi_pm: mask: 0xffffff max_cycles: 0xffffff, max_idle_ns: 2085701024 ns\\r\\n[    0.609795] NET: Registered protocol family 2\\r\\n[    0.610436] IP idents hash table entries: 16384 (order: 5, 131072 bytes, linear)\\r\\n[    0.612665] tcp_listen_portaddr_hash hash table entries: 512 (order: 1, 8192 bytes, linear)\\r\\n[    0.613850] TCP established hash table entries: 8192 (order: 4, 65536 bytes, linear)\\r\\n[    0.614940] TCP bind hash table entries: 8192 (order: 5, 131072 bytes, linear)\\r\\n[    0.615983] TCP: Hash tables configured (established 8192 bind 8192)\\r\\n[    0.616945] UDP hash table entries: 512 (order: 2, 16384 bytes, linear)\\r\\n[    0.617844] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes, linear)\\r\\n[    0.618844] NET: Registered protocol family 1\\r\\n[    0.619629] NET: Registered protocol family 44\\r\\n[    0.620246] pci_bus 0000:00: resource 4 [io  0x0000-0x0cf7 window]\\r\\n[    0.621100] pci_bus 0000:00: resource 5 [io  0x0d00-0xffff window]\\r\\n[    0.621946] pci_bus 0000:00: resource 6 [mem 0x000a0000-0x000bffff window]\\r\\n[    0.622980] pci_bus 0000:00: resource 7 [mem 0x80000000-0xfebfefff window]\\r\\n[    0.624039] pci 0000:00:00.0: Limiting direct PCI/PCI transfers\\r\\n[    0.624898] PCI: CLS 0 bytes, default 64\\r\\n[    0.625515] Trying to unpack rootfs image as initramfs...\\r\\n[    0.838263] Freeing initrd memory: 13832K\\r\\n[    0.838913] clocksource: tsc: mask: 0xffffffffffffffff max_cycles: 0x1fb6d394f62, max_idle_ns: 440795316813 ns\\r\\n[    0.840271] clocksource: Switched to clocksource tsc\\r\\n[    0.841223] Initialise system trusted keyrings\\r\\n[    0.841875] Key type blacklist registered\\r\\n[    0.842505] workingset: timestamp_bits=36 max_order=18 bucket_order=0\\r\\n[    0.844293] zbud: loaded\\r\\n[    0.844973] Key type asymmetric registered\\r\\n[    0.845539] Asymmetric key parser 'x509' registered\\r\\n[    0.846222] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 252)\\r\\n[    0.847278] io scheduler mq-deadline registered\\r\\n[    0.848485] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled\\r\\n[    0.849463] 00:03: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A\\r\\n[    0.850740] 00:04: ttyS1 at I/O 0x2f8 (irq = 3, base_baud = 115200) is a 16550A\\r\\n[    0.851965] 00:05: ttyS2 at I/O 0x3e8 (irq = 6, base_baud = 115200) is a 16550A\\r\\n[    0.853164] 00:06: ttyS3 at I/O 0x2e8 (irq = 7, base_baud = 115200) is a 16550A\\r\\n[    0.854467] i8042: PNP: PS/2 Controller [PNP0303:KBD,PNP0f13:MOU] at 0x60,0x64 irq 1,12\\r\\n[    0.855734] i8042: Warning: Keylock active\\r\\n[    0.857698] serio: i8042 KBD port at 0x60,0x64 irq 1\\r\\n[    0.858391] serio: i8042 AUX port at 0x60,0x64 irq 12\\r\\n[    0.859206] rtc_cmos 00:00: RTC can wake from S4\\r\\n[    0.860615] rtc_cmos 00:00: registered as rtc0\\r\\n[    0.861428] rtc_cmos 00:00: setting system clock to 2023-11-17T04:03:45 UTC (1700193825)\\r\\n[    0.862619] rtc_cmos 00:00: alarms up to one day, 114 bytes nvram\\r\\n[    0.863495] intel_pstate: CPU model not supported\\r\\n[    0.864350] NET: Registered protocol family 10\\r\\n[    0.872101] Segment Routing with IPv6\\r\\n[    0.872671] mip6: Mobile IPv6\\r\\n[    0.873091] NET: Registered protocol family 17\\r\\n[    0.873814] IPI shorthand broadcast: enabled\\r\\n[    0.874454] sched_clock: Marking stable (864288966, 8353340)-\\u003e(874836097, -2193791)\\r\\n[    0.875588] registered taskstats version 1\\r\\n[    0.876158] Loading compiled-in X.509 certificates\\r\\n[    0.908877] Loaded X.509 cert 'Debian Secure Boot CA: 6ccece7e4c6c0d1f6149f3dd27dfcc5cbb419ea1'\\r\\n[    0.910478] Loaded X.509 cert 'Debian Secure Boot Signer 2022 - linux: 14011249c2675ea8e5148542202005810584b25f'\\r\\n[    0.911923] Key type .fscrypt registered\\r\\n[    0.912517] Key type fscrypt-provisioning registered\\r\\n[    0.913253] AppArmor: AppArmor sha1 policy hashing enabled\\r\\n[    0.915720] Freeing unused decrypted memory: 2036K\\r\\n[    0.917013] Freeing unused kernel image (initmem) memory: 2468K\\r\\n[    0.924384] Write protecting the kernel read-only data: 22528k\\r\\n[    0.925931] Freeing unused kernel image (text/rodata gap) memory: 2036K\\r\\n[    0.927194] Freeing unused kernel image (rodata/data gap) memory: 1236K\\r\\n[    0.928659] x86/mm: Checked W+X mappings: passed, no W+X pages found.\\r\\n[    0.929536] x86/mm: Checking user space page tables\\r\\n[    0.930357] x86/mm: Checked W+X mappings: passed, no W+X pages found.\\r\\n[    0.931248] Run /init as init process\\r\\nLoading, please wait...\\r\\nStarting version 247.3-7+deb11u4\\r\\n[    0.999458] PCI Interrupt Link [LNKC] enabled at IRQ 11\\r\\n[    1.000238] virtio-pci 0000:00:03.0: virtio_pci: leaving for legacy driver\\r\\n[    1.026601] PCI Interrupt Link [LNKD] enabled at IRQ 10\\r\\n[    1.027444] virtio-pci 0000:00:04.0: virtio_pci: leaving for legacy driver\\r\\n[    1.031920] PCI Interrupt Link [LNKA] enabled at IRQ 10\\r\\n[    1.032814] virtio-pci 0000:00:05.0: virtio_pci: leaving for legacy driver\\r\\n[    1.054934] SCSI subsystem initialized\\r\\n[    1.061158] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input0\\r\\n[    1.075892] virtio_net virtio1 ens4: renamed from eth0\\r\\n[    1.085896] scsi host0: Virtio SCSI HBA\\r\\n[    1.091740] scsi 0:0:1:0: Direct-Access     Google   PersistentDisk   1    PQ: 0 ANSI: 6\\r\\n[    1.111855] sd 0:0:1:0: [sda] 20971520 512-byte logical blocks: (10.7 GB/10.0 GiB)\\r\\n[    1.112925] sd 0:0:1:0: [sda] 4096-byte physical blocks\\r\\n[    1.113940] sd 0:0:1:0: [sda] Write Protect is off\\r\\n[    1.114657] sd 0:0:1:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA\\r\\n[    1.118523]  sda: sda1 sda14 sda15\\r\\n[    1.126791] sd 0:0:1:0: [sda] Attached SCSI disk\\r\\nBegin: Loading essential drivers ... done.\\r\\nBegin: Running /scripts/init-premount ... done.\\r\\nBegin: Mounting root file system ... Begin: Running /scripts/local-top ... done.\\r\\nBegin: Running /scripts/local[    1.152781] gce-disk-expand: Resizing partition on \\r\\n-premount ... [    1.176849]  sda: sda1 sda14 sda15\\r\\n[    1.188392] gce-disk-expand: Disk /dev/sda1 doesn't need resizing.\\r\\ndone.\\r\\nBegin: Will now check root file system ... fsck from util-linux 2.36.1\\r\\n[/sbin/fsck.ext4 (1) -- /dev/sda1] fsck.ext4 -a -C0 /dev/sda1 \\r\\n/dev/sda1: clean, 82191/647168 files, 583028/2588667 blocks\\r\\ndone.\\r\\n[    1.254250] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null)\\r\\ndone.\\r\\nBegin: Running /scripts/local-bottom ... done.\\r\\nBegin: Running /scripts/init-bottom ... done.\\r\\n[    1.277595] Not activating Mandatory Access Control as /sbin/tomoyo-init does not exist.\\r\\n[    1.387488] systemd[1]: Inserted module 'autofs4'\\r\\n[    1.442681] systemd[1]: systemd 247.3-7+deb11u4 running in system mode. (+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +ZSTD +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=unified)\\r\\n[    1.445902] systemd[1]: Detected virtualization kvm.\\r\\n[    1.446600] systemd[1]: Detected architecture x86-64.\\r\\n\\r\\nWelcome to \\u001b[1mDebian GNU/Linux 11 (bullseye)\\u001b[0m!\\r\\n\\r\\n[    1.460843] systemd[1]: Set hostname to \\u003cdebian\\u003e.\\r\\n[    1.462651] systemd[1]: Initializing machine ID from KVM UUID.\\r\\n[    1.463576] systemd[1]: Installed transient /etc/machine-id file.\\r\\n[    1.919472] systemd[1]: Condition check resulted in Root Slice being skipped.\\r\\n[    1.920524] systemd[1]: Condition check resulted in System Slice being skipped.\\r\\n[    1.922280] systemd[1]: Queued start job for default target Graphical Interface.\\r\\n[    1.924563] systemd[1]: Created slice system-getty.slice.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Created slice \\u001b[0;1;39msystem-getty.slice\\u001b[0m.\\r\\n[    1.936671] systemd[1]: Created slice system-modprobe.slice.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Created slice \\u001b[0;1;39msystem-modprobe.slice\\u001b[0m.\\r\\n[    1.948711] systemd[1]: Created slice system-serial\\\\x2dgetty.slice.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Created slice \\u001b[0;1;39msystem-serial\\\\x2dgetty.slice\\u001b[0m.\\r\\n[    1.960656] systemd[1]: Created slice system-systemd\\\\x2dgrowfs.slice.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Created slice \\u001b[0;1;39msystem-systemd\\\\x2dgrowfs.slice\\u001b[0m.\\r\\n[    1.972612] systemd[1]: Created slice User and Session Slice.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Created slice \\u001b[0;1;39mUser and Session Slice\\u001b[0m.\\r\\n[    1.984482] systemd[1]: Started Dispatch Password Requests to Console Directory Watch.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mDispatch Password …ts to Console Directory Watch\\u001b[0m.\\r\\n[    1.996479] systemd[1]: Started Forward Password Requests to Wall Directory Watch.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mForward Password R…uests to Wall Directory Watch\\u001b[0m.\\r\\n[    2.008603] systemd[1]: Set up automount Arbitrary Executable File Formats File System Automount Point.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Set up automount \\u001b[0;1;39mArbitrary…s File System Automount Point\\u001b[0m.\\r\\n[    2.020467] systemd[1]: Reached target Local Encrypted Volumes.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mLocal Encrypted Volumes\\u001b[0m.\\r\\n[    2.032463] systemd[1]: Reached target Paths.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mPaths\\u001b[0m.\\r\\n[    2.044419] systemd[1]: Reached target Remote File Systems.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mRemote File Systems\\u001b[0m.\\r\\n[    2.056430] systemd[1]: Reached target Slices.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mSlices\\u001b[0m.\\r\\n[    2.068460] systemd[1]: Reached target Swap.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mSwap\\u001b[0m.\\r\\n[    2.080452] systemd[1]: Reached target System Time Set.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mSystem Time Set\\u001b[0m.\\r\\n[    2.092590] systemd[1]: Listening on Syslog Socket.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Listening on \\u001b[0;1;39mSyslog Socket\\u001b[0m.\\r\\n[    2.104541] systemd[1]: Listening on fsck to fsckd communication Socket.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Listening on \\u001b[0;1;39mfsck to fsckd communication Socket\\u001b[0m.\\r\\n[    2.116525] systemd[1]: Listening on initctl Compatibility Named Pipe.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Listening on \\u001b[0;1;39minitctl Compatibility Named Pipe\\u001b[0m.\\r\\n[    2.128652] systemd[1]: Listening on Journal Audit Socket.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Listening on \\u001b[0;1;39mJournal Audit Socket\\u001b[0m.\\r\\n[    2.140586] systemd[1]: Listening on Journal Socket (/dev/log).\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Listening on \\u001b[0;1;39mJournal Socket (/dev/log)\\u001b[0m.\\r\\n[    2.152608] systemd[1]: Listening on Journal Socket.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Listening on \\u001b[0;1;39mJournal Socket\\u001b[0m.\\r\\n[    2.164999] systemd[1]: Listening on udev Control Socket.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Listening on \\u001b[0;1;39mudev Control Socket\\u001b[0m.\\r\\n[    2.176533] systemd[1]: Listening on udev Kernel Socket.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Listening on \\u001b[0;1;39mudev Kernel Socket\\u001b[0m.\\r\\n[    2.189244] systemd[1]: Mounting Huge Pages File System...\\r\\n         Mounting \\u001b[0;1;39mHuge Pages File System\\u001b[0m...\\r\\n[    2.201151] systemd[1]: Mounting POSIX Message Queue File System...\\r\\n         Mounting \\u001b[0;1;39mPOSIX Message Queue File System\\u001b[0m...\\r\\n[    2.213139] systemd[1]: Mounting Kernel Debug File System...\\r\\n         Mounting \\u001b[0;1;39mKernel Debug File System\\u001b[0m...\\r\\n[    2.225136] systemd[1]: Mounting Kernel Trace File System...\\r\\n         Mounting \\u001b[0;1;39mKernel Trace File System\\u001b[0m...\\r\\n[    2.237190] systemd[1]: Starting Create list of static device nodes for the current kernel...\\r\\n         Starting \\u001b[0;1;39mCreate list of st…odes for the current kernel\\u001b[0m...\\r\\n[    2.249105] systemd[1]: Starting Load Kernel Module configfs...\\r\\n         Starting \\u001b[0;1;39mLoad Kernel Module configfs\\u001b[0m...\\r\\n[    2.261132] systemd[1]: Starting Load Kernel Module drm...\\r\\n         Starting \\u001b[0;1;39mLoad Kernel Module drm\\u001b[0m...\\r\\n[    2.273083] systemd[1]: Starting Load Kernel Module fuse...\\r\\n         Starting \\u001b[0;1;39mLoad Kernel Module fuse\\u001b[0m...\\r\\n[    2.283707] fuse: init (API version 7.32)\\r\\n[    2.284971] systemd[1]: Condition check resulted in Set Up Additional Binary Formats being skipped.\\r\\n[    2.286266] systemd[1]: Condition check resulted in File System Check on Root Device being skipped.\\r\\n[    2.288806] systemd[1]: Starting Journal Service...\\r\\n         Starting \\u001b[0;1;39mJournal Service\\u001b[0m...\\r\\n[    2.301746] systemd[1]: Starting Load Kernel Modules...\\r\\n         Starting \\u001b[0;1;39mLoad Kernel Modules\\u001b[0m...\\r\\n[    2.313052] systemd[1]: Starting Remount Root and Kernel File Systems...\\r\\n         Starting \\u001b[0;1;39mRemount Root and Kernel File Systems\\u001b[0m...\\r\\n[    2.317162] systemd[1]: Starting Coldplug All udev Devices...\\r\\n         Starting \\u001b[0;1;39mColdplug All udev Devices\\u001b[0m...\\r\\n[    2.322305] systemd[1]: Mounted Huge Pages File System.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Mounted \\u001b[0;1;39mHuge Pages File System\\u001b[0m.\\r\\n[    2.335757] systemd[1]: Mounted POSIX Message Queue File System.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Mounted \\u001b[0;1;39mPOSIX Message Queue File System\\u001b[0m.\\r\\n[    2.338494] systemd[1]: Mounted Kernel Debug File System.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Mounted \\u001b[0;1;39mKernel Debug File System\\u001b[0m.\\r\\n[    2.348486] EXT4-fs (sda1): re-mounted. Opts: discard,errors=remount-ro\\r\\n[    2.353065] systemd[1]: Mounted Kernel Trace File System.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Mounted \\u001b[0;1;39mKernel Trace File System\\u001b[0m.\\r\\n[    2.364540] systemd[1]: Started Journal Service.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mJournal Service\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mCreate list of st… nodes for the current kernel\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mLoad Kernel Module configfs\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mLoad Kernel Module drm\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mLoad Kernel Module fuse\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mLoad Kernel Modules\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mRemount Root and Kernel File Systems\\u001b[0m.\\r\\n         Mounting \\u001b[0;1;39mFUSE Control File System\\u001b[0m...\\r\\n         Mounting \\u001b[0;1;39mKernel Configuration File System\\u001b[0m...\\r\\n         Starting \\u001b[0;1;39mGrow File System on /\\u001b[0m...\\r\\n         Starting \\u001b[0;1;39mFlush Journal to Persistent Storage\\u001b[0m...\\r\\n[    2.488722] EXT4-fs (sda1): resizing filesystem from 2588667 to 2588667 blocks\\r\\n         Starting \\u001b[0;1;39mLoad/Save Random Seed\\u001b[0m...\\r\\n         Starting \\u001b[0;1;39mApply Kernel Variables\\u001b[0m...\\r\\n[    2.510094] systemd-journald[181]: Received client request to flush runtime journal.\\r\\n         Starting \\u001b[0;1;39mCreate System Users\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mColdplug All udev Devices\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Mounted \\u001b[0;1;39mFUSE Control File System\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Mounted \\u001b[0;1;39mKernel Configuration File System\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mGrow File System on /\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mFlush Journal to Persistent Storage\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mLoad/Save Random Seed\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mApply Kernel Variables\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mCreate System Users\\u001b[0m.\\r\\n         Starting \\u001b[0;1;39mHelper to synchronize boot up for ifupdown\\u001b[0m...\\r\\n         Starting \\u001b[0;1;39mCreate Static Device Nodes in /dev\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mHelper to synchronize boot up for ifupdown\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mCreate Static Device Nodes in /dev\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mLocal File Systems (Pre)\\u001b[0m.\\r\\n         Starting \\u001b[0;1;39mRule-based Manage…for Device Events and Files\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mRule-based Manager for Device Events and Files\\u001b[0m.\\r\\n[    2.759844] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input2\\r\\n[    2.784424] ACPI: Power Button [PWRF]\\r\\n[    2.785020] input: Sleep Button as /devices/LNXSYSTM:00/LNXSLPBN:00/input/input3\\r\\n[    2.786165] ACPI: Sleep Button [SLPF]\\r\\n[    2.797491] tpm_tis MSFT0101:00: 2.0 TPM (device-id 0x9009, rev-id 0)\\r\\n[    2.818744] sd 0:0:1:0: Attached scsi generic sg0 type 0\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Found device \\u001b[0;1;39m/dev/ttyS0\\u001b[0m.\\r\\n[    2.829489] pstore: Using crash dump compression: deflate\\r\\n[    2.830270] pstore: Registered efi as persistent store backend\\r\\n[    2.878870] RAPL PMU: API unit is 2^-32 Joules, 0 fixed counters, 10737418240 ms ovfl timer\\r\\n[    2.916156] cryptd: max_cpu_qlen set to 1000\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Found device \\u001b[0;1;39mPersistentDisk 15\\u001b[0m.\\r\\n[    2.945181] AVX2 version of gcm_enc/dec engaged.\\r\\n[    2.945881] AES CTR mode by8 optimization enabled\\r\\n         Mounting \\u001b[0;1;39m/boot/efi\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Mounted \\u001b[0;1;39m/boot/efi\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mLocal File Systems\\u001b[0m.\\r\\n         Starting \\u001b[0;1;39mLoad AppArmor profiles\\u001b[0m...\\r\\n         Starting \\u001b[0;1;39mCommit a transient machine-id on disk\\u001b[0m...\\r\\n         Starting \\u001b[0;1;39mCreate Volatile Files and Directories\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Found device \\u001b[0;1;39mVirtio network device\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mCreate Volatile Files and Directories\\u001b[0m.\\r\\n         Starting \\u001b[0;1;39mUpdate UTMP about System Boot/Shutdown\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mUpdate UTMP about System Boot/Shutdown\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mCommit a transient machine-id on disk\\u001b[0m.\\r\\n[    3.379173] audit: type=1400 audit(1700193828.011:2): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"nvidia_modprobe\\\" pid=292 comm=\\\"apparmor_parser\\\"\\r\\n[    3.382434] audit: type=1400 audit(1700193828.015:3): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"nvidia_modprobe//kmod\\\" pid=292 comm=\\\"apparmor_parser\\\"\\r\\n[    3.465172] audit: type=1400 audit(1700193828.099:4): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"/usr/sbin/chronyd\\\" pid=293 comm=\\\"apparmor_parser\\\"\\r\\n[    3.506572] audit: type=1400 audit(1700193828.139:5): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"lsb_release\\\" pid=294 comm=\\\"apparmor_parser\\\"\\r\\n[    3.625363] audit: type=1400 audit(1700193828.259:6): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"tcpdump\\\" pid=295 comm=\\\"apparmor_parser\\\"\\r\\n[    3.655070] audit: type=1400 audit(1700193828.287:7): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"/usr/sbin/haveged\\\" pid=296 comm=\\\"apparmor_parser\\\"\\r\\n[    3.720200] audit: type=1400 audit(1700193828.351:8): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"/usr/bin/man\\\" pid=297 comm=\\\"apparmor_parser\\\"\\r\\n[    3.723210] audit: type=1400 audit(1700193828.359:9): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"man_filter\\\" pid=297 comm=\\\"apparmor_parser\\\"\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mLoad AppArmor profiles\\u001b[0m[    3.728049] audit: type=1400 audit(1700193828.359:10): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"man_groff\\\" pid=297 comm=\\\"apparmor_parser\\\"\\r\\n.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mEntropy Daemon based on the HAVEGE algorithm\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mSystem Initialization\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mGCE Workload Certificate refresh timer\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mNSS cache refresh timer\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mDaily Cleanup of Temporary Directories\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Listening on \\u001b[0;1;39mD-Bus System Message Bus Socket\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Listening on \\u001b[0;1;39mUUID daemon activation socket\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mSockets\\u001b[0m.\\r\\n         Starting \\u001b[0;1;39mResize root filesystem if needed\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mifup for ens4\\u001b[0m.\\r\\n         Starting \\u001b[0;1;39mRaise network interfaces\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mResize root filesystem if needed\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mBasic System\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mRegular background program processing daemon\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mD-Bus System Message Bus\\u001b[0m.\\r\\n         Starting \\u001b[0;1;39mRemove Stale Onli…t4 Metadata Check Snapshots\\u001b[0m...\\r\\n         Starting \\u001b[0;1;39mSystem Logging Service\\u001b[0m...\\r\\n         Starting \\u001b[0;1;39mUser Login Management\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mSystem Logging Service\\u001b[0m.\\r\\nNov 17 04:03:48 debian kernel: [    0.000000] Linux version 5.10.0-26-cloud-amd64 (debian-kernel@lists.debian.org) (gcc-10 (Debian 10.2.1-6) 10.2.1 20210110, GNU ld (GNU Binutils for Debian) 2.35.2) #1 SMP Debian 5.10.197-1 (2023-09-29)\\r\\nNov 17 04:03:48 debian kernel: [    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-5.10.0-26-cloud-amd64 root=UUID=e6fe3fcb-2478-4e7e-8072-4ced46dceac5 ro console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0 intel_iommu=off\\r\\nNov 17 04:03:48 debian kernel: [    0.000000] BIOS-provided physical RAM map:\\r\\nNov 17 04:03:48 debian kernel: [    0.000000] BIOS-e820: [mem 0x0000000000000000-0x0000000000000fff] reserved\\r\\nNov 17 04:03:48 debian kernel: [    0.000000] BIOS-e820: [mem 0x0000000000001000-0x0000000000054fff] usable\\r\\nNov 17 04:03:48 debian kernel: [    0.000000] BIOS-e820: [mem 0x0000000000055000-0x000000000005ffff] reserved\\r\\nNov 17 04:03:48 debian kernel: [    0.000000] BIOS-e820: [mem 0x0000000000060000-0x0000000000097fff] usable\\r\\nNov 17 04:03:48 debian kernel: [    0.000000] BIOS-e820: [mem 0x0000000000098000-0x000000000009ffff] reserved\\r\\nNov 17 04:03:48 debian kernel: [    0.000000] BIOS-e820: [mem 0x0000000000100000-0x0000000025eecfff] usable\\r\\nNov 17 04:03:48 debian kernel: [    0.000000] BIOS-e820: [mem 0x0000000025eed000-0x0000000025fecfff] reserved\\r\\nNov 17 04:03:48 debian kernel: [    0.000000] BIOS-e820: [mem 0x0000000025fed000-0x00000000260ecfff] type 20\\r\\nNov 17 04:03:48 debian kernel: [    0.000000] BIOS-e820: [mem 0x00000000260ed000-0x000000002616cfff] reserved\\r\\nNov 17 04:03:48 debian kernel: [    0.000000] BIOS-e820: [mem 0x000000002616d000-0x000000002617efff] ACPI data\\r\\nNov 17 04:03:48 debian kernel: [    0.000000] BIOS-e820: [mem 0x000000002617f000-0x00000000261fefff] ACPI NVS\\r\\nNov 17 04:03:48 debian kernel: [    0.000000] BIOS-e820: [mem 0x00000000261ff000-0x00000000265dffff] usable\\r\\nNov 17 04:03:48 debian kernel: [    0.000000] BIOS-e820: [mem 0x00000000265e0000-0x00000000265fffff] reserved\\r\\nNov 17 04:03:48 debian kernel: [    0.000000] printk: bootconsole [earlyser0] enabled\\r\\nNov 17 04:03:48 debian kernel: [    0.000000] NX (Execute Disable) protection: active\\r\\nNov 17 04:03:48 debian kernel: [    0.000000] efi: EFI v2.70 by EDK II\\r\\nNov 17 04:03:48 debian kernel: [    0.000000] efi: TPMFinalLog=0x261f7000 ACPI=0x2617e000 ACPI 2.0=0x2617e014 SMBIOS=0x25fca000 MEMATTR=0x249a0018 \\r\\nNov 17 04:03:48 debian kernel: [    0.000000] secureboot: Secure boot disabled\\r\\nNov 17 04:03:48 debian kernel: [    0.000000] SMBIOS 2.4 present.\\r\\nNov 17 04:03:48 debian kernel: [    0.000000] DMI: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/09/2023\\r\\nNov 17 04:03:48 debian kernel: [    0.000000] Hypervisor detected: KVM\\r\\nNov 17 04:03:48 debian kernel: [    0.000000] kvm-clock: Using msrs 4b564d01 and 4b564d00\\r\\nNov 17 04:03:48 debian kernel: [    0.000000] kvm-clock: cpu 0, msr 11601001, primary cpu clock\\r\\nNov 17 04:03:48 debian kernel: [    0.000000] kvm-clock: using sched offset of 6574541159 cycles\\r\\nNov 17 04:03:48 debian kernel: [    0.000750] clocksource: kvm-clock: mask: 0xffffffffffffffff max_cycles: 0x1cd42e4dffb, max_idle_ns: 881590591483 ns\\r\\nNov 17 04:03:48 debian kernel: [    0.003137] tsc: Detected 2200.170 MHz processor\\r\\nNov 17 04:03:48 debian kernel: [    0.003934] e820: update [mem 0x00000000-0x00000fff] usable ==\\u003e reserved\\r\\nNov 17 04:03:48 debian kernel: [    0.003937] e820: remove [mem 0x000a0000-0x000fffff] usable\\r\\nNov 17 04:03:48 debian kernel: [    0.003944] last_pfn = 0x265e0 max_arch_pfn = 0x400000000\\r\\nNov 17 04:03:48 debian kernel: [    0.004733] MTRR default type: write-back\\r\\nNov 17 04:03:48 debian kernel: [    0.004734] MTRR fixed ranges enabled:\\r\\nNov 17 04:03:48 debian kernel: [    0.004736]   00000-9FFFF write-back\\r\\nNov 17 04:03:48 debian kernel: [    0.004737]   A0000-FFFFF uncachable\\r\\nNov 17 04:03:48 debian kernel: [    0.004738] MTRR variable ranges enabled:\\r\\nNov 17 04:03:48 debian kernel: [    0.004740]   0 base 000080000000 mask 3FFF80000000 uncachable\\r\\nNov 17 04:03:48 debian kernel: [    0.004741]   1 disabled\\r\\nNov 17 04:03:48 debian kernel: [    0.004741]   2 disabled\\r\\nNov 17 04:03:48 debian kernel: [    0.004742]   3 disabled\\r\\nNov 17 04:03:48 debian kernel: [    0.004743]   4 disabled\\r\\nNov 17 04:03:48 debian kernel: [    0.004743]   5 disabled\\r\\nNov 17 04:03:48 debian kernel: [    0.004744]   6 disabled\\r\\nNov 17 04:03:48 debian kernel: [    0.004744]   7 disabled\\r\\nNov 17 04:03:48 debian kernel: [    0.004756] x86/PAT: Configuration [0-7]: WB  WC  UC- UC  WB  WP  UC- WT  \\r\\nNov 17 04:03:48 debian kernel: [    0.006413] Using GB pages for direct mapping\\r\\nNov 17 04:03:48 debian kernel: [    0.007451] RAMDISK: [mem 0x2327f000-0x24000fff]\\r\\nNov 17 04:03:48 debian kernel: [    0.008104] ACPI: Early table checksum verification disabled\\r\\nNov 17 04:03:48 debian kernel: [    0.008840] ACPI: RSDP 0x000000002617E014 000024 (v02 Google)\\r\\nNov 17 04:03:48 debian kernel: [    0.009613] ACPI: XSDT 0x000000002617D0E8 00005C (v01 Google GOOGFACP 00000001      01000013)\\r\\nNov 17 04:03:48 debian kernel: [    0.010705] ACPI: FACP 0x0000000026178000 0000F4 (v02 Google GOOGFACP 00000001 GOOG 00000001)\\r\\nNov 17 04:03:48 debian kernel: [    0.011795] ACPI: DSDT 0x0000000026179000 001A64 (v01 Google GOOGDSDT 00000001 GOOG 00000001)\\r\\nNov 17 04:03:48 debian kernel: [    0.013148] ACPI: FACS 0x00000000261F2000 000040\\r\\nNov 17 04:03:48 debian kernel: [    0.013789] ACPI: SSDT 0x000000002617C000 000316 (v02 GOOGLE Tpm2Tabl 00001000 INTL 20211217)\\r\\nNov 17 04:03:48 debian kernel: [    0.015074] ACPI: TPM2 0x000000002617B000 000034 (v04 GOOGLE          00000001 GOOG 00000001)\\r\\nNov 17 04:03:48 debian kernel: [    0.016308] ACPI: SRAT 0x0000000026177000 0000B8 (v03 Google GOOGSRAT 00000001 GOOG 00000001)\\r\\nNov 17 04:03:48 debian kernel: [    0.017416] ACPI: APIC 0x0000000026176000 00006E (v05 Google GOOGAPIC 00000001 GOOG 00000001)\\r\\nNov 17 04:03:48 debian kernel: [    0.018848] ACPI: SSDT 0x0000000026175000 00091F (v01 Google GOOGSSDT 00000001 GOOG 00000001)\\r\\nNov 17 04:03:48 debian kernel: [    0.019981] ACPI: WAET 0x0000000026174000 000028 (v01 Google GOOGWAET 00000001 GOOG 00000001)\\r\\nNov 17 04:03:48 debian kernel: [    0.021071] ACPI: Reserving FACP table memory at [mem 0x26178000-0x261780f3]\\r\\nNov 17 04:03:48 debian kernel: [    0.021968] ACPI: Reserving DSDT table memory at [mem 0x26179000-0x2617aa63]\\r\\nNov 17 04:03:48 debian kernel: [    0.022868] ACPI: Reserving FACS table memory at [mem 0x261f2000-0x261f203f]\\r\\nNov 17 04:03:48 debian kernel: [    0.024195] ACPI: Reserving SSDT table memory at [mem 0x2617c000-0x2617c315]\\r\\nNov 17 04:03:48 debian kernel: [    0.025096] ACPI: Reserving TPM2 table memory at [mem 0x2617b000-0x2617b033]\\r\\nNov 17 04:03:48 debian kernel: [    0.026077] ACPI: Reserving SRAT table memory at [mem 0x26177000-0x261770b7]\\r\\nNov 17 04:03:48 debian kernel: [    0.026976] ACPI: Reserving APIC table memory at [mem 0x26176000-0x2617606d]\\r\\nNov 17 04:03:48 debian kernel: [    0.028016] ACPI: Reserving SSDT table memory at [mem 0x26175000-0x2617591e]\\r\\nNov 17 04:03:48 debian kernel: [    0.028910] ACPI: Reserving WAET table memory at [mem 0x26174000-0x26174027]\\r\\nNov 17 04:03:48 debian kernel: [    0.029888] ACPI: Local APIC address 0xfee00000\\r\\nNov 17 04:03:48 debian kernel: [    0.029920] SRAT: PXM 0 -\\u003e APIC 0x00 -\\u003e Node 0\\r\\nNov 17 04:03:48 debian kernel: [    0.030516] ACPI: SRAT: Node 0 PXM 0 [mem 0x00000000-0x0009ffff]\\r\\nNov 17 04:03:48 debian kernel: [    0.031283] ACPI: SRAT: Node 0 PXM 0 [mem 0x00100000-0x265fffff]\\r\\nNov 17 04:03:48 debian kernel: [    0.032201] NUMA: Node 0 [mem 0x00000000-0x0009ffff] + [mem 0x00100000-0x265dffff] -\\u003e [mem 0x00000000-0x265dffff]\\r\\nNov 17 04:03:48 debian kernel: [    0.034082] NODE_DATA(0) allocated [mem 0x26498000-0x264c1fff]\\r\\nNov 17 04:03:48 debian kernel: [    0.035210] Zone ranges:\\r\\nNov 17 04:03:48 debian kernel: [    0.035556]   DMA      [mem 0x0000000000001000-0x0000000000ffffff]\\r\\nNov 17 04:03:48 debian kernel: [    0.036346]   DMA32    [mem 0x0000000001000000-0x00000000265dffff]\\r\\nNov 17 04:03:48 debian kernel: [    0.037132]   Normal   empty\\r\\nNov 17 04:03:48 debian kernel: [    0.037500]   Device   empty\\r\\nNov 17 04:03:48 debian kernel: [    0.037865] Movable zone start for each node\\r\\nNov 17 04:03:48 debian kernel: [    0.038411] Early memory node ranges\\r\\nNov 17 04:03:48 debian kernel: [    0.038866]   node   0: [mem 0x0000000000001000-0x0000000000054fff]\\r\\nNov 17 04:03:48 debian kernel: [    0.039666]   node   0: [mem 0x0000000000060000-0x0000000000097fff]\\r\\nNov 17 04:03:48 debian kernel: [    0.040501]   node   0: [mem 0x0000000000100000-0x0000000025eecfff]\\r\\nNov 17 04:03:48 debian kernel: [    0.041319]   node   0: [mem 0x00000000261ff000-0x00000000265dffff]\\r\\nNov 17 04:03:48 debian kernel: [    0.042118] Initmem setup node 0 [mem 0x0000000000001000-0x00000000265dffff]\\r\\nNov 17 04:03:48 debian kernel: [    0.043037] On node 0 totalpages: 156250\\r\\nNov 17 04:03:48 debian kernel: [    0.043038]   DMA zone: 64 pages used for memmap\\r\\nNov 17 04:03:48 debian kernel: [    0.043039]   DMA zone: 3121 pages reserved\\r\\nNov 17 04:03:48 debian kernel: [    0.043040]   DMA zone: 3980 pages, LIFO batch:0\\r\\nNov 17 04:03:48 debian kernel: [    0.043042]   DMA32 zone: 2392 pages used for memmap\\r\\nNov 17 04:03:48 debian kernel: [    0.043042]   DMA32 zone: 152270 pages, LIFO batch:31\\r\\nNov 17 04:03:48 debian kernel: [    0.043516] On node 0, zone DMA: 1 pages in unavailable ranges\\r\\nNov 17 04:03:48 debian kernel: [    0.043518] On node 0, zone DMA: 11 pages in unavailable ranges\\r\\nNov 17 04:03:48 debian kernel: [    0.044348] On node 0, zone DMA: 104 pages in unavailable ranges\\r\\nNov 17 04:03:48 debian kernel: [    0.046817] On node 0, zone DMA32: 786 pages in unavailable ranges\\r\\nNov 17 04:03:48 debian kernel: [    0.047679] On node 0, zone DMA32: 6688 pages in unavailable ranges\\r\\nNov 17 04:03:48 debian kernel: [    0.048980] ACPI: PM-Timer IO Port: 0xb008\\r\\nNov 17 04:03:48 debian kernel: [    0.050430] ACPI: Local APIC address 0xfee00000\\r\\nNov 17 04:03:48 debian kernel: [    0.050442] ACPI: LAPIC_NMI (acpi_id[0xff] dfl dfl lint[0x1])\\r\\nNov 17 04:03:48 debian kernel: [    0.051354] IOAPIC[0]: apic_id 0, version 17, address 0xfec00000, GSI 0-23\\r\\nNov 17 04:03:48 debian kernel: [    0.052270] ACPI: INT_SRC_OVR (bus 0 bus_irq 5 global_irq 5 high level)\\r\\nNov 17 04:03:48 debian kernel: [    0.053112] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)\\r\\nNov 17 04:03:48 debian kernel: [    0.054025] ACPI: INT_SRC_OVR (bus 0 bus_irq 10 global_irq 10 high level)\\r\\nNov 17 04:03:48 debian kernel: [    0.054888] ACPI: INT_SRC_OVR (bus 0 bus_irq 11 global_irq 11 high level)\\r\\nNov 17 04:03:48 debian kernel: [    0.055759] ACPI: IRQ5 used by override.\\r\\nNov 17 04:03:48 debian kernel: [    0.055760] ACPI: IRQ9 used by override.\\r\\nNov 17 04:03:48 debian kernel: [    0.055761] ACPI: IRQ10 used by override.\\r\\nNov 17 04:03:48 debian kernel: [    0.055762] ACPI: IRQ11 used by override.\\r\\nNov 17 04:03:48 debian kernel: [    0.055764] Using ACPI (MADT) for SMP configuration information\\r\\nNov 17 04:03:48 debian kernel: [    0.056581] smpboot: Allowing 1 CPUs, 0 hotplug CPUs\\r\\nNov 17 04:03:48 debian kernel: [    0.057278] PM: hibernation: Registered nosave memory: [mem 0x00000000-0x00000fff]\\r\\nNov 17 04:03:48 debian kernel: [    0.058289] PM: hibernation: Registered nosave memory: [mem 0x00055000-0x0005ffff]\\r\\nNov 17 04:03:48 debian kernel: [    0.059254] PM: hibernation: Registered nosave memory: [mem 0x00098000-0x0009ffff]\\r\\nNov 17 04:03:48 debian kernel: [    0.060218] PM: hibernation: Registered nosave memory: [mem 0x000a0000-0x000fffff]\\r\\nNov 17 04:03:48 debian kernel: [    0.061186] PM: hibernation: Registered nosave memory: [mem 0x25eed000-0x25fecfff]\\r\\nNov 17 04:03:48 debian kernel: [    0.062153] PM: hibernation: Registered nosave memory: [mem 0x25fed000-0x260ecfff]\\r\\nNov 17 04:03:48 debian kernel: [    0.063119] PM: hibernation: Registered nosave memory: [mem 0x260ed000-0x2616cfff]\\r\\nNov 17 04:03:48 debian kernel: [    0.064086] PM: hibernation: Registered nosave memory: [mem 0x2616d000-0x2617efff]\\r\\nNov 17 04:03:48 debian kernel: [    0.065051] PM: hibernation: Registered nosave memory: [mem 0x2617f000-0x261fefff]\\r\\nNov 17 04:03:48 debian kernel: [    0.066343] [mem 0x26600000-0xffffffff] available for PCI devices\\r\\nNov 17 04:03:48 debian kernel: [    0.067140] Booting paravirtualized kernel on KVM\\r\\nNov 17 04:03:48 debian kernel: [    0.067740] clocksource: refined-jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645519600211568 ns\\r\\nNov 17 04:03:48 debian kernel: [    0.073455] setup_percpu: NR_CPUS:8192 nr_cpumask_bits:1 nr_cpu_ids:1 nr_node_ids:1\\r\\nNov 17 04:03:48 debian kernel: [    0.075118] percpu: Embedded 63 pages/cpu s221184 r8192 d28672 u2097152\\r\\nNov 17 04:03:48 debian kernel: [    0.076040] pcpu-alloc: s221184 r8192 d28672 u2097152 alloc=1*2097152\\r\\nNov 17 04:03:48 debian kernel: [    0.076042] pcpu-alloc: [0] 0 \\r\\nNov 17 04:03:48 debian kernel: [    0.076074] kvm-guest: PV spinlocks disabled, single CPU\\r\\nNov 17 04:03:48 debian kernel: [    0.076805] Built 1 zonelists, mobility grouping on.  Total pages: 150673\\r\\nNov 17 04:03:48 debian kernel: [    0.077803] Policy zone: DMA32\\r\\nNov 17 04:03:48 debian kernel: [    0.078192] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-5.10.0-26-cloud-amd64 root=UUID=e6fe3fcb-2478-4e7e-8072-4ced46dceac5 ro console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0 intel_iommu=off\\r\\nNov 17 04:03:48 debian kernel: [    0.080817] DMAR: IOMMU disabled\\r\\nNov 17 04:03:48 debian kernel: [    0.081474] Dentry cache hash table entries: 131072 (order: 8, 1048576 bytes, linear)\\r\\nNov 17 04:03:48 debian kernel: [    0.082690] Inode-cache hash table entries: 65536 (order: 7, 524288 bytes, linear)\\r\\nNov 17 04:03:48 debian kernel: [    0.083743] mem auto-init: stack:off, heap alloc:on, heap free:off\\r\\nNov 17 04:03:48 debian kernel: [    0.087100] Memory: 233576K/625000K available (12296K kernel code, 2552K rwdata, 6956K rodata, 2468K init, 3724K bss, 103652K reserved, 0K cma-reserved)\\r\\nNov 17 04:03:48 debian kernel: [    0.089122] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1\\r\\nNov 17 04:03:48 debian kernel: [    0.090012] Kernel/User page tables isolation: enabled\\r\\nNov 17 04:03:48 debian kernel: [    0.091151] ftrace: allocating 33918 entries in 133 pages\\r\\nNov 17 04:03:48 debian kernel: [    0.111503] ftrace: allocated 133 pages with 3 groups\\r\\nNov 17 04:03:48 debian kernel: [    0.112765] rcu: Hierarchical RCU implementation.\\r\\nNov 17 04:03:48 debian kernel: [    0.113378] rcu: \\tRCU restricting CPUs from NR_CPUS=8192 to nr_cpu_ids=1.\\r\\nNov 17 04:03:48 debian kernel: [    0.114278] \\tRude variant of Tasks RCU enabled.\\r\\nNov 17 04:03:48 debian kernel: [    0.114855] \\tTracing variant of Tasks RCU enabled.\\r\\nNov 17 04:03:48 debian kernel: [    0.115469] rcu: RCU calculated value of scheduler-enlistment delay is 25 jiffies.\\r\\nNov 17 04:03:48 debian kernel: [    0.116433] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=1\\r\\nNov 17 04:03:48 debian kernel: [    0.121697] NR_IRQS: 524544, nr_irqs: 256, preallocated irqs: 16\\r\\nNov 17 04:03:48 debian kernel: [    0.122810] random: crng init done\\r\\nNov 17 04:03:48 debian kernel: [    0.123274] Console: colour dummy device 80x25\\r\\nNov 17 04:03:48 debian kernel: [    0.124053] printk: console [tty0] enabled\\r\\nNov 17 04:03:48 debian kernel: [    0.124835] printk: console [ttyS0] enabled\\r\\nNov 17 04:03:48 debian kernel: [    0.126039] printk: bootconsole [earlyser0] disabled\\r\\nNov 17 04:03:48 debian kernel: [    0.127441] ACPI: Core revision 20200925\\r\\nNov 17 04:03:48 debian kernel: [    0.128098] APIC: Switch to symmetric I/O mode setup\\r\\nNov 17 04:03:48 debian kernel: [    0.129244] x2apic enabled\\r\\nNov 17 04:03:48 debian kernel: [    0.131960] Switched APIC routing to physical x2apic.\\r\\nNov 17 04:03:48 debian kernel: [    0.136632] ..TIMER: vector=0x30 apic1=0 pin1=0 apic2=-1 pin2=-1\\r\\nNov 17 04:03:48 debian kernel: [    0.137712] clocksource: tsc-early: mask: 0xffffffffffffffff max_cycles: 0x1fb6d394f62, max_idle_ns: 440795316813 ns\\r\\nNov 17 04:03:48 debian kernel: [    0.139157] Calibrating delay loop (skipped) preset value.. 4400.34 BogoMIPS (lpj=8800680)\\r\\nNov 17 04:03:48 debian kernel: [    0.143263] Last level iTLB entries: 4KB 64, 2MB 8, 4MB 8\\r\\nNov 17 04:03:48 debian kernel: [    0.144056] Last level dTLB entries: 4KB 64, 2MB 0, 4MB 0, 1GB 4\\r\\nNov 17 04:03:48 debian kernel: [    0.144991] Spectre V1 : Mitigation: usercopy/swapgs barriers and __user pointer sanitization\\r\\nNov 17 04:03:48 debian kernel: [    0.146142] Spectre V2 : Mitigation: IBRS\\r\\nNov 17 04:03:48 debian kernel: [    0.146695] Spectre V2 : Spectre v2 / SpectreRSB mitigation: Filling RSB on context switch\\r\\nNov 17 04:03:48 debian kernel: [    0.147156] Spectre V2 : Spectre v2 / SpectreRSB : Filling RSB on VMEXIT\\r\\nNov 17 04:03:48 debian kernel: [    0.148095] RETBleed: Mitigation: IBRS\\r\\nNov 17 04:03:48 debian kernel: [    0.148658] Spectre V2 : mitigation: Enabling conditional Indirect Branch Prediction Barrier\\r\\nNov 17 04:03:48 debian kernel: [    0.149882] Speculative Store Bypass: Mitigation: Speculative Store Bypass disabled via prctl and seccomp\\r\\nNov 17 04:03:48 debian kernel: [    0.151163] MDS: Mitigation: Clear CPU buffers\\r\\nNov 17 04:03:48 debian kernel: [    0.151804] TAA: Mitigation: Clear CPU buffers\\r\\nNov 17 04:03:48 debian kernel: [    0.152445] MMIO Stale Data: Vulnerable: Clear CPU buffers attempted, no microcode\\r\\nNov 17 04:03:48 debian kernel: [    0.153624] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'\\r\\nNov 17 04:03:48 debian kernel: [    0.155158] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'\\r\\nNov 17 04:03:48 debian kernel: [    0.156050] x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers'\\r\\nNov 17 04:03:48 debian kernel: [    0.156905] x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]:  256\\r\\nNov 17 04:03:48 debian kernel: [    0.157851] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.\\r\\nNov 17 04:03:48 debian kernel: [    0.177428] Freeing SMP alternatives memory: 32K\\r\\nNov 17 04:03:48 debian kernel: [    0.179890] pid_max: default: 32768 minimum: 301\\r\\nNov 17 04:03:48 debian kernel: [    0.188030] LSM: Security Framework initializing\\r\\nNov 17 04:03:48 debian kernel: [    0.188748] Yama: disabled by default; enable with sysctl kernel.yama.*\\r\\nNov 17 04:03:48 debian kernel: [    0.189713] AppArmor: AppArmor initialized\\r\\nNov 17 04:03:48 debian kernel: [    0.190294] TOMOYO Linux initialized\\r\\nNov 17 04:03:48 debian kernel: [    0.190806] Mount-cache hash table entries: 2048 (order: 2, 16384 bytes, linear)\\r\\nNov 17 04:03:48 debian kernel: [    0.191158] Mountpoint-cache hash table entries: 2048 (order: 2, 16384 bytes, linear)\\r\\nNov 17 04:03:48 debian kernel: [    0.301178] smpboot: CPU0: Intel(R) Xeon(R) CPU @ 2.20GHz (family: 0x6, model: 0x4f, stepping: 0x0)\\r\\nNov 17 04:03:48 debian kernel: [    0.303030] Performance Events: unsupported p6 CPU model 79 no PMU driver, software events only.\\r\\nNov 17 04:03:48 debian kernel: [    0.303154] rcu: Hierarchical SRCU implementation.\\r\\nNov 17 04:03:48 debian kernel: [    0.303232] NMI watchdog: Perf NMI watchdog permanently disabled\\r\\nNov 17 04:03:48 debian kernel: [    0.304156] smp: Bringing up secondary CPUs ...\\r\\nNov 17 04:03:48 debian kernel: [    0.304775] smp: Brought up 1 node, 1 CPU\\r\\nNov 17 04:03:48 debian kernel: [    0.305377] smpboot: Max logical packages: 1\\r\\nNov 17 04:03:48 debian kernel: [    0.305973] smpboot: Total of 1 processors activated (4400.34 BogoMIPS)\\r\\nNov 17 04:03:48 debian kernel: [    0.308500] node 0 deferred pages initialised in 4ms\\r\\nNov 17 04:03:48 debian kernel: [    0.309336] devtmpfs: initialized\\r\\nNov 17 04:03:48 debian kernel: [    0.309853] x86/mm: Memory block size: 128MB\\r\\nNov 17 04:03:48 debian kernel: [    0.310586] PM: Registering ACPI NVS region [mem 0x2617f000-0x261fefff] (524288 bytes)\\r\\nNov 17 04:03:48 debian kernel: [    0.311201] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns\\r\\nNov 17 04:03:48 debian kernel: [    0.312491] futex hash table entries: 256 (order: 2, 16384 bytes, linear)\\r\\nNov 17 04:03:48 debian kernel: [    0.313553] NET: Registered protocol family 16\\r\\nNov 17 04:03:48 debian kernel: [    0.314323] DMA: preallocated 128 KiB GFP_KERNEL pool for atomic allocations\\r\\nNov 17 04:03:48 debian kernel: [    0.315262] DMA: preallocated 128 KiB GFP_KERNEL|GFP_DMA pool for atomic allocations\\r\\nNov 17 04:03:48 debian kernel: [    0.316351] DMA: preallocated 128 KiB GFP_KERNEL|GFP_DMA32 pool for atomic allocations\\r\\nNov 17 04:03:48 debian kernel: [    0.317444] aud[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mUser Login Management\\u001b[0m.\\r\\nit: initializing netlink subsys (disabled)\\r\\nNov 17 04:03:48 debian kernel: [    0.318358] thermal_sys: Registered thermal governor 'fair_share'\\r\\nNov 17 04:03:48 debian kernel: [    0.318358] thermal_sys: Registered thermal governor 'bang_bang'\\r\\nNov 17 04:03:48 debian kernel: [    0.319159] thermal_sys: Registered thermal governor 'step_wise'\\r\\nNov 17 04:03:48 debian kernel: [    0.319988] thermal_sys: Registered thermal governor 'user_space'\\r\\nNov 17 04:03:48 debian kernel: [    0.320815] thermal_sys: Registered thermal governor 'power_allocator'\\r\\nNov 17 04:03:48 debian kernel: [    0.321635] cpuidle: using governor ladder\\r\\nNov 17 04:03:48 debian kernel: [    0.323161] audit: type=2000 audit(1700193824.940:1): state=initialized audit_enabled=0 res=1\\r\\nNov 17 04:03:48 debian kernel: [    0.324328] cpuidle: using governor menu\\r\\nNov 17 04:03:48 debian kernel: [    0.324906] ACPI: bus type PCI registered\\r\\nNov 17 04:03:48 debian kernel: [    0.325460] acpiphp: ACPI Hot Plug PCI Controller Driver version: 0.5\\r\\nNov 17 04:03:48 debian kernel: [    0.326421] PCI: Using configuration type 1 for base access\\r\\nNov 17 04:03:48 debian kernel: [    0.327802] Kprobes globally optimized\\r\\nNov 17 04:03:48 debian kernel: [    0.328452] HugeTLB registered 1.00 GiB page size, pre-allocated 0 pages\\r\\nNov 17 04:03:48 debian kernel: [    0.329351] HugeTLB registered 2.00 MiB page size, pre-allocated 0 pages\\r\\nNov 17 04:03:48 debian kernel: [    0.457287] ACPI: Added _OSI(Module Device)\\r\\nNov 17 04:03:48 debian kernel: [    0.457914] ACPI: Added _OSI(Processor Device)\\r\\nNov 17 04:03:48 debian kernel: [    0.458520] ACPI: Added _OSI(3.0 _SCP Extensions)\\r\\nNov 17 04:03:48 debian kernel: [    0.459158] ACPI: Added _OSI(Processor Aggregator Device)\\r\\nNov 17 04:03:48 debian kernel: [    0.460010] ACPI: Added _OSI(Linux-Dell-Video)\\r\\nNov 17 04:03:48 debian kernel: [    0.460629] ACPI: Added _OSI(Linux-Lenovo-NV-HDMI-Audio)\\r\\nNov 17 04:03:48 debian kernel: [    0.461348] ACPI: Added _OSI(Linux-HPI-Hybrid-Graphics)\\r\\nNov 17 04:03:48 debian kernel: [    0.462989] ACPI: 3 ACPI AML tables successfully acquired and loaded\\r\\nNov 17 04:03:48 debian kernel: [    0.464105] ACPI: Interpreter enabled\\r\\nNov 17 04:03:48 debian kernel: [    0.464646] ACPI: (supports S0 S3 S4 S5)\\r\\nNov 17 04:03:48 debian kernel: [    0.465207] ACPI: Using IOAPIC for interrupt routing\\r\\nNov 17 04:03:48 debian kernel: [    0.465937] PCI: Using host bridge windows from ACPI; if necessary, use \\\"pci=nocrs\\\" and report a bug\\r\\nNov 17 04:03:48 debian kernel: [    0.467351] ACPI: Enabled 16 GPEs in block 00 to 0F\\r\\nNov 17 04:03:48 debian kernel: [    0.469893] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff])\\r\\nNov 17 04:03:48 debian kernel: [    0.471179] acpi PNP0A03:00: _OSC: OS supports [ASPM ClockPM Segments MSI HPX-Type3]\\r\\nNov 17 04:03:48 debian kernel: [    0.472279] acpi PNP0A03:00: fail to add MMCONFIG information, can't access extended PCI configuration space under this bridge.\\r\\nNov 17 04:03:48 debian kernel: [    0.474395] PCI host bridge to bus 0000:00\\r\\nNov 17 04:03:48 debian kernel: [    0.475161] pci_bus 0000:00: root bus resource [io  0x0000-0x0cf7 window]\\r\\nNov 17 04:03:48 debian kernel: [    0.476080] pci_bus 0000:00: root bus resource [io  0x0d00-0xffff window]\\r\\nNov 17 04:03:48 debian kernel: [    0.476988] pci_bus 0000:00: root bus resource [mem 0x000a0000-0x000bffff window]\\r\\nNov 17 04:03:48 debian kernel: [    0.478071] pci_bus 0000:00: root bus resource [mem 0x80000000-0xfebfefff window]\\r\\nNov 17 04:03:48 debian kernel: [    0.479156] pci_bus 0000:00: root bus resource [bus 00-ff]\\r\\nNov 17 04:03:48 debian kernel: [    0.479955] pci 0000:00:00.0: [8086:1237] type 00 class 0x060000\\r\\nNov 17 04:03:48 debian kernel: [    0.483516] pci 0000:00:01.0: [8086:7110] type 00 class 0x060100\\r\\nNov 17 04:03:48 debian kernel: [    0.497205] pci 0000:00:01.3: [8086:7113] type 00 class 0x068000\\r\\nNov 17 04:03:48 debian kernel: [    0.510756] pci 0000:00:01.3: quirk: [io  0xb000-0xb03f] claimed by PIIX4 ACPI\\r\\nNov 17 04:03:48 debian kernel: [    0.511429] pci 0000:00:03.0: [1af4:1004] type 00 class 0x000000\\r\\nNov 17 04:03:48 debian kernel: [    0.518345] pci 0000:00:03.0: reg 0x10: [io  0xc040-0xc07f]\\r\\nNov 17 04:03:48 debian kernel: [    0.523157] pci 0000:00:03.0: reg 0x14: [mem 0x80000000-0x8000007f]\\r\\nNov 17 04:03:48 debian kernel: [    0.534975] pci 0000:00:04.0: [1af4:1000] type 00 class 0x020000\\r\\nNov 17 04:03:48 debian kernel: [    0.540789] pci 0000:00:04.0: reg 0x10: [io  0xc000-0xc03f]\\r\\nNov 17 04:03:48 debian kernel: [    0.544833] pci 0000:00:04.0: reg 0x14: [mem 0x80002000-0x8000203f]\\r\\nNov 17 04:03:48 debian kernel: [    0.555412] pci 0000:00:05.0: [1af4:1005] type 00 class 0x00ff00\\r\\nNov 17 04:03:48 debian kernel: [    0.560805] pci 0000:00:05.0: reg 0x10: [io  0xc080-0xc09f]\\r\\nNov 17 04:03:48 debian kernel: [    0.564625] pci 0000:00:05.0: reg 0x14: [mem 0x80001000-0x8000103f]\\r\\nNov 17 04:03:48 debian kernel: [    0.575564] ACPI: PCI Interrupt Link [LNKA] (IRQs 5 *10 11)\\r\\nNov 17 04:03:48 debian kernel: [    0.577286] ACPI: PCI Interrupt Link [LNKB] (IRQs 5 *10 11)\\r\\nNov 17 04:03:48 debian kernel: [    0.578886] ACPI: PCI Interrupt Link [LNKC] (IRQs 5 10 *11)\\r\\nNov 17 04:03:48 debian kernel: [    0.579915] ACPI: PCI Interrupt Link [LNKD] (IRQs 5 10 *11)\\r\\nNov 17 04:03:48 debian kernel: [    0.583168] ACPI: PCI Interrupt Link [LNKS] (IRQs *9)\\r\\nNov 17 04:03:48 debian kernel: [    0.584105] iommu: Default domain type: Translated \\r\\nNov 17 04:03:48 debian kernel: [    0.584854] vgaarb: loaded\\r\\nNov 17 04:03:48 debian kernel: [    0.585334] Registered efivars operations\\r\\nNov 17 04:03:48 debian kernel: [    0.586084] NetLabel: Initializing\\r\\nNov 17 04:03:48 debian kernel: [    0.587156] NetLabel:  domain hash size = 128\\r\\nNov 17 04:03:48 debian kernel: [    0.587827] NetLabel:  protocols = UNLABELED CIPSOv4 CALIPSO\\r\\nNov 17 04:03:48 debian kernel: [    0.588621] NetLabel:  unlabeled traffic allowed by default\\r\\nNov 17 04:03:48 debian kernel: [    0.589415] PCI: Using ACPI for IRQ routing\\r\\nNov 17 04:03:48 debian kernel: [    0.590046] PCI: pci_cache_line_size set to 64 bytes\\r\\nNov 17 04:03:48 debian kernel: [    0.590141] e820: reserve RAM buffer [mem 0x00055000-0x0005ffff]\\r\\nNov 17 04:03:48 debian kernel: [    0.590142] e820: reserve RAM buffer [mem 0x00098000-0x0009ffff]\\r\\nNov 17 04:03:48 debian kernel: [    0.590143] e820: reserve RAM buffer [mem 0x25eed000-0x27ffffff]\\r\\nNov 17 04:03:48 debian kernel: [    0.590144] e820: reserve RAM buffer [mem 0x265e0000-0x27ffffff]\\r\\nNov 17 04:03:48 debian kernel: [    0.590183] clocksource: Switched to clocksource kvm-clock\\r\\nNov 17 04:03:48 debian kernel: [    0.599324] VFS: Disk quotas dquot_6.6.0\\r\\nNov 17 04:03:48 debian kernel: [    0.599916] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)\\r\\nNov 17 04:03:48 debian kernel: [    0.601024] AppArmor: AppArmor Filesystem Enabled\\r\\nNov 17 04:03:48 debian kernel: [    0.601786] pnp: PnP ACPI init\\r\\nNov 17 04:03:48 debian kernel: [    0.602302] pnp 00:00: Plug and Play ACPI device, IDs PNP0b00 (active)\\r\\nNov 17 04:03:48 debian kernel: [    0.602352] pnp 00:01: Plug and Play ACPI device, IDs PNP0303 (active)\\r\\nNov 17 04:03:48 debian kernel: [    0.602384] pnp 00:02: Plug and Play ACPI device, IDs PNP0f13 (active)\\r\\nNov 17 04:03:48 debian kernel: [    0.602421] pnp 00:03: Plug and Play ACPI device, IDs PNP0501 (active)\\r\\nNov 17 04:03:48 debian kernel: [    0.602449] pnp 00:04: Plug and Play ACPI device, IDs PNP0501 (active)\\r\\nNov 17 04:03:48 debian kernel: [    0.602480] pnp 00:05: Plug and Play ACPI device, IDs PNP0501 (active)\\r\\nNov 17 04:03:48 debian kernel: [    0.602511] pnp 00:06: Plug and Play ACPI device, IDs PNP0501 (active)\\r\\nNov 17 04:03:48 debian kernel: [    0.602662] pnp: PnP ACPI: found 7 devices\\r\\nNov 17 04:03:48 debian kernel: [    0.608541] clocksource: acpi_pm: mask: 0xffffff max_cycles: 0xffffff, max_idle_ns: 2085701024 ns\\r\\nNov 17 04:03:48 debian kernel: [    0.609795] NET: Registered protocol family 2\\r\\nNov 17 04:03:48 debian kernel: [    0.610436] IP idents hash table entries: 16384 (order: 5, 131072 bytes, linear)\\r\\nNov 17 04:03:48 debian kernel: [    0.612665] tcp_listen_portaddr_hash hash table entries: 512 (order: 1, 8192 bytes, linear)\\r\\nNov 17 04:03:48 debian kernel: [    0.613850] TCP established hash table entries: 8192 (order: 4, 65536 bytes, linear)\\r\\nNov 17 04:03:48 debian kernel: [    0.614940] TCP bind hash table entries: 8192 (order: 5, 131072 bytes, linear)\\r\\nNov 17 04:03:48 debian kernel: [    0.615983] TCP: Hash tables configured (established 8192 bind 8192)\\r\\nNov 17 04:03:48 debian kernel: [    0.616945] UDP hash table entries: 512 (order: 2, 16384 bytes, linear)\\r\\nNov 17 04:03:48 debian kernel: [    0.617844] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes, linear)\\r\\nNov 17 04:03:48 debian kernel: [    0.618844] NET: Registered protocol family 1\\r\\nNov 17 04:03:48 debian kernel: [    0.619629] NET: Registered protocol family 44\\r\\nNov 17 04:03:48 debian kernel: [    0.620246] pci_bus 0000:00: resource 4 [io  0x0000-0x0cf7 window]\\r\\nNov 17 04:03:48 debian kernel: [    0.621100] pci_bus 0000:00: resource 5 [io  0x0d00-0xffff window]\\r\\nNov 17 04:03:48 debian kernel: [    0.621946] pci_bus 0000:00: resource 6 [mem 0x000a0000-0x000bffff window]\\r\\nNov 17 04:03:48 debian kernel: [    0.622980] pci_bus 0000:00: resource 7 [mem 0x80000000-0xfebfefff window]\\r\\nNov 17 04:03:48 debian kernel: [    0.624039] pci 0000:00:00.0: Limiting direct PCI/PCI transfers\\r\\nNov 17 04:03:48 debian kernel: [    0.624898] PCI: CLS 0 bytes, default 64\\r\\nNov 17 04:03:48 debian kernel: [    0.625515] Trying to unpack rootfs image as initramfs...\\r\\nNov 17 04:03:48 debian kernel: [    0.838263] Freeing initrd memory: 13832K\\r\\nNov 17 04:03:48 debian kernel: [    0.838913] clocksource: tsc: mask: 0xffffffffffffffff max_cycles: 0x1fb6d394f62, max_idle_ns: 440795316813 ns\\r\\nNov 17 04:03:48 debian kernel: [    0.840271] clocksource: Switched to clocksource tsc\\r\\nNov 17 04:03:48 debian kernel: [    0.841223] Initialise system trusted keyrings\\r\\nNov 17 04:03:48 debian kernel: [    0.841875] Key type blacklist registered\\r\\nNov 17 04:03:48 debian kernel: [    0.842505] workingset: timestamp_bits=36 max_order=18 bucket_order=0\\r\\nNov 17 04:03:48 debian kernel: [    0.844293] zbud: loaded\\r\\nNov 17 04:03:48 debian kernel: [    0.844973] Key type asymmetric registered\\r\\nNov 17 04:03:48 debian kernel: [    0.845539] Asymmetric key parser 'x509' registered\\r\\nNov 17 04:03:48 debian kernel: [    0.846222] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 252)\\r\\nNov 17 04:03:48 debian kernel: [    0.847278] io scheduler mq-deadline registered\\r\\nNov 17 04:03:48 debian kernel: [    0.848485] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled\\r\\nNov 17 04:03:48 debian kernel: [    0.849463] 00:03: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A\\r\\nNov 17 04:03:48 debian kernel: [    0.850740] 00:04: ttyS1 at I/O 0x2f8 (irq = 3, base_baud = 115200) is a 16550A\\r\\nNov 17 04:03:48 debian kernel: [    0.851965] 00:05: ttyS2 at I/O 0x3e8 (irq = 6, base_baud = 115200) is a 16550A\\r\\nNov 17 04:03:48 debian kernel: [    0.853164] 00:06: ttyS3 at I/O 0x2e8 (irq = 7, base_baud = 115200) is a 16550A\\r\\nNov 17 04:03:48 debian kernel: [    0.854467] i8042: PNP: PS/2 Controller [PNP0303:KBD,PNP0f13:MOU] at 0x60,0x64 irq 1,12\\r\\nNov 17 04:03:48 debian kernel: [    0.855734] i8042: Warning: Keylock active\\r\\nNov 17 04:03:48 debian kernel: [    0.857698] serio: i8042 KBD port at 0x60,0x64 irq 1\\r\\nNov 17 04:03:48 debian kernel: [    0.858391] serio: i8042 AUX port at 0x60,0x64 irq 12\\r\\nNov 17 04:03:48 debian kernel: [    0.859206] rtc_cmos 00:00: RTC can wake from S4\\r\\nNov 17 04:03:48 debian kernel: [    0.860615] rtc_cmos 00:00: registered as rtc0\\r\\nNov 17 04:03:48 debian kernel: [    0.861428] rtc_cmos 00:00: setting system clock to 2023-11-17T04:03:45 UTC (1700193825)\\r\\nNov 17 04:03:48 debian kernel: [    0.862619] rtc_cmos 00:00: alarms up to one day, 114 bytes nvram\\r\\nNov 17 04:03:48 debian kernel: [    0.863495] intel_pstate: CPU model not supported\\r\\nNov 17 04:03:48 debian kernel: [    0.864350] NET: Registered protocol family 10\\r\\nNov 17 04:03:48 debian kernel: [    0.872101] Segment Routing with IPv6\\r\\nNov 17 04:03:48 debian kernel: [    0.872671] mip6: Mobile IPv6\\r\\nNov 17 04:03:48 debian kernel: [    0.873091] NET: Registered protocol family 17\\r\\nNov 17 04:03:48 debian kernel: [    0.873814] IPI shorthand broadcast: enabled\\r\\nNov 17 04:03:48 debian kernel: [    0.874454] sched_clock: Marking stable (864288966, 8353340)-\\u003e(874836097, -2193791)\\r\\nNov 17 04:03:48 debian kernel: [    0.875588] registered taskstats version 1\\r\\nNov 17 04:03:48 debian kernel: [    0.876158] Loading compiled-in X.509 certificates\\r\\nNov 17 04:03:48 debian kernel: [    0.908877] Loaded X.509 cert 'Debian Secure Boot CA: 6ccece7e4c6c0d1f6149f3dd27dfcc5cbb419ea1'\\r\\nNov 17 04:03:48 debian kernel: [    0.910478] Loaded X.509 cert 'Debian Secure Boot Signer 2022 - linux: 14011249c2675ea8e5148542202005810584b25f'\\r\\nNov 17 04:03:48 debian kernel: [    0.911923] Key type .fscrypt registered\\r\\nNov 17 04:03:48 debian kernel: [    0.912517] Key type fscrypt-provisioning registered\\r\\nNov 17 04:03:48 debian kernel: [    0.913253] AppArmor: AppArmor sha1 policy hashing enabled\\r\\nNov 17 04:03:48 debian kernel: [    0.915720] Freeing unused decrypted memory: 2036K\\r\\nNov 17 04:03:48 debian kernel: [    0.917013] Freeing unused kernel image (initmem) memory: 2468K\\r\\nNov 17 04:03:48 debian kernel: [    [\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mRemove Stale Onli…ext4 Metadata Check Snapshots\\u001b[0m.\\r\\n0.924384] Write protecting the kernel read-only data: 22528k\\r\\nNov 17 04:03:48 debian kernel: [    0.925931] Freeing unused kernel image (text/rodata gap) memory: 2036K\\r\\nNov 17 04:03:48 debian kernel: [    0.927194] Freeing unused kernel image (rodata/data gap) memory: 1236K\\r\\nNov 17 04:03:48 debian kernel: [    0.928659] x86/mm: Checked W+X mappings: passed, no W+X pages found.\\r\\nNov 17 04:03:48 debian kernel: [    0.929536] x86/mm: Checking user space page tables\\r\\nNov 17 04:03:48 debian kernel: [    0.930357] x86/mm: Checked W+X mappings: passed, no W+X pages found.\\r\\nNov 17 04:03:48 debian kernel: [    0.931248] Run /init as init process\\r\\nNov 17 04:03:48 debian kernel: [    0.931826]   with arguments:\\r\\nNov 17 04:03:48 debian kernel: [    0.931827]     /init\\r\\nNov 17 04:03:48 debian kernel: [    0.931827]   with environment:\\r\\nNov 17 04:03:48 debian kernel: [    0.931828]     HOME=/\\r\\nNov 17 04:03:48 debian kernel: [    0.931829]     TERM=linux\\r\\nNov 17 04:03:48 debian kernel: [    0.931829]     BOOT_IMAGE=/boot/vmlinuz-5.10.0-26-cloud-amd64\\r\\nNov 17 04:03:48 debian kernel: [    0.931830]     intel_iommu=off\\r\\nNov 17 04:03:48 debian kernel: [    0.999458] PCI Interrupt Link [LNKC] enabled at IRQ 11\\r\\nNov 17 04:03:48 debian kernel: [    1.000238] virtio-pci 0000:00:03.0: virtio_pci: leaving for legacy driver\\r\\nNov 17 04:03:48 debian kernel: [    1.026601] PCI Interrupt Link [LNKD] enabled at IRQ 10\\r\\nNov 17 04:03:48 debian kernel: [    1.027444] virtio-pci 0000:00:04.0: virtio_pci: leaving for legacy driver\\r\\nNov 17 04:03:48 debian kernel: [    1.031920] PCI Interrupt Link [LNKA] enabled at IRQ 10\\r\\nNov 17 04:03:48 debian kernel: [    1.032814] virtio-pci 0000:00:05.0: virtio_pci: leaving for legacy driver\\r\\nNov 17 04:03:48 debian kernel: [    1.054934] SCSI subsystem initialized\\r\\nNov 17 04:03:48 debian kernel: [    1.061158] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input0\\r\\nNov 17 04:03:48 debian kernel: [    1.075892] virtio_net virtio1 ens4: renamed from eth0\\r\\nNov 17 04:03:48 debian kernel: [    1.085896] scsi host0: Virtio SCSI HBA\\r\\nNov 17 04:03:48 debian kernel: [    1.091740] scsi 0:0:1:0: Direct-Access     Google   PersistentDisk   1    PQ: 0 ANSI: 6\\r\\nNov 17 04:03:48 debian kernel: [    1.111855] sd 0:0:1:0: [sda] 20971520 512-byte logical blocks: (10.7 GB/10.0 GiB)\\r\\nNov 17 04:03:48 debian kernel: [    1.112925] sd 0:0:1:0: [sda] 4096-byte physical blocks\\r\\nNov 17 04:03:48 debian kernel: [    1.113940] sd 0:0:1:0: [sda] Write Protect is off\\r\\nNov 17 04:03:48 debian kernel: [    1.114612] sd 0:0:1:0: [sda] Mode Sense: 1f 00 00 08\\r\\nNov 17 04:03:48 debian kernel: [    1.114657] sd 0:0:1:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA\\r\\nNov 17 04:03:48 debian kernel: [    1.118523]  sda: sda1 sda14 sda15\\r\\nNov 17 04:03:48 debian kernel: [    1.126791] sd 0:0:1:0: [sda] Attached SCSI disk\\r\\nNov 17 04:03:48 debian kernel: [    1.176849]  sda: sda1 sda14 sda15\\r\\nNov 17 04:03:48 debian kernel: [    1.254250] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null)\\r\\nNov 17 04:03:48 debian kernel: [    1.277595] Not activating Mandatory Access Control as /sbin/tomoyo-init does not exist.\\r\\nNov 17 04:03:48 debian kernel: [    2.283707] fuse: init (API version 7.32)\\r\\nNov 17 04:03:48 debian kernel: [    2.348486] EXT4-fs (sda1): re-mounted. Opts: discard,errors=remount-ro\\r\\nNov 17 04:03:48 debian kernel: [    2.488722] EXT4-fs (sda1): resizing filesystem from 2588667 to 2588667 blocks\\r\\nNov 17 04:03:48 debian kernel: [    2.759844] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input2\\r\\nNov 17 04:03:48 debian kernel: [    2.784424] ACPI: Power Button [PWRF]\\r\\nNov 17 04:03:48 debian kernel: [    2.785020] input: Sleep Button as /devices/LNXSYSTM:00/LNXSLPBN:00/input/input3\\r\\nNov 17 04:03:48 debian kernel: [    2.786165] ACPI: Sleep Button [SLPF]\\r\\nNov 17 04:03:48 debian kernel: [    2.797491] tpm_tis MSFT0101:00: 2.0 TPM (device-id 0x9009, rev-id 0)\\r\\nNov 17 04:03:48 debian kernel: [    2.818744] sd 0:0:1:0: Attached scsi generic sg0 type 0\\r\\nNov 17 04:03:48 debian kernel: [    2.829489] pstore: Using crash dump compression: deflate\\r\\nNov 17 04:03:48 debian kernel: [    2.830270] pstore: Registered efi as persistent store backend\\r\\nNov 17 04:03:48 debian kernel: [    2.878870] RAPL PMU: API unit is 2^-32 Joules, 0 fixed counters, 10737418240 ms ovfl timer\\r\\nNov 17 04:03:48 debian kernel: [    2.916156] cryptd: max_cpu_qlen set to 1000\\r\\nNov 17 04:03:48 debian kernel: [    2.945181] AVX2 version of gcm_enc/dec engaged.\\r\\nNov 17 04:03:48 debian kernel: [    2.945881] AES CTR mode by8 optimization enabled\\r\\nNov 17 04:03:48 debian kernel: [    3.379173] audit: type=1400 audit(1700193828.011:2): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"nvidia_modprobe\\\" pid=292 comm=\\\"apparmor_parser\\\"\\r\\nNov 17 04:03:48 debian kernel: [    3.382434] audit: type=1400 audit(1700193828.015:3): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"nvidia_modprobe//kmod\\\" pid=292 comm=\\\"apparmor_parser\\\"\\r\\nNov 17 04:03:48 debian kernel: [    3.465172] audit: type=1400 audit(1700193828.099:4): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"/usr/sbin/chronyd\\\" pid=293 comm=\\\"apparmor_parser\\\"\\r\\nNov 17 04:03:48 debian kernel: [    3.506572] audit: type=1400 audit(1700193828.139:5): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"lsb_release\\\" pid=294 comm=\\\"apparmor_parser\\\"\\r\\nNov 17 04:03:48 debian kernel: [    3.625363] audit: type=1400 audit(1700193828.259:6): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"tcpdump\\\" pid=295 comm=\\\"apparmor_parser\\\"\\r\\nNov 17 04:03:48 debian kernel: [    3.655070] audit: type=1400 audit(1700193828.287:7): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"/usr/sbin/haveged\\\" pid=296 comm=\\\"apparmor_parser\\\"\\r\\nNov 17 04:03:48 debian kernel: [    3.720200] audit: type=1400 audit(1700193828.351:8): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"/usr/bin/man\\\" pid=297 comm=\\\"apparmor_parser\\\"\\r\\nNov 17 04:03:48 debian kernel: [    3.723210] audit: type=1400 audit(1700193828.359:9): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"man_filter\\\" pid=297 comm=\\\"apparmor_parser\\\"\\r\\nNov 17 04:03:48 debian kernel: [    3.728049] audit: type=1400 audit(1700193828.359:10): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"man_groff\\\" pid=297 comm=\\\"apparmor_parser\\\"\\r\\nNov 17 04:03:48 debian systemd[1]: Finished Create list of static device nodes for the current kernel.\\r\\nNov 17 04:03:48 debian systemd[1]: modprobe@configfs.service: Succeeded.\\r\\nNov 17 04:03:48 debian systemd[1]: Finished Load Kernel Module configfs.\\r\\nNov 17 04:03:48 debian systemd[1]: modprobe@drm.service: Succeeded.\\r\\nNov 17 04:03:48 debian systemd[1]: Finished Load Kernel Module drm.\\r\\nNov 17 04:03:48 debian systemd[1]: modprobe@fuse.service: Succeeded.\\r\\nNov 17 04:03:48 debian systemd[1]: Finished Load Kernel Module fuse.\\r\\nNov 17 04:03:48 debian systemd[1]: Finished Load Kernel Modules.\\r\\nNov 17 04:03:48 debian systemd[1]: Finished Remount Root and Kernel File Systems.\\r\\nNov 17 04:03:48 debian systemd[1]: Mounting FUSE Control File System...\\r\\nNov 17 04:03:48 debian systemd[1]: Mounting Kernel Configuration File System...\\r\\nNov 17 04:03:48 debian systemd[1]: Starting Grow File System on /...\\r\\nNov 17 04:03:48 debian systemd[1]: Condition check resulted in Rebuild Hardware Database being skipped.\\r\\nNov 17 04:03:48 debian systemd[1]: Starting Flush Journal to Persistent Storage...\\r\\nNov 17 04:03:48 debian systemd[1]: Condition check resulted in Platform Persistent Storage Archival being skipped.\\r\\nNov 17 04:03:48 debian systemd[1]: Starting Load/Save Random Seed...\\r\\nNov 17 04:03:48 debian systemd-growfs[189]: Successfully resized \\\"/\\\" to 9.8G bytes (3584 bytes lost due to blocksize).\\r\\nNov 17 04:03:48 debian systemd[1]: Starting Apply Kernel Variables...\\r\\nNov 17 04:03:48 debian systemd[1]: Starting Create System Users...\\r\\nNov 17 04:03:48 debian systemd[1]: Finished Coldplug All udev Devices.\\r\\nNov 17 04:03:48 debian systemd-sysusers[193]: Creating group systemd-timesync with gid 999.\\r\\nNov 17 04:03:48 debian systemd-sysusers[193]: Creating user systemd-timesync (systemd Time Synchronization) with uid 999 and gid 999.\\r\\nNov 17 04:03:48 debian systemd-sysusers[193]: Creating group systemd-coredump with gid 998.\\r\\nNov 17 04:03:48 debian systemd-sysusers[193]: Creating user systemd-coredump (systemd Core Dumper) with uid 998 and gid 998.\\r\\nNov 17 04:03:48 debian systemd[1]: Mounted FUSE Control File System.\\r\\nNov 17 04:03:48 debian systemd[1]: Mounted Kernel Configuration File System.\\r\\nNov 17 04:03:48 debian systemd[1]: Finished Grow File System on /.\\r\\nNov 17 04:03:48 debian systemd[1]: Finished Flush Journal to Persistent Storage.\\r\\nNov 17 04:03:48 debian systemd[1]: Finished Load/Save Random Seed.\\r\\nNov 17 04:03:48 debian systemd[1]: Finished Apply Kernel Variables.\\r\\nNov 17 04:03:48 debian systemd[1]: Finished Create System Users.\\r\\nNov 17 04:03:48 debian systemd[1]: Condition check resulted in First Boot Complete being skipped.\\r\\nNov 17 04:03:48 debian systemd[1]: Starting Helper to synchronize boot up for ifupdown...\\r\\nNov 17 04:03:48 debian systemd[1]: Starting Create Static Device Nodes in /dev...\\r\\nNov 17 04:03:48 debian systemd[1]: Finished Helper to synchronize boot up for ifupdown.\\r\\nNov 17 04:03:48 debian systemd[1]: Finished Create Static Device Nodes in /dev.\\r\\nNov 17 04:03:48 debian systemd[1]: Reached target Local File Systems (Pre).\\r\\nNov 17 04:03:48 debian systemd[1]: Starting Rule-based Manager for Device Events and Files...\\r\\nNov 17 04:03:48 debian systemd[1]: Started Rule-based Manager for Device Events and Files.\\r\\nNov 17 04:03:48 debian systemd-udevd[201]: Using default interface naming scheme 'v247'.\\r\\nNov 17 04:03:48 debian systemd-udevd[201]: ethtool: autonegotiation is unset or enabled, the speed and duplex are not writable.\\r\\nNov 17 04:03:48 debian systemd[1]: Found device /dev/ttyS0.\\r\\nNov 17 04:03:48 debian systemd-udevd[199]: ethtool: autonegotiation is unset or enabled, the speed and duplex are not writable.\\r\\nNov 17 04:03:48 debian systemd[1]: Found device PersistentDisk 15.\\r\\nNov 17 04:03:48 debian systemd[1]: Mounting /boot/efi...\\r\\nNov 17 04:03:48 debian cloud-ifupdown-helper: Generated configuration for ens4\\r\\nNov 17 04:03:48 debian systemd[1]: Mounted /boot/efi.\\r\\nNov 17 04:03:48 debian systemd[1]: Reached target Local File Systems.\\r\\nNov 17 04:03:48 debian systemd[1]: Starting Load AppArmor profiles...\\r\\nNov 17 04:03:48 debian systemd[1]: Condition check resulted in Store a System Token in an EFI Variable being skipped.\\r\\nNov 17 04:03:48 debian systemd[1]: Starting Commit a transient machine-id on disk...\\r\\nNov 17 04:03:48 debian systemd[1]: Starting Create Volatile Files and Directories...\\r\\nNov 17 04:03:48 debian systemd[1]: Found device Virtio network device.\\r\\nNov 17 04:03:48 debian apparmor.systemd[265]: Restarting AppArmor\\r\\nNov 17 04:03:48 debian apparmor.systemd[265]: Reloading AppArmor profiles\\r\\nNov 17 04:03:48 debian systemd[1]: Finished Create Volatile Files and Directories.\\r\\nNov 17 04:03:48 debian systemd[1]: Starting Update UTMP about System Boot/Shutdown...\\r\\nNov 17 04:03:48 debian systemd[1]: Finished Update UTMP about System Boot/Shutdown.\\r\\nNov 17 04:03:48 debian systemd[1]: etc-machine\\\\x2did.mount: Succeeded.\\r\\nNov 17 04:03:48 debian systemd[1]: Finished Commit a transient machine-id on disk.\\r\\nNov 17 04:03:48 debian systemd[1]: Finished Load AppArmor profiles.\\r\\nNov 17 04:03:48 debian systemd[1]: Started Entropy Daemon based on the HAVEGE algorithm.\\r\\nNov 17 04:03:48 debian systemd[1]: Reached target System Initialization.\\r\\nNov 17 04:03:48 debian haveged[298]: haveged: command socket is listening at fd 3\\r\\nNov 17 04:03:48 debian systemd[1]: Started GCE Workload Certificate refresh timer.\\r\\nNov 17 04:03:48 debian systemd[1]: Started NSS cache refresh timer.\\r\\nNov 17 04:03:48 debian systemd[1]: Started Daily Cleanup of Temporary Directories.\\r\\nNov 17 04:03:48 debian systemd[1]: Listening on D-Bus System Message Bus Socket.\\r\\nNov 17 04:03:48 debian systemd[1]: Listening on UUID daemon activation socket.\\r\\nNov 17 04:03:48 debian systemd[1]: Reached target Sockets.\\r\\nNov 17 04:03:48 debian systemd[1]: Starting Resize root filesystem if needed...\\r\\nNov 17 04:03:48 debian systemd[1]: Started ifup for ens4.\\r\\nNov 17 04:03:48 debian google_disk_expand[299]: Checking if filesystem on /dev/sda1 needs resizing\\r\\nNov 17 04:03:48 debian systemd[1]: Starting Raise network interfaces...\\r\\nNov 17 04:03:48 debian google_disk_expand[308]: resize2fs 1.46.2 (28-Feb-2021)\\r\\nNov 17 04:03:48 debian google_disk_expand[308]: The filesystem is already 2588667 (4k) blocks long.  Nothing to do!\\r\\nNov 17 04:03:48 debian google_disk_expand[299]: Done.\\r\\nNov 17 04:03:48 debian systemd[1]: google-disk-expand.service: Succeeded.\\r\\nNov 17 04:03:48 debian systemd[1]: Finished Resize root filesystem if needed.\\r\\nNov 17 04:03:48 debian systemd[1]: Reached target Basic System.\\r\\nNov 17 04:03:48 debian systemd[1]: Started Regular background program processing daemon.\\r\\nNov 17 04:03:48 debian systemd[1]: Started D-Bus System Message Bus.\\r\\nNov 17 04:03:48 debian dhclient[321]: Internet Systems Consortium DHCP Client 4.4.1\\r\\nNov 17 04:03:48 debian sh[321]: Internet Systems Consortium DHCP Client 4.4.1\\r\\nNov 17 04:03:48 debian dhclient[321]: Copyright 2004-2018 Internet Systems Consortium.\\r\\nNov 17 04:03:48 debian sh[321]: Copyright 2004-2018 Internet Systems Consortium.\\r\\nNov 17 04:03:48 debian dhclient[321]: All rights reserved.\\r\\nNov 17 04:03:48 debian sh[321]: All rights reserved.\\r\\nNov 17 04:03:48 debian dhclient[321]: For info, please visit https://www.isc.org/software/dhcp/\\r\\nNov 17 04:03:48 debian sh[321]: For info, please visit https://www.isc.org/software/dhcp/\\r\\nNov 17 04:03:48 debian dhclient[321]: \\r\\nNov 17 04:03:48 debian systemd[1]: Starting Remove Stale Online ext4 Metadata Check Snapshots...\\r\\nNov 17 04:03:48 debian systemd[1]: Condition check resulted in getty on tty2-tty6 if dbus and logind are not available being skipped.\\r\\nNov 17 04:03:48 debian systemd[1]: Starting System Logging Service...\\r\\nNov 17 04:03:48 debian systemd[1]: Starting User Login Management...\\r\\nNov 17 04:03:48 debian ifup[304]: ifup: waiting for lock on /run/network/ifstate.ens4\\r\\nNov 17 04:03:48 debian systemd[1]: Started System Logging Service.\\r\\nNov 17 04:03:48 debian dhclient[321]: Listening on LPF/ens4/42:01:0a:9a:00:0e\\r\\nNov 17 04:03:48 debian sh[321]: Listening on LPF/ens4/42:01:0a:9a:00:0e\\r\\nNov 17 04:03:48 debian sh[321]: Sending on   LPF/ens4/42:01:0a:9a:00:0e\\r\\nNov 17 04:03:48 debian sh[321]: Sending on   Socket/fallback\\r\\nNov 17 04:03:48 debian sh[321]: Created duid \\\"\\\\000\\\\001\\\\000\\\\001,\\\\351\\\\242\\\\244B\\\\001\\\\012\\\\232\\\\000\\\\016\\\".\\r\\nNov 17 04:03:48 debian sh[321]: DHCPDISCOVER on ens4 to 255.255.255.255 port 67 interval 7\\r\\nNov 17 04:03:48 debian dhclient[321]: Sending on   LPF/ens4/42:01:0a:9a:00:0e\\r\\nNov 17 04:03:48 debian dhclient[321]: Sending on   Socket/fallback\\r\\nNov 17 04:03:48 debian dhclient[321]: Created duid \\\"\\\\000\\\\001\\\\000\\\\001,\\\\351\\\\242\\\\244B\\\\001\\\\012\\\\232\\\\000\\\\016\\\".\\r\\nNov 17 04:03:48 debian dhclient[321]: DHCPDISCOVER on ens4 to 255.255.255.255 port 67 interval 7\\r\\nNov 17 04:03:48 debian dhclient[321]: DHCPOFFER of 10.154.0.14 from 169.254.169.254\\r\\nNov 17 04:03:48 debian sh[321]: DHCPOFFER of 10.154.0.14 from 169.254.169.254\\r\\nNov 17 04:03:48 debian sh[321]: DHCPREQUEST for 10.154.0.14 on ens4 to 255.255.255.255 port 67\\r\\nNov 17 04:03:48 debian dhclient[321]: DHCPREQUEST for 10.154.0.14 on ens4 to 255.255.255.255 port 67\\r\\nNov 17 04:03:48 debian dhclient[321]: DHCPACK of 10.154.0.14 from 169.254.169.254\\r\\nNov 17 04:03:48 debian sh[321]: DHCPACK of 10.154.0.14 from 169.254.169.254\\r\\nNov 17 04:03:48 debian systemd[1]: Started User Login Management.\\r\\nNov 17 04:03:48 debian haveged[298]: haveged: ver: 1.9.14; arch: x86; vend: GenuineIntel; build: (gcc 10.2.1 ITV); collect: 128K\\r\\nNov 17 04:03:48 debian haveged[298]: haveged: cpu: (L4 VC); data: 32K (L4 V); inst: 32K (L4 V); idx: 24/40; sz: 32154/54019\\r\\nNov 17 04:03:48 debian haveged[298]: haveged: tot tests(BA8): A:1/1 B:1/1 continuous tests(B):  last entropy estimate 7.99937\\r\\nNov 17 04:03:48 debian haveged[298]: haveged: fills: 0, generated: 0\\r\\nNov 17 04:03:48 debian dhclient[321]: bound to 10.154.0.14 -- renewal in 42095 seconds.\\r\\nNov 17 04:03:48 debian sh[321]: bound to 10.154.0.14 -- renewal in 42095 seconds.\\r\\nNov 17 04:03:48 debian systemd[1]: e2scrub_reap.service: Succeeded.\\r\\nNov 17 04:03:48 debian systemd[1]: Finished Remove Stale Online ext4 Metadata Check Snapshots.\\r\\nNov 17 04:03:49 debian dhclient[421]: Internet Systems Consortium DHCP Client 4.4.1\\r\\nNov 17 04:03:49 debian sh[421]: Internet Systems Consortium DHCP Client 4.4.1\\r\\nNov 17 04:03:49 debian dhclient[421]: Copyright 2004-2018 Internet Systems Consortium.\\r\\nNov 17 04:03:49 debian sh[421]: Copyright 2004-2018 Internet Systems Consortium.\\r\\nNov 17 04:03:49 debian dhclient[421]: All rights reserved.\\r\\nNov 17 04:03:49 debian sh[421]: All rights reserved.\\r\\nNov 17 04:03:49 debian dhclient[421]: For info, please visit https://www.isc.org/software/dhcp/\\r\\nNov 17 04:03:49 debian sh[421]: For info, please visit https://www.isc.org/software/dhcp/\\r\\nNov 17 04:03:49 debian dhclient[421]: \\r\\nNov 17 04:03:49 debian dhclient[421]: Listening on Socket/ens4\\r\\nNov 17 04:03:49 debian sh[421]: Listening on Socket/ens4\\r\\nNov 17 04:03:49 debian sh[421]: Sending on   Socket/ens4\\r\\nNov 17 04:03:49 debian sh[421]: PRC: Soliciting for leases (INIT).\\r\\nNov 17 04:03:49 debian dhclient[421]: Sending on   Socket/ens4\\r\\nNov 17 04:03:49 debian sh[454]: ens4=ens4\\r\\nNov 17 04:03:49 debian systemd[1]: Starting GCE Workload Certificate refresh...\\r\\n         Starting \\u001b[0;1;39mGCE Workload Certificate refresh\\u001b[0m...\\r\\nNov 17 04:03:49 debian dhclient[421]: XMT: Solicit on ens4, interval 1040ms.\\r\\nNov 17 04:03:49 debian systemd[1]: Starting NSS cache refresh...\\r\\n         Starting \\u001b[0;1;39mNSS cache refresh\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mRaise network interfaces\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mNetwork\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mNetwork is Online\\u001b[0m.\\r\\nNov 17 04:03:49 debian systemd[1]: Finished Raise network interfaces.\\r\\nNov 17 04:03:49 debian systemd[1]: Reached target Network.\\r\\nNov 17 04:03:49 debian systemd[1]: Reached target Network is Online.\\r\\nNov 17 04:03:49 debian systemd[1]: Starting chrony, an NTP client/server...\\r\\n         Starting \\u001b[0;1;39mchrony, an NTP client/server\\u001b[0m...\\r\\nNov 17 04:03:49 debian systemd[1]: Starting Google Compute Engine Guest Agent...\\r\\n         Starting \\u001b[0;1;39mGoogle Compute Engine Guest Agent\\u001b[0m...\\r\\nNov 17 04:03:49 debian systemd[1]: Started Google OSConfig Agent.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mGoogle OSConfig Agent\\u001b[0m.\\r\\nNov 17 04:03:49 debian systemd[1]: Starting Google Compute Engine Shutdown Scripts...\\r\\n         Starting \\u001b[0;1;39mGoogle Compute Engine Shutdown Scripts\\u001b[0m...\\r\\nNov 17 04:03:49 debian systemd[1]: Starting Permit User Sessions...\\r\\n         Starting \\u001b[0;1;39mPermit User Sessions\\u001b[0m...\\r\\nNov 17 04:03:49 debian systemd[1]: Started Unattended Upgrades Shutdown.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mUnattended Upgrades Shutdown\\u001b[0m.\\r\\nNov 17 04:03:49 debian systemd[1]: Finished Google Compute Engine Shutdown Scripts.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mGoogle Compute Engine Shutdown Scripts\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mPermit User Sessions\\u001b[0m.\\r\\nNov 17 04:03:49 debian systemd[1]: Finished Permit User Sessions.\\r\\nNov 17 04:03:49 debian systemd[1]: Started Getty on tty1.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mGetty on tty1\\u001b[0m.\\r\\nNov 17 04:03:49 debian systemd[1]: Started Serial Getty on ttyS0.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mSerial Getty on ttyS0\\u001b[0m.\\r\\nNov 17 04:03:49 debian systemd[1]: Reached target Login Prompts.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mLogin Prompts\\u001b[0m.\\r\\nNov 17 04:03:50 debian chronyd[484]: chronyd version 4.0 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SIGND +ASYNCDNS +NTS +SECHASH +IPV6 -DEBUG)\\r\\nNov 17 04:03:50 debian google_oslogin_nss_cache[457]: oslogin_cache_refresh[457]: Refreshing passwd entry cache\\r\\nNov 17 04:03:50 debian chronyd[484]: Loaded seccomp filter\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mchrony, an NTP client/server\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mSystem Time Synchronized\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mDaily apt download activities\\u001b[0m.\\r\\nNov 17 04:03:50 debian systemd[1]: Started chrony, an NTP client/server.\\r\\nNov 17 04:03:50 debian systemd[1]: Reached target System Time Synchronized.\\r\\nNov 17 04:03:50 debian systemd[1]: Started Daily apt download activities.\\r\\nNov 17 04:03:50 debian systemd[1]: Started Daily apt upgrade and clean activities.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mDaily apt upgrade and clean activities\\u001b[0m.\\r\\nNov 17 04:03:50 debian systemd[1]: Started Periodic ext4 Online Metadata Check for All Filesystems.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mPeriodic ext4 Onli…ata Check for All Filesystems\\u001b[0m.\\r\\nNov 17 04:03:50 debian systemd[1]: Started Daily exim4-base housekeeping.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mDaily exim4-base housekeeping\\u001b[0m.\\r\\nNov 17 04:03:50 debian systemd[1]: Started Discard unused blocks once a week.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mDiscard unused blocks once a week\\u001b[0m.\\r\\nNov 17 04:03:50 debian systemd[1]: Started Daily rotation of log files.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mDaily rotation of log files\\u001b[0m.\\r\\nNov 17 04:03:50 debian systemd[1]: Started Daily man-db regeneration.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mDaily man-db regeneration\\u001b[0m.\\r\\nNov 17 04:03:50 debian systemd[1]: Reached target Timers.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mTimers\\u001b[0m.\\r\\nNov 17 04:03:50 debian systemd[1]: Starting LSB: exim Mail Transport Agent...\\r\\n Boot failed: not a bootable disk \\n        Starting \\u001b[0;1;39mLSB: exim Mail Transport Agent\\u001b[0m...\\r\\nNov 17 04:03:50 debian google_oslogin_nss_cache[457]: oslogin_cache_refresh[457]: Refreshing group entry cache\\r\\nNov 17 04:03:50 debian systemd[1]: google-oslogin-cache.service: Succeeded.\\r\\nNov 17 04:03:50 debian systemd[1]: Finished NSS cache refresh.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mNSS cache refresh\\u001b[0m.\\r\\nNov 17 04:03:50 debian dhclient[421]: XMT: Solicit on ens4, interval 2030ms.\\r\\nNov 17 04:03:50 debian exim4[489]: Starting MTA:\\r\\nNov 17 04:03:50 debian exim4[508]: /usr/sbin/update-exim4.conf: 154: cannot open /etc/mailname: No such file\\r\\nNov 17 04:03:51 debian gce_workload_cert_refresh[456]: 2023/11/17 04:03:51: Done\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mGCE Workload Certificate refresh\\u001b[0m.\\r\\nNov 17 04:03:51 debian systemd[1]: gce-workload-cert-refresh.service: Succeeded.\\r\\nNov 17 04:03:51 debian systemd[1]: Finished GCE Workload Certificate refresh.\\r\\nNov 17 04:03:52 debian google_guest_agent[473]: GCE Agent Started (version 20231115.00)\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mLSB: exim Mail Transport Agent\\u001b[0m.\\r\\nNov 17 04:03:52 debian exim4[489]:  exim4.\\r\\nNov 17 04:03:52 debian systemd[1]: Started LSB: exim Mail Transport Agent.\\r\\nNov 17 04:03:52 debian google_guest_agent[473]: Instance ID changed, running first-boot actions\\r\\nNov 17 04:03:52 debian OSConfigAgent[474]: 2023-11-17T04:03:52.5997Z OSConfigAgent Info: OSConfig Agent (version 20231010.00-g1) started.\\r\\nNov 17 04:03:52 debian dhclient[421]: XMT: Solicit on ens4, interval 4070ms.\\r\\nNov 17 04:03:53 debian google_guest_agent[473]: Starting the scheduler to run jobs\\r\\nNov 17 04:03:53 debian google_guest_agent[473]: Scheduler - start: []\\r\\nNov 17 04:03:53 debian google_guest_agent[473]: Skipping scheduling credential generation job, failed to reach client credentials endpoint(instance/credentials/certs) with error: error connecting to metadata server, status code: 404\\r\\nNov 17 04:03:53 debian google_guest_agent[473]: ERROR scheduler.go:177 Failed to schedule job MTLS_MDS_Credential_Boostrapper with error: ShouldEnable() returned false, cannot schedule job MTLS_MDS_Credential_Boostrapper\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mGoogle Compute Engine Guest Agent\\u001b[0m.\\r\\nNov 17 04:03:53 debian systemd[1]: Started Google Compute Engine Guest Agent.\\r\\nNov 17 04:03:53 debian systemd[1]: Starting Google Compute Engine Startup Scripts...\\r\\n         Starting \\u001b[0;1;39mGoogle Compute Engine Startup Scripts\\u001b[0m...\\r\\nNov 17 04:03:53 debian systemd[1]: Starting OpenBSD Secure Shell server...\\r\\n No space left on device \\n          Starting \\u001b[0;1;39mOpenBSD Secure Shell server\\u001b[0m...\\r\\nNov 17 04:03:53 debian google_guest_agent[473]: Starting the scheduler to run jobs\\r\\nNov 17 04:03:53 debian google_guest_agent[473]: Scheduling job: telemetryJobID\\r\\nNov 17 04:03:53 debian google_guest_agent[473]: Scheduling job \\\"telemetryJobID\\\" to run at 24.000000 hr interval\\r\\nNov 17 04:03:53 debian google_guest_agent[473]: Successfully scheduled job telemetryJobID\\r\\nNov 17 04:03:53 debian google_guest_agent[473]: Invoking job \\\"telemetryJobID\\\"\\r\\nNov 17 04:03:53 debian google_guest_agent[473]: Scheduler - added: [now 2023-11-17 04:03:53.201836482 +0000 UTC entry 1 next 2023-11-18 04:03:53 +0000 UTC]\\r\\nNov 17 04:03:53 debian dhclient[817]: Internet Systems Consortium DHCP Client 4.4.1\\r\\nNov 17 04:03:53 debian dhclient[817]: Copyright 2004-2018 Internet Systems Consortium.\\r\\nNov 17 04:03:53 debian dhclient[817]: All rights reserved.\\r\\nNov 17 04:03:53 debian dhclient[817]: For info, please visit https://www.isc.org/software/dhcp/\\r\\nNov 17 04:03:53 debian dhclient[817]: \\r\\nNov 17 04:03:53 debian dhclient[817]: Listening on Socket/ens4\\r\\nNov 17 04:03:53 debian dhclient[817]: Sending on   Socket/ens4\\r\\nNov 17 04:03:53 debian dhclient[817]: Created duid \\\"\\\\000\\\\001\\\\000\\\\001,\\\\351\\\\242\\\\251B\\\\001\\\\012\\\\232\\\\000\\\\016\\\".\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mOpenBSD Secure Shell server\\u001b[0m.\\r\\nNov 17 04:03:53 debian systemd[1]: Started OpenBSD Secure Shell server.\\r\\nNov 17 04:03:53 debian systemd[1]: Stopping User Login Management...\\r\\n         Stopping \\u001b[0;1;39mUser Login Management\\u001b[0m...\\r\\nNov 17 04:03:53 debian systemd[1]: systemd-logind.service: Succeeded.\\r\\nNov 17 04:03:53 debian systemd[1]: Stopped User Login Management.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Stopped \\u001b[0;1;39mUser Login Management\\u001b[0m.\\r\\nNov 17 04:03:53 debian systemd[1]: Starting Load Kernel Module drm...\\r\\n         Starting \\u001b[0;1;39mLoad Kernel Module drm\\u001b[0m...\\r\\nNov 17 04:03:53 debian google_guest_agent[473]: Created google sudoers file\\r\\nNov 17 04:03:53 debian google_guest_agent[473]: Creating user foo.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mLoad Kernel Module drm\\u001b[0m.\\r\\nNov 17 04:03:53 debian systemd[1]: modprobe@drm.service: Succeeded.\\r\\nNov 17 04:03:53 debian systemd[1]: Finished Load Kernel Module drm.\\r\\nNov 17 04:03:53 debian systemd[1]: Starting User Login Management...\\r\\n Authentication refused: bad ownership or modes for directory \\n         Starting \\u001b[0;1;39mUser Login Management\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mUser Login Management\\u001b[0m.\\r\\nNov 17 04:03:53 debian systemd[1]: Started User Login Management.\\r\\nNov 17 04:03:53 debian systemd[1]: Stopping Regular background program processing daemon...\\r\\n dial tcp 169.254.169.254:80: connect: network is unreachable \\n        Stopping \\u001b[0;1;39mRegular background program processing daemon\\u001b[0m...\\r\\nNov 17 04:03:53 debian systemd[1]: cron.service: Succeeded.\\r\\nNov 17 04:03:53 debian systemd[1]: Stopped Regular background program processing daemon.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Stopped \\u001b[0;1;39mRegular background program processing daemon\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mRegular background program processing daemon\\u001b[0m.\\r\\nNov 17 04:03:53 debian systemd[1]: Started Regular background program processing daemon.\\r\\nNov 17 04:03:53 debian google_metadata_script_runner[808]: Starting startup scripts (version dev).\\r\\nNov 17 04:03:53 debian google_metadata_script_runner[808]: Found startup-script in metadata.\\r\\nNov 17 04:03:53 debian systemd[1]: Reloading OpenBSD Secure Shell server.\\r\\nNov 17 04:03:53 debian systemd[1]: google-guest-agent.service: Got notification message from PID 848, but reception only permitted for main PID 473\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Stopped \\u001b[0;1;39mOpenBSD Secure Shell server\\u001b[0m.\\r\\nNov 17 04:03:53 debian systemd[1]: ssh.service: Control process exited, code=killed, status=15/TERM\\r\\nNov 17 04:03:53 debian systemd[1]: ssh.service: Failed with result 'signal'.\\r\\nNov 17 04:03:53 debian systemd[1]: Stopped OpenBSD Secure Shell server.\\r\\nNov 17 04:03:53 debian google_guest_agent[473]: ERROR oslogin.go:158 Error reloading service: Job for ssh.service canceled..\\r\\nNov 17 04:03:53 debian google_guest_agent[473]: Updating keys for user foo.\\r\\nNov 17 04:03:53 debian systemd[1]: Starting OpenBSD Secure Shell server...\\r\\n Corruption of in-memory data detected. Shutting down filesystem \\n        Starting \\u001b[0;1;39mOpenBSD Secure Shell server\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mOpenBSD Secure Shell server\\u001b[0m.\\r\\nNov 17 04:03:53 debian systemd[1]: Started OpenBSD Secure Shell server.\\r\\nNov 17 04:03:54 debian chronyd[484]: Selected source 169.254.169.254 (metadata.google.internal)\\r\\n\\r\\r\\nDebian GNU/Linux 11 faulty-linux-ssh ttyS0\\r\\n\\r\\nfaulty-linux-ssh login: Nov 17 04:03:56 debian dhclient[421]: XMT: Solicit on ens4, interval 8010ms.\\r\\nNov 17 04:04:04 debian dhclient[421]: XMT: Solicit on ens4, interval 15860ms.\\r\\nNov 17 04:04:20 debian dhclient[421]: XMT: Solicit on ens4, interval 31990ms.\\r\\nNov 17 04:04:52 debian dhclient[421]: XMT: Solicit on ens4, interval 62240ms.\\r\\nNov 17 04:05:55 debian dhclient[421]: XMT: Solicit on ens4, interval 128800ms.\\r\\nNov 17 04:08:04 debian dhclient[421]: XMT: Solicit on ens4, interval 117650ms.\\r\\nNov 17 04:10:01 debian dhclient[421]: XMT: Solicit on ens4, interval 127600ms.\\r\\nNov 17 04:12:09 debian dhclient[421]: XMT: Solicit on ens4, interval 123590ms.\\r\\nNov 17 04:13:49 debian systemd[1]: Starting GCE Workload Certificate refresh...\\r\\nNov 17 04:13:50 debian gce_workload_cert_refresh[895]: 2023/11/17 04:13:50: Done\\r\\nNov 17 04:13:50 debian systemd[1]: gce-workload-cert-refresh.service: Succeeded.\\r\\nNov 17 04:13:50 debian systemd[1]: Finished GCE Workload Certificate refresh.\\r\\nNov 17 04:14:13 debian dhclient[421]: XMT: Solicit on ens4, interval 118200ms.\\r\\nNov 17 04:16:11 debian dhclient[421]: XMT: Solicit on ens4, interval 109360ms.\\r\\nNov 17 04:18:01 debian dhclient[421]: XMT: Solicit on ens4, interval 128660ms.\\r\\nNov 17 04:18:45 debian systemd[1]: Starting Cleanup of Temporary Directories...\\r\\nNov 17 04:18:45 debian systemd[1]: systemd-tmpfiles-clean.service: Succeeded.\\r\\nNov 17 04:18:45 debian systemd[1]: Finished Cleanup of Temporary Directories.\\r\\nNov 17 04:20:09 debian dhclient[421]: XMT: Solicit on ens4, interval 115450ms.\\r\\nNov 17 04:22:05 debian dhclient[421]: XMT: Solicit on ens4, interval 129250ms.\\r\\nNov 17 04:23:50 debian systemd[1]: Starting GCE Workload Certificate refresh...\\r\\nNov 17 04:23:50 debian gce_workload_cert_refresh[910]: 2023/11/17 04:23:50: Done\\r\\nNov 17 04:23:50 debian systemd[1]: gce-workload-cert-refresh.service: Succeeded.\\r\\nNov 17 04:23:50 debian systemd[1]: Finished GCE Workload Certificate refresh.\\r\\nNov 17 04:24:14 debian dhclient[421]: XMT: Solicit on ens4, interval 124470ms.\\r\\n\",\n  \"start\": \"0\",\n  \"next\": \"103446\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/faulty-linux-ssh/serialPortOutput\"\n}\n"
  },
  {
    "path": "test-data/gce4/json-dumps/compute-serial-port-output-faulty-windows-ssh.json",
    "content": "{\n  \"kind\": \"compute#serialPortOutput\",\n  \"contents\": \"empty\\nempty\",\n  \"start\": \"0\",\n  \"next\": \"311872\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-a/instances/faulty-windows-ssh/serialPortOutput\"\n}\n"
  },
  {
    "path": "test-data/gce4/json-dumps/compute-serial-port-output-valid-linux-ssh.json",
    "content": "{\n  \"kind\": \"compute#serialPortOutput\",\n  \"contents\": \"\\u001b[2J\\u001b[01;01H\\u001b[=3h\\u001b[2J\\u001b[01;01H\\u001b[2J\\u001b[01;01H\\u001b[=3h\\u001b[2J\\u001b[01;01HCSM BBS Table full.\\r\\nBdsDxe: loading Boot0001 \\\"UEFI Google PersistentDisk \\\" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\\r\\nBdsDxe: starting Boot0001 \\\"UEFI Google PersistentDisk \\\" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\\r\\n\\r\\nUEFI: Attempting to start image.\\r\\nDescription: UEFI Google PersistentDisk \\r\\nFilePath: PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\\r\\nOptionNumber: 1.\\r\\n\\r\\n\\u001b[0m\\u001b[30m\\u001b[47mWelcome to GRUB!\\n\\r\\n\\r\\u001b[0m\\u001b[37m\\u001b[40m\\u001b[0m\\u001b[30m\\u001b[40m\\u001b[2J\\u001b[01;01H\\u001b[0m\\u001b[37m\\u001b[40m\\u001b[H\\u001b[J\\u001b[1;1H\\u001b[H\\u001b[J\\u001b[1;1H\\u001b[0m\\u001b[30m\\u001b[40m\\u001b[2J\\u001b[01;01H\\u001b[0m\\u001b[37m\\u001b[40m    Booting `Debian GNU/Linux'Booting `Debian GNU/Linux'\\n\\r\\n\\r\\n\\r\\n\\rLoading Linux 5.10.0-26-cloud-amd64 ...Loading Linux 5.10.0-26-cloud-amd64 ...\\n\\r\\n\\rLoading initial ramdisk ...Loading initial ramdisk ...\\n\\r\\n\\rerror: no suitable video mode found.\\n\\rerror: no suitable video mode found.\\n\\rBooting in blind modeBooting in blind mode\\n\\r\\n\\r[    0.000000] Linux version 5.10.0-26-cloud-amd64 (debian-kernel@lists.debian.org) (gcc-10 (Debian 10.2.1-6) 10.2.1 20210110, GNU ld (GNU Binutils for Debian) 2.35.2) #1 SMP Debian 5.10.197-1 (2023-09-29)\\r\\n[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-5.10.0-26-cloud-amd64 root=UUID=e6fe3fcb-2478-4e7e-8072-4ced46dceac5 ro console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0 intel_iommu=off\\r\\n[    0.000000] BIOS-provided physical RAM map:\\r\\n[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x0000000000000fff] reserved\\r\\n[    0.000000] BIOS-e820: [mem 0x0000000000001000-0x0000000000054fff] usable\\r\\n[    0.000000] BIOS-e820: [mem 0x0000000000055000-0x000000000005ffff] reserved\\r\\n[    0.000000] BIOS-e820: [mem 0x0000000000060000-0x0000000000097fff] usable\\r\\n[    0.000000] BIOS-e820: [mem 0x0000000000098000-0x000000000009ffff] reserved\\r\\n[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x0000000025eecfff] usable\\r\\n[    0.000000] BIOS-e820: [mem 0x0000000025eed000-0x0000000025fecfff] reserved\\r\\n[    0.000000] BIOS-e820: [mem 0x0000000025fed000-0x00000000260ecfff] type 20\\r\\n[    0.000000] BIOS-e820: [mem 0x00000000260ed000-0x000000002616cfff] reserved\\r\\n[    0.000000] BIOS-e820: [mem 0x000000002616d000-0x000000002617efff] ACPI data\\r\\n[    0.000000] BIOS-e820: [mem 0x000000002617f000-0x00000000261fefff] ACPI NVS\\r\\n[    0.000000] BIOS-e820: [mem 0x00000000261ff000-0x00000000265dffff] usable\\r\\n[    0.000000] BIOS-e820: [mem 0x00000000265e0000-0x00000000265fffff] reserved\\r\\n[    0.000000] printk: bootconsole [earlyser0] enabled\\r\\n[    0.000000] NX (Execute Disable) protection: active\\r\\n[    0.000000] efi: EFI v2.70 by EDK II\\r\\n[    0.000000] efi: TPMFinalLog=0x261f7000 ACPI=0x2617e000 ACPI 2.0=0x2617e014 SMBIOS=0x25fca000 MEMATTR=0x249a0018 \\r\\n[    0.000000] secureboot: Secure boot disabled\\r\\n[    0.000000] SMBIOS 2.4 present.\\r\\n[    0.000000] DMI: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/09/2023\\r\\n[    0.000000] Hypervisor detected: KVM\\r\\n[    0.000000] kvm-clock: Using msrs 4b564d01 and 4b564d00\\r\\n[    0.000000] kvm-clock: cpu 0, msr c201001, primary cpu clock\\r\\n[    0.000000] kvm-clock: using sched offset of 6456270974 cycles\\r\\n[    0.000734] clocksource: kvm-clock: mask: 0xffffffffffffffff max_cycles: 0x1cd42e4dffb, max_idle_ns: 881590591483 ns\\r\\n[    0.002884] tsc: Detected 2200.158 MHz processor\\r\\n[    0.003587] last_pfn = 0x265e0 max_arch_pfn = 0x400000000\\r\\n[    0.004363] x86/PAT: Configuration [0-7]: WB  WC  UC- UC  WB  WP  UC- WT  \\r\\nMemory KASLR using RDRAND RDTSC...\\r\\n[    0.005841] Using GB pages for direct mapping\\r\\n[    0.006760] RAMDISK: [mem 0x2327f000-0x24000fff]\\r\\n[    0.007361] ACPI: Early table checksum verification disabled\\r\\n[    0.008083] ACPI: RSDP 0x000000002617E014 000024 (v02 Google)\\r\\n[    0.008863] ACPI: XSDT 0x000000002617D0E8 00005C (v01 Google GOOGFACP 00000001      01000013)\\r\\n[    0.010056] ACPI: FACP 0x0000000026178000 0000F4 (v02 Google GOOGFACP 00000001 GOOG 00000001)\\r\\n[    0.011203] ACPI: DSDT 0x0000000026179000 001A64 (v01 Google GOOGDSDT 00000001 GOOG 00000001)\\r\\n[    0.012333] ACPI: FACS 0x00000000261F2000 000040\\r\\n[    0.012966] ACPI: SSDT 0x000000002617C000 000316 (v02 GOOGLE Tpm2Tabl 00001000 INTL 20211217)\\r\\n[    0.014054] ACPI: TPM2 0x000000002617B000 000034 (v04 GOOGLE          00000001 GOOG 00000001)\\r\\n[    0.015175] ACPI: SRAT 0x0000000026177000 0000B8 (v03 Google GOOGSRAT 00000001 GOOG 00000001)\\r\\n[    0.016277] ACPI: APIC 0x0000000026176000 00006E (v05 Google GOOGAPIC 00000001 GOOG 00000001)\\r\\n[    0.017366] ACPI: SSDT 0x0000000026175000 00091F (v01 Google GOOGSSDT 00000001 GOOG 00000001)\\r\\n[    0.018500] ACPI: WAET 0x0000000026174000 000028 (v01 Google GOOGWAET 00000001 GOOG 00000001)\\r\\n[    0.019702] ACPI: Reserving FACP table memory at [mem 0x26178000-0x261780f3]\\r\\n[    0.020615] ACPI: Reserving DSDT table memory at [mem 0x26179000-0x2617aa63]\\r\\n[    0.021530] ACPI: Reserving FACS table memory at [mem 0x261f2000-0x261f203f]\\r\\n[    0.022454] ACPI: Reserving SSDT table memory at [mem 0x2617c000-0x2617c315]\\r\\n[    0.023355] ACPI: Reserving TPM2 table memory at [mem 0x2617b000-0x2617b033]\\r\\n[    0.024340] ACPI: Reserving SRAT table memory at [mem 0x26177000-0x261770b7]\\r\\n[    0.025411] ACPI: Reserving APIC table memory at [mem 0x26176000-0x2617606d]\\r\\n[    0.026702] ACPI: Reserving SSDT table memory at [mem 0x26175000-0x2617591e]\\r\\n[    0.027613] ACPI: Reserving WAET table memory at [mem 0x26174000-0x26174027]\\r\\n[    0.028637] SRAT: PXM 0 -\\u003e APIC 0x00 -\\u003e Node 0\\r\\n[    0.029245] ACPI: SRAT: Node 0 PXM 0 [mem 0x00000000-0x0009ffff]\\r\\n[    0.030009] ACPI: SRAT: Node 0 PXM 0 [mem 0x00100000-0x265fffff]\\r\\n[    0.030872] NUMA: Node 0 [mem 0x00000000-0x0009ffff] + [mem 0x00100000-0x265dffff] -\\u003e [mem 0x00000000-0x265dffff]\\r\\n[    0.032225] NODE_DATA(0) allocated [mem 0x26498000-0x264c1fff]\\r\\n[    0.033370] Zone ranges:\\r\\n[    0.033725]   DMA      [mem 0x0000000000001000-0x0000000000ffffff]\\r\\n[    0.034554]   DMA32    [mem 0x0000000001000000-0x00000000265dffff]\\r\\n[    0.035451]   Normal   empty\\r\\n[    0.035842]   Device   empty\\r\\n[    0.036232] Movable zone start for each node\\r\\n[    0.036778] Early memory node ranges\\r\\n[    0.037243]   node   0: [mem 0x0000000000001000-0x0000000000054fff]\\r\\n[    0.038094]   node   0: [mem 0x0000000000060000-0x0000000000097fff]\\r\\n[    0.038947]   node   0: [mem 0x0000000000100000-0x0000000025eecfff]\\r\\n[    0.039805]   node   0: [mem 0x00000000261ff000-0x00000000265dffff]\\r\\n[    0.040633] Initmem setup node 0 [mem 0x0000000000001000-0x00000000265dffff]\\r\\n[    0.041989] On node 0, zone DMA: 1 pages in unavailable ranges\\r\\n[    0.041990] On node 0, zone DMA: 11 pages in unavailable ranges\\r\\n[    0.042798] On node 0, zone DMA: 104 pages in unavailable ranges\\r\\n[    0.045104] On node 0, zone DMA32: 786 pages in unavailable ranges\\r\\n[    0.046017] On node 0, zone DMA32: 6688 pages in unavailable ranges\\r\\n[    0.047186] ACPI: PM-Timer IO Port: 0xb008\\r\\n[    0.048565] ACPI: LAPIC_NMI (acpi_id[0xff] dfl dfl lint[0x1])\\r\\n[    0.049404] IOAPIC[0]: apic_id 0, version 17, address 0xfec00000, GSI 0-23\\r\\n[    0.050293] ACPI: INT_SRC_OVR (bus 0 bus_irq 5 global_irq 5 high level)\\r\\n[    0.051137] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)\\r\\n[    0.051992] ACPI: INT_SRC_OVR (bus 0 bus_irq 10 global_irq 10 high level)\\r\\n[    0.052890] ACPI: INT_SRC_OVR (bus 0 bus_irq 11 global_irq 11 high level)\\r\\n[    0.053812] Using ACPI (MADT) for SMP configuration information\\r\\n[    0.054586] smpboot: Allowing 1 CPUs, 0 hotplug CPUs\\r\\n[    0.055292] PM: hibernation: Registered nosave memory: [mem 0x00000000-0x00000fff]\\r\\n[    0.056302] PM: hibernation: Registered nosave memory: [mem 0x00055000-0x0005ffff]\\r\\n[    0.057269] PM: hibernation: Registered nosave memory: [mem 0x00098000-0x0009ffff]\\r\\n[    0.058272] PM: hibernation: Registered nosave memory: [mem 0x000a0000-0x000fffff]\\r\\n[    0.059273] PM: hibernation: Registered nosave memory: [mem 0x25eed000-0x25fecfff]\\r\\n[    0.060238] PM: hibernation: Registered nosave memory: [mem 0x25fed000-0x260ecfff]\\r\\n[    0.061203] PM: hibernation: Registered nosave memory: [mem 0x260ed000-0x2616cfff]\\r\\n[    0.062169] PM: hibernation: Registered nosave memory: [mem 0x2616d000-0x2617efff]\\r\\n[    0.063136] PM: hibernation: Registered nosave memory: [mem 0x2617f000-0x261fefff]\\r\\n[    0.064110] [mem 0x26600000-0xffffffff] available for PCI devices\\r\\n[    0.064881] Booting paravirtualized kernel on KVM\\r\\n[    0.065481] clocksource: refined-jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645519600211568 ns\\r\\n[    0.071199] setup_percpu: NR_CPUS:8192 nr_cpumask_bits:1 nr_cpu_ids:1 nr_node_ids:1\\r\\n[    0.072527] percpu: Embedded 63 pages/cpu s221184 r8192 d28672 u2097152\\r\\n[    0.073444] kvm-guest: PV spinlocks disabled, single CPU\\r\\n[    0.074171] Built 1 zonelists, mobility grouping on.  Total pages: 150673\\r\\n[    0.075108] Policy zone: DMA32\\r\\n[    0.075690] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-5.10.0-26-cloud-amd64 root=UUID=e6fe3fcb-2478-4e7e-8072-4ced46dceac5 ro console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0 intel_iommu=off\\r\\n[    0.078655] DMAR: IOMMU disabled\\r\\n[    0.079286] Dentry cache hash table entries: 131072 (order: 8, 1048576 bytes, linear)\\r\\n[    0.080546] Inode-cache hash table entries: 65536 (order: 7, 524288 bytes, linear)\\r\\n[    0.081583] mem auto-init: stack:off, heap alloc:on, heap free:off\\r\\n[    0.084292] Memory: 208948K/625000K available (12296K kernel code, 2552K rwdata, 6956K rodata, 2468K init, 3724K bss, 103652K reserved, 0K cma-reserved)\\r\\n[    0.086299] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1\\r\\n[    0.087268] Kernel/User page tables isolation: enabled\\r\\nPoking KASLR using RDRAND RDTSC...\\r\\n[    0.088415] ftrace: allocating 33918 entries in 133 pages\\r\\n[    0.108935] ftrace: allocated 133 pages with 3 groups\\r\\n[    0.110330] rcu: Hierarchical RCU implementation.\\r\\n[    0.110974] rcu: \\tRCU restricting CPUs from NR_CPUS=8192 to nr_cpu_ids=1.\\r\\n[    0.111865] \\tRude variant of Tasks RCU enabled.\\r\\n[    0.112441] \\tTracing variant of Tasks RCU enabled.\\r\\n[    0.113053] rcu: RCU calculated value of scheduler-enlistment delay is 25 jiffies.\\r\\n[    0.114064] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=1\\r\\n[    0.119409] NR_IRQS: 524544, nr_irqs: 256, preallocated irqs: 16\\r\\n[    0.120483] random: crng init done\\r\\n[    0.120945] Console: colour dummy device 80x25\\r\\n[    0.121763] printk: console [tty0] enabled\\r\\n[    0.122413] printk: console [ttyS0] enabled\\r\\n[    0.122413] printk: console [ttyS0] enabled\\r\\n[    0.123526] printk: bootconsole [earlyser0] disabled\\r\\n[    0.123526] printk: bootconsole [earlyser0] disabled\\r\\n[    0.124856] ACPI: Core revision 20200925\\r\\n[    0.125499] APIC: Switch to symmetric I/O mode setup\\r\\n[    0.126669] x2apic enabled\\r\\n[    0.129453] Switched APIC routing to physical x2apic.\\r\\n[    0.134129] ..TIMER: vector=0x30 apic1=0 pin1=0 apic2=-1 pin2=-1\\r\\n[    0.135170] clocksource: tsc-early: mask: 0xffffffffffffffff max_cycles: 0x1fb6c80a799, max_idle_ns: 440795272342 ns\\r\\n[    0.136571] Calibrating delay loop (skipped) preset value.. 4400.31 BogoMIPS (lpj=8800632)\\r\\n[    0.140680] Last level iTLB entries: 4KB 64, 2MB 8, 4MB 8\\r\\n[    0.141412] Last level dTLB entries: 4KB 64, 2MB 0, 4MB 0, 1GB 4\\r\\n[    0.142247] Spectre V1 : Mitigation: usercopy/swapgs barriers and __user pointer sanitization\\r\\n[    0.143390] Spectre V2 : Mitigation: IBRS\\r\\n[    0.143939] Spectre V2 : Spectre v2 / SpectreRSB mitigation: Filling RSB on context switch\\r\\n[    0.144568] Spectre V2 : Spectre v2 / SpectreRSB : Filling RSB on VMEXIT\\r\\n[    0.145466] RETBleed: Mitigation: IBRS\\r\\n[    0.145988] Spectre V2 : mitigation: Enabling conditional Indirect Branch Prediction Barrier\\r\\n[    0.147108] Speculative Store Bypass: Mitigation: Speculative Store Bypass disabled via prctl and seccomp\\r\\n[    0.148575] MDS: Mitigation: Clear CPU buffers\\r\\n[    0.149183] TAA: Mitigation: Clear CPU buffers\\r\\n[    0.149789] MMIO Stale Data: Vulnerable: Clear CPU buffers attempted, no microcode\\r\\n[    0.150817] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'\\r\\n[    0.151849] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'\\r\\n[    0.152568] x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers'\\r\\n[    0.153445] x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]:  256\\r\\n[    0.154319] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.\\r\\n[    0.174317] Freeing SMP alternatives memory: 32K\\r\\n[    0.176616] pid_max: default: 32768 minimum: 301\\r\\n[    0.189921] LSM: Security Framework initializing\\r\\n[    0.190777] Yama: disabled by default; enable with sysctl kernel.yama.*\\r\\n[    0.191718] AppArmor: AppArmor initialized\\r\\n[    0.192315] TOMOYO Linux initialized\\r\\n[    0.192585] Mount-cache hash table entries: 2048 (order: 2, 16384 bytes, linear)\\r\\n[    0.193586] Mountpoint-cache hash table entries: 2048 (order: 2, 16384 bytes, linear)\\r\\n[    0.303707] smpboot: CPU0: Intel(R) Xeon(R) CPU @ 2.20GHz (family: 0x6, model: 0x4f, stepping: 0x0)\\r\\n[    0.304567] Performance Events: unsupported p6 CPU model 79 no PMU driver, software events only.\\r\\n[    0.304567] rcu: Hierarchical SRCU implementation.\\r\\n[    0.304567] NMI watchdog: Perf NMI watchdog permanently disabled\\r\\n[    0.304607] smp: Bringing up secondary CPUs ...\\r\\n[    0.305254] smp: Brought up 1 node, 1 CPU\\r\\n[    0.305804] smpboot: Max logical packages: 1\\r\\n[    0.306388] smpboot: Total of 1 processors activated (4400.31 BogoMIPS)\\r\\n[    0.309894] node 0 deferred pages initialised in 4ms\\r\\n[    0.310840] devtmpfs: initialized\\r\\n[    0.311414] x86/mm: Memory block size: 128MB\\r\\n[    0.312326] PM: Registering ACPI NVS region [mem 0x2617f000-0x261fefff] (524288 bytes)\\r\\n[    0.312624] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns\\r\\n[    0.313984] futex hash table entries: 256 (order: 2, 16384 bytes, linear)\\r\\n[    0.315079] NET: Registered protocol family 16\\r\\n[    0.316708] DMA: preallocated 128 KiB GFP_KERNEL pool for atomic allocations\\r\\n[    0.317887] DMA: preallocated 128 KiB GFP_KERNEL|GFP_DMA pool for atomic allocations\\r\\n[    0.319088] DMA: preallocated 128 KiB GFP_KERNEL|GFP_DMA32 pool for atomic allocations\\r\\n[    0.320255] audit: initializing netlink subsys (disabled)\\r\\n[    0.320680] thermal_sys: Registered thermal governor 'fair_share'\\r\\n[    0.320681] thermal_sys: Registered thermal governor 'bang_bang'\\r\\n[    0.321534] thermal_sys: Registered thermal governor 'step_wise'\\r\\n[    0.322340] thermal_sys: Registered thermal governor 'user_space'\\r\\n[    0.323166] thermal_sys: Registered thermal governor 'power_allocator'\\r\\n[    0.324578] audit: type=2000 audit(1700193823.829:1): state=initialized audit_enabled=0 res=1\\r\\n[    0.326750] cpuidle: using governor ladder\\r\\n[    0.327347] cpuidle: using governor menu\\r\\n[    0.327968] ACPI: bus type PCI registered\\r\\n[    0.328539] acpiphp: ACPI Hot Plug PCI Controller Driver version: 0.5\\r\\n[    0.328668] PCI: Using configuration type 1 for base access\\r\\n[    0.330144] Kprobes globally optimized\\r\\n[    0.330823] HugeTLB registered 1.00 GiB page size, pre-allocated 0 pages\\r\\n[    0.332570] HugeTLB registered 2.00 MiB page size, pre-allocated 0 pages\\r\\n[    0.460132] ACPI: Added _OSI(Module Device)\\r\\n[    0.460570] ACPI: Added _OSI(Processor Device)\\r\\n[    0.461236] ACPI: Added _OSI(3.0 _SCP Extensions)\\r\\n[    0.461875] ACPI: Added _OSI(Processor Aggregator Device)\\r\\n[    0.462629] ACPI: Added _OSI(Linux-Dell-Video)\\r\\n[    0.463234] ACPI: Added _OSI(Linux-Lenovo-NV-HDMI-Audio)\\r\\n[    0.463951] ACPI: Added _OSI(Linux-HPI-Hybrid-Graphics)\\r\\n[    0.465493] ACPI: 3 ACPI AML tables successfully acquired and loaded\\r\\n[    0.467274] ACPI: Interpreter enabled\\r\\n[    0.467821] ACPI: (supports S0 S3 S4 S5)\\r\\n[    0.468579] ACPI: Using IOAPIC for interrupt routing\\r\\n[    0.469275] PCI: Using host bridge windows from ACPI; if necessary, use \\\"pci=nocrs\\\" and report a bug\\r\\n[    0.470653] ACPI: Enabled 16 GPEs in block 00 to 0F\\r\\n[    0.473239] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff])\\r\\n[    0.474122] acpi PNP0A03:00: _OSC: OS supports [ASPM ClockPM Segments MSI HPX-Type3]\\r\\n[    0.475162] acpi PNP0A03:00: fail to add MMCONFIG information, can't access extended PCI configuration space under this bridge.\\r\\n[    0.477146] PCI host bridge to bus 0000:00\\r\\n[    0.477709] pci_bus 0000:00: root bus resource [io  0x0000-0x0cf7 window]\\r\\n[    0.478715] pci_bus 0000:00: root bus resource [io  0x0d00-0xffff window]\\r\\n[    0.479663] pci_bus 0000:00: root bus resource [mem 0x000a0000-0x000bffff window]\\r\\n[    0.480578] pci_bus 0000:00: root bus resource [mem 0x80000000-0xfebfefff window]\\r\\n[    0.481576] pci_bus 0000:00: root bus resource [bus 00-ff]\\r\\n[    0.482365] pci 0000:00:00.0: [8086:1237] type 00 class 0x060000\\r\\n[    0.486019] pci 0000:00:01.0: [8086:7110] type 00 class 0x060100\\r\\n[    0.500825] pci 0000:00:01.3: [8086:7113] type 00 class 0x068000\\r\\n[    0.519681] pci 0000:00:01.3: quirk: [io  0xb000-0xb03f] claimed by PIIX4 ACPI\\r\\n[    0.520874] pci 0000:00:03.0: [1af4:1004] type 00 class 0x000000\\r\\n[    0.528575] pci 0000:00:03.0: reg 0x10: [io  0xc040-0xc07f]\\r\\n[    0.533672] pci 0000:00:03.0: reg 0x14: [mem 0x80000000-0x8000007f]\\r\\n[    0.548861] pci 0000:00:04.0: [1af4:1000] type 00 class 0x020000\\r\\n[    0.555665] pci 0000:00:04.0: reg 0x10: [io  0xc000-0xc03f]\\r\\n[    0.560572] pci 0000:00:04.0: reg 0x14: [mem 0x80002000-0x8000203f]\\r\\n[    0.573906] pci 0000:00:05.0: [1af4:1005] type 00 class 0x00ff00\\r\\n[    0.580574] pci 0000:00:05.0: reg 0x10: [io  0xc080-0xc09f]\\r\\n[    0.586726] pci 0000:00:05.0: reg 0x14: [mem 0x80001000-0x8000103f]\\r\\n[    0.601296] ACPI: PCI Interrupt Link [LNKA] (IRQs 5 *10 11)\\r\\n[    0.603312] ACPI: PCI Interrupt Link [LNKB] (IRQs 5 *10 11)\\r\\n[    0.605636] ACPI: PCI Interrupt Link [LNKC] (IRQs 5 10 *11)\\r\\n[    0.607598] ACPI: PCI Interrupt Link [LNKD] (IRQs 5 10 *11)\\r\\n[    0.611697] ACPI: PCI Interrupt Link [LNKS] (IRQs *9)\\r\\n[    0.612813] iommu: Default domain type: Translated \\r\\n[    0.613589] vgaarb: loaded\\r\\n[    0.614061] Registered efivars operations\\r\\n[    0.614787] NetLabel: Initializing\\r\\n[    0.615327] NetLabel:  domain hash size = 128\\r\\n[    0.615923] NetLabel:  protocols = UNLABELED CIPSOv4 CALIPSO\\r\\n[    0.616587] NetLabel:  unlabeled traffic allowed by default\\r\\n[    0.617348] PCI: Using ACPI for IRQ routing\\r\\n[    0.618056] clocksource: Switched to clocksource kvm-clock\\r\\n[    0.628891] VFS: Disk quotas dquot_6.6.0\\r\\n[    0.629490] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)\\r\\n[    0.630665] AppArmor: AppArmor Filesystem Enabled\\r\\n[    0.631324] pnp: PnP ACPI init\\r\\n[    0.632174] pnp: PnP ACPI: found 7 devices\\r\\n[    0.638068] clocksource: acpi_pm: mask: 0xffffff max_cycles: 0xffffff, max_idle_ns: 2085701024 ns\\r\\n[    0.639390] NET: Registered protocol family 2\\r\\n[    0.640279] IP idents hash table entries: 16384 (order: 5, 131072 bytes, linear)\\r\\n[    0.642617] tcp_listen_portaddr_hash hash table entries: 512 (order: 1, 8192 bytes, linear)\\r\\n[    0.643878] TCP established hash table entries: 8192 (order: 4, 65536 bytes, linear)\\r\\n[    0.644963] TCP bind hash table entries: 8192 (order: 5, 131072 bytes, linear)\\r\\n[    0.645946] TCP: Hash tables configured (established 8192 bind 8192)\\r\\n[    0.647263] UDP hash table entries: 512 (order: 2, 16384 bytes, linear)\\r\\n[    0.648178] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes, linear)\\r\\n[    0.649145] NET: Registered protocol family 1\\r\\n[    0.649746] NET: Registered protocol family 44\\r\\n[    0.650360] pci_bus 0000:00: resource 4 [io  0x0000-0x0cf7 window]\\r\\n[    0.651189] pci_bus 0000:00: resource 5 [io  0x0d00-0xffff window]\\r\\n[    0.652018] pci_bus 0000:00: resource 6 [mem 0x000a0000-0x000bffff window]\\r\\n[    0.653023] pci_bus 0000:00: resource 7 [mem 0x80000000-0xfebfefff window]\\r\\n[    0.654013] pci 0000:00:00.0: Limiting direct PCI/PCI transfers\\r\\n[    0.654965] PCI: CLS 0 bytes, default 64\\r\\n[    0.655545] Trying to unpack rootfs image as initramfs...\\r\\n[    0.868747] Freeing initrd memory: 13832K\\r\\n[    0.869409] clocksource: tsc: mask: 0xffffffffffffffff max_cycles: 0x1fb6c80a799, max_idle_ns: 440795272342 ns\\r\\n[    0.870790] clocksource: Switched to clocksource tsc\\r\\n[    0.871684] Initialise system trusted keyrings\\r\\n[    0.872370] Key type blacklist registered\\r\\n[    0.872996] workingset: timestamp_bits=36 max_order=18 bucket_order=0\\r\\n[    0.874768] zbud: loaded\\r\\n[    0.875451] Key type asymmetric registered\\r\\n[    0.876015] Asymmetric key parser 'x509' registered\\r\\n[    0.876717] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 252)\\r\\n[    0.877753] io scheduler mq-deadline registered\\r\\n[    0.878944] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled\\r\\n[    0.879891] 00:03: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A\\r\\n[    0.881103] 00:04: ttyS1 at I/O 0x2f8 (irq = 3, base_baud = 115200) is a 16550A\\r\\n[    0.882343] 00:05: ttyS2 at I/O 0x3e8 (irq = 6, base_baud = 115200) is a 16550A\\r\\n[    0.883609] 00:06: ttyS3 at I/O 0x2e8 (irq = 7, base_baud = 115200) is a 16550A\\r\\n[    0.884960] i8042: PNP: PS/2 Controller [PNP0303:KBD,PNP0f13:MOU] at 0x60,0x64 irq 1,12\\r\\n[    0.886134] i8042: Warning: Keylock active\\r\\n[    0.888083] serio: i8042 KBD port at 0x60,0x64 irq 1\\r\\n[    0.888821] serio: i8042 AUX port at 0x60,0x64 irq 12\\r\\n[    0.889640] rtc_cmos 00:00: RTC can wake from S4\\r\\n[    0.890965] rtc_cmos 00:00: registered as rtc0\\r\\n[    0.891673] rtc_cmos 00:00: setting system clock to 2023-11-17T04:03:44 UTC (1700193824)\\r\\n[    0.892826] rtc_cmos 00:00: alarms up to one day, 114 bytes nvram\\r\\n[    0.893666] intel_pstate: CPU model not supported\\r\\n[    0.894500] NET: Registered protocol family 10\\r\\n[    0.902476] Segment Routing with IPv6\\r\\n[    0.903051] mip6: Mobile IPv6\\r\\n[    0.903490] NET: Registered protocol family 17\\r\\n[    0.904345] IPI shorthand broadcast: enabled\\r\\n[    0.904948] sched_clock: Marking stable (892139515, 12093408)-\\u003e(906097741, -1864818)\\r\\n[    0.906042] registered taskstats version 1\\r\\n[    0.906630] Loading compiled-in X.509 certificates\\r\\n[    0.939254] Loaded X.509 cert 'Debian Secure Boot CA: 6ccece7e4c6c0d1f6149f3dd27dfcc5cbb419ea1'\\r\\n[    0.940959] Loaded X.509 cert 'Debian Secure Boot Signer 2022 - linux: 14011249c2675ea8e5148542202005810584b25f'\\r\\n[    0.942356] Key type .fscrypt registered\\r\\n[    0.942899] Key type fscrypt-provisioning registered\\r\\n[    0.943613] AppArmor: AppArmor sha1 policy hashing enabled\\r\\n[    0.945910] Freeing unused decrypted memory: 2036K\\r\\n[    0.947243] Freeing unused kernel image (initmem) memory: 2468K\\r\\n[    0.956128] Write protecting the kernel read-only data: 22528k\\r\\n[    0.957663] Freeing unused kernel image (text/rodata gap) memory: 2036K\\r\\n[    0.958870] Freeing unused kernel image (rodata/data gap) memory: 1236K\\r\\n[    0.960268] x86/mm: Checked W+X mappings: passed, no W+X pages found.\\r\\n[    0.961209] x86/mm: Checking user space page tables\\r\\n[    0.961951] x86/mm: Checked W+X mappings: passed, no W+X pages found.\\r\\n[    0.962845] Run /init as init process\\r\\nLoading, please wait...\\r\\nStarting version 247.3-7+deb11u4\\r\\n[    1.027130] PCI Interrupt Link [LNKC] enabled at IRQ 11\\r\\n[    1.027936] virtio-pci 0000:00:03.0: virtio_pci: leaving for legacy driver\\r\\n[    1.056157] PCI Interrupt Link [LNKD] enabled at IRQ 10\\r\\n[    1.056936] virtio-pci 0000:00:04.0: virtio_pci: leaving for legacy driver\\r\\n[    1.062192] PCI Interrupt Link [LNKA] enabled at IRQ 10\\r\\n[    1.062992] virtio-pci 0000:00:05.0: virtio_pci: leaving for legacy driver\\r\\n[    1.084419] SCSI subsystem initialized\\r\\n[    1.093724] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input0\\r\\n[    1.118084] virtio_net virtio1 ens4: renamed from eth0\\r\\n[    1.126364] scsi host0: Virtio SCSI HBA\\r\\n[    1.133045] scsi 0:0:1:0: Direct-Access     Google   PersistentDisk   1    PQ: 0 ANSI: 6\\r\\n[    1.153482] sd 0:0:1:0: [sda] 20971520 512-byte logical blocks: (10.7 GB/10.0 GiB)\\r\\n[    1.154594] sd 0:0:1:0: [sda] 4096-byte physical blocks\\r\\n[    1.155471] sd 0:0:1:0: [sda] Write Protect is off\\r\\n[    1.156440] sd 0:0:1:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA\\r\\n[    1.160803]  sda: sda1 sda14 sda15\\r\\n[    1.172566] sd 0:0:1:0: [sda] Attached SCSI disk\\r\\nBegin: Loading essential drivers ... done.\\r\\nBegin: Running /scripts/init-premount ... done.\\r\\nBegin: Mounting root file system ... Begin: Running /scripts/local-top ... done.\\r\\nBegin: Running /scripts/local[    1.198383] gce-disk-expand: Resizing partition on \\r\\n-premount ... [    1.222901]  sda: sda1 sda14 sda15\\r\\n[    1.234471] gce-disk-expand: Disk /dev/sda1 doesn't need resizing.\\r\\ndone.\\r\\nBegin: Will now check root file system ... fsck from util-linux 2.36.1\\r\\n[/sbin/fsck.ext4 (1) -- /dev/sda1] fsck.ext4 -a -C0 /dev/sda1 \\r\\n/dev/sda1: clean, 82191/647168 files, 583028/2588667 blocks\\r\\ndone.\\r\\n[    1.303453] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null)\\r\\ndone.\\r\\nBegin: Running /scripts/local-bottom ... done.\\r\\nBegin: Running /scripts/init-bottom ... done.\\r\\n[    1.328083] Not activating Mandatory Access Control as /sbin/tomoyo-init does not exist.\\r\\n[    1.437623] systemd[1]: Inserted module 'autofs4'\\r\\n[    1.493324] systemd[1]: systemd 247.3-7+deb11u4 running in system mode. (+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +ZSTD +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=unified)\\r\\n[    1.496588] systemd[1]: Detected virtualization kvm.\\r\\n[    1.497395] systemd[1]: Detected architecture x86-64.\\r\\n\\r\\nWelcome to \\u001b[1mDebian GNU/Linux 11 (bullseye)\\u001b[0m!\\r\\n\\r\\n[    1.508540] systemd[1]: Set hostname to \\u003cdebian\\u003e.\\r\\n[    1.511050] systemd[1]: Initializing machine ID from KVM UUID.\\r\\n[    1.511999] systemd[1]: Installed transient /etc/machine-id file.\\r\\n[    1.972842] systemd[1]: Condition check resulted in Root Slice being skipped.\\r\\n[    1.974079] systemd[1]: Condition check resulted in System Slice being skipped.\\r\\n[    1.975658] systemd[1]: Queued start job for default target Graphical Interface.\\r\\n[    1.977660] systemd[1]: Created slice system-getty.slice.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Created slice \\u001b[0;1;39msystem-getty.slice\\u001b[0m.\\r\\n[    1.988412] systemd[1]: Created slice system-modprobe.slice.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Created slice \\u001b[0;1;39msystem-modprobe.slice\\u001b[0m.\\r\\n[    2.000470] systemd[1]: Created slice system-serial\\\\x2dgetty.slice.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Created slice \\u001b[0;1;39msystem-serial\\\\x2dgetty.slice\\u001b[0m.\\r\\n[    2.012408] systemd[1]: Created slice system-systemd\\\\x2dgrowfs.slice.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Created slice \\u001b[0;1;39msystem-systemd\\\\x2dgrowfs.slice\\u001b[0m.\\r\\n[    2.024395] systemd[1]: Created slice User and Session Slice.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Created slice \\u001b[0;1;39mUser and Session Slice\\u001b[0m.\\r\\n[    2.036241] systemd[1]: Started Dispatch Password Requests to Console Directory Watch.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mDispatch Password …ts to Console Directory Watch\\u001b[0m.\\r\\n[    2.048216] systemd[1]: Started Forward Password Requests to Wall Directory Watch.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mForward Password R…uests to Wall Directory Watch\\u001b[0m.\\r\\n[    2.060352] systemd[1]: Set up automount Arbitrary Executable File Formats File System Automount Point.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Set up automount \\u001b[0;1;39mArbitrary…s File System Automount Point\\u001b[0m.\\r\\n[    2.072181] systemd[1]: Reached target Local Encrypted Volumes.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mLocal Encrypted Volumes\\u001b[0m.\\r\\n[    2.084183] systemd[1]: Reached target Paths.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mPaths\\u001b[0m.\\r\\n[    2.096149] systemd[1]: Reached target Remote File Systems.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mRemote File Systems\\u001b[0m.\\r\\n[    2.108140] systemd[1]: Reached target Slices.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mSlices\\u001b[0m.\\r\\n[    2.120166] systemd[1]: Reached target Swap.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mSwap\\u001b[0m.\\r\\n[    2.132147] systemd[1]: Reached target System Time Set.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mSystem Time Set\\u001b[0m.\\r\\n[    2.144334] systemd[1]: Listening on Syslog Socket.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Listening on \\u001b[0;1;39mSyslog Socket\\u001b[0m.\\r\\n[    2.156291] systemd[1]: Listening on fsck to fsckd communication Socket.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Listening on \\u001b[0;1;39mfsck to fsckd communication Socket\\u001b[0m.\\r\\n[    2.168285] systemd[1]: Listening on initctl Compatibility Named Pipe.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Listening on \\u001b[0;1;39minitctl Compatibility Named Pipe\\u001b[0m.\\r\\n[    2.180454] systemd[1]: Listening on Journal Audit Socket.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Listening on \\u001b[0;1;39mJournal Audit Socket\\u001b[0m.\\r\\n[    2.192301] systemd[1]: Listening on Journal Socket (/dev/log).\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Listening on \\u001b[0;1;39mJournal Socket (/dev/log)\\u001b[0m.\\r\\n[    2.204323] systemd[1]: Listening on Journal Socket.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Listening on \\u001b[0;1;39mJournal Socket\\u001b[0m.\\r\\n[    2.216869] systemd[1]: Listening on udev Control Socket.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Listening on \\u001b[0;1;39mudev Control Socket\\u001b[0m.\\r\\n[    2.228296] systemd[1]: Listening on udev Kernel Socket.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Listening on \\u001b[0;1;39mudev Kernel Socket\\u001b[0m.\\r\\n[    2.241091] systemd[1]: Mounting Huge Pages File System...\\r\\n         Mounting \\u001b[0;1;39mHuge Pages File System\\u001b[0m...\\r\\n[    2.252968] systemd[1]: Mounting POSIX Message Queue File System...\\r\\n         Mounting \\u001b[0;1;39mPOSIX Message Queue File System\\u001b[0m...\\r\\n[    2.264934] systemd[1]: Mounting Kernel Debug File System...\\r\\n         Mounting \\u001b[0;1;39mKernel Debug File System\\u001b[0m...\\r\\n[    2.276955] systemd[1]: Mounting Kernel Trace File System...\\r\\n         Mounting \\u001b[0;1;39mKernel Trace File System\\u001b[0m...\\r\\n[    2.289000] systemd[1]: Starting Create list of static device nodes for the current kernel...\\r\\n         Starting \\u001b[0;1;39mCreate list of st…odes for the current kernel\\u001b[0m...\\r\\n[    2.300930] systemd[1]: Starting Load Kernel Module configfs...\\r\\n         Starting \\u001b[0;1;39mLoad Kernel Module configfs\\u001b[0m...\\r\\n[    2.312919] systemd[1]: Starting Load Kernel Module drm...\\r\\n         Starting \\u001b[0;1;39mLoad Kernel Module drm\\u001b[0m...\\r\\n[    2.324883] systemd[1]: Starting Load Kernel Module fuse...\\r\\n         Starting \\u001b[0;1;39mLoad Kernel Module fuse\\u001b[0m...\\r\\n[    2.335869] fuse: init (API version 7.32)\\r\\n[    2.337237] systemd[1]: Condition check resulted in Set Up Additional Binary Formats being skipped.\\r\\n[    2.338529] systemd[1]: Condition check resulted in File System Check on Root Device being skipped.\\r\\n[    2.341100] systemd[1]: Starting Journal Service...\\r\\n         Starting \\u001b[0;1;39mJournal Service\\u001b[0m...\\r\\n[    2.353548] systemd[1]: Starting Load Kernel Modules...\\r\\n         Starting \\u001b[0;1;39mLoad Kernel Modules\\u001b[0m...\\r\\n[    2.364968] systemd[1]: Starting Remount Root and Kernel File Systems...\\r\\n         Starting \\u001b[0;1;39mRemount Root and Kernel File Systems\\u001b[0m...\\r\\n[    2.376830] systemd[1]: Starting Coldplug All udev Devices...\\r\\n         Starting \\u001b[0;1;39mColdplug All udev Devices\\u001b[0m...\\r\\n[    2.389695] systemd[1]: Mounted Huge Pages File System.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Mounted \\u001b[0;1;39mHuge Pages File System\\u001b[0m.\\r\\n[    2.392342] systemd[1]: Mounted POSIX Message Queue File System.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Mounted \\u001b[0;1;39mPOSIX Message Queue File System\\u001b[0m.\\r\\n[    2.396356] systemd[1]: Mounted Kernel Debug File System.\\r\\n[    2.397669] EXT4-fs (sda1): re-mounted. Opts: discard,errors=remount-ro\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Mounted \\u001b[0;1;39mKernel Debug File System\\u001b[0m.\\r\\n[    2.412895] systemd[1]: Mounted Kernel Trace File System.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Mounted \\u001b[0;1;39mKernel Trace File System\\u001b[0m.\\r\\n[    2.424280] systemd[1]: Started Journal Service.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mJournal Service\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mCreate list of st… nodes for the current kernel\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mLoad Kernel Module configfs\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mLoad Kernel Module drm\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mLoad Kernel Module fuse\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mLoad Kernel Modules\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mRemount Root and Kernel File Systems\\u001b[0m.\\r\\n         Mounting \\u001b[0;1;39mFUSE Control File System\\u001b[0m...\\r\\n         Mounting \\u001b[0;1;39mKernel Configuration File System\\u001b[0m...\\r\\n         Starting \\u001b[0;1;39mGrow File System on /\\u001b[0m...\\r\\n         Starting \\u001b[0;1;39mFlush Journal to Persistent Storage\\u001b[0m...\\r\\n[    2.550327] EXT4-fs (sda1): resizing filesystem from 2588667 to 2588667 blocks\\r\\n         Starting \\u001b[0;1;39mLoad/Save Random Seed\\u001b[0m...\\r\\n[    2.566378] systemd-journald[180]: Received client request to flush runtime journal.\\r\\n         Starting \\u001b[0;1;39mApply Kernel Variables\\u001b[0m...\\r\\n         Starting \\u001b[0;1;39mCreate System Users\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mColdplug All udev Devices\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Mounted \\u001b[0;1;39mFUSE Control File System\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Mounted \\u001b[0;1;39mKernel Configuration File System\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mGrow File System on /\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mFlush Journal to Persistent Storage\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mLoad/Save Random Seed\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mApply Kernel Variables\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mCreate System Users\\u001b[0m.\\r\\n         Starting \\u001b[0;1;39mHelper to synchronize boot up for ifupdown\\u001b[0m...\\r\\n         Starting \\u001b[0;1;39mCreate Static Device Nodes in /dev\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mHelper to synchronize boot up for ifupdown\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mCreate Static Device Nodes in /dev\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mLocal File Systems (Pre)\\u001b[0m.\\r\\n         Starting \\u001b[0;1;39mRule-based Manage…for Device Events and Files\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mRule-based Manager for Device Events and Files\\u001b[0m.\\r\\n[    2.817742] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input2\\r\\n[    2.832340] ACPI: Power Button [PWRF]\\r\\n[    2.832937] input: Sleep Button as /devices/LNXSYSTM:00/LNXSLPBN:00/input/input3\\r\\n[    2.833954] ACPI: Sleep Button [SLPF]\\r\\n[    2.858324] sd 0:0:1:0: Attached scsi generic sg0 type 0\\r\\n[    2.868718] tpm_tis MSFT0101:00: 2.0 TPM (device-id 0x9009, rev-id 0)\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Found device \\u001b[0;1;39m/dev/ttyS0\\u001b[0m.\\r\\n[    2.876076] pstore: Using crash dump compression: deflate\\r\\n[    2.876906] pstore: Registered efi as persistent store backend\\r\\n[    2.921526] RAPL PMU: API unit is 2^-32 Joules, 0 fixed counters, 10737418240 ms ovfl timer\\r\\n[    2.957276] cryptd: max_cpu_qlen set to 1000\\r\\n[    2.992561] AVX2 version of gcm_enc/dec engaged.\\r\\n[    2.993287] AES CTR mode by8 optimization enabled\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Found device \\u001b[0;1;39mPersistentDisk 15\\u001b[0m.\\r\\n         Mounting \\u001b[0;1;39m/boot/efi\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Mounted \\u001b[0;1;39m/boot/efi\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Found device \\u001b[0;1;39mVirtio network device\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mLocal File Systems\\u001b[0m.\\r\\n         Starting \\u001b[0;1;39mLoad AppArmor profiles\\u001b[0m...\\r\\n         Starting \\u001b[0;1;39mCommit a transient machine-id on disk\\u001b[0m...\\r\\n         Starting \\u001b[0;1;39mCreate Volatile Files and Directories\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mCreate Volatile Files and Directories\\u001b[0m.\\r\\n         Starting \\u001b[0;1;39mUpdate UTMP about System Boot/Shutdown\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mUpdate UTMP about System Boot/Shutdown\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mCommit a transient machine-id on disk\\u001b[0m.\\r\\n[    3.408377] audit: type=1400 audit(1700193827.016:2): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"nvidia_modprobe\\\" pid=292 comm=\\\"apparmor_parser\\\"\\r\\n[    3.411744] audit: type=1400 audit(1700193827.016:3): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"nvidia_modprobe//kmod\\\" pid=292 comm=\\\"apparmor_parser\\\"\\r\\n[    3.496816] audit: type=1400 audit(1700193827.104:4): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"/usr/sbin/chronyd\\\" pid=293 comm=\\\"apparmor_parser\\\"\\r\\n[    3.538548] audit: type=1400 audit(1700193827.144:5): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"lsb_release\\\" pid=294 comm=\\\"apparmor_parser\\\"\\r\\n[    3.657331] audit: type=1400 audit(1700193827.264:6): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"tcpdump\\\" pid=295 comm=\\\"apparmor_parser\\\"\\r\\n[    3.687179] audit: type=1400 audit(1700193827.292:7): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"/usr/sbin/haveged\\\" pid=296 comm=\\\"apparmor_parser\\\"\\r\\n[    3.752802] audit: type=1400 audit(1700193827.360:8): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"/usr/bin/man\\\" pid=297 comm=\\\"apparmor_parser\\\"\\r\\n[    3.755808] audit: type=1400 audit(1700193827.360:9): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"man_filter\\\" pid=297 comm=\\\"apparmor_parser\\\"\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mLoad AppAr[    3.760565] audit: type=1400 audit(1700193827.364:10): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"man_groff\\\" pid=297 comm=\\\"apparmor_parser\\\"\\r\\nmor profiles\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mEntropy Daemon based on the HAVEGE algorithm\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mSystem Initialization\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mGCE Workload Certificate refresh timer\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mNSS cache refresh timer\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mDaily Cleanup of Temporary Directories\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Listening on \\u001b[0;1;39mD-Bus System Message Bus Socket\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Listening on \\u001b[0;1;39mUUID daemon activation socket\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mSockets\\u001b[0m.\\r\\n         Starting \\u001b[0;1;39mResize root filesystem if needed\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mifup for ens4\\u001b[0m.\\r\\n         Starting \\u001b[0;1;39mRaise network interfaces\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mResize root filesystem if needed\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mBasic System\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mRegular background program processing daemon\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mD-Bus System Message Bus\\u001b[0m.\\r\\n         Starting \\u001b[0;1;39mRemove Stale Onli…t4 Metadata Check Snapshots\\u001b[0m...\\r\\n         Starting \\u001b[0;1;39mSystem Logging Service\\u001b[0m...\\r\\n         Starting \\u001b[0;1;39mUser Login Management\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mSystem Logging Service\\u001b[0m.\\r\\nNov 17 04:03:47 debian kernel: [    0.000000] Linux version 5.10.0-26-cloud-amd64 (debian-kernel@lists.debian.org) (gcc-10 (Debian 10.2.1-6) 10.2.1 20210110, GNU ld (GNU Binutils for Debian) 2.35.2) #1 SMP Debian 5.10.197-1 (2023-09-29)\\r\\nNov 17 04:03:47 debian kernel: [    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-5.10.0-26-cloud-amd64 root=UUID=e6fe3fcb-2478-4e7e-8072-4ced46dceac5 ro console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0 intel_iommu=off\\r\\nNov 17 04:03:47 debian kernel: [    0.000000] BIOS-provided physical RAM map:\\r\\nNov 17 04:03:47 debian kernel: [    0.000000] BIOS-e820: [mem 0x0000000000000000-0x0000000000000fff] reserved\\r\\nNov 17 04:03:47 debian kernel: [    0.000000] BIOS-e820: [mem 0x0000000000001000-0x0000000000054fff] usable\\r\\nNov 17 04:03:47 debian kernel: [    0.000000] BIOS-e820: [mem 0x0000000000055000-0x000000000005ffff] reserved\\r\\nNov 17 04:03:47 debian kernel: [    0.000000] BIOS-e820: [mem 0x0000000000060000-0x0000000000097fff] usable\\r\\nNov 17 04:03:47 debian kernel: [    0.000000] BIOS-e820: [mem 0x0000000000098000-0x000000000009ffff] reserved\\r\\nNov 17 04:03:47 debian kernel: [    0.000000] BIOS-e820: [mem 0x0000000000100000-0x0000000025eecfff] usable\\r\\nNov 17 04:03:47 debian kernel: [    0.000000] BIOS-e820: [mem 0x0000000025eed000-0x0000000025fecfff] reserved\\r\\nNov 17 04:03:47 debian kernel: [    0.000000] BIOS-e820: [mem 0x0000000025fed000-0x00000000260ecfff] type 20\\r\\nNov 17 04:03:47 debian kernel: [    0.000000] BIOS-e820: [mem 0x00000000260ed000-0x000000002616cfff] reserved\\r\\nNov 17 04:03:47 debian kernel: [    0.000000] BIOS-e820: [mem 0x000000002616d000-0x000000002617efff] ACPI data\\r\\nNov 17 04:03:47 debian kernel: [    0.000000] BIOS-e820: [mem 0x000000002617f000-0x00000000261fefff] ACPI NVS\\r\\nNov 17 04:03:47 debian kernel: [    0.000000] BIOS-e820: [mem 0x00000000261ff000-0x00000000265dffff] usable\\r\\nNov 17 04:03:47 debian kernel: [    0.000000] BIOS-e820: [mem 0x00000000265e0000-0x00000000265fffff] reserved\\r\\nNov 17 04:03:47 debian kernel: [    0.000000] printk: bootconsole [earlyser0] enabled\\r\\nNov 17 04:03:47 debian kernel: [    0.000000] NX (Execute Disable) protection: active\\r\\nNov 17 04:03:47 debian kernel: [    0.000000] efi: EFI v2.70 by EDK II\\r\\nNov 17 04:03:47 debian kernel: [    0.000000] efi: TPMFinalLog=0x261f7000 ACPI=0x2617e000 ACPI 2.0=0x2617e014 SMBIOS=0x25fca000 MEMATTR=0x249a0018 \\r\\nNov 17 04:03:47 debian kernel: [    0.000000] secureboot: Secure boot disabled\\r\\nNov 17 04:03:47 debian kernel: [    0.000000] SMBIOS 2.4 present.\\r\\nNov 17 04:03:47 debian kernel: [    0.000000] DMI: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/09/2023\\r\\nNov 17 04:03:47 debian kernel: [    0.000000] Hypervisor detected: KVM\\r\\nNov 17 04:03:47 debian kernel: [    0.000000] kvm-clock: Using msrs 4b564d01 and 4b564d00\\r\\nNov 17 04:03:47 debian kernel: [    0.000000] kvm-clock: cpu 0, msr c201001, primary cpu clock\\r\\nNov 17 04:03:47 debian kernel: [    0.000000] kvm-clock: using sched offset of 6456270974 cycles\\r\\nNov 17 04:03:47 debian kernel: [    0.000734] clocksource: kvm-clock: mask: 0xffffffffffffffff max_cycles: 0x1cd42e4dffb, max_idle_ns: 881590591483 ns\\r\\nNov 17 04:03:47 debian kernel: [    0.002884] tsc: Detected 2200.158 MHz processor\\r\\nNov 17 04:03:47 debian kernel: [    0.003576] e820: update [mem 0x00000000-0x00000fff] usable ==\\u003e reserved\\r\\nNov 17 04:03:47 debian kernel: [    0.003579] e820: remove [mem 0x000a0000-0x000fffff] usable\\r\\nNov 17 04:03:47 debian kernel: [    0.003587] last_pfn = 0x265e0 max_arch_pfn = 0x400000000\\r\\nNov 17 04:03:47 debian kernel: [    0.004341] MTRR default type: write-back\\r\\nNov 17 04:03:47 debian kernel: [    0.004342] MTRR fixed ranges enabled:\\r\\nNov 17 04:03:47 debian kernel: [    0.004343]   00000-9FFFF write-back\\r\\nNov 17 04:03:47 debian kernel: [    0.004344]   A0000-FFFFF uncachable\\r\\nNov 17 04:03:47 debian kernel: [    0.004345] MTRR variable ranges enabled:\\r\\nNov 17 04:03:47 debian kernel: [    0.004347]   0 base 000080000000 mask 3FFF80000000 uncachable\\r\\nNov 17 04:03:47 debian kernel: [    0.004347]   1 disabled\\r\\nNov 17 04:03:47 debian kernel: [    0.004348]   2 disabled\\r\\nNov 17 04:03:47 debian kernel: [    0.004349]   3 disabled\\r\\nNov 17 04:03:47 debian kernel: [    0.004349]   4 disabled\\r\\nNov 17 04:03:47 debian kernel: [    0.004350]   5 disabled\\r\\nNov 17 04:03:47 debian kernel: [    0.004350]   6 disabled\\r\\nNov 17 04:03:47 debian kernel: [    0.004351]   7 disabled\\r\\nNov 17 04:03:47 debian kernel: [    0.004363] x86/PAT: Configuration [0-7]: WB  WC  UC- UC  WB  WP  UC- WT  \\r\\nNov 17 04:03:47 debian kernel: [    0.005841] Using GB pages for direct mapping\\r\\nNov 17 04:03:47 debian kernel: [    0.006760] RAMDISK: [mem 0x2327f000-0x24000fff]\\r\\nNov 17 04:03:47 debian kernel: [    0.007361] ACPI: Early table checksum verification disabled\\r\\nNov 17 04:03:47 debian kernel: [    0.008083] ACPI: RSDP 0x000000002617E014 000024 (v02 Google)\\r\\nNov 17 04:03:47 debian kernel: [    0.008863] ACPI: XSDT 0x000000002617D0E8 00005C (v01 Google GOOGFACP 00000001      01000013)\\r\\nNov 17 04:03:47 debian kernel: [    0.010056] ACPI: FACP 0x0000000026178000 0000F4 (v02 Google GOOGFACP 00000001 GOOG 00000001)\\r\\nNov 17 04:03:47 debian kernel: [    0.011203] ACPI: DSDT 0x0000000026179000 001A64 (v01 Google GOOGDSDT 00000001 GOOG 00000001)\\r\\nNov 17 04:03:47 debian kernel: [    0.012333] ACPI: FACS 0x00000000261F2000 000040\\r\\nNov 17 04:03:47 debian kernel: [    0.012966] ACPI: SSDT 0x000000002617C000 000316 (v02 GOOGLE Tpm2Tabl 00001000 INTL 20211217)\\r\\nNov 17 04:03:47 debian kernel: [    0.014054] ACPI: TPM2 0x000000002617B000 000034 (v04 GOOGLE          00000001 GOOG 00000001)\\r\\nNov 17 04:03:47 debian kernel: [    0.015175] ACPI: SRAT 0x0000000026177000 0000B8 (v03 Google GOOGSRAT 00000001 GOOG 00000001)\\r\\nNov 17 04:03:47 debian kernel: [    0.016277] ACPI: APIC 0x0000000026176000 00006E (v05 Google GOOGAPIC 00000001 GOOG 00000001)\\r\\nNov 17 04:03:47 debian kernel: [    0.017366] ACPI: SSDT 0x0000000026175000 00091F (v01 Google GOOGSSDT 00000001 GOOG 00000001)\\r\\nNov 17 04:03:47 debian kernel: [    0.018500] ACPI: WAET 0x0000000026174000 000028 (v01 Google GOOGWAET 00000001 GOOG 00000001)\\r\\nNov 17 04:03:47 debian kernel: [    0.019702] ACPI: Reserving FACP table memory at [mem 0x26178000-0x261780f3]\\r\\nNov 17 04:03:47 debian kernel: [    0.020615] ACPI: Reserving DSDT table memory at [mem 0x26179000-0x2617aa63]\\r\\nNov 17 04:03:47 debian kernel: [    0.021530] ACPI: Reserving FACS table memory at [mem 0x261f2000-0x261f203f]\\r\\nNov 17 04:03:47 debian kernel: [    0.022454] ACPI: Reserving SSDT table memory at [mem 0x2617c000-0x2617c315]\\r\\nNov 17 04:03:47 debian kernel: [    0.023355] ACPI: Reserving TPM2 table memory at [mem 0x2617b000-0x2617b033]\\r\\nNov 17 04:03:47 debian kernel: [    0.024340] ACPI: Reserving SRAT table memory at [mem 0x26177000-0x261770b7]\\r\\nNov 17 04:03:47 debian kernel: [    0.025411] ACPI: Reserving APIC table memory at [mem 0x26176000-0x2617606d]\\r\\nNov 17 04:03:47 debian kernel: [    0.026702] ACPI: Reserving SSDT table memory at [mem 0x26175000-0x2617591e]\\r\\nNov 17 04:03:47 debian kernel: [    0.027613] ACPI: Reserving WAET table memory at [mem 0x26174000-0x26174027]\\r\\nNov 17 04:03:47 debian kernel: [    0.028605] ACPI: Local APIC address 0xfee00000\\r\\nNov 17 04:03:47 debian kernel: [    0.028637] SRAT: PXM 0 -\\u003e APIC 0x00 -\\u003e Node 0\\r\\nNov 17 04:03:47 debian kernel: [    0.029245] ACPI: SRAT: Node 0 PXM 0 [mem 0x00000000-0x0009ffff]\\r\\nNov 17 04:03:47 debian kernel: [    0.030009] ACPI: SRAT: Node 0 PXM 0 [mem 0x00100000-0x265fffff]\\r\\nNov 17 04:03:47 debian kernel: [    0.030872] NUMA: Node 0 [mem 0x00000000-0x0009ffff] + [mem 0x00100000-0x265dffff] -\\u003e [mem 0x00000000-0x265dffff]\\r\\nNov 17 04:03:47 debian kernel: [    0.032225] NODE_DATA(0) allocated [mem 0x26498000-0x264c1fff]\\r\\nNov 17 04:03:47 debian kernel: [    0.033370] Zone ranges:\\r\\nNov 17 04:03:47 debian kernel: [    0.033725]   DMA      [mem 0x0000000000001000-0x0000000000ffffff]\\r\\nNov 17 04:03:47 debian kernel: [    0.034554]   DMA32    [mem 0x0000000001000000-0x00000000265dffff]\\r\\nNov 17 04:03:47 debian kernel: [    0.035451]   Normal   empty\\r\\nNov 17 04:03:47 debian kernel: [    0.035842]   Device   empty\\r\\nNov 17 04:03:47 debian kernel: [    0.036232] Movable zone start for each node\\r\\nNov 17 04:03:47 debian kernel: [    0.036778] Early memory node ranges\\r\\nNov 17 04:03:47 debian kernel: [    0.037243]   node   0: [mem 0x0000000000001000-0x0000000000054fff]\\r\\nNov 17 04:03:47 debian kernel: [    0.038094]   node   0: [mem 0x0000000000060000-0x0000000000097fff]\\r\\nNov 17 04:03:47 debian kernel: [    0.038947]   node   0: [mem 0x0000000000100000-0x0000000025eecfff]\\r\\nNov 17 04:03:47 debian kernel: [    0.039805]   node   0: [mem 0x00000000261ff000-0x00000000265dffff]\\r\\nNov 17 04:03:47 debian kernel: [    0.040633] Initmem setup node 0 [mem 0x0000000000001000-0x00000000265dffff]\\r\\nNov 17 04:03:47 debian kernel: [    0.041544] On node 0 totalpages: 156250\\r\\nNov 17 04:03:47 debian kernel: [    0.041545]   DMA zone: 64 pages used for memmap\\r\\nNov 17 04:03:47 debian kernel: [    0.041546]   DMA zone: 3121 pages reserved\\r\\nNov 17 04:03:47 debian kernel: [    0.041548]   DMA zone: 3980 pages, LIFO batch:0\\r\\nNov 17 04:03:47 debian kernel: [    0.041549]   DMA32 zone: 2392 pages used for memmap\\r\\nNov 17 04:03:47 debian kernel: [    0.041550]   DMA32 zone: 152270 pages, LIFO batch:31\\r\\nNov 17 04:03:47 debian kernel: [    0.041989] On node 0, zone DMA: 1 pages in unavailable ranges\\r\\nNov 17 04:03:47 debian kernel: [    0.041990] On node 0, zone DMA: 11 pages in unavailable ranges\\r\\nNov 17 04:03:47 debian kernel: [    0.042798] On node 0, zone DMA: 104 pages in unavailable ranges\\r\\nNov 17 04:03:47 debian kernel: [    0.045104] On node 0, zone DMA32: 786 pages in unavailable ranges\\r\\nNov 17 04:03:47 debian kernel: [    0.046017] On node 0, zone DMA32: 6688 pages in unavailable ranges\\r\\nNov 17 04:03:47 debian kernel: [    0.047186] ACPI: PM-Timer IO Port: 0xb008\\r\\nNov 17 04:03:47 debian kernel: [    0.048553] ACPI: Local APIC address 0xfee00000\\r\\nNov 17 04:03:47 debian kernel: [    0.048565] ACPI: LAPIC_NMI (acpi_id[0xff] dfl dfl lint[0x1])\\r\\nNov 17 04:03:47 debian kernel: [    0.049404] IOAPIC[0]: apic_id 0, version 17, address 0xfec00000, GSI 0-23\\r\\nNov 17 04:03:47 debian kernel: [    0.050293] ACPI: INT_SRC_OVR (bus 0 bus_irq 5 global_irq 5 high level)\\r\\nNov 17 04:03:47 debian kernel: [    0.051137] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)\\r\\nNov 17 04:03:47 debian kernel: [    0.051992] ACPI: INT_SRC_OVR (bus 0 bus_irq 10 global_irq 10 high level)\\r\\nNov 17 04:03:47 debian kernel: [    0.052890] ACPI: INT_SRC_OVR (bus 0 bus_irq 11 global_irq 11 high level)\\r\\nNov 17 04:03:47 debian kernel: [    0.053807] ACPI: IRQ5 used by override.\\r\\nNov 17 04:03:47 debian kernel: [    0.053808] ACPI: IRQ9 used by override.\\r\\nNov 17 04:03:47 debian kernel: [    0.053809] ACPI: IRQ10 used by override.\\r\\nNov 17 04:03:47 debian kernel: [    0.053810] ACPI: IRQ11 used by override.\\r\\nNov 17 04:03:47 debian kernel: [    0.053812] Using ACPI (MADT) for SMP configuration information\\r\\nNov 17 04:03:47 debian kernel: [    0.054586] smpboot: Allowing 1 CPUs, 0 hotplug CPUs\\r\\nNov 17 04:03:47 debian kernel: [    0.055292] PM: hibernation: Registered nosave memory: [mem 0x00000000-0x00000fff]\\r\\nNov 17 04:03:47 debian kernel: [    0.056302] PM: hibernation: Registered nosave memory: [mem 0x00055000-0x0005ffff]\\r\\nNov 17 04:03:47 debian kernel: [    0.057269] PM: hibernation: Registered nosave memory: [mem 0x00098000-0x0009ffff]\\r\\nNov 17 04:03:47 debian kernel: [    0.058272] PM: hibernation: Registered nosave memory: [mem 0x000a0000-0x000fffff]\\r\\nNov 17 04:03:47 debian kernel: [    0.059273] PM: hibernation: Registered nosave memory: [mem 0x25eed000-0x25fecfff]\\r\\nNov 17 04:03:47 debian kernel: [    0.060238] PM: hibernation: Registered nosave memory: [mem 0x25fed000-0x260ecfff]\\r\\nNov 17 04:03:47 debian kernel: [    0.061203] PM: hibernation: Registered nosave memory: [mem 0x260ed000-0x2616cfff]\\r\\nNov 17 04:03:47 debian kernel: [    0.062169] PM: hibernation: Registered nosave memory: [mem 0x2616d000-0x2617efff]\\r\\nNov 17 04:03:47 debian kernel: [    0.063136] PM: hibernation: Registered nosave memory: [mem 0x2617f000-0x261fefff]\\r\\nNov 17 04:03:47 debian kernel: [    0.064110] [mem 0x26600000-0xffffffff] available for PCI devices\\r\\nNov 17 04:03:47 debian kernel: [    0.064881] Booting paravirtualized kernel on KVM\\r\\nNov 17 04:03:47 debian kernel: [    0.065481] clocksource: refined-jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645519600211568 ns\\r\\nNov 17 04:03:47 debian kernel: [    0.071199] setup_percpu: NR_CPUS:8192 nr_cpumask_bits:1 nr_cpu_ids:1 nr_node_ids:1\\r\\nNov 17 04:03:47 debian kernel: [    0.072527] percpu: Embedded 63 pages/cpu s221184 r8192 d28672 u2097152\\r\\nNov 17 04:03:47 debian kernel: [    0.073412] pcpu-alloc: s221184 r8192 d28672 u2097152 alloc=1*2097152\\r\\nNov 17 04:03:47 debian kernel: [    0.073414] pcpu-alloc: [0] 0 \\r\\nNov 17 04:03:47 debian kernel: [    0.073444] kvm-guest: PV spinlocks disabled, single CPU\\r\\nNov 17 04:03:47 debian kernel: [    0.074171] Built 1 zonelists, mobility grouping on.  Total pages: 150673\\r\\nNov 17 04:03:47 debian kernel: [    0.075108] Policy zone: DMA32\\r\\nNov 17 04:03:47 debian kernel: [    0.075690] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-5.10.0-26-cloud-amd64 root=UUID=e6fe3fcb-2478-4e7e-8072-4ced46dceac5 ro console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0 intel_iommu=off\\r\\nNov 17 04:03:47 debian kernel: [    0.078655] DMAR: IOMMU disabled\\r\\nNov 17 04:03:47 debian kernel: [    0.079286] Dentry cache hash table entries: 131072 (order: 8, 1048576 bytes, linear)\\r\\nNov 17 04:03:47 debian kernel: [    0.080546] Inode-cache hash table entries: 65536 (order: 7, 524288 bytes, linear)\\r\\nNov 17 04:03:47 debian kernel: [    0.081583] mem auto-init: stack:off, heap alloc:on, heap free:off\\r\\nNov 17 04:03:47 debian kernel: [    0.084292] Memory: 208948K/625000K available (12296K kernel code, 2552K rwdata, 6956K rodata, 2468K init, 3724K bss, 103652K reserved, 0K cma-reserved)\\r\\nNov 17 04:03:47 debian kernel: [    0.086299] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1\\r\\nNov 17 04:03:47 debian kernel: [    0.087268] Kernel/User page tables isolation: enabled\\r\\nNov 17 04:03:47 debian kernel: [    0.088415] ftrace: allocating 33918 entries in 133 pages\\r\\nNov 17 04:03:47 debian kernel: [    0.108935] ftrace: allocated 133 pages with 3 groups\\r\\nNov 17 04:03:47 debian kernel: [    0.110330] rcu: Hierarchical RCU implementation.\\r\\nNov 17 04:03:47 debian kernel: [    0.110974] rcu: \\tRCU restricting CPUs from NR_CPUS=8192 to nr_cpu_ids=1.\\r\\nNov 17 04:03:47 debian kernel: [    0.111865] \\tRude variant of Tasks RCU enabled.\\r\\nNov 17 04:03:47 debian kernel: [    0.112441] \\tTracing variant of Tasks RCU enabled.\\r\\nNov 17 04:03:47 debian kernel: [    0.113053] rcu: RCU calculated value of scheduler-enlistment delay is 25 jiffies.\\r\\nNov 17 04:03:47 debian kernel: [    0.114064] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=1\\r\\nNov 17 04:03:47 debian kernel: [    0.119409] NR_IRQS: 524544, nr_irqs: 256, preallocated irqs: 16\\r\\nNov 17 04:03:47 debian kernel: [    0.120483] random: crng init done\\r\\nNov 17 04:03:47 debian kernel: [    0.120945] Console: colour dummy device 80x25\\r\\nNov 17 04:03:47 debian kernel: [    0.121763] printk: console [tty0] enabled\\r\\nNov 17 04:03:47 debian kernel: [    0.122413] printk: console [ttyS0] enabled\\r\\nNov 17 04:03:47 debian kernel: [    0.123526] printk: bootconsole [earlyser0] disabled\\r\\nNov 17 04:03:47 debian kernel: [    0.124856] ACPI: Core revision 20200925\\r\\nNov 17 04:03:47 debian kernel: [    0.125499] APIC: Switch to symmetric I/O mode setup\\r\\nNov 17 04:03:47 debian kernel: [    0.126669] x2apic enabled\\r\\nNov 17 04:03:47 debian kernel: [    0.129453] Switched APIC routing to physical x2apic.\\r\\nNov 17 04:03:47 debian kernel: [    0.134129] ..TIMER: vector=0x30 apic1=0 pin1=0 apic2=-1 pin2=-1\\r\\nNov 17 04:03:47 debian kernel: [    0.135170] clocksource: tsc-early: mask: 0xffffffffffffffff max_cycles: 0x1fb6c80a799, max_idle_ns: 440795272342 ns\\r\\nNov 17 04:03:47 debian kernel: [    0.136571] Calibrating delay loop (skipped) preset value.. 4400.31 BogoMIPS (lpj=8800632)\\r\\nNov 17 04:03:47 debian kernel: [    0.140680] Last level iTLB entries: 4KB 64, 2MB 8, 4MB 8\\r\\nNov 17 04:03:47 debian kernel: [    0.141412] Last level dTLB entries: 4KB 64, 2MB 0, 4MB 0, 1GB 4\\r\\nNov 17 04:03:47 debian kernel: [    0.142247] Spectre V1 : Mitigation: usercopy/swapgs barriers and __user pointer sanitization\\r\\nNov 17 04[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mUser Login Management\\u001b[0m.\\r\\n:03:47 debian kernel: [    0.143390] Spectre V2 : Mitigation: IBRS\\r\\nNov 17 04:03:47 debian kernel: [    0.143939] Spectre V2 : Spectre v2 / SpectreRSB mitigation: Filling RSB on context switch\\r\\nNov 17 04:03:47 debian kernel: [    0.144568] Spectre V2 : Spectre v2 / SpectreRSB : Filling RSB on VMEXIT\\r\\nNov 17 04:03:47 debian kernel: [    0.145466] RETBleed: Mitigation: IBRS\\r\\nNov 17 04:03:47 debian kernel: [    0.145988] Spectre V2 : mitigation: Enabling conditional Indirect Branch Prediction Barrier\\r\\nNov 17 04:03:47 debian kernel: [    0.147108] Speculative Store Bypass: Mitigation: Speculative Store Bypass disabled via prctl and seccomp\\r\\nNov 17 04:03:47 debian kernel: [    0.148575] MDS: Mitigation: Clear CPU buffers\\r\\nNov 17 04:03:47 debian systemd[1]: Finished Create list of static device nodes for the current kernel.\\r\\nNov 17 04:03:47 debian systemd[1]: modprobe@configfs.service: Succeeded.\\r\\nNov 17 04:03:47 debian systemd[1]: Finished Load Kernel Module configfs.\\r\\nNov 17 04:03:47 debian systemd[1]: modprobe@drm.service: Succeeded.\\r\\nNov 17 04:03:47 debian systemd[1]: Finished Load Kernel Module drm.\\r\\nNov 17 04:03:47 debian systemd[1]: modprobe@fuse.service: Succeeded.\\r\\nNov 17 04:03:47 debian systemd[1]: Finished Load Kernel Module fuse.\\r\\nNov 17 04:03:47 debian systemd[1]: Finished Load Kernel Modules.\\r\\nNov 17 04:03:47 debian systemd[1]: Finished Remount Root and Kernel File Systems.\\r\\nNov 17 04:03:47 debian systemd[1]: Mounting FUSE Control File System...\\r\\nNov 17 04:03:47 debian systemd[1]: Mounting Kernel Configuration File System...\\r\\nNov 17 04:03:47 debian systemd[1]: Starting Grow File System on /...\\r\\nNov 17 04:03:47 debian systemd[1]: Condition check resulted in Rebuild Hardware Database being skipped.\\r\\nNov 17 04:03:47 debian systemd[1]: Starting Flush Journal to Persistent Storage...\\r\\nNov 17 04:03:47 debian systemd[1]: Condition check resulted in Platform Persistent Storage Archival being skipped.\\r\\nNov 17 04:03:47 debian systemd[1]: Starting Load/Save Random Seed...\\r\\nNov 17 04:03:47 debian systemd-growfs[189]: Successfully resized \\\"/\\\" to 9.8G bytes (3584 bytes lost due to blocksize).\\r\\nNov 17 04:03:47 debian systemd[1]: Starting Apply Kernel Variables...\\r\\nNov 17 04:03:47 debian systemd[1]: Starting Create System Users...\\r\\nNov 17 04:03:47 debian systemd[1]: Finished Coldplug All udev Devices.\\r\\nNov 17 04:03:47 debian systemd-sysusers[193]: Creating group systemd-timesync with gid 999.\\r\\nNov 17 04:03:47 debian systemd-sysusers[193]: Creating user systemd-timesync (systemd Time Synchronization) with uid 999 and gid 999.\\r\\nNov 17 04:03:47 debian systemd-sysusers[193]: Creating group systemd-coredump with gid 998.\\r\\nNov 17 04:03:47 debian systemd-sysusers[193]: Creating user systemd-coredump (systemd Core Dumper) with uid 998 and gid 998.\\r\\nNov 17 04:03:47 debian systemd[1]: Mounted FUSE Control File System.\\r\\nNov 17 04:03:47 debian systemd[1]: Mounted Kernel Configuration File System.\\r\\nNov 17 04:03:47 debian systemd[1]: Finished Grow File System on /.\\r\\nNov 17 04:03:47 debian systemd[1]: Finished Flush Journal to Persistent Storage.\\r\\nNov 17 04:03:47 debian systemd[1]: Finished Load/Save Random Seed.\\r\\nNov 17 04:03:47 debian systemd[1]: Finished Apply Kernel Variables.\\r\\nNov 17 04:03:47 debian systemd[1]: Finished Create System Users.\\r\\nNov 17 04:03:47 debian kernel: [    0.149183] TAA: Mitigation: Clear CPU buffers\\r\\nNov 17 04:03:47 debian kernel: [    0.149789] MMIO Stale Data: Vulnerable: Clear CPU buffers attempted, no microcode\\r\\nNov 17 04:03:47 debian kernel: [    0.150817] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'\\r\\nNov 17 04:03:47 debian kernel: [    0.151849] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'\\r\\nNov 17 04:03:47 debian kernel: [    0.152568] x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers'\\r\\nNov 17 04:03:47 debian kernel: [    0.153445] x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]:  256\\r\\nNov 17 04:03:47 debian kernel: [    0.154319] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.\\r\\nNov 17 04:03:47 debian kernel: [    0.174317] Freeing SMP alternatives memory: 32K\\r\\nNov 17 04:03:47 debian kernel: [    0.176616] pid_max: default: 32768 minimum: 301\\r\\nNov 17 04:03:47 debian kernel: [    0.189921] LSM: Security Framework initializing\\r\\nNov 17 04:03:47 debian kernel: [    0.190777] Yama: disabled by default; enable with sysctl kernel.yama.*\\r\\nNov 17 04:03:47 debian kernel: [    0.191718] AppArmor: AppArmor initialized\\r\\nNov 17 04:03:47 debian kernel: [    0.192315] TOMOYO Linux initialized\\r\\nNov 17 04:03:47 debian kernel: [    0.192585] Mount-cache hash table entries: 2048 (order: 2, 16384 bytes, linear)\\r\\nNov 17 04:03:47 debian kernel: [    0.193586] Mountpoint-cache hash table entries: 2048 (order: 2, 16384 bytes, linear)\\r\\nNov 17 04:03:47 debian kernel: [    0.303707] smpboot: CPU0: Intel(R) Xeon(R) CPU @ 2.20GHz (family: 0x6, model: 0x4f, stepping: 0x0)\\r\\nNov 17 04:03:47 debian kernel: [    0.304567] Performance Events: unsupported p6 CPU model 79 no PMU driver, software events only.\\r\\nNov 17 04:03:47 debian kernel: [    0.304567] rcu: Hierarchical SRCU implementation.\\r\\nNov 17 04:03:47 debian kernel: [    0.304567] NMI watchdog: Perf NMI watchdog permanently disabled\\r\\nNov 17 04:03:47 debian kernel: [    0.304607] smp: Bringing up secondary CPUs ...\\r\\nNov 17 04:03:47 debian kernel: [    0.305254] smp: Brought up 1 node, 1 CPU\\r\\nNov 17 04:03:47 debian kernel: [    0.305804] smpboot: Max logical packages: 1\\r\\nNov 17 04:03:47 debian kernel: [    0.306388] smpboot: Total of 1 processors activated (4400.31 BogoMIPS)\\r\\nNov 17 04:03:47 debian kernel: [    0.309894] node 0 deferred pages initialised in 4ms\\r\\nNov 17 04:03:47 debian kernel: [    0.310840] devtmpfs: initialized\\r\\nNov 17 04:03:47 debian kernel: [    0.311414] x86/mm: Memory block size: 128MB\\r\\nNov 17 04:03:47 debian kernel: [    0.312326] PM: Registering ACPI NVS region [mem 0x2617f000-0x261fefff] (524288 bytes)\\r\\nNov 17 04:03:47 debian kernel: [    0.312624] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns\\r\\nNov 17 04:03:47 debian kernel: [    0.313984] futex hash table entries: 256 (order: 2, 16384 bytes, linear)\\r\\nNov 17 04:03:47 debian kernel: [    0.315079] NET: Registered protocol family 16\\r\\nNov 17 04:03:47 debian kernel: [    0.316708] DMA: preallocated 128 KiB GFP_KERNEL pool for atomic allocations\\r\\nNov 17 04:03:47 debian kernel: [    0.317887] DMA: preallocated 128 KiB GFP_KERNEL|GFP_DMA pool for atomic allocations\\r\\nNov 17 04:03:47 debian kernel: [    0.319088] DMA: preallocated 128 KiB GFP_KERNEL|GFP_DMA32 pool for atomic allocations\\r\\nNov 17 04:03:47 debian kernel: [    0.320255] audit: initializing netlink subsys (disabled)\\r\\nNov 17 04:03:47 debian kernel: [    0.320680] thermal_sys: Registered thermal governor 'fair_share'\\r\\nNov 17 04:03:47 debian kernel: [    0.320681] thermal_sys: Registered thermal governor 'bang_bang'\\r\\nNov 17 04:03:47 debian kernel: [    0.321534] thermal_sys: Registered thermal governor 'step_wise'\\r\\nNov 17 04:03:47 debian kernel: [    0.322340] thermal_sys: Registered thermal governor 'user_space'\\r\\nNov 17 04:03:47 debian kernel: [    0.323166] thermal_sys: Registered thermal governor 'power_allocator'\\r\\nNov 17 04:03:47 debian kernel: [    0.324578] audit: type=2000 audit(1700193823.829:1): state=initialized audit_enabled=0 res=1\\r\\nNov 17 04:03:47 debian kernel: [    0.326750] cpuidle: using governor ladder\\r\\nNov 17 04:03:47 debian kernel: [    0.327347] cpuidle: using governor menu\\r\\nNov 17 04:03:47 debian kernel: [    0.327968] ACPI: bus type PCI registered\\r\\nNov 17 04:03:47 debian kernel: [    0.328539] acpiphp: ACPI Hot Plug PCI Controller Driver version: 0.5\\r\\nNov 17 04:03:47 debian kernel: [    0.328668] PCI: Using configuration type 1 for base access\\r\\nNov 17 04:03:47 debian kernel: [    0.330144] Kprobes globally optimized\\r\\nNov 17 04:03:47 debian kernel: [    0.330823] HugeTLB registered 1.00 GiB page size, pre-allocated 0 pages\\r\\nNov 17 04:03:47 debian kernel: [    0.332570] HugeTLB registered 2.00 MiB page size, pre-allocated 0 pages\\r\\nNov 17 04:03:47 debian kernel: [    0.460132] ACPI: Added _OSI(Module Device)\\r\\nNov 17 04:03:47 debian kernel: [    0.460570] ACPI: Added _OSI(Processor Device)\\r\\nNov 17 04:03:47 debian kernel: [    0.461236] ACPI: Added _OSI(3.0 _SCP Extensions)\\r\\nNov 17 04:03:47 debian kernel: [    0.461875] ACPI: Added _OSI(Processor Aggregator Device)\\r\\nNov 17 04:03:47 debian kernel: [    0.462629] ACPI: Added _OSI(Linux-Dell-Video)\\r\\nNov 17 04:03:47 debian kernel: [    0.463234] ACPI: Added _OSI(Linux-Lenovo-NV-HDMI-Audio)\\r\\nNov 17 04:03:47 debian kernel: [    0.463951] ACPI: Added _OSI(Linux-HPI-Hybrid-Graphics)\\r\\nNov 17 04:03:47 debian kernel: [    0.465493] ACPI: 3 ACPI AML tables successfully acquired and loaded\\r\\nNov 17 04:03:47 debian kernel: [    0.467274] ACPI: Interpreter enabled\\r\\nNov 17 04:03:47 debian kernel: [    0.467821] ACPI: (supports S0 S3 S4 S5)\\r\\nNov 17 04:03:47 debian kernel: [    0.468579] ACPI: Using IOAPIC for interrupt routing\\r\\nNov 17 04:03:47 debian kernel: [    0.469275] PCI: Using host bridge windows from ACPI; if necessary, use \\\"pci=nocrs\\\" and report a bug\\r\\nNov 17 04:03:47 debian kernel: [    0.470653] ACPI: Enabled 16 GPEs in block 00 to 0F\\r\\nNov 17 04:03:47 debian kernel: [    0.473239] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff])\\r\\nNov 17 04:03:47 debian kernel: [    0.474122] acpi PNP0A03:00: _OSC: OS supports [ASPM ClockPM Segments MSI HPX-Type3]\\r\\nNov 17 04:03:47 debian kernel: [    0.475162] acpi PNP0A03:00: fail to add MMCONFIG information, can't access extended PCI configuration space under this bridge.\\r\\nNov 17 04:03:47 debian kernel: [    0.477146] PCI host bridge to bus 0000:00\\r\\nNov 17 04:03:47 debian kernel: [    0.477709] pci_bus 0000:00: root bus resource [io  0x0000-0x0cf7 window]\\r\\nNov 17 04:03:47 debian kernel: [    0.478715] pci_bus 0000:00: root bus resource [io  0x0d00-0xffff window]\\r\\nNov 17 04:03:47 debian kernel: [    0.479663] pci_bus 0000:00: root bus resource [mem 0x000a0000-0x000bffff window]\\r\\nNov 17 04:03:47 debian kernel: [    0.480578] pci_bus 0000:00: root bus resource [mem 0x80000000-0xfebfefff window]\\r\\nNov 17 04:03:47 debian kernel: [    0.481576] pci_bus 0000:00: root bus resource [bus 00-ff]\\r\\nNov 17 04:03:47 debian kernel: [    0.482365] pci 0000:00:00.0: [8086:1237] type 00 class 0x060000\\r\\nNov 17 04:03:47 debian kernel: [    0.486019] pci 0000:00:01.0: [8086:7110] type 00 class 0x060100\\r\\nNov 17 04:03:47 debian kernel: [    0.500825] pci 0000:00:01.3: [8086:7113] type 00 class 0x068000\\r\\nNov 17 04:03:47 debian kernel: [    0.519681] pci 0000:00:01.3: quirk: [io  0xb000-0xb03f] claimed by PIIX4 ACPI\\r\\nNov 17 04:03:47 debian kernel: [    0.520874] pci 0000:00:03.0: [1af4:1004] type 00 class 0x000000\\r\\nNov 17 04:03:47 debian kernel: [    0.528575] pci 0000:00:03.0: reg 0x10: [io  0xc040-0xc07f]\\r\\nNov 17 04:03:47 debian kernel: [    0.533672] pci 0000:00:03.0: reg 0x14: [mem 0x80000000-0x8000007f]\\r\\nNov 17 04:03:47 debian kernel: [    0.548861] pci 0000:00:04.0: [1af4:1000] type 00 class 0x020000\\r\\nNov 17 04:03:47 debian kernel: [    0.555665] pci 0000:00:04.0: reg 0x10: [io  0xc000-0xc03f]\\r\\nNov 17 04:03:47 debian kernel: [    0.560572] pci 0000:00:04.0: reg 0x14: [mem 0x80002000-0x8000203f]\\r\\nNov 17 04:03:47 debian kernel: [    0.573906] pci 0000:00:05.0: [1af4:1005] type 00 class 0x00ff00\\r\\nNov 17 04:03:47 debian kernel: [    0.580574] pci 0000:00:05.0: reg 0x10: [io  0xc080-0xc09f]\\r\\nNov 17 04:03:47 debian kernel: [    0.586726] pci 0000:00:05.0: reg 0x14: [mem 0x80001000-0x8000103f]\\r\\nNov 17 04:03:47 debian kernel: [    0.601296] ACPI: PCI Interrupt Link [LNKA] (IRQs 5 *10 11)\\r\\nNov 17 04:03:47 debian kernel: [    0.603312] ACPI: PCI Interrupt Link [LNKB] (IRQs 5 *10 11)\\r\\nNov 17 04:03:47 debian kernel: [    0.605636] ACPI: PCI Interrupt Link [LNKC] (IRQs 5 10 *11)\\r\\nNov 17 04:03:47 debian kernel: [    0.607598] ACPI: PCI Interrupt Link [LNKD] (IRQs 5 10 *11)\\r\\nNov 17 04:03:47 debian kernel: [    0.611697] ACPI: PCI Interrupt Link [LNKS] (IRQs *9)\\r\\nNov 17 04:03:47 debian kernel: [    0.612813] iommu: Default domain type: Translated \\r\\nNov 17 04:03:47 debian kernel: [    0.613589] vgaarb: loaded\\r\\nNov 17 04:03:47 debian kernel: [    0.614061] Registered efivars operations\\r\\nNov 17 04:03:47 debian kernel: [    0.614787] NetLabel: Initializing\\r\\nNov 17 04:03:47 debian kernel: [    0.615327] NetLabel:  domain hash size = 128\\r\\nNov 17 04:03:47 debian kernel: [    0.615923] NetLabel:  protocols = UNLABELED CIPSOv4 CALIPSO\\r\\nNov 17 04:03:47 debian kernel: [    0.616587] NetLabel:  unlabeled traffic allowed by default\\r\\nNov 17 04:03:47 debian kernel: [    0.617348] PCI: Using ACPI for IRQ routing\\r\\nNov 17 04:03:47 debian kernel: [    0.617922] PCI: pci_cache_line_size set to 64 bytes\\r\\nNov 17 04:03:47 debian kernel: [    0.618015] e820: r[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mRemove Stale Onli…ext4 Metadata Check Snapshots\\u001b[0m.\\r\\neserve RAM buffer [mem 0x00055000-0x0005ffff]\\r\\nNov 17 04:03:47 debian kernel: [    0.618017] e820: reserve RAM buffer [mem 0x00098000-0x0009ffff]\\r\\nNov 17 04:03:47 debian kernel: [    0.618018] e820: reserve RAM buffer [mem 0x25eed000-0x27ffffff]\\r\\nNov 17 04:03:47 debian kernel: [    0.618019] e820: reserve RAM buffer [mem 0x265e0000-0x27ffffff]\\r\\nNov 17 04:03:47 debian kernel: [    0.618056] clocksource: Switched to clocksource kvm-clock\\r\\nNov 17 04:03:47 debian kernel: [    0.628891] VFS: Disk quotas dquot_6.6.0\\r\\nNov 17 04:03:47 debian kernel: [    0.629490] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)\\r\\nNov 17 04:03:47 debian kernel: [    0.630665] AppArmor: AppArmor Filesystem Enabled\\r\\nNov 17 04:03:47 debian kernel: [    0.631324] pnp: PnP ACPI init\\r\\nNov 17 04:03:47 debian kernel: [    0.631808] pnp 00:00: Plug and Play ACPI device, IDs PNP0b00 (active)\\r\\nNov 17 04:03:47 debian kernel: [    0.631858] pnp 00:01: Plug and Play ACPI device, IDs PNP0303 (active)\\r\\nNov 17 04:03:47 debian kernel: [    0.631890] pnp 00:02: Plug and Play ACPI device, IDs PNP0f13 (active)\\r\\nNov 17 04:03:47 debian kernel: [    0.631928] pnp 00:03: Plug and Play ACPI device, IDs PNP0501 (active)\\r\\nNov 17 04:03:47 debian kernel: [    0.631957] pnp 00:04: Plug and Play ACPI device, IDs PNP0501 (active)\\r\\nNov 17 04:03:47 debian kernel: [    0.631986] pnp 00:05: Plug and Play ACPI device, IDs PNP0501 (active)\\r\\nNov 17 04:03:47 debian kernel: [    0.632018] pnp 00:06: Plug and Play ACPI device, IDs PNP0501 (active)\\r\\nNov 17 04:03:47 debian kernel: [    0.632174] pnp: PnP ACPI: found 7 devices\\r\\nNov 17 04:03:47 debian kernel: [    0.638068] clocksource: acpi_pm: mask: 0xffffff max_cycles: 0xffffff, max_idle_ns: 2085701024 ns\\r\\nNov 17 04:03:47 debian kernel: [    0.639390] NET: Registered protocol family 2\\r\\nNov 17 04:03:47 debian kernel: [    0.640279] IP idents hash table entries: 16384 (order: 5, 131072 bytes, linear)\\r\\nNov 17 04:03:47 debian kernel: [    0.642617] tcp_listen_portaddr_hash hash table entries: 512 (order: 1, 8192 bytes, linear)\\r\\nNov 17 04:03:47 debian kernel: [    0.643878] TCP established hash table entries: 8192 (order: 4, 65536 bytes, linear)\\r\\nNov 17 04:03:47 debian kernel: [    0.644963] TCP bind hash table entries: 8192 (order: 5, 131072 bytes, linear)\\r\\nNov 17 04:03:47 debian kernel: [    0.645946] TCP: Hash tables configured (established 8192 bind 8192)\\r\\nNov 17 04:03:47 debian kernel: [    0.647263] UDP hash table entries: 512 (order: 2, 16384 bytes, linear)\\r\\nNov 17 04:03:47 debian kernel: [    0.648178] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes, linear)\\r\\nNov 17 04:03:47 debian kernel: [    0.649145] NET: Registered protocol family 1\\r\\nNov 17 04:03:47 debian kernel: [    0.649746] NET: Registered protocol family 44\\r\\nNov 17 04:03:47 debian kernel: [    0.650360] pci_bus 0000:00: resource 4 [io  0x0000-0x0cf7 window]\\r\\nNov 17 04:03:47 debian kernel: [    0.651189] pci_bus 0000:00: resource 5 [io  0x0d00-0xffff window]\\r\\nNov 17 04:03:47 debian kernel: [    0.652018] pci_bus 0000:00: resource 6 [mem 0x000a0000-0x000bffff window]\\r\\nNov 17 04:03:47 debian kernel: [    0.653023] pci_bus 0000:00: resource 7 [mem 0x80000000-0xfebfefff window]\\r\\nNov 17 04:03:47 debian kernel: [    0.654013] pci 0000:00:00.0: Limiting direct PCI/PCI transfers\\r\\nNov 17 04:03:47 debian kernel: [    0.654965] PCI: CLS 0 bytes, default 64\\r\\nNov 17 04:03:47 debian kernel: [    0.655545] Trying to unpack rootfs image as initramfs...\\r\\nNov 17 04:03:47 debian kernel: [    0.868747] Freeing initrd memory: 13832K\\r\\nNov 17 04:03:47 debian kernel: [    0.869409] clocksource: tsc: mask: 0xffffffffffffffff max_cycles: 0x1fb6c80a799, max_idle_ns: 440795272342 ns\\r\\nNov 17 04:03:47 debian kernel: [    0.870790] clocksource: Switched to clocksource tsc\\r\\nNov 17 04:03:47 debian kernel: [    0.871684] Initialise system trusted keyrings\\r\\nNov 17 04:03:47 debian kernel: [    0.872370] Key type blacklist registered\\r\\nNov 17 04:03:47 debian kernel: [    0.872996] workingset: timestamp_bits=36 max_order=18 bucket_order=0\\r\\nNov 17 04:03:47 debian kernel: [    0.874768] zbud: loaded\\r\\nNov 17 04:03:47 debian kernel: [    0.875451] Key type asymmetric registered\\r\\nNov 17 04:03:47 debian kernel: [    0.876015] Asymmetric key parser 'x509' registered\\r\\nNov 17 04:03:47 debian kernel: [    0.876717] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 252)\\r\\nNov 17 04:03:47 debian kernel: [    0.877753] io scheduler mq-deadline registered\\r\\nNov 17 04:03:47 debian kernel: [    0.878944] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled\\r\\nNov 17 04:03:47 debian kernel: [    0.879891] 00:03: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A\\r\\nNov 17 04:03:47 debian kernel: [    0.881103] 00:04: ttyS1 at I/O 0x2f8 (irq = 3, base_baud = 115200) is a 16550A\\r\\nNov 17 04:03:47 debian kernel: [    0.882343] 00:05: ttyS2 at I/O 0x3e8 (irq = 6, base_baud = 115200) is a 16550A\\r\\nNov 17 04:03:47 debian kernel: [    0.883609] 00:06: ttyS3 at I/O 0x2e8 (irq = 7, base_baud = 115200) is a 16550A\\r\\nNov 17 04:03:47 debian kernel: [    0.884960] i8042: PNP: PS/2 Controller [PNP0303:KBD,PNP0f13:MOU] at 0x60,0x64 irq 1,12\\r\\nNov 17 04:03:47 debian kernel: [    0.886134] i8042: Warning: Keylock active\\r\\nNov 17 04:03:47 debian kernel: [    0.888083] serio: i8042 KBD port at 0x60,0x64 irq 1\\r\\nNov 17 04:03:47 debian kernel: [    0.888821] serio: i8042 AUX port at 0x60,0x64 irq 12\\r\\nNov 17 04:03:47 debian kernel: [    0.889640] rtc_cmos 00:00: RTC can wake from S4\\r\\nNov 17 04:03:47 debian kernel: [    0.890965] rtc_cmos 00:00: registered as rtc0\\r\\nNov 17 04:03:47 debian kernel: [    0.891673] rtc_cmos 00:00: setting system clock to 2023-11-17T04:03:44 UTC (1700193824)\\r\\nNov 17 04:03:47 debian kernel: [    0.892826] rtc_cmos 00:00: alarms up to one day, 114 bytes nvram\\r\\nNov 17 04:03:47 debian kernel: [    0.893666] intel_pstate: CPU model not supported\\r\\nNov 17 04:03:47 debian kernel: [    0.894500] NET: Registered protocol family 10\\r\\nNov 17 04:03:47 debian kernel: [    0.902476] Segment Routing with IPv6\\r\\nNov 17 04:03:47 debian kernel: [    0.903051] mip6: Mobile IPv6\\r\\nNov 17 04:03:47 debian kernel: [    0.903490] NET: Registered protocol family 17\\r\\nNov 17 04:03:47 debian kernel: [    0.904345] IPI shorthand broadcast: enabled\\r\\nNov 17 04:03:47 debian kernel: [    0.904948] sched_clock: Marking stable (892139515, 12093408)-\\u003e(906097741, -1864818)\\r\\nNov 17 04:03:47 debian kernel: [    0.906042] registered taskstats version 1\\r\\nNov 17 04:03:47 debian kernel: [    0.906630] Loading compiled-in X.509 certificates\\r\\nNov 17 04:03:47 debian kernel: [    0.939254] Loaded X.509 cert 'Debian Secure Boot CA: 6ccece7e4c6c0d1f6149f3dd27dfcc5cbb419ea1'\\r\\nNov 17 04:03:47 debian kernel: [    0.940959] Loaded X.509 cert 'Debian Secure Boot Signer 2022 - linux: 14011249c2675ea8e5148542202005810584b25f'\\r\\nNov 17 04:03:47 debian kernel: [    0.942356] Key type .fscrypt registered\\r\\nNov 17 04:03:47 debian kernel: [    0.942899] Key type fscrypt-provisioning registered\\r\\nNov 17 04:03:47 debian kernel: [    0.943613] AppArmor: AppArmor sha1 policy hashing enabled\\r\\nNov 17 04:03:47 debian kernel: [    0.945910] Freeing unused decrypted memory: 2036K\\r\\nNov 17 04:03:47 debian kernel: [    0.947243] Freeing unused kernel image (initmem) memory: 2468K\\r\\nNov 17 04:03:47 debian kernel: [    0.956128] Write protecting the kernel read-only data: 22528k\\r\\nNov 17 04:03:47 debian kernel: [    0.957663] Freeing unused kernel image (text/rodata gap) memory: 2036K\\r\\nNov 17 04:03:47 debian kernel: [    0.958870] Freeing unused kernel image (rodata/data gap) memory: 1236K\\r\\nNov 17 04:03:47 debian kernel: [    0.960268] x86/mm: Checked W+X mappings: passed, no W+X pages found.\\r\\nNov 17 04:03:47 debian kernel: [    0.961209] x86/mm: Checking user space page tables\\r\\nNov 17 04:03:47 debian kernel: [    0.961951] x86/mm: Checked W+X mappings: passed, no W+X pages found.\\r\\nNov 17 04:03:47 debian kernel: [    0.962845] Run /init as init process\\r\\nNov 17 04:03:47 debian kernel: [    0.963353]   with arguments:\\r\\nNov 17 04:03:47 debian kernel: [    0.963353]     /init\\r\\nNov 17 04:03:47 debian kernel: [    0.963354]   with environment:\\r\\nNov 17 04:03:47 debian kernel: [    0.963355]     HOME=/\\r\\nNov 17 04:03:47 debian kernel: [    0.963355]     TERM=linux\\r\\nNov 17 04:03:47 debian kernel: [    0.963356]     BOOT_IMAGE=/boot/vmlinuz-5.10.0-26-cloud-amd64\\r\\nNov 17 04:03:47 debian kernel: [    0.963357]     intel_iommu=off\\r\\nNov 17 04:03:47 debian kernel: [    1.027130] PCI Interrupt Link [LNKC] enabled at IRQ 11\\r\\nNov 17 04:03:47 debian kernel: [    1.027936] virtio-pci 0000:00:03.0: virtio_pci: leaving for legacy driver\\r\\nNov 17 04:03:47 debian kernel: [    1.056157] PCI Interrupt Link [LNKD] enabled at IRQ 10\\r\\nNov 17 04:03:47 debian kernel: [    1.056936] virtio-pci 0000:00:04.0: virtio_pci: leaving for legacy driver\\r\\nNov 17 04:03:47 debian kernel: [    1.062192] PCI Interrupt Link [LNKA] enabled at IRQ 10\\r\\nNov 17 04:03:47 debian kernel: [    1.062992] virtio-pci 0000:00:05.0: virtio_pci: leaving for legacy driver\\r\\nNov 17 04:03:47 debian kernel: [    1.084419] SCSI subsystem initialized\\r\\nNov 17 04:03:47 debian kernel: [    1.093724] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input0\\r\\nNov 17 04:03:47 debian kernel: [    1.118084] virtio_net virtio1 ens4: renamed from eth0\\r\\nNov 17 04:03:47 debian kernel: [    1.126364] scsi host0: Virtio SCSI HBA\\r\\nNov 17 04:03:47 debian kernel: [    1.133045] scsi 0:0:1:0: Direct-Access     Google   PersistentDisk   1    PQ: 0 ANSI: 6\\r\\nNov 17 04:03:47 debian kernel: [    1.153482] sd 0:0:1:0: [sda] 20971520 512-byte logical blocks: (10.7 GB/10.0 GiB)\\r\\nNov 17 04:03:47 debian kernel: [    1.154594] sd 0:0:1:0: [sda] 4096-byte physical blocks\\r\\nNov 17 04:03:47 debian kernel: [    1.155471] sd 0:0:1:0: [sda] Write Protect is off\\r\\nNov 17 04:03:47 debian kernel: [    1.156202] sd 0:0:1:0: [sda] Mode Sense: 1f 00 00 08\\r\\nNov 17 04:03:47 debian kernel: [    1.156440] sd 0:0:1:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA\\r\\nNov 17 04:03:47 debian kernel: [    1.160803]  sda: sda1 sda14 sda15\\r\\nNov 17 04:03:47 debian kernel: [    1.172566] sd 0:0:1:0: [sda] Attached SCSI disk\\r\\nNov 17 04:03:47 debian kernel: [    1.222901]  sda: sda1 sda14 sda15\\r\\nNov 17 04:03:47 debian kernel: [    1.303453] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null)\\r\\nNov 17 04:03:47 debian kernel: [    1.328083] Not activating Mandatory Access Control as /sbin/tomoyo-init does not exist.\\r\\nNov 17 04:03:47 debian kernel: [    2.335869] fuse: init (API version 7.32)\\r\\nNov 17 04:03:47 debian kernel: [    2.397669] EXT4-fs (sda1): re-mounted. Opts: discard,errors=remount-ro\\r\\nNov 17 04:03:47 debian kernel: [    2.550327] EXT4-fs (sda1): resizing filesystem from 2588667 to 2588667 blocks\\r\\nNov 17 04:03:47 debian kernel: [    2.817742] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input2\\r\\nNov 17 04:03:47 debian kernel: [    2.832340] ACPI: Power Button [PWRF]\\r\\nNov 17 04:03:47 debian kernel: [    2.832937] input: Sleep Button as /devices/LNXSYSTM:00/LNXSLPBN:00/input/input3\\r\\nNov 17 04:03:47 debian kernel: [    2.833954] ACPI: Sleep Button [SLPF]\\r\\nNov 17 04:03:47 debian kernel: [    2.858324] sd 0:0:1:0: Attached scsi generic sg0 type 0\\r\\nNov 17 04:03:47 debian kernel: [    2.868718] tpm_tis MSFT0101:00: 2.0 TPM (device-id 0x9009, rev-id 0)\\r\\nNov 17 04:03:47 debian kernel: [    2.876076] pstore: Using crash dump compression: deflate\\r\\nNov 17 04:03:47 debian kernel: [    2.876906] pstore: Registered efi as persistent store backend\\r\\nNov 17 04:03:47 debian kernel: [    2.921526] RAPL PMU: API unit is 2^-32 Joules, 0 fixed counters, 10737418240 ms ovfl timer\\r\\nNov 17 04:03:47 debian kernel: [    2.957276] cryptd: max_cpu_qlen set to 1000\\r\\nNov 17 04:03:47 debian kernel: [    2.992561] AVX2 version of gcm_enc/dec engaged.\\r\\nNov 17 04:03:47 debian kernel: [    2.993287] AES CTR mode by8 optimization enabled\\r\\nNov 17 04:03:47 debian kernel: [    3.408377] audit: type=1400 audit(1700193827.016:2): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"nvidia_modprobe\\\" pid=292 comm=\\\"apparmor_parser\\\"\\r\\nNov 17 04:03:47 debian kernel: [    3.411744] audit: type=1400 audit(1700193827.016:3): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"nvidia_modprobe//kmod\\\" pid=292 comm=\\\"apparmor_parser\\\"\\r\\nNov 17 04:03:47 debian kernel: [    3.496816] audit: type=1400 audit(1700193827.104:4): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"/usr/sbin/chronyd\\\" pid=293 comm=\\\"apparmor_parser\\\"\\r\\nNov 17 04:03:47 debian kernel: [    3.538548] audit: type=1400 audit(1700193827.144:5): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"lsb_release\\\" pid=294 comm=\\\"apparmor_parser\\\"\\r\\nNov 17 04:03:47 debian kernel: [    3.657331] audit: type=1400 audit(1700193827.264:6): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"tcpdump\\\" pid=295 comm=\\\"apparmor_parser\\\"\\r\\nNov 17 04:03:47 debian kernel: [    3.687179] audit: type=1400 audit(1700193827.292:7): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"/usr/sbin/haveged\\\" pid=296 comm=\\\"apparmor_parser\\\"\\r\\nNov 17 04:03:47 debian kernel: [    3.752802] audit: type=1400 audit(1700193827.360:8): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"/usr/bin/man\\\" pid=297 comm=\\\"apparmor_parser\\\"\\r\\nNov 17 04:03:47 debian kernel: [    3.755808] audit: type=1400 audit(1700193827.360:9): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"man_filter\\\" pid=297 comm=\\\"apparmor_parser\\\"\\r\\nNov 17 04:03:47 debian kernel: [    3.760565] audit: type=1400 audit(1700193827.364:10): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"man_groff\\\" pid=297 comm=\\\"apparmor_parser\\\"\\r\\nNov 17 04:03:47 debian systemd[1]: Condition check resulted in First Boot Complete being skipped.\\r\\nNov 17 04:03:47 debian systemd[1]: Starting Helper to synchronize boot up for ifupdown...\\r\\nNov 17 04:03:47 debian systemd[1]: Starting Create Static Device Nodes in /dev...\\r\\nNov 17 04:03:47 debian systemd[1]: Finished Helper to synchronize boot up for ifupdown.\\r\\nNov 17 04:03:47 debian systemd[1]: Finished Create Static Device Nodes in /dev.\\r\\nNov 17 04:03:47 debian systemd[1]: Reached target Local File Systems (Pre).\\r\\nNov 17 04:03:47 debian systemd[1]: Starting Rule-based Manager for Device Events and Files...\\r\\nNov 17 04:03:47 debian systemd[1]: Started Rule-based Manager for Device Events and Files.\\r\\nNov 17 04:03:47 debian systemd-udevd[200]: Using default interface naming scheme 'v247'.\\r\\nNov 17 04:03:47 debian systemd-udevd[200]: ethtool: autonegotiation is unset or enabled, the speed and duplex are not writable.\\r\\nNov 17 04:03:47 debian systemd[1]: Found device /dev/ttyS0.\\r\\nNov 17 04:03:47 debian systemd-udevd[199]: ethtool: autonegotiation is unset or enabled, the speed and duplex are not writable.\\r\\nNov 17 04:03:47 debian systemd[1]: Found device PersistentDisk 15.\\r\\nNov 17 04:03:47 debian cloud-ifupdown-helper: Generated configuration for ens4\\r\\nNov 17 04:03:47 debian systemd[1]: Mounting /boot/efi...\\r\\nNov 17 04:03:47 debian systemd[1]: Mounted /boot/efi.\\r\\nNov 17 04:03:47 debian systemd[1]: Found device Virtio network device.\\r\\nNov 17 04:03:47 debian systemd[1]: Reached target Local File Systems.\\r\\nNov 17 04:03:47 debian systemd[1]: Starting Load AppArmor profiles...\\r\\nNov 17 04:03:47 debian systemd[1]: Condition check resulted in Store a System Token in an EFI Variable being skipped.\\r\\nNov 17 04:03:47 debian systemd[1]: Starting Commit a transient machine-id on disk...\\r\\nNov 17 04:03:47 debian apparmor.systemd[283]: Restarting AppArmor\\r\\nNov 17 04:03:47 debian apparmor.systemd[283]: Reloading AppArmor profiles\\r\\nNov 17 04:03:47 debian systemd[1]: Starting Create Volatile Files and Directories...\\r\\nNov 17 04:03:47 debian systemd[1]: Finished Create Volatile Files and Directories.\\r\\nNov 17 04:03:47 debian systemd[1]: Starting Update UTMP about System Boot/Shutdown...\\r\\nNov 17 04:03:47 debian systemd[1]: Finished Update UTMP about System Boot/Shutdown.\\r\\nNov 17 04:03:47 debian systemd[1]: etc-machine\\\\x2did.mount: Succeeded.\\r\\nNov 17 04:03:47 debian systemd[1]: Finished Commit a transient machine-id on disk.\\r\\nNov 17 04:03:47 debian systemd[1]: Finished Load AppArmor profiles.\\r\\nNov 17 04:03:47 debian systemd[1]: Started Entropy Daemon based on the HAVEGE algorithm.\\r\\nNov 17 04:03:47 debian systemd[1]: Reached target System Initialization.\\r\\nNov 17 04:03:47 debian haveged[298]: haveged: command socket is listening at fd 3\\r\\nNov 17 04:03:47 debian systemd[1]: Started GCE Workload Certificate refresh timer.\\r\\nNov 17 04:03:47 debian systemd[1]: Started NSS cache refresh timer.\\r\\nNov 17 04:03:47 debian systemd[1]: Started Daily Cleanup of Temporary Directories.\\r\\nNov 17 04:03:47 debian systemd[1]: Listening on D-Bus System Message Bus Socket.\\r\\nNov 17 04:03:47 debian systemd[1]: Listening on UUID daemon activation socket.\\r\\nNov 17 04:03:47 debian systemd[1]: Reached target Sockets.\\r\\nNov 17 04:03:47 debian systemd[1]: Starting Resize root filesystem if needed...\\r\\nNov 17 04:03:47 debian systemd[1]: Started ifup for ens4.\\r\\nNov 17 04:03:47 debian google_disk_expand[299]: Checking if filesystem on /dev/sda1 needs resizing\\r\\nNov 17 04:03:47 debian systemd[1]: Starting Raise network interfaces...\\r\\nNov 17 04:03:47 debian google_disk_expand[309]: resize2fs 1.46.2 (28-Feb-2021)\\r\\nNov 17 04:03:47 debian google_disk_expand[309]: The filesystem is already 2588667 (4k) blocks long.  Nothing to do!\\r\\nNov 17 04:03:47 debian google_disk_expand[299]: Done.\\r\\nNov 17 04:03:47 debian systemd[1]: google-disk-expand.service: Succeeded.\\r\\nNov 17 04:03:47 debian systemd[1]: Finished Resize root filesystem if needed.\\r\\nNov 17 04:03:47 debian systemd[1]: Reached target Basic System.\\r\\nNov 17 04:03:47 debian systemd[1]: Started Regular background program processing daemon.\\r\\nNov 17 04:03:47 debian systemd[1]: Started D-Bus System Message Bus.\\r\\nNov 17 04:03:47 debian systemd[1]: Starting Remove Stale Online ext4 Metadata Check Snapshots...\\r\\nNov 17 04:03:47 debian dhclient[321]: Internet Systems Consortium DHCP Client 4.4.1\\r\\nNov 17 04:03:47 debian sh[321]: Internet Systems Consortium DHCP Client 4.4.1\\r\\nNov 17 04:03:47 debian dhclient[321]: Copyright 2004-2018 Internet Systems Consortium.\\r\\nNov 17 04:03:47 debian sh[321]: Copyright 2004-2018 Internet Systems Consortium.\\r\\nNov 17 04:03:47 debian dhclient[321]: All rights reserved.\\r\\nNov 17 04:03:47 debian sh[321]: All rights reserved.\\r\\nNov 17 04:03:47 debian dhclient[321]: For info, please visit https://www.isc.org/software/dhcp/\\r\\nNov 17 04:03:47 debian sh[321]: For info, please visit https://www.isc.org/software/dhcp/\\r\\nNov 17 04:03:47 debian dhclient[321]: \\r\\nNov 17 04:03:47 debian systemd[1]: Condition check resulted in getty on tty2-tty6 if dbus and logind are not available being skipped.\\r\\nNov 17 04:03:47 debian systemd[1]: Starting System Logging Service...\\r\\nNov 17 04:03:47 debian systemd[1]: Starting User Login Management...\\r\\nNov 17 04:03:47 debian systemd[1]: Started System Logging Service.\\r\\nNov 17 04:03:47 debian ifup[304]: ifup: waiting for lock on /run/network/ifstate.ens4\\r\\nNov 17 04:03:47 debian dhclient[321]: Listening on LPF/ens4/42:01:0a:9a:00:0c\\r\\nNov 17 04:03:47 debian sh[321]: Listening on LPF/ens4/42:01:0a:9a:00:0c\\r\\nNov 17 04:03:47 debian sh[321]: Sending on   LPF/ens4/42:01:0a:9a:00:0c\\r\\nNov 17 04:03:47 debian sh[321]: Sending on   Socket/fallback\\r\\nNov 17 04:03:47 debian sh[321]: Created duid \\\"\\\\000\\\\001\\\\000\\\\001,\\\\351\\\\242\\\\243B\\\\001\\\\012\\\\232\\\\000\\\\014\\\".\\r\\nNov 17 04:03:47 debian sh[321]: DHCPDISCOVER on ens4 to 255.255.255.255 port 67 interval 7\\r\\nNov 17 04:03:47 debian dhclient[321]: Sending on   LPF/ens4/42:01:0a:9a:00:0c\\r\\nNov 17 04:03:47 debian dhclient[321]: Sending on   Socket/fallback\\r\\nNov 17 04:03:47 debian dhclient[321]: Created duid \\\"\\\\000\\\\001\\\\000\\\\001,\\\\351\\\\242\\\\243B\\\\001\\\\012\\\\232\\\\000\\\\014\\\".\\r\\nNov 17 04:03:47 debian dhclient[321]: DHCPDISCOVER on ens4 to 255.255.255.255 port 67 interval 7\\r\\nNov 17 04:03:47 debian dhclient[321]: DHCPOFFER of 10.154.0.12 from 169.254.169.254\\r\\nNov 17 04:03:47 debian sh[321]: DHCPOFFER of 10.154.0.12 from 169.254.169.254\\r\\nNov 17 04:03:47 debian sh[321]: DHCPREQUEST for 10.154.0.12 on ens4 to 255.255.255.255 port 67\\r\\nNov 17 04:03:47 debian dhclient[321]: DHCPREQUEST for 10.154.0.12 on ens4 to 255.255.255.255 port 67\\r\\nNov 17 04:03:47 debian dhclient[321]: DHCPACK of 10.154.0.12 from 169.254.169.254\\r\\nNov 17 04:03:47 debian sh[321]: DHCPACK of 10.154.0.12 from 169.254.169.254\\r\\nNov 17 04:03:47 debian systemd[1]: Started User Login Management.\\r\\nNov 17 04:03:47 debian dhclient[321]: bound to 10.154.0.12 -- renewal in 32899 seconds.\\r\\nNov 17 04:03:47 debian sh[321]: bound to 10.154.0.12 -- renewal in 32899 seconds.\\r\\nNov 17 04:03:47 debian haveged[298]: haveged: ver: 1.9.14; arch: x86; vend: GenuineIntel; build: (gcc 10.2.1 ITV); collect: 128K\\r\\nNov 17 04:03:47 debian haveged[298]: haveged: cpu: (L4 VC); data: 32K (L4 V); inst: 32K (L4 V); idx: 24/40; sz: 32154/54019\\r\\nNov 17 04:03:47 debian haveged[298]: haveged: tot tests(BA8): A:1/1 B:1/1 continuous tests(B):  last entropy estimate 7.99739\\r\\nNov 17 04:03:47 debian haveged[298]: haveged: fills: 0, generated: 0\\r\\nNov 17 04:03:47 debian systemd[1]: e2scrub_reap.service: Succeeded.\\r\\nNov 17 04:03:47 debian systemd[1]: Finished Remove Stale Online ext4 Metadata Check Snapshots.\\r\\nNov 17 04:03:49 debian dhclient[435]: Internet Systems Consortium DHCP Client 4.4.1\\r\\nNov 17 04:03:49 debian sh[435]: Internet Systems Consortium DHCP Client 4.4.1\\r\\nNov 17 04:03:49 debian dhclient[435]: Copyright 2004-2018 Internet Systems Consortium.\\r\\nNov 17 04:03:49 debian sh[435]: Copyright 2004-2018 Internet Systems Consortium.\\r\\nNov 17 04:03:49 debian dhclient[435]: All rights reserved.\\r\\nNov 17 04:03:49 debian sh[435]: All rights reserved.\\r\\nNov 17 04:03:49 debian dhclient[435]: For info, please visit https://www.isc.org/software/dhcp/\\r\\nNov 17 04:03:49 debian sh[435]: For info, please visit https://www.isc.org/software/dhcp/\\r\\nNov 17 04:03:49 debian dhclient[435]: \\r\\nNov 17 04:03:49 debian dhclient[435]: Listening on Socket/ens4\\r\\nNov 17 04:03:49 debian sh[435]: Listening on Socket/ens4\\r\\nNov 17 04:03:49 debian sh[435]: Sending on   Socket/ens4\\r\\nNov 17 04:03:49 debian sh[435]: PRC: Soliciting for leases (INIT).\\r\\nNov 17 04:03:49 debian dhclient[435]: Sending on   Socket/ens4\\r\\nNov 17 04:03:49 debian dhclient[435]: XMT: Solicit on ens4, interval 1010ms.\\r\\nNov 17 04:03:49 debian sh[468]: ens4=ens4\\r\\n         Starting \\u001b[0;1;39mGCE Workload Certificate refresh\\u001b[0m...\\r\\n         Starting \\u001b[0;1;39mNSS cache refresh\\u001b[0m...\\r\\nNov 17 04:03:49 debian systemd[1]: Starting GCE Workload Certificate refresh...\\r\\nNov 17 04:03:49 debian systemd[1]: Starting NSS cache refresh...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mRaise network interfaces\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mNetwork\\u001b[0m.\\r\\nNov 17 04:03:49 debian systemd[1]: Finished Raise network interfaces.\\r\\nNov 17 04:03:49 debian systemd[1]: Reached target Network.\\r\\nNov 17 04:03:49 debian systemd[1]: Reached target Network is Online.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mNetwork is Online\\u001b[0m.\\r\\nNov 17 04:03:49 debian systemd[1]: Starting chrony, an NTP client/server...\\r\\n         Starting \\u001b[0;1;39mchrony, an NTP client/server\\u001b[0m...\\r\\nNov 17 04:03:49 debian systemd[1]: Starting Google Compute Engine Guest Agent...\\r\\n         Starting \\u001b[0;1;39mGoogle Compute Engine Guest Agent\\u001b[0m...\\r\\nNov 17 04:03:49 debian systemd[1]: Started Google OSConfig Agent.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mGoogle OSConfig Agent\\u001b[0m.\\r\\nNov 17 04:03:49 debian systemd[1]: Starting Google Compute Engine Shutdown Scripts...\\r\\n         Starting \\u001b[0;1;39mGoogle Compute Engine Shutdown Scripts\\u001b[0m...\\r\\nNov 17 04:03:49 debian systemd[1]: Starting Permit User Sessions...\\r\\n         Starting \\u001b[0;1;39mPermit User Sessions\\u001b[0m...\\r\\nNov 17 04:03:49 debian systemd[1]: Started Unattended Upgrades Shutdown.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mUnattended Upgrades Shutdown\\u001b[0m.\\r\\nNov 17 04:03:49 debian systemd[1]: Finished Google Compute Engine Shutdown Scripts.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mGoogle Compute Engine Shutdown Scripts\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mPermit User Sessions\\u001b[0m.\\r\\nNov 17 04:03:49 debian systemd[1]: Finished Permit User Sessions.\\r\\nNov 17 04:03:49 debian systemd[1]: Started Getty on tty1.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mGetty on tty1\\u001b[0m.\\r\\nNov 17 04:03:49 debian systemd[1]: Started Serial Getty on ttyS0.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mSerial Getty on ttyS0\\u001b[0m.\\r\\nNov 17 04:03:49 debian systemd[1]: Reached target Login Prompts.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mLogin Prompts\\u001b[0m.\\r\\nNov 17 04:03:49 debian chronyd[498]: chronyd version 4.0 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SIGND +ASYNCDNS +NTS +SECHASH +IPV6 -DEBUG)\\r\\nNov 17 04:03:49 debian google_oslogin_nss_cache[471]: oslogin_cache_refresh[471]: Refreshing passwd entry cache\\r\\nNov 17 04:03:49 debian chronyd[498]: Loaded seccomp filter\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mchrony, an NTP client/server\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mSystem Time Synchronized\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mDaily apt download activities\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mDaily apt upgrade and clean activities\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mPeriodic ext4 Onli…ata Check for All Filesystems\\u001b[0m.\\r\\nNov 17 04:03:49 debian systemd[1]: Started chrony, an NTP client/server.\\r\\nNov 17 04:03:49 debian systemd[1]: Reached target System Time Synchronized.\\r\\nNov 17 04:03:49 debian systemd[1]: Started Daily apt download activities.\\r\\nNov 17 04:03:49 debian systemd[1]: Started Daily apt upgrade and clean activities.\\r\\nNov 17 04:03:49 debian systemd[1]: Started Periodic ext4 Online Metadata Check for All Filesystems.\\r\\nNov 17 04:03:49 debian systemd[1]: Started Daily exim4-base housekeeping.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mDaily exim4-base housekeeping\\u001b[0m.\\r\\nNov 17 04:03:49 debian systemd[1]: Started Discard unused blocks once a week.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mDiscard unused blocks once a week\\u001b[0m.\\r\\nNov 17 04:03:49 debian systemd[1]: Started Daily rotation of log files.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mDaily rotation of log files\\u001b[0m.\\r\\nNov 17 04:03:49 debian systemd[1]: Started Daily man-db regeneration.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mDaily man-db regeneration\\u001b[0m.\\r\\nNov 17 04:03:49 debian systemd[1]: Reached target Timers.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mTimers\\u001b[0m.\\r\\nNov 17 04:03:49 debian systemd[1]: Starting LSB: exim Mail Transport Agent...\\r\\n         Starting \\u001b[0;1;39mLSB: exim Mail Transport Agent\\u001b[0m...\\r\\nNov 17 04:03:50 debian google_oslogin_nss_cache[471]: oslogin_cache_refresh[471]: Refreshing group entry cache\\r\\nNov 17 04:03:50 debian dhclient[435]: XMT: Solicit on ens4, interval 2000ms.\\r\\nNov 17 04:03:50 debian exim4[504]: Starting MTA:\\r\\nNov 17 04:03:50 debian exim4[522]: /usr/sbin/update-exim4.conf: 154: cannot open /etc/mailname: No such file\\r\\nNov 17 04:03:51 debian gce_workload_cert_refresh[470]: 2023/11/17 04:03:51: Done\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mGCE Workload Certificate refresh\\u001b[0m.\\r\\nNov 17 04:03:51 debian systemd[1]: gce-workload-cert-refresh.service: Succeeded.\\r\\nNov 17 04:03:51 debian systemd[1]: Finished GCE Workload Certificate refresh.\\r\\nNov 17 04:03:51 debian google_guest_agent[487]: GCE Agent Started (version 20231115.00)\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mNSS cache refresh\\u001b[0m.\\r\\nNov 17 04:03:51 debian systemd[1]: google-oslogin-cache.service: Succeeded.\\r\\nNov 17 04:03:51 debian systemd[1]: Finished NSS cache refresh.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mLSB: exim Mail Transport Agent\\u001b[0m.\\r\\nNov 17 04:03:51 debian exim4[504]:  exim4.\\r\\nNov 17 04:03:51 debian systemd[1]: Started LSB: exim Mail Transport Agent.\\r\\nNov 17 04:03:52 debian google_guest_agent[487]: Instance ID changed, running first-boot actions\\r\\nNov 17 04:03:52 debian OSConfigAgent[489]: 2023-11-17T04:03:52.2878Z OSConfigAgent Info: OSConfig Agent (version 20231010.00-g1) started.\\r\\nNov 17 04:03:52 debian google_guest_agent[487]: Starting the scheduler to run jobs\\r\\nNov 17 04:03:52 debian google_guest_agent[487]: Scheduler - start: []\\r\\nNov 17 04:03:52 debian google_guest_agent[487]: Skipping scheduling credential generation job, failed to reach client credentials endpoint(instance/credentials/certs) with error: error connecting to metadata server, status code: 404\\r\\nNov 17 04:03:52 debian google_guest_agent[487]: ERROR scheduler.go:177 Failed to schedule job MTLS_MDS_Credential_Boostrapper with error: ShouldEnable() returned false, cannot schedule job MTLS_MDS_Credential_Boostrapper\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mGoogle Compute Engine Guest Agent\\u001b[0m.\\r\\nNov 17 04:03:52 debian systemd[1]: Started Google Compute Engine Guest Agent.\\r\\nNov 17 04:03:52 debian systemd[1]: Starting Google Compute Engine Startup Scripts...\\r\\n         Starting \\u001b[0;1;39mGoogle Compute Engine Startup Scripts\\u001b[0m...\\r\\nNov 17 04:03:52 debian systemd[1]: Starting OpenBSD Secure Shell server...\\r\\n         Starting \\u001b[0;1;39mOpenBSD Secure Shell server\\u001b[0m...\\r\\nNov 17 04:03:52 debian google_guest_agent[487]: Starting the scheduler to run jobs\\r\\nNov 17 04:03:52 debian google_guest_agent[487]: No restorecon available, not restoring SELinux context of: /etc/ssh/oslogin_trustedca.pub\\r\\nNov 17 04:03:52 debian google_guest_agent[487]: Enabling OS Login\\r\\nNov 17 04:03:52 debian google_guest_agent[487]: Scheduling job: telemetryJobID\\r\\nNov 17 04:03:52 debian google_guest_agent[487]: Scheduling job \\\"telemetryJobID\\\" to run at 24.000000 hr interval\\r\\nNov 17 04:03:52 debian google_guest_agent[487]: Successfully scheduled job telemetryJobID\\r\\nNov 17 04:03:52 debian google_guest_agent[487]: Invoking job \\\"telemetryJobID\\\"\\r\\nNov 17 04:03:52 debian google_guest_agent[487]: Scheduler - added: [now 2023-11-17 04:03:52.503242685 +0000 UTC entry 1 next 2023-11-18 04:03:52 +0000 UTC]\\r\\nNov 17 04:03:52 debian dhclient[435]: XMT: Solicit on ens4, interval 4010ms.\\r\\nNov 17 04:03:52 debian dhclient[826]: Internet Systems Consortium DHCP Client 4.4.1\\r\\nNov 17 04:03:52 debian dhclient[826]: Copyright 2004-2018 Internet Systems Consortium.\\r\\nNov 17 04:03:52 debian dhclient[826]: All rights reserved.\\r\\nNov 17 04:03:52 debian dhclient[826]: For info, please visit https://www.isc.org/software/dhcp/\\r\\nNov 17 04:03:52 debian dhclient[826]: \\r\\nNov 17 04:03:52 debian dhclient[826]: Listening on Socket/ens4\\r\\nNov 17 04:03:52 debian dhclient[826]: Sending on   Socket/ens4\\r\\nNov 17 04:03:52 debian dhclient[826]: Created duid \\\"\\\\000\\\\001\\\\000\\\\001,\\\\351\\\\242\\\\250B\\\\001\\\\012\\\\232\\\\000\\\\014\\\".\\r\\nNov 17 04:03:52 debian google_guest_agent[487]: Created google sudoers file\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mOpenBSD Secure Shell server\\u001b[0m.\\r\\nNov 17 04:03:52 debian systemd[1]: Started OpenBSD Secure Shell server.\\r\\nNov 17 04:03:52 debian systemd[1]: Stopping User Login Management...\\r\\n         Stopping \\u001b[0;1;39mUser Login Management\\u001b[0m...\\r\\nNov 17 04:03:52 debian systemd[1]: systemd-logind.service: Succeeded.\\r\\nNov 17 04:03:52 debian systemd[1]: Stopped User Login Management.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Stopped \\u001b[0;1;39mUser Login Management\\u001b[0m.\\r\\nNov 17 04:03:52 debian systemd[1]: Starting Load Kernel Module drm...\\r\\n         Starting \\u001b[0;1;39mLoad Kernel Module drm\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mLoad Kernel Module drm\\u001b[0m.\\r\\n         Starting \\u001b[0;1;39mUser Login Management\\u001b[0m...\\r\\nNov 17 04:03:52 debian systemd[1]: modprobe@drm.service: Succeeded.\\r\\nNov 17 04:03:52 debian systemd[1]: Finished Load Kernel Module drm.\\r\\nNov 17 04:03:52 debian systemd[1]: Starting User Login Management...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mUser Login Management\\u001b[0m.\\r\\nNov 17 04:03:52 debian systemd[1]: Started User Login Management.\\r\\nNov 17 04:03:52 debian systemd[1]: Stopping Regular background program processing daemon...\\r\\n         Stopping \\u001b[0;1;39mRegular background program processing daemon\\u001b[0m...\\r\\nNov 17 04:03:52 debian systemd[1]: cron.service: Succeeded.\\r\\nNov 17 04:03:52 debian systemd[1]: Stopped Regular background program processing daemon.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Stopped \\u001b[0;1;39mRegular background program processing daemon\\u001b[0m.\\r\\nNov 17 04:03:52 debian systemd[1]: Started Regular background program processing daemon.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mRegular background program processing daemon\\u001b[0m.\\r\\nNov 17 04:03:52 debian systemd[1]: Reloading OpenBSD Secure Shell server.\\r\\nNov 17 04:03:52 debian systemd[1]: Reloaded OpenBSD Secure Shell server.\\r\\nNov 17 04:03:53 debian google_metadata_script_runner[822]: Starting startup scripts (version dev).\\r\\nNov 17 04:03:53 debian google_metadata_script_runner[822]: Found startup-script in metadata.\\r\\nNov 17 04:03:53 debian google_metadata_script_runner[822]: startup-script: Hit:1 https://deb.debian.org/debian bullseye InRelease\\r\\nNov 17 04:03:53 debian google_metadata_script_runner[822]: startup-script: Get:2 https://deb.debian.org/debian-security bullseye-security InRelease [48.4 kB]\\r\\nNov 17 04:03:53 debian google_metadata_script_runner[822]: startup-script: Get:3 https://deb.debian.org/debian bullseye-updates InRelease [44.1 kB]\\r\\nNov 17 04:03:53 debian google_metadata_script_runner[822]: startup-script: Get:4 https://deb.debian.org/debian bullseye-backports InRelease [49.0 kB]\\r\\nNov 17 04:03:53 debian google_metadata_script_runner[822]: startup-script: Get:5 https://packages.cloud.google.com/apt google-compute-engine-bullseye-stable InRelease [5146 B]\\r\\nNov 17 04:03:53 debian google_metadata_script_runner[822]: startup-script: Hit:6 https://packages.cloud.google.com/apt cloud-sdk-bullseye InRelease\\r\\nNov 17 04:03:53 debian google_metadata_script_runner[822]: startup-script: Get:7 https://deb.debian.org/debian-security bullseye-security/main Sources [160 kB]\\r\\nNov 17 04:03:53 debian google_metadata_script_runner[822]: startup-script: Get:8 https://deb.debian.org/debian-security bullseye-security/main amd64 Packages [258 kB]\\r\\nNov 17 04:03:54 debian google_metadata_script_runner[822]: startup-script: Fetched 564 kB in 1s (776 kB/s)\\r\\nNov 17 04:03:54 debian chronyd[498]: Selected source 169.254.169.254 (metadata.google.internal)\\r\\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: Reading package lists...\\r\\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: Reading package lists...\\r\\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: Building dependency tree...\\r\\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: Reading state information...\\r\\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: The following NEW packages will be installed:\\r\\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script:   apt-transport-https\\r\\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.\\r\\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: Need to get 160 kB of archives.\\r\\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: After this operation, 166 kB of additional disk space will be used.\\r\\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: Get:1 https://deb.debian.org/debian bullseye/main amd64 apt-transport-https all 2.2.4 [160 kB]\\r\\n\\r\\r\\nDebian GNU/Linux 11 valid-linux-ssh ttyS0\\r\\n\\r\\nvalid-linux-ssh login: Nov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: debconf: unable to initialize frontend: Dialog\\r\\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: debconf: (Dialog frontend will not work on a dumb terminal, an emacs shell buffer, or without a controlling terminal.)\\r\\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: debconf: falling back to frontend: Readline\\r\\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: debconf: unable to initialize frontend: Readline\\r\\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: debconf: (Can't locate Term/ReadLine.pm in @INC (you may need to install the Term::ReadLine module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.32.1 /usr/local/share/perl/5.32.1 /usr/lib/x86_64-linux-gnu/perl5/5.32 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl-base /usr/lib/x86_64-linux-gnu/perl/5.32 /usr/share/perl/5.32 /usr/local/lib/site_perl) at /usr/share/perl5/Debconf/FrontEnd/Readline.pm line 7, \\u003c\\u003e line 1.)\\r\\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: debconf: falling back to frontend: Teletype\\r\\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: dpkg-preconfigure: unable to re-open stdin:\\r\\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: Fetched 160 kB in 0s (3831 kB/s)\\r\\nNov 17 04:03:55 debian google_metadata_script_runner[822]: startup-script: Selecting previously unselected package apt-transport-https.\\r\\nNov 17 04:03:56 debian google_metadata_script_runner[822]: startup-script: (Reading database ... #015(Reading database ... 5%#015(Reading database ... 10%#015(Reading database ... 15%#015(Reading database ... 20%#015(Reading database ... 25%#015(Reading database ... 30%#015(Reading database ... 35%#015(Reading database ... 40%#015(Reading database ... 45%#015(Reading database ... 50%#015(Reading database ... 55%#015(Reading database ... 60%#015(Reading database ... 65%#015(Reading database ... 70%#015(Reading database ... 75%#015(Reading database ... 80%#015(Reading database ... 85%#015(Reading database ... 90%#015(Reading database ... 95%#015(Reading database ... 100%#015(Reading database ... 59476 files and directories currently installed.)\\r\\nNov 17 04:03:56 debian google_metadata_script_runner[822]: startup-script: Preparing to unpack .../apt-transport-https_2.2.4_all.deb ...\\r\\nNov 17 04:03:56 debian google_metadata_script_runner[822]: startup-script: Unpacking apt-transport-https (2.2.4) ...\\r\\nNov 17 04:03:56 debian google_metadata_script_runner[822]: startup-script: Setting up apt-transport-https (2.2.4) ...\\r\\nNov 17 04:03:56 debian google_metadata_script_runner[822]: startup-script: Adding agent repository for debian.\\r\\nNov 17 04:03:56 debian dhclient[435]: XMT: Solicit on ens4, interval 8170ms.\\r\\nNov 17 04:03:56 debian google_metadata_script_runner[822]: startup-script: deb [signed-by=/usr/share/keyrings/google-cloud-ops-agent-keyring.gpg] https://packages.cloud.google.com/apt google-cloud-ops-agent-bullseye-all main\\r\\nNov 17 04:03:56 debian google_metadata_script_runner[822]: startup-script: Hit:1 https://deb.debian.org/debian bullseye InRelease\\r\\nNov 17 04:03:56 debian google_metadata_script_runner[822]: startup-script: Hit:2 https://deb.debian.org/debian-security bullseye-security InRelease\\r\\nNov 17 04:03:56 debian google_metadata_script_runner[822]: startup-script: Hit:3 https://deb.debian.org/debian bullseye-updates InRelease\\r\\nNov 17 04:03:56 debian google_metadata_script_runner[822]: startup-script: Hit:4 https://deb.debian.org/debian bullseye-backports InRelease\\r\\nNov 17 04:03:57 debian google_metadata_script_runner[822]: startup-script: Get:5 https://packages.cloud.google.com/apt google-cloud-ops-agent-bullseye-all InRelease [5115 B]\\r\\nNov 17 04:03:57 debian google_metadata_script_runner[822]: startup-script: Hit:6 https://packages.cloud.google.com/apt google-compute-engine-bullseye-stable InRelease\\r\\nNov 17 04:03:57 debian google_metadata_script_runner[822]: startup-script: Hit:7 https://packages.cloud.google.com/apt cloud-sdk-bullseye InRelease\\r\\nNov 17 04:03:57 debian google_metadata_script_runner[822]: startup-script: Get:8 https://packages.cloud.google.com/apt google-cloud-ops-agent-bullseye-all/main amd64 Packages [7973 B]\\r\\nNov 17 04:03:57 debian google_metadata_script_runner[822]: startup-script: Fetched 13.1 kB in 1s (19.6 kB/s)\\r\\nNov 17 04:03:58 debian google_metadata_script_runner[822]: startup-script: Reading package lists...\\r\\nNov 17 04:03:58 debian google_metadata_script_runner[822]: startup-script: Reading package lists...\\r\\nNov 17 04:03:58 debian google_metadata_script_runner[822]: startup-script: Building dependency tree...\\r\\nNov 17 04:03:58 debian google_metadata_script_runner[822]: startup-script: Reading state information...\\r\\nNov 17 04:03:58 debian google_metadata_script_runner[822]: startup-script: The following NEW packages will be installed:\\r\\nNov 17 04:03:58 debian google_metadata_script_runner[822]: startup-script:   google-cloud-ops-agent\\r\\nNov 17 04:03:58 debian google_metadata_script_runner[822]: startup-script: 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.\\r\\nNov 17 04:03:58 debian google_metadata_script_runner[822]: startup-script: Need to get 92.1 MB of archives.\\r\\nNov 17 04:03:58 debian google_metadata_script_runner[822]: startup-script: After this operation, 398 MB of additional disk space will be used.\\r\\nNov 17 04:03:58 debian google_metadata_script_runner[822]: startup-script: Get:1 https://packages.cloud.google.com/apt google-cloud-ops-agent-bullseye-all/main amd64 google-cloud-ops-agent amd64 2.43.0~debian11 [92.1 MB]\\r\\nNov 17 04:04:01 debian google_metadata_script_runner[822]: startup-script: debconf: unable to initialize frontend: Dialog\\r\\nNov 17 04:04:01 debian google_metadata_script_runner[822]: startup-script: debconf: (Dialog frontend will not work on a dumb terminal, an emacs shell buffer, or without a controlling terminal.)\\r\\nNov 17 04:04:01 debian google_metadata_script_runner[822]: startup-script: debconf: falling back to frontend: Readline\\r\\nNov 17 04:04:01 debian google_metadata_script_runner[822]: startup-script: debconf: unable to initialize frontend: Readline\\r\\nNov 17 04:04:01 debian google_metadata_script_runner[822]: startup-script: debconf: (Can't locate Term/ReadLine.pm in @INC (you may need to install the Term::ReadLine module) (@INC contains: /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.32.1 /usr/local/share/perl/5.32.1 /usr/lib/x86_64-linux-gnu/perl5/5.32 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl-base /usr/lib/x86_64-linux-gnu/perl/5.32 /usr/share/perl/5.32 /usr/local/lib/site_perl) at /usr/share/perl5/Debconf/FrontEnd/Readline.pm line 7, \\u003c\\u003e line 1.)\\r\\nNov 17 04:04:01 debian google_metadata_script_runner[822]: startup-script: debconf: falling back to frontend: Teletype\\r\\nNov 17 04:04:01 debian google_metadata_script_runner[822]: startup-script: dpkg-preconfigure: unable to re-open stdin:\\r\\nNov 17 04:04:01 debian google_metadata_script_runner[822]: startup-script: Fetched 92.1 MB in 2s (45.1 MB/s)\\r\\nNov 17 04:04:01 debian google_metadata_script_runner[822]: startup-script: Selecting previously unselected package google-cloud-ops-agent.\\r\\nNov 17 04:04:01 debian google_metadata_script_runner[822]: startup-script: (Reading database ... #015(Reading database ... 5%#015(Reading database ... 10%#015(Reading database ... 15%#015(Reading database ... 20%#015(Reading database ... 25%#015(Reading database ... 30%#015(Reading database ... 35%#015(Reading database ... 40%#015(Reading database ... 45%#015(Reading database ... 50%#015(Reading database ... 55%#015(Reading database ... 60%#015(Reading database ... 65%#015(Reading database ... 70%#015(Reading database ... 75%#015(Reading database ... 80%#015(Reading database ... 85%#015(Reading database ... 90%#015(Reading database ... 95%#015(Reading database ... 100%#015(Reading database ... 59480 files and directories currently installed.)\\r\\nNov 17 04:04:01 debian google_metadata_script_runner[822]: startup-script: Preparing to unpack .../google-cloud-ops-agent_2.43.0~debian11_amd64.deb ...\\r\\nNov 17 04:04:01 debian google_metadata_script_runner[822]: startup-script: Unpacking google-cloud-ops-agent (2.43.0~debian11) ...\\r\\nNov 17 04:04:04 debian dhclient[435]: XMT: Solicit on ens4, interval 15830ms.\\r\\nNov 17 04:04:13 debian google_metadata_script_runner[822]: startup-script: Setting up google-cloud-ops-agent (2.43.0~debian11) ...\\r\\nNov 17 04:04:13 debian google_metadata_script_runner[822]: startup-script: Created symlink /etc/systemd/system/multi-user.target.wants/google-cloud-ops-agent.service → /lib/systemd/system/google-cloud-ops-agent.service.\\r\\nNov 17 04:04:13 debian systemd[1]: Reloading.\\r\\nNov 17 04:04:14 debian systemd[1]: Reloading.\\r\\nNov 17 04:04:14 debian systemd[1]: Started Google Cloud Ops Agent - Diagnostics.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mGoogle Cloud Ops Agent - Diagnostics\\u001b[0m.\\r\\n         Starting \\u001b[0;1;39mGoogle Cloud Ops Agent\\u001b[0m...\\r\\nNov 17 04:04:14 debian systemd[1]: Starting Google Cloud Ops Agent...\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: 2023/11/17 04:04:17 Built-in config:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: logging:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:   receivers:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:     syslog:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:       type: files\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:       include_paths:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:       - /var/log/messages\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:       - /var/log/syslog\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:   service:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:     pipelines:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:       default_pipeline:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:         receivers: [syslog]\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: metrics:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:   receivers:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:     hostmetrics:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:       type: hostmetrics\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:       collection_interval: 60s\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:   processors:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:     metrics_filter:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:       type: exclude_metrics\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:       metrics_pattern: []\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:   service:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:     pipelines:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:       default_pipeline:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:         receivers: [hostmetrics]\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:         processors: [metrics_filter]\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: 2023/11/17 04:04:17 Merged config:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: logging:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:   receivers:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:     syslog:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:       type: files\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:       include_paths:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:       - /var/log/messages\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:       - /var/log/syslog\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:   service:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:     pipelines:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:       default_pipeline:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:         receivers: [syslog]\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]: metrics:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:   receivers:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:     hostmetrics:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:       type: hostmetrics\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:       collection_interval: 60s\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:   processors:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:     metrics_filter:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:       type: exclude_metrics\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:       metrics_pattern: []\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:   service:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:     pipelines:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:       default_pipeline:\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:         receivers: [hostmetrics]\\r\\nNov 17 04:04:17 debian google_cloud_ops_agent_engine[2070]:         processors: [metrics_filter]\\r\\nNov 17 04:04:20 debian dhclient[435]: XMT: Solicit on ens4, interval 32060ms.\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2070]: 2023/11/17 04:04:24 [Ports Check] Result: PASS\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2070]: 2023/11/17 04:04:24 [Network Check] Result: PASS\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2070]: 2023/11/17 04:04:24 [API Check] Result: FAIL, Error code: MonApiDisabledErr, Failure: The Monitoring API is disabled in the current Google Cloud project., Solution: Enable Monitoring API in the current Google Cloud project., Resource: https://cloud.google.com/monitoring/api/enable-api\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2070]: 2023/11/17 04:04:24 [API Check] Result: FAIL, Error code: LogApiDisabledErr, Failure: The Logging API is disabled in the current Google Cloud project., Solution: Enable Logging API in the current Google Cloud project., Resource: https://cloud.google.com/logging/docs/api/enable-api\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2070]: 2023/11/17 04:04:24 Startup checks finished\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mGoogle Cloud Ops Agent\\u001b[0m.\\r\\nNov 17 04:04:24 debian systemd[1]: Finished Google Cloud Ops Agent.\\r\\nNov 17 04:04:24 debian systemd[1]: Starting Google Cloud Ops Agent - Logging Agent...\\r\\n         Starting \\u001b[0;1;39mGoogle Cloud Ops Agent - Logging Agent\\u001b[0m...\\r\\nNov 17 04:04:24 debian systemd[1]: Starting Google Cloud Ops Agent - Metrics Agent...\\r\\n         Starting \\u001b[0;1;39mGoogle Cloud Ops Agent - Metrics Agent\\u001b[0m...\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: 2023/11/17 04:04:24 Built-in config:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: logging:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:   receivers:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:     syslog:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:       type: files\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:       include_paths:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:       - /var/log/messages\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:       - /var/log/syslog\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:   service:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:     pipelines:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:       default_pipeline:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:         receivers: [syslog]\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: metrics:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:   receivers:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:     hostmetrics:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:       type: hostmetrics\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:       collection_interval: 60s\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:   processors:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:     metrics_filter:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:       type: exclude_metrics\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:       metrics_pattern: []\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:   service:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:     pipelines:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:       default_pipeline:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:         receivers: [hostmetrics]\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:         processors: [metrics_filter]\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: 2023/11/17 04:04:24 Merged config:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: logging:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:   receivers:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:     syslog:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:       type: files\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:       include_paths:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:       - /var/log/messages\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:       - /var/log/syslog\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:   service:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:     pipelines:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:       default_pipeline:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:         receivers: [syslog]\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]: metrics:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:   receivers:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:     hostmetrics:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:       type: hostmetrics\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:       collection_interval: 60s\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:   processors:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:     metrics_filter:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:       type: exclude_metrics\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:       metrics_pattern: []\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:   service:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:     pipelines:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:       default_pipeline:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:         receivers: [hostmetrics]\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2090]:         processors: [metrics_filter]\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: 2023/11/17 04:04:24 Built-in config:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: logging:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:   receivers:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:     syslog:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:       type: files\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:       include_paths:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:       - /var/log/messages\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:       - /var/log/syslog\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:   service:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:     pipelines:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:       default_pipeline:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:         receivers: [syslog]\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: metrics:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:   receivers:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:     hostmetrics:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:       type: hostmetrics\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:       collection_interval: 60s\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:   processors:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:     metrics_filter:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:       type: exclude_metrics\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:       metrics_pattern: []\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:   service:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:     pipelines:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:       default_pipeline:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:         receivers: [hostmetrics]\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:         processors: [metrics_filter]\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: 2023/11/17 04:04:24 Merged config:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: logging:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:   receivers:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:     syslog:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:       type: files\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:       include_paths:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:       - /var/log/messages\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:       - /var/log/syslog\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:   service:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:     pipelines:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:       default_pipeline:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:         receivers: [syslog]\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]: metrics:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:   receivers:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:     hostmetrics:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:       type: hostmetrics\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:       collection_interval: 60s\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:   processors:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:     metrics_filter:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:       type: exclude_metrics\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:       metrics_pattern: []\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:   service:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:     pipelines:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:       default_pipeline:\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:         receivers: [hostmetrics]\\r\\nNov 17 04:04:24 debian google_cloud_ops_agent_engine[2088]:         processors: [metrics_fil[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mGoogle Cloud Ops Agent - Logging Agent\\u001b[0m.\\r\\nter]\\r\\nNov 17 04:04:24 debian systemd[1]: Started Google Cloud Ops Agent - Logging Agent.\\r\\nNov 17 04:04:24 debian systemd[1]: Started Google Cloud Ops Agent - Metrics Agent.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mGoogle Cloud Ops Agent - Metrics Agent\\u001b[0m.\\r\\nNov 17 04:04:28 debian google_metadata_script_runner[822]: startup-script: google-cloud-ops-agent  installation succeeded.\\r\\nNov 17 04:04:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:04:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 12345601 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=11112222 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\r\\nNov 17 04:04:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\r\\nNov 17 04:04:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\r\\nNov 17 04:04:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:04:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\r\\nNov 17 04:04:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\r\\nNov 17 04:04:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mGoogle Compute Engine Startup Scripts\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mMulti-User System\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mGraphical Interface\\u001b[0m.\\r\\n         Starting \\u001b[0;1;39mUpdate UTMP about System Runlevel Changes\\u001b[0m...\\r\\nNov 17 04:04:29 debian google_metadata_script_runner[822]: startup-script exit status 0\\r\\nNov 17 04:04:29 debian google_metadata_script_runner[822]: Finished running startup scripts.\\r\\nNov 17 04:04:29 debian systemd[1]: google-startup-scripts.service: Succeeded.\\r\\nNov 17 04:04:29 debian systemd[1]: Finished Google Compute Engine Startup Scripts.\\r\\nNov 17 04:04:29 debian systemd[1]: google-startup-scripts.service: Consumed 15.644s CPU time.\\r\\nNov 17 04:04:29 debian systemd[1]: Reached target Multi-User System.\\r\\nNov 17 04:04:29 debian systemd[1]: Reached target Graphical Interface.\\r\\nNov 17 04:04:29 debian systemd[1]: Starting Update UTMP about System Runlevel Changes...\\r\\nNov 17 04:04:29 debian systemd[1]: systemd-update-utmp-runlevel.service: Succeeded.\\r\\nNov 17 04:04:29 debian systemd[1]: Finished Update UTMP about System Runlevel Changes.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mUpdate UTMP about System Runlevel Changes\\u001b[0m.\\r\\nNov 17 04:04:29 debian systemd[1]: Startup finished in 1.399s (kernel) + 44.740s (userspace) = 46.140s.\\r\\n[   46.434139] process 'subagents/fluent-bit/bin/fluent-bit' started with executable stack\\r\\nNov 17 04:04:29 debian kernel: [   46.434139] process 'subagents/fluent-bit/bin/fluent-bit' started with executable stack\\r\\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.529Z#011info#011service/telemetry.go:81#011Setting up own telemetry...\\r\\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.565Z#011info#011service/telemetry.go:104#011Serving Prometheus metrics#011{\\\"address\\\": \\\"0.0.0.0:20201\\\", \\\"level\\\": \\\"Basic\\\"}\\r\\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.642Z#011info#011filterprocessor@v0.81.0/metrics.go:89#011Metric filter configured#011{\\\"include match_type\\\": \\\"\\\", \\\"include expressions\\\": [], \\\"include metric names\\\": [], \\\"include metrics with resource attributes\\\": null, \\\"exclude match_type\\\": \\\"regexp\\\", \\\"exclude expressions\\\": [], \\\"exclude metric names\\\": [], \\\"exclude metrics with resource attributes\\\": null}\\r\\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.649Z#011info#011filterprocessor@v0.81.0/metrics.go:89#011Metric filter configured#011{\\\"include match_type\\\": \\\"\\\", \\\"include expressions\\\": [], \\\"include metric names\\\": [], \\\"include metrics with resource attributes\\\": null, \\\"exclude match_type\\\": \\\"strict\\\", \\\"exclude expressions\\\": [], \\\"exclude metric names\\\": [\\\"system.cpu.time\\\", \\\"system.network.dropped\\\", \\\"system.filesystem.inodes.usage\\\", \\\"system.paging.faults\\\", \\\"system.disk.operation_time\\\"], \\\"exclude metrics with resource attributes\\\": null}\\r\\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.649Z#011info#011filterprocessor@v0.81.0/metrics.go:89#011Metric filter configured#011{\\\"include match_type\\\": \\\"strict\\\", \\\"include expressions\\\": [], \\\"include metric names\\\": [\\\"otelcol_process_uptime\\\", \\\"otelcol_process_memory_rss\\\", \\\"otelcol_grpc_io_client_completed_rpcs\\\", \\\"otelcol_googlecloudmonitoring_point_count\\\"], \\\"include metrics with resource attributes\\\": null, \\\"exclude match_type\\\": \\\"\\\", \\\"exclude expressions\\\": [], \\\"exclude metric names\\\": [], \\\"exclude metrics with resource attributes\\\": null}\\r\\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.650Z#011info#011filterprocessor@v0.81.0/metrics.go:89#011Metric filter configured#011{\\\"include match_type\\\": \\\"strict\\\", \\\"include expressions\\\": [], \\\"include metric names\\\": [\\\"fluentbit_uptime\\\", \\\"fluentbit_stackdriver_requests_total\\\", \\\"fluentbit_stackdriver_proc_records_total\\\", \\\"fluentbit_stackdriver_retried_records_total\\\"], \\\"include metrics with resource attributes\\\": null, \\\"exclude match_type\\\": \\\"\\\", \\\"exclude expressions\\\": [], \\\"exclude metric names\\\": [], \\\"exclude metrics with resource attributes\\\": null}\\r\\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.650Z#011info#011service/service.go:131#011Starting google-cloud-metrics-agent...#011{\\\"Version\\\": \\\"latest\\\", \\\"NumCPU\\\": 1}\\r\\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.650Z#011info#011extensions/extensions.go:30#011Starting extensions...\\r\\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.743Z#011info#011internal/resourcedetection.go:125#011began detecting resource information\\r\\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.760Z#011info#011internal/resourcedetection.go:139#011detected resource information#011{\\\"resource\\\": {\\\"cloud.account.id\\\":\\\"gcpdiag-gce-faultyssh-runbook\\\",\\\"cloud.availability_zone\\\":\\\"europe-west2-a\\\",\\\"cloud.platform\\\":\\\"gcp_compute_engine\\\",\\\"cloud.provider\\\":\\\"gcp\\\",\\\"cloud.region\\\":\\\"europe-west2\\\",\\\"host.id\\\":\\\"4683873813257738493\\\",\\\"host.name\\\":\\\"valid-linux-ssh\\\",\\\"host.type\\\":\\\"projects/328022628735/machineTypes/e2-micro\\\"}}\\r\\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.772Z#011info#011prometheusreceiver/metrics_receiver.go:243#011Scrape job added#011{\\\"jobName\\\": \\\"logging-collector\\\"}\\r\\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.781Z#011info#011prometheusreceiver/metrics_receiver.go:255#011Starting discovery manager\\r\\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.802Z#011info#011prometheusreceiver/metrics_receiver.go:243#011Scrape job added#011{\\\"jobName\\\": \\\"otel-collector\\\"}\\r\\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.802Z#011info#011service/service.go:148#011Everything is ready. Begin running and processing data.\\r\\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.824Z#011info#011prometheusreceiver/metrics_receiver.go:290#011Starting scrape manager\\r\\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.824Z#011info#011prometheusreceiver/metrics_receiver.go:255#011Starting discovery manager\\r\\nNov 17 04:04:32 debian otelopscol[2111]: 2023-11-17T04:04:32.825Z#011info#011prometheusreceiver/metrics_receiver.go:290#011Starting scrape manager\\r\\nNov 17 04:04:33 debian otelopscol[2111]: 2023-11-17T04:04:33.924Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\", \\\"errorCauses\\\": [{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}]}\\r\\nNov 17 04:04:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:04:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:04:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:04:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:04:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:04:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:04:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:04:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:04:52 debian dhclient[435]: XMT: Solicit on ens4, interval 66360ms.\\r\\nNov 17 04:05:24 debian otelopscol[2111]: 2023-11-17T04:05:24.519Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}\\r\\nNov 17 04:05:24 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:05:24 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:05:24 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:05:24 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:05:24 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:05:24 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:05:24 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:05:24 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:05:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:05:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\r\\nNov 17 04:05:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\r\\nNov 17 04:05:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\r\\nNov 17 04:05:58 debian dhclient[435]: XMT: Solicit on ens4, interval 109720ms.\\r\\nNov 17 04:06:21 debian otelopscol[2111]: 2023-11-17T04:06:21.910Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}\\r\\nNov 17 04:06:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:06:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:06:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:06:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:06:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:06:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:06:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:06:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:06:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:06:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\r\\nNov 17 04:06:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\r\\nNov 17 04:06:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\r\\nNov 17 04:06:33 debian otelopscol[2111]: 2023-11-17T04:06:33.885Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\", \\\"errorCauses\\\": [{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}]}\\r\\nNov 17 04:06:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:06:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:06:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:06:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:06:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:06:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:06:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:06:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:07:21 debian otelopscol[2111]: 2023-11-17T04:07:21.907Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}\\r\\nNov 17 04:07:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:07:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:07:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:07:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:07:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:07:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:07:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:07:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:07:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:07:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\r\\nNov 17 04:07:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\r\\nNov 17 04:07:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\r\\nNov 17 04:07:33 debian otelopscol[2111]: 2023-11-17T04:07:33.868Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\", \\\"errorCauses\\\": [{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}]}\\r\\nNov 17 04:07:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:07:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:07:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:07:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:07:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:07:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:07:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:07:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:07:48 debian dhclient[435]: XMT: Solicit on ens4, interval 119890ms.\\r\\nNov 17 04:08:21 debian otelopscol[2111]: 2023-11-17T04:08:21.904Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}\\r\\nNov 17 04:08:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:08:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:08:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:08:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:08:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:08:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:08:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:08:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:08:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:08:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\r\\nNov 17 04:08:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\r\\nNov 17 04:08:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\r\\nNov 17 04:08:33 debian otelopscol[2111]: 2023-11-17T04:08:33.885Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\", \\\"errorCauses\\\": [{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}]}\\r\\nNov 17 04:08:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:08:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:08:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:08:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:08:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:08:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:08:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:08:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:09:21 debian otelopscol[2111]: 2023-11-17T04:09:21.913Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}\\r\\nNov 17 04:09:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:09:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:09:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:09:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:09:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:09:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:09:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:09:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:09:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:09:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\r\\nNov 17 04:09:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\r\\nNov 17 04:09:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\r\\nNov 17 04:09:33 debian otelopscol[2111]: 2023-11-17T04:09:33.868Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\", \\\"errorCauses\\\": [{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}]}\\r\\nNov 17 04:09:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:09:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:09:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:09:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:09:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:09:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:09:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:09:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:09:48 debian dhclient[435]: XMT: Solicit on ens4, interval 123690ms.\\r\\nNov 17 04:10:21 debian otelopscol[2111]: 2023-11-17T04:10:21.909Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}\\r\\nNov 17 04:10:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:10:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:10:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:10:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:10:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:10:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:10:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:10:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:10:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:10:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\r\\nNov 17 04:10:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\r\\nNov 17 04:10:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\r\\nNov 17 04:10:33 debian otelopscol[2111]: 2023-11-17T04:10:33.892Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\", \\\"errorCauses\\\": [{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}]}\\r\\nNov 17 04:10:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:10:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:10:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:10:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:10:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:10:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:10:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:10:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:11:21 debian otelopscol[2111]: 2023-11-17T04:11:21.906Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}\\r\\nNov 17 04:11:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:11:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:11:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:11:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:11:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:11:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:11:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:11:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:11:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:11:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\r\\nNov 17 04:11:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\r\\nNov 17 04:11:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\r\\nNov 17 04:11:33 debian otelopscol[2111]: 2023-11-17T04:11:33.860Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\", \\\"errorCauses\\\": [{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}]}\\r\\nNov 17 04:11:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:11:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:11:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:11:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:11:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:11:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:11:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:11:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:11:52 debian dhclient[435]: XMT: Solicit on ens4, interval 124490ms.\\r\\nNov 17 04:12:21 debian otelopscol[2111]: 2023-11-17T04:12:21.907Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}\\r\\nNov 17 04:12:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:12:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:12:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:12:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:12:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:12:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:12:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:12:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:12:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:12:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\r\\nNov 17 04:12:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\r\\nNov 17 04:12:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\r\\nNov 17 04:12:33 debian otelopscol[2111]: 2023-11-17T04:12:33.865Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\", \\\"errorCauses\\\": [{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}]}\\r\\nNov 17 04:12:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:12:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:12:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:12:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:12:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:12:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:12:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:12:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:13:21 debian otelopscol[2111]: 2023-11-17T04:13:21.914Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}\\r\\nNov 17 04:13:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:13:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:13:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:13:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:13:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:13:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:13:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:13:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:13:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:13:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\r\\nNov 17 04:13:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\r\\nNov 17 04:13:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\r\\nNov 17 04:13:33 debian otelopscol[2111]: 2023-11-17T04:13:33.864Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\", \\\"errorCauses\\\": [{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}]}\\r\\nNov 17 04:13:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:13:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:13:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:13:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:13:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:13:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:13:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:13:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:13:56 debian systemd[1]: Starting GCE Workload Certificate refresh...\\r\\nNov 17 04:13:56 debian gce_workload_cert_refresh[2146]: 2023/11/17 04:13:56: Done\\r\\nNov 17 04:13:56 debian systemd[1]: gce-workload-cert-refresh.service: Succeeded.\\r\\nNov 17 04:13:56 debian systemd[1]: Finished GCE Workload Certificate refresh.\\r\\nNov 17 04:13:56 debian dhclient[435]: XMT: Solicit on ens4, interval 126650ms.\\r\\nNov 17 04:14:21 debian otelopscol[2111]: 2023-11-17T04:14:21.910Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}\\r\\nNov 17 04:14:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:14:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:14:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:14:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:14:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:14:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:14:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:14:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:14:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:14:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\r\\nNov 17 04:14:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\r\\nNov 17 04:14:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\r\\nNov 17 04:14:33 debian otelopscol[2111]: 2023-11-17T04:14:33.864Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\", \\\"errorCauses\\\": [{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}]}\\r\\nNov 17 04:14:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:14:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:14:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:14:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:14:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:14:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:14:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:14:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:15:21 debian otelopscol[2111]: 2023-11-17T04:15:21.909Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}\\r\\nNov 17 04:15:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:15:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:15:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:15:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:15:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:15:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:15:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:15:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:15:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:15:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\r\\nNov 17 04:15:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\r\\nNov 17 04:15:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\r\\nNov 17 04:15:33 debian otelopscol[2111]: 2023-11-17T04:15:33.859Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\", \\\"errorCauses\\\": [{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}]}\\r\\nNov 17 04:15:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:15:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:15:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:15:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:15:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:15:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:15:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:15:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:16:03 debian dhclient[435]: XMT: Solicit on ens4, interval 110910ms.\\r\\nNov 17 04:16:21 debian otelopscol[2111]: 2023-11-17T04:16:21.905Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}\\r\\nNov 17 04:16:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:16:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:16:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:16:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:16:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:16:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:16:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:16:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:16:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:16:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\r\\nNov 17 04:16:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\r\\nNov 17 04:16:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\r\\nNov 17 04:16:33 debian otelopscol[2111]: 2023-11-17T04:16:33.874Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\", \\\"errorCauses\\\": [{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}]}\\r\\nNov 17 04:16:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:16:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:16:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:16:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:16:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:16:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:16:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:16:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:17:21 debian otelopscol[2111]: 2023-11-17T04:17:21.907Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}\\r\\nNov 17 04:17:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:17:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:17:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:17:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:17:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:17:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:17:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:17:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:17:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:17:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\r\\nNov 17 04:17:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\r\\nNov 17 04:17:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\r\\nNov 17 04:17:33 debian otelopscol[2111]: 2023-11-17T04:17:33.863Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\", \\\"errorCauses\\\": [{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}]}\\r\\nNov 17 04:17:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:17:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:17:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:17:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:17:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:17:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:17:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:17:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:17:54 debian dhclient[435]: XMT: Solicit on ens4, interval 111550ms.\\r\\nNov 17 04:18:21 debian otelopscol[2111]: 2023-11-17T04:18:21.910Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}\\r\\nNov 17 04:18:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:18:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:18:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:18:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:18:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:18:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:18:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:18:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:18:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:18:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\r\\nNov 17 04:18:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\r\\nNov 17 04:18:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\r\\nNov 17 04:18:33 debian otelopscol[2111]: 2023-11-17T04:18:33.861Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\", \\\"errorCauses\\\": [{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}]}\\r\\nNov 17 04:18:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:18:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:18:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:18:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:18:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:18:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:18:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:18:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:18:56 debian systemd[1]: Starting Cleanup of Temporary Directories...\\r\\nNov 17 04:18:56 debian systemd[1]: systemd-tmpfiles-clean.service: Succeeded.\\r\\nNov 17 04:18:56 debian systemd[1]: Finished Cleanup of Temporary Directories.\\r\\nNov 17 04:19:21 debian otelopscol[2111]: 2023-11-17T04:19:21.908Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}\\r\\nNov 17 04:19:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:19:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:19:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:19:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:19:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:19:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:19:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:19:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:19:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:19:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\r\\nNov 17 04:19:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\r\\nNov 17 04:19:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\r\\nNov 17 04:19:33 debian otelopscol[2111]: 2023-11-17T04:19:33.858Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\", \\\"errorCauses\\\": [{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}]}\\r\\nNov 17 04:19:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:19:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:19:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:19:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:19:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:19:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:19:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:19:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:19:45 debian dhclient[435]: XMT: Solicit on ens4, interval 110200ms.\\r\\nNov 17 04:20:21 debian otelopscol[2111]: 2023-11-17T04:20:21.910Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}\\r\\nNov 17 04:20:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:20:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:20:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:20:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:20:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:20:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:20:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:20:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:20:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:20:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\r\\nNov 17 04:20:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\r\\nNov 17 04:20:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\r\\nNov 17 04:20:33 debian otelopscol[2111]: 2023-11-17T04:20:33.862Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\", \\\"errorCauses\\\": [{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}]}\\r\\nNov 17 04:20:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:20:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:20:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:20:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:20:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:20:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:20:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:20:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:21:21 debian otelopscol[2111]: 2023-11-17T04:21:21.904Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}\\r\\nNov 17 04:21:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:21:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:21:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:21:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:21:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:21:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:21:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:21:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:21:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:21:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\r\\nNov 17 04:21:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\r\\nNov 17 04:21:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\r\\nNov 17 04:21:33 debian otelopscol[2111]: 2023-11-17T04:21:33.856Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\", \\\"errorCauses\\\": [{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}]}\\r\\nNov 17 04:21:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:21:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:21:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:21:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:21:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:21:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:21:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:21:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:21:36 debian dhclient[435]: XMT: Solicit on ens4, interval 124490ms.\\r\\nNov 17 04:22:21 debian otelopscol[2111]: 2023-11-17T04:22:21.905Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}\\r\\nNov 17 04:22:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:22:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:22:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:22:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:22:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:22:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:22:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:22:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:22:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:22:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\r\\nNov 17 04:22:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\r\\nNov 17 04:22:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\r\\nNov 17 04:22:33 debian otelopscol[2111]: 2023-11-17T04:22:33.849Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\", \\\"errorCauses\\\": [{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}]}\\r\\nNov 17 04:22:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:22:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:22:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:22:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:22:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:22:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:22:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:22:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:23:21 debian otelopscol[2111]: 2023-11-17T04:23:21.905Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}\\r\\nNov 17 04:23:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:23:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:23:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:23:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:23:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:23:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:23:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:23:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:23:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:23:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\r\\nNov 17 04:23:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\r\\nNov 17 04:23:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\r\\nNov 17 04:23:33 debian otelopscol[2111]: 2023-11-17T04:23:33.855Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\", \\\"errorCauses\\\": [{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}]}\\r\\nNov 17 04:23:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:23:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:23:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:23:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:23:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:23:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:23:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:23:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:23:40 debian dhclient[435]: XMT: Solicit on ens4, interval 113100ms.\\r\\nNov 17 04:24:21 debian otelopscol[2111]: 2023-11-17T04:24:21.908Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}\\r\\nNov 17 04:24:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:24:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:24:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:24:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:24:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:24:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:24:21 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:24:21 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:24:29 debian google_cloud_ops_agent_diagnostics[2069]: 2023/11/17 04:24:29 rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\r\\nNov 17 04:24:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\r\\nNov 17 04:24:29 debian google_cloud_ops_agent_diagnostics[2069]: error details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\r\\nNov 17 04:24:33 debian otelopscol[2111]: 2023-11-17T04:24:33.853Z#011error#011exporterhelper/queued_retry.go:357#011Exporting failed. Try enabling retry_on_failure config option to retry on retryable errors#011{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735; rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\", \\\"errorCauses\\\": [{\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}, {\\\"error\\\": \\\"rpc error: code = PermissionDenied desc = Cloud Monitoring API has not been used in project 328022628735 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.\\\\nerror details: name = ErrorInfo reason = SERVICE_DISABLED domain = googleapis.com metadata = map[consumer:projects/328022628735 service:monitoring.googleapis.com]\\\\nerror details: name = Help desc = Google developers console API activation url = https://console.developers.google.com/apis/api/monitoring.googleapis.com/overview?project=328022628735\\\"}]}\\r\\nNov 17 04:24:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*retrySender).send\\r\\nNov 17 04:24:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:357\\r\\nNov 17 04:24:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*metricsSenderWithObservability).send\\r\\nNov 17 04:24:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/metrics.go:125\\r\\nNov 17 04:24:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper.(*queuedRetrySender).start.func1\\r\\nNov 17 04:24:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/queued_retry.go:195\\r\\nNov 17 04:24:33 debian otelopscol[2111]: go.opentelemetry.io/collector/exporter/exporterhelper/internal.(*boundedMemoryQueue).StartConsumers.func1\\r\\nNov 17 04:24:33 debian otelopscol[2111]: #011/root/go/pkg/mod/go.opentelemetry.io/collector/exporter@v0.81.0/exporterhelper/internal/bounded_memory_queue.go:47\\r\\nNov 17 04:24:56 debian systemd[1]: Starting GCE Workload Certificate refresh...\\r\\nNov 17 04:24:56 debian gce_workload_cert_refresh[2159]: 2023/11/17 04:24:56: Done\\r\\nNov 17 04:24:56 debian systemd[1]: gce-workload-cert-refresh.service: Succeeded.\\r\\nNov 17 04:24:56 debian systemd[1]: Finished GCE Workload Certificate refresh.\\r\\n\",\n  \"start\": \"0\",\n  \"next\": \"311872\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-faultyssh-runbook/zones/europe-west2-a/instances/valid-linux-ssh/serialPortOutput\"\n}\n"
  },
  {
    "path": "test-data/gce4/json-dumps/compute-serial-port-output-valid-windows-ssh.json",
    "content": "{\n  \"kind\": \"compute#serialPortOutput\",\n  \"contents\": \"\\u001b[2J\\u001b[01;01H\\u001b[=3h\\u001b[2J\\u001b[01;01H\\u001b[2J\\u001b[01;01H\\u001b[=3h\\u001b[2J\\u001b[01;01HCSM BBS Table full.\\r\\nBdsDxe: loading Boot0001 \\\"UEFI Google PersistentDisk \\\" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\\r\\nBdsDxe: starting Boot0001 \\\"UEFI Google PersistentDisk \\\" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\\r\\n\\r\\nUEFI: Attempting to start image.\\r\\nDescription: UEFI Google PersistentDisk \\r\\nFilePath: PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\\r\\nOptionNumber: 1.\\r\\n\\r\\n\\u001b[2J\\u001b[01;01H\\u001b[=3h\\u001b[2J\\u001b[01;01H\\u001b[1m\\u001b[37m\\u001b[40m\\u001b[2J\\u001b[01;01H2023/11/17 04:04:27 GCEGuestAgent: GCE Agent Started (version 20231004.02)\\n2023/11/17 04:04:27 GCEGuestAgent: Adding route to metadata server on adapter with index 5\\n2023/11/17 04:04:28 GCEGuestAgent: Starting the scheduler to run jobs\\n2023/11/17 04:04:28 GCEGuestAgent: start: []\\n2023/11/17 04:04:28 GCEGuestAgent: Successfully scheduled job telemetryJobID\\n2023/11/17 04:10:04 GCEInstanceSetup: Enable google_osconfig_agent during the specialize configuration pass.\\n2023/11/17 04:10:13 GCEInstanceSetup: Starting sysprep specialize phase.\\n2023/11/17 04:10:31 GCEInstanceSetup: All networks set to DHCP.\\n2023/11/17 04:10:32 GCEInstanceSetup: VirtIO network adapter detected.\\n2023/11/17 04:10:33 GCEInstanceSetup: Running 'netsh' with arguments 'interface ipv4 set interface Ethernet mtu=1460'\\n2023/11/17 04:10:44 GCEInstanceSetup: --\\u003e Ok.\\n2023/11/17 04:10:44 GCEInstanceSetup: MTU set to 1460.\\n2023/11/17 04:10:44 GCEInstanceSetup: Running 'route' with arguments '/p add 169.254.169.254 mask 255.255.255.255 0.0.0.0 if 5 metric 1'\\n2023/11/17 04:10:45 GCEInstanceSetup: --\\u003e OK!\\n2023/11/17 04:10:57 GCEInstanceSetup: Getting hostname from metadata server.\\n2023/11/17 04:10:58 GCEInstanceSetup: Renamed from WIN-4VMNVNB0HQV to valid-windows-ssh.\\n2023/11/17 04:10:58 GCEInstanceSetup: Configuring WinRM...\\n2023/11/17 04:11:15 GCEInstanceSetup: Running 'C:\\\\Program Files\\\\Google\\\\Compute Engine\\\\tools\\\\certgen.exe' with arguments '-outDir C:\\\\Windows\\\\TEMP\\\\cert -hostname valid-windows-ssh'\\n2023/11/17 04:11:19 GCEInstanceSetup: --\\u003e written C:\\\\Windows\\\\TEMP\\\\cert\\\\cert.p12\\n2023/11/17 04:11:21 GCEInstanceSetup: Waiting for WinRM to be running...\\n2023/11/17 04:11:30 GCEInstanceSetup: Setup of WinRM complete.\\n2023/11/17 04:11:32 GCEMetadataScripts: Starting specialize scripts (version 20231004.02).\\n2023/11/17 04:11:32 GCEMetadataScripts: No specialize scripts to run.\\n2023/11/17 04:11:32 GCEInstanceSetup: Finished with sysprep specialize phase, restarting...\\n2023/11/17 04:11:49 GCEGuestAgent: Error watching metadata: context canceled\\n2023/11/17 04:11:51 GCEGuestAgent: GCE Agent Stopped\\n\\u001b[2J\\u001b[01;01H\\u001b[=3h\\u001b[2J\\u001b[01;01H\\u001b[2J\\u001b[01;01H\\u001b[=3h\\u001b[2J\\u001b[01;01HCSM BBS Table full.\\r\\nBdsDxe: loading Boot0003 \\\"Windows Boot Manager\\\" from HD(2,GPT,E07BF2FB-B462-4D2C-955E-124C0C590313,0x8000,0x32000)/\\\\EFI\\\\Microsoft\\\\Boot\\\\bootmgfw.efi\\r\\nBdsDxe: starting Boot0003 \\\"Windows Boot Manager\\\" from HD(2,GPT,E07BF2FB-B462-4D2C-955E-124C0C590313,0x8000,0x32000)/\\\\EFI\\\\Microsoft\\\\Boot\\\\bootmgfw.efi\\r\\n\\r\\nUEFI: Attempting to start image.\\r\\nDescription: Windows Boot Manager\\r\\nFilePath: HD(2,GPT,E07BF2FB-B462-4D2C-955E-124C0C590313,0x8000,0x32000)/\\\\EFI\\\\Microsoft\\\\Boot\\\\bootmgfw.efi\\r\\nOptionNumber: 3.\\r\\n\\r\\n\\u001b[2J\\u001b[01;01H\\u001b[=3h\\u001b[2J\\u001b[01;01H\\u001b[1m\\u001b[37m\\u001b[40m\\u001b[2J\\u001b[01;01H2023/11/17 04:14:43 GCEInstanceSetup: Enable google_osconfig_agent during the specialize configuration pass.\\n2023/11/17 04:14:54 GCEInstanceSetup: WinRM certificate details: Subject: CN=valid-windows-ssh, Thumbprint: DF776825E4EFC3C6755C172199C8467279BDBD3D\\n2023/11/17 04:14:54 GCEInstanceSetup: RDP certificate details: Subject: CN=valid-windows-ssh, Thumbprint: 1998E382AD653F50CBBB2BD661F96F64DD7B89F7\\n2023/11/17 04:15:04 GCEInstanceSetup: Checking instance license activation status.\\n2023/11/17 04:15:19 GCEInstanceSetup: valid-windows-ssh needs to be activated by a KMS Server.\\n2023/11/17 04:15:21 GCEInstanceSetup: Key Management Service machine name set to kms.windows.googlecloud.com successfully.\\n2023/11/17 04:15:27 GCEInstanceSetup: Installed product key WMDGN-G9PQG-XVVXX-R3X43-63DFG successfully.\\n2023/11/17 04:15:27 GCEInstanceSetup: Activating instance...\\n2023/11/17 04:15:47 GCEInstanceSetup: Activating Windows(R), ServerDatacenter edition (34e1ae55-27f8-4950-8877-7a03be5fb181) ...\\n2023/11/17 04:15:47 GCEInstanceSetup: Product activated successfully.\\n2023/11/17 04:15:50 GCEInstanceSetup: Activation successful.\\n2023/11/17 04:15:50 GCEInstanceSetup: Running 'schtasks' with arguments '/change /tn GCEStartup /enable'\\n2023/11/17 04:15:51 GCEInstanceSetup: --\\u003e SUCCESS: The parameters of scheduled task \\\"GCEStartup\\\" have been changed.\\n2023/11/17 04:15:51 GCEInstanceSetup: Running 'schtasks' with arguments '/run /tn GCEStartup'\\n2023/11/17 04:15:51 GCEInstanceSetup: --\\u003e SUCCESS: Attempted to run the scheduled task \\\"GCEStartup\\\".\\n2023/11/17 04:15:51 GCEInstanceSetup: ------------------------------------------------------------\\n2023/11/17 04:15:51 GCEInstanceSetup: Instance setup finished. valid-windows-ssh is ready to use.\\n2023/11/17 04:15:51 GCEInstanceSetup: ------------------------------------------------------------\\n2023/11/17 04:16:06 GCEMetadataScripts: Starting startup scripts (version 20231004.02).\\n2023/11/17 04:16:09 GCEMetadataScripts: No startup scripts to run.\\n2023/11/17 04:16:10 GCEGuestAgent: GCE Agent Started (version 20231004.02)\\n2023/11/17 04:16:17 GCEGuestAgent: Starting the scheduler to run jobs\\n2023/11/17 04:16:19 GCEGuestAgent: start: []\\n2023/11/17 04:16:20 GCEGuestAgent: Scheduling job \\\"telemetryJobID\\\" to run at 24.000000 hr interval\\n2023/11/17 04:16:20 GCEGuestAgent: Successfully scheduled job telemetryJobID\\n2023/11/17 04:16:20 GCEGuestAgent: added: [now 2023-11-17 04:16:20.6575916 +0000 GMT entry 1 next 2023-11-18 04:16:20 +0000 GMT]\\n2023-11-17T04:16:37.9296Z OSConfigAgent Info: OSConfig Agent (version 20231010.00.0+win@1) started.\\n\",\n  \"start\": \"0\",\n  \"next\": \"5789\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-a/instances/valid-windows-ssh/serialPortOutput\"\n}\n"
  },
  {
    "path": "test-data/gce4/json-dumps/compute-subnetwork-policy.json",
    "content": "{\n  \"bindings\": [\n    {\n      \"members\": [\n        \"serviceAccount:gke1sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/compute.networkUser\"\n    }\n  ],\n  \"etag\": \"BwXba-kLoiA=\",\n  \"version\": 1\n}\n"
  },
  {
    "path": "test-data/gce4/json-dumps/compute-subnetworks-aggregated.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gce-vm-performance/aggregated/subnetworks\",\n  \"items\": {\n    \"regions/asia-east1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.626-07:00\",\n          \"fingerprint\": \"ExVityxQ7Zw=\",\n          \"gatewayAddress\": \"10.140.0.1\",\n          \"id\": \"7865289181883843690\",\n          \"ipCidrRange\": \"10.140.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-east1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-east1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-east2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.735-07:00\",\n          \"fingerprint\": \"WEPpLpqTaII=\",\n          \"gatewayAddress\": \"10.170.0.1\",\n          \"id\": \"1625232185091474538\",\n          \"ipCidrRange\": \"10.170.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-east2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-east2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-northeast1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.546-07:00\",\n          \"fingerprint\": \"bQ24OL6A-_g=\",\n          \"gatewayAddress\": \"10.146.0.1\",\n          \"id\": \"1533136348119614570\",\n          \"ipCidrRange\": \"10.146.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-northeast1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-northeast1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-northeast2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.673-07:00\",\n          \"fingerprint\": \"V5llMO8nmmI=\",\n          \"gatewayAddress\": \"10.174.0.1\",\n          \"id\": \"9108510720326681706\",\n          \"ipCidrRange\": \"10.174.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-northeast2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-northeast2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-northeast3\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.690-07:00\",\n          \"fingerprint\": \"YvlSkRtP_4s=\",\n          \"gatewayAddress\": \"10.178.0.1\",\n          \"id\": \"4106072082002527338\",\n          \"ipCidrRange\": \"10.178.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-northeast3\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-northeast3/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-south1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.687-07:00\",\n          \"fingerprint\": \"wpauE-6Ls5k=\",\n          \"gatewayAddress\": \"10.160.0.1\",\n          \"id\": \"799045077667726442\",\n          \"ipCidrRange\": \"10.160.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-south1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-south1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-south2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.745-07:00\",\n          \"fingerprint\": \"Q7YnvFsvcIs=\",\n          \"gatewayAddress\": \"10.190.0.1\",\n          \"id\": \"5569943562367845482\",\n          \"ipCidrRange\": \"10.190.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-south2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-south2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-southeast1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.680-07:00\",\n          \"fingerprint\": \"9qw_IGoz63I=\",\n          \"gatewayAddress\": \"10.148.0.1\",\n          \"id\": \"1399967472608134250\",\n          \"ipCidrRange\": \"10.148.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-southeast1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-southeast1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-southeast2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.669-07:00\",\n          \"fingerprint\": \"A364yIYGdbo=\",\n          \"gatewayAddress\": \"10.184.0.1\",\n          \"id\": \"925018594468217962\",\n          \"ipCidrRange\": \"10.184.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-southeast2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-southeast2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/australia-southeast1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.681-07:00\",\n          \"fingerprint\": \"nW5ufndV5Es=\",\n          \"gatewayAddress\": \"10.152.0.1\",\n          \"id\": \"3491955985615471722\",\n          \"ipCidrRange\": \"10.152.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/australia-southeast1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/australia-southeast1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/australia-southeast2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.656-07:00\",\n          \"fingerprint\": \"DrRYoQz8MQQ=\",\n          \"gatewayAddress\": \"10.192.0.1\",\n          \"id\": \"3881444575162188906\",\n          \"ipCidrRange\": \"10.192.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/australia-southeast2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/australia-southeast2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-central2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.681-07:00\",\n          \"fingerprint\": \"Fkp5Ia_kWjU=\",\n          \"gatewayAddress\": \"10.186.0.1\",\n          \"id\": \"7309165993080177770\",\n          \"ipCidrRange\": \"10.186.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-central2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-central2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-north1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.676-07:00\",\n          \"fingerprint\": \"uAKn9PpojKc=\",\n          \"gatewayAddress\": \"10.166.0.1\",\n          \"id\": \"5895305034600072298\",\n          \"ipCidrRange\": \"10.166.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-north1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-north1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-southwest1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:34.478-07:00\",\n          \"fingerprint\": \"7puHFtbgohs=\",\n          \"gatewayAddress\": \"10.204.0.1\",\n          \"id\": \"6503801733215994985\",\n          \"ipCidrRange\": \"10.204.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-southwest1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-southwest1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.565-07:00\",\n          \"fingerprint\": \"RYxGa4BdqVw=\",\n          \"gatewayAddress\": \"10.132.0.1\",\n          \"id\": \"4254674819412968554\",\n          \"ipCidrRange\": \"10.132.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.592-07:00\",\n          \"fingerprint\": \"InwBX-PAmxE=\",\n          \"gatewayAddress\": \"10.154.0.1\",\n          \"id\": \"8673388756094993514\",\n          \"ipCidrRange\": \"10.154.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west3\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:34.435-07:00\",\n          \"fingerprint\": \"jtqiYE_BvSA=\",\n          \"gatewayAddress\": \"10.156.0.1\",\n          \"id\": \"2730999123496453225\",\n          \"ipCidrRange\": \"10.156.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west3\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west3/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west4\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.623-07:00\",\n          \"fingerprint\": \"sfuW5PvbdEI=\",\n          \"gatewayAddress\": \"10.164.0.1\",\n          \"id\": \"1461822054006834282\",\n          \"ipCidrRange\": \"10.164.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default\",\n          \"privateIpGoogleAccess\": true,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west4\",\n          \"secondaryIpRanges\": [\n            {\n              \"ipCidrRange\": \"10.85.0.0/17\",\n              \"rangeName\": \"gke-autopilot-gke1-pods-6a0c2f5b\"\n            },\n            {\n              \"ipCidrRange\": \"10.85.128.0/22\",\n              \"rangeName\": \"gke-autopilot-gke1-services-6a0c2f5b\"\n            },\n            {\n              \"ipCidrRange\": \"10.60.0.0/20\",\n              \"rangeName\": \"gke-gke4-services-e4411110\"\n            },\n            {\n              \"ipCidrRange\": \"10.56.0.0/14\",\n              \"rangeName\": \"gke-gke4-pods-e4411110\"\n            },\n            {\n              \"ipCidrRange\": \"10.60.96.0/22\",\n              \"rangeName\": \"gke-autopilot-gke2-services-3fbbc734\"\n            },\n            {\n              \"ipCidrRange\": \"10.60.128.0/17\",\n              \"rangeName\": \"gke-autopilot-gke2-pods-3fbbc734\"\n            }\n          ],\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west4/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        },\n        {\n          \"creationTimestamp\": \"2022-10-11T07:16:29.795-07:00\",\n          \"enableFlowLogs\": false,\n          \"fingerprint\": \"PE0z2PNqD2Y=\",\n          \"gatewayAddress\": \"192.168.0.1\",\n          \"id\": \"7423481761753515090\",\n          \"ipCidrRange\": \"192.168.0.0/24\",\n          \"kind\": \"compute#subnetwork\",\n          \"logConfig\": {\n            \"aggregationInterval\": \"INTERVAL_5_SEC\",\n            \"enable\": false,\n            \"flowSampling\": 0.5,\n            \"metadata\": \"INCLUDE_ALL_METADATA\"\n          },\n          \"name\": \"gke1-subnet\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west4\",\n          \"secondaryIpRanges\": [\n            {\n              \"ipCidrRange\": \"192.168.1.0/24\",\n              \"rangeName\": \"gke1-secondary-range-pod\"\n            },\n            {\n              \"ipCidrRange\": \"192.168.2.0/24\",\n              \"rangeName\": \"gke1-secondary-range-svc\"\n            }\n          ],\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west4/subnetworks/gke1-subnet\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west6\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.530-07:00\",\n          \"fingerprint\": \"Ic4Y34BRjOE=\",\n          \"gatewayAddress\": \"10.172.0.1\",\n          \"id\": \"3567972882370315370\",\n          \"ipCidrRange\": \"10.172.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west6\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west6/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west8\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.586-07:00\",\n          \"fingerprint\": \"_MhtvVpnR5c=\",\n          \"gatewayAddress\": \"10.198.0.1\",\n          \"id\": \"5905962051052291178\",\n          \"ipCidrRange\": \"10.198.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west8\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west8/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west9\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.638-07:00\",\n          \"fingerprint\": \"0uz_7VhFjLE=\",\n          \"gatewayAddress\": \"10.200.0.1\",\n          \"id\": \"5697832252330263658\",\n          \"ipCidrRange\": \"10.200.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west9\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west9/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/me-west1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.741-07:00\",\n          \"fingerprint\": \"70g6IoCP0CM=\",\n          \"gatewayAddress\": \"10.208.0.1\",\n          \"id\": \"2381367997960340586\",\n          \"ipCidrRange\": \"10.208.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/me-west1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/me-west1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/northamerica-northeast1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.499-07:00\",\n          \"fingerprint\": \"vNYpwgnkSCI=\",\n          \"gatewayAddress\": \"10.162.0.1\",\n          \"id\": \"5798419596128601194\",\n          \"ipCidrRange\": \"10.162.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/northamerica-northeast1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/northamerica-northeast1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/northamerica-northeast2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.493-07:00\",\n          \"fingerprint\": \"7ik2BWFfN84=\",\n          \"gatewayAddress\": \"10.188.0.1\",\n          \"id\": \"711542983096845418\",\n          \"ipCidrRange\": \"10.188.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/northamerica-northeast2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/northamerica-northeast2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/southamerica-east1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.668-07:00\",\n          \"fingerprint\": \"pqhad5TnzVc=\",\n          \"gatewayAddress\": \"10.158.0.1\",\n          \"id\": \"2301799042992620650\",\n          \"ipCidrRange\": \"10.158.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/southamerica-east1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/southamerica-east1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/southamerica-west1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.648-07:00\",\n          \"fingerprint\": \"ea50MPZjruA=\",\n          \"gatewayAddress\": \"10.194.0.1\",\n          \"id\": \"6124576470534243434\",\n          \"ipCidrRange\": \"10.194.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/southamerica-west1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/southamerica-west1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-central1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.382-07:00\",\n          \"fingerprint\": \"pb4O-4ISjAE=\",\n          \"gatewayAddress\": \"10.128.0.1\",\n          \"id\": \"6250438653192488042\",\n          \"ipCidrRange\": \"10.128.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-central1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-central1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-east1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.368-07:00\",\n          \"fingerprint\": \"bvN-N8FS9U4=\",\n          \"gatewayAddress\": \"10.142.0.1\",\n          \"id\": \"1443866556678849642\",\n          \"ipCidrRange\": \"10.142.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-east1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-east1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-east4\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.486-07:00\",\n          \"fingerprint\": \"jew6EZUeYrM=\",\n          \"gatewayAddress\": \"10.150.0.1\",\n          \"id\": \"5871230243962405994\",\n          \"ipCidrRange\": \"10.150.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-east4\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-east4/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-east5\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.504-07:00\",\n          \"fingerprint\": \"KVZisxAl1CI=\",\n          \"gatewayAddress\": \"10.202.0.1\",\n          \"id\": \"4332627157280408682\",\n          \"ipCidrRange\": \"10.202.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-east5\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-east5/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-east7\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T09:13:19.272-07:00\",\n          \"fingerprint\": \"BEZq6cSPkco=\",\n          \"gatewayAddress\": \"10.196.0.1\",\n          \"id\": \"7977046348344600816\",\n          \"ipCidrRange\": \"10.196.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-east7\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-east7/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-south1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.435-07:00\",\n          \"fingerprint\": \"1Se61ZXzpjY=\",\n          \"gatewayAddress\": \"10.206.0.1\",\n          \"id\": \"7154466601132672106\",\n          \"ipCidrRange\": \"10.206.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-south1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-south1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-west1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.499-07:00\",\n          \"fingerprint\": \"E0k7cQEp7_I=\",\n          \"gatewayAddress\": \"10.138.0.1\",\n          \"id\": \"5323136092791686250\",\n          \"ipCidrRange\": \"10.138.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-west2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.549-07:00\",\n          \"fingerprint\": \"-JD9bbh-QlA=\",\n          \"gatewayAddress\": \"10.168.0.1\",\n          \"id\": \"4458757238523741290\",\n          \"ipCidrRange\": \"10.168.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-west3\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.524-07:00\",\n          \"fingerprint\": \"P01BE480Q2I=\",\n          \"gatewayAddress\": \"10.180.0.1\",\n          \"id\": \"1135562538472752234\",\n          \"ipCidrRange\": \"10.180.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west3\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west3/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-west4\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.521-07:00\",\n          \"fingerprint\": \"2k-WBaR7JKQ=\",\n          \"gatewayAddress\": \"10.182.0.1\",\n          \"id\": \"7061406355024299114\",\n          \"ipCidrRange\": \"10.182.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west4\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west4/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    }\n  },\n  \"kind\": \"compute#subnetworkAggregatedList\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/aggregated/subnetworks\"\n}\n"
  },
  {
    "path": "test-data/gce4/json-dumps/compute-subnetworks-europe-west4.json",
    "content": "{\n  \"kind\": \"compute#subnetworkList\",\n  \"id\": \"projects/gcpdiag-gce-vm-performance/regions/europe-west4/subnetworks\",\n  \"items\": [\n    {\n      \"kind\": \"compute#subnetwork\",\n      \"id\": \"4774247690482065659\",\n      \"creationTimestamp\": \"2022-03-30T02:08:36.021-07:00\",\n      \"name\": \"default\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default\",\n      \"ipCidrRange\": \"10.164.0.0/20\",\n      \"gatewayAddress\": \"10.164.0.1\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west4/subnetworks/default\",\n      \"privateIpGoogleAccess\": true,\n      \"secondaryIpRanges\": [\n        {\n          \"rangeName\": \"gke-gke4-services-93befb7e\",\n          \"ipCidrRange\": \"10.60.0.0/20\"\n        },\n        {\n          \"rangeName\": \"gke-gke4-pods-93befb7e\",\n          \"ipCidrRange\": \"10.56.0.0/14\"\n        },\n        {\n          \"rangeName\": \"gke-autopilot-gke1-services-19977223\",\n          \"ipCidrRange\": \"10.85.128.0/22\"\n        },\n        {\n          \"rangeName\": \"gke-autopilot-gke1-pods-19977223\",\n          \"ipCidrRange\": \"10.85.0.0/17\"\n        },\n        {\n          \"rangeName\": \"gke-autopilot-gke2-pods-65d1ba15\",\n          \"ipCidrRange\": \"10.60.128.0/17\"\n        },\n        {\n          \"rangeName\": \"gke-autopilot-gke2-services-65d1ba15\",\n          \"ipCidrRange\": \"10.60.96.0/22\"\n        }\n      ],\n      \"fingerprint\": \"-9hqGif0SQ0=\",\n      \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n      \"purpose\": \"PRIVATE\",\n      \"stackType\": \"IPV4_ONLY\"\n    },\n    {\n      \"kind\": \"compute#subnetwork\",\n      \"id\": \"1818761461517361320\",\n      \"creationTimestamp\": \"2022-03-30T02:09:27.964-07:00\",\n      \"name\": \"gke1-subnet\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default\",\n      \"ipCidrRange\": \"192.168.0.0/24\",\n      \"gatewayAddress\": \"192.168.0.1\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west4/subnetworks/gke1-subnet\",\n      \"privateIpGoogleAccess\": false,\n      \"secondaryIpRanges\": [\n        {\n          \"rangeName\": \"gke1-secondary-range-pod\",\n          \"ipCidrRange\": \"192.168.1.0/24\"\n        },\n        {\n          \"rangeName\": \"gke1-secondary-range-svc\",\n          \"ipCidrRange\": \"192.168.2.0/24\"\n        }\n      ],\n      \"fingerprint\": \"Ir2p9uebpiE=\",\n      \"enableFlowLogs\": false,\n      \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n      \"purpose\": \"PRIVATE\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"stackType\": \"IPV4_ONLY\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west4/subnetworks\"\n}\n"
  },
  {
    "path": "test-data/gce4/json-dumps/compute-templates.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gce-vm-performance/global/instanceTemplates\",\n  \"items\": [\n    {\n      \"creationTimestamp\": \"2022-04-26T08:21:35.891-07:00\",\n      \"description\": \"\",\n      \"id\": \"4047445761213182736\",\n      \"kind\": \"compute#instanceTemplate\",\n      \"name\": \"gke-gke1-default-pool-35923fbc\",\n      \"properties\": {\n        \"canIpForward\": true,\n        \"disks\": [\n          {\n            \"autoDelete\": true,\n            \"boot\": true,\n            \"deviceName\": \"persistent-disk-0\",\n            \"index\": 0,\n            \"initializeParams\": {\n              \"diskSizeGb\": \"100\",\n              \"diskType\": \"pd-standard\",\n              \"labels\": {\n                \"gcp_doctor_test\": \"gke\",\n                \"goog-gke-node\": \"\"\n              },\n              \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-12110-gke2000-cos-89-16108-604-19-v220317-c-pre\"\n            },\n            \"kind\": \"compute#attachedDisk\",\n            \"mode\": \"READ_WRITE\",\n            \"type\": \"PERSISTENT\"\n          }\n        ],\n        \"labels\": {\n          \"gcp_doctor_test\": \"gke\",\n          \"goog-gke-node\": \"\"\n        },\n        \"machineType\": \"e2-small\",\n        \"metadata\": {\n          \"fingerprint\": \"REDACTED\",\n          \"items\": [\n            {\n              \"key\": \"kube-env\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"kubelet-config\",\n              \"value\": \"apiVersion: kubelet.config.k8s.io/v1beta1\\nauthentication:\\n  anonymous:\\n    enabled: false\\n  webhook:\\n    enabled: true\\n  x509:\\n    clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\\nauthorization:\\n  mode: Webhook\\ncgroupRoot: /\\nclusterDNS:\\n- 10.3.240.10\\nclusterDomain: cluster.local\\nenableDebuggingHandlers: true\\nevictionHard:\\n  memory.available: 100Mi\\n  nodefs.available: 10%\\n  nodefs.inodesFree: 5%\\n  pid.available: 10%\\nfeatureGates:\\n  DynamicKubeletConfig: false\\n  ExecProbeTimeout: false\\n  InTreePluginAWSUnregister: true\\n  InTreePluginAzureDiskUnregister: true\\n  InTreePluginOpenStackUnregister: true\\n  InTreePluginvSphereUnregister: true\\n  RotateKubeletServerCertificate: true\\nkernelMemcgNotification: true\\nkind: KubeletConfiguration\\nkubeReserved:\\n  cpu: 1060m\\n  ephemeral-storage: 41Gi\\n  memory: 512Mi\\nreadOnlyPort: 10255\\nserverTLSBootstrap: true\\nstaticPodPath: /etc/kubernetes/manifests\\n\"\n            },\n            {\n              \"key\": \"kube-labels\",\n              \"value\": \"cloud.google.com/gke-boot-disk=pd-standard,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/machine-family=e2\"\n            },\n            {\n              \"key\": \"disable-legacy-endpoints\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"configure-sh\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"gci-update-strategy\",\n              \"value\": \"update_disabled\"\n            },\n            {\n              \"key\": \"enable-oslogin\",\n              \"value\": \"false\"\n            },\n            {\n              \"key\": \"kubeconfig\",\n              \"value\": \"apiVersion: v1\\nkind: Config\\nclusters:\\n- cluster:\\n    server: https://35.205.188.165\\n    certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\\n  name: default-cluster\\ncontexts:\\n- context:\\n    cluster: default-cluster\\n    namespace: default\\n    user: exec-plugin-auth\\n  name: default-context\\ncurrent-context: default-context\\nusers:\\n- name: exec-plugin-auth\\n  user:\\n    exec:\\n      apiVersion: \\\"client.authentication.k8s.io/v1alpha1\\\"\\n      command: '/home/kubernetes/bin/gke-exec-auth-plugin'\\n      args: [\\\"--cache-dir\\\", '/var/lib/kubelet/pki/']\\n\"\n            },\n            {\n              \"key\": \"user-data\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"gci-metrics-enabled\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"gci-ensure-gke-docker\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"serial-port-logging-enable\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"cluster-location\",\n              \"value\": \"europe-west1-b\"\n            },\n            {\n              \"key\": \"google-compute-enable-pcid\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"cluster-name\",\n              \"value\": \"gke1\"\n            },\n            {\n              \"key\": \"cluster-uid\",\n              \"value\": \"f36cf6ddd50c4b998cf1921fbc3e11fc6895bf0ad2d841e7956d7fca6e7024b4\"\n            }\n          ],\n          \"kind\": \"compute#metadata\"\n        },\n        \"networkInterfaces\": [\n          {\n            \"accessConfigs\": [\n              {\n                \"kind\": \"compute#accessConfig\",\n                \"name\": \"external-nat\",\n                \"networkTier\": \"PREMIUM\",\n                \"type\": \"ONE_TO_ONE_NAT\"\n              }\n            ],\n            \"kind\": \"compute#networkInterface\",\n            \"name\": \"nic0\",\n            \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default\",\n            \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west1/subnetworks/default\"\n          }\n        ],\n        \"networkPerformanceConfig\": {\n          \"totalEgressBandwidthTier\": \"DEFAULT\"\n        },\n        \"scheduling\": {\n          \"automaticRestart\": true,\n          \"onHostMaintenance\": \"MIGRATE\",\n          \"preemptible\": false,\n          \"provisioningModel\": \"STANDARD\"\n        },\n        \"serviceAccounts\": [\n          {\n            \"email\": \"default\",\n            \"scopes\": [\n              \"https://www.googleapis.com/auth/logging.write\",\n              \"https://www.googleapis.com/auth/monitoring\"\n            ]\n          }\n        ],\n        \"shieldedInstanceConfig\": {\n          \"enableIntegrityMonitoring\": true,\n          \"enableSecureBoot\": false,\n          \"enableVtpm\": true\n        },\n        \"tags\": {\n          \"items\": [\n            \"gke-gke1-f36cf6dd-node\"\n          ]\n        }\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/instanceTemplates/gke-gke1-default-pool-35923fbc\"\n    },\n    {\n      \"creationTimestamp\": \"2022-04-26T08:20:48.842-07:00\",\n      \"description\": \"\",\n      \"id\": \"7086722794918359871\",\n      \"kind\": \"compute#instanceTemplate\",\n      \"name\": \"mig-template\",\n      \"properties\": {\n        \"disks\": [\n          {\n            \"autoDelete\": true,\n            \"boot\": true,\n            \"deviceName\": \"persistent-disk-0\",\n            \"index\": 0,\n            \"initializeParams\": {\n              \"diskType\": \"pd-standard\",\n              \"sourceImage\": \"projects/debian-cloud/global/images/family/debian-9\"\n            },\n            \"interface\": \"SCSI\",\n            \"kind\": \"compute#attachedDisk\",\n            \"mode\": \"READ_WRITE\",\n            \"type\": \"PERSISTENT\"\n          }\n        ],\n        \"machineType\": \"e2-micro\",\n        \"metadata\": {\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#metadata\"\n        },\n        \"networkInterfaces\": [\n          {\n            \"kind\": \"compute#networkInterface\",\n            \"name\": \"nic0\",\n            \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/networks/default\"\n          }\n        ],\n        \"scheduling\": {\n          \"automaticRestart\": true,\n          \"onHostMaintenance\": \"MIGRATE\",\n          \"preemptible\": false,\n          \"provisioningModel\": \"STANDARD\"\n        }\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/instanceTemplates/mig-template\"\n    }\n  ],\n  \"kind\": \"compute#instanceTemplateList\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/instanceTemplates\"\n}\n"
  },
  {
    "path": "test-data/gce4/json-dumps/compute-zones.json",
    "content": "{\n  \"kind\": \"compute#zoneList\",\n  \"id\": \"projects/gcpdiag-gce-vm-performance/zones\",\n  \"items\": [\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2231\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east1-b\",\n      \"description\": \"us-east1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-east1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2233\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east1-c\",\n      \"description\": \"us-east1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-east1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2234\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east1-d\",\n      \"description\": \"us-east1-d\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-east1-d\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2272\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east4-c\",\n      \"description\": \"us-east4-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-east4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-east4-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2271\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east4-b\",\n      \"description\": \"us-east4-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-east4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-east4-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2270\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east4-a\",\n      \"description\": \"us-east4-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-east4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-east4-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2002\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1-c\",\n      \"description\": \"us-central1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-central1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2000\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1-a\",\n      \"description\": \"us-central1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-central1-a\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2004\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1-f\",\n      \"description\": \"us-central1-f\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-central1-f\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2001\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1-b\",\n      \"description\": \"us-central1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-central1-b\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2211\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west1-b\",\n      \"description\": \"us-west1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-west1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2212\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west1-c\",\n      \"description\": \"us-west1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-west1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2210\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west1-a\",\n      \"description\": \"us-west1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-west1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2342\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west4-a\",\n      \"description\": \"europe-west4-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2341\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west4-b\",\n      \"description\": \"europe-west4-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2340\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west4-c\",\n      \"description\": \"europe-west4-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-c\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2101\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west1-b\",\n      \"description\": \"europe-west1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2104\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west1-d\",\n      \"description\": \"europe-west1-d\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west1-d\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2103\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west1-c\",\n      \"description\": \"europe-west1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2300\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west3-c\",\n      \"description\": \"europe-west3-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west3-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2301\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west3-a\",\n      \"description\": \"europe-west3-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west3-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2302\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west3-b\",\n      \"description\": \"europe-west3-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west3-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2292\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west2-c\",\n      \"description\": \"europe-west2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2291\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west2-b\",\n      \"description\": \"europe-west2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2290\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west2-a\",\n      \"description\": \"europe-west2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2221\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east1-b\",\n      \"description\": \"asia-east1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-east1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2220\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east1-a\",\n      \"description\": \"asia-east1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-east1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2222\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east1-c\",\n      \"description\": \"asia-east1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-east1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2261\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast1-b\",\n      \"description\": \"asia-southeast1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-southeast1-b\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2260\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast1-a\",\n      \"description\": \"asia-southeast1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-southeast1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2262\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast1-c\",\n      \"description\": \"asia-southeast1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-southeast1-c\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2251\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast1-b\",\n      \"description\": \"asia-northeast1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-northeast1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2252\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast1-c\",\n      \"description\": \"asia-northeast1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-northeast1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2250\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast1-a\",\n      \"description\": \"asia-northeast1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-northeast1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2322\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south1-c\",\n      \"description\": \"asia-south1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-south1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2320\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south1-b\",\n      \"description\": \"asia-south1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-south1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2321\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south1-a\",\n      \"description\": \"asia-south1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-south1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2282\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast1-b\",\n      \"description\": \"australia-southeast1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/australia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/australia-southeast1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2280\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast1-c\",\n      \"description\": \"australia-southeast1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/australia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/australia-southeast1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2281\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast1-a\",\n      \"description\": \"australia-southeast1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/australia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/australia-southeast1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2311\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-east1-b\",\n      \"description\": \"southamerica-east1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/southamerica-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/southamerica-east1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2312\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-east1-c\",\n      \"description\": \"southamerica-east1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/southamerica-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/southamerica-east1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2310\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-east1-a\",\n      \"description\": \"southamerica-east1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/southamerica-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/southamerica-east1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2372\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east2-a\",\n      \"description\": \"asia-east2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-east2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-east2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2371\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east2-b\",\n      \"description\": \"asia-east2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-east2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-east2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2370\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east2-c\",\n      \"description\": \"asia-east2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-east2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-east2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2392\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast2-a\",\n      \"description\": \"asia-northeast2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-northeast2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2390\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast2-b\",\n      \"description\": \"asia-northeast2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-northeast2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2391\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast2-c\",\n      \"description\": \"asia-northeast2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-northeast2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2410\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast3-a\",\n      \"description\": \"asia-northeast3-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-northeast3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-northeast3-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2412\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast3-b\",\n      \"description\": \"asia-northeast3-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-northeast3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-northeast3-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2411\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast3-c\",\n      \"description\": \"asia-northeast3-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-northeast3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-northeast3-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2470\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south2-a\",\n      \"description\": \"asia-south2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-south2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-south2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2472\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south2-b\",\n      \"description\": \"asia-south2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-south2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-south2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2471\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south2-c\",\n      \"description\": \"asia-south2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-south2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-south2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2440\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast2-a\",\n      \"description\": \"asia-southeast2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-southeast2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2442\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast2-b\",\n      \"description\": \"asia-southeast2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-southeast2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2441\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast2-c\",\n      \"description\": \"asia-southeast2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/asia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/asia-southeast2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2480\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast2-a\",\n      \"description\": \"australia-southeast2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/australia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/australia-southeast2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2482\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast2-b\",\n      \"description\": \"australia-southeast2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/australia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/australia-southeast2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2481\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast2-c\",\n      \"description\": \"australia-southeast2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/australia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/australia-southeast2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2452\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-central2-a\",\n      \"description\": \"europe-central2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-central2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-central2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2450\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-central2-b\",\n      \"description\": \"europe-central2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-central2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-central2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2451\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-central2-c\",\n      \"description\": \"europe-central2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-central2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-central2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2352\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-north1-a\",\n      \"description\": \"europe-north1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-north1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-north1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2350\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-north1-b\",\n      \"description\": \"europe-north1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-north1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-north1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2351\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-north1-c\",\n      \"description\": \"europe-north1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-north1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-north1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2541\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-southwest1-a\",\n      \"description\": \"europe-southwest1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-southwest1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-southwest1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2540\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-southwest1-b\",\n      \"description\": \"europe-southwest1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-southwest1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-southwest1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2542\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-southwest1-c\",\n      \"description\": \"europe-southwest1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-southwest1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-southwest1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2591\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west10-a\",\n      \"description\": \"europe-west10-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west10\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west10-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2592\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west10-b\",\n      \"description\": \"europe-west10-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west10\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west10-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2590\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west10-c\",\n      \"description\": \"europe-west10-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west10\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west10-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2571\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west12-a\",\n      \"description\": \"europe-west12-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west12\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west12-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2572\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west12-b\",\n      \"description\": \"europe-west12-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west12\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west12-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2570\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west12-c\",\n      \"description\": \"europe-west12-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west12\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west12-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2382\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west6-a\",\n      \"description\": \"europe-west6-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west6\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west6-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2380\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west6-b\",\n      \"description\": \"europe-west6-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west6\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west6-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2381\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west6-c\",\n      \"description\": \"europe-west6-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west6\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west6-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2510\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west8-a\",\n      \"description\": \"europe-west8-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west8\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west8-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2511\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west8-b\",\n      \"description\": \"europe-west8-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west8\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west8-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2512\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west8-c\",\n      \"description\": \"europe-west8-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west8\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west8-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2521\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west9-a\",\n      \"description\": \"europe-west9-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west9\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west9-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2520\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west9-b\",\n      \"description\": \"europe-west9-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west9\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west9-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2522\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west9-c\",\n      \"description\": \"europe-west9-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/europe-west9\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west9-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2580\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central1-a\",\n      \"description\": \"me-central1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/me-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/me-central1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2581\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central1-b\",\n      \"description\": \"me-central1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/me-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/me-central1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2582\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central1-c\",\n      \"description\": \"me-central1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/me-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/me-central1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2601\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central2-a\",\n      \"description\": \"me-central2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/me-central2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/me-central2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2602\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central2-b\",\n      \"description\": \"me-central2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/me-central2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/me-central2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2600\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central2-c\",\n      \"description\": \"me-central2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/me-central2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/me-central2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2561\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-west1-a\",\n      \"description\": \"me-west1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/me-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/me-west1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2560\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-west1-b\",\n      \"description\": \"me-west1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/me-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/me-west1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2562\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-west1-c\",\n      \"description\": \"me-west1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/me-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/me-west1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2330\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast1-a\",\n      \"description\": \"northamerica-northeast1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/northamerica-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/northamerica-northeast1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2331\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast1-b\",\n      \"description\": \"northamerica-northeast1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/northamerica-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/northamerica-northeast1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2332\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast1-c\",\n      \"description\": \"northamerica-northeast1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/northamerica-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/northamerica-northeast1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2461\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast2-a\",\n      \"description\": \"northamerica-northeast2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/northamerica-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/northamerica-northeast2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2460\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast2-b\",\n      \"description\": \"northamerica-northeast2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/northamerica-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/northamerica-northeast2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2462\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast2-c\",\n      \"description\": \"northamerica-northeast2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/northamerica-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/northamerica-northeast2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2490\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-west1-a\",\n      \"description\": \"southamerica-west1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/southamerica-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/southamerica-west1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2491\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-west1-b\",\n      \"description\": \"southamerica-west1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/southamerica-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/southamerica-west1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2492\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-west1-c\",\n      \"description\": \"southamerica-west1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/southamerica-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/southamerica-west1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2532\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east5-a\",\n      \"description\": \"us-east5-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-east5\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-east5-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2531\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east5-b\",\n      \"description\": \"us-east5-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-east5\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-east5-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2530\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east5-c\",\n      \"description\": \"us-east5-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-east5\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-east5-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2551\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-south1-a\",\n      \"description\": \"us-south1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-south1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2552\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-south1-b\",\n      \"description\": \"us-south1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-south1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2550\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-south1-c\",\n      \"description\": \"us-south1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-south1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2362\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west2-a\",\n      \"description\": \"us-west2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-west2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2361\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west2-b\",\n      \"description\": \"us-west2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-west2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2360\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west2-c\",\n      \"description\": \"us-west2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-west2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2420\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west3-a\",\n      \"description\": \"us-west3-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-west3-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2421\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west3-b\",\n      \"description\": \"us-west3-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-west3-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2422\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west3-c\",\n      \"description\": \"us-west3-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-west3-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2431\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west4-a\",\n      \"description\": \"us-west4-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-west4-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2432\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west4-b\",\n      \"description\": \"us-west4-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-west4-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2430\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west4-c\",\n      \"description\": \"us-west4-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/regions/us-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-west4-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones\"\n}\n"
  },
  {
    "path": "test-data/gce4/json-dumps/global-operations.json",
    "content": "{\n  \"kind\": \"compute#operationAggregatedList\",\n  \"id\": \"projects/gcpdiag-gce-vm-performance/aggregated/operations\",\n  \"items\": {\n    \"global\": {\n      \"operations\": [\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"2280940156284294438\",\n          \"name\": \"operation-1737649096607-62c61f525c87f-d1d29f27-d62045ab\",\n          \"clientOperationId\": \"d08eb18f-fe42-4c43-896d-00d2870e4bf4\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-bqstjjlfsp354musmjzdi345\",\n          \"targetId\": \"1996836131292892473\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-23T08:18:17.093-08:00\",\n          \"startTime\": \"2025-01-23T08:18:17.096-08:00\",\n          \"endTime\": \"2025-01-23T08:18:20.933-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649096607-62c61f525c87f-d1d29f27-d62045ab\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"8179155603566875966\",\n          \"name\": \"operation-1737649104592-62c61f59f9dcd-788bd067-7e26ed5f\",\n          \"clientOperationId\": \"7e8d7897-4cb8-41a9-9ef4-def5327d367f\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-osxkx4opuon5ucunoiypoydn-1\",\n          \"targetId\": \"6803491094905539841\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-23T08:18:25.134-08:00\",\n          \"startTime\": \"2025-01-23T08:18:25.137-08:00\",\n          \"endTime\": \"2025-01-23T08:18:29.377-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649104592-62c61f59f9dcd-788bd067-7e26ed5f\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"1721636277909968183\",\n          \"name\": \"operation-1737649112522-62c61f6189dac-df29eecb-12f9eb07\",\n          \"clientOperationId\": \"3a73403f-09fa-4a95-ab64-f0e106e4fbaa\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-osxkx4opuon5ucunoiypoydn-2\",\n          \"targetId\": \"6931654070069415193\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-23T08:18:32.922-08:00\",\n          \"startTime\": \"2025-01-23T08:18:32.926-08:00\",\n          \"endTime\": \"2025-01-23T08:18:37.115-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649112522-62c61f6189dac-df29eecb-12f9eb07\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"8309398734471419151\",\n          \"name\": \"operation-1737649120226-62c61f68e2c23-9428894d-3d8b9aca\",\n          \"clientOperationId\": \"e10205fa-fc69-46fc-af1f-e1af53bb9b13\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-osxkx4opuon5ucunoiypoydn-3\",\n          \"targetId\": \"7813216409883823378\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-23T08:18:40.730-08:00\",\n          \"startTime\": \"2025-01-23T08:18:40.733-08:00\",\n          \"endTime\": \"2025-01-23T08:18:44.597-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649120226-62c61f68e2c23-9428894d-3d8b9aca\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"7317416668127286535\",\n          \"name\": \"operation-1737649128059-62c61f705b2de-eefc8570-6b49f792\",\n          \"clientOperationId\": \"d25121ab-440d-4da7-b0fd-f7c444d71c14\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-hurqvi6k3jkozy7huzl7xhbu\",\n          \"targetId\": \"5769124955549649634\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-23T08:18:48.445-08:00\",\n          \"startTime\": \"2025-01-23T08:18:48.450-08:00\",\n          \"endTime\": \"2025-01-23T08:18:52.289-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649128059-62c61f705b2de-eefc8570-6b49f792\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"5028999114327577887\",\n          \"name\": \"operation-1737649135841-62c61f77c724e-a1ca3d52-ec2a6a6c\",\n          \"clientOperationId\": \"4a229748-f629-4982-9173-6408f5cb1623\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-vgagxd3vkgdryop7ecokzyn4-1\",\n          \"targetId\": \"5207014470666209994\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-23T08:18:56.308-08:00\",\n          \"startTime\": \"2025-01-23T08:18:56.311-08:00\",\n          \"endTime\": \"2025-01-23T08:19:00.341-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649135841-62c61f77c724e-a1ca3d52-ec2a6a6c\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"53074387158422807\",\n          \"name\": \"operation-1737649143830-62c61f7f65964-f9a64678-5da915a0\",\n          \"clientOperationId\": \"e8bb01d6-1a3e-409b-8886-70b3adc1fcc5\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-vgagxd3vkgdryop7ecokzyn4-2\",\n          \"targetId\": \"5065499558870567618\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-23T08:19:04.386-08:00\",\n          \"startTime\": \"2025-01-23T08:19:04.389-08:00\",\n          \"endTime\": \"2025-01-23T08:19:08.206-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649143830-62c61f7f65964-f9a64678-5da915a0\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"619542820738290415\",\n          \"name\": \"operation-1737649151748-62c61f86f2b49-39ba97e4-4ddf44cd\",\n          \"clientOperationId\": \"92d9b901-d7b8-4cf4-a33f-9200203440ee\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-vgagxd3vkgdryop7ecokzyn4-3\",\n          \"targetId\": \"8091231506969709274\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-23T08:19:12.187-08:00\",\n          \"startTime\": \"2025-01-23T08:19:12.189-08:00\",\n          \"endTime\": \"2025-01-23T08:19:15.016-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649151748-62c61f86f2b49-39ba97e4-4ddf44cd\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"2576999076700607207\",\n          \"name\": \"operation-1737649159673-62c61f8e816be-f7bc9bdf-49401784\",\n          \"clientOperationId\": \"f6c35350-34e3-4bac-afba-68bdd0b5314e\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-qb6kf24l7veqxzstj6m2wx6e\",\n          \"targetId\": \"2119620085120289451\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-23T08:19:20.219-08:00\",\n          \"startTime\": \"2025-01-23T08:19:20.222-08:00\",\n          \"endTime\": \"2025-01-23T08:19:24.015-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649159673-62c61f8e816be-f7bc9bdf-49401784\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"3340945055669015295\",\n          \"name\": \"operation-1737649167701-62c61f9629599-ead58c3d-28640548\",\n          \"clientOperationId\": \"bb92ba88-4b71-47e1-b9ec-19f8f2c64da9\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-oex36nljuf35kulysab6c5pa\",\n          \"targetId\": \"7864150130694343355\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-23T08:19:28.045-08:00\",\n          \"startTime\": \"2025-01-23T08:19:28.049-08:00\",\n          \"endTime\": \"2025-01-23T08:19:30.721-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649167701-62c61f9629599-ead58c3d-28640548\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"7612210505926562552\",\n          \"name\": \"operation-1737649175456-62c61f9d8ead5-d8b1ab41-7e9476af\",\n          \"clientOperationId\": \"61349dee-558d-4aa7-9dfe-5146cf9da4f8\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-gfyf7htggnqwwiatuhyltkaa-1\",\n          \"targetId\": \"4256891507776211612\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-23T08:19:35.800-08:00\",\n          \"startTime\": \"2025-01-23T08:19:35.803-08:00\",\n          \"endTime\": \"2025-01-23T08:19:39.414-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649175456-62c61f9d8ead5-d8b1ab41-7e9476af\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"2668576386565788400\",\n          \"name\": \"operation-1737649183264-62c61fa500e6f-b8167430-6178dfc5\",\n          \"clientOperationId\": \"ff2de066-c09f-471d-a510-9a790dffe96d\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-gfyf7htggnqwwiatuhyltkaa-2\",\n          \"targetId\": \"5500281464771627668\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-23T08:19:43.621-08:00\",\n          \"startTime\": \"2025-01-23T08:19:43.624-08:00\",\n          \"endTime\": \"2025-01-23T08:19:47.274-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649183264-62c61fa500e6f-b8167430-6178dfc5\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"1438312304893481672\",\n          \"name\": \"operation-1737649190921-62c61fac4e461-4c773ad3-87fa14cb\",\n          \"clientOperationId\": \"746f28cd-ee32-40de-964c-63f69d92cdc9\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-gfyf7htggnqwwiatuhyltkaa-3\",\n          \"targetId\": \"1166273495871572589\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-23T08:19:51.390-08:00\",\n          \"startTime\": \"2025-01-23T08:19:51.393-08:00\",\n          \"endTime\": \"2025-01-23T08:19:55.094-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649190921-62c61fac4e461-4c773ad3-87fa14cb\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"6759137092208415424\",\n          \"name\": \"operation-1737649198737-62c61fb3c28ec-67a4c26a-01f68192\",\n          \"clientOperationId\": \"88526acc-9f88-473f-82fa-c4fc1ce9b974\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-y3zv3cp7ua7oj54ap4xfk5la-1\",\n          \"targetId\": \"6773624759912548989\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-23T08:19:59.350-08:00\",\n          \"startTime\": \"2025-01-23T08:19:59.352-08:00\",\n          \"endTime\": \"2025-01-23T08:20:02.120-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649198737-62c61fb3c28ec-67a4c26a-01f68192\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"5042539020203053784\",\n          \"name\": \"operation-1737649206970-62c61fbb9c7c1-6e7adc39-ffeded41\",\n          \"clientOperationId\": \"ad5e5fac-25b3-4f34-99ca-d1fefc6f338d\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-y3zv3cp7ua7oj54ap4xfk5la-2\",\n          \"targetId\": \"3262119855878359669\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-23T08:20:07.484-08:00\",\n          \"startTime\": \"2025-01-23T08:20:07.487-08:00\",\n          \"endTime\": \"2025-01-23T08:20:11.281-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649206970-62c61fbb9c7c1-6e7adc39-ffeded41\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"2722835090668245712\",\n          \"name\": \"operation-1737649214929-62c61fc333c2e-a40eba05-9d0aba7f\",\n          \"clientOperationId\": \"f5f85191-e542-4117-96be-b74ea0977858\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-y3zv3cp7ua7oj54ap4xfk5la-3\",\n          \"targetId\": \"8961853830641797709\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-23T08:20:15.256-08:00\",\n          \"startTime\": \"2025-01-23T08:20:15.259-08:00\",\n          \"endTime\": \"2025-01-23T08:20:18.083-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649214929-62c61fc333c2e-a40eba05-9d0aba7f\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"2811129606705238697\",\n          \"name\": \"operation-1737649222665-62c61fca94658-718b0717-18c91e2b\",\n          \"clientOperationId\": \"a950b83d-230f-4f80-a903-2d53389db86b\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-bqstjjlfsp354musmjzdi345\",\n          \"targetId\": \"9220472906987521038\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-23T08:20:22.970-08:00\",\n          \"startTime\": \"2025-01-23T08:20:22.975-08:00\",\n          \"endTime\": \"2025-01-23T08:20:26.699-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649222665-62c61fca94658-718b0717-18c91e2b\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"9097898934096876193\",\n          \"name\": \"operation-1737649230397-62c61fd1f3f39-dda298b5-fd36bbbd\",\n          \"clientOperationId\": \"10d40e88-cc8c-43f5-b246-ce89e1b7e99d\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-osxkx4opuon5ucunoiypoydn-1\",\n          \"targetId\": \"3246009124342383638\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-23T08:20:31.108-08:00\",\n          \"startTime\": \"2025-01-23T08:20:31.111-08:00\",\n          \"endTime\": \"2025-01-23T08:20:34.874-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649230397-62c61fd1f3f39-dda298b5-fd36bbbd\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"4334139866158715577\",\n          \"name\": \"operation-1737649238656-62c61fd9d4518-8587b7f9-d2c7c3db\",\n          \"clientOperationId\": \"481581b1-be85-42b6-a3f7-989a38935f1b\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-osxkx4opuon5ucunoiypoydn-2\",\n          \"targetId\": \"5220328779118462446\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-23T08:20:38.994-08:00\",\n          \"startTime\": \"2025-01-23T08:20:38.998-08:00\",\n          \"endTime\": \"2025-01-23T08:20:42.784-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649238656-62c61fd9d4518-8587b7f9-d2c7c3db\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"8864284169534952113\",\n          \"name\": \"operation-1737649246382-62c61fe1328f6-414e7556-582757b2\",\n          \"clientOperationId\": \"a253fbbb-1ffb-47a3-947b-fd27c9ec4fdd\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-osxkx4opuon5ucunoiypoydn-3\",\n          \"targetId\": \"6429786170898171366\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-23T08:20:47.006-08:00\",\n          \"startTime\": \"2025-01-23T08:20:47.009-08:00\",\n          \"endTime\": \"2025-01-23T08:20:50.876-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649246382-62c61fe1328f6-414e7556-582757b2\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"8201699517536391817\",\n          \"name\": \"operation-1737649254420-62c61fe8dd02d-379e4b11-3b77ee6e\",\n          \"clientOperationId\": \"d4696be5-b09b-4ceb-b9cc-4761ed54b71b\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-hurqvi6k3jkozy7huzl7xhbu\",\n          \"targetId\": \"6285103965534864886\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-23T08:20:54.943-08:00\",\n          \"startTime\": \"2025-01-23T08:20:54.947-08:00\",\n          \"endTime\": \"2025-01-23T08:20:58.715-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649254420-62c61fe8dd02d-379e4b11-3b77ee6e\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"2309323834206966401\",\n          \"name\": \"operation-1737649262537-62c61ff09a999-464ea9b0-a2cbc5d0\",\n          \"clientOperationId\": \"77d5c244-aa20-4d52-9fa0-577aa4d71d7e\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-vgagxd3vkgdryop7ecokzyn4-1\",\n          \"targetId\": \"3720557999293122014\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-23T08:21:03.007-08:00\",\n          \"startTime\": \"2025-01-23T08:21:03.010-08:00\",\n          \"endTime\": \"2025-01-23T08:21:06.826-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649262537-62c61ff09a999-464ea9b0-a2cbc5d0\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"3565347991554347672\",\n          \"name\": \"operation-1737649270406-62c61ff81bd3f-3cdd3220-a949cbe0\",\n          \"clientOperationId\": \"0309913d-a529-4be6-9477-b0b1f777b727\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-vgagxd3vkgdryop7ecokzyn4-2\",\n          \"targetId\": \"8632835747836773846\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-23T08:21:11.170-08:00\",\n          \"startTime\": \"2025-01-23T08:21:11.181-08:00\",\n          \"endTime\": \"2025-01-23T08:21:14.787-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649270406-62c61ff81bd3f-3cdd3220-a949cbe0\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"5136571037021885073\",\n          \"name\": \"operation-1737649278470-62c61fffcc971-d1d388c8-8362ab6c\",\n          \"clientOperationId\": \"3ad8e549-bb5c-486d-a7fc-0a5905d458f5\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-vgagxd3vkgdryop7ecokzyn4-3\",\n          \"targetId\": \"4795957251172648366\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-23T08:21:18.955-08:00\",\n          \"startTime\": \"2025-01-23T08:21:18.957-08:00\",\n          \"endTime\": \"2025-01-23T08:21:22.268-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649278470-62c61fffcc971-d1d388c8-8362ab6c\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"6134545549111579241\",\n          \"name\": \"operation-1737649286392-62c620075aace-b02671ea-f0604491\",\n          \"clientOperationId\": \"06e1623e-82c4-4800-b47d-f1b559ee44a2\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-qb6kf24l7veqxzstj6m2wx6e\",\n          \"targetId\": \"3115415446797075903\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-23T08:21:26.895-08:00\",\n          \"startTime\": \"2025-01-23T08:21:26.898-08:00\",\n          \"endTime\": \"2025-01-23T08:21:30.608-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649286392-62c620075aace-b02671ea-f0604491\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"8675212798562652769\",\n          \"name\": \"operation-1737649294406-62c6200eff44e-9b60b922-c0a0b728\",\n          \"clientOperationId\": \"3144459b-b020-4e95-b4f1-9603782fdd30\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-oex36nljuf35kulysab6c5pa\",\n          \"targetId\": \"6866034520368006543\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-23T08:21:34.750-08:00\",\n          \"startTime\": \"2025-01-23T08:21:34.753-08:00\",\n          \"endTime\": \"2025-01-23T08:21:38.509-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649294406-62c6200eff44e-9b60b922-c0a0b728\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"8411801595305513593\",\n          \"name\": \"operation-1737649302027-62c6201643e49-26d7881b-55d180b7\",\n          \"clientOperationId\": \"2e62f4ac-abeb-4748-be1c-704fc7164072\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-gfyf7htggnqwwiatuhyltkaa-1\",\n          \"targetId\": \"6698757647406646639\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-23T08:21:42.429-08:00\",\n          \"startTime\": \"2025-01-23T08:21:42.434-08:00\",\n          \"endTime\": \"2025-01-23T08:21:46.190-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649302027-62c6201643e49-26d7881b-55d180b7\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"4478548795637879409\",\n          \"name\": \"operation-1737649309837-62c6201db67f2-eb38b076-6d277da3\",\n          \"clientOperationId\": \"1fcd856a-a29d-46a8-a278-a34672f74063\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-gfyf7htggnqwwiatuhyltkaa-2\",\n          \"targetId\": \"4432689205039777127\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-23T08:21:50.381-08:00\",\n          \"startTime\": \"2025-01-23T08:21:50.385-08:00\",\n          \"endTime\": \"2025-01-23T08:21:54.180-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649309837-62c6201db67f2-eb38b076-6d277da3\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"7127580286170157641\",\n          \"name\": \"operation-1737649317848-62c620255a693-264d7dd3-834c1ef2\",\n          \"clientOperationId\": \"daf09f71-e425-477f-a2a5-2c0e58d65207\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-gfyf7htggnqwwiatuhyltkaa-3\",\n          \"targetId\": \"1010549908871759231\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-23T08:21:58.324-08:00\",\n          \"startTime\": \"2025-01-23T08:21:58.326-08:00\",\n          \"endTime\": \"2025-01-23T08:22:02.328-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649317848-62c620255a693-264d7dd3-834c1ef2\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"6584230166896038465\",\n          \"name\": \"operation-1737649325819-62c6202cf4703-22e0e693-765eccc8\",\n          \"clientOperationId\": \"1aa9543e-fd79-407a-bce6-291692446870\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-y3zv3cp7ua7oj54ap4xfk5la-1\",\n          \"targetId\": \"7348220830718543183\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-23T08:22:06.196-08:00\",\n          \"startTime\": \"2025-01-23T08:22:06.199-08:00\",\n          \"endTime\": \"2025-01-23T08:22:09.881-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649325819-62c6202cf4703-22e0e693-765eccc8\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"3298290618760942170\",\n          \"name\": \"operation-1737649333556-62c6203455390-9f9ed3c1-4cf46589\",\n          \"clientOperationId\": \"a797f833-1315-4e0d-b67c-e5702b3045e1\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-y3zv3cp7ua7oj54ap4xfk5la-2\",\n          \"targetId\": \"879777719600727367\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-23T08:22:13.893-08:00\",\n          \"startTime\": \"2025-01-23T08:22:13.897-08:00\",\n          \"endTime\": \"2025-01-23T08:22:17.734-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649333556-62c6203455390-9f9ed3c1-4cf46589\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"6705250641511436882\",\n          \"name\": \"operation-1737649341252-62c6203bac30f-e83fb2b3-bdc976e0\",\n          \"clientOperationId\": \"4f50f4e9-9f92-4732-bb54-e40ad38d7a16\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-y3zv3cp7ua7oj54ap4xfk5la-3\",\n          \"targetId\": \"3440525646262617439\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-23T08:22:21.700-08:00\",\n          \"startTime\": \"2025-01-23T08:22:21.703-08:00\",\n          \"endTime\": \"2025-01-23T08:22:25.579-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1737649341252-62c6203bac30f-e83fb2b3-bdc976e0\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"6493470309565841570\",\n          \"name\": \"operation-1738178124662-62cdd21ad4804-b4a752a4-61716485\",\n          \"clientOperationId\": \"2e5c5e98-c29e-49a0-a0bc-159605dc0ba1\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-bqstjjlfsp354musmjzdi345\",\n          \"targetId\": \"1996836131292892473\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-29T11:15:25.201-08:00\",\n          \"startTime\": \"2025-01-29T11:15:25.205-08:00\",\n          \"endTime\": \"2025-01-29T11:15:29.281-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178124662-62cdd21ad4804-b4a752a4-61716485\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"8011095753771958458\",\n          \"name\": \"operation-1738178132995-62cdd222c6e04-99314cbc-092e0901\",\n          \"clientOperationId\": \"927852c3-9728-4fec-965d-d345690029c5\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-bqstjjlfsp354musmjzdi345-v6\",\n          \"targetId\": \"3942264717889817905\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-29T11:15:33.336-08:00\",\n          \"startTime\": \"2025-01-29T11:15:33.339-08:00\",\n          \"endTime\": \"2025-01-29T11:15:37.267-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178132995-62cdd222c6e04-99314cbc-092e0901\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"7162928601455116466\",\n          \"name\": \"operation-1738178140798-62cdd22a37e15-5f282c2e-6dc7adc3\",\n          \"clientOperationId\": \"ff7e865b-999b-4f27-a2f8-005ab499bdae\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-osxkx4opuon5ucunoiypoydn-2\",\n          \"targetId\": \"6931654070069415193\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-29T11:15:41.392-08:00\",\n          \"startTime\": \"2025-01-29T11:15:41.395-08:00\",\n          \"endTime\": \"2025-01-29T11:16:04.119-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178140798-62cdd22a37e15-5f282c2e-6dc7adc3\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"4584857400946180250\",\n          \"name\": \"operation-1738178165127-62cdd2416baed-c32aa4b9-6d87ccc2\",\n          \"clientOperationId\": \"43257851-565e-486a-9fc7-29e3735ced07\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-osxkx4opuon5ucunoiypoydn-3\",\n          \"targetId\": \"7813216409883823378\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-29T11:16:05.494-08:00\",\n          \"startTime\": \"2025-01-29T11:16:05.497-08:00\",\n          \"endTime\": \"2025-01-29T11:16:09.356-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178165127-62cdd2416baed-c32aa4b9-6d87ccc2\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"5197488641239662738\",\n          \"name\": \"operation-1738178172956-62cdd248e2fa4-162b9631-a90f6815\",\n          \"clientOperationId\": \"24f4863c-d311-4906-9bac-294d3c73066a\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-hurqvi6k3jkozy7huzl7xhbu\",\n          \"targetId\": \"5769124955549649634\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-29T11:16:13.492-08:00\",\n          \"startTime\": \"2025-01-29T11:16:13.496-08:00\",\n          \"endTime\": \"2025-01-29T11:16:17.452-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178172956-62cdd248e2fa4-162b9631-a90f6815\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"8298186039444881514\",\n          \"name\": \"operation-1738178180989-62cdd2508c0a9-4b38df5d-b5e34303\",\n          \"clientOperationId\": \"b9367c89-8ae7-40f4-b7ad-d90e8e92828a\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-hurqvi6k3jkozy7huzl7xhbu-v6\",\n          \"targetId\": \"3077326989592414970\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-29T11:16:21.393-08:00\",\n          \"startTime\": \"2025-01-29T11:16:21.397-08:00\",\n          \"endTime\": \"2025-01-29T11:16:25.532-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178180989-62cdd2508c0a9-4b38df5d-b5e34303\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"8363895740538798178\",\n          \"name\": \"operation-1738178188972-62cdd25829271-f82a0cc4-c70db555\",\n          \"clientOperationId\": \"786a1edd-0514-43bb-a35d-eafcc106d8e5\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-vgagxd3vkgdryop7ecokzyn4-2\",\n          \"targetId\": \"5065499558870567618\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-29T11:16:29.532-08:00\",\n          \"startTime\": \"2025-01-29T11:16:29.536-08:00\",\n          \"endTime\": \"2025-01-29T11:16:33.500-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178188972-62cdd25829271-f82a0cc4-c70db555\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"6340366721307099258\",\n          \"name\": \"operation-1738178197067-62cdd25fe1693-08edeb5e-882c1507\",\n          \"clientOperationId\": \"39b368e8-549d-4f24-ac16-55d4907ce9fb\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-vgagxd3vkgdryop7ecokzyn4-3\",\n          \"targetId\": \"8091231506969709274\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-29T11:16:37.566-08:00\",\n          \"startTime\": \"2025-01-29T11:16:37.569-08:00\",\n          \"endTime\": \"2025-01-29T11:16:41.839-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178197067-62cdd25fe1693-08edeb5e-882c1507\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"1155659274487578738\",\n          \"name\": \"operation-1738178205177-62cdd2679d670-73d5830b-9a5fb8f9\",\n          \"clientOperationId\": \"643c3a7b-ab6b-498d-a6af-4b24e94b0241\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-qb6kf24l7veqxzstj6m2wx6e\",\n          \"targetId\": \"2119620085120289451\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-29T11:16:45.556-08:00\",\n          \"startTime\": \"2025-01-29T11:16:45.560-08:00\",\n          \"endTime\": \"2025-01-29T11:16:48.277-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178205177-62cdd2679d670-73d5830b-9a5fb8f9\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"5723094309288788042\",\n          \"name\": \"operation-1738178212970-62cdd26f0c142-b47f90e6-a566340a\",\n          \"clientOperationId\": \"1583affe-0e70-4c8c-b5af-253a9282a47d\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-qb6kf24l7veqxzstj6m2wx6e-v6\",\n          \"targetId\": \"5890257185214089891\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-29T11:16:53.504-08:00\",\n          \"startTime\": \"2025-01-29T11:16:53.508-08:00\",\n          \"endTime\": \"2025-01-29T11:16:57.353-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178212970-62cdd26f0c142-b47f90e6-a566340a\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"4413500639766102082\",\n          \"name\": \"operation-1738178221026-62cdd276bab05-527699c5-0c7604f5\",\n          \"clientOperationId\": \"29dee6cf-cf6c-49b7-abae-9491db1a28ba\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-oex36nljuf35kulysab6c5pa\",\n          \"targetId\": \"7864150130694343355\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-29T11:17:01.375-08:00\",\n          \"startTime\": \"2025-01-29T11:17:01.378-08:00\",\n          \"endTime\": \"2025-01-29T11:17:05.346-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178221026-62cdd276bab05-527699c5-0c7604f5\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"823396863552503898\",\n          \"name\": \"operation-1738178228783-62cdd27e20927-ff0c6977-63702492\",\n          \"clientOperationId\": \"1cfd2278-2d86-435f-9158-959883f91dbe\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-gfyf7htggnqwwiatuhyltkaa-2\",\n          \"targetId\": \"5500281464771627668\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-29T11:17:09.117-08:00\",\n          \"startTime\": \"2025-01-29T11:17:09.122-08:00\",\n          \"endTime\": \"2025-01-29T11:17:13.004-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178228783-62cdd27e20927-ff0c6977-63702492\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"6355366649775243347\",\n          \"name\": \"operation-1738178236540-62cdd2858651d-3223cd96-bc68975e\",\n          \"clientOperationId\": \"3a66306e-c181-4b63-87ff-9289e2f75758\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-gfyf7htggnqwwiatuhyltkaa-3\",\n          \"targetId\": \"1166273495871572589\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-29T11:17:16.884-08:00\",\n          \"startTime\": \"2025-01-29T11:17:16.887-08:00\",\n          \"endTime\": \"2025-01-29T11:17:19.826-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178236540-62cdd2858651d-3223cd96-bc68975e\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"2903347510942089259\",\n          \"name\": \"operation-1738178244354-62cdd28cfa22b-c5d454fd-ce37c0ad\",\n          \"clientOperationId\": \"eb75843a-c1f0-447c-b283-37a7623cabb1\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-y3zv3cp7ua7oj54ap4xfk5la-2\",\n          \"targetId\": \"3262119855878359669\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-29T11:17:24.678-08:00\",\n          \"startTime\": \"2025-01-29T11:17:24.680-08:00\",\n          \"endTime\": \"2025-01-29T11:17:48.344-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178244354-62cdd28cfa22b-c5d454fd-ce37c0ad\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"35636480633716785\",\n          \"name\": \"operation-1738178270182-62cdd2a59bbd4-1a8275fb-259287e2\",\n          \"clientOperationId\": \"3e1c55b5-6d72-4344-8d81-b3a4e6bf11b6\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/cross-region-vpc-y3zv3cp7ua7oj54ap4xfk5la-3\",\n          \"targetId\": \"8961853830641797709\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-29T11:17:50.765-08:00\",\n          \"startTime\": \"2025-01-29T11:17:50.769-08:00\",\n          \"endTime\": \"2025-01-29T11:17:54.543-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178270182-62cdd2a59bbd4-1a8275fb-259287e2\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"3260309793465155593\",\n          \"name\": \"operation-1738178278264-62cdd2ad50d80-8495d0ec-7a37c89c\",\n          \"clientOperationId\": \"b10eff1d-9bb9-4917-9198-af9940f70a1e\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-bqstjjlfsp354musmjzdi345\",\n          \"targetId\": \"9220472906987521038\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-29T11:17:58.734-08:00\",\n          \"startTime\": \"2025-01-29T11:17:58.748-08:00\",\n          \"endTime\": \"2025-01-29T11:18:02.658-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178278264-62cdd2ad50d80-8495d0ec-7a37c89c\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"4533888388389388289\",\n          \"name\": \"operation-1738178286180-62cdd2b4dda6e-2e9feb83-468abf50\",\n          \"clientOperationId\": \"0356b524-89ec-4783-9cf7-2d4e89ce2f1c\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-bqstjjlfsp354musmjzdi345-v6\",\n          \"targetId\": \"258455239321633798\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-29T11:18:06.770-08:00\",\n          \"startTime\": \"2025-01-29T11:18:06.774-08:00\",\n          \"endTime\": \"2025-01-29T11:18:10.732-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178286180-62cdd2b4dda6e-2e9feb83-468abf50\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"7388359511992942617\",\n          \"name\": \"operation-1738178294345-62cdd2bca6ef5-85ef3cba-174e324d\",\n          \"clientOperationId\": \"27feeaf2-0e8e-43bf-a0b9-efafe10293a3\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-osxkx4opuon5ucunoiypoydn-2\",\n          \"targetId\": \"5220328779118462446\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-29T11:18:14.848-08:00\",\n          \"startTime\": \"2025-01-29T11:18:14.851-08:00\",\n          \"endTime\": \"2025-01-29T11:18:18.588-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178294345-62cdd2bca6ef5-85ef3cba-174e324d\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"3350115188802568209\",\n          \"name\": \"operation-1738178302408-62cdd2c457600-ae6228cf-1f129894\",\n          \"clientOperationId\": \"2bce7270-fcc9-4d21-981d-4285b5ab1542\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-osxkx4opuon5ucunoiypoydn-3\",\n          \"targetId\": \"6429786170898171366\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-29T11:18:22.929-08:00\",\n          \"startTime\": \"2025-01-29T11:18:22.932-08:00\",\n          \"endTime\": \"2025-01-29T11:18:26.803-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178302408-62cdd2c457600-ae6228cf-1f129894\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"5185798294310732265\",\n          \"name\": \"operation-1738178310407-62cdd2cbf86d2-84a632d4-1f103ee2\",\n          \"clientOperationId\": \"dd08a060-dc13-4e58-abc4-1ea3c5d6456c\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-hurqvi6k3jkozy7huzl7xhbu\",\n          \"targetId\": \"6285103965534864886\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-29T11:18:30.753-08:00\",\n          \"startTime\": \"2025-01-29T11:18:30.756-08:00\",\n          \"endTime\": \"2025-01-29T11:18:34.533-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178310407-62cdd2cbf86d2-84a632d4-1f103ee2\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"19085308762505697\",\n          \"name\": \"operation-1738178318204-62cdd2d367fd6-cfbd054c-47fbabd3\",\n          \"clientOperationId\": \"7999f734-457d-4ad0-a799-3ccefdc940c0\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-hurqvi6k3jkozy7huzl7xhbu-v6\",\n          \"targetId\": \"6266197974764406222\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-29T11:18:38.733-08:00\",\n          \"startTime\": \"2025-01-29T11:18:38.736-08:00\",\n          \"endTime\": \"2025-01-29T11:18:42.684-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178318204-62cdd2d367fd6-cfbd054c-47fbabd3\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"1250010690844344825\",\n          \"name\": \"operation-1738178326255-62cdd2db15642-cdcfdf99-9c9d4a15\",\n          \"clientOperationId\": \"0490b90e-26a9-43b4-ab85-374f19222d30\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-vgagxd3vkgdryop7ecokzyn4-2\",\n          \"targetId\": \"8632835747836773846\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-29T11:18:46.642-08:00\",\n          \"startTime\": \"2025-01-29T11:18:46.645-08:00\",\n          \"endTime\": \"2025-01-29T11:18:49.603-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178326255-62cdd2db15642-cdcfdf99-9c9d4a15\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"6839932960418284017\",\n          \"name\": \"operation-1738178334098-62cdd2e290458-69e65150-866c940d\",\n          \"clientOperationId\": \"a9f0c1e7-495e-424b-a1ec-eb7136ab9a8d\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-vgagxd3vkgdryop7ecokzyn4-3\",\n          \"targetId\": \"4795957251172648366\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-29T11:18:54.644-08:00\",\n          \"startTime\": \"2025-01-29T11:18:54.647-08:00\",\n          \"endTime\": \"2025-01-29T11:18:58.431-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178334098-62cdd2e290458-69e65150-866c940d\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"9131984752335110601\",\n          \"name\": \"operation-1738178342156-62cdd2ea3f7c4-eb4a1f34-fcdbe74c\",\n          \"clientOperationId\": \"2b703cc2-8488-44d3-87ac-bc1a6caa5fdc\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-qb6kf24l7veqxzstj6m2wx6e\",\n          \"targetId\": \"3115415446797075903\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-29T11:19:02.760-08:00\",\n          \"startTime\": \"2025-01-29T11:19:02.763-08:00\",\n          \"endTime\": \"2025-01-29T11:19:06.685-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178342156-62cdd2ea3f7c4-eb4a1f34-fcdbe74c\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"5798446847617384897\",\n          \"name\": \"operation-1738178350244-62cdd2f1f61b2-5c345168-6161a171\",\n          \"clientOperationId\": \"1e02c11c-df5e-40f8-a708-9e89f43ad13c\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-qb6kf24l7veqxzstj6m2wx6e-v6\",\n          \"targetId\": \"5236448134977734071\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-29T11:19:10.624-08:00\",\n          \"startTime\": \"2025-01-29T11:19:10.628-08:00\",\n          \"endTime\": \"2025-01-29T11:19:13.412-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178350244-62cdd2f1f61b2-5c345168-6161a171\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"4509512984400740825\",\n          \"name\": \"operation-1738178358087-62cdd2f970ec1-5daa25e9-df5d46e5\",\n          \"clientOperationId\": \"4e25d6ae-9331-4110-b347-53217ff5e846\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-oex36nljuf35kulysab6c5pa\",\n          \"targetId\": \"6866034520368006543\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-29T11:19:18.622-08:00\",\n          \"startTime\": \"2025-01-29T11:19:18.625-08:00\",\n          \"endTime\": \"2025-01-29T11:19:22.519-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178358087-62cdd2f970ec1-5daa25e9-df5d46e5\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"3983582728493187537\",\n          \"name\": \"operation-1738178366270-62cdd3013ecf5-4fda13c5-cc4f8522\",\n          \"clientOperationId\": \"3e9a871d-3de5-49e5-9a1a-58f75577f6a3\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-gfyf7htggnqwwiatuhyltkaa-2\",\n          \"targetId\": \"4432689205039777127\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-29T11:19:26.772-08:00\",\n          \"startTime\": \"2025-01-29T11:19:26.775-08:00\",\n          \"endTime\": \"2025-01-29T11:19:30.805-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178366270-62cdd3013ecf5-4fda13c5-cc4f8522\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"3939314474803511721\",\n          \"name\": \"operation-1738178374345-62cdd308f21e1-360ac4a0-0344fc0d\",\n          \"clientOperationId\": \"af731eb6-4c13-4b8c-a9f9-1b9b0dbaba6c\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-gfyf7htggnqwwiatuhyltkaa-3\",\n          \"targetId\": \"1010549908871759231\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-29T11:19:34.794-08:00\",\n          \"startTime\": \"2025-01-29T11:19:34.797-08:00\",\n          \"endTime\": \"2025-01-29T11:19:37.540-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178374345-62cdd308f21e1-360ac4a0-0344fc0d\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"904747740321792417\",\n          \"name\": \"operation-1738178382277-62cdd31082b46-ca641c5e-1e975846\",\n          \"clientOperationId\": \"caaec6db-9054-40a3-91bb-69282a780033\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-y3zv3cp7ua7oj54ap4xfk5la-2\",\n          \"targetId\": \"879777719600727367\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-29T11:19:42.599-08:00\",\n          \"startTime\": \"2025-01-29T11:19:42.601-08:00\",\n          \"endTime\": \"2025-01-29T11:19:47.225-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178382277-62cdd31082b46-ca641c5e-1e975846\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"3851686026589749689\",\n          \"name\": \"operation-1738178390048-62cdd317ec0d2-61aa39bd-ff80c46a\",\n          \"clientOperationId\": \"3de46e09-bc3e-4187-849a-f823fcb29f8e\",\n          \"operationType\": \"patch\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/default-y3zv3cp7ua7oj54ap4xfk5la-3\",\n          \"targetId\": \"3440525646262617439\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-01-29T11:19:50.386-08:00\",\n          \"startTime\": \"2025-01-29T11:19:50.389-08:00\",\n          \"endTime\": \"2025-01-29T11:20:11.394-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738178390048-62cdd317ec0d2-61aa39bd-ff80c46a\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"3372994239067492603\",\n          \"name\": \"operation-1738747411858-62d61add684d6-cc2eabca-5d2667eb\",\n          \"operationType\": \"compute.instanceTemplates.insert\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/instanceTemplates/mig-template\",\n          \"targetId\": \"2206878216970211580\",\n          \"status\": \"DONE\",\n          \"user\": \"ppoormina@google.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-02-05T01:23:32.154-08:00\",\n          \"startTime\": \"2025-02-05T01:23:32.159-08:00\",\n          \"endTime\": \"2025-02-05T01:23:32.738-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738747411858-62d61add684d6-cc2eabca-5d2667eb\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"8258823514577866944\",\n          \"name\": \"operation-1738747439661-62d61af7ebff2-4a5191ac-98012e54\",\n          \"operationType\": \"insert\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/gce-secured-instance-test-deny\",\n          \"targetId\": \"3706877660854390976\",\n          \"status\": \"DONE\",\n          \"user\": \"ppoormina@google.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-02-05T01:24:00.049-08:00\",\n          \"startTime\": \"2025-02-05T01:24:00.090-08:00\",\n          \"endTime\": \"2025-02-05T01:24:04.195-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738747439661-62d61af7ebff2-4a5191ac-98012e54\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"1197276755963842716\",\n          \"name\": \"operation-1738747507094-62d61b383b5ad-4679118d-2b47f8fb\",\n          \"clientOperationId\": \"f197732e-94b5-4e01-b599-c94ac0e411f2\",\n          \"operationType\": \"delete\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/gce-secured-instance-test-deny\",\n          \"targetId\": \"3706877660854390976\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-02-05T01:25:07.437-08:00\",\n          \"startTime\": \"2025-02-05T01:25:07.440-08:00\",\n          \"endTime\": \"2025-02-05T01:25:11.993-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738747507094-62d61b383b5ad-4679118d-2b47f8fb\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"4813030742589112075\",\n          \"name\": \"operation-1738752484606-62d62dc32825b-944f3fc0-27f69a2a\",\n          \"operationType\": \"delete\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/instanceTemplates/mig-template\",\n          \"targetId\": \"2206878216970211580\",\n          \"status\": \"DONE\",\n          \"user\": \"ppoormina@google.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-02-05T02:48:04.783-08:00\",\n          \"startTime\": \"2025-02-05T02:48:04.794-08:00\",\n          \"endTime\": \"2025-02-05T02:48:05.413-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738752484606-62d62dc32825b-944f3fc0-27f69a2a\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"3580759687123886410\",\n          \"name\": \"operation-1738760101437-62d64a2322042-0f71bd37-ab2f0da3\",\n          \"operationType\": \"compute.instanceTemplates.insert\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/instanceTemplates/mig-template\",\n          \"targetId\": \"6736262122156515658\",\n          \"status\": \"DONE\",\n          \"user\": \"ppoormina@google.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-02-05T04:55:01.806-08:00\",\n          \"startTime\": \"2025-02-05T04:55:01.810-08:00\",\n          \"endTime\": \"2025-02-05T04:55:02.401-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738760101437-62d64a2322042-0f71bd37-ab2f0da3\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"5589617922706170158\",\n          \"name\": \"operation-1738760128931-62d64a3d5a682-0765339b-1107e2ae\",\n          \"operationType\": \"insert\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/gce-secured-instance-test-deny\",\n          \"targetId\": \"4564544778318831918\",\n          \"status\": \"DONE\",\n          \"user\": \"ppoormina@google.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-02-05T04:55:29.363-08:00\",\n          \"startTime\": \"2025-02-05T04:55:29.406-08:00\",\n          \"endTime\": \"2025-02-05T04:55:32.537-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738760128931-62d64a3d5a682-0765339b-1107e2ae\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"5373875242912374472\",\n          \"name\": \"operation-1738760231266-62d64a9ef290c-a08e6b81-dd33b19e\",\n          \"clientOperationId\": \"80418335-c93d-4cb9-be96-be464895d9a7\",\n          \"operationType\": \"delete\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/firewalls/gce-secured-instance-test-deny\",\n          \"targetId\": \"4564544778318831918\",\n          \"status\": \"DONE\",\n          \"user\": \"gceenforcer-enforcer@system.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-02-05T04:57:11.635-08:00\",\n          \"startTime\": \"2025-02-05T04:57:11.639-08:00\",\n          \"endTime\": \"2025-02-05T04:57:15.856-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/operations/operation-1738760231266-62d64a9ef290c-a08e6b81-dd33b19e\"\n        }\n      ]\n    },\n    \"regions/us-central1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-central1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-central1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-central2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-central2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-central2\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-west1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-west1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-west1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west1\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-east1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/asia-east1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-east1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-east1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-east1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-east1\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-northeast1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/asia-northeast1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-northeast1\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-southeast1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/asia-southeast1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-southeast1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-east4\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-east4'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-east4\"\n          }\n        ]\n      }\n    },\n    \"regions/australia-southeast1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/australia-southeast1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/australia-southeast1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-west2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west2\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west3\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-west3'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west3\"\n          }\n        ]\n      }\n    },\n    \"regions/southamerica-east1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/southamerica-east1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/southamerica-east1\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-south1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/asia-south1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-south1\"\n          }\n        ]\n      }\n    },\n    \"regions/northamerica-northeast1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/northamerica-northeast1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/northamerica-northeast1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west4\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-west4'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west4\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-north1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-north1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-north1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-west2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-west2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west2\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-east2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/asia-east2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-east2\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west6\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-west6'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west6\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-northeast2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/asia-northeast2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-northeast2\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-northeast3\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/asia-northeast3'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-northeast3\"\n          }\n        ]\n      }\n    },\n    \"regions/us-west3\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-west3'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west3\"\n          }\n        ]\n      }\n    },\n    \"regions/us-west4\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-west4'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west4\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-southeast2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/asia-southeast2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-southeast2\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-central2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-central2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-central2\"\n          }\n        ]\n      }\n    },\n    \"regions/northamerica-northeast2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/northamerica-northeast2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/northamerica-northeast2\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-south2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/asia-south2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-south2\"\n          }\n        ]\n      }\n    },\n    \"regions/australia-southeast2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/australia-southeast2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/australia-southeast2\"\n          }\n        ]\n      }\n    },\n    \"regions/southamerica-west1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/southamerica-west1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/southamerica-west1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-east7\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-east7'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-east7\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west8\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-west8'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west8\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west9\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-west9'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west9\"\n          }\n        ]\n      }\n    },\n    \"regions/us-east5\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-east5'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-east5\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-southwest1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-southwest1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-southwest1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-south1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-south1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-south1\"\n          }\n        ]\n      }\n    },\n    \"regions/me-west1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/me-west1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/me-west1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west12\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-west12'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west12\"\n          }\n        ]\n      }\n    },\n    \"regions/me-central1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/me-central1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/me-central1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west10\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-west10'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west10\"\n          }\n        ]\n      }\n    },\n    \"regions/me-central2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/me-central2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/me-central2\"\n          }\n        ]\n      }\n    },\n    \"regions/africa-south1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/africa-south1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/africa-south1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-west8\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-west8'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west8\"\n          }\n        ]\n      }\n    },\n    \"regions/northamerica-south1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/northamerica-south1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/northamerica-south1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-north2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-north2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-north2\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central1-a\": {\n      \"operations\": [\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"3724520394368914064\",\n          \"name\": \"operation-1738747007329-62d6195b9e3f5-e474c15b-57b43e9d\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-central1-a\",\n          \"operationType\": \"delete\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-central1-a/autoscalers/gl7-ilb-mig-a\",\n          \"targetId\": \"895263327236662199\",\n          \"status\": \"DONE\",\n          \"user\": \"ppoormina@google.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-02-05T01:16:47.400-08:00\",\n          \"startTime\": \"2025-02-05T01:16:47.409-08:00\",\n          \"endTime\": \"2025-02-05T01:16:47.883-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-central1-a/operations/operation-1738747007329-62d6195b9e3f5-e474c15b-57b43e9d\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"4736856628556370534\",\n          \"name\": \"operation-1738747017138-62d61964f9278-2cf53284-d61a1788\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-central1-a\",\n          \"operationType\": \"compute.instanceGroupManagers.delete\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-central1-a/instanceGroupManagers/gl7-ilb-mig-a\",\n          \"targetId\": \"6543805410705417128\",\n          \"status\": \"DONE\",\n          \"user\": \"ppoormina@google.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-02-05T01:16:57.306-08:00\",\n          \"startTime\": \"2025-02-05T01:16:57.311-08:00\",\n          \"endTime\": \"2025-02-05T01:17:59.288-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-central1-a/operations/operation-1738747017138-62d61964f9278-2cf53284-d61a1788\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"5151614567994790500\",\n          \"name\": \"operation-1738747019542-62d6196743fe1-be3a9d47-b32f9f11\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-central1-a\",\n          \"clientOperationId\": \"3b9068a6-c207-495a-9941-828ab68ad488\",\n          \"operationType\": \"delete\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-central1-a/instances/gl7-ilb-mig-a-27j7\",\n          \"targetId\": \"8300037737297343422\",\n          \"status\": \"DONE\",\n          \"user\": \"123456270@cloudservices.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-02-05T01:16:59.716-08:00\",\n          \"startTime\": \"2025-02-05T01:16:59.729-08:00\",\n          \"endTime\": \"2025-02-05T01:17:45.514-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-central1-a/operations/operation-1738747019542-62d6196743fe1-be3a9d47-b32f9f11\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"6285958702666249497\",\n          \"name\": \"systemevent-1738525633000-62d2e0ac9b240-12ca31cf-4a9513ee\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-central1-a\",\n          \"operationType\": \"compute.instances.migrateOnHostMaintenance\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-central1-a/instances/gl7-ilb-mig-a-27j7\",\n          \"targetId\": \"8300037737297343422\",\n          \"status\": \"DONE\",\n          \"statusMessage\": \"Instance migrated during Compute Engine maintenance.\",\n          \"user\": \"system\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-02-02T11:47:13.000-08:00\",\n          \"startTime\": \"2025-02-02T11:47:13.000-08:00\",\n          \"endTime\": \"2025-02-02T11:47:13.000-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/us-central1-a/operations/systemevent-1738525633000-62d2e0ac9b240-12ca31cf-4a9513ee\"\n        }\n      ]\n    },\n    \"zones/us-central1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-central1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-central1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central1-f\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-central1-f'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central1-f\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-central2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-central2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-central2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central2-d\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-central2-d'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central2-d\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west1-d\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west1-d'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west1-d\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-east1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-east1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-east1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east1-d\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east1-d'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east1-d\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-southeast1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-southeast1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-southeast1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east4-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east4-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east4-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east4-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east4-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east4-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east4-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east4-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east4-c\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/australia-southeast1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/australia-southeast1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/australia-southeast1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west3-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west3-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west3-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west3-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west3-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west3-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west3-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west3-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west3-b\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-east1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/southamerica-east1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-east1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-east1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/southamerica-east1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-east1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-east1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/southamerica-east1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-east1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-south1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-south1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-south1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-northeast1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-northeast1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-northeast1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west4-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west4-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west4-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west4-b\": {\n      \"operations\": [\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"7299878937969987832\",\n          \"name\": \"operation-1738747414923-62d61ae05477c-7fa693d1-d0a704af\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b\",\n          \"operationType\": \"insert\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b/instances/gce1\",\n          \"targetId\": \"5259249240161292536\",\n          \"status\": \"DONE\",\n          \"user\": \"ppoormina@google.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-02-05T01:23:35.990-08:00\",\n          \"startTime\": \"2025-02-05T01:23:35.991-08:00\",\n          \"endTime\": \"2025-02-05T01:23:43.773-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b/operations/operation-1738747414923-62d61ae05477c-7fa693d1-d0a704af\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"8635556369083044062\",\n          \"name\": \"operation-1738747441366-62d61af98c55c-96ae2060-440e4931\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b\",\n          \"operationType\": \"compute.instanceGroups.insert\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b/instanceGroups/instance-group-1\",\n          \"targetId\": \"8902174216398213342\",\n          \"status\": \"DONE\",\n          \"user\": \"ppoormina@google.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-02-05T01:24:01.566-08:00\",\n          \"startTime\": \"2025-02-05T01:24:01.569-08:00\",\n          \"endTime\": \"2025-02-05T01:24:06.878-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b/operations/operation-1738747441366-62d61af98c55c-96ae2060-440e4931\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"4638586587117949138\",\n          \"name\": \"operation-1738747453216-62d61b04d9872-03f350ec-dbfa7659\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b\",\n          \"operationType\": \"compute.instanceGroups.addInstances\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b/instanceGroups/instance-group-1\",\n          \"targetId\": \"8902174216398213342\",\n          \"status\": \"DONE\",\n          \"user\": \"ppoormina@google.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-02-05T01:24:13.409-08:00\",\n          \"startTime\": \"2025-02-05T01:24:13.426-08:00\",\n          \"endTime\": \"2025-02-05T01:24:13.426-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b/operations/operation-1738747453216-62d61b04d9872-03f350ec-dbfa7659\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"8364649013375336344\",\n          \"name\": \"operation-1738752375165-62d62d5ac922b-8e6e176d-a9fce594\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b\",\n          \"operationType\": \"compute.instanceGroups.delete\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b/instanceGroups/instance-group-1\",\n          \"targetId\": \"8902174216398213342\",\n          \"status\": \"DONE\",\n          \"user\": \"ppoormina@google.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-02-05T02:46:15.347-08:00\",\n          \"startTime\": \"2025-02-05T02:46:15.351-08:00\",\n          \"endTime\": \"2025-02-05T02:46:27.413-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b/operations/operation-1738752375165-62d62d5ac922b-8e6e176d-a9fce594\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"2660550389766487914\",\n          \"name\": \"operation-1738752389041-62d62d6804e17-f844ed3b-d38ec01e\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b\",\n          \"operationType\": \"delete\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b/instances/gce1\",\n          \"targetId\": \"5259249240161292536\",\n          \"status\": \"DONE\",\n          \"user\": \"ppoormina@google.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-02-05T02:46:29.290-08:00\",\n          \"startTime\": \"2025-02-05T02:46:29.308-08:00\",\n          \"endTime\": \"2025-02-05T02:47:15.122-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b/operations/operation-1738752389041-62d62d6804e17-f844ed3b-d38ec01e\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"7617782938227113822\",\n          \"name\": \"operation-1738752433860-62d62d92c2e68-91563631-9f61bdfa\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b\",\n          \"operationType\": \"deleteInstanceNetworkInterfaces\",\n          \"status\": \"DONE\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-02-05T02:47:13.861-08:00\",\n          \"startTime\": \"2025-02-05T02:47:13.861-08:00\",\n          \"endTime\": \"2025-02-05T02:47:14.030-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b/operations/operation-1738752433860-62d62d92c2e68-91563631-9f61bdfa\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"2573392871831822662\",\n          \"name\": \"operation-1738760103957-62d64a2589316-3f295f1f-8bbc488a\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b\",\n          \"operationType\": \"insert\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b/instances/gce1\",\n          \"targetId\": \"4008916034740216135\",\n          \"status\": \"DONE\",\n          \"user\": \"ppoormina@google.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-02-05T04:55:05.269-08:00\",\n          \"startTime\": \"2025-02-05T04:55:05.269-08:00\",\n          \"endTime\": \"2025-02-05T04:55:18.479-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b/operations/operation-1738760103957-62d64a2589316-3f295f1f-8bbc488a\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"7473153672630690093\",\n          \"name\": \"operation-1738760130755-62d64a3f179f5-919db895-16bcc7d1\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b\",\n          \"operationType\": \"compute.instanceGroups.insert\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b/instanceGroups/instance-group-1\",\n          \"targetId\": \"361518988230844717\",\n          \"status\": \"DONE\",\n          \"user\": \"ppoormina@google.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-02-05T04:55:30.986-08:00\",\n          \"startTime\": \"2025-02-05T04:55:30.989-08:00\",\n          \"endTime\": \"2025-02-05T04:55:35.277-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b/operations/operation-1738760130755-62d64a3f179f5-919db895-16bcc7d1\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"757473358983913789\",\n          \"name\": \"operation-1738760146039-62d64a4dab257-0d569310-30a7483b\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b\",\n          \"operationType\": \"compute.instanceGroups.addInstances\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b/instanceGroups/instance-group-1\",\n          \"targetId\": \"361518988230844717\",\n          \"status\": \"DONE\",\n          \"user\": \"ppoormina@google.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-02-05T04:55:46.195-08:00\",\n          \"startTime\": \"2025-02-05T04:55:46.207-08:00\",\n          \"endTime\": \"2025-02-05T04:55:46.207-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-b/operations/operation-1738760146039-62d64a4dab257-0d569310-30a7483b\"\n        }\n      ]\n    },\n    \"zones/europe-west4-a\": {\n      \"operations\": [\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"1685631025898492156\",\n          \"name\": \"operation-1738747408877-62d61ada907a9-9d0f813e-f07449a1\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a\",\n          \"operationType\": \"insert\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/disks/unattached-disk\",\n          \"targetId\": \"6953270790805426431\",\n          \"status\": \"DONE\",\n          \"user\": \"ppoormina@google.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-02-05T01:23:31.548-08:00\",\n          \"startTime\": \"2025-02-05T01:23:31.553-08:00\",\n          \"endTime\": \"2025-02-05T01:23:32.219-08:00\",\n          \"warnings\": [\n            {\n              \"code\": \"DEPRECATED_RESOURCE_USED\",\n              \"message\": \"The resource 'projects/debian-cloud/global/images/debian-9-stretch-v20200805' is deprecated. A suggested replacement is 'projects/debian-cloud/global/images/debian-9-stretch-v20200902'.\",\n              \"data\": [\n                {\n                  \"key\": \"resource_name\",\n                  \"value\": \"projects/debian-cloud/global/images/debian-9-stretch-v20200805\"\n                },\n                {\n                  \"key\": \"replacement_suggestion\",\n                  \"value\": \"A suggested replacement is 'projects/debian-cloud/global/images/debian-9-stretch-v20200902'.\"\n                }\n              ]\n            }\n          ],\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738747408877-62d61ada907a9-9d0f813e-f07449a1\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"4802011922386817272\",\n          \"name\": \"operation-1738747414610-62d61ae00819c-1ae008f6-bdd30571\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a\",\n          \"operationType\": \"insert\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instances/gce2\",\n          \"targetId\": \"2767531853241815288\",\n          \"status\": \"DONE\",\n          \"user\": \"ppoormina@google.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-02-05T01:23:35.682-08:00\",\n          \"startTime\": \"2025-02-05T01:23:35.683-08:00\",\n          \"endTime\": \"2025-02-05T01:23:43.626-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738747414610-62d61ae00819c-1ae008f6-bdd30571\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"1352869565533425909\",\n          \"name\": \"operation-1738747414893-62d61ae04d2d3-de871a42-9984398f\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a\",\n          \"operationType\": \"compute.instanceGroupManagers.insert\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instanceGroupManagers/mig\",\n          \"targetId\": \"1150095616799314165\",\n          \"status\": \"DONE\",\n          \"user\": \"ppoormina@google.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-02-05T01:23:38.382-08:00\",\n          \"startTime\": \"2025-02-05T01:23:38.385-08:00\",\n          \"endTime\": \"2025-02-05T01:24:01.160-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738747414893-62d61ae04d2d3-de871a42-9984398f\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"8847423991943434487\",\n          \"name\": \"operation-1738747415972-62d61ae154a58-e05669f8-723490a4\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a\",\n          \"operationType\": \"insert\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instances/gce1\",\n          \"targetId\": \"7276406499315716343\",\n          \"status\": \"DONE\",\n          \"user\": \"ppoormina@google.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-02-05T01:23:36.880-08:00\",\n          \"startTime\": \"2025-02-05T01:23:36.880-08:00\",\n          \"endTime\": \"2025-02-05T01:23:46.385-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738747415972-62d61ae154a58-e05669f8-723490a4\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"1384003714742653120\",\n          \"name\": \"operation-1738747439771-62d61af806d82-4ebbf5d7-24acef88\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a\",\n          \"operationType\": \"compute.instanceGroups.insert\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instanceGroups/instance-group-2\",\n          \"targetId\": \"685289583101776064\",\n          \"status\": \"DONE\",\n          \"user\": \"ppoormina@google.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-02-05T01:23:59.997-08:00\",\n          \"startTime\": \"2025-02-05T01:24:00.002-08:00\",\n          \"endTime\": \"2025-02-05T01:24:04.289-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738747439771-62d61af806d82-4ebbf5d7-24acef88\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"2096195015671714014\",\n          \"name\": \"operation-1738747441099-62d61af94b403-74fffca4-0c9a8fb9\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a\",\n          \"operationType\": \"compute.instanceGroups.insert\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instanceGroups/instance-group-1\",\n          \"targetId\": \"5126889459178967262\",\n          \"status\": \"DONE\",\n          \"user\": \"ppoormina@google.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-02-05T01:24:01.318-08:00\",\n          \"startTime\": \"2025-02-05T01:24:01.321-08:00\",\n          \"endTime\": \"2025-02-05T01:24:06.794-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738747441099-62d61af94b403-74fffca4-0c9a8fb9\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"4861706435883339997\",\n          \"name\": \"operation-1738747441948-62d61afa1a7d4-174f4852-23871217\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a\",\n          \"clientOperationId\": \"f763fc54-1fbc-3f63-848c-06ebb1f05296\",\n          \"operationType\": \"insert\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instances/mig-l40g\",\n          \"targetId\": \"7786653639192252637\",\n          \"status\": \"DONE\",\n          \"user\": \"123456270@cloudservices.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-02-05T01:24:02.370-08:00\",\n          \"startTime\": \"2025-02-05T01:24:02.370-08:00\",\n          \"endTime\": \"2025-02-05T01:24:12.538-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738747441948-62d61afa1a7d4-174f4852-23871217\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"5794338479467827421\",\n          \"name\": \"operation-1738747442035-62d61afa2f96e-e5edb2fc-aec03ffe\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a\",\n          \"clientOperationId\": \"3a3993c0-da77-3988-b31c-5b1b56ddcd40\",\n          \"operationType\": \"insert\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instances/mig-bzvx\",\n          \"targetId\": \"4335690972119601373\",\n          \"status\": \"DONE\",\n          \"user\": \"123456270@cloudservices.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-02-05T01:24:02.617-08:00\",\n          \"startTime\": \"2025-02-05T01:24:02.618-08:00\",\n          \"endTime\": \"2025-02-05T01:24:11.569-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738747442035-62d61afa2f96e-e5edb2fc-aec03ffe\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"4800699324546584784\",\n          \"name\": \"operation-1738747454988-62d61b0689feb-60effcf0-5387d4be\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a\",\n          \"operationType\": \"compute.instanceGroups.addInstances\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instanceGroups/instance-group-2\",\n          \"targetId\": \"685289583101776064\",\n          \"status\": \"DONE\",\n          \"user\": \"ppoormina@google.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-02-05T01:24:15.134-08:00\",\n          \"startTime\": \"2025-02-05T01:24:15.148-08:00\",\n          \"endTime\": \"2025-02-05T01:24:15.148-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738747454988-62d61b0689feb-60effcf0-5387d4be\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"14036514573815983\",\n          \"name\": \"operation-1738747456352-62d61b07d71c2-98b6f713-591d5e59\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a\",\n          \"operationType\": \"compute.instanceGroups.addInstances\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instanceGroups/instance-group-1\",\n          \"targetId\": \"5126889459178967262\",\n          \"status\": \"DONE\",\n          \"user\": \"ppoormina@google.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-02-05T01:24:16.483-08:00\",\n          \"startTime\": \"2025-02-05T01:24:16.493-08:00\",\n          \"endTime\": \"2025-02-05T01:24:16.493-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738747456352-62d61b07d71c2-98b6f713-591d5e59\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"4665897794526969752\",\n          \"name\": \"operation-1738752375159-62d62d5ac7c81-6ab87d2d-f48e8032\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a\",\n          \"operationType\": \"compute.instanceGroups.delete\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instanceGroups/instance-group-1\",\n          \"targetId\": \"5126889459178967262\",\n          \"status\": \"DONE\",\n          \"user\": \"ppoormina@google.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-02-05T02:46:15.349-08:00\",\n          \"startTime\": \"2025-02-05T02:46:15.353-08:00\",\n          \"endTime\": \"2025-02-05T02:46:23.560-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738752375159-62d62d5ac7c81-6ab87d2d-f48e8032\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"8275472461379600280\",\n          \"name\": \"operation-1738752375162-62d62d5ac86ca-cc818808-46a8ff2e\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a\",\n          \"operationType\": \"compute.instanceGroupManagers.delete\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instanceGroupManagers/mig\",\n          \"targetId\": \"1150095616799314165\",\n          \"status\": \"DONE\",\n          \"user\": \"ppoormina@google.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-02-05T02:46:15.295-08:00\",\n          \"startTime\": \"2025-02-05T02:46:15.297-08:00\",\n          \"endTime\": \"2025-02-05T02:47:32.220-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738752375162-62d62d5ac86ca-cc818808-46a8ff2e\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"5681832674437562264\",\n          \"name\": \"operation-1738752375167-62d62d5ac9870-6e5ad865-b7457901\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a\",\n          \"operationType\": \"compute.instanceGroups.delete\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instanceGroups/instance-group-2\",\n          \"targetId\": \"685289583101776064\",\n          \"status\": \"DONE\",\n          \"user\": \"ppoormina@google.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-02-05T02:46:15.330-08:00\",\n          \"startTime\": \"2025-02-05T02:46:15.333-08:00\",\n          \"endTime\": \"2025-02-05T02:46:23.530-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738752375167-62d62d5ac9870-6e5ad865-b7457901\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"7378605216059293590\",\n          \"name\": \"operation-1738752376997-62d62d5c887bd-ce207daa-dc0d9c46\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a\",\n          \"clientOperationId\": \"9522381a-6f56-4f71-8907-a0034c9a9a85\",\n          \"operationType\": \"delete\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instances/mig-bzvx\",\n          \"targetId\": \"4335690972119601373\",\n          \"status\": \"DONE\",\n          \"user\": \"123456270@cloudservices.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-02-05T02:46:17.164-08:00\",\n          \"startTime\": \"2025-02-05T02:46:17.179-08:00\",\n          \"endTime\": \"2025-02-05T02:47:12.367-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738752376997-62d62d5c887bd-ce207daa-dc0d9c46\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"2560464745392963478\",\n          \"name\": \"operation-1738752377049-62d62d5c9525c-1265037d-132960c4\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a\",\n          \"clientOperationId\": \"656226e6-6ce5-4679-9355-fccafc12bfea\",\n          \"operationType\": \"delete\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instances/mig-l40g\",\n          \"targetId\": \"7786653639192252637\",\n          \"status\": \"DONE\",\n          \"user\": \"123456270@cloudservices.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-02-05T02:46:17.186-08:00\",\n          \"startTime\": \"2025-02-05T02:46:17.197-08:00\",\n          \"endTime\": \"2025-02-05T02:47:15.719-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738752377049-62d62d5c9525c-1265037d-132960c4\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"7441798555944026006\",\n          \"name\": \"operation-1738752377074-62d62d5c9b2d1-be498266-b2a69c60\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a\",\n          \"operationType\": \"delete\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/disks/unattached-disk\",\n          \"targetId\": \"6953270790805426431\",\n          \"status\": \"DONE\",\n          \"user\": \"ppoormina@google.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-02-05T02:46:17.193-08:00\",\n          \"startTime\": \"2025-02-05T02:46:17.204-08:00\",\n          \"endTime\": \"2025-02-05T02:46:17.369-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738752377074-62d62d5c9b2d1-be498266-b2a69c60\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"561518048789331818\",\n          \"name\": \"operation-1738752389039-62d62d680477c-f4a64c5e-019153d6\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a\",\n          \"operationType\": \"delete\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instances/gce1\",\n          \"targetId\": \"7276406499315716343\",\n          \"status\": \"DONE\",\n          \"user\": \"ppoormina@google.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-02-05T02:46:29.253-08:00\",\n          \"startTime\": \"2025-02-05T02:46:29.265-08:00\",\n          \"endTime\": \"2025-02-05T02:46:53.832-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738752389039-62d62d680477c-f4a64c5e-019153d6\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"4581826086040436585\",\n          \"name\": \"operation-1738752390349-62d62d694435e-9f345930-41901d4b\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a\",\n          \"operationType\": \"delete\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instances/gce2\",\n          \"targetId\": \"2767531853241815288\",\n          \"status\": \"DONE\",\n          \"user\": \"ppoormina@google.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-02-05T02:46:30.606-08:00\",\n          \"startTime\": \"2025-02-05T02:46:30.618-08:00\",\n          \"endTime\": \"2025-02-05T02:46:58.825-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738752390349-62d62d694435e-9f345930-41901d4b\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"4908585814940639560\",\n          \"name\": \"operation-1738760102900-62d64a248730c-2bb4806c-3a6bab00\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a\",\n          \"operationType\": \"insert\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/disks/unattached-disk\",\n          \"targetId\": \"694992541288685897\",\n          \"status\": \"DONE\",\n          \"user\": \"ppoormina@google.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-02-05T04:55:03.393-08:00\",\n          \"startTime\": \"2025-02-05T04:55:03.397-08:00\",\n          \"endTime\": \"2025-02-05T04:55:04.024-08:00\",\n          \"warnings\": [\n            {\n              \"code\": \"DEPRECATED_RESOURCE_USED\",\n              \"message\": \"The resource 'projects/debian-cloud/global/images/debian-9-stretch-v20200805' is deprecated. A suggested replacement is 'projects/debian-cloud/global/images/debian-9-stretch-v20200902'.\",\n              \"data\": [\n                {\n                  \"key\": \"resource_name\",\n                  \"value\": \"projects/debian-cloud/global/images/debian-9-stretch-v20200805\"\n                },\n                {\n                  \"key\": \"replacement_suggestion\",\n                  \"value\": \"A suggested replacement is 'projects/debian-cloud/global/images/debian-9-stretch-v20200902'.\"\n                }\n              ]\n            }\n          ],\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738760102900-62d64a248730c-2bb4806c-3a6bab00\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"601841551111283015\",\n          \"name\": \"operation-1738760103937-62d64a2584737-260dc094-70ed5d1e\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a\",\n          \"operationType\": \"insert\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instances/gce1\",\n          \"targetId\": \"7734413015668154695\",\n          \"status\": \"DONE\",\n          \"user\": \"ppoormina@google.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-02-05T04:55:04.955-08:00\",\n          \"startTime\": \"2025-02-05T04:55:04.955-08:00\",\n          \"endTime\": \"2025-02-05T04:55:12.983-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738760103937-62d64a2584737-260dc094-70ed5d1e\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"3915142334434435398\",\n          \"name\": \"operation-1738760104007-62d64a25957c3-60a30d23-1164d9d5\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a\",\n          \"operationType\": \"insert\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instances/gce2\",\n          \"targetId\": \"3427402889068208455\",\n          \"status\": \"DONE\",\n          \"user\": \"ppoormina@google.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-02-05T04:55:05.061-08:00\",\n          \"startTime\": \"2025-02-05T04:55:05.061-08:00\",\n          \"endTime\": \"2025-02-05T04:55:16.951-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738760104007-62d64a25957c3-60a30d23-1164d9d5\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"1144399772905300291\",\n          \"name\": \"operation-1738760104797-62d64a26566ea-9a472cc1-6611ed5e\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a\",\n          \"operationType\": \"compute.instanceGroupManagers.insert\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instanceGroupManagers/mig\",\n          \"targetId\": \"8396330882583945539\",\n          \"status\": \"DONE\",\n          \"user\": \"ppoormina@google.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-02-05T04:55:08.124-08:00\",\n          \"startTime\": \"2025-02-05T04:55:08.126-08:00\",\n          \"endTime\": \"2025-02-05T04:55:21.835-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738760104797-62d64a26566ea-9a472cc1-6611ed5e\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"4699679361577443668\",\n          \"name\": \"operation-1738760122760-62d64a3777c52-d9d5de4a-3df1090b\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a\",\n          \"clientOperationId\": \"186b2cde-969a-3386-bc6e-7ffbbc66d3e9\",\n          \"operationType\": \"insert\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instances/mig-lpq6\",\n          \"targetId\": \"7382059078434873685\",\n          \"status\": \"DONE\",\n          \"user\": \"123456270@cloudservices.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-02-05T04:55:23.096-08:00\",\n          \"startTime\": \"2025-02-05T04:55:23.096-08:00\",\n          \"endTime\": \"2025-02-05T04:55:32.819-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738760122760-62d64a3777c52-d9d5de4a-3df1090b\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"6515331697394770260\",\n          \"name\": \"operation-1738760122858-62d64a378fabe-f0934472-24433aac\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a\",\n          \"clientOperationId\": \"e5221191-dedb-30e2-9966-7a64d8983b0d\",\n          \"operationType\": \"insert\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instances/mig-mv82\",\n          \"targetId\": \"7593829016559083860\",\n          \"status\": \"DONE\",\n          \"user\": \"123456270@cloudservices.gserviceaccount.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-02-05T04:55:23.314-08:00\",\n          \"startTime\": \"2025-02-05T04:55:23.314-08:00\",\n          \"endTime\": \"2025-02-05T04:55:32.099-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738760122858-62d64a378fabe-f0934472-24433aac\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"6947624682632700206\",\n          \"name\": \"operation-1738760128998-62d64a3d6ade0-ffd89247-95f155ae\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a\",\n          \"operationType\": \"compute.instanceGroups.insert\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instanceGroups/instance-group-2\",\n          \"targetId\": \"5283965411150192942\",\n          \"status\": \"DONE\",\n          \"user\": \"ppoormina@google.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-02-05T04:55:29.189-08:00\",\n          \"startTime\": \"2025-02-05T04:55:29.190-08:00\",\n          \"endTime\": \"2025-02-05T04:55:34.578-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738760128998-62d64a3d6ade0-ffd89247-95f155ae\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"2540219974661628204\",\n          \"name\": \"operation-1738760130308-62d64a3eaab71-bf77f19c-6931df00\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a\",\n          \"operationType\": \"compute.instanceGroups.insert\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instanceGroups/instance-group-1\",\n          \"targetId\": \"4588026214929588524\",\n          \"status\": \"DONE\",\n          \"user\": \"ppoormina@google.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-02-05T04:55:31.505-08:00\",\n          \"startTime\": \"2025-02-05T04:55:31.507-08:00\",\n          \"endTime\": \"2025-02-05T04:55:36.461-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738760130308-62d64a3eaab71-bf77f19c-6931df00\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"549539281921564991\",\n          \"name\": \"operation-1738760144156-62d64a4bdf65a-79218dba-ac07d35d\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a\",\n          \"operationType\": \"compute.instanceGroups.addInstances\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instanceGroups/instance-group-2\",\n          \"targetId\": \"5283965411150192942\",\n          \"status\": \"DONE\",\n          \"user\": \"ppoormina@google.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-02-05T04:55:44.329-08:00\",\n          \"startTime\": \"2025-02-05T04:55:44.340-08:00\",\n          \"endTime\": \"2025-02-05T04:55:44.340-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738760144156-62d64a4bdf65a-79218dba-ac07d35d\"\n        },\n        {\n          \"kind\": \"compute#operation\",\n          \"id\": \"2761961937788920125\",\n          \"name\": \"operation-1738760146601-62d64a4e347eb-fb2cdaa8-454e7719\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a\",\n          \"operationType\": \"compute.instanceGroups.addInstances\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instanceGroups/instance-group-1\",\n          \"targetId\": \"4588026214929588524\",\n          \"status\": \"DONE\",\n          \"user\": \"ppoormina@google.com\",\n          \"progress\": 100,\n          \"insertTime\": \"2025-02-05T04:55:46.754-08:00\",\n          \"startTime\": \"2025-02-05T04:55:46.767-08:00\",\n          \"endTime\": \"2025-02-05T04:55:46.767-08:00\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/operations/operation-1738760146601-62d64a4e347eb-fb2cdaa8-454e7719\"\n        }\n      ]\n    },\n    \"zones/europe-north1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-north1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-north1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-north1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-east2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-east2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-east2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west6-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west6-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west6-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west6-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west6-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west6-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west6-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west6-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west6-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast3-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast3-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast3-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast3-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast3-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast3-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast3-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast3-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast3-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west3-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west3-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west3-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west3-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west3-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west3-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west3-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west3-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west3-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west4-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west4-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west4-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west4-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west4-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west4-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west4-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west4-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west4-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-southeast2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-southeast2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-southeast2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-central2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-central2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-central2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-central2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-central2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-central2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-central2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-central2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-central2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-northeast2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-northeast2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-northeast2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-south2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-south2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-south2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/australia-southeast2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/australia-southeast2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/australia-southeast2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-west1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/southamerica-west1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-west1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-west1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/southamerica-west1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-west1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-west1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/southamerica-west1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-west1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east7-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east7-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east7-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east7-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east7-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east7-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east7-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east7-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east7-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west8-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west8-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west8-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west8-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west8-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west8-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west8-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west8-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west8-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west9-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west9-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west9-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west9-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west9-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west9-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west9-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west9-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west9-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east5-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east5-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east5-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east5-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east5-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east5-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east5-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east5-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east5-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-southwest1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-southwest1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-southwest1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-southwest1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-southwest1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-southwest1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-southwest1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-southwest1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-southwest1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-south1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-south1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-south1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-south1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-south1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-south1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-south1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-south1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-south1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-west1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-west1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-west1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-west1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-west1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-west1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/me-west1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-west1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-west1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west12-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west12-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west12-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west12-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west12-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west12-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west12-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west12-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west12-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-central1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-central1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-central1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west10-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west10-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west10-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west10-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west10-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west10-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west10-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west10-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west10-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-central2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-central2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-central2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/africa-south1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/africa-south1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/africa-south1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/africa-south1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/africa-south1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/africa-south1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/africa-south1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/africa-south1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/africa-south1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west8-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west8-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west8-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west8-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west8-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west8-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west8-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west8-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west8-b\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-south1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-south1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-south1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-south1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-south1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-south1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-south1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-south1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-south1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-north2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-north2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-north2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north2-b\"\n          }\n        ]\n      }\n    }\n  },\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/aggregated/operations\"\n}\n"
  },
  {
    "path": "test-data/gce4/json-dumps/healthChecks.json",
    "content": "{\n  \"kind\": \"compute#healthCheckList\",\n  \"id\": \"projects/gcpdiag-gce-vm-performance/global/healthChecks/\",\n  \"items\": [\n    {\n      \"kind\": \"compute#healthCheck\",\n      \"id\": \"6570916794820924287\",\n      \"creationTimestamp\": \"2023-11-22T17:40:32.481-08:00\",\n      \"name\": \"http-basic-check\",\n      \"checkIntervalSec\": 5,\n      \"timeoutSec\": 5,\n      \"unhealthyThreshold\": 2,\n      \"healthyThreshold\": 2,\n      \"type\": \"HTTP\",\n      \"httpHealthCheck\": {\n        \"port\": 80,\n        \"portSpecification\": \"USE_FIXED_PORT\",\n        \"requestPath\": \"/\",\n        \"proxyHeader\": \"NONE\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/healthChecks/http-basic-check\",\n      \"logConfig\": {\n        \"enable\": true\n      }\n    },\n    {\n      \"kind\": \"compute#healthCheck\",\n      \"id\": \"2011808073814110499\",\n      \"creationTimestamp\": \"2023-11-22T11:00:28.722-08:00\",\n      \"name\": \"http-basic-check-2\",\n      \"checkIntervalSec\": 5,\n      \"timeoutSec\": 5,\n      \"unhealthyThreshold\": 2,\n      \"healthyThreshold\": 2,\n      \"type\": \"HTTP\",\n      \"httpHealthCheck\": {\n        \"port\": 80,\n        \"portSpecification\": \"USE_FIXED_PORT\",\n        \"requestPath\": \"/\",\n        \"proxyHeader\": \"NONE\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/healthChecks/http-basic-check-2\"\n    },\n    {\n      \"kind\": \"compute#healthCheck\",\n      \"id\": \"4700445592381550883\",\n      \"creationTimestamp\": \"2023-11-22T11:00:28.748-08:00\",\n      \"name\": \"tcp-basic-check-1\",\n      \"checkIntervalSec\": 5,\n      \"timeoutSec\": 5,\n      \"unhealthyThreshold\": 2,\n      \"healthyThreshold\": 2,\n      \"type\": \"TCP\",\n      \"tcpHealthCheck\": {\n        \"port\": 80,\n        \"proxyHeader\": \"NONE\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/healthChecks/tcp-basic-check-1\",\n      \"logConfig\": {\n        \"enable\": true\n      }\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce-vm-performance/global/healthChecks/\"\n}\n"
  },
  {
    "path": "test-data/gce4/json-dumps/iam-policy.json",
    "content": "{\n  \"bindings\": [\n    {\n      \"members\": [\n        \"serviceAccount:canssh@gcpdiag-gce-vm-performance.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/compute.instanceAdmin.v1\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:canssh@gcpdiag-gce-vm-performance.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/compute.osAdminLogin\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:canssh@gcpdiag-gce-vm-performance.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/compute.osLogin\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12345601@compute-system.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/compute.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:12345601-compute@developer.gserviceaccount.com\",\n        \"serviceAccount:12345601@cloudservices.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/editor\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:canssh@gcpdiag-gce-vm-performance.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/iam.serviceAccountUser\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:canssh@gcpdiag-gce-vm-performance.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/iap.tunnelResourceAccessor\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:canssh@gcpdiag-gce-vm-performance.iam.gserviceaccount.com\",\n        \"user:testuser@example.com\"\n      ],\n      \"role\": \"roles/owner\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12345601@gcp-sa-websecurityscanner.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/websecurityscanner.serviceAgent\"\n    }\n  ],\n  \"etag\": \"BwYKUSKQwSE=\",\n  \"version\": 1\n}\n"
  },
  {
    "path": "test-data/gce4/json-dumps/iam-roles-get.json",
    "content": "{\"roles\":\n[]}\n"
  },
  {
    "path": "test-data/gce4/json-dumps/iam-service-accounts.json",
    "content": "{\n  \"accounts\": [\n    {\n      \"displayName\": \"Cannot SSH Service Account\",\n      \"email\": \"cannotssh@gcpdiag-gce-vm-performance.iam.gserviceaccount.com\",\n      \"etag\": \"MDEwMjE5MjA=\",\n      \"name\": \"projects/gcpdiag-gce-vm-performance/serviceAccounts/cannotssh@gcpdiag-gce-faultyssh-n2tgc4kt.iam.gserviceaccount.com\",\n      \"oauth2ClientId\": \"REDACTED\",\n      \"projectId\": \"gcpdiag-gce-vm-performance\",\n      \"uniqueId\": \"10333387329722592424890\"\n    },\n    {\n      \"displayName\": \"Compute Engine default service account\",\n      \"email\": \"12345601-compute@developer.gserviceaccount.com\",\n      \"etag\": \"MDEwMjE5MjA=\",\n      \"name\": \"projects/gcpdiag-gce-vm-performance/serviceAccounts/12345601-compute@developer.gserviceaccount.com\",\n      \"oauth2ClientId\": \"REDACTED\",\n      \"projectId\": \"gcpdiag-gce-vm-performance\",\n      \"uniqueId\": \"115133333227031909369\"\n    },\n    {\n      \"displayName\": \"Can SSH Service Account\",\n      \"email\": \"canssh@gcpdiag-gce-vm-performance.iam.gserviceaccount.com\",\n      \"etag\": \"MDEwMjE5MjA=\",\n      \"name\": \"projects/gcpdiag-gce-vm-performance/serviceAccounts/canssh@gcpdiag-gce-faultyssh-n2tgc4kt.iam.gserviceaccount.com\",\n      \"oauth2ClientId\": \"REDACTED\",\n      \"projectId\": \"gcpdiag-gce-vm-performance\",\n      \"uniqueId\": \"11795333333333337128185\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gce4/json-dumps/logging-entries-1.json",
    "content": "{\n  \"entries\": [\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-12340002@container-engine-robot.iam.gserviceaccount.com\"\n        },\n        \"requestMetadata\": {\n          \"callerIp\": \"2002:ae8:2d45::\",\n          \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 GoogleContainerEngine/v1\"\n        },\n        \"serviceName\": \"compute.googleapis.com\",\n        \"methodName\": \"beta.compute.instanceGroupManagers.insert\",\n        \"resourceName\": \"projects/gcpdiag-gce-vm-performance/zones/europe-west1-b/instanceGroupManagers/gke-gke2-default-pool-11b6ca8e-grp\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instanceGroupManagers.insert\"\n        }\n      },\n      \"insertId\": \"-4pqrg9dartq\",\n      \"resource\": {\n        \"type\": \"gce_instance_group_manager\",\n        \"labels\": {\n          \"instance_group_manager_id\": \"8700821884762314590\",\n          \"instance_group_manager_name\": \"gke-gke2-default-pool-11b6ca8e-grp\",\n          \"project_id\": \"gcpdiag-gce-vm-performance\",\n          \"location\": \"europe-west1-b\"\n        }\n      },\n      \"timestamp\": \"2021-11-24T16:35:22.615295Z\",\n      \"severity\": \"NOTICE\",\n      \"logName\": \"projects/gcpdiag-gce-vm-performance/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1637771697161-5d18b703b865a-dccbda35-ad8629c7\",\n        \"producer\": \"compute.googleapis.com\",\n        \"last\": true\n      },\n      \"receiveTimestamp\": \"2021-11-24T16:35:23.172680503Z\"\n    },\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-12340002@container-engine-robot.iam.gserviceaccount.com\"\n        },\n        \"requestMetadata\": {\n          \"callerIp\": \"2002:ae8:2d45::\",\n          \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 GoogleContainerEngine/v1\"\n        },\n        \"serviceName\": \"compute.googleapis.com\",\n        \"methodName\": \"beta.compute.instanceGroupManagers.insert\",\n        \"resourceName\": \"projects/gcpdiag-gce-vm-performance/zones/europe-west1-d/instanceGroupManagers/gke-gke2-default-pool-98631c84-grp\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instanceGroupManagers.insert\"\n        }\n      },\n      \"insertId\": \"-nuwdobe1byj2\",\n      \"resource\": {\n        \"type\": \"gce_instance_group_manager\",\n        \"labels\": {\n          \"instance_group_manager_name\": \"gke-gke2-default-pool-98631c84-grp\",\n          \"project_id\": \"gcpdiag-gce-vm-performance\",\n          \"location\": \"europe-west1-d\",\n          \"instance_group_manager_id\": \"6471686162526492481\"\n        }\n      },\n      \"timestamp\": \"2021-11-24T16:35:10.014049Z\",\n      \"severity\": \"NOTICE\",\n      \"logName\": \"projects/gcpdiag-gce-vm-performance/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1637771693512-5d18b7003d60c-2f9aaeaf-535e4f63\",\n        \"producer\": \"compute.googleapis.com\",\n        \"last\": true\n      },\n      \"receiveTimestamp\": \"2021-11-24T16:35:10.306123333Z\"\n    },\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-12340002@container-engine-robot.iam.gserviceaccount.com\"\n        },\n        \"requestMetadata\": {\n          \"callerIp\": \"2002:ae8:2d45::\",\n          \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 GoogleContainerEngine/v1\"\n        },\n        \"serviceName\": \"compute.googleapis.com\",\n        \"methodName\": \"beta.compute.instanceGroupManagers.insert\",\n        \"resourceName\": \"projects/gcpdiag-gce-vm-performance/zones/europe-west1-c/instanceGroupManagers/gke-gke2-default-pool-5e5781dd-grp\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instanceGroupManagers.insert\"\n        }\n      },\n      \"insertId\": \"tf2uocd1kpc\",\n      \"resource\": {\n        \"type\": \"gce_instance_group_manager\",\n        \"labels\": {\n          \"instance_group_manager_name\": \"gke-gke2-default-pool-5e5781dd-grp\",\n          \"project_id\": \"gcpdiag-gce-vm-performance\",\n          \"instance_group_manager_id\": \"5205754198527039297\",\n          \"location\": \"europe-west1-c\"\n        }\n      },\n      \"timestamp\": \"2021-11-24T16:35:08.922507Z\",\n      \"severity\": \"NOTICE\",\n      \"logName\": \"projects/gcpdiag-gce-vm-performance/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1637771693418-5d18b700269e6-19f4d541-4d012584\",\n        \"producer\": \"compute.googleapis.com\",\n        \"last\": true\n      },\n      \"receiveTimestamp\": \"2021-11-24T16:35:09.484397071Z\"\n    },\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-12340002@container-engine-robot.iam.gserviceaccount.com\"\n        },\n        \"requestMetadata\": {\n          \"callerIp\": \"2002:a05:601a:1550::\",\n          \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 GoogleContainerEngine/v1\"\n        },\n        \"serviceName\": \"compute.googleapis.com\",\n        \"methodName\": \"beta.compute.instanceGroupManagers.insert\",\n        \"resourceName\": \"projects/gcpdiag-gce-vm-performance/zones/europe-west1-c/instanceGroupManagers/gke-gke3-default-pool-013fb293-grp\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instanceGroupManagers.insert\"\n        }\n      },\n      \"insertId\": \"tf2uocd1kou\",\n      \"resource\": {\n        \"type\": \"gce_instance_group_manager\",\n        \"labels\": {\n          \"project_id\": \"gcpdiag-gce-vm-performance\",\n          \"instance_group_manager_id\": \"3383879657688651622\",\n          \"location\": \"europe-west1-c\",\n          \"instance_group_manager_name\": \"gke-gke3-default-pool-013fb293-grp\"\n        }\n      },\n      \"timestamp\": \"2021-11-24T16:34:38.479723Z\",\n      \"severity\": \"NOTICE\",\n      \"logName\": \"projects/gcpdiag-gce-vm-performance/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1637771657193-5d18b6dd9a974-6dee9d9a-988a4f6c\",\n        \"producer\": \"compute.googleapis.com\",\n        \"last\": true\n      },\n      \"receiveTimestamp\": \"2021-11-24T16:34:39.479072691Z\"\n    },\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-12340002@container-engine-robot.iam.gserviceaccount.com\"\n        },\n        \"requestMetadata\": {\n          \"callerIp\": \"2002:a05:601a:1550::\",\n          \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 GoogleContainerEngine/v1\"\n        },\n        \"serviceName\": \"compute.googleapis.com\",\n        \"methodName\": \"beta.compute.instanceGroupManagers.insert\",\n        \"resourceName\": \"projects/gcpdiag-gce-vm-performance/zones/europe-west1-b/instanceGroupManagers/gke-gke3-default-pool-597c9ca2-grp\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instanceGroupManagers.insert\"\n        }\n      },\n      \"insertId\": \"-4pqrg9darqs\",\n      \"resource\": {\n        \"type\": \"gce_instance_group_manager\",\n        \"labels\": {\n          \"location\": \"europe-west1-b\",\n          \"instance_group_manager_id\": \"5404218744580069225\",\n          \"instance_group_manager_name\": \"gke-gke3-default-pool-597c9ca2-grp\",\n          \"project_id\": \"gcpdiag-gce-vm-performance\"\n        }\n      },\n      \"timestamp\": \"2021-11-24T16:34:37.484721Z\",\n      \"severity\": \"NOTICE\",\n      \"logName\": \"projects/gcpdiag-gce-vm-performance/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1637771652136-5d18b6d8c7d4a-678a3896-62f6d812\",\n        \"producer\": \"compute.googleapis.com\",\n        \"last\": true\n      },\n      \"receiveTimestamp\": \"2021-11-24T16:34:38.168845698Z\"\n    },\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-12340002@container-engine-robot.iam.gserviceaccount.com\"\n        },\n        \"requestMetadata\": {\n          \"callerIp\": \"2002:a05:601a:1550::\",\n          \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 GoogleContainerEngine/v1\"\n        },\n        \"serviceName\": \"compute.googleapis.com\",\n        \"methodName\": \"beta.compute.instanceGroupManagers.insert\",\n        \"resourceName\": \"projects/gcpdiag-gce-vm-performance/zones/europe-west1-d/instanceGroupManagers/gke-gke3-default-pool-c125bae7-grp\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instanceGroupManagers.insert\"\n        }\n      },\n      \"insertId\": \"-31olexd4rpi\",\n      \"resource\": {\n        \"type\": \"gce_instance_group_manager\",\n        \"labels\": {\n          \"instance_group_manager_name\": \"gke-gke3-default-pool-c125bae7-grp\",\n          \"location\": \"europe-west1-d\",\n          \"project_id\": \"gcpdiag-gce-vm-performance\",\n          \"instance_group_manager_id\": \"1403931912127633256\"\n        }\n      },\n      \"timestamp\": \"2021-11-24T16:34:35.389660Z\",\n      \"severity\": \"NOTICE\",\n      \"logName\": \"projects/gcpdiag-gce-vm-performance/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1637771654866-5d18b6db6263d-009ad0ed-4b71b356\",\n        \"producer\": \"compute.googleapis.com\",\n        \"last\": true\n      },\n      \"receiveTimestamp\": \"2021-11-24T16:34:35.872428070Z\"\n    },\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-12340002@container-engine-robot.iam.gserviceaccount.com\"\n        },\n        \"requestMetadata\": {\n          \"callerIp\": \"2002:a17:907:3ea4::\",\n          \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 GoogleContainerEngine/v1\"\n        },\n        \"serviceName\": \"compute.googleapis.com\",\n        \"methodName\": \"beta.compute.instanceGroupManagers.insert\",\n        \"resourceName\": \"projects/gcpdiag-gce-vm-performance/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-dc4a8b29-grp\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instanceGroupManagers.insert\"\n        }\n      },\n      \"insertId\": \"-tt9mudi768\",\n      \"resource\": {\n        \"type\": \"gce_instance_group_manager\",\n        \"labels\": {\n          \"location\": \"europe-west4-a\",\n          \"instance_group_manager_id\": \"318228385164940970\",\n          \"project_id\": \"gcpdiag-gce-vm-performance\",\n          \"instance_group_manager_name\": \"gke-gke1-default-pool-dc4a8b29-grp\"\n        }\n      },\n      \"timestamp\": \"2021-11-24T16:29:21.943390Z\",\n      \"severity\": \"NOTICE\",\n      \"logName\": \"projects/gcpdiag-gce-vm-performance/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1637771331527-5d18b5a706163-f238dbec-106555c8\",\n        \"producer\": \"compute.googleapis.com\",\n        \"last\": true\n      },\n      \"receiveTimestamp\": \"2021-11-24T16:29:22.710110506Z\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gce4/json-dumps/monitoring-query.json",
    "content": "{\n  \"timeSeriesDescriptor\": {\n    \"labelDescriptors\": [\n      {\n        \"key\": \"resource.project_id\"\n      },\n      {\n        \"key\": \"resource.zone\"\n      },\n      {\n        \"key\": \"resource.instance_id\"\n      },\n      {\n        \"key\": \"metric.instance_name\"\n      }\n    ],\n    \"pointDescriptors\": [\n      {\n        \"key\": \"value_utilization_max\",\n        \"valueType\": \"DOUBLE\",\n        \"metricKind\": \"GAUGE\",\n        \"unit\": \"10^2.%\"\n      }\n    ]\n  },\n  \"timeSeriesData\": [\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"gcpdiag-gce-faultyssh-runbook\"\n        },\n        {\n          \"stringValue\": \"europe-west2-a\"\n        },\n        {\n          \"stringValue\": \"5942951451833189109\"\n        },\n        {\n          \"stringValue\": \"valid-linux-ssh\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 0.0045755313326865847\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2023-11-06T00:51:33.181476Z\",\n            \"endTime\": \"2023-11-06T00:51:33.181476Z\"\n          }\n        }\n      ]\n    },\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"gcpdiag-gce-faultyssh-runbook\"\n        },\n        {\n          \"stringValue\": \"europe-west2-a\"\n        },\n        {\n          \"stringValue\": \"3885320804588110182\"\n        },\n        {\n          \"stringValue\": \"faulty-windows-ssh\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 0.28800768913451219\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2023-11-06T00:51:33.181476Z\",\n            \"endTime\": \"2023-11-06T00:51:33.181476Z\"\n          }\n        }\n      ]\n    },\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"gcpdiag-gce-faultyssh-runbook\"\n        },\n        {\n          \"stringValue\": \"europe-west2-a\"\n        },\n        {\n          \"stringValue\": \"3200700792812650937\"\n        },\n        {\n          \"stringValue\": \"valid-windows-ssh\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 0.30707438214176364\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2023-11-06T00:51:33.181476Z\",\n            \"endTime\": \"2023-11-06T00:51:33.181476Z\"\n          }\n        }\n      ]\n    },\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"gcpdiag-gce-faultyssh-runbook\"\n        },\n        {\n          \"stringValue\": \"europe-west2-a\"\n        },\n        {\n          \"stringValue\": \"1843453795420711417\"\n        },\n        {\n          \"stringValue\": \"faulty-linux-ssh\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 0.99957377216799159\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2023-11-06T00:51:33.181476Z\",\n            \"endTime\": \"2023-11-06T00:51:33.181476Z\"\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gce4/json-dumps/project.json",
    "content": "{\n  \"name\": \"projects/123456270\",\n  \"parent\": \"folders/123456012\",\n  \"projectId\": \"gcpdiag-gce-vm-performance\",\n  \"state\": \"ACTIVE\",\n  \"displayName\": \"gcpdiag test - vm performance\",\n  \"createTime\": \"2023-11-03T21:16:55.750643Z\",\n  \"updateTime\": \"2023-11-04T04:00:10.466760Z\",\n  \"etag\": \"W/\\\"80b0d9f39ba4a6c9\\\"\",\n  \"labels\": {\n    \"gcpdiag\": \"test\"\n  }\n}\n"
  },
  {
    "path": "test-data/gce4/json-dumps/services.json",
    "content": "{\n  \"services\": [\n    {\n      \"name\": \"projects/12345601/services/compute.googleapis.com\",\n      \"config\": {\n        \"name\": \"compute.googleapis.com\",\n        \"title\": \"Compute Engine API\",\n        \"documentation\": {\n          \"summary\": \"Creates and runs virtual machines on Google Cloud Platform.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"compute.googleapis.com/VpcNetwork\",\n            \"displayName\": \"VPC Network\",\n            \"description\": \"VPC Network.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the VPC Network.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the VPC Network, global always.\"\n              },\n              {\n                \"key\": \"network_id\",\n                \"description\": \"VPC Network resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Location\",\n            \"displayName\": \"Compute Location\",\n            \"description\": \"A location in the Compute API.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the Compute Location.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Interconnect\",\n            \"displayName\": \"Interconnect\",\n            \"description\": \"Interconnect.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the Interconnect.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the Interconnect.\"\n              },\n              {\n                \"key\": \"interconnect_id\",\n                \"description\": \"Interconnect resource ID.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/OperationType\",\n            \"displayName\": \"Operation Type\",\n            \"description\": \"Operation Type.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the operation.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the operation.\"\n              },\n              {\n                \"key\": \"operation_type\",\n                \"description\": \"Operation type.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Reservation\",\n            \"displayName\": \"Reservation\",\n            \"description\": \"Monitored resource representing a reservation.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container (e.g. project number) associated with the reservation.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The zone that contains the reservation.\"\n              },\n              {\n                \"key\": \"reservation_id\",\n                \"description\": \"Reservation resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"gce_instance\",\n            \"displayName\": \"VM Instance\",\n            \"description\": \"A virtual machine instance hosted in Compute Engine.\",\n            \"labels\": [\n              {\n                \"key\": \"project_id\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as \\\"my-project\\\".\"\n              },\n              {\n                \"key\": \"instance_id\",\n                \"description\": \"The numeric VM instance identifier assigned by Compute Engine.\"\n              },\n              {\n                \"key\": \"zone\",\n                \"description\": \"The Compute Engine zone in which the VM is running.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/FirewallPolicy\",\n            \"displayName\": \"Firewall policy\",\n            \"description\": \"Firewall policy.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project or organization) associated with the firewall policy.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the firewall policy.\"\n              },\n              {\n                \"key\": \"firewall_policy_id\",\n                \"description\": \"Firewall policy resource ID.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/dynamic_routes_per_region_per_peering_group\",\n                \"compute.googleapis.com/global_internal_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/instances_per_peering_group\",\n                \"compute.googleapis.com/instances_per_vpc_network\",\n                \"compute.googleapis.com/internal_lb_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_managed_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_protocol_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/ip_aliases_per_peering_group\",\n                \"compute.googleapis.com/ip_aliases_per_vpc_network\",\n                \"compute.googleapis.com/peerings_per_vpc_network\",\n                \"compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/exceeded\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/regional_external_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/regional_internal_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/static_routes_per_peering_group\",\n                \"compute.googleapis.com/static_routes_per_vpc_network\",\n                \"compute.googleapis.com/subnet_ranges_per_peering_group\",\n                \"compute.googleapis.com/subnet_ranges_per_vpc_network\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Location\",\n              \"metrics\": [\n                \"compute.googleapis.com/cpus_per_vm_family\",\n                \"compute.googleapis.com/global_dns/request_count\",\n                \"compute.googleapis.com/inter_region_egress_bandwidth\",\n                \"compute.googleapis.com/local_ssd_total_storage_per_vm_family\",\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/exceeded\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/exceeded\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/exceeded\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/usage\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/exceeded\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Interconnect\",\n              \"metrics\": [\n                \"compute.googleapis.com/interconnect_attachments_per_interconnect\",\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/OperationType\",\n              \"metrics\": [\n                \"compute.googleapis.com/global_concurrent_operations\",\n                \"compute.googleapis.com/quota/concurrent/global_concurrent_operations/exceeded\",\n                \"compute.googleapis.com/quota/concurrent/internal/global_concurrent_operations/combined_units\",\n                \"compute.googleapis.com/quota/concurrent/internal/regional_concurrent_operations/combined_units\",\n                \"compute.googleapis.com/quota/concurrent/regional_concurrent_operations/exceeded\",\n                \"compute.googleapis.com/regional_concurrent_operations\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"gce_instance\",\n              \"metrics\": [\n                \"compute.googleapis.com/instance/global_dns/request_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Reservation\",\n              \"metrics\": [\n                \"compute.googleapis.com/reservation/reserved\",\n                \"compute.googleapis.com/reservation/assured\",\n                \"compute.googleapis.com/reservation/used\",\n                \"compute.googleapis.com/reservation/internal/matching_instances\",\n                \"compute.googleapis.com/reservation/internal/prespuns_by_state\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Location\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/limit\",\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/usage\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/limit\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/usage\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/limit\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/limit\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/usage\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/limit\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/limit\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/usage\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/limit\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/usage\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Interconnect\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/limit\",\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/OperationType\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/concurrent/global_concurrent_operations/limit\",\n                \"compute.googleapis.com/quota/concurrent/regional_concurrent_operations/limit\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/FirewallPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/FirewallPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/usage\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345601\"\n    },\n    {\n      \"name\": \"projects/12345601/services/oslogin.googleapis.com\",\n      \"config\": {\n        \"name\": \"oslogin.googleapis.com\",\n        \"title\": \"Cloud OS Login API\",\n        \"documentation\": {\n          \"summary\": \"You can use OS Login to manage access to your VM instances using IAM roles.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345601\"\n    },\n    {\n      \"name\": \"projects/12345601/services/websecurityscanner.googleapis.com\",\n      \"config\": {\n        \"name\": \"websecurityscanner.googleapis.com\",\n        \"title\": \"Web Security Scanner API\",\n        \"documentation\": {\n          \"summary\": \"Scans your Compute and App Engine apps for common web vulnerabilities.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345601\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gce4/project.tf",
    "content": "/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nresource \"random_string\" \"project_id_suffix\" {\n  length  = 8\n  number  = true\n  lower   = true\n  upper   = false\n  special = false\n}\n\nresource \"google_project\" \"project\" {\n  name            = \"gcpdiag test - vm performance\"\n  project_id      = var.project_id != \"\" ? var.project_id : \"gcpdiag-gce2-${random_string.project_id_suffix.id}\"\n  org_id          = var.folder_id == \"\" ? var.org_id : null\n  folder_id       = var.folder_id != \"\" ? var.folder_id : null\n  billing_account = var.billing_account_id\n  labels = {\n    gcpdiag : \"test\"\n  }\n}\n\nresource \"google_project_service\" \"compute\" {\n  project = google_project.project.project_id\n  service = \"compute.googleapis.com\"\n}\n\nresource \"google_compute_project_metadata_item\" \"serial_logging\" {\n  project    = google_project.project.project_id\n  depends_on = [google_project_service.compute]\n  key        = \"serial-port-logging-enable\"\n  value      = \"true\"\n}\n\ndata \"google_compute_default_service_account\" \"default\" {\n  project    = google_project.project.project_id\n  depends_on = [google_project_service.compute]\n}\n\ndata \"google_compute_image\" \"debian\" {\n  family  = \"debian-11\"\n  project = \"debian-cloud\"\n}\n\ndata \"google_compute_image\" \"windows\" {\n  family  = \"windows-2019-core\"\n  project = \"windows-cloud\"\n}\n\noutput \"project_id\" {\n  value = google_project.project.project_id\n}\n\noutput \"project_id_suffix\" {\n  value = random_string.project_id_suffix.id\n}\n\noutput \"project_nr\" {\n  value = google_project.project.number\n}\n\noutput \"org_id\" {\n  value = var.org_id\n}\n"
  },
  {
    "path": "test-data/gce4/variables.tf",
    "content": "variable \"project_id\" {\n  //default = \"use-an-existing-test-project\"\n  //project_id = gcpdiag-gce-vm-performance\n}\nvariable \"billing_account_id\" {}\n\nvariable \"org_id\" { default = \"\" }\nvariable \"folder_id\" { default = \"\" }\n\nvariable \"roles\" {\n  description = \"List of SSH related roles to assign\"\n  type        = list(string)\n  default = [\n    \"roles/owner\",\n    \"roles/compute.osLogin\",\n    \"roles/compute.osAdminLogin\",\n    \"roles/iam.serviceAccountUser\",\n    \"roles/iap.tunnelResourceAccessor\",\n    \"roles/compute.instanceAdmin.v1\",\n  ]\n}\n"
  },
  {
    "path": "test-data/gce5/Makefile",
    "content": "PROJECT_ID  := $(shell terraform output -raw project_id)\nPROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix)\nPROJECT_NR  := $(shell terraform output -raw project_nr)\nORG_ID      := $(shell terraform output -raw org_id)\nCURL         = ../../bin/curl-wrap.sh\nJSON_CLEANER = ../../bin/json-cleaner\nZONE_1       = us-central1-c\n\nFAKE_PROJECT_ID_SUFFIX = aaaa\nFAKE_PROJECT_NR = 123456012345\nFAKE_ORG_ID = 11112222\n\nCOMPUTE_INSTANCES_MAXRESULTS=3\n\nINSTANCE_NAME_GCE1=start-and-stop-vm\nINSTANCE_NAME_GCE2=spot-vm-termination\nINSTANCE_NAME_GCE3=shielded-vm-integrity-failure\nSTART_TIMESTAMP = 2025-03-17T00:00:00+00:00\nEND_TIMESTAMP   = 2025-03-18T00:00:00+00:00\n\nSED_SUBST_FAKE = sed -e \"s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/\" \\\n\t\t     -e \"s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/\" \\\n\t\t     -e \"s/$(ORG_ID)/$(FAKE_ORG_ID)/\" \\\n\t\t     -e \"s/[a-zA-Z0-9._%+-]+@google.com/$(FAKE_USER_ACCOUNT)/\"\n\nall:\t\\\n\tjson-dumps/compute-effective-firewalls-default.json \\\n\tjson-dumps/compute-instances-empty.json \\\n\tjson-dumps/compute-instances-$(ZONE_1).json \\\n\tjson-dumps/compute-disks-$(ZONE_1).json \\\n\tjson-dumps/compute-disks-empty.json \\\n\tjson-dumps/compute-network-default.json \\\n\tjson-dumps/compute-project.json \\\n\tjson-dumps/compute-regions.json \\\n\tjson-dumps/compute-zones.json \\\n\tjson-dumps/iam-policy.json \\\n\tjson-dumps/iam-service-accounts.json \\\n\tjson-dumps/project.json \\\n\tjson-dumps/services.json \\\n\tjson-dumps/global-operations.json \\\n\tjson-dumps/logging-entries-1.json \\\n\tjson-dumps/compute-migs-aggregated.json \\\n\tjson-dumps/healthChecks.json \\\n\tjson-dumps/compute-instances-aggregated.json\n\ninclude ../Makefile.inc\n\ndefine MONITORING_QUERY\n{ \\\n  \"query\": \"fetch gce_instance \\\n            | metric 'compute.googleapis.com/instance/cpu/utilization' \\\n            | group_by 5m, [value_utilization_max: max(value.utilization)] \\\n            | every 5m \\\n  \t\t\t\t\t\" \\\n}\nendef\njson-dumps/monitoring-query.json:\n\t$(CURL) -fsS \\\n\t\t'https://monitoring.googleapis.com/v3/projects/$(PROJECT_ID)/timeSeries:query' \\\n\t\t--header \"Content-Type: application/json\" -X POST \\\n\t\t--data '$(MONITORING_QUERY)' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\n\nTERMINATION_OPERATION_FILTER=\"%28operationType%3D%22compute.instances.repair.recreateInstance%22%29%20OR%20%28operationType%3D%22compute.instances.hostError%22%29%20OR%20%28operationType%3D%22compute.instances.guestTerminate%22%29%20OR%20%28operationType%3D%22compute.instances.preempted%22%29%20OR%20%28operationType%3D%22compute.instances.terminateOnHostMaintenance%22%29%20OR%20%28operationType%3D%22stop%22%29%20OR%20%28operationType%3D%22suspend%22%29%20OR%20%28operationType%3D%22reset%22%29%20OR%20%28operationType%3D%22compute.instanceGroupManagers.resizeAdvanced%22%29%20OR%20%28operationType%3D%22compute.autoscalers.resize%22%29%0A\"\njson-dumps/global-operations.json:\n\t$(CURL) -fsS \\\n\t  \"https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/aggregated/operations?filter=$(TERMINATION_OPERATION_FILTER)\" \\\n\t\t| $(JSON_CLEANER) other \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\n# \tprotoPayload.methodName=~\\\"compute.instances.(hostError|guestTerminate|preempted|terminateOnHostMaintenance|stop|suspend|repair.recreateInstance|ScheduledVMs)\\\" OR\ndefine LOGGING_ENTRIES_BODY\n{\n\t\"resourceNames\": [\"projects/$(PROJECT_ID)\"],\n\t\"orderBy\": \"timestamp desc\",\n\t\"pageSize\": 200,\n\t\"filter\": \"timestamp > \\\"$(START_TIMESTAMP)\\\" AND\n\ttimestamp < \\\"$(END_TIMESTAMP)\\\" AND\n\tresource.type=\\\"gce_instance\\\" AND\n\tprotoPayload.methodName=~\\\"compute.instances.(hostError|guestTerminate|preempted|terminateOnHostMaintenance|stop|suspend|repair.recreateInstance)\\\" OR\n\tprotoPayload.methodName=~\\\"ScheduledVMs\\\" OR\n\t(jsonPayload.@type=\\\"type.googleapis.com/cloud_integrity.IntegrityEvent\\\" AND severity=\\\"ERROR\\\")\"\n}\nendef\n\nexport LOGGING_ENTRIES_BODY\n\njson-dumps/logging-entries-1.json:\n\t$(CURL) -fsS \\\n\t\t'https://logging.googleapis.com/v2/entries:list' \\\n\t\t--header \"Content-Type:text/json\" \\\n\t\t-d \"$$LOGGING_ENTRIES_BODY\" \\\n\t\t| $(JSON_CLEANER) other \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/healthChecks.json:\n\t$(CURL) -fsS \\\n\t        'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/global/healthChecks/' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n"
  },
  {
    "path": "test-data/gce5/json-dumps/compute-disks-europe-west2-b.json",
    "content": "{\n  \"kind\": \"compute#diskList\",\n  \"id\": \"projects/gcpdiag-gce5-aaaa/zones/europe-west2-b/disks\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west2-b/disks\"\n}\n"
  },
  {
    "path": "test-data/gce5/json-dumps/compute-disks-us-central1-c.json",
    "content": "{\n  \"kind\": \"compute#diskList\",\n  \"id\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/disks\",\n  \"items\": [\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"324125873382120840\",\n      \"creationTimestamp\": \"2025-03-18T14:19:36.663-07:00\",\n      \"name\": \"apache-instance-3q8d\",\n      \"sizeGb\": \"10\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/disks/apache-instance-3q8d\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-11-bullseye-v20250311\",\n      \"sourceImageId\": \"6139874332219611556\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/diskTypes/pd-standard\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"UEFI_COMPATIBLE\"\n        },\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        },\n        {\n          \"type\": \"GVNIC\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2025-03-18T14:19:37.762-07:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/apache-instance-3q8d\"\n      ],\n      \"labelFingerprint\": \"42WmSpB8rSM=\",\n      \"licenseCodes\": [\n        \"3853522013536123851\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\",\n      \"enableConfidentialCompute\": false,\n      \"satisfiesPzi\": true,\n      \"architecture\": \"X86_64\"\n    },\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"5581225578091489892\",\n      \"creationTimestamp\": \"2025-03-18T17:49:16.023-07:00\",\n      \"name\": \"apache-instance-7ssf\",\n      \"sizeGb\": \"10\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/disks/apache-instance-7ssf\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-11-bullseye-v20250311\",\n      \"sourceImageId\": \"6139874332219611556\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/diskTypes/pd-standard\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"UEFI_COMPATIBLE\"\n        },\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        },\n        {\n          \"type\": \"GVNIC\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2025-03-18T17:50:11.251-07:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/apache-instance-7ssf\"\n      ],\n      \"labelFingerprint\": \"42WmSpB8rSM=\",\n      \"licenseCodes\": [\n        \"3853522013536123851\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\",\n      \"enableConfidentialCompute\": false,\n      \"architecture\": \"X86_64\"\n    },\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"5220330411195129197\",\n      \"creationTimestamp\": \"2025-03-18T14:20:02.736-07:00\",\n      \"name\": \"shielded-vm-integrity-failure\",\n      \"sizeGb\": \"10\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/disks/shielded-vm-integrity-failure\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-2204-jammy-v20250312\",\n      \"sourceImageId\": \"6817663366014267458\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/diskTypes/pd-standard\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-2204-lts\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        },\n        {\n          \"type\": \"SEV_CAPABLE\"\n        },\n        {\n          \"type\": \"SEV_SNP_CAPABLE\"\n        },\n        {\n          \"type\": \"SEV_LIVE_MIGRATABLE\"\n        },\n        {\n          \"type\": \"SEV_LIVE_MIGRATABLE_V2\"\n        },\n        {\n          \"type\": \"IDPF\"\n        },\n        {\n          \"type\": \"TDX_CAPABLE\"\n        },\n        {\n          \"type\": \"UEFI_COMPATIBLE\"\n        },\n        {\n          \"type\": \"GVNIC\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2025-03-18T14:20:03.421-07:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/shielded-vm-integrity-failure\"\n      ],\n      \"labelFingerprint\": \"42WmSpB8rSM=\",\n      \"licenseCodes\": [\n        \"5511465778777431107\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\",\n      \"enableConfidentialCompute\": false,\n      \"satisfiesPzi\": true,\n      \"architecture\": \"X86_64\"\n    },\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"1275105682248316840\",\n      \"creationTimestamp\": \"2025-03-13T18:41:28.587-07:00\",\n      \"name\": \"spot-vm-termination\",\n      \"sizeGb\": \"10\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/disks/spot-vm-termination\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-11-bullseye-v20250311\",\n      \"sourceImageId\": \"6139874332219611556\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/diskTypes/pd-standard\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"UEFI_COMPATIBLE\"\n        },\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        },\n        {\n          \"type\": \"GVNIC\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2025-03-13T18:41:29.556-07:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\"\n      ],\n      \"labelFingerprint\": \"42WmSpB8rSM=\",\n      \"licenseCodes\": [\n        \"3853522013536123851\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\",\n      \"enableConfidentialCompute\": false,\n      \"satisfiesPzi\": true,\n      \"architecture\": \"X86_64\"\n    },\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"358652166287535319\",\n      \"creationTimestamp\": \"2025-03-13T19:19:36.239-07:00\",\n      \"name\": \"start-and-stop-vm\",\n      \"sizeGb\": \"10\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/disks/start-and-stop-vm\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-11-bullseye-v20250311\",\n      \"sourceImageId\": \"6139874332219611556\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/diskTypes/pd-standard\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"UEFI_COMPATIBLE\"\n        },\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        },\n        {\n          \"type\": \"GVNIC\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2025-03-13T19:19:36.916-07:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\"\n      ],\n      \"labelFingerprint\": \"42WmSpB8rSM=\",\n      \"licenseCodes\": [\n        \"3853522013536123851\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\",\n      \"enableConfidentialCompute\": false,\n      \"satisfiesPzi\": true,\n      \"architecture\": \"X86_64\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/disks\"\n}\n"
  },
  {
    "path": "test-data/gce5/json-dumps/compute-effective-firewalls-default.json",
    "content": "{\n  \"firewalls\": [\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"5720173482424023855\",\n      \"creationTimestamp\": \"2025-03-13T18:26:24.897-07:00\",\n      \"name\": \"default-allow-ssh\",\n      \"description\": \"Allow SSH from anywhere\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/global/networks/default\",\n      \"priority\": 65534,\n      \"sourceRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"22\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/global/firewalls/default-allow-ssh\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"1526008042363960111\",\n      \"creationTimestamp\": \"2025-03-13T18:26:24.984-07:00\",\n      \"name\": \"default-allow-rdp\",\n      \"description\": \"Allow RDP from anywhere\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/global/networks/default\",\n      \"priority\": 65534,\n      \"sourceRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"3389\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/global/firewalls/default-allow-rdp\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"2203694065663228718\",\n      \"creationTimestamp\": \"2025-03-13T18:26:25.072-07:00\",\n      \"name\": \"default-allow-icmp\",\n      \"description\": \"Allow ICMP from anywhere\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/global/networks/default\",\n      \"priority\": 65534,\n      \"sourceRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"icmp\"\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/global/firewalls/default-allow-icmp\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"3858465039765617455\",\n      \"creationTimestamp\": \"2025-03-13T18:26:24.809-07:00\",\n      \"name\": \"default-allow-internal\",\n      \"description\": \"Allow internal traffic on the default network\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/global/networks/default\",\n      \"priority\": 65534,\n      \"sourceRanges\": [\n        \"10.128.0.0/9\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"0-65535\"\n          ]\n        },\n        {\n          \"IPProtocol\": \"udp\",\n          \"ports\": [\n            \"0-65535\"\n          ]\n        },\n        {\n          \"IPProtocol\": \"icmp\"\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/global/firewalls/default-allow-internal\"\n    }\n  ],\n  \"firewallPolicys\": [\n    {\n      \"name\": \"902824820698\",\n      \"type\": \"HIERARCHY\",\n      \"shortName\": \"default-firewall-policy\",\n      \"displayName\": \"default-firewall-policy\",\n      \"rules\": [\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 0,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"34.168.226.0/26\",\n              \"34.102.114.64/26\",\n              \"34.16.224.64/26\",\n              \"34.48.81.64/26\",\n              \"34.168.146.160/27\",\n              \"34.16.224.160/27\",\n              \"34.82.66.0/24\",\n              \"34.82.90.0/24\",\n              \"34.82.98.0/24\",\n              \"34.82.160.0/24\",\n              \"34.82.166.128/25\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"tcp\"\n              },\n              {\n                \"ipProtocol\": \"udp\"\n              }\n            ]\n          },\n          \"action\": \"allow\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 1,\n          \"match\": {\n            \"destIpRanges\": [\n              \"34.83.160.25/32\",\n              \"34.125.160.60/32\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"tcp\"\n              },\n              {\n                \"ipProtocol\": \"udp\"\n              }\n            ]\n          },\n          \"action\": \"allow\",\n          \"direction\": \"EGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 600,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"35.235.240.0/20\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"tcp\",\n                \"ports\": [\n                  \"22\",\n                  \"3389\",\n                  \"5900-5901\"\n                ]\n              }\n            ]\n          },\n          \"action\": \"allow\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 601,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"35.191.0.0/16\",\n              \"130.211.0.0/22\",\n              \"209.85.152.0/22\",\n              \"209.85.204.0/22\",\n              \"169.254.169.254\",\n              \"108.170.220.0/23\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 602,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"10.0.0.0/8\",\n              \"172.16.0.0/12\",\n              \"192.168.0.0/16\",\n              \"100.64.0.0/10\",\n              \"240.0.0.0/4\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 603,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"35.199.192.0/19\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"tcp\",\n                \"ports\": [\n                  \"53\",\n                  \"80\",\n                  \"443\"\n                ]\n              },\n              {\n                \"ipProtocol\": \"udp\",\n                \"ports\": [\n                  \"53\"\n                ]\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 604,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"107.178.230.64/26\",\n              \"35.199.224.0/19\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"tcp\",\n                \"ports\": [\n                  \"667\"\n                ]\n              },\n              {\n                \"ipProtocol\": \"udp\",\n                \"ports\": [\n                  \"665-666\"\n                ]\n              },\n              {\n                \"ipProtocol\": \"icmp\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 700,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"0.0.0.0/0\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"deny\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 2147483644,\n          \"match\": {\n            \"destIpRanges\": [\n              \"::/0\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"EGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 2147483645,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"::/0\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 2147483646,\n          \"match\": {\n            \"destIpRanges\": [\n              \"0.0.0.0/0\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"EGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 2147483647,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"0.0.0.0/0\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gce5/json-dumps/compute-instances-aggregated.json",
    "content": "{\n  \"kind\": \"compute#instanceAggregatedList\",\n  \"id\": \"projects/gcpdiag-gce5-aaaa/aggregated/instances\",\n  \"items\": {\n    \"zones/us-central1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-central1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-central1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central1-c\": {\n      \"instances\": [\n        {\n          \"kind\": \"compute#instance\",\n          \"id\": \"8891820476183371144\",\n          \"creationTimestamp\": \"2025-03-18T14:19:36.651-07:00\",\n          \"name\": \"apache-instance-3q8d\",\n          \"tags\": {\n            \"items\": [\n              \"apache-server\"\n            ],\n            \"fingerprint\": \"opKpmsJsdKI=\"\n          },\n          \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/machineTypes/e2-micro\",\n          \"status\": \"RUNNING\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\",\n          \"networkInterfaces\": [\n            {\n              \"kind\": \"compute#networkInterface\",\n              \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/global/networks/default\",\n              \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-central1/subnetworks/default\",\n              \"networkIP\": \"10.128.0.7\",\n              \"name\": \"nic0\",\n              \"accessConfigs\": [\n                {\n                  \"kind\": \"compute#accessConfig\",\n                  \"type\": \"ONE_TO_ONE_NAT\",\n                  \"name\": \"external-nat\",\n                  \"natIP\": \"35.239.101.3\",\n                  \"networkTier\": \"PREMIUM\"\n                }\n              ],\n              \"fingerprint\": \"d-G3Tu25ocs=\",\n              \"stackType\": \"IPV4_ONLY\"\n            }\n          ],\n          \"disks\": [\n            {\n              \"kind\": \"compute#attachedDisk\",\n              \"type\": \"PERSISTENT\",\n              \"mode\": \"READ_WRITE\",\n              \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/disks/apache-instance-3q8d\",\n              \"deviceName\": \"persistent-disk-0\",\n              \"index\": 0,\n              \"boot\": true,\n              \"autoDelete\": true,\n              \"licenses\": [\n                \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye\"\n              ],\n              \"interface\": \"SCSI\",\n              \"guestOsFeatures\": [\n                {\n                  \"type\": \"UEFI_COMPATIBLE\"\n                },\n                {\n                  \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n                },\n                {\n                  \"type\": \"GVNIC\"\n                }\n              ],\n              \"diskSizeGb\": \"10\",\n              \"architecture\": \"X86_64\"\n            }\n          ],\n          \"metadata\": {\n            \"kind\": \"compute#metadata\",\n            \"fingerprint\": \"EpKIun7XEOE=\",\n            \"items\": [\n              {\n                \"key\": \"instance-template\",\n                \"value\": \"projects/123456012345/global/instanceTemplates/apache-instance-template\"\n              },\n              {\n                \"key\": \"created-by\",\n                \"value\": \"projects/123456012345/zones/us-central1-c/instanceGroupManagers/apache-mig-timeout\"\n              }\n            ]\n          },\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/apache-instance-3q8d\",\n          \"scheduling\": {\n            \"onHostMaintenance\": \"MIGRATE\",\n            \"automaticRestart\": true,\n            \"preemptible\": false,\n            \"provisioningModel\": \"STANDARD\"\n          },\n          \"cpuPlatform\": \"Intel Broadwell\",\n          \"labels\": {\n            \"goog-terraform-provisioned\": \"true\"\n          },\n          \"labelFingerprint\": \"vezUS-42LLM=\",\n          \"startRestricted\": false,\n          \"deletionProtection\": false,\n          \"shieldedInstanceConfig\": {\n            \"enableSecureBoot\": false,\n            \"enableVtpm\": true,\n            \"enableIntegrityMonitoring\": true\n          },\n          \"shieldedInstanceIntegrityPolicy\": {\n            \"updateAutoLearnPolicy\": true\n          },\n          \"fingerprint\": \"MgWFnwgqN78=\",\n          \"lastStartTimestamp\": \"2025-03-18T14:19:48.045-07:00\",\n          \"satisfiesPzi\": true\n        },\n        {\n          \"kind\": \"compute#instance\",\n          \"id\": \"6200748239440076168\",\n          \"creationTimestamp\": \"2025-03-18T14:19:35.989-07:00\",\n          \"name\": \"apache-instance-7ssf\",\n          \"tags\": {\n            \"items\": [\n              \"apache-server\"\n            ],\n            \"fingerprint\": \"opKpmsJsdKI=\"\n          },\n          \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/machineTypes/e2-micro\",\n          \"status\": \"RUNNING\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\",\n          \"networkInterfaces\": [\n            {\n              \"kind\": \"compute#networkInterface\",\n              \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/global/networks/default\",\n              \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-central1/subnetworks/default\",\n              \"networkIP\": \"10.128.0.8\",\n              \"name\": \"nic0\",\n              \"accessConfigs\": [\n                {\n                  \"kind\": \"compute#accessConfig\",\n                  \"type\": \"ONE_TO_ONE_NAT\",\n                  \"name\": \"external-nat\",\n                  \"natIP\": \"35.226.46.168\",\n                  \"networkTier\": \"PREMIUM\"\n                }\n              ],\n              \"fingerprint\": \"xtgZpQpkv1Y=\",\n              \"stackType\": \"IPV4_ONLY\"\n            }\n          ],\n          \"disks\": [\n            {\n              \"kind\": \"compute#attachedDisk\",\n              \"type\": \"PERSISTENT\",\n              \"mode\": \"READ_WRITE\",\n              \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/disks/apache-instance-7ssf\",\n              \"deviceName\": \"persistent-disk-0\",\n              \"index\": 0,\n              \"boot\": true,\n              \"autoDelete\": true,\n              \"licenses\": [\n                \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye\"\n              ],\n              \"interface\": \"SCSI\",\n              \"guestOsFeatures\": [\n                {\n                  \"type\": \"UEFI_COMPATIBLE\"\n                },\n                {\n                  \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n                },\n                {\n                  \"type\": \"GVNIC\"\n                }\n              ],\n              \"diskSizeGb\": \"10\",\n              \"architecture\": \"X86_64\"\n            }\n          ],\n          \"metadata\": {\n            \"kind\": \"compute#metadata\",\n            \"fingerprint\": \"EpKIun7XEOE=\",\n            \"items\": [\n              {\n                \"key\": \"instance-template\",\n                \"value\": \"projects/123456012345/global/instanceTemplates/apache-instance-template\"\n              },\n              {\n                \"key\": \"created-by\",\n                \"value\": \"projects/123456012345/zones/us-central1-c/instanceGroupManagers/apache-mig-timeout\"\n              }\n            ]\n          },\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/apache-instance-7ssf\",\n          \"scheduling\": {\n            \"onHostMaintenance\": \"MIGRATE\",\n            \"automaticRestart\": true,\n            \"preemptible\": false,\n            \"provisioningModel\": \"STANDARD\"\n          },\n          \"cpuPlatform\": \"Intel Broadwell\",\n          \"labels\": {\n            \"goog-terraform-provisioned\": \"true\"\n          },\n          \"labelFingerprint\": \"vezUS-42LLM=\",\n          \"startRestricted\": false,\n          \"deletionProtection\": false,\n          \"shieldedInstanceConfig\": {\n            \"enableSecureBoot\": false,\n            \"enableVtpm\": true,\n            \"enableIntegrityMonitoring\": true\n          },\n          \"shieldedInstanceIntegrityPolicy\": {\n            \"updateAutoLearnPolicy\": true\n          },\n          \"fingerprint\": \"vC0nllWE4go=\",\n          \"lastStartTimestamp\": \"2025-03-18T17:50:20.481-07:00\",\n          \"lastStopTimestamp\": \"2025-03-18T17:50:08.144-07:00\",\n          \"satisfiesPzi\": true\n        },\n        {\n          \"kind\": \"compute#instance\",\n          \"id\": \"8124223607509638509\",\n          \"creationTimestamp\": \"2025-03-18T14:20:02.722-07:00\",\n          \"name\": \"shielded-vm-integrity-failure\",\n          \"tags\": {\n            \"fingerprint\": \"42WmSpB8rSM=\"\n          },\n          \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/machineTypes/f1-micro\",\n          \"status\": \"RUNNING\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\",\n          \"canIpForward\": false,\n          \"networkInterfaces\": [\n            {\n              \"kind\": \"compute#networkInterface\",\n              \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/global/networks/default\",\n              \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-central1/subnetworks/default\",\n              \"networkIP\": \"10.128.0.9\",\n              \"name\": \"nic0\",\n              \"accessConfigs\": [\n                {\n                  \"kind\": \"compute#accessConfig\",\n                  \"type\": \"ONE_TO_ONE_NAT\",\n                  \"name\": \"external-nat\",\n                  \"natIP\": \"34.171.224.128\",\n                  \"networkTier\": \"PREMIUM\"\n                }\n              ],\n              \"fingerprint\": \"C4Pud6UkwgI=\",\n              \"stackType\": \"IPV4_ONLY\"\n            }\n          ],\n          \"disks\": [\n            {\n              \"kind\": \"compute#attachedDisk\",\n              \"type\": \"PERSISTENT\",\n              \"mode\": \"READ_WRITE\",\n              \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/disks/shielded-vm-integrity-failure\",\n              \"deviceName\": \"persistent-disk-0\",\n              \"index\": 0,\n              \"boot\": true,\n              \"autoDelete\": true,\n              \"licenses\": [\n                \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-2204-lts\"\n              ],\n              \"interface\": \"SCSI\",\n              \"guestOsFeatures\": [\n                {\n                  \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n                },\n                {\n                  \"type\": \"SEV_CAPABLE\"\n                },\n                {\n                  \"type\": \"SEV_SNP_CAPABLE\"\n                },\n                {\n                  \"type\": \"SEV_LIVE_MIGRATABLE\"\n                },\n                {\n                  \"type\": \"SEV_LIVE_MIGRATABLE_V2\"\n                },\n                {\n                  \"type\": \"IDPF\"\n                },\n                {\n                  \"type\": \"TDX_CAPABLE\"\n                },\n                {\n                  \"type\": \"UEFI_COMPATIBLE\"\n                },\n                {\n                  \"type\": \"GVNIC\"\n                }\n              ],\n              \"diskSizeGb\": \"10\",\n              \"shieldedInstanceInitialState\": {\n                \"dbxs\": [\n                  {\n                    \"content\": \"2gcDBhMRFQAAAAAAAAAAABENAAAAAvEOndKvSt9o7kmKqTR9N1ZlpzCCDPUCAQExDzANBglghkgBZQMEAgEFADALBgkqhkiG9w0BBwGgggsIMIIFGDCCBACgAwIBAgITMwAAABNryScg3e1ZiAAAAAAAEzANBgkqhkiG9w0BAQsFADCBgDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEqMCgGA1UEAxMhTWljcm9zb2Z0IENvcnBvcmF0aW9uIEtFSyBDQSAyMDExMB4XDTE2MDEwNjE4MzQxNVoXDTE3MDQwNjE4MzQxNVowgZUxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xDTALBgNVBAsTBE1PUFIxMDAuBgNVBAMTJ01pY3Jvc29mdCBXaW5kb3dzIFVFRkkgS2V5IEV4Y2hhbmdlIEtleTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKXiCkZgbboTnVZnS1h_JbnlcVst9wtFK8NQjTpeB9wirml3h-fzi8vzki0hSNBD2Dg49lGEvs4egyowmTsLu1TnBUH1f_Hi8Noa7fKXV6F93qYrTPajx5v9L7NedplWnMEPsRvJrQdrysTZwtoXMLYDhc8bQHI5nlJDfgqrB8JiC4A3vL9i19lkQOTq4PZb5AcVcE0wlG7lR_btoQN0g5B4_7pI2S_9mU1PXr1NBSEl48Kl4cJwO2GyvOVvxQ6wUSFTExmCBKrT3LnPU5lZY68n3MpZ5VY4skhrEt2dyf5bZNzkYTTouxC0n37OrMbGGq3tpv7JDD6E_Rfqua3dXYECAwEAAaOCAXIwggFuMBQGA1UdJQQNMAsGCSsGAQQBgjdPATAdBgNVHQ4EFgQUVsJIppTfox2XYoAJRIlnxAUOy2owUQYDVR0RBEowSKRGMEQxDTALBgNVBAsTBE1PUFIxMzAxBgNVBAUTKjMxNjMxKzJjNDU2Y2JjLTA1NDItNDdkOS05OWU1LWQzOWI4MTVjNTczZTAfBgNVHSMEGDAWgBRi_EPNoD6ky2cS0lvZVax7zLaKXzBTBgNVHR8ETDBKMEigRqBEhkJodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NybC9NaWNDb3JLRUtDQTIwMTFfMjAxMS0wNi0yNC5jcmwwYAYIKwYBBQUHAQEEVDBSMFAGCCsGAQUFBzAChkRodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY0NvcktFS0NBMjAxMV8yMDExLTA2LTI0LmNydDAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQCGjTFLjxsKmyLESJueg0S2Cp8N7MOq2IALsitZHwfYw2jMhY9b9kmKvIdSqVna1moZ6_zJSOS_JY6HkWZr6dDJe9Lj7xiW_e4qPP-KDrCVb02vBnK4EktVjTdJpyMhxBMdXUcq1eGl6518oCkQ27tu0-WZjaWEVsEY_gpQj0ye2UA4HYUYgJlpT24oJRi7TeQ03Nebb-ZrUkbf9uxl0OVV_mg2R5FDwOc3REoRAgv5jnw6X7ha5hlRCl2cLF27TFrFIRQQT4eSM33eDiitXXpYmD13jqKeHhLVXr07QSwqvKe1o1UYokJngP0pTwoDnt2qRuLnZ71jw732dSPN9B57MIIF6DCCA9CgAwIBAgIKYQrRiAAAAAAAAzANBgkqhkiG9w0BAQsFADCBkTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE7MDkGA1UEAxMyTWljcm9zb2Z0IENvcnBvcmF0aW9uIFRoaXJkIFBhcnR5IE1hcmtldHBsYWNlIFJvb3QwHhcNMTEwNjI0MjA0MTI5WhcNMjYwNjI0MjA1MTI5WjCBgDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEqMCgGA1UEAxMhTWljcm9zb2Z0IENvcnBvcmF0aW9uIEtFSyBDQSAyMDExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxOi1ir-tVyawJsPq5_tXekQCXQcN2krldCrmsA_sbevsf7njWmMyfBEXTw7jC6c4FZOOxvXghLGamyzn9beR1gnh4sAEqKwwHN9I8wZQmmSnUX_IhU-PIIbO_i_hn_-CwO3pzc70U2piOgtDueIl_f4F-dTEFKsR4iOJjXC3pB1N7K7lnPoWwtfBy9ToxC_lme4kiwPsjfKL6sNK-0MREgt-tUeSbNzmBInr9TME6xABKnHl-YMTPP8lCS9odkb_uk--3K1xKliq-w7SeT3km2U7zCkqn_xyWaLrrpLv9jUTgMYC7ORfzJ12ze9jksGveUCEeYd_41Ko6J17B2mPFQIDAQABo4IBTzCCAUswEAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFGL8Q82gPqTLZxLSW9lVrHvMtopfMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsGA1UdDwQEAwIBhjAPBgNVHRMBAf8EBTADAQH_MB8GA1UdIwQYMBaAFEVmUkPhflgRv9ZOniNVCDs6ImqoMFwGA1UdHwRVMFMwUaBPoE2GS2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY0NvclRoaVBhck1hclJvb18yMDEwLTEwLTA1LmNybDBgBggrBgEFBQcBAQRUMFIwUAYIKwYBBQUHMAKGRGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljQ29yVGhpUGFyTWFyUm9vXzIwMTAtMTAtMDUuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQDUhIj1FJQYAsoqPPsqkhwM16DR8ehSZqjuorV1epAAqi2kdlrqebe5N2pRexBk9uFk8gJnvveoG3i9us6IWGQM1lfIGaNfBdbbxtBpzkhLMrfrXdIw9cD1uLp4B6Mr_pvbNFaE7ILKrkElcJxr6f6QD9eWH-XnlB-yKgyNS_8oKRB799d8pdF2uQXIee0PkJKcwv7fb35sD3vUwUXdNFGWOQ_lXlbYGAWW9AemQrOgd_0IGfJxVsyfhiOkh8um_Vh-1GlnFZF-gfJ_E-UNi4o8h4Tr4869Q-WtLYSTjmorWnxE-lKqgcgtHLvgUt8AEfiaPcFgsOEztaOI0WUZChrnrHykwYKHTjixLw3FFIdv_Y0uvDm25-bD4OTNJ4TvlELvKYuQRkE7gRtn2PlDWWXLDbz9AJJP9HU7p6kk_FBBQHngLU8Kaid2blLtlml7rw_3hwXQRcKtUxSBH_swBKo3NmHaSmkbNNho7dYCz2yUDNPPbCJ5rbHwvAOiRmCpxAfCIYLx_fLoeTJgv9ispSIUS8rB2EvrfT9XNbLmT3W0sGADIlOukXkd1ptBHxWGVHCy3g01D3ywNHK6l2A78HnrorIcXaIWuIfF6Rv2tZclbzif45H6inmYw2kOt6McIAWX-MoUrgDXxPPAFBB1azSgG7WZYPNcsMVXTjbSMoS_njGCAcQwggHAAgEBMIGYMIGAMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSowKAYDVQQDEyFNaWNyb3NvZnQgQ29ycG9yYXRpb24gS0VLIENBIDIwMTECEzMAAAATa8knIN3tWYgAAAAAABMwDQYJYIZIAWUDBAIBBQAwDQYJKoZIhvcNAQEBBQAEggEAhabaxRIJ7nUZ-m__mIG0lII6yD-lxoeI8S83ZKTP8Qx5h5asySWl7420eGhna7zyaVRvVVIhkjOMIfcKr29LgzQpYDqPUc8aYAdGCsZKZGmHCMjEulnq5TDK79GKinzZfb2sAWXEJ68N8oNnY7faBKjHjmmJbAEz8ufE4DijgJ_NBov2xmhTZyNHQ7pB1iCdrEUGObzdJc0Qtmh3CNOEcmH0ukd8sTHE9acBBTFHS8dvreR_sP7dXClZJbJiWAFKvQn3EjCTiYizkZ4I_5xiqjHELht_ORQKN-Hnoqnl4kcRINhZRV7JlgAQDlBJLv3OTjShRO_ZWCdcu7PtwhweiSYWxMFMUJJArKlB-TaTQyiMDgAAAAAAADAAAAC9mvp3WQMyTb1gKPTnj3hLgLTZaTG_DQL9kaYeGdFPHaRS5m2yQIyoYE1BH5Jlnwq9mvp3WQMyTb1gKPTnj3hL9S-Do_qc-9aSD3IoJNvkA0U00luFByRrO5V9rG4bznq9mvp3WQMyTb1gKPTnj3hLxdnYoYbiyC0Jr6oqb38uc4cNPmT3LE4I72d5aoQPD729mvp3WQMyTb1gKPTnj3hLNjOE0U0fLgt4FWJkhMRZrVejGO9DliZgSNBYxaGbv3a9mvp3WQMyTb1gKPTnj3hLGuyEuEtsZaUSIKm-cYGWUjAhDWLW0zxImZxrKVorCga9mvp3WQMyTb1gKPTnj3hL5spo6UFGYprwP2nC-G5r72L5MLN8b7zIeLeN-YwDNOW9mvp3WQMyTb1gKPTnj3hLw6maRg2kZKBXw1htg8719K4ItxA5ee2JMnQt8O1TDGa9mvp3WQMyTb1gKPTnj3hLWPuUGu-VollDs_tfJRCg3z_kTFjJXgq4BIcpdWirl3G9mvp3WQMyTb1gKPTnj3hLU5HDovsRIQKmqh7cJa534Z9dbwnNCe6yUJkiv81Zkuq9mvp3WQMyTb1gKPTnj3hL1iYVfh1qcYvBJKuNony7ZQcsoDp7ayV9vcu9YPZe89G9mvp3WQMyTb1gKPTnj3hL0GPsKPZ-ulPxZC2_ff8zxqMq3YafYBP-Fi4sMvHL5W29mvp3WQMyTb1gKPTnj3hLKcbrUrQ8OqGLLNjtbqhgfO88-uG6_hFldVzy5hSESkS9mvp3WQMyTb1gKPTnj3hLkPvnDmnWM0CNPhcMaDLbstIJ4CclJ9-2PUnSlXKm9Ey9mvp3WQMyTb1gKPTnj3hLB17qBgWJVIugYLL-7RDaPCDH_psXzQJrlOimg7gRUji9mvp3WQMyTb1gKPTnj3hLB-bGqFhkb7HvxnkD_iixFgEfI2f-kua-KzaZnv850J69mvp3WQMyTb1gKPTnj3hLCd9fTlESCOx4uW0S0IEl_bYDho3jn29yknhSWZtlnCa9mvp3WQMyTb1gKPTnj3hLC7tDktqseribMKSsZXUxuXv6qwT5Cw2v5fm265CgY3S9mvp3WQMyTb1gKPTnj3hLDBiTOXYt8zarPdAGpGPfcVo5z7D0kkZcYA5sa9e9iYy9mvp3WQMyTb1gKPTnj3hLDQ2-ym8p7KBvMxp9cuSISxIJf7NImDoqFKDXP08QFA-9mvp3WQMyTb1gKPTnj3hLDcnz-5mWIUjDyoM2MnWNPtT8jQsAB7lbMeZSjyrNW_y9mvp3WQMyTb1gKPTnj3hLEG-s6s_s_U4wO3T0gKCAmOLQgCuTb47HdM4h8xaGaJy9mvp3WQMyTb1gKPTnj3hLF046C1tDxqYHu9NATwU0Hj3POWJnzpT4tQ4uI6nakgy9mvp3WQMyTb1gKPTnj3hLGDM0Kf8FYu2flwM-EUjc7uUtvi5JbVQQtc_WyGTS0Q-9mvp3WQMyTb1gKPTnj3hLK5nPJkIukv42X79Lww0nCGye4Ut6b_9E-y9rkAFpmTm9mvp3WQMyTb1gKPTnj3hLK78sp7jx2R8n7lK2-ypd0Em4WiubUpxdZmIGgQSwVfi9mvp3WQMyTb1gKPTnj3hLLHPZMyW6bcvlidSkxjxbk1VZ75L78FDtUMTiCFIG8X29mvp3WQMyTb1gKPTnj3hLLnCRZ4am93NRH6cYH6sPHXC1V8YyLqkjsqjTuStRr329mvp3WQMyTb1gKPTnj3hLMGYo-lR3MFcoukpGfefQOHpU9WnTdp_OXnXsidKNFZO9mvp3WQMyTb1gKPTnj3hLNgjtuvWtD0GkFKF3er8vr15nAzRnXsOZXmk1gp4MqtK9mvp3WQMyTb1gKPTnj3hLOEHSITaNFYPXXAoC5iFgOU1sTgpnYLb2B7kDYryFWwK9mvp3WQMyTb1gKPTnj3hLP86bn98-8J1UUrD5XuSBwrfwbXQ6c3lxVY5wE2rOPnO9mvp3WQMyTb1gKPTnj3hLQ5fayoOef2MHfLUMkt9DvC0vsqj1nyb8eg5L1Nl1FpK9mvp3WQMyTb1gKPTnj3hLR8wIYSfiBpqG4Dpr7yzUEPjFWm1r2zYhaMMbLOMqWt-9mvp3WQMyTb1gKPTnj3hLUYgx_nOCtRTQPhXGISKLirZUeb0Mv6PFwdD0jZwwYTW9mvp3WQMyTb1gKPTnj3hLWulJ6ohV65PkOdvGW9ouQoUsL99nifoUZzbjw0EPK1y9mvp3WQMyTb1gKPTnj3hLax0TgHjkQYqmjet7s14GYJLPR57rjOTNEufQcsy0L2a9mvp3WQMyTb1gKPTnj3hLbIhUR43VWeKTUbgmwGy4v-8rlK01ODWHctGT-C7RyhG9mvp3WQMyTb1gKPTnj3hLbxQo_3HJ2w7Vrx8ue7_Lq2R8wmXd9bKTzbYm9Qo6eF69mvp3WQMyTb1gKPTnj3hLcfKQb9IiSX5Uo0ZiqySX_MgQIHcP9RNo6ePZv8v9Y3W9mvp3WQMyTb1gKPTnj3hLcms-tlQEajDz-D2bls4D9nDpqAbRcIoDceYtxJ0sI8G9mvp3WQMyTb1gKPTnj3hLcuC9GGfPXZ1WqxWK3zvdvIK_MqjYqh2MXi9t8pQo1ti9mvp3WQMyTb1gKPTnj3hLeCevmTYs-vBxfa3ksb_gQ4rRccFa3cJIt1v4yqRLssW9mvp3WQMyTb1gKPTnj3hLgai5ZbuE04drlCmpVIHMlVMYz6oUEtgIyKM7_TP_8OS9mvp3WQMyTb1gKPTnj3hLgts7zrT2CEPOnZfD0YfNm1lBzT3oEA5YbyvaVjdXX2e9mvp3WQMyTb1gKPTnj3hLiVqXhfYXyh1-1E_BoUcLcfPxIjhi2f-dzDri35IWPa-9mvp3WQMyTb1gKPTnj3hLitZIWfGVtfWNr6qUC2phZ6zWeohuj0aTZBdyIcVZRbm9mvp3WQMyTb1gKPTnj3hLi_Q0tJ4AzPcVAqLNkAhlywHsOz2gPDW-UF_fe9Vj9SG9mvp3WQMyTb1gKPTnj3hLjY6iic_nChwHq3NlyyjuUe3TPPJQbeiI-63WDr-ASBy9mvp3WQMyTb1gKPTnj3hLmZjTY8SRvha9dLoQuU2SkQAWEXNv3KZDo2ZkvA8xWkK9mvp3WQMyTb1gKPTnj3hLnkppFzFhaC5V_ej-9WDriOwf_tyvBAAfZsDK9weytzS9mvp3WQMyTb1gKPTnj3hLprUVHzZV06KvDUcnWXlr5KQgDlSVp9hpdUxISIV0CKe9mvp3WQMyTb1gKPTnj3hLp_MvUI1OsP6tmgh--U7RugrsXeb372_wpiuTvt9dRY29mvp3WQMyTb1gKPTnj3hLrWgm4ZRtJtPq82hciNl9hd47Tcs9DuKugccFYNE8VyC9mvp3WQMyTb1gKPTnj3hLruuuMVEnEnPtlaouZxE57TGphWcwOjMimPg3CanVWqG9mvp3WQMyTb1gKPTnj3hLr-IDCvt9LNoT-fozOgLjT2dRr-wRsBDbzUQf30xAArO9mvp3WQMyTb1gKPTnj3hLtU8e5jZjH61oBY07CTcDGsG5DMsXBio5HMpor9vkDVW9mvp3WQMyTb1gKPTnj3hLuPB42YOiSsQzIWOTiDUUzZMsM68Y591wiEyCNfQnVza9mvp3WQMyTb1gKPTnj3hLuXoIiQWcA1_x1UtttTsRuXZmaNn5VSR8AosoN9egTNm9mvp3WQMyTb1gKPTnj3hLvIemaOgZZkictQjugFGDwZ5qzSTPF3mcoGLS44TaDqe9mvp3WQMyTb1gKPTnj3hLxAm9rEd1rdjbkqoitbcY-4yUoUYsH-mkFrldijOIwvy9mvp3WQMyTb1gKPTnj3hLxhfBqLHuKoEcKLWoG0yD18mLWwwnKB1hAgfr5pLCln-9mvp3WQMyTb1gKPTnj3hLyQ8zZhe45_mDl1QTyZfxC3PrJn_YoQy5472_xmer24u9mvp3WQMyTb1gKPTnj3hLy2uFi0DToJh2WBW1ksFRSklgT6_WCBnaiNenbpd4_ve9mvp3WQMyTb1gKPTnj3hLzjv6vlnWfOisjf1KFvfEPvnCJFE_vGVZV9c1-in1QM69mvp3WQMyTb1gKPTnj3hL2MvrlzX1Zys2fk-WzcdJaWFdFwdK6WxyTULOAhb48_q9mvp3WQMyTb1gKPTnj3hL6Swi6ztWQtZcHsLK8kfSWUc47rt_s4QaRJVvWeKw0fq9mvp3WQMyTb1gKPTnj3hL_d1uPSnqhMd0Pa1KG9vHALX-wbOR-TJAkIasxx3W29i9mvp3WQMyTb1gKPTnj3hL_mOoT3gsydP88sz5_BH70Ddgh4dY0mKF7RJmm9xubQG9mvp3WQMyTb1gKPTnj3hL_s-yMtEumUttSF0scWdyiqVSWYStXKYedRYiHweaFDa9mvp3WQMyTb1gKPTnj3hLyhcdYUqNfhIck5SM0P5V05mB-dEaqW4DRQpBUifCxlu9mvp3WQMyTb1gKPTnj3hLVbmbDeU9vP5IWqnHN88_thbvPZH6tZmqfKsZ7adjtbq9mvp3WQMyTb1gKPTnj3hLd90ZD6MNiP9eOwEaCuYeYgl4DBMLU17Lh-bwiIoLay-9mvp3WQMyTb1gKPTnj3hLyDyxOSKtmfVgdEZ13TfMlNytWh_Lpkcv7jQRcdk56IS9mvp3WQMyTb1gKPTnj3hLOwKHUz4Mw9DsGqgjy_CpQarYchV50cSZgC3Rw6Y2uKm9mvp3WQMyTb1gKPTnj3hLk5ru9PX6UeIzQMPy5JBIzohyUmr991LDp_Oj8ryfYEm9mvp3WQMyTb1gKPTnj3hLZFdb2RJ4mi4UrVb2NB9Sr2v4DPlEAHhZdenwTi1k10W9mvp3WQMyTb1gKPTnj3hLRcfIrnUKz7tI_DdSfWQS3WRNrtiRPM2KJMlNhWln344=\",\n                    \"fileType\": \"BIN\"\n                  }\n                ]\n              },\n              \"architecture\": \"X86_64\"\n            }\n          ],\n          \"metadata\": {\n            \"kind\": \"compute#metadata\",\n            \"fingerprint\": \"rrJS6tNt0Po=\",\n            \"items\": [\n              {\n                \"key\": \"startup-script\",\n                \"value\": \"#! /bin/bash\\napt-get upgrade -y\\nupdate-grub\\nreboot\\n\"\n              }\n            ]\n          },\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/shielded-vm-integrity-failure\",\n          \"scheduling\": {\n            \"onHostMaintenance\": \"MIGRATE\",\n            \"automaticRestart\": true,\n            \"preemptible\": false,\n            \"provisioningModel\": \"STANDARD\"\n          },\n          \"cpuPlatform\": \"Intel Haswell\",\n          \"labels\": {\n            \"goog-terraform-provisioned\": \"true\"\n          },\n          \"labelFingerprint\": \"vezUS-42LLM=\",\n          \"startRestricted\": false,\n          \"deletionProtection\": false,\n          \"resourcePolicies\": [\n            \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-central1/resourcePolicies/gce-policy\"\n          ],\n          \"shieldedInstanceConfig\": {\n            \"enableSecureBoot\": true,\n            \"enableVtpm\": true,\n            \"enableIntegrityMonitoring\": true\n          },\n          \"shieldedInstanceIntegrityPolicy\": {\n            \"updateAutoLearnPolicy\": true\n          },\n          \"fingerprint\": \"T0PHmApawds=\",\n          \"lastStartTimestamp\": \"2025-03-18T14:20:16.562-07:00\",\n          \"satisfiesPzi\": true\n        },\n        {\n          \"kind\": \"compute#instance\",\n          \"id\": \"2093000891450668968\",\n          \"creationTimestamp\": \"2025-03-13T18:41:28.579-07:00\",\n          \"name\": \"spot-vm-termination\",\n          \"tags\": {\n            \"fingerprint\": \"42WmSpB8rSM=\"\n          },\n          \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/machineTypes/f1-micro\",\n          \"status\": \"TERMINATED\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\",\n          \"canIpForward\": false,\n          \"networkInterfaces\": [\n            {\n              \"kind\": \"compute#networkInterface\",\n              \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/global/networks/default\",\n              \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-central1/subnetworks/default\",\n              \"networkIP\": \"10.128.0.3\",\n              \"name\": \"nic0\",\n              \"accessConfigs\": [\n                {\n                  \"kind\": \"compute#accessConfig\",\n                  \"type\": \"ONE_TO_ONE_NAT\",\n                  \"name\": \"external-nat\",\n                  \"networkTier\": \"PREMIUM\"\n                }\n              ],\n              \"fingerprint\": \"txXtyRD3s-g=\",\n              \"stackType\": \"IPV4_ONLY\"\n            }\n          ],\n          \"disks\": [\n            {\n              \"kind\": \"compute#attachedDisk\",\n              \"type\": \"PERSISTENT\",\n              \"mode\": \"READ_WRITE\",\n              \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/disks/spot-vm-termination\",\n              \"deviceName\": \"persistent-disk-0\",\n              \"index\": 0,\n              \"boot\": true,\n              \"autoDelete\": true,\n              \"licenses\": [\n                \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye\"\n              ],\n              \"interface\": \"SCSI\",\n              \"guestOsFeatures\": [\n                {\n                  \"type\": \"UEFI_COMPATIBLE\"\n                },\n                {\n                  \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n                },\n                {\n                  \"type\": \"GVNIC\"\n                }\n              ],\n              \"diskSizeGb\": \"10\",\n              \"architecture\": \"X86_64\"\n            }\n          ],\n          \"metadata\": {\n            \"kind\": \"compute#metadata\",\n            \"fingerprint\": \"X1EKTyO9S0E=\"\n          },\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"scheduling\": {\n            \"onHostMaintenance\": \"TERMINATE\",\n            \"automaticRestart\": false,\n            \"preemptible\": true,\n            \"provisioningModel\": \"SPOT\",\n            \"instanceTerminationAction\": \"STOP\"\n          },\n          \"cpuPlatform\": \"Unknown CPU Platform\",\n          \"labels\": {\n            \"goog-terraform-provisioned\": \"true\"\n          },\n          \"labelFingerprint\": \"vezUS-42LLM=\",\n          \"startRestricted\": false,\n          \"deletionProtection\": false,\n          \"resourcePolicies\": [\n            \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-central1/resourcePolicies/gce-policy-stop-and-start\"\n          ],\n          \"shieldedInstanceConfig\": {\n            \"enableSecureBoot\": false,\n            \"enableVtpm\": true,\n            \"enableIntegrityMonitoring\": true\n          },\n          \"shieldedInstanceIntegrityPolicy\": {\n            \"updateAutoLearnPolicy\": true\n          },\n          \"fingerprint\": \"YfYS4a6ebEk=\",\n          \"lastStartTimestamp\": \"2025-03-18T18:00:14.989-07:00\",\n          \"lastStopTimestamp\": \"2025-03-18T18:05:51.397-07:00\",\n          \"satisfiesPzi\": false\n        },\n        {\n          \"kind\": \"compute#instance\",\n          \"id\": \"3670725117245009111\",\n          \"creationTimestamp\": \"2025-03-13T19:19:36.228-07:00\",\n          \"name\": \"start-and-stop-vm\",\n          \"tags\": {\n            \"fingerprint\": \"42WmSpB8rSM=\"\n          },\n          \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/machineTypes/f1-micro\",\n          \"status\": \"TERMINATED\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\",\n          \"canIpForward\": false,\n          \"networkInterfaces\": [\n            {\n              \"kind\": \"compute#networkInterface\",\n              \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/global/networks/default\",\n              \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-central1/subnetworks/default\",\n              \"networkIP\": \"10.128.0.5\",\n              \"name\": \"nic0\",\n              \"accessConfigs\": [\n                {\n                  \"kind\": \"compute#accessConfig\",\n                  \"type\": \"ONE_TO_ONE_NAT\",\n                  \"name\": \"external-nat\",\n                  \"networkTier\": \"PREMIUM\"\n                }\n              ],\n              \"fingerprint\": \"ZT1V7Kk9Jws=\",\n              \"stackType\": \"IPV4_ONLY\"\n            }\n          ],\n          \"disks\": [\n            {\n              \"kind\": \"compute#attachedDisk\",\n              \"type\": \"PERSISTENT\",\n              \"mode\": \"READ_WRITE\",\n              \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/disks/start-and-stop-vm\",\n              \"deviceName\": \"persistent-disk-0\",\n              \"index\": 0,\n              \"boot\": true,\n              \"autoDelete\": true,\n              \"licenses\": [\n                \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye\"\n              ],\n              \"interface\": \"SCSI\",\n              \"guestOsFeatures\": [\n                {\n                  \"type\": \"UEFI_COMPATIBLE\"\n                },\n                {\n                  \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n                },\n                {\n                  \"type\": \"GVNIC\"\n                }\n              ],\n              \"diskSizeGb\": \"10\",\n              \"architecture\": \"X86_64\"\n            }\n          ],\n          \"metadata\": {\n            \"kind\": \"compute#metadata\",\n            \"fingerprint\": \"X1EKTyO9S0E=\"\n          },\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"scheduling\": {\n            \"onHostMaintenance\": \"MIGRATE\",\n            \"automaticRestart\": true,\n            \"preemptible\": false,\n            \"provisioningModel\": \"STANDARD\"\n          },\n          \"cpuPlatform\": \"Unknown CPU Platform\",\n          \"labels\": {\n            \"goog-terraform-provisioned\": \"true\"\n          },\n          \"labelFingerprint\": \"vezUS-42LLM=\",\n          \"startRestricted\": false,\n          \"deletionProtection\": false,\n          \"resourcePolicies\": [\n            \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-central1/resourcePolicies/gce-policy-stop-and-start\"\n          ],\n          \"shieldedInstanceConfig\": {\n            \"enableSecureBoot\": false,\n            \"enableVtpm\": true,\n            \"enableIntegrityMonitoring\": true\n          },\n          \"shieldedInstanceIntegrityPolicy\": {\n            \"updateAutoLearnPolicy\": true\n          },\n          \"fingerprint\": \"db7l2mt-4p8=\",\n          \"lastStartTimestamp\": \"2025-03-18T18:00:15.366-07:00\",\n          \"lastStopTimestamp\": \"2025-03-18T18:05:50.737-07:00\",\n          \"satisfiesPzi\": true\n        }\n      ]\n    },\n    \"zones/us-central1-f\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-central1-f'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central1-f\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west1-d\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west1-d'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west1-d\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-east1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-east1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-east1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east1-d\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east1-d'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east1-d\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-southeast1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-southeast1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-southeast1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east4-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east4-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east4-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east4-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east4-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east4-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east4-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east4-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east4-c\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/australia-southeast1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/australia-southeast1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/australia-southeast1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west3-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west3-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west3-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west3-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west3-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west3-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west3-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west3-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west3-b\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-east1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/southamerica-east1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-east1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-east1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/southamerica-east1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-east1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-east1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/southamerica-east1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-east1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-south1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-south1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-south1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-northeast1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-northeast1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-northeast1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west4-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west4-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west4-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west4-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west4-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west4-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west4-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west4-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west4-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-north1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-north1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-north1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-east2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-east2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-east2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west6-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west6-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west6-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west6-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west6-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west6-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west6-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west6-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west6-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast3-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast3-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast3-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast3-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast3-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast3-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast3-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast3-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast3-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west3-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west3-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west3-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west3-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west3-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west3-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west3-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west3-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west3-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west4-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west4-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west4-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west4-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west4-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west4-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west4-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west4-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west4-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-southeast2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-southeast2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-southeast2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-central2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-central2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-central2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-central2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-central2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-central2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-central2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-central2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-central2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-northeast2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-northeast2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-northeast2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-south2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-south2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-south2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/australia-southeast2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/australia-southeast2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/australia-southeast2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-west1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/southamerica-west1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-west1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-west1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/southamerica-west1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-west1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-west1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/southamerica-west1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-west1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west8-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west8-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west8-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west8-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west8-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west8-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west8-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west8-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west8-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west9-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west9-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west9-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west9-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west9-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west9-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west9-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west9-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west9-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east5-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east5-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east5-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east5-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east5-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east5-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east5-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east5-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east5-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-southwest1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-southwest1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-southwest1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-southwest1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-southwest1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-southwest1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-southwest1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-southwest1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-southwest1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-south1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-south1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-south1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-south1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-south1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-south1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-south1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-south1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-south1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-west1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-west1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-west1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-west1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-west1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-west1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/me-west1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-west1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-west1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west12-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west12-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west12-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west12-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west12-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west12-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west12-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west12-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west12-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-central1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-central1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-central1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west10-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west10-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west10-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west10-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west10-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west10-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west10-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west10-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west10-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-central2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-central2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-central2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/africa-south1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/africa-south1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/africa-south1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/africa-south1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/africa-south1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/africa-south1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/africa-south1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/africa-south1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/africa-south1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-south1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-south1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-south1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-south1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-south1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-south1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-south1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-south1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-south1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-north2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-north2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-north2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north2-b\"\n          }\n        ]\n      }\n    }\n  },\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/aggregated/instances\"\n}\n"
  },
  {
    "path": "test-data/gce5/json-dumps/compute-instances-europe-west2-b.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gce5-aaaa/zones/europe-west2-b/instances\",\n  \"kind\": \"compute#instanceList\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west2-b/instances\"\n}\n"
  },
  {
    "path": "test-data/gce5/json-dumps/compute-instances-us-central1-c.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances\",\n  \"items\": [\n    {\n      \"cpuPlatform\": \"Intel Broadwell\",\n      \"creationTimestamp\": \"2025-03-18T14:19:36.651-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"architecture\": \"X86_64\",\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"10\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/disks/apache-instance-3q8d\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"8891820476183371144\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"vezUS-42LLM=\",\n      \"labels\": {\n        \"goog-terraform-provisioned\": \"true\"\n      },\n      \"lastStartTimestamp\": \"2025-03-18T14:19:48.045-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/machineTypes/e2-micro\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"instance-template\",\n            \"value\": \"projects/123456012345/global/instanceTemplates/apache-instance-template\"\n          },\n          {\n            \"key\": \"created-by\",\n            \"value\": \"projects/123456012345/zones/us-central1-c/instanceGroupManagers/apache-mig-timeout\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"apache-instance-3q8d\",\n      \"networkInterfaces\": [\n        {\n          \"accessConfigs\": [\n            {\n              \"kind\": \"compute#accessConfig\",\n              \"name\": \"external-nat\",\n              \"natIP\": \"35.239.101.3\",\n              \"networkTier\": \"PREMIUM\",\n              \"type\": \"ONE_TO_ONE_NAT\"\n            }\n          ],\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/global/networks/default\",\n          \"networkIP\": \"10.128.0.7\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-central1/subnetworks/default\"\n        }\n      ],\n      \"satisfiesPzi\": true,\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/apache-instance-3q8d\",\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"apache-server\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n    },\n    {\n      \"cpuPlatform\": \"Intel Broadwell\",\n      \"creationTimestamp\": \"2025-03-18T14:19:35.989-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"architecture\": \"X86_64\",\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"10\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/disks/apache-instance-7ssf\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"6200748239440076168\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"vezUS-42LLM=\",\n      \"labels\": {\n        \"goog-terraform-provisioned\": \"true\"\n      },\n      \"lastStartTimestamp\": \"2025-03-18T19:52:50.405-07:00\",\n      \"lastStopTimestamp\": \"2025-03-18T19:52:35.171-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/machineTypes/e2-micro\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"instance-template\",\n            \"value\": \"projects/123456012345/global/instanceTemplates/apache-instance-template\"\n          },\n          {\n            \"key\": \"created-by\",\n            \"value\": \"projects/123456012345/zones/us-central1-c/instanceGroupManagers/apache-mig-timeout\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"apache-instance-7ssf\",\n      \"networkInterfaces\": [\n        {\n          \"accessConfigs\": [\n            {\n              \"kind\": \"compute#accessConfig\",\n              \"name\": \"external-nat\",\n              \"natIP\": \"35.226.46.168\",\n              \"networkTier\": \"PREMIUM\",\n              \"type\": \"ONE_TO_ONE_NAT\"\n            }\n          ],\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/global/networks/default\",\n          \"networkIP\": \"10.128.0.8\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-central1/subnetworks/default\"\n        }\n      ],\n      \"satisfiesPzi\": true,\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/apache-instance-7ssf\",\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"apache-server\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n    },\n    {\n      \"canIpForward\": false,\n      \"cpuPlatform\": \"Intel Haswell\",\n      \"creationTimestamp\": \"2025-03-18T14:20:02.722-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"architecture\": \"X86_64\",\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"10\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            },\n            {\n              \"type\": \"SEV_SNP_CAPABLE\"\n            },\n            {\n              \"type\": \"SEV_LIVE_MIGRATABLE\"\n            },\n            {\n              \"type\": \"SEV_LIVE_MIGRATABLE_V2\"\n            },\n            {\n              \"type\": \"IDPF\"\n            },\n            {\n              \"type\": \"TDX_CAPABLE\"\n            },\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-2204-lts\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"shieldedInstanceInitialState\": {\n            \"dbxs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"BIN\"\n              }\n            ]\n          },\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/disks/shielded-vm-integrity-failure\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"8124223607509638509\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"vezUS-42LLM=\",\n      \"labels\": {\n        \"goog-terraform-provisioned\": \"true\"\n      },\n      \"lastStartTimestamp\": \"2025-03-18T14:20:16.562-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/machineTypes/f1-micro\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"startup-script\",\n            \"value\": \"#! /bin/bash\\napt-get upgrade -y\\nupdate-grub\\nreboot\\n\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"shielded-vm-integrity-failure\",\n      \"networkInterfaces\": [\n        {\n          \"accessConfigs\": [\n            {\n              \"kind\": \"compute#accessConfig\",\n              \"name\": \"external-nat\",\n              \"natIP\": \"34.171.224.128\",\n              \"networkTier\": \"PREMIUM\",\n              \"type\": \"ONE_TO_ONE_NAT\"\n            }\n          ],\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/global/networks/default\",\n          \"networkIP\": \"10.128.0.9\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-central1/subnetworks/default\"\n        }\n      ],\n      \"resourcePolicies\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-central1/resourcePolicies/gce-policy\"\n      ],\n      \"satisfiesPzi\": true,\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/shielded-vm-integrity-failure\",\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": true,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\"\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n    }\n  ],\n  \"kind\": \"compute#instanceList\",\n  \"nextPageToken\": \"ClIIwpj9u5aVjAM6RwoCGAMKAyDSDwoCGAIKByDDx9_j9RYKAhgHCh8qHXNoaWVsZGVkLXZtLWludGVncml0eS1mYWlsdXJlCgog7brRy7vKwt9w\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances\"\n}\n"
  },
  {
    "path": "test-data/gce5/json-dumps/compute-migs-aggregated.json",
    "content": "{\n  \"kind\": \"compute#instanceGroupManagerAggregatedList\",\n  \"id\": \"projects/gcpdiag-gce5-aaaa/aggregated/instanceGroupManagers\",\n  \"items\": {\n    \"regions/us-central1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-central1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-central1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-west1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-west1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-west1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west1\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-east1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/asia-east1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-east1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-east1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-east1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-east1\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-northeast1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/asia-northeast1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-northeast1\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-southeast1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/asia-southeast1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-southeast1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-east4\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-east4'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-east4\"\n          }\n        ]\n      }\n    },\n    \"regions/australia-southeast1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/australia-southeast1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/australia-southeast1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-west2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west2\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west3\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-west3'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west3\"\n          }\n        ]\n      }\n    },\n    \"regions/southamerica-east1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/southamerica-east1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/southamerica-east1\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-south1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/asia-south1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-south1\"\n          }\n        ]\n      }\n    },\n    \"regions/northamerica-northeast1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/northamerica-northeast1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/northamerica-northeast1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west4\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-west4'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west4\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-north1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-north1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-north1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-west2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-west2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west2\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-east2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/asia-east2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-east2\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west6\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-west6'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west6\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-northeast2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/asia-northeast2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-northeast2\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-northeast3\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/asia-northeast3'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-northeast3\"\n          }\n        ]\n      }\n    },\n    \"regions/us-west3\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-west3'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west3\"\n          }\n        ]\n      }\n    },\n    \"regions/us-west4\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-west4'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west4\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-southeast2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/asia-southeast2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-southeast2\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-central2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-central2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-central2\"\n          }\n        ]\n      }\n    },\n    \"regions/northamerica-northeast2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/northamerica-northeast2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/northamerica-northeast2\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-south2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/asia-south2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-south2\"\n          }\n        ]\n      }\n    },\n    \"regions/australia-southeast2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/australia-southeast2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/australia-southeast2\"\n          }\n        ]\n      }\n    },\n    \"regions/southamerica-west1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/southamerica-west1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/southamerica-west1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west8\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-west8'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west8\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west9\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-west9'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west9\"\n          }\n        ]\n      }\n    },\n    \"regions/us-east5\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-east5'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-east5\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-southwest1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-southwest1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-southwest1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-south1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-south1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-south1\"\n          }\n        ]\n      }\n    },\n    \"regions/me-west1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/me-west1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/me-west1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west12\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-west12'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west12\"\n          }\n        ]\n      }\n    },\n    \"regions/me-central1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/me-central1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/me-central1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west10\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-west10'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west10\"\n          }\n        ]\n      }\n    },\n    \"regions/me-central2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/me-central2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/me-central2\"\n          }\n        ]\n      }\n    },\n    \"regions/africa-south1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/africa-south1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/africa-south1\"\n          }\n        ]\n      }\n    },\n    \"regions/northamerica-south1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/northamerica-south1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/northamerica-south1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-north2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-north2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-north2\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-central1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-central1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central1-c\": {\n      \"instanceGroupManagers\": [\n        {\n          \"kind\": \"compute#instanceGroupManager\",\n          \"id\": \"9072206937951854043\",\n          \"creationTimestamp\": \"2025-03-18T14:18:44.828-07:00\",\n          \"name\": \"apache-mig-timeout\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\",\n          \"instanceTemplate\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/global/instanceTemplates/apache-instance-template\",\n          \"versions\": [\n            {\n              \"instanceTemplate\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/global/instanceTemplates/apache-instance-template\",\n              \"targetSize\": {\n                \"calculated\": 2\n              }\n            }\n          ],\n          \"instanceGroup\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instanceGroups/apache-mig-timeout\",\n          \"baseInstanceName\": \"apache-instance\",\n          \"fingerprint\": \"vsva0IqpYqA=\",\n          \"currentActions\": {\n            \"none\": 0,\n            \"creating\": 0,\n            \"creatingWithoutRetries\": 0,\n            \"verifying\": 2,\n            \"recreating\": 0,\n            \"deleting\": 0,\n            \"abandoning\": 0,\n            \"restarting\": 0,\n            \"refreshing\": 0,\n            \"suspending\": 0,\n            \"resuming\": 0,\n            \"stopping\": 0,\n            \"starting\": 0\n          },\n          \"status\": {\n            \"isStable\": false,\n            \"allInstancesConfig\": {\n              \"effective\": true\n            },\n            \"versionTarget\": {\n              \"isReached\": true\n            },\n            \"stateful\": {\n              \"hasStatefulConfig\": false,\n              \"perInstanceConfigs\": {\n                \"allEffective\": true\n              }\n            }\n          },\n          \"targetSize\": 2,\n          \"targetStoppedSize\": 0,\n          \"targetSuspendedSize\": 0,\n          \"listManagedInstancesResults\": \"PAGELESS\",\n          \"standbyPolicy\": {\n            \"mode\": \"MANUAL\"\n          },\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instanceGroupManagers/apache-mig-timeout\",\n          \"autoHealingPolicies\": [\n            {\n              \"healthCheck\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/global/healthChecks/apache-health-check\",\n              \"initialDelaySec\": 300\n            }\n          ],\n          \"updatePolicy\": {\n            \"type\": \"OPPORTUNISTIC\",\n            \"minimalAction\": \"REPLACE\",\n            \"maxSurge\": {\n              \"fixed\": 1,\n              \"calculated\": 1\n            },\n            \"maxUnavailable\": {\n              \"fixed\": 1,\n              \"calculated\": 1\n            },\n            \"replacementMethod\": \"SUBSTITUTE\"\n          },\n          \"instanceLifecyclePolicy\": {\n            \"forceUpdateOnRepair\": \"NO\",\n            \"defaultActionOnFailure\": \"REPAIR\"\n          },\n          \"satisfiesPzi\": true,\n          \"satisfiesPzs\": true\n        }\n      ]\n    },\n    \"zones/us-central1-f\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-central1-f'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central1-f\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west1-d\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west1-d'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west1-d\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-east1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-east1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-east1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east1-d\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east1-d'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east1-d\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-southeast1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-southeast1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-southeast1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east4-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east4-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east4-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east4-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east4-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east4-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east4-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east4-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east4-c\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/australia-southeast1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/australia-southeast1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/australia-southeast1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west3-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west3-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west3-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west3-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west3-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west3-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west3-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west3-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west3-b\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-east1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/southamerica-east1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-east1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-east1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/southamerica-east1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-east1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-east1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/southamerica-east1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-east1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-south1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-south1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-south1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-northeast1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-northeast1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-northeast1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west4-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west4-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west4-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west4-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west4-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west4-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west4-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west4-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west4-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-north1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-north1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-north1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-east2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-east2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-east2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west6-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west6-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west6-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west6-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west6-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west6-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west6-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west6-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west6-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast3-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast3-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast3-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast3-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast3-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast3-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast3-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast3-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast3-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west3-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west3-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west3-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west3-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west3-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west3-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west3-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west3-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west3-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west4-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west4-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west4-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west4-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west4-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west4-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west4-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west4-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west4-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-southeast2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-southeast2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-southeast2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-central2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-central2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-central2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-central2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-central2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-central2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-central2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-central2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-central2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-northeast2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-northeast2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-northeast2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-south2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-south2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-south2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/australia-southeast2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/australia-southeast2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/australia-southeast2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-west1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/southamerica-west1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-west1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-west1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/southamerica-west1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-west1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-west1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/southamerica-west1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-west1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west8-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west8-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west8-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west8-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west8-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west8-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west8-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west8-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west8-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west9-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west9-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west9-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west9-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west9-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west9-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west9-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west9-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west9-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east5-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east5-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east5-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east5-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east5-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east5-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east5-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east5-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east5-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-southwest1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-southwest1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-southwest1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-southwest1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-southwest1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-southwest1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-southwest1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-southwest1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-southwest1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-south1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-south1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-south1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-south1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-south1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-south1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-south1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-south1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-south1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-west1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-west1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-west1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-west1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-west1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-west1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/me-west1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-west1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-west1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west12-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west12-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west12-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west12-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west12-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west12-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west12-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west12-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west12-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-central1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-central1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-central1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west10-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west10-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west10-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west10-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west10-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west10-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west10-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west10-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west10-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-central2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-central2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-central2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/africa-south1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/africa-south1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/africa-south1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/africa-south1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/africa-south1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/africa-south1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/africa-south1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/africa-south1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/africa-south1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-south1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-south1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-south1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-south1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-south1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-south1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-south1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-south1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-south1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-north2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-north2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-north2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north2-b\"\n          }\n        ]\n      }\n    }\n  },\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/aggregated/instanceGroupManagers\"\n}\n"
  },
  {
    "path": "test-data/gce5/json-dumps/compute-network-default.json",
    "content": "{\n  \"autoCreateSubnetworks\": true,\n  \"creationTimestamp\": \"2025-03-13T18:25:47.320-07:00\",\n  \"description\": \"Default network for the project\",\n  \"id\": \"4268604901518359412\",\n  \"kind\": \"compute#network\",\n  \"name\": \"default\",\n  \"networkFirewallPolicyEnforcementOrder\": \"AFTER_CLASSIC_FIREWALL\",\n  \"routingConfig\": {\n    \"routingMode\": \"REGIONAL\"\n  },\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/global/networks/default\",\n  \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/global/networks/4268604901518359412\",\n  \"subnetworks\": [\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-northeast3/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/northamerica-south1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-southeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-east1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-east4/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-north2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-south1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-east2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west4/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-east1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/australia-southeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west12/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/me-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-east5/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west6/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west10/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-south1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/northamerica-northeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/me-central1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/africa-south1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/australia-southeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-south2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-west2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-central2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west3/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-southwest1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-northeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/southamerica-east1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-central1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west8/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/southamerica-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-northeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-west4/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-north1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-west3/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/northamerica-northeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-southeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west9/subnetworks/default\"\n  ]\n}\n"
  },
  {
    "path": "test-data/gce5/json-dumps/compute-project.json",
    "content": "{\n  \"cloudArmorTier\": \"CA_STANDARD\",\n  \"commonInstanceMetadata\": {\n    \"fingerprint\": \"ch8rUIV3aq8=\",\n    \"items\": [\n      {\n        \"key\": \"serial-port-logging-enable\",\n        \"value\": \"true\"\n      }\n    ],\n    \"kind\": \"compute#metadata\"\n  },\n  \"creationTimestamp\": \"2025-03-13T18:25:38.050-07:00\",\n  \"defaultNetworkTier\": \"PREMIUM\",\n  \"defaultServiceAccount\": \"123456012345-compute@developer.gserviceaccount.com\",\n  \"id\": \"6673406894989523838\",\n  \"kind\": \"compute#project\",\n  \"name\": \"gcpdiag-gce5-aaaa\",\n  \"quotas\": [\n    {\n      \"limit\": 10000,\n      \"metric\": \"SNAPSHOTS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 30,\n      \"metric\": \"NETWORKS\",\n      \"usage\": 1\n    },\n    {\n      \"limit\": 500,\n      \"metric\": \"FIREWALLS\",\n      \"usage\": 4\n    },\n    {\n      \"limit\": 5000,\n      \"metric\": \"IMAGES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 175,\n      \"metric\": \"STATIC_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 300,\n      \"metric\": \"ROUTES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"FORWARDING_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 500,\n      \"metric\": \"TARGET_POOLS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1000,\n      \"metric\": \"HEALTH_CHECKS\",\n      \"usage\": 1\n    },\n    {\n      \"limit\": 575,\n      \"metric\": \"IN_USE_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 500,\n      \"metric\": \"TARGET_INSTANCES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_HTTP_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"URL_MAPS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"BACKEND_SERVICES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1000,\n      \"metric\": \"INSTANCE_TEMPLATES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 50,\n      \"metric\": \"TARGET_VPN_GATEWAYS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"VPN_TUNNELS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 30,\n      \"metric\": \"BACKEND_BUCKETS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 20,\n      \"metric\": \"ROUTERS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_SSL_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_HTTPS_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"SSL_CERTIFICATES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 275,\n      \"metric\": \"SUBNETWORKS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_TCP_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 10,\n      \"metric\": \"SECURITY_POLICIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 200,\n      \"metric\": \"SECURITY_POLICY_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1000,\n      \"metric\": \"XPN_SERVICE_PROJECTS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"PACKET_MIRRORINGS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 2000,\n      \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 6,\n      \"metric\": \"INTERCONNECTS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"SSL_POLICIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 5000,\n      \"metric\": \"GLOBAL_INTERNAL_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 50,\n      \"metric\": \"VPN_GATEWAYS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 5000,\n      \"metric\": \"MACHINE_IMAGES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 20,\n      \"metric\": \"SECURITY_POLICY_CEVAL_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 50,\n      \"metric\": \"EXTERNAL_VPN_GATEWAYS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1,\n      \"metric\": \"PUBLIC_ADVERTISED_PREFIXES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 10,\n      \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1024,\n      \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 60,\n      \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"INTERNAL_TRAFFIC_DIRECTOR_FORWARDING_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"GLOBAL_EXTERNAL_MANAGED_FORWARDING_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"GLOBAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"GLOBAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"GLOBAL_EXTERNAL_PROXY_LB_BACKEND_SERVICES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 750,\n      \"metric\": \"GLOBAL_INTERNAL_TRAFFIC_DIRECTOR_BACKEND_SERVICES\",\n      \"usage\": 0\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa\",\n  \"vmDnsSetting\": \"GLOBAL_DEFAULT\",\n  \"xpnProjectStatus\": \"UNSPECIFIED_XPN_PROJECT_STATUS\"\n}\n"
  },
  {
    "path": "test-data/gce5/json-dumps/compute-regions.json",
    "content": "{\n  \"kind\": \"compute#regionList\",\n  \"id\": \"projects/gcpdiag-gce5-aaaa/regions\",\n  \"items\": [\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1610\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"africa-south1\",\n      \"description\": \"africa-south1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/africa-south1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/africa-south1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/africa-south1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 40,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/africa-south1\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1220\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east1\",\n      \"description\": \"asia-east1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-east1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-east1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-east1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 40,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-east1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1370\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east2\",\n      \"description\": \"asia-east2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-east2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-east2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-east2-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 40,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-east2\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1250\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast1\",\n      \"description\": \"asia-northeast1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-northeast1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-northeast1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-northeast1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 40,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-northeast1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1390\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast2\",\n      \"description\": \"asia-northeast2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-northeast2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-northeast2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-northeast2-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 750,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 40,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-northeast2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1410\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast3\",\n      \"description\": \"asia-northeast3\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-northeast3-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-northeast3-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-northeast3-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 40,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-northeast3\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1320\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south1\",\n      \"description\": \"asia-south1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-south1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-south1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-south1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 40,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-south1\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1470\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south2\",\n      \"description\": \"asia-south2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-south2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-south2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-south2-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 750,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 40,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-south2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1260\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast1\",\n      \"description\": \"asia-southeast1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-southeast1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-southeast1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-southeast1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 40,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-southeast1\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1440\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast2\",\n      \"description\": \"asia-southeast2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-southeast2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-southeast2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-southeast2-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 40,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-southeast2\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1280\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast1\",\n      \"description\": \"australia-southeast1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/australia-southeast1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/australia-southeast1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/australia-southeast1-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 40,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/australia-southeast1\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1480\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast2\",\n      \"description\": \"australia-southeast2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/australia-southeast2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/australia-southeast2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/australia-southeast2-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 750,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 40,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/australia-southeast2\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1450\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-central2\",\n      \"description\": \"europe-central2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-central2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-central2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-central2-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 750,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 40,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-central2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1350\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-north1\",\n      \"description\": \"europe-north1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-north1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-north1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-north1-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 40,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-north1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1650\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-north2\",\n      \"description\": \"europe-north2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-north2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-north2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-north2-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 40,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-north2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1540\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-southwest1\",\n      \"description\": \"europe-southwest1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-southwest1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-southwest1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-southwest1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 750,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 40,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-southwest1\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1100\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west1\",\n      \"description\": \"europe-west1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west1-d\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 40,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1590\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west10\",\n      \"description\": \"europe-west10\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west10-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west10-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west10-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 750,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 40,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west10\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1570\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west12\",\n      \"description\": \"europe-west12\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west12-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west12-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west12-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 750,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 40,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west12\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1290\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west2\",\n      \"description\": \"europe-west2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west2-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 40,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west2\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1300\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west3\",\n      \"description\": \"europe-west3\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west3-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west3-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west3-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 40,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west3\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1340\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west4\",\n      \"description\": \"europe-west4\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west4-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west4-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west4-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 40,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west4\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1380\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west6\",\n      \"description\": \"europe-west6\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west6-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west6-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west6-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 750,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 40,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west6\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1510\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west8\",\n      \"description\": \"europe-west8\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west8-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west8-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west8-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 750,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 40,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west8\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1520\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west9\",\n      \"description\": \"europe-west9\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west9-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west9-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west9-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 750,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 40,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west9\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1580\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central1\",\n      \"description\": \"me-central1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/me-central1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/me-central1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/me-central1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 750,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 40,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/me-central1\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1600\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central2\",\n      \"description\": \"me-central2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/me-central2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/me-central2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/me-central2-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 40,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/me-central2\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1560\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-west1\",\n      \"description\": \"me-west1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/me-west1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/me-west1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/me-west1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 750,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 40,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/me-west1\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1330\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast1\",\n      \"description\": \"northamerica-northeast1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/northamerica-northeast1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/northamerica-northeast1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/northamerica-northeast1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 40,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/northamerica-northeast1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1460\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast2\",\n      \"description\": \"northamerica-northeast2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/northamerica-northeast2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/northamerica-northeast2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/northamerica-northeast2-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 750,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 40,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/northamerica-northeast2\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1640\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-south1\",\n      \"description\": \"northamerica-south1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/northamerica-south1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/northamerica-south1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/northamerica-south1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 4096,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 40,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/northamerica-south1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1310\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-east1\",\n      \"description\": \"southamerica-east1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/southamerica-east1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/southamerica-east1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/southamerica-east1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 40,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/southamerica-east1\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1490\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-west1\",\n      \"description\": \"southamerica-west1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/southamerica-west1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/southamerica-west1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/southamerica-west1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 40,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/southamerica-west1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1000\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1\",\n      \"description\": \"us-central1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-f\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 3000,\n          \"usage\": 3\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 50\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 3\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 1\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 1\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 5\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 2\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 40,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-central1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1230\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east1\",\n      \"description\": \"us-east1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-east1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-east1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-east1-d\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 40,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-east1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1270\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east4\",\n      \"description\": \"us-east4\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-east4-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-east4-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-east4-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 40,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-east4\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1530\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east5\",\n      \"description\": \"us-east5\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-east5-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-east5-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-east5-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 750,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 40,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-east5\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1550\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-south1\",\n      \"description\": \"us-south1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-south1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-south1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-south1-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 750,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 40,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-south1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1210\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west1\",\n      \"description\": \"us-west1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-west1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-west1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-west1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 40,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-west1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1360\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west2\",\n      \"description\": \"us-west2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-west2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-west2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-west2-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 40,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-west2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1420\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west3\",\n      \"description\": \"us-west3\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-west3-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-west3-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-west3-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 40,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-west3\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1430\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west4\",\n      \"description\": \"us-west4\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-west4-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-west4-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-west4-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SNAPSHOTS\",\n          \"limit\": 10000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 512,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"VARIABLE_IPV6_PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 40,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-west4\",\n      \"supportsPzs\": false\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions\"\n}\n"
  },
  {
    "path": "test-data/gce5/json-dumps/compute-zones.json",
    "content": "{\n  \"kind\": \"compute#zoneList\",\n  \"id\": \"projects/gcpdiag-gce5-aaaa/zones\",\n  \"items\": [\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2231\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east1-b\",\n      \"description\": \"us-east1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-east1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Google Axion\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2233\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east1-c\",\n      \"description\": \"us-east1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-east1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Google Axion\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\",\n        \"AMD Turin\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2234\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east1-d\",\n      \"description\": \"us-east1-d\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-east1-d\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Google Axion\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2272\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east4-c\",\n      \"description\": \"us-east4-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-east4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-east4-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Granite Rapids\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Google Axion\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2271\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east4-b\",\n      \"description\": \"us-east4-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-east4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-east4-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Granite Rapids\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Google Axion\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\",\n        \"AMD Turin\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2270\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east4-a\",\n      \"description\": \"us-east4-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-east4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-east4-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Granite Rapids\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Google Axion\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\",\n        \"AMD Turin\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2002\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1-c\",\n      \"description\": \"us-central1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Granite Rapids\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Google Axion\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2000\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1-a\",\n      \"description\": \"us-central1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-a\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"NVIDIA Grace\",\n        \"Intel Granite Rapids\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Google Axion\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\",\n        \"AMD Turin\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2004\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1-f\",\n      \"description\": \"us-central1-f\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-f\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Granite Rapids\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2001\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1-b\",\n      \"description\": \"us-central1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-b\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Granite Rapids\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Google Axion\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\",\n        \"AMD Turin\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2211\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west1-b\",\n      \"description\": \"us-west1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-west1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2212\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west1-c\",\n      \"description\": \"us-west1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-west1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2210\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west1-a\",\n      \"description\": \"us-west1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-west1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Google Axion\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2342\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west4-a\",\n      \"description\": \"europe-west4-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west4-a\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Granite Rapids\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Google Axion\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\",\n        \"AMD Turin\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2341\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west4-b\",\n      \"description\": \"europe-west4-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west4-b\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Granite Rapids\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Google Axion\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\",\n        \"AMD Turin\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2340\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west4-c\",\n      \"description\": \"europe-west4-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west4-c\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Google Axion\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2101\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west1-b\",\n      \"description\": \"europe-west1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Google Axion\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2104\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west1-d\",\n      \"description\": \"europe-west1-d\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west1-d\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Google Axion\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2103\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west1-c\",\n      \"description\": \"europe-west1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Google Axion\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2300\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west3-c\",\n      \"description\": \"europe-west3-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west3-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Google Axion\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2301\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west3-a\",\n      \"description\": \"europe-west3-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west3-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Google Axion\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2302\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west3-b\",\n      \"description\": \"europe-west3-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west3-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Google Axion\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2292\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west2-c\",\n      \"description\": \"europe-west2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Google Axion\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2291\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west2-b\",\n      \"description\": \"europe-west2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Google Axion\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2290\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west2-a\",\n      \"description\": \"europe-west2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Google Axion\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2221\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east1-b\",\n      \"description\": \"asia-east1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-east1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Google Axion\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2220\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east1-a\",\n      \"description\": \"asia-east1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-east1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Google Axion\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2222\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east1-c\",\n      \"description\": \"asia-east1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-east1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Google Axion\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2261\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast1-b\",\n      \"description\": \"asia-southeast1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-southeast1-b\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Granite Rapids\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Google Axion\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\",\n        \"AMD Turin\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2260\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast1-a\",\n      \"description\": \"asia-southeast1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-southeast1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Granite Rapids\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Google Axion\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2262\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast1-c\",\n      \"description\": \"asia-southeast1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-southeast1-c\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Granite Rapids\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Google Axion\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\",\n        \"AMD Turin\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2251\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast1-b\",\n      \"description\": \"asia-northeast1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-northeast1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2252\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast1-c\",\n      \"description\": \"asia-northeast1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-northeast1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2250\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast1-a\",\n      \"description\": \"asia-northeast1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-northeast1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2322\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south1-c\",\n      \"description\": \"asia-south1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-south1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Google Axion\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2320\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south1-b\",\n      \"description\": \"asia-south1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-south1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Google Axion\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2321\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south1-a\",\n      \"description\": \"asia-south1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-south1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2282\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast1-b\",\n      \"description\": \"australia-southeast1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/australia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/australia-southeast1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2280\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast1-c\",\n      \"description\": \"australia-southeast1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/australia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/australia-southeast1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2281\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast1-a\",\n      \"description\": \"australia-southeast1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/australia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/australia-southeast1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2311\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-east1-b\",\n      \"description\": \"southamerica-east1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/southamerica-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/southamerica-east1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2312\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-east1-c\",\n      \"description\": \"southamerica-east1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/southamerica-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/southamerica-east1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2310\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-east1-a\",\n      \"description\": \"southamerica-east1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/southamerica-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/southamerica-east1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2611\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"africa-south1-a\",\n      \"description\": \"africa-south1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/africa-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/africa-south1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2610\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"africa-south1-b\",\n      \"description\": \"africa-south1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/africa-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/africa-south1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2612\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"africa-south1-c\",\n      \"description\": \"africa-south1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/africa-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/africa-south1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2372\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east2-a\",\n      \"description\": \"asia-east2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-east2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-east2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2371\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east2-b\",\n      \"description\": \"asia-east2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-east2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-east2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2370\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east2-c\",\n      \"description\": \"asia-east2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-east2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-east2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2392\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast2-a\",\n      \"description\": \"asia-northeast2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-northeast2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2390\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast2-b\",\n      \"description\": \"asia-northeast2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-northeast2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2391\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast2-c\",\n      \"description\": \"asia-northeast2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-northeast2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2410\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast3-a\",\n      \"description\": \"asia-northeast3-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-northeast3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-northeast3-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2412\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast3-b\",\n      \"description\": \"asia-northeast3-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-northeast3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-northeast3-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2411\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast3-c\",\n      \"description\": \"asia-northeast3-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-northeast3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-northeast3-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2470\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south2-a\",\n      \"description\": \"asia-south2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-south2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-south2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2472\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south2-b\",\n      \"description\": \"asia-south2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-south2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-south2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2471\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south2-c\",\n      \"description\": \"asia-south2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-south2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-south2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2440\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast2-a\",\n      \"description\": \"asia-southeast2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-southeast2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2442\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast2-b\",\n      \"description\": \"asia-southeast2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-southeast2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2441\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast2-c\",\n      \"description\": \"asia-southeast2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/asia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/asia-southeast2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2480\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast2-a\",\n      \"description\": \"australia-southeast2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/australia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/australia-southeast2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2482\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast2-b\",\n      \"description\": \"australia-southeast2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/australia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/australia-southeast2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2481\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast2-c\",\n      \"description\": \"australia-southeast2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/australia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/australia-southeast2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2452\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-central2-a\",\n      \"description\": \"europe-central2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-central2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-central2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2450\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-central2-b\",\n      \"description\": \"europe-central2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-central2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-central2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2451\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-central2-c\",\n      \"description\": \"europe-central2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-central2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-central2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2352\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-north1-a\",\n      \"description\": \"europe-north1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-north1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-north1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2350\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-north1-b\",\n      \"description\": \"europe-north1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-north1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-north1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2351\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-north1-c\",\n      \"description\": \"europe-north1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-north1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-north1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2651\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-north2-a\",\n      \"description\": \"europe-north2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-north2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-north2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2652\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-north2-b\",\n      \"description\": \"europe-north2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-north2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-north2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2650\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-north2-c\",\n      \"description\": \"europe-north2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-north2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-north2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2541\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-southwest1-a\",\n      \"description\": \"europe-southwest1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-southwest1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-southwest1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2540\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-southwest1-b\",\n      \"description\": \"europe-southwest1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-southwest1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-southwest1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2542\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-southwest1-c\",\n      \"description\": \"europe-southwest1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-southwest1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-southwest1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2591\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west10-a\",\n      \"description\": \"europe-west10-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west10\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west10-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2592\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west10-b\",\n      \"description\": \"europe-west10-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west10\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west10-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2590\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west10-c\",\n      \"description\": \"europe-west10-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west10\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west10-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2571\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west12-a\",\n      \"description\": \"europe-west12-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west12\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west12-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2572\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west12-b\",\n      \"description\": \"europe-west12-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west12\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west12-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2570\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west12-c\",\n      \"description\": \"europe-west12-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west12\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west12-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2382\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west6-a\",\n      \"description\": \"europe-west6-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west6\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west6-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2380\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west6-b\",\n      \"description\": \"europe-west6-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west6\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west6-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2381\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west6-c\",\n      \"description\": \"europe-west6-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west6\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west6-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2510\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west8-a\",\n      \"description\": \"europe-west8-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west8\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west8-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2511\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west8-b\",\n      \"description\": \"europe-west8-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west8\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west8-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2512\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west8-c\",\n      \"description\": \"europe-west8-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west8\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west8-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2521\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west9-a\",\n      \"description\": \"europe-west9-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west9\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west9-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2520\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west9-b\",\n      \"description\": \"europe-west9-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west9\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west9-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2522\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west9-c\",\n      \"description\": \"europe-west9-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/europe-west9\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/europe-west9-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2580\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central1-a\",\n      \"description\": \"me-central1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/me-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/me-central1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2581\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central1-b\",\n      \"description\": \"me-central1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/me-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/me-central1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2582\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central1-c\",\n      \"description\": \"me-central1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/me-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/me-central1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2601\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central2-a\",\n      \"description\": \"me-central2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/me-central2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/me-central2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2602\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central2-b\",\n      \"description\": \"me-central2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/me-central2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/me-central2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2600\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central2-c\",\n      \"description\": \"me-central2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/me-central2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/me-central2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2561\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-west1-a\",\n      \"description\": \"me-west1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/me-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/me-west1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2560\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-west1-b\",\n      \"description\": \"me-west1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/me-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/me-west1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2562\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-west1-c\",\n      \"description\": \"me-west1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/me-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/me-west1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2330\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast1-a\",\n      \"description\": \"northamerica-northeast1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/northamerica-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/northamerica-northeast1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2331\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast1-b\",\n      \"description\": \"northamerica-northeast1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/northamerica-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/northamerica-northeast1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2332\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast1-c\",\n      \"description\": \"northamerica-northeast1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/northamerica-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/northamerica-northeast1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2461\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast2-a\",\n      \"description\": \"northamerica-northeast2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/northamerica-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/northamerica-northeast2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2460\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast2-b\",\n      \"description\": \"northamerica-northeast2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/northamerica-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/northamerica-northeast2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2462\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast2-c\",\n      \"description\": \"northamerica-northeast2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/northamerica-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/northamerica-northeast2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2641\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-south1-a\",\n      \"description\": \"northamerica-south1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/northamerica-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/northamerica-south1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2640\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-south1-b\",\n      \"description\": \"northamerica-south1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/northamerica-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/northamerica-south1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2642\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-south1-c\",\n      \"description\": \"northamerica-south1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/northamerica-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/northamerica-south1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2490\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-west1-a\",\n      \"description\": \"southamerica-west1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/southamerica-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/southamerica-west1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2491\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-west1-b\",\n      \"description\": \"southamerica-west1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/southamerica-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/southamerica-west1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2492\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-west1-c\",\n      \"description\": \"southamerica-west1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/southamerica-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/southamerica-west1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2532\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east5-a\",\n      \"description\": \"us-east5-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-east5\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-east5-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2531\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east5-b\",\n      \"description\": \"us-east5-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-east5\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-east5-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2530\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east5-c\",\n      \"description\": \"us-east5-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-east5\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-east5-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2551\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-south1-a\",\n      \"description\": \"us-south1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-south1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2552\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-south1-b\",\n      \"description\": \"us-south1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-south1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2550\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-south1-c\",\n      \"description\": \"us-south1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-south1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2362\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west2-a\",\n      \"description\": \"us-west2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-west2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2361\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west2-b\",\n      \"description\": \"us-west2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-west2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2360\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west2-c\",\n      \"description\": \"us-west2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-west2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2420\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west3-a\",\n      \"description\": \"us-west3-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-west3-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2421\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west3-b\",\n      \"description\": \"us-west3-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-west3-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2422\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west3-c\",\n      \"description\": \"us-west3-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-west3-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2431\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west4-a\",\n      \"description\": \"us-west4-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-west4-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2432\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west4-b\",\n      \"description\": \"us-west4-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-west4-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"Intel Granite Rapids\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2430\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west4-c\",\n      \"description\": \"us-west4-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/regions/us-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-west4-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones\"\n}\n"
  },
  {
    "path": "test-data/gce5/json-dumps/global-operations.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gce5-aaaa/aggregated/operations\",\n  \"items\": {\n    \"global\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"global\"\n          }\n        ],\n        \"message\": \"No results for the scope 'global'.\"\n      }\n    },\n    \"regions/africa-south1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/africa-south1\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/africa-south1'.\"\n      }\n    },\n    \"regions/asia-east1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-east1\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/asia-east1'.\"\n      }\n    },\n    \"regions/asia-east2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-east2\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/asia-east2'.\"\n      }\n    },\n    \"regions/asia-northeast1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-northeast1\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/asia-northeast1'.\"\n      }\n    },\n    \"regions/asia-northeast2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-northeast2\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/asia-northeast2'.\"\n      }\n    },\n    \"regions/asia-northeast3\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-northeast3\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/asia-northeast3'.\"\n      }\n    },\n    \"regions/asia-south1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-south1\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/asia-south1'.\"\n      }\n    },\n    \"regions/asia-south2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-south2\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/asia-south2'.\"\n      }\n    },\n    \"regions/asia-southeast1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-southeast1\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/asia-southeast1'.\"\n      }\n    },\n    \"regions/asia-southeast2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-southeast2\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/asia-southeast2'.\"\n      }\n    },\n    \"regions/australia-southeast1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/australia-southeast1\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/australia-southeast1'.\"\n      }\n    },\n    \"regions/australia-southeast2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/australia-southeast2\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/australia-southeast2'.\"\n      }\n    },\n    \"regions/europe-central2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-central2\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/europe-central2'.\"\n      }\n    },\n    \"regions/europe-north1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-north1\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/europe-north1'.\"\n      }\n    },\n    \"regions/europe-north2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-north2\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/europe-north2'.\"\n      }\n    },\n    \"regions/europe-southwest1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-southwest1\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/europe-southwest1'.\"\n      }\n    },\n    \"regions/europe-west1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west1\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/europe-west1'.\"\n      }\n    },\n    \"regions/europe-west10\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west10\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/europe-west10'.\"\n      }\n    },\n    \"regions/europe-west12\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west12\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/europe-west12'.\"\n      }\n    },\n    \"regions/europe-west2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west2\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/europe-west2'.\"\n      }\n    },\n    \"regions/europe-west3\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west3\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/europe-west3'.\"\n      }\n    },\n    \"regions/europe-west4\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west4\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/europe-west4'.\"\n      }\n    },\n    \"regions/europe-west6\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west6\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/europe-west6'.\"\n      }\n    },\n    \"regions/europe-west8\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west8\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/europe-west8'.\"\n      }\n    },\n    \"regions/europe-west9\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west9\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/europe-west9'.\"\n      }\n    },\n    \"regions/me-central1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/me-central1\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/me-central1'.\"\n      }\n    },\n    \"regions/me-central2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/me-central2\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/me-central2'.\"\n      }\n    },\n    \"regions/me-west1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/me-west1\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/me-west1'.\"\n      }\n    },\n    \"regions/northamerica-northeast1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/northamerica-northeast1\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/northamerica-northeast1'.\"\n      }\n    },\n    \"regions/northamerica-northeast2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/northamerica-northeast2\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/northamerica-northeast2'.\"\n      }\n    },\n    \"regions/northamerica-south1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/northamerica-south1\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/northamerica-south1'.\"\n      }\n    },\n    \"regions/southamerica-east1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/southamerica-east1\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/southamerica-east1'.\"\n      }\n    },\n    \"regions/southamerica-west1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/southamerica-west1\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/southamerica-west1'.\"\n      }\n    },\n    \"regions/us-central1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-central1\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/us-central1'.\"\n      }\n    },\n    \"regions/us-east1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-east1\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/us-east1'.\"\n      }\n    },\n    \"regions/us-east4\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-east4\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/us-east4'.\"\n      }\n    },\n    \"regions/us-east5\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-east5\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/us-east5'.\"\n      }\n    },\n    \"regions/us-south1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-south1\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/us-south1'.\"\n      }\n    },\n    \"regions/us-west1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west1\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/us-west1'.\"\n      }\n    },\n    \"regions/us-west2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west2\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/us-west2'.\"\n      }\n    },\n    \"regions/us-west3\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west3\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/us-west3'.\"\n      }\n    },\n    \"regions/us-west4\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west4\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/us-west4'.\"\n      }\n    },\n    \"zones/africa-south1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/africa-south1-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/africa-south1-a'.\"\n      }\n    },\n    \"zones/africa-south1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/africa-south1-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/africa-south1-b'.\"\n      }\n    },\n    \"zones/africa-south1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/africa-south1-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/africa-south1-c'.\"\n      }\n    },\n    \"zones/asia-east1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east1-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-east1-a'.\"\n      }\n    },\n    \"zones/asia-east1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east1-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-east1-b'.\"\n      }\n    },\n    \"zones/asia-east1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east1-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-east1-c'.\"\n      }\n    },\n    \"zones/asia-east2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east2-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-east2-a'.\"\n      }\n    },\n    \"zones/asia-east2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east2-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-east2-b'.\"\n      }\n    },\n    \"zones/asia-east2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east2-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-east2-c'.\"\n      }\n    },\n    \"zones/asia-northeast1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast1-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-northeast1-a'.\"\n      }\n    },\n    \"zones/asia-northeast1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast1-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-northeast1-b'.\"\n      }\n    },\n    \"zones/asia-northeast1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast1-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-northeast1-c'.\"\n      }\n    },\n    \"zones/asia-northeast2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast2-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-northeast2-a'.\"\n      }\n    },\n    \"zones/asia-northeast2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast2-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-northeast2-b'.\"\n      }\n    },\n    \"zones/asia-northeast2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast2-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-northeast2-c'.\"\n      }\n    },\n    \"zones/asia-northeast3-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast3-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-northeast3-a'.\"\n      }\n    },\n    \"zones/asia-northeast3-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast3-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-northeast3-b'.\"\n      }\n    },\n    \"zones/asia-northeast3-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast3-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-northeast3-c'.\"\n      }\n    },\n    \"zones/asia-south1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south1-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-south1-a'.\"\n      }\n    },\n    \"zones/asia-south1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south1-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-south1-b'.\"\n      }\n    },\n    \"zones/asia-south1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south1-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-south1-c'.\"\n      }\n    },\n    \"zones/asia-south2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south2-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-south2-a'.\"\n      }\n    },\n    \"zones/asia-south2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south2-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-south2-b'.\"\n      }\n    },\n    \"zones/asia-south2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south2-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-south2-c'.\"\n      }\n    },\n    \"zones/asia-southeast1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast1-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-southeast1-a'.\"\n      }\n    },\n    \"zones/asia-southeast1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast1-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-southeast1-b'.\"\n      }\n    },\n    \"zones/asia-southeast1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast1-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-southeast1-c'.\"\n      }\n    },\n    \"zones/asia-southeast2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast2-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-southeast2-a'.\"\n      }\n    },\n    \"zones/asia-southeast2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast2-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-southeast2-b'.\"\n      }\n    },\n    \"zones/asia-southeast2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast2-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-southeast2-c'.\"\n      }\n    },\n    \"zones/australia-southeast1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast1-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/australia-southeast1-a'.\"\n      }\n    },\n    \"zones/australia-southeast1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast1-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/australia-southeast1-b'.\"\n      }\n    },\n    \"zones/australia-southeast1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast1-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/australia-southeast1-c'.\"\n      }\n    },\n    \"zones/australia-southeast2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast2-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/australia-southeast2-a'.\"\n      }\n    },\n    \"zones/australia-southeast2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast2-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/australia-southeast2-b'.\"\n      }\n    },\n    \"zones/australia-southeast2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast2-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/australia-southeast2-c'.\"\n      }\n    },\n    \"zones/europe-central2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-central2-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-central2-a'.\"\n      }\n    },\n    \"zones/europe-central2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-central2-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-central2-b'.\"\n      }\n    },\n    \"zones/europe-central2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-central2-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-central2-c'.\"\n      }\n    },\n    \"zones/europe-north1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north1-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-north1-a'.\"\n      }\n    },\n    \"zones/europe-north1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north1-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-north1-b'.\"\n      }\n    },\n    \"zones/europe-north1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north1-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-north1-c'.\"\n      }\n    },\n    \"zones/europe-north2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north2-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-north2-a'.\"\n      }\n    },\n    \"zones/europe-north2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north2-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-north2-b'.\"\n      }\n    },\n    \"zones/europe-north2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north2-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-north2-c'.\"\n      }\n    },\n    \"zones/europe-southwest1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-southwest1-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-southwest1-a'.\"\n      }\n    },\n    \"zones/europe-southwest1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-southwest1-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-southwest1-b'.\"\n      }\n    },\n    \"zones/europe-southwest1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-southwest1-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-southwest1-c'.\"\n      }\n    },\n    \"zones/europe-west1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west1-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west1-b'.\"\n      }\n    },\n    \"zones/europe-west1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west1-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west1-c'.\"\n      }\n    },\n    \"zones/europe-west1-d\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west1-d\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west1-d'.\"\n      }\n    },\n    \"zones/europe-west10-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west10-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west10-a'.\"\n      }\n    },\n    \"zones/europe-west10-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west10-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west10-b'.\"\n      }\n    },\n    \"zones/europe-west10-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west10-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west10-c'.\"\n      }\n    },\n    \"zones/europe-west12-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west12-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west12-a'.\"\n      }\n    },\n    \"zones/europe-west12-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west12-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west12-b'.\"\n      }\n    },\n    \"zones/europe-west12-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west12-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west12-c'.\"\n      }\n    },\n    \"zones/europe-west2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west2-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west2-a'.\"\n      }\n    },\n    \"zones/europe-west2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west2-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west2-b'.\"\n      }\n    },\n    \"zones/europe-west2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west2-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west2-c'.\"\n      }\n    },\n    \"zones/europe-west3-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west3-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west3-a'.\"\n      }\n    },\n    \"zones/europe-west3-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west3-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west3-b'.\"\n      }\n    },\n    \"zones/europe-west3-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west3-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west3-c'.\"\n      }\n    },\n    \"zones/europe-west4-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west4-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west4-a'.\"\n      }\n    },\n    \"zones/europe-west4-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west4-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west4-b'.\"\n      }\n    },\n    \"zones/europe-west4-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west4-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west4-c'.\"\n      }\n    },\n    \"zones/europe-west6-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west6-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west6-a'.\"\n      }\n    },\n    \"zones/europe-west6-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west6-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west6-b'.\"\n      }\n    },\n    \"zones/europe-west6-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west6-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west6-c'.\"\n      }\n    },\n    \"zones/europe-west8-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west8-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west8-a'.\"\n      }\n    },\n    \"zones/europe-west8-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west8-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west8-b'.\"\n      }\n    },\n    \"zones/europe-west8-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west8-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west8-c'.\"\n      }\n    },\n    \"zones/europe-west9-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west9-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west9-a'.\"\n      }\n    },\n    \"zones/europe-west9-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west9-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west9-b'.\"\n      }\n    },\n    \"zones/europe-west9-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west9-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west9-c'.\"\n      }\n    },\n    \"zones/me-central1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central1-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/me-central1-a'.\"\n      }\n    },\n    \"zones/me-central1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central1-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/me-central1-b'.\"\n      }\n    },\n    \"zones/me-central1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central1-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/me-central1-c'.\"\n      }\n    },\n    \"zones/me-central2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central2-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/me-central2-a'.\"\n      }\n    },\n    \"zones/me-central2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central2-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/me-central2-b'.\"\n      }\n    },\n    \"zones/me-central2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central2-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/me-central2-c'.\"\n      }\n    },\n    \"zones/me-west1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-west1-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/me-west1-a'.\"\n      }\n    },\n    \"zones/me-west1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-west1-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/me-west1-b'.\"\n      }\n    },\n    \"zones/me-west1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-west1-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/me-west1-c'.\"\n      }\n    },\n    \"zones/northamerica-northeast1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast1-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/northamerica-northeast1-a'.\"\n      }\n    },\n    \"zones/northamerica-northeast1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast1-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/northamerica-northeast1-b'.\"\n      }\n    },\n    \"zones/northamerica-northeast1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast1-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/northamerica-northeast1-c'.\"\n      }\n    },\n    \"zones/northamerica-northeast2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast2-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/northamerica-northeast2-a'.\"\n      }\n    },\n    \"zones/northamerica-northeast2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast2-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/northamerica-northeast2-b'.\"\n      }\n    },\n    \"zones/northamerica-northeast2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast2-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/northamerica-northeast2-c'.\"\n      }\n    },\n    \"zones/northamerica-south1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-south1-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/northamerica-south1-a'.\"\n      }\n    },\n    \"zones/northamerica-south1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-south1-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/northamerica-south1-b'.\"\n      }\n    },\n    \"zones/northamerica-south1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-south1-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/northamerica-south1-c'.\"\n      }\n    },\n    \"zones/southamerica-east1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-east1-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/southamerica-east1-a'.\"\n      }\n    },\n    \"zones/southamerica-east1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-east1-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/southamerica-east1-b'.\"\n      }\n    },\n    \"zones/southamerica-east1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-east1-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/southamerica-east1-c'.\"\n      }\n    },\n    \"zones/southamerica-west1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-west1-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/southamerica-west1-a'.\"\n      }\n    },\n    \"zones/southamerica-west1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-west1-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/southamerica-west1-b'.\"\n      }\n    },\n    \"zones/southamerica-west1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-west1-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/southamerica-west1-c'.\"\n      }\n    },\n    \"zones/us-central1-a\": {\n      \"operations\": [\n        {\n          \"clientOperationId\": \"82a1b31b-6373-3331-9530-2246f3476861\",\n          \"endTime\": \"2025-03-13T19:19:25.366-07:00\",\n          \"error\": {\n            \"errors\": [\n              {\n                \"code\": \"RESOURCE_NOT_FOUND\",\n                \"message\": \"The resource 'projects/gcpdiag-gce5-aaaa/zones/us-central1-a/instances/start-and-stop-vm' was not found\"\n              }\n            ]\n          },\n          \"httpErrorMessage\": \"NOT FOUND\",\n          \"httpErrorStatusCode\": 404,\n          \"id\": \"5142704469367991548\",\n          \"insertTime\": \"2025-03-13T19:18:59.172-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1741918738719-630440fa6229d-59e249ee-f410fbb2\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-a/operations/operation-1741918738719-630440fa6229d-59e249ee-f410fbb2\",\n          \"startTime\": \"2025-03-13T19:19:25.366-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2921551815730149289\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-a/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-a\"\n        }\n      ]\n    },\n    \"zones/us-central1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central1-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-central1-b'.\"\n      }\n    },\n    \"zones/us-central1-c\": {\n      \"operations\": [\n        {\n          \"clientOperationId\": \"903bfa26-1989-37e2-a172-4a6992307012\",\n          \"endTime\": \"2025-03-13T20:05:46.622-07:00\",\n          \"id\": \"7447814499462947379\",\n          \"insertTime\": \"2025-03-13T20:05:00.884-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1741921500429-63044b4427c45-4ad07f79-bcebd9f2\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741921500429-63044b4427c45-4ad07f79-bcebd9f2\",\n          \"startTime\": \"2025-03-13T20:05:00.908-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"c8885640-3ac2-380b-b907-f4c341fea0c2\",\n          \"endTime\": \"2025-03-13T20:05:48.204-07:00\",\n          \"id\": \"5950188132383990323\",\n          \"insertTime\": \"2025-03-13T20:05:00.873-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1741921500438-63044b442a161-1581efe9-6b85ea6d\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741921500438-63044b442a161-1581efe9-6b85ea6d\",\n          \"startTime\": \"2025-03-13T20:05:00.900-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"0aa9a16c-fdcb-3ee5-b842-55fddd8e5d57\",\n          \"endTime\": \"2025-03-13T21:05:53.126-07:00\",\n          \"id\": \"7276012521972962307\",\n          \"insertTime\": \"2025-03-13T21:05:00.787-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1741925100415-630458ad5e8ef-e6cdb23a-d7270dd9\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741925100415-630458ad5e8ef-e6cdb23a-d7270dd9\",\n          \"startTime\": \"2025-03-13T21:05:00.809-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"8972c0aa-3872-397f-b757-b2be5c868ec1\",\n          \"endTime\": \"2025-03-13T21:05:52.170-07:00\",\n          \"id\": \"8525480033785877507\",\n          \"insertTime\": \"2025-03-13T21:05:00.851-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1741925100428-630458ad61eb9-06ed216f-88ee8061\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741925100428-630458ad61eb9-06ed216f-88ee8061\",\n          \"startTime\": \"2025-03-13T21:05:00.870-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"ddc8b8e6-ce29-3b31-8e26-38621264f47b\",\n          \"endTime\": \"2025-03-13T22:05:58.826-07:00\",\n          \"id\": \"8310898683084146195\",\n          \"insertTime\": \"2025-03-13T22:05:00.879-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1741928700427-630466169bbda-2a0d8b7b-8a0e496c\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741928700427-630466169bbda-2a0d8b7b-8a0e496c\",\n          \"startTime\": \"2025-03-13T22:05:00.904-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"17592de3-9336-3cb4-833e-c35e85f48982\",\n          \"endTime\": \"2025-03-13T22:05:55.209-07:00\",\n          \"id\": \"5584102677899249171\",\n          \"insertTime\": \"2025-03-13T22:05:00.766-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1741928700427-630466169bcab-0bc18660-67d66c81\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741928700427-630466169bcab-0bc18660-67d66c81\",\n          \"startTime\": \"2025-03-13T22:05:00.795-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"e3532ee4-be53-3b65-9248-eeb978ab1912\",\n          \"endTime\": \"2025-03-13T23:05:51.767-07:00\",\n          \"id\": \"799716153348749795\",\n          \"insertTime\": \"2025-03-13T23:05:00.938-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1741932300442-6304737fd9c73-22b54b5f-272bb249\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741932300442-6304737fd9c73-22b54b5f-272bb249\",\n          \"startTime\": \"2025-03-13T23:05:00.960-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"c02206ce-51eb-3fac-867d-00b862477255\",\n          \"endTime\": \"2025-03-13T23:06:19.419-07:00\",\n          \"id\": \"3698190342181255651\",\n          \"insertTime\": \"2025-03-13T23:05:00.905-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1741932300447-6304737fdb055-892d663a-81cd5142\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741932300447-6304737fdb055-892d663a-81cd5142\",\n          \"startTime\": \"2025-03-13T23:05:00.936-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"0b219e6a-4799-39d8-a869-15ed9dcaed7c\",\n          \"endTime\": \"2025-03-14T00:05:56.364-07:00\",\n          \"id\": \"3354028140237057011\",\n          \"insertTime\": \"2025-03-14T00:05:00.911-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1741935900513-630480e925484-31433525-9e79b78f\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741935900513-630480e925484-31433525-9e79b78f\",\n          \"startTime\": \"2025-03-14T00:05:00.935-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"e9b91542-f376-3232-93af-1da5adfeef04\",\n          \"endTime\": \"2025-03-14T00:05:58.969-07:00\",\n          \"id\": \"4627895932489198579\",\n          \"insertTime\": \"2025-03-14T00:05:00.867-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1741935900515-630480e925b9f-d0a819ad-b11dfebe\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741935900515-630480e925b9f-d0a819ad-b11dfebe\",\n          \"startTime\": \"2025-03-14T00:05:00.890-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"dfc953d7-291e-3a18-9291-bae31b4aba65\",\n          \"endTime\": \"2025-03-14T01:05:57.236-07:00\",\n          \"id\": \"913323647555231171\",\n          \"insertTime\": \"2025-03-14T01:05:00.892-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1741939500493-63048e525a946-f2c0bb34-b74ab2fa\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741939500493-63048e525a946-f2c0bb34-b74ab2fa\",\n          \"startTime\": \"2025-03-14T01:05:00.916-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"51cc27a5-0e2e-3efb-a544-bf33103a7a7d\",\n          \"endTime\": \"2025-03-14T01:05:48.656-07:00\",\n          \"id\": \"8780992598912163266\",\n          \"insertTime\": \"2025-03-14T01:05:01.581-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1741939500603-63048e52756ab-62a16aec-19796c26\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741939500603-63048e52756ab-62a16aec-19796c26\",\n          \"startTime\": \"2025-03-14T01:05:01.729-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"0a17a771-91c0-35b1-86e0-7a8f0bc2b084\",\n          \"endTime\": \"2025-03-14T02:05:43.657-07:00\",\n          \"id\": \"5631482502250909650\",\n          \"insertTime\": \"2025-03-14T02:05:01.023-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1741943100499-63049bbb96793-2dcfcf22-8619106f\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741943100499-63049bbb96793-2dcfcf22-8619106f\",\n          \"startTime\": \"2025-03-14T02:05:01.051-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"fb45cee5-764d-3c3a-b0b9-552c82f4c201\",\n          \"endTime\": \"2025-03-14T02:05:46.884-07:00\",\n          \"id\": \"264451245584830419\",\n          \"insertTime\": \"2025-03-14T02:05:00.879-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1741943100506-63049bbb97fea-be0e51c2-8c7ba899\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741943100506-63049bbb97fea-be0e51c2-8c7ba899\",\n          \"startTime\": \"2025-03-14T02:05:00.902-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"47f5b7bb-70f4-30f2-899f-cc68f29f52aa\",\n          \"endTime\": \"2025-03-14T03:05:47.335-07:00\",\n          \"id\": \"4257542440153399715\",\n          \"insertTime\": \"2025-03-14T03:05:00.911-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1741946700445-6304a924c385a-0caf2cd2-64665c25\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741946700445-6304a924c385a-0caf2cd2-64665c25\",\n          \"startTime\": \"2025-03-14T03:05:00.943-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"ccdf5384-a8a6-3f3b-b261-a83cec2beefa\",\n          \"endTime\": \"2025-03-14T03:05:47.300-07:00\",\n          \"id\": \"9132074770559287715\",\n          \"insertTime\": \"2025-03-14T03:05:00.914-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1741946700453-6304a924c5785-95d7c140-241a5918\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741946700453-6304a924c5785-95d7c140-241a5918\",\n          \"startTime\": \"2025-03-14T03:05:00.949-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"71dd1d28-b0c0-341e-8051-81b760dd1374\",\n          \"endTime\": \"2025-03-14T04:05:47.252-07:00\",\n          \"id\": \"7933924133589070771\",\n          \"insertTime\": \"2025-03-14T04:05:00.767-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1741950300389-6304b68df00ff-2b415ed0-f0f3fe37\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741950300389-6304b68df00ff-2b415ed0-f0f3fe37\",\n          \"startTime\": \"2025-03-14T04:05:00.788-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"6cad29a8-baff-3e4e-adb6-88ead99bae9e\",\n          \"endTime\": \"2025-03-14T04:05:47.999-07:00\",\n          \"id\": \"204432423402451891\",\n          \"insertTime\": \"2025-03-14T04:05:00.774-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1741950300404-6304b68df3cfc-8153a63b-cd1dd2f9\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741950300404-6304b68df3cfc-8153a63b-cd1dd2f9\",\n          \"startTime\": \"2025-03-14T04:05:00.801-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"42948b78-801c-372e-81a7-4a962cfb15b7\",\n          \"endTime\": \"2025-03-14T05:05:48.551-07:00\",\n          \"id\": \"6534545542838068611\",\n          \"insertTime\": \"2025-03-14T05:05:00.866-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1741953900469-6304c3f73db41-149b271a-f73b7677\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741953900469-6304c3f73db41-149b271a-f73b7677\",\n          \"startTime\": \"2025-03-14T05:05:00.887-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"793b7985-6756-3a94-a0ed-9b64f848e27c\",\n          \"endTime\": \"2025-03-14T05:05:50.203-07:00\",\n          \"id\": \"7451319785481676163\",\n          \"insertTime\": \"2025-03-14T05:05:00.881-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1741953900489-6304c3f742a57-8f118b59-bc49ed23\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741953900489-6304c3f742a57-8f118b59-bc49ed23\",\n          \"startTime\": \"2025-03-14T05:05:00.907-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"4c7b6a41-83d6-30ef-ac37-de6ced77f699\",\n          \"endTime\": \"2025-03-14T06:05:49.308-07:00\",\n          \"id\": \"335893061571286931\",\n          \"insertTime\": \"2025-03-14T06:05:00.891-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1741957500475-6304d1607991c-cde382ce-f6582b69\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741957500475-6304d1607991c-cde382ce-f6582b69\",\n          \"startTime\": \"2025-03-14T06:05:00.913-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"0222ca14-fdfe-3d97-957c-b6e9c55f6d07\",\n          \"endTime\": \"2025-03-14T06:05:47.647-07:00\",\n          \"id\": \"6656091356378273683\",\n          \"insertTime\": \"2025-03-14T06:05:00.876-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1741957500497-6304d1607ef7c-99ec7090-dc77f09e\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741957500497-6304d1607ef7c-99ec7090-dc77f09e\",\n          \"startTime\": \"2025-03-14T06:05:00.897-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"d28236dc-b53a-3215-aeb7-fb6e44d05685\",\n          \"endTime\": \"2025-03-14T07:06:03.022-07:00\",\n          \"id\": \"4390548321655687523\",\n          \"insertTime\": \"2025-03-14T07:05:00.880-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1741961100460-6304dec9b0067-363b1249-e386d5e6\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741961100460-6304dec9b0067-363b1249-e386d5e6\",\n          \"startTime\": \"2025-03-14T07:05:00.937-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"ceb4e70b-7798-32dc-82fd-84d9b9663fcb\",\n          \"endTime\": \"2025-03-14T07:05:48.101-07:00\",\n          \"id\": \"4102537285188815203\",\n          \"insertTime\": \"2025-03-14T07:05:00.891-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1741961100467-6304dec9b1e0c-8e0c803e-e41013d7\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741961100467-6304dec9b1e0c-8e0c803e-e41013d7\",\n          \"startTime\": \"2025-03-14T07:05:00.921-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"c035e3bd-61e6-3e87-9288-d7511804b895\",\n          \"endTime\": \"2025-03-14T08:05:56.211-07:00\",\n          \"id\": \"8970635252074150770\",\n          \"insertTime\": \"2025-03-14T08:05:01.986-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1741964701486-6304ec33e4dc7-76d477a8-22e25a66\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741964701486-6304ec33e4dc7-76d477a8-22e25a66\",\n          \"startTime\": \"2025-03-14T08:05:02.020-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"f2b3dceb-f99e-3306-974d-7304c880ebb7\",\n          \"endTime\": \"2025-03-14T08:05:53.057-07:00\",\n          \"id\": \"5193768104349006706\",\n          \"insertTime\": \"2025-03-14T08:05:01.878-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1741964701487-6304ec33e5287-2dc89aad-9c882f06\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741964701487-6304ec33e5287-2dc89aad-9c882f06\",\n          \"startTime\": \"2025-03-14T08:05:01.904-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"d66cc275-7ff5-34ea-9a7f-69499343b78d\",\n          \"endTime\": \"2025-03-14T09:05:58.658-07:00\",\n          \"id\": \"6730176003181243715\",\n          \"insertTime\": \"2025-03-14T09:05:00.892-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1741968300482-6304f99c29ea5-abb45cf0-3493b639\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741968300482-6304f99c29ea5-abb45cf0-3493b639\",\n          \"startTime\": \"2025-03-14T09:05:00.923-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"e13282a5-d2d2-32bb-86cf-e2ad2036ceb4\",\n          \"endTime\": \"2025-03-14T09:05:58.338-07:00\",\n          \"id\": \"2034394323234712899\",\n          \"insertTime\": \"2025-03-14T09:05:00.889-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1741968300497-6304f99c2d97f-206f8b3f-73bf817c\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741968300497-6304f99c2d97f-206f8b3f-73bf817c\",\n          \"startTime\": \"2025-03-14T09:05:00.909-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"92fc4be3-fc50-353b-b757-1b2c3d59b924\",\n          \"endTime\": \"2025-03-14T10:05:51.804-07:00\",\n          \"id\": \"3425064683109474131\",\n          \"insertTime\": \"2025-03-14T10:05:00.922-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1741971900505-6305070569cf9-17f7ca6c-d01b0a59\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741971900505-6305070569cf9-17f7ca6c-d01b0a59\",\n          \"startTime\": \"2025-03-14T10:05:00.949-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"7b4b6ca6-845b-39ed-be32-bf28a778b8ca\",\n          \"endTime\": \"2025-03-14T10:05:52.380-07:00\",\n          \"id\": \"7360805411302793043\",\n          \"insertTime\": \"2025-03-14T10:05:00.872-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1741971900508-630507056a8db-0059bb38-79770f47\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741971900508-630507056a8db-0059bb38-79770f47\",\n          \"startTime\": \"2025-03-14T10:05:00.923-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"cd25aa5a-d98e-3647-87da-1b3d75d54d75\",\n          \"endTime\": \"2025-03-14T11:06:01.938-07:00\",\n          \"id\": \"1306212189047738659\",\n          \"insertTime\": \"2025-03-14T11:05:00.874-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1741975500472-6305146e9c018-f420ac1b-64131e4e\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741975500472-6305146e9c018-f420ac1b-64131e4e\",\n          \"startTime\": \"2025-03-14T11:05:00.902-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"cd68a406-7e80-31eb-91a4-e2a5a05e5dcb\",\n          \"endTime\": \"2025-03-14T11:05:47.903-07:00\",\n          \"id\": \"8901619439774585123\",\n          \"insertTime\": \"2025-03-14T11:05:00.923-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1741975500473-6305146e9c672-1a101a06-aa690df2\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741975500473-6305146e9c672-1a101a06-aa690df2\",\n          \"startTime\": \"2025-03-14T11:05:00.960-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"c260c91a-af75-305a-aac9-e2b4c18e6a6b\",\n          \"endTime\": \"2025-03-14T12:05:52.267-07:00\",\n          \"id\": \"5319631283439649586\",\n          \"insertTime\": \"2025-03-14T12:05:01.881-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1741979101449-630521d8c4ed2-44b710c8-1a232728\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741979101449-630521d8c4ed2-44b710c8-1a232728\",\n          \"startTime\": \"2025-03-14T12:05:01.914-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"fdc85d06-2656-30de-a2d5-8d4c967c5923\",\n          \"endTime\": \"2025-03-14T12:05:48.774-07:00\",\n          \"id\": \"355152730013680434\",\n          \"insertTime\": \"2025-03-14T12:05:01.906-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1741979101452-630521d8c5a92-5fc2248b-2a18500c\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741979101452-630521d8c5a92-5fc2248b-2a18500c\",\n          \"startTime\": \"2025-03-14T12:05:01.951-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"4ef5113f-df42-3f35-a958-9c883491bff7\",\n          \"endTime\": \"2025-03-14T13:05:51.411-07:00\",\n          \"id\": \"3589538265276429571\",\n          \"insertTime\": \"2025-03-14T13:05:00.890-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1741982700475-63052f4111511-8c720f82-8962eae0\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741982700475-63052f4111511-8c720f82-8962eae0\",\n          \"startTime\": \"2025-03-14T13:05:00.923-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"c8fe6f3c-cca5-3084-a4d7-71400e047c3b\",\n          \"endTime\": \"2025-03-14T13:05:53.375-07:00\",\n          \"id\": \"4046261247832306947\",\n          \"insertTime\": \"2025-03-14T13:05:00.893-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1741982700482-63052f4112ec9-5aaa15de-1b593d8e\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741982700482-63052f4112ec9-5aaa15de-1b593d8e\",\n          \"startTime\": \"2025-03-14T13:05:00.918-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"17926a3d-c1df-361a-bf7f-959af5acd048\",\n          \"endTime\": \"2025-03-14T14:05:49.725-07:00\",\n          \"id\": \"2553869483814496019\",\n          \"insertTime\": \"2025-03-14T14:05:00.773-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1741986300376-63053caa3368f-06e18d34-24f96aec\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741986300376-63053caa3368f-06e18d34-24f96aec\",\n          \"startTime\": \"2025-03-14T14:05:00.799-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"c0d42991-8f6b-3c58-8184-9d2a1a6d02af\",\n          \"endTime\": \"2025-03-14T14:07:00.393-07:00\",\n          \"id\": \"5277460008877500179\",\n          \"insertTime\": \"2025-03-14T14:05:00.788-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1741986300380-63053caa34510-cb70bd93-5b4fe45e\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741986300380-63053caa34510-cb70bd93-5b4fe45e\",\n          \"startTime\": \"2025-03-14T14:05:00.809-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"7c4e33fb-e0d6-3702-a09f-f2caf23c78e3\",\n          \"endTime\": \"2025-03-14T15:05:47.886-07:00\",\n          \"id\": \"5503736426677212899\",\n          \"insertTime\": \"2025-03-14T15:05:00.883-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1741989900504-63054a138cedf-3754de93-f606b617\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741989900504-63054a138cedf-3754de93-f606b617\",\n          \"startTime\": \"2025-03-14T15:05:00.909-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"28ac4a61-b401-3426-a201-4338ef492935\",\n          \"endTime\": \"2025-03-14T15:05:51.374-07:00\",\n          \"id\": \"8019628741396862691\",\n          \"insertTime\": \"2025-03-14T15:05:00.895-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1741989900508-63054a138dbc4-7952a289-b7124478\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741989900508-63054a138dbc4-7952a289-b7124478\",\n          \"startTime\": \"2025-03-14T15:05:00.922-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"f4e7158f-af59-346b-a14a-25369fef3378\",\n          \"endTime\": \"2025-03-14T16:05:48.583-07:00\",\n          \"id\": \"5513089581252675827\",\n          \"insertTime\": \"2025-03-14T16:05:00.815-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1741993500404-6305577caec94-a57aca31-de4d7c84\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741993500404-6305577caec94-a57aca31-de4d7c84\",\n          \"startTime\": \"2025-03-14T16:05:00.847-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"82301474-b403-35bf-8bd2-e890e3b7f008\",\n          \"endTime\": \"2025-03-14T16:05:46.780-07:00\",\n          \"id\": \"1055817506951334131\",\n          \"insertTime\": \"2025-03-14T16:05:00.765-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1741993500412-6305577cb0969-e2edc84b-25658108\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741993500412-6305577cb0969-e2edc84b-25658108\",\n          \"startTime\": \"2025-03-14T16:05:00.803-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"e8aad69c-5d53-33ac-b480-35eb43031047\",\n          \"endTime\": \"2025-03-14T17:05:48.790-07:00\",\n          \"id\": \"8266840358805666499\",\n          \"insertTime\": \"2025-03-14T17:05:00.760-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1741997100407-630564e5e9aaf-0e82e6aa-644f9947\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741997100407-630564e5e9aaf-0e82e6aa-644f9947\",\n          \"startTime\": \"2025-03-14T17:05:00.781-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"76afa6f6-c9fd-3cbd-b1fa-1bf3d741b87a\",\n          \"endTime\": \"2025-03-14T17:06:02.977-07:00\",\n          \"id\": \"1552765800286878403\",\n          \"insertTime\": \"2025-03-14T17:05:00.921-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1741997100413-630564e5eb1f9-0a198294-06ac927f\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1741997100413-630564e5eb1f9-0a198294-06ac927f\",\n          \"startTime\": \"2025-03-14T17:05:00.959-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"2e4cc108-36cf-3793-8f0c-86254ffc880f\",\n          \"endTime\": \"2025-03-14T18:05:54.635-07:00\",\n          \"id\": \"5188101006671047891\",\n          \"insertTime\": \"2025-03-14T18:05:00.750-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742000700408-6305724f2449c-72304ea1-29f2f232\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742000700408-6305724f2449c-72304ea1-29f2f232\",\n          \"startTime\": \"2025-03-14T18:05:00.769-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"369cb09d-5d11-3095-a75f-eae9f4582240\",\n          \"endTime\": \"2025-03-14T18:05:50.949-07:00\",\n          \"id\": \"7279980461868805331\",\n          \"insertTime\": \"2025-03-14T18:05:00.762-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742000700410-6305724f24ba4-d0c79188-bf6c2adf\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742000700410-6305724f24ba4-d0c79188-bf6c2adf\",\n          \"startTime\": \"2025-03-14T18:05:00.781-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"46e85d9c-2609-345e-8552-3ef7d685c7b8\",\n          \"endTime\": \"2025-03-14T19:05:51.033-07:00\",\n          \"id\": \"7047327014066937507\",\n          \"insertTime\": \"2025-03-14T19:05:00.774-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742004300399-63057fb85c311-09708aec-af15af35\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742004300399-63057fb85c311-09708aec-af15af35\",\n          \"startTime\": \"2025-03-14T19:05:00.802-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"0872b1ac-2ca0-33a2-ab54-9488b6cf64ff\",\n          \"endTime\": \"2025-03-14T19:05:51.258-07:00\",\n          \"id\": \"5679044995856293539\",\n          \"insertTime\": \"2025-03-14T19:05:00.896-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742004300438-63057fb865ba4-3755b1f7-513f9457\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742004300438-63057fb865ba4-3755b1f7-513f9457\",\n          \"startTime\": \"2025-03-14T19:05:00.920-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"3c81f538-9890-32f4-aa02-a9efbfbc1870\",\n          \"endTime\": \"2025-03-14T20:05:47.036-07:00\",\n          \"id\": \"624019740032585907\",\n          \"insertTime\": \"2025-03-14T20:05:00.926-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742007900461-63058d21a58d1-464c3549-18146d8d\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742007900461-63058d21a58d1-464c3549-18146d8d\",\n          \"startTime\": \"2025-03-14T20:05:00.957-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"99d5bde8-9d21-32e0-aa55-e119eb73d078\",\n          \"endTime\": \"2025-03-14T20:05:47.510-07:00\",\n          \"id\": \"5110182770843930803\",\n          \"insertTime\": \"2025-03-14T20:05:00.952-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742007900476-63058d21a94f9-4bfe3d2d-c10f5f61\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742007900476-63058d21a94f9-4bfe3d2d-c10f5f61\",\n          \"startTime\": \"2025-03-14T20:05:01.007-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"2378f179-82b4-344a-8aa6-97729972c388\",\n          \"endTime\": \"2025-03-14T21:05:48.552-07:00\",\n          \"id\": \"4100357795444507267\",\n          \"insertTime\": \"2025-03-14T21:05:00.757-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742011500386-63059a8acd74d-d35cd225-284e9829\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742011500386-63059a8acd74d-d35cd225-284e9829\",\n          \"startTime\": \"2025-03-14T21:05:00.779-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"b1af841c-ccf9-364a-a3a2-e93854aade0b\",\n          \"endTime\": \"2025-03-14T21:05:48.245-07:00\",\n          \"id\": \"7280566248163328643\",\n          \"insertTime\": \"2025-03-14T21:05:00.756-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742011500392-63059a8acefd1-e1b1bb6c-9fb98719\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742011500392-63059a8acefd1-e1b1bb6c-9fb98719\",\n          \"startTime\": \"2025-03-14T21:05:00.780-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"c1593de9-15e9-363f-b03b-e54b7eddc1a2\",\n          \"endTime\": \"2025-03-14T22:05:46.242-07:00\",\n          \"id\": \"4093538443940377747\",\n          \"insertTime\": \"2025-03-14T22:05:00.875-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742015100476-6305a7f41de03-ecae7d49-b4b55ebb\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742015100476-6305a7f41de03-ecae7d49-b4b55ebb\",\n          \"startTime\": \"2025-03-14T22:05:00.900-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"760ae48b-673f-3071-abb0-f4360d676858\",\n          \"endTime\": \"2025-03-14T22:05:46.951-07:00\",\n          \"id\": \"6509899388405986451\",\n          \"insertTime\": \"2025-03-14T22:05:00.889-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742015100483-6305a7f41f7db-f488ef14-1fa060d6\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742015100483-6305a7f41f7db-f488ef14-1fa060d6\",\n          \"startTime\": \"2025-03-14T22:05:00.919-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"2484d9de-5a8d-3c1f-b926-5d87c3bd6fb9\",\n          \"endTime\": \"2025-03-14T23:05:51.802-07:00\",\n          \"id\": \"116948359104210530\",\n          \"insertTime\": \"2025-03-14T23:05:01.871-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742018701486-6305b55e4e99e-e4a94c34-9a33135c\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742018701486-6305b55e4e99e-e4a94c34-9a33135c\",\n          \"startTime\": \"2025-03-14T23:05:01.899-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"bf330747-3fc9-354e-9ef7-0ca34690a03f\",\n          \"endTime\": \"2025-03-14T23:05:57.746-07:00\",\n          \"id\": \"8499822066662942306\",\n          \"insertTime\": \"2025-03-14T23:05:01.864-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742018701495-6305b55e50bf8-57b95901-388e7303\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742018701495-6305b55e50bf8-57b95901-388e7303\",\n          \"startTime\": \"2025-03-14T23:05:01.885-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"885bac9b-7af1-3d12-b8bb-fbfe441d179b\",\n          \"endTime\": \"2025-03-15T00:05:48.280-07:00\",\n          \"id\": \"2929682029907318899\",\n          \"insertTime\": \"2025-03-15T00:05:00.880-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742022300480-6305c2c693599-8c994fdf-080e0af6\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742022300480-6305c2c693599-8c994fdf-080e0af6\",\n          \"startTime\": \"2025-03-15T00:05:00.906-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"e0b3384d-cb8c-37af-bbc3-3008218c706a\",\n          \"endTime\": \"2025-03-15T00:06:26.290-07:00\",\n          \"id\": \"5951765545022429299\",\n          \"insertTime\": \"2025-03-15T00:05:00.862-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742022300482-6305c2c693bf4-13ca2d43-ccb3258e\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742022300482-6305c2c693bf4-13ca2d43-ccb3258e\",\n          \"startTime\": \"2025-03-15T00:05:00.882-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"ab6e9cc8-ccf8-31ad-8a55-f49c3ddc7959\",\n          \"endTime\": \"2025-03-15T01:05:51.619-07:00\",\n          \"id\": \"2055725218180663875\",\n          \"insertTime\": \"2025-03-15T01:05:00.881-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742025900468-6305d02fca96e-6b1599d3-79f099d8\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742025900468-6305d02fca96e-6b1599d3-79f099d8\",\n          \"startTime\": \"2025-03-15T01:05:00.907-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"7e8d0da0-3c12-3c0f-92c3-bf506a9f5cef\",\n          \"endTime\": \"2025-03-15T01:05:47.078-07:00\",\n          \"id\": \"1564871444783467075\",\n          \"insertTime\": \"2025-03-15T01:05:00.914-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742025900480-6305d02fcd9ae-c81145e8-c661f006\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742025900480-6305d02fcd9ae-c81145e8-c661f006\",\n          \"startTime\": \"2025-03-15T01:05:00.951-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"259f5465-6b44-3f64-b1ce-94f370942e25\",\n          \"endTime\": \"2025-03-15T02:05:47.296-07:00\",\n          \"id\": \"1432642604469124179\",\n          \"insertTime\": \"2025-03-15T02:05:00.839-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742029500497-6305dd990bec2-da14209e-10f13e75\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742029500497-6305dd990bec2-da14209e-10f13e75\",\n          \"startTime\": \"2025-03-15T02:05:00.852-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"4dbc50b2-ad6e-3281-ba86-80cc187366da\",\n          \"endTime\": \"2025-03-15T02:05:47.073-07:00\",\n          \"id\": \"811280988448029779\",\n          \"insertTime\": \"2025-03-15T02:05:00.852-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742029500511-6305dd990f6ca-a678e03a-ef99d42e\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742029500511-6305dd990f6ca-a678e03a-ef99d42e\",\n          \"startTime\": \"2025-03-15T02:05:00.873-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"8c1a1a58-9d8f-3de3-9549-806b1ca40ec7\",\n          \"endTime\": \"2025-03-15T03:05:52.391-07:00\",\n          \"id\": \"3682189299785723427\",\n          \"insertTime\": \"2025-03-15T03:05:00.892-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742033100441-6305eb023872f-6078b60e-491e8088\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742033100441-6305eb023872f-6078b60e-491e8088\",\n          \"startTime\": \"2025-03-15T03:05:00.923-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"45ea5c00-9f7f-3127-b9e2-3a3ab3f727b2\",\n          \"endTime\": \"2025-03-15T03:05:52.407-07:00\",\n          \"id\": \"3057704478036258339\",\n          \"insertTime\": \"2025-03-15T03:05:00.931-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742033100444-6305eb023944b-2cf81c90-7254cd30\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742033100444-6305eb023944b-2cf81c90-7254cd30\",\n          \"startTime\": \"2025-03-15T03:05:00.964-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"b4c5328c-b9e6-3e26-9014-0130c25499f1\",\n          \"endTime\": \"2025-03-15T04:05:47.043-07:00\",\n          \"id\": \"2222249647231524915\",\n          \"insertTime\": \"2025-03-15T04:05:00.868-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742036700448-6305f86b746de-9a2a7d80-baa519ed\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742036700448-6305f86b746de-9a2a7d80-baa519ed\",\n          \"startTime\": \"2025-03-15T04:05:00.888-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"56f1b7de-d646-3d15-955a-a79295b55088\",\n          \"endTime\": \"2025-03-15T04:05:47.825-07:00\",\n          \"id\": \"2539882660822048819\",\n          \"insertTime\": \"2025-03-15T04:05:00.857-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742036700475-6305f86b7aed3-e7afb938-4d16a505\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742036700475-6305f86b7aed3-e7afb938-4d16a505\",\n          \"startTime\": \"2025-03-15T04:05:00.876-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"95d40d31-91a5-3e50-aeb4-e02feab29e2d\",\n          \"endTime\": \"2025-03-15T05:05:58.338-07:00\",\n          \"id\": \"5472593614518931971\",\n          \"insertTime\": \"2025-03-15T05:05:00.859-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742040300463-630605d4b258c-f73ee5ab-1a7d7774\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742040300463-630605d4b258c-f73ee5ab-1a7d7774\",\n          \"startTime\": \"2025-03-15T05:05:00.882-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"7deed09b-4951-3804-a7fd-bb34cc4b6624\",\n          \"endTime\": \"2025-03-15T05:05:47.335-07:00\",\n          \"id\": \"2159451852359913987\",\n          \"insertTime\": \"2025-03-15T05:05:00.829-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742040300463-630605d4b2676-b8ece8e1-4fb4698e\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742040300463-630605d4b2676-b8ece8e1-4fb4698e\",\n          \"startTime\": \"2025-03-15T05:05:00.846-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"90944a15-6d82-3875-bef5-b741093f5397\",\n          \"endTime\": \"2025-03-15T06:06:01.470-07:00\",\n          \"id\": \"8703677166039647251\",\n          \"insertTime\": \"2025-03-15T06:05:00.862-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742043900456-6306133deac87-57d1b953-54e44801\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742043900456-6306133deac87-57d1b953-54e44801\",\n          \"startTime\": \"2025-03-15T06:05:00.883-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"29f9eea0-13a4-3005-9b21-6680b2b1fef2\",\n          \"endTime\": \"2025-03-15T06:06:00.938-07:00\",\n          \"id\": \"1510862767907193875\",\n          \"insertTime\": \"2025-03-15T06:05:00.880-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742043900463-6306133dec824-7e00f0da-79c53b9c\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742043900463-6306133dec824-7e00f0da-79c53b9c\",\n          \"startTime\": \"2025-03-15T06:05:00.909-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"52243139-59cf-30c1-afb4-18fea2ddb9dd\",\n          \"endTime\": \"2025-03-15T07:05:48.401-07:00\",\n          \"id\": \"3468943116977321954\",\n          \"insertTime\": \"2025-03-15T07:05:01.866-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742047501483-630620a81fc38-c0ce1d7e-3e897030\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742047501483-630620a81fc38-c0ce1d7e-3e897030\",\n          \"startTime\": \"2025-03-15T07:05:01.889-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"a9979b1e-dea1-32c0-b318-4f56b882f502\",\n          \"endTime\": \"2025-03-15T07:05:48.859-07:00\",\n          \"id\": \"2427689452101449698\",\n          \"insertTime\": \"2025-03-15T07:05:01.882-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742047501487-630620a820da4-512fe8b4-9a84a24c\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742047501487-630620a820da4-512fe8b4-9a84a24c\",\n          \"startTime\": \"2025-03-15T07:05:01.911-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"5a7c34a6-6c86-3b86-907f-9ba1a7723cf2\",\n          \"endTime\": \"2025-03-15T08:05:49.428-07:00\",\n          \"id\": \"2148160237309798899\",\n          \"insertTime\": \"2025-03-15T08:05:00.784-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742051100394-63062e1050471-422586b7-54d95a5f\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742051100394-63062e1050471-422586b7-54d95a5f\",\n          \"startTime\": \"2025-03-15T08:05:00.813-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"3b09bf66-b831-3840-97d9-cf1ffd1d3e61\",\n          \"endTime\": \"2025-03-15T08:05:50.435-07:00\",\n          \"id\": \"3443324934136801779\",\n          \"insertTime\": \"2025-03-15T08:05:00.775-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742051100401-63062e105211b-4a3eff64-c5060446\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742051100401-63062e105211b-4a3eff64-c5060446\",\n          \"startTime\": \"2025-03-15T08:05:00.802-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"16b82b00-b980-38cb-8f72-5f1b893575d5\",\n          \"endTime\": \"2025-03-15T09:05:52.252-07:00\",\n          \"id\": \"7438667563446836163\",\n          \"insertTime\": \"2025-03-15T09:05:00.786-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742054700416-63063b798ff46-c3272795-e5444119\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742054700416-63063b798ff46-c3272795-e5444119\",\n          \"startTime\": \"2025-03-15T09:05:00.819-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"fa42148d-a34d-3d00-81c4-bcecc57ede11\",\n          \"endTime\": \"2025-03-15T09:05:47.238-07:00\",\n          \"id\": \"6277805549072948163\",\n          \"insertTime\": \"2025-03-15T09:05:00.759-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742054700416-63063b798ffba-be6c4361-5c9dcc56\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742054700416-63063b798ffba-be6c4361-5c9dcc56\",\n          \"startTime\": \"2025-03-15T09:05:00.785-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"cdb640cb-082d-3016-93bf-3b3fbf79d917\",\n          \"endTime\": \"2025-03-15T10:05:46.919-07:00\",\n          \"id\": \"805549096893418962\",\n          \"insertTime\": \"2025-03-15T10:05:01.972-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742058301536-630648e3db86f-38a9a850-2b7fdae6\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742058301536-630648e3db86f-38a9a850-2b7fdae6\",\n          \"startTime\": \"2025-03-15T10:05:01.998-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"7c09676b-9e5c-3226-b7b5-87182f4342f8\",\n          \"endTime\": \"2025-03-15T10:05:47.744-07:00\",\n          \"id\": \"8167286633246756306\",\n          \"insertTime\": \"2025-03-15T10:05:01.956-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742058301537-630648e3dbd0c-79e61a6f-65d3c5e2\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742058301537-630648e3dbd0c-79e61a6f-65d3c5e2\",\n          \"startTime\": \"2025-03-15T10:05:01.985-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"e3e1303f-5739-3996-8046-31773333ced3\",\n          \"endTime\": \"2025-03-15T11:05:47.708-07:00\",\n          \"id\": \"2763862052802428835\",\n          \"insertTime\": \"2025-03-15T11:05:00.861-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742061900445-6306564c0b58d-ecc6a805-eb830722\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742061900445-6306564c0b58d-ecc6a805-eb830722\",\n          \"startTime\": \"2025-03-15T11:05:00.887-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"cad60fa3-d1ac-350f-b07e-168eb687dfc2\",\n          \"endTime\": \"2025-03-15T11:05:57.804-07:00\",\n          \"id\": \"5499539577909051299\",\n          \"insertTime\": \"2025-03-15T11:05:00.892-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742061900456-6306564c0e272-601161a2-08cd53ce\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742061900456-6306564c0e272-601161a2-08cd53ce\",\n          \"startTime\": \"2025-03-15T11:05:00.921-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"75d4cdcd-dfd5-3374-9846-1a821436f8ef\",\n          \"endTime\": \"2025-03-15T12:05:47.050-07:00\",\n          \"id\": \"2651378371148673459\",\n          \"insertTime\": \"2025-03-15T12:05:00.876-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742065500464-630663b54a3b9-5b2e3c4a-bbf9f011\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742065500464-630663b54a3b9-5b2e3c4a-bbf9f011\",\n          \"startTime\": \"2025-03-15T12:05:00.899-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"b67c55e3-9863-3cd5-aef7-90add3d92bbe\",\n          \"endTime\": \"2025-03-15T12:05:59.920-07:00\",\n          \"id\": \"893496347644686771\",\n          \"insertTime\": \"2025-03-15T12:05:00.884-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742065500471-630663b54c1f0-0e78e4e6-d826a580\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742065500471-630663b54c1f0-0e78e4e6-d826a580\",\n          \"startTime\": \"2025-03-15T12:05:00.911-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"4d893fe6-f742-3475-b7fa-c37090af90a9\",\n          \"endTime\": \"2025-03-15T13:05:47.109-07:00\",\n          \"id\": \"3654474202242114435\",\n          \"insertTime\": \"2025-03-15T13:05:00.900-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742069100476-6306711e876b8-537f953c-f272c9ce\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742069100476-6306711e876b8-537f953c-f272c9ce\",\n          \"startTime\": \"2025-03-15T13:05:00.934-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"2d75b350-efc4-3f37-a50b-d0a212ab01b6\",\n          \"endTime\": \"2025-03-15T13:05:49.742-07:00\",\n          \"id\": \"674026941908018051\",\n          \"insertTime\": \"2025-03-15T13:05:00.937-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742069100483-6306711e89484-3e91db20-5fa79213\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742069100483-6306711e89484-3e91db20-5fa79213\",\n          \"startTime\": \"2025-03-15T13:05:01.012-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"9c57d22c-bf55-38bb-bde0-469472e23156\",\n          \"endTime\": \"2025-03-15T14:05:47.636-07:00\",\n          \"id\": \"7048653218363495827\",\n          \"insertTime\": \"2025-03-15T14:05:00.783-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742072700428-63067e87b61b5-bd6dcec3-6936c3f6\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742072700428-63067e87b61b5-bd6dcec3-6936c3f6\",\n          \"startTime\": \"2025-03-15T14:05:00.806-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"a39b7c32-9d9b-3d59-842e-c7e0f8753216\",\n          \"endTime\": \"2025-03-15T14:05:48.091-07:00\",\n          \"id\": \"1068667374791054739\",\n          \"insertTime\": \"2025-03-15T14:05:00.901-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742072700445-63067e87ba22c-31a2b0c0-c9886558\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742072700445-63067e87ba22c-31a2b0c0-c9886558\",\n          \"startTime\": \"2025-03-15T14:05:00.928-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"5817803d-8dcf-3637-af41-aa8fe25c26b9\",\n          \"endTime\": \"2025-03-15T15:05:47.969-07:00\",\n          \"id\": \"9190125793344767843\",\n          \"insertTime\": \"2025-03-15T15:05:00.881-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742076300436-63068bf0f2240-4e45862e-1578eb71\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742076300436-63068bf0f2240-4e45862e-1578eb71\",\n          \"startTime\": \"2025-03-15T15:05:00.906-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"440cdc18-7b9e-3e72-af99-34120bfcce01\",\n          \"endTime\": \"2025-03-15T15:05:55.623-07:00\",\n          \"id\": \"1097724095563843427\",\n          \"insertTime\": \"2025-03-15T15:05:00.855-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742076300446-63068bf0f4b2c-110351ad-70ec0689\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742076300446-63068bf0f4b2c-110351ad-70ec0689\",\n          \"startTime\": \"2025-03-15T15:05:00.874-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"e39a0c2c-e2bd-3ab2-b478-dcecca70c7b6\",\n          \"endTime\": \"2025-03-15T16:05:58.027-07:00\",\n          \"id\": \"1407325623390288243\",\n          \"insertTime\": \"2025-03-15T16:05:00.898-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742079900457-6306995a31b71-7d6ed5a4-863a536b\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742079900457-6306995a31b71-7d6ed5a4-863a536b\",\n          \"startTime\": \"2025-03-15T16:05:00.924-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"507ae77a-182d-384d-9513-1e37597c5cd7\",\n          \"endTime\": \"2025-03-15T16:05:49.512-07:00\",\n          \"id\": \"4504889391981508979\",\n          \"insertTime\": \"2025-03-15T16:05:00.959-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742079900490-6306995a39a26-0815482d-e758a3ed\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742079900490-6306995a39a26-0815482d-e758a3ed\",\n          \"startTime\": \"2025-03-15T16:05:01.009-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"12ca5765-ee80-32b4-a418-c0f41d062f92\",\n          \"endTime\": \"2025-03-15T17:05:56.520-07:00\",\n          \"id\": \"562621863981460291\",\n          \"insertTime\": \"2025-03-15T17:05:00.878-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742083500454-6306a6c36b0df-7b694281-911a15c5\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742083500454-6306a6c36b0df-7b694281-911a15c5\",\n          \"startTime\": \"2025-03-15T17:05:00.928-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"cdad129b-b3fa-3453-a45b-0a5fdabb1c8e\",\n          \"endTime\": \"2025-03-15T17:05:53.536-07:00\",\n          \"id\": \"2663622923477822275\",\n          \"insertTime\": \"2025-03-15T17:05:00.876-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742083500460-6306a6c36cabb-b8b3be24-409705e7\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742083500460-6306a6c36cabb-b8b3be24-409705e7\",\n          \"startTime\": \"2025-03-15T17:05:00.900-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"002d051f-4e5f-3b75-b08e-7cfaa900b650\",\n          \"endTime\": \"2025-03-15T18:05:48.696-07:00\",\n          \"id\": \"2310454677625085267\",\n          \"insertTime\": \"2025-03-15T18:05:00.877-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742087100461-6306b42ca72bf-8f25feab-9f0609e5\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742087100461-6306b42ca72bf-8f25feab-9f0609e5\",\n          \"startTime\": \"2025-03-15T18:05:00.897-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"21d1602a-3de3-35ea-bb87-1c6a582933c3\",\n          \"endTime\": \"2025-03-15T18:05:47.023-07:00\",\n          \"id\": \"4476698261737676115\",\n          \"insertTime\": \"2025-03-15T18:05:00.868-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742087100472-6306b42ca9b05-5abc1038-3a40cd7c\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742087100472-6306b42ca9b05-5abc1038-3a40cd7c\",\n          \"startTime\": \"2025-03-15T18:05:00.891-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"1806c0db-a0bd-3a2d-8b86-1225cdd383dd\",\n          \"endTime\": \"2025-03-15T19:05:47.001-07:00\",\n          \"id\": \"7528264377992711971\",\n          \"insertTime\": \"2025-03-15T19:05:00.910-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742090700458-6306c195e0918-97dca515-cb25dfe6\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742090700458-6306c195e0918-97dca515-cb25dfe6\",\n          \"startTime\": \"2025-03-15T19:05:00.945-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"c88ef42a-15be-3db5-9e94-57b65e8a7ba0\",\n          \"endTime\": \"2025-03-15T19:05:48.399-07:00\",\n          \"id\": \"8636976319637983011\",\n          \"insertTime\": \"2025-03-15T19:05:00.876-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742090700467-6306c195e2c34-318770b3-21bcdab3\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742090700467-6306c195e2c34-318770b3-21bcdab3\",\n          \"startTime\": \"2025-03-15T19:05:00.903-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"ddc2b415-4c0e-393b-8710-9682c2c1fde7\",\n          \"endTime\": \"2025-03-15T20:05:51.160-07:00\",\n          \"id\": \"40585627287912755\",\n          \"insertTime\": \"2025-03-15T20:05:00.835-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742094300464-6306ceff1c6c6-47aa06c1-83063214\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742094300464-6306ceff1c6c6-47aa06c1-83063214\",\n          \"startTime\": \"2025-03-15T20:05:00.852-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"7f69b131-7f8b-3513-8be6-d9123c708567\",\n          \"endTime\": \"2025-03-15T20:05:47.218-07:00\",\n          \"id\": \"961991850426335539\",\n          \"insertTime\": \"2025-03-15T20:05:00.858-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742094300471-6306ceff1e0c2-b1c0e558-74a447d0\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742094300471-6306ceff1e0c2-b1c0e558-74a447d0\",\n          \"startTime\": \"2025-03-15T20:05:00.878-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"0789a604-66c9-3d05-b9b4-2bec4134c32d\",\n          \"endTime\": \"2025-03-15T21:05:47.202-07:00\",\n          \"id\": \"123675197012964099\",\n          \"insertTime\": \"2025-03-15T21:05:00.871-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742097900427-6306dc684d7dc-49fce950-04ba6942\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742097900427-6306dc684d7dc-49fce950-04ba6942\",\n          \"startTime\": \"2025-03-15T21:05:00.893-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"8eb2667e-d94f-3a53-b796-f0f2502b5b07\",\n          \"endTime\": \"2025-03-15T21:05:47.755-07:00\",\n          \"id\": \"357920986759951107\",\n          \"insertTime\": \"2025-03-15T21:05:00.859-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742097900453-6306dc6853d71-1f236005-53d1e06d\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742097900453-6306dc6853d71-1f236005-53d1e06d\",\n          \"startTime\": \"2025-03-15T21:05:00.881-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"375949f5-8f02-37af-9504-59411ffecbcf\",\n          \"endTime\": \"2025-03-15T22:05:47.012-07:00\",\n          \"id\": \"489271038110852371\",\n          \"insertTime\": \"2025-03-15T22:05:00.846-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742101500471-6306e9d192a96-28f0a9e3-f709b92e\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742101500471-6306e9d192a96-28f0a9e3-f709b92e\",\n          \"startTime\": \"2025-03-15T22:05:00.864-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"a6603357-b8eb-324e-ab48-03f55d4cd0b5\",\n          \"endTime\": \"2025-03-15T22:05:47.552-07:00\",\n          \"id\": \"6055421810457699602\",\n          \"insertTime\": \"2025-03-15T22:05:01.089-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742101500604-6306e9d1b2e6e-c4e76ca7-b0f003a2\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742101500604-6306e9d1b2e6e-c4e76ca7-b0f003a2\",\n          \"startTime\": \"2025-03-15T22:05:01.113-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"ec737e64-5b07-3601-92ac-f31eb9994fe6\",\n          \"endTime\": \"2025-03-15T23:05:46.649-07:00\",\n          \"id\": \"6810126334065104099\",\n          \"insertTime\": \"2025-03-15T23:05:00.883-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742105100458-6306f73ac9b86-c67e597f-607d5d06\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742105100458-6306f73ac9b86-c67e597f-607d5d06\",\n          \"startTime\": \"2025-03-15T23:05:00.921-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"35b5ce55-4f25-32d4-8685-2dad7364c5da\",\n          \"endTime\": \"2025-03-15T23:05:51.663-07:00\",\n          \"id\": \"895672577509020899\",\n          \"insertTime\": \"2025-03-15T23:05:00.844-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742105100471-6306f73accb3c-38b38535-dc709aea\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742105100471-6306f73accb3c-38b38535-dc709aea\",\n          \"startTime\": \"2025-03-15T23:05:00.863-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"9b05495d-af9a-3f4f-a476-3f8b343ca460\",\n          \"endTime\": \"2025-03-16T00:05:48.071-07:00\",\n          \"id\": \"1521282388632258290\",\n          \"insertTime\": \"2025-03-16T00:05:01.093-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742108700640-630704a4305f6-f749c0fb-a1ad664c\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742108700640-630704a4305f6-f749c0fb-a1ad664c\",\n          \"startTime\": \"2025-03-16T00:05:01.131-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"077a270e-b00b-3909-8ffa-ece6406684c2\",\n          \"endTime\": \"2025-03-16T00:05:47.114-07:00\",\n          \"id\": \"8740051488882804466\",\n          \"insertTime\": \"2025-03-16T00:05:01.068-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742108700648-630704a4324e2-15b3db40-35077b8a\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742108700648-630704a4324e2-15b3db40-35077b8a\",\n          \"startTime\": \"2025-03-16T00:05:01.090-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"adee1aa2-36ac-375b-8fbc-707580ac4002\",\n          \"endTime\": \"2025-03-16T01:05:47.958-07:00\",\n          \"id\": \"1242018748848355522\",\n          \"insertTime\": \"2025-03-16T01:05:01.881-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742112301474-6307120e36170-19fff6c6-f0a2c923\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742112301474-6307120e36170-19fff6c6-f0a2c923\",\n          \"startTime\": \"2025-03-16T01:05:01.903-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"d5eb490d-1bf6-3478-a8cf-49421084c66f\",\n          \"endTime\": \"2025-03-16T01:05:48.130-07:00\",\n          \"id\": \"4624811235437394114\",\n          \"insertTime\": \"2025-03-16T01:05:01.873-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742112301492-6307120e3aadc-0b126065-5e093176\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742112301492-6307120e3aadc-0b126065-5e093176\",\n          \"startTime\": \"2025-03-16T01:05:01.898-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"6d9bd146-a677-3795-9d8c-8fab4d88b22c\",\n          \"endTime\": \"2025-03-16T02:05:47.469-07:00\",\n          \"id\": \"2838340410667641555\",\n          \"insertTime\": \"2025-03-16T02:05:00.889-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742115900452-63071f7676e22-f63c0f69-f11d94a5\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742115900452-63071f7676e22-f63c0f69-f11d94a5\",\n          \"startTime\": \"2025-03-16T02:05:00.927-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"f80314c3-c16b-3922-806b-ae47c829ade4\",\n          \"endTime\": \"2025-03-16T02:05:47.387-07:00\",\n          \"id\": \"751517772654783187\",\n          \"insertTime\": \"2025-03-16T02:05:00.874-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742115900453-63071f7677127-b5ec4f3b-638bfb8c\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742115900453-63071f7677127-b5ec4f3b-638bfb8c\",\n          \"startTime\": \"2025-03-16T02:05:00.895-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"90d8bf3f-1d38-36c5-a856-f2335771d4f5\",\n          \"endTime\": \"2025-03-16T03:05:48.221-07:00\",\n          \"id\": \"5279457774260657315\",\n          \"insertTime\": \"2025-03-16T03:05:00.749-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742119500414-63072cdfa7dce-6b5caf87-09c581e4\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742119500414-63072cdfa7dce-6b5caf87-09c581e4\",\n          \"startTime\": \"2025-03-16T03:05:00.774-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"d24aa9d7-82a3-3ff0-a570-11efba5bf982\",\n          \"endTime\": \"2025-03-16T03:05:47.686-07:00\",\n          \"id\": \"2447056808259034275\",\n          \"insertTime\": \"2025-03-16T03:05:00.775-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742119500415-63072cdfa81a4-37f1b3af-b86ed21a\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742119500415-63072cdfa81a4-37f1b3af-b86ed21a\",\n          \"startTime\": \"2025-03-16T03:05:00.803-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"3623332c-a6f0-3302-9a75-4b5c4eb63260\",\n          \"endTime\": \"2025-03-16T04:05:58.373-07:00\",\n          \"id\": \"9066564574991027891\",\n          \"insertTime\": \"2025-03-16T04:05:00.868-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742123100453-63073a48eb89a-ea294815-57459459\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742123100453-63073a48eb89a-ea294815-57459459\",\n          \"startTime\": \"2025-03-16T04:05:00.890-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"169108bd-6b2e-3884-b35f-f00ac93c37f9\",\n          \"endTime\": \"2025-03-16T04:05:57.086-07:00\",\n          \"id\": \"1331086801380249267\",\n          \"insertTime\": \"2025-03-16T04:05:00.900-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742123100459-63073a48ed1a2-3e9dbf3d-c1c6f6bf\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742123100459-63073a48ed1a2-3e9dbf3d-c1c6f6bf\",\n          \"startTime\": \"2025-03-16T04:05:00.927-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"b6ce79da-efac-3e2f-984d-b8c4b571a2c7\",\n          \"endTime\": \"2025-03-16T05:05:53.320-07:00\",\n          \"id\": \"3823631841382563971\",\n          \"insertTime\": \"2025-03-16T05:05:00.910-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742126700428-630747b21fb33-06c18774-8e94f8b0\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742126700428-630747b21fb33-06c18774-8e94f8b0\",\n          \"startTime\": \"2025-03-16T05:05:00.948-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"5bdbf2c3-9837-3610-8117-08484e9734c8\",\n          \"endTime\": \"2025-03-16T05:05:52.775-07:00\",\n          \"id\": \"7194823333542297731\",\n          \"insertTime\": \"2025-03-16T05:05:00.881-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742126700429-630747b21ff7b-94585338-67ee3278\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742126700429-630747b21ff7b-94585338-67ee3278\",\n          \"startTime\": \"2025-03-16T05:05:00.905-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"6972ca9c-99d9-33cb-872d-b72e41e1adc8\",\n          \"endTime\": \"2025-03-16T06:05:46.953-07:00\",\n          \"id\": \"7967409455270425235\",\n          \"insertTime\": \"2025-03-16T06:05:00.849-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742130300459-6307551b61826-a69876e2-10bc5adc\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742130300459-6307551b61826-a69876e2-10bc5adc\",\n          \"startTime\": \"2025-03-16T06:05:00.870-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"6087be88-3a8c-3984-a779-c5cd296818ef\",\n          \"endTime\": \"2025-03-16T06:05:48.068-07:00\",\n          \"id\": \"8374176530745225875\",\n          \"insertTime\": \"2025-03-16T06:05:00.891-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742130300465-6307551b63136-e2b3dfd8-a713f2d0\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742130300465-6307551b63136-e2b3dfd8-a713f2d0\",\n          \"startTime\": \"2025-03-16T06:05:00.921-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"be0b29da-915d-3e9f-b749-77c04eebae42\",\n          \"endTime\": \"2025-03-16T07:05:48.742-07:00\",\n          \"id\": \"3362224535565460579\",\n          \"insertTime\": \"2025-03-16T07:05:00.911-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742133900435-6307628495ecb-0c47d6f3-5af4c22f\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742133900435-6307628495ecb-0c47d6f3-5af4c22f\",\n          \"startTime\": \"2025-03-16T07:05:00.963-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"6b3c40fd-b64b-3323-b8bd-0fec56547189\",\n          \"endTime\": \"2025-03-16T07:05:47.802-07:00\",\n          \"id\": \"3019579139976553571\",\n          \"insertTime\": \"2025-03-16T07:05:00.862-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742133900436-6307628496545-4d626181-3fb91ebd\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742133900436-6307628496545-4d626181-3fb91ebd\",\n          \"startTime\": \"2025-03-16T07:05:00.882-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"45c7373d-431e-32cf-9e32-74b405e77ba6\",\n          \"endTime\": \"2025-03-16T08:05:50.797-07:00\",\n          \"id\": \"5301808418996835954\",\n          \"insertTime\": \"2025-03-16T08:05:01.765-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742137501410-63076feebe635-2b912c8d-caddce8b\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742137501410-63076feebe635-2b912c8d-caddce8b\",\n          \"startTime\": \"2025-03-16T08:05:01.790-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"b63ed324-837d-35cb-bdf2-b3b02d20028c\",\n          \"endTime\": \"2025-03-16T08:05:47.252-07:00\",\n          \"id\": \"3917134104050226802\",\n          \"insertTime\": \"2025-03-16T08:05:01.890-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742137501433-63076feec3d84-04d8c2d7-5d142b27\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742137501433-63076feec3d84-04d8c2d7-5d142b27\",\n          \"startTime\": \"2025-03-16T08:05:01.918-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"0b5f9c13-6dca-3698-ab7a-4f1dea85a32d\",\n          \"endTime\": \"2025-03-16T09:05:51.150-07:00\",\n          \"id\": \"4313882983623510082\",\n          \"insertTime\": \"2025-03-16T09:05:01.898-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742141101459-63077d58048c4-b1f9f479-34fc6308\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742141101459-63077d58048c4-b1f9f479-34fc6308\",\n          \"startTime\": \"2025-03-16T09:05:01.928-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"1cad6be8-b843-3cbb-8c25-b0f4e1d8b51a\",\n          \"endTime\": \"2025-03-16T09:05:48.519-07:00\",\n          \"id\": \"8348525774872725570\",\n          \"insertTime\": \"2025-03-16T09:05:01.883-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742141101479-63077d580979e-2dc3368c-52ec64bb\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742141101479-63077d580979e-2dc3368c-52ec64bb\",\n          \"startTime\": \"2025-03-16T09:05:01.908-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"6399dd40-ee5f-35e0-816b-7e8ebd59dfd3\",\n          \"endTime\": \"2025-03-16T10:06:02.245-07:00\",\n          \"id\": \"4188659574271294035\",\n          \"insertTime\": \"2025-03-16T10:05:00.888-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742144700511-63078ac0575cd-d2de7ad0-1ec89694\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742144700511-63078ac0575cd-d2de7ad0-1ec89694\",\n          \"startTime\": \"2025-03-16T10:05:00.913-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"95a40f26-ae91-370d-9f17-79d97891541d\",\n          \"endTime\": \"2025-03-16T10:05:01.627-07:00\",\n          \"id\": \"5405305495763991123\",\n          \"insertTime\": \"2025-03-16T10:05:00.876-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742144700525-63078ac05ac0d-a937059d-a7199d3a\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742144700525-63078ac05ac0d-a937059d-a7199d3a\",\n          \"startTime\": \"2025-03-16T10:05:00.900-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"fec3cca5-1082-3af1-9705-a02db132a964\",\n          \"endTime\": \"2025-03-16T11:06:18.274-07:00\",\n          \"id\": \"5638564031443414050\",\n          \"insertTime\": \"2025-03-16T11:05:01.852-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742148301499-6307982a82e33-a1ba55a9-dfa8cab0\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742148301499-6307982a82e33-a1ba55a9-dfa8cab0\",\n          \"startTime\": \"2025-03-16T11:05:01.871-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"bd00ed0e-25c2-3bd3-b16c-b6372e895f87\",\n          \"endTime\": \"2025-03-16T11:06:13.329-07:00\",\n          \"id\": \"4973081732513967138\",\n          \"insertTime\": \"2025-03-16T11:05:01.861-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742148301500-6307982a8306f-c41b2b8e-42425e87\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742148301500-6307982a8306f-c41b2b8e-42425e87\",\n          \"startTime\": \"2025-03-16T11:05:01.884-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"b9a1ca18-685f-3374-8de8-109c1e7f2418\",\n          \"endTime\": \"2025-03-16T12:06:00.082-07:00\",\n          \"id\": \"3733337180550635059\",\n          \"insertTime\": \"2025-03-16T12:05:00.855-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742151900433-6307a592b8b28-48184d87-a3ed3c85\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742151900433-6307a592b8b28-48184d87-a3ed3c85\",\n          \"startTime\": \"2025-03-16T12:05:00.876-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"0c15e91c-62d5-3def-9494-3db03156ade7\",\n          \"endTime\": \"2025-03-16T12:05:51.972-07:00\",\n          \"id\": \"6286918881264705075\",\n          \"insertTime\": \"2025-03-16T12:05:00.903-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742151900444-6307a592bb5d3-27a8559e-97211d40\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742151900444-6307a592bb5d3-27a8559e-97211d40\",\n          \"startTime\": \"2025-03-16T12:05:00.943-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"377c50a3-cb67-34ee-95f4-1b86f67e36a0\",\n          \"endTime\": \"2025-03-16T13:06:02.623-07:00\",\n          \"id\": \"8089833185895682051\",\n          \"insertTime\": \"2025-03-16T13:05:00.740-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742155500403-6307b2fbebb83-30b7dba8-5be00357\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742155500403-6307b2fbebb83-30b7dba8-5be00357\",\n          \"startTime\": \"2025-03-16T13:05:00.755-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"060c2ed6-442a-3374-8ff2-987826c1eba3\",\n          \"endTime\": \"2025-03-16T13:06:08.068-07:00\",\n          \"id\": \"362708221732491267\",\n          \"insertTime\": \"2025-03-16T13:05:00.788-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742155500418-6307b2fbef7b3-2ee5c633-a6622f14\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742155500418-6307b2fbef7b3-2ee5c633-a6622f14\",\n          \"startTime\": \"2025-03-16T13:05:00.823-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"1658cb4d-04ba-3761-910a-ad7b1cee2716\",\n          \"endTime\": \"2025-03-16T14:05:53.674-07:00\",\n          \"id\": \"1545603753342304786\",\n          \"insertTime\": \"2025-03-16T14:05:01.877-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742159101462-6307c0662862a-f3091a94-5dc05095\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742159101462-6307c0662862a-f3091a94-5dc05095\",\n          \"startTime\": \"2025-03-16T14:05:01.902-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"ffe4f935-95b0-389f-81b7-80152565d715\",\n          \"endTime\": \"2025-03-16T14:05:53.975-07:00\",\n          \"id\": \"631428502783689234\",\n          \"insertTime\": \"2025-03-16T14:05:01.893-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742159101473-6307c0662b32e-4f529a8d-ddc1eabc\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742159101473-6307c0662b32e-4f529a8d-ddc1eabc\",\n          \"startTime\": \"2025-03-16T14:05:01.926-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"2193d103-efe7-3b79-a13e-31f21d8180a8\",\n          \"endTime\": \"2025-03-16T15:05:46.592-07:00\",\n          \"id\": \"4855294535048820195\",\n          \"insertTime\": \"2025-03-16T15:05:00.889-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742162700442-6307cdce69bb0-ec5af1f0-6cc56814\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742162700442-6307cdce69bb0-ec5af1f0-6cc56814\",\n          \"startTime\": \"2025-03-16T15:05:00.921-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"e1d45552-0d66-384e-84a7-bdb3d622ae86\",\n          \"endTime\": \"2025-03-16T15:05:46.903-07:00\",\n          \"id\": \"3505216593988351459\",\n          \"insertTime\": \"2025-03-16T15:05:00.874-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742162700446-6307cdce6abc6-be72f830-2533d5c5\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742162700446-6307cdce6abc6-be72f830-2533d5c5\",\n          \"startTime\": \"2025-03-16T15:05:00.902-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"794393d0-43d7-3b5a-83bf-606b9dbb2c25\",\n          \"endTime\": \"2025-03-16T16:05:47.978-07:00\",\n          \"id\": \"3715562724684130291\",\n          \"insertTime\": \"2025-03-16T16:05:00.898-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742166300484-6307db37ae218-0ea846c2-4bc865df\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742166300484-6307db37ae218-0ea846c2-4bc865df\",\n          \"startTime\": \"2025-03-16T16:05:00.935-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"1e0cffdd-28e4-326b-a652-4a260d68aae2\",\n          \"endTime\": \"2025-03-16T16:05:47.400-07:00\",\n          \"id\": \"8708253320549689331\",\n          \"insertTime\": \"2025-03-16T16:05:00.873-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742166300488-6307db37af44c-07d09439-5dbe2a43\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742166300488-6307db37af44c-07d09439-5dbe2a43\",\n          \"startTime\": \"2025-03-16T16:05:00.896-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"f8635845-4a29-3d30-a0dd-6fba45ac409c\",\n          \"endTime\": \"2025-03-16T17:05:47.162-07:00\",\n          \"id\": \"4570733104644938179\",\n          \"insertTime\": \"2025-03-16T17:05:00.926-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742169900414-6307e8a0d7752-85ab6434-566f79da\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742169900414-6307e8a0d7752-85ab6434-566f79da\",\n          \"startTime\": \"2025-03-16T17:05:00.956-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"79dae10d-d048-3bab-afb8-070c72f9be40\",\n          \"endTime\": \"2025-03-16T17:05:47.048-07:00\",\n          \"id\": \"4086572230324705731\",\n          \"insertTime\": \"2025-03-16T17:05:00.930-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742169900423-6307e8a0d98dd-8015b29a-e82ca9b0\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742169900423-6307e8a0d98dd-8015b29a-e82ca9b0\",\n          \"startTime\": \"2025-03-16T17:05:00.965-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"777d6498-286a-323f-b15d-8f9f8d69470d\",\n          \"endTime\": \"2025-03-16T18:05:47.006-07:00\",\n          \"id\": \"1862171889921346515\",\n          \"insertTime\": \"2025-03-16T18:05:00.830-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742173500450-6307f60a1a6d7-cd4a0b5d-1dc21511\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742173500450-6307f60a1a6d7-cd4a0b5d-1dc21511\",\n          \"startTime\": \"2025-03-16T18:05:00.842-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"0adc817f-0b5e-3ddd-84fb-833868186adc\",\n          \"endTime\": \"2025-03-16T18:05:47.038-07:00\",\n          \"id\": \"9164113478535531475\",\n          \"insertTime\": \"2025-03-16T18:05:00.859-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742173500454-6307f60a1b5fc-18091759-68f6f0cb\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742173500454-6307f60a1b5fc-18091759-68f6f0cb\",\n          \"startTime\": \"2025-03-16T18:05:00.884-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"c675d88f-977b-3f77-8401-01ebfca73a88\",\n          \"endTime\": \"2025-03-16T19:05:52.508-07:00\",\n          \"id\": \"586448469933833635\",\n          \"insertTime\": \"2025-03-16T19:05:00.887-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742177100433-630803735099b-d75c885b-2aab1b70\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742177100433-630803735099b-d75c885b-2aab1b70\",\n          \"startTime\": \"2025-03-16T19:05:00.914-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"f4366233-6a9f-39e8-9df5-438d393ee346\",\n          \"endTime\": \"2025-03-16T19:05:51.897-07:00\",\n          \"id\": \"6016968100673109411\",\n          \"insertTime\": \"2025-03-16T19:05:00.954-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742177100440-630803735251d-c5f3ce4a-c0475f8d\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742177100440-630803735251d-c5f3ce4a-c0475f8d\",\n          \"startTime\": \"2025-03-16T19:05:01.001-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"370d9b57-dee4-334a-b8d8-d53afe680126\",\n          \"endTime\": \"2025-03-16T20:05:46.901-07:00\",\n          \"id\": \"5144094857655627699\",\n          \"insertTime\": \"2025-03-16T20:05:00.777-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742180700402-630810dc832c5-68aded47-d576fddb\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742180700402-630810dc832c5-68aded47-d576fddb\",\n          \"startTime\": \"2025-03-16T20:05:00.803-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"18f3d8fb-3c72-3e94-a3c3-8dfe7893a7ab\",\n          \"endTime\": \"2025-03-16T20:05:46.807-07:00\",\n          \"id\": \"8248066683092742067\",\n          \"insertTime\": \"2025-03-16T20:05:00.746-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742180700420-630810dc87af0-000fb955-828baad7\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742180700420-630810dc87af0-000fb955-828baad7\",\n          \"startTime\": \"2025-03-16T20:05:00.766-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"19c2a23d-8ca8-3540-a118-437cd95d5b58\",\n          \"endTime\": \"2025-03-16T21:05:47.246-07:00\",\n          \"id\": \"8677004036152107395\",\n          \"insertTime\": \"2025-03-16T21:05:00.864-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742184300420-63081e45c1f77-7d1b1ca2-60282daf\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742184300420-63081e45c1f77-7d1b1ca2-60282daf\",\n          \"startTime\": \"2025-03-16T21:05:00.886-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"3aeade87-751b-37c7-ab83-32cc14deba95\",\n          \"endTime\": \"2025-03-16T21:05:51.380-07:00\",\n          \"id\": \"5027148138045645187\",\n          \"insertTime\": \"2025-03-16T21:05:00.816-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742184300424-63081e45c2b60-33f86c31-da1af708\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742184300424-63081e45c2b60-33f86c31-da1af708\",\n          \"startTime\": \"2025-03-16T21:05:00.846-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"9a039a9e-aa4a-3a56-b55f-b3236cc35f77\",\n          \"endTime\": \"2025-03-16T22:05:50.747-07:00\",\n          \"id\": \"3680600277850395539\",\n          \"insertTime\": \"2025-03-16T22:05:00.866-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742187900443-63082baf01ccd-0886f70a-b2a0c7a5\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742187900443-63082baf01ccd-0886f70a-b2a0c7a5\",\n          \"startTime\": \"2025-03-16T22:05:00.892-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"1f625775-22aa-3da9-a4f9-078a3d9ac5ca\",\n          \"endTime\": \"2025-03-16T22:05:48.633-07:00\",\n          \"id\": \"1997219379833082771\",\n          \"insertTime\": \"2025-03-16T22:05:00.835-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742187900450-63082baf0386c-d658e68b-bbceea79\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742187900450-63082baf0386c-d658e68b-bbceea79\",\n          \"startTime\": \"2025-03-16T22:05:00.859-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"228c3a95-7e97-39d2-a42b-72b0adc5d0ce\",\n          \"endTime\": \"2025-03-16T23:05:50.406-07:00\",\n          \"id\": \"6961858272978142563\",\n          \"insertTime\": \"2025-03-16T23:05:00.749-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742191500417-6308391835b8f-1fd2bd40-31f3be54\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742191500417-6308391835b8f-1fd2bd40-31f3be54\",\n          \"startTime\": \"2025-03-16T23:05:00.765-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"2f7c2bdd-17a5-37b0-a054-384123557e3c\",\n          \"endTime\": \"2025-03-16T23:05:01.629-07:00\",\n          \"id\": \"6934820581971461475\",\n          \"insertTime\": \"2025-03-16T23:05:00.874-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742191500437-630839183a77a-5f37e983-2f0b3d30\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742191500437-630839183a77a-5f37e983-2f0b3d30\",\n          \"startTime\": \"2025-03-16T23:05:00.897-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"6dff77c0-13f6-318b-84b9-5151d30343cc\",\n          \"endTime\": \"2025-03-17T00:05:55.525-07:00\",\n          \"id\": \"3740911845003392883\",\n          \"insertTime\": \"2025-03-17T00:05:00.944-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742195100453-6308468178a5b-ac2b2426-a5e675e8\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742195100453-6308468178a5b-ac2b2426-a5e675e8\",\n          \"startTime\": \"2025-03-17T00:05:00.966-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"a24d4b9b-1407-33a7-99fa-7304fe264401\",\n          \"endTime\": \"2025-03-17T00:05:50.494-07:00\",\n          \"id\": \"3089115558146897779\",\n          \"insertTime\": \"2025-03-17T00:05:00.877-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742195100456-63084681796c2-78e9a7bc-e316df2c\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742195100456-63084681796c2-78e9a7bc-e316df2c\",\n          \"startTime\": \"2025-03-17T00:05:00.899-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"328315d5-6524-3192-82b7-1f3dbc08f284\",\n          \"endTime\": \"2025-03-17T01:05:50.908-07:00\",\n          \"id\": \"1611150172664523075\",\n          \"insertTime\": \"2025-03-17T01:05:00.940-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742198700426-630853eaac3c7-84dcfb64-f3021ed6\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742198700426-630853eaac3c7-84dcfb64-f3021ed6\",\n          \"startTime\": \"2025-03-17T01:05:00.967-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"fcb006d0-173e-36b8-92ea-bd1c1dcd7850\",\n          \"endTime\": \"2025-03-17T01:05:46.844-07:00\",\n          \"id\": \"8855413064912759107\",\n          \"insertTime\": \"2025-03-17T01:05:00.926-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742198700434-630853eaae478-17646b34-881b1b8d\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742198700434-630853eaae478-17646b34-881b1b8d\",\n          \"startTime\": \"2025-03-17T01:05:00.957-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"d7810d6a-995d-3376-a953-8ae106dcda9b\",\n          \"endTime\": \"2025-03-17T02:05:51.459-07:00\",\n          \"id\": \"8251782474048887635\",\n          \"insertTime\": \"2025-03-17T02:05:00.908-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742202300474-63086153f2443-4f1ceda5-09d288e5\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742202300474-63086153f2443-4f1ceda5-09d288e5\",\n          \"startTime\": \"2025-03-17T02:05:00.940-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"04e95874-78a5-3493-ba1b-bd51f83091d1\",\n          \"endTime\": \"2025-03-17T02:05:47.728-07:00\",\n          \"id\": \"3752343553296718675\",\n          \"insertTime\": \"2025-03-17T02:05:00.892-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742202300494-63086153f7274-6fd35b80-033034f7\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742202300494-63086153f7274-6fd35b80-033034f7\",\n          \"startTime\": \"2025-03-17T02:05:00.926-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"ed6db565-f2f3-3b1e-adad-a3a76947481c\",\n          \"endTime\": \"2025-03-17T03:05:44.489-07:00\",\n          \"id\": \"1217808525006884131\",\n          \"insertTime\": \"2025-03-17T03:05:00.771-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742205900390-63086ebd18036-e00520e6-947a413b\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742205900390-63086ebd18036-e00520e6-947a413b\",\n          \"startTime\": \"2025-03-17T03:05:00.793-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"8040b0aa-3213-3c16-a2ff-dabc2d5e3081\",\n          \"endTime\": \"2025-03-17T03:05:47.006-07:00\",\n          \"id\": \"4660076975681588515\",\n          \"insertTime\": \"2025-03-17T03:05:00.796-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742205900406-63086ebd1bf6b-93b4d327-d034fd59\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742205900406-63086ebd1bf6b-93b4d327-d034fd59\",\n          \"startTime\": \"2025-03-17T03:05:00.820-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"a29316da-08fc-398f-836c-5bfa3dbb015b\",\n          \"endTime\": \"2025-03-17T04:05:47.531-07:00\",\n          \"id\": \"8685308845044907827\",\n          \"insertTime\": \"2025-03-17T04:05:00.892-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742209500433-63087c265cb71-0518509e-c43d9ec3\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742209500433-63087c265cb71-0518509e-c43d9ec3\",\n          \"startTime\": \"2025-03-17T04:05:00.919-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"5782653c-010e-30f4-b5d4-1b9a6549c14c\",\n          \"endTime\": \"2025-03-17T04:05:51.554-07:00\",\n          \"id\": \"4870494097891508019\",\n          \"insertTime\": \"2025-03-17T04:05:00.912-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742209500433-63087c265cda8-83134814-a57aeb2d\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742209500433-63087c265cda8-83134814-a57aeb2d\",\n          \"startTime\": \"2025-03-17T04:05:00.937-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"d2c535c4-023a-3717-a281-e33166745b63\",\n          \"endTime\": \"2025-03-17T05:05:50.522-07:00\",\n          \"id\": \"4832203330576298243\",\n          \"insertTime\": \"2025-03-17T05:05:00.766-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742213100412-6308898f91f66-0874ad58-f4c283a3\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742213100412-6308898f91f66-0874ad58-f4c283a3\",\n          \"startTime\": \"2025-03-17T05:05:00.789-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"7b781502-2cb7-3062-bcfb-084e1c5425ef\",\n          \"endTime\": \"2025-03-17T05:05:47.068-07:00\",\n          \"id\": \"3040197087530955011\",\n          \"insertTime\": \"2025-03-17T05:05:00.775-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742213100420-6308898f93d7f-231dfbcf-5347074f\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742213100420-6308898f93d7f-231dfbcf-5347074f\",\n          \"startTime\": \"2025-03-17T05:05:00.802-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"ae3b4eb5-7045-38dd-8eb9-8c72816759df\",\n          \"endTime\": \"2025-03-17T06:05:47.694-07:00\",\n          \"id\": \"3348071879590388499\",\n          \"insertTime\": \"2025-03-17T06:05:00.844-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742216700443-630896f8d3d2f-d5f97345-f0c05c8c\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742216700443-630896f8d3d2f-d5f97345-f0c05c8c\",\n          \"startTime\": \"2025-03-17T06:05:00.862-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"b91f6458-64f5-3560-9db5-b0d899839441\",\n          \"endTime\": \"2025-03-17T06:05:48.099-07:00\",\n          \"id\": \"6080248924746392339\",\n          \"insertTime\": \"2025-03-17T06:05:00.857-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742216700444-630896f8d3d80-c91fbe17-b331f814\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742216700444-630896f8d3d80-c91fbe17-b331f814\",\n          \"startTime\": \"2025-03-17T06:05:00.880-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"d7e53791-6f52-3a32-a244-6edda5df971f\",\n          \"endTime\": \"2025-03-17T07:05:50.937-07:00\",\n          \"id\": \"1799997165955027683\",\n          \"insertTime\": \"2025-03-17T07:05:00.870-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742220300432-6308a4620b420-44ba3823-6fcf09e5\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742220300432-6308a4620b420-44ba3823-6fcf09e5\",\n          \"startTime\": \"2025-03-17T07:05:00.896-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"04ed471a-7a09-3568-a375-941867872ee4\",\n          \"endTime\": \"2025-03-17T07:05:50.814-07:00\",\n          \"id\": \"3825094303516300003\",\n          \"insertTime\": \"2025-03-17T07:05:00.880-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742220300438-6308a4620cc5d-2858549b-f9ad0a78\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742220300438-6308a4620cc5d-2858549b-f9ad0a78\",\n          \"startTime\": \"2025-03-17T07:05:00.908-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"d5196fd6-848d-342a-b624-b79c47fa992f\",\n          \"endTime\": \"2025-03-17T08:05:51.004-07:00\",\n          \"id\": \"4017972179448988915\",\n          \"insertTime\": \"2025-03-17T08:05:00.874-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742223900503-6308b1cb56d94-0e4390dd-cbf27363\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742223900503-6308b1cb56d94-0e4390dd-cbf27363\",\n          \"startTime\": \"2025-03-17T08:05:00.899-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"fa521aa2-b88f-39a7-9163-85be5ab11a2c\",\n          \"endTime\": \"2025-03-17T08:05:47.113-07:00\",\n          \"id\": \"5477583477458437363\",\n          \"insertTime\": \"2025-03-17T08:05:00.869-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742223900512-6308b1cb590c8-f2ce0478-ca0a0847\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742223900512-6308b1cb590c8-f2ce0478-ca0a0847\",\n          \"startTime\": \"2025-03-17T08:05:00.891-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"1e16fe82-2bc0-39b3-b7d5-51438e75def7\",\n          \"endTime\": \"2025-03-17T09:05:52.784-07:00\",\n          \"id\": \"2631688583206270658\",\n          \"insertTime\": \"2025-03-17T09:05:01.876-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742227501456-6308bf3579c38-1eaf3cf5-10fef79b\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742227501456-6308bf3579c38-1eaf3cf5-10fef79b\",\n          \"startTime\": \"2025-03-17T09:05:01.897-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"8146f34f-9fd8-3e91-98a5-0393c793632c\",\n          \"endTime\": \"2025-03-17T09:05:50.652-07:00\",\n          \"id\": \"3618352801433122498\",\n          \"insertTime\": \"2025-03-17T09:05:01.887-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742227501457-6308bf3579e9d-8b4922b3-efe6b0f1\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742227501457-6308bf3579e9d-8b4922b3-efe6b0f1\",\n          \"startTime\": \"2025-03-17T09:05:01.912-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"2a88371a-e7f2-340a-83c1-54db9a8678bd\",\n          \"endTime\": \"2025-03-17T10:05:52.194-07:00\",\n          \"id\": \"8616019215695341779\",\n          \"insertTime\": \"2025-03-17T10:05:00.888-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742231100444-6308cc9dbcee6-e986153d-1a78fe2c\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742231100444-6308cc9dbcee6-e986153d-1a78fe2c\",\n          \"startTime\": \"2025-03-17T10:05:00.914-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"20757f02-52e5-3a1f-b849-ed9f5d54fdc4\",\n          \"endTime\": \"2025-03-17T10:05:53.161-07:00\",\n          \"id\": \"5707824721303038163\",\n          \"insertTime\": \"2025-03-17T10:05:00.896-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742231100453-6308cc9dbf221-009ae266-64234ed9\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742231100453-6308cc9dbf221-009ae266-64234ed9\",\n          \"startTime\": \"2025-03-17T10:05:00.957-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"3616fbed-9c8d-3988-951b-670a42f2ca41\",\n          \"endTime\": \"2025-03-17T11:05:50.528-07:00\",\n          \"id\": \"6752826638497864355\",\n          \"insertTime\": \"2025-03-17T11:05:00.881-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742234700433-6308da06f4762-4df0a83c-3386df6f\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742234700433-6308da06f4762-4df0a83c-3386df6f\",\n          \"startTime\": \"2025-03-17T11:05:00.904-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"9bf8c762-6c20-3c14-88cf-144d1ac58915\",\n          \"endTime\": \"2025-03-17T11:05:51.180-07:00\",\n          \"id\": \"4359848204661283491\",\n          \"insertTime\": \"2025-03-17T11:05:00.858-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742234700439-6308da06f614e-8f091290-e3aacde9\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742234700439-6308da06f614e-8f091290-e3aacde9\",\n          \"startTime\": \"2025-03-17T11:05:00.878-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"b1007a2d-dac4-35be-b52d-45d688b9df64\",\n          \"endTime\": \"2025-03-17T12:05:59.528-07:00\",\n          \"id\": \"3571285728010030258\",\n          \"insertTime\": \"2025-03-17T12:05:01.867-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742238301436-6308e77123a71-a066b438-164eefaa\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742238301436-6308e77123a71-a066b438-164eefaa\",\n          \"startTime\": \"2025-03-17T12:05:01.889-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"b410ec84-1c11-3693-ae76-8342c61310d2\",\n          \"endTime\": \"2025-03-17T12:05:52.014-07:00\",\n          \"id\": \"9055858643155930290\",\n          \"insertTime\": \"2025-03-17T12:05:01.869-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742238301452-6308e771278e9-b508a432-bd5b5f6d\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742238301452-6308e771278e9-b508a432-bd5b5f6d\",\n          \"startTime\": \"2025-03-17T12:05:01.898-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"4b4fd0b8-88e0-3b10-b7b0-62761b517c1e\",\n          \"endTime\": \"2025-03-17T13:05:51.182-07:00\",\n          \"id\": \"1424445689449234051\",\n          \"insertTime\": \"2025-03-17T13:05:00.878-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742241900439-6308f4d96a8f5-6fd1cc20-c1cf5105\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742241900439-6308f4d96a8f5-6fd1cc20-c1cf5105\",\n          \"startTime\": \"2025-03-17T13:05:00.899-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"970b17b0-9b76-3e39-9f01-94dfdadd760f\",\n          \"endTime\": \"2025-03-17T13:05:49.852-07:00\",\n          \"id\": \"750893701021384323\",\n          \"insertTime\": \"2025-03-17T13:05:00.845-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742241900442-6308f4d96b215-3652df20-a7e4447d\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742241900442-6308f4d96b215-3652df20-a7e4447d\",\n          \"startTime\": \"2025-03-17T13:05:00.866-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"49477e9c-8e6a-3f9b-81fa-3dd97ca77da1\",\n          \"endTime\": \"2025-03-17T14:05:47.345-07:00\",\n          \"id\": \"8685744822880120979\",\n          \"insertTime\": \"2025-03-17T14:05:00.863-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742245500442-63090242a58d7-f4ec298e-750d0efd\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742245500442-63090242a58d7-f4ec298e-750d0efd\",\n          \"startTime\": \"2025-03-17T14:05:00.887-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"e8ec1c70-0a74-3531-9429-65f8512b35c6\",\n          \"endTime\": \"2025-03-17T14:05:51.248-07:00\",\n          \"id\": \"1355885036308869267\",\n          \"insertTime\": \"2025-03-17T14:05:00.856-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742245500452-63090242a7df7-e2e2ffb5-520695e0\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742245500452-63090242a7df7-e2e2ffb5-520695e0\",\n          \"startTime\": \"2025-03-17T14:05:00.879-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"487874bd-8c8e-3d08-850a-2f7651392633\",\n          \"endTime\": \"2025-03-17T15:05:47.671-07:00\",\n          \"id\": \"1647750505276187235\",\n          \"insertTime\": \"2025-03-17T15:05:00.893-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742249100445-63090fabe06d2-bf84d04c-98662000\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742249100445-63090fabe06d2-bf84d04c-98662000\",\n          \"startTime\": \"2025-03-17T15:05:00.922-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"74692df8-d203-3bba-bae5-0c26d55957cd\",\n          \"endTime\": \"2025-03-17T15:05:47.491-07:00\",\n          \"id\": \"457574256775340643\",\n          \"insertTime\": \"2025-03-17T15:05:00.882-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742249100446-63090fabe0944-9b170c77-a11c5375\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742249100446-63090fabe0944-9b170c77-a11c5375\",\n          \"startTime\": \"2025-03-17T15:05:00.907-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"f2781d82-d1f5-3fae-9668-8be251b2956d\",\n          \"endTime\": \"2025-03-17T16:05:47.019-07:00\",\n          \"id\": \"5641947885851710579\",\n          \"insertTime\": \"2025-03-17T16:05:00.855-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742252700454-63091d151cd36-59aa0fcc-d87a35a9\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742252700454-63091d151cd36-59aa0fcc-d87a35a9\",\n          \"startTime\": \"2025-03-17T16:05:00.875-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"ff649886-78e9-3f93-8ff8-14c745b50f2d\",\n          \"endTime\": \"2025-03-17T16:05:48.376-07:00\",\n          \"id\": \"2919161447385994355\",\n          \"insertTime\": \"2025-03-17T16:05:00.873-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742252700457-63091d151d90c-4c8048a3-5c92c5c7\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742252700457-63091d151d90c-4c8048a3-5c92c5c7\",\n          \"startTime\": \"2025-03-17T16:05:00.900-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"0aa7e93e-ff03-3175-88bb-c534337e929f\",\n          \"endTime\": \"2025-03-17T17:05:46.790-07:00\",\n          \"id\": \"6013897942085469763\",\n          \"insertTime\": \"2025-03-17T17:05:00.862-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742256300451-63092a7e5686e-1efa5298-652d8ed6\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742256300451-63092a7e5686e-1efa5298-652d8ed6\",\n          \"startTime\": \"2025-03-17T17:05:00.888-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"159c3d20-a328-3995-8122-37245ebb72e4\",\n          \"endTime\": \"2025-03-17T17:05:50.947-07:00\",\n          \"id\": \"5890613835021485635\",\n          \"insertTime\": \"2025-03-17T17:05:00.909-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742256300464-63092a7e59b27-2cb5f984-1eb2d23f\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742256300464-63092a7e59b27-2cb5f984-1eb2d23f\",\n          \"startTime\": \"2025-03-17T17:05:00.930-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"5df6a5a9-587c-364d-8948-9e32983bc32a\",\n          \"endTime\": \"2025-03-17T18:05:55.803-07:00\",\n          \"id\": \"237966690530719827\",\n          \"insertTime\": \"2025-03-17T18:05:00.887-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742259900422-630937e7897e4-68dcda93-b856f1b9\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742259900422-630937e7897e4-68dcda93-b856f1b9\",\n          \"startTime\": \"2025-03-17T18:05:00.915-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"88865240-98a1-3606-bb0f-96b96f01e71f\",\n          \"endTime\": \"2025-03-17T18:05:54.520-07:00\",\n          \"id\": \"4237186812020619347\",\n          \"insertTime\": \"2025-03-17T18:05:00.895-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742259900426-630937e78a887-c554fa45-78c7dc6e\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742259900426-630937e78a887-c554fa45-78c7dc6e\",\n          \"startTime\": \"2025-03-17T18:05:00.929-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"972c9036-8edb-3b7b-b689-4f256b81b950\",\n          \"endTime\": \"2025-03-17T19:05:51.582-07:00\",\n          \"id\": \"155442428696160803\",\n          \"insertTime\": \"2025-03-17T19:05:00.863-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742263500481-63094550d22bc-1ba59776-aab9f29f\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742263500481-63094550d22bc-1ba59776-aab9f29f\",\n          \"startTime\": \"2025-03-17T19:05:00.891-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"61a7e686-503f-3716-be92-c3d2150ef0f2\",\n          \"endTime\": \"2025-03-17T19:05:47.022-07:00\",\n          \"id\": \"6838889313434167843\",\n          \"insertTime\": \"2025-03-17T19:05:00.870-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742263500492-63094550d50b8-d0baa2f4-dae22c67\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742263500492-63094550d50b8-d0baa2f4-dae22c67\",\n          \"startTime\": \"2025-03-17T19:05:00.891-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"6026209c-d10c-3958-9379-d1b26897c41f\",\n          \"endTime\": \"2025-03-17T20:05:01.474-07:00\",\n          \"id\": \"3853753748404132915\",\n          \"insertTime\": \"2025-03-17T20:05:01.005-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742267100512-630952ba142e3-a300782f-5b25bef9\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742267100512-630952ba142e3-a300782f-5b25bef9\",\n          \"startTime\": \"2025-03-17T20:05:01.030-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"50586435-f9e8-3d18-bbdc-fbd74328de50\",\n          \"endTime\": \"2025-03-17T20:05:51.519-07:00\",\n          \"id\": \"9014149734708108339\",\n          \"insertTime\": \"2025-03-17T20:05:00.971-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742267100523-630952ba16dcb-b6d0d111-752b88b1\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742267100523-630952ba16dcb-b6d0d111-752b88b1\",\n          \"startTime\": \"2025-03-17T20:05:00.991-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"62b4bcbf-905b-3805-9cfd-601b3cd8ab76\",\n          \"endTime\": \"2025-03-17T21:05:51.263-07:00\",\n          \"id\": \"8221297053879586307\",\n          \"insertTime\": \"2025-03-17T21:05:00.858-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742270700416-6309602336ddf-88106400-aa6b2b8b\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742270700416-6309602336ddf-88106400-aa6b2b8b\",\n          \"startTime\": \"2025-03-17T21:05:00.892-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"c1ab475c-c209-37c1-8594-e7ade694b09c\",\n          \"endTime\": \"2025-03-17T21:05:47.299-07:00\",\n          \"id\": \"7986854030644432387\",\n          \"insertTime\": \"2025-03-17T21:05:00.934-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742270700416-6309602336ded-bbfad9d4-654fdfc7\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742270700416-6309602336ded-bbfad9d4-654fdfc7\",\n          \"startTime\": \"2025-03-17T21:05:00.980-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"031aea22-a7a5-38a4-ad0e-8124b35867a8\",\n          \"endTime\": \"2025-03-17T22:05:51.095-07:00\",\n          \"id\": \"5260235536457875475\",\n          \"insertTime\": \"2025-03-17T22:05:00.870-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742274300447-63096d8c78b87-99eb660e-f88f4baf\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742274300447-63096d8c78b87-99eb660e-f88f4baf\",\n          \"startTime\": \"2025-03-17T22:05:00.891-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"e364c026-a1c6-3b8f-b440-974fc97daf22\",\n          \"endTime\": \"2025-03-17T22:05:47.412-07:00\",\n          \"id\": \"8373230422463954963\",\n          \"insertTime\": \"2025-03-17T22:05:00.886-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742274300453-63096d8c7a2f7-eb7c1e2d-1d621ca5\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742274300453-63096d8c7a2f7-eb7c1e2d-1d621ca5\",\n          \"startTime\": \"2025-03-17T22:05:00.914-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"a0e4b16d-00a2-34b0-ad01-48c8093520dc\",\n          \"endTime\": \"2025-03-17T23:05:51.952-07:00\",\n          \"id\": \"7622249223185282018\",\n          \"insertTime\": \"2025-03-17T23:05:01.858-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742277901460-63097af6aa288-0f87aefd-0ee06572\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742277901460-63097af6aa288-0f87aefd-0ee06572\",\n          \"startTime\": \"2025-03-17T23:05:01.879-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"1f183fd7-1878-39b4-8682-7cce0bf5c194\",\n          \"endTime\": \"2025-03-17T23:05:56.797-07:00\",\n          \"id\": \"8591359394677306338\",\n          \"insertTime\": \"2025-03-17T23:05:01.867-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742277901463-63097af6ab159-bd7b2d1e-bd79ec22\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742277901463-63097af6ab159-bd7b2d1e-bd79ec22\",\n          \"startTime\": \"2025-03-17T23:05:01.897-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"2ed1a60b-8a9a-37dd-8a55-2ceec67b8595\",\n          \"endTime\": \"2025-03-18T00:05:50.842-07:00\",\n          \"id\": \"275737865587303923\",\n          \"insertTime\": \"2025-03-18T00:05:00.768-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742281500402-6309885ee250f-cd7a931f-0f4679c0\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742281500402-6309885ee250f-cd7a931f-0f4679c0\",\n          \"startTime\": \"2025-03-18T00:05:00.801-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"9b358bb9-0fb9-3362-bfae-db1391c87652\",\n          \"endTime\": \"2025-03-18T00:05:54.250-07:00\",\n          \"id\": \"32374723559335411\",\n          \"insertTime\": \"2025-03-18T00:05:00.775-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742281500408-6309885ee3b80-9a035798-bcfc3fd0\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742281500408-6309885ee3b80-9a035798-bcfc3fd0\",\n          \"startTime\": \"2025-03-18T00:05:00.800-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"5217ffb5-3426-3c3e-8e35-26a94875f3cb\",\n          \"endTime\": \"2025-03-18T01:05:48.383-07:00\",\n          \"id\": \"2997960727034369986\",\n          \"insertTime\": \"2025-03-18T01:05:01.884-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742285101422-630995c9157b6-350deb7f-07eb91a7\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742285101422-630995c9157b6-350deb7f-07eb91a7\",\n          \"startTime\": \"2025-03-18T01:05:01.903-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"790c701b-5849-34b5-9452-05d63024fa16\",\n          \"endTime\": \"2025-03-18T01:05:48.953-07:00\",\n          \"id\": \"7288260497390213058\",\n          \"insertTime\": \"2025-03-18T01:05:01.900-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742285101429-630995c9171f5-eb4a51e4-e4603956\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742285101429-630995c9171f5-eb4a51e4-e4603956\",\n          \"startTime\": \"2025-03-18T01:05:01.944-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"fe9e88e3-d884-30f1-874f-39e3ecc68973\",\n          \"endTime\": \"2025-03-18T02:05:47.257-07:00\",\n          \"id\": \"9031800293652990419\",\n          \"insertTime\": \"2025-03-18T02:05:00.794-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742288700420-6309a3315b12b-4bb617f1-bb52badd\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742288700420-6309a3315b12b-4bb617f1-bb52badd\",\n          \"startTime\": \"2025-03-18T02:05:00.823-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"5264ca3d-436e-34df-9974-eedb7fa777ae\",\n          \"endTime\": \"2025-03-18T02:05:48.230-07:00\",\n          \"id\": \"5880900465833839059\",\n          \"insertTime\": \"2025-03-18T02:05:00.878-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742288700424-6309a3315c17d-7e11d9fb-4d2db9c9\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742288700424-6309a3315c17d-7e11d9fb-4d2db9c9\",\n          \"startTime\": \"2025-03-18T02:05:00.898-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"55ea6acf-6a4b-377f-ae0f-79e838c23eac\",\n          \"endTime\": \"2025-03-18T03:05:52.157-07:00\",\n          \"id\": \"8560539396555996067\",\n          \"insertTime\": \"2025-03-18T03:05:00.874-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742292300456-6309b09a9e07c-36860013-73c0052e\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742292300456-6309b09a9e07c-36860013-73c0052e\",\n          \"startTime\": \"2025-03-18T03:05:00.899-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"eeeffe7c-42d4-39a5-a381-164d20465f96\",\n          \"endTime\": \"2025-03-18T03:05:47.193-07:00\",\n          \"id\": \"7330097864014887843\",\n          \"insertTime\": \"2025-03-18T03:05:00.902-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742292300480-6309b09aa3fbc-1bb0c914-5d8cf6d5\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742292300480-6309b09aa3fbc-1bb0c914-5d8cf6d5\",\n          \"startTime\": \"2025-03-18T03:05:00.934-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"139170bf-e7b3-37c9-aab8-a41a14c803e8\",\n          \"endTime\": \"2025-03-18T04:05:47.284-07:00\",\n          \"id\": \"6216816730001698227\",\n          \"insertTime\": \"2025-03-18T04:05:00.853-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742295900433-6309be03d2a75-7527ba37-0a66956d\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742295900433-6309be03d2a75-7527ba37-0a66956d\",\n          \"startTime\": \"2025-03-18T04:05:00.877-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"6f86a68c-8c54-3336-a93b-424d6735fd9a\",\n          \"endTime\": \"2025-03-18T04:05:48.110-07:00\",\n          \"id\": \"5537964348203658675\",\n          \"insertTime\": \"2025-03-18T04:05:00.947-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742295900447-6309be03d6293-b9691c3a-6a1ffdc5\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742295900447-6309be03d6293-b9691c3a-6a1ffdc5\",\n          \"startTime\": \"2025-03-18T04:05:00.986-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"endTime\": \"2025-03-18T04:51:32.993-07:00\",\n          \"id\": \"2337017207809433832\",\n          \"insertTime\": \"2025-03-18T04:50:31.620-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742298631375-6309c83040b5e-43e832b7-37383d59\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742298631375-6309c83040b5e-43e832b7-37383d59\",\n          \"startTime\": \"2025-03-18T04:50:31.639-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"4632680981323459323\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/shielded-vm-integrity-failure\",\n          \"user\": \"testuser@example.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"5b977265-c77d-37ce-9841-218df698ef52\",\n          \"endTime\": \"2025-03-18T05:05:46.998-07:00\",\n          \"id\": \"1254103081716866947\",\n          \"insertTime\": \"2025-03-18T05:05:00.867-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742299500441-6309cb6d0efd2-d0d586a4-08cadb7c\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742299500441-6309cb6d0efd2-d0d586a4-08cadb7c\",\n          \"startTime\": \"2025-03-18T05:05:00.887-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"9940aa8b-e8d7-3226-8ba6-b4d7a9e9f9a1\",\n          \"endTime\": \"2025-03-18T05:05:51.056-07:00\",\n          \"id\": \"3732966988729081731\",\n          \"insertTime\": \"2025-03-18T05:05:00.862-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742299500444-6309cb6d0fae1-533bbd52-97cfffa2\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742299500444-6309cb6d0fae1-533bbd52-97cfffa2\",\n          \"startTime\": \"2025-03-18T05:05:00.887-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"04f6b60f-2811-36b4-a5cc-6f4ddd57f874\",\n          \"endTime\": \"2025-03-18T06:05:48.393-07:00\",\n          \"id\": \"1126187750072308114\",\n          \"insertTime\": \"2025-03-18T06:05:01.909-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742303101464-6309d8d74304a-9bd9a74d-57dabed4\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742303101464-6309d8d74304a-9bd9a74d-57dabed4\",\n          \"startTime\": \"2025-03-18T06:05:01.939-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"dee89855-292f-32d1-9611-a5639f8d40c8\",\n          \"endTime\": \"2025-03-18T06:05:52.296-07:00\",\n          \"id\": \"6368168581489021330\",\n          \"insertTime\": \"2025-03-18T06:05:01.870-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742303101478-6309d8d7466af-a3f6c3d5-c1eaa166\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742303101478-6309d8d7466af-a3f6c3d5-c1eaa166\",\n          \"startTime\": \"2025-03-18T06:05:01.894-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"ec0a26c0-cc66-3782-be14-d7b7b29428f9\",\n          \"endTime\": \"2025-03-18T07:05:44.122-07:00\",\n          \"id\": \"9132950291052020579\",\n          \"insertTime\": \"2025-03-18T07:05:00.887-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742306700465-6309e63f89462-2d7a1f01-ae57b34a\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742306700465-6309e63f89462-2d7a1f01-ae57b34a\",\n          \"startTime\": \"2025-03-18T07:05:00.912-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"903fbcf3-c651-3f9d-ab79-afbe887d85e3\",\n          \"endTime\": \"2025-03-18T07:05:46.848-07:00\",\n          \"id\": \"9216434327753376611\",\n          \"insertTime\": \"2025-03-18T07:05:00.896-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742306700467-6309e63f89ba7-af2570cc-4e015e3c\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742306700467-6309e63f89ba7-af2570cc-4e015e3c\",\n          \"startTime\": \"2025-03-18T07:05:00.924-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"05980849-d11b-3195-bef8-9add06677d11\",\n          \"endTime\": \"2025-03-18T08:05:50.859-07:00\",\n          \"id\": \"8872164897655633267\",\n          \"insertTime\": \"2025-03-18T08:05:00.866-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742310300495-6309f3a8cad24-b321d3ba-6af16a4a\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742310300495-6309f3a8cad24-b321d3ba-6af16a4a\",\n          \"startTime\": \"2025-03-18T08:05:00.891-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"65a68dad-4ea9-33d8-b9e7-b02226329b32\",\n          \"endTime\": \"2025-03-18T08:05:52.209-07:00\",\n          \"id\": \"3447834181645907315\",\n          \"insertTime\": \"2025-03-18T08:05:00.879-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742310300510-6309f3a8ce8d8-6b04dcb9-1d68752a\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742310300510-6309f3a8ce8d8-6b04dcb9-1d68752a\",\n          \"startTime\": \"2025-03-18T08:05:00.906-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"45091c2e-7037-33ae-8887-350606536c56\",\n          \"endTime\": \"2025-03-18T09:05:51.913-07:00\",\n          \"id\": \"4674004132987938627\",\n          \"insertTime\": \"2025-03-18T09:05:00.849-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742313900474-630a0111fff78-9589b808-b20790e8\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742313900474-630a0111fff78-9589b808-b20790e8\",\n          \"startTime\": \"2025-03-18T09:05:00.870-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"3624a8ec-fbac-3534-927d-394f0769d59b\",\n          \"endTime\": \"2025-03-18T09:05:49.324-07:00\",\n          \"id\": \"4727992700827346755\",\n          \"insertTime\": \"2025-03-18T09:05:00.852-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742313900481-630a011201ab5-b2fbb2c2-9b1a5744\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742313900481-630a011201ab5-b2fbb2c2-9b1a5744\",\n          \"startTime\": \"2025-03-18T09:05:00.872-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"de83c827-1adf-381d-9657-a7f0220cd767\",\n          \"endTime\": \"2025-03-18T10:05:47.109-07:00\",\n          \"id\": \"5759242081200773459\",\n          \"insertTime\": \"2025-03-18T10:05:00.763-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742317500404-630a0e7b294b4-a4b179d4-3ad61d5e\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742317500404-630a0e7b294b4-a4b179d4-3ad61d5e\",\n          \"startTime\": \"2025-03-18T10:05:00.787-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"e55a8949-3c70-3be8-bda1-b6baf6ed5bf3\",\n          \"endTime\": \"2025-03-18T10:05:56.340-07:00\",\n          \"id\": \"6585911290113562963\",\n          \"insertTime\": \"2025-03-18T10:05:00.880-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742317500431-630a0e7b2fdd7-81ddb8b9-a6274bd4\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742317500431-630a0e7b2fdd7-81ddb8b9-a6274bd4\",\n          \"startTime\": \"2025-03-18T10:05:00.906-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"d5934063-f2ac-3066-af11-27dc747e40db\",\n          \"endTime\": \"2025-03-18T11:06:06.301-07:00\",\n          \"id\": \"1359430398667655970\",\n          \"insertTime\": \"2025-03-18T11:05:01.872-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742321101430-630a1be55de20-e3e8f485-7600f2ae\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742321101430-630a1be55de20-e3e8f485-7600f2ae\",\n          \"startTime\": \"2025-03-18T11:05:01.891-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"6aa83a3f-100e-31ce-8c70-e7b59c88a069\",\n          \"endTime\": \"2025-03-18T11:05:51.808-07:00\",\n          \"id\": \"7412941448077904674\",\n          \"insertTime\": \"2025-03-18T11:05:01.904-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742321101434-630a1be55ef62-51eb3e54-5b659a41\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742321101434-630a1be55ef62-51eb3e54-5b659a41\",\n          \"startTime\": \"2025-03-18T11:05:01.932-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"ef2a6b70-b75d-395d-a16f-8010416f6342\",\n          \"endTime\": \"2025-03-18T12:05:52.136-07:00\",\n          \"id\": \"3616693453703118130\",\n          \"insertTime\": \"2025-03-18T12:05:01.853-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742324701473-630a294ea2ad9-6edd6c3d-3b35c379\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742324701473-630a294ea2ad9-6edd6c3d-3b35c379\",\n          \"startTime\": \"2025-03-18T12:05:01.876-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"147cc4c3-87d7-357b-b53c-da4856d5421b\",\n          \"endTime\": \"2025-03-18T12:05:56.206-07:00\",\n          \"id\": \"7720352791691296050\",\n          \"insertTime\": \"2025-03-18T12:05:01.892-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742324701480-630a294ea45aa-a66f8b03-adcff6af\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742324701480-630a294ea45aa-a66f8b03-adcff6af\",\n          \"startTime\": \"2025-03-18T12:05:01.937-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"2c934b16-5cb0-3888-ba27-9cc39a50bd19\",\n          \"endTime\": \"2025-03-18T13:05:52.716-07:00\",\n          \"id\": \"1170775399004925698\",\n          \"insertTime\": \"2025-03-18T13:05:01.768-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742328301417-630a36b7cf3cc-975421f1-8454083d\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742328301417-630a36b7cf3cc-975421f1-8454083d\",\n          \"startTime\": \"2025-03-18T13:05:01.788-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"040fa15c-21c3-3844-8313-0b7925784dcb\",\n          \"endTime\": \"2025-03-18T13:05:52.788-07:00\",\n          \"id\": \"7826094834979204866\",\n          \"insertTime\": \"2025-03-18T13:05:01.887-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742328301438-630a36b7d4577-e443c142-2ba6b550\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742328301438-630a36b7d4577-e443c142-2ba6b550\",\n          \"startTime\": \"2025-03-18T13:05:01.918-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"c2a99dde-1ca2-3ef7-8fd9-4729f1d9262e\",\n          \"endTime\": \"2025-03-18T14:05:51.389-07:00\",\n          \"id\": \"1885523150367908115\",\n          \"insertTime\": \"2025-03-18T14:05:00.892-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742331900452-630a44201df59-3181d036-8a61956b\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742331900452-630a44201df59-3181d036-8a61956b\",\n          \"startTime\": \"2025-03-18T14:05:00.915-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"9ea370d6-2e23-394c-a23a-3a43f1824031\",\n          \"endTime\": \"2025-03-18T14:05:47.917-07:00\",\n          \"id\": \"5318028448889069843\",\n          \"insertTime\": \"2025-03-18T14:05:00.906-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742331900453-630a44201e3ff-596d5ff8-df0d09bf\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742331900453-630a44201e3ff-596d5ff8-df0d09bf\",\n          \"startTime\": \"2025-03-18T14:05:00.948-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"0f39a0c2-61e6-3ea7-8545-70f43811e1eb\",\n          \"endTime\": \"2025-03-18T15:05:51.029-07:00\",\n          \"id\": \"4582697753954767075\",\n          \"insertTime\": \"2025-03-18T15:05:00.877-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742335500431-630a5189531d2-9855916b-608d2561\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742335500431-630a5189531d2-9855916b-608d2561\",\n          \"startTime\": \"2025-03-18T15:05:00.898-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"6a3c4af7-c360-3aa9-860c-2a4fa6ced0e4\",\n          \"endTime\": \"2025-03-18T15:05:48.186-07:00\",\n          \"id\": \"4356896131904721123\",\n          \"insertTime\": \"2025-03-18T15:05:00.900-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742335500444-630a51895625f-59a2baa1-316d30c9\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742335500444-630a51895625f-59a2baa1-316d30c9\",\n          \"startTime\": \"2025-03-18T15:05:00.929-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"32c81f3e-f51f-3327-8809-21c8a06be23b\",\n          \"endTime\": \"2025-03-18T16:05:50.781-07:00\",\n          \"id\": \"735884559848325875\",\n          \"insertTime\": \"2025-03-18T16:05:00.756-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742339100417-630a5ef289d7c-401abaab-e5ea1d59\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742339100417-630a5ef289d7c-401abaab-e5ea1d59\",\n          \"startTime\": \"2025-03-18T16:05:00.779-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"febccb5d-a0e1-3d13-a90c-fd433888a430\",\n          \"endTime\": \"2025-03-18T16:05:55.831-07:00\",\n          \"id\": \"5104387292298232563\",\n          \"insertTime\": \"2025-03-18T16:05:00.893-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742339100421-630a5ef28ac61-8b2bae0a-1d0481e1\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742339100421-630a5ef28ac61-8b2bae0a-1d0481e1\",\n          \"startTime\": \"2025-03-18T16:05:00.920-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"9f761fac-a817-3ec7-a5fd-e263272b8466\",\n          \"endTime\": \"2025-03-18T17:05:47.989-07:00\",\n          \"id\": \"361283954742375619\",\n          \"insertTime\": \"2025-03-18T17:05:00.875-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742342700427-630a6c5bc6a0f-020b99ff-63041055\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742342700427-630a6c5bc6a0f-020b99ff-63041055\",\n          \"startTime\": \"2025-03-18T17:05:00.900-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"7c9863a5-e94f-3f01-abc0-1369c30191a0\",\n          \"endTime\": \"2025-03-18T17:05:48.468-07:00\",\n          \"id\": \"7393282446461482179\",\n          \"insertTime\": \"2025-03-18T17:05:00.901-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742342700440-630a6c5bc9bb5-badcb292-06e1caf8\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742342700440-630a6c5bc9bb5-badcb292-06e1caf8\",\n          \"startTime\": \"2025-03-18T17:05:00.928-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"21501373-f752-3be8-bd7b-272616fd8504\",\n          \"endTime\": \"2025-03-18T18:05:51.619-07:00\",\n          \"id\": \"1089006724997162707\",\n          \"insertTime\": \"2025-03-18T18:05:00.808-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742346300382-630a79c4f5da4-cc9ed2d7-1fa2b799\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742346300382-630a79c4f5da4-cc9ed2d7-1fa2b799\",\n          \"startTime\": \"2025-03-18T18:05:00.834-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"clientOperationId\": \"9ef53c6b-28c5-3bb1-8414-13b95b84177c\",\n          \"endTime\": \"2025-03-18T18:05:50.921-07:00\",\n          \"id\": \"3104884891351230163\",\n          \"insertTime\": \"2025-03-18T18:05:00.920-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"operation-1742346300390-630a79c4f7ca5-fc6a1ee7-3da14d48\",\n          \"operationType\": \"stop\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742346300390-630a79c4f7ca5-fc6a1ee7-3da14d48\",\n          \"startTime\": \"2025-03-18T18:05:00.957-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"endTime\": \"2025-03-18T14:27:30.053-07:00\",\n          \"id\": \"955370196266408877\",\n          \"insertTime\": \"2025-03-18T14:27:30.053-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"repair-1742333250053-630a492732605-67c0d2dc-a95be921\",\n          \"operationType\": \"compute.instances.repair.recreateInstance\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/repair-1742333250053-630a492732605-67c0d2dc-a95be921\",\n          \"startTime\": \"2025-03-18T14:27:30.053-07:00\",\n          \"status\": \"DONE\",\n          \"statusMessage\": \"Instance Group Manager 'apache-mig-timeout' initiated recreateInstance on instance 'projects/123456012345/zones/us-central1-c/instances/apache-instance-7ssf'. Reason: Instance eligible for repair: instance unhealthy.\",\n          \"targetId\": \"6200748239440076168\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/apache-instance-7ssf\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"endTime\": \"2025-03-18T14:36:30.345-07:00\",\n          \"id\": \"3622175296556652977\",\n          \"insertTime\": \"2025-03-18T14:36:30.345-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"repair-1742333790345-630a4b2a758ed-6e571884-5b35c262\",\n          \"operationType\": \"compute.instances.repair.recreateInstance\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/repair-1742333790345-630a4b2a758ed-6e571884-5b35c262\",\n          \"startTime\": \"2025-03-18T14:36:30.345-07:00\",\n          \"status\": \"DONE\",\n          \"statusMessage\": \"Instance Group Manager 'apache-mig-timeout' initiated recreateInstance on instance 'projects/123456012345/zones/us-central1-c/instances/apache-instance-7ssf'. Reason: Instance eligible for repair: instance unhealthy.\",\n          \"targetId\": \"6200748239440076168\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/apache-instance-7ssf\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"endTime\": \"2025-03-18T14:45:31.227-07:00\",\n          \"id\": \"2823263602284451732\",\n          \"insertTime\": \"2025-03-18T14:45:31.227-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"repair-1742334331227-630a4d2e48d8f-4035bc5b-1cfb2488\",\n          \"operationType\": \"compute.instances.repair.recreateInstance\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/repair-1742334331227-630a4d2e48d8f-4035bc5b-1cfb2488\",\n          \"startTime\": \"2025-03-18T14:45:31.227-07:00\",\n          \"status\": \"DONE\",\n          \"statusMessage\": \"Instance Group Manager 'apache-mig-timeout' initiated recreateInstance on instance 'projects/123456012345/zones/us-central1-c/instances/apache-instance-7ssf'. Reason: Instance eligible for repair: instance unhealthy.\",\n          \"targetId\": \"6200748239440076168\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/apache-instance-7ssf\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"endTime\": \"2025-03-18T14:54:26.794-07:00\",\n          \"id\": \"2569906642589341053\",\n          \"insertTime\": \"2025-03-18T14:54:26.794-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"repair-1742334866794-630a4f2d0a67c-311cf18f-d0007da9\",\n          \"operationType\": \"compute.instances.repair.recreateInstance\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/repair-1742334866794-630a4f2d0a67c-311cf18f-d0007da9\",\n          \"startTime\": \"2025-03-18T14:54:26.794-07:00\",\n          \"status\": \"DONE\",\n          \"statusMessage\": \"Instance Group Manager 'apache-mig-timeout' initiated recreateInstance on instance 'projects/123456012345/zones/us-central1-c/instances/apache-instance-7ssf'. Reason: Instance eligible for repair: instance unhealthy.\",\n          \"targetId\": \"6200748239440076168\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/apache-instance-7ssf\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"endTime\": \"2025-03-18T15:03:26.321-07:00\",\n          \"id\": \"4760431510777254721\",\n          \"insertTime\": \"2025-03-18T15:03:26.321-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"repair-1742335406321-630a512f92e53-4bbfe414-a078f9ef\",\n          \"operationType\": \"compute.instances.repair.recreateInstance\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/repair-1742335406321-630a512f92e53-4bbfe414-a078f9ef\",\n          \"startTime\": \"2025-03-18T15:03:26.321-07:00\",\n          \"status\": \"DONE\",\n          \"statusMessage\": \"Instance Group Manager 'apache-mig-timeout' initiated recreateInstance on instance 'projects/123456012345/zones/us-central1-c/instances/apache-instance-7ssf'. Reason: Instance eligible for repair: instance unhealthy.\",\n          \"targetId\": \"6200748239440076168\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/apache-instance-7ssf\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"endTime\": \"2025-03-18T15:12:32.157-07:00\",\n          \"id\": \"4473260917805830463\",\n          \"insertTime\": \"2025-03-18T15:12:32.157-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"repair-1742335952157-630a53381fbeb-70e6cd6c-e85463e5\",\n          \"operationType\": \"compute.instances.repair.recreateInstance\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/repair-1742335952157-630a53381fbeb-70e6cd6c-e85463e5\",\n          \"startTime\": \"2025-03-18T15:12:32.157-07:00\",\n          \"status\": \"DONE\",\n          \"statusMessage\": \"Instance Group Manager 'apache-mig-timeout' initiated recreateInstance on instance 'projects/123456012345/zones/us-central1-c/instances/apache-instance-7ssf'. Reason: Instance eligible for repair: instance unhealthy.\",\n          \"targetId\": \"6200748239440076168\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/apache-instance-7ssf\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"endTime\": \"2025-03-18T15:25:21.806-07:00\",\n          \"id\": \"3236923211211099198\",\n          \"insertTime\": \"2025-03-18T15:25:21.806-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"repair-1742336721806-630a56161e526-e8aeea81-4d2a0802\",\n          \"operationType\": \"compute.instances.repair.recreateInstance\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/repair-1742336721806-630a56161e526-e8aeea81-4d2a0802\",\n          \"startTime\": \"2025-03-18T15:25:21.806-07:00\",\n          \"status\": \"DONE\",\n          \"statusMessage\": \"Instance Group Manager 'apache-mig-timeout' initiated recreateInstance on instance 'projects/123456012345/zones/us-central1-c/instances/apache-instance-7ssf'. Reason: Instance eligible for repair: instance unhealthy.\",\n          \"targetId\": \"6200748239440076168\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/apache-instance-7ssf\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"endTime\": \"2025-03-18T15:43:42.606-07:00\",\n          \"id\": \"3118600646072486385\",\n          \"insertTime\": \"2025-03-18T15:43:42.606-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"repair-1742337822606-630a5a2fec442-e5de551a-ac28cda9\",\n          \"operationType\": \"compute.instances.repair.recreateInstance\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/repair-1742337822606-630a5a2fec442-e5de551a-ac28cda9\",\n          \"startTime\": \"2025-03-18T15:43:42.606-07:00\",\n          \"status\": \"DONE\",\n          \"statusMessage\": \"Instance Group Manager 'apache-mig-timeout' initiated recreateInstance on instance 'projects/123456012345/zones/us-central1-c/instances/apache-instance-7ssf'. Reason: Instance eligible for repair: instance unhealthy.\",\n          \"targetId\": \"6200748239440076168\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/apache-instance-7ssf\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"endTime\": \"2025-03-18T16:10:37.370-07:00\",\n          \"id\": \"575080636393735042\",\n          \"insertTime\": \"2025-03-18T16:10:37.370-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"repair-1742339437370-630a6033e1c30-e65f33a2-e3116a2b\",\n          \"operationType\": \"compute.instances.repair.recreateInstance\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/repair-1742339437370-630a6033e1c30-e65f33a2-e3116a2b\",\n          \"startTime\": \"2025-03-18T16:10:37.370-07:00\",\n          \"status\": \"DONE\",\n          \"statusMessage\": \"Instance Group Manager 'apache-mig-timeout' initiated recreateInstance on instance 'projects/123456012345/zones/us-central1-c/instances/apache-instance-7ssf'. Reason: Instance eligible for repair: instance unhealthy.\",\n          \"targetId\": \"6200748239440076168\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/apache-instance-7ssf\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"endTime\": \"2025-03-18T16:50:14.854-07:00\",\n          \"id\": \"1278959990194288729\",\n          \"insertTime\": \"2025-03-18T16:50:14.854-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"repair-1742341814854-630a690f3a3c2-68b36104-516360ab\",\n          \"operationType\": \"compute.instances.repair.recreateInstance\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/repair-1742341814854-630a690f3a3c2-68b36104-516360ab\",\n          \"startTime\": \"2025-03-18T16:50:14.854-07:00\",\n          \"status\": \"DONE\",\n          \"statusMessage\": \"Instance Group Manager 'apache-mig-timeout' initiated recreateInstance on instance 'projects/123456012345/zones/us-central1-c/instances/apache-instance-7ssf'. Reason: Instance eligible for repair: instance unhealthy.\",\n          \"targetId\": \"6200748239440076168\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/apache-instance-7ssf\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"endTime\": \"2025-03-18T17:49:14.114-07:00\",\n          \"id\": \"55663256009157221\",\n          \"insertTime\": \"2025-03-18T17:49:14.114-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"repair-1742345354114-630a763e876cb-7bf97b4a-041cd431\",\n          \"operationType\": \"compute.instances.repair.recreateInstance\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/repair-1742345354114-630a763e876cb-7bf97b4a-041cd431\",\n          \"startTime\": \"2025-03-18T17:49:14.114-07:00\",\n          \"status\": \"DONE\",\n          \"statusMessage\": \"Instance Group Manager 'apache-mig-timeout' initiated recreateInstance on instance 'projects/123456012345/zones/us-central1-c/instances/apache-instance-7ssf'. Reason: Instance eligible for repair: instance unhealthy.\",\n          \"targetId\": \"6200748239440076168\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/apache-instance-7ssf\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"endTime\": \"2025-03-16T10:04:01.491-07:00\",\n          \"id\": \"261300229942983278\",\n          \"insertTime\": \"2025-03-16T10:04:01.491-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"systemevent-1742144641491-63078a880e052-82605118-2dca95ea\",\n          \"operationType\": \"compute.instances.preempted\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/systemevent-1742144641491-63078a880e052-82605118-2dca95ea\",\n          \"startTime\": \"2025-03-16T10:04:01.491-07:00\",\n          \"status\": \"DONE\",\n          \"statusMessage\": \"Instance was preempted.\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"system\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"endTime\": \"2025-03-16T23:00:14.262-07:00\",\n          \"id\": \"2390636099224077441\",\n          \"insertTime\": \"2025-03-16T23:00:14.262-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"systemevent-1742191214262-630838074f9b5-9fa4f9d5-b984944c\",\n          \"operationType\": \"compute.instances.preempted\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/systemevent-1742191214262-630838074f9b5-9fa4f9d5-b984944c\",\n          \"startTime\": \"2025-03-16T23:00:14.262-07:00\",\n          \"status\": \"DONE\",\n          \"statusMessage\": \"Instance was preempted.\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"system\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"endTime\": \"2025-03-17T20:00:07.433-07:00\",\n          \"id\": \"267705641088671576\",\n          \"insertTime\": \"2025-03-17T20:00:07.433-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"systemevent-1742266807433-630951a293789-4c05440d-84c2084d\",\n          \"operationType\": \"compute.instances.preempted\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/systemevent-1742266807433-630951a293789-4c05440d-84c2084d\",\n          \"startTime\": \"2025-03-17T20:00:07.433-07:00\",\n          \"status\": \"DONE\",\n          \"statusMessage\": \"Instance was preempted.\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"system\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"endTime\": \"2025-03-18T07:45:31.560-07:00\",\n          \"id\": \"6232547060608154024\",\n          \"insertTime\": \"2025-03-18T07:45:31.560-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"systemevent-1742309131560-6309ef4e02817-7ac90e7a-fcf0f4d4\",\n          \"operationType\": \"compute.instances.guestTerminate\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/systemevent-1742309131560-6309ef4e02817-7ac90e7a-fcf0f4d4\",\n          \"startTime\": \"2025-03-18T07:45:31.560-07:00\",\n          \"status\": \"DONE\",\n          \"statusMessage\": \"Instance terminated by guest OS shutdown.\",\n          \"targetId\": \"4632680981323459323\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/shielded-vm-integrity-failure\",\n          \"user\": \"system\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      ]\n    },\n    \"zones/us-central1-f\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central1-f\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-central1-f'.\"\n      }\n    },\n    \"zones/us-east1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east1-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-east1-b'.\"\n      }\n    },\n    \"zones/us-east1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east1-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-east1-c'.\"\n      }\n    },\n    \"zones/us-east1-d\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east1-d\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-east1-d'.\"\n      }\n    },\n    \"zones/us-east4-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east4-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-east4-a'.\"\n      }\n    },\n    \"zones/us-east4-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east4-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-east4-b'.\"\n      }\n    },\n    \"zones/us-east4-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east4-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-east4-c'.\"\n      }\n    },\n    \"zones/us-east5-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east5-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-east5-a'.\"\n      }\n    },\n    \"zones/us-east5-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east5-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-east5-b'.\"\n      }\n    },\n    \"zones/us-east5-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east5-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-east5-c'.\"\n      }\n    },\n    \"zones/us-south1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-south1-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-south1-a'.\"\n      }\n    },\n    \"zones/us-south1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-south1-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-south1-b'.\"\n      }\n    },\n    \"zones/us-south1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-south1-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-south1-c'.\"\n      }\n    },\n    \"zones/us-west1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west1-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-west1-a'.\"\n      }\n    },\n    \"zones/us-west1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west1-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-west1-b'.\"\n      }\n    },\n    \"zones/us-west1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west1-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-west1-c'.\"\n      }\n    },\n    \"zones/us-west2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west2-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-west2-a'.\"\n      }\n    },\n    \"zones/us-west2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west2-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-west2-b'.\"\n      }\n    },\n    \"zones/us-west2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west2-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-west2-c'.\"\n      }\n    },\n    \"zones/us-west3-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west3-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-west3-a'.\"\n      }\n    },\n    \"zones/us-west3-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west3-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-west3-b'.\"\n      }\n    },\n    \"zones/us-west3-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west3-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-west3-c'.\"\n      }\n    },\n    \"zones/us-west4-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west4-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-west4-a'.\"\n      }\n    },\n    \"zones/us-west4-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west4-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-west4-b'.\"\n      }\n    },\n    \"zones/us-west4-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west4-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-west4-c'.\"\n      }\n    }\n  },\n  \"kind\": \"compute#operationAggregatedList\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/aggregated/operations\"\n}\n"
  },
  {
    "path": "test-data/gce5/json-dumps/healthChecks.json",
    "content": "{\n  \"kind\": \"compute#healthCheckList\",\n  \"id\": \"projects/gcpdiag-gce5-aaaa/global/healthChecks/\",\n  \"items\": [\n    {\n      \"kind\": \"compute#healthCheck\",\n      \"id\": \"7922431857666579912\",\n      \"creationTimestamp\": \"2025-03-18T14:18:31.147-07:00\",\n      \"name\": \"apache-health-check\",\n      \"checkIntervalSec\": 10,\n      \"timeoutSec\": 5,\n      \"unhealthyThreshold\": 2,\n      \"healthyThreshold\": 2,\n      \"type\": \"HTTP\",\n      \"httpHealthCheck\": {\n        \"port\": 80,\n        \"requestPath\": \"/\",\n        \"proxyHeader\": \"NONE\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/global/healthChecks/apache-health-check\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/global/healthChecks/\"\n}\n"
  },
  {
    "path": "test-data/gce5/json-dumps/iam-policy.json",
    "content": "{\n  \"bindings\": [\n    {\n      \"members\": [\n        \"serviceAccount:service-123456012345@compute-system.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"projects/gcpdiag-gce5-aaaa/roles/instanceScheduler\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-123456012345@compute-system.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/compute.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:123456012345-compute@developer.gserviceaccount.com\",\n        \"serviceAccount:123456012345@cloudservices.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/editor\"\n    },\n    {\n      \"members\": [\n        \"user:testuser@example.com\"\n      ],\n      \"role\": \"roles/owner\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-123456012345@gcp-sa-websecurityscanner.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/websecurityscanner.serviceAgent\"\n    }\n  ],\n  \"etag\": \"BwYwTlwh9Vo=\",\n  \"version\": 1\n}\n"
  },
  {
    "path": "test-data/gce5/json-dumps/iam-service-accounts.json",
    "content": "{\n  \"accounts\": [\n    {\n      \"displayName\": \"Compute Engine default service account\",\n      \"email\": \"123456012345-compute@developer.gserviceaccount.com\",\n      \"etag\": \"MDEwMjE5MjA=\",\n      \"name\": \"projects/gcpdiag-gce5-aaaa/serviceAccounts/123456012345-compute@developer.gserviceaccount.com\",\n      \"oauth2ClientId\": \"REDACTED\",\n      \"projectId\": \"gcpdiag-gce5-aaaa\",\n      \"uniqueId\": \"112026732876443057743\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gce5/json-dumps/logging-entries-1.json",
    "content": "{\n  \"entries\": [\n    {\n      \"insertId\": \"-mg77tldhknc\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1742252700457-63091d151d90c-4c8048a3-5c92c5c7\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\"\n        },\n        \"requestMetadata\": {},\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/spot-vm-termination\",\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T23:05:49.019156357Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T23:05:48.381630Z\"\n    },\n    {\n      \"insertId\": \"fjh0xudbtr2\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1742252700454-63091d151cd36-59aa0fcc-d87a35a9\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\"\n        },\n        \"requestMetadata\": {},\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm\",\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T23:05:47.113209466Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T23:05:47.024917Z\"\n    },\n    {\n      \"insertId\": \"-3kpfhrdus74\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742252700457-63091d151d90c-4c8048a3-5c92c5c7\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"ff649886-78e9-3f93-8ff8-14c745b50f2d\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"ff649886-78e9-3f93-8ff8-14c745b50f2d\",\n          \"id\": \"2919161447385994355\",\n          \"insertTime\": \"2025-03-17T16:05:00.873-07:00\",\n          \"name\": \"operation-1742252700457-63091d151d90c-4c8048a3-5c92c5c7\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742252700457-63091d151d90c-4c8048a3-5c92c5c7\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/2919161447385994355\",\n          \"startTime\": \"2025-03-17T16:05:00.900-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T23:05:01.002643188Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T23:05:00.954233Z\"\n    },\n    {\n      \"insertId\": \"-3kpfhrdus72\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742252700454-63091d151cd36-59aa0fcc-d87a35a9\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"f2781d82-d1f5-3fae-9668-8be251b2956d\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"f2781d82-d1f5-3fae-9668-8be251b2956d\",\n          \"id\": \"5641947885851710579\",\n          \"insertTime\": \"2025-03-17T16:05:00.855-07:00\",\n          \"name\": \"operation-1742252700454-63091d151cd36-59aa0fcc-d87a35a9\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742252700454-63091d151cd36-59aa0fcc-d87a35a9\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/5641947885851710579\",\n          \"startTime\": \"2025-03-17T16:05:00.875-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T23:05:01.002643188Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T23:05:00.920872Z\"\n    },\n    {\n      \"insertId\": \"u8w6xue538k0\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742252700454-63091d151cd36-59aa0fcc-d87a35a9\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"authorizationInfo\": [\n          {\n            \"granted\": true,\n            \"permission\": \"compute.instances.stop\",\n            \"permissionType\": \"ADMIN_WRITE\",\n            \"resource\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n            \"resourceAttributes\": {\n              \"name\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n              \"service\": \"compute\",\n              \"type\": \"compute.instances\"\n            }\n          }\n        ],\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\",\n          \"requestId\": \"f2781d82-d1f5-3fae-9668-8be251b2956d\"\n        },\n        \"requestMetadata\": {\n          \"destinationAttributes\": {},\n          \"requestAttributes\": {\n            \"auth\": {},\n            \"time\": \"2025-03-17T23:05:00.910396Z\"\n          }\n        },\n        \"resourceLocation\": {\n          \"currentLocations\": [\n            \"us-central1-c\"\n          ]\n        },\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm\",\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"f2781d82-d1f5-3fae-9668-8be251b2956d\",\n          \"id\": \"5641947885851710579\",\n          \"insertTime\": \"2025-03-17T16:05:00.855-07:00\",\n          \"name\": \"operation-1742252700454-63091d151cd36-59aa0fcc-d87a35a9\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742252700454-63091d151cd36-59aa0fcc-d87a35a9\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/5641947885851710579\",\n          \"startTime\": \"2025-03-17T16:05:00.875-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T23:05:01.025031424Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T23:05:00.419086Z\"\n    },\n    {\n      \"insertId\": \"-n0eptue32cs2\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742252700457-63091d151d90c-4c8048a3-5c92c5c7\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"authorizationInfo\": [\n          {\n            \"granted\": true,\n            \"permission\": \"compute.instances.stop\",\n            \"permissionType\": \"ADMIN_WRITE\",\n            \"resource\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n            \"resourceAttributes\": {\n              \"name\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n              \"service\": \"compute\",\n              \"type\": \"compute.instances\"\n            }\n          }\n        ],\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\",\n          \"requestId\": \"ff649886-78e9-3f93-8ff8-14c745b50f2d\"\n        },\n        \"requestMetadata\": {\n          \"destinationAttributes\": {},\n          \"requestAttributes\": {\n            \"auth\": {},\n            \"time\": \"2025-03-17T23:05:00.937936Z\"\n          }\n        },\n        \"resourceLocation\": {\n          \"currentLocations\": [\n            \"us-central1-c\"\n          ]\n        },\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/spot-vm-termination\",\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"ff649886-78e9-3f93-8ff8-14c745b50f2d\",\n          \"id\": \"2919161447385994355\",\n          \"insertTime\": \"2025-03-17T16:05:00.873-07:00\",\n          \"name\": \"operation-1742252700457-63091d151d90c-4c8048a3-5c92c5c7\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742252700457-63091d151d90c-4c8048a3-5c92c5c7\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/2919161447385994355\",\n          \"startTime\": \"2025-03-17T16:05:00.900-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T23:05:01.247494127Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T23:05:00.415879Z\"\n    },\n    {\n      \"insertId\": \"-yelho5dywbc\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742252401994-63091bf87a9c6-814a5188-36322e94\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"8b91c7fe-c25e-3f0e-85aa-c106191d9303\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"8b91c7fe-c25e-3f0e-85aa-c106191d9303\",\n          \"endTime\": \"2025-03-17T16:00:03.476-07:00\",\n          \"id\": \"4085618842073896860\",\n          \"insertTime\": \"2025-03-17T16:00:03.462-07:00\",\n          \"name\": \"operation-1742252401994-63091bf87a9c6-814a5188-36322e94\",\n          \"operationType\": \"start\",\n          \"progress\": \"100\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742252401994-63091bf87a9c6-814a5188-36322e94\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/4085618842073896860\",\n          \"startTime\": \"2025-03-17T16:00:03.476-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"4632680981323459323\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/shielded-vm-integrity-failure\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T23:00:03.957425869Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"4632680981323459323\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T23:00:03.529895Z\"\n    },\n    {\n      \"insertId\": \"1z3k6xdwx9e\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742252401684-63091bf82f188-e24a1a44-287f83dd\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"c547046a-782a-34bf-8283-05e7990b9177\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"c547046a-782a-34bf-8283-05e7990b9177\",\n          \"id\": \"7653346074898536348\",\n          \"insertTime\": \"2025-03-17T16:00:03.286-07:00\",\n          \"name\": \"operation-1742252401684-63091bf82f188-e24a1a44-287f83dd\",\n          \"operationType\": \"start\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742252401684-63091bf82f188-e24a1a44-287f83dd\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/7653346074898536348\",\n          \"startTime\": \"2025-03-17T16:00:03.324-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T23:00:04.342051519Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T23:00:03.375134Z\"\n    },\n    {\n      \"insertId\": \"1z3k6xdwx9c\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742252401662-63091bf829c0d-e25b8e59-d0f094a9\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"485e8727-ba83-3712-b33d-18e8fec4bb1c\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"485e8727-ba83-3712-b33d-18e8fec4bb1c\",\n          \"id\": \"1738976916313282460\",\n          \"insertTime\": \"2025-03-17T16:00:03.252-07:00\",\n          \"name\": \"operation-1742252401662-63091bf829c0d-e25b8e59-d0f094a9\",\n          \"operationType\": \"start\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742252401662-63091bf829c0d-e25b8e59-d0f094a9\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/1738976916313282460\",\n          \"startTime\": \"2025-03-17T16:00:03.272-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T23:00:03.348516591Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T23:00:03.319911Z\"\n    },\n    {\n      \"insertId\": \"-6n48d9d9swk\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1742249100445-63090fabe06d2-bf84d04c-98662000\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\"\n        },\n        \"requestMetadata\": {},\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm\",\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T22:05:48.637707452Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T22:05:47.677700Z\"\n    },\n    {\n      \"insertId\": \"hhdp05dm4pc\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1742249100446-63090fabe0944-9b170c77-a11c5375\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\"\n        },\n        \"requestMetadata\": {},\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/spot-vm-termination\",\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T22:05:48.181427151Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T22:05:47.496879Z\"\n    },\n    {\n      \"insertId\": \"1z3k6xdwkc0\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742249100445-63090fabe06d2-bf84d04c-98662000\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"487874bd-8c8e-3d08-850a-2f7651392633\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"487874bd-8c8e-3d08-850a-2f7651392633\",\n          \"id\": \"1647750505276187235\",\n          \"insertTime\": \"2025-03-17T15:05:00.893-07:00\",\n          \"name\": \"operation-1742249100445-63090fabe06d2-bf84d04c-98662000\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742249100445-63090fabe06d2-bf84d04c-98662000\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/1647750505276187235\",\n          \"startTime\": \"2025-03-17T15:05:00.922-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T22:05:01.104328462Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T22:05:00.972464Z\"\n    },\n    {\n      \"insertId\": \"1z3k6xdwkby\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742249100446-63090fabe0944-9b170c77-a11c5375\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"74692df8-d203-3bba-bae5-0c26d55957cd\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"74692df8-d203-3bba-bae5-0c26d55957cd\",\n          \"id\": \"457574256775340643\",\n          \"insertTime\": \"2025-03-17T15:05:00.882-07:00\",\n          \"name\": \"operation-1742249100446-63090fabe0944-9b170c77-a11c5375\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742249100446-63090fabe0944-9b170c77-a11c5375\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/457574256775340643\",\n          \"startTime\": \"2025-03-17T15:05:00.907-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T22:05:01.104328462Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T22:05:00.960196Z\"\n    },\n    {\n      \"insertId\": \"-lm4yw0e4dd6q\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742249100446-63090fabe0944-9b170c77-a11c5375\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"authorizationInfo\": [\n          {\n            \"granted\": true,\n            \"permission\": \"compute.instances.stop\",\n            \"permissionType\": \"ADMIN_WRITE\",\n            \"resource\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n            \"resourceAttributes\": {\n              \"name\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n              \"service\": \"compute\",\n              \"type\": \"compute.instances\"\n            }\n          }\n        ],\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\",\n          \"requestId\": \"74692df8-d203-3bba-bae5-0c26d55957cd\"\n        },\n        \"requestMetadata\": {\n          \"destinationAttributes\": {},\n          \"requestAttributes\": {\n            \"auth\": {},\n            \"time\": \"2025-03-17T22:05:00.944013Z\"\n          }\n        },\n        \"resourceLocation\": {\n          \"currentLocations\": [\n            \"us-central1-c\"\n          ]\n        },\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/spot-vm-termination\",\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"74692df8-d203-3bba-bae5-0c26d55957cd\",\n          \"id\": \"457574256775340643\",\n          \"insertTime\": \"2025-03-17T15:05:00.882-07:00\",\n          \"name\": \"operation-1742249100446-63090fabe0944-9b170c77-a11c5375\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742249100446-63090fabe0944-9b170c77-a11c5375\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/457574256775340643\",\n          \"startTime\": \"2025-03-17T15:05:00.907-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T22:05:01.752149951Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T22:05:00.410218Z\"\n    },\n    {\n      \"insertId\": \"3nkncqe3n4lq\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742249100445-63090fabe06d2-bf84d04c-98662000\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"authorizationInfo\": [\n          {\n            \"granted\": true,\n            \"permission\": \"compute.instances.stop\",\n            \"permissionType\": \"ADMIN_WRITE\",\n            \"resource\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n            \"resourceAttributes\": {\n              \"name\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n              \"service\": \"compute\",\n              \"type\": \"compute.instances\"\n            }\n          }\n        ],\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\",\n          \"requestId\": \"487874bd-8c8e-3d08-850a-2f7651392633\"\n        },\n        \"requestMetadata\": {\n          \"destinationAttributes\": {},\n          \"requestAttributes\": {\n            \"auth\": {},\n            \"time\": \"2025-03-17T22:05:00.962755Z\"\n          }\n        },\n        \"resourceLocation\": {\n          \"currentLocations\": [\n            \"us-central1-c\"\n          ]\n        },\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm\",\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"487874bd-8c8e-3d08-850a-2f7651392633\",\n          \"id\": \"1647750505276187235\",\n          \"insertTime\": \"2025-03-17T15:05:00.893-07:00\",\n          \"name\": \"operation-1742249100445-63090fabe06d2-bf84d04c-98662000\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742249100445-63090fabe06d2-bf84d04c-98662000\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/1647750505276187235\",\n          \"startTime\": \"2025-03-17T15:05:00.922-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T22:05:01.272002888Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T22:05:00.406067Z\"\n    },\n    {\n      \"insertId\": \"1z3k6xdwj86\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742248801494-63090e8ec6708-050ed621-7be93ab8\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"d67c3e8e-7664-34f5-976f-669e00aa8698\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"d67c3e8e-7664-34f5-976f-669e00aa8698\",\n          \"endTime\": \"2025-03-17T15:00:03.253-07:00\",\n          \"id\": \"3848785218566956428\",\n          \"insertTime\": \"2025-03-17T15:00:03.218-07:00\",\n          \"name\": \"operation-1742248801494-63090e8ec6708-050ed621-7be93ab8\",\n          \"operationType\": \"start\",\n          \"progress\": \"100\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742248801494-63090e8ec6708-050ed621-7be93ab8\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/3848785218566956428\",\n          \"startTime\": \"2025-03-17T15:00:03.253-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"4632680981323459323\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/shielded-vm-integrity-failure\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T22:00:04.038409652Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"4632680981323459323\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T22:00:03.315089Z\"\n    },\n    {\n      \"insertId\": \"-omopezdrj5q\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742248801596-63090e8edf5d9-4286f753-28679149\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"858592d1-edd9-348d-b827-df3526a3083b\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"858592d1-edd9-348d-b827-df3526a3083b\",\n          \"id\": \"2373641592238318988\",\n          \"insertTime\": \"2025-03-17T15:00:03.198-07:00\",\n          \"name\": \"operation-1742248801596-63090e8edf5d9-4286f753-28679149\",\n          \"operationType\": \"start\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742248801596-63090e8edf5d9-4286f753-28679149\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/2373641592238318988\",\n          \"startTime\": \"2025-03-17T15:00:03.224-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T22:00:04.212957341Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T22:00:03.280666Z\"\n    },\n    {\n      \"insertId\": \"-omopezdrj5o\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742248801594-63090e8ededf8-4450bf48-3626c199\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"abecd5c1-6573-391f-8324-017c183e3a33\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"abecd5c1-6573-391f-8324-017c183e3a33\",\n          \"id\": \"3819483993895937420\",\n          \"insertTime\": \"2025-03-17T15:00:03.178-07:00\",\n          \"name\": \"operation-1742248801594-63090e8ededf8-4450bf48-3626c199\",\n          \"operationType\": \"start\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742248801594-63090e8ededf8-4450bf48-3626c199\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/3819483993895937420\",\n          \"startTime\": \"2025-03-17T15:00:03.206-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T22:00:04.212957341Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T22:00:03.248032Z\"\n    },\n    {\n      \"insertId\": \"-itrzpzdi8d8\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1742245500452-63090242a7df7-e2e2ffb5-520695e0\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\"\n        },\n        \"requestMetadata\": {},\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm\",\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T21:05:51.568455739Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T21:05:51.254862Z\"\n    },\n    {\n      \"insertId\": \"tgci4add53y\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1742245500442-63090242a58d7-f4ec298e-750d0efd\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\"\n        },\n        \"requestMetadata\": {},\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/spot-vm-termination\",\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T21:05:47.989594931Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T21:05:47.353407Z\"\n    },\n    {\n      \"insertId\": \"-7px7v0dqfdq\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742245500442-63090242a58d7-f4ec298e-750d0efd\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"49477e9c-8e6a-3f9b-81fa-3dd97ca77da1\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"49477e9c-8e6a-3f9b-81fa-3dd97ca77da1\",\n          \"id\": \"8685744822880120979\",\n          \"insertTime\": \"2025-03-17T14:05:00.863-07:00\",\n          \"name\": \"operation-1742245500442-63090242a58d7-f4ec298e-750d0efd\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742245500442-63090242a58d7-f4ec298e-750d0efd\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/8685744822880120979\",\n          \"startTime\": \"2025-03-17T14:05:00.887-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T21:05:01.087413741Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T21:05:00.943373Z\"\n    },\n    {\n      \"insertId\": \"-7px7v0dqfdo\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742245500452-63090242a7df7-e2e2ffb5-520695e0\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"e8ec1c70-0a74-3531-9429-65f8512b35c6\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"e8ec1c70-0a74-3531-9429-65f8512b35c6\",\n          \"id\": \"1355885036308869267\",\n          \"insertTime\": \"2025-03-17T14:05:00.856-07:00\",\n          \"name\": \"operation-1742245500452-63090242a7df7-e2e2ffb5-520695e0\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742245500452-63090242a7df7-e2e2ffb5-520695e0\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/1355885036308869267\",\n          \"startTime\": \"2025-03-17T14:05:00.879-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T21:05:01.087413741Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T21:05:00.933617Z\"\n    },\n    {\n      \"insertId\": \"-cftnmze42hyg\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742245500452-63090242a7df7-e2e2ffb5-520695e0\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"authorizationInfo\": [\n          {\n            \"granted\": true,\n            \"permission\": \"compute.instances.stop\",\n            \"permissionType\": \"ADMIN_WRITE\",\n            \"resource\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n            \"resourceAttributes\": {\n              \"name\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n              \"service\": \"compute\",\n              \"type\": \"compute.instances\"\n            }\n          }\n        ],\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\",\n          \"requestId\": \"e8ec1c70-0a74-3531-9429-65f8512b35c6\"\n        },\n        \"requestMetadata\": {\n          \"destinationAttributes\": {},\n          \"requestAttributes\": {\n            \"auth\": {},\n            \"time\": \"2025-03-17T21:05:00.916535Z\"\n          }\n        },\n        \"resourceLocation\": {\n          \"currentLocations\": [\n            \"us-central1-c\"\n          ]\n        },\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm\",\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"e8ec1c70-0a74-3531-9429-65f8512b35c6\",\n          \"id\": \"1355885036308869267\",\n          \"insertTime\": \"2025-03-17T14:05:00.856-07:00\",\n          \"name\": \"operation-1742245500452-63090242a7df7-e2e2ffb5-520695e0\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742245500452-63090242a7df7-e2e2ffb5-520695e0\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/1355885036308869267\",\n          \"startTime\": \"2025-03-17T14:05:00.879-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T21:05:00.980321735Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T21:05:00.416674Z\"\n    },\n    {\n      \"insertId\": \"-lb10cae5l1iu\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742245500442-63090242a58d7-f4ec298e-750d0efd\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"authorizationInfo\": [\n          {\n            \"granted\": true,\n            \"permission\": \"compute.instances.stop\",\n            \"permissionType\": \"ADMIN_WRITE\",\n            \"resource\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n            \"resourceAttributes\": {\n              \"name\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n              \"service\": \"compute\",\n              \"type\": \"compute.instances\"\n            }\n          }\n        ],\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\",\n          \"requestId\": \"49477e9c-8e6a-3f9b-81fa-3dd97ca77da1\"\n        },\n        \"requestMetadata\": {\n          \"destinationAttributes\": {},\n          \"requestAttributes\": {\n            \"auth\": {},\n            \"time\": \"2025-03-17T21:05:00.925584Z\"\n          }\n        },\n        \"resourceLocation\": {\n          \"currentLocations\": [\n            \"us-central1-c\"\n          ]\n        },\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/spot-vm-termination\",\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"49477e9c-8e6a-3f9b-81fa-3dd97ca77da1\",\n          \"id\": \"8685744822880120979\",\n          \"insertTime\": \"2025-03-17T14:05:00.863-07:00\",\n          \"name\": \"operation-1742245500442-63090242a58d7-f4ec298e-750d0efd\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742245500442-63090242a58d7-f4ec298e-750d0efd\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/8685744822880120979\",\n          \"startTime\": \"2025-03-17T14:05:00.887-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T21:05:01.333789320Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T21:05:00.410284Z\"\n    },\n    {\n      \"insertId\": \"h8y58ydyydo\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742245201632-63090125addb7-56c549b1-19f68e56\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"46155372-45f1-3830-81ad-7115a7236145\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"46155372-45f1-3830-81ad-7115a7236145\",\n          \"endTime\": \"2025-03-17T14:00:03.200-07:00\",\n          \"id\": \"8568738227131069372\",\n          \"insertTime\": \"2025-03-17T14:00:03.185-07:00\",\n          \"name\": \"operation-1742245201632-63090125addb7-56c549b1-19f68e56\",\n          \"operationType\": \"start\",\n          \"progress\": \"100\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742245201632-63090125addb7-56c549b1-19f68e56\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/8568738227131069372\",\n          \"startTime\": \"2025-03-17T14:00:03.200-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"4632680981323459323\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/shielded-vm-integrity-failure\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T21:00:03.915213889Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"4632680981323459323\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T21:00:03.249004Z\"\n    },\n    {\n      \"insertId\": \"dx29k5dyp2m\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742245201620-63090125aae33-73bc2c1d-1c80352f\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"6a1d1b91-4831-328a-b6eb-21372665308b\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"6a1d1b91-4831-328a-b6eb-21372665308b\",\n          \"id\": \"8939227766850925500\",\n          \"insertTime\": \"2025-03-17T14:00:03.165-07:00\",\n          \"name\": \"operation-1742245201620-63090125aae33-73bc2c1d-1c80352f\",\n          \"operationType\": \"start\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742245201620-63090125aae33-73bc2c1d-1c80352f\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/8939227766850925500\",\n          \"startTime\": \"2025-03-17T14:00:03.186-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T21:00:03.320081831Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T21:00:03.228850Z\"\n    },\n    {\n      \"insertId\": \"dx29k5dyp2k\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742245201601-63090125a63bb-265e11ab-0bfe955a\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"da48e2bf-050f-3985-b50c-57f08f8fded5\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"da48e2bf-050f-3985-b50c-57f08f8fded5\",\n          \"id\": \"2496167306862080956\",\n          \"insertTime\": \"2025-03-17T14:00:03.037-07:00\",\n          \"name\": \"operation-1742245201601-63090125a63bb-265e11ab-0bfe955a\",\n          \"operationType\": \"start\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742245201601-63090125a63bb-265e11ab-0bfe955a\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/2496167306862080956\",\n          \"startTime\": \"2025-03-17T14:00:03.055-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T21:00:03.320081831Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T21:00:03.094737Z\"\n    },\n    {\n      \"insertId\": \"-hha3rrdkgrk\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1742241900439-6308f4d96a8f5-6fd1cc20-c1cf5105\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\"\n        },\n        \"requestMetadata\": {},\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm\",\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T20:05:51.515059046Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T20:05:51.188255Z\"\n    },\n    {\n      \"insertId\": \"l4ll2rdewag\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1742241900442-6308f4d96b215-3652df20-a7e4447d\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\"\n        },\n        \"requestMetadata\": {},\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/spot-vm-termination\",\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T20:05:50.213688296Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T20:05:49.857788Z\"\n    },\n    {\n      \"insertId\": \"-y3nuqgdmegi\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742241900439-6308f4d96a8f5-6fd1cc20-c1cf5105\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"4b4fd0b8-88e0-3b10-b7b0-62761b517c1e\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"4b4fd0b8-88e0-3b10-b7b0-62761b517c1e\",\n          \"id\": \"1424445689449234051\",\n          \"insertTime\": \"2025-03-17T13:05:00.878-07:00\",\n          \"name\": \"operation-1742241900439-6308f4d96a8f5-6fd1cc20-c1cf5105\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742241900439-6308f4d96a8f5-6fd1cc20-c1cf5105\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/1424445689449234051\",\n          \"startTime\": \"2025-03-17T13:05:00.899-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T20:05:01.593013765Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T20:05:00.950906Z\"\n    },\n    {\n      \"insertId\": \"-y3nuqgdmegg\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742241900442-6308f4d96b215-3652df20-a7e4447d\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"970b17b0-9b76-3e39-9f01-94dfdadd760f\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"970b17b0-9b76-3e39-9f01-94dfdadd760f\",\n          \"id\": \"750893701021384323\",\n          \"insertTime\": \"2025-03-17T13:05:00.845-07:00\",\n          \"name\": \"operation-1742241900442-6308f4d96b215-3652df20-a7e4447d\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742241900442-6308f4d96b215-3652df20-a7e4447d\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/750893701021384323\",\n          \"startTime\": \"2025-03-17T13:05:00.866-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T20:05:01.593013765Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T20:05:00.919156Z\"\n    },\n    {\n      \"insertId\": \"-qajnqde4xkaa\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742241900442-6308f4d96b215-3652df20-a7e4447d\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"authorizationInfo\": [\n          {\n            \"granted\": true,\n            \"permission\": \"compute.instances.stop\",\n            \"permissionType\": \"ADMIN_WRITE\",\n            \"resource\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n            \"resourceAttributes\": {\n              \"name\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n              \"service\": \"compute\",\n              \"type\": \"compute.instances\"\n            }\n          }\n        ],\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\",\n          \"requestId\": \"970b17b0-9b76-3e39-9f01-94dfdadd760f\"\n        },\n        \"requestMetadata\": {\n          \"destinationAttributes\": {},\n          \"requestAttributes\": {\n            \"auth\": {},\n            \"time\": \"2025-03-17T20:05:00.902400Z\"\n          }\n        },\n        \"resourceLocation\": {\n          \"currentLocations\": [\n            \"us-central1-c\"\n          ]\n        },\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/spot-vm-termination\",\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"970b17b0-9b76-3e39-9f01-94dfdadd760f\",\n          \"id\": \"750893701021384323\",\n          \"insertTime\": \"2025-03-17T13:05:00.845-07:00\",\n          \"name\": \"operation-1742241900442-6308f4d96b215-3652df20-a7e4447d\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742241900442-6308f4d96b215-3652df20-a7e4447d\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/750893701021384323\",\n          \"startTime\": \"2025-03-17T13:05:00.866-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T20:05:01.576125285Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T20:05:00.408612Z\"\n    },\n    {\n      \"insertId\": \"-f7t3rae2msow\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742241900439-6308f4d96a8f5-6fd1cc20-c1cf5105\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"authorizationInfo\": [\n          {\n            \"granted\": true,\n            \"permission\": \"compute.instances.stop\",\n            \"permissionType\": \"ADMIN_WRITE\",\n            \"resource\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n            \"resourceAttributes\": {\n              \"name\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n              \"service\": \"compute\",\n              \"type\": \"compute.instances\"\n            }\n          }\n        ],\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\",\n          \"requestId\": \"4b4fd0b8-88e0-3b10-b7b0-62761b517c1e\"\n        },\n        \"requestMetadata\": {\n          \"destinationAttributes\": {},\n          \"requestAttributes\": {\n            \"auth\": {},\n            \"time\": \"2025-03-17T20:05:00.932384Z\"\n          }\n        },\n        \"resourceLocation\": {\n          \"currentLocations\": [\n            \"us-central1-c\"\n          ]\n        },\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm\",\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"4b4fd0b8-88e0-3b10-b7b0-62761b517c1e\",\n          \"id\": \"1424445689449234051\",\n          \"insertTime\": \"2025-03-17T13:05:00.878-07:00\",\n          \"name\": \"operation-1742241900439-6308f4d96a8f5-6fd1cc20-c1cf5105\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742241900439-6308f4d96a8f5-6fd1cc20-c1cf5105\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/1424445689449234051\",\n          \"startTime\": \"2025-03-17T13:05:00.899-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T20:05:01.881865633Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T20:05:00.406120Z\"\n    },\n    {\n      \"insertId\": \"dx29k5dy8r8\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742241602342-6308f3bd20de5-86522337-b3d34d70\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"cbf5b6d6-5bad-3695-9a6a-83e1f9f57056\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"cbf5b6d6-5bad-3695-9a6a-83e1f9f57056\",\n          \"endTime\": \"2025-03-17T13:00:04.060-07:00\",\n          \"id\": \"8087362278325076395\",\n          \"insertTime\": \"2025-03-17T13:00:04.036-07:00\",\n          \"name\": \"operation-1742241602342-6308f3bd20de5-86522337-b3d34d70\",\n          \"operationType\": \"start\",\n          \"progress\": \"100\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742241602342-6308f3bd20de5-86522337-b3d34d70\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/8087362278325076395\",\n          \"startTime\": \"2025-03-17T13:00:04.060-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"4632680981323459323\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/shielded-vm-integrity-failure\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T20:00:04.870841069Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"4632680981323459323\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T20:00:04.114199Z\"\n    },\n    {\n      \"insertId\": \"-omopezdqxl6\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742241601534-6308f3bc5bada-6623bfbf-fbdf6b1a\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"610dba90-611f-3133-bec2-f84412654fed\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"610dba90-611f-3133-bec2-f84412654fed\",\n          \"id\": \"1282806567199424940\",\n          \"insertTime\": \"2025-03-17T13:00:03.046-07:00\",\n          \"name\": \"operation-1742241601534-6308f3bc5bada-6623bfbf-fbdf6b1a\",\n          \"operationType\": \"start\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742241601534-6308f3bc5bada-6623bfbf-fbdf6b1a\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/1282806567199424940\",\n          \"startTime\": \"2025-03-17T13:00:03.069-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T20:00:03.741032970Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T20:00:03.115878Z\"\n    },\n    {\n      \"insertId\": \"-omopezdqxl2\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742241601526-6308f3bc59a1b-f8d0f8a5-6984863a\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"7302c121-1829-3a4c-afc6-7f2736f8fd77\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"7302c121-1829-3a4c-afc6-7f2736f8fd77\",\n          \"id\": \"3891675831431709101\",\n          \"insertTime\": \"2025-03-17T13:00:02.078-07:00\",\n          \"name\": \"operation-1742241601526-6308f3bc59a1b-f8d0f8a5-6984863a\",\n          \"operationType\": \"start\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742241601526-6308f3bc59a1b-f8d0f8a5-6984863a\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/3891675831431709101\",\n          \"startTime\": \"2025-03-17T13:00:02.097-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T20:00:02.740151907Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T20:00:02.139158Z\"\n    },\n    {\n      \"insertId\": \"jgn3ekd4678\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1742238301436-6308e77123a71-a066b438-164eefaa\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\"\n        },\n        \"requestMetadata\": {},\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm\",\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T19:06:00.397506245Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T19:05:59.532912Z\"\n    },\n    {\n      \"insertId\": \"ptfhlgd96jk\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1742238301452-6308e771278e9-b508a432-bd5b5f6d\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\"\n        },\n        \"requestMetadata\": {},\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/spot-vm-termination\",\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T19:05:52.629274404Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T19:05:52.017672Z\"\n    },\n    {\n      \"insertId\": \"1z3k6xdvkcs\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742238301452-6308e771278e9-b508a432-bd5b5f6d\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"b410ec84-1c11-3693-ae76-8342c61310d2\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"b410ec84-1c11-3693-ae76-8342c61310d2\",\n          \"id\": \"9055858643155930290\",\n          \"insertTime\": \"2025-03-17T12:05:01.869-07:00\",\n          \"name\": \"operation-1742238301452-6308e771278e9-b508a432-bd5b5f6d\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742238301452-6308e771278e9-b508a432-bd5b5f6d\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/9055858643155930290\",\n          \"startTime\": \"2025-03-17T12:05:01.898-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T19:05:02.054628453Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T19:05:01.953020Z\"\n    },\n    {\n      \"insertId\": \"1z3k6xdvkcq\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742238301436-6308e77123a71-a066b438-164eefaa\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"b1007a2d-dac4-35be-b52d-45d688b9df64\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"b1007a2d-dac4-35be-b52d-45d688b9df64\",\n          \"id\": \"3571285728010030258\",\n          \"insertTime\": \"2025-03-17T12:05:01.867-07:00\",\n          \"name\": \"operation-1742238301436-6308e77123a71-a066b438-164eefaa\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742238301436-6308e77123a71-a066b438-164eefaa\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/3571285728010030258\",\n          \"startTime\": \"2025-03-17T12:05:01.889-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T19:05:02.054628453Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T19:05:01.936751Z\"\n    },\n    {\n      \"insertId\": \"2i6d4he2m412\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742238301452-6308e771278e9-b508a432-bd5b5f6d\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"authorizationInfo\": [\n          {\n            \"granted\": true,\n            \"permission\": \"compute.instances.stop\",\n            \"permissionType\": \"ADMIN_WRITE\",\n            \"resource\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n            \"resourceAttributes\": {\n              \"name\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n              \"service\": \"compute\",\n              \"type\": \"compute.instances\"\n            }\n          }\n        ],\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\",\n          \"requestId\": \"b410ec84-1c11-3693-ae76-8342c61310d2\"\n        },\n        \"requestMetadata\": {\n          \"destinationAttributes\": {},\n          \"requestAttributes\": {\n            \"auth\": {},\n            \"time\": \"2025-03-17T19:05:01.936652Z\"\n          }\n        },\n        \"resourceLocation\": {\n          \"currentLocations\": [\n            \"us-central1-c\"\n          ]\n        },\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/spot-vm-termination\",\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"b410ec84-1c11-3693-ae76-8342c61310d2\",\n          \"id\": \"9055858643155930290\",\n          \"insertTime\": \"2025-03-17T12:05:01.869-07:00\",\n          \"name\": \"operation-1742238301452-6308e771278e9-b508a432-bd5b5f6d\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742238301452-6308e771278e9-b508a432-bd5b5f6d\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/9055858643155930290\",\n          \"startTime\": \"2025-03-17T12:05:01.898-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T19:05:02.568858787Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T19:05:01.410577Z\"\n    },\n    {\n      \"insertId\": \"-oduxbre2xrgo\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742238301436-6308e77123a71-a066b438-164eefaa\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"authorizationInfo\": [\n          {\n            \"granted\": true,\n            \"permission\": \"compute.instances.stop\",\n            \"permissionType\": \"ADMIN_WRITE\",\n            \"resource\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n            \"resourceAttributes\": {\n              \"name\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n              \"service\": \"compute\",\n              \"type\": \"compute.instances\"\n            }\n          }\n        ],\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\",\n          \"requestId\": \"b1007a2d-dac4-35be-b52d-45d688b9df64\"\n        },\n        \"requestMetadata\": {\n          \"destinationAttributes\": {},\n          \"requestAttributes\": {\n            \"auth\": {},\n            \"time\": \"2025-03-17T19:05:01.927047Z\"\n          }\n        },\n        \"resourceLocation\": {\n          \"currentLocations\": [\n            \"us-central1-c\"\n          ]\n        },\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm\",\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"b1007a2d-dac4-35be-b52d-45d688b9df64\",\n          \"id\": \"3571285728010030258\",\n          \"insertTime\": \"2025-03-17T12:05:01.867-07:00\",\n          \"name\": \"operation-1742238301436-6308e77123a71-a066b438-164eefaa\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742238301436-6308e77123a71-a066b438-164eefaa\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/3571285728010030258\",\n          \"startTime\": \"2025-03-17T12:05:01.889-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T19:05:02.901031822Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T19:05:01.403214Z\"\n    },\n    {\n      \"insertId\": \"-omopezdql5e\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742238001614-6308e65335094-f059ea10-55fe2e09\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"5976e362-588b-346d-af2c-7fff7bfc5a30\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"5976e362-588b-346d-af2c-7fff7bfc5a30\",\n          \"id\": \"1818935755527278556\",\n          \"insertTime\": \"2025-03-17T12:00:03.399-07:00\",\n          \"name\": \"operation-1742238001614-6308e65335094-f059ea10-55fe2e09\",\n          \"operationType\": \"start\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742238001614-6308e65335094-f059ea10-55fe2e09\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/1818935755527278556\",\n          \"startTime\": \"2025-03-17T12:00:03.433-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T19:00:03.694650473Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T19:00:03.499166Z\"\n    },\n    {\n      \"insertId\": \"-omopezdql5c\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742238001597-6308e65330c25-1e332116-97724366\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"2ff47e8d-c436-38a2-a69b-e36c37d4398b\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"2ff47e8d-c436-38a2-a69b-e36c37d4398b\",\n          \"id\": \"1943232852102860764\",\n          \"insertTime\": \"2025-03-17T12:00:03.175-07:00\",\n          \"name\": \"operation-1742238001597-6308e65330c25-1e332116-97724366\",\n          \"operationType\": \"start\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742238001597-6308e65330c25-1e332116-97724366\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/1943232852102860764\",\n          \"startTime\": \"2025-03-17T12:00:03.199-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T19:00:03.694650473Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T19:00:03.254265Z\"\n    },\n    {\n      \"insertId\": \"h8y58ydy8ry\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742238001501-6308e6531968b-940917e8-b3d252e6\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"8a9cbe91-8c14-3f4a-a632-06115e962b2b\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"8a9cbe91-8c14-3f4a-a632-06115e962b2b\",\n          \"endTime\": \"2025-03-17T12:00:03.112-07:00\",\n          \"id\": \"428730712409362396\",\n          \"insertTime\": \"2025-03-17T12:00:03.094-07:00\",\n          \"name\": \"operation-1742238001501-6308e6531968b-940917e8-b3d252e6\",\n          \"operationType\": \"start\",\n          \"progress\": \"100\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742238001501-6308e6531968b-940917e8-b3d252e6\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/428730712409362396\",\n          \"startTime\": \"2025-03-17T12:00:03.112-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"4632680981323459323\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/shielded-vm-integrity-failure\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T19:00:04.038993527Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"4632680981323459323\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T19:00:03.166422Z\"\n    },\n    {\n      \"insertId\": \"-lmzj08dil0s\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1742234700439-6308da06f614e-8f091290-e3aacde9\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\"\n        },\n        \"requestMetadata\": {},\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/spot-vm-termination\",\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T18:05:52.126350721Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T18:05:51.183672Z\"\n    },\n    {\n      \"insertId\": \"-eeckr3db8pk\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1742234700433-6308da06f4762-4df0a83c-3386df6f\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\"\n        },\n        \"requestMetadata\": {},\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm\",\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T18:05:51.285129064Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T18:05:50.532033Z\"\n    },\n    {\n      \"insertId\": \"1z3k6xdv99u\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742234700433-6308da06f4762-4df0a83c-3386df6f\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"3616fbed-9c8d-3988-951b-670a42f2ca41\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"3616fbed-9c8d-3988-951b-670a42f2ca41\",\n          \"id\": \"6752826638497864355\",\n          \"insertTime\": \"2025-03-17T11:05:00.881-07:00\",\n          \"name\": \"operation-1742234700433-6308da06f4762-4df0a83c-3386df6f\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742234700433-6308da06f4762-4df0a83c-3386df6f\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/6752826638497864355\",\n          \"startTime\": \"2025-03-17T11:05:00.904-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T18:05:01.227211613Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T18:05:00.955322Z\"\n    },\n    {\n      \"insertId\": \"1z3k6xdv99q\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742234700439-6308da06f614e-8f091290-e3aacde9\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"9bf8c762-6c20-3c14-88cf-144d1ac58915\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"9bf8c762-6c20-3c14-88cf-144d1ac58915\",\n          \"id\": \"4359848204661283491\",\n          \"insertTime\": \"2025-03-17T11:05:00.858-07:00\",\n          \"name\": \"operation-1742234700439-6308da06f614e-8f091290-e3aacde9\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742234700439-6308da06f614e-8f091290-e3aacde9\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/4359848204661283491\",\n          \"startTime\": \"2025-03-17T11:05:00.878-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T18:05:01.227211613Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T18:05:00.916070Z\"\n    },\n    {\n      \"insertId\": \"ht4kmwe4ltvq\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742234700439-6308da06f614e-8f091290-e3aacde9\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"authorizationInfo\": [\n          {\n            \"granted\": true,\n            \"permission\": \"compute.instances.stop\",\n            \"permissionType\": \"ADMIN_WRITE\",\n            \"resource\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n            \"resourceAttributes\": {\n              \"name\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n              \"service\": \"compute\",\n              \"type\": \"compute.instances\"\n            }\n          }\n        ],\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\",\n          \"requestId\": \"9bf8c762-6c20-3c14-88cf-144d1ac58915\"\n        },\n        \"requestMetadata\": {\n          \"destinationAttributes\": {},\n          \"requestAttributes\": {\n            \"auth\": {},\n            \"time\": \"2025-03-17T18:05:00.906233Z\"\n          }\n        },\n        \"resourceLocation\": {\n          \"currentLocations\": [\n            \"us-central1-c\"\n          ]\n        },\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/spot-vm-termination\",\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"9bf8c762-6c20-3c14-88cf-144d1ac58915\",\n          \"id\": \"4359848204661283491\",\n          \"insertTime\": \"2025-03-17T11:05:00.858-07:00\",\n          \"name\": \"operation-1742234700439-6308da06f614e-8f091290-e3aacde9\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742234700439-6308da06f614e-8f091290-e3aacde9\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/4359848204661283491\",\n          \"startTime\": \"2025-03-17T11:05:00.878-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T18:05:01.336485969Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T18:05:00.405649Z\"\n    },\n    {\n      \"insertId\": \"-hr37f8e36ytc\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742234700433-6308da06f4762-4df0a83c-3386df6f\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"authorizationInfo\": [\n          {\n            \"granted\": true,\n            \"permission\": \"compute.instances.stop\",\n            \"permissionType\": \"ADMIN_WRITE\",\n            \"resource\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n            \"resourceAttributes\": {\n              \"name\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n              \"service\": \"compute\",\n              \"type\": \"compute.instances\"\n            }\n          }\n        ],\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\",\n          \"requestId\": \"3616fbed-9c8d-3988-951b-670a42f2ca41\"\n        },\n        \"requestMetadata\": {\n          \"destinationAttributes\": {},\n          \"requestAttributes\": {\n            \"auth\": {},\n            \"time\": \"2025-03-17T18:05:00.938991Z\"\n          }\n        },\n        \"resourceLocation\": {\n          \"currentLocations\": [\n            \"us-central1-c\"\n          ]\n        },\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm\",\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"3616fbed-9c8d-3988-951b-670a42f2ca41\",\n          \"id\": \"6752826638497864355\",\n          \"insertTime\": \"2025-03-17T11:05:00.881-07:00\",\n          \"name\": \"operation-1742234700433-6308da06f4762-4df0a83c-3386df6f\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742234700433-6308da06f4762-4df0a83c-3386df6f\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/6752826638497864355\",\n          \"startTime\": \"2025-03-17T11:05:00.904-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T18:05:01.502337309Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T18:05:00.398580Z\"\n    },\n    {\n      \"insertId\": \"-7px7v0dpn98\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742234401937-6308d8ea496b2-5ae1a297-cc23b8ba\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"2d705521-5336-3d53-a03d-63f1c635f2c0\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"2d705521-5336-3d53-a03d-63f1c635f2c0\",\n          \"endTime\": \"2025-03-17T11:00:03.716-07:00\",\n          \"id\": \"5923532964049051084\",\n          \"insertTime\": \"2025-03-17T11:00:03.658-07:00\",\n          \"name\": \"operation-1742234401937-6308d8ea496b2-5ae1a297-cc23b8ba\",\n          \"operationType\": \"start\",\n          \"progress\": \"100\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742234401937-6308d8ea496b2-5ae1a297-cc23b8ba\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/5923532964049051084\",\n          \"startTime\": \"2025-03-17T11:00:03.716-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"4632680981323459323\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/shielded-vm-integrity-failure\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T18:00:04.275024484Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"4632680981323459323\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T18:00:03.797665Z\"\n    },\n    {\n      \"insertId\": \"-59kb7jdvqdu\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742234401724-6308d8ea1576a-f0db294f-380389f1\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"d4c82b0b-4902-367a-9969-4a17ba74a8c9\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"d4c82b0b-4902-367a-9969-4a17ba74a8c9\",\n          \"id\": \"1701266824281578956\",\n          \"insertTime\": \"2025-03-17T11:00:03.270-07:00\",\n          \"name\": \"operation-1742234401724-6308d8ea1576a-f0db294f-380389f1\",\n          \"operationType\": \"start\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742234401724-6308d8ea1576a-f0db294f-380389f1\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/1701266824281578956\",\n          \"startTime\": \"2025-03-17T11:00:03.295-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T18:00:03.889583503Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T18:00:03.346980Z\"\n    },\n    {\n      \"insertId\": \"-59kb7jdvqds\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742234401685-6308d8ea0be25-afc06d66-7fc96857\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"10dec03e-100a-3f29-8880-ed57d294a84b\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"10dec03e-100a-3f29-8880-ed57d294a84b\",\n          \"id\": \"5752300185689906636\",\n          \"insertTime\": \"2025-03-17T11:00:03.172-07:00\",\n          \"name\": \"operation-1742234401685-6308d8ea0be25-afc06d66-7fc96857\",\n          \"operationType\": \"start\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742234401685-6308d8ea0be25-afc06d66-7fc96857\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/5752300185689906636\",\n          \"startTime\": \"2025-03-17T11:00:03.191-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T18:00:03.889583503Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T18:00:03.241523Z\"\n    },\n    {\n      \"insertId\": \"rheikxdmnui\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1742231100453-6308cc9dbf221-009ae266-64234ed9\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\"\n        },\n        \"requestMetadata\": {},\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/spot-vm-termination\",\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T17:05:53.650202219Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T17:05:53.165983Z\"\n    },\n    {\n      \"insertId\": \"3nttiudvei4\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1742231100444-6308cc9dbcee6-e986153d-1a78fe2c\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\"\n        },\n        \"requestMetadata\": {},\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm\",\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T17:05:52.643043287Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T17:05:52.199015Z\"\n    },\n    {\n      \"insertId\": \"-s9y1ksdbki2\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742231100453-6308cc9dbf221-009ae266-64234ed9\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"20757f02-52e5-3a1f-b849-ed9f5d54fdc4\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"20757f02-52e5-3a1f-b849-ed9f5d54fdc4\",\n          \"id\": \"5707824721303038163\",\n          \"insertTime\": \"2025-03-17T10:05:00.896-07:00\",\n          \"name\": \"operation-1742231100453-6308cc9dbf221-009ae266-64234ed9\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742231100453-6308cc9dbf221-009ae266-64234ed9\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/5707824721303038163\",\n          \"startTime\": \"2025-03-17T10:05:00.957-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T17:05:01.798746474Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T17:05:01.026179Z\"\n    },\n    {\n      \"insertId\": \"-s9y1ksdbki0\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742231100444-6308cc9dbcee6-e986153d-1a78fe2c\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"2a88371a-e7f2-340a-83c1-54db9a8678bd\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"2a88371a-e7f2-340a-83c1-54db9a8678bd\",\n          \"id\": \"8616019215695341779\",\n          \"insertTime\": \"2025-03-17T10:05:00.888-07:00\",\n          \"name\": \"operation-1742231100444-6308cc9dbcee6-e986153d-1a78fe2c\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742231100444-6308cc9dbcee6-e986153d-1a78fe2c\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/8616019215695341779\",\n          \"startTime\": \"2025-03-17T10:05:00.914-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T17:05:01.798746474Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T17:05:00.970367Z\"\n    },\n    {\n      \"insertId\": \"-fskjm6e24bny\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742231100453-6308cc9dbf221-009ae266-64234ed9\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"authorizationInfo\": [\n          {\n            \"granted\": true,\n            \"permission\": \"compute.instances.stop\",\n            \"permissionType\": \"ADMIN_WRITE\",\n            \"resource\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n            \"resourceAttributes\": {\n              \"name\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n              \"service\": \"compute\",\n              \"type\": \"compute.instances\"\n            }\n          }\n        ],\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\",\n          \"requestId\": \"20757f02-52e5-3a1f-b849-ed9f5d54fdc4\"\n        },\n        \"requestMetadata\": {\n          \"destinationAttributes\": {},\n          \"requestAttributes\": {\n            \"auth\": {},\n            \"time\": \"2025-03-17T17:05:01.005461Z\"\n          }\n        },\n        \"resourceLocation\": {\n          \"currentLocations\": [\n            \"us-central1-c\"\n          ]\n        },\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/spot-vm-termination\",\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"20757f02-52e5-3a1f-b849-ed9f5d54fdc4\",\n          \"id\": \"5707824721303038163\",\n          \"insertTime\": \"2025-03-17T10:05:00.896-07:00\",\n          \"name\": \"operation-1742231100453-6308cc9dbf221-009ae266-64234ed9\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742231100453-6308cc9dbf221-009ae266-64234ed9\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/5707824721303038163\",\n          \"startTime\": \"2025-03-17T10:05:00.957-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T17:05:01.765893150Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T17:05:00.407126Z\"\n    },\n    {\n      \"insertId\": \"cs1roce3jv0i\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742231100444-6308cc9dbcee6-e986153d-1a78fe2c\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"authorizationInfo\": [\n          {\n            \"granted\": true,\n            \"permission\": \"compute.instances.stop\",\n            \"permissionType\": \"ADMIN_WRITE\",\n            \"resource\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n            \"resourceAttributes\": {\n              \"name\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n              \"service\": \"compute\",\n              \"type\": \"compute.instances\"\n            }\n          }\n        ],\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\",\n          \"requestId\": \"2a88371a-e7f2-340a-83c1-54db9a8678bd\"\n        },\n        \"requestMetadata\": {\n          \"destinationAttributes\": {},\n          \"requestAttributes\": {\n            \"auth\": {},\n            \"time\": \"2025-03-17T17:05:00.960919Z\"\n          }\n        },\n        \"resourceLocation\": {\n          \"currentLocations\": [\n            \"us-central1-c\"\n          ]\n        },\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm\",\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"2a88371a-e7f2-340a-83c1-54db9a8678bd\",\n          \"id\": \"8616019215695341779\",\n          \"insertTime\": \"2025-03-17T10:05:00.888-07:00\",\n          \"name\": \"operation-1742231100444-6308cc9dbcee6-e986153d-1a78fe2c\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742231100444-6308cc9dbcee6-e986153d-1a78fe2c\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/8616019215695341779\",\n          \"startTime\": \"2025-03-17T10:05:00.914-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T17:05:01.794080807Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T17:05:00.406464Z\"\n    },\n    {\n      \"insertId\": \"-yelho5dwhm8\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742230801560-6308cb80b359b-6e738ab5-bc25ff0d\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"cc88ac38-2c3c-327a-a43d-0b5862405b36\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"cc88ac38-2c3c-327a-a43d-0b5862405b36\",\n          \"id\": \"5983124286661323772\",\n          \"insertTime\": \"2025-03-17T10:00:03.219-07:00\",\n          \"name\": \"operation-1742230801560-6308cb80b359b-6e738ab5-bc25ff0d\",\n          \"operationType\": \"start\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742230801560-6308cb80b359b-6e738ab5-bc25ff0d\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/5983124286661323772\",\n          \"startTime\": \"2025-03-17T10:00:03.251-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T17:00:03.963204742Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T17:00:03.301116Z\"\n    },\n    {\n      \"insertId\": \"-yelho5dwhm6\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742230801525-6308cb80aa98c-5849d3b9-b398320e\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"6d48133c-376d-3083-8676-02cc2e5c9b92\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"6d48133c-376d-3083-8676-02cc2e5c9b92\",\n          \"id\": \"6551260683675495420\",\n          \"insertTime\": \"2025-03-17T10:00:03.096-07:00\",\n          \"name\": \"operation-1742230801525-6308cb80aa98c-5849d3b9-b398320e\",\n          \"operationType\": \"start\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742230801525-6308cb80aa98c-5849d3b9-b398320e\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/6551260683675495420\",\n          \"startTime\": \"2025-03-17T10:00:03.124-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T17:00:03.963204742Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T17:00:03.170387Z\"\n    },\n    {\n      \"insertId\": \"-7px7v0dpelu\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742230802002-6308cb811f0a4-bee55080-d0245c6e\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"1bbd2f6b-89f5-31b3-ba71-ced3054c7380\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"1bbd2f6b-89f5-31b3-ba71-ced3054c7380\",\n          \"endTime\": \"2025-03-17T10:00:02.617-07:00\",\n          \"id\": \"4839343623511600125\",\n          \"insertTime\": \"2025-03-17T10:00:02.598-07:00\",\n          \"name\": \"operation-1742230802002-6308cb811f0a4-bee55080-d0245c6e\",\n          \"operationType\": \"start\",\n          \"progress\": \"100\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742230802002-6308cb811f0a4-bee55080-d0245c6e\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/4839343623511600125\",\n          \"startTime\": \"2025-03-17T10:00:02.617-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"4632680981323459323\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/shielded-vm-integrity-failure\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T17:00:02.847786203Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"4632680981323459323\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T17:00:02.665901Z\"\n    },\n    {\n      \"insertId\": \"az9sbdgmmq\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1742227501456-6308bf3579c38-1eaf3cf5-10fef79b\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\"\n        },\n        \"requestMetadata\": {},\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm\",\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T16:05:53.015386446Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T16:05:52.791276Z\"\n    },\n    {\n      \"insertId\": \"ptgzy0dj1yc\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1742227501457-6308bf3579e9d-8b4922b3-efe6b0f1\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\"\n        },\n        \"requestMetadata\": {},\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/spot-vm-termination\",\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T16:05:51.555624770Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T16:05:50.663645Z\"\n    },\n    {\n      \"insertId\": \"h8y58ydx73m\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742227501457-6308bf3579e9d-8b4922b3-efe6b0f1\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"8146f34f-9fd8-3e91-98a5-0393c793632c\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"8146f34f-9fd8-3e91-98a5-0393c793632c\",\n          \"id\": \"3618352801433122498\",\n          \"insertTime\": \"2025-03-17T09:05:01.887-07:00\",\n          \"name\": \"operation-1742227501457-6308bf3579e9d-8b4922b3-efe6b0f1\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742227501457-6308bf3579e9d-8b4922b3-efe6b0f1\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/3618352801433122498\",\n          \"startTime\": \"2025-03-17T09:05:01.912-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T16:05:02.842969498Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T16:05:01.963446Z\"\n    },\n    {\n      \"insertId\": \"h8y58ydx73k\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742227501456-6308bf3579c38-1eaf3cf5-10fef79b\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"1e16fe82-2bc0-39b3-b7d5-51438e75def7\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"1e16fe82-2bc0-39b3-b7d5-51438e75def7\",\n          \"id\": \"2631688583206270658\",\n          \"insertTime\": \"2025-03-17T09:05:01.876-07:00\",\n          \"name\": \"operation-1742227501456-6308bf3579c38-1eaf3cf5-10fef79b\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742227501456-6308bf3579c38-1eaf3cf5-10fef79b\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/2631688583206270658\",\n          \"startTime\": \"2025-03-17T09:05:01.897-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T16:05:02.842969498Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T16:05:01.949430Z\"\n    },\n    {\n      \"insertId\": \"-x8u8j0e40e28\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742227501457-6308bf3579e9d-8b4922b3-efe6b0f1\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"authorizationInfo\": [\n          {\n            \"granted\": true,\n            \"permission\": \"compute.instances.stop\",\n            \"permissionType\": \"ADMIN_WRITE\",\n            \"resource\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n            \"resourceAttributes\": {\n              \"name\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n              \"service\": \"compute\",\n              \"type\": \"compute.instances\"\n            }\n          }\n        ],\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\",\n          \"requestId\": \"8146f34f-9fd8-3e91-98a5-0393c793632c\"\n        },\n        \"requestMetadata\": {\n          \"destinationAttributes\": {},\n          \"requestAttributes\": {\n            \"auth\": {},\n            \"time\": \"2025-03-17T16:05:01.947639Z\"\n          }\n        },\n        \"resourceLocation\": {\n          \"currentLocations\": [\n            \"us-central1-c\"\n          ]\n        },\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/spot-vm-termination\",\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"8146f34f-9fd8-3e91-98a5-0393c793632c\",\n          \"id\": \"3618352801433122498\",\n          \"insertTime\": \"2025-03-17T09:05:01.887-07:00\",\n          \"name\": \"operation-1742227501457-6308bf3579e9d-8b4922b3-efe6b0f1\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742227501457-6308bf3579e9d-8b4922b3-efe6b0f1\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/3618352801433122498\",\n          \"startTime\": \"2025-03-17T09:05:01.912-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T16:05:02.382558715Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T16:05:01.422391Z\"\n    },\n    {\n      \"insertId\": \"-qbtbvde3z2h0\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742227501456-6308bf3579c38-1eaf3cf5-10fef79b\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"authorizationInfo\": [\n          {\n            \"granted\": true,\n            \"permission\": \"compute.instances.stop\",\n            \"permissionType\": \"ADMIN_WRITE\",\n            \"resource\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n            \"resourceAttributes\": {\n              \"name\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n              \"service\": \"compute\",\n              \"type\": \"compute.instances\"\n            }\n          }\n        ],\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\",\n          \"requestId\": \"1e16fe82-2bc0-39b3-b7d5-51438e75def7\"\n        },\n        \"requestMetadata\": {\n          \"destinationAttributes\": {},\n          \"requestAttributes\": {\n            \"auth\": {},\n            \"time\": \"2025-03-17T16:05:01.933655Z\"\n          }\n        },\n        \"resourceLocation\": {\n          \"currentLocations\": [\n            \"us-central1-c\"\n          ]\n        },\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm\",\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"1e16fe82-2bc0-39b3-b7d5-51438e75def7\",\n          \"id\": \"2631688583206270658\",\n          \"insertTime\": \"2025-03-17T09:05:01.876-07:00\",\n          \"name\": \"operation-1742227501456-6308bf3579c38-1eaf3cf5-10fef79b\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742227501456-6308bf3579c38-1eaf3cf5-10fef79b\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/2631688583206270658\",\n          \"startTime\": \"2025-03-17T09:05:01.897-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T16:05:02.138836050Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T16:05:01.419114Z\"\n    },\n    {\n      \"insertId\": \"-omopezdpr3i\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742227201572-6308be177c015-a2d48b3a-6687fa45\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"24766046-69be-3477-80cb-b5e384263f66\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"24766046-69be-3477-80cb-b5e384263f66\",\n          \"id\": \"6650129014058252780\",\n          \"insertTime\": \"2025-03-17T09:00:03.196-07:00\",\n          \"name\": \"operation-1742227201572-6308be177c015-a2d48b3a-6687fa45\",\n          \"operationType\": \"start\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742227201572-6308be177c015-a2d48b3a-6687fa45\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/6650129014058252780\",\n          \"startTime\": \"2025-03-17T09:00:03.218-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T16:00:03.572044305Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T16:00:03.260036Z\"\n    },\n    {\n      \"insertId\": \"-yelho5dw2te\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742227201477-6308be1764b48-3e4d4d9e-b12db2d8\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"f0560c42-4ce1-3ba9-908f-62f7cd6b1ef9\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"f0560c42-4ce1-3ba9-908f-62f7cd6b1ef9\",\n          \"endTime\": \"2025-03-17T09:00:03.147-07:00\",\n          \"id\": \"5593526935657773548\",\n          \"insertTime\": \"2025-03-17T09:00:03.118-07:00\",\n          \"name\": \"operation-1742227201477-6308be1764b48-3e4d4d9e-b12db2d8\",\n          \"operationType\": \"start\",\n          \"progress\": \"100\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742227201477-6308be1764b48-3e4d4d9e-b12db2d8\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/5593526935657773548\",\n          \"startTime\": \"2025-03-17T09:00:03.147-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"4632680981323459323\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/shielded-vm-integrity-failure\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T16:00:03.422701554Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"4632680981323459323\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T16:00:03.201928Z\"\n    },\n    {\n      \"insertId\": \"-omopezdpr3g\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742227201556-6308be1777f8f-c60fbe93-d5e32061\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"4325022e-d593-3167-9613-31b8a41837e7\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"4325022e-d593-3167-9613-31b8a41837e7\",\n          \"id\": \"4638665940940487148\",\n          \"insertTime\": \"2025-03-17T09:00:03.070-07:00\",\n          \"name\": \"operation-1742227201556-6308be1777f8f-c60fbe93-d5e32061\",\n          \"operationType\": \"start\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742227201556-6308be1777f8f-c60fbe93-d5e32061\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/4638665940940487148\",\n          \"startTime\": \"2025-03-17T09:00:03.090-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T16:00:03.572044305Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T16:00:03.140902Z\"\n    },\n    {\n      \"insertId\": \"8docjydteri\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1742223900503-6308b1cb56d94-0e4390dd-cbf27363\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\"\n        },\n        \"requestMetadata\": {},\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/spot-vm-termination\",\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T15:05:51.721688294Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T15:05:51.007315Z\"\n    },\n    {\n      \"insertId\": \"-1c7wjzdpveo\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1742223900512-6308b1cb590c8-f2ce0478-ca0a0847\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\"\n        },\n        \"requestMetadata\": {},\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm\",\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T15:05:47.357937720Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T15:05:47.118714Z\"\n    },\n    {\n      \"insertId\": \"dx29k5dw7qe\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742223900512-6308b1cb590c8-f2ce0478-ca0a0847\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"fa521aa2-b88f-39a7-9163-85be5ab11a2c\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"fa521aa2-b88f-39a7-9163-85be5ab11a2c\",\n          \"id\": \"5477583477458437363\",\n          \"insertTime\": \"2025-03-17T08:05:00.869-07:00\",\n          \"name\": \"operation-1742223900512-6308b1cb590c8-f2ce0478-ca0a0847\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742223900512-6308b1cb590c8-f2ce0478-ca0a0847\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/5477583477458437363\",\n          \"startTime\": \"2025-03-17T08:05:00.891-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T15:05:01.278641425Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T15:05:00.957872Z\"\n    },\n    {\n      \"insertId\": \"dx29k5dw7qc\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742223900503-6308b1cb56d94-0e4390dd-cbf27363\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"d5196fd6-848d-342a-b624-b79c47fa992f\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"d5196fd6-848d-342a-b624-b79c47fa992f\",\n          \"id\": \"4017972179448988915\",\n          \"insertTime\": \"2025-03-17T08:05:00.874-07:00\",\n          \"name\": \"operation-1742223900503-6308b1cb56d94-0e4390dd-cbf27363\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742223900503-6308b1cb56d94-0e4390dd-cbf27363\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/4017972179448988915\",\n          \"startTime\": \"2025-03-17T08:05:00.899-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T15:05:01.278641425Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T15:05:00.952283Z\"\n    },\n    {\n      \"insertId\": \"-qm10d0e3b9vm\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742223900512-6308b1cb590c8-f2ce0478-ca0a0847\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"authorizationInfo\": [\n          {\n            \"granted\": true,\n            \"permission\": \"compute.instances.stop\",\n            \"permissionType\": \"ADMIN_WRITE\",\n            \"resource\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n            \"resourceAttributes\": {\n              \"name\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n              \"service\": \"compute\",\n              \"type\": \"compute.instances\"\n            }\n          }\n        ],\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\",\n          \"requestId\": \"fa521aa2-b88f-39a7-9163-85be5ab11a2c\"\n        },\n        \"requestMetadata\": {\n          \"destinationAttributes\": {},\n          \"requestAttributes\": {\n            \"auth\": {},\n            \"time\": \"2025-03-17T15:05:00.940717Z\"\n          }\n        },\n        \"resourceLocation\": {\n          \"currentLocations\": [\n            \"us-central1-c\"\n          ]\n        },\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm\",\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"fa521aa2-b88f-39a7-9163-85be5ab11a2c\",\n          \"id\": \"5477583477458437363\",\n          \"insertTime\": \"2025-03-17T08:05:00.869-07:00\",\n          \"name\": \"operation-1742223900512-6308b1cb590c8-f2ce0478-ca0a0847\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742223900512-6308b1cb590c8-f2ce0478-ca0a0847\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/5477583477458437363\",\n          \"startTime\": \"2025-03-17T08:05:00.891-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T15:05:01.577989663Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T15:05:00.480081Z\"\n    },\n    {\n      \"insertId\": \"-y3humge4jzni\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742223900503-6308b1cb56d94-0e4390dd-cbf27363\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"authorizationInfo\": [\n          {\n            \"granted\": true,\n            \"permission\": \"compute.instances.stop\",\n            \"permissionType\": \"ADMIN_WRITE\",\n            \"resource\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n            \"resourceAttributes\": {\n              \"name\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n              \"service\": \"compute\",\n              \"type\": \"compute.instances\"\n            }\n          }\n        ],\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\",\n          \"requestId\": \"d5196fd6-848d-342a-b624-b79c47fa992f\"\n        },\n        \"requestMetadata\": {\n          \"destinationAttributes\": {},\n          \"requestAttributes\": {\n            \"auth\": {},\n            \"time\": \"2025-03-17T15:05:00.942611Z\"\n          }\n        },\n        \"resourceLocation\": {\n          \"currentLocations\": [\n            \"us-central1-c\"\n          ]\n        },\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/spot-vm-termination\",\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"d5196fd6-848d-342a-b624-b79c47fa992f\",\n          \"id\": \"4017972179448988915\",\n          \"insertTime\": \"2025-03-17T08:05:00.874-07:00\",\n          \"name\": \"operation-1742223900503-6308b1cb56d94-0e4390dd-cbf27363\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742223900503-6308b1cb56d94-0e4390dd-cbf27363\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/4017972179448988915\",\n          \"startTime\": \"2025-03-17T08:05:00.899-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T15:05:01.469694422Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T15:05:00.467694Z\"\n    },\n    {\n      \"insertId\": \"-59kb7jduls4\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742223602658-6308b0af4ae95-5040c88d-3d45ca7f\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"14854925-b5a9-335f-803d-59da45294459\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"14854925-b5a9-335f-803d-59da45294459\",\n          \"id\": \"7753500576187778587\",\n          \"insertTime\": \"2025-03-17T08:00:04.313-07:00\",\n          \"name\": \"operation-1742223602658-6308b0af4ae95-5040c88d-3d45ca7f\",\n          \"operationType\": \"start\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742223602658-6308b0af4ae95-5040c88d-3d45ca7f\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/7753500576187778587\",\n          \"startTime\": \"2025-03-17T08:00:04.340-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T15:00:04.884930777Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T15:00:04.390700Z\"\n    },\n    {\n      \"insertId\": \"-59kb7jduls2\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742223602659-6308b0af4aeec-06dfba2b-fd92145d\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"47396e2e-c48e-3861-a12e-f6c9d247499f\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"47396e2e-c48e-3861-a12e-f6c9d247499f\",\n          \"id\": \"4341070311290406427\",\n          \"insertTime\": \"2025-03-17T08:00:04.221-07:00\",\n          \"name\": \"operation-1742223602659-6308b0af4aeec-06dfba2b-fd92145d\",\n          \"operationType\": \"start\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742223602659-6308b0af4aeec-06dfba2b-fd92145d\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/4341070311290406427\",\n          \"startTime\": \"2025-03-17T08:00:04.251-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T15:00:04.884930777Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T15:00:04.310650Z\"\n    },\n    {\n      \"insertId\": \"-omopezdpf9m\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742223601565-6308b0ae3ff18-ca984b02-52304b26\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"10772da0-581b-304e-b469-1e28bc279ede\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"10772da0-581b-304e-b469-1e28bc279ede\",\n          \"endTime\": \"2025-03-17T08:00:03.247-07:00\",\n          \"id\": \"3964271185439852060\",\n          \"insertTime\": \"2025-03-17T08:00:03.204-07:00\",\n          \"name\": \"operation-1742223601565-6308b0ae3ff18-ca984b02-52304b26\",\n          \"operationType\": \"start\",\n          \"progress\": \"100\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742223601565-6308b0ae3ff18-ca984b02-52304b26\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/3964271185439852060\",\n          \"startTime\": \"2025-03-17T08:00:03.247-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"4632680981323459323\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/shielded-vm-integrity-failure\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T15:00:03.361573498Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"4632680981323459323\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T15:00:03.302324Z\"\n    },\n    {\n      \"insertId\": \"abnib6dbo52\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1742220300432-6308a4620b420-44ba3823-6fcf09e5\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\"\n        },\n        \"requestMetadata\": {},\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm\",\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T14:05:51.693776443Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T14:05:50.942165Z\"\n    },\n    {\n      \"insertId\": \"jfq3ynd9qai\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1742220300438-6308a4620cc5d-2858549b-f9ad0a78\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\"\n        },\n        \"requestMetadata\": {},\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/spot-vm-termination\",\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T14:05:51.063152720Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T14:05:50.819651Z\"\n    },\n    {\n      \"insertId\": \"1z3k6xdtxb6\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742220300438-6308a4620cc5d-2858549b-f9ad0a78\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"04ed471a-7a09-3568-a375-941867872ee4\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"04ed471a-7a09-3568-a375-941867872ee4\",\n          \"id\": \"3825094303516300003\",\n          \"insertTime\": \"2025-03-17T07:05:00.880-07:00\",\n          \"name\": \"operation-1742220300438-6308a4620cc5d-2858549b-f9ad0a78\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742220300438-6308a4620cc5d-2858549b-f9ad0a78\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/3825094303516300003\",\n          \"startTime\": \"2025-03-17T07:05:00.908-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T14:05:01.316922954Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T14:05:00.956814Z\"\n    },\n    {\n      \"insertId\": \"1z3k6xdtxb4\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742220300432-6308a4620b420-44ba3823-6fcf09e5\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"d7e53791-6f52-3a32-a244-6edda5df971f\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"d7e53791-6f52-3a32-a244-6edda5df971f\",\n          \"id\": \"1799997165955027683\",\n          \"insertTime\": \"2025-03-17T07:05:00.870-07:00\",\n          \"name\": \"operation-1742220300432-6308a4620b420-44ba3823-6fcf09e5\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742220300432-6308a4620b420-44ba3823-6fcf09e5\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/1799997165955027683\",\n          \"startTime\": \"2025-03-17T07:05:00.896-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T14:05:01.316922954Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T14:05:00.947310Z\"\n    },\n    {\n      \"insertId\": \"nwc85ae3ai7a\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742220300438-6308a4620cc5d-2858549b-f9ad0a78\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"authorizationInfo\": [\n          {\n            \"granted\": true,\n            \"permission\": \"compute.instances.stop\",\n            \"permissionType\": \"ADMIN_WRITE\",\n            \"resource\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n            \"resourceAttributes\": {\n              \"name\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n              \"service\": \"compute\",\n              \"type\": \"compute.instances\"\n            }\n          }\n        ],\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\",\n          \"requestId\": \"04ed471a-7a09-3568-a375-941867872ee4\"\n        },\n        \"requestMetadata\": {\n          \"destinationAttributes\": {},\n          \"requestAttributes\": {\n            \"auth\": {},\n            \"time\": \"2025-03-17T14:05:00.947208Z\"\n          }\n        },\n        \"resourceLocation\": {\n          \"currentLocations\": [\n            \"us-central1-c\"\n          ]\n        },\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/spot-vm-termination\",\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"04ed471a-7a09-3568-a375-941867872ee4\",\n          \"id\": \"3825094303516300003\",\n          \"insertTime\": \"2025-03-17T07:05:00.880-07:00\",\n          \"name\": \"operation-1742220300438-6308a4620cc5d-2858549b-f9ad0a78\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742220300438-6308a4620cc5d-2858549b-f9ad0a78\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/3825094303516300003\",\n          \"startTime\": \"2025-03-17T07:05:00.908-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T14:05:01.031192458Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T14:05:00.405293Z\"\n    },\n    {\n      \"insertId\": \"jpwqwte1d4f6\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742220300432-6308a4620b420-44ba3823-6fcf09e5\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"authorizationInfo\": [\n          {\n            \"granted\": true,\n            \"permission\": \"compute.instances.stop\",\n            \"permissionType\": \"ADMIN_WRITE\",\n            \"resource\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n            \"resourceAttributes\": {\n              \"name\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n              \"service\": \"compute\",\n              \"type\": \"compute.instances\"\n            }\n          }\n        ],\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\",\n          \"requestId\": \"d7e53791-6f52-3a32-a244-6edda5df971f\"\n        },\n        \"requestMetadata\": {\n          \"destinationAttributes\": {},\n          \"requestAttributes\": {\n            \"auth\": {},\n            \"time\": \"2025-03-17T14:05:00.930191Z\"\n          }\n        },\n        \"resourceLocation\": {\n          \"currentLocations\": [\n            \"us-central1-c\"\n          ]\n        },\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm\",\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"d7e53791-6f52-3a32-a244-6edda5df971f\",\n          \"id\": \"1799997165955027683\",\n          \"insertTime\": \"2025-03-17T07:05:00.870-07:00\",\n          \"name\": \"operation-1742220300432-6308a4620b420-44ba3823-6fcf09e5\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742220300432-6308a4620b420-44ba3823-6fcf09e5\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/1799997165955027683\",\n          \"startTime\": \"2025-03-17T07:05:00.896-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T14:05:01.594097712Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T14:05:00.400688Z\"\n    },\n    {\n      \"insertId\": \"-59kb7jdu984\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742220001612-6308a34511268-376aa0ed-5f5ea20d\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"62bb69c9-4500-3b3a-b251-52a906c3ee6c\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"62bb69c9-4500-3b3a-b251-52a906c3ee6c\",\n          \"id\": \"2106490460308870156\",\n          \"insertTime\": \"2025-03-17T07:00:03.175-07:00\",\n          \"name\": \"operation-1742220001612-6308a34511268-376aa0ed-5f5ea20d\",\n          \"operationType\": \"start\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742220001612-6308a34511268-376aa0ed-5f5ea20d\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/2106490460308870156\",\n          \"startTime\": \"2025-03-17T07:00:03.201-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T14:00:03.992451794Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T14:00:03.255544Z\"\n    },\n    {\n      \"insertId\": \"-59kb7jdu982\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742220001611-6308a34510d6b-1c07cf62-91ec1f96\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"11b28918-9a1d-3fa1-8c61-41a23e562a61\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"11b28918-9a1d-3fa1-8c61-41a23e562a61\",\n          \"id\": \"2992722735244088332\",\n          \"insertTime\": \"2025-03-17T07:00:03.163-07:00\",\n          \"name\": \"operation-1742220001611-6308a34510d6b-1c07cf62-91ec1f96\",\n          \"operationType\": \"start\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742220001611-6308a34510d6b-1c07cf62-91ec1f96\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/2992722735244088332\",\n          \"startTime\": \"2025-03-17T07:00:03.185-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T14:00:03.992451794Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T14:00:03.232407Z\"\n    },\n    {\n      \"insertId\": \"-3kpfhrds096\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742220001489-6308a344f30b6-74d42837-05378b31\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"583f5631-8316-3090-9455-c80fadf9e9f2\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"583f5631-8316-3090-9455-c80fadf9e9f2\",\n          \"endTime\": \"2025-03-17T07:00:03.169-07:00\",\n          \"id\": \"1681197700532769804\",\n          \"insertTime\": \"2025-03-17T07:00:03.145-07:00\",\n          \"name\": \"operation-1742220001489-6308a344f30b6-74d42837-05378b31\",\n          \"operationType\": \"start\",\n          \"progress\": \"100\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742220001489-6308a344f30b6-74d42837-05378b31\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/1681197700532769804\",\n          \"startTime\": \"2025-03-17T07:00:03.169-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"4632680981323459323\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/shielded-vm-integrity-failure\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T14:00:04.141158775Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"4632680981323459323\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T14:00:03.220995Z\"\n    },\n    {\n      \"insertId\": \"-yohl49dupf4\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1742216700444-630896f8d3d80-c91fbe17-b331f814\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\"\n        },\n        \"requestMetadata\": {},\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/spot-vm-termination\",\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T13:05:49.129648027Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T13:05:48.106747Z\"\n    },\n    {\n      \"insertId\": \"ehpckgd80fa\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1742216700443-630896f8d3d2f-d5f97345-f0c05c8c\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\"\n        },\n        \"requestMetadata\": {},\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm\",\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T13:05:48.722798595Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T13:05:47.701713Z\"\n    },\n    {\n      \"insertId\": \"-yelho5duyb0\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742216700444-630896f8d3d80-c91fbe17-b331f814\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"b91f6458-64f5-3560-9db5-b0d899839441\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"b91f6458-64f5-3560-9db5-b0d899839441\",\n          \"id\": \"6080248924746392339\",\n          \"insertTime\": \"2025-03-17T06:05:00.857-07:00\",\n          \"name\": \"operation-1742216700444-630896f8d3d80-c91fbe17-b331f814\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742216700444-630896f8d3d80-c91fbe17-b331f814\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/6080248924746392339\",\n          \"startTime\": \"2025-03-17T06:05:00.880-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T13:05:01.234903830Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T13:05:00.923337Z\"\n    },\n    {\n      \"insertId\": \"-yelho5duyay\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742216700443-630896f8d3d2f-d5f97345-f0c05c8c\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"ae3b4eb5-7045-38dd-8eb9-8c72816759df\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"ae3b4eb5-7045-38dd-8eb9-8c72816759df\",\n          \"id\": \"3348071879590388499\",\n          \"insertTime\": \"2025-03-17T06:05:00.844-07:00\",\n          \"name\": \"operation-1742216700443-630896f8d3d2f-d5f97345-f0c05c8c\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742216700443-630896f8d3d2f-d5f97345-f0c05c8c\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/3348071879590388499\",\n          \"startTime\": \"2025-03-17T06:05:00.862-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T13:05:01.234903830Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T13:05:00.915438Z\"\n    },\n    {\n      \"insertId\": \"-sstd50e3vty0\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742216700444-630896f8d3d80-c91fbe17-b331f814\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"authorizationInfo\": [\n          {\n            \"granted\": true,\n            \"permission\": \"compute.instances.stop\",\n            \"permissionType\": \"ADMIN_WRITE\",\n            \"resource\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n            \"resourceAttributes\": {\n              \"name\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n              \"service\": \"compute\",\n              \"type\": \"compute.instances\"\n            }\n          }\n        ],\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\",\n          \"requestId\": \"b91f6458-64f5-3560-9db5-b0d899839441\"\n        },\n        \"requestMetadata\": {\n          \"destinationAttributes\": {},\n          \"requestAttributes\": {\n            \"auth\": {},\n            \"time\": \"2025-03-17T13:05:00.906505Z\"\n          }\n        },\n        \"resourceLocation\": {\n          \"currentLocations\": [\n            \"us-central1-c\"\n          ]\n        },\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/spot-vm-termination\",\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"b91f6458-64f5-3560-9db5-b0d899839441\",\n          \"id\": \"6080248924746392339\",\n          \"insertTime\": \"2025-03-17T06:05:00.857-07:00\",\n          \"name\": \"operation-1742216700444-630896f8d3d80-c91fbe17-b331f814\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742216700444-630896f8d3d80-c91fbe17-b331f814\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/6080248924746392339\",\n          \"startTime\": \"2025-03-17T06:05:00.880-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T13:05:01.473340541Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T13:05:00.414867Z\"\n    },\n    {\n      \"insertId\": \"6zervge313eu\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742216700443-630896f8d3d2f-d5f97345-f0c05c8c\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"authorizationInfo\": [\n          {\n            \"granted\": true,\n            \"permission\": \"compute.instances.stop\",\n            \"permissionType\": \"ADMIN_WRITE\",\n            \"resource\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n            \"resourceAttributes\": {\n              \"name\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n              \"service\": \"compute\",\n              \"type\": \"compute.instances\"\n            }\n          }\n        ],\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\",\n          \"requestId\": \"ae3b4eb5-7045-38dd-8eb9-8c72816759df\"\n        },\n        \"requestMetadata\": {\n          \"destinationAttributes\": {},\n          \"requestAttributes\": {\n            \"auth\": {},\n            \"time\": \"2025-03-17T13:05:00.898484Z\"\n          }\n        },\n        \"resourceLocation\": {\n          \"currentLocations\": [\n            \"us-central1-c\"\n          ]\n        },\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm\",\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"ae3b4eb5-7045-38dd-8eb9-8c72816759df\",\n          \"id\": \"3348071879590388499\",\n          \"insertTime\": \"2025-03-17T06:05:00.844-07:00\",\n          \"name\": \"operation-1742216700443-630896f8d3d2f-d5f97345-f0c05c8c\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742216700443-630896f8d3d2f-d5f97345-f0c05c8c\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/3348071879590388499\",\n          \"startTime\": \"2025-03-17T06:05:00.862-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T13:05:01.431668403Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T13:05:00.412911Z\"\n    },\n    {\n      \"insertId\": \"1z3k6xdtkom\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742216401728-630895dbf34b9-c23e2fd0-47e3ca4f\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"b8a5934f-2586-3dcc-ba10-9c4d00d420ee\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"b8a5934f-2586-3dcc-ba10-9c4d00d420ee\",\n          \"endTime\": \"2025-03-17T06:00:03.428-07:00\",\n          \"id\": \"5233967228712755772\",\n          \"insertTime\": \"2025-03-17T06:00:03.407-07:00\",\n          \"name\": \"operation-1742216401728-630895dbf34b9-c23e2fd0-47e3ca4f\",\n          \"operationType\": \"start\",\n          \"progress\": \"100\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742216401728-630895dbf34b9-c23e2fd0-47e3ca4f\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/5233967228712755772\",\n          \"startTime\": \"2025-03-17T06:00:03.428-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"4632680981323459323\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/shielded-vm-integrity-failure\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T13:00:03.615641266Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"4632680981323459323\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T13:00:03.479815Z\"\n    },\n    {\n      \"insertId\": \"h8y58ydw03e\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742216401683-630895dbe8325-76d0534b-b308bdb3\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"64c19fe1-450e-3eb1-ae55-f065a0c78460\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"64c19fe1-450e-3eb1-ae55-f065a0c78460\",\n          \"id\": \"3251719403610677820\",\n          \"insertTime\": \"2025-03-17T06:00:03.397-07:00\",\n          \"name\": \"operation-1742216401683-630895dbe8325-76d0534b-b308bdb3\",\n          \"operationType\": \"start\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742216401683-630895dbe8325-76d0534b-b308bdb3\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/3251719403610677820\",\n          \"startTime\": \"2025-03-17T06:00:03.425-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T13:00:03.660246631Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T13:00:03.477210Z\"\n    },\n    {\n      \"insertId\": \"h8y58ydw03c\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742216401694-630895dbeb110-06dcda50-488e9311\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"f8c66c65-ffac-34ee-ab39-a218d083075b\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"f8c66c65-ffac-34ee-ab39-a218d083075b\",\n          \"id\": \"3728978484529570364\",\n          \"insertTime\": \"2025-03-17T06:00:03.282-07:00\",\n          \"name\": \"operation-1742216401694-630895dbeb110-06dcda50-488e9311\",\n          \"operationType\": \"start\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742216401694-630895dbeb110-06dcda50-488e9311\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/3728978484529570364\",\n          \"startTime\": \"2025-03-17T06:00:03.308-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T13:00:03.660246631Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T13:00:03.357554Z\"\n    },\n    {\n      \"insertId\": \"5vgq25d5jlg\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1742213100412-6308898f91f66-0874ad58-f4c283a3\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\"\n        },\n        \"requestMetadata\": {},\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm\",\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T12:05:51.148518842Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T12:05:50.527938Z\"\n    },\n    {\n      \"insertId\": \"-3llzmeddsso\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1742213100420-6308898f93d7f-231dfbcf-5347074f\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\"\n        },\n        \"requestMetadata\": {},\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/spot-vm-termination\",\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T12:05:48.126130795Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T12:05:47.078294Z\"\n    },\n    {\n      \"insertId\": \"h8y58ydvkky\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742213100420-6308898f93d7f-231dfbcf-5347074f\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"7b781502-2cb7-3062-bcfb-084e1c5425ef\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"7b781502-2cb7-3062-bcfb-084e1c5425ef\",\n          \"id\": \"3040197087530955011\",\n          \"insertTime\": \"2025-03-17T05:05:00.775-07:00\",\n          \"name\": \"operation-1742213100420-6308898f93d7f-231dfbcf-5347074f\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742213100420-6308898f93d7f-231dfbcf-5347074f\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/3040197087530955011\",\n          \"startTime\": \"2025-03-17T05:05:00.802-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T12:05:00.917821148Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T12:05:00.851709Z\"\n    },\n    {\n      \"insertId\": \"h8y58ydvkkw\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742213100412-6308898f91f66-0874ad58-f4c283a3\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"d2c535c4-023a-3717-a281-e33166745b63\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"d2c535c4-023a-3717-a281-e33166745b63\",\n          \"id\": \"4832203330576298243\",\n          \"insertTime\": \"2025-03-17T05:05:00.766-07:00\",\n          \"name\": \"operation-1742213100412-6308898f91f66-0874ad58-f4c283a3\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742213100412-6308898f91f66-0874ad58-f4c283a3\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/4832203330576298243\",\n          \"startTime\": \"2025-03-17T05:05:00.789-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T12:05:00.917821148Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T12:05:00.840258Z\"\n    },\n    {\n      \"insertId\": \"-oejtqke2jeqs\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742213100420-6308898f93d7f-231dfbcf-5347074f\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"authorizationInfo\": [\n          {\n            \"granted\": true,\n            \"permission\": \"compute.instances.stop\",\n            \"permissionType\": \"ADMIN_WRITE\",\n            \"resource\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n            \"resourceAttributes\": {\n              \"name\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n              \"service\": \"compute\",\n              \"type\": \"compute.instances\"\n            }\n          }\n        ],\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\",\n          \"requestId\": \"7b781502-2cb7-3062-bcfb-084e1c5425ef\"\n        },\n        \"requestMetadata\": {\n          \"destinationAttributes\": {},\n          \"requestAttributes\": {\n            \"auth\": {},\n            \"time\": \"2025-03-17T12:05:00.835359Z\"\n          }\n        },\n        \"resourceLocation\": {\n          \"currentLocations\": [\n            \"us-central1-c\"\n          ]\n        },\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/spot-vm-termination\",\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"7b781502-2cb7-3062-bcfb-084e1c5425ef\",\n          \"id\": \"3040197087530955011\",\n          \"insertTime\": \"2025-03-17T05:05:00.775-07:00\",\n          \"name\": \"operation-1742213100420-6308898f93d7f-231dfbcf-5347074f\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742213100420-6308898f93d7f-231dfbcf-5347074f\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/3040197087530955011\",\n          \"startTime\": \"2025-03-17T05:05:00.802-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T12:05:01.604747150Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T12:05:00.378819Z\"\n    },\n    {\n      \"insertId\": \"lpu43e4023e\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742213100412-6308898f91f66-0874ad58-f4c283a3\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"authorizationInfo\": [\n          {\n            \"granted\": true,\n            \"permission\": \"compute.instances.stop\",\n            \"permissionType\": \"ADMIN_WRITE\",\n            \"resource\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n            \"resourceAttributes\": {\n              \"name\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n              \"service\": \"compute\",\n              \"type\": \"compute.instances\"\n            }\n          }\n        ],\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\",\n          \"requestId\": \"d2c535c4-023a-3717-a281-e33166745b63\"\n        },\n        \"requestMetadata\": {\n          \"destinationAttributes\": {},\n          \"requestAttributes\": {\n            \"auth\": {},\n            \"time\": \"2025-03-17T12:05:00.824122Z\"\n          }\n        },\n        \"resourceLocation\": {\n          \"currentLocations\": [\n            \"us-central1-c\"\n          ]\n        },\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm\",\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"d2c535c4-023a-3717-a281-e33166745b63\",\n          \"id\": \"4832203330576298243\",\n          \"insertTime\": \"2025-03-17T05:05:00.766-07:00\",\n          \"name\": \"operation-1742213100412-6308898f91f66-0874ad58-f4c283a3\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742213100412-6308898f91f66-0874ad58-f4c283a3\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/4832203330576298243\",\n          \"startTime\": \"2025-03-17T05:05:00.789-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T12:05:01.594076483Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T12:05:00.376612Z\"\n    },\n    {\n      \"insertId\": \"-yelho5dudp4\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742212801979-63088872f62bc-6bb1362a-bcfd5910\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"db7e5497-5e2a-3c33-a65c-d7e12fafc015\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"db7e5497-5e2a-3c33-a65c-d7e12fafc015\",\n          \"endTime\": \"2025-03-17T05:00:03.536-07:00\",\n          \"id\": \"1580285352264183852\",\n          \"insertTime\": \"2025-03-17T05:00:03.513-07:00\",\n          \"name\": \"operation-1742212801979-63088872f62bc-6bb1362a-bcfd5910\",\n          \"operationType\": \"start\",\n          \"progress\": \"100\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742212801979-63088872f62bc-6bb1362a-bcfd5910\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/1580285352264183852\",\n          \"startTime\": \"2025-03-17T05:00:03.536-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"4632680981323459323\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/shielded-vm-integrity-failure\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T12:00:04.295602557Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"4632680981323459323\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T12:00:03.592709Z\"\n    },\n    {\n      \"insertId\": \"-3kpfhrdrcd0\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742212801498-6308887280dc6-ff089f27-d2289f8d\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"b0e491e8-c738-336d-8010-4c2e25de26f6\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"b0e491e8-c738-336d-8010-4c2e25de26f6\",\n          \"id\": \"4476352100258132012\",\n          \"insertTime\": \"2025-03-17T05:00:03.081-07:00\",\n          \"name\": \"operation-1742212801498-6308887280dc6-ff089f27-d2289f8d\",\n          \"operationType\": \"start\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742212801498-6308887280dc6-ff089f27-d2289f8d\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/4476352100258132012\",\n          \"startTime\": \"2025-03-17T05:00:03.106-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T12:00:03.594400473Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T12:00:03.157211Z\"\n    },\n    {\n      \"insertId\": \"-3kpfhrdrccy\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742212801485-630888727dbfc-366585df-8582039b\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"8f1e713b-4f60-3c97-aa56-aae0f86bc37e\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"8f1e713b-4f60-3c97-aa56-aae0f86bc37e\",\n          \"id\": \"4549950664137355308\",\n          \"insertTime\": \"2025-03-17T05:00:03.068-07:00\",\n          \"name\": \"operation-1742212801485-630888727dbfc-366585df-8582039b\",\n          \"operationType\": \"start\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742212801485-630888727dbfc-366585df-8582039b\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/4549950664137355308\",\n          \"startTime\": \"2025-03-17T05:00:03.091-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T12:00:03.594400473Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T12:00:03.144145Z\"\n    },\n    {\n      \"insertId\": \"-zh2vmad5wcm\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1742209500433-63087c265cda8-83134814-a57aeb2d\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\"\n        },\n        \"requestMetadata\": {},\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/spot-vm-termination\",\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T11:05:52.599214899Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T11:05:51.558834Z\"\n    },\n    {\n      \"insertId\": \"-hha3rrdj85a\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1742209500433-63087c265cb71-0518509e-c43d9ec3\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\"\n        },\n        \"requestMetadata\": {},\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm\",\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T11:05:48.383713972Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T11:05:47.536211Z\"\n    },\n    {\n      \"insertId\": \"-59kb7jdt270\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742209500433-63087c265cda8-83134814-a57aeb2d\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"5782653c-010e-30f4-b5d4-1b9a6549c14c\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"5782653c-010e-30f4-b5d4-1b9a6549c14c\",\n          \"id\": \"4870494097891508019\",\n          \"insertTime\": \"2025-03-17T04:05:00.912-07:00\",\n          \"name\": \"operation-1742209500433-63087c265cda8-83134814-a57aeb2d\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742209500433-63087c265cda8-83134814-a57aeb2d\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/4870494097891508019\",\n          \"startTime\": \"2025-03-17T04:05:00.937-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T11:05:01.431434590Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T11:05:00.988978Z\"\n    },\n    {\n      \"insertId\": \"-59kb7jdt26y\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742209500433-63087c265cb71-0518509e-c43d9ec3\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"a29316da-08fc-398f-836c-5bfa3dbb015b\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"a29316da-08fc-398f-836c-5bfa3dbb015b\",\n          \"id\": \"8685308845044907827\",\n          \"insertTime\": \"2025-03-17T04:05:00.892-07:00\",\n          \"name\": \"operation-1742209500433-63087c265cb71-0518509e-c43d9ec3\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742209500433-63087c265cb71-0518509e-c43d9ec3\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/8685308845044907827\",\n          \"startTime\": \"2025-03-17T04:05:00.919-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T11:05:01.431434590Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T11:05:00.976861Z\"\n    },\n    {\n      \"insertId\": \"-6mimo8e2o0ye\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742209500433-63087c265cda8-83134814-a57aeb2d\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"authorizationInfo\": [\n          {\n            \"granted\": true,\n            \"permission\": \"compute.instances.stop\",\n            \"permissionType\": \"ADMIN_WRITE\",\n            \"resource\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n            \"resourceAttributes\": {\n              \"name\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n              \"service\": \"compute\",\n              \"type\": \"compute.instances\"\n            }\n          }\n        ],\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\",\n          \"requestId\": \"5782653c-010e-30f4-b5d4-1b9a6549c14c\"\n        },\n        \"requestMetadata\": {\n          \"destinationAttributes\": {},\n          \"requestAttributes\": {\n            \"auth\": {},\n            \"time\": \"2025-03-17T11:05:00.972828Z\"\n          }\n        },\n        \"resourceLocation\": {\n          \"currentLocations\": [\n            \"us-central1-c\"\n          ]\n        },\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/spot-vm-termination\",\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"5782653c-010e-30f4-b5d4-1b9a6549c14c\",\n          \"id\": \"4870494097891508019\",\n          \"insertTime\": \"2025-03-17T04:05:00.912-07:00\",\n          \"name\": \"operation-1742209500433-63087c265cda8-83134814-a57aeb2d\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742209500433-63087c265cda8-83134814-a57aeb2d\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/4870494097891508019\",\n          \"startTime\": \"2025-03-17T04:05:00.937-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T11:05:01.673687830Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T11:05:00.395835Z\"\n    },\n    {\n      \"insertId\": \"d22dq2e3crf4\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742209500433-63087c265cb71-0518509e-c43d9ec3\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"authorizationInfo\": [\n          {\n            \"granted\": true,\n            \"permission\": \"compute.instances.stop\",\n            \"permissionType\": \"ADMIN_WRITE\",\n            \"resource\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n            \"resourceAttributes\": {\n              \"name\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n              \"service\": \"compute\",\n              \"type\": \"compute.instances\"\n            }\n          }\n        ],\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\",\n          \"requestId\": \"a29316da-08fc-398f-836c-5bfa3dbb015b\"\n        },\n        \"requestMetadata\": {\n          \"destinationAttributes\": {},\n          \"requestAttributes\": {\n            \"auth\": {},\n            \"time\": \"2025-03-17T11:05:00.960326Z\"\n          }\n        },\n        \"resourceLocation\": {\n          \"currentLocations\": [\n            \"us-central1-c\"\n          ]\n        },\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm\",\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"a29316da-08fc-398f-836c-5bfa3dbb015b\",\n          \"id\": \"8685308845044907827\",\n          \"insertTime\": \"2025-03-17T04:05:00.892-07:00\",\n          \"name\": \"operation-1742209500433-63087c265cb71-0518509e-c43d9ec3\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742209500433-63087c265cb71-0518509e-c43d9ec3\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/8685308845044907827\",\n          \"startTime\": \"2025-03-17T04:05:00.919-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T11:05:01.516328972Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T11:05:00.393942Z\"\n    },\n    {\n      \"insertId\": \"-59kb7jdt10e\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742209201672-63087b097104f-2d777f53-d0d41d89\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"0464ff21-b4ad-315c-b5fd-483b4c10c087\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"0464ff21-b4ad-315c-b5fd-483b4c10c087\",\n          \"id\": \"1835572135254670940\",\n          \"insertTime\": \"2025-03-17T04:00:03.178-07:00\",\n          \"name\": \"operation-1742209201672-63087b097104f-2d777f53-d0d41d89\",\n          \"operationType\": \"start\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742209201672-63087b097104f-2d777f53-d0d41d89\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/1835572135254670940\",\n          \"startTime\": \"2025-03-17T04:00:03.205-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T11:00:03.397740553Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T11:00:03.264068Z\"\n    },\n    {\n      \"insertId\": \"-59kb7jdt10c\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742209201675-63087b0971c4f-220d763b-e41147e4\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"17d7a058-7766-34f9-bb3f-b40a00d2a51b\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"17d7a058-7766-34f9-bb3f-b40a00d2a51b\",\n          \"id\": \"4308413493095546460\",\n          \"insertTime\": \"2025-03-17T04:00:03.166-07:00\",\n          \"name\": \"operation-1742209201675-63087b0971c4f-220d763b-e41147e4\",\n          \"operationType\": \"start\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742209201675-63087b0971c4f-220d763b-e41147e4\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/4308413493095546460\",\n          \"startTime\": \"2025-03-17T04:00:03.190-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T11:00:03.397740553Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T11:00:03.235422Z\"\n    },\n    {\n      \"insertId\": \"1z3k6xdsu0u\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742209201528-63087b094dd8b-9051521f-88b4157e\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"19ded723-d842-3701-8ebc-e44fd37b07ef\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"19ded723-d842-3701-8ebc-e44fd37b07ef\",\n          \"endTime\": \"2025-03-17T04:00:03.121-07:00\",\n          \"id\": \"7651373795851484764\",\n          \"insertTime\": \"2025-03-17T04:00:03.104-07:00\",\n          \"name\": \"operation-1742209201528-63087b094dd8b-9051521f-88b4157e\",\n          \"operationType\": \"start\",\n          \"progress\": \"100\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742209201528-63087b094dd8b-9051521f-88b4157e\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/7651373795851484764\",\n          \"startTime\": \"2025-03-17T04:00:03.121-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"4632680981323459323\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/shielded-vm-integrity-failure\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T11:00:03.433270780Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"4632680981323459323\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T11:00:03.171838Z\"\n    },\n    {\n      \"insertId\": \"8lxz6rd60ai\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1742205900406-63086ebd1bf6b-93b4d327-d034fd59\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\"\n        },\n        \"requestMetadata\": {},\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm\",\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T10:05:47.497394563Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T10:05:47.013208Z\"\n    },\n    {\n      \"insertId\": \"204bindlzkk\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1742205900390-63086ebd18036-e00520e6-947a413b\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\"\n        },\n        \"requestMetadata\": {},\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/spot-vm-termination\",\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T10:05:45.033414575Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T10:05:44.493316Z\"\n    },\n    {\n      \"insertId\": \"h8y58ydui24\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742205900406-63086ebd1bf6b-93b4d327-d034fd59\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"8040b0aa-3213-3c16-a2ff-dabc2d5e3081\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"8040b0aa-3213-3c16-a2ff-dabc2d5e3081\",\n          \"id\": \"4660076975681588515\",\n          \"insertTime\": \"2025-03-17T03:05:00.796-07:00\",\n          \"name\": \"operation-1742205900406-63086ebd1bf6b-93b4d327-d034fd59\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742205900406-63086ebd1bf6b-93b4d327-d034fd59\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/4660076975681588515\",\n          \"startTime\": \"2025-03-17T03:05:00.820-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T10:05:01.022276546Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T10:05:00.873411Z\"\n    },\n    {\n      \"insertId\": \"h8y58ydui22\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742205900390-63086ebd18036-e00520e6-947a413b\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"ed6db565-f2f3-3b1e-adad-a3a76947481c\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"ed6db565-f2f3-3b1e-adad-a3a76947481c\",\n          \"id\": \"1217808525006884131\",\n          \"insertTime\": \"2025-03-17T03:05:00.771-07:00\",\n          \"name\": \"operation-1742205900390-63086ebd18036-e00520e6-947a413b\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742205900390-63086ebd18036-e00520e6-947a413b\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/1217808525006884131\",\n          \"startTime\": \"2025-03-17T03:05:00.793-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T10:05:01.022276546Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T10:05:00.835765Z\"\n    },\n    {\n      \"insertId\": \"-e58qmpe4u46g\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742205900406-63086ebd1bf6b-93b4d327-d034fd59\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"authorizationInfo\": [\n          {\n            \"granted\": true,\n            \"permission\": \"compute.instances.stop\",\n            \"permissionType\": \"ADMIN_WRITE\",\n            \"resource\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n            \"resourceAttributes\": {\n              \"name\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n              \"service\": \"compute\",\n              \"type\": \"compute.instances\"\n            }\n          }\n        ],\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\",\n          \"requestId\": \"8040b0aa-3213-3c16-a2ff-dabc2d5e3081\"\n        },\n        \"requestMetadata\": {\n          \"destinationAttributes\": {},\n          \"requestAttributes\": {\n            \"auth\": {},\n            \"time\": \"2025-03-17T10:05:00.857242Z\"\n          }\n        },\n        \"resourceLocation\": {\n          \"currentLocations\": [\n            \"us-central1-c\"\n          ]\n        },\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm\",\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"8040b0aa-3213-3c16-a2ff-dabc2d5e3081\",\n          \"id\": \"4660076975681588515\",\n          \"insertTime\": \"2025-03-17T03:05:00.796-07:00\",\n          \"name\": \"operation-1742205900406-63086ebd1bf6b-93b4d327-d034fd59\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742205900406-63086ebd1bf6b-93b4d327-d034fd59\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/4660076975681588515\",\n          \"startTime\": \"2025-03-17T03:05:00.820-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T10:05:01.464743362Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T10:05:00.363309Z\"\n    },\n    {\n      \"insertId\": \"-fizg8ke3d5ly\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742205900390-63086ebd18036-e00520e6-947a413b\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"authorizationInfo\": [\n          {\n            \"granted\": true,\n            \"permission\": \"compute.instances.stop\",\n            \"permissionType\": \"ADMIN_WRITE\",\n            \"resource\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n            \"resourceAttributes\": {\n              \"name\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n              \"service\": \"compute\",\n              \"type\": \"compute.instances\"\n            }\n          }\n        ],\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\",\n          \"requestId\": \"ed6db565-f2f3-3b1e-adad-a3a76947481c\"\n        },\n        \"requestMetadata\": {\n          \"destinationAttributes\": {},\n          \"requestAttributes\": {\n            \"auth\": {},\n            \"time\": \"2025-03-17T10:05:00.825580Z\"\n          }\n        },\n        \"resourceLocation\": {\n          \"currentLocations\": [\n            \"us-central1-c\"\n          ]\n        },\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/spot-vm-termination\",\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"ed6db565-f2f3-3b1e-adad-a3a76947481c\",\n          \"id\": \"1217808525006884131\",\n          \"insertTime\": \"2025-03-17T03:05:00.771-07:00\",\n          \"name\": \"operation-1742205900390-63086ebd18036-e00520e6-947a413b\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742205900390-63086ebd18036-e00520e6-947a413b\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/1217808525006884131\",\n          \"startTime\": \"2025-03-17T03:05:00.793-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T10:05:01.463946941Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T10:05:00.356300Z\"\n    },\n    {\n      \"insertId\": \"dx29k5dtvj4\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742205602178-63086da0b23f9-04d6ca06-32a0c58c\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"46385011-4e63-3d0f-b42c-96ccf500eea1\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"46385011-4e63-3d0f-b42c-96ccf500eea1\",\n          \"id\": \"370003438433094732\",\n          \"insertTime\": \"2025-03-17T03:00:03.836-07:00\",\n          \"name\": \"operation-1742205602178-63086da0b23f9-04d6ca06-32a0c58c\",\n          \"operationType\": \"start\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742205602178-63086da0b23f9-04d6ca06-32a0c58c\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/370003438433094732\",\n          \"startTime\": \"2025-03-17T03:00:03.910-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T10:00:04.123802245Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T10:00:03.969698Z\"\n    },\n    {\n      \"insertId\": \"dx29k5dtvj2\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742205602184-63086da0b3ccd-d2cc1389-d7306187\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"2363c50d-5c8e-3e29-b4ed-92b75b164c00\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"2363c50d-5c8e-3e29-b4ed-92b75b164c00\",\n          \"id\": \"7924389576774929484\",\n          \"insertTime\": \"2025-03-17T03:00:03.795-07:00\",\n          \"name\": \"operation-1742205602184-63086da0b3ccd-d2cc1389-d7306187\",\n          \"operationType\": \"start\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742205602184-63086da0b3ccd-d2cc1389-d7306187\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/7924389576774929484\",\n          \"startTime\": \"2025-03-17T03:00:03.831-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T10:00:04.123802245Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T10:00:03.888399Z\"\n    },\n    {\n      \"insertId\": \"-yelho5dt87a\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742205601633-63086da02d645-e9c8679f-77cbe1c7\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"b74b1360-33b4-3d04-b5b6-b3879887c1a8\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"b74b1360-33b4-3d04-b5b6-b3879887c1a8\",\n          \"endTime\": \"2025-03-17T03:00:03.190-07:00\",\n          \"id\": \"456590589005810764\",\n          \"insertTime\": \"2025-03-17T03:00:03.175-07:00\",\n          \"name\": \"operation-1742205601633-63086da02d645-e9c8679f-77cbe1c7\",\n          \"operationType\": \"start\",\n          \"progress\": \"100\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742205601633-63086da02d645-e9c8679f-77cbe1c7\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/456590589005810764\",\n          \"startTime\": \"2025-03-17T03:00:03.190-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"4632680981323459323\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/shielded-vm-integrity-failure\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T10:00:04.196590534Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"4632680981323459323\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T10:00:03.235407Z\"\n    },\n    {\n      \"insertId\": \"-f8kp2edf5wu\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1742202300474-63086153f2443-4f1ceda5-09d288e5\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\"\n        },\n        \"requestMetadata\": {},\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm\",\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T09:05:51.622350160Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T09:05:51.466494Z\"\n    },\n    {\n      \"insertId\": \"mr9rd7dh7a4\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1742202300494-63086153f7274-6fd35b80-033034f7\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\"\n        },\n        \"requestMetadata\": {},\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/spot-vm-termination\",\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T09:05:47.861013648Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T09:05:47.735468Z\"\n    },\n    {\n      \"insertId\": \"-7px7v0dn7ao\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742202300474-63086153f2443-4f1ceda5-09d288e5\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"d7810d6a-995d-3376-a953-8ae106dcda9b\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"d7810d6a-995d-3376-a953-8ae106dcda9b\",\n          \"id\": \"8251782474048887635\",\n          \"insertTime\": \"2025-03-17T02:05:00.908-07:00\",\n          \"name\": \"operation-1742202300474-63086153f2443-4f1ceda5-09d288e5\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742202300474-63086153f2443-4f1ceda5-09d288e5\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/8251782474048887635\",\n          \"startTime\": \"2025-03-17T02:05:00.940-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T09:05:01.438553092Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T09:05:00.991397Z\"\n    },\n    {\n      \"insertId\": \"-7px7v0dn7am\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742202300494-63086153f7274-6fd35b80-033034f7\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"04e95874-78a5-3493-ba1b-bd51f83091d1\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"04e95874-78a5-3493-ba1b-bd51f83091d1\",\n          \"id\": \"3752343553296718675\",\n          \"insertTime\": \"2025-03-17T02:05:00.892-07:00\",\n          \"name\": \"operation-1742202300494-63086153f7274-6fd35b80-033034f7\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742202300494-63086153f7274-6fd35b80-033034f7\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/3752343553296718675\",\n          \"startTime\": \"2025-03-17T02:05:00.926-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T09:05:01.438553092Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T09:05:00.980937Z\"\n    },\n    {\n      \"insertId\": \"979rzwe3eihg\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742202300474-63086153f2443-4f1ceda5-09d288e5\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"authorizationInfo\": [\n          {\n            \"granted\": true,\n            \"permission\": \"compute.instances.stop\",\n            \"permissionType\": \"ADMIN_WRITE\",\n            \"resource\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n            \"resourceAttributes\": {\n              \"name\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n              \"service\": \"compute\",\n              \"type\": \"compute.instances\"\n            }\n          }\n        ],\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\",\n          \"requestId\": \"d7810d6a-995d-3376-a953-8ae106dcda9b\"\n        },\n        \"requestMetadata\": {\n          \"destinationAttributes\": {},\n          \"requestAttributes\": {\n            \"auth\": {},\n            \"time\": \"2025-03-17T09:05:00.972280Z\"\n          }\n        },\n        \"resourceLocation\": {\n          \"currentLocations\": [\n            \"us-central1-c\"\n          ]\n        },\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm\",\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"d7810d6a-995d-3376-a953-8ae106dcda9b\",\n          \"id\": \"8251782474048887635\",\n          \"insertTime\": \"2025-03-17T02:05:00.908-07:00\",\n          \"name\": \"operation-1742202300474-63086153f2443-4f1ceda5-09d288e5\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742202300474-63086153f2443-4f1ceda5-09d288e5\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/8251782474048887635\",\n          \"startTime\": \"2025-03-17T02:05:00.940-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T09:05:01.705344598Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T09:05:00.438426Z\"\n    },\n    {\n      \"insertId\": \"29ypole2urd6\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742202300494-63086153f7274-6fd35b80-033034f7\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"authorizationInfo\": [\n          {\n            \"granted\": true,\n            \"permission\": \"compute.instances.stop\",\n            \"permissionType\": \"ADMIN_WRITE\",\n            \"resource\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n            \"resourceAttributes\": {\n              \"name\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n              \"service\": \"compute\",\n              \"type\": \"compute.instances\"\n            }\n          }\n        ],\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\",\n          \"requestId\": \"04e95874-78a5-3493-ba1b-bd51f83091d1\"\n        },\n        \"requestMetadata\": {\n          \"destinationAttributes\": {},\n          \"requestAttributes\": {\n            \"auth\": {},\n            \"time\": \"2025-03-17T09:05:00.964788Z\"\n          }\n        },\n        \"resourceLocation\": {\n          \"currentLocations\": [\n            \"us-central1-c\"\n          ]\n        },\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/spot-vm-termination\",\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"04e95874-78a5-3493-ba1b-bd51f83091d1\",\n          \"id\": \"3752343553296718675\",\n          \"insertTime\": \"2025-03-17T02:05:00.892-07:00\",\n          \"name\": \"operation-1742202300494-63086153f7274-6fd35b80-033034f7\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742202300494-63086153f7274-6fd35b80-033034f7\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/3752343553296718675\",\n          \"startTime\": \"2025-03-17T02:05:00.926-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T09:05:01.802759428Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T09:05:00.427973Z\"\n    },\n    {\n      \"insertId\": \"-7px7v0dn6j0\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742202001517-63086036d6a8a-ae23f2dc-ad3c9255\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"7271611d-ccfc-3a46-a8ff-951ce90a3fcf\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"7271611d-ccfc-3a46-a8ff-951ce90a3fcf\",\n          \"id\": \"9021552441555573372\",\n          \"insertTime\": \"2025-03-17T02:00:03.205-07:00\",\n          \"name\": \"operation-1742202001517-63086036d6a8a-ae23f2dc-ad3c9255\",\n          \"operationType\": \"start\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742202001517-63086036d6a8a-ae23f2dc-ad3c9255\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/9021552441555573372\",\n          \"startTime\": \"2025-03-17T02:00:03.235-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T09:00:03.345254116Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T09:00:03.292155Z\"\n    },\n    {\n      \"insertId\": \"h8y58ydu2rm\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742202001502-63086036d32e5-594f8e13-ecb1fd44\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"6613554b-979a-34ae-b7cb-c99fd92706b6\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"6613554b-979a-34ae-b7cb-c99fd92706b6\",\n          \"endTime\": \"2025-03-17T02:00:03.136-07:00\",\n          \"id\": \"8758086571954690684\",\n          \"insertTime\": \"2025-03-17T02:00:03.113-07:00\",\n          \"name\": \"operation-1742202001502-63086036d32e5-594f8e13-ecb1fd44\",\n          \"operationType\": \"start\",\n          \"progress\": \"100\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742202001502-63086036d32e5-594f8e13-ecb1fd44\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/8758086571954690684\",\n          \"startTime\": \"2025-03-17T02:00:03.136-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"4632680981323459323\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/shielded-vm-integrity-failure\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T09:00:03.589518263Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"4632680981323459323\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T09:00:03.186629Z\"\n    },\n    {\n      \"insertId\": \"-7px7v0dn6iw\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742202001504-63086036d379f-50fbbe80-6012875f\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"36e1d41e-6bbb-3ed3-aa10-0b34de17b35c\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"36e1d41e-6bbb-3ed3-aa10-0b34de17b35c\",\n          \"id\": \"6360484137672530556\",\n          \"insertTime\": \"2025-03-17T02:00:03.103-07:00\",\n          \"name\": \"operation-1742202001504-63086036d379f-50fbbe80-6012875f\",\n          \"operationType\": \"start\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742202001504-63086036d379f-50fbbe80-6012875f\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/6360484137672530556\",\n          \"startTime\": \"2025-03-17T02:00:03.124-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T09:00:03.345254116Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T09:00:03.176145Z\"\n    },\n    {\n      \"insertId\": \"bzc6tedkg42\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1742198700426-630853eaac3c7-84dcfb64-f3021ed6\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\"\n        },\n        \"requestMetadata\": {},\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm\",\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T08:05:51.676085160Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T08:05:50.911617Z\"\n    },\n    {\n      \"insertId\": \"-yohl49dtfz8\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1742198700434-630853eaae478-17646b34-881b1b8d\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\"\n        },\n        \"requestMetadata\": {},\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/spot-vm-termination\",\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T08:05:47.567456782Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T08:05:46.851980Z\"\n    },\n    {\n      \"insertId\": \"-yelho5dsfwq\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742198700426-630853eaac3c7-84dcfb64-f3021ed6\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"328315d5-6524-3192-82b7-1f3dbc08f284\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"328315d5-6524-3192-82b7-1f3dbc08f284\",\n          \"id\": \"1611150172664523075\",\n          \"insertTime\": \"2025-03-17T01:05:00.940-07:00\",\n          \"name\": \"operation-1742198700426-630853eaac3c7-84dcfb64-f3021ed6\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742198700426-630853eaac3c7-84dcfb64-f3021ed6\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/1611150172664523075\",\n          \"startTime\": \"2025-03-17T01:05:00.967-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T08:05:01.338826662Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T08:05:01.022027Z\"\n    },\n    {\n      \"insertId\": \"-yelho5dsfwo\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742198700434-630853eaae478-17646b34-881b1b8d\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"fcb006d0-173e-36b8-92ea-bd1c1dcd7850\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"fcb006d0-173e-36b8-92ea-bd1c1dcd7850\",\n          \"id\": \"8855413064912759107\",\n          \"insertTime\": \"2025-03-17T01:05:00.926-07:00\",\n          \"name\": \"operation-1742198700434-630853eaae478-17646b34-881b1b8d\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742198700434-630853eaae478-17646b34-881b1b8d\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/8855413064912759107\",\n          \"startTime\": \"2025-03-17T01:05:00.957-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T08:05:01.338826662Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T08:05:01.010954Z\"\n    },\n    {\n      \"insertId\": \"-kqxo60djd1c\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742198700426-630853eaac3c7-84dcfb64-f3021ed6\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"authorizationInfo\": [\n          {\n            \"granted\": true,\n            \"permission\": \"compute.instances.stop\",\n            \"permissionType\": \"ADMIN_WRITE\",\n            \"resource\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n            \"resourceAttributes\": {\n              \"name\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n              \"service\": \"compute\",\n              \"type\": \"compute.instances\"\n            }\n          }\n        ],\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\",\n          \"requestId\": \"328315d5-6524-3192-82b7-1f3dbc08f284\"\n        },\n        \"requestMetadata\": {\n          \"destinationAttributes\": {},\n          \"requestAttributes\": {\n            \"auth\": {},\n            \"time\": \"2025-03-17T08:05:01.005093Z\"\n          }\n        },\n        \"resourceLocation\": {\n          \"currentLocations\": [\n            \"us-central1-c\"\n          ]\n        },\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm\",\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"328315d5-6524-3192-82b7-1f3dbc08f284\",\n          \"id\": \"1611150172664523075\",\n          \"insertTime\": \"2025-03-17T01:05:00.940-07:00\",\n          \"name\": \"operation-1742198700426-630853eaac3c7-84dcfb64-f3021ed6\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742198700426-630853eaac3c7-84dcfb64-f3021ed6\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/1611150172664523075\",\n          \"startTime\": \"2025-03-17T01:05:00.967-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T08:05:01.440670312Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T08:05:00.384315Z\"\n    },\n    {\n      \"insertId\": \"-ai5awve4be0s\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742198700434-630853eaae478-17646b34-881b1b8d\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"authorizationInfo\": [\n          {\n            \"granted\": true,\n            \"permission\": \"compute.instances.stop\",\n            \"permissionType\": \"ADMIN_WRITE\",\n            \"resource\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n            \"resourceAttributes\": {\n              \"name\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n              \"service\": \"compute\",\n              \"type\": \"compute.instances\"\n            }\n          }\n        ],\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\",\n          \"requestId\": \"fcb006d0-173e-36b8-92ea-bd1c1dcd7850\"\n        },\n        \"requestMetadata\": {\n          \"destinationAttributes\": {},\n          \"requestAttributes\": {\n            \"auth\": {},\n            \"time\": \"2025-03-17T08:05:00.997983Z\"\n          }\n        },\n        \"resourceLocation\": {\n          \"currentLocations\": [\n            \"us-central1-c\"\n          ]\n        },\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/spot-vm-termination\",\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"fcb006d0-173e-36b8-92ea-bd1c1dcd7850\",\n          \"id\": \"8855413064912759107\",\n          \"insertTime\": \"2025-03-17T01:05:00.926-07:00\",\n          \"name\": \"operation-1742198700434-630853eaae478-17646b34-881b1b8d\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742198700434-630853eaae478-17646b34-881b1b8d\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/8855413064912759107\",\n          \"startTime\": \"2025-03-17T01:05:00.957-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T08:05:01.604856546Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T08:05:00.380612Z\"\n    },\n    {\n      \"insertId\": \"-omopezdn59u\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742198401772-630852cddaab1-3b988d75-67c8479a\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"ade8fe00-98dc-3c83-8d61-d9fd453b1469\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"ade8fe00-98dc-3c83-8d61-d9fd453b1469\",\n          \"id\": \"4266489488390908012\",\n          \"insertTime\": \"2025-03-17T01:00:03.270-07:00\",\n          \"name\": \"operation-1742198401772-630852cddaab1-3b988d75-67c8479a\",\n          \"operationType\": \"start\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742198401772-630852cddaab1-3b988d75-67c8479a\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/4266489488390908012\",\n          \"startTime\": \"2025-03-17T01:00:03.295-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T08:00:03.630892708Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T08:00:03.344851Z\"\n    },\n    {\n      \"insertId\": \"-omopezdn59s\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742198401654-630852cdbe069-cf002b41-141afc64\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"a2a78cab-19cf-3f7f-b87f-66b2a2e51097\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"a2a78cab-19cf-3f7f-b87f-66b2a2e51097\",\n          \"id\": \"898084506588309612\",\n          \"insertTime\": \"2025-03-17T01:00:03.220-07:00\",\n          \"name\": \"operation-1742198401654-630852cdbe069-cf002b41-141afc64\",\n          \"operationType\": \"start\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742198401654-630852cdbe069-cf002b41-141afc64\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/898084506588309612\",\n          \"startTime\": \"2025-03-17T01:00:03.243-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T08:00:03.630892708Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T08:00:03.296573Z\"\n    },\n    {\n      \"insertId\": \"1z3k6xdrhfc\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742198401467-630852cd90442-52109b10-07b423f6\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"dd3cf273-c4ce-3357-abc4-89a1c3713ad4\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"dd3cf273-c4ce-3357-abc4-89a1c3713ad4\",\n          \"endTime\": \"2025-03-17T01:00:03.005-07:00\",\n          \"id\": \"8870525607423404141\",\n          \"insertTime\": \"2025-03-17T01:00:02.983-07:00\",\n          \"name\": \"operation-1742198401467-630852cd90442-52109b10-07b423f6\",\n          \"operationType\": \"start\",\n          \"progress\": \"100\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742198401467-630852cd90442-52109b10-07b423f6\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/8870525607423404141\",\n          \"startTime\": \"2025-03-17T01:00:03.005-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"4632680981323459323\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/shielded-vm-integrity-failure\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T08:00:03.965126898Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"4632680981323459323\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T08:00:03.043570Z\"\n    },\n    {\n      \"insertId\": \"-fh0zncdddsu\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1742195100453-6308468178a5b-ac2b2426-a5e675e8\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\"\n        },\n        \"requestMetadata\": {},\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm\",\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T07:05:56.190651100Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T07:05:55.534044Z\"\n    },\n    {\n      \"insertId\": \"lnh08fdj2wu\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1742195100456-63084681796c2-78e9a7bc-e316df2c\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\"\n        },\n        \"requestMetadata\": {},\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/spot-vm-termination\",\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T07:05:50.547487373Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T07:05:50.497213Z\"\n    },\n    {\n      \"insertId\": \"-59kb7jdrd06\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742195100453-6308468178a5b-ac2b2426-a5e675e8\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"6dff77c0-13f6-318b-84b9-5151d30343cc\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"6dff77c0-13f6-318b-84b9-5151d30343cc\",\n          \"id\": \"3740911845003392883\",\n          \"insertTime\": \"2025-03-17T00:05:00.944-07:00\",\n          \"name\": \"operation-1742195100453-6308468178a5b-ac2b2426-a5e675e8\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742195100453-6308468178a5b-ac2b2426-a5e675e8\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/3740911845003392883\",\n          \"startTime\": \"2025-03-17T00:05:00.966-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T07:05:01.482207061Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T07:05:01.013631Z\"\n    },\n    {\n      \"insertId\": \"-59kb7jdrd02\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742195100456-63084681796c2-78e9a7bc-e316df2c\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"a24d4b9b-1407-33a7-99fa-7304fe264401\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"a24d4b9b-1407-33a7-99fa-7304fe264401\",\n          \"id\": \"3089115558146897779\",\n          \"insertTime\": \"2025-03-17T00:05:00.877-07:00\",\n          \"name\": \"operation-1742195100456-63084681796c2-78e9a7bc-e316df2c\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742195100456-63084681796c2-78e9a7bc-e316df2c\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/3089115558146897779\",\n          \"startTime\": \"2025-03-17T00:05:00.899-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T07:05:01.482207061Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T07:05:00.951013Z\"\n    },\n    {\n      \"insertId\": \"ezh0yse1x5m6\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742195100456-63084681796c2-78e9a7bc-e316df2c\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"authorizationInfo\": [\n          {\n            \"granted\": true,\n            \"permission\": \"compute.instances.stop\",\n            \"permissionType\": \"ADMIN_WRITE\",\n            \"resource\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n            \"resourceAttributes\": {\n              \"name\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n              \"service\": \"compute\",\n              \"type\": \"compute.instances\"\n            }\n          }\n        ],\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\",\n          \"requestId\": \"a24d4b9b-1407-33a7-99fa-7304fe264401\"\n        },\n        \"requestMetadata\": {\n          \"destinationAttributes\": {},\n          \"requestAttributes\": {\n            \"auth\": {},\n            \"time\": \"2025-03-17T07:05:00.933363Z\"\n          }\n        },\n        \"resourceLocation\": {\n          \"currentLocations\": [\n            \"us-central1-c\"\n          ]\n        },\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/spot-vm-termination\",\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"a24d4b9b-1407-33a7-99fa-7304fe264401\",\n          \"id\": \"3089115558146897779\",\n          \"insertTime\": \"2025-03-17T00:05:00.877-07:00\",\n          \"name\": \"operation-1742195100456-63084681796c2-78e9a7bc-e316df2c\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742195100456-63084681796c2-78e9a7bc-e316df2c\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/3089115558146897779\",\n          \"startTime\": \"2025-03-17T00:05:00.899-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T07:05:01.115581184Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T07:05:00.426801Z\"\n    },\n    {\n      \"insertId\": \"-k6t0ene2xnam\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742195100453-6308468178a5b-ac2b2426-a5e675e8\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"authorizationInfo\": [\n          {\n            \"granted\": true,\n            \"permission\": \"compute.instances.stop\",\n            \"permissionType\": \"ADMIN_WRITE\",\n            \"resource\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n            \"resourceAttributes\": {\n              \"name\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n              \"service\": \"compute\",\n              \"type\": \"compute.instances\"\n            }\n          }\n        ],\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\",\n          \"requestId\": \"6dff77c0-13f6-318b-84b9-5151d30343cc\"\n        },\n        \"requestMetadata\": {\n          \"destinationAttributes\": {},\n          \"requestAttributes\": {\n            \"auth\": {},\n            \"time\": \"2025-03-17T07:05:00.996883Z\"\n          }\n        },\n        \"resourceLocation\": {\n          \"currentLocations\": [\n            \"us-central1-c\"\n          ]\n        },\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm\",\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"6dff77c0-13f6-318b-84b9-5151d30343cc\",\n          \"id\": \"3740911845003392883\",\n          \"insertTime\": \"2025-03-17T00:05:00.944-07:00\",\n          \"name\": \"operation-1742195100453-6308468178a5b-ac2b2426-a5e675e8\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742195100453-6308468178a5b-ac2b2426-a5e675e8\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/3740911845003392883\",\n          \"startTime\": \"2025-03-17T00:05:00.966-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T07:05:01.910445883Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T07:05:00.420933Z\"\n    },\n    {\n      \"insertId\": \"-59kb7jdrbia\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742194802004-63084564d93b4-f0f0c00c-ed534c14\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"f5b1ea71-de9a-355e-b755-113f6d8f649b\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"f5b1ea71-de9a-355e-b755-113f6d8f649b\",\n          \"endTime\": \"2025-03-17T00:00:03.448-07:00\",\n          \"id\": \"5612317855664731804\",\n          \"insertTime\": \"2025-03-17T00:00:03.439-07:00\",\n          \"name\": \"operation-1742194802004-63084564d93b4-f0f0c00c-ed534c14\",\n          \"operationType\": \"start\",\n          \"progress\": \"100\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742194802004-63084564d93b4-f0f0c00c-ed534c14\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/5612317855664731804\",\n          \"startTime\": \"2025-03-17T00:00:03.448-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"4632680981323459323\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/shielded-vm-integrity-failure\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T07:00:04.336920653Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"4632680981323459323\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T07:00:03.481522Z\"\n    },\n    {\n      \"insertId\": \"-omopezdmu2c\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742194801672-630845648824f-c06174f0-98071a61\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"f7d0a9a4-1f6f-3e99-b476-5f29cacdde8a\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"f7d0a9a4-1f6f-3e99-b476-5f29cacdde8a\",\n          \"id\": \"3321539500076332700\",\n          \"insertTime\": \"2025-03-17T00:00:03.278-07:00\",\n          \"name\": \"operation-1742194801672-630845648824f-c06174f0-98071a61\",\n          \"operationType\": \"start\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742194801672-630845648824f-c06174f0-98071a61\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/3321539500076332700\",\n          \"startTime\": \"2025-03-17T00:00:03.302-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T07:00:04.005604813Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T07:00:03.358007Z\"\n    },\n    {\n      \"insertId\": \"-omopezdmu2a\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742194801638-630845647fdf9-b74913a8-47db26e5\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"ef0738cc-2e68-36cc-b2d2-3f7ab4d5d00f\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"ef0738cc-2e68-36cc-b2d2-3f7ab4d5d00f\",\n          \"id\": \"2096134448049976988\",\n          \"insertTime\": \"2025-03-17T00:00:03.167-07:00\",\n          \"name\": \"operation-1742194801638-630845647fdf9-b74913a8-47db26e5\",\n          \"operationType\": \"start\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742194801638-630845647fdf9-b74913a8-47db26e5\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/2096134448049976988\",\n          \"startTime\": \"2025-03-17T00:00:03.194-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T07:00:04.005604813Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T07:00:03.258747Z\"\n    },\n    {\n      \"insertId\": \"-3uz2hcdg3x8\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1742191500417-6308391835b8f-1fd2bd40-31f3be54\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\"\n        },\n        \"requestMetadata\": {},\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm\",\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T06:05:50.985076330Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T06:05:50.409603Z\"\n    },\n    {\n      \"insertId\": \"-hha3rrdihgq\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1742191500437-630839183a77a-5f37e983-2f0b3d30\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\"\n        },\n        \"requestMetadata\": {},\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/spot-vm-termination\",\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T06:05:01.948139051Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T06:05:01.633995Z\"\n    },\n    {\n      \"insertId\": \"-3kpfhrdp2tw\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742191500437-630839183a77a-5f37e983-2f0b3d30\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"2f7c2bdd-17a5-37b0-a054-384123557e3c\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"2f7c2bdd-17a5-37b0-a054-384123557e3c\",\n          \"id\": \"6934820581971461475\",\n          \"insertTime\": \"2025-03-16T23:05:00.874-07:00\",\n          \"name\": \"operation-1742191500437-630839183a77a-5f37e983-2f0b3d30\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742191500437-630839183a77a-5f37e983-2f0b3d30\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/6934820581971461475\",\n          \"startTime\": \"2025-03-16T23:05:00.897-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T06:05:01.808329749Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T06:05:01.032018Z\"\n    },\n    {\n      \"insertId\": \"-3kpfhrdp2tu\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742191500417-6308391835b8f-1fd2bd40-31f3be54\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"228c3a95-7e97-39d2-a42b-72b0adc5d0ce\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"228c3a95-7e97-39d2-a42b-72b0adc5d0ce\",\n          \"id\": \"6961858272978142563\",\n          \"insertTime\": \"2025-03-16T23:05:00.749-07:00\",\n          \"name\": \"operation-1742191500417-6308391835b8f-1fd2bd40-31f3be54\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742191500417-6308391835b8f-1fd2bd40-31f3be54\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/6961858272978142563\",\n          \"startTime\": \"2025-03-16T23:05:00.765-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T06:05:01.808329749Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T06:05:00.818479Z\"\n    },\n    {\n      \"insertId\": \"-eedetce3axe8\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742191500417-6308391835b8f-1fd2bd40-31f3be54\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"authorizationInfo\": [\n          {\n            \"granted\": true,\n            \"permission\": \"compute.instances.stop\",\n            \"permissionType\": \"ADMIN_WRITE\",\n            \"resource\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n            \"resourceAttributes\": {\n              \"name\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n              \"service\": \"compute\",\n              \"type\": \"compute.instances\"\n            }\n          }\n        ],\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\",\n          \"requestId\": \"228c3a95-7e97-39d2-a42b-72b0adc5d0ce\"\n        },\n        \"requestMetadata\": {\n          \"destinationAttributes\": {},\n          \"requestAttributes\": {\n            \"auth\": {},\n            \"time\": \"2025-03-17T06:05:00.801658Z\"\n          }\n        },\n        \"resourceLocation\": {\n          \"currentLocations\": [\n            \"us-central1-c\"\n          ]\n        },\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm\",\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"228c3a95-7e97-39d2-a42b-72b0adc5d0ce\",\n          \"id\": \"6961858272978142563\",\n          \"insertTime\": \"2025-03-16T23:05:00.749-07:00\",\n          \"name\": \"operation-1742191500417-6308391835b8f-1fd2bd40-31f3be54\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742191500417-6308391835b8f-1fd2bd40-31f3be54\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/6961858272978142563\",\n          \"startTime\": \"2025-03-16T23:05:00.765-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T06:05:01.780529218Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T06:05:00.392670Z\"\n    },\n    {\n      \"insertId\": \"-jxmvt6e4u4m8\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742191500437-630839183a77a-5f37e983-2f0b3d30\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"authorizationInfo\": [\n          {\n            \"granted\": true,\n            \"permission\": \"compute.instances.stop\",\n            \"permissionType\": \"ADMIN_WRITE\",\n            \"resource\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n            \"resourceAttributes\": {\n              \"name\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n              \"service\": \"compute\",\n              \"type\": \"compute.instances\"\n            }\n          }\n        ],\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\",\n          \"requestId\": \"2f7c2bdd-17a5-37b0-a054-384123557e3c\"\n        },\n        \"requestMetadata\": {\n          \"destinationAttributes\": {},\n          \"requestAttributes\": {\n            \"auth\": {},\n            \"time\": \"2025-03-17T06:05:00.950374Z\"\n          }\n        },\n        \"resourceLocation\": {\n          \"currentLocations\": [\n            \"us-central1-c\"\n          ]\n        },\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/spot-vm-termination\",\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"2f7c2bdd-17a5-37b0-a054-384123557e3c\",\n          \"id\": \"6934820581971461475\",\n          \"insertTime\": \"2025-03-16T23:05:00.874-07:00\",\n          \"name\": \"operation-1742191500437-630839183a77a-5f37e983-2f0b3d30\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742191500437-630839183a77a-5f37e983-2f0b3d30\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/6934820581971461475\",\n          \"startTime\": \"2025-03-16T23:05:00.897-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T06:05:01.215206553Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T06:05:00.391729Z\"\n    },\n    {\n      \"insertId\": \"-ugcy3ke3z2p0\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"2ebc4490-e78d-46c2-8a7d-2bb8b1f51e05\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"systemevent-1742191214262-630838074f9b5-9fa4f9d5-b984944c\",\n        \"last\": true,\n        \"producer\": \"compute.instances.preempted\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"compute.instances.preempted\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.preempted\"\n        },\n        \"resourceName\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n        \"serviceName\": \"compute.googleapis.com\",\n        \"status\": {\n          \"message\": \"Instance was preempted.\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T06:00:15.268708125Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T06:00:14.413235Z\"\n    },\n    {\n      \"insertId\": \"-yelho5drd66\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742191201500-630837fb23cd2-62b7fbcf-8c982415\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"be3d872a-d079-354e-b94c-1385b2f4759d\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"be3d872a-d079-354e-b94c-1385b2f4759d\",\n          \"endTime\": \"2025-03-16T23:00:03.098-07:00\",\n          \"id\": \"1577044047820358796\",\n          \"insertTime\": \"2025-03-16T23:00:03.082-07:00\",\n          \"name\": \"operation-1742191201500-630837fb23cd2-62b7fbcf-8c982415\",\n          \"operationType\": \"start\",\n          \"progress\": \"100\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742191201500-630837fb23cd2-62b7fbcf-8c982415\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/1577044047820358796\",\n          \"startTime\": \"2025-03-16T23:00:03.098-07:00\",\n          \"status\": \"DONE\",\n          \"targetId\": \"4632680981323459323\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/shielded-vm-integrity-failure\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T06:00:03.811045521Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"4632680981323459323\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T06:00:03.146410Z\"\n    },\n    {\n      \"insertId\": \"1z3k6xdqnuw\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742191200597-630837fa4765c-05879ae4-850faba3\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"e7e2a588-ff5b-341e-8c6f-f369660e3a6b\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"e7e2a588-ff5b-341e-8c6f-f369660e3a6b\",\n          \"id\": \"156629282779169933\",\n          \"insertTime\": \"2025-03-16T23:00:02.195-07:00\",\n          \"name\": \"operation-1742191200597-630837fa4765c-05879ae4-850faba3\",\n          \"operationType\": \"start\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742191200597-630837fa4765c-05879ae4-850faba3\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/156629282779169933\",\n          \"startTime\": \"2025-03-16T23:00:02.225-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T06:00:02.879977208Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T06:00:02.287016Z\"\n    },\n    {\n      \"insertId\": \"1z3k6xdqnus\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742191200552-630837fa3c535-8f9f5f56-118677c0\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"4285db01-a162-3fdc-98af-00926129505e\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"4285db01-a162-3fdc-98af-00926129505e\",\n          \"id\": \"2873388348825273485\",\n          \"insertTime\": \"2025-03-16T23:00:02.048-07:00\",\n          \"name\": \"operation-1742191200552-630837fa3c535-8f9f5f56-118677c0\",\n          \"operationType\": \"start\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742191200552-630837fa3c535-8f9f5f56-118677c0\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/2873388348825273485\",\n          \"startTime\": \"2025-03-16T23:00:02.076-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T06:00:02.879977208Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T06:00:02.114280Z\"\n    },\n    {\n      \"insertId\": \"le2sshdbhzc\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1742187900443-63082baf01ccd-0886f70a-b2a0c7a5\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\"\n        },\n        \"requestMetadata\": {},\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm\",\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T05:05:51.242382847Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T05:05:50.753174Z\"\n    },\n    {\n      \"insertId\": \"-bxihpedgahe\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1742187900450-63082baf0386c-d658e68b-bbceea79\",\n        \"last\": true,\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\"\n        },\n        \"requestMetadata\": {},\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/spot-vm-termination\",\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T05:05:49.500218382Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T05:05:48.640735Z\"\n    },\n    {\n      \"insertId\": \"1z3k6xdqcsy\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742187900443-63082baf01ccd-0886f70a-b2a0c7a5\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"9a039a9e-aa4a-3a56-b55f-b3236cc35f77\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"9a039a9e-aa4a-3a56-b55f-b3236cc35f77\",\n          \"id\": \"3680600277850395539\",\n          \"insertTime\": \"2025-03-16T22:05:00.866-07:00\",\n          \"name\": \"operation-1742187900443-63082baf01ccd-0886f70a-b2a0c7a5\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742187900443-63082baf01ccd-0886f70a-b2a0c7a5\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/3680600277850395539\",\n          \"startTime\": \"2025-03-16T22:05:00.892-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T05:05:01.448768073Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T05:05:00.940264Z\"\n    },\n    {\n      \"insertId\": \"1z3k6xdqcsw\",\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Fsystem_event\",\n      \"operation\": {\n        \"id\": \"operation-1742187900450-63082baf0386c-d658e68b-bbceea79\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"testuser@example.com\"\n        },\n        \"methodName\": \"ScheduledVMs\",\n        \"request\": {\n          \"requestId\": \"1f625775-22aa-3da9-a4f9-078a3d9ac5ca\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"1f625775-22aa-3da9-a4f9-078a3d9ac5ca\",\n          \"id\": \"1997219379833082771\",\n          \"insertTime\": \"2025-03-16T22:05:00.835-07:00\",\n          \"name\": \"operation-1742187900450-63082baf0386c-d658e68b-bbceea79\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742187900450-63082baf0386c-d658e68b-bbceea79\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/1997219379833082771\",\n          \"startTime\": \"2025-03-16T22:05:00.859-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-17T05:05:01.448768073Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"INFO\",\n      \"timestamp\": \"2025-03-17T05:05:00.903791Z\"\n    },\n    {\n      \"insertId\": \"-jyi9s7e4kdds\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742187900450-63082baf0386c-d658e68b-bbceea79\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"authorizationInfo\": [\n          {\n            \"granted\": true,\n            \"permission\": \"compute.instances.stop\",\n            \"permissionType\": \"ADMIN_WRITE\",\n            \"resource\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n            \"resourceAttributes\": {\n              \"name\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n              \"service\": \"compute\",\n              \"type\": \"compute.instances\"\n            }\n          }\n        ],\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\",\n          \"requestId\": \"1f625775-22aa-3da9-a4f9-078a3d9ac5ca\"\n        },\n        \"requestMetadata\": {\n          \"destinationAttributes\": {},\n          \"requestAttributes\": {\n            \"auth\": {},\n            \"time\": \"2025-03-17T05:05:00.885926Z\"\n          }\n        },\n        \"resourceLocation\": {\n          \"currentLocations\": [\n            \"us-central1-c\"\n          ]\n        },\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/spot-vm-termination\",\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"1f625775-22aa-3da9-a4f9-078a3d9ac5ca\",\n          \"id\": \"1997219379833082771\",\n          \"insertTime\": \"2025-03-16T22:05:00.835-07:00\",\n          \"name\": \"operation-1742187900450-63082baf0386c-d658e68b-bbceea79\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742187900450-63082baf0386c-d658e68b-bbceea79\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/1997219379833082771\",\n          \"startTime\": \"2025-03-16T22:05:00.859-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"2093000891450668968\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/spot-vm-termination\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T05:05:01.727482429Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"2093000891450668968\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T05:05:00.420633Z\"\n    },\n    {\n      \"insertId\": \"-q1k7dqe36zgc\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"fde31b4c-de43-4879-9a41-dd8643efd707\"\n      },\n      \"logName\": \"projects/gcpdiag-gce5-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"first\": true,\n        \"id\": \"operation-1742187900443-63082baf01ccd-0886f70a-b2a0c7a5\",\n        \"producer\": \"compute.googleapis.com\"\n      },\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-123456012345@compute-system.iam.gserviceaccount.com\"\n        },\n        \"authorizationInfo\": [\n          {\n            \"granted\": true,\n            \"permission\": \"compute.instances.stop\",\n            \"permissionType\": \"ADMIN_WRITE\",\n            \"resource\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n            \"resourceAttributes\": {\n              \"name\": \"projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n              \"service\": \"compute\",\n              \"type\": \"compute.instances\"\n            }\n          }\n        ],\n        \"methodName\": \"v1.compute.instances.stop\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.stop\",\n          \"requestId\": \"9a039a9e-aa4a-3a56-b55f-b3236cc35f77\"\n        },\n        \"requestMetadata\": {\n          \"destinationAttributes\": {},\n          \"requestAttributes\": {\n            \"auth\": {},\n            \"time\": \"2025-03-17T05:05:00.930441Z\"\n          }\n        },\n        \"resourceLocation\": {\n          \"currentLocations\": [\n            \"us-central1-c\"\n          ]\n        },\n        \"resourceName\": \"projects/123456012345/zones/us-central1-c/instances/start-and-stop-vm\",\n        \"response\": {\n          \"@type\": \"type.googleapis.com/operation\",\n          \"clientOperationId\": \"9a039a9e-aa4a-3a56-b55f-b3236cc35f77\",\n          \"id\": \"3680600277850395539\",\n          \"insertTime\": \"2025-03-16T22:05:00.866-07:00\",\n          \"name\": \"operation-1742187900443-63082baf01ccd-0886f70a-b2a0c7a5\",\n          \"operationType\": \"stop\",\n          \"progress\": \"0\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/operation-1742187900443-63082baf01ccd-0886f70a-b2a0c7a5\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/operations/3680600277850395539\",\n          \"startTime\": \"2025-03-16T22:05:00.892-07:00\",\n          \"status\": \"RUNNING\",\n          \"targetId\": \"3670725117245009111\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c/instances/start-and-stop-vm\",\n          \"user\": \"service-123456012345@compute-system.iam.gserviceaccount.com\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce5-aaaa/zones/us-central1-c\"\n        },\n        \"serviceName\": \"compute.googleapis.com\"\n      },\n      \"receiveTimestamp\": \"2025-03-17T05:05:01.169307440Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"3670725117245009111\",\n          \"project_id\": \"gcpdiag-gce5-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"NOTICE\",\n      \"timestamp\": \"2025-03-17T05:05:00.413179Z\"\n    }\n  ],\n  \"nextPageToken\": \"esQGCr8GAfQucPhs5YYIgtzUM5uQL7hVQJn7Zos9TrBtAKiunoNiDZHQgASl4BzdIYbSdZIiioAu_J1yaEly4jLCKESyy19nry0DKBJAJRKMIVsNlAw1uo9g7MMvlKTbC3BaPc_-MjDheOEroVS9HS6v16t9n9Pn81EWZiny02-C3LqBggY7Im5FsJr50NX_yw_j_3OEYMP5wz0k-rdkh9NNwHfAHHr1ysFV5PhzfgqlGKp39UnzIAOZlkzPmPBuZDGdl27PR00UCXfFJlh0Qrlfv1z06jyp2TU5llOsdp7WnkKgkCaP3YGVUO8iU7IkpNymhtXI2f90cd3RdytWi9lhRdi2axnimJm1kSoii55oxeuplNZoz9n-04oA-XrGMZrPsAc46kO67YJLcVFuJD0ZQrWd32BtpJ28fF7avhbxPDWp1hkQ3y-qR-kXKY3NbwxuTc7pedkwpKchZw6pd-2tN3eyLdUpnJ2w2IB4hxcVALWOoxAy4dHPAIOnVubZYbd4satLFr8O3bK_POsII9EoACvd12Zm0Nnmp3C3pipmZL54nnQdeYkdJP8W4tgQTc-pBSpQ2plFFUL08MzP068_M8AtDC4GGBjzq6l0kr9a-bJh2-C67UhdrlPPI8jc4zUw9l_7GtBvedoxwbiVnBDbJaL4OTC8v2C4tNzwEJy1Uf101ke7zyxwrzmoM5G0FidhB1-KOI1_UaVKOu5e3_BbCEHqRTUoom44RsdF5SQRya4er8OU6Q4_4NEjABsDIqJ0bYKM5g2vFGEKscMlYKnYl09fp6totU0g4iwGf4L1U1XiGSqz1UKH_YcyD--ouc8dj-D20P4QMt7bcMQJtO3LVigJUeeiuq3NX7IEKxiBNR0Py3H4khEnhr93QlOXhozyAmjfSQbOEBBU_20x58UP-fSwz4CQ3AOYcL5QyUq0g8uJNveX0YI6_LQ0XgX_1wX1945gM_rqy7kWGxRZPJ-I-ogo52EFXP-0L2g4FtmFRU9JkIacB0f0Tf_dJQPFDIvSL6_bUj1vA37fCBGY3midBTDAGOIEKIwNLWOm8UEhYDbPSKiJNcN5UKQRaXUqH7cEkKe5ZJq2WjsiyHxTb8fFANhLEAE\"\n}\n"
  },
  {
    "path": "test-data/gce5/json-dumps/project.json",
    "content": "{\n  \"name\": \"projects/123456012345\",\n  \"parent\": \"folders/348077457356\",\n  \"projectId\": \"gcpdiag-gce5-aaaa\",\n  \"state\": \"ACTIVE\",\n  \"displayName\": \"gcpdiag test - VM Termination\",\n  \"createTime\": \"2025-03-14T01:23:25.611225Z\",\n  \"updateTime\": \"2025-03-14T01:23:25.611225Z\",\n  \"etag\": \"W/\\\"3760d729cfab7713\\\"\",\n  \"labels\": {\n    \"gcpdiag\": \"test\",\n    \"goog-terraform-provisioned\": \"true\"\n  }\n}\n"
  },
  {
    "path": "test-data/gce5/json-dumps/services.json",
    "content": "{\n  \"services\": [\n    {\n      \"name\": \"projects/123456012345/services/compute.googleapis.com\",\n      \"config\": {\n        \"name\": \"compute.googleapis.com\",\n        \"title\": \"Compute Engine API\",\n        \"documentation\": {\n          \"summary\": \"Creates and runs virtual machines on Google Cloud Platform.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"compute.googleapis.com/VpcNetwork\",\n            \"displayName\": \"VPC Network\",\n            \"description\": \"VPC Network.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the VPC Network.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the VPC Network, global always.\"\n              },\n              {\n                \"key\": \"network_id\",\n                \"description\": \"VPC Network resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Location\",\n            \"displayName\": \"Compute Location\",\n            \"description\": \"A location in the Compute API.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the Compute Location.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Interconnect\",\n            \"displayName\": \"Interconnect\",\n            \"description\": \"Interconnect.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the Interconnect.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the Interconnect.\"\n              },\n              {\n                \"key\": \"interconnect_id\",\n                \"description\": \"Interconnect resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/FirewallPolicy\",\n            \"displayName\": \"Firewall policy\",\n            \"description\": \"Firewall policy.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project or organization) associated with the firewall policy.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the firewall policy.\"\n              },\n              {\n                \"key\": \"firewall_policy_id\",\n                \"description\": \"Firewall policy resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/SecurityPolicy\",\n            \"displayName\": \"Security policy\",\n            \"description\": \"Security policy.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the security policy.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the security policy.\"\n              },\n              {\n                \"key\": \"security_policy_id\",\n                \"description\": \"Security policy resource ID.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/OperationType\",\n            \"displayName\": \"Operation Type\",\n            \"description\": \"Operation Type.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the operation.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the operation.\"\n              },\n              {\n                \"key\": \"operation_type\",\n                \"description\": \"Operation type.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Reservation\",\n            \"displayName\": \"Reservation\",\n            \"description\": \"Monitored resource representing a reservation.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container (e.g. project number) associated with the reservation.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The zone that contains the reservation.\"\n              },\n              {\n                \"key\": \"reservation_id\",\n                \"description\": \"Reservation resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/StoragePool\",\n            \"displayName\": \"Storage Pool\",\n            \"description\": \"Monitored resource representing a storage pool.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container (e.g. project number) associated with the storage pool.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location that contains the storage pool.\"\n              },\n              {\n                \"key\": \"storage_pool_id\",\n                \"description\": \"Numerical resource ID of the storage pool.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"gce_instance\",\n            \"displayName\": \"VM Instance\",\n            \"description\": \"A virtual machine instance hosted in Compute Engine.\",\n            \"labels\": [\n              {\n                \"key\": \"project_id\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as \\\"my-project\\\".\"\n              },\n              {\n                \"key\": \"instance_id\",\n                \"description\": \"The numeric VM instance identifier assigned by Compute Engine.\"\n              },\n              {\n                \"key\": \"zone\",\n                \"description\": \"The Compute Engine zone in which the VM is running.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/NetworkPathQuotasResource\",\n            \"displayName\": \"Network Path Quotas Resource\",\n            \"description\": \"Network Path Quotas Resource.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container associated with the metric.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location for the quota.\"\n              },\n              {\n                \"key\": \"network_path_id\",\n                \"description\": \"The network path custom dimension.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network\",\n                \"compute.googleapis.com/cloud_router_prefixes_from_own_region_per_region_per_vpc_network\",\n                \"compute.googleapis.com/dynamic_routes_per_region_per_peering_group\",\n                \"compute.googleapis.com/global_internal_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/instances_per_peering_group\",\n                \"compute.googleapis.com/instances_per_vpc_network\",\n                \"compute.googleapis.com/internal_lb_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_managed_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_protocol_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/ip_aliases_per_peering_group\",\n                \"compute.googleapis.com/ip_aliases_per_vpc_network\",\n                \"compute.googleapis.com/peerings_per_vpc_network\",\n                \"compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network\",\n                \"compute.googleapis.com/psc_propagated_connections_per_vpc_network\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_ha_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/multicast_consumers_per_zone_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_backend_services_protocol_forwarding_fast_ha/exceeded\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/exceeded\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/regional_external_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/regional_internal_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/static_routes_per_peering_group\",\n                \"compute.googleapis.com/static_routes_per_vpc_network\",\n                \"compute.googleapis.com/subnet_ranges_per_peering_group\",\n                \"compute.googleapis.com/subnet_ranges_per_vpc_network\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Location\",\n              \"metrics\": [\n                \"compute.googleapis.com/cpus_per_vm_family\",\n                \"compute.googleapis.com/global_dns/request_count\",\n                \"compute.googleapis.com/gpus_per_gpu_family\",\n                \"compute.googleapis.com/inter_region_egress_bandwidth\",\n                \"compute.googleapis.com/local_ssd_total_storage_per_vm_family\",\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/exceeded\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/exceeded\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/exceeded\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/usage\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/exceeded\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/exceeded\",\n                \"compute.googleapis.com/quota/tpus_per_tpu_family/exceeded\",\n                \"compute.googleapis.com/tpus_per_tpu_family\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Interconnect\",\n              \"metrics\": [\n                \"compute.googleapis.com/interconnect_attachments_per_interconnect\",\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/exceeded\",\n                \"compute.googleapis.com/quota/wire_groups_per_interconnect/exceeded\",\n                \"compute.googleapis.com/wire_groups_per_interconnect\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/FirewallPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/fqdns_per_global_network_firewall_policy\",\n                \"compute.googleapis.com/fqdns_per_hierarchical_firewall_policy\",\n                \"compute.googleapis.com/fqdns_per_regional_network_firewall_policy\",\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/rule_attributes_per_global_network_firewall_policy\",\n                \"compute.googleapis.com/rule_attributes_per_hierarchical_firewall_policy\",\n                \"compute.googleapis.com/rule_attributes_per_regional_network_firewall_policy\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/SecurityPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/advanced_rules_per_edge_security_policy\",\n                \"compute.googleapis.com/advanced_rules_per_regional_security_policy\",\n                \"compute.googleapis.com/advanced_rules_per_security_policy\",\n                \"compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/exceeded\",\n                \"compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/exceeded\",\n                \"compute.googleapis.com/quota/advanced_rules_per_security_policy/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/OperationType\",\n              \"metrics\": [\n                \"compute.googleapis.com/global_concurrent_operations\",\n                \"compute.googleapis.com/quota/concurrent/global_concurrent_operations/exceeded\",\n                \"compute.googleapis.com/quota/concurrent/internal/global_concurrent_operations/combined_units\",\n                \"compute.googleapis.com/quota/concurrent/internal/regional_concurrent_operations/combined_units\",\n                \"compute.googleapis.com/quota/concurrent/regional_concurrent_operations/exceeded\",\n                \"compute.googleapis.com/regional_concurrent_operations\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"gce_instance\",\n              \"metrics\": [\n                \"compute.googleapis.com/instance/global_dns/request_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Reservation\",\n              \"metrics\": [\n                \"compute.googleapis.com/reservation/reserved\",\n                \"compute.googleapis.com/reservation/assured\",\n                \"compute.googleapis.com/reservation/used\",\n                \"compute.googleapis.com/reservation/internal/matching_instances\",\n                \"compute.googleapis.com/reservation/internal/prespuns_by_state\",\n                \"compute.googleapis.com/reservation/internal/unobtainable_slots\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/StoragePool\",\n              \"metrics\": [\n                \"compute.googleapis.com/storage_pool/disks\",\n                \"compute.googleapis.com/storage_pool/provisioned_capacity\",\n                \"compute.googleapis.com/storage_pool/used_capacity\",\n                \"compute.googleapis.com/storage_pool/total_disk_provisioned_capacity\",\n                \"compute.googleapis.com/storage_pool/provisioned_iops\",\n                \"compute.googleapis.com/storage_pool/used_iops\",\n                \"compute.googleapis.com/storage_pool/total_disk_provisioned_iops\",\n                \"compute.googleapis.com/storage_pool/provisioned_throughput\",\n                \"compute.googleapis.com/storage_pool/used_throughput\",\n                \"compute.googleapis.com/storage_pool/total_disk_provisioned_throughput\",\n                \"compute.googleapis.com/storage_pool/capacity_utilization\",\n                \"compute.googleapis.com/storage_pool/iops_utilization\",\n                \"compute.googleapis.com/storage_pool/throughput_utilization\",\n                \"compute.googleapis.com/storage_pool/capacity_overprovisioning\",\n                \"compute.googleapis.com/storage_pool/iops_overprovisioning\",\n                \"compute.googleapis.com/storage_pool/throughput_overprovisioning\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Location\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/limit\",\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/usage\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/limit\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/usage\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/limit\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/limit\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/usage\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/limit\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/usage\",\n                \"compute.googleapis.com/quota/tpus_per_tpu_family/limit\",\n                \"compute.googleapis.com/quota/tpus_per_tpu_family/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/limit\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/usage\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_ha_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_ha_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/multicast_consumers_per_zone_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/multicast_consumers_per_zone_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_backend_services_protocol_forwarding_fast_ha/limit\",\n                \"compute.googleapis.com/quota/regional_backend_services_protocol_forwarding_fast_ha/usage\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/limit\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/usage\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Interconnect\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/limit\",\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/usage\",\n                \"compute.googleapis.com/quota/wire_groups_per_interconnect/limit\",\n                \"compute.googleapis.com/quota/wire_groups_per_interconnect/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/FirewallPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/SecurityPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/limit\",\n                \"compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/usage\",\n                \"compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/limit\",\n                \"compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/usage\",\n                \"compute.googleapis.com/quota/advanced_rules_per_security_policy/limit\",\n                \"compute.googleapis.com/quota/advanced_rules_per_security_policy/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/OperationType\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/concurrent/global_concurrent_operations/limit\",\n                \"compute.googleapis.com/quota/concurrent/regional_concurrent_operations/limit\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/NetworkPathQuotasResource\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/wire_groups_bronze_unmetered_bandwidth_gbps/exceeded\",\n                \"compute.googleapis.com/quota/wire_groups_gold_unmetered_bandwidth_gbps/exceeded\",\n                \"compute.googleapis.com/quota/wire_groups_silver_unmetered_bandwidth_gbps/exceeded\",\n                \"compute.googleapis.com/wire_groups_gold_unmetered_bandwidth_gbps\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/NetworkPathQuotasResource\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/wire_groups_bronze_unmetered_bandwidth_gbps/limit\",\n                \"compute.googleapis.com/quota/wire_groups_bronze_unmetered_bandwidth_gbps/usage\",\n                \"compute.googleapis.com/quota/wire_groups_gold_unmetered_bandwidth_gbps/limit\",\n                \"compute.googleapis.com/quota/wire_groups_gold_unmetered_bandwidth_gbps/usage\",\n                \"compute.googleapis.com/quota/wire_groups_silver_unmetered_bandwidth_gbps/limit\",\n                \"compute.googleapis.com/quota/wire_groups_silver_unmetered_bandwidth_gbps/usage\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/123456012345\"\n    },\n    {\n      \"name\": \"projects/123456012345/services/oslogin.googleapis.com\",\n      \"config\": {\n        \"name\": \"oslogin.googleapis.com\",\n        \"title\": \"Cloud OS Login API\",\n        \"documentation\": {\n          \"summary\": \"You can use OS Login to manage access to your VM instances using IAM roles.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/123456012345\"\n    },\n    {\n      \"name\": \"projects/123456012345/services/websecurityscanner.googleapis.com\",\n      \"config\": {\n        \"name\": \"websecurityscanner.googleapis.com\",\n        \"title\": \"Web Security Scanner API\",\n        \"documentation\": {\n          \"summary\": \"Scans your Compute and App Engine apps for common web vulnerabilities.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/123456012345\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gce5/main.tf",
    "content": "/**\n * Copyright 2025 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nresource \"google_project_iam_custom_role\" \"start_stop\" {\n  role_id     = \"instanceScheduler\"\n  title       = \"Instance Scheduler\"\n  description = \"Minimum permissions required for Compute Engine System service account to be able to start/stop instances\"\n  permissions = [\"compute.instances.start\", \"compute.instances.stop\"]\n  project     = google_project.project.project_id\n\n}\n\nresource \"google_project_iam_member\" \"member\" {\n  project = google_project.project.project_id\n  role    = google_project_iam_custom_role.start_stop.name\n  member  = \"serviceAccount:service-${google_project.project.number}@compute-system.iam.gserviceaccount.com\"\n}\n\ndata \"google_compute_resource_policy\" \"hourly_startup\" {\n  name    = \"gce-policy\"\n  region  = var.region\n  project = google_project.project.project_id\n}\n\ndata \"google_compute_resource_policy\" \"hourly_startup_and_stop\" {\n  name    = \"gce-policy-stop-and-start\"\n  region  = var.region\n  project = google_project.project.project_id\n}\n\nresource \"google_compute_resource_policy\" \"hourly_startup\" {\n  count = length(data.google_compute_resource_policy.hourly_startup) == 0 ? 1 : 0\n\n  name        = \"gce-policy\"\n  region      = var.region\n  description = \"Only Start instances\"\n  instance_schedule_policy {\n    vm_start_schedule {\n      schedule = \"0 * * * *\"\n    }\n    time_zone = \"US/Central\"\n  }\n  project = google_project.project.project_id\n}\n\nresource \"google_compute_resource_policy\" \"hourly_startup_and_stop\" {\n  count       = length(data.google_compute_resource_policy.hourly_startup_and_stop) == 0 ? 1 : 0\n  name        = \"gce-policy-stop-and-start\"\n  region      = var.region\n  description = \"Start and stop instances\"\n  instance_schedule_policy {\n    vm_start_schedule {\n      schedule = \"0 * * * *\"\n    }\n    vm_stop_schedule {\n      schedule = \"5 * * * *\"\n    }\n    time_zone = \"US/Central\"\n  }\n  project = google_project.project.project_id\n}\n\nresource \"google_compute_instance\" \"vm_instance\" {\n  name         = \"start-and-stop-vm\"\n  machine_type = \"f1-micro\"\n  zone         = var.zone\n\n  boot_disk {\n    initialize_params {\n      image = \"debian-cloud/debian-11\"\n    }\n  }\n\n  network_interface {\n    # A default network is created for all GCP projects\n    network = \"default\"\n    access_config {\n    }\n  }\n  project           = google_project.project.project_id\n  resource_policies = [data.google_compute_resource_policy.hourly_startup_and_stop.id]\n}\n\nresource \"google_compute_instance\" \"spot_vm_instance\" {\n  name         = \"spot-vm-termination\"\n  machine_type = \"f1-micro\"\n  zone         = var.zone\n\n  boot_disk {\n    initialize_params {\n      image = \"debian-cloud/debian-11\"\n    }\n  }\n\n  scheduling {\n    preemptible                 = true\n    automatic_restart           = false\n    provisioning_model          = \"SPOT\"\n    instance_termination_action = \"STOP\"\n  }\n\n  network_interface {\n    # A default network is created for all GCP projects\n    network = \"default\"\n    access_config {\n    }\n  }\n  project           = google_project.project.project_id\n  resource_policies = [data.google_compute_resource_policy.hourly_startup_and_stop.id]\n}\n\nresource \"google_compute_instance\" \"shielded_vm_integrity_failure\" {\n  name         = \"shielded-vm-integrity-failure\"\n  machine_type = \"f1-micro\"\n  zone         = var.zone\n\n  boot_disk {\n    initialize_params {\n      image = \"ubuntu-os-cloud/ubuntu-2204-lts\"\n    }\n  }\n\n  network_interface {\n    # A default network is created for all GCP projects\n    network = \"default\"\n    access_config {\n    }\n  }\n  project           = google_project.project.project_id\n  resource_policies = [data.google_compute_resource_policy.hourly_startup.id]\n  shielded_instance_config {\n    enable_secure_boot          = true\n    enable_vtpm                 = true\n    enable_integrity_monitoring = true\n  }\n\n  metadata_startup_script = <<-EOF\n    #! /bin/bash\n    apt-get upgrade -y\n    update-grub\n    reboot\n  EOF\n}\n\nresource \"google_compute_instance_template\" \"apache_template\" {\n  name           = \"apache-instance-template\"\n  machine_type   = \"e2-micro\"\n  can_ip_forward = false\n\n  tags = [\"apache-server\"]\n\n  disk {\n    auto_delete  = true\n    boot         = true\n    source_image = \"debian-cloud/debian-11\"\n  }\n\n  network_interface {\n    network = \"default\"\n    access_config {}\n  }\n  project = google_project.project.project_id\n}\n\nresource \"google_compute_health_check\" \"apache_health_check\" {\n  name                = \"apache-health-check\"\n  check_interval_sec  = 10\n  timeout_sec         = 5\n  healthy_threshold   = 2\n  unhealthy_threshold = 2\n\n  http_health_check {\n    port = 80\n  }\n  project = google_project.project.project_id\n}\n\nresource \"google_compute_instance_group_manager\" \"apache_mig\" {\n  name               = \"apache-mig-timeout\"\n  base_instance_name = \"apache-instance\"\n  version {\n    instance_template = google_compute_instance_template.apache_template.id\n  }\n  target_size = 2\n\n  auto_healing_policies {\n    health_check      = google_compute_health_check.apache_health_check.id\n    initial_delay_sec = 300\n  }\n  project = google_project.project.project_id\n  zone    = var.zone\n\n}\n"
  },
  {
    "path": "test-data/gce5/project.tf",
    "content": "/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nresource \"random_string\" \"project_id_suffix\" {\n  length  = 8\n  numeric = true\n  lower   = true\n  upper   = false\n  special = false\n}\n\nresource \"google_project\" \"project\" {\n  name            = \"gcpdiag test - VM Termination\"\n  project_id      = var.project_id != \"\" ? var.project_id : \"gcpdiag-gce5-${random_string.project_id_suffix.id}\"\n  org_id          = var.folder_id == \"\" ? var.org_id : null\n  folder_id       = var.folder_id != \"\" ? var.folder_id : null\n  billing_account = var.billing_account_id\n  labels = {\n    gcpdiag : \"test\"\n  }\n}\n\nresource \"google_project_service\" \"compute\" {\n  project = google_project.project.project_id\n  service = \"compute.googleapis.com\"\n}\n\nresource \"google_compute_project_metadata_item\" \"serial_logging\" {\n  project    = google_project.project.project_id\n  depends_on = [google_project_service.compute]\n  key        = \"serial-port-logging-enable\"\n  value      = \"true\"\n}\n\ndata \"google_compute_default_service_account\" \"default\" {\n  project    = google_project.project.project_id\n  depends_on = [google_project_service.compute]\n}\n\ndata \"google_compute_image\" \"debian\" {\n  family  = \"debian-11\"\n  project = \"debian-cloud\"\n}\n\ndata \"google_compute_image\" \"windows\" {\n  family  = \"windows-2019-core\"\n  project = \"windows-cloud\"\n}\n\noutput \"project_id\" {\n  value = google_project.project.project_id\n}\n\noutput \"project_id_suffix\" {\n  value = random_string.project_id_suffix.id\n}\n\noutput \"project_nr\" {\n  value = google_project.project.number\n}\n\noutput \"org_id\" {\n  value = var.org_id\n}\n"
  },
  {
    "path": "test-data/gce5/variables.tf",
    "content": "variable \"project_id\" {\n  //default = \"use-an-existing-test-project\"\n}\nvariable \"billing_account_id\" {}\n\nvariable \"org_id\" {}\nvariable \"folder_id\" { default = \"\" }\n\nvariable \"region\" {\n  type        = string\n  description = \"The GCP region to create resources in.\"\n  default     = \"us-central1\"\n}\n\nvariable \"zone\" {\n  type        = string\n  description = \"The GCP zone to create resources in.\"\n  default     = \"us-central1-c\"\n}\n"
  },
  {
    "path": "test-data/gce6/Makefile",
    "content": "PROJECT_ID  := $(shell terraform output -raw project_id)\nPROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix)\nPROJECT_NR  := $(shell terraform output -raw project_nr)\nORG_ID      := $(shell terraform output -raw org_id)\nCURL         = ../../bin/curl-wrap.sh\nJSON_CLEANER = ../../bin/json-cleaner\nZONE_1       = us-central1-c\n\nFAKE_PROJECT_ID_SUFFIX = aaaa\nFAKE_PROJECT_NR = 1234560123456\nFAKE_ORG_ID = 11112222\n\nCOMPUTE_INSTANCES_MAXRESULTS=3\n\nINSTANCE_NAME_GCE1=existing-instance\nINSTANCE_NAME_GCE2=non-existing-gpu-instance\nSTART_TIMESTAMP = 2025-03-28T00:00:00+00:00\nEND_TIMESTAMP   = 2025-03-29T00:00:00+00:00\n\nSED_SUBST_FAKE = sed -e \"s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/\" \\\n\t\t     -e \"s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/\" \\\n\t\t     -e \"s/$(ORG_ID)/$(FAKE_ORG_ID)/\" \\\n\t\t     -e \"s/[a-zA-Z0-9._%+-]+@google.com/$(FAKE_USER_ACCOUNT)/\"\n\nall:\t\\\n\tjson-dumps/compute-effective-firewalls-default.json \\\n\tjson-dumps/compute-instances-$(ZONE_1).json \\\n\tjson-dumps/compute-disks-$(ZONE_1).json \\\n\tjson-dumps/compute-network-default.json \\\n\tjson-dumps/compute-project.json \\\n\tjson-dumps/iam-policy.json \\\n\tjson-dumps/iam-service-accounts.json \\\n\tjson-dumps/project.json \\\n\tjson-dumps/services.json \\\n\tjson-dumps/global-operations.json \\\n\tjson-dumps/logging-entries-1.json \\\n\tjson-dumps/compute-migs-aggregated.json \\\n\tjson-dumps/healthChecks.json \\\n\tjson-dumps/compute-instances-aggregated.json\n\ninclude ../Makefile.inc\n\n\nTERMINATION_OPERATION_FILTER=\"%28operationType%3D%22compute.instances.repair.recreateInstance%22%29%20OR%20%28operationType%3D%22compute.instances.hostError%22%29%20OR%20%28operationType%3D%22compute.instances.guestTerminate%22%29%20OR%20%28operationType%3D%22compute.instances.preempted%22%29%20OR%20%28operationType%3D%22compute.instances.terminateOnHostMaintenance%22%29%20OR%20%28operationType%3D%22stop%22%29%20OR%20%28operationType%3D%22suspend%22%29%20OR%20%28operationType%3D%22reset%22%29%20OR%20%28operationType%3D%22compute.instanceGroupManagers.resizeAdvanced%22%29%20OR%20%28operationType%3D%22compute.autoscalers.resize%22%29%0A\"\njson-dumps/global-operations.json:\n\t$(CURL) -fsS \\\n\t  \"https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/aggregated/operations?filter=$(TERMINATION_OPERATION_FILTER)\" \\\n\t\t| $(JSON_CLEANER) other \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\n# \tprotoPayload.methodName=~\\\"compute.instances.(hostError|guestTerminate|preempted|terminateOnHostMaintenance|stop|suspend|repair.recreateInstance|ScheduledVMs)\\\" OR\ndefine LOGGING_ENTRIES_BODY\n{\n\t\"resourceNames\": [\"projects/$(PROJECT_ID)\"],\n\t\"orderBy\": \"timestamp desc\",\n\t\"pageSize\": 200,\n\t\"filter\": \"resource.type=\\\"gce_instance\\\" AND\n\tlog_id(\\\"cloudaudit.googleapis.com/activity\\\") AND\n\t(protoPayload.resourceName=\\\"projects/$(PROJECT_ID)/zones/$(ZONE_1)/instances/$(INSTANCE_NAME_GCE1)\\\" OR protoPayload.resourceName=\\\"projects/$(PROJECT_ID)/zones/$(ZONE_1)/instances/$(INSTANCE_NAME_GCE2)\\\") AND\n\tprotoPayload.methodName=~\\\"compute.instances.insert\\\" AND\n\tseverity=\\\"ERROR\\\" AND\n\t(protoPayload.status.message=\\\"QUOTA_EXCEEDED\\\" OR\n\tprotoPayload.response.error.errors.reason=\\\"alreadyExists\\\" OR\n\tprotoPayload.response.error.message=~\\\"Required '.*' permission for '.*'\\\")\"\n}\nendef\n\nexport LOGGING_ENTRIES_BODY\n\njson-dumps/logging-entries-1.json:\n\t$(CURL) -fsS \\\n\t\t'https://logging.googleapis.com/v2/entries:list' \\\n\t\t--header \"Content-Type:text/json\" \\\n\t\t-d \"$$LOGGING_ENTRIES_BODY\" \\\n\t\t| $(JSON_CLEANER) other \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/healthChecks.json:\n\t$(CURL) -fsS \\\n\t        'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/global/healthChecks/' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n"
  },
  {
    "path": "test-data/gce6/json-dumps/compute-disks-europe-west2-b.json",
    "content": "{\n  \"kind\": \"compute#diskList\",\n  \"id\": \"projects/gcpdiag-gce6-aaaa/zones/europe-west2-b/disks\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/europe-west2-b/disks\"\n}\n"
  },
  {
    "path": "test-data/gce6/json-dumps/compute-disks-us-central1-c.json",
    "content": "{\n  \"kind\": \"compute#diskList\",\n  \"id\": \"projects/gcpdiag-gce6-aaaa/zones/us-central1-c/disks\",\n  \"items\": [\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"3842325145369422477\",\n      \"creationTimestamp\": \"2025-03-27T20:15:46.925-07:00\",\n      \"name\": \"apache-instance-7b70\",\n      \"sizeGb\": \"10\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/disks/apache-instance-7b70\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-11-bullseye-v20250311\",\n      \"sourceImageId\": \"6139874332219611556\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/diskTypes/pd-standard\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"UEFI_COMPATIBLE\"\n        },\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        },\n        {\n          \"type\": \"GVNIC\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2025-03-27T20:16:43.101-07:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/apache-instance-7b70\"\n      ],\n      \"labelFingerprint\": \"42WmSpB8rSM=\",\n      \"licenseCodes\": [\n        \"3853522013536123851\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\",\n      \"enableConfidentialCompute\": false,\n      \"architecture\": \"X86_64\"\n    },\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"1899967056662214939\",\n      \"creationTimestamp\": \"2025-03-27T19:22:44.425-07:00\",\n      \"name\": \"apache-instance-bnb7\",\n      \"sizeGb\": \"10\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/disks/apache-instance-bnb7\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-11-bullseye-v20250311\",\n      \"sourceImageId\": \"6139874332219611556\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/diskTypes/pd-standard\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"UEFI_COMPATIBLE\"\n        },\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        },\n        {\n          \"type\": \"GVNIC\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2025-03-27T19:22:45.277-07:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/apache-instance-bnb7\"\n      ],\n      \"labelFingerprint\": \"42WmSpB8rSM=\",\n      \"licenseCodes\": [\n        \"3853522013536123851\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\",\n      \"enableConfidentialCompute\": false,\n      \"satisfiesPzi\": true,\n      \"architecture\": \"X86_64\"\n    },\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"8346470418270107629\",\n      \"creationTimestamp\": \"2025-03-27T19:27:15.942-07:00\",\n      \"name\": \"existing-instance\",\n      \"sizeGb\": \"10\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/disks/existing-instance\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-2204-jammy-v20250312\",\n      \"sourceImageId\": \"6817663366014267458\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/diskTypes/pd-standard\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-2204-lts\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        },\n        {\n          \"type\": \"SEV_CAPABLE\"\n        },\n        {\n          \"type\": \"SEV_SNP_CAPABLE\"\n        },\n        {\n          \"type\": \"SEV_LIVE_MIGRATABLE\"\n        },\n        {\n          \"type\": \"SEV_LIVE_MIGRATABLE_V2\"\n        },\n        {\n          \"type\": \"IDPF\"\n        },\n        {\n          \"type\": \"TDX_CAPABLE\"\n        },\n        {\n          \"type\": \"UEFI_COMPATIBLE\"\n        },\n        {\n          \"type\": \"GVNIC\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2025-03-27T19:27:17.008-07:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/existing-instance\"\n      ],\n      \"labelFingerprint\": \"42WmSpB8rSM=\",\n      \"licenseCodes\": [\n        \"5511465778777431107\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\",\n      \"enableConfidentialCompute\": false,\n      \"satisfiesPzi\": true,\n      \"architecture\": \"X86_64\"\n    },\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"9013476464221990385\",\n      \"creationTimestamp\": \"2025-03-27T20:10:22.326-07:00\",\n      \"name\": \"gpu-instance-creator\",\n      \"sizeGb\": \"10\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/disks/gpu-instance-creator\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-2204-jammy-v20250312\",\n      \"sourceImageId\": \"6817663366014267458\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/diskTypes/pd-standard\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-2204-lts\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        },\n        {\n          \"type\": \"SEV_CAPABLE\"\n        },\n        {\n          \"type\": \"SEV_SNP_CAPABLE\"\n        },\n        {\n          \"type\": \"SEV_LIVE_MIGRATABLE\"\n        },\n        {\n          \"type\": \"SEV_LIVE_MIGRATABLE_V2\"\n        },\n        {\n          \"type\": \"IDPF\"\n        },\n        {\n          \"type\": \"TDX_CAPABLE\"\n        },\n        {\n          \"type\": \"UEFI_COMPATIBLE\"\n        },\n        {\n          \"type\": \"GVNIC\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2025-03-27T20:10:23.041-07:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/gpu-instance-creator\"\n      ],\n      \"labelFingerprint\": \"42WmSpB8rSM=\",\n      \"licenseCodes\": [\n        \"5511465778777431107\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\",\n      \"enableConfidentialCompute\": false,\n      \"satisfiesPzi\": true,\n      \"architecture\": \"X86_64\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/disks\"\n}\n"
  },
  {
    "path": "test-data/gce6/json-dumps/compute-effective-firewalls-default.json",
    "content": "{\n  \"firewalls\": [\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"4890289301508307417\",\n      \"creationTimestamp\": \"2025-03-27T19:19:34.782-07:00\",\n      \"name\": \"default-allow-icmp\",\n      \"description\": \"Allow ICMP from anywhere\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/global/networks/default\",\n      \"priority\": 65534,\n      \"sourceRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"icmp\"\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/global/firewalls/default-allow-icmp\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"7339912822061251033\",\n      \"creationTimestamp\": \"2025-03-27T19:19:34.648-07:00\",\n      \"name\": \"default-allow-ssh\",\n      \"description\": \"Allow SSH from anywhere\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/global/networks/default\",\n      \"priority\": 65534,\n      \"sourceRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"22\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/global/firewalls/default-allow-ssh\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"4175891559915174361\",\n      \"creationTimestamp\": \"2025-03-27T19:19:34.580-07:00\",\n      \"name\": \"default-allow-internal\",\n      \"description\": \"Allow internal traffic on the default network\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/global/networks/default\",\n      \"priority\": 65534,\n      \"sourceRanges\": [\n        \"10.128.0.0/9\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"0-65535\"\n          ]\n        },\n        {\n          \"IPProtocol\": \"udp\",\n          \"ports\": [\n            \"0-65535\"\n          ]\n        },\n        {\n          \"IPProtocol\": \"icmp\"\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/global/firewalls/default-allow-internal\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"3147982427147450841\",\n      \"creationTimestamp\": \"2025-03-27T19:19:34.715-07:00\",\n      \"name\": \"default-allow-rdp\",\n      \"description\": \"Allow RDP from anywhere\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/global/networks/default\",\n      \"priority\": 65534,\n      \"sourceRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"3389\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/global/firewalls/default-allow-rdp\"\n    }\n  ],\n  \"firewallPolicys\": [\n    {\n      \"name\": \"902824820698\",\n      \"type\": \"HIERARCHY\",\n      \"shortName\": \"default-firewall-policy\",\n      \"displayName\": \"default-firewall-policy\",\n      \"rules\": [\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 0,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"34.168.226.0/26\",\n              \"34.102.114.64/26\",\n              \"34.16.224.64/26\",\n              \"34.48.81.64/26\",\n              \"34.168.146.160/27\",\n              \"34.16.224.160/27\",\n              \"34.82.66.0/24\",\n              \"34.82.90.0/24\",\n              \"34.82.98.0/24\",\n              \"34.82.160.0/24\",\n              \"34.82.166.128/25\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"tcp\"\n              },\n              {\n                \"ipProtocol\": \"udp\"\n              }\n            ]\n          },\n          \"action\": \"allow\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 1,\n          \"match\": {\n            \"destIpRanges\": [\n              \"34.83.160.25/32\",\n              \"34.125.160.60/32\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"tcp\"\n              },\n              {\n                \"ipProtocol\": \"udp\"\n              }\n            ]\n          },\n          \"action\": \"allow\",\n          \"direction\": \"EGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 600,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"35.235.240.0/20\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"tcp\",\n                \"ports\": [\n                  \"22\",\n                  \"3389\",\n                  \"5900-5901\"\n                ]\n              }\n            ]\n          },\n          \"action\": \"allow\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 601,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"35.191.0.0/16\",\n              \"130.211.0.0/22\",\n              \"209.85.152.0/22\",\n              \"209.85.204.0/22\",\n              \"169.254.169.254\",\n              \"108.170.220.0/23\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 602,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"10.0.0.0/8\",\n              \"172.16.0.0/12\",\n              \"192.168.0.0/16\",\n              \"100.64.0.0/10\",\n              \"240.0.0.0/4\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 603,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"35.199.192.0/19\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"tcp\",\n                \"ports\": [\n                  \"53\",\n                  \"80\",\n                  \"443\"\n                ]\n              },\n              {\n                \"ipProtocol\": \"udp\",\n                \"ports\": [\n                  \"53\"\n                ]\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 604,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"107.178.230.64/26\",\n              \"35.199.224.0/19\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"tcp\",\n                \"ports\": [\n                  \"667\"\n                ]\n              },\n              {\n                \"ipProtocol\": \"udp\",\n                \"ports\": [\n                  \"665-666\"\n                ]\n              },\n              {\n                \"ipProtocol\": \"icmp\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 700,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"0.0.0.0/0\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"deny\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 2147483644,\n          \"match\": {\n            \"destIpRanges\": [\n              \"::/0\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"EGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 2147483645,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"::/0\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 2147483646,\n          \"match\": {\n            \"destIpRanges\": [\n              \"0.0.0.0/0\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"EGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 2147483647,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"0.0.0.0/0\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gce6/json-dumps/compute-instances-aggregated.json",
    "content": "{\n  \"kind\": \"compute#instanceAggregatedList\",\n  \"id\": \"projects/gcpdiag-gce6-aaaa/aggregated/instances\",\n  \"items\": {\n    \"zones/us-central1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-central1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-central1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central1-c\": {\n      \"instances\": [\n        {\n          \"kind\": \"compute#instance\",\n          \"id\": \"6199621613681096987\",\n          \"creationTimestamp\": \"2025-03-27T19:22:44.707-07:00\",\n          \"name\": \"apache-instance-7b70\",\n          \"tags\": {\n            \"fingerprint\": \"42WmSpB8rSM=\"\n          },\n          \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/machineTypes/e2-micro\",\n          \"status\": \"RUNNING\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c\",\n          \"networkInterfaces\": [\n            {\n              \"kind\": \"compute#networkInterface\",\n              \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/global/networks/default\",\n              \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/us-central1/subnetworks/default\",\n              \"networkIP\": \"10.128.0.4\",\n              \"name\": \"nic0\",\n              \"accessConfigs\": [\n                {\n                  \"kind\": \"compute#accessConfig\",\n                  \"type\": \"ONE_TO_ONE_NAT\",\n                  \"name\": \"external-nat\",\n                  \"natIP\": \"104.198.226.122\",\n                  \"networkTier\": \"PREMIUM\"\n                }\n              ],\n              \"fingerprint\": \"J07dpzzjjDU=\",\n              \"stackType\": \"IPV4_ONLY\"\n            }\n          ],\n          \"disks\": [\n            {\n              \"kind\": \"compute#attachedDisk\",\n              \"type\": \"PERSISTENT\",\n              \"mode\": \"READ_WRITE\",\n              \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/disks/apache-instance-7b70\",\n              \"deviceName\": \"persistent-disk-0\",\n              \"index\": 0,\n              \"boot\": true,\n              \"autoDelete\": true,\n              \"licenses\": [\n                \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye\"\n              ],\n              \"interface\": \"SCSI\",\n              \"guestOsFeatures\": [\n                {\n                  \"type\": \"UEFI_COMPATIBLE\"\n                },\n                {\n                  \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n                },\n                {\n                  \"type\": \"GVNIC\"\n                }\n              ],\n              \"diskSizeGb\": \"10\",\n              \"architecture\": \"X86_64\"\n            }\n          ],\n          \"metadata\": {\n            \"kind\": \"compute#metadata\",\n            \"fingerprint\": \"c8WcYqzkGbU=\",\n            \"items\": [\n              {\n                \"key\": \"instance-template\",\n                \"value\": \"projects/1234560123456/global/instanceTemplates/apache-instance-template\"\n              },\n              {\n                \"key\": \"created-by\",\n                \"value\": \"projects/1234560123456/zones/us-central1-c/instanceGroupManagers/apache-mig-timeout\"\n              }\n            ]\n          },\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/apache-instance-7b70\",\n          \"scheduling\": {\n            \"onHostMaintenance\": \"MIGRATE\",\n            \"automaticRestart\": true,\n            \"preemptible\": false,\n            \"provisioningModel\": \"STANDARD\"\n          },\n          \"cpuPlatform\": \"Intel Broadwell\",\n          \"labels\": {\n            \"goog-terraform-provisioned\": \"true\"\n          },\n          \"labelFingerprint\": \"vezUS-42LLM=\",\n          \"startRestricted\": false,\n          \"deletionProtection\": false,\n          \"shieldedInstanceConfig\": {\n            \"enableSecureBoot\": false,\n            \"enableVtpm\": true,\n            \"enableIntegrityMonitoring\": true\n          },\n          \"shieldedInstanceIntegrityPolicy\": {\n            \"updateAutoLearnPolicy\": true\n          },\n          \"fingerprint\": \"i-nouvmUFmw=\",\n          \"lastStartTimestamp\": \"2025-03-27T20:16:56.742-07:00\",\n          \"lastStopTimestamp\": \"2025-03-27T20:16:38.411-07:00\",\n          \"satisfiesPzi\": true\n        },\n        {\n          \"kind\": \"compute#instance\",\n          \"id\": \"8213709800874948891\",\n          \"creationTimestamp\": \"2025-03-27T19:22:44.414-07:00\",\n          \"name\": \"apache-instance-bnb7\",\n          \"tags\": {\n            \"fingerprint\": \"42WmSpB8rSM=\"\n          },\n          \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/machineTypes/e2-micro\",\n          \"status\": \"RUNNING\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c\",\n          \"networkInterfaces\": [\n            {\n              \"kind\": \"compute#networkInterface\",\n              \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/global/networks/default\",\n              \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/us-central1/subnetworks/default\",\n              \"networkIP\": \"10.128.0.3\",\n              \"name\": \"nic0\",\n              \"accessConfigs\": [\n                {\n                  \"kind\": \"compute#accessConfig\",\n                  \"type\": \"ONE_TO_ONE_NAT\",\n                  \"name\": \"external-nat\",\n                  \"natIP\": \"34.66.230.36\",\n                  \"networkTier\": \"PREMIUM\"\n                }\n              ],\n              \"fingerprint\": \"XgaQmfsmLK4=\",\n              \"stackType\": \"IPV4_ONLY\"\n            }\n          ],\n          \"disks\": [\n            {\n              \"kind\": \"compute#attachedDisk\",\n              \"type\": \"PERSISTENT\",\n              \"mode\": \"READ_WRITE\",\n              \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/disks/apache-instance-bnb7\",\n              \"deviceName\": \"persistent-disk-0\",\n              \"index\": 0,\n              \"boot\": true,\n              \"autoDelete\": true,\n              \"licenses\": [\n                \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye\"\n              ],\n              \"interface\": \"SCSI\",\n              \"guestOsFeatures\": [\n                {\n                  \"type\": \"UEFI_COMPATIBLE\"\n                },\n                {\n                  \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n                },\n                {\n                  \"type\": \"GVNIC\"\n                }\n              ],\n              \"diskSizeGb\": \"10\",\n              \"architecture\": \"X86_64\"\n            }\n          ],\n          \"metadata\": {\n            \"kind\": \"compute#metadata\",\n            \"fingerprint\": \"c8WcYqzkGbU=\",\n            \"items\": [\n              {\n                \"key\": \"instance-template\",\n                \"value\": \"projects/1234560123456/global/instanceTemplates/apache-instance-template\"\n              },\n              {\n                \"key\": \"created-by\",\n                \"value\": \"projects/1234560123456/zones/us-central1-c/instanceGroupManagers/apache-mig-timeout\"\n              }\n            ]\n          },\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/apache-instance-bnb7\",\n          \"scheduling\": {\n            \"onHostMaintenance\": \"MIGRATE\",\n            \"automaticRestart\": true,\n            \"preemptible\": false,\n            \"provisioningModel\": \"STANDARD\"\n          },\n          \"cpuPlatform\": \"Intel Broadwell\",\n          \"labels\": {\n            \"goog-terraform-provisioned\": \"true\"\n          },\n          \"labelFingerprint\": \"vezUS-42LLM=\",\n          \"startRestricted\": false,\n          \"deletionProtection\": false,\n          \"shieldedInstanceConfig\": {\n            \"enableSecureBoot\": false,\n            \"enableVtpm\": true,\n            \"enableIntegrityMonitoring\": true\n          },\n          \"shieldedInstanceIntegrityPolicy\": {\n            \"updateAutoLearnPolicy\": true\n          },\n          \"fingerprint\": \"25I3W_Ws1Wk=\",\n          \"lastStartTimestamp\": \"2025-03-27T19:23:04.083-07:00\",\n          \"satisfiesPzi\": true\n        },\n        {\n          \"kind\": \"compute#instance\",\n          \"id\": \"4912196469396322285\",\n          \"creationTimestamp\": \"2025-03-27T19:27:15.933-07:00\",\n          \"name\": \"existing-instance\",\n          \"tags\": {\n            \"fingerprint\": \"42WmSpB8rSM=\"\n          },\n          \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/machineTypes/f1-micro\",\n          \"status\": \"RUNNING\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c\",\n          \"canIpForward\": false,\n          \"networkInterfaces\": [\n            {\n              \"kind\": \"compute#networkInterface\",\n              \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/global/networks/default\",\n              \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/us-central1/subnetworks/default\",\n              \"networkIP\": \"10.128.0.5\",\n              \"name\": \"nic0\",\n              \"accessConfigs\": [\n                {\n                  \"kind\": \"compute#accessConfig\",\n                  \"type\": \"ONE_TO_ONE_NAT\",\n                  \"name\": \"external-nat\",\n                  \"natIP\": \"35.184.107.186\",\n                  \"networkTier\": \"PREMIUM\"\n                }\n              ],\n              \"fingerprint\": \"uIgqJezw-ck=\",\n              \"stackType\": \"IPV4_ONLY\"\n            }\n          ],\n          \"disks\": [\n            {\n              \"kind\": \"compute#attachedDisk\",\n              \"type\": \"PERSISTENT\",\n              \"mode\": \"READ_WRITE\",\n              \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/disks/existing-instance\",\n              \"deviceName\": \"persistent-disk-0\",\n              \"index\": 0,\n              \"boot\": true,\n              \"autoDelete\": true,\n              \"licenses\": [\n                \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-2204-lts\"\n              ],\n              \"interface\": \"SCSI\",\n              \"guestOsFeatures\": [\n                {\n                  \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n                },\n                {\n                  \"type\": \"SEV_CAPABLE\"\n                },\n                {\n                  \"type\": \"SEV_SNP_CAPABLE\"\n                },\n                {\n                  \"type\": \"SEV_LIVE_MIGRATABLE\"\n                },\n                {\n                  \"type\": \"SEV_LIVE_MIGRATABLE_V2\"\n                },\n                {\n                  \"type\": \"IDPF\"\n                },\n                {\n                  \"type\": \"TDX_CAPABLE\"\n                },\n                {\n                  \"type\": \"UEFI_COMPATIBLE\"\n                },\n                {\n                  \"type\": \"GVNIC\"\n                }\n              ],\n              \"diskSizeGb\": \"10\",\n              \"shieldedInstanceInitialState\": {\n                \"dbxs\": [\n                  {\n                    \"content\": \"2gcDBhMRFQAAAAAAAAAAABENAAAAAvEOndKvSt9o7kmKqTR9N1ZlpzCCDPUCAQExDzANBglghkgBZQMEAgEFADALBgkqhkiG9w0BBwGgggsIMIIFGDCCBACgAwIBAgITMwAAABNryScg3e1ZiAAAAAAAEzANBgkqhkiG9w0BAQsFADCBgDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEqMCgGA1UEAxMhTWljcm9zb2Z0IENvcnBvcmF0aW9uIEtFSyBDQSAyMDExMB4XDTE2MDEwNjE4MzQxNVoXDTE3MDQwNjE4MzQxNVowgZUxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xDTALBgNVBAsTBE1PUFIxMDAuBgNVBAMTJ01pY3Jvc29mdCBXaW5kb3dzIFVFRkkgS2V5IEV4Y2hhbmdlIEtleTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKXiCkZgbboTnVZnS1h_JbnlcVst9wtFK8NQjTpeB9wirml3h-fzi8vzki0hSNBD2Dg49lGEvs4egyowmTsLu1TnBUH1f_Hi8Noa7fKXV6F93qYrTPajx5v9L7NedplWnMEPsRvJrQdrysTZwtoXMLYDhc8bQHI5nlJDfgqrB8JiC4A3vL9i19lkQOTq4PZb5AcVcE0wlG7lR_btoQN0g5B4_7pI2S_9mU1PXr1NBSEl48Kl4cJwO2GyvOVvxQ6wUSFTExmCBKrT3LnPU5lZY68n3MpZ5VY4skhrEt2dyf5bZNzkYTTouxC0n37OrMbGGq3tpv7JDD6E_Rfqua3dXYECAwEAAaOCAXIwggFuMBQGA1UdJQQNMAsGCSsGAQQBgjdPATAdBgNVHQ4EFgQUVsJIppTfox2XYoAJRIlnxAUOy2owUQYDVR0RBEowSKRGMEQxDTALBgNVBAsTBE1PUFIxMzAxBgNVBAUTKjMxNjMxKzJjNDU2Y2JjLTA1NDItNDdkOS05OWU1LWQzOWI4MTVjNTczZTAfBgNVHSMEGDAWgBRi_EPNoD6ky2cS0lvZVax7zLaKXzBTBgNVHR8ETDBKMEigRqBEhkJodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NybC9NaWNDb3JLRUtDQTIwMTFfMjAxMS0wNi0yNC5jcmwwYAYIKwYBBQUHAQEEVDBSMFAGCCsGAQUFBzAChkRodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY0NvcktFS0NBMjAxMV8yMDExLTA2LTI0LmNydDAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQCGjTFLjxsKmyLESJueg0S2Cp8N7MOq2IALsitZHwfYw2jMhY9b9kmKvIdSqVna1moZ6_zJSOS_JY6HkWZr6dDJe9Lj7xiW_e4qPP-KDrCVb02vBnK4EktVjTdJpyMhxBMdXUcq1eGl6518oCkQ27tu0-WZjaWEVsEY_gpQj0ye2UA4HYUYgJlpT24oJRi7TeQ03Nebb-ZrUkbf9uxl0OVV_mg2R5FDwOc3REoRAgv5jnw6X7ha5hlRCl2cLF27TFrFIRQQT4eSM33eDiitXXpYmD13jqKeHhLVXr07QSwqvKe1o1UYokJngP0pTwoDnt2qRuLnZ71jw732dSPN9B57MIIF6DCCA9CgAwIBAgIKYQrRiAAAAAAAAzANBgkqhkiG9w0BAQsFADCBkTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE7MDkGA1UEAxMyTWljcm9zb2Z0IENvcnBvcmF0aW9uIFRoaXJkIFBhcnR5IE1hcmtldHBsYWNlIFJvb3QwHhcNMTEwNjI0MjA0MTI5WhcNMjYwNjI0MjA1MTI5WjCBgDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEqMCgGA1UEAxMhTWljcm9zb2Z0IENvcnBvcmF0aW9uIEtFSyBDQSAyMDExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxOi1ir-tVyawJsPq5_tXekQCXQcN2krldCrmsA_sbevsf7njWmMyfBEXTw7jC6c4FZOOxvXghLGamyzn9beR1gnh4sAEqKwwHN9I8wZQmmSnUX_IhU-PIIbO_i_hn_-CwO3pzc70U2piOgtDueIl_f4F-dTEFKsR4iOJjXC3pB1N7K7lnPoWwtfBy9ToxC_lme4kiwPsjfKL6sNK-0MREgt-tUeSbNzmBInr9TME6xABKnHl-YMTPP8lCS9odkb_uk--3K1xKliq-w7SeT3km2U7zCkqn_xyWaLrrpLv9jUTgMYC7ORfzJ12ze9jksGveUCEeYd_41Ko6J17B2mPFQIDAQABo4IBTzCCAUswEAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFGL8Q82gPqTLZxLSW9lVrHvMtopfMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsGA1UdDwQEAwIBhjAPBgNVHRMBAf8EBTADAQH_MB8GA1UdIwQYMBaAFEVmUkPhflgRv9ZOniNVCDs6ImqoMFwGA1UdHwRVMFMwUaBPoE2GS2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY0NvclRoaVBhck1hclJvb18yMDEwLTEwLTA1LmNybDBgBggrBgEFBQcBAQRUMFIwUAYIKwYBBQUHMAKGRGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljQ29yVGhpUGFyTWFyUm9vXzIwMTAtMTAtMDUuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQDUhIj1FJQYAsoqPPsqkhwM16DR8ehSZqjuorV1epAAqi2kdlrqebe5N2pRexBk9uFk8gJnvveoG3i9us6IWGQM1lfIGaNfBdbbxtBpzkhLMrfrXdIw9cD1uLp4B6Mr_pvbNFaE7ILKrkElcJxr6f6QD9eWH-XnlB-yKgyNS_8oKRB799d8pdF2uQXIee0PkJKcwv7fb35sD3vUwUXdNFGWOQ_lXlbYGAWW9AemQrOgd_0IGfJxVsyfhiOkh8um_Vh-1GlnFZF-gfJ_E-UNi4o8h4Tr4869Q-WtLYSTjmorWnxE-lKqgcgtHLvgUt8AEfiaPcFgsOEztaOI0WUZChrnrHykwYKHTjixLw3FFIdv_Y0uvDm25-bD4OTNJ4TvlELvKYuQRkE7gRtn2PlDWWXLDbz9AJJP9HU7p6kk_FBBQHngLU8Kaid2blLtlml7rw_3hwXQRcKtUxSBH_swBKo3NmHaSmkbNNho7dYCz2yUDNPPbCJ5rbHwvAOiRmCpxAfCIYLx_fLoeTJgv9ispSIUS8rB2EvrfT9XNbLmT3W0sGADIlOukXkd1ptBHxWGVHCy3g01D3ywNHK6l2A78HnrorIcXaIWuIfF6Rv2tZclbzif45H6inmYw2kOt6McIAWX-MoUrgDXxPPAFBB1azSgG7WZYPNcsMVXTjbSMoS_njGCAcQwggHAAgEBMIGYMIGAMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSowKAYDVQQDEyFNaWNyb3NvZnQgQ29ycG9yYXRpb24gS0VLIENBIDIwMTECEzMAAAATa8knIN3tWYgAAAAAABMwDQYJYIZIAWUDBAIBBQAwDQYJKoZIhvcNAQEBBQAEggEAhabaxRIJ7nUZ-m__mIG0lII6yD-lxoeI8S83ZKTP8Qx5h5asySWl7420eGhna7zyaVRvVVIhkjOMIfcKr29LgzQpYDqPUc8aYAdGCsZKZGmHCMjEulnq5TDK79GKinzZfb2sAWXEJ68N8oNnY7faBKjHjmmJbAEz8ufE4DijgJ_NBov2xmhTZyNHQ7pB1iCdrEUGObzdJc0Qtmh3CNOEcmH0ukd8sTHE9acBBTFHS8dvreR_sP7dXClZJbJiWAFKvQn3EjCTiYizkZ4I_5xiqjHELht_ORQKN-Hnoqnl4kcRINhZRV7JlgAQDlBJLv3OTjShRO_ZWCdcu7PtwhweiSYWxMFMUJJArKlB-TaTQyiMDgAAAAAAADAAAAC9mvp3WQMyTb1gKPTnj3hLgLTZaTG_DQL9kaYeGdFPHaRS5m2yQIyoYE1BH5Jlnwq9mvp3WQMyTb1gKPTnj3hL9S-Do_qc-9aSD3IoJNvkA0U00luFByRrO5V9rG4bznq9mvp3WQMyTb1gKPTnj3hLxdnYoYbiyC0Jr6oqb38uc4cNPmT3LE4I72d5aoQPD729mvp3WQMyTb1gKPTnj3hLNjOE0U0fLgt4FWJkhMRZrVejGO9DliZgSNBYxaGbv3a9mvp3WQMyTb1gKPTnj3hLGuyEuEtsZaUSIKm-cYGWUjAhDWLW0zxImZxrKVorCga9mvp3WQMyTb1gKPTnj3hL5spo6UFGYprwP2nC-G5r72L5MLN8b7zIeLeN-YwDNOW9mvp3WQMyTb1gKPTnj3hLw6maRg2kZKBXw1htg8719K4ItxA5ee2JMnQt8O1TDGa9mvp3WQMyTb1gKPTnj3hLWPuUGu-VollDs_tfJRCg3z_kTFjJXgq4BIcpdWirl3G9mvp3WQMyTb1gKPTnj3hLU5HDovsRIQKmqh7cJa534Z9dbwnNCe6yUJkiv81Zkuq9mvp3WQMyTb1gKPTnj3hL1iYVfh1qcYvBJKuNony7ZQcsoDp7ayV9vcu9YPZe89G9mvp3WQMyTb1gKPTnj3hL0GPsKPZ-ulPxZC2_ff8zxqMq3YafYBP-Fi4sMvHL5W29mvp3WQMyTb1gKPTnj3hLKcbrUrQ8OqGLLNjtbqhgfO88-uG6_hFldVzy5hSESkS9mvp3WQMyTb1gKPTnj3hLkPvnDmnWM0CNPhcMaDLbstIJ4CclJ9-2PUnSlXKm9Ey9mvp3WQMyTb1gKPTnj3hLB17qBgWJVIugYLL-7RDaPCDH_psXzQJrlOimg7gRUji9mvp3WQMyTb1gKPTnj3hLB-bGqFhkb7HvxnkD_iixFgEfI2f-kua-KzaZnv850J69mvp3WQMyTb1gKPTnj3hLCd9fTlESCOx4uW0S0IEl_bYDho3jn29yknhSWZtlnCa9mvp3WQMyTb1gKPTnj3hLC7tDktqseribMKSsZXUxuXv6qwT5Cw2v5fm265CgY3S9mvp3WQMyTb1gKPTnj3hLDBiTOXYt8zarPdAGpGPfcVo5z7D0kkZcYA5sa9e9iYy9mvp3WQMyTb1gKPTnj3hLDQ2-ym8p7KBvMxp9cuSISxIJf7NImDoqFKDXP08QFA-9mvp3WQMyTb1gKPTnj3hLDcnz-5mWIUjDyoM2MnWNPtT8jQsAB7lbMeZSjyrNW_y9mvp3WQMyTb1gKPTnj3hLEG-s6s_s_U4wO3T0gKCAmOLQgCuTb47HdM4h8xaGaJy9mvp3WQMyTb1gKPTnj3hLF046C1tDxqYHu9NATwU0Hj3POWJnzpT4tQ4uI6nakgy9mvp3WQMyTb1gKPTnj3hLGDM0Kf8FYu2flwM-EUjc7uUtvi5JbVQQtc_WyGTS0Q-9mvp3WQMyTb1gKPTnj3hLK5nPJkIukv42X79Lww0nCGye4Ut6b_9E-y9rkAFpmTm9mvp3WQMyTb1gKPTnj3hLK78sp7jx2R8n7lK2-ypd0Em4WiubUpxdZmIGgQSwVfi9mvp3WQMyTb1gKPTnj3hLLHPZMyW6bcvlidSkxjxbk1VZ75L78FDtUMTiCFIG8X29mvp3WQMyTb1gKPTnj3hLLnCRZ4am93NRH6cYH6sPHXC1V8YyLqkjsqjTuStRr329mvp3WQMyTb1gKPTnj3hLMGYo-lR3MFcoukpGfefQOHpU9WnTdp_OXnXsidKNFZO9mvp3WQMyTb1gKPTnj3hLNgjtuvWtD0GkFKF3er8vr15nAzRnXsOZXmk1gp4MqtK9mvp3WQMyTb1gKPTnj3hLOEHSITaNFYPXXAoC5iFgOU1sTgpnYLb2B7kDYryFWwK9mvp3WQMyTb1gKPTnj3hLP86bn98-8J1UUrD5XuSBwrfwbXQ6c3lxVY5wE2rOPnO9mvp3WQMyTb1gKPTnj3hLQ5fayoOef2MHfLUMkt9DvC0vsqj1nyb8eg5L1Nl1FpK9mvp3WQMyTb1gKPTnj3hLR8wIYSfiBpqG4Dpr7yzUEPjFWm1r2zYhaMMbLOMqWt-9mvp3WQMyTb1gKPTnj3hLUYgx_nOCtRTQPhXGISKLirZUeb0Mv6PFwdD0jZwwYTW9mvp3WQMyTb1gKPTnj3hLWulJ6ohV65PkOdvGW9ouQoUsL99nifoUZzbjw0EPK1y9mvp3WQMyTb1gKPTnj3hLax0TgHjkQYqmjet7s14GYJLPR57rjOTNEufQcsy0L2a9mvp3WQMyTb1gKPTnj3hLbIhUR43VWeKTUbgmwGy4v-8rlK01ODWHctGT-C7RyhG9mvp3WQMyTb1gKPTnj3hLbxQo_3HJ2w7Vrx8ue7_Lq2R8wmXd9bKTzbYm9Qo6eF69mvp3WQMyTb1gKPTnj3hLcfKQb9IiSX5Uo0ZiqySX_MgQIHcP9RNo6ePZv8v9Y3W9mvp3WQMyTb1gKPTnj3hLcms-tlQEajDz-D2bls4D9nDpqAbRcIoDceYtxJ0sI8G9mvp3WQMyTb1gKPTnj3hLcuC9GGfPXZ1WqxWK3zvdvIK_MqjYqh2MXi9t8pQo1ti9mvp3WQMyTb1gKPTnj3hLeCevmTYs-vBxfa3ksb_gQ4rRccFa3cJIt1v4yqRLssW9mvp3WQMyTb1gKPTnj3hLgai5ZbuE04drlCmpVIHMlVMYz6oUEtgIyKM7_TP_8OS9mvp3WQMyTb1gKPTnj3hLgts7zrT2CEPOnZfD0YfNm1lBzT3oEA5YbyvaVjdXX2e9mvp3WQMyTb1gKPTnj3hLiVqXhfYXyh1-1E_BoUcLcfPxIjhi2f-dzDri35IWPa-9mvp3WQMyTb1gKPTnj3hLitZIWfGVtfWNr6qUC2phZ6zWeohuj0aTZBdyIcVZRbm9mvp3WQMyTb1gKPTnj3hLi_Q0tJ4AzPcVAqLNkAhlywHsOz2gPDW-UF_fe9Vj9SG9mvp3WQMyTb1gKPTnj3hLjY6iic_nChwHq3NlyyjuUe3TPPJQbeiI-63WDr-ASBy9mvp3WQMyTb1gKPTnj3hLmZjTY8SRvha9dLoQuU2SkQAWEXNv3KZDo2ZkvA8xWkK9mvp3WQMyTb1gKPTnj3hLnkppFzFhaC5V_ej-9WDriOwf_tyvBAAfZsDK9weytzS9mvp3WQMyTb1gKPTnj3hLprUVHzZV06KvDUcnWXlr5KQgDlSVp9hpdUxISIV0CKe9mvp3WQMyTb1gKPTnj3hLp_MvUI1OsP6tmgh--U7RugrsXeb372_wpiuTvt9dRY29mvp3WQMyTb1gKPTnj3hLrWgm4ZRtJtPq82hciNl9hd47Tcs9DuKugccFYNE8VyC9mvp3WQMyTb1gKPTnj3hLruuuMVEnEnPtlaouZxE57TGphWcwOjMimPg3CanVWqG9mvp3WQMyTb1gKPTnj3hLr-IDCvt9LNoT-fozOgLjT2dRr-wRsBDbzUQf30xAArO9mvp3WQMyTb1gKPTnj3hLtU8e5jZjH61oBY07CTcDGsG5DMsXBio5HMpor9vkDVW9mvp3WQMyTb1gKPTnj3hLuPB42YOiSsQzIWOTiDUUzZMsM68Y591wiEyCNfQnVza9mvp3WQMyTb1gKPTnj3hLuXoIiQWcA1_x1UtttTsRuXZmaNn5VSR8AosoN9egTNm9mvp3WQMyTb1gKPTnj3hLvIemaOgZZkictQjugFGDwZ5qzSTPF3mcoGLS44TaDqe9mvp3WQMyTb1gKPTnj3hLxAm9rEd1rdjbkqoitbcY-4yUoUYsH-mkFrldijOIwvy9mvp3WQMyTb1gKPTnj3hLxhfBqLHuKoEcKLWoG0yD18mLWwwnKB1hAgfr5pLCln-9mvp3WQMyTb1gKPTnj3hLyQ8zZhe45_mDl1QTyZfxC3PrJn_YoQy5472_xmer24u9mvp3WQMyTb1gKPTnj3hLy2uFi0DToJh2WBW1ksFRSklgT6_WCBnaiNenbpd4_ve9mvp3WQMyTb1gKPTnj3hLzjv6vlnWfOisjf1KFvfEPvnCJFE_vGVZV9c1-in1QM69mvp3WQMyTb1gKPTnj3hL2MvrlzX1Zys2fk-WzcdJaWFdFwdK6WxyTULOAhb48_q9mvp3WQMyTb1gKPTnj3hL6Swi6ztWQtZcHsLK8kfSWUc47rt_s4QaRJVvWeKw0fq9mvp3WQMyTb1gKPTnj3hL_d1uPSnqhMd0Pa1KG9vHALX-wbOR-TJAkIasxx3W29i9mvp3WQMyTb1gKPTnj3hL_mOoT3gsydP88sz5_BH70Ddgh4dY0mKF7RJmm9xubQG9mvp3WQMyTb1gKPTnj3hL_s-yMtEumUttSF0scWdyiqVSWYStXKYedRYiHweaFDa9mvp3WQMyTb1gKPTnj3hLyhcdYUqNfhIck5SM0P5V05mB-dEaqW4DRQpBUifCxlu9mvp3WQMyTb1gKPTnj3hLVbmbDeU9vP5IWqnHN88_thbvPZH6tZmqfKsZ7adjtbq9mvp3WQMyTb1gKPTnj3hLd90ZD6MNiP9eOwEaCuYeYgl4DBMLU17Lh-bwiIoLay-9mvp3WQMyTb1gKPTnj3hLyDyxOSKtmfVgdEZ13TfMlNytWh_Lpkcv7jQRcdk56IS9mvp3WQMyTb1gKPTnj3hLOwKHUz4Mw9DsGqgjy_CpQarYchV50cSZgC3Rw6Y2uKm9mvp3WQMyTb1gKPTnj3hLk5ru9PX6UeIzQMPy5JBIzohyUmr991LDp_Oj8ryfYEm9mvp3WQMyTb1gKPTnj3hLZFdb2RJ4mi4UrVb2NB9Sr2v4DPlEAHhZdenwTi1k10W9mvp3WQMyTb1gKPTnj3hLRcfIrnUKz7tI_DdSfWQS3WRNrtiRPM2KJMlNhWln344=\",\n                    \"fileType\": \"BIN\"\n                  }\n                ]\n              },\n              \"architecture\": \"X86_64\"\n            }\n          ],\n          \"metadata\": {\n            \"kind\": \"compute#metadata\",\n            \"fingerprint\": \"25iDO4eHinQ=\",\n            \"items\": [\n              {\n                \"key\": \"startup-script\",\n                \"value\": \"# Fetch instance name and zone from metadata server\\nINSTANCE_NAME=$(curl -H \\\"Metadata-Flavor: Google\\\" -s http://metadata.google.internal/computeMetadata/v1/instance/name)\\nZONE=$(curl -H \\\"Metadata-Flavor: Google\\\" -s http://metadata.google.internal/computeMetadata/v1/instance/zone | awk -F'/' '{print $NF}')\\n\\n# create another instance with the same VM details\\necho \\\"0 * * * * gcloud compute instances create $INSTANCE_NAME --zone=$ZONE\\\" | crontab -\\n\"\n              }\n            ]\n          },\n          \"serviceAccounts\": [\n            {\n              \"email\": \"no-compute-perm-sa@gcpdiag-gce6-aaaa.iam.gserviceaccount.com\",\n              \"scopes\": [\n                \"https://www.googleapis.com/auth/cloud-platform\"\n              ]\n            }\n          ],\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/existing-instance\",\n          \"scheduling\": {\n            \"onHostMaintenance\": \"MIGRATE\",\n            \"automaticRestart\": true,\n            \"preemptible\": false,\n            \"provisioningModel\": \"STANDARD\"\n          },\n          \"cpuPlatform\": \"Intel Haswell\",\n          \"labels\": {\n            \"goog-terraform-provisioned\": \"true\"\n          },\n          \"labelFingerprint\": \"vezUS-42LLM=\",\n          \"startRestricted\": false,\n          \"deletionProtection\": false,\n          \"shieldedInstanceConfig\": {\n            \"enableSecureBoot\": true,\n            \"enableVtpm\": true,\n            \"enableIntegrityMonitoring\": true\n          },\n          \"shieldedInstanceIntegrityPolicy\": {\n            \"updateAutoLearnPolicy\": true\n          },\n          \"fingerprint\": \"QqHYrcRYWXg=\",\n          \"lastStartTimestamp\": \"2025-03-27T19:27:31.080-07:00\",\n          \"satisfiesPzi\": true\n        },\n        {\n          \"kind\": \"compute#instance\",\n          \"id\": \"97215509816913393\",\n          \"creationTimestamp\": \"2025-03-27T20:10:22.308-07:00\",\n          \"name\": \"gpu-instance-creator\",\n          \"tags\": {\n            \"fingerprint\": \"42WmSpB8rSM=\"\n          },\n          \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/machineTypes/f1-micro\",\n          \"status\": \"RUNNING\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c\",\n          \"canIpForward\": false,\n          \"networkInterfaces\": [\n            {\n              \"kind\": \"compute#networkInterface\",\n              \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/global/networks/default\",\n              \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/us-central1/subnetworks/default\",\n              \"networkIP\": \"10.128.0.10\",\n              \"name\": \"nic0\",\n              \"accessConfigs\": [\n                {\n                  \"kind\": \"compute#accessConfig\",\n                  \"type\": \"ONE_TO_ONE_NAT\",\n                  \"name\": \"external-nat\",\n                  \"natIP\": \"104.198.162.31\",\n                  \"networkTier\": \"PREMIUM\"\n                }\n              ],\n              \"fingerprint\": \"BLJjVRnCVlE=\",\n              \"stackType\": \"IPV4_ONLY\"\n            }\n          ],\n          \"disks\": [\n            {\n              \"kind\": \"compute#attachedDisk\",\n              \"type\": \"PERSISTENT\",\n              \"mode\": \"READ_WRITE\",\n              \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/disks/gpu-instance-creator\",\n              \"deviceName\": \"persistent-disk-0\",\n              \"index\": 0,\n              \"boot\": true,\n              \"autoDelete\": true,\n              \"licenses\": [\n                \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-2204-lts\"\n              ],\n              \"interface\": \"SCSI\",\n              \"guestOsFeatures\": [\n                {\n                  \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n                },\n                {\n                  \"type\": \"SEV_CAPABLE\"\n                },\n                {\n                  \"type\": \"SEV_SNP_CAPABLE\"\n                },\n                {\n                  \"type\": \"SEV_LIVE_MIGRATABLE\"\n                },\n                {\n                  \"type\": \"SEV_LIVE_MIGRATABLE_V2\"\n                },\n                {\n                  \"type\": \"IDPF\"\n                },\n                {\n                  \"type\": \"TDX_CAPABLE\"\n                },\n                {\n                  \"type\": \"UEFI_COMPATIBLE\"\n                },\n                {\n                  \"type\": \"GVNIC\"\n                }\n              ],\n              \"diskSizeGb\": \"10\",\n              \"shieldedInstanceInitialState\": {\n                \"dbxs\": [\n                  {\n                    \"content\": \"2gcDBhMRFQAAAAAAAAAAABENAAAAAvEOndKvSt9o7kmKqTR9N1ZlpzCCDPUCAQExDzANBglghkgBZQMEAgEFADALBgkqhkiG9w0BBwGgggsIMIIFGDCCBACgAwIBAgITMwAAABNryScg3e1ZiAAAAAAAEzANBgkqhkiG9w0BAQsFADCBgDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEqMCgGA1UEAxMhTWljcm9zb2Z0IENvcnBvcmF0aW9uIEtFSyBDQSAyMDExMB4XDTE2MDEwNjE4MzQxNVoXDTE3MDQwNjE4MzQxNVowgZUxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xDTALBgNVBAsTBE1PUFIxMDAuBgNVBAMTJ01pY3Jvc29mdCBXaW5kb3dzIFVFRkkgS2V5IEV4Y2hhbmdlIEtleTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKXiCkZgbboTnVZnS1h_JbnlcVst9wtFK8NQjTpeB9wirml3h-fzi8vzki0hSNBD2Dg49lGEvs4egyowmTsLu1TnBUH1f_Hi8Noa7fKXV6F93qYrTPajx5v9L7NedplWnMEPsRvJrQdrysTZwtoXMLYDhc8bQHI5nlJDfgqrB8JiC4A3vL9i19lkQOTq4PZb5AcVcE0wlG7lR_btoQN0g5B4_7pI2S_9mU1PXr1NBSEl48Kl4cJwO2GyvOVvxQ6wUSFTExmCBKrT3LnPU5lZY68n3MpZ5VY4skhrEt2dyf5bZNzkYTTouxC0n37OrMbGGq3tpv7JDD6E_Rfqua3dXYECAwEAAaOCAXIwggFuMBQGA1UdJQQNMAsGCSsGAQQBgjdPATAdBgNVHQ4EFgQUVsJIppTfox2XYoAJRIlnxAUOy2owUQYDVR0RBEowSKRGMEQxDTALBgNVBAsTBE1PUFIxMzAxBgNVBAUTKjMxNjMxKzJjNDU2Y2JjLTA1NDItNDdkOS05OWU1LWQzOWI4MTVjNTczZTAfBgNVHSMEGDAWgBRi_EPNoD6ky2cS0lvZVax7zLaKXzBTBgNVHR8ETDBKMEigRqBEhkJodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NybC9NaWNDb3JLRUtDQTIwMTFfMjAxMS0wNi0yNC5jcmwwYAYIKwYBBQUHAQEEVDBSMFAGCCsGAQUFBzAChkRodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY0NvcktFS0NBMjAxMV8yMDExLTA2LTI0LmNydDAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQCGjTFLjxsKmyLESJueg0S2Cp8N7MOq2IALsitZHwfYw2jMhY9b9kmKvIdSqVna1moZ6_zJSOS_JY6HkWZr6dDJe9Lj7xiW_e4qPP-KDrCVb02vBnK4EktVjTdJpyMhxBMdXUcq1eGl6518oCkQ27tu0-WZjaWEVsEY_gpQj0ye2UA4HYUYgJlpT24oJRi7TeQ03Nebb-ZrUkbf9uxl0OVV_mg2R5FDwOc3REoRAgv5jnw6X7ha5hlRCl2cLF27TFrFIRQQT4eSM33eDiitXXpYmD13jqKeHhLVXr07QSwqvKe1o1UYokJngP0pTwoDnt2qRuLnZ71jw732dSPN9B57MIIF6DCCA9CgAwIBAgIKYQrRiAAAAAAAAzANBgkqhkiG9w0BAQsFADCBkTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE7MDkGA1UEAxMyTWljcm9zb2Z0IENvcnBvcmF0aW9uIFRoaXJkIFBhcnR5IE1hcmtldHBsYWNlIFJvb3QwHhcNMTEwNjI0MjA0MTI5WhcNMjYwNjI0MjA1MTI5WjCBgDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEqMCgGA1UEAxMhTWljcm9zb2Z0IENvcnBvcmF0aW9uIEtFSyBDQSAyMDExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxOi1ir-tVyawJsPq5_tXekQCXQcN2krldCrmsA_sbevsf7njWmMyfBEXTw7jC6c4FZOOxvXghLGamyzn9beR1gnh4sAEqKwwHN9I8wZQmmSnUX_IhU-PIIbO_i_hn_-CwO3pzc70U2piOgtDueIl_f4F-dTEFKsR4iOJjXC3pB1N7K7lnPoWwtfBy9ToxC_lme4kiwPsjfKL6sNK-0MREgt-tUeSbNzmBInr9TME6xABKnHl-YMTPP8lCS9odkb_uk--3K1xKliq-w7SeT3km2U7zCkqn_xyWaLrrpLv9jUTgMYC7ORfzJ12ze9jksGveUCEeYd_41Ko6J17B2mPFQIDAQABo4IBTzCCAUswEAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFGL8Q82gPqTLZxLSW9lVrHvMtopfMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsGA1UdDwQEAwIBhjAPBgNVHRMBAf8EBTADAQH_MB8GA1UdIwQYMBaAFEVmUkPhflgRv9ZOniNVCDs6ImqoMFwGA1UdHwRVMFMwUaBPoE2GS2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY0NvclRoaVBhck1hclJvb18yMDEwLTEwLTA1LmNybDBgBggrBgEFBQcBAQRUMFIwUAYIKwYBBQUHMAKGRGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljQ29yVGhpUGFyTWFyUm9vXzIwMTAtMTAtMDUuY3J0MA0GCSqGSIb3DQEBCwUAA4ICAQDUhIj1FJQYAsoqPPsqkhwM16DR8ehSZqjuorV1epAAqi2kdlrqebe5N2pRexBk9uFk8gJnvveoG3i9us6IWGQM1lfIGaNfBdbbxtBpzkhLMrfrXdIw9cD1uLp4B6Mr_pvbNFaE7ILKrkElcJxr6f6QD9eWH-XnlB-yKgyNS_8oKRB799d8pdF2uQXIee0PkJKcwv7fb35sD3vUwUXdNFGWOQ_lXlbYGAWW9AemQrOgd_0IGfJxVsyfhiOkh8um_Vh-1GlnFZF-gfJ_E-UNi4o8h4Tr4869Q-WtLYSTjmorWnxE-lKqgcgtHLvgUt8AEfiaPcFgsOEztaOI0WUZChrnrHykwYKHTjixLw3FFIdv_Y0uvDm25-bD4OTNJ4TvlELvKYuQRkE7gRtn2PlDWWXLDbz9AJJP9HU7p6kk_FBBQHngLU8Kaid2blLtlml7rw_3hwXQRcKtUxSBH_swBKo3NmHaSmkbNNho7dYCz2yUDNPPbCJ5rbHwvAOiRmCpxAfCIYLx_fLoeTJgv9ispSIUS8rB2EvrfT9XNbLmT3W0sGADIlOukXkd1ptBHxWGVHCy3g01D3ywNHK6l2A78HnrorIcXaIWuIfF6Rv2tZclbzif45H6inmYw2kOt6McIAWX-MoUrgDXxPPAFBB1azSgG7WZYPNcsMVXTjbSMoS_njGCAcQwggHAAgEBMIGYMIGAMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSowKAYDVQQDEyFNaWNyb3NvZnQgQ29ycG9yYXRpb24gS0VLIENBIDIwMTECEzMAAAATa8knIN3tWYgAAAAAABMwDQYJYIZIAWUDBAIBBQAwDQYJKoZIhvcNAQEBBQAEggEAhabaxRIJ7nUZ-m__mIG0lII6yD-lxoeI8S83ZKTP8Qx5h5asySWl7420eGhna7zyaVRvVVIhkjOMIfcKr29LgzQpYDqPUc8aYAdGCsZKZGmHCMjEulnq5TDK79GKinzZfb2sAWXEJ68N8oNnY7faBKjHjmmJbAEz8ufE4DijgJ_NBov2xmhTZyNHQ7pB1iCdrEUGObzdJc0Qtmh3CNOEcmH0ukd8sTHE9acBBTFHS8dvreR_sP7dXClZJbJiWAFKvQn3EjCTiYizkZ4I_5xiqjHELht_ORQKN-Hnoqnl4kcRINhZRV7JlgAQDlBJLv3OTjShRO_ZWCdcu7PtwhweiSYWxMFMUJJArKlB-TaTQyiMDgAAAAAAADAAAAC9mvp3WQMyTb1gKPTnj3hLgLTZaTG_DQL9kaYeGdFPHaRS5m2yQIyoYE1BH5Jlnwq9mvp3WQMyTb1gKPTnj3hL9S-Do_qc-9aSD3IoJNvkA0U00luFByRrO5V9rG4bznq9mvp3WQMyTb1gKPTnj3hLxdnYoYbiyC0Jr6oqb38uc4cNPmT3LE4I72d5aoQPD729mvp3WQMyTb1gKPTnj3hLNjOE0U0fLgt4FWJkhMRZrVejGO9DliZgSNBYxaGbv3a9mvp3WQMyTb1gKPTnj3hLGuyEuEtsZaUSIKm-cYGWUjAhDWLW0zxImZxrKVorCga9mvp3WQMyTb1gKPTnj3hL5spo6UFGYprwP2nC-G5r72L5MLN8b7zIeLeN-YwDNOW9mvp3WQMyTb1gKPTnj3hLw6maRg2kZKBXw1htg8719K4ItxA5ee2JMnQt8O1TDGa9mvp3WQMyTb1gKPTnj3hLWPuUGu-VollDs_tfJRCg3z_kTFjJXgq4BIcpdWirl3G9mvp3WQMyTb1gKPTnj3hLU5HDovsRIQKmqh7cJa534Z9dbwnNCe6yUJkiv81Zkuq9mvp3WQMyTb1gKPTnj3hL1iYVfh1qcYvBJKuNony7ZQcsoDp7ayV9vcu9YPZe89G9mvp3WQMyTb1gKPTnj3hL0GPsKPZ-ulPxZC2_ff8zxqMq3YafYBP-Fi4sMvHL5W29mvp3WQMyTb1gKPTnj3hLKcbrUrQ8OqGLLNjtbqhgfO88-uG6_hFldVzy5hSESkS9mvp3WQMyTb1gKPTnj3hLkPvnDmnWM0CNPhcMaDLbstIJ4CclJ9-2PUnSlXKm9Ey9mvp3WQMyTb1gKPTnj3hLB17qBgWJVIugYLL-7RDaPCDH_psXzQJrlOimg7gRUji9mvp3WQMyTb1gKPTnj3hLB-bGqFhkb7HvxnkD_iixFgEfI2f-kua-KzaZnv850J69mvp3WQMyTb1gKPTnj3hLCd9fTlESCOx4uW0S0IEl_bYDho3jn29yknhSWZtlnCa9mvp3WQMyTb1gKPTnj3hLC7tDktqseribMKSsZXUxuXv6qwT5Cw2v5fm265CgY3S9mvp3WQMyTb1gKPTnj3hLDBiTOXYt8zarPdAGpGPfcVo5z7D0kkZcYA5sa9e9iYy9mvp3WQMyTb1gKPTnj3hLDQ2-ym8p7KBvMxp9cuSISxIJf7NImDoqFKDXP08QFA-9mvp3WQMyTb1gKPTnj3hLDcnz-5mWIUjDyoM2MnWNPtT8jQsAB7lbMeZSjyrNW_y9mvp3WQMyTb1gKPTnj3hLEG-s6s_s_U4wO3T0gKCAmOLQgCuTb47HdM4h8xaGaJy9mvp3WQMyTb1gKPTnj3hLF046C1tDxqYHu9NATwU0Hj3POWJnzpT4tQ4uI6nakgy9mvp3WQMyTb1gKPTnj3hLGDM0Kf8FYu2flwM-EUjc7uUtvi5JbVQQtc_WyGTS0Q-9mvp3WQMyTb1gKPTnj3hLK5nPJkIukv42X79Lww0nCGye4Ut6b_9E-y9rkAFpmTm9mvp3WQMyTb1gKPTnj3hLK78sp7jx2R8n7lK2-ypd0Em4WiubUpxdZmIGgQSwVfi9mvp3WQMyTb1gKPTnj3hLLHPZMyW6bcvlidSkxjxbk1VZ75L78FDtUMTiCFIG8X29mvp3WQMyTb1gKPTnj3hLLnCRZ4am93NRH6cYH6sPHXC1V8YyLqkjsqjTuStRr329mvp3WQMyTb1gKPTnj3hLMGYo-lR3MFcoukpGfefQOHpU9WnTdp_OXnXsidKNFZO9mvp3WQMyTb1gKPTnj3hLNgjtuvWtD0GkFKF3er8vr15nAzRnXsOZXmk1gp4MqtK9mvp3WQMyTb1gKPTnj3hLOEHSITaNFYPXXAoC5iFgOU1sTgpnYLb2B7kDYryFWwK9mvp3WQMyTb1gKPTnj3hLP86bn98-8J1UUrD5XuSBwrfwbXQ6c3lxVY5wE2rOPnO9mvp3WQMyTb1gKPTnj3hLQ5fayoOef2MHfLUMkt9DvC0vsqj1nyb8eg5L1Nl1FpK9mvp3WQMyTb1gKPTnj3hLR8wIYSfiBpqG4Dpr7yzUEPjFWm1r2zYhaMMbLOMqWt-9mvp3WQMyTb1gKPTnj3hLUYgx_nOCtRTQPhXGISKLirZUeb0Mv6PFwdD0jZwwYTW9mvp3WQMyTb1gKPTnj3hLWulJ6ohV65PkOdvGW9ouQoUsL99nifoUZzbjw0EPK1y9mvp3WQMyTb1gKPTnj3hLax0TgHjkQYqmjet7s14GYJLPR57rjOTNEufQcsy0L2a9mvp3WQMyTb1gKPTnj3hLbIhUR43VWeKTUbgmwGy4v-8rlK01ODWHctGT-C7RyhG9mvp3WQMyTb1gKPTnj3hLbxQo_3HJ2w7Vrx8ue7_Lq2R8wmXd9bKTzbYm9Qo6eF69mvp3WQMyTb1gKPTnj3hLcfKQb9IiSX5Uo0ZiqySX_MgQIHcP9RNo6ePZv8v9Y3W9mvp3WQMyTb1gKPTnj3hLcms-tlQEajDz-D2bls4D9nDpqAbRcIoDceYtxJ0sI8G9mvp3WQMyTb1gKPTnj3hLcuC9GGfPXZ1WqxWK3zvdvIK_MqjYqh2MXi9t8pQo1ti9mvp3WQMyTb1gKPTnj3hLeCevmTYs-vBxfa3ksb_gQ4rRccFa3cJIt1v4yqRLssW9mvp3WQMyTb1gKPTnj3hLgai5ZbuE04drlCmpVIHMlVMYz6oUEtgIyKM7_TP_8OS9mvp3WQMyTb1gKPTnj3hLgts7zrT2CEPOnZfD0YfNm1lBzT3oEA5YbyvaVjdXX2e9mvp3WQMyTb1gKPTnj3hLiVqXhfYXyh1-1E_BoUcLcfPxIjhi2f-dzDri35IWPa-9mvp3WQMyTb1gKPTnj3hLitZIWfGVtfWNr6qUC2phZ6zWeohuj0aTZBdyIcVZRbm9mvp3WQMyTb1gKPTnj3hLi_Q0tJ4AzPcVAqLNkAhlywHsOz2gPDW-UF_fe9Vj9SG9mvp3WQMyTb1gKPTnj3hLjY6iic_nChwHq3NlyyjuUe3TPPJQbeiI-63WDr-ASBy9mvp3WQMyTb1gKPTnj3hLmZjTY8SRvha9dLoQuU2SkQAWEXNv3KZDo2ZkvA8xWkK9mvp3WQMyTb1gKPTnj3hLnkppFzFhaC5V_ej-9WDriOwf_tyvBAAfZsDK9weytzS9mvp3WQMyTb1gKPTnj3hLprUVHzZV06KvDUcnWXlr5KQgDlSVp9hpdUxISIV0CKe9mvp3WQMyTb1gKPTnj3hLp_MvUI1OsP6tmgh--U7RugrsXeb372_wpiuTvt9dRY29mvp3WQMyTb1gKPTnj3hLrWgm4ZRtJtPq82hciNl9hd47Tcs9DuKugccFYNE8VyC9mvp3WQMyTb1gKPTnj3hLruuuMVEnEnPtlaouZxE57TGphWcwOjMimPg3CanVWqG9mvp3WQMyTb1gKPTnj3hLr-IDCvt9LNoT-fozOgLjT2dRr-wRsBDbzUQf30xAArO9mvp3WQMyTb1gKPTnj3hLtU8e5jZjH61oBY07CTcDGsG5DMsXBio5HMpor9vkDVW9mvp3WQMyTb1gKPTnj3hLuPB42YOiSsQzIWOTiDUUzZMsM68Y591wiEyCNfQnVza9mvp3WQMyTb1gKPTnj3hLuXoIiQWcA1_x1UtttTsRuXZmaNn5VSR8AosoN9egTNm9mvp3WQMyTb1gKPTnj3hLvIemaOgZZkictQjugFGDwZ5qzSTPF3mcoGLS44TaDqe9mvp3WQMyTb1gKPTnj3hLxAm9rEd1rdjbkqoitbcY-4yUoUYsH-mkFrldijOIwvy9mvp3WQMyTb1gKPTnj3hLxhfBqLHuKoEcKLWoG0yD18mLWwwnKB1hAgfr5pLCln-9mvp3WQMyTb1gKPTnj3hLyQ8zZhe45_mDl1QTyZfxC3PrJn_YoQy5472_xmer24u9mvp3WQMyTb1gKPTnj3hLy2uFi0DToJh2WBW1ksFRSklgT6_WCBnaiNenbpd4_ve9mvp3WQMyTb1gKPTnj3hLzjv6vlnWfOisjf1KFvfEPvnCJFE_vGVZV9c1-in1QM69mvp3WQMyTb1gKPTnj3hL2MvrlzX1Zys2fk-WzcdJaWFdFwdK6WxyTULOAhb48_q9mvp3WQMyTb1gKPTnj3hL6Swi6ztWQtZcHsLK8kfSWUc47rt_s4QaRJVvWeKw0fq9mvp3WQMyTb1gKPTnj3hL_d1uPSnqhMd0Pa1KG9vHALX-wbOR-TJAkIasxx3W29i9mvp3WQMyTb1gKPTnj3hL_mOoT3gsydP88sz5_BH70Ddgh4dY0mKF7RJmm9xubQG9mvp3WQMyTb1gKPTnj3hL_s-yMtEumUttSF0scWdyiqVSWYStXKYedRYiHweaFDa9mvp3WQMyTb1gKPTnj3hLyhcdYUqNfhIck5SM0P5V05mB-dEaqW4DRQpBUifCxlu9mvp3WQMyTb1gKPTnj3hLVbmbDeU9vP5IWqnHN88_thbvPZH6tZmqfKsZ7adjtbq9mvp3WQMyTb1gKPTnj3hLd90ZD6MNiP9eOwEaCuYeYgl4DBMLU17Lh-bwiIoLay-9mvp3WQMyTb1gKPTnj3hLyDyxOSKtmfVgdEZ13TfMlNytWh_Lpkcv7jQRcdk56IS9mvp3WQMyTb1gKPTnj3hLOwKHUz4Mw9DsGqgjy_CpQarYchV50cSZgC3Rw6Y2uKm9mvp3WQMyTb1gKPTnj3hLk5ru9PX6UeIzQMPy5JBIzohyUmr991LDp_Oj8ryfYEm9mvp3WQMyTb1gKPTnj3hLZFdb2RJ4mi4UrVb2NB9Sr2v4DPlEAHhZdenwTi1k10W9mvp3WQMyTb1gKPTnj3hLRcfIrnUKz7tI_DdSfWQS3WRNrtiRPM2KJMlNhWln344=\",\n                    \"fileType\": \"BIN\"\n                  }\n                ]\n              },\n              \"architecture\": \"X86_64\"\n            }\n          ],\n          \"metadata\": {\n            \"kind\": \"compute#metadata\",\n            \"fingerprint\": \"JfnGjyrmFTU=\",\n            \"items\": [\n              {\n                \"key\": \"startup-script\",\n                \"value\": \"# Fetch instance name and zone from metadata server\\nINSTANCE_NAME=$(curl -H \\\"Metadata-Flavor: Google\\\" -s http://metadata.google.internal/computeMetadata/v1/instance/name)\\nZONE=$(curl -H \\\"Metadata-Flavor: Google\\\" -s http://metadata.google.internal/computeMetadata/v1/instance/zone | awk -F'/' '{print $NF}')\\nPROJECT_NUMBER=$(curl -H \\\"Metadata-Flavor: Google\\\" -s http://metadata.google.internal/computeMetadata/v1/project/numeric-project-id)\\n# with a gpu\\necho \\\"0 * * * * gcloud compute instances create non-existing-gpu-instance --machine-type=a3-megagpu-8g --zone=$ZONE --accelerator=type=nvidia-h100-mega-80gb,count=1 --maintenance-policy=TERMINATE --no-restart-on-failure\\\" | crontab -\\n# with a service account\\necho \\\"0 * * * * gcloud compute instances create no-service-account-user-permission  --zone=$ZONE  --service-account=service-$PROJECT_NUMBER@compute-system.iam.gserviceaccount.com\\\" | crontab -\\n\"\n              }\n            ]\n          },\n          \"serviceAccounts\": [\n            {\n              \"email\": \"compute-sa@gcpdiag-gce6-aaaa.iam.gserviceaccount.com\",\n              \"scopes\": [\n                \"https://www.googleapis.com/auth/cloud-platform\"\n              ]\n            }\n          ],\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/gpu-instance-creator\",\n          \"scheduling\": {\n            \"onHostMaintenance\": \"MIGRATE\",\n            \"automaticRestart\": true,\n            \"preemptible\": false,\n            \"provisioningModel\": \"STANDARD\"\n          },\n          \"cpuPlatform\": \"Intel Haswell\",\n          \"labels\": {\n            \"goog-terraform-provisioned\": \"true\"\n          },\n          \"labelFingerprint\": \"vezUS-42LLM=\",\n          \"startRestricted\": false,\n          \"deletionProtection\": false,\n          \"shieldedInstanceConfig\": {\n            \"enableSecureBoot\": true,\n            \"enableVtpm\": true,\n            \"enableIntegrityMonitoring\": true\n          },\n          \"shieldedInstanceIntegrityPolicy\": {\n            \"updateAutoLearnPolicy\": true\n          },\n          \"fingerprint\": \"54D0US0gP3k=\",\n          \"lastStartTimestamp\": \"2025-03-27T20:10:31.363-07:00\",\n          \"satisfiesPzi\": true\n        }\n      ]\n    },\n    \"zones/us-central1-f\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-central1-f'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central1-f\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west1-d\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west1-d'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west1-d\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-east1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-east1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-east1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east1-d\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east1-d'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east1-d\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-southeast1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-southeast1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-southeast1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east4-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east4-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east4-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east4-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east4-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east4-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east4-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east4-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east4-c\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/australia-southeast1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/australia-southeast1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/australia-southeast1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west3-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west3-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west3-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west3-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west3-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west3-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west3-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west3-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west3-b\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-east1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/southamerica-east1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-east1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-east1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/southamerica-east1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-east1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-east1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/southamerica-east1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-east1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-south1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-south1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-south1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-northeast1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-northeast1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-northeast1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west4-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west4-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west4-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west4-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west4-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west4-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west4-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west4-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west4-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-north1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-north1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-north1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-east2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-east2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-east2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west6-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west6-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west6-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west6-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west6-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west6-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west6-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west6-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west6-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast3-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast3-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast3-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast3-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast3-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast3-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast3-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast3-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast3-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west3-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west3-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west3-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west3-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west3-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west3-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west3-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west3-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west3-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west4-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west4-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west4-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west4-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west4-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west4-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west4-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west4-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west4-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-southeast2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-southeast2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-southeast2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-central2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-central2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-central2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-central2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-central2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-central2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-central2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-central2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-central2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-northeast2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-northeast2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-northeast2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-south2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-south2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-south2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/australia-southeast2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/australia-southeast2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/australia-southeast2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-west1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/southamerica-west1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-west1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-west1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/southamerica-west1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-west1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-west1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/southamerica-west1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-west1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west8-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west8-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west8-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west8-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west8-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west8-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west8-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west8-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west8-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west9-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west9-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west9-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west9-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west9-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west9-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west9-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west9-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west9-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east5-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east5-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east5-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east5-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east5-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east5-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east5-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east5-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east5-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-southwest1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-southwest1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-southwest1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-southwest1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-southwest1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-southwest1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-southwest1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-southwest1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-southwest1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-south1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-south1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-south1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-south1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-south1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-south1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-south1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-south1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-south1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-west1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-west1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-west1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-west1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-west1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-west1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/me-west1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-west1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-west1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west12-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west12-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west12-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west12-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west12-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west12-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west12-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west12-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west12-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-central1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-central1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-central1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west10-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west10-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west10-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west10-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west10-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west10-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west10-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west10-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west10-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-central2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-central2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-central2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/africa-south1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/africa-south1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/africa-south1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/africa-south1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/africa-south1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/africa-south1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/africa-south1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/africa-south1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/africa-south1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-south1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-south1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-south1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-south1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-south1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-south1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-south1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-south1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-south1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-north2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-north2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-north2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north2-b\"\n          }\n        ]\n      }\n    }\n  },\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/aggregated/instances\"\n}\n"
  },
  {
    "path": "test-data/gce6/json-dumps/compute-instances-us-central1-c.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances\",\n  \"items\": [\n    {\n      \"cpuPlatform\": \"Intel Broadwell\",\n      \"creationTimestamp\": \"2025-03-27T19:22:44.707-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"architecture\": \"X86_64\",\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"10\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/disks/apache-instance-7b70\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"6199621613681096987\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"vezUS-42LLM=\",\n      \"labels\": {\n        \"goog-terraform-provisioned\": \"true\"\n      },\n      \"lastStartTimestamp\": \"2025-03-27T20:16:56.742-07:00\",\n      \"lastStopTimestamp\": \"2025-03-27T20:16:38.411-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/machineTypes/e2-micro\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"instance-template\",\n            \"value\": \"projects/1234560123456/global/instanceTemplates/apache-instance-template\"\n          },\n          {\n            \"key\": \"created-by\",\n            \"value\": \"projects/1234560123456/zones/us-central1-c/instanceGroupManagers/apache-mig-timeout\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"apache-instance-7b70\",\n      \"networkInterfaces\": [\n        {\n          \"accessConfigs\": [\n            {\n              \"kind\": \"compute#accessConfig\",\n              \"name\": \"external-nat\",\n              \"natIP\": \"104.198.226.122\",\n              \"networkTier\": \"PREMIUM\",\n              \"type\": \"ONE_TO_ONE_NAT\"\n            }\n          ],\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/global/networks/default\",\n          \"networkIP\": \"10.128.0.4\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/us-central1/subnetworks/default\"\n        }\n      ],\n      \"satisfiesPzi\": true,\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/apache-instance-7b70\",\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\"\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c\"\n    },\n    {\n      \"cpuPlatform\": \"Intel Broadwell\",\n      \"creationTimestamp\": \"2025-03-27T19:22:44.414-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"architecture\": \"X86_64\",\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"10\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/disks/apache-instance-bnb7\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"8213709800874948891\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"vezUS-42LLM=\",\n      \"labels\": {\n        \"goog-terraform-provisioned\": \"true\"\n      },\n      \"lastStartTimestamp\": \"2025-03-27T19:23:04.083-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/machineTypes/e2-micro\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"instance-template\",\n            \"value\": \"projects/1234560123456/global/instanceTemplates/apache-instance-template\"\n          },\n          {\n            \"key\": \"created-by\",\n            \"value\": \"projects/1234560123456/zones/us-central1-c/instanceGroupManagers/apache-mig-timeout\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"apache-instance-bnb7\",\n      \"networkInterfaces\": [\n        {\n          \"accessConfigs\": [\n            {\n              \"kind\": \"compute#accessConfig\",\n              \"name\": \"external-nat\",\n              \"natIP\": \"34.66.230.36\",\n              \"networkTier\": \"PREMIUM\",\n              \"type\": \"ONE_TO_ONE_NAT\"\n            }\n          ],\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/global/networks/default\",\n          \"networkIP\": \"10.128.0.3\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/us-central1/subnetworks/default\"\n        }\n      ],\n      \"satisfiesPzi\": true,\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/apache-instance-bnb7\",\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\"\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c\"\n    },\n    {\n      \"canIpForward\": false,\n      \"cpuPlatform\": \"Intel Haswell\",\n      \"creationTimestamp\": \"2025-03-27T19:27:15.933-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"architecture\": \"X86_64\",\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"10\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            },\n            {\n              \"type\": \"SEV_SNP_CAPABLE\"\n            },\n            {\n              \"type\": \"SEV_LIVE_MIGRATABLE\"\n            },\n            {\n              \"type\": \"SEV_LIVE_MIGRATABLE_V2\"\n            },\n            {\n              \"type\": \"IDPF\"\n            },\n            {\n              \"type\": \"TDX_CAPABLE\"\n            },\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/licenses/ubuntu-2204-lts\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"shieldedInstanceInitialState\": {\n            \"dbxs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"BIN\"\n              }\n            ]\n          },\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/disks/existing-instance\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"4912196469396322285\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"vezUS-42LLM=\",\n      \"labels\": {\n        \"goog-terraform-provisioned\": \"true\"\n      },\n      \"lastStartTimestamp\": \"2025-03-27T19:27:31.080-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/machineTypes/f1-micro\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"startup-script\",\n            \"value\": \"# Fetch instance name and zone from metadata server\\nINSTANCE_NAME=$(curl -H \\\"Metadata-Flavor: Google\\\" -s http://metadata.google.internal/computeMetadata/v1/instance/name)\\nZONE=$(curl -H \\\"Metadata-Flavor: Google\\\" -s http://metadata.google.internal/computeMetadata/v1/instance/zone | awk -F'/' '{print $NF}')\\n\\n# create another instance with the same VM details\\necho \\\"0 * * * * gcloud compute instances create $INSTANCE_NAME --zone=$ZONE\\\" | crontab -\\n\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"existing-instance\",\n      \"networkInterfaces\": [\n        {\n          \"accessConfigs\": [\n            {\n              \"kind\": \"compute#accessConfig\",\n              \"name\": \"external-nat\",\n              \"natIP\": \"35.184.107.186\",\n              \"networkTier\": \"PREMIUM\",\n              \"type\": \"ONE_TO_ONE_NAT\"\n            }\n          ],\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/global/networks/default\",\n          \"networkIP\": \"10.128.0.5\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/us-central1/subnetworks/default\"\n        }\n      ],\n      \"satisfiesPzi\": true,\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/existing-instance\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"no-compute-perm-sa@gcpdiag-gce6-aaaa.iam.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/cloud-platform\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": true,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\"\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c\"\n    }\n  ],\n  \"kind\": \"compute#instanceList\",\n  \"nextPageToken\": \"CkYIjoas7OmrjAM6OwoCGAMKAyDSDwoCGAIKByCxvNLnuRIKAhgHChMqEWV4aXN0aW5nLWluc3RhbmNlCgog7e-uypuV6JVE\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances\"\n}\n"
  },
  {
    "path": "test-data/gce6/json-dumps/compute-migs-aggregated.json",
    "content": "{\n  \"kind\": \"compute#instanceGroupManagerAggregatedList\",\n  \"id\": \"projects/gcpdiag-gce6-aaaa/aggregated/instanceGroupManagers\",\n  \"items\": {\n    \"regions/us-central1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-central1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-central1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-west1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-west1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-west1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west1\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-east1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/asia-east1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-east1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-east1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-east1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-east1\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-northeast1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/asia-northeast1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-northeast1\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-southeast1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/asia-southeast1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-southeast1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-east4\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-east4'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-east4\"\n          }\n        ]\n      }\n    },\n    \"regions/australia-southeast1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/australia-southeast1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/australia-southeast1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-west2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west2\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west3\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-west3'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west3\"\n          }\n        ]\n      }\n    },\n    \"regions/southamerica-east1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/southamerica-east1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/southamerica-east1\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-south1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/asia-south1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-south1\"\n          }\n        ]\n      }\n    },\n    \"regions/northamerica-northeast1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/northamerica-northeast1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/northamerica-northeast1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west4\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-west4'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west4\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-north1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-north1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-north1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-west2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-west2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west2\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-east2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/asia-east2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-east2\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west6\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-west6'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west6\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-northeast2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/asia-northeast2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-northeast2\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-northeast3\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/asia-northeast3'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-northeast3\"\n          }\n        ]\n      }\n    },\n    \"regions/us-west3\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-west3'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west3\"\n          }\n        ]\n      }\n    },\n    \"regions/us-west4\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-west4'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west4\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-southeast2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/asia-southeast2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-southeast2\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-central2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-central2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-central2\"\n          }\n        ]\n      }\n    },\n    \"regions/northamerica-northeast2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/northamerica-northeast2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/northamerica-northeast2\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-south2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/asia-south2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-south2\"\n          }\n        ]\n      }\n    },\n    \"regions/australia-southeast2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/australia-southeast2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/australia-southeast2\"\n          }\n        ]\n      }\n    },\n    \"regions/southamerica-west1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/southamerica-west1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/southamerica-west1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west8\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-west8'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west8\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west9\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-west9'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west9\"\n          }\n        ]\n      }\n    },\n    \"regions/us-east5\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-east5'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-east5\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-southwest1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-southwest1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-southwest1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-south1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/us-south1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-south1\"\n          }\n        ]\n      }\n    },\n    \"regions/me-west1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/me-west1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/me-west1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west12\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-west12'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west12\"\n          }\n        ]\n      }\n    },\n    \"regions/me-central1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/me-central1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/me-central1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west10\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-west10'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west10\"\n          }\n        ]\n      }\n    },\n    \"regions/me-central2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/me-central2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/me-central2\"\n          }\n        ]\n      }\n    },\n    \"regions/africa-south1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/africa-south1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/africa-south1\"\n          }\n        ]\n      }\n    },\n    \"regions/northamerica-south1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/northamerica-south1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/northamerica-south1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-north2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'regions/europe-north2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-north2\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-central1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-central1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central1-c\": {\n      \"instanceGroupManagers\": [\n        {\n          \"kind\": \"compute#instanceGroupManager\",\n          \"id\": \"7335951320321079632\",\n          \"creationTimestamp\": \"2025-03-27T19:21:51.982-07:00\",\n          \"name\": \"apache-mig-timeout\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c\",\n          \"instanceTemplate\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/global/instanceTemplates/apache-instance-template\",\n          \"versions\": [\n            {\n              \"instanceTemplate\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/global/instanceTemplates/apache-instance-template\",\n              \"targetSize\": {\n                \"calculated\": 2\n              }\n            }\n          ],\n          \"instanceGroup\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instanceGroups/apache-mig-timeout\",\n          \"baseInstanceName\": \"apache-instance\",\n          \"fingerprint\": \"Y05OVSxW2YM=\",\n          \"currentActions\": {\n            \"none\": 0,\n            \"creating\": 0,\n            \"creatingWithoutRetries\": 0,\n            \"verifying\": 2,\n            \"recreating\": 0,\n            \"deleting\": 0,\n            \"abandoning\": 0,\n            \"restarting\": 0,\n            \"refreshing\": 0,\n            \"suspending\": 0,\n            \"resuming\": 0,\n            \"stopping\": 0,\n            \"starting\": 0\n          },\n          \"status\": {\n            \"isStable\": false,\n            \"allInstancesConfig\": {\n              \"effective\": true\n            },\n            \"versionTarget\": {\n              \"isReached\": true\n            },\n            \"stateful\": {\n              \"hasStatefulConfig\": false,\n              \"perInstanceConfigs\": {\n                \"allEffective\": true\n              }\n            }\n          },\n          \"targetSize\": 2,\n          \"targetStoppedSize\": 0,\n          \"targetSuspendedSize\": 0,\n          \"listManagedInstancesResults\": \"PAGELESS\",\n          \"standbyPolicy\": {\n            \"mode\": \"MANUAL\"\n          },\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instanceGroupManagers/apache-mig-timeout\",\n          \"autoHealingPolicies\": [\n            {\n              \"healthCheck\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/global/healthChecks/apache-health-check\",\n              \"initialDelaySec\": 300\n            }\n          ],\n          \"updatePolicy\": {\n            \"type\": \"OPPORTUNISTIC\",\n            \"minimalAction\": \"REPLACE\",\n            \"maxSurge\": {\n              \"fixed\": 1,\n              \"calculated\": 1\n            },\n            \"maxUnavailable\": {\n              \"fixed\": 1,\n              \"calculated\": 1\n            },\n            \"replacementMethod\": \"SUBSTITUTE\"\n          },\n          \"instanceLifecyclePolicy\": {\n            \"forceUpdateOnRepair\": \"NO\",\n            \"defaultActionOnFailure\": \"REPAIR\"\n          },\n          \"satisfiesPzi\": true,\n          \"satisfiesPzs\": true\n        }\n      ]\n    },\n    \"zones/us-central1-f\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-central1-f'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central1-f\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west1-d\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west1-d'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west1-d\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-east1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-east1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-east1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east1-d\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east1-d'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east1-d\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-southeast1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-southeast1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-southeast1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east4-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east4-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east4-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east4-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east4-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east4-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east4-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east4-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east4-c\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/australia-southeast1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/australia-southeast1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/australia-southeast1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west3-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west3-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west3-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west3-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west3-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west3-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west3-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west3-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west3-b\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-east1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/southamerica-east1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-east1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-east1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/southamerica-east1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-east1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-east1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/southamerica-east1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-east1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-south1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-south1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-south1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-northeast1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-northeast1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-northeast1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west4-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west4-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west4-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west4-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west4-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west4-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west4-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west4-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west4-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-north1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-north1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-north1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-east2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-east2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-east2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west6-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west6-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west6-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west6-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west6-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west6-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west6-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west6-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west6-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast3-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast3-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast3-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast3-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast3-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast3-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast3-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-northeast3-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast3-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west3-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west3-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west3-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west3-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west3-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west3-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west3-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west3-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west3-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west4-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west4-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west4-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west4-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west4-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west4-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west4-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-west4-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west4-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-southeast2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-southeast2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-southeast2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-central2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-central2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-central2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-central2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-central2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-central2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-central2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-central2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-central2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-northeast2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-northeast2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-northeast2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-south2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-south2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/asia-south2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/australia-southeast2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/australia-southeast2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/australia-southeast2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-west1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/southamerica-west1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-west1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-west1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/southamerica-west1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-west1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-west1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/southamerica-west1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-west1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west8-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west8-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west8-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west8-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west8-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west8-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west8-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west8-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west8-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west9-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west9-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west9-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west9-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west9-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west9-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west9-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west9-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west9-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east5-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east5-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east5-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east5-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east5-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east5-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east5-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-east5-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east5-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-southwest1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-southwest1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-southwest1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-southwest1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-southwest1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-southwest1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-southwest1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-southwest1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-southwest1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-south1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-south1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-south1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-south1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-south1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-south1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-south1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/us-south1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-south1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-west1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-west1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-west1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-west1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-west1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-west1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/me-west1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-west1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-west1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west12-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west12-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west12-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west12-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west12-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west12-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west12-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west12-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west12-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-central1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-central1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-central1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west10-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west10-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west10-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west10-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west10-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west10-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west10-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-west10-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west10-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-central2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-central2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/me-central2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/africa-south1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/africa-south1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/africa-south1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/africa-south1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/africa-south1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/africa-south1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/africa-south1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/africa-south1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/africa-south1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-south1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-south1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-south1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-south1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-south1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-south1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-south1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/northamerica-south1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-south1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-north2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-north2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 'zones/europe-north2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north2-b\"\n          }\n        ]\n      }\n    }\n  },\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/aggregated/instanceGroupManagers\"\n}\n"
  },
  {
    "path": "test-data/gce6/json-dumps/compute-network-default.json",
    "content": "{\n  \"autoCreateSubnetworks\": true,\n  \"creationTimestamp\": \"2025-03-27T19:18:56.991-07:00\",\n  \"description\": \"Default network for the project\",\n  \"id\": \"6025163022824880639\",\n  \"kind\": \"compute#network\",\n  \"name\": \"default\",\n  \"networkFirewallPolicyEnforcementOrder\": \"AFTER_CLASSIC_FIREWALL\",\n  \"routingConfig\": {\n    \"bgpBestPathSelectionMode\": \"LEGACY\",\n    \"routingMode\": \"REGIONAL\"\n  },\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/global/networks/default\",\n  \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/global/networks/6025163022824880639\",\n  \"subnetworks\": [\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/europe-west10/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/europe-west8/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/europe-north2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/asia-northeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/us-central1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/southamerica-east1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/europe-southwest1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/us-south1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/europe-west4/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/europe-west3/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/australia-southeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/asia-east1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/europe-central2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/us-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/us-east4/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/asia-southeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/me-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/europe-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/europe-west9/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/us-west4/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/asia-south1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/us-east5/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/asia-northeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/us-east1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/asia-northeast3/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/asia-east2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/me-central1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/northamerica-south1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/australia-southeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/asia-south2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/africa-south1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/europe-west6/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/europe-west2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/southamerica-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/northamerica-northeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/us-west3/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/northamerica-northeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/europe-west12/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/us-west2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/asia-southeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/regions/europe-north1/subnetworks/default\"\n  ]\n}\n"
  },
  {
    "path": "test-data/gce6/json-dumps/compute-project.json",
    "content": "{\n  \"cloudArmorTier\": \"CA_STANDARD\",\n  \"commonInstanceMetadata\": {\n    \"fingerprint\": \"8p_CdgQ007Q=\",\n    \"items\": [\n      {\n        \"key\": \"serial-port-logging-enable\",\n        \"value\": \"true\"\n      }\n    ],\n    \"kind\": \"compute#metadata\"\n  },\n  \"creationTimestamp\": \"2025-03-27T19:18:47.471-07:00\",\n  \"defaultNetworkTier\": \"PREMIUM\",\n  \"defaultServiceAccount\": \"1234560123456-compute@developer.gserviceaccount.com\",\n  \"id\": \"8294083860347206120\",\n  \"kind\": \"compute#project\",\n  \"name\": \"gcpdiag-gce6-aaaa\",\n  \"quotas\": [\n    {\n      \"limit\": 10000,\n      \"metric\": \"SNAPSHOTS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 30,\n      \"metric\": \"NETWORKS\",\n      \"usage\": 1\n    },\n    {\n      \"limit\": 500,\n      \"metric\": \"FIREWALLS\",\n      \"usage\": 4\n    },\n    {\n      \"limit\": 5000,\n      \"metric\": \"IMAGES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 175,\n      \"metric\": \"STATIC_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 300,\n      \"metric\": \"ROUTES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"FORWARDING_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 500,\n      \"metric\": \"TARGET_POOLS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1000,\n      \"metric\": \"HEALTH_CHECKS\",\n      \"usage\": 1\n    },\n    {\n      \"limit\": 575,\n      \"metric\": \"IN_USE_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 500,\n      \"metric\": \"TARGET_INSTANCES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_HTTP_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"URL_MAPS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"BACKEND_SERVICES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1000,\n      \"metric\": \"INSTANCE_TEMPLATES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 50,\n      \"metric\": \"TARGET_VPN_GATEWAYS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"VPN_TUNNELS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 30,\n      \"metric\": \"BACKEND_BUCKETS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 20,\n      \"metric\": \"ROUTERS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_SSL_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_HTTPS_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"SSL_CERTIFICATES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 275,\n      \"metric\": \"SUBNETWORKS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_TCP_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 10,\n      \"metric\": \"SECURITY_POLICIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 200,\n      \"metric\": \"SECURITY_POLICY_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1000,\n      \"metric\": \"XPN_SERVICE_PROJECTS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"PACKET_MIRRORINGS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 2000,\n      \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 6,\n      \"metric\": \"INTERCONNECTS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"SSL_POLICIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 5000,\n      \"metric\": \"GLOBAL_INTERNAL_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 50,\n      \"metric\": \"VPN_GATEWAYS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 5000,\n      \"metric\": \"MACHINE_IMAGES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 20,\n      \"metric\": \"SECURITY_POLICY_CEVAL_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 50,\n      \"metric\": \"EXTERNAL_VPN_GATEWAYS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1,\n      \"metric\": \"PUBLIC_ADVERTISED_PREFIXES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 10,\n      \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1024,\n      \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 60,\n      \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"INTERNAL_TRAFFIC_DIRECTOR_FORWARDING_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"GLOBAL_EXTERNAL_MANAGED_FORWARDING_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"GLOBAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"GLOBAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"GLOBAL_EXTERNAL_PROXY_LB_BACKEND_SERVICES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 750,\n      \"metric\": \"GLOBAL_INTERNAL_TRAFFIC_DIRECTOR_BACKEND_SERVICES\",\n      \"usage\": 0\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa\",\n  \"vmDnsSetting\": \"GLOBAL_DEFAULT\",\n  \"xpnProjectStatus\": \"UNSPECIFIED_XPN_PROJECT_STATUS\"\n}\n"
  },
  {
    "path": "test-data/gce6/json-dumps/global-operations.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gce6-aaaa/aggregated/operations\",\n  \"items\": {\n    \"global\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"global\"\n          }\n        ],\n        \"message\": \"No results for the scope 'global'.\"\n      }\n    },\n    \"regions/africa-south1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/africa-south1\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/africa-south1'.\"\n      }\n    },\n    \"regions/asia-east1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-east1\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/asia-east1'.\"\n      }\n    },\n    \"regions/asia-east2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-east2\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/asia-east2'.\"\n      }\n    },\n    \"regions/asia-northeast1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-northeast1\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/asia-northeast1'.\"\n      }\n    },\n    \"regions/asia-northeast2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-northeast2\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/asia-northeast2'.\"\n      }\n    },\n    \"regions/asia-northeast3\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-northeast3\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/asia-northeast3'.\"\n      }\n    },\n    \"regions/asia-south1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-south1\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/asia-south1'.\"\n      }\n    },\n    \"regions/asia-south2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-south2\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/asia-south2'.\"\n      }\n    },\n    \"regions/asia-southeast1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-southeast1\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/asia-southeast1'.\"\n      }\n    },\n    \"regions/asia-southeast2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-southeast2\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/asia-southeast2'.\"\n      }\n    },\n    \"regions/australia-southeast1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/australia-southeast1\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/australia-southeast1'.\"\n      }\n    },\n    \"regions/australia-southeast2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/australia-southeast2\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/australia-southeast2'.\"\n      }\n    },\n    \"regions/europe-central2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-central2\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/europe-central2'.\"\n      }\n    },\n    \"regions/europe-north1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-north1\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/europe-north1'.\"\n      }\n    },\n    \"regions/europe-north2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-north2\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/europe-north2'.\"\n      }\n    },\n    \"regions/europe-southwest1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-southwest1\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/europe-southwest1'.\"\n      }\n    },\n    \"regions/europe-west1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west1\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/europe-west1'.\"\n      }\n    },\n    \"regions/europe-west10\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west10\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/europe-west10'.\"\n      }\n    },\n    \"regions/europe-west12\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west12\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/europe-west12'.\"\n      }\n    },\n    \"regions/europe-west2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west2\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/europe-west2'.\"\n      }\n    },\n    \"regions/europe-west3\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west3\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/europe-west3'.\"\n      }\n    },\n    \"regions/europe-west4\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west4\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/europe-west4'.\"\n      }\n    },\n    \"regions/europe-west6\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west6\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/europe-west6'.\"\n      }\n    },\n    \"regions/europe-west8\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west8\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/europe-west8'.\"\n      }\n    },\n    \"regions/europe-west9\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west9\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/europe-west9'.\"\n      }\n    },\n    \"regions/me-central1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/me-central1\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/me-central1'.\"\n      }\n    },\n    \"regions/me-central2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/me-central2\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/me-central2'.\"\n      }\n    },\n    \"regions/me-west1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/me-west1\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/me-west1'.\"\n      }\n    },\n    \"regions/northamerica-northeast1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/northamerica-northeast1\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/northamerica-northeast1'.\"\n      }\n    },\n    \"regions/northamerica-northeast2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/northamerica-northeast2\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/northamerica-northeast2'.\"\n      }\n    },\n    \"regions/northamerica-south1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/northamerica-south1\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/northamerica-south1'.\"\n      }\n    },\n    \"regions/southamerica-east1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/southamerica-east1\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/southamerica-east1'.\"\n      }\n    },\n    \"regions/southamerica-west1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/southamerica-west1\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/southamerica-west1'.\"\n      }\n    },\n    \"regions/us-central1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-central1\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/us-central1'.\"\n      }\n    },\n    \"regions/us-east1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-east1\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/us-east1'.\"\n      }\n    },\n    \"regions/us-east4\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-east4\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/us-east4'.\"\n      }\n    },\n    \"regions/us-east5\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-east5\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/us-east5'.\"\n      }\n    },\n    \"regions/us-south1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-south1\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/us-south1'.\"\n      }\n    },\n    \"regions/us-west1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west1\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/us-west1'.\"\n      }\n    },\n    \"regions/us-west2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west2\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/us-west2'.\"\n      }\n    },\n    \"regions/us-west3\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west3\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/us-west3'.\"\n      }\n    },\n    \"regions/us-west4\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west4\"\n          }\n        ],\n        \"message\": \"No results for the scope 'regions/us-west4'.\"\n      }\n    },\n    \"zones/africa-south1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/africa-south1-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/africa-south1-a'.\"\n      }\n    },\n    \"zones/africa-south1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/africa-south1-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/africa-south1-b'.\"\n      }\n    },\n    \"zones/africa-south1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/africa-south1-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/africa-south1-c'.\"\n      }\n    },\n    \"zones/asia-east1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east1-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-east1-a'.\"\n      }\n    },\n    \"zones/asia-east1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east1-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-east1-b'.\"\n      }\n    },\n    \"zones/asia-east1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east1-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-east1-c'.\"\n      }\n    },\n    \"zones/asia-east2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east2-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-east2-a'.\"\n      }\n    },\n    \"zones/asia-east2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east2-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-east2-b'.\"\n      }\n    },\n    \"zones/asia-east2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east2-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-east2-c'.\"\n      }\n    },\n    \"zones/asia-northeast1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast1-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-northeast1-a'.\"\n      }\n    },\n    \"zones/asia-northeast1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast1-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-northeast1-b'.\"\n      }\n    },\n    \"zones/asia-northeast1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast1-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-northeast1-c'.\"\n      }\n    },\n    \"zones/asia-northeast2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast2-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-northeast2-a'.\"\n      }\n    },\n    \"zones/asia-northeast2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast2-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-northeast2-b'.\"\n      }\n    },\n    \"zones/asia-northeast2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast2-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-northeast2-c'.\"\n      }\n    },\n    \"zones/asia-northeast3-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast3-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-northeast3-a'.\"\n      }\n    },\n    \"zones/asia-northeast3-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast3-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-northeast3-b'.\"\n      }\n    },\n    \"zones/asia-northeast3-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast3-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-northeast3-c'.\"\n      }\n    },\n    \"zones/asia-south1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south1-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-south1-a'.\"\n      }\n    },\n    \"zones/asia-south1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south1-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-south1-b'.\"\n      }\n    },\n    \"zones/asia-south1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south1-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-south1-c'.\"\n      }\n    },\n    \"zones/asia-south2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south2-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-south2-a'.\"\n      }\n    },\n    \"zones/asia-south2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south2-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-south2-b'.\"\n      }\n    },\n    \"zones/asia-south2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south2-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-south2-c'.\"\n      }\n    },\n    \"zones/asia-southeast1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast1-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-southeast1-a'.\"\n      }\n    },\n    \"zones/asia-southeast1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast1-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-southeast1-b'.\"\n      }\n    },\n    \"zones/asia-southeast1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast1-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-southeast1-c'.\"\n      }\n    },\n    \"zones/asia-southeast2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast2-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-southeast2-a'.\"\n      }\n    },\n    \"zones/asia-southeast2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast2-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-southeast2-b'.\"\n      }\n    },\n    \"zones/asia-southeast2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast2-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/asia-southeast2-c'.\"\n      }\n    },\n    \"zones/australia-southeast1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast1-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/australia-southeast1-a'.\"\n      }\n    },\n    \"zones/australia-southeast1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast1-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/australia-southeast1-b'.\"\n      }\n    },\n    \"zones/australia-southeast1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast1-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/australia-southeast1-c'.\"\n      }\n    },\n    \"zones/australia-southeast2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast2-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/australia-southeast2-a'.\"\n      }\n    },\n    \"zones/australia-southeast2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast2-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/australia-southeast2-b'.\"\n      }\n    },\n    \"zones/australia-southeast2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast2-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/australia-southeast2-c'.\"\n      }\n    },\n    \"zones/europe-central2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-central2-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-central2-a'.\"\n      }\n    },\n    \"zones/europe-central2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-central2-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-central2-b'.\"\n      }\n    },\n    \"zones/europe-central2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-central2-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-central2-c'.\"\n      }\n    },\n    \"zones/europe-north1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north1-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-north1-a'.\"\n      }\n    },\n    \"zones/europe-north1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north1-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-north1-b'.\"\n      }\n    },\n    \"zones/europe-north1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north1-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-north1-c'.\"\n      }\n    },\n    \"zones/europe-north2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north2-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-north2-a'.\"\n      }\n    },\n    \"zones/europe-north2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north2-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-north2-b'.\"\n      }\n    },\n    \"zones/europe-north2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north2-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-north2-c'.\"\n      }\n    },\n    \"zones/europe-southwest1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-southwest1-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-southwest1-a'.\"\n      }\n    },\n    \"zones/europe-southwest1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-southwest1-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-southwest1-b'.\"\n      }\n    },\n    \"zones/europe-southwest1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-southwest1-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-southwest1-c'.\"\n      }\n    },\n    \"zones/europe-west1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west1-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west1-b'.\"\n      }\n    },\n    \"zones/europe-west1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west1-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west1-c'.\"\n      }\n    },\n    \"zones/europe-west1-d\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west1-d\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west1-d'.\"\n      }\n    },\n    \"zones/europe-west10-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west10-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west10-a'.\"\n      }\n    },\n    \"zones/europe-west10-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west10-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west10-b'.\"\n      }\n    },\n    \"zones/europe-west10-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west10-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west10-c'.\"\n      }\n    },\n    \"zones/europe-west12-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west12-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west12-a'.\"\n      }\n    },\n    \"zones/europe-west12-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west12-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west12-b'.\"\n      }\n    },\n    \"zones/europe-west12-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west12-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west12-c'.\"\n      }\n    },\n    \"zones/europe-west2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west2-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west2-a'.\"\n      }\n    },\n    \"zones/europe-west2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west2-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west2-b'.\"\n      }\n    },\n    \"zones/europe-west2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west2-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west2-c'.\"\n      }\n    },\n    \"zones/europe-west3-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west3-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west3-a'.\"\n      }\n    },\n    \"zones/europe-west3-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west3-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west3-b'.\"\n      }\n    },\n    \"zones/europe-west3-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west3-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west3-c'.\"\n      }\n    },\n    \"zones/europe-west4-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west4-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west4-a'.\"\n      }\n    },\n    \"zones/europe-west4-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west4-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west4-b'.\"\n      }\n    },\n    \"zones/europe-west4-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west4-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west4-c'.\"\n      }\n    },\n    \"zones/europe-west6-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west6-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west6-a'.\"\n      }\n    },\n    \"zones/europe-west6-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west6-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west6-b'.\"\n      }\n    },\n    \"zones/europe-west6-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west6-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west6-c'.\"\n      }\n    },\n    \"zones/europe-west8-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west8-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west8-a'.\"\n      }\n    },\n    \"zones/europe-west8-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west8-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west8-b'.\"\n      }\n    },\n    \"zones/europe-west8-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west8-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west8-c'.\"\n      }\n    },\n    \"zones/europe-west9-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west9-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west9-a'.\"\n      }\n    },\n    \"zones/europe-west9-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west9-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west9-b'.\"\n      }\n    },\n    \"zones/europe-west9-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west9-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/europe-west9-c'.\"\n      }\n    },\n    \"zones/me-central1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central1-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/me-central1-a'.\"\n      }\n    },\n    \"zones/me-central1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central1-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/me-central1-b'.\"\n      }\n    },\n    \"zones/me-central1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central1-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/me-central1-c'.\"\n      }\n    },\n    \"zones/me-central2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central2-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/me-central2-a'.\"\n      }\n    },\n    \"zones/me-central2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central2-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/me-central2-b'.\"\n      }\n    },\n    \"zones/me-central2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central2-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/me-central2-c'.\"\n      }\n    },\n    \"zones/me-west1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-west1-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/me-west1-a'.\"\n      }\n    },\n    \"zones/me-west1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-west1-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/me-west1-b'.\"\n      }\n    },\n    \"zones/me-west1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-west1-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/me-west1-c'.\"\n      }\n    },\n    \"zones/northamerica-northeast1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast1-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/northamerica-northeast1-a'.\"\n      }\n    },\n    \"zones/northamerica-northeast1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast1-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/northamerica-northeast1-b'.\"\n      }\n    },\n    \"zones/northamerica-northeast1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast1-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/northamerica-northeast1-c'.\"\n      }\n    },\n    \"zones/northamerica-northeast2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast2-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/northamerica-northeast2-a'.\"\n      }\n    },\n    \"zones/northamerica-northeast2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast2-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/northamerica-northeast2-b'.\"\n      }\n    },\n    \"zones/northamerica-northeast2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast2-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/northamerica-northeast2-c'.\"\n      }\n    },\n    \"zones/northamerica-south1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-south1-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/northamerica-south1-a'.\"\n      }\n    },\n    \"zones/northamerica-south1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-south1-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/northamerica-south1-b'.\"\n      }\n    },\n    \"zones/northamerica-south1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-south1-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/northamerica-south1-c'.\"\n      }\n    },\n    \"zones/southamerica-east1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-east1-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/southamerica-east1-a'.\"\n      }\n    },\n    \"zones/southamerica-east1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-east1-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/southamerica-east1-b'.\"\n      }\n    },\n    \"zones/southamerica-east1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-east1-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/southamerica-east1-c'.\"\n      }\n    },\n    \"zones/southamerica-west1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-west1-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/southamerica-west1-a'.\"\n      }\n    },\n    \"zones/southamerica-west1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-west1-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/southamerica-west1-b'.\"\n      }\n    },\n    \"zones/southamerica-west1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-west1-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/southamerica-west1-c'.\"\n      }\n    },\n    \"zones/us-central1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central1-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-central1-a'.\"\n      }\n    },\n    \"zones/us-central1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central1-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-central1-b'.\"\n      }\n    },\n    \"zones/us-central1-c\": {\n      \"operations\": [\n        {\n          \"endTime\": \"2025-03-27T19:30:39.363-07:00\",\n          \"id\": \"7922141311716276000\",\n          \"insertTime\": \"2025-03-27T19:30:39.363-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"repair-1743129039363-6315ddb305d00-53c72a73-9b7f4998\",\n          \"operationType\": \"compute.instances.repair.recreateInstance\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/operations/repair-1743129039363-6315ddb305d00-53c72a73-9b7f4998\",\n          \"startTime\": \"2025-03-27T19:30:39.363-07:00\",\n          \"status\": \"DONE\",\n          \"statusMessage\": \"Instance Group Manager 'apache-mig-timeout' initiated recreateInstance on instance 'projects/1234560123456/zones/us-central1-c/instances/apache-instance-7b70'. Reason: Instance eligible for repair: instance unhealthy.\",\n          \"targetId\": \"6199621613681096987\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/apache-instance-7b70\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"endTime\": \"2025-03-27T19:39:36.157-07:00\",\n          \"id\": \"4627539961301415175\",\n          \"insertTime\": \"2025-03-27T19:39:36.157-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"repair-1743129576157-6315dfb2f319a-2b6e48e4-a9467eb3\",\n          \"operationType\": \"compute.instances.repair.recreateInstance\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/operations/repair-1743129576157-6315dfb2f319a-2b6e48e4-a9467eb3\",\n          \"startTime\": \"2025-03-27T19:39:36.157-07:00\",\n          \"status\": \"DONE\",\n          \"statusMessage\": \"Instance Group Manager 'apache-mig-timeout' initiated recreateInstance on instance 'projects/1234560123456/zones/us-central1-c/instances/apache-instance-7b70'. Reason: Instance eligible for repair: instance unhealthy.\",\n          \"targetId\": \"6199621613681096987\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/apache-instance-7b70\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"endTime\": \"2025-03-27T19:48:41.115-07:00\",\n          \"id\": \"1188372906511151334\",\n          \"insertTime\": \"2025-03-27T19:48:41.115-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"repair-1743130121115-6315e1baa9890-d15ca680-190e65aa\",\n          \"operationType\": \"compute.instances.repair.recreateInstance\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/operations/repair-1743130121115-6315e1baa9890-d15ca680-190e65aa\",\n          \"startTime\": \"2025-03-27T19:48:41.115-07:00\",\n          \"status\": \"DONE\",\n          \"statusMessage\": \"Instance Group Manager 'apache-mig-timeout' initiated recreateInstance on instance 'projects/1234560123456/zones/us-central1-c/instances/apache-instance-7b70'. Reason: Instance eligible for repair: instance unhealthy.\",\n          \"targetId\": \"6199621613681096987\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/apache-instance-7b70\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"endTime\": \"2025-03-27T19:57:38.374-07:00\",\n          \"id\": \"135969089923034829\",\n          \"insertTime\": \"2025-03-27T19:57:38.374-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"repair-1743130658374-6315e3bb084da-044b1522-57f5379f\",\n          \"operationType\": \"compute.instances.repair.recreateInstance\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/operations/repair-1743130658374-6315e3bb084da-044b1522-57f5379f\",\n          \"startTime\": \"2025-03-27T19:57:38.374-07:00\",\n          \"status\": \"DONE\",\n          \"statusMessage\": \"Instance Group Manager 'apache-mig-timeout' initiated recreateInstance on instance 'projects/1234560123456/zones/us-central1-c/instances/apache-instance-7b70'. Reason: Instance eligible for repair: instance unhealthy.\",\n          \"targetId\": \"6199621613681096987\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/apache-instance-7b70\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"endTime\": \"2025-03-27T20:06:39.232-07:00\",\n          \"id\": \"8982563239540534480\",\n          \"insertTime\": \"2025-03-27T20:06:39.232-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"repair-1743131199232-6315e5bed5806-91f45227-7d756eae\",\n          \"operationType\": \"compute.instances.repair.recreateInstance\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/operations/repair-1743131199232-6315e5bed5806-91f45227-7d756eae\",\n          \"startTime\": \"2025-03-27T20:06:39.232-07:00\",\n          \"status\": \"DONE\",\n          \"statusMessage\": \"Instance Group Manager 'apache-mig-timeout' initiated recreateInstance on instance 'projects/1234560123456/zones/us-central1-c/instances/apache-instance-7b70'. Reason: Instance eligible for repair: instance unhealthy.\",\n          \"targetId\": \"6199621613681096987\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/apache-instance-7b70\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c\"\n        },\n        {\n          \"endTime\": \"2025-03-27T20:15:43.620-07:00\",\n          \"id\": \"5133841954673240752\",\n          \"insertTime\": \"2025-03-27T20:15:43.620-07:00\",\n          \"kind\": \"compute#operation\",\n          \"name\": \"repair-1743131743620-6315e7c600e6b-6c759002-accd2e45\",\n          \"operationType\": \"compute.instances.repair.recreateInstance\",\n          \"progress\": 100,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/operations/repair-1743131743620-6315e7c600e6b-6c759002-accd2e45\",\n          \"startTime\": \"2025-03-27T20:15:43.620-07:00\",\n          \"status\": \"DONE\",\n          \"statusMessage\": \"Instance Group Manager 'apache-mig-timeout' initiated recreateInstance on instance 'projects/1234560123456/zones/us-central1-c/instances/apache-instance-7b70'. Reason: Instance eligible for repair: instance unhealthy.\",\n          \"targetId\": \"6199621613681096987\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/apache-instance-7b70\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c\"\n        }\n      ]\n    },\n    \"zones/us-central1-f\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central1-f\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-central1-f'.\"\n      }\n    },\n    \"zones/us-east1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east1-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-east1-b'.\"\n      }\n    },\n    \"zones/us-east1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east1-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-east1-c'.\"\n      }\n    },\n    \"zones/us-east1-d\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east1-d\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-east1-d'.\"\n      }\n    },\n    \"zones/us-east4-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east4-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-east4-a'.\"\n      }\n    },\n    \"zones/us-east4-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east4-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-east4-b'.\"\n      }\n    },\n    \"zones/us-east4-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east4-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-east4-c'.\"\n      }\n    },\n    \"zones/us-east5-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east5-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-east5-a'.\"\n      }\n    },\n    \"zones/us-east5-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east5-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-east5-b'.\"\n      }\n    },\n    \"zones/us-east5-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east5-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-east5-c'.\"\n      }\n    },\n    \"zones/us-south1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-south1-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-south1-a'.\"\n      }\n    },\n    \"zones/us-south1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-south1-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-south1-b'.\"\n      }\n    },\n    \"zones/us-south1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-south1-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-south1-c'.\"\n      }\n    },\n    \"zones/us-west1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west1-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-west1-a'.\"\n      }\n    },\n    \"zones/us-west1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west1-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-west1-b'.\"\n      }\n    },\n    \"zones/us-west1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west1-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-west1-c'.\"\n      }\n    },\n    \"zones/us-west2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west2-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-west2-a'.\"\n      }\n    },\n    \"zones/us-west2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west2-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-west2-b'.\"\n      }\n    },\n    \"zones/us-west2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west2-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-west2-c'.\"\n      }\n    },\n    \"zones/us-west3-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west3-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-west3-a'.\"\n      }\n    },\n    \"zones/us-west3-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west3-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-west3-b'.\"\n      }\n    },\n    \"zones/us-west3-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west3-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-west3-c'.\"\n      }\n    },\n    \"zones/us-west4-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west4-a\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-west4-a'.\"\n      }\n    },\n    \"zones/us-west4-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west4-b\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-west4-b'.\"\n      }\n    },\n    \"zones/us-west4-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west4-c\"\n          }\n        ],\n        \"message\": \"No results for the scope 'zones/us-west4-c'.\"\n      }\n    }\n  },\n  \"kind\": \"compute#operationAggregatedList\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/aggregated/operations\"\n}\n"
  },
  {
    "path": "test-data/gce6/json-dumps/healthChecks.json",
    "content": "{\n  \"kind\": \"compute#healthCheckList\",\n  \"id\": \"projects/gcpdiag-gce6-aaaa/global/healthChecks/\",\n  \"items\": [\n    {\n      \"kind\": \"compute#healthCheck\",\n      \"id\": \"2261671528540911966\",\n      \"creationTimestamp\": \"2025-03-27T19:21:37.362-07:00\",\n      \"name\": \"apache-health-check\",\n      \"checkIntervalSec\": 10,\n      \"timeoutSec\": 5,\n      \"unhealthyThreshold\": 2,\n      \"healthyThreshold\": 2,\n      \"type\": \"HTTP\",\n      \"httpHealthCheck\": {\n        \"port\": 80,\n        \"requestPath\": \"/\",\n        \"proxyHeader\": \"NONE\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/global/healthChecks/apache-health-check\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/global/healthChecks/\"\n}\n"
  },
  {
    "path": "test-data/gce6/json-dumps/iam-policy.json",
    "content": "{\n  \"bindings\": [\n    {\n      \"members\": [\n        \"serviceAccount:compute-sa@gcpdiag-gce6-aaaa.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/compute.instanceAdmin\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-1234560123456@compute-system.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/compute.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:1234560123456-compute@developer.gserviceaccount.com\",\n        \"serviceAccount:1234560123456@cloudservices.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/editor\"\n    },\n    {\n      \"members\": [\n        \"user:testuser@example.com\"\n      ],\n      \"role\": \"roles/owner\"\n    }\n  ],\n  \"etag\": \"BwYxXmTAR2k=\",\n  \"version\": 1\n}\n"
  },
  {
    "path": "test-data/gce6/json-dumps/iam-service-accounts.json",
    "content": "{\n  \"accounts\": [\n    {\n      \"displayName\": \"Service Account without compute permissions\",\n      \"email\": \"compute-sa@gcpdiag-gce6-aaaa.iam.gserviceaccount.com\",\n      \"etag\": \"MDEwMjE5MjA=\",\n      \"name\": \"projects/gcpdiag-gce6-aaaa/serviceAccounts/compute-sa@gcpdiag-gce6-5sprp231.iam.gserviceaccount.com\",\n      \"oauth2ClientId\": \"REDACTED\",\n      \"projectId\": \"gcpdiag-gce6-aaaa\",\n      \"uniqueId\": \"100621575254718748408\"\n    },\n    {\n      \"displayName\": \"Compute Engine default service account\",\n      \"email\": \"1234560123456-compute@developer.gserviceaccount.com\",\n      \"etag\": \"MDEwMjE5MjA=\",\n      \"name\": \"projects/gcpdiag-gce6-aaaa/serviceAccounts/1234560123456-compute@developer.gserviceaccount.com\",\n      \"oauth2ClientId\": \"REDACTED\",\n      \"projectId\": \"gcpdiag-gce6-aaaa\",\n      \"uniqueId\": \"104114114168731317496\"\n    },\n    {\n      \"displayName\": \"Service Account without compute permissions\",\n      \"email\": \"no-compute-perm-sa@gcpdiag-gce6-aaaa.iam.gserviceaccount.com\",\n      \"etag\": \"MDEwMjE5MjA=\",\n      \"name\": \"projects/gcpdiag-gce6-aaaa/serviceAccounts/no-compute-perm-sa@gcpdiag-gce6-5sprp231.iam.gserviceaccount.com\",\n      \"oauth2ClientId\": \"REDACTED\",\n      \"projectId\": \"gcpdiag-gce6-aaaa\",\n      \"uniqueId\": \"114281288585562265078\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gce6/json-dumps/logging-entries-1.json",
    "content": "{\n  \"entries\": [\n    {\n      \"insertId\": \"-fgyw60e4l3hm\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"ac220e4f-1da5-4ec0-a083-f6156ec707f9\"\n      },\n      \"logName\": \"projects/gcpdiag-gce6-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"no-compute-perm-sa@gcpdiag-gce6-aaaa.iam.gserviceaccount.com\",\n          \"principalSubject\": \"serviceAccount:no-compute-perm-sa@gcpdiag-gce6-aaaa.iam.gserviceaccount.com\",\n          \"serviceAccountDelegationInfo\": [\n            {\n              \"firstPartyPrincipal\": {\n                \"principalEmail\": \"service-1234560123456@compute-system.iam.gserviceaccount.com\"\n              }\n            }\n          ]\n        },\n        \"authorizationInfo\": [\n          {\n            \"granted\": false,\n            \"permission\": \"compute.instances.create\",\n            \"permissionType\": \"ADMIN_WRITE\",\n            \"resource\": \"projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/existing-instance\",\n            \"resourceAttributes\": {\n              \"name\": \"projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/existing-instance\",\n              \"service\": \"compute\",\n              \"type\": \"compute.instances\"\n            }\n          },\n          {\n            \"granted\": false,\n            \"permission\": \"compute.disks.create\",\n            \"permissionType\": \"ADMIN_WRITE\",\n            \"resource\": \"projects/gcpdiag-gce6-aaaa/zones/us-central1-c/disks/existing-instance\",\n            \"resourceAttributes\": {\n              \"name\": \"projects/gcpdiag-gce6-aaaa/zones/us-central1-c/disks/existing-instance\",\n              \"service\": \"compute\",\n              \"type\": \"compute.disks\"\n            }\n          },\n          {\n            \"granted\": false,\n            \"permission\": \"compute.subnetworks.use\",\n            \"permissionType\": \"ADMIN_WRITE\",\n            \"resource\": \"projects/gcpdiag-gce6-aaaa/regions/us-central1/subnetworks/default\",\n            \"resourceAttributes\": {\n              \"name\": \"projects/gcpdiag-gce6-aaaa/regions/us-central1/subnetworks/default\",\n              \"service\": \"compute\",\n              \"type\": \"compute.subnetworks\"\n            }\n          },\n          {\n            \"granted\": false,\n            \"permission\": \"compute.subnetworks.useExternalIp\",\n            \"permissionType\": \"ADMIN_WRITE\",\n            \"resource\": \"projects/gcpdiag-gce6-aaaa/regions/us-central1/subnetworks/default\",\n            \"resourceAttributes\": {\n              \"name\": \"projects/gcpdiag-gce6-aaaa/regions/us-central1/subnetworks/default\",\n              \"service\": \"compute\",\n              \"type\": \"compute.subnetworks\"\n            }\n          },\n          {\n            \"granted\": false,\n            \"permission\": \"compute.instances.setServiceAccount\",\n            \"permissionType\": \"ADMIN_WRITE\",\n            \"resource\": \"projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/existing-instance\",\n            \"resourceAttributes\": {\n              \"name\": \"projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/existing-instance\",\n              \"service\": \"compute\",\n              \"type\": \"compute.instances\"\n            }\n          }\n        ],\n        \"methodName\": \"v1.compute.instances.insert\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.insert\",\n          \"canIpForward\": false,\n          \"deletionProtection\": false,\n          \"disks\": [\n            {\n              \"autoDelete\": true,\n              \"boot\": true,\n              \"initializeParams\": {\n                \"sourceImage\": \"https://compute.googleapis.com/compute/v1/projects/debian-cloud/zones/-/imageFamilyViews/debian-12\"\n              },\n              \"mode\": \"READ_WRITE\",\n              \"type\": \"PERSISTENT\"\n            }\n          ],\n          \"machineType\": \"https://compute.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/zones/us-central1-c/machineTypes/n1-standard-1\",\n          \"name\": \"existing-instance\",\n          \"networkInterfaces\": [\n            {\n              \"accessConfigs\": [\n                {\n                  \"name\": \"external-nat\",\n                  \"type\": \"ONE_TO_ONE_NAT\"\n                }\n              ],\n              \"network\": \"https://compute.googleapis.com/compute/v1/projects/gcpdiag-gce6-aaaa/global/networks/default\"\n            }\n          ],\n          \"scheduling\": {\n            \"automaticRestart\": true\n          },\n          \"serviceAccounts\": [\n            {\n              \"email\": \"default\",\n              \"scopes\": [\n                \"https://www.googleapis.com/auth/devstorage.read_only\",\n                \"https://www.googleapis.com/auth/logging.write\",\n                \"https://www.googleapis.com/auth/monitoring.write\",\n                \"https://www.googleapis.com/auth/pubsub\",\n                \"https://www.googleapis.com/auth/service.management.readonly\",\n                \"https://www.googleapis.com/auth/servicecontrol\",\n                \"https://www.googleapis.com/auth/trace.append\"\n              ]\n            }\n          ]\n        },\n        \"requestMetadata\": {\n          \"callerIp\": \"35.184.107.186\",\n          \"callerNetwork\": \"//compute.googleapis.com/projects/gcpdiag-gce6-aaaa/global/networks/__unknown__\",\n          \"callerSuppliedUserAgent\": \"google-cloud-sdk gcloud/514.0.0 command/gcloud.compute.instances.create invocation-id/98e8e999436b477f9cda937e26044406 environment/GCE environment-version/None client-os/LINUX client-os-ver/6.8.0 client-pltf-arch/x86_64 interactive/False from-script/True python/3.12.8 term/ (Linux 6.8.0-1025-gcp),gzip(gfe)\",\n          \"destinationAttributes\": {},\n          \"requestAttributes\": {\n            \"auth\": {},\n            \"time\": \"2025-03-28T03:00:05.988885Z\"\n          }\n        },\n        \"resourceLocation\": {\n          \"currentLocations\": [\n            \"us-central1-c\"\n          ]\n        },\n        \"resourceName\": \"projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/existing-instance\",\n        \"response\": {\n          \"@type\": \"type.googleapis.com/error\",\n          \"error\": {\n            \"code\": 403,\n            \"errors\": [\n              {\n                \"domain\": \"global\",\n                \"message\": \"Required 'compute.instances.create' permission for 'projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/existing-instance'\",\n                \"reason\": \"forbidden\"\n              }\n            ],\n            \"message\": \"Required 'compute.instances.create' permission for 'projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/existing-instance'\"\n          }\n        },\n        \"serviceName\": \"compute.googleapis.com\",\n        \"status\": {\n          \"code\": 7,\n          \"message\": \"Required 'compute.instances.create' permission for 'projects/gcpdiag-gce6-aaaa/zones/us-central1-c/instances/existing-instance'\"\n        }\n      },\n      \"receiveTimestamp\": \"2025-03-28T03:00:06.915648314Z\",\n      \"resource\": {\n        \"labels\": {\n          \"instance_id\": \"4912196469396322285\",\n          \"project_id\": \"gcpdiag-gce6-aaaa\",\n          \"zone\": \"us-central1-c\"\n        },\n        \"type\": \"gce_instance\"\n      },\n      \"severity\": \"ERROR\",\n      \"timestamp\": \"2025-03-28T03:00:05.791453Z\"\n    }\n  ],\n  \"nextPageToken\": \"eo8BCooBAfQucPiP__jBw7T8SOEkpgn1qG7KZZs-xtBrhOOAzO5QZ7jjimDpTkuwbdfPlG3wTXmOtcDwJLB8KehMu-6pVBEgAf9RItA9EjxJpKzxKenodv692I3dXXA-XSUevV40nDvbJsVEW3-OgEgE9ayJAp5D61IhL9MkxySChzsDTySL00DsCGVa6bs9EAA\"\n}\n"
  },
  {
    "path": "test-data/gce6/json-dumps/project.json",
    "content": "{\n  \"name\": \"projects/1234560123456\",\n  \"parent\": \"folders/348077457356\",\n  \"projectId\": \"gcpdiag-gce6-aaaa\",\n  \"state\": \"ACTIVE\",\n  \"displayName\": \"gcpdiag test - VM Creation\",\n  \"createTime\": \"2025-03-28T02:08:04.542569Z\",\n  \"updateTime\": \"2025-03-28T02:08:04.542569Z\",\n  \"etag\": \"W/\\\"6db49499d1448e9b\\\"\",\n  \"labels\": {\n    \"gcpdiag\": \"test\",\n    \"goog-terraform-provisioned\": \"true\"\n  }\n}\n"
  },
  {
    "path": "test-data/gce6/json-dumps/services.json",
    "content": "{\n  \"services\": [\n    {\n      \"name\": \"projects/1234560123456/services/compute.googleapis.com\",\n      \"config\": {\n        \"name\": \"compute.googleapis.com\",\n        \"title\": \"Compute Engine API\",\n        \"documentation\": {\n          \"summary\": \"Creates and runs virtual machines on Google Cloud Platform.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"compute.googleapis.com/VpcNetwork\",\n            \"displayName\": \"VPC Network\",\n            \"description\": \"VPC Network.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the VPC Network.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the VPC Network, global always.\"\n              },\n              {\n                \"key\": \"network_id\",\n                \"description\": \"VPC Network resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Location\",\n            \"displayName\": \"Compute Location\",\n            \"description\": \"A location in the Compute API.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the Compute Location.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Interconnect\",\n            \"displayName\": \"Interconnect\",\n            \"description\": \"Interconnect.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the Interconnect.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the Interconnect.\"\n              },\n              {\n                \"key\": \"interconnect_id\",\n                \"description\": \"Interconnect resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/FirewallPolicy\",\n            \"displayName\": \"Firewall policy\",\n            \"description\": \"Firewall policy.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project or organization) associated with the firewall policy.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the firewall policy.\"\n              },\n              {\n                \"key\": \"firewall_policy_id\",\n                \"description\": \"Firewall policy resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/SecurityPolicy\",\n            \"displayName\": \"Security policy\",\n            \"description\": \"Security policy.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the security policy.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the security policy.\"\n              },\n              {\n                \"key\": \"security_policy_id\",\n                \"description\": \"Security policy resource ID.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/OperationType\",\n            \"displayName\": \"Operation Type\",\n            \"description\": \"Operation Type.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the operation.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the operation.\"\n              },\n              {\n                \"key\": \"operation_type\",\n                \"description\": \"Operation type.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Reservation\",\n            \"displayName\": \"Reservation\",\n            \"description\": \"Monitored resource representing a reservation.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container (e.g. project number) associated with the reservation.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The zone that contains the reservation.\"\n              },\n              {\n                \"key\": \"reservation_id\",\n                \"description\": \"Reservation resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/StoragePool\",\n            \"displayName\": \"Storage Pool\",\n            \"description\": \"Monitored resource representing a storage pool.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container (e.g. project number) associated with the storage pool.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location that contains the storage pool.\"\n              },\n              {\n                \"key\": \"storage_pool_id\",\n                \"description\": \"Numerical resource ID of the storage pool.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"gce_instance\",\n            \"displayName\": \"VM Instance\",\n            \"description\": \"A virtual machine instance hosted in Compute Engine.\",\n            \"labels\": [\n              {\n                \"key\": \"project_id\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as \\\"my-project\\\".\"\n              },\n              {\n                \"key\": \"instance_id\",\n                \"description\": \"The numeric VM instance identifier assigned by Compute Engine.\"\n              },\n              {\n                \"key\": \"zone\",\n                \"description\": \"The Compute Engine zone in which the VM is running.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/NetworkPathQuotasResource\",\n            \"displayName\": \"Network Path Quotas Resource\",\n            \"description\": \"Network Path Quotas Resource.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container associated with the metric.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location for the quota.\"\n              },\n              {\n                \"key\": \"network_path_id\",\n                \"description\": \"The network path custom dimension.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network\",\n                \"compute.googleapis.com/cloud_router_prefixes_from_own_region_per_region_per_vpc_network\",\n                \"compute.googleapis.com/dynamic_routes_per_region_per_peering_group\",\n                \"compute.googleapis.com/global_internal_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/instances_per_peering_group\",\n                \"compute.googleapis.com/instances_per_vpc_network\",\n                \"compute.googleapis.com/internal_lb_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_managed_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_protocol_forwarding_ha_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_protocol_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/ip_aliases_per_peering_group\",\n                \"compute.googleapis.com/ip_aliases_per_vpc_network\",\n                \"compute.googleapis.com/peerings_per_vpc_network\",\n                \"compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network\",\n                \"compute.googleapis.com/psc_propagated_connections_per_vpc_network\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_ha_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/multicast_consumers_per_zone_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_backend_services_protocol_forwarding_fast_ha/exceeded\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/exceeded\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/regional_backend_services_protocol_forwarding_fast_ha\",\n                \"compute.googleapis.com/regional_external_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/regional_internal_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/static_routes_per_peering_group\",\n                \"compute.googleapis.com/static_routes_per_vpc_network\",\n                \"compute.googleapis.com/subnet_ranges_per_peering_group\",\n                \"compute.googleapis.com/subnet_ranges_per_vpc_network\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Location\",\n              \"metrics\": [\n                \"compute.googleapis.com/cpus_per_vm_family\",\n                \"compute.googleapis.com/global_dns/request_count\",\n                \"compute.googleapis.com/gpus_per_gpu_family\",\n                \"compute.googleapis.com/inter_region_egress_bandwidth\",\n                \"compute.googleapis.com/local_ssd_total_storage_per_vm_family\",\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/exceeded\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/exceeded\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/exceeded\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/usage\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/exceeded\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/exceeded\",\n                \"compute.googleapis.com/quota/tpus_per_tpu_family/exceeded\",\n                \"compute.googleapis.com/tpus_per_tpu_family\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Interconnect\",\n              \"metrics\": [\n                \"compute.googleapis.com/interconnect_attachments_per_interconnect\",\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/exceeded\",\n                \"compute.googleapis.com/quota/wire_groups_per_interconnect/exceeded\",\n                \"compute.googleapis.com/wire_groups_per_interconnect\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/FirewallPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/fqdns_per_global_network_firewall_policy\",\n                \"compute.googleapis.com/fqdns_per_hierarchical_firewall_policy\",\n                \"compute.googleapis.com/fqdns_per_regional_network_firewall_policy\",\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/rule_attributes_per_global_network_firewall_policy\",\n                \"compute.googleapis.com/rule_attributes_per_hierarchical_firewall_policy\",\n                \"compute.googleapis.com/rule_attributes_per_regional_network_firewall_policy\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/SecurityPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/advanced_rules_per_edge_security_policy\",\n                \"compute.googleapis.com/advanced_rules_per_regional_security_policy\",\n                \"compute.googleapis.com/advanced_rules_per_security_policy\",\n                \"compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/exceeded\",\n                \"compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/exceeded\",\n                \"compute.googleapis.com/quota/advanced_rules_per_security_policy/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/OperationType\",\n              \"metrics\": [\n                \"compute.googleapis.com/global_concurrent_operations\",\n                \"compute.googleapis.com/quota/concurrent/global_concurrent_operations/exceeded\",\n                \"compute.googleapis.com/quota/concurrent/internal/global_concurrent_operations/combined_units\",\n                \"compute.googleapis.com/quota/concurrent/internal/regional_concurrent_operations/combined_units\",\n                \"compute.googleapis.com/quota/concurrent/regional_concurrent_operations/exceeded\",\n                \"compute.googleapis.com/regional_concurrent_operations\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"gce_instance\",\n              \"metrics\": [\n                \"compute.googleapis.com/instance/global_dns/request_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Reservation\",\n              \"metrics\": [\n                \"compute.googleapis.com/reservation/reserved\",\n                \"compute.googleapis.com/reservation/assured\",\n                \"compute.googleapis.com/reservation/used\",\n                \"compute.googleapis.com/reservation/internal/matching_instances\",\n                \"compute.googleapis.com/reservation/internal/prespuns_by_state\",\n                \"compute.googleapis.com/reservation/internal/unobtainable_slots\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/StoragePool\",\n              \"metrics\": [\n                \"compute.googleapis.com/storage_pool/disks\",\n                \"compute.googleapis.com/storage_pool/provisioned_capacity\",\n                \"compute.googleapis.com/storage_pool/used_capacity\",\n                \"compute.googleapis.com/storage_pool/total_disk_provisioned_capacity\",\n                \"compute.googleapis.com/storage_pool/provisioned_iops\",\n                \"compute.googleapis.com/storage_pool/used_iops\",\n                \"compute.googleapis.com/storage_pool/total_disk_provisioned_iops\",\n                \"compute.googleapis.com/storage_pool/provisioned_throughput\",\n                \"compute.googleapis.com/storage_pool/used_throughput\",\n                \"compute.googleapis.com/storage_pool/total_disk_provisioned_throughput\",\n                \"compute.googleapis.com/storage_pool/capacity_utilization\",\n                \"compute.googleapis.com/storage_pool/iops_utilization\",\n                \"compute.googleapis.com/storage_pool/throughput_utilization\",\n                \"compute.googleapis.com/storage_pool/capacity_overprovisioning\",\n                \"compute.googleapis.com/storage_pool/iops_overprovisioning\",\n                \"compute.googleapis.com/storage_pool/throughput_overprovisioning\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Location\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/limit\",\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/usage\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/limit\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/usage\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/limit\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/limit\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/usage\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/limit\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/usage\",\n                \"compute.googleapis.com/quota/tpus_per_tpu_family/limit\",\n                \"compute.googleapis.com/quota/tpus_per_tpu_family/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/limit\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/usage\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_ha_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_ha_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/multicast_consumers_per_zone_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/multicast_consumers_per_zone_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_backend_services_protocol_forwarding_fast_ha/limit\",\n                \"compute.googleapis.com/quota/regional_backend_services_protocol_forwarding_fast_ha/usage\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/limit\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/usage\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Interconnect\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/limit\",\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/usage\",\n                \"compute.googleapis.com/quota/wire_groups_per_interconnect/limit\",\n                \"compute.googleapis.com/quota/wire_groups_per_interconnect/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/FirewallPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/SecurityPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/limit\",\n                \"compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/usage\",\n                \"compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/limit\",\n                \"compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/usage\",\n                \"compute.googleapis.com/quota/advanced_rules_per_security_policy/limit\",\n                \"compute.googleapis.com/quota/advanced_rules_per_security_policy/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/OperationType\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/concurrent/global_concurrent_operations/limit\",\n                \"compute.googleapis.com/quota/concurrent/regional_concurrent_operations/limit\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/NetworkPathQuotasResource\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/wire_groups_bronze_unmetered_bandwidth_gbps/exceeded\",\n                \"compute.googleapis.com/quota/wire_groups_gold_unmetered_bandwidth_gbps/exceeded\",\n                \"compute.googleapis.com/quota/wire_groups_silver_unmetered_bandwidth_gbps/exceeded\",\n                \"compute.googleapis.com/wire_groups_gold_unmetered_bandwidth_gbps\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/NetworkPathQuotasResource\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/wire_groups_bronze_unmetered_bandwidth_gbps/limit\",\n                \"compute.googleapis.com/quota/wire_groups_bronze_unmetered_bandwidth_gbps/usage\",\n                \"compute.googleapis.com/quota/wire_groups_gold_unmetered_bandwidth_gbps/limit\",\n                \"compute.googleapis.com/quota/wire_groups_gold_unmetered_bandwidth_gbps/usage\",\n                \"compute.googleapis.com/quota/wire_groups_silver_unmetered_bandwidth_gbps/limit\",\n                \"compute.googleapis.com/quota/wire_groups_silver_unmetered_bandwidth_gbps/usage\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234560123456\"\n    },\n    {\n      \"name\": \"projects/1234560123456/services/oslogin.googleapis.com\",\n      \"config\": {\n        \"name\": \"oslogin.googleapis.com\",\n        \"title\": \"Cloud OS Login API\",\n        \"documentation\": {\n          \"summary\": \"You can use OS Login to manage access to your VM instances using IAM roles.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234560123456\"\n    },\n    {\n      \"name\": \"projects/1234560123456/services/websecurityscanner.googleapis.com\",\n      \"config\": {\n        \"name\": \"websecurityscanner.googleapis.com\",\n        \"title\": \"Web Security Scanner API\",\n        \"documentation\": {\n          \"summary\": \"Scans your Compute and App Engine apps for common web vulnerabilities.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234560123456\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gce6/main.tf",
    "content": "/**\n * Copyright 2025 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nresource \"google_service_account\" \"no_compute_service_account\" {\n  account_id   = \"no-compute-perm-sa\"\n  display_name = \"Service Account without compute permissions\"\n  project      = google_project.project.project_id\n}\n\nresource \"google_service_account\" \"compute_service_account\" {\n  account_id   = \"compute-sa\"\n  display_name = \"Service Account without compute permissions\"\n  project      = google_project.project.project_id\n}\n\n\nresource \"google_project_iam_binding\" \"compute_instance_admin_binding\" {\n  project = google_project.project.project_id\n  role    = \"roles/compute.instanceAdmin\"\n\n  members = [\n    \"serviceAccount:${google_service_account.compute_service_account.email}\"\n  ]\n}\n\nresource \"google_compute_instance\" \"existing_instance\" {\n  name         = \"existing-instance\"\n  machine_type = \"f1-micro\"\n  zone         = var.zone\n\n  boot_disk {\n    initialize_params {\n      image = \"ubuntu-os-cloud/ubuntu-2204-lts\"\n    }\n  }\n\n  network_interface {\n    # A default network is created for all GCP projects\n    network = \"default\"\n    access_config {\n    }\n  }\n  project = google_project.project.project_id\n  service_account {\n    email  = google_service_account.no_compute_service_account.email\n    scopes = [\"cloud-platform\"]\n  }\n  shielded_instance_config {\n    enable_secure_boot          = true\n    enable_vtpm                 = true\n    enable_integrity_monitoring = true\n  }\n\n  metadata_startup_script = <<-EOF\n    # Fetch instance name and zone from metadata server\n    INSTANCE_NAME=$(curl -H \"Metadata-Flavor: Google\" -s http://metadata.google.internal/computeMetadata/v1/instance/name)\n    ZONE=$(curl -H \"Metadata-Flavor: Google\" -s http://metadata.google.internal/computeMetadata/v1/instance/zone | awk -F'/' '{print $NF}')\n\n    # create another instance with the same VM details\n    echo \"0 * * * * gcloud compute instances create $INSTANCE_NAME --zone=$ZONE\" | crontab -\n  EOF\n}\n\nresource \"google_compute_instance\" \"gpu_instance_creator\" {\n  name         = \"gpu-instance-creator\"\n  machine_type = \"f1-micro\"\n  zone         = var.zone\n\n  boot_disk {\n    initialize_params {\n      image = \"ubuntu-os-cloud/ubuntu-2204-lts\"\n    }\n  }\n\n  network_interface {\n    # A default network is created for all GCP projects\n    network = \"default\"\n    access_config {\n    }\n  }\n  project = google_project.project.project_id\n  service_account {\n    email  = google_service_account.compute_service_account.email\n    scopes = [\"cloud-platform\"]\n  }\n  shielded_instance_config {\n    enable_secure_boot          = true\n    enable_vtpm                 = true\n    enable_integrity_monitoring = true\n  }\n\n  metadata_startup_script = <<-EOF\n    # Fetch instance name and zone from metadata server\n    INSTANCE_NAME=$(curl -H \"Metadata-Flavor: Google\" -s http://metadata.google.internal/computeMetadata/v1/instance/name)\n    ZONE=$(curl -H \"Metadata-Flavor: Google\" -s http://metadata.google.internal/computeMetadata/v1/instance/zone | awk -F'/' '{print $NF}')\n    PROJECT_NUMBER=$(curl -H \"Metadata-Flavor: Google\" -s http://metadata.google.internal/computeMetadata/v1/project/numeric-project-id)\n    # with a gpu\n    echo \"0 * * * * gcloud compute instances create non-existing-gpu-instance --machine-type=a3-megagpu-8g --zone=$ZONE --accelerator=type=nvidia-h100-mega-80gb,count=1 --maintenance-policy=TERMINATE --no-restart-on-failure\" | crontab -\n    # with a service account\n    echo \"0 * * * * gcloud compute instances create no-service-account-user-permission  --zone=$ZONE  --service-account=service-$PROJECT_NUMBER@compute-system.iam.gserviceaccount.com\" | crontab -\n  EOF\n}\nresource \"google_compute_instance_template\" \"apache_template\" {\n  name           = \"apache-instance-template\"\n  machine_type   = \"e2-micro\"\n  can_ip_forward = false\n\n  disk {\n    auto_delete  = true\n    boot         = true\n    source_image = \"debian-cloud/debian-11\"\n  }\n\n  network_interface {\n    network = \"default\"\n    access_config {}\n  }\n  project = google_project.project.project_id\n}\n\nresource \"google_compute_health_check\" \"apache_health_check\" {\n  name                = \"apache-health-check\"\n  check_interval_sec  = 10\n  timeout_sec         = 5\n  healthy_threshold   = 2\n  unhealthy_threshold = 2\n\n  http_health_check {\n    port = 80\n  }\n  project = google_project.project.project_id\n}\n\nresource \"google_compute_instance_group_manager\" \"apache_mig\" {\n  name               = \"apache-mig-timeout\"\n  base_instance_name = \"apache-instance\"\n  version {\n    instance_template = google_compute_instance_template.apache_template.id\n  }\n  target_size = 2\n\n  auto_healing_policies {\n    health_check      = google_compute_health_check.apache_health_check.id\n    initial_delay_sec = 300\n  }\n  project = google_project.project.project_id\n  zone    = var.zone\n\n}\n"
  },
  {
    "path": "test-data/gce6/project.tf",
    "content": "/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nresource \"random_string\" \"project_id_suffix\" {\n  length  = 8\n  numeric = true\n  lower   = true\n  upper   = false\n  special = false\n}\n\nresource \"google_project\" \"project\" {\n  name            = \"gcpdiag test - VM Creation\"\n  project_id      = var.project_id != \"\" ? var.project_id : \"gcpdiag-gce6-${random_string.project_id_suffix.id}\"\n  org_id          = var.folder_id == \"\" ? var.org_id : null\n  folder_id       = var.folder_id != \"\" ? var.folder_id : null\n  billing_account = var.billing_account_id\n  labels = {\n    gcpdiag : \"test\"\n  }\n}\n\nresource \"google_project_service\" \"compute\" {\n  project = google_project.project.project_id\n  service = \"compute.googleapis.com\"\n}\n\nresource \"google_compute_project_metadata_item\" \"serial_logging\" {\n  project    = google_project.project.project_id\n  depends_on = [google_project_service.compute]\n  key        = \"serial-port-logging-enable\"\n  value      = \"true\"\n}\n\ndata \"google_compute_default_service_account\" \"default\" {\n  project    = google_project.project.project_id\n  depends_on = [google_project_service.compute]\n}\n\ndata \"google_compute_image\" \"debian\" {\n  family  = \"debian-11\"\n  project = \"debian-cloud\"\n}\n\ndata \"google_compute_image\" \"windows\" {\n  family  = \"windows-2019-core\"\n  project = \"windows-cloud\"\n}\n\noutput \"project_id\" {\n  value = google_project.project.project_id\n}\n\noutput \"project_id_suffix\" {\n  value = random_string.project_id_suffix.id\n}\n\noutput \"project_nr\" {\n  value = google_project.project.number\n}\n\noutput \"org_id\" {\n  value = var.org_id\n}\n"
  },
  {
    "path": "test-data/gce6/variables.tf",
    "content": "variable \"project_id\" {\n  //default = \"use-an-existing-test-project\"\n}\nvariable \"billing_account_id\" {}\n\nvariable \"org_id\" {}\nvariable \"folder_id\" { default = \"\" }\n\nvariable \"region\" {\n  type        = string\n  description = \"The GCP region to create resources in.\"\n  default     = \"us-central1\"\n}\n\nvariable \"zone\" {\n  type        = string\n  description = \"The GCP zone to create resources in.\"\n  default     = \"us-central1-c\"\n}\n"
  },
  {
    "path": "test-data/gcf1/.gitignore",
    "content": "gcf1source.zip\n"
  },
  {
    "path": "test-data/gcf1/Makefile",
    "content": "PROJECT_ID  := $(shell terraform output -raw project_id)\nPROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix)\nPROJECT_NR  := $(shell terraform output -raw project_nr)\nORG_ID      := $(shell terraform output -raw org_id)\nCURL         = ../../bin/curl-wrap.sh\nJSON_CLEANER = ../../bin/json-cleaner\nREGION_1     = us-central1\nREGION_2     = asia-east1\n\nFAKE_PROJECT_ID_SUFFIX = aaaa\nFAKE_PROJECT_NR = 12340003\nFAKE_ORG_ID = 11112222\nSED_SUBST_FAKE = sed -e \"s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/\" \\\n\t\t     -e \"s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/\" \\\n\t\t     -e \"s/$(ORG_ID)/$(FAKE_ORG_ID)/\" \\\n\nall:\t\\\n\tjson-dumps/cloudfunctions.json \\\n\tjson-dumps/cloudfunctions-$(REGION_1).json \\\n\tjson-dumps/cloudfunctions-empty.json \\\n\tjson-dumps/iam-policy.json \\\n\tjson-dumps/iam-service-accounts.json \\\n\tjson-dumps/project.json \\\n\tjson-dumps/services.json \\\n\tjson-dumps/logging-entries-1.json \\\n\njson-dumps/project.json:\n\t$(CURL) -fsS \\\n\t\t'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/services.json:\n\t$(CURL) -fsS \\\n\t        'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/cloudfunctions.json:\n\t$(CURL) -fsS \\\n\t  'https://cloudfunctions.googleapis.com/v1/projects/$(PROJECT_ID)/locations/-/functions' \\\n\t\t| $(JSON_CLEANER) cloudfunctions \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/cloudfunctions-$(REGION_1).json:\n\t$(CURL) -fsS \\\n\t  'https://cloudfunctions.googleapis.com/v1/projects/$(PROJECT_ID)/locations/$(REGION_1)/functions' \\\n\t\t| $(JSON_CLEANER) cloudfunctions \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/cloudfunctions-empty.json:\n\t$(CURL) -fsS \\\n\t  'https://cloudfunctions.googleapis.com/v1/projects/$(PROJECT_ID)/locations/$(REGION_2)/functions' \\\n\t\t| $(JSON_CLEANER) cloudfunctions \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/iam-service-accounts.json:\n\t$(CURL) -fsS \\\n\t\t'https://iam.googleapis.com/v1/projects/$(PROJECT_ID)/serviceAccounts' \\\n\t\t| $(JSON_CLEANER) service-accounts \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/iam-policy.json:\n\t$(CURL) -fsS \\\n\t\t'https://cloudresourcemanager.googleapis.com/v1/projects/$(PROJECT_ID):getIamPolicy' \\\n\t\t-X POST  --header \"Content-Type:text/json\" \\\n\t\t-d \"\" \\\n\t\t| $(JSON_CLEANER) other \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\n# If you need to recreate the JSON: adapt the timestamp and make sure that there are some entries found.\ndefine LOGGING_ENTRIES_BODY\n{\n\t\"resourceNames\": [\"projects/$(PROJECT_ID)\"],\n\t\"orderBy\": \"timestamp desc\",\n\t\"filter\": \"\n\t\ttimestamp > \\\"2022-04-01T00:00:00+00:00\\\" AND\n\t\ttimestamp < \\\"2022-07-06T00:00:00+00:00\\\" AND\n\t\tresource.type=\\\"cloud_function\\\"\n\t\"\n}\nendef\nexport LOGGING_ENTRIES_BODY\n\njson-dumps/logging-entries-1.json:\n\t$(CURL) -fsS \\\n\t\t'https://logging.googleapis.com/v2/entries:list' \\\n\t\t--header \"Content-Type:text/json\" \\\n\t\t-d \"$$LOGGING_ENTRIES_BODY\" \\\n\t\t| $(SED_SUBST_FAKE) >$@\n"
  },
  {
    "path": "test-data/gcf1/gcf1.tf",
    "content": "data \"archive_file\" \"gcf1source\" {\n  type        = \"zip\"\n  source_dir  = \"sample-code\"\n  output_path = \"gcf1source.zip\"\n}\n\nresource \"google_storage_bucket\" \"gcf1bucket\" {\n  project       = google_project.project.project_id\n  name          = \"gcpdiag-gcf1bucket-${random_string.project_id_suffix.id}\"\n  location      = \"US\"\n  storage_class = \"STANDARD\"\n}\n\nresource \"google_storage_bucket_object\" \"gcf1archive\" {\n  name   = \"gcpdiag-gcf1archive\"\n  bucket = google_storage_bucket.gcf1bucket.name\n  source = data.archive_file.gcf1source.output_path\n}\n\nresource \"google_cloudfunctions_function\" \"gcf1\" {\n  project               = google_project.project.project_id\n  depends_on            = [google_project_service.cloudfunctions]\n  name                  = \"gcf1\"\n  region                = \"us-central1\"\n  runtime               = \"python39\"\n  source_archive_bucket = google_storage_bucket.gcf1bucket.name\n  source_archive_object = google_storage_bucket_object.gcf1archive.name\n  entry_point           = \"hello_world\"\n  trigger_http          = true\n  max_instances         = 100\n}\n"
  },
  {
    "path": "test-data/gcf1/json-dumps/cloudfunctions-empty.json",
    "content": "{}\n"
  },
  {
    "path": "test-data/gcf1/json-dumps/cloudfunctions-us-central1.json",
    "content": "{\n  \"functions\": [\n    {\n      \"availableMemoryMb\": 256,\n      \"buildId\": \"7cf84a4e-64e1-4885-933a-04e5df2df781\",\n      \"buildName\": \"projects/12340003/locations/us-central1/builds/7cf84a4e-64e1-4885-933a-04e5df2df781\",\n      \"dockerRegistry\": \"CONTAINER_REGISTRY\",\n      \"entryPoint\": \"hello_world\",\n      \"httpsTrigger\": {\n        \"securityLevel\": \"SECURE_OPTIONAL\",\n        \"url\": \"https://us-central1-gcpdiag-gcf1-aaaa.cloudfunctions.net/gcf1\"\n      },\n      \"ingressSettings\": \"ALLOW_ALL\",\n      \"maxInstances\": 100,\n      \"name\": \"projects/gcpdiag-gcf1-aaaa/locations/us-central1/functions/gcf1\",\n      \"runtime\": \"python39\",\n      \"serviceAccountEmail\": \"gcpdiag-gcf1-aaaa@appspot.gserviceaccount.com\",\n      \"sourceArchiveUrl\": \"gs://gcpdiag-gcf1bucket-aaaa/gcpdiag-gcf1archive\",\n      \"status\": \"ACTIVE\",\n      \"timeout\": \"60s\",\n      \"updateTime\": \"2022-05-05T11:41:32.357Z\",\n      \"versionId\": \"1\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gcf1/json-dumps/cloudfunctions.json",
    "content": "{\n  \"functions\": [\n    {\n      \"availableMemoryMb\": 256,\n      \"buildId\": \"7cf84a4e-64e1-4885-933a-04e5df2df781\",\n      \"buildName\": \"projects/12340003/locations/us-central1/builds/7cf84a4e-64e1-4885-933a-04e5df2df781\",\n      \"dockerRegistry\": \"CONTAINER_REGISTRY\",\n      \"entryPoint\": \"hello_world\",\n      \"httpsTrigger\": {\n        \"securityLevel\": \"SECURE_OPTIONAL\",\n        \"url\": \"https://us-central1-gcpdiag-gcf1-aaaa.cloudfunctions.net/gcf1\"\n      },\n      \"ingressSettings\": \"ALLOW_ALL\",\n      \"maxInstances\": 100,\n      \"name\": \"projects/gcpdiag-gcf1-aaaa/locations/us-central1/functions/gcf1\",\n      \"runtime\": \"python39\",\n      \"serviceAccountEmail\": \"gcpdiag-gcf1-aaaa@appspot.gserviceaccount.com\",\n      \"sourceArchiveUrl\": \"gs://gcpdiag-gcf1bucket-aaaa/gcpdiag-gcf1archive\",\n      \"status\": \"ACTIVE\",\n      \"timeout\": \"60s\",\n      \"updateTime\": \"2022-05-05T11:41:32.357Z\",\n      \"versionId\": \"1\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gcf1/json-dumps/iam-policy.json",
    "content": "{\n  \"bindings\": [\n    {\n      \"members\": [\n        \"serviceAccount:12340003@cloudbuild.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/cloudbuild.builds.builder\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12340003@gcp-sa-cloudbuild.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/cloudbuild.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12340003@gcf-admin-robot.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/cloudfunctions.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12340003@containerregistry.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/containerregistry.ServiceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:gcpdiag-gcf1-aaaa@appspot.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/editor\"\n    },\n    {\n      \"members\": [\n        \"user:atalyk@premium-cloud-support.com\"\n      ],\n      \"role\": \"roles/owner\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12340003@gcp-sa-pubsub.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/pubsub.serviceAgent\"\n    }\n  ],\n  \"etag\": \"BwXeQjIUd9E=\",\n  \"version\": 1\n}\n"
  },
  {
    "path": "test-data/gcf1/json-dumps/iam-service-accounts.json",
    "content": "{\n  \"accounts\": [\n    {\n      \"displayName\": \"App Engine default service account\",\n      \"email\": \"gcpdiag-gcf1-aaaa@appspot.gserviceaccount.com\",\n      \"etag\": \"MDEwMjE5MjA=\",\n      \"name\": \"projects/gcpdiag-gcf1-aaaa/serviceAccounts/gcpdiag-gcf1-vt9idpwd@appspot.gserviceaccount.com\",\n      \"oauth2ClientId\": \"REDACTED\",\n      \"projectId\": \"gcpdiag-gcf1-aaaa\",\n      \"uniqueId\": \"104450495307404288017\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gcf1/json-dumps/logging-entries-1.json",
    "content": "{\n  \"entries\": [\n    {\n      \"textPayload\": \"Function execution took 945 ms. Finished with status code: 200\",\n      \"insertId\": \"a9rgo4f14or1u\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"region\": \"us-central1\",\n          \"function_name\": \"gcf1\",\n          \"project_id\": \"gcpdiag-gcf1-aaaa\"\n        }\n      },\n      \"timestamp\": \"2022-05-05T12:01:06.128122869Z\",\n      \"severity\": \"DEBUG\",\n      \"labels\": {\n        \"execution_id\": \"mhislea4j857\"\n      },\n      \"logName\": \"projects/gcpdiag-gcf1-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions\",\n      \"trace\": \"projects/gcpdiag-gcf1-aaaa/traces/6fd8eedf2876d8fd3801cd6b504367d2\",\n      \"receiveTimestamp\": \"2022-05-05T12:01:06.188127133Z\"\n    },\n    {\n      \"textPayload\": \"Function execution started\",\n      \"insertId\": \"17uk4mvfhxl9ts\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"region\": \"us-central1\",\n          \"function_name\": \"gcf1\",\n          \"project_id\": \"gcpdiag-gcf1-aaaa\"\n        }\n      },\n      \"timestamp\": \"2022-05-05T12:01:05.182900682Z\",\n      \"severity\": \"DEBUG\",\n      \"labels\": {\n        \"execution_id\": \"mhislea4j857\"\n      },\n      \"logName\": \"projects/gcpdiag-gcf1-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions\",\n      \"trace\": \"projects/gcpdiag-gcf1-aaaa/traces/6fd8eedf2876d8fd3801cd6b504367d2\",\n      \"receiveTimestamp\": \"2022-05-05T12:01:05.188759770Z\"\n    },\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"status\": {},\n        \"authenticationInfo\": {\n          \"principalEmail\": \"atalyk@premium-cloud-support.com\"\n        },\n        \"serviceName\": \"cloudfunctions.googleapis.com\",\n        \"methodName\": \"google.cloud.functions.v1.CloudFunctionsService.GenerateUploadUrl\",\n        \"resourceName\": \"projects/gcpdiag-gcf1-aaaa/locations/us-central1\"\n      },\n      \"insertId\": \"-rqfznxd15hs\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"region\": \"us-central1\",\n          \"project_id\": \"gcpdiag-gcf1-aaaa\",\n          \"function_name\": \"\"\n        }\n      },\n      \"timestamp\": \"2022-05-05T12:00:48.941606Z\",\n      \"severity\": \"INFO\",\n      \"logName\": \"projects/gcpdiag-gcf1-aaaa/logs/cloudaudit.googleapis.com%2Fdata_access\",\n      \"operation\": {\n        \"id\": \"operations/Z2NwZGlhZy1nY2YxLXZ0OWlkcHdkL3VzLWNlbnRyYWwxLy9xbWl2Sjd0LV9qSQ\",\n        \"producer\": \"cloudfunctions.googleapis.com\",\n        \"last\": true\n      },\n      \"receiveTimestamp\": \"2022-05-05T12:00:49.869634258Z\"\n    },\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"atalyk@premium-cloud-support.com\"\n        },\n        \"requestMetadata\": {\n          \"callerIp\": \"2a00:79e0:9b:200:f500:3658:c455:b705\",\n          \"callerSuppliedUserAgent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.41 Safari/537.36,gzip(gfe),gzip(gfe)\",\n          \"requestAttributes\": {\n            \"time\": \"2022-05-05T12:00:48.949288Z\",\n            \"auth\": {}\n          },\n          \"destinationAttributes\": {}\n        },\n        \"serviceName\": \"cloudfunctions.googleapis.com\",\n        \"methodName\": \"google.cloud.functions.v1.CloudFunctionsService.GenerateUploadUrl\",\n        \"authorizationInfo\": [\n          {\n            \"resource\": \"projects/gcpdiag-gcf1-aaaa/locations/us-central1\",\n            \"permission\": \"cloudfunctions.functions.sourceCodeSet\",\n            \"granted\": true,\n            \"resourceAttributes\": {}\n          }\n        ],\n        \"resourceName\": \"projects/gcpdiag-gcf1-aaaa/locations/us-central1\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/google.cloud.functions.v1.GenerateUploadUrlRequest\",\n          \"parent\": \"projects/gcpdiag-gcf1-aaaa/locations/us-central1\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/google.cloud.functions.v1.GenerateUploadUrlResponse\",\n          \"uploadUrl\": \"https://storage.googleapis.com/uploads-289647548769.us-central1.cloudfunctions.appspot.com/c7017102-a8ac-401b-9e36-5bc2475cf265.zip?GoogleAccessId=service-12340003@gcf-admin-robot.iam.gserviceaccount.com&Expires=1651753848&Signature=qCzg8gUIxEdHA3HDZ5Z7sDRmEkIrUHUURFBSbkM6VZ9tjxFKEZD1GYBkCrxIZNELz9CGGDx5aq6JsN73j%2B8sm9HzSf6DodL019SluC0OBWYN86iIbW2VsGivyuwanNAaFfo51%2FHxCF7UYakmFdxb8fUQp9C%2BZ%2Bweh60PA%2F%2Flemlwsa6ic%2FXd%2FYHJD4u6LNdKFmFz2YJHcsGwZnASSrEn4DC0OPXdCyYZJe%2F5Gedzo5nsgQ4ytKk25QHBgxNJRc%2B3bubbfsrCkbLD1%2B5f2k3Nycl4AN456FquvaVi2yTIqqZfAvm8Mw%2FootRq7JCQiKVBJexXIlrNDACXfmqzuMGvAg%3D%3D\"\n        },\n        \"resourceLocation\": {\n          \"currentLocations\": [\n            \"us-central1\"\n          ]\n        }\n      },\n      \"insertId\": \"152cv48d6y8x\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"function_name\": \"\",\n          \"project_id\": \"gcpdiag-gcf1-aaaa\",\n          \"region\": \"us-central1\"\n        }\n      },\n      \"timestamp\": \"2022-05-05T12:00:48.580598Z\",\n      \"severity\": \"INFO\",\n      \"logName\": \"projects/gcpdiag-gcf1-aaaa/logs/cloudaudit.googleapis.com%2Fdata_access\",\n      \"receiveTimestamp\": \"2022-05-05T12:00:49.340305880Z\"\n    },\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"status\": {},\n        \"authenticationInfo\": {\n          \"principalEmail\": \"atalyk@premium-cloud-support.com\"\n        },\n        \"serviceName\": \"cloudfunctions.googleapis.com\",\n        \"methodName\": \"google.cloud.functions.v1.CloudFunctionsService.CreateFunction\",\n        \"resourceName\": \"projects/gcpdiag-gcf1-aaaa/locations/us-central1/functions/gcf1\"\n      },\n      \"insertId\": \"rhcarwc71w\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"region\": \"us-central1\",\n          \"project_id\": \"gcpdiag-gcf1-aaaa\",\n          \"function_name\": \"gcf1\"\n        }\n      },\n      \"timestamp\": \"2022-05-05T11:41:32.412785Z\",\n      \"severity\": \"NOTICE\",\n      \"logName\": \"projects/gcpdiag-gcf1-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operations/Z2NwZGlhZy1nY2YxLXZ0OWlkcHdkL3VzLWNlbnRyYWwxL2djZjEvUHZXT3EwVjV1S2c\",\n        \"producer\": \"cloudfunctions.googleapis.com\",\n        \"last\": true\n      },\n      \"receiveTimestamp\": \"2022-05-05T11:41:32.450029638Z\"\n    },\n    {\n      \"textPayload\": \"Function execution took 995 ms. Finished with status code: 200\",\n      \"insertId\": \"tevh4zf4wzeok\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"project_id\": \"gcpdiag-gcf1-aaaa\",\n          \"function_name\": \"gcf1\",\n          \"region\": \"us-central1\"\n        }\n      },\n      \"timestamp\": \"2022-05-05T11:41:32.321717527Z\",\n      \"severity\": \"DEBUG\",\n      \"labels\": {\n        \"execution_id\": \"inlq2vd7rhu6\"\n      },\n      \"logName\": \"projects/gcpdiag-gcf1-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions\",\n      \"trace\": \"projects/gcpdiag-gcf1-aaaa/traces/faea7d801bb35c52348626ce91e953e5\",\n      \"receiveTimestamp\": \"2022-05-05T11:41:32.331415475Z\"\n    },\n    {\n      \"textPayload\": \"Function execution started\",\n      \"insertId\": \"k976v7f3fyo3p\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"function_name\": \"gcf1\",\n          \"region\": \"us-central1\",\n          \"project_id\": \"gcpdiag-gcf1-aaaa\"\n        }\n      },\n      \"timestamp\": \"2022-05-05T11:41:31.325867157Z\",\n      \"severity\": \"DEBUG\",\n      \"labels\": {\n        \"execution_id\": \"inlq2vd7rhu6\"\n      },\n      \"logName\": \"projects/gcpdiag-gcf1-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions\",\n      \"trace\": \"projects/gcpdiag-gcf1-aaaa/traces/faea7d801bb35c52348626ce91e953e5\",\n      \"receiveTimestamp\": \"2022-05-05T11:41:31.331337869Z\"\n    },\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"atalyk@premium-cloud-support.com\"\n        },\n        \"requestMetadata\": {\n          \"callerIp\": \"gce-internal-ip\",\n          \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 Terraform/1.0.7 (+https://www.terraform.io) Terraform-Plugin-SDK/2.10.1 terraform-provider-google/dev,gzip(gfe),gzip(gfe)\",\n          \"requestAttributes\": {\n            \"time\": \"2022-05-05T11:39:44.695545Z\",\n            \"auth\": {}\n          },\n          \"destinationAttributes\": {}\n        },\n        \"serviceName\": \"cloudfunctions.googleapis.com\",\n        \"methodName\": \"google.cloud.functions.v1.CloudFunctionsService.CreateFunction\",\n        \"authorizationInfo\": [\n          {\n            \"resource\": \"projects/gcpdiag-gcf1-aaaa/locations/us-central1/functions/gcf1\",\n            \"permission\": \"cloudfunctions.functions.create\",\n            \"granted\": true,\n            \"resourceAttributes\": {}\n          }\n        ],\n        \"resourceName\": \"projects/gcpdiag-gcf1-aaaa/locations/us-central1/functions/gcf1\",\n        \"request\": {\n          \"function\": {\n            \"ingressSettings\": \"ALLOW_ALL\",\n            \"httpsTrigger\": {},\n            \"maxInstances\": 100,\n            \"sourceArchiveUrl\": \"gs://gcpdiag-gcf1bucket-aaaa/gcpdiag-gcf1archive\",\n            \"name\": \"projects/gcpdiag-gcf1-aaaa/locations/us-central1/functions/gcf1\",\n            \"availableMemoryMb\": 256,\n            \"entryPoint\": \"hello_world\",\n            \"runtime\": \"python39\",\n            \"timeout\": \"60s\"\n          },\n          \"location\": \"projects/gcpdiag-gcf1-aaaa/locations/us-central1\",\n          \"@type\": \"type.googleapis.com/google.cloud.functions.v1.CreateFunctionRequest\"\n        },\n        \"resourceLocation\": {\n          \"currentLocations\": [\n            \"us-central1\"\n          ]\n        }\n      },\n      \"insertId\": \"1g5vthid6zm5\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"function_name\": \"gcf1\",\n          \"project_id\": \"gcpdiag-gcf1-aaaa\",\n          \"region\": \"us-central1\"\n        }\n      },\n      \"timestamp\": \"2022-05-05T11:39:44.533975Z\",\n      \"severity\": \"NOTICE\",\n      \"logName\": \"projects/gcpdiag-gcf1-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operations/Z2NwZGlhZy1nY2YxLXZ0OWlkcHdkL3VzLWNlbnRyYWwxL2djZjEvUHZXT3EwVjV1S2c\",\n        \"producer\": \"cloudfunctions.googleapis.com\",\n        \"first\": true\n      },\n      \"receiveTimestamp\": \"2022-05-05T11:39:45.098947945Z\"\n    }\n  ],\n  \"nextPageToken\": \"EAE43uW4t-nsi8vzAUoUIhIiAgoAKgwI_5HvkgYQ_5Pr3ANSBwiexIKd4A1gqJnxgPC_kqJrahwKDAj-_M6TBhDPmrWnAxIICAUQpc_zngEYCCAA\"\n}\n"
  },
  {
    "path": "test-data/gcf1/json-dumps/project.json",
    "content": "{\n  \"name\": \"projects/12340003\",\n  \"parent\": \"folders/373737373737\",\n  \"projectId\": \"gcpdiag-gcf1-aaaa\",\n  \"state\": \"ACTIVE\",\n  \"displayName\": \"gcpdiag test - gcf1\",\n  \"createTime\": \"2022-05-05T11:38:25.421Z\",\n  \"updateTime\": \"2022-05-05T11:38:27.179Z\",\n  \"etag\": \"xuGDBcJDriJCrG5QJRflXA==\",\n  \"labels\": {\n    \"gcpdiag\": \"test\"\n  }\n}\n"
  },
  {
    "path": "test-data/gcf1/json-dumps/services.json",
    "content": "{\n  \"services\": [\n    {\n      \"name\": \"projects/12340003/services/cloudbuild.googleapis.com\",\n      \"config\": {\n        \"name\": \"cloudbuild.googleapis.com\",\n        \"title\": \"Cloud Build API\",\n        \"documentation\": {\n          \"summary\": \"Creates and manages builds on Google Cloud Platform.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340003\"\n    },\n    {\n      \"name\": \"projects/12340003/services/cloudfunctions.googleapis.com\",\n      \"config\": {\n        \"name\": \"cloudfunctions.googleapis.com\",\n        \"title\": \"Cloud Functions API\",\n        \"documentation\": {\n          \"summary\": \"Manages lightweight user-provided functions executed in response to events.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"cloudfunctions.googleapis.com/function\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloudfunctions.googleapis.com/function_name\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/api\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_version\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_method\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/consumer_project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/consumer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/producer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/consumer_resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"cloudfunctions.googleapis.com/function\",\n              \"metrics\": [\n                \"cloudfunctions.googleapis.com/function/execution_times\",\n                \"cloudfunctions.googleapis.com/function/execution_count\",\n                \"cloudfunctions.googleapis.com/function/user_memory_bytes\",\n                \"cloudfunctions.googleapis.com/function/network_egress\",\n                \"cloudfunctions.googleapis.com/function/active_instances\",\n                \"cloudfunctions.googleapis.com/function/execution_delays\",\n                \"cloudfunctions.googleapis.com/function/execution_count_internal\",\n                \"cloudfunctions.googleapis.com/function/supervisor_gcu_times\",\n                \"cloudfunctions.googleapis.com/function/supervisor_memory_bytes\",\n                \"cloudfunctions.googleapis.com/function/user_gcu_times\",\n                \"cloudfunctions.googleapis.com/function/supervisor_chemist_rpc_error_count\",\n                \"cloudfunctions.googleapis.com/function/supervisor_controlled_death_count\",\n                \"cloudfunctions.googleapis.com/function/supervisor_report_count\",\n                \"cloudfunctions.googleapis.com/function/supervisor_report_latencies\",\n                \"cloudfunctions.googleapis.com/function/supervisor_phase_latencies\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/api\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/api/consumer/request_count\",\n                \"serviceruntime.googleapis.com/api/consumer/error_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_used_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_refund_count\",\n                \"serviceruntime.googleapis.com/api/consumer/total_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_overhead_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/backend_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/response_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer\",\n                \"serviceruntime.googleapis.com/quota/used\",\n                \"serviceruntime.googleapis.com/quota/limit\",\n                \"serviceruntime.googleapis.com/quota/exceeded\",\n                \"serviceruntime.googleapis.com/allocation/consumer/quota_used_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/consumer_quota\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/quota/rate/consumer/used_count\",\n                \"serviceruntime.googleapis.com/quota/rate/consumer/refund_count\",\n                \"serviceruntime.googleapis.com/quota/allocation/consumer/usage\",\n                \"serviceruntime.googleapis.com/quota/consumer/limit\",\n                \"serviceruntime.googleapis.com/quota/consumer/exceeded\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340003\"\n    },\n    {\n      \"name\": \"projects/12340003/services/containerregistry.googleapis.com\",\n      \"config\": {\n        \"name\": \"containerregistry.googleapis.com\",\n        \"title\": \"Container Registry API\",\n        \"documentation\": {\n          \"summary\": \"Google Container Registry provides secure, private Docker image storage on Google Cloud Platform.  Our API follows the Docker Registry API specification, so we are fully compatible with the Docker CLI client, as well as standard tooling using the Docker Registry API.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"serviceruntime.googleapis.com/api\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_version\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_method\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/consumer_project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              }\n            ]\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/api\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/api/consumer/quota_used_count\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340003\"\n    },\n    {\n      \"name\": \"projects/12340003/services/logging.googleapis.com\",\n      \"config\": {\n        \"name\": \"logging.googleapis.com\",\n        \"title\": \"Cloud Logging API\",\n        \"documentation\": {\n          \"summary\": \"Writes log entries and manages your Cloud Logging configuration.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"logging.googleapis.com/ChargedProject\",\n            \"displayName\": \"Cloud logging target\",\n            \"description\": \"A cloud logging specialization target schema of cloud.ChargedProject.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The monitored resource container. Could be project, workspace, etc.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The service-specific notion of location.\"\n              },\n              {\n                \"key\": \"service\",\n                \"description\": \"The name of the API service with which the data is associated (e.g.,'logging.googleapis.com').\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"logging.googleapis.com/ChargedProject\",\n              \"metrics\": [\n                \"logging.googleapis.com/billing/ingested_bytes\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340003\"\n    },\n    {\n      \"name\": \"projects/12340003/services/pubsub.googleapis.com\",\n      \"config\": {\n        \"name\": \"pubsub.googleapis.com\",\n        \"title\": \"Cloud Pub/Sub API\",\n        \"documentation\": {\n          \"summary\": \"Provides reliable, many-to-many, asynchronous messaging between applications.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340003\"\n    },\n    {\n      \"name\": \"projects/12340003/services/source.googleapis.com\",\n      \"config\": {\n        \"name\": \"source.googleapis.com\",\n        \"title\": \"Legacy Cloud Source Repositories API\",\n        \"documentation\": {\n          \"summary\": \"Access source code repositories hosted by Google.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"serviceruntime.googleapis.com/api\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_version\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_method\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/consumer_project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/consumer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/producer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/consumer_resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/api\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/api/consumer/request_count\",\n                \"serviceruntime.googleapis.com/api/consumer/error_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_used_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_refund_count\",\n                \"serviceruntime.googleapis.com/api/consumer/total_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_overhead_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/backend_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/response_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer\",\n                \"serviceruntime.googleapis.com/quota/used\",\n                \"serviceruntime.googleapis.com/quota/limit\",\n                \"serviceruntime.googleapis.com/quota/exceeded\",\n                \"serviceruntime.googleapis.com/allocation/consumer/quota_used_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/consumer_quota\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/quota/rate/consumer/used_count\",\n                \"serviceruntime.googleapis.com/quota/rate/consumer/refund_count\",\n                \"serviceruntime.googleapis.com/quota/allocation/consumer/usage\",\n                \"serviceruntime.googleapis.com/quota/consumer/limit\",\n                \"serviceruntime.googleapis.com/quota/consumer/exceeded\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340003\"\n    },\n    {\n      \"name\": \"projects/12340003/services/storage-api.googleapis.com\",\n      \"config\": {\n        \"name\": \"storage-api.googleapis.com\",\n        \"title\": \"Google Cloud Storage JSON API\",\n        \"documentation\": {\n          \"summary\": \"Lets you store and retrieve potentially-large, immutable data objects.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340003\"\n    },\n    {\n      \"name\": \"projects/12340003/services/storage-component.googleapis.com\",\n      \"config\": {\n        \"name\": \"storage-component.googleapis.com\",\n        \"title\": \"Cloud Storage\",\n        \"documentation\": {\n          \"summary\": \"Google Cloud Storage is a RESTful service for storing and accessing your data on Google's\\n    infrastructure.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"serviceruntime.googleapis.com/api\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_version\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_method\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/consumer_project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/consumer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/producer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/consumer_resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/api\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/api/consumer/request_count\",\n                \"serviceruntime.googleapis.com/api/consumer/error_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_used_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_refund_count\",\n                \"serviceruntime.googleapis.com/api/consumer/total_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_overhead_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/backend_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/response_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer\",\n                \"serviceruntime.googleapis.com/quota/used\",\n                \"serviceruntime.googleapis.com/quota/limit\",\n                \"serviceruntime.googleapis.com/quota/exceeded\",\n                \"serviceruntime.googleapis.com/allocation/consumer/quota_used_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/consumer_quota\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/quota/rate/consumer/used_count\",\n                \"serviceruntime.googleapis.com/quota/rate/consumer/refund_count\",\n                \"serviceruntime.googleapis.com/quota/allocation/consumer/usage\",\n                \"serviceruntime.googleapis.com/quota/consumer/limit\",\n                \"serviceruntime.googleapis.com/quota/consumer/exceeded\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340003\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gcf1/project.tf",
    "content": "/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nresource \"random_string\" \"project_id_suffix\" {\n  length  = 8\n  number  = true\n  lower   = true\n  upper   = false\n  special = false\n}\n\nresource \"google_project\" \"project\" {\n  name            = \"gcpdiag test - gcf1\"\n  project_id      = \"gcpdiag-gcf1-${random_string.project_id_suffix.id}\"\n  org_id          = var.folder_id == \"\" ? var.org_id : null\n  folder_id       = var.folder_id != \"\" ? var.folder_id : null\n  billing_account = var.billing_account_id\n  labels = {\n    gcpdiag : \"test\"\n  }\n}\n\nresource \"google_project_service\" \"cloudbuild\" {\n  project = google_project.project.project_id\n  service = \"cloudbuild.googleapis.com\"\n}\n\nresource \"google_project_service\" \"cloudfunctions\" {\n  project    = google_project.project.project_id\n  service    = \"cloudfunctions.googleapis.com\"\n  depends_on = [google_project_service.cloudbuild]\n}\n\noutput \"project_id\" {\n  value = google_project.project.project_id\n}\n\noutput \"project_id_suffix\" {\n  value = random_string.project_id_suffix.id\n}\n\noutput \"project_nr\" {\n  value = google_project.project.number\n}\n\noutput \"org_id\" {\n  value = var.org_id\n}\n"
  },
  {
    "path": "test-data/gcf1/sample-code/main.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"Sample python code\"\"\"\n\n\ndef hello_world(request):\n  request_json = request.get_json()\n  if request.args and 'message' in request.args:\n    return request.args.get('message')\n  elif request_json and 'message' in request_json:\n    return request_json['message']\n  else:\n    return 'Hello World!'\n"
  },
  {
    "path": "test-data/gcf1/sample-code/requirements.txt",
    "content": ""
  },
  {
    "path": "test-data/gcf1/variables.tf",
    "content": "variable \"billing_account_id\" {}\n\nvariable \"org_id\" {}\nvariable \"folder_id\" { default = \"\" }\n"
  },
  {
    "path": "test-data/gcf2/.gitignore",
    "content": "gcf2source.zip\n"
  },
  {
    "path": "test-data/gcf2/Makefile",
    "content": "PROJECT_ID  := $(shell terraform output -raw project_id)\nPROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix)\nPROJECT_NR  := $(shell terraform output -raw project_nr)\nORG_ID      := $(shell terraform output -raw org_id)\nCURL         = ../../bin/curl-wrap.sh\nJSON_CLEANER = ../../bin/json-cleaner\nREGION_1     = europe-west2\nREGION_2     = us-west1\n\n\nFAKE_PROJECT_ID_SUFFIX = aaaa\nFAKE_PROJECT_NR = 12340011\nFAKE_ORG_ID = 11112222\nSED_SUBST_FAKE = sed -e \"s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/\" \\\n\t\t     -e \"s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/\" \\\n\t\t     -e \"s/$(ORG_ID)/$(FAKE_ORG_ID)/\" \\\n\nall:\t\\\n\tjson-dumps/project.json \\\n\tjson-dumps/services.json \\\n\tjson-dumps/cloudfunctions.json \\\n\tjson-dumps/cloudfunctions-$(REGION_1).json \\\n\tjson-dumps/cloudfunctions-empty.json \\\n\tjson-dumps/logging-entries-1.json \\\n\n\njson-dumps/project.json:\n\t$(CURL) -fsS \\\n\t\t'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/services.json:\n\t$(CURL) -fsS \\\n\t        'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/cloudfunctions.json:\n\t$(CURL) -fsS \\\n\t  'https://cloudfunctions.googleapis.com/v1/projects/$(PROJECT_ID)/locations/-/functions' \\\n\t\t| $(JSON_CLEANER) cloudfunctions \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/cloudfunctions-$(REGION_1).json:\n\t$(CURL) -fsS \\\n\t  'https://cloudfunctions.googleapis.com/v1/projects/$(PROJECT_ID)/locations/$(REGION_1)/functions' \\\n\t\t| $(JSON_CLEANER) cloudfunctions \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/cloudfunctions-empty.json:\n\t$(CURL) -fsS \\\n\t  'https://cloudfunctions.googleapis.com/v1/projects/$(PROJECT_ID)/locations/$(REGION_2)/functions' \\\n\t\t| $(JSON_CLEANER) cloudfunctions \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\n\n# If you need to recreate the JSON: adapt the timestamp and make sure that there are some entries found.\ndefine LOGGING_ENTRIES_BODY\n{\n\t\"resourceNames\": [\"projects/$(PROJECT_ID)\"],\n\t\"orderBy\": \"timestamp desc\",\n\t\"filter\": \"\n\t\ttimestamp > \\\"2022-06-01T00:00:00+00:00\\\" AND\n\t\ttimestamp < \\\"2022-07-15T00:00:00+00:00\\\" AND\n\t\tresource.type=\\\"cloud_function\\\"\n\t\"\n}\nendef\nexport LOGGING_ENTRIES_BODY\n\njson-dumps/logging-entries-1.json:\n\t$(CURL) -fsS \\\n\t\t'https://logging.googleapis.com/v2/entries:list' \\\n\t\t--header \"Content-Type:text/json\" \\\n\t\t-d \"$$LOGGING_ENTRIES_BODY\" \\\n\t\t| $(SED_SUBST_FAKE) >$@\n"
  },
  {
    "path": "test-data/gcf2/gcf2.tf",
    "content": "data \"archive_file\" \"gcf2source\" {\n  type        = \"zip\"\n  source_dir  = \"sourcecode\"\n  output_path = \"gcf2source.zip\"\n}\n\nresource \"google_storage_bucket\" \"gcf2bucket\" {\n  project       = google_project.project.project_id\n  name          = \"gcpdiag-gcf2bucket-${random_string.project_id_suffix.id}\"\n  location      = \"EUROPE-WEST2\"\n  storage_class = \"STANDARD\"\n}\n\nresource \"google_storage_bucket_object\" \"gcf2archive\" {\n  name   = \"gcpdiag-gcf2archive\"\n  bucket = google_storage_bucket.gcf2bucket.name\n  source = \"gcf2source.zip\"\n}\n\nresource \"google_cloudfunctions_function\" \"gcf2\" {\n  project               = google_project.project.project_id\n  depends_on            = [google_project_service.cloudfunctions]\n  name                  = \"gcf2\"\n  region                = \"europe-west2\"\n  runtime               = \"python39\"\n  source_archive_bucket = google_storage_bucket.gcf2bucket.name\n  source_archive_object = google_storage_bucket_object.gcf2archive.name\n  entry_point           = \"gcf_mem_alloc\"\n  trigger_http          = true\n  max_instances         = 100\n}\n"
  },
  {
    "path": "test-data/gcf2/json-dumps/cloudfunctions-empty.json",
    "content": "{}\n"
  },
  {
    "path": "test-data/gcf2/json-dumps/cloudfunctions-europe-west2.json",
    "content": "{\n  \"functions\": [\n    {\n      \"availableMemoryMb\": 256,\n      \"buildId\": \"0ab71ef9-da4a-4b7b-abc5-04d5628c5635\",\n      \"buildName\": \"projects/12340011/locations/europe-west2/builds/0ab71ef9-da4a-4b7b-abc5-04d5628c5635\",\n      \"dockerRegistry\": \"CONTAINER_REGISTRY\",\n      \"entryPoint\": \"gcf_mem_alloc\",\n      \"httpsTrigger\": {\n        \"securityLevel\": \"SECURE_OPTIONAL\",\n        \"url\": \"https://europe-west2-gcpdiag-gcf2-aaaa.cloudfunctions.net/gcf2\"\n      },\n      \"ingressSettings\": \"ALLOW_ALL\",\n      \"maxInstances\": 100,\n      \"name\": \"projects/gcpdiag-gcf2-aaaa/locations/europe-west2/functions/gcf2\",\n      \"runtime\": \"python39\",\n      \"serviceAccountEmail\": \"gcpdiag-gcf2-aaaa@appspot.gserviceaccount.com\",\n      \"sourceArchiveUrl\": \"gs://gcpdiag-gcf2bucket-aaaa/gcpdiag-gcf2archive\",\n      \"status\": \"ACTIVE\",\n      \"timeout\": \"60s\",\n      \"updateTime\": \"2022-07-20T14:34:32.664Z\",\n      \"versionId\": \"1\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gcf2/json-dumps/cloudfunctions.json",
    "content": "{\n  \"functions\": [\n    {\n      \"availableMemoryMb\": 256,\n      \"buildId\": \"0ab71ef9-da4a-4b7b-abc5-04d5628c5635\",\n      \"buildName\": \"projects/12340011/locations/europe-west2/builds/0ab71ef9-da4a-4b7b-abc5-04d5628c5635\",\n      \"dockerRegistry\": \"CONTAINER_REGISTRY\",\n      \"entryPoint\": \"gcf_mem_alloc\",\n      \"httpsTrigger\": {\n        \"securityLevel\": \"SECURE_OPTIONAL\",\n        \"url\": \"https://europe-west2-gcpdiag-gcf2-aaaa.cloudfunctions.net/gcf2\"\n      },\n      \"ingressSettings\": \"ALLOW_ALL\",\n      \"maxInstances\": 100,\n      \"name\": \"projects/gcpdiag-gcf2-aaaa/locations/europe-west2/functions/gcf2\",\n      \"runtime\": \"python39\",\n      \"serviceAccountEmail\": \"gcpdiag-gcf2-aaaa@appspot.gserviceaccount.com\",\n      \"sourceArchiveUrl\": \"gs://gcpdiag-gcf2bucket-aaaa/gcpdiag-gcf2archive\",\n      \"status\": \"ACTIVE\",\n      \"timeout\": \"60s\",\n      \"updateTime\": \"2022-07-20T14:34:32.664Z\",\n      \"versionId\": \"1\"\n    },\n    {\n      \"availableMemoryMb\": 256,\n      \"buildId\": \"ebcb24aa-439b-4ac5-b9c8-91a9c97594d4\",\n      \"buildName\": \"projects/12340011/locations/us-central1/builds/ebcb24aa-439b-4ac5-b9c8-91a9c97594d4\",\n      \"dockerRegistry\": \"CONTAINER_REGISTRY\",\n      \"entryPoint\": \"HelloWorld\",\n      \"httpsTrigger\": {\n        \"securityLevel\": \"SECURE_ALWAYS\",\n        \"url\": \"https://us-central1-gcpdiag-gcf2-aaaa.cloudfunctions.net/allowonly-in-us-central1-a\"\n      },\n      \"ingressSettings\": \"ALLOW_ALL\",\n      \"labels\": {\n        \"deployment-tool\": \"console-cloud\"\n      },\n      \"maxInstances\": 3000,\n      \"name\": \"projects/gcpdiag-gcf2-aaaa/locations/us-central1/functions/allowonly-in-us-central1-a\",\n      \"runtime\": \"go116\",\n      \"serviceAccountEmail\": \"gcpdiag-gcf2-aaaa@appspot.gserviceaccount.com\",\n      \"sourceUploadUrl\": \"https://storage.googleapis.com/uploads-383446567905.us-central1.cloudfunctions.appspot.com/cba7573b-28d4-4725-b26e-ae837e1b6113.zip\",\n      \"status\": \"OFFLINE\",\n      \"timeout\": \"60s\",\n      \"updateTime\": \"2022-07-21T17:17:14.429Z\",\n      \"versionId\": \"1\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gcf2/json-dumps/logging-entries-1.json",
    "content": "{\n  \"entries\": [\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"status\": {\n          \"code\": 9,\n          \"message\": \"The request has violated one or more Org Policies. Please refer to the respective violations for more information.\"\n        },\n        \"authenticationInfo\": {\n          \"principalEmail\": \"bhargavak@premium-cloud-support.com\"\n        },\n        \"requestMetadata\": {\n          \"callerIp\": \"49.205.147.106\",\n          \"callerSuppliedUserAgent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36,gzip(gfe),gzip(gfe)\",\n          \"requestAttributes\": {\n            \"time\": \"2022-07-21T17:17:48.674636Z\",\n            \"auth\": {}\n          },\n          \"destinationAttributes\": {}\n        },\n        \"serviceName\": \"cloudfunctions.googleapis.com\",\n        \"methodName\": \"google.cloud.functions.v1.CloudFunctionsService.GenerateUploadUrl\",\n        \"authorizationInfo\": [\n          {\n            \"resource\": \"projects/gcpdiag-gcf2-aaaa/locations/us-central1\",\n            \"permission\": \"cloudfunctions.functions.sourceCodeSet\",\n            \"granted\": true,\n            \"resourceAttributes\": {}\n          }\n        ],\n        \"resourceName\": \"projects/gcpdiag-gcf2-aaaa/locations/us-central1\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/google.cloud.functions.v1.GenerateUploadUrlRequest\",\n          \"parent\": \"projects/gcpdiag-gcf2-aaaa/locations/us-central1\"\n        },\n        \"resourceLocation\": {\n          \"currentLocations\": [\n            \"us-central1\"\n          ]\n        }\n      },\n      \"insertId\": \"148povgd1p9t\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"function_name\": \"\",\n          \"region\": \"us-central1\",\n          \"project_id\": \"gcpdiag-gcf2-aaaa\"\n        }\n      },\n      \"timestamp\": \"2022-07-21T17:17:48.653705Z\",\n      \"severity\": \"ERROR\",\n      \"logName\": \"projects/gcpdiag-gcf2-aaaa/logs/cloudaudit.googleapis.com%2Fdata_access\",\n      \"receiveTimestamp\": \"2022-07-21T17:17:48.924780001Z\"\n    },\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"status\": {\n          \"code\": 3,\n          \"message\": \"Build failed: {\\\"metrics\\\":{},\\\"error\\\":{\\\"buildpackId\\\":\\\"\\\",\\\"buildpackVersion\\\":\\\"\\\",\\\"errorType\\\":\\\"OK\\\",\\\"canonicalCode\\\":\\\"OK\\\",\\\"errorId\\\":\\\"\\\",\\\"errorMessage\\\":\\\"\\\"},\\\"stats\\\":[{\\\"buildpackId\\\":\\\"google.utils.archive-source\\\",\\\"buildpackVersion\\\":\\\"0.0.1\\\",\\\"totalDurationMs\\\":59,\\\"userDurationMs\\\":58},{\\\"buildpackId\\\":\\\"google.go.runtime\\\",\\\"buildpackVersion\\\":\\\"0.9.1\\\",\\\"totalDurationMs\\\":4165,\\\"userDurationMs\\\":4078},{\\\"buildpackId\\\":\\\"google.go.functions-framework\\\",\\\"buildpackVersion\\\":\\\"0.9.4\\\",\\\"totalDurationMs\\\":8894,\\\"userDurationMs\\\":8868},{\\\"buildpackId\\\":\\\"google.go.build\\\",\\\"buildpackVersion\\\":\\\"0.9.0\\\",\\\"totalDurationMs\\\":4970,\\\"userDurationMs\\\":4970},{\\\"buildpackId\\\":\\\"google.utils.label\\\",\\\"buildpackVersion\\\":\\\"0.0.2\\\",\\\"totalDurationMs\\\":0,\\\"userDurationMs\\\":0}],\\\"warnings\\\":null,\\\"customImage\\\":false}\"\n        },\n        \"authenticationInfo\": {\n          \"principalEmail\": \"bhargavak@premium-cloud-support.com\"\n        },\n        \"serviceName\": \"cloudfunctions.googleapis.com\",\n        \"methodName\": \"google.cloud.functions.v1.CloudFunctionsService.CreateFunction\",\n        \"resourceName\": \"projects/gcpdiag-gcf2-aaaa/locations/us-central1/functions/allowonly-in-us-central1-a\"\n      },\n      \"insertId\": \"b41r1ecb0c\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"region\": \"us-central1\",\n          \"function_name\": \"allowonly-in-us-central1-a\",\n          \"project_id\": \"gcpdiag-gcf2-aaaa\"\n        }\n      },\n      \"timestamp\": \"2022-07-21T17:17:14.470345Z\",\n      \"severity\": \"ERROR\",\n      \"logName\": \"projects/gcpdiag-gcf2-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operations/Z2NwZGlhZy1nY2YyLWp4cXJsdHBmL3VzLWNlbnRyYWwxL2FsbG93b25seS1pbi11cy1jZW50cmFsMS1hLzVpOXFha0FDUktz\",\n        \"producer\": \"cloudfunctions.googleapis.com\",\n        \"last\": true\n      },\n      \"receiveTimestamp\": \"2022-07-21T17:17:15.095534131Z\"\n    },\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"bhargavak@premium-cloud-support.com\"\n        },\n        \"requestMetadata\": {\n          \"callerIp\": \"49.205.147.106\",\n          \"callerSuppliedUserAgent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36,gzip(gfe),gzip(gfe)\",\n          \"requestAttributes\": {\n            \"time\": \"2022-07-21T17:16:19.256451Z\",\n            \"reason\": \"8uSywAYQGg5Db2xpc2V1bSBGbG93cw\",\n            \"auth\": {}\n          },\n          \"destinationAttributes\": {}\n        },\n        \"serviceName\": \"cloudfunctions.googleapis.com\",\n        \"methodName\": \"google.cloud.functions.v1.CloudFunctionsService.CreateFunction\",\n        \"authorizationInfo\": [\n          {\n            \"resource\": \"projects/gcpdiag-gcf2-aaaa/locations/us-central1/functions/allowonly-in-us-central1-a\",\n            \"permission\": \"cloudfunctions.functions.create\",\n            \"granted\": true,\n            \"resourceAttributes\": {}\n          }\n        ],\n        \"resourceName\": \"projects/gcpdiag-gcf2-aaaa/locations/us-central1/functions/allowonly-in-us-central1-a\",\n        \"request\": {\n          \"function\": {\n            \"serviceAccountEmail\": \"gcpdiag-gcf2-aaaa@appspot.gserviceaccount.com\",\n            \"availableMemoryMb\": 256,\n            \"httpsTrigger\": {\n              \"securityLevel\": \"SECURE_ALWAYS\"\n            },\n            \"entryPoint\": \"HelloWorld\",\n            \"maxInstances\": 3000,\n            \"sourceUploadUrl\": \"https://storage.googleapis.com/uploads-383446567905.us-central1.cloudfunctions.appspot.com/cba7573b-28d4-4725-b26e-ae837e1b6113.zip?GoogleAccessId=service-12340011@gcf-admin-robot.iam.gserviceaccount.com&Expires=1658425577&Signature=W5vW12zk8ydOWxRzrQDZ4wjoBBlZ00lhwyLOplzrYFGcQ4at2RZOwEA9GaDsx%2B3M1Yijd1J75GPwsfIbqNesUYozsOAYbuwP8GLUIVMK0iUrYzc6fVsxKFakh4yw1YhaSaYUjaGMO3tSPj%2BPYojOW%2BgITNIR6MprmuruIQ23z0gb0K1bLgSgqmmHlJeiMUroEXGjdmSbX6hf2Js5f9J839ehDr%2B%2BPp3Krt32fHP%2BtiEfEI123Hxw40CiAXzGY8ZeMd6oO7qW0lk52H2wf%2FrefUlOTBDB3s7SKb%2BTkRskcIAgzjeLfLMiylIfYXsPXymJiCXnd32s%2F3jItYoML9PK%2FQ%3D%3D\",\n            \"dockerRegistry\": \"CONTAINER_REGISTRY\",\n            \"labels\": {\n              \"deployment-tool\": \"console-cloud\"\n            },\n            \"ingressSettings\": \"ALLOW_ALL\",\n            \"timeout\": \"60s\",\n            \"runtime\": \"go116\",\n            \"name\": \"projects/gcpdiag-gcf2-aaaa/locations/us-central1/functions/allowonly-in-us-central1-a\"\n          },\n          \"@type\": \"type.googleapis.com/google.cloud.functions.v1.CreateFunctionRequest\",\n          \"location\": \"projects/gcpdiag-gcf2-aaaa/locations/us-central1\"\n        },\n        \"resourceLocation\": {\n          \"currentLocations\": [\n            \"us-central1\"\n          ]\n        }\n      },\n      \"insertId\": \"w6r5fhd1nmg\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"function_name\": \"allowonly-in-us-central1-a\",\n          \"project_id\": \"gcpdiag-gcf2-aaaa\",\n          \"region\": \"us-central1\"\n        }\n      },\n      \"timestamp\": \"2022-07-21T17:16:18.990548Z\",\n      \"severity\": \"NOTICE\",\n      \"logName\": \"projects/gcpdiag-gcf2-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operations/Z2NwZGlhZy1nY2YyLWp4cXJsdHBmL3VzLWNlbnRyYWwxL2FsbG93b25seS1pbi11cy1jZW50cmFsMS1hLzVpOXFha0FDUktz\",\n        \"producer\": \"cloudfunctions.googleapis.com\",\n        \"first\": true\n      },\n      \"receiveTimestamp\": \"2022-07-21T17:16:19.447401364Z\"\n    },\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"status\": {},\n        \"authenticationInfo\": {\n          \"principalEmail\": \"bhargavak@premium-cloud-support.com\"\n        },\n        \"serviceName\": \"cloudfunctions.googleapis.com\",\n        \"methodName\": \"google.cloud.functions.v1.CloudFunctionsService.GenerateUploadUrl\",\n        \"resourceName\": \"projects/gcpdiag-gcf2-aaaa/locations/us-central1\"\n      },\n      \"insertId\": \"gxhbqrc690\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"project_id\": \"gcpdiag-gcf2-aaaa\",\n          \"region\": \"us-central1\",\n          \"function_name\": \"\"\n        }\n      },\n      \"timestamp\": \"2022-07-21T17:16:17.282217Z\",\n      \"severity\": \"INFO\",\n      \"logName\": \"projects/gcpdiag-gcf2-aaaa/logs/cloudaudit.googleapis.com%2Fdata_access\",\n      \"operation\": {\n        \"id\": \"operations/Z2NwZGlhZy1nY2YyLWp4cXJsdHBmL3VzLWNlbnRyYWwxLy9HY2VqUzhJdDZySQ\",\n        \"producer\": \"cloudfunctions.googleapis.com\",\n        \"last\": true\n      },\n      \"receiveTimestamp\": \"2022-07-21T17:16:18.025883217Z\"\n    },\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"bhargavak@premium-cloud-support.com\"\n        },\n        \"requestMetadata\": {\n          \"callerIp\": \"49.205.147.106\",\n          \"callerSuppliedUserAgent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36,gzip(gfe),gzip(gfe)\",\n          \"requestAttributes\": {\n            \"time\": \"2022-07-21T17:16:17.291274Z\",\n            \"auth\": {}\n          },\n          \"destinationAttributes\": {}\n        },\n        \"serviceName\": \"cloudfunctions.googleapis.com\",\n        \"methodName\": \"google.cloud.functions.v1.CloudFunctionsService.GenerateUploadUrl\",\n        \"authorizationInfo\": [\n          {\n            \"resource\": \"projects/gcpdiag-gcf2-aaaa/locations/us-central1\",\n            \"permission\": \"cloudfunctions.functions.sourceCodeSet\",\n            \"granted\": true,\n            \"resourceAttributes\": {}\n          }\n        ],\n        \"resourceName\": \"projects/gcpdiag-gcf2-aaaa/locations/us-central1\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/google.cloud.functions.v1.GenerateUploadUrlRequest\",\n          \"parent\": \"projects/gcpdiag-gcf2-aaaa/locations/us-central1\"\n        },\n        \"response\": {\n          \"uploadUrl\": \"https://storage.googleapis.com/uploads-383446567905.us-central1.cloudfunctions.appspot.com/cba7573b-28d4-4725-b26e-ae837e1b6113.zip?GoogleAccessId=service-12340011@gcf-admin-robot.iam.gserviceaccount.com&Expires=1658425577&Signature=W5vW12zk8ydOWxRzrQDZ4wjoBBlZ00lhwyLOplzrYFGcQ4at2RZOwEA9GaDsx%2B3M1Yijd1J75GPwsfIbqNesUYozsOAYbuwP8GLUIVMK0iUrYzc6fVsxKFakh4yw1YhaSaYUjaGMO3tSPj%2BPYojOW%2BgITNIR6MprmuruIQ23z0gb0K1bLgSgqmmHlJeiMUroEXGjdmSbX6hf2Js5f9J839ehDr%2B%2BPp3Krt32fHP%2BtiEfEI123Hxw40CiAXzGY8ZeMd6oO7qW0lk52H2wf%2FrefUlOTBDB3s7SKb%2BTkRskcIAgzjeLfLMiylIfYXsPXymJiCXnd32s%2F3jItYoML9PK%2FQ%3D%3D\",\n          \"@type\": \"type.googleapis.com/google.cloud.functions.v1.GenerateUploadUrlResponse\"\n        },\n        \"resourceLocation\": {\n          \"currentLocations\": [\n            \"us-central1\"\n          ]\n        }\n      },\n      \"insertId\": \"1de0dsud1rqe\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"project_id\": \"gcpdiag-gcf2-aaaa\",\n          \"region\": \"us-central1\",\n          \"function_name\": \"\"\n        }\n      },\n      \"timestamp\": \"2022-07-21T17:16:16.864720Z\",\n      \"severity\": \"INFO\",\n      \"logName\": \"projects/gcpdiag-gcf2-aaaa/logs/cloudaudit.googleapis.com%2Fdata_access\",\n      \"receiveTimestamp\": \"2022-07-21T17:16:17.984793385Z\"\n    },\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"status\": {\n          \"code\": 9,\n          \"message\": \"The request has violated one or more Org Policies. Please refer to the respective violations for more information.\"\n        },\n        \"authenticationInfo\": {\n          \"principalEmail\": \"bhargavak@premium-cloud-support.com\"\n        },\n        \"requestMetadata\": {\n          \"callerIp\": \"49.205.147.106\",\n          \"callerSuppliedUserAgent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36,gzip(gfe),gzip(gfe)\",\n          \"requestAttributes\": {\n            \"time\": \"2022-07-21T17:11:35.000649Z\",\n            \"auth\": {}\n          },\n          \"destinationAttributes\": {}\n        },\n        \"serviceName\": \"cloudfunctions.googleapis.com\",\n        \"methodName\": \"google.cloud.functions.v1.CloudFunctionsService.GenerateUploadUrl\",\n        \"authorizationInfo\": [\n          {\n            \"resource\": \"projects/gcpdiag-gcf2-aaaa/locations/europe-west2\",\n            \"permission\": \"cloudfunctions.functions.sourceCodeSet\",\n            \"granted\": true,\n            \"resourceAttributes\": {}\n          }\n        ],\n        \"resourceName\": \"projects/gcpdiag-gcf2-aaaa/locations/europe-west2\",\n        \"request\": {\n          \"parent\": \"projects/gcpdiag-gcf2-aaaa/locations/europe-west2\",\n          \"@type\": \"type.googleapis.com/google.cloud.functions.v1.GenerateUploadUrlRequest\"\n        },\n        \"resourceLocation\": {\n          \"currentLocations\": [\n            \"europe-west2\"\n          ]\n        }\n      },\n      \"insertId\": \"w6r5fhd1nj7\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"function_name\": \"\",\n          \"region\": \"europe-west2\",\n          \"project_id\": \"gcpdiag-gcf2-aaaa\"\n        }\n      },\n      \"timestamp\": \"2022-07-21T17:11:34.989814Z\",\n      \"severity\": \"ERROR\",\n      \"logName\": \"projects/gcpdiag-gcf2-aaaa/logs/cloudaudit.googleapis.com%2Fdata_access\",\n      \"receiveTimestamp\": \"2022-07-21T17:11:35.160987808Z\"\n    },\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"status\": {},\n        \"authenticationInfo\": {\n          \"principalEmail\": \"bhargavak@premium-cloud-support.com\"\n        },\n        \"serviceName\": \"cloudfunctions.googleapis.com\",\n        \"methodName\": \"google.cloud.functions.v1.CloudFunctionsService.GenerateUploadUrl\",\n        \"resourceName\": \"projects/gcpdiag-gcf2-aaaa/locations/us-central1\"\n      },\n      \"insertId\": \"-w68dawcte8\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"project_id\": \"gcpdiag-gcf2-aaaa\",\n          \"function_name\": \"\",\n          \"region\": \"us-central1\"\n        }\n      },\n      \"timestamp\": \"2022-07-21T13:21:47.358208Z\",\n      \"severity\": \"INFO\",\n      \"logName\": \"projects/gcpdiag-gcf2-aaaa/logs/cloudaudit.googleapis.com%2Fdata_access\",\n      \"operation\": {\n        \"id\": \"operations/Z2NwZGlhZy1nY2YyLWp4cXJsdHBmL3VzLWNlbnRyYWwxLy9ESmpRelRUbWdHbw\",\n        \"producer\": \"cloudfunctions.googleapis.com\",\n        \"last\": true\n      },\n      \"receiveTimestamp\": \"2022-07-21T13:21:47.407497014Z\"\n    },\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"bhargavak@premium-cloud-support.com\"\n        },\n        \"requestMetadata\": {\n          \"callerIp\": \"49.205.147.106\",\n          \"callerSuppliedUserAgent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36,gzip(gfe),gzip(gfe)\",\n          \"requestAttributes\": {\n            \"time\": \"2022-07-21T13:21:47.365653Z\",\n            \"auth\": {}\n          },\n          \"destinationAttributes\": {}\n        },\n        \"serviceName\": \"cloudfunctions.googleapis.com\",\n        \"methodName\": \"google.cloud.functions.v1.CloudFunctionsService.GenerateUploadUrl\",\n        \"authorizationInfo\": [\n          {\n            \"resource\": \"projects/gcpdiag-gcf2-aaaa/locations/us-central1\",\n            \"permission\": \"cloudfunctions.functions.sourceCodeSet\",\n            \"granted\": true,\n            \"resourceAttributes\": {}\n          }\n        ],\n        \"resourceName\": \"projects/gcpdiag-gcf2-aaaa/locations/us-central1\",\n        \"request\": {\n          \"parent\": \"projects/gcpdiag-gcf2-aaaa/locations/us-central1\",\n          \"@type\": \"type.googleapis.com/google.cloud.functions.v1.GenerateUploadUrlRequest\"\n        },\n        \"response\": {\n          \"@type\": \"type.googleapis.com/google.cloud.functions.v1.GenerateUploadUrlResponse\",\n          \"uploadUrl\": \"https://storage.googleapis.com/uploads-383446567905.us-central1.cloudfunctions.appspot.com/95478639-a8dd-4c5b-9e05-0c940caf5ab1.zip?GoogleAccessId=service-12340011@gcf-admin-robot.iam.gserviceaccount.com&Expires=1658411507&Signature=fYWodtZcRpzHz3Q8XJk7hEIovNbSzutfVxgQAiG%2F3q%2B4WJtVj2%2Fd1IocBNH4RJ8wt3k3nQtNTXn5OEpVzeyMVhUk9qJtpawtI6tLPjg5inQc8omCJhmU1O2zBdSNU9xx3f53%2BdCrr3H3cJkSr3rkAqWZZNHLmwpmH8zeS17y828cYFPx61jqAd%2FqGiqKlIAk25%2BpU2PqiRAy%2FUFadsgG3%2F%2Bq1q1ZxQaGbpEyDF7oXVM39S6id3Ssu69sdZ4pLctD4iwp9KbJNoyJL9THvhU8LmkniF4I%2BETb5FIwOMW5v4HKzch57JBRzfaDArJBRwE8o78q6%2FAPQRuxc%2F%2BtwurwDQ%3D%3D\"\n        },\n        \"resourceLocation\": {\n          \"currentLocations\": [\n            \"us-central1\"\n          ]\n        }\n      },\n      \"insertId\": \"95nyuud1nfi\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"region\": \"us-central1\",\n          \"project_id\": \"gcpdiag-gcf2-aaaa\",\n          \"function_name\": \"\"\n        }\n      },\n      \"timestamp\": \"2022-07-21T13:21:46.896558Z\",\n      \"severity\": \"INFO\",\n      \"logName\": \"projects/gcpdiag-gcf2-aaaa/logs/cloudaudit.googleapis.com%2Fdata_access\",\n      \"receiveTimestamp\": \"2022-07-21T13:21:48.347735141Z\"\n    },\n    {\n      \"textPayload\": \"Function execution took 1415 ms. Finished with status code: 200\",\n      \"insertId\": \"z8lpz0f7bq381\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"function_name\": \"gcf2\",\n          \"region\": \"europe-west2\",\n          \"project_id\": \"gcpdiag-gcf2-aaaa\"\n        }\n      },\n      \"timestamp\": \"2022-07-20T18:20:25.578050904Z\",\n      \"severity\": \"DEBUG\",\n      \"labels\": {\n        \"execution_id\": \"krdv6djejwxt\"\n      },\n      \"logName\": \"projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions\",\n      \"trace\": \"projects/gcpdiag-gcf2-aaaa/traces/8ff9dae4374a45deb44c3f23a6fdb70d\",\n      \"receiveTimestamp\": \"2022-07-20T18:20:25.744677341Z\"\n    },\n    {\n      \"textPayload\": \"Function execution started\",\n      \"insertId\": \"sawsk3g5meacu8\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"region\": \"europe-west2\",\n          \"function_name\": \"gcf2\",\n          \"project_id\": \"gcpdiag-gcf2-aaaa\"\n        }\n      },\n      \"timestamp\": \"2022-07-20T18:20:24.162214011Z\",\n      \"severity\": \"DEBUG\",\n      \"labels\": {\n        \"execution_id\": \"krdv6djejwxt\"\n      },\n      \"logName\": \"projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions\",\n      \"trace\": \"projects/gcpdiag-gcf2-aaaa/traces/8ff9dae4374a45deb44c3f23a6fdb70d\",\n      \"receiveTimestamp\": \"2022-07-20T18:20:24.417927578Z\"\n    },\n    {\n      \"textPayload\": \"Function execution took 1377 ms. Finished with status code: 200\",\n      \"insertId\": \"116shewf4jvdpu\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"function_name\": \"gcf2\",\n          \"region\": \"europe-west2\",\n          \"project_id\": \"gcpdiag-gcf2-aaaa\"\n        }\n      },\n      \"timestamp\": \"2022-07-20T18:20:21.277142476Z\",\n      \"severity\": \"DEBUG\",\n      \"labels\": {\n        \"execution_id\": \"66diijbieyj2\"\n      },\n      \"logName\": \"projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions\",\n      \"trace\": \"projects/gcpdiag-gcf2-aaaa/traces/d5fa400def3a65c6ccb3c47fcccf469e\",\n      \"receiveTimestamp\": \"2022-07-20T18:20:21.415705819Z\"\n    },\n    {\n      \"textPayload\": \"Function execution started\",\n      \"insertId\": \"oozzpqf7a41ja\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"project_id\": \"gcpdiag-gcf2-aaaa\",\n          \"region\": \"europe-west2\",\n          \"function_name\": \"gcf2\"\n        }\n      },\n      \"timestamp\": \"2022-07-20T18:20:19.899637231Z\",\n      \"severity\": \"DEBUG\",\n      \"labels\": {\n        \"execution_id\": \"66diijbieyj2\"\n      },\n      \"logName\": \"projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions\",\n      \"trace\": \"projects/gcpdiag-gcf2-aaaa/traces/d5fa400def3a65c6ccb3c47fcccf469e\",\n      \"receiveTimestamp\": \"2022-07-20T18:20:20.089175643Z\"\n    },\n    {\n      \"textPayload\": \"Function execution took 1175 ms. Finished with status code: 0\",\n      \"insertId\": \"1h0dp5rg2n31du4\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"project_id\": \"gcpdiag-gcf2-aaaa\",\n          \"function_name\": \"gcf2\",\n          \"region\": \"europe-west2\"\n        }\n      },\n      \"timestamp\": \"2022-07-20T18:20:18.449244401Z\",\n      \"severity\": \"DEBUG\",\n      \"labels\": {\n        \"execution_id\": \"w1miim9k6foq\"\n      },\n      \"logName\": \"projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions\",\n      \"trace\": \"projects/gcpdiag-gcf2-aaaa/traces/fec5d7e033f594aaa61661a9988d6851\",\n      \"receiveTimestamp\": \"2022-07-20T18:20:18.755143658Z\"\n    },\n    {\n      \"textPayload\": \"Function invocation was interrupted. Error: memory limit exceeded.\\n\",\n      \"insertId\": \"000000-07bcaa17-d313-40c4-9951-37c5a1988854\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"function_name\": \"gcf2\",\n          \"project_id\": \"gcpdiag-gcf2-aaaa\",\n          \"region\": \"europe-west2\"\n        }\n      },\n      \"timestamp\": \"2022-07-20T18:20:18.300702796Z\",\n      \"severity\": \"ERROR\",\n      \"labels\": {\n        \"execution_id\": \"w1miim9k6foq\"\n      },\n      \"logName\": \"projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions\",\n      \"trace\": \"projects/gcpdiag-gcf2-aaaa/traces/fec5d7e033f594aaa61661a9988d6851\",\n      \"receiveTimestamp\": \"2022-07-20T18:20:18.852346744Z\"\n    },\n    {\n      \"textPayload\": \"Function execution started\",\n      \"insertId\": \"rqxea8f4lyuyu\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"function_name\": \"gcf2\",\n          \"region\": \"europe-west2\",\n          \"project_id\": \"gcpdiag-gcf2-aaaa\"\n        }\n      },\n      \"timestamp\": \"2022-07-20T18:20:17.273833101Z\",\n      \"severity\": \"DEBUG\",\n      \"labels\": {\n        \"execution_id\": \"w1miim9k6foq\"\n      },\n      \"logName\": \"projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions\",\n      \"trace\": \"projects/gcpdiag-gcf2-aaaa/traces/fec5d7e033f594aaa61661a9988d6851\",\n      \"receiveTimestamp\": \"2022-07-20T18:20:17.419230687Z\"\n    },\n    {\n      \"textPayload\": \"Function execution took 1272 ms. Finished with status code: 200\",\n      \"insertId\": \"wh1ftkf6ck6xv\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"region\": \"europe-west2\",\n          \"project_id\": \"gcpdiag-gcf2-aaaa\",\n          \"function_name\": \"gcf2\"\n        }\n      },\n      \"timestamp\": \"2022-07-20T18:20:15.776647459Z\",\n      \"severity\": \"DEBUG\",\n      \"labels\": {\n        \"execution_id\": \"w1miflp8bwu9\"\n      },\n      \"logName\": \"projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions\",\n      \"trace\": \"projects/gcpdiag-gcf2-aaaa/traces/2f4ba9d1f94ceab78eea675fe8d7b5b8\",\n      \"receiveTimestamp\": \"2022-07-20T18:20:16.087264605Z\"\n    },\n    {\n      \"textPayload\": \"Function execution started\",\n      \"insertId\": \"tpagglf78r0dt\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"function_name\": \"gcf2\",\n          \"region\": \"europe-west2\",\n          \"project_id\": \"gcpdiag-gcf2-aaaa\"\n        }\n      },\n      \"timestamp\": \"2022-07-20T18:20:14.503763739Z\",\n      \"severity\": \"DEBUG\",\n      \"labels\": {\n        \"execution_id\": \"w1miflp8bwu9\"\n      },\n      \"logName\": \"projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions\",\n      \"trace\": \"projects/gcpdiag-gcf2-aaaa/traces/2f4ba9d1f94ceab78eea675fe8d7b5b8\",\n      \"receiveTimestamp\": \"2022-07-20T18:20:14.757665589Z\"\n    },\n    {\n      \"textPayload\": \"Function execution took 1226 ms. Finished with status code: 200\",\n      \"insertId\": \"1gfy8bkf71mu05\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"region\": \"europe-west2\",\n          \"function_name\": \"gcf2\",\n          \"project_id\": \"gcpdiag-gcf2-aaaa\"\n        }\n      },\n      \"timestamp\": \"2022-07-20T18:20:11.584766828Z\",\n      \"severity\": \"DEBUG\",\n      \"labels\": {\n        \"execution_id\": \"w1mipq5hivgo\"\n      },\n      \"logName\": \"projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions\",\n      \"trace\": \"projects/gcpdiag-gcf2-aaaa/traces/1966c4876e567294c1b8a4626eb8ab33\",\n      \"receiveTimestamp\": \"2022-07-20T18:20:11.763874940Z\"\n    },\n    {\n      \"textPayload\": \"Function execution started\",\n      \"insertId\": \"epgffuf3vg2jr\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"function_name\": \"gcf2\",\n          \"region\": \"europe-west2\",\n          \"project_id\": \"gcpdiag-gcf2-aaaa\"\n        }\n      },\n      \"timestamp\": \"2022-07-20T18:20:10.358704487Z\",\n      \"severity\": \"DEBUG\",\n      \"labels\": {\n        \"execution_id\": \"w1mipq5hivgo\"\n      },\n      \"logName\": \"projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions\",\n      \"trace\": \"projects/gcpdiag-gcf2-aaaa/traces/1966c4876e567294c1b8a4626eb8ab33\",\n      \"receiveTimestamp\": \"2022-07-20T18:20:10.430819346Z\"\n    },\n    {\n      \"textPayload\": \"Function execution took 1169 ms. Finished with status code: 200\",\n      \"insertId\": \"1e0tytfakykr7\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"project_id\": \"gcpdiag-gcf2-aaaa\",\n          \"region\": \"europe-west2\",\n          \"function_name\": \"gcf2\"\n        }\n      },\n      \"timestamp\": \"2022-07-20T18:20:07.477682925Z\",\n      \"severity\": \"DEBUG\",\n      \"labels\": {\n        \"execution_id\": \"4f3v5fkax3m7\"\n      },\n      \"logName\": \"projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions\",\n      \"trace\": \"projects/gcpdiag-gcf2-aaaa/traces/3ff36e586498d95e0a16a657bdda2ec0\",\n      \"receiveTimestamp\": \"2022-07-20T18:20:07.765147532Z\"\n    },\n    {\n      \"textPayload\": \"Function invocation was interrupted. Error: memory limit exceeded.\\n\",\n      \"insertId\": \"000000-a36085e8-1633-4bab-bb63-915008c1d17d\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"project_id\": \"gcpdiag-gcf2-aaaa\",\n          \"region\": \"europe-west2\",\n          \"function_name\": \"gcf2\"\n        }\n      },\n      \"timestamp\": \"2022-07-20T18:20:07.324737342Z\",\n      \"severity\": \"ERROR\",\n      \"labels\": {\n        \"execution_id\": \"4f3v5fkax3m7\"\n      },\n      \"logName\": \"projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions\",\n      \"trace\": \"projects/gcpdiag-gcf2-aaaa/traces/3ff36e586498d95e0a16a657bdda2ec0\",\n      \"receiveTimestamp\": \"2022-07-20T18:20:07.755100133Z\"\n    },\n    {\n      \"textPayload\": \"Function execution started\",\n      \"insertId\": \"11qhhlvf7cfgah\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"region\": \"europe-west2\",\n          \"project_id\": \"gcpdiag-gcf2-aaaa\",\n          \"function_name\": \"gcf2\"\n        }\n      },\n      \"timestamp\": \"2022-07-20T18:20:06.308348120Z\",\n      \"severity\": \"DEBUG\",\n      \"labels\": {\n        \"execution_id\": \"4f3v5fkax3m7\"\n      },\n      \"logName\": \"projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions\",\n      \"trace\": \"projects/gcpdiag-gcf2-aaaa/traces/3ff36e586498d95e0a16a657bdda2ec0\",\n      \"receiveTimestamp\": \"2022-07-20T18:20:06.434035185Z\"\n    },\n    {\n      \"textPayload\": \"Function execution took 1282 ms. Finished with status code: 200\",\n      \"insertId\": \"8c1k6af9k7cdc\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"region\": \"europe-west2\",\n          \"project_id\": \"gcpdiag-gcf2-aaaa\",\n          \"function_name\": \"gcf2\"\n        }\n      },\n      \"timestamp\": \"2022-07-20T18:20:03.488632332Z\",\n      \"severity\": \"DEBUG\",\n      \"labels\": {\n        \"execution_id\": \"4f3vrmvx02b9\"\n      },\n      \"logName\": \"projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions\",\n      \"trace\": \"projects/gcpdiag-gcf2-aaaa/traces/cf1a648a6beb4d48c78115c200bdb0ac\",\n      \"receiveTimestamp\": \"2022-07-20T18:20:03.765508514Z\"\n    },\n    {\n      \"textPayload\": \"Function execution started\",\n      \"insertId\": \"1m9vw7sf70vjud\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"function_name\": \"gcf2\",\n          \"region\": \"europe-west2\",\n          \"project_id\": \"gcpdiag-gcf2-aaaa\"\n        }\n      },\n      \"timestamp\": \"2022-07-20T18:20:02.206413830Z\",\n      \"severity\": \"DEBUG\",\n      \"labels\": {\n        \"execution_id\": \"4f3vrmvx02b9\"\n      },\n      \"logName\": \"projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions\",\n      \"trace\": \"projects/gcpdiag-gcf2-aaaa/traces/cf1a648a6beb4d48c78115c200bdb0ac\",\n      \"receiveTimestamp\": \"2022-07-20T18:20:02.437970675Z\"\n    },\n    {\n      \"textPayload\": \"Function execution took 1397 ms. Finished with status code: 200\",\n      \"insertId\": \"o53e67g6jhhf2v\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"function_name\": \"gcf2\",\n          \"region\": \"europe-west2\",\n          \"project_id\": \"gcpdiag-gcf2-aaaa\"\n        }\n      },\n      \"timestamp\": \"2022-07-20T18:19:59.343249386Z\",\n      \"severity\": \"DEBUG\",\n      \"labels\": {\n        \"execution_id\": \"7hbhc0cczrml\"\n      },\n      \"logName\": \"projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions\",\n      \"trace\": \"projects/gcpdiag-gcf2-aaaa/traces/02d76e87bdf4396bd7eebee4e5440527\",\n      \"receiveTimestamp\": \"2022-07-20T18:19:59.441086222Z\"\n    },\n    {\n      \"textPayload\": \"Function invocation was interrupted. Error: memory limit exceeded.\\n\",\n      \"insertId\": \"000000-14962ee8-265a-48e4-ab5c-2f7dcfa6a172\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"function_name\": \"gcf2\",\n          \"project_id\": \"gcpdiag-gcf2-aaaa\",\n          \"region\": \"europe-west2\"\n        }\n      },\n      \"timestamp\": \"2022-07-20T18:19:59.093176777Z\",\n      \"severity\": \"ERROR\",\n      \"labels\": {\n        \"execution_id\": \"7hbhc0cczrml\"\n      },\n      \"logName\": \"projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions\",\n      \"trace\": \"projects/gcpdiag-gcf2-aaaa/traces/02d76e87bdf4396bd7eebee4e5440527\",\n      \"receiveTimestamp\": \"2022-07-20T18:20:00.383040936Z\"\n    },\n    {\n      \"textPayload\": \"Function execution started\",\n      \"insertId\": \"7i67elg2lcinwd\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"region\": \"europe-west2\",\n          \"project_id\": \"gcpdiag-gcf2-aaaa\",\n          \"function_name\": \"gcf2\"\n        }\n      },\n      \"timestamp\": \"2022-07-20T18:19:57.945675506Z\",\n      \"severity\": \"DEBUG\",\n      \"labels\": {\n        \"execution_id\": \"7hbhc0cczrml\"\n      },\n      \"logName\": \"projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions\",\n      \"trace\": \"projects/gcpdiag-gcf2-aaaa/traces/02d76e87bdf4396bd7eebee4e5440527\",\n      \"receiveTimestamp\": \"2022-07-20T18:19:58.108924897Z\"\n    },\n    {\n      \"textPayload\": \"Function execution took 1247 ms. Finished with status code: 0\",\n      \"insertId\": \"vmql3lf68tp39\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"function_name\": \"gcf2\",\n          \"region\": \"europe-west2\",\n          \"project_id\": \"gcpdiag-gcf2-aaaa\"\n        }\n      },\n      \"timestamp\": \"2022-07-20T18:19:55.055388756Z\",\n      \"severity\": \"DEBUG\",\n      \"labels\": {\n        \"execution_id\": \"w5laaqtgif43\"\n      },\n      \"logName\": \"projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions\",\n      \"trace\": \"projects/gcpdiag-gcf2-aaaa/traces/4321ed0bd46a2ad4e0c1c0607b22173c\",\n      \"receiveTimestamp\": \"2022-07-20T18:19:55.113151260Z\"\n    },\n    {\n      \"textPayload\": \"Function invocation was interrupted. Error: memory limit exceeded.\\n\",\n      \"insertId\": \"000000-8aea88f4-6908-4b19-b613-d0c2731da5f1\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"function_name\": \"gcf2\",\n          \"region\": \"europe-west2\",\n          \"project_id\": \"gcpdiag-gcf2-aaaa\"\n        }\n      },\n      \"timestamp\": \"2022-07-20T18:19:54.901914686Z\",\n      \"severity\": \"ERROR\",\n      \"labels\": {\n        \"execution_id\": \"w5laaqtgif43\"\n      },\n      \"logName\": \"projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions\",\n      \"trace\": \"projects/gcpdiag-gcf2-aaaa/traces/4321ed0bd46a2ad4e0c1c0607b22173c\",\n      \"receiveTimestamp\": \"2022-07-20T18:19:55.245243907Z\"\n    },\n    {\n      \"textPayload\": \"Function execution started\",\n      \"insertId\": \"17acllif75q1ew\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"project_id\": \"gcpdiag-gcf2-aaaa\",\n          \"function_name\": \"gcf2\",\n          \"region\": \"europe-west2\"\n        }\n      },\n      \"timestamp\": \"2022-07-20T18:19:53.807762995Z\",\n      \"severity\": \"DEBUG\",\n      \"labels\": {\n        \"execution_id\": \"w5laaqtgif43\"\n      },\n      \"logName\": \"projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions\",\n      \"trace\": \"projects/gcpdiag-gcf2-aaaa/traces/4321ed0bd46a2ad4e0c1c0607b22173c\",\n      \"receiveTimestamp\": \"2022-07-20T18:19:54.112667356Z\"\n    },\n    {\n      \"textPayload\": \"Function execution took 1242 ms. Finished with status code: 200\",\n      \"insertId\": \"1w9a5jxg3mii5tr\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"project_id\": \"gcpdiag-gcf2-aaaa\",\n          \"region\": \"europe-west2\",\n          \"function_name\": \"gcf2\"\n        }\n      },\n      \"timestamp\": \"2022-07-20T18:19:50.977777843Z\",\n      \"severity\": \"DEBUG\",\n      \"labels\": {\n        \"execution_id\": \"w5layj8e3mal\"\n      },\n      \"logName\": \"projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions\",\n      \"trace\": \"projects/gcpdiag-gcf2-aaaa/traces/e11cb896f1d3fa0519c080ad20243f51\",\n      \"receiveTimestamp\": \"2022-07-20T18:19:51.115721293Z\"\n    },\n    {\n      \"textPayload\": \"Function execution started\",\n      \"insertId\": \"1xxfskqf4d1kwr\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"function_name\": \"gcf2\",\n          \"region\": \"europe-west2\",\n          \"project_id\": \"gcpdiag-gcf2-aaaa\"\n        }\n      },\n      \"timestamp\": \"2022-07-20T18:19:49.735046429Z\",\n      \"severity\": \"DEBUG\",\n      \"labels\": {\n        \"execution_id\": \"w5layj8e3mal\"\n      },\n      \"logName\": \"projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions\",\n      \"trace\": \"projects/gcpdiag-gcf2-aaaa/traces/e11cb896f1d3fa0519c080ad20243f51\",\n      \"receiveTimestamp\": \"2022-07-20T18:19:49.778952566Z\"\n    },\n    {\n      \"textPayload\": \"Function execution took 1238 ms. Finished with status code: 0\",\n      \"insertId\": \"z8lpz0f7blrll\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"project_id\": \"gcpdiag-gcf2-aaaa\",\n          \"function_name\": \"gcf2\",\n          \"region\": \"europe-west2\"\n        }\n      },\n      \"timestamp\": \"2022-07-20T18:19:46.865175781Z\",\n      \"severity\": \"DEBUG\",\n      \"labels\": {\n        \"execution_id\": \"qnwb7a3a2b3g\"\n      },\n      \"logName\": \"projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions\",\n      \"trace\": \"projects/gcpdiag-gcf2-aaaa/traces/be1dbfb8cb3b437feb2002c769733873\",\n      \"receiveTimestamp\": \"2022-07-20T18:19:47.121158763Z\"\n    },\n    {\n      \"textPayload\": \"Function invocation was interrupted. Error: memory limit exceeded.\\n\",\n      \"insertId\": \"000000-0a51268d-d283-45b8-9ed9-099adadcdcf2\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"region\": \"europe-west2\",\n          \"function_name\": \"gcf2\",\n          \"project_id\": \"gcpdiag-gcf2-aaaa\"\n        }\n      },\n      \"timestamp\": \"2022-07-20T18:19:46.707346197Z\",\n      \"severity\": \"ERROR\",\n      \"labels\": {\n        \"execution_id\": \"qnwb7a3a2b3g\"\n      },\n      \"logName\": \"projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions\",\n      \"trace\": \"projects/gcpdiag-gcf2-aaaa/traces/be1dbfb8cb3b437feb2002c769733873\",\n      \"receiveTimestamp\": \"2022-07-20T18:19:47.082722874Z\"\n    },\n    {\n      \"textPayload\": \"Function execution started\",\n      \"insertId\": \"116shewf4jquuy\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"region\": \"europe-west2\",\n          \"project_id\": \"gcpdiag-gcf2-aaaa\",\n          \"function_name\": \"gcf2\"\n        }\n      },\n      \"timestamp\": \"2022-07-20T18:19:45.626333412Z\",\n      \"severity\": \"DEBUG\",\n      \"labels\": {\n        \"execution_id\": \"qnwb7a3a2b3g\"\n      },\n      \"logName\": \"projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions\",\n      \"trace\": \"projects/gcpdiag-gcf2-aaaa/traces/be1dbfb8cb3b437feb2002c769733873\",\n      \"receiveTimestamp\": \"2022-07-20T18:19:45.788225044Z\"\n    },\n    {\n      \"textPayload\": \"Function execution took 1052 ms. Finished with status code: 200\",\n      \"insertId\": \"1m029y5f74gl2k\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"project_id\": \"gcpdiag-gcf2-aaaa\",\n          \"region\": \"europe-west2\",\n          \"function_name\": \"gcf2\"\n        }\n      },\n      \"timestamp\": \"2022-07-20T18:19:42.583104354Z\",\n      \"severity\": \"DEBUG\",\n      \"labels\": {\n        \"execution_id\": \"qnwb2cjyfffx\"\n      },\n      \"logName\": \"projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions\",\n      \"trace\": \"projects/gcpdiag-gcf2-aaaa/traces/81926f0ca073e05a83d1ff1292a792bb\",\n      \"receiveTimestamp\": \"2022-07-20T18:19:42.791945488Z\"\n    },\n    {\n      \"textPayload\": \"Function execution started\",\n      \"insertId\": \"lnc8b0g1571bet\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"region\": \"europe-west2\",\n          \"project_id\": \"gcpdiag-gcf2-aaaa\",\n          \"function_name\": \"gcf2\"\n        }\n      },\n      \"timestamp\": \"2022-07-20T18:19:41.530504553Z\",\n      \"severity\": \"DEBUG\",\n      \"labels\": {\n        \"execution_id\": \"qnwb2cjyfffx\"\n      },\n      \"logName\": \"projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions\",\n      \"trace\": \"projects/gcpdiag-gcf2-aaaa/traces/81926f0ca073e05a83d1ff1292a792bb\",\n      \"receiveTimestamp\": \"2022-07-20T18:19:41.789709003Z\"\n    },\n    {\n      \"textPayload\": \"Function execution took 1261 ms. Finished with status code: 200\",\n      \"insertId\": \"rqxea8f4luu5f\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"region\": \"europe-west2\",\n          \"project_id\": \"gcpdiag-gcf2-aaaa\",\n          \"function_name\": \"gcf2\"\n        }\n      },\n      \"timestamp\": \"2022-07-20T18:19:40.077596453Z\",\n      \"severity\": \"DEBUG\",\n      \"labels\": {\n        \"execution_id\": \"qnwb20qmimhy\"\n      },\n      \"logName\": \"projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions\",\n      \"trace\": \"projects/gcpdiag-gcf2-aaaa/traces/8a0200e844530c261811b376a210238d\",\n      \"receiveTimestamp\": \"2022-07-20T18:19:40.124975595Z\"\n    },\n    {\n      \"textPayload\": \"Function execution started\",\n      \"insertId\": \"wh1ftkf6cfkml\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"region\": \"europe-west2\",\n          \"project_id\": \"gcpdiag-gcf2-aaaa\",\n          \"function_name\": \"gcf2\"\n        }\n      },\n      \"timestamp\": \"2022-07-20T18:19:38.816066542Z\",\n      \"severity\": \"DEBUG\",\n      \"labels\": {\n        \"execution_id\": \"qnwb20qmimhy\"\n      },\n      \"logName\": \"projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions\",\n      \"trace\": \"projects/gcpdiag-gcf2-aaaa/traces/8a0200e844530c261811b376a210238d\",\n      \"receiveTimestamp\": \"2022-07-20T18:19:39.123198288Z\"\n    },\n    {\n      \"textPayload\": \"Function execution took 1240 ms. Finished with status code: 200\",\n      \"insertId\": \"zir5ljf6c484o\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"region\": \"europe-west2\",\n          \"function_name\": \"gcf2\",\n          \"project_id\": \"gcpdiag-gcf2-aaaa\"\n        }\n      },\n      \"timestamp\": \"2022-07-20T18:19:35.978719689Z\",\n      \"severity\": \"DEBUG\",\n      \"labels\": {\n        \"execution_id\": \"qnwb7rjjyh0h\"\n      },\n      \"logName\": \"projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions\",\n      \"trace\": \"projects/gcpdiag-gcf2-aaaa/traces/e72c649c184ae23e188c2b5beb054128\",\n      \"receiveTimestamp\": \"2022-07-20T18:19:36.128124231Z\"\n    },\n    {\n      \"textPayload\": \"Function execution started\",\n      \"insertId\": \"7rpxcwg5vf2o5o\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"project_id\": \"gcpdiag-gcf2-aaaa\",\n          \"region\": \"europe-west2\",\n          \"function_name\": \"gcf2\"\n        }\n      },\n      \"timestamp\": \"2022-07-20T18:19:34.737885850Z\",\n      \"severity\": \"DEBUG\",\n      \"labels\": {\n        \"execution_id\": \"qnwb7rjjyh0h\"\n      },\n      \"logName\": \"projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions\",\n      \"trace\": \"projects/gcpdiag-gcf2-aaaa/traces/e72c649c184ae23e188c2b5beb054128\",\n      \"receiveTimestamp\": \"2022-07-20T18:19:34.798657118Z\"\n    },\n    {\n      \"textPayload\": \"Function execution took 1313 ms. Finished with status code: 200\",\n      \"insertId\": \"1ubsmarg2jf2jo7\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"region\": \"europe-west2\",\n          \"function_name\": \"gcf2\",\n          \"project_id\": \"gcpdiag-gcf2-aaaa\"\n        }\n      },\n      \"timestamp\": \"2022-07-20T18:19:33.269623420Z\",\n      \"severity\": \"DEBUG\",\n      \"labels\": {\n        \"execution_id\": \"po6i149qvm9r\"\n      },\n      \"logName\": \"projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions\",\n      \"trace\": \"projects/gcpdiag-gcf2-aaaa/traces/a33d3e03a7cf75afa4c02789864df3d6\",\n      \"receiveTimestamp\": \"2022-07-20T18:19:33.466340500Z\"\n    },\n    {\n      \"textPayload\": \"Function invocation was interrupted. Error: memory limit exceeded.\\n\",\n      \"insertId\": \"000000-1662203b-a967-41bc-9e39-3f6857c08d58\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"project_id\": \"gcpdiag-gcf2-aaaa\",\n          \"region\": \"europe-west2\",\n          \"function_name\": \"gcf2\"\n        }\n      },\n      \"timestamp\": \"2022-07-20T18:19:33.110231276Z\",\n      \"severity\": \"ERROR\",\n      \"labels\": {\n        \"execution_id\": \"po6i149qvm9r\"\n      },\n      \"logName\": \"projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions\",\n      \"trace\": \"projects/gcpdiag-gcf2-aaaa/traces/a33d3e03a7cf75afa4c02789864df3d6\",\n      \"receiveTimestamp\": \"2022-07-20T18:19:34.300203484Z\"\n    },\n    {\n      \"textPayload\": \"Function execution started\",\n      \"insertId\": \"tp7p41f5xunfb\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"project_id\": \"gcpdiag-gcf2-aaaa\",\n          \"region\": \"europe-west2\",\n          \"function_name\": \"gcf2\"\n        }\n      },\n      \"timestamp\": \"2022-07-20T18:19:31.955934062Z\",\n      \"severity\": \"DEBUG\",\n      \"labels\": {\n        \"execution_id\": \"po6i149qvm9r\"\n      },\n      \"logName\": \"projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions\",\n      \"trace\": \"projects/gcpdiag-gcf2-aaaa/traces/a33d3e03a7cf75afa4c02789864df3d6\",\n      \"receiveTimestamp\": \"2022-07-20T18:19:32.133475267Z\"\n    },\n    {\n      \"textPayload\": \"Function execution took 1013 ms. Finished with status code: 200\",\n      \"insertId\": \"8c1k6af9k46lg\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"project_id\": \"gcpdiag-gcf2-aaaa\",\n          \"region\": \"europe-west2\",\n          \"function_name\": \"gcf2\"\n        }\n      },\n      \"timestamp\": \"2022-07-20T18:19:30.476142859Z\",\n      \"severity\": \"DEBUG\",\n      \"labels\": {\n        \"execution_id\": \"po6iap8z4mvg\"\n      },\n      \"logName\": \"projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions\",\n      \"trace\": \"projects/gcpdiag-gcf2-aaaa/traces/784135fd7ca775bdc61f449c82d167a4\",\n      \"receiveTimestamp\": \"2022-07-20T18:19:30.802974183Z\"\n    },\n    {\n      \"textPayload\": \"Function execution started\",\n      \"insertId\": \"s1fb6ng1y1i3sk\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"region\": \"europe-west2\",\n          \"project_id\": \"gcpdiag-gcf2-aaaa\",\n          \"function_name\": \"gcf2\"\n        }\n      },\n      \"timestamp\": \"2022-07-20T18:19:29.463068362Z\",\n      \"severity\": \"DEBUG\",\n      \"labels\": {\n        \"execution_id\": \"po6iap8z4mvg\"\n      },\n      \"logName\": \"projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions\",\n      \"trace\": \"projects/gcpdiag-gcf2-aaaa/traces/784135fd7ca775bdc61f449c82d167a4\",\n      \"receiveTimestamp\": \"2022-07-20T18:19:29.466212860Z\"\n    },\n    {\n      \"textPayload\": \"Function execution took 1134 ms. Finished with status code: 200\",\n      \"insertId\": \"wqv9z4f6c461k\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"function_name\": \"gcf2\",\n          \"project_id\": \"gcpdiag-gcf2-aaaa\",\n          \"region\": \"europe-west2\"\n        }\n      },\n      \"timestamp\": \"2022-07-20T18:19:26.588031047Z\",\n      \"severity\": \"DEBUG\",\n      \"labels\": {\n        \"execution_id\": \"po6ichifbwiy\"\n      },\n      \"logName\": \"projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions\",\n      \"trace\": \"projects/gcpdiag-gcf2-aaaa/traces/b9ff41787778e002730306a68fe78c4a\",\n      \"receiveTimestamp\": \"2022-07-20T18:19:26.803772189Z\"\n    },\n    {\n      \"textPayload\": \"Function execution started\",\n      \"insertId\": \"z8rrk5f6bnrhp\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"function_name\": \"gcf2\",\n          \"project_id\": \"gcpdiag-gcf2-aaaa\",\n          \"region\": \"europe-west2\"\n        }\n      },\n      \"timestamp\": \"2022-07-20T18:19:25.453856824Z\",\n      \"severity\": \"DEBUG\",\n      \"labels\": {\n        \"execution_id\": \"po6ichifbwiy\"\n      },\n      \"logName\": \"projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions\",\n      \"trace\": \"projects/gcpdiag-gcf2-aaaa/traces/b9ff41787778e002730306a68fe78c4a\",\n      \"receiveTimestamp\": \"2022-07-20T18:19:25.474413268Z\"\n    },\n    {\n      \"textPayload\": \"Function execution took 1105 ms. Finished with status code: 200\",\n      \"insertId\": \"9zu6iyf91bfnk\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"region\": \"europe-west2\",\n          \"function_name\": \"gcf2\",\n          \"project_id\": \"gcpdiag-gcf2-aaaa\"\n        }\n      },\n      \"timestamp\": \"2022-07-20T18:19:23.989689274Z\",\n      \"severity\": \"DEBUG\",\n      \"labels\": {\n        \"execution_id\": \"po6iey4isns4\"\n      },\n      \"logName\": \"projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions\",\n      \"trace\": \"projects/gcpdiag-gcf2-aaaa/traces/0788de9e2bbe7e6f5546e68439d84a5f\",\n      \"receiveTimestamp\": \"2022-07-20T18:19:24.138510260Z\"\n    },\n    {\n      \"textPayload\": \"Function execution started\",\n      \"insertId\": \"1qg1fq3f4o2527\",\n      \"resource\": {\n        \"type\": \"cloud_function\",\n        \"labels\": {\n          \"project_id\": \"gcpdiag-gcf2-aaaa\",\n          \"region\": \"europe-west2\",\n          \"function_name\": \"gcf2\"\n        }\n      },\n      \"timestamp\": \"2022-07-20T18:19:22.884269309Z\",\n      \"severity\": \"DEBUG\",\n      \"labels\": {\n        \"execution_id\": \"po6iey4isns4\"\n      },\n      \"logName\": \"projects/gcpdiag-gcf2-aaaa/logs/cloudfunctions.googleapis.com%2Fcloud-functions\",\n      \"trace\": \"projects/gcpdiag-gcf2-aaaa/traces/0788de9e2bbe7e6f5546e68439d84a5f\",\n      \"receiveTimestamp\": \"2022-07-20T18:19:23.144910967Z\"\n    }\n  ],\n  \"nextPageToken\": \"EAE4vaP9oda7wJFTSswFIiAiEAoOMXFnMWZxM2Y0bzI1MjcqDAiqjuGWBhD9wdOlA0qnBQqBBUr-BADQLyAGQzUQD9BZrZ2IU7SShpruXcL7PXlrH7GGisGPOB_HVImeSgI9TwQh37IyqyOJAW-UHmZ7ko_6aVY7ZRHe_uu36aCKn3byz8k96gAZdthBmE_Ntn9FQidzx8jQs-hVWEwqIZKBbcQfZ5Yya-xCXI0KllUX0Ipof6OA9Jv21vbK8K2JfNpQcmARLLcAjfOFCXwcyF4BYtFs8xt6yTM6oK9RE5j2Q9Xvs6rsQE-M2WWHOFsPc1tqt4agsCkbbYob8pmNhV349TGHjq3opk1RYvDD_FCMbwDtEc7S60nyJTiQ3YGGied5VoRRq1dSss-eyzk6DH6f_K04B39O9q-2FosItdgQI2eYRWrGz8fRTW-2ctbl_VECVH9AdAV-0zew7V0bSYGuUX132QJouud8LA-1X_-BXhWtFB_YThELHqOhk-nSBnd2MJn9S0wewGJKs2EQkJFsyR_UF8ykLe7TqtqlMp0Ac6XFySy5NS_hz7Sy71dF3bzf2xWjLtO7r0EAA7RRrl0MxQY_ylOq1USHAJK1Nd6wcgaYzDBPBrZNV0sDUR7xLwMNfLgxlyfU8YHfSajj7TwuFuHSBzsCxWuXl_kL0onN58nWyz8oVfKbBLZ0V8BIdojrvVubg94KUXNZ4jeWtMRpRazcTKGGdj90tUI9DxEIqkxOOOZuG_EK9AzqW6B_VjaQ28SPsXBy11BElgNjRkrAwTrXy3Bi1FeJc2Kwx68fJ_OVKf7ujM2Ys5vsfrhY7xuScdwIP0XukyY09_vVCV64t-olp79tvTf72_T8yZCWl9AtbAuMMsf8X-DEtqbJAzmhlEZd29fWTuKAf8uM0-6UValiT8BfEhYaBgiAzeCWBiIMCP_v5ZYGEP-T69wDUNjXoeDZ9LqEsAFSBwjUzvXLgxBgis6bxcXLw6eoAWocCgwIrIXrlgYQo_76xAESCAgCELyMyvgBGDIgAA\"\n}\n"
  },
  {
    "path": "test-data/gcf2/json-dumps/project.json",
    "content": "{\n  \"name\": \"projects/12340011\",\n  \"parent\": \"folders/373737373737\",\n  \"projectId\": \"gcpdiag-gcf2-aaaa\",\n  \"state\": \"ACTIVE\",\n  \"displayName\": \"gcpdiag test - gcf2\",\n  \"createTime\": \"2022-07-20T14:31:40.566Z\",\n  \"updateTime\": \"2022-07-20T14:31:42.430Z\",\n  \"etag\": \"hXVLwy0HyzXyIqWR2/n7eQ==\",\n  \"labels\": {\n    \"gcpdiag\": \"test\"\n  }\n}\n"
  },
  {
    "path": "test-data/gcf2/json-dumps/services.json",
    "content": "{\n  \"services\": [\n    {\n      \"name\": \"projects/12340011/services/cloudbuild.googleapis.com\",\n      \"config\": {\n        \"name\": \"cloudbuild.googleapis.com\",\n        \"title\": \"Cloud Build API\",\n        \"documentation\": {\n          \"summary\": \"Creates and manages builds on Google Cloud Platform.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340011\"\n    },\n    {\n      \"name\": \"projects/12340011/services/cloudfunctions.googleapis.com\",\n      \"config\": {\n        \"name\": \"cloudfunctions.googleapis.com\",\n        \"title\": \"Cloud Functions API\",\n        \"documentation\": {\n          \"summary\": \"Manages lightweight user-provided functions executed in response to events.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"cloudfunctions.googleapis.com/function\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloudfunctions.googleapis.com/function_name\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/api\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_version\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_method\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/consumer_project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/consumer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/producer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/consumer_resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"cloudfunctions.googleapis.com/function\",\n              \"metrics\": [\n                \"cloudfunctions.googleapis.com/function/execution_times\",\n                \"cloudfunctions.googleapis.com/function/execution_count\",\n                \"cloudfunctions.googleapis.com/function/user_memory_bytes\",\n                \"cloudfunctions.googleapis.com/function/network_egress\",\n                \"cloudfunctions.googleapis.com/function/active_instances\",\n                \"cloudfunctions.googleapis.com/function/execution_delays\",\n                \"cloudfunctions.googleapis.com/function/execution_count_internal\",\n                \"cloudfunctions.googleapis.com/function/supervisor_gcu_times\",\n                \"cloudfunctions.googleapis.com/function/supervisor_memory_bytes\",\n                \"cloudfunctions.googleapis.com/function/user_gcu_times\",\n                \"cloudfunctions.googleapis.com/function/supervisor_chemist_rpc_error_count\",\n                \"cloudfunctions.googleapis.com/function/supervisor_controlled_death_count\",\n                \"cloudfunctions.googleapis.com/function/supervisor_report_count\",\n                \"cloudfunctions.googleapis.com/function/supervisor_report_latencies\",\n                \"cloudfunctions.googleapis.com/function/supervisor_phase_latencies\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/api\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/api/consumer/request_count\",\n                \"serviceruntime.googleapis.com/api/consumer/error_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_used_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_refund_count\",\n                \"serviceruntime.googleapis.com/api/consumer/total_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_overhead_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/backend_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/response_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer\",\n                \"serviceruntime.googleapis.com/quota/used\",\n                \"serviceruntime.googleapis.com/quota/limit\",\n                \"serviceruntime.googleapis.com/quota/exceeded\",\n                \"serviceruntime.googleapis.com/allocation/consumer/quota_used_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/consumer_quota\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/quota/rate/consumer/used_count\",\n                \"serviceruntime.googleapis.com/quota/rate/consumer/refund_count\",\n                \"serviceruntime.googleapis.com/quota/allocation/consumer/usage\",\n                \"serviceruntime.googleapis.com/quota/consumer/limit\",\n                \"serviceruntime.googleapis.com/quota/consumer/exceeded\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340011\"\n    },\n    {\n      \"name\": \"projects/12340011/services/cloudresourcemanager.googleapis.com\",\n      \"config\": {\n        \"name\": \"cloudresourcemanager.googleapis.com\",\n        \"title\": \"Cloud Resource Manager API\",\n        \"documentation\": {\n          \"summary\": \"Creates, reads, and updates metadata for Google Cloud Platform resource containers.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"serviceruntime.googleapis.com/api\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_version\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_method\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/consumer_project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/consumer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/producer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/consumer_resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/api\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/api/consumer/quota_used_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_refund_count\",\n                \"serviceruntime.googleapis.com/quota/used\",\n                \"serviceruntime.googleapis.com/quota/limit\",\n                \"serviceruntime.googleapis.com/quota/exceeded\",\n                \"serviceruntime.googleapis.com/allocation/consumer/quota_used_count\",\n                \"serviceruntime.googleapis.com/api/consumer/request_count\",\n                \"serviceruntime.googleapis.com/api/consumer/error_count\",\n                \"serviceruntime.googleapis.com/api/consumer/total_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_overhead_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/backend_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/response_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/consumer_quota\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/quota/rate/consumer/used_count\",\n                \"serviceruntime.googleapis.com/quota/rate/consumer/refund_count\",\n                \"serviceruntime.googleapis.com/quota/allocation/consumer/usage\",\n                \"serviceruntime.googleapis.com/quota/consumer/limit\",\n                \"serviceruntime.googleapis.com/quota/consumer/exceeded\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340011\"\n    },\n    {\n      \"name\": \"projects/12340011/services/containerregistry.googleapis.com\",\n      \"config\": {\n        \"name\": \"containerregistry.googleapis.com\",\n        \"title\": \"Container Registry API\",\n        \"documentation\": {\n          \"summary\": \"Google Container Registry provides secure, private Docker image storage on Google Cloud Platform.  Our API follows the Docker Registry API specification, so we are fully compatible with the Docker CLI client, as well as standard tooling using the Docker Registry API.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340011\"\n    },\n    {\n      \"name\": \"projects/12340011/services/iam.googleapis.com\",\n      \"config\": {\n        \"name\": \"iam.googleapis.com\",\n        \"title\": \"Identity and Access Management (IAM) API\",\n        \"documentation\": {\n          \"summary\": \"Manages identity and access control for Google Cloud Platform resources, including the creation of service accounts, which you can use to authenticate to Google and make API calls.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"iam_service_account\",\n            \"displayName\": \"IAM Service Account\",\n            \"description\": \"An IAM Service Account.\",\n            \"labels\": [\n              {\n                \"key\": \"project_id\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"unique_id\",\n                \"description\": \"The unique_id of the service account.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"iam.googleapis.com/WorkloadIdentityPoolProvider\",\n            \"displayName\": \"Workload Identity Pool Provider\",\n            \"description\": \"A workload identity pool provider.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location of the resource.\"\n              },\n              {\n                \"key\": \"pool_id\",\n                \"description\": \"The ID of the provider's workload identity pool parent resource.\"\n              },\n              {\n                \"key\": \"provider_id\",\n                \"description\": \"The ID of the workload identity pool provider resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"iam.googleapis.com/WorkloadIdentityPoolProvider\",\n              \"metrics\": [\n                \"iam.googleapis.com/workload_identity_federation/count\",\n                \"iam.googleapis.com/workload_identity_federation/key_usage_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"iam_service_account\",\n              \"metrics\": [\n                \"iam.googleapis.com/service_account/authn_events_count\",\n                \"iam.googleapis.com/service_account/key/authn_events_count\",\n                \"iam.googleapis.com/service_account/authn_events_count_preprod\",\n                \"iam.googleapis.com/service_account/key/authn_events_count_preprod\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340011\"\n    },\n    {\n      \"name\": \"projects/12340011/services/iamcredentials.googleapis.com\",\n      \"config\": {\n        \"name\": \"iamcredentials.googleapis.com\",\n        \"title\": \"IAM Service Account Credentials API\",\n        \"documentation\": {\n          \"summary\": \"Creates short-lived credentials for impersonating IAM service accounts. To enable this API, you must enable the IAM API (iam.googleapis.com).\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340011\"\n    },\n    {\n      \"name\": \"projects/12340011/services/logging.googleapis.com\",\n      \"config\": {\n        \"name\": \"logging.googleapis.com\",\n        \"title\": \"Cloud Logging API\",\n        \"documentation\": {\n          \"summary\": \"Writes log entries and manages your Cloud Logging configuration.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"logging.googleapis.com/ChargedProject\",\n            \"displayName\": \"Cloud logging target\",\n            \"description\": \"A cloud logging specialization target schema of cloud.ChargedProject.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The monitored resource container. Could be project, workspace, etc.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The service-specific notion of location.\"\n              },\n              {\n                \"key\": \"service\",\n                \"description\": \"The name of the API service with which the data is associated (e.g.,'logging.googleapis.com').\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"logging.googleapis.com/ChargedProject\",\n              \"metrics\": [\n                \"logging.googleapis.com/billing/ingested_bytes\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340011\"\n    },\n    {\n      \"name\": \"projects/12340011/services/pubsub.googleapis.com\",\n      \"config\": {\n        \"name\": \"pubsub.googleapis.com\",\n        \"title\": \"Cloud Pub/Sub API\",\n        \"documentation\": {\n          \"summary\": \"Provides reliable, many-to-many, asynchronous messaging between applications.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340011\"\n    },\n    {\n      \"name\": \"projects/12340011/services/serviceusage.googleapis.com\",\n      \"config\": {\n        \"name\": \"serviceusage.googleapis.com\",\n        \"title\": \"Service Usage API\",\n        \"documentation\": {\n          \"summary\": \"Enables services that service consumers want to use on Google Cloud Platform, lists the available or enabled services, or disables services that service consumers no longer use.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340011\"\n    },\n    {\n      \"name\": \"projects/12340011/services/source.googleapis.com\",\n      \"config\": {\n        \"name\": \"source.googleapis.com\",\n        \"title\": \"Legacy Cloud Source Repositories API\",\n        \"documentation\": {\n          \"summary\": \"Access source code repositories hosted by Google.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"serviceruntime.googleapis.com/api\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_version\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_method\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/consumer_project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/consumer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/producer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/consumer_resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/api\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/api/consumer/request_count\",\n                \"serviceruntime.googleapis.com/api/consumer/error_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_used_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_refund_count\",\n                \"serviceruntime.googleapis.com/api/consumer/total_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_overhead_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/backend_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/response_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer\",\n                \"serviceruntime.googleapis.com/quota/used\",\n                \"serviceruntime.googleapis.com/quota/limit\",\n                \"serviceruntime.googleapis.com/quota/exceeded\",\n                \"serviceruntime.googleapis.com/allocation/consumer/quota_used_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/consumer_quota\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/quota/rate/consumer/used_count\",\n                \"serviceruntime.googleapis.com/quota/rate/consumer/refund_count\",\n                \"serviceruntime.googleapis.com/quota/allocation/consumer/usage\",\n                \"serviceruntime.googleapis.com/quota/consumer/limit\",\n                \"serviceruntime.googleapis.com/quota/consumer/exceeded\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340011\"\n    },\n    {\n      \"name\": \"projects/12340011/services/storage-api.googleapis.com\",\n      \"config\": {\n        \"name\": \"storage-api.googleapis.com\",\n        \"title\": \"Google Cloud Storage JSON API\",\n        \"documentation\": {\n          \"summary\": \"Lets you store and retrieve potentially-large, immutable data objects.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340011\"\n    },\n    {\n      \"name\": \"projects/12340011/services/storage-component.googleapis.com\",\n      \"config\": {\n        \"name\": \"storage-component.googleapis.com\",\n        \"title\": \"Cloud Storage\",\n        \"documentation\": {\n          \"summary\": \"Google Cloud Storage is a RESTful service for storing and accessing your data on Google's\\n    infrastructure.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"serviceruntime.googleapis.com/api\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_version\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_method\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/consumer_project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/consumer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/producer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/consumer_resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/api\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/api/consumer/request_count\",\n                \"serviceruntime.googleapis.com/api/consumer/error_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_used_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_refund_count\",\n                \"serviceruntime.googleapis.com/api/consumer/total_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_overhead_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/backend_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/response_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer\",\n                \"serviceruntime.googleapis.com/quota/used\",\n                \"serviceruntime.googleapis.com/quota/limit\",\n                \"serviceruntime.googleapis.com/quota/exceeded\",\n                \"serviceruntime.googleapis.com/allocation/consumer/quota_used_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/consumer_quota\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/quota/rate/consumer/used_count\",\n                \"serviceruntime.googleapis.com/quota/rate/consumer/refund_count\",\n                \"serviceruntime.googleapis.com/quota/allocation/consumer/usage\",\n                \"serviceruntime.googleapis.com/quota/consumer/limit\",\n                \"serviceruntime.googleapis.com/quota/consumer/exceeded\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340011\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gcf2/project.tf",
    "content": "/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nresource \"random_string\" \"project_id_suffix\" {\n  length  = 8\n  number  = true\n  lower   = true\n  upper   = false\n  special = false\n}\n\nresource \"google_project\" \"project\" {\n  name            = \"gcpdiag test - gcf2\"\n  project_id      = \"gcpdiag-gcf2-${random_string.project_id_suffix.id}\"\n  org_id          = var.folder_id == \"\" ? var.org_id : null\n  folder_id       = var.folder_id != \"\" ? var.folder_id : null\n  billing_account = var.billing_account_id\n  labels = {\n    gcpdiag : \"test\"\n  }\n}\n\nresource \"google_project_service\" \"cloudbuild\" {\n  project = google_project.project.project_id\n  service = \"cloudbuild.googleapis.com\"\n}\n\nresource \"google_project_service\" \"cloudfunctions\" {\n  project    = google_project.project.project_id\n  service    = \"cloudfunctions.googleapis.com\"\n  depends_on = [google_project_service.cloudbuild]\n}\n\noutput \"project_id\" {\n  value = google_project.project.project_id\n}\n\noutput \"project_id_suffix\" {\n  value = random_string.project_id_suffix.id\n}\n\noutput \"project_nr\" {\n  value = google_project.project.number\n}\n\noutput \"org_id\" {\n  value = var.org_id\n}\n"
  },
  {
    "path": "test-data/gcf2/sourcecode/memalloc.py",
    "content": "# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# Lint as: python3\n\"\"\"\n  Allocates memory to bytearray based on payload specified in HTTP Request.\n  Args:\n      request (flask.Request): HTTP request object.\n  Returns:\n      sum_dict: Python Dictionary containing payload:bytearray memory size\n      (key/value format)\n\"\"\"\nimport sys\n\n\ndef gcf_mem_alloc(request):\n\n  request_json = request.get_json()\n  if request.args and 'payload' in request.args:\n    return request.args.get('payload')\n  elif request_json and 'payload' in request_json:\n    num = int(request_json['payload'])\n\n    sum_dict = {}\n\n    x = bytearray(1024 * 1024 * num)\n\n    sum_dict[num] = str(sys.getsizeof(x))\n\n    del x\n\n    return sum_dict\n  else:\n    return 'Payload not found. Please check again!'\n"
  },
  {
    "path": "test-data/gcf2/sourcecode/requirements.txt",
    "content": ""
  },
  {
    "path": "test-data/gcf2/variables.tf",
    "content": "variable \"billing_account_id\" {}\n\nvariable \"org_id\" {}\nvariable \"folder_id\" { default = \"\" }\n"
  },
  {
    "path": "test-data/gcs1/Makefile",
    "content": "PROJECT_ID  := $(shell terraform output -raw project_id)\nPROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix)\nPROJECT_NR  := $(shell terraform output -raw project_nr)\nORG_ID      := $(shell terraform output -raw org_id)\nBUCKET_WITH_RETENTION    := $(shell terraform output -raw bucket_with_retention)\nCURL         = ../../bin/curl-wrap.sh\nJSON_CLEANER = ../../bin/json-cleaner\nBUCKET_ID = gcpdiag-gcs1bucket-aaaa\n\nFAKE_PROJECT_ID_SUFFIX = aaaa\nFAKE_PROJECT_NR = 12340008\nFAKE_ORG_ID = 11112222\nSED_SUBST_FAKE = sed -e \"s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/\" \\\n\t\t-e \"s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/\" \\\n\t\t-e \"s/$(ORG_ID)/$(FAKE_ORG_ID)/\" \\\n\nall:\t\\\n\tjson-dumps/project.json \\\n\tjson-dumps/services.json \\\n\tjson-dumps/storage.json \\\n\tjson-dumps/bucket-gcpdiag-gcs1bucket2-aaaa.json \\\n\tjson-dumps/bucket-roles.json\n\njson-dumps/project.json:\n\t$(CURL) -fsS \\\n\t\t'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/services.json:\n\t$(CURL) -fv \\\n\t\t'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/storage.json:\n\t$(CURL) -fv \\\n\t\t'https://storage.googleapis.com/storage/v1/b?project=$(PROJECT_ID)' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/bucket-roles.json:\n\t$(CURL) -fv \\\n\t\t'https://storage.googleapis.com/storage/v1/b/${BUCKET_ID}/iam' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/bucket-gcpdiag-gcs1bucket2-aaaa.json:\n\t$(CURL) -fv \\\n\t\t'https://storage.googleapis.com/storage/v1/b/${BUCKET_WITH_RETENTION}' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n"
  },
  {
    "path": "test-data/gcs1/gcs1.tf",
    "content": "resource \"google_storage_bucket\" \"gcs1bucket\" {\n  project       = google_project.project.project_id\n  name          = \"gcpdiag-gcs1bucket-${random_string.project_id_suffix.id}\"\n  location      = \"US\"\n  storage_class = \"STANDARD\"\n}\n\nresource \"google_storage_bucket\" \"gcs1bucket-labels\" {\n  project       = google_project.project.project_id\n  name          = \"gcpdiag-gcs1bucket-labels-${random_string.project_id_suffix.id}\"\n  location      = \"US\"\n  storage_class = \"STANDARD\"\n  labels = {\n    \"label1\" = \"value1\"\n  }\n}\n\nresource \"google_storage_bucket\" \"bucket_with_retention\" {\n  project       = google_project.project.project_id\n  name          = \"gcpdiag-gcs1bucket2-${random_string.project_id_suffix.id}\"\n  location      = \"US\"\n  storage_class = \"STANDARD\"\n  retention_policy {\n    retention_period = 10\n  }\n}\n\noutput \"bucket_with_retention\" {\n  value = google_storage_bucket.bucket_with_retention.name\n}\n"
  },
  {
    "path": "test-data/gcs1/json-dumps/bucket-gcpdiag-gcs1bucket2-aaaa.json",
    "content": "{\n  \"kind\": \"storage#bucket\",\n  \"selfLink\": \"https://www.googleapis.com/storage/v1/b/gcpdiag-gcs1bucket2-aaaa\",\n  \"id\": \"gcpdiag-gcs1bucket2-aaaa\",\n  \"name\": \"gcpdiag-gcs1bucket2-aaaa\",\n  \"projectNumber\": \"12340008\",\n  \"metageneration\": \"1\",\n  \"location\": \"US\",\n  \"storageClass\": \"STANDARD\",\n  \"etag\": \"CAE=\",\n  \"timeCreated\": \"2022-05-20T11:09:54.481Z\",\n  \"updated\": \"2022-05-20T11:09:54.481Z\",\n  \"retentionPolicy\": {\n    \"retentionPeriod\": \"10\",\n    \"effectiveTime\": \"2022-05-20T11:09:54.481Z\"\n  },\n  \"iamConfiguration\": {\n    \"bucketPolicyOnly\": {\n      \"enabled\": false\n    },\n    \"uniformBucketLevelAccess\": {\n      \"enabled\": false\n    },\n    \"publicAccessPrevention\": \"inherited\"\n  },\n  \"locationType\": \"multi-region\",\n  \"rpo\": \"DEFAULT\"\n}\n"
  },
  {
    "path": "test-data/gcs1/json-dumps/bucket-roles.json",
    "content": "{\n  \"kind\": \"storage#policy\",\n  \"resourceId\": \"projects/_/buckets/gcpdiag-gcs1bucket-aaaa\",\n  \"version\": 1,\n  \"etag\": \"CAE=\",\n  \"bindings\": [\n    {\n      \"role\": \"roles/storage.legacyBucketOwner\",\n      \"members\": [\n        \"projectEditor:gcpdiag-gcs1-aaaa\",\n        \"projectOwner:gcpdiag-gcs1-aaaa\"\n      ]\n    },\n    {\n      \"role\": \"roles/storage.legacyBucketReader\",\n      \"members\": [\n        \"projectViewer:gcpdiag-gcs1-aaaa\"\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gcs1/json-dumps/project.json",
    "content": "{\n  \"name\": \"projects/12340008\",\n  \"parent\": \"organizations/11112222\",\n  \"projectId\": \"gcpdiag-gcs1-aaaa\",\n  \"state\": \"ACTIVE\",\n  \"displayName\": \"gcpdiag test - gcs1\",\n  \"createTime\": \"2022-01-01T01:44:52.786Z\",\n  \"updateTime\": \"2022-01-01T01:44:54.432Z\",\n  \"etag\": \"1k3YTPogq+IJ3F8nGjfbqg==\",\n  \"labels\": {\n    \"gcpdiag\": \"test\"\n  }\n}\n"
  },
  {
    "path": "test-data/gcs1/json-dumps/services.json",
    "content": "{\n  \"services\": [\n    {\n      \"name\": \"projects/12340008/services/serviceusage.googleapis.com\",\n      \"config\": {\n        \"name\": \"serviceusage.googleapis.com\",\n        \"title\": \"Service Usage API\",\n        \"documentation\": {\n          \"summary\": \"Enables services that service consumers want to use on Google Cloud Platform, lists the available or enabled services, or disables services that service consumers no longer use.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340008\"\n    },\n    {\n      \"name\": \"projects/12340008/services/storage.googleapis.com\",\n      \"config\": {\n        \"name\": \"storage.googleapis.com\",\n        \"title\": \"Cloud Storage API\",\n        \"documentation\": {\n          \"summary\": \"Lets you store and retrieve potentially-large, immutable data objects.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"storage.googleapis.com/StorageLocation\",\n            \"displayName\": \"Storage Location of GCS Buckets\",\n            \"description\": \"Storage Location of GCS Buckets.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The project number of the bucket.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The storage location of the bucket.\"\n              }\n            ],\n            \"launchStage\": \"EARLY_ACCESS\"\n          },\n          {\n            \"type\": \"storage.googleapis.com/Location\",\n            \"displayName\": \"GCS Location\",\n            \"description\": \"GCS Location.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The project number of the bucket.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location of the bucket.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"storage.googleapis.com/storage\",\n            \"labels\": [\n              {\n                \"key\": \"storage.googleapis.com/bucket_name\"\n              },\n              {\n                \"key\": \"storage.googleapis.com/bucket_storage_class\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              }\n            ]\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"storage.googleapis.com/storage\",\n              \"metrics\": [\n                \"storage.googleapis.com/storage/total_bytes\",\n                \"storage.googleapis.com/storage/object_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"storage.googleapis.com/StorageLocation\",\n              \"metrics\": [\n                \"storage.googleapis.com/quota/in_multi_region_read_bandwidth/exceeded\",\n                \"storage.googleapis.com/quota/in_multi_region_read_bandwidth/usage\",\n                \"storage.googleapis.com/quota/in_multi_region_read_bandwidth_preview/exceeded\",\n                \"storage.googleapis.com/quota/in_multi_region_read_bandwidth_preview/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"storage.googleapis.com/Location\",\n              \"metrics\": [\n                \"storage.googleapis.com/quota/turbo_replication_ingress_bandwidth/exceeded\",\n                \"storage.googleapis.com/quota/turbo_replication_ingress_bandwidth/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"storage.googleapis.com/StorageLocation\",\n              \"metrics\": [\n                \"storage.googleapis.com/quota/in_multi_region_read_bandwidth/limit\",\n                \"storage.googleapis.com/quota/in_multi_region_read_bandwidth_preview/limit\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"storage.googleapis.com/Location\",\n              \"metrics\": [\n                \"storage.googleapis.com/quota/turbo_replication_ingress_bandwidth/limit\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340008\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gcs1/json-dumps/storage.json",
    "content": "{\n  \"kind\": \"storage#buckets\",\n  \"items\": [\n    {\n      \"kind\": \"storage#bucket\",\n      \"selfLink\": \"https://www.googleapis.com/storage/v1/b/gcpdiag-gcs1bucket-aaaa\",\n      \"id\": \"gcpdiag-gcs1bucket-aaaa\",\n      \"name\": \"gcpdiag-gcs1bucket-aaaa\",\n      \"projectNumber\": \"12340008\",\n      \"metageneration\": \"1\",\n      \"location\": \"US\",\n      \"storageClass\": \"STANDARD\",\n      \"etag\": \"CAE=\",\n      \"timeCreated\": \"2022-05-20T11:09:54.411Z\",\n      \"updated\": \"2022-05-20T11:09:54.411Z\",\n      \"iamConfiguration\": {\n        \"bucketPolicyOnly\": {\n          \"enabled\": false\n        },\n        \"uniformBucketLevelAccess\": {\n          \"enabled\": false\n        },\n        \"publicAccessPrevention\": \"inherited\"\n      },\n      \"locationType\": \"multi-region\",\n      \"rpo\": \"DEFAULT\"\n    },\n    {\n      \"kind\": \"storage#bucket\",\n      \"selfLink\": \"https://www.googleapis.com/storage/v1/b/gcpdiag-gcs1bucket-labels-aaaa\",\n      \"id\": \"gcpdiag-gcs1bucket-labels-aaaa\",\n      \"name\": \"gcpdiag-gcs1bucket-labels-aaaa\",\n      \"projectNumber\": \"12340008\",\n      \"metageneration\": \"1\",\n      \"location\": \"US\",\n      \"storageClass\": \"STANDARD\",\n      \"etag\": \"CAE=\",\n      \"timeCreated\": \"2022-05-20T11:32:54.003Z\",\n      \"updated\": \"2022-05-20T11:32:54.003Z\",\n      \"labels\": {\n        \"label1\": \"value1\"\n      },\n      \"iamConfiguration\": {\n        \"bucketPolicyOnly\": {\n          \"enabled\": false\n        },\n        \"uniformBucketLevelAccess\": {\n          \"enabled\": false\n        },\n        \"publicAccessPrevention\": \"inherited\"\n      },\n      \"locationType\": \"multi-region\",\n      \"rpo\": \"DEFAULT\"\n    },\n    {\n      \"kind\": \"storage#bucket\",\n      \"selfLink\": \"https://www.googleapis.com/storage/v1/b/gcpdiag-gcs1bucket2-aaaa\",\n      \"id\": \"gcpdiag-gcs1bucket2-aaaa\",\n      \"name\": \"gcpdiag-gcs1bucket2-aaaa\",\n      \"projectNumber\": \"12340008\",\n      \"metageneration\": \"1\",\n      \"location\": \"US\",\n      \"storageClass\": \"STANDARD\",\n      \"etag\": \"CAE=\",\n      \"timeCreated\": \"2022-05-20T11:09:54.481Z\",\n      \"updated\": \"2022-05-20T11:09:54.481Z\",\n      \"retentionPolicy\": {\n        \"retentionPeriod\": \"10\",\n        \"effectiveTime\": \"2022-05-20T11:09:54.481Z\"\n      },\n      \"iamConfiguration\": {\n        \"bucketPolicyOnly\": {\n          \"enabled\": false\n        },\n        \"uniformBucketLevelAccess\": {\n          \"enabled\": false\n        },\n        \"publicAccessPrevention\": \"inherited\"\n      },\n      \"locationType\": \"multi-region\",\n      \"rpo\": \"DEFAULT\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gcs1/project.tf",
    "content": "/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nresource \"random_string\" \"project_id_suffix\" {\n  length  = 8\n  number  = true\n  lower   = true\n  upper   = false\n  special = false\n}\n\nresource \"google_project\" \"project\" {\n  name            = \"gcpdiag test - gcs1\"\n  project_id      = \"gcpdiag-gcs1-${random_string.project_id_suffix.id}\"\n  org_id          = var.folder_id == \"\" ? var.org_id : null\n  folder_id       = var.folder_id != \"\" ? var.folder_id : null\n  billing_account = var.billing_account_id\n  labels = {\n    gcpdiag : \"test\"\n  }\n}\n\nresource \"google_project_service\" \"storage\" {\n  project = google_project.project.project_id\n  service = \"storage.googleapis.com\"\n}\n\noutput \"project_id\" {\n  value = google_project.project.project_id\n}\n\noutput \"project_id_suffix\" {\n  value = random_string.project_id_suffix.id\n}\n\noutput \"project_nr\" {\n  value = google_project.project.number\n}\n\noutput \"org_id\" {\n  value = var.org_id\n}\n"
  },
  {
    "path": "test-data/gcs1/variables.tf",
    "content": "variable \"billing_account_id\" {}\n\nvariable \"org_id\" {}\nvariable \"folder_id\" { default = \"\" }\n"
  },
  {
    "path": "test-data/gke1/Makefile",
    "content": "PROJECT_ID  := $(shell terraform output -raw project_id)\nPROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix)\nPROJECT_NR  := $(shell terraform output -raw project_nr)\nORG_ID      := $(shell terraform output -raw org_id)\nGKE2_SA     := $(shell terraform output -raw gke2_sa)\nCURL         = ../../bin/curl-wrap.sh\nJSON_CLEANER = ../../bin/json-cleaner\nREGION_1     = europe-west4\nZONE_1       = europe-west4-a\nZONE_EMPTY   = europe-west1-b\nSUBNETWORK_1 = gke1-subnet\n\nFAKE_PROJECT_ID_SUFFIX = aaaa\nFAKE_PROJECT_NR = 12340002\nFAKE_ORG_ID = 11112222\nSED_SUBST_FAKE = sed -e \"s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/\" \\\n\t\t     -e \"s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/\" \\\n\t\t     -e \"s/$(ORG_ID)/$(FAKE_ORG_ID)/\" \\\n\nall:\t\\\n\tjson-dumps/compute-effective-firewalls-default.json \\\n\tjson-dumps/compute-instances-$(ZONE_1).json \\\n\tjson-dumps/compute-instances-empty.json \\\n\tjson-dumps/compute-interconnects.json \\\n\tjson-dumps/compute-migs-$(ZONE_1).json \\\n\tjson-dumps/compute-migs-empty.json \\\n\tjson-dumps/compute-disks-$(ZONE_1).json \\\n\tjson-dumps/compute-disks-empty.json \\\n\tjson-dumps/compute-igs-empty.json \\\n\tjson-dumps/compute-network-default.json \\\n\tjson-dumps/compute-project.json \\\n\tjson-dumps/compute-subnetworks-aggregated.json \\\n\tjson-dumps/compute-subnetwork-policy.json \\\n\tjson-dumps/compute-templates.json \\\n\tjson-dumps/compute-regions.json \\\n\tjson-dumps/compute-zones.json \\\n\tjson-dumps/compute-routers-europe-west4.json \\\n\tjson-dumps/container-clusters.json \\\n\tjson-dumps/container-server-config-$(REGION_1).json \\\n\tjson-dumps/container-server-config-$(ZONE_1).json \\\n\tjson-dumps/iam-policy.json \\\n\tjson-dumps/iam-roles-custom.json \\\n\tjson-dumps/iam-roles-predefined-1.json.gz \\\n\tjson-dumps/iam-roles-predefined-2.json.gz \\\n\tjson-dumps/iam-roles-get.json \\\n\tjson-dumps/iam-service-accounts.json \\\n\tjson-dumps/iam-service-account-policy.json \\\n\tjson-dumps/logging-entries-1.json \\\n\tjson-dumps/project.json \\\n\tjson-dumps/services.json \\\n\tjson-dumps/compute-instances-aggregated.json \\\n\tjson-dumps/compute-migs-aggregated.json \\\n\tjson-dumps/org-constraints.json \\\n\tjson-dumps/org-constraint-custom.arEnforceImmutableTags.json\n\ninclude ../Makefile.inc\n\n# compute.googleapis.com\n\njson-dumps/compute-regions.json:\n\t$(CURL) -fsS \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/regions' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-zones.json:\n\t$(CURL) -fsS \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-instances-$(ZONE_1).json:\n\t$(CURL) -fsS \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$(ZONE_1)/instances' \\\n\t\t| $(JSON_CLEANER) instances \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-migs-$(ZONE_1).json:\n\t$(CURL) -fsS \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$(ZONE_1)/instanceGroupManagers' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-instances-empty.json:\n\t$(CURL) -fsS \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$(ZONE_EMPTY)/instances' \\\n\t\t| $(JSON_CLEANER) instances \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-migs-empty.json:\n\t$(CURL) -fsS \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$(ZONE_EMPTY)/instanceGroupManagers' \\\n\t\t| $(JSON_CLEANER) instances \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-igs-empty.json:\n\t$(CURL) -fsS \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$(ZONE_EMPTY)/instanceGroups' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-project.json:\n\t$(CURL) -fsS \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)' \\\n\t\t| $(JSON_CLEANER) compute-project \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-network-default.json:\n\t$(CURL) -fsS \\\n\t        'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/global/networks/default' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-effective-firewalls-default.json:\n\t$(CURL) -fsS \\\n\t        'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/global/networks/default/getEffectiveFirewalls' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-templates.json:\n\tZONE=$(subst json-dumps/,,$%); \\\n\t$(CURL) -fsS \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/global/instanceTemplates' \\\n\t\t| $(JSON_CLEANER) compute-templates \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-subnetwork-policy.json:\n\t$(CURL) -fsS \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/regions/$(REGION_1)/subnetworks/$(SUBNETWORK_1)/getIamPolicy' \\\n\t\t--header \"Content-Type:text/json\" \\\n\t\t| $(JSON_CLEANER) other \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-routers-%.json:\n\tREGION=$(subst json-dumps/,,$*); \\\n\t$(CURL) -fsS \\\n\t        \"https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/regions/$$REGION/routers\" \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-disks-%.json:\n\t$(CURL) -fsS \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$*/disks' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-disks-empty.json: json-dumps/compute-disks-$(ZONE_EMPTY).json\n\tln -sf $(notdir $<) $@\n\n\n# cloudresourcemanager.googleapis.com\n\njson-dumps/project.json:\n\t$(CURL) -fsS \\\n\t\t'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/iam-policy.json:\n\t$(CURL) -fsS \\\n\t\t'https://cloudresourcemanager.googleapis.com/v1/projects/$(PROJECT_ID):getIamPolicy' \\\n\t\t-X POST  --header \"Content-Type:text/json\" \\\n\t\t-d \"\" \\\n\t\t| $(JSON_CLEANER) other \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\n# iam.googleapis.com\n\njson-dumps/iam-roles-predefined-1.json.gz:\n\t$(CURL) -fsS \\\n\t\t'https://iam.googleapis.com/v1/roles?view=FULL&pageSize=500' \\\n\t\t| $(SED_SUBST_FAKE) \\\n\t        | gzip -c >$@\n\njson-dumps/iam-roles-predefined-2.json.gz: json-dumps/iam-roles-predefined-1.json.gz\n\t$(CURL) -fsS \\\n\t\t'https://iam.googleapis.com/v1/roles?view=FULL&pageSize=500&pageToken=$(shell zcat json-dumps/iam-roles-predefined-1.json.gz | jq -r '.nextPageToken')' \\\n\t\t| $(SED_SUBST_FAKE) \\\n\t        | gzip -c >$@\n\njson-dumps/iam-roles-custom.json:\n\t$(CURL) -fsS \\\n\t\t'https://iam.googleapis.com/v1/projects/$(PROJECT_ID)/roles?view=FULL&pageSize=500' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/iam-roles-get.json:\n \t$(CURL) -fsS \\\n \t\t'https://iam.googleapis.com/v1/roles/container.nodeServiceAgent' \\\n \t\t| $(SED_SUBST_FAKE) \\\n\t\t| jq '{\"roles\": [.]}' >$@.tmp\n\t$(CURL) -fsS \\\n\t\t'https://iam.googleapis.com/v1/roles/container.defaultNodeServiceAccount' \\\n\t\t| $(SED_SUBST_FAKE) \\\n\t\t| jq '{\"roles\": [.]}' >>$@.tmp\n\tjq -s '. | {\"roles\": map(.)}' $@.tmp > $@\n\trm $@.tmp\n\njson-dumps/iam-service-accounts.json:\n\t$(CURL) -fsS \\\n\t\t'https://iam.googleapis.com/v1/projects/$(PROJECT_ID)/serviceAccounts' \\\n\t\t| $(JSON_CLEANER) service-accounts \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/iam-service-account-policy.json:\n\t$(CURL) -fsS \\\n\t\t'https://iam.googleapis.com/v1/$(GKE2_SA):getIamPolicy' \\\n\t\t-X POST  --header \"Content-Type:text/json\" \\\n\t\t-d \"\" \\\n\t\t| $(JSON_CLEANER) other \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\n# container.googleapis.com\n\njson-dumps/container-clusters.json:\n\t$(CURL) -fsS \\\n\t\t'https://container.googleapis.com/v1/projects/$(PROJECT_ID)/locations/-/clusters' \\\n\t\t| $(JSON_CLEANER) clusters \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/container-server-config-$(REGION_1).json:\n\t$(CURL) -fsS \\\n\t\t'https://container.googleapis.com/v1/projects/$(PROJECT_ID)/locations/$(REGION_1)/serverConfig' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/container-server-config-$(ZONE_1).json:\n\t$(CURL) -fsS \\\n\t\t'https://container.googleapis.com/v1/projects/$(PROJECT_ID)/zones/$(ZONE_1)/serverconfig' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\n# serviceusage.googleapis.com\n\njson-dumps/services.json:\n\t$(CURL) -fsS \\\n\t        'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\n\n# If you need to recreate the JSON: adapt the timestamp and make sure that there are some entries found.\ndefine LOGGING_ENTRIES_BODY\n{\n\t\"resourceNames\": [\"projects/$(PROJECT_ID)\"],\n\t\"orderBy\": \"timestamp desc\",\n\t\"filter\": \"\n\t\ttimestamp > \\\"2021-11-24T00:00:00+00:00\\\" AND\n\t\ttimestamp < \\\"2021-11-25T00:00:00+00:00\\\" AND\n\t\tresource.type=\\\"gce_instance_group_manager\\\" AND\n\t\toperation.last=\\\"true\\\" AND\n\t\tlog_id(\\\"cloudaudit.googleapis.com%2Factivity\\\")\n\t\"\n}\nendef\nexport LOGGING_ENTRIES_BODY\n\njson-dumps/logging-entries-1.json:\n\t$(CURL) -fsS \\\n\t\t'https://logging.googleapis.com/v2/entries:list' \\\n\t\t--header \"Content-Type:text/json\" \\\n\t\t-d \"$$LOGGING_ENTRIES_BODY\" \\\n\t\t| $(SED_SUBST_FAKE) >$@\n"
  },
  {
    "path": "test-data/gke1/firewall.tf.old",
    "content": "resource \"google_compute_firewall\" \"fw-test-800\" {\n  project  = google_project.project.project_id\n  name     = \"fw-test-800\"\n  network  = \"default\"\n  priority = 800\n\n  source_ranges = [\"10.100.0.0/24\"]\n\n  deny {\n    protocol = \"tcp\"\n    ports    = [\"1001-1002\"]\n  }\n}\n\nresource \"google_compute_firewall\" \"fw-test-900\" {\n  project  = google_project.project.project_id\n  name     = \"fw-test-900\"\n  network  = \"default\"\n  priority = 900\n\n  source_ranges = [\"10.100.0.0/24\"]\n  source_tags   = [\"foobar\", \"foo\", \"bar\"]\n\n  allow {\n    protocol = \"tcp\"\n    ports    = [\"1234\", \"1000-2000\", \"2033\"]\n  }\n}\n\nresource \"google_compute_firewall\" \"fw-test-901\" {\n  project  = google_project.project.project_id\n  name     = \"fw-test-901\"\n  network  = \"default\"\n  priority = 901\n\n  source_service_accounts = [\"service-12340002@compute-system.iam.gserviceaccount.com\"]\n\n  allow {\n    protocol = \"tcp\"\n    ports    = [\"1234\", \"1000-2000\", \"2033\"]\n  }\n}\n\nresource \"google_compute_firewall\" \"fw-test-950\" {\n  project  = google_project.project.project_id\n  name     = \"fw-test-950\"\n  network  = \"default\"\n  priority = 950\n\n  source_ranges = [\"0.0.0.0/0\"]\n\n  deny {\n    protocol = \"tcp\"\n    ports    = [\"1006\"]\n  }\n}\n"
  },
  {
    "path": "test-data/gke1/gke1.tf",
    "content": "/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n# GKE cluster with monitoring disabled\n# And with small pod CIDR\n\nresource \"google_service_account\" \"gke1_sa\" {\n  project      = google_project.project.project_id\n  account_id   = \"gke1sa\"\n  display_name = \"GKE 1 Service Account\"\n}\n\nresource \"google_compute_subnetwork\" \"secondary_ip_range_pod\" {\n  project       = google_project.project.project_id\n  depends_on    = [google_project_service.compute]\n  network       = \"default\"\n  name          = \"gke1-subnet\"\n  ip_cidr_range = \"192.168.0.0/24\"\n  region        = \"europe-west4\"\n  secondary_ip_range {\n    range_name    = \"gke1-secondary-range-pod\"\n    ip_cidr_range = \"192.168.1.0/24\"\n  }\n  secondary_ip_range {\n    range_name    = \"gke1-secondary-range-svc\"\n    ip_cidr_range = \"192.168.2.0/24\"\n  }\n}\n\nresource \"google_compute_subnetwork_iam_member\" \"gke1_subnet\" {\n  project    = google_compute_subnetwork.secondary_ip_range_pod.project\n  region     = google_compute_subnetwork.secondary_ip_range_pod.region\n  subnetwork = google_compute_subnetwork.secondary_ip_range_pod.name\n  role       = \"roles/compute.networkUser\"\n  member     = \"serviceAccount:${google_service_account.gke1_sa.email}\"\n}\n\nresource \"google_container_cluster\" \"gke1\" {\n  provider   = google-beta\n  project    = google_project.project.project_id\n  depends_on = [google_project_service.container]\n  name       = \"gke1\"\n  subnetwork = google_compute_subnetwork.secondary_ip_range_pod.name\n  location   = \"europe-west4-a\"\n  release_channel {\n    channel = \"UNSPECIFIED\"\n  }\n  ip_allocation_policy {\n    cluster_secondary_range_name  = \"gke1-secondary-range-pod\"\n    services_secondary_range_name = \"gke1-secondary-range-svc\"\n  }\n  initial_node_count = 1\n  cluster_telemetry {\n    type = \"DISABLED\"\n  }\n  resource_labels = {\n    foo = \"bar\"\n  }\n  addons_config {\n    http_load_balancing {\n      disabled = true\n    }\n  }\n}\n"
  },
  {
    "path": "test-data/gke1/gke2.tf",
    "content": "/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n# This custom role is used to test iam.py's code that deals\n# with verifying permissions including custom roles.\nresource \"google_project_iam_custom_role\" \"gke2_custom_role\" {\n  project     = google_project.project.project_id\n  role_id     = \"gke2_custom_role\"\n  title       = \"GKE Custom Role\"\n  description = \"A description\"\n  permissions = [\n    # monitoring.viewer\n    \"cloudnotifications.activities.list\",\n    \"monitoring.alertPolicies.get\",\n    \"monitoring.alertPolicies.list\",\n    \"monitoring.dashboards.get\",\n    \"monitoring.dashboards.list\",\n    \"monitoring.groups.get\",\n    \"monitoring.groups.list\",\n    \"monitoring.metricDescriptors.get\",\n    \"monitoring.metricDescriptors.list\",\n    \"monitoring.monitoredResourceDescriptors.get\",\n    \"monitoring.monitoredResourceDescriptors.list\",\n    \"monitoring.notificationChannelDescriptors.get\",\n    \"monitoring.notificationChannelDescriptors.list\",\n    \"monitoring.notificationChannels.get\",\n    \"monitoring.notificationChannels.list\",\n    \"monitoring.publicWidgets.get\",\n    \"monitoring.publicWidgets.list\",\n    \"monitoring.services.get\",\n    \"monitoring.services.list\",\n    \"monitoring.slos.get\",\n    \"monitoring.slos.list\",\n    \"monitoring.timeSeries.list\",\n    \"monitoring.uptimeCheckConfigs.get\",\n    \"monitoring.uptimeCheckConfigs.list\",\n    # only for org-level:\n    #\"resourcemanager.projects.get\",\n    #\"resourcemanager.projects.list\",\n\n    # monitoring.metricWriter\n    \"monitoring.metricDescriptors.create\",\n    \"monitoring.metricDescriptors.get\",\n    \"monitoring.metricDescriptors.list\",\n    \"monitoring.monitoredResourceDescriptors.get\",\n    \"monitoring.monitoredResourceDescriptors.list\",\n    \"monitoring.timeSeries.create\",\n\n    #\"logging.logWriter\",\n    \"logging.logEntries.create\",\n\n    #\"stackdriver.resourceMetadata.writer\"\n    \"stackdriver.resourceMetadata.write\",\n    \"opsconfigmonitoring.resourceMetadata.list\",\n\n    # container.nodeServiceAgent\n    \"autoscaling.sites.writeMetrics\",\n    \"logging.logEntries.create\",\n    \"monitoring.metricDescriptors.create\",\n    \"monitoring.metricDescriptors.list\",\n    \"monitoring.timeSeries.create\",\n    #\"resourcemanager.projects.get\",\n    #\"resourcemanager.projects.list\",\n    \"storage.objects.get\",\n    \"storage.objects.list\",\n  ]\n}\n\nresource \"google_service_account\" \"gke2_sa\" {\n  project      = google_project.project.project_id\n  account_id   = \"gke2sa\"\n  display_name = \"GKE Service Account\"\n}\n\n\nresource \"google_project_iam_member\" \"gke2_sa\" {\n  project = google_project.project.project_id\n  role    = google_project_iam_custom_role.gke2_custom_role.name\n  member  = \"serviceAccount:${google_service_account.gke2_sa.email}\"\n}\n\nresource \"google_service_account_iam_member\" \"gke2_sa\" {\n  service_account_id = google_service_account.gke2_sa.name\n  role               = \"roles/iam.serviceAccountUser\"\n  member             = \"serviceAccount:${google_service_account.gke2_sa.email}\"\n}\n\n# GKE cluster with monitoring enabled and service account using a custom role\nresource \"google_container_cluster\" \"gke2\" {\n  provider           = google-beta\n  project            = google_project.project.project_id\n  depends_on         = [google_project_service.container]\n  name               = \"gke2\"\n  location           = \"europe-west4\"\n  initial_node_count = 1\n  release_channel {\n    channel = \"UNSPECIFIED\"\n  }\n  cluster_telemetry {\n    type = \"SYSTEM_ONLY\"\n  }\n  node_config {\n    service_account = google_service_account.gke2_sa.email\n    oauth_scopes = [\n      \"https://www.googleapis.com/auth/cloud-platform\"\n    ]\n    tags = [\"gke-gke2-custom-tag\"]\n  }\n  workload_identity_config {\n    workload_pool = \"${google_project.project.project_id}.svc.id.goog\"\n  }\n}\n\nresource \"google_container_node_pool\" \"low_pod_per_node_pool\" {\n  name              = \"low-pod-per-node-pool\"\n  project           = google_project.project.project_id\n  cluster           = google_container_cluster.gke2.id\n  node_count        = 1\n  max_pods_per_node = 8\n\n  node_config {\n    preemptible = true\n  }\n}\n\n# firewall configuration used for connectivity testing\n\nresource \"google_compute_firewall\" \"vms_test_deny\" {\n  name    = \"gke-gke2-vms-test-deny\"\n  network = \"default\"\n  project = google_project.project.project_id\n\n  priority = 900\n\n  deny {\n    ports    = [\"1-1000\"]\n    protocol = \"udp\"\n  }\n\n  source_ranges = [\"10.128.0.0/9\"]\n\n  target_tags = google_container_cluster.gke2.node_config[0].tags\n\n  depends_on = [google_container_cluster.gke2]\n}\n\nresource \"google_compute_firewall\" \"all_test_deny\" {\n  name    = \"gke-gke2-all-test-deny\"\n  network = \"default\"\n  project = google_project.project.project_id\n\n  priority = 900\n\n  deny {\n    ports    = [\"1-1000\"]\n    protocol = \"tcp\"\n  }\n\n  source_ranges = [\"10.0.0.0/8\"]\n\n  target_tags = google_container_cluster.gke2.node_config[0].tags\n\n  depends_on = [google_container_cluster.gke2]\n}\n\noutput \"gke2_sa\" {\n  value = google_service_account.gke2_sa.name\n}\n"
  },
  {
    "path": "test-data/gke1/gke3.tf",
    "content": "/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n# Another custom role with just a few permissions\nresource \"google_project_iam_custom_role\" \"gke3_custom_role\" {\n  project     = google_project.project.project_id\n  role_id     = \"gke3_custom_role\"\n  title       = \"GKE 3 Custom Role\"\n  description = \"A description\"\n  permissions = [\n    # monitoring.viewer\n    \"cloudnotifications.activities.list\",\n  ]\n}\n\nresource \"google_service_account\" \"gke3_sa\" {\n  project      = google_project.project.project_id\n  account_id   = \"gke3sa\"\n  display_name = \"GKE 3 Service Account\"\n}\n\n\nresource \"google_project_iam_member\" \"gke3_sa\" {\n  project = google_project.project.project_id\n  role    = google_project_iam_custom_role.gke3_custom_role.name\n  member  = \"serviceAccount:${google_service_account.gke3_sa.email}\"\n}\n\nresource \"google_container_cluster\" \"gke3\" {\n  provider           = google-beta\n  project            = google_project.project.project_id\n  depends_on         = [google_project_service.container]\n  name               = \"gke3\"\n  location           = \"europe-west4\"\n  initial_node_count = 5\n  cluster_ipv4_cidr  = \"10.1.0.0/19\"\n\n  authenticator_groups_config {\n    security_group = \"gke-security-groups@gcpdiag.dev\"\n  }\n  node_config {\n    service_account = google_service_account.gke3_sa.email\n    oauth_scopes = [\n      \"https://www.googleapis.com/auth/cloud-platform\"\n    ]\n  }\n}\n\n# configure external ingress for web application\n\n# authenticate kubernetes provider with cluster\ndata \"google_client_config\" \"gke3\" {\n  depends_on = [google_container_cluster.gke3]\n}\n\ndata \"google_container_cluster\" \"gke3\" {\n  project    = google_project.project.project_id\n  name       = \"gke3\"\n  location   = \"europe-west4\"\n  depends_on = [google_container_cluster.gke3]\n}\n\nprovider \"kubernetes\" {\n  alias = \"gke3\"\n  host  = \"https://${data.google_container_cluster.gke3.endpoint}\"\n  token = data.google_client_config.gke3.access_token\n  cluster_ca_certificate = base64decode(\n    data.google_container_cluster.gke3.master_auth[0].cluster_ca_certificate,\n  )\n}\n\n# configure simple web application\nresource \"kubernetes_deployment\" \"web_at_gke3\" {\n  provider = kubernetes.gke3\n  metadata {\n    name      = \"web\"\n    namespace = \"default\"\n  }\n  spec {\n    replicas = 4\n    selector {\n      match_labels = {\n        run = \"web\"\n      }\n    }\n    template {\n      metadata {\n        labels = {\n          run = \"web\"\n        }\n      }\n      spec {\n        container {\n          image = \"us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0\"\n          name  = \"web\"\n          port {\n            container_port = 8080\n          }\n        }\n      }\n    }\n  }\n  depends_on = [google_container_cluster.gke3]\n}\n\nresource \"kubernetes_service\" \"web_at_gke3\" {\n  provider = kubernetes.gke3\n  metadata {\n    name      = \"web\"\n    namespace = \"default\"\n  }\n  spec {\n    selector = {\n      run = \"web\"\n    }\n    type = \"NodePort\"\n    port {\n      port        = 8080\n      target_port = 8080\n    }\n  }\n  depends_on = [google_container_cluster.gke3]\n}\n\nresource \"kubernetes_ingress_v1\" \"web_at_gke3\" {\n  provider = kubernetes.gke3\n  metadata {\n    name      = \"web\"\n    namespace = \"default\"\n  }\n  spec {\n    default_backend {\n      service {\n        name = \"web\"\n        port {\n          number = 8080\n        }\n      }\n    }\n  }\n  depends_on = [google_container_cluster.gke3]\n}\n"
  },
  {
    "path": "test-data/gke1/gke4.tf",
    "content": "resource \"google_container_cluster\" \"gke4\" {\n  provider           = google-beta\n  project            = google_project.project.project_id\n  depends_on         = [google_project_service.container]\n  name               = \"gke4\"\n  location           = \"europe-west4-a\"\n  initial_node_count = 1\n  ip_allocation_policy {\n    cluster_ipv4_cidr_block  = \"/14\"\n    services_ipv4_cidr_block = \"/20\"\n  }\n  private_cluster_config {\n    enable_private_nodes    = true\n    enable_private_endpoint = false\n    master_ipv4_cidr_block  = \"10.0.1.0/28\"\n  }\n  workload_identity_config {\n    workload_pool = \"${google_project.project.project_id}.svc.id.goog\"\n  }\n}\n\n# configure cloud nat\n\ndata \"google_compute_network\" \"default\" {\n  name    = \"default\"\n  project = google_project.project.project_id\n\n  depends_on = [google_project_service.compute]\n}\n\ndata \"google_compute_subnetwork\" \"default\" {\n  name    = \"default\"\n  project = google_project.project.project_id\n  region  = \"europe-west4\"\n\n  depends_on = [google_project_service.compute]\n}\n\nresource \"google_compute_router\" \"router\" {\n  name    = \"gke-default-router\"\n  project = google_project.project.project_id\n  region  = \"europe-west4\"\n  network = data.google_compute_network.default.id\n}\n\nresource \"google_compute_router_nat\" \"nat\" {\n  name                   = \"gke-default-router-nat\"\n  project                = google_project.project.project_id\n  router                 = google_compute_router.router.name\n  region                 = google_compute_router.router.region\n  nat_ip_allocate_option = \"AUTO_ONLY\"\n\n  # source_subnetwork_ip_ranges_to_nat = \"ALL_SUBNETWORKS_ALL_IP_RANGES\"\n\n  source_subnetwork_ip_ranges_to_nat = \"LIST_OF_SUBNETWORKS\"\n  subnetwork {\n    name                    = data.google_compute_subnetwork.default.id\n    source_ip_ranges_to_nat = [\"ALL_IP_RANGES\"]\n  }\n}\n\n# configure internal ingress for simple web application\n\n# authenticate kubernetes provider with cluster\ndata \"google_client_config\" \"gke4\" {\n  depends_on = [google_container_cluster.gke4]\n}\n\ndata \"google_container_cluster\" \"gke4\" {\n  project    = google_project.project.project_id\n  name       = \"gke4\"\n  location   = \"europe-west4-a\"\n  depends_on = [google_container_cluster.gke4]\n}\n\nprovider \"kubernetes\" {\n  alias = \"gke4\"\n  host  = \"https://${data.google_container_cluster.gke4.endpoint}\"\n  token = data.google_client_config.gke4.access_token\n  cluster_ca_certificate = base64decode(\n    data.google_container_cluster.gke4.master_auth[0].cluster_ca_certificate,\n  )\n}\n\n# configure simple web application\nresource \"kubernetes_deployment\" \"web_at_gke4\" {\n  provider = kubernetes.gke4\n  metadata {\n    name      = \"web\"\n    namespace = \"default\"\n  }\n  spec {\n    replicas = 2\n    selector {\n      match_labels = {\n        run = \"web\"\n      }\n    }\n    template {\n      metadata {\n        labels = {\n          run = \"web\"\n        }\n      }\n      spec {\n        container {\n          image = \"us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0\"\n          name  = \"web\"\n          port {\n            container_port = 8080\n          }\n        }\n      }\n    }\n  }\n  depends_on = [google_container_cluster.gke4]\n}\n\nresource \"kubernetes_service\" \"web_at_gke4\" {\n  provider = kubernetes.gke4\n  metadata {\n    name      = \"web\"\n    namespace = \"default\"\n    annotations = {\n      \"cloud.google.com/neg\" = jsonencode(\n        {\n          ingress = true\n        }\n      )\n    }\n  }\n  spec {\n    selector = {\n      run = \"web\"\n    }\n    type = \"NodePort\"\n    port {\n      port        = 8080\n      target_port = 8080\n    }\n  }\n  depends_on = [google_container_cluster.gke4]\n}\n\nresource \"kubernetes_ingress_v1\" \"web_at_gke4\" {\n  provider = kubernetes.gke4\n  metadata {\n    name      = \"web\"\n    namespace = \"default\"\n    annotations = {\n      \"kubernetes.io/ingress.class\" = \"gce-internal\"\n    }\n  }\n  spec {\n    default_backend {\n      service {\n        name = \"web\"\n        port {\n          number = 8080\n        }\n      }\n    }\n  }\n  depends_on = [google_container_cluster.gke4]\n}\n\nresource \"google_compute_firewall\" \"ingress_test_deny\" {\n  name    = \"gke-gke4-ingress-test-deny\"\n  network = \"default\"\n  project = google_project.project.project_id\n\n  priority = 900\n\n  deny {\n    ports    = [\"1024-10000\"]\n    protocol = \"tcp\"\n  }\n\n  source_ranges = [\"35.191.0.0/16\"]\n\n  depends_on = [google_project_service.compute]\n}\n"
  },
  {
    "path": "test-data/gke1/gke5.tf",
    "content": "# public autopilot cluster\nresource \"google_container_cluster\" \"autopilot-gke1\" {\n  provider           = google-beta\n  project            = google_project.project.project_id\n  depends_on         = [google_project_service.container]\n  name               = \"autopilot-gke1\"\n  location           = \"europe-west4\"\n  initial_node_count = 1\n  enable_autopilot   = true\n\n  # https://github.com/hashicorp/terraform-provider-google/issues/10782\n  ip_allocation_policy {}\n}\n\n# private autopilot cluster\nresource \"google_container_cluster\" \"autopilot-gke2\" {\n  provider           = google-beta\n  project            = google_project.project.project_id\n  depends_on         = [google_project_service.container]\n  name               = \"autopilot-gke2\"\n  location           = \"europe-west4\"\n  initial_node_count = 1\n  enable_autopilot   = true\n  ip_allocation_policy {\n    cluster_ipv4_cidr_block  = \"/17\"\n    services_ipv4_cidr_block = \"/22\"\n  }\n  private_cluster_config {\n    enable_private_nodes    = true\n    enable_private_endpoint = false\n    master_ipv4_cidr_block  = \"172.16.114.128/28\"\n  }\n}\n"
  },
  {
    "path": "test-data/gke1/gke6.tf",
    "content": "/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n# This is to test GKE with GPU.\nresource \"google_container_cluster\" \"gke6\" {\n  provider           = google\n  project            = google_project.project.project_id\n  depends_on         = [google_project_service.container]\n  name               = \"gke6\"\n  location           = \"europe-west4-a\"\n  initial_node_count = 1\n\n  node_config {\n    machine_type = \"n1-standard-2\"\n    guest_accelerator {\n      type  = \"nvidia-tesla-v100\"\n      count = 1\n    }\n  }\n\n  maintenance_policy {\n    recurring_window {\n      start_time = \"2023-02-01T09:00:00Z\"\n      end_time   = \"2023-02-01T17:00:00Z\"\n      recurrence = \"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR\"\n    }\n  }\n\n  resource_labels = {\n    gcpdiag_test = \"gke\"\n  }\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/backendServices.json",
    "content": "{\n  \"kind\": \"compute#backendServiceList\",\n  \"id\": \"projects/gcpdiag-gke1-aaaa/global/backendServices/\",\n  \"items\": [\n    {\n      \"kind\": \"compute#backendService\",\n      \"id\": \"3538406228716304628\",\n      \"creationTimestamp\": \"2022-08-25T07:24:27.356-07:00\",\n      \"name\": \"web-backend-service\",\n      \"description\": \"\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/backendServices/web-backend-service\",\n      \"backends\": [\n        {\n          \"group\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-east1-b/instanceGroups/lb-backend-example\",\n          \"balancingMode\": \"UTILIZATION\",\n          \"capacityScaler\": 1\n        }\n      ],\n      \"healthChecks\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/healthChecks/http-basic-check\"\n      ],\n      \"timeoutSec\": 30,\n      \"port\": 80,\n      \"protocol\": \"HTTP\",\n      \"fingerprint\": \"uf9A59CplJc=\",\n      \"portName\": \"http\",\n      \"enableCDN\": false,\n      \"sessionAffinity\": \"NONE\",\n      \"affinityCookieTtlSec\": 0,\n      \"loadBalancingScheme\": \"EXTERNAL\",\n      \"connectionDraining\": {\n        \"drainingTimeoutSec\": 0\n      },\n      \"iap\": {\n        \"enabled\": false,\n        \"oauth2ClientId\": \"\",\n        \"oauth2ClientSecretSha256\": \"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\"\n      }\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/backendServices/\"\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/compute-addresses.json",
    "content": "{\n  \"kind\": \"compute#addressAggregatedList\",\n  \"id\": \"projects/gcpdiag-gke1-aaaa/aggregated/addresses\",\n  \"items\": {\n    \"regions/us-central1\": {\n      \"addresses\": [\n        {\n          \"kind\": \"compute#address\",\n          \"id\": \"7997470120382759841\",\n          \"creationTimestamp\": \"2024-01-07T07:03:42.222-08:00\",\n          \"name\": \"address1\",\n          \"description\": \"\",\n          \"address\": \"10.128.0.26\",\n          \"status\": \"IN_USE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-central1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-central1/addresses/address1\",\n          \"users\": [\n            \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-central1/forwardingRules/gk3-us-central1-composer-test-7ff47cd0-g-c4d8afc4-8j765f778-pe\"\n          ],\n          \"networkTier\": \"PREMIUM\",\n          \"labelFingerprint\": \"42WmS008rSM=\",\n          \"addressType\": \"INTERNAL\",\n          \"purpose\": \"GCE_ENDPOINT\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-central1/subnetworks/default\"\n        },\n        {\n          \"kind\": \"compute#address\",\n          \"id\": \"5823057272250092066\",\n          \"creationTimestamp\": \"2024-01-03T06:53:01.418-08:00\",\n          \"name\": \"address2\",\n          \"description\": \"\",\n          \"address\": \"192.168.0.18\",\n          \"status\": \"RESERVED\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-central1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-central1/addresses/address2\",\n          \"networkTier\": \"PREMIUM\",\n          \"labelFingerprint\": \"42WmS008rSM=\",\n          \"addressType\": \"INTERNAL\",\n          \"purpose\": \"GCE_ENDPOINT\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-central1/subnetworks/subnet-us1\"\n        },\n        {\n          \"kind\": \"compute#address\",\n          \"id\": \"2295464241063840289\",\n          \"creationTimestamp\": \"2024-01-03T06:53:02.536-08:00\",\n          \"name\": \"address3\",\n          \"description\": \"\",\n          \"address\": \"192.168.0.26\",\n          \"status\": \"RESERVED\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-central1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-central1/addresses/address3\",\n          \"networkTier\": \"PREMIUM\",\n          \"labelFingerprint\": \"42WmS008rSM=\",\n          \"addressType\": \"INTERNAL\",\n          \"purpose\": \"GCE_ENDPOINT\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-central1/subnetworks/subnet-us1\"\n        }\n      ]\n    },\n    \"regions/asia-east1\": {\n      \"addresses\": [\n        {\n          \"kind\": \"compute#address\",\n          \"id\": \"5969362064718299255\",\n          \"creationTimestamp\": \"2024-01-05T00:32:24.377-08:00\",\n          \"name\": \"address4\",\n          \"description\": \"\",\n          \"address\": \"10.0.3.3\",\n          \"status\": \"RESERVED\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-east1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-east1/addresses/address4\",\n          \"networkTier\": \"PREMIUM\",\n          \"labelFingerprint\": \"42WmS008rSM=\",\n          \"ipVersion\": \"IPV4\",\n          \"addressType\": \"INTERNAL\",\n          \"purpose\": \"GCE_ENDPOINT\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-east1/subnetworks/sub-2\"\n        }\n      ]\n    }\n  },\n    \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/aggregated/addresses\"\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/compute-disks-europe-west1-b.json",
    "content": "{\n  \"kind\": \"compute#diskList\",\n  \"id\": \"projects/gcpdiag-gke1-aaaa/zones/europe-west1-b/disks\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west1-b/disks\"\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/compute-disks-europe-west4-a.json",
    "content": "{\n  \"kind\": \"compute#diskList\",\n  \"id\": \"projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/disks\",\n  \"items\": [\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"4441671901552043189\",\n      \"creationTimestamp\": \"2022-05-10T05:28:11.507-07:00\",\n      \"name\": \"gke-gke1-default-pool-04b3bdb9-0skf\",\n      \"sizeGb\": \"100\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/disks/gke-gke1-default-pool-04b3bdb9-0skf\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-12110-gke2000-cos-89-16108-604-19-v220317-c-pre\",\n      \"sourceImageId\": \"8040052912969817984\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/diskTypes/pd-standard\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"UEFI_COMPATIBLE\"\n        },\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        },\n        {\n          \"type\": \"SEV_CAPABLE\"\n        },\n        {\n          \"type\": \"SECURE_BOOT\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2022-05-10T05:28:11.508-07:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instances/gke-gke1-default-pool-04b3bdb9-0skf\"\n      ],\n      \"labels\": {\n        \"foo\": \"bar\",\n        \"goog-gke-node\": \"\"\n      },\n      \"labelFingerprint\": \"yaFVeZPybGM=\",\n      \"licenseCodes\": [\n        \"1001003\",\n        \"1001010\",\n        \"166739712233658766\",\n        \"6880041984096540132\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\"\n    },\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"8124138391120372870\",\n      \"creationTimestamp\": \"2022-05-10T05:28:26.282-07:00\",\n      \"name\": \"gke-gke2-default-pool-30a8ab02-58xp\",\n      \"sizeGb\": \"100\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/disks/gke-gke2-default-pool-30a8ab02-58xp\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-12110-gke2000-cos-89-16108-604-19-v220317-c-pre\",\n      \"sourceImageId\": \"8040052912969817984\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/diskTypes/pd-standard\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"UEFI_COMPATIBLE\"\n        },\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        },\n        {\n          \"type\": \"SEV_CAPABLE\"\n        },\n        {\n          \"type\": \"SECURE_BOOT\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2022-05-10T05:28:26.283-07:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instances/gke-gke2-default-pool-30a8ab02-58xp\"\n      ],\n      \"labels\": {\n        \"goog-gke-node\": \"\"\n      },\n      \"labelFingerprint\": \"2ixRno2sGuM=\",\n      \"licenseCodes\": [\n        \"1001003\",\n        \"1001010\",\n        \"166739712233658766\",\n        \"6880041984096540132\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\"\n    },\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"34712422775776388\",\n      \"creationTimestamp\": \"2022-05-10T05:28:27.663-07:00\",\n      \"name\": \"gke-gke3-default-pool-29bdaa65-g3jz\",\n      \"sizeGb\": \"100\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/disks/gke-gke3-default-pool-29bdaa65-g3jz\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-12110-gke2000-cos-89-16108-604-19-v220317-c-pre\",\n      \"sourceImageId\": \"8040052912969817984\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/diskTypes/pd-standard\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"UEFI_COMPATIBLE\"\n        },\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        },\n        {\n          \"type\": \"SEV_CAPABLE\"\n        },\n        {\n          \"type\": \"SECURE_BOOT\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2022-05-10T05:28:27.663-07:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instances/gke-gke3-default-pool-29bdaa65-g3jz\"\n      ],\n      \"labels\": {\n        \"goog-gke-node\": \"\"\n      },\n      \"labelFingerprint\": \"2ixRno2sGuM=\",\n      \"licenseCodes\": [\n        \"1001003\",\n        \"1001010\",\n        \"166739712233658766\",\n        \"6880041984096540132\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\"\n    },\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"6222679188618863647\",\n      \"creationTimestamp\": \"2022-05-10T05:30:41.407-07:00\",\n      \"name\": \"gke-gke4-default-pool-2906fccc-0bqt\",\n      \"sizeGb\": \"100\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/disks/gke-gke4-default-pool-2906fccc-0bqt\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-12110-gke2000-cos-89-16108-604-19-v220317-c-pre\",\n      \"sourceImageId\": \"8040052912969817984\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/diskTypes/pd-standard\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"UEFI_COMPATIBLE\"\n        },\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        },\n        {\n          \"type\": \"SEV_CAPABLE\"\n        },\n        {\n          \"type\": \"SECURE_BOOT\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2022-05-10T05:30:41.408-07:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instances/gke-gke4-default-pool-2906fccc-0bqt\"\n      ],\n      \"labels\": {\n        \"goog-gke-node\": \"\"\n      },\n      \"labelFingerprint\": \"2ixRno2sGuM=\",\n      \"licenseCodes\": [\n        \"1001003\",\n        \"1001010\",\n        \"166739712233658766\",\n        \"6880041984096540132\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\"\n    },\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"4138877407263712298\",\n      \"creationTimestamp\": \"2022-05-10T05:29:57.808-07:00\",\n      \"name\": \"gke-gke6-default-pool-2cd637f5-fdtn\",\n      \"sizeGb\": \"100\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/disks/gke-gke6-default-pool-2cd637f5-fdtn\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-12110-gke2000-cos-89-16108-604-19-v220317-c-pre-nvda\",\n      \"sourceImageId\": \"2684852521677692810\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/diskTypes/pd-standard\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"UEFI_COMPATIBLE\"\n        },\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        },\n        {\n          \"type\": \"SEV_CAPABLE\"\n        },\n        {\n          \"type\": \"SECURE_BOOT\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2022-05-10T05:29:57.809-07:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instances/gke-gke6-default-pool-2cd637f5-fdtn\"\n      ],\n      \"labels\": {\n        \"gcpdiag_test\": \"gke\",\n        \"goog-gke-node\": \"\"\n      },\n      \"labelFingerprint\": \"PKb1LeSIlTc=\",\n      \"licenseCodes\": [\n        \"1001003\",\n        \"1001010\",\n        \"166739712233658766\",\n        \"6880041984096540132\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/disks\"\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/compute-effective-firewalls-default.json",
    "content": "{\n  \"firewalls\": [\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"4836848367819690668\",\n      \"creationTimestamp\": \"2022-08-19T08:29:07.600-07:00\",\n      \"name\": \"gke-gke6-44734575-ssh\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n      \"priority\": 1000,\n      \"sourceRanges\": [\n        \"34.141.129.122/32\"\n      ],\n      \"targetTags\": [\n        \"gke-gke6-44734575-node\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"22\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-gke6-44734575-ssh\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"5133291219634822972\",\n      \"creationTimestamp\": \"2023-05-09T12:41:07.620-07:00\",\n      \"name\": \"gke-gke1-c10b95be-exkubelet\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n      \"priority\": 1000,\n      \"sourceRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"targetTags\": [\n        \"gke-gke1-c10b95be-node\"\n      ],\n      \"denied\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"10255\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-gke1-c10b95be-exkubelet\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"9079063342186893856\",\n      \"creationTimestamp\": \"2022-08-19T08:31:27.432-07:00\",\n      \"name\": \"gke-autopilot-gke2-86b60f8a-master\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n      \"priority\": 1000,\n      \"sourceRanges\": [\n        \"172.16.114.128/28\"\n      ],\n      \"targetTags\": [\n        \"gke-autopilot-gke2-86b60f8a-node\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"10250\",\n            \"443\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-autopilot-gke2-86b60f8a-master\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"5182252197541614417\",\n      \"creationTimestamp\": \"2023-05-08T10:13:34.631-07:00\",\n      \"name\": \"k8s-fw-l7--086980d560943668\",\n      \"description\": \"GCE L7 firewall rule\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n      \"priority\": 1000,\n      \"sourceRanges\": [\n        \"130.211.0.0/22\",\n        \"35.191.0.0/16\"\n      ],\n      \"targetTags\": [\n        \"gke-gke3-15974e23-node\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"30000-32767\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/k8s-fw-l7--086980d560943668\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"8778554569341048908\",\n      \"creationTimestamp\": \"2023-05-08T09:43:15.426-07:00\",\n      \"name\": \"gke-gke3-15974e23-inkubelet\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n      \"priority\": 999,\n      \"sourceRanges\": [\n        \"10.1.0.0/19\"\n      ],\n      \"sourceTags\": [\n        \"gke-gke3-15974e23-node\"\n      ],\n      \"targetTags\": [\n        \"gke-gke3-15974e23-node\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"10255\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-gke3-15974e23-inkubelet\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"4067421465120740027\",\n      \"creationTimestamp\": \"2022-08-19T08:29:24.937-07:00\",\n      \"name\": \"gke-gke2-12cd17cd-ssh\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n      \"priority\": 1000,\n      \"sourceRanges\": [\n        \"34.90.21.34/32\",\n        \"35.204.19.74/32\",\n        \"34.90.215.178/32\"\n      ],\n      \"targetTags\": [\n        \"gke-gke2-12cd17cd-node\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"22\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-gke2-12cd17cd-ssh\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"3597968916736156282\",\n      \"creationTimestamp\": \"2023-05-08T09:00:21.426-07:00\",\n      \"name\": \"gke-gke6-ae0d6714-exkubelet\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n      \"priority\": 1000,\n      \"sourceRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"targetTags\": [\n        \"gke-gke6-ae0d6714-node\"\n      ],\n      \"denied\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"10255\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-gke6-ae0d6714-exkubelet\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"4726893399701066394\",\n      \"creationTimestamp\": \"2022-08-19T08:29:57.556-07:00\",\n      \"name\": \"gke-autopilot-gke1-f7bb291d-ssh\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n      \"priority\": 1000,\n      \"sourceRanges\": [\n        \"34.91.149.118/32\",\n        \"34.147.126.99/32\",\n        \"34.90.230.30/32\"\n      ],\n      \"targetTags\": [\n        \"gke-autopilot-gke1-f7bb291d-node\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"22\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-autopilot-gke1-f7bb291d-ssh\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"2039920923990168468\",\n      \"creationTimestamp\": \"2022-08-19T08:34:19.807-07:00\",\n      \"name\": \"gke-gke2-all-test-deny\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n      \"priority\": 900,\n      \"sourceRanges\": [\n        \"10.0.0.0/8\"\n      ],\n      \"targetTags\": [\n        \"gke-gke2-custom-tag\"\n      ],\n      \"denied\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"1-1000\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-gke2-all-test-deny\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"5990185058302369596\",\n      \"creationTimestamp\": \"2023-05-09T12:41:07.832-07:00\",\n      \"name\": \"gke-gke1-c10b95be-vms\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n      \"priority\": 1000,\n      \"sourceRanges\": [\n        \"10.128.0.0/9\",\n        \"192.168.0.0/24\"\n      ],\n      \"targetTags\": [\n        \"gke-gke1-c10b95be-node\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"1-65535\"\n          ]\n        },\n        {\n          \"IPProtocol\": \"udp\",\n          \"ports\": [\n            \"1-65535\"\n          ]\n        },\n        {\n          \"IPProtocol\": \"icmp\"\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-gke1-c10b95be-vms\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"2813774035300783084\",\n      \"creationTimestamp\": \"2022-08-19T08:32:19.454-07:00\",\n      \"name\": \"gke-gke4-3520a9df-vms\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n      \"priority\": 1000,\n      \"sourceRanges\": [\n        \"10.128.0.0/9\"\n      ],\n      \"targetTags\": [\n        \"gke-gke4-3520a9df-node\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"icmp\"\n        },\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"1-65535\"\n          ]\n        },\n        {\n          \"IPProtocol\": \"udp\",\n          \"ports\": [\n            \"1-65535\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-gke4-3520a9df-vms\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"3144871397702111776\",\n      \"creationTimestamp\": \"2022-08-19T08:31:27.556-07:00\",\n      \"name\": \"gke-autopilot-gke2-86b60f8a-all\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n      \"priority\": 1000,\n      \"sourceRanges\": [\n        \"10.60.0.0/17\"\n      ],\n      \"targetTags\": [\n        \"gke-autopilot-gke2-86b60f8a-node\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\"\n        },\n        {\n          \"IPProtocol\": \"udp\"\n        },\n        {\n          \"IPProtocol\": \"icmp\"\n        },\n        {\n          \"IPProtocol\": \"esp\"\n        },\n        {\n          \"IPProtocol\": \"ah\"\n        },\n        {\n          \"IPProtocol\": \"sctp\"\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-autopilot-gke2-86b60f8a-all\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"2544394691518010043\",\n      \"creationTimestamp\": \"2022-08-19T08:29:24.939-07:00\",\n      \"name\": \"gke-gke2-12cd17cd-all\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n      \"priority\": 1000,\n      \"sourceRanges\": [\n        \"10.4.0.0/14\"\n      ],\n      \"targetTags\": [\n        \"gke-gke2-12cd17cd-node\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"icmp\"\n        },\n        {\n          \"IPProtocol\": \"esp\"\n        },\n        {\n          \"IPProtocol\": \"ah\"\n        },\n        {\n          \"IPProtocol\": \"sctp\"\n        },\n        {\n          \"IPProtocol\": \"tcp\"\n        },\n        {\n          \"IPProtocol\": \"udp\"\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-gke2-12cd17cd-all\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"6611309922841043578\",\n      \"creationTimestamp\": \"2023-05-08T09:00:21.498-07:00\",\n      \"name\": \"gke-gke6-ae0d6714-all\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n      \"priority\": 1000,\n      \"sourceRanges\": [\n        \"10.12.0.0/14\"\n      ],\n      \"targetTags\": [\n        \"gke-gke6-ae0d6714-node\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"ah\"\n        },\n        {\n          \"IPProtocol\": \"sctp\"\n        },\n        {\n          \"IPProtocol\": \"tcp\"\n        },\n        {\n          \"IPProtocol\": \"udp\"\n        },\n        {\n          \"IPProtocol\": \"icmp\"\n        },\n        {\n          \"IPProtocol\": \"esp\"\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-gke6-ae0d6714-all\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"7739524705409962988\",\n      \"creationTimestamp\": \"2022-08-19T08:32:19.252-07:00\",\n      \"name\": \"gke-gke4-3520a9df-all\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n      \"priority\": 1000,\n      \"sourceRanges\": [\n        \"10.56.0.0/14\"\n      ],\n      \"targetTags\": [\n        \"gke-gke4-3520a9df-node\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"sctp\"\n        },\n        {\n          \"IPProtocol\": \"tcp\"\n        },\n        {\n          \"IPProtocol\": \"udp\"\n        },\n        {\n          \"IPProtocol\": \"icmp\"\n        },\n        {\n          \"IPProtocol\": \"esp\"\n        },\n        {\n          \"IPProtocol\": \"ah\"\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-gke4-3520a9df-all\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"4960132874292895548\",\n      \"creationTimestamp\": \"2023-05-09T12:41:07.596-07:00\",\n      \"name\": \"gke-gke1-c10b95be-all\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n      \"priority\": 1000,\n      \"sourceRanges\": [\n        \"192.168.1.0/24\"\n      ],\n      \"targetTags\": [\n        \"gke-gke1-c10b95be-node\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\"\n        },\n        {\n          \"IPProtocol\": \"udp\"\n        },\n        {\n          \"IPProtocol\": \"icmp\"\n        },\n        {\n          \"IPProtocol\": \"esp\"\n        },\n        {\n          \"IPProtocol\": \"ah\"\n        },\n        {\n          \"IPProtocol\": \"sctp\"\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-gke1-c10b95be-all\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"2315135668016423546\",\n      \"creationTimestamp\": \"2023-05-08T09:00:21.714-07:00\",\n      \"name\": \"gke-gke6-ae0d6714-vms\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n      \"priority\": 1000,\n      \"sourceRanges\": [\n        \"10.128.0.0/9\"\n      ],\n      \"targetTags\": [\n        \"gke-gke6-ae0d6714-node\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"icmp\"\n        },\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"1-65535\"\n          ]\n        },\n        {\n          \"IPProtocol\": \"udp\",\n          \"ports\": [\n            \"1-65535\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-gke6-ae0d6714-vms\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"2509592257985909740\",\n      \"creationTimestamp\": \"2022-08-19T08:32:19.149-07:00\",\n      \"name\": \"gke-gke4-3520a9df-master\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n      \"priority\": 1000,\n      \"sourceRanges\": [\n        \"10.0.1.0/28\"\n      ],\n      \"targetTags\": [\n        \"gke-gke4-3520a9df-node\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"10250\",\n            \"443\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-gke4-3520a9df-master\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"8287498013380842772\",\n      \"creationTimestamp\": \"2022-08-19T08:27:55.939-07:00\",\n      \"name\": \"default-allow-ssh\",\n      \"description\": \"Allow SSH from anywhere\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n      \"priority\": 65534,\n      \"sourceRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"22\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/default-allow-ssh\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"6732398889299908684\",\n      \"creationTimestamp\": \"2023-05-08T09:43:15.408-07:00\",\n      \"name\": \"gke-gke3-15974e23-all\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n      \"priority\": 1000,\n      \"sourceRanges\": [\n        \"10.1.0.0/19\"\n      ],\n      \"targetTags\": [\n        \"gke-gke3-15974e23-node\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"ah\"\n        },\n        {\n          \"IPProtocol\": \"sctp\"\n        },\n        {\n          \"IPProtocol\": \"tcp\"\n        },\n        {\n          \"IPProtocol\": \"udp\"\n        },\n        {\n          \"IPProtocol\": \"icmp\"\n        },\n        {\n          \"IPProtocol\": \"esp\"\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-gke3-15974e23-all\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"5045719177249296928\",\n      \"creationTimestamp\": \"2022-08-19T08:31:27.952-07:00\",\n      \"name\": \"gke-autopilot-gke2-86b60f8a-vms\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n      \"priority\": 1000,\n      \"sourceRanges\": [\n        \"10.128.0.0/9\"\n      ],\n      \"targetTags\": [\n        \"gke-autopilot-gke2-86b60f8a-node\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"icmp\"\n        },\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"1-65535\"\n          ]\n        },\n        {\n          \"IPProtocol\": \"udp\",\n          \"ports\": [\n            \"1-65535\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-autopilot-gke2-86b60f8a-vms\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"1153852545006965402\",\n      \"creationTimestamp\": \"2022-08-19T08:29:57.822-07:00\",\n      \"name\": \"gke-autopilot-gke1-f7bb291d-vms\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n      \"priority\": 1000,\n      \"sourceRanges\": [\n        \"10.128.0.0/9\"\n      ],\n      \"targetTags\": [\n        \"gke-autopilot-gke1-f7bb291d-node\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"1-65535\"\n          ]\n        },\n        {\n          \"IPProtocol\": \"udp\",\n          \"ports\": [\n            \"1-65535\"\n          ]\n        },\n        {\n          \"IPProtocol\": \"icmp\"\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-autopilot-gke1-f7bb291d-vms\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"8470598718386738452\",\n      \"creationTimestamp\": \"2022-08-19T08:27:55.917-07:00\",\n      \"name\": \"default-allow-internal\",\n      \"description\": \"Allow internal traffic on the default network\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n      \"priority\": 65534,\n      \"sourceRanges\": [\n        \"10.128.0.0/9\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"0-65535\"\n          ]\n        },\n        {\n          \"IPProtocol\": \"udp\",\n          \"ports\": [\n            \"0-65535\"\n          ]\n        },\n        {\n          \"IPProtocol\": \"icmp\"\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/default-allow-internal\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"12687766025705548\",\n      \"creationTimestamp\": \"2023-05-08T09:43:15.410-07:00\",\n      \"name\": \"gke-gke3-15974e23-exkubelet\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n      \"priority\": 1000,\n      \"sourceRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"targetTags\": [\n        \"gke-gke3-15974e23-node\"\n      ],\n      \"denied\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"10255\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-gke3-15974e23-exkubelet\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"8942050874672419514\",\n      \"creationTimestamp\": \"2022-08-19T08:29:25.162-07:00\",\n      \"name\": \"gke-gke2-12cd17cd-vms\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n      \"priority\": 1000,\n      \"sourceRanges\": [\n        \"10.128.0.0/9\"\n      ],\n      \"targetTags\": [\n        \"gke-gke2-12cd17cd-node\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"icmp\"\n        },\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"1-65535\"\n          ]\n        },\n        {\n          \"IPProtocol\": \"udp\",\n          \"ports\": [\n            \"1-65535\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-gke2-12cd17cd-vms\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"4377979765631620372\",\n      \"creationTimestamp\": \"2022-08-19T08:27:55.962-07:00\",\n      \"name\": \"default-allow-rdp\",\n      \"description\": \"Allow RDP from anywhere\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n      \"priority\": 65534,\n      \"sourceRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"3389\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/default-allow-rdp\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"8604329212411777690\",\n      \"creationTimestamp\": \"2022-08-19T08:29:57.559-07:00\",\n      \"name\": \"gke-autopilot-gke1-f7bb291d-all\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n      \"priority\": 1000,\n      \"sourceRanges\": [\n        \"10.85.0.0/17\"\n      ],\n      \"targetTags\": [\n        \"gke-autopilot-gke1-f7bb291d-node\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\"\n        },\n        {\n          \"IPProtocol\": \"udp\"\n        },\n        {\n          \"IPProtocol\": \"icmp\"\n        },\n        {\n          \"IPProtocol\": \"esp\"\n        },\n        {\n          \"IPProtocol\": \"ah\"\n        },\n        {\n          \"IPProtocol\": \"sctp\"\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-autopilot-gke1-f7bb291d-all\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"8001462545906012918\",\n      \"creationTimestamp\": \"2022-08-19T08:28:25.987-07:00\",\n      \"name\": \"gke-gke4-ingress-test-deny\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n      \"priority\": 900,\n      \"sourceRanges\": [\n        \"35.191.0.0/16\"\n      ],\n      \"denied\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"1024-10000\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-gke4-ingress-test-deny\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"4904669075404362644\",\n      \"creationTimestamp\": \"2022-08-19T08:34:19.924-07:00\",\n      \"name\": \"gke-gke2-vms-test-deny\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n      \"priority\": 900,\n      \"sourceRanges\": [\n        \"10.128.0.0/9\"\n      ],\n      \"targetTags\": [\n        \"gke-gke2-custom-tag\"\n      ],\n      \"denied\": [\n        {\n          \"IPProtocol\": \"udp\",\n          \"ports\": [\n            \"1-1000\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-gke2-vms-test-deny\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"8772404347971871354\",\n      \"creationTimestamp\": \"2023-05-08T09:00:21.369-07:00\",\n      \"name\": \"gke-gke6-ae0d6714-inkubelet\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n      \"priority\": 999,\n      \"sourceRanges\": [\n        \"10.12.0.0/14\"\n      ],\n      \"sourceTags\": [\n        \"gke-gke6-ae0d6714-node\"\n      ],\n      \"targetTags\": [\n        \"gke-gke6-ae0d6714-node\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"10255\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-gke6-ae0d6714-inkubelet\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"4293052083025157948\",\n      \"creationTimestamp\": \"2023-05-09T12:41:07.707-07:00\",\n      \"name\": \"gke-gke1-c10b95be-inkubelet\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n      \"priority\": 999,\n      \"sourceRanges\": [\n        \"192.168.1.0/24\"\n      ],\n      \"sourceTags\": [\n        \"gke-gke1-c10b95be-node\"\n      ],\n      \"targetTags\": [\n        \"gke-gke1-c10b95be-node\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"10255\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-gke1-c10b95be-inkubelet\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"4020290834771612948\",\n      \"creationTimestamp\": \"2022-08-19T08:27:55.983-07:00\",\n      \"name\": \"default-allow-icmp\",\n      \"description\": \"Allow ICMP from anywhere\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n      \"priority\": 65534,\n      \"sourceRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"icmp\"\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/default-allow-icmp\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"5958356284032194636\",\n      \"creationTimestamp\": \"2023-05-08T09:43:15.679-07:00\",\n      \"name\": \"gke-gke3-15974e23-vms\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n      \"priority\": 1000,\n      \"sourceRanges\": [\n        \"10.128.0.0/9\"\n      ],\n      \"targetTags\": [\n        \"gke-gke3-15974e23-node\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"icmp\"\n        },\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"1-65535\"\n          ]\n        },\n        {\n          \"IPProtocol\": \"udp\",\n          \"ports\": [\n            \"1-65535\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/gke-gke3-15974e23-vms\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"4119149565902459121\",\n      \"creationTimestamp\": \"2022-08-19T08:37:02.572-07:00\",\n      \"name\": \"k8s-fw-l7--8b12f35ea8442830\",\n      \"description\": \"GCE L7 firewall rule\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n      \"priority\": 1000,\n      \"sourceRanges\": [\n        \"130.211.0.0/22\",\n        \"35.191.0.0/16\"\n      ],\n      \"targetTags\": [\n        \"gke-gke4-3520a9df-node\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"8080\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/firewalls/k8s-fw-l7--8b12f35ea8442830\"\n    }\n  ],\n  \"firewallPolicys\": [\n    {\n      \"name\": \"902824820698\",\n      \"type\": \"HIERARCHY\",\n      \"shortName\": \"default-firewall-policy\",\n      \"displayName\": \"default-firewall-policy\",\n      \"rules\": [\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 0,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"34.82.66.0/24\",\n              \"34.82.90.0/24\",\n              \"34.82.98.0/24\",\n              \"34.82.160.0/24\",\n              \"34.82.166.128/25\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"tcp\"\n              },\n              {\n                \"ipProtocol\": \"udp\"\n              }\n            ]\n          },\n          \"action\": \"allow\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 1,\n          \"match\": {\n            \"destIpRanges\": [\n              \"34.83.160.25/32\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"tcp\"\n              },\n              {\n                \"ipProtocol\": \"udp\"\n              }\n            ]\n          },\n          \"action\": \"allow\",\n          \"direction\": \"EGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 2,\n          \"match\": {\n            \"destIpRanges\": [\n              \"34.66.22.47/32\",\n              \"34.66.157.124/32\",\n              \"34.66.164.57/32\",\n              \"34.66.184.118/32\",\n              \"34.66.236.234/32\",\n              \"34.73.86.171/32\",\n              \"34.73.183.215/32\",\n              \"34.76.42.179/32\",\n              \"34.76.71.13/32\",\n              \"34.76.143.192/32\",\n              \"34.76.244.236/32\",\n              \"35.184.49.127/32\",\n              \"35.184.70.255/32\",\n              \"35.184.144.234/32\",\n              \"35.184.228.49/32\",\n              \"35.185.65.36/32\",\n              \"35.185.252.238/32\",\n              \"35.186.160.196/32\",\n              \"35.186.167.183/32\",\n              \"35.186.182.184/32\",\n              \"35.187.2.178/32\",\n              \"35.187.82.234/32\",\n              \"35.187.121.21/32\",\n              \"35.187.169.157/32\",\n              \"35.187.189.105/32\",\n              \"35.188.28.255/32\",\n              \"35.188.58.237/32\",\n              \"35.188.97.47/32\",\n              \"35.188.225.200/32\",\n              \"35.188.244.131/32\",\n              \"35.189.66.48/32\",\n              \"35.189.85.77/32\",\n              \"35.189.87.27/32\",\n              \"35.189.87.89/32\",\n              \"35.189.88.203/32\",\n              \"35.189.93.96/32\",\n              \"35.189.99.57/32\",\n              \"35.189.109.1/32\",\n              \"35.189.114.89/32\",\n              \"35.189.228.0/32\",\n              \"35.189.236.145/32\",\n              \"35.190.139.214/32\",\n              \"35.190.154.170/32\",\n              \"35.190.196.20/32\",\n              \"35.192.2.32/32\",\n              \"35.192.62.107/32\",\n              \"35.192.160.155/32\",\n              \"35.192.233.245/32\",\n              \"35.192.235.233/32\",\n              \"35.193.56.224/32\",\n              \"35.193.76.157/32\",\n              \"35.193.123.0/32\",\n              \"35.193.195.38/32\",\n              \"35.193.200.222/32\",\n              \"35.193.229.109/32\",\n              \"35.193.242.255/32\",\n              \"35.194.66.217/32\",\n              \"35.194.70.28/32\",\n              \"35.195.3.83/32\",\n              \"35.195.53.78/32\",\n              \"35.195.68.98/32\",\n              \"35.195.101.29/32\",\n              \"35.195.113.177/32\",\n              \"35.195.114.253/32\",\n              \"35.195.123.113/32\",\n              \"35.195.140.251/32\",\n              \"35.195.156.23/32\",\n              \"35.195.206.55/32\",\n              \"35.196.5.130/32\",\n              \"35.196.20.59/32\",\n              \"35.196.89.212/32\",\n              \"35.196.115.11/32\",\n              \"35.196.138.125/32\",\n              \"35.196.140.152/32\",\n              \"35.196.217.248/32\",\n              \"35.196.220.144/32\",\n              \"35.197.30.80/32\",\n              \"35.197.38.28/32\",\n              \"35.197.50.103/32\",\n              \"35.197.53.127/32\",\n              \"35.197.55.215/32\",\n              \"35.197.56.191/32\",\n              \"35.197.65.24/32\",\n              \"35.197.75.108/32\",\n              \"35.197.85.13/32\",\n              \"35.197.107.117/32\",\n              \"35.197.108.157/32\",\n              \"35.197.112.50/32\",\n              \"35.197.115.114/32\",\n              \"35.197.125.130/32\",\n              \"35.197.192.22/32\",\n              \"35.197.205.253/32\",\n              \"35.197.210.140/32\",\n              \"35.197.226.207/32\",\n              \"35.197.233.133/32\",\n              \"35.197.246.39/32\",\n              \"35.197.252.73/32\",\n              \"35.197.252.248/32\",\n              \"35.197.254.244/32\",\n              \"35.198.78.35/32\",\n              \"35.198.79.98/32\",\n              \"35.198.84.172/32\",\n              \"35.198.106.28/32\",\n              \"35.198.140.217/32\",\n              \"35.198.158.161/32\",\n              \"35.198.159.26/32\",\n              \"35.199.12.20/32\",\n              \"35.199.27.54/32\",\n              \"35.199.39.165/32\",\n              \"35.199.40.52/32\",\n              \"35.199.54.197/32\",\n              \"35.199.56.100/32\",\n              \"35.199.58.90/32\",\n              \"35.199.154.123/32\",\n              \"35.199.162.95/32\",\n              \"35.199.162.137/32\",\n              \"35.199.175.152/32\",\n              \"35.202.32.145/32\",\n              \"35.202.62.128/32\",\n              \"35.202.98.132/32\",\n              \"35.202.118.10/32\",\n              \"35.202.240.183/32\",\n              \"35.203.142.250/32\",\n              \"35.203.145.190/32\",\n              \"35.203.151.233/32\",\n              \"35.203.155.169/32\",\n              \"35.203.161.173/32\",\n              \"35.203.175.233/32\",\n              \"35.203.184.97/32\",\n              \"35.203.191.135/32\",\n              \"35.204.1.221/32\",\n              \"35.204.12.60/32\",\n              \"35.204.14.12/32\",\n              \"35.204.15.55/32\",\n              \"35.204.15.122/32\",\n              \"35.204.24.135/32\",\n              \"35.204.37.76/32\",\n              \"35.204.46.52/32\",\n              \"35.204.50.90/32\",\n              \"35.204.52.86/32\",\n              \"35.204.60.99/32\",\n              \"35.204.66.9/32\",\n              \"35.204.66.56/32\",\n              \"35.204.74.72/32\",\n              \"35.204.78.201/32\",\n              \"35.204.88.26/32\",\n              \"35.204.98.108/32\",\n              \"35.204.105.22/32\",\n              \"35.204.108.151/32\",\n              \"35.204.115.3/32\",\n              \"35.204.119.162/32\",\n              \"35.204.122.243/32\",\n              \"35.204.123.133/32\",\n              \"35.204.126.58/32\",\n              \"35.204.126.80/32\",\n              \"35.204.129.200/32\",\n              \"35.204.130.59/32\",\n              \"35.204.131.109/32\",\n              \"35.204.141.187/32\",\n              \"35.204.142.195/32\",\n              \"35.204.152.168/32\",\n              \"35.204.162.183/32\",\n              \"35.204.167.122/32\",\n              \"35.204.169.211/32\",\n              \"35.204.172.80/32\",\n              \"35.204.178.217/32\",\n              \"35.204.179.111/32\",\n              \"35.204.190.183/32\",\n              \"35.204.195.27/32\",\n              \"35.204.195.49/32\",\n              \"35.204.196.11/32\",\n              \"35.204.201.70/32\",\n              \"35.204.203.109/32\",\n              \"35.204.207.219/32\",\n              \"35.204.208.228/32\",\n              \"35.204.215.87/32\",\n              \"35.204.217.46/32\",\n              \"35.204.223.176/32\",\n              \"35.204.225.30/32\",\n              \"35.204.225.143/32\",\n              \"35.204.231.201/32\",\n              \"35.204.241.10/32\",\n              \"35.204.251.54/32\",\n              \"35.204.255.0/32\",\n              \"35.205.72.232/32\",\n              \"35.205.138.68/32\",\n              \"35.205.159.40/32\",\n              \"35.205.227.167/32\",\n              \"35.205.228.216/32\",\n              \"35.221.0.61/32\",\n              \"35.221.3.121/32\",\n              \"35.221.3.125/32\",\n              \"35.221.5.200/32\",\n              \"35.221.6.218/32\",\n              \"35.221.13.23/32\",\n              \"35.221.13.133/32\",\n              \"35.221.15.163/32\",\n              \"35.221.16.189/32\",\n              \"35.221.23.24/32\",\n              \"35.221.24.229/32\",\n              \"35.221.24.236/32\",\n              \"35.221.28.149/32\",\n              \"35.221.32.150/32\",\n              \"35.221.32.171/32\",\n              \"35.221.48.160/32\",\n              \"35.221.51.129/32\",\n              \"35.221.55.211/32\",\n              \"35.221.57.195/32\",\n              \"35.222.15.64/32\",\n              \"35.222.245.253/32\",\n              \"35.224.62.254/32\",\n              \"35.224.106.23/32\",\n              \"35.224.115.137/32\",\n              \"35.224.231.238/32\",\n              \"35.225.8.27/32\",\n              \"35.225.39.39/32\",\n              \"35.225.49.103/32\",\n              \"35.225.181.33/32\",\n              \"35.225.226.221/32\",\n              \"35.226.0.100/32\",\n              \"35.226.37.22/32\",\n              \"35.226.94.146/32\",\n              \"35.226.134.67/32\",\n              \"35.226.227.112/32\",\n              \"35.227.24.50/32\",\n              \"35.227.63.36/32\",\n              \"35.227.148.154/32\",\n              \"35.227.164.46/32\",\n              \"35.227.166.150/32\",\n              \"35.227.169.20/32\",\n              \"35.227.185.153/32\",\n              \"35.228.12.151/32\",\n              \"35.228.23.19/32\",\n              \"35.228.24.225/32\",\n              \"35.228.24.253/32\",\n              \"35.228.43.115/32\",\n              \"35.228.46.55/32\",\n              \"35.228.50.150/32\",\n              \"35.228.61.168/32\",\n              \"35.228.62.248/32\",\n              \"35.228.73.69/32\",\n              \"35.228.126.203/32\",\n              \"35.228.133.241/32\",\n              \"35.228.136.253/32\",\n              \"35.228.141.80/32\",\n              \"35.228.151.221/32\",\n              \"35.228.153.106/32\",\n              \"35.228.153.173/32\",\n              \"35.228.165.20/32\",\n              \"35.228.182.144/32\",\n              \"35.228.194.236/32\",\n              \"35.228.207.201/32\",\n              \"35.228.211.51/32\",\n              \"35.228.225.15/32\",\n              \"35.228.240.231/32\",\n              \"35.228.241.74/32\",\n              \"35.228.243.184/32\",\n              \"35.228.247.232/32\",\n              \"35.228.248.131/32\",\n              \"35.228.248.202/32\",\n              \"35.229.32.120/32\",\n              \"35.229.40.166/32\",\n              \"35.229.98.55/32\",\n              \"35.229.121.90/32\",\n              \"35.230.1.88/32\",\n              \"35.230.9.24/32\",\n              \"35.230.25.200/32\",\n              \"35.230.49.71/32\",\n              \"35.230.81.240/32\",\n              \"35.230.85.180/32\",\n              \"35.230.108.26/32\",\n              \"35.230.119.89/32\",\n              \"35.230.125.171/32\",\n              \"35.230.130.62/32\",\n              \"35.230.133.130/32\",\n              \"35.230.136.123/32\",\n              \"35.230.136.172/32\",\n              \"35.230.137.112/32\",\n              \"35.230.138.244/32\",\n              \"35.230.144.1/32\",\n              \"35.230.149.124/32\",\n              \"35.230.150.81/32\",\n              \"35.230.150.240/32\",\n              \"35.230.154.90/32\",\n              \"35.230.174.232/32\",\n              \"35.230.177.25/32\",\n              \"35.230.177.73/32\",\n              \"35.230.182.231/32\",\n              \"35.230.189.18/32\",\n              \"35.231.27.146/32\",\n              \"35.231.37.13/32\",\n              \"35.231.76.215/32\",\n              \"35.231.79.129/32\",\n              \"35.231.92.50/32\",\n              \"35.231.193.144/32\",\n              \"35.231.200.66/32\",\n              \"35.231.205.62/32\",\n              \"35.231.250.82/32\",\n              \"35.232.45.232/32\",\n              \"35.232.94.168/32\",\n              \"35.232.103.119/32\",\n              \"35.232.127.101/32\",\n              \"35.232.139.151/32\",\n              \"35.232.180.7/32\",\n              \"35.233.28.18/32\",\n              \"35.233.40.72/32\",\n              \"35.233.72.242/32\",\n              \"35.233.89.166/32\",\n              \"35.233.99.60/32\",\n              \"35.233.123.101/32\",\n              \"35.233.131.47/32\",\n              \"35.233.132.228/32\",\n              \"35.233.135.75/32\",\n              \"35.233.136.180/32\",\n              \"35.233.139.203/32\",\n              \"35.233.139.255/32\",\n              \"35.233.141.127/32\",\n              \"35.233.146.241/32\",\n              \"35.233.152.253/32\",\n              \"35.233.155.27/32\",\n              \"35.233.159.73/32\",\n              \"35.233.160.114/32\",\n              \"35.233.170.137/32\",\n              \"35.233.177.225/32\",\n              \"35.233.181.13/32\",\n              \"35.233.209.158/32\",\n              \"35.233.211.146/32\",\n              \"35.233.215.174/32\",\n              \"35.233.230.10/32\",\n              \"35.233.237.249/32\",\n              \"35.233.240.97/32\",\n              \"35.233.242.76/32\",\n              \"35.233.243.235/32\",\n              \"35.233.248.120/32\",\n              \"35.233.251.200/32\",\n              \"35.234.74.152/32\",\n              \"35.234.76.60/32\",\n              \"35.234.82.93/32\",\n              \"35.234.97.50/32\",\n              \"35.234.101.43/32\",\n              \"35.234.113.47/32\",\n              \"35.234.124.92/32\",\n              \"35.234.131.84/32\",\n              \"35.234.133.222/32\",\n              \"35.234.141.85/32\",\n              \"35.234.145.128/32\",\n              \"35.234.149.213/32\",\n              \"35.234.150.44/32\",\n              \"35.234.154.126/32\",\n              \"35.234.156.114/32\",\n              \"35.235.66.156/32\",\n              \"35.235.67.142/32\",\n              \"35.235.70.49/32\",\n              \"35.235.77.169/32\",\n              \"35.235.78.149/32\",\n              \"35.235.79.199/32\",\n              \"35.235.82.180/32\",\n              \"35.235.87.249/32\",\n              \"35.235.91.184/32\",\n              \"35.235.92.0/32\",\n              \"35.235.93.225/32\",\n              \"35.235.96.28/32\",\n              \"35.235.100.190/32\",\n              \"35.235.103.216/32\",\n              \"35.235.109.42/32\",\n              \"35.235.110.23/32\",\n              \"35.235.111.166/32\",\n              \"35.235.114.124/32\",\n              \"35.235.114.133/32\",\n              \"35.235.115.36/32\",\n              \"35.235.119.204/32\",\n              \"35.235.120.50/32\",\n              \"35.235.122.190/32\",\n              \"35.235.123.217/32\",\n              \"35.235.124.32/32\",\n              \"35.235.127.151/32\",\n              \"35.236.3.134/32\",\n              \"35.236.6.28/32\",\n              \"35.236.8.4/32\",\n              \"35.236.9.102/32\",\n              \"35.236.10.36/32\",\n              \"35.236.11.136/32\",\n              \"35.236.13.104/32\",\n              \"35.236.16.239/32\",\n              \"35.236.17.90/32\",\n              \"35.236.18.17/32\",\n              \"35.236.23.120/32\",\n              \"35.236.23.130/32\",\n              \"35.236.24.148/32\",\n              \"35.236.27.126/32\",\n              \"35.236.30.92/32\",\n              \"35.236.32.83/32\",\n              \"35.236.41.7/32\",\n              \"35.236.45.102/32\",\n              \"35.236.48.119/32\",\n              \"35.236.48.252/32\",\n              \"35.236.49.204/32\",\n              \"35.236.50.63/32\",\n              \"35.236.50.98/32\",\n              \"35.236.52.137/32\",\n              \"35.236.52.183/32\",\n              \"35.236.54.197/32\",\n              \"35.236.54.236/32\",\n              \"35.236.54.249/32\",\n              \"35.236.66.213/32\",\n              \"35.236.68.82/32\",\n              \"35.236.69.183/32\",\n              \"35.236.72.182/32\",\n              \"35.236.76.220/32\",\n              \"35.236.77.63/32\",\n              \"35.236.77.180/32\",\n              \"35.236.80.100/32\",\n              \"35.236.82.58/32\",\n              \"35.236.83.60/32\",\n              \"35.236.84.168/32\",\n              \"35.236.86.111/32\",\n              \"35.236.87.95/32\",\n              \"35.236.90.57/32\",\n              \"35.236.94.222/32\",\n              \"35.236.97.24/32\",\n              \"35.236.100.13/32\",\n              \"35.236.103.215/32\",\n              \"35.236.107.110/32\",\n              \"35.236.109.101/32\",\n              \"35.236.110.188/32\",\n              \"35.236.111.104/32\",\n              \"35.236.113.26/32\",\n              \"35.236.114.139/32\",\n              \"35.236.116.189/32\",\n              \"35.236.118.35/32\",\n              \"35.236.120.14/32\",\n              \"35.236.123.127/32\",\n              \"35.236.124.70/32\",\n              \"35.236.125.16/32\",\n              \"35.236.126.78/32\",\n              \"35.236.194.140/32\",\n              \"35.236.196.78/32\",\n              \"35.236.204.22/32\",\n              \"35.236.207.204/32\",\n              \"35.236.209.10/32\",\n              \"35.236.219.57/32\",\n              \"35.236.225.160/32\",\n              \"35.236.226.16/32\",\n              \"35.236.228.33/32\",\n              \"35.236.228.41/32\",\n              \"35.236.241.145/32\",\n              \"35.236.242.169/32\",\n              \"35.237.6.119/32\",\n              \"35.237.16.252/32\",\n              \"35.237.32.116/32\",\n              \"35.237.33.255/32\",\n              \"35.237.61.35/32\",\n              \"35.237.129.145/32\",\n              \"35.237.134.39/32\",\n              \"35.237.182.230/32\",\n              \"35.237.209.128/32\",\n              \"35.237.210.45/32\",\n              \"35.237.222.50/32\",\n              \"35.237.235.241/32\",\n              \"35.237.241.81/32\",\n              \"35.237.241.194/32\",\n              \"35.237.245.143/32\",\n              \"35.237.248.171/32\",\n              \"35.239.35.153/32\",\n              \"35.239.51.8/32\",\n              \"35.239.54.20/32\",\n              \"35.239.68.63/32\",\n              \"35.240.58.39/32\",\n              \"35.240.104.231/32\",\n              \"35.241.144.57/32\",\n              \"35.241.145.54/32\",\n              \"35.241.197.193/32\",\n              \"35.241.216.166/32\",\n              \"35.241.229.156/32\",\n              \"35.241.233.190/32\",\n              \"35.242.129.249/32\",\n              \"35.242.129.253/32\",\n              \"35.242.138.94/32\",\n              \"35.242.140.69/32\",\n              \"35.242.142.106/32\",\n              \"35.242.152.55/32\",\n              \"35.242.154.29/32\",\n              \"35.242.154.92/32\",\n              \"35.242.158.36/32\",\n              \"35.242.164.105/32\",\n              \"35.242.166.56/32\",\n              \"35.242.170.95/32\",\n              \"35.242.173.23/32\",\n              \"35.242.175.90/32\",\n              \"35.242.175.97/32\",\n              \"35.242.180.151/32\",\n              \"35.242.181.42/32\",\n              \"35.242.185.45/32\",\n              \"35.242.204.141/32\",\n              \"35.242.205.212/32\",\n              \"35.242.207.188/32\",\n              \"35.242.214.46/32\",\n              \"35.242.217.158/32\",\n              \"35.242.241.237/32\",\n              \"35.242.245.200/32\",\n              \"35.242.248.79/32\",\n              \"35.242.254.63/32\",\n              \"35.243.170.35/32\",\n              \"35.243.182.120/32\",\n              \"35.243.196.214/32\",\n              \"35.243.220.101/32\",\n              \"35.245.1.43/32\",\n              \"35.245.9.122/32\",\n              \"35.245.22.62/32\",\n              \"35.245.24.132/32\",\n              \"35.245.27.85/32\",\n              \"35.245.30.90/32\",\n              \"35.245.34.81/32\",\n              \"35.245.42.72/32\",\n              \"35.245.45.3/32\",\n              \"35.245.57.50/32\",\n              \"35.245.75.145/32\",\n              \"35.245.78.59/32\",\n              \"35.245.88.198/32\",\n              \"35.245.93.125/32\",\n              \"35.245.96.171/32\",\n              \"35.245.98.28/32\",\n              \"35.245.110.144/32\",\n              \"35.245.120.13/32\",\n              \"35.245.145.56/32\",\n              \"35.245.159.53/32\",\n              \"35.245.170.193/32\",\n              \"35.245.174.162/32\",\n              \"35.245.189.22/32\",\n              \"35.245.216.119/32\",\n              \"35.245.237.81/32\",\n              \"35.245.246.95/32\",\n              \"35.245.247.140/32\",\n              \"35.245.248.36/32\",\n              \"35.246.2.43/32\",\n              \"35.246.4.121/32\",\n              \"35.246.7.114/32\",\n              \"35.246.10.143/32\",\n              \"35.246.10.171/32\",\n              \"35.246.37.189/32\",\n              \"35.246.42.142/32\",\n              \"35.246.43.190/32\",\n              \"35.246.48.237/32\",\n              \"35.246.49.124/32\",\n              \"35.246.52.251/32\",\n              \"35.246.54.37/32\",\n              \"35.246.54.181/32\",\n              \"35.246.63.228/32\",\n              \"35.246.66.175/32\",\n              \"35.246.68.114/32\",\n              \"35.246.70.66/32\",\n              \"35.246.71.83/32\",\n              \"35.246.73.137/32\",\n              \"35.246.73.145/32\",\n              \"35.246.75.188/32\",\n              \"35.246.77.251/32\",\n              \"35.246.85.156/32\",\n              \"35.246.87.183/32\",\n              \"35.246.90.190/32\",\n              \"35.246.94.110/32\",\n              \"35.246.97.150/32\",\n              \"35.246.105.99/32\",\n              \"35.246.111.223/32\",\n              \"35.247.1.109/32\",\n              \"35.247.43.108/32\",\n              \"35.247.43.209/32\",\n              \"35.247.50.154/32\",\n              \"35.247.65.167/32\",\n              \"35.247.118.218/32\",\n              \"104.154.113.115/32\",\n              \"104.154.208.253/32\",\n              \"104.154.209.62/32\",\n              \"104.155.18.24/32\",\n              \"104.155.21.175/32\",\n              \"104.155.33.97/32\",\n              \"104.155.105.38/32\",\n              \"104.155.111.169/32\",\n              \"104.155.121.201/32\",\n              \"104.155.143.151/32\",\n              \"104.196.4.14/32\",\n              \"104.196.46.139/32\",\n              \"104.196.49.118/32\",\n              \"104.196.100.39/32\",\n              \"104.196.171.139/32\",\n              \"104.196.231.87/32\",\n              \"104.196.241.37/32\",\n              \"104.196.244.23/32\",\n              \"104.196.246.50/32\",\n              \"104.197.115.25/32\",\n              \"104.197.119.104/32\",\n              \"104.197.181.96/32\",\n              \"104.197.193.37/32\",\n              \"104.197.239.95/32\",\n              \"104.198.14.68/32\",\n              \"104.198.99.186/32\",\n              \"104.198.179.193/32\",\n              \"104.198.223.59/32\",\n              \"104.198.228.146/32\",\n              \"104.198.255.246/32\",\n              \"104.199.4.115/32\",\n              \"146.148.12.186/32\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"tcp\"\n              },\n              {\n                \"ipProtocol\": \"udp\"\n              }\n            ]\n          },\n          \"action\": \"allow\",\n          \"direction\": \"EGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 600,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"35.235.240.0/20\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"tcp\",\n                \"ports\": [\n                  \"22\",\n                  \"3389\",\n                  \"5900-5901\"\n                ]\n              }\n            ]\n          },\n          \"action\": \"allow\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 601,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"35.191.0.0/16\",\n              \"130.211.0.0/22\",\n              \"209.85.152.0/22\",\n              \"209.85.204.0/22\",\n              \"169.254.169.254\",\n              \"108.170.220.0/23\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 602,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"10.0.0.0/8\",\n              \"172.16.0.0/12\",\n              \"192.168.0.0/16\",\n              \"100.64.0.0/10\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 603,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"35.199.192.0/19\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"tcp\",\n                \"ports\": [\n                  \"53\"\n                ]\n              },\n              {\n                \"ipProtocol\": \"udp\",\n                \"ports\": [\n                  \"53\"\n                ]\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 604,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"107.178.230.64/26\",\n              \"35.199.224.0/19\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"tcp\",\n                \"ports\": [\n                  \"667\"\n                ]\n              },\n              {\n                \"ipProtocol\": \"udp\",\n                \"ports\": [\n                  \"665-666\"\n                ]\n              },\n              {\n                \"ipProtocol\": \"icmp\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 700,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"0.0.0.0/0\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"deny\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 2147483644,\n          \"match\": {\n            \"destIpRanges\": [\n              \"::/0\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"EGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 2147483646,\n          \"match\": {\n            \"destIpRanges\": [\n              \"0.0.0.0/0\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"EGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 2147483647,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"0.0.0.0/0\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/compute-igs-empty.json",
    "content": "{\n  \"kind\": \"compute#instanceGroupList\",\n  \"id\": \"projects/gcpdiag-gke1-aaaa/zones/europe-west1-b/instanceGroups\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west1-b/instanceGroups\"\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/compute-instances-aggregated.json",
    "content": "{\n  \"kind\": \"compute#instanceAggregatedList\",\n  \"id\": \"projects/gcpdiag-gke1-aaaa/aggregated/instances\",\n  \"items\": {\n    \"zones/us-central1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-central1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-central1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-central1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central1-f\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-central1-f'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central1-f\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-central2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-central2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-central2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central2-d\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-central2-d'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central2-d\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west1-d\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west1-d'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west1-d\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-west1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-west1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-west1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-east1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-east1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-east1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-east1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-east1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east1-d\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-east1-d'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east1-d\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-northeast1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-northeast1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-northeast1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-southeast1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-southeast1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-southeast1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east4-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-east4-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east4-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east4-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-east4-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east4-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east4-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-east4-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east4-c\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/australia-southeast1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/australia-southeast1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/australia-southeast1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west3-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west3-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west3-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west3-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west3-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west3-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west3-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west3-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west3-b\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-east1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/southamerica-east1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-east1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-east1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/southamerica-east1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-east1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-east1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/southamerica-east1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-east1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-south1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-south1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-south1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/northamerica-northeast1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/northamerica-northeast1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/northamerica-northeast1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west4-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west4-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west4-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west4-b\": {\n      \"instances\": [\n        {\n          \"kind\": \"compute#instance\",\n          \"id\": \"4008916034740216135\",\n          \"creationTimestamp\": \"2025-02-05T04:55:05.216-08:00\",\n          \"name\": \"gce1\",\n          \"tags\": {\n            \"items\": [\n              \"secured-instance\"\n            ],\n            \"fingerprint\": \"OcWEGzD6ieA=\"\n          },\n          \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-b/machineTypes/f1-micro\",\n          \"status\": \"TERMINATED\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-b\",\n          \"canIpForward\": false,\n          \"networkInterfaces\": [\n            {\n              \"kind\": \"compute#networkInterface\",\n              \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n              \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default\",\n              \"networkIP\": \"10.164.0.9\",\n              \"name\": \"nic0\",\n              \"fingerprint\": \"H5InLKvqNRc=\",\n              \"stackType\": \"IPV4_ONLY\"\n            }\n          ],\n          \"disks\": [\n            {\n              \"kind\": \"compute#attachedDisk\",\n              \"type\": \"PERSISTENT\",\n              \"mode\": \"READ_WRITE\",\n              \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-b/disks/gce1\",\n              \"deviceName\": \"persistent-disk-0\",\n              \"index\": 0,\n              \"boot\": true,\n              \"autoDelete\": true,\n              \"licenses\": [\n                \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2019-dc\",\n                \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-core\"\n              ],\n              \"interface\": \"SCSI\",\n              \"guestOsFeatures\": [\n                {\n                  \"type\": \"MULTI_IP_SUBNET\"\n                },\n                {\n                  \"type\": \"UEFI_COMPATIBLE\"\n                },\n                {\n                  \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n                },\n                {\n                  \"type\": \"GVNIC\"\n                },\n                {\n                  \"type\": \"WINDOWS\"\n                }\n              ],\n              \"diskSizeGb\": \"32\",\n              \"architecture\": \"X86_64\"\n            }\n          ],\n          \"metadata\": {\n            \"kind\": \"compute#metadata\",\n            \"fingerprint\": \"b5_sNtXJEts=\"\n          },\n          \"serviceAccounts\": [\n            {\n              \"email\": \"12340002-compute@developer.gserviceaccount.com\",\n              \"scopes\": [\n                \"https://www.googleapis.com/auth/devstorage.read_only\",\n                \"https://www.googleapis.com/auth/logging.write\",\n                \"https://www.googleapis.com/auth/monitoring.write\",\n                \"https://www.googleapis.com/auth/service.management.readonly\",\n                \"https://www.googleapis.com/auth/servicecontrol\"\n              ]\n            }\n          ],\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-b/instances/gce1\",\n          \"scheduling\": {\n            \"onHostMaintenance\": \"TERMINATE\",\n            \"automaticRestart\": false,\n            \"preemptible\": true\n          },\n          \"cpuPlatform\": \"Unknown CPU Platform\",\n          \"labels\": {\n            \"goog-terraform-provisioned\": \"true\"\n          },\n          \"labelFingerprint\": \"vezUS-42LLM=\",\n          \"startRestricted\": false,\n          \"deletionProtection\": false,\n          \"shieldedInstanceConfig\": {\n            \"enableSecureBoot\": false,\n            \"enableVtpm\": true,\n            \"enableIntegrityMonitoring\": true\n          },\n          \"shieldedInstanceIntegrityPolicy\": {\n            \"updateAutoLearnPolicy\": true\n          },\n          \"fingerprint\": \"fpNWOUBPGaA=\",\n          \"lastStartTimestamp\": \"2025-02-05T04:55:18.444-08:00\",\n          \"lastStopTimestamp\": \"2025-02-06T04:56:34.303-08:00\",\n          \"satisfiesPzi\": true\n        }\n      ]\n    },\n    \"zones/europe-west4-a\": {\n      \"instances\": [\n        {\n          \"kind\": \"compute#instance\",\n          \"id\": \"7734413015668154695\",\n          \"creationTimestamp\": \"2025-02-05T04:55:04.917-08:00\",\n          \"name\": \"gce1\",\n          \"tags\": {\n            \"items\": [\n              \"secured-instance\"\n            ],\n            \"fingerprint\": \"OcWEGzD6ieA=\"\n          },\n          \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/machineTypes/e2-micro\",\n          \"status\": \"TERMINATED\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a\",\n          \"canIpForward\": false,\n          \"networkInterfaces\": [\n            {\n              \"kind\": \"compute#networkInterface\",\n              \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n              \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default\",\n              \"networkIP\": \"10.164.0.7\",\n              \"name\": \"nic0\",\n              \"fingerprint\": \"b5ArkV8JkXs=\",\n              \"stackType\": \"IPV4_ONLY\"\n            }\n          ],\n          \"disks\": [\n            {\n              \"kind\": \"compute#attachedDisk\",\n              \"type\": \"PERSISTENT\",\n              \"mode\": \"READ_WRITE\",\n              \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/disks/gce1\",\n              \"deviceName\": \"persistent-disk-0\",\n              \"index\": 0,\n              \"boot\": true,\n              \"autoDelete\": true,\n              \"licenses\": [\n                \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2019-dc\",\n                \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-core\"\n              ],\n              \"interface\": \"SCSI\",\n              \"guestOsFeatures\": [\n                {\n                  \"type\": \"MULTI_IP_SUBNET\"\n                },\n                {\n                  \"type\": \"UEFI_COMPATIBLE\"\n                },\n                {\n                  \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n                },\n                {\n                  \"type\": \"GVNIC\"\n                },\n                {\n                  \"type\": \"WINDOWS\"\n                }\n              ],\n              \"diskSizeGb\": \"32\",\n              \"architecture\": \"X86_64\"\n            }\n          ],\n          \"metadata\": {\n            \"kind\": \"compute#metadata\",\n            \"fingerprint\": \"b5_sNtXJEts=\"\n          },\n          \"serviceAccounts\": [\n            {\n              \"email\": \"12340002-compute@developer.gserviceaccount.com\",\n              \"scopes\": [\n                \"https://www.googleapis.com/auth/devstorage.read_only\",\n                \"https://www.googleapis.com/auth/logging.write\",\n                \"https://www.googleapis.com/auth/monitoring.write\",\n                \"https://www.googleapis.com/auth/service.management.readonly\",\n                \"https://www.googleapis.com/auth/servicecontrol\"\n              ]\n            }\n          ],\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instances/gce1\",\n          \"scheduling\": {\n            \"onHostMaintenance\": \"TERMINATE\",\n            \"automaticRestart\": false,\n            \"preemptible\": true\n          },\n          \"cpuPlatform\": \"Unknown CPU Platform\",\n          \"labels\": {\n            \"foo\": \"bar\",\n            \"goog-terraform-provisioned\": \"true\"\n          },\n          \"labelFingerprint\": \"cLOO6l7pJAo=\",\n          \"startRestricted\": false,\n          \"deletionProtection\": false,\n          \"shieldedInstanceConfig\": {\n            \"enableSecureBoot\": false,\n            \"enableVtpm\": true,\n            \"enableIntegrityMonitoring\": true\n          },\n          \"shieldedInstanceIntegrityPolicy\": {\n            \"updateAutoLearnPolicy\": true\n          },\n          \"fingerprint\": \"mcHgMmrzi8c=\",\n          \"lastStartTimestamp\": \"2025-02-05T04:55:12.951-08:00\",\n          \"lastStopTimestamp\": \"2025-02-06T04:58:01.352-08:00\",\n          \"satisfiesPzi\": true\n        },\n        {\n          \"cpuPlatform\": \"Intel Broadwell\",\n          \"creationTimestamp\": \"2023-05-09T12:41:30.493-07:00\",\n          \"deletionProtection\": false,\n          \"disks\": [\n            {\n              \"architecture\": \"X86_64\",\n              \"autoDelete\": true,\n              \"boot\": true,\n              \"deviceName\": \"persistent-disk-0\",\n              \"diskSizeGb\": \"100\",\n              \"guestOsFeatures\": [\n                {\n                  \"type\": \"SEV_SNP_CAPABLE\"\n                },\n                {\n                  \"type\": \"GVNIC\"\n                },\n                {\n                  \"type\": \"SEV_CAPABLE\"\n                },\n                {\n                  \"type\": \"SECURE_BOOT\"\n                },\n                {\n                  \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n                },\n                {\n                  \"type\": \"UEFI_COMPATIBLE\"\n                }\n              ],\n              \"index\": 0,\n              \"interface\": \"SCSI\",\n              \"kind\": \"compute#attachedDisk\",\n              \"licenses\": [\n                \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node\",\n                \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\",\n                \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n                \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\"\n              ],\n              \"mode\": \"READ_WRITE\",\n              \"shieldedInstanceInitialState\": {\n                \"dbs\": [\n                  {\n                    \"content\": \"REDACTED\",\n                    \"fileType\": \"X509\"\n                  }\n                ],\n                \"dbxs\": [\n                  {\n                    \"content\": \"REDACTED\",\n                    \"fileType\": \"X509\"\n                  },\n                  {\n                    \"content\": \"REDACTED\",\n                    \"fileType\": \"X509\"\n                  },\n                  {\n                    \"content\": \"REDACTED\",\n                    \"fileType\": \"X509\"\n                  },\n                  {\n                    \"content\": \"REDACTED\",\n                    \"fileType\": \"X509\"\n                  }\n                ],\n                \"keks\": [\n                  {\n                    \"content\": \"REDACTED\",\n                    \"fileType\": \"X509\"\n                  }\n                ],\n                \"pk\": {\n                  \"content\": \"REDACTED\",\n                  \"fileType\": \"X509\"\n                }\n              },\n              \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/disks/gke-gke1-default-pool-671518f6-zsnm\",\n              \"type\": \"PERSISTENT\"\n            }\n          ],\n          \"fingerprint\": \"REDACTED\",\n          \"id\": \"714758298644455174\",\n          \"kind\": \"compute#instance\",\n          \"labelFingerprint\": \"yaFVeZPybGM=\",\n          \"labels\": {\n            \"foo\": \"bar\",\n            \"goog-gke-node\": \"\"\n          },\n          \"lastStartTimestamp\": \"2023-05-09T12:41:36.364-07:00\",\n          \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/machineTypes/e2-medium\",\n          \"metadata\": {\n            \"fingerprint\": \"REDACTED\",\n            \"items\": [\n              {\n                \"key\": \"instance-template\",\n                \"value\": \"projects/12340002/global/instanceTemplates/gke-gke1-default-pool-671518f6\"\n              },\n              {\n                \"key\": \"created-by\",\n                \"value\": \"projects/12340002/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-671518f6-grp\"\n              },\n              {\n                \"key\": \"serial-port-logging-enable\",\n                \"value\": \"true\"\n              },\n              {\n                \"key\": \"kube-labels\",\n                \"value\": \"cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=e2,cloud.google.com/private-node=false,node.kubernetes.io/masq-agent-ds-ready=true\"\n              },\n              {\n                \"key\": \"google-compute-enable-pcid\",\n                \"value\": \"true\"\n              },\n              {\n                \"key\": \"kubelet-config\",\n                \"value\": \"apiVersion: kubelet.config.k8s.io/v1beta1\\nauthentication:\\n  anonymous:\\n    enabled: false\\n  webhook:\\n    enabled: true\\n  x509:\\n    clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\\nauthorization:\\n  mode: Webhook\\ncgroupRoot: /\\nclusterDNS:\\n- 192.168.2.10\\nclusterDomain: cluster.local\\nenableDebuggingHandlers: true\\nevictionHard:\\n  memory.available: 100Mi\\n  nodefs.available: 10%\\n  nodefs.inodesFree: 5%\\n  pid.available: 10%\\nfeatureGates:\\n  CSIMigrationGCE: true\\n  DisableKubeletCloudCredentialProviders: false\\n  DynamicKubeletConfig: false\\n  ExecProbeTimeout: false\\n  InTreePluginAWSUnregister: true\\n  InTreePluginAzureDiskUnregister: true\\n  InTreePluginOpenStackUnregister: true\\n  InTreePluginvSphereUnregister: true\\n  RotateKubeletServerCertificate: true\\nkernelMemcgNotification: true\\nkind: KubeletConfiguration\\nkubeReserved:\\n  cpu: 1060m\\n  ephemeral-storage: 41Gi\\n  memory: 1019Mi\\nreadOnlyPort: 10255\\nserverTLSBootstrap: true\\nstaticPodPath: /etc/kubernetes/manifests\\n\"\n              },\n              {\n                \"key\": \"kubeconfig\",\n                \"value\": \"apiVersion: v1\\nkind: Config\\nclusters:\\n- cluster:\\n    server: https://192.168.0.34\\n    certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\\n  name: default-cluster\\ncontexts:\\n- context:\\n    cluster: default-cluster\\n    namespace: default\\n    user: exec-plugin-auth\\n  name: default-context\\ncurrent-context: default-context\\nusers:\\n- name: exec-plugin-auth\\n  user:\\n    exec:\\n      apiVersion: \\\"client.authentication.k8s.io/v1beta1\\\"\\n      command: '/home/kubernetes/bin/gke-exec-auth-plugin'\\n      args: [\\\"--cache-dir\\\", '/var/lib/kubelet/pki/']\\n\"\n              },\n              {\n                \"key\": \"cluster-name\",\n                \"value\": \"gke1\"\n              },\n              {\n                \"key\": \"gci-update-strategy\",\n                \"value\": \"update_disabled\"\n              },\n              {\n                \"key\": \"gci-metrics-enabled\",\n                \"value\": \"true\"\n              },\n              {\n                \"key\": \"configure-sh\",\n                \"value\": \"REDACTED\"\n              },\n              {\n                \"key\": \"disable-legacy-endpoints\",\n                \"value\": \"true\"\n              },\n              {\n                \"key\": \"user-data\",\n                \"value\": \"REDACTED\"\n              },\n              {\n                \"key\": \"kube-env\",\n                \"value\": \"REDACTED\"\n              },\n              {\n                \"key\": \"cluster-uid\",\n                \"value\": \"c10b95be9dbb48d09af2e5c299c655c01f02e38cc157489eb8ec454d30b7ecb7\"\n              },\n              {\n                \"key\": \"cluster-location\",\n                \"value\": \"europe-west4-a\"\n              }\n            ],\n            \"kind\": \"compute#metadata\"\n          },\n          \"name\": \"gke-gke1-default-pool-671518f6-zsnm\",\n          \"networkInterfaces\": [\n            {\n              \"accessConfigs\": [\n                {\n                  \"kind\": \"compute#accessConfig\",\n                  \"name\": \"external-nat\",\n                  \"natIP\": \"34.90.1.21\",\n                  \"networkTier\": \"PREMIUM\",\n                  \"type\": \"ONE_TO_ONE_NAT\"\n                }\n              ],\n              \"aliasIpRanges\": [\n                {\n                  \"ipCidrRange\": \"192.168.1.0/24\",\n                  \"subnetworkRangeName\": \"gke1-secondary-range-pod\"\n                }\n              ],\n              \"fingerprint\": \"REDACTED\",\n              \"kind\": \"compute#networkInterface\",\n              \"name\": \"nic0\",\n              \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n              \"networkIP\": \"192.168.0.35\",\n              \"stackType\": \"IPV4_ONLY\",\n              \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/gke1-subnet\"\n            }\n          ],\n          \"networkPerformanceConfig\": {\n            \"totalEgressBandwidthTier\": \"DEFAULT\"\n          },\n          \"scheduling\": {\n            \"automaticRestart\": true,\n            \"onHostMaintenance\": \"MIGRATE\",\n            \"preemptible\": false,\n            \"provisioningModel\": \"STANDARD\"\n          },\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instances/gke-gke1-default-pool-671518f6-zsnm\",\n          \"serviceAccounts\": [\n            {\n              \"email\": \"12340002-compute@developer.gserviceaccount.com\",\n              \"scopes\": [\n                \"https://www.googleapis.com/auth/devstorage.read_only\",\n                \"https://www.googleapis.com/auth/logging.write\",\n                \"https://www.googleapis.com/auth/monitoring\",\n                \"https://www.googleapis.com/auth/service.management.readonly\",\n                \"https://www.googleapis.com/auth/servicecontrol\",\n                \"https://www.googleapis.com/auth/trace.append\"\n              ]\n            }\n          ],\n          \"shieldedInstanceConfig\": {\n            \"enableIntegrityMonitoring\": true,\n            \"enableSecureBoot\": false,\n            \"enableVtpm\": true\n          },\n          \"shieldedInstanceIntegrityPolicy\": {\n            \"updateAutoLearnPolicy\": true\n          },\n          \"startRestricted\": false,\n          \"status\": \"RUNNING\",\n          \"tags\": {\n            \"fingerprint\": \"REDACTED\",\n            \"items\": [\n              \"gke-gke1-c10b95be-node\"\n            ]\n          },\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a\"\n        },\n        {\n          \"kind\": \"compute#instance\",\n          \"id\": \"3427402889068208455\",\n          \"creationTimestamp\": \"2025-02-05T04:55:05.013-08:00\",\n          \"name\": \"gce2\",\n          \"tags\": {\n            \"items\": [\n              \"secured-instance\"\n            ],\n            \"fingerprint\": \"OcWEGzD6ieA=\"\n          },\n          \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/machineTypes/e2-micro\",\n          \"status\": \"TERMINATED\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a\",\n          \"canIpForward\": false,\n          \"networkInterfaces\": [\n            {\n              \"kind\": \"compute#networkInterface\",\n              \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n              \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default\",\n              \"networkIP\": \"10.164.0.8\",\n              \"name\": \"nic0\",\n              \"fingerprint\": \"WAEC9EDWZGs=\",\n              \"stackType\": \"IPV4_ONLY\"\n            }\n          ],\n          \"disks\": [\n            {\n              \"kind\": \"compute#attachedDisk\",\n              \"type\": \"PERSISTENT\",\n              \"mode\": \"READ_WRITE\",\n              \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/disks/gce2\",\n              \"deviceName\": \"persistent-disk-0\",\n              \"index\": 0,\n              \"boot\": true,\n              \"autoDelete\": true,\n              \"licenses\": [\n                \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-2019-dc\",\n                \"https://www.googleapis.com/compute/v1/projects/windows-cloud/global/licenses/windows-server-core\"\n              ],\n              \"interface\": \"SCSI\",\n              \"guestOsFeatures\": [\n                {\n                  \"type\": \"MULTI_IP_SUBNET\"\n                },\n                {\n                  \"type\": \"UEFI_COMPATIBLE\"\n                },\n                {\n                  \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n                },\n                {\n                  \"type\": \"GVNIC\"\n                },\n                {\n                  \"type\": \"WINDOWS\"\n                }\n              ],\n              \"diskSizeGb\": \"32\",\n              \"architecture\": \"X86_64\"\n            }\n          ],\n          \"metadata\": {\n            \"kind\": \"compute#metadata\",\n            \"fingerprint\": \"xkTdem40Dus=\",\n            \"items\": [\n              {\n                \"key\": \"serial-port-logging-enable\",\n                \"value\": \"false\"\n              }\n            ]\n          },\n          \"serviceAccounts\": [\n            {\n              \"email\": \"12340002-compute@developer.gserviceaccount.com\",\n              \"scopes\": [\n                \"https://www.googleapis.com/auth/devstorage.read_only\",\n                \"https://www.googleapis.com/auth/logging.write\",\n                \"https://www.googleapis.com/auth/monitoring.write\",\n                \"https://www.googleapis.com/auth/service.management.readonly\",\n                \"https://www.googleapis.com/auth/servicecontrol\"\n              ]\n            }\n          ],\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instances/gce2\",\n          \"scheduling\": {\n            \"onHostMaintenance\": \"TERMINATE\",\n            \"automaticRestart\": false,\n            \"preemptible\": true\n          },\n          \"cpuPlatform\": \"Unknown CPU Platform\",\n          \"labels\": {\n            \"goog-terraform-provisioned\": \"true\"\n          },\n          \"labelFingerprint\": \"vezUS-42LLM=\",\n          \"startRestricted\": false,\n          \"deletionProtection\": false,\n          \"shieldedInstanceConfig\": {\n            \"enableSecureBoot\": false,\n            \"enableVtpm\": true,\n            \"enableIntegrityMonitoring\": true\n          },\n          \"shieldedInstanceIntegrityPolicy\": {\n            \"updateAutoLearnPolicy\": true\n          },\n          \"fingerprint\": \"Lqnk1p0Yzf0=\",\n          \"lastStartTimestamp\": \"2025-02-05T04:55:16.921-08:00\",\n          \"lastStopTimestamp\": \"2025-02-05T07:09:43.379-08:00\",\n          \"satisfiesPzi\": true\n        },\n        {\n          \"kind\": \"compute#instance\",\n          \"id\": \"2177354220935146682\",\n          \"creationTimestamp\": \"2025-02-06T07:16:37.639-08:00\",\n          \"name\": \"gke-gke1-default-pool-dee670f4-b27s\",\n          \"tags\": {\n            \"items\": [\n              \"gke-gke1-848e1694-node\"\n            ],\n            \"fingerprint\": \"oapYuKPqeNg=\"\n          },\n          \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/machineTypes/e2-medium\",\n          \"status\": \"RUNNING\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a\",\n          \"networkInterfaces\": [\n            {\n              \"kind\": \"compute#networkInterface\",\n              \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n              \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/gke1-subnet\",\n              \"networkIP\": \"192.168.0.3\",\n              \"name\": \"nic0\",\n              \"accessConfigs\": [\n                {\n                  \"kind\": \"compute#accessConfig\",\n                  \"type\": \"ONE_TO_ONE_NAT\",\n                  \"name\": \"external-nat\",\n                  \"natIP\": \"34.90.120.22\",\n                  \"networkTier\": \"PREMIUM\"\n                }\n              ],\n              \"aliasIpRanges\": [\n                {\n                  \"ipCidrRange\": \"192.168.1.0/24\",\n                  \"subnetworkRangeName\": \"gke1-secondary-range-pod\"\n                }\n              ],\n              \"fingerprint\": \"BR9LA1osAHE=\",\n              \"stackType\": \"IPV4_ONLY\"\n            }\n          ],\n          \"disks\": [\n            {\n              \"kind\": \"compute#attachedDisk\",\n              \"type\": \"PERSISTENT\",\n              \"mode\": \"READ_WRITE\",\n              \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/disks/gke-gke1-default-pool-dee670f4-b27s\",\n              \"deviceName\": \"persistent-disk-0\",\n              \"index\": 0,\n              \"boot\": true,\n              \"autoDelete\": true,\n              \"licenses\": [\n                \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\",\n                \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\",\n                \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node\",\n                \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\"\n              ],\n              \"interface\": \"SCSI\",\n              \"guestOsFeatures\": [\n                {\n                  \"type\": \"SEV_LIVE_MIGRATABLE\"\n                },\n                {\n                  \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n                },\n                {\n                  \"type\": \"SEV_SNP_CAPABLE\"\n                },\n                {\n                  \"type\": \"SEV_CAPABLE\"\n                },\n                {\n                  \"type\": \"SEV_LIVE_MIGRATABLE_V2\"\n                },\n                {\n                  \"type\": \"GVNIC\"\n                },\n                {\n                  \"type\": \"UEFI_COMPATIBLE\"\n                },\n                {\n                  \"type\": \"IDPF\"\n                }\n              ],\n              \"diskSizeGb\": \"100\",\n              \"shieldedInstanceInitialState\": {\n                \"pk\": {\n                  \"content\": \"MIIEGTCCAwGgAwIBAgIQYB8C9RH--O1hXkpp2FVSXjANBgkqhkiG9w0BAQsFADCBkTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC0dvb2dsZSBMTEMuMR8wHQYDVQQLExZDb250YWluZXIgT3B0aW1pemVkIE9TMR4wHAYDVQQDExVVRUZJIFBsYXRmb3JtIEtleSB2MTAwHhcNMjAwODA2MTk0ODQ0WhcNMzAwODA0MTk0ODQ0WjCBkTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC0dvb2dsZSBMTEMuMR8wHQYDVQQLExZDb250YWluZXIgT3B0aW1pemVkIE9TMR4wHAYDVQQDExVVRUZJIFBsYXRmb3JtIEtleSB2MTAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQClSQ15LUf193eJfM6b5etGgz8auvdI72Cclo3fHvwXBzsm5T1QamwYAqrCTcS7MxauCTkmkXTS9ejM4NNpQWF6KG82nR88vRyKO_MnSNL8ZP-rtRu0p1X_mUYXwi0_nPkyPKLR2QJ9H2EOrw_RChWvwnu281WtfUPCYs2t2SjBCF_mgzZI8o3s8wOtL8y-Dmi9T0bGO1wYX2okz51PKbhgVGQA7KJRmeekIxEkiN7GOb_2VQqcdM9c846OlC-8abwgDvrL3YqKqhw8DnSM2AbNpZIgUTd1Ut3X-PWXVKBj3qdxjAyRez8dPWymXDji-CBoBzLsWEkUW87S1coggOABAgMBAAGjazBpMA8GA1UdEwEB_wQFMAMBAf8wKQYDVR0OBCIEIMk0-K2sxOjtSpl-2pXmBWwwvSMGEIThmdDsSxQk2XZQMCsGA1UdIwQkMCKAIMk0-K2sxOjtSpl-2pXmBWwwvSMGEIThmdDsSxQk2XZQMA0GCSqGSIb3DQEBCwUAA4IBAQA7Pmaixb0FuDtpesNGvaBkTGWWMO7bDtx4rQom7zprEnliFJZung08FS3r73ob1urH0lzZm9022nRp8xqcSGk3wDkE9xQppWhvjhf6SOHdwM9_OxVq6no_BPz1PkRYsg4V07cgYPCtp7Ck7ZBI7m3MbLUyg8EG14_tvjKX9Xh2h0FSGuGg8_jjGYCGDtaSPkXBpAWurZ5mC2o9CzGaBJR4f_51I5C2AfHMG0H5T0Kehuyb_IzX9mAwArGmt62e4T9SxdP7LZUNPMEzOrhW1RzXvsD6Vod4uA9h2n_lbZHiBBExM2PMwuoobb-io-W0ARL4OCN5jah0a7q1ax6UYJK-\",\n                  \"fileType\": \"X509\"\n                },\n                \"keks\": [\n                  {\n                    \"content\": \"MIIEIjCCAwqgAwIBAgIRAKxVeWkn5a0pF1C0o_HUM6owDQYJKoZIhvcNAQELBQAwgZUxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtHb29nbGUgTExDLjEfMB0GA1UECxMWQ29udGFpbmVyIE9wdGltaXplZCBPUzEiMCAGA1UEAxMZVUVGSSBLZXkgRXhjaGFuZ2UgS2V5IHYxMDAeFw0yMDA4MDYxOTQ4NTBaFw0zMDA4MDQxOTQ4NTBaMIGVMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLR29vZ2xlIExMQy4xHzAdBgNVBAsTFkNvbnRhaW5lciBPcHRpbWl6ZWQgT1MxIjAgBgNVBAMTGVVFRkkgS2V5IEV4Y2hhbmdlIEtleSB2MTAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6ZCJ4Oldm1z3gwwAjWqiHRMFrXPwq0XmVmLWoaGUBzeL41VwHK76iQTxl11HYhqaAr_0nmVQAM3M6so6cmydd7l1RPYJpZ3Shy3qO4xxgy30kp4zW00m9EVEdkmh9-9zi_G89uutz7wOb34M2Wrybwa7D5U102DmSoJAoq5z2YrvpjZoGLRGqBBP6A1l-_gRGMAgUMqKbhD1HF1VKXZnIGq9UJcpHhRvQxOG3nlVWk6z8dH-Rnp_9YfEPRORAUF5PUnUL5-I3wr5derIIoeYxc7G2ZuTyRWsF9WVyZ7OquYwxAY4l4xkDJpAvSomHkbfNgtCZyTm2pMIkRou0up5lAgMBAAGjazBpMA8GA1UdEwEB_wQFMAMBAf8wKQYDVR0OBCIEINDkWV5HwgIi6aogGQUbZwWC5Es_Vx9SX5kG8i1xiXxKMCsGA1UdIwQkMCKAINDkWV5HwgIi6aogGQUbZwWC5Es_Vx9SX5kG8i1xiXxKMA0GCSqGSIb3DQEBCwUAA4IBAQCOTmuK7QQ4sP_8qYI2-bkvbQg1Vpq0W_aWtm0AQDw2iEVgfIq8JxNHu61ZhkmBiEhsdaaj7bYt_8owpvxfRnmzMPhQ6iB51vkExjWipD9spgSb8tfp0te6MqTT3omyYI9x4L13wn9ufZtlhZXlVgbjUN1QyevHwNt7Kms8Nd9Jbk9JCV9JoOIjkBpUjpCWCDfdGDD-iGIPzGdS-KjrNiA4udnzkdkO83dFMMvu69a1snCRUshNvHBNPbPRwbRYV9lS_QTwfft7EgbNF0455gblZbejvGJgR1Vhyen0jIPouVWxXe0X7AnGK8Mc3DUQBPVGT4ZR0WChbcwiOavh2t2X\",\n                    \"fileType\": \"X509\"\n                  }\n                ],\n                \"dbs\": [\n                  {\n                    \"content\": \"MIIEDTCCAvWgAwIBAgIQRtEbux4j2WDjYimBMkIBYjANBgkqhkiG9w0BAQsFADCBizELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC0dvb2dsZSBMTEMuMR8wHQYDVQQLExZDb250YWluZXIgT3B0aW1pemVkIE9TMRgwFgYDVQQDEw9VRUZJIERCIEtleSB2MTAwHhcNMjAwODA2MTk0ODU1WhcNMzAwODA0MTk0ODU1WjCBizELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC0dvb2dsZSBMTEMuMR8wHQYDVQQLExZDb250YWluZXIgT3B0aW1pemVkIE9TMRgwFgYDVQQDEw9VRUZJIERCIEtleSB2MTAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDQzJHu5A61uBNU6UUUZ5MiXjXwy8Du44BHhisNBpi6cTVHZddJ85iNldE5cPL7hZFJP9n77KyFRCCLxT2CVDNkwMyE2jvJkTz2x2qWvJ-uIuL25Asfgbrv7t1h2Jn790ZLwb9U3qQvqMLvIh_cTtNLat0DaZJsdnJo1MTnFAWrYZZ19KB4j6JJpG_QBnQ-s8XibeSSoa_bMEQTn2OEQFeEcume3CeuZKzXyytMLKkV_z4z-CYddyRwkOFivWUHWq2nVecQQgdyDNWYxGnY4MNsTMYFfv-mhyRzMwhxBFMwMAaEwhTFWsIP6VNwrwIgQaDw3o1fUEuzavTfdNhULaJLAgMBAAGjazBpMA8GA1UdEwEB_wQFMAMBAf8wKQYDVR0OBCIEIEtOsnFY2N1KW7dg9Wd_GEcIwV_a-U2DCn5ZyUsGWickMCsGA1UdIwQkMCKAIEtOsnFY2N1KW7dg9Wd_GEcIwV_a-U2DCn5ZyUsGWickMA0GCSqGSIb3DQEBCwUAA4IBAQCOd9V3WYv589dVov5ZOYo4zSs5PXpts1_8sYvMwvzLBr46LaejfG7KjjIY665Cnik__Zy9N3ZS9-fEeGKrBPE8ClwC06QhLbWDSFIqj2y9qq5FyBW0k1no2UQBnvx4CnLw_BgU3eae0wjv1lpDIbMwxe3E_aucVmzaIX3O83cw2JL9lLm1Psum0L2VHDZSCTP24vzrWoXXo4USHO_tBt_NkYrdkQH5CqGJYtxzKRwHHKEar3vzsiW4DPzlW8kUjRual1eBOKT5YKGbrOA_PJXV9x_7v1f2uAIrqh3HyppDTaGJ7Lux1MDf_hKuwAFI5QJTy9NEojbuUk1tzB4ys_W8\",\n                    \"fileType\": \"X509\"\n                  }\n                ],\n                \"dbxs\": [\n                  {\n                    \"content\": \"MIIEaDCCA1CgAwIBAgIJAKqfsrCdjyCoMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtHb29nbGUgTExDLjEUMBIGA1UECxMLQ2hyb21pdW0gT1MxFzAVBgNVBAMTDlVFRkkgREIgS2V5IHYxMB4XDTE4MTIwODAxMTk0MVoXDTI4MTIwNTAxMTk0MVowfzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC0dvb2dsZSBMTEMuMRQwEgYDVQQLEwtDaHJvbWl1bSBPUzEXMBUGA1UEAxMOVUVGSSBEQiBLZXkgdjEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtZ9U4P5aWlBwiTocmkUjOn2XpvHUlUOnsnhvsm994hAb0MNk2d3fXa8Nz14v9JiBTSf70KU2Zhxb_bSN3KAIv-f7F2AuXte7U9SnzZ02UDmK4TU1bFQW67Y3Gc2hWprCHYEjiRQD4J3WPWhuZnAXqzXQk3uDWVPETi-G9KAM1R-yNxZfoEjfIKhLabDsWqDtnMSovObLoVfwTdnm0WCuYTFtY_CKNxuxeKuzDsC5Su9N3dSFbpGhXJjwUaXPLWY5MFIqIQNBfhmWzDd4PItXaXV3V44IqWTXclE2aSUqkwNrEZ1cRpHG4PYM1aHVmjcO_dWlvthcepTIMIEMAXg2LAgMBAAGjgeYwgeMwHQYDVR0OBBYEFNXbmmdkM0aIsPMyEIv25JRaOPA-MIGzBgNVHSMEgaswgaiAFNXbmmdkM0aIsPMyEIv25JRaOPA-oYGEpIGBMH8xCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtHb29nbGUgTExDLjEUMBIGA1UECxMLQ2hyb21pdW0gT1MxFzAVBgNVBAMTDlVFRkkgREIgS2V5IHYxggkAqp-ysJ2PIKgwDAYDVR0TBAUwAwEB_zANBgkqhkiG9w0BAQsFAAOCAQEAJ2vbNymAKTUbRvxnAohHozVUByrKHCq1o8b-bKrgv7Ch0X4itfG8Uwvt0xG7CTpl_Dno92MtpOpFv4ydqox-pP1kTsRcnFNggndXdjpGILIB94KmFiYJvB6RzocJsXsXBa0tULOR24qiB9f93kfITS7Ec60WjFfpgYKEnuEgcV0yBuZzAZbxo1uF4n1hhmVUnKtEI9pX-8geYIIqIYiwwT2jnhFogWw4PeSyg-HMR1CLwwJeH2XDa924LpgHFuR-AbikipAE2vIE0yqJzo0o4tn9-sRuMaQcZ4VQqIzMiniW5H7nGeoQY3ktHX5eq6x-4jFvdLnzzq_D4sS-UWHzOA==\",\n                    \"fileType\": \"X509\"\n                  },\n                  {\n                    \"content\": \"MIIEiTCCA3GgAwIBAgIJAOzm3xz71Vu6MA0GCSqGSIb3DQEBCwUAMIGJMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLR29vZ2xlIExMQy4xFDASBgNVBAsTC0Nocm9taXVtIE9TMSEwHwYDVQQDExhVRUZJIEtleSBFeGNoYW5nZSBLZXkgdjEwHhcNMTgxMjA4MDExOTQwWhcNMjgxMjA1MDExOTQwWjCBiTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC0dvb2dsZSBMTEMuMRQwEgYDVQQLEwtDaHJvbWl1bSBPUzEhMB8GA1UEAxMYVUVGSSBLZXkgRXhjaGFuZ2UgS2V5IHYxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwg5hvVH6fJSBNji7ynBl1SQzWceL5P3ul6RcB-1s5wXqzXlIHiyRqBdj4hj2pLzpKJGmXWnerIwJOkdsFg7IwZpA4xHE1F-M8XlpuuUn_Xdfccef36ddZEUH6QLwNm96T89F4ujt0omJ-0GV37vBsxEY-hwR3O8XBgyx8TvvYxNnVyTgi19qQdb2ES8-yWJkebdzgugcmNf9K-55fnEiyxWtrvEQb2sowWIS3-b1I_BP85pW2pldh9yQWfb3OY2NJhGSbQSnLi3J0IhRXROEtAXCU4MLTq2cHOpGX0DtJP_g_jD1pnC1O6CCZgVycK4DgZXeDzOG_2Uimhr0y1rcewIDAQABo4HxMIHuMB0GA1UdDgQWBBQEqlpkrYWCzJe69eMUdF1byztBmzCBvgYDVR0jBIG2MIGzgBQEqlpkrYWCzJe69eMUdF1byztBm6GBj6SBjDCBiTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC0dvb2dsZSBMTEMuMRQwEgYDVQQLEwtDaHJvbWl1bSBPUzEhMB8GA1UEAxMYVUVGSSBLZXkgRXhjaGFuZ2UgS2V5IHYxggkA7ObfHPvVW7owDAYDVR0TBAUwAwEB_zANBgkqhkiG9w0BAQsFAAOCAQEAWsd3mq0dADTD7Tx2uYcDeJcJHO0x91hO26p2cqUSox4wPgc4_xk5yiteMgDB5CWLwgcuneDAYYMO1PmktpEvLu9a82gCGxGiww-w78OJTOrs68VM1zB0jqA3X5EyVSwVJqi8idgrnnGsJAcSBosnUI8pNi9SDC3MRPE1q1EUjuDNjsE7t_ItBe-MSMWCH2hpG8unZ7uwWCRfAV3Fkdnq_S5HzDy6-kKyGdj-rprhVeDz2xSyMOlNIJig4uuqU166DTfoQA2TxnMG_TuHt69Z4uZcVwx_HwPs2-vUCCYqZDwuuHKNIEm8kIK8sSPSsp22sC8h-7Klb8wj_d0lzShgkg==\",\n                    \"fileType\": \"X509\"\n                  },\n                  {\n                    \"content\": \"MIID0zCCArugAwIBAgIJANuXsNG_1HHxMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKDAtHb29nbGUgTExDLjEUMBIGA1UECwwLQ2hyb21pdW0gT1MxFzAVBgNVBAMMDlVFRkkgREIgS2V5IHYxMCAXDTE4MDQyNzE1MDYzN1oYDzIyMTgwMzEwMTUwNjM3WjB_MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEUMBIGA1UECgwLR29vZ2xlIExMQy4xFDASBgNVBAsMC0Nocm9taXVtIE9TMRcwFQYDVQQDDA5VRUZJIERCIEtleSB2MTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALWzFg8obysKXCjnbBTpAM8dMFC2pHX7GpwESNG-FYQI218Y1Ao1p5BttGqPoU5lGNeYUXxgxIqfN18ALHH10gRCRfqbC54faPU1lMr0e0jvi67GgGztyLl4ltAgK7HHTHmtZwghYNS45pKz_LFGm-TlKg-HPZBFT9GtbjRZe5IS2xdKkWM_sPA8qXwzvqmLN3OQckf0KchSUQmB3-wh4vYFV2TEjz10oR0FZO8LFFOOeooukcRDYy219XrdM21APnfszHmfKhzAFddOcYdwKwOL-w9TKVUwCIM70GL_YOtywA17mQkEm0ON79oyQ0daDlZ0ngDxC8xUIASYsRRPOkkCAwEAAaNQME4wHQYDVR0OBBYEFFO6MYgG9CvYp6qAqn_Jm-MANGpvMB8GA1UdIwQYMBaAFFO6MYgG9CvYp6qAqn_Jm-MANGpvMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAIGyOB_3oFo6f3WoFrdBzimb_weH8hejtCggpcL-8Wdex9VRl5MKi_1GlGbietMDsr1alwdaagam9RafuIQplohTSBnQrU-u-LbtRlCF9C25GDQ70S0QlxAQmt41Sc7kSFTPm6BHauF3b_Raf9AX30MamptoXoAhgMnHAitCn6yCOsRJ_d1t04lqsiqefhf26xItvRnkuxG7-IQnbyGFCGPcjFNAE1thLpL_6y_dprVwTLsvZnsWYj-1Gg1yUkOnCN8Kl3Q3RDVqo98mORUc0bKB-B8_FQsbtmzbb-29nXQJW1FJx0ejqJyDGGBPHAGpwEJTVB3mwWXzBU6Ny7T3dlk=\",\n                    \"fileType\": \"X509\"\n                  },\n                  {\n                    \"content\": \"MIID6TCCAtGgAwIBAgIJAKgdcZ45rGMDMA0GCSqGSIb3DQEBCwUAMIGJMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEUMBIGA1UECgwLR29vZ2xlIExMQy4xFDASBgNVBAsMC0Nocm9taXVtIE9TMSEwHwYDVQQDDBhVRUZJIEtleSBFeGNoYW5nZSBLZXkgdjEwIBcNMTgwNDI3MTUwNjM3WhgPMjIxODAzMTAxNTA2MzdaMIGJMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEUMBIGA1UECgwLR29vZ2xlIExMQy4xFDASBgNVBAsMC0Nocm9taXVtIE9TMSEwHwYDVQQDDBhVRUZJIEtleSBFeGNoYW5nZSBLZXkgdjEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCbIdHPMQZZU68jI5kz5rmwvo-DQZZJ5amRnAUnBpNllhNQB6TaLUS_D9TIo_0X1e8T21Xk4Pf3D5ckbuQxsJzQ5OVEOb59sJ9AhjVUoxQxuVW-iBzD0mWbxKf2cASy2YRIEcaAAI5QT2SwO8gZy_G8LwAk-vO0vIbynN0WuFLl1Dp2cMQ3CxLSPH-QPSZyGd6o6ewUU9JzboppujXpk43EQH5ZJE_wJb_ujUFWcFzKHb_EkV1hI1TmBJ1-vR2kao4_1hQO6k1zLUR-MyBHY0SRU2OQxBpSez-qt7oItMBc1EanXvq9tqx0ndCTmXQYQplT5wtkPbE9sd5zwbDt8btHAgMBAAGjUDBOMB0GA1UdDgQWBBS5Tmmv3JM8w1mfP9V5xAIdjBhb7TAfBgNVHSMEGDAWgBS5Tmmv3JM8w1mfP9V5xAIdjBhb7TAMBgNVHRMEBTADAQH_MA0GCSqGSIb3DQEBCwUAA4IBAQB9BRTP37ik4jF2BmJJspMA6NHS7mxIckFCYKl-TO8zGFd3mlA6dnEw5WY-tUcBNJpAaHNJV_rzagGPpWMIoy-nAaLSSpnyhEXYTnQvzejYRijN3N0V9tmM0qgViHNBqTxdfcwlst5OUesGHPqgBOt5RRu5OGJ0rkuymWwxHOKIw43hz5FW7vhumbtJ3iy8HSFQIjSYMkr0sOzJhmvnHlpZ4pOoPNyNA9DM6smriH-2-MnJFM9w8bg6zsV5X-6KL464_FuXL_X_IWmAsAbi8Ge8ZMJjEaDrF1qkD4aLvu0MshzEdvrvQO-3Gn3Lmi_RYKR0HKZp7jXTySj76sxt9QK4\",\n                    \"fileType\": \"X509\"\n                  }\n                ]\n              },\n              \"architecture\": \"X86_64\"\n            }\n          ],\n          \"metadata\": {\n            \"kind\": \"compute#metadata\",\n            \"fingerprint\": \"EVspfRhp7rs=\",\n            \"items\": [\n              {\n                \"key\": \"instance-template\",\n                \"value\": \"projects/12340002/regions/europe-west4/instanceTemplates/gke-gke1-default-pool-dee670f4\"\n              },\n              {\n                \"key\": \"created-by\",\n                \"value\": \"projects/12340002/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-dee670f4-grp\"\n              },\n              {\n                \"key\": \"serial-port-logging-enable\",\n                \"value\": \"true\"\n              },\n              {\n                \"key\": \"kube-labels\",\n                \"value\": \"cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-memory-gb-scaling-level=4,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=e2,cloud.google.com/private-node=false,node.kubernetes.io/masq-agent-ds-ready=true\"\n              },\n              {\n                \"key\": \"google-compute-enable-pcid\",\n                \"value\": \"true\"\n              },\n              {\n                \"key\": \"kubelet-config\",\n                \"value\": \"apiVersion: kubelet.config.k8s.io/v1beta1\\nauthentication:\\n  anonymous:\\n    enabled: false\\n  webhook:\\n    enabled: true\\n  x509:\\n    clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\\nauthorization:\\n  mode: Webhook\\ncgroupRoot: /\\nclusterDNS:\\n- 192.168.2.10\\nclusterDomain: cluster.local\\nenableDebuggingHandlers: true\\nevictionHard:\\n  memory.available: 100Mi\\n  nodefs.available: 10%\\n  nodefs.inodesFree: 5%\\n  pid.available: 10%\\nfeatureGates:\\n  DisableKubeletCloudCredentialProviders: true\\n  ExecProbeTimeout: false\\n  RotateKubeletServerCertificate: true\\nkernelMemcgNotification: true\\nkind: KubeletConfiguration\\nkubeReserved:\\n  cpu: 1060m\\n  ephemeral-storage: 41Gi\\n  memory: 1019Mi\\nmaxParallelImagePulls: 3\\nreadOnlyPort: 10255\\nserializeImagePulls: false\\nserverTLSBootstrap: true\\nstaticPodPath: /etc/kubernetes/manifests\\n\"\n              },\n              {\n                \"key\": \"cluster-name\",\n                \"value\": \"gke1\"\n              },\n              {\n                \"key\": \"kubeconfig\",\n                \"value\": \"apiVersion: v1\\nkind: Config\\nclusters:\\n- cluster:\\n    server: https://192.168.0.2\\n    certificate-authority: 11112222/etc/srv/kubernetes/pki/ca-certificates.crt'\\n  name: default-cluster\\ncontexts:\\n- context:\\n    cluster: default-cluster\\n    namespace: default\\n    user: exec-plugin-auth\\n  name: default-context\\ncurrent-context: default-context\\nusers:\\n- name: exec-plugin-auth\\n  user:\\n    exec:\\n      apiVersion: \\\"client.authentication.k8s.io/v1beta1\\\"\\n      command: '/home/kubernetes/bin/gke-exec-auth-plugin'\\n      args: [\\\"--cache-dir\\\", '/var/lib/kubelet/pki/']\\n\"\n              },\n              {\n                \"key\": \"gci-update-strategy\",\n                \"value\": \"update_disabled\"\n              },\n              {\n                \"key\": \"gci-metrics-enabled\",\n                \"value\": \"true\"\n              },\n              {\n                \"key\": \"configure-sh\",\n                \"value\": \"#!/usr/bin/env bash\\n\\n# Copyright 2016 The Kubernetes Authors.\\n#\\n# Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n# you may not use this file except in compliance with the License.\\n# You may obtain a copy of the License at\\n#\\n#     http://www.apache.org/licenses/LICENSE-2.0\\n#\\n# Unless required by applicable law or agreed to in writing, software\\n# distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n# See the License for the specific language governing permissions and\\n# limitations under the License.\\n\\n# Due to the GCE custom metadata size limit, we split the entire script into two\\n# files configure.sh and configure-helper.sh. The functionality of downloading\\n# kubernetes configuration, manifests, docker images, and binary files are\\n# put in configure.sh, which is uploaded via GCE custom metadata.\\n\\nset -o errexit\\nset -o nounset\\nset -o pipefail\\n\\n### Hardcoded constants\\n\\nDEFAULT_CNI_VERSION=11112222v1.5.0-gke.3'\\nDEFAULT_CNI_HASH_LINUX_AMD64='b53474f2a4109e9c54a4f526386a6311622e96b739109abdd77d7f063220c8be04f2b36e23f5c8eba37dc664b833b3a920acbfe04e170667835f30ccdbba0bbf'\\nDEFAULT_CNI_HASH_LINUX_ARM64='32c0093c87fe46a4243d382b16184d98cd14411dfb590552baaad10d2ba115682c77e39ed60fffb9e06ed3e9ea666ee6618fd7ecbc81ba9f3b49e700991e5d38'\\n\\nDEFAULT_NPD_VERSION='v0.8.19-12-g5efc8884-gke.1'\\nDEFAULT_NPD_HASH_AMD64='c9d652c18ab2e90f5b0de0384f0af7d9bb0abf14c7120828fdb8f1aad7950178195547cf9be49d4647e86366d2f4a462d2b9d3d7550840c48545a2268f97abd2'\\nDEFAULT_NPD_HASH_ARM64='4520a9642525f6f271b76cfcb23a0d6a385860098d247aa63bc68b6b1e5aca198b50fd03c6354c8109e7f816260b47b4658ee70c617460dbb0263b7a7977e5a8'\\n\\nNPD_CUSTOM_PLUGINS_VERSION=\\\"v1.0.20\\\"\\nNPD_CUSTOM_PLUGINS_TAR_AMD64_HASH=\\\"0907d1949013577cb13f90d10274e37f4ff6962fb97d23454b38562966f31d0d50da960278da7353215ecc6ec777b7a87c2972f3244ba7a8c9444282cc5dd84c\\\"\\nNPD_CUSTOM_PLUGINS_TAR_ARM64_HASH=\\\"773062478605e5bf6d65c7e1374bff6b6cb2a99fc59ea46472c2fe4b15451f8547c740495961f1a9c50077ea67d16e32106733326d7e197dac60a07d8b05a375\\\"\\n\\nDEFAULT_CRICTL_VERSION='v1.31.1-gke.0'\\nDEFAULT_CRICTL_AMD64_SHA512='7c0ea3355b53c79e00772cfdf0bf67d262a9a0e827fdcf5be956ff68be25b47d7cb5cd6b065e3de251efc7b4534961e37a37b9f0e3f1efa22dfe2b5149702889'\\nDEFAULT_CRICTL_ARM64_SHA512='05c8a74117288def73c430aa7f207432c2b0e6f0560bb795f90debb65902a76e1d001e876a319cdf090c78ca4cbafa8021dd1a93e938aa74fd800677020446f6'\\nDEFAULT_MOUNTER_ROOTFS_VERSION='v1.0.0'\\nDEFAULT_MOUNTER_ROOTFS_TAR_AMD64_SHA512='631330b7fa911d67e400b1d014df65a7763667d4afd4ecefe11a4a89dc9b8be626e5610d53b536c255a3ab488408ab2da8a0699d9fdad280cb3aa24bc2f30ab0'\\nDEFAULT_MOUNTER_ROOTFS_TAR_ARM64_SHA512='83cf9ab7961627359654131abd2d4c4b72875d395c50cda9e417149b2eb53b784dfe5c2f744ddbccfe516e36dd64c716d69d161d8bc8b4f42a9207fe676d0bc1'\\n\\nRIPTIDE_FUSE_VERSION=\\\"v0.237.1.patch\\\"\\nRIPTIDE_FUSE_ARM64_SHA512='611a54c566cd156ee18f63b4f590cef6f044f4dd3f4ad77164a2f03e2ea00db1902c2253ac03eb760332aee214cf28a852f41075113b0350a478e01fcad641bd'\\nRIPTIDE_FUSE_BIN_ARM64_SHA512='bf17276292fb7b9acf76a3b80a4f7023cf1e97f64df6feef23940be3dfdeeecdfacbaf8babc754a9280a9d22f0d1039eee3c0d59fcd0951b7a3228c35a68d4c8'\\nRIPTIDE_FUSE_AMD64_SHA512='d28deb2df0ef7d60fe520113f4e59dd4d0238713b2e99d8147a3e101c8c2e91f830296601cdb1044880ac9709bd33f461b7c60fa301254889d733f7a653e569d'\\nRIPTIDE_FUSE_BIN_AMD64_SHA512='d62c20fa299c738359b400da2171bafbcf4550b77de74dcfa53cf86b5a6c480b4ae91fe9c2cc564e188e4fb60f7cf3b6448199cd147105c655e37583a93c80e3'\\n\\nRIPTIDE_SNAPSHOTTER_VERSION=\\\"v1.31-1\\\"\\nRIPTIDE_SNAPSHOTTER_SHA512='f8ea490a719e4e3dd3177f48f85e066802173e36a8bdcfcc1e5507f05c88ac8296fd9a82e79292e23007c7e574dc054d28ac405427c9f4eb9778270339bf24e8'\\nRIPTIDE_SNAPSHOTTER_BIN_ARM64_SHA512='1d7d0dd3ce52f831adba1037142e6b315e2de7919e8fa4ab86892d353e2a642697915011c165a20386b047acf8c7a5764a9674569746f141f0376f0060671b9f'\\nRIPTIDE_SNAPSHOTTER_BIN_AMD64_SHA512='1e81cee5ac33bef018029ddd39db307c3f0044bc9ac52621066094e05ea4e87ece75294be19de21875dbd2a65d1a52ce03f7b2fec132d785d6485e25ee90c597'\\n\\nAUTH_PROVIDER_GCP_VERSION=\\\"v0.0.2-gke.4\\\"\\nAUTH_PROVIDER_GCP_HASH_LINUX_AMD64=\\\"156058e5b3994cba91c23831774033e0d505d6d8b80f43541ef6af91b320fd9dfaabe42ec8a8887b51d87104c2b57e1eb895649d681575ffc80dd9aee8e563db\\\"\\nAUTH_PROVIDER_GCP_HASH_LINUX_ARM64=\\\"1aa3b0bea10a9755231989ffc150cbfa770f1d96932db7535473f7bfeb1108bafdae80202ae738d59495982512e716ff7366d5f414d0e76dd50519f98611f9ab\\\"\\n\\n# gke-exec-auth-plugin local version.\\n# The URLs below are relative to ${STORAGE_ENDPOINT}/${EXEC_AUTH_PLUGIN_BUCKET}\\nEXEC_AUTH_PLUGIN_BUCKET=\\\"gke-prod-binaries\\\"\\nEXEC_AUTH_PLUGIN_VERSION=\\\"internal/gke-internal-branch-v1-31/c41916da792183068bb56af4129dbd4718fa1708\\\"\\nEXEC_AUTH_PLUGIN_LINUX_AMD64_HASH=\\\"026795bdf3e8cb1d384e1f69d7f01ad35221fd57a2dc7e778d9a9847f0b987d3cce38f4fcc20234bba405a6796723687ca40c130837b7e74fafdd99f74566e9c\\\"\\nEXEC_AUTH_PLUGIN_LINUX_ARM64_HASH=\\\"71aa357a8c3f7d4216a6a58d1a9a0f952df131bb2ba53d83308f2f234fdba7d165501b4842fbeaea9db0e0b3126b084538c44bf4c644733a3a578822b396d5f4\\\"\\n\\n###\\n\\n# Backend endpoints (configurable for TPC).\\n# May be overridden when kube-env is sourced.\\n#\\n# NOTE: Endpoints should behave exactly like a GDU (Google Default Universe)\\n# endpoint. E.g., An alternative `STORAGE_ENDPOINT` must have the same buckets\\n# and paths as the `storage.googleapis.com` that this script depends on.\\nSTORAGE_ENDPOINT=\\\"${STORAGE_ENDPOINT:-https://storage.googleapis.com}\\\"\\nPGA_ENDPOINT=\\\"${PGA_ENDPOINT:-private.googleapis.com}\\\"\\nKUBE_DOCKER_REGISTRY=\\\"${KUBE_DOCKER_REGISTRY:-gke.gcr.io}\\\"\\n\\n# Whether to configure private google access or not (defaults to true).\\n# May be overridden when kube-env is sourced.\\nCONFIGURE_PGA=\\\"${CONFIGURE_PGA:-true}\\\"\\n\\n# Standard curl flags.\\nCURL_FLAGS='--fail --silent --show-error --retry 5 --retry-delay 3 --connect-timeout 10 --retry-connrefused'\\n\\n# This version needs to be the same as in gke/cluster/gce/gci/configure-helper.sh\\nGKE_CONTAINERD_INFRA_CONTAINER=\\\"pause:3.8@sha256:880e63f94b145e46f1b1082bb71b85e21f16b99b180b9996407d61240ceb9830\\\"\\n\\n# Set max reboot retry 3 plus the inital boot count\\nMAX_BOOT_COUNT=\\\"${MAX_BOOT_COUNT:-4}\\\"\\n\\nfunction set-broken-motd {\\n  cat \\u003e /etc/motd \\u003c\\u003cEOF\\nBroken (or in progress) Kubernetes node setup! Check the cluster initialization status\\nusing the following commands.\\n\\nMaster instance:\\n  - sudo systemctl status kube-master-installation\\n  - sudo systemctl status kube-master-configuration\\n\\nNode instance:\\n  - sudo systemctl status kube-node-installation\\n  - sudo systemctl status kube-node-configuration\\nEOF\\n}\\n\\n# A function that fetches a GCE metadata value and echoes it out.\\n# Args:\\n#   $1 : URL path after /computeMetadata/v1/ (without heading slash).\\n#   $2 : An optional default value to echo out if the fetch fails.\\n#\\n# NOTE: this function is duplicated in configure-helper.sh, any changes here\\n# should be duplicated there as well.\\nfunction get-metadata-value {\\n  local default=\\\"${2:-}\\\"\\n\\n  local status\\n  # shellcheck disable=SC2086\\n  curl ${CURL_FLAGS} \\\\\\n    -H 'Metadata-Flavor: Google' \\\\\\n    \\\"http://metadata/computeMetadata/v1/${1}\\\" \\\\\\n  || status=\\\"$?\\\"\\n  status=\\\"${status:-0}\\\"\\n\\n  if [[ \\\"${status}\\\" -eq 0 || -z \\\"${default}\\\" ]]; then\\n    return \\\"${status}\\\"\\n  else\\n    echo \\\"${default}\\\"\\n  fi\\n}\\n\\n# A function to fetch kube-env from GCE metadata server\\n# or using hurl on the master if available\\nfunction download-kube-env {\\n  (\\n    umask 077\\n    local kube_env_path=\\\"/tmp/kube-env.yaml\\\"\\n    if [[ \\\"${KUBERNETES_MASTER:-}\\\" == \\\"true\\\" ]]; then\\n      local kube_env_path=\\\"${KUBE_HOME}/kube-env.yaml\\\"\\n      download-kube-env-hurl \\\"${kube_env_path}\\\"\\n    else\\n      local meta_path=\\\"http://metadata.google.internal/computeMetadata/v1/instance/attributes/kube-env\\\"\\n      echo \\\"Downloading kube-env via GCE metadata from ${meta_path} to ${kube_env_path}\\\"\\n      # shellcheck disable=SC2086\\n      retry-forever 10 curl ${CURL_FLAGS} \\\\\\n        -H \\\"X-Google-Metadata-Request: True\\\" \\\\\\n        -o \\\"${kube_env_path}\\\" \\\\\\n        \\\"${meta_path}\\\"\\n    fi\\n\\n    # Convert the yaml format file into a shell-style file.\\n    eval \\\"$(python3 -c '''\\nimport pipes,sys,yaml\\nitems = yaml.load(sys.stdin, Loader=yaml.BaseLoader).items()\\nfor k, v in items:\\n    print(\\\"readonly {var}={value}\\\".format(var=k, value=pipes.quote(str(v))))\\n''' \\u003c \\\"${kube_env_path}\\\" \\u003e \\\"${KUBE_HOME}/kube-env\\\")\\\"\\n\\n    # Leave kube-env if we are a master\\n    if [[ \\\"${KUBERNETES_MASTER:-}\\\" != \\\"true\\\" ]]; then\\n      rm -f \\\"${kube_env_path}\\\"\\n    fi\\n  )\\n}\\n\\n# A function to pull kube-env from HMS using hurl\\nfunction download-kube-env-hurl {\\n  local -r kube_env_path=\\\"$1\\\"\\n  local -r endpoint=$(get-metadata-value \\\"instance/attributes/gke-api-endpoint\\\")\\n  local -r kube_env_hms_path=$(get-metadata-value \\\"instance/attributes/kube-env-path\\\")\\n\\n  echo \\\"Downloading kube-env via hurl from ${kube_env_hms_path} to ${kube_env_path}\\\"\\n  retry-forever 30 ${KUBE_HOME}/bin/hurl --hms_address $endpoint \\\\\\n    --dst \\\"${kube_env_path}\\\" \\\\\\n    \\\"${kube_env_hms_path}\\\"\\n  chmod 600 \\\"${kube_env_path}\\\"\\n}\\n\\nfunction download-kubelet-config {\\n  local -r dest=\\\"$1\\\"\\n  echo \\\"Downloading Kubelet config file, if it exists\\\"\\n  # Fetch kubelet config file from GCE metadata server.\\n  (\\n    umask 077\\n    local -r tmp_kubelet_config=\\\"/tmp/kubelet-config.yaml\\\"\\n    # shellcheck disable=SC2086\\n    retry-forever 10 curl ${CURL_FLAGS} \\\\\\n      -H \\\"X-Google-Metadata-Request: True\\\" \\\\\\n      -o \\\"${tmp_kubelet_config}\\\" \\\\\\n      http://metadata.google.internal/computeMetadata/v1/instance/attributes/kubelet-config\\n    # only write to the final location if curl succeeds\\n    mv \\\"${tmp_kubelet_config}\\\" \\\"${dest}\\\"\\n  )\\n}\\n\\n# A function to pull kube-master-certs from HMS using hurl\\nfunction download-kube-master-certs-hurl {\\n  local -r endpoint=$(get-metadata-value \\\"instance/attributes/gke-api-endpoint\\\")\\n  local -r tmp_kube_master_certs_path=\\\"/tmp/kube-master-certs.yaml\\\"\\n  local -r kube_master_certs_path=\\\"${KUBE_HOME}/kube-master-certs\\\"\\n  local -r kube_master_certs_hms_path=$(get-metadata-value \\\"instance/attributes/kube-master-certs-path\\\")\\n\\n  echo \\\"Downloading kube-master-certs via hurl from ${kube_master_certs_hms_path} to ${tmp_kube_master_certs_path}\\\"\\n  retry-forever 30 ${KUBE_HOME}/bin/hurl --hms_address $endpoint \\\\\\n    --dst \\\"${tmp_kube_master_certs_path}\\\" \\\\\\n    \\\"${kube_master_certs_hms_path}\\\"\\n\\n  # Convert the yaml format file into a shell-style file.\\n  eval \\\"$(python3 -c '''\\nimport pipes,sys,yaml\\nitems = yaml.load(sys.stdin, Loader=yaml.BaseLoader).items()\\nfor k, v in items:\\n    print(\\\"readonly {var}={value}\\\".format(var=k, value=pipes.quote(str(v))))\\n''' \\u003c \\\"${tmp_kube_master_certs_path}\\\" \\u003e \\\"${kube_master_certs_path}\\\")\\\"\\n\\n  # Remove the temp certs and strip perms for other users\\n  rm -f \\\"${tmp_kube_master_certs_path}\\\"\\n  chmod 600 \\\"${kube_master_certs_path}\\\"\\n}\\n\\nfunction validate-hash {\\n  local -r file=\\\"$1\\\"\\n  local -r expected=\\\"$2\\\"\\n\\n  actual_sha1=$(sha1sum \\\"${file}\\\" | awk '{ print $1 }') || true\\n  actual_sha512=$(sha512sum \\\"${file}\\\" | awk '{ print $1 }') || true\\n  if [[ \\\"${actual_sha1}\\\" != \\\"${expected}\\\" ]] && [[ \\\"${actual_sha512}\\\" != \\\"${expected}\\\" ]]; then\\n    echo \\\"== ${file} corrupted, sha1 ${actual_sha1}/sha512 ${actual_sha512} doesn't match expected ${expected} ==\\\"\\n    return 1\\n  fi\\n}\\n\\n# Get default service account credentials of the VM.\\nGCE_METADATA_INTERNAL=\\\"http://metadata.google.internal/computeMetadata/v1/instance\\\"\\nfunction get-credentials {\\n  # shellcheck disable=SC2086\\n  curl ${CURL_FLAGS} \\\\\\n    -H \\\"Metadata-Flavor: Google\\\" \\\\\\n    \\\"${GCE_METADATA_INTERNAL}/service-accounts/default/token\\\" \\\\\\n  | python3 -c 'import sys; import json; print(json.loads(sys.stdin.read())[\\\"access_token\\\"])'\\n}\\n\\nfunction valid-storage-scope {\\n  # shellcheck disable=SC2086\\n  curl ${CURL_FLAGS} \\\\\\n    -H \\\"Metadata-Flavor: Google\\\" \\\\\\n    \\\"${GCE_METADATA_INTERNAL}/service-accounts/default/scopes\\\" \\\\\\n  | grep -E \\\"auth/devstorage|auth/cloud-platform\\\"\\n}\\n\\n# Retry a download until we get it. Takes a hash and a set of URLs.\\n#\\n# $1 is the sha512/sha1 hash of the URL. Can be \\\"\\\" if the sha512/sha1 hash is unknown.\\n# $2+ are the URLs to download.\\n# env var FORCE_USE_CREDENTIAL indicates whether to force using credential.\\nfunction download-or-bust {\\n  if [[ \\\"${ARTIFACT_DOWNLOAD_RESTRICTED:-}\\\" == \\\"true\\\" ]]; then\\n    echo \\\"Cannot download: $* as downloading is restricted, exiting\\\"\\n    exit 1\\n  fi\\n\\n  local -r hash=\\\"$1\\\"\\n  shift 1\\n\\n  while true; do\\n    for url in \\\"$@\\\"; do\\n      local file=\\\"${url##*/}\\\"\\n      rm -f \\\"${file}\\\"\\n      # if the url belongs to GCS API we should use oauth2_token in the headers if the VM service account has storage scopes\\n      local curl_headers=\\\"\\\"\\n\\n      if [[ \\\"$url\\\" =~ ^${STORAGE_ENDPOINT}/.* ]] || [[ \\\"${FORCE_USE_CREDENTIAL:-false}\\\" == \\\"true\\\" ]] ; then\\n        local canUseCredentials=0\\n\\n        echo \\\"Getting the scope of service account configured for VM.\\\"\\n        if ! valid-storage-scope ; then\\n          canUseCredentials=1\\n          # this behavior is preserved for backward compatibility. We want to fail fast if SA is not available\\n          # and try to download without SA if scope does not exist on SA\\n          echo \\\"No service account or service account without storage scope. Attempt to download without service account token.\\\"\\n        fi\\n\\n        if [[ \\\"${canUseCredentials}\\\" == \\\"0\\\" ]] ; then\\n          echo \\\"Getting the service account access token configured for VM.\\\"\\n          local access_token=\\\"\\\";\\n          if access_token=$(get-credentials); then\\n            echo \\\"Service account access token is received. Downloading ${url} using this token.\\\"\\n          else\\n            echo \\\"Cannot get a service account token. Exiting.\\\"\\n            exit 1\\n          fi\\n\\n          curl_headers=${access_token:+Authorization: Bearer \\\"${access_token}\\\"}\\n        fi\\n      fi\\n      if ! curl ${curl_headers:+-H \\\"${curl_headers}\\\"} -f --ipv4 -Lo \\\"${file}\\\" --connect-timeout 20 --retry 6 --retry-delay 10 --retry-connrefused \\\"${url}\\\"; then\\n        echo \\\"== Failed to download ${url}. Retrying. ==\\\"\\n      elif [[ -n \\\"${hash}\\\" ]] && ! validate-hash \\\"${file}\\\" \\\"${hash}\\\"; then\\n        echo \\\"== Hash validation of ${url} failed. Retrying. ==\\\"\\n      else\\n        if [[ -n \\\"${hash}\\\" ]]; then\\n          echo \\\"== Downloaded ${url} (HASH = ${hash}) ==\\\"\\n        else\\n          echo \\\"== Downloaded ${url} ==\\\"\\n        fi\\n        return\\n      fi\\n    done\\n  done\\n}\\n\\nfunction record-preload-info {\\n  echo \\\"$1,$2\\\" \\u003e\\u003e \\\"${KUBE_HOME}/preload_info\\\"\\n  echo \\\"Recording preload info for ${1} ${2}\\\"\\n}\\n\\nfunction is-preloaded {\\n  local -r key=$1\\n  local -r value=$2\\n\\n  if ! grep -qs \\\"${key},${value}\\\" \\\"${KUBE_HOME}/preload_info\\\"; then\\n    if [[ \\\"${ARTIFACT_DOWNLOAD_RESTRICTED:-}\\\" == \\\"true\\\" ]]; then\\n      echo \\\"No preload record found for ${key} and ${value} and downloading is restricted, exiting\\\"\\n      exit 1\\n    fi\\n    if [[ \\\"${KUBERNETES_MASTER:-}\\\" == \\\"true\\\" ]]; then\\n      echo \\\"No preload record found for ${key} and ${value}\\\"\\n    fi\\n    return 1\\n  fi\\n}\\n\\nfunction is-ubuntu {\\n  [[ -f \\\"/etc/os-release\\\" && $(grep ^NAME= /etc/os-release) == 'NAME=\\\"Ubuntu\\\"' ]]\\n}\\n\\nfunction split-commas {\\n  echo -e \\\"${1//,/'\\\\n'}\\\"\\n}\\n\\nfunction remount-flexvolume-directory {\\n  local -r flexvolume_plugin_dir=$1\\n  mkdir -p \\\"$flexvolume_plugin_dir\\\"\\n  mount --bind \\\"$flexvolume_plugin_dir\\\" \\\"$flexvolume_plugin_dir\\\"\\n  mount -o remount,exec \\\"$flexvolume_plugin_dir\\\"\\n}\\n\\nfunction install-gci-mounter-tools {\\n  CONTAINERIZED_MOUNTER_HOME=\\\"${KUBE_HOME}/containerized_mounter\\\"\\n  if [[ -n \\\"${MOUNTER_ROOTFS_VERSION:-}\\\" ]]; then\\n      local -r mounter_rootfs_version=\\\"${MOUNTER_ROOTFS_VERSION}\\\"\\n      local -r mounter_rootfs_tar_sha=\\\"${MOUNTER_ROOTFS_TAR_SHA512}\\\"\\n  else\\n    local -r mounter_rootfs_version=\\\"${DEFAULT_MOUNTER_ROOTFS_VERSION}\\\"\\n    case \\\"${HOST_PLATFORM}/${HOST_ARCH}\\\" in\\n      linux/amd64)\\n        local -r mounter_rootfs_tar_sha=\\\"${DEFAULT_MOUNTER_ROOTFS_TAR_AMD64_SHA512}\\\"\\n        ;;\\n      linux/arm64)\\n        local -r mounter_rootfs_tar_sha=\\\"${DEFAULT_MOUNTER_ROOTFS_TAR_ARM64_SHA512}\\\"\\n        ;;\\n      *)\\n        echo \\\"Unrecognized version and platform/arch combination:\\\"\\n        echo \\\"$mounter_rootfs_version $HOST_PLATFORM/$HOST_ARCH\\\"\\n        echo \\\"Set MOUNTER_ROOTFS_VERSION and MOUNTER_ROOTFS_TAR_SHA512 to overwrite\\\"\\n        exit 1\\n        ;;\\n    esac\\n  fi\\n\\n  if is-preloaded \\\"mounter\\\" \\\"${mounter_rootfs_tar_sha}\\\"; then\\n    echo \\\"mounter is preloaded.\\\"\\n    return\\n  fi\\n\\n  echo \\\"Downloading gci mounter tools.\\\"\\n  mkdir -p \\\"${CONTAINERIZED_MOUNTER_HOME}\\\"\\n  chmod a+x \\\"${CONTAINERIZED_MOUNTER_HOME}\\\"\\n\\n  # Copy the mounter binary downloaded with the k8s binaries tar file\\n  cp \\\"${KUBE_HOME}/kubernetes/server/bin/mounter\\\" \\\"${CONTAINERIZED_MOUNTER_HOME}/mounter\\\"\\n  chmod a+x \\\"${CONTAINERIZED_MOUNTER_HOME}/mounter\\\"\\n  # Download the debian rootfs required for the mounter container\\n  mkdir -p \\\"${CONTAINERIZED_MOUNTER_HOME}/rootfs\\\"\\n  local -r mounter_rootfs_tar=\\\"containerized-mounter-${mounter_rootfs_version}_${HOST_PLATFORM}_${HOST_ARCH}.tar.gz\\\"\\n  download-or-bust \\\"${mounter_rootfs_tar_sha}\\\" \\\"${STORAGE_ENDPOINT}/gke-release/containerized-mounter/${mounter_rootfs_version}/${mounter_rootfs_tar}\\\"\\n  mv \\\"${KUBE_HOME}/${mounter_rootfs_tar}\\\" \\\"/tmp/${mounter_rootfs_tar}\\\"\\n  tar xzf \\\"/tmp/${mounter_rootfs_tar}\\\" -C \\\"${CONTAINERIZED_MOUNTER_HOME}/rootfs\\\"\\n  rm \\\"/tmp/${mounter_rootfs_tar}\\\"\\n  mkdir -p \\\"${CONTAINERIZED_MOUNTER_HOME}/rootfs/var/lib/kubelet\\\"\\n\\n  record-preload-info \\\"mounter\\\" \\\"${mounter_rootfs_tar_sha}\\\"\\n}\\n\\nfunction docker-installed {\\n    if systemctl cat docker.service &\\u003e /dev/null ; then\\n        return 0\\n    else\\n        return 1\\n    fi\\n}\\n\\nfunction disable_aufs() {\\n  # disable aufs module if aufs is loaded\\n  if lsmod | grep \\\"aufs\\\" &\\u003e /dev/null ; then\\n    sudo modprobe -r aufs\\n  fi\\n}\\n\\nfunction detect_mtu {\\n  local MTU=1460\\n  if [[ \\\"${DETECT_MTU:-}\\\" == \\\"true\\\" ]];then\\n    local default_nic=$(ip route get 8.8.8.8 | sed -nr \\\"s/.*dev ([^\\\\ ]+).*/\\\\1/p\\\")\\n    if [ -f \\\"/sys/class/net/$default_nic/mtu\\\" ]; then\\n      MTU=$(cat /sys/class/net/$default_nic/mtu)\\n    fi\\n  fi\\n  echo $MTU\\n}\\n\\n# This function cofigures docker. It has no conditional logic.\\n# It will restart docker service so new settings will be picked up.\\n# This method cannot be preloaded as the boot disk changes will not be persistet thru the reboots.\\nfunction assemble-docker-flags {\\n  # log the contents of the /etc/docker/daemon.json if already exists\\n  if [ -f /etc/docker/daemon.json ]; then\\n    echo \\\"Contents of the old docker config\\\"\\n    cat /etc/docker/daemon.json\\n  fi\\n\\n  disable_aufs\\n\\n  # COS and Ubuntu have different docker options configured as command line arguments.\\n  # Use systemctl show docker to see the full list of options.\\n  # When configuring Docker options you can use daemon.json or command line arguments\\n  # The same option cannot be configured by both, even if it is a list option and can be repeated in the command line multiple times.\\n  # This is why we are not simply configuring everything in daemon.json.\\n\\n  local MTU=\\\"$(detect_mtu)\\\"\\n\\n  # options to be set on COS, registry-mirror is pre-configured on COS\\n  local os_specific_options=\\\"\\\\\\\"live-restore\\\\\\\": true,\\\\\\n   \\\\\\\"storage-driver\\\\\\\": \\\\\\\"overlay2\\\\\\\",\\\\\\n   \\\\\\\"mtu\\\\\\\": ${MTU},\\\"\\n\\n  if is-ubuntu; then\\n    # Ubuntu already have everthing set\\n    os_specific_options=\\\"\\\"\\n  fi\\n\\n  # Important setting: set docker0 cidr to private ip address range to avoid conflict with cbr0 cidr range (\\\"bip\\\": \\\"169.254.123.1/24\\\")\\n  cat \\u003e /etc/docker/daemon.json \\u003c\\u003cEOF\\n{\\n  \\\"pidfile\\\": \\\"/var/run/docker.pid\\\",\\n  \\\"iptables\\\": false,\\n  \\\"ip-masq\\\": false,\\n  \\\"log-level\\\": \\\"warn\\\",\\n  \\\"bip\\\": \\\"169.254.123.1/24\\\",\\n  \\\"log-driver\\\": \\\"json-file\\\",\\n  ${os_specific_options}\\n  \\\"log-opts\\\": {\\n      \\\"max-size\\\": \\\"10m\\\",\\n      \\\"max-file\\\": \\\"5\\\"\\n  }\\n}\\nEOF\\n\\n  # Do not move to the daemon.json file for backward compatibility.\\n  # Command line and config file options cannot be both defined and custoemr customization may break.\\n  # insecure-registry setting was inherited from the past, see b/203231428. Keeping for backward compatibility.\\n  echo \\\"DOCKER_OPTS=\\\\\\\"--registry-mirror=https://mirror.gcr.io --insecure-registry 10.0.0.0/8\\\\\\\"\\\" \\u003e /etc/default/docker\\n\\n  echo \\\"Docker command line and configuration are updated. Restart docker to pick it up\\\"\\n  systemctl restart docker\\n}\\n\\n# Install node problem detector binary.\\nfunction install-node-problem-detector {\\n  if [[ -n \\\"${NODE_PROBLEM_DETECTOR_VERSION:-}\\\" ]]; then\\n      local -r npd_version=\\\"${NODE_PROBLEM_DETECTOR_VERSION}\\\"\\n      local -r npd_hash=\\\"${NODE_PROBLEM_DETECTOR_TAR_HASH}\\\"\\n  else\\n      local -r npd_version=\\\"${DEFAULT_NPD_VERSION}\\\"\\n      case \\\"${HOST_PLATFORM}/${HOST_ARCH}\\\" in\\n        linux/amd64)\\n          local -r npd_hash=\\\"${DEFAULT_NPD_HASH_AMD64}\\\"\\n          ;;\\n        linux/arm64)\\n          local -r npd_hash=\\\"${DEFAULT_NPD_HASH_ARM64}\\\"\\n          ;;\\n        # no other architectures are supported currently.\\n        # Assumption is that this script only runs on linux,\\n        # see cluster/gce/windows/k8s-node-setup.psm1 for windows\\n        # https://github.com/kubernetes/node-problem-detector/releases/\\n        *)\\n          echo \\\"Unrecognized version and platform/arch combination:\\\"\\n          echo \\\"$DEFAULT_NPD_VERSION $HOST_PLATFORM/$HOST_ARCH\\\"\\n          echo \\\"Set NODE_PROBLEM_DETECTOR_VERSION and NODE_PROBLEM_DETECTOR_TAR_HASH to overwrite\\\"\\n          exit 1\\n          ;;\\n      esac\\n  fi\\n  local -r npd_tar=\\\"node-problem-detector-${npd_version}-${HOST_PLATFORM}_${HOST_ARCH}.tar.gz\\\"\\n\\n  if is-preloaded \\\"${npd_tar}\\\" \\\"${npd_hash}\\\"; then\\n    echo \\\"${npd_tar} is preloaded.\\\"\\n    return\\n  fi\\n\\n  echo \\\"Downloading ${npd_tar}.\\\"\\n  local -r npd_release_path=\\\"${NODE_PROBLEM_DETECTOR_RELEASE_PATH:-${STORAGE_ENDPOINT}/gke-release}\\\"\\n  download-or-bust \\\"${npd_hash}\\\" \\\"${npd_release_path}/node-problem-detector/${npd_tar}\\\"\\n  local -r npd_dir=\\\"${KUBE_HOME}/node-problem-detector\\\"\\n  mkdir -p \\\"${npd_dir}\\\"\\n  tar xzf \\\"${KUBE_HOME}/${npd_tar}\\\" -C \\\"${npd_dir}\\\" --overwrite\\n  mv \\\"${npd_dir}/bin\\\"/* \\\"${KUBE_BIN}\\\"\\n  chmod a+x \\\"${KUBE_BIN}/node-problem-detector\\\"\\n  rmdir \\\"${npd_dir}/bin\\\"\\n  rm -f \\\"${KUBE_HOME}/${npd_tar}\\\"\\n\\n  record-preload-info \\\"${npd_tar}\\\" \\\"${npd_hash}\\\"\\n}\\n\\n# Install node problem detector custom plugins.\\nfunction install-npd-custom-plugins {\\n  local -r version=\\\"${NPD_CUSTOM_PLUGINS_VERSION}\\\"\\n  case \\\"${HOST_PLATFORM}/${HOST_ARCH}\\\" in\\n    linux/amd64)\\n      local -r hash=\\\"${NPD_CUSTOM_PLUGINS_TAR_AMD64_HASH}\\\"\\n      ;;\\n    linux/arm64)\\n      local -r hash=\\\"${NPD_CUSTOM_PLUGINS_TAR_ARM64_HASH}\\\"\\n      ;;\\n    *)\\n      echo \\\"Unrecognized version and platform/arch combination:\\\"\\n      echo \\\"$NPD_CUSTOM_PLUGINS_VERSION $HOST_PLATFORM/$HOST_ARCH\\\"\\n      exit 1\\n  esac\\n  local -r tar=\\\"npd-custom-plugins-${version}-${HOST_PLATFORM}-${HOST_ARCH}.tar.gz\\\"\\n\\n  if is-preloaded \\\"${tar}\\\" \\\"${hash}\\\"; then\\n    echo \\\"${tar} is preloaded.\\\"\\n    return\\n  fi\\n\\n  echo \\\"Downloading ${tar}.\\\"\\n  download-or-bust \\\"${hash}\\\" \\\"${STORAGE_ENDPOINT}/gke-release/npd-custom-plugins/${version}/${tar}\\\"\\n  local -r dir=\\\"${KUBE_HOME}/npd-custom-plugins\\\"\\n  mkdir -p \\\"${dir}\\\"\\n  tar xzf \\\"${KUBE_HOME}/${tar}\\\" -C \\\"${dir}\\\" --overwrite\\n  local -r kube_bin_dir=\\\"${KUBE_HOME}/bin\\\"\\n  cp -r \\\"${dir}/bins\\\"/* \\\"${kube_bin_dir}\\\"\\n  rm -f \\\"${KUBE_HOME}/${tar}\\\"\\n\\n  record-preload-info \\\"${tar}\\\" \\\"${hash}\\\"\\n}\\n\\nfunction install-cni-binaries {\\n  local -r cni_version=${CNI_VERSION:-$DEFAULT_CNI_VERSION}\\n  if [[ -n \\\"${CNI_VERSION:-}\\\" ]]; then\\n    local -r cni_hash=\\\"${CNI_HASH:-}\\\"\\n  else\\n    local -r cni_hash_var=\\\"DEFAULT_CNI_HASH_${HOST_PLATFORM^^}_${HOST_ARCH^^}\\\"\\n    local -r cni_hash=\\\"${!cni_hash_var}\\\"\\n  fi\\n\\n  local -r cni_tar=\\\"cni-plugins-${HOST_PLATFORM}-${HOST_ARCH}-${cni_version}.tgz\\\"\\n  local -r cni_url=\\\"${STORAGE_ENDPOINT}/gke-release/cni-plugins/${cni_version}/${cni_tar}\\\"\\n\\n  if is-preloaded \\\"${cni_tar}\\\" \\\"${cni_hash}\\\"; then\\n    echo \\\"${cni_tar} is preloaded.\\\"\\n    return\\n  fi\\n\\n  echo \\\"Downloading cni binaries\\\"\\n  download-or-bust \\\"${cni_hash}\\\" \\\"${cni_url}\\\"\\n  local -r cni_dir=\\\"${KUBE_HOME}/cni\\\"\\n  mkdir -p \\\"${cni_dir}/bin\\\"\\n  tar xzf \\\"${KUBE_HOME}/${cni_tar}\\\" -C \\\"${cni_dir}/bin\\\" --overwrite\\n  mv \\\"${cni_dir}/bin\\\"/* \\\"${KUBE_BIN}\\\"\\n  rmdir \\\"${cni_dir}/bin\\\"\\n  rm -f \\\"${KUBE_HOME}/${cni_tar}\\\"\\n\\n  record-preload-info \\\"${cni_tar}\\\" \\\"${cni_hash}\\\"\\n}\\n\\n# Install crictl binary.\\n# Assumptions: HOST_PLATFORM and HOST_ARCH are specified by calling detect_host_info.\\nfunction install-crictl {\\n  if [[ -n \\\"${CRICTL_VERSION:-}\\\" ]]; then\\n    local -r crictl_version=\\\"${CRICTL_VERSION}\\\"\\n    local -r crictl_hash=\\\"${CRICTL_TAR_HASH}\\\"\\n  else\\n    local -r crictl_version=\\\"${DEFAULT_CRICTL_VERSION}\\\"\\n    case \\\"${HOST_PLATFORM}/${HOST_ARCH}\\\" in\\n      linux/amd64)\\n        local -r crictl_hash=\\\"${DEFAULT_CRICTL_AMD64_SHA512}\\\"\\n        ;;\\n      linux/arm64)\\n        local -r crictl_hash=\\\"${DEFAULT_CRICTL_ARM64_SHA512}\\\"\\n        ;;\\n      *)\\n        echo \\\"Unrecognized version and platform/arch combination:\\\"\\n        echo \\\"$DEFAULT_CRICTL_VERSION $HOST_PLATFORM/$HOST_ARCH\\\"\\n        echo \\\"Set CRICTL_VERSION and CRICTL_TAR_HASH to overwrite\\\"\\n        exit 1\\n    esac\\n  fi\\n  local -r crictl=\\\"crictl-${crictl_version}-${HOST_PLATFORM}-${HOST_ARCH}.tar.gz\\\"\\n\\n  # Create crictl config file.\\n  cat \\u003e /etc/crictl.yaml \\u003c\\u003cEOF\\nruntime-endpoint: ${CONTAINER_RUNTIME_ENDPOINT:-unix:///run/containerd/containerd.sock}\\nEOF\\n\\n  if is-preloaded \\\"${crictl}\\\" \\\"${crictl_hash}\\\"; then\\n    echo \\\"crictl is preloaded\\\"\\n    return\\n  fi\\n\\n  echo \\\"Downloading crictl\\\"\\n  local -r crictl_path=\\\"${STORAGE_ENDPOINT}/gke-release/cri-tools/${crictl_version}\\\"\\n  download-or-bust \\\"${crictl_hash}\\\" \\\"${crictl_path}/${crictl}\\\"\\n  tar xf \\\"${crictl}\\\"\\n  mv crictl \\\"${KUBE_BIN}/crictl\\\"\\n  rm -f \\\"${crictl}\\\"\\n\\n  record-preload-info \\\"${crictl}\\\" \\\"${crictl_hash}\\\"\\n}\\n\\nfunction preload-pause-image {\\n  local -r pause_image=\\\"${KUBE_DOCKER_REGISTRY}/${GKE_CONTAINERD_INFRA_CONTAINER}\\\"\\n  local pause_sha=\\\"${GKE_CONTAINERD_INFRA_CONTAINER#*@}\\\"\\n  if [ -z \\\"$pause_sha\\\" ]; then\\n    echo \\\"found no digest in GKE_CONTAINERD_INFRA_CONTAINER\\\"\\n  else\\n    for img in $(ctr -n=k8s.io images list -q | grep \\\"${pause_sha}\\\"); do\\n      echo \\\"pause image ${img} of the same version is preloaded, retagging\\\"\\n      if [[ \\\"${pause_image}\\\" != \\\"${img}\\\" ]]; then\\n        ctr -n=k8s.io image tag --force ${img} ${pause_image}\\n      fi\\n      return\\n    done\\n  fi\\n\\n  # preloading pause image. It will be used in preloader and will be\\n  # useful for staging builds where access_token is needed to pull the image\\n  local access_token=\\\"\\\";\\n\\n  if access_token=$(get-credentials); then\\n    ctr -n=k8s.io image pull --user=\\\"oauth2accesstoken:${access_token}\\\" \\\"${pause_image}\\\"\\n  else\\n    echo \\\"No access token. Pulling without it.\\\"\\n    ctr -n=k8s.io image pull \\\"${pause_image}\\\"\\n  fi\\n  pin-docker-image \\\"pause\\\"\\n}\\n\\nfunction install-exec-auth-plugin {\\n  # We always use the URL/VERSION/HASH\\n  # set at the top of this file,\\n  # Values from kube-env are ignored in this version.\\n  local -r plugin_base_url=\\\"${STORAGE_ENDPOINT}/${EXEC_AUTH_PLUGIN_BUCKET}/gke-exec-auth-plugin/${EXEC_AUTH_PLUGIN_VERSION}\\\"\\n  case \\\"${HOST_PLATFORM}_${HOST_ARCH}\\\" in\\n    linux_amd64)\\n      local -r plugin_url=\\\"${plugin_base_url}/${HOST_PLATFORM}_${HOST_ARCH}/gke-exec-auth-plugin\\\"\\n      local -r plugin_hash=\\\"${EXEC_AUTH_PLUGIN_LINUX_AMD64_HASH}\\\"\\n      ;;\\n\\n    linux_arm64)\\n      local -r plugin_url=\\\"${plugin_base_url}/${HOST_PLATFORM}_${HOST_ARCH}/gke-exec-auth-plugin\\\"\\n      local -r plugin_hash=\\\"${EXEC_AUTH_PLUGIN_LINUX_ARM64_HASH}\\\"\\n      ;;\\n\\n    *)\\n      echo \\\"Unrecognized version and platform/arch combination: ${HOST_PLATFORM}/${HOST_ARCH}\\\"\\n      exit 1\\n  esac\\n\\n  if is-preloaded \\\"gke-exec-auth-plugin\\\" \\\"${plugin_hash}\\\"; then\\n    echo \\\"gke-exec-auth-plugin is preloaded\\\"\\n    return\\n  fi\\n\\n  echo \\\"Downloading gke-exec-auth-plugin binary\\\"\\n  download-or-bust \\\"${plugin_hash}\\\" \\\"${plugin_url}\\\"\\n  mv \\\"${KUBE_HOME}/gke-exec-auth-plugin\\\" \\\"${KUBE_BIN}/gke-exec-auth-plugin\\\"\\n  chmod a+x \\\"${KUBE_BIN}/gke-exec-auth-plugin\\\"\\n\\n  local -r license_url=\\\"${plugin_base_url}/LICENSE\\\"\\n  echo \\\"Downloading gke-exec-auth-plugin license\\\"\\n  download-or-bust \\\"\\\" \\\"${license_url}\\\"\\n  mv \\\"${KUBE_HOME}/LICENSE\\\" \\\"${KUBE_BIN}/gke-exec-auth-plugin-license\\\"\\n\\n  record-preload-info \\\"gke-exec-auth-plugin\\\" \\\"${plugin_hash}\\\"\\n}\\n\\nfunction install-kube-manifests {\\n  # Put kube-system pods manifests in ${KUBE_HOME}/kube-manifests/.\\n  local dst_dir=\\\"${KUBE_HOME}/kube-manifests\\\"\\n  mkdir -p \\\"${dst_dir}\\\"\\n  local manifests_tar_urls\\n  while IFS= read -r url; do\\n    manifests_tar_urls+=(\\\"$url\\\")\\n  done \\u003c \\u003c(split-commas \\\"${KUBE_MANIFESTS_TAR_URL}\\\")\\n  local -r manifests_tar=\\\"${manifests_tar_urls[0]##*/}\\\"\\n  if [ -n \\\"${KUBE_MANIFESTS_TAR_HASH:-}\\\" ]; then\\n    local -r manifests_tar_hash=\\\"${KUBE_MANIFESTS_TAR_HASH}\\\"\\n  else\\n    echo \\\"Downloading k8s manifests hash (not found in env)\\\"\\n    download-or-bust \\\"\\\" \\\"${manifests_tar_urls[@]/.tar.gz/.tar.gz.sha512}\\\"\\n    local -r manifests_tar_hash=$(cat \\\"${manifests_tar}.sha512\\\")\\n  fi\\n\\n  if is-preloaded \\\"${manifests_tar}\\\" \\\"${manifests_tar_hash}\\\"; then\\n    echo \\\"${manifests_tar} is preloaded.\\\"\\n    return\\n  fi\\n\\n  echo \\\"Downloading k8s manifests tar\\\"\\n  download-or-bust \\\"${manifests_tar_hash}\\\" \\\"${manifests_tar_urls[@]}\\\"\\n  tar xzf \\\"${KUBE_HOME}/${manifests_tar}\\\" -C \\\"${dst_dir}\\\" --overwrite\\n  local -r kube_addon_registry=\\\"${KUBE_ADDON_REGISTRY:-k8s.gcr.io}\\\"\\n  if [[ \\\"${kube_addon_registry}\\\" != \\\"k8s.gcr.io\\\" ]]; then\\n    find \\\"${dst_dir}\\\" \\\\(-name '*.yaml' -or -name '*.yaml.in'\\\\) -print0 | \\\\\\n      xargs -0 sed -ri \\\"s@(image:\\\\s.*)k8s.gcr.io@\\\\1${kube_addon_registry}@\\\"\\n    find \\\"${dst_dir}\\\" \\\\(-name '*.manifest' -or -name '*.json'\\\\) -print0 | \\\\\\n      xargs -0 sed -ri \\\"s@(image\\\\\\\":\\\\s+\\\\\\\")k8s.gcr.io@\\\\1${kube_addon_registry}@\\\"\\n  fi\\n  cp \\\"${dst_dir}/kubernetes/gci-trusty/gci-configure-helper.sh\\\" \\\"${KUBE_BIN}/configure-helper.sh\\\"\\n  cp \\\"${dst_dir}/kubernetes/gci-trusty/configure-kubeapiserver.sh\\\" \\\"${KUBE_BIN}/configure-kubeapiserver.sh\\\"\\n  if [[ -e \\\"${dst_dir}/kubernetes/gci-trusty/gke-internal-configure-helper.sh\\\" ]]; then\\n    cp \\\"${dst_dir}/kubernetes/gci-trusty/gke-internal-configure-helper.sh\\\" \\\"${KUBE_BIN}/\\\"\\n  fi\\n  if [[ -e \\\"${dst_dir}/kubernetes/gci-trusty/node-registration-checker.sh\\\" ]]; then\\n    cp \\\"${dst_dir}/kubernetes/gci-trusty/node-registration-checker.sh\\\" \\\"${KUBE_BIN}/\\\"\\n  fi\\n  cp \\\"${dst_dir}/kubernetes/gci-trusty/health-monitor.sh\\\" \\\"${KUBE_BIN}/health-monitor.sh\\\"\\n  cp \\\"${dst_dir}/kubernetes/gci-trusty/networkd-monitor.sh\\\" \\\"${KUBE_BIN}/networkd-monitor.sh\\\"\\n\\n  rm -f \\\"${KUBE_HOME}/${manifests_tar}\\\"\\n  rm -f \\\"${KUBE_HOME}/${manifests_tar}.sha512\\\"\\n\\n  record-preload-info \\\"${manifests_tar}\\\" \\\"${manifests_tar_hash}\\\"\\n}\\n\\n# Installs hurl to ${KUBE_HOME}/bin/hurl if not already installed.\\nfunction install-hurl {\\n  cd \\\"${KUBE_HOME}\\\"\\n\\n  local -r hurl_bin=\\\"hurl\\\"\\n  local -r hurl_gcs_att=\\\"instance/attributes/hurl-gcs-url\\\"\\n  local -r hurl_gcs_url=${HURL_GCS_URL:-$(get-metadata-value \\\"${hurl_gcs_att}\\\")}\\n  local -r hurl_hash=${HURL_HASH:-$(get-metadata-value \\\"instance/attributes/hurl-bin-hash\\\")}\\n\\n  ### Fallback to old logic in case hurl_hash is not set\\n  # extracting version from url, example:\\n  # $ echo \\\"https://storage.googleapis.com/gke-master-startup/hurl/gke_master_hurl_20230824.00_p0/hurl\\\" | sed -n 's/.*gke_master_hurl_\\\\(.*\\\\)\\\\/hurl/\\\\1/p'\\n  # 20230824.00_p0\\n  local -r hurl_version=$(echo \\\"${hurl_gcs_url}\\\" | sed -n 's/.*gke_master_hurl_\\\\(.*\\\\)\\\\/hurl/\\\\1/p')\\n\\n  local -r hurl_preload_digest=${hurl_hash:-$hurl_version}\\n\\n  if is-preloaded \\\"${hurl_bin}\\\" \\\"${hurl_preload_digest}\\\"; then\\n    echo \\\"install-hurl: hurl already installed\\\"\\n    return\\n  fi\\n\\n  if [[ -z \\\"${hurl_gcs_url}\\\" ]]; then\\n    # URL not present in GCE Instance Metadata\\n    echo \\\"install-hurl: Unable to find GCE metadata ${hurl_gcs_att}\\\"\\n    return\\n  fi\\n\\n  # Download hurl binary from a GCS bucket.\\n  echo \\\"install-hurl: Installing hurl from ${hurl_gcs_url} ... \\\"\\n  FORCE_USE_CREDENTIAL=true download-or-bust \\\"${hurl_hash}\\\" \\\"${hurl_gcs_url}\\\"\\n  if [[ -f \\\"${KUBE_HOME}/${hurl_bin}\\\" ]]; then\\n    chmod a+x ${KUBE_HOME}/${hurl_bin}\\n    mv \\\"${KUBE_HOME}/${hurl_bin}\\\" \\\"${KUBE_BIN}/${hurl_bin}\\\"\\n    echo \\\"install-hurl: hurl installed to ${KUBE_BIN}/${hurl_bin}\\\"\\n    record-preload-info \\\"${hurl_bin}\\\" \\\"${hurl_preload_digest}\\\"\\n    return\\n  fi\\n}\\n\\nfunction install-k8s-pki {\\n    local -r k8s_pki_url=\\\"${STORAGE_ENDPOINT}/${K8S_PKI_GCS_PATH}\\\"\\n    local -r k8s_pki_hash=\\\"${K8S_PKI_HASH}\\\"\\n\\n    if is-preloaded \\\"k8s_pki\\\" \\\"${k8s_pki_hash}\\\"; then\\n      echo \\\"k8s_pki is preloaded\\\"\\n      return\\n    fi\\n\\n    echo \\\"Downloading k8s_pki binary\\\"\\n    download-or-bust \\\"${k8s_pki_hash}\\\" \\\"${k8s_pki_url}\\\"\\n    mv \\\"${KUBE_HOME}/k8s_pki\\\" \\\"${KUBE_BIN}/k8s_pki\\\"\\n    chmod a+x \\\"${KUBE_BIN}/k8s_pki\\\"\\n\\n    echo \\\"Record k8s_pki preload info\\\"\\n    record-preload-info \\\"k8s_pki\\\" \\\"${k8s_pki_hash}\\\"\\n}\\n\\n\\nfunction install-auger {\\n  echo \\\"Downloading auger binary\\\"\\n  if [[ -f \\\"${KUBE_HOME}/bin/auger\\\" ]]; then\\n    echo \\\"auger is already installed\\\"\\n    return\\n  fi\\n  AUGER_STORE_PATH=\\\"${AUGER_STORE_PATH:-${STORAGE_ENDPOINT}/gke-release-staging/auger}\\\"\\n  AUGER_VERSION=\\\"${AUGER_VERSION:-v1.0.0-gke.1}\\\"\\n  download-or-bust \\\"\\\" \\\"${AUGER_STORE_PATH}/${AUGER_VERSION}/auger.sha1\\\"\\n  sha1=\\\"$(cat auger.sha1)\\\"\\n  readonly sha1 # Declare readonly separately to avoid masking error values.\\n  rm -f \\\"auger.sha1\\\"\\n  download-or-bust \\\"${sha1}\\\" \\\"${AUGER_STORE_PATH}/${AUGER_VERSION}/auger\\\"\\n  mv \\\"${KUBE_HOME}/auger\\\" \\\"${KUBE_HOME}/bin/auger\\\"\\n  chmod a+x \\\"${KUBE_HOME}/bin/auger\\\"\\n  record-preload-info \\\"auger\\\" \\\"${sha1}\\\"\\n}\\n\\n# Extract etcdctl binary from etcd image.\\nfunction install-etcdctl {\\n  echo \\\"Installing etcdctl binary\\\"\\n  if [[ -f \\\"${KUBE_HOME}/bin/etcdctl\\\" ]]; then\\n    echo \\\"etcdctl is already installed\\\"\\n    return\\n  fi\\n  local -r etcd_image=\\\"gcr.io/gke-master-images/etcd:${ETCDCTL_VERSION}\\\"\\n  container_id=\\\"$(docker create \\\"${etcd_image}\\\" sh)\\\"\\n  readonly containerId\\n  docker cp \\\"${container_id}:usr/local/bin/etcdctl\\\" \\\"${KUBE_HOME}/bin/etcdctl\\\"\\n  chmod a+x \\\"${KUBE_HOME}/bin/etcdctl\\\"\\n  docker rm \\\"${container_id}\\\"\\n  docker rmi \\\"${etcd_image}\\\"\\n}\\n\\nfunction install-gcfsd {\\n  echo \\\"Downloading Riptide FUSE client\\\"\\n  if is-preloaded \\\"gcfsd\\\" \\\"${RIPTIDE_FUSE_VERSION}\\\"; then\\n    echo \\\"gcfsd is preloaded.\\\"\\n    return\\n  fi\\n\\n  if [[ \\\"${HOST_ARCH}\\\" == \\\"arm64\\\" ]]; then\\n    RIPTIDE_FUSE_STORE_PATH=\\\"${STORAGE_ENDPOINT}/gke-release/gcfsd/${RIPTIDE_FUSE_VERSION}/arm64\\\"\\n    TAR_SHA=\\\"${RIPTIDE_FUSE_ARM64_SHA512}\\\"\\n    BIN_SHA=\\\"${RIPTIDE_FUSE_BIN_ARM64_SHA512}\\\"\\n  else\\n    RIPTIDE_FUSE_STORE_PATH=\\\"${STORAGE_ENDPOINT}/gke-release/gcfsd/${RIPTIDE_FUSE_VERSION}\\\"\\n    TAR_SHA=\\\"${RIPTIDE_FUSE_AMD64_SHA512}\\\"\\n    BIN_SHA=\\\"${RIPTIDE_FUSE_BIN_AMD64_SHA512}\\\"\\n  fi\\n\\n  echo \\\"Downloading tarball for gcfsd\\\"\\n  download-or-bust \\\"${TAR_SHA}\\\" \\\"${RIPTIDE_FUSE_STORE_PATH}/gcfsd.tar.gz\\\"\\n\\n  download-or-bust \\\"${BIN_SHA}\\\" \\\"${RIPTIDE_FUSE_STORE_PATH}/gcfsd\\\"\\n  mv \\\"${KUBE_HOME}/gcfsd\\\" \\\"${KUBE_HOME}/bin/gcfsd\\\"\\n  chmod a+x \\\"${KUBE_HOME}/bin/gcfsd\\\"\\n  record-preload-info \\\"gcfsd\\\" \\\"${RIPTIDE_FUSE_VERSION}\\\"\\n}\\n\\nfunction install-riptide-snapshotter {\\n  echo \\\"Downloading Riptide snapshotter\\\"\\n  if is-preloaded \\\"containerd-gcfs-grpc\\\" \\\"${RIPTIDE_SNAPSHOTTER_VERSION}\\\"; then\\n    echo \\\"containerd-gcfs-grpc is preloaded.\\\"\\n    return\\n  fi\\n  RIPTIDE_SNAPSHOTTER_STORE_PATH=\\\"${STORAGE_ENDPOINT}/gke-release/gcfs-snapshotter/${RIPTIDE_SNAPSHOTTER_VERSION}\\\"\\n\\n  echo \\\"Downloading tarball for riptide-snapshotter\\\"\\n  download-or-bust \\\"${RIPTIDE_SNAPSHOTTER_SHA512}\\\" \\\"${RIPTIDE_SNAPSHOTTER_STORE_PATH}/containerd-gcfs-grpc.tar.gz\\\"\\n\\n  if [[ \\\"${HOST_ARCH}\\\" == \\\"arm64\\\" ]]; then\\n    RIPTIDE_SNAPSHOTTER_BINARY=\\\"containerd-gcfs-grpc-arm64\\\"\\n    RIPTIDE_SNAPSHOTTER_BIN_SHA512=\\\"${RIPTIDE_SNAPSHOTTER_BIN_ARM64_SHA512}\\\"\\n  else\\n    RIPTIDE_SNAPSHOTTER_BINARY=\\\"containerd-gcfs-grpc\\\"\\n    RIPTIDE_SNAPSHOTTER_BIN_SHA512=\\\"${RIPTIDE_SNAPSHOTTER_BIN_AMD64_SHA512}\\\"\\n  fi\\n\\n  download-or-bust \\\"${RIPTIDE_SNAPSHOTTER_BIN_SHA512}\\\" \\\"${RIPTIDE_SNAPSHOTTER_STORE_PATH}/${RIPTIDE_SNAPSHOTTER_BINARY}\\\"\\n  mv \\\"${KUBE_HOME}/${RIPTIDE_SNAPSHOTTER_BINARY}\\\" \\\"${KUBE_HOME}/bin/containerd-gcfs-grpc\\\"\\n  chmod a+x \\\"${KUBE_HOME}/bin/containerd-gcfs-grpc\\\"\\n  record-preload-info \\\"containerd-gcfs-grpc\\\" \\\"${RIPTIDE_SNAPSHOTTER_VERSION}\\\"\\n}\\n\\n# Install Riptide FUSE client and Riptide snapshotter\\nfunction install-riptide {\\n  install-gcfsd\\n  install-riptide-snapshotter\\n}\\n\\nfunction prepare-riptide-snapshotter-preloader {\\n  source ${KUBE_BIN}/gke-internal-configure-helper.sh\\n  log-wrap 'GKESetupContainerd' gke-setup-containerd\\n}\\n\\nfunction install-auth-provider-gcp {\\n  case \\\"${HOST_ARCH}\\\" in\\n    amd64)\\n      local -r auth_provider_gcp_hash=\\\"${AUTH_PROVIDER_GCP_HASH_LINUX_AMD64}\\\"\\n      ;;\\n    arm64)\\n      local -r auth_provider_gcp_hash=\\\"${AUTH_PROVIDER_GCP_HASH_LINUX_ARM64}\\\"\\n      ;;\\n    *)\\n      echo \\\"Unrecognized version and platform/arch combination: ${HOST_PLATFORM}/${HOST_ARCH}\\\"\\n      exit 1\\n  esac\\n\\n  if is-preloaded \\\"auth-provider-gcp\\\" \\\"${auth_provider_gcp_hash}\\\"; then\\n    echo \\\"auth-provider-gcp is preloaded.\\\"\\n    return\\n  fi\\n\\n  local -r auth_provider_storage_url=\\\"${STORAGE_ENDPOINT}/gke-release/auth-provider-gcp/${AUTH_PROVIDER_GCP_VERSION}/${HOST_PLATFORM}_${HOST_ARCH}/auth-provider-gcp\\\"\\n  echo \\\"Downloading auth-provider-gcp ${auth_provider_storage_url}\\\" .\\n  download-or-bust \\\"${auth_provider_gcp_hash}\\\" \\\"${auth_provider_storage_url}\\\"\\n\\n  # Keep in sync with --image-credential-provider-bin-dir in cloud/kubernetes/distro/legacy/kube_env.go\\n  mv \\\"${KUBE_HOME}/auth-provider-gcp\\\" \\\"${KUBE_BIN}\\\"\\n  chmod a+x \\\"${KUBE_BIN}/auth-provider-gcp\\\"\\n\\n  record-preload-info \\\"auth-provider-gcp\\\" \\\"${auth_provider_gcp_hash}\\\"\\n}\\n\\nfunction download-gvisor-installer {\\n  local -r installer_image_hash=$1\\n  local -r installer_image=\\\"${KUBE_DOCKER_REGISTRY}/gke-gvisor-installer@sha256:${installer_image_hash}\\\"\\n  if access_token=$(get-credentials); then\\n    \\\"${KUBE_BIN}/crictl\\\" pull --creds \\\"oauth2accesstoken:${access_token}\\\" \\\"${installer_image}\\\"\\n  else\\n    \\\"${KUBE_BIN}/crictl\\\" pull \\\"${installer_image}\\\"\\n  fi\\n}\\n\\nfunction configure-cgroup-mode {\\n  if which cgroup_helper \\u003e /dev/null 2\\u003e&1; then\\n    if [[ \\\"${CGROUP_MODE:-}\\\" == \\\"v1\\\" ]] && cgroup_helper show | grep -q 'unified'; then\\n      cgroup_helper set hybrid\\n      echo \\\"set cgroup config to hybrid, now rebooting...\\\"\\n      reboot\\n    elif [[ \\\"${CGROUP_MODE:-}\\\" == \\\"v2\\\" ]] && cgroup_helper show | grep -q 'hybrid'; then\\n      cgroup_helper set unified\\n      echo \\\"set cgroup config to unified, now rebooting...\\\"\\n      reboot\\n    fi\\n  fi\\n}\\n\\n# To improve the shieded VM reliability b/327650100\\nfunction check-tpm-file {\\n  if [[ -z \\\"${TPM_BOOTSTRAP_KEY:-}\\\" ]]; then\\n    echo \\\"TPM_BOOTSTRAP_KEY is empty, thus vTPM is disabled, skip tpm file check\\\"\\n    return 0\\n  else\\n    echo \\\"TPM_BOOTSTRAP_KEY is not empty, thus vTPM is enabled, checking tpm file\\\"\\n    if [[ -e \\\"/dev/tpm0\\\" ]]; then\\n      echo \\\"/dev/tpm0 exists.\\\"\\n      return 0\\n    else\\n      echo \\\"/dev/tpm0 doesn't exist.\\\"\\n      return 1\\n    fi\\n  fi\\n}\\n\\nfunction detect-reboot-needed {\\n  # Exit if it is on the master\\n  if [[ \\\"${KUBERNETES_MASTER:-}\\\" == \\\"true\\\" ]]; then\\n    return\\n  fi\\n\\n  if [[ \\\"${ENABLE_BEST_EFFORT_NODE_REBOOT:-}\\\" == \\\"true\\\" ]]; then\\n    if check-tpm-file; then\\n      echo \\\"TPM is present; continuing bootstrap...\\\"\\n      return\\n    fi\\n\\n    echo \\\"TPM file check doesn't pass!\\\"\\n    if ! REBOOT_HISTORY=$(journalctl --list-boots --quiet | wc -l); then\\n      echo \\\"skip reboot attempt due to the journalctl error\\\"\\n      return\\n    fi\\n    if [[ $(($REBOOT_HISTORY)) -gt ${MAX_BOOT_COUNT} ]]; then\\n      echo \\\"best effort reboot attempt ${REBOOT_HISTORY} exceed ${MAX_BOOT_COUNT}! stop rebooting!\\\"\\n    else\\n      # write to a persistent file after reboot for NPD reporting event\\n      # used in npd-custom-plugins/configs/node-reboot-monitor.json\\n      mkdir -p /var/lib/gke\\n      echo '1' \\u003e\\u003e /var/lib/gke/best_effort_reboot_marker\\n      echo \\\"best effort reboot attempt ${REBOOT_HISTORY}! rebooting...\\\"\\n      reboot\\n    fi\\n  fi\\n}\\n\\n# A helper function for loading a docker image. It keeps trying up to 5 times.\\n#\\n# $1: Full path of the docker image\\nfunction try-load-docker-image {\\n  local -r img=$1\\n  echo \\\"Try to load docker image file ${img}\\\"\\n  # Temporarily turn off errexit, because we don't want to exit on first failure.\\n  set +e\\n  local -r max_attempts=5\\n  local -i attempt_num=1\\n\\n  if [[ \\\"${CONTAINER_RUNTIME_NAME:-}\\\" == \\\"containerd\\\" || \\\"${CONTAINERD_TEST:-}\\\"  == \\\"containerd\\\" ]]; then\\n    load_image_command=${LOAD_IMAGE_COMMAND:-ctr -n=k8s.io images import}\\n  else\\n    load_image_command=\\\"${LOAD_IMAGE_COMMAND:-}\\\"\\n  fi\\n\\n  # Deliberately word split load_image_command\\n  # shellcheck disable=SC2086\\n  until timeout 30 ${load_image_command} \\\"${img}\\\"; do\\n    if [[ \\\"${attempt_num}\\\" == \\\"${max_attempts}\\\" ]]; then\\n      echo \\\"Fail to load docker image file ${img} using ${load_image_command} after ${max_attempts} retries. Exit!!\\\"\\n      exit 1\\n    else\\n      attempt_num=$((attempt_num+1))\\n      sleep 5\\n    fi\\n  done\\n  # Re-enable errexit.\\n  set -e\\n}\\n\\n# Loads kube-system docker images. It is better to do it before starting kubelet,\\n# as kubelet will restart docker daemon, which may interfere with loading images.\\nfunction load-docker-images {\\n  echo \\\"Start loading kube-system docker images\\\"\\n  local -r img_dir=\\\"${KUBE_HOME}/kube-docker-files\\\"\\n  if [[ \\\"${KUBERNETES_MASTER:-}\\\" == \\\"true\\\" ]]; then\\n    try-load-docker-image \\\"${img_dir}/kube-apiserver.tar\\\"\\n    try-load-docker-image \\\"${img_dir}/kube-controller-manager.tar\\\"\\n    try-load-docker-image \\\"${img_dir}/kube-scheduler.tar\\\"\\n  else\\n    try-load-docker-image \\\"${img_dir}/kube-proxy.tar\\\"\\n  fi\\n}\\n\\n# A helper function for retagging a docker image with new tag and new registry.\\n# $1: Image prefix\\n# $2: Image tag\\n# $3: Destination tag\\n# $4: Destination registry\\nfunction retag-docker-image {\\n  local -r img_prefix=$1\\n  local -r img_tag=$2\\n  local -r dest_tag=$3\\n  local -r dest_registry=$4\\n  echo \\\"Retagging all images with prefix: ${img_prefix} and tag: ${img_tag} with new tag: ${dest_tag} and new registry: ${dest_registry}\\\"\\n  local src_img=\\\"\\\"\\n  for src_img in $(ctr -n=k8s.io images list -q | grep \\\"/${img_prefix}\\\" | grep \\\":${img_tag}$\\\"); do\\n    dest_img=${src_img/:${img_tag}/:${dest_tag}}\\n    dest_img=${dest_registry}/${dest_img##*/}\\n    if [[ \\\"${dest_img}\\\" != \\\"${src_img}\\\" ]]; then\\n      cmd=\\\"ctr -n=k8s.io image tag --force ${src_img} ${dest_img}\\\"\\n      echo \\\"Retag command: ${cmd}\\\"\\n      ${cmd}\\n    fi\\n  done\\n}\\n\\n# Retags kube-system docker images with passed in kube-apiserver/kubelet versions.\\nfunction retag-docker-images {\\n  echo \\\"Start retagging kube-system docker images\\\"\\n  local src_tag=\\\"\\\"\\n  local dest_tag=\\\"\\\"\\n  if [[ \\\"${KUBERNETES_MASTER:-}\\\" == \\\"true\\\" ]]; then\\n    src_tag=$(cat /home/kubernetes/kube-docker-files/kube-apiserver.docker_tag)\\n    # Keep the tag the same unless overridden\\n    dest_tag=\\\"${src_tag}\\\"\\n    if [[ -n \\\"${KUBE_APISERVER_VERSION:-}\\\" ]]; then\\n      # Docker tags cannot contain '+', make CI versions a valid docker tag.\\n      dest_tag=${KUBE_APISERVER_VERSION/+/_}\\n    fi\\n    retag-docker-image \\\"kube-apiserver\\\" \\\"${src_tag}\\\" \\\"${dest_tag}\\\" \\\"${KUBE_DOCKER_REGISTRY}\\\"\\n    retag-docker-image \\\"kube-controller-manager\\\" \\\"${src_tag}\\\" \\\"${dest_tag}\\\" \\\"${KUBE_DOCKER_REGISTRY}\\\"\\n    retag-docker-image \\\"kube-scheduler\\\" \\\"${src_tag}\\\" \\\"${dest_tag}\\\" \\\"${KUBE_DOCKER_REGISTRY}\\\"\\n  else\\n    src_tag=$(cat /home/kubernetes/kube-docker-files/kube-proxy.docker_tag)\\n    # Keep the tag the same unless overridden\\n    dest_tag=\\\"${src_tag}\\\"\\n    if [[ -n \\\"${KUBELET_VERSION:-}\\\" ]]; then\\n      # Docker tags cannot contain '+', make CI versions a valid docker tag.\\n      dest_tag=${KUBELET_VERSION/+/_}\\n    fi\\n    retag-docker-image \\\"kube-proxy\\\" \\\"${src_tag}\\\" \\\"${dest_tag}\\\" \\\"${KUBE_DOCKER_REGISTRY}\\\"\\n  fi\\n}\\n\\nfunction ensure-container-runtime {\\n  if [[ \\\"${CONTAINER_RUNTIME}\\\" == \\\"docker\\\" ]]; then\\n    echo \\\"Dockershim is not supported. Container runtime must be set to containerd\\\"\\n    exit 2\\n  fi\\n}\\n\\nfunction pin-docker-image {\\n  local -r img_prefix=$1\\n  echo \\\"Pinning: ${img_prefix}\\\"\\n  for img in $(ctr -n=k8s.io images list -q | grep \\\"/${img_prefix}\\\"); do\\n    cmd=\\\"ctr -n k8s.io images label ${img} io.cri-containerd.pinned=pinned\\\"\\n    ${cmd}\\n  done\\n}\\n\\nfunction pin-docker-images {\\n  if [[ \\\"${KUBERNETES_MASTER:-}\\\" == \\\"true\\\" ]]; then\\n    pin-docker-image \\\"kube-apiserver\\\"\\n    pin-docker-image \\\"kube-controller-manager\\\"\\n    pin-docker-image \\\"kube-scheduler\\\"\\n  else\\n    pin-docker-image \\\"kube-proxy\\\"\\n  fi\\n}\\n\\n# Downloads kubernetes binaries and kube-system manifest tarball, unpacks them,\\n# and places them into suitable directories. Files are placed in /home/kubernetes.\\nfunction install-kube-binary-config {\\n  cd \\\"${KUBE_HOME}\\\"\\n  local server_binary_tar_urls\\n  while IFS= read -r url; do\\n    server_binary_tar_urls+=(\\\"$url\\\")\\n  done \\u003c \\u003c(split-commas \\\"${SERVER_BINARY_TAR_URL}\\\")\\n  local -r server_binary_tar=\\\"${server_binary_tar_urls[0]##*/}\\\"\\n  if [[ -n \\\"${SERVER_BINARY_TAR_HASH:-}\\\" ]]; then\\n    local -r server_binary_tar_hash=\\\"${SERVER_BINARY_TAR_HASH}\\\"\\n  else\\n    echo \\\"Downloading binary release sha512 (not found in env)\\\"\\n    download-or-bust \\\"\\\" \\\"${server_binary_tar_urls[@]/.tar.gz/.tar.gz.sha512}\\\"\\n    local -r server_binary_tar_hash=$(cat \\\"${server_binary_tar}.sha512\\\")\\n  fi\\n\\n  if is-preloaded \\\"${server_binary_tar}\\\" \\\"${server_binary_tar_hash}\\\"; then\\n    echo \\\"${server_binary_tar} is preloaded.\\\"\\n  else\\n    echo \\\"Downloading binary release tar\\\"\\n    download-or-bust \\\"${server_binary_tar_hash}\\\" \\\"${server_binary_tar_urls[@]}\\\"\\n    tar xzf \\\"${KUBE_HOME}/${server_binary_tar}\\\" -C \\\"${KUBE_HOME}\\\" --overwrite\\n    # Copy docker_tag and image files to ${KUBE_HOME}/kube-docker-files.\\n    local -r src_dir=\\\"${KUBE_HOME}/kubernetes/server/bin\\\"\\n    local dst_dir=\\\"${KUBE_HOME}/kube-docker-files\\\"\\n    mkdir -p \\\"${dst_dir}\\\"\\n    cp \\\"${src_dir}/\\\"*.docker_tag \\\"${dst_dir}\\\"\\n    if [[ \\\"${KUBERNETES_MASTER:-}\\\" == \\\"false\\\" ]]; then\\n      cp \\\"${src_dir}/kube-proxy.tar\\\" \\\"${dst_dir}\\\"\\n    else\\n      cp \\\"${src_dir}/kube-apiserver.tar\\\" \\\"${dst_dir}\\\"\\n      cp \\\"${src_dir}/kube-controller-manager.tar\\\" \\\"${dst_dir}\\\"\\n      cp \\\"${src_dir}/kube-scheduler.tar\\\" \\\"${dst_dir}\\\"\\n      cp -r \\\"${KUBE_HOME}/kubernetes/addons\\\" \\\"${dst_dir}\\\"\\n    fi\\n    load-docker-images\\n    mv \\\"${src_dir}/kubelet\\\" \\\"${KUBE_BIN}\\\"\\n    mv \\\"${src_dir}/kubectl\\\" \\\"${KUBE_BIN}\\\"\\n\\n    # Some older images have LICENSES baked-in as a file. Presumably they will\\n    # have the directory baked-in eventually.\\n    rm -rf \\\"${KUBE_HOME}\\\"/LICENSES\\n    mv \\\"${KUBE_HOME}/kubernetes/LICENSES\\\" \\\"${KUBE_HOME}\\\"\\n    mv \\\"${KUBE_HOME}/kubernetes/kubernetes-src.tar.gz\\\" \\\"${KUBE_HOME}\\\"\\n\\n    # Pin docker images to avoid GC\\n    pin-docker-images\\n\\n    record-preload-info \\\"${server_binary_tar}\\\" \\\"${server_binary_tar_hash}\\\"\\n  fi\\n\\n  retag-docker-images\\n\\n  if [[ \\\"${NETWORK_PROVIDER:-}\\\" == \\\"kubenet\\\" ]] || \\\\\\n     [[ \\\"${NETWORK_PROVIDER:-}\\\" == \\\"cni\\\" ]]; then\\n    install-cni-binaries\\n  fi\\n\\n  # Put kube-system pods manifests in ${KUBE_HOME}/kube-manifests/.\\n  install-kube-manifests\\n  chmod -R 755 \\\"${KUBE_BIN}\\\"\\n\\n  # Install gci mounter related artifacts to allow mounting storage volumes in GCI\\n  install-gci-mounter-tools\\n\\n  # Remount the Flexvolume directory with the \\\"exec\\\" option, if needed.\\n  if [[ \\\"${REMOUNT_VOLUME_PLUGIN_DIR:-}\\\" == \\\"true\\\" && -n \\\"${VOLUME_PLUGIN_DIR:-}\\\" ]]; then\\n    remount-flexvolume-directory \\\"${VOLUME_PLUGIN_DIR}\\\"\\n  fi\\n\\n  # Install crictl on each node.\\n  install-crictl\\n\\n  # Preload pause image\\n  preload-pause-image\\n\\n  # Copy health check binaries to a tmpfs mount to reduce block IO usage.\\n  setup-shm-healthcheck-binaries\\n\\n  # TODO(awly): include the binary and license in the OS image.\\n  install-exec-auth-plugin\\n\\n  if [[ \\\"${KUBERNETES_MASTER:-}\\\" == \\\"false\\\" ]] && \\\\\\n     [[ \\\"${ENABLE_NODE_PROBLEM_DETECTOR:-}\\\" == \\\"standalone\\\" ]]; then\\n    install-node-problem-detector\\n    install-npd-custom-plugins\\n  fi\\n\\n  # Clean up.\\n  rm -rf \\\"${KUBE_HOME}/kubernetes\\\"\\n  rm -f \\\"${KUBE_HOME}/${server_binary_tar}\\\"\\n  rm -f \\\"${KUBE_HOME}/${server_binary_tar}.sha512\\\"\\n}\\n\\nfunction setup-shm-healthcheck-binaries() {\\n  if [[ \\\"${KUBERNETES_MASTER:-}\\\" == \\\"true\\\" ]]; then\\n    return\\n  fi\\n  if [[ \\\"${ENABLE_SHM_HEALTHCHECK_BINARIES:-}\\\" != \\\"true\\\" ]];then\\n    return\\n  fi\\n\\n  local -r shm_dir=\\\"${HEALTHCHECK_SHM_DIR:-/dev/kube_shm}\\\"\\n  local -r shm_bin_dir=\\\"${shm_dir}/bin\\\"\\n\\n  mkdir -p \\\"$shm_dir\\\"\\n  mount -t tmpfs -o exec none \\\"$shm_dir\\\"\\n  mkdir \\\"${shm_bin_dir}\\\"\\n\\n  cp -f \\\"${KUBE_BIN}/crictl\\\" \\\"${shm_bin_dir}/crictl\\\"\\n  cp -f \\\"$(which curl)\\\" \\\"${shm_bin_dir}/curl\\\"\\n}\\n\\nfunction configure-pga-if-needed() {\\n  echo \\\"Detecting connectivity to ${STORAGE_ENDPOINT}...\\\"\\n  local status=0\\n  curl --ipv4 -L --connect-timeout 10 --retry 3  --retry-connrefused ${STORAGE_ENDPOINT} || status=\\\"$?\\\"\\n  # connection is refused(7) or timeout(28).\\n  if [[ \\\"${status}\\\" == \\\"7\\\" || \\\"${status}\\\" == \\\"28\\\" ]]; then\\n    status=0\\n    local pga_ip\\n    pga_ip=`curl ${PGA_ENDPOINT} -w '%{remote_ip}' --connect-timeout 10 -s -o /dev/null` || status=\\\"$?\\\"\\n    registry_domain=\\\"$(echo \\\"${KUBE_DOCKER_REGISTRY}\\\" | cut -d '/' -f 1)\\\"\\n    if [[ \\\"${status}\\\" == \\\"0\\\" ]]; then\\n      echo \\\"Configure /etc/hosts to use private google access\\\"\\n      echo \\\"$pga_ip ${STORAGE_ENDPOINT#https://}\\\" \\u003e\\u003e /etc/hosts\\n      echo \\\"$pga_ip ${registry_domain}\\\" \\u003e\\u003e /etc/hosts\\n      # continue pga support for domain gke.gcr.io\\n      echo \\\"$pga_ip gke.gcr.io\\\" \\u003e\\u003e /etc/hosts\\n    fi\\n  fi\\n}\\n\\n# This function detects the platform/arch of the machine where the script runs,\\n# and sets the HOST_PLATFORM and HOST_ARCH environment variables accordingly.\\n# Callers can specify HOST_PLATFORM_OVERRIDE and HOST_ARCH_OVERRIDE to skip the detection.\\n# This function is adapted from the detect_client_info function in cluster/get-kube-binaries.sh\\n# and kube::util::host_os, kube::util::host_arch functions in hack/lib/util.sh\\n# This function should be synced with detect_host_info in ./configure-helper.sh\\nfunction detect_host_info() {\\n  HOST_PLATFORM=${HOST_PLATFORM_OVERRIDE:-\\\"$(uname -s)\\\"}\\n  case \\\"${HOST_PLATFORM}\\\" in\\n    Linux|linux)\\n      HOST_PLATFORM=\\\"linux\\\"\\n      ;;\\n    *)\\n      echo \\\"Unknown, unsupported platform: ${HOST_PLATFORM}.\\\" \\u003e&2\\n      echo \\\"Supported platform(s): linux.\\\" \\u003e&2\\n      echo \\\"Bailing out.\\\" \\u003e&2\\n      exit 2\\n  esac\\n\\n  HOST_ARCH=${HOST_ARCH_OVERRIDE:-\\\"$(uname -m)\\\"}\\n  case \\\"${HOST_ARCH}\\\" in\\n    x86_64*|i?86_64*|amd64*)\\n      HOST_ARCH=\\\"amd64\\\"\\n      ;;\\n    aHOST_arch64*|aarch64*|arm64*)\\n      HOST_ARCH=\\\"arm64\\\"\\n      ;;\\n    *)\\n      echo \\\"Unknown, unsupported architecture (${HOST_ARCH}).\\\" \\u003e&2\\n      echo \\\"Supported architecture(s): amd64 and arm64.\\\" \\u003e&2\\n      echo \\\"Bailing out.\\\" \\u003e&2\\n      exit 2\\n      ;;\\n  esac\\n}\\n\\n# Retries a command forever with a delay between retries.\\n# Args:\\n#  $1    : delay between retries, in seconds.\\n#  $2... : the command to run.\\nfunction retry-forever {\\n  local -r delay=\\\"$1\\\"\\n  shift 1\\n\\n  until \\\"$@\\\"; do\\n    echo \\\"== $* failed, retrying after ${delay}s\\\"\\n    sleep \\\"${delay}\\\"\\n  done\\n}\\n\\n# Initializes variables used by the log-* functions.\\n#\\n# get-metadata-value must be defined before calling this function.\\n#\\n# NOTE: this function is duplicated in configure-helper.sh, any changes here\\n# should be duplicated there as well.\\nfunction log-init {\\n  # Used by log-* functions.\\n  LOG_CLUSTER_ID=${LOG_CLUSTER_ID:-$(get-metadata-value 'instance/attributes/cluster-uid' 'get-metadata-value-error')}\\n  LOG_INSTANCE_NAME=$(hostname || echo 'hostname-error')\\n  LOG_BOOT_ID=$(journalctl --list-boots | grep -E '^ *0' | awk '{print $2}' || echo 'journalctl-error')\\n  declare -Ag LOG_START_TIMES\\n  declare -ag LOG_TRAP_STACK\\n\\n  LOG_STATUS_STARTED='STARTED'\\n  LOG_STATUS_COMPLETED='COMPLETED'\\n  LOG_STATUS_ERROR='ERROR'\\n}\\n\\n# Sets an EXIT trap.\\n# Args:\\n#   $1:... : the trap command.\\n#\\n# NOTE: this function is duplicated in configure-helper.sh, any changes here\\n# should be duplicated there as well.\\nfunction log-trap-push {\\n  local t=\\\"${*:1}\\\"\\n  LOG_TRAP_STACK+=(\\\"${t}\\\")\\n  # shellcheck disable=2064\\n  trap \\\"${t}\\\" EXIT\\n}\\n\\n# Removes and restores an EXIT trap.\\n#\\n# NOTE: this function is duplicated in configure-helper.sh, any changes here\\n# should be duplicated there as well.\\nfunction log-trap-pop {\\n  # Remove current trap.\\n  unset 'LOG_TRAP_STACK[-1]'\\n\\n  # Restore previous trap.\\n  if [ ${#LOG_TRAP_STACK[@]} -ne 0 ]; then\\n    local t=\\\"${LOG_TRAP_STACK[-1]}\\\"\\n    # shellcheck disable=2064\\n    trap \\\"${t}\\\" EXIT\\n  else\\n    # If no traps in stack, clear.\\n    trap EXIT\\n  fi\\n}\\n\\n# Logs the end of a bootstrap step that errored.\\n# Args:\\n#  $1 : bootstrap step name.\\n#\\n# NOTE: this function is duplicated in configure-helper.sh, any changes here\\n# should be duplicated there as well.\\nfunction log-error {\\n  local bootstep=\\\"$1\\\"\\n\\n  log-proto \\\"${bootstep}\\\" \\\"${LOG_STATUS_ERROR}\\\" \\\"encountered non-zero exit code\\\"\\n}\\n\\n# Wraps a command with bootstrap logging.\\n# Args:\\n#   $1    : bootstrap step name.\\n#   $2... : the command to run.\\n#\\n# NOTE: this function is duplicated in configure-helper.sh, any changes here\\n# should be duplicated there as well.\\nfunction log-wrap {\\n  local bootstep=\\\"$1\\\"\\n  local command=\\\"${*:2}\\\"\\n\\n  log-trap-push \\\"log-error ${bootstep}\\\"\\n  log-proto \\\"${bootstep}\\\" \\\"${LOG_STATUS_STARTED}\\\"\\n  $command\\n  log-proto \\\"${bootstep}\\\" \\\"${LOG_STATUS_COMPLETED}\\\"\\n  log-trap-pop\\n}\\n\\n# Logs a bootstrap step start. Prefer log-wrap.\\n# Args:\\n#   $1 : bootstrap step name.\\n#\\n# NOTE: this function is duplicated in configure-helper.sh, any changes here\\n# should be duplicated there as well.\\nfunction log-start {\\n  local bootstep=\\\"$1\\\"\\n\\n  log-trap-push \\\"log-error ${bootstep}\\\"\\n  log-proto \\\"${bootstep}\\\" \\\"${LOG_STATUS_STARTED}\\\"\\n}\\n\\n# Logs a bootstrap step end. Prefer log-wrap.\\n# Args:\\n#   $1 : bootstrap step name.\\n#\\n# NOTE: this function is duplicated in configure-helper.sh, any changes here\\n# should be duplicated there as well.\\nfunction log-end {\\n  local bootstep=\\\"$1\\\"\\n\\n  log-proto \\\"${bootstep}\\\" \\\"${LOG_STATUS_COMPLETED}\\\"\\n  log-trap-pop\\n}\\n\\n# Writes a log proto to stdout.\\n# Args:\\n#   $1: bootstrap step name.\\n#   $2: status. Either 'STARTED', 'COMPLETED', or 'ERROR'.\\n#   $3: optional status reason.\\n#\\n# NOTE: this function is duplicated in configure-helper.sh, any changes here\\n# should be duplicated there as well.\\nfunction log-proto {\\n  local bootstep=\\\"$1\\\"\\n  local status=\\\"$2\\\"\\n  local status_reason=\\\"${3:-}\\\"\\n\\n  # Get current time.\\n  local current_time\\n  current_time=\\\"$(date --utc '+%s.%N')\\\"\\n  # ...formatted as UTC RFC 3339.\\n  local timestamp\\n  timestamp=\\\"$(date --utc --date=\\\"@${current_time}\\\" '+%FT%T.%NZ')\\\"\\n\\n  # Calculate latency.\\n  local latency='null'\\n  if [ \\\"${status}\\\" == \\\"${LOG_STATUS_STARTED}\\\" ]; then\\n    LOG_START_TIMES[\\\"${bootstep}\\\"]=\\\"${current_time}\\\"\\n  else\\n    local start_time=\\\"${LOG_START_TIMES[\\\"${bootstep}\\\"]}\\\"\\n    unset 'LOG_START_TIMES['\\\"${bootstep}\\\"']'\\n\\n    # Bash cannot do non-integer math, shell out to awk.\\n    latency=\\\"$(echo \\\"${current_time} ${start_time}\\\" | awk '{print $1 - $2}')s\\\"\\n\\n    # The default latency is null which cannot be wrapped as a string so we must\\n    # do it here instead of the printf.\\n    latency=\\\"\\\\\\\"${latency}\\\\\\\"\\\"\\n  fi\\n\\n  printf '[cloud.kubernetes.monitoring.proto.SerialportLog] {\\\"cluster_hash\\\":\\\"%s\\\",\\\"vm_instance_name\\\":\\\"%s\\\",\\\"boot_id\\\":\\\"%s\\\",\\\"timestamp\\\":\\\"%s\\\",\\\"bootstrap_status\\\":{\\\"step_name\\\":\\\"%s\\\",\\\"status\\\":\\\"%s\\\",\\\"status_reason\\\":\\\"%s\\\",\\\"latency\\\":%s}}\\\\n' \\\\\\n  \\\"${LOG_CLUSTER_ID}\\\" \\\"${LOG_INSTANCE_NAME}\\\" \\\"${LOG_BOOT_ID}\\\" \\\"${timestamp}\\\" \\\"${bootstep}\\\" \\\"${status}\\\" \\\"${status_reason}\\\" \\\"${latency}\\\"\\n}\\n\\n# Prelaod components for both - preloader and runtime\\n# Variables needed for this function to work will be set by the preloader\\nfunction preload {\\n  cd \\\"${KUBE_HOME}\\\"\\n  if [[ \\\"${ENABLE_AUTH_PROVIDER_GCP:-\\\"\\\"}\\\" == \\\"true\\\" ]]; then\\n    log-wrap 'InstallExternalCredentialProvider' install-auth-provider-gcp\\n  fi\\n\\n  if [[ \\\"${KUBERNETES_MASTER:-}\\\" == \\\"true\\\" ]]; then\\n    log-wrap 'InstallHurl' install-hurl\\n  fi\\n\\n  if [[ \\\"${KUBERNETES_MASTER:-}\\\" == \\\"true\\\" && -n \\\"${K8S_PKI_GCS_PATH:-}\\\" ]]; then\\n    log-wrap \\\"InstallK8sPki\\\" install-k8s-pki\\n  fi\\n\\n  if [[ \\\"${KUBERNETES_MASTER:-}\\\" != \\\"true\\\" && -n \\\"${GVISOR_INSTALLER_IMAGE_HASH:-}\\\" ]]; then\\n    log-wrap 'DownloadGvisorInstaller' download-gvisor-installer \\\"${GVISOR_INSTALLER_IMAGE_HASH}\\\"\\n  fi\\n}\\n\\n######### Main Function ##########\\nlog-init\\ndetect_host_info\\n\\n# Preloader will source this script, and skip the main function. The preloader\\n# will choose what to preload by calling install-X functions directly.\\n# When configure.sh is sourced by the preload script, $0 and $BASH_SOURCE are\\n# different. $BASH_SOURCE still contains the path of configure.sh, while $0 is\\n# the path of the preload script.\\nif [[ \\\"$0\\\" != \\\"$BASH_SOURCE\\\" && \\\"${IS_PRELOADER:-\\\"false\\\"}\\\" == \\\"true\\\" ]]; then\\n  # preload common components\\n  preload\\n  echo \\\"Running in preloader instead of VM bootsrapping. Skipping installation steps as preloader script will source configure.sh and call all non-common functions.\\\"\\n  return\\nfi\\n\\nlog-start 'ConfigureMain'\\necho \\\"Start to install kubernetes files\\\"\\n\\n# if install fails, message-of-the-day (motd) will warn at login shell\\nlog-wrap 'SetBrokenMotd' set-broken-motd\\n\\nKUBE_HOME=\\\"/home/kubernetes\\\"\\nKUBE_BIN=\\\"${KUBE_HOME}/bin\\\"\\n\\nif [[ \\\"${KUBERNETES_MASTER:-}\\\" == \\\"true\\\" ]]; then\\n  if [[ \\\"${IS_PRELOADER:-}\\\" != \\\"true\\\" ]] &&\\\\\\n     grep -qs \\\"PRELOADED,\\\" \\\"${KUBE_HOME}/preload_info\\\" &&\\\\\\n     [[ $(get-metadata-value \\\"instance/attributes/fail-on-artifact-mismatch\\\" \\\"false\\\") == \\\"true\\\" ]]; then\\n       # Disallow artifact downloads when:\\n       # - running on master VMs\\n       # - && not in preloader (running in bootstrap)\\n       # - && VM image is preloaded\\n       # - && failure on artifact mismatch feature is enabled\\n       ARTIFACT_DOWNLOAD_RESTRICTED=\\\"true\\\"\\n  fi\\n\\n  log-wrap 'InstallHurl' install-hurl\\nfi\\n\\n# download and source kube-env\\nlog-wrap 'DownloadKubeEnv' download-kube-env\\nlog-wrap 'SourceKubeEnv' source \\\"${KUBE_HOME}/kube-env\\\"\\n\\nif [[ \\\"${CONFIGURE_PGA}\\\" == \\\"true\\\" ]]; then\\n  configure-pga-if-needed\\nfi\\n\\nlog-wrap 'ConfigureCgroupMode' configure-cgroup-mode\\n\\nlog-wrap 'BestEffortRebootDetection' detect-reboot-needed\\n\\nlog-wrap 'DownloadKubeletConfig' download-kubelet-config \\\"${KUBE_HOME}/kubelet-config.yaml\\\"\\n\\nif [[ \\\"${KUBERNETES_MASTER:-}\\\" == \\\"true\\\" ]]; then\\n  log-wrap 'DownloadKubeMasterCerts' download-kube-master-certs-hurl\\nfi\\n\\nif docker-installed; then\\n  # We still need to configure docker so it wouldn't reserver the 172.17.0/16 subnet\\n  # And if somebody will start docker to build or pull something, logging will also be set up\\n  log-wrap 'AssembleDockerFlags' assemble-docker-flags\\nfi\\n\\n# preload common components\\npreload\\n\\n# ensure chosen container runtime is present\\nlog-wrap 'EnsureContainerRuntime' ensure-container-runtime\\n\\n# binaries and kube-system manifests\\nlog-wrap 'InstallKubeBinaryConfig' install-kube-binary-config\\n\\n# install Riptide components on non-Ubuntu nodes\\nif ! is-ubuntu && [[ \\\"${KUBERNETES_MASTER:-}\\\" != \\\"true\\\" ]]; then\\n  log-wrap 'InstallRiptide' install-riptide\\nfi\\n\\necho \\\"Done for installing kubernetes files\\\"\\nlog-end 'ConfigureMain'\\n\"\n              },\n              {\n                \"key\": \"disable-legacy-endpoints\",\n                \"value\": \"true\"\n              },\n              {\n                \"key\": \"user-data\",\n                \"value\": \"#cloud-config\\n\\nusers:\\n  - name: kube-bootstrap-logs-forwarder\\n    gecos: User the kube-bootstrap-logs-forwarder.service runs as.\\n    system: true\\n    shell: /sbin/nologin\\n\\nwrite_files:\\n  - path: /etc/systemd/system/kube-bootstrap-logs-forwarder.service\\n    permissions: 111122220644'\\n    owner: root\\n    content: |\\n      [Unit]\\n      Description=Forwards Kubernetes bootstrap logs to serial port.\\n      Before=setup-kubernetes-dir.service\\n\\n      [Service]\\n      User=kube-bootstrap-logs-forwarder\\n      Group=systemd-journal\\n      SupplementaryGroups=serial\\n      ExecStart=journalctl --no-tail --no-pager --follow --utc --output short-iso --unit setup-kubernetes-dir --unit placeholders-presuspend-setup --unit kube-node-installation --unit kube-node-configuration --unit kubelet\\n      StandardOutput=tty\\n      TTYPath=/dev/ttyS2\\n\\n      [Install]\\n      WantedBy=kubernetes.target\\n\\n  - path: /etc/systemd/system/setup-kubernetes-dir.service\\n    permissions: 0644\\n    owner: root\\n    content: |\\n      [Unit]\\n      Description=Sets up required directories and mounts.\\n      After=network-online.target\\n\\n      [Service]\\n      Type=oneshot\\n      RemainAfterExit=yes\\n      ExecStart=/bin/mkdir -p /home/kubernetes/bin\\n      ExecStart=/bin/mount --bind /home/kubernetes/bin /home/kubernetes/bin\\n      ExecStart=/bin/mount -o remount,exec /home/kubernetes/bin\\n\\n      [Install]\\n      WantedBy=kubernetes.target\\n\\n  - path: /etc/systemd/system/placeholders-presuspend-setup.service\\n    permissions: 0644\\n    owner: root\\n    content: |\\n      [Unit]\\n      Description=Perform required presuspend logic for Placeholders VM, skip for Non-Placeholders VMs.\\n      After=setup-kubernetes-dir.service\\n\\n      [Service]\\n      Type=oneshot\\n      RemainAfterExit=yes\\n      ExecCondition=/usr/bin/curl --fail --retry 5 --retry-delay 3 --silent --show-error -H \\\"X-Google-Metadata-Request: True\\\" -o /home/kubernetes/bin/placeholders-presuspend.sh http://metadata.google.internal/computeMetadata/v1/instance/attributes/placeholders-presuspend-sh\\n      ExecStartPre=/bin/chmod 544 /home/kubernetes/bin/placeholders-presuspend.sh\\n      ExecStart=/home/kubernetes/bin/placeholders-presuspend.sh\\n\\n      [Install]\\n      WantedBy=kubernetes.target\\n\\n\\n  - path: /etc/systemd/system/kube-node-installation.service\\n    permissions: '0644'\\n    owner: root\\n    content: |\\n      [Unit]\\n      Description=Download and install k8s binaries and configurations\\n      After=placeholders-presuspend-setup.service\\n\\n      [Service]\\n      Environment=KUBERNETES_MASTER=false\\n      Type=oneshot\\n      RemainAfterExit=yes\\n      ExecStartPre=/usr/bin/curl --fail --retry 5 --retry-delay 3 --silent --show-error -H \\\"X-Google-Metadata-Request: True\\\" -o /home/kubernetes/bin/configure.sh http://metadata.google.internal/computeMetadata/v1/instance/attributes/configure-sh\\n      ExecStartPre=/bin/chmod 544 /home/kubernetes/bin/configure.sh\\n      ExecStart=/home/kubernetes/bin/configure.sh\\n\\n      [Install]\\n      WantedBy=kubernetes.target\\n\\n  - path: /etc/systemd/system/kube-node-configuration.service\\n    permissions: '0644'\\n    owner: root\\n    content: |\\n      [Unit]\\n      Description=Configure kubernetes node\\n      After=kube-node-installation.service\\n\\n      [Service]\\n      Type=oneshot\\n      RemainAfterExit=yes\\n      ExecStartPre=/bin/chmod 544 /home/kubernetes/bin/configure-helper.sh\\n      ExecStart=/home/kubernetes/bin/configure-helper.sh\\n      ExecStartPost=systemctl stop kube-bootstrap-logs-forwarder.service\\n\\n      [Install]\\n      WantedBy=kubernetes.target\\n\\n  - path: /etc/systemd/system/kube-container-runtime-monitor.service\\n    permissions: '0644'\\n    owner: root\\n    content: |\\n      [Unit]\\n      Description=Kubernetes health monitoring for container runtime\\n      After=kube-node-configuration.service\\n\\n      [Service]\\n      Restart=always\\n      RestartSec=10\\n      RemainAfterExit=yes\\n      RemainAfterExit=yes\\n      ExecStartPre=/bin/chmod 544 /home/kubernetes/bin/health-monitor.sh\\n      ExecStart=/home/kubernetes/bin/health-monitor.sh container-runtime\\n\\n      [Install]\\n      WantedBy=kubernetes.target\\n\\n  - path: /etc/systemd/system/kubelet-monitor.service\\n    permissions: '0644'\\n    owner: root\\n    content: |\\n      [Unit]\\n      Description=Kubernetes health monitoring for kubelet\\n      After=kube-node-configuration.service\\n\\n      [Service]\\n      Restart=always\\n      RestartSec=10\\n      RemainAfterExit=yes\\n      RemainAfterExit=yes\\n      ExecStartPre=/bin/chmod 544 /home/kubernetes/bin/health-monitor.sh\\n      ExecStart=/home/kubernetes/bin/health-monitor.sh kubelet\\n\\n      [Install]\\n      WantedBy=kubernetes.target\\n\\n  - path: /etc/systemd/system/kube-logrotate.timer\\n    permissions: '0644'\\n    owner: root\\n    content: |\\n      [Unit]\\n      Description=Hourly kube-logrotate invocation\\n\\n      [Timer]\\n      OnCalendar=hourly\\n\\n      [Install]\\n      WantedBy=kubernetes.target\\n\\n  - path: /etc/systemd/system/kube-logrotate.service\\n    permissions: '0644'\\n    owner: root\\n    content: |\\n      [Unit]\\n      Description=Kubernetes log rotation\\n      After=kube-node-configuration.service\\n\\n      [Service]\\n      Type=oneshot\\n      # The relative path is being used as the path is different between image types - for example between Ubuntu and COS. See ExecSearchPath for allowed paths.\\n      ExecSearchPath=/usr/bin:/usr/sbin\\n      ExecStart=logrotate /etc/logrotate.conf\\n\\n      [Install]\\n      WantedBy=kubernetes.target\\n\\n  - path: /etc/systemd/system/kubernetes.target\\n    permissions: '0644'\\n    owner: root\\n    content: |\\n      [Unit]\\n      Description=Kubernetes\\n\\n      [Install]\\n      WantedBy=multi-user.target\\n\\n  - path: /etc/modprobe.d/sunrpc.conf\\n    permissions: '0644'\\n    owner: root\\n    # The GKE metadata server uses ports 987-989, so the sunrpc range should be restricted to be below.\\n    content: |\\n      options sunrpc max_resvport=986\\n\\nruncmd:\\n  - systemctl enable\\n      kube-bootstrap-logs-forwarder.service\\n      setup-kubernetes-dir.service\\n      placeholders-presuspend-setup.service\\n      kube-node-installation.service\\n      kube-node-configuration.service\\n      kubelet-monitor.service\\n      kube-logrotate.timer\\n      kube-logrotate.service\\n      kubernetes.target\\n  - systemctl start kubernetes.target\\n\"\n              },\n              {\n                \"key\": \"kube-env\",\n                \"value\": \"ALLOCATE_NODE_CIDRS: \\\"true\\\"\\nAPI_SERVER_TEST_LOG_LEVEL: --v=3\\nAUTOSCALER_ENV_VARS: kube_reserved=cpu=1060m,memory=1019Mi,ephemeral-storage=41Gi;node_labels=cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-memory-gb-scaling-level=4,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=e2,cloud.google.com/private-node=false,node.kubernetes.io/masq-agent-ds-ready=true;arch=amd64;os=linux;os_distribution=cos;evictionHard=memory.available=100Mi,nodefs.available=10%,nodefs.inodesFree=5%,pid.available=10%\\nCA_CERT: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVMVENDQXBXZ0F3SUJBZ0lSQVB6WFg4K0ZYWXFHcCthdmYwU09vdkl3RFFZSktvWklodmNOQVFFTEJRQXcKTHpFdE1Dc0dBMVVFQXhNa05tUmxNbVpsTUdFdFlUTXlNUzAwTjJOaExUZ3lPR0l0Wm1GaU9UUTBaV05sWkdJMgpNQ0FYRFRJMU1ESXdOakUwTVRVeU4xb1lEekl3TlRVd01UTXdNVFV4TlRJM1dqQXZNUzB3S3dZRFZRUURFeVEyClpHVXlabVV3WVMxaE16SXhMVFEzWTJFdE9ESTRZaTFtWVdJNU5EUmxZMlZrWWpZd2dnR2lNQTBHQ1NxR1NJYjMKRFFFQkFRVUFBNElCandBd2dnR0tBb0lCZ1FDNjRvdHdhMW0yb0JHSTcvb1ZKQVJlRWgrY3JoY1hTTzZIT3N6SApvY0ZNUXpPS3RsNXhiNDdwT1JFbTFQM2FiRmg2UGxmVmp5NzVIVEM3UXJGb0NvQ1pnNjdoTzBIKzdCRVN4NzcyCnora3BLRDZ6aEZUSUtkdnVmZUZBcDZqaG10WlhpVlhpbjFaU3ltM29jczJwZVY4RHNEaUpCakFwUkRYZmc5bFkKN1ZIWFFXYmtxQml0ZnpMeEE0UmlSSDU1NWwwNnJwUGlacDhnRFFMMGc3KzkrMlQ4RkJNSnp3bEdqOVhMNHMyTwo1WWd1THlIMUJVVG4vTmR3blVZRForNFBxbTNjbmRlcE9TUnFGYXIrOSs1aUJmQXgyZjBETnFrZCtTN09kcDJ2CkpuZlNEeVpJc0JGTXdHRm0xYkc4SGJLWHJtdVMzTWxHL3VMWTFVTSswYUNQQ05vKzhtcDN6MjBkbW5rNUxzZHUKNkdwM1c1UEJYOWJrUDBZWVBraHRyT25kWDBGOTkxbjIzTDk5QkNkeGRYUmI3ZHRlbHFRbTh2Z1RBd2RvMDVMRgpDYUVRNFU2Ym9QQTBIR3dyRk4xOWQ2SEFZOC9EOUQ3TVZ2aUZLTjZTTjA4dktYQUptT3o5ZHFyTFBCVWVsNlRUCkpZamFnV0d0b2l4WlZpTllNUlF6QUJqc1hiVUNBd0VBQWFOQ01FQXdEZ1lEVlIwUEFRSC9CQVFEQWdJRU1BOEcKQTFVZEV3RUIvd1FGTUFNQkFmOHdIUVlEVlIwT0JCWUVGT1dwL2R3LzJuejdRZ1ZKSkR2VTFpcHZlWHNWTUEwRwpDU3FHU0liM0RRRUJDd1VBQTRJQmdRQlowOGZpdkRwZ0R6ZXhPMEozekt4bHpJWWpZWHlkeVdsd3hSbzdwbGJSCkMvNmphelBBLzlYUG43amZ1cTQyREJFUVE0Y21EcXRxQ3pSdkhRREMxM1lFR3o0Y2JIbGowVThqOVVMNkwyd0kKQmRmMUw4endSRy9LYXNQQzhjWHZMM1VHSmZ3amtBQ3lwS0FVbHNIVEVneG51QVdiOFV1MEZwMGplaXUxUGhSeQpweW54bXo0eVBSR3lmeFJsRzZGVGVIQmVDZkpkQmpiU1lvMkoyb2NrU2hUOXdPczBIUzZjSDJzTk5aUmdQOUpaClFKN1EzZjI0SHhRMmN5c2Nqc3drZkNOTTRPcGQ5VGlHc3NHeS9iM201SEw4OGFoZUpuSXZlUzZadGZKZVB5eU0KYnIvTEgrNjNPQVB2eWZ5b0JtZWZZYUNzbnZWRUZpWmhTNXNUWnlKeG9QTDlSakpEN3puM2N5bUgxMTBoSWZvawowT0EzcVhBaHR4UGlwNnZiTU5ScmVVL3NYc3ZzTHFvK0R5NkMvWmhXSkx0MjdieSt0WDhpTXY2dDNteGhNTUozCmNoRXgvZlJkeGJDNGpLUDVyQWEwQ1p3MGFPM2lUMXUxZDVMaVkrWnFGam1WTmo5S05XSkR6Z2xwTXlCZDBFN2IKL2pibk45OHZ5Y2xoWC9JUkRmSGtDWGM9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K\\nCLOUD_MONARCH_ENDPOINT: https://monitoring.googleapis.com/\\nCLUSTER_IP_RANGE: 192.168.1.0/24\\nCLUSTER_NAME: gke1\\nCONFIGURE_PGA: \\\"true\\\"\\nCONTAINER_RUNTIME: containerd\\nCONTAINER_RUNTIME_ENDPOINT: unix:///run/containerd/containerd.sock\\nCONTAINER_RUNTIME_NAME: containerd\\nCONTAINERD_DEPRECATION_CHECKER: \\\"true\\\"\\nCONTAINERD_MAX_CONTAINER_LOG_LINE: \\\"262144\\\"\\nCREATE_BOOTSTRAP_KUBECONFIG: \\\"false\\\"\\nDETECT_LOCAL_MODE: NodeCIDR\\nDETECT_MTU: \\\"true\\\"\\nDNS_DOMAIN: cluster.local\\nDNS_SERVER_IP: 192.168.2.10\\nDOCKER_REGISTRY_MIRROR_URL: https://mirror.gcr.io\\nELASTICSEARCH_LOGGING_REPLICAS: \\\"1\\\"\\nENABLE_AUTH_PROVIDER_GCP: \\\"true\\\"\\nENABLE_CLUSTER_DNS: \\\"true\\\"\\nENABLE_CLUSTER_LOGGING: \\\"false\\\"\\nENABLE_CLUSTER_MONITORING: none\\nENABLE_CLUSTER_REGISTRY: \\\"false\\\"\\nENABLE_CLUSTER_UI: \\\"true\\\"\\nENABLE_CONNTRACK_EXEMPT_HC: \\\"true\\\"\\nENABLE_CONTAINERD_METRICS: \\\"true\\\"\\nENABLE_L7_LOADBALANCING: none\\nENABLE_LATEST_NPD: \\\"true\\\"\\nENABLE_METADATA_AGENT: \\\"\\\"\\nENABLE_METRICS_SERVER: \\\"true\\\"\\nENABLE_NODE_BFQ_IO_SCHEDULER: \\\"true\\\"\\nENABLE_NODE_LOGGING: \\\"false\\\"\\nENABLE_NODE_PROBLEM_DETECTOR: standalone\\nENABLE_NODE_REGISTRATION_CHECKER: \\\"true\\\"\\nENABLE_NODELOCAL_DNS: \\\"false\\\"\\nENABLE_SHM_HEALTHCHECK_BINARIES: \\\"true\\\"\\nENABLE_SYSCTL_TUNING: \\\"true\\\"\\nENV_TIMESTAMP: \\\"2025-02-06T15:15:26+00:00\\\"\\nEXTRA_DOCKER_OPTS: --insecure-registry 10.0.0.0/8\\nEXTRA_POD_SYSCTLS: net.ipv6.conf.all.disable_ipv6=1,net.ipv6.conf.default.disable_ipv6=1\\nFEATURE_GATES: DisableKubeletCloudCredentialProviders=true,RotateKubeletServerCertificate=true,ExecProbeTimeout=false\\nFLUENTD_CONTAINER_RUNTIME_SERVICE: containerd\\nGVISOR_HOST_SETTINGS: enforce\\nGVISOR_METRIC_SERVER: 127.0.0.1:9115\\nHEAPSTER_USE_NEW_STACKDRIVER_RESOURCES: \\\"true\\\"\\nHEAPSTER_USE_OLD_STACKDRIVER_RESOURCES: \\\"false\\\"\\nHPA_USE_REST_CLIENTS: \\\"true\\\"\\nINSTANCE_PREFIX: gke-gke1-848e1694\\nKUBE_ADDON_REGISTRY: k8s.gcr.io\\nKUBE_CLUSTER_DNS: 192.168.2.10\\nKUBE_DOCKER_REGISTRY: europe-west4-artifactregistry.gcr.io/gke-release/gke-release\\nKUBE_MANIFESTS_TAR_HASH: 66cbfb77203dd732d322d524697a80e11bb553bd7f06c667f4afcf8336929c274bc17da4c6e7f1f4dd28dd3d997cb2c1cf5da7b359bbdd22b6b03aa8b8ab2b50\\nKUBE_MANIFESTS_TAR_URL: https://storage.googleapis.com/gke-release-eu/kubernetes/release/v1.31.4-gke.1256000/kubernetes-manifests.tar.gz,https://storage.googleapis.com/gke-release/kubernetes/release/v1.31.4-gke.1256000/kubernetes-manifests.tar.gz,https://storage.googleapis.com/gke-release-asia/kubernetes/release/v1.31.4-gke.1256000/kubernetes-manifests.tar.gz\\nKUBE_PROXY_TOKEN: pbgJw-P-A4TUHflfzyyNiGp78ssesaTcXsgvbaePicQ=\\nKUBELET_ARGS: --v=2 --cloud-provider=external --experimental-mounter-path=/home/kubernetes/containerized_mounter/mounter\\n  --cert-dir=/var/lib/kubelet/pki/ --kubeconfig=/var/lib/kubelet/kubeconfig --image-credential-provider-config=/etc/srv/kubernetes/cri_auth_config.yaml\\n  --image-credential-provider-bin-dir=/home/kubernetes/bin --max-pods=110 --node-labels=cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-memory-gb-scaling-level=4,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=e2,cloud.google.com/private-node=false,node.kubernetes.io/masq-agent-ds-ready=true\\n  --volume-plugin-dir=/home/kubernetes/flexvolume --node-status-max-images=25 --container-runtime-endpoint=unix:///run/containerd/containerd.sock\\n  --runtime-cgroups=/system.slice/containerd.service --registry-qps=10 --registry-burst=20\\nKUBELET_HTTP2_PING_TIMEOUT_SECONDS: \\\"5\\\"\\nKUBELET_HTTP2_READ_IDLE_TIMEOUT_SECONDS: \\\"10\\\"\\nKUBELET_VERSION: v1.31.4-gke.1256000\\nKUBERNETES_MASTER: \\\"false\\\"\\nKUBERNETES_MASTER_NAME: 192.168.0.2\\nLOAD_IMAGE_COMMAND: ctr -n=k8s.io images import\\nLOGGING_DESTINATION: \\\"\\\"\\nLOGGING_STACKDRIVER_RESOURCE_TYPES: \\\"\\\"\\nMONITORING_FLAG_SET: \\\"true\\\"\\nNETWORK_PROVIDER: kubenet\\nNODE_BFQ_IO_SCHEDULER_IO_WEIGHT: \\\"1200\\\"\\nNODE_LOCAL_SSDS_EXT: \\\"\\\"\\nNON_MASQUERADE_CIDR: 0.0.0.0/0\\nREMOUNT_VOLUME_PLUGIN_DIR: \\\"true\\\"\\nREQUIRE_METADATA_KUBELET_CONFIG_FILE: \\\"true\\\"\\nSALT_TAR_HASH: \\\"\\\"\\nSALT_TAR_URL: https://storage.googleapis.com/gke-release-eu/kubernetes/release/v1.31.4-gke.1256000/kubernetes-salt.tar.gz,https://storage.googleapis.com/gke-release/kubernetes/release/v1.31.4-gke.1256000/kubernetes-salt.tar.gz,https://storage.googleapis.com/gke-release-asia/kubernetes/release/v1.31.4-gke.1256000/kubernetes-salt.tar.gz\\nSERVER_BINARY_TAR_HASH: 39ba60c7d1d3bd252782428e14294e0433864f8317cabbd88c3d34832f5a0a9ce23c4a570ae310a370074b7bc2cc156012d7a2d53cea34b73cf2198eae17df81\\nSERVER_BINARY_TAR_URL: https://storage.googleapis.com/gke-release-eu/kubernetes/release/v1.31.4-gke.1256000/kubernetes-server-linux-amd64.tar.gz,https://storage.googleapis.com/gke-release/kubernetes/release/v1.31.4-gke.1256000/kubernetes-server-linux-amd64.tar.gz,https://storage.googleapis.com/gke-release-asia/kubernetes/release/v1.31.4-gke.1256000/kubernetes-server-linux-amd64.tar.gz\\nSERVICE_CLUSTER_IP_RANGE: 192.168.2.0/24\\nSTACKDRIVER_ENDPOINT: https://logging.googleapis.com\\nSTORAGE_ENDPOINT: https://storage.googleapis.com\\nSYSCTL_OVERRIDES: \\\"\\\"\\nTPM_BOOTSTRAP_CERT: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURyRENDQWhTZ0F3SUJBZ0lSQVBucnY5dlJWck5nbVVaRDIzeCtDWEV3RFFZSktvWklodmNOQVFFTEJRQXcKTHpFdE1Dc0dBMVVFQXhNa05tUmxNbVpsTUdFdFlUTXlNUzAwTjJOaExUZ3lPR0l0Wm1GaU9UUTBaV05sWkdJMgpNQjRYRFRJMU1ESXdOakUxTVRNeU4xb1hEVE13TURJd05URTFNVFV5TjFvd0hERWFNQmdHQTFVRUF4TVJhM1ZpClpXeGxkQzFpYjI5MGMzUnlZWEF3Z2dFaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJQkR3QXdnZ0VLQW9JQkFRREUKZ1BzbmRkN2h2bE0rVjBKQ2NuSGlEOGxLVVowcGpuMi8ycmRvOFlEVElSam9SU0RlbFhIQWZpeEVwUk1vclMzbwp6b05YN3VmbHQ5ZlNsTjByaWRPZmpJTFI4UFpBdFB5dUtyZzUvS1FSU2pGRVdyY0prcW1uRE13Uzc1c251ZjhPCjY1YWJDMDRiVlVlUlJMZWRrTEgyWGRCdFNzdklrdmsyUFdhdzRCUHY2bUF0OHpXNVhlZHM3d1F3ODRQcUNvT28KamVwdHdCdGFTTzVqbUU1NVFDdjBjNmEwM29ERXMzVFFEVjJ0YnFPUmlWNDk5UFpDNlRBd1RCTkFiUHhLRUtKWgpROUNFNEhqenQ1NVJJT0huMDRhWnMvUjFoK1NYN1lMcDJyTXFaeEsrbVVUOHkvVTZJdGphYThJV2NrV216eWVRCmlidWpxN1o2WVBBSXptTkVyUTJIQWdNQkFBR2pWakJVTUE0R0ExVWREd0VCL3dRRUF3SUZvREFUQmdOVkhTVUUKRERBS0JnZ3JCZ0VGQlFjREFqQU1CZ05WSFJNQkFmOEVBakFBTUI4R0ExVWRJd1FZTUJhQUZPV3AvZHcvMm56NwpRZ1ZKSkR2VTFpcHZlWHNWTUEwR0NTcUdTSWIzRFFFQkN3VUFBNElCZ1FDYXRyYm9iaXJmZ3ZGZnU0VGZkSURrCkxPZndsQlBZUDlWUUFLamEyeHhrZ0pQQXJ4V1N1MHYwQ2ozS2taRnMrZGtOdHlEVGMraHp5dnBiSXVka0tNZTcKbnQ1M09GSzlDRnREc0dpWEpGdmkzVUgvNHE5UTQ5aTVWNzNrTkpkYlhtdkZSUGhDUDJPMytyOHlIWEhhcGplbAptUHMrNks4MVpwNSt4L3BCTzc3VEhoSmFHU09xNDJRUm00aDlBelVldFVObXJNWCtjdUc3VGM1S3g0YmMrRm1JClpNUGlIQks0TzdZbjB5eHJYZkJuVlpZZ3lwdkJNb2lVeHlBa1ZZQkJqcTdBSEdHMW0vZ2xWL05BbkNmTlFTcnkKYVZ2Q25yZXU3VWhGVFpuT04ra3NRbFdLdDJieC8yOFdHQndaRG1OZFpqMDk2ZVNDOXFoU3JqMzluWVp6YmpPcApBNVFDMlkvRzdqUlRpRnZRaGNlTTFZRnVsbGtYanNSL25uaHdDVWc0a0FHYlBBeE9maWJVVEpxSEc1UXF4dk1FCkRqYWx0Wk1ZMGtVdElIa2JIcEZsRFJFcWRCei8rZm5CZFhEcTZaRG1aVVJaaFNJVkNFMmhkODdla2EzMXAxNm8KRUh3ZURCRjIxQ2Vrc0l3M0tibWVPeUUzbjVMYlRJKy9FdEtVQy9sT2h2ST0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=\\nTPM_BOOTSTRAP_KEY: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcEFJQkFBS0NBUUVBeElEN0ozWGU0YjVUUGxkQ1FuSng0Zy9KU2xHZEtZNTl2OXEzYVBHQTB5RVk2RVVnCjNwVnh3SDRzUktVVEtLMHQ2TTZEVis3bjViZlgwcFRkSzRuVG40eUMwZkQyUUxUOHJpcTRPZnlrRVVveFJGcTMKQ1pLcHB3ek1FdStiSjduL0R1dVdtd3RPRzFWSGtVUzNuWkN4OWwzUWJVckx5Skw1TmoxbXNPQVQ3K3BnTGZNMQp1VjNuYk84RU1QT0Q2Z3FEcUkzcWJjQWJXa2p1WTVoT2VVQXI5SE9tdE42QXhMTjAwQTFkclc2amtZbGVQZlQyClF1a3dNRXdUUUd6OFNoQ2lXVVBRaE9CNDg3ZWVVU0RoNTlPR21iUDBkWWZrbCsyQzZkcXpLbWNTdnBsRS9NdjEKT2lMWTJtdkNGbkpGcHM4bmtJbTdvNnUyZW1Ed0NNNWpSSzBOaHdJREFRQUJBb0lCQUZsWmlwbmhRMFNqUFllcAp0cU92RlRCazNES3lWSU9LV294cm41MFV2dTZCYktsa2tYTVVRZUowbkoxajhBZTlZeFFxSHRmVGRsZGlWanpXCjJwQksvZEpjMmprcTExWUoxYUUrSklHZGFsN0FQUkduSy9ZcTNZQnJWYm5BZ0d5NmFvcjJ2WWJuUjQ4dklqa2cKSlZ0OGFTY3NkakxUNFVCazcvTmxUUFhkRmNPdklad1Z1VTFreG5ZVVhKQ1NuNWxFZWVBT2ZvSUxzc1lJK0RyRwpIS3FjRjJzR2w3SWNnS2ErOG9QYkpOSXlrdngxdTNuUzFrMHlVMlV5SStYdFh6QzVHYkZWUDROQlZ2QXNkZXpzCksweUYrL05RbFBMbVc4c3djdmtTUWFuNnJKUkFZN2FDOGIzRDZENXhybDZBdFNlZDVBcXVVakNTQzNoN2VYWUkKY2ZLZ0VtRUNnWUVBL2ZQLzFMTUNjcVJjNkQ2SWVEOTlrOEV4WjA4d25UU2g0OUozcWFoT09WaERWbXlGZ3RZUAp1RWM4YitRcE1aMW54UWwzY0FzdXFPRkh5U0w4emI5azFUaE5JTTBMc0I0S3NoZGJWUjRKazdUUzIwQUFnMmtEClQ2azRqWEVOM3UyNXRYb1FOTzFjNWpEcllvZGo1cFpIZ2VZQyszYzlUbHNiVnRQbXdQckx6R2NDZ1lFQXhoWngKT0xkTjlRS2V0TTE5UENsejBpTHp4TmpMRkdvWTRqT0FxdHVkN1BjSktlVzdrN3hLN0U0VFZYVFl1a1pKZC9yVwo1SXhRKzFrV3ozT1ArOWFaRWVQQ1pEeEdxV3duKy8vUlUzS1lPY3l0eXRHVTJBMlRqRmpSbEVOeEd3eW0rM015CkdGdUpBREdlUXhpWS83ZWxNcXlPRWpRSU5ma3l1WjZXeVZ6dUFlRUNnWUVBcFJEQ0N4akgwSWh4TXl2aVBIYlkKUXYvaUFzcUFTTTU3SThBYnM1VUlNMUhoZ3YxSzByNGN2YVRmN2NLWjIvdjZCU0tnRlozUEdFcEdCTURQSFZUNApUM2NtK3RrTWJjODVHSVVDQXBOaG1qYUFqNjVNSng1TTNxeVphNlkrWTlhVlRSWW9EcDd5TVZVK3ltNUNTeEVICkxiRzU0b1dndlp1T2E2T1VhMzhZbEtVQ2dZQUtVYVQ0UldSRVBTeXpVbmtScHo4blZUYkpyRmwzNk1iL0VadkUKU3NpQlRhVW1qNWNqN1EwaUhqY1hub3lqdDRHZ1JHcnBZUDNlK2hjY0czTUd0WGtuMjJ1RytUVGRJb3M2cjJyaQpJL2dXR3JsNjlVd0JyVU5nYmtnTXB5Ni9ML3VLNGNkY1NYaHJrQ29rYUtXZnZKdFlkbkM0TmdtdmRoblVYWlNSClRNd0JRUUtCZ1FEQVl3SG5OZGJhM2F3WnhLM1hCdTdXbzlUd1RRQ3VpZHB3NCtNMlhxM3YvYXlNTU9iQUl4YjAKVEF5enk0elJIYXBLSko5YUNZRUZLZ3FyNnowWGZ4ejIxeVdhRE5wdlpHNlhXRW1PUGROZ1dpN2hUTmtTajNXbgpyWmNMbi9Rd24wYVFZMUEzQUtiZHlHSVdnbVNYWHJJRHdvek9aUk90VFZ2Y2dkL29meU1SWUE9PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo=\\nVOLUME_PLUGIN_DIR: /home/kubernetes/flexvolume\\nZONE: europe-west4-a\\n\"\n              },\n              {\n                \"key\": \"cluster-uid\",\n                \"value\": \"848e1694ad01483185c46c3f8e1fdea4db9d86e7b2d5451ebc2536bf7f049693\"\n              },\n              {\n                \"key\": \"cluster-location\",\n                \"value\": \"europe-west4-a\"\n              }\n            ]\n          },\n          \"serviceAccounts\": [\n            {\n              \"email\": \"12340002-compute@developer.gserviceaccount.com\",\n              \"scopes\": [\n                \"https://www.googleapis.com/auth/devstorage.read_only\",\n                \"https://www.googleapis.com/auth/logging.write\",\n                \"https://www.googleapis.com/auth/monitoring\",\n                \"https://www.googleapis.com/auth/service.management.readonly\",\n                \"https://www.googleapis.com/auth/servicecontrol\",\n                \"https://www.googleapis.com/auth/trace.append\"\n              ]\n            }\n          ],\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instances/gke-gke1-default-pool-dee670f4-b27s\",\n          \"scheduling\": {\n            \"onHostMaintenance\": \"MIGRATE\",\n            \"automaticRestart\": true,\n            \"preemptible\": false,\n            \"provisioningModel\": \"STANDARD\"\n          },\n          \"cpuPlatform\": \"Intel Broadwell\",\n          \"labels\": {\n            \"foo\": \"bar\",\n            \"goog-gke-cluster-id-base32\": \"qshbnffnafeddboenq7y4h66utnz3bxhwlkukhv4eu3l67yes2jq\",\n            \"goog-gke-node\": \"\",\n            \"goog-k8s-cluster-location\": \"europe-west4-a\",\n            \"goog-k8s-cluster-name\": \"gke1\",\n            \"goog-k8s-node-pool-name\": \"default-pool\",\n            \"goog-terraform-provisioned\": \"true\"\n          },\n          \"labelFingerprint\": \"YRhvLFslxOM=\",\n          \"startRestricted\": false,\n          \"deletionProtection\": false,\n          \"shieldedInstanceConfig\": {\n            \"enableSecureBoot\": false,\n            \"enableVtpm\": true,\n            \"enableIntegrityMonitoring\": true\n          },\n          \"shieldedInstanceIntegrityPolicy\": {\n            \"updateAutoLearnPolicy\": true\n          },\n          \"fingerprint\": \"9DZfLBNLpIc=\",\n          \"lastStartTimestamp\": \"2025-02-06T07:16:48.126-08:00\",\n          \"satisfiesPzi\": true,\n          \"networkPerformanceConfig\": {\n            \"totalEgressBandwidthTier\": \"DEFAULT\"\n          }\n        },\n        {\n          \"kind\": \"compute#instance\",\n          \"id\": \"7382059078434873685\",\n          \"creationTimestamp\": \"2025-02-05T04:55:23.067-08:00\",\n          \"name\": \"mig-lpq6\",\n          \"tags\": {\n            \"fingerprint\": \"42WmSpB8rSM=\"\n          },\n          \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/machineTypes/e2-micro\",\n          \"status\": \"RUNNING\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a\",\n          \"networkInterfaces\": [\n            {\n              \"kind\": \"compute#networkInterface\",\n              \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n              \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default\",\n              \"networkIP\": \"10.164.0.10\",\n              \"name\": \"nic0\",\n              \"fingerprint\": \"YE4urDTfRbo=\",\n              \"stackType\": \"IPV4_ONLY\"\n            }\n          ],\n          \"disks\": [\n            {\n              \"kind\": \"compute#attachedDisk\",\n              \"type\": \"PERSISTENT\",\n              \"mode\": \"READ_WRITE\",\n              \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/disks/mig-lpq6\",\n              \"deviceName\": \"persistent-disk-0\",\n              \"index\": 0,\n              \"boot\": true,\n              \"autoDelete\": true,\n              \"licenses\": [\n                \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye\"\n              ],\n              \"interface\": \"SCSI\",\n              \"guestOsFeatures\": [\n                {\n                  \"type\": \"UEFI_COMPATIBLE\"\n                },\n                {\n                  \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n                },\n                {\n                  \"type\": \"GVNIC\"\n                }\n              ],\n              \"diskSizeGb\": \"10\",\n              \"architecture\": \"X86_64\"\n            }\n          ],\n          \"metadata\": {\n            \"kind\": \"compute#metadata\",\n            \"fingerprint\": \"QiZsHXut0E8=\",\n            \"items\": [\n              {\n                \"key\": \"instance-template\",\n                \"value\": \"projects/12340002/global/instanceTemplates/mig-template\"\n              },\n              {\n                \"key\": \"created-by\",\n                \"value\": \"projects/12340002/zones/europe-west4-a/instanceGroupManagers/mig\"\n              }\n            ]\n          },\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instances/mig-lpq6\",\n          \"scheduling\": {\n            \"onHostMaintenance\": \"MIGRATE\",\n            \"automaticRestart\": true,\n            \"preemptible\": false,\n            \"provisioningModel\": \"STANDARD\"\n          },\n          \"cpuPlatform\": \"Intel Broadwell\",\n          \"labels\": {\n            \"goog-terraform-provisioned\": \"true\"\n          },\n          \"labelFingerprint\": \"vezUS-42LLM=\",\n          \"startRestricted\": false,\n          \"deletionProtection\": false,\n          \"shieldedInstanceConfig\": {\n            \"enableSecureBoot\": false,\n            \"enableVtpm\": true,\n            \"enableIntegrityMonitoring\": true\n          },\n          \"shieldedInstanceIntegrityPolicy\": {\n            \"updateAutoLearnPolicy\": true\n          },\n          \"fingerprint\": \"odPKCHpc7DM=\",\n          \"lastStartTimestamp\": \"2025-02-05T04:55:32.781-08:00\",\n          \"satisfiesPzi\": true\n        },\n        {\n          \"kind\": \"compute#instance\",\n          \"id\": \"7593829016559083860\",\n          \"creationTimestamp\": \"2025-02-05T04:55:23.272-08:00\",\n          \"name\": \"mig-mv82\",\n          \"tags\": {\n            \"fingerprint\": \"42WmSpB8rSM=\"\n          },\n          \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/machineTypes/e2-micro\",\n          \"status\": \"RUNNING\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a\",\n          \"networkInterfaces\": [\n            {\n              \"kind\": \"compute#networkInterface\",\n              \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n              \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default\",\n              \"networkIP\": \"10.164.0.11\",\n              \"name\": \"nic0\",\n              \"fingerprint\": \"gtxiVRuJigg=\",\n              \"stackType\": \"IPV4_ONLY\"\n            }\n          ],\n          \"disks\": [\n            {\n              \"kind\": \"compute#attachedDisk\",\n              \"type\": \"PERSISTENT\",\n              \"mode\": \"READ_WRITE\",\n              \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/disks/mig-mv82\",\n              \"deviceName\": \"persistent-disk-0\",\n              \"index\": 0,\n              \"boot\": true,\n              \"autoDelete\": true,\n              \"licenses\": [\n                \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye\"\n              ],\n              \"interface\": \"SCSI\",\n              \"guestOsFeatures\": [\n                {\n                  \"type\": \"UEFI_COMPATIBLE\"\n                },\n                {\n                  \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n                },\n                {\n                  \"type\": \"GVNIC\"\n                }\n              ],\n              \"diskSizeGb\": \"10\",\n              \"architecture\": \"X86_64\"\n            }\n          ],\n          \"metadata\": {\n            \"kind\": \"compute#metadata\",\n            \"fingerprint\": \"QiZsHXut0E8=\",\n            \"items\": [\n              {\n                \"key\": \"instance-template\",\n                \"value\": \"projects/12340002/global/instanceTemplates/mig-template\"\n              },\n              {\n                \"key\": \"created-by\",\n                \"value\": \"projects/12340002/zones/europe-west4-a/instanceGroupManagers/mig\"\n              }\n            ]\n          },\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instances/mig-mv82\",\n          \"scheduling\": {\n            \"onHostMaintenance\": \"MIGRATE\",\n            \"automaticRestart\": true,\n            \"preemptible\": false,\n            \"provisioningModel\": \"STANDARD\"\n          },\n          \"cpuPlatform\": \"Intel Broadwell\",\n          \"labels\": {\n            \"goog-terraform-provisioned\": \"true\"\n          },\n          \"labelFingerprint\": \"vezUS-42LLM=\",\n          \"startRestricted\": false,\n          \"deletionProtection\": false,\n          \"shieldedInstanceConfig\": {\n            \"enableSecureBoot\": false,\n            \"enableVtpm\": true,\n            \"enableIntegrityMonitoring\": true\n          },\n          \"shieldedInstanceIntegrityPolicy\": {\n            \"updateAutoLearnPolicy\": true\n          },\n          \"fingerprint\": \"6WMPctzA2pQ=\",\n          \"lastStartTimestamp\": \"2025-02-05T04:55:32.069-08:00\",\n          \"satisfiesPzi\": true\n        }\n      ]\n    },\n    \"zones/europe-north1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-north1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-north1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-north1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-west2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-west2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-west2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-east2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-east2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-east2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west6-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west6-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west6-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west6-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west6-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west6-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west6-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west6-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west6-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-northeast2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-northeast2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-northeast2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast3-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-northeast3-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast3-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast3-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-northeast3-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast3-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast3-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-northeast3-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast3-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west3-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-west3-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west3-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west3-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-west3-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west3-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west3-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-west3-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west3-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west4-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-west4-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west4-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west4-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-west4-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west4-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west4-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-west4-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west4-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-southeast2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-southeast2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-southeast2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-central2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-central2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-central2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-central2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-central2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-central2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-central2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-central2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-central2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/northamerica-northeast2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/northamerica-northeast2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/northamerica-northeast2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-south2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-south2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-south2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/australia-southeast2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/australia-southeast2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/australia-southeast2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-west1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/southamerica-west1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-west1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-west1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/southamerica-west1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-west1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-west1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/southamerica-west1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-west1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east7-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-east7-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east7-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east7-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-east7-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east7-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east7-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-east7-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east7-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west8-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west8-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west8-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west8-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west8-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west8-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west8-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west8-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west8-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west9-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west9-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west9-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west9-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west9-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west9-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west9-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west9-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west9-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east5-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-east5-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east5-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east5-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-east5-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east5-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east5-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-east5-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east5-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-southwest1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-southwest1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-southwest1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-southwest1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-southwest1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-southwest1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-southwest1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-southwest1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-southwest1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-south1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-south1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-south1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-south1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-south1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-south1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-south1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-south1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-south1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-west1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/me-west1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-west1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-west1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/me-west1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-west1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/me-west1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/me-west1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-west1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west12-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west12-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west12-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west12-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west12-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west12-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west12-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west12-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west12-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/me-central1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/me-central1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/me-central1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west10-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west10-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west10-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west10-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west10-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west10-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west10-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west10-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west10-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/me-central2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/me-central2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/me-central2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/africa-south1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/africa-south1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/africa-south1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/africa-south1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/africa-south1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/africa-south1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/africa-south1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/africa-south1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/africa-south1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west8-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-west8-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west8-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west8-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-west8-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west8-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west8-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-west8-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west8-b\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-south1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/northamerica-south1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-south1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-south1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/northamerica-south1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-south1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-south1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/northamerica-south1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-south1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-north2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-north2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-north2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north2-b\"\n          }\n        ]\n      }\n    }\n  },\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/aggregated/instances\"\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/compute-instances-empty.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gke1-aaaa/zones/europe-west1-b/instances\",\n  \"kind\": \"compute#instanceList\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west1-b/instances\"\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/compute-instances-europe-west4-a.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instances\",\n  \"items\": [\n    {\n      \"cpuPlatform\": \"Intel Broadwell\",\n      \"creationTimestamp\": \"2023-05-09T12:41:30.493-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"architecture\": \"X86_64\",\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"100\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"SEV_SNP_CAPABLE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            },\n            {\n              \"type\": \"SECURE_BOOT\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"shieldedInstanceInitialState\": {\n            \"dbs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"dbxs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"keks\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"pk\": {\n              \"content\": \"REDACTED\",\n              \"fileType\": \"X509\"\n            }\n          },\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/disks/gke-gke1-default-pool-671518f6-zsnm\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"714758298644455174\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"yaFVeZPybGM=\",\n      \"labels\": {\n        \"foo\": \"bar\",\n        \"goog-gke-node\": \"\"\n      },\n      \"lastStartTimestamp\": \"2023-05-09T12:41:36.364-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/machineTypes/e2-medium\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"instance-template\",\n            \"value\": \"projects/12340002/global/instanceTemplates/gke-gke1-default-pool-671518f6\"\n          },\n          {\n            \"key\": \"created-by\",\n            \"value\": \"projects/12340002/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-671518f6-grp\"\n          },\n          {\n            \"key\": \"serial-port-logging-enable\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"kube-labels\",\n            \"value\": \"cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=e2,cloud.google.com/private-node=false,node.kubernetes.io/masq-agent-ds-ready=true\"\n          },\n          {\n            \"key\": \"google-compute-enable-pcid\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"kubelet-config\",\n            \"value\": \"apiVersion: kubelet.config.k8s.io/v1beta1\\nauthentication:\\n  anonymous:\\n    enabled: false\\n  webhook:\\n    enabled: true\\n  x509:\\n    clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\\nauthorization:\\n  mode: Webhook\\ncgroupRoot: /\\nclusterDNS:\\n- 192.168.2.10\\nclusterDomain: cluster.local\\nenableDebuggingHandlers: true\\nevictionHard:\\n  memory.available: 100Mi\\n  nodefs.available: 10%\\n  nodefs.inodesFree: 5%\\n  pid.available: 10%\\nfeatureGates:\\n  CSIMigrationGCE: true\\n  DisableKubeletCloudCredentialProviders: false\\n  DynamicKubeletConfig: false\\n  ExecProbeTimeout: false\\n  InTreePluginAWSUnregister: true\\n  InTreePluginAzureDiskUnregister: true\\n  InTreePluginOpenStackUnregister: true\\n  InTreePluginvSphereUnregister: true\\n  RotateKubeletServerCertificate: true\\nkernelMemcgNotification: true\\nkind: KubeletConfiguration\\nkubeReserved:\\n  cpu: 1060m\\n  ephemeral-storage: 41Gi\\n  memory: 1019Mi\\nreadOnlyPort: 10255\\nserverTLSBootstrap: true\\nstaticPodPath: /etc/kubernetes/manifests\\n\"\n          },\n          {\n            \"key\": \"kubeconfig\",\n            \"value\": \"apiVersion: v1\\nkind: Config\\nclusters:\\n- cluster:\\n    server: https://192.168.0.34\\n    certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\\n  name: default-cluster\\ncontexts:\\n- context:\\n    cluster: default-cluster\\n    namespace: default\\n    user: exec-plugin-auth\\n  name: default-context\\ncurrent-context: default-context\\nusers:\\n- name: exec-plugin-auth\\n  user:\\n    exec:\\n      apiVersion: \\\"client.authentication.k8s.io/v1beta1\\\"\\n      command: '/home/kubernetes/bin/gke-exec-auth-plugin'\\n      args: [\\\"--cache-dir\\\", '/var/lib/kubelet/pki/']\\n\"\n          },\n          {\n            \"key\": \"cluster-name\",\n            \"value\": \"gke1\"\n          },\n          {\n            \"key\": \"gci-update-strategy\",\n            \"value\": \"update_disabled\"\n          },\n          {\n            \"key\": \"gci-metrics-enabled\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"configure-sh\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"disable-legacy-endpoints\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"user-data\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"kube-env\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"cluster-uid\",\n            \"value\": \"c10b95be9dbb48d09af2e5c299c655c01f02e38cc157489eb8ec454d30b7ecb7\"\n          },\n          {\n            \"key\": \"cluster-location\",\n            \"value\": \"europe-west4-a\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"gke-gke1-default-pool-671518f6-zsnm\",\n      \"networkInterfaces\": [\n        {\n          \"accessConfigs\": [\n            {\n              \"kind\": \"compute#accessConfig\",\n              \"name\": \"external-nat\",\n              \"natIP\": \"34.90.1.21\",\n              \"networkTier\": \"PREMIUM\",\n              \"type\": \"ONE_TO_ONE_NAT\"\n            }\n          ],\n          \"aliasIpRanges\": [\n            {\n              \"ipCidrRange\": \"192.168.1.0/24\",\n              \"subnetworkRangeName\": \"gke1-secondary-range-pod\"\n            }\n          ],\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"networkIP\": \"192.168.0.35\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/gke1-subnet\"\n        }\n      ],\n      \"networkPerformanceConfig\": {\n        \"totalEgressBandwidthTier\": \"DEFAULT\"\n      },\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instances/gke-gke1-default-pool-671518f6-zsnm\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"12340002-compute@developer.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/devstorage.read_only\",\n            \"https://www.googleapis.com/auth/logging.write\",\n            \"https://www.googleapis.com/auth/monitoring\",\n            \"https://www.googleapis.com/auth/service.management.readonly\",\n            \"https://www.googleapis.com/auth/servicecontrol\",\n            \"https://www.googleapis.com/auth/trace.append\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"gke-gke1-c10b95be-node\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a\"\n    },\n    {\n      \"canIpForward\": true,\n      \"cpuPlatform\": \"AMD Rome\",\n      \"creationTimestamp\": \"2023-04-27T00:58:54.957-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"architecture\": \"X86_64\",\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"100\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            },\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"SECURE_BOOT\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"shieldedInstanceInitialState\": {\n            \"dbs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"dbxs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"keks\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"pk\": {\n              \"content\": \"REDACTED\",\n              \"fileType\": \"X509\"\n            }\n          },\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/disks/gke-gke2-default-pool-dabb2ff4-76fs\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"7304700068855518674\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"2ixRno2sGuM=\",\n      \"labels\": {\n        \"goog-gke-node\": \"\"\n      },\n      \"lastStartTimestamp\": \"2023-04-27T00:59:02.795-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/machineTypes/e2-medium\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"instance-template\",\n            \"value\": \"projects/12340002/global/instanceTemplates/gke-gke2-default-pool-913244b5\"\n          },\n          {\n            \"key\": \"created-by\",\n            \"value\": \"projects/12340002/zones/europe-west4-a/instanceGroupManagers/gke-gke2-default-pool-dabb2ff4-grp\"\n          },\n          {\n            \"key\": \"serial-port-logging-enable\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"kube-labels\",\n            \"value\": \"cloud.google.com/gke-boot-disk=pd-standard,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-netd-ready=true,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/machine-family=e2,iam.gke.io/gke-metadata-server-enabled=true\"\n          },\n          {\n            \"key\": \"google-compute-enable-pcid\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"enable-oslogin\",\n            \"value\": \"false\"\n          },\n          {\n            \"key\": \"kubelet-config\",\n            \"value\": \"apiVersion: kubelet.config.k8s.io/v1beta1\\nauthentication:\\n  anonymous:\\n    enabled: false\\n  webhook:\\n    enabled: true\\n  x509:\\n    clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\\nauthorization:\\n  mode: Webhook\\ncgroupRoot: /\\nclusterDNS:\\n- 10.7.240.10\\nclusterDomain: cluster.local\\nenableDebuggingHandlers: true\\nevictionHard:\\n  memory.available: 100Mi\\n  nodefs.available: 10%\\n  nodefs.inodesFree: 5%\\n  pid.available: 10%\\nfeatureGates:\\n  CSIMigrationGCE: true\\n  DisableKubeletCloudCredentialProviders: false\\n  DynamicKubeletConfig: false\\n  ExecProbeTimeout: false\\n  InTreePluginAWSUnregister: true\\n  InTreePluginAzureDiskUnregister: true\\n  InTreePluginOpenStackUnregister: true\\n  InTreePluginvSphereUnregister: true\\n  RotateKubeletServerCertificate: true\\nkernelMemcgNotification: true\\nkind: KubeletConfiguration\\nkubeReserved:\\n  cpu: 1060m\\n  ephemeral-storage: 41Gi\\n  memory: 1019Mi\\nreadOnlyPort: 10255\\nserverTLSBootstrap: true\\nstaticPodPath: /etc/kubernetes/manifests\\n\"\n          },\n          {\n            \"key\": \"cluster-name\",\n            \"value\": \"gke2\"\n          },\n          {\n            \"key\": \"kubeconfig\",\n            \"value\": \"apiVersion: v1\\nkind: Config\\nclusters:\\n- cluster:\\n    server: https://34.91.246.188\\n    certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\\n  name: default-cluster\\ncontexts:\\n- context:\\n    cluster: default-cluster\\n    namespace: default\\n    user: exec-plugin-auth\\n  name: default-context\\ncurrent-context: default-context\\nusers:\\n- name: exec-plugin-auth\\n  user:\\n    exec:\\n      apiVersion: \\\"client.authentication.k8s.io/v1beta1\\\"\\n      command: '/home/kubernetes/bin/gke-exec-auth-plugin'\\n      args: [\\\"--cache-dir\\\", '/var/lib/kubelet/pki/']\\n\"\n          },\n          {\n            \"key\": \"gci-update-strategy\",\n            \"value\": \"update_disabled\"\n          },\n          {\n            \"key\": \"gci-metrics-enabled\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"configure-sh\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"disable-legacy-endpoints\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"user-data\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"kube-env\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"cluster-uid\",\n            \"value\": \"12cd17cd70b64fe2b23d17d17898c8161509f72746f94b0b949486fb5e07a22b\"\n          },\n          {\n            \"key\": \"cluster-location\",\n            \"value\": \"europe-west4\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"gke-gke2-default-pool-dabb2ff4-76fs\",\n      \"networkInterfaces\": [\n        {\n          \"accessConfigs\": [\n            {\n              \"kind\": \"compute#accessConfig\",\n              \"name\": \"external-nat\",\n              \"natIP\": \"34.90.78.101\",\n              \"networkTier\": \"PREMIUM\",\n              \"type\": \"ONE_TO_ONE_NAT\"\n            }\n          ],\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"networkIP\": \"10.164.15.224\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default\"\n        }\n      ],\n      \"networkPerformanceConfig\": {\n        \"totalEgressBandwidthTier\": \"DEFAULT\"\n      },\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instances/gke-gke2-default-pool-dabb2ff4-76fs\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"gke2sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/cloud-platform\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"gke-gke2-12cd17cd-node\",\n          \"gke-gke2-custom-tag\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a\"\n    },\n    {\n      \"canIpForward\": true,\n      \"cpuPlatform\": \"Intel Broadwell\",\n      \"creationTimestamp\": \"2023-05-08T09:43:36.667-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"architecture\": \"X86_64\",\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"100\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"SEV_SNP_CAPABLE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            },\n            {\n              \"type\": \"SECURE_BOOT\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"shieldedInstanceInitialState\": {\n            \"dbs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"dbxs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"keks\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"pk\": {\n              \"content\": \"REDACTED\",\n              \"fileType\": \"X509\"\n            }\n          },\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/disks/gke-gke3-default-pool-bf4b1ef1-b4ct\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"3078209961897269336\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"2ixRno2sGuM=\",\n      \"labels\": {\n        \"goog-gke-node\": \"\"\n      },\n      \"lastStartTimestamp\": \"2023-05-08T09:43:43.107-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/machineTypes/e2-medium\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"instance-template\",\n            \"value\": \"projects/12340002/global/instanceTemplates/gke-gke3-default-pool-bf4b1ef1\"\n          },\n          {\n            \"key\": \"created-by\",\n            \"value\": \"projects/12340002/zones/europe-west4-a/instanceGroupManagers/gke-gke3-default-pool-bf4b1ef1-grp\"\n          },\n          {\n            \"key\": \"serial-port-logging-enable\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"kube-labels\",\n            \"value\": \"cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=e2,cloud.google.com/private-node=false\"\n          },\n          {\n            \"key\": \"google-compute-enable-pcid\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"kubelet-config\",\n            \"value\": \"apiVersion: kubelet.config.k8s.io/v1beta1\\nauthentication:\\n  anonymous:\\n    enabled: false\\n  webhook:\\n    enabled: true\\n  x509:\\n    clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\\nauthorization:\\n  mode: Webhook\\ncgroupRoot: /\\nclusterDNS:\\n- 10.1.16.10\\nclusterDomain: cluster.local\\nenableDebuggingHandlers: true\\nevictionHard:\\n  memory.available: 100Mi\\n  nodefs.available: 10%\\n  nodefs.inodesFree: 5%\\n  pid.available: 10%\\nfeatureGates:\\n  CSIMigrationGCE: true\\n  DisableKubeletCloudCredentialProviders: false\\n  DynamicKubeletConfig: false\\n  ExecProbeTimeout: false\\n  InTreePluginAWSUnregister: true\\n  InTreePluginAzureDiskUnregister: true\\n  InTreePluginOpenStackUnregister: true\\n  InTreePluginvSphereUnregister: true\\n  RotateKubeletServerCertificate: true\\nkernelMemcgNotification: true\\nkind: KubeletConfiguration\\nkubeReserved:\\n  cpu: 1060m\\n  ephemeral-storage: 41Gi\\n  memory: 1019Mi\\nreadOnlyPort: 10255\\nserverTLSBootstrap: true\\nstaticPodPath: /etc/kubernetes/manifests\\n\"\n          },\n          {\n            \"key\": \"kubeconfig\",\n            \"value\": \"apiVersion: v1\\nkind: Config\\nclusters:\\n- cluster:\\n    server: https://10.164.15.229\\n    certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\\n  name: default-cluster\\ncontexts:\\n- context:\\n    cluster: default-cluster\\n    namespace: default\\n    user: exec-plugin-auth\\n  name: default-context\\ncurrent-context: default-context\\nusers:\\n- name: exec-plugin-auth\\n  user:\\n    exec:\\n      apiVersion: \\\"client.authentication.k8s.io/v1beta1\\\"\\n      command: '/home/kubernetes/bin/gke-exec-auth-plugin'\\n      args: [\\\"--cache-dir\\\", '/var/lib/kubelet/pki/']\\n\"\n          },\n          {\n            \"key\": \"cluster-name\",\n            \"value\": \"gke3\"\n          },\n          {\n            \"key\": \"gci-update-strategy\",\n            \"value\": \"update_disabled\"\n          },\n          {\n            \"key\": \"gci-metrics-enabled\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"configure-sh\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"disable-legacy-endpoints\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"user-data\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"kube-env\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"cluster-uid\",\n            \"value\": \"15974e2390f34be183a43aa73aae86c5ac5363817bec4b4b82064a0bc5b3d3b6\"\n          },\n          {\n            \"key\": \"cluster-location\",\n            \"value\": \"europe-west4\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"gke-gke3-default-pool-bf4b1ef1-b4ct\",\n      \"networkInterfaces\": [\n        {\n          \"accessConfigs\": [\n            {\n              \"kind\": \"compute#accessConfig\",\n              \"name\": \"external-nat\",\n              \"natIP\": \"35.204.203.90\",\n              \"networkTier\": \"PREMIUM\",\n              \"type\": \"ONE_TO_ONE_NAT\"\n            }\n          ],\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"networkIP\": \"10.164.15.233\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default\"\n        }\n      ],\n      \"networkPerformanceConfig\": {\n        \"totalEgressBandwidthTier\": \"DEFAULT\"\n      },\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instances/gke-gke3-default-pool-bf4b1ef1-b4ct\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"gke3sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/cloud-platform\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"gke-gke3-15974e23-node\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a\"\n    },\n    {\n      \"canIpForward\": true,\n      \"cpuPlatform\": \"Intel Broadwell\",\n      \"creationTimestamp\": \"2023-05-08T09:43:37.000-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"architecture\": \"X86_64\",\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"100\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"SEV_SNP_CAPABLE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            },\n            {\n              \"type\": \"SECURE_BOOT\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"shieldedInstanceInitialState\": {\n            \"dbs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"dbxs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"keks\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"pk\": {\n              \"content\": \"REDACTED\",\n              \"fileType\": \"X509\"\n            }\n          },\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/disks/gke-gke3-default-pool-bf4b1ef1-dpj4\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"1931601969021229143\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"2ixRno2sGuM=\",\n      \"labels\": {\n        \"goog-gke-node\": \"\"\n      },\n      \"lastStartTimestamp\": \"2023-05-08T09:43:42.347-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/machineTypes/e2-medium\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"instance-template\",\n            \"value\": \"projects/12340002/global/instanceTemplates/gke-gke3-default-pool-bf4b1ef1\"\n          },\n          {\n            \"key\": \"created-by\",\n            \"value\": \"projects/12340002/zones/europe-west4-a/instanceGroupManagers/gke-gke3-default-pool-bf4b1ef1-grp\"\n          },\n          {\n            \"key\": \"serial-port-logging-enable\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"kube-labels\",\n            \"value\": \"cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=e2,cloud.google.com/private-node=false\"\n          },\n          {\n            \"key\": \"google-compute-enable-pcid\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"kubelet-config\",\n            \"value\": \"apiVersion: kubelet.config.k8s.io/v1beta1\\nauthentication:\\n  anonymous:\\n    enabled: false\\n  webhook:\\n    enabled: true\\n  x509:\\n    clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\\nauthorization:\\n  mode: Webhook\\ncgroupRoot: /\\nclusterDNS:\\n- 10.1.16.10\\nclusterDomain: cluster.local\\nenableDebuggingHandlers: true\\nevictionHard:\\n  memory.available: 100Mi\\n  nodefs.available: 10%\\n  nodefs.inodesFree: 5%\\n  pid.available: 10%\\nfeatureGates:\\n  CSIMigrationGCE: true\\n  DisableKubeletCloudCredentialProviders: false\\n  DynamicKubeletConfig: false\\n  ExecProbeTimeout: false\\n  InTreePluginAWSUnregister: true\\n  InTreePluginAzureDiskUnregister: true\\n  InTreePluginOpenStackUnregister: true\\n  InTreePluginvSphereUnregister: true\\n  RotateKubeletServerCertificate: true\\nkernelMemcgNotification: true\\nkind: KubeletConfiguration\\nkubeReserved:\\n  cpu: 1060m\\n  ephemeral-storage: 41Gi\\n  memory: 1019Mi\\nreadOnlyPort: 10255\\nserverTLSBootstrap: true\\nstaticPodPath: /etc/kubernetes/manifests\\n\"\n          },\n          {\n            \"key\": \"kubeconfig\",\n            \"value\": \"apiVersion: v1\\nkind: Config\\nclusters:\\n- cluster:\\n    server: https://10.164.15.229\\n    certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\\n  name: default-cluster\\ncontexts:\\n- context:\\n    cluster: default-cluster\\n    namespace: default\\n    user: exec-plugin-auth\\n  name: default-context\\ncurrent-context: default-context\\nusers:\\n- name: exec-plugin-auth\\n  user:\\n    exec:\\n      apiVersion: \\\"client.authentication.k8s.io/v1beta1\\\"\\n      command: '/home/kubernetes/bin/gke-exec-auth-plugin'\\n      args: [\\\"--cache-dir\\\", '/var/lib/kubelet/pki/']\\n\"\n          },\n          {\n            \"key\": \"cluster-name\",\n            \"value\": \"gke3\"\n          },\n          {\n            \"key\": \"gci-update-strategy\",\n            \"value\": \"update_disabled\"\n          },\n          {\n            \"key\": \"gci-metrics-enabled\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"configure-sh\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"disable-legacy-endpoints\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"user-data\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"kube-env\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"cluster-uid\",\n            \"value\": \"15974e2390f34be183a43aa73aae86c5ac5363817bec4b4b82064a0bc5b3d3b6\"\n          },\n          {\n            \"key\": \"cluster-location\",\n            \"value\": \"europe-west4\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"gke-gke3-default-pool-bf4b1ef1-dpj4\",\n      \"networkInterfaces\": [\n        {\n          \"accessConfigs\": [\n            {\n              \"kind\": \"compute#accessConfig\",\n              \"name\": \"external-nat\",\n              \"natIP\": \"34.32.144.140\",\n              \"networkTier\": \"PREMIUM\",\n              \"type\": \"ONE_TO_ONE_NAT\"\n            }\n          ],\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"networkIP\": \"10.164.15.234\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default\"\n        }\n      ],\n      \"networkPerformanceConfig\": {\n        \"totalEgressBandwidthTier\": \"DEFAULT\"\n      },\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instances/gke-gke3-default-pool-bf4b1ef1-dpj4\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"gke3sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/cloud-platform\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"gke-gke3-15974e23-node\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a\"\n    },\n    {\n      \"canIpForward\": true,\n      \"cpuPlatform\": \"AMD Rome\",\n      \"creationTimestamp\": \"2023-05-08T09:43:36.600-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"architecture\": \"X86_64\",\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"100\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"SEV_SNP_CAPABLE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            },\n            {\n              \"type\": \"SECURE_BOOT\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"shieldedInstanceInitialState\": {\n            \"dbs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"dbxs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"keks\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"pk\": {\n              \"content\": \"REDACTED\",\n              \"fileType\": \"X509\"\n            }\n          },\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/disks/gke-gke3-default-pool-bf4b1ef1-h17r\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"1557070143521331288\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"2ixRno2sGuM=\",\n      \"labels\": {\n        \"goog-gke-node\": \"\"\n      },\n      \"lastStartTimestamp\": \"2023-05-08T09:43:42.698-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/machineTypes/e2-medium\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"instance-template\",\n            \"value\": \"projects/12340002/global/instanceTemplates/gke-gke3-default-pool-bf4b1ef1\"\n          },\n          {\n            \"key\": \"created-by\",\n            \"value\": \"projects/12340002/zones/europe-west4-a/instanceGroupManagers/gke-gke3-default-pool-bf4b1ef1-grp\"\n          },\n          {\n            \"key\": \"serial-port-logging-enable\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"kube-labels\",\n            \"value\": \"cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=e2,cloud.google.com/private-node=false\"\n          },\n          {\n            \"key\": \"google-compute-enable-pcid\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"kubelet-config\",\n            \"value\": \"apiVersion: kubelet.config.k8s.io/v1beta1\\nauthentication:\\n  anonymous:\\n    enabled: false\\n  webhook:\\n    enabled: true\\n  x509:\\n    clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\\nauthorization:\\n  mode: Webhook\\ncgroupRoot: /\\nclusterDNS:\\n- 10.1.16.10\\nclusterDomain: cluster.local\\nenableDebuggingHandlers: true\\nevictionHard:\\n  memory.available: 100Mi\\n  nodefs.available: 10%\\n  nodefs.inodesFree: 5%\\n  pid.available: 10%\\nfeatureGates:\\n  CSIMigrationGCE: true\\n  DisableKubeletCloudCredentialProviders: false\\n  DynamicKubeletConfig: false\\n  ExecProbeTimeout: false\\n  InTreePluginAWSUnregister: true\\n  InTreePluginAzureDiskUnregister: true\\n  InTreePluginOpenStackUnregister: true\\n  InTreePluginvSphereUnregister: true\\n  RotateKubeletServerCertificate: true\\nkernelMemcgNotification: true\\nkind: KubeletConfiguration\\nkubeReserved:\\n  cpu: 1060m\\n  ephemeral-storage: 41Gi\\n  memory: 1019Mi\\nreadOnlyPort: 10255\\nserverTLSBootstrap: true\\nstaticPodPath: /etc/kubernetes/manifests\\n\"\n          },\n          {\n            \"key\": \"kubeconfig\",\n            \"value\": \"apiVersion: v1\\nkind: Config\\nclusters:\\n- cluster:\\n    server: https://10.164.15.229\\n    certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\\n  name: default-cluster\\ncontexts:\\n- context:\\n    cluster: default-cluster\\n    namespace: default\\n    user: exec-plugin-auth\\n  name: default-context\\ncurrent-context: default-context\\nusers:\\n- name: exec-plugin-auth\\n  user:\\n    exec:\\n      apiVersion: \\\"client.authentication.k8s.io/v1beta1\\\"\\n      command: '/home/kubernetes/bin/gke-exec-auth-plugin'\\n      args: [\\\"--cache-dir\\\", '/var/lib/kubelet/pki/']\\n\"\n          },\n          {\n            \"key\": \"cluster-name\",\n            \"value\": \"gke3\"\n          },\n          {\n            \"key\": \"gci-update-strategy\",\n            \"value\": \"update_disabled\"\n          },\n          {\n            \"key\": \"gci-metrics-enabled\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"configure-sh\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"disable-legacy-endpoints\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"user-data\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"kube-env\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"cluster-uid\",\n            \"value\": \"15974e2390f34be183a43aa73aae86c5ac5363817bec4b4b82064a0bc5b3d3b6\"\n          },\n          {\n            \"key\": \"cluster-location\",\n            \"value\": \"europe-west4\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"gke-gke3-default-pool-bf4b1ef1-h17r\",\n      \"networkInterfaces\": [\n        {\n          \"accessConfigs\": [\n            {\n              \"kind\": \"compute#accessConfig\",\n              \"name\": \"external-nat\",\n              \"natIP\": \"34.147.58.77\",\n              \"networkTier\": \"PREMIUM\",\n              \"type\": \"ONE_TO_ONE_NAT\"\n            }\n          ],\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"networkIP\": \"10.164.15.230\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default\"\n        }\n      ],\n      \"networkPerformanceConfig\": {\n        \"totalEgressBandwidthTier\": \"DEFAULT\"\n      },\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instances/gke-gke3-default-pool-bf4b1ef1-h17r\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"gke3sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/cloud-platform\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"gke-gke3-15974e23-node\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a\"\n    },\n    {\n      \"canIpForward\": true,\n      \"cpuPlatform\": \"AMD Rome\",\n      \"creationTimestamp\": \"2023-05-08T09:43:37.103-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"architecture\": \"X86_64\",\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"100\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"SEV_SNP_CAPABLE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            },\n            {\n              \"type\": \"SECURE_BOOT\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"shieldedInstanceInitialState\": {\n            \"dbs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"dbxs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"keks\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"pk\": {\n              \"content\": \"REDACTED\",\n              \"fileType\": \"X509\"\n            }\n          },\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/disks/gke-gke3-default-pool-bf4b1ef1-p3vt\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"3464266086595467351\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"2ixRno2sGuM=\",\n      \"labels\": {\n        \"goog-gke-node\": \"\"\n      },\n      \"lastStartTimestamp\": \"2023-05-08T09:43:43.135-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/machineTypes/e2-medium\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"instance-template\",\n            \"value\": \"projects/12340002/global/instanceTemplates/gke-gke3-default-pool-bf4b1ef1\"\n          },\n          {\n            \"key\": \"created-by\",\n            \"value\": \"projects/12340002/zones/europe-west4-a/instanceGroupManagers/gke-gke3-default-pool-bf4b1ef1-grp\"\n          },\n          {\n            \"key\": \"serial-port-logging-enable\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"kube-labels\",\n            \"value\": \"cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=e2,cloud.google.com/private-node=false\"\n          },\n          {\n            \"key\": \"google-compute-enable-pcid\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"kubelet-config\",\n            \"value\": \"apiVersion: kubelet.config.k8s.io/v1beta1\\nauthentication:\\n  anonymous:\\n    enabled: false\\n  webhook:\\n    enabled: true\\n  x509:\\n    clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\\nauthorization:\\n  mode: Webhook\\ncgroupRoot: /\\nclusterDNS:\\n- 10.1.16.10\\nclusterDomain: cluster.local\\nenableDebuggingHandlers: true\\nevictionHard:\\n  memory.available: 100Mi\\n  nodefs.available: 10%\\n  nodefs.inodesFree: 5%\\n  pid.available: 10%\\nfeatureGates:\\n  CSIMigrationGCE: true\\n  DisableKubeletCloudCredentialProviders: false\\n  DynamicKubeletConfig: false\\n  ExecProbeTimeout: false\\n  InTreePluginAWSUnregister: true\\n  InTreePluginAzureDiskUnregister: true\\n  InTreePluginOpenStackUnregister: true\\n  InTreePluginvSphereUnregister: true\\n  RotateKubeletServerCertificate: true\\nkernelMemcgNotification: true\\nkind: KubeletConfiguration\\nkubeReserved:\\n  cpu: 1060m\\n  ephemeral-storage: 41Gi\\n  memory: 1019Mi\\nreadOnlyPort: 10255\\nserverTLSBootstrap: true\\nstaticPodPath: /etc/kubernetes/manifests\\n\"\n          },\n          {\n            \"key\": \"kubeconfig\",\n            \"value\": \"apiVersion: v1\\nkind: Config\\nclusters:\\n- cluster:\\n    server: https://10.164.15.229\\n    certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\\n  name: default-cluster\\ncontexts:\\n- context:\\n    cluster: default-cluster\\n    namespace: default\\n    user: exec-plugin-auth\\n  name: default-context\\ncurrent-context: default-context\\nusers:\\n- name: exec-plugin-auth\\n  user:\\n    exec:\\n      apiVersion: \\\"client.authentication.k8s.io/v1beta1\\\"\\n      command: '/home/kubernetes/bin/gke-exec-auth-plugin'\\n      args: [\\\"--cache-dir\\\", '/var/lib/kubelet/pki/']\\n\"\n          },\n          {\n            \"key\": \"cluster-name\",\n            \"value\": \"gke3\"\n          },\n          {\n            \"key\": \"gci-update-strategy\",\n            \"value\": \"update_disabled\"\n          },\n          {\n            \"key\": \"gci-metrics-enabled\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"configure-sh\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"disable-legacy-endpoints\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"user-data\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"kube-env\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"cluster-uid\",\n            \"value\": \"15974e2390f34be183a43aa73aae86c5ac5363817bec4b4b82064a0bc5b3d3b6\"\n          },\n          {\n            \"key\": \"cluster-location\",\n            \"value\": \"europe-west4\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"gke-gke3-default-pool-bf4b1ef1-p3vt\",\n      \"networkInterfaces\": [\n        {\n          \"accessConfigs\": [\n            {\n              \"kind\": \"compute#accessConfig\",\n              \"name\": \"external-nat\",\n              \"natIP\": \"35.204.230.44\",\n              \"networkTier\": \"PREMIUM\",\n              \"type\": \"ONE_TO_ONE_NAT\"\n            }\n          ],\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"networkIP\": \"10.164.15.232\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default\"\n        }\n      ],\n      \"networkPerformanceConfig\": {\n        \"totalEgressBandwidthTier\": \"DEFAULT\"\n      },\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instances/gke-gke3-default-pool-bf4b1ef1-p3vt\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"gke3sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/cloud-platform\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"gke-gke3-15974e23-node\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a\"\n    },\n    {\n      \"canIpForward\": true,\n      \"cpuPlatform\": \"Intel Broadwell\",\n      \"creationTimestamp\": \"2023-05-08T09:43:36.942-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"architecture\": \"X86_64\",\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"100\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"SEV_SNP_CAPABLE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            },\n            {\n              \"type\": \"SECURE_BOOT\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"shieldedInstanceInitialState\": {\n            \"dbs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"dbxs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"keks\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"pk\": {\n              \"content\": \"REDACTED\",\n              \"fileType\": \"X509\"\n            }\n          },\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/disks/gke-gke3-default-pool-bf4b1ef1-w0lj\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"5612281984122656855\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"2ixRno2sGuM=\",\n      \"labels\": {\n        \"goog-gke-node\": \"\"\n      },\n      \"lastStartTimestamp\": \"2023-05-08T09:43:42.548-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/machineTypes/e2-medium\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"instance-template\",\n            \"value\": \"projects/12340002/global/instanceTemplates/gke-gke3-default-pool-bf4b1ef1\"\n          },\n          {\n            \"key\": \"created-by\",\n            \"value\": \"projects/12340002/zones/europe-west4-a/instanceGroupManagers/gke-gke3-default-pool-bf4b1ef1-grp\"\n          },\n          {\n            \"key\": \"serial-port-logging-enable\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"kube-labels\",\n            \"value\": \"cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=e2,cloud.google.com/private-node=false\"\n          },\n          {\n            \"key\": \"google-compute-enable-pcid\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"kubelet-config\",\n            \"value\": \"apiVersion: kubelet.config.k8s.io/v1beta1\\nauthentication:\\n  anonymous:\\n    enabled: false\\n  webhook:\\n    enabled: true\\n  x509:\\n    clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\\nauthorization:\\n  mode: Webhook\\ncgroupRoot: /\\nclusterDNS:\\n- 10.1.16.10\\nclusterDomain: cluster.local\\nenableDebuggingHandlers: true\\nevictionHard:\\n  memory.available: 100Mi\\n  nodefs.available: 10%\\n  nodefs.inodesFree: 5%\\n  pid.available: 10%\\nfeatureGates:\\n  CSIMigrationGCE: true\\n  DisableKubeletCloudCredentialProviders: false\\n  DynamicKubeletConfig: false\\n  ExecProbeTimeout: false\\n  InTreePluginAWSUnregister: true\\n  InTreePluginAzureDiskUnregister: true\\n  InTreePluginOpenStackUnregister: true\\n  InTreePluginvSphereUnregister: true\\n  RotateKubeletServerCertificate: true\\nkernelMemcgNotification: true\\nkind: KubeletConfiguration\\nkubeReserved:\\n  cpu: 1060m\\n  ephemeral-storage: 41Gi\\n  memory: 1019Mi\\nreadOnlyPort: 10255\\nserverTLSBootstrap: true\\nstaticPodPath: /etc/kubernetes/manifests\\n\"\n          },\n          {\n            \"key\": \"kubeconfig\",\n            \"value\": \"apiVersion: v1\\nkind: Config\\nclusters:\\n- cluster:\\n    server: https://10.164.15.229\\n    certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\\n  name: default-cluster\\ncontexts:\\n- context:\\n    cluster: default-cluster\\n    namespace: default\\n    user: exec-plugin-auth\\n  name: default-context\\ncurrent-context: default-context\\nusers:\\n- name: exec-plugin-auth\\n  user:\\n    exec:\\n      apiVersion: \\\"client.authentication.k8s.io/v1beta1\\\"\\n      command: '/home/kubernetes/bin/gke-exec-auth-plugin'\\n      args: [\\\"--cache-dir\\\", '/var/lib/kubelet/pki/']\\n\"\n          },\n          {\n            \"key\": \"cluster-name\",\n            \"value\": \"gke3\"\n          },\n          {\n            \"key\": \"gci-update-strategy\",\n            \"value\": \"update_disabled\"\n          },\n          {\n            \"key\": \"gci-metrics-enabled\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"configure-sh\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"disable-legacy-endpoints\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"user-data\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"kube-env\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"cluster-uid\",\n            \"value\": \"15974e2390f34be183a43aa73aae86c5ac5363817bec4b4b82064a0bc5b3d3b6\"\n          },\n          {\n            \"key\": \"cluster-location\",\n            \"value\": \"europe-west4\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"gke-gke3-default-pool-bf4b1ef1-w0lj\",\n      \"networkInterfaces\": [\n        {\n          \"accessConfigs\": [\n            {\n              \"kind\": \"compute#accessConfig\",\n              \"name\": \"external-nat\",\n              \"natIP\": \"34.91.208.137\",\n              \"networkTier\": \"PREMIUM\",\n              \"type\": \"ONE_TO_ONE_NAT\"\n            }\n          ],\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"networkIP\": \"10.164.15.231\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default\"\n        }\n      ],\n      \"networkPerformanceConfig\": {\n        \"totalEgressBandwidthTier\": \"DEFAULT\"\n      },\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instances/gke-gke3-default-pool-bf4b1ef1-w0lj\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"gke3sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/cloud-platform\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"gke-gke3-15974e23-node\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a\"\n    },\n    {\n      \"cpuPlatform\": \"Intel Broadwell\",\n      \"creationTimestamp\": \"2023-04-17T22:19:38.086-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"architecture\": \"X86_64\",\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"100\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            },\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"SECURE_BOOT\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"shieldedInstanceInitialState\": {\n            \"dbs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"dbxs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"keks\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"pk\": {\n              \"content\": \"REDACTED\",\n              \"fileType\": \"X509\"\n            }\n          },\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/disks/gke-gke4-default-pool-4c934268-yzb0\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"8228233902822758022\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"2ixRno2sGuM=\",\n      \"labels\": {\n        \"goog-gke-node\": \"\"\n      },\n      \"lastStartTimestamp\": \"2023-04-17T22:19:42.542-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/machineTypes/e2-medium\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"instance-template\",\n            \"value\": \"projects/12340002/global/instanceTemplates/gke-gke4-default-pool-bcb6be97\"\n          },\n          {\n            \"key\": \"created-by\",\n            \"value\": \"projects/12340002/zones/europe-west4-a/instanceGroupManagers/gke-gke4-default-pool-4c934268-grp\"\n          },\n          {\n            \"key\": \"serial-port-logging-enable\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"kube-labels\",\n            \"value\": \"cloud.google.com/gke-boot-disk=pd-standard,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-netd-ready=true,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/machine-family=e2,iam.gke.io/gke-metadata-server-enabled=true\"\n          },\n          {\n            \"key\": \"google-compute-enable-pcid\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"kubelet-config\",\n            \"value\": \"apiVersion: kubelet.config.k8s.io/v1beta1\\nauthentication:\\n  anonymous:\\n    enabled: false\\n  webhook:\\n    enabled: true\\n  x509:\\n    clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\\nauthorization:\\n  mode: Webhook\\ncgroupRoot: /\\nclusterDNS:\\n- 10.60.144.10\\nclusterDomain: cluster.local\\nenableDebuggingHandlers: true\\nevictionHard:\\n  memory.available: 100Mi\\n  nodefs.available: 10%\\n  nodefs.inodesFree: 5%\\n  pid.available: 10%\\nfeatureGates:\\n  CSIMigrationGCE: true\\n  DisableKubeletCloudCredentialProviders: false\\n  DynamicKubeletConfig: false\\n  ExecProbeTimeout: false\\n  InTreePluginAWSUnregister: true\\n  InTreePluginAzureDiskUnregister: true\\n  InTreePluginOpenStackUnregister: true\\n  InTreePluginvSphereUnregister: true\\n  RotateKubeletServerCertificate: true\\nkernelMemcgNotification: true\\nkind: KubeletConfiguration\\nkubeReserved:\\n  cpu: 1060m\\n  ephemeral-storage: 41Gi\\n  memory: 1019Mi\\nreadOnlyPort: 10255\\nserverTLSBootstrap: true\\nstaticPodPath: /etc/kubernetes/manifests\\n\"\n          },\n          {\n            \"key\": \"kubeconfig\",\n            \"value\": \"apiVersion: v1\\nkind: Config\\nclusters:\\n- cluster:\\n    server: https://10.0.1.2\\n    certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\\n  name: default-cluster\\ncontexts:\\n- context:\\n    cluster: default-cluster\\n    namespace: default\\n    user: exec-plugin-auth\\n  name: default-context\\ncurrent-context: default-context\\nusers:\\n- name: exec-plugin-auth\\n  user:\\n    exec:\\n      apiVersion: \\\"client.authentication.k8s.io/v1beta1\\\"\\n      command: '/home/kubernetes/bin/gke-exec-auth-plugin'\\n      args: [\\\"--cache-dir\\\", '/var/lib/kubelet/pki/']\\n\"\n          },\n          {\n            \"key\": \"cluster-name\",\n            \"value\": \"gke4\"\n          },\n          {\n            \"key\": \"gci-update-strategy\",\n            \"value\": \"update_disabled\"\n          },\n          {\n            \"key\": \"gci-metrics-enabled\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"configure-sh\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"disable-legacy-endpoints\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"user-data\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"kube-env\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"cluster-uid\",\n            \"value\": \"3520a9df187f4f07bb3eb43779a93e2b7f41daea55e74f62a45f6821abd9771e\"\n          },\n          {\n            \"key\": \"cluster-location\",\n            \"value\": \"europe-west4-a\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"gke-gke4-default-pool-4c934268-yzb0\",\n      \"networkInterfaces\": [\n        {\n          \"aliasIpRanges\": [\n            {\n              \"ipCidrRange\": \"10.56.1.0/24\",\n              \"subnetworkRangeName\": \"gke-gke4-pods-3520a9df\"\n            }\n          ],\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"networkIP\": \"10.164.15.222\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default\"\n        }\n      ],\n      \"networkPerformanceConfig\": {\n        \"totalEgressBandwidthTier\": \"DEFAULT\"\n      },\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instances/gke-gke4-default-pool-4c934268-yzb0\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"12340002-compute@developer.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/devstorage.read_only\",\n            \"https://www.googleapis.com/auth/logging.write\",\n            \"https://www.googleapis.com/auth/monitoring\",\n            \"https://www.googleapis.com/auth/service.management.readonly\",\n            \"https://www.googleapis.com/auth/servicecontrol\",\n            \"https://www.googleapis.com/auth/trace.append\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"gke-gke4-3520a9df-node\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a\"\n    },\n    {\n      \"canIpForward\": true,\n      \"cpuPlatform\": \"Intel Skylake\",\n      \"creationTimestamp\": \"2023-05-08T09:00:44.503-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"architecture\": \"X86_64\",\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"100\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"SEV_SNP_CAPABLE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            },\n            {\n              \"type\": \"SECURE_BOOT\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"shieldedInstanceInitialState\": {\n            \"dbs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"dbxs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"keks\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"pk\": {\n              \"content\": \"REDACTED\",\n              \"fileType\": \"X509\"\n            }\n          },\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/disks/gke-gke6-default-pool-d8412db4-pb55\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"guestAccelerators\": [\n        {\n          \"acceleratorCount\": 1,\n          \"acceleratorType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/acceleratorTypes/nvidia-tesla-v100\"\n        }\n      ],\n      \"id\": \"8425029699468829252\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"PKb1LeSIlTc=\",\n      \"labels\": {\n        \"gcpdiag_test\": \"gke\",\n        \"goog-gke-node\": \"\"\n      },\n      \"lastStartTimestamp\": \"2023-05-08T09:01:38.456-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/machineTypes/n1-standard-2\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"instance-template\",\n            \"value\": \"projects/12340002/global/instanceTemplates/gke-gke6-default-pool-d8412db4\"\n          },\n          {\n            \"key\": \"created-by\",\n            \"value\": \"projects/12340002/zones/europe-west4-a/instanceGroupManagers/gke-gke6-default-pool-d8412db4-grp\"\n          },\n          {\n            \"key\": \"serial-port-logging-enable\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"kube-labels\",\n            \"value\": \"cloud.google.com/gke-accelerator=nvidia-tesla-v100,cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=n1,cloud.google.com/private-node=false\"\n          },\n          {\n            \"key\": \"google-compute-enable-pcid\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"kubelet-config\",\n            \"value\": \"apiVersion: kubelet.config.k8s.io/v1beta1\\nauthentication:\\n  anonymous:\\n    enabled: false\\n  webhook:\\n    enabled: true\\n  x509:\\n    clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\\nauthorization:\\n  mode: Webhook\\ncgroupRoot: /\\nclusterDNS:\\n- 10.15.240.10\\nclusterDomain: cluster.local\\nenableDebuggingHandlers: true\\nevictionHard:\\n  memory.available: 100Mi\\n  nodefs.available: 10%\\n  nodefs.inodesFree: 5%\\n  pid.available: 10%\\nfeatureGates:\\n  CSIMigrationGCE: true\\n  DevicePlugins: true\\n  DisableKubeletCloudCredentialProviders: false\\n  DynamicKubeletConfig: false\\n  ExecProbeTimeout: false\\n  GracefulNodeShutdown: true\\n  InTreePluginAWSUnregister: true\\n  InTreePluginAzureDiskUnregister: true\\n  InTreePluginOpenStackUnregister: true\\n  InTreePluginvSphereUnregister: true\\n  RotateKubeletServerCertificate: true\\nkernelMemcgNotification: true\\nkind: KubeletConfiguration\\nkubeReserved:\\n  cpu: 70m\\n  ephemeral-storage: 41Gi\\n  memory: 1736Mi\\nreadOnlyPort: 10255\\nserverTLSBootstrap: true\\nshutdownGracePeriod: 30s\\nshutdownGracePeriodCriticalPods: 15s\\nstaticPodPath: /etc/kubernetes/manifests\\n\"\n          },\n          {\n            \"key\": \"kubeconfig\",\n            \"value\": \"apiVersion: v1\\nkind: Config\\nclusters:\\n- cluster:\\n    server: https://10.164.15.226\\n    certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\\n  name: default-cluster\\ncontexts:\\n- context:\\n    cluster: default-cluster\\n    namespace: default\\n    user: exec-plugin-auth\\n  name: default-context\\ncurrent-context: default-context\\nusers:\\n- name: exec-plugin-auth\\n  user:\\n    exec:\\n      apiVersion: \\\"client.authentication.k8s.io/v1beta1\\\"\\n      command: '/home/kubernetes/bin/gke-exec-auth-plugin'\\n      args: [\\\"--cache-dir\\\", '/var/lib/kubelet/pki/']\\n\"\n          },\n          {\n            \"key\": \"cluster-name\",\n            \"value\": \"gke6\"\n          },\n          {\n            \"key\": \"gci-update-strategy\",\n            \"value\": \"update_disabled\"\n          },\n          {\n            \"key\": \"gci-metrics-enabled\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"configure-sh\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"disable-legacy-endpoints\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"user-data\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"kube-env\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"cluster-uid\",\n            \"value\": \"ae0d671440334d958774869fae41fba7c463b87d933b485b982794440b09202e\"\n          },\n          {\n            \"key\": \"cluster-location\",\n            \"value\": \"europe-west4-a\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"gke-gke6-default-pool-d8412db4-pb55\",\n      \"networkInterfaces\": [\n        {\n          \"accessConfigs\": [\n            {\n              \"kind\": \"compute#accessConfig\",\n              \"name\": \"external-nat\",\n              \"natIP\": \"34.141.239.85\",\n              \"networkTier\": \"PREMIUM\",\n              \"type\": \"ONE_TO_ONE_NAT\"\n            }\n          ],\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"networkIP\": \"10.164.15.227\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default\"\n        }\n      ],\n      \"networkPerformanceConfig\": {\n        \"totalEgressBandwidthTier\": \"DEFAULT\"\n      },\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"TERMINATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instances/gke-gke6-default-pool-d8412db4-pb55\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"12340002-compute@developer.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/devstorage.read_only\",\n            \"https://www.googleapis.com/auth/logging.write\",\n            \"https://www.googleapis.com/auth/monitoring\",\n            \"https://www.googleapis.com/auth/service.management.readonly\",\n            \"https://www.googleapis.com/auth/servicecontrol\",\n            \"https://www.googleapis.com/auth/trace.append\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"gke-gke6-ae0d6714-node\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a\"\n    }\n  ],\n  \"kind\": \"compute#instanceList\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instances\"\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/compute-interconnect1.json",
    "content": "{\n  \"adminEnabled\": true,\n  \"circuitInfos\": [\n    {\n      \"customerDemarcId\": \"PEERP:NODEMARC\",\n      \"googleCircuitId\": \"GCP-00111111\",\n      \"googleDemarcId\": \"ABCDEFG\"\n    }\n  ],\n  \"creationTimestamp\": \"2021-01-01T00:00:00-00:00\",\n  \"customerName\": \"Dummy User\",\n  \"description\": \"Dummy Interconnect\",\n  \"expectedOutages\": [\n    {\n      \"description\": \"\",\n      \"endTime\": \"1670443549000\",\n      \"issueType\": \"IT_OUTAGE\",\n      \"name\": \"pcr-639175\",\n      \"source\": \"NSRC_GOOGLE\",\n      \"startTime\": \"1670424949000\",\n      \"state\": \"COMPLETED\"\n    }\n  ],\n  \"googleReferenceId\": \"4774247690472065552\",\n  \"id\": \"4774247690472065552\",\n  \"interconnectAttachments\": [\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment1\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment2\"\n  ],\n  \"interconnectType\": \"IT_PRIVATE\",\n  \"kind\": \"compute#interconnect\",\n  \"linkType\": \"LINK_TYPE_ETHERNET_10G_LR\",\n  \"location\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnectLocations/bos-zone1-219\",\n  \"name\": \"dummy-interconnect1\",\n  \"nocContactEmail\": \"dummy@example.com\",\n  \"operationalStatus\": \"OS_ACTIVE\",\n  \"provisionedLinkCount\": 1,\n  \"requestedLinkCount\": 1,\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect1\",\n  \"state\": \"ACTIVE\"\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/compute-interconnect2.json",
    "content": "{\n  \"adminEnabled\": true,\n  \"circuitInfos\": [\n    {\n      \"customerDemarcId\": \"PEERP:NODEMARC\",\n      \"googleCircuitId\": \"GCP-00111111\",\n      \"googleDemarcId\": \"ABCDEFG\"\n    }\n  ],\n  \"creationTimestamp\": \"2021-01-01T00:00:00-00:00\",\n  \"customerName\": \"Dummy User\",\n  \"description\": \"Dummy Interconnect\",\n  \"expectedOutages\": [\n    {\n      \"description\": \"\",\n      \"endTime\": \"1670443549000\",\n      \"issueType\": \"IT_OUTAGE\",\n      \"name\": \"pcr-639175\",\n      \"source\": \"NSRC_GOOGLE\",\n      \"startTime\": \"1670424949000\",\n      \"state\": \"COMPLETED\"\n    }\n  ],\n  \"googleReferenceId\": \"4774247690472065552\",\n  \"id\": \"4774247690472065552\",\n  \"interconnectAttachments\": [\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment3\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment4\"\n  ],\n  \"interconnectType\": \"IT_PRIVATE\",\n  \"kind\": \"compute#interconnect\",\n  \"linkType\": \"LINK_TYPE_ETHERNET_10G_LR\",\n  \"location\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnectLocations/bos-zone2-219\",\n  \"name\": \"dummy-interconnect2\",\n  \"nocContactEmail\": \"dummy@example.com\",\n  \"operationalStatus\": \"OS_ACTIVE\",\n  \"provisionedLinkCount\": 1,\n  \"requestedLinkCount\": 1,\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect2\",\n  \"state\": \"ACTIVE\"\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/compute-interconnect3.json",
    "content": "{\n  \"adminEnabled\": true,\n  \"circuitInfos\": [\n    {\n      \"customerDemarcId\": \"PEERP:NODEMARC\",\n      \"googleCircuitId\": \"GCP-00111111\",\n      \"googleDemarcId\": \"ABCDEFG\"\n    }\n  ],\n  \"creationTimestamp\": \"2021-01-01T00:00:00-00:00\",\n  \"customerName\": \"Dummy User\",\n  \"description\": \"Dummy Interconnect\",\n  \"expectedOutages\": [\n    {\n      \"description\": \"\",\n      \"endTime\": \"1670443549000\",\n      \"issueType\": \"IT_OUTAGE\",\n      \"name\": \"pcr-639175\",\n      \"source\": \"NSRC_GOOGLE\",\n      \"startTime\": \"1670424949000\",\n      \"state\": \"COMPLETED\"\n    }\n  ],\n  \"googleReferenceId\": \"4774247690472065552\",\n  \"id\": \"4774247690472065552\",\n  \"interconnectAttachments\": [\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment5\"\n  ],\n  \"interconnectType\": \"IT_PRIVATE\",\n  \"kind\": \"compute#interconnect\",\n  \"linkType\": \"LINK_TYPE_ETHERNET_10G_LR\",\n  \"location\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnectLocations/sjc-zone1-6\",\n  \"name\": \"dummy-interconnect3\",\n  \"nocContactEmail\": \"dummy@example.com\",\n  \"operationalStatus\": \"OS_ACTIVE\",\n  \"provisionedLinkCount\": 1,\n  \"requestedLinkCount\": 1,\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect3\",\n  \"state\": \"ACTIVE\"\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/compute-interconnect4.json",
    "content": "{\n  \"adminEnabled\": true,\n  \"circuitInfos\": [\n    {\n      \"customerDemarcId\": \"PEERP:NODEMARC\",\n      \"googleCircuitId\": \"GCP-00111111\",\n      \"googleDemarcId\": \"ABCDEFG\"\n    }\n  ],\n  \"creationTimestamp\": \"2021-01-01T00:00:00-00:00\",\n  \"customerName\": \"Dummy User\",\n  \"description\": \"Dummy Interconnect\",\n  \"expectedOutages\": [\n    {\n      \"description\": \"\",\n      \"endTime\": \"1670443549000\",\n      \"issueType\": \"IT_OUTAGE\",\n      \"name\": \"pcr-639175\",\n      \"source\": \"NSRC_GOOGLE\",\n      \"startTime\": \"1670424949000\",\n      \"state\": \"COMPLETED\"\n    }\n  ],\n  \"googleReferenceId\": \"4774247690472065552\",\n  \"id\": \"4774247690472065552\",\n  \"interconnectAttachments\": [\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6\"\n  ],\n  \"interconnectType\": \"IT_PRIVATE\",\n  \"kind\": \"compute#interconnect\",\n  \"linkType\": \"LINK_TYPE_ETHERNET_10G_LR\",\n  \"location\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnectLocations/sjc-zone2-6\",\n  \"name\": \"dummy-interconnect4\",\n  \"nocContactEmail\": \"dummy@example.com\",\n  \"operationalStatus\": \"OS_ACTIVE\",\n  \"provisionedLinkCount\": 1,\n  \"requestedLinkCount\": 1,\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect4\",\n  \"state\": \"ACTIVE\"\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/compute-interconnects.json",
    "content": "[\n  {\n    \"adminEnabled\": true,\n    \"circuitInfos\": [\n      {\n        \"customerDemarcId\": \"PEERP:NODEMARC\",\n        \"googleCircuitId\": \"GCP-00111111\",\n        \"googleDemarcId\": \"ABCDEFG\"\n      }\n    ],\n    \"creationTimestamp\": \"2021-01-01T00:00:00-00:00\",\n    \"customerName\": \"Dummy User\",\n    \"description\": \"Dummy Interconnect\",\n    \"expectedOutages\": [\n      {\n        \"description\": \"\",\n        \"endTime\": \"1670443549000\",\n        \"issueType\": \"IT_OUTAGE\",\n        \"name\": \"pcr-639175\",\n        \"source\": \"NSRC_GOOGLE\",\n        \"startTime\": \"1670424949000\",\n        \"state\": \"COMPLETED\"\n      }\n    ],\n    \"googleReferenceId\": \"4774247690472065552\",\n    \"id\": \"4774247690472065552\",\n    \"interconnectAttachments\": [\n      \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment1\",\n      \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment2\"\n    ],\n    \"interconnectType\": \"IT_PRIVATE\",\n    \"kind\": \"compute#interconnect\",\n    \"linkType\": \"LINK_TYPE_ETHERNET_10G_LR\",\n    \"location\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnectLocations/bos-zone1-219\",\n    \"name\": \"dummy-interconnect1\",\n    \"nocContactEmail\": \"dummy@example.com\",\n    \"operationalStatus\": \"OS_ACTIVE\",\n    \"provisionedLinkCount\": 1,\n    \"requestedLinkCount\": 1,\n    \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect1\",\n    \"state\": \"ACTIVE\"\n  },\n  {\n    \"adminEnabled\": true,\n    \"circuitInfos\": [\n      {\n        \"customerDemarcId\": \"PEERP:NODEMARC\",\n        \"googleCircuitId\": \"GCP-00111111\",\n        \"googleDemarcId\": \"ABCDEFG\"\n      }\n    ],\n    \"creationTimestamp\": \"2021-01-01T00:00:00-00:00\",\n    \"customerName\": \"Dummy User\",\n    \"description\": \"Dummy Interconnect\",\n    \"expectedOutages\": [\n      {\n        \"description\": \"\",\n        \"endTime\": \"1670443549000\",\n        \"issueType\": \"IT_OUTAGE\",\n        \"name\": \"pcr-639175\",\n        \"source\": \"NSRC_GOOGLE\",\n        \"startTime\": \"1670424949000\",\n        \"state\": \"COMPLETED\"\n      }\n    ],\n    \"googleReferenceId\": \"4774247690472065552\",\n    \"id\": \"4774247690472065552\",\n    \"interconnectAttachments\": [\n      \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment3\",\n      \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment4\"\n    ],\n    \"interconnectType\": \"IT_PRIVATE\",\n    \"kind\": \"compute#interconnect\",\n    \"linkType\": \"LINK_TYPE_ETHERNET_10G_LR\",\n    \"location\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnectLocations/bos-zone2-219\",\n    \"name\": \"dummy-interconnect2\",\n    \"nocContactEmail\": \"dummy@example.com\",\n    \"operationalStatus\": \"OS_ACTIVE\",\n    \"provisionedLinkCount\": 1,\n    \"requestedLinkCount\": 1,\n    \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect2\",\n    \"state\": \"ACTIVE\"\n  },\n  {\n    \"adminEnabled\": true,\n    \"circuitInfos\": [\n      {\n        \"customerDemarcId\": \"PEERP:NODEMARC\",\n        \"googleCircuitId\": \"GCP-00111111\",\n        \"googleDemarcId\": \"ABCDEFG\"\n      }\n    ],\n    \"creationTimestamp\": \"2021-01-01T00:00:00-00:00\",\n    \"customerName\": \"Dummy User\",\n    \"description\": \"Dummy Interconnect\",\n    \"expectedOutages\": [\n      {\n        \"description\": \"\",\n        \"endTime\": \"1670443549000\",\n        \"issueType\": \"IT_OUTAGE\",\n        \"name\": \"pcr-639175\",\n        \"source\": \"NSRC_GOOGLE\",\n        \"startTime\": \"1670424949000\",\n        \"state\": \"COMPLETED\"\n      }\n    ],\n    \"googleReferenceId\": \"4774247690472065552\",\n    \"id\": \"4774247690472065552\",\n    \"interconnectAttachments\": [\n      \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment5\"\n    ],\n    \"interconnectType\": \"IT_PRIVATE\",\n    \"kind\": \"compute#interconnect\",\n    \"linkType\": \"LINK_TYPE_ETHERNET_10G_LR\",\n    \"location\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnectLocations/sjc-zone1-6\",\n    \"name\": \"dummy-interconnect3\",\n    \"nocContactEmail\": \"dummy@example.com\",\n    \"operationalStatus\": \"OS_ACTIVE\",\n    \"provisionedLinkCount\": 1,\n    \"requestedLinkCount\": 1,\n    \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect3\",\n    \"state\": \"ACTIVE\"\n  },\n  {\n    \"adminEnabled\": true,\n    \"circuitInfos\": [\n      {\n        \"customerDemarcId\": \"PEERP:NODEMARC\",\n        \"googleCircuitId\": \"GCP-00111111\",\n        \"googleDemarcId\": \"ABCDEFG\"\n      }\n    ],\n    \"creationTimestamp\": \"2021-01-01T00:00:00-00:00\",\n    \"customerName\": \"Dummy User\",\n    \"description\": \"Dummy Interconnect\",\n    \"expectedOutages\": [\n      {\n        \"description\": \"\",\n        \"endTime\": \"1670443549000\",\n        \"issueType\": \"IT_OUTAGE\",\n        \"name\": \"pcr-639175\",\n        \"source\": \"NSRC_GOOGLE\",\n        \"startTime\": \"1670424949000\",\n        \"state\": \"COMPLETED\"\n      }\n    ],\n    \"googleReferenceId\": \"4774247690472065552\",\n    \"id\": \"4774247690472065552\",\n    \"interconnectAttachments\": [\n      \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6\"\n    ],\n    \"interconnectType\": \"IT_PRIVATE\",\n    \"kind\": \"compute#interconnect\",\n    \"linkType\": \"LINK_TYPE_ETHERNET_10G_LR\",\n    \"location\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnectLocations/sjc-zone2-6\",\n    \"name\": \"dummy-interconnect4\",\n    \"nocContactEmail\": \"dummy@example.com\",\n    \"operationalStatus\": \"OS_ACTIVE\",\n    \"provisionedLinkCount\": 1,\n    \"requestedLinkCount\": 1,\n    \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect4\",\n    \"state\": \"ACTIVE\"\n  },\n  {\n    \"adminEnabled\": true,\n    \"circuitInfos\": [\n      {\n        \"customerDemarcId\": \"PEERP:NODEMARC\",\n        \"googleCircuitId\": \"GCP-00111111\",\n        \"googleDemarcId\": \"ABCDEFG\"\n      }\n    ],\n    \"creationTimestamp\": \"2021-01-01T00:00:00-00:00\",\n    \"customerName\": \"Dummy User\",\n    \"description\": \"Dummy Interconnect\",\n    \"expectedOutages\": [\n      {\n        \"description\": \"\",\n        \"endTime\": \"1670443549000\",\n        \"issueType\": \"IT_OUTAGE\",\n        \"name\": \"pcr-639175\",\n        \"source\": \"NSRC_GOOGLE\",\n        \"startTime\": \"1670424949000\",\n        \"state\": \"COMPLETED\"\n      }\n    ],\n    \"googleReferenceId\": \"4774247690472065552\",\n    \"id\": \"4774247690472065552\",\n    \"interconnectAttachments\": [\n      \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6\"\n    ],\n    \"interconnectType\": \"IT_PRIVATE\",\n    \"kind\": \"compute#interconnect\",\n    \"linkType\": \"LINK_TYPE_ETHERNET_10G_LR\",\n    \"location\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnectLocations/sjc-zone2-6\",\n    \"name\": \"dummy-interconnect4\",\n    \"nocContactEmail\": \"dummy@example.com\",\n    \"operationalStatus\": \"OS_ACTIVE\",\n    \"provisionedLinkCount\": 1,\n    \"requestedLinkCount\": 1,\n    \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect4\",\n    \"state\": \"ACTIVE\"\n  },\n  {\n    \"adminEnabled\": true,\n    \"circuitInfos\": [\n      {\n        \"customerDemarcId\": \"PEERP:NODEMARC\",\n        \"googleCircuitId\": \"GCP-00111111\",\n        \"googleDemarcId\": \"ABCDEFG\"\n      }\n    ],\n    \"creationTimestamp\": \"2021-01-01T00:00:00-00:00\",\n    \"customerName\": \"Dummy User\",\n    \"description\": \"Dummy Interconnect\",\n    \"expectedOutages\": [\n      {\n        \"description\": \"\",\n        \"endTime\": \"1670443549000\",\n        \"issueType\": \"IT_OUTAGE\",\n        \"name\": \"pcr-639175\",\n        \"source\": \"NSRC_GOOGLE\",\n        \"startTime\": \"1670424949000\",\n        \"state\": \"COMPLETED\"\n      }\n    ],\n    \"googleReferenceId\": \"4774247690472065552\",\n    \"id\": \"4774247690472065552\",\n    \"interconnectAttachments\": [\n      \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6\"\n    ],\n    \"interconnectType\": \"IT_PRIVATE\",\n    \"kind\": \"compute#interconnect\",\n    \"linkType\": \"LINK_TYPE_ETHERNET_10G_LR\",\n    \"location\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnectLocations/sjc-zone2-6\",\n    \"name\": \"dummy-interconnect5\",\n    \"nocContactEmail\": \"dummy@example.com\",\n    \"operationalStatus\": \"OS_ACTIVE\",\n    \"provisionedLinkCount\": 1,\n    \"requestedLinkCount\": 1,\n    \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect4\",\n    \"state\": \"UNDER_MAINTENANCE\"\n  }\n\n]\n"
  },
  {
    "path": "test-data/gke1/json-dumps/compute-migs-aggregated.json",
    "content": "{\n  \"kind\": \"compute#instanceGroupManagerAggregatedList\",\n  \"id\": \"projects/gcpdiag-gke1-aaaa/aggregated/instanceGroupManagers\",\n  \"items\": {\n    \"regions/us-central1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/us-central1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-central1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-central2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/us-central2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-central2\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/europe-west1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-west1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/us-west1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west1\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-east1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/asia-east1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-east1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-east1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/us-east1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-east1\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-northeast1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/asia-northeast1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-northeast1\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-southeast1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/asia-southeast1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-southeast1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-east4\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/us-east4'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-east4\"\n          }\n        ]\n      }\n    },\n    \"regions/australia-southeast1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/australia-southeast1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/australia-southeast1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/europe-west2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west2\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west3\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/europe-west3'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west3\"\n          }\n        ]\n      }\n    },\n    \"regions/southamerica-east1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/southamerica-east1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/southamerica-east1\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-south1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/asia-south1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-south1\"\n          }\n        ]\n      }\n    },\n    \"regions/northamerica-northeast1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/northamerica-northeast1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/northamerica-northeast1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west4\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/europe-west4'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west4\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-north1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/europe-north1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-north1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-west2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/us-west2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west2\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-east2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/asia-east2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-east2\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west6\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/europe-west6'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west6\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-northeast2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/asia-northeast2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-northeast2\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-northeast3\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/asia-northeast3'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-northeast3\"\n          }\n        ]\n      }\n    },\n    \"regions/us-west3\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/us-west3'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west3\"\n          }\n        ]\n      }\n    },\n    \"regions/us-west4\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/us-west4'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west4\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-southeast2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/asia-southeast2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-southeast2\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-central2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/europe-central2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-central2\"\n          }\n        ]\n      }\n    },\n    \"regions/northamerica-northeast2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/northamerica-northeast2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/northamerica-northeast2\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-south2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/asia-south2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-south2\"\n          }\n        ]\n      }\n    },\n    \"regions/australia-southeast2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/australia-southeast2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/australia-southeast2\"\n          }\n        ]\n      }\n    },\n    \"regions/southamerica-west1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/southamerica-west1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/southamerica-west1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-east7\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/us-east7'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-east7\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west8\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/europe-west8'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west8\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west9\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/europe-west9'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west9\"\n          }\n        ]\n      }\n    },\n    \"regions/us-east5\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/us-east5'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-east5\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-southwest1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/europe-southwest1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-southwest1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-south1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/us-south1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-south1\"\n          }\n        ]\n      }\n    },\n    \"regions/me-west1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/me-west1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/me-west1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west12\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/europe-west12'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west12\"\n          }\n        ]\n      }\n    },\n    \"regions/me-central1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/me-central1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/me-central1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west10\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/europe-west10'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west10\"\n          }\n        ]\n      }\n    },\n    \"regions/me-central2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/me-central2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/me-central2\"\n          }\n        ]\n      }\n    },\n    \"regions/africa-south1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/africa-south1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/africa-south1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-west8\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/us-west8'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west8\"\n          }\n        ]\n      }\n    },\n    \"regions/northamerica-south1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/northamerica-south1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/northamerica-south1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-north2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/europe-north2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-north2\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-central1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-central1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-central1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central1-f\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-central1-f'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central1-f\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-central2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-central2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-central2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central2-d\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-central2-d'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central2-d\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west1-d\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west1-d'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west1-d\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-west1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-west1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-west1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-east1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-east1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-east1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-east1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-east1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east1-d\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-east1-d'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east1-d\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-northeast1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-northeast1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-northeast1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-southeast1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-southeast1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-southeast1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east4-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-east4-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east4-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east4-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-east4-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east4-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east4-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-east4-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east4-c\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/australia-southeast1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/australia-southeast1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/australia-southeast1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west3-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west3-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west3-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west3-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west3-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west3-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west3-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west3-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west3-b\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-east1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/southamerica-east1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-east1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-east1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/southamerica-east1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-east1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-east1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/southamerica-east1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-east1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-south1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-south1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-south1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/northamerica-northeast1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/northamerica-northeast1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/northamerica-northeast1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west4-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west4-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west4-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west4-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west4-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west4-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west4-a\": {\n      \"instanceGroupManagers\": [\n        {\n          \"kind\": \"compute#instanceGroupManager\",\n          \"id\": \"8122805250387700905\",\n          \"creationTimestamp\": \"2025-02-06T07:16:22.950-08:00\",\n          \"name\": \"gke-gke1-default-pool-671518f6-grp\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a\",\n          \"instanceTemplate\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/instanceTemplates/gke-gke1-default-pool-671518f6\",\n          \"versions\": [\n            {\n              \"instanceTemplate\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/instanceTemplates/gke-gke1-default-pool-671518f6\",\n              \"targetSize\": {\n                \"calculated\": 1\n              }\n            }\n          ],\n          \"instanceGroup\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroups/gke-gke1-default-pool-671518f6-grp\",\n          \"baseInstanceName\": \"gke-gke1-default-pool-671518f6\",\n          \"fingerprint\": \"1CgCkMYBqiQ=\",\n          \"currentActions\": {\n            \"none\": 1,\n            \"creating\": 0,\n            \"creatingWithoutRetries\": 0,\n            \"verifying\": 0,\n            \"recreating\": 0,\n            \"deleting\": 0,\n            \"abandoning\": 0,\n            \"restarting\": 0,\n            \"refreshing\": 0,\n            \"suspending\": 0,\n            \"resuming\": 0,\n            \"stopping\": 0,\n            \"starting\": 0\n          },\n          \"status\": {\n            \"isStable\": true,\n            \"allInstancesConfig\": {\n              \"effective\": true\n            },\n            \"versionTarget\": {\n              \"isReached\": true\n            },\n            \"stateful\": {\n              \"hasStatefulConfig\": false,\n              \"perInstanceConfigs\": {\n                \"allEffective\": true\n              }\n            }\n          },\n          \"targetSize\": 1,\n          \"targetStoppedSize\": 0,\n          \"targetSuspendedSize\": 0,\n          \"listManagedInstancesResults\": \"PAGINATED\",\n          \"standbyPolicy\": {\n            \"mode\": \"MANUAL\"\n          },\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-671518f6-grp\",\n          \"updatePolicy\": {\n            \"type\": \"OPPORTUNISTIC\",\n            \"minimalAction\": \"REPLACE\",\n            \"maxSurge\": {\n              \"fixed\": 1,\n              \"calculated\": 1\n            },\n            \"maxUnavailable\": {\n              \"fixed\": 1,\n              \"calculated\": 1\n            },\n            \"replacementMethod\": \"SUBSTITUTE\"\n          },\n          \"instanceLifecyclePolicy\": {\n            \"forceUpdateOnRepair\": \"YES\",\n            \"defaultActionOnFailure\": \"REPAIR\"\n          },\n          \"satisfiesPzi\": true,\n          \"satisfiesPzs\": true\n        },\n        {\n          \"kind\": \"compute#instanceGroupManager\",\n          \"id\": \"8396330882583945539\",\n          \"creationTimestamp\": \"2025-02-05T04:55:08.081-08:00\",\n          \"name\": \"mig\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a\",\n          \"instanceTemplate\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/instanceTemplates/mig-template\",\n          \"versions\": [\n            {\n              \"instanceTemplate\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/instanceTemplates/mig-template\",\n              \"targetSize\": {\n                \"calculated\": 2\n              }\n            }\n          ],\n          \"instanceGroup\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroups/mig\",\n          \"baseInstanceName\": \"mig\",\n          \"fingerprint\": \"d0207oZUlXA=\",\n          \"currentActions\": {\n            \"none\": 2,\n            \"creating\": 0,\n            \"creatingWithoutRetries\": 0,\n            \"verifying\": 0,\n            \"recreating\": 0,\n            \"deleting\": 0,\n            \"abandoning\": 0,\n            \"restarting\": 0,\n            \"refreshing\": 0,\n            \"suspending\": 0,\n            \"resuming\": 0,\n            \"stopping\": 0,\n            \"starting\": 0\n          },\n          \"status\": {\n            \"isStable\": true,\n            \"allInstancesConfig\": {\n              \"effective\": true\n            },\n            \"versionTarget\": {\n              \"isReached\": true\n            },\n            \"stateful\": {\n              \"hasStatefulConfig\": false,\n              \"perInstanceConfigs\": {\n                \"allEffective\": true\n              }\n            }\n          },\n          \"targetSize\": 2,\n          \"targetStoppedSize\": 0,\n          \"targetSuspendedSize\": 0,\n          \"listManagedInstancesResults\": \"PAGELESS\",\n          \"standbyPolicy\": {\n            \"mode\": \"MANUAL\"\n          },\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/mig\",\n          \"updatePolicy\": {\n            \"type\": \"OPPORTUNISTIC\",\n            \"minimalAction\": \"REPLACE\",\n            \"maxSurge\": {\n              \"fixed\": 1,\n              \"calculated\": 1\n            },\n            \"maxUnavailable\": {\n              \"fixed\": 1,\n              \"calculated\": 1\n            },\n            \"replacementMethod\": \"SUBSTITUTE\"\n          },\n          \"instanceLifecyclePolicy\": {\n            \"forceUpdateOnRepair\": \"NO\",\n            \"defaultActionOnFailure\": \"REPAIR\"\n          },\n          \"satisfiesPzi\": true,\n          \"satisfiesPzs\": true\n        },\n        {\n          \"kind\": \"compute#instanceGroupManager\",\n          \"id\": \"8396330882583945500\",\n          \"creationTimestamp\": \"2025-02-05T04:55:08.081-08:00\",\n          \"name\": \"gke-gke4-default-pool-4c934268-grp\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a\",\n          \"instanceTemplate\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/instanceTemplates/gke-gke4-default-pool-4c934268\",\n          \"versions\": [\n            {\n              \"instanceTemplate\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/instanceTemplates/gke-gke4-default-pool-4c934268\",\n              \"targetSize\": {\n                \"calculated\": 2\n              }\n            }\n          ],\n          \"instanceGroup\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroups/gke-gke4-default-pool-4c934268-grp\",\n          \"baseInstanceName\": \"gke-gke4-default-pool-4c934268\",\n          \"fingerprint\": \"d0207oZUlXA=\",\n          \"currentActions\": {\n            \"none\": 2,\n            \"creating\": 0,\n            \"creatingWithoutRetries\": 0,\n            \"verifying\": 0,\n            \"recreating\": 0,\n            \"deleting\": 0,\n            \"abandoning\": 0,\n            \"restarting\": 0,\n            \"refreshing\": 0,\n            \"suspending\": 0,\n            \"resuming\": 0,\n            \"stopping\": 0,\n            \"starting\": 0\n          },\n          \"status\": {\n            \"isStable\": true,\n            \"allInstancesConfig\": {\n              \"effective\": true\n            },\n            \"versionTarget\": {\n              \"isReached\": true\n            },\n            \"stateful\": {\n              \"hasStatefulConfig\": false,\n              \"perInstanceConfigs\": {\n                \"allEffective\": true\n              }\n            }\n          },\n          \"targetSize\": 2,\n          \"targetStoppedSize\": 0,\n          \"targetSuspendedSize\": 0,\n          \"listManagedInstancesResults\": \"PAGELESS\",\n          \"standbyPolicy\": {\n            \"mode\": \"MANUAL\"\n          },\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke4-default-pool-4c934268-grp\",\n          \"updatePolicy\": {\n            \"type\": \"OPPORTUNISTIC\",\n            \"minimalAction\": \"REPLACE\",\n            \"maxSurge\": {\n              \"fixed\": 1,\n              \"calculated\": 1\n            },\n            \"maxUnavailable\": {\n              \"fixed\": 1,\n              \"calculated\": 1\n            },\n            \"replacementMethod\": \"SUBSTITUTE\"\n          },\n          \"instanceLifecyclePolicy\": {\n            \"forceUpdateOnRepair\": \"NO\",\n            \"defaultActionOnFailure\": \"REPAIR\"\n          },\n          \"satisfiesPzi\": true,\n          \"satisfiesPzs\": true\n        }\n      ]\n    },\n    \"zones/europe-north1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-north1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-north1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-north1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-west2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-west2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-west2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-east2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-east2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-east2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west6-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west6-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west6-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west6-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west6-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west6-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west6-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west6-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west6-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-northeast2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-northeast2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-northeast2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast3-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-northeast3-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast3-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast3-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-northeast3-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast3-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast3-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-northeast3-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast3-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west3-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-west3-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west3-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west3-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-west3-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west3-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west3-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-west3-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west3-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west4-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-west4-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west4-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west4-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-west4-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west4-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west4-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-west4-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west4-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-southeast2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-southeast2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-southeast2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-central2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-central2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-central2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-central2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-central2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-central2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-central2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-central2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-central2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/northamerica-northeast2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/northamerica-northeast2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/northamerica-northeast2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-south2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-south2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-south2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/australia-southeast2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/australia-southeast2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/australia-southeast2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-west1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/southamerica-west1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-west1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-west1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/southamerica-west1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-west1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-west1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/southamerica-west1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-west1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east7-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-east7-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east7-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east7-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-east7-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east7-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east7-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-east7-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east7-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west8-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west8-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west8-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west8-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west8-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west8-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west8-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west8-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west8-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west9-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west9-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west9-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west9-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west9-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west9-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west9-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west9-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west9-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east5-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-east5-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east5-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east5-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-east5-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east5-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east5-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-east5-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east5-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-southwest1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-southwest1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-southwest1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-southwest1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-southwest1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-southwest1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-southwest1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-southwest1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-southwest1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-south1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-south1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-south1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-south1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-south1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-south1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-south1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-south1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-south1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-west1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/me-west1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-west1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-west1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/me-west1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-west1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/me-west1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/me-west1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-west1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west12-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west12-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west12-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west12-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west12-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west12-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west12-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west12-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west12-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/me-central1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/me-central1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/me-central1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west10-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west10-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west10-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west10-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west10-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west10-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west10-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west10-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west10-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/me-central2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/me-central2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/me-central2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/africa-south1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/africa-south1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/africa-south1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/africa-south1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/africa-south1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/africa-south1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/africa-south1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/africa-south1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/africa-south1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west8-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-west8-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west8-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west8-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-west8-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west8-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west8-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-west8-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west8-b\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-south1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/northamerica-south1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-south1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-south1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/northamerica-south1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-south1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-south1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/northamerica-south1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-south1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-north2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-north2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-north2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north2-b\"\n          }\n        ]\n      }\n    }\n  },\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/aggregated/instanceGroupManagers\"\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/compute-migs-empty.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gke1-aaaa/zones/europe-west1-b/instanceGroupManagers\",\n  \"kind\": \"compute#instanceGroupManagerList\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west1-b/instanceGroupManagers\"\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/compute-migs-europe-west4-a.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers\",\n  \"items\": [\n    {\n      \"kind\": \"compute#instanceGroupManager\",\n      \"id\": \"5811787561528926004\",\n      \"creationTimestamp\": \"2023-05-09T12:41:15.699-07:00\",\n      \"name\": \"gke-gke1-default-pool-671518f6-grp\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a\",\n      \"instanceTemplate\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/instanceTemplates/gke-gke1-default-pool-671518f6\",\n      \"versions\": [\n        {\n          \"instanceTemplate\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/instanceTemplates/gke-gke1-default-pool-671518f6\",\n          \"targetSize\": {\n            \"calculated\": 1\n          }\n        }\n      ],\n      \"instanceGroup\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroups/gke-gke1-default-pool-671518f6-grp\",\n      \"baseInstanceName\": \"gke-gke1-default-pool-671518f6\",\n      \"fingerprint\": \"nKHmN1fIGTM=\",\n      \"currentActions\": {\n        \"none\": 1,\n        \"creating\": 0,\n        \"creatingWithoutRetries\": 0,\n        \"verifying\": 0,\n        \"recreating\": 0,\n        \"deleting\": 0,\n        \"abandoning\": 0,\n        \"restarting\": 0,\n        \"refreshing\": 0,\n        \"suspending\": 0,\n        \"resuming\": 0,\n        \"stopping\": 0,\n        \"starting\": 0\n      },\n      \"status\": {\n        \"isStable\": true,\n        \"versionTarget\": {\n          \"isReached\": true\n        },\n        \"stateful\": {\n          \"hasStatefulConfig\": false,\n          \"perInstanceConfigs\": {\n            \"allEffective\": true\n          }\n        }\n      },\n      \"targetSize\": 1,\n      \"listManagedInstancesResults\": \"PAGELESS\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-671518f6-grp\",\n      \"updatePolicy\": {\n        \"type\": \"OPPORTUNISTIC\",\n        \"minimalAction\": \"REPLACE\",\n        \"maxSurge\": {\n          \"fixed\": 1,\n          \"calculated\": 1\n        },\n        \"maxUnavailable\": {\n          \"fixed\": 1,\n          \"calculated\": 1\n        },\n        \"replacementMethod\": \"SUBSTITUTE\"\n      }\n    },\n    {\n      \"kind\": \"compute#instanceGroupManager\",\n      \"id\": \"772940322250560176\",\n      \"creationTimestamp\": \"2022-08-19T08:29:36.070-07:00\",\n      \"name\": \"gke-gke2-default-pool-dabb2ff4-grp\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a\",\n      \"instanceTemplate\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/instanceTemplates/gke-gke2-default-pool-913244b5\",\n      \"versions\": [\n        {\n          \"instanceTemplate\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/instanceTemplates/gke-gke2-default-pool-913244b5\",\n          \"targetSize\": {\n            \"calculated\": 1\n          }\n        }\n      ],\n      \"instanceGroup\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroups/gke-gke2-default-pool-dabb2ff4-grp\",\n      \"baseInstanceName\": \"gke-gke2-default-pool-dabb2ff4\",\n      \"fingerprint\": \"CYbKDiBjjD4=\",\n      \"currentActions\": {\n        \"none\": 1,\n        \"creating\": 0,\n        \"creatingWithoutRetries\": 0,\n        \"verifying\": 0,\n        \"recreating\": 0,\n        \"deleting\": 0,\n        \"abandoning\": 0,\n        \"restarting\": 0,\n        \"refreshing\": 0,\n        \"suspending\": 0,\n        \"resuming\": 0,\n        \"stopping\": 0,\n        \"starting\": 0\n      },\n      \"status\": {\n        \"isStable\": true,\n        \"versionTarget\": {\n          \"isReached\": true\n        },\n        \"stateful\": {\n          \"hasStatefulConfig\": false,\n          \"perInstanceConfigs\": {\n            \"allEffective\": true\n          }\n        }\n      },\n      \"targetSize\": 1,\n      \"listManagedInstancesResults\": \"PAGELESS\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke2-default-pool-dabb2ff4-grp\",\n      \"updatePolicy\": {\n        \"type\": \"OPPORTUNISTIC\",\n        \"minimalAction\": \"REPLACE\",\n        \"maxSurge\": {\n          \"fixed\": 1,\n          \"calculated\": 1\n        },\n        \"maxUnavailable\": {\n          \"fixed\": 1,\n          \"calculated\": 1\n        },\n        \"replacementMethod\": \"SUBSTITUTE\"\n      }\n    },\n    {\n      \"kind\": \"compute#instanceGroupManager\",\n      \"id\": \"2694980432485980228\",\n      \"creationTimestamp\": \"2023-05-08T09:43:23.174-07:00\",\n      \"name\": \"gke-gke3-default-pool-bf4b1ef1-grp\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a\",\n      \"instanceTemplate\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/instanceTemplates/gke-gke3-default-pool-bf4b1ef1\",\n      \"versions\": [\n        {\n          \"instanceTemplate\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/instanceTemplates/gke-gke3-default-pool-bf4b1ef1\",\n          \"targetSize\": {\n            \"calculated\": 5\n          }\n        }\n      ],\n      \"instanceGroup\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroups/gke-gke3-default-pool-bf4b1ef1-grp\",\n      \"baseInstanceName\": \"gke-gke3-default-pool-bf4b1ef1\",\n      \"fingerprint\": \"z-Jjdtcpm70=\",\n      \"currentActions\": {\n        \"none\": 5,\n        \"creating\": 0,\n        \"creatingWithoutRetries\": 0,\n        \"verifying\": 0,\n        \"recreating\": 0,\n        \"deleting\": 0,\n        \"abandoning\": 0,\n        \"restarting\": 0,\n        \"refreshing\": 0,\n        \"suspending\": 0,\n        \"resuming\": 0,\n        \"stopping\": 0,\n        \"starting\": 0\n      },\n      \"status\": {\n        \"isStable\": true,\n        \"versionTarget\": {\n          \"isReached\": true\n        },\n        \"stateful\": {\n          \"hasStatefulConfig\": false,\n          \"perInstanceConfigs\": {\n            \"allEffective\": true\n          }\n        }\n      },\n      \"targetSize\": 5,\n      \"listManagedInstancesResults\": \"PAGELESS\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke3-default-pool-bf4b1ef1-grp\",\n      \"updatePolicy\": {\n        \"type\": \"OPPORTUNISTIC\",\n        \"minimalAction\": \"REPLACE\",\n        \"maxSurge\": {\n          \"fixed\": 1,\n          \"calculated\": 1\n        },\n        \"maxUnavailable\": {\n          \"fixed\": 1,\n          \"calculated\": 1\n        },\n        \"replacementMethod\": \"SUBSTITUTE\"\n      }\n    },\n    {\n      \"kind\": \"compute#instanceGroupManager\",\n      \"id\": \"7086373352076612579\",\n      \"creationTimestamp\": \"2022-08-19T08:32:28.378-07:00\",\n      \"name\": \"gke-gke4-default-pool-4c934268-grp\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a\",\n      \"instanceTemplate\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/instanceTemplates/gke-gke4-default-pool-bcb6be97\",\n      \"versions\": [\n        {\n          \"instanceTemplate\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/instanceTemplates/gke-gke4-default-pool-bcb6be97\",\n          \"targetSize\": {\n            \"calculated\": 1\n          }\n        }\n      ],\n      \"instanceGroup\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroups/gke-gke4-default-pool-4c934268-grp\",\n      \"baseInstanceName\": \"gke-gke4-default-pool-4c934268\",\n      \"fingerprint\": \"m475O9ssRrI=\",\n      \"currentActions\": {\n        \"none\": 1,\n        \"creating\": 0,\n        \"creatingWithoutRetries\": 0,\n        \"verifying\": 0,\n        \"recreating\": 0,\n        \"deleting\": 0,\n        \"abandoning\": 0,\n        \"restarting\": 0,\n        \"refreshing\": 0,\n        \"suspending\": 0,\n        \"resuming\": 0,\n        \"stopping\": 0,\n        \"starting\": 0\n      },\n      \"status\": {\n        \"isStable\": true,\n        \"versionTarget\": {\n          \"isReached\": true\n        },\n        \"stateful\": {\n          \"hasStatefulConfig\": false,\n          \"perInstanceConfigs\": {\n            \"allEffective\": true\n          }\n        }\n      },\n      \"targetSize\": 1,\n      \"listManagedInstancesResults\": \"PAGELESS\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke4-default-pool-4c934268-grp\",\n      \"updatePolicy\": {\n        \"type\": \"OPPORTUNISTIC\",\n        \"minimalAction\": \"REPLACE\",\n        \"maxSurge\": {\n          \"fixed\": 1,\n          \"calculated\": 1\n        },\n        \"maxUnavailable\": {\n          \"fixed\": 1,\n          \"calculated\": 1\n        },\n        \"replacementMethod\": \"SUBSTITUTE\"\n      }\n    },\n    {\n      \"kind\": \"compute#instanceGroupManager\",\n      \"id\": \"2397452774988358258\",\n      \"creationTimestamp\": \"2023-05-08T09:00:29.110-07:00\",\n      \"name\": \"gke-gke6-default-pool-d8412db4-grp\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a\",\n      \"instanceTemplate\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/instanceTemplates/gke-gke6-default-pool-d8412db4\",\n      \"versions\": [\n        {\n          \"instanceTemplate\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/instanceTemplates/gke-gke6-default-pool-d8412db4\",\n          \"targetSize\": {\n            \"calculated\": 1\n          }\n        }\n      ],\n      \"instanceGroup\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroups/gke-gke6-default-pool-d8412db4-grp\",\n      \"baseInstanceName\": \"gke-gke6-default-pool-d8412db4\",\n      \"fingerprint\": \"NlFeJvFiNII=\",\n      \"currentActions\": {\n        \"none\": 1,\n        \"creating\": 0,\n        \"creatingWithoutRetries\": 0,\n        \"verifying\": 0,\n        \"recreating\": 0,\n        \"deleting\": 0,\n        \"abandoning\": 0,\n        \"restarting\": 0,\n        \"refreshing\": 0,\n        \"suspending\": 0,\n        \"resuming\": 0,\n        \"stopping\": 0,\n        \"starting\": 0\n      },\n      \"status\": {\n        \"isStable\": true,\n        \"versionTarget\": {\n          \"isReached\": true\n        },\n        \"stateful\": {\n          \"hasStatefulConfig\": false,\n          \"perInstanceConfigs\": {\n            \"allEffective\": true\n          }\n        }\n      },\n      \"targetSize\": 1,\n      \"listManagedInstancesResults\": \"PAGELESS\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke6-default-pool-d8412db4-grp\",\n      \"updatePolicy\": {\n        \"type\": \"OPPORTUNISTIC\",\n        \"minimalAction\": \"REPLACE\",\n        \"maxSurge\": {\n          \"fixed\": 1,\n          \"calculated\": 1\n        },\n        \"maxUnavailable\": {\n          \"fixed\": 1,\n          \"calculated\": 1\n        },\n        \"replacementMethod\": \"SUBSTITUTE\"\n      }\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers\",\n  \"kind\": \"compute#instanceGroupManagerList\"\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/compute-network-default.json",
    "content": "{\n  \"kind\": \"compute#network\",\n  \"id\": \"7246553118008778977\",\n  \"creationTimestamp\": \"2022-03-30T02:08:30.014-07:00\",\n  \"name\": \"default\",\n  \"description\": \"Default network for the project\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n  \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/7246553118008778977\",\n  \"autoCreateSubnetworks\": true,\n  \"mtu\": 1460,\n  \"subnetworks\": [\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/gke1-subnet\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-east1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west4/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west6/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-south2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-southeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/northamerica-northeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-east2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-southeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-south1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west3/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/australia-southeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/australia-southeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast3/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-north1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/southamerica-east1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/northamerica-northeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west3/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-central1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/southamerica-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-central2/subnetworks/default\"\n  ],\n  \"peerings\": [\n    {\n      \"name\": \"gke-ne6f5d919f4c34558948-1e4e-2883-peer\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gke-prod-europe-west4-a-55a0/global/networks/gke-ne6f5d919f4c34558948-1e4e-e59b-net\",\n      \"state\": \"ACTIVE\",\n      \"stateDetails\": \"[2022-03-30T02:11:12.613-07:00]: Connected.\",\n      \"autoCreateRoutes\": true,\n      \"exportCustomRoutes\": false,\n      \"importCustomRoutes\": false,\n      \"exchangeSubnetRoutes\": true,\n      \"exportSubnetRoutesWithPublicIp\": true,\n      \"importSubnetRoutesWithPublicIp\": false\n    },\n    {\n      \"name\": \"gke-ne6f5d919f4c34558948-e4c5-1a39-peer\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gke-prod-europe-west4-559c/global/networks/gke-ne6f5d919f4c34558948-e4c5-32e2-net\",\n      \"state\": \"ACTIVE\",\n      \"stateDetails\": \"[2022-03-30T02:12:15.512-07:00]: Connected.\",\n      \"autoCreateRoutes\": true,\n      \"exportCustomRoutes\": false,\n      \"importCustomRoutes\": false,\n      \"exchangeSubnetRoutes\": true,\n      \"exportSubnetRoutesWithPublicIp\": true,\n      \"importSubnetRoutesWithPublicIp\": false\n    }\n  ],\n  \"routingConfig\": {\n    \"routingMode\": \"REGIONAL\"\n  },\n  \"networkFirewallPolicyEnforcementOrder\": \"AFTER_CLASSIC_FIREWALL\"\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/compute-project.json",
    "content": "{\n  \"commonInstanceMetadata\": {\n    \"fingerprint\": \"Tz3suBrdUu4=\",\n    \"items\": [\n      {\n        \"key\": \"gke-gke4-93befb7e-secondary-ranges\",\n        \"value\": \"services:default:default:gke-gke4-services-93befb7e,pods:default:default:gke-gke4-pods-93befb7e\"\n      },\n      {\n        \"key\": \"gke-gke2-7cf59b1c-cidr\",\n        \"value\": \"default:10.4.0.0/14\"\n      },\n      {\n        \"key\": \"gke-gke3-b4ccfbf1-cidr\",\n        \"value\": \"default:10.8.0.0/14\"\n      },\n      {\n        \"key\": \"gke-gke1-8a964d6d-secondary-ranges\",\n        \"value\": \"services:default:gke1-subnet:gke1-secondary-range-svc,shareable-pods:default:gke1-subnet:gke1-secondary-range-pod\"\n      },\n      {\n        \"key\": \"gke-autopilot-gke1-19977223-secondary-ranges\",\n        \"value\": \"services:default:default:gke-autopilot-gke1-services-19977223,pods:default:default:gke-autopilot-gke1-pods-19977223\"\n      },\n      {\n        \"key\": \"gke-autopilot-gke2-65d1ba15-secondary-ranges\",\n        \"value\": \"services:default:default:gke-autopilot-gke2-services-65d1ba15,pods:default:default:gke-autopilot-gke2-pods-65d1ba15\"\n      },\n      {\n        \"key\": \"gke-gke6-e660e8cd-cidr\",\n        \"value\": \"default:10.12.0.0/14\"\n      }\n    ],\n    \"kind\": \"compute#metadata\"\n  },\n  \"creationTimestamp\": \"2022-03-30T02:08:23.669-07:00\",\n  \"defaultNetworkTier\": \"PREMIUM\",\n  \"defaultServiceAccount\": \"12340002-compute@developer.gserviceaccount.com\",\n  \"id\": \"1543636336255803624\",\n  \"kind\": \"compute#project\",\n  \"name\": \"gcpdiag-gke1-aaaa\",\n  \"quotas\": [\n    {\n      \"limit\": 10000,\n      \"metric\": \"SNAPSHOTS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 30,\n      \"metric\": \"NETWORKS\",\n      \"usage\": 1\n    },\n    {\n      \"limit\": 500,\n      \"metric\": \"FIREWALLS\",\n      \"usage\": 30\n    },\n    {\n      \"limit\": 5000,\n      \"metric\": \"IMAGES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 175,\n      \"metric\": \"STATIC_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 300,\n      \"metric\": \"ROUTES\",\n      \"usage\": 8\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"FORWARDING_RULES\",\n      \"usage\": 1\n    },\n    {\n      \"limit\": 500,\n      \"metric\": \"TARGET_POOLS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 500,\n      \"metric\": \"HEALTH_CHECKS\",\n      \"usage\": 2\n    },\n    {\n      \"limit\": 575,\n      \"metric\": \"IN_USE_ADDRESSES\",\n      \"usage\": 1\n    },\n    {\n      \"limit\": 500,\n      \"metric\": \"TARGET_INSTANCES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_HTTP_PROXIES\",\n      \"usage\": 2\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"URL_MAPS\",\n      \"usage\": 2\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"BACKEND_SERVICES\",\n      \"usage\": 2\n    },\n    {\n      \"limit\": 1000,\n      \"metric\": \"INSTANCE_TEMPLATES\",\n      \"usage\": 13\n    },\n    {\n      \"limit\": 50,\n      \"metric\": \"TARGET_VPN_GATEWAYS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"VPN_TUNNELS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 30,\n      \"metric\": \"BACKEND_BUCKETS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 20,\n      \"metric\": \"ROUTERS\",\n      \"usage\": 1\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_SSL_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_HTTPS_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"SSL_CERTIFICATES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 275,\n      \"metric\": \"SUBNETWORKS\",\n      \"usage\": 30\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_TCP_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 10,\n      \"metric\": \"SECURITY_POLICIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 200,\n      \"metric\": \"SECURITY_POLICY_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1000,\n      \"metric\": \"XPN_SERVICE_PROJECTS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"PACKET_MIRRORINGS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1000,\n      \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 6,\n      \"metric\": \"INTERCONNECTS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 5000,\n      \"metric\": \"GLOBAL_INTERNAL_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 50,\n      \"metric\": \"VPN_GATEWAYS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 5000,\n      \"metric\": \"MACHINE_IMAGES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 20,\n      \"metric\": \"SECURITY_POLICY_CEVAL_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 50,\n      \"metric\": \"EXTERNAL_VPN_GATEWAYS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1,\n      \"metric\": \"PUBLIC_ADVERTISED_PREFIXES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 10,\n      \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1024,\n      \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"INTERNAL_TRAFFIC_DIRECTOR_FORWARDING_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"GLOBAL_EXTERNAL_MANAGED_FORWARDING_RULES\",\n      \"usage\": 0\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa\",\n  \"xpnProjectStatus\": \"UNSPECIFIED_XPN_PROJECT_STATUS\"\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/compute-regions.json",
    "content": "{\n  \"kind\": \"compute#regionList\",\n  \"id\": \"projects/gcpdiag-gke1-aaaa/regions\",\n  \"items\": [\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1220\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east1\",\n      \"description\": \"asia-east1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-east1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-east1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-east1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-east1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1370\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east2\",\n      \"description\": \"asia-east2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-east2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-east2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-east2-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-east2\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1250\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast1\",\n      \"description\": \"asia-northeast1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-northeast1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-northeast1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-northeast1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1390\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast2\",\n      \"description\": \"asia-northeast2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-northeast2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-northeast2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-northeast2-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1410\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast3\",\n      \"description\": \"asia-northeast3\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-northeast3-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-northeast3-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-northeast3-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast3\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1320\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south1\",\n      \"description\": \"asia-south1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-south1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-south1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-south1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-south1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1470\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south2\",\n      \"description\": \"asia-south2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-south2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-south2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-south2-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 5,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-south2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1260\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast1\",\n      \"description\": \"asia-southeast1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-southeast1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-southeast1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-southeast1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-southeast1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1440\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast2\",\n      \"description\": \"asia-southeast2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-southeast2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-southeast2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-southeast2-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-southeast2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1280\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast1\",\n      \"description\": \"australia-southeast1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/australia-southeast1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/australia-southeast1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/australia-southeast1-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/australia-southeast1\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1480\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast2\",\n      \"description\": \"australia-southeast2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/australia-southeast2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/australia-southeast2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/australia-southeast2-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 5,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/australia-southeast2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1450\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-central2\",\n      \"description\": \"europe-central2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-central2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-central2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-central2-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 5,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-central2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1350\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-north1\",\n      \"description\": \"europe-north1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-north1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-north1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-north1-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-north1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1100\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west1\",\n      \"description\": \"europe-west1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west1-d\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1290\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west2\",\n      \"description\": \"europe-west2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west2-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west2\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1300\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west3\",\n      \"description\": \"europe-west3\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west3-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west3-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west3-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west3\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1340\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west4\",\n      \"description\": \"europe-west4\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 14\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 1300\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 10\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 16\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 13\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 13\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 1\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 1\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1380\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west6\",\n      \"description\": \"europe-west6\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west6-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west6-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west6-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west6\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1330\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast1\",\n      \"description\": \"northamerica-northeast1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/northamerica-northeast1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/northamerica-northeast1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/northamerica-northeast1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/northamerica-northeast1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1460\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast2\",\n      \"description\": \"northamerica-northeast2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/northamerica-northeast2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/northamerica-northeast2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/northamerica-northeast2-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 5,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/northamerica-northeast2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1310\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-east1\",\n      \"description\": \"southamerica-east1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/southamerica-east1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/southamerica-east1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/southamerica-east1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/southamerica-east1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1490\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-west1\",\n      \"description\": \"southamerica-west1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/southamerica-west1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/southamerica-west1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/southamerica-west1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 5,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/southamerica-west1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1000\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1\",\n      \"description\": \"us-central1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-central1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-central1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-central1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-central1-f\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-central1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1230\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east1\",\n      \"description\": \"us-east1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-east1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-east1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-east1-d\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1270\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east4\",\n      \"description\": \"us-east4\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-east4-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-east4-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-east4-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1210\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west1\",\n      \"description\": \"us-west1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-west1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-west1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-west1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1360\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west2\",\n      \"description\": \"us-west2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-west2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-west2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-west2-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1420\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west3\",\n      \"description\": \"us-west3\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-west3-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-west3-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-west3-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west3\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1430\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west4\",\n      \"description\": \"us-west4\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-west4-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-west4-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-west4-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west4\",\n      \"supportsPzs\": false\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions\"\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/compute-routers-europe-west4.json",
    "content": "{\n  \"kind\": \"compute#routerList\",\n  \"id\": \"projects/gcpdiag-gke1-aaaa/regions/europe-west4/routers\",\n  \"items\": [\n    {\n      \"kind\": \"compute#router\",\n      \"id\": \"6498501077836079272\",\n      \"creationTimestamp\": \"2022-03-30T02:09:27.014-07:00\",\n      \"name\": \"gke-default-router\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/routers/gke-default-router\",\n      \"nats\": [\n        {\n          \"name\": \"gke-default-router-nat\",\n          \"sourceSubnetworkIpRangesToNat\": \"LIST_OF_SUBNETWORKS\",\n          \"subnetworks\": [\n            {\n              \"name\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default\",\n              \"sourceIpRangesToNat\": [\n                \"ALL_IP_RANGES\"\n              ]\n            }\n          ],\n          \"natIpAllocateOption\": \"AUTO_ONLY\",\n          \"udpIdleTimeoutSec\": 30,\n          \"icmpIdleTimeoutSec\": 30,\n          \"tcpEstablishedIdleTimeoutSec\": 1200,\n          \"tcpTransitoryIdleTimeoutSec\": 30,\n          \"enableEndpointIndependentMapping\": true\n        }\n      ]\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/routers\"\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/compute-routers-us-east4.json",
    "content": "{\n  \"kind\": \"compute#routerList\",\n  \"id\": \"projects/gcpdiag-gke1-aaaa/regions/us-east4/routers\",\n  \"items\": [\n    {\n      \"kind\": \"compute#router\",\n      \"id\": \"6983339776642073481\",\n      \"creationTimestamp\": \"2019-05-13T09:37:58.875-07:00\",\n      \"name\": \"dummy-router1\",\n      \"description\": \"Interconnect Lab Juniper\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n      \"bgp\": {\n        \"asn\": 65000,\n        \"advertiseMode\": \"DEFAULT\",\n        \"keepaliveInterval\": 20\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/routers/dummy-router1\",\n      \"encryptedInterconnectRouter\": false\n    },\n    {\n      \"kind\": \"compute#router\",\n      \"id\": \"978493875024232350\",\n      \"creationTimestamp\": \"2023-10-02T15:17:21.172-07:00\",\n      \"name\": \"dummy-router2\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n      \"bgp\": {\n        \"asn\": 65001,\n        \"advertiseMode\": \"DEFAULT\",\n        \"keepaliveInterval\": 20\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/routers/dummy-router2\",\n      \"encryptedInterconnectRouter\": true\n    },\n    {\n      \"kind\": \"compute#router\",\n      \"id\": \"920222616522135406\",\n      \"creationTimestamp\": \"2022-12-20T11:14:09.645-08:00\",\n      \"name\": \"dummy-router3\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n      \"bgp\": {\n        \"asn\": 64512,\n        \"advertiseMode\": \"DEFAULT\",\n        \"keepaliveInterval\": 20\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/routers/dummy-router3\",\n      \"encryptedInterconnectRouter\": false\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/routers\"\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/compute-routers-us-west2.json",
    "content": "{\n  \"kind\": \"compute#routerList\",\n  \"id\": \"projects/gcpdiag-gke1-aaaa/regions/us-west2/routers\",\n  \"items\": [\n    {\n      \"kind\": \"compute#router\",\n      \"id\": \"920111616522135406\",\n      \"creationTimestamp\": \"2022-12-20T11:14:09.645-08:00\",\n      \"name\": \"dummy-router3\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n      \"bgp\": {\n        \"asn\": 64512,\n        \"advertiseMode\": \"DEFAULT\",\n        \"keepaliveInterval\": 20\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/routers/dummy-router3\",\n      \"encryptedInterconnectRouter\": false\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/routers\"\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/compute-subnetwork-policy.json",
    "content": "{\n  \"bindings\": [\n    {\n      \"members\": [\n        \"serviceAccount:gke1sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/compute.networkUser\"\n    }\n  ],\n  \"etag\": \"BwXba-kLoiA=\",\n  \"version\": 1\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/compute-subnetworks-aggregated.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gke1-aaaa/aggregated/subnetworks\",\n  \"items\": {\n    \"regions/asia-east1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.626-07:00\",\n          \"fingerprint\": \"ExVityxQ7Zw=\",\n          \"gatewayAddress\": \"10.140.0.1\",\n          \"id\": \"7865289181883843690\",\n          \"ipCidrRange\": \"10.140.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-east1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-east1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-east2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.735-07:00\",\n          \"fingerprint\": \"WEPpLpqTaII=\",\n          \"gatewayAddress\": \"10.170.0.1\",\n          \"id\": \"1625232185091474538\",\n          \"ipCidrRange\": \"10.170.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-east2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-east2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-northeast1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.546-07:00\",\n          \"fingerprint\": \"bQ24OL6A-_g=\",\n          \"gatewayAddress\": \"10.146.0.1\",\n          \"id\": \"1533136348119614570\",\n          \"ipCidrRange\": \"10.146.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-northeast2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.673-07:00\",\n          \"fingerprint\": \"V5llMO8nmmI=\",\n          \"gatewayAddress\": \"10.174.0.1\",\n          \"id\": \"9108510720326681706\",\n          \"ipCidrRange\": \"10.174.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-northeast3\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.690-07:00\",\n          \"fingerprint\": \"YvlSkRtP_4s=\",\n          \"gatewayAddress\": \"10.178.0.1\",\n          \"id\": \"4106072082002527338\",\n          \"ipCidrRange\": \"10.178.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast3\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast3/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-south1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.687-07:00\",\n          \"fingerprint\": \"wpauE-6Ls5k=\",\n          \"gatewayAddress\": \"10.160.0.1\",\n          \"id\": \"799045077667726442\",\n          \"ipCidrRange\": \"10.160.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-south1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-south1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-south2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.745-07:00\",\n          \"fingerprint\": \"Q7YnvFsvcIs=\",\n          \"gatewayAddress\": \"10.190.0.1\",\n          \"id\": \"5569943562367845482\",\n          \"ipCidrRange\": \"10.190.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-south2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-south2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-southeast1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.680-07:00\",\n          \"fingerprint\": \"9qw_IGoz63I=\",\n          \"gatewayAddress\": \"10.148.0.1\",\n          \"id\": \"1399967472608134250\",\n          \"ipCidrRange\": \"10.148.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-southeast1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-southeast1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-southeast2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.669-07:00\",\n          \"fingerprint\": \"A364yIYGdbo=\",\n          \"gatewayAddress\": \"10.184.0.1\",\n          \"id\": \"925018594468217962\",\n          \"ipCidrRange\": \"10.184.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-southeast2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-southeast2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/australia-southeast1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.681-07:00\",\n          \"fingerprint\": \"nW5ufndV5Es=\",\n          \"gatewayAddress\": \"10.152.0.1\",\n          \"id\": \"3491955985615471722\",\n          \"ipCidrRange\": \"10.152.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/australia-southeast1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/australia-southeast1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/australia-southeast2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.656-07:00\",\n          \"fingerprint\": \"DrRYoQz8MQQ=\",\n          \"gatewayAddress\": \"10.192.0.1\",\n          \"id\": \"3881444575162188906\",\n          \"ipCidrRange\": \"10.192.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/australia-southeast2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/australia-southeast2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-central2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.681-07:00\",\n          \"fingerprint\": \"Fkp5Ia_kWjU=\",\n          \"gatewayAddress\": \"10.186.0.1\",\n          \"id\": \"7309165993080177770\",\n          \"ipCidrRange\": \"10.186.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-central2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-central2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-north1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.676-07:00\",\n          \"fingerprint\": \"uAKn9PpojKc=\",\n          \"gatewayAddress\": \"10.166.0.1\",\n          \"id\": \"5895305034600072298\",\n          \"ipCidrRange\": \"10.166.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-north1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-north1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-southwest1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:34.478-07:00\",\n          \"fingerprint\": \"7puHFtbgohs=\",\n          \"gatewayAddress\": \"10.204.0.1\",\n          \"id\": \"6503801733215994985\",\n          \"ipCidrRange\": \"10.204.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-southwest1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-southwest1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.565-07:00\",\n          \"fingerprint\": \"RYxGa4BdqVw=\",\n          \"gatewayAddress\": \"10.132.0.1\",\n          \"id\": \"4254674819412968554\",\n          \"ipCidrRange\": \"10.132.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.592-07:00\",\n          \"fingerprint\": \"InwBX-PAmxE=\",\n          \"gatewayAddress\": \"10.154.0.1\",\n          \"id\": \"8673388756094993514\",\n          \"ipCidrRange\": \"10.154.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west3\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:34.435-07:00\",\n          \"fingerprint\": \"jtqiYE_BvSA=\",\n          \"gatewayAddress\": \"10.156.0.1\",\n          \"id\": \"2730999123496453225\",\n          \"ipCidrRange\": \"10.156.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west3\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west3/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west4\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.623-07:00\",\n          \"fingerprint\": \"sfuW5PvbdEI=\",\n          \"gatewayAddress\": \"10.164.0.1\",\n          \"id\": \"1461822054006834282\",\n          \"ipCidrRange\": \"10.164.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": true,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4\",\n          \"secondaryIpRanges\": [\n            {\n              \"ipCidrRange\": \"10.85.0.0/17\",\n              \"rangeName\": \"gke-autopilot-gke1-pods-6a0c2f5b\"\n            },\n            {\n              \"ipCidrRange\": \"10.85.128.0/22\",\n              \"rangeName\": \"gke-autopilot-gke1-services-6a0c2f5b\"\n            },\n            {\n              \"ipCidrRange\": \"10.60.0.0/20\",\n              \"rangeName\": \"gke-gke4-services-e4411110\"\n            },\n            {\n              \"ipCidrRange\": \"10.56.0.0/14\",\n              \"rangeName\": \"gke-gke4-pods-e4411110\"\n            },\n            {\n              \"ipCidrRange\": \"10.60.96.0/22\",\n              \"rangeName\": \"gke-autopilot-gke2-services-3fbbc734\"\n            },\n            {\n              \"ipCidrRange\": \"10.60.128.0/17\",\n              \"rangeName\": \"gke-autopilot-gke2-pods-3fbbc734\"\n            }\n          ],\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        },\n        {\n          \"creationTimestamp\": \"2022-10-11T07:16:29.795-07:00\",\n          \"enableFlowLogs\": false,\n          \"fingerprint\": \"PE0z2PNqD2Y=\",\n          \"gatewayAddress\": \"192.168.0.1\",\n          \"id\": \"7423481761753515090\",\n          \"ipCidrRange\": \"192.168.0.0/24\",\n          \"kind\": \"compute#subnetwork\",\n          \"logConfig\": {\n            \"aggregationInterval\": \"INTERVAL_5_SEC\",\n            \"enable\": false,\n            \"flowSampling\": 0.5,\n            \"metadata\": \"INCLUDE_ALL_METADATA\"\n          },\n          \"name\": \"gke1-subnet\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4\",\n          \"secondaryIpRanges\": [\n            {\n              \"ipCidrRange\": \"192.168.1.0/24\",\n              \"rangeName\": \"gke1-secondary-range-pod\"\n            },\n            {\n              \"ipCidrRange\": \"192.168.2.0/24\",\n              \"rangeName\": \"gke1-secondary-range-svc\"\n            }\n          ],\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/gke1-subnet\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west6\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.530-07:00\",\n          \"fingerprint\": \"Ic4Y34BRjOE=\",\n          \"gatewayAddress\": \"10.172.0.1\",\n          \"id\": \"3567972882370315370\",\n          \"ipCidrRange\": \"10.172.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west6\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west6/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west8\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.586-07:00\",\n          \"fingerprint\": \"_MhtvVpnR5c=\",\n          \"gatewayAddress\": \"10.198.0.1\",\n          \"id\": \"5905962051052291178\",\n          \"ipCidrRange\": \"10.198.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west8\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west8/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west9\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.638-07:00\",\n          \"fingerprint\": \"0uz_7VhFjLE=\",\n          \"gatewayAddress\": \"10.200.0.1\",\n          \"id\": \"5697832252330263658\",\n          \"ipCidrRange\": \"10.200.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west9\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west9/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/me-west1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.741-07:00\",\n          \"fingerprint\": \"70g6IoCP0CM=\",\n          \"gatewayAddress\": \"10.208.0.1\",\n          \"id\": \"2381367997960340586\",\n          \"ipCidrRange\": \"10.208.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/me-west1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/me-west1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/northamerica-northeast1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.499-07:00\",\n          \"fingerprint\": \"vNYpwgnkSCI=\",\n          \"gatewayAddress\": \"10.162.0.1\",\n          \"id\": \"5798419596128601194\",\n          \"ipCidrRange\": \"10.162.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/northamerica-northeast1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/northamerica-northeast1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/northamerica-northeast2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.493-07:00\",\n          \"fingerprint\": \"7ik2BWFfN84=\",\n          \"gatewayAddress\": \"10.188.0.1\",\n          \"id\": \"711542983096845418\",\n          \"ipCidrRange\": \"10.188.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/northamerica-northeast2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/northamerica-northeast2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/southamerica-east1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.668-07:00\",\n          \"fingerprint\": \"pqhad5TnzVc=\",\n          \"gatewayAddress\": \"10.158.0.1\",\n          \"id\": \"2301799042992620650\",\n          \"ipCidrRange\": \"10.158.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/southamerica-east1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/southamerica-east1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/southamerica-west1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.648-07:00\",\n          \"fingerprint\": \"ea50MPZjruA=\",\n          \"gatewayAddress\": \"10.194.0.1\",\n          \"id\": \"6124576470534243434\",\n          \"ipCidrRange\": \"10.194.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/southamerica-west1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/southamerica-west1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-central1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.382-07:00\",\n          \"fingerprint\": \"pb4O-4ISjAE=\",\n          \"gatewayAddress\": \"10.128.0.1\",\n          \"id\": \"6250438653192488042\",\n          \"ipCidrRange\": \"10.128.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-central1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-central1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-east1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.368-07:00\",\n          \"fingerprint\": \"bvN-N8FS9U4=\",\n          \"gatewayAddress\": \"10.142.0.1\",\n          \"id\": \"1443866556678849642\",\n          \"ipCidrRange\": \"10.142.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-east4\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.486-07:00\",\n          \"fingerprint\": \"jew6EZUeYrM=\",\n          \"gatewayAddress\": \"10.150.0.1\",\n          \"id\": \"5871230243962405994\",\n          \"ipCidrRange\": \"10.150.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-east5\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.504-07:00\",\n          \"fingerprint\": \"KVZisxAl1CI=\",\n          \"gatewayAddress\": \"10.202.0.1\",\n          \"id\": \"4332627157280408682\",\n          \"ipCidrRange\": \"10.202.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east5\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east5/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-east7\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T09:13:19.272-07:00\",\n          \"fingerprint\": \"BEZq6cSPkco=\",\n          \"gatewayAddress\": \"10.196.0.1\",\n          \"id\": \"7977046348344600816\",\n          \"ipCidrRange\": \"10.196.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east7\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east7/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-south1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.435-07:00\",\n          \"fingerprint\": \"1Se61ZXzpjY=\",\n          \"gatewayAddress\": \"10.206.0.1\",\n          \"id\": \"7154466601132672106\",\n          \"ipCidrRange\": \"10.206.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-south1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-south1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-west1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.499-07:00\",\n          \"fingerprint\": \"E0k7cQEp7_I=\",\n          \"gatewayAddress\": \"10.138.0.1\",\n          \"id\": \"5323136092791686250\",\n          \"ipCidrRange\": \"10.138.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-west2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.549-07:00\",\n          \"fingerprint\": \"-JD9bbh-QlA=\",\n          \"gatewayAddress\": \"10.168.0.1\",\n          \"id\": \"4458757238523741290\",\n          \"ipCidrRange\": \"10.168.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-west3\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.524-07:00\",\n          \"fingerprint\": \"P01BE480Q2I=\",\n          \"gatewayAddress\": \"10.180.0.1\",\n          \"id\": \"1135562538472752234\",\n          \"ipCidrRange\": \"10.180.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west3\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west3/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-west4\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2022-10-11T07:15:33.521-07:00\",\n          \"fingerprint\": \"2k-WBaR7JKQ=\",\n          \"gatewayAddress\": \"10.182.0.1\",\n          \"id\": \"7061406355024299114\",\n          \"ipCidrRange\": \"10.182.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west4\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west4/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    }\n  },\n  \"kind\": \"compute#subnetworkAggregatedList\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/aggregated/subnetworks\"\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/compute-subnetworks-europe-west4.json",
    "content": "{\n  \"kind\": \"compute#subnetworkList\",\n  \"id\": \"projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks\",\n  \"items\": [\n    {\n      \"kind\": \"compute#subnetwork\",\n      \"id\": \"4774247690482065659\",\n      \"creationTimestamp\": \"2022-03-30T02:08:36.021-07:00\",\n      \"name\": \"default\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n      \"ipCidrRange\": \"10.164.0.0/20\",\n      \"gatewayAddress\": \"10.164.0.1\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default\",\n      \"privateIpGoogleAccess\": true,\n      \"secondaryIpRanges\": [\n        {\n          \"rangeName\": \"gke-gke4-services-93befb7e\",\n          \"ipCidrRange\": \"10.60.0.0/20\"\n        },\n        {\n          \"rangeName\": \"gke-gke4-pods-93befb7e\",\n          \"ipCidrRange\": \"10.56.0.0/14\"\n        },\n        {\n          \"rangeName\": \"gke-autopilot-gke1-services-19977223\",\n          \"ipCidrRange\": \"10.85.128.0/22\"\n        },\n        {\n          \"rangeName\": \"gke-autopilot-gke1-pods-19977223\",\n          \"ipCidrRange\": \"10.85.0.0/17\"\n        },\n        {\n          \"rangeName\": \"gke-autopilot-gke2-pods-65d1ba15\",\n          \"ipCidrRange\": \"10.60.128.0/17\"\n        },\n        {\n          \"rangeName\": \"gke-autopilot-gke2-services-65d1ba15\",\n          \"ipCidrRange\": \"10.60.96.0/22\"\n        }\n      ],\n      \"fingerprint\": \"-9hqGif0SQ0=\",\n      \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n      \"purpose\": \"PRIVATE\",\n      \"stackType\": \"IPV4_ONLY\"\n    },\n    {\n      \"kind\": \"compute#subnetwork\",\n      \"id\": \"1818761461517361320\",\n      \"creationTimestamp\": \"2022-03-30T02:09:27.964-07:00\",\n      \"name\": \"gke1-subnet\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n      \"ipCidrRange\": \"192.168.0.0/24\",\n      \"gatewayAddress\": \"192.168.0.1\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/gke1-subnet\",\n      \"privateIpGoogleAccess\": false,\n      \"secondaryIpRanges\": [\n        {\n          \"rangeName\": \"gke1-secondary-range-pod\",\n          \"ipCidrRange\": \"192.168.1.0/24\"\n        },\n        {\n          \"rangeName\": \"gke1-secondary-range-svc\",\n          \"ipCidrRange\": \"192.168.2.0/24\"\n        }\n      ],\n      \"fingerprint\": \"Ir2p9uebpiE=\",\n      \"enableFlowLogs\": false,\n      \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n      \"purpose\": \"PRIVATE\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"stackType\": \"IPV4_ONLY\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks\"\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/compute-templates.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gke1-aaaa/global/instanceTemplates\",\n  \"items\": [\n    {\n      \"creationTimestamp\": \"2023-05-09T12:41:11.352-07:00\",\n      \"description\": \"\",\n      \"id\": \"6940990255272501048\",\n      \"kind\": \"compute#instanceTemplate\",\n      \"name\": \"gke-gke1-default-pool-671518f6\",\n      \"properties\": {\n        \"disks\": [\n          {\n            \"autoDelete\": true,\n            \"boot\": true,\n            \"deviceName\": \"persistent-disk-0\",\n            \"index\": 0,\n            \"initializeParams\": {\n              \"diskSizeGb\": \"100\",\n              \"diskType\": \"pd-balanced\",\n              \"labels\": {\n                \"foo\": \"bar\",\n                \"goog-gke-node\": \"\",\n                \"goog-gke-volume\": \"\"\n              },\n              \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-1257-gke1000-cos-101-17162-127-27-v230314-c-cgpv1-pre\"\n            },\n            \"kind\": \"compute#attachedDisk\",\n            \"mode\": \"READ_WRITE\",\n            \"type\": \"PERSISTENT\"\n          }\n        ],\n        \"labels\": {\n          \"foo\": \"bar\",\n          \"goog-gke-node\": \"\"\n        },\n        \"machineType\": \"e2-medium\",\n        \"metadata\": {\n          \"fingerprint\": \"REDACTED\",\n          \"items\": [\n            {\n              \"key\": \"kubeconfig\",\n              \"value\": \"apiVersion: v1\\nkind: Config\\nclusters:\\n- cluster:\\n    server: https://192.168.0.34\\n    certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\\n  name: default-cluster\\ncontexts:\\n- context:\\n    cluster: default-cluster\\n    namespace: default\\n    user: exec-plugin-auth\\n  name: default-context\\ncurrent-context: default-context\\nusers:\\n- name: exec-plugin-auth\\n  user:\\n    exec:\\n      apiVersion: \\\"client.authentication.k8s.io/v1beta1\\\"\\n      command: '/home/kubernetes/bin/gke-exec-auth-plugin'\\n      args: [\\\"--cache-dir\\\", '/var/lib/kubelet/pki/']\\n\"\n            },\n            {\n              \"key\": \"serial-port-logging-enable\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"cluster-location\",\n              \"value\": \"europe-west4-a\"\n            },\n            {\n              \"key\": \"configure-sh\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"gci-update-strategy\",\n              \"value\": \"update_disabled\"\n            },\n            {\n              \"key\": \"google-compute-enable-pcid\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"user-data\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"gci-metrics-enabled\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"kubelet-config\",\n              \"value\": \"apiVersion: kubelet.config.k8s.io/v1beta1\\nauthentication:\\n  anonymous:\\n    enabled: false\\n  webhook:\\n    enabled: true\\n  x509:\\n    clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\\nauthorization:\\n  mode: Webhook\\ncgroupRoot: /\\nclusterDNS:\\n- 192.168.2.10\\nclusterDomain: cluster.local\\nenableDebuggingHandlers: true\\nevictionHard:\\n  memory.available: 100Mi\\n  nodefs.available: 10%\\n  nodefs.inodesFree: 5%\\n  pid.available: 10%\\nfeatureGates:\\n  CSIMigrationGCE: true\\n  DisableKubeletCloudCredentialProviders: false\\n  DynamicKubeletConfig: false\\n  ExecProbeTimeout: false\\n  InTreePluginAWSUnregister: true\\n  InTreePluginAzureDiskUnregister: true\\n  InTreePluginOpenStackUnregister: true\\n  InTreePluginvSphereUnregister: true\\n  RotateKubeletServerCertificate: true\\nkernelMemcgNotification: true\\nkind: KubeletConfiguration\\nkubeReserved:\\n  cpu: 1060m\\n  ephemeral-storage: 41Gi\\n  memory: 1019Mi\\nreadOnlyPort: 10255\\nserverTLSBootstrap: true\\nstaticPodPath: /etc/kubernetes/manifests\\n\"\n            },\n            {\n              \"key\": \"kube-labels\",\n              \"value\": \"cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=e2,cloud.google.com/private-node=false,node.kubernetes.io/masq-agent-ds-ready=true\"\n            },\n            {\n              \"key\": \"disable-legacy-endpoints\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"cluster-name\",\n              \"value\": \"gke1\"\n            },\n            {\n              \"key\": \"cluster-uid\",\n              \"value\": \"c10b95be9dbb48d09af2e5c299c655c01f02e38cc157489eb8ec454d30b7ecb7\"\n            },\n            {\n              \"key\": \"kube-env\",\n              \"value\": \"REDACTED\"\n            }\n          ],\n          \"kind\": \"compute#metadata\"\n        },\n        \"networkInterfaces\": [\n          {\n            \"accessConfigs\": [\n              {\n                \"kind\": \"compute#accessConfig\",\n                \"name\": \"external-nat\",\n                \"networkTier\": \"PREMIUM\",\n                \"type\": \"ONE_TO_ONE_NAT\"\n              }\n            ],\n            \"aliasIpRanges\": [\n              {\n                \"ipCidrRange\": \"/24\",\n                \"subnetworkRangeName\": \"gke1-secondary-range-pod\"\n              }\n            ],\n            \"kind\": \"compute#networkInterface\",\n            \"name\": \"nic0\",\n            \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n            \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/gke1-subnet\"\n          }\n        ],\n        \"networkPerformanceConfig\": {\n          \"totalEgressBandwidthTier\": \"DEFAULT\"\n        },\n        \"scheduling\": {\n          \"automaticRestart\": true,\n          \"onHostMaintenance\": \"MIGRATE\",\n          \"preemptible\": false,\n          \"provisioningModel\": \"STANDARD\"\n        },\n        \"serviceAccounts\": [\n          {\n            \"email\": \"default\",\n            \"scopes\": [\n              \"https://www.googleapis.com/auth/devstorage.read_only\",\n              \"https://www.googleapis.com/auth/logging.write\",\n              \"https://www.googleapis.com/auth/monitoring\",\n              \"https://www.googleapis.com/auth/service.management.readonly\",\n              \"https://www.googleapis.com/auth/servicecontrol\",\n              \"https://www.googleapis.com/auth/trace.append\"\n            ]\n          }\n        ],\n        \"shieldedInstanceConfig\": {\n          \"enableIntegrityMonitoring\": true,\n          \"enableSecureBoot\": false,\n          \"enableVtpm\": true\n        },\n        \"tags\": {\n          \"items\": [\n            \"gke-gke1-c10b95be-node\"\n          ]\n        }\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/instanceTemplates/gke-gke1-default-pool-671518f6\"\n    },\n    {\n      \"creationTimestamp\": \"2023-04-27T00:58:35.201-07:00\",\n      \"description\": \"\",\n      \"id\": \"8948768169139869124\",\n      \"kind\": \"compute#instanceTemplate\",\n      \"name\": \"gke-gke2-default-pool-913244b5\",\n      \"properties\": {\n        \"canIpForward\": true,\n        \"disks\": [\n          {\n            \"autoDelete\": true,\n            \"boot\": true,\n            \"deviceName\": \"persistent-disk-0\",\n            \"index\": 0,\n            \"initializeParams\": {\n              \"diskSizeGb\": \"100\",\n              \"diskType\": \"pd-standard\",\n              \"labels\": {\n                \"goog-gke-node\": \"\",\n                \"goog-gke-volume\": \"\"\n              },\n              \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-12410-gke2300-cos-97-16919-235-13-v230222-c-pre\"\n            },\n            \"kind\": \"compute#attachedDisk\",\n            \"mode\": \"READ_WRITE\",\n            \"type\": \"PERSISTENT\"\n          }\n        ],\n        \"labels\": {\n          \"goog-gke-node\": \"\"\n        },\n        \"machineType\": \"e2-medium\",\n        \"metadata\": {\n          \"fingerprint\": \"REDACTED\",\n          \"items\": [\n            {\n              \"key\": \"google-compute-enable-pcid\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"cluster-uid\",\n              \"value\": \"12cd17cd70b64fe2b23d17d17898c8161509f72746f94b0b949486fb5e07a22b\"\n            },\n            {\n              \"key\": \"configure-sh\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"kubelet-config\",\n              \"value\": \"apiVersion: kubelet.config.k8s.io/v1beta1\\nauthentication:\\n  anonymous:\\n    enabled: false\\n  webhook:\\n    enabled: true\\n  x509:\\n    clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\\nauthorization:\\n  mode: Webhook\\ncgroupRoot: /\\nclusterDNS:\\n- 10.7.240.10\\nclusterDomain: cluster.local\\nenableDebuggingHandlers: true\\nevictionHard:\\n  memory.available: 100Mi\\n  nodefs.available: 10%\\n  nodefs.inodesFree: 5%\\n  pid.available: 10%\\nfeatureGates:\\n  CSIMigrationGCE: true\\n  DisableKubeletCloudCredentialProviders: false\\n  DynamicKubeletConfig: false\\n  ExecProbeTimeout: false\\n  InTreePluginAWSUnregister: true\\n  InTreePluginAzureDiskUnregister: true\\n  InTreePluginOpenStackUnregister: true\\n  InTreePluginvSphereUnregister: true\\n  RotateKubeletServerCertificate: true\\nkernelMemcgNotification: true\\nkind: KubeletConfiguration\\nkubeReserved:\\n  cpu: 1060m\\n  ephemeral-storage: 41Gi\\n  memory: 1019Mi\\nreadOnlyPort: 10255\\nserverTLSBootstrap: true\\nstaticPodPath: /etc/kubernetes/manifests\\n\"\n            },\n            {\n              \"key\": \"kube-labels\",\n              \"value\": \"cloud.google.com/gke-boot-disk=pd-standard,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-netd-ready=true,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/machine-family=e2,iam.gke.io/gke-metadata-server-enabled=true\"\n            },\n            {\n              \"key\": \"serial-port-logging-enable\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"cluster-location\",\n              \"value\": \"europe-west4\"\n            },\n            {\n              \"key\": \"user-data\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"gci-update-strategy\",\n              \"value\": \"update_disabled\"\n            },\n            {\n              \"key\": \"enable-oslogin\",\n              \"value\": \"false\"\n            },\n            {\n              \"key\": \"kube-env\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"cluster-name\",\n              \"value\": \"gke2\"\n            },\n            {\n              \"key\": \"gci-metrics-enabled\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"kubeconfig\",\n              \"value\": \"apiVersion: v1\\nkind: Config\\nclusters:\\n- cluster:\\n    server: https://34.91.246.188\\n    certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\\n  name: default-cluster\\ncontexts:\\n- context:\\n    cluster: default-cluster\\n    namespace: default\\n    user: exec-plugin-auth\\n  name: default-context\\ncurrent-context: default-context\\nusers:\\n- name: exec-plugin-auth\\n  user:\\n    exec:\\n      apiVersion: \\\"client.authentication.k8s.io/v1beta1\\\"\\n      command: '/home/kubernetes/bin/gke-exec-auth-plugin'\\n      args: [\\\"--cache-dir\\\", '/var/lib/kubelet/pki/']\\n\"\n            },\n            {\n              \"key\": \"disable-legacy-endpoints\",\n              \"value\": \"true\"\n            }\n          ],\n          \"kind\": \"compute#metadata\"\n        },\n        \"networkInterfaces\": [\n          {\n            \"accessConfigs\": [\n              {\n                \"kind\": \"compute#accessConfig\",\n                \"name\": \"external-nat\",\n                \"networkTier\": \"PREMIUM\",\n                \"type\": \"ONE_TO_ONE_NAT\"\n              }\n            ],\n            \"kind\": \"compute#networkInterface\",\n            \"name\": \"nic0\",\n            \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n            \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default\"\n          }\n        ],\n        \"networkPerformanceConfig\": {\n          \"totalEgressBandwidthTier\": \"DEFAULT\"\n        },\n        \"scheduling\": {\n          \"automaticRestart\": true,\n          \"onHostMaintenance\": \"MIGRATE\",\n          \"preemptible\": false,\n          \"provisioningModel\": \"STANDARD\"\n        },\n        \"serviceAccounts\": [\n          {\n            \"email\": \"gke2sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com\",\n            \"scopes\": [\n              \"https://www.googleapis.com/auth/cloud-platform\"\n            ]\n          }\n        ],\n        \"shieldedInstanceConfig\": {\n          \"enableIntegrityMonitoring\": true,\n          \"enableSecureBoot\": false,\n          \"enableVtpm\": true\n        },\n        \"tags\": {\n          \"items\": [\n            \"gke-gke2-custom-tag\",\n            \"gke-gke2-12cd17cd-node\"\n          ]\n        }\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/instanceTemplates/gke-gke2-default-pool-913244b5\"\n    },\n    {\n      \"creationTimestamp\": \"2023-04-27T00:55:01.348-07:00\",\n      \"description\": \"\",\n      \"id\": \"648527463397692602\",\n      \"kind\": \"compute#instanceTemplate\",\n      \"name\": \"gke-gke2-default-pool-c10d4546\",\n      \"properties\": {\n        \"canIpForward\": true,\n        \"disks\": [\n          {\n            \"autoDelete\": true,\n            \"boot\": true,\n            \"deviceName\": \"persistent-disk-0\",\n            \"index\": 0,\n            \"initializeParams\": {\n              \"diskSizeGb\": \"100\",\n              \"diskType\": \"pd-standard\",\n              \"labels\": {\n                \"goog-gke-node\": \"\",\n                \"goog-gke-volume\": \"\"\n              },\n              \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-12410-gke2300-cos-97-16919-235-13-v230222-c-pre\"\n            },\n            \"kind\": \"compute#attachedDisk\",\n            \"mode\": \"READ_WRITE\",\n            \"type\": \"PERSISTENT\"\n          }\n        ],\n        \"labels\": {\n          \"goog-gke-node\": \"\"\n        },\n        \"machineType\": \"e2-medium\",\n        \"metadata\": {\n          \"fingerprint\": \"REDACTED\",\n          \"items\": [\n            {\n              \"key\": \"google-compute-enable-pcid\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"cluster-uid\",\n              \"value\": \"12cd17cd70b64fe2b23d17d17898c8161509f72746f94b0b949486fb5e07a22b\"\n            },\n            {\n              \"key\": \"configure-sh\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"kubelet-config\",\n              \"value\": \"apiVersion: kubelet.config.k8s.io/v1beta1\\nauthentication:\\n  anonymous:\\n    enabled: false\\n  webhook:\\n    enabled: true\\n  x509:\\n    clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\\nauthorization:\\n  mode: Webhook\\ncgroupRoot: /\\nclusterDNS:\\n- 10.7.240.10\\nclusterDomain: cluster.local\\nenableDebuggingHandlers: true\\nevictionHard:\\n  memory.available: 100Mi\\n  nodefs.available: 10%\\n  nodefs.inodesFree: 5%\\n  pid.available: 10%\\nfeatureGates:\\n  CSIMigrationGCE: true\\n  DisableKubeletCloudCredentialProviders: false\\n  DynamicKubeletConfig: false\\n  ExecProbeTimeout: false\\n  InTreePluginAWSUnregister: true\\n  InTreePluginAzureDiskUnregister: true\\n  InTreePluginOpenStackUnregister: true\\n  InTreePluginvSphereUnregister: true\\n  RotateKubeletServerCertificate: true\\nkernelMemcgNotification: true\\nkind: KubeletConfiguration\\nkubeReserved:\\n  cpu: 1060m\\n  ephemeral-storage: 41Gi\\n  memory: 1019Mi\\nreadOnlyPort: 10255\\nserverTLSBootstrap: true\\nstaticPodPath: /etc/kubernetes/manifests\\n\"\n            },\n            {\n              \"key\": \"kube-labels\",\n              \"value\": \"cloud.google.com/gke-boot-disk=pd-standard,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-netd-ready=true,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/machine-family=e2,iam.gke.io/gke-metadata-server-enabled=true\"\n            },\n            {\n              \"key\": \"serial-port-logging-enable\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"cluster-location\",\n              \"value\": \"europe-west4\"\n            },\n            {\n              \"key\": \"user-data\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"gci-update-strategy\",\n              \"value\": \"update_disabled\"\n            },\n            {\n              \"key\": \"enable-oslogin\",\n              \"value\": \"false\"\n            },\n            {\n              \"key\": \"kube-env\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"cluster-name\",\n              \"value\": \"gke2\"\n            },\n            {\n              \"key\": \"gci-metrics-enabled\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"kubeconfig\",\n              \"value\": \"apiVersion: v1\\nkind: Config\\nclusters:\\n- cluster:\\n    server: https://34.91.246.188\\n    certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\\n  name: default-cluster\\ncontexts:\\n- context:\\n    cluster: default-cluster\\n    namespace: default\\n    user: exec-plugin-auth\\n  name: default-context\\ncurrent-context: default-context\\nusers:\\n- name: exec-plugin-auth\\n  user:\\n    exec:\\n      apiVersion: \\\"client.authentication.k8s.io/v1beta1\\\"\\n      command: '/home/kubernetes/bin/gke-exec-auth-plugin'\\n      args: [\\\"--cache-dir\\\", '/var/lib/kubelet/pki/']\\n\"\n            },\n            {\n              \"key\": \"disable-legacy-endpoints\",\n              \"value\": \"true\"\n            }\n          ],\n          \"kind\": \"compute#metadata\"\n        },\n        \"networkInterfaces\": [\n          {\n            \"accessConfigs\": [\n              {\n                \"kind\": \"compute#accessConfig\",\n                \"name\": \"external-nat\",\n                \"networkTier\": \"PREMIUM\",\n                \"type\": \"ONE_TO_ONE_NAT\"\n              }\n            ],\n            \"kind\": \"compute#networkInterface\",\n            \"name\": \"nic0\",\n            \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n            \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default\"\n          }\n        ],\n        \"networkPerformanceConfig\": {\n          \"totalEgressBandwidthTier\": \"DEFAULT\"\n        },\n        \"scheduling\": {\n          \"automaticRestart\": true,\n          \"onHostMaintenance\": \"MIGRATE\",\n          \"preemptible\": false,\n          \"provisioningModel\": \"STANDARD\"\n        },\n        \"serviceAccounts\": [\n          {\n            \"email\": \"gke2sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com\",\n            \"scopes\": [\n              \"https://www.googleapis.com/auth/cloud-platform\"\n            ]\n          }\n        ],\n        \"shieldedInstanceConfig\": {\n          \"enableIntegrityMonitoring\": true,\n          \"enableSecureBoot\": false,\n          \"enableVtpm\": true\n        },\n        \"tags\": {\n          \"items\": [\n            \"gke-gke2-custom-tag\",\n            \"gke-gke2-12cd17cd-node\"\n          ]\n        }\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/instanceTemplates/gke-gke2-default-pool-c10d4546\"\n    },\n    {\n      \"creationTimestamp\": \"2023-04-27T01:01:57.423-07:00\",\n      \"description\": \"\",\n      \"id\": \"2678767759871415578\",\n      \"kind\": \"compute#instanceTemplate\",\n      \"name\": \"gke-gke2-default-pool-ce8825d8\",\n      \"properties\": {\n        \"canIpForward\": true,\n        \"disks\": [\n          {\n            \"autoDelete\": true,\n            \"boot\": true,\n            \"deviceName\": \"persistent-disk-0\",\n            \"index\": 0,\n            \"initializeParams\": {\n              \"diskSizeGb\": \"100\",\n              \"diskType\": \"pd-standard\",\n              \"labels\": {\n                \"goog-gke-node\": \"\",\n                \"goog-gke-volume\": \"\"\n              },\n              \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-12410-gke2300-cos-97-16919-235-13-v230222-c-pre\"\n            },\n            \"kind\": \"compute#attachedDisk\",\n            \"mode\": \"READ_WRITE\",\n            \"type\": \"PERSISTENT\"\n          }\n        ],\n        \"labels\": {\n          \"goog-gke-node\": \"\"\n        },\n        \"machineType\": \"e2-medium\",\n        \"metadata\": {\n          \"fingerprint\": \"REDACTED\",\n          \"items\": [\n            {\n              \"key\": \"cluster-location\",\n              \"value\": \"europe-west4\"\n            },\n            {\n              \"key\": \"user-data\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"gci-update-strategy\",\n              \"value\": \"update_disabled\"\n            },\n            {\n              \"key\": \"enable-oslogin\",\n              \"value\": \"false\"\n            },\n            {\n              \"key\": \"kube-env\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"cluster-name\",\n              \"value\": \"gke2\"\n            },\n            {\n              \"key\": \"gci-metrics-enabled\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"kubeconfig\",\n              \"value\": \"apiVersion: v1\\nkind: Config\\nclusters:\\n- cluster:\\n    server: https://34.91.246.188\\n    certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\\n  name: default-cluster\\ncontexts:\\n- context:\\n    cluster: default-cluster\\n    namespace: default\\n    user: exec-plugin-auth\\n  name: default-context\\ncurrent-context: default-context\\nusers:\\n- name: exec-plugin-auth\\n  user:\\n    exec:\\n      apiVersion: \\\"client.authentication.k8s.io/v1beta1\\\"\\n      command: '/home/kubernetes/bin/gke-exec-auth-plugin'\\n      args: [\\\"--cache-dir\\\", '/var/lib/kubelet/pki/']\\n\"\n            },\n            {\n              \"key\": \"disable-legacy-endpoints\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"google-compute-enable-pcid\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"cluster-uid\",\n              \"value\": \"12cd17cd70b64fe2b23d17d17898c8161509f72746f94b0b949486fb5e07a22b\"\n            },\n            {\n              \"key\": \"configure-sh\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"kubelet-config\",\n              \"value\": \"apiVersion: kubelet.config.k8s.io/v1beta1\\nauthentication:\\n  anonymous:\\n    enabled: false\\n  webhook:\\n    enabled: true\\n  x509:\\n    clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\\nauthorization:\\n  mode: Webhook\\ncgroupRoot: /\\nclusterDNS:\\n- 10.7.240.10\\nclusterDomain: cluster.local\\nenableDebuggingHandlers: true\\nevictionHard:\\n  memory.available: 100Mi\\n  nodefs.available: 10%\\n  nodefs.inodesFree: 5%\\n  pid.available: 10%\\nfeatureGates:\\n  CSIMigrationGCE: true\\n  DisableKubeletCloudCredentialProviders: false\\n  DynamicKubeletConfig: false\\n  ExecProbeTimeout: false\\n  InTreePluginAWSUnregister: true\\n  InTreePluginAzureDiskUnregister: true\\n  InTreePluginOpenStackUnregister: true\\n  InTreePluginvSphereUnregister: true\\n  RotateKubeletServerCertificate: true\\nkernelMemcgNotification: true\\nkind: KubeletConfiguration\\nkubeReserved:\\n  cpu: 1060m\\n  ephemeral-storage: 41Gi\\n  memory: 1019Mi\\nreadOnlyPort: 10255\\nserverTLSBootstrap: true\\nstaticPodPath: /etc/kubernetes/manifests\\n\"\n            },\n            {\n              \"key\": \"kube-labels\",\n              \"value\": \"cloud.google.com/gke-boot-disk=pd-standard,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-netd-ready=true,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/machine-family=e2,iam.gke.io/gke-metadata-server-enabled=true\"\n            },\n            {\n              \"key\": \"serial-port-logging-enable\",\n              \"value\": \"true\"\n            }\n          ],\n          \"kind\": \"compute#metadata\"\n        },\n        \"networkInterfaces\": [\n          {\n            \"accessConfigs\": [\n              {\n                \"kind\": \"compute#accessConfig\",\n                \"name\": \"external-nat\",\n                \"networkTier\": \"PREMIUM\",\n                \"type\": \"ONE_TO_ONE_NAT\"\n              }\n            ],\n            \"kind\": \"compute#networkInterface\",\n            \"name\": \"nic0\",\n            \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n            \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default\"\n          }\n        ],\n        \"networkPerformanceConfig\": {\n          \"totalEgressBandwidthTier\": \"DEFAULT\"\n        },\n        \"scheduling\": {\n          \"automaticRestart\": true,\n          \"onHostMaintenance\": \"MIGRATE\",\n          \"preemptible\": false,\n          \"provisioningModel\": \"STANDARD\"\n        },\n        \"serviceAccounts\": [\n          {\n            \"email\": \"gke2sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com\",\n            \"scopes\": [\n              \"https://www.googleapis.com/auth/cloud-platform\"\n            ]\n          }\n        ],\n        \"shieldedInstanceConfig\": {\n          \"enableIntegrityMonitoring\": true,\n          \"enableSecureBoot\": false,\n          \"enableVtpm\": true\n        },\n        \"tags\": {\n          \"items\": [\n            \"gke-gke2-custom-tag\",\n            \"gke-gke2-12cd17cd-node\"\n          ]\n        }\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/instanceTemplates/gke-gke2-default-pool-ce8825d8\"\n    },\n    {\n      \"creationTimestamp\": \"2023-05-08T09:43:19.158-07:00\",\n      \"description\": \"\",\n      \"id\": \"6861440528873199688\",\n      \"kind\": \"compute#instanceTemplate\",\n      \"name\": \"gke-gke3-default-pool-afabcbd4\",\n      \"properties\": {\n        \"canIpForward\": true,\n        \"disks\": [\n          {\n            \"autoDelete\": true,\n            \"boot\": true,\n            \"deviceName\": \"persistent-disk-0\",\n            \"index\": 0,\n            \"initializeParams\": {\n              \"diskSizeGb\": \"100\",\n              \"diskType\": \"pd-balanced\",\n              \"labels\": {\n                \"goog-gke-node\": \"\",\n                \"goog-gke-volume\": \"\"\n              },\n              \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-1257-gke1000-cos-101-17162-127-27-v230314-c-cgpv1-pre\"\n            },\n            \"kind\": \"compute#attachedDisk\",\n            \"mode\": \"READ_WRITE\",\n            \"type\": \"PERSISTENT\"\n          }\n        ],\n        \"labels\": {\n          \"goog-gke-node\": \"\"\n        },\n        \"machineType\": \"e2-medium\",\n        \"metadata\": {\n          \"fingerprint\": \"REDACTED\",\n          \"items\": [\n            {\n              \"key\": \"disable-legacy-endpoints\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"cluster-uid\",\n              \"value\": \"15974e2390f34be183a43aa73aae86c5ac5363817bec4b4b82064a0bc5b3d3b6\"\n            },\n            {\n              \"key\": \"kube-labels\",\n              \"value\": \"cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=e2,cloud.google.com/private-node=false\"\n            },\n            {\n              \"key\": \"gci-update-strategy\",\n              \"value\": \"update_disabled\"\n            },\n            {\n              \"key\": \"kubelet-config\",\n              \"value\": \"apiVersion: kubelet.config.k8s.io/v1beta1\\nauthentication:\\n  anonymous:\\n    enabled: false\\n  webhook:\\n    enabled: true\\n  x509:\\n    clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\\nauthorization:\\n  mode: Webhook\\ncgroupRoot: /\\nclusterDNS:\\n- 10.1.16.10\\nclusterDomain: cluster.local\\nenableDebuggingHandlers: true\\nevictionHard:\\n  memory.available: 100Mi\\n  nodefs.available: 10%\\n  nodefs.inodesFree: 5%\\n  pid.available: 10%\\nfeatureGates:\\n  CSIMigrationGCE: true\\n  DisableKubeletCloudCredentialProviders: false\\n  DynamicKubeletConfig: false\\n  ExecProbeTimeout: false\\n  InTreePluginAWSUnregister: true\\n  InTreePluginAzureDiskUnregister: true\\n  InTreePluginOpenStackUnregister: true\\n  InTreePluginvSphereUnregister: true\\n  RotateKubeletServerCertificate: true\\nkernelMemcgNotification: true\\nkind: KubeletConfiguration\\nkubeReserved:\\n  cpu: 1060m\\n  ephemeral-storage: 41Gi\\n  memory: 1019Mi\\nreadOnlyPort: 10255\\nserverTLSBootstrap: true\\nstaticPodPath: /etc/kubernetes/manifests\\n\"\n            },\n            {\n              \"key\": \"cluster-name\",\n              \"value\": \"gke3\"\n            },\n            {\n              \"key\": \"google-compute-enable-pcid\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"serial-port-logging-enable\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"user-data\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"kube-env\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"gci-metrics-enabled\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"kubeconfig\",\n              \"value\": \"apiVersion: v1\\nkind: Config\\nclusters:\\n- cluster:\\n    server: https://10.164.15.229\\n    certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\\n  name: default-cluster\\ncontexts:\\n- context:\\n    cluster: default-cluster\\n    namespace: default\\n    user: exec-plugin-auth\\n  name: default-context\\ncurrent-context: default-context\\nusers:\\n- name: exec-plugin-auth\\n  user:\\n    exec:\\n      apiVersion: \\\"client.authentication.k8s.io/v1beta1\\\"\\n      command: '/home/kubernetes/bin/gke-exec-auth-plugin'\\n      args: [\\\"--cache-dir\\\", '/var/lib/kubelet/pki/']\\n\"\n            },\n            {\n              \"key\": \"cluster-location\",\n              \"value\": \"europe-west4\"\n            },\n            {\n              \"key\": \"configure-sh\",\n              \"value\": \"REDACTED\"\n            }\n          ],\n          \"kind\": \"compute#metadata\"\n        },\n        \"networkInterfaces\": [\n          {\n            \"accessConfigs\": [\n              {\n                \"kind\": \"compute#accessConfig\",\n                \"name\": \"external-nat\",\n                \"networkTier\": \"PREMIUM\",\n                \"type\": \"ONE_TO_ONE_NAT\"\n              }\n            ],\n            \"kind\": \"compute#networkInterface\",\n            \"name\": \"nic0\",\n            \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n            \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default\"\n          }\n        ],\n        \"networkPerformanceConfig\": {\n          \"totalEgressBandwidthTier\": \"DEFAULT\"\n        },\n        \"scheduling\": {\n          \"automaticRestart\": true,\n          \"onHostMaintenance\": \"MIGRATE\",\n          \"preemptible\": false,\n          \"provisioningModel\": \"STANDARD\"\n        },\n        \"serviceAccounts\": [\n          {\n            \"email\": \"gke3sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com\",\n            \"scopes\": [\n              \"https://www.googleapis.com/auth/cloud-platform\"\n            ]\n          }\n        ],\n        \"shieldedInstanceConfig\": {\n          \"enableIntegrityMonitoring\": true,\n          \"enableSecureBoot\": false,\n          \"enableVtpm\": true\n        },\n        \"tags\": {\n          \"items\": [\n            \"gke-gke3-15974e23-node\"\n          ]\n        }\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/instanceTemplates/gke-gke3-default-pool-afabcbd4\"\n    },\n    {\n      \"creationTimestamp\": \"2023-05-08T09:43:19.493-07:00\",\n      \"description\": \"\",\n      \"id\": \"3234518948673525832\",\n      \"kind\": \"compute#instanceTemplate\",\n      \"name\": \"gke-gke3-default-pool-bf4b1ef1\",\n      \"properties\": {\n        \"canIpForward\": true,\n        \"disks\": [\n          {\n            \"autoDelete\": true,\n            \"boot\": true,\n            \"deviceName\": \"persistent-disk-0\",\n            \"index\": 0,\n            \"initializeParams\": {\n              \"diskSizeGb\": \"100\",\n              \"diskType\": \"pd-balanced\",\n              \"labels\": {\n                \"goog-gke-node\": \"\",\n                \"goog-gke-volume\": \"\"\n              },\n              \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-1257-gke1000-cos-101-17162-127-27-v230314-c-cgpv1-pre\"\n            },\n            \"kind\": \"compute#attachedDisk\",\n            \"mode\": \"READ_WRITE\",\n            \"type\": \"PERSISTENT\"\n          }\n        ],\n        \"labels\": {\n          \"goog-gke-node\": \"\"\n        },\n        \"machineType\": \"e2-medium\",\n        \"metadata\": {\n          \"fingerprint\": \"REDACTED\",\n          \"items\": [\n            {\n              \"key\": \"user-data\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"kube-env\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"serial-port-logging-enable\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"cluster-location\",\n              \"value\": \"europe-west4\"\n            },\n            {\n              \"key\": \"configure-sh\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"gci-metrics-enabled\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"kubeconfig\",\n              \"value\": \"apiVersion: v1\\nkind: Config\\nclusters:\\n- cluster:\\n    server: https://10.164.15.229\\n    certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\\n  name: default-cluster\\ncontexts:\\n- context:\\n    cluster: default-cluster\\n    namespace: default\\n    user: exec-plugin-auth\\n  name: default-context\\ncurrent-context: default-context\\nusers:\\n- name: exec-plugin-auth\\n  user:\\n    exec:\\n      apiVersion: \\\"client.authentication.k8s.io/v1beta1\\\"\\n      command: '/home/kubernetes/bin/gke-exec-auth-plugin'\\n      args: [\\\"--cache-dir\\\", '/var/lib/kubelet/pki/']\\n\"\n            },\n            {\n              \"key\": \"cluster-uid\",\n              \"value\": \"15974e2390f34be183a43aa73aae86c5ac5363817bec4b4b82064a0bc5b3d3b6\"\n            },\n            {\n              \"key\": \"kube-labels\",\n              \"value\": \"cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=e2,cloud.google.com/private-node=false\"\n            },\n            {\n              \"key\": \"disable-legacy-endpoints\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"cluster-name\",\n              \"value\": \"gke3\"\n            },\n            {\n              \"key\": \"google-compute-enable-pcid\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"gci-update-strategy\",\n              \"value\": \"update_disabled\"\n            },\n            {\n              \"key\": \"kubelet-config\",\n              \"value\": \"apiVersion: kubelet.config.k8s.io/v1beta1\\nauthentication:\\n  anonymous:\\n    enabled: false\\n  webhook:\\n    enabled: true\\n  x509:\\n    clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\\nauthorization:\\n  mode: Webhook\\ncgroupRoot: /\\nclusterDNS:\\n- 10.1.16.10\\nclusterDomain: cluster.local\\nenableDebuggingHandlers: true\\nevictionHard:\\n  memory.available: 100Mi\\n  nodefs.available: 10%\\n  nodefs.inodesFree: 5%\\n  pid.available: 10%\\nfeatureGates:\\n  CSIMigrationGCE: true\\n  DisableKubeletCloudCredentialProviders: false\\n  DynamicKubeletConfig: false\\n  ExecProbeTimeout: false\\n  InTreePluginAWSUnregister: true\\n  InTreePluginAzureDiskUnregister: true\\n  InTreePluginOpenStackUnregister: true\\n  InTreePluginvSphereUnregister: true\\n  RotateKubeletServerCertificate: true\\nkernelMemcgNotification: true\\nkind: KubeletConfiguration\\nkubeReserved:\\n  cpu: 1060m\\n  ephemeral-storage: 41Gi\\n  memory: 1019Mi\\nreadOnlyPort: 10255\\nserverTLSBootstrap: true\\nstaticPodPath: /etc/kubernetes/manifests\\n\"\n            }\n          ],\n          \"kind\": \"compute#metadata\"\n        },\n        \"networkInterfaces\": [\n          {\n            \"accessConfigs\": [\n              {\n                \"kind\": \"compute#accessConfig\",\n                \"name\": \"external-nat\",\n                \"networkTier\": \"PREMIUM\",\n                \"type\": \"ONE_TO_ONE_NAT\"\n              }\n            ],\n            \"kind\": \"compute#networkInterface\",\n            \"name\": \"nic0\",\n            \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n            \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default\"\n          }\n        ],\n        \"networkPerformanceConfig\": {\n          \"totalEgressBandwidthTier\": \"DEFAULT\"\n        },\n        \"scheduling\": {\n          \"automaticRestart\": true,\n          \"onHostMaintenance\": \"MIGRATE\",\n          \"preemptible\": false,\n          \"provisioningModel\": \"STANDARD\"\n        },\n        \"serviceAccounts\": [\n          {\n            \"email\": \"gke3sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com\",\n            \"scopes\": [\n              \"https://www.googleapis.com/auth/cloud-platform\"\n            ]\n          }\n        ],\n        \"shieldedInstanceConfig\": {\n          \"enableIntegrityMonitoring\": true,\n          \"enableSecureBoot\": false,\n          \"enableVtpm\": true\n        },\n        \"tags\": {\n          \"items\": [\n            \"gke-gke3-15974e23-node\"\n          ]\n        }\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/instanceTemplates/gke-gke3-default-pool-bf4b1ef1\"\n    },\n    {\n      \"creationTimestamp\": \"2023-05-08T09:43:20.164-07:00\",\n      \"description\": \"\",\n      \"id\": \"2668028894228289607\",\n      \"kind\": \"compute#instanceTemplate\",\n      \"name\": \"gke-gke3-default-pool-feacc705\",\n      \"properties\": {\n        \"canIpForward\": true,\n        \"disks\": [\n          {\n            \"autoDelete\": true,\n            \"boot\": true,\n            \"deviceName\": \"persistent-disk-0\",\n            \"index\": 0,\n            \"initializeParams\": {\n              \"diskSizeGb\": \"100\",\n              \"diskType\": \"pd-balanced\",\n              \"labels\": {\n                \"goog-gke-node\": \"\",\n                \"goog-gke-volume\": \"\"\n              },\n              \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-1257-gke1000-cos-101-17162-127-27-v230314-c-cgpv1-pre\"\n            },\n            \"kind\": \"compute#attachedDisk\",\n            \"mode\": \"READ_WRITE\",\n            \"type\": \"PERSISTENT\"\n          }\n        ],\n        \"labels\": {\n          \"goog-gke-node\": \"\"\n        },\n        \"machineType\": \"e2-medium\",\n        \"metadata\": {\n          \"fingerprint\": \"REDACTED\",\n          \"items\": [\n            {\n              \"key\": \"user-data\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"kube-env\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"serial-port-logging-enable\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"kubeconfig\",\n              \"value\": \"apiVersion: v1\\nkind: Config\\nclusters:\\n- cluster:\\n    server: https://10.164.15.229\\n    certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\\n  name: default-cluster\\ncontexts:\\n- context:\\n    cluster: default-cluster\\n    namespace: default\\n    user: exec-plugin-auth\\n  name: default-context\\ncurrent-context: default-context\\nusers:\\n- name: exec-plugin-auth\\n  user:\\n    exec:\\n      apiVersion: \\\"client.authentication.k8s.io/v1beta1\\\"\\n      command: '/home/kubernetes/bin/gke-exec-auth-plugin'\\n      args: [\\\"--cache-dir\\\", '/var/lib/kubelet/pki/']\\n\"\n            },\n            {\n              \"key\": \"cluster-location\",\n              \"value\": \"europe-west4\"\n            },\n            {\n              \"key\": \"configure-sh\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"gci-metrics-enabled\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"cluster-uid\",\n              \"value\": \"15974e2390f34be183a43aa73aae86c5ac5363817bec4b4b82064a0bc5b3d3b6\"\n            },\n            {\n              \"key\": \"kube-labels\",\n              \"value\": \"cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=e2,cloud.google.com/private-node=false\"\n            },\n            {\n              \"key\": \"disable-legacy-endpoints\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"kubelet-config\",\n              \"value\": \"apiVersion: kubelet.config.k8s.io/v1beta1\\nauthentication:\\n  anonymous:\\n    enabled: false\\n  webhook:\\n    enabled: true\\n  x509:\\n    clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\\nauthorization:\\n  mode: Webhook\\ncgroupRoot: /\\nclusterDNS:\\n- 10.1.16.10\\nclusterDomain: cluster.local\\nenableDebuggingHandlers: true\\nevictionHard:\\n  memory.available: 100Mi\\n  nodefs.available: 10%\\n  nodefs.inodesFree: 5%\\n  pid.available: 10%\\nfeatureGates:\\n  CSIMigrationGCE: true\\n  DisableKubeletCloudCredentialProviders: false\\n  DynamicKubeletConfig: false\\n  ExecProbeTimeout: false\\n  InTreePluginAWSUnregister: true\\n  InTreePluginAzureDiskUnregister: true\\n  InTreePluginOpenStackUnregister: true\\n  InTreePluginvSphereUnregister: true\\n  RotateKubeletServerCertificate: true\\nkernelMemcgNotification: true\\nkind: KubeletConfiguration\\nkubeReserved:\\n  cpu: 1060m\\n  ephemeral-storage: 41Gi\\n  memory: 1019Mi\\nreadOnlyPort: 10255\\nserverTLSBootstrap: true\\nstaticPodPath: /etc/kubernetes/manifests\\n\"\n            },\n            {\n              \"key\": \"cluster-name\",\n              \"value\": \"gke3\"\n            },\n            {\n              \"key\": \"google-compute-enable-pcid\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"gci-update-strategy\",\n              \"value\": \"update_disabled\"\n            }\n          ],\n          \"kind\": \"compute#metadata\"\n        },\n        \"networkInterfaces\": [\n          {\n            \"accessConfigs\": [\n              {\n                \"kind\": \"compute#accessConfig\",\n                \"name\": \"external-nat\",\n                \"networkTier\": \"PREMIUM\",\n                \"type\": \"ONE_TO_ONE_NAT\"\n              }\n            ],\n            \"kind\": \"compute#networkInterface\",\n            \"name\": \"nic0\",\n            \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n            \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default\"\n          }\n        ],\n        \"networkPerformanceConfig\": {\n          \"totalEgressBandwidthTier\": \"DEFAULT\"\n        },\n        \"scheduling\": {\n          \"automaticRestart\": true,\n          \"onHostMaintenance\": \"MIGRATE\",\n          \"preemptible\": false,\n          \"provisioningModel\": \"STANDARD\"\n        },\n        \"serviceAccounts\": [\n          {\n            \"email\": \"gke3sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com\",\n            \"scopes\": [\n              \"https://www.googleapis.com/auth/cloud-platform\"\n            ]\n          }\n        ],\n        \"shieldedInstanceConfig\": {\n          \"enableIntegrityMonitoring\": true,\n          \"enableSecureBoot\": false,\n          \"enableVtpm\": true\n        },\n        \"tags\": {\n          \"items\": [\n            \"gke-gke3-15974e23-node\"\n          ]\n        }\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/instanceTemplates/gke-gke3-default-pool-feacc705\"\n    },\n    {\n      \"creationTimestamp\": \"2023-04-17T22:19:20.035-07:00\",\n      \"description\": \"\",\n      \"id\": \"3070886385521235639\",\n      \"kind\": \"compute#instanceTemplate\",\n      \"name\": \"gke-gke4-default-pool-4c934268\",\n      \"properties\": {\n        \"disks\": [\n          {\n            \"autoDelete\": true,\n            \"boot\": true,\n            \"deviceName\": \"persistent-disk-0\",\n            \"index\": 0,\n            \"initializeParams\": {\n              \"diskSizeGb\": \"100\",\n              \"diskType\": \"pd-standard\",\n              \"labels\": {\n                \"goog-gke-node\": \"\",\n                \"goog-gke-volume\": \"\"\n              },\n              \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-12410-gke2300-cos-97-16919-235-13-v230222-c-pre\"\n            },\n            \"kind\": \"compute#attachedDisk\",\n            \"mode\": \"READ_WRITE\",\n            \"type\": \"PERSISTENT\"\n          }\n        ],\n        \"labels\": {\n          \"goog-gke-node\": \"\"\n        },\n        \"machineType\": \"e2-medium\",\n        \"metadata\": {\n          \"fingerprint\": \"REDACTED\",\n          \"items\": [\n            {\n              \"key\": \"google-compute-enable-pcid\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"kubeconfig\",\n              \"value\": \"apiVersion: v1\\nkind: Config\\nclusters:\\n- cluster:\\n    server: https://10.0.1.2\\n    certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\\n  name: default-cluster\\ncontexts:\\n- context:\\n    cluster: default-cluster\\n    namespace: default\\n    user: exec-plugin-auth\\n  name: default-context\\ncurrent-context: default-context\\nusers:\\n- name: exec-plugin-auth\\n  user:\\n    exec:\\n      apiVersion: \\\"client.authentication.k8s.io/v1beta1\\\"\\n      command: '/home/kubernetes/bin/gke-exec-auth-plugin'\\n      args: [\\\"--cache-dir\\\", '/var/lib/kubelet/pki/']\\n\"\n            },\n            {\n              \"key\": \"serial-port-logging-enable\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"configure-sh\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"gci-update-strategy\",\n              \"value\": \"update_disabled\"\n            },\n            {\n              \"key\": \"user-data\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"gci-metrics-enabled\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"kubelet-config\",\n              \"value\": \"apiVersion: kubelet.config.k8s.io/v1beta1\\nauthentication:\\n  anonymous:\\n    enabled: false\\n  webhook:\\n    enabled: true\\n  x509:\\n    clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\\nauthorization:\\n  mode: Webhook\\ncgroupRoot: /\\nclusterDNS:\\n- 10.60.144.10\\nclusterDomain: cluster.local\\nenableDebuggingHandlers: true\\nevictionHard:\\n  memory.available: 100Mi\\n  nodefs.available: 10%\\n  nodefs.inodesFree: 5%\\n  pid.available: 10%\\nfeatureGates:\\n  CSIMigrationGCE: true\\n  DisableKubeletCloudCredentialProviders: false\\n  DynamicKubeletConfig: false\\n  ExecProbeTimeout: false\\n  InTreePluginAWSUnregister: true\\n  InTreePluginAzureDiskUnregister: true\\n  InTreePluginOpenStackUnregister: true\\n  InTreePluginvSphereUnregister: true\\n  RotateKubeletServerCertificate: true\\nkernelMemcgNotification: true\\nkind: KubeletConfiguration\\nkubeReserved:\\n  cpu: 1060m\\n  ephemeral-storage: 41Gi\\n  memory: 1019Mi\\nreadOnlyPort: 10255\\nserverTLSBootstrap: true\\nstaticPodPath: /etc/kubernetes/manifests\\n\"\n            },\n            {\n              \"key\": \"kube-labels\",\n              \"value\": \"cloud.google.com/gke-boot-disk=pd-standard,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-netd-ready=true,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/machine-family=e2,iam.gke.io/gke-metadata-server-enabled=true\"\n            },\n            {\n              \"key\": \"disable-legacy-endpoints\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"cluster-name\",\n              \"value\": \"gke4\"\n            },\n            {\n              \"key\": \"cluster-uid\",\n              \"value\": \"3520a9df187f4f07bb3eb43779a93e2b7f41daea55e74f62a45f6821abd9771e\"\n            },\n            {\n              \"key\": \"cluster-location\",\n              \"value\": \"europe-west4-a\"\n            },\n            {\n              \"key\": \"kube-env\",\n              \"value\": \"REDACTED\"\n            }\n          ],\n          \"kind\": \"compute#metadata\"\n        },\n        \"networkInterfaces\": [\n          {\n            \"aliasIpRanges\": [\n              {\n                \"ipCidrRange\": \"/24\",\n                \"subnetworkRangeName\": \"gke-gke4-pods-3520a9df\"\n              }\n            ],\n            \"kind\": \"compute#networkInterface\",\n            \"name\": \"nic0\",\n            \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n            \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default\"\n          }\n        ],\n        \"networkPerformanceConfig\": {\n          \"totalEgressBandwidthTier\": \"DEFAULT\"\n        },\n        \"scheduling\": {\n          \"automaticRestart\": true,\n          \"onHostMaintenance\": \"MIGRATE\",\n          \"preemptible\": false,\n          \"provisioningModel\": \"STANDARD\"\n        },\n        \"serviceAccounts\": [\n          {\n            \"email\": \"default\",\n            \"scopes\": [\n              \"https://www.googleapis.com/auth/devstorage.read_only\",\n              \"https://www.googleapis.com/auth/logging.write\",\n              \"https://www.googleapis.com/auth/monitoring\",\n              \"https://www.googleapis.com/auth/service.management.readonly\",\n              \"https://www.googleapis.com/auth/servicecontrol\",\n              \"https://www.googleapis.com/auth/trace.append\"\n            ]\n          }\n        ],\n        \"shieldedInstanceConfig\": {\n          \"enableIntegrityMonitoring\": true,\n          \"enableSecureBoot\": false,\n          \"enableVtpm\": true\n        },\n        \"tags\": {\n          \"items\": [\n            \"gke-gke4-3520a9df-node\"\n          ]\n        }\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/instanceTemplates/gke-gke4-default-pool-4c934268\"\n    },\n    {\n      \"creationTimestamp\": \"2023-05-08T09:00:24.820-07:00\",\n      \"description\": \"\",\n      \"id\": \"929784290130305655\",\n      \"kind\": \"compute#instanceTemplate\",\n      \"name\": \"gke-gke6-default-pool-d8412db4\",\n      \"properties\": {\n        \"canIpForward\": true,\n        \"disks\": [\n          {\n            \"autoDelete\": true,\n            \"boot\": true,\n            \"deviceName\": \"persistent-disk-0\",\n            \"index\": 0,\n            \"initializeParams\": {\n              \"diskSizeGb\": \"100\",\n              \"diskType\": \"pd-balanced\",\n              \"labels\": {\n                \"gcpdiag_test\": \"gke\",\n                \"goog-gke-node\": \"\",\n                \"goog-gke-volume\": \"\"\n              },\n              \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-1257-gke1000-cos-101-17162-127-27-v230314-c-cgpv1-nvda\"\n            },\n            \"kind\": \"compute#attachedDisk\",\n            \"mode\": \"READ_WRITE\",\n            \"type\": \"PERSISTENT\"\n          }\n        ],\n        \"guestAccelerators\": [\n          {\n            \"acceleratorCount\": 1,\n            \"acceleratorType\": \"nvidia-tesla-v100\"\n          }\n        ],\n        \"labels\": {\n          \"gcpdiag_test\": \"gke\",\n          \"goog-gke-node\": \"\"\n        },\n        \"machineType\": \"n1-standard-2\",\n        \"metadata\": {\n          \"fingerprint\": \"REDACTED\",\n          \"items\": [\n            {\n              \"key\": \"kube-env\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"kube-labels\",\n              \"value\": \"cloud.google.com/gke-accelerator=nvidia-tesla-v100,cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=n1,cloud.google.com/private-node=false\"\n            },\n            {\n              \"key\": \"google-compute-enable-pcid\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"configure-sh\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"kubeconfig\",\n              \"value\": \"apiVersion: v1\\nkind: Config\\nclusters:\\n- cluster:\\n    server: https://10.164.15.226\\n    certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\\n  name: default-cluster\\ncontexts:\\n- context:\\n    cluster: default-cluster\\n    namespace: default\\n    user: exec-plugin-auth\\n  name: default-context\\ncurrent-context: default-context\\nusers:\\n- name: exec-plugin-auth\\n  user:\\n    exec:\\n      apiVersion: \\\"client.authentication.k8s.io/v1beta1\\\"\\n      command: '/home/kubernetes/bin/gke-exec-auth-plugin'\\n      args: [\\\"--cache-dir\\\", '/var/lib/kubelet/pki/']\\n\"\n            },\n            {\n              \"key\": \"gci-metrics-enabled\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"disable-legacy-endpoints\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"cluster-name\",\n              \"value\": \"gke6\"\n            },\n            {\n              \"key\": \"cluster-uid\",\n              \"value\": \"ae0d671440334d958774869fae41fba7c463b87d933b485b982794440b09202e\"\n            },\n            {\n              \"key\": \"cluster-location\",\n              \"value\": \"europe-west4-a\"\n            },\n            {\n              \"key\": \"user-data\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"gci-update-strategy\",\n              \"value\": \"update_disabled\"\n            },\n            {\n              \"key\": \"kubelet-config\",\n              \"value\": \"apiVersion: kubelet.config.k8s.io/v1beta1\\nauthentication:\\n  anonymous:\\n    enabled: false\\n  webhook:\\n    enabled: true\\n  x509:\\n    clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\\nauthorization:\\n  mode: Webhook\\ncgroupRoot: /\\nclusterDNS:\\n- 10.15.240.10\\nclusterDomain: cluster.local\\nenableDebuggingHandlers: true\\nevictionHard:\\n  memory.available: 100Mi\\n  nodefs.available: 10%\\n  nodefs.inodesFree: 5%\\n  pid.available: 10%\\nfeatureGates:\\n  CSIMigrationGCE: true\\n  DevicePlugins: true\\n  DisableKubeletCloudCredentialProviders: false\\n  DynamicKubeletConfig: false\\n  ExecProbeTimeout: false\\n  GracefulNodeShutdown: true\\n  InTreePluginAWSUnregister: true\\n  InTreePluginAzureDiskUnregister: true\\n  InTreePluginOpenStackUnregister: true\\n  InTreePluginvSphereUnregister: true\\n  RotateKubeletServerCertificate: true\\nkernelMemcgNotification: true\\nkind: KubeletConfiguration\\nkubeReserved:\\n  cpu: 70m\\n  ephemeral-storage: 41Gi\\n  memory: 1736Mi\\nreadOnlyPort: 10255\\nserverTLSBootstrap: true\\nshutdownGracePeriod: 30s\\nshutdownGracePeriodCriticalPods: 15s\\nstaticPodPath: /etc/kubernetes/manifests\\n\"\n            },\n            {\n              \"key\": \"serial-port-logging-enable\",\n              \"value\": \"true\"\n            }\n          ],\n          \"kind\": \"compute#metadata\"\n        },\n        \"networkInterfaces\": [\n          {\n            \"accessConfigs\": [\n              {\n                \"kind\": \"compute#accessConfig\",\n                \"name\": \"external-nat\",\n                \"networkTier\": \"PREMIUM\",\n                \"type\": \"ONE_TO_ONE_NAT\"\n              }\n            ],\n            \"kind\": \"compute#networkInterface\",\n            \"name\": \"nic0\",\n            \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/default\",\n            \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default\"\n          }\n        ],\n        \"networkPerformanceConfig\": {\n          \"totalEgressBandwidthTier\": \"DEFAULT\"\n        },\n        \"scheduling\": {\n          \"automaticRestart\": true,\n          \"onHostMaintenance\": \"TERMINATE\",\n          \"preemptible\": false,\n          \"provisioningModel\": \"STANDARD\"\n        },\n        \"serviceAccounts\": [\n          {\n            \"email\": \"default\",\n            \"scopes\": [\n              \"https://www.googleapis.com/auth/devstorage.read_only\",\n              \"https://www.googleapis.com/auth/logging.write\",\n              \"https://www.googleapis.com/auth/monitoring\",\n              \"https://www.googleapis.com/auth/service.management.readonly\",\n              \"https://www.googleapis.com/auth/servicecontrol\",\n              \"https://www.googleapis.com/auth/trace.append\"\n            ]\n          }\n        ],\n        \"shieldedInstanceConfig\": {\n          \"enableIntegrityMonitoring\": true,\n          \"enableSecureBoot\": false,\n          \"enableVtpm\": true\n        },\n        \"tags\": {\n          \"items\": [\n            \"gke-gke6-ae0d6714-node\"\n          ]\n        }\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/instanceTemplates/gke-gke6-default-pool-d8412db4\"\n    }\n  ],\n  \"kind\": \"compute#instanceTemplateList\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/instanceTemplates\"\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/compute-zones.json",
    "content": "{\n  \"kind\": \"compute#zoneList\",\n  \"id\": \"projects/gcpdiag-gke1-aaaa/zones\",\n  \"items\": [\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2231\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east1-b\",\n      \"description\": \"us-east1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-east1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2233\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east1-c\",\n      \"description\": \"us-east1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-east1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2234\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east1-d\",\n      \"description\": \"us-east1-d\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-east1-d\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2272\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east4-c\",\n      \"description\": \"us-east4-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-east4-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2271\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east4-b\",\n      \"description\": \"us-east4-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-east4-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2270\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east4-a\",\n      \"description\": \"us-east4-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-east4-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2002\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1-c\",\n      \"description\": \"us-central1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-central1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2000\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1-a\",\n      \"description\": \"us-central1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-central1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2004\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1-f\",\n      \"description\": \"us-central1-f\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-central1-f\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2001\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1-b\",\n      \"description\": \"us-central1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-central1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2211\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west1-b\",\n      \"description\": \"us-west1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-west1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2212\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west1-c\",\n      \"description\": \"us-west1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-west1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2210\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west1-a\",\n      \"description\": \"us-west1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-west1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2342\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west4-a\",\n      \"description\": \"europe-west4-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2341\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west4-b\",\n      \"description\": \"europe-west4-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2340\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west4-c\",\n      \"description\": \"europe-west4-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2101\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west1-b\",\n      \"description\": \"europe-west1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2104\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west1-d\",\n      \"description\": \"europe-west1-d\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west1-d\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2103\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west1-c\",\n      \"description\": \"europe-west1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2300\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west3-c\",\n      \"description\": \"europe-west3-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west3-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2301\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west3-a\",\n      \"description\": \"europe-west3-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west3-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2302\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west3-b\",\n      \"description\": \"europe-west3-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west3-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2292\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west2-c\",\n      \"description\": \"europe-west2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2291\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west2-b\",\n      \"description\": \"europe-west2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2290\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west2-a\",\n      \"description\": \"europe-west2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2221\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east1-b\",\n      \"description\": \"asia-east1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-east1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2220\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east1-a\",\n      \"description\": \"asia-east1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-east1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2222\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east1-c\",\n      \"description\": \"asia-east1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-east1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2261\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast1-b\",\n      \"description\": \"asia-southeast1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-southeast1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2260\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast1-a\",\n      \"description\": \"asia-southeast1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-southeast1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2262\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast1-c\",\n      \"description\": \"asia-southeast1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-southeast1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Ice Lake\",\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2251\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast1-b\",\n      \"description\": \"asia-northeast1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-northeast1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2252\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast1-c\",\n      \"description\": \"asia-northeast1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-northeast1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2250\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast1-a\",\n      \"description\": \"asia-northeast1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-northeast1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2322\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south1-c\",\n      \"description\": \"asia-south1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-south1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2320\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south1-b\",\n      \"description\": \"asia-south1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-south1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2321\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south1-a\",\n      \"description\": \"asia-south1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-south1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2282\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast1-b\",\n      \"description\": \"australia-southeast1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/australia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/australia-southeast1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2280\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast1-c\",\n      \"description\": \"australia-southeast1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/australia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/australia-southeast1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2281\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast1-a\",\n      \"description\": \"australia-southeast1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/australia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/australia-southeast1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2311\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-east1-b\",\n      \"description\": \"southamerica-east1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/southamerica-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/southamerica-east1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2312\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-east1-c\",\n      \"description\": \"southamerica-east1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/southamerica-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/southamerica-east1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2310\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-east1-a\",\n      \"description\": \"southamerica-east1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/southamerica-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/southamerica-east1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2372\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east2-a\",\n      \"description\": \"asia-east2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-east2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-east2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2371\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east2-b\",\n      \"description\": \"asia-east2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-east2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-east2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2370\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east2-c\",\n      \"description\": \"asia-east2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-east2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-east2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2392\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast2-a\",\n      \"description\": \"asia-northeast2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-northeast2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2390\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast2-b\",\n      \"description\": \"asia-northeast2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-northeast2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2391\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast2-c\",\n      \"description\": \"asia-northeast2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-northeast2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2410\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast3-a\",\n      \"description\": \"asia-northeast3-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-northeast3-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2412\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast3-b\",\n      \"description\": \"asia-northeast3-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-northeast3-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2411\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast3-c\",\n      \"description\": \"asia-northeast3-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-northeast3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-northeast3-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2470\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south2-a\",\n      \"description\": \"asia-south2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-south2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-south2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2472\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south2-b\",\n      \"description\": \"asia-south2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-south2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-south2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2471\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south2-c\",\n      \"description\": \"asia-south2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-south2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-south2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2440\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast2-a\",\n      \"description\": \"asia-southeast2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-southeast2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2442\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast2-b\",\n      \"description\": \"asia-southeast2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-southeast2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2441\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast2-c\",\n      \"description\": \"asia-southeast2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/asia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/asia-southeast2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2480\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast2-a\",\n      \"description\": \"australia-southeast2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/australia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/australia-southeast2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2482\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast2-b\",\n      \"description\": \"australia-southeast2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/australia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/australia-southeast2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2481\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast2-c\",\n      \"description\": \"australia-southeast2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/australia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/australia-southeast2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2452\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-central2-a\",\n      \"description\": \"europe-central2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-central2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-central2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2450\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-central2-b\",\n      \"description\": \"europe-central2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-central2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-central2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2451\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-central2-c\",\n      \"description\": \"europe-central2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-central2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-central2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2352\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-north1-a\",\n      \"description\": \"europe-north1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-north1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-north1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2350\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-north1-b\",\n      \"description\": \"europe-north1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-north1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-north1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2351\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-north1-c\",\n      \"description\": \"europe-north1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-north1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-north1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2382\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west6-a\",\n      \"description\": \"europe-west6-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west6\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west6-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2380\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west6-b\",\n      \"description\": \"europe-west6-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west6\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west6-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2381\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west6-c\",\n      \"description\": \"europe-west6-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/europe-west6\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west6-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2330\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast1-a\",\n      \"description\": \"northamerica-northeast1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/northamerica-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/northamerica-northeast1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2331\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast1-b\",\n      \"description\": \"northamerica-northeast1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/northamerica-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/northamerica-northeast1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2332\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast1-c\",\n      \"description\": \"northamerica-northeast1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/northamerica-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/northamerica-northeast1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2461\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast2-a\",\n      \"description\": \"northamerica-northeast2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/northamerica-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/northamerica-northeast2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2460\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast2-b\",\n      \"description\": \"northamerica-northeast2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/northamerica-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/northamerica-northeast2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2462\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast2-c\",\n      \"description\": \"northamerica-northeast2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/northamerica-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/northamerica-northeast2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2490\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-west1-a\",\n      \"description\": \"southamerica-west1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/southamerica-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/southamerica-west1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2491\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-west1-b\",\n      \"description\": \"southamerica-west1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/southamerica-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/southamerica-west1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2492\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-west1-c\",\n      \"description\": \"southamerica-west1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/southamerica-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/southamerica-west1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2362\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west2-a\",\n      \"description\": \"us-west2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-west2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2361\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west2-b\",\n      \"description\": \"us-west2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-west2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2360\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west2-c\",\n      \"description\": \"us-west2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-west2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2420\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west3-a\",\n      \"description\": \"us-west3-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-west3-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2421\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west3-b\",\n      \"description\": \"us-west3-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-west3-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2422\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west3-c\",\n      \"description\": \"us-west3-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-west3-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2431\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west4-a\",\n      \"description\": \"us-west4-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-west4-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2432\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west4-b\",\n      \"description\": \"us-west4-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-west4-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2430\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west4-c\",\n      \"description\": \"us-west4-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/us-west4-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Skylake\",\n        \"Intel Broadwell\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": false\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones\"\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/container-clusters.json",
    "content": "{\n  \"clusters\": [\n    {\n      \"addonsConfig\": {\n        \"dnsCacheConfig\": {\n          \"enabled\": true\n        },\n        \"gcePersistentDiskCsiDriverConfig\": {\n          \"enabled\": true\n        },\n        \"gcpFilestoreCsiDriverConfig\": {\n          \"enabled\": true\n        },\n        \"kubernetesDashboard\": {\n          \"disabled\": true\n        },\n        \"networkPolicyConfig\": {\n          \"disabled\": true\n        }\n      },\n      \"autopilot\": {\n        \"enabled\": true\n      },\n      \"autoscaling\": {\n        \"autoprovisioningNodePoolDefaults\": {\n          \"imageType\": \"COS_CONTAINERD\",\n          \"management\": {\n            \"autoRepair\": true,\n            \"autoUpgrade\": true\n          },\n          \"oauthScopes\": [\n            \"https://www.googleapis.com/auth/devstorage.read_only\",\n            \"https://www.googleapis.com/auth/logging.write\",\n            \"https://www.googleapis.com/auth/monitoring\",\n            \"https://www.googleapis.com/auth/service.management.readonly\",\n            \"https://www.googleapis.com/auth/servicecontrol\",\n            \"https://www.googleapis.com/auth/trace.append\"\n          ],\n          \"serviceAccount\": \"default\",\n          \"upgradeSettings\": {\n            \"maxSurge\": 1,\n            \"strategy\": \"SURGE\"\n          }\n        },\n        \"autoscalingProfile\": \"OPTIMIZE_UTILIZATION\",\n        \"enableNodeAutoprovisioning\": true,\n        \"resourceLimits\": [\n          {\n            \"maximum\": \"1000000000\",\n            \"resourceType\": \"cpu\"\n          },\n          {\n            \"maximum\": \"1000000000\",\n            \"resourceType\": \"memory\"\n          },\n          {\n            \"maximum\": \"1000000000\",\n            \"resourceType\": \"nvidia-tesla-t4\"\n          },\n          {\n            \"maximum\": \"1000000000\",\n            \"resourceType\": \"nvidia-tesla-a100\"\n          }\n        ]\n      },\n      \"binaryAuthorization\": {},\n      \"clusterIpv4Cidr\": \"10.85.0.0/17\",\n      \"createTime\": \"2022-08-19T15:28:56+00:00\",\n      \"currentMasterVersion\": \"1.24.10-gke.2300\",\n      \"currentNodeVersion\": \"1.22.10-gke.600\",\n      \"databaseEncryption\": {\n        \"state\": \"DECRYPTED\"\n      },\n      \"defaultMaxPodsConstraint\": {\n        \"maxPodsPerNode\": \"110\"\n      },\n      \"endpoint\": \"192.168.1.1\",\n      \"etag\": \"8b60aa85-6f25-48c9-8a2d-36ee78653de2\",\n      \"id\": \"f7bb291d77f44570ae0359d00e3f2e68f276e232a4b84ff1b1b26b8875b26f46\",\n      \"initialClusterVersion\": \"1.22.10-gke.600\",\n      \"initialNodeCount\": 1,\n      \"ipAllocationPolicy\": {\n        \"clusterIpv4Cidr\": \"10.85.0.0/17\",\n        \"clusterIpv4CidrBlock\": \"10.85.0.0/17\",\n        \"clusterSecondaryRangeName\": \"gke-autopilot-gke1-pods-f7bb291d\",\n        \"podCidrOverprovisionConfig\": {},\n        \"servicesIpv4Cidr\": \"10.85.128.0/22\",\n        \"servicesIpv4CidrBlock\": \"10.85.128.0/22\",\n        \"servicesSecondaryRangeName\": \"gke-autopilot-gke1-services-f7bb291d\",\n        \"stackType\": \"IPV4\",\n        \"useIpAliases\": true\n      },\n      \"labelFingerprint\": \"a9dc16a7\",\n      \"legacyAbac\": {},\n      \"location\": \"europe-west4\",\n      \"locations\": [\n        \"europe-west4-a\",\n        \"europe-west4-c\",\n        \"europe-west4-b\"\n      ],\n      \"loggingConfig\": {\n        \"componentConfig\": {\n          \"enableComponents\": [\n            \"SYSTEM_COMPONENTS\",\n            \"WORKLOADS\"\n          ]\n        }\n      },\n      \"loggingService\": \"logging.googleapis.com/kubernetes\",\n      \"maintenancePolicy\": {\n        \"resourceVersion\": \"e3b0c442\"\n      },\n      \"masterAuth\": {\n        \"clusterCaCertificate\": \"REAL_CERTIFICATE\"\n      },\n      \"masterAuthorizedNetworksConfig\": {},\n      \"monitoringConfig\": {\n        \"componentConfig\": {\n          \"enableComponents\": [\n            \"SYSTEM_COMPONENTS\"\n          ]\n        }\n      },\n      \"monitoringService\": \"monitoring.googleapis.com/kubernetes\",\n      \"name\": \"autopilot-gke1\",\n      \"network\": \"default\",\n      \"networkConfig\": {\n        \"datapathProvider\": \"ADVANCED_DATAPATH\",\n        \"defaultSnatStatus\": {},\n        \"enableIntraNodeVisibility\": true,\n        \"network\": \"projects/gcpdiag-gke1-aaaa/global/networks/default\",\n        \"serviceExternalIpsConfig\": {},\n        \"subnetwork\": \"projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default\"\n      },\n      \"nodePoolAutoConfig\": {},\n      \"nodePoolDefaults\": {\n        \"nodeConfigDefaults\": {\n          \"loggingConfig\": {\n            \"variantConfig\": {\n              \"variant\": \"DEFAULT\"\n            }\n          }\n        }\n      },\n      \"notificationConfig\": {\n        \"pubsub\": {}\n      },\n      \"releaseChannel\": {\n        \"channel\": \"REGULAR\"\n      },\n      \"selfLink\": \"https://container.googleapis.com/v1/projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke1\",\n      \"servicesIpv4Cidr\": \"10.85.128.0/22\",\n      \"shieldedNodes\": {\n        \"enabled\": true\n      },\n      \"status\": \"RUNNING\",\n      \"subnetwork\": \"default\",\n      \"verticalPodAutoscaling\": {\n        \"enabled\": true\n      },\n      \"workloadIdentityConfig\": {\n        \"workloadPool\": \"gcpdiag-gke1-aaaa.svc.id.goog\"\n      },\n      \"zone\": \"europe-west4\"\n    },\n    {\n      \"addonsConfig\": {\n        \"dnsCacheConfig\": {\n          \"enabled\": true\n        },\n        \"gcePersistentDiskCsiDriverConfig\": {\n          \"enabled\": true\n        },\n        \"gcpFilestoreCsiDriverConfig\": {\n          \"enabled\": true\n        },\n        \"kubernetesDashboard\": {\n          \"disabled\": true\n        },\n        \"networkPolicyConfig\": {\n          \"disabled\": true\n        }\n      },\n      \"autopilot\": {\n        \"enabled\": true\n      },\n      \"autoscaling\": {\n        \"autoprovisioningNodePoolDefaults\": {\n          \"imageType\": \"COS_CONTAINERD\",\n          \"management\": {\n            \"autoRepair\": true,\n            \"autoUpgrade\": true\n          },\n          \"oauthScopes\": [\n            \"https://www.googleapis.com/auth/devstorage.read_only\",\n            \"https://www.googleapis.com/auth/logging.write\",\n            \"https://www.googleapis.com/auth/monitoring\",\n            \"https://www.googleapis.com/auth/service.management.readonly\",\n            \"https://www.googleapis.com/auth/servicecontrol\",\n            \"https://www.googleapis.com/auth/trace.append\"\n          ],\n          \"serviceAccount\": \"default\",\n          \"upgradeSettings\": {\n            \"maxSurge\": 1,\n            \"strategy\": \"SURGE\"\n          }\n        },\n        \"autoscalingProfile\": \"OPTIMIZE_UTILIZATION\",\n        \"enableNodeAutoprovisioning\": true,\n        \"resourceLimits\": [\n          {\n            \"maximum\": \"1000000000\",\n            \"resourceType\": \"cpu\"\n          },\n          {\n            \"maximum\": \"1000000000\",\n            \"resourceType\": \"memory\"\n          },\n          {\n            \"maximum\": \"1000000000\",\n            \"resourceType\": \"nvidia-tesla-t4\"\n          },\n          {\n            \"maximum\": \"1000000000\",\n            \"resourceType\": \"nvidia-tesla-a100\"\n          }\n        ]\n      },\n      \"binaryAuthorization\": {},\n      \"clusterIpv4Cidr\": \"10.60.0.0/17\",\n      \"createTime\": \"2022-08-19T15:28:56+00:00\",\n      \"currentMasterVersion\": \"1.24.10-gke.2300\",\n      \"currentNodeVersion\": \"1.22.10-gke.600\",\n      \"databaseEncryption\": {\n        \"state\": \"DECRYPTED\"\n      },\n      \"defaultMaxPodsConstraint\": {\n        \"maxPodsPerNode\": \"110\"\n      },\n      \"endpoint\": \"192.168.1.1\",\n      \"etag\": \"5c5acb64-fd26-48bf-bf01-957774ba59e0\",\n      \"id\": \"86b60f8aef344c66be3ce7bddacc99ca28e3b9690a9044e28be4b4c3c7d99941\",\n      \"initialClusterVersion\": \"1.22.10-gke.600\",\n      \"initialNodeCount\": 1,\n      \"ipAllocationPolicy\": {\n        \"clusterIpv4Cidr\": \"10.60.0.0/17\",\n        \"clusterIpv4CidrBlock\": \"10.60.0.0/17\",\n        \"clusterSecondaryRangeName\": \"gke-autopilot-gke2-pods-86b60f8a\",\n        \"podCidrOverprovisionConfig\": {},\n        \"servicesIpv4Cidr\": \"10.60.128.0/22\",\n        \"servicesIpv4CidrBlock\": \"10.60.128.0/22\",\n        \"servicesSecondaryRangeName\": \"gke-autopilot-gke2-services-86b60f8a\",\n        \"stackType\": \"IPV4\",\n        \"useIpAliases\": true\n      },\n      \"labelFingerprint\": \"a9dc16a7\",\n      \"legacyAbac\": {},\n      \"location\": \"europe-west4\",\n      \"locations\": [\n        \"europe-west4-c\",\n        \"europe-west4-b\",\n        \"europe-west4-a\"\n      ],\n      \"loggingConfig\": {\n        \"componentConfig\": {\n          \"enableComponents\": [\n            \"SYSTEM_COMPONENTS\",\n            \"WORKLOADS\"\n          ]\n        }\n      },\n      \"loggingService\": \"logging.googleapis.com/kubernetes\",\n      \"maintenancePolicy\": {\n        \"resourceVersion\": \"e3b0c442\"\n      },\n      \"masterAuth\": {\n        \"clusterCaCertificate\": \"REDACTED\"\n      },\n      \"masterAuthorizedNetworksConfig\": {},\n      \"monitoringConfig\": {\n        \"componentConfig\": {\n          \"enableComponents\": [\n            \"SYSTEM_COMPONENTS\"\n          ]\n        }\n      },\n      \"monitoringService\": \"monitoring.googleapis.com/kubernetes\",\n      \"name\": \"autopilot-gke2\",\n      \"network\": \"default\",\n      \"networkConfig\": {\n        \"datapathProvider\": \"ADVANCED_DATAPATH\",\n        \"defaultSnatStatus\": {},\n        \"enableIntraNodeVisibility\": true,\n        \"network\": \"projects/gcpdiag-gke1-aaaa/global/networks/default\",\n        \"serviceExternalIpsConfig\": {},\n        \"subnetwork\": \"projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default\"\n      },\n      \"nodePoolAutoConfig\": {},\n      \"nodePoolDefaults\": {\n        \"nodeConfigDefaults\": {\n          \"loggingConfig\": {\n            \"variantConfig\": {\n              \"variant\": \"DEFAULT\"\n            }\n          }\n        }\n      },\n      \"notificationConfig\": {\n        \"pubsub\": {}\n      },\n      \"privateClusterConfig\": {\n        \"enablePrivateNodes\": true,\n        \"masterIpv4CidrBlock\": \"172.16.114.128/28\",\n        \"peeringName\": \"gke-nc3da9ac52d810d8401c-8f66-920a-peer\",\n        \"privateEndpoint\": \"172.16.114.130\",\n        \"publicEndpoint\": \"34.147.14.62\"\n      },\n      \"releaseChannel\": {\n        \"channel\": \"REGULAR\"\n      },\n      \"selfLink\": \"https://container.googleapis.com/v1/projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/autopilot-gke2\",\n      \"servicesIpv4Cidr\": \"10.60.128.0/22\",\n      \"shieldedNodes\": {\n        \"enabled\": true\n      },\n      \"status\": \"RUNNING\",\n      \"subnetwork\": \"default\",\n      \"verticalPodAutoscaling\": {\n        \"enabled\": true\n      },\n      \"workloadIdentityConfig\": {\n        \"workloadPool\": \"gcpdiag-gke1-aaaa.svc.id.goog\"\n      },\n      \"zone\": \"europe-west4\"\n    },\n    {\n      \"addonsConfig\": {\n        \"gcePersistentDiskCsiDriverConfig\": {\n          \"enabled\": true\n        },\n        \"kubernetesDashboard\": {\n          \"disabled\": true\n        },\n        \"networkPolicyConfig\": {\n          \"disabled\": true\n        }\n      },\n      \"autopilot\": {},\n      \"autoscaling\": {\n        \"autoscalingProfile\": \"BALANCED\"\n      },\n      \"binaryAuthorization\": {},\n      \"clusterIpv4Cidr\": \"10.4.0.0/14\",\n      \"createTime\": \"2022-08-19T15:28:56+00:00\",\n      \"currentMasterVersion\": \"1.24.10-gke.2300\",\n      \"currentNodeCount\": 3,\n      \"currentNodeVersion\": \"1.24.10-gke.2300\",\n      \"databaseEncryption\": {\n        \"state\": \"DECRYPTED\"\n      },\n      \"endpoint\": \"192.168.1.1\",\n      \"etag\": \"eccc7396-ddce-4155-9123-02568890e1ba\",\n      \"id\": \"12cd17cd70b64fe2b23d17d17898c8161509f72746f94b0b949486fb5e07a22b\",\n      \"initialClusterVersion\": \"1.22.10-gke.600\",\n      \"initialNodeCount\": 1,\n      \"instanceGroupUrls\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-b/instanceGroupManagers/gke-gke2-default-pool-091396c6-grp\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke2-default-pool-dabb2ff4-grp\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-c/instanceGroupManagers/gke-gke2-default-pool-a09fb83d-grp\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-b/instanceGroupManagers/gke-gke2-low-pod-per-node-pool-519eee7b-grp\"\n      ],\n      \"ipAllocationPolicy\": {\n        \"podCidrOverprovisionConfig\": {},\n        \"stackType\": \"IPV4\",\n        \"useRoutes\": true\n      },\n      \"labelFingerprint\": \"a9dc16a7\",\n      \"legacyAbac\": {},\n      \"location\": \"europe-west4\",\n      \"locations\": [\n        \"europe-west4-b\",\n        \"europe-west4-a\",\n        \"europe-west4-c\"\n      ],\n      \"loggingConfig\": {\n        \"componentConfig\": {\n          \"enableComponents\": [\n            \"SYSTEM_COMPONENTS\"\n          ]\n        }\n      },\n      \"loggingService\": \"logging.googleapis.com/kubernetes\",\n      \"maintenancePolicy\": {\n        \"resourceVersion\": \"e3b0c442\"\n      },\n      \"masterAuth\": {\n        \"clusterCaCertificate\": \"REDACTED\"\n      },\n      \"masterAuthorizedNetworksConfig\": {},\n      \"monitoringConfig\": {\n        \"componentConfig\": {\n          \"enableComponents\": [\n            \"SYSTEM_COMPONENTS\"\n          ]\n        }\n      },\n      \"monitoringService\": \"monitoring.googleapis.com/kubernetes\",\n      \"name\": \"gke2\",\n      \"network\": \"default\",\n      \"networkConfig\": {\n        \"defaultSnatStatus\": {},\n        \"network\": \"projects/gcpdiag-gke1-aaaa/global/networks/default\",\n        \"serviceExternalIpsConfig\": {},\n        \"subnetwork\": \"projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default\"\n      },\n      \"nodeConfig\": {\n        \"diskSizeGb\": 100,\n        \"diskType\": \"pd-standard\",\n        \"imageType\": \"COS_CONTAINERD\",\n        \"machineType\": \"e2-medium\",\n        \"metadata\": {\n          \"disable-legacy-endpoints\": \"true\"\n        },\n        \"oauthScopes\": [\n          \"https://www.googleapis.com/auth/cloud-platform\"\n        ],\n        \"serviceAccount\": \"gke2sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com\",\n        \"shieldedInstanceConfig\": {\n          \"enableIntegrityMonitoring\": true\n        },\n        \"tags\": [\n          \"gke-gke2-custom-tag\"\n        ],\n        \"windowsNodeConfig\": {},\n        \"workloadMetadataConfig\": {\n          \"mode\": \"GKE_METADATA\"\n        }\n      },\n      \"nodeIpv4CidrSize\": 24,\n      \"nodePoolAutoConfig\": {},\n      \"nodePoolDefaults\": {\n        \"nodeConfigDefaults\": {\n          \"loggingConfig\": {\n            \"variantConfig\": {\n              \"variant\": \"DEFAULT\"\n            }\n          }\n        }\n      },\n      \"nodePools\": [\n        {\n          \"config\": {\n            \"diskSizeGb\": 100,\n            \"diskType\": \"pd-standard\",\n            \"imageType\": \"COS_CONTAINERD\",\n            \"machineType\": \"e2-medium\",\n            \"metadata\": {\n              \"disable-legacy-endpoints\": \"true\"\n            },\n            \"oauthScopes\": [\n              \"https://www.googleapis.com/auth/cloud-platform\"\n            ],\n            \"serviceAccount\": \"gke2sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com\",\n            \"shieldedInstanceConfig\": {\n              \"enableIntegrityMonitoring\": true\n            },\n            \"tags\": [\n              \"gke-gke2-custom-tag\"\n            ],\n            \"windowsNodeConfig\": {},\n            \"workloadMetadataConfig\": {\n              \"mode\": \"GKE_METADATA\"\n            }\n          },\n          \"etag\": \"4f238f16-6866-405c-975e-48b4c9366d73\",\n          \"initialNodeCount\": 1,\n          \"instanceGroupUrls\": [\n            \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-b/instanceGroupManagers/gke-gke2-default-pool-091396c6-grp\",\n            \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke2-default-pool-dabb2ff4-grp\",\n            \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-c/instanceGroupManagers/gke-gke2-default-pool-a09fb83d-grp\"\n          ],\n          \"locations\": [\n            \"europe-west4-b\",\n            \"europe-west4-a\",\n            \"europe-west4-c\"\n          ],\n          \"management\": {\n            \"autoRepair\": true,\n            \"autoUpgrade\": true\n          },\n          \"name\": \"default-pool\",\n          \"podIpv4CidrSize\": 24,\n          \"selfLink\": \"https://container.googleapis.com/v1/projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/default-pool\",\n          \"status\": \"RUNNING\",\n          \"upgradeSettings\": {\n            \"maxSurge\": 1,\n            \"strategy\": \"SURGE\"\n          },\n          \"version\": \"1.24.10-gke.2300\"\n        },\n        {\n          \"config\": {\n            \"diskSizeGb\": 100,\n            \"diskType\": \"pd-balanced\",\n            \"imageType\": \"COS_CONTAINERD\",\n            \"loggingConfig\": {},\n            \"machineType\": \"e2-medium\",\n            \"metadata\": {\n              \"disable-legacy-endpoints\": \"true\"\n            },\n            \"oauthScopes\": [\n              \"https://www.googleapis.com/auth/devstorage.read_only\",\n              \"https://www.googleapis.com/auth/logging.write\",\n              \"https://www.googleapis.com/auth/monitoring\",\n              \"https://www.googleapis.com/auth/service.management.readonly\",\n              \"https://www.googleapis.com/auth/servicecontrol\",\n              \"https://www.googleapis.com/auth/trace.append\"\n            ],\n            \"preemptible\": true,\n            \"serviceAccount\": \"default\",\n            \"shieldedInstanceConfig\": {\n              \"enableIntegrityMonitoring\": true\n            },\n            \"windowsNodeConfig\": {},\n            \"workloadMetadataConfig\": {\n              \"mode\": \"GKE_METADATA\"\n            }\n          },\n          \"etag\": \"3e7fc5da-4313-4ed0-a3a9-e3707335c456\",\n          \"initialNodeCount\": 1,\n          \"instanceGroupUrls\": [\n            \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-b/instanceGroupManagers/gke-gke2-low-pod-per-node-pool-519eee7b-grp\"\n          ],\n          \"locations\": [\n            \"europe-west4-b\"\n          ],\n          \"management\": {\n            \"autoRepair\": true,\n            \"autoUpgrade\": true\n          },\n          \"maxPodsConstraint\": {\n            \"maxPodsPerNode\": \"8\"\n          },\n          \"name\": \"low-pod-per-node-pool\",\n          \"networkConfig\": {\n            \"enablePrivateNodes\": false,\n            \"podIpv4CidrBlock\": \"10.112.0.0/14\",\n            \"podIpv4RangeUtilization\": 0.0029999999999999996,\n            \"podRange\": \"gke-gke2-pods-e13eff26\"\n          },\n          \"podIpv4CidrSize\": 28,\n          \"selfLink\": \"https://container.googleapis.com/v1/projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2/nodePools/low-pod-per-node-pool\",\n          \"status\": \"RUNNING\",\n          \"upgradeSettings\": {\n            \"maxSurge\": 1,\n            \"strategy\": \"SURGE\"\n          },\n          \"version\": \"1.24.10-gke.2300\"\n        }\n      ],\n      \"notificationConfig\": {\n        \"pubsub\": {}\n      },\n      \"releaseChannel\": {},\n      \"selfLink\": \"https://container.googleapis.com/v1/projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke2\",\n      \"servicesIpv4Cidr\": \"10.7.240.0/20\",\n      \"shieldedNodes\": {\n        \"enabled\": true\n      },\n      \"status\": \"RUNNING\",\n      \"subnetwork\": \"default\",\n      \"workloadIdentityConfig\": {\n        \"workloadPool\": \"gcpdiag-gke1-aaaa.svc.id.goog\"\n      },\n      \"zone\": \"europe-west4\"\n    },\n    {\n      \"addonsConfig\": {\n        \"gcePersistentDiskCsiDriverConfig\": {\n          \"enabled\": true\n        },\n        \"kubernetesDashboard\": {\n          \"disabled\": true\n        },\n        \"networkPolicyConfig\": {\n          \"disabled\": true\n        }\n      },\n      \"authenticatorGroupsConfig\": {\n        \"enabled\": true,\n        \"securityGroup\": \"gke-security-groups@gcpdiag.dev\"\n      },\n      \"autopilot\": {},\n      \"autoscaling\": {\n        \"autoscalingProfile\": \"BALANCED\"\n      },\n      \"binaryAuthorization\": {},\n      \"clusterIpv4Cidr\": \"10.1.0.0/19\",\n      \"createTime\": \"2023-05-08T16:42:26+00:00\",\n      \"currentMasterVersion\": \"1.25.7-gke.1000\",\n      \"currentNodeCount\": 15,\n      \"currentNodeVersion\": \"1.25.7-gke.1000\",\n      \"databaseEncryption\": {\n        \"state\": \"DECRYPTED\"\n      },\n      \"endpoint\": \"192.168.1.1\",\n      \"etag\": \"d717c164-0573-4667-a330-4324c508ddf4\",\n      \"id\": \"15974e2390f34be183a43aa73aae86c5ac5363817bec4b4b82064a0bc5b3d3b6\",\n      \"initialClusterVersion\": \"1.25.7-gke.1000\",\n      \"initialNodeCount\": 5,\n      \"instanceGroupUrls\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-c/instanceGroupManagers/gke-gke3-default-pool-feacc705-grp\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-b/instanceGroupManagers/gke-gke3-default-pool-afabcbd4-grp\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke3-default-pool-bf4b1ef1-grp\"\n      ],\n      \"ipAllocationPolicy\": {\n        \"podCidrOverprovisionConfig\": {},\n        \"stackType\": \"IPV4\",\n        \"useRoutes\": true\n      },\n      \"labelFingerprint\": \"a9dc16a7\",\n      \"legacyAbac\": {},\n      \"location\": \"europe-west4\",\n      \"locations\": [\n        \"europe-west4-c\",\n        \"europe-west4-b\",\n        \"europe-west4-a\"\n      ],\n      \"loggingConfig\": {\n        \"componentConfig\": {\n          \"enableComponents\": [\n            \"SYSTEM_COMPONENTS\",\n            \"WORKLOADS\"\n          ]\n        }\n      },\n      \"loggingService\": \"logging.googleapis.com/kubernetes\",\n      \"maintenancePolicy\": {\n        \"resourceVersion\": \"e3b0c442\"\n      },\n      \"masterAuth\": {\n        \"clusterCaCertificate\": \"REDACTED\"\n      },\n      \"masterAuthorizedNetworksConfig\": {\n        \"gcpPublicCidrsAccessEnabled\": true\n      },\n      \"monitoringConfig\": {\n        \"componentConfig\": {\n          \"enableComponents\": [\n            \"SYSTEM_COMPONENTS\"\n          ]\n        }\n      },\n      \"monitoringService\": \"monitoring.googleapis.com/kubernetes\",\n      \"name\": \"gke3\",\n      \"network\": \"default\",\n      \"networkConfig\": {\n        \"defaultSnatStatus\": {},\n        \"network\": \"projects/gcpdiag-gke1-aaaa/global/networks/default\",\n        \"serviceExternalIpsConfig\": {},\n        \"subnetwork\": \"projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default\"\n      },\n      \"nodeConfig\": {\n        \"diskSizeGb\": 100,\n        \"diskType\": \"pd-balanced\",\n        \"imageType\": \"COS_CONTAINERD\",\n        \"machineType\": \"e2-medium\",\n        \"metadata\": {\n          \"disable-legacy-endpoints\": \"true\"\n        },\n        \"oauthScopes\": [\n          \"https://www.googleapis.com/auth/cloud-platform\"\n        ],\n        \"serviceAccount\": \"gke3sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com\",\n        \"shieldedInstanceConfig\": {\n          \"enableIntegrityMonitoring\": true\n        },\n        \"windowsNodeConfig\": {}\n      },\n      \"nodeIpv4CidrSize\": 24,\n      \"nodePoolAutoConfig\": {},\n      \"nodePoolDefaults\": {\n        \"nodeConfigDefaults\": {\n          \"loggingConfig\": {\n            \"variantConfig\": {\n              \"variant\": \"DEFAULT\"\n            }\n          }\n        }\n      },\n      \"nodePools\": [\n        {\n          \"config\": {\n            \"diskSizeGb\": 100,\n            \"diskType\": \"pd-balanced\",\n            \"imageType\": \"COS_CONTAINERD\",\n            \"machineType\": \"e2-medium\",\n            \"metadata\": {\n              \"disable-legacy-endpoints\": \"true\"\n            },\n            \"oauthScopes\": [\n              \"https://www.googleapis.com/auth/cloud-platform\"\n            ],\n            \"serviceAccount\": \"gke3sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com\",\n            \"shieldedInstanceConfig\": {\n              \"enableIntegrityMonitoring\": true\n            },\n            \"windowsNodeConfig\": {}\n          },\n          \"etag\": \"82c2b78f-a556-4362-8704-a48cc414105a\",\n          \"initialNodeCount\": 5,\n          \"instanceGroupUrls\": [\n            \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-c/instanceGroupManagers/gke-gke3-default-pool-feacc705-grp\",\n            \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-b/instanceGroupManagers/gke-gke3-default-pool-afabcbd4-grp\",\n            \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke3-default-pool-bf4b1ef1-grp\"\n          ],\n          \"locations\": [\n            \"europe-west4-c\",\n            \"europe-west4-b\",\n            \"europe-west4-a\"\n          ],\n          \"management\": {\n            \"autoRepair\": true,\n            \"autoUpgrade\": true\n          },\n          \"name\": \"default-pool\",\n          \"networkConfig\": {\n            \"enablePrivateNodes\": false\n          },\n          \"podIpv4CidrSize\": 24,\n          \"selfLink\": \"https://container.googleapis.com/v1/projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3/nodePools/default-pool\",\n          \"status\": \"RUNNING\",\n          \"upgradeSettings\": {\n            \"maxSurge\": 1,\n            \"strategy\": \"SURGE\"\n          },\n          \"version\": \"1.25.7-gke.1000\"\n        }\n      ],\n      \"notificationConfig\": {\n        \"pubsub\": {}\n      },\n      \"privateClusterConfig\": {\n        \"privateEndpoint\": \"10.164.15.229\",\n        \"publicEndpoint\": \"34.32.132.248\"\n      },\n      \"releaseChannel\": {\n        \"channel\": \"REGULAR\"\n      },\n      \"selfLink\": \"https://container.googleapis.com/v1/projects/gcpdiag-gke1-aaaa/locations/europe-west4/clusters/gke3\",\n      \"servicesIpv4Cidr\": \"10.1.16.0/20\",\n      \"shieldedNodes\": {\n        \"enabled\": true\n      },\n      \"status\": \"RUNNING\",\n      \"subnetwork\": \"default\",\n      \"zone\": \"europe-west4\"\n    },\n    {\n      \"addonsConfig\": {\n        \"dnsCacheConfig\": {\n          \"enabled\": true\n        },\n        \"gcePersistentDiskCsiDriverConfig\": {\n          \"enabled\": true\n        },\n        \"httpLoadBalancing\": {\n          \"disabled\": true\n        },\n        \"kubernetesDashboard\": {\n          \"disabled\": true\n        },\n        \"networkPolicyConfig\": {\n          \"disabled\": true\n        }\n      },\n      \"autopilot\": {},\n      \"autoscaling\": {\n        \"autoscalingProfile\": \"BALANCED\"\n      },\n      \"binaryAuthorization\": {},\n      \"clusterIpv4Cidr\": \"192.168.1.0/24\",\n      \"createTime\": \"2023-05-09T19:40:22+00:00\",\n      \"currentMasterVersion\": \"1.25.7-gke.1000\",\n      \"currentNodeCount\": 1,\n      \"currentNodeVersion\": \"1.25.7-gke.1000\",\n      \"databaseEncryption\": {\n        \"state\": \"DECRYPTED\"\n      },\n      \"defaultMaxPodsConstraint\": {\n        \"maxPodsPerNode\": \"110\"\n      },\n      \"endpoint\": \"192.168.1.1\",\n      \"etag\": \"9893fa0a-b5e0-416b-b5e0-dd94aaa80db3\",\n      \"id\": \"c10b95be9dbb48d09af2e5c299c655c01f02e38cc157489eb8ec454d30b7ecb7\",\n      \"initialClusterVersion\": \"1.25.7-gke.1000\",\n      \"initialNodeCount\": 1,\n      \"instanceGroupUrls\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-671518f6-grp\"\n      ],\n      \"ipAllocationPolicy\": {\n        \"clusterIpv4Cidr\": \"192.168.1.0/24\",\n        \"clusterIpv4CidrBlock\": \"192.168.1.0/24\",\n        \"clusterSecondaryRangeName\": \"gke1-secondary-range-pod\",\n        \"podCidrOverprovisionConfig\": {},\n        \"servicesIpv4Cidr\": \"192.168.2.0/24\",\n        \"servicesIpv4CidrBlock\": \"192.168.2.0/24\",\n        \"servicesSecondaryRangeName\": \"gke1-secondary-range-svc\",\n        \"stackType\": \"IPV4\",\n        \"useIpAliases\": true\n      },\n      \"labelFingerprint\": \"780e2898\",\n      \"legacyAbac\": {},\n      \"location\": \"europe-west4-a\",\n      \"locations\": [\n        \"europe-west4-a\"\n      ],\n      \"loggingConfig\": {\n        \"componentConfig\": {}\n      },\n      \"loggingService\": \"none\",\n      \"maintenancePolicy\": {\n        \"resourceVersion\": \"e3b0c442\"\n      },\n      \"masterAuth\": {\n        \"clusterCaCertificate\": \"REDACTED\"\n      },\n      \"masterAuthorizedNetworksConfig\": {\n        \"gcpPublicCidrsAccessEnabled\": true\n      },\n      \"monitoringConfig\": {\n        \"componentConfig\": {}\n      },\n      \"monitoringService\": \"none\",\n      \"name\": \"gke1\",\n      \"network\": \"default\",\n      \"networkConfig\": {\n        \"defaultSnatStatus\": {},\n        \"network\": \"projects/gcpdiag-gke1-aaaa/global/networks/default\",\n        \"serviceExternalIpsConfig\": {},\n        \"subnetwork\": \"projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/gke1-subnet\"\n      },\n      \"nodeConfig\": {\n        \"diskSizeGb\": 100,\n        \"diskType\": \"pd-balanced\",\n        \"imageType\": \"COS_CONTAINERD\",\n        \"machineType\": \"e2-medium\",\n        \"metadata\": {\n          \"disable-legacy-endpoints\": \"true\"\n        },\n        \"oauthScopes\": [\n          \"https://www.googleapis.com/auth/devstorage.read_only\",\n          \"https://www.googleapis.com/auth/logging.write\",\n          \"https://www.googleapis.com/auth/monitoring\",\n          \"https://www.googleapis.com/auth/service.management.readonly\",\n          \"https://www.googleapis.com/auth/servicecontrol\",\n          \"https://www.googleapis.com/auth/trace.append\"\n        ],\n        \"serviceAccount\": \"default\",\n        \"shieldedInstanceConfig\": {\n          \"enableIntegrityMonitoring\": true\n        },\n        \"windowsNodeConfig\": {}\n      },\n      \"nodePoolAutoConfig\": {},\n      \"nodePoolDefaults\": {\n        \"nodeConfigDefaults\": {\n          \"loggingConfig\": {\n            \"variantConfig\": {\n              \"variant\": \"DEFAULT\"\n            }\n          }\n        }\n      },\n      \"nodePools\": [\n        {\n          \"config\": {\n            \"diskSizeGb\": 100,\n            \"diskType\": \"pd-balanced\",\n            \"imageType\": \"COS_CONTAINERD\",\n            \"machineType\": \"e2-medium\",\n            \"metadata\": {\n              \"disable-legacy-endpoints\": \"true\"\n            },\n            \"oauthScopes\": [\n              \"https://www.googleapis.com/auth/devstorage.read_only\",\n              \"https://www.googleapis.com/auth/logging.write\",\n              \"https://www.googleapis.com/auth/monitoring\",\n              \"https://www.googleapis.com/auth/service.management.readonly\",\n              \"https://www.googleapis.com/auth/servicecontrol\",\n              \"https://www.googleapis.com/auth/trace.append\"\n            ],\n            \"serviceAccount\": \"default\",\n            \"shieldedInstanceConfig\": {\n              \"enableIntegrityMonitoring\": true\n            },\n            \"windowsNodeConfig\": {}\n          },\n          \"etag\": \"fab6d275-ea28-40d6-90ca-bc52a13d038d\",\n          \"initialNodeCount\": 1,\n          \"instanceGroupUrls\": [\n            \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-671518f6-grp\"\n          ],\n          \"locations\": [\n            \"europe-west4-a\"\n          ],\n          \"management\": {\n            \"autoRepair\": true,\n            \"autoUpgrade\": true\n          },\n          \"maxPodsConstraint\": {\n            \"maxPodsPerNode\": \"110\"\n          },\n          \"name\": \"default-pool\",\n          \"networkConfig\": {\n            \"enablePrivateNodes\": false,\n            \"podIpv4CidrBlock\": \"192.168.1.0/24\",\n            \"podRange\": \"gke1-secondary-range-pod\"\n          },\n          \"podIpv4CidrSize\": 24,\n          \"selfLink\": \"https://container.googleapis.com/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1/nodePools/default-pool\",\n          \"status\": \"RUNNING\",\n          \"upgradeSettings\": {\n            \"maxSurge\": 1,\n            \"strategy\": \"SURGE\"\n          },\n          \"version\": \"1.25.7-gke.1000\"\n        }\n      ],\n      \"notificationConfig\": {\n        \"pubsub\": {}\n      },\n      \"privateClusterConfig\": {\n        \"privateEndpoint\": \"192.168.0.34\",\n        \"publicEndpoint\": \"34.32.229.86\"\n      },\n      \"releaseChannel\": {},\n      \"resourceLabels\": {\n        \"foo\": \"bar\"\n      },\n      \"selfLink\": \"https://container.googleapis.com/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke1\",\n      \"servicesIpv4Cidr\": \"192.168.2.0/24\",\n      \"shieldedNodes\": {\n        \"enabled\": true\n      },\n      \"status\": \"RUNNING\",\n      \"subnetwork\": \"gke1-subnet\",\n      \"zone\": \"europe-west4-a\"\n    },\n    {\n      \"addonsConfig\": {\n        \"gcePersistentDiskCsiDriverConfig\": {\n          \"enabled\": true\n        },\n        \"kubernetesDashboard\": {\n          \"disabled\": true\n        },\n        \"networkPolicyConfig\": {\n          \"disabled\": true\n        }\n      },\n      \"autopilot\": {},\n      \"autoscaling\": {\n        \"autoscalingProfile\": \"BALANCED\"\n      },\n      \"binaryAuthorization\": {},\n      \"clusterIpv4Cidr\": \"10.56.0.0/14\",\n      \"createTime\": \"2022-08-19T15:28:56+00:00\",\n      \"currentMasterVersion\": \"1.24.10-gke.2300\",\n      \"currentNodeCount\": 1,\n      \"currentNodeVersion\": \"1.24.10-gke.2300\",\n      \"databaseEncryption\": {\n        \"state\": \"DECRYPTED\"\n      },\n      \"defaultMaxPodsConstraint\": {\n        \"maxPodsPerNode\": \"110\"\n      },\n      \"endpoint\": \"192.168.1.1\",\n      \"etag\": \"f8017186-9d22-4a51-9a07-7fe1d555d5fd\",\n      \"id\": \"3520a9df187f4f07bb3eb43779a93e2b7f41daea55e74f62a45f6821abd9771e\",\n      \"initialClusterVersion\": \"1.22.10-gke.600\",\n      \"initialNodeCount\": 1,\n      \"instanceGroupUrls\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke4-default-pool-4c934268-grp\"\n      ],\n      \"ipAllocationPolicy\": {\n        \"clusterIpv4Cidr\": \"10.56.0.0/14\",\n        \"clusterIpv4CidrBlock\": \"10.56.0.0/14\",\n        \"clusterSecondaryRangeName\": \"gke-gke4-pods-3520a9df\",\n        \"podCidrOverprovisionConfig\": {},\n        \"servicesIpv4Cidr\": \"10.60.144.0/20\",\n        \"servicesIpv4CidrBlock\": \"10.60.144.0/20\",\n        \"servicesSecondaryRangeName\": \"gke-gke4-services-3520a9df\",\n        \"stackType\": \"IPV4\",\n        \"useIpAliases\": true\n      },\n      \"labelFingerprint\": \"a9dc16a7\",\n      \"legacyAbac\": {},\n      \"location\": \"europe-west4-a\",\n      \"locations\": [\n        \"europe-west4-a\"\n      ],\n      \"loggingConfig\": {\n        \"componentConfig\": {\n          \"enableComponents\": [\n            \"SYSTEM_COMPONENTS\",\n            \"WORKLOADS\"\n          ]\n        }\n      },\n      \"loggingService\": \"logging.googleapis.com/kubernetes\",\n      \"maintenancePolicy\": {\n        \"resourceVersion\": \"e3b0c442\"\n      },\n      \"masterAuth\": {\n        \"clusterCaCertificate\": \"REDACTED\"\n      },\n      \"masterAuthorizedNetworksConfig\": {},\n      \"monitoringConfig\": {\n        \"componentConfig\": {\n          \"enableComponents\": [\n            \"SYSTEM_COMPONENTS\"\n          ]\n        }\n      },\n      \"monitoringService\": \"monitoring.googleapis.com/kubernetes\",\n      \"name\": \"gke4\",\n      \"network\": \"default\",\n      \"networkConfig\": {\n        \"defaultSnatStatus\": {},\n        \"network\": \"projects/gcpdiag-gke1-aaaa/global/networks/default\",\n        \"serviceExternalIpsConfig\": {},\n        \"subnetwork\": \"projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default\"\n      },\n      \"nodeConfig\": {\n        \"diskSizeGb\": 100,\n        \"diskType\": \"pd-standard\",\n        \"imageType\": \"COS_CONTAINERD\",\n        \"machineType\": \"e2-medium\",\n        \"metadata\": {\n          \"disable-legacy-endpoints\": \"true\"\n        },\n        \"oauthScopes\": [\n          \"https://www.googleapis.com/auth/devstorage.read_only\",\n          \"https://www.googleapis.com/auth/logging.write\",\n          \"https://www.googleapis.com/auth/monitoring\",\n          \"https://www.googleapis.com/auth/service.management.readonly\",\n          \"https://www.googleapis.com/auth/servicecontrol\",\n          \"https://www.googleapis.com/auth/trace.append\"\n        ],\n        \"serviceAccount\": \"default\",\n        \"shieldedInstanceConfig\": {\n          \"enableIntegrityMonitoring\": true\n        },\n        \"windowsNodeConfig\": {},\n        \"workloadMetadataConfig\": {\n          \"mode\": \"GKE_METADATA\"\n        }\n      },\n      \"nodePoolAutoConfig\": {},\n      \"nodePoolDefaults\": {\n        \"nodeConfigDefaults\": {\n          \"loggingConfig\": {\n            \"variantConfig\": {\n              \"variant\": \"DEFAULT\"\n            }\n          }\n        }\n      },\n      \"nodePools\": [\n        {\n          \"config\": {\n            \"diskSizeGb\": 100,\n            \"diskType\": \"pd-standard\",\n            \"imageType\": \"COS_CONTAINERD\",\n            \"machineType\": \"e2-medium\",\n            \"metadata\": {\n              \"disable-legacy-endpoints\": \"true\"\n            },\n            \"oauthScopes\": [\n              \"https://www.googleapis.com/auth/devstorage.read_only\",\n              \"https://www.googleapis.com/auth/logging.write\",\n              \"https://www.googleapis.com/auth/monitoring\",\n              \"https://www.googleapis.com/auth/service.management.readonly\",\n              \"https://www.googleapis.com/auth/servicecontrol\",\n              \"https://www.googleapis.com/auth/trace.append\"\n            ],\n            \"serviceAccount\": \"default\",\n            \"shieldedInstanceConfig\": {\n              \"enableIntegrityMonitoring\": true\n            },\n            \"windowsNodeConfig\": {},\n            \"workloadMetadataConfig\": {\n              \"mode\": \"GKE_METADATA\"\n            }\n          },\n          \"etag\": \"c6fd15ab-c76f-4906-93f9-500f5e2a11d4\",\n          \"initialNodeCount\": 1,\n          \"instanceGroupUrls\": [\n            \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke4-default-pool-4c934268-grp\"\n          ],\n          \"locations\": [\n            \"europe-west4-a\"\n          ],\n          \"management\": {\n            \"autoRepair\": true,\n            \"autoUpgrade\": true\n          },\n          \"maxPodsConstraint\": {\n            \"maxPodsPerNode\": \"110\"\n          },\n          \"name\": \"default-pool\",\n          \"networkConfig\": {\n            \"podIpv4CidrBlock\": \"10.56.0.0/14\",\n            \"podRange\": \"gke-gke4-pods-3520a9df\"\n          },\n          \"podIpv4CidrSize\": 24,\n          \"selfLink\": \"https://container.googleapis.com/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4/nodePools/default-pool\",\n          \"status\": \"RUNNING\",\n          \"upgradeSettings\": {\n            \"maxSurge\": 1,\n            \"strategy\": \"SURGE\"\n          },\n          \"version\": \"1.24.10-gke.2300\"\n        }\n      ],\n      \"notificationConfig\": {\n        \"pubsub\": {}\n      },\n      \"privateClusterConfig\": {\n        \"enablePrivateNodes\": true,\n        \"masterIpv4CidrBlock\": \"10.0.1.0/28\",\n        \"peeringName\": \"gke-nc3da9ac52d810d8401c-d813-6d1b-peer\",\n        \"privateEndpoint\": \"10.0.1.2\",\n        \"publicEndpoint\": \"34.141.225.165\"\n      },\n      \"releaseChannel\": {\n        \"channel\": \"REGULAR\"\n      },\n      \"selfLink\": \"https://container.googleapis.com/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke4\",\n      \"servicesIpv4Cidr\": \"10.60.144.0/20\",\n      \"shieldedNodes\": {\n        \"enabled\": true\n      },\n      \"status\": \"RUNNING\",\n      \"subnetwork\": \"default\",\n      \"workloadIdentityConfig\": {\n        \"workloadPool\": \"gcpdiag-gke1-aaaa.svc.id.goog\"\n      },\n      \"zone\": \"europe-west4-a\"\n    },\n    {\n      \"addonsConfig\": {\n        \"gcePersistentDiskCsiDriverConfig\": {\n          \"enabled\": true\n        },\n        \"kubernetesDashboard\": {\n          \"disabled\": true\n        },\n        \"networkPolicyConfig\": {\n          \"disabled\": true\n        }\n      },\n      \"autopilot\": {},\n      \"autoscaling\": {\n        \"autoscalingProfile\": \"BALANCED\"\n      },\n      \"binaryAuthorization\": {},\n      \"clusterIpv4Cidr\": \"10.12.0.0/14\",\n      \"createTime\": \"2023-05-08T15:59:22+00:00\",\n      \"currentMasterVersion\": \"1.25.7-gke.1000\",\n      \"currentNodeCount\": 1,\n      \"currentNodeVersion\": \"1.25.7-gke.1000\",\n      \"databaseEncryption\": {\n        \"state\": \"DECRYPTED\"\n      },\n      \"endpoint\": \"192.168.1.1\",\n      \"etag\": \"8cc36b5c-ca56-40ae-899d-b76741c66dd5\",\n      \"id\": \"ae0d671440334d958774869fae41fba7c463b87d933b485b982794440b09202e\",\n      \"initialClusterVersion\": \"1.25.7-gke.1000\",\n      \"initialNodeCount\": 1,\n      \"instanceGroupUrls\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke6-default-pool-d8412db4-grp\"\n      ],\n      \"ipAllocationPolicy\": {\n        \"podCidrOverprovisionConfig\": {},\n        \"stackType\": \"IPV4\",\n        \"useRoutes\": true\n      },\n      \"labelFingerprint\": \"146a4cc6\",\n      \"legacyAbac\": {},\n      \"location\": \"europe-west4-a\",\n      \"locations\": [\n        \"europe-west4-a\"\n      ],\n      \"loggingConfig\": {\n        \"componentConfig\": {\n          \"enableComponents\": [\n            \"SYSTEM_COMPONENTS\",\n            \"WORKLOADS\"\n          ]\n        }\n      },\n      \"loggingService\": \"logging.googleapis.com/kubernetes\",\n      \"maintenancePolicy\": {\n        \"resourceVersion\": \"1e9f6cdb\",\n        \"window\": {\n          \"recurringWindow\": {\n            \"recurrence\": \"FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR\",\n            \"window\": {\n              \"endTime\": \"2023-02-01T17:00:00Z\",\n              \"startTime\": \"2023-02-01T09:00:00Z\"\n            }\n          }\n        }\n      },\n      \"masterAuth\": {\n        \"clusterCaCertificate\": \"REDACTED\"\n      },\n      \"masterAuthorizedNetworksConfig\": {\n        \"gcpPublicCidrsAccessEnabled\": true\n      },\n      \"monitoringConfig\": {\n        \"componentConfig\": {\n          \"enableComponents\": [\n            \"SYSTEM_COMPONENTS\"\n          ]\n        }\n      },\n      \"monitoringService\": \"monitoring.googleapis.com/kubernetes\",\n      \"name\": \"gke6\",\n      \"network\": \"default\",\n      \"networkConfig\": {\n        \"defaultSnatStatus\": {},\n        \"network\": \"projects/gcpdiag-gke1-aaaa/global/networks/default\",\n        \"serviceExternalIpsConfig\": {},\n        \"subnetwork\": \"projects/gcpdiag-gke1-aaaa/regions/europe-west4/subnetworks/default\"\n      },\n      \"nodeConfig\": {\n        \"accelerators\": [\n          {\n            \"acceleratorCount\": \"1\",\n            \"acceleratorType\": \"nvidia-tesla-v100\"\n          }\n        ],\n        \"diskSizeGb\": 100,\n        \"diskType\": \"pd-balanced\",\n        \"imageType\": \"COS_CONTAINERD\",\n        \"machineType\": \"n1-standard-2\",\n        \"metadata\": {\n          \"disable-legacy-endpoints\": \"true\"\n        },\n        \"oauthScopes\": [\n          \"https://www.googleapis.com/auth/devstorage.read_only\",\n          \"https://www.googleapis.com/auth/logging.write\",\n          \"https://www.googleapis.com/auth/monitoring\",\n          \"https://www.googleapis.com/auth/service.management.readonly\",\n          \"https://www.googleapis.com/auth/servicecontrol\",\n          \"https://www.googleapis.com/auth/trace.append\"\n        ],\n        \"serviceAccount\": \"default\",\n        \"shieldedInstanceConfig\": {\n          \"enableIntegrityMonitoring\": true\n        },\n        \"windowsNodeConfig\": {}\n      },\n      \"nodeIpv4CidrSize\": 24,\n      \"nodePoolAutoConfig\": {},\n      \"nodePoolDefaults\": {\n        \"nodeConfigDefaults\": {\n          \"loggingConfig\": {\n            \"variantConfig\": {\n              \"variant\": \"DEFAULT\"\n            }\n          }\n        }\n      },\n      \"nodePools\": [\n        {\n          \"config\": {\n            \"accelerators\": [\n              {\n                \"acceleratorCount\": \"1\",\n                \"acceleratorType\": \"nvidia-tesla-v100\"\n              }\n            ],\n            \"diskSizeGb\": 100,\n            \"diskType\": \"pd-balanced\",\n            \"imageType\": \"COS_CONTAINERD\",\n            \"machineType\": \"n1-standard-2\",\n            \"metadata\": {\n              \"disable-legacy-endpoints\": \"true\"\n            },\n            \"oauthScopes\": [\n              \"https://www.googleapis.com/auth/devstorage.read_only\",\n              \"https://www.googleapis.com/auth/logging.write\",\n              \"https://www.googleapis.com/auth/monitoring\",\n              \"https://www.googleapis.com/auth/service.management.readonly\",\n              \"https://www.googleapis.com/auth/servicecontrol\",\n              \"https://www.googleapis.com/auth/trace.append\"\n            ],\n            \"serviceAccount\": \"default\",\n            \"shieldedInstanceConfig\": {\n              \"enableIntegrityMonitoring\": true\n            },\n            \"windowsNodeConfig\": {}\n          },\n          \"etag\": \"aee17fa7-311c-44f8-ad80-9cdc338ec448\",\n          \"initialNodeCount\": 1,\n          \"instanceGroupUrls\": [\n            \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke6-default-pool-d8412db4-grp\"\n          ],\n          \"locations\": [\n            \"europe-west4-a\"\n          ],\n          \"management\": {\n            \"autoRepair\": true,\n            \"autoUpgrade\": true\n          },\n          \"name\": \"default-pool\",\n          \"networkConfig\": {\n            \"enablePrivateNodes\": false\n          },\n          \"podIpv4CidrSize\": 24,\n          \"selfLink\": \"https://container.googleapis.com/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6/nodePools/default-pool\",\n          \"status\": \"RUNNING\",\n          \"upgradeSettings\": {\n            \"maxSurge\": 1,\n            \"strategy\": \"SURGE\"\n          },\n          \"version\": \"1.25.7-gke.1000\"\n        }\n      ],\n      \"notificationConfig\": {\n        \"pubsub\": {}\n      },\n      \"privateClusterConfig\": {\n        \"privateEndpoint\": \"10.164.15.226\",\n        \"publicEndpoint\": \"34.90.127.139\"\n      },\n      \"releaseChannel\": {\n        \"channel\": \"REGULAR\"\n      },\n      \"resourceLabels\": {\n        \"gcpdiag_test\": \"gke\"\n      },\n      \"selfLink\": \"https://container.googleapis.com/v1/projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/clusters/gke6\",\n      \"servicesIpv4Cidr\": \"10.15.240.0/20\",\n      \"shieldedNodes\": {\n        \"enabled\": true\n      },\n      \"status\": \"RUNNING\",\n      \"subnetwork\": \"default\",\n      \"zone\": \"europe-west4-a\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/container-kubectl.json",
    "content": "{\n  \"gcpdiag-gke1-aaaa/europe-west4/autopilot-gke1\": {\n    \"resources\": [\n      {\n        \"kind\": \"Ingress\",\n        \"namespace\": \"default\",\n        \"name\": \"ingress-1\",\n        \"checks\": [\n          {\n            \"name\": \"ServiceExistenceCheck\",\n            \"message\": \"Service default/svc-1 found\",\n            \"result\": \"PASSED\"\n          },\n          {\n            \"name\": \"AppProtocolAnnotationCheck\",\n            \"message\": \"Service default/svc-1 does not have AppProtocolAnnotation\",\n            \"result\": \"SKIPPED\"\n          },\n          {\n            \"name\": \"BackendConfigAnnotationCheck\",\n            \"message\": \"BackendConfig annotation is valid in service default/svc-1\",\n            \"result\": \"PASSED\"\n          },\n          {\n            \"name\": \"BackendConfigExistenceCheck\",\n            \"message\": \"BackendConfig default/my-backendconfig in service default/svc-1 does not exist\",\n            \"result\": \"FAILED\"\n          }\n        ]\n      },\n      {\n        \"kind\": \"Ingress\",\n        \"namespace\": \"default\",\n        \"name\": \"ingress-2\",\n        \"checks\": [\n          {\n            \"name\": \"ServiceExistenceCheck\",\n            \"message\": \"Service default/svc-2 does not exist\",\n            \"result\": \"FAILED\"\n          }\n        ]\n      }\n    ]\n  }\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/container-server-config-europe-west4-a.json",
    "content": "{\n  \"defaultClusterVersion\": \"1.25.7-gke.1000\",\n  \"validNodeVersions\": [\n    \"1.26.3-gke.1000\",\n    \"1.26.3-gke.400\",\n    \"1.26.2-gke.1000\",\n    \"1.26.1-gke.1500\",\n    \"1.25.8-gke.1000\",\n    \"1.25.8-gke.500\",\n    \"1.25.7-gke.1000\",\n    \"1.25.6-gke.1000\",\n    \"1.25.6-gke.200\",\n    \"1.25.5-gke.2000\",\n    \"1.25.5-gke.1500\",\n    \"1.25.4-gke.2100\",\n    \"1.25.3-gke.800\",\n    \"1.24.12-gke.1000\",\n    \"1.24.12-gke.500\",\n    \"1.24.11-gke.1000\",\n    \"1.24.10-gke.2300\",\n    \"1.24.10-gke.1200\",\n    \"1.24.9-gke.3200\",\n    \"1.24.9-gke.2000\",\n    \"1.24.9-gke.1500\",\n    \"1.24.8-gke.2000\",\n    \"1.24.8-gke.401\",\n    \"1.24.7-gke.900\",\n    \"1.24.6-gke.1500\",\n    \"1.24.5-gke.600\",\n    \"1.24.4-gke.800\",\n    \"1.24.3-gke.2100\",\n    \"1.24.3-gke.900\",\n    \"1.24.3-gke.200\",\n    \"1.24.2-gke.1900\",\n    \"1.24.2-gke.300\",\n    \"1.24.1-gke.1800\",\n    \"1.24.1-gke.1400\",\n    \"1.23.17-gke.2000\",\n    \"1.23.17-gke.1700\",\n    \"1.23.17-gke.300\",\n    \"1.23.16-gke.2500\",\n    \"1.23.16-gke.1400\",\n    \"1.23.16-gke.1100\",\n    \"1.23.16-gke.200\",\n    \"1.23.15-gke.1900\",\n    \"1.23.15-gke.1400\",\n    \"1.23.14-gke.1800\",\n    \"1.23.14-gke.401\",\n    \"1.23.13-gke.900\",\n    \"1.23.12-gke.1600\",\n    \"1.23.12-gke.100\",\n    \"1.23.11-gke.300\",\n    \"1.23.10-gke.1000\",\n    \"1.23.9-gke.2100\",\n    \"1.23.9-gke.900\",\n    \"1.23.8-gke.1900\",\n    \"1.23.8-gke.400\",\n    \"1.23.7-gke.1400\",\n    \"1.23.6-gke.2200\",\n    \"1.23.6-gke.1700\",\n    \"1.23.6-gke.1501\",\n    \"1.23.6-gke.1500\",\n    \"1.23.5-gke.2400\",\n    \"1.23.5-gke.1503\",\n    \"1.23.5-gke.1501\",\n    \"1.22.17-gke.8000\",\n    \"1.22.17-gke.7500\",\n    \"1.22.17-gke.6100\",\n    \"1.22.17-gke.5400\",\n    \"1.22.17-gke.4300\",\n    \"1.22.17-gke.4000\",\n    \"1.22.17-gke.3100\",\n    \"1.22.17-gke.1900\",\n    \"1.22.17-gke.1400\",\n    \"1.22.16-gke.2000\",\n    \"1.22.16-gke.1300\",\n    \"1.22.15-gke.2500\",\n    \"1.22.15-gke.1000\",\n    \"1.22.15-gke.100\",\n    \"1.22.14-gke.300\",\n    \"1.22.13-gke.1000\",\n    \"1.22.12-gke.2300\",\n    \"1.22.12-gke.1200\",\n    \"1.22.12-gke.500\",\n    \"1.22.12-gke.300\",\n    \"1.22.11-gke.400\",\n    \"1.22.10-gke.600\",\n    \"1.22.9-gke.2000\",\n    \"1.22.9-gke.1500\",\n    \"1.22.9-gke.1300\",\n    \"1.22.8-gke.2200\",\n    \"1.22.8-gke.202\",\n    \"1.22.8-gke.201\",\n    \"1.22.8-gke.200\",\n    \"1.22.7-gke.1500\",\n    \"1.22.7-gke.1300\",\n    \"1.22.7-gke.900\",\n    \"1.22.7-gke.300\",\n    \"1.22.6-gke.1000\",\n    \"1.22.6-gke.300\",\n    \"1.22.4-gke.1501\",\n    \"1.22.3-gke.1500\",\n    \"1.21.14-gke.18800\",\n    \"1.21.14-gke.18100\",\n    \"1.21.14-gke.15800\",\n    \"1.21.14-gke.14600\",\n    \"1.21.14-gke.14100\",\n    \"1.21.14-gke.8500\",\n    \"1.21.14-gke.7100\",\n    \"1.21.14-gke.5300\",\n    \"1.21.14-gke.4300\",\n    \"1.21.14-gke.3000\",\n    \"1.21.14-gke.2700\",\n    \"1.21.14-gke.2100\",\n    \"1.21.14-gke.700\",\n    \"1.21.13-gke.900\",\n    \"1.21.12-gke.2200\",\n    \"1.21.12-gke.1700\",\n    \"1.21.12-gke.1500\",\n    \"1.21.11-gke.1900\",\n    \"1.21.11-gke.1100\",\n    \"1.21.11-gke.900\",\n    \"1.21.10-gke.2000\",\n    \"1.21.10-gke.1500\",\n    \"1.21.10-gke.1300\",\n    \"1.21.10-gke.400\",\n    \"1.21.9-gke.1002\",\n    \"1.21.9-gke.1001\",\n    \"1.21.9-gke.1000\",\n    \"1.21.9-gke.300\",\n    \"1.21.6-gke.1503\",\n    \"1.21.6-gke.1501\",\n    \"1.21.6-gke.1500\",\n    \"1.21.5-gke.1805\",\n    \"1.21.5-gke.1802\",\n    \"1.21.5-gke.1302\",\n    \"1.21.5-gke.1300\",\n    \"1.21.4-gke.2302\",\n    \"1.21.4-gke.2300\",\n    \"1.21.3-gke.2003\",\n    \"1.21.3-gke.2001\",\n    \"1.20.15-gke.13700\",\n    \"1.20.15-gke.13400\",\n    \"1.20.15-gke.12800\",\n    \"1.20.15-gke.11400\",\n    \"1.20.15-gke.9900\",\n    \"1.20.15-gke.8700\",\n    \"1.20.15-gke.8200\",\n    \"1.20.15-gke.8000\",\n    \"1.20.15-gke.6000\",\n    \"1.20.15-gke.5200\",\n    \"1.20.15-gke.5000\",\n    \"1.20.15-gke.4100\",\n    \"1.20.15-gke.3600\",\n    \"1.20.15-gke.3400\",\n    \"1.20.15-gke.2500\",\n    \"1.20.15-gke.1000\",\n    \"1.20.15-gke.300\",\n    \"1.20.12-gke.1500\",\n    \"1.20.11-gke.1801\",\n    \"1.20.11-gke.1300\",\n    \"1.20.10-gke.2100\",\n    \"1.20.10-gke.1600\",\n    \"1.20.10-gke.301\",\n    \"1.20.9-gke.2100\",\n    \"1.20.9-gke.1001\",\n    \"1.20.9-gke.1000\",\n    \"1.20.9-gke.701\",\n    \"1.20.9-gke.700\",\n    \"1.20.8-gke.2101\",\n    \"1.20.8-gke.2100\",\n    \"1.20.8-gke.900\",\n    \"1.20.8-gke.700\",\n    \"1.20.7-gke.2200\",\n    \"1.20.7-gke.1800\",\n    \"1.20.6-gke.1400\",\n    \"1.20.6-gke.1000\",\n    \"1.19.16-gke.15700\",\n    \"1.19.16-gke.14500\",\n    \"1.19.16-gke.14000\",\n    \"1.19.16-gke.13800\",\n    \"1.19.16-gke.11800\",\n    \"1.19.16-gke.11000\",\n    \"1.19.16-gke.10800\",\n    \"1.19.16-gke.9900\",\n    \"1.19.16-gke.9400\",\n    \"1.19.16-gke.9200\",\n    \"1.19.16-gke.8300\",\n    \"1.19.16-gke.6800\",\n    \"1.19.16-gke.6100\",\n    \"1.19.16-gke.3600\",\n    \"1.19.15-gke.1801\",\n    \"1.19.15-gke.1300\",\n    \"1.19.15-gke.500\",\n    \"1.19.14-gke.2300\",\n    \"1.19.14-gke.1900\",\n    \"1.19.14-gke.301\",\n    \"1.19.14-gke.300\",\n    \"1.19.13-gke.1900\",\n    \"1.19.13-gke.1200\",\n    \"1.19.13-gke.701\",\n    \"1.19.13-gke.700\",\n    \"1.19.12-gke.2101\",\n    \"1.19.12-gke.2100\",\n    \"1.19.12-gke.1100\",\n    \"1.19.12-gke.900\",\n    \"1.19.12-gke.700\",\n    \"1.19.11-gke.2101\",\n    \"1.19.11-gke.2100\",\n    \"1.19.11-gke.1701\",\n    \"1.19.11-gke.1700\",\n    \"1.19.10-gke.1701\",\n    \"1.19.10-gke.1700\",\n    \"1.19.10-gke.1601\",\n    \"1.19.10-gke.1600\",\n    \"1.19.10-gke.1001\",\n    \"1.19.10-gke.1000\",\n    \"1.19.9-gke.1900\",\n    \"1.19.9-gke.1400\",\n    \"1.19.9-gke.700\",\n    \"1.19.9-gke.100\",\n    \"1.19.8-gke.2000\",\n    \"1.19.8-gke.1600\",\n    \"1.19.8-gke.1000\",\n    \"1.19.7-gke.2503\",\n    \"1.19.7-gke.1500\",\n    \"1.19.7-gke.1302\",\n    \"1.19.7-gke.800\",\n    \"1.19.6-gke.1700\",\n    \"1.19.6-gke.1100\",\n    \"1.19.6-gke.600\",\n    \"1.18.20-gke.6101\",\n    \"1.18.20-gke.6000\",\n    \"1.18.20-gke.4501\",\n    \"1.18.20-gke.4500\",\n    \"1.18.20-gke.4100\",\n    \"1.18.20-gke.3300\",\n    \"1.18.20-gke.3001\",\n    \"1.18.20-gke.3000\",\n    \"1.18.20-gke.2300\",\n    \"1.18.20-gke.901\",\n    \"1.18.20-gke.900\",\n    \"1.18.20-gke.501\",\n    \"1.18.19-gke.2101\",\n    \"1.18.19-gke.2100\",\n    \"1.18.19-gke.1701\",\n    \"1.18.19-gke.1700\",\n    \"1.18.18-gke.1701\",\n    \"1.18.18-gke.1700\",\n    \"1.18.18-gke.1101\",\n    \"1.18.18-gke.1100\",\n    \"1.18.17-gke.1901\",\n    \"1.18.17-gke.1900\",\n    \"1.18.17-gke.1201\",\n    \"1.18.17-gke.1200\",\n    \"1.18.17-gke.700\",\n    \"1.18.17-gke.100\",\n    \"1.18.16-gke.2100\",\n    \"1.18.16-gke.1201\",\n    \"1.18.16-gke.1200\",\n    \"1.18.16-gke.502\",\n    \"1.18.16-gke.500\",\n    \"1.18.16-gke.302\",\n    \"1.18.16-gke.300\",\n    \"1.18.15-gke.2500\",\n    \"1.18.15-gke.1502\",\n    \"1.18.15-gke.1501\",\n    \"1.18.15-gke.1500\",\n    \"1.18.15-gke.1102\",\n    \"1.18.15-gke.1100\",\n    \"1.18.15-gke.800\",\n    \"1.18.14-gke.1600\",\n    \"1.18.14-gke.1200\",\n    \"1.18.12-gke.1210\",\n    \"1.18.12-gke.1206\",\n    \"1.18.12-gke.1205\",\n    \"1.18.12-gke.1201\",\n    \"1.18.12-gke.1200\",\n    \"1.18.12-gke.300\",\n    \"1.18.10-gke.2701\",\n    \"1.18.10-gke.2101\",\n    \"1.18.10-gke.1500\",\n    \"1.18.10-gke.601\",\n    \"1.18.9-gke.2501\",\n    \"1.18.9-gke.1501\",\n    \"1.18.9-gke.801\",\n    \"1.18.6-gke.4801\",\n    \"1.18.6-gke.3504\",\n    \"1.18.6-gke.3503\",\n    \"1.17.17-gke.9100\",\n    \"1.17.17-gke.8500\",\n    \"1.17.17-gke.8200\",\n    \"1.17.17-gke.7800\",\n    \"1.17.17-gke.7200\",\n    \"1.17.17-gke.6700\",\n    \"1.17.17-gke.6000\",\n    \"1.17.17-gke.5400\",\n    \"1.17.17-gke.4900\",\n    \"1.17.17-gke.4400\",\n    \"1.17.17-gke.3700\",\n    \"1.17.17-gke.3000\",\n    \"1.17.17-gke.2800\",\n    \"1.17.17-gke.2500\",\n    \"1.17.17-gke.1500\",\n    \"1.17.17-gke.1101\",\n    \"1.17.17-gke.1100\",\n    \"1.17.17-gke.600\",\n    \"1.17.16-gke.1600\",\n    \"1.17.16-gke.1300\",\n    \"1.17.15-gke.800\",\n    \"1.17.15-gke.300\",\n    \"1.17.14-gke.1600\",\n    \"1.17.14-gke.1200\",\n    \"1.17.14-gke.400\",\n    \"1.17.13-gke.2600\",\n    \"1.17.13-gke.2001\",\n    \"1.17.13-gke.1401\",\n    \"1.17.13-gke.1400\",\n    \"1.17.13-gke.600\",\n    \"1.17.12-gke.2502\",\n    \"1.17.12-gke.1504\",\n    \"1.17.12-gke.1501\",\n    \"1.17.12-gke.500\",\n    \"1.17.9-gke.6300\",\n    \"1.17.9-gke.1504\",\n    \"1.16.15-gke.14800\",\n    \"1.16.15-gke.12500\",\n    \"1.16.15-gke.11800\",\n    \"1.16.15-gke.10600\",\n    \"1.16.15-gke.7801\",\n    \"1.16.15-gke.7800\",\n    \"1.16.15-gke.7300\",\n    \"1.16.15-gke.6900\",\n    \"1.16.15-gke.6000\",\n    \"1.16.15-gke.5500\",\n    \"1.16.15-gke.4901\",\n    \"1.16.15-gke.4301\",\n    \"1.16.15-gke.4300\",\n    \"1.16.15-gke.3500\",\n    \"1.16.15-gke.2601\",\n    \"1.16.15-gke.1600\",\n    \"1.16.15-gke.500\",\n    \"1.16.13-gke.404\",\n    \"1.16.13-gke.403\",\n    \"1.16.13-gke.401\",\n    \"1.16.13-gke.400\",\n    \"1.16.13-gke.1\",\n    \"1.16.11-gke.5\",\n    \"1.16.10-gke.8\",\n    \"1.16.9-gke.6\",\n    \"1.16.9-gke.2\",\n    \"1.16.8-gke.15\",\n    \"1.16.8-gke.12\",\n    \"1.16.8-gke.9\",\n    \"1.15.12-gke.6002\",\n    \"1.15.12-gke.6001\",\n    \"1.15.12-gke.5000\",\n    \"1.15.12-gke.4002\",\n    \"1.15.12-gke.4000\",\n    \"1.15.12-gke.20\",\n    \"1.15.12-gke.17\",\n    \"1.15.12-gke.16\",\n    \"1.15.12-gke.13\",\n    \"1.15.12-gke.9\",\n    \"1.15.12-gke.6\",\n    \"1.15.12-gke.3\",\n    \"1.15.12-gke.2\",\n    \"1.15.11-gke.17\",\n    \"1.15.11-gke.15\",\n    \"1.15.11-gke.13\",\n    \"1.15.11-gke.12\",\n    \"1.15.11-gke.11\",\n    \"1.15.11-gke.9\",\n    \"1.15.11-gke.5\",\n    \"1.15.11-gke.3\",\n    \"1.15.11-gke.1\",\n    \"1.15.9-gke.26\",\n    \"1.15.9-gke.24\",\n    \"1.15.9-gke.22\",\n    \"1.15.9-gke.12\",\n    \"1.15.9-gke.9\",\n    \"1.15.9-gke.8\",\n    \"1.15.8-gke.3\",\n    \"1.15.8-gke.2\",\n    \"1.15.7-gke.23\",\n    \"1.15.7-gke.2\",\n    \"1.15.4-gke.22\",\n    \"1.14.10-gke.1504\",\n    \"1.14.10-gke.902\",\n    \"1.14.10-gke.50\",\n    \"1.14.10-gke.46\",\n    \"1.14.10-gke.45\",\n    \"1.14.10-gke.42\",\n    \"1.14.10-gke.41\",\n    \"1.14.10-gke.40\",\n    \"1.14.10-gke.37\",\n    \"1.14.10-gke.36\",\n    \"1.14.10-gke.34\",\n    \"1.14.10-gke.32\",\n    \"1.14.10-gke.31\",\n    \"1.14.10-gke.27\",\n    \"1.14.10-gke.24\",\n    \"1.14.10-gke.22\",\n    \"1.14.10-gke.21\",\n    \"1.14.10-gke.17\",\n    \"1.14.10-gke.0\",\n    \"1.14.9-gke.23\",\n    \"1.14.9-gke.2\",\n    \"1.14.9-gke.0\",\n    \"1.14.8-gke.33\",\n    \"1.14.8-gke.21\",\n    \"1.14.8-gke.18\",\n    \"1.14.8-gke.17\",\n    \"1.14.8-gke.14\",\n    \"1.14.8-gke.12\",\n    \"1.14.8-gke.7\",\n    \"1.14.8-gke.2\",\n    \"1.14.7-gke.40\",\n    \"1.14.7-gke.25\",\n    \"1.14.7-gke.23\",\n    \"1.14.7-gke.17\",\n    \"1.14.7-gke.14\",\n    \"1.14.7-gke.10\",\n    \"1.14.6-gke.13\",\n    \"1.14.6-gke.2\",\n    \"1.14.6-gke.1\",\n    \"1.14.3-gke.11\",\n    \"1.14.3-gke.10\",\n    \"1.14.3-gke.9\",\n    \"1.14.2-gke.9\",\n    \"1.14.1-gke.5\",\n    \"1.13.12-gke.30\",\n    \"1.13.12-gke.25\",\n    \"1.13.12-gke.17\",\n    \"1.13.12-gke.16\",\n    \"1.13.12-gke.14\",\n    \"1.13.12-gke.13\",\n    \"1.13.12-gke.10\",\n    \"1.13.12-gke.8\",\n    \"1.13.12-gke.4\",\n    \"1.13.12-gke.2\",\n    \"1.13.11-gke.23\",\n    \"1.13.11-gke.15\",\n    \"1.13.11-gke.14\",\n    \"1.13.11-gke.12\",\n    \"1.13.11-gke.11\",\n    \"1.13.11-gke.9\",\n    \"1.13.11-gke.5\",\n    \"1.13.10-gke.7\",\n    \"1.13.10-gke.0\",\n    \"1.13.9-gke.11\",\n    \"1.13.9-gke.3\",\n    \"1.13.7-gke.24\",\n    \"1.13.7-gke.19\",\n    \"1.13.7-gke.15\",\n    \"1.13.7-gke.8\",\n    \"1.13.7-gke.0\",\n    \"1.13.6-gke.13\",\n    \"1.13.6-gke.6\",\n    \"1.13.6-gke.5\",\n    \"1.13.6-gke.0\",\n    \"1.13.5-gke.10\",\n    \"1.12.10-gke.22\",\n    \"1.12.10-gke.20\",\n    \"1.12.10-gke.19\",\n    \"1.12.10-gke.18\",\n    \"1.12.10-gke.17\",\n    \"1.12.10-gke.15\",\n    \"1.12.10-gke.13\",\n    \"1.12.10-gke.11\",\n    \"1.12.10-gke.5\",\n    \"1.12.9-gke.16\",\n    \"1.12.9-gke.15\",\n    \"1.12.9-gke.13\",\n    \"1.12.9-gke.10\",\n    \"1.12.9-gke.7\",\n    \"1.12.9-gke.3\",\n    \"1.12.8-gke.12\",\n    \"1.12.8-gke.10\",\n    \"1.12.8-gke.7\",\n    \"1.12.8-gke.6\",\n    \"1.12.7-gke.26\",\n    \"1.12.7-gke.25\",\n    \"1.12.7-gke.24\",\n    \"1.12.7-gke.22\",\n    \"1.12.7-gke.21\",\n    \"1.12.7-gke.17\",\n    \"1.12.7-gke.10\",\n    \"1.12.7-gke.7\",\n    \"1.12.6-gke.11\",\n    \"1.12.6-gke.10\",\n    \"1.12.6-gke.7\",\n    \"1.12.5-gke.10\",\n    \"1.12.5-gke.5\",\n    \"1.11.10-gke.6\",\n    \"1.11.10-gke.5\"\n  ],\n  \"defaultImageType\": \"COS_CONTAINERD\",\n  \"validImageTypes\": [\n    \"COS_CONTAINERD\",\n    \"COS\",\n    \"UBUNTU\",\n    \"UBUNTU_CONTAINERD\",\n    \"WINDOWS_LTSC\",\n    \"WINDOWS_LTSC_CONTAINERD\",\n    \"WINDOWS_SAC\",\n    \"WINDOWS_SAC_CONTAINERD\"\n  ],\n  \"validMasterVersions\": [\n    \"1.26.3-gke.1000\",\n    \"1.26.2-gke.1000\",\n    \"1.25.8-gke.1000\",\n    \"1.25.8-gke.500\",\n    \"1.25.7-gke.1000\",\n    \"1.24.12-gke.1000\",\n    \"1.24.12-gke.500\",\n    \"1.24.11-gke.1000\",\n    \"1.24.10-gke.2300\",\n    \"1.24.10-gke.1200\",\n    \"1.24.9-gke.3200\",\n    \"1.23.17-gke.2000\",\n    \"1.23.17-gke.1700\",\n    \"1.23.17-gke.300\",\n    \"1.23.16-gke.2500\",\n    \"1.23.16-gke.1400\",\n    \"1.22.17-gke.8000\",\n    \"1.22.17-gke.7500\",\n    \"1.22.17-gke.6100\",\n    \"1.22.17-gke.5400\",\n    \"1.21.14-gke.18800\",\n    \"1.21.14-gke.18100\",\n    \"1.21.14-gke.15800\",\n    \"1.21.14-gke.8500\"\n  ],\n  \"channels\": [\n    {\n      \"channel\": \"RAPID\",\n      \"defaultVersion\": \"1.26.3-gke.400\",\n      \"validVersions\": [\n        \"1.26.3-gke.1000\",\n        \"1.26.3-gke.400\",\n        \"1.25.8-gke.1000\",\n        \"1.25.8-gke.500\",\n        \"1.24.12-gke.1000\",\n        \"1.23.17-gke.2000\",\n        \"1.23.17-gke.1700\",\n        \"1.23.17-gke.300\",\n        \"1.22.17-gke.8000\",\n        \"1.22.17-gke.7500\",\n        \"1.21.14-gke.18800\"\n      ]\n    },\n    {\n      \"channel\": \"REGULAR\",\n      \"defaultVersion\": \"1.25.7-gke.1000\",\n      \"validVersions\": [\n        \"1.26.2-gke.1000\",\n        \"1.25.7-gke.1000\",\n        \"1.24.11-gke.1000\",\n        \"1.24.10-gke.2300\",\n        \"1.23.17-gke.300\",\n        \"1.22.17-gke.6100\",\n        \"1.21.14-gke.18800\"\n      ]\n    },\n    {\n      \"channel\": \"STABLE\",\n      \"defaultVersion\": \"1.24.10-gke.2300\",\n      \"validVersions\": [\n        \"1.24.11-gke.1000\",\n        \"1.24.10-gke.2300\",\n        \"1.24.9-gke.3200\",\n        \"1.23.16-gke.1400\",\n        \"1.22.17-gke.5400\",\n        \"1.21.14-gke.18100\",\n        \"1.21.14-gke.15800\"\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/container-server-config-europe-west4.json",
    "content": "{\n  \"defaultClusterVersion\": \"1.25.7-gke.1000\",\n  \"validNodeVersions\": [\n    \"1.26.3-gke.1000\",\n    \"1.26.3-gke.400\",\n    \"1.26.2-gke.1000\",\n    \"1.26.1-gke.1500\",\n    \"1.25.8-gke.1000\",\n    \"1.25.8-gke.500\",\n    \"1.25.7-gke.1000\",\n    \"1.25.6-gke.1000\",\n    \"1.25.6-gke.200\",\n    \"1.25.5-gke.2000\",\n    \"1.25.5-gke.1500\",\n    \"1.25.4-gke.2100\",\n    \"1.25.3-gke.800\",\n    \"1.24.12-gke.1000\",\n    \"1.24.12-gke.500\",\n    \"1.24.11-gke.1000\",\n    \"1.24.10-gke.2300\",\n    \"1.24.10-gke.1200\",\n    \"1.24.9-gke.3200\",\n    \"1.24.9-gke.2000\",\n    \"1.24.9-gke.1500\",\n    \"1.24.8-gke.2000\",\n    \"1.24.8-gke.401\",\n    \"1.24.7-gke.900\",\n    \"1.24.6-gke.1500\",\n    \"1.24.5-gke.600\",\n    \"1.24.4-gke.800\",\n    \"1.24.3-gke.2100\",\n    \"1.24.3-gke.900\",\n    \"1.24.3-gke.200\",\n    \"1.24.2-gke.1900\",\n    \"1.24.2-gke.300\",\n    \"1.24.1-gke.1800\",\n    \"1.24.1-gke.1400\",\n    \"1.23.17-gke.2000\",\n    \"1.23.17-gke.1700\",\n    \"1.23.17-gke.300\",\n    \"1.23.16-gke.2500\",\n    \"1.23.16-gke.1400\",\n    \"1.23.16-gke.1100\",\n    \"1.23.16-gke.200\",\n    \"1.23.15-gke.1900\",\n    \"1.23.15-gke.1400\",\n    \"1.23.14-gke.1800\",\n    \"1.23.14-gke.401\",\n    \"1.23.13-gke.900\",\n    \"1.23.12-gke.1600\",\n    \"1.23.12-gke.100\",\n    \"1.23.11-gke.300\",\n    \"1.23.10-gke.1000\",\n    \"1.23.9-gke.2100\",\n    \"1.23.9-gke.900\",\n    \"1.23.8-gke.1900\",\n    \"1.23.8-gke.400\",\n    \"1.23.7-gke.1400\",\n    \"1.23.6-gke.2200\",\n    \"1.23.6-gke.1700\",\n    \"1.23.6-gke.1501\",\n    \"1.23.6-gke.1500\",\n    \"1.23.5-gke.2400\",\n    \"1.23.5-gke.1503\",\n    \"1.23.5-gke.1501\",\n    \"1.22.17-gke.8000\",\n    \"1.22.17-gke.7500\",\n    \"1.22.17-gke.6100\",\n    \"1.22.17-gke.5400\",\n    \"1.22.17-gke.4300\",\n    \"1.22.17-gke.4000\",\n    \"1.22.17-gke.3100\",\n    \"1.22.17-gke.1900\",\n    \"1.22.17-gke.1400\",\n    \"1.22.16-gke.2000\",\n    \"1.22.16-gke.1300\",\n    \"1.22.15-gke.2500\",\n    \"1.22.15-gke.1000\",\n    \"1.22.15-gke.100\",\n    \"1.22.14-gke.300\",\n    \"1.22.13-gke.1000\",\n    \"1.22.12-gke.2300\",\n    \"1.22.12-gke.1200\",\n    \"1.22.12-gke.500\",\n    \"1.22.12-gke.300\",\n    \"1.22.11-gke.400\",\n    \"1.22.10-gke.600\",\n    \"1.22.9-gke.2000\",\n    \"1.22.9-gke.1500\",\n    \"1.22.9-gke.1300\",\n    \"1.22.8-gke.2200\",\n    \"1.22.8-gke.202\",\n    \"1.22.8-gke.201\",\n    \"1.22.8-gke.200\",\n    \"1.22.7-gke.1500\",\n    \"1.22.7-gke.1300\",\n    \"1.22.7-gke.900\",\n    \"1.22.7-gke.300\",\n    \"1.22.6-gke.1000\",\n    \"1.22.6-gke.300\",\n    \"1.22.4-gke.1501\",\n    \"1.22.3-gke.1500\",\n    \"1.21.14-gke.18800\",\n    \"1.21.14-gke.18100\",\n    \"1.21.14-gke.15800\",\n    \"1.21.14-gke.14600\",\n    \"1.21.14-gke.14100\",\n    \"1.21.14-gke.8500\",\n    \"1.21.14-gke.7100\",\n    \"1.21.14-gke.5300\",\n    \"1.21.14-gke.4300\",\n    \"1.21.14-gke.3000\",\n    \"1.21.14-gke.2700\",\n    \"1.21.14-gke.2100\",\n    \"1.21.14-gke.700\",\n    \"1.21.13-gke.900\",\n    \"1.21.12-gke.2200\",\n    \"1.21.12-gke.1700\",\n    \"1.21.12-gke.1500\",\n    \"1.21.11-gke.1900\",\n    \"1.21.11-gke.1100\",\n    \"1.21.11-gke.900\",\n    \"1.21.10-gke.2000\",\n    \"1.21.10-gke.1500\",\n    \"1.21.10-gke.1300\",\n    \"1.21.10-gke.400\",\n    \"1.21.9-gke.1002\",\n    \"1.21.9-gke.1001\",\n    \"1.21.9-gke.1000\",\n    \"1.21.9-gke.300\",\n    \"1.21.6-gke.1503\",\n    \"1.21.6-gke.1501\",\n    \"1.21.6-gke.1500\",\n    \"1.21.5-gke.1805\",\n    \"1.21.5-gke.1802\",\n    \"1.21.5-gke.1302\",\n    \"1.21.5-gke.1300\",\n    \"1.21.4-gke.2302\",\n    \"1.21.4-gke.2300\",\n    \"1.21.3-gke.2003\",\n    \"1.21.3-gke.2001\",\n    \"1.20.15-gke.13700\",\n    \"1.20.15-gke.13400\",\n    \"1.20.15-gke.12800\",\n    \"1.20.15-gke.11400\",\n    \"1.20.15-gke.9900\",\n    \"1.20.15-gke.8700\",\n    \"1.20.15-gke.8200\",\n    \"1.20.15-gke.8000\",\n    \"1.20.15-gke.6000\",\n    \"1.20.15-gke.5200\",\n    \"1.20.15-gke.5000\",\n    \"1.20.15-gke.4100\",\n    \"1.20.15-gke.3600\",\n    \"1.20.15-gke.3400\",\n    \"1.20.15-gke.2500\",\n    \"1.20.15-gke.1000\",\n    \"1.20.15-gke.300\",\n    \"1.20.12-gke.1500\",\n    \"1.20.11-gke.1801\",\n    \"1.20.11-gke.1300\",\n    \"1.20.10-gke.2100\",\n    \"1.20.10-gke.1600\",\n    \"1.20.10-gke.301\",\n    \"1.20.9-gke.2100\",\n    \"1.20.9-gke.1001\",\n    \"1.20.9-gke.1000\",\n    \"1.20.9-gke.701\",\n    \"1.20.9-gke.700\",\n    \"1.20.8-gke.2101\",\n    \"1.20.8-gke.2100\",\n    \"1.20.8-gke.900\",\n    \"1.20.8-gke.700\",\n    \"1.20.7-gke.2200\",\n    \"1.20.7-gke.1800\",\n    \"1.20.6-gke.1400\",\n    \"1.20.6-gke.1000\",\n    \"1.19.16-gke.15700\",\n    \"1.19.16-gke.14500\",\n    \"1.19.16-gke.14000\",\n    \"1.19.16-gke.13800\",\n    \"1.19.16-gke.11800\",\n    \"1.19.16-gke.11000\",\n    \"1.19.16-gke.10800\",\n    \"1.19.16-gke.9900\",\n    \"1.19.16-gke.9400\",\n    \"1.19.16-gke.9200\",\n    \"1.19.16-gke.8300\",\n    \"1.19.16-gke.6800\",\n    \"1.19.16-gke.6100\",\n    \"1.19.16-gke.3600\",\n    \"1.19.15-gke.1801\",\n    \"1.19.15-gke.1300\",\n    \"1.19.15-gke.500\",\n    \"1.19.14-gke.2300\",\n    \"1.19.14-gke.1900\",\n    \"1.19.14-gke.301\",\n    \"1.19.14-gke.300\",\n    \"1.19.13-gke.1900\",\n    \"1.19.13-gke.1200\",\n    \"1.19.13-gke.701\",\n    \"1.19.13-gke.700\",\n    \"1.19.12-gke.2101\",\n    \"1.19.12-gke.2100\",\n    \"1.19.12-gke.1100\",\n    \"1.19.12-gke.900\",\n    \"1.19.12-gke.700\",\n    \"1.19.11-gke.2101\",\n    \"1.19.11-gke.2100\",\n    \"1.19.11-gke.1701\",\n    \"1.19.11-gke.1700\",\n    \"1.19.10-gke.1701\",\n    \"1.19.10-gke.1700\",\n    \"1.19.10-gke.1601\",\n    \"1.19.10-gke.1600\",\n    \"1.19.10-gke.1001\",\n    \"1.19.10-gke.1000\",\n    \"1.19.9-gke.1900\",\n    \"1.19.9-gke.1400\",\n    \"1.19.9-gke.700\",\n    \"1.19.9-gke.100\",\n    \"1.19.8-gke.2000\",\n    \"1.19.8-gke.1600\",\n    \"1.19.8-gke.1000\",\n    \"1.19.7-gke.2503\",\n    \"1.19.7-gke.1500\",\n    \"1.19.7-gke.1302\",\n    \"1.19.7-gke.800\",\n    \"1.19.6-gke.1700\",\n    \"1.19.6-gke.1100\",\n    \"1.19.6-gke.600\",\n    \"1.18.20-gke.6101\",\n    \"1.18.20-gke.6000\",\n    \"1.18.20-gke.4501\",\n    \"1.18.20-gke.4500\",\n    \"1.18.20-gke.4100\",\n    \"1.18.20-gke.3300\",\n    \"1.18.20-gke.3001\",\n    \"1.18.20-gke.3000\",\n    \"1.18.20-gke.2300\",\n    \"1.18.20-gke.901\",\n    \"1.18.20-gke.900\",\n    \"1.18.20-gke.501\",\n    \"1.18.19-gke.2101\",\n    \"1.18.19-gke.2100\",\n    \"1.18.19-gke.1701\",\n    \"1.18.19-gke.1700\",\n    \"1.18.18-gke.1701\",\n    \"1.18.18-gke.1700\",\n    \"1.18.18-gke.1101\",\n    \"1.18.18-gke.1100\",\n    \"1.18.17-gke.1901\",\n    \"1.18.17-gke.1900\",\n    \"1.18.17-gke.1201\",\n    \"1.18.17-gke.1200\",\n    \"1.18.17-gke.700\",\n    \"1.18.17-gke.100\",\n    \"1.18.16-gke.2100\",\n    \"1.18.16-gke.1201\",\n    \"1.18.16-gke.1200\",\n    \"1.18.16-gke.502\",\n    \"1.18.16-gke.500\",\n    \"1.18.16-gke.302\",\n    \"1.18.16-gke.300\",\n    \"1.18.15-gke.2500\",\n    \"1.18.15-gke.1502\",\n    \"1.18.15-gke.1501\",\n    \"1.18.15-gke.1500\",\n    \"1.18.15-gke.1102\",\n    \"1.18.15-gke.1100\",\n    \"1.18.15-gke.800\",\n    \"1.18.14-gke.1600\",\n    \"1.18.14-gke.1200\",\n    \"1.18.12-gke.1210\",\n    \"1.18.12-gke.1206\",\n    \"1.18.12-gke.1205\",\n    \"1.18.12-gke.1201\",\n    \"1.18.12-gke.1200\",\n    \"1.18.12-gke.300\",\n    \"1.18.10-gke.2701\",\n    \"1.18.10-gke.2101\",\n    \"1.18.10-gke.1500\",\n    \"1.18.10-gke.601\",\n    \"1.18.9-gke.2501\",\n    \"1.18.9-gke.1501\",\n    \"1.18.9-gke.801\",\n    \"1.18.6-gke.4801\",\n    \"1.18.6-gke.3504\",\n    \"1.18.6-gke.3503\",\n    \"1.17.17-gke.9100\",\n    \"1.17.17-gke.8500\",\n    \"1.17.17-gke.8200\",\n    \"1.17.17-gke.7800\",\n    \"1.17.17-gke.7200\",\n    \"1.17.17-gke.6700\",\n    \"1.17.17-gke.6000\",\n    \"1.17.17-gke.5400\",\n    \"1.17.17-gke.4900\",\n    \"1.17.17-gke.4400\",\n    \"1.17.17-gke.3700\",\n    \"1.17.17-gke.3000\",\n    \"1.17.17-gke.2800\",\n    \"1.17.17-gke.2500\",\n    \"1.17.17-gke.1500\",\n    \"1.17.17-gke.1101\",\n    \"1.17.17-gke.1100\",\n    \"1.17.17-gke.600\",\n    \"1.17.16-gke.1600\",\n    \"1.17.16-gke.1300\",\n    \"1.17.15-gke.800\",\n    \"1.17.15-gke.300\",\n    \"1.17.14-gke.1600\",\n    \"1.17.14-gke.1200\",\n    \"1.17.14-gke.400\",\n    \"1.17.13-gke.2600\",\n    \"1.17.13-gke.2001\",\n    \"1.17.13-gke.1401\",\n    \"1.17.13-gke.1400\",\n    \"1.17.13-gke.600\",\n    \"1.17.12-gke.2502\",\n    \"1.17.12-gke.1504\",\n    \"1.17.12-gke.1501\",\n    \"1.17.12-gke.500\",\n    \"1.17.9-gke.6300\",\n    \"1.17.9-gke.1504\",\n    \"1.16.15-gke.14800\",\n    \"1.16.15-gke.12500\",\n    \"1.16.15-gke.11800\",\n    \"1.16.15-gke.10600\",\n    \"1.16.15-gke.7801\",\n    \"1.16.15-gke.7800\",\n    \"1.16.15-gke.7300\",\n    \"1.16.15-gke.6900\",\n    \"1.16.15-gke.6000\",\n    \"1.16.15-gke.5500\",\n    \"1.16.15-gke.4901\",\n    \"1.16.15-gke.4301\",\n    \"1.16.15-gke.4300\",\n    \"1.16.15-gke.3500\",\n    \"1.16.15-gke.2601\",\n    \"1.16.15-gke.1600\",\n    \"1.16.15-gke.500\",\n    \"1.16.13-gke.404\",\n    \"1.16.13-gke.403\",\n    \"1.16.13-gke.401\",\n    \"1.16.13-gke.400\",\n    \"1.16.13-gke.1\",\n    \"1.16.11-gke.5\",\n    \"1.16.10-gke.8\",\n    \"1.16.9-gke.6\",\n    \"1.16.9-gke.2\",\n    \"1.16.8-gke.15\",\n    \"1.16.8-gke.12\",\n    \"1.16.8-gke.9\",\n    \"1.15.12-gke.6002\",\n    \"1.15.12-gke.6001\",\n    \"1.15.12-gke.5000\",\n    \"1.15.12-gke.4002\",\n    \"1.15.12-gke.4000\",\n    \"1.15.12-gke.20\",\n    \"1.15.12-gke.17\",\n    \"1.15.12-gke.16\",\n    \"1.15.12-gke.13\",\n    \"1.15.12-gke.9\",\n    \"1.15.12-gke.6\",\n    \"1.15.12-gke.3\",\n    \"1.15.12-gke.2\",\n    \"1.15.11-gke.17\",\n    \"1.15.11-gke.15\",\n    \"1.15.11-gke.13\",\n    \"1.15.11-gke.12\",\n    \"1.15.11-gke.11\",\n    \"1.15.11-gke.9\",\n    \"1.15.11-gke.5\",\n    \"1.15.11-gke.3\",\n    \"1.15.11-gke.1\",\n    \"1.15.9-gke.26\",\n    \"1.15.9-gke.24\",\n    \"1.15.9-gke.22\",\n    \"1.15.9-gke.12\",\n    \"1.15.9-gke.9\",\n    \"1.15.9-gke.8\",\n    \"1.15.8-gke.3\",\n    \"1.15.8-gke.2\",\n    \"1.15.7-gke.23\",\n    \"1.15.7-gke.2\",\n    \"1.15.4-gke.22\",\n    \"1.14.10-gke.1504\",\n    \"1.14.10-gke.902\",\n    \"1.14.10-gke.50\",\n    \"1.14.10-gke.46\",\n    \"1.14.10-gke.45\",\n    \"1.14.10-gke.42\",\n    \"1.14.10-gke.41\",\n    \"1.14.10-gke.40\",\n    \"1.14.10-gke.37\",\n    \"1.14.10-gke.36\",\n    \"1.14.10-gke.34\",\n    \"1.14.10-gke.32\",\n    \"1.14.10-gke.31\",\n    \"1.14.10-gke.27\",\n    \"1.14.10-gke.24\",\n    \"1.14.10-gke.22\",\n    \"1.14.10-gke.21\",\n    \"1.14.10-gke.17\",\n    \"1.14.10-gke.0\",\n    \"1.14.9-gke.23\",\n    \"1.14.9-gke.2\",\n    \"1.14.9-gke.0\",\n    \"1.14.8-gke.33\",\n    \"1.14.8-gke.21\",\n    \"1.14.8-gke.18\",\n    \"1.14.8-gke.17\",\n    \"1.14.8-gke.14\",\n    \"1.14.8-gke.12\",\n    \"1.14.8-gke.7\",\n    \"1.14.8-gke.2\",\n    \"1.14.7-gke.40\",\n    \"1.14.7-gke.25\",\n    \"1.14.7-gke.23\",\n    \"1.14.7-gke.17\",\n    \"1.14.7-gke.14\",\n    \"1.14.7-gke.10\",\n    \"1.14.6-gke.13\",\n    \"1.14.6-gke.2\",\n    \"1.14.6-gke.1\",\n    \"1.14.3-gke.11\",\n    \"1.14.3-gke.10\",\n    \"1.14.3-gke.9\",\n    \"1.14.2-gke.9\",\n    \"1.14.1-gke.5\",\n    \"1.13.12-gke.30\",\n    \"1.13.12-gke.25\",\n    \"1.13.12-gke.17\",\n    \"1.13.12-gke.16\",\n    \"1.13.12-gke.14\",\n    \"1.13.12-gke.13\",\n    \"1.13.12-gke.10\",\n    \"1.13.12-gke.8\",\n    \"1.13.12-gke.4\",\n    \"1.13.12-gke.2\",\n    \"1.13.11-gke.23\",\n    \"1.13.11-gke.15\",\n    \"1.13.11-gke.14\",\n    \"1.13.11-gke.12\",\n    \"1.13.11-gke.11\",\n    \"1.13.11-gke.9\",\n    \"1.13.11-gke.5\",\n    \"1.13.10-gke.7\",\n    \"1.13.10-gke.0\",\n    \"1.13.9-gke.11\",\n    \"1.13.9-gke.3\",\n    \"1.13.7-gke.24\",\n    \"1.13.7-gke.19\",\n    \"1.13.7-gke.15\",\n    \"1.13.7-gke.8\",\n    \"1.13.7-gke.0\",\n    \"1.13.6-gke.13\",\n    \"1.13.6-gke.6\",\n    \"1.13.6-gke.5\",\n    \"1.13.6-gke.0\",\n    \"1.13.5-gke.10\",\n    \"1.12.10-gke.22\",\n    \"1.12.10-gke.20\",\n    \"1.12.10-gke.19\",\n    \"1.12.10-gke.18\",\n    \"1.12.10-gke.17\",\n    \"1.12.10-gke.15\",\n    \"1.12.10-gke.13\",\n    \"1.12.10-gke.11\",\n    \"1.12.10-gke.5\",\n    \"1.12.9-gke.16\",\n    \"1.12.9-gke.15\",\n    \"1.12.9-gke.13\",\n    \"1.12.9-gke.10\",\n    \"1.12.9-gke.7\",\n    \"1.12.9-gke.3\",\n    \"1.12.8-gke.12\",\n    \"1.12.8-gke.10\",\n    \"1.12.8-gke.7\",\n    \"1.12.8-gke.6\",\n    \"1.12.7-gke.26\",\n    \"1.12.7-gke.25\",\n    \"1.12.7-gke.24\",\n    \"1.12.7-gke.22\",\n    \"1.12.7-gke.21\",\n    \"1.12.7-gke.17\",\n    \"1.12.7-gke.10\",\n    \"1.12.7-gke.7\",\n    \"1.12.6-gke.11\",\n    \"1.12.6-gke.10\",\n    \"1.12.6-gke.7\",\n    \"1.12.5-gke.10\",\n    \"1.12.5-gke.5\",\n    \"1.11.10-gke.6\",\n    \"1.11.10-gke.5\"\n  ],\n  \"defaultImageType\": \"COS_CONTAINERD\",\n  \"validImageTypes\": [\n    \"COS_CONTAINERD\",\n    \"COS\",\n    \"UBUNTU\",\n    \"UBUNTU_CONTAINERD\",\n    \"WINDOWS_LTSC\",\n    \"WINDOWS_LTSC_CONTAINERD\",\n    \"WINDOWS_SAC\",\n    \"WINDOWS_SAC_CONTAINERD\"\n  ],\n  \"validMasterVersions\": [\n    \"1.26.3-gke.1000\",\n    \"1.26.2-gke.1000\",\n    \"1.25.8-gke.1000\",\n    \"1.25.8-gke.500\",\n    \"1.25.7-gke.1000\",\n    \"1.24.12-gke.1000\",\n    \"1.24.12-gke.500\",\n    \"1.24.11-gke.1000\",\n    \"1.24.10-gke.2300\",\n    \"1.24.10-gke.1200\",\n    \"1.24.9-gke.3200\",\n    \"1.23.17-gke.2000\",\n    \"1.23.17-gke.1700\",\n    \"1.23.17-gke.300\",\n    \"1.23.16-gke.2500\",\n    \"1.23.16-gke.1400\",\n    \"1.22.17-gke.8000\",\n    \"1.22.17-gke.7500\",\n    \"1.22.17-gke.6100\",\n    \"1.22.17-gke.5400\",\n    \"1.21.14-gke.18800\",\n    \"1.21.14-gke.18100\",\n    \"1.21.14-gke.15800\",\n    \"1.21.14-gke.8500\"\n  ],\n  \"channels\": [\n    {\n      \"channel\": \"RAPID\",\n      \"defaultVersion\": \"1.26.3-gke.400\",\n      \"validVersions\": [\n        \"1.26.3-gke.1000\",\n        \"1.26.3-gke.400\",\n        \"1.25.8-gke.1000\",\n        \"1.25.8-gke.500\",\n        \"1.24.12-gke.1000\",\n        \"1.23.17-gke.2000\",\n        \"1.23.17-gke.1700\",\n        \"1.23.17-gke.300\",\n        \"1.22.17-gke.8000\",\n        \"1.22.17-gke.7500\",\n        \"1.21.14-gke.18800\"\n      ]\n    },\n    {\n      \"channel\": \"REGULAR\",\n      \"defaultVersion\": \"1.25.7-gke.1000\",\n      \"validVersions\": [\n        \"1.26.2-gke.1000\",\n        \"1.25.7-gke.1000\",\n        \"1.24.11-gke.1000\",\n        \"1.24.10-gke.2300\",\n        \"1.23.17-gke.300\",\n        \"1.22.17-gke.6100\",\n        \"1.21.14-gke.18800\"\n      ]\n    },\n    {\n      \"channel\": \"STABLE\",\n      \"defaultVersion\": \"1.24.10-gke.2300\",\n      \"validVersions\": [\n        \"1.24.11-gke.1000\",\n        \"1.24.10-gke.2300\",\n        \"1.24.9-gke.3200\",\n        \"1.23.16-gke.1400\",\n        \"1.22.17-gke.5400\",\n        \"1.21.14-gke.18100\",\n        \"1.21.14-gke.15800\"\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/forwardingRules.json",
    "content": "{\n  \"kind\": \"compute#forwardingRuleAggregatedList\",\n  \"id\": \"projects/gcpdiag-gke1-aaaa/aggregated/forwardingRules\",\n  \"items\": {\n    \"regions/us-west1\": {\n      \"forwardingRules\": [\n        {\n          \"kind\": \"compute#forwardingRule\",\n          \"id\": \"4245322038451922234\",\n          \"creationTimestamp\": \"2024-02-02T22:21:59.365-08:00\",\n          \"name\": \"forwardingRule1\",\n          \"description\": \"\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west1\",\n          \"IPAddress\": \"9.1.2.7\",\n          \"IPProtocol\": \"TCP\",\n          \"portRange\": \"80-80\",\n          \"target\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west1/targetHttpProxies/forwardingRule1-target-proxy\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west1/forwardingRules/forwardingRule1\",\n          \"loadBalancingScheme\": \"INTERNAL_MANAGED\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west1/subnetworks/backend-subnet\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/networks/lb-network\",\n          \"networkTier\": \"PREMIUM\",\n          \"labelFingerprint\": \"42Wmu7y8rSM=\",\n          \"fingerprint\": \"zUL2wdvikcQ=\",\n          \"allowGlobalAccess\": true\n        }\n      ]\n    }\n  },\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/aggregated/forwardingRules\"\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/healthChecks.json",
    "content": "{\n  \"kind\": \"compute#healthCheckList\",\n  \"id\": \"projects/gcpdiag-lb1-aaaa/global/healthChecks/\",\n  \"items\": [\n    {\n      \"kind\": \"compute#healthCheck\",\n      \"id\": \"6570916794820924287\",\n      \"creationTimestamp\": \"2023-11-22T17:40:32.481-08:00\",\n      \"name\": \"http-basic-check\",\n      \"checkIntervalSec\": 5,\n      \"timeoutSec\": 5,\n      \"unhealthyThreshold\": 2,\n      \"healthyThreshold\": 2,\n      \"type\": \"HTTP\",\n      \"httpHealthCheck\": {\n        \"port\": 80,\n        \"portSpecification\": \"USE_FIXED_PORT\",\n        \"requestPath\": \"/\",\n        \"proxyHeader\": \"NONE\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/global/healthChecks/http-basic-check\",\n      \"logConfig\": {\n        \"enable\": true\n      }\n    },\n    {\n      \"kind\": \"compute#healthCheck\",\n      \"id\": \"2011808073814110499\",\n      \"creationTimestamp\": \"2023-11-22T11:00:28.722-08:00\",\n      \"name\": \"http-basic-check-2\",\n      \"checkIntervalSec\": 5,\n      \"timeoutSec\": 5,\n      \"unhealthyThreshold\": 2,\n      \"healthyThreshold\": 2,\n      \"type\": \"HTTP\",\n      \"httpHealthCheck\": {\n        \"port\": 80,\n        \"portSpecification\": \"USE_FIXED_PORT\",\n        \"requestPath\": \"/\",\n        \"proxyHeader\": \"NONE\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/global/healthChecks/http-basic-check-2\"\n    },\n    {\n      \"kind\": \"compute#healthCheck\",\n      \"id\": \"4700445592381550883\",\n      \"creationTimestamp\": \"2023-11-22T11:00:28.748-08:00\",\n      \"name\": \"tcp-basic-check-1\",\n      \"checkIntervalSec\": 5,\n      \"timeoutSec\": 5,\n      \"unhealthyThreshold\": 2,\n      \"healthyThreshold\": 2,\n      \"type\": \"TCP\",\n      \"tcpHealthCheck\": {\n        \"port\": 80,\n        \"proxyHeader\": \"NONE\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/global/healthChecks/tcp-basic-check-1\",\n      \"logConfig\": {\n        \"enable\": true\n      }\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/global/healthChecks/\"\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/iam-policy.json",
    "content": "{\n  \"bindings\": [\n    {\n      \"members\": [\n        \"serviceAccount:gke2sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"projects/gcpdiag-gke1-aaaa/roles/gke2_custom_role\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:gke3sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"projects/gcpdiag-gke1-aaaa/roles/gke3_custom_role\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12340002@compute-system.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/compute.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12340002@container-engine-robot.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/container.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12340002@containerregistry.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/containerregistry.ServiceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:12340002-compute@developer.gserviceaccount.com\",\n        \"serviceAccount:12340002@cloudservices.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/editor\"\n    },\n    {\n      \"members\": [\n        \"user:testuser@example.com\"\n      ],\n      \"role\": \"roles/owner\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12340002@gcp-sa-pubsub.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/pubsub.serviceAgent\"\n    }\n  ],\n  \"etag\": \"BwXSd+CQHPE=\",\n  \"version\": 1\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/iam-roles-custom.json",
    "content": "{\n  \"roles\": [\n    {\n      \"name\": \"projects/gcpdiag-gke1-aaaa/roles/gke2_custom_role\",\n      \"title\": \"GKE Custom Role\",\n      \"description\": \"A description\",\n      \"includedPermissions\": [\n        \"autoscaling.sites.writeMetrics\",\n        \"cloudnotifications.activities.list\",\n        \"logging.logEntries.create\",\n        \"monitoring.alertPolicies.get\",\n        \"monitoring.alertPolicies.list\",\n        \"monitoring.dashboards.get\",\n        \"monitoring.dashboards.list\",\n        \"monitoring.groups.get\",\n        \"monitoring.groups.list\",\n        \"monitoring.metricDescriptors.create\",\n        \"monitoring.metricDescriptors.get\",\n        \"monitoring.metricDescriptors.list\",\n        \"monitoring.monitoredResourceDescriptors.get\",\n        \"monitoring.monitoredResourceDescriptors.list\",\n        \"monitoring.notificationChannelDescriptors.get\",\n        \"monitoring.notificationChannelDescriptors.list\",\n        \"monitoring.notificationChannels.get\",\n        \"monitoring.notificationChannels.list\",\n        \"monitoring.publicWidgets.get\",\n        \"monitoring.publicWidgets.list\",\n        \"monitoring.services.get\",\n        \"monitoring.services.list\",\n        \"monitoring.slos.get\",\n        \"monitoring.slos.list\",\n        \"monitoring.timeSeries.create\",\n        \"monitoring.timeSeries.list\",\n        \"monitoring.uptimeCheckConfigs.get\",\n        \"monitoring.uptimeCheckConfigs.list\",\n        \"opsconfigmonitoring.resourceMetadata.list\",\n        \"stackdriver.resourceMetadata.write\",\n        \"storage.objects.get\",\n        \"storage.objects.list\"\n      ],\n      \"stage\": \"GA\",\n      \"etag\": \"BwXXp/+O7cs=\"\n    },\n    {\n      \"name\": \"projects/gcpdiag-gke1-aaaa/roles/gke3_custom_role\",\n      \"title\": \"GKE 3 Custom Role\",\n      \"description\": \"A description\",\n      \"includedPermissions\": [\n        \"cloudnotifications.activities.list\"\n      ],\n      \"stage\": \"GA\",\n      \"etag\": \"BwXXp/+Ke/c=\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/iam-roles-get.json",
    "content": "{\n  \"roles\": [\n    {\n      \"name\": \"roles/container.nodeServiceAgent\",\n      \"title\": \"[Deprecated] Kubernetes Engine Node Service Agent\",\n      \"description\": \"Minimal set of permission required by a GKE node to support standard capabilities such as logging and monitoring export, and image pulls.\",\n      \"includedPermissions\": [\n        \"autoscaling.sites.writeMetrics\",\n        \"logging.logEntries.create\",\n        \"monitoring.metricDescriptors.create\",\n        \"monitoring.metricDescriptors.list\",\n        \"monitoring.timeSeries.create\",\n        \"monitoring.timeSeries.list\",\n        \"resourcemanager.projects.get\",\n        \"resourcemanager.projects.list\",\n        \"serviceusage.services.use\",\n        \"storage.objects.get\",\n        \"storage.objects.list\"\n      ],\n       \"stage\": \"GA\",\n       \"etag\": \"AA==\"\n     },\n     {\n       \"name\": \"roles/container.defaultNodeServiceAccount\",\n       \"title\": \"Kubernetes Engine Default Node Service Account\",\n       \"description\": \"Least privilege role to use as the default service account for GKE Nodes.\",\n       \"includedPermissions\": [\n         \"autoscaling.sites.writeMetrics\",\n         \"logging.logEntries.create\",\n         \"monitoring.metricDescriptors.create\",\n         \"monitoring.metricDescriptors.list\",\n         \"monitoring.timeSeries.create\",\n         \"monitoring.timeSeries.list\"\n       ],\n       \"stage\": \"GA\",\n      \"etag\": \"AA==\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/iam-service-account-policy.json",
    "content": "{\n  \"bindings\": [\n    {\n      \"members\": [\n        \"serviceAccount:gke2sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/iam.serviceAccountUser\"\n    }\n  ],\n  \"etag\": \"BwXXwOptVuE=\",\n  \"version\": 1\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/iam-service-accounts.json",
    "content": "{\n  \"accounts\": [\n    {\n      \"displayName\": \"GKE Service Account\",\n      \"email\": \"gke2sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com\",\n      \"etag\": \"MDEwMjE5MjA=\",\n      \"name\": \"projects/gcpdiag-gke1-aaaa/serviceAccounts/gke2sa@gcpdiag-gke1-x1f4j4ed.iam.gserviceaccount.com\",\n      \"oauth2ClientId\": \"REDACTED\",\n      \"projectId\": \"gcpdiag-gke1-aaaa\",\n      \"uniqueId\": \"102417873155869406705\"\n    },\n    {\n      \"displayName\": \"Compute Engine default service account\",\n      \"email\": \"12340002-compute@developer.gserviceaccount.com\",\n      \"etag\": \"MDEwMjE5MjA=\",\n      \"name\": \"projects/gcpdiag-gke1-aaaa/serviceAccounts/12340002-compute@developer.gserviceaccount.com\",\n      \"oauth2ClientId\": \"REDACTED\",\n      \"projectId\": \"gcpdiag-gke1-aaaa\",\n      \"uniqueId\": \"112819826788395589395\"\n    },\n    {\n      \"displayName\": \"GKE 1 Service Account\",\n      \"email\": \"gke1sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com\",\n      \"etag\": \"MDEwMjE5MjA=\",\n      \"name\": \"projects/gcpdiag-gke1-aaaa/serviceAccounts/gke1sa@gcpdiag-gke1-x1f4j4ed.iam.gserviceaccount.com\",\n      \"oauth2ClientId\": \"REDACTED\",\n      \"projectId\": \"gcpdiag-gke1-aaaa\",\n      \"uniqueId\": \"106302102062593675693\"\n    },\n    {\n      \"displayName\": \"GKE 3 Service Account\",\n      \"email\": \"gke3sa@gcpdiag-gke1-aaaa.iam.gserviceaccount.com\",\n      \"etag\": \"MDEwMjE5MjA=\",\n      \"name\": \"projects/gcpdiag-gke1-aaaa/serviceAccounts/gke3sa@gcpdiag-gke1-x1f4j4ed.iam.gserviceaccount.com\",\n      \"oauth2ClientId\": \"REDACTED\",\n      \"projectId\": \"gcpdiag-gke1-aaaa\",\n      \"uniqueId\": \"104735732736559639086\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/instances.json",
    "content": ""
  },
  {
    "path": "test-data/gke1/json-dumps/interconnect-attachment1.json",
    "content": "  {\n    \"adminEnabled\": true,\n    \"bandwidth\": \"BPS_10G\",\n    \"cloudRouterIpAddress\": \"169.254.1.1/29\",\n    \"creationTimestamp\": \"2021-01-01T00:00:00-00:00\",\n    \"customerRouterIpAddress\": \"169.254.1.2/29\",\n    \"dataplaneVersion\": 2,\n    \"description\": \"Dummy Description\",\n    \"encryption\": \"IPSEC\",\n    \"id\": \"0000000000000000000\",\n    \"interconnect\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect1\",\n    \"ipsecInternalAddresses\": [\n      \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/addresses/test-tange-1\"\n    ],\n    \"kind\": \"compute#interconnectAttachment\",\n    \"name\": \"dummy-attachment1\",\n    \"operationalStatus\": \"OS_ACTIVE\",\n    \"privateInterconnectInfo\": {\n      \"tag8021q\": 1101\n    },\n    \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4\",\n    \"router\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/routers/dummy-router-1\",\n    \"satisfiesPzs\": false,\n    \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment1\",\n    \"stackType\": \"IPV4_ONLY\",\n    \"state\": \"ACTIVE\",\n    \"type\": \"DEDICATED\",\n    \"vlanTag8021q\": 1101\n  }\n"
  },
  {
    "path": "test-data/gke1/json-dumps/interconnect-attachments.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gke1-aaaa/aggregated/interconnectAttachments\",\n  \"items\": {\n    \"regions/asia-east1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-east1\"\n          }\n        ],\n        \"message\": \"There are no results \"\n      }\n    },\n    \"regions/asia-east2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-east2\"\n          }\n        ],\n        \"message\": \"There are no results \"\n      }\n    },\n    \"regions/us-east1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-east1\"\n          }\n        ],\n        \"message\": \"There are no results \"\n      }\n    },\n    \"regions/us-east4\": {\n      \"interconnectAttachments\": [\n        {\n          \"adminEnabled\": true,\n          \"bandwidth\": \"BPS_10G\",\n          \"cloudRouterIpAddress\": \"169.254.1.1/29\",\n          \"creationTimestamp\": \"2021-01-01T00:00:00-00:00\",\n          \"customerRouterIpAddress\": \"169.254.1.2/29\",\n          \"dataplaneVersion\": 2,\n          \"description\": \"Dummy Description\",\n          \"encryption\": \"IPSEC\",\n          \"id\": \"0000000000000000000\",\n          \"interconnect\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect1\",\n          \"ipsecInternalAddresses\": [\n            \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/addresses/test-tange-1\"\n          ],\n          \"kind\": \"compute#interconnectAttachment\",\n          \"name\": \"dummy-attachment1\",\n          \"operationalStatus\": \"OS_ACTIVE\",\n          \"privateInterconnectInfo\": {\n            \"tag8021q\": 1101\n          },\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4\",\n          \"mtu\": 1460,\n          \"router\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/routers/dummy-router1\",\n          \"satisfiesPzs\": false,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment1\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"state\": \"ACTIVE\",\n          \"type\": \"DEDICATED\",\n          \"vlanTag8021q\": 1101\n        },\n        {\n          \"adminEnabled\": true,\n          \"bandwidth\": \"BPS_10G\",\n          \"cloudRouterIpAddress\": \"169.254.1.1/29\",\n          \"creationTimestamp\": \"2021-01-01T00:00:00-00:00\",\n          \"customerRouterIpAddress\": \"169.254.1.2/29\",\n          \"dataplaneVersion\": 2,\n          \"description\": \"Dummy Description\",\n          \"encryption\": \"IPSEC\",\n          \"id\": \"0000000000000000000\",\n          \"interconnect\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect1\",\n          \"ipsecInternalAddresses\": [\n            \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/addresses/test-tange-1\"\n          ],\n          \"kind\": \"compute#interconnectAttachment\",\n          \"name\": \"dummy-attachment2\",\n          \"operationalStatus\": \"OS_ACTIVE\",\n          \"privateInterconnectInfo\": {\n            \"tag8021q\": 1103\n          },\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4\",\n          \"mtu\": 1460,\n          \"router\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/routers/dummy-router1\",\n          \"satisfiesPzs\": false,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment2\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"state\": \"ACTIVE\",\n          \"type\": \"DEDICATED\",\n          \"vlanTag8021q\": 1103\n        },\n        {\n          \"adminEnabled\": true,\n          \"bandwidth\": \"BPS_10G\",\n          \"cloudRouterIpAddress\": \"169.254.2.1/29\",\n          \"creationTimestamp\": \"2021-01-01T00:00:00-00:00\",\n          \"customerRouterIpAddress\": \"169.254.2.2/29\",\n          \"dataplaneVersion\": 2,\n          \"description\": \"Dummy Description\",\n          \"encryption\": \"IPSEC\",\n          \"id\": \"0000000000000000000\",\n          \"interconnect\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect2\",\n          \"ipsecInternalAddresses\": [\n            \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/addresses/test-tange-1\"\n          ],\n          \"kind\": \"compute#interconnectAttachment\",\n          \"name\": \"dummy-attachment3\",\n          \"operationalStatus\": \"OS_ACTIVE\",\n          \"privateInterconnectInfo\": {\n            \"tag8021q\": 1105\n          },\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4\",\n          \"mtu\": 1460,\n          \"router\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/routers/dummy-router2\",\n          \"satisfiesPzs\": false,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment3\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"state\": \"ACTIVE\",\n          \"type\": \"DEDICATED\",\n          \"vlanTag8021q\": 1105\n        },\n        {\n          \"adminEnabled\": true,\n          \"bandwidth\": \"BPS_10G\",\n          \"cloudRouterIpAddress\": \"169.254.2.1/29\",\n          \"creationTimestamp\": \"2021-01-01T00:00:00-00:00\",\n          \"customerRouterIpAddress\": \"169.254.2.2/29\",\n          \"dataplaneVersion\": 2,\n          \"description\": \"Dummy Description\",\n          \"encryption\": \"IPSEC\",\n          \"id\": \"0000000000000000000\",\n          \"interconnect\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect2\",\n          \"ipsecInternalAddresses\": [\n            \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/addresses/test-tange-1\"\n          ],\n          \"kind\": \"compute#interconnectAttachment\",\n          \"name\": \"dummy-attachment4\",\n          \"operationalStatus\": \"OS_ACTIVE\",\n          \"privateInterconnectInfo\": {\n            \"tag8021q\": 1106\n          },\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4\",\n          \"mtu\": 1460,\n          \"router\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/routers/dummy-router2\",\n          \"satisfiesPzs\": false,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment4\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"state\": \"ACTIVE\",\n          \"type\": \"DEDICATED\",\n          \"vlanTag8021q\": 1106\n        }\n      ]\n    },\n    \"regions/us-east5\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-east5\"\n          }\n        ],\n        \"message\": \"There are no results \"\n      }\n    },\n    \"regions/us-west2\": {\n      \"interconnectAttachments\": [\n        {\n          \"adminEnabled\": true,\n          \"bandwidth\": \"BPS_10G\",\n          \"cloudRouterIpAddress\": \"169.254.3.1/29\",\n          \"creationTimestamp\": \"2021-01-01T00:00:00-00:00\",\n          \"customerRouterIpAddress\": \"169.254.3.2/29\",\n          \"dataplaneVersion\": 2,\n          \"description\": \"Dummy Description\",\n          \"encryption\": \"IPSEC\",\n          \"id\": \"0000000000000000000\",\n          \"interconnect\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect3\",\n          \"ipsecInternalAddresses\": [\n            \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/addresses/test-tange-1\"\n          ],\n          \"kind\": \"compute#interconnectAttachment\",\n          \"name\": \"dummy-attachment5\",\n          \"operationalStatus\": \"OS_ACTIVE\",\n          \"privateInterconnectInfo\": {\n            \"tag8021q\": 1102\n          },\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2\",\n          \"mtu\": 1450,\n          \"router\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/routers/dummy-router3\",\n          \"satisfiesPzs\": false,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment5\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"state\": \"ACTIVE\",\n          \"type\": \"DEDICATED\",\n          \"vlanTag8021q\": 1102\n        },\n        {\n          \"adminEnabled\": true,\n          \"bandwidth\": \"BPS_10G\",\n          \"cloudRouterIpAddress\": \"169.254.3.1/29\",\n          \"creationTimestamp\": \"2021-01-01T00:00:00-00:00\",\n          \"customerRouterIpAddress\": \"169.254.3.2/29\",\n          \"dataplaneVersion\": 2,\n          \"description\": \"Dummy Description\",\n          \"encryption\": \"IPSEC\",\n          \"id\": \"0000000000000000000\",\n          \"interconnect\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect4\",\n          \"ipsecInternalAddresses\": [\n            \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/addresses/test-tange-1\"\n          ],\n          \"kind\": \"compute#interconnectAttachment\",\n          \"name\": \"dummy-attachment6\",\n          \"operationalStatus\": \"OS_ACTIVE\",\n          \"privateInterconnectInfo\": {\n            \"tag8021q\": 1104\n          },\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2\",\n          \"router\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/routers/dummy-router3\",\n          \"satisfiesPzs\": false,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"state\": \"ACTIVE\",\n          \"type\": \"DEDICATED\",\n          \"vlanTag8021q\": 1104\n        },\n        {\n          \"adminEnabled\": true,\n          \"bandwidth\": \"BPS_10G\",\n          \"cloudRouterIpAddress\": \"169.254.3.1/29\",\n          \"creationTimestamp\": \"2021-01-01T00:00:00-00:00\",\n          \"customerRouterIpAddress\": \"169.254.3.2/29\",\n          \"description\": \"Dummy Description\",\n          \"encryption\": \"IPSEC\",\n          \"id\": \"0000000000000000000\",\n          \"interconnect\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect4\",\n          \"ipsecInternalAddresses\": [\n            \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/addresses/test-tange-1\"\n          ],\n          \"kind\": \"compute#interconnectAttachment\",\n          \"name\": \"dummy-attachment7\",\n          \"operationalStatus\": \"OS_ACTIVE\",\n          \"privateInterconnectInfo\": {\n            \"tag8021q\": 1104\n          },\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2\",\n          \"router\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/routers/dummy-router3\",\n          \"satisfiesPzs\": false,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"state\": \"ACTIVE\",\n          \"type\": \"DEDICATED\",\n          \"vlanTag8021q\": 1104\n        },\n        {\n          \"adminEnabled\": true,\n          \"bandwidth\": \"BPS_10G\",\n          \"cloudRouterIpAddress\": \"169.254.3.1/29\",\n          \"creationTimestamp\": \"2021-01-01T00:00:00-00:00\",\n          \"customerRouterIpAddress\": \"169.254.3.2/29\",\n          \"dataplaneVersion\": 2,\n          \"description\": \"Dummy Description\",\n          \"encryption\": \"IPSEC\",\n          \"id\": \"0000000000000000000\",\n          \"interconnect\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect4\",\n          \"ipsecInternalAddresses\": [\n            \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/addresses/test-tange-1\"\n          ],\n          \"kind\": \"compute#interconnectAttachment\",\n          \"name\": \"dummy-attachment8\",\n          \"operationalStatus\": \"OS_ACTIVE\",\n          \"privateInterconnectInfo\": {\n            \"tag8021q\": 1104\n          },\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2\",\n          \"router\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/routers/dummy-router3\",\n          \"satisfiesPzs\": false,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"state\": \"ACTIVE\",\n          \"type\": \"DEDICATED\",\n          \"vlanTag8021q\": 1104\n        },\n        {\n          \"adminEnabled\": true,\n          \"bandwidth\": \"BPS_10G\",\n          \"cloudRouterIpAddress\": \"169.254.3.1/29\",\n          \"creationTimestamp\": \"2021-01-01T00:00:00-00:00\",\n          \"customerRouterIpAddress\": \"169.254.3.2/29\",\n          \"dataplaneVersion\": 2,\n          \"description\": \"Dummy Description\",\n          \"encryption\": \"IPSEC\",\n          \"id\": \"0000000000000000000\",\n          \"interconnect\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect4\",\n          \"ipsecInternalAddresses\": [\n            \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/addresses/test-tange-1\"\n          ],\n          \"kind\": \"compute#interconnectAttachment\",\n          \"name\": \"dummy-attachment9\",\n          \"operationalStatus\": \"OS_ACTIVE\",\n          \"privateInterconnectInfo\": {\n            \"tag8021q\": 1104\n          },\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2\",\n          \"router\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/routers/dummy-router3\",\n          \"satisfiesPzs\": false,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"state\": \"ACTIVE\",\n          \"type\": \"DEDICATED\",\n          \"vlanTag8021q\": 1104\n        },\n        {\n          \"adminEnabled\": true,\n          \"bandwidth\": \"BPS_10G\",\n          \"cloudRouterIpAddress\": \"169.254.3.1/29\",\n          \"creationTimestamp\": \"2021-01-01T00:00:00-00:00\",\n          \"customerRouterIpAddress\": \"169.254.3.2/29\",\n          \"dataplaneVersion\": 2,\n          \"description\": \"Dummy Description\",\n          \"encryption\": \"IPSEC\",\n          \"id\": \"0000000000000000000\",\n          \"interconnect\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/global/interconnects/dummy-interconnect4\",\n          \"ipsecInternalAddresses\": [\n            \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/addresses/test-tange-1\"\n          ],\n          \"kind\": \"compute#interconnectAttachment\",\n          \"name\": \"dummy-attachment10\",\n          \"operationalStatus\": \"OS_ACTIVE\",\n          \"privateInterconnectInfo\": {\n            \"tag8021q\": 1104\n          },\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2\",\n          \"router\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/routers/dummy-router3\",\n          \"satisfiesPzs\": false,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"state\": \"DEFUNCT\",\n          \"type\": \"DEDICATED\",\n          \"vlanTag8021q\": 1104\n        }\n      ]\n    }\n  },\n  \"kind\": \"compute#interconnectAttachmentAggregatedList\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke1-aaaa/aggregated/interconnectAttachments\"\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/kms-key-destroyed.json",
    "content": "{\n  \"name\": \"projects/gcpdiag-gke1-aaaa/locations/us-central1/keyRings/usckr/cryptoKeys/kms-key-destroyed\",\n  \"primary\": {\n    \"name\": \"projects/gcpdiag-gke1-aaaa/locations/us-central1/keyRings/usckr/cryptoKeys/kms-key-destroyed/cryptoKeyVersions/3\",\n    \"state\": \"DESTROYED\",\n    \"createTime\": \"2021-02-21T16:19:08.796116258Z\",\n    \"destroyEventTime\": \"2021-02-22T16:19:08.796116258Z\",\n    \"protectionLevel\": \"SOFTWARE\",\n    \"algorithm\": \"GOOGLE_SYMMETRIC_ENCRYPTION\",\n    \"generateTime\": \"2021-02-21T16:19:08.796116258Z\"\n  },\n  \"purpose\": \"ENCRYPT_DECRYPT\",\n  \"createTime\": \"2021-01-04T15:32:50.749517603Z\",\n  \"nextRotationTime\": \"2021-04-03T23:00:00Z\",\n  \"rotationPeriod\": \"7776000s\",\n  \"versionTemplate\": {\n    \"protectionLevel\": \"SOFTWARE\",\n    \"algorithm\": \"GOOGLE_SYMMETRIC_ENCRYPTION\"\n  }\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/kms-key-disabled.json",
    "content": "{\n  \"name\": \"projects/gcpdiag-gke1-aaaa/locations/us-central1/keyRings/usckr/cryptoKeys/kms-key-disabled\",\n  \"primary\": {\n    \"name\": \"projects/gcpdiag-gke1-aaaa/locations/us-central1/keyRings/usckr/cryptoKeys/kms-key-disabled/cryptoKeyVersions/2\",\n    \"state\": \"DISABLED\",\n    \"createTime\": \"2021-02-21T16:19:08.796116258Z\",\n    \"protectionLevel\": \"SOFTWARE\",\n    \"algorithm\": \"GOOGLE_SYMMETRIC_ENCRYPTION\",\n    \"generateTime\": \"2021-02-21T16:19:08.796116258Z\"\n  },\n  \"purpose\": \"ENCRYPT_DECRYPT\",\n  \"createTime\": \"2021-01-04T15:32:50.749517603Z\",\n  \"nextRotationTime\": \"2021-04-03T23:00:00Z\",\n  \"rotationPeriod\": \"7776000s\",\n  \"versionTemplate\": {\n    \"protectionLevel\": \"SOFTWARE\",\n    \"algorithm\": \"GOOGLE_SYMMETRIC_ENCRYPTION\"\n  }\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/kms-key-enabled.json",
    "content": "{\n  \"name\": \"projects/gcpdiag-gke1-aaaa/locations/us-central1/keyRings/usckr/cryptoKeys/kms-key-enabled\",\n  \"primary\": {\n    \"name\": \"projects/gcpdiag-gke1-aaaa/locations/us-central1/keyRings/usckr/cryptoKeys/kms-key-enabled/cryptoKeyVersions/1\",\n    \"state\": \"ENABLED\",\n    \"createTime\": \"2021-01-04T15:32:50.749517603Z\",\n    \"protectionLevel\": \"SOFTWARE\",\n    \"algorithm\": \"GOOGLE_SYMMETRIC_ENCRYPTION\",\n    \"generateTime\": \"2021-01-04T15:32:50.749517603Z\"\n  },\n  \"purpose\": \"ENCRYPT_DECRYPT\",\n  \"createTime\": \"2021-01-04T15:32:50.749517603Z\",\n  \"nextRotationTime\": \"2021-04-03T23:00:00Z\",\n  \"rotationPeriod\": \"7776000s\",\n  \"versionTemplate\": {\n    \"protectionLevel\": \"SOFTWARE\",\n    \"algorithm\": \"GOOGLE_SYMMETRIC_ENCRYPTION\"\n  }\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/logging-entries-1.json",
    "content": "{\n  \"entries\": [\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-12340002@container-engine-robot.iam.gserviceaccount.com\"\n        },\n        \"requestMetadata\": {\n          \"callerIp\": \"2002:ae8:2d45::\",\n          \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 GoogleContainerEngine/v1\"\n        },\n        \"serviceName\": \"compute.googleapis.com\",\n        \"methodName\": \"beta.compute.instanceGroupManagers.insert\",\n        \"resourceName\": \"projects/gcpdiag-gke1-aaaa/zones/europe-west1-b/instanceGroupManagers/gke-gke2-default-pool-11b6ca8e-grp\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instanceGroupManagers.insert\"\n        }\n      },\n      \"insertId\": \"-4pqrg9dartq\",\n      \"resource\": {\n        \"type\": \"gce_instance_group_manager\",\n        \"labels\": {\n          \"instance_group_manager_id\": \"8700821884762314590\",\n          \"instance_group_manager_name\": \"gke-gke2-default-pool-11b6ca8e-grp\",\n          \"project_id\": \"gcpdiag-gke1-aaaa\",\n          \"location\": \"europe-west1-b\"\n        }\n      },\n      \"timestamp\": \"2021-11-24T16:35:22.615295Z\",\n      \"severity\": \"NOTICE\",\n      \"logName\": \"projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1637771697161-5d18b703b865a-dccbda35-ad8629c7\",\n        \"producer\": \"compute.googleapis.com\",\n        \"last\": true\n      },\n      \"receiveTimestamp\": \"2021-11-24T16:35:23.172680503Z\"\n    },\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-12340002@container-engine-robot.iam.gserviceaccount.com\"\n        },\n        \"requestMetadata\": {\n          \"callerIp\": \"2002:ae8:2d45::\",\n          \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 GoogleContainerEngine/v1\"\n        },\n        \"serviceName\": \"compute.googleapis.com\",\n        \"methodName\": \"beta.compute.instanceGroupManagers.insert\",\n        \"resourceName\": \"projects/gcpdiag-gke1-aaaa/zones/europe-west1-d/instanceGroupManagers/gke-gke2-default-pool-98631c84-grp\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instanceGroupManagers.insert\"\n        }\n      },\n      \"insertId\": \"-nuwdobe1byj2\",\n      \"resource\": {\n        \"type\": \"gce_instance_group_manager\",\n        \"labels\": {\n          \"instance_group_manager_name\": \"gke-gke2-default-pool-98631c84-grp\",\n          \"project_id\": \"gcpdiag-gke1-aaaa\",\n          \"location\": \"europe-west1-d\",\n          \"instance_group_manager_id\": \"6471686162526492481\"\n        }\n      },\n      \"timestamp\": \"2021-11-24T16:35:10.014049Z\",\n      \"severity\": \"NOTICE\",\n      \"logName\": \"projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1637771693512-5d18b7003d60c-2f9aaeaf-535e4f63\",\n        \"producer\": \"compute.googleapis.com\",\n        \"last\": true\n      },\n      \"receiveTimestamp\": \"2021-11-24T16:35:10.306123333Z\"\n    },\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-12340002@container-engine-robot.iam.gserviceaccount.com\"\n        },\n        \"requestMetadata\": {\n          \"callerIp\": \"2002:ae8:2d45::\",\n          \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 GoogleContainerEngine/v1\"\n        },\n        \"serviceName\": \"compute.googleapis.com\",\n        \"methodName\": \"beta.compute.instanceGroupManagers.insert\",\n        \"resourceName\": \"projects/gcpdiag-gke1-aaaa/zones/europe-west1-c/instanceGroupManagers/gke-gke2-default-pool-5e5781dd-grp\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instanceGroupManagers.insert\"\n        }\n      },\n      \"insertId\": \"tf2uocd1kpc\",\n      \"resource\": {\n        \"type\": \"gce_instance_group_manager\",\n        \"labels\": {\n          \"instance_group_manager_name\": \"gke-gke2-default-pool-5e5781dd-grp\",\n          \"project_id\": \"gcpdiag-gke1-aaaa\",\n          \"instance_group_manager_id\": \"5205754198527039297\",\n          \"location\": \"europe-west1-c\"\n        }\n      },\n      \"timestamp\": \"2021-11-24T16:35:08.922507Z\",\n      \"severity\": \"NOTICE\",\n      \"logName\": \"projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1637771693418-5d18b700269e6-19f4d541-4d012584\",\n        \"producer\": \"compute.googleapis.com\",\n        \"last\": true\n      },\n      \"receiveTimestamp\": \"2021-11-24T16:35:09.484397071Z\"\n    },\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-12340002@container-engine-robot.iam.gserviceaccount.com\"\n        },\n        \"requestMetadata\": {\n          \"callerIp\": \"2002:a05:601a:1550::\",\n          \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 GoogleContainerEngine/v1\"\n        },\n        \"serviceName\": \"compute.googleapis.com\",\n        \"methodName\": \"beta.compute.instanceGroupManagers.insert\",\n        \"resourceName\": \"projects/gcpdiag-gke1-aaaa/zones/europe-west1-c/instanceGroupManagers/gke-gke3-default-pool-013fb293-grp\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instanceGroupManagers.insert\"\n        }\n      },\n      \"insertId\": \"tf2uocd1kou\",\n      \"resource\": {\n        \"type\": \"gce_instance_group_manager\",\n        \"labels\": {\n          \"project_id\": \"gcpdiag-gke1-aaaa\",\n          \"instance_group_manager_id\": \"3383879657688651622\",\n          \"location\": \"europe-west1-c\",\n          \"instance_group_manager_name\": \"gke-gke3-default-pool-013fb293-grp\"\n        }\n      },\n      \"timestamp\": \"2021-11-24T16:34:38.479723Z\",\n      \"severity\": \"NOTICE\",\n      \"logName\": \"projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1637771657193-5d18b6dd9a974-6dee9d9a-988a4f6c\",\n        \"producer\": \"compute.googleapis.com\",\n        \"last\": true\n      },\n      \"receiveTimestamp\": \"2021-11-24T16:34:39.479072691Z\"\n    },\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-12340002@container-engine-robot.iam.gserviceaccount.com\"\n        },\n        \"requestMetadata\": {\n          \"callerIp\": \"2002:a05:601a:1550::\",\n          \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 GoogleContainerEngine/v1\"\n        },\n        \"serviceName\": \"compute.googleapis.com\",\n        \"methodName\": \"beta.compute.instanceGroupManagers.insert\",\n        \"resourceName\": \"projects/gcpdiag-gke1-aaaa/zones/europe-west1-b/instanceGroupManagers/gke-gke3-default-pool-597c9ca2-grp\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instanceGroupManagers.insert\"\n        }\n      },\n      \"insertId\": \"-4pqrg9darqs\",\n      \"resource\": {\n        \"type\": \"gce_instance_group_manager\",\n        \"labels\": {\n          \"location\": \"europe-west1-b\",\n          \"instance_group_manager_id\": \"5404218744580069225\",\n          \"instance_group_manager_name\": \"gke-gke3-default-pool-597c9ca2-grp\",\n          \"project_id\": \"gcpdiag-gke1-aaaa\"\n        }\n      },\n      \"timestamp\": \"2021-11-24T16:34:37.484721Z\",\n      \"severity\": \"NOTICE\",\n      \"logName\": \"projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1637771652136-5d18b6d8c7d4a-678a3896-62f6d812\",\n        \"producer\": \"compute.googleapis.com\",\n        \"last\": true\n      },\n      \"receiveTimestamp\": \"2021-11-24T16:34:38.168845698Z\"\n    },\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-12340002@container-engine-robot.iam.gserviceaccount.com\"\n        },\n        \"requestMetadata\": {\n          \"callerIp\": \"2002:a05:601a:1550::\",\n          \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 GoogleContainerEngine/v1\"\n        },\n        \"serviceName\": \"compute.googleapis.com\",\n        \"methodName\": \"beta.compute.instanceGroupManagers.insert\",\n        \"resourceName\": \"projects/gcpdiag-gke1-aaaa/zones/europe-west1-d/instanceGroupManagers/gke-gke3-default-pool-c125bae7-grp\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instanceGroupManagers.insert\"\n        }\n      },\n      \"insertId\": \"-31olexd4rpi\",\n      \"resource\": {\n        \"type\": \"gce_instance_group_manager\",\n        \"labels\": {\n          \"instance_group_manager_name\": \"gke-gke3-default-pool-c125bae7-grp\",\n          \"location\": \"europe-west1-d\",\n          \"project_id\": \"gcpdiag-gke1-aaaa\",\n          \"instance_group_manager_id\": \"1403931912127633256\"\n        }\n      },\n      \"timestamp\": \"2021-11-24T16:34:35.389660Z\",\n      \"severity\": \"NOTICE\",\n      \"logName\": \"projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1637771654866-5d18b6db6263d-009ad0ed-4b71b356\",\n        \"producer\": \"compute.googleapis.com\",\n        \"last\": true\n      },\n      \"receiveTimestamp\": \"2021-11-24T16:34:35.872428070Z\"\n    },\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-12340002@container-engine-robot.iam.gserviceaccount.com\"\n        },\n        \"requestMetadata\": {\n          \"callerIp\": \"2002:a17:907:3ea4::\",\n          \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 GoogleContainerEngine/v1\"\n        },\n        \"serviceName\": \"compute.googleapis.com\",\n        \"methodName\": \"beta.compute.instanceGroupManagers.insert\",\n        \"resourceName\": \"projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-dc4a8b29-grp\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instanceGroupManagers.insert\"\n        }\n      },\n      \"insertId\": \"-tt9mudi768\",\n      \"resource\": {\n        \"type\": \"gce_instance_group_manager\",\n        \"labels\": {\n          \"location\": \"europe-west4-a\",\n          \"instance_group_manager_id\": \"318228385164940970\",\n          \"project_id\": \"gcpdiag-gke1-aaaa\",\n          \"instance_group_manager_name\": \"gke-gke1-default-pool-dc4a8b29-grp\"\n        }\n      },\n      \"timestamp\": \"2021-11-24T16:29:21.943390Z\",\n      \"severity\": \"NOTICE\",\n      \"logName\": \"projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1637771331527-5d18b5a706163-f238dbec-106555c8\",\n        \"producer\": \"compute.googleapis.com\",\n        \"last\": true\n      },\n      \"receiveTimestamp\": \"2021-11-24T16:29:22.710110506Z\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/monitoring-query.json",
    "content": "{\n  \"timeSeriesDescriptor\": {\n    \"labelDescriptors\": [\n      {\n        \"key\": \"resource.zone\"\n      },\n      {\n        \"key\": \"metric.instance_name\"\n      }\n    ],\n    \"pointDescriptors\": [\n      {\n        \"key\": \"value_uptime_total_aggregate_mean\",\n        \"valueType\": \"DOUBLE\",\n        \"metricKind\": \"GAUGE\",\n        \"unit\": \"s\"\n      },\n      {\n        \"key\": \"value_uptime_total_aggregate_count\",\n        \"valueType\": \"INT64\",\n        \"metricKind\": \"DELTA\",\n        \"unit\": \"1\"\n      }\n    ]\n  },\n  \"timeSeriesData\": [\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"europe-west4-a\"\n        },\n        {\n          \"stringValue\": \"mig-tcnm\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 2071746\n            },\n            {\n              \"int64Value\": \"4\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2021-07-23T08:27:07.010750Z\",\n            \"endTime\": \"2021-07-23T08:27:07.010750Z\"\n          }\n        },\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 2071476\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2021-07-23T08:22:07.010750Z\",\n            \"endTime\": \"2021-07-23T08:22:07.010750Z\"\n          }\n        }\n      ]\n    },\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"europe-west4-a\"\n        },\n        {\n          \"stringValue\": \"mig-6dlt\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 2071745\n            },\n            {\n              \"int64Value\": \"4\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2021-07-23T08:27:07.010750Z\",\n            \"endTime\": \"2021-07-23T08:27:07.010750Z\"\n          }\n        },\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 2071475\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2021-07-23T08:22:07.010750Z\",\n            \"endTime\": \"2021-07-23T08:22:07.010750Z\"\n          }\n        }\n      ]\n    },\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"europe-west4-a\"\n        },\n        {\n          \"stringValue\": \"gce2\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 207\n            },\n            {\n              \"int64Value\": \"4\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2021-07-23T08:27:07.010750Z\",\n            \"endTime\": \"2021-07-23T08:27:07.010750Z\"\n          }\n        },\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 28.5\n            },\n            {\n              \"int64Value\": \"2\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2021-07-23T08:22:07.010750Z\",\n            \"endTime\": \"2021-07-23T08:22:07.010750Z\"\n          }\n        }\n      ]\n    },\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"europe-west4-a\"\n        },\n        {\n          \"stringValue\": \"gce1\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 3627\n            },\n            {\n              \"int64Value\": \"4\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2021-07-23T08:27:07.010750Z\",\n            \"endTime\": \"2021-07-23T08:27:07.010750Z\"\n          }\n        },\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 3357\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2021-07-23T08:22:07.010750Z\",\n            \"endTime\": \"2021-07-23T08:22:07.010750Z\"\n          }\n        }\n      ]\n    },\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"europe-west1-b\"\n        },\n        {\n          \"stringValue\": \"gke-gke1-default-pool-564e261a-z7th\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 2396843\n            },\n            {\n              \"int64Value\": \"4\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2021-07-23T08:27:07.010750Z\",\n            \"endTime\": \"2021-07-23T08:27:07.010750Z\"\n          }\n        },\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 2396573\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2021-07-23T08:22:07.010750Z\",\n            \"endTime\": \"2021-07-23T08:22:07.010750Z\"\n          }\n        }\n      ]\n    },\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"europe-west1-b\"\n        },\n        {\n          \"stringValue\": \"gke-gke1-default-pool-564e261a-gzhv\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 2396846\n            },\n            {\n              \"int64Value\": \"4\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2021-07-23T08:27:07.010750Z\",\n            \"endTime\": \"2021-07-23T08:27:07.010750Z\"\n          }\n        },\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 2396576\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2021-07-23T08:22:07.010750Z\",\n            \"endTime\": \"2021-07-23T08:22:07.010750Z\"\n          }\n        }\n      ]\n    },\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"europe-west1-b\"\n        },\n        {\n          \"stringValue\": \"gke-gke1-default-pool-564e261a-dgx7\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 2396845\n            },\n            {\n              \"int64Value\": \"4\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2021-07-23T08:27:07.010750Z\",\n            \"endTime\": \"2021-07-23T08:27:07.010750Z\"\n          }\n        },\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 2396575\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2021-07-23T08:22:07.010750Z\",\n            \"endTime\": \"2021-07-23T08:22:07.010750Z\"\n          }\n        }\n      ]\n    },\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"europe-west1-b\"\n        },\n        {\n          \"stringValue\": \"gke-gke1-default-pool-564e261a-2j8p\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 2396846\n            },\n            {\n              \"int64Value\": \"4\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2021-07-23T08:27:07.010750Z\",\n            \"endTime\": \"2021-07-23T08:27:07.010750Z\"\n          }\n        },\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 2396576\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2021-07-23T08:22:07.010750Z\",\n            \"endTime\": \"2021-07-23T08:22:07.010750Z\"\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/org-constraint-compute.disableSerialPortAccess.json",
    "content": "{\n  \"booleanPolicy\": {\n    \"enforced\": true\n  },\n  \"constraint\": \"constraints/compute.disableSerialPortAccess\"\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/org-constraint-compute.disableSerialPortLogging.json",
    "content": "{\n  \"booleanPolicy\": {},\n  \"constraint\": \"constraints/compute.disableSerialPortLogging\"\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/org-constraint-compute.disableSshInBrowser.json",
    "content": "{\n  \"booleanPolicy\": {\n    \"enforced\": true\n  },\n  \"constraint\": \"constraints/compute.disableSshInBrowser\"\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/org-constraint-compute.requireOsLogin.json",
    "content": "{\n  \"booleanPolicy\": {},\n  \"constraint\": \"constraints/compute.requireOsLogin\"\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/org-constraint-compute.requireShieldedVm.json",
    "content": "{\n  \"booleanPolicy\": {},\n  \"constraint\": \"constraints/compute.requireShieldedVm\"\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/org-constraint-custom.arEnforceImmutableTags.json",
    "content": "{\n  \"constraint\": \"customConstraints/custom.arEnforceImmutableTags\",\n  \"booleanPolicy\": {}\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/org-constraint-iam.automaticIamGrantsForDefaultServiceAccounts.json",
    "content": "{\n  \"booleanPolicy\":{},\n  \"constraint\": \"constraints/iam.automaticIamGrantsForDefaultServiceAccounts\"\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/org-constraint-iam.disableCrossProjectServiceAccountUsage.json",
    "content": "{\n  \"booleanPolicy\": {},\n  \"constraint\": \"constraints/iam.disableCrossProjectServiceAccountUsage\"\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/org-constraints.json",
    "content": "{\n  \"constraints\": [\n    {\n      \"booleanConstraint\": {},\n      \"constraintDefault\": \"ALLOW\",\n      \"description\": \"This boolean constraint disables serial port access to Compute Engine VMs belonging to the organization, project, or folder where this constraint is set to True. By default, customers can enable serial port access for Compute Engine VMs on a per-VM or per-project basis using metadata attributes. Enforcing this constraint will disable serial port access for Compute Engine VMs, regardless of the metadata attributes.\",\n      \"displayName\": \"Disable VM serial port access\",\n      \"name\": \"constraints/compute.disableSerialPortAccess\"\n    },\n    {\n      \"booleanConstraint\": {},\n      \"constraintDefault\": \"ALLOW\",\n      \"description\": \"This boolean constraint disables serial port logging to Stackdriver from Compute Engine VMs belonging to the organization, project, or folder where this constraint is being enforced. By default, serial port logging for Compute Engine VMs is disabled, and can be selectively enabled on a per-VM or per-project basis using metadata attributes. When enforced, this constraint disables serial port logging for new Compute Engine VMs whenever a new VM is created, as well as preventing users from changing the metadata attribute of any VMs (old or new) to True. Disabling serial port logging can cause certain services that rely on it, such as Google Kubernetes Engine clusters, to not function correctly. Before you enforce this constraint, verify that the products in your project do not rely on serial port logging.\",\n      \"displayName\": \"Disable VM serial port logging to Stackdriver\",\n      \"name\": \"constraints/compute.disableSerialPortLogging\"\n    },\n    {\n      \"booleanConstraint\": {},\n      \"constraintDefault\": \"ALLOW\",\n      \"description\": \"This boolean constraint disables the SSH-in-browser tool in the Cloud Console for VMs that use OS Login and App Engine flexible environment VMs. When enforced, the SSH-in-browser button is disabled. By default, using the SSH-in-browser tool is allowed.\",\n      \"displayName\": \"Disable SSH-in-browser\",\n      \"name\": \"constraints/compute.disableSshInBrowser\"\n    },\n    {\n      \"booleanConstraint\": {},\n      \"constraintDefault\": \"ALLOW\",\n      \"description\": \"This boolean constraint, when set to true, enables OS Login on all newly created Projects. All VM instances created in new projects will have OS Login enabled. On new and existing projects, this constraint prevents metadata updates that disable OS Login at the project or instance level. By default, the OS Login feature is disabled on Compute Engine projects.GKE instances in private clusters running node pool versions 1.20.5-gke.2000 and later support OS Login. GKE instances in public clusters do not currently support OS Login. If this constraint is applied to a Project running public clusters, GKE instances running in that Project may not function properly.\",\n      \"displayName\": \"Require OS Login\",\n      \"name\": \"constraints/compute.requireOsLogin\"\n    },\n    {\n      \"booleanConstraint\": {},\n      \"constraintDefault\": \"ALLOW\",\n      \"description\": \"This boolean constraint, when set to True, requires that all new Compute Engine VM instances use Shielded disk images with Secure Boot, vTPM, and Integrity Monitoring options enabled. Secure Boot can be disabled after creation, if desired. Existing running instances will continue to work as usual. By default, Shielded VM features do not need to be enabled in order to create Compute Engine VM instances. Shielded VM features add verifiable integrity and exfiltration resistance to your VMs.\",\n      \"displayName\": \"Shielded VMs\",\n      \"name\": \"constraints/compute.requireShieldedVm\"\n    },\n    {\n      \"booleanConstraint\": {},\n      \"constraintDefault\": \"ALLOW\",\n      \"description\": \"This boolean constraint, when enforced, prevents the default App Engine and Compute Engine service accounts that are created in your projects from being automatically granted any IAM role on the project when the accounts are created. By default, these service accounts automatically receive the Editor role when they are created. To learn about default service accounts, see https://cloud.google.com/iam/help/service-accounts/default. To learn which roles to grant instead of the Editor role, see https://cloud.google.com/iam/help/service-accounts/troubleshoot-roles-default.\",\n      \"displayName\": \"Disable Automatic IAM Grants for Default Service Accounts\",\n      \"name\": \"constraints/iam.automaticIamGrantsForDefaultServiceAccounts\"\n    },\n    {\n      \"booleanConstraint\": {},\n      \"constraintDefault\": \"DENY\",\n      \"description\": \"When enforced, service accounts can only be deployed (using ServiceAccountUser role) to jobs (vms, functions, etc) running in the same project as the service account.\",\n      \"displayName\": \"Disable Cross-Project Service Account Usage\",\n      \"name\": \"constraints/iam.disableCrossProjectServiceAccountUsage\"\n    },\n    {\n      \"booleanConstraint\": {},\n      \"constraintDefault\": \"ALLOW\",\n      \"description\": \"All new Docker repositories must have tag immutability enabled.\",\n      \"displayName\": \"Enforce Immutable Tags\",\n      \"name\": \"customConstraints/custom.arEnforceImmutableTags\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/org-policies.json",
    "content": "{\n  \"policies\": [\n    {\n      \"version\": 2,\n      \"constraint\": \"constraints/cloudbuild.allowedWorkerPools\",\n      \"etag\": \"CNmNp74GEPCmnzw=\",\n      \"updateTime\": \"2025-03-06T16:01:29.126342Z\",\n      \"listPolicy\": {\n        \"allowedValues\": [\n          \"projects/12340004/locations/us-central1/workerPools/test-pool\"\n        ]\n      }\n    },\n    {\n      \"constraint\": \"constraints/compute.skipDefaultNetworkCreation\",\n      \"etag\": \"CL2Kp74GENDg7McD\",\n      \"updateTime\": \"2025-03-06T15:54:37.955986Z\",\n      \"booleanPolicy\": {}\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/project.json",
    "content": "{\n  \"name\": \"projects/12340002\",\n  \"parent\": \"folders/422810093603\",\n  \"projectId\": \"gcpdiag-gke1-aaaa\",\n  \"state\": \"ACTIVE\",\n  \"displayName\": \"gcpdiag test - gke1\",\n  \"createTime\": \"2021-12-06T10:39:13.610Z\",\n  \"updateTime\": \"2021-12-06T10:39:15.558Z\",\n  \"etag\": \"NdRtoQbprleONiALgkn2uw==\",\n  \"labels\": {\n    \"gcpdiag\": \"test\"\n  }\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/services.json",
    "content": "{\n  \"services\": [\n    {\n      \"name\": \"projects/12340002/services/bigquery.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigquery.googleapis.com\",\n        \"title\": \"BigQuery API\",\n        \"documentation\": {\n          \"summary\": \"A data platform for customers to create, manage, share and query data.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340002\"\n    },\n    {\n      \"name\": \"projects/12340002/services/bigquerystorage.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigquerystorage.googleapis.com\",\n        \"title\": \"BigQuery Storage API\",\n        \"documentation\": {},\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340002\"\n    },\n    {\n      \"name\": \"projects/12340002/services/cloudresourcemanager.googleapis.com\",\n      \"config\": {\n        \"name\": \"cloudresourcemanager.googleapis.com\",\n        \"title\": \"Cloud Resource Manager API\",\n        \"documentation\": {\n          \"summary\": \"Creates, reads, and updates metadata for Google Cloud Platform resource containers.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"serviceruntime.googleapis.com/api\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_version\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_method\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/consumer_project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/consumer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/producer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/consumer_resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/api\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/api/consumer/quota_used_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_refund_count\",\n                \"serviceruntime.googleapis.com/quota/used\",\n                \"serviceruntime.googleapis.com/quota/limit\",\n                \"serviceruntime.googleapis.com/quota/exceeded\",\n                \"serviceruntime.googleapis.com/allocation/consumer/quota_used_count\",\n                \"serviceruntime.googleapis.com/api/consumer/request_count\",\n                \"serviceruntime.googleapis.com/api/consumer/error_count\",\n                \"serviceruntime.googleapis.com/api/consumer/total_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_overhead_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/backend_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/response_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/consumer_quota\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/quota/rate/consumer/used_count\",\n                \"serviceruntime.googleapis.com/quota/rate/consumer/refund_count\",\n                \"serviceruntime.googleapis.com/quota/allocation/consumer/usage\",\n                \"serviceruntime.googleapis.com/quota/consumer/limit\",\n                \"serviceruntime.googleapis.com/quota/consumer/exceeded\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340002\"\n    },\n    {\n      \"name\": \"projects/12340002/services/compute.googleapis.com\",\n      \"config\": {\n        \"name\": \"compute.googleapis.com\",\n        \"title\": \"Compute Engine API\",\n        \"documentation\": {\n          \"summary\": \"Creates and runs virtual machines on Google Cloud Platform.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"compute.googleapis.com/VpcNetwork\",\n            \"displayName\": \"VPC Network\",\n            \"description\": \"VPC Network.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the VPC Network.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the VPC Network, global always.\"\n              },\n              {\n                \"key\": \"network_id\",\n                \"description\": \"VPC Network resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/instances_per_vpc_network\",\n                \"compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/ip_aliases_per_vpc_network\",\n                \"compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/instances_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/subnet_ranges_per_vpc_network\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/instances_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/instances_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/instances_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340002\"\n    },\n    {\n      \"name\": \"projects/12340002/services/container.googleapis.com\",\n      \"config\": {\n        \"name\": \"container.googleapis.com\",\n        \"title\": \"Kubernetes Engine API\",\n        \"documentation\": {\n          \"summary\": \"Builds and manages container-based applications, powered by the open source Kubernetes technology.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340002\"\n    },\n    {\n      \"name\": \"projects/12340002/services/containerregistry.googleapis.com\",\n      \"config\": {\n        \"name\": \"containerregistry.googleapis.com\",\n        \"title\": \"Container Registry API\",\n        \"documentation\": {\n          \"summary\": \"Google Container Registry provides secure, private Docker image storage on Google Cloud Platform.  Our API follows the Docker Registry API specification, so we are fully compatible with the Docker CLI client, as well as standard tooling using the Docker Registry API.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"serviceruntime.googleapis.com/api\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_version\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_method\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/consumer_project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/consumer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/producer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/consumer_resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/api\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/api/consumer/quota_used_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_refund_count\",\n                \"serviceruntime.googleapis.com/quota/used\",\n                \"serviceruntime.googleapis.com/quota/limit\",\n                \"serviceruntime.googleapis.com/quota/exceeded\",\n                \"serviceruntime.googleapis.com/allocation/consumer/quota_used_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/consumer_quota\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/quota/rate/consumer/used_count\",\n                \"serviceruntime.googleapis.com/quota/rate/consumer/refund_count\",\n                \"serviceruntime.googleapis.com/quota/allocation/consumer/usage\",\n                \"serviceruntime.googleapis.com/quota/consumer/limit\",\n                \"serviceruntime.googleapis.com/quota/consumer/exceeded\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340002\"\n    },\n    {\n      \"name\": \"projects/12340002/services/iam.googleapis.com\",\n      \"config\": {\n        \"name\": \"iam.googleapis.com\",\n        \"title\": \"Identity and Access Management (IAM) API\",\n        \"documentation\": {\n          \"summary\": \"Manages identity and access control for Google Cloud Platform resources, including the creation of service accounts, which you can use to authenticate to Google and make API calls.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"iam.googleapis.com/WorkloadIdentityPoolProvider\",\n            \"displayName\": \"Workload Identity Pool Provider\",\n            \"description\": \"A workload identity pool provider.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location of the resource.\"\n              },\n              {\n                \"key\": \"pool_id\",\n                \"description\": \"The ID of the provider's workload identity pool parent resource.\"\n              },\n              {\n                \"key\": \"provider_id\",\n                \"description\": \"The ID of the workload identity pool provider resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"iam_service_account\",\n            \"displayName\": \"IAM Service Account\",\n            \"description\": \"An IAM Service Account.\",\n            \"labels\": [\n              {\n                \"key\": \"project_id\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"unique_id\",\n                \"description\": \"The unique_id of the service account.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"iam_service_account\",\n              \"metrics\": [\n                \"iam.googleapis.com/service_account/authn_events_count\",\n                \"iam.googleapis.com/service_account/key/authn_events_count\",\n                \"iam.googleapis.com/service_account/authn_events_count_preprod\",\n                \"iam.googleapis.com/service_account/key/authn_events_count_preprod\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"iam.googleapis.com/WorkloadIdentityPoolProvider\",\n              \"metrics\": [\n                \"iam.googleapis.com/workload_identity_federation/count\",\n                \"iam.googleapis.com/workload_identity_federation/key_usage_count\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340002\"\n    },\n    {\n      \"name\": \"projects/12340002/services/iamcredentials.googleapis.com\",\n      \"config\": {\n        \"name\": \"iamcredentials.googleapis.com\",\n        \"title\": \"IAM Service Account Credentials API\",\n        \"documentation\": {\n          \"summary\": \"Creates short-lived credentials for impersonating IAM service accounts. To enable this API, you must enable the IAM API (iam.googleapis.com).\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"serviceruntime.googleapis.com/api\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_version\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_method\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/consumer_project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              }\n            ]\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/api\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/api/consumer/quota_used_count\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340002\"\n    },\n    {\n      \"name\": \"projects/12340002/services/monitoring.googleapis.com\",\n      \"config\": {\n        \"name\": \"monitoring.googleapis.com\",\n        \"title\": \"Cloud Monitoring API\",\n        \"documentation\": {\n          \"summary\": \"Manages your Cloud Monitoring data and configurations.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"monitoring.googleapis.com/ChargedProject\",\n            \"displayName\": \"Cloud monitoring target\",\n            \"description\": \"A cloud monitoring specialization target schema of cloud.ChargedProject.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The monitored resource container. Could be project, workspace, etc.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The service-specific notion of location.\"\n              },\n              {\n                \"key\": \"service\",\n                \"description\": \"The name of the API service with which the data is associated (e.g.,'monitoring.googleapis.com').\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"monitoring.googleapis.com/MetricStatistics\",\n            \"displayName\": \"Metric Statistics\",\n            \"description\": \"Information about a user-written metric in Cloud Monitoring.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project to which the metric is written, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The cloud region where the metric was received.\"\n              },\n              {\n                \"key\": \"metric_type\",\n                \"description\": \"The metric type.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"monitoring.googleapis.com/MetricIngestionAttribution\",\n            \"displayName\": \"Metric Ingestion Attribution\",\n            \"description\": \"Attribution for metric ingestion.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project to which the metric is written, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The cloud region where the metric was received.\"\n              },\n              {\n                \"key\": \"attribution_dimension\",\n                \"description\": \"The dimension used for attribution reporting. It is not recommended that aggregations are performed across dimensions because a single metric point can be recorded with multiple dimensions which could cause double counting. Currently only \\\"namespace\\\" is supported.\"\n              },\n              {\n                \"key\": \"attribution_id\",\n                \"description\": \"The attribution id of the source of the metric write.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"monitoring.googleapis.com/ChargedProject\",\n              \"metrics\": [\n                \"monitoring.googleapis.com/billing/bytes_ingested\",\n                \"monitoring.googleapis.com/billing/samples_ingested\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"monitoring.googleapis.com/MetricStatistics\",\n              \"metrics\": [\n                \"monitoring.googleapis.com/collection/write_request_count\",\n                \"monitoring.googleapis.com/collection/write_request_point_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"monitoring.googleapis.com/MetricIngestionAttribution\",\n              \"metrics\": [\n                \"monitoring.googleapis.com/collection/attribution/points_count\",\n                \"monitoring.googleapis.com/collection/attribution/sample_count\",\n                \"monitoring.googleapis.com/collection/attribution/write_sample_count\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340002\"\n    },\n    {\n      \"name\": \"projects/12340002/services/oslogin.googleapis.com\",\n      \"config\": {\n        \"name\": \"oslogin.googleapis.com\",\n        \"title\": \"Cloud OS Login API\",\n        \"documentation\": {\n          \"summary\": \"You can use OS Login to manage access to your VM instances using IAM roles.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340002\"\n    },\n    {\n      \"name\": \"projects/12340002/services/pubsub.googleapis.com\",\n      \"config\": {\n        \"name\": \"pubsub.googleapis.com\",\n        \"title\": \"Cloud Pub/Sub API\",\n        \"documentation\": {\n          \"summary\": \"Provides reliable, many-to-many, asynchronous messaging between applications.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340002\"\n    },\n    {\n      \"name\": \"projects/12340002/services/storage-api.googleapis.com\",\n      \"config\": {\n        \"name\": \"storage-api.googleapis.com\",\n        \"title\": \"Google Cloud Storage JSON API\",\n        \"documentation\": {\n          \"summary\": \"Lets you store and retrieve potentially-large, immutable data objects.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340002\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/subscriptions.json",
    "content": "{}\n"
  },
  {
    "path": "test-data/gke1/json-dumps/topics.json",
    "content": "{}\n"
  },
  {
    "path": "test-data/gke1/project.tf",
    "content": "/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nterraform {\n  required_providers {\n    kubernetes = {\n      source  = \"hashicorp/kubernetes\"\n      version = \">= 2.0.3\"\n    }\n    google = {\n      source  = \"hashicorp/google\"\n      version = \">= 4.4.0\"\n    }\n    google-beta = {\n      source  = \"hashicorp/google-beta\"\n      version = \">= 4.4.0\"\n    }\n  }\n}\n\nresource \"random_string\" \"project_id_suffix\" {\n  length  = 8\n  number  = true\n  lower   = true\n  upper   = false\n  special = false\n}\n\nresource \"google_project\" \"project\" {\n  name            = \"gcpdiag test - gke1\"\n  project_id      = \"gcpdiag-gke1-${random_string.project_id_suffix.id}\"\n  billing_account = var.billing_account_id\n  org_id          = var.folder_id == \"\" ? var.org_id : null\n  folder_id       = var.folder_id != \"\" ? var.folder_id : null\n  labels = {\n    gcpdiag : \"test\"\n  }\n}\n\nresource \"google_project_service\" \"compute\" {\n  project = google_project.project.project_id\n  service = \"compute.googleapis.com\"\n}\n\nresource \"google_project_service\" \"container\" {\n  project = google_project.project.project_id\n  service = \"container.googleapis.com\"\n\n  depends_on = [google_project_service.compute]\n}\n\nresource \"google_project_service\" \"cloudresourcemanager\" {\n  project = google_project.project.project_id\n  service = \"cloudresourcemanager.googleapis.com\"\n}\n\noutput \"project_id\" {\n  value = google_project.project.project_id\n}\n\noutput \"project_id_suffix\" {\n  value = random_string.project_id_suffix.id\n}\n\noutput \"project_nr\" {\n  value = google_project.project.number\n}\n\noutput \"org_id\" {\n  value = var.org_id\n}\n"
  },
  {
    "path": "test-data/gke1/variables.tf",
    "content": "variable \"billing_account_id\" {}\n\nvariable \"org_id\" {}\nvariable \"folder_id\" { default = \"\" }\n"
  },
  {
    "path": "test-data/gke2/Makefile",
    "content": "PROJECT_ID  :=  $(shell terraform output -raw project_id)\nPROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix)\nPROJECT_NR  := $(shell terraform output -raw project_nr)\nORG_ID      := $(shell terraform output -raw org_id)\nCURL         = ../../bin/curl-wrap.sh\nJSON_CLEANER = ../../bin/json-cleaner\nZONE_1       = europe-west10-a\nREGION_1       = europe-west10\n\nFAKE_PROJECT_ID_SUFFIX = rrrr\nFAKE_PROJECT_NR = 1234000173\nFAKE_ORG_ID = 1111225422\n\n\nall:\t\\\n\tjson-dumps/compute-effective-firewalls-default.json \\\n\tjson-dumps/compute-instances-$(ZONE_1).json \\\n\tjson-dumps/compute-instances-empty.json \\\n\tjson-dumps/compute-interconnects.json \\\n\tjson-dumps/compute-migs-$(ZONE_1).json \\\n\tjson-dumps/compute-migs-empty.json \\\n\tjson-dumps/compute-disks-$(ZONE_1).json \\\n\tjson-dumps/compute-disks-empty.json \\\n\tjson-dumps/compute-igs-empty.json \\\n\tjson-dumps/compute-network-default.json \\\n\tjson-dumps/compute-project.json \\\n\tjson-dumps/compute-subnetworks-aggregated.json \\\n\tjson-dumps/compute-subnetwork-policy.json \\\n\tjson-dumps/compute-templates.json \\\n\tjson-dumps/compute-regions.json \\\n\tjson-dumps/compute-zones.json \\\n\tjson-dumps/compute-routers-europe-west4.json \\\n\tjson-dumps/container-clusters.json \\\n\tjson-dumps/container-server-config-$(REGION_1).json \\\n\tjson-dumps/container-server-config-$(ZONE_1).json \\\n\tjson-dumps/iam-policy.json \\\n\tjson-dumps/iam-roles-custom.json \\\n\tjson-dumps/iam-roles-predefined-1.json.gz \\\n\tjson-dumps/iam-roles-predefined-2.json.gz \\\n\tjson-dumps/iam-roles-get.json \\\n\tjson-dumps/iam-service-accounts.json \\\n\tjson-dumps/iam-service-account-policy.json \\\n\tjson-dumps/logging-entries-1.json \\\n\tjson-dumps/monitoring-query.json \\\n\tjson-dumps/project.json \\\n\tjson-dumps/services.json\n\ninclude ../Makefile.inc\n\n# compute.googleapis.com\n\njson-dumps/compute-regions.json:\n\t$(CURL) -fsS \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/regions' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-zones.json:\n\t$(CURL) -fsS \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-instances-$(ZONE_1).json:\n\t$(CURL) -fsS \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$(ZONE_1)/instances' \\\n\t\t| $(JSON_CLEANER) instances \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-migs-$(ZONE_1).json:\n\t$(CURL) -fsS \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$(ZONE_1)/instanceGroupManagers' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-instances-empty.json:\n\t$(CURL) -fsS \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$(ZONE_EMPTY)/instances' \\\n\t\t| $(JSON_CLEANER) instances \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-migs-empty.json:\n\t$(CURL) -fsS \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$(ZONE_EMPTY)/instanceGroupManagers' \\\n\t\t| $(JSON_CLEANER) instances \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-igs-empty.json:\n\t$(CURL) -fsS \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$(ZONE_EMPTY)/instanceGroups' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-project.json:\n\t$(CURL) -fsS \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)' \\\n\t\t| $(JSON_CLEANER) compute-project \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-network-default.json:\n\t$(CURL) -fsS \\\n\t        'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/global/networks/default' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-effective-firewalls-default.json:\n\t$(CURL) -fsS \\\n\t        'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/global/networks/default/getEffectiveFirewalls' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-templates.json:\n\tZONE=$(subst json-dumps/,,$%); \\\n\t$(CURL) -fsS \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/global/instanceTemplates' \\\n\t\t| $(JSON_CLEANER) compute-templates \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-subnetwork-policy.json:\n\t$(CURL) -fsS \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/regions/$(REGION_1)/subnetworks/$(SUBNETWORK_1)/getIamPolicy' \\\n\t\t--header \"Content-Type:text/json\" \\\n\t\t| $(JSON_CLEANER) other \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-routers-%.json:\n\tREGION=$(subst json-dumps/,,$*); \\\n\t$(CURL) -fsS \\\n\t        \"https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/regions/$$REGION/routers\" \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-disks-%.json:\n\t$(CURL) -fsS \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$*/disks' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-disks-empty.json: json-dumps/compute-disks-$(ZONE_EMPTY).json\n\tln -sf $(notdir $<) $@\n\n# cloudresourcemanager.googleapis.com\n\njson-dumps/project.json:\n\t$(CURL) -fsS \\\n\t\t'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/iam-policy.json:\n\t$(CURL) -fsS \\\n\t\t'https://cloudresourcemanager.googleapis.com/v1/projects/$(PROJECT_ID):getIamPolicy' \\\n\t\t-X POST  --header \"Content-Type:text/json\" \\\n\t\t-d \"\" \\\n\t\t| $(JSON_CLEANER) other \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\n# iam.googleapis.com\n\njson-dumps/iam-roles-predefined-1.json.gz:\n\t$(CURL) -fsS \\\n\t\t'https://iam.googleapis.com/v1/roles?view=FULL&pageSize=500' \\\n\t\t| $(SED_SUBST_FAKE) \\\n\t        | gzip -c >$@\n\njson-dumps/iam-roles-predefined-2.json.gz: json-dumps/iam-roles-predefined-1.json.gz\n\t$(CURL) -fsS \\\n\t\t'https://iam.googleapis.com/v1/roles?view=FULL&pageSize=500&pageToken=$(shell zcat json-dumps/iam-roles-predefined-1.json.gz | jq -r '.nextPageToken')' \\\n\t\t| $(SED_SUBST_FAKE) \\\n\t        | gzip -c >$@\n\njson-dumps/iam-roles-custom.json:\n\t$(CURL) -fsS \\\n\t\t'https://iam.googleapis.com/v1/projects/$(PROJECT_ID)/roles?view=FULL&pageSize=500' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/iam-roles-get.json:\n\t$(CURL) -fsS \\\n\t\t'https://iam.googleapis.com/v1/roles/container.nodeServiceAgent' \\\n\t\t| $(SED_SUBST_FAKE) \\\n\t\t| jq '{\"roles\": [.]}' >$@\n\njson-dumps/iam-service-accounts.json:\n\t$(CURL) -fsS \\\n\t\t'https://iam.googleapis.com/v1/projects/$(PROJECT_ID)/serviceAccounts' \\\n\t\t| $(JSON_CLEANER) service-accounts \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/iam-service-account-policy.json:\n\t$(CURL) -fsS \\\n\t\t'https://iam.googleapis.com/v1/$(GKE2_SA):getIamPolicy' \\\n\t\t-X POST  --header \"Content-Type:text/json\" \\\n\t\t-d \"\" \\\n\t\t| $(JSON_CLEANER) other \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\n# container.googleapis.com\n\njson-dumps/container-clusters.json:\n\t$(CURL) -fsS \\\n\t\t'https://container.googleapis.com/v1/projects/$(PROJECT_ID)/locations/-/clusters' \\\n\t\t| $(JSON_CLEANER) clusters \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/container-server-config-$(REGION_1).json:\n\t$(CURL) -fsS \\\n\t\t'https://container.googleapis.com/v1/projects/$(PROJECT_ID)/locations/$(REGION_1)/serverConfig' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/container-server-config-$(ZONE_1).json:\n\t$(CURL) -fsS \\\n\t\t'https://container.googleapis.com/v1/projects/$(PROJECT_ID)/zones/$(ZONE_1)/serverconfig' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\n# serviceusage.googleapis.com\n\njson-dumps/services.json:\n\t$(CURL) -fsS \\\n\t        'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\n\n# If you need to recreate the JSON: adapt the timestamp and make sure that there are some entries found.\ndefine LOGGING_ENTRIES_BODY\n{\"orderBy\": \"timestamp desc\", \"filter\":\"timestamp > \\\"2024-04-16T00:00:00+00:00\\\" AND \\\ntimestamp < \\\"2024-04-17T00:00:00+00:00\\\" AND resource.type=\\\"k8s_cluster\\\" AND \\\nlog_id(\\\"container.googleapis.com/cluster-autoscaler-visibility\\\")\",\\\n\"projectIds\":[\"${PROJECT_ID}\"]}\nendef\nexport LOGGING_ENTRIES_BODY\n\njson-dumps/logging-entries-1.json:\n\t$(CURL) -fsS --request POST \\\n\t\t'https://logging.googleapis.com/v2/entries:list' \\\n\t\t--header 'Accept: application/json' \\\n\t\t--header 'Content-Type: application/json' \\\n\t\t--data '${LOGGING_ENTRIES_BODY}' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\ndefine MONITORING_QUERY\n{ \\\n  \"query\": \"fetch consumer_quota \\\n| metric 'serviceruntime.googleapis.com/quota/exceeded' \\\n| group_by 1h, [value_exceeded_count_true: count_true(value.exceeded)] \\\n| within 1d \\\n\" \\\n}\nendef\nexport MONITORING_QUERY\n\njson-dumps/monitoring-query.json:\n\t$(CURL) -fsS \\\n\t\t'https://monitoring.googleapis.com/v3/projects/$(PROJECT_ID)/timeSeries:query' \\\n\t\t--header \"Content-Type: application/json\" -X POST \\\n\t\t--data '$(MONITORING_QUERY)' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n"
  },
  {
    "path": "test-data/gke2/json-dumps/compute-disks-empty.json",
    "content": "{\n  \"kind\": \"compute#diskList\",\n  \"id\": \"projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west2-b/disks\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west2-b/disks\"\n}\n"
  },
  {
    "path": "test-data/gke2/json-dumps/compute-disks-europe-west10-a.json",
    "content": "{\n  \"kind\": \"compute#diskList\",\n  \"id\": \"projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/disks\",\n  \"items\": [\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"7236257982545695066\",\n      \"creationTimestamp\": \"2024-04-09T05:08:22.957-07:00\",\n      \"name\": \"gke-gcp-cluster-default-pool-82e0c046-8m8b\",\n      \"sizeGb\": \"100\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/disks/gke-gcp-cluster-default-pool-82e0c046-8m8b\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-1278-gke1067004-cos-105-17412-226-62-c-pre\",\n      \"sourceImageId\": \"8380329917531566231\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/diskTypes/pd-balanced\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n        \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"SEV_SNP_CAPABLE\"\n        },\n        {\n          \"type\": \"SEV_LIVE_MIGRATABLE_V2\"\n        },\n        {\n          \"type\": \"SECURE_BOOT\"\n        },\n        {\n          \"type\": \"SEV_CAPABLE\"\n        },\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        },\n        {\n          \"type\": \"UEFI_COMPATIBLE\"\n        },\n        {\n          \"type\": \"SEV_LIVE_MIGRATABLE\"\n        },\n        {\n          \"type\": \"GVNIC\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2024-04-09T05:08:22.958-07:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/instances/gke-gcp-cluster-default-pool-82e0c046-8m8b\"\n      ],\n      \"labels\": {\n        \"goog-gke-node\": \"\",\n        \"goog-gke-volume\": \"\",\n        \"goog-k8s-cluster-location\": \"europe-west10\",\n        \"goog-k8s-cluster-name\": \"gcp-cluster\",\n        \"goog-k8s-node-pool-name\": \"default-pool\"\n      },\n      \"labelFingerprint\": \"F5KkOPA8K4w=\",\n      \"licenseCodes\": [\n        \"6880041984096540132\",\n        \"1001010\",\n        \"1001003\",\n        \"166739712233658766\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\",\n      \"satisfiesPzi\": true,\n      \"architecture\": \"X86_64\"\n    },\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"1694979954220712298\",\n      \"creationTimestamp\": \"2024-04-10T05:01:10.021-07:00\",\n      \"name\": \"gke-gcp-cluster-default-pool-c7891c09-b4qc\",\n      \"sizeGb\": \"100\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/disks/gke-gcp-cluster-default-pool-c7891c09-b4qc\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-1278-gke1067004-cos-105-17412-226-62-c-pre\",\n      \"sourceImageId\": \"8380329917531566231\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/diskTypes/pd-balanced\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n        \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"SEV_SNP_CAPABLE\"\n        },\n        {\n          \"type\": \"SEV_LIVE_MIGRATABLE_V2\"\n        },\n        {\n          \"type\": \"SECURE_BOOT\"\n        },\n        {\n          \"type\": \"SEV_CAPABLE\"\n        },\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        },\n        {\n          \"type\": \"UEFI_COMPATIBLE\"\n        },\n        {\n          \"type\": \"SEV_LIVE_MIGRATABLE\"\n        },\n        {\n          \"type\": \"GVNIC\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2024-04-10T05:01:10.021-07:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/instances/gke-gcp-cluster-default-pool-c7891c09-b4qc\"\n      ],\n      \"labels\": {\n        \"goog-gke-node\": \"\",\n        \"goog-gke-volume\": \"\",\n        \"goog-k8s-cluster-location\": \"europe-west10-a\",\n        \"goog-k8s-cluster-name\": \"gcp-cluster\",\n        \"goog-k8s-node-pool-name\": \"default-pool\"\n      },\n      \"labelFingerprint\": \"SThA_aBnyNs=\",\n      \"licenseCodes\": [\n        \"6880041984096540132\",\n        \"1001010\",\n        \"1001003\",\n        \"166739712233658766\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\",\n      \"satisfiesPzi\": true,\n      \"architecture\": \"X86_64\"\n    },\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"8808034279930501129\",\n      \"creationTimestamp\": \"2024-04-09T04:30:46.825-07:00\",\n      \"name\": \"gke-gcp-cluster-default-pool-c7891c09-ck7c\",\n      \"sizeGb\": \"100\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/disks/gke-gcp-cluster-default-pool-c7891c09-ck7c\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-1278-gke1067004-cos-105-17412-226-62-c-pre\",\n      \"sourceImageId\": \"8380329917531566231\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/diskTypes/pd-balanced\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n        \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"SEV_SNP_CAPABLE\"\n        },\n        {\n          \"type\": \"SEV_LIVE_MIGRATABLE_V2\"\n        },\n        {\n          \"type\": \"SECURE_BOOT\"\n        },\n        {\n          \"type\": \"SEV_CAPABLE\"\n        },\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        },\n        {\n          \"type\": \"UEFI_COMPATIBLE\"\n        },\n        {\n          \"type\": \"SEV_LIVE_MIGRATABLE\"\n        },\n        {\n          \"type\": \"GVNIC\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2024-04-09T04:30:46.825-07:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/instances/gke-gcp-cluster-default-pool-c7891c09-ck7c\"\n      ],\n      \"labels\": {\n        \"goog-gke-node\": \"\",\n        \"goog-gke-volume\": \"\",\n        \"goog-k8s-cluster-location\": \"europe-west10-a\",\n        \"goog-k8s-cluster-name\": \"gcp-cluster\",\n        \"goog-k8s-node-pool-name\": \"default-pool\"\n      },\n      \"labelFingerprint\": \"SThA_aBnyNs=\",\n      \"licenseCodes\": [\n        \"6880041984096540132\",\n        \"1001010\",\n        \"1001003\",\n        \"166739712233658766\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\",\n      \"satisfiesPzi\": true,\n      \"architecture\": \"X86_64\"\n    },\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"3727191795301916253\",\n      \"creationTimestamp\": \"2024-04-09T04:04:20.364-07:00\",\n      \"name\": \"gke-gcp-cluster-default-pool-c7891c09-z2wh\",\n      \"sizeGb\": \"100\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/disks/gke-gcp-cluster-default-pool-c7891c09-z2wh\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-1278-gke1067004-cos-105-17412-226-62-c-pre\",\n      \"sourceImageId\": \"8380329917531566231\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/diskTypes/pd-balanced\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n        \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node\",\n        \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"SEV_SNP_CAPABLE\"\n        },\n        {\n          \"type\": \"SEV_LIVE_MIGRATABLE_V2\"\n        },\n        {\n          \"type\": \"SECURE_BOOT\"\n        },\n        {\n          \"type\": \"SEV_CAPABLE\"\n        },\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        },\n        {\n          \"type\": \"UEFI_COMPATIBLE\"\n        },\n        {\n          \"type\": \"SEV_LIVE_MIGRATABLE\"\n        },\n        {\n          \"type\": \"GVNIC\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2024-04-09T04:04:20.364-07:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/instances/gke-gcp-cluster-default-pool-c7891c09-z2wh\"\n      ],\n      \"labels\": {\n        \"goog-gke-node\": \"\",\n        \"goog-gke-volume\": \"\",\n        \"goog-k8s-cluster-location\": \"europe-west10-a\",\n        \"goog-k8s-cluster-name\": \"gcp-cluster\",\n        \"goog-k8s-node-pool-name\": \"default-pool\"\n      },\n      \"labelFingerprint\": \"SThA_aBnyNs=\",\n      \"licenseCodes\": [\n        \"6880041984096540132\",\n        \"1001010\",\n        \"1001003\",\n        \"166739712233658766\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\",\n      \"satisfiesPzi\": true,\n      \"architecture\": \"X86_64\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/disks\"\n}\n"
  },
  {
    "path": "test-data/gke2/json-dumps/compute-disks-europe-west2-b.json",
    "content": "{\n  \"kind\": \"compute#diskList\",\n  \"id\": \"projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west2-b/disks\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west2-b/disks\"\n}\n"
  },
  {
    "path": "test-data/gke2/json-dumps/compute-effective-firewalls-default.json",
    "content": "{\n  \"firewalls\": [\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"1849345197746858590\",\n      \"creationTimestamp\": \"2023-05-22T00:07:29.737-07:00\",\n      \"name\": \"default-allow-rdp\",\n      \"description\": \"Allow RDP from anywhere\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n      \"priority\": 65534,\n      \"sourceRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"3389\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/firewalls/default-allow-rdp\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"4812275889196274033\",\n      \"creationTimestamp\": \"2024-04-09T05:07:58.650-07:00\",\n      \"name\": \"gke-gcp-cluster-714df7d8-exkubelet\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n      \"priority\": 1000,\n      \"sourceRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"targetTags\": [\n        \"gke-gcp-cluster-714df7d8-node\"\n      ],\n      \"denied\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"10255\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/firewalls/gke-gcp-cluster-714df7d8-exkubelet\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"6881457288343228785\",\n      \"creationTimestamp\": \"2024-04-09T05:07:58.814-07:00\",\n      \"name\": \"gke-gcp-cluster-714df7d8-vms\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n      \"priority\": 1000,\n      \"sourceRanges\": [\n        \"10.128.0.0/9\"\n      ],\n      \"targetTags\": [\n        \"gke-gcp-cluster-714df7d8-node\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"icmp\"\n        },\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"1-65535\"\n          ]\n        },\n        {\n          \"IPProtocol\": \"udp\",\n          \"ports\": [\n            \"1-65535\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/firewalls/gke-gcp-cluster-714df7d8-vms\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"7998732574437970289\",\n      \"creationTimestamp\": \"2024-04-09T05:07:58.525-07:00\",\n      \"name\": \"gke-gcp-cluster-714df7d8-all\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n      \"priority\": 1000,\n      \"sourceRanges\": [\n        \"10.100.0.0/14\"\n      ],\n      \"targetTags\": [\n        \"gke-gcp-cluster-714df7d8-node\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\"\n        },\n        {\n          \"IPProtocol\": \"udp\"\n        },\n        {\n          \"IPProtocol\": \"icmp\"\n        },\n        {\n          \"IPProtocol\": \"esp\"\n        },\n        {\n          \"IPProtocol\": \"ah\"\n        },\n        {\n          \"IPProtocol\": \"sctp\"\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/firewalls/gke-gcp-cluster-714df7d8-all\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"7648164098059312759\",\n      \"creationTimestamp\": \"2024-04-09T04:03:52.923-07:00\",\n      \"name\": \"gke-gcp-cluster-1d08860d-exkubelet\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n      \"priority\": 1000,\n      \"sourceRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"targetTags\": [\n        \"gke-gcp-cluster-1d08860d-node\"\n      ],\n      \"denied\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"10255\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/firewalls/gke-gcp-cluster-1d08860d-exkubelet\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"2720921107203399287\",\n      \"creationTimestamp\": \"2024-04-09T04:03:52.816-07:00\",\n      \"name\": \"gke-gcp-cluster-1d08860d-all\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n      \"priority\": 1000,\n      \"sourceRanges\": [\n        \"10.40.0.0/14\"\n      ],\n      \"targetTags\": [\n        \"gke-gcp-cluster-1d08860d-node\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\"\n        },\n        {\n          \"IPProtocol\": \"udp\"\n        },\n        {\n          \"IPProtocol\": \"icmp\"\n        },\n        {\n          \"IPProtocol\": \"esp\"\n        },\n        {\n          \"IPProtocol\": \"ah\"\n        },\n        {\n          \"IPProtocol\": \"sctp\"\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/firewalls/gke-gcp-cluster-1d08860d-all\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"8797693566344797814\",\n      \"creationTimestamp\": \"2024-04-09T04:03:53.047-07:00\",\n      \"name\": \"gke-gcp-cluster-1d08860d-vms\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n      \"priority\": 1000,\n      \"sourceRanges\": [\n        \"10.128.0.0/9\"\n      ],\n      \"targetTags\": [\n        \"gke-gcp-cluster-1d08860d-node\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"icmp\"\n        },\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"1-65535\"\n          ]\n        },\n        {\n          \"IPProtocol\": \"udp\",\n          \"ports\": [\n            \"1-65535\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/firewalls/gke-gcp-cluster-1d08860d-vms\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"3236034084249050743\",\n      \"creationTimestamp\": \"2024-04-09T04:03:52.890-07:00\",\n      \"name\": \"gke-gcp-cluster-1d08860d-inkubelet\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n      \"priority\": 999,\n      \"sourceRanges\": [\n        \"10.40.0.0/14\"\n      ],\n      \"sourceTags\": [\n        \"gke-gcp-cluster-1d08860d-node\"\n      ],\n      \"targetTags\": [\n        \"gke-gcp-cluster-1d08860d-node\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"10255\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/firewalls/gke-gcp-cluster-1d08860d-inkubelet\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"3476414139596188254\",\n      \"creationTimestamp\": \"2023-05-22T00:07:29.620-07:00\",\n      \"name\": \"default-allow-internal\",\n      \"description\": \"Allow internal traffic on the default network\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n      \"priority\": 65534,\n      \"sourceRanges\": [\n        \"10.128.0.0/9\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"0-65535\"\n          ]\n        },\n        {\n          \"IPProtocol\": \"udp\",\n          \"ports\": [\n            \"0-65535\"\n          ]\n        },\n        {\n          \"IPProtocol\": \"icmp\"\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/firewalls/default-allow-internal\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"5841179551740635742\",\n      \"creationTimestamp\": \"2023-05-22T00:07:29.796-07:00\",\n      \"name\": \"default-allow-icmp\",\n      \"description\": \"Allow ICMP from anywhere\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n      \"priority\": 65534,\n      \"sourceRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"icmp\"\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/firewalls/default-allow-icmp\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"1242951362329219441\",\n      \"creationTimestamp\": \"2024-04-09T05:07:58.451-07:00\",\n      \"name\": \"gke-gcp-cluster-714df7d8-inkubelet\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n      \"priority\": 999,\n      \"sourceRanges\": [\n        \"10.100.0.0/14\"\n      ],\n      \"sourceTags\": [\n        \"gke-gcp-cluster-714df7d8-node\"\n      ],\n      \"targetTags\": [\n        \"gke-gcp-cluster-714df7d8-node\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"10255\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/firewalls/gke-gcp-cluster-714df7d8-inkubelet\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"5377060661278429196\",\n      \"creationTimestamp\": \"2024-01-05T03:58:28.029-08:00\",\n      \"name\": \"allow-http\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n      \"priority\": 1000,\n      \"sourceRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"targetTags\": [\n        \"http-server\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"80\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/firewalls/allow-http\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"1978749860840909406\",\n      \"creationTimestamp\": \"2023-05-22T00:07:29.679-07:00\",\n      \"name\": \"default-allow-ssh\",\n      \"description\": \"Allow SSH from anywhere\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n      \"priority\": 65534,\n      \"sourceRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"22\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/firewalls/default-allow-ssh\"\n    }\n  ],\n  \"firewallPolicys\": [\n    {\n      \"name\": \"902824820698\",\n      \"type\": \"HIERARCHY\",\n      \"shortName\": \"default-firewall-policy\",\n      \"displayName\": \"default-firewall-policy\",\n      \"rules\": [\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 0,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"34.168.226.0/26\",\n              \"34.102.114.64/26\",\n              \"34.16.224.64/26\",\n              \"34.48.81.64/26\",\n              \"34.168.146.160/27\",\n              \"34.16.224.160/27\",\n              \"34.82.66.0/24\",\n              \"34.82.90.0/24\",\n              \"34.82.98.0/24\",\n              \"34.82.160.0/24\",\n              \"34.82.166.128/25\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"tcp\"\n              },\n              {\n                \"ipProtocol\": \"udp\"\n              }\n            ]\n          },\n          \"action\": \"allow\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 1,\n          \"match\": {\n            \"destIpRanges\": [\n              \"34.83.160.25/32\",\n              \"34.125.160.60/32\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"tcp\"\n              },\n              {\n                \"ipProtocol\": \"udp\"\n              }\n            ]\n          },\n          \"action\": \"allow\",\n          \"direction\": \"EGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 600,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"35.235.240.0/20\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"tcp\",\n                \"ports\": [\n                  \"22\",\n                  \"3389\",\n                  \"5900-5901\"\n                ]\n              }\n            ]\n          },\n          \"action\": \"allow\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 601,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"35.191.0.0/16\",\n              \"130.211.0.0/22\",\n              \"209.85.152.0/22\",\n              \"209.85.204.0/22\",\n              \"169.254.169.254\",\n              \"108.170.220.0/23\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 602,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"10.0.0.0/8\",\n              \"172.16.0.0/12\",\n              \"192.168.0.0/16\",\n              \"100.64.0.0/10\",\n              \"240.0.0.0/4\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 603,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"35.199.192.0/19\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"tcp\",\n                \"ports\": [\n                  \"53\"\n                ]\n              },\n              {\n                \"ipProtocol\": \"udp\",\n                \"ports\": [\n                  \"53\"\n                ]\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 604,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"107.178.230.64/26\",\n              \"35.199.224.0/19\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"tcp\",\n                \"ports\": [\n                  \"667\"\n                ]\n              },\n              {\n                \"ipProtocol\": \"udp\",\n                \"ports\": [\n                  \"665-666\"\n                ]\n              },\n              {\n                \"ipProtocol\": \"icmp\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 700,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"0.0.0.0/0\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"deny\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 2147483644,\n          \"match\": {\n            \"destIpRanges\": [\n              \"::/0\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"EGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 2147483645,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"::/0\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 2147483646,\n          \"match\": {\n            \"destIpRanges\": [\n              \"0.0.0.0/0\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"EGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 2147483647,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"0.0.0.0/0\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gke2/json-dumps/compute-igs-empty.json",
    "content": "{\n  \"kind\": \"compute#instanceGroupList\",\n  \"id\": \"projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west2-b/instanceGroups\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west2-b/instanceGroups\"\n}\n"
  },
  {
    "path": "test-data/gke2/json-dumps/compute-igs-europe-west2-b.json",
    "content": "{\n  \"kind\": \"compute#instanceGroupList\",\n  \"id\": \"projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west2-b/instanceGroups\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west2-b/instanceGroups\"\n}\n"
  },
  {
    "path": "test-data/gke2/json-dumps/compute-instances-empty.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west2-b/instances\",\n  \"kind\": \"compute#instanceList\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west2-b/instances\"\n}\n"
  },
  {
    "path": "test-data/gke2/json-dumps/compute-instances-europe-west10-a.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/instances\",\n  \"items\": [\n    {\n      \"cpuPlatform\": \"Intel Broadwell\",\n      \"creationTimestamp\": \"2024-04-09T05:08:22.952-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"architecture\": \"X86_64\",\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"100\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"SEV_SNP_CAPABLE\"\n            },\n            {\n              \"type\": \"SEV_LIVE_MIGRATABLE_V2\"\n            },\n            {\n              \"type\": \"SECURE_BOOT\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"SEV_LIVE_MIGRATABLE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n            \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"shieldedInstanceInitialState\": {\n            \"dbs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"dbxs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"keks\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"pk\": {\n              \"content\": \"REDACTED\",\n              \"fileType\": \"X509\"\n            }\n          },\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/disks/gke-gcp-cluster-default-pool-82e0c046-8m8b\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"5597139398278287706\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"T-SJLQ2PEYg=\",\n      \"labels\": {\n        \"goog-gke-node\": \"\",\n        \"goog-k8s-cluster-location\": \"europe-west10\",\n        \"goog-k8s-cluster-name\": \"gcp-cluster\",\n        \"goog-k8s-node-pool-name\": \"default-pool\"\n      },\n      \"lastStartTimestamp\": \"2024-04-09T05:08:28.588-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/machineTypes/e2-medium\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"instance-template\",\n            \"value\": \"projects/1234000173/global/instanceTemplates/gke-gcp-cluster-default-pool-82e0c046\"\n          },\n          {\n            \"key\": \"created-by\",\n            \"value\": \"projects/1234000173/zones/europe-west10-a/instanceGroupManagers/gke-gcp-cluster-default-pool-82e0c046-grp\"\n          },\n          {\n            \"key\": \"serial-port-logging-enable\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"kube-labels\",\n            \"value\": \"cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=e2,cloud.google.com/private-node=false\"\n          },\n          {\n            \"key\": \"google-compute-enable-pcid\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"kubelet-config\",\n            \"value\": \"apiVersion: kubelet.config.k8s.io/v1beta1\\nauthentication:\\n  anonymous:\\n    enabled: false\\n  webhook:\\n    enabled: true\\n  x509:\\n    clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\\nauthorization:\\n  mode: Webhook\\ncgroupRoot: /\\nclusterDNS:\\n- 10.110.80.10\\nclusterDomain: cluster.local\\nenableDebuggingHandlers: true\\nevictionHard:\\n  memory.available: 100Mi\\n  nodefs.available: 10%\\n  nodefs.inodesFree: 5%\\n  pid.available: 10%\\nfeatureGates:\\n  CSIMigrationGCE: true\\n  ExecProbeTimeout: false\\n  InTreePluginAWSUnregister: true\\n  InTreePluginAzureDiskUnregister: true\\n  InTreePluginvSphereUnregister: true\\n  RotateKubeletServerCertificate: true\\nkernelMemcgNotification: true\\nkind: KubeletConfiguration\\nkubeReserved:\\n  cpu: 1060m\\n  ephemeral-storage: 41Gi\\n  memory: 1019Mi\\nmaxParallelImagePulls: 3\\nreadOnlyPort: 10255\\nserializeImagePulls: false\\nserverTLSBootstrap: true\\nstaticPodPath: /etc/kubernetes/manifests\\n\"\n          },\n          {\n            \"key\": \"kubeconfig\",\n            \"value\": \"apiVersion: v1\\nkind: Config\\nclusters:\\n- cluster:\\n    server: https://10.214.0.8\\n    certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\\n  name: default-cluster\\ncontexts:\\n- context:\\n    cluster: default-cluster\\n    namespace: default\\n    user: exec-plugin-auth\\n  name: default-context\\ncurrent-context: default-context\\nusers:\\n- name: exec-plugin-auth\\n  user:\\n    exec:\\n      apiVersion: \\\"client.authentication.k8s.io/v1beta1\\\"\\n      command: '/home/kubernetes/bin/gke-exec-auth-plugin'\\n      args: [\\\"--cache-dir\\\", '/var/lib/kubelet/pki/']\\n\"\n          },\n          {\n            \"key\": \"cluster-name\",\n            \"value\": \"gcp-cluster\"\n          },\n          {\n            \"key\": \"gci-update-strategy\",\n            \"value\": \"update_disabled\"\n          },\n          {\n            \"key\": \"gci-metrics-enabled\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"configure-sh\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"disable-legacy-endpoints\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"user-data\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"kube-rrrr\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"cluster-uid\",\n            \"value\": \"714df7d8dc294225a17ea008c20ab288ee3e6b41b24c4527b8d418cb1a8cf3c4\"\n          },\n          {\n            \"key\": \"cluster-location\",\n            \"value\": \"europe-west10\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"gke-gcp-cluster-default-pool-82e0c046-8m8b\",\n      \"networkInterfaces\": [\n        {\n          \"accessConfigs\": [\n            {\n              \"kind\": \"compute#accessConfig\",\n              \"name\": \"external-nat\",\n              \"natIP\": \"34.32.31.119\",\n              \"networkTier\": \"PREMIUM\",\n              \"type\": \"ONE_TO_ONE_NAT\"\n            }\n          ],\n          \"aliasIpRanges\": [\n            {\n              \"ipCidrRange\": \"10.100.1.0/24\",\n              \"subnetworkRangeName\": \"gke-gcp-cluster-pods-714df7d8\"\n            }\n          ],\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n          \"networkIP\": \"10.214.0.10\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west10/subnetworks/default\"\n        }\n      ],\n      \"networkPerformanceConfig\": {\n        \"totalEgressBandwidthTier\": \"DEFAULT\"\n      },\n      \"satisfiesPzi\": true,\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/instances/gke-gcp-cluster-default-pool-82e0c046-8m8b\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"1234000173-compute@developer.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/devstorage.read_only\",\n            \"https://www.googleapis.com/auth/logging.write\",\n            \"https://www.googleapis.com/auth/monitoring\",\n            \"https://www.googleapis.com/auth/servicecontrol\",\n            \"https://www.googleapis.com/auth/service.management.readonly\",\n            \"https://www.googleapis.com/auth/trace.append\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"gke-gcp-cluster-714df7d8-node\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a\"\n    },\n    {\n      \"cpuPlatform\": \"Intel Cascade Lake\",\n      \"creationTimestamp\": \"2024-04-10T05:01:10.015-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"architecture\": \"X86_64\",\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"100\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"SEV_SNP_CAPABLE\"\n            },\n            {\n              \"type\": \"SEV_LIVE_MIGRATABLE_V2\"\n            },\n            {\n              \"type\": \"SECURE_BOOT\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"SEV_LIVE_MIGRATABLE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n            \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"shieldedInstanceInitialState\": {\n            \"dbs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"dbxs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"keks\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"pk\": {\n              \"content\": \"REDACTED\",\n              \"fileType\": \"X509\"\n            }\n          },\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/disks/gke-gcp-cluster-default-pool-c7891c09-b4qc\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"3775050014586028394\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"346MPQKPPes=\",\n      \"labels\": {\n        \"goog-gke-cost-management\": \"\",\n        \"goog-gke-node\": \"\",\n        \"goog-k8s-cluster-location\": \"europe-west10-a\",\n        \"goog-k8s-cluster-name\": \"gcp-cluster\",\n        \"goog-k8s-node-pool-name\": \"default-pool\"\n      },\n      \"lastStartTimestamp\": \"2024-04-10T05:01:15.002-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/machineTypes/n2-standard-2\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"instance-template\",\n            \"value\": \"projects/1234000173/global/instanceTemplates/gke-gcp-cluster-default-pool-c7891c09\"\n          },\n          {\n            \"key\": \"created-by\",\n            \"value\": \"projects/1234000173/zones/europe-west10-a/instanceGroupManagers/gke-gcp-cluster-default-pool-c7891c09-grp\"\n          },\n          {\n            \"key\": \"serial-port-logging-enable\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"kube-labels\",\n            \"value\": \"cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=n2,cloud.google.com/private-node=false\"\n          },\n          {\n            \"key\": \"google-compute-enable-pcid\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"kubelet-config\",\n            \"value\": \"apiVersion: kubelet.config.k8s.io/v1beta1\\nauthentication:\\n  anonymous:\\n    enabled: false\\n  webhook:\\n    enabled: true\\n  x509:\\n    clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\\nauthorization:\\n  mode: Webhook\\ncgroupRoot: /\\nclusterDNS:\\n- 10.108.192.10\\nclusterDomain: cluster.local\\nenableDebuggingHandlers: true\\nevictionHard:\\n  memory.available: 100Mi\\n  nodefs.available: 10%\\n  nodefs.inodesFree: 5%\\n  pid.available: 10%\\nfeatureGates:\\n  CSIMigrationGCE: true\\n  ExecProbeTimeout: false\\n  InTreePluginAWSUnregister: true\\n  InTreePluginAzureDiskUnregister: true\\n  InTreePluginvSphereUnregister: true\\n  RotateKubeletServerCertificate: true\\nkernelMemcgNotification: true\\nkind: KubeletConfiguration\\nkubeReserved:\\n  cpu: 70m\\n  ephemeral-storage: 41Gi\\n  memory: 1819Mi\\nmaxParallelImagePulls: 3\\nreadOnlyPort: 10255\\nserializeImagePulls: false\\nserverTLSBootstrap: true\\nstaticPodPath: /etc/kubernetes/manifests\\n\"\n          },\n          {\n            \"key\": \"kubeconfig\",\n            \"value\": \"apiVersion: v1\\nkind: Config\\nclusters:\\n- cluster:\\n    server: https://10.214.0.2\\n    certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\\n  name: default-cluster\\ncontexts:\\n- context:\\n    cluster: default-cluster\\n    namespace: default\\n    user: exec-plugin-auth\\n  name: default-context\\ncurrent-context: default-context\\nusers:\\n- name: exec-plugin-auth\\n  user:\\n    exec:\\n      apiVersion: \\\"client.authentication.k8s.io/v1beta1\\\"\\n      command: '/home/kubernetes/bin/gke-exec-auth-plugin'\\n      args: [\\\"--cache-dir\\\", '/var/lib/kubelet/pki/']\\n\"\n          },\n          {\n            \"key\": \"cluster-name\",\n            \"value\": \"gcp-cluster\"\n          },\n          {\n            \"key\": \"gci-update-strategy\",\n            \"value\": \"update_disabled\"\n          },\n          {\n            \"key\": \"gci-metrics-enabled\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"configure-sh\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"disable-legacy-endpoints\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"user-data\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"kube-rrrr\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"cluster-uid\",\n            \"value\": \"1d08860da6b04fe29851304466f250cc1da7a37bc1034b42bde224b67e87fdc8\"\n          },\n          {\n            \"key\": \"cluster-location\",\n            \"value\": \"europe-west10-a\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"gke-gcp-cluster-default-pool-c7891c09-b4qc\",\n      \"networkInterfaces\": [\n        {\n          \"accessConfigs\": [\n            {\n              \"kind\": \"compute#accessConfig\",\n              \"name\": \"external-nat\",\n              \"natIP\": \"34.32.67.110\",\n              \"networkTier\": \"PREMIUM\",\n              \"type\": \"ONE_TO_ONE_NAT\"\n            }\n          ],\n          \"aliasIpRanges\": [\n            {\n              \"ipCidrRange\": \"10.40.2.0/24\",\n              \"subnetworkRangeName\": \"gke-gcp-cluster-pods-1d08860d\"\n            }\n          ],\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n          \"networkIP\": \"10.214.0.21\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west10/subnetworks/default\"\n        }\n      ],\n      \"networkPerformanceConfig\": {\n        \"totalEgressBandwidthTier\": \"DEFAULT\"\n      },\n      \"satisfiesPzi\": true,\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/instances/gke-gcp-cluster-default-pool-c7891c09-b4qc\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"1234000173-compute@developer.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/devstorage.read_only\",\n            \"https://www.googleapis.com/auth/logging.write\",\n            \"https://www.googleapis.com/auth/monitoring\",\n            \"https://www.googleapis.com/auth/servicecontrol\",\n            \"https://www.googleapis.com/auth/service.management.readonly\",\n            \"https://www.googleapis.com/auth/trace.append\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"gke-gcp-cluster-1d08860d-node\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a\"\n    },\n    {\n      \"cpuPlatform\": \"Intel Cascade Lake\",\n      \"creationTimestamp\": \"2024-04-09T04:30:46.820-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"architecture\": \"X86_64\",\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"100\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"SEV_SNP_CAPABLE\"\n            },\n            {\n              \"type\": \"SEV_LIVE_MIGRATABLE_V2\"\n            },\n            {\n              \"type\": \"SECURE_BOOT\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"SEV_LIVE_MIGRATABLE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n            \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"shieldedInstanceInitialState\": {\n            \"dbs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"dbxs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"keks\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"pk\": {\n              \"content\": \"REDACTED\",\n              \"fileType\": \"X509\"\n            }\n          },\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/disks/gke-gcp-cluster-default-pool-c7891c09-ck7c\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"5977173652409980937\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"346MPQKPPes=\",\n      \"labels\": {\n        \"goog-gke-cost-management\": \"\",\n        \"goog-gke-node\": \"\",\n        \"goog-k8s-cluster-location\": \"europe-west10-a\",\n        \"goog-k8s-cluster-name\": \"gcp-cluster\",\n        \"goog-k8s-node-pool-name\": \"default-pool\"\n      },\n      \"lastStartTimestamp\": \"2024-04-09T04:30:51.968-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/machineTypes/n2-standard-2\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"instance-template\",\n            \"value\": \"projects/1234000173/global/instanceTemplates/gke-gcp-cluster-default-pool-c7891c09\"\n          },\n          {\n            \"key\": \"created-by\",\n            \"value\": \"projects/1234000173/zones/europe-west10-a/instanceGroupManagers/gke-gcp-cluster-default-pool-c7891c09-grp\"\n          },\n          {\n            \"key\": \"serial-port-logging-enable\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"kube-labels\",\n            \"value\": \"cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=n2,cloud.google.com/private-node=false\"\n          },\n          {\n            \"key\": \"google-compute-enable-pcid\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"kubelet-config\",\n            \"value\": \"apiVersion: kubelet.config.k8s.io/v1beta1\\nauthentication:\\n  anonymous:\\n    enabled: false\\n  webhook:\\n    enabled: true\\n  x509:\\n    clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\\nauthorization:\\n  mode: Webhook\\ncgroupRoot: /\\nclusterDNS:\\n- 10.108.192.10\\nclusterDomain: cluster.local\\nenableDebuggingHandlers: true\\nevictionHard:\\n  memory.available: 100Mi\\n  nodefs.available: 10%\\n  nodefs.inodesFree: 5%\\n  pid.available: 10%\\nfeatureGates:\\n  CSIMigrationGCE: true\\n  ExecProbeTimeout: false\\n  InTreePluginAWSUnregister: true\\n  InTreePluginAzureDiskUnregister: true\\n  InTreePluginvSphereUnregister: true\\n  RotateKubeletServerCertificate: true\\nkernelMemcgNotification: true\\nkind: KubeletConfiguration\\nkubeReserved:\\n  cpu: 70m\\n  ephemeral-storage: 41Gi\\n  memory: 1819Mi\\nmaxParallelImagePulls: 3\\nreadOnlyPort: 10255\\nserializeImagePulls: false\\nserverTLSBootstrap: true\\nstaticPodPath: /etc/kubernetes/manifests\\n\"\n          },\n          {\n            \"key\": \"kubeconfig\",\n            \"value\": \"apiVersion: v1\\nkind: Config\\nclusters:\\n- cluster:\\n    server: https://10.214.0.2\\n    certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\\n  name: default-cluster\\ncontexts:\\n- context:\\n    cluster: default-cluster\\n    namespace: default\\n    user: exec-plugin-auth\\n  name: default-context\\ncurrent-context: default-context\\nusers:\\n- name: exec-plugin-auth\\n  user:\\n    exec:\\n      apiVersion: \\\"client.authentication.k8s.io/v1beta1\\\"\\n      command: '/home/kubernetes/bin/gke-exec-auth-plugin'\\n      args: [\\\"--cache-dir\\\", '/var/lib/kubelet/pki/']\\n\"\n          },\n          {\n            \"key\": \"cluster-name\",\n            \"value\": \"gcp-cluster\"\n          },\n          {\n            \"key\": \"gci-update-strategy\",\n            \"value\": \"update_disabled\"\n          },\n          {\n            \"key\": \"gci-metrics-enabled\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"configure-sh\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"disable-legacy-endpoints\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"user-data\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"kube-rrrr\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"cluster-uid\",\n            \"value\": \"1d08860da6b04fe29851304466f250cc1da7a37bc1034b42bde224b67e87fdc8\"\n          },\n          {\n            \"key\": \"cluster-location\",\n            \"value\": \"europe-west10-a\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"gke-gcp-cluster-default-pool-c7891c09-ck7c\",\n      \"networkInterfaces\": [\n        {\n          \"accessConfigs\": [\n            {\n              \"kind\": \"compute#accessConfig\",\n              \"name\": \"external-nat\",\n              \"natIP\": \"34.32.42.247\",\n              \"networkTier\": \"PREMIUM\",\n              \"type\": \"ONE_TO_ONE_NAT\"\n            }\n          ],\n          \"aliasIpRanges\": [\n            {\n              \"ipCidrRange\": \"10.40.1.0/24\",\n              \"subnetworkRangeName\": \"gke-gcp-cluster-pods-1d08860d\"\n            }\n          ],\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n          \"networkIP\": \"10.214.0.4\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west10/subnetworks/default\"\n        }\n      ],\n      \"networkPerformanceConfig\": {\n        \"totalEgressBandwidthTier\": \"DEFAULT\"\n      },\n      \"satisfiesPzi\": true,\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/instances/gke-gcp-cluster-default-pool-c7891c09-ck7c\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"1234000173-compute@developer.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/devstorage.read_only\",\n            \"https://www.googleapis.com/auth/logging.write\",\n            \"https://www.googleapis.com/auth/monitoring\",\n            \"https://www.googleapis.com/auth/servicecontrol\",\n            \"https://www.googleapis.com/auth/service.management.readonly\",\n            \"https://www.googleapis.com/auth/trace.append\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"gke-gcp-cluster-1d08860d-node\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a\"\n    },\n    {\n      \"cpuPlatform\": \"Intel Cascade Lake\",\n      \"creationTimestamp\": \"2024-04-09T04:04:20.359-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"architecture\": \"X86_64\",\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"100\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"SEV_SNP_CAPABLE\"\n            },\n            {\n              \"type\": \"SEV_LIVE_MIGRATABLE_V2\"\n            },\n            {\n              \"type\": \"SECURE_BOOT\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"SEV_LIVE_MIGRATABLE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n            \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/licenses/gke-node\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"shieldedInstanceInitialState\": {\n            \"dbs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"dbxs\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"keks\": [\n              {\n                \"content\": \"REDACTED\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"pk\": {\n              \"content\": \"REDACTED\",\n              \"fileType\": \"X509\"\n            }\n          },\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/disks/gke-gcp-cluster-default-pool-c7891c09-z2wh\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"1712930190213553757\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"346MPQKPPes=\",\n      \"labels\": {\n        \"goog-gke-cost-management\": \"\",\n        \"goog-gke-node\": \"\",\n        \"goog-k8s-cluster-location\": \"europe-west10-a\",\n        \"goog-k8s-cluster-name\": \"gcp-cluster\",\n        \"goog-k8s-node-pool-name\": \"default-pool\"\n      },\n      \"lastStartTimestamp\": \"2024-04-09T04:04:24.970-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/machineTypes/n2-standard-2\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"instance-template\",\n            \"value\": \"projects/1234000173/global/instanceTemplates/gke-gcp-cluster-default-pool-c7891c09\"\n          },\n          {\n            \"key\": \"created-by\",\n            \"value\": \"projects/1234000173/zones/europe-west10-a/instanceGroupManagers/gke-gcp-cluster-default-pool-c7891c09-grp\"\n          },\n          {\n            \"key\": \"serial-port-logging-enable\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"kube-labels\",\n            \"value\": \"cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=n2,cloud.google.com/private-node=false\"\n          },\n          {\n            \"key\": \"google-compute-enable-pcid\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"kubelet-config\",\n            \"value\": \"apiVersion: kubelet.config.k8s.io/v1beta1\\nauthentication:\\n  anonymous:\\n    enabled: false\\n  webhook:\\n    enabled: true\\n  x509:\\n    clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\\nauthorization:\\n  mode: Webhook\\ncgroupRoot: /\\nclusterDNS:\\n- 10.108.192.10\\nclusterDomain: cluster.local\\nenableDebuggingHandlers: true\\nevictionHard:\\n  memory.available: 100Mi\\n  nodefs.available: 10%\\n  nodefs.inodesFree: 5%\\n  pid.available: 10%\\nfeatureGates:\\n  CSIMigrationGCE: true\\n  ExecProbeTimeout: false\\n  InTreePluginAWSUnregister: true\\n  InTreePluginAzureDiskUnregister: true\\n  InTreePluginvSphereUnregister: true\\n  RotateKubeletServerCertificate: true\\nkernelMemcgNotification: true\\nkind: KubeletConfiguration\\nkubeReserved:\\n  cpu: 70m\\n  ephemeral-storage: 41Gi\\n  memory: 1819Mi\\nmaxParallelImagePulls: 3\\nreadOnlyPort: 10255\\nserializeImagePulls: false\\nserverTLSBootstrap: true\\nstaticPodPath: /etc/kubernetes/manifests\\n\"\n          },\n          {\n            \"key\": \"kubeconfig\",\n            \"value\": \"apiVersion: v1\\nkind: Config\\nclusters:\\n- cluster:\\n    server: https://10.214.0.2\\n    certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\\n  name: default-cluster\\ncontexts:\\n- context:\\n    cluster: default-cluster\\n    namespace: default\\n    user: exec-plugin-auth\\n  name: default-context\\ncurrent-context: default-context\\nusers:\\n- name: exec-plugin-auth\\n  user:\\n    exec:\\n      apiVersion: \\\"client.authentication.k8s.io/v1beta1\\\"\\n      command: '/home/kubernetes/bin/gke-exec-auth-plugin'\\n      args: [\\\"--cache-dir\\\", '/var/lib/kubelet/pki/']\\n\"\n          },\n          {\n            \"key\": \"cluster-name\",\n            \"value\": \"gcp-cluster\"\n          },\n          {\n            \"key\": \"gci-update-strategy\",\n            \"value\": \"update_disabled\"\n          },\n          {\n            \"key\": \"gci-metrics-enabled\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"configure-sh\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"disable-legacy-endpoints\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"user-data\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"kube-rrrr\",\n            \"value\": \"REDACTED\"\n          },\n          {\n            \"key\": \"cluster-uid\",\n            \"value\": \"1d08860da6b04fe29851304466f250cc1da7a37bc1034b42bde224b67e87fdc8\"\n          },\n          {\n            \"key\": \"cluster-location\",\n            \"value\": \"europe-west10-a\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"gke-gcp-cluster-default-pool-c7891c09-z2wh\",\n      \"networkInterfaces\": [\n        {\n          \"accessConfigs\": [\n            {\n              \"kind\": \"compute#accessConfig\",\n              \"name\": \"external-nat\",\n              \"natIP\": \"34.32.28.9\",\n              \"networkTier\": \"PREMIUM\",\n              \"type\": \"ONE_TO_ONE_NAT\"\n            }\n          ],\n          \"aliasIpRanges\": [\n            {\n              \"ipCidrRange\": \"10.40.0.0/24\",\n              \"subnetworkRangeName\": \"gke-gcp-cluster-pods-1d08860d\"\n            }\n          ],\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n          \"networkIP\": \"10.214.0.3\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west10/subnetworks/default\"\n        }\n      ],\n      \"networkPerformanceConfig\": {\n        \"totalEgressBandwidthTier\": \"DEFAULT\"\n      },\n      \"satisfiesPzi\": true,\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/instances/gke-gcp-cluster-default-pool-c7891c09-z2wh\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"1234000173-compute@developer.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/devstorage.read_only\",\n            \"https://www.googleapis.com/auth/logging.write\",\n            \"https://www.googleapis.com/auth/monitoring\",\n            \"https://www.googleapis.com/auth/servicecontrol\",\n            \"https://www.googleapis.com/auth/service.management.readonly\",\n            \"https://www.googleapis.com/auth/trace.append\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"gke-gcp-cluster-1d08860d-node\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a\"\n    }\n  ],\n  \"kind\": \"compute#instanceList\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/instances\"\n}\n"
  },
  {
    "path": "test-data/gke2/json-dumps/compute-instances-europe-west2-b.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west2-b/instances\",\n  \"kind\": \"compute#instanceList\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west2-b/instances\"\n}\n"
  },
  {
    "path": "test-data/gke2/json-dumps/compute-interconnects.json",
    "content": ""
  },
  {
    "path": "test-data/gke2/json-dumps/compute-migs-empty.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west2-b/instanceGroupManagers\",\n  \"kind\": \"compute#instanceGroupManagerList\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west2-b/instanceGroupManagers\"\n}\n"
  },
  {
    "path": "test-data/gke2/json-dumps/compute-migs-europe-west10-a.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/instanceGroupManagers\",\n  \"items\": [\n    {\n      \"kind\": \"compute#instanceGroupManager\",\n      \"id\": \"4388285445108699464\",\n      \"creationTimestamp\": \"2024-04-09T05:08:07.388-07:00\",\n      \"name\": \"gke-gcp-cluster-default-pool-82e0c046-grp\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a\",\n      \"instanceTemplate\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/instanceTemplates/gke-gcp-cluster-default-pool-82e0c046\",\n      \"versions\": [\n        {\n          \"instanceTemplate\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/instanceTemplates/gke-gcp-cluster-default-pool-82e0c046\",\n          \"targetSize\": {\n            \"calculated\": 1\n          }\n        }\n      ],\n      \"instanceGroup\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/instanceGroups/gke-gcp-cluster-default-pool-82e0c046-grp\",\n      \"baseInstanceName\": \"gke-gcp-cluster-default-pool-82e0c046\",\n      \"fingerprint\": \"uvMBzl8LNAk=\",\n      \"currentActions\": {\n        \"none\": 1,\n        \"creating\": 0,\n        \"creatingWithoutRetries\": 0,\n        \"verifying\": 0,\n        \"recreating\": 0,\n        \"deleting\": 0,\n        \"abandoning\": 0,\n        \"restarting\": 0,\n        \"refreshing\": 0,\n        \"suspending\": 0,\n        \"resuming\": 0,\n        \"stopping\": 0,\n        \"starting\": 0\n      },\n      \"status\": {\n        \"isStable\": true,\n        \"allInstancesConfig\": {\n          \"effective\": true\n        },\n        \"versionTarget\": {\n          \"isReached\": true\n        },\n        \"stateful\": {\n          \"hasStatefulConfig\": false,\n          \"perInstanceConfigs\": {\n            \"allEffective\": true\n          }\n        }\n      },\n      \"targetSize\": 1,\n      \"listManagedInstancesResults\": \"PAGELESS\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/instanceGroupManagers/gke-gcp-cluster-default-pool-82e0c046-grp\",\n      \"updatePolicy\": {\n        \"type\": \"OPPORTUNISTIC\",\n        \"minimalAction\": \"REPLACE\",\n        \"maxSurge\": {\n          \"fixed\": 1,\n          \"calculated\": 1\n        },\n        \"maxUnavailable\": {\n          \"fixed\": 1,\n          \"calculated\": 1\n        },\n        \"replacementMethod\": \"SUBSTITUTE\"\n      },\n      \"instanceLifecyclePolicy\": {\n        \"forceUpdateOnRepair\": \"NO\",\n        \"defaultActionOnFailure\": \"REPAIR\"\n      }\n    },\n    {\n      \"kind\": \"compute#instanceGroupManager\",\n      \"id\": \"4504168043621424718\",\n      \"creationTimestamp\": \"2024-04-09T04:04:01.286-07:00\",\n      \"name\": \"gke-gcp-cluster-default-pool-c7891c09-grp\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a\",\n      \"instanceTemplate\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/instanceTemplates/gke-gcp-cluster-default-pool-c7891c09\",\n      \"versions\": [\n        {\n          \"instanceTemplate\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/instanceTemplates/gke-gcp-cluster-default-pool-c7891c09\",\n          \"targetSize\": {\n            \"calculated\": 3\n          }\n        }\n      ],\n      \"instanceGroup\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/instanceGroups/gke-gcp-cluster-default-pool-c7891c09-grp\",\n      \"baseInstanceName\": \"gke-gcp-cluster-default-pool-c7891c09\",\n      \"fingerprint\": \"77OP2eJ9NzY=\",\n      \"currentActions\": {\n        \"none\": 3,\n        \"creating\": 0,\n        \"creatingWithoutRetries\": 0,\n        \"verifying\": 0,\n        \"recreating\": 0,\n        \"deleting\": 0,\n        \"abandoning\": 0,\n        \"restarting\": 0,\n        \"refreshing\": 0,\n        \"suspending\": 0,\n        \"resuming\": 0,\n        \"stopping\": 0,\n        \"starting\": 0\n      },\n      \"status\": {\n        \"isStable\": true,\n        \"allInstancesConfig\": {\n          \"effective\": true\n        },\n        \"versionTarget\": {\n          \"isReached\": true\n        },\n        \"stateful\": {\n          \"hasStatefulConfig\": false,\n          \"perInstanceConfigs\": {\n            \"allEffective\": true\n          }\n        }\n      },\n      \"targetSize\": 3,\n      \"listManagedInstancesResults\": \"PAGELESS\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/instanceGroupManagers/gke-gcp-cluster-default-pool-c7891c09-grp\",\n      \"updatePolicy\": {\n        \"type\": \"OPPORTUNISTIC\",\n        \"minimalAction\": \"REPLACE\",\n        \"maxSurge\": {\n          \"fixed\": 1,\n          \"calculated\": 1\n        },\n        \"maxUnavailable\": {\n          \"fixed\": 1,\n          \"calculated\": 1\n        },\n        \"replacementMethod\": \"SUBSTITUTE\"\n      },\n      \"instanceLifecyclePolicy\": {\n        \"forceUpdateOnRepair\": \"NO\",\n        \"defaultActionOnFailure\": \"REPAIR\"\n      }\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/instanceGroupManagers\",\n  \"kind\": \"compute#instanceGroupManagerList\"\n}\n"
  },
  {
    "path": "test-data/gke2/json-dumps/compute-migs-europe-west2-b.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west2-b/instanceGroupManagers\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west2-b/instanceGroupManagers\",\n  \"kind\": \"compute#instanceGroupManagerList\"\n}\n"
  },
  {
    "path": "test-data/gke2/json-dumps/compute-network-default.json",
    "content": "{\n  \"kind\": \"compute#network\",\n  \"id\": \"366075016552819302\",\n  \"creationTimestamp\": \"2023-05-22T00:06:49.677-07:00\",\n  \"name\": \"default\",\n  \"description\": \"Default network for the project\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n  \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/366075016552819302\",\n  \"autoCreateSubnetworks\": true,\n  \"subnetworks\": [\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/africa-south1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/southamerica-east1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-north1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-east1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/northamerica-northeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-northeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/northamerica-northeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/southamerica-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-southeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-east7/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-south1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/me-central1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-east2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/australia-southeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west10/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-east5/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west8/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west6/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west4/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west9/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west3/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-southeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-central2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-northeast3/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-south2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-southwest1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/me-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-northeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-south1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west12/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/australia-southeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-east1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west8/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west4/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-east4/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/me-central2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-central1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west3/subnetworks/default\"\n  ],\n  \"routingConfig\": {\n    \"routingMode\": \"REGIONAL\"\n  },\n  \"networkFirewallPolicyEnforcementOrder\": \"AFTER_CLASSIC_FIREWALL\"\n}\n"
  },
  {
    "path": "test-data/gke2/json-dumps/compute-project.json",
    "content": "{\n  \"cloudArmorTier\": \"CA_STANDARD\",\n  \"commonInstanceMetadata\": {\n    \"fingerprint\": \"yMdKxUjmS4Q=\",\n    \"items\": [\n      {\n        \"key\": \"ssh-keys\",\n        \"value\": \"rdoroschevici:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDL/PUtu9kxt0YfrroKogUgLPEPcKmA1oGxajew1nUrMYksWj4VLy7C8xpFAHDor3wUq5VAWq/tNWJGEW+OpjLfgJm/WjKR1bwTRvhC6paWOXZmdfjzE1NJM6gP/6xSFETUGj1d2GkDBn4vrXuFR1JSRUefsFXvmTnhY5YfBlJxVUOt6l61UcV6/pcmC2gmkSvWHbGMyJgmXpiogazF3v0YNWNuxuSh3U+5QzRIpPnEnIbKQp5WbxRYeQkWnIQA7qqA9qzgJq76f0wSAk2xPGL1eMzmv4Kss849uzysx1UTe4L9ir5XwYeMB5Iurel8zsDQF37EikOAXQFgbqvjx0D6SwoPVtVr0ikU5aRN78fLMp0KAlzBSNRhmtBOc8p3+m2epPr88C+PD3yoOlRP/qKP+M+RpvF0l96XvwCvELAsGQR592HSjdxZZ6LCgU+rFozG3HZ21yfAkFJJ3dcVhmCPb7vjcFeSUpHCnfSG3Wz5KNdUzv3DdIv/0HUVys5fzqU= rdoroschevici@cs-1054127041526-default\\nroot:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDL/PUtu9kxt0YfrroKogUgLPEPcKmA1oGxajew1nUrMYksWj4VLy7C8xpFAHDor3wUq5VAWq/tNWJGEW+OpjLfgJm/WjKR1bwTRvhC6paWOXZmdfjzE1NJM6gP/6xSFETUGj1d2GkDBn4vrXuFR1JSRUefsFXvmTnhY5YfBlJxVUOt6l61UcV6/pcmC2gmkSvWHbGMyJgmXpiogazF3v0YNWNuxuSh3U+5QzRIpPnEnIbKQp5WbxRYeQkWnIQA7qqA9qzgJq76f0wSAk2xPGL1eMzmv4Kss849uzysx1UTe4L9ir5XwYeMB5Iurel8zsDQF37EikOAXQFgbqvjx0D6SwoPVtVr0ikU5aRN78fLMp0KAlzBSNRhmtBOc8p3+m2epPr88C+PD3yoOlRP/qKP+M+RpvF0l96XvwCvELAsGQR592HSjdxZZ6LCgU+rFozG3HZ21yfAkFJJ3dcVhmCPb7vjcFeSUpHCnfSG3Wz5KNdUzv3DdIv/0HUVys5fzqU= rdoroschevici@cs-1054127041526-default\"\n      },\n      {\n        \"key\": \"gke-gcp-cluster-1d08860d-secondary-ranges\",\n        \"value\": \"pods:default:default:gke-gcp-cluster-pods-1d08860d,services:default:default:gke-gcp-cluster-services-1d08860d\"\n      },\n      {\n        \"key\": \"gke-gcp-cluster-714df7d8-secondary-ranges\",\n        \"value\": \"services:default:default:gke-gcp-cluster-services-714df7d8,pods:default:default:gke-gcp-cluster-pods-714df7d8\"\n      }\n    ],\n    \"kind\": \"compute#metadata\"\n  },\n  \"creationTimestamp\": \"2023-05-22T00:06:43.088-07:00\",\n  \"defaultNetworkTier\": \"PREMIUM\",\n  \"defaultServiceAccount\": \"1234000173-compute@developer.gserviceaccount.com\",\n  \"id\": \"6891998134554503789\",\n  \"kind\": \"compute#project\",\n  \"name\": \"gcpdiag-gke-cluster-autoscaler-rrrr\",\n  \"quotas\": [\n    {\n      \"limit\": 10000,\n      \"metric\": \"SNAPSHOTS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 30,\n      \"metric\": \"NETWORKS\",\n      \"usage\": 1\n    },\n    {\n      \"limit\": 500,\n      \"metric\": \"FIREWALLS\",\n      \"usage\": 13\n    },\n    {\n      \"limit\": 5000,\n      \"metric\": \"IMAGES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 175,\n      \"metric\": \"STATIC_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 300,\n      \"metric\": \"ROUTES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"FORWARDING_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 500,\n      \"metric\": \"TARGET_POOLS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1000,\n      \"metric\": \"HEALTH_CHECKS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 575,\n      \"metric\": \"IN_USE_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 500,\n      \"metric\": \"TARGET_INSTANCES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_HTTP_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"URL_MAPS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"BACKEND_SERVICES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1000,\n      \"metric\": \"INSTANCE_TEMPLATES\",\n      \"usage\": 4\n    },\n    {\n      \"limit\": 50,\n      \"metric\": \"TARGET_VPN_GATEWAYS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"VPN_TUNNELS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 30,\n      \"metric\": \"BACKEND_BUCKETS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 20,\n      \"metric\": \"ROUTERS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_SSL_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_HTTPS_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"SSL_CERTIFICATES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 275,\n      \"metric\": \"SUBNETWORKS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_TCP_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 10,\n      \"metric\": \"SECURITY_POLICIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 200,\n      \"metric\": \"SECURITY_POLICY_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1000,\n      \"metric\": \"XPN_SERVICE_PROJECTS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"PACKET_MIRRORINGS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1000,\n      \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 6,\n      \"metric\": \"INTERCONNECTS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 5000,\n      \"metric\": \"GLOBAL_INTERNAL_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 50,\n      \"metric\": \"VPN_GATEWAYS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 5000,\n      \"metric\": \"MACHINE_IMAGES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 20,\n      \"metric\": \"SECURITY_POLICY_CEVAL_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 50,\n      \"metric\": \"EXTERNAL_VPN_GATEWAYS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1,\n      \"metric\": \"PUBLIC_ADVERTISED_PREFIXES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 10,\n      \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1024,\n      \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 60,\n      \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"INTERNAL_TRAFFIC_DIRECTOR_FORWARDING_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"GLOBAL_EXTERNAL_MANAGED_FORWARDING_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"GLOBAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"GLOBAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"GLOBAL_EXTERNAL_PROXY_LB_BACKEND_SERVICES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 750,\n      \"metric\": \"GLOBAL_INTERNAL_TRAFFIC_DIRECTOR_BACKEND_SERVICES\",\n      \"usage\": 0\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr\",\n  \"vmDnsSetting\": \"GLOBAL_DEFAULT\",\n  \"xpnProjectStatus\": \"UNSPECIFIED_XPN_PROJECT_STATUS\"\n}\n"
  },
  {
    "path": "test-data/gke2/json-dumps/compute-regions.json",
    "content": "{\n  \"kind\": \"compute#regionList\",\n  \"id\": \"projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions\",\n  \"items\": [\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1220\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east1\",\n      \"description\": \"asia-east1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-east1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-east1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-east1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-east1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1370\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east2\",\n      \"description\": \"asia-east2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-east2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-east2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-east2-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-east2\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1250\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast1\",\n      \"description\": \"asia-northeast1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-northeast1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-northeast1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-northeast1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-northeast1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1390\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast2\",\n      \"description\": \"asia-northeast2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-northeast2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-northeast2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-northeast2-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-northeast2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1410\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast3\",\n      \"description\": \"asia-northeast3\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-northeast3-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-northeast3-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-northeast3-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-northeast3\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1320\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south1\",\n      \"description\": \"asia-south1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-south1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-south1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-south1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-south1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1470\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south2\",\n      \"description\": \"asia-south2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-south2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-south2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-south2-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 5,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-south2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1260\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast1\",\n      \"description\": \"asia-southeast1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-southeast1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-southeast1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-southeast1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-southeast1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1440\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast2\",\n      \"description\": \"asia-southeast2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-southeast2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-southeast2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-southeast2-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-southeast2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1280\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast1\",\n      \"description\": \"australia-southeast1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/australia-southeast1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/australia-southeast1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/australia-southeast1-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/australia-southeast1\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1480\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast2\",\n      \"description\": \"australia-southeast2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/australia-southeast2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/australia-southeast2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/australia-southeast2-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 5,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/australia-southeast2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1450\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-central2\",\n      \"description\": \"europe-central2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-central2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-central2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-central2-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 5,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-central2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1350\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-north1\",\n      \"description\": \"europe-north1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-north1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-north1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-north1-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-north1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1100\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west1\",\n      \"description\": \"europe-west1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west1-d\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1290\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west2\",\n      \"description\": \"europe-west2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west2-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west2\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1300\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west3\",\n      \"description\": \"europe-west3\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west3-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west3-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west3-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west3\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1340\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west4\",\n      \"description\": \"europe-west4\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west4-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west4-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west4-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 14\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 1300\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 10\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 16\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 13\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 13\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 1\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 1\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west4\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1380\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west6\",\n      \"description\": \"europe-west6\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west6-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west6-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west6-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west6\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1330\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast1\",\n      \"description\": \"northamerica-northeast1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/northamerica-northeast1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/northamerica-northeast1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/northamerica-northeast1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/northamerica-northeast1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1460\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast2\",\n      \"description\": \"northamerica-northeast2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/northamerica-northeast2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/northamerica-northeast2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/northamerica-northeast2-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 5,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/northamerica-northeast2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1310\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-east1\",\n      \"description\": \"southamerica-east1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/southamerica-east1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/southamerica-east1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/southamerica-east1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/southamerica-east1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1490\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-west1\",\n      \"description\": \"southamerica-west1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/southamerica-west1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/southamerica-west1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/southamerica-west1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 5,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/southamerica-west1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1000\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1\",\n      \"description\": \"us-central1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-central1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-central1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-central1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-central1-f\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-central1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1230\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east1\",\n      \"description\": \"us-east1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-east1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-east1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-east1-d\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-east1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1270\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east4\",\n      \"description\": \"us-east4\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-east4-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-east4-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-east4-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-east4\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1210\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west1\",\n      \"description\": \"us-west1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-west1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-west1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-west1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1360\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west2\",\n      \"description\": \"us-west2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-west2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-west2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-west2-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1420\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west3\",\n      \"description\": \"us-west3\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-west3-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-west3-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-west3-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west3\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1430\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west4\",\n      \"description\": \"us-west4\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-west4-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-west4-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-west4-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west4\",\n      \"supportsPzs\": false\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions\"\n}\n"
  },
  {
    "path": "test-data/gke2/json-dumps/compute-routers-europe-west4.json",
    "content": "{\n  \"kind\": \"compute#routerList\",\n  \"id\": \"projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west4/routers\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west4/routers\"\n}\n"
  },
  {
    "path": "test-data/gke2/json-dumps/compute-subnetwork-policy.json",
    "content": ""
  },
  {
    "path": "test-data/gke2/json-dumps/compute-subnetworks-aggregated.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gke-cluster-autoscaler-rrrr/aggregated/subnetworks\",\n  \"items\": {\n    \"regions/africa-south1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2023-11-09T23:52:02.807-08:00\",\n          \"fingerprint\": \"4VSv8H1H1lE=\",\n          \"gatewayAddress\": \"10.218.0.1\",\n          \"id\": \"673487854833262541\",\n          \"ipCidrRange\": \"10.218.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/africa-south1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/africa-south1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-east1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2023-05-22T00:06:58.285-07:00\",\n          \"fingerprint\": \"WcIGvkdYbJI=\",\n          \"gatewayAddress\": \"10.140.0.1\",\n          \"id\": \"7568045662190086781\",\n          \"ipCidrRange\": \"10.140.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-east1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-east1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-east2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2023-05-22T00:06:58.436-07:00\",\n          \"fingerprint\": \"L0EfUsthWHk=\",\n          \"gatewayAddress\": \"10.170.0.1\",\n          \"id\": \"8406943145505761917\",\n          \"ipCidrRange\": \"10.170.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-east2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-east2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-northeast1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2023-05-22T00:06:58.155-07:00\",\n          \"fingerprint\": \"VShMuLeTwio=\",\n          \"gatewayAddress\": \"10.146.0.1\",\n          \"id\": \"5786172346507635325\",\n          \"ipCidrRange\": \"10.146.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n          \"privateIpGoogleAccess\": true,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-northeast1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-northeast1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-northeast2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2023-05-22T00:06:58.225-07:00\",\n          \"fingerprint\": \"9pjY364j_cU=\",\n          \"gatewayAddress\": \"10.174.0.1\",\n          \"id\": \"7497066646109334141\",\n          \"ipCidrRange\": \"10.174.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-northeast2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-northeast2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-northeast3\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2023-05-22T00:06:58.338-07:00\",\n          \"fingerprint\": \"Ffkfa7eYmeo=\",\n          \"gatewayAddress\": \"10.178.0.1\",\n          \"id\": \"7192919653734591101\",\n          \"ipCidrRange\": \"10.178.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-northeast3\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-northeast3/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-south1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2023-05-22T00:06:59.707-07:00\",\n          \"fingerprint\": \"B45OPn2Buyw=\",\n          \"gatewayAddress\": \"10.160.0.1\",\n          \"id\": \"2613108967022701180\",\n          \"ipCidrRange\": \"10.160.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-south1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-south1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-south2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2023-05-22T00:06:59.373-07:00\",\n          \"fingerprint\": \"35s09c20cV0=\",\n          \"gatewayAddress\": \"10.190.0.1\",\n          \"id\": \"7989961894771731068\",\n          \"ipCidrRange\": \"10.190.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-south2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-south2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-southeast1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2023-05-22T00:06:58.785-07:00\",\n          \"fingerprint\": \"sWTfb8Q0Nd4=\",\n          \"gatewayAddress\": \"10.148.0.1\",\n          \"id\": \"5711462206437501565\",\n          \"ipCidrRange\": \"10.148.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-southeast1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-southeast1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/asia-southeast2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2023-05-22T00:06:58.995-07:00\",\n          \"fingerprint\": \"7k-YQ5Ovu-8=\",\n          \"gatewayAddress\": \"10.184.0.1\",\n          \"id\": \"2474765575042542205\",\n          \"ipCidrRange\": \"10.184.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-southeast2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-southeast2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/australia-southeast1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2023-05-22T00:06:59.310-07:00\",\n          \"fingerprint\": \"08dVKgSafnI=\",\n          \"gatewayAddress\": \"10.152.0.1\",\n          \"id\": \"6937579531545258620\",\n          \"ipCidrRange\": \"10.152.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/australia-southeast1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/australia-southeast1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/australia-southeast2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2023-05-22T00:06:58.795-07:00\",\n          \"fingerprint\": \"oBTkqlK7Fcs=\",\n          \"gatewayAddress\": \"10.192.0.1\",\n          \"id\": \"1408639960713964157\",\n          \"ipCidrRange\": \"10.192.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/australia-southeast2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/australia-southeast2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-central2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2023-05-22T00:06:57.785-07:00\",\n          \"fingerprint\": \"zw_hkLZSOJI=\",\n          \"gatewayAddress\": \"10.186.0.1\",\n          \"id\": \"1077978447298865790\",\n          \"ipCidrRange\": \"10.186.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-central2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-central2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-north1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2023-05-22T00:06:58.037-07:00\",\n          \"fingerprint\": \"80uA2JRBgYo=\",\n          \"gatewayAddress\": \"10.166.0.1\",\n          \"id\": \"2809449870791191165\",\n          \"ipCidrRange\": \"10.166.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n          \"privateIpGoogleAccess\": true,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-north1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-north1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-southwest1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2023-05-22T00:06:57.190-07:00\",\n          \"fingerprint\": \"NNPblI1jl5o=\",\n          \"gatewayAddress\": \"10.204.0.1\",\n          \"id\": \"2215376217816083070\",\n          \"ipCidrRange\": \"10.204.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-southwest1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-southwest1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2023-05-22T00:06:57.112-07:00\",\n          \"fingerprint\": \"rKu-QZ58MyY=\",\n          \"gatewayAddress\": \"10.132.0.1\",\n          \"id\": \"723826645345413758\",\n          \"ipCidrRange\": \"10.132.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n          \"privateIpGoogleAccess\": true,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west10\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2023-06-29T10:57:35.308-07:00\",\n          \"fingerprint\": \"HwI0WItrEcM=\",\n          \"gatewayAddress\": \"10.214.0.1\",\n          \"id\": \"6322359151811918048\",\n          \"ipCidrRange\": \"10.214.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n          \"privateIpGoogleAccess\": true,\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west10\",\n          \"secondaryIpRanges\": [\n            {\n              \"ipCidrRange\": \"10.40.0.0/14\",\n              \"rangeName\": \"gke-gcp-cluster-pods-1d08860d\",\n              \"reservedInternalRange\": \"https://networkconnectivity.googleapis.com/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/locations/global/internalRanges/gke-gcp-cluster-pods-1d08860d\"\n            },\n            {\n              \"ipCidrRange\": \"10.108.192.0/20\",\n              \"rangeName\": \"gke-gcp-cluster-services-1d08860d\",\n              \"reservedInternalRange\": \"https://networkconnectivity.googleapis.com/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/locations/global/internalRanges/gke-gcp-cluster-services-1d08860d\"\n            },\n            {\n              \"ipCidrRange\": \"10.100.0.0/14\",\n              \"rangeName\": \"gke-gcp-cluster-pods-714df7d8\",\n              \"reservedInternalRange\": \"https://networkconnectivity.googleapis.com/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/locations/global/internalRanges/gke-gcp-cluster-pods-714df7d8\"\n            },\n            {\n              \"ipCidrRange\": \"10.110.80.0/20\",\n              \"rangeName\": \"gke-gcp-cluster-services-714df7d8\",\n              \"reservedInternalRange\": \"https://networkconnectivity.googleapis.com/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/locations/global/internalRanges/gke-gcp-cluster-services-714df7d8\"\n            }\n          ],\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west10/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west12\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2023-05-22T00:06:57.795-07:00\",\n          \"fingerprint\": \"HyQJqn3kjSk=\",\n          \"gatewayAddress\": \"10.210.0.1\",\n          \"id\": \"7360532775390587518\",\n          \"ipCidrRange\": \"10.210.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west12\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west12/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2023-05-22T00:06:57.196-07:00\",\n          \"fingerprint\": \"9DCzARTgL5o=\",\n          \"gatewayAddress\": \"10.154.0.1\",\n          \"id\": \"2308300210381957758\",\n          \"ipCidrRange\": \"10.154.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west3\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2023-05-22T00:06:57.677-07:00\",\n          \"fingerprint\": \"CXU9NWt0mK4=\",\n          \"gatewayAddress\": \"10.156.0.1\",\n          \"id\": \"7671705028591528574\",\n          \"ipCidrRange\": \"10.156.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west3\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west3/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west4\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2023-05-22T00:06:57.691-07:00\",\n          \"fingerprint\": \"CK3vcBW1_KQ=\",\n          \"gatewayAddress\": \"10.164.0.1\",\n          \"id\": \"5418214698598705790\",\n          \"ipCidrRange\": \"10.164.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n          \"privateIpGoogleAccess\": true,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west4\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west4/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west6\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2023-05-22T00:06:57.713-07:00\",\n          \"fingerprint\": \"MQ9geHGNqEg=\",\n          \"gatewayAddress\": \"10.172.0.1\",\n          \"id\": \"382151822171089534\",\n          \"ipCidrRange\": \"10.172.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west6\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west6/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west8\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2023-05-22T00:06:57.768-07:00\",\n          \"fingerprint\": \"2K_gL14tmvo=\",\n          \"gatewayAddress\": \"10.198.0.1\",\n          \"id\": \"3183935100190894718\",\n          \"ipCidrRange\": \"10.198.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west8\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west8/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/europe-west9\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2023-05-22T00:06:57.615-07:00\",\n          \"fingerprint\": \"Y7pYVq5lePM=\",\n          \"gatewayAddress\": \"10.200.0.1\",\n          \"id\": \"1534621049541798526\",\n          \"ipCidrRange\": \"10.200.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west9\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west9/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/me-central1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2023-05-22T00:06:58.482-07:00\",\n          \"fingerprint\": \"6y0p9ptuH8w=\",\n          \"gatewayAddress\": \"10.212.0.1\",\n          \"id\": \"2502464596523526781\",\n          \"ipCidrRange\": \"10.212.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/me-central1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/me-central1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/me-central2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2023-09-19T08:38:42.393-07:00\",\n          \"fingerprint\": \"YS907XyPIgQ=\",\n          \"gatewayAddress\": \"10.216.0.1\",\n          \"id\": \"3967899440704159341\",\n          \"ipCidrRange\": \"10.216.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/me-central2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/me-central2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/me-west1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2023-05-22T00:06:58.047-07:00\",\n          \"fingerprint\": \"0gEAcJTlZyk=\",\n          \"gatewayAddress\": \"10.208.0.1\",\n          \"id\": \"8633821816504625789\",\n          \"ipCidrRange\": \"10.208.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/me-west1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/me-west1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/northamerica-northeast1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2023-05-22T00:06:57.455-07:00\",\n          \"fingerprint\": \"7UaO_Av4mwY=\",\n          \"gatewayAddress\": \"10.162.0.1\",\n          \"id\": \"6752088844742863486\",\n          \"ipCidrRange\": \"10.162.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n          \"privateIpGoogleAccess\": true,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/northamerica-northeast1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/northamerica-northeast1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/northamerica-northeast2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2023-05-22T00:06:57.183-07:00\",\n          \"fingerprint\": \"9FoebQ7DjTA=\",\n          \"gatewayAddress\": \"10.188.0.1\",\n          \"id\": \"3529922439897590398\",\n          \"ipCidrRange\": \"10.188.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/northamerica-northeast2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/northamerica-northeast2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/southamerica-east1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2023-05-22T00:06:58.519-07:00\",\n          \"fingerprint\": \"fk_3Vjsdn5Y=\",\n          \"gatewayAddress\": \"10.158.0.1\",\n          \"id\": \"936347794724530813\",\n          \"ipCidrRange\": \"10.158.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/southamerica-east1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/southamerica-east1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/southamerica-west1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2023-05-22T00:06:58.049-07:00\",\n          \"fingerprint\": \"2NleeFOtqnY=\",\n          \"gatewayAddress\": \"10.194.0.1\",\n          \"id\": \"1775999955333720701\",\n          \"ipCidrRange\": \"10.194.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/southamerica-west1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/southamerica-west1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-central1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2023-05-22T00:06:57.009-07:00\",\n          \"fingerprint\": \"pLUyQdHdyB8=\",\n          \"gatewayAddress\": \"10.128.0.1\",\n          \"id\": \"1675478041067170430\",\n          \"ipCidrRange\": \"10.128.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n          \"privateIpGoogleAccess\": true,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-central1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-central1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-east1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2023-05-22T00:06:56.955-07:00\",\n          \"fingerprint\": \"_cYESLbgvfw=\",\n          \"gatewayAddress\": \"10.142.0.1\",\n          \"id\": \"370369824935029375\",\n          \"ipCidrRange\": \"10.142.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n          \"privateIpGoogleAccess\": true,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-east1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-east1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-east4\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2023-05-22T00:06:57.096-07:00\",\n          \"fingerprint\": \"kb4FaBPcmVo=\",\n          \"gatewayAddress\": \"10.150.0.1\",\n          \"id\": \"3506313880844806782\",\n          \"ipCidrRange\": \"10.150.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n          \"privateIpGoogleAccess\": true,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-east4\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-east4/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-east5\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2023-05-22T00:06:57.225-07:00\",\n          \"fingerprint\": \"fNs1wcyiH1U=\",\n          \"gatewayAddress\": \"10.202.0.1\",\n          \"id\": \"2258599725005974142\",\n          \"ipCidrRange\": \"10.202.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-east5\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-east5/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-east7\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2023-05-22T17:06:37.584-07:00\",\n          \"fingerprint\": \"c4xUfWHOO30=\",\n          \"gatewayAddress\": \"10.196.0.1\",\n          \"id\": \"5645870084367957346\",\n          \"ipCidrRange\": \"10.196.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-east7\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-east7/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-south1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2023-05-22T00:06:57.211-07:00\",\n          \"fingerprint\": \"9QmgcF7dz30=\",\n          \"gatewayAddress\": \"10.206.0.1\",\n          \"id\": \"8521904271670028926\",\n          \"ipCidrRange\": \"10.206.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-south1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-south1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-west1\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2023-05-22T00:06:57.513-07:00\",\n          \"fingerprint\": \"7ca57iXVJFY=\",\n          \"gatewayAddress\": \"10.138.0.1\",\n          \"id\": \"5152948421657012862\",\n          \"ipCidrRange\": \"10.138.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n          \"privateIpGoogleAccess\": true,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west1/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-west2\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2023-05-22T00:06:57.634-07:00\",\n          \"fingerprint\": \"6O1DqoZGA0k=\",\n          \"gatewayAddress\": \"10.168.0.1\",\n          \"id\": \"1831725790199720574\",\n          \"ipCidrRange\": \"10.168.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west2\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west2/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-west3\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2023-05-22T00:06:57.386-07:00\",\n          \"fingerprint\": \"BzGlp8r_xWo=\",\n          \"gatewayAddress\": \"10.180.0.1\",\n          \"id\": \"864414196392438398\",\n          \"ipCidrRange\": \"10.180.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west3\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west3/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-west4\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2023-05-22T00:06:57.607-07:00\",\n          \"fingerprint\": \"YVpv95djrGA=\",\n          \"gatewayAddress\": \"10.182.0.1\",\n          \"id\": \"4328457199249959550\",\n          \"ipCidrRange\": \"10.182.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"privateIpv6GoogleAccess\": \"DISABLE_GOOGLE_ACCESS\",\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west4\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west4/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    },\n    \"regions/us-west8\": {\n      \"subnetworks\": [\n        {\n          \"creationTimestamp\": \"2023-11-16T13:27:45.680-08:00\",\n          \"fingerprint\": \"Q3c9r2xwLzc=\",\n          \"gatewayAddress\": \"10.220.0.1\",\n          \"id\": \"9169510117869828030\",\n          \"ipCidrRange\": \"10.220.0.0/20\",\n          \"kind\": \"compute#subnetwork\",\n          \"name\": \"default\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n          \"privateIpGoogleAccess\": false,\n          \"purpose\": \"PRIVATE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west8\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west8/subnetworks/default\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ]\n    }\n  },\n  \"kind\": \"compute#subnetworkAggregatedList\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/aggregated/subnetworks\"\n}\n"
  },
  {
    "path": "test-data/gke2/json-dumps/compute-templates.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/instanceTemplates\",\n  \"items\": [\n    {\n      \"creationTimestamp\": \"2023-10-16T03:21:34.546-07:00\",\n      \"description\": \"\",\n      \"id\": \"5089088979601502273\",\n      \"kind\": \"compute#instanceTemplate\",\n      \"name\": \"gke-bg-test-default-pool-72c8f044\",\n      \"properties\": {\n        \"disks\": [\n          {\n            \"autoDelete\": true,\n            \"boot\": true,\n            \"deviceName\": \"persistent-disk-0\",\n            \"index\": 0,\n            \"initializeParams\": {\n              \"diskSizeGb\": \"100\",\n              \"diskType\": \"pd-balanced\",\n              \"labels\": {\n                \"goog-gke-node\": \"\",\n                \"goog-gke-volume\": \"\",\n                \"goog-k8s-cluster-location\": \"us-central1-c\",\n                \"goog-k8s-cluster-name\": \"bg-test\",\n                \"goog-k8s-node-pool-name\": \"default-pool\"\n              },\n              \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-gke-cloud/global/images/ubuntu-gke-2204-1-27-v20230619\"\n            },\n            \"kind\": \"compute#attachedDisk\",\n            \"mode\": \"READ_WRITE\",\n            \"type\": \"PERSISTENT\"\n          }\n        ],\n        \"labels\": {\n          \"goog-gke-node\": \"\",\n          \"goog-k8s-cluster-location\": \"us-central1-c\",\n          \"goog-k8s-cluster-name\": \"bg-test\",\n          \"goog-k8s-node-pool-name\": \"default-pool\"\n        },\n        \"machineType\": \"e2-medium\",\n        \"metadata\": {\n          \"fingerprint\": \"REDACTED\",\n          \"items\": [\n            {\n              \"key\": \"kubelet-config\",\n              \"value\": \"apiVersion: kubelet.config.k8s.io/v1beta1\\nauthentication:\\n  anonymous:\\n    enabled: false\\n  webhook:\\n    enabled: true\\n  x509:\\n    clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\\nauthorization:\\n  mode: Webhook\\ncgroupRoot: /\\nclusterDNS:\\n- 10.104.0.10\\nclusterDomain: cluster.local\\nenableDebuggingHandlers: true\\nevictionHard:\\n  memory.available: 100Mi\\n  nodefs.available: 10%\\n  nodefs.inodesFree: 5%\\n  pid.available: 10%\\nfeatureGates:\\n  CSIMigrationGCE: true\\n  ExecProbeTimeout: false\\n  InTreePluginAWSUnregister: true\\n  InTreePluginAzureDiskUnregister: true\\n  InTreePluginvSphereUnregister: true\\n  RotateKubeletServerCertificate: true\\nkernelMemcgNotification: true\\nkind: KubeletConfiguration\\nkubeReserved:\\n  cpu: 1060m\\n  ephemeral-storage: 41Gi\\n  memory: 1019Mi\\nmaxParallelImagePulls: 3\\nreadOnlyPort: 10255\\nserializeImagePulls: false\\nserverTLSBootstrap: true\\nstaticPodPath: /etc/kubernetes/manifests\\n\"\n            },\n            {\n              \"key\": \"serial-port-logging-enable\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"cluster-location\",\n              \"value\": \"us-central1-c\"\n            },\n            {\n              \"key\": \"configure-sh\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"kube-labels\",\n              \"value\": \"cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=ubuntu,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=e2,cloud.google.com/private-node=false\"\n            },\n            {\n              \"key\": \"disable-legacy-endpoints\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"cluster-name\",\n              \"value\": \"bg-test\"\n            },\n            {\n              \"key\": \"cluster-uid\",\n              \"value\": \"75a5fc089be44ed6baff77091e6250b04cdda54d0f06443a86233ccc51a97d22\"\n            },\n            {\n              \"key\": \"gci-metrics-enabled\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"kube-rrrr\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"kubeconfig\",\n              \"value\": \"apiVersion: v1\\nkind: Config\\nclusters:\\n- cluster:\\n    server: https://10.128.0.19\\n    certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\\n  name: default-cluster\\ncontexts:\\n- context:\\n    cluster: default-cluster\\n    namespace: default\\n    user: exec-plugin-auth\\n  name: default-context\\ncurrent-context: default-context\\nusers:\\n- name: exec-plugin-auth\\n  user:\\n    exec:\\n      apiVersion: \\\"client.authentication.k8s.io/v1beta1\\\"\\n      command: '/home/kubernetes/bin/gke-exec-auth-plugin'\\n      args: [\\\"--cache-dir\\\", '/var/lib/kubelet/pki/']\\n\"\n            },\n            {\n              \"key\": \"user-data\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"gci-update-strategy\",\n              \"value\": \"update_disabled\"\n            }\n          ],\n          \"kind\": \"compute#metadata\"\n        },\n        \"networkInterfaces\": [\n          {\n            \"accessConfigs\": [\n              {\n                \"kind\": \"compute#accessConfig\",\n                \"name\": \"external-nat\",\n                \"networkTier\": \"PREMIUM\",\n                \"type\": \"ONE_TO_ONE_NAT\"\n              }\n            ],\n            \"aliasIpRanges\": [\n              {\n                \"ipCidrRange\": \"/24\",\n                \"subnetworkRangeName\": \"gke-bg-test-pods-75a5fc08\"\n              }\n            ],\n            \"kind\": \"compute#networkInterface\",\n            \"name\": \"nic0\",\n            \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n            \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-central1/subnetworks/default\"\n          }\n        ],\n        \"networkPerformanceConfig\": {\n          \"totalEgressBandwidthTier\": \"DEFAULT\"\n        },\n        \"scheduling\": {\n          \"automaticRestart\": true,\n          \"onHostMaintenance\": \"MIGRATE\",\n          \"preemptible\": false,\n          \"provisioningModel\": \"STANDARD\"\n        },\n        \"serviceAccounts\": [\n          {\n            \"email\": \"default\",\n            \"scopes\": [\n              \"https://www.googleapis.com/auth/devstorage.read_only\",\n              \"https://www.googleapis.com/auth/logging.write\",\n              \"https://www.googleapis.com/auth/monitoring\",\n              \"https://www.googleapis.com/auth/servicecontrol\",\n              \"https://www.googleapis.com/auth/service.management.readonly\",\n              \"https://www.googleapis.com/auth/trace.append\"\n            ]\n          }\n        ],\n        \"shieldedInstanceConfig\": {\n          \"enableIntegrityMonitoring\": true,\n          \"enableSecureBoot\": false,\n          \"enableVtpm\": true\n        },\n        \"tags\": {\n          \"items\": [\n            \"gke-bg-test-75a5fc08-node\"\n          ]\n        }\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/instanceTemplates/gke-bg-test-default-pool-72c8f044\"\n    },\n    {\n      \"creationTimestamp\": \"2023-10-16T03:21:42.827-07:00\",\n      \"description\": \"\",\n      \"id\": \"8606936081453068377\",\n      \"kind\": \"compute#instanceTemplate\",\n      \"name\": \"gke-bg-test2-default-pool-5ffdc354\",\n      \"properties\": {\n        \"disks\": [\n          {\n            \"autoDelete\": true,\n            \"boot\": true,\n            \"deviceName\": \"persistent-disk-0\",\n            \"index\": 0,\n            \"initializeParams\": {\n              \"diskSizeGb\": \"100\",\n              \"diskType\": \"pd-balanced\",\n              \"labels\": {\n                \"goog-gke-node\": \"\",\n                \"goog-gke-volume\": \"\",\n                \"goog-k8s-cluster-location\": \"us-central1-c\",\n                \"goog-k8s-cluster-name\": \"bg-test2\",\n                \"goog-k8s-node-pool-name\": \"default-pool\"\n              },\n              \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-gke-cloud/global/images/ubuntu-gke-2204-1-27-v20230619\"\n            },\n            \"kind\": \"compute#attachedDisk\",\n            \"mode\": \"READ_WRITE\",\n            \"type\": \"PERSISTENT\"\n          }\n        ],\n        \"labels\": {\n          \"goog-gke-node\": \"\",\n          \"goog-k8s-cluster-location\": \"us-central1-c\",\n          \"goog-k8s-cluster-name\": \"bg-test2\",\n          \"goog-k8s-node-pool-name\": \"default-pool\"\n        },\n        \"machineType\": \"e2-medium\",\n        \"metadata\": {\n          \"fingerprint\": \"REDACTED\",\n          \"items\": [\n            {\n              \"key\": \"cluster-location\",\n              \"value\": \"us-central1-c\"\n            },\n            {\n              \"key\": \"gci-update-strategy\",\n              \"value\": \"update_disabled\"\n            },\n            {\n              \"key\": \"gci-metrics-enabled\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"kubelet-config\",\n              \"value\": \"apiVersion: kubelet.config.k8s.io/v1beta1\\nauthentication:\\n  anonymous:\\n    enabled: false\\n  webhook:\\n    enabled: true\\n  x509:\\n    clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\\nauthorization:\\n  mode: Webhook\\ncgroupRoot: /\\nclusterDNS:\\n- 10.40.0.10\\nclusterDomain: cluster.local\\nenableDebuggingHandlers: true\\nevictionHard:\\n  memory.available: 100Mi\\n  nodefs.available: 10%\\n  nodefs.inodesFree: 5%\\n  pid.available: 10%\\nfeatureGates:\\n  CSIMigrationGCE: true\\n  ExecProbeTimeout: false\\n  InTreePluginAWSUnregister: true\\n  InTreePluginAzureDiskUnregister: true\\n  InTreePluginvSphereUnregister: true\\n  RotateKubeletServerCertificate: true\\nkernelMemcgNotification: true\\nkind: KubeletConfiguration\\nkubeReserved:\\n  cpu: 1060m\\n  ephemeral-storage: 41Gi\\n  memory: 1019Mi\\nmaxParallelImagePulls: 3\\nreadOnlyPort: 10255\\nserializeImagePulls: false\\nserverTLSBootstrap: true\\nstaticPodPath: /etc/kubernetes/manifests\\n\"\n            },\n            {\n              \"key\": \"kubeconfig\",\n              \"value\": \"apiVersion: v1\\nkind: Config\\nclusters:\\n- cluster:\\n    server: https://10.128.0.53\\n    certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\\n  name: default-cluster\\ncontexts:\\n- context:\\n    cluster: default-cluster\\n    namespace: default\\n    user: exec-plugin-auth\\n  name: default-context\\ncurrent-context: default-context\\nusers:\\n- name: exec-plugin-auth\\n  user:\\n    exec:\\n      apiVersion: \\\"client.authentication.k8s.io/v1beta1\\\"\\n      command: '/home/kubernetes/bin/gke-exec-auth-plugin'\\n      args: [\\\"--cache-dir\\\", '/var/lib/kubelet/pki/']\\n\"\n            },\n            {\n              \"key\": \"cluster-name\",\n              \"value\": \"bg-test2\"\n            },\n            {\n              \"key\": \"cluster-uid\",\n              \"value\": \"8a344011c4fb444fa7e73f4bdd084768a05887e488d541fc96ecbaf35e4e7cdf\"\n            },\n            {\n              \"key\": \"user-data\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"configure-sh\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"disable-legacy-endpoints\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"kube-labels\",\n              \"value\": \"cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=ubuntu,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=e2,cloud.google.com/private-node=false\"\n            },\n            {\n              \"key\": \"kube-rrrr\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"serial-port-logging-enable\",\n              \"value\": \"true\"\n            }\n          ],\n          \"kind\": \"compute#metadata\"\n        },\n        \"networkInterfaces\": [\n          {\n            \"accessConfigs\": [\n              {\n                \"kind\": \"compute#accessConfig\",\n                \"name\": \"external-nat\",\n                \"networkTier\": \"PREMIUM\",\n                \"type\": \"ONE_TO_ONE_NAT\"\n              }\n            ],\n            \"aliasIpRanges\": [\n              {\n                \"ipCidrRange\": \"/24\",\n                \"subnetworkRangeName\": \"gke-bg-test2-pods-8a344011\"\n              }\n            ],\n            \"kind\": \"compute#networkInterface\",\n            \"name\": \"nic0\",\n            \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n            \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-central1/subnetworks/default\"\n          }\n        ],\n        \"networkPerformanceConfig\": {\n          \"totalEgressBandwidthTier\": \"DEFAULT\"\n        },\n        \"scheduling\": {\n          \"automaticRestart\": true,\n          \"onHostMaintenance\": \"MIGRATE\",\n          \"preemptible\": false,\n          \"provisioningModel\": \"STANDARD\"\n        },\n        \"serviceAccounts\": [\n          {\n            \"email\": \"default\",\n            \"scopes\": [\n              \"https://www.googleapis.com/auth/devstorage.read_only\",\n              \"https://www.googleapis.com/auth/logging.write\",\n              \"https://www.googleapis.com/auth/monitoring\",\n              \"https://www.googleapis.com/auth/servicecontrol\",\n              \"https://www.googleapis.com/auth/service.management.readonly\",\n              \"https://www.googleapis.com/auth/trace.append\"\n            ]\n          }\n        ],\n        \"shieldedInstanceConfig\": {\n          \"enableIntegrityMonitoring\": true,\n          \"enableSecureBoot\": false,\n          \"enableVtpm\": true\n        },\n        \"tags\": {\n          \"items\": [\n            \"gke-bg-test2-8a344011-node\"\n          ]\n        }\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/instanceTemplates/gke-bg-test2-default-pool-5ffdc354\"\n    },\n    {\n      \"creationTimestamp\": \"2023-10-13T07:52:33.084-07:00\",\n      \"description\": \"\",\n      \"id\": \"2960142015314323294\",\n      \"kind\": \"compute#instanceTemplate\",\n      \"name\": \"gke-blue-green-128-default-pool-999a27c3\",\n      \"properties\": {\n        \"disks\": [\n          {\n            \"autoDelete\": true,\n            \"boot\": true,\n            \"deviceName\": \"persistent-disk-0\",\n            \"index\": 0,\n            \"initializeParams\": {\n              \"diskSizeGb\": \"100\",\n              \"diskType\": \"pd-balanced\",\n              \"labels\": {\n                \"goog-gke-node\": \"\",\n                \"goog-gke-volume\": \"\",\n                \"goog-k8s-cluster-location\": \"us-central1-c\",\n                \"goog-k8s-cluster-name\": \"blue-green-128\",\n                \"goog-k8s-node-pool-name\": \"default-pool\"\n              },\n              \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-gke-cloud/global/images/ubuntu-gke-2204-1-28-v20230919\"\n            },\n            \"kind\": \"compute#attachedDisk\",\n            \"mode\": \"READ_WRITE\",\n            \"type\": \"PERSISTENT\"\n          }\n        ],\n        \"labels\": {\n          \"goog-gke-node\": \"\",\n          \"goog-k8s-cluster-location\": \"us-central1-c\",\n          \"goog-k8s-cluster-name\": \"blue-green-128\",\n          \"goog-k8s-node-pool-name\": \"default-pool\"\n        },\n        \"machineType\": \"e2-medium\",\n        \"metadata\": {\n          \"fingerprint\": \"REDACTED\",\n          \"items\": [\n            {\n              \"key\": \"cluster-uid\",\n              \"value\": \"26fa20aacd804d428d230ab635aeb19a98b4e089b60c47869d1b4e515a4ff69a\"\n            },\n            {\n              \"key\": \"kubelet-config\",\n              \"value\": \"apiVersion: kubelet.config.k8s.io/v1beta1\\nauthentication:\\n  anonymous:\\n    enabled: false\\n  webhook:\\n    enabled: true\\n  x509:\\n    clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\\nauthorization:\\n  mode: Webhook\\ncgroupRoot: /\\nclusterDNS:\\n- 10.120.0.10\\nclusterDomain: cluster.local\\nenableDebuggingHandlers: true\\nevictionHard:\\n  memory.available: 100Mi\\n  nodefs.available: 10%\\n  nodefs.inodesFree: 5%\\n  pid.available: 10%\\nfeatureGates:\\n  DisableKubeletCloudCredentialProviders: true\\n  ExecProbeTimeout: false\\n  InTreePluginAWSUnregister: true\\n  InTreePluginAzureDiskUnregister: true\\n  InTreePluginvSphereUnregister: true\\n  RotateKubeletServerCertificate: true\\nkernelMemcgNotification: true\\nkind: KubeletConfiguration\\nkubeReserved:\\n  cpu: 1060m\\n  ephemeral-storage: 41Gi\\n  memory: 1019Mi\\nmaxParallelImagePulls: 3\\nreadOnlyPort: 10255\\nserializeImagePulls: false\\nserverTLSBootstrap: true\\nstaticPodPath: /etc/kubernetes/manifests\\n\"\n            },\n            {\n              \"key\": \"disable-legacy-endpoints\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"kube-rrrr\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"kube-labels\",\n              \"value\": \"cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=ubuntu,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=e2,cloud.google.com/private-node=false\"\n            },\n            {\n              \"key\": \"kubeconfig\",\n              \"value\": \"apiVersion: v1\\nkind: Config\\nclusters:\\n- cluster:\\n    server: https://10.128.0.40\\n    certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\\n  name: default-cluster\\ncontexts:\\n- context:\\n    cluster: default-cluster\\n    namespace: default\\n    user: exec-plugin-auth\\n  name: default-context\\ncurrent-context: default-context\\nusers:\\n- name: exec-plugin-auth\\n  user:\\n    exec:\\n      apiVersion: \\\"client.authentication.k8s.io/v1beta1\\\"\\n      command: '/home/kubernetes/bin/gke-exec-auth-plugin'\\n      args: [\\\"--cache-dir\\\", '/var/lib/kubelet/pki/']\\n\"\n            },\n            {\n              \"key\": \"serial-port-logging-enable\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"cluster-name\",\n              \"value\": \"blue-green-128\"\n            },\n            {\n              \"key\": \"gci-metrics-enabled\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"cluster-location\",\n              \"value\": \"us-central1-c\"\n            },\n            {\n              \"key\": \"user-data\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"configure-sh\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"gci-update-strategy\",\n              \"value\": \"update_disabled\"\n            }\n          ],\n          \"kind\": \"compute#metadata\"\n        },\n        \"networkInterfaces\": [\n          {\n            \"accessConfigs\": [\n              {\n                \"kind\": \"compute#accessConfig\",\n                \"name\": \"external-nat\",\n                \"networkTier\": \"PREMIUM\",\n                \"type\": \"ONE_TO_ONE_NAT\"\n              }\n            ],\n            \"aliasIpRanges\": [\n              {\n                \"ipCidrRange\": \"/24\",\n                \"subnetworkRangeName\": \"gke-blue-green-128-pods-26fa20aa\"\n              }\n            ],\n            \"kind\": \"compute#networkInterface\",\n            \"name\": \"nic0\",\n            \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n            \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-central1/subnetworks/default\"\n          }\n        ],\n        \"networkPerformanceConfig\": {\n          \"totalEgressBandwidthTier\": \"DEFAULT\"\n        },\n        \"scheduling\": {\n          \"automaticRestart\": true,\n          \"onHostMaintenance\": \"MIGRATE\",\n          \"preemptible\": false,\n          \"provisioningModel\": \"STANDARD\"\n        },\n        \"serviceAccounts\": [\n          {\n            \"email\": \"default\",\n            \"scopes\": [\n              \"https://www.googleapis.com/auth/devstorage.read_only\",\n              \"https://www.googleapis.com/auth/logging.write\",\n              \"https://www.googleapis.com/auth/monitoring\",\n              \"https://www.googleapis.com/auth/servicecontrol\",\n              \"https://www.googleapis.com/auth/service.management.readonly\",\n              \"https://www.googleapis.com/auth/trace.append\"\n            ]\n          }\n        ],\n        \"shieldedInstanceConfig\": {\n          \"enableIntegrityMonitoring\": true,\n          \"enableSecureBoot\": false,\n          \"enableVtpm\": true\n        },\n        \"tags\": {\n          \"items\": [\n            \"gke-blue-green-128-26fa20aa-node\"\n          ]\n        }\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/instanceTemplates/gke-blue-green-128-default-pool-999a27c3\"\n    },\n    {\n      \"creationTimestamp\": \"2023-10-12T05:54:00.148-07:00\",\n      \"description\": \"\",\n      \"id\": \"5727513216495014535\",\n      \"kind\": \"compute#instanceTemplate\",\n      \"name\": \"gke-blue-green-test-default-pool-c8ab4438\",\n      \"properties\": {\n        \"disks\": [\n          {\n            \"autoDelete\": true,\n            \"boot\": true,\n            \"deviceName\": \"persistent-disk-0\",\n            \"index\": 0,\n            \"initializeParams\": {\n              \"diskSizeGb\": \"100\",\n              \"diskType\": \"pd-balanced\",\n              \"labels\": {\n                \"goog-gke-node\": \"\",\n                \"goog-gke-volume\": \"\",\n                \"goog-k8s-cluster-location\": \"us-central1-c\",\n                \"goog-k8s-cluster-name\": \"blue-green-test\",\n                \"goog-k8s-node-pool-name\": \"default-pool\"\n              },\n              \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/ubuntu-os-gke-cloud/global/images/ubuntu-gke-2204-1-27-v20230619\"\n            },\n            \"kind\": \"compute#attachedDisk\",\n            \"mode\": \"READ_WRITE\",\n            \"type\": \"PERSISTENT\"\n          }\n        ],\n        \"labels\": {\n          \"goog-gke-node\": \"\",\n          \"goog-k8s-cluster-location\": \"us-central1-c\",\n          \"goog-k8s-cluster-name\": \"blue-green-test\",\n          \"goog-k8s-node-pool-name\": \"default-pool\"\n        },\n        \"machineType\": \"e2-medium\",\n        \"metadata\": {\n          \"fingerprint\": \"REDACTED\",\n          \"items\": [\n            {\n              \"key\": \"cluster-location\",\n              \"value\": \"us-central1-c\"\n            },\n            {\n              \"key\": \"gci-update-strategy\",\n              \"value\": \"update_disabled\"\n            },\n            {\n              \"key\": \"serial-port-logging-enable\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"cluster-name\",\n              \"value\": \"blue-green-test\"\n            },\n            {\n              \"key\": \"cluster-uid\",\n              \"value\": \"626e851dde8c47159b5d797c8f9dfb29487996073dc244bb868a88770c47500a\"\n            },\n            {\n              \"key\": \"kubelet-config\",\n              \"value\": \"apiVersion: kubelet.config.k8s.io/v1beta1\\nauthentication:\\n  anonymous:\\n    enabled: false\\n  webhook:\\n    enabled: true\\n  x509:\\n    clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\\nauthorization:\\n  mode: Webhook\\ncgroupRoot: /\\nclusterDNS:\\n- 10.96.0.10\\nclusterDomain: cluster.local\\nenableDebuggingHandlers: true\\nevictionHard:\\n  memory.available: 100Mi\\n  nodefs.available: 10%\\n  nodefs.inodesFree: 5%\\n  pid.available: 10%\\nfeatureGates:\\n  CSIMigrationGCE: true\\n  ExecProbeTimeout: false\\n  InTreePluginAWSUnregister: true\\n  InTreePluginAzureDiskUnregister: true\\n  InTreePluginvSphereUnregister: true\\n  RotateKubeletServerCertificate: true\\nkernelMemcgNotification: true\\nkind: KubeletConfiguration\\nkubeReserved:\\n  cpu: 1060m\\n  ephemeral-storage: 41Gi\\n  memory: 1019Mi\\nmaxParallelImagePulls: 3\\nreadOnlyPort: 10255\\nserializeImagePulls: false\\nserverTLSBootstrap: true\\nstaticPodPath: /etc/kubernetes/manifests\\n\"\n            },\n            {\n              \"key\": \"kubeconfig\",\n              \"value\": \"apiVersion: v1\\nkind: Config\\nclusters:\\n- cluster:\\n    server: https://10.128.0.15\\n    certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\\n  name: default-cluster\\ncontexts:\\n- context:\\n    cluster: default-cluster\\n    namespace: default\\n    user: exec-plugin-auth\\n  name: default-context\\ncurrent-context: default-context\\nusers:\\n- name: exec-plugin-auth\\n  user:\\n    exec:\\n      apiVersion: \\\"client.authentication.k8s.io/v1beta1\\\"\\n      command: '/home/kubernetes/bin/gke-exec-auth-plugin'\\n      args: [\\\"--cache-dir\\\", '/var/lib/kubelet/pki/']\\n\"\n            },\n            {\n              \"key\": \"disable-legacy-endpoints\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"configure-sh\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"kube-rrrr\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"user-data\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"gci-metrics-enabled\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"kube-labels\",\n              \"value\": \"cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=ubuntu,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=e2,cloud.google.com/private-node=false\"\n            }\n          ],\n          \"kind\": \"compute#metadata\"\n        },\n        \"networkInterfaces\": [\n          {\n            \"accessConfigs\": [\n              {\n                \"kind\": \"compute#accessConfig\",\n                \"name\": \"external-nat\",\n                \"networkTier\": \"PREMIUM\",\n                \"type\": \"ONE_TO_ONE_NAT\"\n              }\n            ],\n            \"aliasIpRanges\": [\n              {\n                \"ipCidrRange\": \"/24\",\n                \"subnetworkRangeName\": \"gke-blue-green-test-pods-626e851d\"\n              }\n            ],\n            \"kind\": \"compute#networkInterface\",\n            \"name\": \"nic0\",\n            \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n            \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-central1/subnetworks/default\"\n          }\n        ],\n        \"networkPerformanceConfig\": {\n          \"totalEgressBandwidthTier\": \"DEFAULT\"\n        },\n        \"scheduling\": {\n          \"automaticRestart\": true,\n          \"onHostMaintenance\": \"MIGRATE\",\n          \"preemptible\": false,\n          \"provisioningModel\": \"STANDARD\"\n        },\n        \"serviceAccounts\": [\n          {\n            \"email\": \"default\",\n            \"scopes\": [\n              \"https://www.googleapis.com/auth/devstorage.read_only\",\n              \"https://www.googleapis.com/auth/logging.write\",\n              \"https://www.googleapis.com/auth/monitoring\",\n              \"https://www.googleapis.com/auth/servicecontrol\",\n              \"https://www.googleapis.com/auth/service.management.readonly\",\n              \"https://www.googleapis.com/auth/trace.append\"\n            ]\n          }\n        ],\n        \"shieldedInstanceConfig\": {\n          \"enableIntegrityMonitoring\": true,\n          \"enableSecureBoot\": false,\n          \"enableVtpm\": true\n        },\n        \"tags\": {\n          \"items\": [\n            \"gke-blue-green-test-626e851d-node\"\n          ]\n        }\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/instanceTemplates/gke-blue-green-test-default-pool-c8ab4438\"\n    },\n    {\n      \"creationTimestamp\": \"2024-04-09T05:08:01.582-07:00\",\n      \"description\": \"\",\n      \"id\": \"6024509272958210382\",\n      \"kind\": \"compute#instanceTemplate\",\n      \"name\": \"gke-gcp-cluster-default-pool-2b1e5c3e\",\n      \"properties\": {\n        \"disks\": [\n          {\n            \"autoDelete\": true,\n            \"boot\": true,\n            \"deviceName\": \"persistent-disk-0\",\n            \"index\": 0,\n            \"initializeParams\": {\n              \"diskSizeGb\": \"100\",\n              \"diskType\": \"pd-balanced\",\n              \"labels\": {\n                \"goog-gke-node\": \"\",\n                \"goog-gke-volume\": \"\",\n                \"goog-k8s-cluster-location\": \"europe-west10\",\n                \"goog-k8s-cluster-name\": \"gcp-cluster\",\n                \"goog-k8s-node-pool-name\": \"default-pool\"\n              },\n              \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-1278-gke1067004-cos-105-17412-226-62-c-pre\"\n            },\n            \"kind\": \"compute#attachedDisk\",\n            \"mode\": \"READ_WRITE\",\n            \"type\": \"PERSISTENT\"\n          }\n        ],\n        \"labels\": {\n          \"goog-gke-node\": \"\",\n          \"goog-k8s-cluster-location\": \"europe-west10\",\n          \"goog-k8s-cluster-name\": \"gcp-cluster\",\n          \"goog-k8s-node-pool-name\": \"default-pool\"\n        },\n        \"machineType\": \"e2-medium\",\n        \"metadata\": {\n          \"fingerprint\": \"REDACTED\",\n          \"items\": [\n            {\n              \"key\": \"serial-port-logging-enable\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"cluster-name\",\n              \"value\": \"gcp-cluster\"\n            },\n            {\n              \"key\": \"gci-metrics-enabled\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"user-data\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"disable-legacy-endpoints\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"kube-labels\",\n              \"value\": \"cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=e2,cloud.google.com/private-node=false\"\n            },\n            {\n              \"key\": \"kubelet-config\",\n              \"value\": \"apiVersion: kubelet.config.k8s.io/v1beta1\\nauthentication:\\n  anonymous:\\n    enabled: false\\n  webhook:\\n    enabled: true\\n  x509:\\n    clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\\nauthorization:\\n  mode: Webhook\\ncgroupRoot: /\\nclusterDNS:\\n- 10.110.80.10\\nclusterDomain: cluster.local\\nenableDebuggingHandlers: true\\nevictionHard:\\n  memory.available: 100Mi\\n  nodefs.available: 10%\\n  nodefs.inodesFree: 5%\\n  pid.available: 10%\\nfeatureGates:\\n  CSIMigrationGCE: true\\n  ExecProbeTimeout: false\\n  InTreePluginAWSUnregister: true\\n  InTreePluginAzureDiskUnregister: true\\n  InTreePluginvSphereUnregister: true\\n  RotateKubeletServerCertificate: true\\nkernelMemcgNotification: true\\nkind: KubeletConfiguration\\nkubeReserved:\\n  cpu: 1060m\\n  ephemeral-storage: 41Gi\\n  memory: 1019Mi\\nmaxParallelImagePulls: 3\\nreadOnlyPort: 10255\\nserializeImagePulls: false\\nserverTLSBootstrap: true\\nstaticPodPath: /etc/kubernetes/manifests\\n\"\n            },\n            {\n              \"key\": \"google-compute-enable-pcid\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"gci-update-strategy\",\n              \"value\": \"update_disabled\"\n            },\n            {\n              \"key\": \"cluster-uid\",\n              \"value\": \"714df7d8dc294225a17ea008c20ab288ee3e6b41b24c4527b8d418cb1a8cf3c4\"\n            },\n            {\n              \"key\": \"kubeconfig\",\n              \"value\": \"apiVersion: v1\\nkind: Config\\nclusters:\\n- cluster:\\n    server: https://10.214.0.8\\n    certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\\n  name: default-cluster\\ncontexts:\\n- context:\\n    cluster: default-cluster\\n    namespace: default\\n    user: exec-plugin-auth\\n  name: default-context\\ncurrent-context: default-context\\nusers:\\n- name: exec-plugin-auth\\n  user:\\n    exec:\\n      apiVersion: \\\"client.authentication.k8s.io/v1beta1\\\"\\n      command: '/home/kubernetes/bin/gke-exec-auth-plugin'\\n      args: [\\\"--cache-dir\\\", '/var/lib/kubelet/pki/']\\n\"\n            },\n            {\n              \"key\": \"kube-rrrr\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"cluster-location\",\n              \"value\": \"europe-west10\"\n            },\n            {\n              \"key\": \"configure-sh\",\n              \"value\": \"REDACTED\"\n            }\n          ],\n          \"kind\": \"compute#metadata\"\n        },\n        \"networkInterfaces\": [\n          {\n            \"accessConfigs\": [\n              {\n                \"kind\": \"compute#accessConfig\",\n                \"name\": \"external-nat\",\n                \"networkTier\": \"PREMIUM\",\n                \"type\": \"ONE_TO_ONE_NAT\"\n              }\n            ],\n            \"aliasIpRanges\": [\n              {\n                \"ipCidrRange\": \"/24\",\n                \"subnetworkRangeName\": \"gke-gcp-cluster-pods-714df7d8\"\n              }\n            ],\n            \"kind\": \"compute#networkInterface\",\n            \"name\": \"nic0\",\n            \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n            \"stackType\": \"IPV4_ONLY\",\n            \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west10/subnetworks/default\"\n          }\n        ],\n        \"networkPerformanceConfig\": {\n          \"totalEgressBandwidthTier\": \"DEFAULT\"\n        },\n        \"scheduling\": {\n          \"automaticRestart\": true,\n          \"onHostMaintenance\": \"MIGRATE\",\n          \"preemptible\": false,\n          \"provisioningModel\": \"STANDARD\"\n        },\n        \"serviceAccounts\": [\n          {\n            \"email\": \"default\",\n            \"scopes\": [\n              \"https://www.googleapis.com/auth/devstorage.read_only\",\n              \"https://www.googleapis.com/auth/logging.write\",\n              \"https://www.googleapis.com/auth/monitoring\",\n              \"https://www.googleapis.com/auth/servicecontrol\",\n              \"https://www.googleapis.com/auth/service.management.readonly\",\n              \"https://www.googleapis.com/auth/trace.append\"\n            ]\n          }\n        ],\n        \"shieldedInstanceConfig\": {\n          \"enableIntegrityMonitoring\": true,\n          \"enableSecureBoot\": false,\n          \"enableVtpm\": true\n        },\n        \"tags\": {\n          \"items\": [\n            \"gke-gcp-cluster-714df7d8-node\"\n          ]\n        }\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/instanceTemplates/gke-gcp-cluster-default-pool-2b1e5c3e\"\n    },\n    {\n      \"creationTimestamp\": \"2024-04-09T05:08:02.392-07:00\",\n      \"description\": \"\",\n      \"id\": \"2638761677070831950\",\n      \"kind\": \"compute#instanceTemplate\",\n      \"name\": \"gke-gcp-cluster-default-pool-82e0c046\",\n      \"properties\": {\n        \"disks\": [\n          {\n            \"autoDelete\": true,\n            \"boot\": true,\n            \"deviceName\": \"persistent-disk-0\",\n            \"index\": 0,\n            \"initializeParams\": {\n              \"diskSizeGb\": \"100\",\n              \"diskType\": \"pd-balanced\",\n              \"labels\": {\n                \"goog-gke-node\": \"\",\n                \"goog-gke-volume\": \"\",\n                \"goog-k8s-cluster-location\": \"europe-west10\",\n                \"goog-k8s-cluster-name\": \"gcp-cluster\",\n                \"goog-k8s-node-pool-name\": \"default-pool\"\n              },\n              \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-1278-gke1067004-cos-105-17412-226-62-c-pre\"\n            },\n            \"kind\": \"compute#attachedDisk\",\n            \"mode\": \"READ_WRITE\",\n            \"type\": \"PERSISTENT\"\n          }\n        ],\n        \"labels\": {\n          \"goog-gke-node\": \"\",\n          \"goog-k8s-cluster-location\": \"europe-west10\",\n          \"goog-k8s-cluster-name\": \"gcp-cluster\",\n          \"goog-k8s-node-pool-name\": \"default-pool\"\n        },\n        \"machineType\": \"e2-medium\",\n        \"metadata\": {\n          \"fingerprint\": \"REDACTED\",\n          \"items\": [\n            {\n              \"key\": \"kube-labels\",\n              \"value\": \"cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=e2,cloud.google.com/private-node=false\"\n            },\n            {\n              \"key\": \"kubelet-config\",\n              \"value\": \"apiVersion: kubelet.config.k8s.io/v1beta1\\nauthentication:\\n  anonymous:\\n    enabled: false\\n  webhook:\\n    enabled: true\\n  x509:\\n    clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\\nauthorization:\\n  mode: Webhook\\ncgroupRoot: /\\nclusterDNS:\\n- 10.110.80.10\\nclusterDomain: cluster.local\\nenableDebuggingHandlers: true\\nevictionHard:\\n  memory.available: 100Mi\\n  nodefs.available: 10%\\n  nodefs.inodesFree: 5%\\n  pid.available: 10%\\nfeatureGates:\\n  CSIMigrationGCE: true\\n  ExecProbeTimeout: false\\n  InTreePluginAWSUnregister: true\\n  InTreePluginAzureDiskUnregister: true\\n  InTreePluginvSphereUnregister: true\\n  RotateKubeletServerCertificate: true\\nkernelMemcgNotification: true\\nkind: KubeletConfiguration\\nkubeReserved:\\n  cpu: 1060m\\n  ephemeral-storage: 41Gi\\n  memory: 1019Mi\\nmaxParallelImagePulls: 3\\nreadOnlyPort: 10255\\nserializeImagePulls: false\\nserverTLSBootstrap: true\\nstaticPodPath: /etc/kubernetes/manifests\\n\"\n            },\n            {\n              \"key\": \"google-compute-enable-pcid\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"gci-update-strategy\",\n              \"value\": \"update_disabled\"\n            },\n            {\n              \"key\": \"cluster-location\",\n              \"value\": \"europe-west10\"\n            },\n            {\n              \"key\": \"kubeconfig\",\n              \"value\": \"apiVersion: v1\\nkind: Config\\nclusters:\\n- cluster:\\n    server: https://10.214.0.8\\n    certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\\n  name: default-cluster\\ncontexts:\\n- context:\\n    cluster: default-cluster\\n    namespace: default\\n    user: exec-plugin-auth\\n  name: default-context\\ncurrent-context: default-context\\nusers:\\n- name: exec-plugin-auth\\n  user:\\n    exec:\\n      apiVersion: \\\"client.authentication.k8s.io/v1beta1\\\"\\n      command: '/home/kubernetes/bin/gke-exec-auth-plugin'\\n      args: [\\\"--cache-dir\\\", '/var/lib/kubelet/pki/']\\n\"\n            },\n            {\n              \"key\": \"gci-metrics-enabled\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"serial-port-logging-enable\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"user-data\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"cluster-uid\",\n              \"value\": \"714df7d8dc294225a17ea008c20ab288ee3e6b41b24c4527b8d418cb1a8cf3c4\"\n            },\n            {\n              \"key\": \"disable-legacy-endpoints\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"cluster-name\",\n              \"value\": \"gcp-cluster\"\n            },\n            {\n              \"key\": \"configure-sh\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"kube-rrrr\",\n              \"value\": \"REDACTED\"\n            }\n          ],\n          \"kind\": \"compute#metadata\"\n        },\n        \"networkInterfaces\": [\n          {\n            \"accessConfigs\": [\n              {\n                \"kind\": \"compute#accessConfig\",\n                \"name\": \"external-nat\",\n                \"networkTier\": \"PREMIUM\",\n                \"type\": \"ONE_TO_ONE_NAT\"\n              }\n            ],\n            \"aliasIpRanges\": [\n              {\n                \"ipCidrRange\": \"/24\",\n                \"subnetworkRangeName\": \"gke-gcp-cluster-pods-714df7d8\"\n              }\n            ],\n            \"kind\": \"compute#networkInterface\",\n            \"name\": \"nic0\",\n            \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n            \"stackType\": \"IPV4_ONLY\",\n            \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west10/subnetworks/default\"\n          }\n        ],\n        \"networkPerformanceConfig\": {\n          \"totalEgressBandwidthTier\": \"DEFAULT\"\n        },\n        \"scheduling\": {\n          \"automaticRestart\": true,\n          \"onHostMaintenance\": \"MIGRATE\",\n          \"preemptible\": false,\n          \"provisioningModel\": \"STANDARD\"\n        },\n        \"serviceAccounts\": [\n          {\n            \"email\": \"default\",\n            \"scopes\": [\n              \"https://www.googleapis.com/auth/devstorage.read_only\",\n              \"https://www.googleapis.com/auth/logging.write\",\n              \"https://www.googleapis.com/auth/monitoring\",\n              \"https://www.googleapis.com/auth/servicecontrol\",\n              \"https://www.googleapis.com/auth/service.management.readonly\",\n              \"https://www.googleapis.com/auth/trace.append\"\n            ]\n          }\n        ],\n        \"shieldedInstanceConfig\": {\n          \"enableIntegrityMonitoring\": true,\n          \"enableSecureBoot\": false,\n          \"enableVtpm\": true\n        },\n        \"tags\": {\n          \"items\": [\n            \"gke-gcp-cluster-714df7d8-node\"\n          ]\n        }\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/instanceTemplates/gke-gcp-cluster-default-pool-82e0c046\"\n    },\n    {\n      \"creationTimestamp\": \"2024-04-09T05:08:02.094-07:00\",\n      \"description\": \"\",\n      \"id\": \"297262158603391310\",\n      \"kind\": \"compute#instanceTemplate\",\n      \"name\": \"gke-gcp-cluster-default-pool-a66c21d9\",\n      \"properties\": {\n        \"disks\": [\n          {\n            \"autoDelete\": true,\n            \"boot\": true,\n            \"deviceName\": \"persistent-disk-0\",\n            \"index\": 0,\n            \"initializeParams\": {\n              \"diskSizeGb\": \"100\",\n              \"diskType\": \"pd-balanced\",\n              \"labels\": {\n                \"goog-gke-node\": \"\",\n                \"goog-gke-volume\": \"\",\n                \"goog-k8s-cluster-location\": \"europe-west10\",\n                \"goog-k8s-cluster-name\": \"gcp-cluster\",\n                \"goog-k8s-node-pool-name\": \"default-pool\"\n              },\n              \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-1278-gke1067004-cos-105-17412-226-62-c-pre\"\n            },\n            \"kind\": \"compute#attachedDisk\",\n            \"mode\": \"READ_WRITE\",\n            \"type\": \"PERSISTENT\"\n          }\n        ],\n        \"labels\": {\n          \"goog-gke-node\": \"\",\n          \"goog-k8s-cluster-location\": \"europe-west10\",\n          \"goog-k8s-cluster-name\": \"gcp-cluster\",\n          \"goog-k8s-node-pool-name\": \"default-pool\"\n        },\n        \"machineType\": \"e2-medium\",\n        \"metadata\": {\n          \"fingerprint\": \"REDACTED\",\n          \"items\": [\n            {\n              \"key\": \"gci-metrics-enabled\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"cluster-uid\",\n              \"value\": \"714df7d8dc294225a17ea008c20ab288ee3e6b41b24c4527b8d418cb1a8cf3c4\"\n            },\n            {\n              \"key\": \"cluster-location\",\n              \"value\": \"europe-west10\"\n            },\n            {\n              \"key\": \"disable-legacy-endpoints\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"kube-labels\",\n              \"value\": \"cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=e2,cloud.google.com/private-node=false\"\n            },\n            {\n              \"key\": \"user-data\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"gci-update-strategy\",\n              \"value\": \"update_disabled\"\n            },\n            {\n              \"key\": \"cluster-name\",\n              \"value\": \"gcp-cluster\"\n            },\n            {\n              \"key\": \"kube-rrrr\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"serial-port-logging-enable\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"google-compute-enable-pcid\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"kubeconfig\",\n              \"value\": \"apiVersion: v1\\nkind: Config\\nclusters:\\n- cluster:\\n    server: https://10.214.0.8\\n    certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\\n  name: default-cluster\\ncontexts:\\n- context:\\n    cluster: default-cluster\\n    namespace: default\\n    user: exec-plugin-auth\\n  name: default-context\\ncurrent-context: default-context\\nusers:\\n- name: exec-plugin-auth\\n  user:\\n    exec:\\n      apiVersion: \\\"client.authentication.k8s.io/v1beta1\\\"\\n      command: '/home/kubernetes/bin/gke-exec-auth-plugin'\\n      args: [\\\"--cache-dir\\\", '/var/lib/kubelet/pki/']\\n\"\n            },\n            {\n              \"key\": \"kubelet-config\",\n              \"value\": \"apiVersion: kubelet.config.k8s.io/v1beta1\\nauthentication:\\n  anonymous:\\n    enabled: false\\n  webhook:\\n    enabled: true\\n  x509:\\n    clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\\nauthorization:\\n  mode: Webhook\\ncgroupRoot: /\\nclusterDNS:\\n- 10.110.80.10\\nclusterDomain: cluster.local\\nenableDebuggingHandlers: true\\nevictionHard:\\n  memory.available: 100Mi\\n  nodefs.available: 10%\\n  nodefs.inodesFree: 5%\\n  pid.available: 10%\\nfeatureGates:\\n  CSIMigrationGCE: true\\n  ExecProbeTimeout: false\\n  InTreePluginAWSUnregister: true\\n  InTreePluginAzureDiskUnregister: true\\n  InTreePluginvSphereUnregister: true\\n  RotateKubeletServerCertificate: true\\nkernelMemcgNotification: true\\nkind: KubeletConfiguration\\nkubeReserved:\\n  cpu: 1060m\\n  ephemeral-storage: 41Gi\\n  memory: 1019Mi\\nmaxParallelImagePulls: 3\\nreadOnlyPort: 10255\\nserializeImagePulls: false\\nserverTLSBootstrap: true\\nstaticPodPath: /etc/kubernetes/manifests\\n\"\n            },\n            {\n              \"key\": \"configure-sh\",\n              \"value\": \"REDACTED\"\n            }\n          ],\n          \"kind\": \"compute#metadata\"\n        },\n        \"networkInterfaces\": [\n          {\n            \"accessConfigs\": [\n              {\n                \"kind\": \"compute#accessConfig\",\n                \"name\": \"external-nat\",\n                \"networkTier\": \"PREMIUM\",\n                \"type\": \"ONE_TO_ONE_NAT\"\n              }\n            ],\n            \"aliasIpRanges\": [\n              {\n                \"ipCidrRange\": \"/24\",\n                \"subnetworkRangeName\": \"gke-gcp-cluster-pods-714df7d8\"\n              }\n            ],\n            \"kind\": \"compute#networkInterface\",\n            \"name\": \"nic0\",\n            \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n            \"stackType\": \"IPV4_ONLY\",\n            \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west10/subnetworks/default\"\n          }\n        ],\n        \"networkPerformanceConfig\": {\n          \"totalEgressBandwidthTier\": \"DEFAULT\"\n        },\n        \"scheduling\": {\n          \"automaticRestart\": true,\n          \"onHostMaintenance\": \"MIGRATE\",\n          \"preemptible\": false,\n          \"provisioningModel\": \"STANDARD\"\n        },\n        \"serviceAccounts\": [\n          {\n            \"email\": \"default\",\n            \"scopes\": [\n              \"https://www.googleapis.com/auth/devstorage.read_only\",\n              \"https://www.googleapis.com/auth/logging.write\",\n              \"https://www.googleapis.com/auth/monitoring\",\n              \"https://www.googleapis.com/auth/servicecontrol\",\n              \"https://www.googleapis.com/auth/service.management.readonly\",\n              \"https://www.googleapis.com/auth/trace.append\"\n            ]\n          }\n        ],\n        \"shieldedInstanceConfig\": {\n          \"enableIntegrityMonitoring\": true,\n          \"enableSecureBoot\": false,\n          \"enableVtpm\": true\n        },\n        \"tags\": {\n          \"items\": [\n            \"gke-gcp-cluster-714df7d8-node\"\n          ]\n        }\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/instanceTemplates/gke-gcp-cluster-default-pool-a66c21d9\"\n    },\n    {\n      \"creationTimestamp\": \"2024-04-09T04:03:55.911-07:00\",\n      \"description\": \"\",\n      \"id\": \"398974435940933236\",\n      \"kind\": \"compute#instanceTemplate\",\n      \"name\": \"gke-gcp-cluster-default-pool-c7891c09\",\n      \"properties\": {\n        \"disks\": [\n          {\n            \"autoDelete\": true,\n            \"boot\": true,\n            \"deviceName\": \"persistent-disk-0\",\n            \"index\": 0,\n            \"initializeParams\": {\n              \"diskSizeGb\": \"100\",\n              \"diskType\": \"pd-balanced\",\n              \"labels\": {\n                \"goog-gke-node\": \"\",\n                \"goog-gke-volume\": \"\",\n                \"goog-k8s-cluster-location\": \"europe-west10-a\",\n                \"goog-k8s-cluster-name\": \"gcp-cluster\",\n                \"goog-k8s-node-pool-name\": \"default-pool\"\n              },\n              \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/gke-node-images/global/images/gke-1278-gke1067004-cos-105-17412-226-62-c-pre\"\n            },\n            \"kind\": \"compute#attachedDisk\",\n            \"mode\": \"READ_WRITE\",\n            \"type\": \"PERSISTENT\"\n          }\n        ],\n        \"labels\": {\n          \"goog-gke-node\": \"\",\n          \"goog-k8s-cluster-location\": \"europe-west10-a\",\n          \"goog-k8s-cluster-name\": \"gcp-cluster\",\n          \"goog-k8s-node-pool-name\": \"default-pool\"\n        },\n        \"machineType\": \"n2-standard-2\",\n        \"metadata\": {\n          \"fingerprint\": \"REDACTED\",\n          \"items\": [\n            {\n              \"key\": \"configure-sh\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"kubelet-config\",\n              \"value\": \"apiVersion: kubelet.config.k8s.io/v1beta1\\nauthentication:\\n  anonymous:\\n    enabled: false\\n  webhook:\\n    enabled: true\\n  x509:\\n    clientCAFile: /etc/srv/kubernetes/pki/ca-certificates.crt\\nauthorization:\\n  mode: Webhook\\ncgroupRoot: /\\nclusterDNS:\\n- 10.108.192.10\\nclusterDomain: cluster.local\\nenableDebuggingHandlers: true\\nevictionHard:\\n  memory.available: 100Mi\\n  nodefs.available: 10%\\n  nodefs.inodesFree: 5%\\n  pid.available: 10%\\nfeatureGates:\\n  CSIMigrationGCE: true\\n  ExecProbeTimeout: false\\n  InTreePluginAWSUnregister: true\\n  InTreePluginAzureDiskUnregister: true\\n  InTreePluginvSphereUnregister: true\\n  RotateKubeletServerCertificate: true\\nkernelMemcgNotification: true\\nkind: KubeletConfiguration\\nkubeReserved:\\n  cpu: 70m\\n  ephemeral-storage: 41Gi\\n  memory: 1819Mi\\nmaxParallelImagePulls: 3\\nreadOnlyPort: 10255\\nserializeImagePulls: false\\nserverTLSBootstrap: true\\nstaticPodPath: /etc/kubernetes/manifests\\n\"\n            },\n            {\n              \"key\": \"disable-legacy-endpoints\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"google-compute-enable-pcid\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"kube-labels\",\n              \"value\": \"cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd,cloud.google.com/gke-cpu-scaling-level=2,cloud.google.com/gke-logging-variant=DEFAULT,cloud.google.com/gke-max-pods-per-node=110,cloud.google.com/gke-nodepool=default-pool,cloud.google.com/gke-os-distribution=cos,cloud.google.com/gke-provisioning=standard,cloud.google.com/gke-stack-type=IPV4,cloud.google.com/machine-family=n2,cloud.google.com/private-node=false\"\n            },\n            {\n              \"key\": \"gci-metrics-enabled\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"cluster-location\",\n              \"value\": \"europe-west10-a\"\n            },\n            {\n              \"key\": \"kube-rrrr\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"kubeconfig\",\n              \"value\": \"apiVersion: v1\\nkind: Config\\nclusters:\\n- cluster:\\n    server: https://10.214.0.2\\n    certificate-authority: '/etc/srv/kubernetes/pki/ca-certificates.crt'\\n  name: default-cluster\\ncontexts:\\n- context:\\n    cluster: default-cluster\\n    namespace: default\\n    user: exec-plugin-auth\\n  name: default-context\\ncurrent-context: default-context\\nusers:\\n- name: exec-plugin-auth\\n  user:\\n    exec:\\n      apiVersion: \\\"client.authentication.k8s.io/v1beta1\\\"\\n      command: '/home/kubernetes/bin/gke-exec-auth-plugin'\\n      args: [\\\"--cache-dir\\\", '/var/lib/kubelet/pki/']\\n\"\n            },\n            {\n              \"key\": \"cluster-name\",\n              \"value\": \"gcp-cluster\"\n            },\n            {\n              \"key\": \"serial-port-logging-enable\",\n              \"value\": \"true\"\n            },\n            {\n              \"key\": \"gci-update-strategy\",\n              \"value\": \"update_disabled\"\n            },\n            {\n              \"key\": \"user-data\",\n              \"value\": \"REDACTED\"\n            },\n            {\n              \"key\": \"cluster-uid\",\n              \"value\": \"1d08860da6b04fe29851304466f250cc1da7a37bc1034b42bde224b67e87fdc8\"\n            }\n          ],\n          \"kind\": \"compute#metadata\"\n        },\n        \"networkInterfaces\": [\n          {\n            \"accessConfigs\": [\n              {\n                \"kind\": \"compute#accessConfig\",\n                \"name\": \"external-nat\",\n                \"networkTier\": \"PREMIUM\",\n                \"type\": \"ONE_TO_ONE_NAT\"\n              }\n            ],\n            \"aliasIpRanges\": [\n              {\n                \"ipCidrRange\": \"/24\",\n                \"subnetworkRangeName\": \"gke-gcp-cluster-pods-1d08860d\"\n              }\n            ],\n            \"kind\": \"compute#networkInterface\",\n            \"name\": \"nic0\",\n            \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n            \"stackType\": \"IPV4_ONLY\",\n            \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west10/subnetworks/default\"\n          }\n        ],\n        \"networkPerformanceConfig\": {\n          \"totalEgressBandwidthTier\": \"DEFAULT\"\n        },\n        \"scheduling\": {\n          \"automaticRestart\": true,\n          \"onHostMaintenance\": \"MIGRATE\",\n          \"preemptible\": false,\n          \"provisioningModel\": \"STANDARD\"\n        },\n        \"serviceAccounts\": [\n          {\n            \"email\": \"default\",\n            \"scopes\": [\n              \"https://www.googleapis.com/auth/devstorage.read_only\",\n              \"https://www.googleapis.com/auth/logging.write\",\n              \"https://www.googleapis.com/auth/monitoring\",\n              \"https://www.googleapis.com/auth/servicecontrol\",\n              \"https://www.googleapis.com/auth/service.management.readonly\",\n              \"https://www.googleapis.com/auth/trace.append\"\n            ]\n          }\n        ],\n        \"shieldedInstanceConfig\": {\n          \"enableIntegrityMonitoring\": true,\n          \"enableSecureBoot\": false,\n          \"enableVtpm\": true\n        },\n        \"tags\": {\n          \"items\": [\n            \"gke-gcp-cluster-1d08860d-node\"\n          ]\n        }\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/instanceTemplates/gke-gcp-cluster-default-pool-c7891c09\"\n    }\n  ],\n  \"kind\": \"compute#instanceTemplateList\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/instanceTemplates\"\n}\n"
  },
  {
    "path": "test-data/gke2/json-dumps/compute-zones.json",
    "content": "{\n  \"kind\": \"compute#zoneList\",\n  \"id\": \"projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones\",\n  \"items\": [\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2231\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east1-b\",\n      \"description\": \"us-east1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-east1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2233\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east1-c\",\n      \"description\": \"us-east1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-east1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2234\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east1-d\",\n      \"description\": \"us-east1-d\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-east1-d\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2272\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east4-c\",\n      \"description\": \"us-east4-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-east4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-east4-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2271\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east4-b\",\n      \"description\": \"us-east4-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-east4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-east4-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2270\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east4-a\",\n      \"description\": \"us-east4-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-east4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-east4-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2002\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1-c\",\n      \"description\": \"us-central1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-central1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2000\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1-a\",\n      \"description\": \"us-central1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-central1-a\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2004\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1-f\",\n      \"description\": \"us-central1-f\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-central1-f\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2001\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1-b\",\n      \"description\": \"us-central1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-central1-b\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2211\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west1-b\",\n      \"description\": \"us-west1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-west1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2212\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west1-c\",\n      \"description\": \"us-west1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-west1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2210\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west1-a\",\n      \"description\": \"us-west1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-west1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2342\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west4-a\",\n      \"description\": \"europe-west4-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west4-a\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2341\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west4-b\",\n      \"description\": \"europe-west4-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west4-b\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2340\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west4-c\",\n      \"description\": \"europe-west4-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west4-c\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2101\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west1-b\",\n      \"description\": \"europe-west1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2104\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west1-d\",\n      \"description\": \"europe-west1-d\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west1-d\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2103\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west1-c\",\n      \"description\": \"europe-west1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2300\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west3-c\",\n      \"description\": \"europe-west3-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west3-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2301\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west3-a\",\n      \"description\": \"europe-west3-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west3-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2302\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west3-b\",\n      \"description\": \"europe-west3-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west3-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2292\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west2-c\",\n      \"description\": \"europe-west2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2291\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west2-b\",\n      \"description\": \"europe-west2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2290\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west2-a\",\n      \"description\": \"europe-west2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2221\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east1-b\",\n      \"description\": \"asia-east1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-east1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2220\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east1-a\",\n      \"description\": \"asia-east1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-east1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2222\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east1-c\",\n      \"description\": \"asia-east1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-east1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2261\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast1-b\",\n      \"description\": \"asia-southeast1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-southeast1-b\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2260\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast1-a\",\n      \"description\": \"asia-southeast1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-southeast1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2262\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast1-c\",\n      \"description\": \"asia-southeast1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-southeast1-c\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2251\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast1-b\",\n      \"description\": \"asia-northeast1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-northeast1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2252\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast1-c\",\n      \"description\": \"asia-northeast1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-northeast1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2250\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast1-a\",\n      \"description\": \"asia-northeast1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-northeast1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2322\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south1-c\",\n      \"description\": \"asia-south1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-south1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2320\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south1-b\",\n      \"description\": \"asia-south1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-south1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2321\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south1-a\",\n      \"description\": \"asia-south1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-south1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2282\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast1-b\",\n      \"description\": \"australia-southeast1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/australia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/australia-southeast1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2280\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast1-c\",\n      \"description\": \"australia-southeast1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/australia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/australia-southeast1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2281\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast1-a\",\n      \"description\": \"australia-southeast1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/australia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/australia-southeast1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2311\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-east1-b\",\n      \"description\": \"southamerica-east1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/southamerica-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/southamerica-east1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2312\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-east1-c\",\n      \"description\": \"southamerica-east1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/southamerica-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/southamerica-east1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2310\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-east1-a\",\n      \"description\": \"southamerica-east1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/southamerica-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/southamerica-east1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2611\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"africa-south1-a\",\n      \"description\": \"africa-south1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/africa-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/africa-south1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2610\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"africa-south1-b\",\n      \"description\": \"africa-south1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/africa-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/africa-south1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2612\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"africa-south1-c\",\n      \"description\": \"africa-south1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/africa-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/africa-south1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2372\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east2-a\",\n      \"description\": \"asia-east2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-east2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-east2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2371\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east2-b\",\n      \"description\": \"asia-east2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-east2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-east2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2370\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east2-c\",\n      \"description\": \"asia-east2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-east2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-east2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2392\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast2-a\",\n      \"description\": \"asia-northeast2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-northeast2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2390\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast2-b\",\n      \"description\": \"asia-northeast2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-northeast2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2391\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast2-c\",\n      \"description\": \"asia-northeast2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-northeast2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2410\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast3-a\",\n      \"description\": \"asia-northeast3-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-northeast3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-northeast3-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2412\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast3-b\",\n      \"description\": \"asia-northeast3-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-northeast3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-northeast3-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2411\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast3-c\",\n      \"description\": \"asia-northeast3-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-northeast3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-northeast3-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2470\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south2-a\",\n      \"description\": \"asia-south2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-south2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-south2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2472\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south2-b\",\n      \"description\": \"asia-south2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-south2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-south2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2471\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south2-c\",\n      \"description\": \"asia-south2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-south2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-south2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2440\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast2-a\",\n      \"description\": \"asia-southeast2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-southeast2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2442\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast2-b\",\n      \"description\": \"asia-southeast2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-southeast2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2441\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast2-c\",\n      \"description\": \"asia-southeast2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/asia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/asia-southeast2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2480\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast2-a\",\n      \"description\": \"australia-southeast2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/australia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/australia-southeast2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2482\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast2-b\",\n      \"description\": \"australia-southeast2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/australia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/australia-southeast2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2481\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast2-c\",\n      \"description\": \"australia-southeast2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/australia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/australia-southeast2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2452\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-central2-a\",\n      \"description\": \"europe-central2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-central2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-central2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2450\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-central2-b\",\n      \"description\": \"europe-central2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-central2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-central2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2451\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-central2-c\",\n      \"description\": \"europe-central2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-central2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-central2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2352\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-north1-a\",\n      \"description\": \"europe-north1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-north1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-north1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2350\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-north1-b\",\n      \"description\": \"europe-north1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-north1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-north1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2351\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-north1-c\",\n      \"description\": \"europe-north1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-north1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-north1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2541\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-southwest1-a\",\n      \"description\": \"europe-southwest1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-southwest1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-southwest1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2540\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-southwest1-b\",\n      \"description\": \"europe-southwest1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-southwest1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-southwest1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2542\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-southwest1-c\",\n      \"description\": \"europe-southwest1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-southwest1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-southwest1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2591\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west10-a\",\n      \"description\": \"europe-west10-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west10\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2592\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west10-b\",\n      \"description\": \"europe-west10-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west10\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2590\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west10-c\",\n      \"description\": \"europe-west10-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west10\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2571\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west12-a\",\n      \"description\": \"europe-west12-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west12\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west12-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2572\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west12-b\",\n      \"description\": \"europe-west12-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west12\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west12-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2570\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west12-c\",\n      \"description\": \"europe-west12-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west12\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west12-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2382\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west6-a\",\n      \"description\": \"europe-west6-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west6\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west6-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2380\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west6-b\",\n      \"description\": \"europe-west6-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west6\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west6-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2381\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west6-c\",\n      \"description\": \"europe-west6-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west6\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west6-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2510\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west8-a\",\n      \"description\": \"europe-west8-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west8\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west8-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2511\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west8-b\",\n      \"description\": \"europe-west8-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west8\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west8-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2512\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west8-c\",\n      \"description\": \"europe-west8-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west8\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west8-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2521\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west9-a\",\n      \"description\": \"europe-west9-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west9\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west9-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2520\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west9-b\",\n      \"description\": \"europe-west9-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west9\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west9-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2522\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west9-c\",\n      \"description\": \"europe-west9-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west9\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west9-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2580\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central1-a\",\n      \"description\": \"me-central1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/me-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/me-central1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2581\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central1-b\",\n      \"description\": \"me-central1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/me-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/me-central1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2582\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central1-c\",\n      \"description\": \"me-central1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/me-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/me-central1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2601\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central2-a\",\n      \"description\": \"me-central2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/me-central2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/me-central2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2602\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central2-b\",\n      \"description\": \"me-central2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/me-central2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/me-central2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2600\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central2-c\",\n      \"description\": \"me-central2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/me-central2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/me-central2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2561\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-west1-a\",\n      \"description\": \"me-west1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/me-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/me-west1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2560\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-west1-b\",\n      \"description\": \"me-west1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/me-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/me-west1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2562\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-west1-c\",\n      \"description\": \"me-west1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/me-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/me-west1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2330\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast1-a\",\n      \"description\": \"northamerica-northeast1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/northamerica-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/northamerica-northeast1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2331\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast1-b\",\n      \"description\": \"northamerica-northeast1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/northamerica-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/northamerica-northeast1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2332\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast1-c\",\n      \"description\": \"northamerica-northeast1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/northamerica-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/northamerica-northeast1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2461\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast2-a\",\n      \"description\": \"northamerica-northeast2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/northamerica-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/northamerica-northeast2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2460\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast2-b\",\n      \"description\": \"northamerica-northeast2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/northamerica-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/northamerica-northeast2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2462\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast2-c\",\n      \"description\": \"northamerica-northeast2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/northamerica-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/northamerica-northeast2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2490\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-west1-a\",\n      \"description\": \"southamerica-west1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/southamerica-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/southamerica-west1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ivy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2491\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-west1-b\",\n      \"description\": \"southamerica-west1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/southamerica-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/southamerica-west1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2492\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-west1-c\",\n      \"description\": \"southamerica-west1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/southamerica-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/southamerica-west1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2532\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east5-a\",\n      \"description\": \"us-east5-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-east5\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-east5-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2531\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east5-b\",\n      \"description\": \"us-east5-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-east5\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-east5-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2530\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east5-c\",\n      \"description\": \"us-east5-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-east5\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-east5-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2551\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-south1-a\",\n      \"description\": \"us-south1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-south1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2552\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-south1-b\",\n      \"description\": \"us-south1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-south1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2550\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-south1-c\",\n      \"description\": \"us-south1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-south1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2362\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west2-a\",\n      \"description\": \"us-west2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-west2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2361\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west2-b\",\n      \"description\": \"us-west2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-west2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2360\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west2-c\",\n      \"description\": \"us-west2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-west2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2420\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west3-a\",\n      \"description\": \"us-west3-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-west3-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2421\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west3-b\",\n      \"description\": \"us-west3-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-west3-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2422\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west3-c\",\n      \"description\": \"us-west3-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-west3-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2431\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west4-a\",\n      \"description\": \"us-west4-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-west4-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2432\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west4-b\",\n      \"description\": \"us-west4-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-west4-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2430\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west4-c\",\n      \"description\": \"us-west4-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/us-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/us-west4-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones\"\n}\n"
  },
  {
    "path": "test-data/gke2/json-dumps/container-clusters.json",
    "content": "{\n  \"clusters\": [\n    {\n      \"addonsConfig\": {\n        \"dnsCacheConfig\": {},\n        \"gcePersistentDiskCsiDriverConfig\": {\n          \"enabled\": true\n        },\n        \"gcsFuseCsiDriverConfig\": {},\n        \"horizontalPodAutoscaling\": {},\n        \"httpLoadBalancing\": {},\n        \"kubernetesDashboard\": {\n          \"disabled\": true\n        },\n        \"networkPolicyConfig\": {\n          \"disabled\": true\n        }\n      },\n      \"authenticatorGroupsConfig\": {},\n      \"autopilot\": {},\n      \"autoscaling\": {\n        \"autoscalingProfile\": \"BALANCED\"\n      },\n      \"binaryAuthorization\": {\n        \"evaluationMode\": \"DISABLED\"\n      },\n      \"clusterIpv4Cidr\": \"10.40.0.0/14\",\n      \"createTime\": \"2024-04-09T11:03:09+00:00\",\n      \"currentMasterVersion\": \"1.27.8-gke.1067004\",\n      \"currentNodeCount\": 3,\n      \"currentNodeVersion\": \"1.27.8-gke.1067004\",\n      \"databaseEncryption\": {\n        \"state\": \"DECRYPTED\"\n      },\n      \"defaultMaxPodsConstraint\": {\n        \"maxPodsPerNode\": \"110\"\n      },\n      \"endpoint\": \"192.168.1.1\",\n      \"enterpriseConfig\": {\n        \"clusterTier\": \"STANDARD\"\n      },\n      \"etag\": \"7fbb04ca-73b8-4f61-96e3-eb0afc4bb00f\",\n      \"id\": \"1d08860da6b04fe29851304466f250cc1da7a37bc1034b42bde224b67e87fdc8\",\n      \"initialClusterVersion\": \"1.27.8-gke.1067004\",\n      \"instanceGroupUrls\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/instanceGroupManagers/gke-gcp-cluster-default-pool-c7891c09-grp\"\n      ],\n      \"ipAllocationPolicy\": {\n        \"clusterIpv4Cidr\": \"10.40.0.0/14\",\n        \"clusterIpv4CidrBlock\": \"10.40.0.0/14\",\n        \"clusterSecondaryRangeName\": \"gke-gcp-cluster-pods-1d08860d\",\n        \"defaultPodIpv4RangeUtilization\": 0.0029,\n        \"podCidrOverprovisionConfig\": {},\n        \"servicesIpv4Cidr\": \"10.108.192.0/20\",\n        \"servicesIpv4CidrBlock\": \"10.108.192.0/20\",\n        \"servicesSecondaryRangeName\": \"gke-gcp-cluster-services-1d08860d\",\n        \"stackType\": \"IPV4\",\n        \"useIpAliases\": true\n      },\n      \"labelFingerprint\": \"a9dc16a7\",\n      \"legacyAbac\": {},\n      \"location\": \"europe-west10-a\",\n      \"locations\": [\n        \"europe-west10-a\"\n      ],\n      \"loggingConfig\": {\n        \"componentConfig\": {\n          \"enableComponents\": [\n            \"APISERVER\",\n            \"CONTROLLER_MANAGER\",\n            \"SCHEDULER\",\n            \"SYSTEM_COMPONENTS\",\n            \"WORKLOADS\"\n          ]\n        }\n      },\n      \"loggingService\": \"logging.googleapis.com/kubernetes\",\n      \"maintenancePolicy\": {\n        \"resourceVersion\": \"e3b0c442\"\n      },\n      \"masterAuth\": {\n        \"clusterCaCertificate\": \"REDACTED\"\n      },\n      \"masterAuthorizedNetworksConfig\": {\n        \"gcpPublicCidrsAccessEnabled\": true\n      },\n      \"monitoringConfig\": {\n        \"advancedDatapathObservabilityConfig\": {},\n        \"componentConfig\": {\n          \"enableComponents\": [\n            \"SYSTEM_COMPONENTS\"\n          ]\n        },\n        \"managedPrometheusConfig\": {\n          \"enabled\": true\n        }\n      },\n      \"monitoringService\": \"monitoring.googleapis.com/kubernetes\",\n      \"name\": \"gcp-cluster\",\n      \"network\": \"default\",\n      \"networkConfig\": {\n        \"datapathProvider\": \"LEGACY_DATAPATH\",\n        \"defaultSnatStatus\": {},\n        \"network\": \"projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n        \"serviceExternalIpsConfig\": {},\n        \"subnetwork\": \"projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west10/subnetworks/default\"\n      },\n      \"nodeConfig\": {\n        \"diskSizeGb\": 100,\n        \"diskType\": \"pd-balanced\",\n        \"imageType\": \"COS_CONTAINERD\",\n        \"machineType\": \"n2-standard-2\",\n        \"metadata\": {\n          \"disable-legacy-endpoints\": \"true\"\n        },\n        \"oauthScopes\": [\n          \"https://www.googleapis.com/auth/devstorage.read_only\",\n          \"https://www.googleapis.com/auth/logging.write\",\n          \"https://www.googleapis.com/auth/monitoring\",\n          \"https://www.googleapis.com/auth/servicecontrol\",\n          \"https://www.googleapis.com/auth/service.management.readonly\",\n          \"https://www.googleapis.com/auth/trace.append\"\n        ],\n        \"serviceAccount\": \"default\",\n        \"shieldedInstanceConfig\": {\n          \"enableIntegrityMonitoring\": true\n        },\n        \"windowsNodeConfig\": {}\n      },\n      \"nodePoolDefaults\": {\n        \"nodeConfigDefaults\": {\n          \"loggingConfig\": {\n            \"variantConfig\": {\n              \"variant\": \"DEFAULT\"\n            }\n          }\n        }\n      },\n      \"nodePools\": [\n        {\n          \"autoscaling\": {\n            \"enabled\": true,\n            \"locationPolicy\": \"BALANCED\",\n            \"maxNodeCount\": 100,\n            \"minNodeCount\": 3\n          },\n          \"config\": {\n            \"diskSizeGb\": 100,\n            \"diskType\": \"pd-balanced\",\n            \"imageType\": \"COS_CONTAINERD\",\n            \"machineType\": \"n2-standard-2\",\n            \"metadata\": {\n              \"disable-legacy-endpoints\": \"true\"\n            },\n            \"oauthScopes\": [\n              \"https://www.googleapis.com/auth/devstorage.read_only\",\n              \"https://www.googleapis.com/auth/logging.write\",\n              \"https://www.googleapis.com/auth/monitoring\",\n              \"https://www.googleapis.com/auth/servicecontrol\",\n              \"https://www.googleapis.com/auth/service.management.readonly\",\n              \"https://www.googleapis.com/auth/trace.append\"\n            ],\n            \"serviceAccount\": \"default\",\n            \"shieldedInstanceConfig\": {\n              \"enableIntegrityMonitoring\": true\n            },\n            \"windowsNodeConfig\": {}\n          },\n          \"etag\": \"b3894954-021a-4318-87bb-042b3518be33\",\n          \"initialNodeCount\": 1,\n          \"instanceGroupUrls\": [\n            \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/instanceGroupManagers/gke-gcp-cluster-default-pool-c7891c09-grp\"\n          ],\n          \"locations\": [\n            \"europe-west10-a\"\n          ],\n          \"management\": {\n            \"autoRepair\": true,\n            \"autoUpgrade\": true\n          },\n          \"maxPodsConstraint\": {\n            \"maxPodsPerNode\": \"110\"\n          },\n          \"name\": \"default-pool\",\n          \"networkConfig\": {\n            \"enablePrivateNodes\": false,\n            \"podIpv4CidrBlock\": \"10.40.0.0/14\",\n            \"podIpv4RangeUtilization\": 0.0029,\n            \"podRange\": \"gke-gcp-cluster-pods-1d08860d\"\n          },\n          \"podIpv4CidrSize\": 24,\n          \"queuedProvisioning\": {},\n          \"selfLink\": \"https://container.googleapis.com/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/clusters/gcp-cluster/nodePools/default-pool\",\n          \"status\": \"RUNNING\",\n          \"upgradeSettings\": {\n            \"maxSurge\": 1,\n            \"strategy\": \"SURGE\"\n          },\n          \"version\": \"1.27.8-gke.1067004\"\n        }\n      ],\n      \"notificationConfig\": {\n        \"pubsub\": {}\n      },\n      \"privateClusterConfig\": {\n        \"privateEndpoint\": \"10.214.0.2\",\n        \"publicEndpoint\": \"34.32.43.168\"\n      },\n      \"releaseChannel\": {\n        \"channel\": \"REGULAR\"\n      },\n      \"securityPostureConfig\": {\n        \"mode\": \"BASIC\",\n        \"vulnerabilityMode\": \"VULNERABILITY_DISABLED\"\n      },\n      \"selfLink\": \"https://container.googleapis.com/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/clusters/gcp-cluster\",\n      \"servicesIpv4Cidr\": \"10.108.192.0/20\",\n      \"shieldedNodes\": {\n        \"enabled\": true\n      },\n      \"status\": \"RUNNING\",\n      \"subnetwork\": \"default\",\n      \"zone\": \"europe-west10-a\"\n    },\n    {\n      \"addonsConfig\": {\n        \"dnsCacheConfig\": {},\n        \"gcePersistentDiskCsiDriverConfig\": {\n          \"enabled\": true\n        },\n        \"gcsFuseCsiDriverConfig\": {},\n        \"horizontalPodAutoscaling\": {},\n        \"httpLoadBalancing\": {},\n        \"kubernetesDashboard\": {\n          \"disabled\": true\n        },\n        \"networkPolicyConfig\": {\n          \"disabled\": true\n        }\n      },\n      \"authenticatorGroupsConfig\": {},\n      \"autopilot\": {},\n      \"autoscaling\": {\n        \"autoscalingProfile\": \"BALANCED\"\n      },\n      \"binaryAuthorization\": {\n        \"evaluationMode\": \"DISABLED\"\n      },\n      \"clusterIpv4Cidr\": \"10.100.0.0/14\",\n      \"createTime\": \"2024-04-09T12:07:08+00:00\",\n      \"currentMasterVersion\": \"1.27.8-gke.1067004\",\n      \"currentNodeCount\": 3,\n      \"currentNodeVersion\": \"1.27.8-gke.1067004\",\n      \"databaseEncryption\": {\n        \"state\": \"DECRYPTED\"\n      },\n      \"defaultMaxPodsConstraint\": {\n        \"maxPodsPerNode\": \"110\"\n      },\n      \"endpoint\": \"192.168.1.1\",\n      \"enterpriseConfig\": {\n        \"clusterTier\": \"STANDARD\"\n      },\n      \"etag\": \"a02a32a5-a762-4c32-87fd-e00ae08751d3\",\n      \"id\": \"714df7d8dc294225a17ea008c20ab288ee3e6b41b24c4527b8d418cb1a8cf3c4\",\n      \"initialClusterVersion\": \"1.27.8-gke.1067004\",\n      \"instanceGroupUrls\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/instanceGroupManagers/gke-gcp-cluster-default-pool-82e0c046-grp\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-c/instanceGroupManagers/gke-gcp-cluster-default-pool-a66c21d9-grp\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-b/instanceGroupManagers/gke-gcp-cluster-default-pool-2b1e5c3e-grp\"\n      ],\n      \"ipAllocationPolicy\": {\n        \"clusterIpv4Cidr\": \"10.100.0.0/14\",\n        \"clusterIpv4CidrBlock\": \"10.100.0.0/14\",\n        \"clusterSecondaryRangeName\": \"gke-gcp-cluster-pods-714df7d8\",\n        \"defaultPodIpv4RangeUtilization\": 0.0029,\n        \"podCidrOverprovisionConfig\": {},\n        \"servicesIpv4Cidr\": \"10.110.80.0/20\",\n        \"servicesIpv4CidrBlock\": \"10.110.80.0/20\",\n        \"servicesSecondaryRangeName\": \"gke-gcp-cluster-services-714df7d8\",\n        \"stackType\": \"IPV4\",\n        \"useIpAliases\": true\n      },\n      \"labelFingerprint\": \"a9dc16a7\",\n      \"legacyAbac\": {},\n      \"location\": \"europe-west10\",\n      \"locations\": [\n        \"europe-west10-a\",\n        \"europe-west10-c\",\n        \"europe-west10-b\"\n      ],\n      \"loggingConfig\": {\n        \"componentConfig\": {\n          \"enableComponents\": [\n            \"APISERVER\",\n            \"CONTROLLER_MANAGER\",\n            \"SCHEDULER\",\n            \"SYSTEM_COMPONENTS\",\n            \"WORKLOADS\"\n          ]\n        }\n      },\n      \"loggingService\": \"logging.googleapis.com/kubernetes\",\n      \"maintenancePolicy\": {\n        \"resourceVersion\": \"e3b0c442\"\n      },\n      \"masterAuth\": {\n        \"clusterCaCertificate\": \"REDACTED\"\n      },\n      \"masterAuthorizedNetworksConfig\": {\n        \"gcpPublicCidrsAccessEnabled\": true\n      },\n      \"monitoringConfig\": {\n        \"advancedDatapathObservabilityConfig\": {},\n        \"componentConfig\": {\n          \"enableComponents\": [\n            \"SYSTEM_COMPONENTS\"\n          ]\n        },\n        \"managedPrometheusConfig\": {\n          \"enabled\": true\n        }\n      },\n      \"monitoringService\": \"monitoring.googleapis.com/kubernetes\",\n      \"name\": \"gcp-cluster\",\n      \"network\": \"default\",\n      \"networkConfig\": {\n        \"datapathProvider\": \"LEGACY_DATAPATH\",\n        \"defaultSnatStatus\": {},\n        \"network\": \"projects/gcpdiag-gke-cluster-autoscaler-rrrr/global/networks/default\",\n        \"serviceExternalIpsConfig\": {},\n        \"subnetwork\": \"projects/gcpdiag-gke-cluster-autoscaler-rrrr/regions/europe-west10/subnetworks/default\"\n      },\n      \"nodeConfig\": {\n        \"diskSizeGb\": 100,\n        \"diskType\": \"pd-balanced\",\n        \"imageType\": \"COS_CONTAINERD\",\n        \"machineType\": \"e2-medium\",\n        \"metadata\": {\n          \"disable-legacy-endpoints\": \"true\"\n        },\n        \"oauthScopes\": [\n          \"https://www.googleapis.com/auth/devstorage.read_only\",\n          \"https://www.googleapis.com/auth/logging.write\",\n          \"https://www.googleapis.com/auth/monitoring\",\n          \"https://www.googleapis.com/auth/servicecontrol\",\n          \"https://www.googleapis.com/auth/service.management.readonly\",\n          \"https://www.googleapis.com/auth/trace.append\"\n        ],\n        \"serviceAccount\": \"default\",\n        \"shieldedInstanceConfig\": {\n          \"enableIntegrityMonitoring\": true\n        },\n        \"windowsNodeConfig\": {}\n      },\n      \"nodePoolDefaults\": {\n        \"nodeConfigDefaults\": {\n          \"loggingConfig\": {\n            \"variantConfig\": {\n              \"variant\": \"DEFAULT\"\n            }\n          }\n        }\n      },\n      \"nodePools\": [\n        {\n          \"autoscaling\": {},\n          \"config\": {\n            \"diskSizeGb\": 100,\n            \"diskType\": \"pd-balanced\",\n            \"imageType\": \"COS_CONTAINERD\",\n            \"machineType\": \"e2-medium\",\n            \"metadata\": {\n              \"disable-legacy-endpoints\": \"true\"\n            },\n            \"oauthScopes\": [\n              \"https://www.googleapis.com/auth/devstorage.read_only\",\n              \"https://www.googleapis.com/auth/logging.write\",\n              \"https://www.googleapis.com/auth/monitoring\",\n              \"https://www.googleapis.com/auth/servicecontrol\",\n              \"https://www.googleapis.com/auth/service.management.readonly\",\n              \"https://www.googleapis.com/auth/trace.append\"\n            ],\n            \"serviceAccount\": \"default\",\n            \"shieldedInstanceConfig\": {\n              \"enableIntegrityMonitoring\": true\n            },\n            \"windowsNodeConfig\": {}\n          },\n          \"etag\": \"eecf33ae-1417-4032-9f42-e756e450361f\",\n          \"initialNodeCount\": 1,\n          \"instanceGroupUrls\": [\n            \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-a/instanceGroupManagers/gke-gcp-cluster-default-pool-82e0c046-grp\",\n            \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-c/instanceGroupManagers/gke-gcp-cluster-default-pool-a66c21d9-grp\",\n            \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/zones/europe-west10-b/instanceGroupManagers/gke-gcp-cluster-default-pool-2b1e5c3e-grp\"\n          ],\n          \"locations\": [\n            \"europe-west10-a\",\n            \"europe-west10-c\",\n            \"europe-west10-b\"\n          ],\n          \"management\": {\n            \"autoRepair\": true,\n            \"autoUpgrade\": true\n          },\n          \"maxPodsConstraint\": {\n            \"maxPodsPerNode\": \"110\"\n          },\n          \"name\": \"default-pool\",\n          \"networkConfig\": {\n            \"enablePrivateNodes\": false,\n            \"podIpv4CidrBlock\": \"10.100.0.0/14\",\n            \"podIpv4RangeUtilization\": 0.0029,\n            \"podRange\": \"gke-gcp-cluster-pods-714df7d8\"\n          },\n          \"podIpv4CidrSize\": 24,\n          \"queuedProvisioning\": {},\n          \"selfLink\": \"https://container.googleapis.com/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/locations/europe-west10/clusters/gcp-cluster/nodePools/default-pool\",\n          \"status\": \"RUNNING\",\n          \"upgradeSettings\": {\n            \"maxSurge\": 1,\n            \"strategy\": \"SURGE\"\n          },\n          \"version\": \"1.27.8-gke.1067004\"\n        }\n      ],\n      \"notificationConfig\": {\n        \"pubsub\": {}\n      },\n      \"privateClusterConfig\": {\n        \"privateEndpoint\": \"10.214.0.8\",\n        \"publicEndpoint\": \"34.32.54.186\"\n      },\n      \"releaseChannel\": {\n        \"channel\": \"REGULAR\"\n      },\n      \"securityPostureConfig\": {\n        \"mode\": \"BASIC\",\n        \"vulnerabilityMode\": \"VULNERABILITY_DISABLED\"\n      },\n      \"selfLink\": \"https://container.googleapis.com/v1/projects/gcpdiag-gke-cluster-autoscaler-rrrr/locations/europe-west10/clusters/gcp-cluster\",\n      \"servicesIpv4Cidr\": \"10.110.80.0/20\",\n      \"shieldedNodes\": {\n        \"enabled\": true\n      },\n      \"status\": \"RUNNING\",\n      \"subnetwork\": \"default\",\n      \"zone\": \"europe-west10\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gke2/json-dumps/container-server-config-europe-west10-a.json",
    "content": "{\n  \"defaultClusterVersion\": \"1.27.8-gke.1067004\",\n  \"validNodeVersions\": [\n    \"1.29.3-gke.1093000\",\n    \"1.29.2-gke.1521000\",\n    \"1.29.2-gke.1217000\",\n    \"1.29.2-gke.1060000\",\n    \"1.29.1-gke.1589018\",\n    \"1.29.1-gke.1589017\",\n    \"1.29.1-gke.1589000\",\n    \"1.29.1-gke.1575000\",\n    \"1.29.1-gke.1425000\",\n    \"1.29.1-gke.1016000\",\n    \"1.29.0-gke.1381000\",\n    \"1.28.8-gke.1095000\",\n    \"1.28.7-gke.1226000\",\n    \"1.28.7-gke.1026000\",\n    \"1.28.6-gke.1456000\",\n    \"1.28.6-gke.1369000\",\n    \"1.28.6-gke.1289000\",\n    \"1.28.6-gke.1095000\",\n    \"1.28.5-gke.1217000\",\n    \"1.28.4-gke.1083000\",\n    \"1.28.3-gke.1286000\",\n    \"1.28.3-gke.1203001\",\n    \"1.28.3-gke.1203000\",\n    \"1.28.3-gke.1118000\",\n    \"1.28.3-gke.1098000\",\n    \"1.28.3-gke.1090000\",\n    \"1.28.2-gke.1157000\",\n    \"1.27.12-gke.1115000\",\n    \"1.27.11-gke.1202000\",\n    \"1.27.11-gke.1118000\",\n    \"1.27.11-gke.1062000\",\n    \"1.27.11-gke.1018000\",\n    \"1.27.10-gke.1207000\",\n    \"1.27.10-gke.1152000\",\n    \"1.27.10-gke.1055000\",\n    \"1.27.9-gke.1092000\",\n    \"1.27.8-gke.1067004\",\n    \"1.27.8-gke.1067000\",\n    \"1.27.7-gke.1293000\",\n    \"1.27.7-gke.1121002\",\n    \"1.27.7-gke.1121000\",\n    \"1.27.7-gke.1088000\",\n    \"1.27.7-gke.1056000\",\n    \"1.27.7-gke.1038000\",\n    \"1.27.6-gke.1506000\",\n    \"1.27.6-gke.1445000\",\n    \"1.27.6-gke.1248000\",\n    \"1.27.5-gke.200\",\n    \"1.27.4-gke.900\",\n    \"1.27.3-gke.1700\",\n    \"1.27.3-gke.100\",\n    \"1.27.2-gke.2100\",\n    \"1.27.2-gke.1200\",\n    \"1.26.15-gke.1090000\",\n    \"1.26.14-gke.1133000\",\n    \"1.26.14-gke.1076000\",\n    \"1.26.14-gke.1044000\",\n    \"1.26.14-gke.1006000\",\n    \"1.26.13-gke.1189000\",\n    \"1.26.13-gke.1144000\",\n    \"1.26.13-gke.1052000\",\n    \"1.26.12-gke.1111000\",\n    \"1.26.11-gke.1055000\",\n    \"1.26.10-gke.1235000\",\n    \"1.26.10-gke.1101000\",\n    \"1.26.10-gke.1073000\",\n    \"1.26.10-gke.1038000\",\n    \"1.26.10-gke.1024000\",\n    \"1.26.9-gke.1507000\",\n    \"1.26.9-gke.1437000\",\n    \"1.26.8-gke.200\",\n    \"1.26.7-gke.500\",\n    \"1.26.6-gke.1700\",\n    \"1.26.5-gke.2700\",\n    \"1.26.5-gke.2100\",\n    \"1.26.5-gke.1400\",\n    \"1.26.5-gke.1200\",\n    \"1.26.4-gke.1400\",\n    \"1.26.4-gke.500\",\n    \"1.26.3-gke.1000\",\n    \"1.26.3-gke.400\",\n    \"1.26.2-gke.1000\",\n    \"1.26.1-gke.1500\",\n    \"1.25.16-gke.1711000\",\n    \"1.25.16-gke.1648000\",\n    \"1.25.16-gke.1596000\",\n    \"1.25.16-gke.1570000\",\n    \"1.25.16-gke.1537000\",\n    \"1.25.16-gke.1497000\",\n    \"1.25.16-gke.1460000\",\n    \"1.25.16-gke.1360000\",\n    \"1.25.16-gke.1268000\",\n    \"1.25.16-gke.1041000\",\n    \"1.25.16-gke.1020000\",\n    \"1.25.15-gke.1115000\",\n    \"1.25.15-gke.1083000\",\n    \"1.25.15-gke.1049000\",\n    \"1.25.15-gke.1033000\",\n    \"1.25.14-gke.1474000\",\n    \"1.25.14-gke.1421000\",\n    \"1.25.13-gke.200\",\n    \"1.25.12-gke.500\",\n    \"1.25.11-gke.1700\",\n    \"1.25.10-gke.2700\",\n    \"1.25.10-gke.2100\",\n    \"1.25.10-gke.1400\",\n    \"1.25.10-gke.1200\",\n    \"1.25.9-gke.2300\",\n    \"1.25.9-gke.400\",\n    \"1.25.8-gke.1000\",\n    \"1.25.8-gke.500\",\n    \"1.25.7-gke.1000\",\n    \"1.25.6-gke.1000\",\n    \"1.25.6-gke.200\",\n    \"1.25.5-gke.2000\",\n    \"1.25.5-gke.1500\",\n    \"1.25.4-gke.2100\",\n    \"1.25.3-gke.800\",\n    \"1.24.17-gke.2472000\",\n    \"1.24.17-gke.2364000\",\n    \"1.24.17-gke.2347000\",\n    \"1.24.17-gke.2266000\",\n    \"1.24.17-gke.2230000\",\n    \"1.24.17-gke.2211000\",\n    \"1.24.17-gke.2198000\",\n    \"1.24.17-gke.2155000\",\n    \"1.24.17-gke.2113000\",\n    \"1.24.17-gke.200\",\n    \"1.24.16-gke.500\",\n    \"1.24.15-gke.1700\",\n    \"1.24.14-gke.2700\",\n    \"1.24.14-gke.2100\",\n    \"1.24.14-gke.1400\",\n    \"1.24.14-gke.1200\",\n    \"1.24.13-gke.2500\",\n    \"1.24.13-gke.500\",\n    \"1.24.12-gke.1000\",\n    \"1.24.12-gke.500\",\n    \"1.24.11-gke.1000\",\n    \"1.24.10-gke.2300\",\n    \"1.24.10-gke.1200\",\n    \"1.24.9-gke.3200\",\n    \"1.24.9-gke.2000\",\n    \"1.24.9-gke.1500\",\n    \"1.24.8-gke.2000\",\n    \"1.24.8-gke.401\",\n    \"1.24.7-gke.900\",\n    \"1.24.6-gke.1500\",\n    \"1.24.5-gke.600\",\n    \"1.24.4-gke.800\",\n    \"1.24.3-gke.2100\",\n    \"1.24.3-gke.900\",\n    \"1.24.3-gke.200\",\n    \"1.24.2-gke.1900\",\n    \"1.24.2-gke.300\",\n    \"1.24.1-gke.1800\",\n    \"1.24.1-gke.1400\",\n    \"1.23.17-gke.10700\",\n    \"1.23.17-gke.10000\",\n    \"1.23.17-gke.8400\",\n    \"1.23.17-gke.7700\",\n    \"1.23.17-gke.7000\",\n    \"1.23.17-gke.6800\",\n    \"1.23.17-gke.5600\",\n    \"1.23.17-gke.3600\",\n    \"1.23.17-gke.2000\",\n    \"1.23.17-gke.1700\",\n    \"1.23.17-gke.300\",\n    \"1.23.16-gke.2500\",\n    \"1.23.16-gke.1400\",\n    \"1.23.16-gke.1100\",\n    \"1.23.16-gke.200\",\n    \"1.23.15-gke.1900\",\n    \"1.23.15-gke.1400\",\n    \"1.23.14-gke.1800\",\n    \"1.23.14-gke.401\",\n    \"1.23.13-gke.900\",\n    \"1.23.12-gke.1600\",\n    \"1.23.12-gke.100\",\n    \"1.23.11-gke.300\",\n    \"1.23.10-gke.1000\",\n    \"1.23.9-gke.2100\",\n    \"1.23.9-gke.900\",\n    \"1.23.8-gke.1900\",\n    \"1.23.8-gke.400\",\n    \"1.23.7-gke.1400\",\n    \"1.23.6-gke.2200\",\n    \"1.23.6-gke.1700\",\n    \"1.23.6-gke.1501\",\n    \"1.23.6-gke.1500\",\n    \"1.23.5-gke.2400\",\n    \"1.23.5-gke.1503\",\n    \"1.23.5-gke.1501\",\n    \"1.22.17-gke.14100\",\n    \"1.22.17-gke.13400\",\n    \"1.22.17-gke.12700\",\n    \"1.22.17-gke.11400\",\n    \"1.22.17-gke.9400\",\n    \"1.22.17-gke.8000\",\n    \"1.22.17-gke.7500\",\n    \"1.22.17-gke.6100\",\n    \"1.22.17-gke.5400\",\n    \"1.22.17-gke.4300\",\n    \"1.22.17-gke.4000\",\n    \"1.22.17-gke.3100\",\n    \"1.22.17-gke.1900\",\n    \"1.22.17-gke.1400\",\n    \"1.22.16-gke.2000\",\n    \"1.22.16-gke.1300\",\n    \"1.22.15-gke.2500\",\n    \"1.22.15-gke.1000\",\n    \"1.22.15-gke.100\",\n    \"1.22.14-gke.300\",\n    \"1.22.13-gke.1000\",\n    \"1.22.12-gke.2300\",\n    \"1.22.12-gke.1200\",\n    \"1.22.12-gke.500\",\n    \"1.22.12-gke.300\",\n    \"1.22.11-gke.400\",\n    \"1.22.10-gke.600\",\n    \"1.22.9-gke.2000\",\n    \"1.22.9-gke.1500\",\n    \"1.22.9-gke.1300\",\n    \"1.22.8-gke.2200\",\n    \"1.22.8-gke.202\",\n    \"1.22.8-gke.201\",\n    \"1.22.8-gke.200\",\n    \"1.22.7-gke.1500\",\n    \"1.22.7-gke.1300\",\n    \"1.22.7-gke.900\",\n    \"1.22.7-gke.300\",\n    \"1.22.6-gke.1000\",\n    \"1.22.6-gke.300\",\n    \"1.22.4-gke.1501\",\n    \"1.22.3-gke.1500\",\n    \"1.21.14-gke.18800\",\n    \"1.21.14-gke.18100\",\n    \"1.21.14-gke.15800\",\n    \"1.21.14-gke.14600\",\n    \"1.21.14-gke.14100\",\n    \"1.21.14-gke.8500\",\n    \"1.21.14-gke.7100\",\n    \"1.21.14-gke.5300\",\n    \"1.21.14-gke.4300\",\n    \"1.21.14-gke.3000\",\n    \"1.21.14-gke.2700\",\n    \"1.21.14-gke.2100\",\n    \"1.21.14-gke.700\",\n    \"1.21.13-gke.900\",\n    \"1.21.12-gke.2200\",\n    \"1.21.12-gke.1700\",\n    \"1.21.12-gke.1500\",\n    \"1.21.11-gke.1900\",\n    \"1.21.11-gke.1100\",\n    \"1.21.11-gke.900\",\n    \"1.21.10-gke.2000\",\n    \"1.21.10-gke.1500\",\n    \"1.21.10-gke.1300\",\n    \"1.21.10-gke.400\",\n    \"1.21.9-gke.1002\",\n    \"1.21.9-gke.1001\",\n    \"1.21.9-gke.1000\",\n    \"1.21.9-gke.300\",\n    \"1.21.6-gke.1503\",\n    \"1.21.6-gke.1501\",\n    \"1.21.6-gke.1500\",\n    \"1.21.5-gke.1805\",\n    \"1.21.5-gke.1802\",\n    \"1.21.5-gke.1302\",\n    \"1.21.5-gke.1300\",\n    \"1.21.4-gke.2302\",\n    \"1.21.4-gke.2300\",\n    \"1.21.3-gke.2003\",\n    \"1.21.3-gke.2001\",\n    \"1.20.15-gke.13700\",\n    \"1.20.15-gke.13400\",\n    \"1.20.15-gke.12800\",\n    \"1.20.15-gke.11400\",\n    \"1.20.15-gke.9900\",\n    \"1.20.15-gke.8700\",\n    \"1.20.15-gke.8200\",\n    \"1.20.15-gke.8000\",\n    \"1.20.15-gke.6000\",\n    \"1.20.15-gke.5200\",\n    \"1.20.15-gke.5000\",\n    \"1.20.15-gke.4100\",\n    \"1.20.15-gke.3600\",\n    \"1.20.15-gke.3400\",\n    \"1.20.15-gke.2500\",\n    \"1.20.15-gke.1000\",\n    \"1.20.15-gke.300\",\n    \"1.20.12-gke.1500\",\n    \"1.20.11-gke.1801\",\n    \"1.20.11-gke.1300\",\n    \"1.20.10-gke.2100\",\n    \"1.20.10-gke.1600\",\n    \"1.20.10-gke.301\",\n    \"1.20.9-gke.2100\",\n    \"1.20.9-gke.1001\",\n    \"1.20.9-gke.1000\",\n    \"1.20.9-gke.701\",\n    \"1.20.9-gke.700\",\n    \"1.20.8-gke.2101\",\n    \"1.20.8-gke.2100\",\n    \"1.20.8-gke.900\",\n    \"1.20.8-gke.700\",\n    \"1.20.7-gke.2200\",\n    \"1.20.7-gke.1800\",\n    \"1.20.6-gke.1400\",\n    \"1.20.6-gke.1000\",\n    \"1.19.16-gke.15700\",\n    \"1.19.16-gke.14500\",\n    \"1.19.16-gke.14000\",\n    \"1.19.16-gke.13800\",\n    \"1.19.16-gke.11800\",\n    \"1.19.16-gke.11000\",\n    \"1.19.16-gke.10800\",\n    \"1.19.16-gke.9900\",\n    \"1.19.16-gke.9400\",\n    \"1.19.16-gke.9200\",\n    \"1.19.16-gke.8300\",\n    \"1.19.16-gke.6800\",\n    \"1.19.16-gke.6100\",\n    \"1.19.16-gke.3600\",\n    \"1.19.15-gke.1801\",\n    \"1.19.15-gke.1300\",\n    \"1.19.15-gke.500\",\n    \"1.19.14-gke.2300\",\n    \"1.19.14-gke.1900\",\n    \"1.19.14-gke.301\",\n    \"1.19.14-gke.300\",\n    \"1.19.13-gke.1900\",\n    \"1.19.13-gke.1200\",\n    \"1.19.13-gke.701\",\n    \"1.19.13-gke.700\",\n    \"1.19.12-gke.2101\",\n    \"1.19.12-gke.2100\",\n    \"1.19.12-gke.1100\",\n    \"1.19.12-gke.900\",\n    \"1.19.12-gke.700\",\n    \"1.19.11-gke.2101\",\n    \"1.19.11-gke.2100\",\n    \"1.19.11-gke.1701\",\n    \"1.19.11-gke.1700\",\n    \"1.19.10-gke.1701\",\n    \"1.19.10-gke.1700\",\n    \"1.19.10-gke.1601\",\n    \"1.19.10-gke.1600\",\n    \"1.19.10-gke.1001\",\n    \"1.19.10-gke.1000\",\n    \"1.19.9-gke.1900\",\n    \"1.19.9-gke.1400\",\n    \"1.19.9-gke.700\",\n    \"1.19.9-gke.100\",\n    \"1.19.8-gke.2000\",\n    \"1.19.8-gke.1600\",\n    \"1.19.8-gke.1000\",\n    \"1.19.7-gke.2503\",\n    \"1.19.7-gke.1500\",\n    \"1.19.7-gke.1302\",\n    \"1.19.7-gke.800\",\n    \"1.19.6-gke.1700\",\n    \"1.19.6-gke.1100\",\n    \"1.19.6-gke.600\",\n    \"1.18.20-gke.6101\",\n    \"1.18.20-gke.6000\",\n    \"1.18.20-gke.4501\",\n    \"1.18.20-gke.4500\",\n    \"1.18.20-gke.4100\",\n    \"1.18.20-gke.3300\",\n    \"1.18.20-gke.3001\",\n    \"1.18.20-gke.3000\",\n    \"1.18.20-gke.2300\",\n    \"1.18.20-gke.901\",\n    \"1.18.20-gke.900\",\n    \"1.18.20-gke.501\",\n    \"1.18.19-gke.2101\",\n    \"1.18.19-gke.2100\",\n    \"1.18.19-gke.1701\",\n    \"1.18.19-gke.1700\",\n    \"1.18.18-gke.1701\",\n    \"1.18.18-gke.1700\",\n    \"1.18.18-gke.1101\",\n    \"1.18.18-gke.1100\",\n    \"1.18.17-gke.1901\",\n    \"1.18.17-gke.1900\",\n    \"1.18.17-gke.1201\",\n    \"1.18.17-gke.1200\",\n    \"1.18.17-gke.700\",\n    \"1.18.17-gke.100\",\n    \"1.18.16-gke.2100\",\n    \"1.18.16-gke.1201\",\n    \"1.18.16-gke.1200\",\n    \"1.18.16-gke.502\",\n    \"1.18.16-gke.500\",\n    \"1.18.16-gke.302\",\n    \"1.18.16-gke.300\",\n    \"1.18.15-gke.2500\",\n    \"1.18.15-gke.1502\",\n    \"1.18.15-gke.1501\",\n    \"1.18.15-gke.1500\",\n    \"1.18.15-gke.1102\",\n    \"1.18.15-gke.1100\",\n    \"1.18.15-gke.800\",\n    \"1.18.14-gke.1600\",\n    \"1.18.14-gke.1200\",\n    \"1.18.12-gke.1210\",\n    \"1.18.12-gke.1206\",\n    \"1.18.12-gke.1205\",\n    \"1.18.12-gke.1201\",\n    \"1.18.12-gke.1200\",\n    \"1.18.12-gke.300\",\n    \"1.18.10-gke.2701\",\n    \"1.18.10-gke.2101\",\n    \"1.18.10-gke.1500\",\n    \"1.18.10-gke.601\",\n    \"1.18.9-gke.2501\",\n    \"1.18.9-gke.1501\",\n    \"1.18.9-gke.801\",\n    \"1.18.6-gke.4801\",\n    \"1.18.6-gke.3504\",\n    \"1.18.6-gke.3503\",\n    \"1.17.17-gke.9100\",\n    \"1.17.17-gke.8500\",\n    \"1.17.17-gke.8200\",\n    \"1.17.17-gke.7800\",\n    \"1.17.17-gke.7200\",\n    \"1.17.17-gke.6700\",\n    \"1.17.17-gke.6000\",\n    \"1.17.17-gke.5400\",\n    \"1.17.17-gke.4900\",\n    \"1.17.17-gke.4400\",\n    \"1.17.17-gke.3700\",\n    \"1.17.17-gke.3000\",\n    \"1.17.17-gke.2800\",\n    \"1.17.17-gke.2500\",\n    \"1.17.17-gke.1500\",\n    \"1.17.17-gke.1101\",\n    \"1.17.17-gke.1100\",\n    \"1.17.17-gke.600\",\n    \"1.17.16-gke.1600\",\n    \"1.17.16-gke.1300\",\n    \"1.17.15-gke.800\",\n    \"1.17.15-gke.300\",\n    \"1.17.14-gke.1600\",\n    \"1.17.14-gke.1200\",\n    \"1.17.14-gke.400\",\n    \"1.17.13-gke.2600\",\n    \"1.17.13-gke.2001\",\n    \"1.17.13-gke.1401\",\n    \"1.17.13-gke.1400\",\n    \"1.17.13-gke.600\",\n    \"1.17.12-gke.2502\",\n    \"1.17.12-gke.1504\",\n    \"1.17.12-gke.1501\",\n    \"1.17.12-gke.500\",\n    \"1.17.9-gke.6300\",\n    \"1.17.9-gke.1504\",\n    \"1.16.15-gke.14800\",\n    \"1.16.15-gke.12500\",\n    \"1.16.15-gke.11800\",\n    \"1.16.15-gke.10600\",\n    \"1.16.15-gke.7801\",\n    \"1.16.15-gke.7800\",\n    \"1.16.15-gke.7300\",\n    \"1.16.15-gke.6900\",\n    \"1.16.15-gke.6000\",\n    \"1.16.15-gke.5500\",\n    \"1.16.15-gke.4901\",\n    \"1.16.15-gke.4301\",\n    \"1.16.15-gke.4300\",\n    \"1.16.15-gke.3500\",\n    \"1.16.15-gke.2601\",\n    \"1.16.15-gke.1600\",\n    \"1.16.15-gke.500\",\n    \"1.16.13-gke.404\",\n    \"1.16.13-gke.403\",\n    \"1.16.13-gke.401\",\n    \"1.16.13-gke.400\",\n    \"1.16.13-gke.1\",\n    \"1.16.11-gke.5\",\n    \"1.16.10-gke.8\",\n    \"1.16.9-gke.6\",\n    \"1.16.9-gke.2\",\n    \"1.16.8-gke.15\",\n    \"1.16.8-gke.12\",\n    \"1.16.8-gke.9\",\n    \"1.15.12-gke.6002\",\n    \"1.15.12-gke.6001\",\n    \"1.15.12-gke.5000\",\n    \"1.15.12-gke.4002\",\n    \"1.15.12-gke.4000\",\n    \"1.15.12-gke.20\",\n    \"1.15.12-gke.17\",\n    \"1.15.12-gke.16\",\n    \"1.15.12-gke.13\",\n    \"1.15.12-gke.9\",\n    \"1.15.12-gke.6\",\n    \"1.15.12-gke.3\",\n    \"1.15.12-gke.2\",\n    \"1.15.11-gke.17\",\n    \"1.15.11-gke.15\",\n    \"1.15.11-gke.13\",\n    \"1.15.11-gke.12\",\n    \"1.15.11-gke.11\",\n    \"1.15.11-gke.9\",\n    \"1.15.11-gke.5\",\n    \"1.15.11-gke.3\",\n    \"1.15.11-gke.1\",\n    \"1.15.9-gke.26\",\n    \"1.15.9-gke.24\",\n    \"1.15.9-gke.22\",\n    \"1.15.9-gke.12\",\n    \"1.15.9-gke.9\",\n    \"1.15.9-gke.8\",\n    \"1.15.8-gke.3\",\n    \"1.15.8-gke.2\",\n    \"1.15.7-gke.23\",\n    \"1.15.7-gke.2\",\n    \"1.15.4-gke.22\",\n    \"1.14.10-gke.1504\",\n    \"1.14.10-gke.902\",\n    \"1.14.10-gke.50\",\n    \"1.14.10-gke.46\",\n    \"1.14.10-gke.45\",\n    \"1.14.10-gke.42\",\n    \"1.14.10-gke.41\",\n    \"1.14.10-gke.40\",\n    \"1.14.10-gke.37\",\n    \"1.14.10-gke.36\",\n    \"1.14.10-gke.34\",\n    \"1.14.10-gke.32\",\n    \"1.14.10-gke.31\",\n    \"1.14.10-gke.27\",\n    \"1.14.10-gke.24\",\n    \"1.14.10-gke.22\",\n    \"1.14.10-gke.21\",\n    \"1.14.10-gke.17\",\n    \"1.14.10-gke.0\",\n    \"1.14.9-gke.23\",\n    \"1.14.9-gke.2\",\n    \"1.14.9-gke.0\",\n    \"1.14.8-gke.33\",\n    \"1.14.8-gke.21\",\n    \"1.14.8-gke.18\",\n    \"1.14.8-gke.17\",\n    \"1.14.8-gke.14\",\n    \"1.14.8-gke.12\",\n    \"1.14.8-gke.7\",\n    \"1.14.8-gke.2\",\n    \"1.14.7-gke.40\",\n    \"1.14.7-gke.25\",\n    \"1.14.7-gke.23\",\n    \"1.14.7-gke.17\",\n    \"1.14.7-gke.14\",\n    \"1.14.7-gke.10\",\n    \"1.14.6-gke.13\",\n    \"1.14.6-gke.2\",\n    \"1.14.6-gke.1\",\n    \"1.14.3-gke.11\",\n    \"1.14.3-gke.10\",\n    \"1.14.3-gke.9\",\n    \"1.14.2-gke.9\",\n    \"1.14.1-gke.5\",\n    \"1.13.12-gke.30\",\n    \"1.13.12-gke.25\",\n    \"1.13.12-gke.17\",\n    \"1.13.12-gke.16\",\n    \"1.13.12-gke.14\",\n    \"1.13.12-gke.13\",\n    \"1.13.12-gke.10\",\n    \"1.13.12-gke.8\",\n    \"1.13.12-gke.4\",\n    \"1.13.12-gke.2\",\n    \"1.13.11-gke.23\",\n    \"1.13.11-gke.15\",\n    \"1.13.11-gke.14\",\n    \"1.13.11-gke.12\",\n    \"1.13.11-gke.11\",\n    \"1.13.11-gke.9\",\n    \"1.13.11-gke.5\",\n    \"1.13.10-gke.7\",\n    \"1.13.10-gke.0\",\n    \"1.13.9-gke.11\",\n    \"1.13.9-gke.3\",\n    \"1.13.7-gke.24\",\n    \"1.13.7-gke.19\",\n    \"1.13.7-gke.15\",\n    \"1.13.7-gke.8\",\n    \"1.13.7-gke.0\",\n    \"1.13.6-gke.13\",\n    \"1.13.6-gke.6\",\n    \"1.13.6-gke.5\",\n    \"1.13.6-gke.0\",\n    \"1.13.5-gke.10\",\n    \"1.12.10-gke.22\",\n    \"1.12.10-gke.20\",\n    \"1.12.10-gke.19\",\n    \"1.12.10-gke.18\",\n    \"1.12.10-gke.17\",\n    \"1.12.10-gke.15\",\n    \"1.12.10-gke.13\",\n    \"1.12.10-gke.11\",\n    \"1.12.10-gke.5\",\n    \"1.12.9-gke.16\",\n    \"1.12.9-gke.15\",\n    \"1.12.9-gke.13\",\n    \"1.12.9-gke.10\",\n    \"1.12.9-gke.7\",\n    \"1.12.9-gke.3\",\n    \"1.12.8-gke.12\",\n    \"1.12.8-gke.10\",\n    \"1.12.8-gke.7\",\n    \"1.12.8-gke.6\",\n    \"1.12.7-gke.26\",\n    \"1.12.7-gke.25\",\n    \"1.12.7-gke.24\",\n    \"1.12.7-gke.22\",\n    \"1.12.7-gke.21\",\n    \"1.12.7-gke.17\",\n    \"1.12.7-gke.10\",\n    \"1.12.7-gke.7\",\n    \"1.12.6-gke.11\",\n    \"1.12.6-gke.10\",\n    \"1.12.6-gke.7\",\n    \"1.12.5-gke.10\",\n    \"1.12.5-gke.5\",\n    \"1.11.10-gke.6\",\n    \"1.11.10-gke.5\"\n  ],\n  \"defaultImageType\": \"COS_CONTAINERD\",\n  \"validImageTypes\": [\n    \"COS_CONTAINERD\",\n    \"COS\",\n    \"UBUNTU\",\n    \"UBUNTU_CONTAINERD\",\n    \"WINDOWS_LTSC\",\n    \"WINDOWS_LTSC_CONTAINERD\",\n    \"WINDOWS_SAC\",\n    \"WINDOWS_SAC_CONTAINERD\"\n  ],\n  \"validMasterVersions\": [\n    \"1.29.3-gke.1093000\",\n    \"1.29.2-gke.1521000\",\n    \"1.29.1-gke.1589018\",\n    \"1.29.1-gke.1589017\",\n    \"1.29.0-gke.1381000\",\n    \"1.28.8-gke.1095000\",\n    \"1.28.7-gke.1226000\",\n    \"1.28.7-gke.1026000\",\n    \"1.28.5-gke.1217000\",\n    \"1.28.3-gke.1286000\",\n    \"1.28.3-gke.1203001\",\n    \"1.28.3-gke.1118000\",\n    \"1.27.12-gke.1115000\",\n    \"1.27.11-gke.1202000\",\n    \"1.27.11-gke.1118000\",\n    \"1.27.11-gke.1062000\",\n    \"1.27.10-gke.1055000\",\n    \"1.27.8-gke.1067004\",\n    \"1.27.7-gke.1121002\",\n    \"1.27.3-gke.100\",\n    \"1.26.15-gke.1090000\",\n    \"1.26.14-gke.1133000\",\n    \"1.26.14-gke.1076000\",\n    \"1.26.14-gke.1044000\",\n    \"1.26.14-gke.1006000\",\n    \"1.26.13-gke.1144000\",\n    \"1.26.11-gke.1055000\",\n    \"1.26.8-gke.200\",\n    \"1.25.16-gke.1711000\",\n    \"1.25.16-gke.1648000\",\n    \"1.25.16-gke.1596000\",\n    \"1.25.16-gke.1537000\",\n    \"1.25.16-gke.1460000\",\n    \"1.25.16-gke.1041000\",\n    \"1.25.15-gke.1115000\"\n  ],\n  \"channels\": [\n    {\n      \"channel\": \"RAPID\",\n      \"defaultVersion\": \"1.29.1-gke.1589017\",\n      \"validVersions\": [\n        \"1.29.3-gke.1093000\",\n        \"1.29.2-gke.1521000\",\n        \"1.29.1-gke.1589017\",\n        \"1.28.8-gke.1095000\",\n        \"1.28.7-gke.1226000\",\n        \"1.28.7-gke.1026000\",\n        \"1.27.12-gke.1115000\",\n        \"1.27.11-gke.1202000\",\n        \"1.27.11-gke.1118000\",\n        \"1.26.15-gke.1090000\",\n        \"1.26.14-gke.1133000\",\n        \"1.26.14-gke.1076000\",\n        \"1.25.16-gke.1711000\",\n        \"1.25.16-gke.1648000\",\n        \"1.25.16-gke.1596000\"\n      ]\n    },\n    {\n      \"channel\": \"REGULAR\",\n      \"defaultVersion\": \"1.27.8-gke.1067004\",\n      \"validVersions\": [\n        \"1.29.1-gke.1589018\",\n        \"1.29.1-gke.1589017\",\n        \"1.28.7-gke.1026000\",\n        \"1.28.3-gke.1286000\",\n        \"1.27.11-gke.1062000\",\n        \"1.27.10-gke.1055000\",\n        \"1.27.8-gke.1067004\",\n        \"1.26.14-gke.1044000\",\n        \"1.26.14-gke.1006000\",\n        \"1.26.8-gke.200\",\n        \"1.25.16-gke.1537000\",\n        \"1.25.16-gke.1460000\"\n      ]\n    },\n    {\n      \"channel\": \"STABLE\",\n      \"defaultVersion\": \"1.27.8-gke.1067004\",\n      \"validVersions\": [\n        \"1.28.3-gke.1286000\",\n        \"1.28.3-gke.1203001\",\n        \"1.28.3-gke.1118000\",\n        \"1.27.8-gke.1067004\",\n        \"1.27.7-gke.1121002\",\n        \"1.26.13-gke.1144000\",\n        \"1.26.11-gke.1055000\",\n        \"1.26.8-gke.200\",\n        \"1.25.16-gke.1460000\",\n        \"1.25.16-gke.1041000\",\n        \"1.25.15-gke.1115000\"\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gke2/json-dumps/container-server-config-europe-west10.json",
    "content": "{\n  \"defaultClusterVersion\": \"1.27.8-gke.1067004\",\n  \"validNodeVersions\": [\n    \"1.29.3-gke.1093000\",\n    \"1.29.2-gke.1521000\",\n    \"1.29.2-gke.1217000\",\n    \"1.29.2-gke.1060000\",\n    \"1.29.1-gke.1589018\",\n    \"1.29.1-gke.1589017\",\n    \"1.29.1-gke.1589000\",\n    \"1.29.1-gke.1575000\",\n    \"1.29.1-gke.1425000\",\n    \"1.29.1-gke.1016000\",\n    \"1.29.0-gke.1381000\",\n    \"1.28.8-gke.1095000\",\n    \"1.28.7-gke.1226000\",\n    \"1.28.7-gke.1026000\",\n    \"1.28.6-gke.1456000\",\n    \"1.28.6-gke.1369000\",\n    \"1.28.6-gke.1289000\",\n    \"1.28.6-gke.1095000\",\n    \"1.28.5-gke.1217000\",\n    \"1.28.4-gke.1083000\",\n    \"1.28.3-gke.1286000\",\n    \"1.28.3-gke.1203001\",\n    \"1.28.3-gke.1203000\",\n    \"1.28.3-gke.1118000\",\n    \"1.28.3-gke.1098000\",\n    \"1.28.3-gke.1090000\",\n    \"1.28.2-gke.1157000\",\n    \"1.27.12-gke.1115000\",\n    \"1.27.11-gke.1202000\",\n    \"1.27.11-gke.1118000\",\n    \"1.27.11-gke.1062000\",\n    \"1.27.11-gke.1018000\",\n    \"1.27.10-gke.1207000\",\n    \"1.27.10-gke.1152000\",\n    \"1.27.10-gke.1055000\",\n    \"1.27.9-gke.1092000\",\n    \"1.27.8-gke.1067004\",\n    \"1.27.8-gke.1067000\",\n    \"1.27.7-gke.1293000\",\n    \"1.27.7-gke.1121002\",\n    \"1.27.7-gke.1121000\",\n    \"1.27.7-gke.1088000\",\n    \"1.27.7-gke.1056000\",\n    \"1.27.7-gke.1038000\",\n    \"1.27.6-gke.1506000\",\n    \"1.27.6-gke.1445000\",\n    \"1.27.6-gke.1248000\",\n    \"1.27.5-gke.200\",\n    \"1.27.4-gke.900\",\n    \"1.27.3-gke.1700\",\n    \"1.27.3-gke.100\",\n    \"1.27.2-gke.2100\",\n    \"1.27.2-gke.1200\",\n    \"1.26.15-gke.1090000\",\n    \"1.26.14-gke.1133000\",\n    \"1.26.14-gke.1076000\",\n    \"1.26.14-gke.1044000\",\n    \"1.26.14-gke.1006000\",\n    \"1.26.13-gke.1189000\",\n    \"1.26.13-gke.1144000\",\n    \"1.26.13-gke.1052000\",\n    \"1.26.12-gke.1111000\",\n    \"1.26.11-gke.1055000\",\n    \"1.26.10-gke.1235000\",\n    \"1.26.10-gke.1101000\",\n    \"1.26.10-gke.1073000\",\n    \"1.26.10-gke.1038000\",\n    \"1.26.10-gke.1024000\",\n    \"1.26.9-gke.1507000\",\n    \"1.26.9-gke.1437000\",\n    \"1.26.8-gke.200\",\n    \"1.26.7-gke.500\",\n    \"1.26.6-gke.1700\",\n    \"1.26.5-gke.2700\",\n    \"1.26.5-gke.2100\",\n    \"1.26.5-gke.1400\",\n    \"1.26.5-gke.1200\",\n    \"1.26.4-gke.1400\",\n    \"1.26.4-gke.500\",\n    \"1.26.3-gke.1000\",\n    \"1.26.3-gke.400\",\n    \"1.26.2-gke.1000\",\n    \"1.26.1-gke.1500\",\n    \"1.25.16-gke.1711000\",\n    \"1.25.16-gke.1648000\",\n    \"1.25.16-gke.1596000\",\n    \"1.25.16-gke.1570000\",\n    \"1.25.16-gke.1537000\",\n    \"1.25.16-gke.1497000\",\n    \"1.25.16-gke.1460000\",\n    \"1.25.16-gke.1360000\",\n    \"1.25.16-gke.1268000\",\n    \"1.25.16-gke.1041000\",\n    \"1.25.16-gke.1020000\",\n    \"1.25.15-gke.1115000\",\n    \"1.25.15-gke.1083000\",\n    \"1.25.15-gke.1049000\",\n    \"1.25.15-gke.1033000\",\n    \"1.25.14-gke.1474000\",\n    \"1.25.14-gke.1421000\",\n    \"1.25.13-gke.200\",\n    \"1.25.12-gke.500\",\n    \"1.25.11-gke.1700\",\n    \"1.25.10-gke.2700\",\n    \"1.25.10-gke.2100\",\n    \"1.25.10-gke.1400\",\n    \"1.25.10-gke.1200\",\n    \"1.25.9-gke.2300\",\n    \"1.25.9-gke.400\",\n    \"1.25.8-gke.1000\",\n    \"1.25.8-gke.500\",\n    \"1.25.7-gke.1000\",\n    \"1.25.6-gke.1000\",\n    \"1.25.6-gke.200\",\n    \"1.25.5-gke.2000\",\n    \"1.25.5-gke.1500\",\n    \"1.25.4-gke.2100\",\n    \"1.25.3-gke.800\",\n    \"1.24.17-gke.2472000\",\n    \"1.24.17-gke.2364000\",\n    \"1.24.17-gke.2347000\",\n    \"1.24.17-gke.2266000\",\n    \"1.24.17-gke.2230000\",\n    \"1.24.17-gke.2211000\",\n    \"1.24.17-gke.2198000\",\n    \"1.24.17-gke.2155000\",\n    \"1.24.17-gke.2113000\",\n    \"1.24.17-gke.200\",\n    \"1.24.16-gke.500\",\n    \"1.24.15-gke.1700\",\n    \"1.24.14-gke.2700\",\n    \"1.24.14-gke.2100\",\n    \"1.24.14-gke.1400\",\n    \"1.24.14-gke.1200\",\n    \"1.24.13-gke.2500\",\n    \"1.24.13-gke.500\",\n    \"1.24.12-gke.1000\",\n    \"1.24.12-gke.500\",\n    \"1.24.11-gke.1000\",\n    \"1.24.10-gke.2300\",\n    \"1.24.10-gke.1200\",\n    \"1.24.9-gke.3200\",\n    \"1.24.9-gke.2000\",\n    \"1.24.9-gke.1500\",\n    \"1.24.8-gke.2000\",\n    \"1.24.8-gke.401\",\n    \"1.24.7-gke.900\",\n    \"1.24.6-gke.1500\",\n    \"1.24.5-gke.600\",\n    \"1.24.4-gke.800\",\n    \"1.24.3-gke.2100\",\n    \"1.24.3-gke.900\",\n    \"1.24.3-gke.200\",\n    \"1.24.2-gke.1900\",\n    \"1.24.2-gke.300\",\n    \"1.24.1-gke.1800\",\n    \"1.24.1-gke.1400\",\n    \"1.23.17-gke.10700\",\n    \"1.23.17-gke.10000\",\n    \"1.23.17-gke.8400\",\n    \"1.23.17-gke.7700\",\n    \"1.23.17-gke.7000\",\n    \"1.23.17-gke.6800\",\n    \"1.23.17-gke.5600\",\n    \"1.23.17-gke.3600\",\n    \"1.23.17-gke.2000\",\n    \"1.23.17-gke.1700\",\n    \"1.23.17-gke.300\",\n    \"1.23.16-gke.2500\",\n    \"1.23.16-gke.1400\",\n    \"1.23.16-gke.1100\",\n    \"1.23.16-gke.200\",\n    \"1.23.15-gke.1900\",\n    \"1.23.15-gke.1400\",\n    \"1.23.14-gke.1800\",\n    \"1.23.14-gke.401\",\n    \"1.23.13-gke.900\",\n    \"1.23.12-gke.1600\",\n    \"1.23.12-gke.100\",\n    \"1.23.11-gke.300\",\n    \"1.23.10-gke.1000\",\n    \"1.23.9-gke.2100\",\n    \"1.23.9-gke.900\",\n    \"1.23.8-gke.1900\",\n    \"1.23.8-gke.400\",\n    \"1.23.7-gke.1400\",\n    \"1.23.6-gke.2200\",\n    \"1.23.6-gke.1700\",\n    \"1.23.6-gke.1501\",\n    \"1.23.6-gke.1500\",\n    \"1.23.5-gke.2400\",\n    \"1.23.5-gke.1503\",\n    \"1.23.5-gke.1501\",\n    \"1.22.17-gke.14100\",\n    \"1.22.17-gke.13400\",\n    \"1.22.17-gke.12700\",\n    \"1.22.17-gke.11400\",\n    \"1.22.17-gke.9400\",\n    \"1.22.17-gke.8000\",\n    \"1.22.17-gke.7500\",\n    \"1.22.17-gke.6100\",\n    \"1.22.17-gke.5400\",\n    \"1.22.17-gke.4300\",\n    \"1.22.17-gke.4000\",\n    \"1.22.17-gke.3100\",\n    \"1.22.17-gke.1900\",\n    \"1.22.17-gke.1400\",\n    \"1.22.16-gke.2000\",\n    \"1.22.16-gke.1300\",\n    \"1.22.15-gke.2500\",\n    \"1.22.15-gke.1000\",\n    \"1.22.15-gke.100\",\n    \"1.22.14-gke.300\",\n    \"1.22.13-gke.1000\",\n    \"1.22.12-gke.2300\",\n    \"1.22.12-gke.1200\",\n    \"1.22.12-gke.500\",\n    \"1.22.12-gke.300\",\n    \"1.22.11-gke.400\",\n    \"1.22.10-gke.600\",\n    \"1.22.9-gke.2000\",\n    \"1.22.9-gke.1500\",\n    \"1.22.9-gke.1300\",\n    \"1.22.8-gke.2200\",\n    \"1.22.8-gke.202\",\n    \"1.22.8-gke.201\",\n    \"1.22.8-gke.200\",\n    \"1.22.7-gke.1500\",\n    \"1.22.7-gke.1300\",\n    \"1.22.7-gke.900\",\n    \"1.22.7-gke.300\",\n    \"1.22.6-gke.1000\",\n    \"1.22.6-gke.300\",\n    \"1.22.4-gke.1501\",\n    \"1.22.3-gke.1500\",\n    \"1.21.14-gke.18800\",\n    \"1.21.14-gke.18100\",\n    \"1.21.14-gke.15800\",\n    \"1.21.14-gke.14600\",\n    \"1.21.14-gke.14100\",\n    \"1.21.14-gke.8500\",\n    \"1.21.14-gke.7100\",\n    \"1.21.14-gke.5300\",\n    \"1.21.14-gke.4300\",\n    \"1.21.14-gke.3000\",\n    \"1.21.14-gke.2700\",\n    \"1.21.14-gke.2100\",\n    \"1.21.14-gke.700\",\n    \"1.21.13-gke.900\",\n    \"1.21.12-gke.2200\",\n    \"1.21.12-gke.1700\",\n    \"1.21.12-gke.1500\",\n    \"1.21.11-gke.1900\",\n    \"1.21.11-gke.1100\",\n    \"1.21.11-gke.900\",\n    \"1.21.10-gke.2000\",\n    \"1.21.10-gke.1500\",\n    \"1.21.10-gke.1300\",\n    \"1.21.10-gke.400\",\n    \"1.21.9-gke.1002\",\n    \"1.21.9-gke.1001\",\n    \"1.21.9-gke.1000\",\n    \"1.21.9-gke.300\",\n    \"1.21.6-gke.1503\",\n    \"1.21.6-gke.1501\",\n    \"1.21.6-gke.1500\",\n    \"1.21.5-gke.1805\",\n    \"1.21.5-gke.1802\",\n    \"1.21.5-gke.1302\",\n    \"1.21.5-gke.1300\",\n    \"1.21.4-gke.2302\",\n    \"1.21.4-gke.2300\",\n    \"1.21.3-gke.2003\",\n    \"1.21.3-gke.2001\",\n    \"1.20.15-gke.13700\",\n    \"1.20.15-gke.13400\",\n    \"1.20.15-gke.12800\",\n    \"1.20.15-gke.11400\",\n    \"1.20.15-gke.9900\",\n    \"1.20.15-gke.8700\",\n    \"1.20.15-gke.8200\",\n    \"1.20.15-gke.8000\",\n    \"1.20.15-gke.6000\",\n    \"1.20.15-gke.5200\",\n    \"1.20.15-gke.5000\",\n    \"1.20.15-gke.4100\",\n    \"1.20.15-gke.3600\",\n    \"1.20.15-gke.3400\",\n    \"1.20.15-gke.2500\",\n    \"1.20.15-gke.1000\",\n    \"1.20.15-gke.300\",\n    \"1.20.12-gke.1500\",\n    \"1.20.11-gke.1801\",\n    \"1.20.11-gke.1300\",\n    \"1.20.10-gke.2100\",\n    \"1.20.10-gke.1600\",\n    \"1.20.10-gke.301\",\n    \"1.20.9-gke.2100\",\n    \"1.20.9-gke.1001\",\n    \"1.20.9-gke.1000\",\n    \"1.20.9-gke.701\",\n    \"1.20.9-gke.700\",\n    \"1.20.8-gke.2101\",\n    \"1.20.8-gke.2100\",\n    \"1.20.8-gke.900\",\n    \"1.20.8-gke.700\",\n    \"1.20.7-gke.2200\",\n    \"1.20.7-gke.1800\",\n    \"1.20.6-gke.1400\",\n    \"1.20.6-gke.1000\",\n    \"1.19.16-gke.15700\",\n    \"1.19.16-gke.14500\",\n    \"1.19.16-gke.14000\",\n    \"1.19.16-gke.13800\",\n    \"1.19.16-gke.11800\",\n    \"1.19.16-gke.11000\",\n    \"1.19.16-gke.10800\",\n    \"1.19.16-gke.9900\",\n    \"1.19.16-gke.9400\",\n    \"1.19.16-gke.9200\",\n    \"1.19.16-gke.8300\",\n    \"1.19.16-gke.6800\",\n    \"1.19.16-gke.6100\",\n    \"1.19.16-gke.3600\",\n    \"1.19.15-gke.1801\",\n    \"1.19.15-gke.1300\",\n    \"1.19.15-gke.500\",\n    \"1.19.14-gke.2300\",\n    \"1.19.14-gke.1900\",\n    \"1.19.14-gke.301\",\n    \"1.19.14-gke.300\",\n    \"1.19.13-gke.1900\",\n    \"1.19.13-gke.1200\",\n    \"1.19.13-gke.701\",\n    \"1.19.13-gke.700\",\n    \"1.19.12-gke.2101\",\n    \"1.19.12-gke.2100\",\n    \"1.19.12-gke.1100\",\n    \"1.19.12-gke.900\",\n    \"1.19.12-gke.700\",\n    \"1.19.11-gke.2101\",\n    \"1.19.11-gke.2100\",\n    \"1.19.11-gke.1701\",\n    \"1.19.11-gke.1700\",\n    \"1.19.10-gke.1701\",\n    \"1.19.10-gke.1700\",\n    \"1.19.10-gke.1601\",\n    \"1.19.10-gke.1600\",\n    \"1.19.10-gke.1001\",\n    \"1.19.10-gke.1000\",\n    \"1.19.9-gke.1900\",\n    \"1.19.9-gke.1400\",\n    \"1.19.9-gke.700\",\n    \"1.19.9-gke.100\",\n    \"1.19.8-gke.2000\",\n    \"1.19.8-gke.1600\",\n    \"1.19.8-gke.1000\",\n    \"1.19.7-gke.2503\",\n    \"1.19.7-gke.1500\",\n    \"1.19.7-gke.1302\",\n    \"1.19.7-gke.800\",\n    \"1.19.6-gke.1700\",\n    \"1.19.6-gke.1100\",\n    \"1.19.6-gke.600\",\n    \"1.18.20-gke.6101\",\n    \"1.18.20-gke.6000\",\n    \"1.18.20-gke.4501\",\n    \"1.18.20-gke.4500\",\n    \"1.18.20-gke.4100\",\n    \"1.18.20-gke.3300\",\n    \"1.18.20-gke.3001\",\n    \"1.18.20-gke.3000\",\n    \"1.18.20-gke.2300\",\n    \"1.18.20-gke.901\",\n    \"1.18.20-gke.900\",\n    \"1.18.20-gke.501\",\n    \"1.18.19-gke.2101\",\n    \"1.18.19-gke.2100\",\n    \"1.18.19-gke.1701\",\n    \"1.18.19-gke.1700\",\n    \"1.18.18-gke.1701\",\n    \"1.18.18-gke.1700\",\n    \"1.18.18-gke.1101\",\n    \"1.18.18-gke.1100\",\n    \"1.18.17-gke.1901\",\n    \"1.18.17-gke.1900\",\n    \"1.18.17-gke.1201\",\n    \"1.18.17-gke.1200\",\n    \"1.18.17-gke.700\",\n    \"1.18.17-gke.100\",\n    \"1.18.16-gke.2100\",\n    \"1.18.16-gke.1201\",\n    \"1.18.16-gke.1200\",\n    \"1.18.16-gke.502\",\n    \"1.18.16-gke.500\",\n    \"1.18.16-gke.302\",\n    \"1.18.16-gke.300\",\n    \"1.18.15-gke.2500\",\n    \"1.18.15-gke.1502\",\n    \"1.18.15-gke.1501\",\n    \"1.18.15-gke.1500\",\n    \"1.18.15-gke.1102\",\n    \"1.18.15-gke.1100\",\n    \"1.18.15-gke.800\",\n    \"1.18.14-gke.1600\",\n    \"1.18.14-gke.1200\",\n    \"1.18.12-gke.1210\",\n    \"1.18.12-gke.1206\",\n    \"1.18.12-gke.1205\",\n    \"1.18.12-gke.1201\",\n    \"1.18.12-gke.1200\",\n    \"1.18.12-gke.300\",\n    \"1.18.10-gke.2701\",\n    \"1.18.10-gke.2101\",\n    \"1.18.10-gke.1500\",\n    \"1.18.10-gke.601\",\n    \"1.18.9-gke.2501\",\n    \"1.18.9-gke.1501\",\n    \"1.18.9-gke.801\",\n    \"1.18.6-gke.4801\",\n    \"1.18.6-gke.3504\",\n    \"1.18.6-gke.3503\",\n    \"1.17.17-gke.9100\",\n    \"1.17.17-gke.8500\",\n    \"1.17.17-gke.8200\",\n    \"1.17.17-gke.7800\",\n    \"1.17.17-gke.7200\",\n    \"1.17.17-gke.6700\",\n    \"1.17.17-gke.6000\",\n    \"1.17.17-gke.5400\",\n    \"1.17.17-gke.4900\",\n    \"1.17.17-gke.4400\",\n    \"1.17.17-gke.3700\",\n    \"1.17.17-gke.3000\",\n    \"1.17.17-gke.2800\",\n    \"1.17.17-gke.2500\",\n    \"1.17.17-gke.1500\",\n    \"1.17.17-gke.1101\",\n    \"1.17.17-gke.1100\",\n    \"1.17.17-gke.600\",\n    \"1.17.16-gke.1600\",\n    \"1.17.16-gke.1300\",\n    \"1.17.15-gke.800\",\n    \"1.17.15-gke.300\",\n    \"1.17.14-gke.1600\",\n    \"1.17.14-gke.1200\",\n    \"1.17.14-gke.400\",\n    \"1.17.13-gke.2600\",\n    \"1.17.13-gke.2001\",\n    \"1.17.13-gke.1401\",\n    \"1.17.13-gke.1400\",\n    \"1.17.13-gke.600\",\n    \"1.17.12-gke.2502\",\n    \"1.17.12-gke.1504\",\n    \"1.17.12-gke.1501\",\n    \"1.17.12-gke.500\",\n    \"1.17.9-gke.6300\",\n    \"1.17.9-gke.1504\",\n    \"1.16.15-gke.14800\",\n    \"1.16.15-gke.12500\",\n    \"1.16.15-gke.11800\",\n    \"1.16.15-gke.10600\",\n    \"1.16.15-gke.7801\",\n    \"1.16.15-gke.7800\",\n    \"1.16.15-gke.7300\",\n    \"1.16.15-gke.6900\",\n    \"1.16.15-gke.6000\",\n    \"1.16.15-gke.5500\",\n    \"1.16.15-gke.4901\",\n    \"1.16.15-gke.4301\",\n    \"1.16.15-gke.4300\",\n    \"1.16.15-gke.3500\",\n    \"1.16.15-gke.2601\",\n    \"1.16.15-gke.1600\",\n    \"1.16.15-gke.500\",\n    \"1.16.13-gke.404\",\n    \"1.16.13-gke.403\",\n    \"1.16.13-gke.401\",\n    \"1.16.13-gke.400\",\n    \"1.16.13-gke.1\",\n    \"1.16.11-gke.5\",\n    \"1.16.10-gke.8\",\n    \"1.16.9-gke.6\",\n    \"1.16.9-gke.2\",\n    \"1.16.8-gke.15\",\n    \"1.16.8-gke.12\",\n    \"1.16.8-gke.9\",\n    \"1.15.12-gke.6002\",\n    \"1.15.12-gke.6001\",\n    \"1.15.12-gke.5000\",\n    \"1.15.12-gke.4002\",\n    \"1.15.12-gke.4000\",\n    \"1.15.12-gke.20\",\n    \"1.15.12-gke.17\",\n    \"1.15.12-gke.16\",\n    \"1.15.12-gke.13\",\n    \"1.15.12-gke.9\",\n    \"1.15.12-gke.6\",\n    \"1.15.12-gke.3\",\n    \"1.15.12-gke.2\",\n    \"1.15.11-gke.17\",\n    \"1.15.11-gke.15\",\n    \"1.15.11-gke.13\",\n    \"1.15.11-gke.12\",\n    \"1.15.11-gke.11\",\n    \"1.15.11-gke.9\",\n    \"1.15.11-gke.5\",\n    \"1.15.11-gke.3\",\n    \"1.15.11-gke.1\",\n    \"1.15.9-gke.26\",\n    \"1.15.9-gke.24\",\n    \"1.15.9-gke.22\",\n    \"1.15.9-gke.12\",\n    \"1.15.9-gke.9\",\n    \"1.15.9-gke.8\",\n    \"1.15.8-gke.3\",\n    \"1.15.8-gke.2\",\n    \"1.15.7-gke.23\",\n    \"1.15.7-gke.2\",\n    \"1.15.4-gke.22\",\n    \"1.14.10-gke.1504\",\n    \"1.14.10-gke.902\",\n    \"1.14.10-gke.50\",\n    \"1.14.10-gke.46\",\n    \"1.14.10-gke.45\",\n    \"1.14.10-gke.42\",\n    \"1.14.10-gke.41\",\n    \"1.14.10-gke.40\",\n    \"1.14.10-gke.37\",\n    \"1.14.10-gke.36\",\n    \"1.14.10-gke.34\",\n    \"1.14.10-gke.32\",\n    \"1.14.10-gke.31\",\n    \"1.14.10-gke.27\",\n    \"1.14.10-gke.24\",\n    \"1.14.10-gke.22\",\n    \"1.14.10-gke.21\",\n    \"1.14.10-gke.17\",\n    \"1.14.10-gke.0\",\n    \"1.14.9-gke.23\",\n    \"1.14.9-gke.2\",\n    \"1.14.9-gke.0\",\n    \"1.14.8-gke.33\",\n    \"1.14.8-gke.21\",\n    \"1.14.8-gke.18\",\n    \"1.14.8-gke.17\",\n    \"1.14.8-gke.14\",\n    \"1.14.8-gke.12\",\n    \"1.14.8-gke.7\",\n    \"1.14.8-gke.2\",\n    \"1.14.7-gke.40\",\n    \"1.14.7-gke.25\",\n    \"1.14.7-gke.23\",\n    \"1.14.7-gke.17\",\n    \"1.14.7-gke.14\",\n    \"1.14.7-gke.10\",\n    \"1.14.6-gke.13\",\n    \"1.14.6-gke.2\",\n    \"1.14.6-gke.1\",\n    \"1.14.3-gke.11\",\n    \"1.14.3-gke.10\",\n    \"1.14.3-gke.9\",\n    \"1.14.2-gke.9\",\n    \"1.14.1-gke.5\",\n    \"1.13.12-gke.30\",\n    \"1.13.12-gke.25\",\n    \"1.13.12-gke.17\",\n    \"1.13.12-gke.16\",\n    \"1.13.12-gke.14\",\n    \"1.13.12-gke.13\",\n    \"1.13.12-gke.10\",\n    \"1.13.12-gke.8\",\n    \"1.13.12-gke.4\",\n    \"1.13.12-gke.2\",\n    \"1.13.11-gke.23\",\n    \"1.13.11-gke.15\",\n    \"1.13.11-gke.14\",\n    \"1.13.11-gke.12\",\n    \"1.13.11-gke.11\",\n    \"1.13.11-gke.9\",\n    \"1.13.11-gke.5\",\n    \"1.13.10-gke.7\",\n    \"1.13.10-gke.0\",\n    \"1.13.9-gke.11\",\n    \"1.13.9-gke.3\",\n    \"1.13.7-gke.24\",\n    \"1.13.7-gke.19\",\n    \"1.13.7-gke.15\",\n    \"1.13.7-gke.8\",\n    \"1.13.7-gke.0\",\n    \"1.13.6-gke.13\",\n    \"1.13.6-gke.6\",\n    \"1.13.6-gke.5\",\n    \"1.13.6-gke.0\",\n    \"1.13.5-gke.10\",\n    \"1.12.10-gke.22\",\n    \"1.12.10-gke.20\",\n    \"1.12.10-gke.19\",\n    \"1.12.10-gke.18\",\n    \"1.12.10-gke.17\",\n    \"1.12.10-gke.15\",\n    \"1.12.10-gke.13\",\n    \"1.12.10-gke.11\",\n    \"1.12.10-gke.5\",\n    \"1.12.9-gke.16\",\n    \"1.12.9-gke.15\",\n    \"1.12.9-gke.13\",\n    \"1.12.9-gke.10\",\n    \"1.12.9-gke.7\",\n    \"1.12.9-gke.3\",\n    \"1.12.8-gke.12\",\n    \"1.12.8-gke.10\",\n    \"1.12.8-gke.7\",\n    \"1.12.8-gke.6\",\n    \"1.12.7-gke.26\",\n    \"1.12.7-gke.25\",\n    \"1.12.7-gke.24\",\n    \"1.12.7-gke.22\",\n    \"1.12.7-gke.21\",\n    \"1.12.7-gke.17\",\n    \"1.12.7-gke.10\",\n    \"1.12.7-gke.7\",\n    \"1.12.6-gke.11\",\n    \"1.12.6-gke.10\",\n    \"1.12.6-gke.7\",\n    \"1.12.5-gke.10\",\n    \"1.12.5-gke.5\",\n    \"1.11.10-gke.6\",\n    \"1.11.10-gke.5\"\n  ],\n  \"defaultImageType\": \"COS_CONTAINERD\",\n  \"validImageTypes\": [\n    \"COS_CONTAINERD\",\n    \"COS\",\n    \"UBUNTU\",\n    \"UBUNTU_CONTAINERD\",\n    \"WINDOWS_LTSC\",\n    \"WINDOWS_LTSC_CONTAINERD\",\n    \"WINDOWS_SAC\",\n    \"WINDOWS_SAC_CONTAINERD\"\n  ],\n  \"validMasterVersions\": [\n    \"1.29.3-gke.1093000\",\n    \"1.29.2-gke.1521000\",\n    \"1.29.1-gke.1589018\",\n    \"1.29.1-gke.1589017\",\n    \"1.29.0-gke.1381000\",\n    \"1.28.8-gke.1095000\",\n    \"1.28.7-gke.1226000\",\n    \"1.28.7-gke.1026000\",\n    \"1.28.5-gke.1217000\",\n    \"1.28.3-gke.1286000\",\n    \"1.28.3-gke.1203001\",\n    \"1.28.3-gke.1118000\",\n    \"1.27.12-gke.1115000\",\n    \"1.27.11-gke.1202000\",\n    \"1.27.11-gke.1118000\",\n    \"1.27.11-gke.1062000\",\n    \"1.27.10-gke.1055000\",\n    \"1.27.8-gke.1067004\",\n    \"1.27.7-gke.1121002\",\n    \"1.27.3-gke.100\",\n    \"1.26.15-gke.1090000\",\n    \"1.26.14-gke.1133000\",\n    \"1.26.14-gke.1076000\",\n    \"1.26.14-gke.1044000\",\n    \"1.26.14-gke.1006000\",\n    \"1.26.13-gke.1144000\",\n    \"1.26.11-gke.1055000\",\n    \"1.26.8-gke.200\",\n    \"1.25.16-gke.1711000\",\n    \"1.25.16-gke.1648000\",\n    \"1.25.16-gke.1596000\",\n    \"1.25.16-gke.1537000\",\n    \"1.25.16-gke.1460000\",\n    \"1.25.16-gke.1041000\",\n    \"1.25.15-gke.1115000\"\n  ],\n  \"channels\": [\n    {\n      \"channel\": \"RAPID\",\n      \"defaultVersion\": \"1.29.1-gke.1589017\",\n      \"validVersions\": [\n        \"1.29.3-gke.1093000\",\n        \"1.29.2-gke.1521000\",\n        \"1.29.1-gke.1589017\",\n        \"1.28.8-gke.1095000\",\n        \"1.28.7-gke.1226000\",\n        \"1.28.7-gke.1026000\",\n        \"1.27.12-gke.1115000\",\n        \"1.27.11-gke.1202000\",\n        \"1.27.11-gke.1118000\",\n        \"1.26.15-gke.1090000\",\n        \"1.26.14-gke.1133000\",\n        \"1.26.14-gke.1076000\",\n        \"1.25.16-gke.1711000\",\n        \"1.25.16-gke.1648000\",\n        \"1.25.16-gke.1596000\"\n      ]\n    },\n    {\n      \"channel\": \"REGULAR\",\n      \"defaultVersion\": \"1.27.8-gke.1067004\",\n      \"validVersions\": [\n        \"1.29.1-gke.1589018\",\n        \"1.29.1-gke.1589017\",\n        \"1.28.7-gke.1026000\",\n        \"1.28.3-gke.1286000\",\n        \"1.27.11-gke.1062000\",\n        \"1.27.10-gke.1055000\",\n        \"1.27.8-gke.1067004\",\n        \"1.26.14-gke.1044000\",\n        \"1.26.14-gke.1006000\",\n        \"1.26.8-gke.200\",\n        \"1.25.16-gke.1537000\",\n        \"1.25.16-gke.1460000\"\n      ]\n    },\n    {\n      \"channel\": \"STABLE\",\n      \"defaultVersion\": \"1.27.8-gke.1067004\",\n      \"validVersions\": [\n        \"1.28.3-gke.1286000\",\n        \"1.28.3-gke.1203001\",\n        \"1.28.3-gke.1118000\",\n        \"1.27.8-gke.1067004\",\n        \"1.27.7-gke.1121002\",\n        \"1.26.13-gke.1144000\",\n        \"1.26.11-gke.1055000\",\n        \"1.26.8-gke.200\",\n        \"1.25.16-gke.1460000\",\n        \"1.25.16-gke.1041000\",\n        \"1.25.15-gke.1115000\"\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gke2/json-dumps/iam-policy.json",
    "content": "{\n  \"auditConfigs\": [\n    {\n      \"auditLogConfigs\": [\n        {\n          \"logType\": \"ADMIN_READ\"\n        },\n        {\n          \"logType\": \"DATA_READ\"\n        },\n        {\n          \"logType\": \"DATA_WRITE\"\n        }\n      ],\n      \"service\": \"container.googleapis.com\"\n    }\n  ],\n  \"bindings\": [\n    {\n      \"members\": [\n        \"serviceAccount:service-1234000173@gcp-sa-anthosaudit.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/anthosaudit.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-1234000173@gcp-sa-anthospolicycontroller.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/anthospolicycontroller.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-1234000173@gcp-sa-artifactregistry.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/artifactregistry.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:anthos-lab-usage-metering-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/bigquery.dataEditor\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:1234000173@cloudbuild.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/cloudbuild.builds.builder\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-1234000173@gcp-sa-cloudbuild.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/cloudbuild.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-1234000173@gcf-admin-robot.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/cloudfunctions.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-1234000173@gcp-sa-cloudkms.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/cloudkms.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-1234000173@cloudcomposer-accounts.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/composer.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-1234000173@compute-system.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/compute.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-1234000173@container-engine-robot.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/container.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-1234000173@container-analysis.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/containeranalysis.ServiceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-1234000173@containerregistry.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/containerregistry.ServiceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-1234000173@gcp-sa-ktd-control.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/containerthreatdetection.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:1234000173-compute@developer.gserviceaccount.com\",\n        \"serviceAccount:1234000173@cloudservices.gserviceaccount.com\",\n        \"serviceAccount:kcc-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com\",\n        \"serviceAccount:gcpdiag-gke-cluster-autoscaler-rrrr@appspot.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/editor\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:anthos-lab-connect-register-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/gkehub.admin\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:anthos-lab-connect-register-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/gkehub.connect\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-1234000173@gcp-sa-gkehub.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/gkehub.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-1234000173@gcp-sa-gkeonprem.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/gkeonprem.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:anthos-lab-component-access-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/iam.roleViewer\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:anthos-on-vmware-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/iam.securityAdmin\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:anthos-on-vmware-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/iam.serviceAccountAdmin\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:anthos-lab-component-access-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/iam.serviceAccountCreator\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:anthos-on-vmware-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/iam.serviceAccountKeyAdmin\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-1234000173@gcp-sa-krmapihosting.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/krmapihosting.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:anthos-lab-stackdriver-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com\",\n        \"serviceAccount:kubernetes-engine-node-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/logging.logWriter\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:anthos-lab-stackdriver-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/monitoring.dashboardEditor\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:anthos-lab-stackdriver-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com\",\n        \"serviceAccount:kubernetes-engine-node-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/monitoring.metricWriter\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:kubernetes-engine-node-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/monitoring.viewer\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-1234000173@gcp-sa-mcmetering.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/multiclustermetering.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-1234000173@gcp-sa-networkconnectivity.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/networkconnectivity.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-1234000173@gcp-sa-networkmanagement.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/networkmanagement.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:anthos-lab-stackdriver-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/opsconfigmonitoring.resourceMetadata.writer\"\n    },\n    {\n      \"members\": [\n        \"user:testuser@example.com\"\n      ],\n      \"role\": \"roles/owner\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-1234000173@gcp-sa-pubsub.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/pubsub.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:anthos-on-vmware-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/serviceusage.serviceUsageAdmin\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:anthos-lab-component-access-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/serviceusage.serviceUsageViewer\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:anthos-lab-stackdriver-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/stackdriver.resourceMetadata.writer\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:anthos-on-vmware-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/storage.admin\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-1234000173@gcp-sa-websecurityscanner.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/websecurityscanner.serviceAgent\"\n    }\n  ],\n  \"etag\": \"BwYTiuJ1iQc=\",\n  \"version\": 1\n}\n"
  },
  {
    "path": "test-data/gke2/json-dumps/iam-roles-custom.json",
    "content": "{\n  \"roles\": [\n    {\n      \"name\": \"projects/gcpdiag-gke-cluster-autoscaler-rrrr/roles/CustomKubernetesEngineClusterV\",\n      \"title\": \"Custom GKE Viewer\",\n      \"description\": \"Created on: 2023-09-08 Based on: Kubernetes Engine Cluster Viewer\",\n      \"includedPermissions\": [\n        \"container.clusters.get\",\n        \"container.clusters.list\",\n        \"container.pods.list\",\n        \"resourcemanager.projects.get\"\n      ],\n      \"etag\": \"BwYFEGlPX0c=\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gke2/json-dumps/iam-roles-get.json",
    "content": "{\n  \"roles\": [\n    {\n      \"name\": \"roles/container.nodeServiceAgent\",\n      \"title\": \"Kubernetes Engine Node Service Agent\",\n      \"description\": \"Minimal set of permission required by a GKE node to support standard capabilities such as logging and monitoring export, and image pulls.\",\n      \"includedPermissions\": [\n        \"autoscaling.sites.writeMetrics\",\n        \"logging.logEntries.create\",\n        \"monitoring.metricDescriptors.create\",\n        \"monitoring.metricDescriptors.list\",\n        \"monitoring.timeSeries.create\",\n        \"monitoring.timeSeries.list\",\n        \"resourcemanager.projects.get\",\n        \"resourcemanager.projects.list\",\n        \"serviceusage.services.use\",\n        \"storage.objects.get\",\n        \"storage.objects.list\"\n      ],\n      \"stage\": \"GA\",\n      \"etag\": \"AA==\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gke2/json-dumps/iam-service-account-policy.json",
    "content": ""
  },
  {
    "path": "test-data/gke2/json-dumps/iam-service-accounts.json",
    "content": "{\n  \"accounts\": [\n    {\n      \"email\": \"kcc-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com\",\n      \"etag\": \"MDEwMjE5MjA=\",\n      \"name\": \"projects/gcpdiag-gke-cluster-autoscaler-rrrr/serviceAccounts/kcc-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com\",\n      \"oauth2ClientId\": \"REDACTED\",\n      \"projectId\": \"gcpdiag-gke-cluster-autoscaler-rrrr\",\n      \"uniqueId\": \"117677943824492240920\"\n    },\n    {\n      \"email\": \"anthos-lab-connect-register-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com\",\n      \"etag\": \"MDEwMjE5MjA=\",\n      \"name\": \"projects/gcpdiag-gke-cluster-autoscaler-rrrr/serviceAccounts/anthos-lab-connect-register-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com\",\n      \"oauth2ClientId\": \"REDACTED\",\n      \"projectId\": \"gcpdiag-gke-cluster-autoscaler-rrrr\",\n      \"uniqueId\": \"103134321728756607945\"\n    },\n    {\n      \"displayName\": \"anthos-on-vmware-sa\",\n      \"email\": \"anthos-on-vmware-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com\",\n      \"etag\": \"MDEwMjE5MjA=\",\n      \"name\": \"projects/gcpdiag-gke-cluster-autoscaler-rrrr/serviceAccounts/anthos-on-vmware-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com\",\n      \"oauth2ClientId\": \"REDACTED\",\n      \"projectId\": \"gcpdiag-gke-cluster-autoscaler-rrrr\",\n      \"uniqueId\": \"114936822703165234250\"\n    },\n    {\n      \"email\": \"anthos-lab-usage-metering-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com\",\n      \"etag\": \"MDEwMjE5MjA=\",\n      \"name\": \"projects/gcpdiag-gke-cluster-autoscaler-rrrr/serviceAccounts/anthos-lab-usage-metering-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com\",\n      \"oauth2ClientId\": \"REDACTED\",\n      \"projectId\": \"gcpdiag-gke-cluster-autoscaler-rrrr\",\n      \"uniqueId\": \"109011342483896972653\"\n    },\n    {\n      \"email\": \"anthos-lab-component-access-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com\",\n      \"etag\": \"MDEwMjE5MjA=\",\n      \"name\": \"projects/gcpdiag-gke-cluster-autoscaler-rrrr/serviceAccounts/anthos-lab-component-access-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com\",\n      \"oauth2ClientId\": \"REDACTED\",\n      \"projectId\": \"gcpdiag-gke-cluster-autoscaler-rrrr\",\n      \"uniqueId\": \"107315232877990007458\"\n    },\n    {\n      \"displayName\": \"Compute Engine default service account\",\n      \"email\": \"1234000173-compute@developer.gserviceaccount.com\",\n      \"etag\": \"MDEwMjE5MjA=\",\n      \"name\": \"projects/gcpdiag-gke-cluster-autoscaler-rrrr/serviceAccounts/1234000173-compute@developer.gserviceaccount.com\",\n      \"oauth2ClientId\": \"REDACTED\",\n      \"projectId\": \"gcpdiag-gke-cluster-autoscaler-rrrr\",\n      \"uniqueId\": \"100384321087922198767\"\n    },\n    {\n      \"email\": \"anthos-lab-connect-agent-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com\",\n      \"etag\": \"MDEwMjE5MjA=\",\n      \"name\": \"projects/gcpdiag-gke-cluster-autoscaler-rrrr/serviceAccounts/anthos-lab-connect-agent-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com\",\n      \"oauth2ClientId\": \"REDACTED\",\n      \"projectId\": \"gcpdiag-gke-cluster-autoscaler-rrrr\",\n      \"uniqueId\": \"115445896113281255292\"\n    },\n    {\n      \"displayName\": \"App Engine default service account\",\n      \"email\": \"gcpdiag-gke-cluster-autoscaler-rrrr@appspot.gserviceaccount.com\",\n      \"etag\": \"MDEwMjE5MjA=\",\n      \"name\": \"projects/gcpdiag-gke-cluster-autoscaler-rrrr/serviceAccounts/gcpdiag-gke-cluster-autoscaler-rrrr@appspot.gserviceaccount.com\",\n      \"oauth2ClientId\": \"REDACTED\",\n      \"projectId\": \"gcpdiag-gke-cluster-autoscaler-rrrr\",\n      \"uniqueId\": \"115813325620452453327\"\n    },\n    {\n      \"displayName\": \"GKE Node Service Account\",\n      \"email\": \"kubernetes-engine-node-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com\",\n      \"etag\": \"MDEwMjE5MjA=\",\n      \"name\": \"projects/gcpdiag-gke-cluster-autoscaler-rrrr/serviceAccounts/kubernetes-engine-node-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com\",\n      \"oauth2ClientId\": \"REDACTED\",\n      \"projectId\": \"gcpdiag-gke-cluster-autoscaler-rrrr\",\n      \"uniqueId\": \"109018276196562457231\"\n    },\n    {\n      \"email\": \"anthos-lab-stackdriver-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com\",\n      \"etag\": \"MDEwMjE5MjA=\",\n      \"name\": \"projects/gcpdiag-gke-cluster-autoscaler-rrrr/serviceAccounts/anthos-lab-stackdriver-sa@gcpdiag-gke-cluster-autoscaler-rrrr.iam.gserviceaccount.com\",\n      \"oauth2ClientId\": \"REDACTED\",\n      \"projectId\": \"gcpdiag-gke-cluster-autoscaler-rrrr\",\n      \"uniqueId\": \"116437026027565218333\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gke2/json-dumps/logging-entries-1.json",
    "content": "{\n  \"entries\": [\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-12340002@container-engine-robot.iam.gserviceaccount.com\"\n        },\n        \"requestMetadata\": {\n          \"callerIp\": \"2002:ae8:2d45::\",\n          \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 GoogleContainerEngine/v1\"\n        },\n        \"serviceName\": \"compute.googleapis.com\",\n        \"methodName\": \"beta.compute.instanceGroupManagers.insert\",\n        \"resourceName\": \"projects/gcpdiag-gke1-aaaa/zones/europe-west1-b/instanceGroupManagers/gke-gke2-default-pool-11b6ca8e-grp\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instanceGroupManagers.insert\"\n        }\n      },\n      \"insertId\": \"-4pqrg9dartq\",\n      \"resource\": {\n        \"type\": \"gce_instance_group_manager\",\n        \"labels\": {\n          \"instance_group_manager_id\": \"8700821884762314590\",\n          \"instance_group_manager_name\": \"gke-gke2-default-pool-11b6ca8e-grp\",\n          \"project_id\": \"gcpdiag-gke1-aaaa\",\n          \"location\": \"europe-west1-b\"\n        }\n      },\n      \"timestamp\": \"2021-11-24T16:35:22.615295Z\",\n      \"severity\": \"NOTICE\",\n      \"logName\": \"projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1637771697161-5d18b703b865a-dccbda35-ad8629c7\",\n        \"producer\": \"compute.googleapis.com\",\n        \"last\": true\n      },\n      \"receiveTimestamp\": \"2021-11-24T16:35:23.172680503Z\"\n    },\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-12340002@container-engine-robot.iam.gserviceaccount.com\"\n        },\n        \"requestMetadata\": {\n          \"callerIp\": \"2002:ae8:2d45::\",\n          \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 GoogleContainerEngine/v1\"\n        },\n        \"serviceName\": \"compute.googleapis.com\",\n        \"methodName\": \"beta.compute.instanceGroupManagers.insert\",\n        \"resourceName\": \"projects/gcpdiag-gke1-aaaa/zones/europe-west1-d/instanceGroupManagers/gke-gke2-default-pool-98631c84-grp\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instanceGroupManagers.insert\"\n        }\n      },\n      \"insertId\": \"-nuwdobe1byj2\",\n      \"resource\": {\n        \"type\": \"gce_instance_group_manager\",\n        \"labels\": {\n          \"instance_group_manager_name\": \"gke-gke2-default-pool-98631c84-grp\",\n          \"project_id\": \"gcpdiag-gke1-aaaa\",\n          \"location\": \"europe-west1-d\",\n          \"instance_group_manager_id\": \"6471686162526492481\"\n        }\n      },\n      \"timestamp\": \"2021-11-24T16:35:10.014049Z\",\n      \"severity\": \"NOTICE\",\n      \"logName\": \"projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1637771693512-5d18b7003d60c-2f9aaeaf-535e4f63\",\n        \"producer\": \"compute.googleapis.com\",\n        \"last\": true\n      },\n      \"receiveTimestamp\": \"2021-11-24T16:35:10.306123333Z\"\n    },\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-12340002@container-engine-robot.iam.gserviceaccount.com\"\n        },\n        \"requestMetadata\": {\n          \"callerIp\": \"2002:ae8:2d45::\",\n          \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 GoogleContainerEngine/v1\"\n        },\n        \"serviceName\": \"compute.googleapis.com\",\n        \"methodName\": \"beta.compute.instanceGroupManagers.insert\",\n        \"resourceName\": \"projects/gcpdiag-gke1-aaaa/zones/europe-west1-c/instanceGroupManagers/gke-gke2-default-pool-5e5781dd-grp\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instanceGroupManagers.insert\"\n        }\n      },\n      \"insertId\": \"tf2uocd1kpc\",\n      \"resource\": {\n        \"type\": \"gce_instance_group_manager\",\n        \"labels\": {\n          \"instance_group_manager_name\": \"gke-gke2-default-pool-5e5781dd-grp\",\n          \"project_id\": \"gcpdiag-gke1-aaaa\",\n          \"instance_group_manager_id\": \"5205754198527039297\",\n          \"location\": \"europe-west1-c\"\n        }\n      },\n      \"timestamp\": \"2021-11-24T16:35:08.922507Z\",\n      \"severity\": \"NOTICE\",\n      \"logName\": \"projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1637771693418-5d18b700269e6-19f4d541-4d012584\",\n        \"producer\": \"compute.googleapis.com\",\n        \"last\": true\n      },\n      \"receiveTimestamp\": \"2021-11-24T16:35:09.484397071Z\"\n    },\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-12340002@container-engine-robot.iam.gserviceaccount.com\"\n        },\n        \"requestMetadata\": {\n          \"callerIp\": \"2002:a05:601a:1550::\",\n          \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 GoogleContainerEngine/v1\"\n        },\n        \"serviceName\": \"compute.googleapis.com\",\n        \"methodName\": \"beta.compute.instanceGroupManagers.insert\",\n        \"resourceName\": \"projects/gcpdiag-gke1-aaaa/zones/europe-west1-c/instanceGroupManagers/gke-gke3-default-pool-013fb293-grp\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instanceGroupManagers.insert\"\n        }\n      },\n      \"insertId\": \"tf2uocd1kou\",\n      \"resource\": {\n        \"type\": \"gce_instance_group_manager\",\n        \"labels\": {\n          \"project_id\": \"gcpdiag-gke1-aaaa\",\n          \"instance_group_manager_id\": \"3383879657688651622\",\n          \"location\": \"europe-west1-c\",\n          \"instance_group_manager_name\": \"gke-gke3-default-pool-013fb293-grp\"\n        }\n      },\n      \"timestamp\": \"2021-11-24T16:34:38.479723Z\",\n      \"severity\": \"NOTICE\",\n      \"logName\": \"projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1637771657193-5d18b6dd9a974-6dee9d9a-988a4f6c\",\n        \"producer\": \"compute.googleapis.com\",\n        \"last\": true\n      },\n      \"receiveTimestamp\": \"2021-11-24T16:34:39.479072691Z\"\n    },\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-12340002@container-engine-robot.iam.gserviceaccount.com\"\n        },\n        \"requestMetadata\": {\n          \"callerIp\": \"2002:a05:601a:1550::\",\n          \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 GoogleContainerEngine/v1\"\n        },\n        \"serviceName\": \"compute.googleapis.com\",\n        \"methodName\": \"beta.compute.instanceGroupManagers.insert\",\n        \"resourceName\": \"projects/gcpdiag-gke1-aaaa/zones/europe-west1-b/instanceGroupManagers/gke-gke3-default-pool-597c9ca2-grp\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instanceGroupManagers.insert\"\n        }\n      },\n      \"insertId\": \"-4pqrg9darqs\",\n      \"resource\": {\n        \"type\": \"gce_instance_group_manager\",\n        \"labels\": {\n          \"location\": \"europe-west1-b\",\n          \"instance_group_manager_id\": \"5404218744580069225\",\n          \"instance_group_manager_name\": \"gke-gke3-default-pool-597c9ca2-grp\",\n          \"project_id\": \"gcpdiag-gke1-aaaa\"\n        }\n      },\n      \"timestamp\": \"2021-11-24T16:34:37.484721Z\",\n      \"severity\": \"NOTICE\",\n      \"logName\": \"projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1637771652136-5d18b6d8c7d4a-678a3896-62f6d812\",\n        \"producer\": \"compute.googleapis.com\",\n        \"last\": true\n      },\n      \"receiveTimestamp\": \"2021-11-24T16:34:38.168845698Z\"\n    },\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-12340002@container-engine-robot.iam.gserviceaccount.com\"\n        },\n        \"requestMetadata\": {\n          \"callerIp\": \"2002:a05:601a:1550::\",\n          \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 GoogleContainerEngine/v1\"\n        },\n        \"serviceName\": \"compute.googleapis.com\",\n        \"methodName\": \"beta.compute.instanceGroupManagers.insert\",\n        \"resourceName\": \"projects/gcpdiag-gke1-aaaa/zones/europe-west1-d/instanceGroupManagers/gke-gke3-default-pool-c125bae7-grp\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instanceGroupManagers.insert\"\n        }\n      },\n      \"insertId\": \"-31olexd4rpi\",\n      \"resource\": {\n        \"type\": \"gce_instance_group_manager\",\n        \"labels\": {\n          \"instance_group_manager_name\": \"gke-gke3-default-pool-c125bae7-grp\",\n          \"location\": \"europe-west1-d\",\n          \"project_id\": \"gcpdiag-gke1-aaaa\",\n          \"instance_group_manager_id\": \"1403931912127633256\"\n        }\n      },\n      \"timestamp\": \"2021-11-24T16:34:35.389660Z\",\n      \"severity\": \"NOTICE\",\n      \"logName\": \"projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1637771654866-5d18b6db6263d-009ad0ed-4b71b356\",\n        \"producer\": \"compute.googleapis.com\",\n        \"last\": true\n      },\n      \"receiveTimestamp\": \"2021-11-24T16:34:35.872428070Z\"\n    },\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"service-12340002@container-engine-robot.iam.gserviceaccount.com\"\n        },\n        \"requestMetadata\": {\n          \"callerIp\": \"2002:a17:907:3ea4::\",\n          \"callerSuppliedUserAgent\": \"google-api-go-client/0.5 GoogleContainerEngine/v1\"\n        },\n        \"serviceName\": \"compute.googleapis.com\",\n        \"methodName\": \"beta.compute.instanceGroupManagers.insert\",\n        \"resourceName\": \"projects/gcpdiag-gke1-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-dc4a8b29-grp\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instanceGroupManagers.insert\"\n        }\n      },\n      \"insertId\": \"-tt9mudi768\",\n      \"resource\": {\n        \"type\": \"gce_instance_group_manager\",\n        \"labels\": {\n          \"location\": \"europe-west4-a\",\n          \"instance_group_manager_id\": \"318228385164940970\",\n          \"project_id\": \"gcpdiag-gke1-aaaa\",\n          \"instance_group_manager_name\": \"gke-gke1-default-pool-dc4a8b29-grp\"\n        }\n      },\n      \"timestamp\": \"2021-11-24T16:29:21.943390Z\",\n      \"severity\": \"NOTICE\",\n      \"logName\": \"projects/gcpdiag-gke1-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1637771331527-5d18b5a706163-f238dbec-106555c8\",\n        \"producer\": \"compute.googleapis.com\",\n        \"last\": true\n      },\n      \"receiveTimestamp\": \"2021-11-24T16:29:22.710110506Z\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gke2/json-dumps/monitoring-query.json",
    "content": "{\n  \"timeSeriesDescriptor\": {\n    \"labelDescriptors\": [\n      {\n        \"key\": \"resource.project_id\"\n      },\n      {\n        \"key\": \"resource.service\"\n      },\n      {\n        \"key\": \"resource.location\"\n      },\n      {\n        \"key\": \"metric.limit_name\"\n      },\n      {\n        \"key\": \"metric.quota_metric\"\n      }\n    ],\n    \"pointDescriptors\": [\n      {\n        \"key\": \"value_exceeded_count_true\",\n        \"valueType\": \"INT64\",\n        \"metricKind\": \"GAUGE\",\n        \"unit\": \"1\"\n      }\n    ]\n  },\n  \"timeSeriesData\": [\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"gcpdiag-gke-cluster-autoscaler-rrrr\"\n        },\n        {\n          \"stringValue\": \"logging.googleapis.com\"\n        },\n        {\n          \"stringValue\": \"global\"\n        },\n        {\n          \"stringValue\": \"WriteRequestsPerMinutePerProject\"\n        },\n        {\n          \"stringValue\": \"logging.googleapis.com/write_requests\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"int64Value\": \"96\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-05-15T16:04:06.985676Z\",\n            \"endTime\": \"2024-05-15T16:04:06.985676Z\"\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gke2/json-dumps/project.json",
    "content": "{\n  \"name\": \"projects/1234000173\",\n  \"parent\": \"folders/373737373737\",\n  \"projectId\": \"gcpdiag-gke-cluster-autoscaler-rrrr\",\n  \"state\": \"ACTIVE\",\n  \"displayName\": \"gcpdiag-gke-cluster-autoscaler-rrrr\",\n  \"createTime\": \"2023-05-19T11:14:22.028848Z\",\n  \"updateTime\": \"2023-05-19T11:14:22.028848Z\",\n  \"etag\": \"W/\\\"002f918ce787cdc6\\\"\"\n}\n"
  },
  {
    "path": "test-data/gke2/json-dumps/services.json",
    "content": "{\n  \"services\": [\n    {\n      \"name\": \"projects/1234000173/services/analyticshub.googleapis.com\",\n      \"config\": {\n        \"name\": \"analyticshub.googleapis.com\",\n        \"title\": \"Analytics Hub API\",\n        \"documentation\": {\n          \"summary\": \"Exchange data and analytics assets securely and efficiently.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234000173\"\n    },\n    {\n      \"name\": \"projects/1234000173/services/anthos.googleapis.com\",\n      \"config\": {\n        \"name\": \"anthos.googleapis.com\",\n        \"title\": \"Anthos API\",\n        \"documentation\": {\n          \"summary\": \"Anthos is a managed hybrid cloud solution\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234000173\"\n    },\n    {\n      \"name\": \"projects/1234000173/services/anthosaudit.googleapis.com\",\n      \"config\": {\n        \"name\": \"anthosaudit.googleapis.com\",\n        \"title\": \"Anthos Audit API\",\n        \"documentation\": {\n          \"summary\": \"Anthos is a managed hybrid cloud solution\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"serviceruntime.googleapis.com/api\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_version\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_method\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/consumer_project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/consumer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/producer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/consumer_resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/api\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/api/consumer/request_count\",\n                \"serviceruntime.googleapis.com/api/consumer/error_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_used_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_refund_count\",\n                \"serviceruntime.googleapis.com/api/consumer/total_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_overhead_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/backend_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/response_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer\",\n                \"serviceruntime.googleapis.com/quota/used\",\n                \"serviceruntime.googleapis.com/quota/limit\",\n                \"serviceruntime.googleapis.com/quota/exceeded\",\n                \"serviceruntime.googleapis.com/allocation/consumer/quota_used_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/consumer_quota\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/quota/rate/consumer/used_count\",\n                \"serviceruntime.googleapis.com/quota/rate/consumer/refund_count\",\n                \"serviceruntime.googleapis.com/quota/allocation/consumer/usage\",\n                \"serviceruntime.googleapis.com/quota/consumer/limit\",\n                \"serviceruntime.googleapis.com/quota/consumer/exceeded\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234000173\"\n    },\n    {\n      \"name\": \"projects/1234000173/services/anthosconfigmanagement.googleapis.com\",\n      \"config\": {\n        \"name\": \"anthosconfigmanagement.googleapis.com\",\n        \"title\": \"Anthos Config Management API\",\n        \"documentation\": {\n          \"summary\": \"Anthos Config Management\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234000173\"\n    },\n    {\n      \"name\": \"projects/1234000173/services/anthosgke.googleapis.com\",\n      \"config\": {\n        \"name\": \"anthosgke.googleapis.com\",\n        \"title\": \"Anthos GKE API\",\n        \"documentation\": {\n          \"summary\": \"Anthos is a managed hybrid cloud solution\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"serviceruntime.googleapis.com/api\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_version\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_method\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/consumer_project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/consumer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/producer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/consumer_resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/api\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/api/consumer/request_count\",\n                \"serviceruntime.googleapis.com/api/consumer/error_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_used_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_refund_count\",\n                \"serviceruntime.googleapis.com/api/consumer/total_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_overhead_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/backend_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/response_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer\",\n                \"serviceruntime.googleapis.com/quota/used\",\n                \"serviceruntime.googleapis.com/quota/limit\",\n                \"serviceruntime.googleapis.com/quota/exceeded\",\n                \"serviceruntime.googleapis.com/allocation/consumer/quota_used_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/consumer_quota\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/quota/rate/consumer/used_count\",\n                \"serviceruntime.googleapis.com/quota/rate/consumer/refund_count\",\n                \"serviceruntime.googleapis.com/quota/allocation/consumer/usage\",\n                \"serviceruntime.googleapis.com/quota/consumer/limit\",\n                \"serviceruntime.googleapis.com/quota/consumer/exceeded\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234000173\"\n    },\n    {\n      \"name\": \"projects/1234000173/services/anthospolicycontroller.googleapis.com\",\n      \"config\": {\n        \"name\": \"anthospolicycontroller.googleapis.com\",\n        \"title\": \"Anthos Policy Controller API\",\n        \"documentation\": {\n          \"summary\": \"Anthos Policy Controller\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234000173\"\n    },\n    {\n      \"name\": \"projects/1234000173/services/artifactregistry.googleapis.com\",\n      \"config\": {\n        \"name\": \"artifactregistry.googleapis.com\",\n        \"title\": \"Artifact Registry API\",\n        \"documentation\": {\n          \"summary\": \"Store and manage build artifacts in a scalable and integrated service built on Google infrastructure.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"artifactregistry.googleapis.com/Location\",\n            \"displayName\": \"Artifact Registry Location\",\n            \"description\": \"A location in Artifact Registry.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP resource container associated with this resource, such as \\\"my_project\\\" or \\\"organizations/5678\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"artifactregistry.googleapis.com/Project\",\n            \"displayName\": \"Artifact Registry Project\",\n            \"description\": \"A Cloud project in Artifact Registry.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP resource container associated with this resource, such as \\\"my_project\\\" or \\\"organizations/5678\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"artifactregistry.googleapis.com/Repository\",\n            \"displayName\": \"Artifact Registry Repository\",\n            \"description\": \"A repository in Artifact Registry.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP resource container associated with this resource, such as \\\"my_project\\\" or \\\"organizations/5678\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              },\n              {\n                \"key\": \"repository_id\",\n                \"description\": \"The identifier of the Artifact Registry repository, such as \\\"my_repository\\\".\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"artifactregistry.googleapis.com/Location\",\n              \"metrics\": [\n                \"artifactregistry.googleapis.com/asia_multi_region_upstream_host_reads\",\n                \"artifactregistry.googleapis.com/europe_multi_region_upstream_host_reads\",\n                \"artifactregistry.googleapis.com/project_asia_multi_region_upstream_host_reads\",\n                \"artifactregistry.googleapis.com/project_europe_multi_region_upstream_host_reads\",\n                \"artifactregistry.googleapis.com/project_region_upstream_host_reads\",\n                \"artifactregistry.googleapis.com/project_us_multi_region_upstream_host_reads\",\n                \"artifactregistry.googleapis.com/quota/asia_multi_region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/asia_multi_region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/quota/europe_multi_region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/europe_multi_region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/quota/project_asia_multi_region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/project_asia_multi_region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/quota/project_europe_multi_region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/project_europe_multi_region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/quota/project_region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/project_region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/quota/project_us_multi_region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/project_us_multi_region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/quota/region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/quota/us_multi_region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/us_multi_region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/region_upstream_host_reads\",\n                \"artifactregistry.googleapis.com/us_multi_region_upstream_host_reads\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"artifactregistry.googleapis.com/Location\",\n              \"metrics\": [\n                \"artifactregistry.googleapis.com/quota/asia_multi_region_upstream_host_reads/limit\",\n                \"artifactregistry.googleapis.com/quota/europe_multi_region_upstream_host_reads/limit\",\n                \"artifactregistry.googleapis.com/quota/project_asia_multi_region_upstream_host_reads/limit\",\n                \"artifactregistry.googleapis.com/quota/project_europe_multi_region_upstream_host_reads/limit\",\n                \"artifactregistry.googleapis.com/quota/project_region_upstream_host_reads/limit\",\n                \"artifactregistry.googleapis.com/quota/project_us_multi_region_upstream_host_reads/limit\",\n                \"artifactregistry.googleapis.com/quota/region_upstream_host_reads/limit\",\n                \"artifactregistry.googleapis.com/quota/us_multi_region_upstream_host_reads/limit\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"artifactregistry.googleapis.com/Project\",\n              \"metrics\": [\n                \"artifactregistry.googleapis.com/project/api/request_count\",\n                \"artifactregistry.googleapis.com/project/api/request_latencies\",\n                \"artifactregistry.googleapis.com/project/request_count\",\n                \"artifactregistry.googleapis.com/project/request_latencies\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"artifactregistry.googleapis.com/Repository\",\n              \"metrics\": [\n                \"artifactregistry.googleapis.com/repository/api/request_count\",\n                \"artifactregistry.googleapis.com/repository/api/request_latencies\",\n                \"artifactregistry.googleapis.com/repository/request_count\",\n                \"artifactregistry.googleapis.com/repository/request_latencies\",\n                \"artifactregistry.googleapis.com/repository/size\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234000173\"\n    },\n    {\n      \"name\": \"projects/1234000173/services/autoscaling.googleapis.com\",\n      \"config\": {\n        \"name\": \"autoscaling.googleapis.com\",\n        \"title\": \"Cloud Autoscaling API\",\n        \"documentation\": {\n          \"summary\": \"An API for the Cloud Autoscaling for consuming autoscaling signals.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234000173\"\n    },\n    {\n      \"name\": \"projects/1234000173/services/bigquery.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigquery.googleapis.com\",\n        \"title\": \"BigQuery API\",\n        \"documentation\": {\n          \"summary\": \"A data platform for customers to create, manage, share and query data.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"bigquery.googleapis.com/Table\",\n            \"displayName\": \"BigQuery Table Resource.\",\n            \"description\": \"BigQuery Table Resource.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP resource container associated with this resource, such as \\\"my-project\\\" or \\\"organizations/123\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The cloud location of the BigQuery table.\"\n              },\n              {\n                \"key\": \"table_reference\",\n                \"description\": \"The table reference in the format of project_id:dataset_id.table_id for the BigQuery table.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"bigquery.googleapis.com/Location\",\n            \"displayName\": \"CheckIamPolicy Request Location\",\n            \"description\": \"A BigQuery Location (sometimes called Region).\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The id of the GCP resource container associated with this resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"bigquery.googleapis.com/InternalDifferentialPrivacyBudget\",\n            \"displayName\": \"Differential Privacy Budget\",\n            \"description\": \"Differential Privacy Budget.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container associated with the metric.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location for the quota.\"\n              },\n              {\n                \"key\": \"budget_id\",\n                \"description\": \"A unique identifier for the budget basis of the privacy budget (e.g view_uuid for per-view budgets).\"\n              },\n              {\n                \"key\": \"multi_region\",\n                \"description\": \"The multi-region identifier for the associated resource (e.g \\\"us\\\", \\\"eu\\\"). Used only for multi-region quota metrics.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/Table\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_eu/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_us/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_eu/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_us/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/Location\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/quota/internalCheckIamPolicyRequests/exceeded\",\n                \"bigquery.googleapis.com/quota/internalCheckIamPolicyRequests/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/Location\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/quota/internalCheckIamPolicyRequests/limit\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/Table\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org/limit\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org/usage\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_eu/limit\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_eu/usage\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_us/limit\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_us/usage\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project/limit\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project/usage\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_eu/limit\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_eu/usage\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_us/limit\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_us/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/InternalDifferentialPrivacyBudget\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/internal/privacybudget/dp_delta_budget\",\n                \"bigquery.googleapis.com/internal/privacybudget/dp_delta_budget_multi_regional\",\n                \"bigquery.googleapis.com/internal/privacybudget/dp_epsilon_budget\",\n                \"bigquery.googleapis.com/internal/privacybudget/dp_epsilon_budget_multi_regional\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget_multi_regional/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget_multi_regional/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/InternalDifferentialPrivacyBudget\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget/limit\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget/usage\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget_multi_regional/limit\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget_multi_regional/usage\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget/limit\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget/usage\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget_multi_regional/limit\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget_multi_regional/usage\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234000173\"\n    },\n    {\n      \"name\": \"projects/1234000173/services/bigqueryconnection.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigqueryconnection.googleapis.com\",\n        \"title\": \"BigQuery Connection API\",\n        \"documentation\": {\n          \"summary\": \"Allows users to manage BigQuery connections to external data sources.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234000173\"\n    },\n    {\n      \"name\": \"projects/1234000173/services/bigquerydatapolicy.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigquerydatapolicy.googleapis.com\",\n        \"title\": \"BigQuery Data Policy API\",\n        \"documentation\": {\n          \"summary\": \"Allows users to manage BigQuery data policies.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234000173\"\n    },\n    {\n      \"name\": \"projects/1234000173/services/bigquerymigration.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigquerymigration.googleapis.com\",\n        \"title\": \"BigQuery Migration API\",\n        \"documentation\": {\n          \"summary\": \"The migration service, exposing apis for migration jobs operations, and agent management.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234000173\"\n    },\n    {\n      \"name\": \"projects/1234000173/services/bigqueryreservation.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigqueryreservation.googleapis.com\",\n        \"title\": \"BigQuery Reservation API\",\n        \"documentation\": {\n          \"summary\": \"A service to modify your BigQuery flat-rate reservations.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234000173\"\n    },\n    {\n      \"name\": \"projects/1234000173/services/bigquerystorage.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigquerystorage.googleapis.com\",\n        \"title\": \"BigQuery Storage API\",\n        \"documentation\": {},\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"bigquerystorage.googleapis.com/DataflowWrite\",\n            \"displayName\": \"BigQuery Storage Write API metrics for Dataflow jobs.\",\n            \"description\": \"BigQuery Storage Write API metrics for Dataflow jobs.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project/folder/org associated with this resource. This is the project that runs the Dataflow job.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The BigQuery region in which the Storage API server locates.\"\n              },\n              {\n                \"key\": \"job_name\",\n                \"description\": \"The name of the Dataflow job this worker belongs to.\"\n              },\n              {\n                \"key\": \"job_id\",\n                \"description\": \"The id of the dataflow job the worker belongs to.\"\n              },\n              {\n                \"key\": \"worker_id\",\n                \"description\": \"The ID of the worker, unique for this job_id.\"\n              },\n              {\n                \"key\": \"destination_project\",\n                \"description\": \"The project of BigQuery destination table of the Dataflow job.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"bigquerystorage.googleapis.com/DataflowWrite\",\n              \"metrics\": [\n                \"bigquerystorage.googleapis.com/dataflow_write/request_count\",\n                \"bigquerystorage.googleapis.com/dataflow_write/uploaded_row_count\",\n                \"bigquerystorage.googleapis.com/dataflow_write/uploaded_bytes_count\",\n                \"bigquerystorage.googleapis.com/dataflow_write/billed_bytes_count\",\n                \"bigquerystorage.googleapis.com/dataflow_write/connection_results_count\",\n                \"bigquerystorage.googleapis.com/dataflow_write/server_side_latencies\",\n                \"bigquerystorage.googleapis.com/dataflow_write/transcoding_latencies\",\n                \"bigquerystorage.googleapis.com/dataflow_write/concurrent_connections\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234000173\"\n    },\n    {\n      \"name\": \"projects/1234000173/services/cloudaicompanion.googleapis.com\",\n      \"config\": {\n        \"name\": \"cloudaicompanion.googleapis.com\",\n        \"title\": \"Cloud AI Companion API\",\n        \"documentation\": {\n          \"summary\": \"The Cloud AI Companion API for Duet AI.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234000173\"\n    },\n    {\n      \"name\": \"projects/1234000173/services/cloudapis.googleapis.com\",\n      \"config\": {\n        \"name\": \"cloudapis.googleapis.com\",\n        \"title\": \"Google Cloud APIs\",\n        \"documentation\": {\n          \"summary\": \"This is a meta service for Google Cloud APIs for convenience. Enabling this service enables all commonly used Google Cloud APIs for the project. By default, it is enabled for all projects created through Google Cloud Console and Google Cloud SDK, and should be manually enabled for all other projects that intend to use Google Cloud APIs. Note: disabling this service has no effect on other services.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234000173\"\n    },\n    {\n      \"name\": \"projects/1234000173/services/cloudbuild.googleapis.com\",\n      \"config\": {\n        \"name\": \"cloudbuild.googleapis.com\",\n        \"title\": \"Cloud Build API\",\n        \"documentation\": {\n          \"summary\": \"Creates and manages builds on Google Cloud Platform.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"cloudbuild.googleapis.com/Location\",\n            \"displayName\": \"Cloud Build Location\",\n            \"description\": \"A location in the Cloud Build API.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identified of the GCP resource container associated with this resource, such as \\\"my_project\\\" or \\\"organizations/5678\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"cloudbuild.googleapis.com/GkeInstance\",\n            \"displayName\": \"GKE instance\",\n            \"description\": \"GKE instance.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP resource container associated with this resource, such as \\\"my_project\\\" or \\\"organizations/5678\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              },\n              {\n                \"key\": \"gke_instance_id\",\n                \"description\": \"The identifier of the GKE instance.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"cloudbuild.googleapis.com/PrivatePool\",\n            \"displayName\": \"Private Worker Pool\",\n            \"description\": \"Private Worker Pool.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP resource container associated with this resource, such as \\\"my_project\\\" or \\\"organizations/5678\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              },\n              {\n                \"key\": \"worker_pool_uuid\",\n                \"description\": \"The UUID of the worker pool.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"cloudbuild.googleapis.com/GkeInstance\",\n              \"metrics\": [\n                \"cloudbuild.googleapis.com/internal/gke_instance/pod\",\n                \"cloudbuild.googleapis.com/internal/gke_instance/node\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"cloudbuild.googleapis.com/PrivatePool\",\n              \"metrics\": [\n                \"cloudbuild.googleapis.com/internal/private_pool_ready_worker_replicas\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"cloudbuild.googleapis.com/Location\",\n              \"metrics\": [\n                \"cloudbuild.googleapis.com/concurrent_public_pool_build_cpus\",\n                \"cloudbuild.googleapis.com/quota/concurrent_public_pool_build_cpus/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"cloudbuild.googleapis.com/Location\",\n              \"metrics\": [\n                \"cloudbuild.googleapis.com/quota/concurrent_public_pool_build_cpus/limit\",\n                \"cloudbuild.googleapis.com/quota/concurrent_public_pool_build_cpus/usage\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234000173\"\n    },\n    {\n      \"name\": \"projects/1234000173/services/cloudfunctions.googleapis.com\",\n      \"config\": {\n        \"name\": \"cloudfunctions.googleapis.com\",\n        \"title\": \"Cloud Functions API\",\n        \"documentation\": {\n          \"summary\": \"Manages lightweight user-provided functions executed in response to events.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"cloudfunctions.googleapis.com/function\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloudfunctions.googleapis.com/function_name\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/api\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_version\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_method\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/consumer_project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/consumer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/producer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/consumer_resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"cloudfunctions.googleapis.com/function\",\n              \"metrics\": [\n                \"cloudfunctions.googleapis.com/function/execution_times\",\n                \"cloudfunctions.googleapis.com/function/execution_count\",\n                \"cloudfunctions.googleapis.com/function/user_memory_bytes\",\n                \"cloudfunctions.googleapis.com/function/network_egress\",\n                \"cloudfunctions.googleapis.com/function/active_instances\",\n                \"cloudfunctions.googleapis.com/function/execution_delays\",\n                \"cloudfunctions.googleapis.com/function/execution_count_internal\",\n                \"cloudfunctions.googleapis.com/function/supervisor_gcu_times\",\n                \"cloudfunctions.googleapis.com/function/supervisor_memory_bytes\",\n                \"cloudfunctions.googleapis.com/function/user_gcu_times\",\n                \"cloudfunctions.googleapis.com/function/supervisor_chemist_rpc_error_count\",\n                \"cloudfunctions.googleapis.com/function/supervisor_controlled_death_count\",\n                \"cloudfunctions.googleapis.com/function/supervisor_report_count\",\n                \"cloudfunctions.googleapis.com/function/supervisor_report_latencies\",\n                \"cloudfunctions.googleapis.com/function/supervisor_phase_latencies\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/api\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/api/consumer/request_count\",\n                \"serviceruntime.googleapis.com/api/consumer/error_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_used_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_refund_count\",\n                \"serviceruntime.googleapis.com/api/consumer/total_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_overhead_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/backend_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/response_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer\",\n                \"serviceruntime.googleapis.com/quota/used\",\n                \"serviceruntime.googleapis.com/quota/limit\",\n                \"serviceruntime.googleapis.com/quota/exceeded\",\n                \"serviceruntime.googleapis.com/allocation/consumer/quota_used_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/consumer_quota\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/quota/rate/consumer/used_count\",\n                \"serviceruntime.googleapis.com/quota/rate/consumer/refund_count\",\n                \"serviceruntime.googleapis.com/quota/allocation/consumer/usage\",\n                \"serviceruntime.googleapis.com/quota/consumer/limit\",\n                \"serviceruntime.googleapis.com/quota/consumer/exceeded\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234000173\"\n    },\n    {\n      \"name\": \"projects/1234000173/services/cloudkms.googleapis.com\",\n      \"config\": {\n        \"name\": \"cloudkms.googleapis.com\",\n        \"title\": \"Cloud Key Management Service (KMS) API\",\n        \"documentation\": {\n          \"summary\": \"Manages keys and performs cryptographic operations in a central cloud service, for direct use by other cloud resources and applications.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"cloudkms.googleapis.com/Project\",\n            \"displayName\": \"KMS project\",\n            \"description\": \"KMS project.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project associated with this resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location of the resource.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"cloudkms.googleapis.com/Project\",\n              \"metrics\": [\n                \"cloudkms.googleapis.com/ekm/external/request_count\",\n                \"cloudkms.googleapis.com/ekm/external/request_latencies\",\n                \"cloudkms.googleapis.com/external_kms_multiregion_requests\",\n                \"cloudkms.googleapis.com/hsm_multiregion_asymmetric_requests\",\n                \"cloudkms.googleapis.com/hsm_multiregion_symmetric_requests\",\n                \"cloudkms.googleapis.com/peak_qps\",\n                \"cloudkms.googleapis.com/quota/external_kms_multiregion_requests/exceeded\",\n                \"cloudkms.googleapis.com/quota/external_kms_multiregion_requests/usage\",\n                \"cloudkms.googleapis.com/quota/hsm_multiregion_asymmetric_requests/exceeded\",\n                \"cloudkms.googleapis.com/quota/hsm_multiregion_asymmetric_requests/usage\",\n                \"cloudkms.googleapis.com/quota/hsm_multiregion_symmetric_requests/exceeded\",\n                \"cloudkms.googleapis.com/quota/hsm_multiregion_symmetric_requests/usage\",\n                \"cloudkms.googleapis.com/quota/software_multiregion_asymmetric_requests/exceeded\",\n                \"cloudkms.googleapis.com/quota/software_multiregion_asymmetric_requests/usage\",\n                \"cloudkms.googleapis.com/quota/software_multiregion_symmetric_requests/exceeded\",\n                \"cloudkms.googleapis.com/quota/software_multiregion_symmetric_requests/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"cloudkms.googleapis.com/Project\",\n              \"metrics\": [\n                \"cloudkms.googleapis.com/quota/external_kms_multiregion_requests/limit\",\n                \"cloudkms.googleapis.com/quota/hsm_multiregion_asymmetric_requests/limit\",\n                \"cloudkms.googleapis.com/quota/hsm_multiregion_symmetric_requests/limit\",\n                \"cloudkms.googleapis.com/quota/software_multiregion_asymmetric_requests/limit\",\n                \"cloudkms.googleapis.com/quota/software_multiregion_symmetric_requests/limit\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234000173\"\n    },\n    {\n      \"name\": \"projects/1234000173/services/cloudresourcemanager.googleapis.com\",\n      \"config\": {\n        \"name\": \"cloudresourcemanager.googleapis.com\",\n        \"title\": \"Cloud Resource Manager API\",\n        \"documentation\": {\n          \"summary\": \"Creates, reads, and updates metadata for Google Cloud Platform resource containers.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234000173\"\n    },\n    {\n      \"name\": \"projects/1234000173/services/cloudtrace.googleapis.com\",\n      \"config\": {\n        \"name\": \"cloudtrace.googleapis.com\",\n        \"title\": \"Cloud Trace API\",\n        \"documentation\": {\n          \"summary\": \"Sends application trace data to Cloud Trace for viewing. Trace data is collected for all App Engine applications by default. Trace data from other applications can be provided using this API. This library is used to interact with the Cloud Trace API directly. If you are looking to instrument your application for Cloud Trace, we recommend using OpenTelemetry.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"cloudtrace.googleapis.com/charged_project\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"monitoring.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              }\n            ]\n          },\n          {\n            \"type\": \"cloudtrace.googleapis.com/ChargedProject\",\n            \"displayName\": \"Cloud trace target\",\n            \"description\": \"A cloud trace specialization target schema of cloud.ChargedProject.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The monitored resource container. Could be project, workspace, etc.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The service-specific notion of location.\"\n              },\n              {\n                \"key\": \"api_service\",\n                \"description\": \"The name of the API service with which the data is associated (e.g.,'cloudtrace.googleapis.com').\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"cloudtrace.googleapis.com/CloudtraceProject\",\n            \"displayName\": \"Cloud Trace\",\n            \"description\": \"Cloud trace resource, e.g. project.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container associated with the resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location that the Cloud Trace service recording the metrics is running.\"\n              }\n            ],\n            \"launchStage\": \"EARLY_ACCESS\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"cloudtrace.googleapis.com/ChargedProject\",\n              \"metrics\": [\n                \"cloudtrace.googleapis.com/billing/ingested_spans\",\n                \"cloudtrace.googleapis.com/billing/ingested_bytes\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"cloudtrace.googleapis.com/charged_project\",\n              \"metrics\": [\n                \"cloudtrace.googleapis.com/billing/retrieved_spans\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"cloudtrace.googleapis.com/CloudtraceProject\",\n              \"metrics\": [\n                \"cloudtrace.googleapis.com/internal/plugin_server_span_count\",\n                \"cloudtrace.googleapis.com/internal/reader_root_query_count\",\n                \"cloudtrace.googleapis.com/internal/reader_root_query_latencies\",\n                \"cloudtrace.googleapis.com/bigquery_export/exported_span_count\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234000173\"\n    },\n    {\n      \"name\": \"projects/1234000173/services/composer.googleapis.com\",\n      \"config\": {\n        \"name\": \"composer.googleapis.com\",\n        \"title\": \"Cloud Composer API\",\n        \"documentation\": {\n          \"summary\": \"Manages Apache Airflow rrrrironments on Google Cloud Platform.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/billing-enabled\",\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234000173\"\n    },\n    {\n      \"name\": \"projects/1234000173/services/compute.googleapis.com\",\n      \"config\": {\n        \"name\": \"compute.googleapis.com\",\n        \"title\": \"Compute Engine API\",\n        \"documentation\": {\n          \"summary\": \"Creates and runs virtual machines on Google Cloud Platform.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"compute.googleapis.com/VpcNetwork\",\n            \"displayName\": \"VPC Network\",\n            \"description\": \"VPC Network.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the VPC Network.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the VPC Network, global always.\"\n              },\n              {\n                \"key\": \"network_id\",\n                \"description\": \"VPC Network resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Location\",\n            \"displayName\": \"Compute Location\",\n            \"description\": \"A location in the Compute API.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the Compute Location.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Interconnect\",\n            \"displayName\": \"Interconnect\",\n            \"description\": \"Interconnect.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the Interconnect.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the Interconnect.\"\n              },\n              {\n                \"key\": \"interconnect_id\",\n                \"description\": \"Interconnect resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/FirewallPolicy\",\n            \"displayName\": \"Firewall policy\",\n            \"description\": \"Firewall policy.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project or organization) associated with the firewall policy.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the firewall policy.\"\n              },\n              {\n                \"key\": \"firewall_policy_id\",\n                \"description\": \"Firewall policy resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/OperationType\",\n            \"displayName\": \"Operation Type\",\n            \"description\": \"Operation Type.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the operation.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the operation.\"\n              },\n              {\n                \"key\": \"operation_type\",\n                \"description\": \"Operation type.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Reservation\",\n            \"displayName\": \"Reservation\",\n            \"description\": \"Monitored resource representing a reservation.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container (e.g. project number) associated with the reservation.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The zone that contains the reservation.\"\n              },\n              {\n                \"key\": \"reservation_id\",\n                \"description\": \"Reservation resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"gce_instance\",\n            \"displayName\": \"VM Instance\",\n            \"description\": \"A virtual machine instance hosted in Compute Engine.\",\n            \"labels\": [\n              {\n                \"key\": \"project_id\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as \\\"my-project\\\".\"\n              },\n              {\n                \"key\": \"instance_id\",\n                \"description\": \"The numeric VM instance identifier assigned by Compute Engine.\"\n              },\n              {\n                \"key\": \"zone\",\n                \"description\": \"The Compute Engine zone in which the VM is running.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/StoragePool\",\n            \"displayName\": \"Storage Pool\",\n            \"description\": \"Monitored resource representing a storage pool.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container (e.g. project number) associated with the reservation.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location that contains the storage pool.\"\n              },\n              {\n                \"key\": \"storage_pool_id\",\n                \"description\": \"Numerical resource ID of the storage pool.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/dynamic_routes_per_region_per_peering_group\",\n                \"compute.googleapis.com/global_internal_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/instances_per_peering_group\",\n                \"compute.googleapis.com/instances_per_vpc_network\",\n                \"compute.googleapis.com/internal_lb_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_managed_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_protocol_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/ip_aliases_per_peering_group\",\n                \"compute.googleapis.com/ip_aliases_per_vpc_network\",\n                \"compute.googleapis.com/peerings_per_vpc_network\",\n                \"compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network\",\n                \"compute.googleapis.com/psc_propagated_connections_per_vpc_network\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/exceeded\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/regional_external_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/regional_internal_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/static_routes_per_peering_group\",\n                \"compute.googleapis.com/static_routes_per_vpc_network\",\n                \"compute.googleapis.com/subnet_ranges_per_peering_group\",\n                \"compute.googleapis.com/subnet_ranges_per_vpc_network\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Location\",\n              \"metrics\": [\n                \"compute.googleapis.com/cpus_per_vm_family\",\n                \"compute.googleapis.com/global_dns/request_count\",\n                \"compute.googleapis.com/gpus_per_gpu_family\",\n                \"compute.googleapis.com/inter_region_egress_bandwidth\",\n                \"compute.googleapis.com/local_ssd_total_storage_per_vm_family\",\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/exceeded\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/exceeded\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/exceeded\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/usage\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/exceeded\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/exceeded\",\n                \"compute.googleapis.com/quota/tpus_per_tpu_family/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Interconnect\",\n              \"metrics\": [\n                \"compute.googleapis.com/interconnect_attachments_per_interconnect\",\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/FirewallPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/fqdns_per_global_network_firewall_policy\",\n                \"compute.googleapis.com/fqdns_per_regional_network_firewall_policy\",\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/rule_attributes_per_global_network_firewall_policy\",\n                \"compute.googleapis.com/rule_attributes_per_regional_network_firewall_policy\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/OperationType\",\n              \"metrics\": [\n                \"compute.googleapis.com/global_concurrent_operations\",\n                \"compute.googleapis.com/quota/concurrent/global_concurrent_operations/exceeded\",\n                \"compute.googleapis.com/quota/concurrent/internal/global_concurrent_operations/combined_units\",\n                \"compute.googleapis.com/quota/concurrent/internal/regional_concurrent_operations/combined_units\",\n                \"compute.googleapis.com/quota/concurrent/regional_concurrent_operations/exceeded\",\n                \"compute.googleapis.com/regional_concurrent_operations\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"gce_instance\",\n              \"metrics\": [\n                \"compute.googleapis.com/instance/global_dns/request_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Reservation\",\n              \"metrics\": [\n                \"compute.googleapis.com/reservation/reserved\",\n                \"compute.googleapis.com/reservation/assured\",\n                \"compute.googleapis.com/reservation/used\",\n                \"compute.googleapis.com/reservation/internal/matching_instances\",\n                \"compute.googleapis.com/reservation/internal/prespuns_by_state\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Location\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/limit\",\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/usage\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/limit\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/usage\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/limit\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/limit\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/usage\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/limit\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/usage\",\n                \"compute.googleapis.com/quota/tpus_per_tpu_family/limit\",\n                \"compute.googleapis.com/quota/tpus_per_tpu_family/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/limit\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/usage\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/limit\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/usage\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Interconnect\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/limit\",\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/FirewallPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/OperationType\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/concurrent/global_concurrent_operations/limit\",\n                \"compute.googleapis.com/quota/concurrent/regional_concurrent_operations/limit\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/StoragePool\",\n              \"metrics\": [\n                \"compute.googleapis.com/storage_pool/disks\",\n                \"compute.googleapis.com/storage_pool/provisioned_capacity\",\n                \"compute.googleapis.com/storage_pool/used_capacity\",\n                \"compute.googleapis.com/storage_pool/total_disk_provisioned_capacity\",\n                \"compute.googleapis.com/storage_pool/provisioned_iops\",\n                \"compute.googleapis.com/storage_pool/used_iops\",\n                \"compute.googleapis.com/storage_pool/total_disk_provisioned_iops\",\n                \"compute.googleapis.com/storage_pool/provisioned_throughput\",\n                \"compute.googleapis.com/storage_pool/used_throughput\",\n                \"compute.googleapis.com/storage_pool/total_disk_provisioned_throughput\",\n                \"compute.googleapis.com/storage_pool/capacity_utilization\",\n                \"compute.googleapis.com/storage_pool/iops_utilization\",\n                \"compute.googleapis.com/storage_pool/throughput_utilization\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234000173\"\n    },\n    {\n      \"name\": \"projects/1234000173/services/connectgateway.googleapis.com\",\n      \"config\": {\n        \"name\": \"connectgateway.googleapis.com\",\n        \"title\": \"Connect Gateway API\",\n        \"documentation\": {\n          \"summary\": \"The Connect Gateway service allows connectivity from external parties to connected Kubernetes clusters.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234000173\"\n    },\n    {\n      \"name\": \"projects/1234000173/services/container.googleapis.com\",\n      \"config\": {\n        \"name\": \"container.googleapis.com\",\n        \"title\": \"Kubernetes Engine API\",\n        \"documentation\": {\n          \"summary\": \"Builds and manages container-based applications, powered by the open source Kubernetes technology.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"container.googleapis.com/Cluster\",\n            \"displayName\": \"Kubernetes Cluster\",\n            \"description\": \"Kubernetes Cluster.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"Project or organization.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Region or zone where the cluster was created.\"\n              },\n              {\n                \"key\": \"cluster_name\",\n                \"description\": \"Cluster name.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"container.googleapis.com/NodePool\",\n            \"displayName\": \"GKE Node Pool\",\n            \"description\": \"GKE Node Pool.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"Project or organization.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Region or zone where the cluster was created.\"\n              },\n              {\n                \"key\": \"cluster_name\",\n                \"description\": \"Cluster name.\"\n              },\n              {\n                \"key\": \"node_pool_name\",\n                \"description\": \"Node pool name.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"container.googleapis.com/Cluster\",\n              \"metrics\": [\n                \"container.googleapis.com/quota/containers_per_cluster_autopilot\",\n                \"container.googleapis.com/quota/containers_per_cluster_standard\",\n                \"container.googleapis.com/quota/etcd_database_size_bytes\",\n                \"container.googleapis.com/quota/nodes_per_cluster\",\n                \"container.googleapis.com/quota/pods_per_cluster_autopilot\",\n                \"container.googleapis.com/quota/pods_per_cluster_standard\",\n                \"container.googleapis.com/quota/quota/containers_per_cluster_autopilot/exceeded\",\n                \"container.googleapis.com/quota/quota/containers_per_cluster_standard/exceeded\",\n                \"container.googleapis.com/quota/quota/etcd_database_size_bytes/exceeded\",\n                \"container.googleapis.com/quota/quota/etcd_database_size_gib/exceeded\",\n                \"container.googleapis.com/quota/quota/nodes_per_cluster/exceeded\",\n                \"container.googleapis.com/quota/quota/pods_per_cluster_autopilot/exceeded\",\n                \"container.googleapis.com/quota/quota/pods_per_cluster_standard/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"container.googleapis.com/NodePool\",\n              \"metrics\": [\n                \"container.googleapis.com/quota/nodes_per_node_pool\",\n                \"container.googleapis.com/quota/quota/nodes_per_node_pool/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"container.googleapis.com/Cluster\",\n              \"metrics\": [\n                \"container.googleapis.com/quota/quota/containers_per_cluster_autopilot/limit\",\n                \"container.googleapis.com/quota/quota/containers_per_cluster_autopilot/usage\",\n                \"container.googleapis.com/quota/quota/containers_per_cluster_standard/limit\",\n                \"container.googleapis.com/quota/quota/containers_per_cluster_standard/usage\",\n                \"container.googleapis.com/quota/quota/etcd_database_size_bytes/limit\",\n                \"container.googleapis.com/quota/quota/etcd_database_size_bytes/usage\",\n                \"container.googleapis.com/quota/quota/etcd_database_size_gib/limit\",\n                \"container.googleapis.com/quota/quota/etcd_database_size_gib/usage\",\n                \"container.googleapis.com/quota/quota/nodes_per_cluster/limit\",\n                \"container.googleapis.com/quota/quota/nodes_per_cluster/usage\",\n                \"container.googleapis.com/quota/quota/pods_per_cluster_autopilot/limit\",\n                \"container.googleapis.com/quota/quota/pods_per_cluster_autopilot/usage\",\n                \"container.googleapis.com/quota/quota/pods_per_cluster_standard/limit\",\n                \"container.googleapis.com/quota/quota/pods_per_cluster_standard/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"container.googleapis.com/NodePool\",\n              \"metrics\": [\n                \"container.googleapis.com/quota/quota/nodes_per_node_pool/limit\",\n                \"container.googleapis.com/quota/quota/nodes_per_node_pool/usage\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234000173\"\n    },\n    {\n      \"name\": \"projects/1234000173/services/containeranalysis.googleapis.com\",\n      \"config\": {\n        \"name\": \"containeranalysis.googleapis.com\",\n        \"title\": \"Container Analysis API\",\n        \"documentation\": {\n          \"summary\": \"This API is a prerequisite for leveraging Artifact Analysis scanning\\ncapabilities in both Artifact Registry and with Advanced Vulnerability\\nInsights (runtime scanning) in GKE.\\n\\nIn addition, the Container Analysis API is an implementation of the Grafeas\\nAPI, which enables storing, querying, and retrieval of critical metadata\\nabout all of your software artifacts.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234000173\"\n    },\n    {\n      \"name\": \"projects/1234000173/services/containerfilesystem.googleapis.com\",\n      \"config\": {\n        \"name\": \"containerfilesystem.googleapis.com\",\n        \"title\": \"Container File System API\",\n        \"documentation\": {\n          \"summary\": \"Stream images stored in Artifact Registry to GKE\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234000173\"\n    },\n    {\n      \"name\": \"projects/1234000173/services/containerregistry.googleapis.com\",\n      \"config\": {\n        \"name\": \"containerregistry.googleapis.com\",\n        \"title\": \"Container Registry API\",\n        \"documentation\": {\n          \"summary\": \"Google Container Registry provides secure, private Docker image storage on Google Cloud Platform.  Our API follows the Docker Registry API specification, so we are fully compatible with the Docker CLI client, as well as standard tooling using the Docker Registry API.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234000173\"\n    },\n    {\n      \"name\": \"projects/1234000173/services/containersecurity.googleapis.com\",\n      \"config\": {\n        \"name\": \"containersecurity.googleapis.com\",\n        \"title\": \"Container Security API\",\n        \"documentation\": {\n          \"summary\": \"Highlights security-related insights into running Google Kubernetes Engine (GKE) clusters.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234000173\"\n    },\n    {\n      \"name\": \"projects/1234000173/services/containerthreatdetection.googleapis.com\",\n      \"config\": {\n        \"name\": \"containerthreatdetection.googleapis.com\",\n        \"title\": \"Container Threat Detection API\",\n        \"documentation\": {},\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234000173\"\n    },\n    {\n      \"name\": \"projects/1234000173/services/dataform.googleapis.com\",\n      \"config\": {\n        \"name\": \"dataform.googleapis.com\",\n        \"title\": \"Dataform API\",\n        \"documentation\": {\n          \"summary\": \"Service to develop, version control, and operationalize SQL pipelines in BigQuery.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234000173\"\n    },\n    {\n      \"name\": \"projects/1234000173/services/dataplex.googleapis.com\",\n      \"config\": {\n        \"name\": \"dataplex.googleapis.com\",\n        \"title\": \"Cloud Dataplex API\",\n        \"documentation\": {\n          \"summary\": \"Dataplex API is used to manage the lifecycle of data lakes.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"dataplex.googleapis.com/Lake\",\n            \"displayName\": \"Cloud Dataplex Lake\",\n            \"description\": \"A Cloud Dataplex Lake.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of GCP project associated with this resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The GCP region associated with this resource.\"\n              },\n              {\n                \"key\": \"lake_id\",\n                \"description\": \"The identifier of this Lake resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"dataplex.googleapis.com/Zone\",\n            \"displayName\": \"Cloud Dataplex Zone\",\n            \"description\": \"A Zone within a Cloud Dataplex Lake.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of GCP project associated with this resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The GCP region associated with this resource.\"\n              },\n              {\n                \"key\": \"lake_id\",\n                \"description\": \"The identifier of the Lake resource containing this resource.\"\n              },\n              {\n                \"key\": \"zone_id\",\n                \"description\": \"The identifier of this Zone resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"dataplex.googleapis.com/Asset\",\n            \"displayName\": \"Cloud Dataplex Asset\",\n            \"description\": \"An Asset within a Cloud Dataplex Lake.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of GCP project associated with this resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The GCP region associated with this resource.\"\n              },\n              {\n                \"key\": \"lake_id\",\n                \"description\": \"The identifier of the Lake resource containing this resource.\"\n              },\n              {\n                \"key\": \"zone_id\",\n                \"description\": \"The identifier of the Zone resource containing this resource.\"\n              },\n              {\n                \"key\": \"asset_id\",\n                \"description\": \"The identifier of this Asset resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"dataplex.googleapis.com/Environment\",\n            \"displayName\": \"Cloud Dataplex Environment\",\n            \"description\": \"An Environment within a Cloud Dataplex Lake.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of GCP project associated with this resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The GCP region associated with this resource.\"\n              },\n              {\n                \"key\": \"lake_id\",\n                \"description\": \"The identifier of the Lake resource containing this resource.\"\n              },\n              {\n                \"key\": \"rrrrironment_id\",\n                \"description\": \"The identifier of this Environment resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"dataplex.googleapis.com/Lake\",\n              \"metrics\": [\n                \"dataplex.googleapis.com/lake/requires_action\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"dataplex.googleapis.com/Zone\",\n              \"metrics\": [\n                \"dataplex.googleapis.com/zone/requires_action\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"dataplex.googleapis.com/Asset\",\n              \"metrics\": [\n                \"dataplex.googleapis.com/asset/requires_action\",\n                \"dataplex.googleapis.com/asset/active\",\n                \"dataplex.googleapis.com/asset/data_items\",\n                \"dataplex.googleapis.com/asset/data_size\",\n                \"dataplex.googleapis.com/asset/tables\",\n                \"dataplex.googleapis.com/asset/filesets\",\n                \"dataplex.googleapis.com/asset/entities_pending_bigquery_metadata_updates\",\n                \"dataplex.googleapis.com/asset/entities_pending_bigquery_iampolicy_updates\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234000173\"\n    },\n    {\n      \"name\": \"projects/1234000173/services/datastore.googleapis.com\",\n      \"config\": {\n        \"name\": \"datastore.googleapis.com\",\n        \"title\": \"Cloud Datastore API\",\n        \"documentation\": {\n          \"summary\": \"Accesses the schemaless NoSQL database to provide fully managed, robust, scalable storage for your application.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234000173\"\n    },\n    {\n      \"name\": \"projects/1234000173/services/deploymentmanager.googleapis.com\",\n      \"config\": {\n        \"name\": \"deploymentmanager.googleapis.com\",\n        \"title\": \"Cloud Deployment Manager V2 API\",\n        \"documentation\": {\n          \"summary\": \"The Google Cloud Deployment Manager v2 API provides services for configuring, deploying, and\\nviewing Google Cloud services and APIs via templates which specify deployments of Cloud\\nresources.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234000173\"\n    },\n    {\n      \"name\": \"projects/1234000173/services/dns.googleapis.com\",\n      \"config\": {\n        \"name\": \"dns.googleapis.com\",\n        \"title\": \"Cloud DNS API\",\n        \"documentation\": {},\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234000173\"\n    },\n    {\n      \"name\": \"projects/1234000173/services/gkebackup.googleapis.com\",\n      \"config\": {\n        \"name\": \"gkebackup.googleapis.com\",\n        \"title\": \"Backup for GKE API\",\n        \"documentation\": {\n          \"summary\": \"Backup for GKE is a managed Kubernetes workload backup and restore service\\nfor GKE clusters.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"gkebackup.googleapis.com/BackupPlan\",\n            \"displayName\": \"GKE Backup Plan\",\n            \"description\": \"A backup plan provides configuration, location, and management functions for a sequence of backups.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the Google Cloud container associated with the resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The Google Cloud location where this backupPlan resides.\"\n              },\n              {\n                \"key\": \"backup_plan_id\",\n                \"description\": \"The name of the backupPlan.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"gkebackup.googleapis.com/RestorePlan\",\n            \"displayName\": \"GKE Restore Plan\",\n            \"description\": \"A restore plan defines the configuration of a series of restore operations to be performed against backups which belong to the specified backup plan.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the Google Cloud container associated with the resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The Google Cloud location where this restorePlan resides.\"\n              },\n              {\n                \"key\": \"restore_plan_id\",\n                \"description\": \"The name of the restorePlan.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"gkebackup.googleapis.com/Project\",\n            \"displayName\": \"Backup for GKE Project\",\n            \"description\": \"A Project in the Backup for GKE API.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project associated with this resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The Google Cloud location of the resource.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"gkebackup.googleapis.com/BackupPlan\",\n              \"metrics\": [\n                \"gkebackup.googleapis.com/backup_created_count\",\n                \"gkebackup.googleapis.com/backup_deleted_count\",\n                \"gkebackup.googleapis.com/backup_completion_times\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"gkebackup.googleapis.com/RestorePlan\",\n              \"metrics\": [\n                \"gkebackup.googleapis.com/restore_created_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"gkebackup.googleapis.com/Project\",\n              \"metrics\": [\n                \"gkebackup.googleapis.com/internal/backup_plan_created_count\",\n                \"gkebackup.googleapis.com/internal/backup_plan_existence\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234000173\"\n    },\n    {\n      \"name\": \"projects/1234000173/services/gkeconnect.googleapis.com\",\n      \"config\": {\n        \"name\": \"gkeconnect.googleapis.com\",\n        \"title\": \"GKE Connect API\",\n        \"documentation\": {\n          \"summary\": \"The GKE Connect service allows connectivity between Google and managed K8s clusters.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234000173\"\n    },\n    {\n      \"name\": \"projects/1234000173/services/gkehub.googleapis.com\",\n      \"config\": {\n        \"name\": \"gkehub.googleapis.com\",\n        \"title\": \"GKE Hub API\",\n        \"documentation\": {},\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234000173\"\n    },\n    {\n      \"name\": \"projects/1234000173/services/gkeonprem.googleapis.com\",\n      \"config\": {\n        \"name\": \"gkeonprem.googleapis.com\",\n        \"title\": \"GDC Virtual API\",\n        \"documentation\": {},\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234000173\"\n    },\n    {\n      \"name\": \"projects/1234000173/services/iam.googleapis.com\",\n      \"config\": {\n        \"name\": \"iam.googleapis.com\",\n        \"title\": \"Identity and Access Management (IAM) API\",\n        \"documentation\": {\n          \"summary\": \"Manages identity and access control for Google Cloud resources, including the creation of service accounts, which you can use to authenticate to Google and make API calls. Enabling this API also enables the IAM Service Account Credentials API (iamcredentials.googleapis.com). However, disabling this API doesn't disable the IAM Service Account Credentials API.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"iam_service_account\",\n            \"displayName\": \"IAM Service Account\",\n            \"description\": \"An IAM Service Account.\",\n            \"labels\": [\n              {\n                \"key\": \"project_id\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"unique_id\",\n                \"description\": \"The unique_id of the service account.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"iam.googleapis.com/WorkloadIdentityPoolProvider\",\n            \"displayName\": \"Workload Identity Pool Provider\",\n            \"description\": \"A workload identity pool provider.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location of the resource.\"\n              },\n              {\n                \"key\": \"pool_id\",\n                \"description\": \"The ID of the provider's workload identity pool parent resource.\"\n              },\n              {\n                \"key\": \"provider_id\",\n                \"description\": \"The ID of the workload identity pool provider resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"iam.googleapis.com/WorkloadIdentityPoolProvider\",\n              \"metrics\": [\n                \"iam.googleapis.com/workload_identity_federation/count\",\n                \"iam.googleapis.com/workload_identity_federation/key_usage_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"iam_service_account\",\n              \"metrics\": [\n                \"iam.googleapis.com/service_account/authn_events_count\",\n                \"iam.googleapis.com/service_account/key/authn_events_count\",\n                \"iam.googleapis.com/service_account/authn_events_count_preprod\",\n                \"iam.googleapis.com/service_account/key/authn_events_count_preprod\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234000173\"\n    },\n    {\n      \"name\": \"projects/1234000173/services/iamcredentials.googleapis.com\",\n      \"config\": {\n        \"name\": \"iamcredentials.googleapis.com\",\n        \"title\": \"IAM Service Account Credentials API\",\n        \"documentation\": {\n          \"summary\": \"Creates short-lived credentials for impersonating IAM service accounts. Disabling this API also disables the IAM API (iam.googleapis.com). However, enabling this API doesn't enable the IAM API.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234000173\"\n    },\n    {\n      \"name\": \"projects/1234000173/services/iap.googleapis.com\",\n      \"config\": {\n        \"name\": \"iap.googleapis.com\",\n        \"title\": \"Cloud Identity-Aware Proxy API\",\n        \"documentation\": {\n          \"summary\": \"Controls access to cloud applications running on Google Cloud Platform.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234000173\"\n    },\n    {\n      \"name\": \"projects/1234000173/services/krmapihosting.googleapis.com\",\n      \"config\": {\n        \"name\": \"krmapihosting.googleapis.com\",\n        \"title\": \"KRM API Hosting API\",\n        \"documentation\": {},\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234000173\"\n    },\n    {\n      \"name\": \"projects/1234000173/services/logging.googleapis.com\",\n      \"config\": {\n        \"name\": \"logging.googleapis.com\",\n        \"title\": \"Cloud Logging API\",\n        \"documentation\": {\n          \"summary\": \"Writes log entries and manages your Cloud Logging configuration.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"logging.googleapis.com/ChargedProject\",\n            \"displayName\": \"Cloud logging target\",\n            \"description\": \"A cloud logging specialization target schema of cloud.ChargedProject.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The monitored resource container. Could be project, workspace, etc.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The service-specific notion of location.\"\n              },\n              {\n                \"key\": \"service\",\n                \"description\": \"The name of the API service with which the data is associated (e.g.,'logging.googleapis.com').\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"logging.googleapis.com/ChargedProject\",\n              \"metrics\": [\n                \"logging.googleapis.com/billing/ingested_bytes\",\n                \"logging.googleapis.com/billing/stored_bytes\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234000173\"\n    },\n    {\n      \"name\": \"projects/1234000173/services/monitoring.googleapis.com\",\n      \"config\": {\n        \"name\": \"monitoring.googleapis.com\",\n        \"title\": \"Cloud Monitoring API\",\n        \"documentation\": {\n          \"summary\": \"Manages your Cloud Monitoring data and configurations.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"monitoring.googleapis.com/ChargedProject\",\n            \"displayName\": \"Cloud monitoring target\",\n            \"description\": \"A cloud monitoring specialization target schema of cloud.ChargedProject.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The monitored resource container. Could be project, workspace, etc.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The service-specific notion of location.\"\n              },\n              {\n                \"key\": \"service\",\n                \"description\": \"The name of the API service with which the data is associated (e.g.,'monitoring.googleapis.com').\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"monitoring.googleapis.com/MetricStatistics\",\n            \"displayName\": \"Metric Statistics\",\n            \"description\": \"Information about a user-written metric in Cloud Monitoring.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project to which the metric is written, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The cloud region where the metric was received.\"\n              },\n              {\n                \"key\": \"metric_type\",\n                \"description\": \"The metric type.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"monitoring.googleapis.com/MetricIngestionAttribution\",\n            \"displayName\": \"Metric Ingestion Attribution\",\n            \"description\": \"Attribution for metric ingestion.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project to which the metric is written, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location of the resource that the metric ingestion was associated with, unless it was 'global', in which case this will be the cloud region where the metric was received.\"\n              },\n              {\n                \"key\": \"attribution_dimension\",\n                \"description\": \"The dimension used for attribution reporting. It is not recommended that aggregations are performed across dimensions because a single metric point can be recorded with multiple dimensions which could cause double counting. Currently only \\\"namespace\\\" and \\\"cluster\\\" are supported.\"\n              },\n              {\n                \"key\": \"attribution_id\",\n                \"description\": \"The attribution id of the source of the metric write.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"monitoring.googleapis.com/ChargedProject\",\n              \"metrics\": [\n                \"monitoring.googleapis.com/billing/bytes_ingested\",\n                \"monitoring.googleapis.com/billing/samples_ingested\",\n                \"monitoring.googleapis.com/internal/billing/gke_enterprise_samples_ingested\",\n                \"monitoring.googleapis.com/internal/billing/non_chargeable_samples_ingested\",\n                \"monitoring.googleapis.com/internal/stats/filtered_sample_count\",\n                \"monitoring.googleapis.com/internal/stats/filtered_byte_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"monitoring.googleapis.com/MetricStatistics\",\n              \"metrics\": [\n                \"monitoring.googleapis.com/collection/write_request_count\",\n                \"monitoring.googleapis.com/collection/write_request_point_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"monitoring.googleapis.com/MetricIngestionAttribution\",\n              \"metrics\": [\n                \"monitoring.googleapis.com/collection/attribution/sample_count\",\n                \"monitoring.googleapis.com/collection/attribution/write_sample_count\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234000173\"\n    },\n    {\n      \"name\": \"projects/1234000173/services/multiclustermetering.googleapis.com\",\n      \"config\": {\n        \"name\": \"multiclustermetering.googleapis.com\",\n        \"title\": \"Multi cluster metering API\",\n        \"documentation\": {\n          \"summary\": \"The Multi cluster metering API is the API associated with the hub \\\"metering\\\" controller.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234000173\"\n    },\n    {\n      \"name\": \"projects/1234000173/services/networkconnectivity.googleapis.com\",\n      \"config\": {\n        \"name\": \"networkconnectivity.googleapis.com\",\n        \"title\": \"Network Connectivity API\",\n        \"documentation\": {\n          \"summary\": \"This API enables connectivity with and between Google Cloud resources.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"networkconnectivity.googleapis.com/Hub\",\n            \"displayName\": \"Network Connectivity Hub\",\n            \"description\": \"A Network Connectivity hub.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP resource container that this hub is in.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The identifier of the location that this hub is in.\"\n              },\n              {\n                \"key\": \"hub_id\",\n                \"description\": \"The identifier of this hub.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"networkconnectivity.googleapis.com/RouteTable\",\n            \"displayName\": \"Network Connectivity Route Table\",\n            \"description\": \"A route table associated with a Network Connectivity hub.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project associated with this route table.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The identifier of the location that this route table is in.\"\n              },\n              {\n                \"key\": \"hub_id\",\n                \"description\": \"The identifier of the hub that is associated with this route table.\"\n              },\n              {\n                \"key\": \"route_table_id\",\n                \"description\": \"The identifier of this route table.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"networkconnectivity.googleapis.com/Hub\",\n              \"metrics\": [\n                \"networkconnectivity.googleapis.com/active_vpc_spokes_per_hub\",\n                \"networkconnectivity.googleapis.com/groups_per_hub\",\n                \"networkconnectivity.googleapis.com/quota/active_vpc_spokes_per_hub/exceeded\",\n                \"networkconnectivity.googleapis.com/quota/groups_per_hub/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"networkconnectivity.googleapis.com/RouteTable\",\n              \"metrics\": [\n                \"networkconnectivity.googleapis.com/quota/routes_per_route_table/exceeded\",\n                \"networkconnectivity.googleapis.com/routes_per_route_table\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"networkconnectivity.googleapis.com/Hub\",\n              \"metrics\": [\n                \"networkconnectivity.googleapis.com/quota/active_vpc_spokes_per_hub/limit\",\n                \"networkconnectivity.googleapis.com/quota/active_vpc_spokes_per_hub/usage\",\n                \"networkconnectivity.googleapis.com/quota/groups_per_hub/limit\",\n                \"networkconnectivity.googleapis.com/quota/groups_per_hub/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"networkconnectivity.googleapis.com/RouteTable\",\n              \"metrics\": [\n                \"networkconnectivity.googleapis.com/quota/routes_per_route_table/limit\",\n                \"networkconnectivity.googleapis.com/quota/routes_per_route_table/usage\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234000173\"\n    },\n    {\n      \"name\": \"projects/1234000173/services/networkmanagement.googleapis.com\",\n      \"config\": {\n        \"name\": \"networkmanagement.googleapis.com\",\n        \"title\": \"Network Management API\",\n        \"documentation\": {\n          \"summary\": \"The Network Management API provides a collection of network performance monitoring and diagnostic capabilities.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234000173\"\n    },\n    {\n      \"name\": \"projects/1234000173/services/opsconfigmonitoring.googleapis.com\",\n      \"config\": {\n        \"name\": \"opsconfigmonitoring.googleapis.com\",\n        \"title\": \"Config Monitoring for Ops API\",\n        \"documentation\": {\n          \"summary\": \"Config Monitoring for Ops API collects, aggregates and indexes resource configuration and operational metadata of resources and services in GCP, including the status and relations, and makes it actionable to enable rich, out of the box monitoring for Cloud.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234000173\"\n    },\n    {\n      \"name\": \"projects/1234000173/services/oslogin.googleapis.com\",\n      \"config\": {\n        \"name\": \"oslogin.googleapis.com\",\n        \"title\": \"Cloud OS Login API\",\n        \"documentation\": {\n          \"summary\": \"You can use OS Login to manage access to your VM instances using IAM roles.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/1234000173\"\n    }\n  ],\n  \"nextPageToken\": \"choKGEIWb3Nsb2dpbi5nb29nbGVhcGlzLmNvbQ==\"\n}\n"
  },
  {
    "path": "test-data/gke3/Makefile",
    "content": "PROJECT_ID  := $(shell terraform output -raw project_id)\nPROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix)\nPROJECT_NR  := $(shell terraform output -raw project_nr)\nORG_ID      := $(shell terraform output -raw org_id)\n\nCLUSTER = cluster-1\n\nCURL         = ../../bin/curl-wrap.sh\nJSON_CLEANER = ../../bin/json-cleaner\nREGION     = us-central1\nZONE       = us-central1-c\n\nFAKE_PROJECT_ID_SUFFIX = gggg\nFAKE_PROJECT_NR = 12340032\nFAKE_ORG_ID = 11112232\nSED_SUBST_FAKE = sed -e \"s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/\" \\\n\t\t     -e \"s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/\" \\\n\t\t     -e \"s/$(ORG_ID)/$(FAKE_ORG_ID)/\" \\\n\nall:\t\\\n\tjson-dumps/container-cluster-$(CLUSTER).json \\\n\tjson-dumps/logging-entries-1.json \\\n\tjson-dumps/logging-entries-2.json \\\n\tjson-dumps/services.json \\\n\tjson-dumps/project.json\n\n\ninclude ../Makefile.inc\n\n\njson-dumps/project.json:\n\t$(CURL) -fsS \\\n\t\t'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\n\njson-dumps/services.json:\n\t$(CURL) -fsS \\\n\t        'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\n\njson-dumps/container-cluster-$(CLUSTER).json:\n\t$(CURL) -fsS \\\n\t\t'https://container.googleapis.com/v1/projects/$(PROJECT_ID)/locations/$(ZONE)/clusters/$(CLUSTER)' \\\n\t\t| $(JSON_CLEANER) clusters \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\n\n# If you need to recreate the JSON: adapt the timestamp and make sure that there are some entries found.\ndefine LOGGING_ENTRIES_BODY\n{\n\t\"resourceNames\": [\"projects/$(PROJECT_ID)\"],\n\t\"orderBy\": \"timestamp desc\",\n\t\"filter\": \"\n\t\ttimestamp > \\\"2024-06-30T01:00:00+00:00\\\" AND\n\t\ttimestamp < \\\"2024-06-30T23:00:00+00:00\\\" AND\n\t\t\\\"IP_SPACE_EXHAUSTED\\\" AND \\\"$(CLUSTER)\\\"\n\t\"\n}\nendef\nexport LOGGING_ENTRIES_BODY\n\njson-dumps/logging-entries-1.json:\n\t$(CURL) -fsS \\\n\t\t'https://logging.googleapis.com/v2/entries:list' \\\n\t\t--header \"Content-Type:text/json\" \\\n\t\t-d \"$$LOGGING_ENTRIES_BODY\" \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\n\ndefine LOGGING_ENTRIES_BODY_1\n{\n\t\"resourceNames\": [\"projects/$(PROJECT_ID)\"],\n\t\"orderBy\": \"timestamp desc\",\n\t\"filter\": \"\n\t\ttimestamp > \\\"2024-06-30T01:00:00+00:00\\\" AND\n\t\ttimestamp < \\\"2024-06-30T23:00:00+00:00\\\" AND\n\t\tjsonPayload.resourceName=\\\"//container.googleapis.com/projects/$(PROJECT_ID)/zones/us-central1-c/clusters/$(CLUSTER)\\\" AND\n\t\tlogName=\\\"projects/$(PROJECT_ID)/logs/networkanalyzer.googleapis.com%2Fanalyzer_reports\\\"\n\t\"\n}\nendef\nexport LOGGING_ENTRIES_BODY_1\n\njson-dumps/logging-entries-2.json:\n\t$(CURL) -fsS \\\n\t\t'https://logging.googleapis.com/v2/entries:list' \\\n\t\t--header \"Content-Type:text/json\" \\\n\t\t-d \"$$LOGGING_ENTRIES_BODY_1\" \\\n\t\t| $(SED_SUBST_FAKE) >$@\n"
  },
  {
    "path": "test-data/gke3/cluster-1.tf",
    "content": "/**\n * Copyright 2023 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n# Create the GKE cluster\nresource \"google_container_cluster\" \"primary\" {\n  project            = google_project.project.project_id\n  name               = \"cluster-1\"\n  location           = var.zone\n  initial_node_count = 4\n\n  # Standard Cluster Configuration (default)\n  remove_default_node_pool = true\n\n  # Network Policy\n  network_policy {\n    enabled = true\n  }\n\n  network    = \"default\"\n  subnetwork = google_compute_subnetwork.public_subnet.name\n}\n\n# Create the node pool\nresource \"google_container_node_pool\" \"primary_pool\" {\n  project    = google_project.project.project_id\n  name       = \"primary-node-pool\"\n  cluster    = google_container_cluster.primary.name\n  location   = var.zone\n  node_count = 4 # Initial node count\n\n  # Node Configuration\n  max_pods_per_node = 110\n\n  # Node Management\n  management {\n    auto_repair  = true\n    auto_upgrade = true\n  }\n}\n"
  },
  {
    "path": "test-data/gke3/json-dumps/container-cluster-cluster-1.json",
    "content": "{\n  \"addonsConfig\": {\n    \"gcePersistentDiskCsiDriverConfig\": {\n      \"enabled\": true\n    },\n    \"kubernetesDashboard\": {\n      \"disabled\": true\n    },\n    \"networkPolicyConfig\": {}\n  },\n  \"autopilot\": {},\n  \"autoscaling\": {\n    \"autoscalingProfile\": \"BALANCED\"\n  },\n  \"binaryAuthorization\": {},\n  \"clusterIpv4Cidr\": \"10.40.0.0/14\",\n  \"conditions\": [\n    {\n      \"canonicalCode\": \"RESOURCE_EXHAUSTED\",\n      \"message\": \"[IP_SPACE_EXHAUSTED]: Instance 'gke-cluster-1-default-pool-a6ea5e55-h1ms' creation failed: IP space of 'projects/gcpdiag-gke3-gggg/regions/us-central1/subnetworks/public-subnet' is exhausted. \"\n    },\n    {\n      \"canonicalCode\": \"RESOURCE_EXHAUSTED\",\n      \"message\": \"Requested resource is exhausted: Not all instances running in IGM after 50.049254938s. Expected 4, running 3, transitioning 1. Current errors: [IP_SPACE_EXHAUSTED]: Instance 'gke-cluster-1-default-pool-a6ea5e55-h1ms' creation failed: IP space of 'projects/gcpdiag-gke3-gggg/regions/us-central1/subnetworks/public-subnet' is exhausted. .\"\n    }\n  ],\n  \"createTime\": \"2024-06-30T14:14:28+00:00\",\n  \"currentMasterVersion\": \"1.29.4-gke.1043002\",\n  \"currentNodeCount\": 4,\n  \"currentNodeVersion\": \"1.29.4-gke.1043002\",\n  \"databaseEncryption\": {\n    \"currentState\": \"CURRENT_STATE_DECRYPTED\",\n    \"state\": \"DECRYPTED\"\n  },\n  \"defaultMaxPodsConstraint\": {\n    \"maxPodsPerNode\": \"110\"\n  },\n  \"endpoint\": \"35.239.14.64\",\n  \"enterpriseConfig\": {\n    \"clusterTier\": \"STANDARD\"\n  },\n  \"etag\": \"21e8b973-68bf-485b-84c9-ad5029ac0e01\",\n  \"expireTime\": \"2024-07-14T14:20:47+00:00\",\n  \"id\": \"e478debbaec74a638eb439fbae5ac7cb4c51ffa27b3049868a20bc5aa1d3c64c\",\n  \"initialClusterVersion\": \"1.29.4-gke.1043002\",\n  \"initialNodeCount\": 4,\n  \"instanceGroupUrls\": [\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke3-gggg/zones/us-central1-c/instanceGroupManagers/gke-cluster-1-default-pool-a6ea5e55-grp\"\n  ],\n  \"ipAllocationPolicy\": {\n    \"clusterIpv4Cidr\": \"10.40.0.0/14\",\n    \"clusterIpv4CidrBlock\": \"10.40.0.0/14\",\n    \"clusterSecondaryRangeName\": \"gke-cluster-1-pods-e478debb\",\n    \"podCidrOverprovisionConfig\": {},\n    \"servicesIpv4Cidr\": \"34.118.224.0/20\",\n    \"servicesIpv4CidrBlock\": \"34.118.224.0/20\",\n    \"stackType\": \"IPV4\",\n    \"useIpAliases\": true\n  },\n  \"labelFingerprint\": \"a9dc16a7\",\n  \"legacyAbac\": {},\n  \"location\": \"us-central1-c\",\n  \"locations\": [\n    \"us-central1-c\"\n  ],\n  \"loggingConfig\": {\n    \"componentConfig\": {\n      \"enableComponents\": [\n        \"SYSTEM_COMPONENTS\",\n        \"WORKLOADS\"\n      ]\n    }\n  },\n  \"loggingService\": \"logging.googleapis.com/kubernetes\",\n  \"maintenancePolicy\": {\n    \"resourceVersion\": \"e3b0c442\"\n  },\n  \"masterAuth\": {\n    \"clientCertificateConfig\": {},\n    \"clusterCaCertificate\": \"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVMVENDQXBXZ0F3SUJBZ0lSQUlmRVdNQ3I5RkE2dzVhOWI2ZjJUUjh3RFFZSktvWklodmNOQVFFTEJRQXcKTHpFdE1Dc0dBMVVFQXhNa05qRXhaV1JoTUdNdE4yWTBZaTAwWVRkaExUbG1NREV0TVRnMVlUQXhaVEl3TldObQpNQ0FYRFRJME1EWXpNREV6TVRReU9Gb1lEekl3TlRRd05qSXpNVFF4TkRJNFdqQXZNUzB3S3dZRFZRUURFeVEyCk1URmxaR0V3WXkwM1pqUmlMVFJoTjJFdE9XWXdNUzB4T0RWaE1ERmxNakExWTJZd2dnR2lNQTBHQ1NxR1NJYjMKRFFFQkFRVUFBNElCandBd2dnR0tBb0lCZ1FDdCtkUXlmZVBJa0tmbXd3RVRjR2Y1MDREbHJqZURhSW9UTUVBSApLZTN6bDErMkltb2lJVFgwdTNZRjFXNlhFMU9odktVRTB2bzNIMW0wdFMrTzBIWVdyNDdobklqZWVDNXA1RnVnCnM5NDRqakdyR3kvZDVSWjJDODRTYjlhYVpld3cxb242QXJVY0FSTnJycm9VTkVreithWExMNXp5VkJBYW1IRFAKanJVMkJmenE2OWMzT21wUDRyc3dkYmpsSHRHTXZjL1Z0RVJ4VGRRd01BMnlZRkVHME5ISFFSSlUwN0l5TzBKZQovRVk0M2NRdSsxN0VLMjVHaWVHNGxtd3FqNnpjaERmTkdNZ1dwK2k5elNNQjVMUjBYYkNQU1NaRTNhNFN6L1VCCk9TeTVnc0U1QzJBdmRCd3d5UktFaVBMbFZkamd2dTg0U0JnYmtoZERQQ1FvSGtqKzBIRUdaaE52Tnl3Z3JFMEcKVk1IVW9OM2R0MjQwL0JCR2JGT0x3Ly9WLzY1L3JxWUlMVS9QMmVmc0VIaWtJb3JlYzlMTTlvU3hmUHNGVWZEawo5eHI3VmFvaHNRRlA0SmwybzMyNHI0cW9OL3lJRmVDUmNiZkhNNTdwYlFoWjVmajNIa25zNEZMaDRDZnNrOUp2CkVMSGw0QzBLcXE4cVd6aVdPZmNMWDhkVFM0Y0NBd0VBQWFOQ01FQXdEZ1lEVlIwUEFRSC9CQVFEQWdJRU1BOEcKQTFVZEV3RUIvd1FGTUFNQkFmOHdIUVlEVlIwT0JCWUVGQ1BOTmhTbTg2VEdQRmR0S09KYjhzWWNoU0J4TUEwRwpDU3FHU0liM0RRRUJDd1VBQTRJQmdRQWxkM0k1aU9pMEV3SEZ4THB0M3FYdi9mQkdicVV3LzA1bEsxbTMyQnY5ClpOL2RNa3VXMlFYNXRIcElRUDh2SGlubGZSSjhlL0pKbFhSa09HYjRJSzBjdEtCMFUveUk0NUFkc3NTSDlXankKMEJGWWZtVlNqTVRBdFo2RDN6bkVkdllvK09WUk52bDZSYjJoZG5pcUNwYUNteHMrZktrbWthZFN5cTJ6YldJdgpBNUJXcE5pT2EvUkhzd01DVkFaOUhpUFRlZ0NlMmFYcE1kRU5VdTBFMFNuelpNTW9wTlU1eDkwRW5SajFzdERKCm1JWnBGeGRob0pxV2FSdENDVDloS0hUdmFpdFJ4MGN4TlFqajBSRjhsRzNxMzk1VWJnZ0pDekQ2dWlsejM3dXgKR1lKdTEzWno5UjlFRzJxWFhCU25FbEVSNU96RjhheVplT0Y4a2xRWUN1dU5RazgvSmgyamhyVjdFOG5mVk1KcwpDWldYR2dMcWxRMFFXZmZ6OGV2LzVYVlVlRUlSWld2Ym1Vc01QTEtseWFoU05neWYxQzhweEJlY3ZxWGhrdk80CnB0MS8raXJrTDdkaWZIdGwzVTJkdW8vUFdBM2FHUGpWL3BVN3A0ZjM3Ukd4M1Q0UTNHekUvdzRRZmQxMlBtdWIKWEwyWnl3c1R2WG1sV3AxR2NHVGRyc2M9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K\"\n  },\n  \"masterAuthorizedNetworksConfig\": {\n    \"gcpPublicCidrsAccessEnabled\": true\n  },\n  \"monitoringConfig\": {\n    \"advancedDatapathObservabilityConfig\": {},\n    \"componentConfig\": {\n      \"enableComponents\": [\n        \"SYSTEM_COMPONENTS\"\n      ]\n    },\n    \"managedPrometheusConfig\": {\n      \"enabled\": true\n    }\n  },\n  \"monitoringService\": \"monitoring.googleapis.com/kubernetes\",\n  \"name\": \"cluster-1\",\n  \"network\": \"default\",\n  \"networkConfig\": {\n    \"defaultSnatStatus\": {},\n    \"network\": \"projects/gcpdiag-gke3-gggg/global/networks/default\",\n    \"serviceExternalIpsConfig\": {},\n    \"subnetwork\": \"projects/gcpdiag-gke3-gggg/regions/us-central1/subnetworks/public-subnet\"\n  },\n  \"networkPolicy\": {\n    \"enabled\": true\n  },\n  \"nodeConfig\": {\n    \"diskSizeGb\": 100,\n    \"diskType\": \"pd-balanced\",\n    \"imageType\": \"COS_CONTAINERD\",\n    \"machineType\": \"e2-medium\",\n    \"metadata\": {\n      \"disable-legacy-endpoints\": \"true\"\n    },\n    \"oauthScopes\": [\n      \"https://www.googleapis.com/auth/devstorage.read_only\",\n      \"https://www.googleapis.com/auth/logging.write\",\n      \"https://www.googleapis.com/auth/monitoring\",\n      \"https://www.googleapis.com/auth/service.management.readonly\",\n      \"https://www.googleapis.com/auth/servicecontrol\",\n      \"https://www.googleapis.com/auth/trace.append\"\n    ],\n    \"serviceAccount\": \"default\",\n    \"shieldedInstanceConfig\": {\n      \"enableIntegrityMonitoring\": true\n    },\n    \"windowsNodeConfig\": {}\n  },\n  \"nodePoolDefaults\": {\n    \"nodeConfigDefaults\": {\n      \"loggingConfig\": {\n        \"variantConfig\": {\n          \"variant\": \"DEFAULT\"\n        }\n      }\n    }\n  },\n  \"nodePools\": [\n    {\n      \"conditions\": [\n        {\n          \"canonicalCode\": \"RESOURCE_EXHAUSTED\",\n          \"message\": \"[IP_SPACE_EXHAUSTED]: Instance 'gke-cluster-1-default-pool-a6ea5e55-h1ms' creation failed: IP space of 'projects/gcpdiag-gke3-gggg/regions/us-central1/subnetworks/public-subnet' is exhausted. \"\n        },\n        {\n          \"canonicalCode\": \"RESOURCE_EXHAUSTED\",\n          \"message\": \"Requested resource is exhausted: Not all instances running in IGM after 50.049254938s. Expected 4, running 3, transitioning 1. Current errors: [IP_SPACE_EXHAUSTED]: Instance 'gke-cluster-1-default-pool-a6ea5e55-h1ms' creation failed: IP space of 'projects/gcpdiag-gke3-gggg/regions/us-central1/subnetworks/public-subnet' is exhausted. .\"\n        }\n      ],\n      \"config\": {\n        \"diskSizeGb\": 100,\n        \"diskType\": \"pd-balanced\",\n        \"imageType\": \"COS_CONTAINERD\",\n        \"machineType\": \"e2-medium\",\n        \"metadata\": {\n          \"disable-legacy-endpoints\": \"true\"\n        },\n        \"oauthScopes\": [\n          \"https://www.googleapis.com/auth/devstorage.read_only\",\n          \"https://www.googleapis.com/auth/logging.write\",\n          \"https://www.googleapis.com/auth/monitoring\",\n          \"https://www.googleapis.com/auth/service.management.readonly\",\n          \"https://www.googleapis.com/auth/servicecontrol\",\n          \"https://www.googleapis.com/auth/trace.append\"\n        ],\n        \"serviceAccount\": \"default\",\n        \"shieldedInstanceConfig\": {\n          \"enableIntegrityMonitoring\": true\n        },\n        \"windowsNodeConfig\": {}\n      },\n      \"etag\": \"4f4a8d8f-c3cf-41f8-8825-19eba6fdc455\",\n      \"initialNodeCount\": 4,\n      \"instanceGroupUrls\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke3-gggg/zones/us-central1-c/instanceGroupManagers/gke-cluster-1-default-pool-a6ea5e55-grp\"\n      ],\n      \"locations\": [\n        \"us-central1-c\"\n      ],\n      \"management\": {\n        \"autoRepair\": true,\n        \"autoUpgrade\": true\n      },\n      \"maxPodsConstraint\": {\n        \"maxPodsPerNode\": \"110\"\n      },\n      \"name\": \"default-pool\",\n      \"networkConfig\": {\n        \"enablePrivateNodes\": false,\n        \"podIpv4CidrBlock\": \"10.40.0.0/14\",\n        \"podRange\": \"gke-cluster-1-pods-e478debb\"\n      },\n      \"podIpv4CidrSize\": 24,\n      \"selfLink\": \"https://container.googleapis.com/v1/projects/gcpdiag-gke3-gggg/zones/us-central1-c/clusters/cluster-1/nodePools/default-pool\",\n      \"status\": \"ERROR\",\n      \"statusMessage\": \"Requested resource is exhausted: Not all instances running in IGM after 50.049254938s. Expected 4, running 3, transitioning 1. Current errors: [IP_SPACE_EXHAUSTED]: Instance 'gke-cluster-1-default-pool-a6ea5e55-h1ms' creation failed: IP space of 'projects/gcpdiag-gke3-gggg/regions/us-central1/subnetworks/public-subnet' is exhausted. .\",\n      \"upgradeSettings\": {\n        \"maxSurge\": 1,\n        \"strategy\": \"SURGE\"\n      },\n      \"version\": \"1.29.4-gke.1043002\"\n    }\n  ],\n  \"notificationConfig\": {\n    \"pubsub\": {}\n  },\n  \"privateClusterConfig\": {\n    \"privateEndpoint\": \"10.0.0.2\",\n    \"publicEndpoint\": \"35.239.14.64\"\n  },\n  \"releaseChannel\": {\n    \"channel\": \"REGULAR\"\n  },\n  \"securityPostureConfig\": {\n    \"mode\": \"BASIC\",\n    \"vulnerabilityMode\": \"VULNERABILITY_MODE_UNSPECIFIED\"\n  },\n  \"selfLink\": \"https://container.googleapis.com/v1/projects/gcpdiag-gke3-gggg/zones/us-central1-c/clusters/cluster-1\",\n  \"servicesIpv4Cidr\": \"34.118.224.0/20\",\n  \"shieldedNodes\": {\n    \"enabled\": true\n  },\n  \"status\": \"ERROR\",\n  \"statusMessage\": \"Requested resource is exhausted: Not all instances running in IGM after 50.049254938s. Expected 4, running 3, transitioning 1. Current errors: [IP_SPACE_EXHAUSTED]: Instance 'gke-cluster-1-default-pool-a6ea5e55-h1ms' creation failed: IP space of 'projects/gcpdiag-gke3-gggg/regions/us-central1/subnetworks/public-subnet' is exhausted. .\",\n  \"subnetwork\": \"public-subnet\",\n  \"zone\": \"us-central1-c\"\n}\n"
  },
  {
    "path": "test-data/gke3/json-dumps/container-clusters.json",
    "content": "{\n  \"addonsConfig\": {\n    \"gcePersistentDiskCsiDriverConfig\": {\n      \"enabled\": true\n    },\n    \"kubernetesDashboard\": {\n      \"disabled\": true\n    },\n    \"networkPolicyConfig\": {}\n  },\n  \"autopilot\": {},\n  \"autoscaling\": {\n    \"autoscalingProfile\": \"BALANCED\"\n  },\n  \"binaryAuthorization\": {},\n  \"clusterIpv4Cidr\": \"10.40.0.0/14\",\n  \"conditions\": [\n    {\n      \"canonicalCode\": \"RESOURCE_EXHAUSTED\",\n      \"message\": \"[IP_SPACE_EXHAUSTED]: Instance 'gke-cluster-1-default-pool-a6ea5e55-h1ms' creation failed: IP space of 'projects/gcpdiag-gke3-gggg/regions/us-central1/subnetworks/public-subnet' is exhausted. \"\n    },\n    {\n      \"canonicalCode\": \"RESOURCE_EXHAUSTED\",\n      \"message\": \"Requested resource is exhausted: Not all instances running in IGM after 50.049254938s. Expected 4, running 3, transitioning 1. Current errors: [IP_SPACE_EXHAUSTED]: Instance 'gke-cluster-1-default-pool-a6ea5e55-h1ms' creation failed: IP space of 'projects/gcpdiag-gke3-gggg/regions/us-central1/subnetworks/public-subnet' is exhausted. .\"\n    }\n  ],\n  \"createTime\": \"2024-06-30T14:14:28+00:00\",\n  \"currentMasterVersion\": \"1.29.4-gke.1043002\",\n  \"currentNodeCount\": 4,\n  \"currentNodeVersion\": \"1.29.4-gke.1043002\",\n  \"databaseEncryption\": {\n    \"currentState\": \"CURRENT_STATE_DECRYPTED\",\n    \"state\": \"DECRYPTED\"\n  },\n  \"defaultMaxPodsConstraint\": {\n    \"maxPodsPerNode\": \"110\"\n  },\n  \"endpoint\": \"35.239.14.64\",\n  \"enterpriseConfig\": {\n    \"clusterTier\": \"STANDARD\"\n  },\n  \"etag\": \"21e8b973-68bf-485b-84c9-ad5029ac0e01\",\n  \"expireTime\": \"2024-07-14T14:20:47+00:00\",\n  \"id\": \"e478debbaec74a638eb439fbae5ac7cb4c51ffa27b3049868a20bc5aa1d3c64c\",\n  \"initialClusterVersion\": \"1.29.4-gke.1043002\",\n  \"initialNodeCount\": 4,\n  \"instanceGroupUrls\": [\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke3-gggg/zones/us-central1-c/instanceGroupManagers/gke-cluster-1-default-pool-a6ea5e55-grp\"\n  ],\n  \"ipAllocationPolicy\": {\n    \"clusterIpv4Cidr\": \"10.40.0.0/14\",\n    \"clusterIpv4CidrBlock\": \"10.40.0.0/14\",\n    \"clusterSecondaryRangeName\": \"gke-cluster-1-pods-e478debb\",\n    \"podCidrOverprovisionConfig\": {},\n    \"servicesIpv4Cidr\": \"34.118.224.0/20\",\n    \"servicesIpv4CidrBlock\": \"34.118.224.0/20\",\n    \"stackType\": \"IPV4\",\n    \"useIpAliases\": true\n  },\n  \"labelFingerprint\": \"a9dc16a7\",\n  \"legacyAbac\": {},\n  \"location\": \"us-central1-c\",\n  \"locations\": [\n    \"us-central1-c\"\n  ],\n  \"loggingConfig\": {\n    \"componentConfig\": {\n      \"enableComponents\": [\n        \"SYSTEM_COMPONENTS\",\n        \"WORKLOADS\"\n      ]\n    }\n  },\n  \"loggingService\": \"logging.googleapis.com/kubernetes\",\n  \"maintenancePolicy\": {\n    \"resourceVersion\": \"e3b0c442\"\n  },\n  \"masterAuth\": {\n    \"clientCertificateConfig\": {},\n    \"clusterCaCertificate\": \"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUVMVENDQXBXZ0F3SUJBZ0lSQUlmRVdNQ3I5RkE2dzVhOWI2ZjJUUjh3RFFZSktvWklodmNOQVFFTEJRQXcKTHpFdE1Dc0dBMVVFQXhNa05qRXhaV1JoTUdNdE4yWTBZaTAwWVRkaExUbG1NREV0TVRnMVlUQXhaVEl3TldObQpNQ0FYRFRJME1EWXpNREV6TVRReU9Gb1lEekl3TlRRd05qSXpNVFF4TkRJNFdqQXZNUzB3S3dZRFZRUURFeVEyCk1URmxaR0V3WXkwM1pqUmlMVFJoTjJFdE9XWXdNUzB4T0RWaE1ERmxNakExWTJZd2dnR2lNQTBHQ1NxR1NJYjMKRFFFQkFRVUFBNElCandBd2dnR0tBb0lCZ1FDdCtkUXlmZVBJa0tmbXd3RVRjR2Y1MDREbHJqZURhSW9UTUVBSApLZTN6bDErMkltb2lJVFgwdTNZRjFXNlhFMU9odktVRTB2bzNIMW0wdFMrTzBIWVdyNDdobklqZWVDNXA1RnVnCnM5NDRqakdyR3kvZDVSWjJDODRTYjlhYVpld3cxb242QXJVY0FSTnJycm9VTkVreithWExMNXp5VkJBYW1IRFAKanJVMkJmenE2OWMzT21wUDRyc3dkYmpsSHRHTXZjL1Z0RVJ4VGRRd01BMnlZRkVHME5ISFFSSlUwN0l5TzBKZQovRVk0M2NRdSsxN0VLMjVHaWVHNGxtd3FqNnpjaERmTkdNZ1dwK2k5elNNQjVMUjBYYkNQU1NaRTNhNFN6L1VCCk9TeTVnc0U1QzJBdmRCd3d5UktFaVBMbFZkamd2dTg0U0JnYmtoZERQQ1FvSGtqKzBIRUdaaE52Tnl3Z3JFMEcKVk1IVW9OM2R0MjQwL0JCR2JGT0x3Ly9WLzY1L3JxWUlMVS9QMmVmc0VIaWtJb3JlYzlMTTlvU3hmUHNGVWZEawo5eHI3VmFvaHNRRlA0SmwybzMyNHI0cW9OL3lJRmVDUmNiZkhNNTdwYlFoWjVmajNIa25zNEZMaDRDZnNrOUp2CkVMSGw0QzBLcXE4cVd6aVdPZmNMWDhkVFM0Y0NBd0VBQWFOQ01FQXdEZ1lEVlIwUEFRSC9CQVFEQWdJRU1BOEcKQTFVZEV3RUIvd1FGTUFNQkFmOHdIUVlEVlIwT0JCWUVGQ1BOTmhTbTg2VEdQRmR0S09KYjhzWWNoU0J4TUEwRwpDU3FHU0liM0RRRUJDd1VBQTRJQmdRQWxkM0k1aU9pMEV3SEZ4THB0M3FYdi9mQkdicVV3LzA1bEsxbTMyQnY5ClpOL2RNa3VXMlFYNXRIcElRUDh2SGlubGZSSjhlL0pKbFhSa09HYjRJSzBjdEtCMFUveUk0NUFkc3NTSDlXankKMEJGWWZtVlNqTVRBdFo2RDN6bkVkdllvK09WUk52bDZSYjJoZG5pcUNwYUNteHMrZktrbWthZFN5cTJ6YldJdgpBNUJXcE5pT2EvUkhzd01DVkFaOUhpUFRlZ0NlMmFYcE1kRU5VdTBFMFNuelpNTW9wTlU1eDkwRW5SajFzdERKCm1JWnBGeGRob0pxV2FSdENDVDloS0hUdmFpdFJ4MGN4TlFqajBSRjhsRzNxMzk1VWJnZ0pDekQ2dWlsejM3dXgKR1lKdTEzWno5UjlFRzJxWFhCU25FbEVSNU96RjhheVplT0Y4a2xRWUN1dU5RazgvSmgyamhyVjdFOG5mVk1KcwpDWldYR2dMcWxRMFFXZmZ6OGV2LzVYVlVlRUlSWld2Ym1Vc01QTEtseWFoU05neWYxQzhweEJlY3ZxWGhrdk80CnB0MS8raXJrTDdkaWZIdGwzVTJkdW8vUFdBM2FHUGpWL3BVN3A0ZjM3Ukd4M1Q0UTNHekUvdzRRZmQxMlBtdWIKWEwyWnl3c1R2WG1sV3AxR2NHVGRyc2M9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K\"\n  },\n  \"masterAuthorizedNetworksConfig\": {\n    \"gcpPublicCidrsAccessEnabled\": true\n  },\n  \"monitoringConfig\": {\n    \"advancedDatapathObservabilityConfig\": {},\n    \"componentConfig\": {\n      \"enableComponents\": [\n        \"SYSTEM_COMPONENTS\"\n      ]\n    },\n    \"managedPrometheusConfig\": {\n      \"enabled\": true\n    }\n  },\n  \"monitoringService\": \"monitoring.googleapis.com/kubernetes\",\n  \"name\": \"cluster-1\",\n  \"network\": \"default\",\n  \"networkConfig\": {\n    \"defaultSnatStatus\": {},\n    \"network\": \"projects/gcpdiag-gke3-gggg/global/networks/default\",\n    \"serviceExternalIpsConfig\": {},\n    \"subnetwork\": \"projects/gcpdiag-gke3-gggg/regions/us-central1/subnetworks/public-subnet\"\n  },\n  \"networkPolicy\": {\n    \"enabled\": true\n  },\n  \"nodeConfig\": {\n    \"diskSizeGb\": 100,\n    \"diskType\": \"pd-balanced\",\n    \"imageType\": \"COS_CONTAINERD\",\n    \"machineType\": \"e2-medium\",\n    \"metadata\": {\n      \"disable-legacy-endpoints\": \"true\"\n    },\n    \"oauthScopes\": [\n      \"https://www.googleapis.com/auth/devstorage.read_only\",\n      \"https://www.googleapis.com/auth/logging.write\",\n      \"https://www.googleapis.com/auth/monitoring\",\n      \"https://www.googleapis.com/auth/service.management.readonly\",\n      \"https://www.googleapis.com/auth/servicecontrol\",\n      \"https://www.googleapis.com/auth/trace.append\"\n    ],\n    \"serviceAccount\": \"default\",\n    \"shieldedInstanceConfig\": {\n      \"enableIntegrityMonitoring\": true\n    },\n    \"windowsNodeConfig\": {}\n  },\n  \"nodePoolDefaults\": {\n    \"nodeConfigDefaults\": {\n      \"loggingConfig\": {\n        \"variantConfig\": {\n          \"variant\": \"DEFAULT\"\n        }\n      }\n    }\n  },\n  \"nodePools\": [\n    {\n      \"conditions\": [\n        {\n          \"canonicalCode\": \"RESOURCE_EXHAUSTED\",\n          \"message\": \"[IP_SPACE_EXHAUSTED]: Instance 'gke-cluster-1-default-pool-a6ea5e55-h1ms' creation failed: IP space of 'projects/gcpdiag-gke3-gggg/regions/us-central1/subnetworks/public-subnet' is exhausted. \"\n        },\n        {\n          \"canonicalCode\": \"RESOURCE_EXHAUSTED\",\n          \"message\": \"Requested resource is exhausted: Not all instances running in IGM after 50.049254938s. Expected 4, running 3, transitioning 1. Current errors: [IP_SPACE_EXHAUSTED]: Instance 'gke-cluster-1-default-pool-a6ea5e55-h1ms' creation failed: IP space of 'projects/gcpdiag-gke3-gggg/regions/us-central1/subnetworks/public-subnet' is exhausted. .\"\n        }\n      ],\n      \"config\": {\n        \"diskSizeGb\": 100,\n        \"diskType\": \"pd-balanced\",\n        \"imageType\": \"COS_CONTAINERD\",\n        \"machineType\": \"e2-medium\",\n        \"metadata\": {\n          \"disable-legacy-endpoints\": \"true\"\n        },\n        \"oauthScopes\": [\n          \"https://www.googleapis.com/auth/devstorage.read_only\",\n          \"https://www.googleapis.com/auth/logging.write\",\n          \"https://www.googleapis.com/auth/monitoring\",\n          \"https://www.googleapis.com/auth/service.management.readonly\",\n          \"https://www.googleapis.com/auth/servicecontrol\",\n          \"https://www.googleapis.com/auth/trace.append\"\n        ],\n        \"serviceAccount\": \"default\",\n        \"shieldedInstanceConfig\": {\n          \"enableIntegrityMonitoring\": true\n        },\n        \"windowsNodeConfig\": {}\n      },\n      \"etag\": \"4f4a8d8f-c3cf-41f8-8825-19eba6fdc455\",\n      \"initialNodeCount\": 4,\n      \"instanceGroupUrls\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke3-gggg/zones/us-central1-c/instanceGroupManagers/gke-cluster-1-default-pool-a6ea5e55-grp\"\n      ],\n      \"locations\": [\n        \"us-central1-c\"\n      ],\n      \"management\": {\n        \"autoRepair\": true,\n        \"autoUpgrade\": true\n      },\n      \"maxPodsConstraint\": {\n        \"maxPodsPerNode\": \"110\"\n      },\n      \"name\": \"default-pool\",\n      \"networkConfig\": {\n        \"enablePrivateNodes\": false,\n        \"podIpv4CidrBlock\": \"10.40.0.0/14\",\n        \"podRange\": \"gke-cluster-1-pods-e478debb\"\n      },\n      \"podIpv4CidrSize\": 24,\n      \"selfLink\": \"https://container.googleapis.com/v1/projects/gcpdiag-gke3-gggg/zones/us-central1-c/clusters/cluster-1/nodePools/default-pool\",\n      \"status\": \"ERROR\",\n      \"statusMessage\": \"Requested resource is exhausted: Not all instances running in IGM after 50.049254938s. Expected 4, running 3, transitioning 1. Current errors: [IP_SPACE_EXHAUSTED]: Instance 'gke-cluster-1-default-pool-a6ea5e55-h1ms' creation failed: IP space of 'projects/gcpdiag-gke3-gggg/regions/us-central1/subnetworks/public-subnet' is exhausted. .\",\n      \"upgradeSettings\": {\n        \"maxSurge\": 1,\n        \"strategy\": \"SURGE\"\n      },\n      \"version\": \"1.29.4-gke.1043002\"\n    }\n  ],\n  \"notificationConfig\": {\n    \"pubsub\": {}\n  },\n  \"privateClusterConfig\": {\n    \"privateEndpoint\": \"10.0.0.2\",\n    \"publicEndpoint\": \"35.239.14.64\"\n  },\n  \"releaseChannel\": {\n    \"channel\": \"REGULAR\"\n  },\n  \"securityPostureConfig\": {\n    \"mode\": \"BASIC\",\n    \"vulnerabilityMode\": \"VULNERABILITY_MODE_UNSPECIFIED\"\n  },\n  \"selfLink\": \"https://container.googleapis.com/v1/projects/gcpdiag-gke3-gggg/zones/us-central1-c/clusters/cluster-1\",\n  \"servicesIpv4Cidr\": \"34.118.224.0/20\",\n  \"shieldedNodes\": {\n    \"enabled\": true\n  },\n  \"status\": \"ERROR\",\n  \"statusMessage\": \"Requested resource is exhausted: Not all instances running in IGM after 50.049254938s. Expected 4, running 3, transitioning 1. Current errors: [IP_SPACE_EXHAUSTED]: Instance 'gke-cluster-1-default-pool-a6ea5e55-h1ms' creation failed: IP space of 'projects/gcpdiag-gke3-gggg/regions/us-central1/subnetworks/public-subnet' is exhausted. .\",\n  \"subnetwork\": \"public-subnet\",\n  \"zone\": \"us-central1-c\"\n}\n"
  },
  {
    "path": "test-data/gke3/json-dumps/logging-entries-1.json",
    "content": "{\n  \"entries\": [\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"status\": {\n          \"code\": 8,\n          \"message\": \"Requested resource is exhausted: Not all instances running in IGM after 50.049254938s. Expected 4, running 3, transitioning 1. Current errors: [IP_SPACE_EXHAUSTED]: Instance 'gke-cluster-1-default-pool-a6ea5e55-h1ms' creation failed: IP space of 'projects/gcpdiag-gke3-gggg/regions/us-central1/subnetworks/public-subnet' is exhausted. .\"\n        },\n        \"serviceName\": \"container.googleapis.com\",\n        \"methodName\": \"google.container.v1.ClusterManager.CreateCluster\",\n        \"resourceName\": \"projects/gcpdiag-gke3-gggg/zones/us-central1-c/clusters/cluster-1\",\n        \"metadata\": {\n          \"operationType\": \"CREATE_CLUSTER\"\n        },\n        \"resourceLocation\": {\n          \"currentLocations\": [\n            \"us-central1-c\"\n          ]\n        },\n        \"policyViolationInfo\": {\n          \"orgPolicyViolationInfo\": {}\n        }\n      },\n      \"insertId\": \"1vz9lr0ddn5x\",\n      \"resource\": {\n        \"type\": \"gke_cluster\",\n        \"labels\": {\n          \"cluster_name\": \"cluster-1\",\n          \"location\": \"us-central1-c\",\n          \"project_id\": \"gcpdiag-gke3-gggg\"\n        }\n      },\n      \"timestamp\": \"2024-06-30T14:20:47.243847225Z\",\n      \"severity\": \"ERROR\",\n      \"logName\": \"projects/gcpdiag-gke3-gggg/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1719756871219-5ff98f7e-b0ce-474c-9bb4-589539c82f8b\",\n        \"producer\": \"container.googleapis.com\",\n        \"last\": true\n      },\n      \"receiveTimestamp\": \"2024-06-30T14:20:47.628381432Z\"\n    },\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"status\": {\n          \"code\": 8,\n          \"message\": \"IP_SPACE_EXHAUSTED\",\n          \"details\": [\n            {\n              \"@type\": \"type.googleapis.com/google.protobuf.Struct\",\n              \"value\": {\n                \"ipSpaceExhausted\": {\n                  \"networkOrSubnetworkResource\": {\n                    \"resourceType\": \"SUBNETWORK\",\n                    \"resourceName\": \"public-subnet\",\n                    \"project\": {\n                      \"canonicalProjectId\": \"12340032\"\n                    },\n                    \"scope\": {\n                      \"scopeType\": \"REGION\",\n                      \"scopeName\": \"us-central1\"\n                    }\n                  }\n                }\n              }\n            }\n          ]\n        },\n        \"authenticationInfo\": {\n          \"principalEmail\": \"12340032@cloudservices.gserviceaccount.com\"\n        },\n        \"requestMetadata\": {\n          \"callerSuppliedUserAgent\": \"GCE Managed Instance Group for GKE\"\n        },\n        \"serviceName\": \"compute.googleapis.com\",\n        \"methodName\": \"v1.compute.instances.insert\",\n        \"resourceName\": \"projects/12340032/zones/us-central1-c/instances/gke-cluster-1-default-pool-a6ea5e55-h1ms\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.insert\"\n        }\n      },\n      \"insertId\": \"-1xf12idklrw\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"instance_id\": \"859073022264137727\",\n          \"zone\": \"us-central1-c\",\n          \"project_id\": \"gcpdiag-gke3-gggg\"\n        }\n      },\n      \"timestamp\": \"2024-06-30T14:18:11.532599Z\",\n      \"severity\": \"ERROR\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"55a7363f-a765-44ee-b5d0-bb202ad26028\"\n      },\n      \"logName\": \"projects/gcpdiag-gke3-gggg/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1719757072726-61c1c256b7a14-81165a82-dcab802f\",\n        \"producer\": \"compute.googleapis.com\",\n        \"last\": true\n      },\n      \"receiveTimestamp\": \"2024-06-30T14:18:11.809687227Z\"\n    },\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"status\": {\n          \"code\": 8,\n          \"message\": \"IP_SPACE_EXHAUSTED\",\n          \"details\": [\n            {\n              \"@type\": \"type.googleapis.com/google.protobuf.Struct\",\n              \"value\": {\n                \"ipSpaceExhausted\": {\n                  \"networkOrSubnetworkResource\": {\n                    \"resourceType\": \"SUBNETWORK\",\n                    \"resourceName\": \"public-subnet\",\n                    \"project\": {\n                      \"canonicalProjectId\": \"12340032\"\n                    },\n                    \"scope\": {\n                      \"scopeType\": \"REGION\",\n                      \"scopeName\": \"us-central1\"\n                    }\n                  }\n                }\n              }\n            }\n          ]\n        },\n        \"authenticationInfo\": {\n          \"principalEmail\": \"12340032@cloudservices.gserviceaccount.com\"\n        },\n        \"requestMetadata\": {\n          \"callerSuppliedUserAgent\": \"GCE Managed Instance Group for GKE\"\n        },\n        \"serviceName\": \"compute.googleapis.com\",\n        \"methodName\": \"v1.compute.instances.insert\",\n        \"resourceName\": \"projects/12340032/zones/us-central1-c/instances/gke-cluster-1-default-pool-a6ea5e55-h1ms\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.insert\"\n        }\n      },\n      \"insertId\": \"-dldtrdddavm\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"instance_id\": \"5206188492617209421\",\n          \"project_id\": \"gcpdiag-gke3-gggg\",\n          \"zone\": \"us-central1-c\"\n        }\n      },\n      \"timestamp\": \"2024-06-30T14:16:19.902626Z\",\n      \"severity\": \"ERROR\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"55a7363f-a765-44ee-b5d0-bb202ad26028\"\n      },\n      \"logName\": \"projects/gcpdiag-gke3-gggg/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1719756962352-61c1c1ed74e79-90b4d504-11598e65\",\n        \"producer\": \"compute.googleapis.com\",\n        \"last\": true\n      },\n      \"receiveTimestamp\": \"2024-06-30T14:16:20.907825734Z\"\n    },\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"status\": {\n          \"code\": 8,\n          \"message\": \"IP_SPACE_EXHAUSTED\",\n          \"details\": [\n            {\n              \"@type\": \"type.googleapis.com/google.protobuf.Struct\",\n              \"value\": {\n                \"ipSpaceExhausted\": {\n                  \"networkOrSubnetworkResource\": {\n                    \"resourceType\": \"SUBNETWORK\",\n                    \"resourceName\": \"public-subnet\",\n                    \"project\": {\n                      \"canonicalProjectId\": \"12340032\"\n                    },\n                    \"scope\": {\n                      \"scopeType\": \"REGION\",\n                      \"scopeName\": \"us-central1\"\n                    }\n                  }\n                }\n              }\n            }\n          ]\n        },\n        \"authenticationInfo\": {\n          \"principalEmail\": \"12340032@cloudservices.gserviceaccount.com\"\n        },\n        \"requestMetadata\": {\n          \"callerSuppliedUserAgent\": \"GCE Managed Instance Group for GKE\"\n        },\n        \"serviceName\": \"compute.googleapis.com\",\n        \"methodName\": \"v1.compute.instances.insert\",\n        \"resourceName\": \"projects/12340032/zones/us-central1-c/instances/gke-cluster-1-default-pool-a6ea5e55-h1ms\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.instances.insert\"\n        }\n      },\n      \"insertId\": \"63u9b7dsccm\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"instance_id\": \"1365058717064418922\",\n          \"zone\": \"us-central1-c\",\n          \"project_id\": \"gcpdiag-gke3-gggg\"\n        }\n      },\n      \"timestamp\": \"2024-06-30T14:15:58.474282Z\",\n      \"severity\": \"ERROR\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"55a7363f-a765-44ee-b5d0-bb202ad26028\"\n      },\n      \"logName\": \"projects/gcpdiag-gke3-gggg/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1719756933300-61c1c1d1c0293-95105895-9001d39a\",\n        \"producer\": \"compute.googleapis.com\",\n        \"last\": true\n      },\n      \"receiveTimestamp\": \"2024-06-30T14:15:59.430056173Z\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gke3/json-dumps/logging-entries-2.json",
    "content": "{}\n"
  },
  {
    "path": "test-data/gke3/json-dumps/project.json",
    "content": "{\n  \"name\": \"projects/12340032\",\n  \"parent\": \"folders/1234566\",\n  \"projectId\": \"gcpdiag-gke3-gggg\",\n  \"state\": \"ACTIVE\",\n  \"displayName\": \"gcpdiag-gke3-runbook\",\n  \"createTime\": \"2024-06-30T13:58:04.756870Z\",\n  \"updateTime\": \"2024-06-30T13:58:04.756870Z\",\n  \"etag\": \"W/\\\"1fdd0dc4fcdba7ec\\\"\",\n  \"labels\": {\n    \"gcpdiag\": \"test\"\n  }\n}\n"
  },
  {
    "path": "test-data/gke3/json-dumps/services.json",
    "content": "{\n  \"services\": [\n    {\n      \"name\": \"projects/12340032/services/analyticshub.googleapis.com\",\n      \"config\": {\n        \"name\": \"analyticshub.googleapis.com\",\n        \"title\": \"Analytics Hub API\",\n        \"documentation\": {\n          \"summary\": \"Exchange data and analytics assets securely and efficiently.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340032\"\n    },\n    {\n      \"name\": \"projects/12340032/services/artifactregistry.googleapis.com\",\n      \"config\": {\n        \"name\": \"artifactregistry.googleapis.com\",\n        \"title\": \"Artifact Registry API\",\n        \"documentation\": {\n          \"summary\": \"Store and manage build artifacts in a scalable and integrated service built on Google infrastructure.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"artifactregistry.googleapis.com/Location\",\n            \"displayName\": \"Artifact Registry Location\",\n            \"description\": \"A location in Artifact Registry.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP resource container associated with this resource, such as \\\"my_project\\\" or \\\"organizations/5678\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"artifactregistry.googleapis.com/Project\",\n            \"displayName\": \"Artifact Registry Project\",\n            \"description\": \"A Cloud project in Artifact Registry.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP resource container associated with this resource, such as \\\"my_project\\\" or \\\"organizations/5678\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"artifactregistry.googleapis.com/Repository\",\n            \"displayName\": \"Artifact Registry Repository\",\n            \"description\": \"A repository in Artifact Registry.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP resource container associated with this resource, such as \\\"my_project\\\" or \\\"organizations/5678\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              },\n              {\n                \"key\": \"repository_id\",\n                \"description\": \"The identifier of the Artifact Registry repository, such as \\\"my_repository\\\".\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"artifactregistry.googleapis.com/Location\",\n              \"metrics\": [\n                \"artifactregistry.googleapis.com/asia_multi_region_upstream_host_reads\",\n                \"artifactregistry.googleapis.com/europe_multi_region_upstream_host_reads\",\n                \"artifactregistry.googleapis.com/project_asia_multi_region_upstream_host_reads\",\n                \"artifactregistry.googleapis.com/project_europe_multi_region_upstream_host_reads\",\n                \"artifactregistry.googleapis.com/project_region_upstream_host_reads\",\n                \"artifactregistry.googleapis.com/project_us_multi_region_upstream_host_reads\",\n                \"artifactregistry.googleapis.com/quota/asia_multi_region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/asia_multi_region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/quota/europe_multi_region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/europe_multi_region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/quota/project_asia_multi_region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/project_asia_multi_region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/quota/project_europe_multi_region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/project_europe_multi_region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/quota/project_region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/project_region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/quota/project_us_multi_region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/project_us_multi_region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/quota/region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/quota/us_multi_region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/us_multi_region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/region_upstream_host_reads\",\n                \"artifactregistry.googleapis.com/us_multi_region_upstream_host_reads\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"artifactregistry.googleapis.com/Location\",\n              \"metrics\": [\n                \"artifactregistry.googleapis.com/quota/asia_multi_region_upstream_host_reads/limit\",\n                \"artifactregistry.googleapis.com/quota/europe_multi_region_upstream_host_reads/limit\",\n                \"artifactregistry.googleapis.com/quota/project_asia_multi_region_upstream_host_reads/limit\",\n                \"artifactregistry.googleapis.com/quota/project_europe_multi_region_upstream_host_reads/limit\",\n                \"artifactregistry.googleapis.com/quota/project_region_upstream_host_reads/limit\",\n                \"artifactregistry.googleapis.com/quota/project_us_multi_region_upstream_host_reads/limit\",\n                \"artifactregistry.googleapis.com/quota/region_upstream_host_reads/limit\",\n                \"artifactregistry.googleapis.com/quota/us_multi_region_upstream_host_reads/limit\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"artifactregistry.googleapis.com/Project\",\n              \"metrics\": [\n                \"artifactregistry.googleapis.com/project/api/request_count\",\n                \"artifactregistry.googleapis.com/project/api/request_latencies\",\n                \"artifactregistry.googleapis.com/project/request_count\",\n                \"artifactregistry.googleapis.com/project/request_latencies\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"artifactregistry.googleapis.com/Repository\",\n              \"metrics\": [\n                \"artifactregistry.googleapis.com/repository/api/request_count\",\n                \"artifactregistry.googleapis.com/repository/api/request_latencies\",\n                \"artifactregistry.googleapis.com/repository/request_count\",\n                \"artifactregistry.googleapis.com/repository/request_latencies\",\n                \"artifactregistry.googleapis.com/repository/size\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340032\"\n    },\n    {\n      \"name\": \"projects/12340032/services/autoscaling.googleapis.com\",\n      \"config\": {\n        \"name\": \"autoscaling.googleapis.com\",\n        \"title\": \"Cloud Autoscaling API\",\n        \"documentation\": {\n          \"summary\": \"An API for the Cloud Autoscaling for consuming autoscaling signals.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340032\"\n    },\n    {\n      \"name\": \"projects/12340032/services/bigquery.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigquery.googleapis.com\",\n        \"title\": \"BigQuery API\",\n        \"documentation\": {\n          \"summary\": \"A data platform for customers to create, manage, share and query data.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"bigquery.googleapis.com/Table\",\n            \"displayName\": \"BigQuery Table Resource.\",\n            \"description\": \"BigQuery Table Resource.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP resource container associated with this resource, such as \\\"my-project\\\" or \\\"organizations/123\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The cloud location of the BigQuery table.\"\n              },\n              {\n                \"key\": \"table_reference\",\n                \"description\": \"The table reference in the format of project_id:dataset_id.table_id for the BigQuery table.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"bigquery.googleapis.com/Location\",\n            \"displayName\": \"CheckIamPolicy Request Location\",\n            \"description\": \"A BigQuery Location (sometimes called Region).\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The id of the GCP resource container associated with this resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"bigquery.googleapis.com/InternalDifferentialPrivacyBudget\",\n            \"displayName\": \"Differential Privacy Budget\",\n            \"description\": \"Differential Privacy Budget.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container associated with the metric.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location for the quota.\"\n              },\n              {\n                \"key\": \"budget_id\",\n                \"description\": \"A unique identifier for the budget basis of the privacy budget (e.g view_uuid for per-view budgets).\"\n              },\n              {\n                \"key\": \"multi_region\",\n                \"description\": \"The multi-region identifier for the associated resource (e.g \\\"us\\\", \\\"eu\\\"). Used only for multi-region quota metrics.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"bigquery.googleapis.com/ExternalDifferentialPrivacyBudget\",\n            \"displayName\": \"Differential Privacy Budget External\",\n            \"description\": \"Differential Privacy Budget exposed externally to provide privacy budget metrics.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container associated with the metric.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location for the quota.\"\n              },\n              {\n                \"key\": \"budget_id\",\n                \"description\": \"A unique identifier for the budget basis of the privacy budget (e.g view_uuid for per-view budgets).\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/Table\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_eu/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_us/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_eu/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_us/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/Location\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/quota/internalCheckIamPolicyRequests/exceeded\",\n                \"bigquery.googleapis.com/quota/internalCheckIamPolicyRequests/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/InternalDifferentialPrivacyBudget\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/internal/privacybudget/dp_delta_budget\",\n                \"bigquery.googleapis.com/internal/privacybudget/dp_delta_budget_multi_regional\",\n                \"bigquery.googleapis.com/internal/privacybudget/dp_epsilon_budget\",\n                \"bigquery.googleapis.com/internal/privacybudget/dp_epsilon_budget_multi_regional\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget_multi_regional/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget_multi_regional/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/Location\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/quota/internalCheckIamPolicyRequests/limit\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/Table\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org/limit\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org/usage\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_eu/limit\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_eu/usage\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_us/limit\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_us/usage\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project/limit\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project/usage\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_eu/limit\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_eu/usage\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_us/limit\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_us/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/InternalDifferentialPrivacyBudget\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget_multi_regional/limit\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget_multi_regional/usage\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget_multi_regional/limit\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget_multi_regional/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/ExternalDifferentialPrivacyBudget\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/privacybudget/dp_delta_budget\",\n                \"bigquery.googleapis.com/privacybudget/dp_epsilon_budget\",\n                \"bigquery.googleapis.com/quota/privacybudget/dp_delta_budget/exceeded\",\n                \"bigquery.googleapis.com/quota/privacybudget/dp_epsilon_budget/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/ExternalDifferentialPrivacyBudget\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/quota/privacybudget/dp_delta_budget/limit\",\n                \"bigquery.googleapis.com/quota/privacybudget/dp_delta_budget/usage\",\n                \"bigquery.googleapis.com/quota/privacybudget/dp_epsilon_budget/limit\",\n                \"bigquery.googleapis.com/quota/privacybudget/dp_epsilon_budget/usage\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340032\"\n    },\n    {\n      \"name\": \"projects/12340032/services/bigqueryconnection.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigqueryconnection.googleapis.com\",\n        \"title\": \"BigQuery Connection API\",\n        \"documentation\": {\n          \"summary\": \"Allows users to manage BigQuery connections to external data sources.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340032\"\n    },\n    {\n      \"name\": \"projects/12340032/services/bigquerydatapolicy.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigquerydatapolicy.googleapis.com\",\n        \"title\": \"BigQuery Data Policy API\",\n        \"documentation\": {\n          \"summary\": \"Allows users to manage BigQuery data policies.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340032\"\n    },\n    {\n      \"name\": \"projects/12340032/services/bigquerymigration.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigquerymigration.googleapis.com\",\n        \"title\": \"BigQuery Migration API\",\n        \"documentation\": {\n          \"summary\": \"The migration service, exposing apis for migration jobs operations, and agent management.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340032\"\n    },\n    {\n      \"name\": \"projects/12340032/services/bigqueryreservation.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigqueryreservation.googleapis.com\",\n        \"title\": \"BigQuery Reservation API\",\n        \"documentation\": {\n          \"summary\": \"A service to modify your BigQuery flat-rate reservations.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340032\"\n    },\n    {\n      \"name\": \"projects/12340032/services/bigquerystorage.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigquerystorage.googleapis.com\",\n        \"title\": \"BigQuery Storage API\",\n        \"documentation\": {},\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"bigquerystorage.googleapis.com/DataflowWrite\",\n            \"displayName\": \"BigQuery Storage Write API metrics for Dataflow jobs.\",\n            \"description\": \"BigQuery Storage Write API metrics for Dataflow jobs.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project/folder/org associated with this resource. This is the project that runs the Dataflow job.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The BigQuery region in which the Storage API server locates.\"\n              },\n              {\n                \"key\": \"job_name\",\n                \"description\": \"The name of the Dataflow job this worker belongs to.\"\n              },\n              {\n                \"key\": \"job_id\",\n                \"description\": \"The id of the dataflow job the worker belongs to.\"\n              },\n              {\n                \"key\": \"worker_id\",\n                \"description\": \"The ID of the worker, unique for this job_id.\"\n              },\n              {\n                \"key\": \"destination_project\",\n                \"description\": \"The project of BigQuery destination table of the Dataflow job.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"bigquerystorage.googleapis.com/DataflowWrite\",\n              \"metrics\": [\n                \"bigquerystorage.googleapis.com/dataflow_write/request_count\",\n                \"bigquerystorage.googleapis.com/dataflow_write/uploaded_row_count\",\n                \"bigquerystorage.googleapis.com/dataflow_write/uploaded_bytes_count\",\n                \"bigquerystorage.googleapis.com/dataflow_write/billed_bytes_count\",\n                \"bigquerystorage.googleapis.com/dataflow_write/connection_results_count\",\n                \"bigquerystorage.googleapis.com/dataflow_write/server_side_latencies\",\n                \"bigquerystorage.googleapis.com/dataflow_write/transcoding_latencies\",\n                \"bigquerystorage.googleapis.com/dataflow_write/concurrent_connections\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340032\"\n    },\n    {\n      \"name\": \"projects/12340032/services/compute.googleapis.com\",\n      \"config\": {\n        \"name\": \"compute.googleapis.com\",\n        \"title\": \"Compute Engine API\",\n        \"documentation\": {\n          \"summary\": \"Creates and runs virtual machines on Google Cloud Platform.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"compute.googleapis.com/VpcNetwork\",\n            \"displayName\": \"VPC Network\",\n            \"description\": \"VPC Network.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the VPC Network.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the VPC Network, global always.\"\n              },\n              {\n                \"key\": \"network_id\",\n                \"description\": \"VPC Network resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Location\",\n            \"displayName\": \"Compute Location\",\n            \"description\": \"A location in the Compute API.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the Compute Location.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Interconnect\",\n            \"displayName\": \"Interconnect\",\n            \"description\": \"Interconnect.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the Interconnect.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the Interconnect.\"\n              },\n              {\n                \"key\": \"interconnect_id\",\n                \"description\": \"Interconnect resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/FirewallPolicy\",\n            \"displayName\": \"Firewall policy\",\n            \"description\": \"Firewall policy.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project or organization) associated with the firewall policy.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the firewall policy.\"\n              },\n              {\n                \"key\": \"firewall_policy_id\",\n                \"description\": \"Firewall policy resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/SecurityPolicy\",\n            \"displayName\": \"Security policy\",\n            \"description\": \"Security policy.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the security policy.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the security policy.\"\n              },\n              {\n                \"key\": \"security_policy_id\",\n                \"description\": \"Security policy resource ID.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/OperationType\",\n            \"displayName\": \"Operation Type\",\n            \"description\": \"Operation Type.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the operation.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the operation.\"\n              },\n              {\n                \"key\": \"operation_type\",\n                \"description\": \"Operation type.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Reservation\",\n            \"displayName\": \"Reservation\",\n            \"description\": \"Monitored resource representing a reservation.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container (e.g. project number) associated with the reservation.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The zone that contains the reservation.\"\n              },\n              {\n                \"key\": \"reservation_id\",\n                \"description\": \"Reservation resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/StoragePool\",\n            \"displayName\": \"Storage Pool\",\n            \"description\": \"Monitored resource representing a storage pool.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container (e.g. project number) associated with the reservation.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location that contains the storage pool.\"\n              },\n              {\n                \"key\": \"storage_pool_id\",\n                \"description\": \"Numerical resource ID of the storage pool.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"gce_instance\",\n            \"displayName\": \"VM Instance\",\n            \"description\": \"A virtual machine instance hosted in Compute Engine.\",\n            \"labels\": [\n              {\n                \"key\": \"project_id\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as \\\"my-project\\\".\"\n              },\n              {\n                \"key\": \"instance_id\",\n                \"description\": \"The numeric VM instance identifier assigned by Compute Engine.\"\n              },\n              {\n                \"key\": \"zone\",\n                \"description\": \"The Compute Engine zone in which the VM is running.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/dynamic_routes_per_region_per_peering_group\",\n                \"compute.googleapis.com/global_internal_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/instances_per_peering_group\",\n                \"compute.googleapis.com/instances_per_vpc_network\",\n                \"compute.googleapis.com/internal_lb_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_managed_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_protocol_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/ip_aliases_per_peering_group\",\n                \"compute.googleapis.com/ip_aliases_per_vpc_network\",\n                \"compute.googleapis.com/peerings_per_vpc_network\",\n                \"compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network\",\n                \"compute.googleapis.com/psc_propagated_connections_per_vpc_network\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_accepted_connections_per_producer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_connections_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/exceeded\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/regional_external_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/regional_internal_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/static_routes_per_peering_group\",\n                \"compute.googleapis.com/static_routes_per_vpc_network\",\n                \"compute.googleapis.com/subnet_ranges_per_peering_group\",\n                \"compute.googleapis.com/subnet_ranges_per_vpc_network\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Location\",\n              \"metrics\": [\n                \"compute.googleapis.com/cpus_per_vm_family\",\n                \"compute.googleapis.com/global_dns/request_count\",\n                \"compute.googleapis.com/gpus_per_gpu_family\",\n                \"compute.googleapis.com/inter_region_egress_bandwidth\",\n                \"compute.googleapis.com/local_ssd_total_storage_per_vm_family\",\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/exceeded\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/exceeded\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/exceeded\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/usage\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/exceeded\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/exceeded\",\n                \"compute.googleapis.com/quota/tpus_per_tpu_family/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Interconnect\",\n              \"metrics\": [\n                \"compute.googleapis.com/interconnect_attachments_per_interconnect\",\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/FirewallPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/fqdns_per_global_network_firewall_policy\",\n                \"compute.googleapis.com/fqdns_per_regional_network_firewall_policy\",\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/rule_attributes_per_global_network_firewall_policy\",\n                \"compute.googleapis.com/rule_attributes_per_regional_network_firewall_policy\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/SecurityPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/exceeded\",\n                \"compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/exceeded\",\n                \"compute.googleapis.com/quota/advanced_rules_per_security_policy/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/OperationType\",\n              \"metrics\": [\n                \"compute.googleapis.com/global_concurrent_operations\",\n                \"compute.googleapis.com/quota/concurrent/global_concurrent_operations/exceeded\",\n                \"compute.googleapis.com/quota/concurrent/internal/global_concurrent_operations/combined_units\",\n                \"compute.googleapis.com/quota/concurrent/internal/regional_concurrent_operations/combined_units\",\n                \"compute.googleapis.com/quota/concurrent/regional_concurrent_operations/exceeded\",\n                \"compute.googleapis.com/regional_concurrent_operations\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"gce_instance\",\n              \"metrics\": [\n                \"compute.googleapis.com/instance/global_dns/request_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Reservation\",\n              \"metrics\": [\n                \"compute.googleapis.com/reservation/reserved\",\n                \"compute.googleapis.com/reservation/assured\",\n                \"compute.googleapis.com/reservation/used\",\n                \"compute.googleapis.com/reservation/internal/matching_instances\",\n                \"compute.googleapis.com/reservation/internal/prespuns_by_state\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/StoragePool\",\n              \"metrics\": [\n                \"compute.googleapis.com/storage_pool/disks\",\n                \"compute.googleapis.com/storage_pool/provisioned_capacity\",\n                \"compute.googleapis.com/storage_pool/used_capacity\",\n                \"compute.googleapis.com/storage_pool/total_disk_provisioned_capacity\",\n                \"compute.googleapis.com/storage_pool/provisioned_iops\",\n                \"compute.googleapis.com/storage_pool/used_iops\",\n                \"compute.googleapis.com/storage_pool/total_disk_provisioned_iops\",\n                \"compute.googleapis.com/storage_pool/provisioned_throughput\",\n                \"compute.googleapis.com/storage_pool/used_throughput\",\n                \"compute.googleapis.com/storage_pool/total_disk_provisioned_throughput\",\n                \"compute.googleapis.com/storage_pool/capacity_utilization\",\n                \"compute.googleapis.com/storage_pool/iops_utilization\",\n                \"compute.googleapis.com/storage_pool/throughput_utilization\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Location\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/limit\",\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/usage\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/limit\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/usage\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/limit\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/limit\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/usage\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/limit\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/usage\",\n                \"compute.googleapis.com/quota/tpus_per_tpu_family/limit\",\n                \"compute.googleapis.com/quota/tpus_per_tpu_family/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/limit\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/usage\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_accepted_connections_per_producer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_accepted_connections_per_producer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_connections_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_connections_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/limit\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/usage\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Interconnect\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/limit\",\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/FirewallPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/SecurityPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/limit\",\n                \"compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/usage\",\n                \"compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/limit\",\n                \"compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/usage\",\n                \"compute.googleapis.com/quota/advanced_rules_per_security_policy/limit\",\n                \"compute.googleapis.com/quota/advanced_rules_per_security_policy/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/OperationType\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/concurrent/global_concurrent_operations/limit\",\n                \"compute.googleapis.com/quota/concurrent/regional_concurrent_operations/limit\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340032\"\n    },\n    {\n      \"name\": \"projects/12340032/services/container.googleapis.com\",\n      \"config\": {\n        \"name\": \"container.googleapis.com\",\n        \"title\": \"Kubernetes Engine API\",\n        \"documentation\": {\n          \"summary\": \"Builds and manages container-based applications, powered by the open source Kubernetes technology.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"container.googleapis.com/Cluster\",\n            \"displayName\": \"Kubernetes Cluster Limits\",\n            \"description\": \"Kubernetes Cluster.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"Project or organization.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Region or zone where the cluster was created.\"\n              },\n              {\n                \"key\": \"cluster_name\",\n                \"description\": \"Cluster name.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"container.googleapis.com/NodePool\",\n            \"displayName\": \"GKE Node Pool\",\n            \"description\": \"GKE Node Pool.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"Project or organization.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Region or zone where the cluster was created.\"\n              },\n              {\n                \"key\": \"cluster_name\",\n                \"description\": \"Cluster name.\"\n              },\n              {\n                \"key\": \"node_pool_name\",\n                \"description\": \"Node pool name.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"container.googleapis.com/Cluster\",\n              \"metrics\": [\n                \"container.googleapis.com/quota/containers_per_cluster_autopilot\",\n                \"container.googleapis.com/quota/containers_per_cluster_standard\",\n                \"container.googleapis.com/quota/etcd_database_size_bytes\",\n                \"container.googleapis.com/quota/nodes_per_cluster\",\n                \"container.googleapis.com/quota/pods_per_cluster_autopilot\",\n                \"container.googleapis.com/quota/pods_per_cluster_standard\",\n                \"container.googleapis.com/quota/quota/containers_per_cluster_autopilot/exceeded\",\n                \"container.googleapis.com/quota/quota/containers_per_cluster_standard/exceeded\",\n                \"container.googleapis.com/quota/quota/etcd_database_size_bytes/exceeded\",\n                \"container.googleapis.com/quota/quota/etcd_database_size_gib/exceeded\",\n                \"container.googleapis.com/quota/quota/nodes_per_cluster/exceeded\",\n                \"container.googleapis.com/quota/quota/pods_per_cluster_autopilot/exceeded\",\n                \"container.googleapis.com/quota/quota/pods_per_cluster_standard/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"container.googleapis.com/NodePool\",\n              \"metrics\": [\n                \"container.googleapis.com/quota/nodes_per_node_pool\",\n                \"container.googleapis.com/quota/quota/nodes_per_node_pool/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"container.googleapis.com/Cluster\",\n              \"metrics\": [\n                \"container.googleapis.com/quota/quota/containers_per_cluster_autopilot/limit\",\n                \"container.googleapis.com/quota/quota/containers_per_cluster_autopilot/usage\",\n                \"container.googleapis.com/quota/quota/containers_per_cluster_standard/limit\",\n                \"container.googleapis.com/quota/quota/containers_per_cluster_standard/usage\",\n                \"container.googleapis.com/quota/quota/etcd_database_size_bytes/limit\",\n                \"container.googleapis.com/quota/quota/etcd_database_size_bytes/usage\",\n                \"container.googleapis.com/quota/quota/etcd_database_size_gib/limit\",\n                \"container.googleapis.com/quota/quota/etcd_database_size_gib/usage\",\n                \"container.googleapis.com/quota/quota/nodes_per_cluster/limit\",\n                \"container.googleapis.com/quota/quota/nodes_per_cluster/usage\",\n                \"container.googleapis.com/quota/quota/pods_per_cluster_autopilot/limit\",\n                \"container.googleapis.com/quota/quota/pods_per_cluster_autopilot/usage\",\n                \"container.googleapis.com/quota/quota/pods_per_cluster_standard/limit\",\n                \"container.googleapis.com/quota/quota/pods_per_cluster_standard/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"container.googleapis.com/NodePool\",\n              \"metrics\": [\n                \"container.googleapis.com/quota/quota/nodes_per_node_pool/limit\",\n                \"container.googleapis.com/quota/quota/nodes_per_node_pool/usage\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340032\"\n    },\n    {\n      \"name\": \"projects/12340032/services/containerfilesystem.googleapis.com\",\n      \"config\": {\n        \"name\": \"containerfilesystem.googleapis.com\",\n        \"title\": \"Container File System API\",\n        \"documentation\": {\n          \"summary\": \"Stream images stored in Artifact Registry to GKE\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340032\"\n    },\n    {\n      \"name\": \"projects/12340032/services/containerregistry.googleapis.com\",\n      \"config\": {\n        \"name\": \"containerregistry.googleapis.com\",\n        \"title\": \"Container Registry API\",\n        \"documentation\": {\n          \"summary\": \"Google Container Registry provides secure, private Docker image storage on Google Cloud Platform.  Our API follows the Docker Registry API specification, so we are fully compatible with the Docker CLI client, as well as standard tooling using the Docker Registry API.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340032\"\n    },\n    {\n      \"name\": \"projects/12340032/services/containerthreatdetection.googleapis.com\",\n      \"config\": {\n        \"name\": \"containerthreatdetection.googleapis.com\",\n        \"title\": \"Container Threat Detection API\",\n        \"documentation\": {},\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340032\"\n    },\n    {\n      \"name\": \"projects/12340032/services/dataform.googleapis.com\",\n      \"config\": {\n        \"name\": \"dataform.googleapis.com\",\n        \"title\": \"Dataform API\",\n        \"documentation\": {\n          \"summary\": \"Service to develop, version control, and operationalize SQL pipelines in BigQuery.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340032\"\n    },\n    {\n      \"name\": \"projects/12340032/services/dataplex.googleapis.com\",\n      \"config\": {\n        \"name\": \"dataplex.googleapis.com\",\n        \"title\": \"Cloud Dataplex API\",\n        \"documentation\": {\n          \"summary\": \"Dataplex API is used to manage the lifecycle of data lakes.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"dataplex.googleapis.com/Lake\",\n            \"displayName\": \"Cloud Dataplex Lake\",\n            \"description\": \"A Cloud Dataplex Lake.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of GCP project associated with this resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The GCP region associated with this resource.\"\n              },\n              {\n                \"key\": \"lake_id\",\n                \"description\": \"The identifier of this Lake resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"dataplex.googleapis.com/Zone\",\n            \"displayName\": \"Cloud Dataplex Zone\",\n            \"description\": \"A Zone within a Cloud Dataplex Lake.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of GCP project associated with this resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The GCP region associated with this resource.\"\n              },\n              {\n                \"key\": \"lake_id\",\n                \"description\": \"The identifier of the Lake resource containing this resource.\"\n              },\n              {\n                \"key\": \"zone_id\",\n                \"description\": \"The identifier of this Zone resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"dataplex.googleapis.com/Asset\",\n            \"displayName\": \"Cloud Dataplex Asset\",\n            \"description\": \"An Asset within a Cloud Dataplex Lake.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of GCP project associated with this resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The GCP region associated with this resource.\"\n              },\n              {\n                \"key\": \"lake_id\",\n                \"description\": \"The identifier of the Lake resource containing this resource.\"\n              },\n              {\n                \"key\": \"zone_id\",\n                \"description\": \"The identifier of the Zone resource containing this resource.\"\n              },\n              {\n                \"key\": \"asset_id\",\n                \"description\": \"The identifier of this Asset resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"dataplex.googleapis.com/Environment\",\n            \"displayName\": \"Cloud Dataplex Environment\",\n            \"description\": \"An Environment within a Cloud Dataplex Lake.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of GCP project associated with this resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The GCP region associated with this resource.\"\n              },\n              {\n                \"key\": \"lake_id\",\n                \"description\": \"The identifier of the Lake resource containing this resource.\"\n              },\n              {\n                \"key\": \"environment_id\",\n                \"description\": \"The identifier of this Environment resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"dataplex.googleapis.com/Lake\",\n              \"metrics\": [\n                \"dataplex.googleapis.com/lake/requires_action\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"dataplex.googleapis.com/Zone\",\n              \"metrics\": [\n                \"dataplex.googleapis.com/zone/requires_action\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"dataplex.googleapis.com/Asset\",\n              \"metrics\": [\n                \"dataplex.googleapis.com/asset/requires_action\",\n                \"dataplex.googleapis.com/asset/active\",\n                \"dataplex.googleapis.com/asset/data_items\",\n                \"dataplex.googleapis.com/asset/data_size\",\n                \"dataplex.googleapis.com/asset/tables\",\n                \"dataplex.googleapis.com/asset/filesets\",\n                \"dataplex.googleapis.com/asset/entities_pending_bigquery_metadata_updates\",\n                \"dataplex.googleapis.com/asset/entities_pending_bigquery_iampolicy_updates\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340032\"\n    },\n    {\n      \"name\": \"projects/12340032/services/dns.googleapis.com\",\n      \"config\": {\n        \"name\": \"dns.googleapis.com\",\n        \"title\": \"Cloud DNS API\",\n        \"documentation\": {},\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340032\"\n    },\n    {\n      \"name\": \"projects/12340032/services/gkebackup.googleapis.com\",\n      \"config\": {\n        \"name\": \"gkebackup.googleapis.com\",\n        \"title\": \"Backup for GKE API\",\n        \"documentation\": {\n          \"summary\": \"Backup for GKE is a managed Kubernetes workload backup and restore service\\nfor GKE clusters.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"gkebackup.googleapis.com/BackupPlan\",\n            \"displayName\": \"GKE Backup Plan\",\n            \"description\": \"A backup plan provides configuration, location, and management functions for a sequence of backups.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the Google Cloud container associated with the resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The Google Cloud location where this backupPlan resides.\"\n              },\n              {\n                \"key\": \"backup_plan_id\",\n                \"description\": \"The name of the backupPlan.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"gkebackup.googleapis.com/RestorePlan\",\n            \"displayName\": \"GKE Restore Plan\",\n            \"description\": \"A restore plan defines the configuration of a series of restore operations to be performed against backups which belong to the specified backup plan.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the Google Cloud container associated with the resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The Google Cloud location where this restorePlan resides.\"\n              },\n              {\n                \"key\": \"restore_plan_id\",\n                \"description\": \"The name of the restorePlan.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"gkebackup.googleapis.com/Project\",\n            \"displayName\": \"Backup for GKE Project\",\n            \"description\": \"A Project in the Backup for GKE API.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project associated with this resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The Google Cloud location of the resource.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"gkebackup.googleapis.com/BackupPlan\",\n              \"metrics\": [\n                \"gkebackup.googleapis.com/backup_created_count\",\n                \"gkebackup.googleapis.com/backup_deleted_count\",\n                \"gkebackup.googleapis.com/backup_completion_times\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"gkebackup.googleapis.com/RestorePlan\",\n              \"metrics\": [\n                \"gkebackup.googleapis.com/restore_created_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"gkebackup.googleapis.com/Project\",\n              \"metrics\": [\n                \"gkebackup.googleapis.com/internal/backup_plan_created_count\",\n                \"gkebackup.googleapis.com/internal/backup_plan_existence\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340032\"\n    },\n    {\n      \"name\": \"projects/12340032/services/iam.googleapis.com\",\n      \"config\": {\n        \"name\": \"iam.googleapis.com\",\n        \"title\": \"Identity and Access Management (IAM) API\",\n        \"documentation\": {\n          \"summary\": \"Manages identity and access control for Google Cloud resources, including the creation of service accounts, which you can use to authenticate to Google and make API calls. Enabling this API also enables the IAM Service Account Credentials API (iamcredentials.googleapis.com). However, disabling this API doesn't disable the IAM Service Account Credentials API.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"iam_service_account\",\n            \"displayName\": \"IAM Service Account\",\n            \"description\": \"An IAM Service Account.\",\n            \"labels\": [\n              {\n                \"key\": \"project_id\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"unique_id\",\n                \"description\": \"The unique_id of the service account.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"iam.googleapis.com/WorkloadIdentityPoolProvider\",\n            \"displayName\": \"Workload Identity Pool Provider\",\n            \"description\": \"A workload identity pool provider.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location of the resource.\"\n              },\n              {\n                \"key\": \"pool_id\",\n                \"description\": \"The ID of the provider's workload identity pool parent resource.\"\n              },\n              {\n                \"key\": \"provider_id\",\n                \"description\": \"The ID of the workload identity pool provider resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"iam.googleapis.com/WorkforcePoolProvider\",\n            \"displayName\": \"Workforce Identity Pool Provider\",\n            \"description\": \"A workforce identity pool provider.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the Google Cloud organization associated with this resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location of the resource.\"\n              },\n              {\n                \"key\": \"pool_id\",\n                \"description\": \"The ID of the provider's workforce pool parent resource.\"\n              },\n              {\n                \"key\": \"provider_id\",\n                \"description\": \"The ID of the workforce pool provider resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"iam.googleapis.com/WorkloadIdentityPoolProvider\",\n              \"metrics\": [\n                \"iam.googleapis.com/workload_identity_federation/count\",\n                \"iam.googleapis.com/workload_identity_federation/key_usage_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"iam_service_account\",\n              \"metrics\": [\n                \"iam.googleapis.com/service_account/authn_events_count\",\n                \"iam.googleapis.com/service_account/key/authn_events_count\",\n                \"iam.googleapis.com/service_account/authn_events_count_preprod\",\n                \"iam.googleapis.com/service_account/key/authn_events_count_preprod\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"iam.googleapis.com/WorkforcePoolProvider\",\n              \"metrics\": [\n                \"iam.googleapis.com/workforce_identity_federation/count\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340032\"\n    },\n    {\n      \"name\": \"projects/12340032/services/iamcredentials.googleapis.com\",\n      \"config\": {\n        \"name\": \"iamcredentials.googleapis.com\",\n        \"title\": \"IAM Service Account Credentials API\",\n        \"documentation\": {\n          \"summary\": \"Creates short-lived credentials for impersonating IAM service accounts. Disabling this API also disables the IAM API (iam.googleapis.com). However, enabling this API doesn't enable the IAM API.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340032\"\n    },\n    {\n      \"name\": \"projects/12340032/services/logging.googleapis.com\",\n      \"config\": {\n        \"name\": \"logging.googleapis.com\",\n        \"title\": \"Cloud Logging API\",\n        \"documentation\": {\n          \"summary\": \"Writes log entries and manages your Cloud Logging configuration.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"logging.googleapis.com/ChargedProject\",\n            \"displayName\": \"Cloud logging target\",\n            \"description\": \"A cloud logging specialization target schema of cloud.ChargedProject.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The monitored resource container. Could be project, workspace, etc.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The service-specific notion of location.\"\n              },\n              {\n                \"key\": \"service\",\n                \"description\": \"The name of the API service with which the data is associated (e.g.,'logging.googleapis.com').\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"logging.googleapis.com/ChargedProject\",\n              \"metrics\": [\n                \"logging.googleapis.com/billing/ingested_bytes\",\n                \"logging.googleapis.com/billing/stored_bytes\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340032\"\n    },\n    {\n      \"name\": \"projects/12340032/services/monitoring.googleapis.com\",\n      \"config\": {\n        \"name\": \"monitoring.googleapis.com\",\n        \"title\": \"Cloud Monitoring API\",\n        \"documentation\": {\n          \"summary\": \"Manages your Cloud Monitoring data and configurations.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"monitoring.googleapis.com/ChargedProject\",\n            \"displayName\": \"Cloud monitoring target\",\n            \"description\": \"A cloud monitoring specialization target schema of cloud.ChargedProject.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The monitored resource container. Could be project, workspace, etc.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The service-specific notion of location.\"\n              },\n              {\n                \"key\": \"service\",\n                \"description\": \"The name of the API service with which the data is associated (e.g.,'monitoring.googleapis.com').\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"monitoring.googleapis.com/MetricStatistics\",\n            \"displayName\": \"Metric Statistics\",\n            \"description\": \"Information about a user-written metric in Cloud Monitoring.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project to which the metric is written, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The cloud region where the metric was received.\"\n              },\n              {\n                \"key\": \"metric_type\",\n                \"description\": \"The metric type.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"monitoring.googleapis.com/MetricIngestionAttribution\",\n            \"displayName\": \"Metric Ingestion Attribution\",\n            \"description\": \"Attribution for metric ingestion.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project to which the metric is written, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location of the resource that the metric ingestion was associated with, unless it was 'global', in which case this will be the cloud region where the metric was received.\"\n              },\n              {\n                \"key\": \"attribution_dimension\",\n                \"description\": \"The dimension used for attribution reporting. It is not recommended that aggregations are performed across dimensions because a single metric point can be recorded with multiple dimensions which could cause double counting. Currently only \\\"namespace\\\" and \\\"cluster\\\" are supported.\"\n              },\n              {\n                \"key\": \"attribution_id\",\n                \"description\": \"The attribution id of the source of the metric write.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"monitoring.googleapis.com/ChargedProject\",\n              \"metrics\": [\n                \"monitoring.googleapis.com/billing/bytes_ingested\",\n                \"monitoring.googleapis.com/billing/samples_ingested\",\n                \"monitoring.googleapis.com/internal/billing/gke_enterprise_samples_ingested\",\n                \"monitoring.googleapis.com/internal/billing/non_chargeable_samples_ingested\",\n                \"monitoring.googleapis.com/internal/stats/filtered_sample_count\",\n                \"monitoring.googleapis.com/internal/stats/filtered_byte_count\",\n                \"monitoring.googleapis.com/internal/stats/metrics_queried_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"monitoring.googleapis.com/MetricStatistics\",\n              \"metrics\": [\n                \"monitoring.googleapis.com/collection/write_request_count\",\n                \"monitoring.googleapis.com/collection/write_request_point_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"monitoring.googleapis.com/MetricIngestionAttribution\",\n              \"metrics\": [\n                \"monitoring.googleapis.com/collection/attribution/sample_count\",\n                \"monitoring.googleapis.com/collection/attribution/write_sample_count\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340032\"\n    },\n    {\n      \"name\": \"projects/12340032/services/networkconnectivity.googleapis.com\",\n      \"config\": {\n        \"name\": \"networkconnectivity.googleapis.com\",\n        \"title\": \"Network Connectivity API\",\n        \"documentation\": {\n          \"summary\": \"This API enables connectivity with and between Google Cloud resources.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"networkconnectivity.googleapis.com/Hub\",\n            \"displayName\": \"Network Connectivity Hub\",\n            \"description\": \"A Network Connectivity hub.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP resource container that this hub is in.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The identifier of the location that this hub is in.\"\n              },\n              {\n                \"key\": \"hub_id\",\n                \"description\": \"The identifier of this hub.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"networkconnectivity.googleapis.com/RouteTable\",\n            \"displayName\": \"Network Connectivity Route Table\",\n            \"description\": \"A route table associated with a Network Connectivity hub.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project associated with this route table.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The identifier of the location that this route table is in.\"\n              },\n              {\n                \"key\": \"hub_id\",\n                \"description\": \"The identifier of the hub that is associated with this route table.\"\n              },\n              {\n                \"key\": \"route_table_id\",\n                \"description\": \"The identifier of this route table.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"networkconnectivity.googleapis.com/Hub\",\n              \"metrics\": [\n                \"networkconnectivity.googleapis.com/active_vpc_spokes_per_hub\",\n                \"networkconnectivity.googleapis.com/groups_per_hub\",\n                \"networkconnectivity.googleapis.com/quota/active_vpc_spokes_per_hub/exceeded\",\n                \"networkconnectivity.googleapis.com/quota/groups_per_hub/exceeded\",\n                \"networkconnectivity.googleapis.com/quota/static_routes_per_hub/exceeded\",\n                \"networkconnectivity.googleapis.com/static_routes_per_hub\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"networkconnectivity.googleapis.com/RouteTable\",\n              \"metrics\": [\n                \"networkconnectivity.googleapis.com/quota/routes_per_route_table/exceeded\",\n                \"networkconnectivity.googleapis.com/routes_per_route_table\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"networkconnectivity.googleapis.com/Hub\",\n              \"metrics\": [\n                \"networkconnectivity.googleapis.com/quota/active_vpc_spokes_per_hub/limit\",\n                \"networkconnectivity.googleapis.com/quota/active_vpc_spokes_per_hub/usage\",\n                \"networkconnectivity.googleapis.com/quota/groups_per_hub/limit\",\n                \"networkconnectivity.googleapis.com/quota/groups_per_hub/usage\",\n                \"networkconnectivity.googleapis.com/quota/static_routes_per_hub/limit\",\n                \"networkconnectivity.googleapis.com/quota/static_routes_per_hub/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"networkconnectivity.googleapis.com/RouteTable\",\n              \"metrics\": [\n                \"networkconnectivity.googleapis.com/quota/routes_per_route_table/limit\",\n                \"networkconnectivity.googleapis.com/quota/routes_per_route_table/usage\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340032\"\n    },\n    {\n      \"name\": \"projects/12340032/services/networkmanagement.googleapis.com\",\n      \"config\": {\n        \"name\": \"networkmanagement.googleapis.com\",\n        \"title\": \"Network Management API\",\n        \"documentation\": {\n          \"summary\": \"The Network Management API provides a collection of network performance monitoring and diagnostic capabilities.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340032\"\n    },\n    {\n      \"name\": \"projects/12340032/services/oslogin.googleapis.com\",\n      \"config\": {\n        \"name\": \"oslogin.googleapis.com\",\n        \"title\": \"Cloud OS Login API\",\n        \"documentation\": {\n          \"summary\": \"You can use OS Login to manage access to your VM instances using IAM roles.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340032\"\n    },\n    {\n      \"name\": \"projects/12340032/services/pubsub.googleapis.com\",\n      \"config\": {\n        \"name\": \"pubsub.googleapis.com\",\n        \"title\": \"Cloud Pub/Sub API\",\n        \"documentation\": {\n          \"summary\": \"Provides reliable, many-to-many, asynchronous messaging between applications.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340032\"\n    },\n    {\n      \"name\": \"projects/12340032/services/storage-api.googleapis.com\",\n      \"config\": {\n        \"name\": \"storage-api.googleapis.com\",\n        \"title\": \"Google Cloud Storage JSON API\",\n        \"documentation\": {\n          \"summary\": \"Lets you store and retrieve potentially-large, immutable data objects.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340032\"\n    },\n    {\n      \"name\": \"projects/12340032/services/websecurityscanner.googleapis.com\",\n      \"config\": {\n        \"name\": \"websecurityscanner.googleapis.com\",\n        \"title\": \"Web Security Scanner API\",\n        \"documentation\": {\n          \"summary\": \"Scans your Compute and App Engine apps for common web vulnerabilities.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340032\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gke3/network.tf",
    "content": "/**\n * Copyright 2023 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n# Public Subnet\nresource \"google_compute_subnetwork\" \"public_subnet\" {\n  name          = \"public-subnet\"\n  project       = google_project.project.project_id\n  network       = \"default\"\n  ip_cidr_range = \"10.0.0.0/29\" # Adjust as needed\n  region        = var.region\n}\n\nresource \"google_compute_subnetwork\" \"public_subnet-2\" {\n  name          = \"public-subnet-2\"\n  project       = google_project.project.project_id\n  network       = \"default\"\n  ip_cidr_range = \"10.10.0.0/24\" # Adjust as needed\n  region        = var.region\n}\n"
  },
  {
    "path": "test-data/gke3/project.tf",
    "content": "/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nresource \"random_string\" \"project_id_suffix\" {\n  length  = 8\n  numeric = true\n  lower   = true\n  upper   = false\n  special = false\n}\n\nresource \"google_project\" \"project\" {\n  name       = \"gcpdiag-gke3-runbook\"\n  project_id = var.project_id != \"\" ? var.project_id : \"gcpdiag-gke3-${random_string.project_id_suffix.id}\"\n  org_id     = var.folder_id == \"\" ? var.org_id : null\n  folder_id  = var.folder_id != \"\" ? var.folder_id : null\n  //billing_account = var.billing_account_id\n  labels = {\n    gcpdiag : \"test\"\n  }\n  lifecycle {\n    ignore_changes = all\n  }\n\n}\n\nresource \"google_project_service\" \"compute\" {\n  project = google_project.project.project_id\n  service = \"compute.googleapis.com\"\n}\n\nresource \"google_project_service\" \"logging\" {\n  project = google_project.project.project_id\n  service = \"logging.googleapis.com\"\n}\n\ndata \"google_compute_default_service_account\" \"default\" {\n  project    = google_project.project.project_id\n  depends_on = [google_project_service.compute]\n}\n\nresource \"google_project_service\" \"container\" {\n  project = google_project.project.project_id\n  service = \"container.googleapis.com\"\n}\n\nresource \"google_project_service\" \"networkmanagement\" {\n  project = google_project.project.project_id\n  service = \"networkmanagement.googleapis.com\"\n}\n\nresource \"google_project_service\" \"monitoring\" {\n  project = google_project.project.project_id\n  service = \"monitoring.googleapis.com\"\n}\n\noutput \"project_id\" {\n  value = google_project.project.project_id\n}\n\noutput \"project_id_suffix\" {\n  value = random_string.project_id_suffix.id\n}\n\noutput \"project_nr\" {\n  value = google_project.project.number\n}\n\noutput \"org_id\" {\n  value = var.org_id\n}\n"
  },
  {
    "path": "test-data/gke3/variables.tf",
    "content": "/**\n * Copyright 2023 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nvariable \"org_id\" {}\n\nvariable \"project_id\" {\n  //default = \"use-an-existing-test-project\"\n}\n\nvariable \"billing_account_id\" {}\n\nvariable \"region\" {\n  default = \"us-central1\"\n}\n\nvariable \"zone\" {\n  default = \"us-central1-c\"\n}\n\nvariable \"folder_id\" { default = \"\" }\n"
  },
  {
    "path": "test-data/gke4/Makefile",
    "content": "PROJECT_ID  := $(shell terraform output -raw project_id)\nPROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix)\nPROJECT_NR  := $(shell terraform output -raw project_nr)\nORG_ID      := $(shell terraform output -raw org_id)\nCURL         = ../../bin/curl-wrap.sh\nJSON_CLEANER = ../../bin/json-cleaner\nREGION_1     = europe-west4\nZONE_1       = europe-west4-a\nZONE_EMPTY   = europe-west1-b\nSUBNETWORK_1 = gke1-subnet\n\nFAKE_PROJECT_ID_SUFFIX = aaaa\nFAKE_PROJECT_NR = 12340033\nFAKE_ORG_ID = 11112222\nSED_SUBST_FAKE = sed -e \"s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/\" \\\n\t\t     -e \"s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/\" \\\n\t\t     -e \"s/$(ORG_ID)/$(FAKE_ORG_ID)/\" \\\n\nall:\t\\\n\tjson-dumps/container-clusters.json \\\n\tjson-dumps/services.json \\\n\tjson-dumps/project.json \\\n\tjson-dumps/logging-entries-1.json\n\n\n\ninclude ../Makefile.inc\n\njson-dumps/project.json:\n\t$(CURL) -fsS \\\n\t\t'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/services.json:\n\t$(CURL) -fsS \\\n\t        'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/container-clusters.json:\n\t$(CURL) -fsS \\\n\t\t'https://container.googleapis.com/v1/projects/$(PROJECT_ID)/locations/-/clusters' \\\n\t\t| $(JSON_CLEANER) clusters \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/logging-entries-1.json:\n\t$(CURL) -fsS \\\n\t\t'https://logging.googleapis.com/v2/entries:list' \\\n\t\t--header \"Content-Type:text/json\" \\\n\t\t-d \"$$LOGGING_ENTRIES_BODY\" \\\n\t\t| $(SED_SUBST_FAKE) >$@\n"
  },
  {
    "path": "test-data/gke4/cluster.tf",
    "content": "/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n# GKE cluster with monitoring disabled\n# And with small pod CIDR\n\n\nresource \"google_compute_subnetwork\" \"secondary_ip_range_pod\" {\n  project       = google_project.project.project_id\n  depends_on    = [google_project_service.compute]\n  network       = \"default\"\n  name          = \"gke1-subnet\"\n  ip_cidr_range = \"192.168.0.0/24\"\n  region        = \"europe-west4\"\n  secondary_ip_range {\n    range_name    = \"gke1-secondary-range-pod\"\n    ip_cidr_range = \"192.168.1.0/24\"\n  }\n  secondary_ip_range {\n    range_name    = \"gke1-secondary-range-svc\"\n    ip_cidr_range = \"192.168.2.0/24\"\n  }\n}\n\n\nresource \"google_container_cluster\" \"gke1\" {\n  provider   = google-beta\n  project    = google_project.project.project_id\n  depends_on = [google_project_service.container]\n  name       = \"gke1\"\n  subnetwork = google_compute_subnetwork.secondary_ip_range_pod.name\n  location   = \"europe-west4-a\"\n  release_channel {\n    channel = \"UNSPECIFIED\"\n  }\n  ip_allocation_policy {\n    cluster_secondary_range_name  = \"gke1-secondary-range-pod\"\n    services_secondary_range_name = \"gke1-secondary-range-svc\"\n  }\n  initial_node_count = 1\n  cluster_telemetry {\n    type = \"DISABLED\"\n  }\n  resource_labels = {\n    foo = \"bar\"\n  }\n  addons_config {\n    http_load_balancing {\n      disabled = true\n    }\n  }\n}\n"
  },
  {
    "path": "test-data/gke4/json-dumps/container-clusters.json",
    "content": "{\n  \"clusters\": [\n    {\n      \"addonsConfig\": {\n        \"gcePersistentDiskCsiDriverConfig\": {\n          \"enabled\": true\n        },\n        \"httpLoadBalancing\": {\n          \"disabled\": true\n        },\n        \"kubernetesDashboard\": {\n          \"disabled\": true\n        },\n        \"networkPolicyConfig\": {\n          \"disabled\": true\n        }\n      },\n      \"autopilot\": {},\n      \"autoscaling\": {\n        \"autoscalingProfile\": \"BALANCED\"\n      },\n      \"binaryAuthorization\": {},\n      \"clusterIpv4Cidr\": \"192.168.1.0/24\",\n      \"createTime\": \"2024-08-26T23:40:28+00:00\",\n      \"currentMasterVersion\": \"1.29.7-gke.1104000\",\n      \"currentNodeCount\": 1,\n      \"currentNodeVersion\": \"1.29.7-gke.1104000\",\n      \"databaseEncryption\": {\n        \"currentState\": \"CURRENT_STATE_DECRYPTED\",\n        \"state\": \"DECRYPTED\"\n      },\n      \"defaultMaxPodsConstraint\": {\n        \"maxPodsPerNode\": \"110\"\n      },\n      \"endpoint\": \"192.168.1.1\",\n      \"enterpriseConfig\": {\n        \"clusterTier\": \"STANDARD\"\n      },\n      \"etag\": \"697b290d-a99a-4d66-8cdf-0ff3224950fc\",\n      \"id\": \"4c6788ad13f64b22a26a94d4d9f85bd51641004e2bef4289a371b14ca9a549b7\",\n      \"initialClusterVersion\": \"1.29.7-gke.1104000\",\n      \"initialNodeCount\": 1,\n      \"instanceGroupUrls\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke4-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-2b25036d-grp\"\n      ],\n      \"ipAllocationPolicy\": {\n        \"clusterIpv4Cidr\": \"192.168.1.0/24\",\n        \"clusterIpv4CidrBlock\": \"192.168.1.0/24\",\n        \"clusterSecondaryRangeName\": \"gke1-secondary-range-pod\",\n        \"defaultPodIpv4RangeUtilization\": 1,\n        \"podCidrOverprovisionConfig\": {},\n        \"servicesIpv4Cidr\": \"192.168.2.0/24\",\n        \"servicesIpv4CidrBlock\": \"192.168.2.0/24\",\n        \"servicesSecondaryRangeName\": \"gke1-secondary-range-svc\",\n        \"stackType\": \"IPV4\",\n        \"useIpAliases\": true\n      },\n      \"labelFingerprint\": \"b5e2ac10\",\n      \"legacyAbac\": {},\n      \"location\": \"europe-west4-a\",\n      \"locations\": [\n        \"europe-west4-a\"\n      ],\n      \"loggingConfig\": {\n        \"componentConfig\": {}\n      },\n      \"loggingService\": \"none\",\n      \"maintenancePolicy\": {\n        \"resourceVersion\": \"e3b0c442\"\n      },\n      \"masterAuth\": {\n        \"clientCertificateConfig\": {},\n        \"clusterCaCertificate\": \"REDACTED\"\n      },\n      \"masterAuthorizedNetworksConfig\": {\n        \"gcpPublicCidrsAccessEnabled\": true\n      },\n      \"monitoringConfig\": {\n        \"advancedDatapathObservabilityConfig\": {},\n        \"componentConfig\": {\n          \"enableComponents\": [\n            \"STORAGE\",\n            \"HPA\",\n            \"POD\",\n            \"DAEMONSET\",\n            \"DEPLOYMENT\",\n            \"STATEFULSET\",\n            \"KUBELET\",\n            \"CADVISOR\"\n          ]\n        },\n        \"managedPrometheusConfig\": {\n          \"enabled\": true\n        }\n      },\n      \"monitoringService\": \"none\",\n      \"name\": \"gke1\",\n      \"network\": \"default\",\n      \"networkConfig\": {\n        \"defaultSnatStatus\": {},\n        \"network\": \"projects/gcpdiag-gke4-aaaa/global/networks/default\",\n        \"serviceExternalIpsConfig\": {},\n        \"subnetwork\": \"projects/gcpdiag-gke4-aaaa/regions/europe-west4/subnetworks/gke1-subnet\"\n      },\n      \"nodeConfig\": {\n        \"diskSizeGb\": 100,\n        \"diskType\": \"pd-balanced\",\n        \"imageType\": \"COS_CONTAINERD\",\n        \"machineType\": \"e2-medium\",\n        \"metadata\": {\n          \"disable-legacy-endpoints\": \"true\"\n        },\n        \"oauthScopes\": [\n          \"https://www.googleapis.com/auth/devstorage.read_only\",\n          \"https://www.googleapis.com/auth/logging.write\",\n          \"https://www.googleapis.com/auth/monitoring\",\n          \"https://www.googleapis.com/auth/service.management.readonly\",\n          \"https://www.googleapis.com/auth/servicecontrol\",\n          \"https://www.googleapis.com/auth/trace.append\"\n        ],\n        \"serviceAccount\": \"default\",\n        \"shieldedInstanceConfig\": {\n          \"enableIntegrityMonitoring\": true\n        },\n        \"windowsNodeConfig\": {}\n      },\n      \"nodePoolDefaults\": {\n        \"nodeConfigDefaults\": {\n          \"loggingConfig\": {\n            \"variantConfig\": {\n              \"variant\": \"DEFAULT\"\n            }\n          }\n        }\n      },\n      \"nodePools\": [\n        {\n          \"config\": {\n            \"diskSizeGb\": 100,\n            \"diskType\": \"pd-balanced\",\n            \"imageType\": \"COS_CONTAINERD\",\n            \"machineType\": \"e2-medium\",\n            \"metadata\": {\n              \"disable-legacy-endpoints\": \"true\"\n            },\n            \"oauthScopes\": [\n              \"https://www.googleapis.com/auth/devstorage.read_only\",\n              \"https://www.googleapis.com/auth/logging.write\",\n              \"https://www.googleapis.com/auth/monitoring\",\n              \"https://www.googleapis.com/auth/service.management.readonly\",\n              \"https://www.googleapis.com/auth/servicecontrol\",\n              \"https://www.googleapis.com/auth/trace.append\"\n            ],\n            \"serviceAccount\": \"default\",\n            \"shieldedInstanceConfig\": {\n              \"enableIntegrityMonitoring\": true\n            },\n            \"windowsNodeConfig\": {}\n          },\n          \"etag\": \"c26f182f-e85b-49ff-b9b5-1be137f0fae2\",\n          \"initialNodeCount\": 1,\n          \"instanceGroupUrls\": [\n            \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gke4-aaaa/zones/europe-west4-a/instanceGroupManagers/gke-gke1-default-pool-2b25036d-grp\"\n          ],\n          \"locations\": [\n            \"europe-west4-a\"\n          ],\n          \"management\": {\n            \"autoRepair\": true,\n            \"autoUpgrade\": true\n          },\n          \"maxPodsConstraint\": {\n            \"maxPodsPerNode\": \"110\"\n          },\n          \"name\": \"default-pool\",\n          \"networkConfig\": {\n            \"podIpv4CidrBlock\": \"192.168.1.0/24\",\n            \"podIpv4RangeUtilization\": 1,\n            \"podRange\": \"gke1-secondary-range-pod\"\n          },\n          \"podIpv4CidrSize\": 24,\n          \"selfLink\": \"https://container.googleapis.com/v1/projects/gcpdiag-gke4-aaaa/zones/europe-west4-a/clusters/gke1/nodePools/default-pool\",\n          \"status\": \"RUNNING\",\n          \"upgradeSettings\": {\n            \"maxSurge\": 1,\n            \"strategy\": \"SURGE\"\n          },\n          \"version\": \"1.29.7-gke.1104000\"\n        }\n      ],\n      \"notificationConfig\": {\n        \"pubsub\": {}\n      },\n      \"privateClusterConfig\": {\n        \"privateEndpoint\": \"192.168.0.2\",\n        \"publicEndpoint\": \"34.141.222.139\"\n      },\n      \"rbacBindingConfig\": {\n        \"enableInsecureBindingSystemAuthenticated\": true,\n        \"enableInsecureBindingSystemUnauthenticated\": true\n      },\n      \"releaseChannel\": {},\n      \"resourceLabels\": {\n        \"foo\": \"bar\",\n        \"goog-terraform-provisioned\": \"true\"\n      },\n      \"securityPostureConfig\": {\n        \"mode\": \"BASIC\",\n        \"vulnerabilityMode\": \"VULNERABILITY_MODE_UNSPECIFIED\"\n      },\n      \"selfLink\": \"https://container.googleapis.com/v1/projects/gcpdiag-gke4-aaaa/zones/europe-west4-a/clusters/gke1\",\n      \"servicesIpv4Cidr\": \"192.168.2.0/24\",\n      \"shieldedNodes\": {\n        \"enabled\": true\n      },\n      \"status\": \"RUNNING\",\n      \"subnetwork\": \"gke1-subnet\",\n      \"zone\": \"europe-west4-a\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gke4/json-dumps/logging-entries-1.json",
    "content": "{}\n"
  },
  {
    "path": "test-data/gke4/json-dumps/project.json",
    "content": "{\n  \"name\": \"projects/12340033\",\n  \"parent\": \"folders/348077457356\",\n  \"projectId\": \"gcpdiag-gke4-aaaa\",\n  \"state\": \"ACTIVE\",\n  \"displayName\": \"gcpdiag-gke4-runbook\",\n  \"createTime\": \"2024-08-26T23:36:42.760158Z\",\n  \"updateTime\": \"2024-08-26T23:36:42.760158Z\",\n  \"etag\": \"W/\\\"8342a04021413768\\\"\",\n  \"labels\": {\n    \"gcpdiag\": \"test\",\n    \"goog-terraform-provisioned\": \"true\"\n  }\n}\n"
  },
  {
    "path": "test-data/gke4/json-dumps/services.json",
    "content": "{\n  \"services\": [\n    {\n      \"name\": \"projects/12340033/services/analyticshub.googleapis.com\",\n      \"config\": {\n        \"name\": \"analyticshub.googleapis.com\",\n        \"title\": \"Analytics Hub API\",\n        \"documentation\": {\n          \"summary\": \"Exchange data and analytics assets securely and efficiently.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340033\"\n    },\n    {\n      \"name\": \"projects/12340033/services/artifactregistry.googleapis.com\",\n      \"config\": {\n        \"name\": \"artifactregistry.googleapis.com\",\n        \"title\": \"Artifact Registry API\",\n        \"documentation\": {\n          \"summary\": \"Store and manage build artifacts in a scalable and integrated service built on Google infrastructure.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"artifactregistry.googleapis.com/Location\",\n            \"displayName\": \"Artifact Registry Location\",\n            \"description\": \"A location in Artifact Registry.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP resource container associated with this resource, such as \\\"my_project\\\" or \\\"organizations/5678\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"artifactregistry.googleapis.com/Project\",\n            \"displayName\": \"Artifact Registry Project\",\n            \"description\": \"A Cloud project in Artifact Registry.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP resource container associated with this resource, such as \\\"my_project\\\" or \\\"organizations/5678\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"artifactregistry.googleapis.com/Repository\",\n            \"displayName\": \"Artifact Registry Repository\",\n            \"description\": \"A repository in Artifact Registry.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP resource container associated with this resource, such as \\\"my_project\\\" or \\\"organizations/5678\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              },\n              {\n                \"key\": \"repository_id\",\n                \"description\": \"The identifier of the Artifact Registry repository, such as \\\"my_repository\\\".\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"artifactregistry.googleapis.com/Location\",\n              \"metrics\": [\n                \"artifactregistry.googleapis.com/asia_multi_region_upstream_host_reads\",\n                \"artifactregistry.googleapis.com/europe_multi_region_upstream_host_reads\",\n                \"artifactregistry.googleapis.com/project_asia_multi_region_upstream_host_reads\",\n                \"artifactregistry.googleapis.com/project_europe_multi_region_upstream_host_reads\",\n                \"artifactregistry.googleapis.com/project_region_upstream_host_reads\",\n                \"artifactregistry.googleapis.com/project_us_multi_region_upstream_host_reads\",\n                \"artifactregistry.googleapis.com/quota/asia_multi_region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/asia_multi_region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/quota/europe_multi_region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/europe_multi_region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/quota/project_asia_multi_region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/project_asia_multi_region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/quota/project_europe_multi_region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/project_europe_multi_region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/quota/project_region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/project_region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/quota/project_us_multi_region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/project_us_multi_region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/quota/region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/quota/us_multi_region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/us_multi_region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/region_upstream_host_reads\",\n                \"artifactregistry.googleapis.com/us_multi_region_upstream_host_reads\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"artifactregistry.googleapis.com/Project\",\n              \"metrics\": [\n                \"artifactregistry.googleapis.com/project/api/request_count\",\n                \"artifactregistry.googleapis.com/project/api/request_latencies\",\n                \"artifactregistry.googleapis.com/project/request_count\",\n                \"artifactregistry.googleapis.com/project/request_latencies\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"artifactregistry.googleapis.com/Repository\",\n              \"metrics\": [\n                \"artifactregistry.googleapis.com/repository/api/request_count\",\n                \"artifactregistry.googleapis.com/repository/api/request_latencies\",\n                \"artifactregistry.googleapis.com/repository/request_count\",\n                \"artifactregistry.googleapis.com/repository/request_latencies\",\n                \"artifactregistry.googleapis.com/repository/size\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"artifactregistry.googleapis.com/Location\",\n              \"metrics\": [\n                \"artifactregistry.googleapis.com/quota/asia_multi_region_upstream_host_reads/limit\",\n                \"artifactregistry.googleapis.com/quota/europe_multi_region_upstream_host_reads/limit\",\n                \"artifactregistry.googleapis.com/quota/project_asia_multi_region_upstream_host_reads/limit\",\n                \"artifactregistry.googleapis.com/quota/project_europe_multi_region_upstream_host_reads/limit\",\n                \"artifactregistry.googleapis.com/quota/project_region_upstream_host_reads/limit\",\n                \"artifactregistry.googleapis.com/quota/project_us_multi_region_upstream_host_reads/limit\",\n                \"artifactregistry.googleapis.com/quota/region_upstream_host_reads/limit\",\n                \"artifactregistry.googleapis.com/quota/us_multi_region_upstream_host_reads/limit\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340033\"\n    },\n    {\n      \"name\": \"projects/12340033/services/autoscaling.googleapis.com\",\n      \"config\": {\n        \"name\": \"autoscaling.googleapis.com\",\n        \"title\": \"Cloud Autoscaling API\",\n        \"documentation\": {\n          \"summary\": \"An API for the Cloud Autoscaling for consuming autoscaling signals.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340033\"\n    },\n    {\n      \"name\": \"projects/12340033/services/bigquery.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigquery.googleapis.com\",\n        \"title\": \"BigQuery API\",\n        \"documentation\": {\n          \"summary\": \"A data platform for customers to create, manage, share and query data.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"bigquery.googleapis.com/Table\",\n            \"displayName\": \"BigQuery Table Resource.\",\n            \"description\": \"BigQuery Table Resource.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP resource container associated with this resource, such as \\\"my-project\\\" or \\\"organizations/123\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The cloud location of the BigQuery table.\"\n              },\n              {\n                \"key\": \"table_reference\",\n                \"description\": \"The table reference in the format of project_id:dataset_id.table_id for the BigQuery table.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"bigquery.googleapis.com/Location\",\n            \"displayName\": \"CheckIamPolicy Request Location\",\n            \"description\": \"A BigQuery Location (sometimes called Region).\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The id of the GCP resource container associated with this resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"bigquery.googleapis.com/InternalDifferentialPrivacyBudget\",\n            \"displayName\": \"Differential Privacy Budget\",\n            \"description\": \"Differential Privacy Budget.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container associated with the metric.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location for the quota.\"\n              },\n              {\n                \"key\": \"budget_id\",\n                \"description\": \"A unique identifier for the budget basis of the privacy budget (e.g view_uuid for per-view budgets).\"\n              },\n              {\n                \"key\": \"multi_region\",\n                \"description\": \"The multi-region identifier for the associated resource (e.g \\\"us\\\", \\\"eu\\\"). Used only for multi-region quota metrics.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"bigquery.googleapis.com/ExternalDifferentialPrivacyBudget\",\n            \"displayName\": \"Differential Privacy Budget External\",\n            \"description\": \"Differential Privacy Budget exposed externally to provide privacy budget metrics.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container associated with the metric.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location for the quota.\"\n              },\n              {\n                \"key\": \"budget_id\",\n                \"description\": \"A unique identifier for the budget basis of the privacy budget (e.g view_uuid for per-view budgets).\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"bigquery.googleapis.com/ContinuousJob\",\n            \"displayName\": \"BigQuery Continuous Job\",\n            \"description\": \"Metrics from BigQuery Continuous Jobs.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP resource container associated with this resource, such as \\\"my-project\\\" or \\\"organizations/123\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The Cloud location of the continuous job.\"\n              },\n              {\n                \"key\": \"job_id\",\n                \"description\": \"The ID of the continuous job.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/Table\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_eu/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_us/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_eu/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_us/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/Location\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/quota/internalCheckIamPolicyRequests/exceeded\",\n                \"bigquery.googleapis.com/quota/internalCheckIamPolicyRequests/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/InternalDifferentialPrivacyBudget\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/internal/privacybudget/dp_delta_budget\",\n                \"bigquery.googleapis.com/internal/privacybudget/dp_delta_budget_multi_regional\",\n                \"bigquery.googleapis.com/internal/privacybudget/dp_epsilon_budget\",\n                \"bigquery.googleapis.com/internal/privacybudget/dp_epsilon_budget_multi_regional\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget_multi_regional/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget_multi_regional/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/Location\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/quota/internalCheckIamPolicyRequests/limit\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/Table\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org/limit\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org/usage\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_eu/limit\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_eu/usage\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_us/limit\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_us/usage\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project/limit\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project/usage\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_eu/limit\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_eu/usage\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_us/limit\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_us/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/InternalDifferentialPrivacyBudget\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget_multi_regional/limit\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget_multi_regional/usage\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget_multi_regional/limit\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget_multi_regional/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/ExternalDifferentialPrivacyBudget\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/privacybudget/dp_delta_budget\",\n                \"bigquery.googleapis.com/privacybudget/dp_epsilon_budget\",\n                \"bigquery.googleapis.com/quota/privacybudget/dp_delta_budget/exceeded\",\n                \"bigquery.googleapis.com/quota/privacybudget/dp_epsilon_budget/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/ExternalDifferentialPrivacyBudget\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/quota/privacybudget/dp_delta_budget/limit\",\n                \"bigquery.googleapis.com/quota/privacybudget/dp_delta_budget/usage\",\n                \"bigquery.googleapis.com/quota/privacybudget/dp_epsilon_budget/limit\",\n                \"bigquery.googleapis.com/quota/privacybudget/dp_epsilon_budget/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/ContinuousJob\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/job/continuous/backlog_records\",\n                \"bigquery.googleapis.com/job/continuous/records_read_count\",\n                \"bigquery.googleapis.com/job/continuous/records_written_count\",\n                \"bigquery.googleapis.com/job/continuous/estimated_backlog_logical_bytes\",\n                \"bigquery.googleapis.com/job/continuous/estimated_bytes_processed_count\",\n                \"bigquery.googleapis.com/job/continuous/output_watermark\",\n                \"bigquery.googleapis.com/job/continuous/slots/allocated\",\n                \"bigquery.googleapis.com/job/continuous/end_to_end_latencies\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340033\"\n    },\n    {\n      \"name\": \"projects/12340033/services/bigqueryconnection.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigqueryconnection.googleapis.com\",\n        \"title\": \"BigQuery Connection API\",\n        \"documentation\": {\n          \"summary\": \"Allows users to manage BigQuery connections to external data sources.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340033\"\n    },\n    {\n      \"name\": \"projects/12340033/services/bigquerydatapolicy.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigquerydatapolicy.googleapis.com\",\n        \"title\": \"BigQuery Data Policy API\",\n        \"documentation\": {\n          \"summary\": \"Allows users to manage BigQuery data policies.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340033\"\n    },\n    {\n      \"name\": \"projects/12340033/services/bigquerymigration.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigquerymigration.googleapis.com\",\n        \"title\": \"BigQuery Migration API\",\n        \"documentation\": {\n          \"summary\": \"The migration service, exposing apis for migration jobs operations, and agent management.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340033\"\n    },\n    {\n      \"name\": \"projects/12340033/services/bigqueryreservation.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigqueryreservation.googleapis.com\",\n        \"title\": \"BigQuery Reservation API\",\n        \"documentation\": {\n          \"summary\": \"A service to modify your BigQuery flat-rate reservations.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340033\"\n    },\n    {\n      \"name\": \"projects/12340033/services/bigquerystorage.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigquerystorage.googleapis.com\",\n        \"title\": \"BigQuery Storage API\",\n        \"documentation\": {},\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"bigquerystorage.googleapis.com/DataflowWrite\",\n            \"displayName\": \"BigQuery Storage Write API metrics for Dataflow jobs.\",\n            \"description\": \"BigQuery Storage Write API metrics for Dataflow jobs.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project/folder/org associated with this resource. This is the project that runs the Dataflow job.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The BigQuery region in which the Storage API server locates.\"\n              },\n              {\n                \"key\": \"job_name\",\n                \"description\": \"The name of the Dataflow job this worker belongs to.\"\n              },\n              {\n                \"key\": \"job_id\",\n                \"description\": \"The id of the dataflow job the worker belongs to.\"\n              },\n              {\n                \"key\": \"worker_id\",\n                \"description\": \"The ID of the worker, unique for this job_id.\"\n              },\n              {\n                \"key\": \"destination_project\",\n                \"description\": \"The project of BigQuery destination table of the Dataflow job.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"bigquerystorage.googleapis.com/DataflowWrite\",\n              \"metrics\": [\n                \"bigquerystorage.googleapis.com/dataflow_write/request_count\",\n                \"bigquerystorage.googleapis.com/dataflow_write/uploaded_row_count\",\n                \"bigquerystorage.googleapis.com/dataflow_write/uploaded_bytes_count\",\n                \"bigquerystorage.googleapis.com/dataflow_write/billed_bytes_count\",\n                \"bigquerystorage.googleapis.com/dataflow_write/connection_results_count\",\n                \"bigquerystorage.googleapis.com/dataflow_write/server_side_latencies\",\n                \"bigquerystorage.googleapis.com/dataflow_write/transcoding_latencies\",\n                \"bigquerystorage.googleapis.com/dataflow_write/concurrent_connections\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340033\"\n    },\n    {\n      \"name\": \"projects/12340033/services/cloudresourcemanager.googleapis.com\",\n      \"config\": {\n        \"name\": \"cloudresourcemanager.googleapis.com\",\n        \"title\": \"Cloud Resource Manager API\",\n        \"documentation\": {\n          \"summary\": \"Creates, reads, and updates metadata for Google Cloud Platform resource containers.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340033\"\n    },\n    {\n      \"name\": \"projects/12340033/services/compute.googleapis.com\",\n      \"config\": {\n        \"name\": \"compute.googleapis.com\",\n        \"title\": \"Compute Engine API\",\n        \"documentation\": {\n          \"summary\": \"Creates and runs virtual machines on Google Cloud Platform.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"compute.googleapis.com/VpcNetwork\",\n            \"displayName\": \"VPC Network\",\n            \"description\": \"VPC Network.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the VPC Network.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the VPC Network, global always.\"\n              },\n              {\n                \"key\": \"network_id\",\n                \"description\": \"VPC Network resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Location\",\n            \"displayName\": \"Compute Location\",\n            \"description\": \"A location in the Compute API.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the Compute Location.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Interconnect\",\n            \"displayName\": \"Interconnect\",\n            \"description\": \"Interconnect.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the Interconnect.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the Interconnect.\"\n              },\n              {\n                \"key\": \"interconnect_id\",\n                \"description\": \"Interconnect resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/FirewallPolicy\",\n            \"displayName\": \"Firewall policy\",\n            \"description\": \"Firewall policy.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project or organization) associated with the firewall policy.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the firewall policy.\"\n              },\n              {\n                \"key\": \"firewall_policy_id\",\n                \"description\": \"Firewall policy resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/SecurityPolicy\",\n            \"displayName\": \"Security policy\",\n            \"description\": \"Security policy.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the security policy.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the security policy.\"\n              },\n              {\n                \"key\": \"security_policy_id\",\n                \"description\": \"Security policy resource ID.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/OperationType\",\n            \"displayName\": \"Operation Type\",\n            \"description\": \"Operation Type.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the operation.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the operation.\"\n              },\n              {\n                \"key\": \"operation_type\",\n                \"description\": \"Operation type.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Reservation\",\n            \"displayName\": \"Reservation\",\n            \"description\": \"Monitored resource representing a reservation.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container (e.g. project number) associated with the reservation.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The zone that contains the reservation.\"\n              },\n              {\n                \"key\": \"reservation_id\",\n                \"description\": \"Reservation resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/StoragePool\",\n            \"displayName\": \"Storage Pool\",\n            \"description\": \"Monitored resource representing a storage pool.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container (e.g. project number) associated with the storage pool.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location that contains the storage pool.\"\n              },\n              {\n                \"key\": \"storage_pool_id\",\n                \"description\": \"Numerical resource ID of the storage pool.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"gce_instance\",\n            \"displayName\": \"VM Instance\",\n            \"description\": \"A virtual machine instance hosted in Compute Engine.\",\n            \"labels\": [\n              {\n                \"key\": \"project_id\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as \\\"my-project\\\".\"\n              },\n              {\n                \"key\": \"instance_id\",\n                \"description\": \"The numeric VM instance identifier assigned by Compute Engine.\"\n              },\n              {\n                \"key\": \"zone\",\n                \"description\": \"The Compute Engine zone in which the VM is running.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network\",\n                \"compute.googleapis.com/cloud_router_prefixes_from_own_region_per_region_per_vpc_network\",\n                \"compute.googleapis.com/dynamic_routes_per_region_per_peering_group\",\n                \"compute.googleapis.com/global_internal_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/instances_per_peering_group\",\n                \"compute.googleapis.com/instances_per_vpc_network\",\n                \"compute.googleapis.com/internal_lb_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_managed_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_protocol_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/ip_aliases_per_peering_group\",\n                \"compute.googleapis.com/ip_aliases_per_vpc_network\",\n                \"compute.googleapis.com/peerings_per_vpc_network\",\n                \"compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network\",\n                \"compute.googleapis.com/psc_propagated_connections_per_vpc_network\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/exceeded\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/regional_external_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/regional_internal_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/static_routes_per_peering_group\",\n                \"compute.googleapis.com/static_routes_per_vpc_network\",\n                \"compute.googleapis.com/subnet_ranges_per_peering_group\",\n                \"compute.googleapis.com/subnet_ranges_per_vpc_network\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Location\",\n              \"metrics\": [\n                \"compute.googleapis.com/cpus_per_vm_family\",\n                \"compute.googleapis.com/global_dns/request_count\",\n                \"compute.googleapis.com/gpus_per_gpu_family\",\n                \"compute.googleapis.com/inter_region_egress_bandwidth\",\n                \"compute.googleapis.com/local_ssd_total_storage_per_vm_family\",\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/exceeded\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/exceeded\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/exceeded\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/usage\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/exceeded\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/exceeded\",\n                \"compute.googleapis.com/quota/tpus_per_tpu_family/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Interconnect\",\n              \"metrics\": [\n                \"compute.googleapis.com/interconnect_attachments_per_interconnect\",\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/FirewallPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/fqdns_per_global_network_firewall_policy\",\n                \"compute.googleapis.com/fqdns_per_hierarchical_firewall_policy\",\n                \"compute.googleapis.com/fqdns_per_regional_network_firewall_policy\",\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/rule_attributes_per_global_network_firewall_policy\",\n                \"compute.googleapis.com/rule_attributes_per_hierarchical_firewall_policy\",\n                \"compute.googleapis.com/rule_attributes_per_regional_network_firewall_policy\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/SecurityPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/advanced_rules_per_edge_security_policy\",\n                \"compute.googleapis.com/advanced_rules_per_regional_security_policy\",\n                \"compute.googleapis.com/advanced_rules_per_security_policy\",\n                \"compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/exceeded\",\n                \"compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/exceeded\",\n                \"compute.googleapis.com/quota/advanced_rules_per_security_policy/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/OperationType\",\n              \"metrics\": [\n                \"compute.googleapis.com/global_concurrent_operations\",\n                \"compute.googleapis.com/quota/concurrent/global_concurrent_operations/exceeded\",\n                \"compute.googleapis.com/quota/concurrent/internal/global_concurrent_operations/combined_units\",\n                \"compute.googleapis.com/quota/concurrent/internal/regional_concurrent_operations/combined_units\",\n                \"compute.googleapis.com/quota/concurrent/regional_concurrent_operations/exceeded\",\n                \"compute.googleapis.com/regional_concurrent_operations\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"gce_instance\",\n              \"metrics\": [\n                \"compute.googleapis.com/instance/global_dns/request_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Reservation\",\n              \"metrics\": [\n                \"compute.googleapis.com/reservation/reserved\",\n                \"compute.googleapis.com/reservation/assured\",\n                \"compute.googleapis.com/reservation/used\",\n                \"compute.googleapis.com/reservation/internal/matching_instances\",\n                \"compute.googleapis.com/reservation/internal/prespuns_by_state\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/StoragePool\",\n              \"metrics\": [\n                \"compute.googleapis.com/storage_pool/disks\",\n                \"compute.googleapis.com/storage_pool/provisioned_capacity\",\n                \"compute.googleapis.com/storage_pool/used_capacity\",\n                \"compute.googleapis.com/storage_pool/total_disk_provisioned_capacity\",\n                \"compute.googleapis.com/storage_pool/provisioned_iops\",\n                \"compute.googleapis.com/storage_pool/used_iops\",\n                \"compute.googleapis.com/storage_pool/total_disk_provisioned_iops\",\n                \"compute.googleapis.com/storage_pool/provisioned_throughput\",\n                \"compute.googleapis.com/storage_pool/used_throughput\",\n                \"compute.googleapis.com/storage_pool/total_disk_provisioned_throughput\",\n                \"compute.googleapis.com/storage_pool/capacity_utilization\",\n                \"compute.googleapis.com/storage_pool/iops_utilization\",\n                \"compute.googleapis.com/storage_pool/throughput_utilization\",\n                \"compute.googleapis.com/storage_pool/capacity_overprovisioning\",\n                \"compute.googleapis.com/storage_pool/iops_overprovisioning\",\n                \"compute.googleapis.com/storage_pool/throughput_overprovisioning\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Location\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/limit\",\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/usage\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/limit\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/usage\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/limit\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/limit\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/usage\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/limit\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/usage\",\n                \"compute.googleapis.com/quota/tpus_per_tpu_family/limit\",\n                \"compute.googleapis.com/quota/tpus_per_tpu_family/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/limit\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/usage\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/limit\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/usage\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Interconnect\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/limit\",\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/FirewallPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/SecurityPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/limit\",\n                \"compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/usage\",\n                \"compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/limit\",\n                \"compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/usage\",\n                \"compute.googleapis.com/quota/advanced_rules_per_security_policy/limit\",\n                \"compute.googleapis.com/quota/advanced_rules_per_security_policy/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/OperationType\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/concurrent/global_concurrent_operations/limit\",\n                \"compute.googleapis.com/quota/concurrent/regional_concurrent_operations/limit\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340033\"\n    },\n    {\n      \"name\": \"projects/12340033/services/container.googleapis.com\",\n      \"config\": {\n        \"name\": \"container.googleapis.com\",\n        \"title\": \"Kubernetes Engine API\",\n        \"documentation\": {\n          \"summary\": \"Builds and manages container-based applications, powered by the open source Kubernetes technology.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"container.googleapis.com/Cluster\",\n            \"displayName\": \"Kubernetes Cluster Limits\",\n            \"description\": \"Kubernetes Cluster.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"Project or organization.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Region or zone where the cluster was created.\"\n              },\n              {\n                \"key\": \"cluster_name\",\n                \"description\": \"Cluster name.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"container.googleapis.com/NodePool\",\n            \"displayName\": \"GKE Node Pool\",\n            \"description\": \"GKE Node Pool.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"Project or organization.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Region or zone where the cluster was created.\"\n              },\n              {\n                \"key\": \"cluster_name\",\n                \"description\": \"Cluster name.\"\n              },\n              {\n                \"key\": \"node_pool_name\",\n                \"description\": \"Node pool name.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"container.googleapis.com/Cluster\",\n              \"metrics\": [\n                \"container.googleapis.com/quota/containers_per_cluster_autopilot\",\n                \"container.googleapis.com/quota/containers_per_cluster_standard\",\n                \"container.googleapis.com/quota/etcd_database_size_bytes\",\n                \"container.googleapis.com/quota/nodes_per_cluster\",\n                \"container.googleapis.com/quota/pods_per_cluster_autopilot\",\n                \"container.googleapis.com/quota/pods_per_cluster_standard\",\n                \"container.googleapis.com/quota/quota/containers_per_cluster_autopilot/exceeded\",\n                \"container.googleapis.com/quota/quota/containers_per_cluster_standard/exceeded\",\n                \"container.googleapis.com/quota/quota/etcd_database_size_bytes/exceeded\",\n                \"container.googleapis.com/quota/quota/etcd_database_size_gib/exceeded\",\n                \"container.googleapis.com/quota/quota/nodes_per_cluster/exceeded\",\n                \"container.googleapis.com/quota/quota/pods_per_cluster_autopilot/exceeded\",\n                \"container.googleapis.com/quota/quota/pods_per_cluster_standard/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"container.googleapis.com/NodePool\",\n              \"metrics\": [\n                \"container.googleapis.com/quota/nodes_per_node_pool\",\n                \"container.googleapis.com/quota/quota/nodes_per_node_pool/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"container.googleapis.com/Cluster\",\n              \"metrics\": [\n                \"container.googleapis.com/quota/quota/containers_per_cluster_autopilot/limit\",\n                \"container.googleapis.com/quota/quota/containers_per_cluster_autopilot/usage\",\n                \"container.googleapis.com/quota/quota/containers_per_cluster_standard/limit\",\n                \"container.googleapis.com/quota/quota/containers_per_cluster_standard/usage\",\n                \"container.googleapis.com/quota/quota/etcd_database_size_bytes/limit\",\n                \"container.googleapis.com/quota/quota/etcd_database_size_bytes/usage\",\n                \"container.googleapis.com/quota/quota/etcd_database_size_gib/limit\",\n                \"container.googleapis.com/quota/quota/etcd_database_size_gib/usage\",\n                \"container.googleapis.com/quota/quota/nodes_per_cluster/limit\",\n                \"container.googleapis.com/quota/quota/nodes_per_cluster/usage\",\n                \"container.googleapis.com/quota/quota/pods_per_cluster_autopilot/limit\",\n                \"container.googleapis.com/quota/quota/pods_per_cluster_autopilot/usage\",\n                \"container.googleapis.com/quota/quota/pods_per_cluster_standard/limit\",\n                \"container.googleapis.com/quota/quota/pods_per_cluster_standard/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"container.googleapis.com/NodePool\",\n              \"metrics\": [\n                \"container.googleapis.com/quota/quota/nodes_per_node_pool/limit\",\n                \"container.googleapis.com/quota/quota/nodes_per_node_pool/usage\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340033\"\n    },\n    {\n      \"name\": \"projects/12340033/services/containerfilesystem.googleapis.com\",\n      \"config\": {\n        \"name\": \"containerfilesystem.googleapis.com\",\n        \"title\": \"Container File System API\",\n        \"documentation\": {\n          \"summary\": \"Stream images stored in Artifact Registry to GKE\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340033\"\n    },\n    {\n      \"name\": \"projects/12340033/services/containerregistry.googleapis.com\",\n      \"config\": {\n        \"name\": \"containerregistry.googleapis.com\",\n        \"title\": \"Container Registry API\",\n        \"documentation\": {\n          \"summary\": \"Google Container Registry provides secure, private Docker image storage on Google Cloud Platform.  Our API follows the Docker Registry API specification, so we are fully compatible with the Docker CLI client, as well as standard tooling using the Docker Registry API.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340033\"\n    },\n    {\n      \"name\": \"projects/12340033/services/containerthreatdetection.googleapis.com\",\n      \"config\": {\n        \"name\": \"containerthreatdetection.googleapis.com\",\n        \"title\": \"Container Threat Detection API\",\n        \"documentation\": {},\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340033\"\n    },\n    {\n      \"name\": \"projects/12340033/services/dataform.googleapis.com\",\n      \"config\": {\n        \"name\": \"dataform.googleapis.com\",\n        \"title\": \"Dataform API\",\n        \"documentation\": {\n          \"summary\": \"Service to develop, version control, and operationalize SQL pipelines in BigQuery.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340033\"\n    },\n    {\n      \"name\": \"projects/12340033/services/dataplex.googleapis.com\",\n      \"config\": {\n        \"name\": \"dataplex.googleapis.com\",\n        \"title\": \"Cloud Dataplex API\",\n        \"documentation\": {\n          \"summary\": \"Dataplex API is used to manage the lifecycle of data lakes.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"dataplex.googleapis.com/Lake\",\n            \"displayName\": \"Cloud Dataplex Lake\",\n            \"description\": \"A Cloud Dataplex Lake.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of GCP project associated with this resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The GCP region associated with this resource.\"\n              },\n              {\n                \"key\": \"lake_id\",\n                \"description\": \"The identifier of this Lake resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"dataplex.googleapis.com/Zone\",\n            \"displayName\": \"Cloud Dataplex Zone\",\n            \"description\": \"A Zone within a Cloud Dataplex Lake.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of GCP project associated with this resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The GCP region associated with this resource.\"\n              },\n              {\n                \"key\": \"lake_id\",\n                \"description\": \"The identifier of the Lake resource containing this resource.\"\n              },\n              {\n                \"key\": \"zone_id\",\n                \"description\": \"The identifier of this Zone resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"dataplex.googleapis.com/Asset\",\n            \"displayName\": \"Cloud Dataplex Asset\",\n            \"description\": \"An Asset within a Cloud Dataplex Lake.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of GCP project associated with this resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The GCP region associated with this resource.\"\n              },\n              {\n                \"key\": \"lake_id\",\n                \"description\": \"The identifier of the Lake resource containing this resource.\"\n              },\n              {\n                \"key\": \"zone_id\",\n                \"description\": \"The identifier of the Zone resource containing this resource.\"\n              },\n              {\n                \"key\": \"asset_id\",\n                \"description\": \"The identifier of this Asset resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"dataplex.googleapis.com/Environment\",\n            \"displayName\": \"Cloud Dataplex Environment\",\n            \"description\": \"An Environment within a Cloud Dataplex Lake.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of GCP project associated with this resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The GCP region associated with this resource.\"\n              },\n              {\n                \"key\": \"lake_id\",\n                \"description\": \"The identifier of the Lake resource containing this resource.\"\n              },\n              {\n                \"key\": \"environment_id\",\n                \"description\": \"The identifier of this Environment resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"dataplex.googleapis.com/Lake\",\n              \"metrics\": [\n                \"dataplex.googleapis.com/lake/requires_action\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"dataplex.googleapis.com/Zone\",\n              \"metrics\": [\n                \"dataplex.googleapis.com/zone/requires_action\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"dataplex.googleapis.com/Asset\",\n              \"metrics\": [\n                \"dataplex.googleapis.com/asset/requires_action\",\n                \"dataplex.googleapis.com/asset/active\",\n                \"dataplex.googleapis.com/asset/data_items\",\n                \"dataplex.googleapis.com/asset/data_size\",\n                \"dataplex.googleapis.com/asset/tables\",\n                \"dataplex.googleapis.com/asset/filesets\",\n                \"dataplex.googleapis.com/asset/entities_pending_bigquery_metadata_updates\",\n                \"dataplex.googleapis.com/asset/entities_pending_bigquery_iampolicy_updates\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340033\"\n    },\n    {\n      \"name\": \"projects/12340033/services/dns.googleapis.com\",\n      \"config\": {\n        \"name\": \"dns.googleapis.com\",\n        \"title\": \"Cloud DNS API\",\n        \"documentation\": {},\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340033\"\n    },\n    {\n      \"name\": \"projects/12340033/services/gkebackup.googleapis.com\",\n      \"config\": {\n        \"name\": \"gkebackup.googleapis.com\",\n        \"title\": \"Backup for GKE API\",\n        \"documentation\": {\n          \"summary\": \"Backup for GKE is a managed Kubernetes workload backup and restore service\\nfor GKE clusters.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"gkebackup.googleapis.com/BackupPlan\",\n            \"displayName\": \"GKE Backup Plan\",\n            \"description\": \"A backup plan provides configuration, location, and management functions for a sequence of backups.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the Google Cloud container associated with the resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The Google Cloud location where this backupPlan resides.\"\n              },\n              {\n                \"key\": \"backup_plan_id\",\n                \"description\": \"The name of the backupPlan.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"gkebackup.googleapis.com/RestorePlan\",\n            \"displayName\": \"GKE Restore Plan\",\n            \"description\": \"A restore plan defines the configuration of a series of restore operations to be performed against backups which belong to the specified backup plan.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the Google Cloud container associated with the resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The Google Cloud location where this restorePlan resides.\"\n              },\n              {\n                \"key\": \"restore_plan_id\",\n                \"description\": \"The name of the restorePlan.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"gkebackup.googleapis.com/Project\",\n            \"displayName\": \"Backup for GKE Project\",\n            \"description\": \"A Project in the Backup for GKE API.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project associated with this resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The Google Cloud location of the resource.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"gkebackup.googleapis.com/BackupPlan\",\n              \"metrics\": [\n                \"gkebackup.googleapis.com/backup_created_count\",\n                \"gkebackup.googleapis.com/backup_deleted_count\",\n                \"gkebackup.googleapis.com/backup_completion_times\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"gkebackup.googleapis.com/RestorePlan\",\n              \"metrics\": [\n                \"gkebackup.googleapis.com/restore_created_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"gkebackup.googleapis.com/Project\",\n              \"metrics\": [\n                \"gkebackup.googleapis.com/internal/backup_plan_existence\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340033\"\n    },\n    {\n      \"name\": \"projects/12340033/services/iam.googleapis.com\",\n      \"config\": {\n        \"name\": \"iam.googleapis.com\",\n        \"title\": \"Identity and Access Management (IAM) API\",\n        \"documentation\": {\n          \"summary\": \"Manages identity and access control for Google Cloud resources, including the creation of service accounts, which you can use to authenticate to Google and make API calls. Enabling this API also enables the IAM Service Account Credentials API (iamcredentials.googleapis.com). However, disabling this API doesn't disable the IAM Service Account Credentials API.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"iam_service_account\",\n            \"displayName\": \"IAM Service Account\",\n            \"description\": \"An IAM Service Account.\",\n            \"labels\": [\n              {\n                \"key\": \"project_id\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"unique_id\",\n                \"description\": \"The unique_id of the service account.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"iam.googleapis.com/WorkloadIdentityPoolProvider\",\n            \"displayName\": \"Workload Identity Pool Provider\",\n            \"description\": \"A workload identity pool provider.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location of the resource.\"\n              },\n              {\n                \"key\": \"pool_id\",\n                \"description\": \"The ID of the provider's workload identity pool parent resource.\"\n              },\n              {\n                \"key\": \"provider_id\",\n                \"description\": \"The ID of the workload identity pool provider resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"iam.googleapis.com/WorkforcePoolProvider\",\n            \"displayName\": \"Workforce Identity Pool Provider\",\n            \"description\": \"A workforce identity pool provider.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the Google Cloud organization associated with this resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location of the resource.\"\n              },\n              {\n                \"key\": \"pool_id\",\n                \"description\": \"The ID of the provider's workforce pool parent resource.\"\n              },\n              {\n                \"key\": \"provider_id\",\n                \"description\": \"The ID of the workforce pool provider resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"iam.googleapis.com/WorkloadIdentityPoolProvider\",\n              \"metrics\": [\n                \"iam.googleapis.com/workload_identity_federation/count\",\n                \"iam.googleapis.com/workload_identity_federation/key_usage_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"iam_service_account\",\n              \"metrics\": [\n                \"iam.googleapis.com/service_account/authn_events_count\",\n                \"iam.googleapis.com/service_account/key/authn_events_count\",\n                \"iam.googleapis.com/service_account/authn_events_count_preprod\",\n                \"iam.googleapis.com/service_account/key/authn_events_count_preprod\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"iam.googleapis.com/WorkforcePoolProvider\",\n              \"metrics\": [\n                \"iam.googleapis.com/workforce_identity_federation/count\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340033\"\n    },\n    {\n      \"name\": \"projects/12340033/services/iamcredentials.googleapis.com\",\n      \"config\": {\n        \"name\": \"iamcredentials.googleapis.com\",\n        \"title\": \"IAM Service Account Credentials API\",\n        \"documentation\": {\n          \"summary\": \"Creates short-lived credentials for impersonating IAM service accounts. Disabling this API also disables the IAM API (iam.googleapis.com). However, enabling this API doesn't enable the IAM API.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340033\"\n    },\n    {\n      \"name\": \"projects/12340033/services/monitoring.googleapis.com\",\n      \"config\": {\n        \"name\": \"monitoring.googleapis.com\",\n        \"title\": \"Cloud Monitoring API\",\n        \"documentation\": {\n          \"summary\": \"Manages your Cloud Monitoring data and configurations.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"monitoring.googleapis.com/ChargedProject\",\n            \"displayName\": \"Cloud monitoring target\",\n            \"description\": \"A cloud monitoring specialization target schema of cloud.ChargedProject.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The monitored resource container. Could be project, workspace, etc.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The service-specific notion of location.\"\n              },\n              {\n                \"key\": \"service\",\n                \"description\": \"The name of the API service with which the data is associated (e.g.,'monitoring.googleapis.com').\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"monitoring.googleapis.com/MetricStatistics\",\n            \"displayName\": \"Metric Statistics\",\n            \"description\": \"Information about a user-written metric in Cloud Monitoring.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project to which the metric is written, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The cloud region where the metric was received.\"\n              },\n              {\n                \"key\": \"metric_type\",\n                \"description\": \"The metric type.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"monitoring.googleapis.com/MetricIngestionAttribution\",\n            \"displayName\": \"Metric Ingestion Attribution\",\n            \"description\": \"Attribution for metric ingestion.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project to which the metric is written, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location of the resource that the metric ingestion was associated with, unless it was 'global', in which case this will be the cloud region where the metric was received.\"\n              },\n              {\n                \"key\": \"attribution_dimension\",\n                \"description\": \"The dimension used for attribution reporting. It is not recommended that aggregations are performed across dimensions because a single metric point can be recorded with multiple dimensions which could cause double counting. Currently only \\\"namespace\\\" and \\\"cluster\\\" are supported.\"\n              },\n              {\n                \"key\": \"attribution_id\",\n                \"description\": \"The attribution id of the source of the metric write.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"monitoring.googleapis.com/ChargedProject\",\n              \"metrics\": [\n                \"monitoring.googleapis.com/billing/bytes_ingested\",\n                \"monitoring.googleapis.com/billing/samples_ingested\",\n                \"monitoring.googleapis.com/internal/billing/gke_enterprise_samples_ingested\",\n                \"monitoring.googleapis.com/internal/billing/non_chargeable_samples_ingested\",\n                \"monitoring.googleapis.com/internal/stats/filtered_sample_count\",\n                \"monitoring.googleapis.com/internal/stats/filtered_byte_count\",\n                \"monitoring.googleapis.com/internal/stats/metrics_queried_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"monitoring.googleapis.com/MetricStatistics\",\n              \"metrics\": [\n                \"monitoring.googleapis.com/collection/write_request_count\",\n                \"monitoring.googleapis.com/collection/write_request_point_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"monitoring.googleapis.com/MetricIngestionAttribution\",\n              \"metrics\": [\n                \"monitoring.googleapis.com/collection/attribution/sample_count\",\n                \"monitoring.googleapis.com/collection/attribution/write_sample_count\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340033\"\n    },\n    {\n      \"name\": \"projects/12340033/services/networkconnectivity.googleapis.com\",\n      \"config\": {\n        \"name\": \"networkconnectivity.googleapis.com\",\n        \"title\": \"Network Connectivity API\",\n        \"documentation\": {\n          \"summary\": \"This API enables connectivity with and between Google Cloud resources.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"networkconnectivity.googleapis.com/Hub\",\n            \"displayName\": \"Network Connectivity Hub\",\n            \"description\": \"A Network Connectivity hub.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP resource container that this hub is in.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The identifier of the location that this hub is in.\"\n              },\n              {\n                \"key\": \"hub_id\",\n                \"description\": \"The identifier of this hub.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"networkconnectivity.googleapis.com/RouteTable\",\n            \"displayName\": \"Network Connectivity Route Table\",\n            \"description\": \"A route table associated with a Network Connectivity hub.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project associated with this route table.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The identifier of the location that this route table is in.\"\n              },\n              {\n                \"key\": \"hub_id\",\n                \"description\": \"The identifier of the hub that is associated with this route table.\"\n              },\n              {\n                \"key\": \"route_table_id\",\n                \"description\": \"The identifier of this route table.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"networkconnectivity.googleapis.com/Spoke\",\n            \"displayName\": \"Spoke\",\n            \"description\": \"A Network Connectivity Center Spoke resource.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project owning the NCC spoke.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location of the NCC spoke.\"\n              },\n              {\n                \"key\": \"id\",\n                \"description\": \"The user-specified identifier of the NCC spoke.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"networkconnectivity.googleapis.com/GatewaySpokeVM\",\n            \"displayName\": \"Gateway Spoke VM\",\n            \"description\": \"An NCC Gateway Spoke VM (Internal Resource).\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP tenant project owning the VM.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The GCP zone where the VM resides.\"\n              },\n              {\n                \"key\": \"service_name\",\n                \"description\": \"The networkconnectivity endpoint which was called to create the VM (e.g. autopush-networkconnectivity.sandbox.googleapis.com).\"\n              },\n              {\n                \"key\": \"spoke_id\",\n                \"description\": \"The NCC Gateway spoke associated with the VM.\"\n              },\n              {\n                \"key\": \"slm_instance_id\",\n                \"description\": \"The SLM instance associated with the VM.\"\n              },\n              {\n                \"key\": \"vm_instance_id\",\n                \"description\": \"The GCP-assigned identifier for the VM.\"\n              },\n              {\n                \"key\": \"vm_instance_name\",\n                \"description\": \"The human-readable name for the VM.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"networkconnectivity.googleapis.com/Hub\",\n              \"metrics\": [\n                \"networkconnectivity.googleapis.com/active_vpc_spokes_per_hub\",\n                \"networkconnectivity.googleapis.com/groups_per_hub\",\n                \"networkconnectivity.googleapis.com/psc_ilb_consumer_forwarding_rules_per_hub\",\n                \"networkconnectivity.googleapis.com/quota/active_vpc_spokes_per_hub/exceeded\",\n                \"networkconnectivity.googleapis.com/quota/groups_per_hub/exceeded\",\n                \"networkconnectivity.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_hub/exceeded\",\n                \"networkconnectivity.googleapis.com/quota/static_routes_per_hub/exceeded\",\n                \"networkconnectivity.googleapis.com/static_routes_per_hub\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"networkconnectivity.googleapis.com/RouteTable\",\n              \"metrics\": [\n                \"networkconnectivity.googleapis.com/dynamic_route_prefixes_per_hub_route_table_per_region\",\n                \"networkconnectivity.googleapis.com/quota/dynamic_route_prefixes_per_hub_route_table_per_region/exceeded\",\n                \"networkconnectivity.googleapis.com/quota/routes_per_route_table/exceeded\",\n                \"networkconnectivity.googleapis.com/routes_per_route_table\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"networkconnectivity.googleapis.com/Hub\",\n              \"metrics\": [\n                \"networkconnectivity.googleapis.com/quota/active_vpc_spokes_per_hub/limit\",\n                \"networkconnectivity.googleapis.com/quota/active_vpc_spokes_per_hub/usage\",\n                \"networkconnectivity.googleapis.com/quota/groups_per_hub/limit\",\n                \"networkconnectivity.googleapis.com/quota/groups_per_hub/usage\",\n                \"networkconnectivity.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_hub/limit\",\n                \"networkconnectivity.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_hub/usage\",\n                \"networkconnectivity.googleapis.com/quota/static_routes_per_hub/limit\",\n                \"networkconnectivity.googleapis.com/quota/static_routes_per_hub/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"networkconnectivity.googleapis.com/RouteTable\",\n              \"metrics\": [\n                \"networkconnectivity.googleapis.com/quota/dynamic_route_prefixes_per_hub_route_table_per_region/limit\",\n                \"networkconnectivity.googleapis.com/quota/dynamic_route_prefixes_per_hub_route_table_per_region/usage\",\n                \"networkconnectivity.googleapis.com/quota/routes_per_route_table/limit\",\n                \"networkconnectivity.googleapis.com/quota/routes_per_route_table/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"networkconnectivity.googleapis.com/Spoke\",\n              \"metrics\": [\n                \"networkconnectivity.googleapis.com/spoke/gateway/received_bytes_count\",\n                \"networkconnectivity.googleapis.com/spoke/gateway/received_packets_count\",\n                \"networkconnectivity.googleapis.com/spoke/gateway/sent_bytes_count\",\n                \"networkconnectivity.googleapis.com/spoke/gateway/sent_packets_count\",\n                \"networkconnectivity.googleapis.com/spoke/gateway/packet_processing_events_count\",\n                \"networkconnectivity.googleapis.com/spoke/gateway/health\",\n                \"networkconnectivity.googleapis.com/spoke/gateway/routes_min\",\n                \"networkconnectivity.googleapis.com/spoke/gateway/routes_max\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"networkconnectivity.googleapis.com/GatewaySpokeVM\",\n              \"metrics\": [\n                \"networkconnectivity.googleapis.com/internal/spoke/gateway/ncg/routes_count\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340033\"\n    },\n    {\n      \"name\": \"projects/12340033/services/oslogin.googleapis.com\",\n      \"config\": {\n        \"name\": \"oslogin.googleapis.com\",\n        \"title\": \"Cloud OS Login API\",\n        \"documentation\": {\n          \"summary\": \"You can use OS Login to manage access to your VM instances using IAM roles.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340033\"\n    },\n    {\n      \"name\": \"projects/12340033/services/pubsub.googleapis.com\",\n      \"config\": {\n        \"name\": \"pubsub.googleapis.com\",\n        \"title\": \"Cloud Pub/Sub API\",\n        \"documentation\": {\n          \"summary\": \"Provides reliable, many-to-many, asynchronous messaging between applications.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340033\"\n    },\n    {\n      \"name\": \"projects/12340033/services/storage-api.googleapis.com\",\n      \"config\": {\n        \"name\": \"storage-api.googleapis.com\",\n        \"title\": \"Google Cloud Storage JSON API\",\n        \"documentation\": {\n          \"summary\": \"Lets you store and retrieve potentially-large, immutable data objects.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340033\"\n    },\n    {\n      \"name\": \"projects/12340033/services/websecurityscanner.googleapis.com\",\n      \"config\": {\n        \"name\": \"websecurityscanner.googleapis.com\",\n        \"title\": \"Web Security Scanner API\",\n        \"documentation\": {\n          \"summary\": \"Scans your Compute and App Engine apps for common web vulnerabilities.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340033\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/gke4/project.tf",
    "content": "/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nterraform {\n  required_providers {\n    kubernetes = {\n      source  = \"hashicorp/kubernetes\"\n      version = \">= 2.0.3\"\n    }\n    google = {\n      source  = \"hashicorp/google\"\n      version = \">= 4.4.0\"\n    }\n    google-beta = {\n      source  = \"hashicorp/google-beta\"\n      version = \">= 4.4.0\"\n    }\n  }\n}\n\nresource \"random_string\" \"project_id_suffix\" {\n  length  = 8\n  lower   = true\n  upper   = false\n  special = false\n}\n\nresource \"google_project\" \"project\" {\n  name       = \"gcpdiag-gke4-runbook\"\n  project_id = \"gcpdiag-gke4-${random_string.project_id_suffix.id}\"\n  org_id     = var.folder_id == \"\" ? var.org_id : null\n  folder_id  = var.folder_id != \"\" ? var.folder_id : null\n  labels = {\n    gcpdiag : \"test\"\n  }\n  lifecycle {\n    ignore_changes = all\n  }\n}\n\nresource \"google_project_service\" \"compute\" {\n  project = google_project.project.project_id\n  service = \"compute.googleapis.com\"\n}\n\nresource \"google_project_service\" \"container\" {\n  project = google_project.project.project_id\n  service = \"container.googleapis.com\"\n\n  depends_on = [google_project_service.compute]\n}\n\nresource \"google_project_service\" \"cloudresourcemanager\" {\n  project = google_project.project.project_id\n  service = \"cloudresourcemanager.googleapis.com\"\n}\n\noutput \"project_id\" {\n  value = google_project.project.project_id\n}\n\noutput \"project_id_suffix\" {\n  value = random_string.project_id_suffix.id\n}\n\noutput \"project_nr\" {\n  value = google_project.project.number\n}\n\noutput \"org_id\" {\n  value = var.org_id\n}\n"
  },
  {
    "path": "test-data/gke4/variables.tf",
    "content": "variable \"billing_account_id\" {}\n\nvariable \"org_id\" {}\nvariable \"folder_id\" { default = \"\" }\n"
  },
  {
    "path": "test-data/iam1/Makefile",
    "content": "PROJECT_ID  := $(shell terraform output -raw project_id)\nPROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix)\nPROJECT_NR  := $(shell terraform output -raw project_nr)\nORG_ID      := $(shell terraform output -raw org_id)\nCURL         = ../../bin/curl-wrap.sh\nJSON_CLEANER = ../../bin/json-cleaner\n\nFAKE_PROJECT_ID_SUFFIX = aaaa\nFAKE_PROJECT_NR = 12340009\nFAKE_ORG_ID = 11112222\nSED_SUBST_FAKE = sed -e \"s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/\" \\\n\t\t\t\t-e \"s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/\" \\\n\t\t\t\t-e \"s/$(ORG_ID)/$(FAKE_ORG_ID)/\" \\\n\nall:\t\\\n\tjson-dumps/project.json \\\n\tjson-dumps/services.json \\\n\tjson-dumps/iam-policy.json \\\n\tjson-dumps/org-constraints.json\n\njson-dumps/project.json:\n\t$(CURL) -fsS \\\n\t\t'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/services.json:\n\t$(CURL) -fv \\\n\t\t\t\t\t'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/iam-policy.json:\n\t$(CURL) -fsS \\\n\t\t'https://cloudresourcemanager.googleapis.com/v1/projects/$(PROJECT_ID):getIamPolicy' \\\n\t\t-X POST  --header \"Content-Type:text/json\" \\\n\t\t-d \"\" \\\n\t\t| $(JSON_CLEANER) other \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/org-constraints.json:\n\t$(CURL) -fsS \\\n\t\t'https://cloudresourcemanager.googleapis.com/v1/projects/$(PROJECT_ID):listAvailableOrgPolicyConstraints' \\\n\t\t-X POST  --header \"Content-Type:text/json\" \\\n\t\t-d \"\" \\\n\t\t| $(JSON_CLEANER) other \\\n\t\t| $(SED_SUBST_FAKE) >$@\n"
  },
  {
    "path": "test-data/iam1/json-dumps/iam-policy.json",
    "content": "{\n  \"bindings\": [\n    {\n      \"members\": [\n        \"user:testuser@example.com\"\n      ],\n      \"role\": \"roles/owner\"\n    }\n  ],\n  \"etag\": \"BwXXim1ZMUM=\",\n  \"version\": 1\n}\n"
  },
  {
    "path": "test-data/iam1/json-dumps/iam-service-accounts.json",
    "content": "{\n  \"accounts\": [\n    {\n      \"displayName\": \"User Service Account1\",\n      \"email\": \"demo2sa@gcpdiag-iam1-aaaa.iam.gserviceaccount.com\",\n      \"etag\": \"MDEwMjE5MjA=\",\n      \"name\": \"projects/gcpdiag-iam1-aaaa/serviceAccounts/demo2sa@gcpdiag-iam1-aaaa.iam.gserviceaccount.com\",\n      \"oauth2ClientId\": \"REDACTED\",\n      \"projectId\": \"gcpdiag-iam1-aaaa\",\n      \"uniqueId\": \"102417873155869406705\"\n    },\n    {\n      \"displayName\": \"Compute Engine default service account\",\n      \"email\": \"12340002-compute@developer.gserviceaccount.com\",\n      \"etag\": \"MDEwMjE5MjA=\",\n      \"name\": \"projects/gcpdiag-iam1-aaaa/serviceAccounts/12340002-compute@developer.gserviceaccount.com\",\n      \"oauth2ClientId\": \"REDACTED\",\n      \"projectId\": \"gcpdiag-iam1-aaaa\",\n      \"uniqueId\": \"112819826788395589395\"\n    },\n    {\n      \"displayName\": \"User Service Account2\",\n      \"email\": \"demo1@gcpdiag-iam1-aaaa.iam.gserviceaccount.com\",\n      \"etag\": \"MDEwMjE5MjA=\",\n      \"name\": \"projects/gcpdiag-iam1-aaaa/serviceAccounts/demo1@gcpdiag-iam1-aaaa.iam.gserviceaccount.com\",\n      \"oauth2ClientId\": \"REDACTED\",\n      \"projectId\": \"gcpdiag-iam1-aaaa\",\n      \"uniqueId\": \"106302102062593675693\"\n    },\n    {\n      \"displayName\": \"User Service Account3\",\n      \"email\": \"demo3@gcpdiag-iam1-aaaa.iam.gserviceaccount.com\",\n      \"etag\": \"MDEwMjE5MjA=\",\n      \"name\": \"projects/gcpdiag-iam1-aaaa/serviceAccounts/demo3@gcpdiag-iam1-aaaa.iam.gserviceaccount.com\",\n      \"oauth2ClientId\": \"REDACTED\",\n      \"projectId\": \"gcpdiag-iam1-aaaa\",\n      \"uniqueId\": \"104735732736559639086\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/iam1/json-dumps/monitoring-query.json",
    "content": "{\n  \"timeSeriesDescriptor\": {}\n}\n"
  },
  {
    "path": "test-data/iam1/json-dumps/org-constraint-compute.disableSerialPortAccess.json",
    "content": "{\n  \"booleanPolicy\": {\n    \"enforced\": true\n  },\n  \"constraint\": \"constraints/compute.disableSerialPortAccess\"\n}\n"
  },
  {
    "path": "test-data/iam1/json-dumps/org-constraint-compute.disableSerialPortLogging.json",
    "content": "{\n  \"booleanPolicy\":{},\n  \"constraint\": \"constraints/compute.disableSerialPortLogging\"\n}\n"
  },
  {
    "path": "test-data/iam1/json-dumps/org-constraint-compute.disableSshInBrowser.json",
    "content": "{\n  \"booleanPolicy\": {\n    \"enforced\": true\n  },\n  \"constraint\": \"constraints/compute.disableSshInBrowser\"\n}\n"
  },
  {
    "path": "test-data/iam1/json-dumps/org-constraint-compute.requireOsLogin.json",
    "content": "{\n  \"booleanPolicy\": {},\n  \"constraint\": \"constraints/compute.requireOsLogin\"\n}\n"
  },
  {
    "path": "test-data/iam1/json-dumps/org-constraint-compute.requireShieldedVm.json",
    "content": "{\n  \"booleanPolicy\": {},\n  \"constraint\": \"constraints/compute.requireShieldedVm\"\n}\n"
  },
  {
    "path": "test-data/iam1/json-dumps/org-constraint-iam.automaticIamGrantsForDefaultServiceAccounts.json",
    "content": "{\n  \"booleanPolicy\":{},\n  \"constraint\": \"constraints/iam.automaticIamGrantsForDefaultServiceAccounts\"\n}\n"
  },
  {
    "path": "test-data/iam1/json-dumps/org-constraint-iam.disableCrossProjectServiceAccountUsage.json",
    "content": "{\n  \"booleanPolicy\": {},\n  \"constraint\": \"constraints/iam.disableCrossProjectServiceAccountUsage\"\n}\n"
  },
  {
    "path": "test-data/iam1/json-dumps/org-constraints.json",
    "content": "{\n  \"constraints\": [\n    {\n      \"booleanConstraint\": {},\n      \"constraintDefault\": \"ALLOW\",\n      \"description\": \"This boolean constraint disables serial port access to Compute Engine VMs belonging to the organization, project, or folder where this constraint is set to True. By default, customers can enable serial port access for Compute Engine VMs on a per-VM or per-project basis using metadata attributes. Enforcing this constraint will disable serial port access for Compute Engine VMs, regardless of the metadata attributes.\",\n      \"displayName\": \"Disable VM serial port access\",\n      \"name\": \"constraints/compute.disableSerialPortAccess\"\n    },\n    {\n      \"booleanConstraint\": {},\n      \"constraintDefault\": \"ALLOW\",\n      \"description\": \"This boolean constraint disables serial port logging to Stackdriver from Compute Engine VMs belonging to the organization, project, or folder where this constraint is being enforced. By default, serial port logging for Compute Engine VMs is disabled, and can be selectively enabled on a per-VM or per-project basis using metadata attributes. When enforced, this constraint disables serial port logging for new Compute Engine VMs whenever a new VM is created, as well as preventing users from changing the metadata attribute of any VMs (old or new) to True. Disabling serial port logging can cause certain services that rely on it, such as Google Kubernetes Engine clusters, to not function correctly. Before you enforce this constraint, verify that the products in your project do not rely on serial port logging.\",\n      \"displayName\": \"Disable VM serial port logging to Stackdriver\",\n      \"name\": \"constraints/compute.disableSerialPortLogging\"\n    },\n    {\n      \"booleanConstraint\": {},\n      \"constraintDefault\": \"ALLOW\",\n      \"description\": \"This boolean constraint disables the SSH-in-browser tool in the Cloud Console for VMs that use OS Login and App Engine flexible environment VMs. When enforced, the SSH-in-browser button is disabled. By default, using the SSH-in-browser tool is allowed.\",\n      \"displayName\": \"Disable SSH-in-browser\",\n      \"name\": \"constraints/compute.disableSshInBrowser\"\n    },\n    {\n      \"booleanConstraint\": {},\n      \"constraintDefault\": \"ALLOW\",\n      \"description\": \"This boolean constraint, when set to true, enables OS Login on all newly created Projects. All VM instances created in new projects will have OS Login enabled. On new and existing projects, this constraint prevents metadata updates that disable OS Login at the project or instance level. By default, the OS Login feature is disabled on Compute Engine projects.GKE instances in private clusters running node pool versions 1.20.5-gke.2000 and later support OS Login. GKE instances in public clusters do not currently support OS Login. If this constraint is applied to a Project running public clusters, GKE instances running in that Project may not function properly.\",\n      \"displayName\": \"Require OS Login\",\n      \"name\": \"constraints/compute.requireOsLogin\"\n    },\n    {\n      \"booleanConstraint\": {},\n      \"constraintDefault\": \"ALLOW\",\n      \"description\": \"This boolean constraint, when set to True, requires that all new Compute Engine VM instances use Shielded disk images with Secure Boot, vTPM, and Integrity Monitoring options enabled. Secure Boot can be disabled after creation, if desired. Existing running instances will continue to work as usual. By default, Shielded VM features do not need to be enabled in order to create Compute Engine VM instances. Shielded VM features add verifiable integrity and exfiltration resistance to your VMs.\",\n      \"displayName\": \"Shielded VMs\",\n      \"name\": \"constraints/compute.requireShieldedVm\"\n    },\n    {\n      \"booleanConstraint\": {},\n      \"constraintDefault\": \"ALLOW\",\n      \"description\": \"This boolean constraint, when enforced, prevents the default App Engine and Compute Engine service accounts that are created in your projects from being automatically granted any IAM role on the project when the accounts are created. By default, these service accounts automatically receive the Editor role when they are created. To learn about default service accounts, see https://cloud.google.com/iam/help/service-accounts/default. To learn which roles to grant instead of the Editor role, see https://cloud.google.com/iam/help/service-accounts/troubleshoot-roles-default.\",\n      \"displayName\": \"Disable Automatic IAM Grants for Default Service Accounts\",\n      \"name\": \"constraints/iam.automaticIamGrantsForDefaultServiceAccounts\"\n    },\n    {\n      \"booleanConstraint\": {},\n      \"constraintDefault\": \"DENY\",\n      \"description\": \"When enforced, service accounts can only be deployed (using ServiceAccountUser role) to jobs (vms, functions, etc) running in the same project as the service account.\",\n      \"displayName\": \"Disable Cross-Project Service Account Usage\",\n      \"name\": \"constraints/iam.disableCrossProjectServiceAccountUsage\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/iam1/json-dumps/org-policies.json",
    "content": "{\n  \"policies\": [\n    {\n      \"version\": 2,\n      \"constraint\": \"constraints/cloudbuild.allowedWorkerPools\",\n      \"etag\": \"CNmNp74GEPCmnzw=\",\n      \"updateTime\": \"2025-03-06T16:01:29.126342Z\",\n      \"listPolicy\": {\n        \"allowedValues\": [\n          \"projects/12340004/locations/us-central1/workerPools/test-pool\"\n        ]\n      }\n    },\n    {\n      \"constraint\": \"constraints/compute.skipDefaultNetworkCreation\",\n      \"etag\": \"CL2Kp74GENDg7McD\",\n      \"updateTime\": \"2025-03-06T15:54:37.955986Z\",\n      \"booleanPolicy\": {}\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/iam1/json-dumps/project.json",
    "content": "{\n  \"name\": \"projects/12340009\",\n  \"parent\": \"organizations/11112222\",\n  \"projectId\": \"gcpdiag-iam1-aaaa\",\n  \"state\": \"ACTIVE\",\n  \"displayName\": \"gcpdiag test - iam1\",\n  \"createTime\": \"2022-02-08T23:53:42.154Z\",\n  \"updateTime\": \"2022-02-08T23:53:43.701Z\",\n  \"etag\": \"ZPsI3xvWVgvyuQafVcNtsg==\",\n  \"labels\": {\n    \"gcpdiag\": \"test\"\n  }\n}\n"
  },
  {
    "path": "test-data/iam1/json-dumps/services.json",
    "content": "{}\n"
  },
  {
    "path": "test-data/iam1/project.tf",
    "content": "/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nresource \"random_string\" \"project_id_suffix\" {\n  length  = 8\n  number  = true\n  lower   = true\n  upper   = false\n  special = false\n}\n\nresource \"google_project\" \"project\" {\n  name            = \"gcpdiag test - iam1\"\n  project_id      = \"gcpdiag-iam1-${random_string.project_id_suffix.id}\"\n  org_id          = var.folder_id == \"\" ? var.org_id : null\n  folder_id       = var.folder_id != \"\" ? var.folder_id : null\n  billing_account = var.billing_account_id\n  labels = {\n    gcpdiag : \"test\"\n  }\n}\n\noutput \"project_id\" {\n  value = google_project.project.project_id\n}\n\noutput \"project_id_suffix\" {\n  value = random_string.project_id_suffix.id\n}\n\noutput \"project_nr\" {\n  value = google_project.project.number\n}\n\noutput \"org_id\" {\n  value = var.org_id\n}\n"
  },
  {
    "path": "test-data/iam1/variables.tf",
    "content": "variable \"billing_account_id\" {}\n\nvariable \"org_id\" {}\nvariable \"folder_id\" { default = \"\" }\n"
  },
  {
    "path": "test-data/interconnect1/Makefile",
    "content": "PROJECT_ID  := $(shell terraform output -raw project_id)\nPROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix)\nPROJECT_NR  := $(shell terraform output -raw project_nr)\nORG_ID      := $(shell terraform output -raw org_id)\nCURL         = ../../bin/curl-wrap.sh\nJSON_CLEANER = ../../bin/json-cleaner\n\nFAKE_PROJECT_ID_SUFFIX = aaaa\nFAKE_PROJECT_NR = 12340009\nFAKE_ORG_ID = 11112222\nSED_SUBST_FAKE = sed -e \"s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/\" \\\n\t\t\t\t-e \"s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/\" \\\n\t\t\t\t-e \"s/$(ORG_ID)/$(FAKE_ORG_ID)/\" \\\n\nall:\t\\\n\tjson-dumps/project.json \\\n\tjson-dumps/compute-interconnects.json \\\n\tjson-dumps/compute-project.json\n\ninclude ../Makefile.inc\n"
  },
  {
    "path": "test-data/interconnect1/json-dumps/compute-interconnects.json",
    "content": "[\n  {\n    \"adminEnabled\": true,\n    \"circuitInfos\": [\n      {\n        \"customerDemarcId\": \"PEERP:NODEMARC\",\n        \"googleCircuitId\": \"GCP-00111111\",\n        \"googleDemarcId\": \"ABCDEFG\"\n      }\n    ],\n    \"creationTimestamp\": \"2021-01-01T00:00:00-00:00\",\n    \"customerName\": \"Dummy User\",\n    \"description\": \"Dummy Interconnect\",\n    \"expectedOutages\": [\n      {\n        \"description\": \"\",\n        \"endTime\": \"1670443549000\",\n        \"issueType\": \"IT_OUTAGE\",\n        \"name\": \"pcr-639175\",\n        \"source\": \"NSRC_GOOGLE\",\n        \"startTime\": \"1670424949000\",\n        \"state\": \"COMPLETED\"\n      }\n    ],\n    \"googleReferenceId\": \"4774247690472065552\",\n    \"id\": \"4774247690472065552\",\n    \"interconnectAttachments\": [\n      \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment1\",\n      \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment2\"\n    ],\n    \"interconnectType\": \"IT_PRIVATE\",\n    \"kind\": \"compute#interconnect\",\n    \"linkType\": \"LINK_TYPE_ETHERNET_10G_LR\",\n    \"location\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/interconnectLocations/bos-zone1-219\",\n    \"name\": \"dummy-interconnect1\",\n    \"nocContactEmail\": \"dummy@example.com\",\n    \"operationalStatus\": \"OS_ACTIVE\",\n    \"provisionedLinkCount\": 1,\n    \"requestedLinkCount\": 1,\n    \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/interconnects/dummy-interconnect1\",\n    \"state\": \"ACTIVE\"\n  },\n  {\n    \"adminEnabled\": true,\n    \"circuitInfos\": [\n      {\n        \"customerDemarcId\": \"PEERP:NODEMARC\",\n        \"googleCircuitId\": \"GCP-00111111\",\n        \"googleDemarcId\": \"ABCDEFG\"\n      }\n    ],\n    \"creationTimestamp\": \"2021-01-01T00:00:00-00:00\",\n    \"customerName\": \"Dummy User\",\n    \"description\": \"Dummy Interconnect\",\n    \"expectedOutages\": [\n      {\n        \"description\": \"\",\n        \"endTime\": \"1670443549000\",\n        \"issueType\": \"IT_OUTAGE\",\n        \"name\": \"pcr-639175\",\n        \"source\": \"NSRC_GOOGLE\",\n        \"startTime\": \"1670424949000\",\n        \"state\": \"COMPLETED\"\n      }\n    ],\n    \"googleReferenceId\": \"4774247690472065552\",\n    \"id\": \"4774247690472065552\",\n    \"interconnectAttachments\": [\n      \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment3\",\n      \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment4\"\n    ],\n    \"interconnectType\": \"IT_PRIVATE\",\n    \"kind\": \"compute#interconnect\",\n    \"linkType\": \"LINK_TYPE_ETHERNET_10G_LR\",\n    \"location\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/interconnectLocations/bos-zone2-219\",\n    \"name\": \"dummy-interconnect2\",\n    \"nocContactEmail\": \"dummy@example.com\",\n    \"operationalStatus\": \"OS_ACTIVE\",\n    \"provisionedLinkCount\": 1,\n    \"requestedLinkCount\": 1,\n    \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/interconnects/dummy-interconnect2\",\n    \"state\": \"ACTIVE\"\n  },\n  {\n    \"adminEnabled\": true,\n    \"circuitInfos\": [\n      {\n        \"customerDemarcId\": \"PEERP:NODEMARC\",\n        \"googleCircuitId\": \"GCP-00111111\",\n        \"googleDemarcId\": \"ABCDEFG\"\n      }\n    ],\n    \"creationTimestamp\": \"2021-01-01T00:00:00-00:00\",\n    \"customerName\": \"Dummy User\",\n    \"description\": \"Dummy Interconnect\",\n    \"expectedOutages\": [\n      {\n        \"description\": \"\",\n        \"endTime\": \"1670443549000\",\n        \"issueType\": \"IT_OUTAGE\",\n        \"name\": \"pcr-639175\",\n        \"source\": \"NSRC_GOOGLE\",\n        \"startTime\": \"1670424949000\",\n        \"state\": \"COMPLETED\"\n      }\n    ],\n    \"googleReferenceId\": \"4774247690472065552\",\n    \"id\": \"4774247690472065552\",\n    \"interconnectAttachments\": [\n      \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment5\"\n    ],\n    \"interconnectType\": \"IT_PRIVATE\",\n    \"kind\": \"compute#interconnect\",\n    \"linkType\": \"LINK_TYPE_ETHERNET_10G_LR\",\n    \"location\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/interconnectLocations/sjc-zone1-6\",\n    \"name\": \"dummy-interconnect3\",\n    \"nocContactEmail\": \"dummy@example.com\",\n    \"operationalStatus\": \"OS_ACTIVE\",\n    \"provisionedLinkCount\": 1,\n    \"requestedLinkCount\": 1,\n    \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/interconnects/dummy-interconnect3\",\n    \"state\": \"UNDER_MAINTENANCE\"\n  },\n  {\n    \"adminEnabled\": true,\n    \"circuitInfos\": [\n      {\n        \"customerDemarcId\": \"PEERP:NODEMARC\",\n        \"googleCircuitId\": \"GCP-00111111\",\n        \"googleDemarcId\": \"ABCDEFG\"\n      }\n    ],\n    \"creationTimestamp\": \"2021-01-01T00:00:00-00:00\",\n    \"customerName\": \"Dummy User\",\n    \"description\": \"Dummy Interconnect\",\n    \"expectedOutages\": [\n      {\n        \"description\": \"\",\n        \"endTime\": \"1670443549000\",\n        \"issueType\": \"IT_OUTAGE\",\n        \"name\": \"pcr-639175\",\n        \"source\": \"NSRC_GOOGLE\",\n        \"startTime\": \"1670424949000\",\n        \"state\": \"COMPLETED\"\n      }\n    ],\n    \"googleReferenceId\": \"4774247690472065552\",\n    \"id\": \"4774247690472065552\",\n    \"interconnectAttachments\": [\n      \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6\"\n    ],\n    \"interconnectType\": \"IT_PRIVATE\",\n    \"kind\": \"compute#interconnect\",\n    \"linkType\": \"LINK_TYPE_ETHERNET_10G_LR\",\n    \"location\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/interconnectLocations/sjc-zone2-6\",\n    \"name\": \"dummy-interconnect4\",\n    \"nocContactEmail\": \"dummy@example.com\",\n    \"operationalStatus\": \"OS_ACTIVE\",\n    \"provisionedLinkCount\": 1,\n    \"requestedLinkCount\": 1,\n    \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/interconnects/dummy-interconnect4\",\n    \"state\": \"UNDER_MAINTENANCE\"\n  },\n  {\n    \"adminEnabled\": true,\n    \"circuitInfos\": [\n      {\n        \"customerDemarcId\": \"PEERP:NODEMARC\",\n        \"googleCircuitId\": \"GCP-00111111\",\n        \"googleDemarcId\": \"ABCDEFG\"\n      }\n    ],\n    \"creationTimestamp\": \"2021-01-01T00:00:00-00:00\",\n    \"customerName\": \"Dummy User\",\n    \"description\": \"Dummy Interconnect\",\n    \"expectedOutages\": [\n      {\n        \"description\": \"\",\n        \"endTime\": \"1670443549000\",\n        \"issueType\": \"IT_OUTAGE\",\n        \"name\": \"pcr-639175\",\n        \"source\": \"NSRC_GOOGLE\",\n        \"startTime\": \"1670424949000\",\n        \"state\": \"COMPLETED\"\n      }\n    ],\n    \"googleReferenceId\": \"4774247690472065552\",\n    \"id\": \"4774247690472065552\",\n    \"interconnectAttachments\": [\n      \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6\"\n    ],\n    \"interconnectType\": \"IT_PRIVATE\",\n    \"kind\": \"compute#interconnect\",\n    \"linkType\": \"LINK_TYPE_ETHERNET_10G_LR\",\n    \"location\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/interconnectLocations/sjc-zone2-6\",\n    \"name\": \"dummy-interconnect4\",\n    \"nocContactEmail\": \"dummy@example.com\",\n    \"operationalStatus\": \"OS_ACTIVE\",\n    \"provisionedLinkCount\": 1,\n    \"requestedLinkCount\": 1,\n    \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/interconnects/dummy-interconnect4\",\n    \"state\": \"ACTIVE\"\n  },\n  {\n    \"adminEnabled\": true,\n    \"circuitInfos\": [\n      {\n        \"customerDemarcId\": \"PEERP:NODEMARC\",\n        \"googleCircuitId\": \"GCP-00111111\",\n        \"googleDemarcId\": \"ABCDEFG\"\n      }\n    ],\n    \"creationTimestamp\": \"2021-01-01T00:00:00-00:00\",\n    \"customerName\": \"Dummy User\",\n    \"description\": \"Dummy Interconnect\",\n    \"expectedOutages\": [\n      {\n        \"description\": \"\",\n        \"endTime\": \"1670443549000\",\n        \"issueType\": \"IT_OUTAGE\",\n        \"name\": \"pcr-639175\",\n        \"source\": \"NSRC_GOOGLE\",\n        \"startTime\": \"1670424949000\",\n        \"state\": \"COMPLETED\"\n      }\n    ],\n    \"googleReferenceId\": \"4774247690472065552\",\n    \"id\": \"4774247690472065552\",\n    \"interconnectAttachments\": [\n      \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6\"\n    ],\n    \"interconnectType\": \"IT_PRIVATE\",\n    \"kind\": \"compute#interconnect\",\n    \"linkType\": \"LINK_TYPE_ETHERNET_10G_LR\",\n    \"location\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/interconnectLocations/sjc-zone2-6\",\n    \"name\": \"dummy-interconnect5\",\n    \"nocContactEmail\": \"dummy@example.com\",\n    \"operationalStatus\": \"OS_ACTIVE\",\n    \"provisionedLinkCount\": 1,\n    \"requestedLinkCount\": 1,\n    \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/interconnects/dummy-interconnect4\",\n    \"state\": \"UNDER_MAINTENANCE\"\n  }\n]\n"
  },
  {
    "path": "test-data/interconnect1/json-dumps/compute-network-default.json",
    "content": "{\n  \"kind\": \"compute#network\",\n  \"id\": \"7246553118008778977\",\n  \"creationTimestamp\": \"2022-03-30T02:08:30.014-07:00\",\n  \"name\": \"default\",\n  \"description\": \"Default network for the project\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default\",\n  \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/7246553118008778977\",\n  \"autoCreateSubnetworks\": true,\n  \"mtu\": 1460,\n  \"subnetworks\": [\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/europe-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/europe-west4/subnetworks/gke1-subnet\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/asia-east1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west4/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/europe-west4/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/europe-west6/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/asia-south2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/asia-southeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/northamerica-northeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/asia-east2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/asia-southeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/europe-west2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/asia-south1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/asia-northeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/europe-west3/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/australia-southeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/australia-southeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/asia-northeast3/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/europe-north1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/asia-northeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/southamerica-east1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/northamerica-northeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west3/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-central1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/southamerica-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/europe-central2/subnetworks/default\"\n  ],\n  \"peerings\": [\n    {\n      \"name\": \"gke-ne6f5d919f4c34558948-1e4e-2883-peer\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gke-prod-europe-west4-a-55a0/global/networks/gke-ne6f5d919f4c34558948-1e4e-e59b-net\",\n      \"state\": \"ACTIVE\",\n      \"stateDetails\": \"[2022-03-30T02:11:12.613-07:00]: Connected.\",\n      \"autoCreateRoutes\": true,\n      \"exportCustomRoutes\": false,\n      \"importCustomRoutes\": false,\n      \"exchangeSubnetRoutes\": true,\n      \"exportSubnetRoutesWithPublicIp\": true,\n      \"importSubnetRoutesWithPublicIp\": false\n    },\n    {\n      \"name\": \"gke-ne6f5d919f4c34558948-e4c5-1a39-peer\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gke-prod-europe-west4-559c/global/networks/gke-ne6f5d919f4c34558948-e4c5-32e2-net\",\n      \"state\": \"ACTIVE\",\n      \"stateDetails\": \"[2022-03-30T02:12:15.512-07:00]: Connected.\",\n      \"autoCreateRoutes\": true,\n      \"exportCustomRoutes\": false,\n      \"importCustomRoutes\": false,\n      \"exchangeSubnetRoutes\": true,\n      \"exportSubnetRoutesWithPublicIp\": true,\n      \"importSubnetRoutesWithPublicIp\": false\n    }\n  ],\n  \"routingConfig\": {\n    \"routingMode\": \"REGIONAL\"\n  },\n  \"networkFirewallPolicyEnforcementOrder\": \"AFTER_CLASSIC_FIREWALL\"\n}\n"
  },
  {
    "path": "test-data/interconnect1/json-dumps/compute-project.json",
    "content": "{\n  \"commonInstanceMetadata\": {\n    \"fingerprint\": \"9um0yrlKtsk=\",\n    \"kind\": \"compute#metadata\"\n  },\n  \"creationTimestamp\": \"2022-08-25T07:22:28.064-07:00\",\n  \"defaultNetworkTier\": \"PREMIUM\",\n  \"defaultServiceAccount\": \"12340009-compute@developer.gserviceaccount.com\",\n  \"id\": \"1866944745413688140\",\n  \"kind\": \"compute#project\",\n  \"name\": \"gcpdiag-interconnect1-aaaa\",\n  \"quotas\": [\n    {\n      \"limit\": 10000,\n      \"metric\": \"SNAPSHOTS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 30,\n      \"metric\": \"NETWORKS\",\n      \"usage\": 1\n    },\n    {\n      \"limit\": 500,\n      \"metric\": \"FIREWALLS\",\n      \"usage\": 5\n    },\n    {\n      \"limit\": 5000,\n      \"metric\": \"IMAGES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 175,\n      \"metric\": \"STATIC_ADDRESSES\",\n      \"usage\": 1\n    },\n    {\n      \"limit\": 300,\n      \"metric\": \"ROUTES\",\n      \"usage\": 1\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"FORWARDING_RULES\",\n      \"usage\": 1\n    },\n    {\n      \"limit\": 500,\n      \"metric\": \"TARGET_POOLS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 500,\n      \"metric\": \"HEALTH_CHECKS\",\n      \"usage\": 1\n    },\n    {\n      \"limit\": 575,\n      \"metric\": \"IN_USE_ADDRESSES\",\n      \"usage\": 1\n    },\n    {\n      \"limit\": 500,\n      \"metric\": \"TARGET_INSTANCES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_HTTP_PROXIES\",\n      \"usage\": 1\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"URL_MAPS\",\n      \"usage\": 1\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"BACKEND_SERVICES\",\n      \"usage\": 1\n    },\n    {\n      \"limit\": 1000,\n      \"metric\": \"INSTANCE_TEMPLATES\",\n      \"usage\": 1\n    },\n    {\n      \"limit\": 50,\n      \"metric\": \"TARGET_VPN_GATEWAYS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"VPN_TUNNELS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 30,\n      \"metric\": \"BACKEND_BUCKETS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 20,\n      \"metric\": \"ROUTERS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_SSL_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_HTTPS_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"SSL_CERTIFICATES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 275,\n      \"metric\": \"SUBNETWORKS\",\n      \"usage\": 34\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_TCP_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 10,\n      \"metric\": \"SECURITY_POLICIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 200,\n      \"metric\": \"SECURITY_POLICY_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1000,\n      \"metric\": \"XPN_SERVICE_PROJECTS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"PACKET_MIRRORINGS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1000,\n      \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 6,\n      \"metric\": \"INTERCONNECTS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 5000,\n      \"metric\": \"GLOBAL_INTERNAL_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 50,\n      \"metric\": \"VPN_GATEWAYS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 5000,\n      \"metric\": \"MACHINE_IMAGES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 20,\n      \"metric\": \"SECURITY_POLICY_CEVAL_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 50,\n      \"metric\": \"EXTERNAL_VPN_GATEWAYS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1,\n      \"metric\": \"PUBLIC_ADVERTISED_PREFIXES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 10,\n      \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1024,\n      \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 60,\n      \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"INTERNAL_TRAFFIC_DIRECTOR_FORWARDING_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"GLOBAL_EXTERNAL_MANAGED_FORWARDING_RULES\",\n      \"usage\": 0\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa\",\n  \"xpnProjectStatus\": \"UNSPECIFIED_XPN_PROJECT_STATUS\"\n}\n"
  },
  {
    "path": "test-data/interconnect1/json-dumps/compute-routers-routerStatus-dummy-router1.json",
    "content": "{\n  \"kind\": \"compute#routerStatusResponse\",\n  \"result\": {\n    \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default\",\n    \"bestRoutes\": [\n      {\n        \"kind\": \"compute#route\",\n        \"creationTimestamp\": \"2025-03-24T02:13:17.617-07:00\",\n        \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default\",\n        \"destRange\": \"172.17.15.0/24\",\n        \"priority\": 100,\n        \"nextHopIp\": \"169.254.111.2\",\n        \"routeType\": \"BGP\",\n        \"asPaths\": [\n          {\n            \"pathSegmentType\": \"AS_SEQUENCE\",\n            \"asLists\": [\n              64500\n            ]\n          }\n        ],\n        \"nextHopOrigin\": \"INCOMPLETE\"\n      },\n      {\n        \"kind\": \"compute#route\",\n        \"creationTimestamp\": \"2025-03-20T22:40:00.972-07:00\",\n        \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default\",\n        \"destRange\": \"192.168.114.0/24\",\n        \"priority\": 0,\n        \"nextHopIp\": \"169.254.46.184\",\n        \"routeType\": \"BGP\",\n        \"asPaths\": [\n          {\n            \"pathSegmentType\": \"AS_SEQUENCE\",\n            \"asLists\": [\n              1140\n            ]\n          }\n        ],\n        \"nextHopOrigin\": \"INCOMPLETE\"\n      }\n    ],\n    \"bestRoutesForRouter\": [\n      {\n        \"kind\": \"compute#route\",\n        \"creationTimestamp\": \"2025-03-13T00:45:02.483-07:00\",\n        \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default\",\n        \"destRange\": \"172.17.15.0/24\",\n        \"priority\": 100,\n        \"nextHopIp\": \"169.254.111.2\",\n        \"routeType\": \"BGP\",\n        \"asPaths\": [\n          {\n            \"pathSegmentType\": \"AS_SEQUENCE\",\n            \"asLists\": [\n              64500\n            ]\n          }\n        ],\n        \"routeStatus\": \"ACTIVE\",\n        \"nextHopOrigin\": \"INCOMPLETE\"\n      },\n      {\n        \"kind\": \"compute#route\",\n        \"creationTimestamp\": \"2025-03-20T09:46:06.079-07:00\",\n        \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default\",\n        \"destRange\": \"192.168.114.0/24\",\n        \"priority\": 0,\n        \"nextHopIp\": \"169.254.46.184\",\n        \"routeType\": \"BGP\",\n        \"asPaths\": [\n          {\n            \"pathSegmentType\": \"AS_SEQUENCE\",\n            \"asLists\": [\n              1140\n            ]\n          }\n        ],\n        \"routeStatus\": \"ACTIVE\",\n        \"nextHopOrigin\": \"INCOMPLETE\"\n      }\n    ],\n    \"bgpPeerStatus\": [\n      {\n        \"name\": \"dummy-vlan11\",\n        \"ipAddress\": \"169.254.1.1\",\n        \"peerIpAddress\": \"169.254.1.2\",\n        \"enableIpv6\": false,\n        \"status\": \"UP\",\n        \"state\": \"Established\",\n        \"uptime\": \"1 weeks, 4 days, 5 hours, 20 minutes, 52 seconds\",\n        \"uptimeSeconds\": \"969652\",\n        \"numLearnedRoutes\": 1,\n        \"advertisedRoutes\": [\n          {\n            \"kind\": \"compute#route\",\n            \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default\",\n            \"destRange\": \"10.216.0.0/20\",\n            \"priority\": 1233,\n            \"nextHopIp\": \"169.254.111.1\",\n            \"routeType\": \"BGP\",\n            \"nextHopOrigin\": \"INCOMPLETE\"\n          }\n        ],\n        \"md5AuthEnabled\": false,\n        \"enableIpv4\": true\n      },\n      {\n        \"name\": \"dummy-vlan21\",\n        \"ipAddress\": \"169.254.2.1\",\n        \"peerIpAddress\": \"169.254.2.2\",\n        \"enableIpv6\": false,\n        \"status\": \"UP\",\n        \"state\": \"Established\",\n        \"uptime\": \"3 days, 20 hours, 19 minutes, 47 seconds\",\n        \"uptimeSeconds\": \"332387\",\n        \"numLearnedRoutes\": 1,\n        \"advertisedRoutes\": [\n          {\n            \"kind\": \"compute#route\",\n            \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default\",\n            \"destRange\": \"10.168.0.0/20\",\n            \"priority\": 373,\n            \"nextHopIp\": \"169.254.46.184\",\n            \"routeType\": \"BGP\",\n            \"nextHopOrigin\": \"INCOMPLETE\"\n          }\n        ],\n        \"md5AuthEnabled\": false,\n        \"enableIpv4\": true\n      }\n    ]\n  }\n}\n"
  },
  {
    "path": "test-data/interconnect1/json-dumps/compute-routers-routerStatus-dummy-router11.json",
    "content": "{\n  \"kind\": \"compute#routerStatusResponse\",\n  \"result\": {\n    \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default\",\n    \"bestRoutes\": [\n      {\n        \"kind\": \"compute#route\",\n        \"creationTimestamp\": \"2024-08-24T02:13:17.617-07:00\",\n        \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default\",\n        \"destRange\": \"172.17.16.0/24\",\n        \"priority\": 100,\n        \"nextHopIp\": \"169.254.111.2\",\n        \"routeType\": \"BGP\",\n        \"asPaths\": [\n          {\n            \"pathSegmentType\": \"AS_SEQUENCE\",\n            \"asLists\": [\n              64500\n            ]\n          }\n        ],\n        \"nextHopOrigin\": \"INCOMPLETE\"\n      },\n      {\n        \"kind\": \"compute#route\",\n        \"creationTimestamp\": \"2024-08-20T22:40:00.972-07:00\",\n        \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default\",\n        \"destRange\": \"192.168.114.0/24\",\n        \"priority\": 0,\n        \"nextHopIp\": \"169.254.46.184\",\n        \"routeType\": \"BGP\",\n        \"asPaths\": [\n          {\n            \"pathSegmentType\": \"AS_SEQUENCE\",\n            \"asLists\": [\n              1140\n            ]\n          }\n        ],\n        \"nextHopOrigin\": \"INCOMPLETE\"\n      }\n    ],\n    \"bestRoutesForRouter\": [\n      {\n        \"kind\": \"compute#route\",\n        \"creationTimestamp\": \"2024-08-13T00:45:02.483-07:00\",\n        \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default\",\n        \"destRange\": \"172.17.16.0/24\",\n        \"priority\": 100,\n        \"nextHopIp\": \"169.254.111.2\",\n        \"routeType\": \"BGP\",\n        \"asPaths\": [\n          {\n            \"pathSegmentType\": \"AS_SEQUENCE\",\n            \"asLists\": [\n              64200\n            ]\n          }\n        ],\n        \"routeStatus\": \"ACTIVE\",\n        \"nextHopOrigin\": \"INCOMPLETE\"\n      },\n      {\n        \"kind\": \"compute#route\",\n        \"creationTimestamp\": \"2024-08-20T09:46:06.079-07:00\",\n        \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default\",\n        \"destRange\": \"192.168.114.0/24\",\n        \"priority\": 0,\n        \"nextHopIp\": \"169.254.46.184\",\n        \"routeType\": \"BGP\",\n        \"asPaths\": [\n          {\n            \"pathSegmentType\": \"AS_SEQUENCE\",\n            \"asLists\": [\n              1240\n            ]\n          }\n        ],\n        \"routeStatus\": \"ACTIVE\",\n        \"nextHopOrigin\": \"INCOMPLETE\"\n      }\n    ],\n    \"bgpPeerStatus\": [\n      {\n        \"name\": \"dummy-vlan11\",\n        \"ipAddress\": \"169.254.11.1\",\n        \"peerIpAddress\": \"169.254.11.2\",\n        \"enableIpv6\": false,\n        \"status\": \"UP\",\n        \"state\": \"Established\",\n        \"uptime\": \"3 days, 20 hours, 19 minutes, 47 seconds\",\n        \"uptimeSeconds\": \"332387\",\n        \"numLearnedRoutes\": 1,\n        \"advertisedRoutes\": [\n          {\n            \"kind\": \"compute#route\",\n            \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default\",\n            \"destRange\": \"10.168.0.0/20\",\n            \"priority\": 373,\n            \"nextHopIp\": \"169.254.46.193\",\n            \"routeType\": \"BGP\",\n            \"nextHopOrigin\": \"INCOMPLETE\"\n          }\n        ],\n        \"md5AuthEnabled\": false,\n        \"enableIpv4\": true\n      }\n    ]\n  }\n}\n"
  },
  {
    "path": "test-data/interconnect1/json-dumps/compute-routers-routerStatus-dummy-router2.json",
    "content": "{\n  \"kind\": \"compute#routerStatusResponse\",\n  \"result\": {\n    \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default\",\n    \"bestRoutes\": [\n      {\n        \"kind\": \"compute#route\",\n        \"creationTimestamp\": \"2025-03-24T02:13:17.617-07:00\",\n        \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default\",\n        \"destRange\": \"172.17.16.0/24\",\n        \"priority\": 100,\n        \"nextHopIp\": \"169.254.111.2\",\n        \"routeType\": \"BGP\",\n        \"asPaths\": [\n          {\n            \"pathSegmentType\": \"AS_SEQUENCE\",\n            \"asLists\": [\n              64500\n            ]\n          }\n        ],\n        \"nextHopOrigin\": \"INCOMPLETE\"\n      },\n      {\n        \"kind\": \"compute#route\",\n        \"creationTimestamp\": \"2025-03-20T22:40:00.972-07:00\",\n        \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default\",\n        \"destRange\": \"192.168.114.0/24\",\n        \"priority\": 0,\n        \"nextHopIp\": \"169.254.46.184\",\n        \"routeType\": \"BGP\",\n        \"asPaths\": [\n          {\n            \"pathSegmentType\": \"AS_SEQUENCE\",\n            \"asLists\": [\n              1140\n            ]\n          }\n        ],\n        \"nextHopOrigin\": \"INCOMPLETE\"\n      }\n    ],\n    \"bestRoutesForRouter\": [\n      {\n        \"kind\": \"compute#route\",\n        \"creationTimestamp\": \"2025-03-13T00:45:02.483-07:00\",\n        \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default\",\n        \"destRange\": \"172.17.16.0/24\",\n        \"priority\": 100,\n        \"nextHopIp\": \"169.254.111.2\",\n        \"routeType\": \"BGP\",\n        \"asPaths\": [\n          {\n            \"pathSegmentType\": \"AS_SEQUENCE\",\n            \"asLists\": [\n              64500\n            ]\n          }\n        ],\n        \"routeStatus\": \"ACTIVE\",\n        \"nextHopOrigin\": \"INCOMPLETE\"\n      },\n      {\n        \"kind\": \"compute#route\",\n        \"creationTimestamp\": \"2025-03-20T09:46:06.079-07:00\",\n        \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default\",\n        \"destRange\": \"192.168.114.0/24\",\n        \"priority\": 0,\n        \"nextHopIp\": \"169.254.46.184\",\n        \"routeType\": \"BGP\",\n        \"asPaths\": [\n          {\n            \"pathSegmentType\": \"AS_SEQUENCE\",\n            \"asLists\": [\n              1140\n            ]\n          }\n        ],\n        \"routeStatus\": \"ACTIVE\",\n        \"nextHopOrigin\": \"INCOMPLETE\"\n      }\n    ],\n    \"bgpPeerStatus\": [\n      {\n        \"name\": \"dummy-vlan31\",\n        \"ipAddress\": \"169.254.3.1\",\n        \"peerIpAddress\": \"169.254.3.2\",\n        \"enableIpv6\": false,\n        \"status\": \"UP\",\n        \"state\": \"Established\",\n        \"uptime\": \"1 weeks, 4 days, 5 hours, 20 minutes, 52 seconds\",\n        \"uptimeSeconds\": \"969652\",\n        \"numLearnedRoutes\": 1,\n        \"advertisedRoutes\": [\n          {\n            \"kind\": \"compute#route\",\n            \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default\",\n            \"destRange\": \"10.216.0.0/20\",\n            \"priority\": 1397,\n            \"nextHopIp\": \"169.254.111.1\",\n            \"routeType\": \"BGP\",\n            \"nextHopOrigin\": \"INCOMPLETE\"\n          }\n        ],\n        \"md5AuthEnabled\": false,\n        \"enableIpv4\": true\n      },\n      {\n        \"name\": \"dummy-vlan41\",\n        \"ipAddress\": \"169.254.4.1\",\n        \"peerIpAddress\": \"169.254.4.2\",\n        \"enableIpv6\": false,\n        \"status\": \"UP\",\n        \"state\": \"Idle\",\n        \"uptime\": \"3 days, 20 hours, 19 minutes, 47 seconds\",\n        \"uptimeSeconds\": \"332387\",\n        \"numLearnedRoutes\": 1,\n        \"advertisedRoutes\": [\n          {\n            \"kind\": \"compute#route\",\n            \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default\",\n            \"destRange\": \"10.168.0.0/20\",\n            \"priority\": 373,\n            \"nextHopIp\": \"169.254.46.193\",\n            \"routeType\": \"BGP\",\n            \"nextHopOrigin\": \"INCOMPLETE\"\n          }\n        ],\n        \"md5AuthEnabled\": false,\n        \"enableIpv4\": true\n      }\n    ]\n  }\n}\n"
  },
  {
    "path": "test-data/interconnect1/json-dumps/compute-routers-routerStatus-dummy-router3.json",
    "content": "{\n  \"kind\": \"compute#routerStatusResponse\",\n  \"result\": {\n    \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default\",\n    \"bestRoutes\": [\n      {\n        \"kind\": \"compute#route\",\n        \"creationTimestamp\": \"2024-08-24T02:13:17.617-07:00\",\n        \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default\",\n        \"destRange\": \"172.17.16.0/24\",\n        \"priority\": 100,\n        \"nextHopIp\": \"169.254.111.2\",\n        \"routeType\": \"BGP\",\n        \"asPaths\": [\n          {\n            \"pathSegmentType\": \"AS_SEQUENCE\",\n            \"asLists\": [\n              64500\n            ]\n          }\n        ],\n        \"nextHopOrigin\": \"INCOMPLETE\"\n      },\n      {\n        \"kind\": \"compute#route\",\n        \"creationTimestamp\": \"2024-08-20T22:40:00.972-07:00\",\n        \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default\",\n        \"destRange\": \"192.168.114.0/24\",\n        \"priority\": 0,\n        \"nextHopIp\": \"169.254.46.184\",\n        \"routeType\": \"BGP\",\n        \"asPaths\": [\n          {\n            \"pathSegmentType\": \"AS_SEQUENCE\",\n            \"asLists\": [\n              1140\n            ]\n          }\n        ],\n        \"nextHopOrigin\": \"INCOMPLETE\"\n      }\n    ],\n    \"bestRoutesForRouter\": [\n      {\n        \"kind\": \"compute#route\",\n        \"creationTimestamp\": \"2024-08-13T00:45:02.483-07:00\",\n        \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default\",\n        \"destRange\": \"172.17.16.0/24\",\n        \"priority\": 100,\n        \"nextHopIp\": \"169.254.111.2\",\n        \"routeType\": \"BGP\",\n        \"asPaths\": [\n          {\n            \"pathSegmentType\": \"AS_SEQUENCE\",\n            \"asLists\": [\n              64200\n            ]\n          }\n        ],\n        \"routeStatus\": \"ACTIVE\",\n        \"nextHopOrigin\": \"INCOMPLETE\"\n      },\n      {\n        \"kind\": \"compute#route\",\n        \"creationTimestamp\": \"2024-08-20T09:46:06.079-07:00\",\n        \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default\",\n        \"destRange\": \"192.168.114.0/24\",\n        \"priority\": 0,\n        \"nextHopIp\": \"169.254.46.184\",\n        \"routeType\": \"BGP\",\n        \"asPaths\": [\n          {\n            \"pathSegmentType\": \"AS_SEQUENCE\",\n            \"asLists\": [\n              1240\n            ]\n          }\n        ],\n        \"routeStatus\": \"ACTIVE\",\n        \"nextHopOrigin\": \"INCOMPLETE\"\n      }\n    ],\n    \"bgpPeerStatus\": [\n      {\n        \"name\": \"dummy-vlan51\",\n        \"ipAddress\": \"169.254.5.1\",\n        \"peerIpAddress\": \"169.254.5.2\",\n        \"enableIpv6\": false,\n        \"status\": \"UP\",\n        \"state\": \"Idle\",\n        \"uptime\": \"1 weeks, 4 days, 5 hours, 20 minutes, 52 seconds\",\n        \"uptimeSeconds\": \"969652\",\n        \"numLearnedRoutes\": 1,\n        \"advertisedRoutes\": [\n          {\n            \"kind\": \"compute#route\",\n            \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default\",\n            \"destRange\": \"10.216.0.0/20\",\n            \"priority\": 1397,\n            \"nextHopIp\": \"169.254.111.1\",\n            \"routeType\": \"BGP\",\n            \"nextHopOrigin\": \"INCOMPLETE\"\n          }\n        ],\n        \"md5AuthEnabled\": false,\n        \"enableIpv4\": true\n      },\n      {\n        \"name\": \"dummy-vlan61\",\n        \"ipAddress\": \"169.254.6.1\",\n        \"peerIpAddress\": \"169.254.6.2\",\n        \"enableIpv6\": false,\n        \"status\": \"UP\",\n        \"state\": \"Established\",\n        \"uptime\": \"3 days, 20 hours, 19 minutes, 47 seconds\",\n        \"uptimeSeconds\": \"332387\",\n        \"numLearnedRoutes\": 1,\n        \"advertisedRoutes\": [\n          {\n            \"kind\": \"compute#route\",\n            \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default\",\n            \"destRange\": \"10.168.0.0/20\",\n            \"priority\": 373,\n            \"nextHopIp\": \"169.254.46.193\",\n            \"routeType\": \"BGP\",\n            \"nextHopOrigin\": \"INCOMPLETE\"\n          }\n        ],\n        \"md5AuthEnabled\": false,\n        \"enableIpv4\": true\n      }\n    ]\n  }\n}\n"
  },
  {
    "path": "test-data/interconnect1/json-dumps/compute-routers-us-central1.json",
    "content": "{\n  \"kind\": \"compute#routerList\",\n  \"id\": \"projects/gcpdiag-interconnect1-aaaa/regions/us-central1/routers\",\n  \"items\": [\n    {\n      \"kind\": \"compute#router\",\n      \"id\": \"1111119776642123456\",\n      \"creationTimestamp\": \"2019-05-13T09:37:58.875-07:00\",\n      \"name\": \"dummy-router3\",\n      \"description\": \"Interconnect Lab Juniper\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-central1\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default\",\n      \"bgp\": {\n        \"asn\": 64200,\n        \"advertiseMode\": \"DEFAULT\",\n        \"keepaliveInterval\": 20\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-central1/routers/dummy-router11\",\n      \"encryptedInterconnectRouter\": false\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-central1/routers\"\n}\n"
  },
  {
    "path": "test-data/interconnect1/json-dumps/compute-routers-us-east4.json",
    "content": "{\n  \"kind\": \"compute#routerList\",\n  \"id\": \"projects/gcpdiag-interconnect1-aaaa/regions/us-east4/routers\",\n  \"items\": [\n    {\n      \"kind\": \"compute#router\",\n      \"id\": \"6983339776642123456\",\n      \"creationTimestamp\": \"2019-05-13T09:37:58.875-07:00\",\n      \"name\": \"dummy-router1\",\n      \"description\": \"Interconnect Lab Juniper\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default\",\n      \"bgp\": {\n        \"asn\": 65000,\n        \"advertiseMode\": \"DEFAULT\",\n        \"keepaliveInterval\": 20\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4/routers/dummy-router1\",\n      \"encryptedInterconnectRouter\": false\n    },\n    {\n      \"kind\": \"compute#router\",\n      \"id\": \"978493875024123457\",\n      \"creationTimestamp\": \"2023-10-02T15:17:21.172-07:00\",\n      \"name\": \"dummy-router2\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default\",\n      \"bgp\": {\n        \"asn\": 65001,\n        \"advertiseMode\": \"DEFAULT\",\n        \"keepaliveInterval\": 20\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4/routers/dummy-router2\",\n      \"encryptedInterconnectRouter\": true\n    },\n    {\n      \"kind\": \"compute#router\",\n      \"id\": \"920222616522123458\",\n      \"creationTimestamp\": \"2022-12-20T11:14:09.645-08:00\",\n      \"name\": \"dummy-router3\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default\",\n      \"bgp\": {\n        \"asn\": 64512,\n        \"advertiseMode\": \"DEFAULT\",\n        \"keepaliveInterval\": 20\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4/routers/dummy-router3\",\n      \"encryptedInterconnectRouter\": false\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4/routers\"\n}\n"
  },
  {
    "path": "test-data/interconnect1/json-dumps/compute-routers-us-west2.json",
    "content": "{\n  \"kind\": \"compute#routerList\",\n  \"id\": \"projects/gcpdiag-interconnect1-aaaa/regions/us-west2/routers\",\n  \"items\": [\n    {\n      \"kind\": \"compute#router\",\n      \"id\": \"6666639776642123456\",\n      \"creationTimestamp\": \"2019-05-13T09:37:58.875-07:00\",\n      \"name\": \"dummy-router3\",\n      \"description\": \"Interconnect Lab Juniper\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default\",\n      \"bgp\": {\n        \"asn\": 65200,\n        \"advertiseMode\": \"DEFAULT\",\n        \"keepaliveInterval\": 20\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2/routers/dummy-router3\",\n      \"encryptedInterconnectRouter\": false\n    },\n    {\n      \"kind\": \"compute#router\",\n      \"id\": \"666666875024123457\",\n      \"creationTimestamp\": \"2023-10-02T15:17:21.172-07:00\",\n      \"name\": \"dummy-router4\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/networks/default\",\n      \"bgp\": {\n        \"asn\": 65201,\n        \"advertiseMode\": \"DEFAULT\",\n        \"keepaliveInterval\": 20\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2/routers/dummy-router4\",\n      \"encryptedInterconnectRouter\": true\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2/routers\"\n}\n"
  },
  {
    "path": "test-data/interconnect1/json-dumps/interconnect-attachments.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-interconnect1-aaaa/aggregated/interconnectAttachments\",\n  \"items\": {\n    \"regions/asia-east1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-east1\"\n          }\n        ],\n        \"message\": \"There are no results \"\n      }\n    },\n    \"regions/asia-east2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-east2\"\n          }\n        ],\n        \"message\": \"There are no results \"\n      }\n    },\n    \"regions/us-east1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-east1\"\n          }\n        ],\n        \"message\": \"There are no results \"\n      }\n    },\n    \"regions/us-east4\": {\n      \"interconnectAttachments\": [\n        {\n          \"adminEnabled\": true,\n          \"bandwidth\": \"BPS_10G\",\n          \"cloudRouterIpAddress\": \"169.254.1.1/29\",\n          \"creationTimestamp\": \"2021-01-01T00:00:00-00:00\",\n          \"customerRouterIpAddress\": \"169.254.1.2/29\",\n          \"dataplaneVersion\": 2,\n          \"description\": \"Dummy Description\",\n          \"encryption\": \"IPSEC\",\n          \"id\": \"0000000000000000000\",\n          \"interconnect\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/interconnects/dummy-interconnect1\",\n          \"ipsecInternalAddresses\": [\n            \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4/addresses/test-tange-1\"\n          ],\n          \"kind\": \"compute#interconnectAttachment\",\n          \"name\": \"dummy-attachment1\",\n          \"operationalStatus\": \"OS_ACTIVE\",\n          \"privateInterconnectInfo\": {\n            \"tag8021q\": 1101\n          },\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4\",\n          \"mtu\": 1460,\n          \"router\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4/routers/dummy-router1\",\n          \"satisfiesPzs\": false,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment1\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"state\": \"ACTIVE\",\n          \"type\": \"DEDICATED\",\n          \"vlanTag8021q\": 1101\n        },\n        {\n          \"adminEnabled\": true,\n          \"bandwidth\": \"BPS_10G\",\n          \"cloudRouterIpAddress\": \"169.254.2.1/29\",\n          \"creationTimestamp\": \"2021-01-01T00:00:00-00:00\",\n          \"customerRouterIpAddress\": \"169.254.2.2/29\",\n          \"dataplaneVersion\": 2,\n          \"description\": \"Dummy Description\",\n          \"encryption\": \"IPSEC\",\n          \"id\": \"0000000000000000000\",\n          \"interconnect\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/interconnects/dummy-interconnect1\",\n          \"ipsecInternalAddresses\": [\n            \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4/addresses/test-tange-1\"\n          ],\n          \"kind\": \"compute#interconnectAttachment\",\n          \"name\": \"dummy-attachment2\",\n          \"operationalStatus\": \"OS_ACTIVE\",\n          \"privateInterconnectInfo\": {\n            \"tag8021q\": 1103\n          },\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4\",\n          \"mtu\": 1460,\n          \"router\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4/routers/dummy-router1\",\n          \"satisfiesPzs\": false,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment2\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"state\": \"ACTIVE\",\n          \"type\": \"DEDICATED\",\n          \"vlanTag8021q\": 1103\n        },\n        {\n          \"adminEnabled\": true,\n          \"bandwidth\": \"BPS_10G\",\n          \"cloudRouterIpAddress\": \"169.254.3.1/29\",\n          \"creationTimestamp\": \"2021-01-01T00:00:00-00:00\",\n          \"customerRouterIpAddress\": \"169.254.3.2/29\",\n          \"dataplaneVersion\": 2,\n          \"description\": \"Dummy Description\",\n          \"encryption\": \"IPSEC\",\n          \"id\": \"0000000000000000000\",\n          \"interconnect\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/interconnects/dummy-interconnect2\",\n          \"ipsecInternalAddresses\": [\n            \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4/addresses/test-tange-1\"\n          ],\n          \"kind\": \"compute#interconnectAttachment\",\n          \"name\": \"dummy-attachment3\",\n          \"operationalStatus\": \"OS_ACTIVE\",\n          \"privateInterconnectInfo\": {\n            \"tag8021q\": 1105\n          },\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4\",\n          \"mtu\": 1460,\n          \"router\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4/routers/dummy-router2\",\n          \"satisfiesPzs\": false,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment3\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"state\": \"ACTIVE\",\n          \"type\": \"DEDICATED\",\n          \"vlanTag8021q\": 1105\n        },\n        {\n          \"adminEnabled\": true,\n          \"bandwidth\": \"BPS_10G\",\n          \"cloudRouterIpAddress\": \"169.254.4.1/29\",\n          \"creationTimestamp\": \"2021-01-01T00:00:00-00:00\",\n          \"customerRouterIpAddress\": \"169.254.4.2/29\",\n          \"dataplaneVersion\": 2,\n          \"description\": \"Dummy Description\",\n          \"encryption\": \"IPSEC\",\n          \"id\": \"0000000000000000000\",\n          \"interconnect\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/interconnects/dummy-interconnect2\",\n          \"ipsecInternalAddresses\": [\n            \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4/addresses/test-tange-1\"\n          ],\n          \"kind\": \"compute#interconnectAttachment\",\n          \"name\": \"dummy-attachment4\",\n          \"operationalStatus\": \"OS_ACTIVE\",\n          \"privateInterconnectInfo\": {\n            \"tag8021q\": 1106\n          },\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4\",\n          \"mtu\": 1460,\n          \"router\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4/routers/dummy-router2\",\n          \"satisfiesPzs\": false,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-east4/interconnectAttachments/dummy-attachment4\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"state\": \"ACTIVE\",\n          \"type\": \"DEDICATED\",\n          \"vlanTag8021q\": 1106\n        }\n      ]\n    },\n    \"regions/us-east5\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-east5\"\n          }\n        ],\n        \"message\": \"There are no results \"\n      }\n    },\n    \"regions/us-central1\": {\n      \"interconnectAttachments\": [\n        {\n          \"adminEnabled\": true,\n          \"bandwidth\": \"BPS_10G\",\n          \"cloudRouterIpAddress\": \"169.254.11.1/29\",\n          \"creationTimestamp\": \"2021-01-01T00:00:00-00:00\",\n          \"customerRouterIpAddress\": \"169.254.11.2/29\",\n          \"dataplaneVersion\": 2,\n          \"description\": \"Dummy Description\",\n          \"encryption\": \"IPSEC\",\n          \"id\": \"0000000000000000000\",\n          \"interconnect\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/interconnects/dummy-interconnect11\",\n          \"ipsecInternalAddresses\": [\n            \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-central1/addresses/test-tange-1\"\n          ],\n          \"kind\": \"compute#interconnectAttachment\",\n          \"name\": \"dummy-attachment11\",\n          \"operationalStatus\": \"OS_ACTIVE\",\n          \"privateInterconnectInfo\": {\n            \"tag8021q\": 1102\n          },\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-central1\",\n          \"mtu\": 1450,\n          \"router\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-central1/routers/dummy-router11\",\n          \"satisfiesPzs\": false,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-central1/interconnectAttachments/dummy-attachment11\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"state\": \"UNDER_MAINTENANCE\",\n          \"type\": \"DEDICATED\",\n          \"vlanTag8021q\": 1102\n        }\n      ]\n    },\n    \"regions/us-west2\": {\n      \"interconnectAttachments\": [\n        {\n          \"adminEnabled\": true,\n          \"bandwidth\": \"BPS_10G\",\n          \"cloudRouterIpAddress\": \"169.254.5.1/29\",\n          \"creationTimestamp\": \"2021-01-01T00:00:00-00:00\",\n          \"customerRouterIpAddress\": \"169.254.5.2/29\",\n          \"dataplaneVersion\": 2,\n          \"description\": \"Dummy Description\",\n          \"encryption\": \"IPSEC\",\n          \"id\": \"0000000000000000000\",\n          \"interconnect\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/interconnects/dummy-interconnect3\",\n          \"ipsecInternalAddresses\": [\n            \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2/addresses/test-tange-1\"\n          ],\n          \"kind\": \"compute#interconnectAttachment\",\n          \"name\": \"dummy-attachment5\",\n          \"operationalStatus\": \"OS_ACTIVE\",\n          \"privateInterconnectInfo\": {\n            \"tag8021q\": 1102\n          },\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2\",\n          \"mtu\": 1450,\n          \"router\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2/routers/dummy-router3\",\n          \"satisfiesPzs\": false,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment5\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"state\": \"UNDER_MAINTENANCE\",\n          \"type\": \"DEDICATED\",\n          \"vlanTag8021q\": 1102\n        },\n        {\n          \"adminEnabled\": true,\n          \"bandwidth\": \"BPS_10G\",\n          \"cloudRouterIpAddress\": \"169.254.6.1/29\",\n          \"creationTimestamp\": \"2021-01-01T00:00:00-00:00\",\n          \"customerRouterIpAddress\": \"169.254.6.2/29\",\n          \"dataplaneVersion\": 2,\n          \"description\": \"Dummy Description\",\n          \"encryption\": \"IPSEC\",\n          \"id\": \"0000000000000000000\",\n          \"interconnect\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/interconnects/dummy-interconnect4\",\n          \"ipsecInternalAddresses\": [\n            \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2/addresses/test-tange-1\"\n          ],\n          \"kind\": \"compute#interconnectAttachment\",\n          \"name\": \"dummy-attachment6\",\n          \"operationalStatus\": \"OS_ACTIVE\",\n          \"privateInterconnectInfo\": {\n            \"tag8021q\": 1104\n          },\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2\",\n          \"router\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2/routers/dummy-router3\",\n          \"satisfiesPzs\": false,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment6\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"state\": \"ACTIVE\",\n          \"type\": \"DEDICATED\",\n          \"vlanTag8021q\": 1104\n        },\n        {\n          \"adminEnabled\": true,\n          \"bandwidth\": \"BPS_10G\",\n          \"cloudRouterIpAddress\": \"169.254.7.1/29\",\n          \"creationTimestamp\": \"2021-01-01T00:00:00-00:00\",\n          \"customerRouterIpAddress\": \"169.254.7.2/29\",\n          \"description\": \"Dummy Description\",\n          \"encryption\": \"IPSEC\",\n          \"id\": \"0000000000000000000\",\n          \"interconnect\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/interconnects/dummy-interconnect4\",\n          \"ipsecInternalAddresses\": [\n            \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2/addresses/test-tange-1\"\n          ],\n          \"kind\": \"compute#interconnectAttachment\",\n          \"name\": \"dummy-attachment7\",\n          \"operationalStatus\": \"OS_ACTIVE\",\n          \"privateInterconnectInfo\": {\n            \"tag8021q\": 1104\n          },\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2\",\n          \"router\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2/routers/dummy-router3\",\n          \"satisfiesPzs\": false,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment7\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"state\": \"ACTIVE\",\n          \"type\": \"DEDICATED\",\n          \"vlanTag8021q\": 1104\n        },\n        {\n          \"adminEnabled\": true,\n          \"bandwidth\": \"BPS_10G\",\n          \"cloudRouterIpAddress\": \"169.254.8.1/29\",\n          \"creationTimestamp\": \"2021-01-01T00:00:00-00:00\",\n          \"customerRouterIpAddress\": \"169.254.8.2/29\",\n          \"dataplaneVersion\": 2,\n          \"description\": \"Dummy Description\",\n          \"encryption\": \"IPSEC\",\n          \"id\": \"0000000000000000000\",\n          \"interconnect\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/interconnects/dummy-interconnect4\",\n          \"ipsecInternalAddresses\": [\n            \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2/addresses/test-tange-1\"\n          ],\n          \"kind\": \"compute#interconnectAttachment\",\n          \"name\": \"dummy-attachment8\",\n          \"operationalStatus\": \"OS_ACTIVE\",\n          \"privateInterconnectInfo\": {\n            \"tag8021q\": 1104\n          },\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2\",\n          \"router\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2/routers/dummy-router3\",\n          \"satisfiesPzs\": false,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment8\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"state\": \"ACTIVE\",\n          \"type\": \"DEDICATED\",\n          \"vlanTag8021q\": 1104\n        },\n        {\n          \"adminEnabled\": true,\n          \"bandwidth\": \"BPS_10G\",\n          \"cloudRouterIpAddress\": \"169.254.9.1/29\",\n          \"creationTimestamp\": \"2021-01-01T00:00:00-00:00\",\n          \"customerRouterIpAddress\": \"169.254.9.2/29\",\n          \"dataplaneVersion\": 2,\n          \"description\": \"Dummy Description\",\n          \"encryption\": \"IPSEC\",\n          \"id\": \"0000000000000000000\",\n          \"interconnect\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/interconnects/dummy-interconnect4\",\n          \"ipsecInternalAddresses\": [\n            \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2/addresses/test-tange-1\"\n          ],\n          \"kind\": \"compute#interconnectAttachment\",\n          \"name\": \"dummy-attachment9\",\n          \"operationalStatus\": \"OS_ACTIVE\",\n          \"privateInterconnectInfo\": {\n            \"tag8021q\": 1104\n          },\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2\",\n          \"router\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2/routers/dummy-router3\",\n          \"satisfiesPzs\": false,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment9\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"state\": \"ACTIVE\",\n          \"type\": \"DEDICATED\",\n          \"vlanTag8021q\": 1104\n        },\n        {\n          \"adminEnabled\": true,\n          \"bandwidth\": \"BPS_10G\",\n          \"cloudRouterIpAddress\": \"169.254.10.1/29\",\n          \"creationTimestamp\": \"2021-01-01T00:00:00-00:00\",\n          \"customerRouterIpAddress\": \"169.254.10.2/29\",\n          \"dataplaneVersion\": 2,\n          \"description\": \"Dummy Description\",\n          \"encryption\": \"IPSEC\",\n          \"id\": \"0000000000000000000\",\n          \"interconnect\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/global/interconnects/dummy-interconnect4\",\n          \"ipsecInternalAddresses\": [\n            \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2/addresses/test-tange-1\"\n          ],\n          \"kind\": \"compute#interconnectAttachment\",\n          \"name\": \"dummy-attachment10\",\n          \"operationalStatus\": \"OS_ACTIVE\",\n          \"privateInterconnectInfo\": {\n            \"tag8021q\": 1104\n          },\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2\",\n          \"router\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2/routers/dummy-router3\",\n          \"satisfiesPzs\": false,\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/regions/us-west2/interconnectAttachments/dummy-attachment10\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"state\": \"DEFUNCT\",\n          \"type\": \"DEDICATED\",\n          \"vlanTag8021q\": 1104\n        }\n      ]\n    }\n  },\n  \"kind\": \"compute#interconnectAttachmentAggregatedList\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-interconnect1-aaaa/aggregated/interconnectAttachments\"\n}\n"
  },
  {
    "path": "test-data/interconnect1/json-dumps/logging-entries-1.json",
    "content": "{\n  \"entries\": [\n    {\n      \"textPayload\": \"BGP Event: BGP peering with 169.254.1.2 went down with reason: BGP_PROCESS_STOPPED\",\n      \"insertId\": \"13v7syqfr0affx\",\n      \"resource\": {\n        \"type\": \"gce_router\",\n        \"labels\": {\n          \"region\": \"us-east4\",\n          \"router_id\": \"6988249776642123456\",\n          \"project_id\": \"gcpdiag-interconnect1-aaaa\"\n        }\n      },\n      \"timestamp\": \"2025-03-20T16:45:55.959348287Z\",\n      \"severity\": \"NOTICE\",\n      \"logName\": \"projects/gcpdiag-interconnect1-aaaa/logs/compute.googleapis.com%2Frouter_events\",\n      \"receiveTimestamp\": \"2025-03-20T16:45:55.967883881Z\"\n    },\n    {\n      \"textPayload\": \"Maintenance of router task: BGP sessions will restart. Routes are preserved for the duration of the configured timers. These are normal events, and no data loss is expected to occur.\",\n      \"insertId\": \"5kryxkf281spq\",\n      \"resource\": {\n        \"type\": \"gce_router\",\n        \"labels\": {\n          \"region\": \"us-east4\",\n          \"project_id\": \"gcpdiag-interconnect1-aaaa\",\n          \"router_id\": \"6988249776642123456\"\n        }\n      },\n      \"timestamp\": \"2025-03-20T16:45:56.035612313Z\",\n      \"severity\": \"INFO\",\n      \"logName\": \"projects/gcpdiag-interconnect1-aaaa/logs/compute.googleapis.com%2Frouter_events\",\n      \"receiveTimestamp\": \"2025-03-20T16:46:56.287489651Z\"\n    },\n    {\n      \"textPayload\": \"BGP Event: BGP peering with 169.254.1.2 came up 0 seconds ago, hold time is 60 seconds, graceful restart timer is 120 seconds\",\n      \"insertId\": \"e688gpfsdnayp\",\n      \"resource\": {\n        \"type\": \"gce_router\",\n        \"labels\": {\n          \"project_id\": \"gcpdiag-interconnect1-aaaa\",\n          \"region\": \"us-east4\",\n          \"router_id\": \"6988249776642123456\"\n        }\n      },\n      \"timestamp\": \"2025-03-20T16:45:58.035612313Z\",\n      \"severity\": \"NOTICE\",\n      \"logName\": \"projects/gcpdiag-interconnect1-aaaa/logs/compute.googleapis.com%2Frouter_events\",\n      \"receiveTimestamp\": \"2025-03-20T16:45:58.287489651Z\"\n    },\n    {\n      \"textPayload\": \"BGP Event: BGP peering with 169.254.2.2 went down with reason: BGP_PROCESS_STOPPED\",\n      \"insertId\": \"lxwe2jf1e2pij\",\n      \"resource\": {\n        \"type\": \"gce_router\",\n        \"labels\": {\n          \"region\": \"us-east4\",\n          \"project_id\": \"gcpdiag-interconnect1-aaaa\",\n          \"router_id\": \"6988249776642123456\"\n        }\n      },\n      \"timestamp\": \"2025-03-27T23:32:19.397757310Z\",\n      \"severity\": \"NOTICE\",\n      \"logName\": \"projects/gcpdiag-interconnect1-aaaa/logs/compute.googleapis.com%2Frouter_events\",\n      \"receiveTimestamp\": \"2025-03-27T23:32:19.414761410Z\"\n    },\n    {\n      \"textPayload\": \"BGP Event: BGP peering with 169.254.2.2 came up 0 seconds ago, hold time is 60 seconds, graceful restart timer is 60 seconds\",\n      \"insertId\": \"h977eqf1i9jpn\",\n      \"resource\": {\n        \"type\": \"gce_router\",\n        \"labels\": {\n          \"router_id\": \"6988249776642123456\",\n          \"project_id\": \"gcpdiag-interconnect1-aaaa\",\n          \"region\": \"us-east4\"\n        }\n      },\n      \"timestamp\": \"2025-03-27T23:34:39.923120483Z\",\n      \"severity\": \"NOTICE\",\n      \"logName\": \"projects/gcpdiag-interconnect1-aaaa/logs/compute.googleapis.com%2Frouter_events\",\n      \"receiveTimestamp\": \"2025-03-27T23:34:39.928464648Z\"\n    },\n    {\n      \"textPayload\": \"BGP Event: BGP peering with 169.254.6.2 went down with reason: BGP_PROCESS_STOPPED\",\n      \"insertId\": \"leee2jf1e2pij\",\n      \"resource\": {\n        \"type\": \"gce_router\",\n        \"labels\": {\n          \"region\": \"us-west2\",\n          \"project_id\": \"gcpdiag-interconnect1-aaaa\",\n          \"router_id\": \"666666875024123457\"\n        }\n      },\n      \"timestamp\": \"2025-03-27T23:32:19.397757310Z\",\n      \"severity\": \"NOTICE\",\n      \"logName\": \"projects/gcpdiag-interconnect1-aaaa/logs/compute.googleapis.com%2Frouter_events\",\n      \"receiveTimestamp\": \"2025-03-27T23:32:19.414761410Z\"\n    },\n    {\n      \"textPayload\": \"BGP Event: BGP peering with 169.254.6.2 came up 0 seconds ago, hold time is 60 seconds, graceful restart timer is 60 seconds\",\n      \"insertId\": \"heeeeqf1i9jpn\",\n      \"resource\": {\n        \"type\": \"gce_router\",\n        \"labels\": {\n          \"router_id\": \"666666875024123457\",\n          \"project_id\": \"gcpdiag-interconnect1-aaaa\",\n          \"region\": \"us-west2\"\n        }\n      },\n      \"timestamp\": \"2025-03-27T23:33:39.923120483Z\",\n      \"severity\": \"NOTICE\",\n      \"logName\": \"projects/gcpdiag-interconnect1-aaaa/logs/compute.googleapis.com%2Frouter_events\",\n      \"receiveTimestamp\": \"2025-03-27T23:33:39.928464648Z\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/interconnect1/json-dumps/project.json",
    "content": "{\n  \"name\": \"projects/123400010\",\n  \"parent\": \"folders/1234567\",\n  \"projectId\": \"gcpdiag-interconnect1-aaaa\",\n  \"state\": \"ACTIVE\",\n  \"displayName\": \"gcpdiag test - interconnect1\",\n  \"createTime\": \"2022-08-25T14:21:48.527Z\",\n  \"updateTime\": \"2022-08-25T14:21:50.098Z\",\n  \"etag\": \"TaJ5DhDFtwUvBRUHyHHKpQ==\",\n  \"labels\": {\n    \"gcpdiag\": \"test\"\n  }\n}\n"
  },
  {
    "path": "test-data/interconnect1/project.tf",
    "content": "/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nresource \"random_string\" \"project_id_suffix\" {\n  length  = 8\n  number  = true\n  lower   = true\n  upper   = false\n  special = false\n}\n\nresource \"google_project\" \"project\" {\n  name            = \"gcpdiag test - interconnect1\"\n  project_id      = \"gcpdiag-interconnect1-${random_string.project_id_suffix.id}\"\n  org_id          = var.folder_id == \"\" ? var.org_id : null\n  folder_id       = var.folder_id != \"\" ? var.folder_id : null\n  billing_account = var.billing_account_id\n  labels = {\n    gcpdiag : \"test\"\n  }\n}\n\nresource \"google_project_service\" \"compute\" {\n  project = google_project.project.project_id\n  service = \"compute.googleapis.com\"\n}\n\noutput \"project_id\" {\n  value = google_project.project.project_id\n}\n\noutput \"project_id_suffix\" {\n  value = random_string.project_id_suffix.id\n}\n\noutput \"project_nr\" {\n  value = google_project.project.number\n}\n\noutput \"org_id\" {\n  value = var.org_id\n}\n"
  },
  {
    "path": "test-data/interconnect1/variables.tf",
    "content": "variable \"billing_account_id\" {}\n\nvariable \"org_id\" {}\nvariable \"folder_id\" { default = \"\" }\n"
  },
  {
    "path": "test-data/lb1/Makefile",
    "content": "PROJECT_ID  := $(shell terraform output -raw project_id)\nPROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix)\nPROJECT_NR  := $(shell terraform output -raw project_nr)\nORG_ID      := $(shell terraform output -raw org_id)\nCURL         = ../../bin/curl-wrap.sh\nJSON_CLEANER = ../../bin/json-cleaner\n\nFAKE_PROJECT_ID_SUFFIX = aaaa\nFAKE_PROJECT_NR = 12340009\nFAKE_ORG_ID = 11112222\nSED_SUBST_FAKE = sed -e \"s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/\" \\\n\t\t\t\t-e \"s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/\" \\\n\t\t\t\t-e \"s/$(ORG_ID)/$(FAKE_ORG_ID)/\" \\\n\nall:\t\\\n\tjson-dumps/project.json \\\n\tjson-dumps/services.json \\\n\tjson-dumps/compute-network-default.json \\\n\tjson-dumps/compute-project.json \\\n\tjson-dumps/compute-regions.json \\\n\tjson-dumps/compute-backendServices.json \\\n\tjson-dumps/compute-aggregated-backendServices.json \\\n\tjson-dumps/compute-aggregated-forwardingRules.json \\\n\tjson-dumps/healthChecks.json \\\n\ninclude ../Makefile.inc\n\n\njson-dumps/healthChecks.json:\n\t$(CURL) -fsS \\\n\t        'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/global/healthChecks/' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n"
  },
  {
    "path": "test-data/lb1/http-lb-mig.tf",
    "content": "/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n# External HTTP load balancer with an CDN-enabled managed instance group backend\n\n# [START cloudloadbalancing_ext_http_gce_instance_template]\nresource \"google_compute_instance_template\" \"default\" {\n  depends_on = [google_project_service.compute]\n  name       = \"lb-backend-template\"\n  project    = google_project.project.project_id\n  disk {\n    auto_delete  = true\n    boot         = true\n    device_name  = \"persistent-disk-0\"\n    mode         = \"READ_WRITE\"\n    source_image = \"projects/debian-cloud/global/images/family/debian-11\"\n    type         = \"PERSISTENT\"\n  }\n  labels = {\n    managed-by-cnrm = \"true\"\n  }\n  machine_type = \"n1-standard-1\"\n  metadata = {\n    startup-script = \"#! /bin/bash\\n     sudo apt-get update\\n     sudo apt-get install apache2 -y\\n     sudo a2ensite default-ssl\\n     sudo a2enmod ssl\\n     sudo vm_hostname=\\\"$(curl -H \\\"Metadata-Flavor:Google\\\" \\\\\\n   http://169.254.169.254/computeMetadata/v1/instance/name)\\\"\\n   sudo echo \\\"Page served from: $vm_hostname\\\" | \\\\\\n   tee /var/www/html/index.html\\n   sudo systemctl restart apache2\"\n  }\n  network_interface {\n    access_config {\n      network_tier = \"PREMIUM\"\n    }\n    network = \"global/networks/default\"\n    #subnetwork = \"regions/us-east1/subnetworks/default\"\n  }\n  region = \"us-east1\"\n  service_account {\n    email  = \"default\"\n    scopes = [\"https://www.googleapis.com/auth/devstorage.read_only\", \"https://www.googleapis.com/auth/logging.write\", \"https://www.googleapis.com/auth/monitoring.write\", \"https://www.googleapis.com/auth/pubsub\", \"https://www.googleapis.com/auth/service.management.readonly\", \"https://www.googleapis.com/auth/servicecontrol\", \"https://www.googleapis.com/auth/trace.append\"]\n  }\n  tags = [\"allow-health-check\"]\n}\n# [END cloudloadbalancing_ext_http_gce_instance_template]\n\n# [START cloudloadbalancing_ext_http_gce_instance_mig]\nresource \"google_compute_instance_group_manager\" \"default\" {\n  depends_on = [google_project_service.compute]\n  project    = google_project.project.project_id\n  name       = \"lb-backend-example\"\n  zone       = \"us-east1-b\"\n  named_port {\n    name = \"http\"\n    port = 80\n  }\n  version {\n    instance_template = google_compute_instance_template.default.id\n    name              = \"primary\"\n  }\n  base_instance_name = \"vm\"\n  target_size        = 2\n}\n# [END cloudloadbalancing_ext_http_gce_instance_mig]\n\n\n# [START cloudloadbalancing_ext_http_gce_instance_firewall_rule]\nresource \"google_compute_firewall\" \"default\" {\n  project       = google_project.project.project_id\n  depends_on    = [google_project_service.compute]\n  name          = \"fw-allow-health-check\"\n  direction     = \"INGRESS\"\n  network       = \"global/networks/default\"\n  priority      = 1000\n  source_ranges = [\"130.211.0.0/22\", \"35.191.0.0/16\"]\n  target_tags   = [\"allow-health-check\"]\n  allow {\n    ports    = [\"80\"]\n    protocol = \"tcp\"\n  }\n}\n# [END cloudloadbalancing_ext_http_gce_instance_firewall_rule]\n\n# [START cloudloadbalancing_ext_http_gce_instance_ip_address]\nresource \"google_compute_global_address\" \"default\" {\n  depends_on = [google_project_service.compute]\n  project    = google_project.project.project_id\n  name       = \"lb-ipv4-1\"\n  ip_version = \"IPV4\"\n}\n# [END cloudloadbalancing_ext_http_gce_instance_ip_address]\n\n# [START cloudloadbalancing_ext_http_gce_instance_health_check]\nresource \"google_compute_health_check\" \"default\" {\n  depends_on         = [google_project_service.compute]\n  name               = \"http-basic-check\"\n  project            = google_project.project.project_id\n  check_interval_sec = 5\n  healthy_threshold  = 2\n\n  http_health_check {\n    port               = 80\n    port_specification = \"USE_FIXED_PORT\"\n    proxy_header       = \"NONE\"\n    request_path       = \"/\"\n  }\n\n  log_config {\n    enable = true\n  }\n\n  timeout_sec         = 5\n  unhealthy_threshold = 2\n}\n# [END cloudloadbalancing_ext_http_gce_instance_health_check]\n\n# [START cloudloadbalancing_ext_http_gce_instance_health_check]\nresource \"google_compute_health_check\" \"http-basic-check-2\" {\n  depends_on         = [google_project_service.compute]\n  name               = \"http-basic-check-2\"\n  project            = google_project.project.project_id\n  check_interval_sec = 5\n  healthy_threshold  = 2\n\n  http_health_check {\n    port               = 80\n    port_specification = \"USE_FIXED_PORT\"\n    proxy_header       = \"NONE\"\n    request_path       = \"/\"\n  }\n\n  timeout_sec         = 5\n  unhealthy_threshold = 2\n}\n# [END cloudloadbalancing_ext_http_gce_instance_health_check]\n\n# [START cloudloadbalancing_ext_tcp_gce_instance_health_check]\nresource \"google_compute_health_check\" \"tcp-basic-check-1\" {\n  depends_on = [google_project_service.compute]\n  name       = \"tcp-basic-check-1\"\n  project    = google_project.project.project_id\n\n  check_interval_sec = 5\n  timeout_sec        = 5\n\n  tcp_health_check {\n    port = 80\n  }\n\n  log_config {\n    enable = true\n  }\n\n}\n# [END cloudloadbalancing_ext_tcp_gce_instance_health_check]\n\n# [START cloudloadbalancing_ext_http_gce_instance_backend_service]\nresource \"google_compute_backend_service\" \"default\" {\n  name                            = \"web-backend-service\"\n  project                         = google_project.project.project_id\n  connection_draining_timeout_sec = 0\n  health_checks                   = [google_compute_health_check.default.id]\n  load_balancing_scheme           = \"EXTERNAL\"\n  port_name                       = \"http\"\n  protocol                        = \"HTTP\"\n  session_affinity                = \"NONE\"\n  timeout_sec                     = 30\n  backend {\n    group           = google_compute_instance_group_manager.default.instance_group\n    balancing_mode  = \"UTILIZATION\"\n    capacity_scaler = 1.0\n  }\n}\n# [END cloudloadbalancing_ext_http_gce_instance_backend_service]\n\n# [START cloudloadbalancing_ext_http_gce_instance_url_map]\nresource \"google_compute_url_map\" \"default\" {\n  project         = google_project.project.project_id\n  name            = \"web-map-http\"\n  default_service = google_compute_backend_service.default.id\n}\n# [END cloudloadbalancing_ext_http_gce_instance_url_map]\n\n# [START cloudloadbalancing_ext_http_gce_instance_target_http_proxy]\nresource \"google_compute_target_http_proxy\" \"default\" {\n  project = google_project.project.project_id\n  name    = \"http-lb-proxy\"\n  url_map = google_compute_url_map.default.id\n}\n# [END cloudloadbalancing_ext_http_gce_instance_target_http_proxy]\n\n# [START cloudloadbalancing_ext_http_gce_instance_forwarding_rule]\nresource \"google_compute_global_forwarding_rule\" \"default\" {\n  project               = google_project.project.project_id\n  name                  = \"http-content-rule\"\n  ip_protocol           = \"TCP\"\n  load_balancing_scheme = \"EXTERNAL\"\n  port_range            = \"80-80\"\n  target                = google_compute_target_http_proxy.default.id\n  ip_address            = google_compute_global_address.default.id\n}\n# [END cloudloadbalancing_ext_http_gce_instance_forwarding_rule]\n"
  },
  {
    "path": "test-data/lb1/json-dumps/compute-aggregated-backendServices.json",
    "content": "{\n  \"kind\": \"compute#backendServiceAggregatedList\",\n  \"id\": \"projects/gcpdiag-lb1-aaaa/aggregated/backendServices\",\n  \"items\": {\n    \"global\": {\n      \"backendServices\": [\n        {\n          \"kind\": \"compute#backendService\",\n          \"id\": \"3538406228716304628\",\n          \"creationTimestamp\": \"2022-08-25T07:24:27.356-07:00\",\n          \"name\": \"web-backend-service\",\n          \"description\": \"\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/global/backendServices/web-backend-service\",\n          \"backends\": [\n            {\n              \"group\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-east1-b/instanceGroups/lb-backend-example\",\n              \"balancingMode\": \"UTILIZATION\",\n              \"capacityScaler\": 1\n            }\n          ],\n          \"healthChecks\": [\n            \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/global/healthChecks/http-basic-check\"\n          ],\n          \"timeoutSec\": 30,\n          \"port\": 80,\n          \"protocol\": \"HTTP\",\n          \"fingerprint\": \"uf9A59CplJc=\",\n          \"portName\": \"http\",\n          \"enableCDN\": false,\n          \"sessionAffinity\": \"NONE\",\n          \"affinityCookieTtlSec\": 0,\n          \"loadBalancingScheme\": \"EXTERNAL\",\n          \"connectionDraining\": {\n            \"drainingTimeoutSec\": 0\n          },\n          \"iap\": {\n            \"enabled\": false,\n            \"oauth2ClientId\": \"\",\n            \"oauth2ClientSecretSha256\": \"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\"\n          }\n        }\n      ]\n    }\n  },\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/aggregated/backendServices\"\n}\n"
  },
  {
    "path": "test-data/lb1/json-dumps/compute-aggregated-forwardingRules.json",
    "content": "{\n  \"kind\": \"compute#forwardingRuleAggregatedList\",\n  \"id\": \"projects/gcpdiag-lb1-aaaa/aggregated/forwardingRules\",\n  \"items\": {\n    \"regions/us-west1\": {\n      \"forwardingRules\": [\n        {\n          \"kind\": \"compute#forwardingRule\",\n          \"id\": \"4245322038451922234\",\n          \"creationTimestamp\": \"2024-02-02T22:21:59.365-08:00\",\n          \"name\": \"forwardingRule1\",\n          \"description\": \"\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-west1\",\n          \"IPAddress\": \"9.1.2.7\",\n          \"IPProtocol\": \"TCP\",\n          \"portRange\": \"80-80\",\n          \"target\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-west1/targetHttpProxies/forwardingRule1-target-proxy\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-west1/forwardingRules/forwardingRule1\",\n          \"loadBalancingScheme\": \"INTERNAL_MANAGED\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-west1/subnetworks/backend-subnet\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/global/networks/lb-network\",\n          \"networkTier\": \"PREMIUM\",\n          \"labelFingerprint\": \"42Wmu7y8rSM=\",\n          \"fingerprint\": \"zUL2wdvikcQ=\",\n          \"allowGlobalAccess\": true\n        }\n      ]\n    }\n  },\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/aggregated/forwardingRules\"\n}\n"
  },
  {
    "path": "test-data/lb1/json-dumps/compute-backendServices.json",
    "content": "{\n  \"kind\": \"compute#backendServiceList\",\n  \"id\": \"projects/gcpdiag-lb1-aaaa/global/backendServices/\",\n  \"items\": [\n    {\n      \"kind\": \"compute#backendService\",\n      \"id\": \"3538406228716304628\",\n      \"creationTimestamp\": \"2022-08-25T07:24:27.356-07:00\",\n      \"name\": \"web-backend-service\",\n      \"description\": \"\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/global/backendServices/web-backend-service\",\n      \"backends\": [\n        {\n          \"group\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-east1-b/instanceGroups/lb-backend-example\",\n          \"balancingMode\": \"UTILIZATION\",\n          \"capacityScaler\": 1\n        }\n      ],\n      \"healthChecks\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/global/healthChecks/http-basic-check\"\n      ],\n      \"timeoutSec\": 30,\n      \"port\": 80,\n      \"protocol\": \"HTTP\",\n      \"fingerprint\": \"uf9A59CplJc=\",\n      \"portName\": \"http\",\n      \"enableCDN\": false,\n      \"sessionAffinity\": \"NONE\",\n      \"affinityCookieTtlSec\": 0,\n      \"loadBalancingScheme\": \"EXTERNAL\",\n      \"connectionDraining\": {\n        \"drainingTimeoutSec\": 0\n      },\n      \"iap\": {\n        \"enabled\": false,\n        \"oauth2ClientId\": \"\",\n        \"oauth2ClientSecretSha256\": \"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\"\n      }\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/global/backendServices/\"\n}\n"
  },
  {
    "path": "test-data/lb1/json-dumps/compute-network-default.json",
    "content": "{\n  \"kind\": \"compute#network\",\n  \"id\": \"8591756786596985669\",\n  \"creationTimestamp\": \"2022-08-25T07:22:34.810-07:00\",\n  \"name\": \"default\",\n  \"description\": \"Default network for the project\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/global/networks/default\",\n  \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/global/networks/8591756786596985669\",\n  \"autoCreateSubnetworks\": true,\n  \"subnetworks\": [\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-west6/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-east4/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-central2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-west4/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-east5/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-east1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-southeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-west4/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/northamerica-northeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-west2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/southamerica-east1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-southwest1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-east1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-west9/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-south2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-northeast3/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/australia-southeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-west2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-west3/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-central1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-south1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-west3/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-northeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-northeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/southamerica-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/australia-southeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-southeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/northamerica-northeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-west8/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-south1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-north1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-east2/subnetworks/default\"\n  ],\n  \"routingConfig\": {\n    \"routingMode\": \"REGIONAL\"\n  },\n  \"networkFirewallPolicyEnforcementOrder\": \"AFTER_CLASSIC_FIREWALL\"\n}\n"
  },
  {
    "path": "test-data/lb1/json-dumps/compute-project.json",
    "content": "{\n  \"commonInstanceMetadata\": {\n    \"fingerprint\": \"9um0yrlKtsk=\",\n    \"kind\": \"compute#metadata\"\n  },\n  \"creationTimestamp\": \"2022-08-25T07:22:28.064-07:00\",\n  \"defaultNetworkTier\": \"PREMIUM\",\n  \"defaultServiceAccount\": \"12340009-compute@developer.gserviceaccount.com\",\n  \"id\": \"1866944745413688140\",\n  \"kind\": \"compute#project\",\n  \"name\": \"gcpdiag-lb1-aaaa\",\n  \"quotas\": [\n    {\n      \"limit\": 10000,\n      \"metric\": \"SNAPSHOTS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 30,\n      \"metric\": \"NETWORKS\",\n      \"usage\": 1\n    },\n    {\n      \"limit\": 500,\n      \"metric\": \"FIREWALLS\",\n      \"usage\": 5\n    },\n    {\n      \"limit\": 5000,\n      \"metric\": \"IMAGES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 175,\n      \"metric\": \"STATIC_ADDRESSES\",\n      \"usage\": 1\n    },\n    {\n      \"limit\": 300,\n      \"metric\": \"ROUTES\",\n      \"usage\": 1\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"FORWARDING_RULES\",\n      \"usage\": 1\n    },\n    {\n      \"limit\": 500,\n      \"metric\": \"TARGET_POOLS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 500,\n      \"metric\": \"HEALTH_CHECKS\",\n      \"usage\": 1\n    },\n    {\n      \"limit\": 575,\n      \"metric\": \"IN_USE_ADDRESSES\",\n      \"usage\": 1\n    },\n    {\n      \"limit\": 500,\n      \"metric\": \"TARGET_INSTANCES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_HTTP_PROXIES\",\n      \"usage\": 1\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"URL_MAPS\",\n      \"usage\": 1\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"BACKEND_SERVICES\",\n      \"usage\": 1\n    },\n    {\n      \"limit\": 1000,\n      \"metric\": \"INSTANCE_TEMPLATES\",\n      \"usage\": 1\n    },\n    {\n      \"limit\": 50,\n      \"metric\": \"TARGET_VPN_GATEWAYS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"VPN_TUNNELS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 30,\n      \"metric\": \"BACKEND_BUCKETS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 20,\n      \"metric\": \"ROUTERS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_SSL_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_HTTPS_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"SSL_CERTIFICATES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 275,\n      \"metric\": \"SUBNETWORKS\",\n      \"usage\": 34\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_TCP_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 10,\n      \"metric\": \"SECURITY_POLICIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 200,\n      \"metric\": \"SECURITY_POLICY_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1000,\n      \"metric\": \"XPN_SERVICE_PROJECTS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"PACKET_MIRRORINGS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1000,\n      \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 6,\n      \"metric\": \"INTERCONNECTS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 5000,\n      \"metric\": \"GLOBAL_INTERNAL_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 50,\n      \"metric\": \"VPN_GATEWAYS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 5000,\n      \"metric\": \"MACHINE_IMAGES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 20,\n      \"metric\": \"SECURITY_POLICY_CEVAL_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 50,\n      \"metric\": \"EXTERNAL_VPN_GATEWAYS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1,\n      \"metric\": \"PUBLIC_ADVERTISED_PREFIXES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 10,\n      \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1024,\n      \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 60,\n      \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"INTERNAL_TRAFFIC_DIRECTOR_FORWARDING_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"GLOBAL_EXTERNAL_MANAGED_FORWARDING_RULES\",\n      \"usage\": 0\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa\",\n  \"xpnProjectStatus\": \"UNSPECIFIED_XPN_PROJECT_STATUS\"\n}\n"
  },
  {
    "path": "test-data/lb1/json-dumps/compute-regions.json",
    "content": "{\n  \"kind\": \"compute#regionList\",\n  \"id\": \"projects/gcpdiag-lb1-aaaa/regions\",\n  \"items\": [\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1220\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east1\",\n      \"description\": \"asia-east1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-east1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-east1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-east1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 48,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-east1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1370\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east2\",\n      \"description\": \"asia-east2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-east2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-east2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-east2-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 48,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-east2\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1250\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast1\",\n      \"description\": \"asia-northeast1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-northeast1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-northeast1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-northeast1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 48,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-northeast1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1390\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast2\",\n      \"description\": \"asia-northeast2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-northeast2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-northeast2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-northeast2-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 48,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-northeast2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1410\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast3\",\n      \"description\": \"asia-northeast3\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-northeast3-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-northeast3-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-northeast3-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 48,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-northeast3\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1320\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south1\",\n      \"description\": \"asia-south1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-south1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-south1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-south1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-south1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1470\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south2\",\n      \"description\": \"asia-south2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-south2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-south2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-south2-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-south2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1260\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast1\",\n      \"description\": \"asia-southeast1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-southeast1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-southeast1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-southeast1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 48,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-southeast1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1440\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast2\",\n      \"description\": \"asia-southeast2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-southeast2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-southeast2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/asia-southeast2-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 48,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-southeast2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1280\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast1\",\n      \"description\": \"australia-southeast1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/australia-southeast1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/australia-southeast1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/australia-southeast1-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 48,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/australia-southeast1\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1480\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast2\",\n      \"description\": \"australia-southeast2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/australia-southeast2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/australia-southeast2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/australia-southeast2-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/australia-southeast2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1450\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-central2\",\n      \"description\": \"europe-central2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-central2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-central2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-central2-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-central2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1350\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-north1\",\n      \"description\": \"europe-north1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-north1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-north1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-north1-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 48,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-north1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1540\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-southwest1\",\n      \"description\": \"europe-southwest1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-southwest1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-southwest1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-southwest1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-southwest1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1100\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west1\",\n      \"description\": \"europe-west1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-west1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-west1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-west1-d\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 48,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-west1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1290\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west2\",\n      \"description\": \"europe-west2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-west2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-west2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-west2-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 48,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-west2\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1300\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west3\",\n      \"description\": \"europe-west3\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-west3-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-west3-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-west3-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 48,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-west3\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1340\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west4\",\n      \"description\": \"europe-west4\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-west4-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-west4-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-west4-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 48,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-west4\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1380\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west6\",\n      \"description\": \"europe-west6\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-west6-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-west6-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-west6-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 48,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-west6\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1510\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west8\",\n      \"description\": \"europe-west8\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-west8-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-west8-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-west8-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-west8\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1520\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west9\",\n      \"description\": \"europe-west9\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-west9-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-west9-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/europe-west9-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-west9\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1330\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast1\",\n      \"description\": \"northamerica-northeast1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/northamerica-northeast1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/northamerica-northeast1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/northamerica-northeast1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 48,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/northamerica-northeast1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1460\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast2\",\n      \"description\": \"northamerica-northeast2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/northamerica-northeast2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/northamerica-northeast2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/northamerica-northeast2-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/northamerica-northeast2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1310\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-east1\",\n      \"description\": \"southamerica-east1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/southamerica-east1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/southamerica-east1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/southamerica-east1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 48,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/southamerica-east1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1490\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-west1\",\n      \"description\": \"southamerica-west1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/southamerica-west1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/southamerica-west1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/southamerica-west1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/southamerica-west1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1000\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1\",\n      \"description\": \"us-central1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-central1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-central1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-central1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-central1-f\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 48,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-central1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1230\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east1\",\n      \"description\": \"us-east1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-east1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-east1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-east1-d\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 2\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 20\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 2\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 1\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 1\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 2\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 48,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-east1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1270\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east4\",\n      \"description\": \"us-east4\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-east4-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-east4-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-east4-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 48,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-east4\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1530\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east5\",\n      \"description\": \"us-east5\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-east5-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-east5-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-east5-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 4096,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-east5\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1550\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-south1\",\n      \"description\": \"us-south1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-south1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-south1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-south1-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-south1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1210\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west1\",\n      \"description\": \"us-west1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-west1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-west1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-west1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 48,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-west1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1360\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west2\",\n      \"description\": \"us-west2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-west2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-west2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-west2-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 48,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-west2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1420\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west3\",\n      \"description\": \"us-west3\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-west3-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-west3-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-west3-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 48,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-west3\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1430\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west4\",\n      \"description\": \"us-west4\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-west4-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-west4-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/zones/us-west4-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 48,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-west4\",\n      \"supportsPzs\": false\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions\"\n}\n"
  },
  {
    "path": "test-data/lb1/json-dumps/healthChecks.json",
    "content": "{\n  \"kind\": \"compute#healthCheckList\",\n  \"id\": \"projects/gcpdiag-lb1-aaaa/global/healthChecks/\",\n  \"items\": [\n    {\n      \"kind\": \"compute#healthCheck\",\n      \"id\": \"6570916794820924287\",\n      \"creationTimestamp\": \"2023-11-22T17:40:32.481-08:00\",\n      \"name\": \"http-basic-check\",\n      \"checkIntervalSec\": 5,\n      \"timeoutSec\": 5,\n      \"unhealthyThreshold\": 2,\n      \"healthyThreshold\": 2,\n      \"type\": \"HTTP\",\n      \"httpHealthCheck\": {\n        \"port\": 80,\n        \"portSpecification\": \"USE_FIXED_PORT\",\n        \"requestPath\": \"/\",\n        \"proxyHeader\": \"NONE\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/global/healthChecks/http-basic-check\",\n      \"logConfig\": {\n        \"enable\": true\n      }\n    },\n    {\n      \"kind\": \"compute#healthCheck\",\n      \"id\": \"2011808073814110499\",\n      \"creationTimestamp\": \"2023-11-22T11:00:28.722-08:00\",\n      \"name\": \"http-basic-check-2\",\n      \"checkIntervalSec\": 5,\n      \"timeoutSec\": 5,\n      \"unhealthyThreshold\": 2,\n      \"healthyThreshold\": 2,\n      \"type\": \"HTTP\",\n      \"httpHealthCheck\": {\n        \"port\": 80,\n        \"portSpecification\": \"USE_FIXED_PORT\",\n        \"requestPath\": \"/\",\n        \"proxyHeader\": \"NONE\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/global/healthChecks/http-basic-check-2\"\n    },\n    {\n      \"kind\": \"compute#healthCheck\",\n      \"id\": \"4700445592381550883\",\n      \"creationTimestamp\": \"2023-11-22T11:00:28.748-08:00\",\n      \"name\": \"tcp-basic-check-1\",\n      \"checkIntervalSec\": 5,\n      \"timeoutSec\": 5,\n      \"unhealthyThreshold\": 2,\n      \"healthyThreshold\": 2,\n      \"type\": \"TCP\",\n      \"tcpHealthCheck\": {\n        \"port\": 80,\n        \"proxyHeader\": \"NONE\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/global/healthChecks/tcp-basic-check-1\",\n      \"logConfig\": {\n        \"enable\": true\n      }\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/global/healthChecks/\"\n}\n"
  },
  {
    "path": "test-data/lb1/json-dumps/project.json",
    "content": "{\n  \"name\": \"projects/12340009\",\n  \"parent\": \"folders/373737373737\",\n  \"projectId\": \"gcpdiag-lb1-aaaa\",\n  \"state\": \"ACTIVE\",\n  \"displayName\": \"gcpdiag test - lb1\",\n  \"createTime\": \"2022-08-25T14:21:48.527Z\",\n  \"updateTime\": \"2022-08-25T14:21:50.098Z\",\n  \"etag\": \"TaJ5DhDFtwUvBRUHyHHKpQ==\",\n  \"labels\": {\n    \"gcpdiag\": \"test\"\n  }\n}\n"
  },
  {
    "path": "test-data/lb1/json-dumps/services.json",
    "content": "{\n  \"services\": [\n    {\n      \"name\": \"projects/12340009/services/compute.googleapis.com\",\n      \"config\": {\n        \"name\": \"compute.googleapis.com\",\n        \"title\": \"Compute Engine API\",\n        \"documentation\": {\n          \"summary\": \"Creates and runs virtual machines on Google Cloud Platform.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"compute.googleapis.com/VpcNetwork\",\n            \"displayName\": \"VPC Network\",\n            \"description\": \"VPC Network.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the VPC Network.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the VPC Network, global always.\"\n              },\n              {\n                \"key\": \"network_id\",\n                \"description\": \"VPC Network resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Location\",\n            \"displayName\": \"Compute Location\",\n            \"description\": \"A location in the Compute API.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the Compute Location.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/instances_per_vpc_network\",\n                \"compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/ip_aliases_per_vpc_network\",\n                \"compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/subnet_ranges_per_vpc_network\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Location\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Location\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340009\"\n    },\n    {\n      \"name\": \"projects/12340009/services/oslogin.googleapis.com\",\n      \"config\": {\n        \"name\": \"oslogin.googleapis.com\",\n        \"title\": \"Cloud OS Login API\",\n        \"documentation\": {\n          \"summary\": \"You can use OS Login to manage access to your VM instances using IAM roles.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340009\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/lb1/project.tf",
    "content": "/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nresource \"random_string\" \"project_id_suffix\" {\n  length  = 8\n  number  = true\n  lower   = true\n  upper   = false\n  special = false\n}\n\nresource \"google_project\" \"project\" {\n  name            = \"gcpdiag test - lb2\"\n  project_id      = \"gcpdiag-lb2-${random_string.project_id_suffix.id}\"\n  org_id          = var.folder_id == \"\" ? var.org_id : null\n  folder_id       = var.folder_id != \"\" ? var.folder_id : null\n  billing_account = var.billing_account_id\n  labels = {\n    gcpdiag : \"test\"\n  }\n}\n\nresource \"google_project_service\" \"compute\" {\n  project = google_project.project.project_id\n  service = \"compute.googleapis.com\"\n}\n\noutput \"project_id\" {\n  value = google_project.project.project_id\n}\n\noutput \"project_id_suffix\" {\n  value = random_string.project_id_suffix.id\n}\n\noutput \"project_nr\" {\n  value = google_project.project.number\n}\n\noutput \"org_id\" {\n  value = var.org_id\n}\n"
  },
  {
    "path": "test-data/lb1/variables.tf",
    "content": "variable \"billing_account_id\" {}\n\nvariable \"org_id\" {}\nvariable \"folder_id\" { default = \"\" }\n"
  },
  {
    "path": "test-data/lb2/Makefile",
    "content": "PROJECT_ID  := $(shell terraform output -raw project_id)\nPROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix)\nPROJECT_NR  := $(shell terraform output -raw project_nr)\nORG_ID      := $(shell terraform output -raw org_id)\nCURL         = ../../bin/curl-wrap.sh\nJSON_CLEANER = ../../bin/json-cleaner\n\nFAKE_PROJECT_ID_SUFFIX = aaaa\nFAKE_PROJECT_NR = 12340009\nFAKE_ORG_ID = 11112222\nSED_SUBST_FAKE = sed -e \"s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/\" \\\n\t\t\t\t-e \"s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/\" \\\n\t\t\t\t-e \"s/$(ORG_ID)/$(FAKE_ORG_ID)/\" \\\n\nREGION1 = europe-west4\n\nZONE1 = us-east1-b\nZONE2 = europe-west4-b\n\nall:\t\\\n\tjson-dumps/project.json \\\n\tjson-dumps/services.json \\\n\tjson-dumps/compute-igs-$(ZONE1).json \\\n\tjson-dumps/compute-instances-$(ZONE1).json \\\n\tjson-dumps/compute-instances-$(ZONE2).json \\\n\tjson-dumps/compute-negs-$(ZONE2).json \\\n\tjson-dumps/compute-network-default.json \\\n\tjson-dumps/compute-project.json \\\n\tjson-dumps/compute-regions.json \\\n\tjson-dumps/compute-zones.json \\\n\tjson-dumps/compute-aggregated-backendServices.json \\\n\tjson-dumps/compute-backendServices-$(REGION1).json \\\n\tjson-dumps/compute-aggregated-forwardingRules.json \\\n\tjson-dumps/healthChecks.json \\\n\tjson-dumps/regionHealthChecks-$(REGION1).json \\\n\tjson-dumps/lb-insights-$(REGION1).json \\\n\tjson-dumps/lb-insights-global.json \\\n\tjson-dumps/backendService-web-backend-service-get-health-instanceGroups-lb-backend-example-$(ZONE1).json \\\n\tjson-dumps/regionBackendService-backend-service-2-$(REGION1)-get-health-networkEndpointGroups-neg1-$(ZONE2).json \\\n\tjson-dumps/logging-entries-1.json \\\n\tjson-dumps/monitoring-query.json \\\n\tjson-dumps/compute-igs-aggregated.json\n\ninclude ../Makefile.inc\n\ndefine MONITORING_QUERY\n{ \\\n  \"query\": \"fetch gce_instance::compute.googleapis.com/instance/uptime_total \\\n  | within 10m \\\n  | group_by [resource.zone, metric.instance_name] \\\n  | group_by 5m, [.mean, .count] \\\n  \" \\\n}\nendef\njson-dumps/monitoring-query.json:\n\t$(CURL) -fsS \\\n\t\t'https://monitoring.googleapis.com/v3/projects/$(PROJECT_ID)/timeSeries:query' \\\n\t\t--header \"Content-Type: application/json\" -X POST \\\n\t\t--data '$(MONITORING_QUERY)' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/regionHealthChecks-%.json:\n\t$(CURL) -fsS \\\n\t        'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/regions/$*/healthChecks/' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/healthChecks.json:\n\t$(CURL) -fsS \\\n\t        'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/global/healthChecks/' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/lb-insights-%.json:\n\t$(CURL) -fv \\\n\t-H \"Authorization: Bearer $(gcloud auth print-access-token)\" \\\n\t-H \"x-goog-user-project: $(PROJECT_ID)\" \\\n\t  'https://recommender.googleapis.com/v1/projects/$(PROJECT_ID)/locations/$*/insightTypes/google.networkanalyzer.networkservices.loadBalancerInsight/insights' \\\n\t  | $(SED_SUBST_FAKE) >$@\n\njson-dumps/backendService-web-backend-service-get-health-instanceGroups-lb-backend-example-us-east1-b.json:\n\t$(CURL) -fsS \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/global/backendServices/web-backend-service/getHealth' \\\n\t\t--data '{\"group\": \"projects/$(PROJECT_ID)/zones/$(ZONE)/instanceGroups/lb-backend-example\"}' \\\n\t\t--header \"Content-Type:text/json\" \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\n\njson-dumps/regionBackendService-backend-service-2-europe-west4-get-health-networkEndpointGroups-neg1-europe-west4-b.json:\n\t$(CURL) -fsS \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/regions/europe-west4/backendServices/backend-service-2/getHealth' \\\n\t\t--data '{\"group\": \"projects/$(PROJECT_ID)/zones/europe-west4-b/networkEndpointGroups/neg1\"}' \\\n\t\t--header \"Content-Type:text/json\" \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\n\n# If you need to recreate the JSON: adapt the timestamp and make sure that there are some entries found.\ndefine LOGGING_ENTRIES_BODY\n{\n\t\"resourceNames\": [\"projects/$(PROJECT_ID)\"],\n\t\"orderBy\": \"timestamp desc\",\n\t\"filter\": \"\n\t\tresource.type=\\\"gce_instance_group\\\"\n\t\tlog_name=\\\"projects/gcpdiag-lb2-mqc6ejd8/logs/compute.googleapis.com%2Fhealthchecks\\\"\n\t\tresource.labels.instance_group_name=\\\"lb-backend-example\\\"\n\t\tresource.labels.location=us-east1-b\n\t\tjsonPayload.healthCheckProbeResult.healthState=\\\"UNHEALTHY\\\"\n\t\"\n}\nendef\nexport LOGGING_ENTRIES_BODY\n\njson-dumps/logging-entries-1.json:\n\t$(CURL) -fsS \\\n\t\t'https://logging.googleapis.com/v2/entries:list' \\\n\t\t--header \"Content-Type:text/json\" \\\n\t\t-d \"$$LOGGING_ENTRIES_BODY\" \\\n\t\t| $(SED_SUBST_FAKE) >$@\n"
  },
  {
    "path": "test-data/lb2/http-lb-mig.tf",
    "content": "# External HTTP load balancer with an CDN-enabled managed instance group backend\n\n# [START cloudloadbalancing_ext_http_gce_instance_template]\nresource \"google_compute_instance_template\" \"default\" {\n  depends_on = [google_project_service.compute]\n  name       = \"lb-backend-template\"\n  project    = google_project.project.project_id\n  disk {\n    auto_delete  = true\n    boot         = true\n    device_name  = \"persistent-disk-0\"\n    mode         = \"READ_WRITE\"\n    source_image = \"projects/debian-cloud/global/images/family/debian-11\"\n    type         = \"PERSISTENT\"\n  }\n  labels = {\n    managed-by-cnrm = \"true\"\n  }\n  machine_type = \"n1-standard-1\"\n  metadata = {\n    startup-script = \"#! /bin/bash\\n     sudo apt-get update\\n     sudo apt-get install apache2 -y\\n     sudo a2ensite default-ssl\\n     sudo a2enmod ssl\\n     sudo vm_hostname=\\\"$(curl -H \\\"Metadata-Flavor:Google\\\" \\\\\\n   http://169.254.169.254/computeMetadata/v1/instance/name)\\\"\\n   sudo echo \\\"Page served from: $vm_hostname\\\" | \\\\\\n   tee /var/www/html/index.html\\n   sudo systemctl restart apache2\"\n  }\n  network_interface {\n    access_config {\n      network_tier = \"PREMIUM\"\n    }\n    network = \"default\"\n    #subnetwork = \"regions/us-east1/subnetworks/default\"\n  }\n  region = \"us-east1\"\n  service_account {\n    email  = \"default\"\n    scopes = [\"https://www.googleapis.com/auth/devstorage.read_only\", \"https://www.googleapis.com/auth/logging.write\", \"https://www.googleapis.com/auth/monitoring.write\", \"https://www.googleapis.com/auth/pubsub\", \"https://www.googleapis.com/auth/service.management.readonly\", \"https://www.googleapis.com/auth/servicecontrol\", \"https://www.googleapis.com/auth/trace.append\"]\n  }\n  tags = [\"allow-health-check\"]\n}\n# [END cloudloadbalancing_ext_http_gce_instance_template]\n\n# [START cloudloadbalancing_ext_http_gce_instance_mig]\nresource \"google_compute_instance_group_manager\" \"default\" {\n  depends_on = [google_project_service.compute]\n  project    = google_project.project.project_id\n  name       = \"lb-backend-example\"\n  zone       = \"us-east1-b\"\n  named_port {\n    name = \"http\"\n    port = 80\n  }\n  version {\n    instance_template = google_compute_instance_template.default.id\n    name              = \"primary\"\n  }\n  base_instance_name = \"vm\"\n  target_size        = 2\n}\n# [END cloudloadbalancing_ext_http_gce_instance_mig]\n\n\n# [START cloudloadbalancing_ext_http_gce_instance_firewall_rule]\nresource \"google_compute_firewall\" \"default\" {\n  project    = google_project.project.project_id\n  depends_on = [google_project_service.compute]\n  name       = \"fw-allow-health-check\"\n  direction  = \"INGRESS\"\n  network    = \"default\"\n  priority   = 1000\n  # incorrect source ranges\n  source_ranges = [\"130.240.0.0/22\", \"35.100.0.0/16\"]\n  target_tags   = [\"allow-health-check\"]\n  allow {\n    ports    = [\"80\"]\n    protocol = \"tcp\"\n  }\n}\n# [END cloudloadbalancing_ext_http_gce_instance_firewall_rule]\n\n# [START cloudloadbalancing_ext_http_gce_instance_ip_address]\nresource \"google_compute_global_address\" \"default\" {\n  depends_on = [google_project_service.compute]\n  project    = google_project.project.project_id\n  name       = \"lb-ipv4-1\"\n  ip_version = \"IPV4\"\n}\n# [END cloudloadbalancing_ext_http_gce_instance_ip_address]\n\n# [START cloudloadbalancing_ext_http_gce_instance_health_check]\nresource \"google_compute_health_check\" \"default\" {\n  depends_on         = [google_project_service.compute]\n  name               = \"http-basic-check\"\n  project            = google_project.project.project_id\n  check_interval_sec = 5\n  healthy_threshold  = 2\n\n  http_health_check {\n    # port different than the one in the backend service\n    port               = 88\n    port_specification = \"USE_FIXED_PORT\"\n    proxy_header       = \"NONE\"\n    request_path       = \"/\"\n  }\n\n  log_config {\n    enable = true\n  }\n\n  timeout_sec         = 5\n  unhealthy_threshold = 2\n}\n# [END cloudloadbalancing_ext_http_gce_instance_health_check]\n\n# [START cloudloadbalancing_ext_http_gce_instance_health_check]\nresource \"google_compute_health_check\" \"http-basic-check-2\" {\n  depends_on         = [google_project_service.compute]\n  name               = \"http-basic-check-2\"\n  project            = google_project.project.project_id\n  check_interval_sec = 5\n  healthy_threshold  = 2\n\n  http_health_check {\n    port               = 80\n    port_specification = \"USE_FIXED_PORT\"\n    proxy_header       = \"NONE\"\n    request_path       = \"/\"\n  }\n\n  timeout_sec         = 5\n  unhealthy_threshold = 2\n}\n# [END cloudloadbalancing_ext_http_gce_instance_health_check]\n\n# [START cloudloadbalancing_ext_tcp_gce_instance_health_check]\nresource \"google_compute_health_check\" \"tcp-basic-check-1\" {\n  depends_on = [google_project_service.compute]\n  name       = \"tcp-basic-check-1\"\n  project    = google_project.project.project_id\n\n  check_interval_sec = 5\n  timeout_sec        = 5\n\n  tcp_health_check {\n    port = 80\n  }\n\n  log_config {\n    enable = true\n  }\n\n}\n# [END cloudloadbalancing_ext_tcp_gce_instance_health_check]\n\n# [START cloudloadbalancing_ext_http_gce_instance_backend_service]\nresource \"google_compute_backend_service\" \"default\" {\n  name                            = \"web-backend-service\"\n  project                         = google_project.project.project_id\n  connection_draining_timeout_sec = 0\n  health_checks                   = [google_compute_health_check.default.id]\n  load_balancing_scheme           = \"EXTERNAL\"\n  port_name                       = \"http\"\n  protocol                        = \"HTTP\"\n  session_affinity                = \"NONE\"\n  timeout_sec                     = 30\n  backend {\n    group           = google_compute_instance_group_manager.default.instance_group\n    balancing_mode  = \"UTILIZATION\"\n    capacity_scaler = 1.0\n  }\n}\n# [END cloudloadbalancing_ext_http_gce_instance_backend_service]\n\n# [START cloudloadbalancing_ext_http_gce_instance_url_map]\nresource \"google_compute_url_map\" \"default\" {\n  project         = google_project.project.project_id\n  name            = \"web-map-http\"\n  default_service = google_compute_backend_service.default.id\n}\n# [END cloudloadbalancing_ext_http_gce_instance_url_map]\n\n# [START cloudloadbalancing_ext_http_gce_instance_target_http_proxy]\nresource \"google_compute_target_http_proxy\" \"default\" {\n  project = google_project.project.project_id\n  name    = \"http-lb-proxy\"\n  url_map = google_compute_url_map.default.id\n}\n# [END cloudloadbalancing_ext_http_gce_instance_target_http_proxy]\n\n# [START cloudloadbalancing_ext_http_gce_instance_forwarding_rule]\nresource \"google_compute_global_forwarding_rule\" \"default\" {\n  project               = google_project.project.project_id\n  name                  = \"http-content-rule\"\n  ip_protocol           = \"TCP\"\n  load_balancing_scheme = \"EXTERNAL\"\n  port_range            = \"80-80\"\n  target                = google_compute_target_http_proxy.default.id\n  ip_address            = google_compute_global_address.default.id\n}\n# [END cloudloadbalancing_ext_http_gce_instance_forwarding_rule]\n"
  },
  {
    "path": "test-data/lb2/json-dumps/backendService-web-backend-service-get-health-instanceGroups-lb-backend-example-us-east1-b.json",
    "content": "{\n  \"kind\": \"compute#backendServiceGroupHealth\",\n  \"healthStatus\": [\n    {\n      \"ipAddress\": \"10.142.0.2\",\n      \"port\": 80,\n      \"instance\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east1-b/instances/vm-pn3l\",\n      \"healthState\": \"UNHEALTHY\"\n    },\n    {\n      \"ipAddress\": \"10.142.0.3\",\n      \"port\": 80,\n      \"instance\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east1-b/instances/vm-m5q1\",\n      \"healthState\": \"UNHEALTHY\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/lb2/json-dumps/compute-aggregated-backendServices.json",
    "content": "{\n  \"kind\": \"compute#backendServiceAggregatedList\",\n  \"id\": \"projects/gcpdiag-lb2-aaaa/aggregated/backendServices\",\n  \"items\": {\n    \"global\": {\n      \"backendServices\": [\n        {\n          \"kind\": \"compute#backendService\",\n          \"id\": \"4222530648416744207\",\n          \"creationTimestamp\": \"2024-08-12T01:54:56.339-07:00\",\n          \"name\": \"web-backend-service\",\n          \"description\": \"\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/global/backendServices/web-backend-service\",\n          \"backends\": [\n            {\n              \"group\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east1-b/instanceGroups/lb-backend-example\",\n              \"balancingMode\": \"UTILIZATION\",\n              \"capacityScaler\": 1\n            }\n          ],\n          \"healthChecks\": [\n            \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/global/healthChecks/http-basic-check\"\n          ],\n          \"timeoutSec\": 30,\n          \"port\": 80,\n          \"protocol\": \"HTTP\",\n          \"fingerprint\": \"JJHYy-dQ_ks=\",\n          \"portName\": \"http\",\n          \"enableCDN\": false,\n          \"sessionAffinity\": \"NONE\",\n          \"affinityCookieTtlSec\": 0,\n          \"loadBalancingScheme\": \"EXTERNAL\",\n          \"connectionDraining\": {\n            \"drainingTimeoutSec\": 0\n          },\n          \"iap\": {\n            \"enabled\": false\n          },\n          \"usedBy\": [\n            {\n              \"reference\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/global/urlMaps/web-map-http\"\n            }\n          ]\n        }\n      ]\n    },\n    \"regions/europe-west4\": {\n      \"backendServices\": [\n        {\n          \"kind\": \"compute#backendService\",\n          \"id\": \"4868168055250150809\",\n          \"creationTimestamp\": \"2024-08-13T06:11:18.777-07:00\",\n          \"name\": \"backend-service-2\",\n          \"description\": \"\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west4/backendServices/backend-service-2\",\n          \"backends\": [\n            {\n              \"group\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-b/networkEndpointGroups/neg1\",\n              \"balancingMode\": \"CONNECTION\"\n            }\n          ],\n          \"healthChecks\": [\n            \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west4/healthChecks/tcp-basic-check-2\"\n          ],\n          \"timeoutSec\": 30,\n          \"port\": 80,\n          \"protocol\": \"TCP\",\n          \"fingerprint\": \"Q-UN6RnknOk=\",\n          \"portName\": \"http\",\n          \"enableCDN\": false,\n          \"sessionAffinity\": \"NONE\",\n          \"affinityCookieTtlSec\": 0,\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west4\",\n          \"loadBalancingScheme\": \"EXTERNAL\",\n          \"connectionDraining\": {\n            \"drainingTimeoutSec\": 0\n          },\n          \"iap\": {\n            \"enabled\": false\n          }\n        }\n      ]\n    }\n  },\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/aggregated/backendServices\"\n}\n"
  },
  {
    "path": "test-data/lb2/json-dumps/compute-aggregated-forwardingRules.json",
    "content": "{\n  \"kind\": \"compute#forwardingRuleAggregatedList\",\n  \"id\": \"projects/gcpdiag-lb1-aaaa/aggregated/forwardingRules\",\n  \"items\": {\n    \"regions/us-west1\": {\n      \"forwardingRules\": [\n        {\n          \"kind\": \"compute#forwardingRule\",\n          \"id\": \"4245322038451922234\",\n          \"creationTimestamp\": \"2024-02-02T22:21:59.365-08:00\",\n          \"name\": \"forwardingRule1\",\n          \"description\": \"\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-west1\",\n          \"IPAddress\": \"9.1.2.7\",\n          \"IPProtocol\": \"TCP\",\n          \"portRange\": \"80-80\",\n          \"target\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-west1/targetHttpProxies/forwardingRule1-target-proxy\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-west1/forwardingRules/forwardingRule1\",\n          \"loadBalancingScheme\": \"INTERNAL_MANAGED\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-west1/subnetworks/backend-subnet\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/global/networks/lb-network\",\n          \"networkTier\": \"PREMIUM\",\n          \"labelFingerprint\": \"42Wmu7y8rSM=\",\n          \"fingerprint\": \"zUL2wdvikcQ=\",\n          \"allowGlobalAccess\": true\n        }\n      ]\n    }\n  },\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/aggregated/forwardingRules\"\n}\n"
  },
  {
    "path": "test-data/lb2/json-dumps/compute-backendServices-europe-west4.json",
    "content": "{\n  \"kind\": \"compute#backendServiceList\",\n  \"id\": \"projects/gcpdiag-lb2-aaaa/regions/europe-west4/backendServices/\",\n  \"items\": [\n    {\n      \"kind\": \"compute#backendService\",\n      \"id\": \"4868168055250150809\",\n      \"creationTimestamp\": \"2024-08-13T06:11:18.777-07:00\",\n      \"name\": \"backend-service-2\",\n      \"description\": \"\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west4/backendServices/backend-service-2\",\n      \"backends\": [\n        {\n          \"group\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-b/networkEndpointGroups/neg1\",\n          \"balancingMode\": \"CONNECTION\"\n        }\n      ],\n      \"healthChecks\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west4/healthChecks/tcp-basic-check-2\"\n      ],\n      \"timeoutSec\": 30,\n      \"port\": 80,\n      \"protocol\": \"TCP\",\n      \"fingerprint\": \"Q-UN6RnknOk=\",\n      \"portName\": \"http\",\n      \"enableCDN\": false,\n      \"sessionAffinity\": \"NONE\",\n      \"affinityCookieTtlSec\": 0,\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west4\",\n      \"loadBalancingScheme\": \"EXTERNAL\",\n      \"connectionDraining\": {\n        \"drainingTimeoutSec\": 0\n      },\n      \"iap\": {\n        \"enabled\": false\n      }\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west4/backendServices/\"\n}\n"
  },
  {
    "path": "test-data/lb2/json-dumps/compute-igs-aggregated.json",
    "content": "{\n  \"kind\": \"compute#instanceGroupAggregatedList\",\n  \"id\": \"projects/gcpdiag-lb2-aaaa/aggregated/instanceGroups\",\n  \"items\": {\n    \"regions/us-central1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/us-central1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-central1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-central2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/us-central2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-central2\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/europe-west1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-west1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/us-west1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west1\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-east1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/asia-east1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-east1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-east1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/us-east1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-east1\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-northeast1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/asia-northeast1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-northeast1\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-southeast1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/asia-southeast1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-southeast1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-east4\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/us-east4'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-east4\"\n          }\n        ]\n      }\n    },\n    \"regions/australia-southeast1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/australia-southeast1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/australia-southeast1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/europe-west2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west2\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west3\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/europe-west3'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west3\"\n          }\n        ]\n      }\n    },\n    \"regions/southamerica-east1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/southamerica-east1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/southamerica-east1\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-south1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/asia-south1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-south1\"\n          }\n        ]\n      }\n    },\n    \"regions/northamerica-northeast1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/northamerica-northeast1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/northamerica-northeast1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west4\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/europe-west4'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west4\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-north1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/europe-north1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-north1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-west2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/us-west2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west2\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-east2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/asia-east2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-east2\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west6\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/europe-west6'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west6\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-northeast2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/asia-northeast2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-northeast2\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-northeast3\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/asia-northeast3'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-northeast3\"\n          }\n        ]\n      }\n    },\n    \"regions/us-west3\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/us-west3'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west3\"\n          }\n        ]\n      }\n    },\n    \"regions/us-west4\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/us-west4'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west4\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-southeast2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/asia-southeast2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-southeast2\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-central2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/europe-central2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-central2\"\n          }\n        ]\n      }\n    },\n    \"regions/northamerica-northeast2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/northamerica-northeast2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/northamerica-northeast2\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-south2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/asia-south2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-south2\"\n          }\n        ]\n      }\n    },\n    \"regions/australia-southeast2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/australia-southeast2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/australia-southeast2\"\n          }\n        ]\n      }\n    },\n    \"regions/southamerica-west1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/southamerica-west1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/southamerica-west1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-east7\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/us-east7'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-east7\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west8\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/europe-west8'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west8\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west9\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/europe-west9'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west9\"\n          }\n        ]\n      }\n    },\n    \"regions/us-east5\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/us-east5'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-east5\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-southwest1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/europe-southwest1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-southwest1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-south1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/us-south1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-south1\"\n          }\n        ]\n      }\n    },\n    \"regions/me-west1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/me-west1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/me-west1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west12\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/europe-west12'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west12\"\n          }\n        ]\n      }\n    },\n    \"regions/me-central1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/me-central1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/me-central1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west10\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/europe-west10'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west10\"\n          }\n        ]\n      }\n    },\n    \"regions/me-central2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/me-central2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/me-central2\"\n          }\n        ]\n      }\n    },\n    \"regions/africa-south1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/africa-south1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/africa-south1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-west8\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/us-west8'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west8\"\n          }\n        ]\n      }\n    },\n    \"regions/northamerica-south1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/northamerica-south1'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/northamerica-south1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-north2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222regions/europe-north2'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-north2\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-central1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-central1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-central1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central1-f\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-central1-f'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central1-f\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-central2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-central2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-central2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-central2-d\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-central2-d'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-central2-d\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west1-d\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west1-d'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west1-d\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-west1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-west1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-west1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-east1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-east1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-east1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east1-b\": {\n      \"instanceGroups\": [\n        {\n          \"kind\": \"compute#instanceGroup\",\n          \"id\": \"8026783087457753814\",\n          \"creationTimestamp\": \"2025-02-07T02:45:13.643-08:00\",\n          \"name\": \"lb-backend-example\",\n          \"description\": \"This instance group is controlled by Instance Group Manager 11112222lb-backend-example'. To modify instances in this group, use the Instance Group Manager API: https://cloud.google.com/compute/docs/reference/latest/instanceGroupManagers\",\n          \"namedPorts\": [\n            {\n              \"name\": \"http\",\n              \"port\": 80\n            }\n          ],\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/global/networks/default\",\n          \"fingerprint\": \"l9ccw0jwP90=\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east1-b\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east1-b/instanceGroups/lb-backend-example\",\n          \"size\": 2,\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-east1/subnetworks/default\"\n        }\n      ]\n    },\n    \"zones/us-east1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-east1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east1-d\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-east1-d'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east1-d\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-northeast1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-northeast1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-northeast1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-southeast1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-southeast1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-southeast1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east4-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-east4-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east4-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east4-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-east4-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east4-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east4-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-east4-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east4-c\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/australia-southeast1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/australia-southeast1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/australia-southeast1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west3-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west3-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west3-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west3-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west3-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west3-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west3-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west3-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west3-b\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-east1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/southamerica-east1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-east1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-east1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/southamerica-east1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-east1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-east1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/southamerica-east1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-east1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-south1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-south1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-south1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/northamerica-northeast1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/northamerica-northeast1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/northamerica-northeast1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west4-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west4-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west4-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west4-b\": {\n      \"instanceGroups\": [\n        {\n          \"kind\": \"compute#instanceGroup\",\n          \"id\": \"361518988230844717\",\n          \"creationTimestamp\": \"2025-02-05T04:55:30.981-08:00\",\n          \"name\": \"instance-group-1\",\n          \"description\": \"\",\n          \"namedPorts\": [\n            {\n              \"name\": \"http\",\n              \"port\": 8080\n            },\n            {\n              \"name\": \"http\",\n              \"port\": 8443\n            }\n          ],\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/global/networks/default\",\n          \"fingerprint\": \"bPhGeNqJuxo=\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-b\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-b/instanceGroups/instance-group-1\",\n          \"size\": 1,\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west4/subnetworks/default\"\n        }\n      ]\n    },\n    \"zones/europe-west4-a\": {\n      \"instanceGroups\": [\n        {\n          \"kind\": \"compute#instanceGroup\",\n          \"id\": \"2488565369359920294\",\n          \"creationTimestamp\": \"2025-02-06T07:16:25.517-08:00\",\n          \"name\": \"gke-gke1-default-pool-dee670f4-grp\",\n          \"description\": \"This instance group is controlled by Instance Group Manager 11112222gke-gke1-default-pool-dee670f4-grp'. To modify instances in this group, use the Instance Group Manager API: https://cloud.google.com/compute/docs/reference/latest/instanceGroupManagers\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/global/networks/default\",\n          \"fingerprint\": \"42WmSpB8rSM=\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-a\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-a/instanceGroups/gke-gke1-default-pool-dee670f4-grp\",\n          \"size\": 1,\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west4/subnetworks/gke1-subnet\"\n        },\n        {\n          \"kind\": \"compute#instanceGroup\",\n          \"id\": \"4588026214929588524\",\n          \"creationTimestamp\": \"2025-02-05T04:55:31.502-08:00\",\n          \"name\": \"instance-group-1\",\n          \"description\": \"\",\n          \"namedPorts\": [\n            {\n              \"name\": \"http\",\n              \"port\": 8080\n            },\n            {\n              \"name\": \"http\",\n              \"port\": 8443\n            }\n          ],\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/global/networks/default\",\n          \"fingerprint\": \"bPhGeNqJuxo=\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-a\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-a/instanceGroups/instance-group-1\",\n          \"size\": 1,\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west4/subnetworks/default\"\n        },\n        {\n          \"kind\": \"compute#instanceGroup\",\n          \"id\": \"5283965411150192942\",\n          \"creationTimestamp\": \"2025-02-05T04:55:29.186-08:00\",\n          \"name\": \"instance-group-2\",\n          \"description\": \"\",\n          \"namedPorts\": [\n            {\n              \"name\": \"http\",\n              \"port\": 8080\n            },\n            {\n              \"name\": \"https\",\n              \"port\": 8443\n            }\n          ],\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/global/networks/default\",\n          \"fingerprint\": \"OMWWjJuNHl0=\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-a\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-a/instanceGroups/instance-group-2\",\n          \"size\": 1,\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west4/subnetworks/default\"\n        },\n        {\n          \"kind\": \"compute#instanceGroup\",\n          \"id\": \"1459469180646383936\",\n          \"creationTimestamp\": \"2025-02-05T04:55:11.178-08:00\",\n          \"name\": \"mig\",\n          \"description\": \"This instance group is controlled by Instance Group Manager 11112222mig'. To modify instances in this group, use the Instance Group Manager API: https://cloud.google.com/compute/docs/reference/latest/instanceGroupManagers\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/global/networks/default\",\n          \"fingerprint\": \"42WmSpB8rSM=\",\n          \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-a\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-a/instanceGroups/mig\",\n          \"size\": 2,\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west4/subnetworks/default\"\n        }\n      ]\n    },\n    \"zones/europe-north1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-north1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-north1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-north1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-west2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-west2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-west2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-east2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-east2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-east2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-east2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-east2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west6-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west6-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west6-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west6-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west6-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west6-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west6-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west6-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west6-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-northeast2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-northeast2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-northeast2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast3-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-northeast3-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast3-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast3-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-northeast3-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast3-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-northeast3-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-northeast3-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-northeast3-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west3-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-west3-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west3-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west3-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-west3-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west3-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west3-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-west3-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west3-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west4-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-west4-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west4-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west4-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-west4-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west4-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west4-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-west4-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west4-b\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-southeast2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-southeast2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-southeast2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-southeast2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-southeast2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-central2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-central2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-central2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-central2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-central2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-central2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-central2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-central2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-central2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/northamerica-northeast2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/northamerica-northeast2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-northeast2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/northamerica-northeast2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-northeast2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-south2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-south2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/asia-south2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/asia-south2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/asia-south2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/australia-southeast2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/australia-southeast2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/australia-southeast2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/australia-southeast2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/australia-southeast2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-west1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/southamerica-west1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-west1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-west1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/southamerica-west1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-west1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/southamerica-west1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/southamerica-west1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/southamerica-west1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east7-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-east7-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east7-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east7-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-east7-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east7-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east7-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-east7-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east7-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west8-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west8-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west8-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west8-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west8-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west8-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west8-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west8-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west8-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west9-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west9-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west9-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west9-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west9-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west9-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west9-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west9-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west9-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east5-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-east5-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east5-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east5-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-east5-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east5-b\"\n          }\n        ]\n      }\n    },\n    \"zones/us-east5-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-east5-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-east5-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-southwest1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-southwest1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-southwest1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-southwest1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-southwest1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-southwest1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-southwest1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-southwest1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-southwest1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-south1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-south1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-south1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-south1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-south1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-south1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-south1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-south1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-south1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-west1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/me-west1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-west1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-west1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/me-west1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-west1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/me-west1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/me-west1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-west1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west12-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west12-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west12-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west12-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west12-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west12-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west12-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west12-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west12-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/me-central1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/me-central1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/me-central1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west10-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west10-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west10-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west10-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west10-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west10-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-west10-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-west10-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-west10-b\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/me-central2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/me-central2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/me-central2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/me-central2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/me-central2-b\"\n          }\n        ]\n      }\n    },\n    \"zones/africa-south1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/africa-south1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/africa-south1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/africa-south1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/africa-south1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/africa-south1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/africa-south1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/africa-south1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/africa-south1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west8-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-west8-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west8-c\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west8-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-west8-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west8-a\"\n          }\n        ]\n      }\n    },\n    \"zones/us-west8-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/us-west8-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/us-west8-b\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-south1-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/northamerica-south1-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-south1-b\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-south1-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/northamerica-south1-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-south1-a\"\n          }\n        ]\n      }\n    },\n    \"zones/northamerica-south1-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/northamerica-south1-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/northamerica-south1-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north2-c\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-north2-c'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north2-c\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north2-a\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-north2-a'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north2-a\"\n          }\n        ]\n      }\n    },\n    \"zones/europe-north2-b\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"No results for the scope 11112222zones/europe-north2-b'.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"zones/europe-north2-b\"\n          }\n        ]\n      }\n    }\n  },\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/aggregated/instanceGroups\"\n}\n"
  },
  {
    "path": "test-data/lb2/json-dumps/compute-igs-us-east1-b.json",
    "content": "{\n  \"kind\": \"compute#instanceGroupList\",\n  \"id\": \"projects/gcpdiag-lb2-aaaa/zones/us-east1-b/instanceGroups\",\n  \"items\": [\n    {\n      \"kind\": \"compute#instanceGroup\",\n      \"id\": \"3727997629940134718\",\n      \"creationTimestamp\": \"2024-08-12T01:54:41.142-07:00\",\n      \"name\": \"lb-backend-example\",\n      \"description\": \"This instance group is controlled by Instance Group Manager 'lb-backend-example'. To modify instances in this group, use the Instance Group Manager API: https://cloud.google.com/compute/docs/reference/latest/instanceGroupManagers\",\n      \"namedPorts\": [\n        {\n          \"name\": \"http\",\n          \"port\": 80\n        }\n      ],\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/global/networks/default\",\n      \"fingerprint\": \"l9ccw0jwP90=\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east1-b\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east1-b/instanceGroups/lb-backend-example\",\n      \"size\": 2,\n      \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-east1/subnetworks/default\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east1-b/instanceGroups\"\n}\n"
  },
  {
    "path": "test-data/lb2/json-dumps/compute-instances-europe-west4-b.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-lb2-aaaa/zones/europe-west4-b/instances\",\n  \"items\": [\n    {\n      \"canIpForward\": false,\n      \"cpuPlatform\": \"Intel Broadwell\",\n      \"creationTimestamp\": \"2024-08-13T05:59:45.573-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"architecture\": \"X86_64\",\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"10\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-b/disks/neg-vm\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"3190067059314058837\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"42WmSpB8rSM=\",\n      \"lastStartTimestamp\": \"2024-08-13T05:59:53.039-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-b/machineTypes/e2-medium\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"startup-script\",\n            \"value\": \"#! /bin/bash\\n     sudo apt-get update\\n     sudo apt-get install apache2 -y\\n     sudo a2ensite default-ssl\\n     sudo a2enmod ssl\\n     sudo vm_hostname=\\\"$(curl -H \\\"Metadata-Flavor:Google\\\" \\\\\\n   http://169.254.169.254/computeMetadata/v1/instance/name)\\\"\\n   sudo echo \\\"Page served from: $vm_hostname\\\" | \\\\\\n   tee /var/www/html/index.html\\n   sudo systemctl restart apache2\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"neg-vm\",\n      \"networkInterfaces\": [\n        {\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/global/networks/default\",\n          \"networkIP\": \"10.164.0.2\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west4/subnetworks/default\"\n        }\n      ],\n      \"satisfiesPzi\": true,\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-b/instances/neg-vm\",\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\"\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-b\"\n    }\n  ],\n  \"kind\": \"compute#instanceList\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-b/instances\"\n}\n"
  },
  {
    "path": "test-data/lb2/json-dumps/compute-instances-us-east1-b.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-lb2-aaaa/zones/us-east1-b/instances\",\n  \"items\": [\n    {\n      \"cpuPlatform\": \"Intel Haswell\",\n      \"creationTimestamp\": \"2024-08-12T01:54:50.572-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"architecture\": \"X86_64\",\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"10\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east1-b/disks/vm-m5q1\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"1501310902351459126\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"Z9VAAJ71T-w=\",\n      \"labels\": {\n        \"managed-by-cnrm\": \"true\"\n      },\n      \"lastStartTimestamp\": \"2024-08-12T01:54:57.272-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east1-b/machineTypes/n1-standard-1\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"instance-template\",\n            \"value\": \"projects/12340009/global/instanceTemplates/lb-backend-template\"\n          },\n          {\n            \"key\": \"created-by\",\n            \"value\": \"projects/12340009/zones/us-east1-b/instanceGroupManagers/lb-backend-example\"\n          },\n          {\n            \"key\": \"startup-script\",\n            \"value\": \"#! /bin/bash\\n     sudo apt-get update\\n     sudo apt-get install apache2 -y\\n     sudo a2ensite default-ssl\\n     sudo a2enmod ssl\\n     sudo vm_hostname=\\\"$(curl -H \\\"Metadata-Flavor:Google\\\" \\\\\\n   http://169.254.169.254/computeMetadata/v1/instance/name)\\\"\\n   sudo echo \\\"Page served from: $vm_hostname\\\" | \\\\\\n   tee /var/www/html/index.html\\n   sudo systemctl restart apache2\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"vm-m5q1\",\n      \"networkInterfaces\": [\n        {\n          \"accessConfigs\": [\n            {\n              \"kind\": \"compute#accessConfig\",\n              \"name\": \"external-nat\",\n              \"natIP\": \"35.229.107.36\",\n              \"networkTier\": \"PREMIUM\",\n              \"type\": \"ONE_TO_ONE_NAT\"\n            }\n          ],\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/global/networks/default\",\n          \"networkIP\": \"10.142.0.3\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-east1/subnetworks/default\"\n        }\n      ],\n      \"satisfiesPzi\": true,\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east1-b/instances/vm-m5q1\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"12340009-compute@developer.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/devstorage.read_only\",\n            \"https://www.googleapis.com/auth/logging.write\",\n            \"https://www.googleapis.com/auth/monitoring.write\",\n            \"https://www.googleapis.com/auth/pubsub\",\n            \"https://www.googleapis.com/auth/service.management.readonly\",\n            \"https://www.googleapis.com/auth/servicecontrol\",\n            \"https://www.googleapis.com/auth/trace.append\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"allow-health-check\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east1-b\"\n    },\n    {\n      \"cpuPlatform\": \"Intel Haswell\",\n      \"creationTimestamp\": \"2024-08-12T01:54:49.373-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"architecture\": \"X86_64\",\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"10\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east1-b/disks/vm-pn3l\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"8076354783928415030\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"Z9VAAJ71T-w=\",\n      \"labels\": {\n        \"managed-by-cnrm\": \"true\"\n      },\n      \"lastStartTimestamp\": \"2024-08-12T01:54:56.639-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east1-b/machineTypes/n1-standard-1\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          {\n            \"key\": \"instance-template\",\n            \"value\": \"projects/12340009/global/instanceTemplates/lb-backend-template\"\n          },\n          {\n            \"key\": \"created-by\",\n            \"value\": \"projects/12340009/zones/us-east1-b/instanceGroupManagers/lb-backend-example\"\n          },\n          {\n            \"key\": \"startup-script\",\n            \"value\": \"#! /bin/bash\\n     sudo apt-get update\\n     sudo apt-get install apache2 -y\\n     sudo a2ensite default-ssl\\n     sudo a2enmod ssl\\n     sudo vm_hostname=\\\"$(curl -H \\\"Metadata-Flavor:Google\\\" \\\\\\n   http://169.254.169.254/computeMetadata/v1/instance/name)\\\"\\n   sudo echo \\\"Page served from: $vm_hostname\\\" | \\\\\\n   tee /var/www/html/index.html\\n   sudo systemctl restart apache2\"\n          }\n        ],\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"vm-pn3l\",\n      \"networkInterfaces\": [\n        {\n          \"accessConfigs\": [\n            {\n              \"kind\": \"compute#accessConfig\",\n              \"name\": \"external-nat\",\n              \"natIP\": \"35.243.253.16\",\n              \"networkTier\": \"PREMIUM\",\n              \"type\": \"ONE_TO_ONE_NAT\"\n            }\n          ],\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/global/networks/default\",\n          \"networkIP\": \"10.142.0.2\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-east1/subnetworks/default\"\n        }\n      ],\n      \"satisfiesPzi\": true,\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east1-b/instances/vm-pn3l\",\n      \"serviceAccounts\": [\n        {\n          \"email\": \"12340009-compute@developer.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/devstorage.read_only\",\n            \"https://www.googleapis.com/auth/logging.write\",\n            \"https://www.googleapis.com/auth/monitoring.write\",\n            \"https://www.googleapis.com/auth/pubsub\",\n            \"https://www.googleapis.com/auth/service.management.readonly\",\n            \"https://www.googleapis.com/auth/servicecontrol\",\n            \"https://www.googleapis.com/auth/trace.append\"\n          ]\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"allow-health-check\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east1-b\"\n    }\n  ],\n  \"kind\": \"compute#instanceList\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east1-b/instances\"\n}\n"
  },
  {
    "path": "test-data/lb2/json-dumps/compute-negs-europe-west4-b.json",
    "content": "{\n  \"kind\": \"compute#networkEndpointGroupList\",\n  \"id\": \"projects/gcpdiag-lb2-aaaa/zones/europe-west4-b/networkEndpointGroups\",\n  \"items\": [\n    {\n      \"kind\": \"compute#networkEndpointGroup\",\n      \"id\": \"618627442928968719\",\n      \"creationTimestamp\": \"2024-08-13T06:08:48.608-07:00\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-b/networkEndpointGroups/neg1\",\n      \"name\": \"neg1\",\n      \"networkEndpointType\": \"GCE_VM_IP\",\n      \"size\": 1,\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-b\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/global/networks/default\",\n      \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west4/subnetworks/default\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-b/networkEndpointGroups\"\n}\n"
  },
  {
    "path": "test-data/lb2/json-dumps/compute-network-default.json",
    "content": "{\n  \"kind\": \"compute#network\",\n  \"id\": \"8591756786596985669\",\n  \"creationTimestamp\": \"2022-08-25T07:22:34.810-07:00\",\n  \"name\": \"default\",\n  \"description\": \"Default network for the project\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/global/networks/default\",\n  \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/global/networks/8591756786596985669\",\n  \"autoCreateSubnetworks\": true,\n  \"subnetworks\": [\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-west6/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-east4/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-central2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-west4/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-east5/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-east1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-southeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-west4/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/northamerica-northeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-west2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/southamerica-east1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-southwest1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-east1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-west9/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-south2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-northeast3/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/australia-southeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-west2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-west3/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-central1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-south1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-west3/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-northeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-northeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/southamerica-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/australia-southeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/us-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-southeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/northamerica-northeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-west8/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-south1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/europe-north1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/regions/asia-east2/subnetworks/default\"\n  ],\n  \"routingConfig\": {\n    \"routingMode\": \"REGIONAL\"\n  },\n  \"networkFirewallPolicyEnforcementOrder\": \"AFTER_CLASSIC_FIREWALL\"\n}\n"
  },
  {
    "path": "test-data/lb2/json-dumps/compute-project.json",
    "content": "{\n  \"cloudArmorTier\": \"CA_STANDARD\",\n  \"commonInstanceMetadata\": {\n    \"fingerprint\": \"w5un_8LQwuw=\",\n    \"kind\": \"compute#metadata\"\n  },\n  \"creationTimestamp\": \"2024-08-12T01:52:54.027-07:00\",\n  \"defaultNetworkTier\": \"PREMIUM\",\n  \"defaultServiceAccount\": \"12340009-compute@developer.gserviceaccount.com\",\n  \"id\": \"1661314063513449354\",\n  \"kind\": \"compute#project\",\n  \"name\": \"gcpdiag-lb2-aaaa\",\n  \"quotas\": [\n    {\n      \"limit\": 10000,\n      \"metric\": \"SNAPSHOTS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 30,\n      \"metric\": \"NETWORKS\",\n      \"usage\": 1\n    },\n    {\n      \"limit\": 500,\n      \"metric\": \"FIREWALLS\",\n      \"usage\": 5\n    },\n    {\n      \"limit\": 5000,\n      \"metric\": \"IMAGES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 175,\n      \"metric\": \"STATIC_ADDRESSES\",\n      \"usage\": 1\n    },\n    {\n      \"limit\": 300,\n      \"metric\": \"ROUTES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"FORWARDING_RULES\",\n      \"usage\": 1\n    },\n    {\n      \"limit\": 500,\n      \"metric\": \"TARGET_POOLS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1000,\n      \"metric\": \"HEALTH_CHECKS\",\n      \"usage\": 3\n    },\n    {\n      \"limit\": 575,\n      \"metric\": \"IN_USE_ADDRESSES\",\n      \"usage\": 1\n    },\n    {\n      \"limit\": 500,\n      \"metric\": \"TARGET_INSTANCES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_HTTP_PROXIES\",\n      \"usage\": 1\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"URL_MAPS\",\n      \"usage\": 1\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"BACKEND_SERVICES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1000,\n      \"metric\": \"INSTANCE_TEMPLATES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 50,\n      \"metric\": \"TARGET_VPN_GATEWAYS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"VPN_TUNNELS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 30,\n      \"metric\": \"BACKEND_BUCKETS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 20,\n      \"metric\": \"ROUTERS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_SSL_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_HTTPS_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"SSL_CERTIFICATES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 275,\n      \"metric\": \"SUBNETWORKS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_TCP_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 10,\n      \"metric\": \"SECURITY_POLICIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 200,\n      \"metric\": \"SECURITY_POLICY_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1000,\n      \"metric\": \"XPN_SERVICE_PROJECTS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"PACKET_MIRRORINGS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1000,\n      \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 6,\n      \"metric\": \"INTERCONNECTS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"SSL_POLICIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 5000,\n      \"metric\": \"GLOBAL_INTERNAL_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 50,\n      \"metric\": \"VPN_GATEWAYS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 5000,\n      \"metric\": \"MACHINE_IMAGES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 20,\n      \"metric\": \"SECURITY_POLICY_CEVAL_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 50,\n      \"metric\": \"EXTERNAL_VPN_GATEWAYS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1,\n      \"metric\": \"PUBLIC_ADVERTISED_PREFIXES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 10,\n      \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1024,\n      \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 60,\n      \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"INTERNAL_TRAFFIC_DIRECTOR_FORWARDING_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"GLOBAL_EXTERNAL_MANAGED_FORWARDING_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"GLOBAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"GLOBAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"GLOBAL_EXTERNAL_PROXY_LB_BACKEND_SERVICES\",\n      \"usage\": 1\n    },\n    {\n      \"limit\": 750,\n      \"metric\": \"GLOBAL_INTERNAL_TRAFFIC_DIRECTOR_BACKEND_SERVICES\",\n      \"usage\": 0\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa\",\n  \"vmDnsSetting\": \"ZONAL_ONLY\",\n  \"xpnProjectStatus\": \"UNSPECIFIED_XPN_PROJECT_STATUS\"\n}\n"
  },
  {
    "path": "test-data/lb2/json-dumps/compute-regions.json",
    "content": "{\n  \"kind\": \"compute#regionList\",\n  \"id\": \"projects/gcpdiag-lb2-aaaa/regions\",\n  \"items\": [\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1610\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"africa-south1\",\n      \"description\": \"africa-south1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/africa-south1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/africa-south1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/africa-south1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/africa-south1\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1220\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east1\",\n      \"description\": \"asia-east1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-east1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-east1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-east1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-east1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1370\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east2\",\n      \"description\": \"asia-east2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-east2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-east2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-east2-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-east2\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1250\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast1\",\n      \"description\": \"asia-northeast1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-northeast1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-northeast1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-northeast1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-northeast1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1390\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast2\",\n      \"description\": \"asia-northeast2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-northeast2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-northeast2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-northeast2-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 750,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-northeast2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1410\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast3\",\n      \"description\": \"asia-northeast3\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-northeast3-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-northeast3-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-northeast3-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-northeast3\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1320\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south1\",\n      \"description\": \"asia-south1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-south1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-south1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-south1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-south1\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1470\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south2\",\n      \"description\": \"asia-south2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-south2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-south2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-south2-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 750,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-south2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1260\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast1\",\n      \"description\": \"asia-southeast1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-southeast1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-southeast1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-southeast1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-southeast1\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1440\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast2\",\n      \"description\": \"asia-southeast2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-southeast2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-southeast2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-southeast2-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-southeast2\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1280\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast1\",\n      \"description\": \"australia-southeast1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/australia-southeast1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/australia-southeast1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/australia-southeast1-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/australia-southeast1\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1480\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast2\",\n      \"description\": \"australia-southeast2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/australia-southeast2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/australia-southeast2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/australia-southeast2-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 750,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/australia-southeast2\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1450\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-central2\",\n      \"description\": \"europe-central2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-central2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-central2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-central2-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 750,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-central2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1350\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-north1\",\n      \"description\": \"europe-north1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-north1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-north1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-north1-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-north1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1540\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-southwest1\",\n      \"description\": \"europe-southwest1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-southwest1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-southwest1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-southwest1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 750,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-southwest1\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1100\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west1\",\n      \"description\": \"europe-west1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west1-d\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1590\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west10\",\n      \"description\": \"europe-west10\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west10-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west10-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west10-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 750,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west10\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1570\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west12\",\n      \"description\": \"europe-west12\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west12-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west12-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west12-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 750,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west12\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1290\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west2\",\n      \"description\": \"europe-west2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west2-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west2\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1300\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west3\",\n      \"description\": \"europe-west3\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west3-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west3-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west3-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west3\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1340\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west4\",\n      \"description\": \"europe-west4\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west4\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1380\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west6\",\n      \"description\": \"europe-west6\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west6-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west6-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west6-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 750,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west6\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1510\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west8\",\n      \"description\": \"europe-west8\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west8-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west8-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west8-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 750,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west8\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1520\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west9\",\n      \"description\": \"europe-west9\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west9-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west9-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west9-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 750,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west9\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1580\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central1\",\n      \"description\": \"me-central1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/me-central1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/me-central1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/me-central1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 750,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/me-central1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1600\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central2\",\n      \"description\": \"me-central2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/me-central2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/me-central2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/me-central2-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/me-central2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1560\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-west1\",\n      \"description\": \"me-west1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/me-west1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/me-west1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/me-west1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 750,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/me-west1\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1330\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast1\",\n      \"description\": \"northamerica-northeast1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/northamerica-northeast1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/northamerica-northeast1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/northamerica-northeast1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/northamerica-northeast1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1460\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast2\",\n      \"description\": \"northamerica-northeast2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/northamerica-northeast2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/northamerica-northeast2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/northamerica-northeast2-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 750,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/northamerica-northeast2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1310\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-east1\",\n      \"description\": \"southamerica-east1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/southamerica-east1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/southamerica-east1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/southamerica-east1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/southamerica-east1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1490\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-west1\",\n      \"description\": \"southamerica-west1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/southamerica-west1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/southamerica-west1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/southamerica-west1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/southamerica-west1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1000\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1\",\n      \"description\": \"us-central1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-central1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-central1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-central1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-central1-f\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-central1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1230\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east1\",\n      \"description\": \"us-east1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east1-d\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 3000,\n          \"usage\": 2\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 20\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 2\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 1\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 1\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 2\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-east1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1270\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east4\",\n      \"description\": \"us-east4\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east4-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east4-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east4-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 3000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-east4\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1530\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east5\",\n      \"description\": \"us-east5\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east5-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east5-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east5-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 750,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-east5\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1550\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-south1\",\n      \"description\": \"us-south1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-south1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-south1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-south1-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 750,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_T2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C3_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2A_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_M3_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_80GB_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_EXTERNAL_NETWORK_LB_BACKEND_SERVICES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INTERNAL_LB_BACKEND_SERVICES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICIES_PER_REGION\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULES_PER_REGION\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NET_LB_SECURITY_POLICY_RULE_ATTRIBUTES_PER_REGION\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_DEVICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_L4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_L4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_EXTERNAL_IPV6_ADDRESS_RANGES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SECURITY_POLICY_ADVANCED_RULES_PER_REGION\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_TPU_LITE_PODSLICE_V5\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-south1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1210\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west1\",\n      \"description\": \"us-west1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-west1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-west1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-west1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_TEMPLATES\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSL_POLICIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 1500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 9.2233720368547758e+18,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-west4\",\n      \"supportsPzs\": false\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions\"\n}\n"
  },
  {
    "path": "test-data/lb2/json-dumps/compute-serial-port-output-neg-vm.json",
    "content": "{\n  \"kind\": \"compute#serialPortOutput\",\n  \"contents\": \"\\u001b[2J\\u001b[01;01H\\u001b[=3h\\u001b[2J\\u001b[01;01H\\u001b[2J\\u001b[01;01H\\u001b[=3h\\u001b[2J\\u001b[01;01HCSM BBS Table full.\\r\\nBdsDxe: loading Boot0001 \\\"UEFI Google PersistentDisk \\\" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\\r\\nBdsDxe: starting Boot0001 \\\"UEFI Google PersistentDisk \\\" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\\r\\n\\r\\nUEFI: Attempting to start image.\\r\\nDescription: UEFI Google PersistentDisk \\r\\nFilePath: PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\\r\\nOptionNumber: 1.\\r\\n[   20.5] cloud-init[56]: Cloud-init v. 21.4 finished at Thu, 13 Apr 2023 13:53:15 +0000. Datasource DataSourceGCE.  Up 20.49 seconds\",\n  \"start\": \"0\",\n  \"next\": \"63414\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/1010101010/serialPortOutput\"\n}\n"
  },
  {
    "path": "test-data/lb2/json-dumps/compute-serial-port-output-vm-pn3l.json",
    "content": "{\n  \"kind\": \"compute#serialPortOutput\",\n  \"contents\": \"\\u001b[2J\\u001b[01;01H\\u001b[=3h\\u001b[2J\\u001b[01;01H\\u001b[2J\\u001b[01;01H\\u001b[=3h\\u001b[2J\\u001b[01;01HCSM BBS Table full.\\r\\nBdsDxe: loading Boot0001 \\\"UEFI Google PersistentDisk \\\" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\\r\\nBdsDxe: starting Boot0001 \\\"UEFI Google PersistentDisk \\\" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\\r\\n\\r\\nUEFI: Attempting to start image.\\r\\nDescription: UEFI Google PersistentDisk \\r\\nFilePath: PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\\r\\nOptionNumber: 1.\\r\\n[   20.5] cloud-init[56]: Cloud-init v. 21.4 finished at Thu, 13 Apr 2023 13:53:15 +0000. Datasource DataSourceGCE.  Up 20.49 seconds\",\n  \"start\": \"0\",\n  \"next\": \"63414\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-gce1-aaaa/zones/europe-west4-a/instances/1010101010/serialPortOutput\"\n}\n"
  },
  {
    "path": "test-data/lb2/json-dumps/compute-zones.json",
    "content": "{\n  \"kind\": \"compute#zoneList\",\n  \"id\": \"projects/gcpdiag-lb2-aaaa/zones\",\n  \"items\": [\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2231\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east1-b\",\n      \"description\": \"us-east1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Google Axion\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2233\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east1-c\",\n      \"description\": \"us-east1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Google Axion\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2234\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east1-d\",\n      \"description\": \"us-east1-d\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east1-d\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2272\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east4-c\",\n      \"description\": \"us-east4-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-east4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east4-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Google Axion\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2271\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east4-b\",\n      \"description\": \"us-east4-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-east4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east4-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2270\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east4-a\",\n      \"description\": \"us-east4-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-east4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east4-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2002\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1-c\",\n      \"description\": \"us-central1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-central1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Google Axion\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2000\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1-a\",\n      \"description\": \"us-central1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-central1-a\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Google Axion\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2004\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1-f\",\n      \"description\": \"us-central1-f\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-central1-f\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2001\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1-b\",\n      \"description\": \"us-central1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-central1-b\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Google Axion\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2211\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west1-b\",\n      \"description\": \"us-west1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-west1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2212\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west1-c\",\n      \"description\": \"us-west1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-west1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2210\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west1-a\",\n      \"description\": \"us-west1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-west1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2342\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west4-a\",\n      \"description\": \"europe-west4-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-a\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Google Axion\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2341\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west4-b\",\n      \"description\": \"europe-west4-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-b\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2340\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west4-c\",\n      \"description\": \"europe-west4-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-c\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2101\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west1-b\",\n      \"description\": \"europe-west1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2104\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west1-d\",\n      \"description\": \"europe-west1-d\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west1-d\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2103\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west1-c\",\n      \"description\": \"europe-west1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2300\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west3-c\",\n      \"description\": \"europe-west3-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west3-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2301\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west3-a\",\n      \"description\": \"europe-west3-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west3-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Google Axion\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2302\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west3-b\",\n      \"description\": \"europe-west3-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west3-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2292\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west2-c\",\n      \"description\": \"europe-west2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2291\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west2-b\",\n      \"description\": \"europe-west2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2290\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west2-a\",\n      \"description\": \"europe-west2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2221\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east1-b\",\n      \"description\": \"asia-east1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-east1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2220\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east1-a\",\n      \"description\": \"asia-east1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-east1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2222\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east1-c\",\n      \"description\": \"asia-east1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-east1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2261\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast1-b\",\n      \"description\": \"asia-southeast1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-southeast1-b\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2260\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast1-a\",\n      \"description\": \"asia-southeast1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-southeast1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2262\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast1-c\",\n      \"description\": \"asia-southeast1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-southeast1-c\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2251\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast1-b\",\n      \"description\": \"asia-northeast1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-northeast1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2252\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast1-c\",\n      \"description\": \"asia-northeast1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-northeast1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2250\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast1-a\",\n      \"description\": \"asia-northeast1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-northeast1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2322\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south1-c\",\n      \"description\": \"asia-south1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-south1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2320\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south1-b\",\n      \"description\": \"asia-south1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-south1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2321\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south1-a\",\n      \"description\": \"asia-south1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-south1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2282\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast1-b\",\n      \"description\": \"australia-southeast1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/australia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/australia-southeast1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2280\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast1-c\",\n      \"description\": \"australia-southeast1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/australia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/australia-southeast1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2281\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast1-a\",\n      \"description\": \"australia-southeast1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/australia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/australia-southeast1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2311\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-east1-b\",\n      \"description\": \"southamerica-east1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/southamerica-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/southamerica-east1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2312\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-east1-c\",\n      \"description\": \"southamerica-east1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/southamerica-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/southamerica-east1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2310\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-east1-a\",\n      \"description\": \"southamerica-east1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/southamerica-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/southamerica-east1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2611\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"africa-south1-a\",\n      \"description\": \"africa-south1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/africa-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/africa-south1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2610\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"africa-south1-b\",\n      \"description\": \"africa-south1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/africa-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/africa-south1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2612\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"africa-south1-c\",\n      \"description\": \"africa-south1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/africa-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/africa-south1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2372\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east2-a\",\n      \"description\": \"asia-east2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-east2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-east2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2371\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east2-b\",\n      \"description\": \"asia-east2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-east2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-east2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2370\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east2-c\",\n      \"description\": \"asia-east2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-east2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-east2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2392\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast2-a\",\n      \"description\": \"asia-northeast2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-northeast2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2390\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast2-b\",\n      \"description\": \"asia-northeast2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-northeast2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2391\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast2-c\",\n      \"description\": \"asia-northeast2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-northeast2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2410\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast3-a\",\n      \"description\": \"asia-northeast3-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-northeast3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-northeast3-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2412\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast3-b\",\n      \"description\": \"asia-northeast3-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-northeast3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-northeast3-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2411\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast3-c\",\n      \"description\": \"asia-northeast3-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-northeast3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-northeast3-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2470\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south2-a\",\n      \"description\": \"asia-south2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-south2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-south2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2472\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south2-b\",\n      \"description\": \"asia-south2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-south2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-south2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2471\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south2-c\",\n      \"description\": \"asia-south2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-south2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-south2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2440\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast2-a\",\n      \"description\": \"asia-southeast2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-southeast2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2442\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast2-b\",\n      \"description\": \"asia-southeast2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-southeast2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2441\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast2-c\",\n      \"description\": \"asia-southeast2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/asia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/asia-southeast2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2480\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast2-a\",\n      \"description\": \"australia-southeast2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/australia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/australia-southeast2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2482\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast2-b\",\n      \"description\": \"australia-southeast2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/australia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/australia-southeast2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2481\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast2-c\",\n      \"description\": \"australia-southeast2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/australia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/australia-southeast2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2452\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-central2-a\",\n      \"description\": \"europe-central2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-central2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-central2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2450\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-central2-b\",\n      \"description\": \"europe-central2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-central2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-central2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2451\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-central2-c\",\n      \"description\": \"europe-central2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-central2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-central2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2352\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-north1-a\",\n      \"description\": \"europe-north1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-north1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-north1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2350\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-north1-b\",\n      \"description\": \"europe-north1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-north1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-north1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2351\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-north1-c\",\n      \"description\": \"europe-north1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-north1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-north1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2541\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-southwest1-a\",\n      \"description\": \"europe-southwest1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-southwest1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-southwest1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2540\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-southwest1-b\",\n      \"description\": \"europe-southwest1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-southwest1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-southwest1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2542\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-southwest1-c\",\n      \"description\": \"europe-southwest1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-southwest1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-southwest1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2591\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west10-a\",\n      \"description\": \"europe-west10-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west10\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west10-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2592\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west10-b\",\n      \"description\": \"europe-west10-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west10\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west10-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2590\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west10-c\",\n      \"description\": \"europe-west10-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west10\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west10-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2571\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west12-a\",\n      \"description\": \"europe-west12-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west12\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west12-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2572\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west12-b\",\n      \"description\": \"europe-west12-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west12\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west12-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2570\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west12-c\",\n      \"description\": \"europe-west12-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west12\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west12-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2382\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west6-a\",\n      \"description\": \"europe-west6-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west6\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west6-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2380\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west6-b\",\n      \"description\": \"europe-west6-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west6\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west6-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2381\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west6-c\",\n      \"description\": \"europe-west6-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west6\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west6-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2510\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west8-a\",\n      \"description\": \"europe-west8-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west8\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west8-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2511\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west8-b\",\n      \"description\": \"europe-west8-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west8\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west8-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2512\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west8-c\",\n      \"description\": \"europe-west8-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west8\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west8-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2521\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west9-a\",\n      \"description\": \"europe-west9-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west9\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west9-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2520\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west9-b\",\n      \"description\": \"europe-west9-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west9\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west9-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2522\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west9-c\",\n      \"description\": \"europe-west9-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west9\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west9-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2580\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central1-a\",\n      \"description\": \"me-central1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/me-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/me-central1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2581\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central1-b\",\n      \"description\": \"me-central1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/me-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/me-central1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2582\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central1-c\",\n      \"description\": \"me-central1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/me-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/me-central1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2601\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central2-a\",\n      \"description\": \"me-central2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/me-central2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/me-central2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2602\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central2-b\",\n      \"description\": \"me-central2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/me-central2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/me-central2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2600\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central2-c\",\n      \"description\": \"me-central2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/me-central2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/me-central2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2561\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-west1-a\",\n      \"description\": \"me-west1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/me-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/me-west1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2560\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-west1-b\",\n      \"description\": \"me-west1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/me-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/me-west1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2562\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-west1-c\",\n      \"description\": \"me-west1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/me-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/me-west1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2330\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast1-a\",\n      \"description\": \"northamerica-northeast1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/northamerica-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/northamerica-northeast1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2331\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast1-b\",\n      \"description\": \"northamerica-northeast1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/northamerica-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/northamerica-northeast1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2332\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast1-c\",\n      \"description\": \"northamerica-northeast1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/northamerica-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/northamerica-northeast1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2461\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast2-a\",\n      \"description\": \"northamerica-northeast2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/northamerica-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/northamerica-northeast2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2460\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast2-b\",\n      \"description\": \"northamerica-northeast2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/northamerica-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/northamerica-northeast2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2462\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast2-c\",\n      \"description\": \"northamerica-northeast2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/northamerica-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/northamerica-northeast2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2490\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-west1-a\",\n      \"description\": \"southamerica-west1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/southamerica-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/southamerica-west1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2491\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-west1-b\",\n      \"description\": \"southamerica-west1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/southamerica-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/southamerica-west1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2492\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-west1-c\",\n      \"description\": \"southamerica-west1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/southamerica-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/southamerica-west1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2532\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east5-a\",\n      \"description\": \"us-east5-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-east5\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east5-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2531\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east5-b\",\n      \"description\": \"us-east5-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-east5\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east5-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2530\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east5-c\",\n      \"description\": \"us-east5-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-east5\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-east5-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2551\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-south1-a\",\n      \"description\": \"us-south1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-south1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2552\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-south1-b\",\n      \"description\": \"us-south1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-south1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2550\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-south1-c\",\n      \"description\": \"us-south1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-south1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2362\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west2-a\",\n      \"description\": \"us-west2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-west2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2361\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west2-b\",\n      \"description\": \"us-west2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-west2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2360\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west2-c\",\n      \"description\": \"us-west2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-west2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2420\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west3-a\",\n      \"description\": \"us-west3-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-west3-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2421\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west3-b\",\n      \"description\": \"us-west3-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-west3-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2422\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west3-c\",\n      \"description\": \"us-west3-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-west3-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2431\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west4-a\",\n      \"description\": \"us-west4-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-west4-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2432\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west4-b\",\n      \"description\": \"us-west4-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-west4-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2430\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west4-c\",\n      \"description\": \"us-west4-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/us-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/us-west4-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones\"\n}\n"
  },
  {
    "path": "test-data/lb2/json-dumps/healthChecks.json",
    "content": "{\n  \"kind\": \"compute#healthCheckList\",\n  \"id\": \"projects/gcpdiag-lb1-aaaa/global/healthChecks/\",\n  \"items\": [\n    {\n      \"kind\": \"compute#healthCheck\",\n      \"id\": \"6570916794820924287\",\n      \"creationTimestamp\": \"2023-11-22T17:40:32.481-08:00\",\n      \"name\": \"http-basic-check\",\n      \"checkIntervalSec\": 5,\n      \"timeoutSec\": 5,\n      \"unhealthyThreshold\": 2,\n      \"healthyThreshold\": 2,\n      \"type\": \"HTTP\",\n      \"httpHealthCheck\": {\n        \"port\": 80,\n        \"portSpecification\": \"USE_FIXED_PORT\",\n        \"requestPath\": \"/\",\n        \"proxyHeader\": \"NONE\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/global/healthChecks/http-basic-check\",\n      \"logConfig\": {\n        \"enable\": true\n      }\n    },\n    {\n      \"kind\": \"compute#healthCheck\",\n      \"id\": \"2011808073814110499\",\n      \"creationTimestamp\": \"2023-11-22T11:00:28.722-08:00\",\n      \"name\": \"http-basic-check-2\",\n      \"checkIntervalSec\": 5,\n      \"timeoutSec\": 5,\n      \"unhealthyThreshold\": 2,\n      \"healthyThreshold\": 2,\n      \"type\": \"HTTP\",\n      \"httpHealthCheck\": {\n        \"port\": 80,\n        \"portSpecification\": \"USE_FIXED_PORT\",\n        \"requestPath\": \"/\",\n        \"proxyHeader\": \"NONE\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/global/healthChecks/http-basic-check-2\"\n    },\n    {\n      \"kind\": \"compute#healthCheck\",\n      \"id\": \"4700445592381550883\",\n      \"creationTimestamp\": \"2023-11-22T11:00:28.748-08:00\",\n      \"name\": \"tcp-basic-check-1\",\n      \"checkIntervalSec\": 5,\n      \"timeoutSec\": 5,\n      \"unhealthyThreshold\": 2,\n      \"healthyThreshold\": 2,\n      \"type\": \"TCP\",\n      \"tcpHealthCheck\": {\n        \"port\": 80,\n        \"proxyHeader\": \"NONE\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/global/healthChecks/tcp-basic-check-1\",\n      \"logConfig\": {\n        \"enable\": true\n      }\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb1-aaaa/global/healthChecks/\"\n}\n"
  },
  {
    "path": "test-data/lb2/json-dumps/lb-insights-europe-west4.json",
    "content": "{}\n"
  },
  {
    "path": "test-data/lb2/json-dumps/lb-insights-global.json",
    "content": "{\n  \"insights\": [\n    {\n      \"name\": \"projects/12340009/locations/global/insightTypes/google.networkanalyzer.networkservices.loadBalancerInsight/insights/1a5cab32-909c-4c1b-ac5c-848c6fe54c23\",\n      \"description\": \"Backend services use different ports for health check and traffic\",\n      \"content\": {\n        \"backendServiceInfos\": [\n          {\n            \"backendServiceUri\": \"//compute.googleapis.com/projects/gcpdiag-lb2-aaaa/global/backendServices/web-backend-service\",\n            \"associatedForwardingRuleUris\": [\n              \"//compute.googleapis.com/projects/gcpdiag-lb2-aaaa/global/forwardingRules/http-content-rule\"\n            ],\n            \"impactedInstanceGroupUris\": [\n              \"//compute.googleapis.com/projects/gcpdiag-lb2-aaaa/zones/us-east1-b/instanceGroups/lb-backend-example\"\n            ],\n            \"servingPortName\": \"http\",\n            \"healthCheckUri\": \"//compute.googleapis.com/projects/gcpdiag-lb2-aaaa/global/healthChecks/http-basic-check\",\n            \"healthCheckPortNumber\": 88\n          }\n        ]\n      },\n      \"lastRefreshTime\": \"2024-09-23T07:02:04.526707434Z\",\n      \"observationPeriod\": \"3611220.209060096s\",\n      \"stateInfo\": {\n        \"state\": \"ACTIVE\"\n      },\n      \"category\": \"PERFORMANCE\",\n      \"targetResources\": [\n        \"//cloudresourcemanager.googleapis.com/projects/gcpdiag-lb2-aaaa\"\n      ],\n      \"insightSubtype\": \"HEALTH_CHECK_PORT_MISMATCH\",\n      \"etag\": \"\\\"381e11271a290275\\\"\",\n      \"severity\": \"LOW\"\n    },\n    {\n      \"name\": \"projects/12340009/locations/global/insightTypes/google.networkanalyzer.networkservices.loadBalancerInsight/insights/c50f45a6-968b-4f52-a784-3e86f60d1163\",\n      \"description\": \"Health check firewall is not configured\",\n      \"content\": {\n        \"forwardingRuleUri\": \"//compute.googleapis.com/projects/gcpdiag-lb2-aaaa/global/forwardingRules/http-content-rule\",\n        \"loadBalancerType\": \"EXTERNAL_HTTP_PROXY\",\n        \"loadBalancerName\": \"web-map-http\",\n        \"loadBalancerUri\": \"//compute.googleapis.com/projects/gcpdiag-lb2-aaaa/global/urlMaps/web-map-http\",\n        \"healthCheckFirewallInfo\": {\n          \"misconfiguredInstanceUris\": [\n            \"//compute.googleapis.com/projects/gcpdiag-lb2-aaaa/zones/us-east1-b/instances/vm-m5q1\",\n            \"//compute.googleapis.com/projects/gcpdiag-lb2-aaaa/zones/us-east1-b/instances/vm-pn3l\"\n          ],\n          \"matchedFirewalls\": [\n            {\n              \"firewallUri\": \"gcpdiag-lb2-aaaa::default::default-deny-ingress\",\n              \"firewallAction\": \"DENY\"\n            }\n          ]\n        }\n      },\n      \"lastRefreshTime\": \"2024-09-23T07:02:04.602359880Z\",\n      \"observationPeriod\": \"3611997.221035498s\",\n      \"stateInfo\": {\n        \"state\": \"ACTIVE\"\n      },\n      \"category\": \"PERFORMANCE\",\n      \"targetResources\": [\n        \"//compute.googleapis.com/projects/gcpdiag-lb2-aaaa/global/forwardingRules/http-content-rule\"\n      ],\n      \"insightSubtype\": \"HEALTH_CHECK_FIREWALL_NOT_CONFIGURED\",\n      \"etag\": \"\\\"5abfcf123b1d11e6\\\"\",\n      \"severity\": \"MEDIUM\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/lb2/json-dumps/logging-entries-1.json",
    "content": "{\n  \"entries\": [\n    {\n      \"insertId\": \"13pdgcnc969\",\n      \"jsonPayload\": {\n        \"healthCheckProbeResult\": {\n          \"healthState\": \"UNHEALTHY\",\n          \"previousHealthState\": \"HEALTHY\",\n          \"targetIp\": \"10.142.0.2\",\n          \"ipAddress\": \"10.142.0.2\",\n          \"probeCompletionTimestamp\": \"2024-08-13T09:20:21.631554663Z\",\n          \"targetPort\": 80,\n          \"probeRequest\": \"/\",\n          \"probeSourceIp\": \"35.191.193.100\",\n          \"probeResultText\": \"HTTP response: , Error: Timeout waiting for connect\",\n          \"healthCheckProtocol\": \"HTTP\",\n          \"responseLatency\": \"5.001402s\",\n          \"detailedHealthState\": \"TIMEOUT\",\n          \"previousDetailedHealthState\": \"HEALTHY\"\n        }\n      },\n      \"resource\": {\n        \"type\": \"gce_instance_group\",\n        \"labels\": {\n          \"instance_group_id\": \"3727997629940134718\",\n          \"project_id\": \"gcpdiag-lb2-aaaa\",\n          \"location\": \"us-east1-b\",\n          \"instance_group_name\": \"lb-backend-example\"\n        }\n      },\n      \"timestamp\": \"2024-08-13T09:20:22.199333012Z\",\n      \"severity\": \"INFO\",\n      \"logName\": \"projects/gcpdiag-lb2-aaaa/logs/compute.googleapis.com%2Fhealthchecks\",\n      \"receiveTimestamp\": \"2024-08-13T09:20:22.666336211Z\"\n    },\n    {\n      \"insertId\": \"13pdgcnc968\",\n      \"jsonPayload\": {\n        \"healthCheckProbeResult\": {\n          \"previousDetailedHealthState\": \"HEALTHY\",\n          \"probeCompletionTimestamp\": \"2024-08-13T09:20:21.475813306Z\",\n          \"healthCheckProtocol\": \"HTTP\",\n          \"ipAddress\": \"10.142.0.3\",\n          \"detailedHealthState\": \"TIMEOUT\",\n          \"healthState\": \"UNHEALTHY\",\n          \"probeSourceIp\": \"35.191.193.100\",\n          \"probeResultText\": \"HTTP response: , Error: Timeout waiting for connect\",\n          \"targetIp\": \"10.142.0.3\",\n          \"probeRequest\": \"/\",\n          \"targetPort\": 80,\n          \"responseLatency\": \"5.000828s\",\n          \"previousHealthState\": \"HEALTHY\"\n        }\n      },\n      \"resource\": {\n        \"type\": \"gce_instance_group\",\n        \"labels\": {\n          \"instance_group_name\": \"lb-backend-example\",\n          \"location\": \"us-east1-b\",\n          \"project_id\": \"gcpdiag-lb2-aaaa\",\n          \"instance_group_id\": \"3727997629940134718\"\n        }\n      },\n      \"timestamp\": \"2024-08-13T09:20:22.199260545Z\",\n      \"severity\": \"INFO\",\n      \"logName\": \"projects/gcpdiag-lb2-aaaa/logs/compute.googleapis.com%2Fhealthchecks\",\n      \"receiveTimestamp\": \"2024-08-13T09:20:22.666336211Z\"\n    },\n    {\n      \"insertId\": \"13pdgcnc7o7\",\n      \"jsonPayload\": {\n        \"healthCheckProbeResult\": {\n          \"previousDetailedHealthState\": \"UNKNOWN\",\n          \"healthState\": \"UNHEALTHY\",\n          \"probeRequest\": \"/\",\n          \"probeCompletionTimestamp\": \"2024-08-12T11:38:21.925734077Z\",\n          \"targetPort\": 88,\n          \"ipAddress\": \"10.142.0.3\",\n          \"probeResultText\": \"HTTP response: , Error: Timeout waiting for connect\",\n          \"targetIp\": \"10.142.0.3\",\n          \"previousHealthState\": \"UNHEALTHY\",\n          \"probeSourceIp\": \"35.191.193.100\",\n          \"responseLatency\": \"5.000532s\",\n          \"healthCheckProtocol\": \"HTTP\",\n          \"detailedHealthState\": \"TIMEOUT\"\n        }\n      },\n      \"resource\": {\n        \"type\": \"gce_instance_group\",\n        \"labels\": {\n          \"location\": \"us-east1-b\",\n          \"instance_group_name\": \"lb-backend-example\",\n          \"instance_group_id\": \"3727997629940134718\",\n          \"project_id\": \"gcpdiag-lb2-aaaa\"\n        }\n      },\n      \"timestamp\": \"2024-08-12T11:38:23.660085464Z\",\n      \"severity\": \"INFO\",\n      \"logName\": \"projects/gcpdiag-lb2-aaaa/logs/compute.googleapis.com%2Fhealthchecks\",\n      \"receiveTimestamp\": \"2024-08-12T11:38:24.424194648Z\"\n    },\n    {\n      \"insertId\": \"13pdgcnc7o6\",\n      \"jsonPayload\": {\n        \"healthCheckProbeResult\": {\n          \"ipAddress\": \"10.142.0.2\",\n          \"probeSourceIp\": \"35.191.193.101\",\n          \"probeRequest\": \"/\",\n          \"previousHealthState\": \"UNHEALTHY\",\n          \"responseLatency\": \"5.000717s\",\n          \"targetIp\": \"10.142.0.2\",\n          \"targetPort\": 88,\n          \"probeResultText\": \"HTTP response: , Error: Timeout waiting for connect\",\n          \"healthCheckProtocol\": \"HTTP\",\n          \"healthState\": \"UNHEALTHY\",\n          \"probeCompletionTimestamp\": \"2024-08-12T11:38:22.220641335Z\",\n          \"previousDetailedHealthState\": \"UNKNOWN\",\n          \"detailedHealthState\": \"TIMEOUT\"\n        }\n      },\n      \"resource\": {\n        \"type\": \"gce_instance_group\",\n        \"labels\": {\n          \"instance_group_id\": \"3727997629940134718\",\n          \"project_id\": \"gcpdiag-lb2-aaaa\",\n          \"location\": \"us-east1-b\",\n          \"instance_group_name\": \"lb-backend-example\"\n        }\n      },\n      \"timestamp\": \"2024-08-12T11:38:23.489417160Z\",\n      \"severity\": \"INFO\",\n      \"logName\": \"projects/gcpdiag-lb2-aaaa/logs/compute.googleapis.com%2Fhealthchecks\",\n      \"receiveTimestamp\": \"2024-08-12T11:38:24.424194648Z\"\n    },\n    {\n      \"insertId\": \"13pdgcnc7o5\",\n      \"jsonPayload\": {\n        \"healthCheckProbeResult\": {\n          \"targetPort\": 80,\n          \"detailedHealthState\": \"TIMEOUT\",\n          \"targetIp\": \"10.142.0.3\",\n          \"probeCompletionTimestamp\": \"2024-08-12T11:38:02.158189861Z\",\n          \"responseLatency\": \"5.001404s\",\n          \"probeSourceIp\": \"35.191.193.100\",\n          \"ipAddress\": \"10.142.0.3\",\n          \"healthCheckProtocol\": \"HTTP\",\n          \"previousDetailedHealthState\": \"HEALTHY\",\n          \"probeResultText\": \"HTTP response: , Error: Timeout waiting for connect\",\n          \"probeRequest\": \"/\",\n          \"previousHealthState\": \"HEALTHY\",\n          \"healthState\": \"UNHEALTHY\"\n        }\n      },\n      \"resource\": {\n        \"type\": \"gce_instance_group\",\n        \"labels\": {\n          \"location\": \"us-east1-b\",\n          \"instance_group_id\": \"3727997629940134718\",\n          \"project_id\": \"gcpdiag-lb2-aaaa\",\n          \"instance_group_name\": \"lb-backend-example\"\n        }\n      },\n      \"timestamp\": \"2024-08-12T11:38:03.660044569Z\",\n      \"severity\": \"INFO\",\n      \"logName\": \"projects/gcpdiag-lb2-aaaa/logs/compute.googleapis.com%2Fhealthchecks\",\n      \"receiveTimestamp\": \"2024-08-12T11:38:05.414612124Z\"\n    },\n    {\n      \"insertId\": \"13pdgcnc7o4\",\n      \"jsonPayload\": {\n        \"healthCheckProbeResult\": {\n          \"targetPort\": 80,\n          \"responseLatency\": \"5.001105s\",\n          \"probeRequest\": \"/\",\n          \"previousHealthState\": \"HEALTHY\",\n          \"previousDetailedHealthState\": \"HEALTHY\",\n          \"healthState\": \"UNHEALTHY\",\n          \"healthCheckProtocol\": \"HTTP\",\n          \"probeCompletionTimestamp\": \"2024-08-12T11:38:02.26396931Z\",\n          \"ipAddress\": \"10.142.0.2\",\n          \"targetIp\": \"10.142.0.2\",\n          \"detailedHealthState\": \"TIMEOUT\",\n          \"probeSourceIp\": \"35.191.193.98\",\n          \"probeResultText\": \"HTTP response: , Error: Timeout waiting for connect\"\n        }\n      },\n      \"resource\": {\n        \"type\": \"gce_instance_group\",\n        \"labels\": {\n          \"project_id\": \"gcpdiag-lb2-aaaa\",\n          \"instance_group_id\": \"3727997629940134718\",\n          \"location\": \"us-east1-b\",\n          \"instance_group_name\": \"lb-backend-example\"\n        }\n      },\n      \"timestamp\": \"2024-08-12T11:38:02.660665555Z\",\n      \"severity\": \"INFO\",\n      \"logName\": \"projects/gcpdiag-lb2-aaaa/logs/compute.googleapis.com%2Fhealthchecks\",\n      \"receiveTimestamp\": \"2024-08-12T11:38:04.419383730Z\"\n    }\n  ],\n  \"nextPageToken\": \"EAE455yslIC87crEAUoUIhIiAgoAKgwI_5GitAYQ_5Pr3ANSBwikyrGfiR5gkv2gpYXD9KyKAWocCgwI-MrstQYQnuiagQMSCAgFEMavvr8BGAYgAA\"\n}\n"
  },
  {
    "path": "test-data/lb2/json-dumps/monitoring-query.json",
    "content": "{\n  \"timeSeriesDescriptor\": {\n    \"labelDescriptors\": [\n      {\n        \"key\": \"resource.zone\"\n      },\n      {\n        \"key\": \"metric.instance_name\"\n      }\n    ],\n    \"pointDescriptors\": [\n      {\n        \"key\": \"value_uptime_total_aggregate_mean\",\n        \"valueType\": \"DOUBLE\",\n        \"metricKind\": \"GAUGE\",\n        \"unit\": \"s\"\n      },\n      {\n        \"key\": \"value_uptime_total_aggregate_count\",\n        \"valueType\": \"INT64\",\n        \"metricKind\": \"GAUGE\",\n        \"unit\": \"1\"\n      }\n    ]\n  },\n  \"timeSeriesData\": [\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"europe-west4-b\"\n        },\n        {\n          \"stringValue\": \"neg-vm\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 1219297\n            },\n            {\n              \"int64Value\": \"4\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-08-27T15:45:06.919908Z\",\n            \"endTime\": \"2024-08-27T15:45:06.919908Z\"\n          }\n        },\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 1219027\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-08-27T15:40:06.919908Z\",\n            \"endTime\": \"2024-08-27T15:40:06.919908Z\"\n          }\n        }\n      ]\n    },\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"us-east1-b\"\n        },\n        {\n          \"stringValue\": \"vm-pn3l\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 1320395\n            },\n            {\n              \"int64Value\": \"4\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-08-27T15:45:06.919908Z\",\n            \"endTime\": \"2024-08-27T15:45:06.919908Z\"\n          }\n        },\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 1320125\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-08-27T15:40:06.919908Z\",\n            \"endTime\": \"2024-08-27T15:40:06.919908Z\"\n          }\n        }\n      ]\n    },\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"us-east1-b\"\n        },\n        {\n          \"stringValue\": \"vm-m5q1\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 1320407\n            },\n            {\n              \"int64Value\": \"4\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-08-27T15:45:06.919908Z\",\n            \"endTime\": \"2024-08-27T15:45:06.919908Z\"\n          }\n        },\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 1320137\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-08-27T15:40:06.919908Z\",\n            \"endTime\": \"2024-08-27T15:40:06.919908Z\"\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/lb2/json-dumps/project.json",
    "content": "{\n  \"name\": \"projects/12340009\",\n  \"parent\": \"folders/211134714592\",\n  \"projectId\": \"gcpdiag-lb2-aaaa\",\n  \"state\": \"ACTIVE\",\n  \"displayName\": \"gcpdiag test - lb2\",\n  \"createTime\": \"2024-08-09T11:54:30.204573Z\",\n  \"updateTime\": \"2024-08-09T11:54:30.204573Z\",\n  \"etag\": \"W/\\\"d955640477ae431d\\\"\",\n  \"labels\": {\n    \"gcpdiag\": \"test\"\n  }\n}\n"
  },
  {
    "path": "test-data/lb2/json-dumps/regionBackendService-backend-service-2-europe-west4-get-health-networkEndpointGroups-neg1-europe-west4-b.json",
    "content": "{\n  \"kind\": \"compute#backendServiceGroupHealth\",\n  \"healthStatus\": [\n    {\n      \"ipAddress\": \"10.164.0.2\",\n      \"port\": 80,\n      \"instance\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/zones/europe-west4-b/instances/neg-vm\",\n      \"healthState\": \"UNHEALTHY\",\n      \"forwardingRuleIp\": \"34.91.64.191\",\n      \"forwardingRule\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west4/forwardingRules/tcp-content-rule\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/lb2/json-dumps/regionHealthChecks-europe-west4.json",
    "content": "{\n  \"kind\": \"compute#healthCheckList\",\n  \"id\": \"projects/gcpdiag-lb2-aaaa/regions/europe-west4/healthChecks/\",\n  \"items\": [\n    {\n      \"kind\": \"compute#healthCheck\",\n      \"id\": \"2180228872595236041\",\n      \"creationTimestamp\": \"2024-08-13T06:05:42.459-07:00\",\n      \"name\": \"tcp-basic-check-2\",\n      \"checkIntervalSec\": 5,\n      \"timeoutSec\": 5,\n      \"unhealthyThreshold\": 2,\n      \"healthyThreshold\": 2,\n      \"type\": \"TCP\",\n      \"tcpHealthCheck\": {\n        \"port\": 80,\n        \"proxyHeader\": \"NONE\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west4/healthChecks/tcp-basic-check-2\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west4\",\n      \"logConfig\": {\n        \"enable\": true\n      }\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb2-aaaa/regions/europe-west4/healthChecks/\"\n}\n"
  },
  {
    "path": "test-data/lb2/json-dumps/services.json",
    "content": "{\n  \"services\": [\n    {\n      \"name\": \"projects/12340009/services/compute.googleapis.com\",\n      \"config\": {\n        \"name\": \"compute.googleapis.com\",\n        \"title\": \"Compute Engine API\",\n        \"documentation\": {\n          \"summary\": \"Creates and runs virtual machines on Google Cloud Platform.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"compute.googleapis.com/VpcNetwork\",\n            \"displayName\": \"VPC Network\",\n            \"description\": \"VPC Network.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the VPC Network.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the VPC Network, global always.\"\n              },\n              {\n                \"key\": \"network_id\",\n                \"description\": \"VPC Network resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Location\",\n            \"displayName\": \"Compute Location\",\n            \"description\": \"A location in the Compute API.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the Compute Location.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Interconnect\",\n            \"displayName\": \"Interconnect\",\n            \"description\": \"Interconnect.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the Interconnect.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the Interconnect.\"\n              },\n              {\n                \"key\": \"interconnect_id\",\n                \"description\": \"Interconnect resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/FirewallPolicy\",\n            \"displayName\": \"Firewall policy\",\n            \"description\": \"Firewall policy.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project or organization) associated with the firewall policy.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the firewall policy.\"\n              },\n              {\n                \"key\": \"firewall_policy_id\",\n                \"description\": \"Firewall policy resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/SecurityPolicy\",\n            \"displayName\": \"Security policy\",\n            \"description\": \"Security policy.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the security policy.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the security policy.\"\n              },\n              {\n                \"key\": \"security_policy_id\",\n                \"description\": \"Security policy resource ID.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/OperationType\",\n            \"displayName\": \"Operation Type\",\n            \"description\": \"Operation Type.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the operation.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the operation.\"\n              },\n              {\n                \"key\": \"operation_type\",\n                \"description\": \"Operation type.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Reservation\",\n            \"displayName\": \"Reservation\",\n            \"description\": \"Monitored resource representing a reservation.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container (e.g. project number) associated with the reservation.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The zone that contains the reservation.\"\n              },\n              {\n                \"key\": \"reservation_id\",\n                \"description\": \"Reservation resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/StoragePool\",\n            \"displayName\": \"Storage Pool\",\n            \"description\": \"Monitored resource representing a storage pool.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container (e.g. project number) associated with the reservation.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location that contains the storage pool.\"\n              },\n              {\n                \"key\": \"storage_pool_id\",\n                \"description\": \"Numerical resource ID of the storage pool.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"gce_instance\",\n            \"displayName\": \"VM Instance\",\n            \"description\": \"A virtual machine instance hosted in Compute Engine.\",\n            \"labels\": [\n              {\n                \"key\": \"project_id\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as \\\"my-project\\\".\"\n              },\n              {\n                \"key\": \"instance_id\",\n                \"description\": \"The numeric VM instance identifier assigned by Compute Engine.\"\n              },\n              {\n                \"key\": \"zone\",\n                \"description\": \"The Compute Engine zone in which the VM is running.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network\",\n                \"compute.googleapis.com/cloud_router_prefixes_from_own_region_per_region_per_vpc_network\",\n                \"compute.googleapis.com/dynamic_routes_per_region_per_peering_group\",\n                \"compute.googleapis.com/global_internal_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/instances_per_peering_group\",\n                \"compute.googleapis.com/instances_per_vpc_network\",\n                \"compute.googleapis.com/internal_lb_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_managed_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_protocol_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/ip_aliases_per_peering_group\",\n                \"compute.googleapis.com/ip_aliases_per_vpc_network\",\n                \"compute.googleapis.com/peerings_per_vpc_network\",\n                \"compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network\",\n                \"compute.googleapis.com/psc_propagated_connections_per_vpc_network\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/exceeded\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/regional_external_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/regional_internal_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/static_routes_per_peering_group\",\n                \"compute.googleapis.com/static_routes_per_vpc_network\",\n                \"compute.googleapis.com/subnet_ranges_per_peering_group\",\n                \"compute.googleapis.com/subnet_ranges_per_vpc_network\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Location\",\n              \"metrics\": [\n                \"compute.googleapis.com/cpus_per_vm_family\",\n                \"compute.googleapis.com/global_dns/request_count\",\n                \"compute.googleapis.com/gpus_per_gpu_family\",\n                \"compute.googleapis.com/inter_region_egress_bandwidth\",\n                \"compute.googleapis.com/local_ssd_total_storage_per_vm_family\",\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/exceeded\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/exceeded\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/exceeded\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/usage\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/exceeded\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/exceeded\",\n                \"compute.googleapis.com/quota/tpus_per_tpu_family/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Interconnect\",\n              \"metrics\": [\n                \"compute.googleapis.com/interconnect_attachments_per_interconnect\",\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/FirewallPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/fqdns_per_global_network_firewall_policy\",\n                \"compute.googleapis.com/fqdns_per_hierarchical_firewall_policy\",\n                \"compute.googleapis.com/fqdns_per_regional_network_firewall_policy\",\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/rule_attributes_per_global_network_firewall_policy\",\n                \"compute.googleapis.com/rule_attributes_per_hierarchical_firewall_policy\",\n                \"compute.googleapis.com/rule_attributes_per_regional_network_firewall_policy\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/SecurityPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/advanced_rules_per_edge_security_policy\",\n                \"compute.googleapis.com/advanced_rules_per_regional_security_policy\",\n                \"compute.googleapis.com/advanced_rules_per_security_policy\",\n                \"compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/exceeded\",\n                \"compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/exceeded\",\n                \"compute.googleapis.com/quota/advanced_rules_per_security_policy/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/OperationType\",\n              \"metrics\": [\n                \"compute.googleapis.com/global_concurrent_operations\",\n                \"compute.googleapis.com/quota/concurrent/global_concurrent_operations/exceeded\",\n                \"compute.googleapis.com/quota/concurrent/internal/global_concurrent_operations/combined_units\",\n                \"compute.googleapis.com/quota/concurrent/internal/regional_concurrent_operations/combined_units\",\n                \"compute.googleapis.com/quota/concurrent/regional_concurrent_operations/exceeded\",\n                \"compute.googleapis.com/regional_concurrent_operations\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"gce_instance\",\n              \"metrics\": [\n                \"compute.googleapis.com/instance/global_dns/request_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Reservation\",\n              \"metrics\": [\n                \"compute.googleapis.com/reservation/reserved\",\n                \"compute.googleapis.com/reservation/assured\",\n                \"compute.googleapis.com/reservation/used\",\n                \"compute.googleapis.com/reservation/internal/matching_instances\",\n                \"compute.googleapis.com/reservation/internal/prespuns_by_state\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/StoragePool\",\n              \"metrics\": [\n                \"compute.googleapis.com/storage_pool/disks\",\n                \"compute.googleapis.com/storage_pool/provisioned_capacity\",\n                \"compute.googleapis.com/storage_pool/used_capacity\",\n                \"compute.googleapis.com/storage_pool/total_disk_provisioned_capacity\",\n                \"compute.googleapis.com/storage_pool/provisioned_iops\",\n                \"compute.googleapis.com/storage_pool/used_iops\",\n                \"compute.googleapis.com/storage_pool/total_disk_provisioned_iops\",\n                \"compute.googleapis.com/storage_pool/provisioned_throughput\",\n                \"compute.googleapis.com/storage_pool/used_throughput\",\n                \"compute.googleapis.com/storage_pool/total_disk_provisioned_throughput\",\n                \"compute.googleapis.com/storage_pool/capacity_utilization\",\n                \"compute.googleapis.com/storage_pool/iops_utilization\",\n                \"compute.googleapis.com/storage_pool/throughput_utilization\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Location\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/limit\",\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/usage\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/limit\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/usage\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/limit\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/limit\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/usage\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/limit\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/usage\",\n                \"compute.googleapis.com/quota/tpus_per_tpu_family/limit\",\n                \"compute.googleapis.com/quota/tpus_per_tpu_family/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/limit\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/usage\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/limit\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/usage\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Interconnect\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/limit\",\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/FirewallPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/SecurityPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/limit\",\n                \"compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/usage\",\n                \"compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/limit\",\n                \"compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/usage\",\n                \"compute.googleapis.com/quota/advanced_rules_per_security_policy/limit\",\n                \"compute.googleapis.com/quota/advanced_rules_per_security_policy/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/OperationType\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/concurrent/global_concurrent_operations/limit\",\n                \"compute.googleapis.com/quota/concurrent/regional_concurrent_operations/limit\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340009\"\n    },\n    {\n      \"name\": \"projects/12340009/services/oslogin.googleapis.com\",\n      \"config\": {\n        \"name\": \"oslogin.googleapis.com\",\n        \"title\": \"Cloud OS Login API\",\n        \"documentation\": {\n          \"summary\": \"You can use OS Login to manage access to your VM instances using IAM roles.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340009\"\n    },\n    {\n      \"name\": \"projects/12340009/services/recommender.googleapis.com\",\n      \"config\": {\n        \"name\": \"recommender.googleapis.com\",\n        \"title\": \"Recommender API\",\n        \"documentation\": {},\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340009\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/lb2/passthrough-lb-neg.tf",
    "content": "/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n# Passthrough load balancer with NEG backend\n\nresource \"google_compute_network_endpoint\" \"default-endpoint\" {\n  project                = google_project.project.project_id\n  network_endpoint_group = google_compute_network_endpoint_group.neg1.name\n  zone                   = \"europe-west4-b\"\n\n  instance   = google_compute_instance.neg-vm.name\n  ip_address = google_compute_instance.neg-vm.network_interface[0].network_ip\n}\n\nresource \"google_compute_instance\" \"neg-vm\" {\n  project = google_project.project.project_id\n\n  name           = \"neg-vm\"\n  machine_type   = \"e2-medium\"\n  zone           = \"europe-west4-b\"\n  desired_status = \"RUNNING\"\n  network_interface {\n    subnetwork_project = google_project.project.project_id\n    subnetwork         = \"default\"\n  }\n\n  boot_disk {\n    initialize_params {\n      image = \"debian-cloud/debian-11\"\n      labels = {\n        my_label = \"value\"\n      }\n    }\n  }\n\n  metadata_startup_script = \"#! /bin/bash\\n     sudo apt-get update\\n     sudo apt-get install apache2 -y\\n     sudo a2ensite default-ssl\\n     sudo a2enmod ssl\\n     sudo vm_hostname=\\\"$(curl -H \\\"Metadata-Flavor:Google\\\" \\\\\\n   http://169.254.169.254/computeMetadata/v1/instance/name)\\\"\\n   sudo echo \\\"Page served from: $vm_hostname\\\" | \\\\\\n   tee /var/www/html/index.html\\n   sudo systemctl restart apache2\"\n  depends_on              = [google_project_service.compute]\n}\n\nresource \"google_compute_network_endpoint_group\" \"neg1\" {\n  project               = google_project.project.project_id\n  name                  = \"neg1\"\n  network               = \"default\"\n  subnetwork            = \"default\"\n  network_endpoint_type = \"GCE_VM_IP\"\n  zone                  = \"europe-west4-b\"\n  depends_on            = [google_project_service.compute]\n}\n\nresource \"google_compute_firewall\" \"passthrough-lb-firewall\" {\n  project       = google_project.project.project_id\n  depends_on    = [google_project_service.compute]\n  name          = \"fw-allow-passthrough-health-check\"\n  direction     = \"INGRESS\"\n  network       = \"default\"\n  priority      = 1000\n  source_ranges = [\"35.191.0.0/16\", \"209.85.152.0/22\", \"209.85.204.0/22\"]\n  target_tags   = [\"allow-health-check\"]\n  allow {\n    ports    = [\"80\"]\n    protocol = \"tcp\"\n  }\n}\n\nresource \"google_compute_region_health_check\" \"tcp-basic-check-2\" {\n  depends_on = [google_project_service.compute]\n  name       = \"tcp-basic-check-2\"\n  project    = google_project.project.project_id\n  region     = \"europe-west4\"\n\n  check_interval_sec = 5\n  timeout_sec        = 5\n\n  tcp_health_check {\n    port = 80\n  }\n\n  log_config {\n    enable = true\n  }\n}\n\nresource \"google_compute_region_backend_service\" \"backend-service-2\" {\n  name                            = \"backend-service-2\"\n  project                         = google_project.project.project_id\n  region                          = \"europe-west4\"\n  connection_draining_timeout_sec = 0\n  health_checks                   = [google_compute_region_health_check.tcp-basic-check-2.id]\n  load_balancing_scheme           = \"EXTERNAL\"\n  protocol                        = \"TCP\"\n  session_affinity                = \"NONE\"\n  timeout_sec                     = 30\n  backend {\n    group          = google_compute_network_endpoint_group.neg1.id\n    balancing_mode = \"CONNECTION\"\n  }\n}\n\nresource \"google_compute_forwarding_rule\" \"forwarding-rule-1\" {\n  project               = google_project.project.project_id\n  name                  = \"tcp-content-rule\"\n  region                = \"europe-west4\"\n  ip_protocol           = \"TCP\"\n  load_balancing_scheme = \"EXTERNAL\"\n  port_range            = \"80-80\"\n  backend_service       = google_compute_region_backend_service.backend-service-2.id\n}\n"
  },
  {
    "path": "test-data/lb2/project.tf",
    "content": "/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nresource \"random_string\" \"project_id_suffix\" {\n  length  = 8\n  number  = true\n  lower   = true\n  upper   = false\n  special = false\n}\n\nresource \"google_project\" \"project\" {\n  name            = \"gcpdiag test - lb2\"\n  project_id      = \"gcpdiag-lb2-${random_string.project_id_suffix.id}\"\n  org_id          = var.folder_id == \"\" ? var.org_id : null\n  folder_id       = var.folder_id != \"\" ? var.folder_id : null\n  billing_account = var.billing_account_id\n  labels = {\n    gcpdiag : \"test\"\n  }\n}\n\nresource \"google_project_service\" \"compute\" {\n  project = google_project.project.project_id\n  service = \"compute.googleapis.com\"\n}\n\nresource \"google_project_service\" \"recommender\" {\n  project = google_project.project.project_id\n  service = \"recommender.googleapis.com\"\n}\n\noutput \"project_id\" {\n  value = google_project.project.project_id\n}\n\noutput \"project_id_suffix\" {\n  value = random_string.project_id_suffix.id\n}\n\noutput \"project_nr\" {\n  value = google_project.project.number\n}\n\noutput \"org_id\" {\n  value = var.org_id\n}\n"
  },
  {
    "path": "test-data/lb2/variables.tf",
    "content": "variable \"billing_account_id\" {}\n\nvariable \"org_id\" {}\nvariable \"folder_id\" { default = \"\" }\n"
  },
  {
    "path": "test-data/lb3/Makefile",
    "content": "#!/bin/bash\nPROJECT_ID  := $(shell terraform output -raw project_id)\nPROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix)\nPROJECT_NR  := $(shell terraform output -raw project_nr)\nORG_ID      := $(shell terraform output -raw org_id)\nCURL         = ../../bin/curl-wrap.sh\nJSON_CLEANER = ../../bin/json-cleaner\n\nFAKE_PROJECT_ID_SUFFIX = aaaa\nFAKE_PROJECT_NR = 12340009\nFAKE_ORG_ID = 11112222\nSED_SUBST_FAKE = sed -e \"s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/\" \\\n\t\t\t\t-e \"s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/\" \\\n\t\t\t\t-e \"s/$(ORG_ID)/$(FAKE_ORG_ID)/\" \\\n\nREGION1 = europe-west4\n\nZONE1 = us-east1-b\nZONE2 = europe-west4-b\n\nall:\t\\\n\tjson-dumps/project.json \\\n\tjson-dumps/services.json \\\n\tjson-dumps/compute-aggregated-forwardingRules.json \\\n\tjson-dumps/compute-aggregated-backendServices.json \\\n\tjson-dumps/compute-sslCertificates.json \\\n\tjson-dumps/compute-aggregated-targetHttpsProxies.json \\\n\tjson-dumps/compute-targetHttpsProxies.json \\\n\tjson-dumps/compute-targetSslProxies.json \\\n\tjson-dumps/logging-entries-1.json\n\ninclude ../Makefile.inc\n\n# If you need to recreate the JSON: adapt the timestamp and make sure that there are some entries found.\ndefine LOGGING_ENTRIES_BODY\n{\n\t\"resourceNames\": [\"projects/$(PROJECT_ID)\"],\n\t\"orderBy\": \"timestamp desc\",\n\t\"filter\": \"\n\t\tresource.type=\\\"gce_target_https_proxy\\\"\n\t\tresource.labels.target_https_proxy_id=\\\"2209022440749649672\\\"\n\t\tprotoPayload.methodName=~\\\"targetHttpsProxies.(patch|update|insert|setSslCertificates)\\\"\n\t\"\n}\nendef\nexport LOGGING_ENTRIES_BODY\n\njson-dumps/logging-entries-1.json:\n\t$(CURL) -fsS \\\n\t\t'https://logging.googleapis.com/v2/entries:list' \\\n\t\t--header \"Content-Type:text/json\" \\\n\t\t-d \"$$LOGGING_ENTRIES_BODY\" \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-aggregated-forwardingRules.json:\n\t@$(CURL) -fsS \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/aggregated/forwardingRules/' \\\n\t\t| $(SED_SUBST_FAKE) > $@\n\t@python3 update_ip.py < \"$@\" > temp2.json && mv temp2.json \"$@\"\n"
  },
  {
    "path": "test-data/lb3/certs.tf",
    "content": "\nresource \"google_compute_managed_ssl_certificate\" \"cert1\" {\n  project = google_project.project.project_id\n  name    = \"cert1\"\n  managed {\n    domains = [\"natka123.com\", \"second.natka123.com\"]\n  }\n}\n\nresource \"google_compute_managed_ssl_certificate\" \"cert2\" {\n  project = google_project.project.project_id\n  name    = \"cert2\"\n  managed {\n    domains = [\"test.natka123.com\"]\n  }\n}\n\nresource \"google_compute_managed_ssl_certificate\" \"cert3\" {\n  project = google_project.project.project_id\n  name    = \"cert3\"\n  managed {\n    domains = [\"test.org\", \"second.test.org\"]\n  }\n}\n\nresource \"google_compute_managed_ssl_certificate\" \"unused-cert4\" {\n  project = google_project.project.project_id\n  name    = \"unused-cert4\"\n  managed {\n    domains = [\"test.org\", \"second.test.org\"]\n  }\n}\n\nresource \"google_compute_managed_ssl_certificate\" \"cert5\" {\n  project = google_project.project.project_id\n  name    = \"cert5\"\n  managed {\n    domains = [\"test.org\"]\n  }\n}\n"
  },
  {
    "path": "test-data/lb3/https-lb.tf",
    "content": "# External HTTP load balancer\n\n# [START cloudloadbalancing_ext_http_gce_instance_template]\nresource \"google_compute_instance_template\" \"default\" {\n  depends_on = [google_project_service.compute]\n  name       = \"lb-backend-template\"\n  project    = google_project.project.project_id\n  disk {\n    auto_delete  = true\n    boot         = true\n    device_name  = \"persistent-disk-0\"\n    mode         = \"READ_WRITE\"\n    source_image = \"projects/debian-cloud/global/images/family/debian-11\"\n    type         = \"PERSISTENT\"\n  }\n  labels = {\n    managed-by-cnrm = \"true\"\n  }\n  machine_type = \"n1-standard-1\"\n  metadata = {\n    startup-script = \"#! /bin/bash\\n     sudo apt-get update\\n     sudo apt-get install apache2 -y\\n     sudo a2ensite default-ssl\\n     sudo a2enmod ssl\\n     sudo vm_hostname=\\\"$(curl -H \\\"Metadata-Flavor:Google\\\" \\\\\\n   http://169.254.169.254/computeMetadata/v1/instance/name)\\\"\\n   sudo echo \\\"Page served from: $vm_hostname\\\" | \\\\\\n   tee /var/www/html/index.html\\n   sudo systemctl restart apache2\"\n  }\n  network_interface {\n    access_config {\n      network_tier = \"PREMIUM\"\n    }\n    network = \"default\"\n    #subnetwork = \"regions/us-east1/subnetworks/default\"\n  }\n  region = \"us-east1\"\n  service_account {\n    email  = \"default\"\n    scopes = [\"https://www.googleapis.com/auth/devstorage.read_only\", \"https://www.googleapis.com/auth/logging.write\", \"https://www.googleapis.com/auth/monitoring.write\", \"https://www.googleapis.com/auth/pubsub\", \"https://www.googleapis.com/auth/service.management.readonly\", \"https://www.googleapis.com/auth/servicecontrol\", \"https://www.googleapis.com/auth/trace.append\"]\n  }\n  tags = [\"allow-health-check\"]\n}\n# [END cloudloadbalancing_ext_http_gce_instance_template]\n\n# [START cloudloadbalancing_ext_http_gce_instance_mig]\nresource \"google_compute_instance_group_manager\" \"default\" {\n  depends_on = [google_project_service.compute]\n  project    = google_project.project.project_id\n  name       = \"lb-backend-example\"\n  zone       = \"us-east1-b\"\n  named_port {\n    name = \"http\"\n    port = 80\n  }\n  version {\n    instance_template = google_compute_instance_template.default.id\n    name              = \"primary\"\n  }\n  base_instance_name = \"vm\"\n  target_size        = 2\n}\n# [END cloudloadbalancing_ext_http_gce_instance_mig]\n\n# [START cloudloadbalancing_ext_http_gce_instance_ip_address]\nresource \"google_compute_global_address\" \"default\" {\n  depends_on = [google_project_service.compute]\n  project    = google_project.project.project_id\n  name       = \"lb-ipv4-1\"\n  ip_version = \"IPV4\"\n}\n# [END cloudloadbalancing_ext_http_gce_instance_ip_address]\n\n# [START cloudloadbalancing_ext_http_gce_instance_ip_address]\nresource \"google_compute_global_address\" \"ipv6-address\" {\n  depends_on = [google_project_service.compute]\n  project    = google_project.project.project_id\n  name       = \"lb-ipv6-1\"\n  ip_version = \"IPV6\"\n}\n# [END cloudloadbalancing_ext_http_gce_instance_ip_address]\n\n# [START cloudloadbalancing_ext_http_gce_instance_health_check]\nresource \"google_compute_health_check\" \"default\" {\n  depends_on         = [google_project_service.compute]\n  name               = \"http-basic-check\"\n  project            = google_project.project.project_id\n  check_interval_sec = 5\n  healthy_threshold  = 2\n\n  http_health_check {\n    # port different than the one in the backend service\n    port               = 88\n    port_specification = \"USE_FIXED_PORT\"\n    proxy_header       = \"NONE\"\n    request_path       = \"/\"\n  }\n\n  log_config {\n    enable = true\n  }\n\n  timeout_sec         = 5\n  unhealthy_threshold = 2\n}\n# [END cloudloadbalancing_ext_http_gce_instance_health_check]\n\n# [START cloudloadbalancing_ext_http_gce_instance_backend_service]\nresource \"google_compute_backend_service\" \"default\" {\n  name                            = \"web-backend-service\"\n  project                         = google_project.project.project_id\n  connection_draining_timeout_sec = 0\n  health_checks                   = [google_compute_health_check.default.id]\n  load_balancing_scheme           = \"EXTERNAL\"\n  port_name                       = \"http\"\n  protocol                        = \"HTTP\"\n  session_affinity                = \"NONE\"\n  timeout_sec                     = 30\n  backend {\n    group           = google_compute_instance_group_manager.default.instance_group\n    balancing_mode  = \"UTILIZATION\"\n    capacity_scaler = 1.0\n  }\n}\n# [END cloudloadbalancing_ext_http_gce_instance_backend_service]\n\nresource \"google_certificate_manager_certificate_map\" \"default\" {\n  project     = google_project.project.project_id\n  name        = \"cert-map\"\n  description = \"My acceptance test certificate map\"\n  labels = {\n    \"terraform\" : true,\n    \"acc-test\" : true,\n  }\n}\n\n# [START cloudloadbalancing_ext_http_gce_instance_url_map]\nresource \"google_compute_url_map\" \"default\" {\n  project         = google_project.project.project_id\n  name            = \"web-map-https\"\n  default_service = google_compute_backend_service.default.id\n}\n# [END cloudloadbalancing_ext_http_gce_instance_url_map]\n\n# [START cloudloadbalancing_ext_http_gce_instance_target_https_proxy]\nresource \"google_compute_target_https_proxy\" \"default\" {\n  project          = google_project.project.project_id\n  name             = \"https-lb-proxy\"\n  url_map          = google_compute_url_map.default.id\n  certificate_map  = \"//certificatemanager.googleapis.com/${google_certificate_manager_certificate_map.default.id}\"\n  ssl_certificates = [google_compute_managed_ssl_certificate.cert1.id]\n}\n# [END cloudloadbalancing_ext_http_gce_instance_target_https_proxy]\n\n# [START cloudloadbalancing_ext_http_gce_instance_forwarding_rule]\nresource \"google_compute_global_forwarding_rule\" \"default\" {\n  project               = google_project.project.project_id\n  name                  = \"https-content-rule\"\n  ip_protocol           = \"TCP\"\n  load_balancing_scheme = \"EXTERNAL\"\n  port_range            = \"443-443\"\n  target                = google_compute_target_https_proxy.default.id\n  ip_address            = google_compute_global_address.default.id\n}\n# [END cloudloadbalancing_ext_http_gce_instance_forwarding_rule]\n\n\n# [START cloudloadbalancing_ext_http_gce_instance_target_https_proxy]\nresource \"google_compute_target_https_proxy\" \"working-cert\" {\n  project          = google_project.project.project_id\n  name             = \"https-lb-proxy-working\"\n  url_map          = google_compute_url_map.default.id\n  ssl_certificates = [google_compute_managed_ssl_certificate.cert2.id]\n}\n# [END cloudloadbalancing_ext_http_gce_instance_target_https_proxy]\n\n# [START cloudloadbalancing_ext_http_gce_instance_forwarding_rule]\nresource \"google_compute_global_forwarding_rule\" \"working-cert\" {\n  project               = google_project.project.project_id\n  name                  = \"https-content-rule-working\"\n  ip_protocol           = \"TCP\"\n  load_balancing_scheme = \"EXTERNAL\"\n  port_range            = \"80-80\"\n  target                = google_compute_target_https_proxy.working-cert.id\n  ip_address            = google_compute_global_address.ipv6-address.id\n}\n# [END cloudloadbalancing_ext_http_gce_instance_forwarding_rule]\n"
  },
  {
    "path": "test-data/lb3/json-dumps/compute-aggregated-backendServices.json",
    "content": "{\n  \"kind\": \"compute#backendServiceAggregatedList\",\n  \"id\": \"projects/gcpdiag-lb3-aaaa/aggregated/backendServices/\",\n  \"items\": {\n    \"global\": {\n      \"backendServices\": [\n        {\n          \"kind\": \"compute#backendService\",\n          \"id\": \"5883404156894106621\",\n          \"creationTimestamp\": \"2024-10-22T02:14:58.345-07:00\",\n          \"name\": \"tcp-backend-service\",\n          \"description\": \"\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/backendServices/tcp-backend-service\",\n          \"backends\": [\n            {\n              \"group\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/zones/us-east1-b/instanceGroups/lb-backend-example\",\n              \"balancingMode\": \"UTILIZATION\",\n              \"capacityScaler\": 1\n            }\n          ],\n          \"healthChecks\": [\n            \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/healthChecks/http-basic-check\"\n          ],\n          \"timeoutSec\": 30,\n          \"port\": 80,\n          \"protocol\": \"TCP\",\n          \"fingerprint\": \"wyraRQUtNHk=\",\n          \"portName\": \"http\",\n          \"sessionAffinity\": \"NONE\",\n          \"affinityCookieTtlSec\": 0,\n          \"loadBalancingScheme\": \"EXTERNAL_MANAGED\",\n          \"connectionDraining\": {\n            \"drainingTimeoutSec\": 0\n          },\n          \"usedBy\": [\n            {\n              \"reference\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/targetSslProxies/ssl-proxy\"\n            }\n          ]\n        },\n        {\n          \"kind\": \"compute#backendService\",\n          \"id\": \"6804081227729981716\",\n          \"creationTimestamp\": \"2024-10-18T07:26:03.206-07:00\",\n          \"name\": \"web-backend-service\",\n          \"description\": \"\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/backendServices/web-backend-service\",\n          \"backends\": [\n            {\n              \"group\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/zones/us-east1-b/instanceGroups/lb-backend-example\",\n              \"balancingMode\": \"UTILIZATION\",\n              \"capacityScaler\": 1\n            }\n          ],\n          \"healthChecks\": [\n            \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/healthChecks/http-basic-check\"\n          ],\n          \"timeoutSec\": 30,\n          \"port\": 80,\n          \"protocol\": \"HTTP\",\n          \"fingerprint\": \"tPlMNAYWuKU=\",\n          \"portName\": \"http\",\n          \"enableCDN\": false,\n          \"sessionAffinity\": \"NONE\",\n          \"affinityCookieTtlSec\": 0,\n          \"loadBalancingScheme\": \"EXTERNAL\",\n          \"connectionDraining\": {\n            \"drainingTimeoutSec\": 0\n          },\n          \"usedBy\": [\n            {\n              \"reference\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/urlMaps/web-map-https\"\n            }\n          ]\n        }\n      ]\n    },\n    \"regions/us-central1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/us-central1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-central1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/europe-west1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-west1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/us-west1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west1\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-east1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/asia-east1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-east1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-east1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/us-east1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-east1\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-northeast1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/asia-northeast1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-northeast1\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-southeast1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/asia-southeast1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-southeast1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-east4\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/us-east4' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-east4\"\n          }\n        ]\n      }\n    },\n    \"regions/australia-southeast1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/australia-southeast1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/australia-southeast1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/europe-west2' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west2\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west3\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/europe-west3' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west3\"\n          }\n        ]\n      }\n    },\n    \"regions/southamerica-east1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/southamerica-east1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/southamerica-east1\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-south1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/asia-south1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-south1\"\n          }\n        ]\n      }\n    },\n    \"regions/northamerica-northeast1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/northamerica-northeast1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/northamerica-northeast1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west4\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/europe-west4' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west4\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-north1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/europe-north1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-north1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-west2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/us-west2' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west2\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-east2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/asia-east2' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-east2\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west6\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/europe-west6' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west6\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-northeast2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/asia-northeast2' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-northeast2\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-northeast3\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/asia-northeast3' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-northeast3\"\n          }\n        ]\n      }\n    },\n    \"regions/us-west3\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/us-west3' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west3\"\n          }\n        ]\n      }\n    },\n    \"regions/us-west4\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/us-west4' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west4\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-southeast2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/asia-southeast2' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-southeast2\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-central2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/europe-central2' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-central2\"\n          }\n        ]\n      }\n    },\n    \"regions/northamerica-northeast2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/northamerica-northeast2' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/northamerica-northeast2\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-south2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/asia-south2' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-south2\"\n          }\n        ]\n      }\n    },\n    \"regions/australia-southeast2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/australia-southeast2' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/australia-southeast2\"\n          }\n        ]\n      }\n    },\n    \"regions/southamerica-west1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/southamerica-west1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/southamerica-west1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west8\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/europe-west8' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west8\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west9\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/europe-west9' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west9\"\n          }\n        ]\n      }\n    },\n    \"regions/us-east5\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/us-east5' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-east5\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-southwest1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/europe-southwest1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-southwest1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-south1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/us-south1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-south1\"\n          }\n        ]\n      }\n    },\n    \"regions/me-west1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/me-west1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/me-west1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west12\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/europe-west12' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west12\"\n          }\n        ]\n      }\n    },\n    \"regions/me-central1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/me-central1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/me-central1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west10\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/europe-west10' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west10\"\n          }\n        ]\n      }\n    },\n    \"regions/me-central2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/me-central2' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/me-central2\"\n          }\n        ]\n      }\n    },\n    \"regions/africa-south1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/africa-south1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/africa-south1\"\n          }\n        ]\n      }\n    }\n  },\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/aggregated/backendServices/\"\n}\n"
  },
  {
    "path": "test-data/lb3/json-dumps/compute-aggregated-forwardingRules.json",
    "content": "{\n  \"kind\": \"compute#forwardingRuleAggregatedList\",\n  \"id\": \"projects/gcpdiag-lb3-aaaa/aggregated/forwardingRules/\",\n  \"items\": {\n    \"global\": {\n      \"forwardingRules\": [\n        {\n          \"kind\": \"compute#forwardingRule\",\n          \"id\": \"3863216909981830940\",\n          \"creationTimestamp\": \"2024-10-18T07:34:27.669-07:00\",\n          \"name\": \"https-content-rule\",\n          \"description\": \"\",\n          \"IPAddress\": \"1.2.3.4\",\n          \"IPProtocol\": \"TCP\",\n          \"portRange\": \"443-443\",\n          \"target\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/targetHttpsProxies/https-lb-proxy\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/forwardingRules/https-content-rule\",\n          \"loadBalancingScheme\": \"EXTERNAL\",\n          \"networkTier\": \"PREMIUM\",\n          \"labelFingerprint\": \"42WmSpB8rSM=\",\n          \"fingerprint\": \"lbqus5AHKBg=\"\n        },\n        {\n          \"kind\": \"compute#forwardingRule\",\n          \"id\": \"183152458183199474\",\n          \"creationTimestamp\": \"2024-10-18T07:43:41.183-07:00\",\n          \"name\": \"https-content-rule-working\",\n          \"description\": \"\",\n          \"IPAddress\": \"2600:1901:0:d0d7::\",\n          \"IPProtocol\": \"TCP\",\n          \"portRange\": \"80-80\",\n          \"target\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/targetHttpsProxies/https-lb-proxy-working\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/forwardingRules/https-content-rule-working\",\n          \"loadBalancingScheme\": \"EXTERNAL\",\n          \"networkTier\": \"PREMIUM\",\n          \"labelFingerprint\": \"42WmSpB8rSM=\",\n          \"fingerprint\": \"p-3QEspIkqc=\"\n        },\n        {\n          \"kind\": \"compute#forwardingRule\",\n          \"id\": \"9008931882023965618\",\n          \"creationTimestamp\": \"2024-10-22T02:16:13.078-07:00\",\n          \"name\": \"ssl-rule\",\n          \"description\": \"\",\n          \"IPAddress\": \"192.168.3.5\",\n          \"IPProtocol\": \"TCP\",\n          \"portRange\": \"443-443\",\n          \"target\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/targetSslProxies/ssl-proxy\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/forwardingRules/ssl-rule\",\n          \"loadBalancingScheme\": \"EXTERNAL\",\n          \"networkTier\": \"PREMIUM\",\n          \"labelFingerprint\": \"42WmSpB8rSM=\",\n          \"fingerprint\": \"aVizp0iHtL0=\"\n        }\n      ]\n    },\n    \"regions/us-central1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/us-central1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-central1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/europe-west1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-west1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/us-west1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west1\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-east1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/asia-east1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-east1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-east1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/us-east1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-east1\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-northeast1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/asia-northeast1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-northeast1\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-southeast1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/asia-southeast1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-southeast1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-east4\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/us-east4' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-east4\"\n          }\n        ]\n      }\n    },\n    \"regions/australia-southeast1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/australia-southeast1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/australia-southeast1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/europe-west2' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west2\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west3\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/europe-west3' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west3\"\n          }\n        ]\n      }\n    },\n    \"regions/southamerica-east1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/southamerica-east1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/southamerica-east1\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-south1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/asia-south1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-south1\"\n          }\n        ]\n      }\n    },\n    \"regions/northamerica-northeast1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/northamerica-northeast1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/northamerica-northeast1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west4\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/europe-west4' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west4\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-north1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/europe-north1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-north1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-west2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/us-west2' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west2\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-east2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/asia-east2' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-east2\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west6\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/europe-west6' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west6\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-northeast2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/asia-northeast2' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-northeast2\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-northeast3\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/asia-northeast3' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-northeast3\"\n          }\n        ]\n      }\n    },\n    \"regions/us-west3\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/us-west3' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west3\"\n          }\n        ]\n      }\n    },\n    \"regions/us-west4\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/us-west4' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west4\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-southeast2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/asia-southeast2' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-southeast2\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-central2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/europe-central2' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-central2\"\n          }\n        ]\n      }\n    },\n    \"regions/northamerica-northeast2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/northamerica-northeast2' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/northamerica-northeast2\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-south2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/asia-south2' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-south2\"\n          }\n        ]\n      }\n    },\n    \"regions/australia-southeast2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/australia-southeast2' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/australia-southeast2\"\n          }\n        ]\n      }\n    },\n    \"regions/southamerica-west1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/southamerica-west1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/southamerica-west1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west8\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/europe-west8' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west8\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west9\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/europe-west9' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west9\"\n          }\n        ]\n      }\n    },\n    \"regions/us-east5\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/us-east5' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-east5\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-southwest1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/europe-southwest1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-southwest1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-south1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/us-south1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-south1\"\n          }\n        ]\n      }\n    },\n    \"regions/me-west1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/me-west1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/me-west1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west12\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/europe-west12' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west12\"\n          }\n        ]\n      }\n    },\n    \"regions/me-central1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/me-central1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/me-central1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west10\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/europe-west10' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west10\"\n          }\n        ]\n      }\n    },\n    \"regions/me-central2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/me-central2' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/me-central2\"\n          }\n        ]\n      }\n    },\n    \"regions/africa-south1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/africa-south1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/africa-south1\"\n          }\n        ]\n      }\n    }\n  },\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/aggregated/forwardingRules/\"\n}\n"
  },
  {
    "path": "test-data/lb3/json-dumps/compute-aggregated-targetHttpsProxies.json",
    "content": "{\n  \"kind\": \"compute#targetHttpsProxyAggregatedList\",\n  \"id\": \"projects/gcpdiag-lb3-aaaa/aggregated/targetHttpsProxies/\",\n  \"items\": {\n    \"global\": {\n      \"targetHttpsProxies\": [\n        {\n          \"kind\": \"compute#targetHttpsProxy\",\n          \"id\": \"2209022440749649672\",\n          \"creationTimestamp\": \"2024-10-18T07:34:15.981-07:00\",\n          \"name\": \"https-lb-proxy\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/targetHttpsProxies/https-lb-proxy\",\n          \"urlMap\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/urlMaps/web-map-https\",\n          \"sslCertificates\": [\n            \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert1\"\n          ],\n          \"certificateMap\": \"//certificatemanager.googleapis.com/projects/gcpdiag-lb3-aaaa/locations/global/certificateMaps/cert-map\",\n          \"quicOverride\": \"NONE\",\n          \"fingerprint\": \"GsS18JR8BT8=\",\n          \"tlsEarlyData\": \"DISABLED\"\n        },\n        {\n          \"kind\": \"compute#targetHttpsProxy\",\n          \"id\": \"6476775702975728672\",\n          \"creationTimestamp\": \"2024-10-18T07:38:07.808-07:00\",\n          \"name\": \"https-lb-proxy-working\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/targetHttpsProxies/https-lb-proxy-working\",\n          \"urlMap\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/urlMaps/web-map-https\",\n          \"sslCertificates\": [\n            \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert2\"\n          ],\n          \"quicOverride\": \"NONE\",\n          \"fingerprint\": \"Ika63TUJl5I=\",\n          \"tlsEarlyData\": \"DISABLED\"\n        }\n      ]\n    },\n    \"regions/us-central1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/us-central1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-central1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/europe-west1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-west1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/us-west1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west1\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-east1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/asia-east1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-east1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-east1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/us-east1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-east1\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-northeast1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/asia-northeast1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-northeast1\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-southeast1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/asia-southeast1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-southeast1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-east4\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/us-east4' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-east4\"\n          }\n        ]\n      }\n    },\n    \"regions/australia-southeast1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/australia-southeast1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/australia-southeast1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/europe-west2' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west2\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west3\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/europe-west3' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west3\"\n          }\n        ]\n      }\n    },\n    \"regions/southamerica-east1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/southamerica-east1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/southamerica-east1\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-south1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/asia-south1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-south1\"\n          }\n        ]\n      }\n    },\n    \"regions/northamerica-northeast1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/northamerica-northeast1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/northamerica-northeast1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west4\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/europe-west4' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west4\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-north1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/europe-north1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-north1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-west2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/us-west2' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west2\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-east2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/asia-east2' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-east2\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west6\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/europe-west6' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west6\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-northeast2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/asia-northeast2' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-northeast2\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-northeast3\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/asia-northeast3' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-northeast3\"\n          }\n        ]\n      }\n    },\n    \"regions/us-west3\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/us-west3' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west3\"\n          }\n        ]\n      }\n    },\n    \"regions/us-west4\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/us-west4' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-west4\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-southeast2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/asia-southeast2' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-southeast2\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-central2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/europe-central2' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-central2\"\n          }\n        ]\n      }\n    },\n    \"regions/northamerica-northeast2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/northamerica-northeast2' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/northamerica-northeast2\"\n          }\n        ]\n      }\n    },\n    \"regions/asia-south2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/asia-south2' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/asia-south2\"\n          }\n        ]\n      }\n    },\n    \"regions/australia-southeast2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/australia-southeast2' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/australia-southeast2\"\n          }\n        ]\n      }\n    },\n    \"regions/southamerica-west1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/southamerica-west1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/southamerica-west1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west8\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/europe-west8' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west8\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west9\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/europe-west9' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west9\"\n          }\n        ]\n      }\n    },\n    \"regions/us-east5\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/us-east5' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-east5\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-southwest1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/europe-southwest1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-southwest1\"\n          }\n        ]\n      }\n    },\n    \"regions/us-south1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/us-south1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/us-south1\"\n          }\n        ]\n      }\n    },\n    \"regions/me-west1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/me-west1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/me-west1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west12\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/europe-west12' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west12\"\n          }\n        ]\n      }\n    },\n    \"regions/me-central1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/me-central1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/me-central1\"\n          }\n        ]\n      }\n    },\n    \"regions/europe-west10\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/europe-west10' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/europe-west10\"\n          }\n        ]\n      }\n    },\n    \"regions/me-central2\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/me-central2' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/me-central2\"\n          }\n        ]\n      }\n    },\n    \"regions/africa-south1\": {\n      \"warning\": {\n        \"code\": \"NO_RESULTS_ON_PAGE\",\n        \"message\": \"There are no results for scope 'regions/africa-south1' on this page.\",\n        \"data\": [\n          {\n            \"key\": \"scope\",\n            \"value\": \"regions/africa-south1\"\n          }\n        ]\n      }\n    }\n  },\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/aggregated/targetHttpsProxies/\"\n}\n"
  },
  {
    "path": "test-data/lb3/json-dumps/compute-sslCertificates.json",
    "content": "{\n  \"kind\": \"compute#sslCertificateList\",\n  \"id\": \"projects/gcpdiag-lb3-aaaa/global/sslCertificates/\",\n  \"items\": [\n    {\n      \"kind\": \"compute#sslCertificate\",\n      \"id\": \"5007046999615196979\",\n      \"creationTimestamp\": \"2024-10-18T07:34:04.255-07:00\",\n      \"name\": \"cert1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert1\",\n      \"managed\": {\n        \"domains\": [\n          \"natka123.com\",\n          \"second.natka123.com\"\n        ],\n        \"status\": \"PROVISIONING\",\n        \"domainStatus\": {\n          \"natka123.com\": \"FAILED_NOT_VISIBLE\",\n          \"second.natka123.com\": \"FAILED_NOT_VISIBLE\"\n        }\n      },\n      \"type\": \"MANAGED\"\n    },\n    {\n      \"kind\": \"compute#sslCertificate\",\n      \"id\": \"152674253559287603\",\n      \"creationTimestamp\": \"2024-10-18T07:34:04.222-07:00\",\n      \"name\": \"cert2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert2\",\n      \"managed\": {\n        \"domains\": [\n          \"test.natka123.com\"\n        ],\n        \"status\": \"PROVISIONING\",\n        \"domainStatus\": {\n          \"test.natka123.com\": \"FAILED_NOT_VISIBLE\"\n        }\n      },\n      \"type\": \"MANAGED\"\n    },\n    {\n      \"kind\": \"compute#sslCertificate\",\n      \"id\": \"6567642127033619454\",\n      \"creationTimestamp\": \"2024-10-22T02:14:57.607-07:00\",\n      \"name\": \"cert3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert3\",\n      \"managed\": {\n        \"domains\": [\n          \"test.org\",\n          \"second.test.org\"\n        ],\n        \"status\": \"PROVISIONING\",\n        \"domainStatus\": {\n          \"second.test.org\": \"FAILED_NOT_VISIBLE\",\n          \"test.org\": \"FAILED_NOT_VISIBLE\"\n        }\n      },\n      \"type\": \"MANAGED\"\n    },\n    {\n      \"kind\": \"compute#sslCertificate\",\n      \"id\": \"391516744939351060\",\n      \"creationTimestamp\": \"2024-10-22T04:56:43.877-07:00\",\n      \"name\": \"cert5\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert5\",\n      \"managed\": {\n        \"domains\": [\n          \"test.org\"\n        ],\n        \"status\": \"PROVISIONING\",\n        \"domainStatus\": {\n          \"test.org\": \"PROVISIONING\"\n        }\n      },\n      \"type\": \"MANAGED\"\n    },\n    {\n      \"kind\": \"compute#sslCertificate\",\n      \"id\": \"8942192522650371715\",\n      \"creationTimestamp\": \"2024-10-22T03:03:24.633-07:00\",\n      \"name\": \"unused-cert4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/sslCertificates/unused-cert4\",\n      \"managed\": {\n        \"domains\": [\n          \"test.org\",\n          \"second.test.org\"\n        ],\n        \"status\": \"PROVISIONING\",\n        \"domainStatus\": {\n          \"second.test.org\": \"FAILED_NOT_VISIBLE\",\n          \"test.org\": \"FAILED_NOT_VISIBLE\"\n        }\n      },\n      \"type\": \"MANAGED\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/sslCertificates/\"\n}\n"
  },
  {
    "path": "test-data/lb3/json-dumps/compute-targetHttpsProxies.json",
    "content": "{\n  \"kind\": \"compute#targetHttpsProxyList\",\n  \"id\": \"projects/gcpdiag-lb3-aaaa/global/targetHttpsProxies/\",\n  \"items\": [\n    {\n      \"kind\": \"compute#targetHttpsProxy\",\n      \"id\": \"2209022440749649672\",\n      \"creationTimestamp\": \"2024-10-18T07:34:15.981-07:00\",\n      \"name\": \"https-lb-proxy\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/targetHttpsProxies/https-lb-proxy\",\n      \"urlMap\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/urlMaps/web-map-https\",\n      \"sslCertificates\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert1\"\n      ],\n      \"certificateMap\": \"//certificatemanager.googleapis.com/projects/gcpdiag-lb3-aaaa/locations/global/certificateMaps/cert-map\",\n      \"quicOverride\": \"NONE\",\n      \"fingerprint\": \"GsS18JR8BT8=\",\n      \"tlsEarlyData\": \"DISABLED\"\n    },\n    {\n      \"kind\": \"compute#targetHttpsProxy\",\n      \"id\": \"6476775702975728672\",\n      \"creationTimestamp\": \"2024-10-18T07:38:07.808-07:00\",\n      \"name\": \"https-lb-proxy-working\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/targetHttpsProxies/https-lb-proxy-working\",\n      \"urlMap\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/urlMaps/web-map-https\",\n      \"sslCertificates\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert2\"\n      ],\n      \"quicOverride\": \"NONE\",\n      \"fingerprint\": \"Ika63TUJl5I=\",\n      \"tlsEarlyData\": \"DISABLED\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/targetHttpsProxies/\"\n}\n"
  },
  {
    "path": "test-data/lb3/json-dumps/compute-targetSslProxies.json",
    "content": "{\n  \"kind\": \"compute#targetSslProxyList\",\n  \"id\": \"projects/gcpdiag-lb3-aaaa/global/targetSslProxies/\",\n  \"items\": [\n    {\n      \"kind\": \"compute#targetSslProxy\",\n      \"id\": \"2435662921451885502\",\n      \"creationTimestamp\": \"2024-10-22T02:16:01.466-07:00\",\n      \"name\": \"ssl-proxy\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/targetSslProxies/ssl-proxy\",\n      \"service\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/backendServices/tcp-backend-service\",\n      \"sslCertificates\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert3\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/sslCertificates/cert5\"\n      ],\n      \"proxyHeader\": \"NONE\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/targetSslProxies/\"\n}\n"
  },
  {
    "path": "test-data/lb3/json-dumps/logging-entries-1.json",
    "content": "{\n  \"entries\": [\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"nataliakaczor@google.com\",\n          \"principalSubject\": \"user:nataliakaczor@google.com\"\n        },\n        \"requestMetadata\": {\n          \"callerIp\": \"gce-internal-ip\",\n          \"callerSuppliedUserAgent\": \"Terraform/1.9.3 (+https://www.terraform.io) Terraform-Plugin-SDK/2.33.0 terraform-provider-google/6.7.0,gzip(gfe)\",\n          \"requestAttributes\": {},\n          \"destinationAttributes\": {}\n        },\n        \"serviceName\": \"compute.googleapis.com\",\n        \"methodName\": \"v1.compute.targetHttpsProxies.insert\",\n        \"resourceName\": \"projects/gcpdiag-lb3-aaaa/global/targetHttpsProxies/https-lb-proxy\",\n        \"request\": {\n          \"@type\": \"type.googleapis.com/compute.targetHttpsProxies.insert\"\n        }\n      },\n      \"insertId\": \"-2rli97e1cxkk\",\n      \"resource\": {\n        \"type\": \"gce_target_https_proxy\",\n        \"labels\": {\n          \"target_https_proxy_id\": \"2209022440749649672\",\n          \"project_id\": \"gcpdiag-lb3-aaaa\"\n        }\n      },\n      \"timestamp\": \"2024-10-18T14:34:17.798905Z\",\n      \"severity\": \"NOTICE\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"40523d2d-d62b-476e-9585-17c2341a0dff\"\n      },\n      \"logName\": \"projects/gcpdiag-lb3-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1729262055617-624c1328c759c-adc97462-31656ee9\",\n        \"producer\": \"compute.googleapis.com\",\n        \"last\": true\n      },\n      \"receiveTimestamp\": \"2024-10-18T14:34:18.886589315Z\"\n    },\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"authenticationInfo\": {\n          \"principalEmail\": \"nataliakaczor@google.com\",\n          \"principalSubject\": \"user:nataliakaczor@google.com\"\n        },\n        \"requestMetadata\": {\n          \"callerIp\": \"gce-internal-ip\",\n          \"callerSuppliedUserAgent\": \"Terraform/1.9.3 (+https://www.terraform.io) Terraform-Plugin-SDK/2.33.0 terraform-provider-google/6.7.0,gzip(gfe)\",\n          \"requestAttributes\": {\n            \"time\": \"2024-10-18T14:34:16.248041Z\",\n            \"auth\": {}\n          },\n          \"destinationAttributes\": {}\n        },\n        \"serviceName\": \"compute.googleapis.com\",\n        \"methodName\": \"v1.compute.targetHttpsProxies.insert\",\n        \"authorizationInfo\": [\n          {\n            \"resource\": \"projects/gcpdiag-lb3-aaaa/global/targetHttpsProxies/https-lb-proxy\",\n            \"permission\": \"compute.targetHttpsProxies.create\",\n            \"granted\": true,\n            \"resourceAttributes\": {\n              \"service\": \"compute\",\n              \"name\": \"projects/gcpdiag-lb3-aaaa/global/targetHttpsProxies/https-lb-proxy\",\n              \"type\": \"compute.targetHttpsProxies\"\n            },\n            \"permissionType\": \"ADMIN_WRITE\"\n          },\n          {\n            \"resource\": \"projects/gcpdiag-lb3-aaaa/global/urlMaps/web-map-https\",\n            \"permission\": \"compute.urlMaps.use\",\n            \"granted\": true,\n            \"resourceAttributes\": {\n              \"service\": \"compute\",\n              \"name\": \"projects/gcpdiag-lb3-aaaa/global/urlMaps/web-map-https\",\n              \"type\": \"compute.urlMaps\"\n            },\n            \"permissionType\": \"ADMIN_WRITE\"\n          }\n        ],\n        \"resourceName\": \"projects/gcpdiag-lb3-aaaa/global/targetHttpsProxies/https-lb-proxy\",\n        \"request\": {\n          \"name\": \"https-lb-proxy\",\n          \"@type\": \"type.googleapis.com/compute.targetHttpsProxies.insert\",\n          \"quicOverride\": \"NONE\",\n          \"urlMap\": \"projects/gcpdiag-lb3-aaaa/global/urlMaps/web-map-https\"\n        },\n        \"response\": {\n          \"targetId\": \"2209022440749649672\",\n          \"insertTime\": \"2024-10-18T07:34:16.035-07:00\",\n          \"startTime\": \"2024-10-18T07:34:16.038-07:00\",\n          \"progress\": \"0\",\n          \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/operations/6855579118264635144\",\n          \"operationType\": \"insert\",\n          \"user\": \"nataliakaczor@google.com\",\n          \"name\": \"operation-1729262055617-624c1328c759c-adc97462-31656ee9\",\n          \"targetLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/targetHttpsProxies/https-lb-proxy\",\n          \"status\": \"RUNNING\",\n          \"id\": \"6855579118264635144\",\n          \"@type\": \"type.googleapis.com/operation\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-lb3-aaaa/global/operations/operation-1729262055617-624c1328c759c-adc97462-31656ee9\"\n        },\n        \"resourceLocation\": {\n          \"currentLocations\": [\n            \"global\"\n          ]\n        }\n      },\n      \"insertId\": \"nvbpyme10tq0\",\n      \"resource\": {\n        \"type\": \"gce_target_https_proxy\",\n        \"labels\": {\n          \"project_id\": \"gcpdiag-lb3-aaaa\",\n          \"target_https_proxy_id\": \"2209022440749649672\"\n        }\n      },\n      \"timestamp\": \"2024-10-18T14:34:15.686588Z\",\n      \"severity\": \"NOTICE\",\n      \"labels\": {\n        \"compute.googleapis.com/root_trigger_id\": \"40523d2d-d62b-476e-9585-17c2341a0dff\"\n      },\n      \"logName\": \"projects/gcpdiag-lb3-aaaa/logs/cloudaudit.googleapis.com%2Factivity\",\n      \"operation\": {\n        \"id\": \"operation-1729262055617-624c1328c759c-adc97462-31656ee9\",\n        \"producer\": \"compute.googleapis.com\",\n        \"first\": true\n      },\n      \"receiveTimestamp\": \"2024-10-18T14:34:16.974719684Z\"\n    }\n  ],\n  \"nextPageToken\": \"EAE4l4_KqNyjzP0iSh8iEiICCgAqDAj_v8S3BhD_k-vcA1j13sf0s86omegBUgcIxYm53sUeYP3U87aj8M6paWocCgwI8tnZuAYQiuGThAMSCAgFEN_8v5wBGAIgAA\"\n}\n"
  },
  {
    "path": "test-data/lb3/json-dumps/monitoring-query.json",
    "content": "{\n  \"timeSeriesDescriptor\": {\n    \"labelDescriptors\": [\n      {\n        \"key\": \"resource.zone\"\n      },\n      {\n        \"key\": \"metric.instance_name\"\n      }\n    ],\n    \"pointDescriptors\": [\n      {\n        \"key\": \"value_uptime_total_aggregate_mean\",\n        \"valueType\": \"DOUBLE\",\n        \"metricKind\": \"GAUGE\",\n        \"unit\": \"s\"\n      },\n      {\n        \"key\": \"value_uptime_total_aggregate_count\",\n        \"valueType\": \"INT64\",\n        \"metricKind\": \"GAUGE\",\n        \"unit\": \"1\"\n      }\n    ]\n  },\n  \"timeSeriesData\": [\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"europe-west4-b\"\n        },\n        {\n          \"stringValue\": \"neg-vm\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 1219297\n            },\n            {\n              \"int64Value\": \"4\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-08-27T15:45:06.919908Z\",\n            \"endTime\": \"2024-08-27T15:45:06.919908Z\"\n          }\n        },\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 1219027\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-08-27T15:40:06.919908Z\",\n            \"endTime\": \"2024-08-27T15:40:06.919908Z\"\n          }\n        }\n      ]\n    },\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"us-east1-b\"\n        },\n        {\n          \"stringValue\": \"vm-pn3l\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 1320395\n            },\n            {\n              \"int64Value\": \"4\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-08-27T15:45:06.919908Z\",\n            \"endTime\": \"2024-08-27T15:45:06.919908Z\"\n          }\n        },\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 1320125\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-08-27T15:40:06.919908Z\",\n            \"endTime\": \"2024-08-27T15:40:06.919908Z\"\n          }\n        }\n      ]\n    },\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"us-east1-b\"\n        },\n        {\n          \"stringValue\": \"vm-m5q1\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 1320407\n            },\n            {\n              \"int64Value\": \"4\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-08-27T15:45:06.919908Z\",\n            \"endTime\": \"2024-08-27T15:45:06.919908Z\"\n          }\n        },\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 1320137\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-08-27T15:40:06.919908Z\",\n            \"endTime\": \"2024-08-27T15:40:06.919908Z\"\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/lb3/json-dumps/project.json",
    "content": "{\n  \"name\": \"projects/12340009\",\n  \"parent\": \"folders/211134714592\",\n  \"projectId\": \"gcpdiag-lb3-aaaa\",\n  \"state\": \"ACTIVE\",\n  \"displayName\": \"gcpdiag test - lb3\",\n  \"createTime\": \"2024-10-17T18:39:31.667941Z\",\n  \"updateTime\": \"2024-10-17T18:39:31.667941Z\",\n  \"etag\": \"W/\\\"af713938739b3e80\\\"\",\n  \"labels\": {\n    \"gcpdiag\": \"test\",\n    \"goog-terraform-provisioned\": \"true\"\n  }\n}\n"
  },
  {
    "path": "test-data/lb3/json-dumps/services.json",
    "content": "{\n  \"services\": [\n    {\n      \"name\": \"projects/12340009/services/compute.googleapis.com\",\n      \"config\": {\n        \"name\": \"compute.googleapis.com\",\n        \"title\": \"Compute Engine API\",\n        \"documentation\": {\n          \"summary\": \"Creates and runs virtual machines on Google Cloud Platform.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"compute.googleapis.com/VpcNetwork\",\n            \"displayName\": \"VPC Network\",\n            \"description\": \"VPC Network.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the VPC Network.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the VPC Network, global always.\"\n              },\n              {\n                \"key\": \"network_id\",\n                \"description\": \"VPC Network resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Location\",\n            \"displayName\": \"Compute Location\",\n            \"description\": \"A location in the Compute API.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the Compute Location.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Interconnect\",\n            \"displayName\": \"Interconnect\",\n            \"description\": \"Interconnect.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the Interconnect.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the Interconnect.\"\n              },\n              {\n                \"key\": \"interconnect_id\",\n                \"description\": \"Interconnect resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/FirewallPolicy\",\n            \"displayName\": \"Firewall policy\",\n            \"description\": \"Firewall policy.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project or organization) associated with the firewall policy.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the firewall policy.\"\n              },\n              {\n                \"key\": \"firewall_policy_id\",\n                \"description\": \"Firewall policy resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/SecurityPolicy\",\n            \"displayName\": \"Security policy\",\n            \"description\": \"Security policy.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the security policy.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the security policy.\"\n              },\n              {\n                \"key\": \"security_policy_id\",\n                \"description\": \"Security policy resource ID.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/OperationType\",\n            \"displayName\": \"Operation Type\",\n            \"description\": \"Operation Type.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the operation.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the operation.\"\n              },\n              {\n                \"key\": \"operation_type\",\n                \"description\": \"Operation type.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Reservation\",\n            \"displayName\": \"Reservation\",\n            \"description\": \"Monitored resource representing a reservation.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container (e.g. project number) associated with the reservation.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The zone that contains the reservation.\"\n              },\n              {\n                \"key\": \"reservation_id\",\n                \"description\": \"Reservation resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/StoragePool\",\n            \"displayName\": \"Storage Pool\",\n            \"description\": \"Monitored resource representing a storage pool.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container (e.g. project number) associated with the storage pool.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location that contains the storage pool.\"\n              },\n              {\n                \"key\": \"storage_pool_id\",\n                \"description\": \"Numerical resource ID of the storage pool.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"gce_instance\",\n            \"displayName\": \"VM Instance\",\n            \"description\": \"A virtual machine instance hosted in Compute Engine.\",\n            \"labels\": [\n              {\n                \"key\": \"project_id\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as \\\"my-project\\\".\"\n              },\n              {\n                \"key\": \"instance_id\",\n                \"description\": \"The numeric VM instance identifier assigned by Compute Engine.\"\n              },\n              {\n                \"key\": \"zone\",\n                \"description\": \"The Compute Engine zone in which the VM is running.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network\",\n                \"compute.googleapis.com/cloud_router_prefixes_from_own_region_per_region_per_vpc_network\",\n                \"compute.googleapis.com/dynamic_routes_per_region_per_peering_group\",\n                \"compute.googleapis.com/global_internal_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/instances_per_peering_group\",\n                \"compute.googleapis.com/instances_per_vpc_network\",\n                \"compute.googleapis.com/internal_lb_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_managed_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_protocol_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/ip_aliases_per_peering_group\",\n                \"compute.googleapis.com/ip_aliases_per_vpc_network\",\n                \"compute.googleapis.com/peerings_per_vpc_network\",\n                \"compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network\",\n                \"compute.googleapis.com/psc_propagated_connections_per_vpc_network\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/exceeded\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/regional_external_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/regional_internal_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/static_routes_per_peering_group\",\n                \"compute.googleapis.com/static_routes_per_vpc_network\",\n                \"compute.googleapis.com/subnet_ranges_per_peering_group\",\n                \"compute.googleapis.com/subnet_ranges_per_vpc_network\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Location\",\n              \"metrics\": [\n                \"compute.googleapis.com/cpus_per_vm_family\",\n                \"compute.googleapis.com/global_dns/request_count\",\n                \"compute.googleapis.com/gpus_per_gpu_family\",\n                \"compute.googleapis.com/inter_region_egress_bandwidth\",\n                \"compute.googleapis.com/local_ssd_total_storage_per_vm_family\",\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/exceeded\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/exceeded\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/exceeded\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/usage\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/exceeded\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/exceeded\",\n                \"compute.googleapis.com/quota/tpus_per_tpu_family/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Interconnect\",\n              \"metrics\": [\n                \"compute.googleapis.com/interconnect_attachments_per_interconnect\",\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/FirewallPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/fqdns_per_global_network_firewall_policy\",\n                \"compute.googleapis.com/fqdns_per_hierarchical_firewall_policy\",\n                \"compute.googleapis.com/fqdns_per_regional_network_firewall_policy\",\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/rule_attributes_per_global_network_firewall_policy\",\n                \"compute.googleapis.com/rule_attributes_per_hierarchical_firewall_policy\",\n                \"compute.googleapis.com/rule_attributes_per_regional_network_firewall_policy\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/SecurityPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/advanced_rules_per_edge_security_policy\",\n                \"compute.googleapis.com/advanced_rules_per_regional_security_policy\",\n                \"compute.googleapis.com/advanced_rules_per_security_policy\",\n                \"compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/exceeded\",\n                \"compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/exceeded\",\n                \"compute.googleapis.com/quota/advanced_rules_per_security_policy/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/OperationType\",\n              \"metrics\": [\n                \"compute.googleapis.com/global_concurrent_operations\",\n                \"compute.googleapis.com/quota/concurrent/global_concurrent_operations/exceeded\",\n                \"compute.googleapis.com/quota/concurrent/internal/global_concurrent_operations/combined_units\",\n                \"compute.googleapis.com/quota/concurrent/internal/regional_concurrent_operations/combined_units\",\n                \"compute.googleapis.com/quota/concurrent/regional_concurrent_operations/exceeded\",\n                \"compute.googleapis.com/regional_concurrent_operations\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"gce_instance\",\n              \"metrics\": [\n                \"compute.googleapis.com/instance/global_dns/request_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Reservation\",\n              \"metrics\": [\n                \"compute.googleapis.com/reservation/reserved\",\n                \"compute.googleapis.com/reservation/assured\",\n                \"compute.googleapis.com/reservation/used\",\n                \"compute.googleapis.com/reservation/internal/matching_instances\",\n                \"compute.googleapis.com/reservation/internal/prespuns_by_state\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/StoragePool\",\n              \"metrics\": [\n                \"compute.googleapis.com/storage_pool/disks\",\n                \"compute.googleapis.com/storage_pool/provisioned_capacity\",\n                \"compute.googleapis.com/storage_pool/used_capacity\",\n                \"compute.googleapis.com/storage_pool/total_disk_provisioned_capacity\",\n                \"compute.googleapis.com/storage_pool/provisioned_iops\",\n                \"compute.googleapis.com/storage_pool/used_iops\",\n                \"compute.googleapis.com/storage_pool/total_disk_provisioned_iops\",\n                \"compute.googleapis.com/storage_pool/provisioned_throughput\",\n                \"compute.googleapis.com/storage_pool/used_throughput\",\n                \"compute.googleapis.com/storage_pool/total_disk_provisioned_throughput\",\n                \"compute.googleapis.com/storage_pool/capacity_utilization\",\n                \"compute.googleapis.com/storage_pool/iops_utilization\",\n                \"compute.googleapis.com/storage_pool/throughput_utilization\",\n                \"compute.googleapis.com/storage_pool/capacity_overprovisioning\",\n                \"compute.googleapis.com/storage_pool/iops_overprovisioning\",\n                \"compute.googleapis.com/storage_pool/throughput_overprovisioning\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Location\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/limit\",\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/usage\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/limit\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/usage\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/limit\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/limit\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/usage\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/limit\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/usage\",\n                \"compute.googleapis.com/quota/tpus_per_tpu_family/limit\",\n                \"compute.googleapis.com/quota/tpus_per_tpu_family/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/limit\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/usage\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/limit\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/usage\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Interconnect\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/limit\",\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/FirewallPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/SecurityPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/limit\",\n                \"compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/usage\",\n                \"compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/limit\",\n                \"compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/usage\",\n                \"compute.googleapis.com/quota/advanced_rules_per_security_policy/limit\",\n                \"compute.googleapis.com/quota/advanced_rules_per_security_policy/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/OperationType\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/concurrent/global_concurrent_operations/limit\",\n                \"compute.googleapis.com/quota/concurrent/regional_concurrent_operations/limit\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340009\"\n    },\n    {\n      \"name\": \"projects/12340009/services/oslogin.googleapis.com\",\n      \"config\": {\n        \"name\": \"oslogin.googleapis.com\",\n        \"title\": \"Cloud OS Login API\",\n        \"documentation\": {\n          \"summary\": \"You can use OS Login to manage access to your VM instances using IAM roles.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340009\"\n    },\n    {\n      \"name\": \"projects/12340009/services/recommender.googleapis.com\",\n      \"config\": {\n        \"name\": \"recommender.googleapis.com\",\n        \"title\": \"Recommender API\",\n        \"documentation\": {},\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340009\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/lb3/project.tf",
    "content": "/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nresource \"random_string\" \"project_id_suffix\" {\n  length  = 8\n  number  = true\n  lower   = true\n  upper   = false\n  special = false\n}\n\nresource \"google_project\" \"project\" {\n  name            = \"gcpdiag test - lb3\"\n  project_id      = \"gcpdiag-lb3-${random_string.project_id_suffix.id}\"\n  org_id          = var.folder_id == \"\" ? var.org_id : null\n  folder_id       = var.folder_id != \"\" ? var.folder_id : null\n  billing_account = var.billing_account_id\n  labels = {\n    gcpdiag : \"test\"\n  }\n}\n\nresource \"google_project_service\" \"compute\" {\n  project = google_project.project.project_id\n  service = \"compute.googleapis.com\"\n}\n\nresource \"google_project_service\" \"certificate_manager\" {\n  project = google_project.project.project_id\n  service = \"certificatemanager.googleapis.com\"\n}\n\nresource \"google_project_service\" \"recommender\" {\n  project = google_project.project.project_id\n  service = \"recommender.googleapis.com\"\n}\n\noutput \"project_id\" {\n  value = google_project.project.project_id\n}\n\noutput \"project_id_suffix\" {\n  value = random_string.project_id_suffix.id\n}\n\noutput \"project_nr\" {\n  value = google_project.project.number\n}\n\noutput \"org_id\" {\n  value = var.org_id\n}\n"
  },
  {
    "path": "test-data/lb3/ssl-lb.tf",
    "content": "resource \"google_compute_global_address\" \"ssl-address\" {\n  depends_on = [google_project_service.compute]\n  project    = google_project.project.project_id\n  name       = \"lb-ssl-ip\"\n  ip_version = \"IPV4\"\n}\n\n\nresource \"google_compute_global_forwarding_rule\" \"ssl-rule\" {\n  project               = google_project.project.project_id\n  name                  = \"ssl-rule\"\n  ip_protocol           = \"TCP\"\n  load_balancing_scheme = \"EXTERNAL\"\n  port_range            = \"443-443\"\n  target                = google_compute_target_ssl_proxy.ssl-proxy.id\n  ip_address            = google_compute_global_address.ssl-address.id\n}\n\nresource \"google_compute_target_ssl_proxy\" \"ssl-proxy\" {\n  project          = google_project.project.project_id\n  name             = \"ssl-proxy\"\n  ssl_certificates = [google_compute_managed_ssl_certificate.cert3.id, google_compute_managed_ssl_certificate.cert5.id]\n  backend_service  = google_compute_backend_service.tcp-backend-service.id\n}\n\nresource \"google_compute_backend_service\" \"tcp-backend-service\" {\n  name                            = \"tcp-backend-service\"\n  project                         = google_project.project.project_id\n  connection_draining_timeout_sec = 0\n  health_checks                   = [google_compute_health_check.default.id]\n  load_balancing_scheme           = \"EXTERNAL_MANAGED\"\n  port_name                       = \"http\"\n  protocol                        = \"TCP\"\n  session_affinity                = \"NONE\"\n  timeout_sec                     = 30\n  backend {\n    group           = google_compute_instance_group_manager.default.instance_group\n    balancing_mode  = \"UTILIZATION\"\n    capacity_scaler = 1.0\n  }\n}\n"
  },
  {
    "path": "test-data/lb3/update_ip.py",
    "content": "\"\"\"Updates IP addresses of global forwarding rules for consistent test mocks.\n\nReplaces dynamically assigned IP addresses from API responses with fixed IPs\nto ensure predictable output for testing.  New projects provisioned with\ndifferent IPs will have their forwarding rule IPs rewritten to these constants.\n\"\"\"\n\nimport json\nimport sys\n\nnew_global_ip_addresses = {\n    'https-content-rule': ('1.2.3.4'),\n    'https-content-rule-working': ('2600:1901:0:d0d7::'),\n    'ssl-rule': ('192.168.3.5')\n}\n\ndata = json.load(sys.stdin)\n\nif ('items' in data and 'global' in data['items'] and\n    'forwardingRules' in data['items']['global']):\n  for rule in data['items']['global']['forwardingRules']:\n    if rule['name'] in new_global_ip_addresses:\n      rule['IPAddress'] = new_global_ip_addresses[rule['name']]\n\nprint(json.dumps(data, indent=2))\n"
  },
  {
    "path": "test-data/lb3/variables.tf",
    "content": "variable \"billing_account_id\" {}\n\nvariable \"org_id\" {}\nvariable \"folder_id\" { default = \"\" }\n"
  },
  {
    "path": "test-data/looker1/Makefile",
    "content": "PROJECT_ID  := $(shell terraform output -raw project_id)\nPROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix)\nPROJECT_NR  := $(shell terraform output -raw project_nr)\nCURL         = ../../bin/curl-wrap.sh\nJSON_CLEANER = ../../bin/json-cleaner\n\nFAKE_PROJECT_ID_SUFFIX = aaaa\nFAKE_PROJECT_NR = 12340031\nFAKE_ORG_ID = 11112222\nSED_SUBST_FAKE = sed -e \"s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/\" \\\n\t\t     -e \"s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/\" \\\n\t\t     -e \"s/$(ORG_ID)/$(FAKE_ORG_ID)/\" \\\n\nall:\t\\\n\tjson-dumps/services.json \\\n\tjson-dumps/project.json\t\\\n\tjson-dumps/logging-entries-1.json\n\njson-dumps/services.json:\n\t$(CURL) -fsS \\\n\t  'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \\\n\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/project.json:\n\t$(CURL) -fsS \\\n\t  'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \\\n\t  | $(SED_SUBST_FAKE) >$@\n\ndefine LOGGING_ENTRIES_BODY\n{\n\t\"resourceNames\": [\"projects/$(PROJECT_ID)\"],\n\t\"orderBy\": \"timestamp desc\",\n\t\"filter\": \"\n\t\ttimestamp > \\\"2024-12-01:00:00+00:00\\\" AND\n\t\ttimestamp < \\\"2025-07-30:00:00+00:00\\\" AND\n\t\tresource.type=\\\"bigquery_resource\\\" AND\n\t\tlog_id(\\\"cloudaudit.googleapis.com/data_access\\\")\n\t\"\n}\nendef\nexport LOGGING_ENTRIES_BODY\n\njson-dumps/logging-entries-1.json:\n\t$(CURL) -fsS \\\n\t\t'https://logging.googleapis.com/v2/entries:list' \\\n\t\t--header \"Content-Type:text/json\" \\\n\t\t-d \"$$LOGGING_ENTRIES_BODY\" \\\n\t\t| $(SED_SUBST_FAKE) >$@\n"
  },
  {
    "path": "test-data/looker1/json-dumps/logging-entries-1.json",
    "content": "{\n  \"entries\": [\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"status\": {},\n        \"authenticationInfo\": {\n          \"principalEmail\": \"user@google.com\"\n        },\n        \"requestMetadata\": {\n          \"callerIp\": \"2a00:79e0:2400:9:2c1f:be9b:5903:2daa\",\n          \"requestAttributes\": {},\n          \"destinationAttributes\": {}\n        },\n        \"serviceName\": \"bigquery.googleapis.com\",\n        \"methodName\": \"jobservice.jobcompleted\",\n        \"resourceName\": \"projects/looker-dcl-testground/jobs/job_NlDHCW9OeGk4ctnmdUp_g2JTTLrz\",\n        \"serviceData\": {\n          \"@type\": \"type.googleapis.com/google.cloud.bigquery.logging.v1.AuditData\",\n          \"jobCompletedEvent\": {\n            \"eventName\": \"query_job_completed\",\n            \"job\": {\n              \"jobName\": {\n                \"projectId\": \"looker-dcl-testground\",\n                \"jobId\": \"job_NlDHCW9OeGk4ctnmdUp_g2JTTLrz\",\n                \"location\": \"US\"\n              },\n              \"jobConfiguration\": {\n                \"labels\": {\n                  \"requestor\": \"looker_studio\",\n                  \"looker_studio_datasource_id\": \"05d6f0b3-1255-44cf-a964-0b79d812cfe6\",\n                  \"looker_studio_report_id\": \"272a0671-8f81-42ac-9fb8-6fcb45034fe6\"\n                },\n                \"query\": {\n                  \"query\": \"SELECT clmn0_, COUNT(1) AS t0_qt_q0pgewysud FROM (\\nSELECT t0.description AS clmn0_ FROM `looker-dcl-testground.brazil_real_estate_listings.properties_sell_201802` AS t0\\n) GROUP BY clmn0_ ORDER BY t0_qt_q0pgewysud DESC LIMIT 2000001;\",\n                  \"destinationTable\": {\n                    \"projectId\": \"looker-dcl-testground\",\n                    \"datasetId\": \"_11f6c267f2e8fe4e2dcb42472fe71e58979a72cb\",\n                    \"tableId\": \"anon6be941ca4a4cb2c9935607206a7d6a0b44cf8011a17545e5a665c120fb316cd4\"\n                  },\n                  \"createDisposition\": \"CREATE_IF_NEEDED\",\n                  \"writeDisposition\": \"WRITE_TRUNCATE\",\n                  \"defaultDataset\": {},\n                  \"queryPriority\": \"QUERY_INTERACTIVE\",\n                  \"statementType\": \"SELECT\"\n                }\n              },\n              \"jobStatus\": {\n                \"state\": \"DONE\",\n                \"error\": {}\n              },\n              \"jobStatistics\": {\n                \"createTime\": \"2025-07-29T10:04:21.161Z\",\n                \"startTime\": \"2025-07-29T10:04:21.230Z\",\n                \"endTime\": \"2025-07-29T10:04:30.078Z\",\n                \"totalProcessedBytes\": \"200126736\",\n                \"totalBilledBytes\": \"200278016\",\n                \"billingTier\": 1,\n                \"totalSlotMs\": \"23009\",\n                \"referencedTables\": [\n                  {\n                    \"projectId\": \"looker-dcl-testground\",\n                    \"datasetId\": \"brazil_real_estate_listings\",\n                    \"tableId\": \"properties_sell_201802\"\n                  }\n                ],\n                \"totalTablesProcessed\": 1,\n                \"queryOutputRowCount\": \"318039\",\n                \"reservation\": \"unreserved\"\n              }\n            }\n          }\n        }\n      },\n      \"insertId\": \"mhx03dek1dwo\",\n      \"resource\": {\n        \"type\": \"bigquery_resource\",\n        \"labels\": {\n          \"project_id\": \"looker-dcl-testground\"\n        }\n      },\n      \"timestamp\": \"2025-07-29T10:04:30.122558Z\",\n      \"severity\": \"INFO\",\n      \"logName\": \"projects/looker-dcl-testground/logs/cloudaudit.googleapis.com%2Fdata_access\",\n      \"receiveTimestamp\": \"2025-07-29T10:04:30.366020604Z\"\n    },\n    {\n      \"protoPayload\": {\n        \"@type\": \"type.googleapis.com/google.cloud.audit.AuditLog\",\n        \"status\": {},\n        \"authenticationInfo\": {\n          \"principalEmail\": \"user@google.com\"\n        },\n        \"requestMetadata\": {\n          \"callerIp\": \"2401:4900:93b9:2241:59a9:48e3:4930:d28e\",\n          \"requestAttributes\": {},\n          \"destinationAttributes\": {}\n        },\n        \"serviceName\": \"bigquery.googleapis.com\",\n        \"methodName\": \"jobservice.jobcompleted\",\n        \"resourceName\": \"projects/looker-dcl-testground/jobs/job_irMeL-Hzt8C5jtysvPUeONQLIK6L\",\n        \"serviceData\": {\n          \"@type\": \"type.googleapis.com/google.cloud.bigquery.logging.v1.AuditData\",\n          \"jobCompletedEvent\": {\n            \"eventName\": \"query_job_completed\",\n            \"job\": {\n              \"jobName\": {\n                \"projectId\": \"looker-dcl-testground\",\n                \"jobId\": \"job_irMeL-Hzt8C5jtysvPUeONQLIK6L\",\n                \"location\": \"US\"\n              },\n              \"jobConfiguration\": {\n                \"labels\": {\n                  \"requestor\": \"looker_studio\",\n                  \"looker_studio_datasource_id\": \"a3628b15-fc88-4ace-b2a0-3899cd9863cf\",\n                  \"looker_studio_report_id\": \"422b3505-820b-42d6-95b9-e0529828a4ea\"\n                },\n                \"query\": {\n                  \"query\": \"SELECT clmn0_, SUM(clmn1_) AS t0_qt_at32jpysud FROM (\\nSELECT t0.properati_url AS clmn0_, t0.rooms AS clmn1_ FROM `looker-dcl-testground.brazil_real_estate_listings.properties_sell_201802` AS t0\\n) GROUP BY clmn0_ ORDER BY t0_qt_at32jpysud DESC LIMIT 2000001;\",\n                  \"destinationTable\": {\n                    \"projectId\": \"looker-dcl-testground\",\n                    \"datasetId\": \"_11f6c267f2e8fe4e2dcb42472fe71e58979a72cb\",\n                    \"tableId\": \"anonba504651a02bf3825090e3ea9eed73b1e6a714e6f2a38aa87a5f27ccab692776\"\n                  },\n                  \"createDisposition\": \"CREATE_IF_NEEDED\",\n                  \"writeDisposition\": \"WRITE_TRUNCATE\",\n                  \"defaultDataset\": {},\n                  \"queryPriority\": \"QUERY_INTERACTIVE\",\n                  \"statementType\": \"SELECT\"\n                }\n              },\n              \"jobStatus\": {\n                \"state\": \"DONE\",\n                \"error\": {}\n              },\n              \"jobStatistics\": {\n                \"createTime\": \"2025-07-30T14:55:31.322Z\",\n                \"startTime\": \"2025-07-30T14:55:31.422Z\",\n                \"endTime\": \"2025-07-30T14:55:35.913Z\",\n                \"totalProcessedBytes\": \"44716215\",\n                \"totalBilledBytes\": \"45088768\",\n                \"billingTier\": 1,\n                \"totalSlotMs\": \"8661\",\n                \"referencedTables\": [\n                  {\n                    \"projectId\": \"looker-dcl-testground\",\n                    \"datasetId\": \"brazil_real_estate_listings\",\n                    \"tableId\": \"properties_sell_201802\"\n                  }\n                ],\n                \"totalTablesProcessed\": 1,\n                \"queryOutputRowCount\": \"418113\",\n                \"reservation\": \"unreserved\"\n              }\n            }\n          }\n        }\n      },\n      \"insertId\": \"64q3rxe57m3a\",\n      \"resource\": {\n        \"type\": \"bigquery_resource\",\n        \"labels\": {\n          \"project_id\": \"looker-dcl-testground\"\n        }\n      },\n      \"timestamp\": \"2025-07-30T14:55:35.972330Z\",\n      \"severity\": \"INFO\",\n      \"logName\": \"projects/looker-dcl-testground/logs/cloudaudit.googleapis.com%2Fdata_access\",\n      \"receiveTimestamp\": \"2025-07-30T14:55:36.855356797Z\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/looker1/json-dumps/looker-instances.json",
    "content": "{\n  \"instances\": [\n    {\n      \"name\": \"projects/gcpdiag-looker1-aaaa/locations/us-central1/instances/gcpdiag-test-01\",\n      \"createTime\": \"2024-12-29T10:28:38.159901429Z\",\n      \"updateTime\": \"2025-03-05T11:15:21.229549612Z\",\n      \"state\": \"ACTIVE\",\n      \"platformEdition\": \"LOOKER_CORE_STANDARD_ANNUAL\",\n      \"lookerVersion\": \"25.2.11\",\n      \"egressPublicIp\": \"57.57.57.57\",\n      \"ingressPublicIp\": \"34.34.34.34\",\n      \"lookerUri\": \"https://testinstance.looker.app\",\n      \"publicIpEnabled\": true,\n      \"satisfiesPzs\": false,\n      \"satisfiesPzi\": false\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/looker1/json-dumps/looker.json",
    "content": "{\n  \"instances\": [\n    {\n      \"name\": \"projects/gcpdiag-looker1-aaaa/locations/us-central1/instances/gcpdiag-test-01\",\n      \"createTime\": \"2024-12-29T10:28:38.159901429Z\",\n      \"updateTime\": \"2025-03-05T11:15:21.229549612Z\",\n      \"state\": \"ACTIVE\",\n      \"platformEdition\": \"LOOKER_CORE_STANDARD_ANNUAL\",\n      \"lookerVersion\": \"25.2.11\",\n      \"egressPublicIp\": \"57.57.57.57\",\n      \"ingressPublicIp\": \"34.34.34.34\",\n      \"lookerUri\": \"https://testinstance.looker.app\",\n      \"publicIpEnabled\": true,\n      \"satisfiesPzs\": false,\n      \"satisfiesPzi\": false\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/looker1/json-dumps/operation.json",
    "content": "{\n  \"operations\": [\n    {\n      \"name\": \"projects/gcpdiag-looker1-aaaa/locations/us-central1/operations/operation-1\",\n      \"done\": true,\n      \"metadata\": {\n        \"@type\": \"type.googleapis.com/google.cloud.looker.v1alpha2.OperationMetadata\",\n        \"createTime\": \"2025-05-16T09:27:11.660755969Z\",\n        \"endTime\": \"2025-05-16T09:28:59.269011025Z\",\n        \"target\": \"projects/gcpdiag-looker1-aaaa/locations/us-central1/instances/mukul-private-instance/backups/6a6c25be-2254-4999-8ebb-e223a93e3f0f\",\n        \"verb\": \"create\",\n        \"requestedCancellation\": false,\n        \"apiVersion\": \"v1alpha2\"\n      }\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/looker1/json-dumps/project.json",
    "content": "{\n  \"name\": \"projects/12340031\",\n  \"parent\": \"folders/348077457356\",\n  \"projectId\": \"gcpdiag-looker1-ijtqsckn\",\n  \"state\": \"ACTIVE\",\n  \"displayName\": \"gcpdiag test - looker1\",\n  \"createTime\": \"2024-12-22T17:32:41.842157Z\",\n  \"updateTime\": \"2024-12-22T17:32:41.842157Z\",\n  \"etag\": \"W/\\\"1866d6f7d7a9afd9\\\"\",\n  \"labels\": {\n    \"goog-terraform-provisioned\": \"true\"\n  }\n}\n"
  },
  {
    "path": "test-data/looker1/json-dumps/services.json",
    "content": "{\n  \"services\": [\n    {\n      \"name\": \"projects/12340031/services/analyticshub.googleapis.com\",\n      \"config\": {\n        \"name\": \"analyticshub.googleapis.com\",\n        \"title\": \"Analytics Hub API\",\n        \"documentation\": {\n          \"summary\": \"Exchange data and analytics assets securely and efficiently.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340031\"\n    },\n    {\n      \"name\": \"projects/12340031/services/bigquery.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigquery.googleapis.com\",\n        \"title\": \"BigQuery API\",\n        \"documentation\": {\n          \"summary\": \"A data platform for customers to create, manage, share and query data.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"bigquery.googleapis.com/Table\",\n            \"displayName\": \"BigQuery Table Resource.\",\n            \"description\": \"BigQuery Table Resource.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP resource container associated with this resource, such as \\\"my-project\\\" or \\\"organizations/123\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The cloud location of the BigQuery table.\"\n              },\n              {\n                \"key\": \"table_reference\",\n                \"description\": \"The table reference in the format of project_id:dataset_id.table_id for the BigQuery table.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"bigquery.googleapis.com/Location\",\n            \"displayName\": \"CheckIamPolicy Request Location\",\n            \"description\": \"A BigQuery Location (sometimes called Region).\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The id of the GCP resource container associated with this resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"bigquery.googleapis.com/InternalDifferentialPrivacyBudget\",\n            \"displayName\": \"Differential Privacy Budget\",\n            \"description\": \"Differential Privacy Budget.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container associated with the metric.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location for the quota.\"\n              },\n              {\n                \"key\": \"budget_id\",\n                \"description\": \"A unique identifier for the budget basis of the privacy budget (e.g view_uuid for per-view budgets).\"\n              },\n              {\n                \"key\": \"multi_region\",\n                \"description\": \"The multi-region identifier for the associated resource (e.g \\\"us\\\", \\\"eu\\\"). Used only for multi-region quota metrics.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"bigquery.googleapis.com/ExternalDifferentialPrivacyBudget\",\n            \"displayName\": \"Differential Privacy Budget External\",\n            \"description\": \"Differential Privacy Budget exposed externally to provide privacy budget metrics.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container associated with the metric.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location for the quota.\"\n              },\n              {\n                \"key\": \"budget_id\",\n                \"description\": \"A unique identifier for the budget basis of the privacy budget (e.g view_uuid for per-view budgets).\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"bigquery.googleapis.com/ContinuousJob\",\n            \"displayName\": \"BigQuery Continuous Job\",\n            \"description\": \"Metrics from BigQuery Continuous Jobs.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP resource container associated with this resource, such as \\\"my-project\\\" or \\\"organizations/123\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The Cloud location of the continuous job.\"\n              },\n              {\n                \"key\": \"job_id\",\n                \"description\": \"The ID of the continuous job.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/Table\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_eu/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_us/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_eu/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_us/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/Location\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/quota/internalCheckIamPolicyRequests/exceeded\",\n                \"bigquery.googleapis.com/quota/internalCheckIamPolicyRequests/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/InternalDifferentialPrivacyBudget\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/internal/privacybudget/dp_delta_budget\",\n                \"bigquery.googleapis.com/internal/privacybudget/dp_delta_budget_multi_regional\",\n                \"bigquery.googleapis.com/internal/privacybudget/dp_epsilon_budget\",\n                \"bigquery.googleapis.com/internal/privacybudget/dp_epsilon_budget_multi_regional\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget_multi_regional/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget_multi_regional/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/ExternalDifferentialPrivacyBudget\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/privacybudget/dp_delta_budget\",\n                \"bigquery.googleapis.com/privacybudget/dp_epsilon_budget\",\n                \"bigquery.googleapis.com/quota/privacybudget/dp_delta_budget/exceeded\",\n                \"bigquery.googleapis.com/quota/privacybudget/dp_epsilon_budget/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/ContinuousJob\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/job/continuous/backlog_records\",\n                \"bigquery.googleapis.com/job/continuous/records_read_count\",\n                \"bigquery.googleapis.com/job/continuous/records_written_count\",\n                \"bigquery.googleapis.com/job/continuous/estimated_backlog_logical_bytes\",\n                \"bigquery.googleapis.com/job/continuous/estimated_bytes_processed_count\",\n                \"bigquery.googleapis.com/job/continuous/output_watermark\",\n                \"bigquery.googleapis.com/job/continuous/slots/allocated\",\n                \"bigquery.googleapis.com/job/continuous/end_to_end_latencies\",\n                \"bigquery.googleapis.com/job/continuous/records_read\",\n                \"bigquery.googleapis.com/job/continuous/records_written\",\n                \"bigquery.googleapis.com/job/continuous/estimated_bytes_processed\",\n                \"bigquery.googleapis.com/job/continuous/slots/used_time\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/Location\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/quota/internalCheckIamPolicyRequests/limit\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/Table\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org/limit\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org/usage\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_eu/limit\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_eu/usage\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_us/limit\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_us/usage\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project/limit\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project/usage\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_eu/limit\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_eu/usage\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_us/limit\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_us/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/InternalDifferentialPrivacyBudget\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget_multi_regional/limit\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget_multi_regional/usage\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget_multi_regional/limit\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget_multi_regional/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/ExternalDifferentialPrivacyBudget\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/quota/privacybudget/dp_delta_budget/limit\",\n                \"bigquery.googleapis.com/quota/privacybudget/dp_delta_budget/usage\",\n                \"bigquery.googleapis.com/quota/privacybudget/dp_epsilon_budget/limit\",\n                \"bigquery.googleapis.com/quota/privacybudget/dp_epsilon_budget/usage\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340031\"\n    },\n    {\n      \"name\": \"projects/12340031/services/bigqueryconnection.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigqueryconnection.googleapis.com\",\n        \"title\": \"BigQuery Connection API\",\n        \"documentation\": {\n          \"summary\": \"Allows users to manage BigQuery connections to external data sources.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340031\"\n    },\n    {\n      \"name\": \"projects/12340031/services/bigquerydatapolicy.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigquerydatapolicy.googleapis.com\",\n        \"title\": \"BigQuery Data Policy API\",\n        \"documentation\": {\n          \"summary\": \"Allows users to manage BigQuery data policies.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340031\"\n    },\n    {\n      \"name\": \"projects/12340031/services/bigquerymigration.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigquerymigration.googleapis.com\",\n        \"title\": \"BigQuery Migration API\",\n        \"documentation\": {\n          \"summary\": \"The migration service, exposing apis for migration jobs operations, and agent management.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340031\"\n    },\n    {\n      \"name\": \"projects/12340031/services/bigqueryreservation.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigqueryreservation.googleapis.com\",\n        \"title\": \"BigQuery Reservation API\",\n        \"documentation\": {\n          \"summary\": \"A service to modify your BigQuery flat-rate reservations.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340031\"\n    },\n    {\n      \"name\": \"projects/12340031/services/bigquerystorage.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigquerystorage.googleapis.com\",\n        \"title\": \"BigQuery Storage API\",\n        \"documentation\": {},\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"bigquerystorage.googleapis.com/DataflowWrite\",\n            \"displayName\": \"BigQuery Storage Write API metrics for Dataflow jobs.\",\n            \"description\": \"BigQuery Storage Write API metrics for Dataflow jobs.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project/folder/org associated with this resource. This is the project that runs the Dataflow job.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The BigQuery region in which the Storage API server locates.\"\n              },\n              {\n                \"key\": \"job_name\",\n                \"description\": \"The name of the Dataflow job this worker belongs to.\"\n              },\n              {\n                \"key\": \"job_id\",\n                \"description\": \"The id of the dataflow job the worker belongs to.\"\n              },\n              {\n                \"key\": \"worker_id\",\n                \"description\": \"The ID of the worker, unique for this job_id.\"\n              },\n              {\n                \"key\": \"destination_project\",\n                \"description\": \"The project of BigQuery destination table of the Dataflow job.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"bigquerystorage.googleapis.com/DataflowWrite\",\n              \"metrics\": [\n                \"bigquerystorage.googleapis.com/dataflow_write/request_count\",\n                \"bigquerystorage.googleapis.com/dataflow_write/uploaded_row_count\",\n                \"bigquerystorage.googleapis.com/dataflow_write/uploaded_bytes_count\",\n                \"bigquerystorage.googleapis.com/dataflow_write/billed_bytes_count\",\n                \"bigquerystorage.googleapis.com/dataflow_write/connection_results_count\",\n                \"bigquerystorage.googleapis.com/dataflow_write/server_side_latencies\",\n                \"bigquerystorage.googleapis.com/dataflow_write/transcoding_latencies\",\n                \"bigquerystorage.googleapis.com/dataflow_write/concurrent_connections\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340031\"\n    },\n    {\n      \"name\": \"projects/12340031/services/compute.googleapis.com\",\n      \"config\": {\n        \"name\": \"compute.googleapis.com\",\n        \"title\": \"Compute Engine API\",\n        \"documentation\": {\n          \"summary\": \"Creates and runs virtual machines on Google Cloud Platform.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"compute.googleapis.com/VpcNetwork\",\n            \"displayName\": \"VPC Network\",\n            \"description\": \"VPC Network.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the VPC Network.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the VPC Network, global always.\"\n              },\n              {\n                \"key\": \"network_id\",\n                \"description\": \"VPC Network resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Location\",\n            \"displayName\": \"Compute Location\",\n            \"description\": \"A location in the Compute API.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the Compute Location.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Interconnect\",\n            \"displayName\": \"Interconnect\",\n            \"description\": \"Interconnect.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the Interconnect.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the Interconnect.\"\n              },\n              {\n                \"key\": \"interconnect_id\",\n                \"description\": \"Interconnect resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/FirewallPolicy\",\n            \"displayName\": \"Firewall policy\",\n            \"description\": \"Firewall policy.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project or organization) associated with the firewall policy.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the firewall policy.\"\n              },\n              {\n                \"key\": \"firewall_policy_id\",\n                \"description\": \"Firewall policy resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/SecurityPolicy\",\n            \"displayName\": \"Security policy\",\n            \"description\": \"Security policy.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the security policy.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the security policy.\"\n              },\n              {\n                \"key\": \"security_policy_id\",\n                \"description\": \"Security policy resource ID.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/OperationType\",\n            \"displayName\": \"Operation Type\",\n            \"description\": \"Operation Type.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the operation.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the operation.\"\n              },\n              {\n                \"key\": \"operation_type\",\n                \"description\": \"Operation type.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Reservation\",\n            \"displayName\": \"Reservation\",\n            \"description\": \"Monitored resource representing a reservation.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container (e.g. project number) associated with the reservation.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The zone that contains the reservation.\"\n              },\n              {\n                \"key\": \"reservation_id\",\n                \"description\": \"Reservation resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/StoragePool\",\n            \"displayName\": \"Storage Pool\",\n            \"description\": \"Monitored resource representing a storage pool.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container (e.g. project number) associated with the storage pool.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location that contains the storage pool.\"\n              },\n              {\n                \"key\": \"storage_pool_id\",\n                \"description\": \"Numerical resource ID of the storage pool.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"gce_instance\",\n            \"displayName\": \"VM Instance\",\n            \"description\": \"A virtual machine instance hosted in Compute Engine.\",\n            \"labels\": [\n              {\n                \"key\": \"project_id\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as \\\"my-project\\\".\"\n              },\n              {\n                \"key\": \"instance_id\",\n                \"description\": \"The numeric VM instance identifier assigned by Compute Engine.\"\n              },\n              {\n                \"key\": \"zone\",\n                \"description\": \"The Compute Engine zone in which the VM is running.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/NetworkPathQuotasResource\",\n            \"displayName\": \"Network Path Quotas Resource.\",\n            \"description\": \"Network Path Quotas Resource.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container associated with the metric.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location for the quota.\"\n              },\n              {\n                \"key\": \"network_path_id\",\n                \"description\": \"The network path custom dimension.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network\",\n                \"compute.googleapis.com/cloud_router_prefixes_from_own_region_per_region_per_vpc_network\",\n                \"compute.googleapis.com/dynamic_routes_per_region_per_peering_group\",\n                \"compute.googleapis.com/global_internal_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/instances_per_peering_group\",\n                \"compute.googleapis.com/instances_per_vpc_network\",\n                \"compute.googleapis.com/internal_lb_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_managed_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_protocol_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/ip_aliases_per_peering_group\",\n                \"compute.googleapis.com/ip_aliases_per_vpc_network\",\n                \"compute.googleapis.com/peerings_per_vpc_network\",\n                \"compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network\",\n                \"compute.googleapis.com/psc_propagated_connections_per_vpc_network\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/multicast_consumers_per_zone_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/exceeded\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/regional_external_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/regional_internal_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/static_routes_per_peering_group\",\n                \"compute.googleapis.com/static_routes_per_vpc_network\",\n                \"compute.googleapis.com/subnet_ranges_per_peering_group\",\n                \"compute.googleapis.com/subnet_ranges_per_vpc_network\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Location\",\n              \"metrics\": [\n                \"compute.googleapis.com/cpus_per_vm_family\",\n                \"compute.googleapis.com/global_dns/request_count\",\n                \"compute.googleapis.com/gpus_per_gpu_family\",\n                \"compute.googleapis.com/inter_region_egress_bandwidth\",\n                \"compute.googleapis.com/local_ssd_total_storage_per_vm_family\",\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/exceeded\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/exceeded\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/exceeded\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/usage\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/exceeded\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/exceeded\",\n                \"compute.googleapis.com/quota/tpus_per_tpu_family/exceeded\",\n                \"compute.googleapis.com/tpus_per_tpu_family\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Interconnect\",\n              \"metrics\": [\n                \"compute.googleapis.com/interconnect_attachments_per_interconnect\",\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/exceeded\",\n                \"compute.googleapis.com/quota/wire_groups_per_interconnect/exceeded\",\n                \"compute.googleapis.com/wire_groups_per_interconnect\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/FirewallPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/fqdns_per_global_network_firewall_policy\",\n                \"compute.googleapis.com/fqdns_per_hierarchical_firewall_policy\",\n                \"compute.googleapis.com/fqdns_per_regional_network_firewall_policy\",\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/rule_attributes_per_global_network_firewall_policy\",\n                \"compute.googleapis.com/rule_attributes_per_hierarchical_firewall_policy\",\n                \"compute.googleapis.com/rule_attributes_per_regional_network_firewall_policy\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/SecurityPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/advanced_rules_per_edge_security_policy\",\n                \"compute.googleapis.com/advanced_rules_per_regional_security_policy\",\n                \"compute.googleapis.com/advanced_rules_per_security_policy\",\n                \"compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/exceeded\",\n                \"compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/exceeded\",\n                \"compute.googleapis.com/quota/advanced_rules_per_security_policy/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/OperationType\",\n              \"metrics\": [\n                \"compute.googleapis.com/global_concurrent_operations\",\n                \"compute.googleapis.com/quota/concurrent/global_concurrent_operations/exceeded\",\n                \"compute.googleapis.com/quota/concurrent/internal/global_concurrent_operations/combined_units\",\n                \"compute.googleapis.com/quota/concurrent/internal/regional_concurrent_operations/combined_units\",\n                \"compute.googleapis.com/quota/concurrent/regional_concurrent_operations/exceeded\",\n                \"compute.googleapis.com/regional_concurrent_operations\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"gce_instance\",\n              \"metrics\": [\n                \"compute.googleapis.com/instance/global_dns/request_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Reservation\",\n              \"metrics\": [\n                \"compute.googleapis.com/reservation/reserved\",\n                \"compute.googleapis.com/reservation/assured\",\n                \"compute.googleapis.com/reservation/used\",\n                \"compute.googleapis.com/reservation/internal/matching_instances\",\n                \"compute.googleapis.com/reservation/internal/prespuns_by_state\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/StoragePool\",\n              \"metrics\": [\n                \"compute.googleapis.com/storage_pool/disks\",\n                \"compute.googleapis.com/storage_pool/provisioned_capacity\",\n                \"compute.googleapis.com/storage_pool/used_capacity\",\n                \"compute.googleapis.com/storage_pool/total_disk_provisioned_capacity\",\n                \"compute.googleapis.com/storage_pool/provisioned_iops\",\n                \"compute.googleapis.com/storage_pool/used_iops\",\n                \"compute.googleapis.com/storage_pool/total_disk_provisioned_iops\",\n                \"compute.googleapis.com/storage_pool/provisioned_throughput\",\n                \"compute.googleapis.com/storage_pool/used_throughput\",\n                \"compute.googleapis.com/storage_pool/total_disk_provisioned_throughput\",\n                \"compute.googleapis.com/storage_pool/capacity_utilization\",\n                \"compute.googleapis.com/storage_pool/iops_utilization\",\n                \"compute.googleapis.com/storage_pool/throughput_utilization\",\n                \"compute.googleapis.com/storage_pool/capacity_overprovisioning\",\n                \"compute.googleapis.com/storage_pool/iops_overprovisioning\",\n                \"compute.googleapis.com/storage_pool/throughput_overprovisioning\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Location\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/limit\",\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/usage\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/limit\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/usage\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/limit\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/limit\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/usage\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/limit\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/usage\",\n                \"compute.googleapis.com/quota/tpus_per_tpu_family/limit\",\n                \"compute.googleapis.com/quota/tpus_per_tpu_family/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/limit\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/usage\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/multicast_consumers_per_zone_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/multicast_consumers_per_zone_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/limit\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/usage\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Interconnect\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/limit\",\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/usage\",\n                \"compute.googleapis.com/quota/wire_groups_per_interconnect/limit\",\n                \"compute.googleapis.com/quota/wire_groups_per_interconnect/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/FirewallPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/SecurityPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/limit\",\n                \"compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/usage\",\n                \"compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/limit\",\n                \"compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/usage\",\n                \"compute.googleapis.com/quota/advanced_rules_per_security_policy/limit\",\n                \"compute.googleapis.com/quota/advanced_rules_per_security_policy/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/OperationType\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/concurrent/global_concurrent_operations/limit\",\n                \"compute.googleapis.com/quota/concurrent/regional_concurrent_operations/limit\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/NetworkPathQuotasResource\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/wire_groups_bronze_unmetered_bandwidth_gbps/exceeded\",\n                \"compute.googleapis.com/quota/wire_groups_gold_unmetered_bandwidth_gbps/exceeded\",\n                \"compute.googleapis.com/quota/wire_groups_silver_unmetered_bandwidth_gbps/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/NetworkPathQuotasResource\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/wire_groups_bronze_unmetered_bandwidth_gbps/limit\",\n                \"compute.googleapis.com/quota/wire_groups_bronze_unmetered_bandwidth_gbps/usage\",\n                \"compute.googleapis.com/quota/wire_groups_gold_unmetered_bandwidth_gbps/limit\",\n                \"compute.googleapis.com/quota/wire_groups_gold_unmetered_bandwidth_gbps/usage\",\n                \"compute.googleapis.com/quota/wire_groups_silver_unmetered_bandwidth_gbps/limit\",\n                \"compute.googleapis.com/quota/wire_groups_silver_unmetered_bandwidth_gbps/usage\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340031\"\n    },\n    {\n      \"name\": \"projects/12340031/services/dataform.googleapis.com\",\n      \"config\": {\n        \"name\": \"dataform.googleapis.com\",\n        \"title\": \"Dataform API\",\n        \"documentation\": {\n          \"summary\": \"Service to develop, version control, and operationalize SQL pipelines in BigQuery.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340031\"\n    },\n    {\n      \"name\": \"projects/12340031/services/dataplex.googleapis.com\",\n      \"config\": {\n        \"name\": \"dataplex.googleapis.com\",\n        \"title\": \"Cloud Dataplex API\",\n        \"documentation\": {\n          \"summary\": \"Dataplex API is used to manage the lifecycle of data lakes.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"dataplex.googleapis.com/Lake\",\n            \"displayName\": \"Cloud Dataplex Lake\",\n            \"description\": \"A Cloud Dataplex Lake.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of GCP project associated with this resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The GCP region associated with this resource.\"\n              },\n              {\n                \"key\": \"lake_id\",\n                \"description\": \"The identifier of this Lake resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"dataplex.googleapis.com/Zone\",\n            \"displayName\": \"Cloud Dataplex Zone\",\n            \"description\": \"A Zone within a Cloud Dataplex Lake.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of GCP project associated with this resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The GCP region associated with this resource.\"\n              },\n              {\n                \"key\": \"lake_id\",\n                \"description\": \"The identifier of the Lake resource containing this resource.\"\n              },\n              {\n                \"key\": \"zone_id\",\n                \"description\": \"The identifier of this Zone resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"dataplex.googleapis.com/Asset\",\n            \"displayName\": \"Cloud Dataplex Asset\",\n            \"description\": \"An Asset within a Cloud Dataplex Lake.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of GCP project associated with this resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The GCP region associated with this resource.\"\n              },\n              {\n                \"key\": \"lake_id\",\n                \"description\": \"The identifier of the Lake resource containing this resource.\"\n              },\n              {\n                \"key\": \"zone_id\",\n                \"description\": \"The identifier of the Zone resource containing this resource.\"\n              },\n              {\n                \"key\": \"asset_id\",\n                \"description\": \"The identifier of this Asset resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"dataplex.googleapis.com/Environment\",\n            \"displayName\": \"Cloud Dataplex Environment\",\n            \"description\": \"An Environment within a Cloud Dataplex Lake.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of GCP project associated with this resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The GCP region associated with this resource.\"\n              },\n              {\n                \"key\": \"lake_id\",\n                \"description\": \"The identifier of the Lake resource containing this resource.\"\n              },\n              {\n                \"key\": \"environment_id\",\n                \"description\": \"The identifier of this Environment resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"dataplex.googleapis.com/Lake\",\n              \"metrics\": [\n                \"dataplex.googleapis.com/lake/requires_action\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"dataplex.googleapis.com/Zone\",\n              \"metrics\": [\n                \"dataplex.googleapis.com/zone/requires_action\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"dataplex.googleapis.com/Asset\",\n              \"metrics\": [\n                \"dataplex.googleapis.com/asset/requires_action\",\n                \"dataplex.googleapis.com/asset/active\",\n                \"dataplex.googleapis.com/asset/data_items\",\n                \"dataplex.googleapis.com/asset/data_size\",\n                \"dataplex.googleapis.com/asset/tables\",\n                \"dataplex.googleapis.com/asset/filesets\",\n                \"dataplex.googleapis.com/asset/entities_pending_bigquery_metadata_updates\",\n                \"dataplex.googleapis.com/asset/entities_pending_bigquery_iampolicy_updates\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340031\"\n    },\n    {\n      \"name\": \"projects/12340031/services/logging.googleapis.com\",\n      \"config\": {\n        \"name\": \"logging.googleapis.com\",\n        \"title\": \"Cloud Logging API\",\n        \"documentation\": {\n          \"summary\": \"Writes log entries and manages your Cloud Logging configuration.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"logging.googleapis.com/ChargedProject\",\n            \"displayName\": \"Cloud logging target\",\n            \"description\": \"A cloud logging specialization target schema of cloud.ChargedProject.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The monitored resource container. Could be project, workspace, etc.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The service-specific notion of location.\"\n              },\n              {\n                \"key\": \"service\",\n                \"description\": \"The name of the API service with which the data is associated (e.g.,'logging.googleapis.com').\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"logging.googleapis.com/ChargedProject\",\n              \"metrics\": [\n                \"logging.googleapis.com/billing/ingested_bytes\",\n                \"logging.googleapis.com/billing/stored_bytes\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340031\"\n    },\n    {\n      \"name\": \"projects/12340031/services/looker.googleapis.com\",\n      \"config\": {\n        \"name\": \"looker.googleapis.com\",\n        \"title\": \"Looker (Google Cloud core) API\",\n        \"documentation\": {},\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"looker.googleapis.com/Instance\",\n            \"displayName\": \"Looker Instance\",\n            \"description\": \"A Looker Instance.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP Project owning the Instance.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The region in which the instance is running.\"\n              },\n              {\n                \"key\": \"instance_id\",\n                \"description\": \"The ID of the Looker Instance.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"looker.googleapis.com/Instance\",\n              \"metrics\": [\n                \"looker.googleapis.com/internal/project_mapping\",\n                \"looker.googleapis.com/internal/clh/repair_count\",\n                \"looker.googleapis.com/internal/clh/repair_applicability_count\",\n                \"looker.googleapis.com/internal/clh/repair_result_count\",\n                \"looker.googleapis.com/internal/clh/report_instance_state_count\",\n                \"looker.googleapis.com/internal/clh/repair_latency\",\n                \"looker.googleapis.com/internal/clh/update_instance_count\",\n                \"looker.googleapis.com/internal/helltool/admin_settings_update_count\",\n                \"looker.googleapis.com/internal/clh/export_step_count\",\n                \"looker.googleapis.com/internal/clh/export_step_latencies\",\n                \"looker.googleapis.com/internal/clh/import_step_count\",\n                \"looker.googleapis.com/internal/clh/import_step_latencies\",\n                \"looker.googleapis.com/internal/clh/rollback_import_step_count\",\n                \"looker.googleapis.com/internal/clh/rollback_import_step_latencies\",\n                \"looker.googleapis.com/internal/slm/exporter_count\",\n                \"looker.googleapis.com/internal/slm/exporter_latencies\",\n                \"looker.googleapis.com/internal/slm/importer_count\",\n                \"looker.googleapis.com/internal/slm/importer_latencies\",\n                \"looker.googleapis.com/internal/clh/infra_unhealthy_count\",\n                \"looker.googleapis.com/internal/health\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340031\"\n    },\n    {\n      \"name\": \"projects/12340031/services/oslogin.googleapis.com\",\n      \"config\": {\n        \"name\": \"oslogin.googleapis.com\",\n        \"title\": \"Cloud OS Login API\",\n        \"documentation\": {\n          \"summary\": \"You can use OS Login to manage access to your VM instances using IAM roles.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340031\"\n    },\n    {\n      \"name\": \"projects/12340031/services/websecurityscanner.googleapis.com\",\n      \"config\": {\n        \"name\": \"websecurityscanner.googleapis.com\",\n        \"title\": \"Web Security Scanner API\",\n        \"documentation\": {\n          \"summary\": \"Scans your Compute and App Engine apps for common web vulnerabilities.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340031\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/looker1/project.tf",
    "content": "resource \"random_string\" \"project_id\" {\n  length  = 8\n  number  = true\n  lower   = true\n  upper   = false\n  special = false\n}\n\nresource \"google_project\" \"project\" {\n  name       = \"gcpdiag test - looker1\"\n  project_id = \"gcpdiag-looker1-${random_string.project_id.id}\"\n  org_id     = var.folder_id == \"\" ? var.org_id : null\n  folder_id  = var.folder_id != \"\" ? var.folder_id : null\n  // billing_account = var.billing_account_id\n  lifecycle {\n    ignore_changes = all\n  }\n}\n\nresource \"google_project_service\" \"computer_api\" {\n  project = google_project.project.project_id\n  service = \"compute.googleapis.com\"\n}\nresource \"google_project_service\" \"looker_api\" {\n  project = google_project.project.project_id\n  service = \"looker.googleapis.com\"\n}\n\nresource \"google_project_service\" \"bigquery_api\" {\n  project = google_project.project.project_id\n  service = \"bigquery.googleapis.com\"\n}\nresource \"google_project_service\" \"logging_api\" {\n  project = google_project.project.project_id\n  service = \"logging.googleapis.com\"\n}\noutput \"project_id\" {\n  value = google_project.project.project_id\n}\n\noutput \"project_id_suffix\" {\n  value = random_string.project_id.id\n}\n\noutput \"project_nr\" {\n  value = google_project.project.number\n}\n\noutput \"org_id\" {\n  value = var.org_id\n}\n"
  },
  {
    "path": "test-data/looker1/variables.tf",
    "content": "variable \"billing_account_id\" {}\n\nvariable \"org_id\" {}\nvariable \"folder_id\" { default = \"\" }\n"
  },
  {
    "path": "test-data/nat1/Makefile",
    "content": "PROJECT_ID  := $(shell terraform output -raw project_id)\nPROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix)\nPROJECT_NR  := $(shell terraform output -raw project_nr)\nORG_ID      := $(shell terraform output -raw org_id)\nCURL         = ../../bin/curl-wrap.sh\nJSON_CLEANER = ../../bin/json-cleaner\n\nFAKE_PROJECT_ID_SUFFIX = aaaa\nFAKE_PROJECT_NR = 12340010\nFAKE_ORG_ID = 22223333\nSED_SUBST_FAKE = sed -e \"s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/\" \\\n\t\t\t\t-e \"s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/\" \\\n\t\t\t\t-e \"s/$(ORG_ID)/$(FAKE_ORG_ID)/\" \\\n\nREGION1 = europe-west4\nZONE1 = europe-west4-a\nCLOUD_ROUTER = public-nat-cloud-router\n\n\nall:\t\\\n\tjson-dumps/project.json \\\n\tjson-dumps/services.json \\\n\tjson-dumps/compute-instances-$(ZONE1).json \\\n\tjson-dumps/compute-network-default.json \\\n\tjson-dumps/compute-network-nat-vpc-network.json \\\n\tjson-dumps/monitoring-query.json \\\n\tjson-dumps/compute-routers-$(REGION1).json \\\n\tjson-dumps/compute-routers-natMappingInfo-$(CLOUD_ROUTER).json \\\n\tjson-dumps/compute-routers-routerStatus-$(CLOUD_ROUTER).json \\\n\tjson-dumps/compute-routers-natIpInfo-$(CLOUD_ROUTER).json\n\ninclude ../Makefile.inc\n\ndefine MONITORING_QUERY_NAT_ALLOCATION_FAILED\n{ \\\n  \"query\": \"fetch nat_gateway \\\n\t| metric 'router.googleapis.com/nat/nat_allocation_failed' \\\n\t| within 5m \\\n\t\" \\\n}\nendef\n\njson-dumps/monitoring-query.json:\n\t$(CURL) -fsS \\\n\t\t'https://monitoring.googleapis.com/v3/projects/$(PROJECT_ID)/timeSeries:query' \\\n\t\t--header \"Content-Type: application/json\" -X POST \\\n\t\t--data '$(MONITORING_QUERY_NAT_ALLOCATION_FAILED)' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-routers-%.json:\n\t$(CURL) -fsS \\\n\t        'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/regions/$*/routers/' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-routers-natMappingInfo-%.json:\n\t$(CURL) -fsS \\\n\t        'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/regions/$(REGION1)/routers/$*/getNatMappingInfo' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-network-nat-vpc-network.json:\n\t$(CURL) -fsS \\\n\t        'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/global/networks/nat-vpc-network' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-routers-routerStatus-%.json:\n\t$(CURL) -fsS \\\n\t        'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/regions/$(REGION1)/routers/$*/getRouterStatus' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-routers-natIpInfo-%.json:\n\t$(CURL) -fsS \\\n\t        'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/regions/$(REGION1)/routers/$*/getNatIpInfo' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n"
  },
  {
    "path": "test-data/nat1/json-dumps/compute-instances-europe-west4-a.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-nat1-aaaa/zones/europe-west4-a/instances\",\n  \"items\": [\n    {\n      \"canIpForward\": false,\n      \"cpuPlatform\": \"Intel Broadwell\",\n      \"creationTimestamp\": \"2024-10-26T18:57:58.912-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"architecture\": \"X86_64\",\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"10\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/europe-west4-a/disks/private-vm-0\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"4734315867648565453\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"vezUS-42LLM=\",\n      \"labels\": {\n        \"goog-terraform-provisioned\": \"true\"\n      },\n      \"lastStartTimestamp\": \"2024-10-26T18:58:10.012-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/europe-west4-a/machineTypes/e2-medium\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"private-vm-0\",\n      \"networkInterfaces\": [\n        {\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/global/networks/nat-vpc-network\",\n          \"networkIP\": \"172.16.1.5\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/europe-west4/subnetworks/private-subnet\"\n        }\n      ],\n      \"satisfiesPzi\": true,\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/europe-west4-a/instances/private-vm-0\",\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\"\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/europe-west4-a\"\n    },\n    {\n      \"canIpForward\": false,\n      \"cpuPlatform\": \"Intel Broadwell\",\n      \"creationTimestamp\": \"2024-10-26T18:57:59.851-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"architecture\": \"X86_64\",\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"10\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/europe-west4-a/disks/private-vm-1\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"2461631680997236941\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"vezUS-42LLM=\",\n      \"labels\": {\n        \"goog-terraform-provisioned\": \"true\"\n      },\n      \"lastStartTimestamp\": \"2024-10-26T18:58:09.100-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/europe-west4-a/machineTypes/e2-medium\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"private-vm-1\",\n      \"networkInterfaces\": [\n        {\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/global/networks/nat-vpc-network\",\n          \"networkIP\": \"172.16.1.4\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/europe-west4/subnetworks/private-subnet\"\n        }\n      ],\n      \"satisfiesPzi\": true,\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/europe-west4-a/instances/private-vm-1\",\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\"\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/europe-west4-a\"\n    },\n    {\n      \"canIpForward\": false,\n      \"cpuPlatform\": \"Intel Broadwell\",\n      \"creationTimestamp\": \"2024-10-26T18:57:59.192-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"architecture\": \"X86_64\",\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"10\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/europe-west4-a/disks/private-vm-2\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"7851540549116895437\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"vezUS-42LLM=\",\n      \"labels\": {\n        \"goog-terraform-provisioned\": \"true\"\n      },\n      \"lastStartTimestamp\": \"2024-10-26T18:58:09.871-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/europe-west4-a/machineTypes/e2-medium\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"private-vm-2\",\n      \"networkInterfaces\": [\n        {\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/global/networks/nat-vpc-network\",\n          \"networkIP\": \"172.16.1.3\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/europe-west4/subnetworks/private-subnet\"\n        }\n      ],\n      \"satisfiesPzi\": true,\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/europe-west4-a/instances/private-vm-2\",\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\"\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/europe-west4-a\"\n    },\n    {\n      \"canIpForward\": false,\n      \"cpuPlatform\": \"Intel Broadwell\",\n      \"creationTimestamp\": \"2024-10-26T18:57:59.112-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"architecture\": \"X86_64\",\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"10\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/europe-west4-a/disks/private-vm-3\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"2326196273934246093\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"vezUS-42LLM=\",\n      \"labels\": {\n        \"goog-terraform-provisioned\": \"true\"\n      },\n      \"lastStartTimestamp\": \"2024-10-26T18:58:11.337-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/europe-west4-a/machineTypes/e2-medium\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"private-vm-3\",\n      \"networkInterfaces\": [\n        {\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/global/networks/nat-vpc-network\",\n          \"networkIP\": \"172.16.1.2\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/europe-west4/subnetworks/private-subnet\"\n        }\n      ],\n      \"satisfiesPzi\": true,\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/europe-west4-a/instances/private-vm-3\",\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\"\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/europe-west4-a\"\n    }\n  ],\n  \"kind\": \"compute#instanceList\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/europe-west4-a/instances\"\n}\n"
  },
  {
    "path": "test-data/nat1/json-dumps/compute-instances-us-central1-a.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-nat1-aaaa/zones/us-central1-a/instances\",\n  \"items\": [\n    {\n      \"canIpForward\": false,\n      \"cpuPlatform\": \"Intel Broadwell\",\n      \"creationTimestamp\": \"2024-10-23T20:51:00.281-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"architecture\": \"X86_64\",\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"10\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/us-central1-a/disks/private-vm-0\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"676902860603292365\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"vezUS-42LLM=\",\n      \"labels\": {\n        \"goog-terraform-provisioned\": \"true\"\n      },\n      \"lastStartTimestamp\": \"2024-10-23T20:51:20.348-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/us-central1-a/machineTypes/e2-medium\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"private-vm-0\",\n      \"networkInterfaces\": [\n        {\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/global/networks/nat-vpc-network\",\n          \"networkIP\": \"172.16.1.4\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/us-central1/subnetworks/private-subnet\"\n        }\n      ],\n      \"satisfiesPzi\": true,\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/us-central1-a/instances/private-vm-0\",\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\"\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/us-central1-a\"\n    },\n    {\n      \"canIpForward\": false,\n      \"cpuPlatform\": \"Intel Broadwell\",\n      \"creationTimestamp\": \"2024-10-23T20:51:00.209-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"architecture\": \"X86_64\",\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"10\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/us-central1-a/disks/private-vm-1\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"4193225837475297997\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"vezUS-42LLM=\",\n      \"labels\": {\n        \"goog-terraform-provisioned\": \"true\"\n      },\n      \"lastStartTimestamp\": \"2024-10-23T20:51:20.252-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/us-central1-a/machineTypes/e2-medium\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"private-vm-1\",\n      \"networkInterfaces\": [\n        {\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/global/networks/nat-vpc-network\",\n          \"networkIP\": \"172.16.1.3\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/us-central1/subnetworks/private-subnet\"\n        }\n      ],\n      \"satisfiesPzi\": true,\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/us-central1-a/instances/private-vm-1\",\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\"\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/us-central1-a\"\n    },\n    {\n      \"canIpForward\": false,\n      \"cpuPlatform\": \"Intel Broadwell\",\n      \"creationTimestamp\": \"2024-10-23T20:50:59.618-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"architecture\": \"X86_64\",\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"10\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/us-central1-a/disks/private-vm-2\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"9029703086896347853\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"vezUS-42LLM=\",\n      \"labels\": {\n        \"goog-terraform-provisioned\": \"true\"\n      },\n      \"lastStartTimestamp\": \"2024-10-23T20:51:20.420-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/us-central1-a/machineTypes/e2-medium\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"private-vm-2\",\n      \"networkInterfaces\": [\n        {\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/global/networks/nat-vpc-network\",\n          \"networkIP\": \"172.16.1.2\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/us-central1/subnetworks/private-subnet\"\n        }\n      ],\n      \"satisfiesPzi\": true,\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/us-central1-a/instances/private-vm-2\",\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\"\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/us-central1-a\"\n    },\n    {\n      \"canIpForward\": false,\n      \"cpuPlatform\": \"Intel Broadwell\",\n      \"creationTimestamp\": \"2024-10-23T20:51:00.530-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"architecture\": \"X86_64\",\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"10\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/us-central1-a/disks/private-vm-3\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"8444030377067313869\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"vezUS-42LLM=\",\n      \"labels\": {\n        \"goog-terraform-provisioned\": \"true\"\n      },\n      \"lastStartTimestamp\": \"2024-10-23T20:51:21.312-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/us-central1-a/machineTypes/e2-medium\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"private-vm-3\",\n      \"networkInterfaces\": [\n        {\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/global/networks/nat-vpc-network\",\n          \"networkIP\": \"172.16.1.5\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/us-central1/subnetworks/private-subnet\"\n        }\n      ],\n      \"satisfiesPzi\": true,\n      \"scheduling\": {\n        \"automaticRestart\": true,\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/us-central1-a/instances/private-vm-3\",\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\"\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/us-central1-a\"\n    }\n  ],\n  \"kind\": \"compute#instanceList\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/zones/us-central1-a/instances\"\n}\n"
  },
  {
    "path": "test-data/nat1/json-dumps/compute-network-default.json",
    "content": "{\n  \"autoCreateSubnetworks\": true,\n  \"creationTimestamp\": \"2024-10-23T20:41:27.369-07:00\",\n  \"description\": \"Default network for the project\",\n  \"id\": \"7877618327818108680\",\n  \"kind\": \"compute#network\",\n  \"name\": \"default\",\n  \"networkFirewallPolicyEnforcementOrder\": \"AFTER_CLASSIC_FIREWALL\",\n  \"routingConfig\": {\n    \"routingMode\": \"REGIONAL\"\n  },\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/global/networks/default\",\n  \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/global/networks/7877618327818108680\",\n  \"subnetworks\": [\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/me-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/asia-northeast3/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/asia-northeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/europe-west8/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/europe-west12/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/northamerica-south1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/asia-east2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/asia-northeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/northamerica-northeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/asia-southeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/us-central1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/us-east5/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/europe-north1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/europe-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/europe-central2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/australia-southeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/asia-southeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/me-central1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/africa-south1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/europe-west10/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/us-west2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/us-south1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/us-east7/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/southamerica-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/australia-southeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/us-west8/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/europe-west9/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/europe-west4/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/europe-southwest1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/us-west4/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/asia-east1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/asia-south2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/us-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/us-east4/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/europe-west6/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/asia-south1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/us-east1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/europe-west3/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/europe-west2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/us-west3/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/southamerica-east1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/northamerica-northeast1/subnetworks/default\"\n  ]\n}\n"
  },
  {
    "path": "test-data/nat1/json-dumps/compute-network-nat-vpc-network.json",
    "content": "{\n  \"kind\": \"compute#network\",\n  \"id\": \"4007354994527599341\",\n  \"creationTimestamp\": \"2024-10-23T20:50:26.420-07:00\",\n  \"name\": \"nat-vpc-network\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/global/networks/nat-vpc-network\",\n  \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/global/networks/4007354994527599341\",\n  \"autoCreateSubnetworks\": false,\n  \"subnetworks\": [\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/europe-west4/subnetworks/private-subnet\"\n  ],\n  \"routingConfig\": {\n    \"routingMode\": \"REGIONAL\"\n  },\n  \"networkFirewallPolicyEnforcementOrder\": \"AFTER_CLASSIC_FIREWALL\"\n}\n"
  },
  {
    "path": "test-data/nat1/json-dumps/compute-network-nat_vpc_network.json",
    "content": "{\n  \"kind\": \"compute#network\",\n  \"id\": \"4007354994527599341\",\n  \"creationTimestamp\": \"2024-10-23T20:50:26.420-07:00\",\n  \"name\": \"nat-vpc-network\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/global/networks/nat-vpc-network\",\n  \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/global/networks/4007354994527599341\",\n  \"autoCreateSubnetworks\": false,\n  \"subnetworks\": [\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/us-central1/subnetworks/private-subnet\"\n  ],\n  \"routingConfig\": {\n    \"routingMode\": \"REGIONAL\"\n  },\n  \"networkFirewallPolicyEnforcementOrder\": \"AFTER_CLASSIC_FIREWALL\"\n}\n"
  },
  {
    "path": "test-data/nat1/json-dumps/compute-routers-europe-west4.json",
    "content": "{\n  \"kind\": \"compute#routerList\",\n  \"id\": \"projects/gcpdiag-nat1-aaaa/regions/europe-west4/routers/\",\n  \"items\": [\n    {\n      \"kind\": \"compute#router\",\n      \"id\": \"564470628362494773\",\n      \"creationTimestamp\": \"2024-10-26T18:56:42.961-07:00\",\n      \"name\": \"public-nat-cloud-router\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/europe-west4\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/global/networks/nat-vpc-network\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/europe-west4/routers/public-nat-cloud-router\",\n      \"nats\": [\n        {\n          \"name\": \"public-nat-gateway\",\n          \"type\": \"PUBLIC\",\n          \"endpointTypes\": [\n            \"ENDPOINT_TYPE_VM\"\n          ],\n          \"sourceSubnetworkIpRangesToNat\": \"ALL_SUBNETWORKS_ALL_IP_RANGES\",\n          \"natIps\": [\n            \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/europe-west4/addresses/public-nat-ip-1\"\n          ],\n          \"natIpAllocateOption\": \"MANUAL_ONLY\",\n          \"minPortsPerVm\": 32000,\n          \"enableDynamicPortAllocation\": false,\n          \"udpIdleTimeoutSec\": 30,\n          \"icmpIdleTimeoutSec\": 30,\n          \"tcpEstablishedIdleTimeoutSec\": 1200,\n          \"tcpTransitoryIdleTimeoutSec\": 30,\n          \"tcpTimeWaitTimeoutSec\": 120,\n          \"logConfig\": {\n            \"enable\": true,\n            \"filter\": \"ERRORS_ONLY\"\n          },\n          \"enableEndpointIndependentMapping\": false\n        }\n      ],\n      \"encryptedInterconnectRouter\": false\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/europe-west4/routers/\"\n}\n"
  },
  {
    "path": "test-data/nat1/json-dumps/compute-routers-natIpInfo-public-nat-cloud-router.json",
    "content": "{\n  \"result\": [\n    {\n      \"natName\": \"public-nat-gateway\",\n      \"natIpInfoMappings\": [\n        {\n          \"natIp\": \"35.204.78.175\",\n          \"usage\": \"IN_USE\",\n          \"mode\": \"MANUAL\"\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/nat1/json-dumps/compute-routers-natMappingInfo-public-nat-cloud-router.json",
    "content": "{\n  \"kind\": \"compute#vmEndpointNatMappingsList\",\n  \"result\": [\n    {\n      \"instanceName\": \"private-vm-2\",\n      \"interfaceNatMappings\": [\n        {\n          \"sourceVirtualIp\": \"172.16.1.3\",\n          \"sourceAliasIpRange\": \"\",\n          \"numTotalNatPorts\": 16384,\n          \"natIpPortRanges\": [\n            \"35.204.78.175:16384-32767\"\n          ],\n          \"numTotalDrainNatPorts\": 0\n        },\n        {\n          \"sourceVirtualIp\": \"172.16.1.3\",\n          \"sourceAliasIpRange\": \"\",\n          \"numTotalNatPorts\": 16384,\n          \"natIpPortRanges\": [\n            \"35.204.78.175:32768-49151\"\n          ],\n          \"numTotalDrainNatPorts\": 0\n        }\n      ]\n    },\n    {\n      \"instanceName\": \"private-vm-3\",\n      \"interfaceNatMappings\": [\n        {\n          \"sourceVirtualIp\": \"172.16.1.2\",\n          \"sourceAliasIpRange\": \"\",\n          \"numTotalNatPorts\": 16384,\n          \"natIpPortRanges\": [\n            \"35.204.78.175:49152-65535\"\n          ],\n          \"numTotalDrainNatPorts\": 0\n        }\n      ]\n    }\n  ],\n  \"nextPageToken\": \"\"\n}\n"
  },
  {
    "path": "test-data/nat1/json-dumps/compute-routers-natMappingInfo-public_nat_cloud_router.json",
    "content": "{\n  \"kind\": \"compute#vmEndpointNatMappingsList\",\n  \"result\": [\n    {\n      \"instanceName\": \"private-vm-2\",\n      \"interfaceNatMappings\": [\n        {\n          \"sourceVirtualIp\": \"172.16.1.2\",\n          \"sourceAliasIpRange\": \"\",\n          \"numTotalNatPorts\": 16384,\n          \"natIpPortRanges\": [\n            \"35.239.1.15:16384-32767\"\n          ],\n          \"numTotalDrainNatPorts\": 0\n        },\n        {\n          \"sourceVirtualIp\": \"172.16.1.2\",\n          \"sourceAliasIpRange\": \"\",\n          \"numTotalNatPorts\": 16384,\n          \"natIpPortRanges\": [\n            \"35.239.1.15:32768-49151\"\n          ],\n          \"numTotalDrainNatPorts\": 0\n        }\n      ]\n    },\n    {\n      \"instanceName\": \"private-vm-3\",\n      \"interfaceNatMappings\": [\n        {\n          \"sourceVirtualIp\": \"172.16.1.5\",\n          \"sourceAliasIpRange\": \"\",\n          \"numTotalNatPorts\": 16384,\n          \"natIpPortRanges\": [\n            \"35.239.1.15:49152-65535\"\n          ],\n          \"numTotalDrainNatPorts\": 0\n        }\n      ]\n    }\n  ],\n  \"nextPageToken\": \"\"\n}\n"
  },
  {
    "path": "test-data/nat1/json-dumps/compute-routers-routerStatus-public-nat-cloud-router.json",
    "content": "{\n  \"kind\": \"compute#routerStatusResponse\",\n  \"result\": {\n    \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/global/networks/nat-vpc-network\",\n    \"natStatus\": [\n      {\n        \"name\": \"public-nat-gateway\",\n        \"userAllocatedNatIpResources\": [\n          \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/europe-west4/addresses/public-nat-ip-1\"\n        ],\n        \"userAllocatedNatIps\": [\n          \"35.204.78.175\"\n        ],\n        \"minExtraNatIpsNeeded\": 2,\n        \"numVmEndpointsWithNatMappings\": 2\n      }\n    ]\n  }\n}\n"
  },
  {
    "path": "test-data/nat1/json-dumps/compute-routers-routerStatus-public_nat_cloud_router.json",
    "content": "{\n  \"kind\": \"compute#routerStatusResponse\",\n  \"result\": {\n    \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/global/networks/nat-vpc-network\",\n    \"natStatus\": [\n      {\n        \"name\": \"public-nat-gateway\",\n        \"userAllocatedNatIpResources\": [\n          \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/us-central1/addresses/public-nat-ip-1\"\n        ],\n        \"userAllocatedNatIps\": [\n          \"35.239.1.15\"\n        ],\n        \"minExtraNatIpsNeeded\": 2,\n        \"numVmEndpointsWithNatMappings\": 2\n      }\n    ]\n  }\n}\n"
  },
  {
    "path": "test-data/nat1/json-dumps/compute-routers-us-central1.json",
    "content": "{\n  \"kind\": \"compute#routerList\",\n  \"id\": \"projects/gcpdiag-nat1-aaaa/regions/us-central1/routers/\",\n  \"items\": [\n    {\n      \"kind\": \"compute#router\",\n      \"id\": \"2301099474353945314\",\n      \"creationTimestamp\": \"2024-10-23T20:50:37.304-07:00\",\n      \"name\": \"public-nat-cloud-router\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/us-central1\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/global/networks/nat-vpc-network\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/us-central1/routers/public-nat-cloud-router\",\n      \"nats\": [\n        {\n          \"name\": \"public-nat-gateway\",\n          \"type\": \"PUBLIC\",\n          \"endpointTypes\": [\n            \"ENDPOINT_TYPE_VM\"\n          ],\n          \"sourceSubnetworkIpRangesToNat\": \"ALL_SUBNETWORKS_ALL_IP_RANGES\",\n          \"natIps\": [\n            \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/us-central1/addresses/public-nat-ip-1\"\n          ],\n          \"natIpAllocateOption\": \"MANUAL_ONLY\",\n          \"minPortsPerVm\": 32000,\n          \"enableDynamicPortAllocation\": false,\n          \"udpIdleTimeoutSec\": 30,\n          \"icmpIdleTimeoutSec\": 30,\n          \"tcpEstablishedIdleTimeoutSec\": 1200,\n          \"tcpTransitoryIdleTimeoutSec\": 30,\n          \"tcpTimeWaitTimeoutSec\": 120,\n          \"logConfig\": {\n            \"enable\": true,\n            \"filter\": \"ERRORS_ONLY\"\n          },\n          \"enableEndpointIndependentMapping\": false\n        }\n      ],\n      \"encryptedInterconnectRouter\": false\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-nat1-aaaa/regions/us-central1/routers/\"\n}\n"
  },
  {
    "path": "test-data/nat1/json-dumps/monitoring-query-nat-allocation-failed.json",
    "content": "{\n  \"timeSeriesDescriptor\": {\n    \"labelDescriptors\": [\n      {\n        \"key\": \"resource.project_id\"\n      },\n      {\n        \"key\": \"resource.region\"\n      },\n      {\n        \"key\": \"resource.router_id\"\n      },\n      {\n        \"key\": \"resource.gateway_name\"\n      }\n    ],\n    \"pointDescriptors\": [\n      {\n        \"key\": \"value.nat_allocation_failed\",\n        \"valueType\": \"BOOL\",\n        \"metricKind\": \"GAUGE\"\n      }\n    ]\n  },\n  \"timeSeriesData\": [\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"gcpdiag-nat1-aaaa\"\n        },\n        {\n          \"stringValue\": \"europe-west4\"\n        },\n        {\n          \"stringValue\": \"564470628362494773\"\n        },\n        {\n          \"stringValue\": \"public-nat-gateway\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"boolValue\": true\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-10-27T02:47:00Z\",\n            \"endTime\": \"2024-10-27T02:47:00Z\"\n          }\n        },\n        {\n          \"values\": [\n            {\n              \"boolValue\": true\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-10-27T02:46:00Z\",\n            \"endTime\": \"2024-10-27T02:46:00Z\"\n          }\n        },\n        {\n          \"values\": [\n            {\n              \"boolValue\": true\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-10-27T02:45:00Z\",\n            \"endTime\": \"2024-10-27T02:45:00Z\"\n          }\n        },\n        {\n          \"values\": [\n            {\n              \"boolValue\": true\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-10-27T02:44:00Z\",\n            \"endTime\": \"2024-10-27T02:44:00Z\"\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/nat1/json-dumps/monitoring-query.json",
    "content": "{\n  \"timeSeriesDescriptor\": {\n    \"labelDescriptors\": [\n      {\n        \"key\": \"resource.project_id\"\n      },\n      {\n        \"key\": \"resource.region\"\n      },\n      {\n        \"key\": \"resource.router_id\"\n      },\n      {\n        \"key\": \"resource.gateway_name\"\n      }\n    ],\n    \"pointDescriptors\": [\n      {\n        \"key\": \"value.nat_allocation_failed\",\n        \"valueType\": \"BOOL\",\n        \"metricKind\": \"GAUGE\"\n      }\n    ]\n  },\n  \"timeSeriesData\": [\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"gcpdiag-nat1-aaaa\"\n        },\n        {\n          \"stringValue\": \"europe-west4\"\n        },\n        {\n          \"stringValue\": \"564470628362494773\"\n        },\n        {\n          \"stringValue\": \"public-nat-gateway\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"boolValue\": true\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-10-27T03:45:00Z\",\n            \"endTime\": \"2024-10-27T03:45:00Z\"\n          }\n        },\n        {\n          \"values\": [\n            {\n              \"boolValue\": true\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-10-27T03:44:00Z\",\n            \"endTime\": \"2024-10-27T03:44:00Z\"\n          }\n        },\n        {\n          \"values\": [\n            {\n              \"boolValue\": true\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-10-27T03:43:00Z\",\n            \"endTime\": \"2024-10-27T03:43:00Z\"\n          }\n        },\n        {\n          \"values\": [\n            {\n              \"boolValue\": true\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-10-27T03:42:00Z\",\n            \"endTime\": \"2024-10-27T03:42:00Z\"\n          }\n        },\n        {\n          \"values\": [\n            {\n              \"boolValue\": true\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-10-27T03:41:00Z\",\n            \"endTime\": \"2024-10-27T03:41:00Z\"\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/nat1/json-dumps/project.json",
    "content": "{\n  \"name\": \"projects/12340010\",\n  \"parent\": \"folders/348077457356\",\n  \"projectId\": \"gcpdiag-nat1-aaaa\",\n  \"state\": \"ACTIVE\",\n  \"displayName\": \"gcpdiag test - nat1\",\n  \"createTime\": \"2024-10-24T03:36:15.068177Z\",\n  \"updateTime\": \"2024-10-24T03:36:15.068177Z\",\n  \"etag\": \"W/\\\"6d4466d453793d0e\\\"\",\n  \"labels\": {\n    \"gcpdiag\": \"test\",\n    \"goog-terraform-provisioned\": \"true\"\n  }\n}\n"
  },
  {
    "path": "test-data/nat1/json-dumps/services.json",
    "content": "{\n  \"services\": [\n    {\n      \"name\": \"projects/12340010/services/compute.googleapis.com\",\n      \"config\": {\n        \"name\": \"compute.googleapis.com\",\n        \"title\": \"Compute Engine API\",\n        \"documentation\": {\n          \"summary\": \"Creates and runs virtual machines on Google Cloud Platform.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"compute.googleapis.com/VpcNetwork\",\n            \"displayName\": \"VPC Network\",\n            \"description\": \"VPC Network.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the VPC Network.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the VPC Network, global always.\"\n              },\n              {\n                \"key\": \"network_id\",\n                \"description\": \"VPC Network resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Location\",\n            \"displayName\": \"Compute Location\",\n            \"description\": \"A location in the Compute API.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the Compute Location.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Interconnect\",\n            \"displayName\": \"Interconnect\",\n            \"description\": \"Interconnect.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the Interconnect.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the Interconnect.\"\n              },\n              {\n                \"key\": \"interconnect_id\",\n                \"description\": \"Interconnect resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/FirewallPolicy\",\n            \"displayName\": \"Firewall policy\",\n            \"description\": \"Firewall policy.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project or organization) associated with the firewall policy.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the firewall policy.\"\n              },\n              {\n                \"key\": \"firewall_policy_id\",\n                \"description\": \"Firewall policy resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/SecurityPolicy\",\n            \"displayName\": \"Security policy\",\n            \"description\": \"Security policy.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the security policy.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the security policy.\"\n              },\n              {\n                \"key\": \"security_policy_id\",\n                \"description\": \"Security policy resource ID.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/OperationType\",\n            \"displayName\": \"Operation Type\",\n            \"description\": \"Operation Type.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the operation.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the operation.\"\n              },\n              {\n                \"key\": \"operation_type\",\n                \"description\": \"Operation type.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Reservation\",\n            \"displayName\": \"Reservation\",\n            \"description\": \"Monitored resource representing a reservation.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container (e.g. project number) associated with the reservation.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The zone that contains the reservation.\"\n              },\n              {\n                \"key\": \"reservation_id\",\n                \"description\": \"Reservation resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/StoragePool\",\n            \"displayName\": \"Storage Pool\",\n            \"description\": \"Monitored resource representing a storage pool.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container (e.g. project number) associated with the storage pool.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location that contains the storage pool.\"\n              },\n              {\n                \"key\": \"storage_pool_id\",\n                \"description\": \"Numerical resource ID of the storage pool.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"gce_instance\",\n            \"displayName\": \"VM Instance\",\n            \"description\": \"A virtual machine instance hosted in Compute Engine.\",\n            \"labels\": [\n              {\n                \"key\": \"project_id\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as \\\"my-project\\\".\"\n              },\n              {\n                \"key\": \"instance_id\",\n                \"description\": \"The numeric VM instance identifier assigned by Compute Engine.\"\n              },\n              {\n                \"key\": \"zone\",\n                \"description\": \"The Compute Engine zone in which the VM is running.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network\",\n                \"compute.googleapis.com/cloud_router_prefixes_from_own_region_per_region_per_vpc_network\",\n                \"compute.googleapis.com/dynamic_routes_per_region_per_peering_group\",\n                \"compute.googleapis.com/global_internal_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/instances_per_peering_group\",\n                \"compute.googleapis.com/instances_per_vpc_network\",\n                \"compute.googleapis.com/internal_lb_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_managed_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_protocol_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/ip_aliases_per_peering_group\",\n                \"compute.googleapis.com/ip_aliases_per_vpc_network\",\n                \"compute.googleapis.com/peerings_per_vpc_network\",\n                \"compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network\",\n                \"compute.googleapis.com/psc_propagated_connections_per_vpc_network\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/exceeded\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/regional_external_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/regional_internal_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/static_routes_per_peering_group\",\n                \"compute.googleapis.com/static_routes_per_vpc_network\",\n                \"compute.googleapis.com/subnet_ranges_per_peering_group\",\n                \"compute.googleapis.com/subnet_ranges_per_vpc_network\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Location\",\n              \"metrics\": [\n                \"compute.googleapis.com/cpus_per_vm_family\",\n                \"compute.googleapis.com/global_dns/request_count\",\n                \"compute.googleapis.com/gpus_per_gpu_family\",\n                \"compute.googleapis.com/inter_region_egress_bandwidth\",\n                \"compute.googleapis.com/local_ssd_total_storage_per_vm_family\",\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/exceeded\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/exceeded\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/exceeded\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/usage\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/exceeded\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/exceeded\",\n                \"compute.googleapis.com/quota/tpus_per_tpu_family/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Interconnect\",\n              \"metrics\": [\n                \"compute.googleapis.com/interconnect_attachments_per_interconnect\",\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/FirewallPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/fqdns_per_global_network_firewall_policy\",\n                \"compute.googleapis.com/fqdns_per_hierarchical_firewall_policy\",\n                \"compute.googleapis.com/fqdns_per_regional_network_firewall_policy\",\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/rule_attributes_per_global_network_firewall_policy\",\n                \"compute.googleapis.com/rule_attributes_per_hierarchical_firewall_policy\",\n                \"compute.googleapis.com/rule_attributes_per_regional_network_firewall_policy\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/SecurityPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/advanced_rules_per_edge_security_policy\",\n                \"compute.googleapis.com/advanced_rules_per_regional_security_policy\",\n                \"compute.googleapis.com/advanced_rules_per_security_policy\",\n                \"compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/exceeded\",\n                \"compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/exceeded\",\n                \"compute.googleapis.com/quota/advanced_rules_per_security_policy/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/OperationType\",\n              \"metrics\": [\n                \"compute.googleapis.com/global_concurrent_operations\",\n                \"compute.googleapis.com/quota/concurrent/global_concurrent_operations/exceeded\",\n                \"compute.googleapis.com/quota/concurrent/internal/global_concurrent_operations/combined_units\",\n                \"compute.googleapis.com/quota/concurrent/internal/regional_concurrent_operations/combined_units\",\n                \"compute.googleapis.com/quota/concurrent/regional_concurrent_operations/exceeded\",\n                \"compute.googleapis.com/regional_concurrent_operations\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"gce_instance\",\n              \"metrics\": [\n                \"compute.googleapis.com/instance/global_dns/request_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Reservation\",\n              \"metrics\": [\n                \"compute.googleapis.com/reservation/reserved\",\n                \"compute.googleapis.com/reservation/assured\",\n                \"compute.googleapis.com/reservation/used\",\n                \"compute.googleapis.com/reservation/internal/matching_instances\",\n                \"compute.googleapis.com/reservation/internal/prespuns_by_state\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/StoragePool\",\n              \"metrics\": [\n                \"compute.googleapis.com/storage_pool/disks\",\n                \"compute.googleapis.com/storage_pool/provisioned_capacity\",\n                \"compute.googleapis.com/storage_pool/used_capacity\",\n                \"compute.googleapis.com/storage_pool/total_disk_provisioned_capacity\",\n                \"compute.googleapis.com/storage_pool/provisioned_iops\",\n                \"compute.googleapis.com/storage_pool/used_iops\",\n                \"compute.googleapis.com/storage_pool/total_disk_provisioned_iops\",\n                \"compute.googleapis.com/storage_pool/provisioned_throughput\",\n                \"compute.googleapis.com/storage_pool/used_throughput\",\n                \"compute.googleapis.com/storage_pool/total_disk_provisioned_throughput\",\n                \"compute.googleapis.com/storage_pool/capacity_utilization\",\n                \"compute.googleapis.com/storage_pool/iops_utilization\",\n                \"compute.googleapis.com/storage_pool/throughput_utilization\",\n                \"compute.googleapis.com/storage_pool/capacity_overprovisioning\",\n                \"compute.googleapis.com/storage_pool/iops_overprovisioning\",\n                \"compute.googleapis.com/storage_pool/throughput_overprovisioning\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Location\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/limit\",\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/usage\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/limit\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/usage\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/limit\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/limit\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/usage\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/limit\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/usage\",\n                \"compute.googleapis.com/quota/tpus_per_tpu_family/limit\",\n                \"compute.googleapis.com/quota/tpus_per_tpu_family/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/firewall_rule_attributes_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/firewall_rule_fqdns_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/limit\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/usage\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/limit\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/usage\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Interconnect\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/limit\",\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/FirewallPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/SecurityPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/limit\",\n                \"compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/usage\",\n                \"compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/limit\",\n                \"compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/usage\",\n                \"compute.googleapis.com/quota/advanced_rules_per_security_policy/limit\",\n                \"compute.googleapis.com/quota/advanced_rules_per_security_policy/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/OperationType\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/concurrent/global_concurrent_operations/limit\",\n                \"compute.googleapis.com/quota/concurrent/regional_concurrent_operations/limit\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340010\"\n    },\n    {\n      \"name\": \"projects/12340010/services/deploymentmanager.googleapis.com\",\n      \"config\": {\n        \"name\": \"deploymentmanager.googleapis.com\",\n        \"title\": \"Cloud Deployment Manager V2 API\",\n        \"documentation\": {\n          \"summary\": \"The Google Cloud Deployment Manager v2 API provides services for configuring, deploying, and\\nviewing Google Cloud services and APIs via templates which specify deployments of Cloud\\nresources.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340010\"\n    },\n    {\n      \"name\": \"projects/12340010/services/logging.googleapis.com\",\n      \"config\": {\n        \"name\": \"logging.googleapis.com\",\n        \"title\": \"Cloud Logging API\",\n        \"documentation\": {\n          \"summary\": \"Writes log entries and manages your Cloud Logging configuration.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"logging.googleapis.com/ChargedProject\",\n            \"displayName\": \"Cloud logging target\",\n            \"description\": \"A cloud logging specialization target schema of cloud.ChargedProject.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The monitored resource container. Could be project, workspace, etc.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The service-specific notion of location.\"\n              },\n              {\n                \"key\": \"service\",\n                \"description\": \"The name of the API service with which the data is associated (e.g.,'logging.googleapis.com').\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"logging.googleapis.com/ChargedProject\",\n              \"metrics\": [\n                \"logging.googleapis.com/billing/ingested_bytes\",\n                \"logging.googleapis.com/billing/stored_bytes\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340010\"\n    },\n    {\n      \"name\": \"projects/12340010/services/monitoring.googleapis.com\",\n      \"config\": {\n        \"name\": \"monitoring.googleapis.com\",\n        \"title\": \"Cloud Monitoring API\",\n        \"documentation\": {\n          \"summary\": \"Manages your Cloud Monitoring data and configurations.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"monitoring.googleapis.com/ChargedProject\",\n            \"displayName\": \"Cloud monitoring target\",\n            \"description\": \"A cloud monitoring specialization target schema of cloud.ChargedProject.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The monitored resource container. Could be project, workspace, etc.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The service-specific notion of location.\"\n              },\n              {\n                \"key\": \"service\",\n                \"description\": \"The name of the API service with which the data is associated (e.g.,'monitoring.googleapis.com').\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"monitoring.googleapis.com/MetricStatistics\",\n            \"displayName\": \"Metric Statistics\",\n            \"description\": \"Information about a user-written metric in Cloud Monitoring.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project to which the metric is written, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The cloud region where the metric was received.\"\n              },\n              {\n                \"key\": \"metric_type\",\n                \"description\": \"The metric type.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"monitoring.googleapis.com/MetricIngestionAttribution\",\n            \"displayName\": \"Metric Ingestion Attribution\",\n            \"description\": \"Attribution for metric ingestion.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project to which the metric is written, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location of the resource that the metric ingestion was associated with, unless it was 'global', in which case this will be the cloud region where the metric was received.\"\n              },\n              {\n                \"key\": \"attribution_dimension\",\n                \"description\": \"The dimension used for attribution reporting. It is not recommended that aggregations are performed across dimensions because a single metric point can be recorded with multiple dimensions which could cause double counting. Currently only \\\"namespace\\\" and \\\"cluster\\\" are supported.\"\n              },\n              {\n                \"key\": \"attribution_id\",\n                \"description\": \"The attribution id of the source of the metric write.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"monitoring.googleapis.com/ChargedProject\",\n              \"metrics\": [\n                \"monitoring.googleapis.com/billing/bytes_ingested\",\n                \"monitoring.googleapis.com/billing/samples_ingested\",\n                \"monitoring.googleapis.com/internal/billing/non_chargeable_samples_ingested\",\n                \"monitoring.googleapis.com/internal/stats/filtered_sample_count\",\n                \"monitoring.googleapis.com/internal/stats/filtered_byte_count\",\n                \"monitoring.googleapis.com/internal/stats/metrics_queried_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"monitoring.googleapis.com/MetricStatistics\",\n              \"metrics\": [\n                \"monitoring.googleapis.com/collection/write_request_count\",\n                \"monitoring.googleapis.com/collection/write_request_point_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"monitoring.googleapis.com/MetricIngestionAttribution\",\n              \"metrics\": [\n                \"monitoring.googleapis.com/collection/attribution/sample_count\",\n                \"monitoring.googleapis.com/collection/attribution/write_sample_count\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340010\"\n    },\n    {\n      \"name\": \"projects/12340010/services/oslogin.googleapis.com\",\n      \"config\": {\n        \"name\": \"oslogin.googleapis.com\",\n        \"title\": \"Cloud OS Login API\",\n        \"documentation\": {\n          \"summary\": \"You can use OS Login to manage access to your VM instances using IAM roles.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340010\"\n    },\n    {\n      \"name\": \"projects/12340010/services/recommender.googleapis.com\",\n      \"config\": {\n        \"name\": \"recommender.googleapis.com\",\n        \"title\": \"Recommender API\",\n        \"documentation\": {},\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340010\"\n    },\n    {\n      \"name\": \"projects/12340010/services/vpcaccess.googleapis.com\",\n      \"config\": {\n        \"name\": \"vpcaccess.googleapis.com\",\n        \"title\": \"Serverless VPC Access API\",\n        \"documentation\": {\n          \"summary\": \"API for managing VPC access connectors.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/billing-enabled\",\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340010\"\n    },\n    {\n      \"name\": \"projects/12340010/services/websecurityscanner.googleapis.com\",\n      \"config\": {\n        \"name\": \"websecurityscanner.googleapis.com\",\n        \"title\": \"Web Security Scanner API\",\n        \"documentation\": {\n          \"summary\": \"Scans your Compute and App Engine apps for common web vulnerabilities.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340010\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/nat1/project.tf",
    "content": "/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nresource \"random_string\" \"project_id_suffix\" {\n  length  = 8\n  number  = true\n  lower   = true\n  upper   = false\n  special = false\n}\n\nresource \"google_project\" \"project\" {\n  name       = \"gcpdiag test - nat1\"\n  project_id = \"gcpdiag-nat1-${random_string.project_id_suffix.id}\"\n  org_id     = var.folder_id == \"\" ? var.org_id : null\n  folder_id  = var.folder_id != \"\" ? var.folder_id : null\n  //billing_account = var.billing_account_id\n  labels = {\n    gcpdiag : \"test\"\n  }\n  lifecycle {\n    ignore_changes = all\n  }\n}\n\n# Enable required APIs\nresource \"google_project_service\" \"compute\" {\n  project = google_project.project.project_id\n  service = \"compute.googleapis.com\"\n}\n\nresource \"google_project_service\" \"vpcaccess\" {\n  project = google_project.project.project_id\n  service = \"vpcaccess.googleapis.com\"\n}\n\noutput \"project_id\" {\n  value = google_project.project.project_id\n}\n\noutput \"project_id_suffix\" {\n  value = random_string.project_id_suffix.id\n}\n\noutput \"project_nr\" {\n  value = google_project.project.number\n}\n\noutput \"org_id\" {\n  value = var.org_id\n}\n"
  },
  {
    "path": "test-data/nat1/public-cloud-nat.tf",
    "content": "# 1. Create a VPC Network\nresource \"google_compute_network\" \"nat_vpc_network\" {\n  name                    = \"nat-vpc-network\"\n  auto_create_subnetworks = false\n  project                 = google_project.project.project_id\n}\n\n# 2. Create a Subnet in the VPC Network\nresource \"google_compute_subnetwork\" \"private_subnet\" {\n  name                     = \"private-subnet\"\n  ip_cidr_range            = \"172.16.1.0/24\"\n  region                   = \"europe-west4\"\n  network                  = google_compute_network.nat_vpc_network.id\n  private_ip_google_access = true\n  project                  = google_project.project.project_id\n}\n\n# 3. Create 3 VM instances without external IP addresses\nresource \"google_compute_instance\" \"vm_instances\" {\n  count        = 4\n  name         = \"private-vm-${count.index}\"\n  machine_type = \"e2-medium\"\n  zone         = \"europe-west4-a\"\n  project      = google_project.project.project_id\n\n  boot_disk {\n    initialize_params {\n      image = \"debian-cloud/debian-11\"\n    }\n  }\n\n  network_interface {\n    subnetwork = google_compute_subnetwork.private_subnet.id\n    #access_config      = {} # No external IP by default\n  }\n}\n\n# 4. Create a Cloud Router\nresource \"google_compute_router\" \"public_nat_cloud_router\" {\n  name    = \"public-nat-cloud-router\"\n  network = google_compute_network.nat_vpc_network.name\n  region  = \"europe-west4\"\n  project = google_project.project.project_id\n}\n\n# 5. Create a Static IP Address for the NAT Gateway\nresource \"google_compute_address\" \"public_nat_ip_1\" {\n  name    = \"public-nat-ip-1\"\n  region  = \"europe-west4\"\n  project = google_project.project.project_id\n}\n\n# 6. Create a Cloud NAT Gateway with a Static IP and Custom Port Settings\nresource \"google_compute_router_nat\" \"public_nat_gateway\" {\n  name                               = \"public-nat-gateway\"\n  router                             = google_compute_router.public_nat_cloud_router.name\n  region                             = \"europe-west4\"\n  nat_ip_allocate_option             = \"MANUAL_ONLY\"\n  nat_ips                            = [google_compute_address.public_nat_ip_1.id]\n  source_subnetwork_ip_ranges_to_nat = \"ALL_SUBNETWORKS_ALL_IP_RANGES\"\n  project                            = google_project.project.project_id\n\n  min_ports_per_vm               = 32000\n  enable_dynamic_port_allocation = false\n\n  log_config {\n    enable = true\n    filter = \"ERRORS_ONLY\"\n  }\n}\n"
  },
  {
    "path": "test-data/nat1/variables.tf",
    "content": "variable \"billing_account_id\" {}\n\nvariable \"org_id\" {}\nvariable \"folder_id\" { default = \"\" }\n"
  },
  {
    "path": "test-data/notebooks1/Makefile",
    "content": "PROJECT_ID := $(shell terraform output project_id | sed -e 's|\"||g')\nPROJECT_ID_SUFFIX := $(shell terraform output -json project_id_suffix)\nPROJECT_NR  := $(shell terraform output -json project_nr)\nORG_ID      := $(shell terraform output -json org_id)\nCURL         = ../../bin/curl-wrap.sh\nJSON_CLEANER = ../../bin/json-cleaner\nLOCATION     = us-west1-a\nREGION       = us-west1\nINSTANCE_NAME = gcpdiag-notebooks1instance-aaaa\nRUNTIME_NAME = gcpdiag-notebooks1runtime-aaaa\n\nFAKE_PROJECT_ID_SUFFIX = aaaa\nFAKE_PROJECT_NR = 12340012\nFAKE_ORG_ID = 11112222\nSED_SUBST_FAKE = sed -e \"s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/\" \\\n\t\t     -e \"s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/\" \\\n\t\t     -e \"s/$(ORG_ID)/$(FAKE_ORG_ID)/\" \\\n\nall:\t\\\n\tjson-dumps/project.json \\\n\tjson-dumps/services.json \\\n\tjson-dumps/instances.json \\\n\tjson-dumps/runtimes.json \\\n\tjson-dumps/health-state.json \\\n\tjson-dumps/is-upgradeable.json \\\n\njson-dumps/project.json:\n\t$(CURL) -fsS \\\n\t\t'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/services.json:\n\t$(CURL) -fv \\\n\t'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \\\n\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/instances.json:\n\t$(CURL) -fv \\\n\t\t'https://notebooks.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/instances' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/runtimes.json:\n\t$(CURL) -fv \\\n\t\t'https://notebooks.googleapis.com/v1/projects/${PROJECT_ID}/locations/${REGION}/runtimes' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/health-state.json:\n\t$(CURL) -fv \\\n\t\t'https://notebooks.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/instances/${INSTANCE_NAME}:getInstanceHealth' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/is-upgradeable.json:\n\t$(CURL) -fv \\\n\t\t'https://notebooks.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/instances/${INSTANCE_NAME}:isUpgradeable' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n"
  },
  {
    "path": "test-data/notebooks1/instances1.tf",
    "content": "/**\n * Copyright 2023 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n# https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/notebooks_instance\nresource \"google_notebooks_instance\" \"notebooks1instance\" {\n  project      = google_project.project.project_id\n  name         = \"gcpdiag-notebooks1instance-aaaa\"\n  provider     = google-beta\n  location     = \"us-west1-a\"\n  machine_type = \"e2-medium\"\n  vm_image {\n    project      = \"deeplearning-platform-release\"\n    image_family = \"tf-latest-cpu\"\n  }\n}\n"
  },
  {
    "path": "test-data/notebooks1/json-dumps/health-state.json",
    "content": "{\n  \"healthState\": \"UNHEALTHY\"\n}\n"
  },
  {
    "path": "test-data/notebooks1/json-dumps/instances.json",
    "content": "{\n  \"instances\": [\n    {\n      \"name\": \"projects/gcpdiag-notebooks1-aaaa/locations/us-west1-a/instances/gcpdiag-notebooks1instance-aaaa\",\n      \"proxyUri\": \"44b1bee026df3850-dot-us-west1.notebooks.googleusercontent.com\",\n      \"serviceAccount\": \"12340012-compute@developer.gserviceaccount.com\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks1-aaaa/zones/us-west1-a/machineTypes/e2-medium\",\n      \"state\": \"ACTIVE\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks1-aaaa/global/networks/default\",\n      \"subnet\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks1-aaaa/regions/us-west1/subnetworks/default\",\n      \"labels\": {\n        \"consumer-project-id\": \"notebooks-probe-prod\",\n        \"goog-caip-notebook\": \"\",\n        \"resource-name\": \"probe-instance-4f0091ac-605c-4ab6-948f-c8c2d8ece6ff\"\n      },\n      \"metadata\": {\n        \"serial-port-logging-enable\": \"true\",\n        \"version\": \"103\",\n        \"framework\": \"TensorFlow:2.11\",\n        \"restriction\": \"\",\n        \"enable-guest-attributes\": \"TRUE\",\n        \"proxy-mode\": \"service_account\",\n        \"shutdown-script\": \"/opt/deeplearning/bin/shutdown_script.sh\",\n        \"notebooks-api\": \"PROD\",\n        \"title\": \"TensorFlow2.11/Keras.CPU\",\n        \"proxy-url\": \"44b1bee026df3850-dot-us-west1.notebooks.googleusercontent.com\"\n      },\n      \"createTime\": \"2023-02-06T13:58:15.095719640Z\",\n      \"updateTime\": \"2023-02-06T14:00:19.686950128Z\",\n      \"disks\": [\n        {\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"boot\",\n          \"diskSizeGb\": \"150\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            }\n          ],\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/click-to-deploy-images/global/licenses/c2d-tensorflow\",\n            \"https://www.googleapis.com/compute/v1/projects/click-to-deploy-images/global/licenses/c2d-dl-platform-gvnic\",\n            \"https://www.googleapis.com/compute/v1/projects/click-to-deploy-images/global/licenses/c2d-dl-platform-cpu-tensorflow-experimental\",\n            \"https://www.googleapis.com/compute/v1/projects/click-to-deploy-images/global/licenses/c2d-dl-platform-cpu-tensorflow-2-11\",\n            \"https://www.googleapis.com/compute/v1/projects/click-to-deploy-images/global/licenses/c2d-dl-platform-debian-10\",\n            \"https://www.googleapis.com/compute/v1/projects/click-to-deploy-images/global/licenses/c2d-dl-platform-dlvm\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks1-aaaa/zones/us-west1-a/disks/gcpdiag-notebooks1instance-aaaa-boot\",\n          \"type\": \"PERSISTENT\"\n        },\n        {\n          \"autoDelete\": true,\n          \"deviceName\": \"data\",\n          \"diskSizeGb\": \"100\",\n          \"index\": \"1\",\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks1-aaaa/zones/us-west1-a/disks/gcpdiag-notebooks1instance-aaaa-data\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"shieldedInstanceConfig\": {\n        \"enableVtpm\": true,\n        \"enableIntegrityMonitoring\": true\n      },\n      \"creator\": \"abc@abc.com\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/notebooks1/json-dumps/is-upgradeable.json",
    "content": "{\n  \"upgradeable\": true,\n  \"upgradeVersion\": \"m109\",\n  \"upgradeInfo\": \"A new image is available for upgrade. Backup user data before upgrading\",\n  \"upgradeImage\": \"https://www.googleapis.com/compute/v1/projects/deeplearning-platform-release/global/images/tf-latest-cpu-v20230615\"\n}\n"
  },
  {
    "path": "test-data/notebooks1/json-dumps/project.json",
    "content": "{\n  \"name\": \"projects/12340012\",\n  \"parent\": \"folders/373737373737\",\n  \"projectId\": \"gcpdiag-notebooks1-aaaa\",\n  \"state\": \"ACTIVE\",\n  \"displayName\": \"gcpdiag test - notebooks1\",\n  \"createTime\": \"2023-02-06T13:53:26.617Z\",\n  \"updateTime\": \"2023-02-06T13:53:26.617Z\",\n  \"etag\": \"jdWJRndnEleSyJWfd33qOQ==\",\n  \"labels\": {\n    \"gcpdiag\": \"test\"\n  }\n}\n"
  },
  {
    "path": "test-data/notebooks1/json-dumps/runtimes.json",
    "content": "{\n  \"runtimes\": [\n    {\n      \"name\": \"projects/gcpdiag-notebooks1-aaaa/locations/us-west1/runtimes/gcpdiag-notebooks1runtime-aaaa\",\n      \"virtualMachine\": {\n        \"virtualMachineConfig\": {\n          \"zone\": \"us-west1-a\",\n          \"machineType\": \"n1-standard-4\",\n          \"dataDisk\": {\n            \"initializeParams\": {\n              \"diskSizeGb\": \"100\",\n              \"diskType\": \"PD_STANDARD\"\n            }\n          },\n          \"acceleratorConfig\": {},\n          \"bootImage\": {}\n        }\n      },\n      \"state\": \"ACTIVE\",\n      \"accessConfig\": {\n        \"accessType\": \"SINGLE_USER\",\n        \"proxyUri\": \"65983399445cabc4-dot-us-west1.notebooks.googleusercontent.com\"\n      },\n      \"softwareConfig\": {\n        \"idleShutdown\": true,\n        \"idleShutdownTimeout\": 180,\n        \"upgradeable\": false,\n        \"version\": \"m109\"\n      },\n      \"createTime\": \"2023-06-16T14:23:46.908241072Z\",\n      \"updateTime\": \"2023-06-16T14:27:22.889587129Z\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/notebooks1/json-dumps/services.json",
    "content": "{\n  \"services\": [\n    {\n      \"name\": \"projects/12340012/services/compute.googleapis.com\",\n      \"config\": {\n        \"name\": \"compute.googleapis.com\",\n        \"title\": \"Compute Engine API\",\n        \"documentation\": {\n          \"summary\": \"Creates and runs virtual machines on Google Cloud Platform.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"compute.googleapis.com/VpcNetwork\",\n            \"displayName\": \"VPC Network\",\n            \"description\": \"VPC Network.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the VPC Network.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the VPC Network, global always.\"\n              },\n              {\n                \"key\": \"network_id\",\n                \"description\": \"VPC Network resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Location\",\n            \"displayName\": \"Compute Location\",\n            \"description\": \"A location in the Compute API.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the Compute Location.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Reservation\",\n            \"displayName\": \"Reservation\",\n            \"description\": \"Monitored resource representing a reservation.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container (e.g. project number) associated with the reservation.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The zone that contains the reservation.\"\n              },\n              {\n                \"key\": \"reservation_id\",\n                \"description\": \"Reservation resource ID.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/instances_per_vpc_network\",\n                \"compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/ip_aliases_per_vpc_network\",\n                \"compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/subnet_ranges_per_vpc_network\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Location\",\n              \"metrics\": [\n                \"compute.googleapis.com/global_dns/request_count\",\n                \"compute.googleapis.com/local_ssd_total_storage_per_vm_family\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/exceeded\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/exceeded\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Location\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/cpus_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/limit\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/usage\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/limit\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/usage\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/limit\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Reservation\",\n              \"metrics\": [\n                \"compute.googleapis.com/reservation/reserved\",\n                \"compute.googleapis.com/reservation/assured\",\n                \"compute.googleapis.com/reservation/used\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340012\"\n    },\n    {\n      \"name\": \"projects/12340012/services/notebooks.googleapis.com\",\n      \"config\": {\n        \"name\": \"notebooks.googleapis.com\",\n        \"title\": \"Notebooks API\",\n        \"documentation\": {\n          \"summary\": \"Notebooks API is used to manage notebook resources in Google Cloud.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"gce_instance\",\n            \"displayName\": \"VM Instance\",\n            \"description\": \"A virtual machine instance hosted in Compute Engine.\",\n            \"labels\": [\n              {\n                \"key\": \"project_id\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as \\\"my-project\\\".\"\n              },\n              {\n                \"key\": \"instance_id\",\n                \"description\": \"The numeric VM instance identifier assigned by Compute Engine.\"\n              },\n              {\n                \"key\": \"zone\",\n                \"description\": \"The Compute Engine zone in which the VM is running.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"notebooks.googleapis.com/Runtime\",\n            \"displayName\": \"Notebooks Runtime\",\n            \"description\": \"A managed notebooks instance.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP resource container associated with this resource, such as \\\"my-project\\\" or \\\"organizations/123\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The region of the runtime.\"\n              },\n              {\n                \"key\": \"runtime_id\",\n                \"description\": \"The user-provided unique ID for the runtime.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"gce_instance\",\n              \"metrics\": [\n                \"notebooks.googleapis.com/instance/proxy_agent/crash_count\",\n                \"notebooks.googleapis.com/instance/proxy_agent/response_count\",\n                \"notebooks.googleapis.com/instance/jupyter/crash_count\",\n                \"notebooks.googleapis.com/instance/jupyter/container_crash_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"notebooks.googleapis.com/Runtime\",\n              \"metrics\": [\n                \"notebooks.googleapis.com/runtime/health\",\n                \"notebooks.googleapis.com/runtime/kernel/startup_latencies\",\n                \"notebooks.googleapis.com/runtime/proxy/response_count\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340012\"\n    },\n    {\n      \"name\": \"projects/12340012/services/oslogin.googleapis.com\",\n      \"config\": {\n        \"name\": \"oslogin.googleapis.com\",\n        \"title\": \"Cloud OS Login API\",\n        \"documentation\": {\n          \"summary\": \"You can use OS Login to manage access to your VM instances using IAM roles.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340012\"\n    },\n    {\n      \"name\": \"projects/12340012/services/securitycenter.googleapis.com\",\n      \"config\": {\n        \"name\": \"securitycenter.googleapis.com\",\n        \"title\": \"Security Command Center API\",\n        \"documentation\": {\n          \"summary\": \"Security Command Center API provides access to temporal views of assets and findings within an organization.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340012\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/notebooks1/project.tf",
    "content": "/**\n * Copyright 2023 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nterraform {\n  required_providers {\n    google = {\n      source  = \"hashicorp/google\"\n      version = \"= 3.46.0\"\n    }\n    google-beta = {\n      source  = \"hashicorp/google-beta\"\n      version = \">= 3.46.0\"\n    }\n  }\n}\n\nresource \"random_string\" \"project_id_suffix\" {\n  length  = 8\n  number  = true\n  lower   = true\n  upper   = false\n  special = false\n}\n\nresource \"google_project\" \"project\" {\n  name            = \"gcpdiag test - notebooks1\"\n  project_id      = \"gcpdiag-notebooks1-${random_string.project_id_suffix.id}\"\n  org_id          = var.folder_id == \"\" ? var.org_id : null\n  folder_id       = var.folder_id != \"\" ? var.folder_id : null\n  billing_account = var.billing_account_id\n  labels = {\n    gcpdiag : \"test\"\n  }\n}\n\nresource \"google_project_service\" \"notebooks\" {\n  project = google_project.project.project_id\n  service = \"notebooks.googleapis.com\"\n}\n\noutput \"project_id\" {\n  value = google_project.project.project_id\n}\n\noutput \"project_id_suffix\" {\n  value = random_string.project_id_suffix.id\n}\n\noutput \"project_nr\" {\n  value = google_project.project.number\n}\n\noutput \"org_id\" {\n  value = var.org_id\n}\n"
  },
  {
    "path": "test-data/notebooks1/runtimes1.tf",
    "content": "/**\n * Copyright 2023 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n# https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/notebooks_runtime\nresource \"google_notebooks_runtime\" \"notebooks1runtime\" {\n  project  = google_project.project.project_id\n  name     = \"gcpdiag-notebooks1runtime-aaaa\"\n  provider = google-beta\n  location = \"us-west1\"\n  virtual_machine {\n    virtual_machine_config {\n      machine_type = \"n1-standard-4\"\n      data_disk {\n        initialize_params {\n          disk_size_gb = \"100\"\n          disk_type    = \"PD_STANDARD\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "test-data/notebooks1/variables.tf",
    "content": "variable \"billing_account_id\" {}\n\nvariable \"org_id\" {}\nvariable \"folder_id\" { default = \"\" }\n"
  },
  {
    "path": "test-data/notebooks2/Makefile",
    "content": "PROJECT_ID := $(shell terraform output project_id | sed -e 's|\"||g')\nPROJECT_ID_SUFFIX := $(shell terraform output -json project_id_suffix)\nPROJECT_NR  := $(shell terraform output -json project_nr)\nORG_ID      := $(shell terraform output -json org_id)\nCURL         = ../../bin/curl-wrap.sh\nJSON_CLEANER = ../../bin/json-cleaner\nLOCATION     = us-west1-a\nREGION       = us-west1\nINSTANCE_OK_NAME = notebooks2instance-ok\nINSTANCE_PROVISIONING_STUCK_NAME = notebooks2instance-provisioning-stuck\n\nFAKE_PROJECT_ID_SUFFIX = aaaa\nFAKE_PROJECT_NR = 12340012\nFAKE_ORG_ID = 11112222\nSED_SUBST_FAKE = sed -e \"s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/\" \\\n\t\t     -e \"s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/\" \\\n\t\t     -e \"s/$(ORG_ID)/$(FAKE_ORG_ID)/\" \\\n\nORG_POLICY_CONSTRAINTS = \\\n\tjson-dumps/org-constraint-compute.disableSerialPortAccess.json \\\n\tjson-dumps/org-constraint-compute.requireOsLogin.json \\\n  json-dumps/org-constraint-compute.requireShieldedVm.json \\\n\tjson-dumps/org-constraint-iam.automaticIamGrantsForDefaultServiceAccounts.json \\\n\tjson-dumps/org-constraint-compute.disableSerialPortLogging.json  \\\n\tjson-dumps/org-constraint-compute.disableSshInBrowser.json\n\ndefine MONITORING_QUERY\n{ \\\n  \"query\": \"fetch gce_instance \\\n            | metric 'compute.googleapis.com/instance/cpu/utilization' \\\n            | group_by 5m, [value_utilization_max: max(value.utilization)] \\\n            | every 5m \\\n  \t\t\t\t\t\" \\\n}\nendef\n\ndefine LOGGING_ENTRIES_BODY\n{ \\\n\t\"resourceNames\": [\"projects/$(PROJECT_ID)\"], \\\n\t\"orderBy\": \"timestamp desc\", \\\n\t\"filter\": \" \\\n\t\ttimestamp > \\\"2024-06-24T23:00:00+00:00\\\" AND \\\n\t\ttimestamp < \\\"2024-06-25T07:00:00+00:00\\\" AND \\\n\t\tresource.type=\\\"gce_instance\\\" \\\n\t\" \\\n}\nendef\n\nall:\t\\\n\tjson-dumps/project.json \\\n\tjson-dumps/services.json \\\n\tjson-dumps/compute-serial-port-output-$(INSTANCE_OK_NAME).json \\\n\tjson-dumps/compute-serial-port-output-$(INSTANCE_PROVISIONING_STUCK_NAME).json \\\n\tjson-dumps/compute-instances-us-west1-a.json \\\n\tjson-dumps/compute-instances-disks-us-west1-a.json \\\n\tjson-dumps/workbench-instances.json \\\n\tjson-dumps/notebooks2instance-ok-check-upgradability.json \\\n\tjson-dumps/notebooks2instance-ok-check-upgradability.json \\\n\tjson-dumps/notebooks2instance-provisioning-stuck-check-upgradability.json \\\n\tjson-dumps/monitoring-query.json \\\n\tjson-dumps/logging-entries-1.json \\\n\t$(ORG_POLICY_CONSTRAINTS)\n\njson-dumps/project.json:\n\t$(CURL) -fsS \\\n\t\t'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/services.json:\n\t$(CURL) -fv \\\n\t'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \\\n\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/org-constraint-%.json:\n\t$(CURL) -fsS \\\n\t\t'https://cloudresourcemanager.googleapis.com/v1/projects/$(PROJECT_ID):getEffectiveOrgPolicy' \\\n\t\t-X POST  --header \"Content-Type:text/json\" \\\n\t\t-d \"{\\\"constraint\\\": \\\"constraints/$*\\\"}\" \\\n\t\t| $(JSON_CLEANER) other \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/monitoring-query.json:\n\t$(CURL) -fsS \\\n\t\t'https://monitoring.googleapis.com/v3/projects/$(PROJECT_ID)/timeSeries:query' \\\n\t\t--header \"Content-Type: application/json\" -X POST \\\n\t\t--data '$(MONITORING_QUERY)' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-instances-us-west1-a.json:\n\t$(CURL) -fv \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/${PROJECT_ID}/zones/${LOCATION}/instances' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-instances-disks-us-west1-a.json:\n\t$(CURL) -fv \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/${PROJECT_ID}/zones/${LOCATION}/disks' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-serial-port-output-%.json:\n\t$(CURL) -fsS \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/zones/$(LOCATION)/instances/$*/serialPort?start=-1000000' \\\n\t\t--header \"Content-Type:text/json\" \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/workbench-instances.json:\n\t$(CURL) -fv \\\n\t\t'https://notebooks.googleapis.com/v2/projects/${PROJECT_ID}/locations/${LOCATION}/instances' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/notebooks2instance-ok-check-upgradability.json:\n\t$(CURL) -fv \\\n\t\t'https://notebooks.googleapis.com/v2/projects/${PROJECT_ID}/locations/${LOCATION}/instances/${INSTANCE_OK_NAME}:checkUpgradability' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/notebooks2instance-provisioning-stuck-check-upgradability.json:\n\t$(CURL) -fv \\\n\t\t'https://notebooks.googleapis.com/v2/projects/${PROJECT_ID}/locations/${LOCATION}/instances/${INSTANCE_PROVISIONING_STUCK_NAME}:checkUpgradability' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/logging-entries-1.json:\n\t$(CURL) -fsS \\\n\t\t'https://logging.googleapis.com/v2/entries:list' \\\n\t\t--header \"Content-Type:text/json\" \\\n\t\t--data '$(LOGGING_ENTRIES_BODY)' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n"
  },
  {
    "path": "test-data/notebooks2/instance_ok.tf",
    "content": "/**\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n# https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/workbench_instance\n\nresource \"google_workbench_instance\" \"notebooks2instance-ok\" {\n  project  = google_project.project.project_id\n  name     = \"notebooks2instance-ok\"\n  location = \"us-west1-a\"\n  gce_setup {\n    machine_type = \"e2-standard-4\"\n    boot_disk {\n      disk_size_gb = 150\n      disk_type    = \"PD_BALANCED\"\n    }\n    data_disks {\n      disk_size_gb = 100\n      disk_type    = \"PD_BALANCED\"\n    }\n    vm_image {\n      project = \"cloud-notebooks-managed\"\n      family  = \"workbench-instances\"\n    }\n    metadata = {\n      serial-port-logging-enable = true\n      report-event-health        = true\n      terraform                  = true\n      report-dns-resolution      = true\n      disable-mixer              = true\n      idle-timeout-seconds       = 10800\n    }\n  }\n  instance_owners      = []\n  disable_proxy_access = false\n  desired_state        = \"ACTIVE\"\n}\n"
  },
  {
    "path": "test-data/notebooks2/instance_provisioning_stuck.tf",
    "content": "/**\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n# https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/workbench_instance\n\nresource \"google_workbench_instance\" \"notebooks2instance_provisioning_stuck\" {\n  project  = google_project.project.project_id\n  name     = \"notebooks2instance-provisioning-stuck\"\n  location = \"us-west1-a\"\n  gce_setup {\n    machine_type      = \"e2-standard-4\"\n    disable_public_ip = true\n    boot_disk {\n      disk_size_gb = 150\n      disk_type    = \"PD_BALANCED\"\n    }\n    data_disks {\n      disk_size_gb = 100\n      disk_type    = \"PD_BALANCED\"\n    }\n    vm_image {\n      project = \"deeplearning-platform-release\"\n      family  = \"tf-2-11-cu113-notebooks-debian-11-py310\"\n    }\n    metadata = {\n      serial-port-logging-enable = true\n      post-startup-script        = \"#! /bin/bash\"\n      report-event-health        = true\n      terraform                  = true\n      report-dns-resolution      = true\n      disable-mixer              = true\n      idle-timeout-seconds       = 10800\n    }\n    network_interfaces {\n      network = google_compute_network.my_network.id\n      subnet  = google_compute_subnetwork.my_subnetwork.id\n    }\n  }\n  instance_owners      = []\n  disable_proxy_access = false\n  desired_state        = \"PROVISIONING\"\n}\n"
  },
  {
    "path": "test-data/notebooks2/json-dumps/compute-instances-disks-us-west1-a.json",
    "content": "{\n  \"kind\": \"compute#diskList\",\n  \"id\": \"projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/disks\",\n  \"items\": [\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"5823248711787458573\",\n      \"creationTimestamp\": \"2024-06-24T17:27:17.216-07:00\",\n      \"name\": \"notebooks2instance-ok-boot\",\n      \"sizeGb\": \"150\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/disks/notebooks2instance-ok-boot\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/cloud-notebooks-managed/global/images/workbench-instances-v20240613\",\n      \"sourceImageId\": \"8939839224153148113\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/diskTypes/pd-balanced\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/click-to-deploy-images/global/licenses/c2d-tensorflow\",\n        \"https://www.googleapis.com/compute/v1/projects/click-to-deploy-images/global/licenses/c2d-dl-platform-gvnic\",\n        \"https://www.googleapis.com/compute/v1/projects/click-to-deploy-images/global/licenses/c2d-dl-platform-workbench-instances\",\n        \"https://www.googleapis.com/compute/v1/projects/click-to-deploy-images/global/licenses/c2d-dl-platform-debian-11\",\n        \"https://www.googleapis.com/compute/v1/projects/click-to-deploy-images/global/licenses/c2d-dl-platform-dlvm\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        },\n        {\n          \"type\": \"UEFI_COMPATIBLE\"\n        },\n        {\n          \"type\": \"GVNIC\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2024-06-24T17:27:17.216-07:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/instances/notebooks2instance-ok\"\n      ],\n      \"labels\": {\n        \"consumer-project-id\": \"gcpdiag-notebooks2-aaaa\",\n        \"consumer-project-number\": \"12340012\",\n        \"notebooks-product\": \"workbench-instances\",\n        \"resource-name\": \"notebooks2instance-ok\"\n      },\n      \"labelFingerprint\": \"EShFsrA9YYA=\",\n      \"licenseCodes\": [\n        \"5638175847114525401\",\n        \"1045467480970708420\",\n        \"5827808631348907538\",\n        \"5836218392066113222\",\n        \"5592494605997326117\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\",\n      \"enableConfidentialCompute\": false,\n      \"satisfiesPzi\": true\n    },\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"5914438366494437389\",\n      \"creationTimestamp\": \"2024-06-24T17:27:17.219-07:00\",\n      \"name\": \"notebooks2instance-ok-data-workspace\",\n      \"sizeGb\": \"100\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/disks/notebooks2instance-ok-data-workspace\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/diskTypes/pd-balanced\",\n      \"lastAttachTimestamp\": \"2024-06-24T17:27:17.220-07:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/instances/notebooks2instance-ok\"\n      ],\n      \"labels\": {\n        \"consumer-project-id\": \"gcpdiag-notebooks2-aaaa\",\n        \"consumer-project-number\": \"12340012\",\n        \"notebooks-product\": \"workbench-instances\",\n        \"resource-name\": \"notebooks2instance-ok\"\n      },\n      \"labelFingerprint\": \"EShFsrA9YYA=\",\n      \"physicalBlockSizeBytes\": \"4096\",\n      \"enableConfidentialCompute\": false,\n      \"satisfiesPzi\": true\n    },\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"3682754809529082504\",\n      \"creationTimestamp\": \"2024-06-24T18:24:57.206-07:00\",\n      \"name\": \"notebooks2instance-provisioning-stuck-boot\",\n      \"sizeGb\": \"150\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/disks/notebooks2instance-provisioning-stuck-boot\",\n      \"sourceImage\": \"https://www.googleapis.com/compute/v1/projects/deeplearning-platform-release/global/images/tf-2-11-cu113-notebooks-v20240613-debian-11-py310\",\n      \"sourceImageId\": \"4888085334736329368\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/diskTypes/pd-balanced\",\n      \"licenses\": [\n        \"https://www.googleapis.com/compute/v1/projects/click-to-deploy-images/global/licenses/c2d-tensorflow\",\n        \"https://www.googleapis.com/compute/v1/projects/click-to-deploy-images/global/licenses/c2d-dl-platform-gvnic\",\n        \"https://www.googleapis.com/compute/v1/projects/click-to-deploy-images/global/licenses/c2d-dl-platform-gpu-tensorflow-2-11\",\n        \"https://www.googleapis.com/compute/v1/projects/click-to-deploy-images/global/licenses/c2d-dl-platform-gpu-tensorflow-experimental\",\n        \"https://www.googleapis.com/compute/v1/projects/click-to-deploy-images/global/licenses/c2d-dl-platform-debian-11\",\n        \"https://www.googleapis.com/compute/v1/projects/click-to-deploy-images/global/licenses/c2d-dl-platform-notebooks\"\n      ],\n      \"guestOsFeatures\": [\n        {\n          \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n        },\n        {\n          \"type\": \"UEFI_COMPATIBLE\"\n        },\n        {\n          \"type\": \"GVNIC\"\n        }\n      ],\n      \"lastAttachTimestamp\": \"2024-06-24T18:24:57.206-07:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/instances/notebooks2instance-provisioning-stuck\"\n      ],\n      \"labels\": {\n        \"consumer-project-id\": \"gcpdiag-notebooks2-aaaa\",\n        \"consumer-project-number\": \"12340012\",\n        \"notebooks-product\": \"workbench-instances\",\n        \"resource-name\": \"notebooks2instance-provisioning-stuck\"\n      },\n      \"labelFingerprint\": \"8SWlKftMsi8=\",\n      \"licenseCodes\": [\n        \"5638175847114525401\",\n        \"1045467480970708420\",\n        \"101762042003655628\",\n        \"2336113588774204348\",\n        \"5836218392066113222\",\n        \"241948068456683562\"\n      ],\n      \"physicalBlockSizeBytes\": \"4096\",\n      \"enableConfidentialCompute\": false,\n      \"satisfiesPzi\": true\n    },\n    {\n      \"kind\": \"compute#disk\",\n      \"id\": \"3306109417737921160\",\n      \"creationTimestamp\": \"2024-06-24T18:24:57.208-07:00\",\n      \"name\": \"notebooks2instance-provisioning-stuck-data-workspace\",\n      \"sizeGb\": \"100\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a\",\n      \"status\": \"READY\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/disks/notebooks2instance-provisioning-stuck-data-workspace\",\n      \"type\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/diskTypes/pd-balanced\",\n      \"lastAttachTimestamp\": \"2024-06-24T18:24:57.209-07:00\",\n      \"users\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/instances/notebooks2instance-provisioning-stuck\"\n      ],\n      \"labels\": {\n        \"consumer-project-id\": \"gcpdiag-notebooks2-aaaa\",\n        \"consumer-project-number\": \"12340012\",\n        \"notebooks-product\": \"workbench-instances\",\n        \"resource-name\": \"notebooks2instance-provisioning-stuck\"\n      },\n      \"labelFingerprint\": \"8SWlKftMsi8=\",\n      \"physicalBlockSizeBytes\": \"4096\",\n      \"enableConfidentialCompute\": false,\n      \"satisfiesPzi\": true\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/disks\"\n}\n"
  },
  {
    "path": "test-data/notebooks2/json-dumps/compute-instances-us-west1-a.json",
    "content": "{\n  \"kind\": \"compute#instanceList\",\n  \"id\": \"projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/instances\",\n  \"items\": [\n    {\n      \"kind\": \"compute#instance\",\n      \"id\": \"7519326121542266893\",\n      \"creationTimestamp\": \"2024-06-24T17:27:17.206-07:00\",\n      \"name\": \"notebooks2instance-ok\",\n      \"tags\": {\n        \"items\": [\n          \"deeplearning-vm\",\n          \"notebook-instance\"\n        ],\n        \"fingerprint\": \"OOp0AY3QO9M=\"\n      },\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/machineTypes/e2-standard-4\",\n      \"status\": \"RUNNING\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a\",\n      \"canIpForward\": false,\n      \"networkInterfaces\": [\n        {\n          \"kind\": \"compute#networkInterface\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/global/networks/default\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/regions/us-west1/subnetworks/default\",\n          \"networkIP\": \"10.138.0.5\",\n          \"name\": \"nic0\",\n          \"accessConfigs\": [\n            {\n              \"kind\": \"compute#accessConfig\",\n              \"type\": \"ONE_TO_ONE_NAT\",\n              \"name\": \"external-nat\",\n              \"natIP\": \"34.168.127.66\",\n              \"networkTier\": \"PREMIUM\"\n            }\n          ],\n          \"fingerprint\": \"hcYNt8C2szg=\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ],\n      \"disks\": [\n        {\n          \"kind\": \"compute#attachedDisk\",\n          \"type\": \"PERSISTENT\",\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/disks/notebooks2instance-ok-boot\",\n          \"deviceName\": \"boot\",\n          \"index\": 0,\n          \"boot\": true,\n          \"autoDelete\": true,\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/click-to-deploy-images/global/licenses/c2d-tensorflow\",\n            \"https://www.googleapis.com/compute/v1/projects/click-to-deploy-images/global/licenses/c2d-dl-platform-gvnic\",\n            \"https://www.googleapis.com/compute/v1/projects/click-to-deploy-images/global/licenses/c2d-dl-platform-workbench-instances\",\n            \"https://www.googleapis.com/compute/v1/projects/click-to-deploy-images/global/licenses/c2d-dl-platform-debian-11\",\n            \"https://www.googleapis.com/compute/v1/projects/click-to-deploy-images/global/licenses/c2d-dl-platform-dlvm\"\n          ],\n          \"interface\": \"SCSI\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            }\n          ],\n          \"diskSizeGb\": \"150\"\n        },\n        {\n          \"kind\": \"compute#attachedDisk\",\n          \"type\": \"PERSISTENT\",\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/disks/notebooks2instance-ok-data-workspace\",\n          \"deviceName\": \"data-workspace\",\n          \"index\": 1,\n          \"boot\": false,\n          \"autoDelete\": true,\n          \"interface\": \"SCSI\",\n          \"diskSizeGb\": \"100\"\n        }\n      ],\n      \"metadata\": {\n        \"kind\": \"compute#metadata\",\n        \"fingerprint\": \"KC5MsBA_e0s=\",\n        \"items\": [\n          {\n            \"key\": \"version\",\n            \"value\": \"122\"\n          },\n          {\n            \"key\": \"restriction\",\n            \"value\": \"\"\n          },\n          {\n            \"key\": \"proxy-backend-id\",\n            \"value\": \"341a9c04117d5a9e\"\n          },\n          {\n            \"key\": \"enable-oslogin\",\n            \"value\": \"TRUE\"\n          },\n          {\n            \"key\": \"notebooks-api-version\",\n            \"value\": \"v2\"\n          },\n          {\n            \"key\": \"enable-guest-attributes\",\n            \"value\": \"TRUE\"\n          },\n          {\n            \"key\": \"report-event-health\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"shutdown-script\",\n            \"value\": \"/opt/deeplearning/bin/shutdown_script.sh\"\n          },\n          {\n            \"key\": \"idle-timeout-seconds\",\n            \"value\": \"10800\"\n          },\n          {\n            \"key\": \"serial-port-logging-enable\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"disable-mixer\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"notebooks-api\",\n            \"value\": \"PROD\"\n          },\n          {\n            \"key\": \"terraform\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"proxy-url\",\n            \"value\": \"341a9c04117d5a9e-dot-us-west1.notebooks.googleusercontent.com\"\n          },\n          {\n            \"key\": \"report-dns-resolution\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"disable-swap-binaries\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"proxy-byoid-url\",\n            \"value\": \"341a9c04117d5a9e-dot-us-west1.notebooks.byoid.googleusercontent.com\"\n          },\n          {\n            \"key\": \"framework\",\n            \"value\": \"workbench\"\n          },\n          {\n            \"key\": \"proxy-registration-url\",\n            \"value\": \"https://us-west1.notebooks.cloud.google.com/tun/m/4592f092208ecc84946b8f8f8016274df1b36a14\"\n          },\n          {\n            \"key\": \"proxy-mode\",\n            \"value\": \"service_account\"\n          },\n          {\n            \"key\": \"title\",\n            \"value\": \"workbench\"\n          }\n        ]\n      },\n      \"serviceAccounts\": [\n        {\n          \"email\": \"12340012-compute@developer.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/cloud-platform\",\n            \"https://www.googleapis.com/auth/userinfo.email\"\n          ]\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/instances/notebooks2instance-ok\",\n      \"scheduling\": {\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"automaticRestart\": true,\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"cpuPlatform\": \"Intel Broadwell\",\n      \"labels\": {\n        \"consumer-project-id\": \"gcpdiag-notebooks2-aaaa\",\n        \"consumer-project-number\": \"12340012\",\n        \"notebooks-product\": \"workbench-instances\",\n        \"resource-name\": \"notebooks2instance-ok\"\n      },\n      \"labelFingerprint\": \"EShFsrA9YYA=\",\n      \"startRestricted\": false,\n      \"deletionProtection\": false,\n      \"reservationAffinity\": {\n        \"consumeReservationType\": \"NO_RESERVATION\"\n      },\n      \"shieldedInstanceConfig\": {\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true,\n        \"enableIntegrityMonitoring\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"fingerprint\": \"wITWaO7_ULs=\",\n      \"lastStartTimestamp\": \"2024-06-24T17:27:24.621-07:00\",\n      \"satisfiesPzi\": true\n    },\n    {\n      \"kind\": \"compute#instance\",\n      \"id\": \"8016169244013604304\",\n      \"creationTimestamp\": \"2024-06-24T17:45:53.435-07:00\",\n      \"name\": \"notebooks2instance-provisioning-stuck\",\n      \"tags\": {\n        \"items\": [\n          \"deeplearning-vm\",\n          \"notebook-instance\"\n        ],\n        \"fingerprint\": \"OOp0AY3QO9M=\"\n      },\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/machineTypes/e2-standard-4\",\n      \"status\": \"RUNNING\",\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a\",\n      \"networkInterfaces\": [\n        {\n          \"kind\": \"compute#networkInterface\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/global/networks/wbi-test-default\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/regions/us-west1/subnetworks/wbi-test-default\",\n          \"networkIP\": \"10.0.1.2\",\n          \"name\": \"nic0\",\n          \"fingerprint\": \"GpnD5K8Rv9k=\",\n          \"stackType\": \"IPV4_ONLY\"\n        }\n      ],\n      \"disks\": [\n        {\n          \"kind\": \"compute#attachedDisk\",\n          \"type\": \"PERSISTENT\",\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/disks/notebooks2instance-provisioning-stuck-boot\",\n          \"deviceName\": \"boot\",\n          \"index\": 0,\n          \"boot\": true,\n          \"autoDelete\": true,\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos-pcid\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud/global/licenses/cos\",\n            \"https://www.googleapis.com/compute/v1/projects/cos-cloud-shielded/global/licenses/shielded-cos\",\n            \"https://www.googleapis.com/compute/v1/projects/click-to-deploy-images/global/licenses/c2d-dl-platform-workbench-instances-custom-container-host\"\n          ],\n          \"interface\": \"SCSI\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"SEV_LIVE_MIGRATABLE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            },\n            {\n              \"type\": \"SEV_SNP_CAPABLE\"\n            },\n            {\n              \"type\": \"SEV_LIVE_MIGRATABLE_V2\"\n            },\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            }\n          ],\n          \"diskSizeGb\": \"150\",\n          \"shieldedInstanceInitialState\": {\n            \"pk\": {\n              \"content\": \"MIIEGTCCAwGgAwIBAgIQYB8C9RH--O1hXkpp2FVSXjANBgkqhkiG9w0BAQsFADCBkTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC0dvb2dsZSBMTEMuMR8wHQYDVQQLExZDb250YWluZXIgT3B0aW1pemVkIE9TMR4wHAYDVQQDExVVRUZJIFBsYXRmb3JtIEtleSB2MTAwHhcNMjAwODA2MTk0ODQ0WhcNMzAwODA0MTk0ODQ0WjCBkTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC0dvb2dsZSBMTEMuMR8wHQYDVQQLExZDb250YWluZXIgT3B0aW1pemVkIE9TMR4wHAYDVQQDExVVRUZJIFBsYXRmb3JtIEtleSB2MTAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQClSQ15LUf193eJfM6b5etGgz8auvdI72Cclo3fHvwXBzsm5T1QamwYAqrCTcS7MxauCTkmkXTS9ejM4NNpQWF6KG82nR88vRyKO_MnSNL8ZP-rtRu0p1X_mUYXwi0_nPkyPKLR2QJ9H2EOrw_RChWvwnu281WtfUPCYs2t2SjBCF_mgzZI8o3s8wOtL8y-Dmi9T0bGO1wYX2okz51PKbhgVGQA7KJRmeekIxEkiN7GOb_2VQqcdM9c846OlC-8abwgDvrL3YqKqhw8DnSM2AbNpZIgUTd1Ut3X-PWXVKBj3qdxjAyRez8dPWymXDji-CBoBzLsWEkUW87S1coggOABAgMBAAGjazBpMA8GA1UdEwEB_wQFMAMBAf8wKQYDVR0OBCIEIMk0-K2sxOjtSpl-2pXmBWwwvSMGEIThmdDsSxQk2XZQMCsGA1UdIwQkMCKAIMk0-K2sxOjtSpl-2pXmBWwwvSMGEIThmdDsSxQk2XZQMA0GCSqGSIb3DQEBCwUAA4IBAQA7Pmaixb0FuDtpesNGvaBkTGWWMO7bDtx4rQom7zprEnliFJZung08FS3r73ob1urH0lzZm9022nRp8xqcSGk3wDkE9xQppWhvjhf6SOHdwM9_OxVq6no_BPz1PkRYsg4V07cgYPCtp7Ck7ZBI7m3MbLUyg8EG14_tvjKX9Xh2h0FSGuGg8_jjGYCGDtaSPkXBpAWurZ5mC2o9CzGaBJR4f_51I5C2AfHMG0H5T0Kehuyb_IzX9mAwArGmt62e4T9SxdP7LZUNPMEzOrhW1RzXvsD6Vod4uA9h2n_lbZHiBBExM2PMwuoobb-io-W0ARL4OCN5jah0a7q1ax6UYJK-\",\n              \"fileType\": \"X509\"\n            },\n            \"keks\": [\n              {\n                \"content\": \"MIIEIjCCAwqgAwIBAgIRAKxVeWkn5a0pF1C0o_HUM6owDQYJKoZIhvcNAQELBQAwgZUxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtHb29nbGUgTExDLjEfMB0GA1UECxMWQ29udGFpbmVyIE9wdGltaXplZCBPUzEiMCAGA1UEAxMZVUVGSSBLZXkgRXhjaGFuZ2UgS2V5IHYxMDAeFw0yMDA4MDYxOTQ4NTBaFw0zMDA4MDQxOTQ4NTBaMIGVMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLR29vZ2xlIExMQy4xHzAdBgNVBAsTFkNvbnRhaW5lciBPcHRpbWl6ZWQgT1MxIjAgBgNVBAMTGVVFRkkgS2V5IEV4Y2hhbmdlIEtleSB2MTAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6ZCJ4Oldm1z3gwwAjWqiHRMFrXPwq0XmVmLWoaGUBzeL41VwHK76iQTxl11HYhqaAr_0nmVQAM3M6so6cmydd7l1RPYJpZ3Shy3qO4xxgy30kp4zW00m9EVEdkmh9-9zi_G89uutz7wOb34M2Wrybwa7D5U102DmSoJAoq5z2YrvpjZoGLRGqBBP6A1l-_gRGMAgUMqKbhD1HF1VKXZnIGq9UJcpHhRvQxOG3nlVWk6z8dH-Rnp_9YfEPRORAUF5PUnUL5-I3wr5derIIoeYxc7G2ZuTyRWsF9WVyZ7OquYwxAY4l4xkDJpAvSomHkbfNgtCZyTm2pMIkRou0up5lAgMBAAGjazBpMA8GA1UdEwEB_wQFMAMBAf8wKQYDVR0OBCIEINDkWV5HwgIi6aogGQUbZwWC5Es_Vx9SX5kG8i1xiXxKMCsGA1UdIwQkMCKAINDkWV5HwgIi6aogGQUbZwWC5Es_Vx9SX5kG8i1xiXxKMA0GCSqGSIb3DQEBCwUAA4IBAQCOTmuK7QQ4sP_8qYI2-bkvbQg1Vpq0W_aWtm0AQDw2iEVgfIq8JxNHu61ZhkmBiEhsdaaj7bYt_8owpvxfRnmzMPhQ6iB51vkExjWipD9spgSb8tfp0te6MqTT3omyYI9x4L13wn9ufZtlhZXlVgbjUN1QyevHwNt7Kms8Nd9Jbk9JCV9JoOIjkBpUjpCWCDfdGDD-iGIPzGdS-KjrNiA4udnzkdkO83dFMMvu69a1snCRUshNvHBNPbPRwbRYV9lS_QTwfft7EgbNF0455gblZbejvGJgR1Vhyen0jIPouVWxXe0X7AnGK8Mc3DUQBPVGT4ZR0WChbcwiOavh2t2X\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"dbs\": [\n              {\n                \"content\": \"MIIEDTCCAvWgAwIBAgIQRtEbux4j2WDjYimBMkIBYjANBgkqhkiG9w0BAQsFADCBizELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC0dvb2dsZSBMTEMuMR8wHQYDVQQLExZDb250YWluZXIgT3B0aW1pemVkIE9TMRgwFgYDVQQDEw9VRUZJIERCIEtleSB2MTAwHhcNMjAwODA2MTk0ODU1WhcNMzAwODA0MTk0ODU1WjCBizELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC0dvb2dsZSBMTEMuMR8wHQYDVQQLExZDb250YWluZXIgT3B0aW1pemVkIE9TMRgwFgYDVQQDEw9VRUZJIERCIEtleSB2MTAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDQzJHu5A61uBNU6UUUZ5MiXjXwy8Du44BHhisNBpi6cTVHZddJ85iNldE5cPL7hZFJP9n77KyFRCCLxT2CVDNkwMyE2jvJkTz2x2qWvJ-uIuL25Asfgbrv7t1h2Jn790ZLwb9U3qQvqMLvIh_cTtNLat0DaZJsdnJo1MTnFAWrYZZ19KB4j6JJpG_QBnQ-s8XibeSSoa_bMEQTn2OEQFeEcume3CeuZKzXyytMLKkV_z4z-CYddyRwkOFivWUHWq2nVecQQgdyDNWYxGnY4MNsTMYFfv-mhyRzMwhxBFMwMAaEwhTFWsIP6VNwrwIgQaDw3o1fUEuzavTfdNhULaJLAgMBAAGjazBpMA8GA1UdEwEB_wQFMAMBAf8wKQYDVR0OBCIEIEtOsnFY2N1KW7dg9Wd_GEcIwV_a-U2DCn5ZyUsGWickMCsGA1UdIwQkMCKAIEtOsnFY2N1KW7dg9Wd_GEcIwV_a-U2DCn5ZyUsGWickMA0GCSqGSIb3DQEBCwUAA4IBAQCOd9V3WYv589dVov5ZOYo4zSs5PXpts1_8sYvMwvzLBr46LaejfG7KjjIY665Cnik__Zy9N3ZS9-fEeGKrBPE8ClwC06QhLbWDSFIqj2y9qq5FyBW0k1no2UQBnvx4CnLw_BgU3eae0wjv1lpDIbMwxe3E_aucVmzaIX3O83cw2JL9lLm1Psum0L2VHDZSCTP24vzrWoXXo4USHO_tBt_NkYrdkQH5CqGJYtxzKRwHHKEar3vzsiW4DPzlW8kUjRual1eBOKT5YKGbrOA_PJXV9x_7v1f2uAIrqh3HyppDTaGJ7Lux1MDf_hKuwAFI5QJTy9NEojbuUk1tzB4ys_W8\",\n                \"fileType\": \"X509\"\n              }\n            ],\n            \"dbxs\": [\n              {\n                \"content\": \"MIIEaDCCA1CgAwIBAgIJAKqfsrCdjyCoMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtHb29nbGUgTExDLjEUMBIGA1UECxMLQ2hyb21pdW0gT1MxFzAVBgNVBAMTDlVFRkkgREIgS2V5IHYxMB4XDTE4MTIwODAxMTk0MVoXDTI4MTIwNTAxMTk0MVowfzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC0dvb2dsZSBMTEMuMRQwEgYDVQQLEwtDaHJvbWl1bSBPUzEXMBUGA1UEAxMOVUVGSSBEQiBLZXkgdjEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtZ9U4P5aWlBwiTocmkUjOn2XpvHUlUOnsnhvsm994hAb0MNk2d3fXa8Nz14v9JiBTSf70KU2Zhxb_bSN3KAIv-f7F2AuXte7U9SnzZ02UDmK4TU1bFQW67Y3Gc2hWprCHYEjiRQD4J3WPWhuZnAXqzXQk3uDWVPETi-G9KAM1R-yNxZfoEjfIKhLabDsWqDtnMSovObLoVfwTdnm0WCuYTFtY_CKNxuxeKuzDsC5Su9N3dSFbpGhXJjwUaXPLWY5MFIqIQNBfhmWzDd4PItXaXV3V44IqWTXclE2aSUqkwNrEZ1cRpHG4PYM1aHVmjcO_dWlvthcepTIMIEMAXg2LAgMBAAGjgeYwgeMwHQYDVR0OBBYEFNXbmmdkM0aIsPMyEIv25JRaOPA-MIGzBgNVHSMEgaswgaiAFNXbmmdkM0aIsPMyEIv25JRaOPA-oYGEpIGBMH8xCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtHb29nbGUgTExDLjEUMBIGA1UECxMLQ2hyb21pdW0gT1MxFzAVBgNVBAMTDlVFRkkgREIgS2V5IHYxggkAqp-ysJ2PIKgwDAYDVR0TBAUwAwEB_zANBgkqhkiG9w0BAQsFAAOCAQEAJ2vbNymAKTUbRvxnAohHozVUByrKHCq1o8b-bKrgv7Ch0X4itfG8Uwvt0xG7CTpl_Dno92MtpOpFv4ydqox-pP1kTsRcnFNggndXdjpGILIB94KmFiYJvB6RzocJsXsXBa0tULOR24qiB9f93kfITS7Ec60WjFfpgYKEnuEgcV0yBuZzAZbxo1uF4n1hhmVUnKtEI9pX-8geYIIqIYiwwT2jnhFogWw4PeSyg-HMR1CLwwJeH2XDa924LpgHFuR-AbikipAE2vIE0yqJzo0o4tn9-sRuMaQcZ4VQqIzMiniW5H7nGeoQY3ktHX5eq6x-4jFvdLnzzq_D4sS-UWHzOA==\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"MIIEiTCCA3GgAwIBAgIJAOzm3xz71Vu6MA0GCSqGSIb3DQEBCwUAMIGJMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLR29vZ2xlIExMQy4xFDASBgNVBAsTC0Nocm9taXVtIE9TMSEwHwYDVQQDExhVRUZJIEtleSBFeGNoYW5nZSBLZXkgdjEwHhcNMTgxMjA4MDExOTQwWhcNMjgxMjA1MDExOTQwWjCBiTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC0dvb2dsZSBMTEMuMRQwEgYDVQQLEwtDaHJvbWl1bSBPUzEhMB8GA1UEAxMYVUVGSSBLZXkgRXhjaGFuZ2UgS2V5IHYxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwg5hvVH6fJSBNji7ynBl1SQzWceL5P3ul6RcB-1s5wXqzXlIHiyRqBdj4hj2pLzpKJGmXWnerIwJOkdsFg7IwZpA4xHE1F-M8XlpuuUn_Xdfccef36ddZEUH6QLwNm96T89F4ujt0omJ-0GV37vBsxEY-hwR3O8XBgyx8TvvYxNnVyTgi19qQdb2ES8-yWJkebdzgugcmNf9K-55fnEiyxWtrvEQb2sowWIS3-b1I_BP85pW2pldh9yQWfb3OY2NJhGSbQSnLi3J0IhRXROEtAXCU4MLTq2cHOpGX0DtJP_g_jD1pnC1O6CCZgVycK4DgZXeDzOG_2Uimhr0y1rcewIDAQABo4HxMIHuMB0GA1UdDgQWBBQEqlpkrYWCzJe69eMUdF1byztBmzCBvgYDVR0jBIG2MIGzgBQEqlpkrYWCzJe69eMUdF1byztBm6GBj6SBjDCBiTELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC0dvb2dsZSBMTEMuMRQwEgYDVQQLEwtDaHJvbWl1bSBPUzEhMB8GA1UEAxMYVUVGSSBLZXkgRXhjaGFuZ2UgS2V5IHYxggkA7ObfHPvVW7owDAYDVR0TBAUwAwEB_zANBgkqhkiG9w0BAQsFAAOCAQEAWsd3mq0dADTD7Tx2uYcDeJcJHO0x91hO26p2cqUSox4wPgc4_xk5yiteMgDB5CWLwgcuneDAYYMO1PmktpEvLu9a82gCGxGiww-w78OJTOrs68VM1zB0jqA3X5EyVSwVJqi8idgrnnGsJAcSBosnUI8pNi9SDC3MRPE1q1EUjuDNjsE7t_ItBe-MSMWCH2hpG8unZ7uwWCRfAV3Fkdnq_S5HzDy6-kKyGdj-rprhVeDz2xSyMOlNIJig4uuqU166DTfoQA2TxnMG_TuHt69Z4uZcVwx_HwPs2-vUCCYqZDwuuHKNIEm8kIK8sSPSsp22sC8h-7Klb8wj_d0lzShgkg==\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"MIID0zCCArugAwIBAgIJANuXsNG_1HHxMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQHDA1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKDAtHb29nbGUgTExDLjEUMBIGA1UECwwLQ2hyb21pdW0gT1MxFzAVBgNVBAMMDlVFRkkgREIgS2V5IHYxMCAXDTE4MDQyNzE1MDYzN1oYDzIyMTgwMzEwMTUwNjM3WjB_MQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEUMBIGA1UECgwLR29vZ2xlIExMQy4xFDASBgNVBAsMC0Nocm9taXVtIE9TMRcwFQYDVQQDDA5VRUZJIERCIEtleSB2MTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALWzFg8obysKXCjnbBTpAM8dMFC2pHX7GpwESNG-FYQI218Y1Ao1p5BttGqPoU5lGNeYUXxgxIqfN18ALHH10gRCRfqbC54faPU1lMr0e0jvi67GgGztyLl4ltAgK7HHTHmtZwghYNS45pKz_LFGm-TlKg-HPZBFT9GtbjRZe5IS2xdKkWM_sPA8qXwzvqmLN3OQckf0KchSUQmB3-wh4vYFV2TEjz10oR0FZO8LFFOOeooukcRDYy219XrdM21APnfszHmfKhzAFddOcYdwKwOL-w9TKVUwCIM70GL_YOtywA17mQkEm0ON79oyQ0daDlZ0ngDxC8xUIASYsRRPOkkCAwEAAaNQME4wHQYDVR0OBBYEFFO6MYgG9CvYp6qAqn_Jm-MANGpvMB8GA1UdIwQYMBaAFFO6MYgG9CvYp6qAqn_Jm-MANGpvMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAIGyOB_3oFo6f3WoFrdBzimb_weH8hejtCggpcL-8Wdex9VRl5MKi_1GlGbietMDsr1alwdaagam9RafuIQplohTSBnQrU-u-LbtRlCF9C25GDQ70S0QlxAQmt41Sc7kSFTPm6BHauF3b_Raf9AX30MamptoXoAhgMnHAitCn6yCOsRJ_d1t04lqsiqefhf26xItvRnkuxG7-IQnbyGFCGPcjFNAE1thLpL_6y_dprVwTLsvZnsWYj-1Gg1yUkOnCN8Kl3Q3RDVqo98mORUc0bKB-B8_FQsbtmzbb-29nXQJW1FJx0ejqJyDGGBPHAGpwEJTVB3mwWXzBU6Ny7T3dlk=\",\n                \"fileType\": \"X509\"\n              },\n              {\n                \"content\": \"MIID6TCCAtGgAwIBAgIJAKgdcZ45rGMDMA0GCSqGSIb3DQEBCwUAMIGJMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEUMBIGA1UECgwLR29vZ2xlIExMQy4xFDASBgNVBAsMC0Nocm9taXVtIE9TMSEwHwYDVQQDDBhVRUZJIEtleSBFeGNoYW5nZSBLZXkgdjEwIBcNMTgwNDI3MTUwNjM3WhgPMjIxODAzMTAxNTA2MzdaMIGJMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNTW91bnRhaW4gVmlldzEUMBIGA1UECgwLR29vZ2xlIExMQy4xFDASBgNVBAsMC0Nocm9taXVtIE9TMSEwHwYDVQQDDBhVRUZJIEtleSBFeGNoYW5nZSBLZXkgdjEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCbIdHPMQZZU68jI5kz5rmwvo-DQZZJ5amRnAUnBpNllhNQB6TaLUS_D9TIo_0X1e8T21Xk4Pf3D5ckbuQxsJzQ5OVEOb59sJ9AhjVUoxQxuVW-iBzD0mWbxKf2cASy2YRIEcaAAI5QT2SwO8gZy_G8LwAk-vO0vIbynN0WuFLl1Dp2cMQ3CxLSPH-QPSZyGd6o6ewUU9JzboppujXpk43EQH5ZJE_wJb_ujUFWcFzKHb_EkV1hI1TmBJ1-vR2kao4_1hQO6k1zLUR-MyBHY0SRU2OQxBpSez-qt7oItMBc1EanXvq9tqx0ndCTmXQYQplT5wtkPbE9sd5zwbDt8btHAgMBAAGjUDBOMB0GA1UdDgQWBBS5Tmmv3JM8w1mfP9V5xAIdjBhb7TAfBgNVHSMEGDAWgBS5Tmmv3JM8w1mfP9V5xAIdjBhb7TAMBgNVHRMEBTADAQH_MA0GCSqGSIb3DQEBCwUAA4IBAQB9BRTP37ik4jF2BmJJspMA6NHS7mxIckFCYKl-TO8zGFd3mlA6dnEw5WY-tUcBNJpAaHNJV_rzagGPpWMIoy-nAaLSSpnyhEXYTnQvzejYRijN3N0V9tmM0qgViHNBqTxdfcwlst5OUesGHPqgBOt5RRu5OGJ0rkuymWwxHOKIw43hz5FW7vhumbtJ3iy8HSFQIjSYMkr0sOzJhmvnHlpZ4pOoPNyNA9DM6smriH-2-MnJFM9w8bg6zsV5X-6KL464_FuXL_X_IWmAsAbi8Ge8ZMJjEaDrF1qkD4aLvu0MshzEdvrvQO-3Gn3Lmi_RYKR0HKZp7jXTySj76sxt9QK4\",\n                \"fileType\": \"X509\"\n              }\n            ]\n          },\n          \"architecture\": \"X86_64\"\n        },\n        {\n          \"kind\": \"compute#attachedDisk\",\n          \"type\": \"PERSISTENT\",\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/disks/notebooks2instance-provisioning-stuck-data-workspace\",\n          \"deviceName\": \"data-workspace\",\n          \"index\": 1,\n          \"boot\": false,\n          \"autoDelete\": true,\n          \"interface\": \"SCSI\",\n          \"diskSizeGb\": \"100\"\n        }\n      ],\n      \"metadata\": {\n        \"kind\": \"compute#metadata\",\n        \"fingerprint\": \"E8BE_novTRM=\",\n        \"items\": [\n          {\n            \"key\": \"enable-guest-attributes\",\n            \"value\": \"TRUE\"\n          },\n          {\n            \"key\": \"post-startup-script\",\n            \"value\": \"#! /bin/bash\"\n          },\n          {\n            \"key\": \"google-logging-enabled\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"disable-swap-binaries\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"notebooks-api-version\",\n            \"value\": \"v2\"\n          },\n          {\n            \"key\": \"terraform\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"report-event-health\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"shutdown-script\",\n            \"value\": \"/opt/deeplearning/bin/shutdown_script.sh\"\n          },\n          {\n            \"key\": \"user-data\",\n            \"value\": \"#include file:///mnt/stateful_partition/workbench/cloud-config.yaml\"\n          },\n          {\n            \"key\": \"custom-container-payload\",\n            \"value\": \"us-docker.pkg.dev/deeplearning-platform-release/gcr.io/base-cu113.py310:m118\"\n          },\n          {\n            \"key\": \"serial-port-logging-enable\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"report-dns-resolution\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"container\",\n            \"value\": \"us-docker.pkg.dev/deeplearning-platform-release/gcr.io/base-cu113.py310:m118\"\n          },\n          {\n            \"key\": \"report-event-url\",\n            \"value\": \"https://notebooks.googleapis.com/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem\"\n          },\n          {\n            \"key\": \"cos-update-strategy\",\n            \"value\": \"update_disabled\"\n          },\n          {\n            \"key\": \"service-account-mode\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"custom-container-image\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"enable-oslogin\",\n            \"value\": \"TRUE\"\n          },\n          {\n            \"key\": \"disable-mixer\",\n            \"value\": \"true\"\n          },\n          {\n            \"key\": \"proxy-mode\",\n            \"value\": \"service_account\"\n          },\n          {\n            \"key\": \"notebooks-api\",\n            \"value\": \"PROD\"\n          },\n          {\n            \"key\": \"proxy-registration-url\",\n            \"value\": \"https://us-west1.notebooks.cloud.google.com/tun/m/4592f092208ecc84946b8f8f8016274df1b36a14\"\n          },\n          {\n            \"key\": \"proxy-backend-id\",\n            \"value\": \"1b1dcbcb4ec643e8\"\n          },\n          {\n            \"key\": \"proxy-url\",\n            \"value\": \"1b1dcbcb4ec643e8-dot-us-west1.notebooks.googleusercontent.com\"\n          },\n          {\n            \"key\": \"proxy-byoid-url\",\n            \"value\": \"1b1dcbcb4ec643e8-dot-us-west1.notebooks.byoid.googleusercontent.com\"\n          }\n        ]\n      },\n      \"serviceAccounts\": [\n        {\n          \"email\": \"12340012-compute@developer.gserviceaccount.com\",\n          \"scopes\": [\n            \"https://www.googleapis.com/auth/cloud-platform\",\n            \"https://www.googleapis.com/auth/userinfo.email\"\n          ]\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/instances/notebooks2instance-provisioning-stuck\",\n      \"scheduling\": {\n        \"onHostMaintenance\": \"MIGRATE\",\n        \"automaticRestart\": true,\n        \"preemptible\": false,\n        \"provisioningModel\": \"STANDARD\"\n      },\n      \"cpuPlatform\": \"Intel Broadwell\",\n      \"labels\": {\n        \"consumer-project-id\": \"gcpdiag-notebooks2-aaaa\",\n        \"consumer-project-number\": \"12340012\",\n        \"notebooks-product\": \"workbench-instances\",\n        \"resource-name\": \"notebooks2instance-provisioning-stuck\"\n      },\n      \"labelFingerprint\": \"8SWlKftMsi8=\",\n      \"startRestricted\": false,\n      \"deletionProtection\": false,\n      \"reservationAffinity\": {\n        \"consumeReservationType\": \"NO_RESERVATION\"\n      },\n      \"shieldedInstanceConfig\": {\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true,\n        \"enableIntegrityMonitoring\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"fingerprint\": \"G6V-_E5vlsA=\",\n      \"lastStartTimestamp\": \"2024-06-24T17:45:59.901-07:00\",\n      \"satisfiesPzi\": true\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/instances\"\n}\n"
  },
  {
    "path": "test-data/notebooks2/json-dumps/compute-serial-port-output-notebooks2instance-ok.json",
    "content": "{\n  \"kind\": \"compute#serialPortOutput\",\n  \"contents\": \"\\u001b[2J\\u001b[01;01H\\u001b[=3h\\u001b[2J\\u001b[01;01H\\u001b[2J\\u001b[01;01H\\u001b[=3h\\u001b[2J\\u001b[01;01HCSM BBS Table full.\\r\\nBdsDxe: loading Boot0001 \\\"UEFI Google PersistentDisk \\\" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\\r\\nBdsDxe: starting Boot0001 \\\"UEFI Google PersistentDisk \\\" from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\\r\\n\\r\\nUEFI: Attempting to start image.\\r\\nDescription: UEFI Google PersistentDisk \\r\\nFilePath: PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)\\r\\nOptionNumber: 1.\\r\\n\\r\\n\\u001b[0m\\u001b[30m\\u001b[47mWelcome to GRUB!\\n\\r\\n\\r\\u001b[0m\\u001b[37m\\u001b[40m\\u001b[0m\\u001b[30m\\u001b[40m\\u001b[2J\\u001b[01;01H\\u001b[0m\\u001b[37m\\u001b[40m\\u001b[H\\u001b[J\\u001b[1;1H\\u001b[H\\u001b[J\\u001b[1;1H\\u001b[0m\\u001b[30m\\u001b[40m\\u001b[2J\\u001b[01;01H\\u001b[0m\\u001b[37m\\u001b[40m    Booting `Debian GNU/Linux'Booting `Debian GNU/Linux'\\n\\r\\n\\r\\n\\r\\n\\rLoading Linux 5.10.0-30-cloud-amd64 ...Loading Linux 5.10.0-30-cloud-amd64 ...\\n\\r\\n\\rLoading initial ramdisk ...Loading initial ramdisk ...\\n\\r\\n\\rerror: no suitable video mode found.\\n\\rerror: no suitable video mode found.\\n\\rBooting in blind modeBooting in blind mode\\n\\r\\n\\r[    0.000000] Linux version 5.10.0-30-cloud-amd64 (debian-kernel@lists.debian.org) (gcc-10 (Debian 10.2.1-6) 10.2.1 20210110, GNU ld (GNU Binutils for Debian) 2.35.2) #1 SMP Debian 5.10.218-1 (2024-06-01)\\r\\n[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-5.10.0-30-cloud-amd64 root=UUID=7be27af0-f080-46f6-bdf8-bc495c775f18 ro console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0 intel_iommu=off\\r\\n[    0.000000] BIOS-provided physical RAM map:\\r\\n[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x0000000000000fff] reserved\\r\\n[    0.000000] BIOS-e820: [mem 0x0000000000001000-0x0000000000054fff] usable\\r\\n[    0.000000] BIOS-e820: [mem 0x0000000000055000-0x000000000005ffff] reserved\\r\\n[    0.000000] BIOS-e820: [mem 0x0000000000060000-0x0000000000097fff] usable\\r\\n[    0.000000] BIOS-e820: [mem 0x0000000000098000-0x000000000009ffff] reserved\\r\\n[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x00000000bf8ecfff] usable\\r\\n[    0.000000] BIOS-e820: [mem 0x00000000bf8ed000-0x00000000bf9ecfff] reserved\\r\\n[    0.000000] BIOS-e820: [mem 0x00000000bf9ed000-0x00000000bfaecfff] type 20\\r\\n[    0.000000] BIOS-e820: [mem 0x00000000bfaed000-0x00000000bfb6cfff] reserved\\r\\n[    0.000000] BIOS-e820: [mem 0x00000000bfb6d000-0x00000000bfb7efff] ACPI data\\r\\n[    0.000000] BIOS-e820: [mem 0x00000000bfb7f000-0x00000000bfbfefff] ACPI NVS\\r\\n[    0.000000] BIOS-e820: [mem 0x00000000bfbff000-0x00000000bffdffff] usable\\r\\n[    0.000000] BIOS-e820: [mem 0x00000000bffe0000-0x00000000bfffffff] reserved\\r\\n[    0.000000] BIOS-e820: [mem 0x0000000100000000-0x000000043fffffff] usable\\r\\n[    0.000000] printk: bootconsole [earlyser0] enabled\\r\\n[    0.000000] NX (Execute Disable) protection: active\\r\\n[    0.000000] efi: EFI v2.70 by EDK II\\r\\n[    0.000000] efi: TPMFinalLog=0xbfbf7000 ACPI=0xbfb7e000 ACPI 2.0=0xbfb7e014 SMBIOS=0xbf9e8000 \\r\\n[    0.000000] secureboot: Secure boot disabled\\r\\n[    0.000000] SMBIOS 2.4 present.\\r\\n[    0.000000] DMI: Google Google Compute Engine/Google Compute Engine, BIOS Google 04/02/2024\\r\\n[    0.000000] Hypervisor detected: KVM\\r\\n[    0.000000] kvm-clock: Using msrs 4b564d01 and 4b564d00\\r\\n[    0.000000] kvm-clock: cpu 0, msr 38ea01001, primary cpu clock\\r\\n[    0.000002] kvm-clock: using sched offset of 7463039982 cycles\\r\\n[    0.001673] clocksource: kvm-clock: mask: 0xffffffffffffffff max_cycles: 0x1cd42e4dffb, max_idle_ns: 881590591483 ns\\r\\n[    0.005594] tsc: Detected 2199.998 MHz processor\\r\\n[    0.006326] last_pfn = 0x440000 max_arch_pfn = 0x400000000\\r\\n[    0.007439] x86/PAT: Configuration [0-7]: WB  WC  UC- UC  WB  WP  UC- WT  \\r\\nMemory KASLR using RDRAND RDTSC...\\r\\n[    0.009149] last_pfn = 0xbffe0 max_arch_pfn = 0x400000000\\r\\n[    0.011172] Using GB pages for direct mapping\\r\\n[    0.012535] RAMDISK: [mem 0x364cb000-0x3725cfff]\\r\\n[    0.014004] ACPI: Early table checksum verification disabled\\r\\n[    0.014907] ACPI: RSDP 0x00000000BFB7E014 000024 (v02 Google)\\r\\n[    0.016122] ACPI: XSDT 0x00000000BFB7D0E8 00005C (v01 Google GOOGFACP 00000001      01000013)\\r\\n[    0.017772] ACPI: FACP 0x00000000BFB78000 0000F4 (v02 Google GOOGFACP 00000001 GOOG 00000001)\\r\\n[    0.019701] ACPI: DSDT 0x00000000BFB79000 001A64 (v01 Google GOOGDSDT 00000001 GOOG 00000001)\\r\\n[    0.021192] ACPI: FACS 0x00000000BFBF2000 000040\\r\\n[    0.022289] ACPI: SSDT 0x00000000BFB7C000 000316 (v02 GOOGLE Tpm2Tabl 00001000 INTL 20211217)\\r\\n[    0.023954] ACPI: TPM2 0x00000000BFB7B000 000034 (v04 GOOGLE          00000001 GOOG 00000001)\\r\\n[    0.025387] ACPI: SRAT 0x00000000BFB77000 0000E8 (v03 Google GOOGSRAT 00000001 GOOG 00000001)\\r\\n[    0.026883] ACPI: APIC 0x00000000BFB76000 000086 (v05 Google GOOGAPIC 00000001 GOOG 00000001)\\r\\n[    0.028680] ACPI: SSDT 0x00000000BFB75000 000A42 (v01 Google GOOGSSDT 00000001 GOOG 00000001)\\r\\n[    0.030398] ACPI: WAET 0x00000000BFB74000 000028 (v01 Google GOOGWAET 00000001 GOOG 00000001)\\r\\n[    0.032416] ACPI: Reserving FACP table memory at [mem 0xbfb78000-0xbfb780f3]\\r\\n[    0.033817] ACPI: Reserving DSDT table memory at [mem 0xbfb79000-0xbfb7aa63]\\r\\n[    0.035919] ACPI: Reserving FACS table memory at [mem 0xbfbf2000-0xbfbf203f]\\r\\n[    0.037638] ACPI: Reserving SSDT table memory at [mem 0xbfb7c000-0xbfb7c315]\\r\\n[    0.039343] ACPI: Reserving TPM2 table memory at [mem 0xbfb7b000-0xbfb7b033]\\r\\n[    0.041316] ACPI: Reserving SRAT table memory at [mem 0xbfb77000-0xbfb770e7]\\r\\n[    0.043421] ACPI: Reserving APIC table memory at [mem 0xbfb76000-0xbfb76085]\\r\\n[    0.044623] ACPI: Reserving SSDT table memory at [mem 0xbfb75000-0xbfb75a41]\\r\\n[    0.045988] ACPI: Reserving WAET table memory at [mem 0xbfb74000-0xbfb74027]\\r\\n[    0.047863] SRAT: PXM 0 -\\u003e APIC 0x00 -\\u003e Node 0\\r\\n[    0.049035] SRAT: PXM 0 -\\u003e APIC 0x01 -\\u003e Node 0\\r\\n[    0.050217] SRAT: PXM 0 -\\u003e APIC 0x02 -\\u003e Node 0\\r\\n[    0.051248] SRAT: PXM 0 -\\u003e APIC 0x03 -\\u003e Node 0\\r\\n[    0.052158] ACPI: SRAT: Node 0 PXM 0 [mem 0x00000000-0x0009ffff]\\r\\n[    0.053334] ACPI: SRAT: Node 0 PXM 0 [mem 0x00100000-0xbfffffff]\\r\\n[    0.054864] ACPI: SRAT: Node 0 PXM 0 [mem 0x100000000-0x43fffffff]\\r\\n[    0.056897] NUMA: Node 0 [mem 0x00000000-0x0009ffff] + [mem 0x00100000-0xbfffffff] -\\u003e [mem 0x00000000-0xbfffffff]\\r\\n[    0.059708] NUMA: Node 0 [mem 0x00000000-0xbfffffff] + [mem 0x100000000-0x43fffffff] -\\u003e [mem 0x00000000-0x43fffffff]\\r\\n[    0.061978] NODE_DATA(0) allocated [mem 0x43ffd6000-0x43fffffff]\\r\\n[    0.063860] Zone ranges:\\r\\n[    0.064328]   DMA      [mem 0x0000000000001000-0x0000000000ffffff]\\r\\n[    0.065345]   DMA32    [mem 0x0000000001000000-0x00000000ffffffff]\\r\\n[    0.066514]   Normal   [mem 0x0000000100000000-0x000000043fffffff]\\r\\n[    0.067698]   Device   empty\\r\\n[    0.068721] Movable zone start for each node\\r\\n[    0.069658] Early memory node ranges\\r\\n[    0.070503]   node   0: [mem 0x0000000000001000-0x0000000000054fff]\\r\\n[    0.072076]   node   0: [mem 0x0000000000060000-0x0000000000097fff]\\r\\n[    0.073268]   node   0: [mem 0x0000000000100000-0x00000000bf8ecfff]\\r\\n[    0.074685]   node   0: [mem 0x00000000bfbff000-0x00000000bffdffff]\\r\\n[    0.075904]   node   0: [mem 0x0000000100000000-0x000000043fffffff]\\r\\n[    0.077648] Initmem setup node 0 [mem 0x0000000000001000-0x000000043fffffff]\\r\\n[    0.079665] On node 0, zone DMA: 1 pages in unavailable ranges\\r\\n[    0.079668] On node 0, zone DMA: 11 pages in unavailable ranges\\r\\n[    0.081076] On node 0, zone DMA: 104 pages in unavailable ranges\\r\\n[    0.099180] On node 0, zone DMA32: 786 pages in unavailable ranges\\r\\n[    0.101908] On node 0, zone Normal: 32 pages in unavailable ranges\\r\\n[    0.104845] ACPI: PM-Timer IO Port: 0xb008\\r\\n[    0.107779] ACPI: LAPIC_NMI (acpi_id[0xff] dfl dfl lint[0x1])\\r\\n[    0.108962] IOAPIC[0]: apic_id 0, version 17, address 0xfec00000, GSI 0-23\\r\\n[    0.110346] ACPI: INT_SRC_OVR (bus 0 bus_irq 5 global_irq 5 high level)\\r\\n[    0.111604] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)\\r\\n[    0.113634] ACPI: INT_SRC_OVR (bus 0 bus_irq 10 global_irq 10 high level)\\r\\n[    0.115103] ACPI: INT_SRC_OVR (bus 0 bus_irq 11 global_irq 11 high level)\\r\\n[    0.117025] Using ACPI (MADT) for SMP configuration information\\r\\n[    0.118848] smpboot: Allowing 4 CPUs, 0 hotplug CPUs\\r\\n[    0.120326] PM: hibernation: Registered nosave memory: [mem 0x00000000-0x00000fff]\\r\\n[    0.122412] PM: hibernation: Registered nosave memory: [mem 0x00055000-0x0005ffff]\\r\\n[    0.124460] PM: hibernation: Registered nosave memory: [mem 0x00098000-0x0009ffff]\\r\\n[    0.126429] PM: hibernation: Registered nosave memory: [mem 0x000a0000-0x000fffff]\\r\\n[    0.128841] PM: hibernation: Registered nosave memory: [mem 0xbf8ed000-0xbf9ecfff]\\r\\n[    0.131345] PM: hibernation: Registered nosave memory: [mem 0xbf9ed000-0xbfaecfff]\\r\\n[    0.133531] PM: hibernation: Registered nosave memory: [mem 0xbfaed000-0xbfb6cfff]\\r\\n[    0.135186] PM: hibernation: Registered nosave memory: [mem 0xbfb6d000-0xbfb7efff]\\r\\n[    0.136985] PM: hibernation: Registered nosave memory: [mem 0xbfb7f000-0xbfbfefff]\\r\\n[    0.138373] PM: hibernation: Registered nosave memory: [mem 0xbffe0000-0xbfffffff]\\r\\n[    0.139896] PM: hibernation: Registered nosave memory: [mem 0xc0000000-0xffffffff]\\r\\n[    0.141111] [mem 0xc0000000-0xffffffff] available for PCI devices\\r\\n[    0.142477] Booting paravirtualized kernel on KVM\\r\\n[    0.144174] clocksource: refined-jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645519600211568 ns\\r\\n[    0.151253] setup_percpu: NR_CPUS:8192 nr_cpumask_bits:4 nr_cpu_ids:4 nr_node_ids:1\\r\\n[    0.153941] percpu: Embedded 63 pages/cpu s221184 r8192 d28672 u524288\\r\\n[    0.155778] kvm-guest: stealtime: cpu 0, msr 42fc35080\\r\\n[    0.156851] kvm-guest: PV spinlocks enabled\\r\\n[    0.157938] PV qspinlock hash table entries: 256 (order: 0, 4096 bytes, linear)\\r\\n[    0.159733] Built 1 zonelists, mobility grouping on.  Total pages: 4125749\\r\\n[    0.161944] Policy zone: Normal\\r\\n[    0.162538] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-5.10.0-30-cloud-amd64 root=UUID=7be27af0-f080-46f6-bdf8-bc495c775f18 ro console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0 intel_iommu=off\\r\\n[    0.167996] DMAR: IOMMU disabled\\r\\n[    0.173341] Dentry cache hash table entries: 2097152 (order: 12, 16777216 bytes, linear)\\r\\n[    0.178350] Inode-cache hash table entries: 1048576 (order: 11, 8388608 bytes, linear)\\r\\n[    0.181137] mem auto-init: stack:off, heap alloc:on, heap free:off\\r\\n[    0.210850] Memory: 3138208K/16773480K available (12296K kernel code, 2552K rwdata, 6972K rodata, 2472K init, 3712K bss, 457808K reserved, 0K cma-reserved)\\r\\n[    0.214560] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=4, Nodes=1\\r\\n[    0.215973] Kernel/User page tables isolation: enabled\\r\\nPoking KASLR using RDRAND RDTSC...\\r\\n[    0.218668] ftrace: allocating 33961 entries in 133 pages\\r\\n[    0.238133] ftrace: allocated 133 pages with 3 groups\\r\\n[    0.240292] rcu: Hierarchical RCU implementation.\\r\\n[    0.241623] rcu: \\tRCU restricting CPUs from NR_CPUS=8192 to nr_cpu_ids=4.\\r\\n[    0.244277] \\tRude variant of Tasks RCU enabled.\\r\\n[    0.245135] \\tTracing variant of Tasks RCU enabled.\\r\\n[    0.246428] rcu: RCU calculated value of scheduler-enlistment delay is 25 jiffies.\\r\\n[    0.249232] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=4\\r\\n[    0.255155] NR_IRQS: 524544, nr_irqs: 456, preallocated irqs: 16\\r\\n[    0.257599] random: crng init done\\r\\n[    0.259117] Console: colour dummy device 80x25\\r\\n[    0.260319] printk: console [tty0] enabled\\r\\n[    0.261841] printk: console [ttyS0] enabled\\r\\n[    0.261841] printk: console [ttyS0] enabled\\r\\n[    0.264059] printk: bootconsole [earlyser0] disabled\\r\\n[    0.264059] printk: bootconsole [earlyser0] disabled\\r\\n[    0.266540] ACPI: Core revision 20200925\\r\\n[    0.268016] APIC: Switch to symmetric I/O mode setup\\r\\n[    0.270442] x2apic enabled\\r\\n[    0.275132] Switched APIC routing to physical x2apic.\\r\\n[    0.282672] ..TIMER: vector=0x30 apic1=0 pin1=0 apic2=-1 pin2=-1\\r\\n[    0.285029] clocksource: tsc-early: mask: 0xffffffffffffffff max_cycles: 0x1fb63109b96, max_idle_ns: 440795265316 ns\\r\\n[    0.287218] Calibrating delay loop (skipped) preset value.. 4399.99 BogoMIPS (lpj=8799992)\\r\\n[    0.291296] Last level iTLB entries: 4KB 64, 2MB 8, 4MB 8\\r\\n[    0.293152] Last level dTLB entries: 4KB 64, 2MB 0, 4MB 0, 1GB 4\\r\\n[    0.295224] Spectre V1 : Mitigation: usercopy/swapgs barriers and __user pointer sanitization\\r\\n[    0.297075] Spectre V2 : Mitigation: IBRS\\r\\n[    0.297925] Spectre V2 : Spectre v2 / SpectreRSB mitigation: Filling RSB on context switch\\r\\n[    0.299220] Spectre V2 : Spectre v2 / SpectreRSB : Filling RSB on VMEXIT\\r\\n[    0.303219] RETBleed: Mitigation: IBRS\\r\\n[    0.304436] Spectre V2 : mitigation: Enabling conditional Indirect Branch Prediction Barrier\\r\\n[    0.307218] Spectre V2 : User space: Mitigation: STIBP via seccomp and prctl\\r\\n[    0.309977] Speculative Store Bypass: Mitigation: Speculative Store Bypass disabled via prctl and seccomp\\r\\n[    0.311230] MDS: Mitigation: Clear CPU buffers\\r\\n[    0.312903] TAA: Mitigation: Clear CPU buffers\\r\\n[    0.315216] MMIO Stale Data: Vulnerable: Clear CPU buffers attempted, no microcode\\r\\n[    0.317555] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'\\r\\n[    0.319220] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'\\r\\n[    0.321368] x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers'\\r\\n[    0.323221] x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]:  256\\r\\n[    0.325043] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.\\r\\n[    0.347243] Freeing SMP alternatives memory: 32K\\r\\n[    0.350799] pid_max: default: 32768 minimum: 301\\r\\n[    0.359126] LSM: Security Framework initializing\\r\\n[    0.359227] Yama: disabled by default; enable with sysctl kernel.yama.*\\r\\n[    0.361438] AppArmor: AppArmor initialized\\r\\n[    0.363217] TOMOYO Linux initialized\\r\\n[    0.364810] Mount-cache hash table entries: 32768 (order: 6, 262144 bytes, linear)\\r\\n[    0.367262] Mountpoint-cache hash table entries: 32768 (order: 6, 262144 bytes, linear)\\r\\n[    0.479005] smpboot: CPU0: Intel(R) Xeon(R) CPU @ 2.20GHz (family: 0x6, model: 0x4f, stepping: 0x0)\\r\\n[    0.479410] Performance Events: unsupported p6 CPU model 79 no PMU driver, software events only.\\r\\n[    0.482592] rcu: Hierarchical SRCU implementation.\\r\\n[    0.483596] NMI watchdog: Perf NMI watchdog permanently disabled\\r\\n[    0.485563] smp: Bringing up secondary CPUs ...\\r\\n[    0.487355] x86: Booting SMP configuration:\\r\\n[    0.488118] .... node  #0, CPUs:      #1\\r\\n[    0.021623] kvm-clock: cpu 1, msr 38ea01041, secondary cpu clock\\r\\n[    0.489059] kvm-guest: stealtime: cpu 1, msr 42fcb5080\\r\\n[    0.491369]  #2\\r\\n[    0.021623] kvm-clock: cpu 2, msr 38ea01081, secondary cpu clock\\r\\n[    0.492175] kvm-guest: stealtime: cpu 2, msr 42fd35080\\r\\n[    0.495261] MDS CPU bug present and SMT on, data leak possible. See https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/mds.html for more details.\\r\\n[    0.499221] TAA CPU bug present and SMT on, data leak possible. See https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/tsx_async_abort.html for more details.\\r\\n[    0.503216] MMIO Stale Data CPU bug present and SMT on, data leak possible. See https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/processor_mmio_stale_data.html for more details.\\r\\n[    0.507416]  #3\\r\\n[    0.021623] kvm-clock: cpu 3, msr 38ea010c1, secondary cpu clock\\r\\n[    0.507978] kvm-guest: stealtime: cpu 3, msr 42fdb5080\\r\\n[    0.509000] smp: Brought up 1 node, 4 CPUs\\r\\n[    0.509000] smpboot: Max logical packages: 1\\r\\n[    0.511217] smpboot: Total of 4 processors activated (17599.98 BogoMIPS)\\r\\n[    0.553113] node 0 deferred pages initialised in 40ms\\r\\n[    0.553962] devtmpfs: initialized\\r\\n[    0.553962] x86/mm: Memory block size: 128MB\\r\\n[    0.555266] PM: Registering ACPI NVS region [mem 0xbfb7f000-0xbfbfefff] (524288 bytes)\\r\\n[    0.556834] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns\\r\\n[    0.558720] futex hash table entries: 1024 (order: 4, 65536 bytes, linear)\\r\\n[    0.559626] NET: Registered protocol family 16\\r\\n[    0.561418] DMA: preallocated 2048 KiB GFP_KERNEL pool for atomic allocations\\r\\n[    0.563847] DMA: preallocated 2048 KiB GFP_KERNEL|GFP_DMA pool for atomic allocations\\r\\n[    0.566314] DMA: preallocated 2048 KiB GFP_KERNEL|GFP_DMA32 pool for atomic allocations\\r\\n[    0.567234] audit: initializing netlink subsys (disabled)\\r\\n[    0.571259] audit: type=2000 audit(1719290134.916:1): state=initialized audit_enabled=0 res=1\\r\\n[    0.571393] thermal_sys: Registered thermal governor 'fair_share'\\r\\n[    0.575217] thermal_sys: Registered thermal governor 'bang_bang'\\r\\n[    0.576259] thermal_sys: Registered thermal governor 'step_wise'\\r\\n[    0.577388] thermal_sys: Registered thermal governor 'user_space'\\r\\n[    0.579218] thermal_sys: Registered thermal governor 'power_allocator'\\r\\n[    0.580672] cpuidle: using governor ladder\\r\\n[    0.583244] cpuidle: using governor menu\\r\\n[    0.584036] ACPI: bus type PCI registered\\r\\n[    0.584866] acpiphp: ACPI Hot Plug PCI Controller Driver version: 0.5\\r\\n[    0.584866] PCI: Using configuration type 1 for base access\\r\\n[    0.585543] Kprobes globally optimized\\r\\n[    0.587265] HugeTLB registered 1.00 GiB page size, pre-allocated 0 pages\\r\\n[    0.588335] HugeTLB registered 2.00 MiB page size, pre-allocated 0 pages\\r\\n[    0.727390] ACPI: Added _OSI(Module Device)\\r\\n[    0.728198] ACPI: Added _OSI(Processor Device)\\r\\n[    0.729083] ACPI: Added _OSI(3.0 _SCP Extensions)\\r\\n[    0.729083] ACPI: Added _OSI(Processor Aggregator Device)\\r\\n[    0.729083] ACPI: Added _OSI(Linux-Dell-Video)\\r\\n[    0.730170] ACPI: Added _OSI(Linux-Lenovo-NV-HDMI-Audio)\\r\\n[    0.731219] ACPI: Added _OSI(Linux-HPI-Hybrid-Graphics)\\r\\n[    0.733975] ACPI: 3 ACPI AML tables successfully acquired and loaded\\r\\n[    0.736800] ACPI: Interpreter enabled\\r\\n[    0.737474] ACPI: (supports S0 S3 S4 S5)\\r\\n[    0.739217] ACPI: Using IOAPIC for interrupt routing\\r\\n[    0.740043] PCI: Using host bridge windows from ACPI; if necessary, use \\\"pci=nocrs\\\" and report a bug\\r\\n[    0.742302] ACPI: Enabled 16 GPEs in block 00 to 0F\\r\\n[    0.746116] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff])\\r\\n[    0.751226] acpi PNP0A03:00: _OSC: OS supports [ASPM ClockPM Segments MSI HPX-Type3]\\r\\n[    0.753310] acpi PNP0A03:00: fail to add MMCONFIG information, can't access extended PCI configuration space under this bridge.\\r\\n[    0.756127] PCI host bridge to bus 0000:00\\r\\n[    0.757133] pci_bus 0000:00: root bus resource [io  0x0000-0x0cf7 window]\\r\\n[    0.757133] pci_bus 0000:00: root bus resource [io  0x0d00-0xffff window]\\r\\n[    0.757133] pci_bus 0000:00: root bus resource [mem 0x000a0000-0x000bffff window]\\r\\n[    0.759221] pci_bus 0000:00: root bus resource [mem 0xc0000000-0xfebfefff window]\\r\\n[    0.760659] pci_bus 0000:00: root bus resource [bus 00-ff]\\r\\n[    0.761732] pci 0000:00:00.0: [8086:1237] type 00 class 0x060000\\r\\n[    0.767780] pci 0000:00:01.0: [8086:7110] type 00 class 0x060100\\r\\n[    0.796962] pci 0000:00:01.3: [8086:7113] type 00 class 0x068000\\r\\n[    0.823289] pci 0000:00:01.3: quirk: [io  0xb000-0xb03f] claimed by PIIX4 ACPI\\r\\n[    0.825002] pci 0000:00:03.0: [1af4:1004] type 00 class 0x000000\\r\\n[    0.836887] pci 0000:00:03.0: reg 0x10: [io  0xc040-0xc07f]\\r\\n[    0.845173] pci 0000:00:03.0: reg 0x14: [mem 0xc0002000-0xc000207f]\\r\\n[    0.867332] pci 0000:00:04.0: [1af4:1000] type 00 class 0x020000\\r\\n[    0.878425] pci 0000:00:04.0: reg 0x10: [io  0xc000-0xc03f]\\r\\n[    0.886600] pci 0000:00:04.0: reg 0x14: [mem 0xc0000000-0xc00000ff]\\r\\n[    0.911609] pci 0000:00:05.0: [1af4:1002] type 00 class 0x00ff00\\r\\n[    0.923222] pci 0000:00:05.0: reg 0x10: [io  0xc0a0-0xc0bf]\\r\\n[    0.931222] pci 0000:00:05.0: reg 0x14: [mem 0xc0001000-0xc000107f]\\r\\n[    0.953332] pci 0000:00:06.0: [1af4:1005] type 00 class 0x00ff00\\r\\n[    0.965013] pci 0000:00:06.0: reg 0x10: [io  0xc080-0xc09f]\\r\\n[    0.973033] pci 0000:00:06.0: reg 0x14: [mem 0xc0003000-0xc000303f]\\r\\n[    1.000262] ACPI: PCI Interrupt Link [LNKA] (IRQs 5 *10 11)\\r\\n[    1.003344] ACPI: PCI Interrupt Link [LNKB] (IRQs 5 *10 11)\\r\\n[    1.007315] ACPI: PCI Interrupt Link [LNKC] (IRQs 5 10 *11)\\r\\n[    1.010788] ACPI: PCI Interrupt Link [LNKD] (IRQs 5 10 *11)\\r\\n[    1.013251] ACPI: PCI Interrupt Link [LNKS] (IRQs *9)\\r\\n[    1.015753] iommu: Default domain type: Translated \\r\\n[    1.019241] vgaarb: loaded\\r\\n[    1.019732] Registered efivars operations\\r\\n[    1.020631] NetLabel: Initializing\\r\\n[    1.021218] NetLabel:  domain hash size = 128\\r\\n[    1.021218] NetLabel:  protocols = UNLABELED CIPSOv4 CALIPSO\\r\\n[    1.021218] NetLabel:  unlabeled traffic allowed by default\\r\\n[    1.021937] PCI: Using ACPI for IRQ routing\\r\\n[    1.023505] clocksource: Switched to clocksource kvm-clock\\r\\n[    1.039443] VFS: Disk quotas dquot_6.6.0\\r\\n[    1.040585] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)\\r\\n[    1.042070] AppArmor: AppArmor Filesystem Enabled\\r\\n[    1.043151] pnp: PnP ACPI init\\r\\n[    1.044281] pnp: PnP ACPI: found 7 devices\\r\\n[    1.052668] clocksource: acpi_pm: mask: 0xffffff max_cycles: 0xffffff, max_idle_ns: 2085701024 ns\\r\\n[    1.054578] NET: Registered protocol family 2\\r\\n[    1.056249] IP idents hash table entries: 262144 (order: 9, 2097152 bytes, linear)\\r\\n[    1.060544] tcp_listen_portaddr_hash hash table entries: 8192 (order: 5, 131072 bytes, linear)\\r\\n[    1.062405] TCP established hash table entries: 131072 (order: 8, 1048576 bytes, linear)\\r\\n[    1.064330] TCP bind hash table entries: 65536 (order: 8, 1048576 bytes, linear)\\r\\n[    1.065530] TCP: Hash tables configured (established 131072 bind 65536)\\r\\n[    1.066674] UDP hash table entries: 8192 (order: 6, 262144 bytes, linear)\\r\\n[    1.068012] UDP-Lite hash table entries: 8192 (order: 6, 262144 bytes, linear)\\r\\n[    1.069158] NET: Registered protocol family 1\\r\\n[    1.069831] NET: Registered protocol family 44\\r\\n[    1.070471] pci_bus 0000:00: resource 4 [io  0x0000-0x0cf7 window]\\r\\n[    1.071628] pci_bus 0000:00: resource 5 [io  0x0d00-0xffff window]\\r\\n[    1.073058] pci_bus 0000:00: resource 6 [mem 0x000a0000-0x000bffff window]\\r\\n[    1.074807] pci_bus 0000:00: resource 7 [mem 0xc0000000-0xfebfefff window]\\r\\n[    1.075887] pci 0000:00:00.0: Limiting direct PCI/PCI transfers\\r\\n[    1.076878] PCI: CLS 0 bytes, default 64\\r\\n[    1.077521] Trying to unpack rootfs image as initramfs...\\r\\n[    1.322546] Freeing initrd memory: 13896K\\r\\n[    1.323520] PCI-DMA: Using software bounce buffering for IO (SWIOTLB)\\r\\n[    1.324842] software IO TLB: mapped [mem 0x00000000b7ff7000-0x00000000bbff7000] (64MB)\\r\\n[    1.326241] clocksource: tsc: mask: 0xffffffffffffffff max_cycles: 0x1fb63109b96, max_idle_ns: 440795265316 ns\\r\\n[    1.328340] clocksource: Switched to clocksource tsc\\r\\n[    1.329861] Initialise system trusted keyrings\\r\\n[    1.330879] Key type blacklist registered\\r\\n[    1.332056] workingset: timestamp_bits=36 max_order=22 bucket_order=0\\r\\n[    1.334878] zbud: loaded\\r\\n[    1.336588] Key type asymmetric registered\\r\\n[    1.337359] Asymmetric key parser 'x509' registered\\r\\n[    1.338488] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 252)\\r\\n[    1.340169] io scheduler mq-deadline registered\\r\\n[    1.342219] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled\\r\\n[    1.343863] 00:03: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A\\r\\n[    1.345864] 00:04: ttyS1 at I/O 0x2f8 (irq = 3, base_baud = 115200) is a 16550A\\r\\n[    1.348328] 00:05: ttyS2 at I/O 0x3e8 (irq = 6, base_baud = 115200) is a 16550A\\r\\n[    1.351190] 00:06: ttyS3 at I/O 0x2e8 (irq = 7, base_baud = 115200) is a 16550A\\r\\n[    1.354518] i8042: PNP: PS/2 Controller [PNP0303:KBD,PNP0f13:MOU] at 0x60,0x64 irq 1,12\\r\\n[    1.356615] i8042: Warning: Keylock active\\r\\n[    1.359618] serio: i8042 KBD port at 0x60,0x64 irq 1\\r\\n[    1.361288] serio: i8042 AUX port at 0x60,0x64 irq 12\\r\\n[    1.362792] rtc_cmos 00:00: RTC can wake from S4\\r\\n[    1.365130] rtc_cmos 00:00: registered as rtc0\\r\\n[    1.366631] rtc_cmos 00:00: setting system clock to 2024-06-25T04:35:35 UTC (1719290135)\\r\\n[    1.368754] rtc_cmos 00:00: alarms up to one day, 114 bytes nvram\\r\\n[    1.370603] intel_pstate: CPU model not supported\\r\\n[    1.371920] NET: Registered protocol family 10\\r\\n[    1.382572] Segment Routing with IPv6\\r\\n[    1.383523] mip6: Mobile IPv6\\r\\n[    1.384464] NET: Registered protocol family 17\\r\\n[    1.385881] IPI shorthand broadcast: enabled\\r\\n[    1.387291] sched_clock: Marking stable (1368142121, 17623184)-\\u003e(1394057430, -8292125)\\r\\n[    1.390023] registered taskstats version 1\\r\\n[    1.391047] Loading compiled-in X.509 certificates\\r\\n[    1.427394] Loaded X.509 cert 'Debian Secure Boot CA: 6ccece7e4c6c0d1f6149f3dd27dfcc5cbb419ea1'\\r\\n[    1.430224] Loaded X.509 cert 'Debian Secure Boot Signer 2022 - linux: 14011249c2675ea8e5148542202005810584b25f'\\r\\n[    1.432915] Key type .fscrypt registered\\r\\n[    1.434240] Key type fscrypt-provisioning registered\\r\\n[    1.436017] AppArmor: AppArmor sha1 policy hashing enabled\\r\\n[    1.437465] clk: Disabling unused clocks\\r\\n[    1.440843] Freeing unused decrypted memory: 2036K\\r\\n[    1.443201] Freeing unused kernel image (initmem) memory: 2472K\\r\\n[    1.461743] Write protecting the kernel read-only data: 22528k\\r\\n[    1.464647] Freeing unused kernel image (text/rodata gap) memory: 2036K\\r\\n[    1.466757] Freeing unused kernel image (rodata/data gap) memory: 1220K\\r\\n[    1.470703] x86/mm: Checked W+X mappings: passed, no W+X pages found.\\r\\n[    1.472647] x86/mm: Checking user space page tables\\r\\n[    1.474286] x86/mm: Checked W+X mappings: passed, no W+X pages found.\\r\\n[    1.475573] Run /init as init process\\r\\nLoading, please wait...\\r\\nStarting version 247.3-7+deb11u4\\r\\n[    1.549835] PCI Interrupt Link [LNKC] enabled at IRQ 11\\r\\n[    1.552227] virtio-pci 0000:00:03.0: virtio_pci: leaving for legacy driver\\r\\n[    1.566062] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input0\\r\\n[    1.572626] PCI Interrupt Link [LNKD] enabled at IRQ 10\\r\\n[    1.575326] virtio-pci 0000:00:04.0: virtio_pci: leaving for legacy driver\\r\\n[    1.584901] PCI Interrupt Link [LNKA] enabled at IRQ 10\\r\\n[    1.586664] virtio-pci 0000:00:05.0: virtio_pci: leaving for legacy driver\\r\\n[    1.595486] PCI Interrupt Link [LNKB] enabled at IRQ 11\\r\\n[    1.596786] virtio-pci 0000:00:06.0: virtio_pci: leaving for legacy driver\\r\\n[    1.716914] SCSI subsystem initialized\\r\\n[    1.719083] virtio_net virtio1 ens4: renamed from eth0\\r\\n[    1.823979] scsi host0: Virtio SCSI HBA\\r\\n[    1.842774] scsi 0:0:1:0: Direct-Access     Google   PersistentDisk   1    PQ: 0 ANSI: 6\\r\\n[    1.844639] scsi 0:0:2:0: Direct-Access     Google   PersistentDisk   1    PQ: 0 ANSI: 6\\r\\n[    1.889836] sd 0:0:2:0: [sda] 209715200 512-byte logical blocks: (107 GB/100 GiB)\\r\\n[    1.891367] sd 0:0:2:0: [sda] 4096-byte physical blocks\\r\\n[    1.892344] sd 0:0:2:0: [sda] Write Protect is off\\r\\n[    1.892372] sd 0:0:1:0: [sdb] 314572800 512-byte logical blocks: (161 GB/150 GiB)\\r\\n[    1.895194] sd 0:0:1:0: [sdb] 4096-byte physical blocks\\r\\n[    1.895287] sd 0:0:2:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA\\r\\n[    1.897592] sd 0:0:1:0: [sdb] Write Protect is off\\r\\n[    1.898753] sd 0:0:1:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA\\r\\n[    1.924184]  sdb: sdb1 sdb14 sdb15\\r\\n[    1.942584] sd 0:0:2:0: [sda] Attached SCSI disk\\r\\n[    1.942585] sd 0:0:1:0: [sdb] Attached SCSI disk\\r\\nBegin: Loading essential drivers ... done.\\r\\nBegin: Running /scripts/init-premount ... done.\\r\\nBegin: Mounting root file system ... Begin: Running /scripts/local-top ... done.\\r\\nBegin: Runnin[    2.037704] gce-disk-expand: Resizing partition on \\r\\ng /scripts/local-premount ... [    2.071148] gce-disk-expand: Disk /dev/sdb1 doesn't need resizing.\\r\\n[    2.071509]  sdb: sdb1 sdb14 sdb15\\r\\ndone.\\r\\nBegin: Will now check root file system ... fsck from util-linux 2.36.1\\r\\n[/sbin/fsck.ext4 (1) -- /dev/sdb1] fsck.ext4 -a -C0 /dev/sdb1 \\r\\n/dev/sdb1: clean, 649872/9822208 files, 10428648/39288576 blocks\\r\\ndone.\\r\\n[    2.179511] EXT4-fs (sdb1): mounted filesystem with ordered data mode. Opts: (null)\\r\\ndone.\\r\\nBegin: Running /scripts/local-bottom ... done.\\r\\nBegin: Running /scripts/init-bottom ... done.\\r\\n[    2.215492] Not activating Mandatory Access Control as /sbin/tomoyo-init does not exist.\\r\\n[    2.446322] systemd[1]: Inserted module 'autofs4'\\r\\n[    2.583342] systemd[1]: systemd 247.3-7+deb11u4 running in system mode. (+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +ZSTD +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=unified)\\r\\n[    2.588751] systemd[1]: Detected virtualization kvm.\\r\\n[    2.589786] systemd[1]: Detected architecture x86-64.\\r\\n\\r\\nWelcome to \\u001b[1mDebian GNU/Linux 11 (bullseye)\\u001b[0m!\\r\\n\\r\\n[    2.612271] systemd[1]: Set hostname to \\u003cdebian\\u003e.\\r\\n[    2.885391] systemd[1]: Queued start job for default target Graphical Interface.\\r\\n[    2.888137] systemd[1]: Created slice system-getty.slice.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Created slice \\u001b[0;1;39msystem-getty.slice\\u001b[0m.\\r\\n[    2.902354] systemd[1]: Created slice system-modprobe.slice.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Created slice \\u001b[0;1;39msystem-modprobe.slice\\u001b[0m.\\r\\n[    2.914377] systemd[1]: Created slice system-serial\\\\x2dgetty.slice.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Created slice \\u001b[0;1;39msystem-serial\\\\x2dgetty.slice\\u001b[0m.\\r\\n[    2.926280] systemd[1]: Created slice system-systemd\\\\x2dgrowfs.slice.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Created slice \\u001b[0;1;39msystem-systemd\\\\x2dgrowfs.slice\\u001b[0m.\\r\\n[    2.938252] systemd[1]: Created slice User and Session Slice.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Created slice \\u001b[0;1;39mUser and Session Slice\\u001b[0m.\\r\\n[    2.953933] systemd[1]: Started Dispatch Password Requests to Console Directory Watch.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mDispatch Password …ts to Console Directory Watch\\u001b[0m.\\r\\n[    2.969967] systemd[1]: Started Forward Password Requests to Wall Directory Watch.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mForward Password R…uests to Wall Directory Watch\\u001b[0m.\\r\\n[    2.986086] systemd[1]: Set up automount Arbitrary Executable File Formats File System Automount Point.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Set up automount \\u001b[0;1;39mArbitrary…s File System Automount Point\\u001b[0m.\\r\\n[    3.001858] systemd[1]: Reached target Local Encrypted Volumes.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mLocal Encrypted Volumes\\u001b[0m.\\r\\n[    3.013844] systemd[1]: Reached target Paths.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mPaths\\u001b[0m.\\r\\n[    3.025819] systemd[1]: Reached target Remote File Systems.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mRemote File Systems\\u001b[0m.\\r\\n[    3.037819] systemd[1]: Reached target Slices.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mSlices\\u001b[0m.\\r\\n[    3.049820] systemd[1]: Reached target Swap.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mSwap\\u001b[0m.\\r\\n[    3.061803] systemd[1]: Reached target System Time Set.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mSystem Time Set\\u001b[0m.\\r\\n[    3.074037] systemd[1]: Listening on Syslog Socket.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Listening on \\u001b[0;1;39mSyslog Socket\\u001b[0m.\\r\\n[    3.086173] systemd[1]: Listening on fsck to fsckd communication Socket.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Listening on \\u001b[0;1;39mfsck to fsckd communication Socket\\u001b[0m.\\r\\n[    3.098022] systemd[1]: Listening on initctl Compatibility Named Pipe.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Listening on \\u001b[0;1;39minitctl Compatibility Named Pipe\\u001b[0m.\\r\\n[    3.110090] systemd[1]: Listening on Journal Audit Socket.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Listening on \\u001b[0;1;39mJournal Audit Socket\\u001b[0m.\\r\\n[    3.121990] systemd[1]: Listening on Journal Socket (/dev/log).\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Listening on \\u001b[0;1;39mJournal Socket (/dev/log)\\u001b[0m.\\r\\n[    3.134066] systemd[1]: Listening on Journal Socket.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Listening on \\u001b[0;1;39mJournal Socket\\u001b[0m.\\r\\n[    3.146912] systemd[1]: Listening on udev Control Socket.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Listening on \\u001b[0;1;39mudev Control Socket\\u001b[0m.\\r\\n[    3.157985] systemd[1]: Listening on udev Kernel Socket.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Listening on \\u001b[0;1;39mudev Kernel Socket\\u001b[0m.\\r\\n[    3.171065] systemd[1]: Mounting Huge Pages File System...\\r\\n         Mounting \\u001b[0;1;39mHuge Pages File System\\u001b[0m...\\r\\n[    3.182978] systemd[1]: Mounting POSIX Message Queue File System...\\r\\n         Mounting \\u001b[0;1;39mPOSIX Message Queue File System\\u001b[0m...\\r\\n[    3.187220] systemd[1]: Mounting Kernel Debug File System...\\r\\n         Mounting \\u001b[0;1;39mKernel Debug File System\\u001b[0m...\\r\\n[    3.199219] systemd[1]: Mounting Kernel Trace File System...\\r\\n         Mounting \\u001b[0;1;39mKernel Trace File System\\u001b[0m...\\r\\n[    3.215203] systemd[1]: Starting Create list of static device nodes for the current kernel...\\r\\n         Starting \\u001b[0;1;39mCreate list of st…odes for the current kernel\\u001b[0m...\\r\\n[    3.230955] systemd[1]: Starting Load Kernel Module configfs...\\r\\n         Starting \\u001b[0;1;39mLoad Kernel Module configfs\\u001b[0m...\\r\\n[    3.242950] systemd[1]: Starting Load Kernel Module drm...\\r\\n         Starting \\u001b[0;1;39mLoad Kernel Module drm\\u001b[0m...\\r\\n[    3.258976] systemd[1]: Starting Load Kernel Module fuse...\\r\\n         Starting \\u001b[0;1;39mLoad Kernel Module fuse\\u001b[0m...\\r\\n[    3.275539] systemd[1]: Condition check resulted in Set Up Additional Binary Formats being skipped.\\r\\n[    3.278316] systemd[1]: Condition check resulted in File System Check on Root Device being skipped.\\r\\n[    3.278371] fuse: init (API version 7.32)\\r\\n[    3.283006] systemd[1]: Starting Journal Service...\\r\\n         Starting \\u001b[0;1;39mJournal Service\\u001b[0m...\\r\\n[    3.301167] systemd[1]: Starting Load Kernel Modules...\\r\\n         Starting \\u001b[0;1;39mLoad Kernel Modules\\u001b[0m...\\r\\n[    3.315132] systemd[1]: Starting Remount Root and Kernel File Systems...\\r\\n         Starting \\u001b[0;1;39mRemount Root and Kernel File Systems\\u001b[0m...\\r\\n[    3.331170] systemd[1]: Starting Coldplug All udev Devices...\\r\\n         Startin[    3.333506] EXT4-fs (sdb1): re-mounted. Opts: discard,errors=remount-ro\\r\\ng \\u001b[0;1;39mColdplug All udev Devices\\u001b[0m...\\r\\n[    3.348073] systemd[1]: Started Journal Service.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mJournal Service\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Mounted \\u001b[0;1;39mHuge Pages File System\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Mounted \\u001b[0;1;39mPOSIX Message Queue File System\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Mounted \\u001b[0;1;39mKernel Debug File System\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Mounted \\u001b[0;1;39mKernel Trace File System\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mCreate list of st… nodes for the current kernel\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mLoad Kernel Module configfs\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mLoad Kernel Module drm\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mLoad Kernel Module fuse\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mLoad Kernel Modules\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mRemount Root and Kernel File Systems\\u001b[0m.\\r\\n         Mounting \\u001b[0;1;39mFUSE Control File System\\u001b[0m...\\r\\n         Mounting \\u001b[0;1;39mKernel Configuration File System\\u001b[0m...\\r\\n         Starting \\u001b[0;1;39mGrow File System on /\\u001b[0m...\\r\\n[    3.522203] EXT4-fs (sdb1): resizing filesystem from 39288576 to 39288576 blocks\\r\\n         Starting \\u001b[0;1;39mFlush Journal to Persistent Storage\\u001b[0m...\\r\\n[    3.536646] systemd-journald[221]: Received client request to flush runtime journal.\\r\\n         Starting \\u001b[0;1;39mLoad/Save Random Seed\\u001b[0m...\\r\\n         Starting \\u001b[0;1;39mApply Kernel Variables\\u001b[0m...\\r\\n         Starting \\u001b[0;1;39mCreate System Users\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mColdplug All udev Devices\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Mounted \\u001b[0;1;39mFUSE Control File System\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Mounted \\u001b[0;1;39mKernel Configuration File System\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mGrow File System on /\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mLoad/Save Random Seed\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mApply Kernel Variables\\u001b[0m.\\r\\n         Starting \\u001b[0;1;39mHelper to synchronize boot up for ifupdown\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mHelper to synchronize boot up for ifupdown\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mFlush Journal to Persistent Storage\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mCreate System Users\\u001b[0m.\\r\\n         Starting \\u001b[0;1;39mCreate Static Device Nodes in /dev\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mCreate Static Device Nodes in /dev\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mLocal File Systems (Pre)\\u001b[0m.\\r\\n         Starting \\u001b[0;1;39mRule-based Manage…for Device Events and Files\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mRule-based Manager for Device Events and Files\\u001b[0m.\\r\\n[    3.937753] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input2\\r\\n[    3.952887] tpm_tis MSFT0101:00: 2.0 TPM (device-id 0x9009, rev-id 0)\\r\\n[    3.968354] ACPI: Power Button [PWRF]\\r\\n[    3.982980] input: Sleep Button as /devices/LNXSYSTM:00/LNXSLPBN:00/input/input3\\r\\n[    4.018532] pstore: Using crash dump compression: deflate\\r\\n[    4.056674] ACPI: Sleep Button [SLPF]\\r\\n[    4.059108] pstore: Registered efi as persistent store backend\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Found device \\u001b[0;1;39m/dev/ttyS0\\u001b[0m.\\r\\n[    4.102563] sd 0:0:1:0: Attached scsi generic sg0 type 0\\r\\n[    4.110503] sd 0:0:2:0: Attached scsi generic sg1 type 0\\r\\n[    4.117305] RAPL PMU: API unit is 2^-32 Joules, 0 fixed counters, 10737418240 ms ovfl timer\\r\\n[    4.154487] cryptd: max_cpu_qlen set to 1000\\r\\n[    4.171394] AVX2 version of gcm_enc/dec engaged.\\r\\n[    4.173238] AES CTR mode by8 optimization enabled\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Found device \\u001b[0;1;39mPersistentDisk 15\\u001b[0m.\\r\\n         Mounting \\u001b[0;1;39m/boot/efi\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Mounted \\u001b[0;1;39m/boot/efi\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Found device \\u001b[0;1;39mVirtio network device\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mLocal File Systems\\u001b[0m.\\r\\n         Starting \\u001b[0;1;39mLoad AppArmor profiles\\u001b[0m...\\r\\n         Starting \\u001b[0;1;39mCreate Volatile Files and Directories\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mCreate Volatile Files and Directories\\u001b[0m.\\r\\n         Starting \\u001b[0;1;39mUpdate UTMP about System Boot/Shutdown\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mUpdate UTMP about System Boot/Shutdown\\u001b[0m.\\r\\n[    4.341372] audit: type=1400 audit(1719290138.467:2): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"nvidia_modprobe\\\" pid=350 comm=\\\"apparmor_parser\\\"\\r\\n[    4.346604] audit: type=1400 audit(1719290138.467:3): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"nvidia_modprobe//kmod\\\" pid=350 comm=\\\"apparmor_parser\\\"\\r\\n[    4.351622] audit: type=1400 audit(1719290138.467:4): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"/usr/bin/man\\\" pid=351 comm=\\\"apparmor_parser\\\"\\r\\n[    4.355754] audit: type=1400 audit(1719290138.467:5): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"man_filter\\\" pid=351 comm=\\\"apparmor_parser\\\"\\r\\n[    4.360728] audit: type=1400 audit(1719290138.467:6): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"man_groff\\\" pid=351 comm=\\\"apparmor_parser\\\"\\r\\n[    4.360734] audit: type=1400 audit(1719290138.467:7): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"/usr/sbin/chronyd\\\" pid=352 comm=\\\"apparmor_parser\\\"\\r\\n[    4.360738] audit: type=1400 audit(1719290138.475:8): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"/usr/sbin/haveged\\\" pid=353 comm=\\\"apparmor_parser\\\"\\r\\n[    4.360744] audit: type=1400 audit(1719290138.483:9): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"tcpdump\\\" pid=349 comm=\\\"apparmor_parser\\\"\\r\\n[\\u001b[0;32m  OK  \\u001b[[    4.377409] audit: type=1400 audit(1719290138.483:10): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"lsb_release\\\" pid=354 comm=\\\"apparmor_parser\\\"\\r\\n0m] Finished \\u001b[0;1;39mLoad AppArmor profiles\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mEntropy Daemon based on the HAVEGE algorithm\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mSystem Initialization\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mGCE Workload Certificate refresh timer\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mNSS cache refresh timer\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mRun google-wi-idle-shutdown service every minute\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mDaily Cleanup of Temporary Directories\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Listening on \\u001b[0;1;39mD-Bus System Message Bus Socket\\u001b[0m.\\r\\n         Starting \\u001b[0;1;39mDocker Socket for the API\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Listening on \\u001b[0;1;39mUUID daemon activation socket\\u001b[0m.\\r\\n         Starting \\u001b[0;1;39mResize root filesystem if needed\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mifup for ens4\\u001b[0m.\\r\\n         Starting \\u001b[0;1;39mRaise network interfaces\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Listening on \\u001b[0;1;39mDocker Socket for the API\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mResize root filesystem if needed\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mSockets\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mBasic System\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mRegular background program processing daemon\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mD-Bus System Message Bus\\u001b[0m.\\r\\n         Starting \\u001b[0;1;39mRemove Stale Onli…t4 Metadata Check Snapshots\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mAction on GCE instance property changes\\u001b[0m.\\r\\n         Starting \\u001b[0;1;39mGoogle C2D startup config\\u001b[0m...\\r\\n         Starting \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m...\\r\\n         Starting \\u001b[0;1;39mPolls for whether…and reports Heartbeat event\\u001b[0m...\\r\\n         Starting \\u001b[0;1;39mJupyter Notebook Service\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mVertex Workbench Health Agent\\u001b[0m.\\r\\n         Starting \\u001b[0;1;39mSystem Logging Service\\u001b[0m...\\r\\n         Starting \\u001b[0;1;39mUser Login Management\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mRemove Stale Onli…ext4 Metadata Check Snapshots\\u001b[0m.\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Mounted Huge Pages File System.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.000000] Linux version 5.10.0-30-cloud-amd64 (debian-kernel@lists.debian.org) (gcc-10 (Debian 10.2.1-6) 10.2.1 20210110, GNU ld (GNU Binutils for Debian) 2.35.2) #1 SMP Debian 5.10.218-1 (2024-06-01)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-5.10.0-30-cloud-amd64 root=UUID=7be27af0-f080-46f6-bdf8-bc495c775f18 ro console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0 intel_iommu=off\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.000000] BIOS-provided physical RAM map:\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.000000] BIOS-e820: [mem 0x0000000000000000-0x0000000000000fff] reserved\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.000000] BIOS-e820: [mem 0x0000000000001000-0x0000000000054fff] usable\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.000000] BIOS-e820: [mem 0x0000000000055000-0x000000000005ffff] reserved\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.000000] BIOS-e820: [mem 0x0000000000060000-0x0000000000097fff] usable\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Mounted POSIX Message Queue File System.\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Mounted Kernel Debug File System.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.000000] BIOS-e820: [mem 0x0000000000098000-0x000000000009ffff] reserved\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.000000] BIOS-e820: [mem 0x0000000000100000-0x00000000bf8ecfff] usable\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.000000] BIOS-e820: [mem 0x00000000bf8ed000-0x00000000bf9ecfff] reserved\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.000000] BIOS-e820: [mem 0x00000000bf9ed000-0x00000000bfaecfff] type 20\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.000000] BIOS-e820: [mem 0x00000000bfaed000-0x00000000bfb6cfff] reserved\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Mounted Kernel Trace File System.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.000000] BIOS-e820: [mem 0x00000000bfb6d000-0x00000000bfb7efff] ACPI data\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.000000] BIOS-e820: [mem 0x00000000bfb7f000-0x00000000bfbfefff] ACPI NVS\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.000000] BIOS-e820: [mem 0x00000000bfbff000-0x00000000bffdffff] usable\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Finished Create list of static device nodes for the current kernel.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.000000] BIOS-e820: [mem 0x00000000bffe0000-0x00000000bfffffff] reserved\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.000000] BIOS-e820: [mem 0x0000000100000000-0x000000043fffffff] usable\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.000000] printk: bootconsole [earlyser0] enabled\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.000000] NX (Execute Disable) protection: active\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.000000] efi: EFI v2.70 by EDK II\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: modprobe@configfs.service: Succeeded.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.000000] efi: TPMFinalLog=0xbfbf7000 ACPI=0xbfb7e000 ACPI 2.0=0xbfb7e014 SMBIOS=0xbf9e8000 \\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.000000] secureboot: Secure boot disabled\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.000000] SMBIOS 2.4 present.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.000000] DMI: Google Google Compute Engine/Google Compute Engine, BIOS Google 04/02/2024\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.000000] Hypervisor detected: KVM\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Finished Load Kernel Module configfs.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.000000] kvm-clock: Using msrs 4b564d01 and 4b564d00\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.000000] kvm-clock: cpu 0, msr 38ea01001, primary cpu clock\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.000002] kvm-clock: using sched offset of 7463039982 cycles\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.001673] clocksource: kvm-clock: mask: 0xffffffffffffffff max_cycles: 0x1cd42e4dffb, max_idle_ns: 881590591483 ns\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.005594] tsc: Detected 2199.998 MHz processor\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.006314] e820: update [mem 0x00000000-0x00000fff] usable ==\\u003e reserved\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: modprobe@drm.service: Succeeded.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.006318] e820: remove [mem 0x000a0000-0x000fffff] usable\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.006326] last_pfn = 0x440000 max_arch_pfn = 0x400000000\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.007417] MTRR default type: write-back\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Finished Load Kernel Module drm.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.007418] MTRR fixed ranges enabled:\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.007420]   00000-9FFFF write-back\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.007421]   A0000-FFFFF uncachable\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.007422] MTRR variable ranges enabled:\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.007424]   0 base 0000C0000000 mask 3FFFC0000000 uncachable\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: modprobe@fuse.service: Succeeded.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.007425]   1 disabled\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.007426]   2 disabled\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.007427]   3 disabled\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Finished Load Kernel Module fuse.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.007427]   4 disabled\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.007428]   5 disabled\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.007428]   6 disabled\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Finished Load Kernel Modules.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.007429]   7 disabled\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.007439] x86/PAT: Configuration [0-7]: WB  WC  UC- UC  WB  WP  UC- WT  \\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.009149] last_pfn = 0xbffe0 max_arch_pfn = 0x400000000\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.011172] Using GB pages for direct mapping\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.012535] RAMDISK: [mem 0x364cb000-0x3725cfff]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.014004] ACPI: Early table checksum verification disabled\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Finished Remount Root and Kernel File Systems.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.014907] ACPI: RSDP 0x00000000BFB7E014 000024 (v02 Google)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.016122] ACPI: XSDT 0x00000000BFB7D0E8 00005C (v01 Google GOOGFACP 00000001      01000013)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.017772] ACPI: FACP 0x00000000BFB78000 0000F4 (v02 Google GOOGFACP 00000001 GOOG 00000001)\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Mounting FUSE Control File System...\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.019701] ACPI: DSDT 0x00000000BFB79000 001A64 (v01 Google GOOGDSDT 00000001 GOOG 00000001)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.021192] ACPI: FACS 0x00000000BFBF2000 000040\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.022289] ACPI: SSDT 0x00000000BFB7C000 000316 (v02 GOOGLE Tpm2Tabl 00001000 INTL 20211217)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.023954] ACPI: TPM2 0x00000000BFB7B000 000034 (v04 GOOGLE          00000001 GOOG 00000001)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.025387] ACPI: SRAT 0x00000000BFB77000 0000E8 (v03 Google GOOGSRAT 00000001 GOOG 00000001)\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Mounting Kernel Configuration File System...\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.026883] ACPI: APIC 0x0000[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mSystem Logging Service\\u001b[0m.\\r\\n0000BFB76000 000086 (v05 Google GOOGAPIC 00000001 GOOG 00000001)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.028680] ACPI: SSDT 0x00000000BFB75000 000A42 (v01 Google GOOGSSDT 00000001 GOOG 00000001)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.030398] ACPI: WAET 0x00000000BFB74000 000028 (v01 Google GOOGWAET 00000001 GOOG 00000001)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.032416] ACPI: Reserving FACP table memory at [mem 0xbfb78000-0xbfb780f3]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.033817] ACPI: Reserving DSDT table memory at [mem 0xbfb79000-0xbfb7aa63]\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Starting Grow File System on /...\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.035919] ACPI: Reserving FACS table memory at [mem 0xbfbf2000-0xbfbf203f]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.037638] ACPI: Reserving SSDT table memory at [mem 0xbfb7c000-0xbfb7c315]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.039343] ACPI: Reserving TPM2 table memory at [mem 0xbfb7b000-0xbfb7b033]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.041316] ACPI: Reserving SRAT table memory at [mem 0xbfb77000-0xbfb770e7]\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Condition check resulted in Rebuild Hardware Database being skipped.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.043421] ACPI: Reserving APIC table memory at [mem 0xbfb76000-0xbfb76085]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.044623] ACPI: Reserving SSDT table memory at [mem 0xbfb75000-0xbfb75a41]\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Starting Flush Journal to Persistent Storage...\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.045988] ACPI: Reserving WAET table memory at [mem 0xbfb74000-0xbfb74027]\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd-growfs[229]: Successfully resized \\\"/\\\" to 149.8G bytes (512 bytes lost due to blocksize).\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.047831] ACPI: Local APIC address 0xfee00000\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.047863] SRAT: PXM 0 -\\u003e APIC 0x00 -\\u003e Node 0\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.049035] SRAT: PXM 0 -\\u003e APIC 0x01 -\\u003e Node 0\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Condition check resulted in Platform Persistent Storage Archival being skipped.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.050217] SRAT: PXM 0 -\\u003e APIC 0x02 -\\u003e Node 0\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.051248] SRAT: PXM 0 -\\u003e APIC 0x03 -\\u003e Node 0\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.052158] ACPI: SRAT: Node 0 PXM 0 [mem 0x00000000-0x0009ffff]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.053334] ACPI: SRAT: Node 0 PXM 0 [mem 0x00100000-0xbfffffff]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.054864] ACPI: SRAT: Node 0 PXM 0 [mem 0x100000000-0x43fffffff]\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Starting Load/Save Random Seed...\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.056897] NUMA: Node 0 [mem 0x00000000-0x0009ffff] + [mem 0x00100000-0xbfffffff] -\\u003e [mem 0x00000000-0xbfffffff]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.059708] NUMA: Node 0 [mem 0x00000000-0xbfffffff] + [mem 0x100000000-0x43fffffff] -\\u003e [mem 0x00000000-0x43fffffff]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.061978] NODE_DATA(0) allocated [mem 0x43ffd6000-0x43fffffff]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.063860] Zone ranges:\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Starting Apply Kernel Variables...\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.064328]   DMA      [mem 0x0000000000001000-0x0000000000ffffff]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.065345]   DMA32    [mem 0x0000000001000000-0x00000000ffffffff]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.066514]   Normal   [mem 0x0000000100000000-0x000000043fffffff]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.067698]   Device   empty\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.068721] Movable zone start for each node\\r\\nJun 25 04:35:3[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mGoogle C2D startup config\\u001b[0m.\\r\\n8 notebooks2instance-ok kernel: [    0.069658] Early memory node ranges\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Starting Create System Users...\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.070503]   node   0: [mem 0x0000000000001000-0x0000000000054fff]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.072076]   node   0: [mem 0x0000000000060000-0x0000000000097fff]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.073268]   node   0: [mem 0x0000000000100000-0x00000000bf8ecfff]\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Finished Coldplug All udev Devices.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.074685]   node   0: [mem 0x00000000bfbff000-0x00000000bffdffff]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.075904]   node   0: [mem 0x0000000100000000-0x000000043fffffff]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.077648] Initmem setup node 0 [mem 0x0000000000001000-0x000000043fffffff]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.079194] On node 0 totalpages: 4193370\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Mounted FUSE Control File System.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.079196]   DMA zone: 64 pages used for memmap\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.079197]   DMA zone: 2097 pages reserved\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.079198]   DMA zone: 3980 pages, LIFO batch:0\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.079199]   DMA32 zone: 12212 pages used for memmap\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.079200]   DMA32 zone: 781518 pages, LIFO batch:63\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.079201]   Normal zone: 53248 pages used for memmap\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Mounted Kernel Configuration File System.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.079202]   Normal zone: 3407872 pages, LIFO batch:63\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.079665] On node 0, zone DMA: 1 pages in unavailable ranges\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.079668] On node 0, zone DMA: 11 pages in unavailable ranges\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.081076] On node 0, zone DMA: 104 pages in unavailable ranges\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Finished Grow File System on /.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.099180] On node 0, zone DMA32: 786 pages in unavailable ranges\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.101908] On node 0, zone Normal: 32 pages in unavailable ranges\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.104845] ACPI: PM-Timer IO Port: 0xb008\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Finished Load/Save Random Seed.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.107766] ACPI: Local APIC address 0xfee00000\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.107779] ACPI: LAPIC_NMI (acpi_id[0xff] dfl dfl lint[0x1])\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.108962] IOAPIC[0]: apic_id 0, version 17, address 0xfec00000, GSI 0-23\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.110346] ACPI: INT_SRC_OVR (bus 0 bus_irq 5 global_irq 5 high level)\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Finished Apply Kernel Variables.\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Condition check resulted in First Boot Complete being skipped.\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Starting Helper to synchronize boot up for ifupdown...\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Finished Helper to synchronize boot up for ifupdown.\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Finished Flush Journal to Persistent Storage.\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Finished Create System Users.\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Starting Create Static Device Nodes in /dev...\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Finished Create Static Device Nodes in /dev.\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Reached target Local File Systems (Pre).\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Starting Rule-based Manager for Device Events and Files...\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Started Rule-based Manager for Device Events and Files.\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd-udevd[258]: Using default interface naming scheme 'v247'.\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd-udevd[258]: ethtool: autonegotiation is unset or enabled, the speed and duplex are not writable.\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Found device /dev/ttyS0.\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd-udevd[246]: ethtool: autonegotiation is unset or enabled, the speed and duplex are not writable.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.111604] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.113634] ACPI: INT_SRC_OVR (bus 0 bus_irq 10 global_irq 10 high level)\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Found device PersistentDisk 15.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.115103] ACPI: INT_SRC_OVR (bus 0 bus_irq 11 global_irq 11 high level)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.117018] ACPI: IRQ5 used by override.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.117020] ACPI: IRQ9 used by override.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.117020] ACPI: IRQ10 used by override.\\r\\nJun 25 04:35:38 notebooks2instance-ok cloud-ifupdown-helper: Generated configuration for ens4\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.117021] ACPI: IRQ11 used by override.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.117025] Using ACPI (MADT) for SMP configuration information\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.118848] smpboot: Allowing 4 CPUs, 0 hotplug CPUs\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.120326] PM: hibernation: Registered nosave memory: [mem 0x00000000-0x00000fff]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.122412] PM: hibernation: Registered nosave memory: [mem 0x00055000-0x0005ffff]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.124460] PM: hibernation: Registered nosave memory: [mem 0x00098000-0x0009ffff]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.126429] PM: hibernation: Registered nosave memory: [mem 0x000a0000-0x000fffff]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.128841] PM: hibernation: Registered nosave memory: [mem 0xbf8ed000-0xbf9ecfff]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.131345] PM: hibernation: Registered nosave memory: [mem 0xbf9ed000-0xbfaecfff]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.133531] PM: hibernation: Registered nosave memory: [mem 0xbfaed000-0xbfb6cfff]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.135186] PM: hibernation: Registered nosave memory: [mem 0xbfb6d000-0xbfb7efff]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.136985] PM: hibernation: Registered nosave memory: [mem 0xbfb7f000-0xbfbfefff]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.138373] PM: hibernation: Registered nosave memory: [mem 0xbffe0000-0xbfffffff]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.139896] PM: hibernation: Registered nosave memory: [mem 0xc0000000-0xffffffff]\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Mounting /boot/efi...\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.141111] [mem 0xc0000000-0xffffffff] available for PCI devices\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.142477] Booting paravirtualized kernel on KVM\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.144174] clocksource: refined-jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645519600211568 ns\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.151253] setup_percpu: NR_CPUS:8192 nr_cpumask_bits:4 nr_cpu_ids:4 nr_node_ids:1\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Mounted /boot/efi.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.153941] percpu: Embedded 63 pages/cpu s221184 r8192 d28672 u524288\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.155741] pcpu-alloc: s221184 r8192 d28672 u524288 [\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mUser Login Management\\u001b[0m.\\r\\nalloc=1*2097152\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Found device Virtio network device.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.155744] pcpu-alloc: [0] 0 1 2 3 \\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.155778] kvm-guest: stealtime: cpu 0, msr 42fc35080\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Reached target Local File Systems.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.156851] kvm-guest: PV spinlocks enabled\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.157938] PV qspinlock hash table entries: 256 (order: 0, 4096 bytes, linear)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.159733] Built 1 zonelists, mobility grouping on.  Total pages: 4125749\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.161944] Policy zone: Normal\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.162538] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-5.10.0-30-cloud-amd64 root=UUID=7be27af0-f080-46f6-bdf8-bc495c775f18 ro console=tty0 console=ttyS0,115200 earlyprintk=ttyS0,115200 consoleblank=0 intel_iommu=off\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.167996] DMAR: IOMMU disabled\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Starting Load AppArmor profiles...\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.173341] Dentry cache hash table entries: 2097152 (order: 12, 16777216 bytes, linear)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.178350] Inode-cache hash table entries: 1048576 (order: 11, 8388608 bytes, linear)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.181137] mem auto-init: stack:off, heap alloc:on, heap free:off\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Condition check resulted in Store a System Token in an EFI Variable being skipped.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.210850] Memory: 3138208K/16773480K available (12296K kernel code, 2552K rwdata, 6972K rodata, 2472K init, 3712K bss, 457808K reserved, 0K cma-reserved)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.214560] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=4, Nodes=1\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.215973] Kernel/User page tables isolation: enabled\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.218668] ftrace: allocating 33961 entries in 133 pages\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.238133] ftrace: allocated 133 pages with 3 groups\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Condition check resulted in Commit a transient machine-id on disk being skipped.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.240292] rcu: Hierarchical RCU implementation.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.241623] rcu: \\tRCU restricting CPUs from NR_CPUS=8192 to nr_cpu_ids=4.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.244277] \\tRude variant of Tasks RCU enabled.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.245135] \\tTracing variant of Tasks RCU enabled.\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Starting Create Volatile Files and Directories...\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.246428] rcu: RCU calculated value of scheduler-enlistment delay is 25 jiffies.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.249232] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=4\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.255155] NR_IRQS: 524544, nr_irqs: 456, preallocated irqs: 16\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.257599] random: crng init done\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.259117] Console: colour dummy device 80x25\\r\\nJun 25 04:35:38 notebooks2instance-ok apparmor.systemd[341]: Restarting AppArmor\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.260319] printk: console [tty0] enabled\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.261841] printk: console [ttyS0] enabled\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.264059] printk: bootconsole [earlyser0] disabled\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.266540] ACPI: Core revision 20200925\\r\\nJun 25 04:35:38 notebooks2instance-ok          Starting \\u001b[0;1;39mGCE Workload Certificate refresh\\u001b[0m...\\r\\nkernel: [    0.268016] APIC: Switch to symmetric I/O mode setup\\r\\nJun 25 04:35:38 notebooks2instance-ok apparmor.systemd[341]: Reloading AppArmor profiles\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.270442] x2apic enabled\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.275132] Switched APIC routing to physical x2apic.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.282672] ..TIMER: vector=0x30 apic1=0 pin1=0 apic2=-1 pin2=-1\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Finished Create Volatile Files and Directories.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.285029] clocksource: tsc-early: mask: 0xffffffffffffffff max_cycles: 0x1fb63109b96, max_idle_ns: 440795265316 ns\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.287218] Calibrating delay loop (skipped) preset value.. 4399.99 BogoMIPS (lpj=8799992)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.291296] Last level iTLB entries: 4KB 64, 2MB 8, 4MB 8\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.293152] Last level dTLB entries: 4KB 64, 2MB 0, 4MB 0, 1GB 4\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.295224] Spectre V1 : Mitigation: usercopy/swapgs barriers and __user pointer sanitization\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Starting Update UTMP about System Boot/Shutdown...\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.297075] Spectre V2 : Mitigation: IBRS\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.297925] Spectre V2 : Spectre v2 / SpectreRSB mitigation: Filling RSB on context switch\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.299220] Spectre V2 : Spectre v2 / SpectreRSB : Filling RSB on VMEXIT\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Finished Update UTMP about System Boot/Shutdown.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.303219] RETBleed: Mitigation: IBRS\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.304436] Spectre V2 : mitigation: Enabling conditional Indirect Branch Prediction Barrier\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.307218] Spectre V2 : User space: Mitigation: STIBP via seccomp and prctl\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.309977] Speculative Store Bypass: Mitigation: Speculative Store Bypass disabled via prctl and seccomp\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Finished Load AppArmor profiles.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.311230] MDS: Mitigation: Clear CPU buffers\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.312903] TAA: Mitigation: Clear CPU buffers\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.315216] MMIO Stale Data: Vulnerable: Clear CPU buffers attempted, no microcode\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.317555] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.319220] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Started Entropy Daemon based on the HAVEGE algorithm.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.321368] x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers'\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.323221] x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]:  256\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Reached target System Initialization.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.325043] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.347243] Freeing SMP alternatives memory: 32K\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.350799] pid_max: default: 32768 minimum: 301\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.359126] LSM: Security Framework initializing\\r\\n         Starting \\u001b[0;1;39mNSS cache refresh\\u001b[0m...\\r\\n         Stopping \\u001b[0;1;39mSystem Logging Service\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mNSS cache refresh\\u001b[0m.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.359227] Yama: disabled by default; enable with sysctl kernel.yama.*\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Started GCE Workload Certificate refresh timer.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.361438] AppArmor: AppArmor initialized\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.363217] TOMOYO Linux initialized\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.364810] Mount-cache hash table entries: 32768 (order: 6, 262144 bytes, linear)\\r\\nJun 25 04:35:38 notebooks2instance-ok haveged[355]: haveged: command socket is listening at fd 3\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.367262] Mountpoint-cache hash table entries: 32768 (order: 6, 262144 bytes, linear)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.479005] smpboot: CPU0: Intel(R) Xeon(R) CPU @ 2.20GHz (family: 0x6, model: 0x4f, stepping: 0x0)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.479410] Performance Events: unsupported p6 CPU model 79 no PMU driver, software events only.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.482592] rcu: Hierarchical SRCU implementation.\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Started NSS cache refresh timer.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.483596] NMI watchdog: Perf NMI watchdog permanently disabled\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.485563] smp: Bringing up secondary CPUs ...\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.487355] x86: Booting SMP configuration:\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.488118] .... node  #0, CPUs:      #1\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Started Run google-wi-idle-shutdown service every minute.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.021623] kvm-clock: cpu 1, msr 38ea01041, secondary cpu clock\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.489059] kvm-guest: stealtime: cpu 1, msr 42fcb5080\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.491369]  #2\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Started Daily Cleanup of Temporary Directories.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.021623] kvm-clock: cpu 2, msr 38ea01081, secondary cpu clock\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.492175] kvm-guest: stealtime: cpu 2, msr 42fd35080\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.495261] MDS CPU bug present and SMT on, data leak possible. See https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/mds.html for more details.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.499221] TAA CPU bug present and SMT on, data leak possible. See https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/tsx_async_abort.html for more details.\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Listening on D-Bus System Message Bus Socket.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.503216] MMIO Stale Data CPU bug present and SMT on, data leak possible. See https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/processor_mmio_stale_data.html for more details.\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Starting Docker Socket for the API.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.507416]  #3\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.021623] kvm-clock: cpu 3, msr 38ea010c1, secondary cpu clock\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.507978] kvm-guest: stealtime: cpu 3, msr 42fdb5080\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.509000] smp: Brought up 1 node, 4 CPUs\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.509000] smpboot: Max logical packages: 1\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Listening on UUID daemon activation socket.\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Starting Resize root filesystem if needed...\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Started ifup for ens4.\\r\\nJun 25 04:35:38 notebooks2instance-ok google_disk_expand[357]: Checking if filesystem on /dev/sdb1 needs resizing\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Starting Raise network interfaces...\\r\\nJun 25 04:35:38 notebooks2instance-ok google_disk_expand[365]: resize2fs 1.46.2 (28-Feb-2021)\\r\\nJun 25 04:35:38 notebooks2instance-ok google_disk_expand[365]: The filesystem is already 39288576 (4k) blocks long.  Nothing to do!\\r\\nJun 25 04:35:38 notebooks2instance-ok google_disk_expand[357]: Done.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.511217] smpboot: Total of 4 processors activated (17599.98 BogoMIPS)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.553113] node 0 deferred pages initialised in 40ms\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.553962] devtmpfs: initialized\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.553962] x86/mm: Memory block size: 128MB\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.555266] PM: Registering ACPI NVS region [mem 0xbfb7f000-0xbfbfefff] (524288 bytes)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.556834] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.558720] futex hash table entries: 1024 (order: 4, 65536 bytes, linear)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.559626] NET: Registered protocol family 16\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.561418] DMA: preallocated 2048 KiB GFP_KERNEL pool for atomic allocations\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.563847] DMA: preallocated 2048 KiB GFP_KERNEL|GFP_DMA pool for atomic allocations\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.566314] DMA: preallocated 2048 KiB GFP_KERNEL|GFP_DMA32 pool for atomic allocations\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.567234] audit: initializing netlink subsys (disabled)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.571259] audit: type=2000 audit(1719290134.916:1): state=initialized audit_enabled=0 res=1\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.571393] thermal_sys: Registered thermal governor 'fair_share'\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.575217] thermal_sys: Registered thermal governor 'bang_bang'\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.576259] thermal_sys: Registered thermal governor 'step_wise'\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.577388] thermal_sys: Registered thermal governor 'user_space'\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.579218] thermal_sys: Registered thermal governor 'power_allocator'\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.580672] cpuidle: using governor ladder\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.583244] cpuidle: using governor menu\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.584036] ACPI: bus type PCI registered\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.584866] acpiphp: ACPI Hot Plug PCI Controller Driver version: 0.5\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.584866] PCI: Using configuration type 1 for base access\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.585543] Kprobes globally optimized\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.587265] HugeTLB registered 1.00 GiB page size, pre-allocated 0 pages\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.588335] HugeTLB registered 2.00 MiB page size, pre-allocated 0 pages\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.727390] ACPI: Added _OSI(Module Device)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.728198] ACPI: Added _OSI(Processor Device)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.729083] ACPI: Added _OSI(3.0 _SCP Extensions)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.729083] ACPI: Added _OSI(Processor Aggregator Device)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.729083] ACPI: Added _OSI(Linux-Dell-Video)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.730170] ACPI: Added _OSI(Linux-Lenovo-NV-HDMI-Audio)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.731219] ACPI: Added _OSI(Linux-HPI-Hybrid-Graphics)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.733975] ACPI: 3 ACPI AML tables successfully acquired and loaded\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.736800] ACPI: Interpreter enabled\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.737474] ACPI: (supports S0 S3 S4 S5)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.739217] ACPI: Using IOAPIC for interrupt routing\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.740043] PCI: Using host bridge windows from ACPI; if necessary, use \\\"pci=nocrs\\\" and report a bug\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.742302] ACPI: Enabled 16 GPEs in block 00 to 0F\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.746116] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff])\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.751226] acpi PNP0A03:00: _OSC: OS supports [ASPM ClockPM Segments MSI HPX-Type3]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.753310] acpi PNP0A03:00: fail to add MMCONFIG information, can't access extended PCI configuration space under this bridge.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.756127] PCI host bridge to bus 0000:00\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.757133] pci_bus 0000:00: root bus resource [io  0x0000-0x0cf7 window]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.757133] pci_bus 0000:00: root bus resource [io  0x0d00-0xffff window]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.757133] pci_bus 0000:00: root bus resource [mem 0x000a0000-0x000bffff window]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.759221] pci_bus 0000:00: root bus resource [mem 0xc0000000-0xfebfefff window]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.760659] pci_bus 0000:00: root bus resource [bus 00-ff]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.761732] pci 0000:00:00.0: [8086:1237] type 00 class 0x060000\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.767780] pci 0000:00:01.0: [8086:7110] type 00 class 0x060100\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.796962] pci 0000:00:01.3: [8086:7113] type 00 class 0x068000\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.823289] pci 0000:00:01.3: quirk: [io  0xb000-0xb03f] claimed by PIIX4 ACPI\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.825002] pci 0000:00:03.0: [1af4:1004] type 00 class 0x000000\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.836887] pci 0000:00:03.0: reg 0x10: [io  0xc040-0xc07f]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.845173] pci 0000:00:03.0: reg 0x14: [mem 0xc0002000-0xc000207f]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.867332] pci 0000:00:04.0: [1af4:1000] type 00 class 0x020000\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.878425] pci 0000:00:04.0: reg 0x10: [io  0xc000-0xc03f]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.886600] pci 0000:00:04.0: reg 0x14: [mem 0xc0000000-0xc00000ff]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.911609] pci 0000:00:05.0: [1af4:1002] type 00 class 0x00ff00\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.923222] pci 0000:00:05.0: reg 0x10: [io  0xc0a0-0xc0bf]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.931222] pci 0000:00:05.0: reg 0x14: [mem 0xc0001000-0xc000107f]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.953332] pci 0000:00:06.0: [1af4:1005] type 00 class 0x00ff00\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.965013] pci 0000:00:06.0: reg 0x10: [io  0xc080-0xc09f]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    0.973033] pci 0000:00:06.0: reg 0x14: [mem 0xc0003000-0xc000303f]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.000262] ACPI: PCI Interrupt Link [LNKA] (IRQs 5 *10 11)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.003344] ACPI: PCI Interrupt Link [LNKB] (IRQs 5 *10 11)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.007315] ACPI: PCI Interrupt Link [LNKC] (IRQs 5 10 *11)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.010788] ACPI: PCI Interrupt Link [LNKD] (IRQs 5 10 *11)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.013251] ACPI: PCI Interrupt Link [LNKS] (IRQs *9)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mGCE Workload Certificate refresh\\u001b[0m.\\r\\n015753] iommu: Default domain type: Translated \\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.019241] vgaarb: loaded\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.019732] Registered efivars operations\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.020631] NetLabel: Initializing\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.021218] NetLabel:  domain hash size = 128\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.021218] NetLabel:  protocols = UNLABELED CIPSOv4 CALIPSO\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.021218] NetLabel:  unlabeled traffic allowed by default\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.021937] PCI: Using ACPI for IRQ routing\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.023220] PCI: pci_cache_line_size set to 64 bytes\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.023372] e820: reserve RAM buffer [mem 0x00055000-0x0005ffff]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.023375] e820: reserve RAM buffer [mem 0x00098000-0x0009ffff]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.023376] e820: reserve RAM buffer [mem 0xbf8ed000-0xbfffffff]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.023377] e820: reserve RAM buffer [mem 0xbffe0000-0xbfffffff]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.023505] clocksource: Switched to clocksource kvm-clock\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.039443] VFS: Disk quotas dquot_6.6.0\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.040585] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.042070] AppArmor: AppArmor Filesystem Enabled\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.043151] pnp: PnP ACPI init\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.043755] pnp 00:00: Plug and Play ACPI device, IDs PNP0b00 (active)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.043827] pnp 00:01: Plug and Play ACPI device, IDs PNP0303 (active)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.043872] pnp 00:02: Plug and Play ACPI device, IDs PNP0f13 (active)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.043927] pnp 00:03: Plug and Play ACPI device, IDs PNP0501 (active)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.043970] pnp 00:04: Plug and Play ACPI device, IDs PNP0501 (active)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.044015] pnp 00:05: Plug and Play ACPI device, IDs PNP0501 (active)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.044060] pnp 00:06: Plug and Play ACPI device, IDs PNP0501 (active)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.044281] pnp: PnP ACPI: found 7 devices\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.052668] clocksource: acpi_pm: mask: 0xffffff max_cycles: 0xffffff, max_idle_ns: 2085701024 ns\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.054578] NET: Registered protocol family 2\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.056249] IP idents hash table entries: 262144 (order: 9, 2097152 bytes, linear)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.060544] tcp_listen_portaddr_hash hash table entries: 8192 (order: 5, 131072 bytes, linear)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.062405] TCP established hash table entries: 131072 (order: 8, 1048576 bytes, linear)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.064330] TCP bind hash table entries: 65536 (order: 8, 1048576 bytes, linear)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.065530] TCP: Hash tables configured (established 131072 bind 65536)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.066674] UDP hash table entries: 8192 (order: 6, 262144 bytes, linear)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.068012] UDP-Lite hash table entries: 8192 (order: 6, 262144 bytes, linear)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.069158] NET: Registered protocol family 1\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.069831] NET: Registered protocol family 44\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.070471] pci_bus 0000:00: resource 4 [io  0x0000-0x0cf7 window]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.071628] pci_bus 0000:00: resource 5 [io  0x0d00-0xffff window]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.073058] pci_bus 0000:00: resource 6 [mem 0x000a0000-0x000bffff window]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.074807] pci_bus 0000:00: resource 7 [mem 0xc0000000-0xfebfefff window]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.075887] pci 0000:00:00.0: Limiting direct PCI/PCI transfers\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.076878] PCI: CLS 0 bytes, default 64\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.077521] Trying to unpack rootfs image as initramfs...\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.322546] Freeing initrd memory: 13896K\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.323520] PCI-DMA: Using software bounce buffering for IO (SWIOTLB)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.324842] software IO TLB: mapped [mem 0x00000000b7ff7000-0x00000000bbff7000] (64MB)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.326241] clocksource: tsc: mask: 0xffffffffffffffff max_cycles: 0x1fb63109b96, max_idle_ns: 440795265316 ns\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.328340] clocksource: Switched to clocksource tsc\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.329861] Initialise system trusted keyrings\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.330879] Key type blacklist registered\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.332056] workingset: timestamp_bits=36 max_order=22 bucket_order=0\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.334878] zbud: loaded\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.336588] Key type asymmetric registered\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.337359] Asymmetric key parser 'x509' registered\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.338488] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 252)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.340169] io scheduler mq-deadline registered\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.342219] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.343863] 00:03: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.345864] 00:04: ttyS1 at I/O 0x2f8 (irq = 3, base_baud = 115200) is a 16550A\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.348328] 00:05: ttyS2 at I/O 0x3e8 (irq = 6, base_baud = 115200) is a 16550A\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.351190] 00:06: ttyS3 at I/O 0x2e8 (irq = 7, base_baud = 115200) is a 16550A\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.354518] i8042: PNP: PS/2 Controller [PNP0303:KBD,PNP0f13:MOU] at 0x60,0x64 irq 1,12\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.356615] i8042: Warning: Keylock active\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.359618] serio: i8042 KBD port at 0x60,0x64 irq 1\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.361288] serio: i8042 AUX port at 0x60,0x64 irq 12\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.362792] rtc_cmos 00:00: RTC can wake from S4\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.365130] rtc_cmos 00:00: registered as rtc0\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.366631] rtc_cmos 00:00: setting system clock to 2024-06-25T04:35:35 UTC (1719290135)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.368754] rtc_cmos 00:00: alarms up to one day, 114 bytes nvram\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.370603] intel_pstate: CPU model not supported\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.371920] NET: Registered protocol family 10\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.382572] Segment Routing with IPv6\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.383523] mip6: Mobile IPv6\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.384464] NET: Registered protocol family 17\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.385881] IPI shorthand broadcast: enabled\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.387291] sched_clock: Marking stable (1368142121, 17623184)-\\u003e(1394057430, -8292125)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.390023] registered taskstats version 1\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.391047] Loading compiled-in X.509 certificates\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.427394] Loaded X.509 cert 'Debian Secure Boot CA: 6ccece7e4c6c0d1f6149f3dd27dfcc5cbb419ea1'\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.430224] Loaded X.509 cert 'Debian Secure Boot Signer 2022 - linux: 14011249c2675ea8e5148542202005810584b25f'\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.432915] Key type .fscrypt registered\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.434240] Key type fscrypt-provisioning registered\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.436017] AppArmor: AppArmor sha1 policy hashing enabled\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.437465] clk: Disabling unused clocks\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.440843] Freeing unused decrypted memory: 2036K\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.443201] Freeing unused kernel image (initmem) memory: 2472K\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.461743] Write protecting the kernel read-only data: 22528k\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.464647] Freeing unused kernel image (text/rodata gap) memory: 2036K\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.466757] Freeing unused kernel image (rodata/data gap) memory: 1220K\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.470703] x86/mm: Checked W+X mappings: passed, no W+X pages found.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.472647] x86/mm: Checking user space page tables\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.474286] x86/mm: Checked W+X mappings: passed, no W+X pages found.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.475573] Run /init as init process\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.476647]   with arguments:\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.476648]     /init\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.476648]   with environment:\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.476649]     HOME=/\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.476650]     TERM=linux\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.476651]     BOOT_IMAGE=/boot/vmlinuz-5.10.0-30-cloud-amd64\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.476652]     intel_iommu=off\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.549835] PCI Interrupt Link [LNKC] enabled at IRQ 11\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.552227] virtio-pci 0000:00:03.0: virtio_pci: leaving for legacy driver\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.566062] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input0\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.572626] PCI Interrupt Link [LNKD] enabled at IRQ 10\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.575326] virtio-pci 0000:00:04.0: virtio_pci: leaving for legacy driver\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.584901] PCI Interrupt Link [LNKA] enabled at IRQ 10\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.586664] virtio-pci 0000:00:05.0: virtio_pci: leaving for legacy driver\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.595486] PCI Interrupt Link [LNKB] enabled at IRQ 11\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.596786] virtio-pci 0000:00:06.0: virtio_pci: leaving for legacy driver\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.716914] SCSI subsystem initialized\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.719083] virtio_net virtio1 ens4: renamed from eth0\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.823979] scsi host0: Virtio SCSI HBA\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.842774] scsi 0:0:1:0: Direct-Access     Google   PersistentDisk   1    PQ: 0 ANSI: 6\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.844639] scsi 0:0:2:0: Direct-Access     Google   PersistentDisk   1    PQ: 0 ANSI: 6\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.889836] sd 0:0:2:0: [sda] 209715200 512-byte logical blocks: (107 GB/100 GiB)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.891367] sd 0:0:2:0: [sda] 4096-byte physical blocks\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.892344] sd 0:0:2:0: [sda] Write Protect is off\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.892372] sd 0:0:1:0: [sdb] 314572800 512-byte logical blocks: (161 GB/150 GiB)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.893703] sd 0:0:2:0: [sda] Mode Sense: 1f 00 00 08\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.895194] sd 0:0:1:0: [sdb] 4096-byte physical blocks\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.895287] sd 0:0:2:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.897592] sd 0:0:1:0: [sdb] Write Protect is off\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.898449] sd 0:0:1:0: [sdb] Mode Sense: 1f 00 00 08\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.898753] sd 0:0:1:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.924184]  sdb: sdb1 sdb14 sdb15\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.942584] sd 0:0:2:0: [sda] Attached SCSI disk\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    1.942585] sd 0:0:1:0: [sdb] Attached SCSI disk\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    2.071509]  sdb: sdb1 sdb14 sdb15\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    2.179511] EXT4-fs (sdb1): mounted filesystem with ordered data mode. Opts: (null)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    2.215492] Not activating Mandatory Access Control as /sbin/tomoyo-init does not exist.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    3.278371] fuse: init (API version 7.32)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    3.333506] EXT4-fs (sdb1): re-mounted. Opts: discard,errors=remount-ro\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    3.522203] EXT4-fs (sdb1): resizing filesystem from 39288576 to 39288576 blocks\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    3.937753] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input2\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    3.952887] tpm_tis MSFT0101:00: 2.0 TPM (device-id 0x9009, rev-id 0)\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    3.968354] ACPI: Power Button [PWRF]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    3.982980] input: Sleep Button as /devices/LNXSYSTM:00/LNXSLPBN:00/input/input3\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    4.018532] pstore: Using crash dump compression: deflate\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    4.056674] ACPI: Sleep Button [SLPF]\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    4.059108] pstore: Registered efi as persistent store backend\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    4.102563] sd 0:0:1:0: Attached scsi generic sg0 type 0\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    4.110503] sd 0:0:2:0: Attached scsi generic sg1 type 0\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    4.117305] RAPL PMU: API unit is 2^-32 Joules, 0 fixed counters, 10737418240 ms ovfl timer\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    4.154487] cryptd: max_cpu_qlen set to 1000\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    4.171394] AVX2 version of gcm_enc/dec engaged.\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    4.173238] AES CTR mode by8 optimization enabled\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    4.341372] audit: type=1400 audit(1719290138.467:2): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"nvidia_modprobe\\\" pid=350 comm=\\\"apparmor_parser\\\"\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    4.346604] audit: type=1400 audit(1719290138.467:3): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"nvidia_modprobe//kmod\\\" pid=350 comm=\\\"apparmor_parser\\\"\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    4.351622] audit: type=1400 audit(1719290138.467:4): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"/usr/bin/man\\\" pid=351 comm=\\\"apparmor_parser\\\"\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    4.355754] audit: type=1400 audit(1719290138.467:5): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"man_filter\\\" pid=351 comm=\\\"apparmor_parser\\\"\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    4.360728] audit: type=1400 audit(1719290138.467:6): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"man_groff\\\" pid=351 comm=\\\"apparmor_parser\\\"\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    4.360734] audit: type=1400 audit(1719290138.467:7): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"/usr/sbin/chronyd\\\" pid=352 comm=\\\"apparmor_parser\\\"\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    4.360738] audit: type=1400 audit(1719290138.475:8): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"/usr/sbin/haveged\\\" pid=353 comm=\\\"apparmor_parser\\\"\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    4.360744] audit: type=1400 audit(1719290138.483:9): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"tcpdump\\\" pid=349 comm=\\\"apparmor_parser\\\"\\r\\nJun 25 04:35:38 notebooks2instance-ok kernel: [    4.377409] audit: type=1400 audit(1719290138.483:10): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"lsb_release\\\" pid=354 comm=\\\"apparmor_parser\\\"\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Listening on Docker Socket for the API.\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: google-disk-expand.service: Succeeded.\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Finished Resize root filesystem if needed.\\r\\nJun 25 04:35:38 notebooks2instance-ok dhclient[379]: Internet Systems Consortium DHCP Client 4.4.1\\r\\nJun 25 04:35:38 notebooks2instance-ok sh[379]: Internet Systems Consortium DHCP Client 4.4.1\\r\\nJun 25 04:35:38 notebooks2instance-ok sh[379]: Copyright 2004-2018 Internet Systems Consortium.\\r\\nJun 25 04:35:38 notebooks2instance-ok sh[379]: All rights reserved.\\r\\nJun 25 04:35:38 notebooks2instance-ok sh[379]: For info, please visit https://www.isc.org/software/dhcp/\\r\\nJun 25 04:35:38 notebooks2instance-ok dhclient[379]: Copyright 2004-2018 Internet Systems Consortium.\\r\\nJun 25 04:35:38 notebooks2instance-ok dhclient[379]: All rights reserved.\\r\\nJun 25 04:35:38 notebooks2instance-ok dhclient[379]: For info, please visit https://www.isc.org/software/dhcp/\\r\\nJun 25 04:35:38 notebooks2instance-ok dhclient[379]: \\r\\nJun 25 04:35:38 notebooks2instance-ok ifup[366]: ifup: waiting for lock on /run/network/ifstate.ens4\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Reached target Sockets.\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Reached target Basic System.\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Started Regular background program processing daemon.\\r\\nJun 25 04:35:38 notebooks2instance-ok dhclient[379]: Listening on LPF/ens4/42:01:0a:8a:00:05\\r\\nJun 25 04:35:38 notebooks2instance-ok sh[379]: Listening on LPF/ens4/42:01:0a:8a:00:05\\r\\nJun 25 04:35:38 notebooks2instance-ok sh[379]: Sending on   LPF/ens4/42:01:0a:8a:00:05\\r\\nJun 25 04:35:38 notebooks2instance-ok sh[379]: Sending on   Socket/fallback\\r\\nJun 25 04:35:38 notebooks2instance-ok dhclient[379]: Sending on   LPF/ens4/42:01:0a:8a:00:05\\r\\nJun 25 04:35:38 notebooks2instance-ok sh[379]: DHCPDISCOVER on ens4 to 255.255.255.255 port 67 interval 7\\r\\nJun 25 04:35:38 notebooks2instance-ok dhclient[379]: Sending on   Socket/fallback\\r\\nJun 25 04:35:38 notebooks2instance-ok dhclient[379]: DHCPDISCOVER on ens4 to 255.255.255.255 port 67 interval 7\\r\\nJun 25 04:35:38 notebooks2instance-ok dhclient[379]: DHCPOFFER of 10.138.0.5 from 169.254.169.254\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Started D-Bus System Message Bus.\\r\\nJun 25 04:35:38 notebooks2instance-ok dhclient[379]: DHCPREQUEST for 10.138.0.5 on ens4 to 255.255.255.255 port 67\\r\\nJun 25 04:35:38 notebooks2instance-ok sh[379]: DHCPOFFER of 10.138.0.5 from 169.254.169.254\\r\\nJun 25 04:35:38 notebooks2instance-ok sh[379]: DHCPREQUEST for 10.138.0.5 on ens4 to 255.255.255.255 port 67\\r\\nJun 25 04:35:38 notebooks2instance-ok sh[379]: DHCPACK of 10.138.0.5 from 169.254.169.254\\r\\nJun 25 04:35:38 notebooks2instance-ok dhclient[379]: DHCPACK of 10.138.0.5 from 169.254.169.254\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Starting Remove Stale Online ext4 Metadata Check Snapshots...\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Started Action on GCE instance property changes.\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Condition check resulted in getty on tty2-tty6 if dbus and logind are not available being skipped.\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Starting Google C2D startup config...\\r\\nJun 25 04:35:38 notebooks2instance-ok haveged[355]: haveged: ver: 1.9.14; arch: x86; vend: GenuineIntel; build: (gcc 10.2.1 ITV); collect: 128K\\r\\nJun 25 04:35:38 notebooks2instance-ok haveged[355]: haveged: cpu: (L4 VC); data: 32K (L4 V); inst: 32K (L4 V); idx: 24/40; sz: 32154/54019\\r\\nJun 25 04:35:38 notebooks2instance-ok haveged[355]: haveged: tot tests(BA8): A:1/1 B:1/1 continuous tests(B):  last entropy estimate 8.00335\\r\\nJun 25 04:35:38 notebooks2instance-ok haveged[355]: haveged: fills: 0, generated: 0\\r\\nJun 25 04:35:38 notebooks2instance-ok c2d-startup[418]: Google C2D startup config has already run. This is expected on reboots.\\r\\nJun 25 04:35:38 notebooks2instance-ok c2d-startup[418]: To run startup scripts again, delete /root/google_vm_config.lock\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Starting Removes premium features from DLVM....\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Starting Polls for whether all services from Notebooks has started and reports Heartbeat event...\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Starting Jupyter Notebook Service...\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Started Vertex Workbench Health Agent.\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Starting System Logging Service...\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Starting User Login Management...\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: e2scrub_reap.service: Succeeded.\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Finished Remove Stale Online ext4 Metadata Check Snapshots.\\r\\nJun 25 04:35:38 notebooks2instance-ok systemd[1]: Started System Logging Service.\\r\\nJun 25 04:35:39 notebooks2instance-ok systemd[1]: Finished Google C2D startup config.\\r\\nJun 25 04:35:39 notebooks2instance-ok dbus-daemon[399]: [system] Successfully activated service 'org.freedesktop.systemd1'\\r\\nJun 25 04:35:39 notebooks2instance-ok systemd[1]: Started User Login Management.\\r\\nJun 25 04:35:39 notebooks2instance-ok systemd[1]: Starting GCE Workload Certificate refresh...\\r\\nJun 25 04:35:39 notebooks2instance-ok systemd[1]: Starting NSS cache refresh...\\r\\nJun 25 04:35:39 notebooks2instance-ok google_oslogin_nss_cache[475]: oslogin_cache_refresh[475]: Refreshing passwd entry cache\\r\\nJun 25 04:35:39 notebooks2instance-ok google_oslogin_nss_cache[475]: oslogin_cache_refresh[475]: Failure getting users, quitting\\r\\nJun 25 04:35:39 notebooks2instance-ok google_oslogin_nss_cache[475]: oslogin_cache_refresh[475]: Failed to get users, not updating passwd cache file, removing /etc/oslogin_passwd.cache.bak.\\r\\nJun 25 04:35:39 notebooks2instance-ok google_oslogin_nss_cache[475]: oslogin_cache_refresh[475]: Refreshing group entry cache\\r\\nJun 25 04:35:39 notebooks2instance-ok google_oslogin_nss_cache[475]: oslogin_cache_refresh[475]: Failure getting groups, quitting\\r\\nJun 25 04:35:39 notebooks2instance-ok google_oslogin_nss_cache[475]: oslogin_cache_refresh[475]: Failed to get groups, not updating group cache file, removing /etc/oslogin_group.cache.bak.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Stopped \\u001b[0;1;39mSystem Logging Service\\u001b[0m.\\r\\n         Starting \\u001b[0;1;39mSystem Logging Service\\u001b[0m...\\r\\nJun 25 04:35:39 notebooks2instance-ok systemd[1]: Stopping System Logging Service...\\r\\nJun 25 04:35:39 notebooks2instance-ok systemd[1]: google-oslogin-cache.service: Succeeded.\\r\\nJun 25 04:35:39 notebooks2instance-ok systemd[1]: Finished NSS cache refresh.\\r\\nJun 25 04:35:39 notebooks2instance-ok dhclient[379]: bound to 10.138.0.5 -- renewal in 37158 seconds.\\r\\nJun 25 04:35:39 notebooks2instance-ok sh[379]: bound to 10.138.0.5 -- renewal in 37158 seconds.\\r\\nJun 25 04:35:39 notebooks2instance-ok gce_workload_cert_refresh[469]: 2024/06/25 04:35:39: Done\\r\\nJun 25 04:35:39 notebooks2instance-ok systemd[1]: gce-workload-cert-refresh.service: Succeeded.\\r\\nJun 25 04:35:39 notebooks2instance-ok systemd[1]: Finished GCE Workload Certificate refresh.\\r\\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: rsyslog.service: Succeeded.\\r\\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Stopped System Logging Service.\\r\\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Starting System Logging Service...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mSystem Logging Service\\u001b[0m.\\r\\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Started System Logging Service.\\r\\nJun 25 04:35:40 notebooks2instance-ok dhclient[526]: Internet Systems Consortium DHCP Client 4.4.1\\r\\nJun 25 04:35:40 notebooks2instance-ok sh[526]: Internet Systems Consortium DHCP Client 4.4.1\\r\\nJun 25 04:35:40 notebooks2instance-ok sh[526]: Copyright 2004-2018 Internet Systems Consortium.\\r\\nJun 25 04:35:40 notebooks2instance-ok dhclient[526]: Copyright 2004-2018 Internet Systems Consortium.\\r\\nJun 25 04:35:40 notebooks2instance-ok sh[526]: All rights reserved.\\r\\nJun 25 04:35:40 notebooks2instance-ok sh[526]: For info, please visit https://www.isc.org/software/dhcp/\\r\\nJun 25 04:35:40 notebooks2instance-ok dhclient[526]: All rights reserved.\\r\\nJun 25 04:35:40 notebooks2instance-ok dhclient[526]: For info, please visit https://www.isc.org/software/dhcp/\\r\\nJun 25 04:35:40 notebooks2instance-ok dhclient[526]: \\r\\nJun 25 04:35:40 notebooks2instance-ok dhclient[526]: Listening on Socket/ens4\\r\\nJun 25 04:35:40 notebooks2instance-ok sh[526]: Listening on Socket/ens4\\r\\nJun 25 04:35:40 notebooks2instance-ok sh[526]: Sending on   Socket/ens4\\r\\nJun 25 04:35:40 notebooks2instance-ok sh[526]: PRC: Soliciting for leases (INIT).\\r\\nJun 25 04:35:40 notebooks2instance-ok dhclient[526]: Sending on   Socket/ens4\\r\\nJun 25 04:35:40 notebooks2instance-ok sh[559]: ens4=ens4\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mRaise network interfaces\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mNetwork\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mNetwork is Online\\u001b[0m.\\r\\n         Starting \\u001b[0;1;39mchrony, an NTP client/server\\u001b[0m...\\r\\n         Starting \\u001b[0;1;39mcontainerd container runtime\\u001b[0m...\\r\\n         Starting \\u001b[0;1;39mGoogle Compute Engine Guest Agent\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mGoogle OSConfig Agent\\u001b[0m.\\r\\n         Starting \\u001b[0;1;39mGoogle Compute Engine Shutdown Scripts\\u001b[0m...\\r\\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Finished Raise network interfaces.\\r\\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Reached target Network.\\r\\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Reached target Network is Online.\\r\\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Starting chrony, an NTP client/server...\\r\\n         Starting \\u001b[0;1;39m/etc/rc.local Compatibility\\u001b[0m...\\r\\n         Starting \\u001b[0;1;39mOpenBSD Secure Shell session cleanup\\u001b[0m...\\r\\n         Starting \\u001b[0;1;39mPermit User Sessions\\u001b[0m...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mUnattended Upgrades Shutdown\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mGoogle Compute Engine Shutdown Scripts\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mOpenBSD Secure Shell session cleanup\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mPermit User Sessions\\u001b[0m.\\r\\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Starting containerd container runtime...\\r\\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Starting Google Compute Engine Guest Agent...\\r\\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Started Google OSConfig Agent.\\r\\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Starting Google Compute Engine Shutdown Scripts...\\r\\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Starting /etc/rc.local Compatibility...\\r\\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Condition check resulted in fast remote file copy program daemon being skipped.\\r\\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Starting OpenBSD Secure Shell session cleanup...\\r\\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Starting Permit User Sessions...\\r\\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Started Unattended Upgrades Shutdown.\\r\\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Finished Google Compute Engine Shutdown Scripts.\\r\\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Finished OpenBSD Secure Shell session cleanup.\\r\\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Finished Permit User Sessions.\\r\\nJun 25 04:35:40 notebooks2instance-ok chronyd[603]: chronyd version 4.0 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SIGND +ASYNCDNS +NTS +SECHASH +IPV6 -DEBUG)\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mchrony, an NTP client/server\\u001b[0m.\\r\\nJun 25 04:35:40 notebooks2instance-ok chronyd[603]: Frequency -62.859 +/- 0.180 ppm read from /var/lib/chrony/chrony.drift\\r\\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Started chrony, an NTP client/server.\\r\\nJun 25 04:35:40 notebooks2instance-ok chronyd[603]: Loaded seccomp filter\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mSystem Time Synchronized\\u001b[0m.\\r\\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Reached target System Time Synchronized.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mDaily apt download activities\\u001b[0m.\\r\\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Started Daily apt download activities.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mDaily apt upgrade and clean activities\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mPeriodic ext4 Onli…ata Check for All Filesystems\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mDaily exim4-base housekeeping\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mDiscard unused blocks once a week\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mDaily rotation of log files\\u001b[0m.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mDaily man-db regeneration\\u001b[0m.\\r\\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Started Daily apt upgrade and clean activities.\\r\\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Started Periodic ext4 Online Metadata Check for All Filesystems.\\r\\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Started Daily exim4-base housekeeping.\\r\\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Started Discard unused blocks once a week.\\r\\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Started Daily rotation of log files.\\r\\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Started Daily man-db regeneration.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Reached target \\u001b[0;1;39mTimers\\u001b[0m.\\r\\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Reached target Timers.\\r\\n         Starting \\u001b[0;1;39mLSB: exim Mail Transport Agent\\u001b[0m...\\r\\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Starting LSB: exim Mail Transport Agent...\\r\\n[    6.145775] EXT4-fs (sda): mounted filesystem with ordered data mode. Opts: discard\\r\\nJun 25 04:35:40 notebooks2instance-ok kernel: [    6.145775] EXT4-fs (sda): mounted filesystem with ordered data mode. Opts: discard\\r\\nJun 25 04:35:40 notebooks2instance-ok exim4[607]: Starting MTA:\\r\\nJun 25 04:35:40 notebooks2instance-ok exim4[626]: /usr/sbin/update-exim4.conf: 154: cannot open /etc/mailname: No such file\\r\\nJun 25 04:35:40 notebooks2instance-ok google_guest_agent[577]: GCE Agent Started (version 20240528.00)\\r\\nJun 25 04:35:40 notebooks2instance-ok OSConfigAgent[578]: 2024-06-25T04:35:40.4487Z OSConfigAgent Info: OSConfig Agent (version 20240524.03-g1) started.\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40Z\\\" level=warning msg=\\\"containerd config version `1` has been deprecated and will be converted on each startup in containerd v2.0, use `containerd config migrate` after upgrading to containerd 2.0 to avoid conversion on startup\\\"\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40.724416490Z\\\" level=info msg=\\\"starting containerd\\\" revision=d2d58213f83a351ca8f528a95fbd145f5654e957 version=1.6.33\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40.797848059Z\\\" level=info msg=\\\"loading plugin \\\\\\\"io.containerd.snapshotter.v1.aufs\\\\\\\"...\\\" type=io.containerd.snapshotter.v1\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40.803697013Z\\\" level=info msg=\\\"skip loading plugin \\\\\\\"io.containerd.snapshotter.v1.aufs\\\\\\\"...\\\" error=\\\"aufs is not supported (modprobe aufs failed: exit status 1 \\\\\\\"modprobe: FATAL: Module aufs not found in directory /lib/modules/5.10.0-30-cloud-amd64\\\\\\\\n\\\\\\\"): skip plugin\\\" type=io.containerd.snapshotter.v1\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40.803753920Z\\\" level=info msg=\\\"loading plugin \\\\\\\"io.containerd.content.v1.content\\\\\\\"...\\\" type=io.containerd.content.v1\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40.804377883Z\\\" level=info msg=\\\"loading plugin \\\\\\\"io.containerd.snapshotter.v1.btrfs\\\\\\\"...\\\" type=io.containerd.snapshotter.v1\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40.804654042Z\\\" level=info msg=\\\"skip loading plugin \\\\\\\"io.containerd.snapshotter.v1.btrfs\\\\\\\"...\\\" error=\\\"path /var/lib/containerd/io.containerd.snapshotter.v1.btrfs (ext4) must be a btrfs filesystem to be used with the btrfs snapshotter: skip plugin\\\" type=io.containerd.snapshotter.v1\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40.804698852Z\\\" level=info msg=\\\"loading plugin \\\\\\\"io.containerd.snapshotter.v1.devmapper\\\\\\\"...\\\" type=io.containerd.snapshotter.v1\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40.804726784Z\\\" level=warning msg=\\\"failed to load plugin io.containerd.snapshotter.v1.devmapper\\\" error=\\\"devmapper not configured\\\"\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40.804745007Z\\\" level=info msg=\\\"loading plugin \\\\\\\"io.containerd.snapshotter.v1.native\\\\\\\"...\\\" type=io.containerd.snapshotter.v1\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40.805491340Z\\\" level=info msg=\\\"loading plugin \\\\\\\"io.containerd.snapshotter.v1.overlayfs\\\\\\\"...\\\" type=io.containerd.snapshotter.v1\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40.806804623Z\\\" level=info msg=\\\"loading plugin \\\\\\\"io.containerd.snapshotter.v1.zfs\\\\\\\"...\\\" type=io.containerd.snapshotter.v1\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40.807674129Z\\\" level=info msg=\\\"skip loading plugin \\\\\\\"io.containerd.snapshotter.v1.zfs\\\\\\\"...\\\" error=\\\"path /var/lib/containerd/io.containerd.snapshotter.v1.zfs must be a zfs filesystem to be used with the zfs snapshotter: skip plugin\\\" type=io.containerd.snapshotter.v1\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40.807730478Z\\\" level=info msg=\\\"loading plugin \\\\\\\"io.containerd.metadata.v1.bolt\\\\\\\"...\\\" type=io.containerd.metadata.v1\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40.807798825Z\\\" level=warning msg=\\\"could not use snapshotter devmapper in metadata plugin\\\" error=\\\"devmapper not configured\\\"\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40.807820043Z\\\" level=info msg=\\\"metadata content store policy set\\\" policy=shared\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mLSB: exim Mail Transport Agent\\u001b[0m.\\r\\nJun 25 04:35:40 notebooks2instance-ok exim4[607]:  exim4.\\r\\nJun 25 04:35:40 notebooks2instance-ok exim4[607]: ALERT: exim paniclog /var/log/exim4/paniclog has non-zero size, mail system possibly broken\\r\\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Started LSB: exim Mail Transport Agent.\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40.816953734Z\\\" level=info msg=\\\"loading plugin \\\\\\\"io.containerd.differ.v1.walking\\\\\\\"...\\\" type=io.containerd.differ.v1\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40.817022126Z\\\" level=info msg=\\\"loading plugin \\\\\\\"io.containerd.event.v1.exchange\\\\\\\"...\\\" type=io.containerd.event.v1\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40.817060865Z\\\" level=info msg=\\\"loading plugin \\\\\\\"io.containerd.gc.v1.scheduler\\\\\\\"...\\\" type=io.containerd.gc.v1\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40.817185439Z\\\" level=info msg=\\\"loading plugin \\\\\\\"io.containerd.runtime.v1.linux\\\\\\\"...\\\" type=io.containerd.runtime.v1\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40.817298862Z\\\" level=info msg=\\\"loading plugin \\\\\\\"io.containerd.runtime.v2.task\\\\\\\"...\\\" type=io.containerd.runtime.v2\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40.817381211Z\\\" level=info msg=\\\"loading plugin \\\\\\\"io.containerd.internal.v1.opt\\\\\\\"...\\\" type=io.containerd.internal.v1\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40.818336393Z\\\" level=info msg=\\\"loading plugin \\\\\\\"io.containerd.warning.v1.deprecations\\\\\\\"...\\\" type=io.containerd.warning.v1\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40.818393986Z\\\" level=info msg=\\\"loading plugin \\\\\\\"io.containerd.monitor.v1.cgroups\\\\\\\"...\\\" type=io.containerd.monitor.v1\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mcontainerd container runtime\\u001b[0m.\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40.821221873Z\\\" level=info msg=\\\"loading plugin \\\\\\\"io.containerd.service.v1.containers-service\\\\\\\"...\\\" type=io.containerd.service.v1\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40.821538932Z\\\" level=info msg=\\\"loading plugin \\\\\\\"io.containerd.service.v1.content-service\\\\\\\"...\\\" type=io.containerd.service.v1\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40.821587537Z\\\" level=info msg=\\\"loading plugin \\\\\\\"io.containerd.service.v1.diff-service\\\\\\\"...\\\" type=io.containerd.service.v1\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40.821627024Z\\\" level=info msg=\\\"loading plugin \\\\\\\"io.containerd.service.v1.images-service\\\\\\\"...\\\" type=io.containerd.service.v1\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40.821655748Z\\\" level=info msg=\\\"loading plugin \\\\\\\"io.containerd.service.v1.introspection-service\\\\\\\"...\\\" type=io.containerd.service.v1\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40.821680726Z\\\" level=info msg=\\\"loading plugin \\\\\\\"io.containerd.service.v1.leases-service\\\\\\\"...\\\" type=io.containerd.service.v1\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40.821704602Z\\\" level=info msg=\\\"loading plugin \\\\\\\"io.containerd.service.v1.namespaces-service\\\\\\\"...\\\" type=io.containerd.service.v1\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40.821729144Z\\\" level=info msg=\\\"loading plugin \\\\\\\"io.containerd.service.v1.snapshots-service\\\\\\\"...\\\" type=io.containerd.service.v1\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40.821756760Z\\\" level=info msg=\\\"loading plugin \\\\\\\"io.containerd.service.v1.tasks-service\\\\\\\"...\\\" type=io.containerd.service.v1\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40.821794240Z\\\" level=info msg=\\\"loading plugin \\\\\\\"io.containerd.grpc.v1.containers\\\\\\\"...\\\" type=io.containerd.grpc.v1\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40.821822772Z\\\" level=info msg=\\\"loading plugin \\\\\\\"io.containerd.grpc.v1.content\\\\\\\"...\\\" type=io.containerd.grpc.v1\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40.821846518Z\\\" level=info msg=\\\"loading plugin \\\\\\\"io.containerd.grpc.v1.diff\\\\\\\"...\\\" type=io.containerd.grpc.v1\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40.821873852Z\\\" level=info msg=\\\"loading plugin \\\\\\\"io.containerd.grpc.v1.events\\\\\\\"...\\\" type=io.containerd.grpc.v1\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40.821895440Z\\\" level=info msg=\\\"loading plugin \\\\\\\"io.containerd.grpc.v1.images\\\\\\\"...\\\" type=io.containerd.grpc.v1\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40.822173490Z\\\" level=info msg=\\\"loading plugin \\\\\\\"io.containerd.grpc.v1.introspection\\\\\\\"...\\\" type=io.containerd.grpc.v1\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40.822215603Z\\\" level=info msg=\\\"loading plugin \\\\\\\"io.containerd.grpc.v1.leases\\\\\\\"...\\\" type=io.containerd.grpc.v1\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40.822246152Z\\\" level=info msg=\\\"loading plugin \\\\\\\"io.containerd.grpc.v1.namespaces\\\\\\\"...\\\" type=io.containerd.grpc.v1\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40.822272098Z\\\" level=info msg=\\\"loading plugin \\\\\\\"io.containerd.grpc.v1.snapshots\\\\\\\"...\\\" type=io.containerd.grpc.v1\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40.822298296Z\\\" level=info msg=\\\"loading plugin \\\\\\\"io.containerd.grpc.v1.tasks\\\\\\\"...\\\" type=io.containerd.grpc.v1\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40.822325758Z\\\" level=info msg=\\\"loading plugin \\\\\\\"io.containerd.grpc.v1.version\\\\\\\"...\\\" type=io.containerd.grpc.v1\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40.822346787Z\\\" level=info msg=\\\"loading plugin \\\\\\\"io.containerd.tracing.processor.v1.otlp\\\\\\\"...\\\" type=[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mGoogle Compute Engine Guest Agent\\u001b[0m.\\r\\nio.containerd.tracing.processor.v1\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40.822388420Z\\\" level=info msg=\\\"skip loading plugin \\\\\\\"io.containerd.tracing.processor.v1.otlp\\\\\\\"...\\\" error=\\\"skip plugin: tracing endpoint not configured\\\" type=io.containerd.tracing.processor.v1\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40.822411135Z\\\" level=info msg=\\\"loading plugin \\\\\\\"io.containerd.internal.v1.tracing\\\\\\\"...\\\" type=io.containerd.internal.v1\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40.822434363Z\\\" level=info msg=\\\"skip loading plugin \\\\\\\"io.containerd.internal.v1.tracing\\\\\\\"...\\\" error=\\\"skip plugin: tracing endpoint not configured\\\" type=io.containerd.internal.v1\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40.822693609Z\\\" level=info msg=\\\"loading plugin \\\\\\\"io.containerd.internal.v1.restart\\\\\\\"...\\\" type=io.containerd.internal.v1\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40.823934361Z\\\" level=info msg=\\\"loading plugin \\\\\\\"io.containerd.grpc.v1.healthcheck\\\\\\\"...\\\" type=io.containerd.grpc.v1\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40.826891653Z\\\" level=info msg=serving... address=/run/containerd/containerd.sock.ttrpc\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40.826987891Z\\\" level=info msg=serving... address=/run/containerd/containerd.sock\\r\\nJun 25 04:35:40 notebooks2instance-ok containerd[590]: time=\\\"2024-06-25T04:35:40.827693982Z\\\" level=info msg=\\\"containerd successfully booted in 0.107063s\\\"\\r\\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Started containerd container runtime.\\r\\nJun 25 04:35:40 notebooks2instance-ok google_guest_agent[577]: Starting the scheduler to run jobs\\r\\nJun 25 04:35:40 notebooks2instance-ok google_guest_agent[577]: Scheduler - start: []\\r\\nJun 25 04:35:40 notebooks2instance-ok google_guest_agent[577]: Skipping scheduling credential generation job, failed to reach client credentials endpoint(instance/credentials/certs) with error: error connecting to metadata server, status code: 404\\r\\nJun 25 04:35:40 notebooks2instance-ok google_guest_agent[577]: ERROR scheduler.go:177 Failed to schedule job MTLS_MDS_Credential_Boostrapper with error: ShouldEnable() returned false, cannot schedule job MTLS_MDS_Credential_Boostrapper\\r\\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Started Google Compute Engine Guest Agent.\\r\\n         Starting \\u001b[0;1;39mDocker Application Container Engine\\u001b[0m...\\r\\n         Starting \\u001b[0;1;39mGoogle Compute Engine Startup Scripts\\u001b[0m...\\r\\nJun 25 04:35:40 notebooks2instance-ok dhclient[526]: XMT: Solicit on ens4, interval 1090ms.\\r\\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Starting Docker Application Container Engine...\\r\\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Starting Google Compute Engine Startup Scripts...\\r\\n         Starting \\u001b[0;1;39mOpenBSD Secure Shell server\\u001b[0m...\\r\\nJun 25 04:35:40 notebooks2instance-ok systemd[1]: Starting OpenBSD Secure Shell server...\\r\\nJun 25 04:35:41 notebooks2instance-ok google_guest_agent[577]: Starting the scheduler to run jobs\\r\\nJun 25 04:35:41 notebooks2instance-ok google_guest_agent[577]: No restorecon available, not restoring SELinux context of: /etc/ssh/oslogin_trustedca.pub\\r\\nJun 25 04:35:41 notebooks2instance-ok google_guest_agent[577]: Enabling OS Login\\r\\nJun 25 04:35:41 notebooks2instance-ok google_guest_agent[577]: Scheduling job: telemetryJobID\\r\\nJun 25 04:35:41 notebooks2instance-ok google_guest_agent[577]: Scheduling job \\\"telemetryJobID\\\" to run at 24.000000 hr interval\\r\\nJun 25 04:35:41 notebooks2instance-ok google_guest_agent[577]: Successfully scheduled job telemetryJobID\\r\\nJun 25 04:35:41 notebooks2instance-ok google_guest_agent[577]: Invoking job \\\"telemetryJobID\\\"\\r\\nJun 25 04:35:41 notebooks2instance-ok google_guest_agent[577]: Scheduler - added: [now 2024-06-25 04:35:41.042058866 +0000 UTC entry 1 next 2024-06-26 04:35:41 +0000 UTC]\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mOpenBSD Secure Shell server\\u001b[0m.\\r\\nJun 25 04:35:41 notebooks2instance-ok systemd[1]: Started OpenBSD Secure Shell server.\\r\\nJun 25 04:35:41 notebooks2instance-ok dhclient[1021]: Internet Systems Consortium DHCP Client 4.4.1\\r\\nJun 25 04:35:41 notebooks2instance-ok dhclient[1021]: Copyright 2004-2018 Internet Systems Consortium.\\r\\nJun 25 04:35:41 notebooks2instance-ok dhclient[1021]: All rights reserved.\\r\\nJun 25 04:35:41 notebooks2instance-ok dhclient[1021]: For info, please visit https://www.isc.org/software/dhcp/\\r\\nJun 25 04:35:41 notebooks2instance-ok dhclient[1021]: \\r\\nJun 25 04:35:41 notebooks2instance-ok dhclient[1021]: Listening on Socket/ens4\\r\\nJun 25 04:35:41 notebooks2instance-ok dhclient[1021]: Sending on   Socket/ens4\\r\\n         Stopping \\u001b[0;1;39mUser Login Management\\u001b[0m...\\r\\nJun 25 04:35:41 notebooks2instance-ok systemd[1]: Stopping User Login Management...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Stopped \\u001b[0;1;39mUser Login Management\\u001b[0m.\\r\\n         Starting \\u001b[0;1;39mLoad Kernel Module drm\\u001b[0m...\\r\\nJun 25 04:35:41 notebooks2instance-ok systemd[1]: systemd-logind.service: Succeeded.\\r\\nJun 25 04:35:41 notebooks2instance-ok systemd[1]: Stopped User Login Management.\\r\\nJun 25 04:35:41 notebooks2instance-ok systemd[1]: Starting Load Kernel Module drm...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mLoad Kernel Module drm\\u001b[0m.\\r\\nJun 25 04:35:41 notebooks2instance-ok systemd[1]: modprobe@drm.service: Succeeded.\\r\\nJun 25 04:35:41 notebooks2instance-ok systemd[1]: Finished Load Kernel Module drm.\\r\\n         Starting \\u001b[0;1;39mUser Login Management\\u001b[0m...\\r\\nJun 25 04:35:41 notebooks2instance-ok systemd[1]: Starting User Login Management...\\r\\nJun 25 04:35:41 notebooks2instance-ok google_metadata_script_runner[991]: Starting startup scripts (version dev).\\r\\nJun 25 04:35:41 notebooks2instance-ok google_metadata_script_runner[991]: No startup scripts to run.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mGoogle Compute Engine Startup Scripts\\u001b[0m.\\r\\nJun 25 04:35:41 notebooks2instance-ok systemd[1]: google-startup-scripts.service: Succeeded.\\r\\nJun 25 04:35:41 notebooks2instance-ok systemd[1]: Finished Google Compute Engine Startup Scripts.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mUser Login Management\\u001b[0m.\\r\\nJun 25 04:35:41 notebooks2instance-ok systemd[1]: Started User Login Management.\\r\\n         Stopping \\u001b[0;1;39mRegular background program processing daemon\\u001b[0m...\\r\\nJun 25 04:35:41 notebooks2instance-ok systemd[1]: Stopping Regular background program processing daemon...\\r\\nJun 25 04:35:41 notebooks2instance-ok systemd[1]: cron.service: Succeeded.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Stopped \\u001b[0;1;39mRegular background program processing daemon\\u001b[0m.\\r\\nJun 25 04:35:41 notebooks2instance-ok systemd[1]: Stopped Regular background program processing daemon.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mRegular background program processing daemon\\u001b[0m.\\r\\nJun 25 04:35:41 notebooks2instance-ok systemd[1]: Started Regular background program processing daemon.\\r\\nJun 25 04:35:41 notebooks2instance-ok systemd[1]: Reloading OpenBSD Secure Shell server.\\r\\nJun 25 04:35:41 notebooks2instance-ok systemd[1]: Reloaded OpenBSD Secure Shell server.\\r\\nJun 25 04:35:41 notebooks2instance-ok systemd[1]: google-wi-promote-premium.service: Succeeded.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m.\\r\\nJun 25 04:35:41 notebooks2instance-ok systemd[1]: Finished Removes premium features from DLVM..\\r\\nJun 25 04:35:41 notebooks2instance-ok systemd[1]: google-wi-promote-premium.service: Consumed 1.277s CPU time.\\r\\n         Starting \\u001b[0;1;39mChecks whether to…nce based on idle schedule.\\u001b[0m...\\r\\nJun 25 04:35:41 notebooks2instance-ok systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\r\\nJun 25 04:35:41 notebooks2instance-ok report_startup.sh[436]: Waiting for ready status...\\r\\nJun 25 04:35:41 notebooks2instance-ok dockerd[990]: time=\\\"2024-06-25T04:35:41.832647951Z\\\" level=info msg=\\\"Starting up\\\"\\r\\n[    7.778758] audit: type=1400 audit(1719290141.909:11): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"docker-default\\\" pid=1293 comm=\\\"apparmor_parser\\\"\\r\\nJun 25 04:35:41 notebooks2instance-ok dockerd[990]: time=\\\"2024-06-25T04:35:41.916593413Z\\\" level=info msg=\\\"parsed scheme: \\\\\\\"unix\\\\\\\"\\\" module=grpc\\r\\nJun 25 04:35:41 notebooks2instance-ok dockerd[990]: time=\\\"2024-06-25T04:35:41.916643812Z\\\" level=info msg=\\\"scheme \\\\\\\"unix\\\\\\\" not registered, fallback to default scheme\\\" module=grpc\\r\\nJun 25 04:35:41 notebooks2instance-ok kernel: [    7.778758] audit: type=1400 audit(1719290141.909:11): apparmor=\\\"STATUS\\\" operation=\\\"profile_load\\\" profile=\\\"unconfined\\\" name=\\\"docker-default\\\" pid=1293 comm=\\\"apparmor_parser\\\"\\r\\nJun 25 04:35:41 notebooks2instance-ok dockerd[990]: time=\\\"2024-06-25T04:35:41.917636058Z\\\" level=info msg=\\\"ccResolverWrapper: sending update to cc: {[{unix:///run/containerd/containerd.sock  \\u003cnil\\u003e 0 \\u003cnil\\u003e}] \\u003cnil\\u003e \\u003cnil\\u003e}\\\" module=grpc\\r\\nJun 25 04:35:41 notebooks2instance-ok dockerd[990]: time=\\\"2024-06-25T04:35:41.919762897Z\\\" level=info msg=\\\"ClientConn switching balancer to \\\\\\\"pick_first\\\\\\\"\\\" module=grpc\\r\\nJun 25 04:35:41 notebooks2instance-ok dockerd[990]: time=\\\"2024-06-25T04:35:41.941247890Z\\\" level=info msg=\\\"parsed scheme: \\\\\\\"unix\\\\\\\"\\\" module=grpc\\r\\nJun 25 04:35:41 notebooks2instance-ok dockerd[990]: time=\\\"2024-06-25T04:35:41.941294462Z\\\" level=info msg=\\\"scheme \\\\\\\"unix\\\\\\\" not registered, fallback to default scheme\\\" module=grpc\\r\\nJun 25 04:35:41 notebooks2instance-ok dockerd[990]: time=\\\"2024-06-25T04:35:41.941328836Z\\\" level=info msg=\\\"ccResolverWrapper: sending update to cc: {[{unix:///run/containerd/containerd.sock  \\u003cnil\\u003e 0 \\u003cnil\\u003e}] \\u003cnil\\u003e \\u003cnil\\u003e}\\\" module=grpc\\r\\nJun 25 04:35:41 notebooks2instance-ok dockerd[990]: time=\\\"2024-06-25T04:35:41.941349231Z\\\" level=info msg=\\\"ClientConn switching balancer to \\\\\\\"pick_first\\\\\\\"\\\" module=grpc\\r\\nJun 25 04:35:41 notebooks2instance-ok dockerd[990]: time=\\\"2024-06-25T04:35:41.972779867Z\\\" level=info msg=\\\"[graphdriver] using prior storage driver: overlay2\\\"\\r\\n[    7.826290] rc.local[623]: Using custom Proxy Registration URL https://us-west1.notebooks.cloud.google.com/tun/m/4592f092208ecc84946b8f8f8016274df1b36a14\\r\\nJun 25 04:35:41 notebooks2instance-ok rc.local[623]: Using custom Proxy Registration URL https://us-west1.notebooks.cloud.google.com/tun/m/4592f092208ecc84946b8f8f8016274df1b36a14\\r\\nJun 25 04:35:41 notebooks2instance-ok dockerd[990]: time=\\\"2024-06-25T04:35:41.995298470Z\\\" level=info msg=\\\"Loading containers: start.\\\"\\r\\n[    7.902058] bridge: filtering via arp/ip/ip6tables is no longer available by default. Update your scripts to load br_netfilter if you need this.\\r\\nJun 25 04:35:42 notebooks2instance-ok kernel: [    7.902058] bri[    7.910712] Bridge firewalling registered\\r\\ndge: filtering via arp/ip/ip6tables is no longer available by default. Update your scripts to load br_netfilter if you need this.\\r\\nJun 25 04:35:42 notebooks2instance-ok kernel: [    7.910712] Bridge firewalling registered\\r\\nJun 25 04:35:42 notebooks2instance-ok dhclient[526]: XMT: Solicit on ens4, interval 2230ms.\\r\\n[    8.132581] Initializing XFRM netlink socket\\r\\nJun 25 04:35:42 notebooks2instance-ok kernel: [    8.132581] Initializing XFRM netlink socket\\r\\nJun 25 04:35:42 notebooks2instance-ok systemd-udevd[246]: Using default interface naming scheme 'v247'.\\r\\nJun 25 04:35:42 notebooks2instance-ok systemd-udevd[246]: ethtool: autonegotiation is unset or enabled, the speed and duplex are not writable.\\r\\nJun 25 04:35:42 notebooks2instance-ok dockerd[990]: time=\\\"2024-06-25T04:35:42.538787466Z\\\" level=info msg=\\\"Default bridge (docker0) is assigned with an IP address 172.17.0.0/16. Daemon option --bip can be used to set a preferred IP address\\\"\\r\\nJun 25 04:35:42 notebooks2instance-ok dockerd[990]: time=\\\"2024-06-25T04:35:42.641792689Z\\\" level=info msg=\\\"Loading containers: done.\\\"\\r\\nJun 25 04:35:42 notebooks2instance-ok systemd[1]: var-lib-docker-overlay2-opaque\\\\x2dbug\\\\x2dcheck4022206465-merged.mount: Succeeded.\\r\\nJun 25 04:35:42 notebooks2instance-ok dockerd[990]: time=\\\"2024-06-25T04:35:42.799576478Z\\\" level=info msg=\\\"Docker daemon\\\" commit=a89b842 graphdriver(s)=overlay2 version=20.10.17\\r\\nJun 25 04:35:42 notebooks2instance-ok dockerd[990]: time=\\\"2024-06-25T04:35:42.801618497Z\\\" level=info msg=\\\"Daemon has completed initialization\\\"\\r\\nJun 25 04:35:42 notebooks2instance-ok report_startup.sh[436]: Waiting for ready status...\\r\\nJun 25 04:35:42 notebooks2instance-ok check_idle_shutdown.sh[1277]: Setting an origin timestamp 1719290142 as a minimum base for idle calculations.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mDocker Application Container Engine\\u001b[0m.\\r\\nJun 25 04:35:42 notebooks2instance-ok systemd[1]: Started Docker Application Container Engine.\\r\\nJun 25 04:35:42 notebooks2instance-ok dockerd[990]: time=\\\"2024-06-25T04:35:42.869101442Z\\\" level=info msg=\\\"API listen on /run/docker.sock\\\"\\r\\n[    8.790752] rc.local[1314]: Getting Regional Proxy Agent configuration. Region: us-west1\\r\\nJun 25 04:35:42 notebooks2instance-ok rc.local[1314]: Getting Regional Proxy Agent configuration. Region: us-west1\\r\\nJun 25 04:35:43 notebooks2instance-ok check_idle_shutdown.sh[1277]: Setting last notebook activity timestamp 1719290142 at 1719290143 for the following reason: Reason - latest session activity - replaced by later instance creation date\\r\\nJun 25 04:35:43 notebooks2instance-ok systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mChecks whether to…tance based on idle schedule.\\u001b[0m.\\r\\nJun 25 04:35:43 notebooks2instance-ok systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\r\\nJun 25 04:35:43 notebooks2instance-ok systemd[1]: google-wi-idle-shutdown.service: Consumed 1.233s CPU time.\\r\\n[    9.054430] rc.local[1491]:      0K                                                       100% 9.14M=0s\\r\\nJun 25 04:35:43 notebooks2instance-ok rc.local[1491]:      0K                                                       100% 9.14M=0s\\r\\n[    9.055302] rc.local[623]: use-shim-websockets: false\\r\\nJun 25 04:35:43 notebooks2instance-ok rc.local[623]: use-shim-websockets: false\\r\\nJun 25 04:35:43 notebooks2instance-ok report_startup.sh[436]: Waiting for ready status...\\r\\n[    9.878995] rc.local[1539]: Getting Regional Proxy Agent configuration. Region: us-west1\\r\\nJun 25 04:35:44 notebooks2instance-ok rc.local[1539]: Getting Regional Proxy Agent configuration. Region: us-west1\\r\\n[    9.990330] rc.local[1565]:      0K                                                       100% 4.69M=0s\\r\\nJun 25 04:35:44 notebooks2instance-ok rc.local[1565]:      0K                                                       100% 4.69M=0s\\r\\n[    9.990773] rc.local[623]: Notebooks Proxy Agent installation completed\\r\\nJun 25 04:35:44 notebooks2instance-ok rc.local[623]: Notebooks Proxy Agent installation completed\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mGoogle Notebooks Proxy Agent Service\\u001b[0m.\\r\\nJun 25 04:35:44 notebooks2instance-ok systemd[1]: Started Google Notebooks Proxy Agent Service.\\r\\n[   10.005497] rc.local[623]: Proxy Agent service started\\r\\nJun 25 04:35:44 notebooks2instance-ok rc.local[623]: Proxy Agent service started\\r\\nJun 25 04:35:44 notebooks2instance-ok dhclient[526]: XMT: Solicit on ens4, interval 4440ms.\\r\\nJun 25 04:35:44 notebooks2instance-ok proxy-forwarding-agent[1574]: 2024/06/25 04:35:44 Skipping metric handler initialization due to empty arguments.\\r\\nJun 25 04:35:44 notebooks2instance-ok proxy-forwarding-agent[1574]: 2024/06/25 04:35:44 Health Check request failed: Get \\\"http://localhost:8080/api/kernelspecs\\\": dial tcp [::1]:8080: connect: connection refused\\r\\nJun 25 04:35:44 notebooks2instance-ok chronyd[603]: Selected source 169.254.169.254 (metadata.google.internal)\\r\\nJun 25 04:35:44 notebooks2instance-ok report_startup.sh[436]: Waiting for ready status...\\r\\n[   10.786539] rc.local[1575]: Installing NVIDIA driver\\r\\nJun 25 04:35:44 notebooks2instance-ok rc.local[1575]: Installing NVIDIA driver\\r\\n[   11.536978] rc.local[1620]: Binary swap is disabled, exiting.\\r\\nJun 25 04:35:45 notebooks2instance-ok rc.local[1620]: Binary swap is disabled, exiting.\\r\\nJun 25 04:35:45 notebooks2instance-ok report_startup.sh[436]: Waiting for ready status...\\r\\n[   12.333025] rc.local[1629]: Ignoring config cgroup-memory-reserve value\\r\\nJun 25 04:35:46 notebooks2instance-ok rc.local[1629]: Ignoring config cgroup-memory-reserve value\\r\\n[   12.350935] rc.local[1629]: Ignoring config cgroup-memory-shim value\\r\\nJun 25 04:35:46 notebooks2instance-ok rc.local[1629]: Ignoring config cgroup-memory-shim value\\r\\nJun 25 04:35:46 notebooks2instance-ok bash[439]: I0625 04:35:46.503646 140146769454912 notebooks_collection_agent.py:2527] Vertex Notebooks Collection Agent starting...['/opt/deeplearning/bin/notebooks_collection_agent.py']\\r\\nJun 25 04:35:46 notebooks2instance-ok bash[439]: W0625 04:35:46.514634 140146769454912 notebooks_collection_agent.py:395] http://metadata/computeMetadata/v1/instance/attributes/ai-platform-api:404\\r\\n[   12.369865] rc.local[1629]: Ignoring config cgroup-memory-min-jupyter value\\r\\nJun 25 04:35:46 notebooks2instance-ok rc.local[1629]: Ignoring config cgroup-memory-min-jupyter value\\r\\nJun 25 04:35:46 notebooks2instance-ok bash[439]: W0625 04:35:46.523070 140146769454912 notebooks_collection_agent.py:395] http://metadata/computeMetadata/v1/instance/attributes/runtime-resource-name:404\\r\\n[   12.382804] rc.local[1629]: Jupyter Service will use maximum of 16455854464 bytes with high limit 16405854464 bytes.\\r\\nJun 25 04:35:46 notebooks2instance-ok rc.local[1629]: Jupyter Service will use maximum of 16455854464 bytes with high limit 16405854464 bytes.\\r\\nJun 25 04:35:46 notebooks2instance-ok bash[439]: W0625 04:35:46.542021 140146769454912 notebooks_collection_agent.py:395] http://metadata/computeMetadata/v1/instance/attributes/custom-container-image:404\\r\\nJun 25 04:35:46 notebooks2instance-ok bash[439]: I0625 04:35:46.542385 140146769454912 notebooks_collection_agent.py:1426] Checking container base image...\\r\\nJun 25 04:35:46 notebooks2instance-ok bash[439]: I0625 04:35:46.550775 140146769454912 notebooks_collection_agent.py:1428] Metadata title:workbench\\r\\nJun 25 04:35:46 notebooks2instance-ok bash[439]: I0625 04:35:46.559611 140146769454912 notebooks_collection_agent.py:1433] Metadata framework:workbench\\r\\nJun 25 04:35:46 notebooks2instance-ok bash[439]: I0625 04:35:46.559833 140146769454912 notebooks_collection_agent.py:1413] Checking if Notebook has Terminal enabled...\\r\\nJun 25 04:35:46 notebooks2instance-ok bash[439]: W0625 04:35:46.568146 140146769454912 notebooks_collection_agent.py:395] http://metadata/computeMetadata/v1/instance/attributes/notebook-disable-terminal:404\\r\\nJun 25 04:35:46 notebooks2instance-ok bash[439]: I0625 04:35:46.568519 140146769454912 notebooks_collection_agent.py:1417] Metadata notebook-disable-terminal:None\\r\\n[   12.421999] rc.local[1629]: Jupyter user is: jupyter\\r\\nJun 25 04:35:46 notebooks2instance-ok rc.local[1629]: Jupyter user is: jupyter\\r\\nJun 25 04:35:46 notebooks2instance-ok bash[439]: W0625 04:35:46.577194 140146769454912 notebooks_collection_agent.py:395] http://metadata/computeMetadata/v1/instance/attributes/report-container-health:404\\r\\nJun 25 04:35:46 notebooks2instance-ok bash[439]: I0625 04:35:46.577726 140146769454912 notebooks_collection_agent.py:1600] Metadata report-container-health:None\\r\\nJun 25 04:35:46 notebooks2instance-ok bash[439]: W0625 04:35:46.577885 140146769454912 notebooks_collection_agent.py:1603] Metadata `report-container-health=False` or is not set.\\r\\nJun 25 04:35:46 notebooks2instance-ok bash[439]: I0625 04:35:46.590438 140146769454912 notebooks_collection_agent.py:1483] Metadata report-dns-resolution:true\\r\\nJun 25 04:35:46 notebooks2instance-ok bash[439]: I0625 04:35:46.599349 140146769454912 notebooks_collection_agent.py:1536] Metadata report-event-health:true\\r\\nJun 25 04:35:46 notebooks2instance-ok bash[439]: W0625 04:35:46.611069 140146769454912 notebooks_collection_agent.py:395] http://metadata/computeMetadata/v1/instance/attributes/report-event-maintenance:404\\r\\nJun 25 04:35:46 notebooks2instance-ok bash[439]: I0625 04:35:46.611639 140146769454912 notebooks_collection_agent.py:1555] Metadata report-host-event:None\\r\\nJun 25 04:35:46 notebooks2instance-ok bash[439]: W0625 04:35:46.611790 140146769454912 notebooks_collection_agent.py:1558] Metadata `report-event-maintenance=False` or is not set.\\r\\nJun 25 04:35:46 notebooks2instance-ok bash[439]: W0625 04:35:46.620186 140146769454912 notebooks_collection_agent.py:395] http://metadata/computeMetadata/v1/instance/attributes/report-local-metrics:404\\r\\nJun 25 04:35:46 notebooks2instance-ok bash[439]: I0625 04:35:46.620815 140146769454912 notebooks_collection_agent.py:1632] Metadata report-local-metrics:None\\r\\nJun 25 04:35:46 notebooks2instance-ok bash[439]: W0625 04:35:46.620977 140146769454912 notebooks_collection_agent.py:1635] Metadata `report-local-metrics=False` or is not set.\\r\\nJun 25 04:35:46 notebooks2instance-ok bash[439]: W0625 04:35:46.629152 140146769454912 notebooks_collection_agent.py:395] http://metadata/computeMetadata/v1/instance/attributes/report-notebook-metrics:404\\r\\nJun 25 04:35:46 notebooks2instance-ok bash[439]: I0625 04:35:46.629534 140146769454912 notebooks_collection_agent.py:1616] Metadata report-notebook-metrics:None\\r\\nJun 25 04:35:46 notebooks2instance-ok bash[439]: W0625 04:35:46.630044 140146769454912 notebooks_collection_agent.py:1619] Metadata `report-notebook-metrics=False` or is not set.\\r\\n[   12.488689] rc.local[1629]: disable-mixer is set to \\\"true\\\" and product is WORKBENCH_INSTANCE. is_dataproc_enabled():0\\r\\nJun 25 04:35:46 notebooks2instance-ok rc.local[1629]: disable-mixer is set to \\\"true\\\" and product is WORKBENCH_INSTANCE. is_dataproc_enabled():0\\r\\nJun 25 04:35:46 notebooks2instance-ok bash[439]: I0625 04:35:46.663649 140146769454912 notebooks_collection_agent.py:1804] Metadata notebooks-api: PROD | Metadata project/project-id: gcpdiag-notebooks2-aaaa | Metadata instance/name: notebooks2instance-ok | Metadata instance/zone: us-west1-a\\r\\nJun 25 04:35:46 notebooks2instance-ok bash[439]: I0625 04:35:46.664042 140146769454912 notebooks_collection_agent.py:1814] Workbench instance resource name: projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-ok.\\r\\n[   12.768832] rc.local[1669]: Enabling nb_conda_kernels...\\r\\nJun 25 04:35:46 notebooks2instance-ok bash[439]: I0625 04:35:46.664488 140146769454912 notebooks_collection_agent.py:1442] Checking if Notebook has Runtime OS Enum State Interface enabled...\\r\\nJun 25 04:35:46 notebooks2instance-ok bash[439]: W0625 04:35:46.672652 140146769454912 notebooks_collection_agent.py:395] http://metadata/computeMetadata/v1/instance/attributes/enable-runtime-os-enum-state-interface:404\\r\\nJun 25 04:35:46 notebooks2instance-ok bash[439]: I0625 04:35:46.672920 140146769454912 notebooks_collection_agent.py:1448] Metadata runtime-os-enum-state-interface:None\\r\\nJun 25 04:35:46 notebooks2instance-ok bash[439]: I0625 04:35:46.673036 140146769454912 notebooks_collection_agent.py:1459] Checking should report error enum states to gce guest_attributes...\\r\\nJun 25 04:35:46 notebooks2instance-ok bash[439]: W0625 04:35:46.690995 140146769454912 notebooks_collection_agent.py:395] http://metadata/computeMetadata/v1/instance/attributes/report-error-enum-states-by-guest-attribute:404\\r\\nJun 25 04:35:46 notebooks2instance-ok bash[439]: I0625 04:35:46.691291 140146769454912 notebooks_collection_agent.py:1465] Metadata report-error-enum-states-by-guest-attribute:None\\r\\nJun 25 04:35:46 notebooks2instance-ok bash[439]: Collecting metrics...Product: Product.WORKBENCH_INSTANCE\\r\\nJun 25 04:35:46 notebooks2instance-ok report_startup.sh[436]: Waiting for ready status...\\r\\nJun 25 04:35:46 notebooks2instance-ok bash[439]: I0625 04:35:46.837245 140146769454912 notebooks_collection_agent.py:761] {'client': \\u003cgoogle.cloud.monitoring_v3.services.metric_service.client.MetricServiceClient object at 0x7f7672b62fb0\\u003e, 'instance_id': '7519326121542266893', 'zone': 'us-west1-a', 'project_id': 'gcpdiag-notebooks2-nuc97nsk', 'project_number': '12340012', 'name': 'notebooks2instance-ok'}\\r\\nJun 25 04:35:46 notebooks2instance-ok bash[439]: W0625 04:35:46.865958 140146769454912 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f76729f2aa0\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:35:46 notebooks2instance-ok rc.local[1669]: Enabling nb_conda_kernels...\\r\\n[   12.884637] rc.local[1669]: CONDA_PREFIX: /opt/conda/envs/jupyterlab\\r\\nJun 25 04:35:47 notebooks2instance-ok rc.local[1669]: CONDA_PREFIX: /opt/conda/envs/jupyterlab\\r\\n[   12.884766] rc.local[1669]: Status: enabled\\r\\nJun 25 04:35:47 notebooks2instance-ok rc.local[1669]: Status: enabled\\r\\nJun 25 04:35:47 notebooks2instance-ok bash[437]: [W 2024-06-25 04:35:47.797 ServerApp] ServerApp.token config is deprecated in 2.0. Use IdentityProvider.token.\\r\\nJun 25 04:35:47 notebooks2instance-ok report_startup.sh[436]: Waiting for ready status...\\r\\nJun 25 04:35:48 notebooks2instance-ok dhclient[526]: XMT: Solicit on ens4, interval 9090ms.\\r\\nJun 25 04:35:48 notebooks2instance-ok report_startup.sh[436]: Waiting for ready status...\\r\\nJun 25 04:35:48 notebooks2instance-ok bash[439]: W0625 04:35:48.867240 140146769454912 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f76729f2a70\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:35:49 notebooks2instance-ok report_startup.sh[436]: Waiting for ready status...\\r\\nJun 25 04:35:50 notebooks2instance-ok report_startup.sh[436]: Waiting for ready status...\\r\\n[   17.560202] rc.local[1697]: Extension package beatrix_jupyterlab took 3.9812s to import\\r\\nJun 25 04:35:51 notebooks2instance-ok rc.local[1697]: Extension package beatrix_jupyterlab took 3.9812s to import\\r\\nJun 25 04:35:51 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:51.711 ServerApp] Extension package beatrix_jupyterlab took 3.8948s to import\\r\\n[   17.702881] rc.local[1697]: Extension package jupyter_server_proxy took 0.1421s to import\\r\\nJun 25 04:35:51 notebooks2instance-ok rc.local[1697]: Extension package jupyter_server_proxy took 0.1421s to import\\r\\nJun 25 04:35:51 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:51.854 ServerApp] Extension package jupyter_server_proxy took 0.1268s to import\\r\\nJun 25 04:35:51 notebooks2instance-ok report_startup.sh[436]: Waiting for ready status...\\r\\n[   17.989853] rc.local[1697]: Extension package jupyter_server_ydoc took 0.2622s to import\\r\\nJun 25 04:35:52 notebooks2instance-ok rc.local[1697]: Extension package jupyter_server_ydoc took 0.2622s to import\\r\\nJun 25 04:35:52 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:52.140 ServerApp] Extension package jupyter_server_ydoc took 0.2626s to import\\r\\nJun 25 04:35:52 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:52.576 ServerApp] Extension package jupyterlab_jupytext took 0.3800s to import\\r\\nJun 25 04:35:52 notebooks2instance-ok bash[437]: [W 2024-06-25 04:35:52.583 ServerApp] A `_jupyter_server_extension_points` function was not found in nbclassic. Instead, a `_jupyter_server_extension_paths` function was found and will be used for now. This function name will be deprecated in future releases of Jupyter Server.\\r\\nJun 25 04:35:52 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:52.586 ServerApp] beatrix_jupyterlab | extension was successfully linked.\\r\\nJun 25 04:35:52 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:52.598 ServerApp] jupyter_server_fileid | extension was successfully linked.\\r\\nJun 25 04:35:52 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:52.608 ServerApp] jupyter_server_mathjax | extension was successfully linked.\\r\\nJun 25 04:35:52 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:52.608 ServerApp] jupyter_server_proxy | extension was successfully linked.\\r\\nJun 25 04:35:52 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:52.615 ServerApp] jupyter_server_terminals | extension was successfully linked.\\r\\nJun 25 04:35:52 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:52.624 ServerApp] jupyter_server_ydoc | extension was successfully linked.\\r\\nJun 25 04:35:52 notebooks2instance-ok bash[437]: [W 2024-06-25 04:35:52.626 LabApp] 'kernel_spec_manager_class' has moved from NotebookApp to ServerApp. This config will be passed to ServerApp. Be sure to update your config before our next release.\\r\\nJun 25 04:35:52 notebooks2instance-ok bash[437]: [W 2024-06-25 04:35:52.628 LabApp] 'kernel_spec_manager_class' has moved from NotebookApp to ServerApp. This config will be passed to ServerApp. Be sure to update your config before our next release.\\r\\nJun 25 04:35:52 notebooks2instance-ok bash[437]: [W 2024-06-25 04:35:52.628 LabApp] 'kernel_spec_manager_class' has moved from NotebookApp to ServerApp. This config will be passed to ServerApp. Be sure to update your config before our next release.\\r\\nJun 25 04:35:52 notebooks2instance-ok bash[437]: [W 2024-06-25 04:35:52.628 LabApp] 'terminado_settings' has moved from NotebookApp to ServerApp. This config will be passed to ServerApp. Be sure to update your config before our next release.\\r\\nJun 25 04:35:52 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:52.635 ServerApp] jupyterlab | extension was successfully linked.\\r\\nJun 25 04:35:52 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:52.635 ServerApp] jupyterlab_git | extension was successfully linked.\\r\\nJun 25 04:35:52 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:52.635 ServerApp] jupyterlab_jupytext | extension was successfully linked.\\r\\nJun 25 04:35:52 notebooks2instance-ok bash[437]: [W 2024-06-25 04:35:52.638 NotebookApp] 'kernel_spec_manager_class' has moved from NotebookApp to ServerApp. This config will be passed to ServerApp. Be sure to update your config before our next release.\\r\\nJun 25 04:35:52 notebooks2instance-ok bash[437]: [W 2024-06-25 04:35:52.748 NotebookApp] 'terminado_settings' has moved from NotebookApp to ServerApp. This config will be passed to ServerApp. Be sure to update your config before our next release.\\r\\nJun 25 04:35:52 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:52.752 ServerApp] nbclassic | extension was successfully linked.\\r\\nJun 25 04:35:52 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:52.753 ServerApp] nbdime | extension was successfully linked.\\r\\n[   18.651833] rc.local[1697]: A `_jupyter_server_extension_points` function was not found in nbclassic. Instead, a `_jupyter_server_extension_paths` function was found and will be used for now. This function name will be deprecated in future releases of Jupyter Server.\\r\\nJun 25 04:35:52 notebooks2instance-ok rc.local[1697]: A `_jupyter_server_extension_points` function was not found in nbclassic. Instead, a `_jupyter_server_extension_paths` function was found and will be used for now. This function name will be deprecated in future releases of Jupyter Server.\\r\\n[   18.653289] rc.local[1697]: Disabling: dataproc_jupyter_plugin\\r\\nJun 25 04:35:52 notebooks2instance-ok rc.local[1697]: Disabling: dataproc_jupyter_plugin\\r\\n[   18.653445] rc.local[1697]: - Writing config: /opt/conda/envs/jupyterlab/etc/jupyter\\r\\nJun 25 04:35:52 notebooks2instance-ok rc.local[1697]: - Writing config: /opt/conda/envs/jupyterlab/etc/jupyter\\r\\n[   18.653555] rc.local[1697]:     - Validating dataproc_jupyter_plugin...\\r\\nJun 25 04:35:52 notebooks2instance-ok rc.local[1697]:     - Validating dataproc_jupyter_plugin...\\r\\n[   18.653657] rc.local[1697]:       dataproc_jupyter_plugin  \\u001b[32mOK\\u001b[0m\\r\\nJun 25 04:35:52 notebooks2instance-ok rc.local[1697]:       dataproc_jupyter_plugin  #033[32mOK#033[0m\\r\\n[   18.654341] rc.local[1697]:     - Extension successfully disabled.\\r\\nJun 25 04:35:52 notebooks2instance-ok rc.local[1697]:     - Extension successfully disabled.\\r\\nJun 25 04:35:52 notebooks2instance-ok report_startup.sh[436]: Waiting for ready status...\\r\\nJun 25 04:35:52 notebooks2instance-ok bash[439]: W0625 04:35:52.871255 140146769454912 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f76729f3430\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:35:52 notebooks2instance-ok bash[439]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f76729f3610\\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\\r\\nJun 25 04:35:52 notebooks2instance-ok bash[439]: W0625 04:35:52.874245 140146769454912 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f76729f3e80\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:35:53 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:53.040 ServerApp] Extension package nb_conda took 0.2776s to import\\r\\nJun 25 04:35:53 notebooks2instance-ok bash[437]: [W 2024-06-25 04:35:53.040 ServerApp] A `_jupyter_server_extension_points` function was not found in nb_conda. Instead, a `_jupyter_server_extension_paths` function was found and will be used for now. This function name will be deprecated in future releases of Jupyter Server.\\r\\nJun 25 04:35:53 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:53.041 ServerApp] nb_conda | extension was found and enabled by notebook_shim. Consider moving the extension to Jupyter Server's extension paths.\\r\\nJun 25 04:35:53 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:53.041 ServerApp] nb_conda | extension was successfully linked.\\r\\nJun 25 04:35:53 notebooks2instance-ok bash[437]: [W 2024-06-25 04:35:53.046 ServerApp] A `_jupyter_server_extension_points` function was not found in jupyter_http_over_ws. Instead, a `_jupyter_server_extension_paths` function was found and will be used for now. This function name will be deprecated in future releases of Jupyter Server.\\r\\nJun 25 04:35:53 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:53.047 ServerApp] jupyter_http_over_ws | extension was found and enabled by notebook_shim. Consider moving the extension to Jupyter Server's extension paths.\\r\\nJun 25 04:35:53 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:53.047 ServerApp] jupyter_http_over_ws | extension was successfully linked.\\r\\nJun 25 04:35:53 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:53.047 ServerApp] notebook_shim | extension was successfully linked.\\r\\nJun 25 04:35:53 notebooks2instance-ok report_startup.sh[436]: Waiting for ready status...\\r\\nJun 25 04:35:53 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:53.949 ServerApp] nb_conda_kernels | enabled, 3 kernels found.\\r\\nJun 25 04:35:53 notebooks2instance-ok bash[437]: /opt/conda/envs/jupyterlab/lib/python3.10/site-packages/traitlets/traitlets.py:1241: UserWarning: Overriding existing pre_save_hook (metadata_env_pre_save) with a new one (metadata_env_pre_save).\\r\\nJun 25 04:35:53 notebooks2instance-ok bash[437]:   return self.func(*args, **kwargs)\\r\\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [W 2024-06-25 04:35:54.020 ServerApp] All authentication is disabled.  Anyone who can connect to this server will be able to run code.\\r\\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.021 ServerApp] notebook_shim | extension was successfully loaded.\\r\\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.023 ServerApp] beatrix_jupyterlab | extension was successfully loaded.\\r\\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.024 ServerApp] jupyter_http_over_ws | extension was successfully loaded.\\r\\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.024 FileIdExtension] Configured File ID manager: ArbitraryFileIdManager\\r\\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.025 FileIdExtension] ArbitraryFileIdManager : Configured root dir: /home/jupyter\\r\\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.025 FileIdExtension] ArbitraryFileIdManager : Configured database path: /home/jupyter/.local/share/jupyter/file_id_manager.db\\r\\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.032 FileIdExtension] ArbitraryFileIdManager : Successfully connected to database file.\\r\\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.033 FileIdExtension] ArbitraryFileIdManager : Creating File ID tables and indices with journal_mode = DELETE\\r\\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.038 FileIdExtension] Attached event listeners.\\r\\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.039 ServerApp] jupyter_server_fileid | extension was successfully loaded.\\r\\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.040 ServerApp] jupyter_server_mathjax | extension was successfully loaded.\\r\\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.054 ServerApp] jupyter_server_proxy | extension was successfully loaded.\\r\\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.055 ServerApp] jupyter_server_terminals | extension was successfully loaded.\\r\\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.056 ServerApp] jupyter_server_ydoc | extension was successfully loaded.\\r\\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.079 LabApp] JupyterLab extension loaded from /opt/conda/envs/jupyterlab/lib/python3.10/site-packages/jupyterlab\\r\\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.079 LabApp] JupyterLab application directory is /opt/conda/envs/jupyterlab/share/jupyter/lab\\r\\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.086 ServerApp] jupyterlab | extension was successfully loaded.\\r\\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.095 ServerApp] jupyterlab_git | extension was successfully loaded.\\r\\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [W 2024-06-25 04:35:54.095 ServerApp] [Jupytext Server Extension] Async contents managers like AsyncLargeFileManager are not supported at the moment (https://github.com/mwouts/jupytext/issues/1020). We will derive a contents manager from LargeFileManager instead.\\r\\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.095 ServerApp] [Jupytext Server Extension] Deriving a JupytextContentsManager from LargeFileManager\\r\\nJun 25 04:35:54 notebooks2instance-ok bash[437]: /opt/conda/envs/jupyterlab/lib/python3.10/site-packages/traitlets/traitlets.py:1241: UserWarning: Overriding existing pre_save_hook (metadata_env_pre_save) with a new one (metadata_env_pre_save).\\r\\nJun 25 04:35:54 notebooks2instance-ok bash[437]:   return self.func(*args, **kwargs)\\r\\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.098 ServerApp] jupyterlab_jupytext | extension was successfully loaded.\\r\\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.099 ServerApp] [nb_conda] enabled\\r\\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.099 ServerApp] nb_conda | extension was successfully loaded.\\r\\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.113 ServerApp] nbclassic | extension was successfully loaded.\\r\\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.289 ServerApp] nbdime | extension was successfully loaded.\\r\\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.290 ServerApp] Serving notebooks from local directory: /home/jupyter\\r\\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.291 ServerApp] Jupyter Server 2.14.1 is running at:\\r\\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.291 ServerApp] http://localhost:8080/lab\\r\\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.291 ServerApp]     http://127.0.0.1:8080/lab\\r\\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:54.291 ServerApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).\\r\\nJun 25 04:35:54 notebooks2instance-ok bash[437]: [W 2024-06-25 04:35:54.298 ServerApp] No web browser found: Error('could not locate runnable browser').\\r\\nJun 25 04:35:54 notebooks2instance-ok report_startup.sh[436]: Waiting for ready status...\\r\\nJun 25 04:35:54 notebooks2instance-ok bash[439]: W0625 04:35:54.875217 140146769454912 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f7672a300a0\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mJupyter Notebook Service\\u001b[0m.\\r\\nJun 25 04:35:54 notebooks2instance-ok systemd[1]: Started Jupyter Notebook Service.\\r\\n[   20.881073] rc.local[1776]: [W 2024-06-25 04:35:55.031 LabApp] 'kernel_spec_manager_class' has moved from NotebookApp to ServerApp. This config will be passed to ServerApp. Be sure to update your config before our next release.\\r\\nJun 25 04:35:55 notebooks2instance-ok rc.local[1776]: [W 2024-06-25 04:35:55.031 LabApp] 'kernel_spec_manager_class' has moved from NotebookApp to ServerApp. This config will be passed to ServerApp. Be sure to update your config before our next release.\\r\\n[   21.491187] rc.local[1629]: Disabling nb_conda_kernels extension...\\r\\nJun 25 04:35:55 notebooks2instance-ok rc.local[1629]: Disabling nb_conda_kernels extension...\\r\\n[   21.696761] rc.local[1845]: Disabling nb_conda_kernels...\\r\\n[   21.696937] rc.local[1845]: CONDA_PREFIX: /opt/conda/envs/jupyterlab\\r\\n[   21.697017] rc.local[1845]: Target path: /opt/conda/etc/jupyter\\r\\nJun 25 04:35:55 notebooks2instance-ok rc.local[1845]: Disabling nb_conda_kernels...\\r\\nJun 25 04:35:55 notebooks2instance-ok rc.local[1845]: CONDA_PREFIX: /opt/conda/envs/jupyterlab\\r\\nJun 25 04:35:55 notebooks2instance-ok rc.local[1845]: Target path: /opt/conda/etc/jupyter\\r\\n[   21.697111] rc.local[1845]: WARNING: the configuration for the current environment\\r\\nJun 25 04:35:55 notebooks2instance-ok rc.local[1845]: WARNING: the configuration for the current environment\\r\\n[   21.697206] rc.local[1845]: is not affected by the target configuration path.\\r\\nJun 25 04:35:55 notebooks2instance-ok rc.local[1845]: is not affected by the target configuration path.\\r\\n[   21.707114] rc.local[1845]: Status: enabled\\r\\nJun 25 04:35:55 notebooks2instance-ok rc.local[1845]: Status: enabled\\r\\nJun 25 04:35:55 notebooks2instance-ok report_startup.sh[436]: Waiting for ready status...\\r\\n[   21.773265] rc.local[1629]: Enabling terminal\\r\\nJun 25 04:35:55 notebooks2instance-ok rc.local[1629]: Enabling terminal\\r\\nJun 25 04:35:56 notebooks2instance-ok report_startup.sh[436]: Waiting for ready status...\\r\\nJun 25 04:35:57 notebooks2instance-ok dhclient[526]: XMT: Solicit on ens4, interval 17690ms.\\r\\nJun 25 04:35:57 notebooks2instance-ok report_startup.sh[436]: Waiting for ready status...\\r\\n[   23.996596] rc.local[1852]: Extension package beatrix_jupyterlab took 1.6106s to import\\r\\nJun 25 04:35:58 notebooks2instance-ok rc.local[1852]: Extension package beatrix_jupyterlab took 1.6106s to import\\r\\n[   24.695858] rc.local[1852]: A `_jupyter_server_extension_points` function was not found in nbclassic. Instead, a `_jupyter_server_extension_paths` function was found and will be used for now. This function name will be deprecated in future releases of Jupyter Server.\\r\\nJun 25 04:35:58 notebooks2instance-ok rc.local[1852]: A `_jupyter_server_extension_points` function was not found in nbclassic. Instead, a `_jupyter_server_extension_paths` function was found and will be used for now. This function name will be deprecated in future releases of Jupyter Server.\\r\\n[   24.697275] rc.local[1852]: Enabling: jupyter_server_terminals\\r\\nJun 25 04:35:58 notebooks2instance-ok rc.local[1852]: Enabling: jupyter_server_terminals\\r\\n[   24.697603] rc.local[1852]: - Writing config: /opt/conda/envs/jupyterlab/etc/jupyter\\r\\nJun 25 04:35:58 notebooks2instance-ok rc.local[1852]: - Writing config: /opt/conda/envs/jupyterlab/etc/jupyter\\r\\n[   24.697706] rc.local[1852]:     - Validating jupyter_server_terminals...\\r\\nJun 25 04:35:58 notebooks2instance-ok rc.local[1852]:     - Validating jupyter_server_terminals...\\r\\n[   24.697785] rc.local[1852]:       jupyter_server_terminals  \\u001b[32mOK\\u001b[0m\\r\\nJun 25 04:35:58 notebooks2instance-ok rc.local[1852]:       jupyter_server_terminals  #033[32mOK#033[0m\\r\\n[   24.698239] rc.local[1852]:     - Extension successfully enabled.\\r\\nJun 25 04:35:58 notebooks2instance-ok rc.local[1852]:     - Extension successfully enabled.\\r\\nJun 25 04:35:58 notebooks2instance-ok report_startup.sh[436]: Waiting for ready status...\\r\\nJun 25 04:35:59 notebooks2instance-ok systemd[1]: Reloading.\\r\\n         Stopping \\u001b[0;1;39mJupyter Notebook Service\\u001b[0m...\\r\\nJun 25 04:35:59 notebooks2instance-ok bash[437]: [C 2024-06-25 04:35:59.535 ServerApp] received signal 15, stopping\\r\\nJun 25 04:35:59 notebooks2instance-ok systemd[1]: Stopping Jupyter Notebook Service...\\r\\nJun 25 04:35:59 notebooks2instance-ok bash[437]: [I 2024-06-25 04:35:59.536 ServerApp] Shutting down 15 extensions\\r\\nJun 25 04:35:59 notebooks2instance-ok bash[437]: 404 Client Error: Not Found for url: http://metadata/computeMetadata/v1/instance/attributes/notebook-enable-debug\\r\\nJun 25 04:35:59 notebooks2instance-ok bash[437]: 404 Client Error: Not Found for url: http://metadata/computeMetadata/v1/instance/attributes/runtime-resource-name\\r\\nJun 25 04:35:59 notebooks2instance-ok bash[437]: Metadata notebooks-api-version:v2\\r\\nJun 25 04:35:59 notebooks2instance-ok bash[437]: 404 Client Error: Not Found for url: http://metadata/computeMetadata/v1/instance/attributes/disable-check-xsrf\\r\\nJun 25 04:35:59 notebooks2instance-ok bash[437]: 404 Client Error: Not Found for url: http://metadata/computeMetadata/v1/instance/attributes/use-collaborative\\r\\nJun 25 04:35:59 notebooks2instance-ok bash[437]: 404 Client Error: Not Found for url: http://metadata/computeMetadata/v1/instance/attributes/notebook-disable-downloads\\r\\nJun 25 04:35:59 notebooks2instance-ok bash[437]: 404 Client Error: Not Found for url: http://metadata/computeMetadata/v1/instance/attributes/notebook-disable-terminal\\r\\nJun 25 04:35:59 notebooks2instance-ok bash[437]: 404 Client Error: Not Found for url: http://metadata/computeMetadata/v1/instance/attributes/notebook-enable-delete-to-trash\\r\\nJun 25 04:35:59 notebooks2instance-ok bash[437]: 404 Client Error: Not Found for url: http://metadata/computeMetadata/v1/instance/attributes/jupyter-user\\r\\nJun 25 04:35:59 notebooks2instance-ok bash[437]: 404 Client Error: Not Found for url: http://metadata/computeMetadata/v1/instance/attributes/notebook-enable-gateway-client\\r\\nJun 25 04:35:59 notebooks2instance-ok bash[437]: Metadata proxy-url:341a9c04117d5a9e-dot-us-west1.notebooks.googleusercontent.com\\r\\nJun 25 04:35:59 notebooks2instance-ok bash[437]: Metadata proxy-byoid-url:341a9c04117d5a9e-dot-us-west1.notebooks.byoid.googleusercontent.com\\r\\nJun 25 04:35:59 notebooks2instance-ok bash[437]: 404 Client Error: Not Found for url: http://metadata/computeMetadata/v1/instance/attributes/notebook-enable-debug\\r\\nJun 25 04:35:59 notebooks2instance-ok bash[437]: 404 Client Error: Not Found for url: http://metadata/computeMetadata/v1/instance/attributes/runtime-resource-name\\r\\nJun 25 04:35:59 notebooks2instance-ok bash[437]: Metadata notebooks-api-version:v2\\r\\nJun 25 04:35:59 notebooks2instance-ok bash[437]: 404 Client Error: Not Found for url: http://metadata/computeMetadata/v1/instance/attributes/disable-check-xsrf\\r\\nJun 25 04:35:59 notebooks2instance-ok bash[437]: 404 Client Error: Not Found for url: http://metadata/computeMetadata/v1/instance/attributes/use-collaborative\\r\\nJun 25 04:35:59 notebooks2instance-ok bash[437]: 404 Client Error: Not Found for url: http://metadata/computeMetadata/v1/instance/attributes/notebook-disable-downloads\\r\\nJun 25 04:35:59 notebooks2instance-ok bash[437]: 404 Client Error: Not Found for url: http://metadata/computeMetadata/v1/instance/attributes/notebook-disable-terminal\\r\\nJun 25 04:35:59 notebooks2instance-ok bash[437]: 404 Client Error: Not Found for url: http://metadata/computeMetadata/v1/instance/attributes/notebook-enable-delete-to-trash\\r\\nJun 25 04:35:59 notebooks2instance-ok bash[437]: 404 Client Error: Not Found for url: http://metadata/computeMetadata/v1/instance/attributes/jupyter-user\\r\\nJun 25 04:35:59 notebooks2instance-ok bash[437]: 404 Client Error: Not Found for url: http://metadata/computeMetadata/v1/instance/attributes/notebook-enable-gateway-client\\r\\nJun 25 04:35:59 notebooks2instance-ok bash[437]: Metadata proxy-url:341a9c04117d5a9e-dot-us-west1.notebooks.googleusercontent.com\\r\\nJun 25 04:35:59 notebooks2instance-ok bash[437]: Metadata proxy-byoid-url:341a9c04117d5a9e-dot-us-west1.notebooks.byoid.googleusercontent.com\\r\\nJun 25 04:35:59 notebooks2instance-ok bash[437]: jupyter_http_over_ws extension initialized. Listening on /http_over_websocket\\r\\nJun 25 04:35:59 notebooks2instance-ok bash[437]:   _   _          _      _\\r\\nJun 25 04:35:59 notebooks2instance-ok bash[437]:  | | | |_ __  __| |__ _| |_ ___\\r\\nJun 25 04:35:59 notebooks2instance-ok bash[437]:  | |_| | '_ \\\\/ _` / _` |  _/ -_)\\r\\nJun 25 04:35:59 notebooks2instance-ok bash[437]:   \\\\___/| .__/\\\\__,_\\\\__,_|\\\\__\\\\___|\\r\\nJun 25 04:35:59 notebooks2instance-ok bash[437]:        |_|\\r\\nJun 25 04:35:59 notebooks2instance-ok bash[437]:                                                                            \\r\\nJun 25 04:35:59 notebooks2instance-ok bash[437]: Read the migration plan to Notebook 7 to learn about the new features and the actions to take if you are using extensions.\\r\\nJun 25 04:35:59 notebooks2instance-ok bash[437]: https://jupyter-notebook.readthedocs.io/en/latest/migrate_to_notebook7.html\\r\\nJun 25 04:35:59 notebooks2instance-ok bash[437]: Please note that updating to Notebook 7 might break some of your extensions.\\r\\nJun 25 04:35:59 notebooks2instance-ok report_startup.sh[436]: Waiting for ready status...\\r\\nJun 25 04:36:00 notebooks2instance-ok systemd[1]: jupyter.service: Succeeded.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Stopped \\u001b[0;1;39mJupyter Notebook Service\\u001b[0m.\\r\\nJun 25 04:36:00 notebooks2instance-ok systemd[1]: Stopped Jupyter Notebook Service.\\r\\nJun 25 04:36:00 notebooks2instance-ok systemd[1]: jupyter.service: Consumed 9.254s CPU time.\\r\\n         Starting \\u001b[0;1;39mJupyter Notebook Service\\u001b[0m...\\r\\nJun 25 04:36:00 notebooks2instance-ok systemd[1]: Starting Jupyter Notebook Service...\\r\\nJun 25 04:36:00 notebooks2instance-ok report_startup.sh[436]: Waiting for ready status...\\r\\nJun 25 04:36:01 notebooks2instance-ok report_startup.sh[436]: Waiting for ready status...\\r\\nJun 25 04:36:02 notebooks2instance-ok bash[1905]: [W 2024-06-25 04:36:02.862 ServerApp] ServerApp.token config is deprecated in 2.0. Use IdentityProvider.token.\\r\\nJun 25 04:36:02 notebooks2instance-ok report_startup.sh[436]: Waiting for ready status...\\r\\nJun 25 04:36:03 notebooks2instance-ok report_startup.sh[436]: Waiting for ready status...\\r\\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:04.472 ServerApp] Extension package beatrix_jupyterlab took 1.5989s to import\\r\\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [W 2024-06-25 04:36:04.662 ServerApp] A `_jupyter_server_extension_points` function was not found in nbclassic. Instead, a `_jupyter_server_extension_paths` function was found and will be used for now. This function name will be deprecated in future releases of Jupyter Server.\\r\\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:04.664 ServerApp] beatrix_jupyterlab | extension was successfully linked.\\r\\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:04.670 ServerApp] jupyter_server_fileid | extension was successfully linked.\\r\\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:04.676 ServerApp] jupyter_server_mathjax | extension was successfully linked.\\r\\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:04.676 ServerApp] jupyter_server_proxy | extension was successfully linked.\\r\\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:04.682 ServerApp] jupyter_server_terminals | extension was successfully linked.\\r\\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:04.688 ServerApp] jupyter_server_ydoc | extension was successfully linked.\\r\\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [W 2024-06-25 04:36:04.689 LabApp] 'kernel_spec_manager_class' has moved from NotebookApp to ServerApp. This config will be passed to ServerApp. Be sure to update your config before our next release.\\r\\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [W 2024-06-25 04:36:04.690 LabApp] 'kernel_spec_manager_class' has moved from NotebookApp to ServerApp. This config will be passed to ServerApp. Be sure to update your config before our next release.\\r\\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [W 2024-06-25 04:36:04.691 LabApp] 'kernel_spec_manager_class' has moved from NotebookApp to ServerApp. This config will be passed to ServerApp. Be sure to update your config before our next release.\\r\\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [W 2024-06-25 04:36:04.691 LabApp] 'terminado_settings' has moved from NotebookApp to ServerApp. This config will be passed to ServerApp. Be sure to update your config before our next release.\\r\\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:04.695 ServerApp] jupyterlab | extension was successfully linked.\\r\\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:04.695 ServerApp] jupyterlab_git | extension was successfully linked.\\r\\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:04.695 ServerApp] jupyterlab_jupytext | extension was successfully linked.\\r\\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [W 2024-06-25 04:36:04.697 NotebookApp] 'kernel_spec_manager_class' has moved from NotebookApp to ServerApp. This config will be passed to ServerApp. Be sure to update your config before our next release.\\r\\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [W 2024-06-25 04:36:04.785 NotebookApp] 'terminado_settings' has moved from NotebookApp to ServerApp. This config will be passed to ServerApp. Be sure to update your config before our next release.\\r\\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:04.788 ServerApp] nbclassic | extension was successfully linked.\\r\\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:04.789 ServerApp] nbdime | extension was successfully linked.\\r\\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:04.905 ServerApp] Extension package nb_conda took 0.1115s to import\\r\\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [W 2024-06-25 04:36:04.905 ServerApp] A `_jupyter_server_extension_points` function was not found in nb_conda. Instead, a `_jupyter_server_extension_paths` function was found and will be used for now. This function name will be deprecated in future releases of Jupyter Server.\\r\\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:04.906 ServerApp] nb_conda | extension was found and enabled by notebook_shim. Consider moving the extension to Jupyter Server's extension paths.\\r\\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:04.906 ServerApp] nb_conda | extension was successfully linked.\\r\\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [W 2024-06-25 04:36:04.907 ServerApp] A `_jupyter_server_extension_points` function was not found in jupyter_http_over_ws. Instead, a `_jupyter_server_extension_paths` function was found and will be used for now. This function name will be deprecated in future releases of Jupyter Server.\\r\\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:04.908 ServerApp] jupyter_http_over_ws | extension was found and enabled by notebook_shim. Consider moving the extension to Jupyter Server's extension paths.\\r\\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:04.908 ServerApp] jupyter_http_over_ws | extension was successfully linked.\\r\\nJun 25 04:36:04 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:04.908 ServerApp] notebook_shim | extension was successfully linked.\\r\\nJun 25 04:36:04 notebooks2instance-ok report_startup.sh[436]: Waiting for ready status...\\r\\nJun 25 04:36:05 notebooks2instance-ok bash[439]: W0625 04:36:05.380526 140146769454912 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f76729f3550\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.670 ServerApp] nb_conda_kernels | enabled, 3 kernels found.\\r\\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: /opt/conda/envs/jupyterlab/lib/python3.10/site-packages/traitlets/traitlets.py:1241: UserWarning: Overriding existing pre_save_hook (metadata_env_pre_save) with a new one (metadata_env_pre_save).\\r\\nJun 25 04:36:05 notebooks2instance-ok bash[1905]:   return self.func(*args, **kwargs)\\r\\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [W 2024-06-25 04:36:05.691 ServerApp] All authentication is disabled.  Anyone who can connect to this server will be able to run code.\\r\\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.692 ServerApp] notebook_shim | extension was successfully loaded.\\r\\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.694 ServerApp] beatrix_jupyterlab | extension was successfully loaded.\\r\\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.695 ServerApp] jupyter_http_over_ws | extension was successfully loaded.\\r\\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.695 FileIdExtension] Configured File ID manager: ArbitraryFileIdManager\\r\\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.695 FileIdExtension] ArbitraryFileIdManager : Configured root dir: /home/jupyter\\r\\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.695 FileIdExtension] ArbitraryFileIdManager : Configured database path: /home/jupyter/.local/share/jupyter/file_id_manager.db\\r\\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.696 FileIdExtension] ArbitraryFileIdManager : Successfully connected to database file.\\r\\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.696 FileIdExtension] ArbitraryFileIdManager : Creating File ID tables and indices with journal_mode = DELETE\\r\\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.697 FileIdExtension] Attached event listeners.\\r\\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.697 ServerApp] jupyter_server_fileid | extension was successfully loaded.\\r\\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.698 ServerApp] jupyter_server_mathjax | extension was successfully loaded.\\r\\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.710 ServerApp] jupyter_server_proxy | extension was successfully loaded.\\r\\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.712 ServerApp] jupyter_server_terminals | extension was successfully loaded.\\r\\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.713 ServerApp] jupyter_server_ydoc | extension was successfully loaded.\\r\\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.715 LabApp] JupyterLab extension loaded from /opt/conda/envs/jupyterlab/lib/python3.10/site-packages/jupyterlab\\r\\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.715 LabApp] JupyterLab application directory is /opt/conda/envs/jupyterlab/share/jupyter/lab\\r\\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.719 ServerApp] jupyterlab | extension was successfully loaded.\\r\\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.727 ServerApp] jupyterlab_git | extension was successfully loaded.\\r\\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [W 2024-06-25 04:36:05.728 ServerApp] [Jupytext Server Extension] Async contents managers like AsyncLargeFileManager are not supported at the moment (https://github.com/mwouts/jupytext/issues/1020). We will derive a contents manager from LargeFileManager instead.\\r\\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.728 ServerApp] [Jupytext Server Extension] Deriving a JupytextContentsManager from LargeFileManager\\r\\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: /opt/conda/envs/jupyterlab/lib/python3.10/site-packages/traitlets/traitlets.py:1241: UserWarning: Overriding existing pre_save_hook (metadata_env_pre_save) with a new one (metadata_env_pre_save).\\r\\nJun 25 04:36:05 notebooks2instance-ok bash[1905]:   return self.func(*args, **kwargs)\\r\\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.729 ServerApp] jupyterlab_jupytext | extension was successfully loaded.\\r\\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.731 ServerApp] [nb_conda] enabled\\r\\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.731 ServerApp] nb_conda | extension was successfully loaded.\\r\\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.734 ServerApp] nbclassic | extension was successfully loaded.\\r\\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.790 ServerApp] nbdime | extension was successfully loaded.\\r\\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.791 ServerApp] Serving notebooks from local directory: /home/jupyter\\r\\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.791 ServerApp] Jupyter Server 2.14.1 is running at:\\r\\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.791 ServerApp] http://localhost:8080/lab\\r\\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.791 ServerApp]     http://127.0.0.1:8080/lab\\r\\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [I 2024-06-25 04:36:05.791 ServerApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).\\r\\nJun 25 04:36:05 notebooks2instance-ok bash[1905]: [W 2024-06-25 04:36:05.795 ServerApp] No web browser found: Error('could not locate runnable browser').\\r\\nJun 25 04:36:05 notebooks2instance-ok report_startup.sh[436]: Waiting for ready status...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Started \\u001b[0;1;39mJupyter Notebook Service\\u001b[0m.\\r\\nJun 25 04:36:06 notebooks2instance-ok systemd[1]: Started Jupyter Notebook Service.\\r\\n[   32.634552] rc.local[2082]: Checking if must disable root...\\r\\nJun 25 04:36:06 notebooks2instance-ok rc.local[2082]: Checking if must disable root...\\r\\n[   32.634797] rc.local[2082]: Checking if must uninstall nbconvert...\\r\\nJun 25 04:36:06 notebooks2instance-ok rc.local[2082]: Checking if must uninstall nbconvert...\\r\\n[   32.634885] rc.local[2082]: Checking if must restart jupyter service...\\r\\nJun 25 04:36:06 notebooks2instance-ok rc.local[2082]: Checking if must restart jupyter service...\\r\\n[   32.648297] rc.local[2102]: cat: /opt/deeplearning/metadata/restriction: No such file or directory\\r\\nJun 25 04:36:06 notebooks2instance-ok rc.local[2102]: cat: /opt/deeplearning/metadata/restriction: No such file or directory\\r\\nJun 25 04:36:06 notebooks2instance-ok report_startup.sh[436]: Waiting for ready status...\\r\\n[   32.884301] rc.local[2098]: Reporting METADATA_CHANGE event to endpoint: https://notebooks.googleapis.com/v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-ok:reportInfoSystem\\r\\nJun 25 04:36:07 notebooks2instance-ok rc.local[2098]: Reporting METADATA_CHANGE event to endpoint: https://notebooks.googleapis.com/v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-ok:reportInfoSystem\\r\\nJun 25 04:36:07 notebooks2instance-ok bash[439]: W0625 04:36:07.383346 140146769454912 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f76729f2b90\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\n[   33.756333] rc.local[2149]:   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\\r\\nJun 25 04:36:07 notebooks2instance-ok rc.local[2149]:   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\\r\\n[   33.756777] rc.local[2149]:                                  Dload  Upload   Total   Spent    Left  Speed\\r\\nJun 25 04:36:07 notebooks2instance-ok rc.local[2149]:                                  Dload  Upload   Total   Spent    Left  Speed\\r\\nJun 25 04:36:07 notebooks2instance-ok report_startup.sh[436]: Ready status received\\r\\n[   33.892996] rc.local[2149]: \\r  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0\\r100  1307    0     0  100  1307      0   9540 --:--:-- --:--:-- --:--:--  9540\\r\\nJun 25 04:36:08 notebooks2instance-ok rc.local[2149]: #015  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0#015100  1307    0     0  100  1307      0   9540 --:--:-- --:--:-- --:--:--  9540\\r\\n[   33.893483] rc.local[2149]: curl: (22) The requested URL returned error: 409\\r\\nJun 25 04:36:08 notebooks2instance-ok rc.local[2149]: curl: (22) The requested URL returned error: 409\\r\\nJun 25 04:36:08 notebooks2instance-ok report_startup.sh[436]: Reporting HEARTBEAT event to endpoint: https://notebooks.googleapis.com/v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-ok:reportInfoSystem\\r\\n[   34.477472] rc.local[2189]: Vertex Workbench Health Agent already installed...\\r\\nJun 25 04:36:08 notebooks2instance-ok rc.local[2189]: Vertex Workbench Health Agent already installed...\\r\\nJun 25 04:36:08 notebooks2instance-ok report_startup.sh[2211]:   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\\r\\nJun 25 04:36:08 notebooks2instance-ok report_startup.sh[2211]:                                  Dload  Upload   Total   Spent    Left  Speed\\r\\nJun 25 04:36:09 notebooks2instance-ok report_startup.sh[2211]: #015  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0#015100  1692    0   543  100  1149   3620   7660 --:--:-- --:--:-- --:--:-- 11280\\r\\nJun 25 04:36:09 notebooks2instance-ok report_startup.sh[436]: Report HEARTBEAT event completed. (0)\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mPolls for whether…d and reports Heartbeat event\\u001b[0m.\\r\\nJun 25 04:36:09 notebooks2instance-ok systemd[1]: Finished Polls for whether all services from Notebooks has started and reports Heartbeat event.\\r\\n[   35.079287] rc.local[2234]: Setting up cron schedule for diagnostic check if does not exist\\r\\nJun 25 04:36:09 notebooks2instance-ok rc.local[2234]: Setting up cron schedule for diagnostic check if does not exist\\r\\n[   35.083051] rc.local[2243]: * * * * * Jun 25 04:36:09 notebooks2instance-ok systemd[1]\\r\\r\\nDebian GNU/Linux 11 notebooks2instance-ok ttyS0\\r\\n\\r\\nnotebooks2instance-ok login: Jun 25 04:36:15 notebooks2instance-ok dhclient[526]: XMT: Solicit on ens4, interval 35130ms.\\r\\nJun 25 04:36:50 notebooks2instance-ok dhclient[526]: XMT: Solicit on ens4, interval 69480ms.\\r\\nJun 25 04:37:04 notebooks2instance-ok systemd[1]: Starting Removes premium features from DLVM....\\r\\nJun 25 04:37:04 notebooks2instance-ok systemd[1]: google-wi-promote-premium.service: Succeeded.\\r\\nJun 25 04:37:04 notebooks2instance-ok systemd[1]: Finished Removes premium features from DLVM..\\r\\nJun 25 04:37:04 notebooks2instance-ok systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\r\\nJun 25 04:37:05 notebooks2instance-ok check_idle_shutdown.sh[2343]: Setting last notebook activity timestamp 1719290142 at 1719290225 for the following reason: Reason - latest session activity - replaced by later instance creation date\\r\\nJun 25 04:37:05 notebooks2instance-ok systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\r\\nJun 25 04:37:05 notebooks2instance-ok systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\r\\nJun 25 04:38:00 notebooks2instance-ok dhclient[526]: XMT: Solicit on ens4, interval 123740ms.\\r\\nJun 25 04:38:09 notebooks2instance-ok systemd[1]: Starting Removes premium features from DLVM....\\r\\nJun 25 04:38:10 notebooks2instance-ok systemd[1]: google-wi-promote-premium.service: Succeeded.\\r\\nJun 25 04:38:10 notebooks2instance-ok systemd[1]: Finished Removes premium features from DLVM..\\r\\nJun 25 04:38:10 notebooks2instance-ok systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\r\\nJun 25 04:38:10 notebooks2instance-ok check_idle_shutdown.sh[2507]: Setting last notebook activity timestamp 1719290142 at 1719290290 for the following reason: Reason - latest session activity - replaced by later instance creation date\\r\\nJun 25 04:38:10 notebooks2instance-ok systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\r\\nJun 25 04:38:10 notebooks2instance-ok systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\r\\nJun 25 04:39:10 notebooks2instance-ok systemd[1]: Starting Removes premium features from DLVM....\\r\\nJun 25 04:39:10 notebooks2instance-ok systemd[1]: google-wi-promote-premium.service: Succeeded.\\r\\nJun 25 04:39:10 notebooks2instance-ok systemd[1]: Finished Removes premium features from DLVM..\\r\\nJun 25 04:39:10 notebooks2instance-ok systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\r\\nJun 25 04:39:11 notebooks2instance-ok check_idle_shutdown.sh[2661]: Setting last notebook activity timestamp 1719290142 at 1719290351 for the following reason: Reason - latest session activity - replaced by later instance creation date\\r\\nJun 25 04:39:11 notebooks2instance-ok systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\r\\nJun 25 04:39:11 notebooks2instance-ok systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\r\\nJun 25 04:40:03 notebooks2instance-ok dhclient[526]: XMT: Solicit on ens4, interval 112790ms.\\r\\nJun 25 04:40:11 notebooks2instance-ok systemd[1]: Starting Removes premium features from DLVM....\\r\\nJun 25 04:40:12 notebooks2instance-ok systemd[1]: google-wi-promote-premium.service: Succeeded.\\r\\nJun 25 04:40:12 notebooks2instance-ok systemd[1]: Finished Removes premium features from DLVM..\\r\\nJun 25 04:40:12 notebooks2instance-ok systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\r\\nJun 25 04:40:12 notebooks2instance-ok check_idle_shutdown.sh[2810]: Setting last notebook activity timestamp 1719290142 at 1719290412 for the following reason: Reason - latest session activity - replaced by later instance creation date\\r\\nJun 25 04:40:12 notebooks2instance-ok systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\r\\nJun 25 04:40:12 notebooks2instance-ok systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\r\\nJun 25 04:41:12 notebooks2instance-ok systemd[1]: Starting Removes premium features from DLVM....\\r\\nJun 25 04:41:13 notebooks2instance-ok systemd[1]: google-wi-promote-premium.service: Succeeded.\\r\\nJun 25 04:41:13 notebooks2instance-ok systemd[1]: Finished Removes premium features from DLVM..\\r\\nJun 25 04:41:13 notebooks2instance-ok systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\r\\nJun 25 04:41:13 notebooks2instance-ok check_idle_shutdown.sh[2966]: Setting last notebook activity timestamp 1719290142 at 1719290473 for the following reason: Reason - latest session activity - replaced by later instance creation date\\r\\nJun 25 04:41:13 notebooks2instance-ok systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\r\\nJun 25 04:41:13 notebooks2instance-ok systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\r\\nJun 25 04:41:56 notebooks2instance-ok dhclient[526]: XMT: Solicit on ens4, interval 121430ms.\\r\\nJun 25 04:42:13 notebooks2instance-ok systemd[1]: Starting Removes premium features from DLVM....\\r\\nJun 25 04:42:14 notebooks2instance-ok systemd[1]: google-wi-promote-premium.service: Succeeded.\\r\\nJun 25 04:42:14 notebooks2instance-ok systemd[1]: Finished Removes premium features from DLVM..\\r\\nJun 25 04:42:14 notebooks2instance-ok systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\r\\nJun 25 04:42:14 notebooks2instance-ok check_idle_shutdown.sh[3122]: Setting last notebook activity timestamp 1719290142 at 1719290534 for the following reason: Reason - latest session activity - replaced by later instance creation date\\r\\nJun 25 04:42:14 notebooks2instance-ok systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\r\\nJun 25 04:42:14 notebooks2instance-ok systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\r\\nJun 25 04:43:14 notebooks2instance-ok systemd[1]: Starting Removes premium features from DLVM....\\r\\nJun 25 04:43:15 notebooks2instance-ok systemd[1]: google-wi-promote-premium.service: Succeeded.\\r\\nJun 25 04:43:15 notebooks2instance-ok systemd[1]: Finished Removes premium features from DLVM..\\r\\nJun 25 04:43:15 notebooks2instance-ok systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\r\\nJun 25 04:43:15 notebooks2instance-ok check_idle_shutdown.sh[3271]: Setting last notebook activity timestamp 1719290142 at 1719290595 for the following reason: Reason - latest session activity - replaced by later instance creation date\\r\\nJun 25 04:43:15 notebooks2instance-ok systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\r\\nJun 25 04:43:15 notebooks2instance-ok systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\r\\nJun 25 04:43:58 notebooks2instance-ok dhclient[526]: XMT: Solicit on ens4, interval 130210ms.\\r\\nJun 25 04:44:15 notebooks2instance-ok systemd[1]: Starting Removes premium features from DLVM....\\r\\nJun 25 04:44:16 notebooks2instance-ok systemd[1]: google-wi-promote-premium.service: Succeeded.\\r\\nJun 25 04:44:16 notebooks2instance-ok systemd[1]: Finished Removes premium features from DLVM..\\r\\nJun 25 04:44:16 notebooks2instance-ok systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\r\\nJun 25 04:44:16 notebooks2instance-ok check_idle_shutdown.sh[3430]: Setting last notebook activity timestamp 1719290142 at 1719290656 for the following reason: Reason - latest session activity - replaced by later instance creation date\\r\\nJun 25 04:44:16 notebooks2instance-ok systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\r\\nJun 25 04:44:16 notebooks2instance-ok systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\r\\nJun 25 04:45:16 notebooks2instance-ok systemd[1]: Starting Removes premium features from DLVM....\\r\\nJun 25 04:45:17 notebooks2instance-ok systemd[1]: google-wi-promote-premium.service: Succeeded.\\r\\nJun 25 04:45:17 notebooks2instance-ok systemd[1]: Finished Removes premium features from DLVM..\\r\\nJun 25 04:45:17 notebooks2instance-ok systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\r\\nJun 25 04:45:17 notebooks2instance-ok check_idle_shutdown.sh[3578]: Setting last notebook activity timestamp 1719290142 at 1719290717 for the following reason: Reason - latest session activity - replaced by later instance creation date\\r\\nJun 25 04:45:17 notebooks2instance-ok systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\r\\nJun 25 04:45:17 notebooks2instance-ok systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\r\\nJun 25 04:45:40 notebooks2instance-ok systemd[1]: Starting GCE Workload Certificate refresh...\\r\\nJun 25 04:45:40 notebooks2instance-ok gce_workload_cert_refresh[3630]: 2024/06/25 04:45:40: Done\\r\\nJun 25 04:45:40 notebooks2instance-ok systemd[1]: gce-workload-cert-refresh.service: Succeeded.\\r\\nJun 25 04:45:40 notebooks2instance-ok systemd[1]: Finished GCE Workload Certificate refresh.\\r\\nJun 25 04:46:08 notebooks2instance-ok dhclient[526]: XMT: Solicit on ens4, interval 131070ms.\\r\\nJun 25 04:46:17 notebooks2instance-ok systemd[1]: Starting Removes premium features from DLVM....\\r\\nJun 25 04:46:18 notebooks2instance-ok systemd[1]: google-wi-promote-premium.service: Succeeded.\\r\\nJun 25 04:46:18 notebooks2instance-ok systemd[1]: Finished Removes premium features from DLVM..\\r\\nJun 25 04:46:18 notebooks2instance-ok systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\r\\nJun 25 04:46:18 notebooks2instance-ok check_idle_shutdown.sh[3737]: Setting last notebook activity timestamp 1719290142 at 1719290778 for the following reason: Reason - latest session activity - replaced by later instance creation date\\r\\nJun 25 04:46:18 notebooks2instance-ok systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\r\\nJun 25 04:46:18 notebooks2instance-ok systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\r\\nJun 25 04:47:18 notebooks2instance-ok systemd[1]: Starting Removes premium features from DLVM....\\r\\nJun 25 04:47:19 notebooks2instance-ok systemd[1]: google-wi-promote-premium.service: Succeeded.\\r\\nJun 25 04:47:19 notebooks2instance-ok systemd[1]: Finished Removes premium features from DLVM..\\r\\nJun 25 04:47:19 notebooks2instance-ok systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\r\\nJun 25 04:47:19 notebooks2instance-ok check_idle_shutdown.sh[3885]: Setting last notebook activity timestamp 1719290142 at 1719290839 for the following reason: Reason - latest session activity - replaced by later instance creation date\\r\\nJun 25 04:47:19 notebooks2instance-ok systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\r\\nJun 25 04:47:19 notebooks2instance-ok systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\r\\nJun 25 04:48:19 notebooks2instance-ok dhclient[526]: XMT: Solicit on ens4, interval 116240ms.\\r\\nJun 25 04:48:19 notebooks2instance-ok systemd[1]: Starting Removes premium features from DLVM....\\r\\nJun 25 04:48:20 notebooks2instance-ok systemd[1]: google-wi-promote-premium.service: Succeeded.\\r\\nJun 25 04:48:20 notebooks2instance-ok systemd[1]: Finished Removes premium features from DLVM..\\r\\nJun 25 04:48:20 notebooks2instance-ok systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\r\\nJun 25 04:48:20 notebooks2instance-ok check_idle_shutdown.sh[4040]: Setting last notebook activity timestamp 1719290142 at 1719290900 for the following reason: Reason - latest session activity - replaced by later instance creation date\\r\\nJun 25 04:48:20 notebooks2instance-ok systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\r\\nJun 25 04:48:20 notebooks2instance-ok systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\r\\nJun 25 04:49:20 notebooks2instance-ok systemd[1]: Starting Removes premium features from DLVM....\\r\\nJun 25 04:49:21 notebooks2instance-ok systemd[1]: google-wi-promote-premium.service: Succeeded.\\r\\nJun 25 04:49:21 notebooks2instance-ok systemd[1]: Finished Removes premium features from DLVM..\\r\\nJun 25 04:49:21 notebooks2instance-ok systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\r\\nJun 25 04:49:21 notebooks2instance-ok check_idle_shutdown.sh[4195]: Setting last notebook activity timestamp 1719290142 at 1719290961 for the following reason: Reason - latest session activity - replaced by later instance creation date\\r\\nJun 25 04:49:21 notebooks2instance-ok systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\r\\nJun 25 04:49:21 notebooks2instance-ok systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\r\\nJun 25 04:50:15 notebooks2instance-ok dhclient[526]: XMT: Solicit on ens4, interval 110770ms.\\r\\nJun 25 04:50:21 notebooks2instance-ok systemd[1]: Starting Removes premium features from DLVM....\\r\\nJun 25 04:50:22 notebooks2instance-ok systemd[1]: google-wi-promote-premium.service: Succeeded.\\r\\nJun 25 04:50:22 notebooks2instance-ok systemd[1]: Finished Removes premium features from DLVM..\\r\\nJun 25 04:50:22 notebooks2instance-ok systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\r\\nJun 25 04:50:22 notebooks2instance-ok check_idle_shutdown.sh[4346]: Setting last notebook activity timestamp 1719290142 at 1719291022 for the following reason: Reason - latest session activity - replaced by later instance creation date\\r\\nJun 25 04:50:22 notebooks2instance-ok systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\r\\nJun 25 04:50:22 notebooks2instance-ok systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\r\\nJun 25 04:50:40 notebooks2instance-ok systemd[1]: Starting Cleanup of Temporary Directories...\\r\\nJun 25 04:50:40 notebooks2instance-ok systemd[1]: systemd-tmpfiles-clean.service: Succeeded.\\r\\nJun 25 04:50:40 notebooks2instance-ok systemd[1]: Finished Cleanup of Temporary Directories.\\r\\nJun 25 04:51:22 notebooks2instance-ok systemd[1]: Starting Removes premium features from DLVM....\\r\\nJun 25 04:51:23 notebooks2instance-ok systemd[1]: google-wi-promote-premium.service: Succeeded.\\r\\nJun 25 04:51:23 notebooks2instance-ok systemd[1]: Finished Removes premium features from DLVM..\\r\\nJun 25 04:51:23 notebooks2instance-ok systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\r\\nJun 25 04:51:23 notebooks2instance-ok check_idle_shutdown.sh[4504]: Setting last notebook activity timestamp 1719290142 at 1719291083 for the following reason: Reason - latest session activity - replaced by later instance creation date\\r\\nJun 25 04:51:23 notebooks2instance-ok systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\r\\nJun 25 04:51:23 notebooks2instance-ok systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\r\\nJun 25 04:52:06 notebooks2instance-ok dhclient[526]: XMT: Solicit on ens4, interval 122880ms.\\r\\nJun 25 04:52:23 notebooks2instance-ok systemd[1]: Starting Removes premium features from DLVM....\\r\\nJun 25 04:52:24 notebooks2instance-ok systemd[1]: google-wi-promote-premium.service: Succeeded.\\r\\nJun 25 04:52:24 notebooks2instance-ok systemd[1]: Finished Removes premium features from DLVM..\\r\\nJun 25 04:52:24 notebooks2instance-ok systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\r\\nJun 25 04:52:24 notebooks2instance-ok check_idle_shutdown.sh[4659]: Setting last notebook activity timestamp 1719290142 at 1719291144 for the following reason: Reason - latest session activity - replaced by later instance creation date\\r\\nJun 25 04:52:24 notebooks2instance-ok systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\r\\nJun 25 04:52:24 notebooks2instance-ok systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\r\\nJun 25 04:53:24 notebooks2instance-ok systemd[1]: Starting Removes premium features from DLVM....\\r\\nJun 25 04:53:25 notebooks2instance-ok systemd[1]: google-wi-promote-premium.service: Succeeded.\\r\\nJun 25 04:53:25 notebooks2instance-ok systemd[1]: Finished Removes premium features from DLVM..\\r\\nJun 25 04:53:25 notebooks2instance-ok systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\r\\nJun 25 04:53:25 notebooks2instance-ok check_idle_shutdown.sh[4808]: Setting last notebook activity timestamp 1719290142 at 1719291205 for the following reason: Reason - latest session activity - replaced by later instance creation date\\r\\nJun 25 04:53:25 notebooks2instance-ok systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\r\\nJun 25 04:53:25 notebooks2instance-ok systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\r\\nJun 25 04:54:09 notebooks2instance-ok dhclient[526]: XMT: Solicit on ens4, interval 118410ms.\\r\\nJun 25 04:54:25 notebooks2instance-ok systemd[1]: Starting Removes premium features from DLVM....\\r\\nJun 25 04:54:26 notebooks2instance-ok systemd[1]: google-wi-promote-premium.service: Succeeded.\\r\\nJun 25 04:54:26 notebooks2instance-ok systemd[1]: Finished Removes premium features from DLVM..\\r\\nJun 25 04:54:26 notebooks2instance-ok systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\r\\nJun 25 04:54:26 notebooks2instance-ok check_idle_shutdown.sh[4963]: Setting last notebook activity timestamp 1719290142 at 1719291266 for the following reason: Reason - latest session activity - replaced by later instance creation date\\r\\nJun 25 04:54:26 notebooks2instance-ok systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\r\\nJun 25 04:54:26 notebooks2instance-ok systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\r\\nJun 25 04:55:26 notebooks2instance-ok systemd[1]: Starting Removes premium features from DLVM....\\r\\nJun 25 04:55:27 notebooks2instance-ok systemd[1]: google-wi-promote-premium.service: Succeeded.\\r\\nJun 25 04:55:27 notebooks2instance-ok systemd[1]: Finished Removes premium features from DLVM..\\r\\nJun 25 04:55:27 notebooks2instance-ok systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\r\\nJun 25 04:55:27 notebooks2instance-ok check_idle_shutdown.sh[5111]: Setting last notebook activity timestamp 1719290142 at 1719291327 for the following reason: Reason - latest session activity - replaced by later instance creation date\\r\\nJun 25 04:55:27 notebooks2instance-ok systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\r\\nJun 25 04:55:27 notebooks2instance-ok systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\r\\nJun 25 04:55:45 notebooks2instance-ok systemd[1]: Starting GCE Workload Certificate refresh...\\r\\nJun 25 04:55:45 notebooks2instance-ok gce_workload_cert_refresh[5171]: 2024/06/25 04:55:45: Done\\r\\nJun 25 04:55:45 notebooks2instance-ok systemd[1]: gce-workload-cert-refresh.service: Succeeded.\\r\\nJun 25 04:55:45 notebooks2instance-ok systemd[1]: Finished GCE Workload Certificate refresh.\\r\\nJun 25 04:56:07 notebooks2instance-ok dhclient[526]: XMT: Solicit on ens4, interval 114350ms.\\r\\n\",\n  \"start\": \"0\",\n  \"next\": \"211771\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/instances/notebooks2instance-ok/serialPortOutput\"\n}\n"
  },
  {
    "path": "test-data/notebooks2/json-dumps/compute-serial-port-output-notebooks2instance-provisioning-stuck.json",
    "content": "{\n  \"kind\": \"compute#serialPortOutput\",\n  \"contents\": \"Jun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\\\", line 198, in _new_conn\\r\\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]:     sock = connection.create_connection(\\r\\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\\\", line 85, in create_connection\\r\\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]:     raise err\\r\\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\\\", line 73, in create_connection\\r\\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]:     sock.connect(sa)\\r\\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: OSError: [Errno 101] Network is unreachable\\r\\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\\r\\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 793, in urlopen\\r\\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]:     response = self._make_request(\\r\\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 491, in _make_request\\r\\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]:     raise new_e\\r\\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 467, in _make_request\\r\\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]:     self._validate_conn(conn)\\r\\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 1099, in _validate_conn\\r\\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]:     conn.connect()\\r\\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\\\", line 616, in connect\\r\\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]:     self.sock = sock = self._new_conn()\\r\\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\\\", line 213, in _new_conn\\r\\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]:     raise NewConnectionError(\\r\\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.NewConnectionError: \\u003curllib3.connection.HTTPSConnection object at 0x7f82fd956fe0\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable\\r\\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\\r\\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\\\", line 667, in send\\r\\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]:     resp = conn.urlopen(\\r\\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 847, in urlopen\\r\\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]:     retries = retries.increment(\\r\\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/util/retry.py\\\", line 515, in increment\\r\\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]:     raise MaxRetryError(_pool, url, reason) from reason  # type: ignore[arg-type]\\r\\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\\u003curllib3.connection.HTTPSConnection object at 0x7f82fd956fe0\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\\r\\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: During handling of the above exception, another exception occurred:\\r\\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/deeplearning/bin/notebooks_collection_agent.py\\\", line 1956, in report_notebook_event\\r\\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]:     response = session.post(\\r\\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\\\", line 637, in post\\r\\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]:     return self.request(\\\"POST\\\", url, data=data, json=json, **kwargs)\\r\\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\\\", line 589, in request\\r\\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]:     resp = self.send(prep, **send_kwargs)\\r\\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\\\", line 703, in send\\r\\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]:     r = adapter.send(request, **kwargs)\\r\\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\\\", line 700, in send\\r\\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]:     raise ConnectionError(e, request=request)\\r\\nJun 25 04:20:49 notebooks2instance-provisioning-stuck bash[5948]: requests.exceptions.ConnectionError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\\u003curllib3.connection.HTTPSConnection object at 0x7f82fd956fe0\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\\r\\nJun 25 04:20:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:20:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:20:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:20:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:20:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:20:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:20:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:20:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:20:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:20:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:20:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:04 notebooks2instance-provisioning-stuck dhclient[516]: XMT: Solicit on ens4, interval 117640ms.\\r\\nJun 25 04:21:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:19 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:21:19.304251 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd954e80\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:21:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:21 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:21:21.307129 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd957a00\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:21:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:25 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:21:25.312322 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd936e30\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:21:25 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd936a40\\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\\r\\nJun 25 04:21:25 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:21:25.314547 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd935e70\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:21:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:27 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:21:27.317345 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd936fb0\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:21:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:31 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:21:31.322618 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd937580\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:21:31 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd934430\\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\\r\\nJun 25 04:21:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:41 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:21:41.333363 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:21:41 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:21:41 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/deeplearning/bin/notebooks_collection_agent.py\\\", line 618, in dns_resolution_query\\r\\nJun 25 04:21:41 notebooks2instance-provisioning-stuck bash[5948]:     _ = subprocess.run(\\r\\nJun 25 04:21:41 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/subprocess.py\\\", line 526, in run\\r\\nJun 25 04:21:41 notebooks2instance-provisioning-stuck bash[5948]:     raise CalledProcessError(retcode, process.args,\\r\\nJun 25 04:21:41 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:21:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n         Starting \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m...\\r\\nJun 25 04:21:43 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\\r\\nJun 25 04:21:44 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m.\\r\\nJun 25 04:21:44 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\\r\\n         Starting \\u001b[0;1;39mChecks whether to…nce based on idle schedule.\\u001b[0m...\\r\\nJun 25 04:21:44 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\r\\nJun 25 04:21:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:45 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[51779]: Setting last notebook activity timestamp 1719278718 at 1719289305 for the following reason: Reason - latest session activity - replaced by later instance creation date\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mChecks whether to…tance based on idle schedule.\\u001b[0m.\\r\\nJun 25 04:21:45 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\r\\nJun 25 04:21:45 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\r\\nJun 25 04:21:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:51 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:21:51.197166 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:21:51 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:21:51 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/deeplearning/bin/notebooks_collection_agent.py\\\", line 618, in dns_resolution_query\\r\\nJun 25 04:21:51 notebooks2instance-provisioning-stuck bash[5948]:     _ = subprocess.run(\\r\\nJun 25 04:21:51 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/subprocess.py\\\", line 526, in run\\r\\nJun 25 04:21:51 notebooks2instance-provisioning-stuck bash[5948]:     raise CalledProcessError(retcode, process.args,\\r\\nJun 25 04:21:51 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:21:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:21:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n         Starting \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m...\\r\\nJun 25 04:22:44 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\\r\\nJun 25 04:22:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:45 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m.\\r\\nJun 25 04:22:45 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\\r\\n         Starting \\u001b[0;1;39mChecks whether to…nce based on idle schedule.\\u001b[0m...\\r\\nJun 25 04:22:45 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\r\\nJun 25 04:22:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:46 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[52091]: Setting last notebook activity timestamp 1719278718 at 1719289366 for the following reason: Reason - latest session activity - replaced by later instance creation date\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mChecks whether to…tance based on idle schedule.\\u001b[0m.\\r\\nJun 25 04:22:46 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\r\\nJun 25 04:22:46 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\r\\nJun 25 04:22:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:22:51.350951 140200635197248 notebooks_collection_agent.py:1968] Unable to contact Notebooks API HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\\u003curllib3.connection.HTTPSConnection object at 0x7f82fd9546d0\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\\r\\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\\\", line 198, in _new_conn\\r\\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]:     sock = connection.create_connection(\\r\\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\\\", line 85, in create_connection\\r\\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]:     raise err\\r\\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\\\", line 73, in create_connection\\r\\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]:     sock.connect(sa)\\r\\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: OSError: [Errno 101] Network is unreachable\\r\\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\\r\\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 793, in urlopen\\r\\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]:     response = self._make_request(\\r\\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 491, in _make_request\\r\\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]:     raise new_e\\r\\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 467, in _make_request\\r\\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]:     self._validate_conn(conn)\\r\\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 1099, in _validate_conn\\r\\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]:     conn.connect()\\r\\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\\\", line 616, in connect\\r\\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]:     self.sock = sock = self._new_conn()\\r\\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\\\", line 213, in _new_conn\\r\\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]:     raise NewConnectionError(\\r\\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.NewConnectionError: \\u003curllib3.connection.HTTPSConnection object at 0x7f82fd9546d0\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable\\r\\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\\r\\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\\\", line 667, in send\\r\\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]:     resp = conn.urlopen(\\r\\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 847, in urlopen\\r\\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]:     retries = retries.increment(\\r\\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/util/retry.py\\\", line 515, in increment\\r\\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]:     raise MaxRetryError(_pool, url, reason) from reason  # type: ignore[arg-type]\\r\\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\\u003curllib3.connection.HTTPSConnection object at 0x7f82fd9546d0\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\\r\\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: During handling of the above exception, another exception occurred:\\r\\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/deeplearning/bin/notebooks_collection_agent.py\\\", line 1956, in report_notebook_event\\r\\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]:     response = session.post(\\r\\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\\\", line 637, in post\\r\\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]:     return self.request(\\\"POST\\\", url, data=data, json=json, **kwargs)\\r\\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\\\", line 589, in request\\r\\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]:     resp = self.send(prep, **send_kwargs)\\r\\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\\\", line 703, in send\\r\\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]:     r = adapter.send(request, **kwargs)\\r\\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\\\", line 700, in send\\r\\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]:     raise ConnectionError(e, request=request)\\r\\nJun 25 04:22:51 notebooks2instance-provisioning-stuck bash[5948]: requests.exceptions.ConnectionError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\\u003curllib3.connection.HTTPSConnection object at 0x7f82fd9546d0\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\\r\\nJun 25 04:22:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:22:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:02 notebooks2instance-provisioning-stuck dhclient[516]: XMT: Solicit on ens4, interval 117340ms.\\r\\nJun 25 04:23:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:21 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:23:21.406768 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd956590\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:23:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:23 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:23:23.409512 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd957430\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:23:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:27 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:23:27.414428 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd936980\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:23:27 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd9369b0\\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\\r\\nJun 25 04:23:27 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:23:27.416425 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd934460\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:23:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:29 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:23:29.419085 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd934490\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:23:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:33 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:23:33.424235 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd934430\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:23:33 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd9341c0\\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\\r\\nJun 25 04:23:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:43 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:23:43.434533 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:23:43 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:23:43 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/deeplearning/bin/notebooks_collection_agent.py\\\", line 618, in dns_resolution_query\\r\\nJun 25 04:23:43 notebooks2instance-provisioning-stuck bash[5948]:     _ = subprocess.run(\\r\\nJun 25 04:23:43 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/subprocess.py\\\", line 526, in run\\r\\nJun 25 04:23:43 notebooks2instance-provisioning-stuck bash[5948]:     raise CalledProcessError(retcode, process.args,\\r\\nJun 25 04:23:43 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:23:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n         Starting \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m...\\r\\nJun 25 04:23:45 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\\r\\nJun 25 04:23:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:45 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m.\\r\\nJun 25 04:23:45 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\\r\\n         Starting \\u001b[0;1;39mChecks whether to…nce based on idle schedule.\\u001b[0m...\\r\\nJun 25 04:23:45 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\r\\nJun 25 04:23:46 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[52411]: Setting last notebook activity timestamp 1719278718 at 1719289426 for the following reason: Reason - latest session activity - replaced by later instance creation date\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mChecks whether to…tance based on idle schedule.\\u001b[0m.\\r\\nJun 25 04:23:46 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\r\\nJun 25 04:23:46 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\r\\nJun 25 04:23:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:53 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:23:53.298552 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:23:53 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:23:53 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/deeplearning/bin/notebooks_collection_agent.py\\\", line 618, in dns_resolution_query\\r\\nJun 25 04:23:53 notebooks2instance-provisioning-stuck bash[5948]:     _ = subprocess.run(\\r\\nJun 25 04:23:53 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/subprocess.py\\\", line 526, in run\\r\\nJun 25 04:23:53 notebooks2instance-provisioning-stuck bash[5948]:     raise CalledProcessError(retcode, process.args,\\r\\nJun 25 04:23:53 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:23:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:23:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n         Starting \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m...\\r\\nJun 25 04:24:46 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\\r\\nJun 25 04:24:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:46 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m.\\r\\nJun 25 04:24:46 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\\r\\n         Starting \\u001b[0;1;39mChecks whether to…nce based on idle schedule.\\u001b[0m...\\r\\nJun 25 04:24:46 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\r\\nJun 25 04:24:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:47 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[52721]: Setting last notebook activity timestamp 1719278718 at 1719289487 for the following reason: Reason - latest session activity - replaced by later instance creation date\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mChecks whether to…tance based on idle schedule.\\u001b[0m.\\r\\nJun 25 04:24:47 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\r\\nJun 25 04:24:47 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\r\\nJun 25 04:24:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:24:53.455626 140200635197248 notebooks_collection_agent.py:1968] Unable to contact Notebooks API HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\\u003curllib3.connection.HTTPSConnection object at 0x7f82fd9544f0\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\\r\\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\\\", line 198, in _new_conn\\r\\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]:     sock = connection.create_connection(\\r\\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\\\", line 85, in create_connection\\r\\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]:     raise err\\r\\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\\\", line 73, in create_connection\\r\\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]:     sock.connect(sa)\\r\\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: OSError: [Errno 101] Network is unreachable\\r\\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\\r\\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 793, in urlopen\\r\\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]:     response = self._make_request(\\r\\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 491, in _make_request\\r\\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]:     raise new_e\\r\\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 467, in _make_request\\r\\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]:     self._validate_conn(conn)\\r\\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 1099, in _validate_conn\\r\\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]:     conn.connect()\\r\\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\\\", line 616, in connect\\r\\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]:     self.sock = sock = self._new_conn()\\r\\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\\\", line 213, in _new_conn\\r\\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]:     raise NewConnectionError(\\r\\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.NewConnectionError: \\u003curllib3.connection.HTTPSConnection object at 0x7f82fd9544f0\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable\\r\\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\\r\\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\\\", line 667, in send\\r\\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]:     resp = conn.urlopen(\\r\\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 847, in urlopen\\r\\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]:     retries = retries.increment(\\r\\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/util/retry.py\\\", line 515, in increment\\r\\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]:     raise MaxRetryError(_pool, url, reason) from reason  # type: ignore[arg-type]\\r\\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\\u003curllib3.connection.HTTPSConnection object at 0x7f82fd9544f0\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\\r\\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: During handling of the above exception, another exception occurred:\\r\\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/deeplearning/bin/notebooks_collection_agent.py\\\", line 1956, in report_notebook_event\\r\\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]:     response = session.post(\\r\\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\\\", line 637, in post\\r\\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]:     return self.request(\\\"POST\\\", url, data=data, json=json, **kwargs)\\r\\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\\\", line 589, in request\\r\\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]:     resp = self.send(prep, **send_kwargs)\\r\\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\\\", line 703, in send\\r\\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]:     r = adapter.send(request, **kwargs)\\r\\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\\\", line 700, in send\\r\\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]:     raise ConnectionError(e, request=request)\\r\\nJun 25 04:24:53 notebooks2instance-provisioning-stuck bash[5948]: requests.exceptions.ConnectionError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\\u003curllib3.connection.HTTPSConnection object at 0x7f82fd9544f0\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\\r\\nJun 25 04:24:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:24:59 notebooks2instance-provisioning-stuck dhclient[516]: XMT: Solicit on ens4, interval 113040ms.\\r\\nJun 25 04:25:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n         Starting \\u001b[0;1;39mGCE Workload Certificate refresh\\u001b[0m...\\r\\nJun 25 04:25:20 notebooks2instance-provisioning-stuck systemd[1]: Starting GCE Workload Certificate refresh...\\r\\nJun 25 04:25:20 notebooks2instance-provisioning-stuck gce_workload_cert_refresh[53084]: 2024/06/25 04:25:20: Done\\r\\nJun 25 04:25:20 notebooks2instance-provisioning-stuck systemd[1]: gce-workload-cert-refresh.service: Succeeded.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mGCE Workload Certificate refresh\\u001b[0m.\\r\\nJun 25 04:25:20 notebooks2instance-provisioning-stuck systemd[1]: Finished GCE Workload Certificate refresh.\\r\\nJun 25 04:25:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:23 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:25:23.511619 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd9541f0\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:25:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:25 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:25:25.514287 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd954700\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:25:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:29 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:25:29.518745 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd937760\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:25:29 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd935fc0\\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\\r\\nJun 25 04:25:29 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:25:29.520798 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd935ff0\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:25:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:31 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:25:31.523440 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd937940\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:25:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:35 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:25:35.528321 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd9341c0\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:25:35 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd9344c0\\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\\r\\nJun 25 04:25:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:45 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:25:45.539495 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:25:45 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:25:45 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/deeplearning/bin/notebooks_collection_agent.py\\\", line 618, in dns_resolution_query\\r\\nJun 25 04:25:45 notebooks2instance-provisioning-stuck bash[5948]:     _ = subprocess.run(\\r\\nJun 25 04:25:45 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/subprocess.py\\\", line 526, in run\\r\\nJun 25 04:25:45 notebooks2instance-provisioning-stuck bash[5948]:     raise CalledProcessError(retcode, process.args,\\r\\nJun 25 04:25:45 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:25:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n         Starting \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m...\\r\\nJun 25 04:25:46 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\\r\\nJun 25 04:25:47 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m.\\r\\nJun 25 04:25:47 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\\r\\n         Starting \\u001b[0;1;39mChecks whether to…nce based on idle schedule.\\u001b[0m...\\r\\nJun 25 04:25:47 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\r\\nJun 25 04:25:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:48 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53198]: Setting last notebook activity timestamp 1719278718 at 1719289548 for the following reason: Reason - latest session activity - replaced by later instance creation date\\r\\nJun 25 04:25:48 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53198]: Shutting down with last_activity 1719278718 at 1719289548\\r\\nJun 25 04:25:48 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53198]: Reporting IDLE event\\r\\nJun 25 04:25:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:48 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53198]: Reporting IDLE event to endpoint: https://notebooks.googleapis.com/v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem\\r\\nJun 25 04:25:49 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53288]:   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\\r\\nJun 25 04:25:49 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53288]:                                  Dload  Upload   Total   Spent    Left  Speed\\r\\nJun 25 04:25:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:54 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53288]: #015  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0#015  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0#015  0     0    0     0    0     0      0      0 --:--:--  0:00:01 --:--:--     0#015  0     0    0     0    0     0      0      0 --:--:--  0:00:02 --:--:--     0#015  0     0    0     0    0     0      0      0 --:--:--  0:00:03 --:--:--     0#015  0     0    0     0    0     0      0      0 --:--:--  0:00:04 --:--:--     0#015  0     0    0     0    0     0      0      0 --:--:--  0:00:04 --:--:--     0\\r\\nJun 25 04:25:54 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53288]: curl: (28) Failed to connect to notebooks.googleapis.com port 443: Connection timed out\\r\\nJun 25 04:25:54 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53288]: Warning: Problem : timeout. Will retry in 1 seconds. 5 retries left.\\r\\nJun 25 04:25:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:55 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:25:55.403691 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:25:55 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:25:55 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/deeplearning/bin/notebooks_collection_agent.py\\\", line 618, in dns_resolution_query\\r\\nJun 25 04:25:55 notebooks2instance-provisioning-stuck bash[5948]:     _ = subprocess.run(\\r\\nJun 25 04:25:55 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/subprocess.py\\\", line 526, in run\\r\\nJun 25 04:25:55 notebooks2instance-provisioning-stuck bash[5948]:     raise CalledProcessError(retcode, process.args,\\r\\nJun 25 04:25:55 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:25:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:25:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:00 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53288]: #015  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0#015  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0#015  0     0    0     0    0     0      0      0 --:--:--  0:00:01 --:--:--     0#015  0     0    0     0    0     0      0      0 --:--:--  0:00:02 --:--:--     0#015  0     0    0     0    0     0      0      0 --:--:--  0:00:03 --:--:--     0#015  0     0    0     0    0     0      0      0 --:--:--  0:00:04 --:--:--     0#015  0     0    0     0    0     0      0      0 --:--:--  0:00:04 --:--:--     0\\r\\nJun 25 04:26:00 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53288]: curl: (28) Failed to connect to notebooks.googleapis.com port 443: Connection timed out\\r\\nJun 25 04:26:00 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53288]: Warning: Problem : timeout. Will retry in 2 seconds. 4 retries left.\\r\\nJun 25 04:26:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:07 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53288]: #015  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0#015  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0#015  0     0    0     0    0     0      0      0 --:--:--  0:00:01 --:--:--     0#015  0     0    0     0    0     0      0      0 --:--:--  0:00:02 --:--:--     0#015  0     0    0     0    0     0      0      0 --:--:--  0:00:03 --:--:--     0#015  0     0    0     0    0     0      0      0 --:--:--  0:00:04 --:--:--     0#015  0     0    0     0    0     0      0      0 --:--:--  0:00:04 --:--:--     0\\r\\nJun 25 04:26:07 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53288]: curl: (28) Failed to connect to notebooks.googleapis.com port 443: Connection timed out\\r\\nJun 25 04:26:07 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53288]: Warning: Problem : timeout. Will retry in 4 seconds. 3 retries left.\\r\\nJun 25 04:26:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:16 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53288]: #015  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0#015  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0#015  0     0    0     0    0     0      0      0 --:--:--  0:00:01 --:--:--     0#015  0     0    0     0    0     0      0      0 --:--:--  0:00:02 --:--:--     0#015  0     0    0     0    0     0      0      0 --:--:--  0:00:03 --:--:--     0#015  0     0    0     0    0     0      0      0 --:--:--  0:00:04 --:--:--     0#015  0     0    0     0    0     0      0      0 --:--:--  0:00:04 --:--:--     0\\r\\nJun 25 04:26:16 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53288]: curl: (28) Connection timed out after 5000 milliseconds\\r\\nJun 25 04:26:16 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53288]: Warning: Problem : timeout. Will retry in 8 seconds. 2 retries left.\\r\\nJun 25 04:26:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:29 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53288]: #015  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0#015  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0#015  0     0    0     0    0     0      0      0 --:--:--  0:00:01 --:--:--     0#015  0     0    0     0    0     0      0      0 --:--:--  0:00:02 --:--:--     0#015  0     0    0     0    0     0      0      0 --:--:--  0:00:03 --:--:--     0#015  0     0    0     0    0     0      0      0 --:--:--  0:00:04 --:--:--     0#015  0     0    0     0    0     0      0      0 --:--:--  0:00:04 --:--:--     0\\r\\nJun 25 04:26:29 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53288]: curl: (28) Failed to connect to notebooks.googleapis.com port 443: Connection timed out\\r\\nJun 25 04:26:29 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53288]: Warning: Problem : timeout. Will retry in 16 seconds. 1 retries left.\\r\\nJun 25 04:26:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:50 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53288]: #015  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0#015  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0#015  0     0    0     0    0     0      0      0 --:--:--  0:00:01 --:--:--     0#015  0     0    0     0    0     0      0      0 --:--:--  0:00:02 --:--:--     0#015  0     0    0     0    0     0      0      0 --:--:--  0:00:03 --:--:--     0#015  0     0    0     0    0     0      0      0 --:--:--  0:00:04 --:--:--     0#015  0     0    0     0    0     0      0      0 --:--:--  0:00:04 --:--:--     0\\r\\nJun 25 04:26:50 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53288]: curl: (28) Connection timed out after 5000 milliseconds\\r\\nJun 25 04:26:50 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53198]: Report IDLE event completed. (0)\\r\\nJun 25 04:26:50 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mChecks whether to…tance based on idle schedule.\\u001b[0m.\\r\\nJun 25 04:26:50 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\r\\nJun 25 04:26:50 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Consumed 1.668s CPU time.\\r\\n         Starting \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m...\\r\\nJun 25 04:26:50 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\\r\\nJun 25 04:26:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:50 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m.\\r\\nJun 25 04:26:50 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\\r\\n         Starting \\u001b[0;1;39mChecks whether to…nce based on idle schedule.\\u001b[0m...\\r\\nJun 25 04:26:50 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\r\\nJun 25 04:26:51 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53571]: Setting an origin timestamp 1719289611 as a minimum base for idle calculations.\\r\\nJun 25 04:26:51 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53571]: Setting last notebook activity timestamp 1719289611 at 1719289611 for the following reason: Reason - latest session activity - replaced by later instance creation date\\r\\nJun 25 04:26:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mChecks whether to…tance based on idle schedule.\\u001b[0m.\\r\\nJun 25 04:26:51 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\r\\nJun 25 04:26:51 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\r\\nJun 25 04:26:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:52 notebooks2instance-provisioning-stuck dhclient[516]: XMT: Solicit on ens4, interval 117650ms.\\r\\nJun 25 04:26:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:26:55.553602 140200635197248 notebooks_collection_agent.py:1968] Unable to contact Notebooks API HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\\u003curllib3.connection.HTTPSConnection object at 0x7f82fd954df0\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\\r\\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\\\", line 198, in _new_conn\\r\\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]:     sock = connection.create_connection(\\r\\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\\\", line 85, in create_connection\\r\\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]:     raise err\\r\\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\\\", line 73, in create_connection\\r\\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]:     sock.connect(sa)\\r\\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: OSError: [Errno 101] Network is unreachable\\r\\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\\r\\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 793, in urlopen\\r\\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]:     response = self._make_request(\\r\\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 491, in _make_request\\r\\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]:     raise new_e\\r\\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 467, in _make_request\\r\\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]:     self._validate_conn(conn)\\r\\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 1099, in _validate_conn\\r\\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]:     conn.connect()\\r\\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\\\", line 616, in connect\\r\\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]:     self.sock = sock = self._new_conn()\\r\\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\\\", line 213, in _new_conn\\r\\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]:     raise NewConnectionError(\\r\\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.NewConnectionError: \\u003curllib3.connection.HTTPSConnection object at 0x7f82fd954df0\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable\\r\\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\\r\\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\\\", line 667, in send\\r\\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]:     resp = conn.urlopen(\\r\\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 847, in urlopen\\r\\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]:     retries = retries.increment(\\r\\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/util/retry.py\\\", line 515, in increment\\r\\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]:     raise MaxRetryError(_pool, url, reason) from reason  # type: ignore[arg-type]\\r\\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\\u003curllib3.connection.HTTPSConnection object at 0x7f82fd954df0\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\\r\\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: During handling of the above exception, another exception occurred:\\r\\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/deeplearning/bin/notebooks_collection_agent.py\\\", line 1956, in report_notebook_event\\r\\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]:     response = session.post(\\r\\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\\\", line 637, in post\\r\\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]:     return self.request(\\\"POST\\\", url, data=data, json=json, **kwargs)\\r\\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\\\", line 589, in request\\r\\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]:     resp = self.send(prep, **send_kwargs)\\r\\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\\\", line 703, in send\\r\\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]:     r = adapter.send(request, **kwargs)\\r\\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\\\", line 700, in send\\r\\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]:     raise ConnectionError(e, request=request)\\r\\nJun 25 04:26:55 notebooks2instance-provisioning-stuck bash[5948]: requests.exceptions.ConnectionError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\\u003curllib3.connection.HTTPSConnection object at 0x7f82fd954df0\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\\r\\nJun 25 04:26:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:26:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:25 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:27:25.609088 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd9573a0\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:27:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:27 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:27:27.611774 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd9548b0\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:27:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:31 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:27:31.616725 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd9368c0\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:27:31 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd934f40\\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\\r\\nJun 25 04:27:31 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:27:31.619108 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd935720\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:27:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:33 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:27:33.621854 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd936470\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:27:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:37 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:27:37.626805 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd9344c0\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:27:37 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd934250\\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\\r\\nJun 25 04:27:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:47 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:27:47.637129 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:27:47 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:27:47 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/deeplearning/bin/notebooks_collection_agent.py\\\", line 618, in dns_resolution_query\\r\\nJun 25 04:27:47 notebooks2instance-provisioning-stuck bash[5948]:     _ = subprocess.run(\\r\\nJun 25 04:27:47 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/subprocess.py\\\", line 526, in run\\r\\nJun 25 04:27:47 notebooks2instance-provisioning-stuck bash[5948]:     raise CalledProcessError(retcode, process.args,\\r\\nJun 25 04:27:47 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:27:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n         Starting \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m...\\r\\nJun 25 04:27:50 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\\r\\nJun 25 04:27:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:51 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m.\\r\\nJun 25 04:27:51 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\\r\\n         Starting \\u001b[0;1;39mChecks whether to…nce based on idle schedule.\\u001b[0m...\\r\\nJun 25 04:27:51 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\r\\nJun 25 04:27:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:52 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[53891]: Setting last notebook activity timestamp 1719289611 at 1719289672 for the following reason: Reason - latest session activity - replaced by later instance creation date\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mChecks whether to…tance based on idle schedule.\\u001b[0m.\\r\\nJun 25 04:27:52 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\r\\nJun 25 04:27:52 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\r\\nJun 25 04:27:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:57 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:27:57.500193 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:27:57 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:27:57 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/deeplearning/bin/notebooks_collection_agent.py\\\", line 618, in dns_resolution_query\\r\\nJun 25 04:27:57 notebooks2instance-provisioning-stuck bash[5948]:     _ = subprocess.run(\\r\\nJun 25 04:27:57 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/subprocess.py\\\", line 526, in run\\r\\nJun 25 04:27:57 notebooks2instance-provisioning-stuck bash[5948]:     raise CalledProcessError(retcode, process.args,\\r\\nJun 25 04:27:57 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:27:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:27:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:50 notebooks2instance-provisioning-stuck dhclient[516]: XMT: Solicit on ens4, interval 124820ms.\\r\\nJun 25 04:28:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n         Starting \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m...\\r\\nJun 25 04:28:51 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\\r\\nJun 25 04:28:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:52 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m.\\r\\nJun 25 04:28:52 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\\r\\n         Starting \\u001b[0;1;39mChecks whether to…nce based on idle schedule.\\u001b[0m...\\r\\nJun 25 04:28:52 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\r\\nJun 25 04:28:52 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[54203]: Setting last notebook activity timestamp 1719289611 at 1719289732 for the following reason: Reason - latest session activity - replaced by later instance creation date\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mChecks whether to…tance based on idle schedule.\\u001b[0m.\\r\\nJun 25 04:28:53 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\r\\nJun 25 04:28:53 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\r\\nJun 25 04:28:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:28:57.647886 140200635197248 notebooks_collection_agent.py:1968] Unable to contact Notebooks API HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\\u003curllib3.connection.HTTPSConnection object at 0x7f82fd955150\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\\r\\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\\\", line 198, in _new_conn\\r\\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]:     sock = connection.create_connection(\\r\\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\\\", line 85, in create_connection\\r\\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]:     raise err\\r\\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\\\", line 73, in create_connection\\r\\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]:     sock.connect(sa)\\r\\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: OSError: [Errno 101] Network is unreachable\\r\\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\\r\\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 793, in urlopen\\r\\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]:     response = self._make_request(\\r\\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 491, in _make_request\\r\\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]:     raise new_e\\r\\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 467, in _make_request\\r\\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]:     self._validate_conn(conn)\\r\\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 1099, in _validate_conn\\r\\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]:     conn.connect()\\r\\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\\\", line 616, in connect\\r\\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]:     self.sock = sock = self._new_conn()\\r\\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\\\", line 213, in _new_conn\\r\\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]:     raise NewConnectionError(\\r\\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.NewConnectionError: \\u003curllib3.connection.HTTPSConnection object at 0x7f82fd955150\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable\\r\\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\\r\\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\\\", line 667, in send\\r\\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]:     resp = conn.urlopen(\\r\\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 847, in urlopen\\r\\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]:     retries = retries.increment(\\r\\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/util/retry.py\\\", line 515, in increment\\r\\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]:     raise MaxRetryError(_pool, url, reason) from reason  # type: ignore[arg-type]\\r\\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\\u003curllib3.connection.HTTPSConnection object at 0x7f82fd955150\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\\r\\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: During handling of the above exception, another exception occurred:\\r\\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/deeplearning/bin/notebooks_collection_agent.py\\\", line 1956, in report_notebook_event\\r\\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]:     response = session.post(\\r\\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\\\", line 637, in post\\r\\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]:     return self.request(\\\"POST\\\", url, data=data, json=json, **kwargs)\\r\\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\\\", line 589, in request\\r\\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]:     resp = self.send(prep, **send_kwargs)\\r\\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\\\", line 703, in send\\r\\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]:     r = adapter.send(request, **kwargs)\\r\\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\\\", line 700, in send\\r\\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]:     raise ConnectionError(e, request=request)\\r\\nJun 25 04:28:57 notebooks2instance-provisioning-stuck bash[5948]: requests.exceptions.ConnectionError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\\u003curllib3.connection.HTTPSConnection object at 0x7f82fd955150\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\\r\\nJun 25 04:28:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:28:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:27 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:29:27.700491 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd954f70\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:29:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:29 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:29:29.703190 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd957a00\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:29:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:33 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:29:33.708141 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd936410\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:29:33 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd9373d0\\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\\r\\nJun 25 04:29:33 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:29:33.710117 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd934f70\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:29:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:35 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:29:35.712797 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd9375e0\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:29:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:39 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:29:39.717733 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd934250\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:29:39 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd9359f0\\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\\r\\nJun 25 04:29:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:49 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:29:49.727836 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:29:49 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:29:49 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/deeplearning/bin/notebooks_collection_agent.py\\\", line 618, in dns_resolution_query\\r\\nJun 25 04:29:49 notebooks2instance-provisioning-stuck bash[5948]:     _ = subprocess.run(\\r\\nJun 25 04:29:49 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/subprocess.py\\\", line 526, in run\\r\\nJun 25 04:29:49 notebooks2instance-provisioning-stuck bash[5948]:     raise CalledProcessError(retcode, process.args,\\r\\nJun 25 04:29:49 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:29:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n         Starting \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m...\\r\\nJun 25 04:29:52 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\\r\\nJun 25 04:29:53 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m.\\r\\nJun 25 04:29:53 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\\r\\n         Starting \\u001b[0;1;39mChecks whether to…nce based on idle schedule.\\u001b[0m...\\r\\nJun 25 04:29:53 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\r\\nJun 25 04:29:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:54 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[54520]: Setting last notebook activity timestamp 1719289611 at 1719289794 for the following reason: Reason - latest session activity - replaced by later instance creation date\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mChecks whether to…tance based on idle schedule.\\u001b[0m.\\r\\nJun 25 04:29:54 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\r\\nJun 25 04:29:54 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\r\\nJun 25 04:29:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:29:59 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:29:59.590069 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:29:59 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:29:59 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/deeplearning/bin/notebooks_collection_agent.py\\\", line 618, in dns_resolution_query\\r\\nJun 25 04:29:59 notebooks2instance-provisioning-stuck bash[5948]:     _ = subprocess.run(\\r\\nJun 25 04:29:59 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/subprocess.py\\\", line 526, in run\\r\\nJun 25 04:29:59 notebooks2instance-provisioning-stuck bash[5948]:     raise CalledProcessError(retcode, process.args,\\r\\nJun 25 04:29:59 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:30:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n         Starting \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m...\\r\\nJun 25 04:30:53 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\\r\\nJun 25 04:30:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:54 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m.\\r\\nJun 25 04:30:54 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\\r\\n         Starting \\u001b[0;1;39mChecks whether to…nce based on idle schedule.\\u001b[0m...\\r\\nJun 25 04:30:54 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\r\\nJun 25 04:30:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:54 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[54835]: Setting last notebook activity timestamp 1719289611 at 1719289854 for the following reason: Reason - latest session activity - replaced by later instance creation date\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mChecks whether to…tance based on idle schedule.\\u001b[0m.\\r\\nJun 25 04:30:55 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\r\\nJun 25 04:30:55 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\r\\nJun 25 04:30:55 notebooks2instance-provisioning-stuck dhclient[516]: XMT: Solicit on ens4, interval 131720ms.\\r\\nJun 25 04:30:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:30:59.743038 140200635197248 notebooks_collection_agent.py:1968] Unable to contact Notebooks API HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\\u003curllib3.connection.HTTPSConnection object at 0x7f82fd954640\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\\r\\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\\\", line 198, in _new_conn\\r\\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]:     sock = connection.create_connection(\\r\\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\\\", line 85, in create_connection\\r\\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]:     raise err\\r\\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\\\", line 73, in create_connection\\r\\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]:     sock.connect(sa)\\r\\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: OSError: [Errno 101] Network is unreachable\\r\\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\\r\\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 793, in urlopen\\r\\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]:     response = self._make_request(\\r\\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 491, in _make_request\\r\\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]:     raise new_e\\r\\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 467, in _make_request\\r\\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]:     self._validate_conn(conn)\\r\\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 1099, in _validate_conn\\r\\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]:     conn.connect()\\r\\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\\\", line 616, in connect\\r\\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]:     self.sock = sock = self._new_conn()\\r\\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\\\", line 213, in _new_conn\\r\\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]:     raise NewConnectionError(\\r\\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.NewConnectionError: \\u003curllib3.connection.HTTPSConnection object at 0x7f82fd954640\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable\\r\\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\\r\\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\\\", line 667, in send\\r\\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]:     resp = conn.urlopen(\\r\\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 847, in urlopen\\r\\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]:     retries = retries.increment(\\r\\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/util/retry.py\\\", line 515, in increment\\r\\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]:     raise MaxRetryError(_pool, url, reason) from reason  # type: ignore[arg-type]\\r\\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\\u003curllib3.connection.HTTPSConnection object at 0x7f82fd954640\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\\r\\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: During handling of the above exception, another exception occurred:\\r\\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/deeplearning/bin/notebooks_collection_agent.py\\\", line 1956, in report_notebook_event\\r\\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]:     response = session.post(\\r\\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\\\", line 637, in post\\r\\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]:     return self.request(\\\"POST\\\", url, data=data, json=json, **kwargs)\\r\\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\\\", line 589, in request\\r\\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]:     resp = self.send(prep, **send_kwargs)\\r\\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\\\", line 703, in send\\r\\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]:     r = adapter.send(request, **kwargs)\\r\\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\\\", line 700, in send\\r\\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]:     raise ConnectionError(e, request=request)\\r\\nJun 25 04:30:59 notebooks2instance-provisioning-stuck bash[5948]: requests.exceptions.ConnectionError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\\u003curllib3.connection.HTTPSConnection object at 0x7f82fd954640\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\\r\\nJun 25 04:31:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:29 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:31:29.799546 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd957d90\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:31:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:31 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:31:31.802433 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd957430\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:31:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:35 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:31:35.807593 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd934520\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:31:35 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd936fb0\\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\\r\\nJun 25 04:31:35 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:31:35.809967 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd9363e0\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:31:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:37 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:31:37.812843 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd936380\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:31:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:41 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:31:41.817989 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd9359f0\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:31:41 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd936860\\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\\r\\nJun 25 04:31:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:51 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:31:51.827863 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:31:51 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:31:51 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/deeplearning/bin/notebooks_collection_agent.py\\\", line 618, in dns_resolution_query\\r\\nJun 25 04:31:51 notebooks2instance-provisioning-stuck bash[5948]:     _ = subprocess.run(\\r\\nJun 25 04:31:51 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/subprocess.py\\\", line 526, in run\\r\\nJun 25 04:31:51 notebooks2instance-provisioning-stuck bash[5948]:     raise CalledProcessError(retcode, process.args,\\r\\nJun 25 04:31:51 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:31:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n         Starting \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m...\\r\\nJun 25 04:31:54 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\\r\\nJun 25 04:31:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:55 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m.\\r\\nJun 25 04:31:55 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\\r\\n         Starting \\u001b[0;1;39mChecks whether to…nce based on idle schedule.\\u001b[0m...\\r\\nJun 25 04:31:55 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\r\\nJun 25 04:31:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:55 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[55156]: Setting last notebook activity timestamp 1719289611 at 1719289915 for the following reason: Reason - latest session activity - replaced by later instance creation date\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mChecks whether to…tance based on idle schedule.\\u001b[0m.\\r\\nJun 25 04:31:56 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\r\\nJun 25 04:31:56 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\r\\nJun 25 04:31:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:31:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:01 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:32:01.690699 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:32:01 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:32:01 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/deeplearning/bin/notebooks_collection_agent.py\\\", line 618, in dns_resolution_query\\r\\nJun 25 04:32:01 notebooks2instance-provisioning-stuck bash[5948]:     _ = subprocess.run(\\r\\nJun 25 04:32:01 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/subprocess.py\\\", line 526, in run\\r\\nJun 25 04:32:01 notebooks2instance-provisioning-stuck bash[5948]:     raise CalledProcessError(retcode, process.args,\\r\\nJun 25 04:32:01 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:32:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n         Starting \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m...\\r\\nJun 25 04:32:55 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\\r\\nJun 25 04:32:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:56 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m.\\r\\nJun 25 04:32:56 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\\r\\n         Starting \\u001b[0;1;39mChecks whether to…nce based on idle schedule.\\u001b[0m...\\r\\nJun 25 04:32:56 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\r\\nJun 25 04:32:56 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[55470]: Setting last notebook activity timestamp 1719289611 at 1719289976 for the following reason: Reason - latest session activity - replaced by later instance creation date\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mChecks whether to…tance based on idle schedule.\\u001b[0m.\\r\\nJun 25 04:32:57 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\r\\nJun 25 04:32:57 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\r\\nJun 25 04:32:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:32:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:33:01.843076 140200635197248 notebooks_collection_agent.py:1968] Unable to contact Notebooks API HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\\u003curllib3.connection.HTTPSConnection object at 0x7f82fd9546a0\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\\r\\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\\\", line 198, in _new_conn\\r\\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]:     sock = connection.create_connection(\\r\\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\\\", line 85, in create_connection\\r\\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]:     raise err\\r\\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\\\", line 73, in create_connection\\r\\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]:     sock.connect(sa)\\r\\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: OSError: [Errno 101] Network is unreachable\\r\\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\\r\\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 793, in urlopen\\r\\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]:     response = self._make_request(\\r\\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 491, in _make_request\\r\\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]:     raise new_e\\r\\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 467, in _make_request\\r\\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]:     self._validate_conn(conn)\\r\\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 1099, in _validate_conn\\r\\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]:     conn.connect()\\r\\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\\\", line 616, in connect\\r\\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]:     self.sock = sock = self._new_conn()\\r\\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\\\", line 213, in _new_conn\\r\\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]:     raise NewConnectionError(\\r\\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.NewConnectionError: \\u003curllib3.connection.HTTPSConnection object at 0x7f82fd9546a0\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable\\r\\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\\r\\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\\\", line 667, in send\\r\\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]:     resp = conn.urlopen(\\r\\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 847, in urlopen\\r\\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]:     retries = retries.increment(\\r\\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/util/retry.py\\\", line 515, in increment\\r\\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]:     raise MaxRetryError(_pool, url, reason) from reason  # type: ignore[arg-type]\\r\\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\\u003curllib3.connection.HTTPSConnection object at 0x7f82fd9546a0\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\\r\\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: During handling of the above exception, another exception occurred:\\r\\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/deeplearning/bin/notebooks_collection_agent.py\\\", line 1956, in report_notebook_event\\r\\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]:     response = session.post(\\r\\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\\\", line 637, in post\\r\\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]:     return self.request(\\\"POST\\\", url, data=data, json=json, **kwargs)\\r\\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\\\", line 589, in request\\r\\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]:     resp = self.send(prep, **send_kwargs)\\r\\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\\\", line 703, in send\\r\\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]:     r = adapter.send(request, **kwargs)\\r\\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\\\", line 700, in send\\r\\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]:     raise ConnectionError(e, request=request)\\r\\nJun 25 04:33:01 notebooks2instance-provisioning-stuck bash[5948]: requests.exceptions.ConnectionError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\\u003curllib3.connection.HTTPSConnection object at 0x7f82fd9546a0\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\\r\\nJun 25 04:33:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:06 notebooks2instance-provisioning-stuck dhclient[516]: XMT: Solicit on ens4, interval 124020ms.\\r\\nJun 25 04:33:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:31 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:33:31.899117 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd9574c0\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:33:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:33 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:33:33.901810 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd954700\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:33:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:37 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:33:37.906740 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd9366b0\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:33:37 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd934490\\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\\r\\nJun 25 04:33:37 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:33:37.908739 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd935270\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:33:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:39 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:33:39.911389 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd936d40\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:33:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:43 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:33:43.916267 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd936860\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:33:43 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd937670\\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\\r\\nJun 25 04:33:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:53 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:33:53.926093 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:33:53 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:33:53 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/deeplearning/bin/notebooks_collection_agent.py\\\", line 618, in dns_resolution_query\\r\\nJun 25 04:33:53 notebooks2instance-provisioning-stuck bash[5948]:     _ = subprocess.run(\\r\\nJun 25 04:33:53 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/subprocess.py\\\", line 526, in run\\r\\nJun 25 04:33:53 notebooks2instance-provisioning-stuck bash[5948]:     raise CalledProcessError(retcode, process.args,\\r\\nJun 25 04:33:53 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:33:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n         Starting \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m...\\r\\nJun 25 04:33:56 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\\r\\nJun 25 04:33:57 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m.\\r\\nJun 25 04:33:57 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\\r\\n         Starting \\u001b[0;1;39mChecks whether to…nce based on idle schedule.\\u001b[0m...\\r\\nJun 25 04:33:57 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\r\\nJun 25 04:33:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:58 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[55788]: Setting last notebook activity timestamp 1719289611 at 1719290038 for the following reason: Reason - latest session activity - replaced by later instance creation date\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mChecks whether to…tance based on idle schedule.\\u001b[0m.\\r\\nJun 25 04:33:58 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\r\\nJun 25 04:33:58 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\r\\nJun 25 04:33:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:33:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:03 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:34:03.789421 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:34:03 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:34:03 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/deeplearning/bin/notebooks_collection_agent.py\\\", line 618, in dns_resolution_query\\r\\nJun 25 04:34:03 notebooks2instance-provisioning-stuck bash[5948]:     _ = subprocess.run(\\r\\nJun 25 04:34:03 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/subprocess.py\\\", line 526, in run\\r\\nJun 25 04:34:03 notebooks2instance-provisioning-stuck bash[5948]:     raise CalledProcessError(retcode, process.args,\\r\\nJun 25 04:34:03 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:34:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n         Starting \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m...\\r\\nJun 25 04:34:57 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\\r\\nJun 25 04:34:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:57 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m.\\r\\nJun 25 04:34:57 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\\r\\n         Starting \\u001b[0;1;39mChecks whether to…nce based on idle schedule.\\u001b[0m...\\r\\nJun 25 04:34:57 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\r\\nJun 25 04:34:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:34:58 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[56102]: Setting last notebook activity timestamp 1719289611 at 1719290098 for the following reason: Reason - latest session activity - replaced by later instance creation date\\r\\nJun 25 04:34:58 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mChecks whether to…tance based on idle schedule.\\u001b[0m.\\r\\nJun 25 04:34:58 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\r\\nJun 25 04:34:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:35:03.942628 140200635197248 notebooks_collection_agent.py:1968] Unable to contact Notebooks API HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\\u003curllib3.connection.HTTPSConnection object at 0x7f82fd954fd0\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\\r\\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\\\", line 198, in _new_conn\\r\\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]:     sock = connection.create_connection(\\r\\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\\\", line 85, in create_connection\\r\\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]:     raise err\\r\\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\\\", line 73, in create_connection\\r\\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]:     sock.connect(sa)\\r\\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: OSError: [Errno 101] Network is unreachable\\r\\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\\r\\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 793, in urlopen\\r\\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]:     response = self._make_request(\\r\\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 491, in _make_request\\r\\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]:     raise new_e\\r\\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 467, in _make_request\\r\\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]:     self._validate_conn(conn)\\r\\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 1099, in _validate_conn\\r\\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]:     conn.connect()\\r\\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\\\", line 616, in connect\\r\\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]:     self.sock = sock = self._new_conn()\\r\\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\\\", line 213, in _new_conn\\r\\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]:     raise NewConnectionError(\\r\\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.NewConnectionError: \\u003curllib3.connection.HTTPSConnection object at 0x7f82fd954fd0\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable\\r\\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\\r\\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\\\", line 667, in send\\r\\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]:     resp = conn.urlopen(\\r\\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 847, in urlopen\\r\\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]:     retries = retries.increment(\\r\\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/util/retry.py\\\", line 515, in increment\\r\\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]:     raise MaxRetryError(_pool, url, reason) from reason  # type: ignore[arg-type]\\r\\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\\u003curllib3.connection.HTTPSConnection object at 0x7f82fd954fd0\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\\r\\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: During handling of the above exception, another exception occurred:\\r\\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/deeplearning/bin/notebooks_collection_agent.py\\\", line 1956, in report_notebook_event\\r\\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]:     response = session.post(\\r\\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\\\", line 637, in post\\r\\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]:     return self.request(\\\"POST\\\", url, data=data, json=json, **kwargs)\\r\\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\\\", line 589, in request\\r\\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]:     resp = self.send(prep, **send_kwargs)\\r\\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\\\", line 703, in send\\r\\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]:     r = adapter.send(request, **kwargs)\\r\\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\\\", line 700, in send\\r\\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]:     raise ConnectionError(e, request=request)\\r\\nJun 25 04:35:03 notebooks2instance-provisioning-stuck bash[5948]: requests.exceptions.ConnectionError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\\u003curllib3.connection.HTTPSConnection object at 0x7f82fd954fd0\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\\r\\nJun 25 04:35:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:10 notebooks2instance-provisioning-stuck dhclient[516]: XMT: Solicit on ens4, interval 123440ms.\\r\\nJun 25 04:35:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n         Starting \\u001b[0;1;39mGCE Workload Certificate refresh\\u001b[0m...\\r\\nJun 25 04:35:21 notebooks2instance-provisioning-stuck systemd[1]: Starting GCE Workload Certificate refresh...\\r\\nJun 25 04:35:21 notebooks2instance-provisioning-stuck gce_workload_cert_refresh[56281]: 2024/06/25 04:35:21: Done\\r\\nJun 25 04:35:21 notebooks2instance-provisioning-stuck systemd[1]: gce-workload-cert-refresh.service: Succeeded.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mGCE Workload Certificate refresh\\u001b[0m.\\r\\nJun 25 04:35:21 notebooks2instance-provisioning-stuck systemd[1]: Finished GCE Workload Certificate refresh.\\r\\nJun 25 04:35:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:34 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:35:33.999575 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd956080\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:35:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:36 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:35:36.002272 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd9548b0\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:35:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:40 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:35:40.007529 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd937cd0\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:35:40 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd937940\\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\\r\\nJun 25 04:35:40 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:35:40.009948 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd937fd0\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:35:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:42 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:35:42.012767 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd9367a0\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:35:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:46 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:35:46.017914 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd937670\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:35:46 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd936f50\\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\\r\\nJun 25 04:35:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:56 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:35:56.028056 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:35:56 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:35:56 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/deeplearning/bin/notebooks_collection_agent.py\\\", line 618, in dns_resolution_query\\r\\nJun 25 04:35:56 notebooks2instance-provisioning-stuck bash[5948]:     _ = subprocess.run(\\r\\nJun 25 04:35:56 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/subprocess.py\\\", line 526, in run\\r\\nJun 25 04:35:56 notebooks2instance-provisioning-stuck bash[5948]:     raise CalledProcessError(retcode, process.args,\\r\\nJun 25 04:35:56 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:35:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n         Starting \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m...\\r\\nJun 25 04:35:58 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\\r\\nJun 25 04:35:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:35:58 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m.\\r\\nJun 25 04:35:58 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\\r\\n         Starting \\u001b[0;1;39mChecks whether to…nce based on idle schedule.\\u001b[0m...\\r\\nJun 25 04:35:58 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\r\\nJun 25 04:35:59 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[56431]: Setting last notebook activity timestamp 1719289611 at 1719290159 for the following reason: Reason - latest session activity - replaced by later instance creation date\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mChecks whether to…tance based on idle schedule.\\u001b[0m.\\r\\nJun 25 04:35:59 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\r\\nJun 25 04:35:59 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\r\\nJun 25 04:35:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:05 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:36:05.891366 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:36:05 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:36:05 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/deeplearning/bin/notebooks_collection_agent.py\\\", line 618, in dns_resolution_query\\r\\nJun 25 04:36:05 notebooks2instance-provisioning-stuck bash[5948]:     _ = subprocess.run(\\r\\nJun 25 04:36:05 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/subprocess.py\\\", line 526, in run\\r\\nJun 25 04:36:05 notebooks2instance-provisioning-stuck bash[5948]:     raise CalledProcessError(retcode, process.args,\\r\\nJun 25 04:36:05 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:36:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:36:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n         Starting \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m...\\r\\nJun 25 04:36:59 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\\r\\nJun 25 04:36:59 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m.\\r\\nJun 25 04:36:59 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\\r\\n         Starting \\u001b[0;1;39mChecks whether to…nce based on idle schedule.\\u001b[0m...\\r\\nJun 25 04:36:59 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\r\\nJun 25 04:37:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:00 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[56740]: Setting last notebook activity timestamp 1719289611 at 1719290220 for the following reason: Reason - latest session activity - replaced by later instance creation date\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mChecks whether to…tance based on idle schedule.\\u001b[0m.\\r\\nJun 25 04:37:00 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\r\\nJun 25 04:37:00 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\r\\nJun 25 04:37:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:37:06.049351 140200635197248 notebooks_collection_agent.py:1968] Unable to contact Notebooks API HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\\u003curllib3.connection.HTTPSConnection object at 0x7f82fd957370\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\\r\\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\\\", line 198, in _new_conn\\r\\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]:     sock = connection.create_connection(\\r\\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\\\", line 85, in create_connection\\r\\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]:     raise err\\r\\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\\\", line 73, in create_connection\\r\\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]:     sock.connect(sa)\\r\\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: OSError: [Errno 101] Network is unreachable\\r\\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\\r\\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 793, in urlopen\\r\\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]:     response = self._make_request(\\r\\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 491, in _make_request\\r\\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]:     raise new_e\\r\\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 467, in _make_request\\r\\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]:     self._validate_conn(conn)\\r\\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 1099, in _validate_conn\\r\\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]:     conn.connect()\\r\\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\\\", line 616, in connect\\r\\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]:     self.sock = sock = self._new_conn()\\r\\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\\\", line 213, in _new_conn\\r\\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]:     raise NewConnectionError(\\r\\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.NewConnectionError: \\u003curllib3.connection.HTTPSConnection object at 0x7f82fd957370\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable\\r\\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\\r\\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\\\", line 667, in send\\r\\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]:     resp = conn.urlopen(\\r\\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 847, in urlopen\\r\\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]:     retries = retries.increment(\\r\\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/util/retry.py\\\", line 515, in increment\\r\\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]:     raise MaxRetryError(_pool, url, reason) from reason  # type: ignore[arg-type]\\r\\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\\u003curllib3.connection.HTTPSConnection object at 0x7f82fd957370\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\\r\\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: During handling of the above exception, another exception occurred:\\r\\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/deeplearning/bin/notebooks_collection_agent.py\\\", line 1956, in report_notebook_event\\r\\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]:     response = session.post(\\r\\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\\\", line 637, in post\\r\\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]:     return self.request(\\\"POST\\\", url, data=data, json=json, **kwargs)\\r\\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\\\", line 589, in request\\r\\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]:     resp = self.send(prep, **send_kwargs)\\r\\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\\\", line 703, in send\\r\\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]:     r = adapter.send(request, **kwargs)\\r\\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\\\", line 700, in send\\r\\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]:     raise ConnectionError(e, request=request)\\r\\nJun 25 04:37:06 notebooks2instance-provisioning-stuck bash[5948]: requests.exceptions.ConnectionError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\\u003curllib3.connection.HTTPSConnection object at 0x7f82fd957370\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\\r\\nJun 25 04:37:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:14 notebooks2instance-provisioning-stuck dhclient[516]: XMT: Solicit on ens4, interval 117450ms.\\r\\nJun 25 04:37:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:36 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:37:36.105796 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd957eb0\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:37:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:38 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:37:38.108669 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd934eb0\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:37:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:42 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:37:42.113904 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd937430\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:37:42 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd936380\\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\\r\\nJun 25 04:37:42 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:37:42.116316 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd9367a0\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:37:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:44 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:37:44.119067 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd937220\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:37:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:48 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:37:48.124212 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd934f70\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:37:48 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd936a40\\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\\r\\nJun 25 04:37:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:58 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:37:58.134413 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:37:58 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:37:58 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/deeplearning/bin/notebooks_collection_agent.py\\\", line 618, in dns_resolution_query\\r\\nJun 25 04:37:58 notebooks2instance-provisioning-stuck bash[5948]:     _ = subprocess.run(\\r\\nJun 25 04:37:58 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/subprocess.py\\\", line 526, in run\\r\\nJun 25 04:37:58 notebooks2instance-provisioning-stuck bash[5948]:     raise CalledProcessError(retcode, process.args,\\r\\nJun 25 04:37:58 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:37:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:37:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n         Starting \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m...\\r\\nJun 25 04:38:00 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\\r\\nJun 25 04:38:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:00 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m.\\r\\nJun 25 04:38:00 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\\r\\n         Starting \\u001b[0;1;39mChecks whether to…nce based on idle schedule.\\u001b[0m...\\r\\nJun 25 04:38:00 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\r\\nJun 25 04:38:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:01 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[57061]: Setting last notebook activity timestamp 1719289611 at 1719290281 for the following reason: Reason - latest session activity - replaced by later instance creation date\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mChecks whether to…tance based on idle schedule.\\u001b[0m.\\r\\nJun 25 04:38:01 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\r\\nJun 25 04:38:01 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\r\\nJun 25 04:38:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:07 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:38:07.997183 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:38:07 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:38:07 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/deeplearning/bin/notebooks_collection_agent.py\\\", line 618, in dns_resolution_query\\r\\nJun 25 04:38:07 notebooks2instance-provisioning-stuck bash[5948]:     _ = subprocess.run(\\r\\nJun 25 04:38:07 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/subprocess.py\\\", line 526, in run\\r\\nJun 25 04:38:07 notebooks2instance-provisioning-stuck bash[5948]:     raise CalledProcessError(retcode, process.args,\\r\\nJun 25 04:38:07 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:38:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:38:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n         Starting \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m...\\r\\nJun 25 04:39:00 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\\r\\nJun 25 04:39:01 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m.\\r\\nJun 25 04:39:01 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\\r\\n         Starting \\u001b[0;1;39mChecks whether to…nce based on idle schedule.\\u001b[0m...\\r\\nJun 25 04:39:01 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\r\\nJun 25 04:39:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:02 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[57372]: Setting last notebook activity timestamp 1719289611 at 1719290342 for the following reason: Reason - latest session activity - replaced by later instance creation date\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mChecks whether to…tance based on idle schedule.\\u001b[0m.\\r\\nJun 25 04:39:02 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\r\\nJun 25 04:39:02 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\r\\nJun 25 04:39:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:39:08.153598 140200635197248 notebooks_collection_agent.py:1968] Unable to contact Notebooks API HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\\u003curllib3.connection.HTTPSConnection object at 0x7f82fd954970\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\\r\\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\\\", line 198, in _new_conn\\r\\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]:     sock = connection.create_connection(\\r\\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\\\", line 85, in create_connection\\r\\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]:     raise err\\r\\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\\\", line 73, in create_connection\\r\\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]:     sock.connect(sa)\\r\\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: OSError: [Errno 101] Network is unreachable\\r\\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\\r\\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 793, in urlopen\\r\\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]:     response = self._make_request(\\r\\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 491, in _make_request\\r\\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]:     raise new_e\\r\\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 467, in _make_request\\r\\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]:     self._validate_conn(conn)\\r\\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 1099, in _validate_conn\\r\\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]:     conn.connect()\\r\\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\\\", line 616, in connect\\r\\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]:     self.sock = sock = self._new_conn()\\r\\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\\\", line 213, in _new_conn\\r\\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]:     raise NewConnectionError(\\r\\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.NewConnectionError: \\u003curllib3.connection.HTTPSConnection object at 0x7f82fd954970\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable\\r\\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\\r\\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\\\", line 667, in send\\r\\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]:     resp = conn.urlopen(\\r\\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 847, in urlopen\\r\\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]:     retries = retries.increment(\\r\\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/util/retry.py\\\", line 515, in increment\\r\\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]:     raise MaxRetryError(_pool, url, reason) from reason  # type: ignore[arg-type]\\r\\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\\u003curllib3.connection.HTTPSConnection object at 0x7f82fd954970\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\\r\\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: During handling of the above exception, another exception occurred:\\r\\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/deeplearning/bin/notebooks_collection_agent.py\\\", line 1956, in report_notebook_event\\r\\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]:     response = session.post(\\r\\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\\\", line 637, in post\\r\\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]:     return self.request(\\\"POST\\\", url, data=data, json=json, **kwargs)\\r\\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\\\", line 589, in request\\r\\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]:     resp = self.send(prep, **send_kwargs)\\r\\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\\\", line 703, in send\\r\\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]:     r = adapter.send(request, **kwargs)\\r\\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\\\", line 700, in send\\r\\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]:     raise ConnectionError(e, request=request)\\r\\nJun 25 04:39:08 notebooks2instance-provisioning-stuck bash[5948]: requests.exceptions.ConnectionError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\\u003curllib3.connection.HTTPSConnection object at 0x7f82fd954970\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\\r\\nJun 25 04:39:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:11 notebooks2instance-provisioning-stuck dhclient[516]: XMT: Solicit on ens4, interval 129750ms.\\r\\nJun 25 04:39:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:38 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:39:38.210936 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd9578e0\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:39:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:40 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:39:40.213657 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd9365f0\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:39:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:44 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:39:44.218640 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd9344f0\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:39:44 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd937820\\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\\r\\nJun 25 04:39:44 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:39:44.220700 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd937220\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:39:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:46 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:39:46.223384 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd937ca0\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:39:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:50 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:39:50.228333 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd934fd0\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:39:50 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd936f50\\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\\r\\nJun 25 04:39:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:39:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:00 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:40:00.238714 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:40:00 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:40:00 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/deeplearning/bin/notebooks_collection_agent.py\\\", line 618, in dns_resolution_query\\r\\nJun 25 04:40:00 notebooks2instance-provisioning-stuck bash[5948]:     _ = subprocess.run(\\r\\nJun 25 04:40:00 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/subprocess.py\\\", line 526, in run\\r\\nJun 25 04:40:00 notebooks2instance-provisioning-stuck bash[5948]:     raise CalledProcessError(retcode, process.args,\\r\\nJun 25 04:40:00 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:40:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n         Starting \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m...\\r\\nJun 25 04:40:01 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\\r\\nJun 25 04:40:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:02 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m.\\r\\nJun 25 04:40:02 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\\r\\n         Starting \\u001b[0;1;39mChecks whether to…nce based on idle schedule.\\u001b[0m...\\r\\nJun 25 04:40:02 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\r\\nJun 25 04:40:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:03 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[57701]: Setting last notebook activity timestamp 1719289611 at 1719290403 for the following reason: Reason - latest session activity - replaced by later instance creation date\\r\\nJun 25 04:40:03 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mChecks whether to…tance based on idle schedule.\\u001b[0m.\\r\\nJun 25 04:40:03 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\r\\nJun 25 04:40:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:10 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:40:10.102290 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:40:10 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:40:10 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/deeplearning/bin/notebooks_collection_agent.py\\\", line 618, in dns_resolution_query\\r\\nJun 25 04:40:10 notebooks2instance-provisioning-stuck bash[5948]:     _ = subprocess.run(\\r\\nJun 25 04:40:10 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/subprocess.py\\\", line 526, in run\\r\\nJun 25 04:40:10 notebooks2instance-provisioning-stuck bash[5948]:     raise CalledProcessError(retcode, process.args,\\r\\nJun 25 04:40:10 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:40:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:40:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n         Starting \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m...\\r\\nJun 25 04:41:02 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\\r\\nJun 25 04:41:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:03 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m.\\r\\nJun 25 04:41:03 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\\r\\n         Starting \\u001b[0;1;39mChecks whether to…nce based on idle schedule.\\u001b[0m...\\r\\nJun 25 04:41:03 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\r\\nJun 25 04:41:04 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[58044]: Setting last notebook activity timestamp 1719289611 at 1719290464 for the following reason: Reason - latest session activity - replaced by later instance creation date\\r\\nJun 25 04:41:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mChecks whether to…tance based on idle schedule.\\u001b[0m.\\r\\nJun 25 04:41:04 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\r\\nJun 25 04:41:04 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\r\\nJun 25 04:41:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:41:10.259308 140200635197248 notebooks_collection_agent.py:1968] Unable to contact Notebooks API HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\\u003curllib3.connection.HTTPSConnection object at 0x7f82fd957e50\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\\r\\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\\\", line 198, in _new_conn\\r\\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]:     sock = connection.create_connection(\\r\\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\\\", line 85, in create_connection\\r\\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]:     raise err\\r\\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\\\", line 73, in create_connection\\r\\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]:     sock.connect(sa)\\r\\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: OSError: [Errno 101] Network is unreachable\\r\\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\\r\\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 793, in urlopen\\r\\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]:     response = self._make_request(\\r\\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 491, in _make_request\\r\\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]:     raise new_e\\r\\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 467, in _make_request\\r\\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]:     self._validate_conn(conn)\\r\\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 1099, in _validate_conn\\r\\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]:     conn.connect()\\r\\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\\\", line 616, in connect\\r\\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]:     self.sock = sock = self._new_conn()\\r\\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\\\", line 213, in _new_conn\\r\\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]:     raise NewConnectionError(\\r\\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.NewConnectionError: \\u003curllib3.connection.HTTPSConnection object at 0x7f82fd957e50\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable\\r\\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\\r\\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\\\", line 667, in send\\r\\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]:     resp = conn.urlopen(\\r\\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 847, in urlopen\\r\\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]:     retries = retries.increment(\\r\\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/util/retry.py\\\", line 515, in increment\\r\\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]:     raise MaxRetryError(_pool, url, reason) from reason  # type: ignore[arg-type]\\r\\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\\u003curllib3.connection.HTTPSConnection object at 0x7f82fd957e50\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\\r\\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: During handling of the above exception, another exception occurred:\\r\\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/deeplearning/bin/notebooks_collection_agent.py\\\", line 1956, in report_notebook_event\\r\\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]:     response = session.post(\\r\\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\\\", line 637, in post\\r\\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]:     return self.request(\\\"POST\\\", url, data=data, json=json, **kwargs)\\r\\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\\\", line 589, in request\\r\\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]:     resp = self.send(prep, **send_kwargs)\\r\\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\\\", line 703, in send\\r\\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]:     r = adapter.send(request, **kwargs)\\r\\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\\\", line 700, in send\\r\\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]:     raise ConnectionError(e, request=request)\\r\\nJun 25 04:41:10 notebooks2instance-provisioning-stuck bash[5948]: requests.exceptions.ConnectionError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\\u003curllib3.connection.HTTPSConnection object at 0x7f82fd957e50\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\\r\\nJun 25 04:41:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:21 notebooks2instance-provisioning-stuck dhclient[516]: XMT: Solicit on ens4, interval 108050ms.\\r\\nJun 25 04:41:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:40 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:41:40.312452 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd9550c0\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:41:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:42 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:41:42.315340 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd936da0\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:41:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:46 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:41:46.320463 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd935f30\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:41:46 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd936590\\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\\r\\nJun 25 04:41:46 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:41:46.322666 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd937ca0\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:41:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:48 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:41:48.325356 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd936260\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:41:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:52 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:41:52.326738 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd937010\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:41:52 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd936a40\\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\\r\\nJun 25 04:41:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:41:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:02 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:42:02.337100 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:42:02 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:42:02 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/deeplearning/bin/notebooks_collection_agent.py\\\", line 618, in dns_resolution_query\\r\\nJun 25 04:42:02 notebooks2instance-provisioning-stuck bash[5948]:     _ = subprocess.run(\\r\\nJun 25 04:42:02 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/subprocess.py\\\", line 526, in run\\r\\nJun 25 04:42:02 notebooks2instance-provisioning-stuck bash[5948]:     raise CalledProcessError(retcode, process.args,\\r\\nJun 25 04:42:02 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:42:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n         Starting \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m...\\r\\nJun 25 04:42:03 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\\r\\nJun 25 04:42:03 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m.\\r\\nJun 25 04:42:03 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\\r\\n         Starting \\u001b[0;1;39mChecks whether to…nce based on idle schedule.\\u001b[0m...\\r\\nJun 25 04:42:03 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\r\\nJun 25 04:42:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:04 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[58386]: Setting last notebook activity timestamp 1719289611 at 1719290524 for the following reason: Reason - latest session activity - replaced by later instance creation date\\r\\nJun 25 04:42:04 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mChecks whether to…tance based on idle schedule.\\u001b[0m.\\r\\nJun 25 04:42:04 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\r\\nJun 25 04:42:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:12 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:42:12.200881 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:42:12 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:42:12 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/deeplearning/bin/notebooks_collection_agent.py\\\", line 618, in dns_resolution_query\\r\\nJun 25 04:42:12 notebooks2instance-provisioning-stuck bash[5948]:     _ = subprocess.run(\\r\\nJun 25 04:42:12 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/subprocess.py\\\", line 526, in run\\r\\nJun 25 04:42:12 notebooks2instance-provisioning-stuck bash[5948]:     raise CalledProcessError(retcode, process.args,\\r\\nJun 25 04:42:12 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:42:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:42:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n         Starting \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m...\\r\\nJun 25 04:43:04 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\\r\\nJun 25 04:43:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:04 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m.\\r\\nJun 25 04:43:04 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\\r\\n         Starting \\u001b[0;1;39mChecks whether to…nce based on idle schedule.\\u001b[0m...\\r\\nJun 25 04:43:04 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\r\\nJun 25 04:43:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:05 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[58700]: Setting last notebook activity timestamp 1719289611 at 1719290585 for the following reason: Reason - latest session activity - replaced by later instance creation date\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mChecks whether to…tance based on idle schedule.\\u001b[0m.\\r\\nJun 25 04:43:05 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\r\\nJun 25 04:43:05 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\r\\nJun 25 04:43:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:09 notebooks2instance-provisioning-stuck dhclient[516]: XMT: Solicit on ens4, interval 114100ms.\\r\\nJun 25 04:43:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:43:12.359556 140200635197248 notebooks_collection_agent.py:1968] Unable to contact Notebooks API HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\\u003curllib3.connection.HTTPSConnection object at 0x7f82fd954b20\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\\r\\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\\\", line 198, in _new_conn\\r\\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]:     sock = connection.create_connection(\\r\\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\\\", line 85, in create_connection\\r\\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]:     raise err\\r\\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\\\", line 73, in create_connection\\r\\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]:     sock.connect(sa)\\r\\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: OSError: [Errno 101] Network is unreachable\\r\\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\\r\\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 793, in urlopen\\r\\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]:     response = self._make_request(\\r\\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 491, in _make_request\\r\\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]:     raise new_e\\r\\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 467, in _make_request\\r\\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]:     self._validate_conn(conn)\\r\\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 1099, in _validate_conn\\r\\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]:     conn.connect()\\r\\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\\\", line 616, in connect\\r\\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]:     self.sock = sock = self._new_conn()\\r\\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\\\", line 213, in _new_conn\\r\\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]:     raise NewConnectionError(\\r\\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.NewConnectionError: \\u003curllib3.connection.HTTPSConnection object at 0x7f82fd954b20\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable\\r\\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\\r\\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\\\", line 667, in send\\r\\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]:     resp = conn.urlopen(\\r\\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 847, in urlopen\\r\\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]:     retries = retries.increment(\\r\\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/util/retry.py\\\", line 515, in increment\\r\\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]:     raise MaxRetryError(_pool, url, reason) from reason  # type: ignore[arg-type]\\r\\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\\u003curllib3.connection.HTTPSConnection object at 0x7f82fd954b20\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\\r\\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: During handling of the above exception, another exception occurred:\\r\\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/deeplearning/bin/notebooks_collection_agent.py\\\", line 1956, in report_notebook_event\\r\\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]:     response = session.post(\\r\\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\\\", line 637, in post\\r\\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]:     return self.request(\\\"POST\\\", url, data=data, json=json, **kwargs)\\r\\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\\\", line 589, in request\\r\\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]:     resp = self.send(prep, **send_kwargs)\\r\\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\\\", line 703, in send\\r\\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]:     r = adapter.send(request, **kwargs)\\r\\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\\\", line 700, in send\\r\\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]:     raise ConnectionError(e, request=request)\\r\\nJun 25 04:43:12 notebooks2instance-provisioning-stuck bash[5948]: requests.exceptions.ConnectionError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\\u003curllib3.connection.HTTPSConnection object at 0x7f82fd954b20\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\\r\\nJun 25 04:43:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:42 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:43:42.416126 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd9560e0\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:43:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:44 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:43:44.418790 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd936fb0\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:43:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:48 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:43:48.423712 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd936980\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:43:48 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd935990\\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\\r\\nJun 25 04:43:48 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:43:48.425871 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd936260\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:43:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:50 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:43:50.428670 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd937790\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:43:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:54 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:43:54.433556 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd9362c0\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:43:54 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd936f50\\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\\r\\nJun 25 04:43:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:43:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:04 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:44:04.443448 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:44:04 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:44:04 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/deeplearning/bin/notebooks_collection_agent.py\\\", line 618, in dns_resolution_query\\r\\nJun 25 04:44:04 notebooks2instance-provisioning-stuck bash[5948]:     _ = subprocess.run(\\r\\nJun 25 04:44:04 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/subprocess.py\\\", line 526, in run\\r\\nJun 25 04:44:04 notebooks2instance-provisioning-stuck bash[5948]:     raise CalledProcessError(retcode, process.args,\\r\\nJun 25 04:44:04 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:44:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n         Starting \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m...\\r\\nJun 25 04:44:05 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\\r\\nJun 25 04:44:05 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m.\\r\\nJun 25 04:44:05 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\\r\\n         Starting \\u001b[0;1;39mChecks whether to…nce based on idle schedule.\\u001b[0m...\\r\\nJun 25 04:44:05 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\r\\nJun 25 04:44:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:06 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[59016]: Setting last notebook activity timestamp 1719289611 at 1719290646 for the following reason: Reason - latest session activity - replaced by later instance creation date\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mChecks whether to…tance based on idle schedule.\\u001b[0m.\\r\\nJun 25 04:44:06 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\r\\nJun 25 04:44:06 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\r\\nJun 25 04:44:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:14 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:44:14.307066 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:44:14 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:44:14 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/deeplearning/bin/notebooks_collection_agent.py\\\", line 618, in dns_resolution_query\\r\\nJun 25 04:44:14 notebooks2instance-provisioning-stuck bash[5948]:     _ = subprocess.run(\\r\\nJun 25 04:44:14 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/subprocess.py\\\", line 526, in run\\r\\nJun 25 04:44:14 notebooks2instance-provisioning-stuck bash[5948]:     raise CalledProcessError(retcode, process.args,\\r\\nJun 25 04:44:14 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:44:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:44:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:03 notebooks2instance-provisioning-stuck dhclient[516]: XMT: Solicit on ens4, interval 122030ms.\\r\\nJun 25 04:45:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n         Starting \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m...\\r\\nJun 25 04:45:05 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\\r\\nJun 25 04:45:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:06 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m.\\r\\nJun 25 04:45:06 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\\r\\n         Starting \\u001b[0;1;39mChecks whether to…nce based on idle schedule.\\u001b[0m...\\r\\nJun 25 04:45:06 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\r\\nJun 25 04:45:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:07 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[59330]: Setting last notebook activity timestamp 1719289611 at 1719290707 for the following reason: Reason - latest session activity - replaced by later instance creation date\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mChecks whether to…tance based on idle schedule.\\u001b[0m.\\r\\nJun 25 04:45:07 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\r\\nJun 25 04:45:07 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\r\\nJun 25 04:45:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:45:14.469485 140200635197248 notebooks_collection_agent.py:1968] Unable to contact Notebooks API HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\\u003curllib3.connection.HTTPSConnection object at 0x7f82fd9575b0\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\\r\\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\\\", line 198, in _new_conn\\r\\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]:     sock = connection.create_connection(\\r\\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\\\", line 85, in create_connection\\r\\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]:     raise err\\r\\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\\\", line 73, in create_connection\\r\\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]:     sock.connect(sa)\\r\\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: OSError: [Errno 101] Network is unreachable\\r\\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\\r\\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 793, in urlopen\\r\\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]:     response = self._make_request(\\r\\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 491, in _make_request\\r\\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]:     raise new_e\\r\\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 467, in _make_request\\r\\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]:     self._validate_conn(conn)\\r\\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 1099, in _validate_conn\\r\\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]:     conn.connect()\\r\\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\\\", line 616, in connect\\r\\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]:     self.sock = sock = self._new_conn()\\r\\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\\\", line 213, in _new_conn\\r\\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]:     raise NewConnectionError(\\r\\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.NewConnectionError: \\u003curllib3.connection.HTTPSConnection object at 0x7f82fd9575b0\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable\\r\\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\\r\\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\\\", line 667, in send\\r\\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]:     resp = conn.urlopen(\\r\\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 847, in urlopen\\r\\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]:     retries = retries.increment(\\r\\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/util/retry.py\\\", line 515, in increment\\r\\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]:     raise MaxRetryError(_pool, url, reason) from reason  # type: ignore[arg-type]\\r\\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\\u003curllib3.connection.HTTPSConnection object at 0x7f82fd9575b0\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\\r\\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: During handling of the above exception, another exception occurred:\\r\\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/deeplearning/bin/notebooks_collection_agent.py\\\", line 1956, in report_notebook_event\\r\\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]:     response = session.post(\\r\\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\\\", line 637, in post\\r\\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]:     return self.request(\\\"POST\\\", url, data=data, json=json, **kwargs)\\r\\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\\\", line 589, in request\\r\\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]:     resp = self.send(prep, **send_kwargs)\\r\\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\\\", line 703, in send\\r\\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]:     r = adapter.send(request, **kwargs)\\r\\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\\\", line 700, in send\\r\\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]:     raise ConnectionError(e, request=request)\\r\\nJun 25 04:45:14 notebooks2instance-provisioning-stuck bash[5948]: requests.exceptions.ConnectionError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\\u003curllib3.connection.HTTPSConnection object at 0x7f82fd9575b0\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\\r\\nJun 25 04:45:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n         Starting \\u001b[0;1;39mGCE Workload Certificate refresh\\u001b[0m...\\r\\nJun 25 04:45:21 notebooks2instance-provisioning-stuck systemd[1]: Starting GCE Workload Certificate refresh...\\r\\nJun 25 04:45:21 notebooks2instance-provisioning-stuck gce_workload_cert_refresh[59422]: 2024/06/25 04:45:21: Done\\r\\nJun 25 04:45:21 notebooks2instance-provisioning-stuck systemd[1]: gce-workload-cert-refresh.service: Succeeded.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mGCE Workload Certificate refresh\\u001b[0m.\\r\\nJun 25 04:45:21 notebooks2instance-provisioning-stuck systemd[1]: Finished GCE Workload Certificate refresh.\\r\\nJun 25 04:45:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:44 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:45:44.507784 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd954610\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:45:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:46 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:45:46.510634 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd937490\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:45:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:50 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:45:50.515764 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd9377f0\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:45:50 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd9354e0\\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\\r\\nJun 25 04:45:50 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:45:50.517991 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd937790\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:45:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:52 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:45:52.520652 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd936d70\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:45:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:56 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:45:56.525561 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd936ce0\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:45:56 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd936a40\\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\\r\\nJun 25 04:45:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:45:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:06 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:46:06.535384 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:46:06 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:46:06 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/deeplearning/bin/notebooks_collection_agent.py\\\", line 618, in dns_resolution_query\\r\\nJun 25 04:46:06 notebooks2instance-provisioning-stuck bash[5948]:     _ = subprocess.run(\\r\\nJun 25 04:46:06 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/subprocess.py\\\", line 526, in run\\r\\nJun 25 04:46:06 notebooks2instance-provisioning-stuck bash[5948]:     raise CalledProcessError(retcode, process.args,\\r\\nJun 25 04:46:06 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\\r\\n         Starting \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m...\\r\\nJun 25 04:46:06 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\\r\\nJun 25 04:46:07 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m.\\r\\nJun 25 04:46:07 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\\r\\n         Starting \\u001b[0;1;39mChecks whether to…nce based on idle schedule.\\u001b[0m...\\r\\nJun 25 04:46:07 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\r\\nJun 25 04:46:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:08 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[59652]: Setting last notebook activity timestamp 1719289611 at 1719290768 for the following reason: Reason - latest session activity - replaced by later instance creation date\\r\\nJun 25 04:46:08 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mChecks whether to…tance based on idle schedule.\\u001b[0m.\\r\\nJun 25 04:46:08 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\r\\nJun 25 04:46:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:16 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:46:16.398165 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:46:16 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:46:16 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/deeplearning/bin/notebooks_collection_agent.py\\\", line 618, in dns_resolution_query\\r\\nJun 25 04:46:16 notebooks2instance-provisioning-stuck bash[5948]:     _ = subprocess.run(\\r\\nJun 25 04:46:16 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/subprocess.py\\\", line 526, in run\\r\\nJun 25 04:46:16 notebooks2instance-provisioning-stuck bash[5948]:     raise CalledProcessError(retcode, process.args,\\r\\nJun 25 04:46:16 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:46:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:46:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:05 notebooks2instance-provisioning-stuck dhclient[516]: XMT: Solicit on ens4, interval 116120ms.\\r\\nJun 25 04:47:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n         Starting \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m...\\r\\nJun 25 04:47:07 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\\r\\nJun 25 04:47:08 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m.\\r\\nJun 25 04:47:08 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\\r\\n         Starting \\u001b[0;1;39mChecks whether to…nce based on idle schedule.\\u001b[0m...\\r\\nJun 25 04:47:08 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\r\\nJun 25 04:47:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:09 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[59966]: Setting last notebook activity timestamp 1719289611 at 1719290829 for the following reason: Reason - latest session activity - replaced by later instance creation date\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mChecks whether to…tance based on idle schedule.\\u001b[0m.\\r\\nJun 25 04:47:09 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\r\\nJun 25 04:47:09 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\r\\nJun 25 04:47:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:47:16.553630 140200635197248 notebooks_collection_agent.py:1968] Unable to contact Notebooks API HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\\u003curllib3.connection.HTTPSConnection object at 0x7f82fd9546a0\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\\r\\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\\\", line 198, in _new_conn\\r\\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]:     sock = connection.create_connection(\\r\\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\\\", line 85, in create_connection\\r\\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]:     raise err\\r\\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\\\", line 73, in create_connection\\r\\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]:     sock.connect(sa)\\r\\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: OSError: [Errno 101] Network is unreachable\\r\\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\\r\\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 793, in urlopen\\r\\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]:     response = self._make_request(\\r\\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 491, in _make_request\\r\\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]:     raise new_e\\r\\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 467, in _make_request\\r\\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]:     self._validate_conn(conn)\\r\\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 1099, in _validate_conn\\r\\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]:     conn.connect()\\r\\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\\\", line 616, in connect\\r\\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]:     self.sock = sock = self._new_conn()\\r\\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\\\", line 213, in _new_conn\\r\\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]:     raise NewConnectionError(\\r\\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.NewConnectionError: \\u003curllib3.connection.HTTPSConnection object at 0x7f82fd9546a0\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable\\r\\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\\r\\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\\\", line 667, in send\\r\\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]:     resp = conn.urlopen(\\r\\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 847, in urlopen\\r\\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]:     retries = retries.increment(\\r\\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/util/retry.py\\\", line 515, in increment\\r\\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]:     raise MaxRetryError(_pool, url, reason) from reason  # type: ignore[arg-type]\\r\\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\\u003curllib3.connection.HTTPSConnection object at 0x7f82fd9546a0\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\\r\\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: During handling of the above exception, another exception occurred:\\r\\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/deeplearning/bin/notebooks_collection_agent.py\\\", line 1956, in report_notebook_event\\r\\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]:     response = session.post(\\r\\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\\\", line 637, in post\\r\\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]:     return self.request(\\\"POST\\\", url, data=data, json=json, **kwargs)\\r\\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\\\", line 589, in request\\r\\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]:     resp = self.send(prep, **send_kwargs)\\r\\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\\\", line 703, in send\\r\\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]:     r = adapter.send(request, **kwargs)\\r\\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\\\", line 700, in send\\r\\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]:     raise ConnectionError(e, request=request)\\r\\nJun 25 04:47:16 notebooks2instance-provisioning-stuck bash[5948]: requests.exceptions.ConnectionError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\\u003curllib3.connection.HTTPSConnection object at 0x7f82fd9546a0\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\\r\\nJun 25 04:47:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:46 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:47:46.611851 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd9545b0\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:47:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:48 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:47:48.614824 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd935000\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:47:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:52 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:47:52.620005 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd937460\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:47:52 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd936410\\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\\r\\nJun 25 04:47:52 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:47:52.622350 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd936d70\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:47:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:54 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:47:54.625149 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd9370a0\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:47:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:58 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:47:58.630351 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd9363e0\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:47:58 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd936f50\\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\\r\\nJun 25 04:47:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:47:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n         Starting \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m...\\r\\nJun 25 04:48:08 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\\r\\nJun 25 04:48:08 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:48:08.641022 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:48:08 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:48:08 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/deeplearning/bin/notebooks_collection_agent.py\\\", line 618, in dns_resolution_query\\r\\nJun 25 04:48:08 notebooks2instance-provisioning-stuck bash[5948]:     _ = subprocess.run(\\r\\nJun 25 04:48:08 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/subprocess.py\\\", line 526, in run\\r\\nJun 25 04:48:08 notebooks2instance-provisioning-stuck bash[5948]:     raise CalledProcessError(retcode, process.args,\\r\\nJun 25 04:48:08 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:48:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:08 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m.\\r\\nJun 25 04:48:08 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\\r\\n         Starting \\u001b[0;1;39mChecks whether to…nce based on idle schedule.\\u001b[0m...\\r\\nJun 25 04:48:08 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\r\\nJun 25 04:48:09 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[60287]: Setting last notebook activity timestamp 1719289611 at 1719290889 for the following reason: Reason - latest session activity - replaced by later instance creation date\\r\\nJun 25 04:48:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mChecks whether to…tance based on idle schedule.\\u001b[0m.\\r\\nJun 25 04:48:09 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\r\\nJun 25 04:48:09 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\r\\nJun 25 04:48:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:18 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:48:18.504741 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:48:18 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:48:18 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/deeplearning/bin/notebooks_collection_agent.py\\\", line 618, in dns_resolution_query\\r\\nJun 25 04:48:18 notebooks2instance-provisioning-stuck bash[5948]:     _ = subprocess.run(\\r\\nJun 25 04:48:18 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/subprocess.py\\\", line 526, in run\\r\\nJun 25 04:48:18 notebooks2instance-provisioning-stuck bash[5948]:     raise CalledProcessError(retcode, process.args,\\r\\nJun 25 04:48:18 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:48:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:48:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:01 notebooks2instance-provisioning-stuck dhclient[516]: XMT: Solicit on ens4, interval 127450ms.\\r\\nJun 25 04:49:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n         Starting \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m...\\r\\nJun 25 04:49:09 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\\r\\nJun 25 04:49:09 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m.\\r\\nJun 25 04:49:09 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\\r\\n         Starting \\u001b[0;1;39mChecks whether to…nce based on idle schedule.\\u001b[0m...\\r\\nJun 25 04:49:09 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\r\\nJun 25 04:49:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:10 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[60598]: Setting last notebook activity timestamp 1719289611 at 1719290950 for the following reason: Reason - latest session activity - replaced by later instance creation date\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mChecks whether to…tance based on idle schedule.\\u001b[0m.\\r\\nJun 25 04:49:10 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\r\\nJun 25 04:49:10 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\r\\nJun 25 04:49:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:49:18.663033 140200635197248 notebooks_collection_agent.py:1968] Unable to contact Notebooks API HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\\u003curllib3.connection.HTTPSConnection object at 0x7f82fd9563e0\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\\r\\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\\\", line 198, in _new_conn\\r\\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]:     sock = connection.create_connection(\\r\\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\\\", line 85, in create_connection\\r\\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]:     raise err\\r\\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\\\", line 73, in create_connection\\r\\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]:     sock.connect(sa)\\r\\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: OSError: [Errno 101] Network is unreachable\\r\\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\\r\\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 793, in urlopen\\r\\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]:     response = self._make_request(\\r\\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 491, in _make_request\\r\\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]:     raise new_e\\r\\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 467, in _make_request\\r\\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]:     self._validate_conn(conn)\\r\\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 1099, in _validate_conn\\r\\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]:     conn.connect()\\r\\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\\\", line 616, in connect\\r\\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]:     self.sock = sock = self._new_conn()\\r\\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\\\", line 213, in _new_conn\\r\\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]:     raise NewConnectionError(\\r\\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.NewConnectionError: \\u003curllib3.connection.HTTPSConnection object at 0x7f82fd9563e0\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable\\r\\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\\r\\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\\\", line 667, in send\\r\\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]:     resp = conn.urlopen(\\r\\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 847, in urlopen\\r\\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]:     retries = retries.increment(\\r\\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/util/retry.py\\\", line 515, in increment\\r\\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]:     raise MaxRetryError(_pool, url, reason) from reason  # type: ignore[arg-type]\\r\\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\\u003curllib3.connection.HTTPSConnection object at 0x7f82fd9563e0\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\\r\\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: During handling of the above exception, another exception occurred:\\r\\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/deeplearning/bin/notebooks_collection_agent.py\\\", line 1956, in report_notebook_event\\r\\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]:     response = session.post(\\r\\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\\\", line 637, in post\\r\\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]:     return self.request(\\\"POST\\\", url, data=data, json=json, **kwargs)\\r\\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\\\", line 589, in request\\r\\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]:     resp = self.send(prep, **send_kwargs)\\r\\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\\\", line 703, in send\\r\\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]:     r = adapter.send(request, **kwargs)\\r\\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\\\", line 700, in send\\r\\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]:     raise ConnectionError(e, request=request)\\r\\nJun 25 04:49:18 notebooks2instance-provisioning-stuck bash[5948]: requests.exceptions.ConnectionError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\\u003curllib3.connection.HTTPSConnection object at 0x7f82fd9563e0\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\\r\\nJun 25 04:49:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:48 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:49:48.718340 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd954f40\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:49:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:50 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:49:50.721047 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd935750\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:49:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:54 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:49:54.726001 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd936740\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:49:54 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd9378b0\\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\\r\\nJun 25 04:49:54 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:49:54.728127 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd9370a0\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:49:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:56 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:49:56.730745 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd9366b0\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:49:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:49:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:00 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:50:00.735656 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd937640\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:50:00 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd936a40\\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\\r\\nJun 25 04:50:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n         Starting \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m...\\r\\nJun 25 04:50:10 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\\r\\nJun 25 04:50:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:10 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m.\\r\\nJun 25 04:50:10 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\\r\\n         Starting \\u001b[0;1;39mChecks whether to…nce based on idle schedule.\\u001b[0m...\\r\\nJun 25 04:50:10 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\r\\nJun 25 04:50:10 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:50:10.745866 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:50:10 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:50:10 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/deeplearning/bin/notebooks_collection_agent.py\\\", line 618, in dns_resolution_query\\r\\nJun 25 04:50:10 notebooks2instance-provisioning-stuck bash[5948]:     _ = subprocess.run(\\r\\nJun 25 04:50:10 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/subprocess.py\\\", line 526, in run\\r\\nJun 25 04:50:10 notebooks2instance-provisioning-stuck bash[5948]:     raise CalledProcessError(retcode, process.args,\\r\\nJun 25 04:50:10 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:50:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:11 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[60915]: Setting last notebook activity timestamp 1719289611 at 1719291011 for the following reason: Reason - latest session activity - replaced by later instance creation date\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mChecks whether to…tance based on idle schedule.\\u001b[0m.\\r\\nJun 25 04:50:11 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\r\\nJun 25 04:50:11 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\r\\nJun 25 04:50:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:20 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:50:20.609343 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:50:20 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:50:20 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/deeplearning/bin/notebooks_collection_agent.py\\\", line 618, in dns_resolution_query\\r\\nJun 25 04:50:20 notebooks2instance-provisioning-stuck bash[5948]:     _ = subprocess.run(\\r\\nJun 25 04:50:20 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/subprocess.py\\\", line 526, in run\\r\\nJun 25 04:50:20 notebooks2instance-provisioning-stuck bash[5948]:     raise CalledProcessError(retcode, process.args,\\r\\nJun 25 04:50:20 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:50:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:50:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:09 notebooks2instance-provisioning-stuck dhclient[516]: XMT: Solicit on ens4, interval 127190ms.\\r\\nJun 25 04:51:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n         Starting \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m...\\r\\nJun 25 04:51:10 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\\r\\nJun 25 04:51:11 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m.\\r\\nJun 25 04:51:11 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\\r\\n         Starting \\u001b[0;1;39mChecks whether to…nce based on idle schedule.\\u001b[0m...\\r\\nJun 25 04:51:11 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\r\\nJun 25 04:51:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:12 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[61227]: Setting last notebook activity timestamp 1719289611 at 1719291072 for the following reason: Reason - latest session activity - replaced by later instance creation date\\r\\nJun 25 04:51:12 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\r\\nJun 25 04:51:12 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mChecks whether to…tance based on idle schedule.\\u001b[0m.\\r\\nJun 25 04:51:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:51:20.768072 140200635197248 notebooks_collection_agent.py:1968] Unable to contact Notebooks API HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\\u003curllib3.connection.HTTPSConnection object at 0x7f82fd9541f0\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\\r\\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\\\", line 198, in _new_conn\\r\\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]:     sock = connection.create_connection(\\r\\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\\\", line 85, in create_connection\\r\\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]:     raise err\\r\\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/util/connection.py\\\", line 73, in create_connection\\r\\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]:     sock.connect(sa)\\r\\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: OSError: [Errno 101] Network is unreachable\\r\\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\\r\\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 793, in urlopen\\r\\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]:     response = self._make_request(\\r\\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 491, in _make_request\\r\\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]:     raise new_e\\r\\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 467, in _make_request\\r\\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]:     self._validate_conn(conn)\\r\\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 1099, in _validate_conn\\r\\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]:     conn.connect()\\r\\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\\\", line 616, in connect\\r\\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]:     self.sock = sock = self._new_conn()\\r\\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connection.py\\\", line 213, in _new_conn\\r\\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]:     raise NewConnectionError(\\r\\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.NewConnectionError: \\u003curllib3.connection.HTTPSConnection object at 0x7f82fd9541f0\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable\\r\\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: The above exception was the direct cause of the following exception:\\r\\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\\\", line 667, in send\\r\\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]:     resp = conn.urlopen(\\r\\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/connectionpool.py\\\", line 847, in urlopen\\r\\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]:     retries = retries.increment(\\r\\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/urllib3/util/retry.py\\\", line 515, in increment\\r\\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]:     raise MaxRetryError(_pool, url, reason) from reason  # type: ignore[arg-type]\\r\\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\\u003curllib3.connection.HTTPSConnection object at 0x7f82fd9541f0\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\\r\\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: During handling of the above exception, another exception occurred:\\r\\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/deeplearning/bin/notebooks_collection_agent.py\\\", line 1956, in report_notebook_event\\r\\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]:     response = session.post(\\r\\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\\\", line 637, in post\\r\\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]:     return self.request(\\\"POST\\\", url, data=data, json=json, **kwargs)\\r\\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\\\", line 589, in request\\r\\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]:     resp = self.send(prep, **send_kwargs)\\r\\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/sessions.py\\\", line 703, in send\\r\\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]:     r = adapter.send(request, **kwargs)\\r\\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/site-packages/requests/adapters.py\\\", line 700, in send\\r\\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]:     raise ConnectionError(e, request=request)\\r\\nJun 25 04:51:20 notebooks2instance-provisioning-stuck bash[5948]: requests.exceptions.ConnectionError: HTTPSConnectionPool(host='notebooks.googleapis.com', port=443): Max retries exceeded with url: /v2/projects/gcpdiag-notebooks2-nuc97nsk/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem (Caused by NewConnectionError('\\u003curllib3.connection.HTTPSConnection object at 0x7f82fd9541f0\\u003e: Failed to establish a new connection: [Errno 101] Network is unreachable'))\\r\\nJun 25 04:51:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:50 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:51:50.797844 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd954b50\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:51:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:52 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:51:52.800511 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd936ec0\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:51:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:56 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:51:56.805452 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd9377c0\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:51:56 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd934220\\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\\r\\nJun 25 04:51:56 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:51:56.807584 140200635197248 connectionpool.py:874] Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd9366b0\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:51:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:51:58 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:51:58.810319 140200635197248 connectionpool.py:874] Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd937610\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:51:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:02 notebooks2instance-provisioning-stuck bash[5948]: W0625 04:52:02.815200 140200635197248 connectionpool.py:874] Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd935f00\\u003e: Failed to establish a new connection: [Errno 111] Connection refused')': /api\\r\\nJun 25 04:52:02 notebooks2instance-provisioning-stuck bash[5948]: notebooks_collection_agent. Unable to contact Jupyter API: HTTPConnectionPool(host='127.0.0.1', port=8080): Max retries exceeded with url: /api (Caused by NewConnectionError('\\u003curllib3.connection.HTTPConnection object at 0x7f82fd936f50\\u003e: Failed to establish a new connection: [Errno 111] Connection refused'))\\r\\nJun 25 04:52:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n         Starting \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m...\\r\\nJun 25 04:52:11 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\\r\\nJun 25 04:52:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:12 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mRemoves premium features from DLVM.\\u001b[0m.\\r\\nJun 25 04:52:12 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\\r\\n         Starting \\u001b[0;1;39mChecks whether to…nce based on idle schedule.\\u001b[0m...\\r\\nJun 25 04:52:12 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\r\\nJun 25 04:52:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:12 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:52:12.825006 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:52:12 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:52:12 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/deeplearning/bin/notebooks_collection_agent.py\\\", line 618, in dns_resolution_query\\r\\nJun 25 04:52:12 notebooks2instance-provisioning-stuck bash[5948]:     _ = subprocess.run(\\r\\nJun 25 04:52:12 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/subprocess.py\\\", line 526, in run\\r\\nJun 25 04:52:12 notebooks2instance-provisioning-stuck bash[5948]:     raise CalledProcessError(retcode, process.args,\\r\\nJun 25 04:52:12 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.googleapis.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:52:13 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[61546]: Setting last notebook activity timestamp 1719289611 at 1719291133 for the following reason: Reason - latest session activity - replaced by later instance creation date\\r\\n[\\u001b[0;32m  OK  \\u001b[0m] Finished \\u001b[0;1;39mChecks whether to…tance based on idle schedule.\\u001b[0m.\\r\\nJun 25 04:52:13 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\r\\nJun 25 04:52:13 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\r\\nJun 25 04:52:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:22 notebooks2instance-provisioning-stuck bash[5948]: E0625 04:52:22.688354 140200635197248 notebooks_collection_agent.py:625] Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:52:22 notebooks2instance-provisioning-stuck bash[5948]: Traceback (most recent call last):\\r\\nJun 25 04:52:22 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/deeplearning/bin/notebooks_collection_agent.py\\\", line 618, in dns_resolution_query\\r\\nJun 25 04:52:22 notebooks2instance-provisioning-stuck bash[5948]:     _ = subprocess.run(\\r\\nJun 25 04:52:22 notebooks2instance-provisioning-stuck bash[5948]:   File \\\"/opt/conda/lib/python3.10/subprocess.py\\\", line 526, in run\\r\\nJun 25 04:52:22 notebooks2instance-provisioning-stuck bash[5948]:     raise CalledProcessError(retcode, process.args,\\r\\nJun 25 04:52:22 notebooks2instance-provisioning-stuck bash[5948]: subprocess.CalledProcessError: Command '['/bin/bash', '-c', 'curl --silent --output /dev/null https://notebooks.cloud.google.com --max-time 10']' returned non-zero exit status 28.\\r\\nJun 25 04:52:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:25 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:26 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:27 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:28 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:29 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:30 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:31 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:32 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:33 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:34 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:35 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:36 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:37 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:38 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:39 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:40 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:41 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:42 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:43 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:44 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:45 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:46 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:52:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:53:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:53:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\nJun 25 04:53:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\r\\n\",\n  \"start\": \"1976764\",\n  \"next\": \"2976764\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/instances/notebooks2instance-provisioning-stuck/serialPortOutput\"\n}\n"
  },
  {
    "path": "test-data/notebooks2/json-dumps/logging-entries-1.json",
    "content": "{\n  \"entries\": [\n    {\n      \"textPayload\": \"Jun 25 05:01:24 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\\\r\\\\n\",\n      \"insertId\": \"26593\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"instance_id\": \"4775836342981993096\",\n          \"project_id\": \"gcpdiag-notebooks2-aaaa\",\n          \"zone\": \"us-west1-a\"\n        }\n      },\n      \"timestamp\": \"2024-06-25T05:01:25.019326264Z\",\n      \"severity\": \"INFO\",\n      \"labels\": {\n        \"is_text_escaped\": \"true\",\n        \"compute.googleapis.com/resource_name\": \"notebooks2instance-provisioning-stuck\"\n      },\n      \"logName\": \"projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output\",\n      \"receiveTimestamp\": \"2024-06-25T05:01:26.021123060Z\"\n    },\n    {\n      \"textPayload\": \"Jun 25 05:01:23 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\\\r\\\\n\",\n      \"insertId\": \"26592\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"zone\": \"us-west1-a\",\n          \"project_id\": \"gcpdiag-notebooks2-aaaa\",\n          \"instance_id\": \"4775836342981993096\"\n        }\n      },\n      \"timestamp\": \"2024-06-25T05:01:24.015424685Z\",\n      \"severity\": \"INFO\",\n      \"labels\": {\n        \"is_text_escaped\": \"true\",\n        \"compute.googleapis.com/resource_name\": \"notebooks2instance-provisioning-stuck\"\n      },\n      \"logName\": \"projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output\",\n      \"receiveTimestamp\": \"2024-06-25T05:01:26.021123060Z\"\n    },\n    {\n      \"textPayload\": \"Jun 25 05:01:22 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\\\r\\\\n\",\n      \"insertId\": \"26591\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"instance_id\": \"4775836342981993096\",\n          \"project_id\": \"gcpdiag-notebooks2-aaaa\",\n          \"zone\": \"us-west1-a\"\n        }\n      },\n      \"timestamp\": \"2024-06-25T05:01:23.011486858Z\",\n      \"severity\": \"INFO\",\n      \"labels\": {\n        \"compute.googleapis.com/resource_name\": \"notebooks2instance-provisioning-stuck\",\n        \"is_text_escaped\": \"true\"\n      },\n      \"logName\": \"projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output\",\n      \"receiveTimestamp\": \"2024-06-25T05:01:23.123629089Z\"\n    },\n    {\n      \"textPayload\": \"Jun 25 05:01:21 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\\\r\\\\n\",\n      \"insertId\": \"26590\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"zone\": \"us-west1-a\",\n          \"instance_id\": \"4775836342981993096\",\n          \"project_id\": \"gcpdiag-notebooks2-aaaa\"\n        }\n      },\n      \"timestamp\": \"2024-06-25T05:01:22.007674712Z\",\n      \"severity\": \"INFO\",\n      \"labels\": {\n        \"is_text_escaped\": \"true\",\n        \"compute.googleapis.com/resource_name\": \"notebooks2instance-provisioning-stuck\"\n      },\n      \"logName\": \"projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output\",\n      \"receiveTimestamp\": \"2024-06-25T05:01:23.123629089Z\"\n    },\n    {\n      \"textPayload\": \"Jun 25 05:01:20 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\\\r\\\\n\",\n      \"insertId\": \"26589\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"project_id\": \"gcpdiag-notebooks2-aaaa\",\n          \"zone\": \"us-west1-a\",\n          \"instance_id\": \"4775836342981993096\"\n        }\n      },\n      \"timestamp\": \"2024-06-25T05:01:21.003805645Z\",\n      \"severity\": \"INFO\",\n      \"labels\": {\n        \"is_text_escaped\": \"true\",\n        \"compute.googleapis.com/resource_name\": \"notebooks2instance-provisioning-stuck\"\n      },\n      \"logName\": \"projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output\",\n      \"receiveTimestamp\": \"2024-06-25T05:01:23.123629089Z\"\n    },\n    {\n      \"textPayload\": \"Jun 25 05:01:20 notebooks2instance-provisioning-stuck systemd[1]: Finished Checks whether to shutdown the instance based on idle schedule..\\\\r\\\\n\",\n      \"insertId\": \"26588\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"project_id\": \"gcpdiag-notebooks2-aaaa\",\n          \"instance_id\": \"4775836342981993096\",\n          \"zone\": \"us-west1-a\"\n        }\n      },\n      \"timestamp\": \"2024-06-25T05:01:20.852022546Z\",\n      \"severity\": \"INFO\",\n      \"labels\": {\n        \"compute.googleapis.com/resource_name\": \"notebooks2instance-provisioning-stuck\",\n        \"is_text_escaped\": \"true\"\n      },\n      \"logName\": \"projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output\",\n      \"receiveTimestamp\": \"2024-06-25T05:01:21.002864105Z\"\n    },\n    {\n      \"textPayload\": \"Jun 25 05:01:20 notebooks2instance-provisioning-stuck systemd[1]: google-wi-idle-shutdown.service: Succeeded.\\\\r\\\\n\",\n      \"insertId\": \"26587\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"zone\": \"us-west1-a\",\n          \"instance_id\": \"4775836342981993096\",\n          \"project_id\": \"gcpdiag-notebooks2-aaaa\"\n        }\n      },\n      \"timestamp\": \"2024-06-25T05:01:20.852016984Z\",\n      \"severity\": \"INFO\",\n      \"labels\": {\n        \"compute.googleapis.com/resource_name\": \"notebooks2instance-provisioning-stuck\",\n        \"is_text_escaped\": \"true\"\n      },\n      \"logName\": \"projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output\",\n      \"receiveTimestamp\": \"2024-06-25T05:01:21.002864105Z\"\n    },\n    {\n      \"textPayload\": \"[\\\\x1b[0;32m  OK  \\\\x1b[0m] Finished \\\\x1b[0;1;39mChecks whether to\\\\xe2\\\\x80\\\\xa6tance based on idle schedule.\\\\x1b[0m.\\\\r\\\\n\",\n      \"insertId\": \"26586\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"instance_id\": \"4775836342981993096\",\n          \"project_id\": \"gcpdiag-notebooks2-aaaa\",\n          \"zone\": \"us-west1-a\"\n        }\n      },\n      \"timestamp\": \"2024-06-25T05:01:20.851995310Z\",\n      \"severity\": \"INFO\",\n      \"labels\": {\n        \"compute.googleapis.com/resource_name\": \"notebooks2instance-provisioning-stuck\",\n        \"is_text_escaped\": \"true\"\n      },\n      \"logName\": \"projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output\",\n      \"receiveTimestamp\": \"2024-06-25T05:01:21.002864105Z\"\n    },\n    {\n      \"textPayload\": \"Jun 25 05:01:20 notebooks2instance-provisioning-stuck check_idle_shutdown.sh[64573]: Setting last notebook activity timestamp 1719289611 at 1719291680 for the following reason: Reason - latest session activity - replaced by later instance creation date\\\\r\\\\n\",\n      \"insertId\": \"26585\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"project_id\": \"gcpdiag-notebooks2-aaaa\",\n          \"zone\": \"us-west1-a\",\n          \"instance_id\": \"4775836342981993096\"\n        }\n      },\n      \"timestamp\": \"2024-06-25T05:01:20.771896545Z\",\n      \"severity\": \"INFO\",\n      \"labels\": {\n        \"is_text_escaped\": \"true\",\n        \"compute.googleapis.com/resource_name\": \"notebooks2instance-provisioning-stuck\"\n      },\n      \"logName\": \"projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output\",\n      \"receiveTimestamp\": \"2024-06-25T05:01:21.002864105Z\"\n    },\n    {\n      \"textPayload\": \"Jun 25 05:01:19 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\\\r\\\\n\",\n      \"insertId\": \"26584\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"instance_id\": \"4775836342981993096\",\n          \"project_id\": \"gcpdiag-notebooks2-aaaa\",\n          \"zone\": \"us-west1-a\"\n        }\n      },\n      \"timestamp\": \"2024-06-25T05:01:20.024434863Z\",\n      \"severity\": \"INFO\",\n      \"labels\": {\n        \"compute.googleapis.com/resource_name\": \"notebooks2instance-provisioning-stuck\",\n        \"is_text_escaped\": \"true\"\n      },\n      \"logName\": \"projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output\",\n      \"receiveTimestamp\": \"2024-06-25T05:01:21.002864105Z\"\n    },\n    {\n      \"textPayload\": \"Jun 25 05:01:19 notebooks2instance-provisioning-stuck systemd[1]: Starting Checks whether to shutdown the instance based on idle schedule....\\\\r\\\\n\",\n      \"insertId\": \"26583\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"zone\": \"us-west1-a\",\n          \"instance_id\": \"4775836342981993096\",\n          \"project_id\": \"gcpdiag-notebooks2-aaaa\"\n        }\n      },\n      \"timestamp\": \"2024-06-25T05:01:19.964365625Z\",\n      \"severity\": \"INFO\",\n      \"labels\": {\n        \"is_text_escaped\": \"true\",\n        \"compute.googleapis.com/resource_name\": \"notebooks2instance-provisioning-stuck\"\n      },\n      \"logName\": \"projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output\",\n      \"receiveTimestamp\": \"2024-06-25T05:01:21.002864105Z\"\n    },\n    {\n      \"textPayload\": \"         Starting \\\\x1b[0;1;39mChecks whether to\\\\xe2\\\\x80\\\\xa6nce based on idle schedule.\\\\x1b[0m...\\\\r\\\\n\",\n      \"insertId\": \"26582\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"instance_id\": \"4775836342981993096\",\n          \"project_id\": \"gcpdiag-notebooks2-aaaa\",\n          \"zone\": \"us-west1-a\"\n        }\n      },\n      \"timestamp\": \"2024-06-25T05:01:19.964319264Z\",\n      \"severity\": \"INFO\",\n      \"labels\": {\n        \"compute.googleapis.com/resource_name\": \"notebooks2instance-provisioning-stuck\",\n        \"is_text_escaped\": \"true\"\n      },\n      \"logName\": \"projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output\",\n      \"receiveTimestamp\": \"2024-06-25T05:01:21.002864105Z\"\n    },\n    {\n      \"textPayload\": \"Jun 25 05:01:19 notebooks2instance-provisioning-stuck systemd[1]: Finished Removes premium features from DLVM..\\\\r\\\\n\",\n      \"insertId\": \"26581\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"zone\": \"us-west1-a\",\n          \"instance_id\": \"4775836342981993096\",\n          \"project_id\": \"gcpdiag-notebooks2-aaaa\"\n        }\n      },\n      \"timestamp\": \"2024-06-25T05:01:19.964314267Z\",\n      \"severity\": \"INFO\",\n      \"labels\": {\n        \"is_text_escaped\": \"true\",\n        \"compute.googleapis.com/resource_name\": \"notebooks2instance-provisioning-stuck\"\n      },\n      \"logName\": \"projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output\",\n      \"receiveTimestamp\": \"2024-06-25T05:01:21.002864105Z\"\n    },\n    {\n      \"textPayload\": \"[\\\\x1b[0;32m  OK  \\\\x1b[0m] Finished \\\\x1b[0;1;39mRemoves premium features from DLVM.\\\\x1b[0m.\\\\r\\\\n\",\n      \"insertId\": \"26580\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"project_id\": \"gcpdiag-notebooks2-aaaa\",\n          \"zone\": \"us-west1-a\",\n          \"instance_id\": \"4775836342981993096\"\n        }\n      },\n      \"timestamp\": \"2024-06-25T05:01:19.964309451Z\",\n      \"severity\": \"INFO\",\n      \"labels\": {\n        \"is_text_escaped\": \"true\",\n        \"compute.googleapis.com/resource_name\": \"notebooks2instance-provisioning-stuck\"\n      },\n      \"logName\": \"projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output\",\n      \"receiveTimestamp\": \"2024-06-25T05:01:21.002864105Z\"\n    },\n    {\n      \"textPayload\": \"Jun 25 05:01:19 notebooks2instance-provisioning-stuck systemd[1]: google-wi-promote-premium.service: Succeeded.\\\\r\\\\n\",\n      \"insertId\": \"26579\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"instance_id\": \"4775836342981993096\",\n          \"zone\": \"us-west1-a\",\n          \"project_id\": \"gcpdiag-notebooks2-aaaa\"\n        }\n      },\n      \"timestamp\": \"2024-06-25T05:01:19.964289488Z\",\n      \"severity\": \"INFO\",\n      \"labels\": {\n        \"is_text_escaped\": \"true\",\n        \"compute.googleapis.com/resource_name\": \"notebooks2instance-provisioning-stuck\"\n      },\n      \"logName\": \"projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output\",\n      \"receiveTimestamp\": \"2024-06-25T05:01:21.002864105Z\"\n    },\n    {\n      \"textPayload\": \"Jun 25 05:01:19 notebooks2instance-provisioning-stuck systemd[1]: Starting Removes premium features from DLVM....\\\\r\\\\n\",\n      \"insertId\": \"26578\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"zone\": \"us-west1-a\",\n          \"instance_id\": \"4775836342981993096\",\n          \"project_id\": \"gcpdiag-notebooks2-aaaa\"\n        }\n      },\n      \"timestamp\": \"2024-06-25T05:01:19.400598116Z\",\n      \"severity\": \"INFO\",\n      \"labels\": {\n        \"is_text_escaped\": \"true\",\n        \"compute.googleapis.com/resource_name\": \"notebooks2instance-provisioning-stuck\"\n      },\n      \"logName\": \"projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output\",\n      \"receiveTimestamp\": \"2024-06-25T05:01:21.002864105Z\"\n    },\n    {\n      \"textPayload\": \"         Starting \\\\x1b[0;1;39mRemoves premium features from DLVM.\\\\x1b[0m...\\\\r\\\\n\",\n      \"insertId\": \"26577\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"project_id\": \"gcpdiag-notebooks2-aaaa\",\n          \"instance_id\": \"4775836342981993096\",\n          \"zone\": \"us-west1-a\"\n        }\n      },\n      \"timestamp\": \"2024-06-25T05:01:19.400573245Z\",\n      \"severity\": \"INFO\",\n      \"labels\": {\n        \"is_text_escaped\": \"true\",\n        \"compute.googleapis.com/resource_name\": \"notebooks2instance-provisioning-stuck\"\n      },\n      \"logName\": \"projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output\",\n      \"receiveTimestamp\": \"2024-06-25T05:01:21.002864105Z\"\n    },\n    {\n      \"textPayload\": \"Jun 25 05:01:18 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\\\r\\\\n\",\n      \"insertId\": \"26576\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"instance_id\": \"4775836342981993096\",\n          \"zone\": \"us-west1-a\",\n          \"project_id\": \"gcpdiag-notebooks2-aaaa\"\n        }\n      },\n      \"timestamp\": \"2024-06-25T05:01:18.995325845Z\",\n      \"severity\": \"INFO\",\n      \"labels\": {\n        \"is_text_escaped\": \"true\",\n        \"compute.googleapis.com/resource_name\": \"notebooks2instance-provisioning-stuck\"\n      },\n      \"logName\": \"projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output\",\n      \"receiveTimestamp\": \"2024-06-25T05:01:21.002864105Z\"\n    },\n    {\n      \"textPayload\": \"Jun 25 05:01:17 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\\\r\\\\n\",\n      \"insertId\": \"26575\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"zone\": \"us-west1-a\",\n          \"project_id\": \"gcpdiag-notebooks2-aaaa\",\n          \"instance_id\": \"4775836342981993096\"\n        }\n      },\n      \"timestamp\": \"2024-06-25T05:01:17.991408536Z\",\n      \"severity\": \"INFO\",\n      \"labels\": {\n        \"is_text_escaped\": \"true\",\n        \"compute.googleapis.com/resource_name\": \"notebooks2instance-provisioning-stuck\"\n      },\n      \"logName\": \"projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output\",\n      \"receiveTimestamp\": \"2024-06-25T05:01:18.071819208Z\"\n    },\n    {\n      \"textPayload\": \"Jun 25 05:01:16 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\\\r\\\\n\",\n      \"insertId\": \"26574\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"instance_id\": \"4775836342981993096\",\n          \"zone\": \"us-west1-a\",\n          \"project_id\": \"gcpdiag-notebooks2-aaaa\"\n        }\n      },\n      \"timestamp\": \"2024-06-25T05:01:16.987681579Z\",\n      \"severity\": \"INFO\",\n      \"labels\": {\n        \"compute.googleapis.com/resource_name\": \"notebooks2instance-provisioning-stuck\",\n        \"is_text_escaped\": \"true\"\n      },\n      \"logName\": \"projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output\",\n      \"receiveTimestamp\": \"2024-06-25T05:01:18.071819208Z\"\n    },\n    {\n      \"textPayload\": \"Jun 25 05:01:15 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\\\r\\\\n\",\n      \"insertId\": \"26573\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"zone\": \"us-west1-a\",\n          \"instance_id\": \"4775836342981993096\",\n          \"project_id\": \"gcpdiag-notebooks2-aaaa\"\n        }\n      },\n      \"timestamp\": \"2024-06-25T05:01:15.983641704Z\",\n      \"severity\": \"INFO\",\n      \"labels\": {\n        \"is_text_escaped\": \"true\",\n        \"compute.googleapis.com/resource_name\": \"notebooks2instance-provisioning-stuck\"\n      },\n      \"logName\": \"projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output\",\n      \"receiveTimestamp\": \"2024-06-25T05:01:18.071819208Z\"\n    },\n    {\n      \"textPayload\": \"Jun 25 05:01:14 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\\\r\\\\n\",\n      \"insertId\": \"26572\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"zone\": \"us-west1-a\",\n          \"project_id\": \"gcpdiag-notebooks2-aaaa\",\n          \"instance_id\": \"4775836342981993096\"\n        }\n      },\n      \"timestamp\": \"2024-06-25T05:01:14.979702034Z\",\n      \"severity\": \"INFO\",\n      \"labels\": {\n        \"compute.googleapis.com/resource_name\": \"notebooks2instance-provisioning-stuck\",\n        \"is_text_escaped\": \"true\"\n      },\n      \"logName\": \"projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output\",\n      \"receiveTimestamp\": \"2024-06-25T05:01:15.983655097Z\"\n    },\n    {\n      \"textPayload\": \"Jun 25 05:01:13 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\\\r\\\\n\",\n      \"insertId\": \"26571\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"zone\": \"us-west1-a\",\n          \"project_id\": \"gcpdiag-notebooks2-aaaa\",\n          \"instance_id\": \"4775836342981993096\"\n        }\n      },\n      \"timestamp\": \"2024-06-25T05:01:13.975818805Z\",\n      \"severity\": \"INFO\",\n      \"labels\": {\n        \"compute.googleapis.com/resource_name\": \"notebooks2instance-provisioning-stuck\",\n        \"is_text_escaped\": \"true\"\n      },\n      \"logName\": \"projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output\",\n      \"receiveTimestamp\": \"2024-06-25T05:01:15.983655097Z\"\n    },\n    {\n      \"textPayload\": \"Jun 25 05:01:12 notebooks2instance-provisioning-stuck dhclient[516]: XMT: Solicit on ens4, interval 130330ms.\\\\r\\\\n\",\n      \"insertId\": \"26570\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"zone\": \"us-west1-a\",\n          \"project_id\": \"gcpdiag-notebooks2-aaaa\",\n          \"instance_id\": \"4775836342981993096\"\n        }\n      },\n      \"timestamp\": \"2024-06-25T05:01:13.034607081Z\",\n      \"severity\": \"INFO\",\n      \"labels\": {\n        \"compute.googleapis.com/resource_name\": \"notebooks2instance-provisioning-stuck\",\n        \"is_text_escaped\": \"true\"\n      },\n      \"logName\": \"projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output\",\n      \"receiveTimestamp\": \"2024-06-25T05:01:13.072088477Z\"\n    },\n    {\n      \"textPayload\": \"Jun 25 05:01:12 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\\\r\\\\n\",\n      \"insertId\": \"26569\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"zone\": \"us-west1-a\",\n          \"project_id\": \"gcpdiag-notebooks2-aaaa\",\n          \"instance_id\": \"4775836342981993096\"\n        }\n      },\n      \"timestamp\": \"2024-06-25T05:01:12.971756669Z\",\n      \"severity\": \"INFO\",\n      \"labels\": {\n        \"is_text_escaped\": \"true\",\n        \"compute.googleapis.com/resource_name\": \"notebooks2instance-provisioning-stuck\"\n      },\n      \"logName\": \"projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output\",\n      \"receiveTimestamp\": \"2024-06-25T05:01:13.072088477Z\"\n    },\n    {\n      \"textPayload\": \"Jun 25 05:01:11 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\\\r\\\\n\",\n      \"insertId\": \"26568\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"zone\": \"us-west1-a\",\n          \"project_id\": \"gcpdiag-notebooks2-aaaa\",\n          \"instance_id\": \"4775836342981993096\"\n        }\n      },\n      \"timestamp\": \"2024-06-25T05:01:11.967750132Z\",\n      \"severity\": \"INFO\",\n      \"labels\": {\n        \"compute.googleapis.com/resource_name\": \"notebooks2instance-provisioning-stuck\",\n        \"is_text_escaped\": \"true\"\n      },\n      \"logName\": \"projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output\",\n      \"receiveTimestamp\": \"2024-06-25T05:01:13.072088477Z\"\n    },\n    {\n      \"textPayload\": \"Jun 25 05:01:10 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\\\r\\\\n\",\n      \"insertId\": \"26567\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"instance_id\": \"4775836342981993096\",\n          \"zone\": \"us-west1-a\",\n          \"project_id\": \"gcpdiag-notebooks2-aaaa\"\n        }\n      },\n      \"timestamp\": \"2024-06-25T05:01:10.963794256Z\",\n      \"severity\": \"INFO\",\n      \"labels\": {\n        \"compute.googleapis.com/resource_name\": \"notebooks2instance-provisioning-stuck\",\n        \"is_text_escaped\": \"true\"\n      },\n      \"logName\": \"projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output\",\n      \"receiveTimestamp\": \"2024-06-25T05:01:13.072088477Z\"\n    },\n    {\n      \"textPayload\": \"Jun 25 05:01:09 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\\\r\\\\n\",\n      \"insertId\": \"26566\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"zone\": \"us-west1-a\",\n          \"project_id\": \"gcpdiag-notebooks2-aaaa\",\n          \"instance_id\": \"4775836342981993096\"\n        }\n      },\n      \"timestamp\": \"2024-06-25T05:01:09.959868489Z\",\n      \"severity\": \"INFO\",\n      \"labels\": {\n        \"is_text_escaped\": \"true\",\n        \"compute.googleapis.com/resource_name\": \"notebooks2instance-provisioning-stuck\"\n      },\n      \"logName\": \"projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output\",\n      \"receiveTimestamp\": \"2024-06-25T05:01:10.964031236Z\"\n    },\n    {\n      \"textPayload\": \"Jun 25 05:01:08 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\\\r\\\\n\",\n      \"insertId\": \"26565\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"instance_id\": \"4775836342981993096\",\n          \"project_id\": \"gcpdiag-notebooks2-aaaa\",\n          \"zone\": \"us-west1-a\"\n        }\n      },\n      \"timestamp\": \"2024-06-25T05:01:08.955971670Z\",\n      \"severity\": \"INFO\",\n      \"labels\": {\n        \"is_text_escaped\": \"true\",\n        \"compute.googleapis.com/resource_name\": \"notebooks2instance-provisioning-stuck\"\n      },\n      \"logName\": \"projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output\",\n      \"receiveTimestamp\": \"2024-06-25T05:01:10.964031236Z\"\n    },\n    {\n      \"textPayload\": \"Jun 25 05:01:07 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\\\r\\\\n\",\n      \"insertId\": \"26564\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"instance_id\": \"4775836342981993096\",\n          \"zone\": \"us-west1-a\",\n          \"project_id\": \"gcpdiag-notebooks2-aaaa\"\n        }\n      },\n      \"timestamp\": \"2024-06-25T05:01:07.952058605Z\",\n      \"severity\": \"INFO\",\n      \"labels\": {\n        \"is_text_escaped\": \"true\",\n        \"compute.googleapis.com/resource_name\": \"notebooks2instance-provisioning-stuck\"\n      },\n      \"logName\": \"projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output\",\n      \"receiveTimestamp\": \"2024-06-25T05:01:08.092070476Z\"\n    },\n    {\n      \"textPayload\": \"Jun 25 05:01:06 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\\\r\\\\n\",\n      \"insertId\": \"26563\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"zone\": \"us-west1-a\",\n          \"project_id\": \"gcpdiag-notebooks2-aaaa\",\n          \"instance_id\": \"4775836342981993096\"\n        }\n      },\n      \"timestamp\": \"2024-06-25T05:01:06.948285968Z\",\n      \"severity\": \"INFO\",\n      \"labels\": {\n        \"is_text_escaped\": \"true\",\n        \"compute.googleapis.com/resource_name\": \"notebooks2instance-provisioning-stuck\"\n      },\n      \"logName\": \"projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output\",\n      \"receiveTimestamp\": \"2024-06-25T05:01:08.092070476Z\"\n    },\n    {\n      \"textPayload\": \"Jun 25 05:01:05 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\\\r\\\\n\",\n      \"insertId\": \"26562\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"zone\": \"us-west1-a\",\n          \"instance_id\": \"4775836342981993096\",\n          \"project_id\": \"gcpdiag-notebooks2-aaaa\"\n        }\n      },\n      \"timestamp\": \"2024-06-25T05:01:05.944452821Z\",\n      \"severity\": \"INFO\",\n      \"labels\": {\n        \"is_text_escaped\": \"true\",\n        \"compute.googleapis.com/resource_name\": \"notebooks2instance-provisioning-stuck\"\n      },\n      \"logName\": \"projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output\",\n      \"receiveTimestamp\": \"2024-06-25T05:01:08.092070476Z\"\n    },\n    {\n      \"textPayload\": \"Jun 25 05:01:04 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\\\r\\\\n\",\n      \"insertId\": \"26561\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"instance_id\": \"4775836342981993096\",\n          \"project_id\": \"gcpdiag-notebooks2-aaaa\",\n          \"zone\": \"us-west1-a\"\n        }\n      },\n      \"timestamp\": \"2024-06-25T05:01:04.940586550Z\",\n      \"severity\": \"INFO\",\n      \"labels\": {\n        \"is_text_escaped\": \"true\",\n        \"compute.googleapis.com/resource_name\": \"notebooks2instance-provisioning-stuck\"\n      },\n      \"logName\": \"projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output\",\n      \"receiveTimestamp\": \"2024-06-25T05:01:05.944943116Z\"\n    },\n    {\n      \"textPayload\": \"Jun 25 05:01:03 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\\\r\\\\n\",\n      \"insertId\": \"26560\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"zone\": \"us-west1-a\",\n          \"instance_id\": \"4775836342981993096\",\n          \"project_id\": \"gcpdiag-notebooks2-aaaa\"\n        }\n      },\n      \"timestamp\": \"2024-06-25T05:01:03.936888786Z\",\n      \"severity\": \"INFO\",\n      \"labels\": {\n        \"is_text_escaped\": \"true\",\n        \"compute.googleapis.com/resource_name\": \"notebooks2instance-provisioning-stuck\"\n      },\n      \"logName\": \"projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output\",\n      \"receiveTimestamp\": \"2024-06-25T05:01:05.944943116Z\"\n    },\n    {\n      \"textPayload\": \"Jun 25 05:01:02 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\\\r\\\\n\",\n      \"insertId\": \"26559\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"zone\": \"us-west1-a\",\n          \"instance_id\": \"4775836342981993096\",\n          \"project_id\": \"gcpdiag-notebooks2-aaaa\"\n        }\n      },\n      \"timestamp\": \"2024-06-25T05:01:02.933016353Z\",\n      \"severity\": \"INFO\",\n      \"labels\": {\n        \"compute.googleapis.com/resource_name\": \"notebooks2instance-provisioning-stuck\",\n        \"is_text_escaped\": \"true\"\n      },\n      \"logName\": \"projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output\",\n      \"receiveTimestamp\": \"2024-06-25T05:01:03.023621061Z\"\n    },\n    {\n      \"textPayload\": \"Jun 25 05:01:01 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\\\r\\\\n\",\n      \"insertId\": \"26558\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"instance_id\": \"4775836342981993096\",\n          \"project_id\": \"gcpdiag-notebooks2-aaaa\",\n          \"zone\": \"us-west1-a\"\n        }\n      },\n      \"timestamp\": \"2024-06-25T05:01:01.928431247Z\",\n      \"severity\": \"INFO\",\n      \"labels\": {\n        \"is_text_escaped\": \"true\",\n        \"compute.googleapis.com/resource_name\": \"notebooks2instance-provisioning-stuck\"\n      },\n      \"logName\": \"projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output\",\n      \"receiveTimestamp\": \"2024-06-25T05:01:03.023621061Z\"\n    },\n    {\n      \"textPayload\": \"Jun 25 05:01:00 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\\\r\\\\n\",\n      \"insertId\": \"26557\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"project_id\": \"gcpdiag-notebooks2-aaaa\",\n          \"instance_id\": \"4775836342981993096\",\n          \"zone\": \"us-west1-a\"\n        }\n      },\n      \"timestamp\": \"2024-06-25T05:01:00.924089164Z\",\n      \"severity\": \"INFO\",\n      \"labels\": {\n        \"compute.googleapis.com/resource_name\": \"notebooks2instance-provisioning-stuck\",\n        \"is_text_escaped\": \"true\"\n      },\n      \"logName\": \"projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output\",\n      \"receiveTimestamp\": \"2024-06-25T05:01:03.023621061Z\"\n    },\n    {\n      \"textPayload\": \"Jun 25 05:00:59 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\\\r\\\\n\",\n      \"insertId\": \"26556\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"zone\": \"us-west1-a\",\n          \"project_id\": \"gcpdiag-notebooks2-aaaa\",\n          \"instance_id\": \"4775836342981993096\"\n        }\n      },\n      \"timestamp\": \"2024-06-25T05:00:59.920196314Z\",\n      \"severity\": \"INFO\",\n      \"labels\": {\n        \"is_text_escaped\": \"true\",\n        \"compute.googleapis.com/resource_name\": \"notebooks2instance-provisioning-stuck\"\n      },\n      \"logName\": \"projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output\",\n      \"receiveTimestamp\": \"2024-06-25T05:01:00.921812339Z\"\n    },\n    {\n      \"textPayload\": \"Jun 25 05:00:58 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\\\r\\\\n\",\n      \"insertId\": \"26555\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"zone\": \"us-west1-a\",\n          \"instance_id\": \"4775836342981993096\",\n          \"project_id\": \"gcpdiag-notebooks2-aaaa\"\n        }\n      },\n      \"timestamp\": \"2024-06-25T05:00:58.916399036Z\",\n      \"severity\": \"INFO\",\n      \"labels\": {\n        \"is_text_escaped\": \"true\",\n        \"compute.googleapis.com/resource_name\": \"notebooks2instance-provisioning-stuck\"\n      },\n      \"logName\": \"projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output\",\n      \"receiveTimestamp\": \"2024-06-25T05:01:00.921812339Z\"\n    },\n    {\n      \"textPayload\": \"Jun 25 05:00:57 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\\\r\\\\n\",\n      \"insertId\": \"26554\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"project_id\": \"gcpdiag-notebooks2-aaaa\",\n          \"zone\": \"us-west1-a\",\n          \"instance_id\": \"4775836342981993096\"\n        }\n      },\n      \"timestamp\": \"2024-06-25T05:00:57.912540886Z\",\n      \"severity\": \"INFO\",\n      \"labels\": {\n        \"compute.googleapis.com/resource_name\": \"notebooks2instance-provisioning-stuck\",\n        \"is_text_escaped\": \"true\"\n      },\n      \"logName\": \"projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output\",\n      \"receiveTimestamp\": \"2024-06-25T05:00:57.992679861Z\"\n    },\n    {\n      \"textPayload\": \"Jun 25 05:00:56 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\\\r\\\\n\",\n      \"insertId\": \"26553\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"project_id\": \"gcpdiag-notebooks2-aaaa\",\n          \"instance_id\": \"4775836342981993096\",\n          \"zone\": \"us-west1-a\"\n        }\n      },\n      \"timestamp\": \"2024-06-25T05:00:56.908743292Z\",\n      \"severity\": \"INFO\",\n      \"labels\": {\n        \"is_text_escaped\": \"true\",\n        \"compute.googleapis.com/resource_name\": \"notebooks2instance-provisioning-stuck\"\n      },\n      \"logName\": \"projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output\",\n      \"receiveTimestamp\": \"2024-06-25T05:00:57.992679861Z\"\n    },\n    {\n      \"textPayload\": \"Jun 25 05:00:55 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\\\r\\\\n\",\n      \"insertId\": \"26552\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"zone\": \"us-west1-a\",\n          \"instance_id\": \"4775836342981993096\",\n          \"project_id\": \"gcpdiag-notebooks2-aaaa\"\n        }\n      },\n      \"timestamp\": \"2024-06-25T05:00:55.904734458Z\",\n      \"severity\": \"INFO\",\n      \"labels\": {\n        \"compute.googleapis.com/resource_name\": \"notebooks2instance-provisioning-stuck\",\n        \"is_text_escaped\": \"true\"\n      },\n      \"logName\": \"projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output\",\n      \"receiveTimestamp\": \"2024-06-25T05:00:57.992679861Z\"\n    },\n    {\n      \"textPayload\": \"Jun 25 05:00:54 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\\\r\\\\n\",\n      \"insertId\": \"26551\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"project_id\": \"gcpdiag-notebooks2-aaaa\",\n          \"instance_id\": \"4775836342981993096\",\n          \"zone\": \"us-west1-a\"\n        }\n      },\n      \"timestamp\": \"2024-06-25T05:00:54.900946570Z\",\n      \"severity\": \"INFO\",\n      \"labels\": {\n        \"is_text_escaped\": \"true\",\n        \"compute.googleapis.com/resource_name\": \"notebooks2instance-provisioning-stuck\"\n      },\n      \"logName\": \"projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output\",\n      \"receiveTimestamp\": \"2024-06-25T05:00:55.904110127Z\"\n    },\n    {\n      \"textPayload\": \"Jun 25 05:00:53 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\\\r\\\\n\",\n      \"insertId\": \"26550\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"instance_id\": \"4775836342981993096\",\n          \"zone\": \"us-west1-a\",\n          \"project_id\": \"gcpdiag-notebooks2-aaaa\"\n        }\n      },\n      \"timestamp\": \"2024-06-25T05:00:53.896997162Z\",\n      \"severity\": \"INFO\",\n      \"labels\": {\n        \"compute.googleapis.com/resource_name\": \"notebooks2instance-provisioning-stuck\",\n        \"is_text_escaped\": \"true\"\n      },\n      \"logName\": \"projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output\",\n      \"receiveTimestamp\": \"2024-06-25T05:00:55.904110127Z\"\n    },\n    {\n      \"textPayload\": \"Jun 25 05:00:52 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\\\r\\\\n\",\n      \"insertId\": \"26549\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"zone\": \"us-west1-a\",\n          \"instance_id\": \"4775836342981993096\",\n          \"project_id\": \"gcpdiag-notebooks2-aaaa\"\n        }\n      },\n      \"timestamp\": \"2024-06-25T05:00:52.892964823Z\",\n      \"severity\": \"INFO\",\n      \"labels\": {\n        \"compute.googleapis.com/resource_name\": \"notebooks2instance-provisioning-stuck\",\n        \"is_text_escaped\": \"true\"\n      },\n      \"logName\": \"projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output\",\n      \"receiveTimestamp\": \"2024-06-25T05:00:52.942276713Z\"\n    },\n    {\n      \"textPayload\": \"Jun 25 05:00:51 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\\\r\\\\n\",\n      \"insertId\": \"26548\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"instance_id\": \"4775836342981993096\",\n          \"zone\": \"us-west1-a\",\n          \"project_id\": \"gcpdiag-notebooks2-aaaa\"\n        }\n      },\n      \"timestamp\": \"2024-06-25T05:00:51.889167231Z\",\n      \"severity\": \"INFO\",\n      \"labels\": {\n        \"is_text_escaped\": \"true\",\n        \"compute.googleapis.com/resource_name\": \"notebooks2instance-provisioning-stuck\"\n      },\n      \"logName\": \"projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output\",\n      \"receiveTimestamp\": \"2024-06-25T05:00:52.942276713Z\"\n    },\n    {\n      \"textPayload\": \"Jun 25 05:00:50 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\\\r\\\\n\",\n      \"insertId\": \"26547\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"zone\": \"us-west1-a\",\n          \"project_id\": \"gcpdiag-notebooks2-aaaa\",\n          \"instance_id\": \"4775836342981993096\"\n        }\n      },\n      \"timestamp\": \"2024-06-25T05:00:50.885166842Z\",\n      \"severity\": \"INFO\",\n      \"labels\": {\n        \"is_text_escaped\": \"true\",\n        \"compute.googleapis.com/resource_name\": \"notebooks2instance-provisioning-stuck\"\n      },\n      \"logName\": \"projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output\",\n      \"receiveTimestamp\": \"2024-06-25T05:00:52.942276713Z\"\n    },\n    {\n      \"textPayload\": \"Jun 25 05:00:49 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\\\r\\\\n\",\n      \"insertId\": \"26546\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"project_id\": \"gcpdiag-notebooks2-aaaa\",\n          \"zone\": \"us-west1-a\",\n          \"instance_id\": \"4775836342981993096\"\n        }\n      },\n      \"timestamp\": \"2024-06-25T05:00:49.881122588Z\",\n      \"severity\": \"INFO\",\n      \"labels\": {\n        \"is_text_escaped\": \"true\",\n        \"compute.googleapis.com/resource_name\": \"notebooks2instance-provisioning-stuck\"\n      },\n      \"logName\": \"projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output\",\n      \"receiveTimestamp\": \"2024-06-25T05:00:50.883735865Z\"\n    },\n    {\n      \"textPayload\": \"Jun 25 05:00:48 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\\\r\\\\n\",\n      \"insertId\": \"26545\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"project_id\": \"gcpdiag-notebooks2-aaaa\",\n          \"zone\": \"us-west1-a\",\n          \"instance_id\": \"4775836342981993096\"\n        }\n      },\n      \"timestamp\": \"2024-06-25T05:00:48.877068714Z\",\n      \"severity\": \"INFO\",\n      \"labels\": {\n        \"is_text_escaped\": \"true\",\n        \"compute.googleapis.com/resource_name\": \"notebooks2instance-provisioning-stuck\"\n      },\n      \"logName\": \"projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output\",\n      \"receiveTimestamp\": \"2024-06-25T05:00:50.883735865Z\"\n    },\n    {\n      \"textPayload\": \"Jun 25 05:00:47 notebooks2instance-provisioning-stuck report_startup.sh[448]: Waiting for ready status...\\\\r\\\\n\",\n      \"insertId\": \"26544\",\n      \"resource\": {\n        \"type\": \"gce_instance\",\n        \"labels\": {\n          \"project_id\": \"gcpdiag-notebooks2-aaaa\",\n          \"instance_id\": \"4775836342981993096\",\n          \"zone\": \"us-west1-a\"\n        }\n      },\n      \"timestamp\": \"2024-06-25T05:00:47.873047535Z\",\n      \"severity\": \"INFO\",\n      \"labels\": {\n        \"compute.googleapis.com/resource_name\": \"notebooks2instance-provisioning-stuck\",\n        \"is_text_escaped\": \"true\"\n      },\n      \"logName\": \"projects/gcpdiag-notebooks2-aaaa/logs/serialconsole.googleapis.com%2Fserial_port_1_output\",\n      \"receiveTimestamp\": \"2024-06-25T05:00:47.960381575Z\"\n    }\n  ],\n  \"nextPageToken\": \"EAE4ysPH7dz8q7m4AUrHBSIXIgcKBTI2NTQ0KgwI_53pswYQ78umoANKqwUKgwVKgAUA0C8gBmi8iFXVzjOdm7N1z5DmODJFQejepzHKgu0Iw9KrTGr5Ae-Nh785SZPkUu9PDwPCV-H9o-Wks0jmeomniac9fnr_2axu19hkyOU9opUpr7IQOKVDIrc5pQj8tWGGJnD-Xx5KYcmeBX5pcwKKIn--E_aXqgNYAdIVIDy08KF9_STjtVCY5Qp-vUgNg8w37d29RsIjTYYXFvfmAv4L5S62OytDzt7iicLHma7jkdO-rqQxo2A2S83m408ZWlTt9dUz0hatHOr6HRzr7V-VIbUrKogsrnDGJmm0GmwOqA7mtef5Ss_jAIfDhTde75hxitq8VoBrqs08qBSCgvlG29hLv7rHQh87o7-cHG_PJn8skssDxjYDBccgHS1xVZcEev6rjJzO9eYJXHuZRVyw8pwxvaj7HeuJZk1uj4wGqtgFXSW5m2OKYvAVuexmfwd5xwBk4ZDQOBIkDro7ymKcJdsk2CBw-JKW4kw9c1agshET55fM9Eq6oyKfkh_P8ez1VcJHa1digVP5_uNYu6cYfxBgyBwNrWQ0tnChJqQ3Bhanuxz9cW8BzJ-2poIAB4DGm-9p7R5Lcxo517FH6R2vA_F01qvjpB07V5DPUH16573nzrjQCdkWOOJRKvfihwPtQ-yf4X8GCwPq0Rndhuka5qjKBbJkmbwWNuSXqGOgTfsqqkNd-YA5MuM0Whb4mqw-BnWUa4_v0-gNkpzQg5QEZnLWcVqlAGCvTjxeOGEsTqReUiZzQOe6sJNT8_c8T8umQFXz-SdDg09UXk6lNs5JjipsdRx2WsB-0hVzCiRbxD3OMz6q2Id5rpJnD9nTOB_M8hzEZEEZFWaEsUb5AO1zEhgaCAjw9OezBhABIgwI79XpswYQ_5Pr3ANQ2Neh4Nn0uoSwAVIHCNC9jc_ZGmDT_vSmkJXozvcBahsKDAiqnumzBhC6zaaCAxIHCAEQr_27BhgyIAA\"\n}\n"
  },
  {
    "path": "test-data/notebooks2/json-dumps/monitoring-query.json",
    "content": "{\n  \"timeSeriesDescriptor\": {\n    \"labelDescriptors\": [\n      {\n        \"key\": \"resource.project_id\"\n      },\n      {\n        \"key\": \"resource.zone\"\n      },\n      {\n        \"key\": \"resource.instance_id\"\n      },\n      {\n        \"key\": \"metric.instance_name\"\n      }\n    ],\n    \"pointDescriptors\": [\n      {\n        \"key\": \"value_utilization_max\",\n        \"valueType\": \"DOUBLE\",\n        \"metricKind\": \"GAUGE\",\n        \"unit\": \"10^2.%\"\n      }\n    ]\n  },\n  \"timeSeriesData\": [\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"gcpdiag-notebooks2-aaaa\"\n        },\n        {\n          \"stringValue\": \"us-west1-a\"\n        },\n        {\n          \"stringValue\": \"7519326121542266893\"\n        },\n        {\n          \"stringValue\": \"notebooks2instance-ok\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 0.022391958608412092\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-06-25T04:56:24.619964Z\",\n            \"endTime\": \"2024-06-25T04:56:24.619964Z\"\n          }\n        }\n      ]\n    },\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"gcpdiag-notebooks2-aaaa\"\n        },\n        {\n          \"stringValue\": \"us-west1-a\"\n        },\n        {\n          \"stringValue\": \"4775836342981993096\"\n        },\n        {\n          \"stringValue\": \"notebooks2instance-provisioning-stuck\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 0.019849973913744635\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-06-25T04:56:24.619964Z\",\n            \"endTime\": \"2024-06-25T04:56:24.619964Z\"\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/notebooks2/json-dumps/notebooks2instance-ok-check-upgradability.json",
    "content": "{\n  \"upgradeable\": false,\n  \"upgradeVersion\": \"\",\n  \"upgradeInfo\": \"Current and latest available image are the same\",\n  \"upgradeImage\": \"\"\n}\n"
  },
  {
    "path": "test-data/notebooks2/json-dumps/notebooks2instance-provisioning-stuck-check-upgradability.json",
    "content": "{\n  \"upgradeable\": true,\n  \"upgradeVersion\": \"m122\",\n  \"upgradeInfo\": \"A new image is available for upgrade. Backup user data before upgrading\",\n  \"upgradeImage\": \"https://www.googleapis.com/compute/v1/projects/cloud-notebooks-managed/global/images/workbench-instances-v20240613\"\n}\n"
  },
  {
    "path": "test-data/notebooks2/json-dumps/org-constraint-compute.disableSerialPortAccess.json",
    "content": "{\n  \"booleanPolicy\": {},\n  \"constraint\": \"constraints/compute.disableSerialPortAccess\"\n}\n"
  },
  {
    "path": "test-data/notebooks2/json-dumps/org-constraint-compute.disableSerialPortLogging.json",
    "content": "{\n  \"booleanPolicy\": {},\n  \"constraint\": \"constraints/compute.disableSerialPortLogging\"\n}\n"
  },
  {
    "path": "test-data/notebooks2/json-dumps/org-constraint-compute.disableSshInBrowser.json",
    "content": "{\n  \"booleanPolicy\": {},\n  \"constraint\": \"constraints/compute.disableSshInBrowser\"\n}\n"
  },
  {
    "path": "test-data/notebooks2/json-dumps/org-constraint-compute.requireOsLogin.json",
    "content": "{\n  \"booleanPolicy\": {},\n  \"constraint\": \"constraints/compute.requireOsLogin\"\n}\n"
  },
  {
    "path": "test-data/notebooks2/json-dumps/org-constraint-compute.requireShieldedVm.json",
    "content": "{\n  \"booleanPolicy\": {},\n  \"constraint\": \"constraints/compute.requireShieldedVm\"\n}\n"
  },
  {
    "path": "test-data/notebooks2/json-dumps/org-constraint-iam.automaticIamGrantsForDefaultServiceAccounts.json",
    "content": "{\n  \"booleanPolicy\": {},\n  \"constraint\": \"constraints/iam.automaticIamGrantsForDefaultServiceAccounts\"\n}\n"
  },
  {
    "path": "test-data/notebooks2/json-dumps/org-constraint-iam.disableCrossProjectServiceAccountUsage.json",
    "content": "{\n  \"booleanPolicy\": {},\n  \"constraint\": \"constraints/iam.disableCrossProjectServiceAccountUsage\"\n}\n"
  },
  {
    "path": "test-data/notebooks2/json-dumps/project.json",
    "content": "{\n  \"name\": \"projects/12340012\",\n  \"parent\": \"folders/135791208641\",\n  \"projectId\": \"gcpdiag-notebooks2-aaaa\",\n  \"state\": \"ACTIVE\",\n  \"displayName\": \"gcpdiag test - notebooks2\",\n  \"createTime\": \"2024-06-24T23:13:18.062235Z\",\n  \"updateTime\": \"2024-06-24T23:13:18.062235Z\",\n  \"etag\": \"W/\\\"5da8435414a342b0\\\"\",\n  \"labels\": {\n    \"gcpdiag\": \"test\"\n  }\n}\n"
  },
  {
    "path": "test-data/notebooks2/json-dumps/services.json",
    "content": "{\n  \"services\": [\n    {\n      \"name\": \"projects/12340012/services/compute.googleapis.com\",\n      \"config\": {\n        \"name\": \"compute.googleapis.com\",\n        \"title\": \"Compute Engine API\",\n        \"documentation\": {\n          \"summary\": \"Creates and runs virtual machines on Google Cloud Platform.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"compute.googleapis.com/VpcNetwork\",\n            \"displayName\": \"VPC Network\",\n            \"description\": \"VPC Network.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the VPC Network.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the VPC Network, global always.\"\n              },\n              {\n                \"key\": \"network_id\",\n                \"description\": \"VPC Network resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Location\",\n            \"displayName\": \"Compute Location\",\n            \"description\": \"A location in the Compute API.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the Compute Location.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Interconnect\",\n            \"displayName\": \"Interconnect\",\n            \"description\": \"Interconnect.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the Interconnect.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the Interconnect.\"\n              },\n              {\n                \"key\": \"interconnect_id\",\n                \"description\": \"Interconnect resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/FirewallPolicy\",\n            \"displayName\": \"Firewall policy\",\n            \"description\": \"Firewall policy.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project or organization) associated with the firewall policy.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the firewall policy.\"\n              },\n              {\n                \"key\": \"firewall_policy_id\",\n                \"description\": \"Firewall policy resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/SecurityPolicy\",\n            \"displayName\": \"Security policy\",\n            \"description\": \"Security policy.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the security policy.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the security policy.\"\n              },\n              {\n                \"key\": \"security_policy_id\",\n                \"description\": \"Security policy resource ID.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/OperationType\",\n            \"displayName\": \"Operation Type\",\n            \"description\": \"Operation Type.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the operation.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the operation.\"\n              },\n              {\n                \"key\": \"operation_type\",\n                \"description\": \"Operation type.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Reservation\",\n            \"displayName\": \"Reservation\",\n            \"description\": \"Monitored resource representing a reservation.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container (e.g. project number) associated with the reservation.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The zone that contains the reservation.\"\n              },\n              {\n                \"key\": \"reservation_id\",\n                \"description\": \"Reservation resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/StoragePool\",\n            \"displayName\": \"Storage Pool\",\n            \"description\": \"Monitored resource representing a storage pool.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container (e.g. project number) associated with the reservation.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location that contains the storage pool.\"\n              },\n              {\n                \"key\": \"storage_pool_id\",\n                \"description\": \"Numerical resource ID of the storage pool.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"gce_instance\",\n            \"displayName\": \"VM Instance\",\n            \"description\": \"A virtual machine instance hosted in Compute Engine.\",\n            \"labels\": [\n              {\n                \"key\": \"project_id\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as \\\"my-project\\\".\"\n              },\n              {\n                \"key\": \"instance_id\",\n                \"description\": \"The numeric VM instance identifier assigned by Compute Engine.\"\n              },\n              {\n                \"key\": \"zone\",\n                \"description\": \"The Compute Engine zone in which the VM is running.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/dynamic_routes_per_region_per_peering_group\",\n                \"compute.googleapis.com/global_internal_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/instances_per_peering_group\",\n                \"compute.googleapis.com/instances_per_vpc_network\",\n                \"compute.googleapis.com/internal_lb_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_managed_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_protocol_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/ip_aliases_per_peering_group\",\n                \"compute.googleapis.com/ip_aliases_per_vpc_network\",\n                \"compute.googleapis.com/peerings_per_vpc_network\",\n                \"compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network\",\n                \"compute.googleapis.com/psc_propagated_connections_per_vpc_network\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_accepted_connections_per_producer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_connections_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/exceeded\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/regional_external_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/regional_internal_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/static_routes_per_peering_group\",\n                \"compute.googleapis.com/static_routes_per_vpc_network\",\n                \"compute.googleapis.com/subnet_ranges_per_peering_group\",\n                \"compute.googleapis.com/subnet_ranges_per_vpc_network\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Location\",\n              \"metrics\": [\n                \"compute.googleapis.com/cpus_per_vm_family\",\n                \"compute.googleapis.com/global_dns/request_count\",\n                \"compute.googleapis.com/gpus_per_gpu_family\",\n                \"compute.googleapis.com/inter_region_egress_bandwidth\",\n                \"compute.googleapis.com/local_ssd_total_storage_per_vm_family\",\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/exceeded\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/exceeded\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/exceeded\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/usage\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/exceeded\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/exceeded\",\n                \"compute.googleapis.com/quota/tpus_per_tpu_family/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Interconnect\",\n              \"metrics\": [\n                \"compute.googleapis.com/interconnect_attachments_per_interconnect\",\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/FirewallPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/fqdns_per_global_network_firewall_policy\",\n                \"compute.googleapis.com/fqdns_per_regional_network_firewall_policy\",\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/rule_attributes_per_global_network_firewall_policy\",\n                \"compute.googleapis.com/rule_attributes_per_regional_network_firewall_policy\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/SecurityPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/exceeded\",\n                \"compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/exceeded\",\n                \"compute.googleapis.com/quota/advanced_rules_per_security_policy/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/OperationType\",\n              \"metrics\": [\n                \"compute.googleapis.com/global_concurrent_operations\",\n                \"compute.googleapis.com/quota/concurrent/global_concurrent_operations/exceeded\",\n                \"compute.googleapis.com/quota/concurrent/internal/global_concurrent_operations/combined_units\",\n                \"compute.googleapis.com/quota/concurrent/internal/regional_concurrent_operations/combined_units\",\n                \"compute.googleapis.com/quota/concurrent/regional_concurrent_operations/exceeded\",\n                \"compute.googleapis.com/regional_concurrent_operations\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"gce_instance\",\n              \"metrics\": [\n                \"compute.googleapis.com/instance/global_dns/request_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Reservation\",\n              \"metrics\": [\n                \"compute.googleapis.com/reservation/reserved\",\n                \"compute.googleapis.com/reservation/assured\",\n                \"compute.googleapis.com/reservation/used\",\n                \"compute.googleapis.com/reservation/internal/matching_instances\",\n                \"compute.googleapis.com/reservation/internal/prespuns_by_state\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/StoragePool\",\n              \"metrics\": [\n                \"compute.googleapis.com/storage_pool/disks\",\n                \"compute.googleapis.com/storage_pool/provisioned_capacity\",\n                \"compute.googleapis.com/storage_pool/used_capacity\",\n                \"compute.googleapis.com/storage_pool/total_disk_provisioned_capacity\",\n                \"compute.googleapis.com/storage_pool/provisioned_iops\",\n                \"compute.googleapis.com/storage_pool/used_iops\",\n                \"compute.googleapis.com/storage_pool/total_disk_provisioned_iops\",\n                \"compute.googleapis.com/storage_pool/provisioned_throughput\",\n                \"compute.googleapis.com/storage_pool/used_throughput\",\n                \"compute.googleapis.com/storage_pool/total_disk_provisioned_throughput\",\n                \"compute.googleapis.com/storage_pool/capacity_utilization\",\n                \"compute.googleapis.com/storage_pool/iops_utilization\",\n                \"compute.googleapis.com/storage_pool/throughput_utilization\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Location\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/limit\",\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/usage\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/limit\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/usage\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/limit\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/limit\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/usage\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/limit\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/usage\",\n                \"compute.googleapis.com/quota/tpus_per_tpu_family/limit\",\n                \"compute.googleapis.com/quota/tpus_per_tpu_family/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/limit\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/usage\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_accepted_connections_per_producer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_accepted_connections_per_producer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_connections_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_connections_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/limit\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/usage\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Interconnect\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/limit\",\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/FirewallPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/SecurityPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/limit\",\n                \"compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/usage\",\n                \"compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/limit\",\n                \"compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/usage\",\n                \"compute.googleapis.com/quota/advanced_rules_per_security_policy/limit\",\n                \"compute.googleapis.com/quota/advanced_rules_per_security_policy/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/OperationType\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/concurrent/global_concurrent_operations/limit\",\n                \"compute.googleapis.com/quota/concurrent/regional_concurrent_operations/limit\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340012\"\n    },\n    {\n      \"name\": \"projects/12340012/services/notebooks.googleapis.com\",\n      \"config\": {\n        \"name\": \"notebooks.googleapis.com\",\n        \"title\": \"Notebooks API\",\n        \"documentation\": {\n          \"summary\": \"Notebooks API is used to manage notebook resources in Google Cloud.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"notebooks.googleapis.com/Runtime\",\n            \"displayName\": \"Notebooks Runtime\",\n            \"description\": \"A managed notebooks instance.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP resource container associated with this resource, such as \\\"my-project\\\" or \\\"organizations/123\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The region of the runtime.\"\n              },\n              {\n                \"key\": \"runtime_id\",\n                \"description\": \"The user-provided unique ID for the runtime.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"gce_instance\",\n            \"displayName\": \"VM Instance\",\n            \"description\": \"A virtual machine instance hosted in Compute Engine.\",\n            \"labels\": [\n              {\n                \"key\": \"project_id\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as \\\"my-project\\\".\"\n              },\n              {\n                \"key\": \"instance_id\",\n                \"description\": \"The numeric VM instance identifier assigned by Compute Engine.\"\n              },\n              {\n                \"key\": \"zone\",\n                \"description\": \"The Compute Engine zone in which the VM is running.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"notebooks.googleapis.com/Runtime\",\n              \"metrics\": [\n                \"notebooks.googleapis.com/runtime/health\",\n                \"notebooks.googleapis.com/runtime/kernel/startup_latencies\",\n                \"notebooks.googleapis.com/runtime/proxy/response_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"gce_instance\",\n              \"metrics\": [\n                \"notebooks.googleapis.com/instance/proxy_agent/crash_count\",\n                \"notebooks.googleapis.com/instance/proxy_agent/response_count\",\n                \"notebooks.googleapis.com/instance/jupyter/crash_count\",\n                \"notebooks.googleapis.com/instance/jupyter/container_crash_count\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340012\"\n    },\n    {\n      \"name\": \"projects/12340012/services/oslogin.googleapis.com\",\n      \"config\": {\n        \"name\": \"oslogin.googleapis.com\",\n        \"title\": \"Cloud OS Login API\",\n        \"documentation\": {\n          \"summary\": \"You can use OS Login to manage access to your VM instances using IAM roles.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340012\"\n    },\n    {\n      \"name\": \"projects/12340012/services/websecurityscanner.googleapis.com\",\n      \"config\": {\n        \"name\": \"websecurityscanner.googleapis.com\",\n        \"title\": \"Web Security Scanner API\",\n        \"documentation\": {\n          \"summary\": \"Scans your Compute and App Engine apps for common web vulnerabilities.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340012\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/notebooks2/json-dumps/workbench-instances.json",
    "content": "{\n  \"instances\": [\n    {\n      \"name\": \"projects/gcpdiag-notebooks2-aaaa/locations/us-west1-a/instances/notebooks2instance-provisioning-stuck\",\n      \"gceSetup\": {\n        \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/machineTypes/e2-standard-4\",\n        \"serviceAccounts\": [\n          {\n            \"email\": \"12340012-compute@developer.gserviceaccount.com\",\n            \"scopes\": [\n              \"https://www.googleapis.com/auth/cloud-platform\",\n              \"https://www.googleapis.com/auth/userinfo.email\"\n            ]\n          }\n        ],\n        \"containerImage\": {\n          \"repository\": \"us-docker.pkg.dev/deeplearning-platform-release/gcr.io/base-cu113.py310\",\n          \"tag\": \"m118\"\n        },\n        \"bootDisk\": {\n          \"diskSizeGb\": \"150\",\n          \"diskEncryption\": \"GMEK\"\n        },\n        \"dataDisks\": [\n          {\n            \"diskSizeGb\": \"100\",\n            \"diskEncryption\": \"GMEK\"\n          }\n        ],\n        \"shieldedInstanceConfig\": {\n          \"enableVtpm\": true,\n          \"enableIntegrityMonitoring\": true\n        },\n        \"networkInterfaces\": [\n          {\n            \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/global/networks/wbi-test-default\",\n            \"subnet\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/regions/us-west1/subnetworks/wbi-test-default\"\n          }\n        ],\n        \"disablePublicIp\": true,\n        \"tags\": [\n          \"deeplearning-vm\",\n          \"notebook-instance\"\n        ],\n        \"metadata\": {\n          \"enable-guest-attributes\": \"TRUE\",\n          \"post-startup-script\": \"#! /bin/bash\",\n          \"user-data\": \"#include file:///mnt/stateful_partition/workbench/cloud-config.yaml\",\n          \"serial-port-logging-enable\": \"true\",\n          \"report-event-url\": \"https://notebooks.googleapis.com/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/instances/notebooks2instance-provisioning-stuck:reportInfoSystem\",\n          \"disable-mixer\": \"true\",\n          \"notebooks-api\": \"PROD\",\n          \"google-logging-enabled\": \"true\",\n          \"disable-swap-binaries\": \"true\",\n          \"terraform\": \"true\",\n          \"report-event-health\": \"true\",\n          \"service-account-mode\": \"true\",\n          \"enable-oslogin\": \"TRUE\",\n          \"proxy-mode\": \"service_account\",\n          \"shutdown-script\": \"/opt/deeplearning/bin/shutdown_script.sh\",\n          \"custom-container-payload\": \"us-docker.pkg.dev/deeplearning-platform-release/gcr.io/base-cu113.py310:m118\",\n          \"report-dns-resolution\": \"true\",\n          \"cos-update-strategy\": \"update_disabled\",\n          \"proxy-registration-url\": \"https://us-west1.notebooks.cloud.google.com/tun/m/4592f092208ecc84946b8f8f8016274df1b36a14\",\n          \"proxy-backend-id\": \"1b1dcbcb4ec643e8\",\n          \"proxy-url\": \"1b1dcbcb4ec643e8-dot-us-west1.notebooks.googleusercontent.com\",\n          \"notebooks-api-version\": \"v2\",\n          \"container\": \"us-docker.pkg.dev/deeplearning-platform-release/gcr.io/base-cu113.py310:m118\",\n          \"custom-container-image\": \"true\",\n          \"proxy-byoid-url\": \"1b1dcbcb4ec643e8-dot-us-west1.notebooks.byoid.googleusercontent.com\"\n        },\n        \"gpuDriverConfig\": {}\n      },\n      \"proxyUri\": \"1b1dcbcb4ec643e8-dot-us-west1.notebooks.googleusercontent.com\",\n      \"state\": \"PROVISIONING\",\n      \"id\": \"66917948-86fd-40c0-b6ac-50e599bdd4e8\",\n      \"createTime\": \"2024-06-25T00:45:45.057675437Z\",\n      \"updateTime\": \"2024-06-25T00:46:02.584714415Z\",\n      \"labels\": {\n        \"consumer-project-id\": \"gcpdiag-notebooks2-aaaa\",\n        \"consumer-project-number\": \"12340012\",\n        \"notebooks-product\": \"workbench-instances\",\n        \"resource-name\": \"notebooks2instance-provisioning-stuck\"\n      },\n      \"thirdPartyProxyUrl\": \"1b1dcbcb4ec643e8-dot-us-west1.notebooks.byoid.googleusercontent.com\",\n      \"satisfiesPzi\": true\n    },\n    {\n      \"name\": \"projects/gcpdiag-notebooks2-aaaa/locations/us-west1-a/instances/notebooks2instance-ok\",\n      \"gceSetup\": {\n        \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/zones/us-west1-a/machineTypes/e2-standard-4\",\n        \"serviceAccounts\": [\n          {\n            \"email\": \"12340012-compute@developer.gserviceaccount.com\",\n            \"scopes\": [\n              \"https://www.googleapis.com/auth/cloud-platform\",\n              \"https://www.googleapis.com/auth/userinfo.email\"\n            ]\n          }\n        ],\n        \"bootDisk\": {\n          \"diskSizeGb\": \"150\",\n          \"diskEncryption\": \"GMEK\"\n        },\n        \"dataDisks\": [\n          {\n            \"diskSizeGb\": \"100\",\n            \"diskEncryption\": \"GMEK\"\n          }\n        ],\n        \"shieldedInstanceConfig\": {\n          \"enableVtpm\": true,\n          \"enableIntegrityMonitoring\": true\n        },\n        \"networkInterfaces\": [\n          {\n            \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/global/networks/default\",\n            \"subnet\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-notebooks2-aaaa/regions/us-west1/subnetworks/default\"\n          }\n        ],\n        \"tags\": [\n          \"deeplearning-vm\",\n          \"notebook-instance\"\n        ],\n        \"metadata\": {\n          \"version\": \"122\",\n          \"restriction\": \"\",\n          \"serial-port-logging-enable\": \"true\",\n          \"disable-swap-binaries\": \"true\",\n          \"shutdown-script\": \"/opt/deeplearning/bin/shutdown_script.sh\",\n          \"terraform\": \"true\",\n          \"title\": \"workbench\",\n          \"proxy-byoid-url\": \"341a9c04117d5a9e-dot-us-west1.notebooks.byoid.googleusercontent.com\",\n          \"proxy-registration-url\": \"https://us-west1.notebooks.cloud.google.com/tun/m/4592f092208ecc84946b8f8f8016274df1b36a14\",\n          \"proxy-backend-id\": \"341a9c04117d5a9e\",\n          \"report-event-health\": \"true\",\n          \"idle-timeout-seconds\": \"10800\",\n          \"notebooks-api\": \"PROD\",\n          \"proxy-url\": \"341a9c04117d5a9e-dot-us-west1.notebooks.googleusercontent.com\",\n          \"report-dns-resolution\": \"true\",\n          \"proxy-mode\": \"service_account\",\n          \"enable-oslogin\": \"TRUE\",\n          \"notebooks-api-version\": \"v2\",\n          \"enable-guest-attributes\": \"TRUE\",\n          \"disable-mixer\": \"true\",\n          \"framework\": \"workbench\"\n        },\n        \"gpuDriverConfig\": {}\n      },\n      \"proxyUri\": \"341a9c04117d5a9e-dot-us-west1.notebooks.googleusercontent.com\",\n      \"state\": \"ACTIVE\",\n      \"id\": \"2a0b7e06-ddcc-4530-acbf-cf76b78a3e80\",\n      \"healthState\": \"HEALTHY\",\n      \"healthInfo\": {\n        \"docker_proxy_agent_status\": \"1\",\n        \"jupyterlab_status\": \"1\",\n        \"jupyterlab_api_status\": \"1\",\n        \"notebooks_api_dns\": \"1\",\n        \"proxy_registration_dns\": \"1\",\n        \"last_updated\": \"2024-06-25T00:57:20+00:00\",\n        \"system_health\": \"1\",\n        \"docker_status\": \"1\"\n      },\n      \"createTime\": \"2024-06-25T00:27:07.479890065Z\",\n      \"updateTime\": \"2024-06-25T00:57:20.945822754Z\",\n      \"labels\": {\n        \"notebooks-product\": \"workbench-instances\",\n        \"resource-name\": \"notebooks2instance-ok\",\n        \"consumer-project-id\": \"gcpdiag-notebooks2-aaaa\",\n        \"consumer-project-number\": \"12340012\"\n      },\n      \"thirdPartyProxyUrl\": \"341a9c04117d5a9e-dot-us-west1.notebooks.byoid.googleusercontent.com\",\n      \"satisfiesPzi\": true\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/notebooks2/network.tf",
    "content": "/**\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nresource \"google_compute_network\" \"my_network\" {\n  project                 = google_project.project.project_id\n  name                    = \"wbi-test-default\"\n  description             = \"VPC network\"\n  auto_create_subnetworks = false\n  provider                = google-old\n}\n\nresource \"google_compute_subnetwork\" \"my_subnetwork\" {\n  project       = google_project.project.project_id\n  name          = \"wbi-test-default\"\n  network       = google_compute_network.my_network.id\n  region        = \"us-west1\"\n  ip_cidr_range = \"10.0.1.0/24\"\n  provider      = google-old\n}\n"
  },
  {
    "path": "test-data/notebooks2/project.tf",
    "content": "/**\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nterraform {\n  required_providers {\n    google = {\n      source  = \"hashicorp/google\"\n      version = \">= 5.23.1\"\n    }\n    google-old = {\n      source = \"hashicorp/google\"\n    }\n  }\n}\n\nresource \"random_string\" \"project_id_suffix\" {\n  length  = 8\n  number  = true\n  lower   = true\n  upper   = false\n  special = false\n}\n\nresource \"google_project\" \"project\" {\n  name            = \"gcpdiag test - notebooks2\"\n  project_id      = \"gcpdiag-notebooks2-${random_string.project_id_suffix.id}\"\n  org_id          = var.folder_id == \"\" ? var.org_id : null\n  folder_id       = var.folder_id != \"\" ? var.folder_id : null\n  billing_account = var.billing_account_id\n  labels = {\n    gcpdiag : \"test\"\n  }\n}\n\nresource \"google_project_service\" \"compute\" {\n  project = google_project.project.project_id\n  service = \"compute.googleapis.com\"\n}\n\nresource \"google_project_service\" \"notebooks\" {\n  project = google_project.project.project_id\n  service = \"notebooks.googleapis.com\"\n}\n\noutput \"project_id\" {\n  value = google_project.project.project_id\n}\n\noutput \"project_id_suffix\" {\n  value = random_string.project_id_suffix.id\n}\n\noutput \"project_nr\" {\n  value = google_project.project.number\n}\n\noutput \"org_id\" {\n  value = var.org_id\n}\n"
  },
  {
    "path": "test-data/notebooks2/variables.tf",
    "content": "variable \"billing_account_id\" {}\n\nvariable \"org_id\" {}\nvariable \"folder_id\" { default = \"\" }\n"
  },
  {
    "path": "test-data/osconfig1/Makefile",
    "content": "\nPROJECT_ID := $(shell terraform output project_id | sed -e 's|\"||g')\nPROJECT_NR  := $(shell terraform output -json project_nr | sed -e 's|\"||g')\nFOLDER_ID  := $(shell terraform output -json folder_id | sed -e 's|\"||g')\nORG_ID      := $(shell terraform output -json org_id | sed -e 's|\"||g')\nINSTANCE = $(shell terraform output -json instance_name | sed -e 's|\"||g')\nCURL         = ../../bin/curl-wrap.sh\nJSON_CLEANER = ../../bin/json-cleaner\nLOCATION     = us-central1-a\nFAKE_FOLDER_ID = 9839384\nFAKE_PROJECT_ID = fake-project\nFAKE_PROJECT_NR = 12340051\nFAKE_ORG_ID = 11112222\nFAKE_INSTANCE_NAME = fake-instance\nSED_SUBST_FAKE = sed -e \"s/$(PROJECT_ID)/$(FAKE_PROJECT_ID)/\" \\\n\t\t\t\t-e \"s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/\" \\\n\t\t\t\t-e \"s/$(ORG_ID)/$(FAKE_ORG_ID)/\" \\\n\t\t\t\t-e \"s/$(FOLDER_ID)/$(FAKE_FOLDER_ID)/\" \\\n\t\t\t\t-e \"s/$(INSTANCE)/$(FAKE_INSTANCE_NAME)/\" \\\n\nall:\t\\\n\tjson-dumps/project.json \\\n\tjson-dumps/services.json \\\n\tjson-dumps/inventory.json \\\n\njson-dumps/project.json:\n\t$(CURL) -fsS \\\n\t\t'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/services.json:\n\t$(CURL) -fv \\\n\t'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \\\n\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/inventory.json:\n\t$(CURL) -fv \\\n\t\t'https://osconfig.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/instances/${INSTANCE}/inventory?view=full' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n"
  },
  {
    "path": "test-data/osconfig1/json-dumps/inventories.json",
    "content": "{\n  \"inventories\": [\n    {\n      \"osInfo\": {\n        \"longName\": \"Microsoft Windows Server 2022 Datacenter\",\n        \"shortName\": \"windows\",\n        \"version\": \"10.0.20348\",\n        \"architecture\": \"x86_64\",\n        \"kernelVersion\": \"10.0.20348.2520 (WinBuild.160101.0800)\",\n        \"kernelRelease\": \"10.0.20348.2520\",\n        \"osconfigAgentVersion\": \"20240320.00.0+win@1\",\n        \"hostname\": \"instance-windows-oa-installed-2\"\n      },\n      \"items\": {\n        \"installedPackage-GooGet - google-cloud-ops-agent:2.47.0@1:\": {\n          \"id\": \"installedPackage-GooGet - google-cloud-ops-agent:2.47.0@1:\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"windowsApplication\": {\n              \"displayName\": \"GooGet - google-cloud-ops-agent\",\n              \"displayVersion\": \"2.47.0@1\",\n              \"installDate\": {}\n            }\n          },\n          \"createTime\": \"2024-06-25T17:07:40.873449Z\"\n        },\n        \"installedPackage-c01629fc-64ea-45f3-b7cb-cabc7d566933:200\": {\n          \"id\": \"installedPackage-c01629fc-64ea-45f3-b7cb-cabc7d566933:200\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"wuaPackage\": {\n              \"title\": \"Update for Windows Defender Antivirus antimalware platform - KB4052623 (Version 4.18.2001.10)\",\n              \"description\": \"This package will update Windows Defender Antivirus antimalware platform’s components on the user machine.\",\n              \"categories\": [\n                {\n                  \"id\": \"8c3fcc84-7410-4a95-8b89-a166a0190486\",\n                  \"name\": \"Microsoft Defender Antivirus\"\n                },\n                {\n                  \"id\": \"cd5ffd1e-e932-4e3a-bf74-18bf0b1bbd83\",\n                  \"name\": \"Updates\"\n                }\n              ],\n              \"kbArticleIds\": [\n                \"4052623\"\n              ],\n              \"moreInfoUrls\": [\n                \"https://support.microsoft.com/en-us/help/4052623/update-for-windows-defender-antimalware-platform\"\n              ],\n              \"updateId\": \"c01629fc-64ea-45f3-b7cb-cabc7d566933\",\n              \"revisionNumber\": 200,\n              \"lastDeploymentChangeTime\": \"2020-05-01T00:00:00Z\",\n              \"supportUrl\": \"https://go.microsoft.com/fwlink/?linkid=862339\"\n            }\n          },\n          \"createTime\": \"2024-06-25T17:07:40.873443Z\"\n        },\n        \"installedPackage-KB5039227\": {\n          \"id\": \"installedPackage-KB5039227\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"qfePackage\": {\n              \"caption\": \"https://support.microsoft.com/help/5039227\",\n              \"description\": \"Security Update\",\n              \"hotFixId\": \"KB5039227\",\n              \"installTime\": \"2024-06-12T00:00:00Z\"\n            }\n          },\n          \"createTime\": \"2024-06-25T17:07:40.873447Z\"\n        },\n        \"installedPackage-google-osconfig-agent:x86_64:20240320.00.0+win@1\": {\n          \"id\": \"installedPackage-google-osconfig-agent:x86_64:20240320.00.0+win@1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"googetPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"20240320.00.0+win@1\",\n              \"packageName\": \"google-osconfig-agent\"\n            }\n          },\n          \"createTime\": \"2024-06-25T17:07:40.873442Z\"\n        },\n        \"installedPackage-GooGet - google-compute-engine-vss:1.1.9@56:\": {\n          \"id\": \"installedPackage-GooGet - google-compute-engine-vss:1.1.9@56:\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"windowsApplication\": {\n              \"displayName\": \"GooGet - google-compute-engine-vss\",\n              \"displayVersion\": \"1.1.9@56\",\n              \"installDate\": {}\n            }\n          },\n          \"createTime\": \"2024-06-25T17:07:40.873454Z\"\n        },\n        \"installedPackage-google-compute-engine-driver-pvpanic:x86_64:16.1.8@9\": {\n          \"id\": \"installedPackage-google-compute-engine-driver-pvpanic:x86_64:16.1.8@9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"googetPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"16.1.8@9\",\n              \"packageName\": \"google-compute-engine-driver-pvpanic\"\n            }\n          },\n          \"createTime\": \"2024-06-25T17:07:40.873438Z\"\n        },\n        \"installedPackage-google-compute-engine-powershell:noarch:20220728.00@1\": {\n          \"id\": \"installedPackage-google-compute-engine-powershell:noarch:20220728.00@1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"googetPackage\": {\n              \"architecture\": \"noarch\",\n              \"version\": \"20220728.00@1\",\n              \"packageName\": \"google-compute-engine-powershell\"\n            }\n          },\n          \"createTime\": \"2024-06-25T17:07:40.873440Z\"\n        },\n        \"installedPackage-KB5039343\": {\n          \"id\": \"installedPackage-KB5039343\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"qfePackage\": {\n              \"description\": \"Security Update\",\n              \"hotFixId\": \"KB5039343\",\n              \"installTime\": \"2024-06-12T00:00:00Z\"\n            }\n          },\n          \"createTime\": \"2024-06-25T17:07:40.873448Z\"\n        },\n        \"installedPackage-certgen:x86_64:20220603.00.0@1\": {\n          \"id\": \"installedPackage-certgen:x86_64:20220603.00.0@1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"googetPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"20220603.00.0@1\",\n              \"packageName\": \"certgen\"\n            }\n          },\n          \"createTime\": \"2024-06-25T17:07:40.873433Z\"\n        },\n        \"installedPackage-google-compute-engine-metadata-scripts:x86_64:20240109.00.0@1\": {\n          \"id\": \"installedPackage-google-compute-engine-metadata-scripts:x86_64:20240109.00.0@1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"googetPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"20240109.00.0@1\",\n              \"packageName\": \"google-compute-engine-metadata-scripts\"\n            }\n          },\n          \"createTime\": \"2024-06-25T17:07:40.873439Z\"\n        },\n        \"installedPackage-3d332b53-2a0f-48a8-a4c7-0305a1bb5bf9:200\": {\n          \"id\": \"installedPackage-3d332b53-2a0f-48a8-a4c7-0305a1bb5bf9:200\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"wuaPackage\": {\n              \"title\": \"Windows Malicious Software Removal Tool x64 - v5.125 (KB890830)\",\n              \"description\": \"After the download, this tool runs one time to check your computer for infection by specific, prevalent malicious software (including Blaster, Sasser, and Mydoom) and helps remove any infection that is found. If an infection is found, the tool will display a status report the next time that you start your computer. A new version of the tool will be offered every month. If you want to manually run the tool on your computer, you can download a copy from the Microsoft Download Center, or you can run an online version from microsoft.com. This tool is not a replacement for an antivirus product. To help protect your computer, you should use an antivirus product.\",\n              \"categories\": [\n                {\n                  \"id\": \"28bc880e-0592-4cbf-8f95-c79b17911d5f\",\n                  \"name\": \"Update Rollups\"\n                },\n                {\n                  \"id\": \"569e8e8f-c6cd-42c8-92a3-efbb20a0f6f5\",\n                  \"name\": \"Windows Server 2016\"\n                },\n                {\n                  \"id\": \"f702a48c-919b-45d6-9aef-ca4248d50397\",\n                  \"name\": \"Windows Server 2019\"\n                },\n                {\n                  \"id\": \"21210d67-50bc-4254-a695-281765e10665\",\n                  \"name\": \"Windows Server, version 1903 and later\"\n                }\n              ],\n              \"kbArticleIds\": [\n                \"890830\"\n              ],\n              \"moreInfoUrls\": [\n                \"http://support.microsoft.com/kb/890830\"\n              ],\n              \"updateId\": \"3d332b53-2a0f-48a8-a4c7-0305a1bb5bf9\",\n              \"revisionNumber\": 200,\n              \"lastDeploymentChangeTime\": \"2024-06-11T00:00:00Z\",\n              \"supportUrl\": \"http://support.microsoft.com\"\n            }\n          },\n          \"createTime\": \"2024-06-25T17:07:40.873444Z\"\n        },\n        \"availablePackage-81de234d-bcac-4306-81e0-f9751fa53436:200\": {\n          \"id\": \"availablePackage-81de234d-bcac-4306-81e0-f9751fa53436:200\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"AVAILABLE_PACKAGE\",\n          \"availablePackage\": {\n            \"wuaPackage\": {\n              \"title\": \"Security Intelligence Update for Microsoft Defender Antivirus - KB2267602 (Version 1.413.510.0) - Current Channel (Broad)\",\n              \"description\": \"Install this update to revise the files that are used to detect viruses, spyware, and other potentially unwanted software. Once you have installed this item, it cannot be removed.\",\n              \"categories\": [\n                {\n                  \"id\": \"e0789628-ce08-4437-be74-2495b842f43b\",\n                  \"name\": \"Definition Updates\"\n                },\n                {\n                  \"id\": \"8c3fcc84-7410-4a95-8b89-a166a0190486\",\n                  \"name\": \"Microsoft Defender Antivirus\"\n                }\n              ],\n              \"kbArticleIds\": [\n                \"2267602\"\n              ],\n              \"moreInfoUrls\": [\n                \"https://go.microsoft.com/fwlink/?linkid=2007160\"\n              ],\n              \"updateId\": \"81de234d-bcac-4306-81e0-f9751fa53436\",\n              \"revisionNumber\": 200,\n              \"lastDeploymentChangeTime\": \"2024-06-25T00:00:00Z\",\n              \"supportUrl\": \"https://go.microsoft.com/fwlink/?LinkId=52661\"\n            }\n          },\n          \"createTime\": \"2024-06-25T17:07:40.873430Z\"\n        },\n        \"installedPackage-google-compute-engine-driver-gvnic:x86_64:1.0.4@73\": {\n          \"id\": \"installedPackage-google-compute-engine-driver-gvnic:x86_64:1.0.4@73\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"googetPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.0.4@73\",\n              \"packageName\": \"google-compute-engine-driver-gvnic\"\n            }\n          },\n          \"createTime\": \"2024-06-25T17:07:40.873437Z\"\n        },\n        \"installedPackage-google-compute-engine-driver-balloon:x86_64:16.1.8@9\": {\n          \"id\": \"installedPackage-google-compute-engine-driver-balloon:x86_64:16.1.8@9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"googetPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"16.1.8@9\",\n              \"packageName\": \"google-compute-engine-driver-balloon\"\n            }\n          },\n          \"createTime\": \"2024-06-25T17:07:40.873436Z\"\n        },\n        \"installedPackage-google-compute-engine-sysprep:noarch:20240122.00@1\": {\n          \"id\": \"installedPackage-google-compute-engine-sysprep:noarch:20240122.00@1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"googetPackage\": {\n              \"architecture\": \"noarch\",\n              \"version\": \"20240122.00@1\",\n              \"packageName\": \"google-compute-engine-sysprep\"\n            }\n          },\n          \"createTime\": \"2024-06-25T17:07:40.873441Z\"\n        },\n        \"installedPackage-GooGet - google-compute-engine-driver-pvpanic:16.1.8@9:\": {\n          \"id\": \"installedPackage-GooGet - google-compute-engine-driver-pvpanic:16.1.8@9:\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"windowsApplication\": {\n              \"displayName\": \"GooGet - google-compute-engine-driver-pvpanic\",\n              \"displayVersion\": \"16.1.8@9\",\n              \"installDate\": {}\n            }\n          },\n          \"createTime\": \"2024-06-25T17:07:40.873452Z\"\n        },\n        \"installedPackage-28facac6-b366-4845-a057-b634c0ee206e:200\": {\n          \"id\": \"installedPackage-28facac6-b366-4845-a057-b634c0ee206e:200\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"wuaPackage\": {\n              \"title\": \"Update for Microsoft Defender Antivirus antimalware platform - KB4052623 (Version 4.18.24050.7) - Current Channel (Broad)\",\n              \"description\": \"This package will update Microsoft Defender Antivirus antimalware platform’s components on the user machine.\",\n              \"categories\": [\n                {\n                  \"id\": \"e0789628-ce08-4437-be74-2495b842f43b\",\n                  \"name\": \"Definition Updates\"\n                },\n                {\n                  \"id\": \"8c3fcc84-7410-4a95-8b89-a166a0190486\",\n                  \"name\": \"Microsoft Defender Antivirus\"\n                }\n              ],\n              \"kbArticleIds\": [\n                \"4052623\"\n              ],\n              \"moreInfoUrls\": [\n                \"https://support.microsoft.com/en-us/help/4052623/update-for-windows-defender-antimalware-platform\"\n              ],\n              \"updateId\": \"28facac6-b366-4845-a057-b634c0ee206e\",\n              \"revisionNumber\": 200,\n              \"lastDeploymentChangeTime\": \"2024-06-04T00:00:00Z\",\n              \"supportUrl\": \"https://go.microsoft.com/fwlink/?linkid=862339\"\n            }\n          },\n          \"createTime\": \"2024-06-25T17:07:40.873444Z\"\n        },\n        \"installedPackage-GooGet - googet:2.18.5@0:\": {\n          \"id\": \"installedPackage-GooGet - googet:2.18.5@0:\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"windowsApplication\": {\n              \"displayName\": \"GooGet - googet\",\n              \"displayVersion\": \"2.18.5@0\",\n              \"installDate\": {}\n            }\n          },\n          \"createTime\": \"2024-06-25T17:07:40.873449Z\"\n        },\n        \"installedPackage-GooGet - google-compute-engine-driver-gga:1.1.6@9:\": {\n          \"id\": \"installedPackage-GooGet - google-compute-engine-driver-gga:1.1.6@9:\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"windowsApplication\": {\n              \"displayName\": \"GooGet - google-compute-engine-driver-gga\",\n              \"displayVersion\": \"1.1.6@9\",\n              \"installDate\": {}\n            }\n          },\n          \"createTime\": \"2024-06-25T17:07:40.873450Z\"\n        },\n        \"installedPackage-GooGet - google-compute-engine-windows:20240109.00.0@1:\": {\n          \"id\": \"installedPackage-GooGet - google-compute-engine-windows:20240109.00.0@1:\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"windowsApplication\": {\n              \"displayName\": \"GooGet - google-compute-engine-windows\",\n              \"displayVersion\": \"20240109.00.0@1\",\n              \"installDate\": {}\n            }\n          },\n          \"createTime\": \"2024-06-25T17:07:40.873454Z\"\n        },\n        \"installedPackage-GooGet - google-compute-engine-driver-vioscsi:16.1.8@9:\": {\n          \"id\": \"installedPackage-GooGet - google-compute-engine-driver-vioscsi:16.1.8@9:\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"windowsApplication\": {\n              \"displayName\": \"GooGet - google-compute-engine-driver-vioscsi\",\n              \"displayVersion\": \"16.1.8@9\",\n              \"installDate\": {}\n            }\n          },\n          \"createTime\": \"2024-06-25T17:07:40.873452Z\"\n        },\n        \"installedPackage-b9c6a7ec-27ec-4938-b472-210255dab739:200\": {\n          \"id\": \"installedPackage-b9c6a7ec-27ec-4938-b472-210255dab739:200\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"wuaPackage\": {\n              \"title\": \"2024-05 Cumulative Update for .NET Framework 3.5, 4.8 and 4.8.1 for Microsoft server operating system version 21H2 for x64 (KB5038282)\",\n              \"description\": \"Install this update to resolve issues in Windows. For a complete listing of the issues that are included in this update, see the associated Microsoft Knowledge Base article for more information. After you install this item, you may have to restart your computer.\",\n              \"categories\": [\n                {\n                  \"id\": \"71718f13-7324-4b0f-8f9e-2ca9dc978e53\",\n                  \"name\": \"Microsoft Server operating system-21H2\"\n                },\n                {\n                  \"id\": \"cd5ffd1e-e932-4e3a-bf74-18bf0b1bbd83\",\n                  \"name\": \"Updates\"\n                }\n              ],\n              \"kbArticleIds\": [\n                \"5038282\"\n              ],\n              \"moreInfoUrls\": [\n                \"http://support.microsoft.com/kb/5038282\"\n              ],\n              \"updateId\": \"b9c6a7ec-27ec-4938-b472-210255dab739\",\n              \"revisionNumber\": 200,\n              \"lastDeploymentChangeTime\": \"2024-05-14T00:00:00Z\",\n              \"supportUrl\": \"http://support.microsoft.com\"\n            }\n          },\n          \"createTime\": \"2024-06-25T17:07:40.873443Z\"\n        },\n        \"availablePackage-google-cloud-ops-agent:x86_64:2.48.0@1\": {\n          \"id\": \"availablePackage-google-cloud-ops-agent:x86_64:2.48.0@1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"AVAILABLE_PACKAGE\",\n          \"availablePackage\": {\n            \"googetPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.48.0@1\",\n              \"packageName\": \"google-cloud-ops-agent\"\n            }\n          },\n          \"createTime\": \"2024-06-25T17:07:40.873427Z\"\n        },\n        \"installedPackage-GooGet - google-compute-engine-metadata-scripts:20240109.00.0@1:\": {\n          \"id\": \"installedPackage-GooGet - google-compute-engine-metadata-scripts:20240109.00.0@1:\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"windowsApplication\": {\n              \"displayName\": \"GooGet - google-compute-engine-metadata-scripts\",\n              \"displayVersion\": \"20240109.00.0@1\",\n              \"installDate\": {}\n            }\n          },\n          \"createTime\": \"2024-06-25T17:07:40.873453Z\"\n        },\n        \"installedPackage-PowerShell 7-x64:7.4.2.0:Microsoft Corporation\": {\n          \"id\": \"installedPackage-PowerShell 7-x64:7.4.2.0:Microsoft Corporation\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"windowsApplication\": {\n              \"displayName\": \"PowerShell 7-x64\",\n              \"displayVersion\": \"7.4.2.0\",\n              \"publisher\": \"Microsoft Corporation\",\n              \"installDate\": {\n                \"year\": 2024,\n                \"month\": 5,\n                \"day\": 14\n              },\n              \"helpLink\": \"https://github.com/PowerShell/PowerShell\"\n            }\n          },\n          \"createTime\": \"2024-06-25T17:07:40.873456Z\"\n        },\n        \"installedPackage-google-cloud-ops-agent:x86_64:2.47.0@1\": {\n          \"id\": \"installedPackage-google-cloud-ops-agent:x86_64:2.47.0@1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"googetPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.47.0@1\",\n              \"packageName\": \"google-cloud-ops-agent\"\n            }\n          },\n          \"createTime\": \"2024-06-25T17:07:40.873435Z\"\n        },\n        \"installedPackage-KB5037930\": {\n          \"id\": \"installedPackage-KB5037930\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"qfePackage\": {\n              \"caption\": \"http://support.microsoft.com/?kbid=5037930\",\n              \"description\": \"Update\",\n              \"hotFixId\": \"KB5037930\",\n              \"installTime\": \"2024-05-14T00:00:00Z\"\n            }\n          },\n          \"createTime\": \"2024-06-25T17:07:40.873447Z\"\n        },\n        \"installedPackage-PowerShell 7.4.2.0-x64:7.4.2.0:Microsoft Corporation\": {\n          \"id\": \"installedPackage-PowerShell 7.4.2.0-x64:7.4.2.0:Microsoft Corporation\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"windowsApplication\": {\n              \"displayName\": \"PowerShell 7.4.2.0-x64\",\n              \"displayVersion\": \"7.4.2.0\",\n              \"publisher\": \"Microsoft Corporation\",\n              \"installDate\": {}\n            }\n          },\n          \"createTime\": \"2024-06-25T17:07:40.873457Z\"\n        },\n        \"installedPackage-GooGet - google-compute-engine-driver-balloon:16.1.8@9:\": {\n          \"id\": \"installedPackage-GooGet - google-compute-engine-driver-balloon:16.1.8@9:\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"windowsApplication\": {\n              \"displayName\": \"GooGet - google-compute-engine-driver-balloon\",\n              \"displayVersion\": \"16.1.8@9\",\n              \"installDate\": {}\n            }\n          },\n          \"createTime\": \"2024-06-25T17:07:40.873450Z\"\n        },\n        \"installedPackage-GooGet - google-osconfig-agent:20240320.00.0+win@1:\": {\n          \"id\": \"installedPackage-GooGet - google-osconfig-agent:20240320.00.0+win@1:\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"windowsApplication\": {\n              \"displayName\": \"GooGet - google-osconfig-agent\",\n              \"displayVersion\": \"20240320.00.0+win@1\",\n              \"installDate\": {}\n            }\n          },\n          \"createTime\": \"2024-06-25T17:07:40.873455Z\"\n        },\n        \"installedPackage-googet:x86_64:2.18.5@0\": {\n          \"id\": \"installedPackage-googet:x86_64:2.18.5@0\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"googetPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.18.5@0\",\n              \"packageName\": \"googet\"\n            }\n          },\n          \"createTime\": \"2024-06-25T17:07:40.873434Z\"\n        },\n        \"installedPackage-google-compute-engine-driver-netkvm:x86_64:16.1.8@76\": {\n          \"id\": \"installedPackage-google-compute-engine-driver-netkvm:x86_64:16.1.8@76\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"googetPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"16.1.8@76\",\n              \"packageName\": \"google-compute-engine-driver-netkvm\"\n            }\n          },\n          \"createTime\": \"2024-06-25T17:07:40.873437Z\"\n        },\n        \"installedPackage-GooGet - google-compute-engine-driver-gvnic:1.0.4@73:\": {\n          \"id\": \"installedPackage-GooGet - google-compute-engine-driver-gvnic:1.0.4@73:\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"windowsApplication\": {\n              \"displayName\": \"GooGet - google-compute-engine-driver-gvnic\",\n              \"displayVersion\": \"1.0.4@73\",\n              \"installDate\": {}\n            }\n          },\n          \"createTime\": \"2024-06-25T17:07:40.873451Z\"\n        },\n        \"availablePackage-google-osconfig-agent:x86_64:20240524.03.0+win@1\": {\n          \"id\": \"availablePackage-google-osconfig-agent:x86_64:20240524.03.0+win@1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"AVAILABLE_PACKAGE\",\n          \"availablePackage\": {\n            \"googetPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"20240524.03.0+win@1\",\n              \"packageName\": \"google-osconfig-agent\"\n            }\n          },\n          \"createTime\": \"2024-06-25T17:07:40.873429Z\"\n        },\n        \"installedPackage-google-compute-engine-driver-gga:x86_64:1.1.6@9\": {\n          \"id\": \"installedPackage-google-compute-engine-driver-gga:x86_64:1.1.6@9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"googetPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.1.6@9\",\n              \"packageName\": \"google-compute-engine-driver-gga\"\n            }\n          },\n          \"createTime\": \"2024-06-25T17:07:40.873437Z\"\n        },\n        \"installedPackage-4fd0c6fe-1f2d-4b1f-a588-ef925d55aeed:1\": {\n          \"id\": \"installedPackage-4fd0c6fe-1f2d-4b1f-a588-ef925d55aeed:1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"wuaPackage\": {\n              \"title\": \"2024-06 Cumulative Update for Microsoft server operating system version 21H2 for x64-based Systems (KB5039227)\",\n              \"description\": \"Install this update to resolve issues in Microsoft server operating system, version 21H2. For a complete listing of the issues that are included in this update, see the associated Microsoft Knowledge Base article for more information. After you install this item, you may have to restart your computer.\",\n              \"categories\": [\n                {\n                  \"id\": \"0fa1201d-4330-4fa8-8ae9-b877473b6441\",\n                  \"name\": \"Security Updates\"\n                }\n              ],\n              \"kbArticleIds\": [\n                \"5039227\"\n              ],\n              \"moreInfoUrls\": [\n                \"https://support.microsoft.com/help/5039227\"\n              ],\n              \"updateId\": \"4fd0c6fe-1f2d-4b1f-a588-ef925d55aeed\",\n              \"revisionNumber\": 1,\n              \"lastDeploymentChangeTime\": \"2024-06-11T00:00:00Z\",\n              \"supportUrl\": \"https://support.microsoft.com/help/5039227\"\n            }\n          },\n          \"createTime\": \"2024-06-25T17:07:40.873445Z\"\n        },\n        \"installedPackage-Microsoft Edge:126.0.2592.68:Microsoft Corporation\": {\n          \"id\": \"installedPackage-Microsoft Edge:126.0.2592.68:Microsoft Corporation\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"windowsApplication\": {\n              \"displayName\": \"Microsoft Edge\",\n              \"displayVersion\": \"126.0.2592.68\",\n              \"publisher\": \"Microsoft Corporation\",\n              \"installDate\": {\n                \"year\": 2024,\n                \"month\": 6,\n                \"day\": 22\n              }\n            }\n          },\n          \"createTime\": \"2024-06-25T17:07:40.873457Z\"\n        },\n        \"installedPackage-google-compute-engine-vss:x86_64:1.1.9@56\": {\n          \"id\": \"installedPackage-google-compute-engine-vss:x86_64:1.1.9@56\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"googetPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.1.9@56\",\n              \"packageName\": \"google-compute-engine-vss\"\n            }\n          },\n          \"createTime\": \"2024-06-25T17:07:40.873441Z\"\n        },\n        \"installedPackage-GooGet - google-compute-engine-sysprep:20240122.00@1:\": {\n          \"id\": \"installedPackage-GooGet - google-compute-engine-sysprep:20240122.00@1:\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"windowsApplication\": {\n              \"displayName\": \"GooGet - google-compute-engine-sysprep\",\n              \"displayVersion\": \"20240122.00@1\",\n              \"installDate\": {}\n            }\n          },\n          \"createTime\": \"2024-06-25T17:07:40.873453Z\"\n        },\n        \"installedPackage-google-compute-engine-windows:x86_64:20240109.00.0@1\": {\n          \"id\": \"installedPackage-google-compute-engine-windows:x86_64:20240109.00.0@1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"googetPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"20240109.00.0@1\",\n              \"packageName\": \"google-compute-engine-windows\"\n            }\n          },\n          \"createTime\": \"2024-06-25T17:07:40.873442Z\"\n        },\n        \"installedPackage-google-compute-engine-driver-vioscsi:x86_64:16.1.8@9\": {\n          \"id\": \"installedPackage-google-compute-engine-driver-vioscsi:x86_64:16.1.8@9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"googetPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"16.1.8@9\",\n              \"packageName\": \"google-compute-engine-driver-vioscsi\"\n            }\n          },\n          \"createTime\": \"2024-06-25T17:07:40.873438Z\"\n        },\n        \"installedPackage-GooGet - google-compute-engine-driver-netkvm:16.1.8@76:\": {\n          \"id\": \"installedPackage-GooGet - google-compute-engine-driver-netkvm:16.1.8@76:\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"windowsApplication\": {\n              \"displayName\": \"GooGet - google-compute-engine-driver-netkvm\",\n              \"displayVersion\": \"16.1.8@76\",\n              \"installDate\": {}\n            }\n          },\n          \"createTime\": \"2024-06-25T17:07:40.873452Z\"\n        },\n        \"installedPackage-5c1cb396-fb49-4919-93ac-72d4db78836a:200\": {\n          \"id\": \"installedPackage-5c1cb396-fb49-4919-93ac-72d4db78836a:200\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"wuaPackage\": {\n              \"title\": \"Security Intelligence Update for Microsoft Defender Antivirus - KB2267602 (Version 1.413.505.0) - Current Channel (Broad)\",\n              \"description\": \"Install this update to revise the files that are used to detect viruses, spyware, and other potentially unwanted software. Once you have installed this item, it cannot be removed.\",\n              \"categories\": [\n                {\n                  \"id\": \"e0789628-ce08-4437-be74-2495b842f43b\",\n                  \"name\": \"Definition Updates\"\n                },\n                {\n                  \"id\": \"8c3fcc84-7410-4a95-8b89-a166a0190486\",\n                  \"name\": \"Microsoft Defender Antivirus\"\n                }\n              ],\n              \"kbArticleIds\": [\n                \"2267602\"\n              ],\n              \"moreInfoUrls\": [\n                \"https://go.microsoft.com/fwlink/?linkid=2007160\"\n              ],\n              \"updateId\": \"5c1cb396-fb49-4919-93ac-72d4db78836a\",\n              \"revisionNumber\": 200,\n              \"lastDeploymentChangeTime\": \"2024-06-25T00:00:00Z\",\n              \"supportUrl\": \"https://go.microsoft.com/fwlink/?LinkId=52661\"\n            }\n          },\n          \"createTime\": \"2024-06-25T17:07:40.873445Z\"\n        },\n        \"installedPackage-KB5034439\": {\n          \"id\": \"installedPackage-KB5034439\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"qfePackage\": {\n              \"caption\": \"https://support.microsoft.com/help/5034439\",\n              \"description\": \"Security Update\",\n              \"hotFixId\": \"KB5034439\",\n              \"installTime\": \"2024-05-14T00:00:00Z\"\n            }\n          },\n          \"createTime\": \"2024-06-25T17:07:40.873448Z\"\n        },\n        \"installedPackage-Google Cloud SDK::Google LLC\": {\n          \"id\": \"installedPackage-Google Cloud SDK::Google LLC\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"windowsApplication\": {\n              \"displayName\": \"Google Cloud SDK\",\n              \"publisher\": \"Google LLC\",\n              \"installDate\": {}\n            }\n          },\n          \"createTime\": \"2024-06-25T17:07:40.873456Z\"\n        },\n        \"installedPackage-google-compute-engine-diagnostics:x86_64:1.2.0@0\": {\n          \"id\": \"installedPackage-google-compute-engine-diagnostics:x86_64:1.2.0@0\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"googetPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.2.0@0\",\n              \"packageName\": \"google-compute-engine-diagnostics\"\n            }\n          },\n          \"createTime\": \"2024-06-25T17:07:40.873436Z\"\n        }\n      },\n      \"name\": \"projects/12340051/locations/us-central1-a/instances/730128809742038298/inventory\",\n      \"updateTime\": \"2024-06-25T17:07:40.888375Z\"\n    },\n    {\n      \"osInfo\": {\n        \"longName\": \"Red Hat Enterprise Linux Server 7.9 (Maipo)\",\n        \"shortName\": \"rhel\",\n        \"version\": \"7.9\",\n        \"architecture\": \"x86_64\",\n        \"kernelVersion\": \"#1 SMP Thu Apr 4 03:33:23 EDT 2024\",\n        \"kernelRelease\": \"3.10.0-1160.118.1.el7.x86_64\",\n        \"osconfigAgentVersion\": \"20240501.03-g1.el7\",\n        \"hostname\": \"rhel-7\"\n      },\n      \"items\": {\n        \"installedPackage-perl-Carp:all:1.26-244.el7\": {\n          \"id\": \"installedPackage-perl-Carp:all:1.26-244.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"1.26-244.el7\",\n              \"packageName\": \"perl-Carp\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943077Z\"\n        },\n        \"installedPackage-ustr:x86_64:1.0.4-16.el7\": {\n          \"id\": \"installedPackage-ustr:x86_64:1.0.4-16.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.0.4-16.el7\",\n              \"packageName\": \"ustr\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943209Z\"\n        },\n        \"installedPackage-kernel-tools:x86_64:3.10.0-1160.118.1.el7\": {\n          \"id\": \"installedPackage-kernel-tools:x86_64:3.10.0-1160.118.1.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.10.0-1160.118.1.el7\",\n              \"packageName\": \"kernel-tools\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943186Z\"\n        },\n        \"installedPackage-libnetfilter_conntrack:x86_64:1.0.6-1.el7_3\": {\n          \"id\": \"installedPackage-libnetfilter_conntrack:x86_64:1.0.6-1.el7_3\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.0.6-1.el7_3\",\n              \"packageName\": \"libnetfilter_conntrack\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943083Z\"\n        },\n        \"availablePackage-kernel:x86_64:3.10.0-1160.119.1.el7\": {\n          \"id\": \"availablePackage-kernel:x86_64:3.10.0-1160.119.1.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"AVAILABLE_PACKAGE\",\n          \"availablePackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.10.0-1160.119.1.el7\",\n              \"packageName\": \"kernel\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943043Z\"\n        },\n        \"installedPackage-polkit-pkla-compat:x86_64:0.1-4.el7\": {\n          \"id\": \"installedPackage-polkit-pkla-compat:x86_64:0.1-4.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.1-4.el7\",\n              \"packageName\": \"polkit-pkla-compat\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943165Z\"\n        },\n        \"installedPackage-libss:x86_64:1.42.9-19.el7\": {\n          \"id\": \"installedPackage-libss:x86_64:1.42.9-19.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.42.9-19.el7\",\n              \"packageName\": \"libss\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943206Z\"\n        },\n        \"installedPackage-glibc:x86_64:2.17-326.el7_9.3\": {\n          \"id\": \"installedPackage-glibc:x86_64:2.17-326.el7_9.3\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.17-326.el7_9.3\",\n              \"packageName\": \"glibc\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943164Z\"\n        },\n        \"availablePackage-google-cloud-ops-agent:x86_64:2.48.0-1.el7\": {\n          \"id\": \"availablePackage-google-cloud-ops-agent:x86_64:2.48.0-1.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"AVAILABLE_PACKAGE\",\n          \"availablePackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.48.0-1.el7\",\n              \"packageName\": \"google-cloud-ops-agent\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943050Z\"\n        },\n        \"installedPackage-elfutils-default-yama-scope:all:0.176-5.el7\": {\n          \"id\": \"installedPackage-elfutils-default-yama-scope:all:0.176-5.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"0.176-5.el7\",\n              \"packageName\": \"elfutils-default-yama-scope\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943105Z\"\n        },\n        \"installedPackage-libicu:x86_64:50.2-4.el7_7\": {\n          \"id\": \"installedPackage-libicu:x86_64:50.2-4.el7_7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"50.2-4.el7_7\",\n              \"packageName\": \"libicu\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943131Z\"\n        },\n        \"installedPackage-emacs-filesystem:all:1:24.3-23.el7_9.1\": {\n          \"id\": \"installedPackage-emacs-filesystem:all:1:24.3-23.el7_9.1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"1:24.3-23.el7_9.1\",\n              \"packageName\": \"emacs-filesystem\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943189Z\"\n        },\n        \"installedPackage-nss-pem:x86_64:1.0.3-7.el7_9.1\": {\n          \"id\": \"installedPackage-nss-pem:x86_64:1.0.3-7.el7_9.1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.0.3-7.el7_9.1\",\n              \"packageName\": \"nss-pem\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943148Z\"\n        },\n        \"installedPackage-teamd:x86_64:1.29-3.el7\": {\n          \"id\": \"installedPackage-teamd:x86_64:1.29-3.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.29-3.el7\",\n              \"packageName\": \"teamd\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943190Z\"\n        },\n        \"installedPackage-libselinux-python:x86_64:2.5-15.el7\": {\n          \"id\": \"installedPackage-libselinux-python:x86_64:2.5-15.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.5-15.el7\",\n              \"packageName\": \"libselinux-python\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943218Z\"\n        },\n        \"installedPackage-dosfstools:x86_64:3.0.20-10.el7\": {\n          \"id\": \"installedPackage-dosfstools:x86_64:3.0.20-10.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.0.20-10.el7\",\n              \"packageName\": \"dosfstools\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943075Z\"\n        },\n        \"installedPackage-iwl135-firmware:all:18.168.6.1-83.el7_9\": {\n          \"id\": \"installedPackage-iwl135-firmware:all:18.168.6.1-83.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"18.168.6.1-83.el7_9\",\n              \"packageName\": \"iwl135-firmware\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943228Z\"\n        },\n        \"installedPackage-json-c:x86_64:0.11-4.el7_0\": {\n          \"id\": \"installedPackage-json-c:x86_64:0.11-4.el7_0\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.11-4.el7_0\",\n              \"packageName\": \"json-c\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943101Z\"\n        },\n        \"installedPackage-iwl6000g2b-firmware:all:18.168.6.1-83.el7_9\": {\n          \"id\": \"installedPackage-iwl6000g2b-firmware:all:18.168.6.1-83.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"18.168.6.1-83.el7_9\",\n              \"packageName\": \"iwl6000g2b-firmware\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943106Z\"\n        },\n        \"installedPackage-perl-PathTools:x86_64:3.40-5.el7\": {\n          \"id\": \"installedPackage-perl-PathTools:x86_64:3.40-5.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.40-5.el7\",\n              \"packageName\": \"perl-PathTools\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943077Z\"\n        },\n        \"installedPackage-gmp:x86_64:1:6.0.0-15.el7\": {\n          \"id\": \"installedPackage-gmp:x86_64:1:6.0.0-15.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:6.0.0-15.el7\",\n              \"packageName\": \"gmp\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943207Z\"\n        },\n        \"installedPackage-grub2-efi-x64:x86_64:1:2.02-0.87.el7_9.14\": {\n          \"id\": \"installedPackage-grub2-efi-x64:x86_64:1:2.02-0.87.el7_9.14\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:2.02-0.87.el7_9.14\",\n              \"packageName\": \"grub2-efi-x64\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943099Z\"\n        },\n        \"installedPackage-gzip:x86_64:1.5-11.el7_9\": {\n          \"id\": \"installedPackage-gzip:x86_64:1.5-11.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.5-11.el7_9\",\n              \"packageName\": \"gzip\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943226Z\"\n        },\n        \"installedPackage-plymouth-scripts:x86_64:0.8.9-0.34.20140113.el7\": {\n          \"id\": \"installedPackage-plymouth-scripts:x86_64:0.8.9-0.34.20140113.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.8.9-0.34.20140113.el7\",\n              \"packageName\": \"plymouth-scripts\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943066Z\"\n        },\n        \"installedPackage-xfsprogs:x86_64:4.5.0-22.el7\": {\n          \"id\": \"installedPackage-xfsprogs:x86_64:4.5.0-22.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"4.5.0-22.el7\",\n              \"packageName\": \"xfsprogs\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943074Z\"\n        },\n        \"installedPackage-python-enum34:all:1.0.4-1.el7\": {\n          \"id\": \"installedPackage-python-enum34:all:1.0.4-1.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"1.0.4-1.el7\",\n              \"packageName\": \"python-enum34\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943211Z\"\n        },\n        \"installedPackage-qrencode-libs:x86_64:3.4.1-3.el7\": {\n          \"id\": \"installedPackage-qrencode-libs:x86_64:3.4.1-3.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.4.1-3.el7\",\n              \"packageName\": \"qrencode-libs\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943100Z\"\n        },\n        \"installedPackage-cronie:x86_64:1.4.11-25.el7_9\": {\n          \"id\": \"installedPackage-cronie:x86_64:1.4.11-25.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.4.11-25.el7_9\",\n              \"packageName\": \"cronie\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943181Z\"\n        },\n        \"installedPackage-grubby:x86_64:8.28-26.el7\": {\n          \"id\": \"installedPackage-grubby:x86_64:8.28-26.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"8.28-26.el7\",\n              \"packageName\": \"grubby\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943093Z\"\n        },\n        \"installedPackage-setup:all:2.8.71-11.el7\": {\n          \"id\": \"installedPackage-setup:all:2.8.71-11.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"2.8.71-11.el7\",\n              \"packageName\": \"setup\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943064Z\"\n        },\n        \"installedPackage-nspr:x86_64:4.35.0-1.el7_9\": {\n          \"id\": \"installedPackage-nspr:x86_64:4.35.0-1.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"4.35.0-1.el7_9\",\n              \"packageName\": \"nspr\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943084Z\"\n        },\n        \"installedPackage-postfix:x86_64:2:2.10.1-9.el7\": {\n          \"id\": \"installedPackage-postfix:x86_64:2:2.10.1-9.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2:2.10.1-9.el7\",\n              \"packageName\": \"postfix\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943070Z\"\n        },\n        \"installedPackage-perl-constant:all:1.27-2.el7\": {\n          \"id\": \"installedPackage-perl-constant:all:1.27-2.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"1.27-2.el7\",\n              \"packageName\": \"perl-constant\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943078Z\"\n        },\n        \"installedPackage-hardlink:x86_64:1:1.0-19.el7\": {\n          \"id\": \"installedPackage-hardlink:x86_64:1:1.0-19.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:1.0-19.el7\",\n              \"packageName\": \"hardlink\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943159Z\"\n        },\n        \"installedPackage-bzip2-libs:x86_64:1.0.6-13.el7\": {\n          \"id\": \"installedPackage-bzip2-libs:x86_64:1.0.6-13.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.0.6-13.el7\",\n              \"packageName\": \"bzip2-libs\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943192Z\"\n        },\n        \"installedPackage-libattr:x86_64:2.4.46-13.el7\": {\n          \"id\": \"installedPackage-libattr:x86_64:2.4.46-13.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.4.46-13.el7\",\n              \"packageName\": \"libattr\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943070Z\"\n        },\n        \"installedPackage-libcap-ng:x86_64:0.7.5-4.el7\": {\n          \"id\": \"installedPackage-libcap-ng:x86_64:0.7.5-4.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.7.5-4.el7\",\n              \"packageName\": \"libcap-ng\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943118Z\"\n        },\n        \"installedPackage-gpg-pubkey:(none):352c64e5-52ae6884\": {\n          \"id\": \"installedPackage-gpg-pubkey:(none):352c64e5-52ae6884\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"(none)\",\n              \"version\": \"352c64e5-52ae6884\",\n              \"packageName\": \"gpg-pubkey\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943128Z\"\n        },\n        \"installedPackage-pciutils-libs:x86_64:3.5.1-3.el7\": {\n          \"id\": \"installedPackage-pciutils-libs:x86_64:3.5.1-3.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.5.1-3.el7\",\n              \"packageName\": \"pciutils-libs\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943137Z\"\n        },\n        \"installedPackage-ca-certificates:all:2023.2.60_v7.0.306-72.el7_9\": {\n          \"id\": \"installedPackage-ca-certificates:all:2023.2.60_v7.0.306-72.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"2023.2.60_v7.0.306-72.el7_9\",\n              \"packageName\": \"ca-certificates\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943141Z\"\n        },\n        \"installedPackage-tzdata:all:2024a-1.el7\": {\n          \"id\": \"installedPackage-tzdata:all:2024a-1.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"2024a-1.el7\",\n              \"packageName\": \"tzdata\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943137Z\"\n        },\n        \"installedPackage-python-libs:x86_64:2.7.5-94.el7_9\": {\n          \"id\": \"installedPackage-python-libs:x86_64:2.7.5-94.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.7.5-94.el7_9\",\n              \"packageName\": \"python-libs\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943088Z\"\n        },\n        \"installedPackage-pam:x86_64:1.1.8-23.el7\": {\n          \"id\": \"installedPackage-pam:x86_64:1.1.8-23.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.1.8-23.el7\",\n              \"packageName\": \"pam\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943213Z\"\n        },\n        \"installedPackage-libgcrypt:x86_64:1.5.3-14.el7\": {\n          \"id\": \"installedPackage-libgcrypt:x86_64:1.5.3-14.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.5.3-14.el7\",\n              \"packageName\": \"libgcrypt\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943115Z\"\n        },\n        \"installedPackage-libutempter:x86_64:1.1.6-4.el7\": {\n          \"id\": \"installedPackage-libutempter:x86_64:1.1.6-4.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.1.6-4.el7\",\n              \"packageName\": \"libutempter\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943154Z\"\n        },\n        \"installedPackage-libstdc++:x86_64:4.8.5-44.el7\": {\n          \"id\": \"installedPackage-libstdc++:x86_64:4.8.5-44.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"4.8.5-44.el7\",\n              \"packageName\": \"libstdc++\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943067Z\"\n        },\n        \"installedPackage-iptables:x86_64:1.4.21-35.el7\": {\n          \"id\": \"installedPackage-iptables:x86_64:1.4.21-35.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.4.21-35.el7\",\n              \"packageName\": \"iptables\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943138Z\"\n        },\n        \"installedPackage-perl-Time-HiRes:x86_64:4:1.9725-3.el7\": {\n          \"id\": \"installedPackage-perl-Time-HiRes:x86_64:4:1.9725-3.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"4:1.9725-3.el7\",\n              \"packageName\": \"perl-Time-HiRes\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943124Z\"\n        },\n        \"installedPackage-glibc-common:x86_64:2.17-326.el7_9.3\": {\n          \"id\": \"installedPackage-glibc-common:x86_64:2.17-326.el7_9.3\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.17-326.el7_9.3\",\n              \"packageName\": \"glibc-common\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943227Z\"\n        },\n        \"installedPackage-fxload:x86_64:2002_04_11-16.el7\": {\n          \"id\": \"installedPackage-fxload:x86_64:2002_04_11-16.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2002_04_11-16.el7\",\n              \"packageName\": \"fxload\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943108Z\"\n        },\n        \"installedPackage-perl-Time-Local:all:1.2300-2.el7\": {\n          \"id\": \"installedPackage-perl-Time-Local:all:1.2300-2.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"1.2300-2.el7\",\n              \"packageName\": \"perl-Time-Local\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943128Z\"\n        },\n        \"installedPackage-parted:x86_64:3.1-32.el7\": {\n          \"id\": \"installedPackage-parted:x86_64:3.1-32.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.1-32.el7\",\n              \"packageName\": \"parted\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943118Z\"\n        },\n        \"installedPackage-libselinux:x86_64:2.5-15.el7\": {\n          \"id\": \"installedPackage-libselinux:x86_64:2.5-15.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.5-15.el7\",\n              \"packageName\": \"libselinux\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943112Z\"\n        },\n        \"installedPackage-popt:x86_64:1.13-16.el7\": {\n          \"id\": \"installedPackage-popt:x86_64:1.13-16.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.13-16.el7\",\n              \"packageName\": \"popt\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943192Z\"\n        },\n        \"installedPackage-efibootmgr:x86_64:17-2.el7\": {\n          \"id\": \"installedPackage-efibootmgr:x86_64:17-2.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"17-2.el7\",\n              \"packageName\": \"efibootmgr\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943197Z\"\n        },\n        \"installedPackage-libsysfs:x86_64:2.1.0-16.el7\": {\n          \"id\": \"installedPackage-libsysfs:x86_64:2.1.0-16.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.1.0-16.el7\",\n              \"packageName\": \"libsysfs\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943123Z\"\n        },\n        \"installedPackage-cyrus-sasl-lib:x86_64:2.1.26-24.el7_9\": {\n          \"id\": \"installedPackage-cyrus-sasl-lib:x86_64:2.1.26-24.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.1.26-24.el7_9\",\n              \"packageName\": \"cyrus-sasl-lib\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943091Z\"\n        },\n        \"installedPackage-iwl3160-firmware:all:25.30.13.0-83.el7_9\": {\n          \"id\": \"installedPackage-iwl3160-firmware:all:25.30.13.0-83.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"25.30.13.0-83.el7_9\",\n              \"packageName\": \"iwl3160-firmware\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943168Z\"\n        },\n        \"installedPackage-libestr:x86_64:0.1.9-2.el7\": {\n          \"id\": \"installedPackage-libestr:x86_64:0.1.9-2.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.1.9-2.el7\",\n              \"packageName\": \"libestr\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943160Z\"\n        },\n        \"installedPackage-gpg-pubkey:(none):db42a60e-37ea5438\": {\n          \"id\": \"installedPackage-gpg-pubkey:(none):db42a60e-37ea5438\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"(none)\",\n              \"version\": \"db42a60e-37ea5438\",\n              \"packageName\": \"gpg-pubkey\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943199Z\"\n        },\n        \"installedPackage-grub2-tools:x86_64:1:2.02-0.87.el7_9.14\": {\n          \"id\": \"installedPackage-grub2-tools:x86_64:1:2.02-0.87.el7_9.14\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:2.02-0.87.el7_9.14\",\n              \"packageName\": \"grub2-tools\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943180Z\"\n        },\n        \"installedPackage-google-cloud-ops-agent:x86_64:2.47.0-1.el7\": {\n          \"id\": \"installedPackage-google-cloud-ops-agent:x86_64:2.47.0-1.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.47.0-1.el7\",\n              \"packageName\": \"google-cloud-ops-agent\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943103Z\"\n        },\n        \"installedPackage-grep:x86_64:2.20-3.el7\": {\n          \"id\": \"installedPackage-grep:x86_64:2.20-3.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.20-3.el7\",\n              \"packageName\": \"grep\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943114Z\"\n        },\n        \"installedPackage-plymouth-core-libs:x86_64:0.8.9-0.34.20140113.el7\": {\n          \"id\": \"installedPackage-plymouth-core-libs:x86_64:0.8.9-0.34.20140113.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.8.9-0.34.20140113.el7\",\n              \"packageName\": \"plymouth-core-libs\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943110Z\"\n        },\n        \"installedPackage-yum-cron:all:3.4.3-168.el7\": {\n          \"id\": \"installedPackage-yum-cron:all:3.4.3-168.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"3.4.3-168.el7\",\n              \"packageName\": \"yum-cron\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943163Z\"\n        },\n        \"installedPackage-gpg-pubkey:(none):fd431d51-4ae0493b\": {\n          \"id\": \"installedPackage-gpg-pubkey:(none):fd431d51-4ae0493b\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"(none)\",\n              \"version\": \"fd431d51-4ae0493b\",\n              \"packageName\": \"gpg-pubkey\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943130Z\"\n        },\n        \"installedPackage-libseccomp:x86_64:2.3.1-4.el7\": {\n          \"id\": \"installedPackage-libseccomp:x86_64:2.3.1-4.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.3.1-4.el7\",\n              \"packageName\": \"libseccomp\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943161Z\"\n        },\n        \"installedPackage-iputils:x86_64:20160308-10.el7\": {\n          \"id\": \"installedPackage-iputils:x86_64:20160308-10.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"20160308-10.el7\",\n              \"packageName\": \"iputils\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943167Z\"\n        },\n        \"installedPackage-grub2-common:all:1:2.02-0.87.el7_9.14\": {\n          \"id\": \"installedPackage-grub2-common:all:1:2.02-0.87.el7_9.14\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"1:2.02-0.87.el7_9.14\",\n              \"packageName\": \"grub2-common\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943135Z\"\n        },\n        \"installedPackage-pinentry:x86_64:0.8.1-17.el7\": {\n          \"id\": \"installedPackage-pinentry:x86_64:0.8.1-17.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.8.1-17.el7\",\n              \"packageName\": \"pinentry\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943142Z\"\n        },\n        \"installedPackage-libxslt:x86_64:1.1.28-6.el7\": {\n          \"id\": \"installedPackage-libxslt:x86_64:1.1.28-6.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.1.28-6.el7\",\n              \"packageName\": \"libxslt\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943205Z\"\n        },\n        \"installedPackage-pyxattr:x86_64:0.5.1-5.el7\": {\n          \"id\": \"installedPackage-pyxattr:x86_64:0.5.1-5.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.5.1-5.el7\",\n              \"packageName\": \"pyxattr\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943095Z\"\n        },\n        \"installedPackage-kmod:x86_64:20-28.el7\": {\n          \"id\": \"installedPackage-kmod:x86_64:20-28.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"20-28.el7\",\n              \"packageName\": \"kmod\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943102Z\"\n        },\n        \"installedPackage-libpciaccess:x86_64:0.14-1.el7\": {\n          \"id\": \"installedPackage-libpciaccess:x86_64:0.14-1.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.14-1.el7\",\n              \"packageName\": \"libpciaccess\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943190Z\"\n        },\n        \"installedPackage-nss-util:x86_64:3.90.0-1.el7_9\": {\n          \"id\": \"installedPackage-nss-util:x86_64:3.90.0-1.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.90.0-1.el7_9\",\n              \"packageName\": \"nss-util\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943138Z\"\n        },\n        \"installedPackage-perl-libs:x86_64:4:5.16.3-299.el7_9\": {\n          \"id\": \"installedPackage-perl-libs:x86_64:4:5.16.3-299.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"4:5.16.3-299.el7_9\",\n              \"packageName\": \"perl-libs\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943140Z\"\n        },\n        \"installedPackage-readline:x86_64:6.2-11.el7\": {\n          \"id\": \"installedPackage-readline:x86_64:6.2-11.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"6.2-11.el7\",\n              \"packageName\": \"readline\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943068Z\"\n        },\n        \"installedPackage-python-pycparser:all:2.14-1.el7\": {\n          \"id\": \"installedPackage-python-pycparser:all:2.14-1.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"2.14-1.el7\",\n              \"packageName\": \"python-pycparser\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943173Z\"\n        },\n        \"installedPackage-grub2-tools-extra:x86_64:1:2.02-0.87.el7_9.14\": {\n          \"id\": \"installedPackage-grub2-tools-extra:x86_64:1:2.02-0.87.el7_9.14\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:2.02-0.87.el7_9.14\",\n              \"packageName\": \"grub2-tools-extra\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943220Z\"\n        },\n        \"installedPackage-libgcc:x86_64:4.8.5-44.el7\": {\n          \"id\": \"installedPackage-libgcc:x86_64:4.8.5-44.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"4.8.5-44.el7\",\n              \"packageName\": \"libgcc\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943107Z\"\n        },\n        \"installedPackage-python-gobject-base:x86_64:3.22.0-1.el7_4.1\": {\n          \"id\": \"installedPackage-python-gobject-base:x86_64:3.22.0-1.el7_4.1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.22.0-1.el7_4.1\",\n              \"packageName\": \"python-gobject-base\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943153Z\"\n        },\n        \"installedPackage-elfutils-libs:x86_64:0.176-5.el7\": {\n          \"id\": \"installedPackage-elfutils-libs:x86_64:0.176-5.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.176-5.el7\",\n              \"packageName\": \"elfutils-libs\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943163Z\"\n        },\n        \"installedPackage-python-idna:all:2.4-1.el7\": {\n          \"id\": \"installedPackage-python-idna:all:2.4-1.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"2.4-1.el7\",\n              \"packageName\": \"python-idna\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943172Z\"\n        },\n        \"installedPackage-kbd:x86_64:1.15.5-16.el7_9\": {\n          \"id\": \"installedPackage-kbd:x86_64:1.15.5-16.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.15.5-16.el7_9\",\n              \"packageName\": \"kbd\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943185Z\"\n        },\n        \"installedPackage-firewalld-filesystem:all:0.6.3-13.el7_9\": {\n          \"id\": \"installedPackage-firewalld-filesystem:all:0.6.3-13.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"0.6.3-13.el7_9\",\n              \"packageName\": \"firewalld-filesystem\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943183Z\"\n        },\n        \"installedPackage-libxml2:x86_64:2.9.1-6.el7_9.6\": {\n          \"id\": \"installedPackage-libxml2:x86_64:2.9.1-6.el7_9.6\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.9.1-6.el7_9.6\",\n              \"packageName\": \"libxml2\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943087Z\"\n        },\n        \"installedPackage-systemd-libs:x86_64:219-78.el7_9.9\": {\n          \"id\": \"installedPackage-systemd-libs:x86_64:219-78.el7_9.9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"219-78.el7_9.9\",\n              \"packageName\": \"systemd-libs\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943085Z\"\n        },\n        \"installedPackage-perl-Pod-Escapes:all:1:1.04-299.el7_9\": {\n          \"id\": \"installedPackage-perl-Pod-Escapes:all:1:1.04-299.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"1:1.04-299.el7_9\",\n              \"packageName\": \"perl-Pod-Escapes\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943187Z\"\n        },\n        \"installedPackage-yum:all:3.4.3-168.el7\": {\n          \"id\": \"installedPackage-yum:all:3.4.3-168.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"3.4.3-168.el7\",\n              \"packageName\": \"yum\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943195Z\"\n        },\n        \"installedPackage-cracklib:x86_64:2.9.0-11.el7\": {\n          \"id\": \"installedPackage-cracklib:x86_64:2.9.0-11.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.9.0-11.el7\",\n              \"packageName\": \"cracklib\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943151Z\"\n        },\n        \"installedPackage-python-urllib3:all:1.10.2-7.el7\": {\n          \"id\": \"installedPackage-python-urllib3:all:1.10.2-7.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"1.10.2-7.el7\",\n              \"packageName\": \"python-urllib3\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943090Z\"\n        },\n        \"installedPackage-perl-Scalar-List-Utils:x86_64:1.27-248.el7\": {\n          \"id\": \"installedPackage-perl-Scalar-List-Utils:x86_64:1.27-248.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.27-248.el7\",\n              \"packageName\": \"perl-Scalar-List-Utils\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943076Z\"\n        },\n        \"installedPackage-acl:x86_64:2.2.51-15.el7\": {\n          \"id\": \"installedPackage-acl:x86_64:2.2.51-15.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.2.51-15.el7\",\n              \"packageName\": \"acl\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943139Z\"\n        },\n        \"installedPackage-libcom_err:x86_64:1.42.9-19.el7\": {\n          \"id\": \"installedPackage-libcom_err:x86_64:1.42.9-19.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.42.9-19.el7\",\n              \"packageName\": \"libcom_err\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943113Z\"\n        },\n        \"installedPackage-chrony:x86_64:3.4-1.el7\": {\n          \"id\": \"installedPackage-chrony:x86_64:3.4-1.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.4-1.el7\",\n              \"packageName\": \"chrony\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943117Z\"\n        },\n        \"installedPackage-grub2-pc-modules:all:1:2.02-0.87.el7_9.14\": {\n          \"id\": \"installedPackage-grub2-pc-modules:all:1:2.02-0.87.el7_9.14\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"1:2.02-0.87.el7_9.14\",\n              \"packageName\": \"grub2-pc-modules\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943135Z\"\n        },\n        \"installedPackage-python-ipaddr:all:2.1.11-2.el7\": {\n          \"id\": \"installedPackage-python-ipaddr:all:2.1.11-2.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"2.1.11-2.el7\",\n              \"packageName\": \"python-ipaddr\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943155Z\"\n        },\n        \"installedPackage-dbus-python:x86_64:1.1.1-9.el7\": {\n          \"id\": \"installedPackage-dbus-python:x86_64:1.1.1-9.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.1.1-9.el7\",\n              \"packageName\": \"dbus-python\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943065Z\"\n        },\n        \"installedPackage-perl:x86_64:4:5.16.3-299.el7_9\": {\n          \"id\": \"installedPackage-perl:x86_64:4:5.16.3-299.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"4:5.16.3-299.el7_9\",\n              \"packageName\": \"perl\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943085Z\"\n        },\n        \"installedPackage-perl-Pod-Simple:all:1:3.28-4.el7\": {\n          \"id\": \"installedPackage-perl-Pod-Simple:all:1:3.28-4.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"1:3.28-4.el7\",\n              \"packageName\": \"perl-Pod-Simple\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943199Z\"\n        },\n        \"installedPackage-virt-what:x86_64:1.18-4.el7_9.1\": {\n          \"id\": \"installedPackage-virt-what:x86_64:1.18-4.el7_9.1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.18-4.el7_9.1\",\n              \"packageName\": \"virt-what\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943217Z\"\n        },\n        \"installedPackage-rpm:x86_64:4.11.3-48.el7_9\": {\n          \"id\": \"installedPackage-rpm:x86_64:4.11.3-48.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"4.11.3-48.el7_9\",\n              \"packageName\": \"rpm\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943214Z\"\n        },\n        \"installedPackage-python-lxml:x86_64:3.2.1-4.el7\": {\n          \"id\": \"installedPackage-python-lxml:x86_64:3.2.1-4.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.2.1-4.el7\",\n              \"packageName\": \"python-lxml\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943092Z\"\n        },\n        \"availablePackage-python-perf:x86_64:3.10.0-1160.119.1.el7\": {\n          \"id\": \"availablePackage-python-perf:x86_64:3.10.0-1160.119.1.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"AVAILABLE_PACKAGE\",\n          \"availablePackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.10.0-1160.119.1.el7\",\n              \"packageName\": \"python-perf\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943059Z\"\n        },\n        \"installedPackage-openssl-libs:x86_64:1:1.0.2k-26.el7_9\": {\n          \"id\": \"installedPackage-openssl-libs:x86_64:1:1.0.2k-26.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:1.0.2k-26.el7_9\",\n              \"packageName\": \"openssl-libs\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943205Z\"\n        },\n        \"installedPackage-libuser:x86_64:0.60-9.el7\": {\n          \"id\": \"installedPackage-libuser:x86_64:0.60-9.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.60-9.el7\",\n              \"packageName\": \"libuser\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943158Z\"\n        },\n        \"installedPackage-openldap:x86_64:2.4.44-25.el7_9\": {\n          \"id\": \"installedPackage-openldap:x86_64:2.4.44-25.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.4.44-25.el7_9\",\n              \"packageName\": \"openldap\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943175Z\"\n        },\n        \"installedPackage-epel-release:all:7-14\": {\n          \"id\": \"installedPackage-epel-release:all:7-14\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"7-14\",\n              \"packageName\": \"epel-release\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943198Z\"\n        },\n        \"installedPackage-perl-threads:x86_64:1.87-4.el7\": {\n          \"id\": \"installedPackage-perl-threads:x86_64:1.87-4.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.87-4.el7\",\n              \"packageName\": \"perl-threads\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943125Z\"\n        },\n        \"installedPackage-python-backports:x86_64:1.0-8.el7\": {\n          \"id\": \"installedPackage-python-backports:x86_64:1.0-8.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.0-8.el7\",\n              \"packageName\": \"python-backports\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943210Z\"\n        },\n        \"installedPackage-NetworkManager-tui:x86_64:1:1.18.8-2.el7_9\": {\n          \"id\": \"installedPackage-NetworkManager-tui:x86_64:1:1.18.8-2.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:1.18.8-2.el7_9\",\n              \"packageName\": \"NetworkManager-tui\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943184Z\"\n        },\n        \"installedPackage-pkgconfig:x86_64:1:0.27.1-4.el7\": {\n          \"id\": \"installedPackage-pkgconfig:x86_64:1:0.27.1-4.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:0.27.1-4.el7\",\n              \"packageName\": \"pkgconfig\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943153Z\"\n        },\n        \"installedPackage-python-six:all:1.9.0-2.el7\": {\n          \"id\": \"installedPackage-python-six:all:1.9.0-2.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"1.9.0-2.el7\",\n              \"packageName\": \"python-six\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943170Z\"\n        },\n        \"installedPackage-python2-futures:all:3.1.1-5.el7\": {\n          \"id\": \"installedPackage-python2-futures:all:3.1.1-5.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"3.1.1-5.el7\",\n              \"packageName\": \"python2-futures\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943089Z\"\n        },\n        \"installedPackage-libgomp:x86_64:4.8.5-44.el7\": {\n          \"id\": \"installedPackage-libgomp:x86_64:4.8.5-44.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"4.8.5-44.el7\",\n              \"packageName\": \"libgomp\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943133Z\"\n        },\n        \"installedPackage-rpm-libs:x86_64:4.11.3-48.el7_9\": {\n          \"id\": \"installedPackage-rpm-libs:x86_64:4.11.3-48.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"4.11.3-48.el7_9\",\n              \"packageName\": \"rpm-libs\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943175Z\"\n        },\n        \"installedPackage-device-mapper:x86_64:7:1.02.170-6.el7_9.5\": {\n          \"id\": \"installedPackage-device-mapper:x86_64:7:1.02.170-6.el7_9.5\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"7:1.02.170-6.el7_9.5\",\n              \"packageName\": \"device-mapper\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943180Z\"\n        },\n        \"installedPackage-findutils:x86_64:1:4.5.11-6.el7\": {\n          \"id\": \"installedPackage-findutils:x86_64:1:4.5.11-6.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:4.5.11-6.el7\",\n              \"packageName\": \"findutils\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943120Z\"\n        },\n        \"installedPackage-python-schedutils:x86_64:0.4-6.el7\": {\n          \"id\": \"installedPackage-python-schedutils:x86_64:0.4-6.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.4-6.el7\",\n              \"packageName\": \"python-schedutils\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943156Z\"\n        },\n        \"installedPackage-google-compute-engine-oslogin:x86_64:1:20240415.00-g1.el7\": {\n          \"id\": \"installedPackage-google-compute-engine-oslogin:x86_64:1:20240415.00-g1.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:20240415.00-g1.el7\",\n              \"packageName\": \"google-compute-engine-oslogin\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943200Z\"\n        },\n        \"installedPackage-shim-x64:x86_64:15.8-1.el7\": {\n          \"id\": \"installedPackage-shim-x64:x86_64:15.8-1.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"15.8-1.el7\",\n              \"packageName\": \"shim-x64\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943187Z\"\n        },\n        \"installedPackage-libunistring:x86_64:0.9.3-9.el7\": {\n          \"id\": \"installedPackage-libunistring:x86_64:0.9.3-9.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.9.3-9.el7\",\n              \"packageName\": \"libunistring\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943133Z\"\n        },\n        \"installedPackage-p11-kit-trust:x86_64:0.23.5-3.el7\": {\n          \"id\": \"installedPackage-p11-kit-trust:x86_64:0.23.5-3.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.23.5-3.el7\",\n              \"packageName\": \"p11-kit-trust\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943150Z\"\n        },\n        \"installedPackage-perl-macros:x86_64:4:5.16.3-299.el7_9\": {\n          \"id\": \"installedPackage-perl-macros:x86_64:4:5.16.3-299.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"4:5.16.3-299.el7_9\",\n              \"packageName\": \"perl-macros\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943204Z\"\n        },\n        \"installedPackage-hwdata:x86_64:0.252-9.7.el7\": {\n          \"id\": \"installedPackage-hwdata:x86_64:0.252-9.7.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.252-9.7.el7\",\n              \"packageName\": \"hwdata\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943166Z\"\n        },\n        \"installedPackage-alsa-firmware:all:1.0.28-2.el7\": {\n          \"id\": \"installedPackage-alsa-firmware:all:1.0.28-2.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"1.0.28-2.el7\",\n              \"packageName\": \"alsa-firmware\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943065Z\"\n        },\n        \"installedPackage-alsa-tools-firmware:x86_64:1.1.0-1.el7\": {\n          \"id\": \"installedPackage-alsa-tools-firmware:x86_64:1.1.0-1.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.1.0-1.el7\",\n              \"packageName\": \"alsa-tools-firmware\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943109Z\"\n        },\n        \"installedPackage-curl:x86_64:7.29.0-59.el7_9.2\": {\n          \"id\": \"installedPackage-curl:x86_64:7.29.0-59.el7_9.2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"7.29.0-59.el7_9.2\",\n              \"packageName\": \"curl\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943092Z\"\n        },\n        \"installedPackage-fipscheck:x86_64:1.4.1-6.el7\": {\n          \"id\": \"installedPackage-fipscheck:x86_64:1.4.1-6.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.4.1-6.el7\",\n              \"packageName\": \"fipscheck\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943159Z\"\n        },\n        \"installedPackage-libidn:x86_64:1.28-4.el7\": {\n          \"id\": \"installedPackage-libidn:x86_64:1.28-4.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.28-4.el7\",\n              \"packageName\": \"libidn\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943080Z\"\n        },\n        \"installedPackage-gpg-pubkey:(none):897da07a-3c979a7f\": {\n          \"id\": \"installedPackage-gpg-pubkey:(none):897da07a-3c979a7f\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"(none)\",\n              \"version\": \"897da07a-3c979a7f\",\n              \"packageName\": \"gpg-pubkey\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943129Z\"\n        },\n        \"installedPackage-python-pycurl:x86_64:7.19.0-19.el7\": {\n          \"id\": \"installedPackage-python-pycurl:x86_64:7.19.0-19.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"7.19.0-19.el7\",\n              \"packageName\": \"python-pycurl\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943098Z\"\n        },\n        \"installedPackage-python-linux-procfs:all:0.4.11-4.el7\": {\n          \"id\": \"installedPackage-python-linux-procfs:all:0.4.11-4.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"0.4.11-4.el7\",\n              \"packageName\": \"python-linux-procfs\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943157Z\"\n        },\n        \"installedPackage-binutils:x86_64:2.27-44.base.el7_9.1\": {\n          \"id\": \"installedPackage-binutils:x86_64:2.27-44.base.el7_9.1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.27-44.base.el7_9.1\",\n              \"packageName\": \"binutils\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943187Z\"\n        },\n        \"installedPackage-gpg-pubkey:(none):dc6315a3-6091b7b3\": {\n          \"id\": \"installedPackage-gpg-pubkey:(none):dc6315a3-6091b7b3\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"(none)\",\n              \"version\": \"dc6315a3-6091b7b3\",\n              \"packageName\": \"gpg-pubkey\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943126Z\"\n        },\n        \"installedPackage-nss-tools:x86_64:3.90.0-2.el7_9\": {\n          \"id\": \"installedPackage-nss-tools:x86_64:3.90.0-2.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.90.0-2.el7_9\",\n              \"packageName\": \"nss-tools\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943091Z\"\n        },\n        \"installedPackage-google-cloud-cli:x86_64:474.0.0-1\": {\n          \"id\": \"installedPackage-google-cloud-cli:x86_64:474.0.0-1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"474.0.0-1\",\n              \"packageName\": \"google-cloud-cli\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943080Z\"\n        },\n        \"installedPackage-xdg-utils:all:1.1.0-0.17.20120809git.el7\": {\n          \"id\": \"installedPackage-xdg-utils:all:1.1.0-0.17.20120809git.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"1.1.0-0.17.20120809git.el7\",\n              \"packageName\": \"xdg-utils\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943154Z\"\n        },\n        \"installedPackage-perl-Pod-Usage:all:1.63-3.el7\": {\n          \"id\": \"installedPackage-perl-Pod-Usage:all:1.63-3.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"1.63-3.el7\",\n              \"packageName\": \"perl-Pod-Usage\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943124Z\"\n        },\n        \"installedPackage-crontabs:all:1.11-6.20121102git.el7\": {\n          \"id\": \"installedPackage-crontabs:all:1.11-6.20121102git.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"1.11-6.20121102git.el7\",\n              \"packageName\": \"crontabs\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943169Z\"\n        },\n        \"installedPackage-kbd-misc:all:1.15.5-16.el7_9\": {\n          \"id\": \"installedPackage-kbd-misc:all:1.15.5-16.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"1.15.5-16.el7_9\",\n              \"packageName\": \"kbd-misc\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943081Z\"\n        },\n        \"installedPackage-dhclient:x86_64:12:4.2.5-83.el7_9.2\": {\n          \"id\": \"installedPackage-dhclient:x86_64:12:4.2.5-83.el7_9.2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"12:4.2.5-83.el7_9.2\",\n              \"packageName\": \"dhclient\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943167Z\"\n        },\n        \"installedPackage-vim-common:x86_64:2:7.4.629-8.el7_9\": {\n          \"id\": \"installedPackage-vim-common:x86_64:2:7.4.629-8.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2:7.4.629-8.el7_9\",\n              \"packageName\": \"vim-common\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943095Z\"\n        },\n        \"installedPackage-libblkid:x86_64:2.23.2-65.el7_9.1\": {\n          \"id\": \"installedPackage-libblkid:x86_64:2.23.2-65.el7_9.1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.23.2-65.el7_9.1\",\n              \"packageName\": \"libblkid\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943143Z\"\n        },\n        \"installedPackage-gpg-pubkey:(none):37017186-45761324\": {\n          \"id\": \"installedPackage-gpg-pubkey:(none):37017186-45761324\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"(none)\",\n              \"version\": \"37017186-45761324\",\n              \"packageName\": \"gpg-pubkey\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943129Z\"\n        },\n        \"installedPackage-libselinux-utils:x86_64:2.5-15.el7\": {\n          \"id\": \"installedPackage-libselinux-utils:x86_64:2.5-15.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.5-15.el7\",\n              \"packageName\": \"libselinux-utils\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943207Z\"\n        },\n        \"installedPackage-redhat-release-eula:all:7.8-0.el7\": {\n          \"id\": \"installedPackage-redhat-release-eula:all:7.8-0.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"7.8-0.el7\",\n              \"packageName\": \"redhat-release-eula\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943076Z\"\n        },\n        \"installedPackage-libnl3:x86_64:3.2.28-4.el7\": {\n          \"id\": \"installedPackage-libnl3:x86_64:3.2.28-4.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.2.28-4.el7\",\n              \"packageName\": \"libnl3\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943120Z\"\n        },\n        \"installedPackage-file:x86_64:5.11-37.el7\": {\n          \"id\": \"installedPackage-file:x86_64:5.11-37.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"5.11-37.el7\",\n              \"packageName\": \"file\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943121Z\"\n        },\n        \"installedPackage-libssh2:x86_64:1.8.0-4.el7_9.1\": {\n          \"id\": \"installedPackage-libssh2:x86_64:1.8.0-4.el7_9.1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.8.0-4.el7_9.1\",\n              \"packageName\": \"libssh2\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943213Z\"\n        },\n        \"installedPackage-bash:x86_64:4.2.46-35.el7_9\": {\n          \"id\": \"installedPackage-bash:x86_64:4.2.46-35.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"4.2.46-35.el7_9\",\n              \"packageName\": \"bash\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943082Z\"\n        },\n        \"installedPackage-libpng:x86_64:2:1.5.13-8.el7\": {\n          \"id\": \"installedPackage-libpng:x86_64:2:1.5.13-8.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2:1.5.13-8.el7\",\n              \"packageName\": \"libpng\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943087Z\"\n        },\n        \"installedPackage-net-tools:x86_64:2.0-0.25.20131004git.el7\": {\n          \"id\": \"installedPackage-net-tools:x86_64:2.0-0.25.20131004git.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.0-0.25.20131004git.el7\",\n              \"packageName\": \"net-tools\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943193Z\"\n        },\n        \"installedPackage-redhat-support-tool:all:0.14.0-1.el7_9\": {\n          \"id\": \"installedPackage-redhat-support-tool:all:0.14.0-1.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"0.14.0-1.el7_9\",\n              \"packageName\": \"redhat-support-tool\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943098Z\"\n        },\n        \"installedPackage-NetworkManager:x86_64:1:1.18.8-2.el7_9\": {\n          \"id\": \"installedPackage-NetworkManager:x86_64:1:1.18.8-2.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:1.18.8-2.el7_9\",\n              \"packageName\": \"NetworkManager\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943097Z\"\n        },\n        \"installedPackage-groff-base:x86_64:1.22.2-8.el7\": {\n          \"id\": \"installedPackage-groff-base:x86_64:1.22.2-8.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.22.2-8.el7\",\n              \"packageName\": \"groff-base\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943121Z\"\n        },\n        \"installedPackage-perl-threads-shared:x86_64:1.43-6.el7\": {\n          \"id\": \"installedPackage-perl-threads-shared:x86_64:1.43-6.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.43-6.el7\",\n              \"packageName\": \"perl-threads-shared\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943197Z\"\n        },\n        \"availablePackage-kernel-tools:x86_64:3.10.0-1160.119.1.el7\": {\n          \"id\": \"availablePackage-kernel-tools:x86_64:3.10.0-1160.119.1.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"AVAILABLE_PACKAGE\",\n          \"availablePackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.10.0-1160.119.1.el7\",\n              \"packageName\": \"kernel-tools\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943056Z\"\n        },\n        \"installedPackage-libtasn1:x86_64:4.10-1.el7\": {\n          \"id\": \"installedPackage-libtasn1:x86_64:4.10-1.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"4.10-1.el7\",\n              \"packageName\": \"libtasn1\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943089Z\"\n        },\n        \"installedPackage-pyliblzma:x86_64:0.5.3-11.el7\": {\n          \"id\": \"installedPackage-pyliblzma:x86_64:0.5.3-11.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.5.3-11.el7\",\n              \"packageName\": \"pyliblzma\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943156Z\"\n        },\n        \"installedPackage-python2-cryptography:x86_64:1.7.2-2.el7\": {\n          \"id\": \"installedPackage-python2-cryptography:x86_64:1.7.2-2.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.7.2-2.el7\",\n              \"packageName\": \"python2-cryptography\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943178Z\"\n        },\n        \"installedPackage-nvme-cli:x86_64:1.8.1-3.el7\": {\n          \"id\": \"installedPackage-nvme-cli:x86_64:1.8.1-3.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.8.1-3.el7\",\n              \"packageName\": \"nvme-cli\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943080Z\"\n        },\n        \"installedPackage-perl-Pod-Perldoc:all:3.20-4.el7\": {\n          \"id\": \"installedPackage-perl-Pod-Perldoc:all:3.20-4.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"3.20-4.el7\",\n              \"packageName\": \"perl-Pod-Perldoc\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943123Z\"\n        },\n        \"installedPackage-keyutils-libs:x86_64:1.5.8-3.el7\": {\n          \"id\": \"installedPackage-keyutils-libs:x86_64:1.5.8-3.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.5.8-3.el7\",\n              \"packageName\": \"keyutils-libs\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943202Z\"\n        },\n        \"installedPackage-less:x86_64:458-10.el7_9\": {\n          \"id\": \"installedPackage-less:x86_64:458-10.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"458-10.el7_9\",\n              \"packageName\": \"less\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943165Z\"\n        },\n        \"installedPackage-selinux-policy:all:3.13.1-268.el7_9.2\": {\n          \"id\": \"installedPackage-selinux-policy:all:3.13.1-268.el7_9.2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"3.13.1-268.el7_9.2\",\n              \"packageName\": \"selinux-policy\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943174Z\"\n        },\n        \"installedPackage-audit-libs:x86_64:2.8.5-4.el7\": {\n          \"id\": \"installedPackage-audit-libs:x86_64:2.8.5-4.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.8.5-4.el7\",\n              \"packageName\": \"audit-libs\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943194Z\"\n        },\n        \"installedPackage-openssh-clients:x86_64:7.4p1-23.el7_9\": {\n          \"id\": \"installedPackage-openssh-clients:x86_64:7.4p1-23.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"7.4p1-23.el7_9\",\n              \"packageName\": \"openssh-clients\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943225Z\"\n        },\n        \"installedPackage-zlib:x86_64:1.2.7-21.el7_9\": {\n          \"id\": \"installedPackage-zlib:x86_64:1.2.7-21.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.2.7-21.el7_9\",\n              \"packageName\": \"zlib\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943204Z\"\n        },\n        \"installedPackage-cryptsetup-libs:x86_64:2.0.3-6.el7\": {\n          \"id\": \"installedPackage-cryptsetup-libs:x86_64:2.0.3-6.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.0.3-6.el7\",\n              \"packageName\": \"cryptsetup-libs\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943226Z\"\n        },\n        \"installedPackage-iproute:x86_64:4.11.0-30.el7\": {\n          \"id\": \"installedPackage-iproute:x86_64:4.11.0-30.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"4.11.0-30.el7\",\n              \"packageName\": \"iproute\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943203Z\"\n        },\n        \"installedPackage-libmount:x86_64:2.23.2-65.el7_9.1\": {\n          \"id\": \"installedPackage-libmount:x86_64:2.23.2-65.el7_9.1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.23.2-65.el7_9.1\",\n              \"packageName\": \"libmount\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943206Z\"\n        },\n        \"installedPackage-iprutils:x86_64:2.4.17.1-3.el7_7\": {\n          \"id\": \"installedPackage-iprutils:x86_64:2.4.17.1-3.el7_7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.4.17.1-3.el7_7\",\n              \"packageName\": \"iprutils\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943188Z\"\n        },\n        \"installedPackage-nss-softokn:x86_64:3.90.0-6.el7_9\": {\n          \"id\": \"installedPackage-nss-softokn:x86_64:3.90.0-6.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.90.0-6.el7_9\",\n              \"packageName\": \"nss-softokn\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943207Z\"\n        },\n        \"installedPackage-python-perf:x86_64:3.10.0-1160.118.1.el7\": {\n          \"id\": \"installedPackage-python-perf:x86_64:3.10.0-1160.118.1.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.10.0-1160.118.1.el7\",\n              \"packageName\": \"python-perf\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943211Z\"\n        },\n        \"installedPackage-initscripts:x86_64:9.49.53-1.el7_9.1\": {\n          \"id\": \"installedPackage-initscripts:x86_64:9.49.53-1.el7_9.1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"9.49.53-1.el7_9.1\",\n              \"packageName\": \"initscripts\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943096Z\"\n        },\n        \"availablePackage-google-guest-agent:x86_64:1:20240528.00-g1.el7\": {\n          \"id\": \"availablePackage-google-guest-agent:x86_64:1:20240528.00-g1.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"AVAILABLE_PACKAGE\",\n          \"availablePackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:20240528.00-g1.el7\",\n              \"packageName\": \"google-guest-agent\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943054Z\"\n        },\n        \"installedPackage-libmnl:x86_64:1.0.3-7.el7\": {\n          \"id\": \"installedPackage-libmnl:x86_64:1.0.3-7.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.0.3-7.el7\",\n              \"packageName\": \"libmnl\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943074Z\"\n        },\n        \"installedPackage-iwl7260-firmware:all:25.30.13.0-83.el7_9\": {\n          \"id\": \"installedPackage-iwl7260-firmware:all:25.30.13.0-83.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"25.30.13.0-83.el7_9\",\n              \"packageName\": \"iwl7260-firmware\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943167Z\"\n        },\n        \"installedPackage-wpa_supplicant:x86_64:1:2.6-12.el7_9.2\": {\n          \"id\": \"installedPackage-wpa_supplicant:x86_64:1:2.6-12.el7_9.2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:2.6-12.el7_9.2\",\n              \"packageName\": \"wpa_supplicant\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943182Z\"\n        },\n        \"installedPackage-alsa-lib:x86_64:1.1.8-1.el7\": {\n          \"id\": \"installedPackage-alsa-lib:x86_64:1.1.8-1.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.1.8-1.el7\",\n              \"packageName\": \"alsa-lib\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943096Z\"\n        },\n        \"installedPackage-device-mapper-libs:x86_64:7:1.02.170-6.el7_9.5\": {\n          \"id\": \"installedPackage-device-mapper-libs:x86_64:7:1.02.170-6.el7_9.5\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"7:1.02.170-6.el7_9.5\",\n              \"packageName\": \"device-mapper-libs\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943219Z\"\n        },\n        \"installedPackage-shared-mime-info:x86_64:1.8-5.el7\": {\n          \"id\": \"installedPackage-shared-mime-info:x86_64:1.8-5.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.8-5.el7\",\n              \"packageName\": \"shared-mime-info\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943212Z\"\n        },\n        \"installedPackage-biosdevname:x86_64:0.7.3-2.el7\": {\n          \"id\": \"installedPackage-biosdevname:x86_64:0.7.3-2.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.7.3-2.el7\",\n              \"packageName\": \"biosdevname\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943118Z\"\n        },\n        \"installedPackage-gpgme:x86_64:1.3.2-5.el7\": {\n          \"id\": \"installedPackage-gpgme:x86_64:1.3.2-5.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.3.2-5.el7\",\n              \"packageName\": \"gpgme\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943222Z\"\n        },\n        \"installedPackage-libndp:x86_64:1.2-9.el7\": {\n          \"id\": \"installedPackage-libndp:x86_64:1.2-9.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.2-9.el7\",\n              \"packageName\": \"libndp\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943088Z\"\n        },\n        \"installedPackage-rpm-python:x86_64:4.11.3-48.el7_9\": {\n          \"id\": \"installedPackage-rpm-python:x86_64:4.11.3-48.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"4.11.3-48.el7_9\",\n              \"packageName\": \"rpm-python\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943176Z\"\n        },\n        \"installedPackage-p11-kit:x86_64:0.23.5-3.el7\": {\n          \"id\": \"installedPackage-p11-kit:x86_64:0.23.5-3.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.23.5-3.el7\",\n              \"packageName\": \"p11-kit\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943131Z\"\n        },\n        \"installedPackage-python-urlgrabber:all:3.10-10.el7\": {\n          \"id\": \"installedPackage-python-urlgrabber:all:3.10-10.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"3.10-10.el7\",\n              \"packageName\": \"python-urlgrabber\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943159Z\"\n        },\n        \"installedPackage-logrotate:x86_64:3.8.6-19.el7\": {\n          \"id\": \"installedPackage-logrotate:x86_64:3.8.6-19.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.8.6-19.el7\",\n              \"packageName\": \"logrotate\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943157Z\"\n        },\n        \"installedPackage-gpg-pubkey:(none):f21541eb-4a5233e7\": {\n          \"id\": \"installedPackage-gpg-pubkey:(none):f21541eb-4a5233e7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"(none)\",\n              \"version\": \"f21541eb-4a5233e7\",\n              \"packageName\": \"gpg-pubkey\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943078Z\"\n        },\n        \"installedPackage-libassuan:x86_64:2.1.0-3.el7\": {\n          \"id\": \"installedPackage-libassuan:x86_64:2.1.0-3.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.1.0-3.el7\",\n              \"packageName\": \"libassuan\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943079Z\"\n        },\n        \"installedPackage-python-backports-ssl_match_hostname:all:3.5.0.1-1.el7\": {\n          \"id\": \"installedPackage-python-backports-ssl_match_hostname:all:3.5.0.1-1.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"3.5.0.1-1.el7\",\n              \"packageName\": \"python-backports-ssl_match_hostname\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943171Z\"\n        },\n        \"installedPackage-ncurses-libs:x86_64:5.9-14.20130511.el7_4\": {\n          \"id\": \"installedPackage-ncurses-libs:x86_64:5.9-14.20130511.el7_4\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"5.9-14.20130511.el7_4\",\n              \"packageName\": \"ncurses-libs\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943111Z\"\n        },\n        \"installedPackage-python-ply:all:3.4-11.el7\": {\n          \"id\": \"installedPackage-python-ply:all:3.4-11.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"3.4-11.el7\",\n              \"packageName\": \"python-ply\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943090Z\"\n        },\n        \"installedPackage-chkconfig:x86_64:1.7.6-1.el7\": {\n          \"id\": \"installedPackage-chkconfig:x86_64:1.7.6-1.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.7.6-1.el7\",\n              \"packageName\": \"chkconfig\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943068Z\"\n        },\n        \"installedPackage-lsscsi:x86_64:0.27-6.el7\": {\n          \"id\": \"installedPackage-lsscsi:x86_64:0.27-6.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.27-6.el7\",\n              \"packageName\": \"lsscsi\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943101Z\"\n        },\n        \"installedPackage-libsemanage:x86_64:2.5-14.el7\": {\n          \"id\": \"installedPackage-libsemanage:x86_64:2.5-14.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.5-14.el7\",\n              \"packageName\": \"libsemanage\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943150Z\"\n        },\n        \"installedPackage-libcurl:x86_64:7.29.0-59.el7_9.2\": {\n          \"id\": \"installedPackage-libcurl:x86_64:7.29.0-59.el7_9.2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"7.29.0-59.el7_9.2\",\n              \"packageName\": \"libcurl\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943175Z\"\n        },\n        \"installedPackage-gdisk:x86_64:0.8.10-3.el7\": {\n          \"id\": \"installedPackage-gdisk:x86_64:0.8.10-3.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.8.10-3.el7\",\n              \"packageName\": \"gdisk\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943132Z\"\n        },\n        \"installedPackage-boost-regex:x86_64:1.53.0-28.el7\": {\n          \"id\": \"installedPackage-boost-regex:x86_64:1.53.0-28.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.53.0-28.el7\",\n              \"packageName\": \"boost-regex\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943079Z\"\n        },\n        \"installedPackage-libpipeline:x86_64:1.2.3-3.el7\": {\n          \"id\": \"installedPackage-libpipeline:x86_64:1.2.3-3.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.2.3-3.el7\",\n              \"packageName\": \"libpipeline\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943224Z\"\n        },\n        \"installedPackage-libsepol:x86_64:2.5-10.el7\": {\n          \"id\": \"installedPackage-libsepol:x86_64:2.5-10.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.5-10.el7\",\n              \"packageName\": \"libsepol\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943112Z\"\n        },\n        \"installedPackage-bind-export-libs:x86_64:32:9.11.4-26.P2.el7_9.16\": {\n          \"id\": \"installedPackage-bind-export-libs:x86_64:32:9.11.4-26.P2.el7_9.16\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"32:9.11.4-26.P2.el7_9.16\",\n              \"packageName\": \"bind-export-libs\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943227Z\"\n        },\n        \"availablePackage-redhat-release-server:x86_64:7.9-11.el7_9\": {\n          \"id\": \"availablePackage-redhat-release-server:x86_64:7.9-11.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"AVAILABLE_PACKAGE\",\n          \"availablePackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"7.9-11.el7_9\",\n              \"packageName\": \"redhat-release-server\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943061Z\"\n        },\n        \"installedPackage-redhat-release-server:x86_64:7.9-10.el7_9\": {\n          \"id\": \"installedPackage-redhat-release-server:x86_64:7.9-10.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"7.9-10.el7_9\",\n              \"packageName\": \"redhat-release-server\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943201Z\"\n        },\n        \"installedPackage-m2crypto:x86_64:0.21.1-17.el7\": {\n          \"id\": \"installedPackage-m2crypto:x86_64:0.21.1-17.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.21.1-17.el7\",\n              \"packageName\": \"m2crypto\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943216Z\"\n        },\n        \"installedPackage-nss:x86_64:3.90.0-2.el7_9\": {\n          \"id\": \"installedPackage-nss:x86_64:3.90.0-2.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.90.0-2.el7_9\",\n              \"packageName\": \"nss\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943148Z\"\n        },\n        \"installedPackage-nss-sysinit:x86_64:3.90.0-2.el7_9\": {\n          \"id\": \"installedPackage-nss-sysinit:x86_64:3.90.0-2.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.90.0-2.el7_9\",\n              \"packageName\": \"nss-sysinit\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943088Z\"\n        },\n        \"installedPackage-plymouth:x86_64:0.8.9-0.34.20140113.el7\": {\n          \"id\": \"installedPackage-plymouth:x86_64:0.8.9-0.34.20140113.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.8.9-0.34.20140113.el7\",\n              \"packageName\": \"plymouth\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943111Z\"\n        },\n        \"installedPackage-python-jwcrypto:all:0.4.2-1.el7\": {\n          \"id\": \"installedPackage-python-jwcrypto:all:0.4.2-1.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"0.4.2-1.el7\",\n              \"packageName\": \"python-jwcrypto\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943217Z\"\n        },\n        \"installedPackage-efivar-libs:x86_64:36-12.el7\": {\n          \"id\": \"installedPackage-efivar-libs:x86_64:36-12.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"36-12.el7\",\n              \"packageName\": \"efivar-libs\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943082Z\"\n        },\n        \"installedPackage-python-firewall:all:0.6.3-13.el7_9\": {\n          \"id\": \"installedPackage-python-firewall:all:0.6.3-13.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"0.6.3-13.el7_9\",\n              \"packageName\": \"python-firewall\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943173Z\"\n        },\n        \"installedPackage-policycoreutils:x86_64:2.5-34.el7\": {\n          \"id\": \"installedPackage-policycoreutils:x86_64:2.5-34.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.5-34.el7\",\n              \"packageName\": \"policycoreutils\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943106Z\"\n        },\n        \"installedPackage-python-slip:all:0.4.0-4.el7\": {\n          \"id\": \"installedPackage-python-slip:all:0.4.0-4.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"0.4.0-4.el7\",\n              \"packageName\": \"python-slip\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943157Z\"\n        },\n        \"installedPackage-libcap:x86_64:2.22-11.el7\": {\n          \"id\": \"installedPackage-libcap:x86_64:2.22-11.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.22-11.el7\",\n              \"packageName\": \"libcap\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943194Z\"\n        },\n        \"installedPackage-nss-softokn-freebl:x86_64:3.90.0-6.el7_9\": {\n          \"id\": \"installedPackage-nss-softokn-freebl:x86_64:3.90.0-6.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.90.0-6.el7_9\",\n              \"packageName\": \"nss-softokn-freebl\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943203Z\"\n        },\n        \"installedPackage-libteam:x86_64:1.29-3.el7\": {\n          \"id\": \"installedPackage-libteam:x86_64:1.29-3.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.29-3.el7\",\n              \"packageName\": \"libteam\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943138Z\"\n        },\n        \"installedPackage-libffi:x86_64:3.0.13-19.el7\": {\n          \"id\": \"installedPackage-libffi:x86_64:3.0.13-19.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.0.13-19.el7\",\n              \"packageName\": \"libffi\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943117Z\"\n        },\n        \"installedPackage-ncurses-base:all:5.9-14.20130511.el7_4\": {\n          \"id\": \"installedPackage-ncurses-base:all:5.9-14.20130511.el7_4\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"5.9-14.20130511.el7_4\",\n              \"packageName\": \"ncurses-base\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943191Z\"\n        },\n        \"installedPackage-rsyslog:x86_64:8.24.0-57.el7_9.3\": {\n          \"id\": \"installedPackage-rsyslog:x86_64:8.24.0-57.el7_9.3\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"8.24.0-57.el7_9.3\",\n              \"packageName\": \"rsyslog\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943224Z\"\n        },\n        \"installedPackage-firewalld:all:0.6.3-13.el7_9\": {\n          \"id\": \"installedPackage-firewalld:all:0.6.3-13.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"0.6.3-13.el7_9\",\n              \"packageName\": \"firewalld\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943222Z\"\n        },\n        \"installedPackage-newt:x86_64:0.52.15-4.el7\": {\n          \"id\": \"installedPackage-newt:x86_64:0.52.15-4.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.52.15-4.el7\",\n              \"packageName\": \"newt\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943149Z\"\n        },\n        \"installedPackage-NetworkManager-libnm:x86_64:1:1.18.8-2.el7_9\": {\n          \"id\": \"installedPackage-NetworkManager-libnm:x86_64:1:1.18.8-2.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:1.18.8-2.el7_9\",\n              \"packageName\": \"NetworkManager-libnm\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943208Z\"\n        },\n        \"installedPackage-google-guest-agent:x86_64:1:20240109.00-g1.el7\": {\n          \"id\": \"installedPackage-google-guest-agent:x86_64:1:20240109.00-g1.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:20240109.00-g1.el7\",\n              \"packageName\": \"google-guest-agent\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943131Z\"\n        },\n        \"installedPackage-perl-Getopt-Long:all:2.40-3.el7\": {\n          \"id\": \"installedPackage-perl-Getopt-Long:all:2.40-3.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"2.40-3.el7\",\n              \"packageName\": \"perl-Getopt-Long\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943130Z\"\n        },\n        \"installedPackage-python-dateutil:all:1.5-7.el7\": {\n          \"id\": \"installedPackage-python-dateutil:all:1.5-7.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"1.5-7.el7\",\n              \"packageName\": \"python-dateutil\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943153Z\"\n        },\n        \"installedPackage-libsmartcols:x86_64:2.23.2-65.el7_9.1\": {\n          \"id\": \"installedPackage-libsmartcols:x86_64:2.23.2-65.el7_9.1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.23.2-65.el7_9.1\",\n              \"packageName\": \"libsmartcols\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943216Z\"\n        },\n        \"installedPackage-desktop-file-utils:x86_64:0.23-2.el7\": {\n          \"id\": \"installedPackage-desktop-file-utils:x86_64:0.23-2.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.23-2.el7\",\n              \"packageName\": \"desktop-file-utils\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943093Z\"\n        },\n        \"installedPackage-kbd-legacy:all:1.15.5-16.el7_9\": {\n          \"id\": \"installedPackage-kbd-legacy:all:1.15.5-16.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"1.15.5-16.el7_9\",\n              \"packageName\": \"kbd-legacy\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943136Z\"\n        },\n        \"installedPackage-gdbm:x86_64:1.10-8.el7\": {\n          \"id\": \"installedPackage-gdbm:x86_64:1.10-8.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.10-8.el7\",\n              \"packageName\": \"gdbm\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943121Z\"\n        },\n        \"installedPackage-libdaemon:x86_64:0.14-7.el7\": {\n          \"id\": \"installedPackage-libdaemon:x86_64:0.14-7.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.14-7.el7\",\n              \"packageName\": \"libdaemon\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943160Z\"\n        },\n        \"installedPackage-sg3_utils-libs:x86_64:1:1.37-19.el7\": {\n          \"id\": \"installedPackage-sg3_utils-libs:x86_64:1:1.37-19.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:1.37-19.el7\",\n              \"packageName\": \"sg3_utils-libs\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943161Z\"\n        },\n        \"installedPackage-ethtool:x86_64:2:4.8-10.el7\": {\n          \"id\": \"installedPackage-ethtool:x86_64:2:4.8-10.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2:4.8-10.el7\",\n              \"packageName\": \"ethtool\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943225Z\"\n        },\n        \"installedPackage-kpartx:x86_64:0.4.9-136.el7_9\": {\n          \"id\": \"installedPackage-kpartx:x86_64:0.4.9-136.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.4.9-136.el7_9\",\n              \"packageName\": \"kpartx\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943185Z\"\n        },\n        \"installedPackage-perl-Exporter:all:5.68-3.el7\": {\n          \"id\": \"installedPackage-perl-Exporter:all:5.68-3.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"5.68-3.el7\",\n              \"packageName\": \"perl-Exporter\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943197Z\"\n        },\n        \"installedPackage-e2fsprogs-libs:x86_64:1.42.9-19.el7\": {\n          \"id\": \"installedPackage-e2fsprogs-libs:x86_64:1.42.9-19.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.42.9-19.el7\",\n              \"packageName\": \"e2fsprogs-libs\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943132Z\"\n        },\n        \"installedPackage-perl-Encode:x86_64:2.51-7.el7\": {\n          \"id\": \"installedPackage-perl-Encode:x86_64:2.51-7.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.51-7.el7\",\n              \"packageName\": \"perl-Encode\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943075Z\"\n        },\n        \"installedPackage-lz4:x86_64:1.8.3-1.el7\": {\n          \"id\": \"installedPackage-lz4:x86_64:1.8.3-1.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.8.3-1.el7\",\n              \"packageName\": \"lz4\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943136Z\"\n        },\n        \"installedPackage-dbus:x86_64:1:1.10.24-15.el7\": {\n          \"id\": \"installedPackage-dbus:x86_64:1:1.10.24-15.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:1.10.24-15.el7\",\n              \"packageName\": \"dbus\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943164Z\"\n        },\n        \"installedPackage-openssh:x86_64:7.4p1-23.el7_9\": {\n          \"id\": \"installedPackage-openssh:x86_64:7.4p1-23.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"7.4p1-23.el7_9\",\n              \"packageName\": \"openssh\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943094Z\"\n        },\n        \"installedPackage-selinux-policy-targeted:all:3.13.1-268.el7_9.2\": {\n          \"id\": \"installedPackage-selinux-policy-targeted:all:3.13.1-268.el7_9.2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"3.13.1-268.el7_9.2\",\n              \"packageName\": \"selinux-policy-targeted\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943101Z\"\n        },\n        \"installedPackage-gawk:x86_64:4.0.2-4.el7_3.1\": {\n          \"id\": \"installedPackage-gawk:x86_64:4.0.2-4.el7_3.1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"4.0.2-4.el7_3.1\",\n              \"packageName\": \"gawk\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943114Z\"\n        },\n        \"installedPackage-expat:x86_64:2.1.0-15.el7_9\": {\n          \"id\": \"installedPackage-expat:x86_64:2.1.0-15.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.1.0-15.el7_9\",\n              \"packageName\": \"expat\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943169Z\"\n        },\n        \"installedPackage-ebtables:x86_64:2.0.10-16.el7\": {\n          \"id\": \"installedPackage-ebtables:x86_64:2.0.10-16.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.0.10-16.el7\",\n              \"packageName\": \"ebtables\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943190Z\"\n        },\n        \"installedPackage-perl-Socket:x86_64:2.010-5.el7\": {\n          \"id\": \"installedPackage-perl-Socket:x86_64:2.010-5.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.010-5.el7\",\n              \"packageName\": \"perl-Socket\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943128Z\"\n        },\n        \"installedPackage-Red_Hat_Enterprise_Linux-Release_Notes-7-en-US:all:7-2.el7\": {\n          \"id\": \"installedPackage-Red_Hat_Enterprise_Linux-Release_Notes-7-en-US:all:7-2.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"7-2.el7\",\n              \"packageName\": \"Red_Hat_Enterprise_Linux-Release_Notes-7-en-US\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943196Z\"\n        },\n        \"installedPackage-krb5-libs:x86_64:1.15.1-55.el7_9\": {\n          \"id\": \"installedPackage-krb5-libs:x86_64:1.15.1-55.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.15.1-55.el7_9\",\n              \"packageName\": \"krb5-libs\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943086Z\"\n        },\n        \"installedPackage-python-ipaddress:all:1.0.16-2.el7\": {\n          \"id\": \"installedPackage-python-ipaddress:all:1.0.16-2.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"1.0.16-2.el7\",\n              \"packageName\": \"python-ipaddress\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943209Z\"\n        },\n        \"installedPackage-vim-enhanced:x86_64:2:7.4.629-8.el7_9\": {\n          \"id\": \"installedPackage-vim-enhanced:x86_64:2:7.4.629-8.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2:7.4.629-8.el7_9\",\n              \"packageName\": \"vim-enhanced\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943100Z\"\n        },\n        \"installedPackage-perl-File-Path:all:2.09-2.el7\": {\n          \"id\": \"installedPackage-perl-File-Path:all:2.09-2.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"2.09-2.el7\",\n              \"packageName\": \"perl-File-Path\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943127Z\"\n        },\n        \"installedPackage-file-libs:x86_64:5.11-37.el7\": {\n          \"id\": \"installedPackage-file-libs:x86_64:5.11-37.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"5.11-37.el7\",\n              \"packageName\": \"file-libs\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943195Z\"\n        },\n        \"installedPackage-dracut-config-rescue:x86_64:033-572.el7\": {\n          \"id\": \"installedPackage-dracut-config-rescue:x86_64:033-572.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"033-572.el7\",\n              \"packageName\": \"dracut-config-rescue\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943071Z\"\n        },\n        \"installedPackage-libnfnetlink:x86_64:1.0.1-4.el7\": {\n          \"id\": \"installedPackage-libnfnetlink:x86_64:1.0.1-4.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.0.1-4.el7\",\n              \"packageName\": \"libnfnetlink\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943135Z\"\n        },\n        \"installedPackage-python:x86_64:2.7.5-94.el7_9\": {\n          \"id\": \"installedPackage-python:x86_64:2.7.5-94.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.7.5-94.el7_9\",\n              \"packageName\": \"python\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943170Z\"\n        },\n        \"installedPackage-pexpect:all:2.3-11.el7\": {\n          \"id\": \"installedPackage-pexpect:all:2.3-11.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"2.3-11.el7\",\n              \"packageName\": \"pexpect\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943170Z\"\n        },\n        \"installedPackage-libuuid:x86_64:2.23.2-65.el7_9.1\": {\n          \"id\": \"installedPackage-libuuid:x86_64:2.23.2-65.el7_9.1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.23.2-65.el7_9.1\",\n              \"packageName\": \"libuuid\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943140Z\"\n        },\n        \"installedPackage-perl-File-Temp:all:0.23.01-3.el7\": {\n          \"id\": \"installedPackage-perl-File-Temp:all:0.23.01-3.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"0.23.01-3.el7\",\n              \"packageName\": \"perl-File-Temp\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943198Z\"\n        },\n        \"installedPackage-grub2-tools-minimal:x86_64:1:2.02-0.87.el7_9.14\": {\n          \"id\": \"installedPackage-grub2-tools-minimal:x86_64:1:2.02-0.87.el7_9.14\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:2.02-0.87.el7_9.14\",\n              \"packageName\": \"grub2-tools-minimal\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943097Z\"\n        },\n        \"installedPackage-sed:x86_64:4.2.2-7.el7\": {\n          \"id\": \"installedPackage-sed:x86_64:4.2.2-7.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"4.2.2-7.el7\",\n              \"packageName\": \"sed\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943113Z\"\n        },\n        \"installedPackage-libverto:x86_64:0.2.5-4.el7\": {\n          \"id\": \"installedPackage-libverto:x86_64:0.2.5-4.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.2.5-4.el7\",\n              \"packageName\": \"libverto\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943149Z\"\n        },\n        \"installedPackage-lshw:x86_64:B.02.18-17.el7\": {\n          \"id\": \"installedPackage-lshw:x86_64:B.02.18-17.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"B.02.18-17.el7\",\n              \"packageName\": \"lshw\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943192Z\"\n        },\n        \"installedPackage-google-rhui-client-rhel7:all:8.0-1\": {\n          \"id\": \"installedPackage-google-rhui-client-rhel7:all:8.0-1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"8.0-1\",\n              \"packageName\": \"google-rhui-client-rhel7\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943127Z\"\n        },\n        \"installedPackage-mozjs17:x86_64:17.0.0-20.el7\": {\n          \"id\": \"installedPackage-mozjs17:x86_64:17.0.0-20.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"17.0.0-20.el7\",\n              \"packageName\": \"mozjs17\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943147Z\"\n        },\n        \"availablePackage-kernel-tools-libs:x86_64:3.10.0-1160.119.1.el7\": {\n          \"id\": \"availablePackage-kernel-tools-libs:x86_64:3.10.0-1160.119.1.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"AVAILABLE_PACKAGE\",\n          \"availablePackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.10.0-1160.119.1.el7\",\n              \"packageName\": \"kernel-tools-libs\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943058Z\"\n        },\n        \"installedPackage-pygpgme:x86_64:0.3-9.el7\": {\n          \"id\": \"installedPackage-pygpgme:x86_64:0.3-9.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.3-9.el7\",\n              \"packageName\": \"pygpgme\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943158Z\"\n        },\n        \"installedPackage-iwl105-firmware:all:18.168.6.1-83.el7_9\": {\n          \"id\": \"installedPackage-iwl105-firmware:all:18.168.6.1-83.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"18.168.6.1-83.el7_9\",\n              \"packageName\": \"iwl105-firmware\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943105Z\"\n        },\n        \"installedPackage-libpwquality:x86_64:1.2.3-5.el7\": {\n          \"id\": \"installedPackage-libpwquality:x86_64:1.2.3-5.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.2.3-5.el7\",\n              \"packageName\": \"libpwquality\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943152Z\"\n        },\n        \"installedPackage-gnupg2:x86_64:2.0.22-5.el7_5\": {\n          \"id\": \"installedPackage-gnupg2:x86_64:2.0.22-5.el7_5\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.0.22-5.el7_5\",\n              \"packageName\": \"gnupg2\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943221Z\"\n        },\n        \"installedPackage-gce-disk-expand:all:1:20221110.00-g1.el7\": {\n          \"id\": \"installedPackage-gce-disk-expand:all:1:20221110.00-g1.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"1:20221110.00-g1.el7\",\n              \"packageName\": \"gce-disk-expand\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943200Z\"\n        },\n        \"installedPackage-slang:x86_64:2.2.4-11.el7\": {\n          \"id\": \"installedPackage-slang:x86_64:2.2.4-11.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.2.4-11.el7\",\n              \"packageName\": \"slang\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943209Z\"\n        },\n        \"installedPackage-kernel:x86_64:3.10.0-1160.el7\": {\n          \"id\": \"installedPackage-kernel:x86_64:3.10.0-1160.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.10.0-1160.el7\",\n              \"packageName\": \"kernel\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943069Z\"\n        },\n        \"installedPackage-make:x86_64:1:3.82-24.el7\": {\n          \"id\": \"installedPackage-make:x86_64:1:3.82-24.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:3.82-24.el7\",\n              \"packageName\": \"make\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943178Z\"\n        },\n        \"installedPackage-perl-Filter:x86_64:1.49-3.el7\": {\n          \"id\": \"installedPackage-perl-Filter:x86_64:1.49-3.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.49-3.el7\",\n              \"packageName\": \"perl-Filter\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943126Z\"\n        },\n        \"installedPackage-google-osconfig-agent:x86_64:1:20240501.03-g1.el7\": {\n          \"id\": \"installedPackage-google-osconfig-agent:x86_64:1:20240501.03-g1.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:20240501.03-g1.el7\",\n              \"packageName\": \"google-osconfig-agent\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943134Z\"\n        },\n        \"installedPackage-basesystem:all:10.0-7.el7\": {\n          \"id\": \"installedPackage-basesystem:all:10.0-7.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"10.0-7.el7\",\n              \"packageName\": \"basesystem\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943108Z\"\n        },\n        \"installedPackage-cracklib-dicts:x86_64:2.9.0-11.el7\": {\n          \"id\": \"installedPackage-cracklib-dicts:x86_64:2.9.0-11.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.9.0-11.el7\",\n              \"packageName\": \"cracklib-dicts\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943152Z\"\n        },\n        \"installedPackage-python-slip-dbus:all:0.4.0-4.el7\": {\n          \"id\": \"installedPackage-python-slip-dbus:all:0.4.0-4.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"0.4.0-4.el7\",\n              \"packageName\": \"python-slip-dbus\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943110Z\"\n        },\n        \"installedPackage-libgpg-error:x86_64:1.12-3.el7\": {\n          \"id\": \"installedPackage-libgpg-error:x86_64:1.12-3.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.12-3.el7\",\n              \"packageName\": \"libgpg-error\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943069Z\"\n        },\n        \"installedPackage-pth:x86_64:2.0.7-23.el7\": {\n          \"id\": \"installedPackage-pth:x86_64:2.0.7-23.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.0.7-23.el7\",\n              \"packageName\": \"pth\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943148Z\"\n        },\n        \"installedPackage-which:x86_64:2.20-7.el7\": {\n          \"id\": \"installedPackage-which:x86_64:2.20-7.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.20-7.el7\",\n              \"packageName\": \"which\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943193Z\"\n        },\n        \"installedPackage-python-chardet:all:2.2.1-3.el7\": {\n          \"id\": \"installedPackage-python-chardet:all:2.2.1-3.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"2.2.1-3.el7\",\n              \"packageName\": \"python-chardet\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943090Z\"\n        },\n        \"installedPackage-sg3_utils:x86_64:1:1.37-19.el7\": {\n          \"id\": \"installedPackage-sg3_utils:x86_64:1:1.37-19.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:1.37-19.el7\",\n              \"packageName\": \"sg3_utils\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943119Z\"\n        },\n        \"installedPackage-util-linux:x86_64:2.23.2-65.el7_9.1\": {\n          \"id\": \"installedPackage-util-linux:x86_64:2.23.2-65.el7_9.1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.23.2-65.el7_9.1\",\n              \"packageName\": \"util-linux\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943177Z\"\n        },\n        \"installedPackage-elfutils-libelf:x86_64:0.176-5.el7\": {\n          \"id\": \"installedPackage-elfutils-libelf:x86_64:0.176-5.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.176-5.el7\",\n              \"packageName\": \"elfutils-libelf\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943116Z\"\n        },\n        \"installedPackage-freetype:x86_64:2.8-14.el7_9.1\": {\n          \"id\": \"installedPackage-freetype:x86_64:2.8-14.el7_9.1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.8-14.el7_9.1\",\n              \"packageName\": \"freetype\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943176Z\"\n        },\n        \"installedPackage-jansson:x86_64:2.10-1.el7\": {\n          \"id\": \"installedPackage-jansson:x86_64:2.10-1.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.10-1.el7\",\n              \"packageName\": \"jansson\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943081Z\"\n        },\n        \"installedPackage-perl-Storable:x86_64:2.45-3.el7\": {\n          \"id\": \"installedPackage-perl-Storable:x86_64:2.45-3.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.45-3.el7\",\n              \"packageName\": \"perl-Storable\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943126Z\"\n        },\n        \"installedPackage-fipscheck-lib:x86_64:1.4.1-6.el7\": {\n          \"id\": \"installedPackage-fipscheck-lib:x86_64:1.4.1-6.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.4.1-6.el7\",\n              \"packageName\": \"fipscheck-lib\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943099Z\"\n        },\n        \"installedPackage-python-configobj:all:4.7.2-7.el7\": {\n          \"id\": \"installedPackage-python-configobj:all:4.7.2-7.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"4.7.2-7.el7\",\n              \"packageName\": \"python-configobj\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943094Z\"\n        },\n        \"installedPackage-dracut:x86_64:033-572.el7\": {\n          \"id\": \"installedPackage-dracut:x86_64:033-572.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"033-572.el7\",\n              \"packageName\": \"dracut\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943162Z\"\n        },\n        \"installedPackage-dhcp-libs:x86_64:12:4.2.5-83.el7_9.2\": {\n          \"id\": \"installedPackage-dhcp-libs:x86_64:12:4.2.5-83.el7_9.2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"12:4.2.5-83.el7_9.2\",\n              \"packageName\": \"dhcp-libs\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943105Z\"\n        },\n        \"installedPackage-dbus-libs:x86_64:1:1.10.24-15.el7\": {\n          \"id\": \"installedPackage-dbus-libs:x86_64:1:1.10.24-15.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:1.10.24-15.el7\",\n              \"packageName\": \"dbus-libs\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943163Z\"\n        },\n        \"installedPackage-sqlite:x86_64:3.7.17-8.el7_7.1\": {\n          \"id\": \"installedPackage-sqlite:x86_64:3.7.17-8.el7_7.1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.7.17-8.el7_7.1\",\n              \"packageName\": \"sqlite\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943119Z\"\n        },\n        \"installedPackage-tcp_wrappers-libs:x86_64:7.6-77.el7\": {\n          \"id\": \"installedPackage-tcp_wrappers-libs:x86_64:7.6-77.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"7.6-77.el7\",\n              \"packageName\": \"tcp_wrappers-libs\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943202Z\"\n        },\n        \"installedPackage-kmod-libs:x86_64:20-28.el7\": {\n          \"id\": \"installedPackage-kmod-libs:x86_64:20-28.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"20-28.el7\",\n              \"packageName\": \"kmod-libs\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943142Z\"\n        },\n        \"installedPackage-libcroco:x86_64:0.6.12-6.el7_9\": {\n          \"id\": \"installedPackage-libcroco:x86_64:0.6.12-6.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.6.12-6.el7_9\",\n              \"packageName\": \"libcroco\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943147Z\"\n        },\n        \"installedPackage-passwd:x86_64:0.79-6.el7\": {\n          \"id\": \"installedPackage-passwd:x86_64:0.79-6.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.79-6.el7\",\n              \"packageName\": \"passwd\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943073Z\"\n        },\n        \"installedPackage-lzo:x86_64:2.06-8.el7\": {\n          \"id\": \"installedPackage-lzo:x86_64:2.06-8.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.06-8.el7\",\n              \"packageName\": \"lzo\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943223Z\"\n        },\n        \"installedPackage-openssl:x86_64:1:1.0.2k-26.el7_9\": {\n          \"id\": \"installedPackage-openssl:x86_64:1:1.0.2k-26.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:1.0.2k-26.el7_9\",\n              \"packageName\": \"openssl\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943095Z\"\n        },\n        \"installedPackage-xz:x86_64:5.2.2-2.el7_9\": {\n          \"id\": \"installedPackage-xz:x86_64:5.2.2-2.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"5.2.2-2.el7_9\",\n              \"packageName\": \"xz\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943102Z\"\n        },\n        \"installedPackage-redhat-support-lib-python:all:0.14.0-1.el7_9\": {\n          \"id\": \"installedPackage-redhat-support-lib-python:all:0.14.0-1.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"0.14.0-1.el7_9\",\n              \"packageName\": \"redhat-support-lib-python\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943183Z\"\n        },\n        \"installedPackage-acpid:x86_64:2.0.19-9.el7\": {\n          \"id\": \"installedPackage-acpid:x86_64:2.0.19-9.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.0.19-9.el7\",\n              \"packageName\": \"acpid\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943194Z\"\n        },\n        \"installedPackage-mokutil:x86_64:15.8-1.el7\": {\n          \"id\": \"installedPackage-mokutil:x86_64:15.8-1.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"15.8-1.el7\",\n              \"packageName\": \"mokutil\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943093Z\"\n        },\n        \"installedPackage-dmidecode:x86_64:1:3.2-5.el7_9.1\": {\n          \"id\": \"installedPackage-dmidecode:x86_64:1:3.2-5.el7_9.1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:3.2-5.el7_9.1\",\n              \"packageName\": \"dmidecode\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943177Z\"\n        },\n        \"installedPackage-vim-filesystem:x86_64:2:7.4.629-8.el7_9\": {\n          \"id\": \"installedPackage-vim-filesystem:x86_64:2:7.4.629-8.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2:7.4.629-8.el7_9\",\n              \"packageName\": \"vim-filesystem\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943202Z\"\n        },\n        \"installedPackage-gpm-libs:x86_64:1.20.7-6.el7\": {\n          \"id\": \"installedPackage-gpm-libs:x86_64:1.20.7-6.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.20.7-6.el7\",\n              \"packageName\": \"gpm-libs\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943149Z\"\n        },\n        \"installedPackage-kernel-tools-libs:x86_64:3.10.0-1160.118.1.el7\": {\n          \"id\": \"installedPackage-kernel-tools-libs:x86_64:3.10.0-1160.118.1.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.10.0-1160.118.1.el7\",\n              \"packageName\": \"kernel-tools-libs\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943179Z\"\n        },\n        \"installedPackage-openssh-server:x86_64:7.4p1-23.el7_9\": {\n          \"id\": \"installedPackage-openssh-server:x86_64:7.4p1-23.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"7.4p1-23.el7_9\",\n              \"packageName\": \"openssh-server\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943185Z\"\n        },\n        \"installedPackage-python-decorator:all:3.4.0-3.el7\": {\n          \"id\": \"installedPackage-python-decorator:all:3.4.0-3.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"3.4.0-3.el7\",\n              \"packageName\": \"python-decorator\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943151Z\"\n        },\n        \"installedPackage-filesystem:x86_64:3.2-25.el7\": {\n          \"id\": \"installedPackage-filesystem:x86_64:3.2-25.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.2-25.el7\",\n              \"packageName\": \"filesystem\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943108Z\"\n        },\n        \"installedPackage-grub2:x86_64:1:2.02-0.87.el7_9.14\": {\n          \"id\": \"installedPackage-grub2:x86_64:1:2.02-0.87.el7_9.14\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:2.02-0.87.el7_9.14\",\n              \"packageName\": \"grub2\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943184Z\"\n        },\n        \"installedPackage-iwl2000-firmware:all:18.168.6.1-83.el7_9\": {\n          \"id\": \"installedPackage-iwl2000-firmware:all:18.168.6.1-83.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"18.168.6.1-83.el7_9\",\n              \"packageName\": \"iwl2000-firmware\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943169Z\"\n        },\n        \"installedPackage-python-iniparse:all:0.4-9.el7\": {\n          \"id\": \"installedPackage-python-iniparse:all:0.4-9.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"0.4-9.el7\",\n              \"packageName\": \"python-iniparse\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943155Z\"\n        },\n        \"installedPackage-nmap-ncat:x86_64:2:6.40-19.el7\": {\n          \"id\": \"installedPackage-nmap-ncat:x86_64:2:6.40-19.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2:6.40-19.el7\",\n              \"packageName\": \"nmap-ncat\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943221Z\"\n        },\n        \"installedPackage-libdb-utils:x86_64:5.3.21-25.el7\": {\n          \"id\": \"installedPackage-libdb-utils:x86_64:5.3.21-25.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"5.3.21-25.el7\",\n              \"packageName\": \"libdb-utils\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943086Z\"\n        },\n        \"installedPackage-python-requests:all:2.6.0-10.el7\": {\n          \"id\": \"installedPackage-python-requests:all:2.6.0-10.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"2.6.0-10.el7\",\n              \"packageName\": \"python-requests\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943172Z\"\n        },\n        \"installedPackage-procps-ng:x86_64:3.3.10-28.el7\": {\n          \"id\": \"installedPackage-procps-ng:x86_64:3.3.10-28.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.3.10-28.el7\",\n              \"packageName\": \"procps-ng\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943162Z\"\n        },\n        \"installedPackage-kernel:x86_64:3.10.0-1160.118.1.el7\": {\n          \"id\": \"installedPackage-kernel:x86_64:3.10.0-1160.118.1.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.10.0-1160.118.1.el7\",\n              \"packageName\": \"kernel\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943183Z\"\n        },\n        \"installedPackage-linux-firmware:all:20200421-83.git78c0348.el7_9\": {\n          \"id\": \"installedPackage-linux-firmware:all:20200421-83.git78c0348.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"20200421-83.git78c0348.el7_9\",\n              \"packageName\": \"linux-firmware\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943168Z\"\n        },\n        \"installedPackage-os-prober:x86_64:1.58-9.el7\": {\n          \"id\": \"installedPackage-os-prober:x86_64:1.58-9.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.58-9.el7\",\n              \"packageName\": \"os-prober\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943228Z\"\n        },\n        \"installedPackage-qemu-guest-agent:x86_64:10:2.12.0-3.el7\": {\n          \"id\": \"installedPackage-qemu-guest-agent:x86_64:10:2.12.0-3.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"10:2.12.0-3.el7\",\n              \"packageName\": \"qemu-guest-agent\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943116Z\"\n        },\n        \"installedPackage-ipset:x86_64:7.1-1.el7\": {\n          \"id\": \"installedPackage-ipset:x86_64:7.1-1.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"7.1-1.el7\",\n              \"packageName\": \"ipset\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943139Z\"\n        },\n        \"installedPackage-libpcap:x86_64:14:1.5.3-13.el7_9\": {\n          \"id\": \"installedPackage-libpcap:x86_64:14:1.5.3-13.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"14:1.5.3-13.el7_9\",\n              \"packageName\": \"libpcap\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943182Z\"\n        },\n        \"installedPackage-lua:x86_64:5.1.4-15.el7\": {\n          \"id\": \"installedPackage-lua:x86_64:5.1.4-15.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"5.1.4-15.el7\",\n              \"packageName\": \"lua\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943072Z\"\n        },\n        \"installedPackage-python-cffi:x86_64:1.6.0-5.el7\": {\n          \"id\": \"installedPackage-python-cffi:x86_64:1.6.0-5.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.6.0-5.el7\",\n              \"packageName\": \"python-cffi\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943212Z\"\n        },\n        \"installedPackage-gettext:x86_64:0.19.8.1-3.el7_9\": {\n          \"id\": \"installedPackage-gettext:x86_64:0.19.8.1-3.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.19.8.1-3.el7_9\",\n              \"packageName\": \"gettext\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943212Z\"\n        },\n        \"installedPackage-python-pyudev:all:0.15-9.el7\": {\n          \"id\": \"installedPackage-python-pyudev:all:0.15-9.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"0.15-9.el7\",\n              \"packageName\": \"python-pyudev\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943191Z\"\n        },\n        \"installedPackage-perl-parent:all:1:0.225-244.el7\": {\n          \"id\": \"installedPackage-perl-parent:all:1:0.225-244.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"1:0.225-244.el7\",\n              \"packageName\": \"perl-parent\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943196Z\"\n        },\n        \"availablePackage-google-osconfig-agent:x86_64:1:20240524.03-g1.el7\": {\n          \"id\": \"availablePackage-google-osconfig-agent:x86_64:1:20240524.03-g1.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"AVAILABLE_PACKAGE\",\n          \"availablePackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:20240524.03-g1.el7\",\n              \"packageName\": \"google-osconfig-agent\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943055Z\"\n        },\n        \"installedPackage-tar:x86_64:2:1.26-35.el7\": {\n          \"id\": \"installedPackage-tar:x86_64:2:1.26-35.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2:1.26-35.el7\",\n              \"packageName\": \"tar\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943085Z\"\n        },\n        \"installedPackage-perl-HTTP-Tiny:all:0.033-3.el7\": {\n          \"id\": \"installedPackage-perl-HTTP-Tiny:all:0.033-3.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"0.033-3.el7\",\n              \"packageName\": \"perl-HTTP-Tiny\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943122Z\"\n        },\n        \"installedPackage-mariadb-libs:x86_64:1:5.5.68-1.el7\": {\n          \"id\": \"installedPackage-mariadb-libs:x86_64:1:5.5.68-1.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:5.5.68-1.el7\",\n              \"packageName\": \"mariadb-libs\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943220Z\"\n        },\n        \"installedPackage-perl-podlators:all:2.5.1-3.el7\": {\n          \"id\": \"installedPackage-perl-podlators:all:2.5.1-3.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"2.5.1-3.el7\",\n              \"packageName\": \"perl-podlators\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943074Z\"\n        },\n        \"installedPackage-libfastjson:x86_64:0.99.4-3.el7\": {\n          \"id\": \"installedPackage-libfastjson:x86_64:0.99.4-3.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.99.4-3.el7\",\n              \"packageName\": \"libfastjson\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943161Z\"\n        },\n        \"installedPackage-coreutils:x86_64:8.22-24.el7_9.2\": {\n          \"id\": \"installedPackage-coreutils:x86_64:8.22-24.el7_9.2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"8.22-24.el7_9.2\",\n              \"packageName\": \"coreutils\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943142Z\"\n        },\n        \"installedPackage-ncurses:x86_64:5.9-14.20130511.el7_4\": {\n          \"id\": \"installedPackage-ncurses:x86_64:5.9-14.20130511.el7_4\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"5.9-14.20130511.el7_4\",\n              \"packageName\": \"ncurses\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943087Z\"\n        },\n        \"installedPackage-cpio:x86_64:2.11-28.el7\": {\n          \"id\": \"installedPackage-cpio:x86_64:2.11-28.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.11-28.el7\",\n              \"packageName\": \"cpio\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943071Z\"\n        },\n        \"installedPackage-dbus-glib:x86_64:0.100-7.el7\": {\n          \"id\": \"installedPackage-dbus-glib:x86_64:0.100-7.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.100-7.el7\",\n              \"packageName\": \"dbus-glib\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943109Z\"\n        },\n        \"installedPackage-redhat-logos:all:70.7.0-1.el7\": {\n          \"id\": \"installedPackage-redhat-logos:all:70.7.0-1.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"70.7.0-1.el7\",\n              \"packageName\": \"redhat-logos\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943219Z\"\n        },\n        \"installedPackage-glib2:x86_64:2.56.1-9.el7_9\": {\n          \"id\": \"installedPackage-glib2:x86_64:2.56.1-9.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.56.1-9.el7_9\",\n              \"packageName\": \"glib2\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943147Z\"\n        },\n        \"installedPackage-gpg-pubkey:(none):2fa658e0-45700c69\": {\n          \"id\": \"installedPackage-gpg-pubkey:(none):2fa658e0-45700c69\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"(none)\",\n              \"version\": \"2fa658e0-45700c69\",\n              \"packageName\": \"gpg-pubkey\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943199Z\"\n        },\n        \"installedPackage-man-db:x86_64:2.6.3-11.el7\": {\n          \"id\": \"installedPackage-man-db:x86_64:2.6.3-11.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.6.3-11.el7\",\n              \"packageName\": \"man-db\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943120Z\"\n        },\n        \"installedPackage-yum-metadata-parser:x86_64:1.1.4-10.el7\": {\n          \"id\": \"installedPackage-yum-metadata-parser:x86_64:1.1.4-10.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.1.4-10.el7\",\n              \"packageName\": \"yum-metadata-parser\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943215Z\"\n        },\n        \"installedPackage-info:x86_64:5.1-5.el7\": {\n          \"id\": \"installedPackage-info:x86_64:5.1-5.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"5.1-5.el7\",\n              \"packageName\": \"info\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943113Z\"\n        },\n        \"installedPackage-cronie-anacron:x86_64:1.4.11-25.el7_9\": {\n          \"id\": \"installedPackage-cronie-anacron:x86_64:1.4.11-25.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.4.11-25.el7_9\",\n              \"packageName\": \"cronie-anacron\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943097Z\"\n        },\n        \"installedPackage-tuned:all:2.11.0-12.el7_9\": {\n          \"id\": \"installedPackage-tuned:all:2.11.0-12.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"2.11.0-12.el7_9\",\n              \"packageName\": \"tuned\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943223Z\"\n        },\n        \"installedPackage-perl-Text-ParseWords:all:3.29-4.el7\": {\n          \"id\": \"installedPackage-perl-Text-ParseWords:all:3.29-4.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"3.29-4.el7\",\n              \"packageName\": \"perl-Text-ParseWords\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943123Z\"\n        },\n        \"installedPackage-btrfs-progs:x86_64:4.9.1-1.el7\": {\n          \"id\": \"installedPackage-btrfs-progs:x86_64:4.9.1-1.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"4.9.1-1.el7\",\n              \"packageName\": \"btrfs-progs\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943073Z\"\n        },\n        \"installedPackage-hostname:x86_64:3.13-3.el7_7.1\": {\n          \"id\": \"installedPackage-hostname:x86_64:3.13-3.el7_7.1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.13-3.el7_7.1\",\n              \"packageName\": \"hostname\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943136Z\"\n        },\n        \"installedPackage-polkit:x86_64:0.112-26.el7_9.1\": {\n          \"id\": \"installedPackage-polkit:x86_64:0.112-26.el7_9.1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.112-26.el7_9.1\",\n              \"packageName\": \"polkit\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943180Z\"\n        },\n        \"installedPackage-NetworkManager-team:x86_64:1:1.18.8-2.el7_9\": {\n          \"id\": \"installedPackage-NetworkManager-team:x86_64:1:1.18.8-2.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:1.18.8-2.el7_9\",\n              \"packageName\": \"NetworkManager-team\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943222Z\"\n        },\n        \"installedPackage-systemd:x86_64:219-78.el7_9.9\": {\n          \"id\": \"installedPackage-systemd:x86_64:219-78.el7_9.9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"219-78.el7_9.9\",\n              \"packageName\": \"systemd\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943179Z\"\n        },\n        \"installedPackage-dhcp-common:x86_64:12:4.2.5-83.el7_9.2\": {\n          \"id\": \"installedPackage-dhcp-common:x86_64:12:4.2.5-83.el7_9.2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"12:4.2.5-83.el7_9.2\",\n              \"packageName\": \"dhcp-common\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943166Z\"\n        },\n        \"installedPackage-audit:x86_64:2.8.5-4.el7\": {\n          \"id\": \"installedPackage-audit:x86_64:2.8.5-4.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.8.5-4.el7\",\n              \"packageName\": \"audit\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943115Z\"\n        },\n        \"availablePackage-google-cloud-cli:x86_64:482.0.0-1\": {\n          \"id\": \"availablePackage-google-cloud-cli:x86_64:482.0.0-1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"AVAILABLE_PACKAGE\",\n          \"availablePackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"482.0.0-1\",\n              \"packageName\": \"google-cloud-cli\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943049Z\"\n        },\n        \"availablePackage-google-compute-engine:all:1:20240607.00-g1.el7\": {\n          \"id\": \"availablePackage-google-compute-engine:all:1:20240607.00-g1.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"AVAILABLE_PACKAGE\",\n          \"availablePackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"1:20240607.00-g1.el7\",\n              \"packageName\": \"google-compute-engine\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943052Z\"\n        },\n        \"installedPackage-python-magic:all:5.11-37.el7\": {\n          \"id\": \"installedPackage-python-magic:all:5.11-37.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"5.11-37.el7\",\n              \"packageName\": \"python-magic\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943217Z\"\n        },\n        \"installedPackage-ipset-libs:x86_64:7.1-1.el7\": {\n          \"id\": \"installedPackage-ipset-libs:x86_64:7.1-1.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"7.1-1.el7\",\n              \"packageName\": \"ipset-libs\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943084Z\"\n        },\n        \"installedPackage-grub2-pc:x86_64:1:2.02-0.87.el7_9.14\": {\n          \"id\": \"installedPackage-grub2-pc:x86_64:1:2.02-0.87.el7_9.14\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:2.02-0.87.el7_9.14\",\n              \"packageName\": \"grub2-pc\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943181Z\"\n        },\n        \"installedPackage-gpg-pubkey:(none):42193e6b-4624eff2\": {\n          \"id\": \"installedPackage-gpg-pubkey:(none):42193e6b-4624eff2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"(none)\",\n              \"version\": \"42193e6b-4624eff2\",\n              \"packageName\": \"gpg-pubkey\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943078Z\"\n        },\n        \"installedPackage-gettext-libs:x86_64:0.19.8.1-3.el7_9\": {\n          \"id\": \"installedPackage-gettext-libs:x86_64:0.19.8.1-3.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.19.8.1-3.el7_9\",\n              \"packageName\": \"gettext-libs\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943174Z\"\n        },\n        \"installedPackage-vim-minimal:x86_64:2:7.4.629-8.el7_9\": {\n          \"id\": \"installedPackage-vim-minimal:x86_64:2:7.4.629-8.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2:7.4.629-8.el7_9\",\n              \"packageName\": \"vim-minimal\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943178Z\"\n        },\n        \"installedPackage-sysvinit-tools:x86_64:2.88-14.dsf.el7\": {\n          \"id\": \"installedPackage-sysvinit-tools:x86_64:2.88-14.dsf.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.88-14.dsf.el7\",\n              \"packageName\": \"sysvinit-tools\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943134Z\"\n        },\n        \"installedPackage-bc:x86_64:1.06.95-13.el7\": {\n          \"id\": \"installedPackage-bc:x86_64:1.06.95-13.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.06.95-13.el7\",\n              \"packageName\": \"bc\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943141Z\"\n        },\n        \"installedPackage-shadow-utils:x86_64:2:4.6-5.el7\": {\n          \"id\": \"installedPackage-shadow-utils:x86_64:2:4.6-5.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2:4.6-5.el7\",\n              \"packageName\": \"shadow-utils\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943151Z\"\n        },\n        \"installedPackage-rootfiles:all:8.1-11.el7\": {\n          \"id\": \"installedPackage-rootfiles:all:8.1-11.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"8.1-11.el7\",\n              \"packageName\": \"rootfiles\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943125Z\"\n        },\n        \"installedPackage-xz-libs:x86_64:5.2.2-2.el7_9\": {\n          \"id\": \"installedPackage-xz-libs:x86_64:5.2.2-2.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"5.2.2-2.el7_9\",\n              \"packageName\": \"xz-libs\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943139Z\"\n        },\n        \"installedPackage-rpm-build-libs:x86_64:4.11.3-48.el7_9\": {\n          \"id\": \"installedPackage-rpm-build-libs:x86_64:4.11.3-48.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"4.11.3-48.el7_9\",\n              \"packageName\": \"rpm-build-libs\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943215Z\"\n        },\n        \"installedPackage-NetworkManager-config-server:all:1:1.18.8-2.el7_9\": {\n          \"id\": \"installedPackage-NetworkManager-config-server:all:1:1.18.8-2.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"1:1.18.8-2.el7_9\",\n              \"packageName\": \"NetworkManager-config-server\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943189Z\"\n        },\n        \"installedPackage-python-setuptools:all:0.9.8-7.el7\": {\n          \"id\": \"installedPackage-python-setuptools:all:0.9.8-7.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"0.9.8-7.el7\",\n              \"packageName\": \"python-setuptools\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943171Z\"\n        },\n        \"installedPackage-python2-pyasn1:all:0.1.9-7.el7\": {\n          \"id\": \"installedPackage-python2-pyasn1:all:0.1.9-7.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"0.1.9-7.el7\",\n              \"packageName\": \"python2-pyasn1\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943173Z\"\n        },\n        \"installedPackage-gobject-introspection:x86_64:1.56.1-1.el7\": {\n          \"id\": \"installedPackage-gobject-introspection:x86_64:1.56.1-1.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.56.1-1.el7\",\n              \"packageName\": \"gobject-introspection\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943214Z\"\n        },\n        \"installedPackage-libacl:x86_64:2.2.51-15.el7\": {\n          \"id\": \"installedPackage-libacl:x86_64:2.2.51-15.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.2.51-15.el7\",\n              \"packageName\": \"libacl\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943117Z\"\n        },\n        \"installedPackage-libdrm:x86_64:2.4.97-2.el7\": {\n          \"id\": \"installedPackage-libdrm:x86_64:2.4.97-2.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.4.97-2.el7\",\n              \"packageName\": \"libdrm\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943107Z\"\n        },\n        \"installedPackage-systemd-sysv:x86_64:219-78.el7_9.9\": {\n          \"id\": \"installedPackage-systemd-sysv:x86_64:219-78.el7_9.9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"219-78.el7_9.9\",\n              \"packageName\": \"systemd-sysv\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943220Z\"\n        },\n        \"installedPackage-gpg-pubkey:(none):3e1ba8d5-558ab6a8\": {\n          \"id\": \"installedPackage-gpg-pubkey:(none):3e1ba8d5-558ab6a8\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"(none)\",\n              \"version\": \"3e1ba8d5-558ab6a8\",\n              \"packageName\": \"gpg-pubkey\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943077Z\"\n        },\n        \"installedPackage-e2fsprogs:x86_64:1.42.9-19.el7\": {\n          \"id\": \"installedPackage-e2fsprogs:x86_64:1.42.9-19.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.42.9-19.el7\",\n              \"packageName\": \"e2fsprogs\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943122Z\"\n        },\n        \"installedPackage-diffutils:x86_64:3.3-6.el7_9\": {\n          \"id\": \"installedPackage-diffutils:x86_64:3.3-6.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.3-6.el7_9\",\n              \"packageName\": \"diffutils\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943218Z\"\n        },\n        \"installedPackage-pcre:x86_64:8.32-17.el7\": {\n          \"id\": \"installedPackage-pcre:x86_64:8.32-17.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"8.32-17.el7\",\n              \"packageName\": \"pcre\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943067Z\"\n        },\n        \"installedPackage-libdb:x86_64:5.3.21-25.el7\": {\n          \"id\": \"installedPackage-libdb:x86_64:5.3.21-25.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"5.3.21-25.el7\",\n              \"packageName\": \"libdb\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943114Z\"\n        },\n        \"installedPackage-iwl2030-firmware:all:18.168.6.1-83.el7_9\": {\n          \"id\": \"installedPackage-iwl2030-firmware:all:18.168.6.1-83.el7_9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"18.168.6.1-83.el7_9\",\n              \"packageName\": \"iwl2030-firmware\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943239Z\"\n        },\n        \"installedPackage-libedit:x86_64:3.0-12.20121213cvs.el7\": {\n          \"id\": \"installedPackage-libedit:x86_64:3.0-12.20121213cvs.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.0-12.20121213cvs.el7\",\n              \"packageName\": \"libedit\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943201Z\"\n        },\n        \"installedPackage-libnl3-cli:x86_64:3.2.28-4.el7\": {\n          \"id\": \"installedPackage-libnl3-cli:x86_64:3.2.28-4.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.2.28-4.el7\",\n              \"packageName\": \"libnl3-cli\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943130Z\"\n        },\n        \"installedPackage-google-compute-engine:all:1:20240307.00-g1.el7\": {\n          \"id\": \"installedPackage-google-compute-engine:all:1:20240307.00-g1.el7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"1:20240307.00-g1.el7\",\n              \"packageName\": \"google-compute-engine\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943133Z\"\n        },\n        \"installedPackage-sudo:x86_64:1.8.23-10.el7_9.3\": {\n          \"id\": \"installedPackage-sudo:x86_64:1.8.23-10.el7_9.3\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"yumPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.8.23-10.el7_9.3\",\n              \"packageName\": \"sudo\"\n            }\n          },\n          \"createTime\": \"2024-06-25T15:09:42.943186Z\"\n        }\n      },\n      \"name\": \"projects/12340051/locations/us-central1-a/instances/889242947030893995/inventory\",\n      \"updateTime\": \"2024-06-25T17:09:42.808067Z\"\n    },\n    {\n      \"osInfo\": {\n        \"longName\": \"Microsoft Windows Server 2022 Datacenter\",\n        \"shortName\": \"windows\",\n        \"version\": \"10.0.20348\",\n        \"architecture\": \"x86_64\",\n        \"kernelVersion\": \"10.0.20348.2520 (WinBuild.160101.0800)\",\n        \"kernelRelease\": \"10.0.20348.2520\",\n        \"osconfigAgentVersion\": \"20240320.00.0+win@1\",\n        \"hostname\": \"instance-windows-with-oa-installed\"\n      },\n      \"items\": {\n        \"installedPackage-GooGet - google-cloud-ops-agent:2.47.0@1:\": {\n          \"id\": \"installedPackage-GooGet - google-cloud-ops-agent:2.47.0@1:\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"windowsApplication\": {\n              \"displayName\": \"GooGet - google-cloud-ops-agent\",\n              \"displayVersion\": \"2.47.0@1\",\n              \"installDate\": {}\n            }\n          },\n          \"createTime\": \"2024-06-25T16:58:19.293438Z\"\n        },\n        \"installedPackage-c01629fc-64ea-45f3-b7cb-cabc7d566933:200\": {\n          \"id\": \"installedPackage-c01629fc-64ea-45f3-b7cb-cabc7d566933:200\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"wuaPackage\": {\n              \"title\": \"Update for Windows Defender Antivirus antimalware platform - KB4052623 (Version 4.18.2001.10)\",\n              \"description\": \"This package will update Windows Defender Antivirus antimalware platform’s components on the user machine.\",\n              \"categories\": [\n                {\n                  \"id\": \"8c3fcc84-7410-4a95-8b89-a166a0190486\",\n                  \"name\": \"Microsoft Defender Antivirus\"\n                },\n                {\n                  \"id\": \"cd5ffd1e-e932-4e3a-bf74-18bf0b1bbd83\",\n                  \"name\": \"Updates\"\n                }\n              ],\n              \"kbArticleIds\": [\n                \"4052623\"\n              ],\n              \"moreInfoUrls\": [\n                \"https://support.microsoft.com/en-us/help/4052623/update-for-windows-defender-antimalware-platform\"\n              ],\n              \"updateId\": \"c01629fc-64ea-45f3-b7cb-cabc7d566933\",\n              \"revisionNumber\": 200,\n              \"lastDeploymentChangeTime\": \"2020-05-01T00:00:00Z\",\n              \"supportUrl\": \"https://go.microsoft.com/fwlink/?linkid=862339\"\n            }\n          },\n          \"createTime\": \"2024-06-25T16:58:19.293430Z\"\n        },\n        \"installedPackage-KB5039227\": {\n          \"id\": \"installedPackage-KB5039227\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"qfePackage\": {\n              \"caption\": \"https://support.microsoft.com/help/5039227\",\n              \"description\": \"Security Update\",\n              \"hotFixId\": \"KB5039227\",\n              \"installTime\": \"2024-06-12T00:00:00Z\"\n            }\n          },\n          \"createTime\": \"2024-06-25T16:58:19.293435Z\"\n        },\n        \"installedPackage-google-osconfig-agent:x86_64:20240320.00.0+win@1\": {\n          \"id\": \"installedPackage-google-osconfig-agent:x86_64:20240320.00.0+win@1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"googetPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"20240320.00.0+win@1\",\n              \"packageName\": \"google-osconfig-agent\"\n            }\n          },\n          \"createTime\": \"2024-06-25T16:58:19.293429Z\"\n        },\n        \"installedPackage-GooGet - google-compute-engine-vss:1.1.9@56:\": {\n          \"id\": \"installedPackage-GooGet - google-compute-engine-vss:1.1.9@56:\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"windowsApplication\": {\n              \"displayName\": \"GooGet - google-compute-engine-vss\",\n              \"displayVersion\": \"1.1.9@56\",\n              \"installDate\": {}\n            }\n          },\n          \"createTime\": \"2024-06-25T16:58:19.293444Z\"\n        },\n        \"installedPackage-google-compute-engine-driver-pvpanic:x86_64:16.1.8@9\": {\n          \"id\": \"installedPackage-google-compute-engine-driver-pvpanic:x86_64:16.1.8@9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"googetPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"16.1.8@9\",\n              \"packageName\": \"google-compute-engine-driver-pvpanic\"\n            }\n          },\n          \"createTime\": \"2024-06-25T16:58:19.293423Z\"\n        },\n        \"installedPackage-google-compute-engine-powershell:noarch:20220728.00@1\": {\n          \"id\": \"installedPackage-google-compute-engine-powershell:noarch:20220728.00@1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"googetPackage\": {\n              \"architecture\": \"noarch\",\n              \"version\": \"20220728.00@1\",\n              \"packageName\": \"google-compute-engine-powershell\"\n            }\n          },\n          \"createTime\": \"2024-06-25T16:58:19.293426Z\"\n        },\n        \"installedPackage-KB5039343\": {\n          \"id\": \"installedPackage-KB5039343\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"qfePackage\": {\n              \"description\": \"Security Update\",\n              \"hotFixId\": \"KB5039343\",\n              \"installTime\": \"2024-06-12T00:00:00Z\"\n            }\n          },\n          \"createTime\": \"2024-06-25T16:58:19.293436Z\"\n        },\n        \"installedPackage-certgen:x86_64:20220603.00.0@1\": {\n          \"id\": \"installedPackage-certgen:x86_64:20220603.00.0@1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"googetPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"20220603.00.0@1\",\n              \"packageName\": \"certgen\"\n            }\n          },\n          \"createTime\": \"2024-06-25T16:58:19.293419Z\"\n        },\n        \"installedPackage-google-compute-engine-metadata-scripts:x86_64:20240109.00.0@1\": {\n          \"id\": \"installedPackage-google-compute-engine-metadata-scripts:x86_64:20240109.00.0@1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"googetPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"20240109.00.0@1\",\n              \"packageName\": \"google-compute-engine-metadata-scripts\"\n            }\n          },\n          \"createTime\": \"2024-06-25T16:58:19.293425Z\"\n        },\n        \"installedPackage-3d332b53-2a0f-48a8-a4c7-0305a1bb5bf9:200\": {\n          \"id\": \"installedPackage-3d332b53-2a0f-48a8-a4c7-0305a1bb5bf9:200\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"wuaPackage\": {\n              \"title\": \"Windows Malicious Software Removal Tool x64 - v5.125 (KB890830)\",\n              \"description\": \"After the download, this tool runs one time to check your computer for infection by specific, prevalent malicious software (including Blaster, Sasser, and Mydoom) and helps remove any infection that is found. If an infection is found, the tool will display a status report the next time that you start your computer. A new version of the tool will be offered every month. If you want to manually run the tool on your computer, you can download a copy from the Microsoft Download Center, or you can run an online version from microsoft.com. This tool is not a replacement for an antivirus product. To help protect your computer, you should use an antivirus product.\",\n              \"categories\": [\n                {\n                  \"id\": \"28bc880e-0592-4cbf-8f95-c79b17911d5f\",\n                  \"name\": \"Update Rollups\"\n                },\n                {\n                  \"id\": \"569e8e8f-c6cd-42c8-92a3-efbb20a0f6f5\",\n                  \"name\": \"Windows Server 2016\"\n                },\n                {\n                  \"id\": \"f702a48c-919b-45d6-9aef-ca4248d50397\",\n                  \"name\": \"Windows Server 2019\"\n                },\n                {\n                  \"id\": \"21210d67-50bc-4254-a695-281765e10665\",\n                  \"name\": \"Windows Server, version 1903 and later\"\n                }\n              ],\n              \"kbArticleIds\": [\n                \"890830\"\n              ],\n              \"moreInfoUrls\": [\n                \"http://support.microsoft.com/kb/890830\"\n              ],\n              \"updateId\": \"3d332b53-2a0f-48a8-a4c7-0305a1bb5bf9\",\n              \"revisionNumber\": 200,\n              \"lastDeploymentChangeTime\": \"2024-06-11T00:00:00Z\",\n              \"supportUrl\": \"http://support.microsoft.com\"\n            }\n          },\n          \"createTime\": \"2024-06-25T16:58:19.293431Z\"\n        },\n        \"availablePackage-81de234d-bcac-4306-81e0-f9751fa53436:200\": {\n          \"id\": \"availablePackage-81de234d-bcac-4306-81e0-f9751fa53436:200\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"AVAILABLE_PACKAGE\",\n          \"availablePackage\": {\n            \"wuaPackage\": {\n              \"title\": \"Security Intelligence Update for Microsoft Defender Antivirus - KB2267602 (Version 1.413.510.0) - Current Channel (Broad)\",\n              \"description\": \"Install this update to revise the files that are used to detect viruses, spyware, and other potentially unwanted software. Once you have installed this item, it cannot be removed.\",\n              \"categories\": [\n                {\n                  \"id\": \"e0789628-ce08-4437-be74-2495b842f43b\",\n                  \"name\": \"Definition Updates\"\n                },\n                {\n                  \"id\": \"8c3fcc84-7410-4a95-8b89-a166a0190486\",\n                  \"name\": \"Microsoft Defender Antivirus\"\n                }\n              ],\n              \"kbArticleIds\": [\n                \"2267602\"\n              ],\n              \"moreInfoUrls\": [\n                \"https://go.microsoft.com/fwlink/?linkid=2007160\"\n              ],\n              \"updateId\": \"81de234d-bcac-4306-81e0-f9751fa53436\",\n              \"revisionNumber\": 200,\n              \"lastDeploymentChangeTime\": \"2024-06-25T00:00:00Z\",\n              \"supportUrl\": \"https://go.microsoft.com/fwlink/?LinkId=52661\"\n            }\n          },\n          \"createTime\": \"2024-06-25T16:58:19.293416Z\"\n        },\n        \"installedPackage-google-compute-engine-driver-gvnic:x86_64:1.0.4@73\": {\n          \"id\": \"installedPackage-google-compute-engine-driver-gvnic:x86_64:1.0.4@73\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"googetPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.0.4@73\",\n              \"packageName\": \"google-compute-engine-driver-gvnic\"\n            }\n          },\n          \"createTime\": \"2024-06-25T16:58:19.293422Z\"\n        },\n        \"installedPackage-google-compute-engine-driver-balloon:x86_64:16.1.8@9\": {\n          \"id\": \"installedPackage-google-compute-engine-driver-balloon:x86_64:16.1.8@9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"googetPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"16.1.8@9\",\n              \"packageName\": \"google-compute-engine-driver-balloon\"\n            }\n          },\n          \"createTime\": \"2024-06-25T16:58:19.293421Z\"\n        },\n        \"installedPackage-google-compute-engine-sysprep:noarch:20240122.00@1\": {\n          \"id\": \"installedPackage-google-compute-engine-sysprep:noarch:20240122.00@1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"googetPackage\": {\n              \"architecture\": \"noarch\",\n              \"version\": \"20240122.00@1\",\n              \"packageName\": \"google-compute-engine-sysprep\"\n            }\n          },\n          \"createTime\": \"2024-06-25T16:58:19.293427Z\"\n        },\n        \"installedPackage-GooGet - google-compute-engine-driver-pvpanic:16.1.8@9:\": {\n          \"id\": \"installedPackage-GooGet - google-compute-engine-driver-pvpanic:16.1.8@9:\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"windowsApplication\": {\n              \"displayName\": \"GooGet - google-compute-engine-driver-pvpanic\",\n              \"displayVersion\": \"16.1.8@9\",\n              \"installDate\": {}\n            }\n          },\n          \"createTime\": \"2024-06-25T16:58:19.293442Z\"\n        },\n        \"installedPackage-28facac6-b366-4845-a057-b634c0ee206e:200\": {\n          \"id\": \"installedPackage-28facac6-b366-4845-a057-b634c0ee206e:200\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"wuaPackage\": {\n              \"title\": \"Update for Microsoft Defender Antivirus antimalware platform - KB4052623 (Version 4.18.24050.7) - Current Channel (Broad)\",\n              \"description\": \"This package will update Microsoft Defender Antivirus antimalware platform’s components on the user machine.\",\n              \"categories\": [\n                {\n                  \"id\": \"e0789628-ce08-4437-be74-2495b842f43b\",\n                  \"name\": \"Definition Updates\"\n                },\n                {\n                  \"id\": \"8c3fcc84-7410-4a95-8b89-a166a0190486\",\n                  \"name\": \"Microsoft Defender Antivirus\"\n                }\n              ],\n              \"kbArticleIds\": [\n                \"4052623\"\n              ],\n              \"moreInfoUrls\": [\n                \"https://support.microsoft.com/en-us/help/4052623/update-for-windows-defender-antimalware-platform\"\n              ],\n              \"updateId\": \"28facac6-b366-4845-a057-b634c0ee206e\",\n              \"revisionNumber\": 200,\n              \"lastDeploymentChangeTime\": \"2024-06-04T00:00:00Z\",\n              \"supportUrl\": \"https://go.microsoft.com/fwlink/?linkid=862339\"\n            }\n          },\n          \"createTime\": \"2024-06-25T16:58:19.293432Z\"\n        },\n        \"installedPackage-GooGet - googet:2.18.5@0:\": {\n          \"id\": \"installedPackage-GooGet - googet:2.18.5@0:\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"windowsApplication\": {\n              \"displayName\": \"GooGet - googet\",\n              \"displayVersion\": \"2.18.5@0\",\n              \"installDate\": {}\n            }\n          },\n          \"createTime\": \"2024-06-25T16:58:19.293437Z\"\n        },\n        \"installedPackage-GooGet - google-compute-engine-driver-gga:1.1.6@9:\": {\n          \"id\": \"installedPackage-GooGet - google-compute-engine-driver-gga:1.1.6@9:\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"windowsApplication\": {\n              \"displayName\": \"GooGet - google-compute-engine-driver-gga\",\n              \"displayVersion\": \"1.1.6@9\",\n              \"installDate\": {}\n            }\n          },\n          \"createTime\": \"2024-06-25T16:58:19.293440Z\"\n        },\n        \"installedPackage-GooGet - google-compute-engine-windows:20240109.00.0@1:\": {\n          \"id\": \"installedPackage-GooGet - google-compute-engine-windows:20240109.00.0@1:\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"windowsApplication\": {\n              \"displayName\": \"GooGet - google-compute-engine-windows\",\n              \"displayVersion\": \"20240109.00.0@1\",\n              \"installDate\": {}\n            }\n          },\n          \"createTime\": \"2024-06-25T16:58:19.293445Z\"\n        },\n        \"installedPackage-GooGet - google-compute-engine-driver-vioscsi:16.1.8@9:\": {\n          \"id\": \"installedPackage-GooGet - google-compute-engine-driver-vioscsi:16.1.8@9:\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"windowsApplication\": {\n              \"displayName\": \"GooGet - google-compute-engine-driver-vioscsi\",\n              \"displayVersion\": \"16.1.8@9\",\n              \"installDate\": {}\n            }\n          },\n          \"createTime\": \"2024-06-25T16:58:19.293443Z\"\n        },\n        \"installedPackage-b9c6a7ec-27ec-4938-b472-210255dab739:200\": {\n          \"id\": \"installedPackage-b9c6a7ec-27ec-4938-b472-210255dab739:200\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"wuaPackage\": {\n              \"title\": \"2024-05 Cumulative Update for .NET Framework 3.5, 4.8 and 4.8.1 for Microsoft server operating system version 21H2 for x64 (KB5038282)\",\n              \"description\": \"Install this update to resolve issues in Windows. For a complete listing of the issues that are included in this update, see the associated Microsoft Knowledge Base article for more information. After you install this item, you may have to restart your computer.\",\n              \"categories\": [\n                {\n                  \"id\": \"71718f13-7324-4b0f-8f9e-2ca9dc978e53\",\n                  \"name\": \"Microsoft Server operating system-21H2\"\n                },\n                {\n                  \"id\": \"cd5ffd1e-e932-4e3a-bf74-18bf0b1bbd83\",\n                  \"name\": \"Updates\"\n                }\n              ],\n              \"kbArticleIds\": [\n                \"5038282\"\n              ],\n              \"moreInfoUrls\": [\n                \"http://support.microsoft.com/kb/5038282\"\n              ],\n              \"updateId\": \"b9c6a7ec-27ec-4938-b472-210255dab739\",\n              \"revisionNumber\": 200,\n              \"lastDeploymentChangeTime\": \"2024-05-14T00:00:00Z\",\n              \"supportUrl\": \"http://support.microsoft.com\"\n            }\n          },\n          \"createTime\": \"2024-06-25T16:58:19.293430Z\"\n        },\n        \"availablePackage-google-cloud-ops-agent:x86_64:2.48.0@1\": {\n          \"id\": \"availablePackage-google-cloud-ops-agent:x86_64:2.48.0@1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"AVAILABLE_PACKAGE\",\n          \"availablePackage\": {\n            \"googetPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.48.0@1\",\n              \"packageName\": \"google-cloud-ops-agent\"\n            }\n          },\n          \"createTime\": \"2024-06-25T16:58:19.293410Z\"\n        },\n        \"installedPackage-GooGet - google-compute-engine-metadata-scripts:20240109.00.0@1:\": {\n          \"id\": \"installedPackage-GooGet - google-compute-engine-metadata-scripts:20240109.00.0@1:\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"windowsApplication\": {\n              \"displayName\": \"GooGet - google-compute-engine-metadata-scripts\",\n              \"displayVersion\": \"20240109.00.0@1\",\n              \"installDate\": {}\n            }\n          },\n          \"createTime\": \"2024-06-25T16:58:19.293443Z\"\n        },\n        \"installedPackage-PowerShell 7-x64:7.4.2.0:Microsoft Corporation\": {\n          \"id\": \"installedPackage-PowerShell 7-x64:7.4.2.0:Microsoft Corporation\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"windowsApplication\": {\n              \"displayName\": \"PowerShell 7-x64\",\n              \"displayVersion\": \"7.4.2.0\",\n              \"publisher\": \"Microsoft Corporation\",\n              \"installDate\": {\n                \"year\": 2024,\n                \"month\": 5,\n                \"day\": 14\n              },\n              \"helpLink\": \"https://github.com/PowerShell/PowerShell\"\n            }\n          },\n          \"createTime\": \"2024-06-25T16:58:19.293446Z\"\n        },\n        \"installedPackage-google-cloud-ops-agent:x86_64:2.47.0@1\": {\n          \"id\": \"installedPackage-google-cloud-ops-agent:x86_64:2.47.0@1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"googetPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.47.0@1\",\n              \"packageName\": \"google-cloud-ops-agent\"\n            }\n          },\n          \"createTime\": \"2024-06-25T16:58:19.293420Z\"\n        },\n        \"installedPackage-KB5037930\": {\n          \"id\": \"installedPackage-KB5037930\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"qfePackage\": {\n              \"caption\": \"http://support.microsoft.com/?kbid=5037930\",\n              \"description\": \"Update\",\n              \"hotFixId\": \"KB5037930\",\n              \"installTime\": \"2024-05-14T00:00:00Z\"\n            }\n          },\n          \"createTime\": \"2024-06-25T16:58:19.293435Z\"\n        },\n        \"installedPackage-PowerShell 7.4.2.0-x64:7.4.2.0:Microsoft Corporation\": {\n          \"id\": \"installedPackage-PowerShell 7.4.2.0-x64:7.4.2.0:Microsoft Corporation\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"windowsApplication\": {\n              \"displayName\": \"PowerShell 7.4.2.0-x64\",\n              \"displayVersion\": \"7.4.2.0\",\n              \"publisher\": \"Microsoft Corporation\",\n              \"installDate\": {}\n            }\n          },\n          \"createTime\": \"2024-06-25T16:58:19.293447Z\"\n        },\n        \"installedPackage-GooGet - google-compute-engine-driver-balloon:16.1.8@9:\": {\n          \"id\": \"installedPackage-GooGet - google-compute-engine-driver-balloon:16.1.8@9:\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"windowsApplication\": {\n              \"displayName\": \"GooGet - google-compute-engine-driver-balloon\",\n              \"displayVersion\": \"16.1.8@9\",\n              \"installDate\": {}\n            }\n          },\n          \"createTime\": \"2024-06-25T16:58:19.293439Z\"\n        },\n        \"installedPackage-GooGet - google-osconfig-agent:20240320.00.0+win@1:\": {\n          \"id\": \"installedPackage-GooGet - google-osconfig-agent:20240320.00.0+win@1:\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"windowsApplication\": {\n              \"displayName\": \"GooGet - google-osconfig-agent\",\n              \"displayVersion\": \"20240320.00.0+win@1\",\n              \"installDate\": {}\n            }\n          },\n          \"createTime\": \"2024-06-25T16:58:19.293445Z\"\n        },\n        \"installedPackage-googet:x86_64:2.18.5@0\": {\n          \"id\": \"installedPackage-googet:x86_64:2.18.5@0\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"googetPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.18.5@0\",\n              \"packageName\": \"googet\"\n            }\n          },\n          \"createTime\": \"2024-06-25T16:58:19.293420Z\"\n        },\n        \"installedPackage-google-compute-engine-driver-netkvm:x86_64:16.1.8@76\": {\n          \"id\": \"installedPackage-google-compute-engine-driver-netkvm:x86_64:16.1.8@76\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"googetPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"16.1.8@76\",\n              \"packageName\": \"google-compute-engine-driver-netkvm\"\n            }\n          },\n          \"createTime\": \"2024-06-25T16:58:19.293423Z\"\n        },\n        \"installedPackage-GooGet - google-compute-engine-driver-gvnic:1.0.4@73:\": {\n          \"id\": \"installedPackage-GooGet - google-compute-engine-driver-gvnic:1.0.4@73:\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"windowsApplication\": {\n              \"displayName\": \"GooGet - google-compute-engine-driver-gvnic\",\n              \"displayVersion\": \"1.0.4@73\",\n              \"installDate\": {}\n            }\n          },\n          \"createTime\": \"2024-06-25T16:58:19.293441Z\"\n        },\n        \"availablePackage-google-osconfig-agent:x86_64:20240524.03.0+win@1\": {\n          \"id\": \"availablePackage-google-osconfig-agent:x86_64:20240524.03.0+win@1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"AVAILABLE_PACKAGE\",\n          \"availablePackage\": {\n            \"googetPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"20240524.03.0+win@1\",\n              \"packageName\": \"google-osconfig-agent\"\n            }\n          },\n          \"createTime\": \"2024-06-25T16:58:19.293414Z\"\n        },\n        \"installedPackage-a662cc5e-0a69-43e5-9194-ea95dc6708fd:200\": {\n          \"id\": \"installedPackage-a662cc5e-0a69-43e5-9194-ea95dc6708fd:200\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"wuaPackage\": {\n              \"title\": \"Security Intelligence Update for Microsoft Defender Antivirus - KB2267602 (Version 1.413.508.0) - Current Channel (Broad)\",\n              \"description\": \"Install this update to revise the files that are used to detect viruses, spyware, and other potentially unwanted software. Once you have installed this item, it cannot be removed.\",\n              \"categories\": [\n                {\n                  \"id\": \"e0789628-ce08-4437-be74-2495b842f43b\",\n                  \"name\": \"Definition Updates\"\n                },\n                {\n                  \"id\": \"8c3fcc84-7410-4a95-8b89-a166a0190486\",\n                  \"name\": \"Microsoft Defender Antivirus\"\n                }\n              ],\n              \"kbArticleIds\": [\n                \"2267602\"\n              ],\n              \"moreInfoUrls\": [\n                \"https://go.microsoft.com/fwlink/?linkid=2007160\"\n              ],\n              \"updateId\": \"a662cc5e-0a69-43e5-9194-ea95dc6708fd\",\n              \"revisionNumber\": 200,\n              \"lastDeploymentChangeTime\": \"2024-06-25T00:00:00Z\",\n              \"supportUrl\": \"https://go.microsoft.com/fwlink/?LinkId=52661\"\n            }\n          },\n          \"createTime\": \"2024-06-25T16:58:19.293433Z\"\n        },\n        \"installedPackage-google-compute-engine-driver-gga:x86_64:1.1.6@9\": {\n          \"id\": \"installedPackage-google-compute-engine-driver-gga:x86_64:1.1.6@9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"googetPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.1.6@9\",\n              \"packageName\": \"google-compute-engine-driver-gga\"\n            }\n          },\n          \"createTime\": \"2024-06-25T16:58:19.293422Z\"\n        },\n        \"installedPackage-4fd0c6fe-1f2d-4b1f-a588-ef925d55aeed:1\": {\n          \"id\": \"installedPackage-4fd0c6fe-1f2d-4b1f-a588-ef925d55aeed:1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"wuaPackage\": {\n              \"title\": \"2024-06 Cumulative Update for Microsoft server operating system version 21H2 for x64-based Systems (KB5039227)\",\n              \"description\": \"Install this update to resolve issues in Microsoft server operating system, version 21H2. For a complete listing of the issues that are included in this update, see the associated Microsoft Knowledge Base article for more information. After you install this item, you may have to restart your computer.\",\n              \"categories\": [\n                {\n                  \"id\": \"0fa1201d-4330-4fa8-8ae9-b877473b6441\",\n                  \"name\": \"Security Updates\"\n                }\n              ],\n              \"kbArticleIds\": [\n                \"5039227\"\n              ],\n              \"moreInfoUrls\": [\n                \"https://support.microsoft.com/help/5039227\"\n              ],\n              \"updateId\": \"4fd0c6fe-1f2d-4b1f-a588-ef925d55aeed\",\n              \"revisionNumber\": 1,\n              \"lastDeploymentChangeTime\": \"2024-06-11T00:00:00Z\",\n              \"supportUrl\": \"https://support.microsoft.com/help/5039227\"\n            }\n          },\n          \"createTime\": \"2024-06-25T16:58:19.293434Z\"\n        },\n        \"installedPackage-Microsoft Edge:126.0.2592.68:Microsoft Corporation\": {\n          \"id\": \"installedPackage-Microsoft Edge:126.0.2592.68:Microsoft Corporation\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"windowsApplication\": {\n              \"displayName\": \"Microsoft Edge\",\n              \"displayVersion\": \"126.0.2592.68\",\n              \"publisher\": \"Microsoft Corporation\",\n              \"installDate\": {\n                \"year\": 2024,\n                \"month\": 6,\n                \"day\": 22\n              }\n            }\n          },\n          \"createTime\": \"2024-06-25T16:58:19.293447Z\"\n        },\n        \"installedPackage-google-compute-engine-vss:x86_64:1.1.9@56\": {\n          \"id\": \"installedPackage-google-compute-engine-vss:x86_64:1.1.9@56\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"googetPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.1.9@56\",\n              \"packageName\": \"google-compute-engine-vss\"\n            }\n          },\n          \"createTime\": \"2024-06-25T16:58:19.293428Z\"\n        },\n        \"installedPackage-GooGet - google-compute-engine-sysprep:20240122.00@1:\": {\n          \"id\": \"installedPackage-GooGet - google-compute-engine-sysprep:20240122.00@1:\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"windowsApplication\": {\n              \"displayName\": \"GooGet - google-compute-engine-sysprep\",\n              \"displayVersion\": \"20240122.00@1\",\n              \"installDate\": {}\n            }\n          },\n          \"createTime\": \"2024-06-25T16:58:19.293444Z\"\n        },\n        \"installedPackage-google-compute-engine-windows:x86_64:20240109.00.0@1\": {\n          \"id\": \"installedPackage-google-compute-engine-windows:x86_64:20240109.00.0@1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"googetPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"20240109.00.0@1\",\n              \"packageName\": \"google-compute-engine-windows\"\n            }\n          },\n          \"createTime\": \"2024-06-25T16:58:19.293428Z\"\n        },\n        \"installedPackage-google-compute-engine-driver-vioscsi:x86_64:16.1.8@9\": {\n          \"id\": \"installedPackage-google-compute-engine-driver-vioscsi:x86_64:16.1.8@9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"googetPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"16.1.8@9\",\n              \"packageName\": \"google-compute-engine-driver-vioscsi\"\n            }\n          },\n          \"createTime\": \"2024-06-25T16:58:19.293424Z\"\n        },\n        \"installedPackage-GooGet - google-compute-engine-driver-netkvm:16.1.8@76:\": {\n          \"id\": \"installedPackage-GooGet - google-compute-engine-driver-netkvm:16.1.8@76:\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"windowsApplication\": {\n              \"displayName\": \"GooGet - google-compute-engine-driver-netkvm\",\n              \"displayVersion\": \"16.1.8@76\",\n              \"installDate\": {}\n            }\n          },\n          \"createTime\": \"2024-06-25T16:58:19.293442Z\"\n        },\n        \"installedPackage-KB5034439\": {\n          \"id\": \"installedPackage-KB5034439\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"qfePackage\": {\n              \"caption\": \"https://support.microsoft.com/help/5034439\",\n              \"description\": \"Security Update\",\n              \"hotFixId\": \"KB5034439\",\n              \"installTime\": \"2024-05-14T00:00:00Z\"\n            }\n          },\n          \"createTime\": \"2024-06-25T16:58:19.293436Z\"\n        },\n        \"installedPackage-Google Cloud SDK::Google LLC\": {\n          \"id\": \"installedPackage-Google Cloud SDK::Google LLC\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"windowsApplication\": {\n              \"displayName\": \"Google Cloud SDK\",\n              \"publisher\": \"Google LLC\",\n              \"installDate\": {}\n            }\n          },\n          \"createTime\": \"2024-06-25T16:58:19.293446Z\"\n        },\n        \"installedPackage-google-compute-engine-diagnostics:x86_64:1.2.0@0\": {\n          \"id\": \"installedPackage-google-compute-engine-diagnostics:x86_64:1.2.0@0\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"googetPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.2.0@0\",\n              \"packageName\": \"google-compute-engine-diagnostics\"\n            }\n          },\n          \"createTime\": \"2024-06-25T16:58:19.293421Z\"\n        }\n      },\n      \"name\": \"projects/12340051/locations/us-central1-a/instances/1198993196692273760/inventory\",\n      \"updateTime\": \"2024-06-25T17:08:35.382966Z\"\n    },\n    {\n      \"osInfo\": {\n        \"longName\": \"Debian GNU/Linux 10 (buster)\",\n        \"shortName\": \"debian\",\n        \"version\": \"10\",\n        \"architecture\": \"x86_64\",\n        \"kernelVersion\": \"#1 SMP Debian 4.19.304-1 (2024-01-09)\",\n        \"kernelRelease\": \"4.19.0-26-cloud-amd64\",\n        \"osconfigAgentVersion\": \"20240501.03-g1\",\n        \"hostname\": \"instance-legacy-monitoring-installed\"\n      },\n      \"items\": {\n        \"installedPackage-libassuan0:x86_64:2.5.2-1\": {\n          \"id\": \"installedPackage-libassuan0:x86_64:2.5.2-1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.5.2-1\",\n              \"packageName\": \"libassuan0\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578174Z\"\n        },\n        \"installedPackage-libgpm2:x86_64:1.20.7-5\": {\n          \"id\": \"installedPackage-libgpm2:x86_64:1.20.7-5\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.20.7-5\",\n              \"packageName\": \"libgpm2\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578208Z\"\n        },\n        \"installedPackage-python3-debian:all:0.1.35\": {\n          \"id\": \"installedPackage-python3-debian:all:0.1.35\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"0.1.35\",\n              \"packageName\": \"python3-debian\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578313Z\"\n        },\n        \"installedPackage-linux-base:all:4.6\": {\n          \"id\": \"installedPackage-linux-base:all:4.6\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"4.6\",\n              \"packageName\": \"linux-base\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578287Z\"\n        },\n        \"installedPackage-libext2fs2:x86_64:1.44.5-1+deb10u3\": {\n          \"id\": \"installedPackage-libext2fs2:x86_64:1.44.5-1+deb10u3\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.44.5-1+deb10u3\",\n              \"packageName\": \"libext2fs2\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578195Z\"\n        },\n        \"installedPackage-procps:x86_64:2:3.3.15-2\": {\n          \"id\": \"installedPackage-procps:x86_64:2:3.3.15-2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2:3.3.15-2\",\n              \"packageName\": \"procps\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578308Z\"\n        },\n        \"installedPackage-libc6:x86_64:2.28-10+deb10u3\": {\n          \"id\": \"installedPackage-libc6:x86_64:2.28-10+deb10u3\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.28-10+deb10u3\",\n              \"packageName\": \"libc6\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578181Z\"\n        },\n        \"installedPackage-python3-pysimplesoap:all:1.16.2-1\": {\n          \"id\": \"installedPackage-python3-pysimplesoap:all:1.16.2-1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"1.16.2-1\",\n              \"packageName\": \"python3-pysimplesoap\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578318Z\"\n        },\n        \"installedPackage-libgcrypt20:x86_64:1.8.4-5+deb10u1\": {\n          \"id\": \"installedPackage-libgcrypt20:x86_64:1.8.4-5+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.8.4-5+deb10u1\",\n              \"packageName\": \"libgcrypt20\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578203Z\"\n        },\n        \"installedPackage-kmod:x86_64:26-1\": {\n          \"id\": \"installedPackage-kmod:x86_64:26-1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"26-1\",\n              \"packageName\": \"kmod\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578168Z\"\n        },\n        \"installedPackage-libidn11:x86_64:1.33-2.2\": {\n          \"id\": \"installedPackage-libidn11:x86_64:1.33-2.2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.33-2.2\",\n              \"packageName\": \"libidn11\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578211Z\"\n        },\n        \"availablePackage-google-guest-agent:x86_64:1:20240528.00-g1\": {\n          \"id\": \"availablePackage-google-guest-agent:x86_64:1:20240528.00-g1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"AVAILABLE_PACKAGE\",\n          \"availablePackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:20240528.00-g1\",\n              \"packageName\": \"google-guest-agent\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578081Z\"\n        },\n        \"installedPackage-python3-apt:x86_64:1.8.4.3\": {\n          \"id\": \"installedPackage-python3-apt:x86_64:1.8.4.3\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.8.4.3\",\n              \"packageName\": \"python3-apt\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578311Z\"\n        },\n        \"installedPackage-libexpat1:x86_64:2.2.6-2+deb10u7\": {\n          \"id\": \"installedPackage-libexpat1:x86_64:2.2.6-2+deb10u7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.2.6-2+deb10u7\",\n              \"packageName\": \"libexpat1\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578195Z\"\n        },\n        \"installedPackage-dmidecode:x86_64:3.2-1\": {\n          \"id\": \"installedPackage-dmidecode:x86_64:3.2-1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.2-1\",\n              \"packageName\": \"dmidecode\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578125Z\"\n        },\n        \"installedPackage-dash:x86_64:0.5.10.2-5\": {\n          \"id\": \"installedPackage-dash:x86_64:0.5.10.2-5\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.5.10.2-5\",\n              \"packageName\": \"dash\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578103Z\"\n        },\n        \"installedPackage-python3-idna:all:2.6-1+deb10u1\": {\n          \"id\": \"installedPackage-python3-idna:all:2.6-1+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"2.6-1+deb10u1\",\n              \"packageName\": \"python3-idna\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578315Z\"\n        },\n        \"installedPackage-libargon2-1:x86_64:0~20171227-0.2\": {\n          \"id\": \"installedPackage-libargon2-1:x86_64:0~20171227-0.2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0~20171227-0.2\",\n              \"packageName\": \"libargon2-1\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578174Z\"\n        },\n        \"installedPackage-gpgconf:x86_64:2.2.12-1+deb10u2\": {\n          \"id\": \"installedPackage-gpgconf:x86_64:2.2.12-1+deb10u2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.2.12-1+deb10u2\",\n              \"packageName\": \"gpgconf\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578151Z\"\n        },\n        \"installedPackage-libmariadb3:x86_64:1:10.3.39-0+deb10u2\": {\n          \"id\": \"installedPackage-libmariadb3:x86_64:1:10.3.39-0+deb10u2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:10.3.39-0+deb10u2\",\n              \"packageName\": \"libmariadb3\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578233Z\"\n        },\n        \"installedPackage-libfribidi0:x86_64:1.0.5-3.1+deb10u2\": {\n          \"id\": \"installedPackage-libfribidi0:x86_64:1.0.5-3.1+deb10u2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.0.5-3.1+deb10u2\",\n              \"packageName\": \"libfribidi0\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578199Z\"\n        },\n        \"installedPackage-python3:x86_64:3.7.3-1\": {\n          \"id\": \"installedPackage-python3:x86_64:3.7.3-1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.7.3-1\",\n              \"packageName\": \"python3\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578310Z\"\n        },\n        \"installedPackage-libltdl7:x86_64:2.4.6-9\": {\n          \"id\": \"installedPackage-libltdl7:x86_64:2.4.6-9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.4.6-9\",\n              \"packageName\": \"libltdl7\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578226Z\"\n        },\n        \"installedPackage-libmnl0:x86_64:1.0.4-2\": {\n          \"id\": \"installedPackage-libmnl0:x86_64:1.0.4-2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.0.4-2\",\n              \"packageName\": \"libmnl0\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578233Z\"\n        },\n        \"installedPackage-libapt-pkg5.0:x86_64:1.8.2.3\": {\n          \"id\": \"installedPackage-libapt-pkg5.0:x86_64:1.8.2.3\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.8.2.3\",\n              \"packageName\": \"libapt-pkg5.0\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578173Z\"\n        },\n        \"installedPackage-libpython2.7-minimal:x86_64:2.7.16-2+deb10u4\": {\n          \"id\": \"installedPackage-libpython2.7-minimal:x86_64:2.7.16-2+deb10u4\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.7.16-2+deb10u4\",\n              \"packageName\": \"libpython2.7-minimal\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578261Z\"\n        },\n        \"installedPackage-gpgv:x86_64:2.2.12-1+deb10u2\": {\n          \"id\": \"installedPackage-gpgv:x86_64:2.2.12-1+deb10u2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.2.12-1+deb10u2\",\n              \"packageName\": \"gpgv\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578152Z\"\n        },\n        \"installedPackage-bsdutils:x86_64:1:2.33.1-0.1+deb10u1\": {\n          \"id\": \"installedPackage-bsdutils:x86_64:1:2.33.1-0.1+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:2.33.1-0.1+deb10u1\",\n              \"packageName\": \"bsdutils\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578097Z\"\n        },\n        \"installedPackage-libblkid1:x86_64:2.33.1-0.1+deb10u1\": {\n          \"id\": \"installedPackage-libblkid1:x86_64:2.33.1-0.1+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.33.1-0.1+deb10u1\",\n              \"packageName\": \"libblkid1\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578178Z\"\n        },\n        \"installedPackage-libnettle6:x86_64:3.4.1-1+deb10u1\": {\n          \"id\": \"installedPackage-libnettle6:x86_64:3.4.1-1+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.4.1-1+deb10u1\",\n              \"packageName\": \"libnettle6\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578238Z\"\n        },\n        \"installedPackage-e2fsprogs:x86_64:1.44.5-1+deb10u3\": {\n          \"id\": \"installedPackage-e2fsprogs:x86_64:1.44.5-1+deb10u3\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.44.5-1+deb10u3\",\n              \"packageName\": \"e2fsprogs\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578128Z\"\n        },\n        \"installedPackage-libksba8:x86_64:1.3.5-2+deb10u2\": {\n          \"id\": \"installedPackage-libksba8:x86_64:1.3.5-2+deb10u2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.3.5-2+deb10u2\",\n              \"packageName\": \"libksba8\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578221Z\"\n        },\n        \"installedPackage-publicsuffix:all:20220811.1734-0+deb10u1\": {\n          \"id\": \"installedPackage-publicsuffix:all:20220811.1734-0+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"20220811.1734-0+deb10u1\",\n              \"packageName\": \"publicsuffix\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578309Z\"\n        },\n        \"installedPackage-findutils:x86_64:4.6.0+git+20190209-2\": {\n          \"id\": \"installedPackage-findutils:x86_64:4.6.0+git+20190209-2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"4.6.0+git+20190209-2\",\n              \"packageName\": \"findutils\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578134Z\"\n        },\n        \"installedPackage-python3-debianbts:all:2.8.2\": {\n          \"id\": \"installedPackage-python3-debianbts:all:2.8.2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"2.8.2\",\n              \"packageName\": \"python3-debianbts\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578314Z\"\n        },\n        \"installedPackage-libpython2.7-stdlib:x86_64:2.7.16-2+deb10u4\": {\n          \"id\": \"installedPackage-libpython2.7-stdlib:x86_64:2.7.16-2+deb10u4\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.7.16-2+deb10u4\",\n              \"packageName\": \"libpython2.7-stdlib\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578262Z\"\n        },\n        \"installedPackage-libsasl2-2:x86_64:2.1.27+dfsg-1+deb10u2\": {\n          \"id\": \"installedPackage-libsasl2-2:x86_64:2.1.27+dfsg-1+deb10u2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.1.27+dfsg-1+deb10u2\",\n              \"packageName\": \"libsasl2-2\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578267Z\"\n        },\n        \"installedPackage-libsepol1:x86_64:2.8-1\": {\n          \"id\": \"installedPackage-libsepol1:x86_64:2.8-1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.8-1\",\n              \"packageName\": \"libsepol1\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578272Z\"\n        },\n        \"installedPackage-vim-common:all:2:8.1.0875-5+deb10u6\": {\n          \"id\": \"installedPackage-vim-common:all:2:8.1.0875-5+deb10u6\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"2:8.1.0875-5+deb10u6\",\n              \"packageName\": \"vim-common\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578337Z\"\n        },\n        \"installedPackage-libestr0:x86_64:0.1.10-2.1\": {\n          \"id\": \"installedPackage-libestr0:x86_64:0.1.10-2.1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.1.10-2.1\",\n              \"packageName\": \"libestr0\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578193Z\"\n        },\n        \"installedPackage-ncurses-base:all:6.1+20181013-2+deb10u5\": {\n          \"id\": \"installedPackage-ncurses-base:all:6.1+20181013-2+deb10u5\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"6.1+20181013-2+deb10u5\",\n              \"packageName\": \"ncurses-base\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578299Z\"\n        },\n        \"installedPackage-libnghttp2-14:x86_64:1.36.0-2+deb10u3\": {\n          \"id\": \"installedPackage-libnghttp2-14:x86_64:1.36.0-2+deb10u3\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.36.0-2+deb10u3\",\n              \"packageName\": \"libnghttp2-14\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578246Z\"\n        },\n        \"installedPackage-hostname:x86_64:3.21\": {\n          \"id\": \"installedPackage-hostname:x86_64:3.21\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.21\",\n              \"packageName\": \"hostname\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578160Z\"\n        },\n        \"installedPackage-libunistring2:x86_64:0.9.10-1\": {\n          \"id\": \"installedPackage-libunistring2:x86_64:0.9.10-1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.9.10-1\",\n              \"packageName\": \"libunistring2\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578281Z\"\n        },\n        \"installedPackage-libapt-inst2.0:x86_64:1.8.2.3\": {\n          \"id\": \"installedPackage-libapt-inst2.0:x86_64:1.8.2.3\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.8.2.3\",\n              \"packageName\": \"libapt-inst2.0\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578171Z\"\n        },\n        \"installedPackage-lsb-release:all:10.2019051400\": {\n          \"id\": \"installedPackage-lsb-release:all:10.2019051400\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"10.2019051400\",\n              \"packageName\": \"lsb-release\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578291Z\"\n        },\n        \"installedPackage-less:x86_64:487-0.1+deb10u1\": {\n          \"id\": \"installedPackage-less:x86_64:487-0.1+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"487-0.1+deb10u1\",\n              \"packageName\": \"less\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578169Z\"\n        },\n        \"installedPackage-initramfs-tools:all:0.133+deb10u1\": {\n          \"id\": \"installedPackage-initramfs-tools:all:0.133+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"0.133+deb10u1\",\n              \"packageName\": \"initramfs-tools\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578163Z\"\n        },\n        \"installedPackage-libgmp10:x86_64:2:6.1.2+dfsg-4+deb10u1\": {\n          \"id\": \"installedPackage-libgmp10:x86_64:2:6.1.2+dfsg-4+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2:6.1.2+dfsg-4+deb10u1\",\n              \"packageName\": \"libgmp10\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578205Z\"\n        },\n        \"installedPackage-libnfnetlink0:x86_64:1.0.1-3+b1\": {\n          \"id\": \"installedPackage-libnfnetlink0:x86_64:1.0.1-3+b1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.0.1-3+b1\",\n              \"packageName\": \"libnfnetlink0\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578244Z\"\n        },\n        \"installedPackage-libunbound8:x86_64:1.9.0-2+deb10u4\": {\n          \"id\": \"installedPackage-libunbound8:x86_64:1.9.0-2+deb10u4\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.9.0-2+deb10u4\",\n              \"packageName\": \"libunbound8\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578281Z\"\n        },\n        \"installedPackage-python3-distro-info:all:0.21+deb10u1\": {\n          \"id\": \"installedPackage-python3-distro-info:all:0.21+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"0.21+deb10u1\",\n              \"packageName\": \"python3-distro-info\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578314Z\"\n        },\n        \"installedPackage-mime-support:all:3.62\": {\n          \"id\": \"installedPackage-mime-support:all:3.62\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"3.62\",\n              \"packageName\": \"mime-support\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578295Z\"\n        },\n        \"installedPackage-libdbus-1-3:x86_64:1.12.28-0+deb10u1\": {\n          \"id\": \"installedPackage-libdbus-1-3:x86_64:1.12.28-0+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.12.28-0+deb10u1\",\n              \"packageName\": \"libdbus-1-3\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578187Z\"\n        },\n        \"installedPackage-libudev1:x86_64:241-7~deb10u10\": {\n          \"id\": \"installedPackage-libudev1:x86_64:241-7~deb10u10\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"241-7~deb10u10\",\n              \"packageName\": \"libudev1\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578280Z\"\n        },\n        \"installedPackage-exim4-daemon-light:x86_64:4.92-8+deb10u9\": {\n          \"id\": \"installedPackage-exim4-daemon-light:x86_64:4.92-8+deb10u9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"4.92-8+deb10u9\",\n              \"packageName\": \"exim4-daemon-light\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578131Z\"\n        },\n        \"installedPackage-libidn2-0:x86_64:2.0.5-1+deb10u1\": {\n          \"id\": \"installedPackage-libidn2-0:x86_64:2.0.5-1+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.0.5-1+deb10u1\",\n              \"packageName\": \"libidn2-0\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578212Z\"\n        },\n        \"installedPackage-gpgsm:x86_64:2.2.12-1+deb10u2\": {\n          \"id\": \"installedPackage-gpgsm:x86_64:2.2.12-1+deb10u2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.2.12-1+deb10u2\",\n              \"packageName\": \"gpgsm\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578152Z\"\n        },\n        \"installedPackage-libp11-kit0:x86_64:0.23.15-2+deb10u1\": {\n          \"id\": \"installedPackage-libp11-kit0:x86_64:0.23.15-2+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.23.15-2+deb10u1\",\n              \"packageName\": \"libp11-kit0\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578248Z\"\n        },\n        \"installedPackage-grub-pc-bin:x86_64:2.06-3~deb10u4\": {\n          \"id\": \"installedPackage-grub-pc-bin:x86_64:2.06-3~deb10u4\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.06-3~deb10u4\",\n              \"packageName\": \"grub-pc-bin\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578157Z\"\n        },\n        \"installedPackage-libfdisk1:x86_64:2.33.1-0.1+deb10u1\": {\n          \"id\": \"installedPackage-libfdisk1:x86_64:2.33.1-0.1+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.33.1-0.1+deb10u1\",\n              \"packageName\": \"libfdisk1\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578197Z\"\n        },\n        \"installedPackage-perl-base:x86_64:5.28.1-6+deb10u1\": {\n          \"id\": \"installedPackage-perl-base:x86_64:5.28.1-6+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"5.28.1-6+deb10u1\",\n              \"packageName\": \"perl-base\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578307Z\"\n        },\n        \"installedPackage-gcc-8-base:x86_64:8.3.0-6\": {\n          \"id\": \"installedPackage-gcc-8-base:x86_64:8.3.0-6\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"8.3.0-6\",\n              \"packageName\": \"gcc-8-base\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578134Z\"\n        },\n        \"installedPackage-libcap2:x86_64:1:2.25-2\": {\n          \"id\": \"installedPackage-libcap2:x86_64:1:2.25-2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:2.25-2\",\n              \"packageName\": \"libcap2\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578183Z\"\n        },\n        \"installedPackage-libtasn1-6:x86_64:4.13-3+deb10u1\": {\n          \"id\": \"installedPackage-libtasn1-6:x86_64:4.13-3+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"4.13-3+deb10u1\",\n              \"packageName\": \"libtasn1-6\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578278Z\"\n        },\n        \"installedPackage-iproute2:x86_64:4.20.0-2+deb10u1\": {\n          \"id\": \"installedPackage-iproute2:x86_64:4.20.0-2+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"4.20.0-2+deb10u1\",\n              \"packageName\": \"iproute2\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578165Z\"\n        },\n        \"installedPackage-libldap-common:all:2.4.47+dfsg-3+deb10u7\": {\n          \"id\": \"installedPackage-libldap-common:all:2.4.47+dfsg-3+deb10u7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"2.4.47+dfsg-3+deb10u7\",\n              \"packageName\": \"libldap-common\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578224Z\"\n        },\n        \"installedPackage-systemd-sysv:x86_64:241-7~deb10u10\": {\n          \"id\": \"installedPackage-systemd-sysv:x86_64:241-7~deb10u10\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"241-7~deb10u10\",\n              \"packageName\": \"systemd-sysv\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578330Z\"\n        },\n        \"installedPackage-login:x86_64:1:4.5-1.1\": {\n          \"id\": \"installedPackage-login:x86_64:1:4.5-1.1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:4.5-1.1\",\n              \"packageName\": \"login\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578289Z\"\n        },\n        \"installedPackage-grub-cloud-amd64:x86_64:0.0.4\": {\n          \"id\": \"installedPackage-grub-cloud-amd64:x86_64:0.0.4\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.0.4\",\n              \"packageName\": \"grub-cloud-amd64\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578154Z\"\n        },\n        \"installedPackage-chrony:x86_64:3.4-4+deb10u2\": {\n          \"id\": \"installedPackage-chrony:x86_64:3.4-4+deb10u2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.4-4+deb10u2\",\n              \"packageName\": \"chrony\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578099Z\"\n        },\n        \"installedPackage-gzip:x86_64:1.9-3+deb10u1\": {\n          \"id\": \"installedPackage-gzip:x86_64:1.9-3+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.9-3+deb10u1\",\n              \"packageName\": \"gzip\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578159Z\"\n        },\n        \"installedPackage-libhogweed4:x86_64:3.4.1-1+deb10u1\": {\n          \"id\": \"installedPackage-libhogweed4:x86_64:3.4.1-1+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.4.1-1+deb10u1\",\n              \"packageName\": \"libhogweed4\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578210Z\"\n        },\n        \"installedPackage-libicu63:x86_64:63.1-6+deb10u3\": {\n          \"id\": \"installedPackage-libicu63:x86_64:63.1-6+deb10u3\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"63.1-6+deb10u3\",\n              \"packageName\": \"libicu63\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578211Z\"\n        },\n        \"installedPackage-grep:x86_64:3.3-1\": {\n          \"id\": \"installedPackage-grep:x86_64:3.3-1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.3-1\",\n              \"packageName\": \"grep\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578153Z\"\n        },\n        \"installedPackage-libc-bin:x86_64:2.28-10+deb10u3\": {\n          \"id\": \"installedPackage-libc-bin:x86_64:2.28-10+deb10u3\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.28-10+deb10u3\",\n              \"packageName\": \"libc-bin\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578181Z\"\n        },\n        \"installedPackage-grub-common:x86_64:2.06-3~deb10u4\": {\n          \"id\": \"installedPackage-grub-common:x86_64:2.06-3~deb10u4\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.06-3~deb10u4\",\n              \"packageName\": \"grub-common\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578155Z\"\n        },\n        \"installedPackage-gpg-wks-server:x86_64:2.2.12-1+deb10u2\": {\n          \"id\": \"installedPackage-gpg-wks-server:x86_64:2.2.12-1+deb10u2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.2.12-1+deb10u2\",\n              \"packageName\": \"gpg-wks-server\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578150Z\"\n        },\n        \"installedPackage-libpam-modules:x86_64:1.3.1-5\": {\n          \"id\": \"installedPackage-libpam-modules:x86_64:1.3.1-5\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.3.1-5\",\n              \"packageName\": \"libpam-modules\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578250Z\"\n        },\n        \"installedPackage-uuid-runtime:x86_64:2.33.1-0.1+deb10u1\": {\n          \"id\": \"installedPackage-uuid-runtime:x86_64:2.33.1-0.1+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.33.1-0.1+deb10u1\",\n              \"packageName\": \"uuid-runtime\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578336Z\"\n        },\n        \"installedPackage-libkrb5-3:x86_64:1.17-3+deb10u6\": {\n          \"id\": \"installedPackage-libkrb5-3:x86_64:1.17-3+deb10u6\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.17-3+deb10u6\",\n              \"packageName\": \"libkrb5-3\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578220Z\"\n        },\n        \"installedPackage-librtmp1:x86_64:2.4+20151223.gitfa8646d.1-2\": {\n          \"id\": \"installedPackage-librtmp1:x86_64:2.4+20151223.gitfa8646d.1-2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.4+20151223.gitfa8646d.1-2\",\n              \"packageName\": \"librtmp1\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578266Z\"\n        },\n        \"installedPackage-libpam-runtime:all:1.3.1-5\": {\n          \"id\": \"installedPackage-libpam-runtime:all:1.3.1-5\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"1.3.1-5\",\n              \"packageName\": \"libpam-runtime\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578251Z\"\n        },\n        \"installedPackage-libmagic1:x86_64:1:5.35-4+deb10u2\": {\n          \"id\": \"installedPackage-libmagic1:x86_64:1:5.35-4+deb10u2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:5.35-4+deb10u2\",\n              \"packageName\": \"libmagic1\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578231Z\"\n        },\n        \"installedPackage-libgeoip1:x86_64:1.6.12-1\": {\n          \"id\": \"installedPackage-libgeoip1:x86_64:1.6.12-1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.6.12-1\",\n              \"packageName\": \"libgeoip1\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578204Z\"\n        },\n        \"installedPackage-libpam-cap:x86_64:1:2.25-2\": {\n          \"id\": \"installedPackage-libpam-cap:x86_64:1:2.25-2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:2.25-2\",\n              \"packageName\": \"libpam-cap\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578249Z\"\n        },\n        \"installedPackage-bash:x86_64:5.0-4\": {\n          \"id\": \"installedPackage-bash:x86_64:5.0-4\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"5.0-4\",\n              \"packageName\": \"bash\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578094Z\"\n        },\n        \"installedPackage-gnupg-utils:x86_64:2.2.12-1+deb10u2\": {\n          \"id\": \"installedPackage-gnupg-utils:x86_64:2.2.12-1+deb10u2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.2.12-1+deb10u2\",\n              \"packageName\": \"gnupg-utils\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578140Z\"\n        },\n        \"installedPackage-shim-signed:x86_64:1.39~1+deb10u1+15.7-1~deb10u1\": {\n          \"id\": \"installedPackage-shim-signed:x86_64:1.39~1+deb10u1+15.7-1~deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.39~1+deb10u1+15.7-1~deb10u1\",\n              \"packageName\": \"shim-signed\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578327Z\"\n        },\n        \"installedPackage-libsemanage-common:all:2.8-2\": {\n          \"id\": \"installedPackage-libsemanage-common:all:2.8-2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"2.8-2\",\n              \"packageName\": \"libsemanage-common\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578270Z\"\n        },\n        \"installedPackage-libcap-ng0:x86_64:0.7.9-2\": {\n          \"id\": \"installedPackage-libcap-ng0:x86_64:0.7.9-2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.7.9-2\",\n              \"packageName\": \"libcap-ng0\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578182Z\"\n        },\n        \"installedPackage-shim-signed-common:all:1.39~1+deb10u1+15.7-1~deb10u1\": {\n          \"id\": \"installedPackage-shim-signed-common:all:1.39~1+deb10u1+15.7-1~deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"1.39~1+deb10u1+15.7-1~deb10u1\",\n              \"packageName\": \"shim-signed-common\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578327Z\"\n        },\n        \"installedPackage-gpg-agent:x86_64:2.2.12-1+deb10u2\": {\n          \"id\": \"installedPackage-gpg-agent:x86_64:2.2.12-1+deb10u2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.2.12-1+deb10u2\",\n              \"packageName\": \"gpg-agent\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578149Z\"\n        },\n        \"installedPackage-libbsd0:x86_64:0.9.1-2+deb10u1\": {\n          \"id\": \"installedPackage-libbsd0:x86_64:0.9.1-2+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.9.1-2+deb10u1\",\n              \"packageName\": \"libbsd0\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578179Z\"\n        },\n        \"installedPackage-libgcc1:x86_64:1:8.3.0-6\": {\n          \"id\": \"installedPackage-libgcc1:x86_64:1:8.3.0-6\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:8.3.0-6\",\n              \"packageName\": \"libgcc1\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578202Z\"\n        },\n        \"installedPackage-libyajl2:x86_64:2.1.0-3+deb10u2\": {\n          \"id\": \"installedPackage-libyajl2:x86_64:2.1.0-3+deb10u2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.1.0-3+deb10u2\",\n              \"packageName\": \"libyajl2\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578285Z\"\n        },\n        \"installedPackage-mailutils:x86_64:1:3.5-4\": {\n          \"id\": \"installedPackage-mailutils:x86_64:1:3.5-4\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:3.5-4\",\n              \"packageName\": \"mailutils\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578292Z\"\n        },\n        \"installedPackage-tar:x86_64:1.30+dfsg-6+deb10u1\": {\n          \"id\": \"installedPackage-tar:x86_64:1.30+dfsg-6+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.30+dfsg-6+deb10u1\",\n              \"packageName\": \"tar\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578331Z\"\n        },\n        \"installedPackage-dirmngr:x86_64:2.2.12-1+deb10u2\": {\n          \"id\": \"installedPackage-dirmngr:x86_64:2.2.12-1+deb10u2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.2.12-1+deb10u2\",\n              \"packageName\": \"dirmngr\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578123Z\"\n        },\n        \"installedPackage-apt-listchanges:all:3.19\": {\n          \"id\": \"installedPackage-apt-listchanges:all:3.19\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"3.19\",\n              \"packageName\": \"apt-listchanges\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578090Z\"\n        },\n        \"installedPackage-libwrap0:x86_64:7.6.q-28\": {\n          \"id\": \"installedPackage-libwrap0:x86_64:7.6.q-28\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"7.6.q-28\",\n              \"packageName\": \"libwrap0\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578283Z\"\n        },\n        \"installedPackage-pinentry-curses:x86_64:1.1.0-2\": {\n          \"id\": \"installedPackage-pinentry-curses:x86_64:1.1.0-2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.1.0-2\",\n              \"packageName\": \"pinentry-curses\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578307Z\"\n        },\n        \"installedPackage-ucf:all:3.0038+nmu1\": {\n          \"id\": \"installedPackage-ucf:all:3.0038+nmu1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"3.0038+nmu1\",\n              \"packageName\": \"ucf\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578334Z\"\n        },\n        \"installedPackage-libprotobuf-c1:x86_64:1.3.1-1+b1\": {\n          \"id\": \"installedPackage-libprotobuf-c1:x86_64:1.3.1-1+b1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.3.1-1+b1\",\n              \"packageName\": \"libprotobuf-c1\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578259Z\"\n        },\n        \"installedPackage-nano:x86_64:3.2-3+deb10u1\": {\n          \"id\": \"installedPackage-nano:x86_64:3.2-3+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.2-3+deb10u1\",\n              \"packageName\": \"nano\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578298Z\"\n        },\n        \"installedPackage-dmsetup:x86_64:2:1.02.155-3\": {\n          \"id\": \"installedPackage-dmsetup:x86_64:2:1.02.155-3\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2:1.02.155-3\",\n              \"packageName\": \"dmsetup\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578126Z\"\n        },\n        \"installedPackage-libgpg-error0:x86_64:1.35-1\": {\n          \"id\": \"installedPackage-libgpg-error0:x86_64:1.35-1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.35-1\",\n              \"packageName\": \"libgpg-error0\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578208Z\"\n        },\n        \"installedPackage-gdisk:x86_64:1.0.3-1.1\": {\n          \"id\": \"installedPackage-gdisk:x86_64:1.0.3-1.1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.0.3-1.1\",\n              \"packageName\": \"gdisk\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578136Z\"\n        },\n        \"installedPackage-openssh-sftp-server:x86_64:1:7.9p1-10+deb10u4\": {\n          \"id\": \"installedPackage-openssh-sftp-server:x86_64:1:7.9p1-10+deb10u4\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:7.9p1-10+deb10u4\",\n              \"packageName\": \"openssh-sftp-server\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578303Z\"\n        },\n        \"installedPackage-libattr1:x86_64:1:2.4.48-4\": {\n          \"id\": \"installedPackage-libattr1:x86_64:1:2.4.48-4\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:2.4.48-4\",\n              \"packageName\": \"libattr1\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578176Z\"\n        },\n        \"installedPackage-libfreetype6:x86_64:2.9.1-3+deb10u3\": {\n          \"id\": \"installedPackage-libfreetype6:x86_64:2.9.1-3+deb10u3\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.9.1-3+deb10u3\",\n              \"packageName\": \"libfreetype6\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578199Z\"\n        },\n        \"installedPackage-python3-certifi:all:2018.8.24-1\": {\n          \"id\": \"installedPackage-python3-certifi:all:2018.8.24-1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"2018.8.24-1\",\n              \"packageName\": \"python3-certifi\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578311Z\"\n        },\n        \"installedPackage-libpython2.7:x86_64:2.7.16-2+deb10u4\": {\n          \"id\": \"installedPackage-libpython2.7:x86_64:2.7.16-2+deb10u4\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.7.16-2+deb10u4\",\n              \"packageName\": \"libpython2.7\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578261Z\"\n        },\n        \"installedPackage-libseccomp2:x86_64:2.3.3-4\": {\n          \"id\": \"installedPackage-libseccomp2:x86_64:2.3.3-4\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.3.3-4\",\n              \"packageName\": \"libseccomp2\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578269Z\"\n        },\n        \"installedPackage-sudo:x86_64:1.8.27-1+deb10u6\": {\n          \"id\": \"installedPackage-sudo:x86_64:1.8.27-1+deb10u6\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.8.27-1+deb10u6\",\n              \"packageName\": \"sudo\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578329Z\"\n        },\n        \"installedPackage-python3-debconf:all:1.5.71+deb10u1\": {\n          \"id\": \"installedPackage-python3-debconf:all:1.5.71+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"1.5.71+deb10u1\",\n              \"packageName\": \"python3-debconf\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578313Z\"\n        },\n        \"installedPackage-unattended-upgrades:all:1.11.2\": {\n          \"id\": \"installedPackage-unattended-upgrades:all:1.11.2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"1.11.2\",\n              \"packageName\": \"unattended-upgrades\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578335Z\"\n        },\n        \"installedPackage-gnupg-l10n:all:2.2.12-1+deb10u2\": {\n          \"id\": \"installedPackage-gnupg-l10n:all:2.2.12-1+deb10u2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"2.2.12-1+deb10u2\",\n              \"packageName\": \"gnupg-l10n\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578140Z\"\n        },\n        \"installedPackage-libpipeline1:x86_64:1.5.1-2\": {\n          \"id\": \"installedPackage-libpipeline1:x86_64:1.5.1-2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.5.1-2\",\n              \"packageName\": \"libpipeline1\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578257Z\"\n        },\n        \"installedPackage-exim4-base:x86_64:4.92-8+deb10u9\": {\n          \"id\": \"installedPackage-exim4-base:x86_64:4.92-8+deb10u9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"4.92-8+deb10u9\",\n              \"packageName\": \"exim4-base\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578130Z\"\n        },\n        \"installedPackage-python3-minimal:x86_64:3.7.3-1\": {\n          \"id\": \"installedPackage-python3-minimal:x86_64:3.7.3-1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.7.3-1\",\n              \"packageName\": \"python3-minimal\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578316Z\"\n        },\n        \"installedPackage-libmagic-mgc:x86_64:1:5.35-4+deb10u2\": {\n          \"id\": \"installedPackage-libmagic-mgc:x86_64:1:5.35-4+deb10u2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:5.35-4+deb10u2\",\n              \"packageName\": \"libmagic-mgc\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578230Z\"\n        },\n        \"installedPackage-python3-reportbug:all:7.5.3~deb10u2\": {\n          \"id\": \"installedPackage-python3-reportbug:all:7.5.3~deb10u2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"7.5.3~deb10u2\",\n              \"packageName\": \"python3-reportbug\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578319Z\"\n        },\n        \"installedPackage-reportbug:all:7.5.3~deb10u2\": {\n          \"id\": \"installedPackage-reportbug:all:7.5.3~deb10u2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"7.5.3~deb10u2\",\n              \"packageName\": \"reportbug\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578323Z\"\n        },\n        \"installedPackage-libkeyutils1:x86_64:1.6-6\": {\n          \"id\": \"installedPackage-libkeyutils1:x86_64:1.6-6\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.6-6\",\n              \"packageName\": \"libkeyutils1\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578218Z\"\n        },\n        \"installedPackage-libpam-systemd:x86_64:241-7~deb10u10\": {\n          \"id\": \"installedPackage-libpam-systemd:x86_64:241-7~deb10u10\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"241-7~deb10u10\",\n              \"packageName\": \"libpam-systemd\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578252Z\"\n        },\n        \"installedPackage-google-compute-engine-oslogin:x86_64:1:20240415.00-g1+deb10\": {\n          \"id\": \"installedPackage-google-compute-engine-oslogin:x86_64:1:20240415.00-g1+deb10\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:20240415.00-g1+deb10\",\n              \"packageName\": \"google-compute-engine-oslogin\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578145Z\"\n        },\n        \"installedPackage-mount:x86_64:2.33.1-0.1+deb10u1\": {\n          \"id\": \"installedPackage-mount:x86_64:2.33.1-0.1+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.33.1-0.1+deb10u1\",\n              \"packageName\": \"mount\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578297Z\"\n        },\n        \"installedPackage-bash-completion:all:1:2.8-6\": {\n          \"id\": \"installedPackage-bash-completion:all:1:2.8-6\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"1:2.8-6\",\n              \"packageName\": \"bash-completion\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578094Z\"\n        },\n        \"installedPackage-libpam-modules-bin:x86_64:1.3.1-5\": {\n          \"id\": \"installedPackage-libpam-modules-bin:x86_64:1.3.1-5\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.3.1-5\",\n              \"packageName\": \"libpam-modules-bin\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578250Z\"\n        },\n        \"installedPackage-exim4-config:all:4.92-8+deb10u9\": {\n          \"id\": \"installedPackage-exim4-config:all:4.92-8+deb10u9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"4.92-8+deb10u9\",\n              \"packageName\": \"exim4-config\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578131Z\"\n        },\n        \"installedPackage-libuchardet0:x86_64:0.0.6-3\": {\n          \"id\": \"installedPackage-libuchardet0:x86_64:0.0.6-3\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.0.6-3\",\n              \"packageName\": \"libuchardet0\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578279Z\"\n        },\n        \"installedPackage-libxml2:x86_64:2.9.4+dfsg1-7+deb10u6\": {\n          \"id\": \"installedPackage-libxml2:x86_64:2.9.4+dfsg1-7+deb10u6\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.9.4+dfsg1-7+deb10u6\",\n              \"packageName\": \"libxml2\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578284Z\"\n        },\n        \"installedPackage-libpopt0:x86_64:1.16-12\": {\n          \"id\": \"installedPackage-libpopt0:x86_64:1.16-12\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.16-12\",\n              \"packageName\": \"libpopt0\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578258Z\"\n        },\n        \"installedPackage-libkyotocabinet16v5:x86_64:1.2.76-4.2+b1\": {\n          \"id\": \"installedPackage-libkyotocabinet16v5:x86_64:1.2.76-4.2+b1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.2.76-4.2+b1\",\n              \"packageName\": \"libkyotocabinet16v5\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578222Z\"\n        },\n        \"installedPackage-whiptail:x86_64:0.52.20-8\": {\n          \"id\": \"installedPackage-whiptail:x86_64:0.52.20-8\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.52.20-8\",\n              \"packageName\": \"whiptail\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578340Z\"\n        },\n        \"installedPackage-libnewt0.52:x86_64:0.52.20-8\": {\n          \"id\": \"installedPackage-libnewt0.52:x86_64:0.52.20-8\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.52.20-8\",\n              \"packageName\": \"libnewt0.52\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578243Z\"\n        },\n        \"installedPackage-libgc1c2:x86_64:1:7.6.4-0.4\": {\n          \"id\": \"installedPackage-libgc1c2:x86_64:1:7.6.4-0.4\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:7.6.4-0.4\",\n              \"packageName\": \"libgc1c2\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578201Z\"\n        },\n        \"installedPackage-libpcre2-8-0:x86_64:10.32-5+deb10u1\": {\n          \"id\": \"installedPackage-libpcre2-8-0:x86_64:10.32-5+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"10.32-5+deb10u1\",\n              \"packageName\": \"libpcre2-8-0\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578255Z\"\n        },\n        \"installedPackage-ncurses-bin:x86_64:6.1+20181013-2+deb10u5\": {\n          \"id\": \"installedPackage-ncurses-bin:x86_64:6.1+20181013-2+deb10u5\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"6.1+20181013-2+deb10u5\",\n              \"packageName\": \"ncurses-bin\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578299Z\"\n        },\n        \"installedPackage-screen:x86_64:4.6.2-3+deb10u1\": {\n          \"id\": \"installedPackage-screen:x86_64:4.6.2-3+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"4.6.2-3+deb10u1\",\n              \"packageName\": \"screen\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578324Z\"\n        },\n        \"installedPackage-libbz2-1.0:x86_64:1.0.6-9.2~deb10u2\": {\n          \"id\": \"installedPackage-libbz2-1.0:x86_64:1.0.6-9.2~deb10u2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.0.6-9.2~deb10u2\",\n              \"packageName\": \"libbz2-1.0\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578180Z\"\n        },\n        \"installedPackage-libsmartcols1:x86_64:2.33.1-0.1+deb10u1\": {\n          \"id\": \"installedPackage-libsmartcols1:x86_64:2.33.1-0.1+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.33.1-0.1+deb10u1\",\n              \"packageName\": \"libsmartcols1\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578273Z\"\n        },\n        \"installedPackage-dpkg:x86_64:1.19.8\": {\n          \"id\": \"installedPackage-dpkg:x86_64:1.19.8\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.19.8\",\n              \"packageName\": \"dpkg\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578127Z\"\n        },\n        \"installedPackage-systemd:x86_64:241-7~deb10u10\": {\n          \"id\": \"installedPackage-systemd:x86_64:241-7~deb10u10\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"241-7~deb10u10\",\n              \"packageName\": \"systemd\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578330Z\"\n        },\n        \"installedPackage-liblwres161:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u11\": {\n          \"id\": \"installedPackage-liblwres161:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u11\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:9.11.5.P4+dfsg-5.1+deb10u11\",\n              \"packageName\": \"liblwres161\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578227Z\"\n        },\n        \"installedPackage-python3-pycurl:x86_64:7.43.0.2-0.1\": {\n          \"id\": \"installedPackage-python3-pycurl:x86_64:7.43.0.2-0.1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"7.43.0.2-0.1\",\n              \"packageName\": \"python3-pycurl\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578318Z\"\n        },\n        \"installedPackage-debian-archive-keyring:all:2019.1+deb10u2\": {\n          \"id\": \"installedPackage-debian-archive-keyring:all:2019.1+deb10u2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"2019.1+deb10u2\",\n              \"packageName\": \"debian-archive-keyring\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578121Z\"\n        },\n        \"installedPackage-man-db:x86_64:2.8.5-2+deb10u1\": {\n          \"id\": \"installedPackage-man-db:x86_64:2.8.5-2+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.8.5-2+deb10u1\",\n              \"packageName\": \"man-db\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578293Z\"\n        },\n        \"installedPackage-vim-runtime:all:2:8.1.0875-5+deb10u6\": {\n          \"id\": \"installedPackage-vim-runtime:all:2:8.1.0875-5+deb10u6\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"2:8.1.0875-5+deb10u6\",\n              \"packageName\": \"vim-runtime\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578338Z\"\n        },\n        \"installedPackage-python3-httplib2:all:0.11.3-2\": {\n          \"id\": \"installedPackage-python3-httplib2:all:0.11.3-2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"0.11.3-2\",\n              \"packageName\": \"python3-httplib2\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578315Z\"\n        },\n        \"installedPackage-libldap-2.4-2:x86_64:2.4.47+dfsg-3+deb10u7\": {\n          \"id\": \"installedPackage-libldap-2.4-2:x86_64:2.4.47+dfsg-3+deb10u7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.4.47+dfsg-3+deb10u7\",\n              \"packageName\": \"libldap-2.4-2\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578223Z\"\n        },\n        \"installedPackage-groff-base:x86_64:1.22.4-3+deb10u1\": {\n          \"id\": \"installedPackage-groff-base:x86_64:1.22.4-3+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.22.4-3+deb10u1\",\n              \"packageName\": \"groff-base\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578154Z\"\n        },\n        \"installedPackage-libisccc161:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u11\": {\n          \"id\": \"installedPackage-libisccc161:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u11\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:9.11.5.P4+dfsg-5.1+deb10u11\",\n              \"packageName\": \"libisccc161\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578215Z\"\n        },\n        \"installedPackage-netbase:all:5.6\": {\n          \"id\": \"installedPackage-netbase:all:5.6\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"5.6\",\n              \"packageName\": \"netbase\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578301Z\"\n        },\n        \"installedPackage-libbind9-161:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u11\": {\n          \"id\": \"installedPackage-libbind9-161:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u11\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:9.11.5.P4+dfsg-5.1+deb10u11\",\n              \"packageName\": \"libbind9-161\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578178Z\"\n        },\n        \"installedPackage-libfl2:x86_64:2.6.4-6.2\": {\n          \"id\": \"installedPackage-libfl2:x86_64:2.6.4-6.2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.6.4-6.2\",\n              \"packageName\": \"libfl2\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578198Z\"\n        },\n        \"installedPackage-python3-urllib3:all:1.24.1-1+deb10u2\": {\n          \"id\": \"installedPackage-python3-urllib3:all:1.24.1-1+deb10u2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"1.24.1-1+deb10u2\",\n              \"packageName\": \"python3-urllib3\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578321Z\"\n        },\n        \"installedPackage-python3.7-minimal:x86_64:3.7.3-2+deb10u7\": {\n          \"id\": \"installedPackage-python3.7-minimal:x86_64:3.7.3-2+deb10u7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.7.3-2+deb10u7\",\n              \"packageName\": \"python3.7-minimal\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578322Z\"\n        },\n        \"installedPackage-psmisc:x86_64:23.2-1+deb10u1\": {\n          \"id\": \"installedPackage-psmisc:x86_64:23.2-1+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"23.2-1+deb10u1\",\n              \"packageName\": \"psmisc\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578308Z\"\n        },\n        \"installedPackage-liblmdb0:x86_64:0.9.22-1\": {\n          \"id\": \"installedPackage-liblmdb0:x86_64:0.9.22-1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.9.22-1\",\n              \"packageName\": \"liblmdb0\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578224Z\"\n        },\n        \"installedPackage-liblzo2-2:x86_64:2.10-0.1\": {\n          \"id\": \"installedPackage-liblzo2-2:x86_64:2.10-0.1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.10-0.1\",\n              \"packageName\": \"liblzo2-2\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578229Z\"\n        },\n        \"installedPackage-libaudit-common:all:1:2.8.4-3\": {\n          \"id\": \"installedPackage-libaudit-common:all:1:2.8.4-3\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"1:2.8.4-3\",\n              \"packageName\": \"libaudit-common\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578176Z\"\n        },\n        \"installedPackage-iputils-ping:x86_64:3:20180629-2+deb10u2\": {\n          \"id\": \"installedPackage-iputils-ping:x86_64:3:20180629-2+deb10u2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3:20180629-2+deb10u2\",\n              \"packageName\": \"iputils-ping\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578166Z\"\n        },\n        \"installedPackage-libssl1.1:x86_64:1.1.1n-0+deb10u6\": {\n          \"id\": \"installedPackage-libssl1.1:x86_64:1.1.1n-0+deb10u6\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.1.1n-0+deb10u6\",\n              \"packageName\": \"libssl1.1\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578276Z\"\n        },\n        \"installedPackage-python-apt-common:all:1.8.4.3\": {\n          \"id\": \"installedPackage-python-apt-common:all:1.8.4.3\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"1.8.4.3\",\n              \"packageName\": \"python-apt-common\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578309Z\"\n        },\n        \"installedPackage-libstdc++6:x86_64:8.3.0-6\": {\n          \"id\": \"installedPackage-libstdc++6:x86_64:8.3.0-6\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"8.3.0-6\",\n              \"packageName\": \"libstdc++6\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578277Z\"\n        },\n        \"installedPackage-traceroute:x86_64:1:2.1.0-2\": {\n          \"id\": \"installedPackage-traceroute:x86_64:1:2.1.0-2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:2.1.0-2\",\n              \"packageName\": \"traceroute\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578333Z\"\n        },\n        \"installedPackage-openssh-client:x86_64:1:7.9p1-10+deb10u4\": {\n          \"id\": \"installedPackage-openssh-client:x86_64:1:7.9p1-10+deb10u4\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:7.9p1-10+deb10u4\",\n              \"packageName\": \"openssh-client\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578302Z\"\n        },\n        \"installedPackage-cron:x86_64:3.0pl1-134+deb10u1\": {\n          \"id\": \"installedPackage-cron:x86_64:3.0pl1-134+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.0pl1-134+deb10u1\",\n              \"packageName\": \"cron\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578101Z\"\n        },\n        \"installedPackage-gce-disk-expand:all:1:20200716.00-g1\": {\n          \"id\": \"installedPackage-gce-disk-expand:all:1:20200716.00-g1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"1:20200716.00-g1\",\n              \"packageName\": \"gce-disk-expand\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578135Z\"\n        },\n        \"installedPackage-libffi6:x86_64:3.2.1-9\": {\n          \"id\": \"installedPackage-libffi6:x86_64:3.2.1-9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.2.1-9\",\n              \"packageName\": \"libffi6\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578197Z\"\n        },\n        \"installedPackage-liblz4-1:x86_64:1.8.3-1+deb10u1\": {\n          \"id\": \"installedPackage-liblz4-1:x86_64:1.8.3-1+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.8.3-1+deb10u1\",\n              \"packageName\": \"liblz4-1\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578228Z\"\n        },\n        \"installedPackage-libgnutls30:x86_64:3.6.7-4+deb10u12\": {\n          \"id\": \"installedPackage-libgnutls30:x86_64:3.6.7-4+deb10u12\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.6.7-4+deb10u12\",\n              \"packageName\": \"libgnutls30\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578207Z\"\n        },\n        \"installedPackage-parted:x86_64:3.2-25\": {\n          \"id\": \"installedPackage-parted:x86_64:3.2-25\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.2-25\",\n              \"packageName\": \"parted\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578305Z\"\n        },\n        \"availablePackage-google-cloud-cli-anthoscli:x86_64:482.0.0-0\": {\n          \"id\": \"availablePackage-google-cloud-cli-anthoscli:x86_64:482.0.0-0\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"AVAILABLE_PACKAGE\",\n          \"availablePackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"482.0.0-0\",\n              \"packageName\": \"google-cloud-cli-anthoscli\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578077Z\"\n        },\n        \"installedPackage-rsyslog:x86_64:8.1901.0-1+deb10u2\": {\n          \"id\": \"installedPackage-rsyslog:x86_64:8.1901.0-1+deb10u2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"8.1901.0-1+deb10u2\",\n              \"packageName\": \"rsyslog\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578324Z\"\n        },\n        \"installedPackage-libsystemd0:x86_64:241-7~deb10u10\": {\n          \"id\": \"installedPackage-libsystemd0:x86_64:241-7~deb10u10\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"241-7~deb10u10\",\n              \"packageName\": \"libsystemd0\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578277Z\"\n        },\n        \"installedPackage-python3-dbus:x86_64:1.2.8-3\": {\n          \"id\": \"installedPackage-python3-dbus:x86_64:1.2.8-3\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.2.8-3\",\n              \"packageName\": \"python3-dbus\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578312Z\"\n        },\n        \"installedPackage-libgnutls-dane0:x86_64:3.6.7-4+deb10u12\": {\n          \"id\": \"installedPackage-libgnutls-dane0:x86_64:3.6.7-4+deb10u12\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.6.7-4+deb10u12\",\n              \"packageName\": \"libgnutls-dane0\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578206Z\"\n        },\n        \"installedPackage-libisccfg163:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u11\": {\n          \"id\": \"installedPackage-libisccfg163:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u11\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:9.11.5.P4+dfsg-5.1+deb10u11\",\n              \"packageName\": \"libisccfg163\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578216Z\"\n        },\n        \"installedPackage-libsasl2-modules-db:x86_64:2.1.27+dfsg-1+deb10u2\": {\n          \"id\": \"installedPackage-libsasl2-modules-db:x86_64:2.1.27+dfsg-1+deb10u2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.1.27+dfsg-1+deb10u2\",\n              \"packageName\": \"libsasl2-modules-db\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578268Z\"\n        },\n        \"installedPackage-adduser:all:3.118\": {\n          \"id\": \"installedPackage-adduser:all:3.118\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"3.118\",\n              \"packageName\": \"adduser\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578087Z\"\n        },\n        \"installedPackage-init-system-helpers:all:1.56+nmu1\": {\n          \"id\": \"installedPackage-init-system-helpers:all:1.56+nmu1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"1.56+nmu1\",\n              \"packageName\": \"init-system-helpers\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578162Z\"\n        },\n        \"installedPackage-gettext-base:x86_64:0.19.8.1-9\": {\n          \"id\": \"installedPackage-gettext-base:x86_64:0.19.8.1-9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.19.8.1-9\",\n              \"packageName\": \"gettext-base\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578138Z\"\n        },\n        \"installedPackage-libefivar1:x86_64:37-2+deb10u1\": {\n          \"id\": \"installedPackage-libefivar1:x86_64:37-2+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"37-2+deb10u1\",\n              \"packageName\": \"libefivar1\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578192Z\"\n        },\n        \"installedPackage-libjson-c3:x86_64:0.12.1+ds-2+deb10u1\": {\n          \"id\": \"installedPackage-libjson-c3:x86_64:0.12.1+ds-2+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.12.1+ds-2+deb10u1\",\n              \"packageName\": \"libjson-c3\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578217Z\"\n        },\n        \"installedPackage-linux-image-4.19.0-26-cloud-amd64:x86_64:4.19.304-1\": {\n          \"id\": \"installedPackage-linux-image-4.19.0-26-cloud-amd64:x86_64:4.19.304-1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"4.19.304-1\",\n              \"packageName\": \"linux-image-4.19.0-26-cloud-amd64\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578288Z\"\n        },\n        \"installedPackage-debconf:all:1.5.71+deb10u1\": {\n          \"id\": \"installedPackage-debconf:all:1.5.71+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"1.5.71+deb10u1\",\n              \"packageName\": \"debconf\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578104Z\"\n        },\n        \"installedPackage-libk5crypto3:x86_64:1.17-3+deb10u6\": {\n          \"id\": \"installedPackage-libk5crypto3:x86_64:1.17-3+deb10u6\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.17-3+deb10u6\",\n              \"packageName\": \"libk5crypto3\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578217Z\"\n        },\n        \"installedPackage-libevent-2.1-6:x86_64:2.1.8-stable-4\": {\n          \"id\": \"installedPackage-libevent-2.1-6:x86_64:2.1.8-stable-4\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.1.8-stable-4\",\n              \"packageName\": \"libevent-2.1-6\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578194Z\"\n        },\n        \"installedPackage-apt:x86_64:1.8.2.3\": {\n          \"id\": \"installedPackage-apt:x86_64:1.8.2.3\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.8.2.3\",\n              \"packageName\": \"apt\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578089Z\"\n        },\n        \"installedPackage-dbus:x86_64:1.12.28-0+deb10u1\": {\n          \"id\": \"installedPackage-dbus:x86_64:1.12.28-0+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.12.28-0+deb10u1\",\n              \"packageName\": \"dbus\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578104Z\"\n        },\n        \"installedPackage-libgdbm6:x86_64:1.18.1-4\": {\n          \"id\": \"installedPackage-libgdbm6:x86_64:1.18.1-4\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.18.1-4\",\n              \"packageName\": \"libgdbm6\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578203Z\"\n        },\n        \"installedPackage-libdns-export1104:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u11\": {\n          \"id\": \"installedPackage-libdns-export1104:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u11\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:9.11.5.P4+dfsg-5.1+deb10u11\",\n              \"packageName\": \"libdns-export1104\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578189Z\"\n        },\n        \"installedPackage-util-linux:x86_64:2.33.1-0.1+deb10u1\": {\n          \"id\": \"installedPackage-util-linux:x86_64:2.33.1-0.1+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.33.1-0.1+deb10u1\",\n              \"packageName\": \"util-linux\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578335Z\"\n        },\n        \"installedPackage-libgssapi-krb5-2:x86_64:1.17-3+deb10u6\": {\n          \"id\": \"installedPackage-libgssapi-krb5-2:x86_64:1.17-3+deb10u6\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.17-3+deb10u6\",\n              \"packageName\": \"libgssapi-krb5-2\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578209Z\"\n        },\n        \"installedPackage-libncursesw6:x86_64:6.1+20181013-2+deb10u5\": {\n          \"id\": \"installedPackage-libncursesw6:x86_64:6.1+20181013-2+deb10u5\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"6.1+20181013-2+deb10u5\",\n              \"packageName\": \"libncursesw6\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578236Z\"\n        },\n        \"installedPackage-os-prober:x86_64:1.77\": {\n          \"id\": \"installedPackage-os-prober:x86_64:1.77\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.77\",\n              \"packageName\": \"os-prober\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578305Z\"\n        },\n        \"installedPackage-sysvinit-utils:x86_64:2.93-8\": {\n          \"id\": \"installedPackage-sysvinit-utils:x86_64:2.93-8\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.93-8\",\n              \"packageName\": \"sysvinit-utils\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578331Z\"\n        },\n        \"installedPackage-libdb5.3:x86_64:5.3.28+dfsg1-0.5\": {\n          \"id\": \"installedPackage-libdb5.3:x86_64:5.3.28+dfsg1-0.5\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"5.3.28+dfsg1-0.5\",\n              \"packageName\": \"libdb5.3\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578187Z\"\n        },\n        \"availablePackage-google-cloud-ops-agent:x86_64:2.48.0~debian10\": {\n          \"id\": \"availablePackage-google-cloud-ops-agent:x86_64:2.48.0~debian10\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"AVAILABLE_PACKAGE\",\n          \"availablePackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.48.0~debian10\",\n              \"packageName\": \"google-cloud-ops-agent\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578083Z\"\n        },\n        \"installedPackage-libatm1:x86_64:1:2.5.1-2\": {\n          \"id\": \"installedPackage-libatm1:x86_64:1:2.5.1-2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:2.5.1-2\",\n              \"packageName\": \"libatm1\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578175Z\"\n        },\n        \"installedPackage-linux-image-cloud-amd64:x86_64:4.19+105+deb10u21\": {\n          \"id\": \"installedPackage-linux-image-cloud-amd64:x86_64:4.19+105+deb10u21\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"4.19+105+deb10u21\",\n              \"packageName\": \"linux-image-cloud-amd64\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578288Z\"\n        },\n        \"installedPackage-logrotate:x86_64:3.14.0-4\": {\n          \"id\": \"installedPackage-logrotate:x86_64:3.14.0-4\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.14.0-4\",\n              \"packageName\": \"logrotate\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578290Z\"\n        },\n        \"installedPackage-udev:x86_64:241-7~deb10u10\": {\n          \"id\": \"installedPackage-udev:x86_64:241-7~deb10u10\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"241-7~deb10u10\",\n              \"packageName\": \"udev\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578334Z\"\n        },\n        \"installedPackage-libcryptsetup12:x86_64:2:2.1.0-5+deb10u2\": {\n          \"id\": \"installedPackage-libcryptsetup12:x86_64:2:2.1.0-5+deb10u2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2:2.1.0-5+deb10u2\",\n              \"packageName\": \"libcryptsetup12\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578185Z\"\n        },\n        \"installedPackage-google-osconfig-agent:x86_64:1:20240501.03-g1\": {\n          \"id\": \"installedPackage-google-osconfig-agent:x86_64:1:20240501.03-g1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:20240501.03-g1\",\n              \"packageName\": \"google-osconfig-agent\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578147Z\"\n        },\n        \"installedPackage-initramfs-tools-core:all:0.133+deb10u1\": {\n          \"id\": \"installedPackage-initramfs-tools-core:all:0.133+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"0.133+deb10u1\",\n              \"packageName\": \"initramfs-tools-core\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578164Z\"\n        },\n        \"installedPackage-vim-tiny:x86_64:2:8.1.0875-5+deb10u6\": {\n          \"id\": \"installedPackage-vim-tiny:x86_64:2:8.1.0875-5+deb10u6\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2:8.1.0875-5+deb10u6\",\n              \"packageName\": \"vim-tiny\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578339Z\"\n        },\n        \"installedPackage-libslang2:x86_64:2.3.2-2\": {\n          \"id\": \"installedPackage-libslang2:x86_64:2.3.2-2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.3.2-2\",\n              \"packageName\": \"libslang2\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578272Z\"\n        },\n        \"installedPackage-socat:x86_64:1.7.3.2-2\": {\n          \"id\": \"installedPackage-socat:x86_64:1.7.3.2-2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.7.3.2-2\",\n              \"packageName\": \"socat\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578329Z\"\n        },\n        \"installedPackage-debianutils:x86_64:4.8.6.1\": {\n          \"id\": \"installedPackage-debianutils:x86_64:4.8.6.1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"4.8.6.1\",\n              \"packageName\": \"debianutils\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578122Z\"\n        },\n        \"installedPackage-google-cloud-ops-agent:x86_64:2.47.0~debian10\": {\n          \"id\": \"installedPackage-google-cloud-ops-agent:x86_64:2.47.0~debian10\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.47.0~debian10\",\n              \"packageName\": \"google-cloud-ops-agent\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578143Z\"\n        },\n        \"installedPackage-libxtables12:x86_64:1.8.2-4\": {\n          \"id\": \"installedPackage-libxtables12:x86_64:1.8.2-4\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.8.2-4\",\n              \"packageName\": \"libxtables12\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578285Z\"\n        },\n        \"installedPackage-tzdata:all:2024a-0+deb10u1\": {\n          \"id\": \"installedPackage-tzdata:all:2024a-0+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"2024a-0+deb10u1\",\n              \"packageName\": \"tzdata\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578333Z\"\n        },\n        \"installedPackage-libpci3:x86_64:1:3.5.2-1\": {\n          \"id\": \"installedPackage-libpci3:x86_64:1:3.5.2-1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:3.5.2-1\",\n              \"packageName\": \"libpci3\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578255Z\"\n        },\n        \"installedPackage-python3-requests:all:2.21.0-1+deb10u1\": {\n          \"id\": \"installedPackage-python3-requests:all:2.21.0-1+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"2.21.0-1+deb10u1\",\n              \"packageName\": \"python3-requests\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578320Z\"\n        },\n        \"installedPackage-libdns1104:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u11\": {\n          \"id\": \"installedPackage-libdns1104:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u11\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:9.11.5.P4+dfsg-5.1+deb10u11\",\n              \"packageName\": \"libdns1104\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578190Z\"\n        },\n        \"installedPackage-wget:x86_64:1.20.1-1.1\": {\n          \"id\": \"installedPackage-wget:x86_64:1.20.1-1.1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.20.1-1.1\",\n              \"packageName\": \"wget\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578339Z\"\n        },\n        \"installedPackage-shim-unsigned:x86_64:15.8-1~deb10u1\": {\n          \"id\": \"installedPackage-shim-unsigned:x86_64:15.8-1~deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"15.8-1~deb10u1\",\n              \"packageName\": \"shim-unsigned\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578328Z\"\n        },\n        \"installedPackage-google-cloud-cli-anthoscli:x86_64:476.0.0-0\": {\n          \"id\": \"installedPackage-google-cloud-cli-anthoscli:x86_64:476.0.0-0\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"476.0.0-0\",\n              \"packageName\": \"google-cloud-cli-anthoscli\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578142Z\"\n        },\n        \"installedPackage-gpg-wks-client:x86_64:2.2.12-1+deb10u2\": {\n          \"id\": \"installedPackage-gpg-wks-client:x86_64:2.2.12-1+deb10u2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.2.12-1+deb10u2\",\n              \"packageName\": \"gpg-wks-client\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578150Z\"\n        },\n        \"availablePackage-google-compute-engine:all:1:20240607.00-g1\": {\n          \"id\": \"availablePackage-google-compute-engine:all:1:20240607.00-g1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"AVAILABLE_PACKAGE\",\n          \"availablePackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"1:20240607.00-g1\",\n              \"packageName\": \"google-compute-engine\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578082Z\"\n        },\n        \"installedPackage-apparmor:x86_64:2.13.2-10\": {\n          \"id\": \"installedPackage-apparmor:x86_64:2.13.2-10\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.13.2-10\",\n              \"packageName\": \"apparmor\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578089Z\"\n        },\n        \"installedPackage-libip6tc0:x86_64:1.8.2-4\": {\n          \"id\": \"installedPackage-libip6tc0:x86_64:1.8.2-4\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.8.2-4\",\n              \"packageName\": \"libip6tc0\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578213Z\"\n        },\n        \"installedPackage-libkrb5support0:x86_64:1.17-3+deb10u6\": {\n          \"id\": \"installedPackage-libkrb5support0:x86_64:1.17-3+deb10u6\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.17-3+deb10u6\",\n              \"packageName\": \"libkrb5support0\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578221Z\"\n        },\n        \"installedPackage-libnetfilter-conntrack3:x86_64:1.0.7-1\": {\n          \"id\": \"installedPackage-libnetfilter-conntrack3:x86_64:1.0.7-1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.0.7-1\",\n              \"packageName\": \"libnetfilter-conntrack3\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578237Z\"\n        },\n        \"installedPackage-ethtool:x86_64:1:4.19-1\": {\n          \"id\": \"installedPackage-ethtool:x86_64:1:4.19-1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:4.19-1\",\n              \"packageName\": \"ethtool\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578129Z\"\n        },\n        \"installedPackage-libacl1:x86_64:2.2.53-4\": {\n          \"id\": \"installedPackage-libacl1:x86_64:2.2.53-4\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.2.53-4\",\n              \"packageName\": \"libacl1\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578170Z\"\n        },\n        \"installedPackage-libpng16-16:x86_64:1.6.36-6\": {\n          \"id\": \"installedPackage-libpng16-16:x86_64:1.6.36-6\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.6.36-6\",\n              \"packageName\": \"libpng16-16\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578257Z\"\n        },\n        \"installedPackage-libpam0g:x86_64:1.3.1-5\": {\n          \"id\": \"installedPackage-libpam0g:x86_64:1.3.1-5\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.3.1-5\",\n              \"packageName\": \"libpam0g\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578253Z\"\n        },\n        \"installedPackage-mailutils-common:all:1:3.5-4\": {\n          \"id\": \"installedPackage-mailutils-common:all:1:3.5-4\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"1:3.5-4\",\n              \"packageName\": \"mailutils-common\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578292Z\"\n        },\n        \"installedPackage-bind9-host:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u11\": {\n          \"id\": \"installedPackage-bind9-host:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u11\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:9.11.5.P4+dfsg-5.1+deb10u11\",\n              \"packageName\": \"bind9-host\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578095Z\"\n        },\n        \"installedPackage-libefiboot1:x86_64:37-2+deb10u1\": {\n          \"id\": \"installedPackage-libefiboot1:x86_64:37-2+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"37-2+deb10u1\",\n              \"packageName\": \"libefiboot1\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578191Z\"\n        },\n        \"installedPackage-apt-transport-https:all:1.8.2.3\": {\n          \"id\": \"installedPackage-apt-transport-https:all:1.8.2.3\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"1.8.2.3\",\n              \"packageName\": \"apt-transport-https\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578091Z\"\n        },\n        \"installedPackage-guile-2.2-libs:x86_64:2.2.4+1-2+deb10u1\": {\n          \"id\": \"installedPackage-guile-2.2-libs:x86_64:2.2.4+1-2+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.2.4+1-2+deb10u1\",\n              \"packageName\": \"guile-2.2-libs\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578159Z\"\n        },\n        \"installedPackage-libdevmapper1.02.1:x86_64:2:1.02.155-3\": {\n          \"id\": \"installedPackage-libdevmapper1.02.1:x86_64:2:1.02.155-3\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2:1.02.155-3\",\n              \"packageName\": \"libdevmapper1.02.1\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578188Z\"\n        },\n        \"installedPackage-python3-six:all:1.12.0-1\": {\n          \"id\": \"installedPackage-python3-six:all:1.12.0-1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"1.12.0-1\",\n              \"packageName\": \"python3-six\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578321Z\"\n        },\n        \"installedPackage-pciutils:x86_64:1:3.5.2-1\": {\n          \"id\": \"installedPackage-pciutils:x86_64:1:3.5.2-1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:3.5.2-1\",\n              \"packageName\": \"pciutils\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578306Z\"\n        },\n        \"installedPackage-libpython3.7-stdlib:x86_64:3.7.3-2+deb10u7\": {\n          \"id\": \"installedPackage-libpython3.7-stdlib:x86_64:3.7.3-2+deb10u7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.7.3-2+deb10u7\",\n              \"packageName\": \"libpython3.7-stdlib\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578265Z\"\n        },\n        \"installedPackage-zlib1g:x86_64:1:1.2.11.dfsg-1+deb10u2\": {\n          \"id\": \"installedPackage-zlib1g:x86_64:1:1.2.11.dfsg-1+deb10u2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:1.2.11.dfsg-1+deb10u2\",\n              \"packageName\": \"zlib1g\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578341Z\"\n        },\n        \"installedPackage-grub-efi-amd64-bin:x86_64:2.06-3~deb10u4\": {\n          \"id\": \"installedPackage-grub-efi-amd64-bin:x86_64:2.06-3~deb10u4\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.06-3~deb10u4\",\n              \"packageName\": \"grub-efi-amd64-bin\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578156Z\"\n        },\n        \"installedPackage-gnupg:all:2.2.12-1+deb10u2\": {\n          \"id\": \"installedPackage-gnupg:all:2.2.12-1+deb10u2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"2.2.12-1+deb10u2\",\n              \"packageName\": \"gnupg\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578139Z\"\n        },\n        \"installedPackage-libmpdec2:x86_64:2.4.2-2\": {\n          \"id\": \"installedPackage-libmpdec2:x86_64:2.4.2-2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.4.2-2\",\n              \"packageName\": \"libmpdec2\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578235Z\"\n        },\n        \"installedPackage-libutempter0:x86_64:1.1.6-3\": {\n          \"id\": \"installedPackage-libutempter0:x86_64:1.1.6-3\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.1.6-3\",\n              \"packageName\": \"libutempter0\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578282Z\"\n        },\n        \"installedPackage-diffutils:x86_64:1:3.7-3\": {\n          \"id\": \"installedPackage-diffutils:x86_64:1:3.7-3\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:3.7-3\",\n              \"packageName\": \"diffutils\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578123Z\"\n        },\n        \"installedPackage-manpages:all:4.16-2\": {\n          \"id\": \"installedPackage-manpages:all:4.16-2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"4.16-2\",\n              \"packageName\": \"manpages\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578294Z\"\n        },\n        \"installedPackage-libip4tc0:x86_64:1.8.2-4\": {\n          \"id\": \"installedPackage-libip4tc0:x86_64:1.8.2-4\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.8.2-4\",\n              \"packageName\": \"libip4tc0\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578213Z\"\n        },\n        \"installedPackage-libcom-err2:x86_64:1.44.5-1+deb10u3\": {\n          \"id\": \"installedPackage-libcom-err2:x86_64:1.44.5-1+deb10u3\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.44.5-1+deb10u3\",\n              \"packageName\": \"libcom-err2\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578184Z\"\n        },\n        \"installedPackage-grub2-common:x86_64:2.06-3~deb10u4\": {\n          \"id\": \"installedPackage-grub2-common:x86_64:2.06-3~deb10u4\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.06-3~deb10u4\",\n              \"packageName\": \"grub2-common\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578158Z\"\n        },\n        \"installedPackage-ca-certificates:all:20200601~deb10u2\": {\n          \"id\": \"installedPackage-ca-certificates:all:20200601~deb10u2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"20200601~deb10u2\",\n              \"packageName\": \"ca-certificates\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578098Z\"\n        },\n        \"installedPackage-libnpth0:x86_64:1.6-1\": {\n          \"id\": \"installedPackage-libnpth0:x86_64:1.6-1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.6-1\",\n              \"packageName\": \"libnpth0\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578246Z\"\n        },\n        \"installedPackage-mariadb-common:all:1:10.3.39-0+deb10u2\": {\n          \"id\": \"installedPackage-mariadb-common:all:1:10.3.39-0+deb10u2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"1:10.3.39-0+deb10u2\",\n              \"packageName\": \"mariadb-common\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578294Z\"\n        },\n        \"installedPackage-liblzma5:x86_64:5.2.4-1+deb10u1\": {\n          \"id\": \"installedPackage-liblzma5:x86_64:5.2.4-1+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"5.2.4-1+deb10u1\",\n              \"packageName\": \"liblzma5\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578229Z\"\n        },\n        \"installedPackage-libnftnl11:x86_64:1.1.2-2\": {\n          \"id\": \"installedPackage-libnftnl11:x86_64:1.1.2-2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.1.2-2\",\n              \"packageName\": \"libnftnl11\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578245Z\"\n        },\n        \"installedPackage-apt-utils:x86_64:1.8.2.3\": {\n          \"id\": \"installedPackage-apt-utils:x86_64:1.8.2.3\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.8.2.3\",\n              \"packageName\": \"apt-utils\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578091Z\"\n        },\n        \"installedPackage-libmailutils5:x86_64:1:3.5-4\": {\n          \"id\": \"installedPackage-libmailutils5:x86_64:1:3.5-4\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:3.5-4\",\n              \"packageName\": \"libmailutils5\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578232Z\"\n        },\n        \"installedPackage-libprocps7:x86_64:2:3.3.15-2\": {\n          \"id\": \"installedPackage-libprocps7:x86_64:2:3.3.15-2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2:3.3.15-2\",\n              \"packageName\": \"libprocps7\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578259Z\"\n        },\n        \"installedPackage-openssh-server:x86_64:1:7.9p1-10+deb10u4\": {\n          \"id\": \"installedPackage-openssh-server:x86_64:1:7.9p1-10+deb10u4\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:7.9p1-10+deb10u4\",\n              \"packageName\": \"openssh-server\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578303Z\"\n        },\n        \"installedPackage-google-cloud-packages-archive-keyring:all:1.2-629101324\": {\n          \"id\": \"installedPackage-google-cloud-packages-archive-keyring:all:1.2-629101324\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"1.2-629101324\",\n              \"packageName\": \"google-cloud-packages-archive-keyring\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578144Z\"\n        },\n        \"installedPackage-libsasl2-modules:x86_64:2.1.27+dfsg-1+deb10u2\": {\n          \"id\": \"installedPackage-libsasl2-modules:x86_64:2.1.27+dfsg-1+deb10u2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.1.27+dfsg-1+deb10u2\",\n              \"packageName\": \"libsasl2-modules\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578268Z\"\n        },\n        \"installedPackage-tcpdump:x86_64:4.9.3-1~deb10u2\": {\n          \"id\": \"installedPackage-tcpdump:x86_64:4.9.3-1~deb10u2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"4.9.3-1~deb10u2\",\n              \"packageName\": \"tcpdump\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578332Z\"\n        },\n        \"installedPackage-libparted2:x86_64:3.2-25\": {\n          \"id\": \"installedPackage-libparted2:x86_64:3.2-25\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.2-25\",\n              \"packageName\": \"libparted2\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578253Z\"\n        },\n        \"installedPackage-mysql-common:all:5.8+1.0.5\": {\n          \"id\": \"installedPackage-mysql-common:all:5.8+1.0.5\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"5.8+1.0.5\",\n              \"packageName\": \"mysql-common\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578297Z\"\n        },\n        \"installedPackage-libfstrm0:x86_64:0.4.0-1\": {\n          \"id\": \"installedPackage-libfstrm0:x86_64:0.4.0-1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.4.0-1\",\n              \"packageName\": \"libfstrm0\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578200Z\"\n        },\n        \"installedPackage-libzstd1:x86_64:1.3.8+dfsg-3+deb10u2\": {\n          \"id\": \"installedPackage-libzstd1:x86_64:1.3.8+dfsg-3+deb10u2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.3.8+dfsg-3+deb10u2\",\n              \"packageName\": \"libzstd1\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578286Z\"\n        },\n        \"installedPackage-python3-chardet:all:3.0.4-3\": {\n          \"id\": \"installedPackage-python3-chardet:all:3.0.4-3\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"3.0.4-3\",\n              \"packageName\": \"python3-chardet\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578312Z\"\n        },\n        \"installedPackage-libedit2:x86_64:3.1-20181209-1\": {\n          \"id\": \"installedPackage-libedit2:x86_64:3.1-20181209-1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.1-20181209-1\",\n              \"packageName\": \"libedit2\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578191Z\"\n        },\n        \"installedPackage-fdisk:x86_64:2.33.1-0.1+deb10u1\": {\n          \"id\": \"installedPackage-fdisk:x86_64:2.33.1-0.1+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.33.1-0.1+deb10u1\",\n              \"packageName\": \"fdisk\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578132Z\"\n        },\n        \"installedPackage-bzip2:x86_64:1.0.6-9.2~deb10u2\": {\n          \"id\": \"installedPackage-bzip2:x86_64:1.0.6-9.2~deb10u2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.0.6-9.2~deb10u2\",\n              \"packageName\": \"bzip2\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578097Z\"\n        },\n        \"installedPackage-libisc-export1100:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u11\": {\n          \"id\": \"installedPackage-libisc-export1100:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u11\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:9.11.5.P4+dfsg-5.1+deb10u11\",\n              \"packageName\": \"libisc-export1100\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578214Z\"\n        },\n        \"installedPackage-libgsasl7:x86_64:1.8.0-8+deb10u1\": {\n          \"id\": \"installedPackage-libgsasl7:x86_64:1.8.0-8+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.8.0-8+deb10u1\",\n              \"packageName\": \"libgsasl7\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578209Z\"\n        },\n        \"installedPackage-init:x86_64:1.56+nmu1\": {\n          \"id\": \"installedPackage-init:x86_64:1.56+nmu1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.56+nmu1\",\n              \"packageName\": \"init\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578162Z\"\n        },\n        \"installedPackage-libhavege1:x86_64:1.9.1-7\": {\n          \"id\": \"installedPackage-libhavege1:x86_64:1.9.1-7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.9.1-7\",\n              \"packageName\": \"libhavege1\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578210Z\"\n        },\n        \"installedPackage-net-tools:x86_64:1.60+git20180626.aebd88e-1\": {\n          \"id\": \"installedPackage-net-tools:x86_64:1.60+git20180626.aebd88e-1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.60+git20180626.aebd88e-1\",\n              \"packageName\": \"net-tools\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578300Z\"\n        },\n        \"installedPackage-libpcre3:x86_64:2:8.39-12\": {\n          \"id\": \"installedPackage-libpcre3:x86_64:2:8.39-12\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2:8.39-12\",\n              \"packageName\": \"libpcre3\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578256Z\"\n        },\n        \"installedPackage-libntlm0:x86_64:1.5-1+deb10u1\": {\n          \"id\": \"installedPackage-libntlm0:x86_64:1.5-1+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.5-1+deb10u1\",\n              \"packageName\": \"libntlm0\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578248Z\"\n        },\n        \"installedPackage-lsb-base:all:10.2019051400\": {\n          \"id\": \"installedPackage-lsb-base:all:10.2019051400\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"10.2019051400\",\n              \"packageName\": \"lsb-base\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578290Z\"\n        },\n        \"availablePackage-google-osconfig-agent:x86_64:1:20240524.03-g1\": {\n          \"id\": \"availablePackage-google-osconfig-agent:x86_64:1:20240524.03-g1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"AVAILABLE_PACKAGE\",\n          \"availablePackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:20240524.03-g1\",\n              \"packageName\": \"google-osconfig-agent\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578083Z\"\n        },\n        \"installedPackage-libcurl3-gnutls:x86_64:7.64.0-4+deb10u9\": {\n          \"id\": \"installedPackage-libcurl3-gnutls:x86_64:7.64.0-4+deb10u9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"7.64.0-4+deb10u9\",\n              \"packageName\": \"libcurl3-gnutls\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578185Z\"\n        },\n        \"installedPackage-liblognorm5:x86_64:2.0.5-1\": {\n          \"id\": \"installedPackage-liblognorm5:x86_64:2.0.5-1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.0.5-1\",\n              \"packageName\": \"liblognorm5\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578225Z\"\n        },\n        \"installedPackage-haveged:x86_64:1.9.1-7\": {\n          \"id\": \"installedPackage-haveged:x86_64:1.9.1-7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.9.1-7\",\n              \"packageName\": \"haveged\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578160Z\"\n        },\n        \"installedPackage-libaudit1:x86_64:1:2.8.4-3\": {\n          \"id\": \"installedPackage-libaudit1:x86_64:1:2.8.4-3\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:2.8.4-3\",\n              \"packageName\": \"libaudit1\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578177Z\"\n        },\n        \"installedPackage-python3.7:x86_64:3.7.3-2+deb10u7\": {\n          \"id\": \"installedPackage-python3.7:x86_64:3.7.3-2+deb10u7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.7.3-2+deb10u7\",\n              \"packageName\": \"python3.7\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578321Z\"\n        },\n        \"installedPackage-libcurl4:x86_64:7.64.0-4+deb10u9\": {\n          \"id\": \"installedPackage-libcurl4:x86_64:7.64.0-4+deb10u9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"7.64.0-4+deb10u9\",\n              \"packageName\": \"libcurl4\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578186Z\"\n        },\n        \"installedPackage-libselinux1:x86_64:2.8-1+b1\": {\n          \"id\": \"installedPackage-libselinux1:x86_64:2.8-1+b1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.8-1+b1\",\n              \"packageName\": \"libselinux1\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578270Z\"\n        },\n        \"installedPackage-readline-common:all:7.0-5\": {\n          \"id\": \"installedPackage-readline-common:all:7.0-5\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"7.0-5\",\n              \"packageName\": \"readline-common\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578323Z\"\n        },\n        \"installedPackage-sensible-utils:all:0.0.12\": {\n          \"id\": \"installedPackage-sensible-utils:all:0.0.12\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"0.0.12\",\n              \"packageName\": \"sensible-utils\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578326Z\"\n        },\n        \"installedPackage-isc-dhcp-client:x86_64:4.4.1-2+deb10u3\": {\n          \"id\": \"installedPackage-isc-dhcp-client:x86_64:4.4.1-2+deb10u3\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"4.4.1-2+deb10u3\",\n              \"packageName\": \"isc-dhcp-client\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578166Z\"\n        },\n        \"installedPackage-xxd:x86_64:2:8.1.0875-5+deb10u6\": {\n          \"id\": \"installedPackage-xxd:x86_64:2:8.1.0875-5+deb10u6\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2:8.1.0875-5+deb10u6\",\n              \"packageName\": \"xxd\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578340Z\"\n        },\n        \"installedPackage-libpython3.7-minimal:x86_64:3.7.3-2+deb10u7\": {\n          \"id\": \"installedPackage-libpython3.7-minimal:x86_64:3.7.3-2+deb10u7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.7.3-2+deb10u7\",\n              \"packageName\": \"libpython3.7-minimal\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578264Z\"\n        },\n        \"installedPackage-file:x86_64:1:5.35-4+deb10u2\": {\n          \"id\": \"installedPackage-file:x86_64:1:5.35-4+deb10u2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:5.35-4+deb10u2\",\n              \"packageName\": \"file\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578133Z\"\n        },\n        \"installedPackage-libcap2-bin:x86_64:1:2.25-2\": {\n          \"id\": \"installedPackage-libcap2-bin:x86_64:1:2.25-2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:2.25-2\",\n              \"packageName\": \"libcap2-bin\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578183Z\"\n        },\n        \"installedPackage-libsemanage1:x86_64:2.8-2\": {\n          \"id\": \"installedPackage-libsemanage1:x86_64:2.8-2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.8-2\",\n              \"packageName\": \"libsemanage1\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578271Z\"\n        },\n        \"installedPackage-efibootmgr:x86_64:15-1\": {\n          \"id\": \"installedPackage-efibootmgr:x86_64:15-1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"15-1\",\n              \"packageName\": \"efibootmgr\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578128Z\"\n        },\n        \"installedPackage-shim-helpers-amd64-signed:x86_64:1+15.8+1~deb10u1\": {\n          \"id\": \"installedPackage-shim-helpers-amd64-signed:x86_64:1+15.8+1~deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1+15.8+1~deb10u1\",\n              \"packageName\": \"shim-helpers-amd64-signed\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578326Z\"\n        },\n        \"installedPackage-google-compute-engine:all:1:20240307.00-g1\": {\n          \"id\": \"installedPackage-google-compute-engine:all:1:20240307.00-g1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"1:20240307.00-g1\",\n              \"packageName\": \"google-compute-engine\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578145Z\"\n        },\n        \"installedPackage-grub-efi-amd64-signed:x86_64:1+2.06+3~deb10u4\": {\n          \"id\": \"installedPackage-grub-efi-amd64-signed:x86_64:1+2.06+3~deb10u4\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1+2.06+3~deb10u4\",\n              \"packageName\": \"grub-efi-amd64-signed\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578156Z\"\n        },\n        \"installedPackage-libfastjson4:x86_64:0.99.8-2+deb10u1\": {\n          \"id\": \"installedPackage-libfastjson4:x86_64:0.99.8-2+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.99.8-2+deb10u1\",\n              \"packageName\": \"libfastjson4\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578196Z\"\n        },\n        \"installedPackage-libelf1:x86_64:0.176-1.1+deb10u1\": {\n          \"id\": \"installedPackage-libelf1:x86_64:0.176-1.1+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.176-1.1+deb10u1\",\n              \"packageName\": \"libelf1\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578193Z\"\n        },\n        \"installedPackage-klibc-utils:x86_64:2.0.6-1+deb10u1\": {\n          \"id\": \"installedPackage-klibc-utils:x86_64:2.0.6-1+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.0.6-1+deb10u1\",\n              \"packageName\": \"klibc-utils\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578167Z\"\n        },\n        \"installedPackage-passwd:x86_64:1:4.5-1.1\": {\n          \"id\": \"installedPackage-passwd:x86_64:1:4.5-1.1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:4.5-1.1\",\n              \"packageName\": \"passwd\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578306Z\"\n        },\n        \"availablePackage-google-cloud-cli:x86_64:482.0.0-0\": {\n          \"id\": \"availablePackage-google-cloud-cli:x86_64:482.0.0-0\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"AVAILABLE_PACKAGE\",\n          \"availablePackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"482.0.0-0\",\n              \"packageName\": \"google-cloud-cli\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578080Z\"\n        },\n        \"installedPackage-google-guest-agent:x86_64:1:20240109.00-g1\": {\n          \"id\": \"installedPackage-google-guest-agent:x86_64:1:20240109.00-g1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:20240109.00-g1\",\n              \"packageName\": \"google-guest-agent\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578146Z\"\n        },\n        \"installedPackage-isc-dhcp-common:x86_64:4.4.1-2+deb10u3\": {\n          \"id\": \"installedPackage-isc-dhcp-common:x86_64:4.4.1-2+deb10u3\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"4.4.1-2+deb10u3\",\n              \"packageName\": \"isc-dhcp-common\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578167Z\"\n        },\n        \"installedPackage-gpg:x86_64:2.2.12-1+deb10u2\": {\n          \"id\": \"installedPackage-gpg:x86_64:2.2.12-1+deb10u2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.2.12-1+deb10u2\",\n              \"packageName\": \"gpg\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578148Z\"\n        },\n        \"installedPackage-iptables:x86_64:1.8.2-4\": {\n          \"id\": \"installedPackage-iptables:x86_64:1.8.2-4\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.8.2-4\",\n              \"packageName\": \"iptables\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578165Z\"\n        },\n        \"installedPackage-krb5-locales:all:1.17-3+deb10u6\": {\n          \"id\": \"installedPackage-krb5-locales:all:1.17-3+deb10u6\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"1.17-3+deb10u6\",\n              \"packageName\": \"krb5-locales\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578169Z\"\n        },\n        \"installedPackage-xz-utils:x86_64:5.2.4-1+deb10u1\": {\n          \"id\": \"installedPackage-xz-utils:x86_64:5.2.4-1+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"5.2.4-1+deb10u1\",\n              \"packageName\": \"xz-utils\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578341Z\"\n        },\n        \"installedPackage-ifupdown:x86_64:0.8.35\": {\n          \"id\": \"installedPackage-ifupdown:x86_64:0.8.35\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.8.35\",\n              \"packageName\": \"ifupdown\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578161Z\"\n        },\n        \"installedPackage-openssl:x86_64:1.1.1n-0+deb10u6\": {\n          \"id\": \"installedPackage-openssl:x86_64:1.1.1n-0+deb10u6\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.1.1n-0+deb10u6\",\n              \"packageName\": \"openssl\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578304Z\"\n        },\n        \"installedPackage-vim:x86_64:2:8.1.0875-5+deb10u6\": {\n          \"id\": \"installedPackage-vim:x86_64:2:8.1.0875-5+deb10u6\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2:8.1.0875-5+deb10u6\",\n              \"packageName\": \"vim\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578337Z\"\n        },\n        \"installedPackage-libglib2.0-0:x86_64:2.58.3-2+deb10u6\": {\n          \"id\": \"installedPackage-libglib2.0-0:x86_64:2.58.3-2+deb10u6\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.58.3-2+deb10u6\",\n              \"packageName\": \"libglib2.0-0\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578205Z\"\n        },\n        \"installedPackage-libklibc:x86_64:2.0.6-1+deb10u1\": {\n          \"id\": \"installedPackage-libklibc:x86_64:2.0.6-1+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.0.6-1+deb10u1\",\n              \"packageName\": \"libklibc\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578219Z\"\n        },\n        \"installedPackage-distro-info-data:all:0.41+deb10u9\": {\n          \"id\": \"installedPackage-distro-info-data:all:0.41+deb10u9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"0.41+deb10u9\",\n              \"packageName\": \"distro-info-data\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578124Z\"\n        },\n        \"installedPackage-libdebconfclient0:x86_64:0.249\": {\n          \"id\": \"installedPackage-libdebconfclient0:x86_64:0.249\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.249\",\n              \"packageName\": \"libdebconfclient0\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578188Z\"\n        },\n        \"installedPackage-google-cloud-cli:x86_64:476.0.0-0\": {\n          \"id\": \"installedPackage-google-cloud-cli:x86_64:476.0.0-0\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"476.0.0-0\",\n              \"packageName\": \"google-cloud-cli\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578141Z\"\n        },\n        \"installedPackage-libapparmor1:x86_64:2.13.2-10\": {\n          \"id\": \"installedPackage-libapparmor1:x86_64:2.13.2-10\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.13.2-10\",\n              \"packageName\": \"libapparmor1\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578170Z\"\n        },\n        \"installedPackage-libpython3-stdlib:x86_64:3.7.3-1\": {\n          \"id\": \"installedPackage-libpython3-stdlib:x86_64:3.7.3-1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.7.3-1\",\n              \"packageName\": \"libpython3-stdlib\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578263Z\"\n        },\n        \"installedPackage-nvme-cli:x86_64:1.7-1\": {\n          \"id\": \"installedPackage-nvme-cli:x86_64:1.7-1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.7-1\",\n              \"packageName\": \"nvme-cli\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578301Z\"\n        },\n        \"installedPackage-bsdmainutils:x86_64:11.1.2+b1\": {\n          \"id\": \"installedPackage-bsdmainutils:x86_64:11.1.2+b1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"11.1.2+b1\",\n              \"packageName\": \"bsdmainutils\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578096Z\"\n        },\n        \"installedPackage-libuuid1:x86_64:2.33.1-0.1+deb10u1\": {\n          \"id\": \"installedPackage-libuuid1:x86_64:2.33.1-0.1+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.33.1-0.1+deb10u1\",\n              \"packageName\": \"libuuid1\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578283Z\"\n        },\n        \"installedPackage-curl:x86_64:7.64.0-4+deb10u9\": {\n          \"id\": \"installedPackage-curl:x86_64:7.64.0-4+deb10u9\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"7.64.0-4+deb10u9\",\n              \"packageName\": \"curl\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578102Z\"\n        },\n        \"installedPackage-base-files:x86_64:10.3+deb10u13\": {\n          \"id\": \"installedPackage-base-files:x86_64:10.3+deb10u13\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"10.3+deb10u13\",\n              \"packageName\": \"base-files\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578092Z\"\n        },\n        \"installedPackage-libss2:x86_64:1.44.5-1+deb10u3\": {\n          \"id\": \"installedPackage-libss2:x86_64:1.44.5-1+deb10u3\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.44.5-1+deb10u3\",\n              \"packageName\": \"libss2\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578274Z\"\n        },\n        \"installedPackage-libtinfo6:x86_64:6.1+20181013-2+deb10u5\": {\n          \"id\": \"installedPackage-libtinfo6:x86_64:6.1+20181013-2+deb10u5\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"6.1+20181013-2+deb10u5\",\n              \"packageName\": \"libtinfo6\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578279Z\"\n        },\n        \"installedPackage-libpython3.7:x86_64:3.7.3-2+deb10u7\": {\n          \"id\": \"installedPackage-libpython3.7:x86_64:3.7.3-2+deb10u7\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.7.3-2+deb10u7\",\n              \"packageName\": \"libpython3.7\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578264Z\"\n        },\n        \"installedPackage-libreadline7:x86_64:7.0-5\": {\n          \"id\": \"installedPackage-libreadline7:x86_64:7.0-5\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"7.0-5\",\n              \"packageName\": \"libreadline7\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578266Z\"\n        },\n        \"installedPackage-mokutil:x86_64:0.6.0-2~deb10u1\": {\n          \"id\": \"installedPackage-mokutil:x86_64:0.6.0-2~deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.6.0-2~deb10u1\",\n              \"packageName\": \"mokutil\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578296Z\"\n        },\n        \"installedPackage-libiptc0:x86_64:1.8.2-4\": {\n          \"id\": \"installedPackage-libiptc0:x86_64:1.8.2-4\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.8.2-4\",\n              \"packageName\": \"libiptc0\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578213Z\"\n        },\n        \"installedPackage-libmount1:x86_64:2.33.1-0.1+deb10u1\": {\n          \"id\": \"installedPackage-libmount1:x86_64:2.33.1-0.1+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.33.1-0.1+deb10u1\",\n              \"packageName\": \"libmount1\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578234Z\"\n        },\n        \"installedPackage-coreutils:x86_64:8.30-3\": {\n          \"id\": \"installedPackage-coreutils:x86_64:8.30-3\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"8.30-3\",\n              \"packageName\": \"coreutils\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578100Z\"\n        },\n        \"installedPackage-libsqlite3-0:x86_64:3.27.2-3+deb10u2\": {\n          \"id\": \"installedPackage-libsqlite3-0:x86_64:3.27.2-3+deb10u2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.27.2-3+deb10u2\",\n              \"packageName\": \"libsqlite3-0\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578274Z\"\n        },\n        \"installedPackage-mawk:x86_64:1.3.3-17+b3\": {\n          \"id\": \"installedPackage-mawk:x86_64:1.3.3-17+b3\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.3.3-17+b3\",\n              \"packageName\": \"mawk\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578295Z\"\n        },\n        \"installedPackage-base-passwd:x86_64:3.5.46\": {\n          \"id\": \"installedPackage-base-passwd:x86_64:3.5.46\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"3.5.46\",\n              \"packageName\": \"base-passwd\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578093Z\"\n        },\n        \"installedPackage-libisc1100:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u11\": {\n          \"id\": \"installedPackage-libisc1100:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u11\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1:9.11.5.P4+dfsg-5.1+deb10u11\",\n              \"packageName\": \"libisc1100\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578215Z\"\n        },\n        \"installedPackage-libkmod2:x86_64:26-1\": {\n          \"id\": \"installedPackage-libkmod2:x86_64:26-1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"26-1\",\n              \"packageName\": \"libkmod2\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578219Z\"\n        },\n        \"installedPackage-libfuse2:x86_64:2.9.9-1+deb10u1\": {\n          \"id\": \"installedPackage-libfuse2:x86_64:2.9.9-1+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.9.9-1+deb10u1\",\n              \"packageName\": \"libfuse2\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578201Z\"\n        },\n        \"installedPackage-libpcap0.8:x86_64:1.8.1-6+deb10u1\": {\n          \"id\": \"installedPackage-libpcap0.8:x86_64:1.8.1-6+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.8.1-6+deb10u1\",\n              \"packageName\": \"libpcap0.8\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578254Z\"\n        },\n        \"installedPackage-libssh2-1:x86_64:1.8.0-2.1+deb10u1\": {\n          \"id\": \"installedPackage-libssh2-1:x86_64:1.8.0-2.1+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"1.8.0-2.1+deb10u1\",\n              \"packageName\": \"libssh2-1\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578275Z\"\n        },\n        \"installedPackage-python3-pkg-resources:all:40.8.0-1\": {\n          \"id\": \"installedPackage-python3-pkg-resources:all:40.8.0-1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"all\",\n              \"version\": \"40.8.0-1\",\n              \"packageName\": \"python3-pkg-resources\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578317Z\"\n        },\n        \"installedPackage-sed:x86_64:4.7-1\": {\n          \"id\": \"installedPackage-sed:x86_64:4.7-1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"4.7-1\",\n              \"packageName\": \"sed\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578325Z\"\n        },\n        \"installedPackage-cpio:x86_64:2.12+dfsg-9+deb10u1\": {\n          \"id\": \"installedPackage-cpio:x86_64:2.12+dfsg-9+deb10u1\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"2.12+dfsg-9+deb10u1\",\n              \"packageName\": \"cpio\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578100Z\"\n        },\n        \"installedPackage-libncurses6:x86_64:6.1+20181013-2+deb10u5\": {\n          \"id\": \"installedPackage-libncurses6:x86_64:6.1+20181013-2+deb10u5\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"6.1+20181013-2+deb10u5\",\n              \"packageName\": \"libncurses6\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578235Z\"\n        },\n        \"installedPackage-libpsl5:x86_64:0.20.2-2\": {\n          \"id\": \"installedPackage-libpsl5:x86_64:0.20.2-2\",\n          \"originType\": \"INVENTORY_REPORT\",\n          \"type\": \"INSTALLED_PACKAGE\",\n          \"installedPackage\": {\n            \"aptPackage\": {\n              \"architecture\": \"x86_64\",\n              \"version\": \"0.20.2-2\",\n              \"packageName\": \"libpsl5\"\n            }\n          },\n          \"createTime\": \"2024-06-25T14:17:46.578260Z\"\n        }\n      },\n      \"name\": \"projects/12340051/locations/us-central1-a/instances/1574288005952962235/inventory\",\n      \"updateTime\": \"2024-06-25T17:07:46.454014Z\"\n    }\n  ],\n  \"nextPageToken\": \"CJfytMableLuLg==\"\n}\n"
  },
  {
    "path": "test-data/osconfig1/json-dumps/inventory.json",
    "content": "{\n  \"osInfo\": {\n    \"longName\": \"Debian GNU/Linux 10 (buster)\",\n    \"shortName\": \"debian\",\n    \"version\": \"10\",\n    \"architecture\": \"x86_64\",\n    \"kernelVersion\": \"#1 SMP Debian 4.19.304-1 (2024-01-09)\",\n    \"kernelRelease\": \"4.19.0-26-cloud-amd64\",\n    \"osconfigAgentVersion\": \"20231207.01-g1\",\n    \"hostname\": \"fake-instance\"\n  },\n  \"items\": {\n    \"installedPackage-libassuan0:x86_64:2.5.2-1\": {\n      \"id\": \"installedPackage-libassuan0:x86_64:2.5.2-1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.5.2-1\",\n          \"packageName\": \"libassuan0\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556110Z\"\n    },\n    \"installedPackage-libgpm2:x86_64:1.20.7-5\": {\n      \"id\": \"installedPackage-libgpm2:x86_64:1.20.7-5\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.20.7-5\",\n          \"packageName\": \"libgpm2\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556143Z\"\n    },\n    \"installedPackage-python3-debian:all:0.1.35\": {\n      \"id\": \"installedPackage-python3-debian:all:0.1.35\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"0.1.35\",\n          \"packageName\": \"python3-debian\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556218Z\"\n    },\n    \"installedPackage-linux-base:all:4.6\": {\n      \"id\": \"installedPackage-linux-base:all:4.6\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"4.6\",\n          \"packageName\": \"linux-base\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556197Z\"\n    },\n    \"installedPackage-libext2fs2:x86_64:1.44.5-1+deb10u3\": {\n      \"id\": \"installedPackage-libext2fs2:x86_64:1.44.5-1+deb10u3\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.44.5-1+deb10u3\",\n          \"packageName\": \"libext2fs2\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556134Z\"\n    },\n    \"installedPackage-procps:x86_64:2:3.3.15-2\": {\n      \"id\": \"installedPackage-procps:x86_64:2:3.3.15-2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2:3.3.15-2\",\n          \"packageName\": \"procps\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556213Z\"\n    },\n    \"installedPackage-libc6:x86_64:2.28-10+deb10u2\": {\n      \"id\": \"installedPackage-libc6:x86_64:2.28-10+deb10u2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.28-10+deb10u2\",\n          \"packageName\": \"libc6\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556124Z\"\n    },\n    \"installedPackage-python3-pysimplesoap:all:1.16.2-1\": {\n      \"id\": \"installedPackage-python3-pysimplesoap:all:1.16.2-1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"1.16.2-1\",\n          \"packageName\": \"python3-pysimplesoap\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556222Z\"\n    },\n    \"installedPackage-libgcrypt20:x86_64:1.8.4-5+deb10u1\": {\n      \"id\": \"installedPackage-libgcrypt20:x86_64:1.8.4-5+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.8.4-5+deb10u1\",\n          \"packageName\": \"libgcrypt20\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556139Z\"\n    },\n    \"installedPackage-kmod:x86_64:26-1\": {\n      \"id\": \"installedPackage-kmod:x86_64:26-1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"26-1\",\n          \"packageName\": \"kmod\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556106Z\"\n    },\n    \"installedPackage-libidn11:x86_64:1.33-2.2\": {\n      \"id\": \"installedPackage-libidn11:x86_64:1.33-2.2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.33-2.2\",\n          \"packageName\": \"libidn11\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556146Z\"\n    },\n    \"installedPackage-python3-apt:x86_64:1.8.4.3\": {\n      \"id\": \"installedPackage-python3-apt:x86_64:1.8.4.3\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.8.4.3\",\n          \"packageName\": \"python3-apt\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556215Z\"\n    },\n    \"installedPackage-libexpat1:x86_64:2.2.6-2+deb10u7\": {\n      \"id\": \"installedPackage-libexpat1:x86_64:2.2.6-2+deb10u7\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.2.6-2+deb10u7\",\n          \"packageName\": \"libexpat1\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556133Z\"\n    },\n    \"installedPackage-dmidecode:x86_64:3.2-1\": {\n      \"id\": \"installedPackage-dmidecode:x86_64:3.2-1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"3.2-1\",\n          \"packageName\": \"dmidecode\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556076Z\"\n    },\n    \"installedPackage-dash:x86_64:0.5.10.2-5\": {\n      \"id\": \"installedPackage-dash:x86_64:0.5.10.2-5\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"0.5.10.2-5\",\n          \"packageName\": \"dash\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556071Z\"\n    },\n    \"installedPackage-libargon2-1:x86_64:0~20171227-0.2\": {\n      \"id\": \"installedPackage-libargon2-1:x86_64:0~20171227-0.2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"0~20171227-0.2\",\n          \"packageName\": \"libargon2-1\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556109Z\"\n    },\n    \"installedPackage-gpgconf:x86_64:2.2.12-1+deb10u2\": {\n      \"id\": \"installedPackage-gpgconf:x86_64:2.2.12-1+deb10u2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.2.12-1+deb10u2\",\n          \"packageName\": \"gpgconf\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556093Z\"\n    },\n    \"installedPackage-libmariadb3:x86_64:1:10.3.39-0+deb10u2\": {\n      \"id\": \"installedPackage-libmariadb3:x86_64:1:10.3.39-0+deb10u2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1:10.3.39-0+deb10u2\",\n          \"packageName\": \"libmariadb3\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556161Z\"\n    },\n    \"installedPackage-libfribidi0:x86_64:1.0.5-3.1+deb10u2\": {\n      \"id\": \"installedPackage-libfribidi0:x86_64:1.0.5-3.1+deb10u2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.0.5-3.1+deb10u2\",\n          \"packageName\": \"libfribidi0\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556136Z\"\n    },\n    \"installedPackage-google-compute-engine-oslogin:x86_64:1:20231004.00-g1+deb10\": {\n      \"id\": \"installedPackage-google-compute-engine-oslogin:x86_64:1:20231004.00-g1+deb10\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1:20231004.00-g1+deb10\",\n          \"packageName\": \"google-compute-engine-oslogin\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556088Z\"\n    },\n    \"installedPackage-python3:x86_64:3.7.3-1\": {\n      \"id\": \"installedPackage-python3:x86_64:3.7.3-1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"3.7.3-1\",\n          \"packageName\": \"python3\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556215Z\"\n    },\n    \"installedPackage-libltdl7:x86_64:2.4.6-9\": {\n      \"id\": \"installedPackage-libltdl7:x86_64:2.4.6-9\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.4.6-9\",\n          \"packageName\": \"libltdl7\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556157Z\"\n    },\n    \"installedPackage-libmnl0:x86_64:1.0.4-2\": {\n      \"id\": \"installedPackage-libmnl0:x86_64:1.0.4-2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.0.4-2\",\n          \"packageName\": \"libmnl0\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556161Z\"\n    },\n    \"installedPackage-libapt-pkg5.0:x86_64:1.8.2.3\": {\n      \"id\": \"installedPackage-libapt-pkg5.0:x86_64:1.8.2.3\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.8.2.3\",\n          \"packageName\": \"libapt-pkg5.0\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556109Z\"\n    },\n    \"installedPackage-libpython2.7-minimal:x86_64:2.7.16-2+deb10u4\": {\n      \"id\": \"installedPackage-libpython2.7-minimal:x86_64:2.7.16-2+deb10u4\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.7.16-2+deb10u4\",\n          \"packageName\": \"libpython2.7-minimal\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556180Z\"\n    },\n    \"installedPackage-gpgv:x86_64:2.2.12-1+deb10u2\": {\n      \"id\": \"installedPackage-gpgv:x86_64:2.2.12-1+deb10u2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.2.12-1+deb10u2\",\n          \"packageName\": \"gpgv\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556094Z\"\n    },\n    \"installedPackage-bsdutils:x86_64:1:2.33.1-0.1+deb10u1\": {\n      \"id\": \"installedPackage-bsdutils:x86_64:1:2.33.1-0.1+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1:2.33.1-0.1+deb10u1\",\n          \"packageName\": \"bsdutils\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556066Z\"\n    },\n    \"installedPackage-libblkid1:x86_64:2.33.1-0.1+deb10u1\": {\n      \"id\": \"installedPackage-libblkid1:x86_64:2.33.1-0.1+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.33.1-0.1+deb10u1\",\n          \"packageName\": \"libblkid1\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556122Z\"\n    },\n    \"installedPackage-libnettle6:x86_64:3.4.1-1+deb10u1\": {\n      \"id\": \"installedPackage-libnettle6:x86_64:3.4.1-1+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"3.4.1-1+deb10u1\",\n          \"packageName\": \"libnettle6\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556164Z\"\n    },\n    \"installedPackage-e2fsprogs:x86_64:1.44.5-1+deb10u3\": {\n      \"id\": \"installedPackage-e2fsprogs:x86_64:1.44.5-1+deb10u3\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.44.5-1+deb10u3\",\n          \"packageName\": \"e2fsprogs\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556077Z\"\n    },\n    \"installedPackage-libksba8:x86_64:1.3.5-2+deb10u2\": {\n      \"id\": \"installedPackage-libksba8:x86_64:1.3.5-2+deb10u2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.3.5-2+deb10u2\",\n          \"packageName\": \"libksba8\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556154Z\"\n    },\n    \"installedPackage-publicsuffix:all:20220811.1734-0+deb10u1\": {\n      \"id\": \"installedPackage-publicsuffix:all:20220811.1734-0+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"20220811.1734-0+deb10u1\",\n          \"packageName\": \"publicsuffix\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556214Z\"\n    },\n    \"installedPackage-findutils:x86_64:4.6.0+git+20190209-2\": {\n      \"id\": \"installedPackage-findutils:x86_64:4.6.0+git+20190209-2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"4.6.0+git+20190209-2\",\n          \"packageName\": \"findutils\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556081Z\"\n    },\n    \"installedPackage-python3-debianbts:all:2.8.2\": {\n      \"id\": \"installedPackage-python3-debianbts:all:2.8.2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"2.8.2\",\n          \"packageName\": \"python3-debianbts\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556218Z\"\n    },\n    \"installedPackage-libpython2.7-stdlib:x86_64:2.7.16-2+deb10u4\": {\n      \"id\": \"installedPackage-libpython2.7-stdlib:x86_64:2.7.16-2+deb10u4\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.7.16-2+deb10u4\",\n          \"packageName\": \"libpython2.7-stdlib\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556181Z\"\n    },\n    \"installedPackage-libsasl2-2:x86_64:2.1.27+dfsg-1+deb10u2\": {\n      \"id\": \"installedPackage-libsasl2-2:x86_64:2.1.27+dfsg-1+deb10u2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.1.27+dfsg-1+deb10u2\",\n          \"packageName\": \"libsasl2-2\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556184Z\"\n    },\n    \"installedPackage-libsepol1:x86_64:2.8-1\": {\n      \"id\": \"installedPackage-libsepol1:x86_64:2.8-1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.8-1\",\n          \"packageName\": \"libsepol1\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556188Z\"\n    },\n    \"installedPackage-vim-common:all:2:8.1.0875-5+deb10u6\": {\n      \"id\": \"installedPackage-vim-common:all:2:8.1.0875-5+deb10u6\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"2:8.1.0875-5+deb10u6\",\n          \"packageName\": \"vim-common\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556238Z\"\n    },\n    \"installedPackage-libestr0:x86_64:0.1.10-2.1\": {\n      \"id\": \"installedPackage-libestr0:x86_64:0.1.10-2.1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"0.1.10-2.1\",\n          \"packageName\": \"libestr0\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556132Z\"\n    },\n    \"installedPackage-ncurses-base:all:6.1+20181013-2+deb10u5\": {\n      \"id\": \"installedPackage-ncurses-base:all:6.1+20181013-2+deb10u5\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"6.1+20181013-2+deb10u5\",\n          \"packageName\": \"ncurses-base\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556206Z\"\n    },\n    \"installedPackage-hostname:x86_64:3.21\": {\n      \"id\": \"installedPackage-hostname:x86_64:3.21\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"3.21\",\n          \"packageName\": \"hostname\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556100Z\"\n    },\n    \"installedPackage-libunistring2:x86_64:0.9.10-1\": {\n      \"id\": \"installedPackage-libunistring2:x86_64:0.9.10-1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"0.9.10-1\",\n          \"packageName\": \"libunistring2\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556194Z\"\n    },\n    \"installedPackage-libapt-inst2.0:x86_64:1.8.2.3\": {\n      \"id\": \"installedPackage-libapt-inst2.0:x86_64:1.8.2.3\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.8.2.3\",\n          \"packageName\": \"libapt-inst2.0\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556108Z\"\n    },\n    \"installedPackage-libnghttp2-14:x86_64:1.36.0-2+deb10u2\": {\n      \"id\": \"installedPackage-libnghttp2-14:x86_64:1.36.0-2+deb10u2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.36.0-2+deb10u2\",\n          \"packageName\": \"libnghttp2-14\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556166Z\"\n    },\n    \"installedPackage-lsb-release:all:10.2019051400\": {\n      \"id\": \"installedPackage-lsb-release:all:10.2019051400\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"10.2019051400\",\n          \"packageName\": \"lsb-release\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556200Z\"\n    },\n    \"installedPackage-initramfs-tools:all:0.133+deb10u1\": {\n      \"id\": \"installedPackage-initramfs-tools:all:0.133+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"0.133+deb10u1\",\n          \"packageName\": \"initramfs-tools\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556102Z\"\n    },\n    \"installedPackage-libgmp10:x86_64:2:6.1.2+dfsg-4+deb10u1\": {\n      \"id\": \"installedPackage-libgmp10:x86_64:2:6.1.2+dfsg-4+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2:6.1.2+dfsg-4+deb10u1\",\n          \"packageName\": \"libgmp10\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556141Z\"\n    },\n    \"installedPackage-google-cloud-packages-archive-keyring:all:1.2-614705963\": {\n      \"id\": \"installedPackage-google-cloud-packages-archive-keyring:all:1.2-614705963\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"1.2-614705963\",\n          \"packageName\": \"google-cloud-packages-archive-keyring\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556087Z\"\n    },\n    \"installedPackage-libnfnetlink0:x86_64:1.0.1-3+b1\": {\n      \"id\": \"installedPackage-libnfnetlink0:x86_64:1.0.1-3+b1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.0.1-3+b1\",\n          \"packageName\": \"libnfnetlink0\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556165Z\"\n    },\n    \"installedPackage-libunbound8:x86_64:1.9.0-2+deb10u4\": {\n      \"id\": \"installedPackage-libunbound8:x86_64:1.9.0-2+deb10u4\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.9.0-2+deb10u4\",\n          \"packageName\": \"libunbound8\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556194Z\"\n    },\n    \"installedPackage-python3-distro-info:all:0.21+deb10u1\": {\n      \"id\": \"installedPackage-python3-distro-info:all:0.21+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"0.21+deb10u1\",\n          \"packageName\": \"python3-distro-info\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556219Z\"\n    },\n    \"installedPackage-mime-support:all:3.62\": {\n      \"id\": \"installedPackage-mime-support:all:3.62\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"3.62\",\n          \"packageName\": \"mime-support\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556203Z\"\n    },\n    \"installedPackage-libdbus-1-3:x86_64:1.12.28-0+deb10u1\": {\n      \"id\": \"installedPackage-libdbus-1-3:x86_64:1.12.28-0+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.12.28-0+deb10u1\",\n          \"packageName\": \"libdbus-1-3\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556128Z\"\n    },\n    \"installedPackage-libudev1:x86_64:241-7~deb10u10\": {\n      \"id\": \"installedPackage-libudev1:x86_64:241-7~deb10u10\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"241-7~deb10u10\",\n          \"packageName\": \"libudev1\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556193Z\"\n    },\n    \"installedPackage-exim4-daemon-light:x86_64:4.92-8+deb10u9\": {\n      \"id\": \"installedPackage-exim4-daemon-light:x86_64:4.92-8+deb10u9\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"4.92-8+deb10u9\",\n          \"packageName\": \"exim4-daemon-light\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556080Z\"\n    },\n    \"installedPackage-libidn2-0:x86_64:2.0.5-1+deb10u1\": {\n      \"id\": \"installedPackage-libidn2-0:x86_64:2.0.5-1+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.0.5-1+deb10u1\",\n          \"packageName\": \"libidn2-0\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556146Z\"\n    },\n    \"installedPackage-gpgsm:x86_64:2.2.12-1+deb10u2\": {\n      \"id\": \"installedPackage-gpgsm:x86_64:2.2.12-1+deb10u2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.2.12-1+deb10u2\",\n          \"packageName\": \"gpgsm\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556093Z\"\n    },\n    \"installedPackage-libp11-kit0:x86_64:0.23.15-2+deb10u1\": {\n      \"id\": \"installedPackage-libp11-kit0:x86_64:0.23.15-2+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"0.23.15-2+deb10u1\",\n          \"packageName\": \"libp11-kit0\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556172Z\"\n    },\n    \"installedPackage-grub-pc-bin:x86_64:2.06-3~deb10u4\": {\n      \"id\": \"installedPackage-grub-pc-bin:x86_64:2.06-3~deb10u4\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.06-3~deb10u4\",\n          \"packageName\": \"grub-pc-bin\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556097Z\"\n    },\n    \"installedPackage-libfdisk1:x86_64:2.33.1-0.1+deb10u1\": {\n      \"id\": \"installedPackage-libfdisk1:x86_64:2.33.1-0.1+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.33.1-0.1+deb10u1\",\n          \"packageName\": \"libfdisk1\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556135Z\"\n    },\n    \"installedPackage-perl-base:x86_64:5.28.1-6+deb10u1\": {\n      \"id\": \"installedPackage-perl-base:x86_64:5.28.1-6+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"5.28.1-6+deb10u1\",\n          \"packageName\": \"perl-base\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556212Z\"\n    },\n    \"installedPackage-gcc-8-base:x86_64:8.3.0-6\": {\n      \"id\": \"installedPackage-gcc-8-base:x86_64:8.3.0-6\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"8.3.0-6\",\n          \"packageName\": \"gcc-8-base\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556082Z\"\n    },\n    \"installedPackage-libcap2:x86_64:1:2.25-2\": {\n      \"id\": \"installedPackage-libcap2:x86_64:1:2.25-2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1:2.25-2\",\n          \"packageName\": \"libcap2\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556125Z\"\n    },\n    \"installedPackage-libtasn1-6:x86_64:4.13-3+deb10u1\": {\n      \"id\": \"installedPackage-libtasn1-6:x86_64:4.13-3+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"4.13-3+deb10u1\",\n          \"packageName\": \"libtasn1-6\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556192Z\"\n    },\n    \"installedPackage-iproute2:x86_64:4.20.0-2+deb10u1\": {\n      \"id\": \"installedPackage-iproute2:x86_64:4.20.0-2+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"4.20.0-2+deb10u1\",\n          \"packageName\": \"iproute2\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556103Z\"\n    },\n    \"installedPackage-libldap-common:all:2.4.47+dfsg-3+deb10u7\": {\n      \"id\": \"installedPackage-libldap-common:all:2.4.47+dfsg-3+deb10u7\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"2.4.47+dfsg-3+deb10u7\",\n          \"packageName\": \"libldap-common\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556156Z\"\n    },\n    \"installedPackage-systemd-sysv:x86_64:241-7~deb10u10\": {\n      \"id\": \"installedPackage-systemd-sysv:x86_64:241-7~deb10u10\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"241-7~deb10u10\",\n          \"packageName\": \"systemd-sysv\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556232Z\"\n    },\n    \"installedPackage-login:x86_64:1:4.5-1.1\": {\n      \"id\": \"installedPackage-login:x86_64:1:4.5-1.1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1:4.5-1.1\",\n          \"packageName\": \"login\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556199Z\"\n    },\n    \"installedPackage-grub-cloud-amd64:x86_64:0.0.4\": {\n      \"id\": \"installedPackage-grub-cloud-amd64:x86_64:0.0.4\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"0.0.4\",\n          \"packageName\": \"grub-cloud-amd64\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556095Z\"\n    },\n    \"installedPackage-chrony:x86_64:3.4-4+deb10u2\": {\n      \"id\": \"installedPackage-chrony:x86_64:3.4-4+deb10u2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"3.4-4+deb10u2\",\n          \"packageName\": \"chrony\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556068Z\"\n    },\n    \"installedPackage-gzip:x86_64:1.9-3+deb10u1\": {\n      \"id\": \"installedPackage-gzip:x86_64:1.9-3+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.9-3+deb10u1\",\n          \"packageName\": \"gzip\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556099Z\"\n    },\n    \"availablePackage-google-cloud-cli:x86_64:471.0.0-0\": {\n      \"id\": \"availablePackage-google-cloud-cli:x86_64:471.0.0-0\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"AVAILABLE_PACKAGE\",\n      \"availablePackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"471.0.0-0\",\n          \"packageName\": \"google-cloud-cli\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556043Z\"\n    },\n    \"installedPackage-libhogweed4:x86_64:3.4.1-1+deb10u1\": {\n      \"id\": \"installedPackage-libhogweed4:x86_64:3.4.1-1+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"3.4.1-1+deb10u1\",\n          \"packageName\": \"libhogweed4\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556145Z\"\n    },\n    \"installedPackage-libicu63:x86_64:63.1-6+deb10u3\": {\n      \"id\": \"installedPackage-libicu63:x86_64:63.1-6+deb10u3\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"63.1-6+deb10u3\",\n          \"packageName\": \"libicu63\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556145Z\"\n    },\n    \"installedPackage-grep:x86_64:3.3-1\": {\n      \"id\": \"installedPackage-grep:x86_64:3.3-1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"3.3-1\",\n          \"packageName\": \"grep\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556094Z\"\n    },\n    \"installedPackage-libc-bin:x86_64:2.28-10+deb10u2\": {\n      \"id\": \"installedPackage-libc-bin:x86_64:2.28-10+deb10u2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.28-10+deb10u2\",\n          \"packageName\": \"libc-bin\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556123Z\"\n    },\n    \"installedPackage-grub-common:x86_64:2.06-3~deb10u4\": {\n      \"id\": \"installedPackage-grub-common:x86_64:2.06-3~deb10u4\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.06-3~deb10u4\",\n          \"packageName\": \"grub-common\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556096Z\"\n    },\n    \"installedPackage-gpg-wks-server:x86_64:2.2.12-1+deb10u2\": {\n      \"id\": \"installedPackage-gpg-wks-server:x86_64:2.2.12-1+deb10u2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.2.12-1+deb10u2\",\n          \"packageName\": \"gpg-wks-server\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556092Z\"\n    },\n    \"installedPackage-libpam-modules:x86_64:1.3.1-5\": {\n      \"id\": \"installedPackage-libpam-modules:x86_64:1.3.1-5\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.3.1-5\",\n          \"packageName\": \"libpam-modules\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556172Z\"\n    },\n    \"installedPackage-uuid-runtime:x86_64:2.33.1-0.1+deb10u1\": {\n      \"id\": \"installedPackage-uuid-runtime:x86_64:2.33.1-0.1+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.33.1-0.1+deb10u1\",\n          \"packageName\": \"uuid-runtime\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556237Z\"\n    },\n    \"installedPackage-libkrb5-3:x86_64:1.17-3+deb10u6\": {\n      \"id\": \"installedPackage-libkrb5-3:x86_64:1.17-3+deb10u6\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.17-3+deb10u6\",\n          \"packageName\": \"libkrb5-3\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556153Z\"\n    },\n    \"installedPackage-librtmp1:x86_64:2.4+20151223.gitfa8646d.1-2\": {\n      \"id\": \"installedPackage-librtmp1:x86_64:2.4+20151223.gitfa8646d.1-2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.4+20151223.gitfa8646d.1-2\",\n          \"packageName\": \"librtmp1\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556184Z\"\n    },\n    \"installedPackage-google-fluentd-catch-all-config:all:0.8.0\": {\n      \"id\": \"installedPackage-google-fluentd-catch-all-config:all:0.8.0\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"0.8.0\",\n          \"packageName\": \"google-fluentd-catch-all-config\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556089Z\"\n    },\n    \"installedPackage-libpam-runtime:all:1.3.1-5\": {\n      \"id\": \"installedPackage-libpam-runtime:all:1.3.1-5\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"1.3.1-5\",\n          \"packageName\": \"libpam-runtime\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556173Z\"\n    },\n    \"installedPackage-libmagic1:x86_64:1:5.35-4+deb10u2\": {\n      \"id\": \"installedPackage-libmagic1:x86_64:1:5.35-4+deb10u2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1:5.35-4+deb10u2\",\n          \"packageName\": \"libmagic1\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556160Z\"\n    },\n    \"installedPackage-libgeoip1:x86_64:1.6.12-1\": {\n      \"id\": \"installedPackage-libgeoip1:x86_64:1.6.12-1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.6.12-1\",\n          \"packageName\": \"libgeoip1\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556140Z\"\n    },\n    \"installedPackage-libpam-cap:x86_64:1:2.25-2\": {\n      \"id\": \"installedPackage-libpam-cap:x86_64:1:2.25-2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1:2.25-2\",\n          \"packageName\": \"libpam-cap\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556172Z\"\n    },\n    \"installedPackage-bash:x86_64:5.0-4\": {\n      \"id\": \"installedPackage-bash:x86_64:5.0-4\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"5.0-4\",\n          \"packageName\": \"bash\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556063Z\"\n    },\n    \"installedPackage-gnupg-utils:x86_64:2.2.12-1+deb10u2\": {\n      \"id\": \"installedPackage-gnupg-utils:x86_64:2.2.12-1+deb10u2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.2.12-1+deb10u2\",\n          \"packageName\": \"gnupg-utils\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556086Z\"\n    },\n    \"availablePackage-google-osconfig-agent:x86_64:1:20240320.00-g1\": {\n      \"id\": \"availablePackage-google-osconfig-agent:x86_64:1:20240320.00-g1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"AVAILABLE_PACKAGE\",\n      \"availablePackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1:20240320.00-g1\",\n          \"packageName\": \"google-osconfig-agent\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556052Z\"\n    },\n    \"installedPackage-shim-signed:x86_64:1.39~1+deb10u1+15.7-1~deb10u1\": {\n      \"id\": \"installedPackage-shim-signed:x86_64:1.39~1+deb10u1+15.7-1~deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.39~1+deb10u1+15.7-1~deb10u1\",\n          \"packageName\": \"shim-signed\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556229Z\"\n    },\n    \"installedPackage-libsemanage-common:all:2.8-2\": {\n      \"id\": \"installedPackage-libsemanage-common:all:2.8-2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"2.8-2\",\n          \"packageName\": \"libsemanage-common\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556187Z\"\n    },\n    \"installedPackage-libcap-ng0:x86_64:0.7.9-2\": {\n      \"id\": \"installedPackage-libcap-ng0:x86_64:0.7.9-2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"0.7.9-2\",\n          \"packageName\": \"libcap-ng0\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556124Z\"\n    },\n    \"installedPackage-shim-signed-common:all:1.39~1+deb10u1+15.7-1~deb10u1\": {\n      \"id\": \"installedPackage-shim-signed-common:all:1.39~1+deb10u1+15.7-1~deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"1.39~1+deb10u1+15.7-1~deb10u1\",\n          \"packageName\": \"shim-signed-common\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556229Z\"\n    },\n    \"installedPackage-gpg-agent:x86_64:2.2.12-1+deb10u2\": {\n      \"id\": \"installedPackage-gpg-agent:x86_64:2.2.12-1+deb10u2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.2.12-1+deb10u2\",\n          \"packageName\": \"gpg-agent\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556092Z\"\n    },\n    \"installedPackage-libbsd0:x86_64:0.9.1-2+deb10u1\": {\n      \"id\": \"installedPackage-libbsd0:x86_64:0.9.1-2+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"0.9.1-2+deb10u1\",\n          \"packageName\": \"libbsd0\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556122Z\"\n    },\n    \"installedPackage-nano:x86_64:3.2-3\": {\n      \"id\": \"installedPackage-nano:x86_64:3.2-3\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"3.2-3\",\n          \"packageName\": \"nano\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556205Z\"\n    },\n    \"installedPackage-libgcc1:x86_64:1:8.3.0-6\": {\n      \"id\": \"installedPackage-libgcc1:x86_64:1:8.3.0-6\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1:8.3.0-6\",\n          \"packageName\": \"libgcc1\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556138Z\"\n    },\n    \"installedPackage-mailutils:x86_64:1:3.5-4\": {\n      \"id\": \"installedPackage-mailutils:x86_64:1:3.5-4\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1:3.5-4\",\n          \"packageName\": \"mailutils\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556201Z\"\n    },\n    \"installedPackage-tar:x86_64:1.30+dfsg-6+deb10u1\": {\n      \"id\": \"installedPackage-tar:x86_64:1.30+dfsg-6+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.30+dfsg-6+deb10u1\",\n          \"packageName\": \"tar\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556233Z\"\n    },\n    \"installedPackage-dirmngr:x86_64:2.2.12-1+deb10u2\": {\n      \"id\": \"installedPackage-dirmngr:x86_64:2.2.12-1+deb10u2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.2.12-1+deb10u2\",\n          \"packageName\": \"dirmngr\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556075Z\"\n    },\n    \"installedPackage-apt-listchanges:all:3.19\": {\n      \"id\": \"installedPackage-apt-listchanges:all:3.19\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"3.19\",\n          \"packageName\": \"apt-listchanges\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556060Z\"\n    },\n    \"installedPackage-libwrap0:x86_64:7.6.q-28\": {\n      \"id\": \"installedPackage-libwrap0:x86_64:7.6.q-28\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"7.6.q-28\",\n          \"packageName\": \"libwrap0\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556195Z\"\n    },\n    \"installedPackage-pinentry-curses:x86_64:1.1.0-2\": {\n      \"id\": \"installedPackage-pinentry-curses:x86_64:1.1.0-2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.1.0-2\",\n          \"packageName\": \"pinentry-curses\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556213Z\"\n    },\n    \"installedPackage-ucf:all:3.0038+nmu1\": {\n      \"id\": \"installedPackage-ucf:all:3.0038+nmu1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"3.0038+nmu1\",\n          \"packageName\": \"ucf\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556235Z\"\n    },\n    \"installedPackage-libprotobuf-c1:x86_64:1.3.1-1+b1\": {\n      \"id\": \"installedPackage-libprotobuf-c1:x86_64:1.3.1-1+b1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.3.1-1+b1\",\n          \"packageName\": \"libprotobuf-c1\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556179Z\"\n    },\n    \"installedPackage-dmsetup:x86_64:2:1.02.155-3\": {\n      \"id\": \"installedPackage-dmsetup:x86_64:2:1.02.155-3\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2:1.02.155-3\",\n          \"packageName\": \"dmsetup\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556076Z\"\n    },\n    \"installedPackage-libgpg-error0:x86_64:1.35-1\": {\n      \"id\": \"installedPackage-libgpg-error0:x86_64:1.35-1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.35-1\",\n          \"packageName\": \"libgpg-error0\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556142Z\"\n    },\n    \"installedPackage-gdisk:x86_64:1.0.3-1.1\": {\n      \"id\": \"installedPackage-gdisk:x86_64:1.0.3-1.1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.0.3-1.1\",\n          \"packageName\": \"gdisk\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556083Z\"\n    },\n    \"installedPackage-openssh-sftp-server:x86_64:1:7.9p1-10+deb10u4\": {\n      \"id\": \"installedPackage-openssh-sftp-server:x86_64:1:7.9p1-10+deb10u4\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1:7.9p1-10+deb10u4\",\n          \"packageName\": \"openssh-sftp-server\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556209Z\"\n    },\n    \"installedPackage-libattr1:x86_64:1:2.4.48-4\": {\n      \"id\": \"installedPackage-libattr1:x86_64:1:2.4.48-4\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1:2.4.48-4\",\n          \"packageName\": \"libattr1\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556113Z\"\n    },\n    \"installedPackage-libfreetype6:x86_64:2.9.1-3+deb10u3\": {\n      \"id\": \"installedPackage-libfreetype6:x86_64:2.9.1-3+deb10u3\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.9.1-3+deb10u3\",\n          \"packageName\": \"libfreetype6\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556136Z\"\n    },\n    \"installedPackage-python3-certifi:all:2018.8.24-1\": {\n      \"id\": \"installedPackage-python3-certifi:all:2018.8.24-1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"2018.8.24-1\",\n          \"packageName\": \"python3-certifi\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556216Z\"\n    },\n    \"installedPackage-libpython2.7:x86_64:2.7.16-2+deb10u4\": {\n      \"id\": \"installedPackage-libpython2.7:x86_64:2.7.16-2+deb10u4\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.7.16-2+deb10u4\",\n          \"packageName\": \"libpython2.7\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556180Z\"\n    },\n    \"installedPackage-libseccomp2:x86_64:2.3.3-4\": {\n      \"id\": \"installedPackage-libseccomp2:x86_64:2.3.3-4\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.3.3-4\",\n          \"packageName\": \"libseccomp2\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556186Z\"\n    },\n    \"installedPackage-sudo:x86_64:1.8.27-1+deb10u6\": {\n      \"id\": \"installedPackage-sudo:x86_64:1.8.27-1+deb10u6\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.8.27-1+deb10u6\",\n          \"packageName\": \"sudo\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556231Z\"\n    },\n    \"installedPackage-python3-debconf:all:1.5.71+deb10u1\": {\n      \"id\": \"installedPackage-python3-debconf:all:1.5.71+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"1.5.71+deb10u1\",\n          \"packageName\": \"python3-debconf\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556217Z\"\n    },\n    \"installedPackage-unattended-upgrades:all:1.11.2\": {\n      \"id\": \"installedPackage-unattended-upgrades:all:1.11.2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"1.11.2\",\n          \"packageName\": \"unattended-upgrades\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556236Z\"\n    },\n    \"installedPackage-gnupg-l10n:all:2.2.12-1+deb10u2\": {\n      \"id\": \"installedPackage-gnupg-l10n:all:2.2.12-1+deb10u2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"2.2.12-1+deb10u2\",\n          \"packageName\": \"gnupg-l10n\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556085Z\"\n    },\n    \"installedPackage-libpipeline1:x86_64:1.5.1-2\": {\n      \"id\": \"installedPackage-libpipeline1:x86_64:1.5.1-2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.5.1-2\",\n          \"packageName\": \"libpipeline1\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556177Z\"\n    },\n    \"installedPackage-exim4-base:x86_64:4.92-8+deb10u9\": {\n      \"id\": \"installedPackage-exim4-base:x86_64:4.92-8+deb10u9\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"4.92-8+deb10u9\",\n          \"packageName\": \"exim4-base\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556079Z\"\n    },\n    \"installedPackage-python3-minimal:x86_64:3.7.3-1\": {\n      \"id\": \"installedPackage-python3-minimal:x86_64:3.7.3-1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"3.7.3-1\",\n          \"packageName\": \"python3-minimal\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556221Z\"\n    },\n    \"installedPackage-libmagic-mgc:x86_64:1:5.35-4+deb10u2\": {\n      \"id\": \"installedPackage-libmagic-mgc:x86_64:1:5.35-4+deb10u2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1:5.35-4+deb10u2\",\n          \"packageName\": \"libmagic-mgc\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556159Z\"\n    },\n    \"installedPackage-python3-reportbug:all:7.5.3~deb10u2\": {\n      \"id\": \"installedPackage-python3-reportbug:all:7.5.3~deb10u2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"7.5.3~deb10u2\",\n          \"packageName\": \"python3-reportbug\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556223Z\"\n    },\n    \"installedPackage-reportbug:all:7.5.3~deb10u2\": {\n      \"id\": \"installedPackage-reportbug:all:7.5.3~deb10u2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"7.5.3~deb10u2\",\n          \"packageName\": \"reportbug\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556226Z\"\n    },\n    \"installedPackage-libkeyutils1:x86_64:1.6-6\": {\n      \"id\": \"installedPackage-libkeyutils1:x86_64:1.6-6\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.6-6\",\n          \"packageName\": \"libkeyutils1\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556152Z\"\n    },\n    \"installedPackage-libpam-systemd:x86_64:241-7~deb10u10\": {\n      \"id\": \"installedPackage-libpam-systemd:x86_64:241-7~deb10u10\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"241-7~deb10u10\",\n          \"packageName\": \"libpam-systemd\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556174Z\"\n    },\n    \"installedPackage-mount:x86_64:2.33.1-0.1+deb10u1\": {\n      \"id\": \"installedPackage-mount:x86_64:2.33.1-0.1+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.33.1-0.1+deb10u1\",\n          \"packageName\": \"mount\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556204Z\"\n    },\n    \"installedPackage-bash-completion:all:1:2.8-6\": {\n      \"id\": \"installedPackage-bash-completion:all:1:2.8-6\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"1:2.8-6\",\n          \"packageName\": \"bash-completion\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556064Z\"\n    },\n    \"installedPackage-libpam-modules-bin:x86_64:1.3.1-5\": {\n      \"id\": \"installedPackage-libpam-modules-bin:x86_64:1.3.1-5\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.3.1-5\",\n          \"packageName\": \"libpam-modules-bin\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556173Z\"\n    },\n    \"installedPackage-exim4-config:all:4.92-8+deb10u9\": {\n      \"id\": \"installedPackage-exim4-config:all:4.92-8+deb10u9\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"4.92-8+deb10u9\",\n          \"packageName\": \"exim4-config\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556079Z\"\n    },\n    \"installedPackage-libuchardet0:x86_64:0.0.6-3\": {\n      \"id\": \"installedPackage-libuchardet0:x86_64:0.0.6-3\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"0.0.6-3\",\n          \"packageName\": \"libuchardet0\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556193Z\"\n    },\n    \"installedPackage-libxml2:x86_64:2.9.4+dfsg1-7+deb10u6\": {\n      \"id\": \"installedPackage-libxml2:x86_64:2.9.4+dfsg1-7+deb10u6\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.9.4+dfsg1-7+deb10u6\",\n          \"packageName\": \"libxml2\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556196Z\"\n    },\n    \"installedPackage-libpopt0:x86_64:1.16-12\": {\n      \"id\": \"installedPackage-libpopt0:x86_64:1.16-12\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.16-12\",\n          \"packageName\": \"libpopt0\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556178Z\"\n    },\n    \"installedPackage-libkyotocabinet16v5:x86_64:1.2.76-4.2+b1\": {\n      \"id\": \"installedPackage-libkyotocabinet16v5:x86_64:1.2.76-4.2+b1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.2.76-4.2+b1\",\n          \"packageName\": \"libkyotocabinet16v5\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556154Z\"\n    },\n    \"installedPackage-whiptail:x86_64:0.52.20-8\": {\n      \"id\": \"installedPackage-whiptail:x86_64:0.52.20-8\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"0.52.20-8\",\n          \"packageName\": \"whiptail\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556240Z\"\n    },\n    \"installedPackage-libnewt0.52:x86_64:0.52.20-8\": {\n      \"id\": \"installedPackage-libnewt0.52:x86_64:0.52.20-8\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"0.52.20-8\",\n          \"packageName\": \"libnewt0.52\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556165Z\"\n    },\n    \"installedPackage-libgc1c2:x86_64:1:7.6.4-0.4\": {\n      \"id\": \"installedPackage-libgc1c2:x86_64:1:7.6.4-0.4\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1:7.6.4-0.4\",\n          \"packageName\": \"libgc1c2\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556138Z\"\n    },\n    \"installedPackage-libpcre2-8-0:x86_64:10.32-5+deb10u1\": {\n      \"id\": \"installedPackage-libpcre2-8-0:x86_64:10.32-5+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"10.32-5+deb10u1\",\n          \"packageName\": \"libpcre2-8-0\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556176Z\"\n    },\n    \"installedPackage-ncurses-bin:x86_64:6.1+20181013-2+deb10u5\": {\n      \"id\": \"installedPackage-ncurses-bin:x86_64:6.1+20181013-2+deb10u5\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"6.1+20181013-2+deb10u5\",\n          \"packageName\": \"ncurses-bin\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556206Z\"\n    },\n    \"installedPackage-screen:x86_64:4.6.2-3+deb10u1\": {\n      \"id\": \"installedPackage-screen:x86_64:4.6.2-3+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"4.6.2-3+deb10u1\",\n          \"packageName\": \"screen\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556227Z\"\n    },\n    \"installedPackage-libbz2-1.0:x86_64:1.0.6-9.2~deb10u2\": {\n      \"id\": \"installedPackage-libbz2-1.0:x86_64:1.0.6-9.2~deb10u2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.0.6-9.2~deb10u2\",\n          \"packageName\": \"libbz2-1.0\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556123Z\"\n    },\n    \"installedPackage-libsmartcols1:x86_64:2.33.1-0.1+deb10u1\": {\n      \"id\": \"installedPackage-libsmartcols1:x86_64:2.33.1-0.1+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.33.1-0.1+deb10u1\",\n          \"packageName\": \"libsmartcols1\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556189Z\"\n    },\n    \"installedPackage-dpkg:x86_64:1.19.8\": {\n      \"id\": \"installedPackage-dpkg:x86_64:1.19.8\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.19.8\",\n          \"packageName\": \"dpkg\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556077Z\"\n    },\n    \"installedPackage-systemd:x86_64:241-7~deb10u10\": {\n      \"id\": \"installedPackage-systemd:x86_64:241-7~deb10u10\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"241-7~deb10u10\",\n          \"packageName\": \"systemd\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556231Z\"\n    },\n    \"installedPackage-liblwres161:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u10\": {\n      \"id\": \"installedPackage-liblwres161:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u10\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1:9.11.5.P4+dfsg-5.1+deb10u10\",\n          \"packageName\": \"liblwres161\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556158Z\"\n    },\n    \"installedPackage-python3-pycurl:x86_64:7.43.0.2-0.1\": {\n      \"id\": \"installedPackage-python3-pycurl:x86_64:7.43.0.2-0.1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"7.43.0.2-0.1\",\n          \"packageName\": \"python3-pycurl\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556222Z\"\n    },\n    \"installedPackage-debian-archive-keyring:all:2019.1+deb10u2\": {\n      \"id\": \"installedPackage-debian-archive-keyring:all:2019.1+deb10u2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"2019.1+deb10u2\",\n          \"packageName\": \"debian-archive-keyring\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556073Z\"\n    },\n    \"installedPackage-man-db:x86_64:2.8.5-2+deb10u1\": {\n      \"id\": \"installedPackage-man-db:x86_64:2.8.5-2+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.8.5-2+deb10u1\",\n          \"packageName\": \"man-db\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556202Z\"\n    },\n    \"installedPackage-tzdata:all:2021a-0+deb10u12\": {\n      \"id\": \"installedPackage-tzdata:all:2021a-0+deb10u12\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"2021a-0+deb10u12\",\n          \"packageName\": \"tzdata\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556235Z\"\n    },\n    \"installedPackage-vim-runtime:all:2:8.1.0875-5+deb10u6\": {\n      \"id\": \"installedPackage-vim-runtime:all:2:8.1.0875-5+deb10u6\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"2:8.1.0875-5+deb10u6\",\n          \"packageName\": \"vim-runtime\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556239Z\"\n    },\n    \"installedPackage-python3-httplib2:all:0.11.3-2\": {\n      \"id\": \"installedPackage-python3-httplib2:all:0.11.3-2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"0.11.3-2\",\n          \"packageName\": \"python3-httplib2\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556220Z\"\n    },\n    \"installedPackage-libldap-2.4-2:x86_64:2.4.47+dfsg-3+deb10u7\": {\n      \"id\": \"installedPackage-libldap-2.4-2:x86_64:2.4.47+dfsg-3+deb10u7\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.4.47+dfsg-3+deb10u7\",\n          \"packageName\": \"libldap-2.4-2\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556155Z\"\n    },\n    \"installedPackage-groff-base:x86_64:1.22.4-3+deb10u1\": {\n      \"id\": \"installedPackage-groff-base:x86_64:1.22.4-3+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.22.4-3+deb10u1\",\n          \"packageName\": \"groff-base\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556095Z\"\n    },\n    \"installedPackage-libisccc161:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u10\": {\n      \"id\": \"installedPackage-libisccc161:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u10\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1:9.11.5.P4+dfsg-5.1+deb10u10\",\n          \"packageName\": \"libisccc161\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556149Z\"\n    },\n    \"installedPackage-netbase:all:5.6\": {\n      \"id\": \"installedPackage-netbase:all:5.6\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"5.6\",\n          \"packageName\": \"netbase\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556207Z\"\n    },\n    \"installedPackage-python3-urllib3:all:1.24.1-1+deb10u2\": {\n      \"id\": \"installedPackage-python3-urllib3:all:1.24.1-1+deb10u2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"1.24.1-1+deb10u2\",\n          \"packageName\": \"python3-urllib3\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556224Z\"\n    },\n    \"installedPackage-libbind9-161:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u10\": {\n      \"id\": \"installedPackage-libbind9-161:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u10\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1:9.11.5.P4+dfsg-5.1+deb10u10\",\n          \"packageName\": \"libbind9-161\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556121Z\"\n    },\n    \"installedPackage-python3.7-minimal:x86_64:3.7.3-2+deb10u7\": {\n      \"id\": \"installedPackage-python3.7-minimal:x86_64:3.7.3-2+deb10u7\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"3.7.3-2+deb10u7\",\n          \"packageName\": \"python3.7-minimal\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556225Z\"\n    },\n    \"installedPackage-psmisc:x86_64:23.2-1+deb10u1\": {\n      \"id\": \"installedPackage-psmisc:x86_64:23.2-1+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"23.2-1+deb10u1\",\n          \"packageName\": \"psmisc\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556213Z\"\n    },\n    \"installedPackage-liblmdb0:x86_64:0.9.22-1\": {\n      \"id\": \"installedPackage-liblmdb0:x86_64:0.9.22-1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"0.9.22-1\",\n          \"packageName\": \"liblmdb0\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556156Z\"\n    },\n    \"installedPackage-liblzo2-2:x86_64:2.10-0.1\": {\n      \"id\": \"installedPackage-liblzo2-2:x86_64:2.10-0.1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.10-0.1\",\n          \"packageName\": \"liblzo2-2\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556159Z\"\n    },\n    \"installedPackage-libaudit-common:all:1:2.8.4-3\": {\n      \"id\": \"installedPackage-libaudit-common:all:1:2.8.4-3\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"1:2.8.4-3\",\n          \"packageName\": \"libaudit-common\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556113Z\"\n    },\n    \"installedPackage-iputils-ping:x86_64:3:20180629-2+deb10u2\": {\n      \"id\": \"installedPackage-iputils-ping:x86_64:3:20180629-2+deb10u2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"3:20180629-2+deb10u2\",\n          \"packageName\": \"iputils-ping\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556104Z\"\n    },\n    \"installedPackage-libssl1.1:x86_64:1.1.1n-0+deb10u6\": {\n      \"id\": \"installedPackage-libssl1.1:x86_64:1.1.1n-0+deb10u6\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.1.1n-0+deb10u6\",\n          \"packageName\": \"libssl1.1\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556190Z\"\n    },\n    \"installedPackage-python-apt-common:all:1.8.4.3\": {\n      \"id\": \"installedPackage-python-apt-common:all:1.8.4.3\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"1.8.4.3\",\n          \"packageName\": \"python-apt-common\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556214Z\"\n    },\n    \"installedPackage-libstdc++6:x86_64:8.3.0-6\": {\n      \"id\": \"installedPackage-libstdc++6:x86_64:8.3.0-6\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"8.3.0-6\",\n          \"packageName\": \"libstdc++6\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556191Z\"\n    },\n    \"installedPackage-traceroute:x86_64:1:2.1.0-2\": {\n      \"id\": \"installedPackage-traceroute:x86_64:1:2.1.0-2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1:2.1.0-2\",\n          \"packageName\": \"traceroute\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556234Z\"\n    },\n    \"installedPackage-openssh-client:x86_64:1:7.9p1-10+deb10u4\": {\n      \"id\": \"installedPackage-openssh-client:x86_64:1:7.9p1-10+deb10u4\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1:7.9p1-10+deb10u4\",\n          \"packageName\": \"openssh-client\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556208Z\"\n    },\n    \"installedPackage-cron:x86_64:3.0pl1-134+deb10u1\": {\n      \"id\": \"installedPackage-cron:x86_64:3.0pl1-134+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"3.0pl1-134+deb10u1\",\n          \"packageName\": \"cron\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556070Z\"\n    },\n    \"installedPackage-gce-disk-expand:all:1:20200716.00-g1\": {\n      \"id\": \"installedPackage-gce-disk-expand:all:1:20200716.00-g1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"1:20200716.00-g1\",\n          \"packageName\": \"gce-disk-expand\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556082Z\"\n    },\n    \"installedPackage-libffi6:x86_64:3.2.1-9\": {\n      \"id\": \"installedPackage-libffi6:x86_64:3.2.1-9\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"3.2.1-9\",\n          \"packageName\": \"libffi6\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556136Z\"\n    },\n    \"installedPackage-liblz4-1:x86_64:1.8.3-1+deb10u1\": {\n      \"id\": \"installedPackage-liblz4-1:x86_64:1.8.3-1+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.8.3-1+deb10u1\",\n          \"packageName\": \"liblz4-1\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556158Z\"\n    },\n    \"installedPackage-libgnutls30:x86_64:3.6.7-4+deb10u12\": {\n      \"id\": \"installedPackage-libgnutls30:x86_64:3.6.7-4+deb10u12\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"3.6.7-4+deb10u12\",\n          \"packageName\": \"libgnutls30\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556142Z\"\n    },\n    \"installedPackage-parted:x86_64:3.2-25\": {\n      \"id\": \"installedPackage-parted:x86_64:3.2-25\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"3.2-25\",\n          \"packageName\": \"parted\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556211Z\"\n    },\n    \"installedPackage-rsyslog:x86_64:8.1901.0-1+deb10u2\": {\n      \"id\": \"installedPackage-rsyslog:x86_64:8.1901.0-1+deb10u2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"8.1901.0-1+deb10u2\",\n          \"packageName\": \"rsyslog\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556227Z\"\n    },\n    \"installedPackage-libsystemd0:x86_64:241-7~deb10u10\": {\n      \"id\": \"installedPackage-libsystemd0:x86_64:241-7~deb10u10\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"241-7~deb10u10\",\n          \"packageName\": \"libsystemd0\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556191Z\"\n    },\n    \"installedPackage-python3-dbus:x86_64:1.2.8-3\": {\n      \"id\": \"installedPackage-python3-dbus:x86_64:1.2.8-3\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.2.8-3\",\n          \"packageName\": \"python3-dbus\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556217Z\"\n    },\n    \"installedPackage-python3-idna:all:2.6-1\": {\n      \"id\": \"installedPackage-python3-idna:all:2.6-1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"2.6-1\",\n          \"packageName\": \"python3-idna\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556220Z\"\n    },\n    \"installedPackage-libgnutls-dane0:x86_64:3.6.7-4+deb10u12\": {\n      \"id\": \"installedPackage-libgnutls-dane0:x86_64:3.6.7-4+deb10u12\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"3.6.7-4+deb10u12\",\n          \"packageName\": \"libgnutls-dane0\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556141Z\"\n    },\n    \"installedPackage-libsasl2-modules-db:x86_64:2.1.27+dfsg-1+deb10u2\": {\n      \"id\": \"installedPackage-libsasl2-modules-db:x86_64:2.1.27+dfsg-1+deb10u2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.1.27+dfsg-1+deb10u2\",\n          \"packageName\": \"libsasl2-modules-db\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556185Z\"\n    },\n    \"installedPackage-libisccfg163:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u10\": {\n      \"id\": \"installedPackage-libisccfg163:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u10\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1:9.11.5.P4+dfsg-5.1+deb10u10\",\n          \"packageName\": \"libisccfg163\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556150Z\"\n    },\n    \"installedPackage-adduser:all:3.118\": {\n      \"id\": \"installedPackage-adduser:all:3.118\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"3.118\",\n          \"packageName\": \"adduser\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556057Z\"\n    },\n    \"installedPackage-init-system-helpers:all:1.56+nmu1\": {\n      \"id\": \"installedPackage-init-system-helpers:all:1.56+nmu1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"1.56+nmu1\",\n          \"packageName\": \"init-system-helpers\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556101Z\"\n    },\n    \"installedPackage-gettext-base:x86_64:0.19.8.1-9\": {\n      \"id\": \"installedPackage-gettext-base:x86_64:0.19.8.1-9\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"0.19.8.1-9\",\n          \"packageName\": \"gettext-base\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556083Z\"\n    },\n    \"installedPackage-libefivar1:x86_64:37-2+deb10u1\": {\n      \"id\": \"installedPackage-libefivar1:x86_64:37-2+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"37-2+deb10u1\",\n          \"packageName\": \"libefivar1\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556131Z\"\n    },\n    \"installedPackage-libjson-c3:x86_64:0.12.1+ds-2+deb10u1\": {\n      \"id\": \"installedPackage-libjson-c3:x86_64:0.12.1+ds-2+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"0.12.1+ds-2+deb10u1\",\n          \"packageName\": \"libjson-c3\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556150Z\"\n    },\n    \"installedPackage-linux-image-4.19.0-26-cloud-amd64:x86_64:4.19.304-1\": {\n      \"id\": \"installedPackage-linux-image-4.19.0-26-cloud-amd64:x86_64:4.19.304-1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"4.19.304-1\",\n          \"packageName\": \"linux-image-4.19.0-26-cloud-amd64\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556198Z\"\n    },\n    \"installedPackage-debconf:all:1.5.71+deb10u1\": {\n      \"id\": \"installedPackage-debconf:all:1.5.71+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"1.5.71+deb10u1\",\n          \"packageName\": \"debconf\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556073Z\"\n    },\n    \"installedPackage-libk5crypto3:x86_64:1.17-3+deb10u6\": {\n      \"id\": \"installedPackage-libk5crypto3:x86_64:1.17-3+deb10u6\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.17-3+deb10u6\",\n          \"packageName\": \"libk5crypto3\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556151Z\"\n    },\n    \"installedPackage-libevent-2.1-6:x86_64:2.1.8-stable-4\": {\n      \"id\": \"installedPackage-libevent-2.1-6:x86_64:2.1.8-stable-4\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.1.8-stable-4\",\n          \"packageName\": \"libevent-2.1-6\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556133Z\"\n    },\n    \"installedPackage-apt:x86_64:1.8.2.3\": {\n      \"id\": \"installedPackage-apt:x86_64:1.8.2.3\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.8.2.3\",\n          \"packageName\": \"apt\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556059Z\"\n    },\n    \"installedPackage-dbus:x86_64:1.12.28-0+deb10u1\": {\n      \"id\": \"installedPackage-dbus:x86_64:1.12.28-0+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.12.28-0+deb10u1\",\n          \"packageName\": \"dbus\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556071Z\"\n    },\n    \"installedPackage-libgdbm6:x86_64:1.18.1-4\": {\n      \"id\": \"installedPackage-libgdbm6:x86_64:1.18.1-4\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.18.1-4\",\n          \"packageName\": \"libgdbm6\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556139Z\"\n    },\n    \"installedPackage-util-linux:x86_64:2.33.1-0.1+deb10u1\": {\n      \"id\": \"installedPackage-util-linux:x86_64:2.33.1-0.1+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.33.1-0.1+deb10u1\",\n          \"packageName\": \"util-linux\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556237Z\"\n    },\n    \"installedPackage-libgssapi-krb5-2:x86_64:1.17-3+deb10u6\": {\n      \"id\": \"installedPackage-libgssapi-krb5-2:x86_64:1.17-3+deb10u6\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.17-3+deb10u6\",\n          \"packageName\": \"libgssapi-krb5-2\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556144Z\"\n    },\n    \"installedPackage-libncursesw6:x86_64:6.1+20181013-2+deb10u5\": {\n      \"id\": \"installedPackage-libncursesw6:x86_64:6.1+20181013-2+deb10u5\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"6.1+20181013-2+deb10u5\",\n          \"packageName\": \"libncursesw6\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556163Z\"\n    },\n    \"installedPackage-os-prober:x86_64:1.77\": {\n      \"id\": \"installedPackage-os-prober:x86_64:1.77\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.77\",\n          \"packageName\": \"os-prober\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556210Z\"\n    },\n    \"installedPackage-libdns-export1104:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u10\": {\n      \"id\": \"installedPackage-libdns-export1104:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u10\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1:9.11.5.P4+dfsg-5.1+deb10u10\",\n          \"packageName\": \"libdns-export1104\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556129Z\"\n    },\n    \"installedPackage-sysvinit-utils:x86_64:2.93-8\": {\n      \"id\": \"installedPackage-sysvinit-utils:x86_64:2.93-8\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.93-8\",\n          \"packageName\": \"sysvinit-utils\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556233Z\"\n    },\n    \"installedPackage-libdb5.3:x86_64:5.3.28+dfsg1-0.5\": {\n      \"id\": \"installedPackage-libdb5.3:x86_64:5.3.28+dfsg1-0.5\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"5.3.28+dfsg1-0.5\",\n          \"packageName\": \"libdb5.3\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556127Z\"\n    },\n    \"installedPackage-libatm1:x86_64:1:2.5.1-2\": {\n      \"id\": \"installedPackage-libatm1:x86_64:1:2.5.1-2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1:2.5.1-2\",\n          \"packageName\": \"libatm1\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556112Z\"\n    },\n    \"installedPackage-linux-image-cloud-amd64:x86_64:4.19+105+deb10u21\": {\n      \"id\": \"installedPackage-linux-image-cloud-amd64:x86_64:4.19+105+deb10u21\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"4.19+105+deb10u21\",\n          \"packageName\": \"linux-image-cloud-amd64\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556199Z\"\n    },\n    \"installedPackage-logrotate:x86_64:3.14.0-4\": {\n      \"id\": \"installedPackage-logrotate:x86_64:3.14.0-4\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"3.14.0-4\",\n          \"packageName\": \"logrotate\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556199Z\"\n    },\n    \"installedPackage-udev:x86_64:241-7~deb10u10\": {\n      \"id\": \"installedPackage-udev:x86_64:241-7~deb10u10\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"241-7~deb10u10\",\n          \"packageName\": \"udev\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556236Z\"\n    },\n    \"installedPackage-libcryptsetup12:x86_64:2:2.1.0-5+deb10u2\": {\n      \"id\": \"installedPackage-libcryptsetup12:x86_64:2:2.1.0-5+deb10u2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2:2.1.0-5+deb10u2\",\n          \"packageName\": \"libcryptsetup12\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556126Z\"\n    },\n    \"installedPackage-initramfs-tools-core:all:0.133+deb10u1\": {\n      \"id\": \"installedPackage-initramfs-tools-core:all:0.133+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"0.133+deb10u1\",\n          \"packageName\": \"initramfs-tools-core\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556102Z\"\n    },\n    \"installedPackage-vim-tiny:x86_64:2:8.1.0875-5+deb10u6\": {\n      \"id\": \"installedPackage-vim-tiny:x86_64:2:8.1.0875-5+deb10u6\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2:8.1.0875-5+deb10u6\",\n          \"packageName\": \"vim-tiny\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556239Z\"\n    },\n    \"installedPackage-libslang2:x86_64:2.3.2-2\": {\n      \"id\": \"installedPackage-libslang2:x86_64:2.3.2-2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.3.2-2\",\n          \"packageName\": \"libslang2\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556188Z\"\n    },\n    \"installedPackage-socat:x86_64:1.7.3.2-2\": {\n      \"id\": \"installedPackage-socat:x86_64:1.7.3.2-2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.7.3.2-2\",\n          \"packageName\": \"socat\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556230Z\"\n    },\n    \"installedPackage-debianutils:x86_64:4.8.6.1\": {\n      \"id\": \"installedPackage-debianutils:x86_64:4.8.6.1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"4.8.6.1\",\n          \"packageName\": \"debianutils\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556074Z\"\n    },\n    \"installedPackage-libxtables12:x86_64:1.8.2-4\": {\n      \"id\": \"installedPackage-libxtables12:x86_64:1.8.2-4\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.8.2-4\",\n          \"packageName\": \"libxtables12\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556196Z\"\n    },\n    \"installedPackage-libpci3:x86_64:1:3.5.2-1\": {\n      \"id\": \"installedPackage-libpci3:x86_64:1:3.5.2-1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1:3.5.2-1\",\n          \"packageName\": \"libpci3\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556176Z\"\n    },\n    \"installedPackage-python3-requests:all:2.21.0-1+deb10u1\": {\n      \"id\": \"installedPackage-python3-requests:all:2.21.0-1+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"2.21.0-1+deb10u1\",\n          \"packageName\": \"python3-requests\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556223Z\"\n    },\n    \"installedPackage-libdns1104:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u10\": {\n      \"id\": \"installedPackage-libdns1104:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u10\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1:9.11.5.P4+dfsg-5.1+deb10u10\",\n          \"packageName\": \"libdns1104\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556130Z\"\n    },\n    \"installedPackage-shim-helpers-amd64-signed:x86_64:1+15.7+1~deb10u1\": {\n      \"id\": \"installedPackage-shim-helpers-amd64-signed:x86_64:1+15.7+1~deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1+15.7+1~deb10u1\",\n          \"packageName\": \"shim-helpers-amd64-signed\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556228Z\"\n    },\n    \"installedPackage-wget:x86_64:1.20.1-1.1\": {\n      \"id\": \"installedPackage-wget:x86_64:1.20.1-1.1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.20.1-1.1\",\n          \"packageName\": \"wget\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556240Z\"\n    },\n    \"installedPackage-gpg-wks-client:x86_64:2.2.12-1+deb10u2\": {\n      \"id\": \"installedPackage-gpg-wks-client:x86_64:2.2.12-1+deb10u2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.2.12-1+deb10u2\",\n          \"packageName\": \"gpg-wks-client\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556092Z\"\n    },\n    \"installedPackage-apparmor:x86_64:2.13.2-10\": {\n      \"id\": \"installedPackage-apparmor:x86_64:2.13.2-10\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.13.2-10\",\n          \"packageName\": \"apparmor\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556058Z\"\n    },\n    \"installedPackage-libip6tc0:x86_64:1.8.2-4\": {\n      \"id\": \"installedPackage-libip6tc0:x86_64:1.8.2-4\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.8.2-4\",\n          \"packageName\": \"libip6tc0\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556147Z\"\n    },\n    \"installedPackage-libkrb5support0:x86_64:1.17-3+deb10u6\": {\n      \"id\": \"installedPackage-libkrb5support0:x86_64:1.17-3+deb10u6\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.17-3+deb10u6\",\n          \"packageName\": \"libkrb5support0\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556154Z\"\n    },\n    \"installedPackage-libnetfilter-conntrack3:x86_64:1.0.7-1\": {\n      \"id\": \"installedPackage-libnetfilter-conntrack3:x86_64:1.0.7-1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.0.7-1\",\n          \"packageName\": \"libnetfilter-conntrack3\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556164Z\"\n    },\n    \"installedPackage-ethtool:x86_64:1:4.19-1\": {\n      \"id\": \"installedPackage-ethtool:x86_64:1:4.19-1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1:4.19-1\",\n          \"packageName\": \"ethtool\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556079Z\"\n    },\n    \"installedPackage-libacl1:x86_64:2.2.53-4\": {\n      \"id\": \"installedPackage-libacl1:x86_64:2.2.53-4\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.2.53-4\",\n          \"packageName\": \"libacl1\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556107Z\"\n    },\n    \"installedPackage-libpng16-16:x86_64:1.6.36-6\": {\n      \"id\": \"installedPackage-libpng16-16:x86_64:1.6.36-6\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.6.36-6\",\n          \"packageName\": \"libpng16-16\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556178Z\"\n    },\n    \"installedPackage-libpam0g:x86_64:1.3.1-5\": {\n      \"id\": \"installedPackage-libpam0g:x86_64:1.3.1-5\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.3.1-5\",\n          \"packageName\": \"libpam0g\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556174Z\"\n    },\n    \"installedPackage-mailutils-common:all:1:3.5-4\": {\n      \"id\": \"installedPackage-mailutils-common:all:1:3.5-4\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"1:3.5-4\",\n          \"packageName\": \"mailutils-common\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556201Z\"\n    },\n    \"installedPackage-bind9-host:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u10\": {\n      \"id\": \"installedPackage-bind9-host:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u10\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1:9.11.5.P4+dfsg-5.1+deb10u10\",\n          \"packageName\": \"bind9-host\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556065Z\"\n    },\n    \"installedPackage-libefiboot1:x86_64:37-2+deb10u1\": {\n      \"id\": \"installedPackage-libefiboot1:x86_64:37-2+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"37-2+deb10u1\",\n          \"packageName\": \"libefiboot1\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556131Z\"\n    },\n    \"installedPackage-apt-transport-https:all:1.8.2.3\": {\n      \"id\": \"installedPackage-apt-transport-https:all:1.8.2.3\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"1.8.2.3\",\n          \"packageName\": \"apt-transport-https\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556061Z\"\n    },\n    \"installedPackage-guile-2.2-libs:x86_64:2.2.4+1-2+deb10u1\": {\n      \"id\": \"installedPackage-guile-2.2-libs:x86_64:2.2.4+1-2+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.2.4+1-2+deb10u1\",\n          \"packageName\": \"guile-2.2-libs\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556098Z\"\n    },\n    \"installedPackage-libdevmapper1.02.1:x86_64:2:1.02.155-3\": {\n      \"id\": \"installedPackage-libdevmapper1.02.1:x86_64:2:1.02.155-3\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2:1.02.155-3\",\n          \"packageName\": \"libdevmapper1.02.1\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556129Z\"\n    },\n    \"installedPackage-python3-six:all:1.12.0-1\": {\n      \"id\": \"installedPackage-python3-six:all:1.12.0-1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"1.12.0-1\",\n          \"packageName\": \"python3-six\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556224Z\"\n    },\n    \"installedPackage-pciutils:x86_64:1:3.5.2-1\": {\n      \"id\": \"installedPackage-pciutils:x86_64:1:3.5.2-1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1:3.5.2-1\",\n          \"packageName\": \"pciutils\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556212Z\"\n    },\n    \"installedPackage-libpython3.7-stdlib:x86_64:3.7.3-2+deb10u7\": {\n      \"id\": \"installedPackage-libpython3.7-stdlib:x86_64:3.7.3-2+deb10u7\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"3.7.3-2+deb10u7\",\n          \"packageName\": \"libpython3.7-stdlib\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556182Z\"\n    },\n    \"installedPackage-zlib1g:x86_64:1:1.2.11.dfsg-1+deb10u2\": {\n      \"id\": \"installedPackage-zlib1g:x86_64:1:1.2.11.dfsg-1+deb10u2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1:1.2.11.dfsg-1+deb10u2\",\n          \"packageName\": \"zlib1g\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556242Z\"\n    },\n    \"installedPackage-grub-efi-amd64-bin:x86_64:2.06-3~deb10u4\": {\n      \"id\": \"installedPackage-grub-efi-amd64-bin:x86_64:2.06-3~deb10u4\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.06-3~deb10u4\",\n          \"packageName\": \"grub-efi-amd64-bin\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556096Z\"\n    },\n    \"installedPackage-gnupg:all:2.2.12-1+deb10u2\": {\n      \"id\": \"installedPackage-gnupg:all:2.2.12-1+deb10u2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"2.2.12-1+deb10u2\",\n          \"packageName\": \"gnupg\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556084Z\"\n    },\n    \"installedPackage-libmpdec2:x86_64:2.4.2-2\": {\n      \"id\": \"installedPackage-libmpdec2:x86_64:2.4.2-2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.4.2-2\",\n          \"packageName\": \"libmpdec2\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556162Z\"\n    },\n    \"installedPackage-libutempter0:x86_64:1.1.6-3\": {\n      \"id\": \"installedPackage-libutempter0:x86_64:1.1.6-3\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.1.6-3\",\n          \"packageName\": \"libutempter0\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556195Z\"\n    },\n    \"installedPackage-diffutils:x86_64:1:3.7-3\": {\n      \"id\": \"installedPackage-diffutils:x86_64:1:3.7-3\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1:3.7-3\",\n          \"packageName\": \"diffutils\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556074Z\"\n    },\n    \"installedPackage-manpages:all:4.16-2\": {\n      \"id\": \"installedPackage-manpages:all:4.16-2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"4.16-2\",\n          \"packageName\": \"manpages\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556202Z\"\n    },\n    \"installedPackage-libip4tc0:x86_64:1.8.2-4\": {\n      \"id\": \"installedPackage-libip4tc0:x86_64:1.8.2-4\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.8.2-4\",\n          \"packageName\": \"libip4tc0\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556147Z\"\n    },\n    \"installedPackage-libcom-err2:x86_64:1.44.5-1+deb10u3\": {\n      \"id\": \"installedPackage-libcom-err2:x86_64:1.44.5-1+deb10u3\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.44.5-1+deb10u3\",\n          \"packageName\": \"libcom-err2\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556125Z\"\n    },\n    \"installedPackage-google-cloud-cli:x86_64:468.0.0-0\": {\n      \"id\": \"installedPackage-google-cloud-cli:x86_64:468.0.0-0\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"468.0.0-0\",\n          \"packageName\": \"google-cloud-cli\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556087Z\"\n    },\n    \"installedPackage-grub2-common:x86_64:2.06-3~deb10u4\": {\n      \"id\": \"installedPackage-grub2-common:x86_64:2.06-3~deb10u4\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.06-3~deb10u4\",\n          \"packageName\": \"grub2-common\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556098Z\"\n    },\n    \"installedPackage-ca-certificates:all:20200601~deb10u2\": {\n      \"id\": \"installedPackage-ca-certificates:all:20200601~deb10u2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"20200601~deb10u2\",\n          \"packageName\": \"ca-certificates\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556068Z\"\n    },\n    \"installedPackage-google-fluentd:x86_64:1.10.1-1\": {\n      \"id\": \"installedPackage-google-fluentd:x86_64:1.10.1-1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.10.1-1\",\n          \"packageName\": \"google-fluentd\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556089Z\"\n    },\n    \"installedPackage-libnpth0:x86_64:1.6-1\": {\n      \"id\": \"installedPackage-libnpth0:x86_64:1.6-1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.6-1\",\n          \"packageName\": \"libnpth0\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556171Z\"\n    },\n    \"installedPackage-mariadb-common:all:1:10.3.39-0+deb10u2\": {\n      \"id\": \"installedPackage-mariadb-common:all:1:10.3.39-0+deb10u2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"1:10.3.39-0+deb10u2\",\n          \"packageName\": \"mariadb-common\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556203Z\"\n    },\n    \"installedPackage-liblzma5:x86_64:5.2.4-1+deb10u1\": {\n      \"id\": \"installedPackage-liblzma5:x86_64:5.2.4-1+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"5.2.4-1+deb10u1\",\n          \"packageName\": \"liblzma5\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556158Z\"\n    },\n    \"installedPackage-libnftnl11:x86_64:1.1.2-2\": {\n      \"id\": \"installedPackage-libnftnl11:x86_64:1.1.2-2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.1.2-2\",\n          \"packageName\": \"libnftnl11\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556166Z\"\n    },\n    \"installedPackage-apt-utils:x86_64:1.8.2.3\": {\n      \"id\": \"installedPackage-apt-utils:x86_64:1.8.2.3\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.8.2.3\",\n          \"packageName\": \"apt-utils\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556061Z\"\n    },\n    \"installedPackage-libmailutils5:x86_64:1:3.5-4\": {\n      \"id\": \"installedPackage-libmailutils5:x86_64:1:3.5-4\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1:3.5-4\",\n          \"packageName\": \"libmailutils5\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556160Z\"\n    },\n    \"installedPackage-libprocps7:x86_64:2:3.3.15-2\": {\n      \"id\": \"installedPackage-libprocps7:x86_64:2:3.3.15-2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2:3.3.15-2\",\n          \"packageName\": \"libprocps7\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556178Z\"\n    },\n    \"installedPackage-openssh-server:x86_64:1:7.9p1-10+deb10u4\": {\n      \"id\": \"installedPackage-openssh-server:x86_64:1:7.9p1-10+deb10u4\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1:7.9p1-10+deb10u4\",\n          \"packageName\": \"openssh-server\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556209Z\"\n    },\n    \"installedPackage-libsasl2-modules:x86_64:2.1.27+dfsg-1+deb10u2\": {\n      \"id\": \"installedPackage-libsasl2-modules:x86_64:2.1.27+dfsg-1+deb10u2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.1.27+dfsg-1+deb10u2\",\n          \"packageName\": \"libsasl2-modules\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556185Z\"\n    },\n    \"installedPackage-tcpdump:x86_64:4.9.3-1~deb10u2\": {\n      \"id\": \"installedPackage-tcpdump:x86_64:4.9.3-1~deb10u2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"4.9.3-1~deb10u2\",\n          \"packageName\": \"tcpdump\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556234Z\"\n    },\n    \"installedPackage-libparted2:x86_64:3.2-25\": {\n      \"id\": \"installedPackage-libparted2:x86_64:3.2-25\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"3.2-25\",\n          \"packageName\": \"libparted2\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556175Z\"\n    },\n    \"installedPackage-mysql-common:all:5.8+1.0.5\": {\n      \"id\": \"installedPackage-mysql-common:all:5.8+1.0.5\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"5.8+1.0.5\",\n          \"packageName\": \"mysql-common\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556205Z\"\n    },\n    \"installedPackage-libfstrm0:x86_64:0.4.0-1\": {\n      \"id\": \"installedPackage-libfstrm0:x86_64:0.4.0-1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"0.4.0-1\",\n          \"packageName\": \"libfstrm0\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556137Z\"\n    },\n    \"installedPackage-libzstd1:x86_64:1.3.8+dfsg-3+deb10u2\": {\n      \"id\": \"installedPackage-libzstd1:x86_64:1.3.8+dfsg-3+deb10u2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.3.8+dfsg-3+deb10u2\",\n          \"packageName\": \"libzstd1\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556197Z\"\n    },\n    \"installedPackage-python3-chardet:all:3.0.4-3\": {\n      \"id\": \"installedPackage-python3-chardet:all:3.0.4-3\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"3.0.4-3\",\n          \"packageName\": \"python3-chardet\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556216Z\"\n    },\n    \"installedPackage-libedit2:x86_64:3.1-20181209-1\": {\n      \"id\": \"installedPackage-libedit2:x86_64:3.1-20181209-1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"3.1-20181209-1\",\n          \"packageName\": \"libedit2\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556130Z\"\n    },\n    \"installedPackage-fdisk:x86_64:2.33.1-0.1+deb10u1\": {\n      \"id\": \"installedPackage-fdisk:x86_64:2.33.1-0.1+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.33.1-0.1+deb10u1\",\n          \"packageName\": \"fdisk\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556080Z\"\n    },\n    \"installedPackage-libisc-export1100:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u10\": {\n      \"id\": \"installedPackage-libisc-export1100:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u10\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1:9.11.5.P4+dfsg-5.1+deb10u10\",\n          \"packageName\": \"libisc-export1100\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556148Z\"\n    },\n    \"installedPackage-bzip2:x86_64:1.0.6-9.2~deb10u2\": {\n      \"id\": \"installedPackage-bzip2:x86_64:1.0.6-9.2~deb10u2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.0.6-9.2~deb10u2\",\n          \"packageName\": \"bzip2\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556067Z\"\n    },\n    \"installedPackage-libgsasl7:x86_64:1.8.0-8+deb10u1\": {\n      \"id\": \"installedPackage-libgsasl7:x86_64:1.8.0-8+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.8.0-8+deb10u1\",\n          \"packageName\": \"libgsasl7\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556143Z\"\n    },\n    \"installedPackage-init:x86_64:1.56+nmu1\": {\n      \"id\": \"installedPackage-init:x86_64:1.56+nmu1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.56+nmu1\",\n          \"packageName\": \"init\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556101Z\"\n    },\n    \"installedPackage-libhavege1:x86_64:1.9.1-7\": {\n      \"id\": \"installedPackage-libhavege1:x86_64:1.9.1-7\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.9.1-7\",\n          \"packageName\": \"libhavege1\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556144Z\"\n    },\n    \"installedPackage-net-tools:x86_64:1.60+git20180626.aebd88e-1\": {\n      \"id\": \"installedPackage-net-tools:x86_64:1.60+git20180626.aebd88e-1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.60+git20180626.aebd88e-1\",\n          \"packageName\": \"net-tools\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556207Z\"\n    },\n    \"installedPackage-libpcre3:x86_64:2:8.39-12\": {\n      \"id\": \"installedPackage-libpcre3:x86_64:2:8.39-12\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2:8.39-12\",\n          \"packageName\": \"libpcre3\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556177Z\"\n    },\n    \"installedPackage-libntlm0:x86_64:1.5-1+deb10u1\": {\n      \"id\": \"installedPackage-libntlm0:x86_64:1.5-1+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.5-1+deb10u1\",\n          \"packageName\": \"libntlm0\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556171Z\"\n    },\n    \"installedPackage-lsb-base:all:10.2019051400\": {\n      \"id\": \"installedPackage-lsb-base:all:10.2019051400\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"10.2019051400\",\n          \"packageName\": \"lsb-base\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556200Z\"\n    },\n    \"installedPackage-libcurl3-gnutls:x86_64:7.64.0-4+deb10u9\": {\n      \"id\": \"installedPackage-libcurl3-gnutls:x86_64:7.64.0-4+deb10u9\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"7.64.0-4+deb10u9\",\n          \"packageName\": \"libcurl3-gnutls\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556126Z\"\n    },\n    \"installedPackage-liblognorm5:x86_64:2.0.5-1\": {\n      \"id\": \"installedPackage-liblognorm5:x86_64:2.0.5-1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.0.5-1\",\n          \"packageName\": \"liblognorm5\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556157Z\"\n    },\n    \"installedPackage-haveged:x86_64:1.9.1-7\": {\n      \"id\": \"installedPackage-haveged:x86_64:1.9.1-7\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.9.1-7\",\n          \"packageName\": \"haveged\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556099Z\"\n    },\n    \"installedPackage-libaudit1:x86_64:1:2.8.4-3\": {\n      \"id\": \"installedPackage-libaudit1:x86_64:1:2.8.4-3\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1:2.8.4-3\",\n          \"packageName\": \"libaudit1\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556121Z\"\n    },\n    \"installedPackage-python3.7:x86_64:3.7.3-2+deb10u7\": {\n      \"id\": \"installedPackage-python3.7:x86_64:3.7.3-2+deb10u7\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"3.7.3-2+deb10u7\",\n          \"packageName\": \"python3.7\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556225Z\"\n    },\n    \"installedPackage-libcurl4:x86_64:7.64.0-4+deb10u9\": {\n      \"id\": \"installedPackage-libcurl4:x86_64:7.64.0-4+deb10u9\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"7.64.0-4+deb10u9\",\n          \"packageName\": \"libcurl4\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556127Z\"\n    },\n    \"installedPackage-libselinux1:x86_64:2.8-1+b1\": {\n      \"id\": \"installedPackage-libselinux1:x86_64:2.8-1+b1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.8-1+b1\",\n          \"packageName\": \"libselinux1\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556186Z\"\n    },\n    \"installedPackage-readline-common:all:7.0-5\": {\n      \"id\": \"installedPackage-readline-common:all:7.0-5\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"7.0-5\",\n          \"packageName\": \"readline-common\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556226Z\"\n    },\n    \"installedPackage-sensible-utils:all:0.0.12\": {\n      \"id\": \"installedPackage-sensible-utils:all:0.0.12\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"0.0.12\",\n          \"packageName\": \"sensible-utils\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556228Z\"\n    },\n    \"installedPackage-isc-dhcp-client:x86_64:4.4.1-2+deb10u3\": {\n      \"id\": \"installedPackage-isc-dhcp-client:x86_64:4.4.1-2+deb10u3\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"4.4.1-2+deb10u3\",\n          \"packageName\": \"isc-dhcp-client\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556105Z\"\n    },\n    \"installedPackage-xxd:x86_64:2:8.1.0875-5+deb10u6\": {\n      \"id\": \"installedPackage-xxd:x86_64:2:8.1.0875-5+deb10u6\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2:8.1.0875-5+deb10u6\",\n          \"packageName\": \"xxd\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556241Z\"\n    },\n    \"installedPackage-libpython3.7-minimal:x86_64:3.7.3-2+deb10u7\": {\n      \"id\": \"installedPackage-libpython3.7-minimal:x86_64:3.7.3-2+deb10u7\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"3.7.3-2+deb10u7\",\n          \"packageName\": \"libpython3.7-minimal\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556182Z\"\n    },\n    \"availablePackage-google-cloud-packages-archive-keyring:all:1.2-622881512\": {\n      \"id\": \"availablePackage-google-cloud-packages-archive-keyring:all:1.2-622881512\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"AVAILABLE_PACKAGE\",\n      \"availablePackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"1.2-622881512\",\n          \"packageName\": \"google-cloud-packages-archive-keyring\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556051Z\"\n    },\n    \"installedPackage-file:x86_64:1:5.35-4+deb10u2\": {\n      \"id\": \"installedPackage-file:x86_64:1:5.35-4+deb10u2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1:5.35-4+deb10u2\",\n          \"packageName\": \"file\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556081Z\"\n    },\n    \"installedPackage-libcap2-bin:x86_64:1:2.25-2\": {\n      \"id\": \"installedPackage-libcap2-bin:x86_64:1:2.25-2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1:2.25-2\",\n          \"packageName\": \"libcap2-bin\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556125Z\"\n    },\n    \"installedPackage-libsemanage1:x86_64:2.8-2\": {\n      \"id\": \"installedPackage-libsemanage1:x86_64:2.8-2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.8-2\",\n          \"packageName\": \"libsemanage1\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556187Z\"\n    },\n    \"installedPackage-efibootmgr:x86_64:15-1\": {\n      \"id\": \"installedPackage-efibootmgr:x86_64:15-1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"15-1\",\n          \"packageName\": \"efibootmgr\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556078Z\"\n    },\n    \"installedPackage-google-compute-engine:all:1:20240307.00-g1\": {\n      \"id\": \"installedPackage-google-compute-engine:all:1:20240307.00-g1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"1:20240307.00-g1\",\n          \"packageName\": \"google-compute-engine\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556088Z\"\n    },\n    \"installedPackage-grub-efi-amd64-signed:x86_64:1+2.06+3~deb10u4\": {\n      \"id\": \"installedPackage-grub-efi-amd64-signed:x86_64:1+2.06+3~deb10u4\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1+2.06+3~deb10u4\",\n          \"packageName\": \"grub-efi-amd64-signed\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556097Z\"\n    },\n    \"installedPackage-libfastjson4:x86_64:0.99.8-2+deb10u1\": {\n      \"id\": \"installedPackage-libfastjson4:x86_64:0.99.8-2+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"0.99.8-2+deb10u1\",\n          \"packageName\": \"libfastjson4\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556135Z\"\n    },\n    \"installedPackage-libelf1:x86_64:0.176-1.1+deb10u1\": {\n      \"id\": \"installedPackage-libelf1:x86_64:0.176-1.1+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"0.176-1.1+deb10u1\",\n          \"packageName\": \"libelf1\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556132Z\"\n    },\n    \"installedPackage-klibc-utils:x86_64:2.0.6-1+deb10u1\": {\n      \"id\": \"installedPackage-klibc-utils:x86_64:2.0.6-1+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.0.6-1+deb10u1\",\n          \"packageName\": \"klibc-utils\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556106Z\"\n    },\n    \"installedPackage-passwd:x86_64:1:4.5-1.1\": {\n      \"id\": \"installedPackage-passwd:x86_64:1:4.5-1.1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1:4.5-1.1\",\n          \"packageName\": \"passwd\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556211Z\"\n    },\n    \"installedPackage-google-guest-agent:x86_64:1:20240109.00-g1\": {\n      \"id\": \"installedPackage-google-guest-agent:x86_64:1:20240109.00-g1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1:20240109.00-g1\",\n          \"packageName\": \"google-guest-agent\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556090Z\"\n    },\n    \"installedPackage-isc-dhcp-common:x86_64:4.4.1-2+deb10u3\": {\n      \"id\": \"installedPackage-isc-dhcp-common:x86_64:4.4.1-2+deb10u3\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"4.4.1-2+deb10u3\",\n          \"packageName\": \"isc-dhcp-common\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556105Z\"\n    },\n    \"installedPackage-gpg:x86_64:2.2.12-1+deb10u2\": {\n      \"id\": \"installedPackage-gpg:x86_64:2.2.12-1+deb10u2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.2.12-1+deb10u2\",\n          \"packageName\": \"gpg\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556091Z\"\n    },\n    \"installedPackage-iptables:x86_64:1.8.2-4\": {\n      \"id\": \"installedPackage-iptables:x86_64:1.8.2-4\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.8.2-4\",\n          \"packageName\": \"iptables\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556104Z\"\n    },\n    \"installedPackage-krb5-locales:all:1.17-3+deb10u6\": {\n      \"id\": \"installedPackage-krb5-locales:all:1.17-3+deb10u6\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"1.17-3+deb10u6\",\n          \"packageName\": \"krb5-locales\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556107Z\"\n    },\n    \"installedPackage-xz-utils:x86_64:5.2.4-1+deb10u1\": {\n      \"id\": \"installedPackage-xz-utils:x86_64:5.2.4-1+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"5.2.4-1+deb10u1\",\n          \"packageName\": \"xz-utils\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556241Z\"\n    },\n    \"installedPackage-ifupdown:x86_64:0.8.35\": {\n      \"id\": \"installedPackage-ifupdown:x86_64:0.8.35\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"0.8.35\",\n          \"packageName\": \"ifupdown\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556100Z\"\n    },\n    \"installedPackage-openssl:x86_64:1.1.1n-0+deb10u6\": {\n      \"id\": \"installedPackage-openssl:x86_64:1.1.1n-0+deb10u6\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.1.1n-0+deb10u6\",\n          \"packageName\": \"openssl\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556210Z\"\n    },\n    \"installedPackage-vim:x86_64:2:8.1.0875-5+deb10u6\": {\n      \"id\": \"installedPackage-vim:x86_64:2:8.1.0875-5+deb10u6\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2:8.1.0875-5+deb10u6\",\n          \"packageName\": \"vim\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556238Z\"\n    },\n    \"installedPackage-libglib2.0-0:x86_64:2.58.3-2+deb10u5\": {\n      \"id\": \"installedPackage-libglib2.0-0:x86_64:2.58.3-2+deb10u5\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.58.3-2+deb10u5\",\n          \"packageName\": \"libglib2.0-0\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556140Z\"\n    },\n    \"installedPackage-libklibc:x86_64:2.0.6-1+deb10u1\": {\n      \"id\": \"installedPackage-libklibc:x86_64:2.0.6-1+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.0.6-1+deb10u1\",\n          \"packageName\": \"libklibc\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556152Z\"\n    },\n    \"installedPackage-distro-info-data:all:0.41+deb10u8\": {\n      \"id\": \"installedPackage-distro-info-data:all:0.41+deb10u8\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"0.41+deb10u8\",\n          \"packageName\": \"distro-info-data\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556075Z\"\n    },\n    \"installedPackage-libdebconfclient0:x86_64:0.249\": {\n      \"id\": \"installedPackage-libdebconfclient0:x86_64:0.249\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"0.249\",\n          \"packageName\": \"libdebconfclient0\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556128Z\"\n    },\n    \"installedPackage-libapparmor1:x86_64:2.13.2-10\": {\n      \"id\": \"installedPackage-libapparmor1:x86_64:2.13.2-10\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.13.2-10\",\n          \"packageName\": \"libapparmor1\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556108Z\"\n    },\n    \"installedPackage-libpython3-stdlib:x86_64:3.7.3-1\": {\n      \"id\": \"installedPackage-libpython3-stdlib:x86_64:3.7.3-1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"3.7.3-1\",\n          \"packageName\": \"libpython3-stdlib\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556181Z\"\n    },\n    \"installedPackage-nvme-cli:x86_64:1.7-1\": {\n      \"id\": \"installedPackage-nvme-cli:x86_64:1.7-1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.7-1\",\n          \"packageName\": \"nvme-cli\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556208Z\"\n    },\n    \"installedPackage-bsdmainutils:x86_64:11.1.2+b1\": {\n      \"id\": \"installedPackage-bsdmainutils:x86_64:11.1.2+b1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"11.1.2+b1\",\n          \"packageName\": \"bsdmainutils\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556066Z\"\n    },\n    \"installedPackage-libuuid1:x86_64:2.33.1-0.1+deb10u1\": {\n      \"id\": \"installedPackage-libuuid1:x86_64:2.33.1-0.1+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.33.1-0.1+deb10u1\",\n          \"packageName\": \"libuuid1\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556195Z\"\n    },\n    \"installedPackage-curl:x86_64:7.64.0-4+deb10u9\": {\n      \"id\": \"installedPackage-curl:x86_64:7.64.0-4+deb10u9\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"7.64.0-4+deb10u9\",\n          \"packageName\": \"curl\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556070Z\"\n    },\n    \"installedPackage-base-files:x86_64:10.3+deb10u13\": {\n      \"id\": \"installedPackage-base-files:x86_64:10.3+deb10u13\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"10.3+deb10u13\",\n          \"packageName\": \"base-files\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556062Z\"\n    },\n    \"installedPackage-libss2:x86_64:1.44.5-1+deb10u3\": {\n      \"id\": \"installedPackage-libss2:x86_64:1.44.5-1+deb10u3\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.44.5-1+deb10u3\",\n          \"packageName\": \"libss2\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556190Z\"\n    },\n    \"installedPackage-libtinfo6:x86_64:6.1+20181013-2+deb10u5\": {\n      \"id\": \"installedPackage-libtinfo6:x86_64:6.1+20181013-2+deb10u5\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"6.1+20181013-2+deb10u5\",\n          \"packageName\": \"libtinfo6\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556192Z\"\n    },\n    \"installedPackage-libreadline7:x86_64:7.0-5\": {\n      \"id\": \"installedPackage-libreadline7:x86_64:7.0-5\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"7.0-5\",\n          \"packageName\": \"libreadline7\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556183Z\"\n    },\n    \"installedPackage-google-osconfig-agent:x86_64:1:20231207.01-g1\": {\n      \"id\": \"installedPackage-google-osconfig-agent:x86_64:1:20231207.01-g1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1:20231207.01-g1\",\n          \"packageName\": \"google-osconfig-agent\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556091Z\"\n    },\n    \"installedPackage-mokutil:x86_64:0.6.0-2~deb10u1\": {\n      \"id\": \"installedPackage-mokutil:x86_64:0.6.0-2~deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"0.6.0-2~deb10u1\",\n          \"packageName\": \"mokutil\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556204Z\"\n    },\n    \"installedPackage-libiptc0:x86_64:1.8.2-4\": {\n      \"id\": \"installedPackage-libiptc0:x86_64:1.8.2-4\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.8.2-4\",\n          \"packageName\": \"libiptc0\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556148Z\"\n    },\n    \"installedPackage-less:x86_64:487-0.1+b1\": {\n      \"id\": \"installedPackage-less:x86_64:487-0.1+b1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"487-0.1+b1\",\n          \"packageName\": \"less\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556107Z\"\n    },\n    \"installedPackage-libmount1:x86_64:2.33.1-0.1+deb10u1\": {\n      \"id\": \"installedPackage-libmount1:x86_64:2.33.1-0.1+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.33.1-0.1+deb10u1\",\n          \"packageName\": \"libmount1\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556162Z\"\n    },\n    \"installedPackage-coreutils:x86_64:8.30-3\": {\n      \"id\": \"installedPackage-coreutils:x86_64:8.30-3\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"8.30-3\",\n          \"packageName\": \"coreutils\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556069Z\"\n    },\n    \"installedPackage-libsqlite3-0:x86_64:3.27.2-3+deb10u2\": {\n      \"id\": \"installedPackage-libsqlite3-0:x86_64:3.27.2-3+deb10u2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"3.27.2-3+deb10u2\",\n          \"packageName\": \"libsqlite3-0\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556189Z\"\n    },\n    \"installedPackage-mawk:x86_64:1.3.3-17+b3\": {\n      \"id\": \"installedPackage-mawk:x86_64:1.3.3-17+b3\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.3.3-17+b3\",\n          \"packageName\": \"mawk\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556203Z\"\n    },\n    \"installedPackage-base-passwd:x86_64:3.5.46\": {\n      \"id\": \"installedPackage-base-passwd:x86_64:3.5.46\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"3.5.46\",\n          \"packageName\": \"base-passwd\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556062Z\"\n    },\n    \"installedPackage-libisc1100:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u10\": {\n      \"id\": \"installedPackage-libisc1100:x86_64:1:9.11.5.P4+dfsg-5.1+deb10u10\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1:9.11.5.P4+dfsg-5.1+deb10u10\",\n          \"packageName\": \"libisc1100\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556149Z\"\n    },\n    \"installedPackage-libkmod2:x86_64:26-1\": {\n      \"id\": \"installedPackage-libkmod2:x86_64:26-1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"26-1\",\n          \"packageName\": \"libkmod2\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556153Z\"\n    },\n    \"installedPackage-libfuse2:x86_64:2.9.9-1+deb10u1\": {\n      \"id\": \"installedPackage-libfuse2:x86_64:2.9.9-1+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.9.9-1+deb10u1\",\n          \"packageName\": \"libfuse2\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556137Z\"\n    },\n    \"installedPackage-libpcap0.8:x86_64:1.8.1-6+deb10u1\": {\n      \"id\": \"installedPackage-libpcap0.8:x86_64:1.8.1-6+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.8.1-6+deb10u1\",\n          \"packageName\": \"libpcap0.8\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556175Z\"\n    },\n    \"installedPackage-libssh2-1:x86_64:1.8.0-2.1+deb10u1\": {\n      \"id\": \"installedPackage-libssh2-1:x86_64:1.8.0-2.1+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"1.8.0-2.1+deb10u1\",\n          \"packageName\": \"libssh2-1\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556190Z\"\n    },\n    \"installedPackage-python3-pkg-resources:all:40.8.0-1\": {\n      \"id\": \"installedPackage-python3-pkg-resources:all:40.8.0-1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"all\",\n          \"version\": \"40.8.0-1\",\n          \"packageName\": \"python3-pkg-resources\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556221Z\"\n    },\n    \"installedPackage-sed:x86_64:4.7-1\": {\n      \"id\": \"installedPackage-sed:x86_64:4.7-1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"4.7-1\",\n          \"packageName\": \"sed\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556228Z\"\n    },\n    \"installedPackage-cpio:x86_64:2.12+dfsg-9+deb10u1\": {\n      \"id\": \"installedPackage-cpio:x86_64:2.12+dfsg-9+deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"2.12+dfsg-9+deb10u1\",\n          \"packageName\": \"cpio\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556069Z\"\n    },\n    \"installedPackage-libncurses6:x86_64:6.1+20181013-2+deb10u5\": {\n      \"id\": \"installedPackage-libncurses6:x86_64:6.1+20181013-2+deb10u5\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"6.1+20181013-2+deb10u5\",\n          \"packageName\": \"libncurses6\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556162Z\"\n    },\n    \"installedPackage-libpsl5:x86_64:0.20.2-2\": {\n      \"id\": \"installedPackage-libpsl5:x86_64:0.20.2-2\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"0.20.2-2\",\n          \"packageName\": \"libpsl5\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556179Z\"\n    },\n    \"installedPackage-shim-unsigned:x86_64:15.7-1~deb10u1\": {\n      \"id\": \"installedPackage-shim-unsigned:x86_64:15.7-1~deb10u1\",\n      \"originType\": \"INVENTORY_REPORT\",\n      \"type\": \"INSTALLED_PACKAGE\",\n      \"installedPackage\": {\n        \"aptPackage\": {\n          \"architecture\": \"x86_64\",\n          \"version\": \"15.7-1~deb10u1\",\n          \"packageName\": \"shim-unsigned\"\n        }\n      },\n      \"createTime\": \"2024-04-08T17:39:06.556230Z\"\n    }\n  },\n  \"name\": \"projects/12340051/locations/us-central1-a/instances/5086889629880924895/inventory\",\n  \"updateTime\": \"2024-04-08T20:49:06.619439Z\"\n}\n"
  },
  {
    "path": "test-data/osconfig1/json-dumps/project.json",
    "content": "{\n  \"name\": \"projects/12340051\",\n  \"parent\": \"folders/9839384\",\n  \"projectId\": \"fake-project\",\n  \"state\": \"ACTIVE\",\n  \"displayName\": \"fake-project\",\n  \"createTime\": \"2021-03-08T19:21:27.432Z\",\n  \"updateTime\": \"2021-03-08T19:21:29.381Z\",\n  \"etag\": \"W/\\\"862e160906ef825f\\\"\"\n}\n"
  },
  {
    "path": "test-data/osconfig1/json-dumps/services.json",
    "content": "{\n  \"services\": [\n    {\n      \"name\": \"projects/12340051/services/autoscaling.googleapis.com\",\n      \"config\": {\n        \"name\": \"autoscaling.googleapis.com\",\n        \"title\": \"Cloud Autoscaling API\",\n        \"documentation\": {\n          \"summary\": \"An API for the Cloud Autoscaling for consuming autoscaling signals.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340051\"\n    },\n    {\n      \"name\": \"projects/12340051/services/bigquery.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigquery.googleapis.com\",\n        \"title\": \"BigQuery API\",\n        \"documentation\": {\n          \"summary\": \"A data platform for customers to create, manage, share and query data.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340051\"\n    },\n    {\n      \"name\": \"projects/12340051/services/bigquerymigration.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigquerymigration.googleapis.com\",\n        \"title\": \"BigQuery Migration API\",\n        \"documentation\": {\n          \"summary\": \"The migration service, exposing apis for migration jobs operations, and agent management.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340051\"\n    },\n    {\n      \"name\": \"projects/12340051/services/bigquerystorage.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigquerystorage.googleapis.com\",\n        \"title\": \"BigQuery Storage API\",\n        \"documentation\": {},\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340051\"\n    },\n    {\n      \"name\": \"projects/12340051/services/compute.googleapis.com\",\n      \"config\": {\n        \"name\": \"compute.googleapis.com\",\n        \"title\": \"Compute Engine API\",\n        \"documentation\": {\n          \"summary\": \"Creates and runs virtual machines on Google Cloud Platform.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"compute.googleapis.com/VpcNetwork\",\n            \"displayName\": \"VPC Network\",\n            \"description\": \"VPC Network.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the VPC Network.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the VPC Network, global always.\"\n              },\n              {\n                \"key\": \"network_id\",\n                \"description\": \"VPC Network resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/instances_per_vpc_network\",\n                \"compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/ip_aliases_per_vpc_network\",\n                \"compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/instances_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/subnet_ranges_per_vpc_network\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/instances_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/instances_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/instances_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340051\"\n    },\n    {\n      \"name\": \"projects/12340051/services/container.googleapis.com\",\n      \"config\": {\n        \"name\": \"container.googleapis.com\",\n        \"title\": \"Kubernetes Engine API\",\n        \"documentation\": {\n          \"summary\": \"Builds and manages container-based applications, powered by the open source Kubernetes technology.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340051\"\n    },\n    {\n      \"name\": \"projects/12340051/services/containerfilesystem.googleapis.com\",\n      \"config\": {\n        \"name\": \"containerfilesystem.googleapis.com\",\n        \"title\": \"Container File System API\",\n        \"documentation\": {},\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340051\"\n    },\n    {\n      \"name\": \"projects/12340051/services/containerregistry.googleapis.com\",\n      \"config\": {\n        \"name\": \"containerregistry.googleapis.com\",\n        \"title\": \"Container Registry API\",\n        \"documentation\": {\n          \"summary\": \"Google Container Registry provides secure, private Docker image storage on Google Cloud Platform.  Our API follows the Docker Registry API specification, so we are fully compatible with the Docker CLI client, as well as standard tooling using the Docker Registry API.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"serviceruntime.googleapis.com/api\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_version\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_method\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/consumer_project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              }\n            ]\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/api\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/api/consumer/quota_used_count\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340051\"\n    },\n    {\n      \"name\": \"projects/12340051/services/iam.googleapis.com\",\n      \"config\": {\n        \"name\": \"iam.googleapis.com\",\n        \"title\": \"Identity and Access Management (IAM) API\",\n        \"documentation\": {\n          \"summary\": \"Manages identity and access control for Google Cloud Platform resources, including the creation of service accounts, which you can use to authenticate to Google and make API calls.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"iam_service_account\",\n            \"displayName\": \"IAM Service Account\",\n            \"description\": \"An IAM Service Account.\",\n            \"labels\": [\n              {\n                \"key\": \"project_id\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"unique_id\",\n                \"description\": \"The unique_id of the service account.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"iam.googleapis.com/WorkloadIdentityPoolProvider\",\n            \"displayName\": \"Workload Identity Pool Provider\",\n            \"description\": \"A workload identity pool provider.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location of the resource.\"\n              },\n              {\n                \"key\": \"pool_id\",\n                \"description\": \"The ID of the provider's workload identity pool parent resource.\"\n              },\n              {\n                \"key\": \"provider_id\",\n                \"description\": \"The ID of the workload identity pool provider resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"iam.googleapis.com/WorkloadIdentityPoolProvider\",\n              \"metrics\": [\n                \"iam.googleapis.com/workload_identity_federation/count\",\n                \"iam.googleapis.com/workload_identity_federation/key_usage_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"iam_service_account\",\n              \"metrics\": [\n                \"iam.googleapis.com/service_account/authn_events_count\",\n                \"iam.googleapis.com/service_account/key/authn_events_count\",\n                \"iam.googleapis.com/service_account/authn_events_count_preprod\",\n                \"iam.googleapis.com/service_account/key/authn_events_count_preprod\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340051\"\n    },\n    {\n      \"name\": \"projects/12340051/services/iamcredentials.googleapis.com\",\n      \"config\": {\n        \"name\": \"iamcredentials.googleapis.com\",\n        \"title\": \"IAM Service Account Credentials API\",\n        \"documentation\": {\n          \"summary\": \"Creates short-lived credentials for impersonating IAM service accounts. To enable this API, you must enable the IAM API (iam.googleapis.com).\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"serviceruntime.googleapis.com/api\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_version\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_method\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/consumer_project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              }\n            ]\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/api\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/api/consumer/quota_used_count\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340051\"\n    },\n    {\n      \"name\": \"projects/12340051/services/monitoring.googleapis.com\",\n      \"config\": {\n        \"name\": \"monitoring.googleapis.com\",\n        \"title\": \"Cloud Monitoring API\",\n        \"documentation\": {\n          \"summary\": \"Manages your Cloud Monitoring data and configurations.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"monitoring.googleapis.com/ChargedProject\",\n            \"displayName\": \"Cloud monitoring target\",\n            \"description\": \"A cloud monitoring specialization target schema of cloud.ChargedProject.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The monitored resource container. Could be project, workspace, etc.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The service-specific notion of location.\"\n              },\n              {\n                \"key\": \"service\",\n                \"description\": \"The name of the API service with which the data is associated (e.g.,'monitoring.googleapis.com').\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"monitoring.googleapis.com/MetricStatistics\",\n            \"displayName\": \"Metric Statistics\",\n            \"description\": \"Information about a user-written metric in Cloud Monitoring.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project to which the metric is written, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The cloud region where the metric was received.\"\n              },\n              {\n                \"key\": \"metric_type\",\n                \"description\": \"The metric type.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"monitoring.googleapis.com/MetricIngestionAttribution\",\n            \"displayName\": \"Metric Ingestion Attribution\",\n            \"description\": \"Attribution for metric ingestion.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project to which the metric is written, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The cloud region where the metric was received.\"\n              },\n              {\n                \"key\": \"attribution_dimension\",\n                \"description\": \"The dimension used for attribution reporting. It is not recommended that aggregations are performed across dimensions because a single metric point can be recorded with multiple dimensions which could cause double counting. Currently only \\\"namespace\\\" is supported.\"\n              },\n              {\n                \"key\": \"attribution_id\",\n                \"description\": \"The attribution id of the source of the metric write.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"monitoring.googleapis.com/ChargedProject\",\n              \"metrics\": [\n                \"monitoring.googleapis.com/billing/bytes_ingested\",\n                \"monitoring.googleapis.com/billing/samples_ingested\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"monitoring.googleapis.com/MetricStatistics\",\n              \"metrics\": [\n                \"monitoring.googleapis.com/collection/write_request_count\",\n                \"monitoring.googleapis.com/collection/write_request_point_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"monitoring.googleapis.com/MetricIngestionAttribution\",\n              \"metrics\": [\n                \"monitoring.googleapis.com/collection/attribution/sample_count\",\n                \"monitoring.googleapis.com/collection/attribution/write_sample_count\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340051\"\n    },\n    {\n      \"name\": \"projects/12340051/services/oslogin.googleapis.com\",\n      \"config\": {\n        \"name\": \"oslogin.googleapis.com\",\n        \"title\": \"Cloud OS Login API\",\n        \"documentation\": {\n          \"summary\": \"You can use OS Login to manage access to your VM instances using IAM roles.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340051\"\n    },\n    {\n      \"name\": \"projects/12340051/services/pubsub.googleapis.com\",\n      \"config\": {\n        \"name\": \"pubsub.googleapis.com\",\n        \"title\": \"Cloud Pub/Sub API\",\n        \"documentation\": {\n          \"summary\": \"Provides reliable, many-to-many, asynchronous messaging between applications.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340051\"\n    },\n    {\n      \"name\": \"projects/12340051/services/storage-api.googleapis.com\",\n      \"config\": {\n        \"name\": \"storage-api.googleapis.com\",\n        \"title\": \"Google Cloud Storage JSON API\",\n        \"documentation\": {\n          \"summary\": \"Lets you store and retrieve potentially-large, immutable data objects.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340051\"\n    },\n    {\n      \"name\": \"projects/12340051/services/osconfig.googleapis.com\",\n      \"config\": {\n        \"name\": \"osconfig.googleapis.com\",\n        \"title\": \"OS Config API\",\n        \"documentation\": {\n          \"summary\": \"OS management tools that can be used for patch management, patch compliance, and configuration management on VM instances.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"osconfig.googleapis.com/PatchJob\",\n            \"displayName\": \"Patch Job\",\n            \"description\": \"A patch job ran by VM Manager.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP project associated with the patch job.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location that contains the patch job.\"\n              },\n              {\n                \"key\": \"id\",\n                \"description\": \"Id uniquely identifying the patch job.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"osconfig.googleapis.com/PatchJob\",\n              \"metrics\": [\n                \"osconfig.googleapis.com/patch/job/instance_state\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340051\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/osconfig1/project.tf",
    "content": "/**\n * Copyright 2024 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nlocals {\n  project_id = var.project_id\n}\n\nprovider \"google\" {\n  project = local.project_id\n  region  = \"us-central1\"\n  zone    = \"us-central1-a\"\n}\n\nterraform {\n  required_providers {\n    google = {\n      source  = \"hashicorp/google\"\n      version = \"= 3.46.0\"\n    }\n    google-beta = {\n      source  = \"hashicorp/google-beta\"\n      version = \">= 3.46.0\"\n    }\n  }\n}\n\nresource \"google_project_service\" \"osconfig\" {\n  project = local.project_id\n  service = \"osconfig.googleapis.com\"\n}\n\n\n\noutput \"project_nr\" {\n  value = var.project_nr\n}\n\noutput \"org_id\" {\n  value = var.org_id\n}\noutput \"folder_id\" {\n  value = var.folder_id\n}\n\noutput \"project_id\" {\n  value = local.project_id\n}\noutput \"instance_name\" {\n  value = var.instance_name\n}\n"
  },
  {
    "path": "test-data/osconfig1/variables.tf",
    "content": "\nvariable \"org_id\" {}\nvariable \"folder_id\" {}\nvariable \"project_nr\" {}\nvariable \"project_id\" {\n\n}\nvariable \"instance_name\" {}\n"
  },
  {
    "path": "test-data/pubsub1/Makefile",
    "content": "PROJECT_ID := $(shell terraform output project_id | sed -e 's|\"||g')\nPROJECT_ID_SUFFIX := $(shell terraform output -json project_id_suffix)\nPROJECT_NR  := $(shell terraform output -json project_nr | sed -e 's|\"||g')\nORG_ID      := $(shell terraform output -json org_id)\nCURL         = ../../bin/curl-wrap.sh\nJSON_CLEANER = ../../bin/json-cleaner\n\nTOPIC := $(shell terraform output -json topic | sed -e 's|\"||g')\nSUBSCRIPTION := $(shell terraform output -json subscription | sed -e 's|\"||g')\nBQ_SUBSCRIPTION := $(shell terraform output -json bqsubscription | sed -e 's|\"||g')\nGCS_SUBSCRIPTION := $(shell terraform output -json gcs_subscription | sed -e 's|\"||g')\nBUCKET_ID := $(shell terraform output -json gcs_subscription_bucket_name | sed -e 's|\"||g')\n\nFAKE_PROJECT_ID_SUFFIX = aaaa\nFAKE_PROJECT_NR = 12340014\nFAKE_ORG_ID = 11112222\nSED_SUBST_FAKE = sed -e \"s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/\" \\\n\t\t     -e \"s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/\" \\\n\t\t     -e \"s/$(ORG_ID)/$(FAKE_ORG_ID)/\" \\\n\nall:\t\\\n\tjson-dumps/project.json \\\n\tjson-dumps/services.json \\\n\tjson-dumps/topics.json \\\n\tjson-dumps/topic-iam.json \\\n\tjson-dumps/subscriptions.json \\\n\tjson-dumps/pull-subscription.json \\\n\tjson-dumps/bq-subscription.json \\\n\tjson-dumps/gcs-subscription.json \\\n\tjson-dumps/subscriptions-iam.json \\\n\tjson-dumps/iam-policy.json \\\n\tjson-dumps/iam-service-accounts.json \\\n\tjson-dumps/monitoring-query.json \\\n\tjson-dumps/bucket-roles.json\n\njson-dumps/project.json:\n\t$(CURL) -fsS \\\n\t\t'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/services.json:\n\t$(CURL) -fv \\\n\t'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \\\n\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/topics.json:\n\t$(CURL) -fv \\\n\t\t'https://pubsub.googleapis.com/v1/projects/${PROJECT_ID}/topics' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/topic-iam.json:\n\t$(CURL) -fv \\\n\t\t'https://pubsub.googleapis.com/v1/projects/$(PROJECT_ID)/topics/$(TOPIC):getIamPolicy' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/subscriptions.json:\n\t$(CURL) -fv \\\n\t\t'https://pubsub.googleapis.com/v1/projects/${PROJECT_ID}/subscriptions' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/pull-subscription.json:\n\t$(CURL) -fv \\\n\t\t'https://pubsub.googleapis.com/v1/projects/$(PROJECT_ID)/subscriptions/$(SUBSCRIPTION)' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/bq-subscription.json:\n\t$(CURL) -fv \\\n\t\t'https://pubsub.googleapis.com/v1/projects/$(PROJECT_ID)/subscriptions/$(BQ_SUBSCRIPTION)' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/gcs-subscription.json:\n\t$(CURL) -fv \\\n\t\t'https://pubsub.googleapis.com/v1/projects/$(PROJECT_ID)/subscriptions/$(GCS_SUBSCRIPTION)' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/subscriptions-iam.json:\n\t$(CURL) -fv \\\n\t\t'https://pubsub.googleapis.com/v1/projects/$(PROJECT_ID)/subscriptions/$(SUBSCRIPTION):getIamPolicy' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/iam-policy.json:\n\t$(CURL) -fsS \\\n\t\t'https://cloudresourcemanager.googleapis.com/v1/projects/$(PROJECT_ID):getIamPolicy' \\\n\t\t-X POST  --header \"Content-Type:text/json\" \\\n\t\t-d \"\" \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/iam-service-accounts.json:\n\t$(CURL) -fsS \\\n\t\t'https://iam.googleapis.com/v1/projects/$(PROJECT_ID)/serviceAccounts' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\n\ndefine BQ_SUB_PUSH_REQUESTS_QUERY\n{ \\\n  \"query\": \"fetch pubsub_subscription::pubsub.googleapis.com/subscription/push_request_count \\\n\t| filter resource.project_id == '\"'\"'$(PROJECT_ID)'\"'\"' && resource.subscription_id == '\"'\"'$(BQ_SUBSCRIPTION)'\"'\"'\\\n  | within 10m \\\n  | group_by [metric.response_class],[value_push_request_count_aggregate: aggregate(value.push_request_count)] \\\n\t| within 10m \\\n  \" \\\n}\nendef\njson-dumps/monitoring-query.json:\n\t$(CURL) -fsS \\\n\t\t'https://monitoring.googleapis.com/v3/projects/$(PROJECT_ID)/timeSeries:query'\\\n\t\t--header \"Content-Type: application/json\" -X POST \\\n\t\t--data '$(BQ_SUB_PUSH_REQUESTS_QUERY)' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\n\njson-dumps/bucket-roles.json:\n\t$(CURL) -fv \\\n\t\t'https://storage.googleapis.com/storage/v1/b/${BUCKET_ID}/iam' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n"
  },
  {
    "path": "test-data/pubsub1/json-dumps/bq-subscription.json",
    "content": "{\n  \"name\": \"projects/gcpdiag-pubsub1-aaaa/subscriptions/gcpdiag-pubsub1subscription2-9pm6hng1\",\n  \"topic\": \"projects/gcpdiag-pubsub1-aaaa/topics/gcpdiag-pubsub1topic-9pm6hng1\",\n  \"pushConfig\": {},\n  \"ackDeadlineSeconds\": 10,\n  \"messageRetentionDuration\": \"604800s\",\n  \"expirationPolicy\": {\n    \"ttl\": \"2678400s\"\n  },\n  \"deadLetterPolicy\": {\n    \"deadLetterTopic\": \"projects/gcpdiag-pubsub1-aaaa/topics/gcpdiag-bqdlqtopic-9pm6hng1\",\n    \"maxDeliveryAttempts\": 5\n  },\n  \"bigqueryConfig\": {\n    \"table\": \"gcpdiag-pubsub1-aaaa.pubsub1_dataset.pubsub1_table\",\n    \"state\": \"ACTIVE\"\n  },\n  \"state\": \"ACTIVE\"\n}\n"
  },
  {
    "path": "test-data/pubsub1/json-dumps/bucket-roles.json",
    "content": "{\n  \"kind\": \"storage#policy\",\n  \"resourceId\": \"projects/_/buckets/pubsub1_bucket\",\n  \"version\": 1,\n  \"etag\": \"CAE=\",\n  \"bindings\": [\n    {\n      \"role\": \"roles/storage.legacyBucketOwner\",\n      \"members\": [\n        \"projectEditor:gcpdiag-pubsub1-aaaa\",\n        \"projectOwner:gcpdiag-pubsub1-aaaa\"\n      ]\n    },\n    {\n      \"role\": \"roles/storage.legacyBucketReader\",\n      \"members\": [\n        \"projectViewer:gcpdiag-pubsub1-aaaa\"\n      ]\n    },\n    {\n      \"role\": \"roles/storage.legacyObjectOwner\",\n      \"members\": [\n        \"projectEditor:gcpdiag-pubsub1-aaaa\",\n        \"projectOwner:gcpdiag-pubsub1-aaaa\"\n      ]\n    },\n    {\n      \"role\": \"roles/storage.legacyObjectReader\",\n      \"members\": [\n        \"projectViewer:gcpdiag-pubsub1-aaaa\"\n      ]\n    },\n    {\n      \"role\": \"roles/storage.admin\",\n      \"members\": [\n        \"serviceAccount:service-12340014@gcp-sa-pubsub.iam.gserviceaccount.com\"\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/pubsub1/json-dumps/gcs-subscription.json",
    "content": "{\n  \"name\": \"projects/gcpdiag-pubsub1-aaaa/subscriptions/gcpdiag-pubsub1subscription3gcs-9pm6hng1\",\n  \"topic\": \"projects/gcpdiag-pubsub1-aaaa/topics/gcpdiag-pubsub1topic-9pm6hng1\",\n  \"pushConfig\": {},\n  \"ackDeadlineSeconds\": 300,\n  \"messageRetentionDuration\": \"604800s\",\n  \"labels\": {\n    \"goog-terraform-provisioned\": \"true\"\n  },\n  \"expirationPolicy\": {\n    \"ttl\": \"2678400s\"\n  },\n  \"deadLetterPolicy\": {\n    \"deadLetterTopic\": \"projects/gcpdiag-pubsub1-aaaa/topics/gcpdiag-gcsdlqtopic-9pm6hng1\",\n    \"maxDeliveryAttempts\": 5\n  },\n  \"state\": \"ACTIVE\",\n  \"cloudStorageConfig\": {\n    \"bucket\": \"pubsub1_bucket\",\n    \"textConfig\": {},\n    \"maxDuration\": \"300s\",\n    \"maxBytes\": \"1000\",\n    \"state\": \"ACTIVE\"\n  }\n}\n"
  },
  {
    "path": "test-data/pubsub1/json-dumps/iam-policy.json",
    "content": "{\n  \"version\": 1,\n  \"etag\": \"BwYPm4/BKyY=\",\n  \"bindings\": [\n    {\n      \"role\": \"roles/bigquery.dataEditor\",\n      \"members\": [\n        \"serviceAccount:service-12340014@gcp-sa-pubsub.iam.gserviceaccount.com\"\n      ]\n    },\n    {\n      \"role\": \"roles/owner\",\n      \"members\": [\n        \"user:dummymail@dummymail.com\"\n      ]\n    },\n    {\n      \"role\": \"roles/pubsub.publisher\",\n      \"members\": [\n        \"serviceAccount:service-12340014@gcp-sa-pubsub.iam.gserviceaccount.com\"\n      ]\n    },\n    {\n      \"role\": \"roles/pubsub.serviceAgent\",\n      \"members\": [\n        \"serviceAccount:service-12340014@gcp-sa-pubsub.iam.gserviceaccount.com\"\n      ]\n    },\n    {\n      \"role\": \"roles/pubsub.subscriber\",\n      \"members\": [\n        \"serviceAccount:service-12340014@gcp-sa-pubsub.iam.gserviceaccount.com\"\n      ]\n    },\n    {\n      \"role\": \"roles/storage.admin\",\n      \"members\": [\n        \"serviceAccount:service-12340014@gcp-sa-pubsub.iam.gserviceaccount.com\"\n      ]\n    },\n    {\n      \"role\": \"roles/websecurityscanner.serviceAgent\",\n      \"members\": [\n        \"serviceAccount:service-12340014@gcp-sa-websecurityscanner.iam.gserviceaccount.com\"\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/pubsub1/json-dumps/iam-service-accounts.json",
    "content": "{\n  \"accounts\": []\n}\n"
  },
  {
    "path": "test-data/pubsub1/json-dumps/monitoring-query.json",
    "content": "{\n  \"timeSeriesDescriptor\": {}\n}\n"
  },
  {
    "path": "test-data/pubsub1/json-dumps/project.json",
    "content": "{\n  \"name\": \"projects/12340014\",\n  \"parent\": \"organizations/11112222\",\n  \"projectId\": \"gcpdiag-pubsub1-aaaa\",\n  \"state\": \"ACTIVE\",\n  \"displayName\": \"gcpdiag test - pubsub1\",\n  \"createTime\": \"2022-01-05T11:22:57.729Z\",\n  \"updateTime\": \"2022-01-05T11:22:59.801Z\",\n  \"etag\": \"os+RgnRglVh4dCaEwZYnzw==\",\n  \"labels\": {\n    \"gcpdiag\": \"test\"\n  }\n}\n"
  },
  {
    "path": "test-data/pubsub1/json-dumps/pull-subscription.json",
    "content": "{\n  \"name\": \"projects/gcpdiag-pubsub1-aaaa/subscriptions/gcpdiag-pubsub1subscription-9pm6hng1\",\n  \"topic\": \"projects/gcpdiag-pubsub1-aaaa/topics/gcpdiag-pubsub1topic-9pm6hng1\",\n  \"pushConfig\": {},\n  \"ackDeadlineSeconds\": 10,\n  \"messageRetentionDuration\": \"604800s\",\n  \"expirationPolicy\": {\n    \"ttl\": \"2678400s\"\n  },\n  \"state\": \"ACTIVE\"\n}\n"
  },
  {
    "path": "test-data/pubsub1/json-dumps/services.json",
    "content": "{\n  \"services\": [\n    {\n      \"name\": \"projects/12340014/services/bigquery.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigquery.googleapis.com\",\n        \"title\": \"BigQuery API\",\n        \"documentation\": {\n          \"summary\": \"A data platform for customers to create, manage, share and query data.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"bigquery.googleapis.com/Table\",\n            \"displayName\": \"BigQuery Table Resource.\",\n            \"description\": \"BigQuery Table Resource.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP resource container associated with this resource, such as \\\"my-project\\\" or \\\"organizations/123\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The cloud location of the BigQuery table.\"\n              },\n              {\n                \"key\": \"table_reference\",\n                \"description\": \"The table reference in the format of project_id:dataset_id.table_id for the BigQuery table.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"bigquery.googleapis.com/Location\",\n            \"displayName\": \"CheckIamPolicy Request Location\",\n            \"description\": \"A BigQuery Location (sometimes called Region).\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The id of the GCP resource container associated with this resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/Table\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_eu/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_us/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_eu/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_us/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/Location\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/quota/internalCheckIamPolicyRequests/exceeded\",\n                \"bigquery.googleapis.com/quota/internalCheckIamPolicyRequests/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/Location\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/quota/internalCheckIamPolicyRequests/limit\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/Table\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org/limit\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org/usage\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_eu/limit\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_eu/usage\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_us/limit\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_us/usage\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project/limit\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project/usage\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_eu/limit\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_eu/usage\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_us/limit\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_us/usage\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340014\"\n    },\n    {\n      \"name\": \"projects/12340014/services/bigquerymigration.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigquerymigration.googleapis.com\",\n        \"title\": \"BigQuery Migration API\",\n        \"documentation\": {\n          \"summary\": \"The migration service, exposing apis for migration jobs operations, and agent management.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340014\"\n    },\n    {\n      \"name\": \"projects/12340014/services/bigquerystorage.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigquerystorage.googleapis.com\",\n        \"title\": \"BigQuery Storage API\",\n        \"documentation\": {},\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340014\"\n    },\n    {\n      \"name\": \"projects/12340014/services/pubsub.googleapis.com\",\n      \"config\": {\n        \"name\": \"pubsub.googleapis.com\",\n        \"title\": \"Cloud Pub/Sub API\",\n        \"documentation\": {\n          \"summary\": \"Provides reliable, many-to-many, asynchronous messaging between applications.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340014\"\n    },\n    {\n      \"name\": \"projects/12340014/services/websecurityscanner.googleapis.com\",\n      \"config\": {\n        \"name\": \"websecurityscanner.googleapis.com\",\n        \"title\": \"Web Security Scanner API\",\n        \"documentation\": {\n          \"summary\": \"Scans your Compute and App Engine apps for common web vulnerabilities.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340014\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/pubsub1/json-dumps/subscriptions-iam.json",
    "content": "{\n  \"version\": 1,\n  \"etag\": \"BwYPijt35Pk=\",\n  \"bindings\": [\n    {\n      \"role\": \"roles/viewer\",\n      \"members\": [\n        \"domain:google.com\"\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/pubsub1/json-dumps/subscriptions.json",
    "content": "{\n  \"subscriptions\": [\n    {\n      \"name\": \"projects/gcpdiag-pubsub1-aaaa/subscriptions/gcpdiag-pubsub1subscription3gcs-9pm6hng1\",\n      \"topic\": \"projects/gcpdiag-pubsub1-aaaa/topics/gcpdiag-pubsub1topic-9pm6hng1\",\n      \"pushConfig\": {},\n      \"ackDeadlineSeconds\": 300,\n      \"messageRetentionDuration\": \"604800s\",\n      \"expirationPolicy\": {\n        \"ttl\": \"2678400s\"\n      },\n      \"deadLetterPolicy\": {\n        \"deadLetterTopic\": \"projects/gcpdiag-pubsub1-aaaa/topics/gcpdiag-gcsdlqtopic-9pm6hng1\",\n        \"maxDeliveryAttempts\": 5\n      },\n      \"state\": \"ACTIVE\",\n      \"cloudStorageConfig\": {\n        \"bucket\": \"pubsub1_bucket\",\n        \"textConfig\": {},\n        \"maxDuration\": \"300s\",\n        \"maxBytes\": \"1000\",\n        \"state\": \"ACTIVE\"\n      }\n    },\n    {\n      \"name\": \"projects/gcpdiag-pubsub1-aaaa/subscriptions/gcpdiag-pubsub1subscription2-9pm6hng1\",\n      \"topic\": \"projects/gcpdiag-pubsub1-aaaa/topics/gcpdiag-pubsub1topic-9pm6hng1\",\n      \"pushConfig\": {},\n      \"ackDeadlineSeconds\": 10,\n      \"messageRetentionDuration\": \"604800s\",\n      \"expirationPolicy\": {\n        \"ttl\": \"2678400s\"\n      },\n      \"deadLetterPolicy\": {\n        \"deadLetterTopic\": \"projects/gcpdiag-pubsub1-aaaa/topics/gcpdiag-bqdlqtopic-9pm6hng1\",\n        \"maxDeliveryAttempts\": 5\n      },\n      \"bigqueryConfig\": {\n        \"table\": \"gcpdiag-pubsub1-aaaa.pubsub1_dataset.pubsub1_table\",\n        \"state\": \"ACTIVE\"\n      },\n      \"state\": \"ACTIVE\"\n    },\n    {\n      \"name\": \"projects/gcpdiag-pubsub1-aaaa/subscriptions/gcpdiag-pubsub1subscription-9pm6hng1\",\n      \"topic\": \"projects/gcpdiag-pubsub1-aaaa/topics/gcpdiag-pubsub1topic-9pm6hng1\",\n      \"pushConfig\": {},\n      \"ackDeadlineSeconds\": 10,\n      \"messageRetentionDuration\": \"604800s\",\n      \"expirationPolicy\": {\n        \"ttl\": \"2678400s\"\n      },\n      \"state\": \"ACTIVE\"\n    },\n    {\n      \"name\": \"projects/gcpdiag-pubsub1-aaaa/subscriptions/gcpdiag-bqdlqsubscription-9pm6hng1\",\n      \"topic\": \"projects/gcpdiag-pubsub1-aaaa/topics/gcpdiag-bqdlqtopic-9pm6hng1\",\n      \"pushConfig\": {},\n      \"ackDeadlineSeconds\": 10,\n      \"messageRetentionDuration\": \"604800s\",\n      \"expirationPolicy\": {\n        \"ttl\": \"2678400s\"\n      },\n      \"state\": \"ACTIVE\"\n    },\n    {\n      \"name\": \"projects/gcpdiag-pubsub1-aaaa/subscriptions/gcpdiag-gcsdlqsubscription-9pm6hng1\",\n      \"topic\": \"projects/gcpdiag-pubsub1-aaaa/topics/gcpdiag-gcsdlqtopic-9pm6hng1\",\n      \"pushConfig\": {},\n      \"ackDeadlineSeconds\": 10,\n      \"messageRetentionDuration\": \"604800s\",\n      \"expirationPolicy\": {\n        \"ttl\": \"2678400s\"\n      },\n      \"state\": \"ACTIVE\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/pubsub1/json-dumps/topic-iam.json",
    "content": "{\n  \"version\": 1,\n  \"etag\": \"BwYHmcy7AxA=\",\n  \"bindings\": [\n    {\n      \"role\": \"roles/viewer\",\n      \"members\": [\n        \"domain:google.com\"\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/pubsub1/json-dumps/topics.json",
    "content": "{\n  \"topics\": [\n    {\n      \"name\": \"projects/gcpdiag-pubsub1-aaaa/topics/gcpdiag-pubsub1topic-9pm6hng1\"\n    },\n    {\n      \"name\": \"projects/gcpdiag-pubsub1-aaaa/topics/gcpdiag-gcsdlqtopic-9pm6hng1\"\n    },\n    {\n      \"name\": \"projects/gcpdiag-pubsub1-aaaa/topics/gcpdiag-bqdlqtopic-9pm6hng1\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/pubsub1/project.tf",
    "content": "/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nterraform {\n  required_providers {\n    google = {\n      source  = \"hashicorp/google\"\n      version = \"= 3.46.0\"\n    }\n    google-beta = {\n      source  = \"hashicorp/google-beta\"\n      version = \">= 4.50.0\"\n    }\n  }\n}\n\n\nresource \"random_string\" \"project_id_suffix\" {\n  length  = 8\n  lower   = true\n  upper   = false\n  special = false\n}\n\nresource \"google_project\" \"project\" {\n  name            = \"gcpdiag test - pubsub1\"\n  project_id      = \"gcpdiag-pubsub1-${random_string.project_id_suffix.id}\"\n  org_id          = var.folder_id == \"\" ? var.org_id : null\n  folder_id       = var.folder_id != \"\" ? var.folder_id : null\n  billing_account = var.billing_account_id\n  labels = {\n    gcpdiag : \"test\"\n  }\n}\n\nresource \"google_project_service\" \"pubsub\" {\n  project = google_project.project.project_id\n  service = \"pubsub.googleapis.com\"\n}\n\nresource \"google_project_service\" \"bigquery\" {\n  project = google_project.project.project_id\n  service = \"bigquery.googleapis.com\"\n}\n\noutput \"project_id\" {\n  value = google_project.project.project_id\n}\n\noutput \"project_id_suffix\" {\n  value = random_string.project_id_suffix.id\n}\n\noutput \"project_nr\" {\n  value = google_project.project.number\n}\n\noutput \"org_id\" {\n  value = var.org_id\n}\n\noutput \"topic\" {\n  value = google_pubsub_topic.pubsub1topic.name\n}\n\noutput \"subscription\" {\n  value = google_pubsub_subscription.pubsub1subscription.name\n}\n\noutput \"bqsubscription\" {\n  value = google_pubsub_subscription.pubsub1subscription2.name\n}\n\noutput \"gcs_subscription\" {\n  value = google_pubsub_subscription.pubsub1subscription3gcs.name\n}\n\noutput \"gcs_subscription_bucket_name\" {\n  value = google_storage_bucket.pubsub_gcs_subscription_bucket.name\n}\n"
  },
  {
    "path": "test-data/pubsub1/pubsub1.tf",
    "content": "resource \"google_pubsub_topic\" \"pubsub1topic\" {\n  project = google_project.project.project_id\n  name    = \"gcpdiag-pubsub1topic-${random_string.project_id_suffix.id}\"\n}\n\nresource \"google_pubsub_subscription\" \"pubsub1subscription\" {\n  project = google_project.project.project_id\n  name    = \"gcpdiag-pubsub1subscription-${random_string.project_id_suffix.id}\"\n  topic   = google_pubsub_topic.pubsub1topic.name\n}\n\ndata \"google_iam_policy\" \"admin\" {\n  binding {\n    role = \"roles/viewer\"\n    members = [\n      \"domain:google.com\",\n    ]\n  }\n}\n\nresource \"google_pubsub_topic_iam_policy\" \"policy\" {\n  project     = google_project.project.project_id\n  topic       = google_pubsub_topic.pubsub1topic.name\n  policy_data = data.google_iam_policy.admin.policy_data\n}\n\nresource \"google_pubsub_subscription_iam_policy\" \"policy1\" {\n  project      = google_project.project.project_id\n  subscription = \"gcpdiag-pubsub1subscription-${random_string.project_id_suffix.id}\"\n  policy_data  = data.google_iam_policy.admin.policy_data\n}\n\n# BQ subscription\n# dlq\nresource \"google_project_iam_member\" \"pubsub_publisher_role\" {\n  project  = google_project.project.project_id\n  provider = google-beta\n  role     = \"roles/pubsub.publisher\"\n  member   = \"serviceAccount:service-${google_project.project.number}@gcp-sa-pubsub.iam.gserviceaccount.com\"\n}\n\nresource \"google_project_iam_member\" \"pubsub_subscriber_role\" {\n  project  = google_project.project.project_id\n  provider = google-beta\n  role     = \"roles/pubsub.subscriber\"\n  member   = \"serviceAccount:service-${google_project.project.number}@gcp-sa-pubsub.iam.gserviceaccount.com\"\n}\n\nresource \"google_pubsub_topic\" \"dlq_bq_topic\" {\n  project    = google_project.project.project_id\n  name       = \"gcpdiag-bqdlqtopic-${random_string.project_id_suffix.id}\"\n  depends_on = [google_project_iam_member.pubsub_publisher_role, google_project_iam_member.pubsub_subscriber_role]\n}\n\nresource \"google_pubsub_subscription\" \"dlq_bq_subscription\" {\n  project = google_project.project.project_id\n  name    = \"gcpdiag-bqdlqsubscription-${random_string.project_id_suffix.id}\"\n  topic   = google_pubsub_topic.dlq_bq_topic.name\n}\n\n# bq\nresource \"google_project_iam_member\" \"bq_editor\" {\n  project  = google_project.project.project_id\n  provider = google-beta\n  role     = \"roles/bigquery.dataEditor\"\n  member   = \"serviceAccount:service-${google_project.project.number}@gcp-sa-pubsub.iam.gserviceaccount.com\"\n}\n\nresource \"google_bigquery_dataset\" \"pubsub1_dataset\" {\n  project    = google_project.project.project_id\n  dataset_id = \"pubsub1_dataset\"\n  provider   = google-beta\n}\n\nresource \"google_bigquery_table\" \"pubsub1_table\" {\n  # deletion_protection = false\n  table_id   = \"pubsub1_table\"\n  project    = google_project.project.project_id\n  dataset_id = google_bigquery_dataset.pubsub1_dataset.dataset_id\n  provider   = google-beta\n\n  schema = <<EOF\n[\n  {\n    \"name\": \"data\",\n    \"type\": \"STRING\",\n    \"mode\": \"NULLABLE\",\n    \"description\": \"The data\"\n  }\n]\nEOF\n}\n\nresource \"google_pubsub_subscription\" \"pubsub1subscription2\" {\n  project  = google_project.project.project_id\n  name     = \"gcpdiag-pubsub1subscription2-${random_string.project_id_suffix.id}\"\n  topic    = google_pubsub_topic.pubsub1topic.name\n  provider = google-beta\n\n  bigquery_config {\n    table = \"${google_project.project.project_id}.${google_bigquery_dataset.pubsub1_dataset.dataset_id}.${google_bigquery_table.pubsub1_table.table_id}\"\n  }\n\n  dead_letter_policy {\n    dead_letter_topic = google_pubsub_topic.dlq_bq_topic.id\n  }\n\n  depends_on = [google_project_iam_member.bq_editor]\n}\n\n# GCS subscription\nresource \"google_project_iam_member\" \"gcs_admin\" {\n  project  = google_project.project.project_id\n  provider = google-beta\n  role     = \"roles/storage.admin\"\n  member   = \"serviceAccount:service-${google_project.project.number}@gcp-sa-pubsub.iam.gserviceaccount.com\"\n}\n\nresource \"google_pubsub_topic\" \"dlq_gcs_topic\" {\n  project    = google_project.project.project_id\n  name       = \"gcpdiag-gcsdlqtopic-${random_string.project_id_suffix.id}\"\n  depends_on = [google_project_iam_member.pubsub_publisher_role, google_project_iam_member.pubsub_subscriber_role]\n}\n\nresource \"google_pubsub_subscription\" \"dlq_gcs_subscription\" {\n  project = google_project.project.project_id\n  name    = \"gcpdiag-gcsdlqsubscription-${random_string.project_id_suffix.id}\"\n  topic   = google_pubsub_topic.dlq_gcs_topic.name\n}\n\nresource \"google_storage_bucket\" \"pubsub_gcs_subscription_bucket\" {\n  project                     = google_project.project.project_id\n  name                        = \"pubsub1_bucket_${random_string.project_id_suffix.id}\"\n  location                    = \"EU\"\n  force_destroy               = true\n  uniform_bucket_level_access = true\n}\n\nresource \"google_storage_bucket_iam_member\" \"member\" {\n  bucket = google_storage_bucket.pubsub_gcs_subscription_bucket.name\n  role   = \"roles/storage.admin\"\n  member = \"serviceAccount:service-${google_project.project.number}@gcp-sa-pubsub.iam.gserviceaccount.com\"\n}\n\nresource \"google_pubsub_subscription\" \"pubsub1subscription3gcs\" {\n  project  = google_project.project.project_id\n  name     = \"gcpdiag-pubsub1subscription3gcs-${random_string.project_id_suffix.id}\"\n  topic    = google_pubsub_topic.pubsub1topic.name\n  provider = google-beta\n\n  cloud_storage_config {\n    bucket       = google_storage_bucket.pubsub_gcs_subscription_bucket.name\n    max_bytes    = 1000\n    max_duration = \"300s\"\n  }\n\n  dead_letter_policy {\n    dead_letter_topic = google_pubsub_topic.dlq_gcs_topic.id\n  }\n\n  depends_on = [\n    google_project_iam_member.gcs_admin,\n    google_storage_bucket.pubsub_gcs_subscription_bucket\n  ]\n}\n"
  },
  {
    "path": "test-data/pubsub1/variables.tf",
    "content": "variable \"billing_account_id\" {}\n\nvariable \"org_id\" {}\nvariable \"folder_id\" { default = \"\" }\n"
  },
  {
    "path": "test-data/tpu1/Makefile",
    "content": "PROJECT_ID  := $(shell terraform output -raw project_id)\nPROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix)\nPROJECT_NR  := $(shell terraform output -raw project_nr)\nCURL         = ../../bin/curl-wrap.sh\nJSON_CLEANER = ../../bin/json-cleaner\n\nFAKE_PROJECT_ID_SUFFIX = aaaa\nFAKE_PROJECT_NR = 12340008\nFAKE_ORG_ID = 11112222\nSED_SUBST_FAKE = sed -e \"s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/\" \\\n\t\t     -e \"s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/\" \\\n\t\t     -e \"s/$(ORG_ID)/$(FAKE_ORG_ID)/\" \\\n\nall:\t\\\n\tjson-dumps/services.json \\\n\tjson-dumps/project.json\n\njson-dumps/services.json:\n\t$(CURL) -fsS \\\n\t  'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \\\n\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/project.json:\n\t$(CURL) -fsS \\\n\t  'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \\\n\t  | $(SED_SUBST_FAKE) >$@\n"
  },
  {
    "path": "test-data/tpu1/json-dumps/logging-entries-1.json",
    "content": "{\n  \"entries\": [\n  ]\n}\n"
  },
  {
    "path": "test-data/tpu1/json-dumps/project.json",
    "content": "{\n  \"name\": \"projects/12340008\",\n  \"parent\": \"folders/373737373737\",\n  \"projectId\": \"gcpdiag-tpu1-aaaa\",\n  \"state\": \"ACTIVE\",\n  \"displayName\": \"gcpdiag test - tpu1\",\n  \"createTime\": \"2022-06-14T16:09:44.361Z\",\n  \"updateTime\": \"2022-06-14T16:09:46.341Z\",\n  \"etag\": \"VUd/OqH5H6ielVfs/YQw7g==\"\n}\n"
  },
  {
    "path": "test-data/tpu1/json-dumps/services.json",
    "content": "{\n  \"services\": [\n    {\n      \"name\": \"projects/12340008/services/autoscaling.googleapis.com\",\n      \"config\": {\n        \"name\": \"autoscaling.googleapis.com\",\n        \"title\": \"Cloud Autoscaling API\",\n        \"documentation\": {\n          \"summary\": \"An API for the Cloud Autoscaling for consuming autoscaling signals.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340008\"\n    },\n    {\n      \"name\": \"projects/12340008/services/bigquery.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigquery.googleapis.com\",\n        \"title\": \"BigQuery API\",\n        \"documentation\": {\n          \"summary\": \"A data platform for customers to create, manage, share and query data.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340008\"\n    },\n    {\n      \"name\": \"projects/12340008/services/bigquerymigration.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigquerymigration.googleapis.com\",\n        \"title\": \"BigQuery Migration API\",\n        \"documentation\": {\n          \"summary\": \"The migration service, exposing apis for migration jobs operations, and agent management.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340008\"\n    },\n    {\n      \"name\": \"projects/12340008/services/bigquerystorage.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigquerystorage.googleapis.com\",\n        \"title\": \"BigQuery Storage API\",\n        \"documentation\": {},\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340008\"\n    },\n    {\n      \"name\": \"projects/12340008/services/cloudtrace.googleapis.com\",\n      \"config\": {\n        \"name\": \"cloudtrace.googleapis.com\",\n        \"title\": \"Cloud Trace API\",\n        \"documentation\": {\n          \"summary\": \"Sends application trace data to Cloud Trace for viewing. Trace data is collected for all App Engine applications by default. Trace data from other applications can be provided using this API. This library is used to interact with the Cloud Trace API directly. If you are looking to instrument your application for Cloud Trace, we recommend using OpenTelemetry.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"cloudtrace.googleapis.com/charged_project\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"monitoring.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              }\n            ]\n          },\n          {\n            \"type\": \"cloudtrace.googleapis.com/ChargedProject\",\n            \"displayName\": \"Cloud trace target\",\n            \"description\": \"A cloud trace specialization target schema of cloud.ChargedProject.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The monitored resource container. Could be project, workspace, etc.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The service-specific notion of location.\"\n              },\n              {\n                \"key\": \"api_service\",\n                \"description\": \"The name of the API service with which the data is associated (e.g.,'cloudtrace.googleapis.com').\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"cloudtrace.googleapis.com/CloudtraceProject\",\n            \"displayName\": \"Cloud Trace\",\n            \"description\": \"Cloud trace resource, e.g. project.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container associated with the resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location that the Cloud Trace service recording the metrics is running.\"\n              }\n            ],\n            \"launchStage\": \"EARLY_ACCESS\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"cloudtrace.googleapis.com/ChargedProject\",\n              \"metrics\": [\n                \"cloudtrace.googleapis.com/billing/ingested_spans\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"cloudtrace.googleapis.com/charged_project\",\n              \"metrics\": [\n                \"cloudtrace.googleapis.com/billing/retrieved_spans\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"cloudtrace.googleapis.com/CloudtraceProject\",\n              \"metrics\": [\n                \"cloudtrace.googleapis.com/internal/plugin_server_span_count\",\n                \"cloudtrace.googleapis.com/internal/reader_root_query_count\",\n                \"cloudtrace.googleapis.com/internal/reader_root_query_latencies\",\n                \"cloudtrace.googleapis.com/bigquery_export/exported_span_count\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340008\"\n    },\n    {\n      \"name\": \"projects/12340008/services/compute.googleapis.com\",\n      \"config\": {\n        \"name\": \"compute.googleapis.com\",\n        \"title\": \"Compute Engine API\",\n        \"documentation\": {\n          \"summary\": \"Creates and runs virtual machines on Google Cloud Platform.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"compute.googleapis.com/VpcNetwork\",\n            \"displayName\": \"VPC Network\",\n            \"description\": \"VPC Network.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the VPC Network.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the VPC Network, global always.\"\n              },\n              {\n                \"key\": \"network_id\",\n                \"description\": \"VPC Network resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Location\",\n            \"displayName\": \"Compute Location\",\n            \"description\": \"A location in the Compute API.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the Compute Location.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/instances_per_vpc_network\",\n                \"compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/ip_aliases_per_vpc_network\",\n                \"compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/instances_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/subnet_ranges_per_vpc_network\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/instances_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/instances_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/instances_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Location\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Location\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/usage\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340008\"\n    },\n    {\n      \"name\": \"projects/12340008/services/container.googleapis.com\",\n      \"config\": {\n        \"name\": \"container.googleapis.com\",\n        \"title\": \"Kubernetes Engine API\",\n        \"documentation\": {\n          \"summary\": \"Builds and manages container-based applications, powered by the open source Kubernetes technology.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340008\"\n    },\n    {\n      \"name\": \"projects/12340008/services/containerfilesystem.googleapis.com\",\n      \"config\": {\n        \"name\": \"containerfilesystem.googleapis.com\",\n        \"title\": \"Container File System API\",\n        \"documentation\": {},\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340008\"\n    },\n    {\n      \"name\": \"projects/12340008/services/containerregistry.googleapis.com\",\n      \"config\": {\n        \"name\": \"containerregistry.googleapis.com\",\n        \"title\": \"Container Registry API\",\n        \"documentation\": {\n          \"summary\": \"Google Container Registry provides secure, private Docker image storage on Google Cloud Platform.  Our API follows the Docker Registry API specification, so we are fully compatible with the Docker CLI client, as well as standard tooling using the Docker Registry API.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340008\"\n    },\n    {\n      \"name\": \"projects/12340008/services/deploymentmanager.googleapis.com\",\n      \"config\": {\n        \"name\": \"deploymentmanager.googleapis.com\",\n        \"title\": \"Cloud Deployment Manager V2 API\",\n        \"documentation\": {\n          \"summary\": \"The Google Cloud Deployment Manager v2 API provides services for configuring, deploying, and\\nviewing Google Cloud services and APIs via templates which specify deployments of Cloud\\nresources.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340008\"\n    },\n    {\n      \"name\": \"projects/12340008/services/iam.googleapis.com\",\n      \"config\": {\n        \"name\": \"iam.googleapis.com\",\n        \"title\": \"Identity and Access Management (IAM) API\",\n        \"documentation\": {\n          \"summary\": \"Manages identity and access control for Google Cloud Platform resources, including the creation of service accounts, which you can use to authenticate to Google and make API calls.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"iam_service_account\",\n            \"displayName\": \"IAM Service Account\",\n            \"description\": \"An IAM Service Account.\",\n            \"labels\": [\n              {\n                \"key\": \"project_id\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"unique_id\",\n                \"description\": \"The unique_id of the service account.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"iam.googleapis.com/WorkloadIdentityPoolProvider\",\n            \"displayName\": \"Workload Identity Pool Provider\",\n            \"description\": \"A workload identity pool provider.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location of the resource.\"\n              },\n              {\n                \"key\": \"pool_id\",\n                \"description\": \"The ID of the provider's workload identity pool parent resource.\"\n              },\n              {\n                \"key\": \"provider_id\",\n                \"description\": \"The ID of the workload identity pool provider resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"iam.googleapis.com/WorkloadIdentityPoolProvider\",\n              \"metrics\": [\n                \"iam.googleapis.com/workload_identity_federation/count\",\n                \"iam.googleapis.com/workload_identity_federation/key_usage_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"iam_service_account\",\n              \"metrics\": [\n                \"iam.googleapis.com/service_account/authn_events_count\",\n                \"iam.googleapis.com/service_account/key/authn_events_count\",\n                \"iam.googleapis.com/service_account/authn_events_count_preprod\",\n                \"iam.googleapis.com/service_account/key/authn_events_count_preprod\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340008\"\n    },\n    {\n      \"name\": \"projects/12340008/services/iamcredentials.googleapis.com\",\n      \"config\": {\n        \"name\": \"iamcredentials.googleapis.com\",\n        \"title\": \"IAM Service Account Credentials API\",\n        \"documentation\": {\n          \"summary\": \"Creates short-lived credentials for impersonating IAM service accounts. To enable this API, you must enable the IAM API (iam.googleapis.com).\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340008\"\n    },\n    {\n      \"name\": \"projects/12340008/services/logging.googleapis.com\",\n      \"config\": {\n        \"name\": \"logging.googleapis.com\",\n        \"title\": \"Cloud Logging API\",\n        \"documentation\": {\n          \"summary\": \"Writes log entries and manages your Cloud Logging configuration.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"logging.googleapis.com/ChargedProject\",\n            \"displayName\": \"Cloud logging target\",\n            \"description\": \"A cloud logging specialization target schema of cloud.ChargedProject.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The monitored resource container. Could be project, workspace, etc.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The service-specific notion of location.\"\n              },\n              {\n                \"key\": \"service\",\n                \"description\": \"The name of the API service with which the data is associated (e.g.,'logging.googleapis.com').\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"logging.googleapis.com/ChargedProject\",\n              \"metrics\": [\n                \"logging.googleapis.com/billing/ingested_bytes\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340008\"\n    },\n    {\n      \"name\": \"projects/12340008/services/monitoring.googleapis.com\",\n      \"config\": {\n        \"name\": \"monitoring.googleapis.com\",\n        \"title\": \"Cloud Monitoring API\",\n        \"documentation\": {\n          \"summary\": \"Manages your Cloud Monitoring data and configurations.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"monitoring.googleapis.com/ChargedProject\",\n            \"displayName\": \"Cloud monitoring target\",\n            \"description\": \"A cloud monitoring specialization target schema of cloud.ChargedProject.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The monitored resource container. Could be project, workspace, etc.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The service-specific notion of location.\"\n              },\n              {\n                \"key\": \"service\",\n                \"description\": \"The name of the API service with which the data is associated (e.g.,'monitoring.googleapis.com').\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"monitoring.googleapis.com/MetricStatistics\",\n            \"displayName\": \"Metric Statistics\",\n            \"description\": \"Information about a user-written metric in Cloud Monitoring.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project to which the metric is written, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The cloud region where the metric was received.\"\n              },\n              {\n                \"key\": \"metric_type\",\n                \"description\": \"The metric type.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"monitoring.googleapis.com/MetricIngestionAttribution\",\n            \"displayName\": \"Metric Ingestion Attribution\",\n            \"description\": \"Attribution for metric ingestion.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project to which the metric is written, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The cloud region where the metric was received.\"\n              },\n              {\n                \"key\": \"attribution_dimension\",\n                \"description\": \"The dimension used for attribution reporting. It is not recommended that aggregations are performed across dimensions because a single metric point can be recorded with multiple dimensions which could cause double counting. Currently only \\\"namespace\\\" and \\\"cluster\\\" are supported.\"\n              },\n              {\n                \"key\": \"attribution_id\",\n                \"description\": \"The attribution id of the source of the metric write.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"monitoring.googleapis.com/ChargedProject\",\n              \"metrics\": [\n                \"monitoring.googleapis.com/billing/bytes_ingested\",\n                \"monitoring.googleapis.com/billing/samples_ingested\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"monitoring.googleapis.com/MetricStatistics\",\n              \"metrics\": [\n                \"monitoring.googleapis.com/collection/write_request_count\",\n                \"monitoring.googleapis.com/collection/write_request_point_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"monitoring.googleapis.com/MetricIngestionAttribution\",\n              \"metrics\": [\n                \"monitoring.googleapis.com/collection/attribution/sample_count\",\n                \"monitoring.googleapis.com/collection/attribution/write_sample_count\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340008\"\n    },\n    {\n      \"name\": \"projects/12340008/services/oslogin.googleapis.com\",\n      \"config\": {\n        \"name\": \"oslogin.googleapis.com\",\n        \"title\": \"Cloud OS Login API\",\n        \"documentation\": {\n          \"summary\": \"You can use OS Login to manage access to your VM instances using IAM roles.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340008\"\n    },\n    {\n      \"name\": \"projects/12340008/services/pubsub.googleapis.com\",\n      \"config\": {\n        \"name\": \"pubsub.googleapis.com\",\n        \"title\": \"Cloud Pub/Sub API\",\n        \"documentation\": {\n          \"summary\": \"Provides reliable, many-to-many, asynchronous messaging between applications.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340008\"\n    },\n    {\n      \"name\": \"projects/12340008/services/storage-api.googleapis.com\",\n      \"config\": {\n        \"name\": \"storage-api.googleapis.com\",\n        \"title\": \"Google Cloud Storage JSON API\",\n        \"documentation\": {\n          \"summary\": \"Lets you store and retrieve potentially-large, immutable data objects.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340008\"\n    },\n    {\n      \"name\": \"projects/12340008/services/storage-component.googleapis.com\",\n      \"config\": {\n        \"name\": \"storage-component.googleapis.com\",\n        \"title\": \"Cloud Storage\",\n        \"documentation\": {\n          \"summary\": \"Google Cloud Storage is a RESTful service for storing and accessing your data on Google's\\n    infrastructure.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"serviceruntime.googleapis.com/api\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_version\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_method\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/consumer_project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/consumer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/producer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/consumer_resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/api\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/api/consumer/request_count\",\n                \"serviceruntime.googleapis.com/api/consumer/error_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_used_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_refund_count\",\n                \"serviceruntime.googleapis.com/api/consumer/total_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_overhead_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/backend_latencies\",\n                \"serviceruntime.googleapis.com/api/consumer/request_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/response_sizes\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country\",\n                \"serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer\",\n                \"serviceruntime.googleapis.com/quota/used\",\n                \"serviceruntime.googleapis.com/quota/limit\",\n                \"serviceruntime.googleapis.com/quota/exceeded\",\n                \"serviceruntime.googleapis.com/allocation/consumer/quota_used_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/consumer_quota\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/quota/rate/consumer/used_count\",\n                \"serviceruntime.googleapis.com/quota/rate/consumer/refund_count\",\n                \"serviceruntime.googleapis.com/quota/allocation/consumer/usage\",\n                \"serviceruntime.googleapis.com/quota/consumer/limit\",\n                \"serviceruntime.googleapis.com/quota/consumer/exceeded\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340008\"\n    },\n    {\n      \"name\": \"projects/12340008/services/tpu.googleapis.com\",\n      \"config\": {\n        \"name\": \"tpu.googleapis.com\",\n        \"title\": \"Cloud TPU API\",\n        \"documentation\": {\n          \"summary\": \"TPU API provides customers with access to Google TPU technology.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/universal\",\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"saas_instance\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"saasaccelerator.googleapis.com/service_name\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"saasaccelerator.googleapis.com/consumer_project\"\n              },\n              {\n                \"key\": \"saasaccelerator.googleapis.com/consumer_project_number\"\n              },\n              {\n                \"key\": \"saasaccelerator.googleapis.com/instance_id\"\n              },\n              {\n                \"key\": \"saasaccelerator.googleapis.com/resource_number\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              }\n            ]\n          },\n          {\n            \"type\": \"saas_instance_node\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"saasaccelerator.googleapis.com/service_name\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"saasaccelerator.googleapis.com/consumer_project\"\n              },\n              {\n                \"key\": \"saasaccelerator.googleapis.com/consumer_project_number\"\n              },\n              {\n                \"key\": \"saasaccelerator.googleapis.com/instance_id\"\n              },\n              {\n                \"key\": \"saasaccelerator.googleapis.com/resource_number\"\n              },\n              {\n                \"key\": \"saasaccelerator.googleapis.com/node_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/api\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_version\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/api_method\"\n              },\n              {\n                \"key\": \"serviceruntime.googleapis.com/consumer_project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/project\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/consumer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          },\n          {\n            \"type\": \"serviceruntime.googleapis.com/producer_quota\",\n            \"labels\": [\n              {\n                \"key\": \"cloud.googleapis.com/location\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/uid\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/service\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_id\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/consumer_resource_node\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_metric\"\n              },\n              {\n                \"key\": \"cloud.googleapis.com/quota_location\"\n              }\n            ]\n          },\n          {\n            \"type\": \"tpu.googleapis.com/TpuWorker\",\n            \"displayName\": \"TPU Worker\",\n            \"description\": \"A TPU Worker executing Tensorflow work for a TPU Node.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"zone\",\n                \"description\": \"The Google Cloud zone in which the TPU Worker is running.\"\n              },\n              {\n                \"key\": \"node_id\",\n                \"description\": \"The ID of the TPU Node.\"\n              },\n              {\n                \"key\": \"worker_id\",\n                \"description\": \"The ID of a TPU Worker within the TPU Node.\"\n              },\n              {\n                \"key\": \"tf_version\",\n                \"description\": \"Which tf version this node is using.\"\n              },\n              {\n                \"key\": \"preemptible\",\n                \"description\": \"Whether the node is preemptible.\"\n              },\n              {\n                \"key\": \"source\",\n                \"description\": \"Source of the node - tpu, gke, etc...\"\n              },\n              {\n                \"key\": \"internal\",\n                \"description\": \"Whether the node is internal or external.\"\n              },\n              {\n                \"key\": \"accelerator_type\",\n                \"description\": \"Accelerator type of the tpu this worker belongs to.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"tpu.googleapis.com/TpuWorker\",\n              \"metrics\": [\n                \"tpu.googleapis.com/cpu/utilization\",\n                \"tpu.googleapis.com/cpu/utilization/mean\",\n                \"tpu.googleapis.com/cpu/utilization/range\",\n                \"tpu.googleapis.com/cpu/utilization/standard_deviation\",\n                \"tpu.googleapis.com/network/received_bytes_count\",\n                \"tpu.googleapis.com/network/sent_bytes_count\",\n                \"tpu.googleapis.com/memory/usage\",\n                \"tpu.googleapis.com/memory/total\",\n                \"tpu.googleapis.com/systemd/restart_count\",\n                \"tpu.googleapis.com/container/state\",\n                \"tpu.googleapis.com/container/image\",\n                \"tpu.googleapis.com/container/uptime\",\n                \"tpu.googleapis.com/container/cpu/utilization\",\n                \"tpu.googleapis.com/container/memory/usage\",\n                \"tpu.googleapis.com/tpu/mxu/utilization\",\n                \"tpu.googleapis.com/tfserver/sessions/created_count\",\n                \"tpu.googleapis.com/tfserver/sessions/active\",\n                \"tpu.googleapis.com/tfserver/health\",\n                \"tpu.googleapis.com/tfserver/gcs/block_request_count\",\n                \"tpu.googleapis.com/tfserver/gcs/block_retrieved_bytes_count\",\n                \"tpu.googleapis.com/tfserver/gcs/stat_object_request_count\",\n                \"tpu.googleapis.com/tfserver/gcs/dataset_file_count\",\n                \"tpu.googleapis.com/tfserver/gcs/estimated_dataset_size\",\n                \"tpu.googleapis.com/tfserver/gcs/http_request_count\",\n                \"tpu.googleapis.com/tfserver/gcs/http_response_count\",\n                \"tpu.googleapis.com/tfserver/gcs/throttle_tokens\",\n                \"tpu.googleapis.com/tfserver/gcs/throttle_enabled\",\n                \"tpu.googleapis.com/tfserver/gcs/block_cache_size\",\n                \"tpu.googleapis.com/tfserver/gcs/distrib_block_cache_hit_bytes\",\n                \"tpu.googleapis.com/tfserver/gcs/distrib_block_cache_miss_bytes\",\n                \"tpu.googleapis.com/tfserver/gcs/non_distrib_block_cache_hit_bytes\",\n                \"tpu.googleapis.com/tfserver/gcs/non_distrib_block_cache_miss_bytes\",\n                \"tpu.googleapis.com/tfserver/profiler/profile_count\",\n                \"tpu.googleapis.com/billing/external\",\n                \"tpu.googleapis.com/mode/inference\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/api\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/api/consumer/quota_used_count\",\n                \"serviceruntime.googleapis.com/api/consumer/quota_refund_count\",\n                \"serviceruntime.googleapis.com/quota/used\",\n                \"serviceruntime.googleapis.com/quota/limit\",\n                \"serviceruntime.googleapis.com/quota/exceeded\",\n                \"serviceruntime.googleapis.com/allocation/consumer/quota_used_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"serviceruntime.googleapis.com/consumer_quota\",\n              \"metrics\": [\n                \"serviceruntime.googleapis.com/quota/rate/consumer/used_count\",\n                \"serviceruntime.googleapis.com/quota/rate/consumer/refund_count\",\n                \"serviceruntime.googleapis.com/quota/allocation/consumer/usage\",\n                \"serviceruntime.googleapis.com/quota/consumer/limit\",\n                \"serviceruntime.googleapis.com/quota/consumer/exceeded\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340008\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/tpu1/project.tf",
    "content": "resource \"random_string\" \"project_id\" {\n  length  = 8\n  number  = true\n  lower   = true\n  upper   = false\n  special = false\n}\n\nresource \"google_project\" \"project\" {\n  name            = \"gcpdiag test - tpu1\"\n  project_id      = \"gcpdiag-tpu1-${random_string.project_id.id}\"\n  org_id          = var.folder_id == \"\" ? var.org_id : null\n  folder_id       = var.folder_id != \"\" ? var.folder_id : null\n  billing_account = var.billing_account_id\n}\n\nresource \"google_project_service\" \"tpu\" {\n  project = google_project.project.project_id\n  service = \"tpu.googleapis.com\"\n}\n\nresource \"google_project_service\" \"logging\" {\n  project = google_project.project.project_id\n  service = \"logging.googleapis.com\"\n}\n\noutput \"project_id\" {\n  value = google_project.project.project_id\n}\n\noutput \"project_id_suffix\" {\n  value = random_string.project_id.id\n}\n\noutput \"project_nr\" {\n  value = google_project.project.number\n}\n\noutput \"org_id\" {\n  value = var.org_id\n}\n"
  },
  {
    "path": "test-data/tpu1/variables.tf",
    "content": "variable \"billing_account_id\" {}\n\nvariable \"org_id\" {}\nvariable \"folder_id\" { default = \"\" }\n"
  },
  {
    "path": "test-data/vertex1/Makefile",
    "content": "PROJECT_ID := $(shell terraform output project_id | sed -e 's|\"||g')\nPROJECT_ID_SUFFIX := $(shell terraform output -json project_id_suffix)\nPROJECT_NR  := $(shell terraform output -json project_nr)\nORG_ID      := $(shell terraform output -json org_id)\nCURL         = ../../bin/curl-wrap.sh\nJSON_CLEANER = ../../bin/json-cleaner\nLOCATION     = us-west1\n\nFAKE_PROJECT_ID_SUFFIX = aaaa\nFAKE_PROJECT_NR = 12340015\nFAKE_ORG_ID = 11112222\nSED_SUBST_FAKE = sed -e \"s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/\" \\\n\t\t     -e \"s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/\" \\\n\t\t     -e \"s/$(ORG_ID)/$(FAKE_ORG_ID)/\" \\\n\nall:\t\\\n\tjson-dumps/project.json \\\n\tjson-dumps/services.json \\\n\tjson-dumps/featurestores.json \\\n\njson-dumps/project.json:\n\t$(CURL) -fsS \\\n\t\t'https://cloudresourcemanager.googleapis.com/v3/projects/$(PROJECT_ID)' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/services.json:\n\t$(CURL) -fv \\\n\t'https://serviceusage.googleapis.com/v1/projects/$(PROJECT_ID)/services?filter=state:ENABLED' \\\n\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/featurestores.json:\n\t$(CURL) -fv \\\n\t\t'https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/featurestores' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n"
  },
  {
    "path": "test-data/vertex1/json-dumps/featurestores.json",
    "content": "{\n  \"featurestores\": [\n    {\n      \"name\": \"projects/12340015/locations/us-west1/featurestores/gcpdiag_vertex1featurestore_aaaa\",\n      \"createTime\": \"2023-08-18T08:57:10.529141Z\",\n      \"updateTime\": \"2023-08-18T08:57:10.634433Z\",\n      \"etag\": \"AMEw9yNUiHRCssGYdRqY4e5lYEMsU5Pw4pd_Lli5B3sjnhpSKQ-dY_X56aEECOhyP_UJ\",\n      \"onlineServingConfig\": {},\n      \"state\": \"STABLE\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/vertex1/json-dumps/project.json",
    "content": "{\n  \"name\": \"projects/12340015\",\n  \"parent\": \"folders/373737373737\",\n  \"projectId\": \"gcpdiag-vertex1-aaaa\",\n  \"state\": \"ACTIVE\",\n  \"displayName\": \"gcpdiag test - vertex1\",\n  \"createTime\": \"2023-08-18T08:45:07.448788Z\",\n  \"updateTime\": \"2023-08-18T08:45:07.448788Z\",\n  \"etag\": \"W/\\\"f67f3aafb1347923\\\"\",\n  \"labels\": {\n    \"gcpdiag\": \"test\"\n  }\n}\n"
  },
  {
    "path": "test-data/vertex1/json-dumps/services.json",
    "content": "{\n  \"services\": [\n    {\n      \"name\": \"projects/12340015/services/aiplatform.googleapis.com\",\n      \"config\": {\n        \"name\": \"aiplatform.googleapis.com\",\n        \"title\": \"Vertex AI API\",\n        \"documentation\": {\n          \"summary\": \"Train high-quality custom machine learning models with minimal machine learning expertise and effort.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"aiplatform.googleapis.com/DeploymentResourcePool\",\n            \"displayName\": \"Vertex AI Deployment Resource Pool\",\n            \"description\": \"A Vertex AI Deployment Resource Pool.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP Project owning the Deployment Resource Pool.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The region in which the service is running.\"\n              },\n              {\n                \"key\": \"deployment_resource_pool_id\",\n                \"description\": \"The ID of the Deployment Resource Pool.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"aiplatform.googleapis.com/Endpoint\",\n            \"displayName\": \"Vertex AI Endpoint\",\n            \"description\": \"A Vertex AI API Endpoint where Models are deployed into it.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP Project owning the Endpoint.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The region in which the service is running.\"\n              },\n              {\n                \"key\": \"endpoint_id\",\n                \"description\": \"The ID of the Endpoint.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"aiplatform.googleapis.com/Featurestore\",\n            \"displayName\": \"Vertex AI Feature Store\",\n            \"description\": \"A Vertex AI Feature Store.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP Project owning the Featurestore.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The region in which the service is running.\"\n              },\n              {\n                \"key\": \"featurestore_id\",\n                \"description\": \"The ID of the Featurestore.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"aiplatform.googleapis.com/FeatureOnlineStore\",\n            \"displayName\": \"Vertex AI Feature Online Store\",\n            \"description\": \"A Vertex AI Feature Online Store.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP Project owning the FeatureOnlineStore.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The region in which the service is running.\"\n              },\n              {\n                \"key\": \"feature_online_store_id\",\n                \"description\": \"The ID of the Feature Online Store.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"aiplatform.googleapis.com/Index\",\n            \"displayName\": \"Matching Engine Index\",\n            \"description\": \"An Index built through the cloud Matching Engine service.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP Project owning the Index.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The region in which the service is running.\"\n              },\n              {\n                \"key\": \"index_id\",\n                \"description\": \"The ID of the Index.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"aiplatform.googleapis.com/IndexEndpoint\",\n            \"displayName\": \"Matching Engine Index Endpoint\",\n            \"description\": \"An Endpoint to which Matching Engine Indexes are deployed.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP Project owning the Index.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The region in which the service is running.\"\n              },\n              {\n                \"key\": \"index_endpoint_id\",\n                \"description\": \"The ID of the index endpoint.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"aiplatform.googleapis.com/PipelineJob\",\n            \"displayName\": \"Vertex Pipelines Job\",\n            \"description\": \"A Vertex Pipelines Job.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as \\\"my-project\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The region in which the service is running.\"\n              },\n              {\n                \"key\": \"pipeline_job_id\",\n                \"description\": \"The ID of the PipelineJob.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"aiplatform.googleapis.com/Location\",\n            \"displayName\": \"Location\",\n            \"description\": \"A Google Cloud Project and region where a job is running.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as \\\"my-project\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The region in which the service is running.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"aiplatform.googleapis.com/Model\",\n            \"displayName\": \"Vertex AI Model\",\n            \"description\": \"A Vertex AI Model.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP Project owning the Model.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The region in which the service is running.\"\n              },\n              {\n                \"key\": \"model\",\n                \"description\": \"The identifier of the Model.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"aiplatform.googleapis.com/Endpoint\",\n              \"metrics\": [\n                \"aiplatform.googleapis.com/prediction/internal/online/cmle_backend_latencies\",\n                \"aiplatform.googleapis.com/prediction/internal/online/component_latencies\",\n                \"aiplatform.googleapis.com/prediction/internal/online/core_infra_latencies\",\n                \"aiplatform.googleapis.com/prediction/internal/online/custom/istio_request_duration_milliseconds\",\n                \"aiplatform.googleapis.com/prediction/internal/online/custom/istio_requests_total\",\n                \"aiplatform.googleapis.com/prediction/internal/online/custom/tfe_ie/tf_exit_total\",\n                \"aiplatform.googleapis.com/prediction/internal/online/custom/tfe_ie/tf_launch_total\",\n                \"aiplatform.googleapis.com/prediction/internal/online/custom/dynamic_loading/model_load_latencies\",\n                \"aiplatform.googleapis.com/prediction/internal/online/custom/dynamic_loading/model_load_count\",\n                \"aiplatform.googleapis.com/prediction/internal/online/custom/dynamic_loading/model_cache_lookup_count\",\n                \"aiplatform.googleapis.com/prediction/internal/online/custom/dynamic_loading/model_states\",\n                \"aiplatform.googleapis.com/prediction/internal/online/directpath_backend_latencies\",\n                \"aiplatform.googleapis.com/prediction/internal/online/harpoon_backend_latencies\",\n                \"aiplatform.googleapis.com/prediction/internal/online/internal_error_count\",\n                \"aiplatform.googleapis.com/prediction/internal/online/prediction_latencies\",\n                \"aiplatform.googleapis.com/prediction/internal/online/request_byte_count\",\n                \"aiplatform.googleapis.com/prediction/internal/online/response_count\",\n                \"aiplatform.googleapis.com/prediction/online/streaming_message_overhead_latencies\",\n                \"aiplatform.googleapis.com/prediction/online/streaming_message_count\",\n                \"aiplatform.googleapis.com/prediction/online/streaming_message_bytes_count\",\n                \"aiplatform.googleapis.com/prediction/online/open_streams\",\n                \"aiplatform.googleapis.com/prediction/online/error_count\",\n                \"aiplatform.googleapis.com/prediction/online/prediction_count\",\n                \"aiplatform.googleapis.com/prediction/online/prediction_latencies\",\n                \"aiplatform.googleapis.com/prediction/online/response_count\",\n                \"aiplatform.googleapis.com/prediction/online/replicas\",\n                \"aiplatform.googleapis.com/prediction/online/target_replicas\",\n                \"aiplatform.googleapis.com/prediction/internal/online/cpu/utilization\",\n                \"aiplatform.googleapis.com/prediction/internal/online/memory/bytes_used\",\n                \"aiplatform.googleapis.com/prediction/internal/online/accelerator/duty_cycle\",\n                \"aiplatform.googleapis.com/prediction/internal/online/accelerator/memory/bytes_used\",\n                \"aiplatform.googleapis.com/prediction/internal/online/network/received_bytes_count\",\n                \"aiplatform.googleapis.com/prediction/internal/online/network/sent_bytes_count\",\n                \"aiplatform.googleapis.com/prediction/internal/online/llm_backend_latencies\",\n                \"aiplatform.googleapis.com/prediction/internal/online/concurrent_requests\",\n                \"aiplatform.googleapis.com/prediction/internal/online/throttled_request_count\",\n                \"aiplatform.googleapis.com/prediction/internal/online/resource_usage_error_count\",\n                \"aiplatform.googleapis.com/prediction/internal/online/l2_operator_reconcile_latencies\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"aiplatform.googleapis.com/DeploymentResourcePool\",\n              \"metrics\": [\n                \"aiplatform.googleapis.com/prediction/online/deployment_resource_pool/replicas\",\n                \"aiplatform.googleapis.com/prediction/online/deployment_resource_pool/target_replicas\",\n                \"aiplatform.googleapis.com/prediction/online/deployment_resource_pool/cpu/utilization\",\n                \"aiplatform.googleapis.com/prediction/online/deployment_resource_pool/memory/bytes_used\",\n                \"aiplatform.googleapis.com/prediction/online/deployment_resource_pool/accelerator/duty_cycle\",\n                \"aiplatform.googleapis.com/prediction/online/deployment_resource_pool/accelerator/memory/bytes_used\",\n                \"aiplatform.googleapis.com/prediction/online/deployment_resource_pool/network/received_bytes_count\",\n                \"aiplatform.googleapis.com/prediction/online/deployment_resource_pool/network/sent_bytes_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"aiplatform.googleapis.com/IndexEndpoint\",\n              \"metrics\": [\n                \"aiplatform.googleapis.com/scann/query/request_count\",\n                \"aiplatform.googleapis.com/scann/query/latencies\",\n                \"aiplatform.googleapis.com/scann/internal/query/latency_bucketized\",\n                \"aiplatform.googleapis.com/matching_engine/query/request_count\",\n                \"aiplatform.googleapis.com/matching_engine/query/query_count\",\n                \"aiplatform.googleapis.com/matching_engine/query/request_count_v2\",\n                \"aiplatform.googleapis.com/matching_engine/internal/query/request_count\",\n                \"aiplatform.googleapis.com/matching_engine/query/latencies\",\n                \"aiplatform.googleapis.com/matching_engine/query/query_latencies\",\n                \"aiplatform.googleapis.com/matching_engine/internal/query/latency_bucketized\",\n                \"aiplatform.googleapis.com/matching_engine/internal/query/match_server_request_count\",\n                \"aiplatform.googleapis.com/matching_engine/internal/query/match_server_latencies\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"aiplatform.googleapis.com/IndexEndpoint\",\n              \"metrics\": [\n                \"aiplatform.googleapis.com/scann/current_shards\",\n                \"aiplatform.googleapis.com/scann/current_replicas\",\n                \"aiplatform.googleapis.com/matching_engine/current_shards\",\n                \"aiplatform.googleapis.com/matching_engine/current_replicas\",\n                \"aiplatform.googleapis.com/matching_engine/internal/current_replicas\",\n                \"aiplatform.googleapis.com/matching_engine/cpu/request_cores\",\n                \"aiplatform.googleapis.com/matching_engine/cpu/request_utilization\",\n                \"aiplatform.googleapis.com/matching_engine/memory/used_bytes\",\n                \"aiplatform.googleapis.com/matching_engine/memory/request_bytes\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"aiplatform.googleapis.com/Index\",\n              \"metrics\": [\n                \"aiplatform.googleapis.com/matching_engine/stream_update/datapoint_count\",\n                \"aiplatform.googleapis.com/matching_engine/stream_update/latency\",\n                \"aiplatform.googleapis.com/matching_engine/stream_update/latencies\",\n                \"aiplatform.googleapis.com/matching_engine/internal/stream_update/catchup_latency\",\n                \"aiplatform.googleapis.com/matching_engine/stream_update/request_count\",\n                \"aiplatform.googleapis.com/matching_engine/index/size\",\n                \"aiplatform.googleapis.com/matching_engine/index/embeddings\",\n                \"aiplatform.googleapis.com/matching_engine/index/last_batch_update_time\",\n                \"aiplatform.googleapis.com/matching_engine/index/last_compaction_time\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"aiplatform.googleapis.com/Featurestore\",\n              \"metrics\": [\n                \"aiplatform.googleapis.com/featurestore/online_entities_updated\",\n                \"aiplatform.googleapis.com/featurestore/online_serving/request_count\",\n                \"aiplatform.googleapis.com/featurestore/online_serving/latencies\",\n                \"aiplatform.googleapis.com/featurestore/online_serving/response_size\",\n                \"aiplatform.googleapis.com/featurestore/online_serving/request_bytes_count\",\n                \"aiplatform.googleapis.com/featurestore/streaming_write/offline_processed_count\",\n                \"aiplatform.googleapis.com/featurestore/streaming_write/offline_write_delays\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"aiplatform.googleapis.com/Featurestore\",\n              \"metrics\": [\n                \"aiplatform.googleapis.com/featurestore/storage/stored_bytes\",\n                \"aiplatform.googleapis.com/featurestore/storage/billable_processed_bytes\",\n                \"aiplatform.googleapis.com/featurestore/node_count\",\n                \"aiplatform.googleapis.com/featurestore/cpu_load\",\n                \"aiplatform.googleapis.com/featurestore/cpu_load_hottest_node\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"aiplatform.googleapis.com/FeatureOnlineStore\",\n              \"metrics\": [\n                \"aiplatform.googleapis.com/FeatureOnlineStore/online_serving/request_count\",\n                \"aiplatform.googleapis.com/FeatureOnlineStore/online_serving/serving_bytes_count\",\n                \"aiplatform.googleapis.com/FeatureOnlineStore/online_serving/serving_latencies\",\n                \"aiplatform.googleapis.com/FeatureOnlineStore/serving_data_ages\",\n                \"aiplatform.googleapis.com/FeatureOnlineStore/serving_data_by_sync_time\",\n                \"aiplatform.googleapis.com/featureonlinestore/online_serving/request_count\",\n                \"aiplatform.googleapis.com/featureonlinestore/online_serving/serving_bytes_count\",\n                \"aiplatform.googleapis.com/featureonlinestore/online_serving/serving_latencies\",\n                \"aiplatform.googleapis.com/featureonlinestore/serving_data_ages\",\n                \"aiplatform.googleapis.com/featureonlinestore/serving_data_by_sync_time\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"aiplatform.googleapis.com/FeatureOnlineStore\",\n              \"metrics\": [\n                \"aiplatform.googleapis.com/FeatureOnlineStore/storage/stored_bytes\",\n                \"aiplatform.googleapis.com/FeatureOnlineStore/storage/bigtable_cpu_load\",\n                \"aiplatform.googleapis.com/FeatureOnlineStore/storage/bigtable_cpu_load_hottest_node\",\n                \"aiplatform.googleapis.com/FeatureOnlineStore/storage/bigtable_nodes\",\n                \"aiplatform.googleapis.com/FeatureOnlineStore/running_sync\",\n                \"aiplatform.googleapis.com/featureonlinestore/storage/stored_bytes\",\n                \"aiplatform.googleapis.com/featureonlinestore/storage/bigtable_cpu_load\",\n                \"aiplatform.googleapis.com/featureonlinestore/storage/bigtable_cpu_load_hottest_node\",\n                \"aiplatform.googleapis.com/featureonlinestore/storage/bigtable_nodes\",\n                \"aiplatform.googleapis.com/featureonlinestore/running_sync\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"aiplatform.googleapis.com/Location\",\n              \"metrics\": [\n                \"aiplatform.googleapis.com/executing_vertexai_pipeline_jobs\",\n                \"aiplatform.googleapis.com/executing_vertexai_pipeline_tasks\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"aiplatform.googleapis.com/Location\",\n              \"metrics\": [\n                \"aiplatform.googleapis.com/online_prediction_requests_per_base_model\",\n                \"aiplatform.googleapis.com/quota/online_prediction_output_tokens_per_minute_per_base_model/exceeded\",\n                \"aiplatform.googleapis.com/quota/online_prediction_output_tokens_per_minute_per_base_model/usage\",\n                \"aiplatform.googleapis.com/quota/online_prediction_requests_per_base_model/exceeded\",\n                \"aiplatform.googleapis.com/quota/online_prediction_requests_per_base_model/usage\",\n                \"aiplatform.googleapis.com/quota/online_prediction_requests_per_user_per_base_model/exceeded\",\n                \"aiplatform.googleapis.com/quota/online_prediction_requests_per_user_per_base_model/usage\",\n                \"aiplatform.googleapis.com/quota/shared_online_prediction_requests_per_base_model/exceeded\",\n                \"aiplatform.googleapis.com/quota/shared_online_prediction_requests_per_base_model/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"aiplatform.googleapis.com/Model\",\n              \"metrics\": [\n                \"aiplatform.googleapis.com/ml_monitoring/feature_skew_deviation\",\n                \"aiplatform.googleapis.com/ml_monitoring/feature_drift_deviation\",\n                \"aiplatform.googleapis.com/ml_monitoring/feature_attribution_skew_deviation\",\n                \"aiplatform.googleapis.com/ml_monitoring/feature_attribution_drift_deviation\",\n                \"aiplatform.googleapis.com/model_monitoring/feature_skew_deviation\",\n                \"aiplatform.googleapis.com/model_monitoring/feature_drift_deviation\",\n                \"aiplatform.googleapis.com/model_monitoring/feature_attribution_skew_deviation\",\n                \"aiplatform.googleapis.com/model_monitoring/feature_attribution_drift_deviation\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"aiplatform.googleapis.com/PipelineJob\",\n              \"metrics\": [\n                \"aiplatform.googleapis.com/pipelinejob/duration\",\n                \"aiplatform.googleapis.com/pipelinejob/completed_tasks\",\n                \"aiplatform.googleapis.com/pipelinejob/task_completed_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"aiplatform.googleapis.com/Location\",\n              \"metrics\": [\n                \"aiplatform.googleapis.com/quota/online_prediction_output_tokens_per_minute_per_base_model/limit\",\n                \"aiplatform.googleapis.com/quota/online_prediction_requests_per_base_model/limit\",\n                \"aiplatform.googleapis.com/quota/online_prediction_requests_per_user_per_base_model/limit\",\n                \"aiplatform.googleapis.com/quota/shared_online_prediction_requests_per_base_model/limit\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340015\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/vertex1/project.tf",
    "content": "/**\n * Copyright 2023 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nterraform {\n  required_providers {\n    google = {\n      source  = \"hashicorp/google\"\n      version = \"= 3.46.0\"\n    }\n    google-beta = {\n      source  = \"hashicorp/google-beta\"\n      version = \">= 3.46.0\"\n    }\n  }\n}\n\nresource \"random_string\" \"project_id_suffix\" {\n  length  = 8\n  number  = true\n  lower   = true\n  upper   = false\n  special = false\n}\n\nresource \"google_project\" \"project\" {\n  name            = \"gcpdiag test - vertex1\"\n  project_id      = \"gcpdiag-vertex1-${random_string.project_id_suffix.id}\"\n  org_id          = var.folder_id == \"\" ? var.org_id : null\n  folder_id       = var.folder_id != \"\" ? var.folder_id : null\n  billing_account = var.billing_account_id\n  labels = {\n    gcpdiag : \"test\"\n  }\n}\n\nresource \"google_project_service\" \"vertex\" {\n  project = google_project.project.project_id\n  service = \"aiplatform.googleapis.com\"\n}\n\noutput \"project_id\" {\n  value = google_project.project.project_id\n}\n\noutput \"project_id_suffix\" {\n  value = random_string.project_id_suffix.id\n}\n\noutput \"project_nr\" {\n  value = google_project.project.number\n}\n\noutput \"org_id\" {\n  value = var.org_id\n}\n"
  },
  {
    "path": "test-data/vertex1/variables.tf",
    "content": "variable \"billing_account_id\" {}\n\nvariable \"org_id\" {}\nvariable \"folder_id\" { default = \"\" }\n"
  },
  {
    "path": "test-data/vertex1/vertex1.tf",
    "content": "/**\n * Copyright 2023 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n# https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/vertex_ai_featurestore\nresource \"google_vertex_ai_featurestore\" \"vertex1featurestore\" {\n  project  = google_project.project.project_id\n  name     = \"gcpdiag_vertex1featurestore_aaaa\"\n  provider = google-beta\n  region   = \"us-west1\"\n}\n"
  },
  {
    "path": "test-data/vpc1/Makefile",
    "content": "PROJECT_ID  := $(shell terraform output -raw project_id)\nPROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix)\nPROJECT_NR  := $(shell terraform output -raw project_nr)\nORG_ID      := $(shell terraform output -raw org_id)\nCURL         = ../../bin/curl-wrap.sh\nJSON_CLEANER = ../../bin/json-cleaner\n\nFAKE_PROJECT_ID_SUFFIX = aaaa\nFAKE_PROJECT_NR = 12340009\nFAKE_ORG_ID = 11112222\nSED_SUBST_FAKE = sed -e \"s/$(PROJECT_ID_SUFFIX)/$(FAKE_PROJECT_ID_SUFFIX)/\" \\\n\t\t\t\t-e \"s/$(PROJECT_NR)/$(FAKE_PROJECT_NR)/\" \\\n\t\t\t\t-e \"s/$(ORG_ID)/$(FAKE_ORG_ID)/\" \\\n\nall:\t\\\n\tjson-dumps/project.json \\\n\tjson-dumps/services.json \\\n\tjson-dumps/compute-network-default.json \\\n\tjson-dumps/compute-project.json \\\n\tjson-dumps/monitoring-query.json \\\n\tjson-dumps/compute-regions.json \\\n\ninclude ../Makefile.inc\n\ndefine MONITORING_QUERY\n{ \\\n  \"query\": \"fetch gce_instance::compute.googleapis.com/instance/uptime_total \\\n  | within 10m \\\n  | group_by [resource.zone, metric.instance_name] \\\n  | group_by 5m, [.mean, .count] \\\n  \" \\\n}\nendef\njson-dumps/monitoring-query.json:\n\t$(CURL) -fsS \\\n\t\t'https://monitoring.googleapis.com/v3/projects/$(PROJECT_ID)/timeSeries:query' \\\n\t\t--header \"Content-Type: application/json\" -X POST \\\n\t\t--data '$(MONITORING_QUERY)' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n"
  },
  {
    "path": "test-data/vpc1/json-dumps/compute-addresses.json",
    "content": "{\n  \"kind\": \"compute#addressAggregatedList\",\n  \"id\": \"projects/gcpdiag-vpc1-aaaa/aggregated/addresses\",\n  \"items\": {\n    \"regions/us-central1\": {\n      \"addresses\": [\n        {\n          \"kind\": \"compute#address\",\n          \"id\": \"7997470120382759841\",\n          \"creationTimestamp\": \"2024-01-07T07:03:42.222-08:00\",\n          \"name\": \"address1\",\n          \"description\": \"\",\n          \"address\": \"10.128.0.26\",\n          \"status\": \"IN_USE\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-central1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-central1/addresses/address1\",\n          \"users\": [\n            \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-central1/forwardingRules/gk3-us-central1-composer-test-7ff47cd0-g-c4d8afc4-8j765f778-pe\"\n          ],\n          \"networkTier\": \"PREMIUM\",\n          \"labelFingerprint\": \"42WmS008rSM=\",\n          \"addressType\": \"INTERNAL\",\n          \"purpose\": \"GCE_ENDPOINT\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-central1/subnetworks/default\"\n        },\n        {\n          \"kind\": \"compute#address\",\n          \"id\": \"5823057272250092066\",\n          \"creationTimestamp\": \"2024-01-03T06:53:01.418-08:00\",\n          \"name\": \"address2\",\n          \"description\": \"\",\n          \"address\": \"192.168.0.18\",\n          \"status\": \"RESERVED\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-central1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-central1/addresses/address2\",\n          \"networkTier\": \"PREMIUM\",\n          \"labelFingerprint\": \"42WmS008rSM=\",\n          \"addressType\": \"INTERNAL\",\n          \"purpose\": \"GCE_ENDPOINT\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-central1/subnetworks/subnet-us1\"\n        },\n        {\n          \"kind\": \"compute#address\",\n          \"id\": \"2295464241063840289\",\n          \"creationTimestamp\": \"2024-01-03T06:53:02.536-08:00\",\n          \"name\": \"address3\",\n          \"description\": \"\",\n          \"address\": \"192.168.0.26\",\n          \"status\": \"RESERVED\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-central1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-central1/addresses/address3\",\n          \"networkTier\": \"PREMIUM\",\n          \"labelFingerprint\": \"42WmS008rSM=\",\n          \"addressType\": \"INTERNAL\",\n          \"purpose\": \"GCE_ENDPOINT\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-central1/subnetworks/subnet-us1\"\n        }\n      ]\n    },\n    \"regions/asia-east1\": {\n      \"addresses\": [\n        {\n          \"kind\": \"compute#address\",\n          \"id\": \"5969362064718299255\",\n          \"creationTimestamp\": \"2024-01-05T00:32:24.377-08:00\",\n          \"name\": \"address4\",\n          \"description\": \"\",\n          \"address\": \"10.0.3.3\",\n          \"status\": \"RESERVED\",\n          \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/asia-east1\",\n          \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/asia-east1/addresses/address4\",\n          \"networkTier\": \"PREMIUM\",\n          \"labelFingerprint\": \"42WmS008rSM=\",\n          \"ipVersion\": \"IPV4\",\n          \"addressType\": \"INTERNAL\",\n          \"purpose\": \"GCE_ENDPOINT\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/asia-east1/subnetworks/sub-2\"\n        }\n      ]\n    }\n  },\n    \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/aggregated/addresses\"\n}\n"
  },
  {
    "path": "test-data/vpc1/json-dumps/compute-network-default.json",
    "content": "{\n  \"kind\": \"compute#network\",\n  \"id\": \"8281558288356801985\",\n  \"creationTimestamp\": \"2022-06-07T05:23:10.477-07:00\",\n  \"name\": \"default\",\n  \"description\": \"Default network for the project\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/global/networks/default\",\n  \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/global/networks/8281558288356801985\",\n  \"autoCreateSubnetworks\": true,\n  \"subnetworks\": [\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-east4/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/asia-northeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/europe-central2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/southamerica-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/europe-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/northamerica-northeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/australia-southeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/asia-east1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-east7/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/asia-northeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/europe-west8/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/europe-west2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/asia-southeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/europe-west6/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/europe-west9/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/asia-south2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-west2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-east1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/europe-west4/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-central1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/europe-west3/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/southamerica-east1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/asia-southeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/northamerica-northeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/asia-northeast3/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/asia-east2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-west3/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-west4/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/europe-north1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/asia-south1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/australia-southeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-south1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-east5/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/europe-southwest1/subnetworks/default\"\n  ],\n  \"routingConfig\": {\n    \"routingMode\": \"REGIONAL\"\n  },\n  \"networkFirewallPolicyEnforcementOrder\": \"AFTER_CLASSIC_FIREWALL\"\n}\n"
  },
  {
    "path": "test-data/vpc1/json-dumps/compute-project.json",
    "content": "{\n  \"commonInstanceMetadata\": {\n    \"fingerprint\": \"Ycbmf6LsqV4=\",\n    \"kind\": \"compute#metadata\"\n  },\n  \"creationTimestamp\": \"2022-06-07T05:23:03.772-07:00\",\n  \"defaultNetworkTier\": \"PREMIUM\",\n  \"defaultServiceAccount\": \"12340009-compute@developer.gserviceaccount.com\",\n  \"id\": \"6665735726961982920\",\n  \"kind\": \"compute#project\",\n  \"name\": \"gcpdiag-vpc1-aaaa\",\n  \"quotas\": [\n    {\n      \"limit\": 10000,\n      \"metric\": \"SNAPSHOTS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 30,\n      \"metric\": \"NETWORKS\",\n      \"usage\": 1\n    },\n    {\n      \"limit\": 500,\n      \"metric\": \"FIREWALLS\",\n      \"usage\": 4\n    },\n    {\n      \"limit\": 5000,\n      \"metric\": \"IMAGES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 175,\n      \"metric\": \"STATIC_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 300,\n      \"metric\": \"ROUTES\",\n      \"usage\": 1\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"FORWARDING_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 500,\n      \"metric\": \"TARGET_POOLS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 500,\n      \"metric\": \"HEALTH_CHECKS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 575,\n      \"metric\": \"IN_USE_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 500,\n      \"metric\": \"TARGET_INSTANCES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_HTTP_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"URL_MAPS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"BACKEND_SERVICES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1000,\n      \"metric\": \"INSTANCE_TEMPLATES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 50,\n      \"metric\": \"TARGET_VPN_GATEWAYS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"VPN_TUNNELS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 30,\n      \"metric\": \"BACKEND_BUCKETS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 20,\n      \"metric\": \"ROUTERS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_SSL_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_HTTPS_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"SSL_CERTIFICATES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 275,\n      \"metric\": \"SUBNETWORKS\",\n      \"usage\": 35\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_TCP_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 10,\n      \"metric\": \"SECURITY_POLICIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 200,\n      \"metric\": \"SECURITY_POLICY_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1000,\n      \"metric\": \"XPN_SERVICE_PROJECTS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"PACKET_MIRRORINGS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1000,\n      \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 6,\n      \"metric\": \"INTERCONNECTS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 5000,\n      \"metric\": \"GLOBAL_INTERNAL_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 50,\n      \"metric\": \"VPN_GATEWAYS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 5000,\n      \"metric\": \"MACHINE_IMAGES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 20,\n      \"metric\": \"SECURITY_POLICY_CEVAL_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 50,\n      \"metric\": \"EXTERNAL_VPN_GATEWAYS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1,\n      \"metric\": \"PUBLIC_ADVERTISED_PREFIXES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 10,\n      \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1024,\n      \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 60,\n      \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"INTERNAL_TRAFFIC_DIRECTOR_FORWARDING_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"GLOBAL_EXTERNAL_MANAGED_FORWARDING_RULES\",\n      \"usage\": 0\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa\",\n  \"xpnProjectStatus\": \"HOST\"\n}\n"
  },
  {
    "path": "test-data/vpc1/json-dumps/compute-regions.json",
    "content": "{\n  \"kind\": \"compute#regionList\",\n  \"id\": \"projects/gcpdiag-vpc1-aaaa/regions\",\n  \"items\": [\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1220\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east1\",\n      \"description\": \"asia-east1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-east1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-east1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-east1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/asia-east1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1370\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east2\",\n      \"description\": \"asia-east2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-east2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-east2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-east2-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/asia-east2\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1250\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast1\",\n      \"description\": \"asia-northeast1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-northeast1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-northeast1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-northeast1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/asia-northeast1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1390\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast2\",\n      \"description\": \"asia-northeast2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-northeast2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-northeast2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-northeast2-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/asia-northeast2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1410\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast3\",\n      \"description\": \"asia-northeast3\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-northeast3-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-northeast3-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-northeast3-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/asia-northeast3\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1320\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south1\",\n      \"description\": \"asia-south1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-south1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-south1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-south1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/asia-south1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1470\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south2\",\n      \"description\": \"asia-south2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-south2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-south2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-south2-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/asia-south2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1260\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast1\",\n      \"description\": \"asia-southeast1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-southeast1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-southeast1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-southeast1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/asia-southeast1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1440\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast2\",\n      \"description\": \"asia-southeast2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-southeast2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-southeast2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/asia-southeast2-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/asia-southeast2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1280\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast1\",\n      \"description\": \"australia-southeast1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/australia-southeast1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/australia-southeast1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/australia-southeast1-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/australia-southeast1\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1480\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast2\",\n      \"description\": \"australia-southeast2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/australia-southeast2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/australia-southeast2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/australia-southeast2-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/australia-southeast2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1450\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-central2\",\n      \"description\": \"europe-central2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-central2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-central2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-central2-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/europe-central2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1350\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-north1\",\n      \"description\": \"europe-north1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-north1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-north1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-north1-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/europe-north1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1540\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-southwest1\",\n      \"description\": \"europe-southwest1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-southwest1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-southwest1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-southwest1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/europe-southwest1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1100\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west1\",\n      \"description\": \"europe-west1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-west1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-west1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-west1-d\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/europe-west1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1290\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west2\",\n      \"description\": \"europe-west2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-west2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-west2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-west2-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/europe-west2\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1300\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west3\",\n      \"description\": \"europe-west3\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-west3-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-west3-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-west3-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/europe-west3\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1340\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west4\",\n      \"description\": \"europe-west4\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-west4-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-west4-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-west4-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/europe-west4\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1380\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west6\",\n      \"description\": \"europe-west6\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-west6-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-west6-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-west6-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/europe-west6\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1510\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west8\",\n      \"description\": \"europe-west8\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-west8-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-west8-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-west8-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/europe-west8\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1520\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west9\",\n      \"description\": \"europe-west9\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-west9-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-west9-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/europe-west9-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/europe-west9\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1330\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast1\",\n      \"description\": \"northamerica-northeast1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/northamerica-northeast1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/northamerica-northeast1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/northamerica-northeast1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/northamerica-northeast1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1460\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast2\",\n      \"description\": \"northamerica-northeast2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/northamerica-northeast2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/northamerica-northeast2-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/northamerica-northeast2-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/northamerica-northeast2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1310\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-east1\",\n      \"description\": \"southamerica-east1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/southamerica-east1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/southamerica-east1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/southamerica-east1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/southamerica-east1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1490\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-west1\",\n      \"description\": \"southamerica-west1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/southamerica-west1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/southamerica-west1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/southamerica-west1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/southamerica-west1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1000\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1\",\n      \"description\": \"us-central1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-central1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-central1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-central1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-central1-f\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-central1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1230\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east1\",\n      \"description\": \"us-east1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-east1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-east1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-east1-d\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-east1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1270\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east4\",\n      \"description\": \"us-east4\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-east4-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-east4-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-east4-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-east4\",\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1530\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east5\",\n      \"description\": \"us-east5\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-east5-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-east5-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-east5-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 4096,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-east5\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1550\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-south1\",\n      \"description\": \"us-south1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-south1-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-south1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-south1-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 4096,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 240,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 50,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 20,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 120000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 15,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 24,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-south1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1210\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west1\",\n      \"description\": \"us-west1\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-west1-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-west1-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-west1-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-west1\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1360\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west2\",\n      \"description\": \"us-west2\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-west2-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-west2-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-west2-a\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-west2\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1420\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west3\",\n      \"description\": \"us-west3\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-west3-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-west3-b\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-west3-c\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-west3\",\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#region\",\n      \"id\": \"1430\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west4\",\n      \"description\": \"us-west4\",\n      \"status\": \"UP\",\n      \"zones\": [\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-west4-c\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-west4-a\",\n        \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/zones/us-west4-b\"\n      ],\n      \"quotas\": [\n        {\n          \"metric\": \"CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"DISKS_TOTAL_GB\",\n          \"limit\": 102400,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_ADDRESSES\",\n          \"limit\": 175,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_ADDRESSES\",\n          \"limit\": 575,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SSD_TOTAL_GB\",\n          \"limit\": 40960,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INSTANCES\",\n          \"limit\": 6000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AUTOSCALERS\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_AUTOSCALERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"REGIONAL_INSTANCE_GROUP_MANAGERS\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"TARGET_TCP_PROXIES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_CPUS\",\n          \"limit\": 5000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LOCAL_SSD_TOTAL_GB\",\n          \"limit\": 25000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITMENTS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n          \"limit\": 1000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERNAL_ADDRESSES\",\n          \"limit\": 200,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_LOCAL_SSD_GB\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_K80_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_GROUPS\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NODE_TEMPLATES\",\n          \"limit\": 100,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_V100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P100_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_P4_VWS_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_PER_REGION\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"INTERCONNECT_ATTACHMENTS_TOTAL_MBPS\",\n          \"limit\": 80000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESOURCE_POLICIES\",\n          \"limit\": 250,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_SNAPSHOT_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_T4_VWS_GPUS\",\n          \"limit\": 4,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"IN_USE_BACKUP_SCHEDULES\",\n          \"limit\": 500,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_K80_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P100_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_P4_GPUS\",\n          \"limit\": 1,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_V100_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_T4_GPUS\",\n          \"limit\": 8,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_C2_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"RESERVATIONS\",\n          \"limit\": 2000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_LICENSES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_N2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"SERVICE_ATTACHMENTS\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n          \"limit\": 1024,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"AFFINITY_GROUPS\",\n          \"limit\": 10,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PREEMPTIBLE_NVIDIA_A100_GPUS\",\n          \"limit\": 64,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_NVIDIA_A100_GPUS\",\n          \"limit\": 16,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M1_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M2_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_A2_CPUS\",\n          \"limit\": 192,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_MEMORY_OPTIMIZED_CPUS\",\n          \"limit\": 160,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n          \"limit\": 60,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PSC_INTERNAL_LB_FORWARDING_RULES\",\n          \"limit\": 800,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_NETWORK_LB_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_PROTOCOL_FORWARDING_RULES\",\n          \"limit\": 150,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"PD_EXTREME_TOTAL_PROVISIONED_IOPS\",\n          \"limit\": 720000,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"COMMITTED_E2_CPUS\",\n          \"limit\": 600,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"EXTERNAL_MANAGED_FORWARDING_RULES\",\n          \"limit\": 25,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"C2D_CPUS\",\n          \"limit\": 300,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"N2A_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"T2D_CPUS\",\n          \"limit\": 128,\n          \"usage\": 0\n        },\n        {\n          \"metric\": \"M3_CPUS\",\n          \"limit\": 0,\n          \"usage\": 0\n        }\n      ],\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions/us-west4\",\n      \"supportsPzs\": false\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc1-aaaa/regions\"\n}\n"
  },
  {
    "path": "test-data/vpc1/json-dumps/monitoring-query.json",
    "content": "{\n  \"timeSeriesDescriptor\": {}\n}\n"
  },
  {
    "path": "test-data/vpc1/json-dumps/project.json",
    "content": "{\n  \"name\": \"projects/12340009\",\n  \"parent\": \"folders/11112222\",\n  \"projectId\": \"gcpdiag-vpc1-aaaa\",\n  \"state\": \"ACTIVE\",\n  \"displayName\": \"gcpdiag test - vpc1\",\n  \"createTime\": \"2022-06-07T12:06:37.529Z\",\n  \"updateTime\": \"2022-06-07T12:06:39.191Z\",\n  \"etag\": \"73LYwBG8oClJWMj4WmVI7w==\",\n  \"labels\": {\n    \"gcpdiag\": \"test\"\n  }\n}\n"
  },
  {
    "path": "test-data/vpc1/json-dumps/services.json",
    "content": "{\n  \"services\": [\n    {\n      \"name\": \"projects/12340009/services/compute.googleapis.com\",\n      \"config\": {\n        \"name\": \"compute.googleapis.com\",\n        \"title\": \"Compute Engine API\",\n        \"documentation\": {\n          \"summary\": \"Creates and runs virtual machines on Google Cloud Platform.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"compute.googleapis.com/VpcNetwork\",\n            \"displayName\": \"VPC Network\",\n            \"description\": \"VPC Network.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the VPC Network.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the VPC Network, global always.\"\n              },\n              {\n                \"key\": \"network_id\",\n                \"description\": \"VPC Network resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Location\",\n            \"displayName\": \"Compute Location\",\n            \"description\": \"A location in the Compute API.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the Compute Location.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/instances_per_vpc_network\",\n                \"compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/ip_aliases_per_vpc_network\",\n                \"compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/instances_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/subnet_ranges_per_vpc_network\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/instances_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/instances_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/instances_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/internal_load_balancer_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/internal_protocol_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/ip_aliases_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/quota/subnet_ranges_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Location\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Location\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/usage\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340009\"\n    },\n    {\n      \"name\": \"projects/12340009/services/oslogin.googleapis.com\",\n      \"config\": {\n        \"name\": \"oslogin.googleapis.com\",\n        \"title\": \"Cloud OS Login API\",\n        \"documentation\": {\n          \"summary\": \"You can use OS Login to manage access to your VM instances using IAM roles.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12340009\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/vpc1/project.tf",
    "content": "/**\n * Copyright 2022 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nresource \"random_string\" \"project_id_suffix\" {\n  length  = 8\n  number  = true\n  lower   = true\n  upper   = false\n  special = false\n}\n\nresource \"google_project\" \"project\" {\n  name            = \"gcpdiag test - vpc1\"\n  project_id      = \"gcpdiag-vpc1-${random_string.project_id_suffix.id}\"\n  org_id          = var.folder_id == \"\" ? var.org_id : null\n  folder_id       = var.folder_id != \"\" ? var.folder_id : null\n  billing_account = var.billing_account_id\n  labels = {\n    gcpdiag : \"test\"\n  }\n}\n\nresource \"google_project_service\" \"compute\" {\n  project = google_project.project.project_id\n  service = \"compute.googleapis.com\"\n}\n\nresource \"google_compute_shared_vpc_host_project\" \"host\" {\n  project = google_project.project.project_id\n}\n\noutput \"project_id\" {\n  value = google_project.project.project_id\n}\n\noutput \"project_id_suffix\" {\n  value = random_string.project_id_suffix.id\n}\n\noutput \"project_nr\" {\n  value = google_project.project.number\n}\n\noutput \"org_id\" {\n  value = var.org_id\n}\n"
  },
  {
    "path": "test-data/vpc1/variables.tf",
    "content": "variable \"billing_account_id\" {}\n\nvariable \"org_id\" {}\nvariable \"folder_id\" { default = \"\" }\n"
  },
  {
    "path": "test-data/vpc2/Makefile",
    "content": "PROJECT_ID  := $(shell terraform output -raw project_id)\nPROJECT_ID_SUFFIX := $(shell terraform output -raw project_id_suffix)\nPROJECT_NR  := $(shell terraform output -raw project_nr)\nORG_ID      := $(shell terraform output -raw org_id)\nCURL         = ../../bin/curl-wrap.sh\nJSON_CLEANER = ../../bin/json-cleaner\nZONE_1       = us-central1-a\n\nFAKE_PROJECT_ID_SUFFIX = runbook\nFAKE_PROJECT_NR = 12345601\nFAKE_ORG_ID = 11112222\n\nCOMPUTE_INSTANCES_MAXRESULTS=5\n\nINSTANCE_NAME_GCE1=public-linux-valid\nINSTANCE_NAME_GCE2=public-linux-faulty\nINSTANCE_NAME_GCE3=private-linux-valid\nINSTANCE_NAME_GCE4=private-linux-faulty\n\nGATEWAY_NAME=nat-gateway\n\nCONNECTIVITY_TEST_ID=vmexternalipconnectivitytest\n\nall:\t\\\n\tjson-dumps/compute-effective-firewalls-default.json \\\n\tjson-dumps/compute-instances-$(ZONE_1).json \\\n\tjson-dumps/compute-instances-empty.json \\\n\tjson-dumps/compute-disks-empty.json \\\n\tjson-dumps/compute-network-default.json \\\n\tjson-dumps/compute-project.json \\\n\tjson-dumps/compute-zones.json \\\n\tjson-dumps/iam-policy.json \\\n\tjson-dumps/iam-service-accounts.json \\\n\tjson-dumps/project.json \\\n\tjson-dumps/services.json \\\n\tjson-dumps/compute-network-routes.json \\\n\tjson-dumps/connectivity-test.json \\\n\tjson-dumps/monitoring-query-nat-allocation-failed.json \\\n\tjson-dumps/monitoring-query-nat-dropped-sent-packets-count.json \\\n\tjson-dumps/monitoring-query-nat-dropped-received-packets-count.json \\\n\tjson-dumps/monitoring-query-instance-dropped-received-packets-count.json \\\n\n\n\n\ninclude ../Makefile.inc\n\ndefine MONITORING_QUERY_NAT_ALLOCATION_FAILED\n{ \\\n  \"query\": \"fetch nat_gateway \\\n\t| metric 'router.googleapis.com/nat/nat_allocation_failed' \\\n\t| within 5m \\\n\t\" \\\n}\nendef\n\njson-dumps/monitoring-query-nat-allocation-failed.json:\n\t$(CURL) -fsS \\\n\t\t'https://monitoring.googleapis.com/v3/projects/$(PROJECT_ID)/timeSeries:query' \\\n\t\t--header \"Content-Type: application/json\" -X POST \\\n\t\t--data '$(MONITORING_QUERY_NAT_ALLOCATION_FAILED)' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\n\ndefine MONITORING_QUERY_NAT_DROPPED_SENT_PACKETS_COUNT\n{ \\\n  \"query\": \"fetch nat_gateway \\\n\t| metric 'router.googleapis.com/nat/dropped_sent_packets_count' \\\n\t| align rate(10m) | within 10m \\\n\t| group_by [metric.reason], [value_dropped_sent_packets_count_aggregate:aggregate(value.dropped_sent_packets_count)] \\\n\t\" \\\n}\nendef\n\njson-dumps/monitoring-query-nat-dropped-sent-packets-count.json:\n\t$(CURL) -fsS \\\n\t\t'https://monitoring.googleapis.com/v3/projects/$(PROJECT_ID)/timeSeries:query' \\\n\t\t--header \"Content-Type: application/json\" -X POST \\\n\t\t--data '$(MONITORING_QUERY_NAT_DROPPED_SENT_PACKETS_COUNT)' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\n\ndefine MONITORING_QUERY_NAT_DROPPED_RECEIVED_PACKETS_COUNT\n{ \\\n  \"query\": \"fetch nat_gateway \\\n\t| metric 'router.googleapis.com/nat/dropped_received_packets_count' \\\n\t| align rate(5m) | within 5m \\\n\t| group_by [], [value_dropped_received_packets_count_aggregate:aggregate(value.dropped_received_packets_count)] \\\n\t\" \\\n}\nendef\n\njson-dumps/monitoring-query-nat-dropped-received-packets-count.json:\n\t$(CURL) -fsS \\\n\t\t'https://monitoring.googleapis.com/v3/projects/$(PROJECT_ID)/timeSeries:query' \\\n\t\t--header \"Content-Type: application/json\" -X POST \\\n\t\t--data '$(MONITORING_QUERY_NAT_DROPPED_RECEIVED_PACKETS_COUNT)' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\n\ndefine MONITORING_QUERY_INSTANCE_DROPPED_RECEIVED_PACKETS_COUNT\n{ \\\n  \"query\": \"fetch gce_instance \\\n\t| metric 'compute.googleapis.com/nat/dropped_received_packets_count' \\\n\t| align rate(5m) | every 5m \\\n\t| group_by [resource.instance_id], [value_dropped_received_packets_count_aggregate:aggregate(value.dropped_received_packets_count)] \\\n\t\" \\\n}\nendef\n\njson-dumps/monitoring-query-instance-dropped-received-packets-count.json:\n\t$(CURL) -fsS \\\n\t\t'https://monitoring.googleapis.com/v3/projects/$(PROJECT_ID)/timeSeries:query' \\\n\t\t--header \"Content-Type: application/json\" -X POST \\\n\t\t--data '$(MONITORING_QUERY_INSTANCE_DROPPED_RECEIVED_PACKETS_COUNT)' \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/connectivity-test.json:\n\t$(CURL) -fsS \\\n\t\t'https://networkmanagement.googleapis.com/v1/projects/$(PROJECT_ID)/locations/global/connectivityTests/$(CONNECTIVITY_TEST_ID)' \\\n\t\t--header \"Content-Type:text/json\" \\\n\t\t| $(SED_SUBST_FAKE) >$@\n\njson-dumps/compute-network-routes.json:\n\t$(CURL) -fsS \\\n\t\t'https://compute.googleapis.com/compute/v1/projects/$(PROJECT_ID)/global/routes' \\\n\t\t--header \"Content-Type:text/json\" \\\n\t\t| $(SED_SUBST_FAKE) >$@\n"
  },
  {
    "path": "test-data/vpc2/external_connectivity_private_instance_faulty.tf",
    "content": "/**\n * Copyright 2023 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nresource \"google_compute_instance\" \"private-linux-faulty\" {\n  project        = google_project.project.project_id\n  depends_on     = [google_project_service.compute]\n  name           = \"private-linux-faulty\"\n  machine_type   = \"e2-micro\"\n  zone           = var.zone\n  desired_status = \"RUNNING\"\n  network_interface {\n    network    = \"default\"\n    subnetwork = google_compute_subnetwork.private_subnet.id\n  }\n\n  tags = [\"faulty-vpc-instance-private\"]\n  scheduling {\n    preemptible       = true\n    automatic_restart = false\n  }\n\n  boot_disk {\n    initialize_params {\n      image = \"debian-cloud/debian-11\" # Choose an image\n    }\n  }\n\n  labels = {\n    foo = \"bar\"\n  }\n\n}\n\n# firewall configuration used for connectivity testing\nresource \"google_compute_firewall\" \"private-linux-egress-deny\" {\n  name    = \"private-linux-egress-deny\"\n  network = \"default\"\n  project = google_project.project.project_id\n\n  priority = 930\n\n  direction = \"EGRESS\"\n\n  deny {\n    protocol = \"all\"\n  }\n\n  target_tags = google_compute_instance.private-linux-faulty.tags\n  depends_on  = [google_compute_instance.private-linux-faulty]\n}\n"
  },
  {
    "path": "test-data/vpc2/external_connectivity_private_instance_valid.tf",
    "content": "/**\n * Copyright 2023 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nresource \"google_compute_instance\" \"private-linux-valid\" {\n  project        = google_project.project.project_id\n  depends_on     = [google_project_service.compute]\n  name           = \"private-linux-valid\"\n  machine_type   = \"e2-micro\"\n  zone           = var.zone\n  desired_status = \"RUNNING\"\n  network_interface {\n    network    = \"default\"\n    subnetwork = google_compute_subnetwork.private_subnet.id\n  }\n\n  tags = [\"valid-vpc-instance-private\"]\n  scheduling {\n    preemptible       = true\n    automatic_restart = false\n  }\n\n  boot_disk {\n    initialize_params {\n      image = \"debian-cloud/debian-11\" # Choose an image\n    }\n  }\n\n  labels = {\n    foo = \"bar\"\n  }\n\n}\n\n# firewall configuration used for connectivity testing\nresource \"google_compute_firewall\" \"private-linux-egress-allow\" {\n  name    = \"private-linux-egress-allow\"\n  network = \"default\"\n  project = google_project.project.project_id\n\n  priority = 920\n\n  direction = \"EGRESS\"\n\n  allow {\n    protocol = \"all\"\n  }\n\n  target_tags = google_compute_instance.private-linux-valid.tags\n  depends_on  = [google_compute_instance.private-linux-valid]\n}\n"
  },
  {
    "path": "test-data/vpc2/external_connectivity_public_instance_faulty.tf",
    "content": "/**\n * Copyright 2023 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nresource \"google_compute_instance\" \"public-linux-faulty\" {\n  project        = google_project.project.project_id\n  depends_on     = [google_project_service.compute]\n  name           = \"public-linux-faulty\"\n  machine_type   = \"e2-micro\"\n  zone           = var.zone\n  desired_status = \"RUNNING\"\n  network_interface {\n    network    = \"default\"\n    subnetwork = google_compute_subnetwork.public_subnet.id\n    access_config {}\n  }\n  tags = [\"faulty-vpc-instance\"]\n  scheduling {\n    preemptible       = true\n    automatic_restart = false\n  }\n\n  boot_disk {\n    initialize_params {\n      image = \"debian-cloud/debian-11\" # Choose an image\n    }\n  }\n\n  labels = {\n    foo = \"bar\"\n  }\n\n}\n\n# firewall configuration used for connectivity testing\nresource \"google_compute_firewall\" \"public-linux-egress-deny\" {\n  name    = \"public-linux-egress-deny\"\n  network = \"default\"\n  project = google_project.project.project_id\n\n  priority = 910\n\n  direction = \"EGRESS\"\n\n  deny {\n    protocol = \"all\"\n  }\n\n  target_tags = google_compute_instance.public-linux-faulty.tags\n  depends_on  = [google_compute_instance.public-linux-faulty]\n}\n"
  },
  {
    "path": "test-data/vpc2/external_connectivity_public_instance_valid.tf",
    "content": "/**\n * Copyright 2023 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\nresource \"google_compute_instance\" \"public-linux-valid\" {\n  project        = google_project.project.project_id\n  depends_on     = [google_project_service.compute]\n  name           = \"public-linux-valid\"\n  machine_type   = \"e2-micro\"\n  zone           = var.zone\n  desired_status = \"RUNNING\"\n  network_interface {\n    network    = \"default\"\n    subnetwork = google_compute_subnetwork.public_subnet.id\n    access_config {}\n  }\n  tags = [\"valid-vpc-instance\"]\n  scheduling {\n    preemptible       = true\n    automatic_restart = false\n  }\n\n  boot_disk {\n    initialize_params {\n      image = \"debian-cloud/debian-11\" # Choose an image\n    }\n  }\n\n  labels = {\n    foo = \"bar\"\n  }\n\n}\n\n# firewall configuration used for connectivity testing\nresource \"google_compute_firewall\" \"public-linux-egress-allow\" {\n  name    = \"public-linux-egress-allow\"\n  network = \"default\"\n  project = google_project.project.project_id\n\n  priority = 900\n\n  direction = \"EGRESS\"\n\n  allow {\n    protocol = \"all\"\n  }\n\n  target_tags = google_compute_instance.public-linux-valid.tags\n  depends_on  = [google_compute_instance.public-linux-valid]\n}\n"
  },
  {
    "path": "test-data/vpc2/json-dumps/compute-disks-europe-west2-b.json",
    "content": "{\n  \"kind\": \"compute#diskList\",\n  \"id\": \"projects/gcpdiag-vpc2-runbook/zones/europe-west2-b/disks\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west2-b/disks\"\n}\n"
  },
  {
    "path": "test-data/vpc2/json-dumps/compute-effective-firewalls-default.json",
    "content": "{\n  \"firewalls\": [\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"5258731537686370531\",\n      \"creationTimestamp\": \"2024-06-02T19:10:20.564-07:00\",\n      \"name\": \"private-linux-egress-deny\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"priority\": 930,\n      \"destinationRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"targetTags\": [\n        \"faulty-vpc-instance-private\"\n      ],\n      \"denied\": [\n        {\n          \"IPProtocol\": \"all\"\n        }\n      ],\n      \"direction\": \"EGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/firewalls/private-linux-egress-deny\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"3455842435923767294\",\n      \"creationTimestamp\": \"2024-05-30T21:24:49.095-07:00\",\n      \"name\": \"default-allow-rdp\",\n      \"description\": \"Allow RDP from anywhere\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"priority\": 65534,\n      \"sourceRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"3389\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/firewalls/default-allow-rdp\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"152245658759239907\",\n      \"creationTimestamp\": \"2024-06-02T19:10:20.044-07:00\",\n      \"name\": \"private-linux-egress-allow\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"priority\": 920,\n      \"destinationRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"targetTags\": [\n        \"valid-vpc-instance-private\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"all\"\n        }\n      ],\n      \"direction\": \"EGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/firewalls/private-linux-egress-allow\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"1755075759400349695\",\n      \"creationTimestamp\": \"2024-05-30T21:24:48.970-07:00\",\n      \"name\": \"default-allow-internal\",\n      \"description\": \"Allow internal traffic on the default network\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"priority\": 65534,\n      \"sourceRanges\": [\n        \"10.128.0.0/9\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"0-65535\"\n          ]\n        },\n        {\n          \"IPProtocol\": \"udp\",\n          \"ports\": [\n            \"0-65535\"\n          ]\n        },\n        {\n          \"IPProtocol\": \"icmp\"\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/firewalls/default-allow-internal\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"8294557148557383907\",\n      \"creationTimestamp\": \"2024-06-02T19:10:20.824-07:00\",\n      \"name\": \"public-linux-egress-deny\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"priority\": 910,\n      \"destinationRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"targetTags\": [\n        \"faulty-vpc-instance\"\n      ],\n      \"denied\": [\n        {\n          \"IPProtocol\": \"all\"\n        }\n      ],\n      \"direction\": \"EGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/firewalls/public-linux-egress-deny\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"3528317728416133118\",\n      \"creationTimestamp\": \"2024-05-30T21:24:49.032-07:00\",\n      \"name\": \"default-allow-ssh\",\n      \"description\": \"Allow SSH from anywhere\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"priority\": 65534,\n      \"sourceRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"tcp\",\n          \"ports\": [\n            \"22\"\n          ]\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/firewalls/default-allow-ssh\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"185081169068464356\",\n      \"creationTimestamp\": \"2024-06-02T19:10:19.667-07:00\",\n      \"name\": \"public-linux-egress-allow\",\n      \"description\": \"\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"priority\": 900,\n      \"destinationRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"targetTags\": [\n        \"valid-vpc-instance\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"all\"\n        }\n      ],\n      \"direction\": \"EGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/firewalls/public-linux-egress-allow\"\n    },\n    {\n      \"kind\": \"compute#firewall\",\n      \"id\": \"3872261333704830974\",\n      \"creationTimestamp\": \"2024-05-30T21:24:49.160-07:00\",\n      \"name\": \"default-allow-icmp\",\n      \"description\": \"Allow ICMP from anywhere\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"priority\": 65534,\n      \"sourceRanges\": [\n        \"0.0.0.0/0\"\n      ],\n      \"allowed\": [\n        {\n          \"IPProtocol\": \"icmp\"\n        }\n      ],\n      \"direction\": \"INGRESS\",\n      \"logConfig\": {\n        \"enable\": false\n      },\n      \"disabled\": false,\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/firewalls/default-allow-icmp\"\n    }\n  ],\n  \"firewallPolicys\": [\n    {\n      \"name\": \"902824820698\",\n      \"type\": \"HIERARCHY\",\n      \"shortName\": \"default-firewall-policy\",\n      \"displayName\": \"default-firewall-policy\",\n      \"rules\": [\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 0,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"34.168.226.0/26\",\n              \"34.102.114.64/26\",\n              \"34.16.224.64/26\",\n              \"34.48.81.64/26\",\n              \"34.168.146.160/27\",\n              \"34.16.224.160/27\",\n              \"34.82.66.0/24\",\n              \"34.82.90.0/24\",\n              \"34.82.98.0/24\",\n              \"34.82.160.0/24\",\n              \"34.82.166.128/25\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"tcp\"\n              },\n              {\n                \"ipProtocol\": \"udp\"\n              }\n            ]\n          },\n          \"action\": \"allow\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 1,\n          \"match\": {\n            \"destIpRanges\": [\n              \"34.83.160.25/32\",\n              \"34.125.160.60/32\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"tcp\"\n              },\n              {\n                \"ipProtocol\": \"udp\"\n              }\n            ]\n          },\n          \"action\": \"allow\",\n          \"direction\": \"EGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 487,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"0.0.0.0/0\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\"\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 488,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"0.0.0.0/0\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\"\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 600,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"35.235.240.0/20\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"tcp\",\n                \"ports\": [\n                  \"22\",\n                  \"3389\",\n                  \"5900-5901\"\n                ]\n              }\n            ]\n          },\n          \"action\": \"allow\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 601,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"35.191.0.0/16\",\n              \"130.211.0.0/22\",\n              \"209.85.152.0/22\",\n              \"209.85.204.0/22\",\n              \"169.254.169.254\",\n              \"108.170.220.0/23\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 602,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"10.0.0.0/8\",\n              \"172.16.0.0/12\",\n              \"192.168.0.0/16\",\n              \"100.64.0.0/10\",\n              \"240.0.0.0/4\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 603,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"35.199.192.0/19\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"tcp\",\n                \"ports\": [\n                  \"53\"\n                ]\n              },\n              {\n                \"ipProtocol\": \"udp\",\n                \"ports\": [\n                  \"53\"\n                ]\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 604,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"107.178.230.64/26\",\n              \"35.199.224.0/19\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"tcp\",\n                \"ports\": [\n                  \"667\"\n                ]\n              },\n              {\n                \"ipProtocol\": \"udp\",\n                \"ports\": [\n                  \"665-666\"\n                ]\n              },\n              {\n                \"ipProtocol\": \"icmp\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 700,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"0.0.0.0/0\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"deny\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 2147483644,\n          \"match\": {\n            \"destIpRanges\": [\n              \"::/0\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"EGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 2147483645,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"::/0\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 2147483646,\n          \"match\": {\n            \"destIpRanges\": [\n              \"0.0.0.0/0\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"EGRESS\",\n          \"enableLogging\": false\n        },\n        {\n          \"kind\": \"compute#firewallPolicyRule\",\n          \"description\": \"\",\n          \"priority\": 2147483647,\n          \"match\": {\n            \"srcIpRanges\": [\n              \"0.0.0.0/0\"\n            ],\n            \"layer4Configs\": [\n              {\n                \"ipProtocol\": \"all\"\n              }\n            ]\n          },\n          \"action\": \"goto_next\",\n          \"direction\": \"INGRESS\",\n          \"enableLogging\": false\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/vpc2/json-dumps/compute-instances-europe-west2-b.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-vpc2-runbook/zones/europe-west2-b/instances\",\n  \"kind\": \"compute#instanceList\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west2-b/instances\"\n}\n"
  },
  {
    "path": "test-data/vpc2/json-dumps/compute-instances-us-central1-a.json",
    "content": "{\n  \"id\": \"projects/gcpdiag-vpc2-runbook/zones/us-central1-a/instances\",\n  \"items\": [\n    {\n      \"canIpForward\": false,\n      \"cpuPlatform\": \"Intel Haswell\",\n      \"creationTimestamp\": \"2024-06-02T19:10:04.195-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"architecture\": \"X86_64\",\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"10\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-central1-a/disks/private-linux-faulty\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"342964849769224982\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"1TQLkowq0ZY=\",\n      \"labels\": {\n        \"foo\": \"bar\"\n      },\n      \"lastStartTimestamp\": \"2024-06-02T19:10:10.535-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-central1-a/machineTypes/e2-micro\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"private-linux-faulty\",\n      \"networkInterfaces\": [\n        {\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n          \"networkIP\": \"10.10.0.2\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-central1/subnetworks/private-subnet\"\n        }\n      ],\n      \"satisfiesPzi\": false,\n      \"scheduling\": {\n        \"automaticRestart\": false,\n        \"onHostMaintenance\": \"TERMINATE\",\n        \"preemptible\": true\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-central1-a/instances/private-linux-faulty\",\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"faulty-vpc-instance-private\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-central1-a\"\n    },\n    {\n      \"canIpForward\": false,\n      \"cpuPlatform\": \"Intel Haswell\",\n      \"creationTimestamp\": \"2024-06-02T19:10:03.767-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"architecture\": \"X86_64\",\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"10\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-central1-a/disks/private-linux-valid\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"7242411489568529174\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"1TQLkowq0ZY=\",\n      \"labels\": {\n        \"foo\": \"bar\"\n      },\n      \"lastStartTimestamp\": \"2024-06-02T19:10:10.031-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-central1-a/machineTypes/e2-micro\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"private-linux-valid\",\n      \"networkInterfaces\": [\n        {\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n          \"networkIP\": \"10.10.0.3\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-central1/subnetworks/private-subnet\"\n        }\n      ],\n      \"satisfiesPzi\": false,\n      \"scheduling\": {\n        \"automaticRestart\": false,\n        \"onHostMaintenance\": \"TERMINATE\",\n        \"preemptible\": true\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-central1-a/instances/private-linux-valid\",\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"valid-vpc-instance-private\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-central1-a\"\n    },\n    {\n      \"canIpForward\": false,\n      \"cpuPlatform\": \"Intel Haswell\",\n      \"creationTimestamp\": \"2024-06-02T19:10:04.424-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"architecture\": \"X86_64\",\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"10\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-central1-a/disks/public-linux-faulty\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"2168525421735353110\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"1TQLkowq0ZY=\",\n      \"labels\": {\n        \"foo\": \"bar\"\n      },\n      \"lastStartTimestamp\": \"2024-06-02T19:10:09.875-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-central1-a/machineTypes/e2-micro\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"public-linux-faulty\",\n      \"networkInterfaces\": [\n        {\n          \"accessConfigs\": [\n            {\n              \"kind\": \"compute#accessConfig\",\n              \"name\": \"external-nat\",\n              \"natIP\": \"35.238.187.232\",\n              \"networkTier\": \"PREMIUM\",\n              \"type\": \"ONE_TO_ONE_NAT\"\n            }\n          ],\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n          \"networkIP\": \"10.0.0.3\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-central1/subnetworks/public-subnet\"\n        }\n      ],\n      \"satisfiesPzi\": false,\n      \"scheduling\": {\n        \"automaticRestart\": false,\n        \"onHostMaintenance\": \"TERMINATE\",\n        \"preemptible\": true\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-central1-a/instances/public-linux-faulty\",\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"faulty-vpc-instance\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-central1-a\"\n    },\n    {\n      \"canIpForward\": false,\n      \"cpuPlatform\": \"Intel Haswell\",\n      \"creationTimestamp\": \"2024-06-02T19:10:02.494-07:00\",\n      \"deletionProtection\": false,\n      \"disks\": [\n        {\n          \"architecture\": \"X86_64\",\n          \"autoDelete\": true,\n          \"boot\": true,\n          \"deviceName\": \"persistent-disk-0\",\n          \"diskSizeGb\": \"10\",\n          \"guestOsFeatures\": [\n            {\n              \"type\": \"UEFI_COMPATIBLE\"\n            },\n            {\n              \"type\": \"VIRTIO_SCSI_MULTIQUEUE\"\n            },\n            {\n              \"type\": \"GVNIC\"\n            },\n            {\n              \"type\": \"SEV_CAPABLE\"\n            }\n          ],\n          \"index\": 0,\n          \"interface\": \"SCSI\",\n          \"kind\": \"compute#attachedDisk\",\n          \"licenses\": [\n            \"https://www.googleapis.com/compute/v1/projects/debian-cloud/global/licenses/debian-11-bullseye\"\n          ],\n          \"mode\": \"READ_WRITE\",\n          \"source\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-central1-a/disks/public-linux-valid\",\n          \"type\": \"PERSISTENT\"\n        }\n      ],\n      \"fingerprint\": \"REDACTED\",\n      \"id\": \"3614107599914441494\",\n      \"kind\": \"compute#instance\",\n      \"labelFingerprint\": \"1TQLkowq0ZY=\",\n      \"labels\": {\n        \"foo\": \"bar\"\n      },\n      \"lastStartTimestamp\": \"2024-06-02T19:10:10.182-07:00\",\n      \"machineType\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-central1-a/machineTypes/e2-micro\",\n      \"metadata\": {\n        \"fingerprint\": \"REDACTED\",\n        \"kind\": \"compute#metadata\"\n      },\n      \"name\": \"public-linux-valid\",\n      \"networkInterfaces\": [\n        {\n          \"accessConfigs\": [\n            {\n              \"kind\": \"compute#accessConfig\",\n              \"name\": \"external-nat\",\n              \"natIP\": \"34.172.48.224\",\n              \"networkTier\": \"PREMIUM\",\n              \"type\": \"ONE_TO_ONE_NAT\"\n            }\n          ],\n          \"fingerprint\": \"REDACTED\",\n          \"kind\": \"compute#networkInterface\",\n          \"name\": \"nic0\",\n          \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n          \"networkIP\": \"10.0.0.2\",\n          \"stackType\": \"IPV4_ONLY\",\n          \"subnetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-central1/subnetworks/public-subnet\"\n        }\n      ],\n      \"satisfiesPzi\": false,\n      \"scheduling\": {\n        \"automaticRestart\": false,\n        \"onHostMaintenance\": \"TERMINATE\",\n        \"preemptible\": true\n      },\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-central1-a/instances/public-linux-valid\",\n      \"shieldedInstanceConfig\": {\n        \"enableIntegrityMonitoring\": true,\n        \"enableSecureBoot\": false,\n        \"enableVtpm\": true\n      },\n      \"shieldedInstanceIntegrityPolicy\": {\n        \"updateAutoLearnPolicy\": true\n      },\n      \"startRestricted\": false,\n      \"status\": \"RUNNING\",\n      \"tags\": {\n        \"fingerprint\": \"REDACTED\",\n        \"items\": [\n          \"valid-vpc-instance\"\n        ]\n      },\n      \"zone\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-central1-a\"\n    }\n  ],\n  \"kind\": \"compute#instanceList\",\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-central1-a/instances\"\n}\n"
  },
  {
    "path": "test-data/vpc2/json-dumps/compute-network-default.json",
    "content": "{\n  \"autoCreateSubnetworks\": true,\n  \"creationTimestamp\": \"2024-05-30T21:24:04.557-07:00\",\n  \"description\": \"Default network for the project\",\n  \"id\": \"7439775982828187147\",\n  \"kind\": \"compute#network\",\n  \"name\": \"default\",\n  \"networkFirewallPolicyEnforcementOrder\": \"AFTER_CLASSIC_FIREWALL\",\n  \"routingConfig\": {\n    \"routingMode\": \"REGIONAL\"\n  },\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n  \"selfLinkWithId\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/7439775982828187147\",\n  \"subnetworks\": [\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-east1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/australia-southeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-east5/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-west3/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-central1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-west4/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-southwest1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/northamerica-northeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/southamerica-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-central1/subnetworks/public-subnet\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-west2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-west8/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-southeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-south1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-central2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-east2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-southeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west10/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west4/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west12/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-east1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/southamerica-east1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west8/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/australia-southeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-northeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-east4/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west9/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/me-central1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-south1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-east7/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-northeast3/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/me-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-south2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-central1/subnetworks/private-subnet\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/africa-south1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-northeast2/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/northamerica-northeast1/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west3/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west6/subnetworks/default\",\n    \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-north1/subnetworks/default\"\n  ]\n}\n"
  },
  {
    "path": "test-data/vpc2/json-dumps/compute-network-routes.json",
    "content": "{\n  \"kind\": \"compute#routeList\",\n  \"id\": \"projects/gcpdiag-vpc2-runbook/global/routes\",\n  \"items\": [\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"6504832813046471455\",\n      \"creationTimestamp\": \"2024-06-02T19:09:52.075-07:00\",\n      \"name\": \"default-route-0256760961424ef9\",\n      \"description\": \"Default local route to the subnetwork 10.0.0.0/24.\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"destRange\": \"10.0.0.0/24\",\n      \"priority\": 0,\n      \"nextHopNetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-0256760961424ef9\"\n    },\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"5567157631748206080\",\n      \"creationTimestamp\": \"2024-05-30T21:24:15.897-07:00\",\n      \"name\": \"default-route-098f7fe9ec876980\",\n      \"description\": \"Default local route to the subnetwork 10.138.0.0/20.\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"destRange\": \"10.138.0.0/20\",\n      \"priority\": 0,\n      \"nextHopNetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-098f7fe9ec876980\"\n    },\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"4975633896561765919\",\n      \"creationTimestamp\": \"2024-05-30T21:24:16.048-07:00\",\n      \"name\": \"default-route-162969572b253fc6\",\n      \"description\": \"Default local route to the subnetwork 10.132.0.0/20.\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"destRange\": \"10.132.0.0/20\",\n      \"priority\": 0,\n      \"nextHopNetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-162969572b253fc6\"\n    },\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"6290265124635995648\",\n      \"creationTimestamp\": \"2024-05-30T21:24:15.346-07:00\",\n      \"name\": \"default-route-32b1ae3462c226b4\",\n      \"description\": \"Default local route to the subnetwork 10.202.0.0/20.\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"destRange\": \"10.202.0.0/20\",\n      \"priority\": 0,\n      \"nextHopNetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-32b1ae3462c226b4\"\n    },\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"5951494803160362526\",\n      \"creationTimestamp\": \"2024-05-30T21:24:17.044-07:00\",\n      \"name\": \"default-route-359865837b3f5c4c\",\n      \"description\": \"Default local route to the subnetwork 10.210.0.0/20.\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"destRange\": \"10.210.0.0/20\",\n      \"priority\": 0,\n      \"nextHopNetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-359865837b3f5c4c\"\n    },\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"1186609843905238139\",\n      \"creationTimestamp\": \"2024-05-31T03:46:45.004-07:00\",\n      \"name\": \"default-route-3bd81733a6885746\",\n      \"description\": \"Default local route to the subnetwork 10.196.0.0/20.\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"destRange\": \"10.196.0.0/20\",\n      \"priority\": 0,\n      \"nextHopNetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-3bd81733a6885746\"\n    },\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"9123881136885657118\",\n      \"creationTimestamp\": \"2024-05-30T21:24:17.599-07:00\",\n      \"name\": \"default-route-3d71e3ffb7b793e2\",\n      \"description\": \"Default local route to the subnetwork 10.168.0.0/20.\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"destRange\": \"10.168.0.0/20\",\n      \"priority\": 0,\n      \"nextHopNetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-3d71e3ffb7b793e2\"\n    },\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"7308510787146149407\",\n      \"creationTimestamp\": \"2024-05-30T21:24:16.683-07:00\",\n      \"name\": \"default-route-41a15b5b06c6e5b6\",\n      \"description\": \"Default local route to the subnetwork 10.164.0.0/20.\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"destRange\": \"10.164.0.0/20\",\n      \"priority\": 0,\n      \"nextHopNetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-41a15b5b06c6e5b6\"\n    },\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"2763373422954475034\",\n      \"creationTimestamp\": \"2024-05-30T21:24:21.780-07:00\",\n      \"name\": \"default-route-478468a891fadc87\",\n      \"description\": \"Default local route to the subnetwork 10.194.0.0/20.\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"destRange\": \"10.194.0.0/20\",\n      \"priority\": 0,\n      \"nextHopNetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-478468a891fadc87\"\n    },\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"2607223156694642205\",\n      \"creationTimestamp\": \"2024-05-30T21:24:18.874-07:00\",\n      \"name\": \"default-route-489ed525a0117f1b\",\n      \"description\": \"Default local route to the subnetwork 10.174.0.0/20.\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"destRange\": \"10.174.0.0/20\",\n      \"priority\": 0,\n      \"nextHopNetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-489ed525a0117f1b\"\n    },\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"3246083178149244443\",\n      \"creationTimestamp\": \"2024-05-30T21:24:20.818-07:00\",\n      \"name\": \"default-route-5252c68c47ecb304\",\n      \"description\": \"Default local route to the subnetwork 10.148.0.0/20.\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"destRange\": \"10.148.0.0/20\",\n      \"priority\": 0,\n      \"nextHopNetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-5252c68c47ecb304\"\n    },\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"8941047407046880798\",\n      \"creationTimestamp\": \"2024-05-30T21:24:17.782-07:00\",\n      \"name\": \"default-route-5757ee60f1680659\",\n      \"description\": \"Default local route to the subnetwork 10.186.0.0/20.\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"destRange\": \"10.186.0.0/20\",\n      \"priority\": 0,\n      \"nextHopNetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-5757ee60f1680659\"\n    },\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"4419597277118918175\",\n      \"creationTimestamp\": \"2024-05-30T21:24:16.119-07:00\",\n      \"name\": \"default-route-594f82c5c4606a64\",\n      \"description\": \"Default local route to the subnetwork 10.162.0.0/20.\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"destRange\": \"10.162.0.0/20\",\n      \"priority\": 0,\n      \"nextHopNetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-594f82c5c4606a64\"\n    },\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"6353336843931807233\",\n      \"creationTimestamp\": \"2024-05-30T21:24:14.531-07:00\",\n      \"name\": \"default-route-5a86e4d51373c72a\",\n      \"description\": \"Default local route to the subnetwork 10.206.0.0/20.\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"destRange\": \"10.206.0.0/20\",\n      \"priority\": 0,\n      \"nextHopNetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-5a86e4d51373c72a\"\n    },\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"2784935868177378847\",\n      \"creationTimestamp\": \"2024-05-30T21:24:16.813-07:00\",\n      \"name\": \"default-route-65021bdf65c9447c\",\n      \"description\": \"Default local route to the subnetwork 10.172.0.0/20.\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"destRange\": \"10.172.0.0/20\",\n      \"priority\": 0,\n      \"nextHopNetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-65021bdf65c9447c\"\n    },\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"4432167937724422912\",\n      \"creationTimestamp\": \"2024-06-02T19:09:51.807-07:00\",\n      \"name\": \"default-route-652ce9d5b5cca29c\",\n      \"description\": \"Default local route to the subnetwork 10.10.0.0/24.\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"destRange\": \"10.10.0.0/24\",\n      \"priority\": 0,\n      \"nextHopNetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-652ce9d5b5cca29c\"\n    },\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"7343470871747816989\",\n      \"creationTimestamp\": \"2024-05-30T21:24:18.316-07:00\",\n      \"name\": \"default-route-654bb6ab29dde3b0\",\n      \"description\": \"Default local route to the subnetwork 10.208.0.0/20.\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"destRange\": \"10.208.0.0/20\",\n      \"priority\": 0,\n      \"nextHopNetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-654bb6ab29dde3b0\"\n    },\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"4236987435335347741\",\n      \"creationTimestamp\": \"2024-05-30T21:24:18.444-07:00\",\n      \"name\": \"default-route-663f8640c2ad7135\",\n      \"description\": \"Default local route to the subnetwork 10.178.0.0/20.\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"destRange\": \"10.178.0.0/20\",\n      \"priority\": 0,\n      \"nextHopNetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-663f8640c2ad7135\"\n    },\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"4039912384217017862\",\n      \"creationTimestamp\": \"2024-05-30T21:24:09.632-07:00\",\n      \"name\": \"default-route-733dd203fb86133b\",\n      \"description\": \"Default route to the Internet.\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"destRange\": \"0.0.0.0/0\",\n      \"priority\": 1000,\n      \"nextHopGateway\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/gateways/default-internet-gateway\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-733dd203fb86133b\"\n    },\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"1989173501624643102\",\n      \"creationTimestamp\": \"2024-05-30T21:24:17.314-07:00\",\n      \"name\": \"default-route-76e7a2d55acd6c17\",\n      \"description\": \"Default local route to the subnetwork 10.198.0.0/20.\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"destRange\": \"10.198.0.0/20\",\n      \"priority\": 0,\n      \"nextHopNetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-76e7a2d55acd6c17\"\n    },\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"169643802476473882\",\n      \"creationTimestamp\": \"2024-05-30T21:24:21.656-07:00\",\n      \"name\": \"default-route-780976f08fea61e5\",\n      \"description\": \"Default local route to the subnetwork 10.218.0.0/20.\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"destRange\": \"10.218.0.0/20\",\n      \"priority\": 0,\n      \"nextHopNetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-780976f08fea61e5\"\n    },\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"449770163751153152\",\n      \"creationTimestamp\": \"2024-05-30T21:24:15.936-07:00\",\n      \"name\": \"default-route-78ded18ec0e6ec9e\",\n      \"description\": \"Default local route to the subnetwork 10.182.0.0/20.\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"destRange\": \"10.182.0.0/20\",\n      \"priority\": 0,\n      \"nextHopNetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-78ded18ec0e6ec9e\"\n    },\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"2400967123354840605\",\n      \"creationTimestamp\": \"2024-05-30T21:24:18.378-07:00\",\n      \"name\": \"default-route-7c67edeed583ea2b\",\n      \"description\": \"Default local route to the subnetwork 10.140.0.0/20.\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"destRange\": \"10.140.0.0/20\",\n      \"priority\": 0,\n      \"nextHopNetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-7c67edeed583ea2b\"\n    },\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"9217106666220482049\",\n      \"creationTimestamp\": \"2024-05-30T21:24:14.156-07:00\",\n      \"name\": \"default-route-7f23cca4f2794d4d\",\n      \"description\": \"Default local route to the subnetwork 10.128.0.0/20.\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"destRange\": \"10.128.0.0/20\",\n      \"priority\": 0,\n      \"nextHopNetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-7f23cca4f2794d4d\"\n    },\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"9023919956369403419\",\n      \"creationTimestamp\": \"2024-05-30T21:24:20.632-07:00\",\n      \"name\": \"default-route-82895d24b42d3fa4\",\n      \"description\": \"Default local route to the subnetwork 10.158.0.0/20.\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"destRange\": \"10.158.0.0/20\",\n      \"priority\": 0,\n      \"nextHopNetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-82895d24b42d3fa4\"\n    },\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"6046833533714230808\",\n      \"creationTimestamp\": \"2024-05-30T21:24:23.937-07:00\",\n      \"name\": \"default-route-8c7c6946e9b3df48\",\n      \"description\": \"Default local route to the subnetwork 10.192.0.0/20.\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"destRange\": \"10.192.0.0/20\",\n      \"priority\": 0,\n      \"nextHopNetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-8c7c6946e9b3df48\"\n    },\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"3506435050431639064\",\n      \"creationTimestamp\": \"2024-05-30T21:24:23.386-07:00\",\n      \"name\": \"default-route-8f34df4caa391385\",\n      \"description\": \"Default local route to the subnetwork 10.184.0.0/20.\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"destRange\": \"10.184.0.0/20\",\n      \"priority\": 0,\n      \"nextHopNetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-8f34df4caa391385\"\n    },\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"5937812733867388447\",\n      \"creationTimestamp\": \"2024-05-30T21:24:16.673-07:00\",\n      \"name\": \"default-route-8f5bf5cc001fde03\",\n      \"description\": \"Default local route to the subnetwork 10.156.0.0/20.\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"destRange\": \"10.156.0.0/20\",\n      \"priority\": 0,\n      \"nextHopNetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-8f5bf5cc001fde03\"\n    },\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"6296264682847399455\",\n      \"creationTimestamp\": \"2024-05-30T21:24:16.474-07:00\",\n      \"name\": \"default-route-901ccc748787fd4e\",\n      \"description\": \"Default local route to the subnetwork 10.214.0.0/20.\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"destRange\": \"10.214.0.0/20\",\n      \"priority\": 0,\n      \"nextHopNetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-901ccc748787fd4e\"\n    },\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"966807634037763611\",\n      \"creationTimestamp\": \"2024-05-30T21:24:20.710-07:00\",\n      \"name\": \"default-route-93a00623ff2c9d9b\",\n      \"description\": \"Default local route to the subnetwork 10.212.0.0/20.\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"destRange\": \"10.212.0.0/20\",\n      \"priority\": 0,\n      \"nextHopNetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-93a00623ff2c9d9b\"\n    },\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"8944993343825752807\",\n      \"creationTimestamp\": \"2024-05-31T10:42:32.966-07:00\",\n      \"name\": \"default-route-9bad42061d48e9bd\",\n      \"description\": \"Default local route to the subnetwork 10.220.0.0/20.\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"destRange\": \"10.220.0.0/20\",\n      \"priority\": 0,\n      \"nextHopNetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-9bad42061d48e9bd\"\n    },\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"2920411012277792257\",\n      \"creationTimestamp\": \"2024-05-30T21:24:14.730-07:00\",\n      \"name\": \"default-route-9f7db9d88de1109a\",\n      \"description\": \"Default local route to the subnetwork 10.142.0.0/20.\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"destRange\": \"10.142.0.0/20\",\n      \"priority\": 0,\n      \"nextHopNetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-9f7db9d88de1109a\"\n    },\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"6097409105791872543\",\n      \"creationTimestamp\": \"2024-05-30T21:24:16.797-07:00\",\n      \"name\": \"default-route-ae07c29208f9faea\",\n      \"description\": \"Default local route to the subnetwork 10.204.0.0/20.\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"destRange\": \"10.204.0.0/20\",\n      \"priority\": 0,\n      \"nextHopNetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-ae07c29208f9faea\"\n    },\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"7409627734771822110\",\n      \"creationTimestamp\": \"2024-05-30T21:24:17.816-07:00\",\n      \"name\": \"default-route-b13cd7339b5abf15\",\n      \"description\": \"Default local route to the subnetwork 10.146.0.0/20.\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"destRange\": \"10.146.0.0/20\",\n      \"priority\": 0,\n      \"nextHopNetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-b13cd7339b5abf15\"\n    },\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"1637122277981351455\",\n      \"creationTimestamp\": \"2024-05-30T21:24:16.016-07:00\",\n      \"name\": \"default-route-c945a8e45ba52c77\",\n      \"description\": \"Default local route to the subnetwork 10.188.0.0/20.\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"destRange\": \"10.188.0.0/20\",\n      \"priority\": 0,\n      \"nextHopNetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-c945a8e45ba52c77\"\n    },\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"8773365948166237720\",\n      \"creationTimestamp\": \"2024-05-30T21:24:23.440-07:00\",\n      \"name\": \"default-route-d160f5979c71486e\",\n      \"description\": \"Default local route to the subnetwork 10.160.0.0/20.\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"destRange\": \"10.160.0.0/20\",\n      \"priority\": 0,\n      \"nextHopNetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-d160f5979c71486e\"\n    },\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"7391783468506869276\",\n      \"creationTimestamp\": \"2024-05-30T21:24:19.499-07:00\",\n      \"name\": \"default-route-d5fd7f607073d322\",\n      \"description\": \"Default local route to the subnetwork 10.152.0.0/20.\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"destRange\": \"10.152.0.0/20\",\n      \"priority\": 0,\n      \"nextHopNetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-d5fd7f607073d322\"\n    },\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"3256695458222108188\",\n      \"creationTimestamp\": \"2024-05-30T21:24:19.396-07:00\",\n      \"name\": \"default-route-d64c41358ef1ef42\",\n      \"description\": \"Default local route to the subnetwork 10.166.0.0/20.\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"destRange\": \"10.166.0.0/20\",\n      \"priority\": 0,\n      \"nextHopNetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-d64c41358ef1ef42\"\n    },\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"4249506418894630400\",\n      \"creationTimestamp\": \"2024-05-30T21:24:15.270-07:00\",\n      \"name\": \"default-route-dc8e80c4aec139bb\",\n      \"description\": \"Default local route to the subnetwork 10.150.0.0/20.\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"destRange\": \"10.150.0.0/20\",\n      \"priority\": 0,\n      \"nextHopNetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-dc8e80c4aec139bb\"\n    },\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"5057211972806045213\",\n      \"creationTimestamp\": \"2024-05-30T21:24:18.504-07:00\",\n      \"name\": \"default-route-ee8853665c7ab1e9\",\n      \"description\": \"Default local route to the subnetwork 10.170.0.0/20.\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"destRange\": \"10.170.0.0/20\",\n      \"priority\": 0,\n      \"nextHopNetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-ee8853665c7ab1e9\"\n    },\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"2614791937042214400\",\n      \"creationTimestamp\": \"2024-05-30T21:24:16.026-07:00\",\n      \"name\": \"default-route-f99d363bdb25a8a8\",\n      \"description\": \"Default local route to the subnetwork 10.154.0.0/20.\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"destRange\": \"10.154.0.0/20\",\n      \"priority\": 0,\n      \"nextHopNetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-f99d363bdb25a8a8\"\n    },\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"7296526758943452672\",\n      \"creationTimestamp\": \"2024-05-30T21:24:15.461-07:00\",\n      \"name\": \"default-route-f9c072bbc8f44b2b\",\n      \"description\": \"Default local route to the subnetwork 10.180.0.0/20.\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"destRange\": \"10.180.0.0/20\",\n      \"priority\": 0,\n      \"nextHopNetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-f9c072bbc8f44b2b\"\n    },\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"405334320437587487\",\n      \"creationTimestamp\": \"2024-05-30T21:24:16.633-07:00\",\n      \"name\": \"default-route-f9c93e17b1e224fd\",\n      \"description\": \"Default local route to the subnetwork 10.200.0.0/20.\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"destRange\": \"10.200.0.0/20\",\n      \"priority\": 0,\n      \"nextHopNetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-f9c93e17b1e224fd\"\n    },\n    {\n      \"kind\": \"compute#route\",\n      \"id\": \"5853707331362418200\",\n      \"creationTimestamp\": \"2024-05-30T21:24:23.900-07:00\",\n      \"name\": \"default-route-fc1ecfcfa61f4fde\",\n      \"description\": \"Default local route to the subnetwork 10.190.0.0/20.\",\n      \"network\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"destRange\": \"10.190.0.0/20\",\n      \"priority\": 0,\n      \"nextHopNetwork\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/networks/default\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes/default-route-fc1ecfcfa61f4fde\"\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/global/routes\"\n}\n"
  },
  {
    "path": "test-data/vpc2/json-dumps/compute-project.json",
    "content": "{\n  \"cloudArmorTier\": \"CA_STANDARD\",\n  \"commonInstanceMetadata\": {\n    \"fingerprint\": \"mHrypaKBFl8=\",\n    \"kind\": \"compute#metadata\"\n  },\n  \"creationTimestamp\": \"2024-05-30T21:23:57.022-07:00\",\n  \"defaultNetworkTier\": \"PREMIUM\",\n  \"defaultServiceAccount\": \"12345601-compute@developer.gserviceaccount.com\",\n  \"id\": \"8958047398705557043\",\n  \"kind\": \"compute#project\",\n  \"name\": \"gcpdiag-vpc2-runbook\",\n  \"quotas\": [\n    {\n      \"limit\": 10000,\n      \"metric\": \"SNAPSHOTS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 30,\n      \"metric\": \"NETWORKS\",\n      \"usage\": 1\n    },\n    {\n      \"limit\": 500,\n      \"metric\": \"FIREWALLS\",\n      \"usage\": 8\n    },\n    {\n      \"limit\": 5000,\n      \"metric\": \"IMAGES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 175,\n      \"metric\": \"STATIC_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 300,\n      \"metric\": \"ROUTES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"FORWARDING_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 500,\n      \"metric\": \"TARGET_POOLS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1000,\n      \"metric\": \"HEALTH_CHECKS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 575,\n      \"metric\": \"IN_USE_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 500,\n      \"metric\": \"TARGET_INSTANCES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_HTTP_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"URL_MAPS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"BACKEND_SERVICES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1000,\n      \"metric\": \"INSTANCE_TEMPLATES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 50,\n      \"metric\": \"TARGET_VPN_GATEWAYS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"VPN_TUNNELS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 30,\n      \"metric\": \"BACKEND_BUCKETS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 20,\n      \"metric\": \"ROUTERS\",\n      \"usage\": 1\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_SSL_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_HTTPS_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"SSL_CERTIFICATES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 275,\n      \"metric\": \"SUBNETWORKS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_TCP_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 10,\n      \"metric\": \"SECURITY_POLICIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 200,\n      \"metric\": \"SECURITY_POLICY_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1000,\n      \"metric\": \"XPN_SERVICE_PROJECTS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"PACKET_MIRRORINGS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1000,\n      \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 6,\n      \"metric\": \"INTERCONNECTS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 5000,\n      \"metric\": \"GLOBAL_INTERNAL_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 50,\n      \"metric\": \"VPN_GATEWAYS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 5000,\n      \"metric\": \"MACHINE_IMAGES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 20,\n      \"metric\": \"SECURITY_POLICY_CEVAL_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 50,\n      \"metric\": \"EXTERNAL_VPN_GATEWAYS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1,\n      \"metric\": \"PUBLIC_ADVERTISED_PREFIXES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 10,\n      \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1024,\n      \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 60,\n      \"metric\": \"NETWORK_FIREWALL_POLICIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"INTERNAL_TRAFFIC_DIRECTOR_FORWARDING_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"GLOBAL_EXTERNAL_MANAGED_FORWARDING_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"GLOBAL_INTERNAL_MANAGED_BACKEND_SERVICES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"GLOBAL_EXTERNAL_MANAGED_BACKEND_SERVICES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"GLOBAL_EXTERNAL_PROXY_LB_BACKEND_SERVICES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 750,\n      \"metric\": \"GLOBAL_INTERNAL_TRAFFIC_DIRECTOR_BACKEND_SERVICES\",\n      \"usage\": 0\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook\",\n  \"vmDnsSetting\": \"GLOBAL_DEFAULT\",\n  \"xpnProjectStatus\": \"UNSPECIFIED_XPN_PROJECT_STATUS\"\n}\n"
  },
  {
    "path": "test-data/vpc2/json-dumps/compute-zones.json",
    "content": "{\n  \"kind\": \"compute#zoneList\",\n  \"id\": \"projects/gcpdiag-vpc2-runbook/zones\",\n  \"items\": [\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2231\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east1-b\",\n      \"description\": \"us-east1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-east1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2233\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east1-c\",\n      \"description\": \"us-east1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-east1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2234\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east1-d\",\n      \"description\": \"us-east1-d\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-east1-d\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2272\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east4-c\",\n      \"description\": \"us-east4-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-east4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-east4-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2271\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east4-b\",\n      \"description\": \"us-east4-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-east4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-east4-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2270\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east4-a\",\n      \"description\": \"us-east4-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-east4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-east4-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2002\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1-c\",\n      \"description\": \"us-central1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-central1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Arm Development Platform\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2000\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1-a\",\n      \"description\": \"us-central1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-central1-a\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Arm Development Platform\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2004\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1-f\",\n      \"description\": \"us-central1-f\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-central1-f\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2001\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-central1-b\",\n      \"description\": \"us-central1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-central1-b\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2211\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west1-b\",\n      \"description\": \"us-west1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-west1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2212\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west1-c\",\n      \"description\": \"us-west1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-west1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2210\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west1-a\",\n      \"description\": \"us-west1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-west1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2342\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west4-a\",\n      \"description\": \"europe-west4-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west4-a\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2341\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west4-b\",\n      \"description\": \"europe-west4-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west4-b\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2340\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west4-c\",\n      \"description\": \"europe-west4-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west4-c\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2101\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west1-b\",\n      \"description\": \"europe-west1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2104\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west1-d\",\n      \"description\": \"europe-west1-d\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west1-d\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2103\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west1-c\",\n      \"description\": \"europe-west1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2300\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west3-c\",\n      \"description\": \"europe-west3-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west3-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2301\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west3-a\",\n      \"description\": \"europe-west3-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west3-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2302\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west3-b\",\n      \"description\": \"europe-west3-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west3-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2292\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west2-c\",\n      \"description\": \"europe-west2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2291\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west2-b\",\n      \"description\": \"europe-west2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2290\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west2-a\",\n      \"description\": \"europe-west2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2221\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east1-b\",\n      \"description\": \"asia-east1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-east1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2220\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east1-a\",\n      \"description\": \"asia-east1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-east1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2222\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east1-c\",\n      \"description\": \"asia-east1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-east1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2261\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast1-b\",\n      \"description\": \"asia-southeast1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-southeast1-b\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2260\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast1-a\",\n      \"description\": \"asia-southeast1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-southeast1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Ampere Siryn\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2262\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast1-c\",\n      \"description\": \"asia-southeast1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-southeast1-c\",\n      \"availableCpuPlatforms\": [\n        \"Ampere Altra\",\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2251\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast1-b\",\n      \"description\": \"asia-northeast1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-northeast1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2252\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast1-c\",\n      \"description\": \"asia-northeast1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-northeast1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2250\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast1-a\",\n      \"description\": \"asia-northeast1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-northeast1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2322\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south1-c\",\n      \"description\": \"asia-south1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-south1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2320\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south1-b\",\n      \"description\": \"asia-south1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-south1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2321\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south1-a\",\n      \"description\": \"asia-south1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-south1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2282\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast1-b\",\n      \"description\": \"australia-southeast1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/australia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/australia-southeast1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2280\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast1-c\",\n      \"description\": \"australia-southeast1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/australia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/australia-southeast1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2281\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast1-a\",\n      \"description\": \"australia-southeast1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/australia-southeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/australia-southeast1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2311\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-east1-b\",\n      \"description\": \"southamerica-east1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/southamerica-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/southamerica-east1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2312\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-east1-c\",\n      \"description\": \"southamerica-east1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/southamerica-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/southamerica-east1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2310\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-east1-a\",\n      \"description\": \"southamerica-east1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/southamerica-east1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/southamerica-east1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2611\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"africa-south1-a\",\n      \"description\": \"africa-south1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/africa-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/africa-south1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2610\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"africa-south1-b\",\n      \"description\": \"africa-south1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/africa-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/africa-south1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2612\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"africa-south1-c\",\n      \"description\": \"africa-south1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/africa-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/africa-south1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Cascade Lake\",\n        \"Intel Ice Lake\",\n        \"AMD Milan\",\n        \"AMD Rome\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2372\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east2-a\",\n      \"description\": \"asia-east2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-east2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-east2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2371\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east2-b\",\n      \"description\": \"asia-east2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-east2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-east2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2370\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-east2-c\",\n      \"description\": \"asia-east2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-east2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-east2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2392\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast2-a\",\n      \"description\": \"asia-northeast2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-northeast2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2390\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast2-b\",\n      \"description\": \"asia-northeast2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-northeast2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2391\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast2-c\",\n      \"description\": \"asia-northeast2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-northeast2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2410\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast3-a\",\n      \"description\": \"asia-northeast3-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-northeast3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-northeast3-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2412\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast3-b\",\n      \"description\": \"asia-northeast3-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-northeast3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-northeast3-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2411\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-northeast3-c\",\n      \"description\": \"asia-northeast3-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-northeast3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-northeast3-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2470\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south2-a\",\n      \"description\": \"asia-south2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-south2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-south2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2472\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south2-b\",\n      \"description\": \"asia-south2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-south2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-south2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2471\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-south2-c\",\n      \"description\": \"asia-south2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-south2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-south2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2440\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast2-a\",\n      \"description\": \"asia-southeast2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-southeast2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2442\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast2-b\",\n      \"description\": \"asia-southeast2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-southeast2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2441\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"asia-southeast2-c\",\n      \"description\": \"asia-southeast2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/asia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/asia-southeast2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2480\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast2-a\",\n      \"description\": \"australia-southeast2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/australia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/australia-southeast2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2482\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast2-b\",\n      \"description\": \"australia-southeast2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/australia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/australia-southeast2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2481\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"australia-southeast2-c\",\n      \"description\": \"australia-southeast2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/australia-southeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/australia-southeast2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2452\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-central2-a\",\n      \"description\": \"europe-central2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-central2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-central2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2450\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-central2-b\",\n      \"description\": \"europe-central2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-central2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-central2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2451\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-central2-c\",\n      \"description\": \"europe-central2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-central2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-central2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2352\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-north1-a\",\n      \"description\": \"europe-north1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-north1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-north1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2350\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-north1-b\",\n      \"description\": \"europe-north1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-north1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-north1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2351\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-north1-c\",\n      \"description\": \"europe-north1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-north1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-north1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2541\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-southwest1-a\",\n      \"description\": \"europe-southwest1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-southwest1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-southwest1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2540\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-southwest1-b\",\n      \"description\": \"europe-southwest1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-southwest1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-southwest1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2542\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-southwest1-c\",\n      \"description\": \"europe-southwest1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-southwest1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-southwest1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2591\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west10-a\",\n      \"description\": \"europe-west10-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west10\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west10-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2592\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west10-b\",\n      \"description\": \"europe-west10-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west10\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west10-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2590\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west10-c\",\n      \"description\": \"europe-west10-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west10\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west10-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2571\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west12-a\",\n      \"description\": \"europe-west12-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west12\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west12-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2572\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west12-b\",\n      \"description\": \"europe-west12-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west12\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west12-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2570\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west12-c\",\n      \"description\": \"europe-west12-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west12\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west12-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2382\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west6-a\",\n      \"description\": \"europe-west6-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west6\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west6-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2380\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west6-b\",\n      \"description\": \"europe-west6-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west6\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west6-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2381\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west6-c\",\n      \"description\": \"europe-west6-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west6\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west6-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2510\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west8-a\",\n      \"description\": \"europe-west8-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west8\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west8-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2511\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west8-b\",\n      \"description\": \"europe-west8-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west8\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west8-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2512\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west8-c\",\n      \"description\": \"europe-west8-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west8\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west8-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2521\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west9-a\",\n      \"description\": \"europe-west9-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west9\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west9-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2520\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west9-b\",\n      \"description\": \"europe-west9-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west9\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west9-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2522\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"europe-west9-c\",\n      \"description\": \"europe-west9-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/europe-west9\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/europe-west9-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2580\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central1-a\",\n      \"description\": \"me-central1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/me-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/me-central1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2581\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central1-b\",\n      \"description\": \"me-central1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/me-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/me-central1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2582\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central1-c\",\n      \"description\": \"me-central1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/me-central1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/me-central1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2601\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central2-a\",\n      \"description\": \"me-central2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/me-central2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/me-central2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2602\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central2-b\",\n      \"description\": \"me-central2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/me-central2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/me-central2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2600\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-central2-c\",\n      \"description\": \"me-central2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/me-central2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/me-central2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2561\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-west1-a\",\n      \"description\": \"me-west1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/me-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/me-west1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2560\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-west1-b\",\n      \"description\": \"me-west1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/me-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/me-west1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2562\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"me-west1-c\",\n      \"description\": \"me-west1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/me-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/me-west1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2330\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast1-a\",\n      \"description\": \"northamerica-northeast1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/northamerica-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/northamerica-northeast1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2331\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast1-b\",\n      \"description\": \"northamerica-northeast1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/northamerica-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/northamerica-northeast1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2332\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast1-c\",\n      \"description\": \"northamerica-northeast1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/northamerica-northeast1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/northamerica-northeast1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2461\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast2-a\",\n      \"description\": \"northamerica-northeast2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/northamerica-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/northamerica-northeast2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2460\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast2-b\",\n      \"description\": \"northamerica-northeast2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/northamerica-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/northamerica-northeast2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2462\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"northamerica-northeast2-c\",\n      \"description\": \"northamerica-northeast2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/northamerica-northeast2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/northamerica-northeast2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2490\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-west1-a\",\n      \"description\": \"southamerica-west1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/southamerica-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/southamerica-west1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2491\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-west1-b\",\n      \"description\": \"southamerica-west1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/southamerica-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/southamerica-west1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2492\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"southamerica-west1-c\",\n      \"description\": \"southamerica-west1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/southamerica-west1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/southamerica-west1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2532\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east5-a\",\n      \"description\": \"us-east5-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-east5\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-east5-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2531\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east5-b\",\n      \"description\": \"us-east5-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-east5\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-east5-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Emerald Rapids\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2530\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-east5-c\",\n      \"description\": \"us-east5-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-east5\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-east5-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2551\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-south1-a\",\n      \"description\": \"us-south1-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-south1-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2552\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-south1-b\",\n      \"description\": \"us-south1-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-south1-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2550\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-south1-c\",\n      \"description\": \"us-south1-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-south1\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-south1-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2362\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west2-a\",\n      \"description\": \"us-west2-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-west2-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2361\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west2-b\",\n      \"description\": \"us-west2-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-west2-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2360\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west2-c\",\n      \"description\": \"us-west2-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-west2\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-west2-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2420\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west3-a\",\n      \"description\": \"us-west3-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-west3-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2421\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west3-b\",\n      \"description\": \"us-west3-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-west3-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2422\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west3-c\",\n      \"description\": \"us-west3-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-west3\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-west3-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": true\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2431\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west4-a\",\n      \"description\": \"us-west4-a\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-west4-a\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"AMD Genoa\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Sapphire Rapids\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2432\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west4-b\",\n      \"description\": \"us-west4-b\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-west4-b\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    },\n    {\n      \"kind\": \"compute#zone\",\n      \"id\": \"2430\",\n      \"creationTimestamp\": \"1969-12-31T16:00:00.000-08:00\",\n      \"name\": \"us-west4-c\",\n      \"description\": \"us-west4-c\",\n      \"status\": \"UP\",\n      \"region\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/regions/us-west4\",\n      \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones/us-west4-c\",\n      \"availableCpuPlatforms\": [\n        \"Intel Broadwell\",\n        \"Intel Cascade Lake\",\n        \"Intel Haswell\",\n        \"Intel Ice Lake\",\n        \"Intel Ivy Bridge\",\n        \"AMD Milan\",\n        \"AMD Rome\",\n        \"Intel Sandy Bridge\",\n        \"Intel Skylake\"\n      ],\n      \"supportsPzs\": false\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpc2-runbook/zones\"\n}\n"
  },
  {
    "path": "test-data/vpc2/json-dumps/connectivity-test.json",
    "content": "{\n  \"name\": \"projects/gcpdiag-vpc2-runbook/locations/global/connectivityTests/vmexternalipconnectivitytest\",\n  \"source\": {\n    \"ipAddress\": \"10.10.0.3\",\n    \"network\": \"projects/gcpdiag-vpc2-runbook/global/networks/default\",\n    \"projectId\": \"gcpdiag-vpc2-runbook\",\n    \"cloudFunction\": {},\n    \"appEngineVersion\": {},\n    \"cloudRunRevision\": {}\n  },\n  \"destination\": {\n    \"ipAddress\": \"151.101.3.5\",\n    \"port\": 443,\n    \"networkType\": \"NON_GCP_NETWORK\",\n    \"cloudFunction\": {},\n    \"appEngineVersion\": {},\n    \"cloudRunRevision\": {}\n  },\n  \"protocol\": \"TCP\",\n  \"displayName\": \"vmexternalipconnectivitytest\",\n  \"createTime\": \"2024-05-31T16:02:44.883795965Z\",\n  \"updateTime\": \"2024-06-04T00:31:09.639861810Z\",\n  \"reachabilityDetails\": {\n    \"result\": \"REACHABLE\",\n    \"verifyTime\": \"2024-06-04T00:31:09.450544252Z\",\n    \"traces\": [\n      {\n        \"endpointInfo\": {\n          \"sourceIp\": \"10.10.0.3\",\n          \"destinationIp\": \"151.101.3.5\",\n          \"protocol\": \"TCP\",\n          \"sourcePort\": 63951,\n          \"destinationPort\": 443,\n          \"sourceNetworkUri\": \"projects/gcpdiag-vpc2-runbook/global/networks/default\"\n        },\n        \"steps\": [\n          {\n            \"description\": \"Initial state: packet originating from a Compute Engine instance.\",\n            \"state\": \"START_FROM_INSTANCE\",\n            \"projectId\": \"gcpdiag-vpc2-runbook\",\n            \"instance\": {\n              \"displayName\": \"private-linux-valid\",\n              \"uri\": \"projects/gcpdiag-vpc2-runbook/zones/us-central1-a/instances/private-linux-valid\",\n              \"interface\": \"nic0\",\n              \"networkUri\": \"projects/gcpdiag-vpc2-runbook/global/networks/default\",\n              \"internalIp\": \"10.10.0.3\",\n              \"networkTags\": [\n                \"valid-vpc-instance-private\"\n              ]\n            }\n          },\n          {\n            \"description\": \"Config checking state: verify EGRESS firewall rule.\",\n            \"state\": \"APPLY_EGRESS_FIREWALL_RULE\",\n            \"projectId\": \"gcpdiag-vpc2-runbook\",\n            \"firewall\": {\n              \"displayName\": \"private-linux-egress-allow\",\n              \"uri\": \"projects/gcpdiag-vpc2-runbook/global/firewalls/private-linux-egress-allow\",\n              \"direction\": \"EGRESS\",\n              \"action\": \"ALLOW\",\n              \"priority\": 920,\n              \"networkUri\": \"projects/gcpdiag-vpc2-runbook/global/networks/default\",\n              \"targetTags\": [\n                \"valid-vpc-instance-private\"\n              ],\n              \"firewallRuleType\": \"VPC_FIREWALL_RULE\"\n            }\n          },\n          {\n            \"description\": \"Config checking state: verify route.\",\n            \"state\": \"APPLY_ROUTE\",\n            \"projectId\": \"gcpdiag-vpc2-runbook\",\n            \"route\": {\n              \"displayName\": \"default-route-733dd203fb86133b\",\n              \"uri\": \"projects/gcpdiag-vpc2-runbook/global/routes/default-route-733dd203fb86133b\",\n              \"destIpRange\": \"0.0.0.0/0\",\n              \"nextHop\": \"internet gateway\",\n              \"networkUri\": \"projects/gcpdiag-vpc2-runbook/global/networks/default\",\n              \"priority\": 1000,\n              \"routeType\": \"STATIC\",\n              \"nextHopType\": \"NEXT_HOP_INTERNET_GATEWAY\",\n              \"routeScope\": \"NETWORK\"\n            }\n          },\n          {\n            \"description\": \"Transition state: packet header translated due to Cloud NAT and NAT IP chosen randomly from [34.123.41.124/32].\",\n            \"state\": \"NAT\",\n            \"projectId\": \"gcpdiag-vpc2-runbook\",\n            \"nat\": {\n              \"type\": \"CLOUD_NAT\",\n              \"protocol\": \"TCP\",\n              \"networkUri\": \"projects/gcpdiag-vpc2-runbook/global/networks/default\",\n              \"oldSourceIp\": \"10.10.0.3\",\n              \"newSourceIp\": \"34.123.41.124\",\n              \"oldDestinationIp\": \"151.101.3.5\",\n              \"newDestinationIp\": \"151.101.3.5\",\n              \"oldSourcePort\": 63951,\n              \"newSourcePort\": 49732,\n              \"oldDestinationPort\": 443,\n              \"newDestinationPort\": 443,\n              \"routerUri\": \"projects/gcpdiag-vpc2-runbook/regions/us-central1/routers/nat-router\",\n              \"natGatewayName\": \"nat-gateway\"\n            }\n          },\n          {\n            \"description\": \"Final state: packet delivered to Internet.\",\n            \"state\": \"DELIVER\",\n            \"deliver\": {\n              \"target\": \"INTERNET\",\n              \"ipAddress\": \"151.101.3.5\"\n            }\n          }\n        ],\n        \"forwardTraceId\": 1\n      }\n    ]\n  },\n  \"probingDetails\": {\n    \"result\": \"REACHABLE\",\n    \"verifyTime\": \"2024-06-04T00:30:59.820702Z\",\n    \"sentProbeCount\": 50,\n    \"successfulProbeCount\": 50,\n    \"probingLatency\": {\n      \"latencyPercentiles\": [\n        {\n          \"percent\": 50,\n          \"latencyMicros\": \"4940\"\n        },\n        {\n          \"percent\": 95,\n          \"latencyMicros\": \"5094\"\n        }\n      ]\n    },\n    \"destinationEgressLocation\": {\n      \"metropolitanArea\": \"Chicago, IL, US\"\n    }\n  }\n}\n"
  },
  {
    "path": "test-data/vpc2/json-dumps/iam-policy.json",
    "content": "{\n  \"bindings\": [\n    {\n      \"members\": [\n        \"serviceAccount:service-12345601@compute-system.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/compute.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12345601@container-engine-robot.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/container.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12345601@containerregistry.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/containerregistry.ServiceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:12345601-compute@developer.gserviceaccount.com\",\n        \"serviceAccount:12345601@cloudservices.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/editor\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12345601@gcp-sa-networkmanagement.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/networkmanagement.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"user:testuser@example.com\"\n      ],\n      \"role\": \"roles/owner\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12345601@gcp-sa-pubsub.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/pubsub.serviceAgent\"\n    },\n    {\n      \"members\": [\n        \"serviceAccount:service-12345601@gcp-sa-websecurityscanner.iam.gserviceaccount.com\"\n      ],\n      \"role\": \"roles/websecurityscanner.serviceAgent\"\n    }\n  ],\n  \"etag\": \"BwYZxH9u9WI=\",\n  \"version\": 1\n}\n"
  },
  {
    "path": "test-data/vpc2/json-dumps/iam-service-accounts.json",
    "content": "{\n  \"accounts\": [\n    {\n      \"displayName\": \"Compute Engine default service account\",\n      \"email\": \"12345601-compute@developer.gserviceaccount.com\",\n      \"etag\": \"MDEwMjE5MjA=\",\n      \"name\": \"projects/gcpdiag-vpc2-runbook/serviceAccounts/12345601-compute@developer.gserviceaccount.com\",\n      \"oauth2ClientId\": \"REDACTED\",\n      \"projectId\": \"gcpdiag-vpc2-runbook\",\n      \"uniqueId\": \"111906885506070469088\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/vpc2/json-dumps/monitoring-query-instance-dropped-received-packets-count.json",
    "content": "{\n  \"timeSeriesDescriptor\": {\n    \"labelDescriptors\": [\n      {\n        \"key\": \"resource.instance_id\"\n      }\n    ],\n    \"pointDescriptors\": [\n      {\n        \"key\": \"value_dropped_received_packets_count_aggregate\",\n        \"valueType\": \"DOUBLE\",\n        \"metricKind\": \"GAUGE\",\n        \"unit\": \"{packet}/s\"\n      }\n    ]\n  },\n  \"timeSeriesData\": [\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"7242411489568529174\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 0\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-06-03T23:26:31.812631Z\",\n            \"endTime\": \"2024-06-03T23:26:31.812631Z\"\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/vpc2/json-dumps/monitoring-query-nat-allocation-failed.json",
    "content": "{\n  \"timeSeriesDescriptor\": {\n    \"labelDescriptors\": [\n      {\n        \"key\": \"resource.project_id\"\n      },\n      {\n        \"key\": \"resource.region\"\n      },\n      {\n        \"key\": \"resource.router_id\"\n      },\n      {\n        \"key\": \"resource.gateway_name\"\n      }\n    ],\n    \"pointDescriptors\": [\n      {\n        \"key\": \"value.nat_allocation_failed\",\n        \"valueType\": \"BOOL\",\n        \"metricKind\": \"GAUGE\"\n      }\n    ]\n  },\n  \"timeSeriesData\": [\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"gcpdiag-vpc2-runbook\"\n        },\n        {\n          \"stringValue\": \"us-central1\"\n        },\n        {\n          \"stringValue\": \"3282795716781579009\"\n        },\n        {\n          \"stringValue\": \"nat-gateway\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"boolValue\": false\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-06-03T02:12:00Z\",\n            \"endTime\": \"2024-06-03T02:12:00Z\"\n          }\n        },\n        {\n          \"values\": [\n            {\n              \"boolValue\": false\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-06-03T02:11:00Z\",\n            \"endTime\": \"2024-06-03T02:11:00Z\"\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/vpc2/json-dumps/monitoring-query-nat-dropped-received-packets-count.json",
    "content": "{\n  \"timeSeriesDescriptor\": {\n    \"pointDescriptors\": [\n      {\n        \"key\": \"value_dropped_received_packets_count_aggregate\",\n        \"valueType\": \"DOUBLE\",\n        \"metricKind\": \"GAUGE\",\n        \"unit\": \"{packet}/s\"\n      }\n    ]\n  },\n  \"timeSeriesData\": [\n    {\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 0\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-06-03T22:38:30.599128Z\",\n            \"endTime\": \"2024-06-03T22:38:30.599128Z\"\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/vpc2/json-dumps/monitoring-query-nat-dropped-sent-packets-count.json",
    "content": "{\n  \"timeSeriesDescriptor\": {\n    \"labelDescriptors\": [\n      {\n        \"key\": \"metric.reason\"\n      }\n    ],\n    \"pointDescriptors\": [\n      {\n        \"key\": \"value_dropped_sent_packets_count_aggregate\",\n        \"valueType\": \"DOUBLE\",\n        \"metricKind\": \"GAUGE\",\n        \"unit\": \"{packet}/s\"\n      }\n    ]\n  },\n  \"timeSeriesData\": [\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"ENDPOINT_INDEPENDENCE_CONFLICT\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 0\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-06-03T22:37:27.897428Z\",\n            \"endTime\": \"2024-06-03T22:37:27.897428Z\"\n          }\n        }\n      ]\n    },\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"OUT_OF_RESOURCES\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 0\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2024-06-03T22:37:27.897428Z\",\n            \"endTime\": \"2024-06-03T22:37:27.897428Z\"\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/vpc2/json-dumps/project.json",
    "content": "{\n  \"name\": \"projects/12345602\",\n  \"parent\": \"folders/222222222222\",\n  \"projectId\": \"gcpdiag-vpc2-runbook\",\n  \"state\": \"ACTIVE\",\n  \"displayName\": \"gcpdiag-vpc2-runbook\",\n  \"createTime\": \"2024-05-31T04:17:56.682276Z\",\n  \"updateTime\": \"2024-05-31T04:17:56.682276Z\",\n  \"etag\": \"W/\\\"c4bf534f1f39f587\\\"\",\n  \"labels\": {\n    \"gcpdiag\": \"test\"\n  }\n}\n"
  },
  {
    "path": "test-data/vpc2/json-dumps/services.json",
    "content": "{\n  \"services\": [\n    {\n      \"name\": \"projects/12345601/services/analyticshub.googleapis.com\",\n      \"config\": {\n        \"name\": \"analyticshub.googleapis.com\",\n        \"title\": \"Analytics Hub API\",\n        \"documentation\": {\n          \"summary\": \"Exchange data and analytics assets securely and efficiently.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345601\"\n    },\n    {\n      \"name\": \"projects/12345601/services/artifactregistry.googleapis.com\",\n      \"config\": {\n        \"name\": \"artifactregistry.googleapis.com\",\n        \"title\": \"Artifact Registry API\",\n        \"documentation\": {\n          \"summary\": \"Store and manage build artifacts in a scalable and integrated service built on Google infrastructure.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"artifactregistry.googleapis.com/Location\",\n            \"displayName\": \"Artifact Registry Location\",\n            \"description\": \"A location in Artifact Registry.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP resource container associated with this resource, such as \\\"my_project\\\" or \\\"organizations/5678\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"artifactregistry.googleapis.com/Project\",\n            \"displayName\": \"Artifact Registry Project\",\n            \"description\": \"A Cloud project in Artifact Registry.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP resource container associated with this resource, such as \\\"my_project\\\" or \\\"organizations/5678\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"artifactregistry.googleapis.com/Repository\",\n            \"displayName\": \"Artifact Registry Repository\",\n            \"description\": \"A repository in Artifact Registry.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP resource container associated with this resource, such as \\\"my_project\\\" or \\\"organizations/5678\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              },\n              {\n                \"key\": \"repository_id\",\n                \"description\": \"The identifier of the Artifact Registry repository, such as \\\"my_repository\\\".\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"artifactregistry.googleapis.com/Location\",\n              \"metrics\": [\n                \"artifactregistry.googleapis.com/asia_multi_region_upstream_host_reads\",\n                \"artifactregistry.googleapis.com/europe_multi_region_upstream_host_reads\",\n                \"artifactregistry.googleapis.com/project_asia_multi_region_upstream_host_reads\",\n                \"artifactregistry.googleapis.com/project_europe_multi_region_upstream_host_reads\",\n                \"artifactregistry.googleapis.com/project_region_upstream_host_reads\",\n                \"artifactregistry.googleapis.com/project_us_multi_region_upstream_host_reads\",\n                \"artifactregistry.googleapis.com/quota/asia_multi_region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/asia_multi_region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/quota/europe_multi_region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/europe_multi_region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/quota/project_asia_multi_region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/project_asia_multi_region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/quota/project_europe_multi_region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/project_europe_multi_region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/quota/project_region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/project_region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/quota/project_us_multi_region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/project_us_multi_region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/quota/region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/quota/us_multi_region_upstream_host_reads/exceeded\",\n                \"artifactregistry.googleapis.com/quota/us_multi_region_upstream_host_reads/usage\",\n                \"artifactregistry.googleapis.com/region_upstream_host_reads\",\n                \"artifactregistry.googleapis.com/us_multi_region_upstream_host_reads\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"artifactregistry.googleapis.com/Location\",\n              \"metrics\": [\n                \"artifactregistry.googleapis.com/quota/asia_multi_region_upstream_host_reads/limit\",\n                \"artifactregistry.googleapis.com/quota/europe_multi_region_upstream_host_reads/limit\",\n                \"artifactregistry.googleapis.com/quota/project_asia_multi_region_upstream_host_reads/limit\",\n                \"artifactregistry.googleapis.com/quota/project_europe_multi_region_upstream_host_reads/limit\",\n                \"artifactregistry.googleapis.com/quota/project_region_upstream_host_reads/limit\",\n                \"artifactregistry.googleapis.com/quota/project_us_multi_region_upstream_host_reads/limit\",\n                \"artifactregistry.googleapis.com/quota/region_upstream_host_reads/limit\",\n                \"artifactregistry.googleapis.com/quota/us_multi_region_upstream_host_reads/limit\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"artifactregistry.googleapis.com/Project\",\n              \"metrics\": [\n                \"artifactregistry.googleapis.com/project/api/request_count\",\n                \"artifactregistry.googleapis.com/project/api/request_latencies\",\n                \"artifactregistry.googleapis.com/project/request_count\",\n                \"artifactregistry.googleapis.com/project/request_latencies\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"artifactregistry.googleapis.com/Repository\",\n              \"metrics\": [\n                \"artifactregistry.googleapis.com/repository/api/request_count\",\n                \"artifactregistry.googleapis.com/repository/api/request_latencies\",\n                \"artifactregistry.googleapis.com/repository/request_count\",\n                \"artifactregistry.googleapis.com/repository/request_latencies\",\n                \"artifactregistry.googleapis.com/repository/size\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345601\"\n    },\n    {\n      \"name\": \"projects/12345601/services/autoscaling.googleapis.com\",\n      \"config\": {\n        \"name\": \"autoscaling.googleapis.com\",\n        \"title\": \"Cloud Autoscaling API\",\n        \"documentation\": {\n          \"summary\": \"An API for the Cloud Autoscaling for consuming autoscaling signals.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345601\"\n    },\n    {\n      \"name\": \"projects/12345601/services/bigquery.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigquery.googleapis.com\",\n        \"title\": \"BigQuery API\",\n        \"documentation\": {\n          \"summary\": \"A data platform for customers to create, manage, share and query data.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"bigquery.googleapis.com/Table\",\n            \"displayName\": \"BigQuery Table Resource.\",\n            \"description\": \"BigQuery Table Resource.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP resource container associated with this resource, such as \\\"my-project\\\" or \\\"organizations/123\\\".\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The cloud location of the BigQuery table.\"\n              },\n              {\n                \"key\": \"table_reference\",\n                \"description\": \"The table reference in the format of project_id:dataset_id.table_id for the BigQuery table.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"bigquery.googleapis.com/Location\",\n            \"displayName\": \"CheckIamPolicy Request Location\",\n            \"description\": \"A BigQuery Location (sometimes called Region).\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The id of the GCP resource container associated with this resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"bigquery.googleapis.com/InternalDifferentialPrivacyBudget\",\n            \"displayName\": \"Differential Privacy Budget\",\n            \"description\": \"Differential Privacy Budget.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container associated with the metric.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location for the quota.\"\n              },\n              {\n                \"key\": \"budget_id\",\n                \"description\": \"A unique identifier for the budget basis of the privacy budget (e.g view_uuid for per-view budgets).\"\n              },\n              {\n                \"key\": \"multi_region\",\n                \"description\": \"The multi-region identifier for the associated resource (e.g \\\"us\\\", \\\"eu\\\"). Used only for multi-region quota metrics.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"bigquery.googleapis.com/ExternalDifferentialPrivacyBudget\",\n            \"displayName\": \"Differential Privacy Budget External\",\n            \"description\": \"Differential Privacy Budget exposed externally to provide privacy budget metrics.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container associated with the metric.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location for the quota.\"\n              },\n              {\n                \"key\": \"budget_id\",\n                \"description\": \"A unique identifier for the budget basis of the privacy budget (e.g view_uuid for per-view budgets).\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/Table\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_eu/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_us/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_eu/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_us/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/Location\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/quota/internalCheckIamPolicyRequests/exceeded\",\n                \"bigquery.googleapis.com/quota/internalCheckIamPolicyRequests/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/InternalDifferentialPrivacyBudget\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/internal/privacybudget/dp_delta_budget\",\n                \"bigquery.googleapis.com/internal/privacybudget/dp_delta_budget_multi_regional\",\n                \"bigquery.googleapis.com/internal/privacybudget/dp_epsilon_budget\",\n                \"bigquery.googleapis.com/internal/privacybudget/dp_epsilon_budget_multi_regional\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget_multi_regional/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget/exceeded\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget_multi_regional/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/Location\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/quota/internalCheckIamPolicyRequests/limit\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/Table\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org/limit\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org/usage\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_eu/limit\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_eu/usage\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_us/limit\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_org_us/usage\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project/limit\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project/usage\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_eu/limit\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_eu/usage\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_us/limit\",\n                \"bigquery.googleapis.com/quota/internal/table/base_table_bytes_for_free_indexing_per_project_us/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/InternalDifferentialPrivacyBudget\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget/limit\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget/usage\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget_multi_regional/limit\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_delta_budget_multi_regional/usage\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget/limit\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget/usage\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget_multi_regional/limit\",\n                \"bigquery.googleapis.com/quota/internal/privacybudget/dp_epsilon_budget_multi_regional/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/ExternalDifferentialPrivacyBudget\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/privacybudget/dp_delta_budget\",\n                \"bigquery.googleapis.com/privacybudget/dp_epsilon_budget\",\n                \"bigquery.googleapis.com/quota/privacybudget/dp_delta_budget/exceeded\",\n                \"bigquery.googleapis.com/quota/privacybudget/dp_epsilon_budget/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"bigquery.googleapis.com/ExternalDifferentialPrivacyBudget\",\n              \"metrics\": [\n                \"bigquery.googleapis.com/quota/privacybudget/dp_delta_budget/limit\",\n                \"bigquery.googleapis.com/quota/privacybudget/dp_delta_budget/usage\",\n                \"bigquery.googleapis.com/quota/privacybudget/dp_epsilon_budget/limit\",\n                \"bigquery.googleapis.com/quota/privacybudget/dp_epsilon_budget/usage\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345601\"\n    },\n    {\n      \"name\": \"projects/12345601/services/bigqueryconnection.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigqueryconnection.googleapis.com\",\n        \"title\": \"BigQuery Connection API\",\n        \"documentation\": {\n          \"summary\": \"Allows users to manage BigQuery connections to external data sources.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345601\"\n    },\n    {\n      \"name\": \"projects/12345601/services/bigquerydatapolicy.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigquerydatapolicy.googleapis.com\",\n        \"title\": \"BigQuery Data Policy API\",\n        \"documentation\": {\n          \"summary\": \"Allows users to manage BigQuery data policies.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345601\"\n    },\n    {\n      \"name\": \"projects/12345601/services/bigquerymigration.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigquerymigration.googleapis.com\",\n        \"title\": \"BigQuery Migration API\",\n        \"documentation\": {\n          \"summary\": \"The migration service, exposing apis for migration jobs operations, and agent management.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345601\"\n    },\n    {\n      \"name\": \"projects/12345601/services/bigqueryreservation.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigqueryreservation.googleapis.com\",\n        \"title\": \"BigQuery Reservation API\",\n        \"documentation\": {\n          \"summary\": \"A service to modify your BigQuery flat-rate reservations.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345601\"\n    },\n    {\n      \"name\": \"projects/12345601/services/bigquerystorage.googleapis.com\",\n      \"config\": {\n        \"name\": \"bigquerystorage.googleapis.com\",\n        \"title\": \"BigQuery Storage API\",\n        \"documentation\": {},\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"bigquerystorage.googleapis.com/DataflowWrite\",\n            \"displayName\": \"BigQuery Storage Write API metrics for Dataflow jobs.\",\n            \"description\": \"BigQuery Storage Write API metrics for Dataflow jobs.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project/folder/org associated with this resource. This is the project that runs the Dataflow job.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The BigQuery region in which the Storage API server locates.\"\n              },\n              {\n                \"key\": \"job_name\",\n                \"description\": \"The name of the Dataflow job this worker belongs to.\"\n              },\n              {\n                \"key\": \"job_id\",\n                \"description\": \"The id of the dataflow job the worker belongs to.\"\n              },\n              {\n                \"key\": \"worker_id\",\n                \"description\": \"The ID of the worker, unique for this job_id.\"\n              },\n              {\n                \"key\": \"destination_project\",\n                \"description\": \"The project of BigQuery destination table of the Dataflow job.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"bigquerystorage.googleapis.com/DataflowWrite\",\n              \"metrics\": [\n                \"bigquerystorage.googleapis.com/dataflow_write/request_count\",\n                \"bigquerystorage.googleapis.com/dataflow_write/uploaded_row_count\",\n                \"bigquerystorage.googleapis.com/dataflow_write/uploaded_bytes_count\",\n                \"bigquerystorage.googleapis.com/dataflow_write/billed_bytes_count\",\n                \"bigquerystorage.googleapis.com/dataflow_write/connection_results_count\",\n                \"bigquerystorage.googleapis.com/dataflow_write/server_side_latencies\",\n                \"bigquerystorage.googleapis.com/dataflow_write/transcoding_latencies\",\n                \"bigquerystorage.googleapis.com/dataflow_write/concurrent_connections\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345601\"\n    },\n    {\n      \"name\": \"projects/12345601/services/compute.googleapis.com\",\n      \"config\": {\n        \"name\": \"compute.googleapis.com\",\n        \"title\": \"Compute Engine API\",\n        \"documentation\": {\n          \"summary\": \"Creates and runs virtual machines on Google Cloud Platform.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"compute.googleapis.com/VpcNetwork\",\n            \"displayName\": \"VPC Network\",\n            \"description\": \"VPC Network.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the VPC Network.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the VPC Network, global always.\"\n              },\n              {\n                \"key\": \"network_id\",\n                \"description\": \"VPC Network resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Location\",\n            \"displayName\": \"Compute Location\",\n            \"description\": \"A location in the Compute API.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the Compute Location.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of resource.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Interconnect\",\n            \"displayName\": \"Interconnect\",\n            \"description\": \"Interconnect.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the Interconnect.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the Interconnect.\"\n              },\n              {\n                \"key\": \"interconnect_id\",\n                \"description\": \"Interconnect resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/FirewallPolicy\",\n            \"displayName\": \"Firewall policy\",\n            \"description\": \"Firewall policy.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project or organization) associated with the firewall policy.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the firewall policy.\"\n              },\n              {\n                \"key\": \"firewall_policy_id\",\n                \"description\": \"Firewall policy resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/OperationType\",\n            \"displayName\": \"Operation Type\",\n            \"description\": \"Operation Type.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the operation.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the operation.\"\n              },\n              {\n                \"key\": \"operation_type\",\n                \"description\": \"Operation type.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/Reservation\",\n            \"displayName\": \"Reservation\",\n            \"description\": \"Monitored resource representing a reservation.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container (e.g. project number) associated with the reservation.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The zone that contains the reservation.\"\n              },\n              {\n                \"key\": \"reservation_id\",\n                \"description\": \"Reservation resource ID.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/StoragePool\",\n            \"displayName\": \"Storage Pool\",\n            \"description\": \"Monitored resource representing a storage pool.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The GCP container (e.g. project number) associated with the reservation.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location that contains the storage pool.\"\n              },\n              {\n                \"key\": \"storage_pool_id\",\n                \"description\": \"Numerical resource ID of the storage pool.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"gce_instance\",\n            \"displayName\": \"VM Instance\",\n            \"description\": \"A virtual machine instance hosted in Compute Engine.\",\n            \"labels\": [\n              {\n                \"key\": \"project_id\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as \\\"my-project\\\".\"\n              },\n              {\n                \"key\": \"instance_id\",\n                \"description\": \"The numeric VM instance identifier assigned by Compute Engine.\"\n              },\n              {\n                \"key\": \"zone\",\n                \"description\": \"The Compute Engine zone in which the VM is running.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"compute.googleapis.com/SecurityPolicy\",\n            \"displayName\": \"Security policy\",\n            \"description\": \"Security policy.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP container (i.e. project) associated with the security policy.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Location of the security policy.\"\n              },\n              {\n                \"key\": \"security_policy_id\",\n                \"description\": \"Security policy resource ID.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/dynamic_routes_per_region_per_peering_group\",\n                \"compute.googleapis.com/global_internal_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/instances_per_peering_group\",\n                \"compute.googleapis.com/instances_per_vpc_network\",\n                \"compute.googleapis.com/internal_lb_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_lb_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_managed_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_managed_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/internal_protocol_forwarding_rules_per_peering_group\",\n                \"compute.googleapis.com/internal_protocol_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/ip_aliases_per_peering_group\",\n                \"compute.googleapis.com/ip_aliases_per_vpc_network\",\n                \"compute.googleapis.com/peerings_per_vpc_network\",\n                \"compute.googleapis.com/psc_google_apis_forwarding_rules_per_vpc_network\",\n                \"compute.googleapis.com/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network\",\n                \"compute.googleapis.com/psc_propagated_connections_per_vpc_network\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_accepted_connections_per_producer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_connections_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/exceeded\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/exceeded\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/exceeded\",\n                \"compute.googleapis.com/regional_external_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/regional_internal_managed_forwarding_rules_per_region_per_vpc_network\",\n                \"compute.googleapis.com/static_routes_per_peering_group\",\n                \"compute.googleapis.com/static_routes_per_vpc_network\",\n                \"compute.googleapis.com/subnet_ranges_per_peering_group\",\n                \"compute.googleapis.com/subnet_ranges_per_vpc_network\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Location\",\n              \"metrics\": [\n                \"compute.googleapis.com/cpus_per_vm_family\",\n                \"compute.googleapis.com/global_dns/request_count\",\n                \"compute.googleapis.com/gpus_per_gpu_family\",\n                \"compute.googleapis.com/inter_region_egress_bandwidth\",\n                \"compute.googleapis.com/local_ssd_total_storage_per_vm_family\",\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/exceeded\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/exceeded\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/exceeded\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/usage\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/exceeded\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/exceeded\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/exceeded\",\n                \"compute.googleapis.com/quota/tpus_per_tpu_family/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Interconnect\",\n              \"metrics\": [\n                \"compute.googleapis.com/interconnect_attachments_per_interconnect\",\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/FirewallPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/fqdns_per_global_network_firewall_policy\",\n                \"compute.googleapis.com/fqdns_per_regional_network_firewall_policy\",\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/exceeded\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/exceeded\",\n                \"compute.googleapis.com/rule_attributes_per_global_network_firewall_policy\",\n                \"compute.googleapis.com/rule_attributes_per_regional_network_firewall_policy\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/OperationType\",\n              \"metrics\": [\n                \"compute.googleapis.com/global_concurrent_operations\",\n                \"compute.googleapis.com/quota/concurrent/global_concurrent_operations/exceeded\",\n                \"compute.googleapis.com/quota/concurrent/internal/global_concurrent_operations/combined_units\",\n                \"compute.googleapis.com/quota/concurrent/internal/regional_concurrent_operations/combined_units\",\n                \"compute.googleapis.com/quota/concurrent/regional_concurrent_operations/exceeded\",\n                \"compute.googleapis.com/regional_concurrent_operations\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"gce_instance\",\n              \"metrics\": [\n                \"compute.googleapis.com/instance/global_dns/request_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Reservation\",\n              \"metrics\": [\n                \"compute.googleapis.com/reservation/reserved\",\n                \"compute.googleapis.com/reservation/assured\",\n                \"compute.googleapis.com/reservation/used\",\n                \"compute.googleapis.com/reservation/internal/matching_instances\",\n                \"compute.googleapis.com/reservation/internal/prespuns_by_state\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/StoragePool\",\n              \"metrics\": [\n                \"compute.googleapis.com/storage_pool/disks\",\n                \"compute.googleapis.com/storage_pool/provisioned_capacity\",\n                \"compute.googleapis.com/storage_pool/used_capacity\",\n                \"compute.googleapis.com/storage_pool/total_disk_provisioned_capacity\",\n                \"compute.googleapis.com/storage_pool/provisioned_iops\",\n                \"compute.googleapis.com/storage_pool/used_iops\",\n                \"compute.googleapis.com/storage_pool/total_disk_provisioned_iops\",\n                \"compute.googleapis.com/storage_pool/provisioned_throughput\",\n                \"compute.googleapis.com/storage_pool/used_throughput\",\n                \"compute.googleapis.com/storage_pool/total_disk_provisioned_throughput\",\n                \"compute.googleapis.com/storage_pool/capacity_utilization\",\n                \"compute.googleapis.com/storage_pool/iops_utilization\",\n                \"compute.googleapis.com/storage_pool/throughput_utilization\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Location\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/limit\",\n                \"compute.googleapis.com/quota/asynchronously_replicating_disk_pairs_per_project_region_pair/usage\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/cpus_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/limit\",\n                \"compute.googleapis.com/quota/gpus_per_gpu_family/usage\",\n                \"compute.googleapis.com/quota/inter_region_egress_bandwidth/limit\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/local_ssd_total_storage_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/limit\",\n                \"compute.googleapis.com/quota/preemptible_gpus_per_gpu_family/usage\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/limit\",\n                \"compute.googleapis.com/quota/rdma_networking_cards_per_vm_family/usage\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/limit\",\n                \"compute.googleapis.com/quota/reserved_resource_per_aggregate_reservation_per_cluster/usage\",\n                \"compute.googleapis.com/quota/tpus_per_tpu_family/limit\",\n                \"compute.googleapis.com/quota/tpus_per_tpu_family/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/VpcNetwork\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_other_regions_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/cloud_router_prefixes_from_own_region_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/dynamic_routes_per_region_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/global_internal_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/limit\",\n                \"compute.googleapis.com/quota/global_network_firewall_policy_associations_per_vpc_network_system/usage\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/instances_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/instances_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_lb_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_managed_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/internal_protocol_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/ip_aliases_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/peerings_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_accepted_connections_per_producer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_accepted_connections_per_producer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_connections_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_connections_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_google_apis_forwarding_rules_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_ilb_consumer_forwarding_rules_per_producer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_incoming_connections_per_producer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_outgoing_connections_per_consumer_vpc_network/usage\",\n                \"compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/psc_propagated_connections_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_external_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_backend_services_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_fast_ip_move_domains_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_internal_managed_forwarding_rules_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/limit\",\n                \"compute.googleapis.com/quota/regional_network_firewall_policy_associations_per_region_per_vpc_network_system/usage\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/static_routes_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/static_routes_per_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_peering_group/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_regional_vpc_network/usage\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/limit\",\n                \"compute.googleapis.com/quota/subnet_ranges_per_vpc_network/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/Interconnect\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/limit\",\n                \"compute.googleapis.com/quota/interconnect_attachments_per_interconnect/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/FirewallPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/fqdns_per_global_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/fqdns_per_hierarchical_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/fqdns_per_regional_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/rule_attributes_per_global_network_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/rule_attributes_per_hierarchical_firewall_policy/usage\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/limit\",\n                \"compute.googleapis.com/quota/rule_attributes_per_regional_network_firewall_policy/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/OperationType\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/concurrent/global_concurrent_operations/limit\",\n                \"compute.googleapis.com/quota/concurrent/regional_concurrent_operations/limit\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/SecurityPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/exceeded\",\n                \"compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/exceeded\",\n                \"compute.googleapis.com/quota/advanced_rules_per_security_policy/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"compute.googleapis.com/SecurityPolicy\",\n              \"metrics\": [\n                \"compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/limit\",\n                \"compute.googleapis.com/quota/advanced_rules_per_edge_security_policy/usage\",\n                \"compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/limit\",\n                \"compute.googleapis.com/quota/advanced_rules_per_regional_security_policy/usage\",\n                \"compute.googleapis.com/quota/advanced_rules_per_security_policy/limit\",\n                \"compute.googleapis.com/quota/advanced_rules_per_security_policy/usage\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345601\"\n    },\n    {\n      \"name\": \"projects/12345601/services/container.googleapis.com\",\n      \"config\": {\n        \"name\": \"container.googleapis.com\",\n        \"title\": \"Kubernetes Engine API\",\n        \"documentation\": {\n          \"summary\": \"Builds and manages container-based applications, powered by the open source Kubernetes technology.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"container.googleapis.com/Cluster\",\n            \"displayName\": \"Kubernetes Cluster Limits\",\n            \"description\": \"Kubernetes Cluster.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"Project or organization.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Region or zone where the cluster was created.\"\n              },\n              {\n                \"key\": \"cluster_name\",\n                \"description\": \"Cluster name.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"container.googleapis.com/NodePool\",\n            \"displayName\": \"GKE Node Pool\",\n            \"description\": \"GKE Node Pool.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"Project or organization.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"Region or zone where the cluster was created.\"\n              },\n              {\n                \"key\": \"cluster_name\",\n                \"description\": \"Cluster name.\"\n              },\n              {\n                \"key\": \"node_pool_name\",\n                \"description\": \"Node pool name.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"container.googleapis.com/Cluster\",\n              \"metrics\": [\n                \"container.googleapis.com/quota/containers_per_cluster_autopilot\",\n                \"container.googleapis.com/quota/containers_per_cluster_standard\",\n                \"container.googleapis.com/quota/etcd_database_size_bytes\",\n                \"container.googleapis.com/quota/nodes_per_cluster\",\n                \"container.googleapis.com/quota/pods_per_cluster_autopilot\",\n                \"container.googleapis.com/quota/pods_per_cluster_standard\",\n                \"container.googleapis.com/quota/quota/containers_per_cluster_autopilot/exceeded\",\n                \"container.googleapis.com/quota/quota/containers_per_cluster_standard/exceeded\",\n                \"container.googleapis.com/quota/quota/etcd_database_size_bytes/exceeded\",\n                \"container.googleapis.com/quota/quota/etcd_database_size_gib/exceeded\",\n                \"container.googleapis.com/quota/quota/nodes_per_cluster/exceeded\",\n                \"container.googleapis.com/quota/quota/pods_per_cluster_autopilot/exceeded\",\n                \"container.googleapis.com/quota/quota/pods_per_cluster_standard/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"container.googleapis.com/NodePool\",\n              \"metrics\": [\n                \"container.googleapis.com/quota/nodes_per_node_pool\",\n                \"container.googleapis.com/quota/quota/nodes_per_node_pool/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"container.googleapis.com/Cluster\",\n              \"metrics\": [\n                \"container.googleapis.com/quota/quota/containers_per_cluster_autopilot/limit\",\n                \"container.googleapis.com/quota/quota/containers_per_cluster_autopilot/usage\",\n                \"container.googleapis.com/quota/quota/containers_per_cluster_standard/limit\",\n                \"container.googleapis.com/quota/quota/containers_per_cluster_standard/usage\",\n                \"container.googleapis.com/quota/quota/etcd_database_size_bytes/limit\",\n                \"container.googleapis.com/quota/quota/etcd_database_size_bytes/usage\",\n                \"container.googleapis.com/quota/quota/etcd_database_size_gib/limit\",\n                \"container.googleapis.com/quota/quota/etcd_database_size_gib/usage\",\n                \"container.googleapis.com/quota/quota/nodes_per_cluster/limit\",\n                \"container.googleapis.com/quota/quota/nodes_per_cluster/usage\",\n                \"container.googleapis.com/quota/quota/pods_per_cluster_autopilot/limit\",\n                \"container.googleapis.com/quota/quota/pods_per_cluster_autopilot/usage\",\n                \"container.googleapis.com/quota/quota/pods_per_cluster_standard/limit\",\n                \"container.googleapis.com/quota/quota/pods_per_cluster_standard/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"container.googleapis.com/NodePool\",\n              \"metrics\": [\n                \"container.googleapis.com/quota/quota/nodes_per_node_pool/limit\",\n                \"container.googleapis.com/quota/quota/nodes_per_node_pool/usage\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345601\"\n    },\n    {\n      \"name\": \"projects/12345601/services/containerfilesystem.googleapis.com\",\n      \"config\": {\n        \"name\": \"containerfilesystem.googleapis.com\",\n        \"title\": \"Container File System API\",\n        \"documentation\": {\n          \"summary\": \"Stream images stored in Artifact Registry to GKE\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345601\"\n    },\n    {\n      \"name\": \"projects/12345601/services/containerregistry.googleapis.com\",\n      \"config\": {\n        \"name\": \"containerregistry.googleapis.com\",\n        \"title\": \"Container Registry API\",\n        \"documentation\": {\n          \"summary\": \"Google Container Registry provides secure, private Docker image storage on Google Cloud Platform.  Our API follows the Docker Registry API specification, so we are fully compatible with the Docker CLI client, as well as standard tooling using the Docker Registry API.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345601\"\n    },\n    {\n      \"name\": \"projects/12345601/services/dataform.googleapis.com\",\n      \"config\": {\n        \"name\": \"dataform.googleapis.com\",\n        \"title\": \"Dataform API\",\n        \"documentation\": {\n          \"summary\": \"Service to develop, version control, and operationalize SQL pipelines in BigQuery.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345601\"\n    },\n    {\n      \"name\": \"projects/12345601/services/dataplex.googleapis.com\",\n      \"config\": {\n        \"name\": \"dataplex.googleapis.com\",\n        \"title\": \"Cloud Dataplex API\",\n        \"documentation\": {\n          \"summary\": \"Dataplex API is used to manage the lifecycle of data lakes.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"dataplex.googleapis.com/Lake\",\n            \"displayName\": \"Cloud Dataplex Lake\",\n            \"description\": \"A Cloud Dataplex Lake.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of GCP project associated with this resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The GCP region associated with this resource.\"\n              },\n              {\n                \"key\": \"lake_id\",\n                \"description\": \"The identifier of this Lake resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"dataplex.googleapis.com/Zone\",\n            \"displayName\": \"Cloud Dataplex Zone\",\n            \"description\": \"A Zone within a Cloud Dataplex Lake.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of GCP project associated with this resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The GCP region associated with this resource.\"\n              },\n              {\n                \"key\": \"lake_id\",\n                \"description\": \"The identifier of the Lake resource containing this resource.\"\n              },\n              {\n                \"key\": \"zone_id\",\n                \"description\": \"The identifier of this Zone resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"dataplex.googleapis.com/Asset\",\n            \"displayName\": \"Cloud Dataplex Asset\",\n            \"description\": \"An Asset within a Cloud Dataplex Lake.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of GCP project associated with this resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The GCP region associated with this resource.\"\n              },\n              {\n                \"key\": \"lake_id\",\n                \"description\": \"The identifier of the Lake resource containing this resource.\"\n              },\n              {\n                \"key\": \"zone_id\",\n                \"description\": \"The identifier of the Zone resource containing this resource.\"\n              },\n              {\n                \"key\": \"asset_id\",\n                \"description\": \"The identifier of this Asset resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"dataplex.googleapis.com/Environment\",\n            \"displayName\": \"Cloud Dataplex Environment\",\n            \"description\": \"An Environment within a Cloud Dataplex Lake.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of GCP project associated with this resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The GCP region associated with this resource.\"\n              },\n              {\n                \"key\": \"lake_id\",\n                \"description\": \"The identifier of the Lake resource containing this resource.\"\n              },\n              {\n                \"key\": \"environment_id\",\n                \"description\": \"The identifier of this Environment resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"dataplex.googleapis.com/Lake\",\n              \"metrics\": [\n                \"dataplex.googleapis.com/lake/requires_action\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"dataplex.googleapis.com/Zone\",\n              \"metrics\": [\n                \"dataplex.googleapis.com/zone/requires_action\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"dataplex.googleapis.com/Asset\",\n              \"metrics\": [\n                \"dataplex.googleapis.com/asset/requires_action\",\n                \"dataplex.googleapis.com/asset/active\",\n                \"dataplex.googleapis.com/asset/data_items\",\n                \"dataplex.googleapis.com/asset/data_size\",\n                \"dataplex.googleapis.com/asset/tables\",\n                \"dataplex.googleapis.com/asset/filesets\",\n                \"dataplex.googleapis.com/asset/entities_pending_bigquery_metadata_updates\",\n                \"dataplex.googleapis.com/asset/entities_pending_bigquery_iampolicy_updates\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345601\"\n    },\n    {\n      \"name\": \"projects/12345601/services/dns.googleapis.com\",\n      \"config\": {\n        \"name\": \"dns.googleapis.com\",\n        \"title\": \"Cloud DNS API\",\n        \"documentation\": {},\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/billing-enabled\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345601\"\n    },\n    {\n      \"name\": \"projects/12345601/services/gkebackup.googleapis.com\",\n      \"config\": {\n        \"name\": \"gkebackup.googleapis.com\",\n        \"title\": \"Backup for GKE API\",\n        \"documentation\": {\n          \"summary\": \"Backup for GKE is a managed Kubernetes workload backup and restore service\\nfor GKE clusters.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"gkebackup.googleapis.com/BackupPlan\",\n            \"displayName\": \"GKE Backup Plan\",\n            \"description\": \"A backup plan provides configuration, location, and management functions for a sequence of backups.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the Google Cloud container associated with the resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The Google Cloud location where this backupPlan resides.\"\n              },\n              {\n                \"key\": \"backup_plan_id\",\n                \"description\": \"The name of the backupPlan.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"gkebackup.googleapis.com/RestorePlan\",\n            \"displayName\": \"GKE Restore Plan\",\n            \"description\": \"A restore plan defines the configuration of a series of restore operations to be performed against backups which belong to the specified backup plan.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the Google Cloud container associated with the resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The Google Cloud location where this restorePlan resides.\"\n              },\n              {\n                \"key\": \"restore_plan_id\",\n                \"description\": \"The name of the restorePlan.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"gkebackup.googleapis.com/Project\",\n            \"displayName\": \"Backup for GKE Project\",\n            \"description\": \"A Project in the Backup for GKE API.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project associated with this resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The Google Cloud location of the resource.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"gkebackup.googleapis.com/BackupPlan\",\n              \"metrics\": [\n                \"gkebackup.googleapis.com/backup_created_count\",\n                \"gkebackup.googleapis.com/backup_deleted_count\",\n                \"gkebackup.googleapis.com/backup_completion_times\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"gkebackup.googleapis.com/RestorePlan\",\n              \"metrics\": [\n                \"gkebackup.googleapis.com/restore_created_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"gkebackup.googleapis.com/Project\",\n              \"metrics\": [\n                \"gkebackup.googleapis.com/internal/backup_plan_created_count\",\n                \"gkebackup.googleapis.com/internal/backup_plan_existence\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345601\"\n    },\n    {\n      \"name\": \"projects/12345601/services/iam.googleapis.com\",\n      \"config\": {\n        \"name\": \"iam.googleapis.com\",\n        \"title\": \"Identity and Access Management (IAM) API\",\n        \"documentation\": {\n          \"summary\": \"Manages identity and access control for Google Cloud resources, including the creation of service accounts, which you can use to authenticate to Google and make API calls. Enabling this API also enables the IAM Service Account Credentials API (iamcredentials.googleapis.com). However, disabling this API doesn't disable the IAM Service Account Credentials API.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"iam_service_account\",\n            \"displayName\": \"IAM Service Account\",\n            \"description\": \"An IAM Service Account.\",\n            \"labels\": [\n              {\n                \"key\": \"project_id\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"unique_id\",\n                \"description\": \"The unique_id of the service account.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"iam.googleapis.com/WorkloadIdentityPoolProvider\",\n            \"displayName\": \"Workload Identity Pool Provider\",\n            \"description\": \"A workload identity pool provider.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project associated with this resource, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location of the resource.\"\n              },\n              {\n                \"key\": \"pool_id\",\n                \"description\": \"The ID of the provider's workload identity pool parent resource.\"\n              },\n              {\n                \"key\": \"provider_id\",\n                \"description\": \"The ID of the workload identity pool provider resource.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"iam.googleapis.com/WorkforcePoolProvider\",\n            \"displayName\": \"Workforce Identity Pool Provider\",\n            \"description\": \"A workforce identity pool provider.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the Google Cloud organization associated with this resource.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location of the resource.\"\n              },\n              {\n                \"key\": \"pool_id\",\n                \"description\": \"The ID of the provider's workforce pool parent resource.\"\n              },\n              {\n                \"key\": \"provider_id\",\n                \"description\": \"The ID of the workforce pool provider resource.\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"iam.googleapis.com/WorkloadIdentityPoolProvider\",\n              \"metrics\": [\n                \"iam.googleapis.com/workload_identity_federation/count\",\n                \"iam.googleapis.com/workload_identity_federation/key_usage_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"iam_service_account\",\n              \"metrics\": [\n                \"iam.googleapis.com/service_account/authn_events_count\",\n                \"iam.googleapis.com/service_account/key/authn_events_count\",\n                \"iam.googleapis.com/service_account/authn_events_count_preprod\",\n                \"iam.googleapis.com/service_account/key/authn_events_count_preprod\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"iam.googleapis.com/WorkforcePoolProvider\",\n              \"metrics\": [\n                \"iam.googleapis.com/workforce_identity_federation/count\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345601\"\n    },\n    {\n      \"name\": \"projects/12345601/services/iamcredentials.googleapis.com\",\n      \"config\": {\n        \"name\": \"iamcredentials.googleapis.com\",\n        \"title\": \"IAM Service Account Credentials API\",\n        \"documentation\": {\n          \"summary\": \"Creates short-lived credentials for impersonating IAM service accounts. Disabling this API also disables the IAM API (iam.googleapis.com). However, enabling this API doesn't enable the IAM API.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345601\"\n    },\n    {\n      \"name\": \"projects/12345601/services/monitoring.googleapis.com\",\n      \"config\": {\n        \"name\": \"monitoring.googleapis.com\",\n        \"title\": \"Cloud Monitoring API\",\n        \"documentation\": {\n          \"summary\": \"Manages your Cloud Monitoring data and configurations.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"monitoring.googleapis.com/ChargedProject\",\n            \"displayName\": \"Cloud monitoring target\",\n            \"description\": \"A cloud monitoring specialization target schema of cloud.ChargedProject.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The monitored resource container. Could be project, workspace, etc.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The service-specific notion of location.\"\n              },\n              {\n                \"key\": \"service\",\n                \"description\": \"The name of the API service with which the data is associated (e.g.,'monitoring.googleapis.com').\"\n              }\n            ],\n            \"launchStage\": \"ALPHA\"\n          },\n          {\n            \"type\": \"monitoring.googleapis.com/MetricStatistics\",\n            \"displayName\": \"Metric Statistics\",\n            \"description\": \"Information about a user-written metric in Cloud Monitoring.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project to which the metric is written, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The cloud region where the metric was received.\"\n              },\n              {\n                \"key\": \"metric_type\",\n                \"description\": \"The metric type.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          },\n          {\n            \"type\": \"monitoring.googleapis.com/MetricIngestionAttribution\",\n            \"displayName\": \"Metric Ingestion Attribution\",\n            \"description\": \"Attribution for metric ingestion.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project to which the metric is written, such as 'my-project'.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The location of the resource that the metric ingestion was associated with, unless it was 'global', in which case this will be the cloud region where the metric was received.\"\n              },\n              {\n                \"key\": \"attribution_dimension\",\n                \"description\": \"The dimension used for attribution reporting. It is not recommended that aggregations are performed across dimensions because a single metric point can be recorded with multiple dimensions which could cause double counting. Currently only \\\"namespace\\\" and \\\"cluster\\\" are supported.\"\n              },\n              {\n                \"key\": \"attribution_id\",\n                \"description\": \"The attribution id of the source of the metric write.\"\n              }\n            ],\n            \"launchStage\": \"BETA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"monitoring.googleapis.com/ChargedProject\",\n              \"metrics\": [\n                \"monitoring.googleapis.com/billing/bytes_ingested\",\n                \"monitoring.googleapis.com/billing/samples_ingested\",\n                \"monitoring.googleapis.com/internal/billing/gke_enterprise_samples_ingested\",\n                \"monitoring.googleapis.com/internal/billing/non_chargeable_samples_ingested\",\n                \"monitoring.googleapis.com/internal/stats/filtered_sample_count\",\n                \"monitoring.googleapis.com/internal/stats/filtered_byte_count\",\n                \"monitoring.googleapis.com/internal/stats/metrics_queried_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"monitoring.googleapis.com/MetricStatistics\",\n              \"metrics\": [\n                \"monitoring.googleapis.com/collection/write_request_count\",\n                \"monitoring.googleapis.com/collection/write_request_point_count\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"monitoring.googleapis.com/MetricIngestionAttribution\",\n              \"metrics\": [\n                \"monitoring.googleapis.com/collection/attribution/sample_count\",\n                \"monitoring.googleapis.com/collection/attribution/write_sample_count\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345601\"\n    },\n    {\n      \"name\": \"projects/12345601/services/networkconnectivity.googleapis.com\",\n      \"config\": {\n        \"name\": \"networkconnectivity.googleapis.com\",\n        \"title\": \"Network Connectivity API\",\n        \"documentation\": {\n          \"summary\": \"This API enables connectivity with and between Google Cloud resources.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoredResources\": [\n          {\n            \"type\": \"networkconnectivity.googleapis.com/Hub\",\n            \"displayName\": \"Network Connectivity Hub\",\n            \"description\": \"A Network Connectivity hub.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP resource container that this hub is in.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The identifier of the location that this hub is in.\"\n              },\n              {\n                \"key\": \"hub_id\",\n                \"description\": \"The identifier of this hub.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          },\n          {\n            \"type\": \"networkconnectivity.googleapis.com/RouteTable\",\n            \"displayName\": \"Network Connectivity Route Table\",\n            \"description\": \"A route table associated with a Network Connectivity hub.\",\n            \"labels\": [\n              {\n                \"key\": \"resource_container\",\n                \"description\": \"The identifier of the GCP project associated with this route table.\"\n              },\n              {\n                \"key\": \"location\",\n                \"description\": \"The identifier of the location that this route table is in.\"\n              },\n              {\n                \"key\": \"hub_id\",\n                \"description\": \"The identifier of the hub that is associated with this route table.\"\n              },\n              {\n                \"key\": \"route_table_id\",\n                \"description\": \"The identifier of this route table.\"\n              }\n            ],\n            \"launchStage\": \"GA\"\n          }\n        ],\n        \"monitoring\": {\n          \"consumerDestinations\": [\n            {\n              \"monitoredResource\": \"networkconnectivity.googleapis.com/Hub\",\n              \"metrics\": [\n                \"networkconnectivity.googleapis.com/active_vpc_spokes_per_hub\",\n                \"networkconnectivity.googleapis.com/groups_per_hub\",\n                \"networkconnectivity.googleapis.com/quota/active_vpc_spokes_per_hub/exceeded\",\n                \"networkconnectivity.googleapis.com/quota/groups_per_hub/exceeded\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"networkconnectivity.googleapis.com/RouteTable\",\n              \"metrics\": [\n                \"networkconnectivity.googleapis.com/quota/routes_per_route_table/exceeded\",\n                \"networkconnectivity.googleapis.com/routes_per_route_table\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"networkconnectivity.googleapis.com/Hub\",\n              \"metrics\": [\n                \"networkconnectivity.googleapis.com/quota/active_vpc_spokes_per_hub/limit\",\n                \"networkconnectivity.googleapis.com/quota/active_vpc_spokes_per_hub/usage\",\n                \"networkconnectivity.googleapis.com/quota/groups_per_hub/limit\",\n                \"networkconnectivity.googleapis.com/quota/groups_per_hub/usage\"\n              ]\n            },\n            {\n              \"monitoredResource\": \"networkconnectivity.googleapis.com/RouteTable\",\n              \"metrics\": [\n                \"networkconnectivity.googleapis.com/quota/routes_per_route_table/limit\",\n                \"networkconnectivity.googleapis.com/quota/routes_per_route_table/usage\"\n              ]\n            }\n          ]\n        }\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345601\"\n    },\n    {\n      \"name\": \"projects/12345601/services/networkmanagement.googleapis.com\",\n      \"config\": {\n        \"name\": \"networkmanagement.googleapis.com\",\n        \"title\": \"Network Management API\",\n        \"documentation\": {\n          \"summary\": \"The Network Management API provides a collection of network performance monitoring and diagnostic capabilities.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\",\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345601\"\n    },\n    {\n      \"name\": \"projects/12345601/services/oslogin.googleapis.com\",\n      \"config\": {\n        \"name\": \"oslogin.googleapis.com\",\n        \"title\": \"Cloud OS Login API\",\n        \"documentation\": {\n          \"summary\": \"You can use OS Login to manage access to your VM instances using IAM roles.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345601\"\n    },\n    {\n      \"name\": \"projects/12345601/services/pubsub.googleapis.com\",\n      \"config\": {\n        \"name\": \"pubsub.googleapis.com\",\n        \"title\": \"Cloud Pub/Sub API\",\n        \"documentation\": {\n          \"summary\": \"Provides reliable, many-to-many, asynchronous messaging between applications.\\n\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345601\"\n    },\n    {\n      \"name\": \"projects/12345601/services/storage-api.googleapis.com\",\n      \"config\": {\n        \"name\": \"storage-api.googleapis.com\",\n        \"title\": \"Google Cloud Storage JSON API\",\n        \"documentation\": {\n          \"summary\": \"Lets you store and retrieve potentially-large, immutable data objects.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345601\"\n    },\n    {\n      \"name\": \"projects/12345601/services/websecurityscanner.googleapis.com\",\n      \"config\": {\n        \"name\": \"websecurityscanner.googleapis.com\",\n        \"title\": \"Web Security Scanner API\",\n        \"documentation\": {\n          \"summary\": \"Scans your Compute and App Engine apps for common web vulnerabilities.\"\n        },\n        \"quota\": {},\n        \"authentication\": {},\n        \"usage\": {\n          \"requirements\": [\n            \"serviceusage.googleapis.com/tos/cloud\"\n          ]\n        },\n        \"monitoring\": {}\n      },\n      \"state\": \"ENABLED\",\n      \"parent\": \"projects/12345601\"\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/vpc2/network.tf",
    "content": "/**\n * Copyright 2023 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n# Public Subnet\nresource \"google_compute_subnetwork\" \"public_subnet\" {\n  name          = \"public-subnet\"\n  project       = google_project.project.project_id\n  network       = \"default\"\n  ip_cidr_range = \"10.0.0.0/24\" # Adjust as needed\n  region        = var.region\n}\n\n# Private Subnet\nresource \"google_compute_subnetwork\" \"private_subnet\" {\n  name          = \"private-subnet\"\n  project       = google_project.project.project_id\n  network       = \"default\"\n  ip_cidr_range = \"10.10.0.0/24\" # Adjust as needed\n  region        = var.region\n}\n\n\n\n# Cloud Router\nresource \"google_compute_router\" \"nat_router\" {\n  name    = \"nat-router\"\n  region  = var.region\n  network = \"default\"\n  project = google_project.project.project_id\n}\n\n# Cloud NAT Gateway\nresource \"google_compute_router_nat\" \"nat_gateway\" {\n  name                               = \"nat-gateway\"\n  router                             = google_compute_router.nat_router.name\n  region                             = var.region\n  nat_ip_allocate_option             = \"AUTO_ONLY\" # Allocate ephemeral IP automatically\n  source_subnetwork_ip_ranges_to_nat = \"ALL_SUBNETWORKS_ALL_IP_RANGES\"\n  project                            = google_project.project.project_id\n\n  log_config {\n    enable = true\n    filter = \"ERRORS_ONLY\"\n  }\n}\n"
  },
  {
    "path": "test-data/vpc2/project.tf",
    "content": "/**\n * Copyright 2021 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nresource \"random_string\" \"project_id_suffix\" {\n  length  = 8\n  numeric = true\n  lower   = true\n  upper   = false\n  special = false\n}\n\nresource \"google_project\" \"project\" {\n  name       = \"gcpdiag-vpc2-runbook\"\n  project_id = var.project_id != \"\" ? var.project_id : \"gcpdiag-vpc2-${random_string.project_id_suffix.id}\"\n  org_id     = var.folder_id == \"\" ? var.org_id : null\n  folder_id  = var.folder_id != \"\" ? var.folder_id : null\n  //billing_account = var.billing_account_id\n  labels = {\n    gcpdiag : \"test\"\n  }\n  lifecycle {\n    ignore_changes = all\n  }\n\n}\n\nresource \"google_project_service\" \"compute\" {\n  project = google_project.project.project_id\n  service = \"compute.googleapis.com\"\n}\n\ndata \"google_compute_default_service_account\" \"default\" {\n  project    = google_project.project.project_id\n  depends_on = [google_project_service.compute]\n}\n\n\noutput \"project_id\" {\n  value = google_project.project.project_id\n}\n\noutput \"project_id_suffix\" {\n  value = random_string.project_id_suffix.id\n}\n\noutput \"project_nr\" {\n  value = google_project.project.number\n}\n\noutput \"org_id\" {\n  value = var.org_id\n}\n"
  },
  {
    "path": "test-data/vpc2/variables.tf",
    "content": "/**\n * Copyright 2023 Google LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nvariable \"org_id\" {}\n\nvariable \"project_id\" {\n  //default = \"use-an-existing-test-project\"\n}\n\nvariable \"billing_account_id\" {}\n\nvariable \"region\" {\n  default = \"us-central1\"\n}\n\nvariable \"zone\" {\n  default = \"us-central1-a\"\n}\n\nvariable \"folder_id\" { default = \"\" }\n\nvariable \"roles\" {\n  description = \"List of SSH related roles to assign\"\n  type        = list(string)\n  default = [\n    \"roles/owner\",\n    \"roles/compute.osLogin\",\n    \"roles/compute.osAdminLogin\",\n    \"roles/iam.serviceAccountUser\",\n    \"roles/iap.tunnelResourceAccessor\",\n    \"roles/compute.instanceAdmin.v1\",\n  ]\n}\n"
  },
  {
    "path": "test-data/vpn/json-dumps/compute-project.json",
    "content": "{\n  \"commonInstanceMetadata\": {\n    \"fingerprint\": \"5WfGmP2rsbA=\",\n    \"items\": [\n      {\n        \"key\": \"serial-port-logging-enable\",\n        \"value\": \"true\"\n      },\n      {\n        \"key\": \"gke-gke1-f36cf6dd-cidr\",\n        \"value\": \"default:10.0.0.0/14\"\n      }\n    ],\n    \"kind\": \"compute#metadata\"\n  },\n  \"creationTimestamp\": \"2022-04-26T08:19:36.093-07:00\",\n  \"defaultNetworkTier\": \"PREMIUM\",\n  \"defaultServiceAccount\": \"12340001-compute@developer.gserviceaccount.com\",\n  \"id\": \"7145890083999429480\",\n  \"kind\": \"compute#project\",\n  \"name\": \"gcpdiag-vpn1-aaaa\",\n  \"quotas\": [\n    {\n      \"limit\": 10000,\n      \"metric\": \"SNAPSHOTS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 30,\n      \"metric\": \"NETWORKS\",\n      \"usage\": 1\n    },\n    {\n      \"limit\": 500,\n      \"metric\": \"FIREWALLS\",\n      \"usage\": 8\n    },\n    {\n      \"limit\": 5000,\n      \"metric\": \"IMAGES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 175,\n      \"metric\": \"STATIC_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 300,\n      \"metric\": \"ROUTES\",\n      \"usage\": 5\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"FORWARDING_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 500,\n      \"metric\": \"TARGET_POOLS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 500,\n      \"metric\": \"HEALTH_CHECKS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 575,\n      \"metric\": \"IN_USE_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 500,\n      \"metric\": \"TARGET_INSTANCES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_HTTP_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"URL_MAPS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"BACKEND_SERVICES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1000,\n      \"metric\": \"INSTANCE_TEMPLATES\",\n      \"usage\": 2\n    },\n    {\n      \"limit\": 50,\n      \"metric\": \"TARGET_VPN_GATEWAYS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"VPN_TUNNELS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 30,\n      \"metric\": \"BACKEND_BUCKETS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 20,\n      \"metric\": \"ROUTERS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_SSL_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_HTTPS_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"SSL_CERTIFICATES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 275,\n      \"metric\": \"SUBNETWORKS\",\n      \"usage\": 35\n    },\n    {\n      \"limit\": 100,\n      \"metric\": \"TARGET_TCP_PROXIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 10,\n      \"metric\": \"SECURITY_POLICIES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 200,\n      \"metric\": \"SECURITY_POLICY_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1000,\n      \"metric\": \"XPN_SERVICE_PROJECTS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"PACKET_MIRRORINGS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1000,\n      \"metric\": \"NETWORK_ENDPOINT_GROUPS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 6,\n      \"metric\": \"INTERCONNECTS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 5000,\n      \"metric\": \"GLOBAL_INTERNAL_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 50,\n      \"metric\": \"VPN_GATEWAYS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 5000,\n      \"metric\": \"MACHINE_IMAGES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 20,\n      \"metric\": \"SECURITY_POLICY_CEVAL_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 50,\n      \"metric\": \"EXTERNAL_VPN_GATEWAYS\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1,\n      \"metric\": \"PUBLIC_ADVERTISED_PREFIXES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 10,\n      \"metric\": \"PUBLIC_DELEGATED_PREFIXES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 1024,\n      \"metric\": \"STATIC_BYOIP_ADDRESSES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"INTERNAL_TRAFFIC_DIRECTOR_FORWARDING_RULES\",\n      \"usage\": 0\n    },\n    {\n      \"limit\": 150,\n      \"metric\": \"GLOBAL_EXTERNAL_MANAGED_FORWARDING_RULES\",\n      \"usage\": 0\n    }\n  ],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpn1-aaaa\",\n  \"xpnProjectStatus\": \"UNSPECIFIED_XPN_PROJECT_STATUS\"\n}\n"
  },
  {
    "path": "test-data/vpn/json-dumps/logging-entries-1.json",
    "content": "{\n  \"entries\": [\n  ]\n}\n"
  },
  {
    "path": "test-data/vpn/json-dumps/monitoring-query.json",
    "content": "{\n  \"timeSeriesDescriptor\": {\n    \"labelDescriptors\": [\n      {\n        \"key\": \"resource.zone\"\n      },\n      {\n        \"key\": \"metric.instance_name\"\n      }\n    ],\n    \"pointDescriptors\": [\n      {\n        \"key\": \"value_uptime_total_aggregate_mean\",\n        \"valueType\": \"DOUBLE\",\n        \"metricKind\": \"GAUGE\",\n        \"unit\": \"s\"\n      },\n      {\n        \"key\": \"value_uptime_total_aggregate_count\",\n        \"valueType\": \"INT64\",\n        \"metricKind\": \"GAUGE\",\n        \"unit\": \"1\"\n      }\n    ]\n  },\n  \"timeSeriesData\": [\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"europe-west4-a\"\n        },\n        {\n          \"stringValue\": \"mig-7pvl\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 70829\n            },\n            {\n              \"int64Value\": \"4\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2022-04-27T11:05:16.345995Z\",\n            \"endTime\": \"2022-04-27T11:05:16.345995Z\"\n          }\n        },\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 70559\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2022-04-27T11:00:16.345995Z\",\n            \"endTime\": \"2022-04-27T11:00:16.345995Z\"\n          }\n        }\n      ]\n    },\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"europe-west4-a\"\n        },\n        {\n          \"stringValue\": \"mig-4h21\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 70829\n            },\n            {\n              \"int64Value\": \"4\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2022-04-27T11:05:16.345995Z\",\n            \"endTime\": \"2022-04-27T11:05:16.345995Z\"\n          }\n        },\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 70559\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2022-04-27T11:00:16.345995Z\",\n            \"endTime\": \"2022-04-27T11:00:16.345995Z\"\n          }\n        }\n      ]\n    },\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"europe-west4-a\"\n        },\n        {\n          \"stringValue\": \"gce2\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 70889\n            },\n            {\n              \"int64Value\": \"4\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2022-04-27T11:05:16.345995Z\",\n            \"endTime\": \"2022-04-27T11:05:16.345995Z\"\n          }\n        },\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 70619\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2022-04-27T11:00:16.345995Z\",\n            \"endTime\": \"2022-04-27T11:00:16.345995Z\"\n          }\n        }\n      ]\n    },\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"europe-west4-a\"\n        },\n        {\n          \"stringValue\": \"gce1\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 70889\n            },\n            {\n              \"int64Value\": \"4\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2022-04-27T11:05:16.345995Z\",\n            \"endTime\": \"2022-04-27T11:05:16.345995Z\"\n          }\n        },\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 70619\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2022-04-27T11:00:16.345995Z\",\n            \"endTime\": \"2022-04-27T11:00:16.345995Z\"\n          }\n        }\n      ]\n    },\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"europe-west1-b\"\n        },\n        {\n          \"stringValue\": \"gke-gke1-default-pool-35923fbc-k05c\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 70829\n            },\n            {\n              \"int64Value\": \"4\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2022-04-27T11:05:16.345995Z\",\n            \"endTime\": \"2022-04-27T11:05:16.345995Z\"\n          }\n        },\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 70559\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2022-04-27T11:00:16.345995Z\",\n            \"endTime\": \"2022-04-27T11:00:16.345995Z\"\n          }\n        }\n      ]\n    },\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"europe-west1-b\"\n        },\n        {\n          \"stringValue\": \"gke-gke1-default-pool-35923fbc-fv50\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 70770\n            },\n            {\n              \"int64Value\": \"4\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2022-04-27T11:05:16.345995Z\",\n            \"endTime\": \"2022-04-27T11:05:16.345995Z\"\n          }\n        },\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 70500\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2022-04-27T11:00:16.345995Z\",\n            \"endTime\": \"2022-04-27T11:00:16.345995Z\"\n          }\n        }\n      ]\n    },\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"europe-west1-b\"\n        },\n        {\n          \"stringValue\": \"gke-gke1-default-pool-35923fbc-c12f\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 70829\n            },\n            {\n              \"int64Value\": \"4\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2022-04-27T11:05:16.345995Z\",\n            \"endTime\": \"2022-04-27T11:05:16.345995Z\"\n          }\n        },\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 70559\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2022-04-27T11:00:16.345995Z\",\n            \"endTime\": \"2022-04-27T11:00:16.345995Z\"\n          }\n        }\n      ]\n    },\n    {\n      \"labelValues\": [\n        {\n          \"stringValue\": \"europe-west1-b\"\n        },\n        {\n          \"stringValue\": \"gke-gke1-default-pool-35923fbc-2xxp\"\n        }\n      ],\n      \"pointData\": [\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 70769\n            },\n            {\n              \"int64Value\": \"4\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2022-04-27T11:05:16.345995Z\",\n            \"endTime\": \"2022-04-27T11:05:16.345995Z\"\n          }\n        },\n        {\n          \"values\": [\n            {\n              \"doubleValue\": 70499\n            },\n            {\n              \"int64Value\": \"5\"\n            }\n          ],\n          \"timeInterval\": {\n            \"startTime\": \"2022-04-27T11:00:16.345995Z\",\n            \"endTime\": \"2022-04-27T11:00:16.345995Z\"\n          }\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": "test-data/vpn/json-dumps/project.json",
    "content": "{\n  \"name\": \"projects/12340001\",\n  \"parent\": \"organizations/11112222\",\n  \"projectId\": \"gcpdiag-vpn1-aaaa\",\n  \"state\": \"ACTIVE\",\n  \"displayName\": \"gcpdiag test - gce1\",\n  \"createTime\": \"2022-04-26T15:18:57.559Z\",\n  \"updateTime\": \"2022-04-26T15:18:59.029Z\",\n  \"etag\": \"MQV1kuwMB6N2UKQqCiihhA==\",\n  \"labels\": {\n    \"gcpdiag\": \"test\"\n  }\n}\n"
  },
  {
    "path": "test-data/vpn/json-dumps/vpn-tunnel-1.json",
    "content": "{\n  \"name\": \"vpn-tunnel-1\",\n  \"id\": \"123456789\",\n  \"status\": \"ESTABLISHED\",\n  \"peerIp\": \"1.1.1.1\",\n  \"router\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpn1-aaaa/regions/europe-west4/routers/r1\",\n  \"localTrafficSelector\": [\"0.0.0.0/0\"],\n  \"remoteTrafficSelector\": [\"0.0.0.0/0\"],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpn1-aaaa/regions/europe-west4-a/vpnTunnels/vpn-tunnel-1\"\n}\n"
  },
  {
    "path": "test-data/vpn/json-dumps/vpn-tunnel-down.json",
    "content": "{\n  \"name\": \"vpn-tunnel-down\",\n  \"id\": \"987654321\",\n  \"status\": \"FIRST_HANDSHAKE\",\n  \"peerIp\": \"1.1.1.1\",\n  \"router\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpn1-aaaa/regions/europe-west4/routers/r1\",\n  \"localTrafficSelector\": [\"0.0.0.0/0\"],\n  \"remoteTrafficSelector\": [\"0.0.0.0/0\"],\n  \"selfLink\": \"https://www.googleapis.com/compute/v1/projects/gcpdiag-vpn1-aaaa/regions/europe-west4-a/vpnTunnels/vpn-tunnel-down\"\n}\n"
  },
  {
    "path": "test-data/web/Makefile",
    "content": "CURL         =  exec curl\n\nall:\t\\\n\tstatic/cloud-google-com-kubernetes-engine-docs-release-schedule \\\n\tstatic/cloud-google-com-data-fusion-docs-support-version-support-policy \\\n\tstatic/cloud-google-com-data-fusion-docs-concepts-configure-clusters\n\nstatic/cloud-google-com-data-fusion-docs-concepts-configure-clusters-test:\n\t$(CURL) -fsS \\\n\t\t'https://cloud.google.com/data-fusion/docs/concepts/configure-clusters' \\\n\t\t--header \"Content-Type:text/html\" > $@\n\nstatic/cloud-google-com-data-fusion-docs-support-version-support-policy-test:\n\t$(CURL) -fsS \\\n\t\t'https://cloud.google.com/data-fusion/docs/support/version-support-policy' \\\n\t\t--header \"Content-Type:text/html\" > $@\n\nstatic/cloud-google-com-kubernetes-engine-docs-release-schedule-test:\n\t$(CURL) -fsS \\\n\t\t'https://cloud.google.com/kubernetes-engine/docs/release-schedule' \\\n\t\t--header \"Content-Type:text/html\" > $@\n"
  },
  {
    "path": "test-data/web/static/cloud-google-com-data-fusion-docs-concepts-configure-clusters",
    "content": "<!doctype html>\n<html lang=\"en\" dir=\"ltr\">\n  <head>\n    <link rel=\"stylesheet\" href=\"/extras.css\" />\n  </head>\n  <body\n    class=\"\"\n    template=\"page\"\n    theme=\"cloud-theme\"\n    type=\"article\"\n    layout=\"docs\"\n    free-trial\n    display-toc\n    pending\n  >\n    <h1 class=\"devsite-page-title\" tabindex=\"-1\">Dataproc cluster configuration</h1>\n    <devsite-feature-tooltip\n      ack-key=\"AckCollectionsBookmarkTooltipDismiss\"\n      analytics-category=\"Site-Wide Custom Events\"\n      analytics-action-show=\"Callout Profile displayed\"\n      analytics-action-close=\"Callout Profile dismissed\"\n      analytics-label=\"Create Collection Callout\"\n      class=\"devsite-page-bookmark-tooltip nocontent\"\n      dismiss-button=\"true\"\n      id=\"devsite-collections-dropdown\"\n      dismiss-button-text=\"Dismiss\"\n      close-button-text=\"Got it\"\n    >\n      <devsite-bookmark></devsite-bookmark>\n\n      <span slot=\"popout-heading\"> Stay organized with collections </span>\n      <span slot=\"popout-contents\"> Save and categorize content based on your preferences. </span>\n    </devsite-feature-tooltip>\n    <div class=\"devsite-page-title-meta\">\n      <devsite-view-release-notes></devsite-view-release-notes>\n    </div>\n\n    <devsite-toc class=\"devsite-nav\" depth=\"2\" devsite-toc-embedded> </devsite-toc>\n\n    <div class=\"devsite-article-body clearfix\">\n      <p>\n        In Cloud Data Fusion, cluster configuration refers to defining how your data processing\n        pipelines utilize computational resources when running Spark jobs on Dataproc. This page\n        describes the main approaches to cluster configuration.\n      </p>\n\n      <h2\n        id=\"default-ephemeral-clusters\"\n        data-text=\"Default ephemeral clusters (recommended)\"\n        tabindex=\"-1\"\n      >\n        Default ephemeral clusters (recommended)\n      </h2>\n\n      <p>Using the default clusters is the recommended approach for Cloud Data Fusion pipelines.</p>\n\n      <ul>\n        <li>\n          Cloud Data Fusion automatically provisions and manages ephemeral Dataproc clusters for\n          each pipeline execution. It creates a cluster at the beginning of the pipeline run, and\n          then deletes it after the pipeline run completes.\n        </li>\n        <li>\n          Benefits of ephemeral clusters:\n          <ul>\n            <li>\n              <strong>Simplicity</strong>: you don&#39;t need to manually configure or manage the\n              cluster.\n            </li>\n            <li>\n              <strong>Cost-effectiveness</strong>: you only pay for the resources used during\n              pipeline execution.\n            </li>\n          </ul>\n        </li>\n      </ul>\n      <aside class=\"note\">\n        <strong>Note:</strong\n        ><span>\n          Cloud Data Fusion, by default, uses Dataproc Autoscaling compute profile which creates\n          ephemeral clusters as per the default configurations.</span\n        >\n      </aside>\n      <p>\n        To adjust clusters and tune performance, see\n        <a href=\"/data-fusion/docs/concepts/cluster-sizing\">Cluster sizing</a>.\n      </p>\n\n      <h2 id=\"static-clusters\" data-text=\"Static clusters (for specific scenarios)\" tabindex=\"-1\">\n        Static clusters (for specific scenarios)\n      </h2>\n\n      <p>In the following scenarios, you can use static clusters:</p>\n\n      <ul>\n        <li>\n          <strong>Long-running pipelines</strong>: for pipelines that run continuously or for\n          extended periods, a static cluster can be more cost-effective than repeatedly creating and\n          tearing down ephemeral clusters.\n        </li>\n        <li>\n          <strong>Centralized cluster management</strong>: if your organization requires centralized\n          control over cluster creation and management policies, static clusters can be used\n          alongside tools like Terraform.\n        </li>\n        <li>\n          <strong>Cluster creation time</strong>: when the time it takes to create a new cluster for\n          every pipeline is prohibitive for your use case.\n        </li>\n      </ul>\n\n      <p>\n        However, static clusters require more manual configuration and involve managing the cluster\n        lifecycle yourself.\n      </p>\n\n      <p>\n        To use a static cluster, you must set the following\n        <a\n          href=\"/dataproc/docs/concepts/configuring-clusters/cluster-properties\"\n          track-type=\"article\"\n          track-name=\"internalLink\"\n          track-metadata-position=\"body\"\n          >property</a\n        >\n        on the Dataproc cluster:\n      </p>\n      <pre\n        class=\"prettyprint lang-gcloud\"\n        translate=\"no\"\n        dir=\"ltr\"\n      ><code translate=\"no\" dir=\"ltr\">dataproc:dataproc.conscrypt.provider.enable=false\n</code></pre>\n      <h3\n        id=\"cluster_configuration_options_for_static_clusters\"\n        data-text=\"Cluster configuration options for static clusters\"\n        tabindex=\"-1\"\n      >\n        Cluster configuration options for static clusters\n      </h3>\n\n      <p>\n        If you choose to use static clusters, Cloud Data Fusion offers configuration options for the\n        following aspects:\n      </p>\n\n      <ul>\n        <li>\n          <strong>Worker machine type</strong>: specify the virtual machine type for the worker\n          nodes in your cluster. This determines the vCPUs and memory available for each worker.\n        </li>\n        <li>\n          <strong>Number of workers</strong>: define the initial number of worker nodes in your\n          cluster. Dataproc might still autoscale this number, based on workload.\n        </li>\n        <li>\n          <strong>Zone</strong>: select your cluster&#39;s Google Cloud zone. Location can affect\n          data locality and network performance.\n        </li>\n        <li>\n          <strong>Additional configurations</strong>: you can configure advanced options for your\n          static cluster, such as preemption settings, network settings, and initialization actions.\n        </li>\n      </ul>\n\n      <h2 id=\"best_practices\" data-text=\"Best practices\" tabindex=\"-1\">Best practices</h2>\n\n      <p>When creating a static cluster for your pipelines, use the following configurations.</p>\n\n      <table>\n        <tr>\n          <th>Parameters</th>\n          <th>Description</th>\n        </tr>\n        <tr>\n          <td><code translate=\"no\" dir=\"ltr\">yarn.nodemanager.delete.debug-delay-sec</code></td>\n          <td>\n            Retains YARN logs.<br />\n            Recommended value: <code translate=\"no\" dir=\"ltr\">86400</code> (equivalent to one day)\n          </td>\n        </tr>\n        <tr>\n          <td><code translate=\"no\" dir=\"ltr\">yarn.nodemanager.pmem-check-enabled</code></td>\n          <td>\n            Enables YARN to check for physical memory limits and kill containers if they go beyond\n            physical memory.<br />\n            Recommended value: <code translate=\"no\" dir=\"ltr\">false</code>\n          </td>\n        </tr>\n        <tr>\n          <td><code translate=\"no\" dir=\"ltr\">yarn.nodemanager.vmem-check-enabled</code></td>\n          <td>\n            Enables YARN to check for virtual memory limits and kill containers if they go beyond\n            physical memory.<br />\n            Recommended value: <code translate=\"no\" dir=\"ltr\">false</code>.\n          </td>\n        </tr>\n      </table>\n\n      <p>\n        For more information, see\n        <a\n          href=\"/data-fusion/docs/how-to/running-against-existing-dataproc\"\n          track-type=\"article\"\n          track-name=\"internalLink\"\n          track-metadata-position=\"body\"\n          >Run a pipeline against an existing Dataproc cluster</a\n        >.\n      </p>\n\n      <h2 id=\"reuse-clusters\" data-text=\"Reusing clusters\" tabindex=\"-1\">Reusing clusters</h2>\n\n      <p>\n        You can reuse Dataproc clusters between runs to improve processing time. Cluster reuse is\n        implemented in a model similar to connection pooling or thread pooling. Any cluster is kept\n        up and running for a specified time after the run is finished. When a new run is started, it\n        will try to find an idle cluster available that matches the configuration of the compute\n        profile. If one is present, it will be used, otherwise a new cluster will be started.\n      </p>\n\n      <h3\n        id=\"considerations_for_reusing_clusters\"\n        data-text=\"Considerations for reusing clusters\"\n        tabindex=\"-1\"\n      >\n        Considerations for reusing clusters\n      </h3>\n\n      <ul>\n        <li>\n          Clusters are not shared. Similar to the regular ephemeral cluster provisioning model, a\n          cluster runs a single pipeline run at a time. A cluster is reused only if it is\n          idle<strong>.</strong>\n        </li>\n        <li>\n          If you enable cluster reuse for all your runs, the necessary number of clusters to process\n          all your runs will be created as needed. Similar to the ephemeral Dataproc provisioner,\n          there is no direct control on the number of clusters created. You can still use Google\n          Cloud quotes to manage resources. For example, if you run 100 runs with 7 maximum parallel\n          runs, you will have up to 7 clusters at a given point of time.\n        </li>\n        <li>\n          <p>\n            Clusters are reused between different pipelines as soon as those pipelines are using the\n            same profile and share the same profile settings. If profile customization is used,\n            clusters will still be reused, but only if customizations are exactly the same,\n            including all cluster settings like cluster labeling.\n          </p>\n        </li>\n        <li>\n          <p>When cluster reuse is enabled, there are two main cost considerations:</p>\n\n          <ul>\n            <li>Less resources are used for cluster startup and initialization.</li>\n            <li>\n              More resources are used for clusters to sit idle between the pipeline runs and after\n              the last pipeline run.\n            </li>\n          </ul>\n        </li>\n      </ul>\n\n      <p>\n        While it&#39;s hard to predict the cost effect of cluster reuse, you can employ a strategy\n        to get maximum savings. The strategy is to identify a critical path for chained pipelines\n        and enable cluster reuse for this critical path. This would ensure the cluster is\n        immediately reused, no idle time is wasted and maximum performance benefits are achieved.\n      </p>\n\n      <h3 id=\"enable_cluster_reuse\" data-text=\"Enable Cluster Reuse\" tabindex=\"-1\">\n        Enable Cluster Reuse\n      </h3>\n\n      <p>\n        In the Compute Config section of deployed pipeline configuration or when creating new\n        compute profile:\n      </p>\n\n      <ul>\n        <li>Enable <strong>Skip Cluster Delete</strong>.</li>\n        <li>\n          Max Idle Time is the time up to which a cluster waits for the next pipeline to reuse it.\n          The default Max Idle Time is 30 minutes. For Max Idle Time, consider the cost versus\n          cluster availability for reuse. The higher the value of Max Idle Time, the more clusters\n          sit idle, ready for a run.\n        </li>\n      </ul>\n\n      <h2 id=\"version-compatibility\" data-text=\"Troubleshoot: Version compatibility\" tabindex=\"-1\">\n        Troubleshoot: Version compatibility\n      </h2>\n\n      <p>\n        <strong>Problem</strong>: The version of your Cloud Data Fusion environment might not be\n        compatible with the version of your Dataproc cluster.\n      </p>\n\n      <p>\n        <strong>Recommended</strong>: Upgrade to the latest Cloud Data Fusion version and use one of\n        the\n        <a href=\"/dataproc/docs/concepts/versioning/dataproc-versions#supported_dataproc_versions\"\n          >supported Dataproc versions</a\n        >.\n      </p>\n\n      <p>\n        Earlier versions of Cloud Data Fusion are only compatible with\n        <a href=\"/dataproc/docs/concepts/versioning/dataproc-versions#unsupported_dataproc_versions\"\n          >unsupported versions of Dataproc</a\n        >. Dataproc does not provide updates and support for clusters created with these versions.\n        Although you can continue running a cluster that was created with an unsupported version, we\n        recommend replacing it with one created with a\n        <a href=\"/dataproc/docs/concepts/versioning/dataproc-versions#supported_dataproc_versions\"\n          >supported version</a\n        >.\n      </p>\n\n      <table>\n        <tr>\n          <th>Cloud Data Fusion version</th>\n          <th>Dataproc version</th>\n        </tr>\n        <tr>\n          <td>6.7</td>\n          <td>\n            1.3<sup><a href=\"#unsupported-dataproc-version\">**</a></sup>\n          </td>\n        </tr>\n        <tr>\n          <td>6.4-6.6</td>\n          <td>\n            2.0 <sup><a href=\"#supported-dataproc-version\">*</a></sup\n            >, 1.3 <sup><a href=\"#unsupported-dataproc-version\">**</a></sup>\n          </td>\n        </tr>\n        <tr>\n          <td>6.1-6.3</td>\n          <td>\n            1.3<sup><a href=\"#unsupported-dataproc-version\">**</a></sup>\n          </td>\n        </tr>\n      </table>\n\n      <p>\n        <small>\n          <div class=\"footnote\" id=\"supported-dataproc-version\">\n            <sup class=\"footnote\">*</sup> Cloud Data Fusion versions 6.4 and later are compatible\n            with\n            <a\n              href=\"/dataproc/docs/concepts/versioning/dataproc-versions#supported_dataproc_versions\"\n            >\n              supported versions of Dataproc</a\n            >. Unless specific OS features are needed, the recommended practice is to specify the\n            <a href=\"/dataproc/docs/concepts/versioning/overview#how_versioning_works\">\n              <code translate=\"no\" dir=\"ltr\">major.minor</code> image version</a\n            >.<br />\n            To specify the OS version used in your Dataproc cluster, the OS version must be\n            compatible with one of the supported Dataproc versions for your Cloud Data Fusion in the\n            preceding table.\n          </div>\n        </small>\n      </p>\n\n      <p>\n        <small>\n          <div class=\"footnote\" id=\"unsupported-dataproc-version\">\n            <sup class=\"footnote\">**</sup> Cloud Data Fusion versions 6.1 to 6.6 are compatible with\n            <a\n              href=\"/dataproc/docs/concepts/versioning/dataproc-versions#unsupported_dataproc_versions\"\n            >\n              unsupported Dataproc version 1.3</a\n            >.\n          </div>\n        </small>\n      </p>\n\n      <h2 id=\"whats_next\" data-text=\"What's next\" tabindex=\"-1\">What's next</h2>\n\n      <ul>\n        <li>\n          Refer to the\n          <a\n            href=\"/data-fusion/docs/how-to/change-dataproc-image\"\n            track-type=\"article\"\n            track-name=\"internalLink\"\n            track-metadata-position=\"body\"\n            >How to change Dataproc image version</a\n          >.\n        </li>\n      </ul>\n\n      <devsite-hats-survey\n        class=\"nocontent\"\n        hats-id=\"Nd7nTix2o0eU5NUYprb0ThtUc5jf\"\n        listnr-id=\"83405\"\n      ></devsite-hats-survey>\n    </div>\n\n    <devsite-thumb-rating position=\"footer\"> </devsite-thumb-rating>\n  </body>\n</html>\n"
  },
  {
    "path": "test-data/web/static/cloud-google-com-data-fusion-docs-support-version-support-policy",
    "content": "<!doctype html>\n<html lang=\"en\" dir=\"ltr\"><head>\n  <meta name=\"google-signin-client-id\" content=\"721724668570-nbkv1cfusk7kk4eni4pjvepaus73b13t.apps.googleusercontent.com\">\n  <meta name=\"google-signin-scope\" content=\"profile email https://www.googleapis.com/auth/developerprofiles https://www.googleapis.com/auth/developerprofiles.award https://www.googleapis.com/auth/cloud-platform https://www.googleapis.com/auth/webhistory\">\n  <meta property=\"og:site_name\" content=\"Google Cloud\">\n  <meta property=\"og:type\" content=\"website\"><meta name=\"theme-color\" content=\"#039be5\"><meta charset=\"utf-8\">\n  <meta content=\"IE=Edge\" http-equiv=\"X-UA-Compatible\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n\n\n  <link rel=\"manifest\" href=\"/_pwa/cloud/manifest.json\" crossorigin=\"use-credentials\">\n  <link rel=\"preconnect\" href=\"//www.gstatic.com\" crossorigin=\"\">\n  <link rel=\"preconnect\" href=\"//fonts.gstatic.com\" crossorigin=\"\">\n  <link rel=\"preconnect\" href=\"//fonts.googleapis.com\" crossorigin=\"\">\n  <link rel=\"preconnect\" href=\"//apis.google.com\" crossorigin=\"\">\n  <link rel=\"preconnect\" href=\"//www.google-analytics.com\" crossorigin=\"\"><link rel=\"stylesheet\" href=\"//fonts.googleapis.com/css?family=Google+Sans:400,500,700|Google+Sans+Text:400,400italic,500,500italic,700,700italic|Roboto:400,400italic,500,500italic,700,700italic|Roboto+Mono:400,500,700&amp;display=swap\">\n    <link rel=\"stylesheet\" href=\"//fonts.googleapis.com/css2?family=Material+Icons&amp;family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200&amp;display=block\"><link rel=\"stylesheet\" href=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/css/app.css\">\n    <link rel=\"shortcut icon\" href=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/images/favicons/onecloud/favicon.ico\">\n  <link rel=\"apple-touch-icon\" href=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/images/favicons/onecloud/super_cloud.png\"><link rel=\"canonical\" href=\"https://cloud.google.com/data-fusion/docs/version-support-policy\"><link rel=\"search\" type=\"application/opensearchdescription+xml\" title=\"Google Cloud\" href=\"https://cloud.google.com/s/opensearch.xml\">\n    <link rel=\"alternate\" hreflang=\"en\" href=\"https://cloud.google.com/data-fusion/docs/version-support-policy\"><link rel=\"alternate\" hreflang=\"x-default\" href=\"https://cloud.google.com/data-fusion/docs/version-support-policy\"><link rel=\"alternate\" hreflang=\"zh-Hans\" href=\"https://cloud.google.com/data-fusion/docs/version-support-policy?hl=zh-cn\"><link rel=\"alternate\" hreflang=\"fr\" href=\"https://cloud.google.com/data-fusion/docs/version-support-policy?hl=fr\"><link rel=\"alternate\" hreflang=\"de\" href=\"https://cloud.google.com/data-fusion/docs/version-support-policy?hl=de\"><link rel=\"alternate\" hreflang=\"id\" href=\"https://cloud.google.com/data-fusion/docs/version-support-policy?hl=id\"><link rel=\"alternate\" hreflang=\"it\" href=\"https://cloud.google.com/data-fusion/docs/version-support-policy?hl=it\"><link rel=\"alternate\" hreflang=\"ja\" href=\"https://cloud.google.com/data-fusion/docs/version-support-policy?hl=ja\"><link rel=\"alternate\" hreflang=\"ko\" href=\"https://cloud.google.com/data-fusion/docs/version-support-policy?hl=ko\"><link rel=\"alternate\" hreflang=\"pt-BR\" href=\"https://cloud.google.com/data-fusion/docs/version-support-policy?hl=pt-br\"><link rel=\"alternate\" hreflang=\"es-419\" href=\"https://cloud.google.com/data-fusion/docs/version-support-policy?hl=es-419\"><title>Version support policy &nbsp;|&nbsp; Cloud Data Fusion Documentation &nbsp;|&nbsp; Google Cloud</title>\n\n<meta property=\"og:title\" content=\"Version support policy &nbsp;|&nbsp; Cloud Data Fusion Documentation &nbsp;|&nbsp; Google Cloud\"><meta property=\"og:url\" content=\"https://cloud.google.com/data-fusion/docs/version-support-policy\"><meta property=\"og:image\" content=\"https://cloud.google.com/_static/cloud/images/social-icon-google-cloud-1200-630.png\">\n<meta property=\"og:image:width\" content=\"1200\">\n<meta property=\"og:image:height\" content=\"630\"><meta property=\"og:locale\" content=\"en\"><meta name=\"twitter:card\" content=\"summary_large_image\"><script type=\"text/javascript\" async=\"\" src=\"https://www.googletagmanager.com/gtag/js?id=G-WH2QY8WWF5&amp;l=dataLayer&amp;cx=c\" nonce=\"\"></script><script type=\"text/javascript\" async=\"\" src=\"https://www.google-analytics.com/internal/analytics.js\" nonce=\"\"></script><script type=\"text/javascript\" async=\"\" src=\"https://www.googletagmanager.com/gtm.js?id=GTM-NS2VGJGH&amp;l=dataLayer\" nonce=\"\"></script><script type=\"text/javascript\" async=\"\" src=\"https://www.googletagmanager.com/gtm.js?id=GTM-M8NRS5J&amp;l=dataLayer\" nonce=\"\"></script><script async=\"\" src=\"//www.googletagmanager.com/gtm.js?id=GTM-5CVQBG\" nonce=\"\"></script><script src=\"https://apis.google.com/_/scs/abc-static/_/js/k=gapi.gapi.en.sY-PcpVhgWw.O/m=client/exm=gapi_iframes,googleapis_client/rt=j/sv=1/d=1/ed=1/am=AAAC/rs=AHpOoo-jrDbdFlJYUR39Cnp6xmT1Bwafog/cb=gapi.loaded_1\" nonce=\"\" async=\"\"></script><script src=\"https://apis.google.com/_/scs/abc-static/_/js/k=gapi.gapi.en.sY-PcpVhgWw.O/m=gapi_iframes,googleapis_client/rt=j/sv=1/d=1/ed=1/am=AAAC/rs=AHpOoo-jrDbdFlJYUR39Cnp6xmT1Bwafog/cb=gapi.loaded_0\" nonce=\"\" async=\"\"></script><script src=\"https://apis.google.com/_/scs/abc-static/_/js/k=gapi.lb.en.8uXxGUoumbY.O/m=client/rt=j/sv=1/d=1/ed=1/rs=AHpOoo96qx3mL4tzGUOa-0q0udyPRqEAoA/cb=gapi.loaded_0?le=scs\" nonce=\"\" async=\"\"></script><script async=\"\" src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/app_loader.js\"></script><script type=\"application/ld+json\">\n{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"Article\",\n\n  \"headline\": \"Version support policy\"\n}\n</script><script type=\"application/ld+json\">\n{\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"BreadcrumbList\",\n  \"itemListElement\": [{\n    \"@type\": \"ListItem\",\n    \"position\": 1,\n    \"name\": \"Cloud Data Fusion\",\n    \"item\": \"https://cloud.google.com/data-fusion\"\n  },{\n    \"@type\": \"ListItem\",\n    \"position\": 2,\n    \"name\": \"Documentation\",\n    \"item\": \"https://cloud.google.com/data-fusion/docs\"\n  },{\n    \"@type\": \"ListItem\",\n    \"position\": 3,\n    \"name\": \"Version support policy\",\n    \"item\": \"https://cloud.google.com/data-fusion/docs/version-support-policy\"\n  }]\n}\n</script>\n<meta name=\"xsrf_token\" content=\"U--fajVKRPF91DtzlOXZjF241RR8VfZ1T7Ck7mhgOoc6MTcwODkzMTkwODM3NDA3Nw\">\n\n\n<meta name=\"session_expiry\" content=\"0\">\n<meta name=\"uid\" content=\"105462645179648971745\">\n\n\n  <script src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/devsite_app_module.js\" nonce=\"\"></script><script src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/devsite_app_custom_elements_module.js\" nonce=\"\"></script><script src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/devsite_devsite_a11y_announce_module.js\" nonce=\"\"></script><script src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/devsite_devsite_author_page_insights_module.js\" nonce=\"\"></script><script src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/devsite_devsite_badger_module.js\" nonce=\"\"></script><script src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/devsite_devsite_content_module.js\" nonce=\"\"></script><script src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/devsite_devsite_content_excellence_module.js\" nonce=\"\"></script><script src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/devsite_devsite_cookie_notification_bar_module.js\" nonce=\"\"></script><script src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/devsite_devsite_feature_tooltip_module.js\" nonce=\"\"></script><script src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/devsite_devsite_feedback_module.js\" nonce=\"\"></script><script src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/devsite_devsite_footer_linkboxes_module.js\" nonce=\"\"></script><script src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/devsite_devsite_footer_promos_module.js\" nonce=\"\"></script><script src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/devsite_devsite_footer_utility_module.js\" nonce=\"\"></script><script src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/devsite_devsite_googler_buttons_module.js\" nonce=\"\"></script><script src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/devsite_devsite_hats_survey_module.js\" nonce=\"\"></script><script src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/devsite_devsite_heading_link_module.js\" nonce=\"\"></script><script src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/devsite_devsite_language_selector_module.js\" nonce=\"\"></script><script src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/devsite_devsite_notification_module.js\" nonce=\"\"></script><script src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/devsite_devsite_panel_module.js\" nonce=\"\"></script><script src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/devsite_devsite_progress_module.js\" nonce=\"\"></script><script src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/devsite_devsite_recommendations_sidebar_module.js\" nonce=\"\"></script><script src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/devsite_devsite_search_module.js\" nonce=\"\"></script><script src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/devsite_devsite_shell_activate_button_module.js\" nonce=\"\"></script><script src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/devsite_devsite_sitemask_module.js\" nonce=\"\"></script><script src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/devsite_devsite_snackbar_module.js\" nonce=\"\"></script><script src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/devsite_devsite_toc_module.js\" nonce=\"\"></script><script src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/devsite_devsite_tooltip_module.js\" nonce=\"\"></script><script src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/devsite_devsite_user_module.js\" nonce=\"\"></script><script src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/devsite_devsite_view_release_notes_module.js\" nonce=\"\"></script><script src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/devsite_cloud_shell_pane_module.js\" nonce=\"\"></script><script src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/devsite_cloudx_additional_tabs_module.js\" nonce=\"\"></script><script src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/devsite_cloudx_experiments_module.js\" nonce=\"\"></script><script src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/devsite_cloudx_experiment_ids_module.js\" nonce=\"\"></script><script src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/devsite_cloudx_free_trial_eligible_store_module.js\" nonce=\"\"></script><script src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/devsite_cloudx_pricing_socket_module.js\" nonce=\"\"></script><script src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/devsite_cloudx_tabs_nav_module.js\" nonce=\"\"></script><script src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/devsite_cloudx_track_module.js\" nonce=\"\"></script><script src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/devsite_cloudx_user_module.js\" nonce=\"\"></script><script src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/devsite_cloudx_utils_init_module.js\" nonce=\"\"></script><script src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/devsite_devsite_analytics_module.js\" nonce=\"\"></script><script src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/devsite_devsite_bookmark_module.js\" nonce=\"\"></script><script src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/devsite_devsite_book_nav_module.js\" nonce=\"\"></script><script src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/devsite_devsite_header_module.js\" nonce=\"\"></script><script src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/devsite_devsite_thumb_rating_module.js\" nonce=\"\"></script><script src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/devsite_devsite_badge_awarded_module.js\" nonce=\"\"></script><script src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/devsite_devsite_dialog_module.js\" nonce=\"\"></script><script async=\"\" src=\"https://www.gstatic.com/feedback/js/help/prod/service/lazy.min.js\" nonce=\"\"></script><script src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/devsite_devsite_spinner_module.js\" nonce=\"\"></script><script src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/devsite_devsite_mwc_module.js\" nonce=\"\"></script><script src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/devsite_devsite_dropdown_list_module.js\" nonce=\"\"></script><script src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/devsite_devsite_view_release_notes_dialog_module.js\" nonce=\"\"></script><script src=\"//www.google-analytics.com/analytics.js\" nonce=\"\"></script><script src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/devsite_devsite_fast_track_profile_creator_module.js\" nonce=\"\"></script><script src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/js/devsite_devsite_checkbox_module.js\" nonce=\"\"></script><script type=\"text/javascript\" charset=\"UTF-8\" nonce=\"\" src=\"https://www.gstatic.com/devops/connect/loader/tool_library.js\"></script><script type=\"text/javascript\" charset=\"UTF-8\" nonce=\"\" src=\"https://apis.google.com/js/client.js\" gapi_processed=\"true\"></script><script async=\"\" defer=\"\" src=\"https://www.gstatic.com/devops/connect/releases/devops-learning-tool-library_20240212_00_RC00/cloudshell/cloudshell.js\" nonce=\"\"></script><style type=\"text/css\">.gb_gb:not(.gb_id){font:13px/27px Roboto,Arial,sans-serif;z-index:986}@-webkit-keyframes gb__a{0%{opacity:0}50%{opacity:1}}@keyframes gb__a{0%{opacity:0}50%{opacity:1}}a.gb_xa{border:none;color:#4285f4;cursor:default;font-weight:bold;outline:none;position:relative;text-align:center;text-decoration:none;text-transform:uppercase;white-space:nowrap;-webkit-user-select:none}a.gb_xa:hover:after,a.gb_xa:focus:after{background-color:rgba(0,0,0,.12);content:\"\";height:100%;left:0;position:absolute;top:0;width:100%}a.gb_xa:hover,a.gb_xa:focus{text-decoration:none}a.gb_xa:active{background-color:rgba(153,153,153,.4);text-decoration:none}a.gb_ya{background-color:#4285f4;color:#fff}a.gb_ya:active{background-color:#0043b2}.gb_za{box-shadow:0 1px 1px rgba(0,0,0,.16)}.gb_xa,.gb_ya,.gb_Aa,.gb_Ba{display:inline-block;line-height:28px;padding:0 12px;border-radius:2px}.gb_Aa{background:#f8f8f8;border:1px solid #c6c6c6}.gb_Ba{background:#f8f8f8}.gb_Aa,#gb a.gb_Aa.gb_Aa,.gb_Ba{color:#666;cursor:default;text-decoration:none}#gb a.gb_Ba{cursor:default;text-decoration:none}.gb_Ba{border:1px solid #4285f4;font-weight:bold;outline:none;background:#4285f4;background:-webkit-gradient(linear,left top,left bottom,from(top),color-stop(#4387fd),to(#4683ea));background:-webkit-linear-gradient(top,#4387fd,#4683ea);background:linear-gradient(top,#4387fd,#4683ea);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#4387fd,endColorstr=#4683ea,GradientType=0)}#gb a.gb_Ba{color:#fff}.gb_Ba:hover{box-shadow:0 1px 0 rgba(0,0,0,.15)}.gb_Ba:active{box-shadow:inset 0 2px 0 rgba(0,0,0,.15);background:#3c78dc;background:-webkit-gradient(linear,left top,left bottom,from(top),color-stop(#3c7ae4),to(#3f76d3));background:-webkit-linear-gradient(top,#3c7ae4,#3f76d3);background:linear-gradient(top,#3c7ae4,#3f76d3);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#3c7ae4,endColorstr=#3f76d3,GradientType=0)}#gb .gb_Ca{background:#fff;border:1px solid #dadce0;color:#1a73e8;display:inline-block;text-decoration:none}#gb .gb_Ca:hover{background:#f8fbff;border-color:#dadce0;color:#174ea6}#gb .gb_Ca:focus{background:#f4f8ff;color:#174ea6;outline:1px solid #174ea6}#gb .gb_Ca:active,#gb .gb_Ca:focus:active{background:#ecf3fe;color:#174ea6}#gb .gb_Ca.gb_i{background:transparent;border:1px solid #5f6368;color:#8ab4f8;text-decoration:none}#gb .gb_Ca.gb_i:hover{background:rgba(255,255,255,.04);color:#e8eaed}#gb .gb_Ca.gb_i:focus{background:rgba(232,234,237,.12);color:#e8eaed;outline:1px solid #e8eaed}#gb .gb_Ca.gb_i:active,#gb .gb_Ca.gb_i:focus:active{background:rgba(232,234,237,.1);color:#e8eaed}.gb_p{display:none!important}.gb_1a{visibility:hidden}.gb_w{display:inline-block;vertical-align:middle}.gb_Rd .gb_o{bottom:-3px;right:-5px}.gb_f{position:relative}.gb_d{display:inline-block;outline:none;vertical-align:middle;border-radius:2px;box-sizing:border-box;height:40px;width:40px;cursor:pointer;text-decoration:none}#gb#gb a.gb_d{cursor:pointer;text-decoration:none}.gb_d,a.gb_d{color:#000}.gb_hf{border-color:transparent;border-bottom-color:#fff;border-style:dashed dashed solid;border-width:0 8.5px 8.5px;display:none;position:absolute;left:11.5px;top:33px;z-index:1;height:0;width:0;-webkit-animation:gb__a .2s;animation:gb__a .2s}.gb_if{border-color:transparent;border-style:dashed dashed solid;border-width:0 8.5px 8.5px;display:none;position:absolute;left:11.5px;z-index:1;height:0;width:0;-webkit-animation:gb__a .2s;animation:gb__a .2s;border-bottom-color:rgba(0,0,0,.2);top:32px}x:-o-prefocus,div.gb_if{border-bottom-color:#ccc}.gb_5{background:#fff;border:1px solid #ccc;border-color:rgba(0,0,0,.2);color:#000;-webkit-box-shadow:0 2px 10px rgba(0,0,0,.2);box-shadow:0 2px 10px rgba(0,0,0,.2);display:none;outline:none;overflow:hidden;position:absolute;right:8px;top:62px;-webkit-animation:gb__a .2s;animation:gb__a .2s;border-radius:2px;-webkit-user-select:text}.gb_w.gb_La .gb_hf,.gb_w.gb_La .gb_if,.gb_w.gb_La .gb_5,.gb_La.gb_5{display:block}.gb_w.gb_La.gb_jf .gb_hf,.gb_w.gb_La.gb_jf .gb_if{display:none}.gb_Sd{position:absolute;right:8px;top:62px;z-index:-1}.gb_7a .gb_hf,.gb_7a .gb_if,.gb_7a .gb_5{margin-top:-10px}.gb_w:first-child,#gbsfw:first-child+.gb_w{padding-left:4px}.gb_Pa.gb_Td .gb_w:first-child{padding-left:0}.gb_Ud{position:relative}.gb_t.gb_Bd.gb_eb.gb_qd{margin:0 12px;padding:0}.gb_t .gb_d{position:relative}.gb_t .gb_w{margin:0 4px;padding:4px}.gb_t .gb_Vd{display:inline-block}.gb_t a.gb_md{-webkit-box-align:center;-webkit-align-items:center;-webkit-align-items:center;align-items:center;-webkit-border-radius:100px;border-radius:100px;border:0;background:#0b57d0;color:#fff;display:-webkit-inline-box;display:-webkit-inline-flex;display:-webkit-inline-box;display:-webkit-inline-flex;display:inline-flex;font-size:14px;font-weight:500;height:40px;white-space:nowrap;width:auto}.gb_t a.gb_d.gb_md{margin:0 4px;padding:4px 24px 4px 24px}.gb_t a.gb_md.gb_Wd{padding:9px 12px 9px 16px}.gb_t a.gb_md.gb_Xd{background:transparent;border:1px solid #747775;color:#0b57d0;outline:0}.gb_t .gb_s{fill:#0b57d0}.gb_t .gb_Zd{fill:#0b57d0;margin-left:8px}.gb_t .gb_Zd circle{fill:#fff}.gb_t .gb_md .gb_Kd{-webkit-box-flex:1;-webkit-flex-grow:1;-webkit-box-flex:1;box-flex:1;-webkit-flex-grow:1;flex-grow:1;text-align:center}.gb_t .gb_md:hover{background:#3763cd}.gb_t .gb_md:hover .gb_Zd{fill:#3763cd}.gb_t .gb_md:focus,.gb_t .gb_md:active,.gb_t .gb_md:focus:hover,.gb_t .gb_md[aria-expanded=true],.gb_t .gb_md:hover[aria-expanded=true]{background:#416acf}.gb_t .gb_md:focus .gb_Zd,.gb_t .gb_md:active .gb_Zd,.gb_t .gb_md:focus:hover .gb_Zd,.gb_t .gb_md[aria-expanded=true] .gb_Zd,.gb_t .gb_md:hover[aria-expanded=true] .gb_Zd{fill:#416acf}.gb_t .gb_md:focus,.gb_t .gb_md:active,.gb_t .gb_md[aria-expanded=true]{-webkit-box-shadow:0 1px 3px 1px rgba(66,64,67,.15),0 1px 2px 0 rgba(60,64,67,.3);box-shadow:0 1px 3px 1px rgba(66,64,67,.15),0 1px 2px 0 rgba(60,64,67,.3)}.gb_t .gb_md:focus-visible{outline:1px solid #416acf;outline-offset:2px}.gb_t .gb_Fa:focus-visible{outline:1px solid #416acf}.gb_t .gb_i.gb_md{background:#a8c7fa;color:#062e6f}.gb_t .gb_i.gb_md .gb_Zd{fill:#a8c7fa}.gb_t .gb_i.gb_md .gb_Zd circle{fill:#062e6f}.gb_t .gb_i.gb_md:hover{background:#b4cbf6}.gb_t .gb_i.gb_md:hover .gb_Zd{fill:#b4cbf6}.gb_t .gb_i.gb_md:focus,.gb_t .gb_i.gb_md:focus:hover,.gb_t .gb_i.gb_md:active,.gb_t .gb_i.gb_md[aria-expanded=true],.gb_t .gb_i.gb_md:hover[aria-expanded=true]{background:#b8cdf7}.gb_t .gb_i.gb_md:focus .gb_Zd,.gb_t .gb_i.gb_md:focus:hover .gb_Zd,.gb_t .gb_i.gb_md:active .gb_Zd,.gb_t .gb_i.gb_md[aria-expanded=true] .gb_Zd,.gb_t .gb_i.gb_md:hover[aria-expanded=true] .gb_Zd{fill:#b8cdf7}.gb_t .gb_i.gb_md:focus-visible{outline-color:#b8cdf7}.gb_t .gb_i.gb_md:focus,.gb_t .gb_i.gb_md:active,.gb_t .gb_i.gb_md[aria-expanded=true]{-webkit-box-shadow:0 1px 3px 1px rgba(66,64,67,.15),0 1px 2px 0 rgba(60,64,67,.3);box-shadow:0 1px 3px 1px rgba(66,64,67,.15),0 1px 2px 0 rgba(60,64,67,.3)}.gb_t .gb_md.gb_Xd:hover,.gb_t .gb_md.gb_Xd:focus,.gb_t .gb_md.gb_Xd[aria-expanded=true],.gb_t .gb_md.gb_Xd:hover[aria-expanded=true]{background:rgba(11,87,208,.08);-webkit-box-shadow:none;box-shadow:none}.gb_t .gb_md.gb_Xd:active{background:rgba(11,87,208,.12);-webkit-box-shadow:none;box-shadow:none}.gb_t .gb_md.gb_Xd:focus-visible{border-color:#0b57d0;outline:0}.gb_t .gb_i.gb_md.gb_Xd{background:transparent;color:#a8c7fa}.gb_t .gb_i.gb_md.gb_Xd:hover,.gb_t .gb_i.gb_md.gb_Xd:focus,.gb_t .gb_i.gb_md.gb_Xd[aria-expanded=true],.gb_t .gb_i.gb_md.gb_Xd:hover[aria-expanded=true]{background:rgba(168,199,250,.08);-webkit-box-shadow:none;box-shadow:none}.gb_t .gb_i.gb_md.gb_Xd:active{background:rgba(168,199,250,.12);-webkit-box-shadow:none;box-shadow:none}.gb_t .gb_i.gb_md.gb_Xd:focus-visible{border-color:#a8c7fa;outline:0}.gb_i .gb_t .gb_s{fill:#a8c7fa}.gb_i .gb_t .gb_Fa:focus-visible{outline-color:#a8c7fa}.gb_5c .gb_Ud,.gb_ld .gb_Ud{float:right}.gb_d{padding:8px;cursor:pointer}.gb_d:after{content:\"\";position:absolute;top:-4px;bottom:-4px;left:-4px;right:-4px}.gb_Pa .gb_me:not(.gb_xa):focus img{background-color:rgba(0,0,0,.2);outline:none;-webkit-border-radius:50%;border-radius:50%}.gb_0d button svg,.gb_d{-webkit-border-radius:50%;border-radius:50%}.gb_0d button:focus:not(:focus-visible) svg,.gb_0d button:hover svg,.gb_0d button:active svg,.gb_d:focus:not(:focus-visible),.gb_d:hover,.gb_d:active,.gb_d[aria-expanded=true]{outline:none}.gb_Oc .gb_0d.gb_ve button:focus-visible svg,.gb_0d button:focus-visible svg,.gb_d:focus-visible{outline:1px solid #202124}.gb_Oc .gb_0d button:focus-visible svg,.gb_Oc .gb_d:focus-visible{outline:1px solid #f1f3f4}@media (forced-colors:active){.gb_Oc .gb_0d.gb_ve button:focus-visible svg,.gb_0d button:focus-visible svg,.gb_Oc .gb_0d button:focus-visible svg{outline:1px solid currentcolor}}.gb_Oc .gb_0d.gb_ve button:focus svg,.gb_Oc .gb_0d.gb_ve button:focus:hover svg,.gb_0d button:focus svg,.gb_0d button:focus:hover svg,.gb_d:focus,.gb_d:focus:hover{background-color:rgba(60,64,67,.1)}.gb_Oc .gb_0d.gb_ve button:active svg,.gb_0d button:active svg,.gb_d:active{background-color:rgba(60,64,67,.12)}.gb_Oc .gb_0d.gb_ve button:hover svg,.gb_0d button:hover svg,.gb_d:hover{background-color:rgba(60,64,67,.08)}.gb_Da .gb_d.gb_Fa:hover{background-color:transparent}.gb_d[aria-expanded=true],.gb_d:hover[aria-expanded=true]{background-color:rgba(95,99,104,.24)}.gb_d[aria-expanded=true] .gb_h{fill:#5f6368;opacity:1}.gb_Oc .gb_0d button:hover svg,.gb_Oc .gb_d:hover{background-color:rgba(232,234,237,.08)}.gb_Oc .gb_0d button:focus svg,.gb_Oc .gb_0d button:focus:hover svg,.gb_Oc .gb_d:focus,.gb_Oc .gb_d:focus:hover{background-color:rgba(232,234,237,.1)}.gb_Oc .gb_0d button:active svg,.gb_Oc .gb_d:active{background-color:rgba(232,234,237,.12)}.gb_Oc .gb_d[aria-expanded=true],.gb_Oc .gb_d:hover[aria-expanded=true]{background-color:rgba(255,255,255,.12)}.gb_Oc .gb_d[aria-expanded=true] .gb_h{fill:#fff;opacity:1}.gb_w{padding:4px}.gb_Pa.gb_Td .gb_w{padding:4px 2px}.gb_Pa.gb_Td .gb_b.gb_w{padding-left:6px}.gb_5{z-index:991;line-height:normal}.gb_5.gb_1d{left:0;right:auto}@media (max-width:350px){.gb_5.gb_1d{left:0}}.gb_2d .gb_5{top:56px}.gb_k .gb_d,.gb_4 .gb_k .gb_d{background-position:-64px -29px}.gb_K .gb_k .gb_d{background-position:-29px -29px;opacity:1}.gb_k .gb_d,.gb_k .gb_d:hover,.gb_k .gb_d:focus{opacity:1}.gb_jd{display:none}@media screen and (max-width:319px){.gb_rd:not(.gb_wd) .gb_k{display:none;visibility:hidden}}.gb_o{display:none}.gb_dd{font-family:Google Sans,Roboto,Helvetica,Arial,sans-serif;font-size:20px;font-weight:400;letter-spacing:0.25px;line-height:48px;margin-bottom:2px;opacity:1;overflow:hidden;padding-left:16px;position:relative;text-overflow:ellipsis;vertical-align:middle;top:2px;white-space:nowrap;-webkit-flex:1 1 auto;-webkit-box-flex:1;flex:1 1 auto}.gb_dd.gb_ed{color:#3c4043}.gb_Pa.gb_Qa .gb_dd{margin-bottom:0}.gb_fd.gb_gd .gb_dd{padding-left:4px}.gb_Pa.gb_Qa .gb_hd{position:relative;top:-2px}.gb_Pa{color:black;min-width:160px;position:relative;-webkit-transition:box-shadow 250ms;transition:box-shadow 250ms}.gb_Pa.gb_Wc{min-width:120px}.gb_Pa.gb_pd .gb_qd{display:none}.gb_Pa.gb_pd .gb_rd{height:56px}header.gb_Pa{display:block}.gb_Pa svg{fill:currentColor}.gb_sd{position:fixed;top:0;width:100%}.gb_td{-webkit-box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2);box-shadow:0 4px 5px 0 rgba(0,0,0,.14),0 1px 10px 0 rgba(0,0,0,.12),0 2px 4px -1px rgba(0,0,0,.2)}.gb_ud{height:64px}.gb_rd{-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;width:100%;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-pack:space-between;-webkit-justify-content:space-between;justify-content:space-between;min-width:-webkit-min-content;min-width:min-content}.gb_Pa:not(.gb_Qa) .gb_rd{padding:8px}.gb_Pa.gb_vd .gb_rd{-webkit-flex:1 0 auto;-webkit-box-flex:1;flex:1 0 auto}.gb_Pa .gb_rd.gb_wd.gb_xd{min-width:0}.gb_Pa.gb_Qa .gb_rd{padding:4px;padding-left:8px;min-width:0}.gb_qd{height:48px;vertical-align:middle;white-space:nowrap;-webkit-box-align:center;-webkit-align-items:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-user-select:none}.gb_zd>.gb_qd{display:table-cell;width:100%}.gb_fd{padding-right:30px;box-sizing:border-box;-webkit-flex:1 0 auto;-webkit-box-flex:1;flex:1 0 auto}.gb_Pa.gb_Qa .gb_fd{padding-right:14px}.gb_Ad{-webkit-flex:1 1 100%;-webkit-box-flex:1;flex:1 1 100%}.gb_Ad>:only-child{display:inline-block}.gb_Bd.gb_6c{padding-left:4px}.gb_Bd.gb_Cd,.gb_Pa.gb_vd .gb_Bd,.gb_Pa.gb_Qa:not(.gb_ld) .gb_Bd{padding-left:0}.gb_Pa.gb_Qa .gb_Bd.gb_Cd{padding-right:0}.gb_Pa.gb_Qa .gb_Bd.gb_Cd .gb_Da{margin-left:10px}.gb_6c{display:inline}.gb_Pa.gb_0c .gb_Bd.gb_Dd,.gb_Pa.gb_ld .gb_Bd.gb_Dd{padding-left:2px}.gb_dd{display:inline-block}.gb_Bd{-webkit-box-sizing:border-box;box-sizing:border-box;height:48px;line-height:normal;padding:0 4px;padding-left:30px;-webkit-flex:0 0 auto;-webkit-box-flex:0;flex:0 0 auto;-webkit-box-pack:flex-end;-webkit-justify-content:flex-end;justify-content:flex-end}.gb_ld{height:48px}.gb_Pa.gb_ld{min-width:auto}.gb_ld .gb_Bd{float:right;padding-left:32px}.gb_ld .gb_Bd.gb_Ed{padding-left:0}.gb_Fd{font-size:14px;max-width:200px;overflow:hidden;padding:0 12px;text-overflow:ellipsis;white-space:nowrap;-webkit-user-select:text}.gb_kd{-webkit-transition:background-color .4s;-webkit-transition:background-color .4s;transition:background-color .4s}.gb_Md{color:black}.gb_Oc{color:white}.gb_Pa a,.gb_Tc a{color:inherit}.gb_U{color:rgba(0,0,0,.87)}.gb_Pa svg,.gb_Tc svg,.gb_fd .gb_od,.gb_5c .gb_od{color:#5f6368;opacity:1}.gb_Oc svg,.gb_Tc.gb_Xc svg,.gb_Oc .gb_fd .gb_od,.gb_Oc .gb_fd .gb_Nc,.gb_Oc .gb_fd .gb_hd,.gb_Tc.gb_Xc .gb_od{color:rgba(255,255,255,.87)}.gb_Oc .gb_fd .gb_Mc:not(.gb_Nd){opacity:.87}.gb_ed{color:inherit;opacity:1;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased}.gb_Oc .gb_ed,.gb_Md .gb_ed{opacity:1}.gb_Hd{position:relative}.gb_Id{font-family:arial,sans-serif;line-height:normal;padding-right:15px}a.gb_H,span.gb_H{color:rgba(0,0,0,.87);text-decoration:none}.gb_Oc a.gb_H,.gb_Oc span.gb_H{color:white}a.gb_H:focus{outline-offset:2px}a.gb_H:hover{text-decoration:underline}.gb_I{display:inline-block;padding-left:15px}.gb_I .gb_H{display:inline-block;line-height:24px;vertical-align:middle}.gb_Od{font-family:Google Sans,Roboto,Helvetica,Arial,sans-serif;font-weight:500;font-size:14px;letter-spacing:.25px;line-height:16px;margin-left:10px;margin-right:8px;min-width:96px;padding:9px 23px;text-align:center;vertical-align:middle;border-radius:4px;box-sizing:border-box}.gb_Pa.gb_ld .gb_Od{margin-left:8px}#gb a.gb_Ba.gb_Od{cursor:pointer}.gb_Ba.gb_Od:hover{background:#1b66c9;-webkit-box-shadow:0 1px 3px 1px rgba(66,64,67,.15),0 1px 2px 0 rgba(60,64,67,.3);box-shadow:0 1px 3px 1px rgba(66,64,67,.15),0 1px 2px 0 rgba(60,64,67,.3)}.gb_Ba.gb_Od:focus,.gb_Ba.gb_Od:hover:focus{background:#1c5fba;-webkit-box-shadow:0 1px 3px 1px rgba(66,64,67,.15),0 1px 2px 0 rgba(60,64,67,.3);box-shadow:0 1px 3px 1px rgba(66,64,67,.15),0 1px 2px 0 rgba(60,64,67,.3)}.gb_Ba.gb_Od:active{background:#1b63c1;-webkit-box-shadow:0 1px 3px 1px rgba(66,64,67,.15),0 1px 2px 0 rgba(60,64,67,.3);box-shadow:0 1px 3px 1px rgba(66,64,67,.15),0 1px 2px 0 rgba(60,64,67,.3)}.gb_Od{background:#1a73e8;border:1px solid transparent}.gb_Pa.gb_Qa .gb_Od{padding:9px 15px;min-width:80px}.gb_Jd{text-align:left}#gb .gb_Oc a.gb_Od:not(.gb_i),#gb.gb_Oc a.gb_Od:not(.gb_Pd){background:#fff;border-color:#dadce0;-webkit-box-shadow:none;box-shadow:none;color:#1a73e8}#gb a.gb_Ba.gb_i.gb_Od{background:#8ab4f8;border:1px solid transparent;-webkit-box-shadow:none;box-shadow:none;color:#202124}#gb .gb_Oc a.gb_Od:hover:not(.gb_i),#gb.gb_Oc a.gb_Od:not(.gb_Pd):hover{background:#f8fbff;border-color:#cce0fc}#gb a.gb_Ba.gb_i.gb_Od:hover{background:#93baf9;border-color:transparent;-webkit-box-shadow:0 1px 3px 1px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.3);box-shadow:0 1px 3px 1px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.3)}#gb .gb_Oc a.gb_Od:focus:not(.gb_i),#gb .gb_Oc a.gb_Od:focus:hover:not(.gb_i),#gb.gb_Oc a.gb_Od:focus:not(.gb_i),#gb.gb_Oc a.gb_Od:focus:hover:not(.gb_i){background:#f4f8ff;outline:1px solid #c9ddfc}#gb a.gb_Ba.gb_i.gb_Od:focus,#gb a.gb_Ba.gb_i.gb_Od:focus:hover{background:#a6c6fa;border-color:transparent;-webkit-box-shadow:none;box-shadow:none}#gb .gb_Oc a.gb_Od:active:not(.gb_i),#gb.gb_Oc a.gb_Od:not(.gb_Pd):active{background:#ecf3fe}#gb a.gb_Ba.gb_i.gb_Od:active{background:#a1c3f9;-webkit-box-shadow:0 1px 2px rgba(60,64,67,.3),0 2px 6px 2px rgba(60,64,67,.15);box-shadow:0 1px 2px rgba(60,64,67,.3),0 2px 6px 2px rgba(60,64,67,.15)}.gb_l{display:none}@media screen and (max-width:319px){.gb_rd:not(.gb_wd) .gb_k{display:none;visibility:hidden}}.gb_Da{background-color:rgba(255,255,255,.88);border:1px solid #dadce0;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer;display:inline-block;max-height:48px;overflow:hidden;outline:none;padding:0;vertical-align:middle;width:134px;-webkit-border-radius:8px;border-radius:8px}.gb_Da.gb_i{background-color:transparent;border:1px solid #5f6368}.gb_Ka{display:inherit}.gb_Da.gb_i .gb_Ka{background:#fff;-webkit-border-radius:4px;border-radius:4px;display:inline-block;left:8px;margin-right:5px;position:relative;padding:3px;top:-1px}.gb_Da:hover{border:1px solid #d2e3fc;background-color:rgba(248,250,255,.88)}.gb_Da.gb_i:hover{background-color:rgba(241,243,244,.04);border:1px solid #5f6368}.gb_Da:focus-visible,.gb_Da:focus{background-color:#fff;outline:1px solid #202124;-webkit-box-shadow:0 1px 2px 0 rgba(60,64,67,.3),0 1px 3px 1px rgba(60,64,67,.15);box-shadow:0 1px 2px 0 rgba(60,64,67,.3),0 1px 3px 1px rgba(60,64,67,.15)}.gb_Da.gb_i:focus-visible,.gb_Da.gb_i:focus{background-color:rgba(241,243,244,.12);outline:1px solid #f1f3f4;-webkit-box-shadow:0 1px 3px 1px rgba(0,0,0,.15),0 1px 2px 0 rgba(0,0,0,.3);box-shadow:0 1px 3px 1px rgba(0,0,0,.15),0 1px 2px 0 rgba(0,0,0,.3)}.gb_Da.gb_i:active,.gb_Da.gb_La.gb_i:focus{background-color:rgba(241,243,244,.1);border:1px solid #5f6368}.gb_Ma{display:inline-block;padding-bottom:2px;padding-left:7px;padding-top:2px;text-align:center;vertical-align:middle;line-height:32px;width:78px}.gb_Da.gb_i .gb_Ma{line-height:26px;margin-left:0;padding-bottom:0;padding-left:0;padding-top:0;width:72px}.gb_Ma.gb_Na{background-color:#f1f3f4;-webkit-border-radius:4px;border-radius:4px;margin-left:8px;padding-left:0;line-height:30px}.gb_Ma.gb_Na .gb_Oa{vertical-align:middle}.gb_Pa:not(.gb_Qa) .gb_Da{margin-left:10px;margin-right:4px}.gb_Ra{max-height:32px;width:78px}.gb_Da.gb_i .gb_Ra{max-height:26px;width:72px}.gb_n{-webkit-background-size:32px 32px;background-size:32px 32px;border:0;-webkit-border-radius:50%;border-radius:50%;display:block;margin:0px;position:relative;height:32px;width:32px;z-index:0}.gb_2a{background-color:#e8f0fe;border:1px solid rgba(32,33,36,.08);position:relative}.gb_2a.gb_n{height:30px;width:30px}.gb_2a.gb_n:hover,.gb_2a.gb_n:active{-webkit-box-shadow:none;box-shadow:none}.gb_3a{background:#fff;border:none;-webkit-border-radius:50%;border-radius:50%;bottom:2px;-webkit-box-shadow:0px 1px 2px 0px rgba(60,64,67,.30),0px 1px 3px 1px rgba(60,64,67,.15);box-shadow:0px 1px 2px 0px rgba(60,64,67,.30),0px 1px 3px 1px rgba(60,64,67,.15);height:14px;margin:2px;position:absolute;right:0;width:14px}.gb_4a{color:#1f71e7;font:400 22px/32px Google Sans,Roboto,Helvetica,Arial,sans-serif;text-align:center;text-transform:uppercase}@media (-webkit-min-device-pixel-ratio:1.25),(min-resolution:1.25dppx),(min-device-pixel-ratio:1.25){.gb_n::before,.gb_5a::before{display:inline-block;-webkit-transform:scale(0.5);-webkit-transform:scale(0.5);transform:scale(0.5);-webkit-transform-origin:left 0;-webkit-transform-origin:left 0;transform-origin:left 0}.gb_M .gb_5a::before{-webkit-transform:scale(scale(0.416666667));-webkit-transform:scale(scale(0.416666667));transform:scale(scale(0.416666667))}}.gb_n:hover,.gb_n:focus{-webkit-box-shadow:0 1px 0 rgba(0,0,0,.15);box-shadow:0 1px 0 rgba(0,0,0,.15)}.gb_n:active{-webkit-box-shadow:inset 0 2px 0 rgba(0,0,0,.15);box-shadow:inset 0 2px 0 rgba(0,0,0,.15)}.gb_n:active::after{background:rgba(0,0,0,.1);-webkit-border-radius:50%;border-radius:50%;content:\"\";display:block;height:100%}.gb_6a{cursor:pointer;line-height:40px;min-width:30px;opacity:.75;overflow:hidden;vertical-align:middle;text-overflow:ellipsis}.gb_d.gb_6a{width:auto}.gb_6a:hover,.gb_6a:focus{opacity:.85}.gb_7a .gb_6a,.gb_7a .gb_8a{line-height:26px}#gb#gb.gb_7a a.gb_6a,.gb_7a .gb_8a{font-size:11px;height:auto}.gb_9a{border-top:4px solid #000;border-left:4px dashed transparent;border-right:4px dashed transparent;display:inline-block;margin-left:6px;opacity:.75;vertical-align:middle}.gb_Fa:hover .gb_9a{opacity:.85}.gb_Da>.gb_b{padding:3px 3px 3px 4px}.gb_ab.gb_1a{color:#fff}.gb_K .gb_6a,.gb_K .gb_9a{opacity:1}#gb#gb.gb_K.gb_K a.gb_6a,#gb#gb .gb_K.gb_K a.gb_6a{color:#fff}.gb_K.gb_K .gb_9a{border-top-color:#fff;opacity:1}.gb_4 .gb_n:hover,.gb_K .gb_n:hover,.gb_4 .gb_n:focus,.gb_K .gb_n:focus{-webkit-box-shadow:0 1px 0 rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.2);box-shadow:0 1px 0 rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.2)}.gb_bb .gb_b,.gb_cb .gb_b{position:absolute;right:1px}.gb_b.gb_J,.gb_db.gb_J,.gb_Fa.gb_J{-webkit-flex:0 1 auto;-webkit-box-flex:0;flex:0 1 auto}.gb_eb.gb_fb .gb_6a{width:30px!important}.gb_m{height:40px;position:absolute;right:-5px;top:-5px;width:40px}.gb_gb .gb_m,.gb_hb .gb_m{right:0;top:0}.gb_b .gb_d{padding:4px}.gb_q{display:none}sentinel{}</style><script id=\"ogb-head-script\">;this.gbar_={CONFIG:[[[0,\"www.gstatic.com\",\"og.qtm.en_US.oZnhK8fQ7o0.2019.O\",\"co.in\",\"en\",\"331\",0,[4,2,\"\",\"\",\"\",\"609191637\",\"0\"],null,\"RjvcZaS2A96cp84Phs-RqAY\",null,0,\"og.qtm.1f5sTv2zAHE.L.W.O\",\"AA2YrTuSeGO41plnBqJdiMY0leplCqBEkw\",\"AA2YrTvC2GE6u5FfYymNmpMuAgCtUQObZA\",\"\",2,1,200,\"IND\",null,null,\"18\",\"331\",1,null,null,111881503,0],null,[1,1,2,1],null,[1,0,1,null,\"0\",\"ppoormina@google.com\",\"\",\"ANc_yyimtmoeokSGv22SaHWIWNMBipjOBbi5x0czDy7TzmU4BJf6SEOfaqDHaGuxV5hbBiXwNK7JF9Dle6u9llcTK830TaTUgA\",0,0,0],[0,0,\"\",1,0,0,0,0,0,0,null,0,0,null,0,0,null,null,0,0,0,\"\",\"\",\"\",\"\",\"\",\"\",null,0,0,0,0,0,null,null,null,\"rgba(32,33,36,1)\",\"rgba(255,255,255,1)\",0,0,0,null,null,1,0,0],[\"%1$s (default)\",\"Brand account\",1,\"%1$s (delegated)\",1,null,83,\"?authuser=$authuser\",null,null,null,1,\"https://accounts.google.com/ListAccounts?listPages=0\\u0026pid=331\\u0026gpsia=1\\u0026source=ogb\\u0026atic=1\\u0026mo=1\\u0026mn=1\\u0026hl=en\",0,\"dashboard\",null,null,null,null,\"Profile\",\"\",1,null,\"Signed out\",\"https://accounts.google.com/AccountChooser?source=ogb\\u0026continue=$continue\\u0026Email=$email\\u0026ec=GAhAywI\",\"https://accounts.google.com/RemoveLocalAccount?source=ogb\",\"Remove\",\"Sign in\",0,1,1,0,1,1,0,null,null,null,\"Session expired\",null,null,null,\"Visitor\",null,\"Default\",\"Delegated\",\"Sign out of all accounts\",0,null,null,0,null,null,\"myaccount.google.com\",\"https\",0,1,0],null,[\"1\",\"gci_91f30755d6a6b787dcc2a4062e6e9824.js\",\"googleapis.client:gapi.iframes\",\"0\",\"en\"],null,null,null,null,[\"m;/_/scs/abc-static/_/js/k=gapi.gapi.en.sY-PcpVhgWw.O/am=AAAC/d=1/rs=AHpOoo-jrDbdFlJYUR39Cnp6xmT1Bwafog/m=__features__\",\"https://apis.google.com\",\".prod.google.com,.sandbox.google.com,.corp.google.com,.borg.google.com\",\"\",\"1\",\"\",null,1,\"es_plusone_gc_20240202.0_p2\",\"en\",null,0],[0.009999999776482582,\"co.in\",\"331\",[null,\"\",\"0\",null,1,5184000,null,null,\"\",null,null,null,null,null,0,null,0,null,1,0,0,0,null,null,0,0,null,0,0,0,0,0],null,null,null,0,null,null,[\"5061451\",\"google\\\\.(com|ru|ca|by|kz|com\\\\.mx|com\\\\.tr)$\",1]],[1,1,null,40400,331,\"IND\",\"en\",\"609191637.0\",8,0.009999999776482582,1,1,null,null,null,null,\"3700825,3701038,3701242,3701245\",null,null,null,\"RjvcZaS2A96cp84Phs-RqAY\",0,0,0,null,2,5,\"nn\",62,0,0,1,1,1,111881503,0],[[null,null,null,\"https://www.gstatic.com/og/_/js/k=og.qtm.en_US.oZnhK8fQ7o0.2019.O/rt=j/m=qabr,qgl,q_dnp,qcwid,qbd,qapid,qrcd,q_dg/exm=qaaw,qadd,qaid,qein,qhaw,qhba,qhbr,qhch,qhga,qhid,qhin/d=1/ed=1/rs=AA2YrTuSeGO41plnBqJdiMY0leplCqBEkw\"],[null,null,null,\"https://www.gstatic.com/og/_/ss/k=og.qtm.1f5sTv2zAHE.L.W.O/m=qcwid/excm=qaaw,qadd,qaid,qein,qhaw,qhba,qhbr,qhch,qhga,qhid,qhin/d=1/ed=1/ct=zgms/rs=AA2YrTvC2GE6u5FfYymNmpMuAgCtUQObZA\"]],null,null,null,[[[null,null,[null,null,null,\"https://ogs.google.com/u/0/widget/account?amb=1\\u0026sea=1\"],0,414,436,57,4,1,0,0,65,66,8000,\"https://accounts.google.com/SignOutOptions?hl=en\\u0026continue=https://cloud.google.com/_d/profile/ogb\\u0026ec=GBRAywI\",68,2,null,null,1,113,\"Something went wrong.%1$s Refresh to try again or %2$schoose another account%3$s.\",3,null,null,75,0,null,null,null,null,null,null,null,\"/widget/account\",[\"https\",\"myaccount.google.com\",0,32,83,0],0,0,1,[\"Critical security alert\",\"Important account alert\"],0,1,null,1,1,0,0]],null,null,\"18\",\"331\",1,0,null,\"en\",0,[\"?authuser=$authuser\",\"https://accounts.google.com/AddSession?continue=\\u0026ec=GAlAywI\",\"https://accounts.google.com/Logout?continue=https://cloud.google.com/\\u0026service=ahsid\\u0026ec=GAdAywI\",\"https://accounts.google.com/ListAccounts?listPages=0\\u0026pid=331\\u0026gpsia=1\\u0026source=ogb\\u0026atic=1\\u0026mo=1\\u0026mn=1\\u0026hl=en\",0,0,\"\",0,0,null,0,0,\"https://accounts.google.com/ServiceLogin?continue=https://cloud.google.com/\\u0026authuser=0\\u0026ec=GAZAywI\",0,0],0,0,0,null,0],null,[[\"mousedown\",\"touchstart\",\"touchmove\",\"wheel\",\"keydown\"],300000],[[null,null,null,\"https://accounts.google.com/RotateCookiesPage\"],3,null,null,null,0,1]]],};this.gbar_=this.gbar_||{};(function(_){var window=this;\ntry{\n_._F_toggles_initialize=function(a){(\"undefined\"!==typeof globalThis?globalThis:\"undefined\"!==typeof self?self:this)._F_toggles=a||[]};(0,_._F_toggles_initialize)([]);\n/*\n\nCopyright The Closure Library Authors.\nSPDX-License-Identifier: Apache-2.0\n*/\nvar ea,ka,na,oa,xa,ya,za,Ba,Ca,Da,Ga,Va,Ua,Xa,Za,Ya,$a,ab,ib,nb,ob,pb,qb;_.aa=function(a,b){if(Error.captureStackTrace)Error.captureStackTrace(this,_.aa);else{const c=Error().stack;c&&(this.stack=c)}a&&(this.message=String(a));void 0!==b&&(this.cause=b)};_.ba=function(){var a=_.q.navigator;return a&&(a=a.userAgent)?a:\"\"};ea=function(a){return ca?da?da.brands.some(({brand:b})=>b&&-1!=b.indexOf(a)):!1:!1};_.u=function(a){return-1!=_.ba().indexOf(a)};\n_.fa=function(){return ca?!!da&&0<da.brands.length:!1};_.ha=function(){return _.fa()?!1:_.u(\"Opera\")};_.ia=function(){return _.fa()?!1:_.u(\"Trident\")||_.u(\"MSIE\")};_.ja=function(){return _.u(\"Firefox\")||_.u(\"FxiOS\")};_.la=function(){return _.u(\"Safari\")&&!(ka()||(_.fa()?0:_.u(\"Coast\"))||_.ha()||(_.fa()?0:_.u(\"Edge\"))||(_.fa()?ea(\"Microsoft Edge\"):_.u(\"Edg/\"))||(_.fa()?ea(\"Opera\"):_.u(\"OPR\"))||_.ja()||_.u(\"Silk\")||_.u(\"Android\"))};\nka=function(){return _.fa()?ea(\"Chromium\"):(_.u(\"Chrome\")||_.u(\"CriOS\"))&&!(_.fa()?0:_.u(\"Edge\"))||_.u(\"Silk\")};_.ma=function(){return _.u(\"Android\")&&!(ka()||_.ja()||_.ha()||_.u(\"Silk\"))};na=function(){return ca?!!da&&!!da.platform:!1};oa=function(){return _.u(\"iPhone\")&&!_.u(\"iPod\")&&!_.u(\"iPad\")};_.pa=function(){return oa()||_.u(\"iPad\")||_.u(\"iPod\")};_.qa=function(){return na()?\"macOS\"===da.platform:_.u(\"Macintosh\")};_.sa=function(a,b){return 0<=_.ra(a,b)};\n_.ta=function(a){let b=\"\",c=0;const d=a.length-10240;for(;c<d;)b+=String.fromCharCode.apply(null,a.subarray(c,c+=10240));b+=String.fromCharCode.apply(null,c?a.subarray(c):a);return btoa(b)};_.ua=function(a){return null!=a&&a instanceof Uint8Array};_.va=function(a){return Array.prototype.slice.call(a)};xa=function(a,b){_.wa(b,(a|0)&-14591)};ya=function(a,b){_.wa(b,(a|34)&-14557)};za=function(a){a=a>>14&1023;return 0===a?536870912:a};Ba=function(a){return!(!a||\"object\"!==typeof a||a.i!==Aa)};\nCa=function(a){return null!==a&&\"object\"===typeof a&&!Array.isArray(a)&&a.constructor===Object};Da=function(a,b,c){if(!Array.isArray(a)||a.length)return!1;const d=a[_.v]|0;if(d&1)return!0;if(!(b&&(Array.isArray(b)?b.includes(c):b.has(c))))return!1;_.wa(a,d|1);return!0};_.Ea=function(a){if(a&2)throw Error();};Ga=function(a,b){(b=_.Fa?b[_.Fa]:void 0)&&(a[_.Fa]=_.va(b))};\n_.Ha=function(a){a=Error(a);a.__closure__error__context__984382||(a.__closure__error__context__984382={});a.__closure__error__context__984382.severity=\"warning\";return a};_.Ka=function(a){if(\"boolean\"!==typeof a)throw Error(\"r`\"+_.Ia(a)+\"`\"+a);return a};_.La=function(a){if(!Number.isFinite(a))throw _.Ha(\"enum\");return a|0};_.Ma=function(a){if(\"number\"!==typeof a)throw _.Ha(\"int32\");if(!Number.isFinite(a))throw _.Ha(\"int32\");return a|0};\n_.Na=function(a){if(null!=a&&\"string\"!==typeof a)throw Error();return a};_.Oa=function(a){return null==a||\"string\"===typeof a?a:void 0};_.Qa=function(a,b,c){if(null!=a&&\"object\"===typeof a&&a.Rd===_.Pa)return a;if(Array.isArray(a)){var d=a[_.v]|0,e=d;0===e&&(e|=c&32);e|=c&2;e!==d&&_.wa(a,e);return new b(a)}};_.Sa=function(a,b){Ra=b;a=new a(b);Ra=void 0;return a};\n_.Ta=function(a,b,c){null==a&&(a=Ra);Ra=void 0;if(null==a){var d=96;c?(a=[c],d|=512):a=[];b&&(d=d&-16760833|(b&1023)<<14)}else{if(!Array.isArray(a))throw Error();d=a[_.v]|0;if(d&64)return a;d|=64;if(c&&(d|=512,c!==a[0]))throw Error();a:{c=a;const e=c.length;if(e){const f=e-1;if(Ca(c[f])){d|=256;b=f-(+!!(d&512)-1);if(1024<=b)throw Error();d=d&-16760833|(b&1023)<<14;break a}}if(b){b=Math.max(b,e-(+!!(d&512)-1));if(1024<b)throw Error();d=d&-16760833|(b&1023)<<14}}}_.wa(a,d);return a};Va=function(a,b){return Ua(b)};\nUa=function(a){switch(typeof a){case \"number\":return isFinite(a)?a:String(a);case \"boolean\":return a?1:0;case \"object\":if(a)if(Array.isArray(a)){if(Da(a,void 0,0))return}else{if(_.ua(a))return _.ta(a);if(\"function\"==typeof _.Wa&&a instanceof _.Wa)return a.j()}}return a};Xa=function(a,b,c){const d=_.va(a);var e=d.length;const f=b&256?d[e-1]:void 0;e+=f?-1:0;for(b=b&512?1:0;b<e;b++)d[b]=c(d[b]);if(f){b=d[b]={};for(const g in f)b[g]=c(f[g])}Ga(d,a);return d};\nZa=function(a,b,c,d,e){if(null!=a){if(Array.isArray(a))a=Da(a,void 0,0)?void 0:e&&(a[_.v]|0)&2?a:Ya(a,b,c,void 0!==d,e);else if(Ca(a)){const f={};for(let g in a)f[g]=Za(a[g],b,c,d,e);a=f}else a=b(a,d);return a}};Ya=function(a,b,c,d,e){const f=d||c?a[_.v]|0:0;d=d?!!(f&32):void 0;const g=_.va(a);for(let h=0;h<g.length;h++)g[h]=Za(g[h],b,c,d,e);c&&(Ga(g,a),c(f,g));return g};$a=function(a){return a.Rd===_.Pa?a.toJSON():Ua(a)};\nab=function(a,b,c=ya){if(null!=a){if(a instanceof Uint8Array)return b?a:new Uint8Array(a);if(Array.isArray(a)){var d=a[_.v]|0;if(d&2)return a;b&&(b=0===d||!!(d&32)&&!(d&64||!(d&16)));return b?_.wa(a,(d|34)&-12293):Ya(a,ab,d&4?ya:c,!0,!0)}a.Rd===_.Pa&&(c=a.qa,d=c[_.v],a=d&2?a:_.Sa(a.constructor,_.bb(c,d,!0)));return a}};_.bb=function(a,b,c){const d=c||b&2?ya:xa,e=!!(b&32);a=Xa(a,b,f=>ab(f,e,d));a[_.v]=a[_.v]|32|(c?2:0);return a};\n_.cb=function(a){const b=a.qa,c=b[_.v];return c&2?_.Sa(a.constructor,_.bb(b,c,!1)):a};_.db=function(a,b,c,d,e){const f=za(b);if(c>=f||e){let g=b;if(b&256)e=a[a.length-1];else{if(null==d)return g;e=a[f+(+!!(b&512)-1)]={};g|=256}e[c]=d;c<f&&(a[c+(+!!(b&512)-1)]=void 0);g!==b&&_.wa(a,g);return g}a[c+(+!!(b&512)-1)]=d;b&256&&(a=a[a.length-1],c in a&&delete a[c]);return b};_.fb=function(a,b,c,d){a=a.qa;let e=a[_.v];const f=_.eb(a,e,c,d);b=_.Qa(f,b,e);b!==f&&null!=b&&_.db(a,e,c,b,d);return b};\n_.gb=function(a,b){return null!=a?a:b};\nib=function(a,b,c){var d=hb?void 0:a.constructor.ta;const e=(c?a.qa:b)[_.v];a=b.length;if(!a)return b;let f,g;if(Ca(c=b[a-1])){a:{var h=c;let p={},n=!1;for(var k in h){let r=h[k];if(Array.isArray(r)){let t=r;if(Da(r,d,+k)||Ba(r)&&0===r.size)r=null;r!=t&&(n=!0)}null!=r?p[k]=r:n=!0}if(n){for(var l in p){h=p;break a}h=null}}h!=c&&(f=!0);a--}for(k=+!!(e&512)-1;0<a;a--){l=a-1;c=b[l];l-=k;if(!(null==c||Da(c,d,l)||Ba(c)&&0===c.size))break;g=!0}if(!f&&!g)return b;b=Array.prototype.slice.call(b,0,a);h&&b.push(h);\nreturn b};_.w=function(a,b){return null!=a?!!a:!!b};_.x=function(a,b){void 0==b&&(b=\"\");return null!=a?a:b};_.jb=function(a,b){void 0==b&&(b=0);return null!=a?a:b};_.kb=function(a){for(const b in a)return!1;return!0};_.mb=function(a,b){let c,d;for(let e=1;e<arguments.length;e++){d=arguments[e];for(c in d)a[c]=d[c];for(let f=0;f<lb.length;f++)c=lb[f],Object.prototype.hasOwnProperty.call(d,c)&&(a[c]=d[c])}};\nnb=\"function\"==typeof Object.defineProperties?Object.defineProperty:function(a,b,c){if(a==Array.prototype||a==Object.prototype)return a;a[b]=c.value;return a};ob=function(a){a=[\"object\"==typeof globalThis&&globalThis,a,\"object\"==typeof window&&window,\"object\"==typeof self&&self,\"object\"==typeof global&&global];for(var b=0;b<a.length;++b){var c=a[b];if(c&&c.Math==Math)return c}throw Error(\"a\");};pb=ob(this);\nqb=function(a,b){if(b)a:{var c=pb;a=a.split(\".\");for(var d=0;d<a.length-1;d++){var e=a[d];if(!(e in c))break a;c=c[e]}a=a[a.length-1];d=c[a];b=b(d);b!=d&&null!=b&&nb(c,a,{configurable:!0,writable:!0,value:b})}};qb(\"globalThis\",function(a){return a||pb});var tb,ub,xb,yb;_.rb=_.rb||{};_.q=this||self;tb=function(a){var b=_.sb(\"WIZ_global_data.oxN3nb\");a=b&&b[a];return null!=a?a:!1};ub=_.q._F_toggles||[];_.sb=function(a,b){a=a.split(\".\");b=b||_.q;for(var c=0;c<a.length;c++)if(b=b[a[c]],null==b)return null;return b};_.Ia=function(a){var b=typeof a;return\"object\"!=b?b:a?Array.isArray(a)?\"array\":b:\"null\"};_.vb=function(a){var b=typeof a;return\"object\"==b&&null!=a||\"function\"==b};_.wb=\"closure_uid_\"+(1E9*Math.random()>>>0);\nxb=function(a,b,c){return a.call.apply(a.bind,arguments)};yb=function(a,b,c){if(!a)throw Error();if(2<arguments.length){var d=Array.prototype.slice.call(arguments,2);return function(){var e=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(e,d);return a.apply(b,e)}}return function(){return a.apply(b,arguments)}};_.y=function(a,b,c){_.y=Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf(\"native code\")?xb:yb;return _.y.apply(null,arguments)};\n_.z=function(a,b){a=a.split(\".\");var c=_.q;a[0]in c||\"undefined\"==typeof c.execScript||c.execScript(\"var \"+a[0]);for(var d;a.length&&(d=a.shift());)a.length||void 0===b?c[d]&&c[d]!==Object.prototype[d]?c=c[d]:c=c[d]={}:c[d]=b};_.A=function(a,b){function c(){}c.prototype=b.prototype;a.X=b.prototype;a.prototype=new c;a.prototype.constructor=a;a.fj=function(d,e,f){for(var g=Array(arguments.length-2),h=2;h<arguments.length;h++)g[h-2]=arguments[h];return b.prototype[e].apply(d,g)}};_.A(_.aa,Error);_.aa.prototype.name=\"CustomError\";_.zb=String.prototype.trim?function(a){return a.trim()}:function(a){return/^[\\s\\xa0]*([\\s\\S]*?)[\\s\\xa0]*$/.exec(a)[1]};var Ab=!!(ub[0]&128),Bb=!!(ub[0]&256),Cb=!!(ub[0]&2);var ca=Ab?Bb:tb(610401301),hb=Ab?Cb:tb(188588736);var da,Db=_.q.navigator;da=Db?Db.userAgentData||null:null;_.ra=function(a,b){return Array.prototype.indexOf.call(a,b,void 0)};_.Eb=function(a,b,c){Array.prototype.forEach.call(a,b,c)};_.Fb=function(a){_.Fb[\" \"](a);return a};_.Fb[\" \"]=function(){};var Sb,Tb,Yb;_.Gb=_.ha();_.B=_.ia();_.Hb=_.u(\"Edge\");_.Ib=_.Hb||_.B;_.Jb=_.u(\"Gecko\")&&!(-1!=_.ba().toLowerCase().indexOf(\"webkit\")&&!_.u(\"Edge\"))&&!(_.u(\"Trident\")||_.u(\"MSIE\"))&&!_.u(\"Edge\");_.Kb=-1!=_.ba().toLowerCase().indexOf(\"webkit\")&&!_.u(\"Edge\");_.Lb=_.qa();_.Mb=na()?\"Windows\"===da.platform:_.u(\"Windows\");_.Nb=na()?\"Android\"===da.platform:_.u(\"Android\");_.Ob=oa();_.Pb=_.u(\"iPad\");_.Qb=_.u(\"iPod\");_.Rb=_.pa();Sb=function(){var a=_.q.document;return a?a.documentMode:void 0};\na:{var Ub=\"\",Vb=function(){var a=_.ba();if(_.Jb)return/rv:([^\\);]+)(\\)|;)/.exec(a);if(_.Hb)return/Edge\\/([\\d\\.]+)/.exec(a);if(_.B)return/\\b(?:MSIE|rv)[: ]([^\\);]+)(\\)|;)/.exec(a);if(_.Kb)return/WebKit\\/(\\S+)/.exec(a);if(_.Gb)return/(?:Version)[ \\/]?(\\S+)/.exec(a)}();Vb&&(Ub=Vb?Vb[1]:\"\");if(_.B){var Wb=Sb();if(null!=Wb&&Wb>parseFloat(Ub)){Tb=String(Wb);break a}}Tb=Ub}_.Xb=Tb;if(_.q.document&&_.B){var Zb=Sb();Yb=Zb?Zb:parseInt(_.Xb,10)||void 0}else Yb=void 0;_.ac=Yb;_.bc=_.ja();_.cc=oa()||_.u(\"iPod\");_.dc=_.u(\"iPad\");_.ec=_.ma();_.fc=ka();_.gc=_.la()&&!_.pa();_.hc=\"undefined\"!==typeof TextDecoder;_.ic=\"undefined\"!==typeof TextEncoder;_.v=Symbol();_.wa=(a,b)=>{a[_.v]=b;return a};var Aa,jc,lc,mc,nc;_.Pa={};Aa={};lc=[];_.wa(lc,55);_.kc=Object.freeze(lc);mc=class{};nc=class{};Object.freeze(new mc);Object.freeze(new nc);var Ra;_.oc=function(a,b){a=a.qa;return _.eb(a,a[_.v],b)};_.eb=function(a,b,c,d){if(-1===c)return null;if(c>=za(b)){if(b&256)return a[a.length-1][c]}else{var e=a.length;if(d&&b&256&&(d=a[e-1][c],null!=d))return d;b=c+(+!!(b&512)-1);if(b<e)return a[b]}};_.pc=function(a,b,c){const d=a.qa;let e=d[_.v];_.Ea(e);_.db(d,e,b,c);return a};_.C=function(a,b){a=_.oc(a,b);return null==a||\"boolean\"===typeof a?a:\"number\"===typeof a?!!a:void 0};\n_.E=function(a,b,c,d=!1){b=_.fb(a,b,c,d);if(null==b)return b;a=a.qa;let e=a[_.v];if(!(e&2)){const f=_.cb(b);f!==b&&(b=f,_.db(a,e,c,b,d))}return b};_.F=function(a,b,c){null==c&&(c=void 0);return _.pc(a,b,c)};_.G=function(a,b){return _.Oa(_.oc(a,b))};_.H=function(a,b){return _.gb(_.C(a,b),!1)};_.qc=function(a,b,c=0){a=a.qa;let d=a[_.v];const e=_.eb(a,d,b);var f=null==e||\"number\"===typeof e?e:\"NaN\"===e||\"Infinity\"===e||\"-Infinity\"===e?Number(e):void 0;null!=f&&f!==e&&_.db(a,d,b,f);return _.gb(f,c)};\n_.J=function(a,b){return _.gb(_.G(a,b),\"\")};_.K=function(a,b,c){return _.pc(a,b,null==c?c:_.Ka(c))};_.L=function(a,b,c){return _.pc(a,b,null==c?c:_.Ma(c))};_.M=function(a,b,c){return _.pc(a,b,_.Na(c))};_.N=function(a,b,c){return _.pc(a,b,null==c?c:_.La(c))};_.Q=class{constructor(a,b,c){this.qa=_.Ta(a,b,c)}toJSON(){return jc?ib(this,this.qa,!1):ib(this,Ya(this.qa,$a,void 0,void 0,!1),!0)}Ia(){jc=!0;try{return JSON.stringify(this.toJSON(),Va)}finally{jc=!1}}Cc(){return!!((this.qa[_.v]|0)&2)}};_.Q.prototype.Rd=_.Pa;_.Q.prototype.toString=function(){return ib(this,this.qa,!1).toString()};_.rc=Symbol();_.sc=Symbol();_.uc=Symbol();_.vc=Symbol();_.wc=Symbol();var xc=class extends _.Q{constructor(){super()}};_.yc=class extends _.Q{constructor(){super()}B(a){return _.L(this,3,a)}};var zc=class extends _.Q{constructor(a){super(a)}};var Ac=class extends _.Q{constructor(a){super(a)}Uc(a){return _.M(this,24,a)}};_.Bc=class extends _.Q{constructor(a){super(a)}};_.Cc=function(){this.Ga=this.Ga;this.oa=this.oa};_.Cc.prototype.Ga=!1;_.Cc.prototype.isDisposed=function(){return this.Ga};_.Cc.prototype.ka=function(){this.Ga||(this.Ga=!0,this.O())};_.Cc.prototype.O=function(){if(this.oa)for(;this.oa.length;)this.oa.shift()()};var Dc=class extends _.Cc{constructor(){var a=window;super();this.o=a;this.i=[];this.j={}}resolve(a){var b=this.o;a=a.split(\".\");for(var c=a.length,d=0;d<c;++d)if(b[a[d]])b=b[a[d]];else return null;return b instanceof Function?b:null}Hb(){for(var a=this.i.length,b=this.i,c=[],d=0;d<a;++d){var e=b[d].i(),f=this.resolve(e);if(f&&f!=this.j[e])try{b[d].Hb(f)}catch(g){}else c.push(b[d])}this.i=c.concat(b.slice(a))}};var Fc=class extends _.Cc{constructor(){var a=_.Ec;super();this.o=a;this.A=this.i=null;this.v=0;this.C={};this.j=!1;a=window.navigator.userAgent;0<=a.indexOf(\"MSIE\")&&0<=a.indexOf(\"Trident\")&&(a=/\\b(?:MSIE|rv)[: ]([^\\);]+)(\\)|;)/.exec(a))&&a[1]&&9>parseFloat(a[1])&&(this.j=!0)}B(a,b){this.i=b;this.A=a;b.preventDefault?b.preventDefault():b.returnValue=!1}};_.Gc=class extends _.Q{constructor(a){super(a)}};var Hc=class extends _.Q{constructor(a){super(a)}};var Jc;_.Ic=function(a,b,c=98){if(a.i){const d=new xc;_.M(d,1,b.message);_.M(d,2,b.stack);_.L(d,3,b.lineNumber);_.N(d,5,1);b=new _.yc;_.F(b,40,d);a.i.log(c,b)}};Jc=class{constructor(){this.i=null}log(a){_.Ic(this,a)}};var Kc,Nc,Mc;_.Lc=function(a){let b;b=window.google&&window.google.logUrl?\"\":\"https://www.google.com\";b+=\"/gen_204?use_corp=on&\";b+=a.Ia(2040-b.length);Kc(b)};Kc=function(a){var b=new Image,c=Mc;b.onerror=b.onload=b.onabort=function(){c in Nc&&delete Nc[c]};Nc[Mc++]=b;b.src=a};Nc=[];Mc=0;_.Oc=class{constructor(){this.data={}}Ia(a){var b=[],c;for(c in this.data)b.push(encodeURIComponent(c)+\"=\"+encodeURIComponent(String(this.data[c])));return(\"atyp=i&zx=\"+(new Date).getTime()+\"&\"+b.join(\"&\")).substr(0,a)}};var Pc=class extends _.Oc{constructor(a){super();var b=_.E(a,zc,8)||new zc;window.google&&window.google.kEI&&(this.data.ei=window.google.kEI);this.data.sei=_.x(_.G(a,10));this.data.ogf=_.x(_.G(b,3));this.data.ogrp=(window.google&&window.google.sn?!/.*hp$/.test(window.google.sn):_.w(_.C(a,7)))?\"1\":\"\";this.data.ogv=_.x(_.G(b,6))+\".\"+_.x(_.G(b,7));this.data.ogd=_.x(_.G(a,21));this.data.ogc=_.x(_.G(a,20));this.data.ogl=_.x(_.G(a,5));this.data.oggv=\"quantum:gapiBuildLabel\"}};var lb=\"constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf\".split(\" \");var Qc=[1,2,3,4,5,6,9,10,11,13,14,28,29,30,34,35,37,38,39,40,42,43,48,49,50,51,52,53,62,500],Sc=function(a){if(!Rc){Rc={};for(var b=0;b<Qc.length;b++)Rc[Qc[b]]=!0}return!!Rc[a]},Tc=function(a){a=String(a);return a.replace(\".\",\"%2E\").replace(\",\",\"%2C\")},Uc=class extends Pc{constructor(a,b,c,d,e){super(a);_.mb(this.data,{oge:c,ogex:_.x(_.G(a,9)),ogp:_.x(_.G(a,6)),ogsr:Math.round(1/(Sc(c)?_.jb(_.qc(b,3,1)):_.jb(_.qc(b,2,1E-4)))),ogus:d});if(e){\"ogw\"in e&&(this.data.ogw=e.ogw,delete e.ogw);\"ved\"in e&&\n(this.data.ved=e.ved,delete e.ved);a=[];for(var f in e)0!=a.length&&a.push(\",\"),a.push(Tc(f)),a.push(\".\"),a.push(Tc(e[f]));e=a.join(\"\");\"\"!=e&&(this.data.ogad=e)}}},Rc=null;var Vc=class extends _.Q{constructor(a){super(a)}};var Zc=class{constructor(){var a=Wc,b=Xc,c=Yc;this.i=a;this.v=b;this.o=_.jb(_.qc(a,2,1E-4),1E-4);this.C=_.jb(_.qc(a,3,1),1);b=Math.random();this.j=_.w(_.C(a,1))&&b<this.o;this.A=_.w(_.C(a,1))&&b<this.C;a=0;_.w(_.C(c,1))&&(a|=1);_.w(_.C(c,2))&&(a|=2);_.w(_.C(c,3))&&(a|=4);this.B=a}log(a,b){try{if(Sc(a)?this.A:this.j){const c=new Uc(this.v,this.i,a,this.B,b);_.Lc(c)}}catch(c){}}};var ad;_.$c=function(a){if(0<a.o.length){var b=void 0!==a.i,c=void 0!==a.j;if(b||c){b=b?a.v:a.A;c=a.o;a.o=[];try{_.Eb(c,b,a)}catch(d){console.error(d)}}}};_.bd=class{constructor(a){this.i=a;this.j=void 0;this.o=[]}then(a,b,c){this.o.push(new ad(a,b,c));_.$c(this)}resolve(a){if(void 0!==this.i||void 0!==this.j)throw Error(\"v\");this.i=a;_.$c(this)}v(a){a.j&&a.j.call(a.i,this.i)}A(a){a.o&&a.o.call(a.i,this.j)}};ad=class{constructor(a,b,c){this.j=a;this.o=b;this.i=c}};_.cd=a=>{var b=\"Ac\";if(a.Ac&&a.hasOwnProperty(b))return a.Ac;b=new a;return a.Ac=b};_.dd=class{constructor(){this.v=new _.bd;this.i=new _.bd;this.D=new _.bd;this.C=new _.bd;this.B=new _.bd;this.A=new _.bd;this.o=new _.bd;this.j=new _.bd;this.H=new _.bd}K(){return this.v}M(){return this.i}N(){return this.D}L(){return this.C}Ga(){return this.B}oa(){return this.A}J(){return this.o}G(){return this.j}static i(){return _.cd(_.dd)}};var id;_.fd=function(){return _.E(_.ed,Ac,1)};_.gd=function(){return _.E(_.ed,_.Bc,5)};id=class extends _.Q{constructor(){super(hd)}};var hd;window.gbar_&&window.gbar_.CONFIG?hd=window.gbar_.CONFIG[0]||{}:hd=[];_.ed=new id;var Xc,Yc,Wc;_.E(_.ed,Hc,3)||new Hc;_.fd()||new Ac;_.Ec=new Jc;Xc=_.fd()||new Ac;Yc=_.gd()||new _.Bc;Wc=_.E(_.ed,Vc,4)||new Vc;new Zc;_.z(\"gbar_._DumpException\",function(a){_.Ec?_.Ec.log(a):console.error(a)});_.jd=new Fc;var ld;_.md=function(a,b){var c=_.kd.i();if(a in c.i){if(c.i[a]!=b)throw new ld;}else{c.i[a]=b;const h=c.j[a];if(h)for(let k=0,l=h.length;k<l;k++){b=h[k];var d=c.i;delete b.i[a];if(_.kb(b.i)){for(var e=b.j.length,f=Array(e),g=0;g<e;g++)f[g]=d[b.j[g]];b.o.apply(b.v,f)}}delete c.j[a]}};_.kd=class{constructor(){this.i={};this.j={}}static i(){return _.cd(_.kd)}};_.nd=class extends _.aa{constructor(){super()}};ld=class extends _.nd{};_.z(\"gbar.A\",_.bd);_.bd.prototype.aa=_.bd.prototype.then;_.z(\"gbar.B\",_.dd);_.dd.prototype.ba=_.dd.prototype.M;_.dd.prototype.bb=_.dd.prototype.N;_.dd.prototype.bd=_.dd.prototype.Ga;_.dd.prototype.bf=_.dd.prototype.K;_.dd.prototype.bg=_.dd.prototype.L;_.dd.prototype.bh=_.dd.prototype.oa;_.dd.prototype.bj=_.dd.prototype.J;_.dd.prototype.bk=_.dd.prototype.G;_.z(\"gbar.a\",_.dd.i());window.gbar&&window.gbar.ap&&window.gbar.ap(window.gbar.a);var od=new Dc;_.md(\"api\",od);var pd=_.gd()||new _.Bc;\nwindow.__PVT=_.x(_.G(pd,8));_.md(\"eq\",_.jd);\n}catch(e){_._DumpException(e)}\ntry{\n_.qd=class extends _.Q{constructor(a){super(a)}};\n}catch(e){_._DumpException(e)}\ntry{\nvar rd=class extends _.Q{constructor(){super()}};var sd=class extends _.Cc{constructor(){super();this.j=[];this.i=[]}o(a,b){this.j.push({features:a,options:b})}init(a,b,c){window.gapi={};var d=window.___jsl={};d.h=_.x(_.G(a,1));null!=_.C(a,12)&&(d.dpo=_.w(_.H(a,12)));d.ms=_.x(_.G(a,2));d.m=_.x(_.G(a,3));d.l=[];_.J(b,1)&&(a=_.G(b,3))&&this.i.push(a);_.J(c,1)&&(c=_.G(c,2))&&this.i.push(c);_.z(\"gapi.load\",(0,_.y)(this.o,this));return this}};var td=_.E(_.ed,_.Gc,14);if(td){var ud=_.E(_.ed,_.qd,9)||new _.qd,vd=new rd,wd=new sd;wd.init(td,ud,vd);_.md(\"gs\",wd)};\n}catch(e){_._DumpException(e)}\n})(this.gbar_);\n// Google Inc.\n</script><script id=\"ogb-head-script2\">this.gbar_=this.gbar_||{};(function(_){var window=this;\ntry{\n_.xd=function(a,b,c){if(!a.j)if(c instanceof Array)for(var d of c)_.xd(a,b,d);else{d=(0,_.y)(a.B,a,b);const e=a.v+c;a.v++;b.dataset.eqid=e;a.C[e]=d;b&&b.addEventListener?b.addEventListener(c,d,!1):b&&b.attachEvent?b.attachEvent(\"on\"+c,d):a.o.log(Error(\"s`\"+b))}};\n}catch(e){_._DumpException(e)}\ntry{\n_.yd=function(){if(!_.q.addEventListener||!Object.defineProperty)return!1;var a=!1,b=Object.defineProperty({},\"passive\",{get:function(){a=!0}});try{const c=()=>{};_.q.addEventListener(\"test\",c,b);_.q.removeEventListener(\"test\",c,b)}catch(c){}return a}();\n}catch(e){_._DumpException(e)}\ntry{\nvar zd=document.querySelector(\".gb_k .gb_d\"),Ad=document.querySelector(\"#gb.gb_Wc\");zd&&!Ad&&_.xd(_.jd,zd,\"click\");\n}catch(e){_._DumpException(e)}\ntry{\n_.yh=function(a){const b=[];let c=0;for(const d in a)b[c++]=a[d];return b};_.zh=function(a){if(a.o)return a.o;for(const b in a.i)if(a.i[b].ua()&&a.i[b].C())return a.i[b];return null};_.Ah=function(a,b){a.i[b.K()]=b};var Bh=new class extends _.Cc{constructor(){var a=_.Ec;super();this.C=a;this.o=null;this.j={};this.B={};this.i={};this.v=null}A(a){this.i[a]&&(_.zh(this)&&_.zh(this).K()==a||this.i[a].P(!0))}Za(a){this.v=a;for(const b in this.i)this.i[b].ua()&&this.i[b].Za(a)}xc(a){return a in this.i?this.i[a]:null}};_.md(\"dd\",Bh);\n}catch(e){_._DumpException(e)}\ntry{\n_.kj=function(a,b){return _.K(a,36,b)};\n}catch(e){_._DumpException(e)}\ntry{\nvar lj=document.querySelector(\".gb_b .gb_d\"),mj=document.querySelector(\"#gb.gb_Wc\");lj&&!mj&&_.xd(_.jd,lj,\"click\");\n}catch(e){_._DumpException(e)}\n})(this.gbar_);\n// Google Inc.\n</script><script id=\"ogb-head-script3\">this.gbar_=this.gbar_||{};(function(_){var window=this;\ntry{\nvar Cd;_.Bd=function(a){const b=a.length;if(0<b){const c=Array(b);for(let d=0;d<b;d++)c[d]=a[d];return c}return[]};Cd=function(a){return a};_.Dd=function(a){var b=null,c=_.q.trustedTypes;if(!c||!c.createPolicy)return b;try{b=c.createPolicy(a,{createHTML:Cd,createScript:Cd,createScriptURL:Cd})}catch(d){_.q.console&&_.q.console.error(d.message)}return b};_.Ed=function(a,b){return 0==a.lastIndexOf(b,0)};_.Fd=function(a,b){return Array.prototype.some.call(a,b,void 0)};try{(new self.OffscreenCanvas(0,0)).getContext(\"2d\")}catch(a){};var Gd;_.Hd=function(){void 0===Gd&&(Gd=_.Dd(\"ogb-qtm#html\"));return Gd};var Kd,Md;_.Id=class{constructor(a){this.i=a}toString(){return this.i.toString()}};_.Jd=function(a){return a instanceof _.Id&&a.constructor===_.Id?a.i:\"type_error:SafeUrl\"};try{new URL(\"s://g\"),Kd=!0}catch(a){Kd=!1}_.Ld=Kd;Md={};_.Nd=function(a){return new _.Id(a,Md)};_.Od=_.Nd(\"about:invalid#zClosurez\");_.Pd={};_.Qd=class{constructor(a){this.i=a}toString(){return this.i.toString()}};_.Rd=new _.Qd(\"\",_.Pd);_.Sd=RegExp(\"^[-+,.\\\"'%_!#/ a-zA-Z0-9\\\\[\\\\]]+$\");_.Td=RegExp(\"\\\\b(url\\\\([ \\t\\n]*)('[ -&(-\\\\[\\\\]-~]*'|\\\"[ !#-\\\\[\\\\]-~]*\\\"|[!#-&*-\\\\[\\\\]-~]*)([ \\t\\n]*\\\\))\",\"g\");_.Ud=RegExp(\"\\\\b(calc|cubic-bezier|fit-content|hsl|hsla|linear-gradient|matrix|minmax|radial-gradient|repeat|rgb|rgba|(rotate|scale|translate)(X|Y|Z|3d)?|steps|var)\\\\([-+*/0-9a-zA-Z.%#\\\\[\\\\], ]+\\\\)\",\"g\");var Vd;Vd={};_.Xd=function(a){return a instanceof _.Wd&&a.constructor===_.Wd?a.i:\"type_error:SafeHtml\"};_.Yd=function(a){const b=_.Hd();a=b?b.createHTML(a):a;return new _.Wd(a,Vd)};_.Wd=class{constructor(a){this.i=a}toString(){return this.i.toString()}};_.Zd=new _.Wd(_.q.trustedTypes&&_.q.trustedTypes.emptyHTML||\"\",Vd);_.$d=_.Yd(\"<br>\");/*\n\nSPDX-License-Identifier: Apache-2.0\n*/\n_.ae=_.Nd(\"about:invalid#zClosurez\");var ce;_.be=function(a){let b=!1,c;return function(){b||(c=a(),b=!0);return c}}(function(){var a=document.createElement(\"div\"),b=document.createElement(\"div\");b.appendChild(document.createElement(\"div\"));a.appendChild(b);b=a.firstChild.firstChild;a.innerHTML=_.Xd(_.Zd);return!b.parentElement});ce=/^[\\w+/_-]+[=]{0,2}$/;\n_.de=function(a){a=(a||_.q).document;return a.querySelector?(a=a.querySelector('style[nonce],link[rel=\"stylesheet\"][nonce]'))&&(a=a.nonce||a.getAttribute(\"nonce\"))&&ce.test(a)?a:\"\":\"\"};_.ee=function(a,b){this.width=a;this.height=b};_.m=_.ee.prototype;_.m.aspectRatio=function(){return this.width/this.height};_.m.Jb=function(){return!(this.width*this.height)};_.m.ceil=function(){this.width=Math.ceil(this.width);this.height=Math.ceil(this.height);return this};_.m.floor=function(){this.width=Math.floor(this.width);this.height=Math.floor(this.height);return this};_.m.round=function(){this.width=Math.round(this.width);this.height=Math.round(this.height);return this};_.R=function(a,b){var c=b||document;if(c.getElementsByClassName)a=c.getElementsByClassName(a)[0];else{c=document;var d=b||c;a=d.querySelectorAll&&d.querySelector&&a?d.querySelector(a?\".\"+a:\"\"):_.fe(c,a,b)[0]||null}return a||null};\n_.fe=function(a,b,c){var d;a=c||a;if(a.querySelectorAll&&a.querySelector&&b)return a.querySelectorAll(b?\".\"+b:\"\");if(b&&a.getElementsByClassName){var e=a.getElementsByClassName(b);return e}e=a.getElementsByTagName(\"*\");if(b){var f={};for(c=d=0;a=e[c];c++){var g=a.className;\"function\"==typeof g.split&&_.sa(g.split(/\\s+/),b)&&(f[d++]=a)}f.length=d;return f}return e};_.he=function(a){return _.ge(document,a)};\n_.ge=function(a,b){b=String(b);\"application/xhtml+xml\"===a.contentType&&(b=b.toLowerCase());return a.createElement(b)};_.ie=function(a){for(var b;b=a.firstChild;)a.removeChild(b)};_.je=function(a){return 9==a.nodeType?a:a.ownerDocument||a.document};\n}catch(e){_._DumpException(e)}\ntry{\nvar Ge,Ie;_.Ae=function(a){if(null==a)return a;if(\"string\"===typeof a){if(!a)return;a=+a}if(\"number\"===typeof a)return Number.isFinite(a)?a|0:void 0};_.Be=function(a,b){var c=Array.prototype.slice.call(arguments,1);return function(){var d=c.slice();d.push.apply(d,arguments);return a.apply(this,d)}};_.Ce=function(a,b,c){return void 0!==_.fb(a,b,c,!1)};_.De=function(a,b){return _.Ae(_.oc(a,b))};_.T=function(a,b){a=_.oc(a,b);return null==a?a:Number.isFinite(a)?a|0:void 0};\n_.U=function(a,b,c=0){return _.gb(_.De(a,b),c)};_.Ee=function(a,b){if(void 0!==a.i||void 0!==a.j)throw Error(\"v\");a.j=b;_.$c(a)};_.Fe=class extends _.Q{constructor(a){super(a)}};Ge=class extends _.nd{};_.He=function(a,b){if(b in a.i)return a.i[b];throw new Ge;};Ie=0;_.Je=function(a){return Object.prototype.hasOwnProperty.call(a,_.wb)&&a[_.wb]||(a[_.wb]=++Ie)};_.Ke=function(a){return _.He(_.kd.i(),a)};\n}catch(e){_._DumpException(e)}\ntry{\nvar rj=function(a){return new _.qj(b=>b.substr(0,a.length+1).toLowerCase()===a+\":\")};_.qj=class{constructor(a){this.kh=a}};_.sj=[rj(\"data\"),rj(\"http\"),rj(\"https\"),rj(\"mailto\"),rj(\"ftp\"),new _.qj(a=>/^[^:]*([/?#]|$)/.test(a))];\n}catch(e){_._DumpException(e)}\ntry{\nvar tj;tj={};_.uj=class{constructor(a){this.i=a}toString(){return this.i+\"\"}};_.vj=function(a){return a instanceof _.uj&&a.constructor===_.uj?a.i:\"type_error:TrustedResourceUrl\"};_.wj=function(a){const b=_.Hd();a=b?b.createScriptURL(a):a;return new _.uj(a,tj)};\n}catch(e){_._DumpException(e)}\ntry{\n_.xj=function(a){var b;let c;const d=null==(c=(b=(a.ownerDocument&&a.ownerDocument.defaultView||window).document).querySelector)?void 0:c.call(b,\"script[nonce]\");(b=d?d.nonce||d.getAttribute(\"nonce\")||\"\":\"\")&&a.setAttribute(\"nonce\",b)};_.yj=function(a){if(!a)return null;a=_.G(a,4);var b;null===a||void 0===a?b=null:b=_.wj(a);return b};_.zj=class extends _.Q{constructor(a){super(a)}};_.Aj=function(a,b){return(b||document).getElementsByTagName(String(a))};\n}catch(e){_._DumpException(e)}\ntry{\nvar Cj=function(a,b,c){a<b?Bj(a+1,b):_.Ec.log(Error(\"W`\"+a+\"`\"+b),{url:c})},Bj=function(a,b){if(Dj){const c=_.he(\"SCRIPT\");c.async=!0;c.type=\"text/javascript\";c.charset=\"UTF-8\";c.src=_.vj(Dj);_.xj(c);c.onerror=_.Be(Cj,a,b,c.src);_.Aj(\"HEAD\")[0].appendChild(c)}},Ej=class extends _.Q{constructor(a){super(a)}};var Fj=_.E(_.ed,Ej,17)||new Ej,Gj,Dj=(Gj=_.E(Fj,_.zj,1))?_.yj(Gj):null,Hj,Ij=(Hj=_.E(Fj,_.zj,2))?_.yj(Hj):null,Jj=function(){Bj(1,2);if(Ij){const b=_.he(\"LINK\");b.setAttribute(\"type\",\"text/css\");b.rel=\"stylesheet\";b.href=_.vj(Ij).toString();var a=_.de(b.ownerDocument&&b.ownerDocument.defaultView);a&&b.setAttribute(\"nonce\",a);(a=_.de())&&b.setAttribute(\"nonce\",a);_.Aj(\"HEAD\")[0].appendChild(b)}};(function(){const a=_.fd();if(_.C(a,18))Jj();else{const b=_.De(a,19)||0;window.addEventListener(\"load\",()=>{window.setTimeout(Jj,b)})}})();\n}catch(e){_._DumpException(e)}\n})(this.gbar_);\n// Google Inc.\n</script><script async=\"\" type=\"text/javascript\" charset=\"UTF-8\" src=\"https://www.gstatic.com/og/_/js/k=og.qtm.en_US.oZnhK8fQ7o0.2019.O/rt=j/m=qabr,qgl,q_dnp,qcwid,qbd,qapid,qrcd,q_dg/exm=qaaw,qadd,qaid,qein,qhaw,qhba,qhbr,qhch,qhga,qhid,qhin/d=1/ed=1/rs=AA2YrTuSeGO41plnBqJdiMY0leplCqBEkw\" nonce=\"\"></script><link type=\"text/css\" rel=\"stylesheet\" href=\"https://www.gstatic.com/og/_/ss/k=og.qtm.1f5sTv2zAHE.L.W.O/m=qcwid/excm=qaaw,qadd,qaid,qein,qhaw,qhba,qhbr,qhch,qhga,qhid,qhin/d=1/ed=1/ct=zgms/rs=AA2YrTvC2GE6u5FfYymNmpMuAgCtUQObZA\"><script type=\"text/javascript\" async=\"\" src=\"https://googleads.g.doubleclick.net/pagead/viewthroughconversion/949381710/?random=1708931910813&amp;cv=11&amp;fst=1708931910813&amp;bg=ffffff&amp;guid=ON&amp;async=1&amp;gtm=45He42l0v9175119176za220&amp;gcd=13r3r3l3l5&amp;dma=0&amp;u_w=1536&amp;u_h=864&amp;url=https%3A%2F%2Fcloud.google.com%2Fdata-fusion%2Fdocs%2Fversion-support-policy&amp;hn=www.googleadservices.com&amp;frm=0&amp;tiba=Version%20support%20policy%20%C2%A0%7C%C2%A0%20Cloud%20Data%20Fusion%20Documentation%20%C2%A0%7C%C2%A0%20Google%20Cloud&amp;npa=0&amp;pscdl=noapi&amp;auid=11329881.1706110202&amp;uaa=x86&amp;uab=64&amp;uafvl=Not%2520A(Brand%3B99.0.0.0%7CGoogle%2520Chrome%3B121.0.6167.188%7CChromium%3B121.0.6167.188&amp;uamb=0&amp;uap=Chrome%20OS&amp;uapv=15699.66.0&amp;uaw=0&amp;fledge=1&amp;rfmt=3&amp;fmt=4\" nonce=\"\"></script><script type=\"text/javascript\" async=\"\" src=\"https://googleads.g.doubleclick.net/pagead/viewthroughconversion/11082232239/?random=1708931910857&amp;cv=11&amp;fst=1708931910857&amp;bg=ffffff&amp;guid=ON&amp;async=1&amp;gtm=45He42l0v9175119176za220&amp;gcd=13r3r3l3l5&amp;dma=0&amp;u_w=1536&amp;u_h=864&amp;url=https%3A%2F%2Fcloud.google.com%2Fdata-fusion%2Fdocs%2Fversion-support-policy&amp;hn=www.googleadservices.com&amp;frm=0&amp;tiba=Version%20support%20policy%20%C2%A0%7C%C2%A0%20Cloud%20Data%20Fusion%20Documentation%20%C2%A0%7C%C2%A0%20Google%20Cloud&amp;npa=0&amp;pscdl=noapi&amp;auid=11329881.1706110202&amp;uaa=x86&amp;uab=64&amp;uafvl=Not%2520A(Brand%3B99.0.0.0%7CGoogle%2520Chrome%3B121.0.6167.188%7CChromium%3B121.0.6167.188&amp;uamb=0&amp;uap=Chrome%20OS&amp;uapv=15699.66.0&amp;uaw=0&amp;fledge=1&amp;rfmt=3&amp;fmt=4\" nonce=\"\"></script><script type=\"text/javascript\" async=\"\" src=\"https://googleads.g.doubleclick.net/pagead/viewthroughconversion/10836211492/?random=1708931910904&amp;cv=11&amp;fst=1708931910904&amp;bg=ffffff&amp;guid=ON&amp;async=1&amp;gtm=45He42l0v9175119176za220&amp;gcd=13r3r3l3l5&amp;dma=0&amp;u_w=1536&amp;u_h=864&amp;url=https%3A%2F%2Fcloud.google.com%2Fdata-fusion%2Fdocs%2Fversion-support-policy&amp;hn=www.googleadservices.com&amp;frm=0&amp;tiba=Version%20support%20policy%20%C2%A0%7C%C2%A0%20Cloud%20Data%20Fusion%20Documentation%20%C2%A0%7C%C2%A0%20Google%20Cloud&amp;npa=0&amp;pscdl=noapi&amp;auid=11329881.1706110202&amp;uaa=x86&amp;uab=64&amp;uafvl=Not%2520A(Brand%3B99.0.0.0%7CGoogle%2520Chrome%3B121.0.6167.188%7CChromium%3B121.0.6167.188&amp;uamb=0&amp;uap=Chrome%20OS&amp;uapv=15699.66.0&amp;uaw=0&amp;fledge=1&amp;rfmt=3&amp;fmt=4\" nonce=\"\"></script><script type=\"text/javascript\" async=\"\" src=\"https://googleads.g.doubleclick.net/pagead/viewthroughconversion/863393867/?random=1708931910946&amp;cv=11&amp;fst=1708931910946&amp;bg=ffffff&amp;guid=ON&amp;async=1&amp;gtm=45He42l0v9175119176za220&amp;gcd=13r3r3l3l5&amp;dma=0&amp;u_w=1536&amp;u_h=864&amp;url=https%3A%2F%2Fcloud.google.com%2Fdata-fusion%2Fdocs%2Fversion-support-policy&amp;hn=www.googleadservices.com&amp;frm=0&amp;tiba=Version%20support%20policy%20%C2%A0%7C%C2%A0%20Cloud%20Data%20Fusion%20Documentation%20%C2%A0%7C%C2%A0%20Google%20Cloud&amp;npa=0&amp;pscdl=noapi&amp;auid=11329881.1706110202&amp;uaa=x86&amp;uab=64&amp;uafvl=Not%2520A(Brand%3B99.0.0.0%7CGoogle%2520Chrome%3B121.0.6167.188%7CChromium%3B121.0.6167.188&amp;uamb=0&amp;uap=Chrome%20OS&amp;uapv=15699.66.0&amp;uaw=0&amp;fledge=1&amp;rfmt=3&amp;fmt=4\" nonce=\"\"></script><script type=\"text/javascript\" async=\"\" src=\"https://googleads.g.doubleclick.net/pagead/viewthroughconversion/975117716/?random=1708931910989&amp;cv=11&amp;fst=1708931910989&amp;bg=ffffff&amp;guid=ON&amp;async=1&amp;gtm=45He42l0v9175119176za220&amp;gcd=13r3r3l3l5&amp;dma=0&amp;u_w=1536&amp;u_h=864&amp;url=https%3A%2F%2Fcloud.google.com%2Fdata-fusion%2Fdocs%2Fversion-support-policy&amp;hn=www.googleadservices.com&amp;frm=0&amp;tiba=Version%20support%20policy%20%C2%A0%7C%C2%A0%20Cloud%20Data%20Fusion%20Documentation%20%C2%A0%7C%C2%A0%20Google%20Cloud&amp;npa=0&amp;pscdl=noapi&amp;auid=11329881.1706110202&amp;uaa=x86&amp;uab=64&amp;uafvl=Not%2520A(Brand%3B99.0.0.0%7CGoogle%2520Chrome%3B121.0.6167.188%7CChromium%3B121.0.6167.188&amp;uamb=0&amp;uap=Chrome%20OS&amp;uapv=15699.66.0&amp;uaw=0&amp;fledge=1&amp;rfmt=3&amp;fmt=4\" nonce=\"\"></script><script type=\"text/javascript\" async=\"\" src=\"https://googleads.g.doubleclick.net/pagead/viewthroughconversion/980185777/?random=1708931911032&amp;cv=11&amp;fst=1708931911032&amp;bg=ffffff&amp;guid=ON&amp;async=1&amp;gtm=45He42l0v9175119176za220&amp;gcd=13r3r3l3l5&amp;dma=0&amp;u_w=1536&amp;u_h=864&amp;url=https%3A%2F%2Fcloud.google.com%2Fdata-fusion%2Fdocs%2Fversion-support-policy&amp;hn=www.googleadservices.com&amp;frm=0&amp;tiba=Version%20support%20policy%20%C2%A0%7C%C2%A0%20Cloud%20Data%20Fusion%20Documentation%20%C2%A0%7C%C2%A0%20Google%20Cloud&amp;npa=0&amp;pscdl=noapi&amp;auid=11329881.1706110202&amp;uaa=x86&amp;uab=64&amp;uafvl=Not%2520A(Brand%3B99.0.0.0%7CGoogle%2520Chrome%3B121.0.6167.188%7CChromium%3B121.0.6167.188&amp;uamb=0&amp;uap=Chrome%20OS&amp;uapv=15699.66.0&amp;uaw=0&amp;fledge=1&amp;rfmt=3&amp;fmt=4\" nonce=\"\"></script><script type=\"text/javascript\" async=\"\" src=\"https://googleads.g.doubleclick.net/pagead/viewthroughconversion/955616553/?random=1708931911073&amp;cv=11&amp;fst=1708931911073&amp;bg=ffffff&amp;guid=ON&amp;async=1&amp;gtm=45He42l0v9175119176za220&amp;gcd=13r3r3l3l5&amp;dma=0&amp;u_w=1536&amp;u_h=864&amp;url=https%3A%2F%2Fcloud.google.com%2Fdata-fusion%2Fdocs%2Fversion-support-policy&amp;hn=www.googleadservices.com&amp;frm=0&amp;tiba=Version%20support%20policy%20%C2%A0%7C%C2%A0%20Cloud%20Data%20Fusion%20Documentation%20%C2%A0%7C%C2%A0%20Google%20Cloud&amp;npa=0&amp;pscdl=noapi&amp;auid=11329881.1706110202&amp;uaa=x86&amp;uab=64&amp;uafvl=Not%2520A(Brand%3B99.0.0.0%7CGoogle%2520Chrome%3B121.0.6167.188%7CChromium%3B121.0.6167.188&amp;uamb=0&amp;uap=Chrome%20OS&amp;uapv=15699.66.0&amp;uaw=0&amp;fledge=1&amp;rfmt=3&amp;fmt=4\" nonce=\"\"></script><script type=\"text/javascript\" async=\"\" src=\"https://googleads.g.doubleclick.net/pagead/viewthroughconversion/829640748/?random=1708931911119&amp;cv=11&amp;fst=1708931911119&amp;bg=ffffff&amp;guid=ON&amp;async=1&amp;gtm=45He42l0v9175119176za220&amp;gcd=13r3r3l3l5&amp;dma=0&amp;u_w=1536&amp;u_h=864&amp;url=https%3A%2F%2Fcloud.google.com%2Fdata-fusion%2Fdocs%2Fversion-support-policy&amp;hn=www.googleadservices.com&amp;frm=0&amp;tiba=Version%20support%20policy%20%C2%A0%7C%C2%A0%20Cloud%20Data%20Fusion%20Documentation%20%C2%A0%7C%C2%A0%20Google%20Cloud&amp;npa=0&amp;pscdl=noapi&amp;auid=11329881.1706110202&amp;uaa=x86&amp;uab=64&amp;uafvl=Not%2520A(Brand%3B99.0.0.0%7CGoogle%2520Chrome%3B121.0.6167.188%7CChromium%3B121.0.6167.188&amp;uamb=0&amp;uap=Chrome%20OS&amp;uapv=15699.66.0&amp;uaw=0&amp;fledge=1&amp;rfmt=3&amp;fmt=4\" nonce=\"\"></script><script type=\"text/javascript\" async=\"\" src=\"https://googleads.g.doubleclick.net/pagead/viewthroughconversion/1002346708/?random=1708931911166&amp;cv=11&amp;fst=1708931911166&amp;bg=ffffff&amp;guid=ON&amp;async=1&amp;gtm=45He42l0v9175119176za220&amp;gcd=13r3r3l3l5&amp;dma=0&amp;u_w=1536&amp;u_h=864&amp;url=https%3A%2F%2Fcloud.google.com%2Fdata-fusion%2Fdocs%2Fversion-support-policy&amp;hn=www.googleadservices.com&amp;frm=0&amp;tiba=Version%20support%20policy%20%C2%A0%7C%C2%A0%20Cloud%20Data%20Fusion%20Documentation%20%C2%A0%7C%C2%A0%20Google%20Cloud&amp;npa=0&amp;pscdl=noapi&amp;auid=11329881.1706110202&amp;uaa=x86&amp;uab=64&amp;uafvl=Not%2520A(Brand%3B99.0.0.0%7CGoogle%2520Chrome%3B121.0.6167.188%7CChromium%3B121.0.6167.188&amp;uamb=0&amp;uap=Chrome%20OS&amp;uapv=15699.66.0&amp;uaw=0&amp;fledge=1&amp;rfmt=3&amp;fmt=4\" nonce=\"\"></script><script type=\"text/javascript\" async=\"\" src=\"https://googleads.g.doubleclick.net/pagead/viewthroughconversion/963691035/?random=1708931911262&amp;cv=11&amp;fst=1708931911262&amp;bg=ffffff&amp;guid=ON&amp;async=1&amp;gtm=45He42l0v9175119176za220&amp;gcd=13r3r3l3l5&amp;dma=0&amp;u_w=1536&amp;u_h=864&amp;url=https%3A%2F%2Fcloud.google.com%2Fdata-fusion%2Fdocs%2Fversion-support-policy&amp;hn=www.googleadservices.com&amp;frm=0&amp;tiba=Version%20support%20policy%20%C2%A0%7C%C2%A0%20Cloud%20Data%20Fusion%20Documentation%20%C2%A0%7C%C2%A0%20Google%20Cloud&amp;npa=0&amp;pscdl=noapi&amp;auid=11329881.1706110202&amp;uaa=x86&amp;uab=64&amp;uafvl=Not%2520A(Brand%3B99.0.0.0%7CGoogle%2520Chrome%3B121.0.6167.188%7CChromium%3B121.0.6167.188&amp;uamb=0&amp;uap=Chrome%20OS&amp;uapv=15699.66.0&amp;uaw=0&amp;fledge=1&amp;rfmt=3&amp;fmt=4\" nonce=\"\"></script><script type=\"text/javascript\" async=\"\" src=\"https://googleads.g.doubleclick.net/pagead/viewthroughconversion/807752744/?random=1708931911313&amp;cv=11&amp;fst=1708931911313&amp;bg=ffffff&amp;guid=ON&amp;async=1&amp;gtm=45He42l0v9175119176za220&amp;gcd=13r3r3l3l5&amp;dma=0&amp;u_w=1536&amp;u_h=864&amp;url=https%3A%2F%2Fcloud.google.com%2Fdata-fusion%2Fdocs%2Fversion-support-policy&amp;hn=www.googleadservices.com&amp;frm=0&amp;tiba=Version%20support%20policy%20%C2%A0%7C%C2%A0%20Cloud%20Data%20Fusion%20Documentation%20%C2%A0%7C%C2%A0%20Google%20Cloud&amp;npa=0&amp;pscdl=noapi&amp;auid=11329881.1706110202&amp;uaa=x86&amp;uab=64&amp;uafvl=Not%2520A(Brand%3B99.0.0.0%7CGoogle%2520Chrome%3B121.0.6167.188%7CChromium%3B121.0.6167.188&amp;uamb=0&amp;uap=Chrome%20OS&amp;uapv=15699.66.0&amp;uaw=0&amp;fledge=1&amp;rfmt=3&amp;fmt=4\" nonce=\"\"></script><script type=\"text/javascript\" async=\"\" src=\"https://googleads.g.doubleclick.net/pagead/viewthroughconversion/967559407/?random=1708931911400&amp;cv=11&amp;fst=1708931911400&amp;bg=ffffff&amp;guid=ON&amp;async=1&amp;gtm=45He42l0v9175119176za220&amp;gcd=13r3r3l3l5&amp;dma=0&amp;u_w=1536&amp;u_h=864&amp;url=https%3A%2F%2Fcloud.google.com%2Fdata-fusion%2Fdocs%2Fversion-support-policy&amp;hn=www.googleadservices.com&amp;frm=0&amp;tiba=Version%20support%20policy%20%C2%A0%7C%C2%A0%20Cloud%20Data%20Fusion%20Documentation%20%C2%A0%7C%C2%A0%20Google%20Cloud&amp;npa=0&amp;pscdl=noapi&amp;auid=11329881.1706110202&amp;uaa=x86&amp;uab=64&amp;uafvl=Not%2520A(Brand%3B99.0.0.0%7CGoogle%2520Chrome%3B121.0.6167.188%7CChromium%3B121.0.6167.188&amp;uamb=0&amp;uap=Chrome%20OS&amp;uapv=15699.66.0&amp;uaw=0&amp;fledge=1&amp;rfmt=3&amp;fmt=4\" nonce=\"\"></script><script type=\"text/javascript\" async=\"\" src=\"https://googleads.g.doubleclick.net/pagead/viewthroughconversion/974343103/?random=1708931911447&amp;cv=11&amp;fst=1708931911447&amp;bg=ffffff&amp;guid=ON&amp;async=1&amp;gtm=45He42l0v9175119176za220&amp;gcd=13r3r3l3l5&amp;dma=0&amp;u_w=1536&amp;u_h=864&amp;url=https%3A%2F%2Fcloud.google.com%2Fdata-fusion%2Fdocs%2Fversion-support-policy&amp;hn=www.googleadservices.com&amp;frm=0&amp;tiba=Version%20support%20policy%20%C2%A0%7C%C2%A0%20Cloud%20Data%20Fusion%20Documentation%20%C2%A0%7C%C2%A0%20Google%20Cloud&amp;npa=0&amp;pscdl=noapi&amp;auid=11329881.1706110202&amp;uaa=x86&amp;uab=64&amp;uafvl=Not%2520A(Brand%3B99.0.0.0%7CGoogle%2520Chrome%3B121.0.6167.188%7CChromium%3B121.0.6167.188&amp;uamb=0&amp;uap=Chrome%20OS&amp;uapv=15699.66.0&amp;uaw=0&amp;fledge=1&amp;rfmt=3&amp;fmt=4\" nonce=\"\"></script><script type=\"text/javascript\" async=\"\" src=\"https://googleads.g.doubleclick.net/pagead/viewthroughconversion/589293035/?random=1708931911496&amp;cv=11&amp;fst=1708931911496&amp;bg=ffffff&amp;guid=ON&amp;async=1&amp;gtm=45He42l0v9175119176za220&amp;gcd=13r3r3l3l5&amp;dma=0&amp;u_w=1536&amp;u_h=864&amp;url=https%3A%2F%2Fcloud.google.com%2Fdata-fusion%2Fdocs%2Fversion-support-policy&amp;hn=www.googleadservices.com&amp;frm=0&amp;tiba=Version%20support%20policy%20%C2%A0%7C%C2%A0%20Cloud%20Data%20Fusion%20Documentation%20%C2%A0%7C%C2%A0%20Google%20Cloud&amp;npa=0&amp;pscdl=noapi&amp;auid=11329881.1706110202&amp;uaa=x86&amp;uab=64&amp;uafvl=Not%2520A(Brand%3B99.0.0.0%7CGoogle%2520Chrome%3B121.0.6167.188%7CChromium%3B121.0.6167.188&amp;uamb=0&amp;uap=Chrome%20OS&amp;uapv=15699.66.0&amp;uaw=0&amp;fledge=1&amp;rfmt=3&amp;fmt=4\" nonce=\"\"></script></head>\n<body class=\"\" template=\"page\" theme=\"cloud-theme\" type=\"article\" layout=\"docs\" display-toc=\"\" ready=\"\" signed-in=\"\" style=\"--devsite-js-header-height: 112.80000305175781px; --devsite-panel-height: 0px;\">\n  <devsite-progress id=\"app-progress\"></devsite-progress>\n\n  <section class=\"devsite-wrapper\">\n\n    <devsite-cookie-notification-bar><!----></devsite-cookie-notification-bar>\n    <cloudx-track usercountry=\"IN\"></cloudx-track>\n<cloudx-utils-init></cloudx-utils-init>\n\n<devsite-header keep-tabs-visible=\"\" top-row--height=\"64.80000305175781\" bottom-row--height=\"48\" bottom-tabs--height=\"48\" fixed=\"\" style=\"--devsite-js-top-row--height: 64.80000305175781px; --devsite-js-bottom-row--height: 48px; --devsite-js-bottom-tabs--height: 48px;\">\n\n<div class=\"devsite-header--inner nocontent\">\n<div class=\"devsite-top-logo-row-wrapper-wrapper\">\n  <div class=\"devsite-top-logo-row-wrapper\">\n    <div class=\"devsite-top-logo-row\">\n      <button type=\"button\" id=\"devsite-hamburger-menu\" class=\"devsite-header-icon-button button-flat material-icons gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Navigation menu button\" aria-label=\"Open menu\">\n      </button>\n      <div class=\"devsite-product-name-wrapper\">\n\n<a href=\"/\" class=\"devsite-site-logo-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Site logo\" track-type=\"globalNav\" track-name=\"googleCloud\" track-metadata-position=\"nav\" track-metadata-eventdetail=\"nav\">\n\n\n  <img src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/images/cloud-logo.svg\" class=\"devsite-site-logo\" alt=\"Google Cloud\">\n\n\n</a>\n\n<span class=\"devsite-product-name\">\n  <ul class=\"devsite-breadcrumb-list\">\n\n<li class=\"devsite-breadcrumb-itemdevsite-has-google-wordmark\">\n</li>\n\n</ul>\n</span>\n\n</div>\n      <div class=\"devsite-top-logo-row-middle\">\n        <div class=\"devsite-header-upper-tabs\">\n\n\n\n<cloudx-tabs-nav class=\"upper-tabs\" connected=\"\">\n\n\n\n<nav class=\"devsite-tabs-wrapper\" aria-label=\"Upper tabs\" style=\"--scroll-animation-duration: 250ms; --scroll-offset: 0px;\">\n\n\n        <tab dropdown=\"\" dropdown-full=\"\" clickable=\"\">\n\n  <a href=\"https://cloud.google.com/why-google-cloud\" track-metadata-eventdetail=\"https://cloud.google.com/why-google-cloud\" class=\"devsite-tabs-content gc-analytics-event \" track-type=\"nav\" track-metadata-position=\"nav - overview\" track-metadata-module=\"primary nav\" data-category=\"Site-Wide Custom Events\" data-label=\"Tab: Overview\" track-name=\"overview\">\n  Overview\n\n  </a>\n\n\n  <a href=\"#\" role=\"button\" aria-haspopup=\"true\" aria-expanded=\"false\" aria-label=\"Dropdown menu for Overview\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/why-google-cloud\" track-metadata-position=\"nav - overview\" track-metadata-module=\"primary nav\" data-category=\"Site-Wide Custom Events\" data-label=\"Tab: Overview\" track-name=\"overview\" class=\"devsite-tabs-dropdown-toggle devsite-icon devsite-icon-arrow-drop-down\"></a>\n\n<div class=\"devsite-tabs-dropdown\" aria-label=\"submenu\" hidden=\"\">\n\n    <button class=\"devsite-tabs-close-button material-icons button-flat gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Close dropdown menu\" aria-label=\"Close dropdown menu\" track-type=\"nav\" track-name=\"close\" track-metadata-eventdetail=\"#\" track-metadata-position=\"nav - overview\" track-metadata-module=\"tertiary nav\">close</button>\n\n  <div class=\"devsite-tabs-dropdown-content\">\n\n      <div class=\"devsite-tabs-dropdown-column\n                  cloud-nav-menu-why-google cloud-nav-border-right\">\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-type1 cloud-dropdown-secondary cloud-dropdown--cta-container\">\n\n              <li class=\"devsite-nav-title\" role=\"heading\" tooltip=\"\">Accelerate your digital transformation</li>\n\n\n              <li class=\"devsite-nav-description\">Whether your business is early in its journey or well on its way to digital transformation, Google Cloud can help solve your toughest challenges.</li>\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/why-google-cloud\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/why-google-cloud\" track-metadata-position=\"nav - overview\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"accelerate your digital transformation\" tooltip=\"\" track-name=\"learn more\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Learn more\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n      </div>\n\n      <div class=\"devsite-tabs-dropdown-column\n                  \">\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-type2\">\n\n              <li class=\"devsite-nav-title\" role=\"heading\" tooltip=\"\">Key benefits</li>\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/why-google-cloud\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/why-google-cloud\" track-metadata-position=\"nav - overview\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"key benefits\" tooltip=\"\" track-name=\"why google cloud\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Why Google Cloud\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Top reasons businesses choose us.\n                  </div>\n\n                </a>\n              </li>\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/ai\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/ai\" track-metadata-position=\"nav - overview\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"key benefits\" tooltip=\"\" track-name=\"ai and ml\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    AI and ML\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Get enterprise-ready AI.\n                  </div>\n\n                </a>\n              </li>\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/multicloud\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/multicloud\" track-metadata-position=\"nav - overview\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"key benefits\" tooltip=\"\" track-name=\"multicloud\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Multicloud\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Run your apps wherever you need them.\n                  </div>\n\n                </a>\n              </li>\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/infrastructure\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/infrastructure\" track-metadata-position=\"nav - overview\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"key benefits\" tooltip=\"\" track-name=\"global infrastructure\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Global infrastructure\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Build on the same infrastructure as Google.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n      </div>\n\n      <div class=\"devsite-tabs-dropdown-column\n                  cloud-nav-border-right\">\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-type2 cloud-dropdown-noheading\">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/data-cloud\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/data-cloud\" track-metadata-position=\"nav - overview\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"data cloud\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Data Cloud\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Make smarter decisions with unified data.\n                  </div>\n\n                </a>\n              </li>\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/open-cloud\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/open-cloud\" track-metadata-position=\"nav - overview\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"open cloud\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Open cloud\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Scale with open, flexible technology.\n                  </div>\n\n                </a>\n              </li>\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/security\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/security\" track-metadata-position=\"nav - overview\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"security\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Security\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Protect your users, data, and apps.\n                  </div>\n\n                </a>\n              </li>\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://workspace.google.com/\" track-type=\"nav\" track-metadata-eventdetail=\"https://workspace.google.com/\" track-metadata-position=\"nav - overview\" track-metadata-module=\"tertiary nav\" tooltip=\"\" target=\"_blank\" track-name=\"productivity and collaboration\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Productivity and collaboration\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Connect your teams with AI-powered apps.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n      </div>\n\n      <div class=\"devsite-tabs-dropdown-column\n                  \">\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-type2\">\n\n              <li class=\"devsite-nav-title\" role=\"heading\" tooltip=\"\">Reports and insights</li>\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/executive-insights\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/executive-insights\" track-metadata-position=\"nav - overview\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"reports and insights\" tooltip=\"\" track-name=\"executive insights\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Executive insights\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Curated C-suite perspectives.\n                  </div>\n\n                </a>\n              </li>\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/analyst-reports\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/analyst-reports\" track-metadata-position=\"nav - overview\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"reports and insights\" tooltip=\"\" track-name=\"analyst reports\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Analyst reports\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Read what industry analysts say about us.\n                  </div>\n\n                </a>\n              </li>\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/whitepapers\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/whitepapers\" track-metadata-position=\"nav - overview\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"reports and insights\" tooltip=\"\" track-name=\"whitepapers\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Whitepapers\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Browse and download popular whitepapers.\n                  </div>\n\n                </a>\n              </li>\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/customers\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/customers\" track-metadata-position=\"nav - overview\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"reports and insights\" tooltip=\"\" track-name=\"customer stories\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Customer stories\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Explore case studies and videos.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n      </div>\n\n  </div>\n</div>\n</tab>\n\n\n\n        <tab dropdown=\"\" dropdown-full=\"\" clickable=\"\" generated-tab-menu=\"\">\n\n  <a href=\"https://cloud.google.com/solutions\" track-metadata-eventdetail=\"https://cloud.google.com/solutions\" class=\"devsite-tabs-content gc-analytics-event \" track-type=\"nav\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"primary nav\" data-category=\"Site-Wide Custom Events\" data-label=\"Tab: Solutions\" track-name=\"solutions\">\n  Solutions\n\n  </a>\n\n\n  <a href=\"#\" role=\"button\" aria-haspopup=\"true\" aria-expanded=\"false\" aria-label=\"Dropdown menu for Solutions\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"primary nav\" data-category=\"Site-Wide Custom Events\" data-label=\"Tab: Solutions\" track-name=\"solutions\" class=\"devsite-tabs-dropdown-toggle devsite-icon devsite-icon-arrow-drop-down\"></a>\n\n<div class=\"devsite-tabs-dropdown\" aria-label=\"submenu\" hidden=\"\">\n\n    <button class=\"devsite-tabs-close-button material-icons button-flat gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Close dropdown menu\" aria-label=\"Close dropdown menu\" track-type=\"nav\" track-name=\"close\" track-metadata-eventdetail=\"#\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\">close</button>\n\n  <div class=\"dropdown-tabbed-menu\"><ul class=\"dropdown-tabbed-menu-list\"><li class=\"dropdown-tabbed-menu-list-item\"><a href=\"#\" column-id=\"tab-1-column-0\" tabindex=\"0\" track-type=\"nav\" track-name=\"\n                    Industry Solutions\n                  \" track-metadata-eventdetail=\"#\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"secondary nav\" active=\"\">\n                    Industry Solutions\n                  </a></li><li class=\"dropdown-tabbed-menu-list-item\"><a href=\"#\" column-id=\"tab-1-column-1\" tabindex=\"0\" track-type=\"nav\" track-name=\"\n                    Application Modernization\n                  \" track-metadata-eventdetail=\"#\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"secondary nav\">\n                    Application Modernization\n                  </a></li><li class=\"dropdown-tabbed-menu-list-item\"><a href=\"#\" column-id=\"tab-1-column-2\" tabindex=\"0\" track-type=\"nav\" track-name=\"\n                    Artificial Intelligence\n                  \" track-metadata-eventdetail=\"#\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"secondary nav\">\n                    Artificial Intelligence\n                  </a></li><li class=\"dropdown-tabbed-menu-list-item\"><a href=\"#\" column-id=\"tab-1-column-3\" tabindex=\"0\" track-type=\"nav\" track-name=\"\n                    APIs and Applications\n                  \" track-metadata-eventdetail=\"#\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"secondary nav\">\n                    APIs and Applications\n                  </a></li><li class=\"dropdown-tabbed-menu-list-item\"><a href=\"#\" column-id=\"tab-1-column-4\" tabindex=\"0\" track-type=\"nav\" track-name=\"\n                    Databases\n                  \" track-metadata-eventdetail=\"#\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"secondary nav\">\n                    Databases\n                  </a></li><li class=\"dropdown-tabbed-menu-list-item\"><a href=\"#\" column-id=\"tab-1-column-5\" tabindex=\"0\" track-type=\"nav\" track-name=\"\n                    Data Cloud\n                  \" track-metadata-eventdetail=\"#\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"secondary nav\">\n                    Data Cloud\n                  </a></li><li class=\"dropdown-tabbed-menu-list-item\"><a href=\"#\" column-id=\"tab-1-column-6\" tabindex=\"0\" track-type=\"nav\" track-name=\"Digital Transformation\" track-metadata-eventdetail=\"#\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"secondary nav\">Digital Transformation</a></li><li class=\"dropdown-tabbed-menu-list-item\"><a href=\"#\" column-id=\"tab-1-column-7\" tabindex=\"0\" track-type=\"nav\" track-name=\"\n                    Infrastructure Modernization\n                  \" track-metadata-eventdetail=\"#\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"secondary nav\">\n                    Infrastructure Modernization\n                  </a></li><li class=\"dropdown-tabbed-menu-list-item\"><a href=\"#\" column-id=\"tab-1-column-8\" tabindex=\"0\" track-type=\"nav\" track-name=\"\n                    Productivity and Collaboration\n                  \" track-metadata-eventdetail=\"#\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"secondary nav\">\n                    Productivity and Collaboration\n                  </a></li><li class=\"dropdown-tabbed-menu-list-item\"><a href=\"#\" column-id=\"tab-1-column-9\" tabindex=\"0\" track-type=\"nav\" track-name=\"\n                    Security\n                  \" track-metadata-eventdetail=\"#\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"secondary nav\">\n                    Security\n                  </a></li><li class=\"dropdown-tabbed-menu-list-item\"><a href=\"#\" column-id=\"tab-1-column-10\" tabindex=\"0\" track-type=\"nav\" track-name=\"\n                    Smart Analytics\n                  \" track-metadata-eventdetail=\"#\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"secondary nav\">\n                    Smart Analytics\n                  </a></li><li class=\"dropdown-tabbed-menu-list-item\"><a href=\"#\" column-id=\"tab-1-column-11\" tabindex=\"0\" track-type=\"nav\" track-name=\"\n                    Startups and SMB\n                  \" track-metadata-eventdetail=\"#\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"secondary nav\">\n                    Startups and SMB\n                  </a></li></ul><div class=\"dropdown-tabbed-menu-button\"><a href=\"https://cloud.google.com/solutions\" track-type=\"nav\" track-name=\"\n\n\n                    See all solutions\n\n\n                \" track-metadata-eventdetail=\"https://cloud.google.com/solutions\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"secondary nav\">\n\n\n                    See all solutions\n\n\n                </a></div></div><div class=\"devsite-tabs-dropdown-content\">\n\n      <div class=\"devsite-tabs-dropdown-column\n                  \" column-id=\"tab-1-column-0\">\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-menu-heading devsite-nav-title-heading\">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions#industry-solutions\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions#industry-solutions\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"industry solutions\">\n\n\n\n<div class=\"devsite-nav-item-icon-container\" size=\"medium\">\n\n\n    <img class=\"devsite-nav-item-icon\" alt=\"\" src=\"https://www.gstatic.com/cloud/images/navigation/forward.svg\" srcset=\"\" sizes=\"100vw\" loading=\"lazy\">\n\n\n</div>\n\n\n\n                  <div class=\"devsite-nav-item-title\">\n                    Industry Solutions\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Reduce cost, increase operational agility, and capture new market opportunities.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/retail\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/retail\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"retail\">\n\n\n\n<div class=\"devsite-nav-item-icon-container\" size=\"medium\">\n\n\n    <img class=\"devsite-nav-item-icon\" alt=\"\" src=\"https://www.gstatic.com/cloud/images/navigation/retail.svg\" srcset=\"\" sizes=\"100vw\" loading=\"lazy\">\n\n\n</div>\n\n\n\n                  <div class=\"devsite-nav-item-title\">\n                    Retail\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Analytics and collaboration tools for the retail value chain.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/cpg\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/cpg\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"consumer packaged goods\">\n\n\n\n<div class=\"devsite-nav-item-icon-container\" size=\"medium\">\n\n\n    <img class=\"devsite-nav-item-icon\" alt=\"\" src=\"https://www.gstatic.com/cloud/images/navigation/cpg.svg\" srcset=\"\" sizes=\"100vw\" loading=\"lazy\">\n\n\n</div>\n\n\n\n                  <div class=\"devsite-nav-item-title\">\n                    Consumer Packaged Goods\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Solutions for CPG digital transformation and brand growth.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/financial-services\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/financial-services\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"financial services\">\n\n\n\n<div class=\"devsite-nav-item-icon-container\" size=\"medium\">\n\n\n    <img class=\"devsite-nav-item-icon\" alt=\"\" src=\"https://www.gstatic.com/cloud/images/navigation/finance.svg\" srcset=\"\" sizes=\"100vw\" loading=\"lazy\">\n\n\n</div>\n\n\n\n                  <div class=\"devsite-nav-item-title\">\n                    Financial Services\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Computing, data management, and analytics tools for financial services.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/healthcare-life-sciences\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/healthcare-life-sciences\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"healthcare and life sciences\">\n\n\n\n<div class=\"devsite-nav-item-icon-container\" size=\"medium\">\n\n\n    <img class=\"devsite-nav-item-icon\" alt=\"\" src=\"https://www.gstatic.com/cloud/images/navigation/hcls.svg\" srcset=\"\" sizes=\"100vw\" loading=\"lazy\">\n\n\n</div>\n\n\n\n                  <div class=\"devsite-nav-item-title\">\n                    Healthcare and Life Sciences\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Advance research at scale and empower healthcare innovation.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/media-entertainment\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/media-entertainment\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"media and entertainment\">\n\n\n\n<div class=\"devsite-nav-item-icon-container\" size=\"medium\">\n\n\n    <img class=\"devsite-nav-item-icon\" alt=\"\" src=\"https://www.gstatic.com/cloud/images/navigation/media.svg\" srcset=\"\" sizes=\"100vw\" loading=\"lazy\">\n\n\n</div>\n\n\n\n                  <div class=\"devsite-nav-item-title\">\n                    Media and Entertainment\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Solutions for content production and distribution operations.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/telecommunications\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/telecommunications\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"telecommunications\">\n\n\n\n<div class=\"devsite-nav-item-icon-container\" size=\"medium\">\n\n\n    <img class=\"devsite-nav-item-icon\" alt=\"\" src=\"https://www.gstatic.com/cloud/images/navigation/telecommunications.svg\" srcset=\"\" sizes=\"100vw\" loading=\"lazy\">\n\n\n</div>\n\n\n\n                  <div class=\"devsite-nav-item-title\">\n                    Telecommunications\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Hybrid and multi-cloud services to deploy and monetize 5G.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/games\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/games\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"games\">\n\n\n\n<div class=\"devsite-nav-item-icon-container\" size=\"medium\">\n\n\n    <img class=\"devsite-nav-item-icon\" alt=\"\" src=\"https://www.gstatic.com/cloud/images/navigation/gaming.svg\" srcset=\"\" sizes=\"100vw\" loading=\"lazy\">\n\n\n</div>\n\n\n\n                  <div class=\"devsite-nav-item-title\">\n                    Games\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    AI-driven solutions to build and scale games faster.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/manufacturing\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/manufacturing\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"manufacturing\">\n\n\n\n<div class=\"devsite-nav-item-icon-container\" size=\"medium\">\n\n\n    <img class=\"devsite-nav-item-icon\" alt=\"\" src=\"https://www.gstatic.com/cloud/images/navigation/manufacturing.svg\" srcset=\"\" sizes=\"100vw\" loading=\"lazy\">\n\n\n</div>\n\n\n\n                  <div class=\"devsite-nav-item-title\">\n                    Manufacturing\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Migration and AI tools to optimize the manufacturing value chain.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/supply-chain-logistics\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/supply-chain-logistics\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"supply chain and logistics\">\n\n\n\n<div class=\"devsite-nav-item-icon-container\" size=\"medium\">\n\n\n    <img class=\"devsite-nav-item-icon\" alt=\"\" src=\"https://www.gstatic.com/cloud/images/navigation/supply-chain.svg\" srcset=\"\" sizes=\"100vw\" loading=\"lazy\">\n\n\n</div>\n\n\n\n                  <div class=\"devsite-nav-item-title\">\n                    Supply Chain and Logistics\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Enable sustainable, efficient, and resilient data-driven operations across supply chain and logistics operations.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/government\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/government\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"government\">\n\n\n\n<div class=\"devsite-nav-item-icon-container\" size=\"medium\">\n\n\n    <img class=\"devsite-nav-item-icon\" alt=\"\" src=\"https://www.gstatic.com/cloud/images/navigation/government.svg\" srcset=\"\" sizes=\"100vw\" loading=\"lazy\">\n\n\n</div>\n\n\n\n                  <div class=\"devsite-nav-item-title\">\n                    Government\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Data storage, AI, and analytics solutions for government agencies.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/education\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/education\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"education\">\n\n\n\n<div class=\"devsite-nav-item-icon-container\" size=\"medium\">\n\n\n    <img class=\"devsite-nav-item-icon\" alt=\"\" src=\"https://www.gstatic.com/cloud/images/navigation/icon-sprite.svg#education\" srcset=\"\" sizes=\"100vw\" loading=\"lazy\">\n\n\n</div>\n\n\n\n                  <div class=\"devsite-nav-item-title\">\n                    Education\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Teaching tools to provide more engaging learning experiences.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-top-border\">\n\n\n              <li class=\"devsite-nav-description\">Not seeing what you're looking for?</li>\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions#industry-solutions\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions#industry-solutions\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"see all industry solutions\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    See all industry solutions\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-top-border dropdown-tabbed-menu-button-target hidden\">\n\n\n              <li class=\"devsite-nav-description\">Not seeing what you're looking for?</li>\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"see all solutions\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    See all solutions\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n      </div>\n\n      <div class=\"devsite-tabs-dropdown-column\n                  \" column-id=\"tab-1-column-1\" hidden=\"\">\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-menu-heading devsite-nav-title-heading\">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/camp\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/camp\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"application modernization\">\n\n\n\n<div class=\"devsite-nav-item-icon-container\" size=\"medium\">\n\n\n    <img class=\"devsite-nav-item-icon\" alt=\"\" src=\"https://www.gstatic.com/cloud/images/navigation/forward.svg\" srcset=\"\" sizes=\"100vw\" loading=\"lazy\">\n\n\n</div>\n\n\n\n                  <div class=\"devsite-nav-item-title\">\n                    Application Modernization\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Assess, plan, implement, and measure software practices and capabilities to modernize and simplify your organization’s business application portfolios.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/camp\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/camp\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"camp\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    CAMP\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Program that uses DORA to improve your software delivery capabilities.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/modernize-traditional-applications\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/modernize-traditional-applications\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"modernize traditional applications\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Modernize Traditional Applications\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Analyze, categorize, and get started with cloud migration on traditional workloads.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/migrate-from-paas\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/migrate-from-paas\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"migrate from paas cloud foundry, openshift\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Migrate from PaaS: Cloud Foundry, Openshift\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Tools for moving your existing containers into Google's managed container services.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/mainframe-modernization\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/mainframe-modernization\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"migrate from mainframe\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Migrate from Mainframe\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Automated tools and prescriptive guidance for moving your mainframe apps to the cloud.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/software-delivery\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/software-delivery\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"modernize software delivery\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Modernize Software Delivery\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Software supply chain best practices - innerloop productivity, CI/CD and S3C.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/devops\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/devops\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"devops best practices\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    DevOps Best Practices\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Processes and resources for implementing DevOps in your org.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/sre\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/sre\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"sre principles\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    SRE Principles\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Tools and resources for adopting SRE in your org.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/app-modernization/day-2-operations-for-gke\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/app-modernization/day-2-operations-for-gke\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"day 2 operations for gke\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Day 2 Operations for GKE\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Tools and guidance for effective GKE management and monitoring.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/finops-optimize-gke\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/finops-optimize-gke\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"finops and optimization of gke\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    FinOps and Optimization of GKE\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Best practices for running reliable, performant, and cost effective applications on GKE.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/modernize-with-edge\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/modernize-with-edge\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"run applications at the edge\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Run Applications at the Edge\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Guidance for localized and low latency apps on Google’s hardware agnostic edge solution.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/architect-multicloud\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/architect-multicloud\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"architect for multicloud\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Architect for Multicloud\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Manage workloads across multiple clouds with a consistent platform.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/serverless\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/serverless\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"go serverless\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Go Serverless\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Fully managed environment for developing, deploying and scaling apps.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n      </div>\n\n      <div class=\"devsite-tabs-dropdown-column\n                  \" column-id=\"tab-1-column-2\" hidden=\"\">\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-menu-heading devsite-nav-title-heading\">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/ai\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/ai\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"artificial intelligence\">\n\n\n\n<div class=\"devsite-nav-item-icon-container\" size=\"medium\">\n\n\n    <img class=\"devsite-nav-item-icon\" alt=\"\" src=\"https://www.gstatic.com/cloud/images/navigation/forward.svg\" srcset=\"\" sizes=\"100vw\" loading=\"lazy\">\n\n\n</div>\n\n\n\n                  <div class=\"devsite-nav-item-title\">\n                    Artificial Intelligence\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Add intelligence and efficiency to your business with AI and machine learning.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/contact-center\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/contact-center\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"contact center ai\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Contact Center AI\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    AI model for speaking with customers and assisting human agents.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/document-ai\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/document-ai\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"document ai\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Document AI\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Document processing and data capture automated at scale.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/retail-product-discovery\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/retail-product-discovery\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"product discovery\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Product Discovery\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Google-quality search and product recommendations for retailers.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n      </div>\n\n      <div class=\"devsite-tabs-dropdown-column\n                  \" column-id=\"tab-1-column-3\" hidden=\"\">\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-menu-heading devsite-nav-title-heading\">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/apis-and-applications\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/apis-and-applications\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"apis and applications\">\n\n\n\n<div class=\"devsite-nav-item-icon-container\" size=\"medium\">\n\n\n    <img class=\"devsite-nav-item-icon\" alt=\"\" src=\"https://www.gstatic.com/cloud/images/navigation/forward.svg\" srcset=\"\" sizes=\"100vw\" loading=\"lazy\">\n\n\n</div>\n\n\n\n                  <div class=\"devsite-nav-item-title\">\n                    APIs and Applications\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Speed up the pace of innovation without coding, using APIs, apps, and automation.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/new-channels-using-apis\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/new-channels-using-apis\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"new business channels using apis\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    New Business Channels Using APIs\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Attract and empower an ecosystem of developers and partners.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/unlocking-legacy-applications\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/unlocking-legacy-applications\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"unlocking legacy applications using apis\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Unlocking Legacy Applications Using APIs\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Cloud services for extending and modernizing legacy apps.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/open-banking-apix\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/open-banking-apix\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"open banking apix\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Open Banking APIx\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Simplify and accelerate secure delivery of open banking compliant APIs.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n      </div>\n\n      <div class=\"devsite-tabs-dropdown-column\n                  \" column-id=\"tab-1-column-4\" hidden=\"\">\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-menu-heading devsite-nav-title-heading\">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/databases\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/databases\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"databases\">\n\n\n\n<div class=\"devsite-nav-item-icon-container\" size=\"medium\">\n\n\n    <img class=\"devsite-nav-item-icon\" alt=\"\" src=\"https://www.gstatic.com/cloud/images/navigation/forward.svg\" srcset=\"\" sizes=\"100vw\" loading=\"lazy\">\n\n\n</div>\n\n\n\n                  <div class=\"devsite-nav-item-title\">\n                    Databases\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Migrate and manage enterprise data with security, reliability, high availability, and fully managed data services.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/database-migration\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/database-migration\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"database migration\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Database Migration\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Guides and tools to simplify your database migration life cycle.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/database-modernization\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/database-modernization\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"database modernization\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Database Modernization\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Upgrades to modernize your operational database infrastructure.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/databases/games\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/databases/games\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"databases for games\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Databases for Games\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Build global, live games with Google Cloud databases.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/products/databases\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/products/databases\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"google cloud databases\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Google Cloud Databases\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Database services to migrate, manage, and modernize data.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/migrate-oracle-workloads\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/migrate-oracle-workloads\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"migrate oracle workloads to google cloud\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Migrate Oracle workloads to Google Cloud\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Rehost, replatform, rewrite your Oracle workloads.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/open-source-databases\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/open-source-databases\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"open source databases\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Open Source Databases\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Fully managed open source databases with enterprise-grade support.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/sql-server\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/sql-server\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"sql server on google cloud\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    SQL Server on Google Cloud\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Options for running SQL Server virtual machines on Google Cloud.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n      </div>\n\n      <div class=\"devsite-tabs-dropdown-column\n                  \" column-id=\"tab-1-column-5\" hidden=\"\">\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-menu-heading devsite-nav-title-heading\">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/data-cloud\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/data-cloud\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"data cloud\">\n\n\n\n<div class=\"devsite-nav-item-icon-container\" size=\"medium\">\n\n\n    <img class=\"devsite-nav-item-icon\" alt=\"\" src=\"https://www.gstatic.com/cloud/images/navigation/forward.svg\" srcset=\"\" sizes=\"100vw\" loading=\"lazy\">\n\n\n</div>\n\n\n\n                  <div class=\"devsite-nav-item-title\">\n                    Data Cloud\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Unify data across your organization with an open and simplified approach to data-driven transformation that is unmatched for speed, scale, and security with AI built-in.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/databases\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/databases\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"databases solutions\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Databases Solutions\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Migrate and manage enterprise data with security, reliability, high availability, and fully managed data services.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/smart-analytics\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/smart-analytics\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"smart analytics solutions\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Smart Analytics Solutions\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Generate instant insights from data at any scale with a serverless, fully managed analytics platform that significantly simplifies analytics.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/ai\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/ai\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"ai solutions\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    AI Solutions\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Add intelligence and efficiency to your business with AI and machine learning.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/data-cloud-isvs\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/data-cloud-isvs\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"data cloud for isvs\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Data Cloud for ISVs\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Innovate, optimize and amplify your SaaS applications using Google's data and machine learning solutions such as BigQuery, Looker, Spanner and Vertex AI.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/data-cloud-alliance\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/data-cloud-alliance\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"data cloud alliance\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Data Cloud Alliance\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    An initiative to ensure that global businesses have more seamless access and insights into the data required for digital transformation.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n      </div>\n\n      <div class=\"devsite-tabs-dropdown-column\n                  \" column-id=\"tab-1-column-6\" hidden=\"\">\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-menu-heading devsite-nav-title-heading\">\n\n              <li class=\"devsite-nav-title\" role=\"heading\" tooltip=\"\">Digital Transformation</li>\n\n\n              <li class=\"devsite-nav-description\">Accelerate business recovery and ensure a better future with solutions that enable hybrid and multi-cloud, generate intelligent insights, and keep your workers connected.</li>\n\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/business-innovation\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/business-innovation\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"digital transformation\" tooltip=\"\" track-name=\"digital innovation\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Digital Innovation\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Reimagine your operations and unlock new opportunities.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/operational-efficiency\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/operational-efficiency\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"digital transformation\" tooltip=\"\" track-name=\"operational efficiency\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Operational Efficiency\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Prioritize investments and optimize costs.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/covid19\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/covid19\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"digital transformation\" tooltip=\"\" track-name=\"covid-19 solutions\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    COVID-19 Solutions\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Get work done more safely and securely.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/covid19-healthcare\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/covid19-healthcare\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"digital transformation\" tooltip=\"\" track-name=\"covid-19 solutions for the healthcare industry\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    COVID-19 Solutions for the Healthcare Industry\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    How Google is helping healthcare meet extraordinary challenges.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n      </div>\n\n      <div class=\"devsite-tabs-dropdown-column\n                  \" column-id=\"tab-1-column-7\" hidden=\"\">\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-menu-heading devsite-nav-title-heading\">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/infrastructure-modernization\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/infrastructure-modernization\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"infrastructure modernization\">\n\n\n\n<div class=\"devsite-nav-item-icon-container\" size=\"medium\">\n\n\n    <img class=\"devsite-nav-item-icon\" alt=\"\" src=\"https://www.gstatic.com/cloud/images/navigation/forward.svg\" srcset=\"\" sizes=\"100vw\" loading=\"lazy\">\n\n\n</div>\n\n\n\n                  <div class=\"devsite-nav-item-title\">\n                    Infrastructure Modernization\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Migrate quickly with solutions for SAP, VMware, Windows, Oracle, and other workloads.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/application-migration\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/application-migration\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"application migration\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Application Migration\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Discovery and analysis tools for moving to the cloud.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/sap\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/sap\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"sap on google cloud\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    SAP on Google Cloud\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Certifications for running SAP applications and SAP HANA.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/hpc\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/hpc\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"high performance computing\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    High Performance Computing\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Compute, storage, and networking options to support any workload.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/windows\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/windows\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"windows on google cloud\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Windows on Google Cloud\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Tools and partners for running Windows workloads.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/data-center-migration\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/data-center-migration\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"data center migration\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Data Center Migration\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Migration solutions for VMs, apps, databases, and more.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/active-assist\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/active-assist\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"active assist\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Active Assist\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Automatic cloud resource optimization and increased security.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/virtual-desktops\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/virtual-desktops\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"virtual desktops\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Virtual Desktops\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Remote work solutions for desktops and applications (VDI &amp; DaaS).\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/cloud-migration-program\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/cloud-migration-program\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"rapid migration program (ramp)\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Rapid Migration Program (RaMP)\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    End-to-end migration program to simplify your path to the cloud.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/backup-dr\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/backup-dr\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"backup and disaster recovery\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Backup and Disaster Recovery\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Ensure your business continuity needs are met.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/redhat\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/redhat\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"red hat on google cloud\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Red Hat on Google Cloud\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Google and Red Hat provide an enterprise-grade platform for traditional on-prem and custom applications.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n      </div>\n\n      <div class=\"devsite-tabs-dropdown-column\n                  \" column-id=\"tab-1-column-8\" hidden=\"\">\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-menu-heading devsite-nav-title-heading\">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://workspace.google.com/enterprise/\" track-type=\"nav\" track-metadata-eventdetail=\"https://workspace.google.com/enterprise/\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" target=\"_blank\" track-name=\"productivity and collaboration\">\n\n\n\n<div class=\"devsite-nav-item-icon-container\" size=\"medium\">\n\n\n    <img class=\"devsite-nav-item-icon\" alt=\"\" src=\"https://www.gstatic.com/cloud/images/navigation/forward.svg\" srcset=\"\" sizes=\"100vw\" loading=\"lazy\">\n\n\n</div>\n\n\n\n                  <div class=\"devsite-nav-item-title\">\n                    Productivity and Collaboration\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Change the way teams work with solutions designed for humans and built for impact.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://workspace.google.com/solutions/enterprise/?enterprise-benefits_activeEl=connect\" track-type=\"nav\" track-metadata-eventdetail=\"https://workspace.google.com/solutions/enterprise/?enterprise-benefits_activeEl=connect\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" target=\"_blank\" track-name=\"google workspace\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Google Workspace\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Collaboration and productivity tools for enterprises.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://workspace.google.com/essentials/\" track-type=\"nav\" track-metadata-eventdetail=\"https://workspace.google.com/essentials/\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"google workspace essentials\" target=\"_blank\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Google Workspace Essentials\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Secure video meetings and modern collaboration for teams.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/identity\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/identity\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cloud identity\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud Identity\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Unified platform for IT admins to manage user devices and apps.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://chromeenterprise.google/\" track-type=\"nav\" track-metadata-eventdetail=\"https://chromeenterprise.google/\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"chrome enterprise\" target=\"_blank\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Chrome Enterprise\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    ChromeOS, Chrome Browser, and Chrome devices built for business.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://workspace.google.com/products/cloud-search/\" track-type=\"nav\" track-metadata-eventdetail=\"https://workspace.google.com/products/cloud-search/\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cloud search\" target=\"_blank\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud Search\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Enterprise search for employees to quickly find company information.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n      </div>\n\n      <div class=\"devsite-tabs-dropdown-column\n                  \" column-id=\"tab-1-column-9\" hidden=\"\">\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-menu-heading devsite-nav-title-heading\">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/security\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/security\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"security\">\n\n\n\n<div class=\"devsite-nav-item-icon-container\" size=\"medium\">\n\n\n    <img class=\"devsite-nav-item-icon\" alt=\"\" src=\"https://www.gstatic.com/cloud/images/navigation/forward.svg\" srcset=\"\" sizes=\"100vw\" loading=\"lazy\">\n\n\n</div>\n\n\n\n                  <div class=\"devsite-nav-item-title\">\n                    Security\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Detect, investigate, and respond to online threats to help protect your business.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/security-analytics-and-operations\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/security-analytics-and-operations\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"security analytics and operations\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Security Analytics and Operations\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Solution for analyzing petabytes of security telemetry.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/web-app-and-api-protection\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/web-app-and-api-protection\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"web app and api protection\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Web App and API Protection\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Threat and fraud protection for your web applications and APIs.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/security-and-resilience\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/security-and-resilience\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"security and resilience framework\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Security and Resilience Framework\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Solutions for each phase of the security and resilience life cycle.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/risk-and-compliance-as-code\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/risk-and-compliance-as-code\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"risk and compliance as code (rcac)\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Risk and compliance as code (RCaC)\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Solution to modernize your governance, risk, and compliance function with automation.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/software-supply-chain-security\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/software-supply-chain-security\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"software supply chain security\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Software Supply Chain Security\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Solution for improving end-to-end software supply chain security.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/security-foundation\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/security-foundation\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"security foundation\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Security Foundation\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Recommended products to help achieve a strong security posture.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n      </div>\n\n      <div class=\"devsite-tabs-dropdown-column\n                  \" column-id=\"tab-1-column-10\" hidden=\"\">\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-menu-heading devsite-nav-title-heading\">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/smart-analytics\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/smart-analytics\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"smart analytics\">\n\n\n\n<div class=\"devsite-nav-item-icon-container\" size=\"medium\">\n\n\n    <img class=\"devsite-nav-item-icon\" alt=\"\" src=\"https://www.gstatic.com/cloud/images/navigation/forward.svg\" srcset=\"\" sizes=\"100vw\" loading=\"lazy\">\n\n\n</div>\n\n\n\n                  <div class=\"devsite-nav-item-title\">\n                    Smart Analytics\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Generate instant insights from data at any scale with a serverless, fully managed analytics platform that significantly simplifies analytics.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/data-warehouse-modernization\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/data-warehouse-modernization\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"data warehouse modernization\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Data Warehouse Modernization\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Data warehouse to jumpstart your migration and unlock insights.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/data-lake\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/data-lake\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"data lake modernization\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Data Lake Modernization\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Services for building and modernizing your data lake.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/spark\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/spark\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"spark on google cloud\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Spark on Google Cloud\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Run and write Spark where you need it, serverless and integrated.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/stream-analytics\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/stream-analytics\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"stream analytics\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Stream Analytics\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Insights from ingesting, processing, and analyzing event streams.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/business-intelligence\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/business-intelligence\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"business intelligence\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Business Intelligence\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Solutions for modernizing your BI stack and creating rich data experiences.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/data-science\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/data-science\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"data science\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Data Science\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Put your data to work with Data Science on Google Cloud.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/marketing-analytics\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/marketing-analytics\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"marketing analytics\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Marketing Analytics\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Solutions for collecting, analyzing, and activating customer data.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/geospatial\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/geospatial\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"geospatial analytics and ai\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Geospatial Analytics and AI\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Solutions for building a more prosperous and sustainable business.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/datasets\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/datasets\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"datasets\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Datasets\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Data from Google, public, and commercial providers to enrich your analytics and AI initiatives.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n      </div>\n\n      <div class=\"devsite-tabs-dropdown-column\n                  \" column-id=\"tab-1-column-11\" hidden=\"\">\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-menu-heading devsite-nav-title-heading\">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions#section-13\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions#section-13\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"startups and smb\">\n\n\n\n<div class=\"devsite-nav-item-icon-container\" size=\"medium\">\n\n\n    <img class=\"devsite-nav-item-icon\" alt=\"\" src=\"https://www.gstatic.com/cloud/images/navigation/forward.svg\" srcset=\"\" sizes=\"100vw\" loading=\"lazy\">\n\n\n</div>\n\n\n\n                  <div class=\"devsite-nav-item-title\">\n                    Startups and SMB\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Accelerate startup and SMB growth with tailored solutions and programs.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/startups\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/startups\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"startup solutions\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Startup Solutions\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Grow your startup and solve your toughest challenges using Google’s proven technology.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/startup\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/startup\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"startup program\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Startup Program\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Get financial, business, and technical support to take your startup to the next level.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/smb\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/smb\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"small and medium business\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Small and Medium Business\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Explore solutions for web hosting, app development, AI, and analytics.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/saas\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/saas\" track-metadata-position=\"nav - solutions\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"software as a service\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Software as a Service\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Build better SaaS products, scale efficiently, and grow your business.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n      </div>\n\n  </div>\n</div>\n</tab>\n\n\n\n        <tab dropdown=\"\" dropdown-full=\"\" clickable=\"\" generated-tab-menu=\"\">\n\n  <a href=\"https://cloud.google.com/products\" track-metadata-eventdetail=\"https://cloud.google.com/products\" class=\"devsite-tabs-content gc-analytics-event \" track-type=\"nav\" track-metadata-position=\"nav - products\" track-metadata-module=\"primary nav\" data-category=\"Site-Wide Custom Events\" data-label=\"Tab: Products\" track-name=\"products\">\n  Products\n\n  </a>\n\n\n  <a href=\"#\" role=\"button\" aria-haspopup=\"true\" aria-expanded=\"false\" aria-label=\"Dropdown menu for Products\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/products\" track-metadata-position=\"nav - products\" track-metadata-module=\"primary nav\" data-category=\"Site-Wide Custom Events\" data-label=\"Tab: Products\" track-name=\"products\" class=\"devsite-tabs-dropdown-toggle devsite-icon devsite-icon-arrow-drop-down\"></a>\n\n<div class=\"devsite-tabs-dropdown\" aria-label=\"submenu\" hidden=\"\">\n\n    <button class=\"devsite-tabs-close-button material-icons button-flat gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Close dropdown menu\" aria-label=\"Close dropdown menu\" track-type=\"nav\" track-name=\"close\" track-metadata-eventdetail=\"#\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\">close</button>\n\n  <div class=\"dropdown-tabbed-menu\"><ul class=\"dropdown-tabbed-menu-list\"><li class=\"dropdown-tabbed-menu-list-item\"><a href=\"#\" column-id=\"tab-2-column-0\" tabindex=\"0\" track-type=\"nav\" track-name=\"Featured Products\" track-metadata-eventdetail=\"#\" track-metadata-position=\"nav - products\" track-metadata-module=\"secondary nav\" active=\"\">Featured Products</a></li><li class=\"dropdown-tabbed-menu-list-item\"><a href=\"#\" column-id=\"tab-2-column-1\" tabindex=\"0\" track-type=\"nav\" track-name=\"\n                    AI and Machine Learning\n                  \" track-metadata-eventdetail=\"#\" track-metadata-position=\"nav - products\" track-metadata-module=\"secondary nav\">\n                    AI and Machine Learning\n                  </a></li><li class=\"dropdown-tabbed-menu-list-item\"><a href=\"#\" column-id=\"tab-2-column-2\" tabindex=\"0\" track-type=\"nav\" track-name=\"Business Intelligence\" track-metadata-eventdetail=\"#\" track-metadata-position=\"nav - products\" track-metadata-module=\"secondary nav\">Business Intelligence</a></li><li class=\"dropdown-tabbed-menu-list-item\"><a href=\"#\" column-id=\"tab-2-column-3\" tabindex=\"0\" track-type=\"nav\" track-name=\"\n                    Compute\n                  \" track-metadata-eventdetail=\"#\" track-metadata-position=\"nav - products\" track-metadata-module=\"secondary nav\">\n                    Compute\n                  </a></li><li class=\"dropdown-tabbed-menu-list-item\"><a href=\"#\" column-id=\"tab-2-column-4\" tabindex=\"0\" track-type=\"nav\" track-name=\"\n                    Containers\n                  \" track-metadata-eventdetail=\"#\" track-metadata-position=\"nav - products\" track-metadata-module=\"secondary nav\">\n                    Containers\n                  </a></li><li class=\"dropdown-tabbed-menu-list-item\"><a href=\"#\" column-id=\"tab-2-column-5\" tabindex=\"0\" track-type=\"nav\" track-name=\"\n                    Data Analytics\n                  \" track-metadata-eventdetail=\"#\" track-metadata-position=\"nav - products\" track-metadata-module=\"secondary nav\">\n                    Data Analytics\n                  </a></li><li class=\"dropdown-tabbed-menu-list-item\"><a href=\"#\" column-id=\"tab-2-column-6\" tabindex=\"0\" track-type=\"nav\" track-name=\"\n                    Databases\n                  \" track-metadata-eventdetail=\"#\" track-metadata-position=\"nav - products\" track-metadata-module=\"secondary nav\">\n                    Databases\n                  </a></li><li class=\"dropdown-tabbed-menu-list-item\"><a href=\"#\" column-id=\"tab-2-column-7\" tabindex=\"0\" track-type=\"nav\" track-name=\"\n                    Developer Tools\n                  \" track-metadata-eventdetail=\"#\" track-metadata-position=\"nav - products\" track-metadata-module=\"secondary nav\">\n                    Developer Tools\n                  </a></li><li class=\"dropdown-tabbed-menu-list-item\"><a href=\"#\" column-id=\"tab-2-column-8\" tabindex=\"0\" track-type=\"nav\" track-name=\"\n                    Distributed Cloud\n                  \" track-metadata-eventdetail=\"#\" track-metadata-position=\"nav - products\" track-metadata-module=\"secondary nav\">\n                    Distributed Cloud\n                  </a></li><li class=\"dropdown-tabbed-menu-list-item\"><a href=\"#\" column-id=\"tab-2-column-9\" tabindex=\"0\" track-type=\"nav\" track-name=\"Hybrid and Multicloud\" track-metadata-eventdetail=\"#\" track-metadata-position=\"nav - products\" track-metadata-module=\"secondary nav\">Hybrid and Multicloud</a></li><li class=\"dropdown-tabbed-menu-list-item\"><a href=\"#\" column-id=\"tab-2-column-10\" tabindex=\"0\" track-type=\"nav\" track-name=\"Industry Specific\" track-metadata-eventdetail=\"#\" track-metadata-position=\"nav - products\" track-metadata-module=\"secondary nav\">Industry Specific</a></li><li class=\"dropdown-tabbed-menu-list-item\"><a href=\"#\" column-id=\"tab-2-column-11\" tabindex=\"0\" track-type=\"nav\" track-name=\"\n                    Integration Services\n                  \" track-metadata-eventdetail=\"#\" track-metadata-position=\"nav - products\" track-metadata-module=\"secondary nav\">\n                    Integration Services\n                  </a></li><li class=\"dropdown-tabbed-menu-list-item\"><a href=\"#\" column-id=\"tab-2-column-12\" tabindex=\"0\" track-type=\"nav\" track-name=\"\n                    Management Tools\n                  \" track-metadata-eventdetail=\"#\" track-metadata-position=\"nav - products\" track-metadata-module=\"secondary nav\">\n                    Management Tools\n                  </a></li><li class=\"dropdown-tabbed-menu-list-item\"><a href=\"#\" column-id=\"tab-2-column-13\" tabindex=\"0\" track-type=\"nav\" track-name=\"\n                    Maps and Geospatial\n                  \" track-metadata-eventdetail=\"#\" track-metadata-position=\"nav - products\" track-metadata-module=\"secondary nav\">\n                    Maps and Geospatial\n                  </a></li><li class=\"dropdown-tabbed-menu-list-item\"><a href=\"#\" column-id=\"tab-2-column-14\" tabindex=\"0\" track-type=\"nav\" track-name=\"Media Services\" track-metadata-eventdetail=\"#\" track-metadata-position=\"nav - products\" track-metadata-module=\"secondary nav\">Media Services</a></li><li class=\"dropdown-tabbed-menu-list-item\"><a href=\"#\" column-id=\"tab-2-column-15\" tabindex=\"0\" track-type=\"nav\" track-name=\"\n                    Migration\n                  \" track-metadata-eventdetail=\"#\" track-metadata-position=\"nav - products\" track-metadata-module=\"secondary nav\">\n                    Migration\n                  </a></li><li class=\"dropdown-tabbed-menu-list-item\"><a href=\"#\" column-id=\"tab-2-column-16\" tabindex=\"0\" track-type=\"nav\" track-name=\"Mixed Reality\" track-metadata-eventdetail=\"#\" track-metadata-position=\"nav - products\" track-metadata-module=\"secondary nav\">Mixed Reality</a></li><li class=\"dropdown-tabbed-menu-list-item\"><a href=\"#\" column-id=\"tab-2-column-17\" tabindex=\"0\" track-type=\"nav\" track-name=\"\n                    Networking\n                  \" track-metadata-eventdetail=\"#\" track-metadata-position=\"nav - products\" track-metadata-module=\"secondary nav\">\n                    Networking\n                  </a></li><li class=\"dropdown-tabbed-menu-list-item\"><a href=\"#\" column-id=\"tab-2-column-18\" tabindex=\"0\" track-type=\"nav\" track-name=\"\n                    Operations\n                  \" track-metadata-eventdetail=\"#\" track-metadata-position=\"nav - products\" track-metadata-module=\"secondary nav\">\n                    Operations\n                  </a></li><li class=\"dropdown-tabbed-menu-list-item\"><a href=\"#\" column-id=\"tab-2-column-19\" tabindex=\"0\" track-type=\"nav\" track-name=\"Productivity and Collaboration\" track-metadata-eventdetail=\"#\" track-metadata-position=\"nav - products\" track-metadata-module=\"secondary nav\">Productivity and Collaboration</a></li><li class=\"dropdown-tabbed-menu-list-item\"><a href=\"#\" column-id=\"tab-2-column-20\" tabindex=\"0\" track-type=\"nav\" track-name=\"\n                    Security and Identity\n                  \" track-metadata-eventdetail=\"#\" track-metadata-position=\"nav - products\" track-metadata-module=\"secondary nav\">\n                    Security and Identity\n                  </a></li><li class=\"dropdown-tabbed-menu-list-item\"><a href=\"#\" column-id=\"tab-2-column-21\" tabindex=\"0\" track-type=\"nav\" track-name=\"\n                    Serverless\n                  \" track-metadata-eventdetail=\"#\" track-metadata-position=\"nav - products\" track-metadata-module=\"secondary nav\">\n                    Serverless\n                  </a></li><li class=\"dropdown-tabbed-menu-list-item\"><a href=\"#\" column-id=\"tab-2-column-22\" tabindex=\"0\" track-type=\"nav\" track-name=\"\n                    Storage\n                  \" track-metadata-eventdetail=\"#\" track-metadata-position=\"nav - products\" track-metadata-module=\"secondary nav\">\n                    Storage\n                  </a></li><li class=\"dropdown-tabbed-menu-list-item\"><a href=\"#\" column-id=\"tab-2-column-23\" tabindex=\"0\" track-type=\"nav\" track-name=\"\n                    Web3\n                  \" track-metadata-eventdetail=\"#\" track-metadata-position=\"nav - products\" track-metadata-module=\"secondary nav\">\n                    Web3\n                  </a></li></ul><div class=\"dropdown-tabbed-menu-button\"><a href=\"https://cloud.google.com/products#featured-products/\" track-type=\"nav\" track-name=\"\n\n\n                    See all products (100+)\n\n\n                \" track-metadata-eventdetail=\"https://cloud.google.com/products#featured-products/\" track-metadata-position=\"nav - products\" track-metadata-module=\"secondary nav\">\n\n\n                    See all products (100+)\n\n\n                </a></div></div><div class=\"devsite-tabs-dropdown-content\">\n\n      <div class=\"devsite-tabs-dropdown-column\n                  \" column-id=\"tab-2-column-0\">\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-menu-heading\">\n\n              <li class=\"devsite-nav-title\" role=\"heading\" tooltip=\"\">Featured Products</li>\n\n\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/compute\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/compute\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"featured products\" tooltip=\"\" track-name=\"compute engine\">\n\n\n\n<div class=\"devsite-nav-item-icon-container\" size=\"medium\">\n\n\n    <img class=\"devsite-nav-item-icon\" alt=\"\" src=\"https://www.gstatic.com/cloud/images/navigation/icons.svg#computeengine\" srcset=\"\" sizes=\"100vw\" loading=\"lazy\">\n\n\n</div>\n\n\n\n                  <div class=\"devsite-nav-item-title\">\n                    Compute Engine\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Virtual machines running in Google’s data center.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/storage\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/storage\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"featured products\" tooltip=\"\" track-name=\"cloud storage\">\n\n\n\n<div class=\"devsite-nav-item-icon-container\" size=\"medium\">\n\n\n    <img class=\"devsite-nav-item-icon\" alt=\"\" src=\"https://www.gstatic.com/cloud/images/navigation/icons.svg#cloudstorage\" srcset=\"\" sizes=\"100vw\" loading=\"lazy\">\n\n\n</div>\n\n\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud Storage\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Object storage that’s secure, durable, and scalable.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/bigquery\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/bigquery\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"featured products\" tooltip=\"\" track-name=\"bigquery\">\n\n\n\n<div class=\"devsite-nav-item-icon-container\" size=\"medium\">\n\n\n    <img class=\"devsite-nav-item-icon\" alt=\"\" src=\"https://www.gstatic.com/cloud/images/navigation/icons.svg#bigquery\" srcset=\"\" sizes=\"100vw\" loading=\"lazy\">\n\n\n</div>\n\n\n\n                  <div class=\"devsite-nav-item-title\">\n                    BigQuery\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Data warehouse for business agility and insights.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/run\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/run\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"featured products\" tooltip=\"\" track-name=\"cloud run\">\n\n\n\n<div class=\"devsite-nav-item-icon-container\" size=\"medium\">\n\n\n    <img class=\"devsite-nav-item-icon\" alt=\"\" src=\"https://www.gstatic.com/cloud/images/navigation/icons.svg#cloudrun\" srcset=\"\" sizes=\"100vw\" loading=\"lazy\">\n\n\n</div>\n\n\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud Run\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Fully managed environment for running containerized apps.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/kubernetes-engine\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/kubernetes-engine\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"featured products\" tooltip=\"\" track-name=\"google kubernetes engine\">\n\n\n\n<div class=\"devsite-nav-item-icon-container\" size=\"medium\">\n\n\n    <img class=\"devsite-nav-item-icon\" alt=\"\" src=\"https://www.gstatic.com/cloud/images/navigation/icons.svg#kubernetesengine\" srcset=\"\" sizes=\"100vw\" loading=\"lazy\">\n\n\n</div>\n\n\n\n                  <div class=\"devsite-nav-item-title\">\n                    Google Kubernetes Engine\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Managed environment for running containerized apps.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/vertex-ai\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/vertex-ai\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"featured products\" tooltip=\"\" track-name=\"vertex ai platform\">\n\n\n\n<div class=\"devsite-nav-item-icon-container\" size=\"medium\">\n\n\n    <img class=\"devsite-nav-item-icon\" alt=\"\" src=\"https://www.gstatic.com/cloud/images/navigation/vertex-ai.svg\" srcset=\"\" sizes=\"100vw\" loading=\"lazy\">\n\n\n</div>\n\n\n\n                  <div class=\"devsite-nav-item-title\">\n                    Vertex AI Platform\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Unified platform for ML models and generative AI.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/looker\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/looker\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"featured products\" tooltip=\"\" track-name=\"looker\">\n\n\n\n<div class=\"devsite-nav-item-icon-container\" size=\"medium\">\n\n\n    <img class=\"devsite-nav-item-icon\" alt=\"\" src=\"https://www.gstatic.com/cloud/images/navigation/cloud-looker.svg\" srcset=\"\" sizes=\"100vw\" loading=\"lazy\">\n\n\n</div>\n\n\n\n                  <div class=\"devsite-nav-item-title\">\n                    Looker\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Platform for BI, data applications, and embedded analytics.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/apigee\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/apigee\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"featured products\" tooltip=\"\" track-name=\"apigee api management\">\n\n\n\n<div class=\"devsite-nav-item-icon-container\" size=\"medium\">\n\n\n    <img class=\"devsite-nav-item-icon\" alt=\"\" src=\"https://www.gstatic.com/cloud/images/navigation/icons.svg#apigeeapiplatform\" srcset=\"\" sizes=\"100vw\" loading=\"lazy\">\n\n\n</div>\n\n\n\n                  <div class=\"devsite-nav-item-title\">\n                    Apigee API Management\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Manage the full life cycle of APIs anywhere with visibility and control.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/sql\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/sql\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"featured products\" tooltip=\"\" track-name=\"cloud sql\">\n\n\n\n<div class=\"devsite-nav-item-icon-container\" size=\"medium\">\n\n\n    <img class=\"devsite-nav-item-icon\" alt=\"\" src=\"https://www.gstatic.com/cloud/images/navigation/icons.svg#cloudsql\" srcset=\"\" sizes=\"100vw\" loading=\"lazy\">\n\n\n</div>\n\n\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud SQL\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Relational database services for MySQL, PostgreSQL and SQL Server.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/sdk\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/sdk\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"featured products\" tooltip=\"\" track-name=\"cloud sdk\">\n\n\n\n<div class=\"devsite-nav-item-icon-container\" size=\"medium\">\n\n\n    <img class=\"devsite-nav-item-icon\" alt=\"\" src=\"https://www.gstatic.com/cloud/images/navigation/icons.svg#cloudshell\" srcset=\"\" sizes=\"100vw\" loading=\"lazy\">\n\n\n</div>\n\n\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud SDK\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Command-line tools and libraries for Google Cloud.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/cdn\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/cdn\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"featured products\" tooltip=\"\" track-name=\"cloud cdn\">\n\n\n\n<div class=\"devsite-nav-item-icon-container\" size=\"medium\">\n\n\n    <img class=\"devsite-nav-item-icon\" alt=\"\" src=\"https://www.gstatic.com/cloud/images/navigation/icons.svg#cloudcdn\" srcset=\"\" sizes=\"100vw\" loading=\"lazy\">\n\n\n</div>\n\n\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud CDN\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Content delivery network for delivering web and video.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-top-border dropdown-tabbed-menu-button-target\">\n\n\n              <li class=\"devsite-nav-description\">Not seeing what you're looking for?</li>\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/products#featured-products/\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/products#featured-products/\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"featured products\" tooltip=\"\" track-name=\"see all products (100+)\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    See all products (100+)\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n      </div>\n\n      <div class=\"devsite-tabs-dropdown-column\n                  \" column-id=\"tab-2-column-1\" hidden=\"\">\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-menu-heading devsite-nav-title-heading\">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/products/ai\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/products/ai\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"ai and machine learning\">\n\n\n\n<div class=\"devsite-nav-item-icon-container\" size=\"medium\">\n\n\n    <img class=\"devsite-nav-item-icon\" alt=\"\" src=\"https://www.gstatic.com/cloud/images/navigation/forward.svg\" srcset=\"\" sizes=\"100vw\" loading=\"lazy\">\n\n\n</div>\n\n\n\n                  <div class=\"devsite-nav-item-title\">\n                    AI and Machine Learning\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/vertex-ai\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/vertex-ai\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"vertex ai platform\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Vertex AI Platform\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Unified platform for ML models and generative AI.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/generative-ai-studio\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/generative-ai-studio\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"generative ai on vertex ai\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Generative AI on Vertex AI\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Build, tune, and deploy foundation models on Vertex AI.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/generative-ai-app-builder\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/generative-ai-app-builder\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"vertex ai search and conversation\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Vertex AI Search and Conversation\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Generative AI apps for search and conversational AI.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/dialogflow\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/dialogflow\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"dialogflow\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Dialogflow\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Lifelike conversational AI with state-of-the-art virtual agents.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/natural-language\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/natural-language\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"natural language ai\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Natural Language AI\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Sentiment analysis and classification of unstructured text.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/speech-to-text\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/speech-to-text\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"speech-to-text\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Speech-to-Text\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Speech recognition and transcription across 125 languages.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/text-to-speech\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/text-to-speech\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"text-to-speech\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Text-to-Speech\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Speech synthesis in 220+ voices and 40+ languages.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/translate\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/translate\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"translation ai\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Translation AI\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Language detection, translation, and glossary support.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/document-ai\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/document-ai\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"document ai\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Document AI\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Document processing and data capture automated at scale.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/vision\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/vision\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"vision ai\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Vision AI\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Custom and pre-trained models to detect emotion, text, and more.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/contact-center\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/contact-center\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"contact center ai\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Contact Center AI\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    AI model for speaking with customers and assisting human agents.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-top-border\">\n\n\n              <li class=\"devsite-nav-description\">Not seeing what you're looking for?</li>\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/products#ai-and-machine-learning\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/products#ai-and-machine-learning\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"see all ai and machine learning products\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    See all AI and machine learning products\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n      </div>\n\n      <div class=\"devsite-tabs-dropdown-column\n                  \" column-id=\"tab-2-column-2\" hidden=\"\">\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-menu-heading\">\n\n              <li class=\"devsite-nav-title\" role=\"heading\" tooltip=\"\">Business Intelligence</li>\n\n\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/looker\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/looker\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"business intelligence\" tooltip=\"\" track-name=\"looker\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Looker\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Platform for BI, data applications, and embedded analytics.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/looker-studio\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/looker-studio\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"business intelligence\" tooltip=\"\" track-name=\"looker studio\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Looker Studio\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Interactive data suite for dashboarding, reporting, and analytics.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n      </div>\n\n      <div class=\"devsite-tabs-dropdown-column\n                  \" column-id=\"tab-2-column-3\" hidden=\"\">\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-menu-heading devsite-nav-title-heading\">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/products/compute\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/products/compute\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"compute\">\n\n\n\n<div class=\"devsite-nav-item-icon-container\" size=\"medium\">\n\n\n    <img class=\"devsite-nav-item-icon\" alt=\"\" src=\"https://www.gstatic.com/cloud/images/navigation/forward.svg\" srcset=\"\" sizes=\"100vw\" loading=\"lazy\">\n\n\n</div>\n\n\n\n                  <div class=\"devsite-nav-item-title\">\n                    Compute\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/compute\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/compute\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"compute engine\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Compute Engine\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Virtual machines running in Google’s data center.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/appengine\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/appengine\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"app engine\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    App Engine\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Serverless application platform for apps and back ends.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/gpu\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/gpu\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cloud gpus\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud GPUs\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    GPUs for ML, scientific computing, and 3D visualization.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/migrate/virtual-machines\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/migrate/virtual-machines\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"migrate to virtual machines\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Migrate to Virtual Machines\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Server and virtual machine migration to Compute Engine.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/spot-vms\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/spot-vms\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"spot vms\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Spot VMs\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Compute instances for batch jobs and fault-tolerant workloads.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/batch\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/batch\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"batch\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Batch\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Fully managed service for scheduling batch jobs.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/compute/docs/nodes/sole-tenant-nodes\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/compute/docs/nodes/sole-tenant-nodes\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"sole-tenant nodes\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Sole-Tenant Nodes\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Dedicated hardware for compliance, licensing, and management.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/bare-metal\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/bare-metal\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"bare metal\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Bare Metal\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Infrastructure to run specialized workloads on Google Cloud.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/recommender\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/recommender\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"recommender\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Recommender\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Usage recommendations for Google Cloud products and services.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/vmware-engine\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/vmware-engine\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"vmware engine\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    VMware Engine\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Fully managed, native VMware Cloud Foundation software stack.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/run\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/run\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cloud run\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud Run\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Fully managed environment for running containerized apps.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-top-border\">\n\n\n              <li class=\"devsite-nav-description\">Not seeing what you're looking for?</li>\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/products#compute\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/products#compute\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"see all compute products\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    See all compute products\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n      </div>\n\n      <div class=\"devsite-tabs-dropdown-column\n                  \" column-id=\"tab-2-column-4\" hidden=\"\">\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-menu-heading devsite-nav-title-heading\">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/containers\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/containers\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"containers\">\n\n\n\n<div class=\"devsite-nav-item-icon-container\" size=\"medium\">\n\n\n    <img class=\"devsite-nav-item-icon\" alt=\"\" src=\"https://www.gstatic.com/cloud/images/navigation/forward.svg\" srcset=\"\" sizes=\"100vw\" loading=\"lazy\">\n\n\n</div>\n\n\n\n                  <div class=\"devsite-nav-item-title\">\n                    Containers\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/kubernetes-engine\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/kubernetes-engine\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"google kubernetes engine\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Google Kubernetes Engine\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Managed environment for running containerized apps.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/run\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/run\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cloud run\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud Run\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Fully managed environment for running containerized apps.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/build\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/build\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cloud build\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud Build\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Solution for running build steps in a Docker container.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/artifact-registry\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/artifact-registry\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"artifact registry\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Artifact Registry\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Package manager for build artifacts and dependencies.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/code\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/code\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cloud code\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud Code\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    IDE support to write, run, and debug Kubernetes applications.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/deploy\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/deploy\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cloud deploy\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud Deploy\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Fully managed continuous delivery to GKE and Cloud Run.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/migrate/containers\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/migrate/containers\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"migrate to containers\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Migrate to Containers\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Components for migrating VMs into system containers on GKE.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/deep-learning-containers\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/deep-learning-containers\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"deep learning containers\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Deep Learning Containers\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Containers with data science frameworks, libraries, and tools.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/knative\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/knative\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"knative\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Knative\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Components to create Kubernetes-native cloud-based software.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n      </div>\n\n      <div class=\"devsite-tabs-dropdown-column\n                  \" column-id=\"tab-2-column-5\" hidden=\"\">\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-menu-heading devsite-nav-title-heading\">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/smart-analytics\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/smart-analytics\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"data analytics\">\n\n\n\n<div class=\"devsite-nav-item-icon-container\" size=\"medium\">\n\n\n    <img class=\"devsite-nav-item-icon\" alt=\"\" src=\"https://www.gstatic.com/cloud/images/navigation/forward.svg\" srcset=\"\" sizes=\"100vw\" loading=\"lazy\">\n\n\n</div>\n\n\n\n                  <div class=\"devsite-nav-item-title\">\n                    Data Analytics\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/bigquery\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/bigquery\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"bigquery\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    BigQuery\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Data warehouse for business agility and insights.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/looker\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/looker\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"looker\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Looker\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Platform for BI, data applications, and embedded analytics.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/dataflow\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/dataflow\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"dataflow\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Dataflow\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Streaming analytics for stream and batch processing.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/pubsub\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/pubsub\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"pub/sub\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Pub/Sub\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Messaging service for event ingestion and delivery.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/dataproc\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/dataproc\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"dataproc\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Dataproc\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Service for running Apache Spark and Apache Hadoop clusters.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/data-fusion\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/data-fusion\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cloud data fusion\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud Data Fusion\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Data integration for building and managing data pipelines.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/composer\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/composer\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cloud composer\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud Composer\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Workflow orchestration service built on Apache Airflow.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/dataprep\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/dataprep\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"dataprep\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Dataprep\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Service to prepare data for analysis and machine learning.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/dataplex\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/dataplex\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"dataplex\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Dataplex\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Intelligent data fabric for unifying data management across silos.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/dataform\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/dataform\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"dataform\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Dataform\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Build, version control, and deploy SQL workflows in BigQuery.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/analytics-hub\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/analytics-hub\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"analytics hub\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Analytics Hub\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Service for securely and efficiently exchanging data analytics assets.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-top-border\">\n\n\n              <li class=\"devsite-nav-description\">Not seeing what you're looking for?</li>\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/products#data-analytics\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/products#data-analytics\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"see all data analytics products\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    See all data analytics products\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n      </div>\n\n      <div class=\"devsite-tabs-dropdown-column\n                  \" column-id=\"tab-2-column-6\" hidden=\"\">\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-menu-heading devsite-nav-title-heading\">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/products/databases\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/products/databases\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"databases\">\n\n\n\n<div class=\"devsite-nav-item-icon-container\" size=\"medium\">\n\n\n    <img class=\"devsite-nav-item-icon\" alt=\"\" src=\"https://www.gstatic.com/cloud/images/navigation/forward.svg\" srcset=\"\" sizes=\"100vw\" loading=\"lazy\">\n\n\n</div>\n\n\n\n                  <div class=\"devsite-nav-item-title\">\n                    Databases\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/alloydb\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/alloydb\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"alloydb for postgresql\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    AlloyDB for PostgreSQL\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Fully managed, PostgreSQL-compatible database for enterprise workloads.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/sql\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/sql\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cloud sql\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud SQL\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Fully managed database for MySQL, PostgreSQL, and SQL Server.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/firestore\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/firestore\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"firestore\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Firestore\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Cloud-native document database for building rich mobile, web, and IoT apps.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/spanner\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/spanner\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cloud spanner\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud Spanner\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Cloud-native relational database with unlimited scale and 99.999% availability.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/bigtable\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/bigtable\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cloud bigtable\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud Bigtable\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Cloud-native wide-column database for large-scale, low-latency workloads.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/datastream\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/datastream\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"datastream\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Datastream\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Serverless change data capture and replication service.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/database-migration\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/database-migration\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"database migration service\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Database Migration Service\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Serverless, minimal downtime migrations to Cloud SQL.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/bare-metal\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/bare-metal\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"bare metal solution\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Bare Metal Solution\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Fully managed infrastructure for your Oracle workloads.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/memorystore\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/memorystore\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"memorystore\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Memorystore\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Fully managed Redis and Memcached for sub-millisecond data access.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n      </div>\n\n      <div class=\"devsite-tabs-dropdown-column\n                  \" column-id=\"tab-2-column-7\" hidden=\"\">\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-menu-heading devsite-nav-title-heading\">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/products/tools\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/products/tools\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"developer tools\">\n\n\n\n<div class=\"devsite-nav-item-icon-container\" size=\"medium\">\n\n\n    <img class=\"devsite-nav-item-icon\" alt=\"\" src=\"https://www.gstatic.com/cloud/images/navigation/forward.svg\" srcset=\"\" sizes=\"100vw\" loading=\"lazy\">\n\n\n</div>\n\n\n\n                  <div class=\"devsite-nav-item-title\">\n                    Developer Tools\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/artifact-registry\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/artifact-registry\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"artifact registry\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Artifact Registry\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Universal package manager for build artifacts and dependencies.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/code\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/code\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cloud code\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud Code\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    IDE support to write, run, and debug Kubernetes applications.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/build\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/build\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cloud build\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud Build\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Continuous integration and continuous delivery platform.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/deploy\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/deploy\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cloud deploy\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud Deploy\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Fully managed continuous delivery to GKE and Cloud Run.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/deployment-manager/docs\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/deployment-manager/docs\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cloud deployment manager\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud Deployment Manager\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Service for creating and managing Google Cloud resources.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/sdk\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/sdk\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cloud sdk\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud SDK\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Command-line tools and libraries for Google Cloud.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/scheduler\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/scheduler\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cloud scheduler\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud Scheduler\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Cron job scheduler for task automation and management.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/source-repositories\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/source-repositories\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cloud source repositories\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud Source Repositories\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Private Git repository to store, manage, and track code.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/infrastructure-manager\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/infrastructure-manager\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"infrastructure manager\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Infrastructure Manager\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Automate infrastructure management with Terraform.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/workstations\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/workstations\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cloud workstations\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud Workstations\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Managed and secure development environments in the cloud.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/duet-ai\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/duet-ai\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"duet ai\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Duet AI\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    AI-powered collaborator available across Google Cloud and your IDE.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-top-border\">\n\n\n              <li class=\"devsite-nav-description\">Not seeing what you're looking for?</li>\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/products#developer-tools\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/products#developer-tools\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"see all developer tools\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    See all developer tools\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n      </div>\n\n      <div class=\"devsite-tabs-dropdown-column\n                  \" column-id=\"tab-2-column-8\" hidden=\"\">\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-menu-heading devsite-nav-title-heading\">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/distributed-cloud\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/distributed-cloud\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"distributed cloud\">\n\n\n\n<div class=\"devsite-nav-item-icon-container\" size=\"medium\">\n\n\n    <img class=\"devsite-nav-item-icon\" alt=\"\" src=\"https://www.gstatic.com/cloud/images/navigation/forward.svg\" srcset=\"\" sizes=\"100vw\" loading=\"lazy\">\n\n\n</div>\n\n\n\n                  <div class=\"devsite-nav-item-title\">\n                    Distributed Cloud\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/distributed-cloud-edge\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/distributed-cloud-edge\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"google distributed cloud edge\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Google Distributed Cloud Edge\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Distributed cloud services for edge workloads.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/distributed-cloud-hosted\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/distributed-cloud-hosted\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"google distributed cloud hosted\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Google Distributed Cloud Hosted\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Distributed cloud for air-gapped workloads.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n      </div>\n\n      <div class=\"devsite-tabs-dropdown-column\n                  \" column-id=\"tab-2-column-9\" hidden=\"\">\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-menu-heading\">\n\n              <li class=\"devsite-nav-title\" role=\"heading\" tooltip=\"\">Hybrid and Multicloud</li>\n\n\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/kubernetes-engine\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/kubernetes-engine\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"hybrid and multicloud\" tooltip=\"\" track-name=\"google kubernetes engine\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Google Kubernetes Engine\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Managed environment for running containerized apps.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/apigee\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/apigee\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"hybrid and multicloud\" tooltip=\"\" track-name=\"apigee api management\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Apigee API Management\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    API management, development, and security platform.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/migrate/containers\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/migrate/containers\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"hybrid and multicloud\" tooltip=\"\" track-name=\"migrate to containers\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Migrate to Containers\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Tool to move workloads and existing applications to GKE.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/traffic-director\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/traffic-director\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"hybrid and multicloud\" tooltip=\"\" track-name=\"traffic director\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Traffic Director\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Traffic control pane and management for open service mesh.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/build\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/build\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"hybrid and multicloud\" tooltip=\"\" track-name=\"cloud build\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud Build\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Service for executing builds on Google Cloud infrastructure.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/products/operations\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/products/operations\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"hybrid and multicloud\" tooltip=\"\" track-name=\"operations\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Operations\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Monitoring, logging, and application performance suite.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/distributed-cloud\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/distributed-cloud\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"hybrid and multicloud\" tooltip=\"\" track-name=\"google distributed cloud\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Google Distributed Cloud\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Fully managed solutions for the edge and data centers.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n      </div>\n\n      <div class=\"devsite-tabs-dropdown-column\n                  \" column-id=\"tab-2-column-10\" hidden=\"\">\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-menu-heading\">\n\n              <li class=\"devsite-nav-title\" role=\"heading\" tooltip=\"\">Industry Specific</li>\n\n\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/anti-money-laundering-ai\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/anti-money-laundering-ai\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"industry specific\" tooltip=\"\" track-name=\"anti money laundering ai\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Anti Money Laundering AI\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Detect suspicious, potential money laundering activity with AI.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/healthcare-api\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/healthcare-api\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"industry specific\" tooltip=\"\" track-name=\"cloud healthcare api\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud Healthcare API\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Solution for bridging existing care systems and apps on Google Cloud.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/device-connect\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/device-connect\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"industry specific\" tooltip=\"\" track-name=\"device connect for fitbit\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Device Connect for Fitbit\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Gain a 360-degree patient view with connected Fitbit data on Google Cloud.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/telecom-network-automation\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/telecom-network-automation\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"industry specific\" tooltip=\"\" track-name=\"telecom network automation\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Telecom Network Automation\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Ready to use cloud-native automation for telecom networks.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/telecom-data-fabric\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/telecom-data-fabric\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"industry specific\" tooltip=\"\" track-name=\"telecom data fabric\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Telecom Data Fabric\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Telecom data management and analytics with an automated approach.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/telecom-subscriber-insights\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/telecom-subscriber-insights\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"industry specific\" tooltip=\"\" track-name=\"telecom subscriber insights\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Telecom Subscriber Insights\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Ingests data to improve subscriber acquisition and retention.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/spectrum-access-system\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/spectrum-access-system\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"industry specific\" tooltip=\"\" track-name=\"spectrum access system (sas)\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Spectrum Access System (SAS)\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Controls fundamental access to the Citizens Broadband Radio Service (CBRS).\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n      </div>\n\n      <div class=\"devsite-tabs-dropdown-column\n                  \" column-id=\"tab-2-column-11\" hidden=\"\">\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-menu-heading devsite-nav-title-heading\">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/integration-services\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/integration-services\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"integration services\">\n\n\n\n<div class=\"devsite-nav-item-icon-container\" size=\"medium\">\n\n\n    <img class=\"devsite-nav-item-icon\" alt=\"\" src=\"https://www.gstatic.com/cloud/images/navigation/forward.svg\" srcset=\"\" sizes=\"100vw\" loading=\"lazy\">\n\n\n</div>\n\n\n\n                  <div class=\"devsite-nav-item-title\">\n                    Integration Services\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/application-integration\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/application-integration\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"application integration\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Application Integration\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Connect to 3rd party apps and enable data consistency without code.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/workflows\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/workflows\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"workflows\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Workflows\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Workflow orchestration for serverless products and API services.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/apigee\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/apigee\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"apigee api management\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Apigee API Management\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Manage the full life cycle of APIs anywhere with visibility and control.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/tasks\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/tasks\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cloud tasks\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud Tasks\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Task management service for asynchronous task execution.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/scheduler\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/scheduler\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cloud scheduler\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud Scheduler\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Cron job scheduler for task automation and management.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/dataproc\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/dataproc\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"dataproc\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Dataproc\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Service for running Apache Spark and Apache Hadoop clusters.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/data-fusion\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/data-fusion\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cloud data fusion\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud Data Fusion\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Data integration for building and managing data pipelines.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/composer\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/composer\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cloud composer\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud Composer\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Workflow orchestration service built on Apache Airflow.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/pubsub\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/pubsub\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"pub/sub\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Pub/Sub\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Messaging service for event ingestion and delivery.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/eventarc/docs\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/eventarc/docs\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"eventarc\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Eventarc\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Build an event-driven architecture that can connect any service.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n      </div>\n\n      <div class=\"devsite-tabs-dropdown-column\n                  \" column-id=\"tab-2-column-12\" hidden=\"\">\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-menu-heading devsite-nav-title-heading\">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/products/management\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/products/management\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"management tools\">\n\n\n\n<div class=\"devsite-nav-item-icon-container\" size=\"medium\">\n\n\n    <img class=\"devsite-nav-item-icon\" alt=\"\" src=\"https://www.gstatic.com/cloud/images/navigation/forward.svg\" srcset=\"\" sizes=\"100vw\" loading=\"lazy\">\n\n\n</div>\n\n\n\n                  <div class=\"devsite-nav-item-title\">\n                    Management Tools\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/shell\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/shell\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cloud shell\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud Shell\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Interactive shell environment with a built-in command line.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/cloud-console\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/cloud-console\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cloud console\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud console\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Web-based interface for managing and monitoring cloud apps.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/endpoints\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/endpoints\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cloud endpoints\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud Endpoints\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Deployment and development management for APIs on Google Cloud.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/iam\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/iam\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cloud iam\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud IAM\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Permissions management system for Google Cloud resources.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/apis\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/apis\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cloud apis\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud APIs\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Programmatic interfaces for  Google Cloud services.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/private-catalog\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/private-catalog\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"service catalog\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Service Catalog\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Service catalog for admins managing internal enterprise solutions.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/cost-management\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/cost-management\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cost management\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cost Management\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Tools for monitoring, controlling, and optimizing your costs.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/products/operations\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/products/operations\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"operations\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Operations\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Monitoring, logging, and application performance suite.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/carbon-footprint\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/carbon-footprint\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"carbon footprint\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Carbon Footprint\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Dashboard to view and export Google Cloud carbon emissions reports.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/config-connector/docs/overview\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/config-connector/docs/overview\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"config connector\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Config Connector\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Kubernetes add-on for managing Google Cloud resources.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/active-assist\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/active-assist\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"active assist\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Active Assist\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Tools for easily managing performance, security, and cost.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-top-border\">\n\n\n              <li class=\"devsite-nav-description\">Not seeing what you're looking for?</li>\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/products#managment-tools\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/products#managment-tools\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"see all management tools\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    See all management tools\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n      </div>\n\n      <div class=\"devsite-tabs-dropdown-column\n                  \" column-id=\"tab-2-column-13\" hidden=\"\">\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-menu-heading devsite-nav-title-heading\">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/geospatial\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/geospatial\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"maps and geospatial\">\n\n\n\n<div class=\"devsite-nav-item-icon-container\" size=\"medium\">\n\n\n    <img class=\"devsite-nav-item-icon\" alt=\"\" src=\"https://www.gstatic.com/cloud/images/navigation/forward.svg\" srcset=\"\" sizes=\"100vw\" loading=\"lazy\">\n\n\n</div>\n\n\n\n                  <div class=\"devsite-nav-item-title\">\n                    Maps and Geospatial\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/earth-engine\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/earth-engine\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"earth engine\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Earth Engine\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Geospatial platform for Earth observation data and analysis.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://mapsplatform.google.com/\" track-type=\"nav\" track-metadata-eventdetail=\"https://mapsplatform.google.com/\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"google maps platform\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Google Maps Platform\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Create immersive location experiences and improve business operations.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n      </div>\n\n      <div class=\"devsite-tabs-dropdown-column\n                  \" column-id=\"tab-2-column-14\" hidden=\"\">\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-menu-heading\">\n\n              <li class=\"devsite-nav-title\" role=\"heading\" tooltip=\"\">Media Services</li>\n\n\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/cdn\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/cdn\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"media services\" tooltip=\"\" track-name=\"cloud cdn\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud CDN\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Content delivery network for serving web and video content.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/livestream/docs\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/livestream/docs\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"media services\" tooltip=\"\" track-name=\"live stream api\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Live Stream API\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Service to convert live video and package for streaming.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/opencue\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/opencue\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"media services\" tooltip=\"\" track-name=\"opencue\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    OpenCue\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Open source render manager for visual effects and animation.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/transcoder/docs\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/transcoder/docs\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"media services\" tooltip=\"\" track-name=\"transcoder api\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Transcoder API\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Convert video files and package them for optimized delivery.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/video-stitcher\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/video-stitcher\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"media services\" tooltip=\"\" track-name=\"video stitcher api\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Video Stitcher API\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Service for dynamic or server side ad insertion.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n      </div>\n\n      <div class=\"devsite-tabs-dropdown-column\n                  \" column-id=\"tab-2-column-15\" hidden=\"\">\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-menu-heading devsite-nav-title-heading\">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/products/cloud-migration\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/products/cloud-migration\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"migration\">\n\n\n\n<div class=\"devsite-nav-item-icon-container\" size=\"medium\">\n\n\n    <img class=\"devsite-nav-item-icon\" alt=\"\" src=\"https://www.gstatic.com/cloud/images/navigation/forward.svg\" srcset=\"\" sizes=\"100vw\" loading=\"lazy\">\n\n\n</div>\n\n\n\n                  <div class=\"devsite-nav-item-title\">\n                    Migration\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/migration-center/docs\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/migration-center/docs\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"migration center\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Migration Center\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Unified platform for migrating and modernizing with Google Cloud.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/application-migration\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/application-migration\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"application migration\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Application Migration\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    App migration to the cloud for low-cost refresh cycles.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/migrate/virtual-machines\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/migrate/virtual-machines\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"migrate to virtual machines\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Migrate to Virtual Machines\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Components for migrating VMs and physical servers to Compute Engine.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/foundation-toolkit\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/foundation-toolkit\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cloud foundation toolkit\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud Foundation Toolkit\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Reference templates for Deployment Manager and Terraform.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/database-migration\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/database-migration\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"database migration service\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Database Migration Service\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Serverless, minimal downtime migrations to Cloud SQL.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/migrate/containers\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/migrate/containers\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"migrate to containers\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Migrate to Containers\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Components for migrating VMs into system containers on GKE.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/bigquery-transfer/docs/introduction\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/bigquery-transfer/docs/introduction\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"bigquery data transfer service\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    BigQuery Data Transfer Service\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Data import service for scheduling and moving data into BigQuery.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/solutions/cloud-migration-program\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/solutions/cloud-migration-program\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"rapid migration program (ramp)\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Rapid Migration Program (RaMP)\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    End-to-end migration program to simplify your path to the cloud.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/transfer-appliance/docs/4.0\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/transfer-appliance/docs/4.0\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"transfer appliance\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Transfer Appliance\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Storage server for moving large volumes of data to Google Cloud.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/storage-transfer-service\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/storage-transfer-service\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"storage transfer service\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Storage Transfer Service\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Data transfers from online and on-premises sources to Cloud Storage.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/vmware-engine\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/vmware-engine\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"vmware engine\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    VMware Engine\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Migrate and run your VMware workloads natively on Google Cloud.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n      </div>\n\n      <div class=\"devsite-tabs-dropdown-column\n                  \" column-id=\"tab-2-column-16\" hidden=\"\">\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-menu-heading\">\n\n              <li class=\"devsite-nav-title\" role=\"heading\" tooltip=\"\">Mixed Reality</li>\n\n\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/immersive-stream/xr\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/immersive-stream/xr\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"mixed reality\" tooltip=\"\" track-name=\"immersive stream for xr\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Immersive Stream for XR\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Hosts, renders, and streams 3D and XR experiences.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n      </div>\n\n      <div class=\"devsite-tabs-dropdown-column\n                  \" column-id=\"tab-2-column-17\" hidden=\"\">\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-menu-heading devsite-nav-title-heading\">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/products/networking\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/products/networking\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"networking\">\n\n\n\n<div class=\"devsite-nav-item-icon-container\" size=\"medium\">\n\n\n    <img class=\"devsite-nav-item-icon\" alt=\"\" src=\"https://www.gstatic.com/cloud/images/navigation/forward.svg\" srcset=\"\" sizes=\"100vw\" loading=\"lazy\">\n\n\n</div>\n\n\n\n                  <div class=\"devsite-nav-item-title\">\n                    Networking\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/armor\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/armor\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cloud armor\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud Armor\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Security policies and defense against web and DDoS attacks.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/cdn\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/cdn\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cloud cdn and media cdn\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud CDN and Media CDN\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Content delivery network for serving web and video content.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/dns\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/dns\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cloud dns\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud DNS\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Domain name system for reliable and low-latency name lookups.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/load-balancing\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/load-balancing\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cloud load balancing\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud Load Balancing\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Service for distributing traffic across applications and regions.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/nat\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/nat\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cloud nat\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud NAT\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    NAT service for giving private instances internet access.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/hybrid-connectivity\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/hybrid-connectivity\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cloud connectivity\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud Connectivity\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Connectivity options for VPN, peering, and enterprise needs.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/network-connectivity-center\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/network-connectivity-center\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"network connectivity center\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Network Connectivity Center\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Connectivity management to help simplify and scale networks.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/network-intelligence-center\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/network-intelligence-center\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"network intelligence center\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Network Intelligence Center\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Network monitoring, verification, and optimization platform.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/network-tiers\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/network-tiers\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"network service tiers\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Network Service Tiers\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Cloud network options  based on performance, availability, and cost.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/vpc\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/vpc\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"virtual private cloud\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Virtual Private Cloud\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Single VPC for an entire organization, isolated within projects.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/private-service-connect\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/private-service-connect\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"private service connect\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Private Service Connect\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Secure connection between your VPC and services.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-top-border\">\n\n\n              <li class=\"devsite-nav-description\">Not seeing what you're looking for?</li>\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/products#networking\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/products#networking\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"see all networking products\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    See all networking products\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n      </div>\n\n      <div class=\"devsite-tabs-dropdown-column\n                  \" column-id=\"tab-2-column-18\" hidden=\"\">\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-menu-heading devsite-nav-title-heading\">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/products/operations\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/products/operations\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"operations\">\n\n\n\n<div class=\"devsite-nav-item-icon-container\" size=\"medium\">\n\n\n    <img class=\"devsite-nav-item-icon\" alt=\"\" src=\"https://www.gstatic.com/cloud/images/navigation/forward.svg\" srcset=\"\" sizes=\"100vw\" loading=\"lazy\">\n\n\n</div>\n\n\n\n                  <div class=\"devsite-nav-item-title\">\n                    Operations\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/logging\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/logging\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cloud logging\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud Logging\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Google Cloud audit, platform, and application logs management.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/monitoring\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/monitoring\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cloud monitoring\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud Monitoring\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Infrastructure and application health with rich metrics.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/error-reporting\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/error-reporting\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"error reporting\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Error Reporting\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Application error identification and analysis.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/debugger\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/debugger\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cloud debugger\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud Debugger\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Real-time application state inspection and in -production debugging.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/trace\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/trace\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cloud trace\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud Trace\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Tracing system collecting latency data from applications.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/profiler\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/profiler\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cloud profiler\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud Profiler\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    CPU and heap profiler for analyzing application performance.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/docs/quotas\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/docs/quotas\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cloud quotas\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud Quotas\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Allows users to manage quotas for all of their Google Cloud services.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n      </div>\n\n      <div class=\"devsite-tabs-dropdown-column\n                  \" column-id=\"tab-2-column-19\" hidden=\"\">\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-menu-heading\">\n\n              <li class=\"devsite-nav-title\" role=\"heading\" tooltip=\"\">Productivity and Collaboration</li>\n\n\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://about.appsheet.com/home/\" track-type=\"nav\" track-metadata-eventdetail=\"https://about.appsheet.com/home/\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"productivity and collaboration\" tooltip=\"\" track-name=\"appsheet\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    AppSheet\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    No-code development platform to build and extend applications.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/appsheet/automation\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/appsheet/automation\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"productivity and collaboration\" tooltip=\"\" track-name=\"appsheet automation\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    AppSheet Automation\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Build automations and applications on a unified platform.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://workspace.google.com/solutions/enterprise/?enterprise-benefits_activeEl=connect/\" track-type=\"nav\" track-metadata-eventdetail=\"https://workspace.google.com/solutions/enterprise/?enterprise-benefits_activeEl=connect/\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"productivity and collaboration\" tooltip=\"\" track-name=\"google workspace\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Google Workspace\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Collaboration and productivity tools for individuals and organizations.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://workspace.google.com/essentials/\" track-type=\"nav\" track-metadata-eventdetail=\"https://workspace.google.com/essentials/\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"productivity and collaboration\" tooltip=\"\" track-name=\"google workspace essentials\" target=\"_blank\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Google Workspace Essentials\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Secure video meetings and modern collaboration for teams.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://workspace.google.com/solutions/ai/\" track-type=\"nav\" track-metadata-eventdetail=\"https://workspace.google.com/solutions/ai/\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"productivity and collaboration\" tooltip=\"\" track-name=\"duet ai for google workspace\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Duet AI for Google Workspace\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Embeds generative AI across Google Workspace apps.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/identity\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/identity\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"productivity and collaboration\" tooltip=\"\" track-name=\"cloud identity\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud Identity\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Unified platform for IT admins to manage user devices and apps.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/chrome-enterprise\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/chrome-enterprise\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"productivity and collaboration\" tooltip=\"\" track-name=\"chrome enterprise\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Chrome Enterprise\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    ChromeOS, Chrome browser, and Chrome devices built for business.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n      </div>\n\n      <div class=\"devsite-tabs-dropdown-column\n                  \" column-id=\"tab-2-column-20\" hidden=\"\">\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-menu-heading devsite-nav-title-heading\">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/products/security-and-identity\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/products/security-and-identity\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"security and identity\">\n\n\n\n<div class=\"devsite-nav-item-icon-container\" size=\"medium\">\n\n\n    <img class=\"devsite-nav-item-icon\" alt=\"\" src=\"https://www.gstatic.com/cloud/images/navigation/forward.svg\" srcset=\"\" sizes=\"100vw\" loading=\"lazy\">\n\n\n</div>\n\n\n\n                  <div class=\"devsite-nav-item-title\">\n                    Security and Identity\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/iam\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/iam\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cloud iam\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud IAM\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Permissions management system for Google Cloud resources.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/assured-workloads\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/assured-workloads\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"assured workloads\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Assured Workloads\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Compliance and security controls for sensitive workloads.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/security-key-management\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/security-key-management\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cloud key management\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud Key Management\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Manage encryption keys on Google Cloud.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/confidential-computing\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/confidential-computing\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"confidential computing\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Confidential Computing\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Encrypt data in use with Confidential VMs.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/security-command-center\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/security-command-center\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"security command center\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Security Command Center\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Platform for defending against threats to your Google Cloud assets.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/sensitive-data-protection\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/sensitive-data-protection\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"sensitive data protection\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Sensitive Data Protection\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Discover, classify, and protect your valuable data assets.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://www.mandiant.com/?utm_source=cgc&amp;utm_medium=referral\" track-type=\"nav\" track-metadata-eventdetail=\"https://www.mandiant.com/?utm_source=cgc&amp;utm_medium=referral\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"mandiant products and services\" target=\"_blank\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Mandiant Products and Services\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Cybersecurity technology and expertise from the frontlines.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/recaptcha-enterprise\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/recaptcha-enterprise\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"recaptcha enterprise\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    reCAPTCHA Enterprise\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Help protect your website from fraudulent activity, spam, and abuse.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/chronicle-security-operations\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/chronicle-security-operations\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"chronicle security operations\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Chronicle Security Operations\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Detect, investigate, and respond to cyber threats.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/secret-manager\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/secret-manager\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"secret manager\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Secret Manager\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Store API keys, passwords, certificates, and other sensitive data.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/identity\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/identity\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cloud identity\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud Identity\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Unified platform for IT admins to manage user devices and apps.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-top-border\">\n\n\n              <li class=\"devsite-nav-description\">Not seeing what you're looking for?</li>\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/products#security-and-identity/\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/products#security-and-identity/\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"see all security and identity products\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    See all security and identity products\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n      </div>\n\n      <div class=\"devsite-tabs-dropdown-column\n                  \" column-id=\"tab-2-column-21\" hidden=\"\">\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-menu-heading devsite-nav-title-heading\">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/serverless\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/serverless\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"serverless\">\n\n\n\n<div class=\"devsite-nav-item-icon-container\" size=\"medium\">\n\n\n    <img class=\"devsite-nav-item-icon\" alt=\"\" src=\"https://www.gstatic.com/cloud/images/navigation/forward.svg\" srcset=\"\" sizes=\"100vw\" loading=\"lazy\">\n\n\n</div>\n\n\n\n                  <div class=\"devsite-nav-item-title\">\n                    Serverless\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/run\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/run\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cloud run\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud Run\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Fully managed environment for running containerized apps.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/functions\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/functions\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cloud functions\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud Functions\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Platform for creating functions that respond to cloud events.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/appengine\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/appengine\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"app engine\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    App Engine\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Serverless application platform for apps and back ends.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/workflows\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/workflows\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"workflows\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Workflows\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Workflow orchestration for serverless products and API services.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/api-gateway\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/api-gateway\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"api gateway\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    API Gateway\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Develop, deploy, secure, and manage APIs with a fully managed gateway.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n      </div>\n\n      <div class=\"devsite-tabs-dropdown-column\n                  \" column-id=\"tab-2-column-22\" hidden=\"\">\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-menu-heading devsite-nav-title-heading\">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/products/storage\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/products/storage\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"storage\">\n\n\n\n<div class=\"devsite-nav-item-icon-container\" size=\"medium\">\n\n\n    <img class=\"devsite-nav-item-icon\" alt=\"\" src=\"https://www.gstatic.com/cloud/images/navigation/forward.svg\" srcset=\"\" sizes=\"100vw\" loading=\"lazy\">\n\n\n</div>\n\n\n\n                  <div class=\"devsite-nav-item-title\">\n                    Storage\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/storage\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/storage\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cloud storage\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud Storage\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Object storage that’s secure, durable, and scalable.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/backup-disaster-recovery\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/backup-disaster-recovery\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"backup and dr service\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Backup and DR Service\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Service for centralized, application-consistent data protection.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/filestore\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/filestore\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"filestore\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Filestore\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    File storage that is highly scalable and secure.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/persistent-disk\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/persistent-disk\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"persistent disk\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Persistent Disk\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Block storage for virtual machine instances running on Google Cloud.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://firebase.google.com/products/storage/\" track-type=\"nav\" track-metadata-eventdetail=\"https://firebase.google.com/products/storage/\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cloud storage for firebase\" target=\"_blank\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud Storage for Firebase\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Object storage for storing and serving user-generated content.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/local-ssd\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/local-ssd\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"local ssd\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Local SSD\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Block storage that is locally attached for high-performance needs.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/storage-transfer-service\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/storage-transfer-service\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"storage transfer service\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Storage Transfer Service\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Data transfers from online and on-premises sources to Cloud Storage.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/parallelstore\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/parallelstore\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"parallelstore\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Parallelstore\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    High performance, managed parallel file service.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/netapp-volumes\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/netapp-volumes\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"google cloud netapp volumes\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Google Cloud NetApp Volumes\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    File storage service for NFS, SMB, and multi-protocol environments.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n      </div>\n\n      <div class=\"devsite-tabs-dropdown-column\n                  \" column-id=\"tab-2-column-23\" hidden=\"\">\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-menu-heading devsite-nav-title-heading\">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/web3\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/web3\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"web3\">\n\n\n\n<div class=\"devsite-nav-item-icon-container\" size=\"medium\">\n\n\n    <img class=\"devsite-nav-item-icon\" alt=\"\" src=\"https://www.gstatic.com/cloud/images/navigation/forward.svg\" srcset=\"\" sizes=\"100vw\" loading=\"lazy\">\n\n\n</div>\n\n\n\n                  <div class=\"devsite-nav-item-title\">\n                    Web3\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     \">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/blockchain-node-engine\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/blockchain-node-engine\" track-metadata-position=\"nav - products\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"blockchain node engine\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Blockchain Node Engine\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Fully managed node hosting for developing on the blockchain.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n      </div>\n\n  </div>\n</div>\n</tab>\n\n\n\n        <tab dropdown=\"\" dropdown-full=\"\" clickable=\"\">\n\n  <a href=\"https://cloud.google.com/pricing\" track-metadata-eventdetail=\"https://cloud.google.com/pricing\" class=\"devsite-tabs-content gc-analytics-event \" track-type=\"nav\" track-metadata-position=\"nav - pricing\" track-metadata-module=\"primary nav\" data-category=\"Site-Wide Custom Events\" data-label=\"Tab: Pricing\" track-name=\"pricing\">\n  Pricing\n\n  </a>\n\n\n  <a href=\"#\" role=\"button\" aria-haspopup=\"true\" aria-expanded=\"false\" aria-label=\"Dropdown menu for Pricing\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/pricing\" track-metadata-position=\"nav - pricing\" track-metadata-module=\"primary nav\" data-category=\"Site-Wide Custom Events\" data-label=\"Tab: Pricing\" track-name=\"pricing\" class=\"devsite-tabs-dropdown-toggle devsite-icon devsite-icon-arrow-drop-down\"></a>\n\n<div class=\"devsite-tabs-dropdown\" aria-label=\"submenu\" hidden=\"\">\n\n    <button class=\"devsite-tabs-close-button material-icons button-flat gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Close dropdown menu\" aria-label=\"Close dropdown menu\" track-type=\"nav\" track-name=\"close\" track-metadata-eventdetail=\"#\" track-metadata-position=\"nav - pricing\" track-metadata-module=\"tertiary nav\">close</button>\n\n  <div class=\"devsite-tabs-dropdown-content\">\n\n      <div class=\"devsite-tabs-dropdown-column\n                  cloud-nav-menu-pricing cloud-nav-border-right\">\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-type1 cloud-dropdown-secondary cloud-dropdown--cta-container\">\n\n              <li class=\"devsite-nav-title\" role=\"heading\" tooltip=\"\">Save money with our transparent approach to pricing</li>\n\n\n              <li class=\"devsite-nav-description\">Google Cloud's pay-as-you-go pricing offers automatic savings based on monthly usage and discounted rates for prepaid resources. Contact us today to get a quote.</li>\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/contact/?direct=true\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/contact/?direct=true\" track-metadata-position=\"nav - pricing\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"save money with our transparent approach to pricing\" tooltip=\"\" track-name=\"request a quote\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Request a quote\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n      </div>\n\n      <div class=\"devsite-tabs-dropdown-column\n                  \">\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-type2\">\n\n              <li class=\"devsite-nav-title\" role=\"heading\" tooltip=\"\">Pricing overview and tools</li>\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/pricing\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/pricing\" track-metadata-position=\"nav - pricing\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"pricing overview and tools\" tooltip=\"\" track-name=\"google cloud pricing\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Google Cloud pricing\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Pay only for what you use with no lock-in.\n                  </div>\n\n                </a>\n              </li>\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/products/calculator\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/products/calculator\" track-metadata-position=\"nav - pricing\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"pricing overview and tools\" tooltip=\"\" track-name=\"pricing calculator\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Pricing calculator\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Calculate your cloud savings.\n                  </div>\n\n                </a>\n              </li>\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/free\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/free\" track-metadata-position=\"nav - pricing\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"pricing overview and tools\" tooltip=\"\" track-name=\"google cloud free tier\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Google Cloud free tier\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Explore products with free monthly usage.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n      </div>\n\n      <div class=\"devsite-tabs-dropdown-column\n                  cloud-nav-border-right\">\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-type2 cloud-dropdown-noheading\">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/architecture/framework/cost-optimization\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/architecture/framework/cost-optimization\" track-metadata-position=\"nav - pricing\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cost optimization framework\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cost optimization framework\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Get best practices to optimize workload costs.\n                  </div>\n\n                </a>\n              </li>\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/cost-management\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/cost-management\" track-metadata-position=\"nav - pricing\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cost management tools\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cost management tools\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Tools to monitor and control your costs.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n      </div>\n\n      <div class=\"devsite-tabs-dropdown-column\n                  \">\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-type2 cloud-dropdown-links-only\">\n\n              <li class=\"devsite-nav-title\" role=\"heading\" tooltip=\"\">Product-specific Pricing</li>\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/compute/all-pricing\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/compute/all-pricing\" track-metadata-position=\"nav - pricing\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"product-specific pricing\" tooltip=\"\" track-name=\"compute engine\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Compute Engine\n                  </div>\n\n                </a>\n              </li>\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/sql/pricing\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/sql/pricing\" track-metadata-position=\"nav - pricing\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"product-specific pricing\" tooltip=\"\" track-name=\"cloud sql\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud SQL\n                  </div>\n\n                </a>\n              </li>\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/kubernetes-engine/pricing\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/kubernetes-engine/pricing\" track-metadata-position=\"nav - pricing\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"product-specific pricing\" tooltip=\"\" track-name=\"google kubernetes engine\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Google Kubernetes Engine\n                  </div>\n\n                </a>\n              </li>\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/storage/pricing\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/storage/pricing\" track-metadata-position=\"nav - pricing\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"product-specific pricing\" tooltip=\"\" track-name=\"cloud storage\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud Storage\n                  </div>\n\n                </a>\n              </li>\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/bigquery/pricing\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/bigquery/pricing\" track-metadata-position=\"nav - pricing\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"product-specific pricing\" tooltip=\"\" track-name=\"bigquery\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    BigQuery\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-section-top-border cloud-dropdown--cta-container\">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/pricing/list\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/pricing/list\" track-metadata-position=\"nav - pricing\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"product-specific pricing\" tooltip=\"\" track-name=\"see full price list with 100+ products\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    See full price list with 100+ products\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n      </div>\n\n  </div>\n</div>\n</tab>\n\n\n\n        <tab dropdown=\"\" dropdown-full=\"\" clickable=\"\">\n\n  <a href=\"https://cloud.google.com/start\" track-metadata-eventdetail=\"https://cloud.google.com/start\" class=\"devsite-tabs-content gc-analytics-event \" track-type=\"nav\" track-metadata-position=\"nav - resources\" track-metadata-module=\"primary nav\" data-category=\"Site-Wide Custom Events\" data-label=\"Tab: Resources\" track-name=\"resources\">\n  Resources\n\n  </a>\n\n\n  <a href=\"#\" role=\"button\" aria-haspopup=\"true\" aria-expanded=\"false\" aria-label=\"Dropdown menu for Resources\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/start\" track-metadata-position=\"nav - resources\" track-metadata-module=\"primary nav\" data-category=\"Site-Wide Custom Events\" data-label=\"Tab: Resources\" track-name=\"resources\" class=\"devsite-tabs-dropdown-toggle devsite-icon devsite-icon-arrow-drop-down\"></a>\n\n<div class=\"devsite-tabs-dropdown\" aria-label=\"submenu\" hidden=\"\">\n\n    <button class=\"devsite-tabs-close-button material-icons button-flat gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Close dropdown menu\" aria-label=\"Close dropdown menu\" track-type=\"nav\" track-name=\"close\" track-metadata-eventdetail=\"#\" track-metadata-position=\"nav - resources\" track-metadata-module=\"tertiary nav\">close</button>\n\n  <div class=\"devsite-tabs-dropdown-content\">\n\n      <div class=\"devsite-tabs-dropdown-column\n                  \">\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-type2\">\n\n              <li class=\"devsite-nav-title\" role=\"heading\" tooltip=\"\">Learn &amp; build</li>\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/free\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/free\" track-metadata-position=\"nav - resources\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"learn &amp; build\" tooltip=\"\" track-name=\"google cloud free program\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Google Cloud Free Program\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    $300 in free credits and 20+ free products.\n                  </div>\n\n                </a>\n              </li>\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/docs/tutorials?doctype=quickstart\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/docs/tutorials?doctype=quickstart\" track-metadata-position=\"nav - resources\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"learn &amp; build\" tooltip=\"\" track-name=\"quickstarts\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Quickstarts\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Get tutorials and walkthroughs.\n                  </div>\n\n                </a>\n              </li>\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/discover\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/discover\" track-metadata-position=\"nav - resources\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"learn &amp; build\" tooltip=\"\" track-name=\"cloud computing basics\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud computing basics\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Learn more about cloud computing topics.\n                  </div>\n\n                </a>\n              </li>\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/blog\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/blog\" track-metadata-position=\"nav - resources\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"learn &amp; build\" tooltip=\"\" track-name=\"blog\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Blog\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Read our latest product news and stories.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n      </div>\n\n      <div class=\"devsite-tabs-dropdown-column\n                  cloud-nav-border-right\">\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-type2 cloud-dropdown-noheading\">\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/learn\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/learn\" track-metadata-position=\"nav - resources\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"learning hub\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Learning Hub\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Grow your career with role-based learning\n                  </div>\n\n                </a>\n              </li>\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/training\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/training\" track-metadata-position=\"nav - resources\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"training\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Training\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Enroll in on-demand or classroom training.\n                  </div>\n\n                </a>\n              </li>\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/certification\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/certification\" track-metadata-position=\"nav - resources\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"certification\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Certification\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Prepare and register for certifications.\n                  </div>\n\n                </a>\n              </li>\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/architecture\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/architecture\" track-metadata-position=\"nav - resources\" track-metadata-module=\"tertiary nav\" tooltip=\"\" track-name=\"cloud architecture center\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Cloud Architecture Center\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Get reference architectures and best practices.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n      </div>\n\n      <div class=\"devsite-tabs-dropdown-column\n                  cloud-nav-border-right\">\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-type2\">\n\n              <li class=\"devsite-nav-title\" role=\"heading\" tooltip=\"\">Connect</li>\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/innovators\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/innovators\" track-metadata-position=\"nav - resources\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"connect\" tooltip=\"\" track-name=\"innovators\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Innovators\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Join Google Cloud's developer program.\n                  </div>\n\n                </a>\n              </li>\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/developers\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/developers\" track-metadata-position=\"nav - resources\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"connect\" tooltip=\"\" track-name=\"developer center\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Developer Center\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Stay in the know and stay connected.\n                  </div>\n\n                </a>\n              </li>\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/events\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/events\" track-metadata-position=\"nav - resources\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"connect\" tooltip=\"\" track-name=\"events and webinars\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Events and webinars\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Browse upcoming and on demand events.\n                  </div>\n\n                </a>\n              </li>\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/communities\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/communities\" track-metadata-position=\"nav - resources\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"connect\" tooltip=\"\" track-name=\"google cloud community\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Google Cloud Community\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Ask questions, find answers, and connect.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n      </div>\n\n      <div class=\"devsite-tabs-dropdown-column\n                  \">\n\n          <ul class=\"devsite-tabs-dropdown-section\n                     cloud-dropdown-type2\">\n\n              <li class=\"devsite-nav-title\" role=\"heading\" tooltip=\"\">Google Cloud Consulting</li>\n\n\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/consulting\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/consulting\" track-metadata-position=\"nav - resources\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"google cloud consulting\" tooltip=\"\" track-name=\"google cloud consulting\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Google Cloud Consulting\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Work with our experts on cloud projects.\n                  </div>\n\n                </a>\n              </li>\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/marketplace\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/marketplace\" track-metadata-position=\"nav - resources\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"google cloud consulting\" tooltip=\"\" track-name=\"google cloud marketplace\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Google Cloud Marketplace\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Deploy ready-to-go solutions in a few clicks.\n                  </div>\n\n                </a>\n              </li>\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://cloud.google.com/partners\" track-type=\"nav\" track-metadata-eventdetail=\"https://cloud.google.com/partners\" track-metadata-position=\"nav - resources\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"google cloud consulting\" tooltip=\"\" track-name=\"google cloud partners\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Google Cloud partners\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Explore benefits of working with a partner.\n                  </div>\n\n                </a>\n              </li>\n\n              <li class=\"devsite-nav-item\">\n                <a href=\"https://partners.cloud.google.com/\" track-type=\"nav\" track-metadata-eventdetail=\"https://partners.cloud.google.com/\" track-metadata-position=\"nav - resources\" track-metadata-module=\"tertiary nav\" track-metadata-module_headline=\"google cloud consulting\" tooltip=\"\" track-name=\"become a partner\">\n\n                  <div class=\"devsite-nav-item-title\">\n                    Become a partner\n                  </div>\n\n                  <div class=\"devsite-nav-item-description\">\n                    Join the Partner Advantage program.\n                  </div>\n\n                </a>\n              </li>\n\n          </ul>\n\n      </div>\n\n  </div>\n</div>\n</tab>\n\n\n\n        <tab position=\"right\" active=\"\">\n\n  <a href=\"https://cloud.google.com/docs\" track-metadata-eventdetail=\"https://cloud.google.com/docs\" class=\"devsite-tabs-content gc-analytics-event \" track-type=\"nav\" track-metadata-position=\"nav - documentation\" track-metadata-module=\"primary nav\" aria-label=\"Docs, selected\" data-category=\"Site-Wide Custom Events\" data-label=\"Tab: Docs\" track-name=\"documentation\">\n  Docs\n\n  </a>\n\n\n        </tab>\n\n\n\n        <tab position=\"right\">\n\n  <a href=\"https://cloud.google.com/support-hub\" track-metadata-eventdetail=\"https://cloud.google.com/support-hub\" class=\"devsite-tabs-content gc-analytics-event \" track-type=\"nav\" track-metadata-position=\"nav - support\" track-metadata-module=\"primary nav\" data-category=\"Site-Wide Custom Events\" data-label=\"Tab: Support\" track-name=\"support\">\n  Support\n\n  </a>\n\n\n        </tab>\n\n\n  <tab overflow-tab=\"\"><a aria-label=\"Extended Navigation\" href=\"#\" class=\"devsite-icon devsite-icon-arrow-drop-down\">More</a><div class=\"devsite-tabs-overflow-menu\" scrollbars=\"\" hidden=\"\"></div></tab></nav></cloudx-tabs-nav>\n\n\n         </div>\n\n<devsite-search enable-signin=\"\" enable-search=\"\" enable-suggestions=\"\" enable-query-completion=\"\" project-name=\"Cloud Data Fusion Documentation\" tenant-name=\"Google Cloud\">\n<form class=\"devsite-search-form\" action=\"https://cloud.google.com/s/results\" method=\"GET\">\n  <div class=\"devsite-search-container\">\n    <button type=\"button\" search-open=\"\" class=\"devsite-search-button devsite-header-icon-button button-flat material-icons\" aria-label=\"Open search\"></button>\n    <div class=\"devsite-searchbox\">\n      <input aria-activedescendant=\"\" aria-autocomplete=\"list\" aria-label=\"Search\" aria-expanded=\"false\" aria-haspopup=\"listbox\" autocomplete=\"off\" class=\"devsite-search-field devsite-search-query\" name=\"q\" placeholder=\"Search\" role=\"combobox\" type=\"text\" value=\"\" aria-controls=\"devsite-search-popout-container-id-1\">\n        <div class=\"devsite-search-image material-icons\" aria-hidden=\"true\">\n\n        </div>\n    </div>\n  </div>\n<div class=\"devsite-popout\" id=\"devsite-search-popout-container-id-1\"><div class=\"devsite-popout-result devsite-suggest-results-container\" devsite-hide=\"\"></div></div></form>\n<button type=\"button\" search-close=\"\" class=\"devsite-search-button devsite-header-icon-button button-flat material-icons\" aria-label=\"Close search\"></button>\n</devsite-search>\n\n      <div class=\"devsite-search-background\" style=\"opacity: 1;\"></div></div>\n\n\n        <devsite-shell-activate-button><button class=\"gc-analytics-event activate-cloudshell-button\" data-category=\"Site-Wide Custom Events\" data-label=\"Activate Cloud Shell\" aria-label=\"Activate Cloud Shell\" data-tooltip=\"Activate Cloud Shell\" track-type=\"cloudShell\" track-name=\"activateCloudShell\"><svg width=\"22\" height=\"18\" viewBox=\"0 0 22 18\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M20 0H2C0.9 0 0 0.9 0 2V16C0 17.1 0.9 18 2 18H20C21.1 18 22 17.1 22 16V2C22 0.9 21.1 0 20 0ZM20 16.01H2V1.99H20V16.01Z\"></path><path d=\"M6.87574 6H4.72426C4.45699 6 4.32314 6.32314 4.51213 6.51213L7.78787 9.78787C7.90503 9.90503 7.90503 10.095 7.78787 10.2121L4.51213 13.4879C4.32314 13.6769 4.45699 14 4.72426 14H6.87574C6.9553 14 7.03161 13.9684 7.08787 13.9121L10.7879 10.2121C10.905 10.095 10.905 9.90503 10.7879 9.78787L7.08787 6.08787C7.03161 6.03161 6.9553 6 6.87574 6Z\"></path><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M4.51213 6.51213C4.32314 6.32314 4.45699 6 4.72426 6H6.87574C6.9553 6 7.03161 6.03161 7.08787 6.08787L10.7879 9.78787C10.905 9.90503 10.905 10.095 10.7879 10.2121L7.08787 13.9121C7.03161 13.9684 6.9553 14 6.87574 14H4.72426C4.45699 14 4.32314 13.6769 4.51213 13.4879L7.78787 10.2121C7.90503 10.095 7.90503 9.90503 7.78787 9.78787L4.51213 6.51213ZM6.41421 7L8.49497 9.08076C9.00266 9.58844 9.00266 10.4116 8.49497 10.9192L6.41421 13H6.58579L9.58579 10L6.58579 7H6.41421Z\"></path><path d=\"M11 13.7V12.3C11 12.1343 11.1343 12 11.3 12H17.7C17.8657 12 18 12.1343 18 12.3V13.7C18 13.8657 17.8657 14 17.7 14H11.3C11.1343 14 11 13.8657 11 13.7Z\"></path><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M11 12.3V13.7C11 13.8657 11.1343 14 11.3 14H17.7C17.8657 14 18 13.8657 18 13.7V12.3C18 12.1343 17.8657 12 17.7 12H11.3C11.1343 12 11 12.1343 11 12.3Z\"></path></svg></button></devsite-shell-activate-button>\n\n\n\n        <cloudx-additional-tabs>\n\n          <tab active=\"\">\n\n  <a href=\"https://cloud.google.com/docs\" track-metadata-eventdetail=\"https://cloud.google.com/docs\" class=\"devsite-tabs-content gc-analytics-event \" track-type=\"nav\" track-metadata-position=\"nav - documentation\" track-metadata-module=\"primary nav\" aria-label=\"Docs, selected\" data-category=\"Site-Wide Custom Events\" data-label=\"Tab: Docs\" track-name=\"documentation\">\n  Docs\n\n  </a>\n\n\n          </tab>\n\n          <tab>\n\n  <a href=\"https://cloud.google.com/support-hub\" track-metadata-eventdetail=\"https://cloud.google.com/support-hub\" class=\"devsite-tabs-content gc-analytics-event \" track-type=\"nav\" track-metadata-position=\"nav - support\" track-metadata-module=\"primary nav\" data-category=\"Site-Wide Custom Events\" data-label=\"Tab: Support\" track-name=\"support\">\n  Support\n\n  </a>\n\n\n          </tab>\n\n        </cloudx-additional-tabs>\n\n\n\n\n\n<devsite-language-selector aria-label=\"Select your language preference.\">\n<ul role=\"presentation\">\n\n\n  <li role=\"presentation\">\n    <a role=\"menuitem\" lang=\"en\" aria-current=\"true\" href=\"https://cloud.google.com/data-fusion/docs/version-support-policy\">English</a>\n  </li>\n\n  <li role=\"presentation\">\n    <a role=\"menuitem\" lang=\"de\" href=\"https://cloud.google.com/data-fusion/docs/version-support-policy?hl=de\">Deutsch</a>\n  </li>\n\n  <li role=\"presentation\">\n    <a role=\"menuitem\" lang=\"es-419\" href=\"https://cloud.google.com/data-fusion/docs/version-support-policy?hl=es-419\">Español – América Latina</a>\n  </li>\n\n  <li role=\"presentation\">\n    <a role=\"menuitem\" lang=\"fr\" href=\"https://cloud.google.com/data-fusion/docs/version-support-policy?hl=fr\">Français</a>\n  </li>\n\n  <li role=\"presentation\">\n    <a role=\"menuitem\" lang=\"id\" href=\"https://cloud.google.com/data-fusion/docs/version-support-policy?hl=id\">Indonesia</a>\n  </li>\n\n  <li role=\"presentation\">\n    <a role=\"menuitem\" lang=\"it\" href=\"https://cloud.google.com/data-fusion/docs/version-support-policy?hl=it\">Italiano</a>\n  </li>\n\n  <li role=\"presentation\">\n    <a role=\"menuitem\" lang=\"pt-br\" href=\"https://cloud.google.com/data-fusion/docs/version-support-policy?hl=pt-br\">Português – Brasil</a>\n  </li>\n\n  <li role=\"presentation\">\n    <a role=\"menuitem\" lang=\"zh-cn\" href=\"https://cloud.google.com/data-fusion/docs/version-support-policy?hl=zh-cn\">中文 – 简体</a>\n  </li>\n\n  <li role=\"presentation\">\n    <a role=\"menuitem\" lang=\"ja\" href=\"https://cloud.google.com/data-fusion/docs/version-support-policy?hl=ja\">日本語</a>\n  </li>\n\n  <li role=\"presentation\">\n    <a role=\"menuitem\" lang=\"ko\" href=\"https://cloud.google.com/data-fusion/docs/version-support-policy?hl=ko\">한국어</a>\n  </li>\n\n</ul>\n</devsite-language-selector>\n\n\n\n\n<a class=\"devsite-header-link devsite-top-button button gc-analytics-event\" href=\"//console.cloud.google.com/\" data-category=\"Site-Wide Custom Events\" data-label=\"Site header link\" track-type=\"globalNav\" track-name=\"console\" track-metadata-eventdetail=\"nav\" track-metadata-position=\"nav\" referrerpolicy=\"no-referrer-when-downgrade\">\n  Console\n</a>\n\n\n\n\n\n\n        <devsite-user signed-in=\"\" enable-profiles=\"\" fp-auth=\"\" id=\"devsite-user\" sign-in-url=\"https://cloud.google.com/_d/signin?continue=https%3A%2F%2Fcloud.google.com%2Fdata-fusion%2Fdocs%2Fversion-support-policy%23support_timelines&amp;prompt=select_account\" sign-out-url=\"https://cloud.google.com/_d/signout?continue=https%3A%2F%2Fcloud.google.com%2Fdata-fusion%2Fdocs%2Fversion-support-policy%23support_timelines\" url=\"https://cloud.google.com/_d/signin?continue=https%3A%2F%2Fcloud.google.com%2Fdata-fusion%2Fdocs%2Fversion-support-policy%23support_timelines&amp;prompt=select_account\"><div class=\"ogb-wrapper ogb-so\"><div class=\"devsite-devprofile-wrapper show\"><devsite-feature-tooltip ack-key=\"AckViewSavedPagesPopoutDismiss\" id=\"devsite-view-saved-pages\" close-button-href=\"\" close-button-text=\"View\" dismiss-button=\"\" managed=\"\" ready=\"\" current-step=\"0\" style=\"--devsite-popout-offset-x: 32px;\"><button class=\"devsite-devprofile-button\" aria-controls=\"devsite-devprofile-popout\" aria-expanded=\"false\" aria-haspopup=\"true\" aria-label=\"Open Google Developer Profile\" data-tooltip=\"Google Developer Profile\"><svg width=\"4\" height=\"16\" viewBox=\"0 0 4 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M2 4C3.1 4 4 3.1 4 2C4 0.9 3.1 0 2 0C0.9 0 0 0.9 0 2C0 3.1 0.9 4 2 4ZM2 6C0.9 6 0 6.9 0 8C0 9.1 0.9 10 2 10C3.1 10 4 9.1 4 8C4 6.9 3.1 6 2 6ZM0 14C0 12.9 0.9 12 2 12C3.1 12 4 12.9 4 14C4 15.1 3.1 16 2 16C0.9 16 0 15.1 0 14Z\" fill=\"#5F6368\"></path></svg></button><span slot=\"popout-heading\">Google Developer Profile</span><span slot=\"popout-contents\">View your saved pages and finish your Google Developer Profile setup here.</span></devsite-feature-tooltip><div id=\"devsite-devprofile-popout\" class=\"devsite-devprofile-popout\" role=\"menu\" aria-label=\"Google Developer Profile\"></div></div><div class=\"gb_Pa gb_ld gb_gb gb_vd\" id=\"gb\"><div class=\"gb_Bd gb_eb gb_qd\" ng-non-bindable=\"\" data-ogsr-up=\"\" style=\"padding:0;height:auto;display:block\"><div class=\"gb_Ud\" style=\"display:block\"><div class=\"gb_6c\"></div><div class=\"gb_b gb_w gb_3f gb_J\"><div class=\"gb_f gb_db gb_3f gb_J\"><a class=\"gb_d gb_Fa gb_J\" aria-label=\"Google Account: Poornima -\n(ppoormina@google.com)\" href=\"https://accounts.google.com/SignOutOptions?hl=en&amp;continue=https%3A%2F%2Fcloud.google.com%2Fdata-fusion%2Fdocs%2Fversion-support-policy%23support_timelines&amp;ec=GBRAywI\" tabindex=\"0\" role=\"button\"><img class=\"gb_n gbii\" src=\"https://lh3.googleusercontent.com/ogw/AF2bZygA6rX93izYYVxb2EZ-FbmvgjZz2UzNEoHjOAQ1=s32-c-mo\" srcset=\"https://lh3.googleusercontent.com/ogw/AF2bZygA6rX93izYYVxb2EZ-FbmvgjZz2UzNEoHjOAQ1=s32-c-mo 1x, https://lh3.googleusercontent.com/ogw/AF2bZygA6rX93izYYVxb2EZ-FbmvgjZz2UzNEoHjOAQ1=s64-c-mo 2x \" alt=\"\" aria-hidden=\"true\" data-noaft=\"\"></a></div></div></div><div style=\"overflow: hidden; position: absolute; top: 0px; visibility: hidden; width: 436px; z-index: 991; height: 0px; margin-top: 57px; right: 0px; margin-right: 4px;\"></div></div></div></div></devsite-user>\n\n\n    </div>\n  </div>\n</div>\n\n\n\n<div class=\"devsite-collapsible-section\n  \" style=\"transform: translate3d(0px, 0px, 0px);\">\n  <div class=\"devsite-header-background\">\n\n\n        <div class=\"devsite-product-id-row\" hidden=\"\">\n          <div class=\"devsite-product-description-row\">\n\n\n          </div>\n\n        </div>\n\n\n\n\n      <div class=\"devsite-doc-set-nav-row\">\n\n\n            <ul class=\"devsite-breadcrumb-list\">\n\n<li class=\"devsite-breadcrumb-item\n           \">\n\n\n\n\n<a href=\"https://cloud.google.com/data-fusion\" class=\"devsite-breadcrumb-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Lower Header\" data-value=\"1\" track-type=\"globalNav\" track-name=\"breadcrumb\" track-metadata-position=\"1\" track-metadata-eventdetail=\"Cloud Data Fusion\">\n\n      Cloud Data Fusion\n\n</a>\n\n\n</li>\n\n</ul>\n\n\n\n\n\n<cloudx-tabs-nav class=\"lower-tabs\" connected=\"\">\n\n\n\n<nav class=\"devsite-tabs-wrapper\" aria-label=\"Lower tabs\" style=\"--scroll-animation-duration: 250ms; --scroll-offset: 0px;\">\n\n\n        <tab>\n\n  <a href=\"https://cloud.google.com/data-fusion/docs\" track-metadata-eventdetail=\"https://cloud.google.com/data-fusion/docs\" class=\"devsite-tabs-content gc-analytics-event \" track-type=\"nav\" track-metadata-position=\"nav - overview\" track-metadata-module=\"primary nav\" data-category=\"Site-Wide Custom Events\" data-label=\"Tab: Overview\" track-name=\"overview\">\n  Overview\n\n  </a>\n\n\n        </tab>\n\n\n\n        <tab>\n\n  <a href=\"https://cloud.google.com/data-fusion/docs/create-data-pipeline\" track-metadata-eventdetail=\"https://cloud.google.com/data-fusion/docs/create-data-pipeline\" class=\"devsite-tabs-content gc-analytics-event \" track-type=\"nav\" track-metadata-position=\"nav - guides\" track-metadata-module=\"primary nav\" data-category=\"Site-Wide Custom Events\" data-label=\"Tab: Guides\" track-name=\"guides\">\n  Guides\n\n  </a>\n\n\n        </tab>\n\n\n\n        <tab>\n\n  <a href=\"https://cloud.google.com/data-fusion/docs/reference\" track-metadata-eventdetail=\"https://cloud.google.com/data-fusion/docs/reference\" class=\"devsite-tabs-content gc-analytics-event \" track-type=\"nav\" track-metadata-position=\"nav - reference\" track-metadata-module=\"primary nav\" data-category=\"Site-Wide Custom Events\" data-label=\"Tab: Reference\" track-name=\"reference\">\n  Reference\n\n  </a>\n\n\n        </tab>\n\n\n\n        <tab active=\"\">\n\n  <a href=\"https://cloud.google.com/data-fusion/docs/resources\" track-metadata-eventdetail=\"https://cloud.google.com/data-fusion/docs/resources\" class=\"devsite-tabs-content gc-analytics-event \" track-type=\"nav\" track-metadata-position=\"nav - resources\" track-metadata-module=\"primary nav\" aria-label=\"Resources, selected\" data-category=\"Site-Wide Custom Events\" data-label=\"Tab: Resources\" track-name=\"resources\">\n  Resources\n\n  </a>\n\n\n        </tab>\n\n\n  <tab overflow-tab=\"\"><a aria-label=\"More Options\" href=\"#\" class=\"devsite-icon devsite-icon-arrow-drop-down\">More</a><div class=\"devsite-tabs-overflow-menu\" scrollbars=\"\" hidden=\"\"></div></tab></nav></cloudx-tabs-nav>\n\n\n\n          <div class=\"devsite-product-button-row\">\n\n\n\n<a href=\"https://cloud.google.com/contact\" class=\"cta-button-secondary button\n    \" track-metadata-position=\"nav\" data-overflow-container=\"left\" track-metadata-eventdetail=\"nav\" track-type=\"contact\" track-name=\"sales\" data-overflow-wrapper=\"tab\" data-overflow=\"devsite-tabs-wrapper\">Contact Us</a>\n\n\n<a href=\"//console.cloud.google.com/freetrial\" class=\"cloud-free-trial-button cta-button-primary button-primary button cloud-button cloud-button--primary\n    \" track-metadata-position=\"nav\" referrerpolicy=\"no-referrer-when-downgrade\" track-metadata-eventdetail=\"nav\" data-overflow-class=\"devsite-header-link devsite-top-button button cloud-free-trial-button cloud-free-trial-enabled cloud-button cloud-button--primary\" data-overflow=\"devsite-top-logo-row\" track-name=\"gcpCta\" data-overflow-container=\"right\" track-type=\"freeTrial\">Start free</a>\n\n</div>\n\n      </div>\n\n  </div>\n</div>\n\n</div>\n\n\n\n\n\n\n</devsite-header>\n    <div class=\"devsite-book-nav-bg\" fixed=\"\"></div><devsite-book-nav scrollbars=\"\" fixed=\"\" style=\"top: 112.8px; max-height: 617.2px;\">\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<div class=\"devsite-book-nav-filter\n          \">\n<span class=\"filter-list-icon material-icons\" aria-hidden=\"true\"></span>\n<input type=\"text\" placeholder=\"Filter\" aria-label=\"Type to filter\" role=\"searchbox\">\n\n<span class=\"filter-clear-button hidden\" data-title=\"Clear filter\" aria-label=\"Clear filter\" role=\"button\" tabindex=\"0\"></span>\n</div>\n\n<nav class=\"devsite-book-nav devsite-nav nocontent\" aria-label=\"Side menu\">\n<div class=\"devsite-mobile-header\">\n  <button type=\"button\" id=\"devsite-close-nav\" class=\"devsite-header-icon-button button-flat material-icons gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Close navigation\" aria-label=\"Close navigation\">\n  </button>\n  <div class=\"devsite-product-name-wrapper\">\n\n<a href=\"/\" class=\"devsite-site-logo-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Site logo\" track-type=\"globalNav\" track-name=\"googleCloud\" track-metadata-position=\"nav\" track-metadata-eventdetail=\"nav\">\n\n\n  <img src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/images/cloud-logo.svg\" class=\"devsite-site-logo\" alt=\"Google Cloud\">\n\n\n</a>\n\n\n\n    <span class=\"devsite-product-name\">\n\n\n      <ul class=\"devsite-breadcrumb-list\">\n\n<li class=\"devsite-breadcrumb-item\n           devsite-has-google-wordmark\">\n\n\n\n\n\n\n</li>\n\n</ul>\n    </span>\n\n\n</div>\n</div>\n\n<div class=\"devsite-book-nav-wrapper\">\n  <div class=\"devsite-mobile-nav-top\">\n\n      <ul class=\"devsite-nav-list\">\n\n          <li class=\"devsite-nav-item\">\n\n\n<a href=\"/why-google-cloud\" class=\"devsite-nav-title gc-analytics-event\n            devsite-nav-has-children\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Tab: Overview\" track-name=\"overview\" track-type=\"globalNav\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Overview\n </span>\n\n  <span class=\"devsite-nav-icon material-icons\" data-icon=\"forward\">\n  </span>\n\n\n</a>\n\n\n\n  <ul class=\"devsite-nav-responsive-tabs devsite-nav-has-menu\n             \">\n\n<li class=\"devsite-nav-item\">\n\n\n<span class=\"devsite-nav-title\" tooltip=\"\" data-category=\"Site-Wide Custom Events\" data-label=\"Tab: Overview\" track-name=\"overview\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\" menu=\"Overview\">\n    More\n </span>\n\n  <span class=\"devsite-nav-icon material-icons\" data-icon=\"forward\" menu=\"Overview\">\n  </span>\n\n\n</span>\n\n\n</li>\n\n  </ul>\n\n\n          </li>\n\n          <li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions\" class=\"devsite-nav-title gc-analytics-event\n            devsite-nav-has-children\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Tab: Solutions\" track-name=\"solutions\" track-type=\"globalNav\" track-metadata-position=\"nav\" track-metadata-eventdetail=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Solutions\n </span>\n\n  <span class=\"devsite-nav-icon material-icons\" data-icon=\"forward\">\n  </span>\n\n\n</a>\n\n\n\n  <ul class=\"devsite-nav-responsive-tabs devsite-nav-has-menu\n             \">\n\n<li class=\"devsite-nav-item\">\n\n\n<span class=\"devsite-nav-title\" tooltip=\"\" data-category=\"Site-Wide Custom Events\" data-label=\"Tab: Solutions\" track-name=\"solutions\" track-type=\"globalNav\" track-metadata-position=\"nav\" track-metadata-eventdetail=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\" menu=\"Solutions\">\n    More\n </span>\n\n  <span class=\"devsite-nav-icon material-icons\" data-icon=\"forward\" menu=\"Solutions\">\n  </span>\n\n\n</span>\n\n\n</li>\n\n  </ul>\n\n\n          </li>\n\n          <li class=\"devsite-nav-item\">\n\n\n<a href=\"/products\" class=\"devsite-nav-title gc-analytics-event\n            devsite-nav-has-children\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Tab: Products\" track-name=\"products\" track-type=\"globalNav\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Products\n </span>\n\n  <span class=\"devsite-nav-icon material-icons\" data-icon=\"forward\">\n  </span>\n\n\n</a>\n\n\n\n  <ul class=\"devsite-nav-responsive-tabs devsite-nav-has-menu\n             \">\n\n<li class=\"devsite-nav-item\">\n\n\n<span class=\"devsite-nav-title\" tooltip=\"\" data-category=\"Site-Wide Custom Events\" data-label=\"Tab: Products\" track-name=\"products\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\" menu=\"Products\">\n    More\n </span>\n\n  <span class=\"devsite-nav-icon material-icons\" data-icon=\"forward\" menu=\"Products\">\n  </span>\n\n\n</span>\n\n\n</li>\n\n  </ul>\n\n\n          </li>\n\n          <li class=\"devsite-nav-item\">\n\n\n<a href=\"/pricing\" class=\"devsite-nav-title gc-analytics-event\n            devsite-nav-has-children\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Tab: Pricing\" track-name=\"pricing\" track-type=\"globalNav\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Pricing\n </span>\n\n  <span class=\"devsite-nav-icon material-icons\" data-icon=\"forward\">\n  </span>\n\n\n</a>\n\n\n\n  <ul class=\"devsite-nav-responsive-tabs devsite-nav-has-menu\n             \">\n\n<li class=\"devsite-nav-item\">\n\n\n<span class=\"devsite-nav-title\" tooltip=\"\" data-category=\"Site-Wide Custom Events\" data-label=\"Tab: Pricing\" track-name=\"pricing\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\" menu=\"Pricing\">\n    More\n </span>\n\n  <span class=\"devsite-nav-icon material-icons\" data-icon=\"forward\" menu=\"Pricing\">\n  </span>\n\n\n</span>\n\n\n</li>\n\n  </ul>\n\n\n          </li>\n\n          <li class=\"devsite-nav-item\">\n\n\n<a href=\"/start\" class=\"devsite-nav-title gc-analytics-event\n            devsite-nav-has-children\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Tab: Resources\" track-name=\"resources\" track-type=\"globalNav\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Resources\n </span>\n\n  <span class=\"devsite-nav-icon material-icons\" data-icon=\"forward\">\n  </span>\n\n\n</a>\n\n\n\n  <ul class=\"devsite-nav-responsive-tabs devsite-nav-has-menu\n             \">\n\n<li class=\"devsite-nav-item\">\n\n\n<span class=\"devsite-nav-title\" tooltip=\"\" data-category=\"Site-Wide Custom Events\" data-label=\"Tab: Resources\" track-name=\"resources\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\" menu=\"Resources\">\n    More\n </span>\n\n  <span class=\"devsite-nav-icon material-icons\" data-icon=\"forward\" menu=\"Resources\">\n  </span>\n\n\n</span>\n\n\n</li>\n\n  </ul>\n\n\n          </li>\n\n          <li class=\"devsite-nav-item\">\n\n\n<a href=\"/docs\" class=\"devsite-nav-title gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Tab: Docs\" track-name=\"documentation\" track-type=\"globalNav\" track-metadata-position=\"nav\" track-metadata-eventdetail=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Docs\n </span>\n\n\n</a>\n\n\n\n\n              <ul class=\"devsite-nav-responsive-tabs\">\n\n\n\n\n                  <li class=\"devsite-nav-item\">\n\n\n<a href=\"/data-fusion/docs\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Tab: Overview\" track-name=\"overview\" track-type=\"globalNav\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Overview\n </span>\n\n\n</a>\n\n\n\n                  </li>\n\n\n\n\n                  <li class=\"devsite-nav-item\">\n\n\n<a href=\"/data-fusion/docs/create-data-pipeline\" class=\"devsite-nav-title gc-analytics-event\n            devsite-nav-has-children\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Tab: Guides\" track-name=\"guides\" track-type=\"globalNav\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Guides\n </span>\n\n  <span class=\"devsite-nav-icon material-icons\" data-icon=\"forward\">\n  </span>\n\n\n</a>\n\n\n\n                  </li>\n\n\n\n\n                  <li class=\"devsite-nav-item\">\n\n\n<a href=\"/data-fusion/docs/reference\" class=\"devsite-nav-title gc-analytics-event\n            devsite-nav-has-children\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Tab: Reference\" track-name=\"reference\" track-type=\"globalNav\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Reference\n </span>\n\n  <span class=\"devsite-nav-icon material-icons\" data-icon=\"forward\">\n  </span>\n\n\n</a>\n\n\n\n                  </li>\n\n\n\n\n                  <li class=\"devsite-nav-item\">\n\n\n<a href=\"/data-fusion/docs/resources\" class=\"devsite-nav-title gc-analytics-event devsite-nav-has-children\" data-category=\"Site-Wide Custom Events\" data-label=\"Tab: Resources\" track-name=\"resources\" track-type=\"globalNav\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\" menu=\"_book\">\n    Resources\n </span>\n\n  <span class=\"devsite-nav-icon material-icons\" data-icon=\"forward\" menu=\"_book\">\n  </span>\n\n\n</a>\n\n\n\n                  </li>\n\n              </ul>\n\n          </li>\n\n          <li class=\"devsite-nav-item\">\n\n\n<a href=\"/support-hub\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Tab: Support\" track-name=\"support\" track-type=\"globalNav\" track-metadata-position=\"nav\" track-metadata-eventdetail=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Support\n </span>\n\n\n</a>\n\n\n\n\n          </li>\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"//console.cloud.google.com/\" class=\"devsite-nav-title gc-analytics-event\n\n            \" track-type=\"globalNav\" track-name=\"console\" track-metadata-eventdetail=\"nav\" track-metadata-position=\"nav\" referrerpolicy=\"no-referrer-when-downgrade\" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Console\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Console\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/contact\" class=\"cta-button-secondary button\" track-metadata-position=\"nav\" data-overflow-container=\"left\" track-metadata-eventdetail=\"nav\" track-type=\"contact\" track-name=\"sales\" data-overflow-wrapper=\"tab\" data-overflow=\"devsite-tabs-wrapper\" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Contact Us\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Contact Us\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"//console.cloud.google.com/freetrial\" class=\"cloud-free-trial-button cta-button-primary button-primary button cloud-button cloud-button--primary\" track-metadata-position=\"nav\" referrerpolicy=\"no-referrer-when-downgrade\" track-metadata-eventdetail=\"nav\" data-overflow-class=\"devsite-header-link devsite-top-button button cloud-free-trial-button cloud-free-trial-enabled cloud-button cloud-button--primary\" data-overflow=\"devsite-top-logo-row\" track-name=\"gcpCta\" data-overflow-container=\"right\" track-type=\"freeTrial\" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Start free\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Start free\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n      </ul>\n\n  </div>\n\n    <div class=\"devsite-mobile-nav-bottom\">\n\n\n        <ul class=\"devsite-nav-list\" menu=\"_book\">\n          <li class=\"devsite-nav-item\n         devsite-nav-heading\"><div class=\"devsite-nav-title devsite-nav-title-no-path\">\n      <span class=\"devsite-nav-text\" tooltip=\"\">Cloud Data Fusion</span>\n    </div></li>\n\n<li class=\"devsite-nav-item\"><a href=\"/data-fusion/pricing\" class=\"devsite-nav-title gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Book nav link, pathname: /data-fusion/pricing\" track-type=\"bookNav\" track-name=\"click\" track-metadata-eventdetail=\"/data-fusion/pricing\"><span class=\"devsite-nav-text\" tooltip=\"\">Pricing</span></a></li>\n\n<li class=\"devsite-nav-item\"><a href=\"/data-fusion/quotas\" class=\"devsite-nav-title gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Book nav link, pathname: /data-fusion/quotas\" track-type=\"bookNav\" track-name=\"click\" track-metadata-eventdetail=\"/data-fusion/quotas\"><span class=\"devsite-nav-text\" tooltip=\"\">Quotas and limits</span></a></li>\n\n<li class=\"devsite-nav-item\"><a href=\"/data-fusion/docs/release-notes\" class=\"devsite-nav-title gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Book nav link, pathname: /data-fusion/docs/release-notes\" track-type=\"bookNav\" track-name=\"click\" track-metadata-eventdetail=\"/data-fusion/docs/release-notes\"><span class=\"devsite-nav-text\" tooltip=\"\">Release notes</span></a></li>\n\n<li class=\"devsite-nav-item\"><a href=\"/data-fusion/docs/version-support-policy\" class=\"devsite-nav-title gc-analytics-event devsite-nav-active\" data-category=\"Site-Wide Custom Events\" data-label=\"Book nav link, pathname: /data-fusion/docs/version-support-policy\" track-type=\"bookNav\" track-name=\"click\" track-metadata-eventdetail=\"/data-fusion/docs/version-support-policy\"><span class=\"devsite-nav-text\" tooltip=\"\">Version support policy</span></a></li>\n\n<li class=\"devsite-nav-item\"><a href=\"/data-fusion/docs/resources/faq\" class=\"devsite-nav-title gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Book nav link, pathname: /data-fusion/docs/resources/faq\" track-type=\"bookNav\" track-name=\"click\" track-metadata-eventdetail=\"/data-fusion/docs/resources/faq\"><span class=\"devsite-nav-text\" tooltip=\"\">Frequently asked questions</span></a></li>\n        </ul>\n\n\n\n\n\n    <ul class=\"devsite-nav-list\" menu=\"Overview\" aria-label=\"Side menu\" hidden=\"\">\n\n\n\n\n<li class=\"devsite-nav-item devsite-nav-heading\">\n\n\n<span class=\"devsite-nav-title\" tooltip=\"\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Accelerate your digital transformation\n </span>\n\n\n</span>\n\n\n</li>\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/why-google-cloud\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Learn more\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Learn more\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n\n<li class=\"devsite-nav-item devsite-nav-heading\">\n\n\n<span class=\"devsite-nav-title\" tooltip=\"\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Key benefits\n </span>\n\n\n</span>\n\n\n</li>\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/why-google-cloud\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Why Google Cloud\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Why Google Cloud\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/ai\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: AI and ML\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    AI and ML\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/multicloud\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Multicloud\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Multicloud\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/infrastructure\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Global infrastructure\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Global infrastructure\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/data-cloud\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Data Cloud\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Data Cloud\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/open-cloud\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Open cloud\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Open cloud\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/security\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Security\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Security\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"https://workspace.google.com/\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Productivity and collaboration\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Productivity and collaboration\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n\n<li class=\"devsite-nav-item devsite-nav-heading\">\n\n\n<span class=\"devsite-nav-title\" tooltip=\"\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Reports and insights\n </span>\n\n\n</span>\n\n\n</li>\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/executive-insights\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Executive insights\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Executive insights\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/analyst-reports\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Analyst reports\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Analyst reports\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/whitepapers\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Whitepapers\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Whitepapers\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/customers\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Customer stories\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Customer stories\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n    </ul>\n\n\n\n\n    <ul class=\"devsite-nav-list\" menu=\"Solutions\" aria-label=\"Side menu\" hidden=\"\">\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions#industry-solutions\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Industry Solutions\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Industry Solutions\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/retail\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Retail\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Retail\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/cpg\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Consumer Packaged Goods\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Consumer Packaged Goods\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/financial-services\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Financial Services\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Financial Services\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/healthcare-life-sciences\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Healthcare and Life Sciences\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Healthcare and Life Sciences\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/media-entertainment\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Media and Entertainment\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Media and Entertainment\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/telecommunications\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Telecommunications\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Telecommunications\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/games\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Games\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Games\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/manufacturing\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Manufacturing\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Manufacturing\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/supply-chain-logistics\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Supply Chain and Logistics\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Supply Chain and Logistics\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/government\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Government\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Government\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/education\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Education\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Education\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions#industry-solutions\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: See all industry solutions\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    See all industry solutions\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: See all solutions\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    See all solutions\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/camp\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Application Modernization\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Application Modernization\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/camp\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: CAMP\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    CAMP\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/modernize-traditional-applications\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Modernize Traditional Applications\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Modernize Traditional Applications\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/migrate-from-paas\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Migrate from PaaS&amp;#58; Cloud Foundry, Openshift\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Migrate from PaaS&amp;#58; Cloud Foundry, Openshift\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/mainframe-modernization\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Migrate from Mainframe\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Migrate from Mainframe\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/software-delivery\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Modernize Software Delivery\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Modernize Software Delivery\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/devops\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: DevOps Best Practices\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    DevOps Best Practices\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/sre\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: SRE Principles\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    SRE Principles\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/app-modernization/day-2-operations-for-gke\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Day 2 Operations for GKE\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Day 2 Operations for GKE\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/finops-optimize-gke\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: FinOps and Optimization of GKE\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    FinOps and Optimization of GKE\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/modernize-with-edge\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Run Applications at the Edge\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Run Applications at the Edge\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/architect-multicloud\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Architect for Multicloud\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Architect for Multicloud\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/serverless\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Go Serverless\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Go Serverless\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/ai\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Artificial Intelligence\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Artificial Intelligence\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/contact-center\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Contact Center AI\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Contact Center AI\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/document-ai\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Document AI\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Document AI\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/retail-product-discovery\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Product Discovery\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Product Discovery\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/apis-and-applications\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: APIs and Applications\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    APIs and Applications\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/new-channels-using-apis\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: New Business Channels Using APIs\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    New Business Channels Using APIs\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/unlocking-legacy-applications\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Unlocking Legacy Applications Using APIs\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Unlocking Legacy Applications Using APIs\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/open-banking-apix\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Open Banking APIx\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Open Banking APIx\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/databases\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Databases\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Databases\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/database-migration\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Database Migration\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Database Migration\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/database-modernization\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Database Modernization\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Database Modernization\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/databases/games\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Databases for Games\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Databases for Games\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/products/databases\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Google Cloud Databases\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Google Cloud Databases\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/migrate-oracle-workloads\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Migrate Oracle workloads to Google Cloud\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Migrate Oracle workloads to Google Cloud\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/open-source-databases\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Open Source Databases\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Open Source Databases\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/sql-server\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: SQL Server on Google Cloud\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    SQL Server on Google Cloud\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/data-cloud\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Data Cloud\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Data Cloud\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/databases\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Databases Solutions\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Databases Solutions\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/smart-analytics\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Smart Analytics Solutions\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Smart Analytics Solutions\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/ai\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: AI Solutions\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    AI Solutions\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/data-cloud-isvs\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Data Cloud for ISVs\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Data Cloud for ISVs\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/data-cloud-alliance\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Data Cloud Alliance\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Data Cloud Alliance\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n\n<li class=\"devsite-nav-item devsite-nav-heading\">\n\n\n<span class=\"devsite-nav-title\" tooltip=\"\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Digital Transformation\n </span>\n\n\n</span>\n\n\n</li>\n\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/business-innovation\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Digital Innovation\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Digital Innovation\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/operational-efficiency\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Operational Efficiency\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Operational Efficiency\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/covid19\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: COVID-19 Solutions\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    COVID-19 Solutions\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/covid19-healthcare\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: COVID-19 Solutions for the Healthcare Industry\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    COVID-19 Solutions for the Healthcare Industry\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/infrastructure-modernization\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Infrastructure Modernization\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Infrastructure Modernization\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/application-migration\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Application Migration\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Application Migration\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/sap\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: SAP on Google Cloud\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    SAP on Google Cloud\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/hpc\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: High Performance Computing\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    High Performance Computing\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/windows\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Windows on Google Cloud\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Windows on Google Cloud\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/data-center-migration\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Data Center Migration\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Data Center Migration\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/active-assist\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Active Assist\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Active Assist\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/virtual-desktops\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Virtual Desktops\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Virtual Desktops\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/cloud-migration-program\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Rapid Migration Program (RaMP)\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Rapid Migration Program (RaMP)\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/backup-dr\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Backup and Disaster Recovery\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Backup and Disaster Recovery\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/redhat\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Red Hat on Google Cloud\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Red Hat on Google Cloud\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"https://workspace.google.com/enterprise/\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Productivity and Collaboration\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Productivity and Collaboration\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"https://workspace.google.com/solutions/enterprise/?enterprise-benefits_activeEl=connect\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Google Workspace\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Google Workspace\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"https://workspace.google.com/essentials/\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Google Workspace Essentials\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Google Workspace Essentials\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/identity\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud Identity\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud Identity\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"https://chromeenterprise.google/\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Chrome Enterprise\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Chrome Enterprise\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"https://workspace.google.com/products/cloud-search/\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud Search\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud Search\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/security\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Security\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Security\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/security-analytics-and-operations\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Security Analytics and Operations\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Security Analytics and Operations\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/web-app-and-api-protection\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Web App and API Protection\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Web App and API Protection\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/security-and-resilience\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Security and Resilience Framework\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Security and Resilience Framework\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/risk-and-compliance-as-code\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Risk and compliance as code (RCaC)\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Risk and compliance as code (RCaC)\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/software-supply-chain-security\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Software Supply Chain Security\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Software Supply Chain Security\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/security-foundation\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Security Foundation\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Security Foundation\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/smart-analytics\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Smart Analytics\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Smart Analytics\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/data-warehouse-modernization\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Data Warehouse Modernization\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Data Warehouse Modernization\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/data-lake\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Data Lake Modernization\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Data Lake Modernization\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/spark\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Spark on Google Cloud\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Spark on Google Cloud\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/stream-analytics\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Stream Analytics\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Stream Analytics\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/business-intelligence\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Business Intelligence\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Business Intelligence\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/data-science\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Data Science\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Data Science\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/marketing-analytics\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Marketing Analytics\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Marketing Analytics\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/geospatial\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Geospatial Analytics and AI\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Geospatial Analytics and AI\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/datasets\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Datasets\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Datasets\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions#section-13\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Startups and SMB\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Startups and SMB\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/startups\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Startup Solutions\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Startup Solutions\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/startup\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Startup Program\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Startup Program\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/smb\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Small and Medium Business\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Small and Medium Business\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/saas\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Software as a Service\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Software as a Service\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n    </ul>\n\n\n\n\n    <ul class=\"devsite-nav-list\" menu=\"Products\" aria-label=\"Side menu\" hidden=\"\">\n\n\n\n\n<li class=\"devsite-nav-item devsite-nav-heading\">\n\n\n<span class=\"devsite-nav-title\" tooltip=\"\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Featured Products\n </span>\n\n\n</span>\n\n\n</li>\n\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/compute\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Compute Engine\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Compute Engine\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/storage\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud Storage\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud Storage\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/bigquery\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: BigQuery\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    BigQuery\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/run\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud Run\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud Run\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/kubernetes-engine\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Google Kubernetes Engine\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Google Kubernetes Engine\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/vertex-ai\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Vertex AI Platform\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Vertex AI Platform\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/looker\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Looker\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Looker\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/apigee\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Apigee API Management\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Apigee API Management\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/sql\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud SQL\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud SQL\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/sdk\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud SDK\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud SDK\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/cdn\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud CDN\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud CDN\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/products#featured-products/\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: See all products (100+)\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    See all products (100+)\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/products/ai\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: AI and Machine Learning\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    AI and Machine Learning\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/vertex-ai\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Vertex AI Platform\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Vertex AI Platform\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/generative-ai-studio\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Generative AI on Vertex AI\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Generative AI on Vertex AI\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/generative-ai-app-builder\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Vertex AI Search and Conversation\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Vertex AI Search and Conversation\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/dialogflow\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Dialogflow\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Dialogflow\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/natural-language\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Natural Language AI\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Natural Language AI\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/speech-to-text\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Speech-to-Text\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Speech-to-Text\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/text-to-speech\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Text-to-Speech\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Text-to-Speech\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/translate\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Translation AI\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Translation AI\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/document-ai\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Document AI\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Document AI\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/vision\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Vision AI\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Vision AI\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/contact-center\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Contact Center AI\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Contact Center AI\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/products#ai-and-machine-learning\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: See all AI and machine learning products\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    See all AI and machine learning products\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n\n<li class=\"devsite-nav-item devsite-nav-heading\">\n\n\n<span class=\"devsite-nav-title\" tooltip=\"\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Business Intelligence\n </span>\n\n\n</span>\n\n\n</li>\n\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/looker\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Looker\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Looker\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/looker-studio\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Looker Studio\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Looker Studio\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/products/compute\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Compute\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Compute\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/compute\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Compute Engine\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Compute Engine\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/appengine\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: App Engine\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    App Engine\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/gpu\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud GPUs\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud GPUs\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/migrate/virtual-machines\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Migrate to Virtual Machines\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Migrate to Virtual Machines\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/spot-vms\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Spot VMs\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Spot VMs\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/batch\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Batch\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Batch\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/compute/docs/nodes/sole-tenant-nodes\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Sole-Tenant Nodes\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Sole-Tenant Nodes\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/bare-metal\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Bare Metal\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Bare Metal\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/recommender\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Recommender\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Recommender\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/vmware-engine\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: VMware Engine\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    VMware Engine\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/run\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud Run\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud Run\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/products#compute\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: See all compute products\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    See all compute products\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/containers\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Containers\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Containers\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/kubernetes-engine\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Google Kubernetes Engine\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Google Kubernetes Engine\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/run\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud Run\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud Run\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/build\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud Build\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud Build\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/artifact-registry\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Artifact Registry\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Artifact Registry\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/code\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud Code\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud Code\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/deploy\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud Deploy\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud Deploy\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/migrate/containers\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Migrate to Containers\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Migrate to Containers\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/deep-learning-containers\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Deep Learning Containers\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Deep Learning Containers\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/knative\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Knative\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Knative\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/smart-analytics\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Data Analytics\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Data Analytics\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/bigquery\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: BigQuery\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    BigQuery\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/looker\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Looker\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Looker\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/dataflow\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Dataflow\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Dataflow\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/pubsub\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Pub/Sub\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Pub/Sub\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/dataproc\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Dataproc\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Dataproc\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/data-fusion\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud Data Fusion\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud Data Fusion\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/composer\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud Composer\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud Composer\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/dataprep\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Dataprep\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Dataprep\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/dataplex\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Dataplex\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Dataplex\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/dataform\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Dataform\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Dataform\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/analytics-hub\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Analytics Hub\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Analytics Hub\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/products#data-analytics\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: See all data analytics products\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    See all data analytics products\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/products/databases\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Databases\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Databases\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/alloydb\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: AlloyDB for PostgreSQL\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    AlloyDB for PostgreSQL\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/sql\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud SQL\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud SQL\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/firestore\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Firestore\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Firestore\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/spanner\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud Spanner\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud Spanner\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/bigtable\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud Bigtable\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud Bigtable\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/datastream\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Datastream\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Datastream\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/database-migration\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Database Migration Service\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Database Migration Service\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/bare-metal\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Bare Metal Solution\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Bare Metal Solution\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/memorystore\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Memorystore\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Memorystore\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/products/tools\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Developer Tools\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Developer Tools\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/artifact-registry\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Artifact Registry\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Artifact Registry\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/code\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud Code\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud Code\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/build\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud Build\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud Build\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/deploy\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud Deploy\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud Deploy\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/deployment-manager/docs\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud Deployment Manager\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud Deployment Manager\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/sdk\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud SDK\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud SDK\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/scheduler\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud Scheduler\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud Scheduler\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/source-repositories\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud Source Repositories\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud Source Repositories\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/infrastructure-manager\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Infrastructure Manager\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Infrastructure Manager\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/workstations\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud Workstations\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud Workstations\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/duet-ai\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Duet AI\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Duet AI\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/products#developer-tools\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: See all developer tools\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    See all developer tools\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/distributed-cloud\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Distributed Cloud\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Distributed Cloud\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/distributed-cloud-edge\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Google Distributed Cloud Edge\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Google Distributed Cloud Edge\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/distributed-cloud-hosted\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Google Distributed Cloud Hosted\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Google Distributed Cloud Hosted\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n\n<li class=\"devsite-nav-item devsite-nav-heading\">\n\n\n<span class=\"devsite-nav-title\" tooltip=\"\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Hybrid and Multicloud\n </span>\n\n\n</span>\n\n\n</li>\n\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/kubernetes-engine\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Google Kubernetes Engine\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Google Kubernetes Engine\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/apigee\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Apigee API Management\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Apigee API Management\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/migrate/containers\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Migrate to Containers\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Migrate to Containers\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/traffic-director\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Traffic Director\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Traffic Director\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/build\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud Build\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud Build\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/products/operations\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Operations\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Operations\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/distributed-cloud\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Google Distributed Cloud\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Google Distributed Cloud\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n\n<li class=\"devsite-nav-item devsite-nav-heading\">\n\n\n<span class=\"devsite-nav-title\" tooltip=\"\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Industry Specific\n </span>\n\n\n</span>\n\n\n</li>\n\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/anti-money-laundering-ai\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Anti Money Laundering AI\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Anti Money Laundering AI\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/healthcare-api\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud Healthcare API\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud Healthcare API\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/device-connect\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Device Connect for Fitbit\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Device Connect for Fitbit\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/telecom-network-automation\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Telecom Network Automation\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Telecom Network Automation\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/telecom-data-fabric\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Telecom Data Fabric\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Telecom Data Fabric\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/telecom-subscriber-insights\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Telecom Subscriber Insights\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Telecom Subscriber Insights\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/spectrum-access-system\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Spectrum Access System (SAS)\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Spectrum Access System (SAS)\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/integration-services\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Integration Services\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Integration Services\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/application-integration\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Application Integration\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Application Integration\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/workflows\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Workflows\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Workflows\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/apigee\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Apigee API Management\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Apigee API Management\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/tasks\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud Tasks\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud Tasks\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/scheduler\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud Scheduler\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud Scheduler\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/dataproc\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Dataproc\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Dataproc\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/data-fusion\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud Data Fusion\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud Data Fusion\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/composer\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud Composer\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud Composer\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/pubsub\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Pub/Sub\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Pub/Sub\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/eventarc/docs\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Eventarc\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Eventarc\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/products/management\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Management Tools\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Management Tools\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/shell\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud Shell\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud Shell\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/cloud-console\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud console\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud console\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/endpoints\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud Endpoints\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud Endpoints\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/iam\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud IAM\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud IAM\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/apis\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud APIs\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud APIs\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/private-catalog\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Service Catalog\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Service Catalog\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/cost-management\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cost Management\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cost Management\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/products/operations\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Operations\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Operations\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/carbon-footprint\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Carbon Footprint\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Carbon Footprint\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/config-connector/docs/overview\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Config Connector\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Config Connector\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/active-assist\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Active Assist\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Active Assist\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/products#managment-tools\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: See all management tools\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    See all management tools\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/geospatial\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Maps and Geospatial\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Maps and Geospatial\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/earth-engine\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Earth Engine\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Earth Engine\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"https://mapsplatform.google.com/\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Google Maps Platform\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Google Maps Platform\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n\n<li class=\"devsite-nav-item devsite-nav-heading\">\n\n\n<span class=\"devsite-nav-title\" tooltip=\"\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Media Services\n </span>\n\n\n</span>\n\n\n</li>\n\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/cdn\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud CDN\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud CDN\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/livestream/docs\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Live Stream API\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Live Stream API\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/opencue\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: OpenCue\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    OpenCue\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/transcoder/docs\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Transcoder API\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Transcoder API\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/video-stitcher\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Video Stitcher API\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Video Stitcher API\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/products/cloud-migration\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Migration\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Migration\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/migration-center/docs\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Migration Center\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Migration Center\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/application-migration\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Application Migration\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Application Migration\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/migrate/virtual-machines\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Migrate to Virtual Machines\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Migrate to Virtual Machines\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/foundation-toolkit\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud Foundation Toolkit\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud Foundation Toolkit\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/database-migration\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Database Migration Service\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Database Migration Service\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/migrate/containers\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Migrate to Containers\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Migrate to Containers\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/bigquery-transfer/docs/introduction\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: BigQuery Data Transfer Service\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    BigQuery Data Transfer Service\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/solutions/cloud-migration-program\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Rapid Migration Program (RaMP)\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Rapid Migration Program (RaMP)\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/transfer-appliance/docs/4.0\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Transfer Appliance\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Transfer Appliance\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/storage-transfer-service\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Storage Transfer Service\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Storage Transfer Service\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/vmware-engine\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: VMware Engine\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    VMware Engine\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n\n<li class=\"devsite-nav-item devsite-nav-heading\">\n\n\n<span class=\"devsite-nav-title\" tooltip=\"\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Mixed Reality\n </span>\n\n\n</span>\n\n\n</li>\n\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/immersive-stream/xr\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Immersive Stream for XR\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Immersive Stream for XR\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/products/networking\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Networking\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Networking\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/armor\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud Armor\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud Armor\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/cdn\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud CDN and Media CDN\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud CDN and Media CDN\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/dns\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud DNS\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud DNS\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/load-balancing\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud Load Balancing\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud Load Balancing\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/nat\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud NAT\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud NAT\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/hybrid-connectivity\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud Connectivity\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud Connectivity\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/network-connectivity-center\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Network Connectivity Center\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Network Connectivity Center\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/network-intelligence-center\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Network Intelligence Center\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Network Intelligence Center\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/network-tiers\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Network Service Tiers\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Network Service Tiers\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/vpc\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Virtual Private Cloud\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Virtual Private Cloud\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/private-service-connect\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Private Service Connect\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Private Service Connect\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/products#networking\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: See all networking products\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    See all networking products\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/products/operations\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Operations\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Operations\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/logging\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud Logging\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud Logging\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/monitoring\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud Monitoring\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud Monitoring\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/error-reporting\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Error Reporting\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Error Reporting\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/debugger\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud Debugger\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud Debugger\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/trace\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud Trace\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud Trace\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/profiler\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud Profiler\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud Profiler\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/docs/quotas\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud Quotas\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud Quotas\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n\n<li class=\"devsite-nav-item devsite-nav-heading\">\n\n\n<span class=\"devsite-nav-title\" tooltip=\"\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Productivity and Collaboration\n </span>\n\n\n</span>\n\n\n</li>\n\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"https://about.appsheet.com/home/\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: AppSheet\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    AppSheet\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/appsheet/automation\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: AppSheet Automation\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    AppSheet Automation\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"https://workspace.google.com/solutions/enterprise/?enterprise-benefits_activeEl=connect/\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Google Workspace\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Google Workspace\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"https://workspace.google.com/essentials/\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Google Workspace Essentials\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Google Workspace Essentials\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"https://workspace.google.com/solutions/ai/\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Duet AI for Google Workspace\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Duet AI for Google Workspace\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/identity\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud Identity\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud Identity\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/chrome-enterprise\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Chrome Enterprise\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Chrome Enterprise\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/products/security-and-identity\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Security and Identity\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Security and Identity\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/iam\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud IAM\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud IAM\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/assured-workloads\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Assured Workloads\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Assured Workloads\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/security-key-management\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud Key Management\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud Key Management\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/confidential-computing\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Confidential Computing\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Confidential Computing\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/security-command-center\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Security Command Center\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Security Command Center\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/sensitive-data-protection\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Sensitive Data Protection\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Sensitive Data Protection\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"https://www.mandiant.com/?utm_source=cgc&amp;utm_medium=referral\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Mandiant Products and Services\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Mandiant Products and Services\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/recaptcha-enterprise\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: reCAPTCHA Enterprise\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    reCAPTCHA Enterprise\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/chronicle-security-operations\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Chronicle Security Operations\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Chronicle Security Operations\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/secret-manager\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Secret Manager\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Secret Manager\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/identity\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud Identity\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud Identity\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/products#security-and-identity/\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: See all security and identity products\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    See all security and identity products\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/serverless\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Serverless\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Serverless\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/run\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud Run\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud Run\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/functions\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud Functions\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud Functions\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/appengine\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: App Engine\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    App Engine\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/workflows\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Workflows\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Workflows\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/api-gateway\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: API Gateway\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    API Gateway\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/products/storage\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Storage\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Storage\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/storage\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud Storage\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud Storage\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/backup-disaster-recovery\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Backup and DR Service\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Backup and DR Service\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/filestore\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Filestore\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Filestore\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/persistent-disk\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Persistent Disk\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Persistent Disk\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"https://firebase.google.com/products/storage/\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud Storage for Firebase\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud Storage for Firebase\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/local-ssd\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Local SSD\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Local SSD\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/storage-transfer-service\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Storage Transfer Service\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Storage Transfer Service\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/parallelstore\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Parallelstore\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Parallelstore\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/netapp-volumes\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Google Cloud NetApp Volumes\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Google Cloud NetApp Volumes\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/web3\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Web3\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Web3\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/blockchain-node-engine\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Blockchain Node Engine\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Blockchain Node Engine\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n    </ul>\n\n\n\n\n    <ul class=\"devsite-nav-list\" menu=\"Pricing\" aria-label=\"Side menu\" hidden=\"\">\n\n\n\n\n<li class=\"devsite-nav-item devsite-nav-heading\">\n\n\n<span class=\"devsite-nav-title\" tooltip=\"\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Save money with our transparent approach to pricing\n </span>\n\n\n</span>\n\n\n</li>\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/contact/?direct=true\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Request a quote\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Request a quote\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n\n<li class=\"devsite-nav-item devsite-nav-heading\">\n\n\n<span class=\"devsite-nav-title\" tooltip=\"\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Pricing overview and tools\n </span>\n\n\n</span>\n\n\n</li>\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/pricing\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Google Cloud pricing\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Google Cloud pricing\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/products/calculator\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Pricing calculator\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Pricing calculator\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/free\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Google Cloud free tier\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Google Cloud free tier\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/architecture/framework/cost-optimization\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cost optimization framework\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cost optimization framework\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/cost-management\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cost management tools\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cost management tools\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n\n<li class=\"devsite-nav-item devsite-nav-heading\">\n\n\n<span class=\"devsite-nav-title\" tooltip=\"\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Product-specific Pricing\n </span>\n\n\n</span>\n\n\n</li>\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/compute/all-pricing\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Compute Engine\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Compute Engine\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/sql/pricing\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud SQL\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud SQL\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/kubernetes-engine/pricing\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Google Kubernetes Engine\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Google Kubernetes Engine\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/storage/pricing\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud Storage\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud Storage\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/bigquery/pricing\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: BigQuery\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    BigQuery\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/pricing/list\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: See full price list with 100+ products\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    See full price list with 100+ products\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n    </ul>\n\n\n\n\n    <ul class=\"devsite-nav-list\" menu=\"Resources\" aria-label=\"Side menu\" hidden=\"\">\n\n\n\n\n<li class=\"devsite-nav-item devsite-nav-heading\">\n\n\n<span class=\"devsite-nav-title\" tooltip=\"\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Learn &amp; build\n </span>\n\n\n</span>\n\n\n</li>\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/free\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Google Cloud Free Program\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Google Cloud Free Program\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/docs/tutorials?doctype=quickstart\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Quickstarts\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Quickstarts\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/discover\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud computing basics\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud computing basics\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/blog\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Blog\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Blog\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/learn\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Learning Hub\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Learning Hub\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/training\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Training\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Training\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/certification\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Certification\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Certification\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/architecture\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Cloud Architecture Center\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Cloud Architecture Center\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n\n<li class=\"devsite-nav-item devsite-nav-heading\">\n\n\n<span class=\"devsite-nav-title\" tooltip=\"\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Connect\n </span>\n\n\n</span>\n\n\n</li>\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/innovators\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Innovators\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Innovators\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/developers\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Developer Center\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Developer Center\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/events\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Events and webinars\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Events and webinars\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/communities\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Google Cloud Community\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Google Cloud Community\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n\n\n\n<li class=\"devsite-nav-item devsite-nav-heading\">\n\n\n<span class=\"devsite-nav-title\" tooltip=\"\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Google Cloud Consulting\n </span>\n\n\n</span>\n\n\n</li>\n\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/consulting\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Google Cloud Consulting\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Google Cloud Consulting\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/marketplace\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Google Cloud Marketplace\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Google Cloud Marketplace\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"/partners\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Google Cloud partners\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Google Cloud partners\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n<li class=\"devsite-nav-item\">\n\n\n<a href=\"https://partners.cloud.google.com/\" class=\"devsite-nav-title gc-analytics-event\n\n            \" data-category=\"Site-Wide Custom Events\" data-label=\"Responsive Tab: Become a partner\" track-type=\"navMenu\" track-metadata-eventdetail=\"globalMenu\" track-metadata-position=\"nav\">\n\n  <span class=\"devsite-nav-text\" tooltip=\"\">\n    Become a partner\n </span>\n\n\n</a>\n\n\n</li>\n\n\n\n\n    </ul>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n    </div>\n\n</div>\n</nav>\n\n    </devsite-book-nav><div class=\"devsite-book-nav-blur\" fixed=\"\" style=\"--devsite-js-book-nav-scrollbar-width: 0px;\"></div><button class=\"devsite-book-nav-toggle\" aria-haspopup=\"menu\" aria-label=\"Hide side navigation\" data-title=\"Hide side navigation\" aria-expanded=\"true\" fixed=\"\"><span class=\"material-icons devsite-book-nav-toggle-icon\"></span></button>\n    <section id=\"gc-wrapper\" style=\"margin-top: 112.8px;\">\n      <main role=\"main\" class=\"devsite-main-content\" has-book-nav=\"\" has-sidebar=\"\">\n\n\n        <div class=\"devsite-sidebar\" fixed=\"\" style=\"--devsite-js-sidebar-max-height: 569.1999969482422px; --devsite-js-sidebar-max-width: 260px; --devsite-js-sidebar-offset: 0;\">\n          <div class=\"devsite-sidebar-content\">\n\n              <devsite-toc class=\"devsite-nav devsite-toc\" role=\"navigation\" aria-label=\"On this page\" depth=\"2\" scrollbars=\"\" visible=\"\"><ul class=\"devsite-nav-list\"><li class=\"devsite-nav-item devsite-nav-heading devsite-toc-toggle\"><span class=\"devsite-nav-title\" role=\"heading\" aria-level=\"2\"><span class=\"devsite-nav-text\">On this page</span></span></li><li class=\"devsite-nav-item\"><a href=\"#support_timelines\" class=\"devsite-nav-title gc-analytics-event devsite-nav-active\" data-category=\"Site-Wide Custom Events\" data-action=\"click\" data-label=\"Right nav\" data-value=\"0\" track-type=\"navigation\" track-name=\"rightNav\" track-metadata-position=\"0\" track-metadata-link-destination=\"#support_timelines\"><span class=\"devsite-nav-text\" tooltip=\"\">Support timelines</span></a></li><li class=\"devsite-nav-item\"><a href=\"#whats_next\" class=\"devsite-nav-title gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-action=\"click\" data-label=\"Right nav\" data-value=\"1\" track-type=\"navigation\" track-name=\"rightNav\" track-metadata-position=\"1\" track-metadata-link-destination=\"#whats_next\"><span class=\"devsite-nav-text\" tooltip=\"\">What's next</span></a></li></ul></devsite-toc>\n              <devsite-recommendations-sidebar class=\"nocontent devsite-nav\">\n              </devsite-recommendations-sidebar>\n          </div>\n        </div>\n\n        <devsite-content>\n\n\n\n\n\n\n\n\n\n\n\n\n\n<article class=\"devsite-article\" has-bookmark=\"\">\n\n\n\n\n\n\n<div class=\"devsite-article-meta nocontent\" role=\"navigation\">\n\n\n  <ul class=\"devsite-breadcrumb-list\" aria-label=\"Breadcrumb\">\n\n<li class=\"devsite-breadcrumb-item\n           \">\n\n\n\n\n<a href=\"https://cloud.google.com/\" class=\"devsite-breadcrumb-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Breadcrumbs\" data-value=\"1\" track-type=\"globalNav\" track-name=\"breadcrumb\" track-metadata-position=\"1\" track-metadata-eventdetail=\"Google Cloud\">\n\n      Home\n\n</a>\n\n\n</li>\n\n<li class=\"devsite-breadcrumb-item\n           \">\n\n\n    <div class=\"devsite-breadcrumb-guillemet material-icons\" aria-hidden=\"true\"></div>\n\n\n\n\n<a href=\"https://cloud.google.com/docs\" class=\"devsite-breadcrumb-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Breadcrumbs\" data-value=\"2\" track-type=\"globalNav\" track-name=\"breadcrumb\" track-metadata-position=\"2\" track-metadata-eventdetail=\"\">\n\n      Docs\n\n</a>\n\n\n</li>\n\n<li class=\"devsite-breadcrumb-item\n           \">\n\n\n    <div class=\"devsite-breadcrumb-guillemet material-icons\" aria-hidden=\"true\"></div>\n\n\n\n\n<a href=\"https://cloud.google.com/data-fusion\" class=\"devsite-breadcrumb-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Breadcrumbs\" data-value=\"3\" track-type=\"globalNav\" track-name=\"breadcrumb\" track-metadata-position=\"3\" track-metadata-eventdetail=\"Cloud Data Fusion\">\n\n      Cloud Data Fusion\n\n</a>\n\n\n</li>\n\n<li class=\"devsite-breadcrumb-item\n           \">\n\n\n    <div class=\"devsite-breadcrumb-guillemet material-icons\" aria-hidden=\"true\"></div>\n\n\n\n\n<a href=\"https://cloud.google.com/data-fusion/docs\" class=\"devsite-breadcrumb-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Breadcrumbs\" data-value=\"4\" track-type=\"globalNav\" track-name=\"breadcrumb\" track-metadata-position=\"4\" track-metadata-eventdetail=\"Cloud Data Fusion Documentation\">\n\n      Documentation\n\n</a>\n\n\n</li>\n\n<li class=\"devsite-breadcrumb-item\n           \">\n\n\n    <div class=\"devsite-breadcrumb-guillemet material-icons\" aria-hidden=\"true\"></div>\n\n\n\n\n<a href=\"https://cloud.google.com/data-fusion/docs/resources\" class=\"devsite-breadcrumb-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Breadcrumbs\" data-value=\"5\" track-type=\"globalNav\" track-name=\"breadcrumb\" track-metadata-position=\"5\" track-metadata-eventdetail=\"\">\n\n      Resources\n\n</a>\n\n\n</li>\n\n</ul>\n\n\n  <devsite-thumb-rating position=\"header\"><div class=\"devsite-thumb-rating\" role=\"form\" aria-labelledby=\"devsite-thumb-label-header\"><div class=\"devsite-thumb-label\" id=\"devsite-thumb-label-header\">Was this helpful?</div><div class=\"devsite-thumbs\"><button class=\"devsite-thumb devsite-thumb-up\" data-title=\"Helpful\" aria-label=\"Helpful\"><svg class=\"devsite-thumb-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M21,7h-6.31l0.95-4.57l0.03-0.32c0-0.41-0.17-0.79-0.44-1.06L14.17,0c0,0-7.09,6.85-7.17,7H2v13h16 c0.83,0,1.54-0.5,1.84-1.22l3.02-7.05C22.95,11.5,23,11.26,23,11V9C23,7.9,22.1,7,21,7z M7,18H4V9h3V18z M21,11l-3,7H9V8l4.34-4.34 L12,9h9V11z\"></path></svg></button><button class=\"devsite-thumb devsite-thumb-down\" data-title=\"Not helpful\" aria-label=\"Not helpful\"><svg class=\"devsite-thumb-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M3,17h6.31l-0.95,4.57l-0.03,0.32c0,0.41,0.17,0.79,0.44,1.06L9.83,24c0,0,7.09-6.85,7.17-7h5V4H6 C5.17,4,4.46,4.5,4.16,5.22l-3.02,7.05C1.05,12.5,1,12.74,1,13v2C1,16.1,1.9,17,3,17z M17,6h3v9h-3V6z M3,13l3-7h9v10l-4.34,4.34 L12,15H3V13z\"></path></svg></button></div></div></devsite-thumb-rating>\n\n\n</div>\n\n  <devsite-feedback position=\"header\" project-name=\"Cloud Data Fusion Documentation\" product-id=\"5108800\" bucket=\"Documentation\" context=\"\" version=\"t-devsite-webserver-20240220-r00-rc00.458658658285191511\" data-label=\"Send Feedback Button\" track-type=\"feedback\" track-name=\"sendFeedbackLink\" track-metadata-position=\"header\" class=\"nocontent\" project-icon=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/images/favicons/onecloud/super_cloud.png\" feedback-type=\"thumb-rating\">\n\n<button>\n\n\n  Send feedback\n\n</button>\n</devsite-feedback>\n\n    <h1 class=\"devsite-page-title\" tabindex=\"-1\">Version support policy</h1>\n<devsite-feature-tooltip ack-key=\"AckCollectionsBookmarkTooltipDismiss\" analytics-category=\"Site-Wide Custom Events\" analytics-action-show=\"Callout Profile displayed\" analytics-action-close=\"Callout Profile dismissed\" analytics-label=\"Create Collection Callout\" class=\"devsite-page-bookmark-tooltip nocontent inline-block\" dismiss-button=\"true\" id=\"devsite-collections-dropdown\" dismiss-button-text=\"Dismiss\" close-button-text=\"Got it\" ready=\"\" current-step=\"0\" style=\"--devsite-popout-offset-x: 32px;\">\n\n\n      <devsite-bookmark class=\"show\"><devsite-dropdown-list ellipsis=\"\" checkboxes=\"\" fetchingitems=\"true\" writable=\"\" additemtext=\"New Collection\" ready=\"\" style=\"--devsite-popout-offset-x: 0px;\"><span data-label=\"devsite-bookmark-direct-action\" data-title=\"Save page\" class=\"material-icons bookmark-icon bookmark-action\" slot=\"toggle\">bookmark_border</span><span data-label=\"devsite-bookmark-direct-action\" data-title=\"Unsave page\" hidden=\"\" class=\"material-icons bookmark-icon unbookmark-action toggled\" slot=\"toggle\">bookmark</span></devsite-dropdown-list></devsite-bookmark>\n\n      <span slot=\"popout-heading\">\n\n        Stay organized with collections\n      </span>\n      <span slot=\"popout-contents\">\n\n        Save and categorize content based on your preferences.\n      </span>\n    </devsite-feature-tooltip>\n<div class=\"devsite-page-title-meta\"><devsite-view-release-notes data-shown=\"\"><!---->\n    <button class=\"view-notes-button\">\n      <!--?lit$997324233$-->Release Notes\n    </button>\n  </devsite-view-release-notes></div>\n\n\n<devsite-toc class=\"devsite-nav devsite-toc-embedded\" depth=\"2\" devsite-toc-embedded=\"\" visible=\"\"><ul class=\"devsite-nav-list\"><li class=\"devsite-nav-item devsite-nav-heading devsite-toc-toggle\"><span class=\"devsite-nav-title\" role=\"heading\" aria-level=\"2\"><span class=\"devsite-nav-text\">On this page</span></span><button type=\"button\" title=\"Expand/collapse contents\" class=\"devsite-nav-show-all button-transparent material-icons\"></button></li><li class=\"devsite-nav-item\" visible=\"\"><a href=\"#support_timelines\" class=\"devsite-nav-title gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-action=\"click\" data-label=\"Embedded nav\" data-value=\"0\" track-type=\"navigation\" track-name=\"embeddedNav\" track-metadata-position=\"0\" track-metadata-link-destination=\"#support_timelines\"><span class=\"devsite-nav-text\" tooltip=\"\">Support timelines</span></a></li><li class=\"devsite-nav-item\" visible=\"\"><a href=\"#whats_next\" class=\"devsite-nav-title gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-action=\"click\" data-label=\"Embedded nav\" data-value=\"1\" track-type=\"navigation\" track-name=\"embeddedNav\" track-metadata-position=\"1\" track-metadata-link-destination=\"#whats_next\"><span class=\"devsite-nav-text\" tooltip=\"\">What's next</span></a></li><li class=\"devsite-toc-toggle\"><button type=\"button\" class=\"button-flat devsite-nav-more-items material-icons\" track-type=\"navigation\" track-name=\"embeddedNavExpand\" title=\"Expand/collapse contents\"></button></li></ul></devsite-toc>\n\n\n\n\n\n\n\n\n\n\n\n<div class=\"devsite-article-body clearfix\n\">\n\n\n\n\n\n\n<p>A <a href=\"#version-number\">major or minor</a> version of Cloud Data Fusion environment is\nsupported for a specific period of time after it is released. During that\nperiod, Cloud Data Fusion instances that use the environment version are\nsupported. After that period, instances that continue to use the environment\nversion are no longer supported. When a version is not supported, existing\ninstances will continue to work, but no new instances can be created. No\nadditional fixes will be made and, if you have issues, Cloud Customer Care will\nrecommend upgrading your environment to the latest version.</p>\n\n<p>Cloud Data Fusion version support is defined as follows:</p>\n\n<ul>\n<li><p>0-18 months after a major or minor version of Cloud Data Fusion\nenvironment is released: Cloud Data Fusion instances running the version\nare supported.</p></li>\n<li><p>Beyond 18 months after a major or minor version of Cloud Data Fusion\nenvironment is released: Cloud Data Fusion instances running the version\nare unsupported and need to be updated to regain support.</p></li>\n</ul>\n<aside class=\"note\"><strong>Note:</strong><span> No emergency bug fixes or security fixes will be provided for unsupported\nversions for Cloud Data Fusion.</span></aside>\n<h2 id=\"support_timelines\" data-text=\"Support timelines\" tabindex=\"-1\" role=\"presentation\"><span class=\"devsite-heading\" role=\"heading\" aria-level=\"2\">Support timelines</span><button type=\"button\" class=\"devsite-heading-link button-flat material-icons\" aria-label=\"Copy link to this section: Support timelines\" data-title=\"Copy link to this section: Support timelines\" data-id=\"support_timelines\"></button></h2>\n\n<p>Versions are not supported after the following dates:</p>\n\n<div class=\"devsite-table-wrapper\">\n<table>\n<tbody><tr>\n  <th>Cloud Data Fusion minor version</th>\n  <th>GA release date</th>\n  <th>Last day of support</th>\n</tr>\n<tr>\n  <td><a href=\"/data-fusion/docs/release-notes#September_07_2023\">6.9</a></td>\n  <td>September 7, 2023</td>\n  <td>March 31, 2025</td>\n</tr><tr>\n  <td><a href=\"/data-fusion/docs/release-notes#February_28_2023\">6.8</a></td>\n  <td>February 28, 2023</td>\n  <td>August 31, 2024</td>\n</tr><tr>\n  <td><a href=\"/data-fusion/docs/release-notes#August_15_2022\">6.7</a></td>\n  <td>August 15, 2022</td>\n  <td>February 28, 2023</td>\n</tr><tr>\n  <td><a href=\"/data-fusion/docs/release-notes#April_01_2022\">6.6</a></td>\n  <td>April 1, 2022</td>\n  <td>October 31, 2023</td>\n</tr><tr>\n  <td><a href=\"/data-fusion/docs/release-notes#November_05_2021\">6.5</a></td>\n  <td>November 5, 2021</td>\n  <td>May 31, 2023</td>\n</tr><tr>\n  <td><a href=\"/data-fusion/docs/release-notes#May_27_2021\">6.4</a></td>\n  <td>May 27, 2021</td>\n  <td>November 30, 2022</td>\n</tr>\n<tr>\n  <td><a href=\"/data-fusion/docs/release-notes#January_21_2021\">6.3</a>\n    <sup><a href=\"#dataproc-compatibility\">*</a></sup></td>\n  <td>January 21, 2021</td>\n  <td>July 31, 2022</td>\n</tr>\n<tr>\n  <td><a href=\"/data-fusion/docs/release-notes#September_30_2020\">6.2</a>\n    <sup><a href=\"#dataproc-compatibility\">*</a></sup></td>\n  <td>September 30, 2020</td>\n  <td>March 31, 2022</td>\n</tr>\n<tr>\n  <td><a href=\"/data-fusion/docs/release-notes#December_10_2019\">6.1</a>\n    <sup><a href=\"#dataproc-compatibility\">*</a></sup></td>\n  <td>December 10, 2019</td>\n  <td>June 30, 2021</td>\n</tr>\n</tbody></table></div>\n\n<p><small>\n</small></p><div class=\"footnote\" id=\"dataproc-compatibility\"><small>\n<sup class=\"footnote\">*</sup>  Versions 6.1 through 6.3 use an unsupported\nversion of Dataproc. See\n<a href=\"/data-fusion/docs/concepts/configure-clusters#version-compatibility\">\n  Version compatibility</a>.\n</small></div><small>\n</small><p></p>\n\n<h2 id=\"whats_next\" data-text=\"What's next\" tabindex=\"-1\" role=\"presentation\"><span class=\"devsite-heading\" role=\"heading\" aria-level=\"2\">What's next</span><button type=\"button\" class=\"devsite-heading-link button-flat material-icons\" aria-label=\"Copy link to this section: What's next\" data-title=\"Copy link to this section: What's next\" data-id=\"whats_next\"></button></h2>\n\n<ul>\n<li><a href=\"/data-fusion/docs/how-to/upgrade-to-patch-revision\" track-type=\"tasks\" track-name=\"internalLink\" track-metadata-position=\"body\">Manage patch revisions</a>\nfor Cloud Data Fusion instances.</li>\n<li>Learn about <a href=\"/data-fusion/docs/concepts/versioning\" track-type=\"tasks\" track-name=\"internalLink\" track-metadata-position=\"body\">versioning in Cloud Data Fusion</a>.</li>\n<li>Refer to the <a href=\"/data-fusion/docs/concepts/available-upgrades\" track-type=\"tasks\" track-name=\"internalLink\" track-metadata-position=\"body\">available version and patch revision upgrades</a>.</li>\n<li><a href=\"/data-fusion/docs/support/troubleshoot-upgrades\" track-type=\"tasks\" track-name=\"internalLink\" track-metadata-position=\"body\">Troubleshoot upgrades</a>.</li>\n</ul>\n\n\n\n\n\n\n  <devsite-hats-survey class=\"nocontent\" hats-id=\"Nd7nTix2o0eU5NUYprb0ThtUc5jf\" listnr-id=\"83405\"></devsite-hats-survey>\n\n</div>\n\n\n\n\n\n\n\n  <devsite-thumb-rating position=\"footer\"><div class=\"devsite-thumb-rating\" role=\"form\" aria-labelledby=\"devsite-thumb-label-footer\"><div class=\"devsite-thumb-label\" id=\"devsite-thumb-label-footer\">Was this helpful?</div><div class=\"devsite-thumbs\"><button class=\"devsite-thumb devsite-thumb-up\" data-title=\"Helpful\" aria-label=\"Helpful\"><svg class=\"devsite-thumb-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M21,7h-6.31l0.95-4.57l0.03-0.32c0-0.41-0.17-0.79-0.44-1.06L14.17,0c0,0-7.09,6.85-7.17,7H2v13h16 c0.83,0,1.54-0.5,1.84-1.22l3.02-7.05C22.95,11.5,23,11.26,23,11V9C23,7.9,22.1,7,21,7z M7,18H4V9h3V18z M21,11l-3,7H9V8l4.34-4.34 L12,9h9V11z\"></path></svg></button><button class=\"devsite-thumb devsite-thumb-down\" data-title=\"Not helpful\" aria-label=\"Not helpful\"><svg class=\"devsite-thumb-icon\" viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M3,17h6.31l-0.95,4.57l-0.03,0.32c0,0.41,0.17,0.79,0.44,1.06L9.83,24c0,0,7.09-6.85,7.17-7h5V4H6 C5.17,4,4.46,4.5,4.16,5.22l-3.02,7.05C1.05,12.5,1,12.74,1,13v2C1,16.1,1.9,17,3,17z M17,6h3v9h-3V6z M3,13l3-7h9v10l-4.34,4.34 L12,15H3V13z\"></path></svg></button></div></div></devsite-thumb-rating>\n\n\n       <devsite-feedback position=\"footer\" project-name=\"Cloud Data Fusion Documentation\" product-id=\"5108800\" bucket=\"Documentation\" context=\"\" version=\"t-devsite-webserver-20240220-r00-rc00.458658658285191511\" data-label=\"Send Feedback Button\" track-type=\"feedback\" track-name=\"sendFeedbackLink\" track-metadata-position=\"footer\" class=\"nocontent\" project-icon=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/images/favicons/onecloud/super_cloud.png\" feedback-type=\"thumb-rating\">\n\n<button>\n\n\n  Send feedback\n\n</button>\n</devsite-feedback>\n\n\n\n\n\n\n\n<devsite-googler-buttons active=\"\">\n<a href=\"https://b.corp.google.com/issues/new?component=561609&amp;foundIn=https://cloud.google.com/data-fusion/docs/version-support-policy?hl=en\" target=\"_blank\" rel=\"noopener\" class=\"gc-analytics-event\" data-category=\"DevSite Internal\" data-label=\"/data-fusion/docs/version-support-policy?hl=en\" data-action=\"Buganizer (content error) click\" data-title=\"Report error\" aria-label=\"Report error\">\n  <div class=\"devsite-googler-bug devsite-googler-button\"></div>\n</a>\n\n<a href=\"https://source.corp.google.com/piper///depot/google3/googledata/devsite/site-cloud/en/data-fusion/docs/version-support-policy.md?edit=1\" target=\"_blank\" rel=\"noopener\" class=\"gc-analytics-event\" data-category=\"DevSite Internal\" data-label=\"/data-fusion/docs/version-support-policy?hl=en\" data-action=\"Edit page link click\" data-title=\"Edit page\" aria-label=\"Edit page\">\n  <div class=\"devsite-googler-edit devsite-googler-button\"></div>\n</a>\n\n\n<a href=\"https://source.corp.google.com/piper///depot/google3/googledata/devsite/site-cloud/en/data-fusion/docs/version-support-policy.md\" target=\"_blank\" rel=\"noopener\" class=\"gc-analytics-event\" data-category=\"DevSite Internal\" data-label=\"/data-fusion/docs/version-support-policy?hl=en\" data-action=\"Code Search page link click\" data-title=\"View source\" aria-label=\"View source\">\n  <div class=\"devsite-googler-source devsite-googler-button\"></div>\n</a>\n\n\n<a href=\"https://devrel.corp.google.com/docs?followSingleResult=1&amp;url=%25//cloud.google.com/data-fusion/docs/version-support-policy%25\" target=\"_blank\" rel=\"noopener\" class=\"gc-analytics-event\" data-category=\"DevSite Internal\" data-label=\"/data-fusion/docs/version-support-policy?hl=en\" data-action=\"View in DevRel Services\" data-title=\"View in DevRel Services\" aria-label=\"View in DevRel Services\">\n  <div class=\"devsite-googler-devrel devsite-googler-button\"></div>\n</a>\n\n\n<a href=\"https://devpanel.corp.google.com/browser?delphi-search=/data-fusion/docs/version-support-policy&amp;delphi-env=prod&amp;delphi-tenant=CLOUD&amp;delphi-locale=ENGLISH&amp;delphi-action=view\" target=\"_blank\" rel=\"noopener\" class=\"gc-analytics-event\" data-category=\"DevSite Internal\" data-label=\"/data-fusion/docs/version-support-policy?hl=en\" data-action=\"Control Panel link click\" data-title=\"View database entry\" aria-label=\"View database entry\">\n  <div class=\"devsite-googler-admin devsite-googler-button\"></div>\n</a>\n\n<devsite-content-excellence>\n  <div class=\"gc-analytics-event devsite-googler-content-excellence devsite-googler-button material-symbols-outlined\" data-category=\"DevSite Internal\" data-label=\"/data-fusion/docs/version-support-policy?hl=en\" data-action=\"Content Excellence click\" data-title=\"View Content Excellence scores\" aria-label=\"View Content Excellence scores\" role=\"button\" tabindex=\"0\">\n  </div>\n<!----></devsite-content-excellence>\n<devsite-author-page-insights>\n  <div class=\"gc-analytics-event devsite-googler-page-insights devsite-googler-button\" data-category=\"DevSite Internal\" data-label=\"/data-fusion/docs/version-support-policy?hl=en\" data-action=\"Page insights click\" data-title=\"Get page insights\" aria-label=\"Get page insights\" role=\"button\" tabindex=\"0\">\n  </div>\n<!----></devsite-author-page-insights>\n\n<a href=\"https://cloud.devsite.corp.google.com/data-fusion/docs/version-support-policy\" class=\"gc-analytics-event\" data-category=\"DevSite Internal\" data-label=\"/data-fusion/docs/version-support-policy?hl=en\" data-action=\"Toggle to staging click\" data-title=\"View in staging\" aria-label=\"View in staging\">\n  <div class=\"devsite-googler-env devsite-googler-button\"></div>\n</a>\n<div class=\"devsite-googler-cache devsite-googler-button gc-analytics-event\" data-category=\"DevSite Internal\" data-label=\"/data-fusion/docs/version-support-policy?hl=en\" data-action=\"Skip cache\" data-title=\"Cache is on\" aria-label=\"Cache is on\" role=\"button\" tabindex=\"0\">\n</div>\n<div class=\"devsite-googler-speed-dial devsite-googler-button gc-analytics-event\" data-category=\"DevSite Internal\" data-label=\"/data-fusion/docs/version-support-policy?hl=en\" data-action=\"Toggle Googler buttons\" data-title=\"Tools for Googlers\" aria-label=\"Tools for Googlers\" role=\"button\" tabindex=\"0\">\n</div>\n</devsite-googler-buttons>\n\n</article>\n\n\n<devsite-content-footer class=\"nocontent\">\n<p>Except as otherwise noted, the content of this page is licensed under the <a href=\"https://creativecommons.org/licenses/by/4.0/\">Creative Commons Attribution 4.0 License</a>, and code samples are licensed under the <a href=\"https://www.apache.org/licenses/LICENSE-2.0\">Apache 2.0 License</a>. For details, see the <a href=\"https://developers.google.com/site-policies\">Google Developers Site Policies</a>. Java is a registered trademark of Oracle and/or its affiliates.</p>\n<p>Last updated 2024-02-23 UTC.</p>\n</devsite-content-footer>\n\n\n<devsite-notification>\n</devsite-notification>\n\n\n\n<div class=\"devsite-content-data\">\n<template class=\"devsite-thumb-rating-down-categories\">\n[{\n    \"type\": \"thumb-down\",\n    \"id\": \"hardToUnderstand\",\n    \"label\":\"Hard to understand\"\n  },{\n    \"type\": \"thumb-down\",\n    \"id\": \"incorrectInformationOrSampleCode\",\n    \"label\":\"Incorrect information or sample code\"\n  },{\n    \"type\": \"thumb-down\",\n    \"id\": \"missingTheInformationSamplesINeed\",\n    \"label\":\"Missing the information/samples I need\"\n  },{\n    \"type\": \"thumb-down\",\n    \"id\": \"otherDown\",\n    \"label\":\"Other\"\n  }]\n</template>\n<template class=\"devsite-thumb-rating-up-categories\">\n[{\n    \"type\": \"thumb-up\",\n    \"id\": \"easyToUnderstand\",\n    \"label\":\"Easy to understand\"\n  },{\n    \"type\": \"thumb-up\",\n    \"id\": \"solvedMyProblem\",\n    \"label\":\"Solved my problem\"\n  },{\n    \"type\": \"thumb-up\",\n    \"id\": \"otherUp\",\n    \"label\":\"Other\"\n  }]\n</template>\n\n\n\n  <template class=\"devsite-thumb-rating-feedback\">\n    <devsite-feedback position=\"thumb-rating\" project-name=\"Cloud Data Fusion Documentation\" product-id=\"5108800\" bucket=\"Documentation\" context=\"\" version=\"t-devsite-webserver-20240220-r00-rc00.458658658285191511\" data-label=\"Send Feedback Button\" track-type=\"feedback\" track-name=\"sendFeedbackLink\" track-metadata-position=\"thumb-rating\" class=\"nocontent\" project-icon=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/images/favicons/onecloud/super_cloud.png\" feedback-type=\"thumb-rating\">\n\n<button>\n\n  Need to tell us more?\n\n</button>\n</devsite-feedback>\n  </template>\n\n</div>\n\n        </devsite-content>\n      </main>\n      <devsite-footer-promos class=\"devsite-footer\">\n\n\n\n      </devsite-footer-promos>\n      <devsite-footer-linkboxes class=\"devsite-footer\">\n\n\n<nav class=\"devsite-footer-linkboxes nocontent\" aria-label=\"Footer links\">\n\n<ul class=\"devsite-footer-linkboxes-list\">\n\n  <li class=\"devsite-footer-linkbox \">\n  <h3 class=\"devsite-footer-linkbox-heading no-link\">Why Google</h3>\n    <ul class=\"devsite-footer-linkbox-list\">\n\n      <li class=\"devsite-footer-linkbox-item\">\n\n        <a href=\"/why-google-cloud/\" class=\"devsite-footer-linkbox-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Link (index 1)\" track-type=\"footer link\" track-metadata-child_headline=\"why google\" track-metadata-module=\"footer\" track-metadata-position=\"footer\" track-metadata-eventdetail=\"cloud.google.com/why-google-cloud/\" track-name=\"choosing google cloud\">\n\n\n          Choosing Google Cloud\n\n        </a>\n\n\n      </li>\n\n      <li class=\"devsite-footer-linkbox-item\">\n\n        <a href=\"/trust-center/\" class=\"devsite-footer-linkbox-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Link (index 2)\" track-name=\"trust and security\" track-metadata-child_headline=\"why google\" track-type=\"footer link\" track-metadata-position=\"footer\" track-metadata-module=\"footer\" track-metadata-eventdetail=\"cloud.google.com/security/\">\n\n\n          Trust and security\n\n        </a>\n\n\n      </li>\n\n      <li class=\"devsite-footer-linkbox-item\">\n\n        <a href=\"/open-cloud/\" class=\"devsite-footer-linkbox-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Link (index 3)\" track-name=\"open cloud\" track-type=\"footer link\" track-metadata-eventdetail=\"cloud.google.com/open-cloud/\" track-metadata-module=\"footer\" track-metadata-position=\"footer\" track-metadata-child_headline=\"why google\">\n\n\n          Open cloud\n\n        </a>\n\n\n      </li>\n\n      <li class=\"devsite-footer-linkbox-item\">\n\n        <a href=\"/multicloud/\" class=\"devsite-footer-linkbox-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Link (index 4)\" track-metadata-position=\"footer\" track-name=\"multicloud\" track-metadata-eventdetail=\"cloud.google.com/multicloud/\" track-type=\"footer link\" track-metadata-child_headline=\"why google\" track-metadata-module=\"footer\">\n\n\n          Multicloud\n\n        </a>\n\n\n      </li>\n\n      <li class=\"devsite-footer-linkbox-item\">\n\n        <a href=\"/infrastructure/\" class=\"devsite-footer-linkbox-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Link (index 5)\" track-metadata-eventdetail=\"cloud.google.com/infrastructure/\" track-metadata-module=\"footer\" track-name=\"global infrastructure\" track-metadata-position=\"footer\" track-metadata-child_headline=\"why google\" track-type=\"footer link\">\n\n\n          Global infrastructure\n\n        </a>\n\n\n      </li>\n\n      <li class=\"devsite-footer-linkbox-item\">\n\n        <a href=\"/customers/\" class=\"devsite-footer-linkbox-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Link (index 6)\" track-metadata-module=\"footer\" track-metadata-position=\"footer\" track-type=\"footer link\" track-metadata-child_headline=\"why google\" track-name=\"customers and case studies\" track-metadata-eventdetail=\"cloud.google.com/customers/\">\n\n\n          Customers and case studies\n\n        </a>\n\n\n      </li>\n\n      <li class=\"devsite-footer-linkbox-item\">\n\n        <a href=\"/analyst-reports/\" class=\"devsite-footer-linkbox-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Link (index 7)\" track-name=\"analyst reports\" track-metadata-position=\"footer\" track-metadata-eventdetail=\"cloud.google.com/analyst-reports/\" track-metadata-child_headline=\"why google\" track-metadata-module=\"footer\" track-type=\"footer link\">\n\n\n          Analyst reports\n\n        </a>\n\n\n      </li>\n\n      <li class=\"devsite-footer-linkbox-item\">\n\n        <a href=\"/whitepapers/\" class=\"devsite-footer-linkbox-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Link (index 8)\" track-metadata-eventdetail=\"cloud.google.com/whitepapers/\" track-name=\"whitepapers\" track-metadata-module=\"footer\" track-metadata-position=\"footer\" track-type=\"footer link\" track-metadata-child_headline=\"why google\">\n\n\n          Whitepapers\n\n        </a>\n\n\n      </li>\n\n      <li class=\"devsite-footer-linkbox-item\">\n\n        <a href=\"//cloud.google.com/blog/\" class=\"devsite-footer-linkbox-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Link (index 9)\" track-name=\"blog\" track-metadata-module=\"footer\" track-metadata-position=\"footer\" track-metadata-child_headline=\"engage\" track-type=\"footer link\" track-metadata-eventdetail=\"cloud.google.com/blog/\">\n\n\n\n\n\n          Blog\n\n        </a>\n\n\n      </li>\n\n    </ul>\n  </li>\n\n  <li class=\"devsite-footer-linkbox \">\n  <h3 class=\"devsite-footer-linkbox-heading no-link\">Products and pricing</h3>\n    <ul class=\"devsite-footer-linkbox-list\">\n\n      <li class=\"devsite-footer-linkbox-item\">\n\n        <a href=\"/pricing/\" class=\"devsite-footer-linkbox-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Link (index 1)\" track-metadata-position=\"footer\" track-metadata-eventdetail=\"cloud.google.com/pricing/\" track-type=\"footer link\" track-metadata-module=\"footer\" track-name=\"google cloud pricing\" track-metadata-child_headline=\"products and pricing\">\n\n\n          Google Cloud pricing\n\n        </a>\n\n\n      </li>\n\n      <li class=\"devsite-footer-linkbox-item\">\n\n        <a href=\"//workspace.google.com/pricing.html\" class=\"devsite-footer-linkbox-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Link (index 2)\" target=\"_blank\" track-metadata-eventdetail=\"workspace.google.com/pricing.html\" track-type=\"footer link\" track-metadata-position=\"footer\" track-name=\"google workspace pricing\" track-metadata-child_headline=\"products and pricing\" track-metadata-module=\"footer\">\n\n\n          Google Workspace pricing\n\n        </a>\n\n\n      </li>\n\n      <li class=\"devsite-footer-linkbox-item\">\n\n        <a href=\"/products/\" class=\"devsite-footer-linkbox-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Link (index 3)\" track-metadata-module=\"footer\" track-metadata-eventdetail=\"cloud.google.com/products/\" track-metadata-position=\"footer\" track-type=\"footer link\" track-name=\"see all products\" track-metadata-child_headline=\"products and pricing\">\n\n\n\n\n\n          See all products\n\n        </a>\n\n\n      </li>\n\n    </ul>\n  </li>\n\n  <li class=\"devsite-footer-linkbox \">\n  <h3 class=\"devsite-footer-linkbox-heading no-link\">Solutions</h3>\n    <ul class=\"devsite-footer-linkbox-list\">\n\n      <li class=\"devsite-footer-linkbox-item\">\n\n        <a href=\"/solutions/infrastructure-modernization/\" class=\"devsite-footer-linkbox-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Link (index 1)\" track-metadata-module=\"footer\" track-metadata-position=\"footer\" track-metadata-eventdetail=\"cloud.google.com/solutions/infrastructure-modernization/\" track-type=\"footer link\" track-name=\"infrastructure modernization\" track-metadata-child_headline=\"solutions\">\n\n\n          Infrastructure modernization\n\n        </a>\n\n\n      </li>\n\n      <li class=\"devsite-footer-linkbox-item\">\n\n        <a href=\"/solutions/databases/\" class=\"devsite-footer-linkbox-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Link (index 2)\" track-type=\"footer link\" track-metadata-eventdetail=\"cloud.google.com/solutions/databases\" track-metadata-child_headline=\"solutions\" track-name=\"databases\" track-metadata-position=\"footer\" track-metadata-module=\"footer\">\n\n\n          Databases\n\n        </a>\n\n\n      </li>\n\n      <li class=\"devsite-footer-linkbox-item\">\n\n        <a href=\"/solutions/application-modernization/\" class=\"devsite-footer-linkbox-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Link (index 3)\" track-metadata-eventdetail=\"cloud.google.com/solutions/application-modernization/\" track-metadata-module=\"footer\" track-name=\"application development\" track-metadata-position=\"footer\" track-type=\"footer link\" track-metadata-child_headline=\"solutions\">\n\n\n          Application modernization\n\n        </a>\n\n\n      </li>\n\n      <li class=\"devsite-footer-linkbox-item\">\n\n        <a href=\"/solutions/smart-analytics/\" class=\"devsite-footer-linkbox-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Link (index 4)\" track-metadata-eventdetail=\"cloud.google.com/solutions/smart-analytics/\" track-metadata-child_headline=\"solutions\" track-metadata-module=\"footer\" track-name=\"smart analytics\" track-metadata-position=\"footer\" track-type=\"footer link\">\n\n\n          Smart analytics\n\n        </a>\n\n\n      </li>\n\n      <li class=\"devsite-footer-linkbox-item\">\n\n        <a href=\"/solutions/ai/\" class=\"devsite-footer-linkbox-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Link (index 5)\" track-metadata-eventdetail=\"cloud.google.com/solutions/ai/\" track-metadata-position=\"footer\" track-type=\"footer link\" track-name=\"artificial intelligence\" track-metadata-child_headline=\"solutions\" track-metadata-module=\"footer\">\n\n\n          Artificial Intelligence\n\n        </a>\n\n\n      </li>\n\n      <li class=\"devsite-footer-linkbox-item\">\n\n        <a href=\"/solutions/security/\" class=\"devsite-footer-linkbox-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Link (index 6)\" track-metadata-position=\"footer\" track-type=\"footer link\" track-metadata-module=\"footer\" track-metadata-eventdetail=\"cloud.google.com/solutions/security/\" track-metadata-child_headline=\"solutions\" track-name=\"security\">\n\n\n          Security\n\n        </a>\n\n\n      </li>\n\n      <li class=\"devsite-footer-linkbox-item\">\n\n        <a href=\"https://workspace.google.com/enterprise/\" class=\"devsite-footer-linkbox-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Link (index 7)\" track-name=\"productivity and work transformation\" track-metadata-module=\"footer\" track-metadata-child_headline=\"solutions\" track-metadata-eventdetail=\"workspace.google.com/enterprise/\" track-type=\"footer link\" track-metadata-position=\"footer\" target=\"_blank\">\n\n\n          Productivity &amp; work transformation\n\n        </a>\n\n\n      </li>\n\n      <li class=\"devsite-footer-linkbox-item\">\n\n        <a href=\"/solutions/#industry-solutions\" class=\"devsite-footer-linkbox-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Link (index 8)\" track-metadata-child_headline=\"solutions\" track-metadata-eventdetail=\"cloud.google.com/solutions/#industry-solutions\" track-metadata-position=\"footer\" track-name=\"industry solutions\" track-type=\"footer link\" track-metadata-module=\"footer\">\n\n\n          Industry solutions\n\n        </a>\n\n\n      </li>\n\n      <li class=\"devsite-footer-linkbox-item\">\n\n        <a href=\"/solutions/devops/\" class=\"devsite-footer-linkbox-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Link (index 9)\" track-metadata-eventdetail=\"cloud.google.com/solutions/devops/\" track-type=\"footer link\" track-name=\"devops solutions\" track-metadata-module=\"footer\" track-metadata-position=\"footer\" track-metadata-child_headline=\"solutions\">\n\n\n          DevOps solutions\n\n        </a>\n\n\n      </li>\n\n      <li class=\"devsite-footer-linkbox-item\">\n\n        <a href=\"/solutions/#section-14\" class=\"devsite-footer-linkbox-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Link (index 10)\" track-metadata-eventdetail=\"cloud.google.com/solutions/#section-14\" track-metadata-module=\"footer\" track-name=\"small business solutions\" track-metadata-child_headline=\"solutions\" track-type=\"footer link\" track-metadata-position=\"footer\">\n\n\n          Small business solutions\n\n        </a>\n\n\n      </li>\n\n      <li class=\"devsite-footer-linkbox-item\">\n\n        <a href=\"/solutions/\" class=\"devsite-footer-linkbox-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Link (index 11)\" track-metadata-position=\"footer\" track-metadata-child_headline=\"solutions\" track-metadata-eventdetail=\"cloud.google.com/solutions/\" track-metadata-module=\"footer\" track-name=\"see all solutions\" track-type=\"footer link\">\n\n\n\n\n\n          See all solutions\n\n        </a>\n\n\n      </li>\n\n    </ul>\n  </li>\n\n  <li class=\"devsite-footer-linkbox \">\n  <h3 class=\"devsite-footer-linkbox-heading no-link\">Resources</h3>\n    <ul class=\"devsite-footer-linkbox-list\">\n\n      <li class=\"devsite-footer-linkbox-item\">\n\n        <a href=\"/docs/\" class=\"devsite-footer-linkbox-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Link (index 1)\" track-metadata-child_headline=\"resources\" track-type=\"footer link\" track-metadata-eventdetail=\"cloud.google.com/docs/\" track-name=\"google cloud documentation\" track-metadata-module=\"footer\" track-metadata-position=\"footer\">\n\n\n          Google Cloud documentation\n\n        </a>\n\n\n      </li>\n\n      <li class=\"devsite-footer-linkbox-item\">\n\n        <a href=\"/docs/get-started/\" class=\"devsite-footer-linkbox-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Link (index 2)\" track-metadata-child_headline=\"resources\" track-type=\"footer link\" track-metadata-module=\"footer\" track-metadata-eventdetail=\"cloud.google.com/docs/get-started/\" track-metadata-position=\"footer\" track-name=\"google cloud quickstarts\">\n\n\n          Google Cloud quickstarts\n\n        </a>\n\n\n      </li>\n\n      <li class=\"devsite-footer-linkbox-item\">\n\n        <a href=\"/marketplace/\" class=\"devsite-footer-linkbox-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Link (index 3)\" track-name=\"google cloud marketplace\" track-metadata-eventdetail=\"cloud.google.com/marketplace/\" track-type=\"footer link\" track-metadata-position=\"footer\" track-metadata-module=\"footer\" track-metadata-child_headline=\"resources\">\n\n\n          Google Cloud Marketplace\n\n        </a>\n\n\n      </li>\n\n      <li class=\"devsite-footer-linkbox-item\">\n\n        <a href=\"/discover/\" class=\"devsite-footer-linkbox-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Link (index 4)\" track-type=\"footer link\" track-metadata-module=\"footer\" track-metadata-child_headline=\"resources\" track-metadata-eventdetail=\"learn/\" track-name=\"learn about cloud computing\" track-metadata-position=\"footer\">\n\n\n          Learn about cloud computing\n\n        </a>\n\n\n      </li>\n\n      <li class=\"devsite-footer-linkbox-item\">\n\n        <a href=\"/support-hub/\" class=\"devsite-footer-linkbox-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Link (index 5)\" track-name=\"support\" track-metadata-child_headline=\"resources\" track-metadata-position=\"footer\" track-metadata-module=\"footer\" track-type=\"footer link\" track-metadata-eventdetail=\"cloud.google.com/support-hub/\">\n\n\n          Support\n\n        </a>\n\n\n      </li>\n\n      <li class=\"devsite-footer-linkbox-item\">\n\n        <a href=\"/docs/samples\" class=\"devsite-footer-linkbox-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Link (index 6)\" track-metadata-child_headline=\"resources\" track-metadata-position=\"footer\" track-metadata-eventdetail=\"cloud.google.com/docs/samples\" track-metadata-module=\"footer\" track-name=\"code samples\" track-type=\"footer link\">\n\n\n          Code samples\n\n        </a>\n\n\n      </li>\n\n      <li class=\"devsite-footer-linkbox-item\">\n\n        <a href=\"/architecture/\" class=\"devsite-footer-linkbox-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Link (index 7)\" track-name=\"cloud architecture center\" track-metadata-eventdetail=\"cloud.google.com/architecture/\" track-metadata-child_headline=\"resources\" track-metadata-module=\"footer\" track-metadata-position=\"footer\" track-type=\"footer link\">\n\n\n          Cloud Architecture Center\n\n        </a>\n\n\n      </li>\n\n      <li class=\"devsite-footer-linkbox-item\">\n\n        <a href=\"/learn/training/\" class=\"devsite-footer-linkbox-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Link (index 8)\" track-name=\"training\" track-metadata-eventdetail=\"cloud.google.com/training/\" track-metadata-module=\"footer\" track-metadata-position=\"footer\" track-type=\"footer link\" track-metadata-child_headline=\"resources\">\n\n\n          Training\n\n        </a>\n\n\n      </li>\n\n      <li class=\"devsite-footer-linkbox-item\">\n\n        <a href=\"/learn/certification/\" class=\"devsite-footer-linkbox-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Link (index 9)\" track-type=\"footer link\" track-metadata-child_headline=\"resources\" track-name=\"certifications\" track-metadata-position=\"footer\" track-metadata-eventdetail=\"cloud.google.com/certification\" track-metadata-module=\"footer\">\n\n\n          Certifications\n\n        </a>\n\n\n      </li>\n\n      <li class=\"devsite-footer-linkbox-item\">\n\n        <a href=\"//developers.google.com\" class=\"devsite-footer-linkbox-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Link (index 10)\" track-metadata-child_headline=\"resources\" track-metadata-eventdetail=\"developers.google.com\" track-metadata-module=\"footer\" track-name=\"google developers\" target=\"_blank\" track-type=\"footer link\" track-metadata-position=\"footer\">\n\n\n          Google for Developers\n\n        </a>\n\n\n      </li>\n\n      <li class=\"devsite-footer-linkbox-item\">\n\n        <a href=\"/startup/\" class=\"devsite-footer-linkbox-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Link (index 11)\" track-metadata-module=\"footer\" track-type=\"footer link\" track-name=\"google cloud for startups\" track-metadata-position=\"footer\" track-metadata-eventdetail=\"cloud.google.com/startup/\" track-metadata-child_headline=\"resources\">\n\n\n          Google Cloud for Startups\n\n        </a>\n\n\n      </li>\n\n      <li class=\"devsite-footer-linkbox-item\">\n\n        <a href=\"//status.cloud.google.com\" class=\"devsite-footer-linkbox-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Link (index 12)\" track-type=\"footer link\" track-metadata-child_headline=\"resources\" track-metadata-module=\"footer\" target=\"_blank\" track-name=\"system status\" track-metadata-position=\"footer\" track-metadata-eventdetail=\"status.cloud.google.com\">\n\n\n          System status\n\n        </a>\n\n\n      </li>\n\n      <li class=\"devsite-footer-linkbox-item\">\n\n        <a href=\"/release-notes\" class=\"devsite-footer-linkbox-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Link (index 13)\" track-metadata-child_headline=\"resources\" track-metadata-module=\"footer\" track-name=\"release notes\" track-metadata-position=\"footer\" track-type=\"footer link\" track-metadata-eventdetail=\"cloud.google.com/release-notes/\">\n\n\n\n\n\n          Release Notes\n\n        </a>\n\n\n      </li>\n\n    </ul>\n  </li>\n\n  <li class=\"devsite-footer-linkbox \">\n  <h3 class=\"devsite-footer-linkbox-heading no-link\">Engage</h3>\n    <ul class=\"devsite-footer-linkbox-list\">\n\n      <li class=\"devsite-footer-linkbox-item\">\n\n        <a href=\"/contact/\" class=\"devsite-footer-linkbox-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Link (index 1)\" track-metadata-module=\"footer\" track-type=\"footer link\" track-metadata-eventdetail=\"cloud.google.com/contact/\" track-metadata-child_headline=\"engage\" track-metadata-position=\"footer\" track-name=\"contact sales\">\n\n\n          Contact sales\n\n        </a>\n\n\n      </li>\n\n      <li class=\"devsite-footer-linkbox-item\">\n\n        <a href=\"//cloud.google.com/find-a-partner\" class=\"devsite-footer-linkbox-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Link (index 2)\" track-metadata-child_headline=\"engage\" target=\"_blank\" track-metadata-eventdetail=\"cloud.google.com/find-a-partner\" track-type=\"footer link\" track-name=\"find a partner\" track-metadata-module=\"footer\" track-metadata-position=\"footer\">\n\n\n          Find a Partner\n\n        </a>\n\n\n      </li>\n\n      <li class=\"devsite-footer-linkbox-item\">\n\n        <a href=\"/partners/become-a-partner/\" class=\"devsite-footer-linkbox-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Link (index 3)\" track-metadata-position=\"footer\" track-metadata-module=\"footer\" track-metadata-eventdetail=\"cloud.google.com/partners/become-a-partner/\" track-metadata-child_headline=\"engage\" track-name=\"become a partner\" track-type=\"footer link\">\n\n\n          Become a Partner\n\n        </a>\n\n\n      </li>\n\n      <li class=\"devsite-footer-linkbox-item\">\n\n        <a href=\"/events/\" class=\"devsite-footer-linkbox-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Link (index 4)\" track-metadata-module=\"footer\" track-type=\"footer link\" track-name=\"events\" track-metadata-child_headline=\"engage\" track-metadata-eventdetail=\"cloud.withgoogle.com/events\" track-metadata-position=\"footer\">\n\n\n          Events\n\n        </a>\n\n\n      </li>\n\n      <li class=\"devsite-footer-linkbox-item\">\n\n        <a href=\"/podcasts/\" class=\"devsite-footer-linkbox-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Link (index 5)\" track-metadata-module=\"footer\" track-name=\"podcasts\" track-metadata-child_headline=\"engage\" track-metadata-position=\"footer\" target=\"_blank\" track-type=\"footer link\" track-metadata-eventdetail=\"cloud.google.com/podcasts/\" rel=\"noopener\">\n\n\n          Podcasts\n\n        </a>\n\n\n      </li>\n\n      <li class=\"devsite-footer-linkbox-item\">\n\n        <a href=\"/developers/\" class=\"devsite-footer-linkbox-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Link (index 6)\" track-type=\"footer link\" track-metadata-eventdetail=\"cloud.google.com/developers/\" track-metadata-child_headline=\"engage\" track-metadata-position=\"footer\" track-name=\"developer center\" track-metadata-module=\"footer\">\n\n\n          Developer Center\n\n        </a>\n\n\n      </li>\n\n      <li class=\"devsite-footer-linkbox-item\">\n\n        <a href=\"https://www.googlecloudpresscorner.com/\" class=\"devsite-footer-linkbox-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Link (index 7)\" rel=\"noopener\" track-metadata-child_headline=\"engage\" target=\"_blank\" track-name=\"press corner\" track-metadata-eventdetail=\"www.googlecloudpresscorner.com\" track-type=\"footer link\" track-metadata-module=\"footer\" track-metadata-position=\"footer\">\n\n\n          Press Corner\n\n        </a>\n\n\n      </li>\n\n      <li class=\"devsite-footer-linkbox-item\">\n\n        <a href=\"//www.youtube.com/googlecloud\" class=\"devsite-footer-linkbox-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Link (index 8)\" track-type=\"footer link\" track-metadata-eventdetail=\"www.youtube.com/googlecloud\" rel=\"noopener\" target=\"_blank\" track-name=\"google cloud on youtube\" track-metadata-position=\"footer\" track-metadata-child_headline=\"engage\" track-metadata-module=\"footer\">\n\n\n          Google Cloud on YouTube\n\n        </a>\n\n\n      </li>\n\n      <li class=\"devsite-footer-linkbox-item\">\n\n        <a href=\"//www.youtube.com/googlecloudplatform\" class=\"devsite-footer-linkbox-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Link (index 9)\" track-metadata-position=\"footer\" track-metadata-module=\"footer\" track-metadata-child_headline=\"engage\" track-type=\"footer link\" target=\"_blank\" track-metadata-eventdetail=\"www.youtube.com/googlecloudplatform\" rel=\"noopener\" track-name=\"google cloud tech on youtube\">\n\n\n          Google Cloud Tech on YouTube\n\n        </a>\n\n\n      </li>\n\n      <li class=\"devsite-footer-linkbox-item\">\n\n        <a href=\"//x.com/googlecloud\" class=\"devsite-footer-linkbox-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Link (index 10)\" rel=\"noopener\" target=\"_blank\" track-type=\"footer link\" track-metadata-position=\"footer\" track-metadata-child_headline=\"engage\" track-name=\"follow on x\" track-metadata-eventdetail=\"x.com/googlecloud\" track-metadata-module=\"footer\">\n\n\n          Follow on X\n\n        </a>\n\n\n      </li>\n\n      <li class=\"devsite-footer-linkbox-item\">\n\n        <a href=\"//userresearch.google.com/?reserved=1&amp;utm_source=website&amp;Q_Language=en&amp;utm_medium=own_srch&amp;utm_campaign=CloudWebFooter&amp;utm_term=0&amp;utm_content=0&amp;productTag=clou&amp;campaignDate=jul19&amp;pType=devel&amp;referral_code=jk212693\" class=\"devsite-footer-linkbox-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Link (index 11)\" track-name=\"join user research\" track-type=\"footer link\" track-metadata-position=\"footer\" target=\"_blank\" track-metadata-module=\"footer\" track-metadata-eventdetail=\"userresearch.google.com/?reserved=1&amp;utm_source=website&amp;Q_Language=en&amp;utm_medium=own_srch&amp;utm_campaign=CloudWebFooter&amp;utm_term=0&amp;utm_content=0&amp;productTag=clou&amp;campaignDate=jul19&amp;pType=devel&amp;referral_code=jk212693\" track-metadata-child_headline=\"engage\">\n\n\n          Join User Research\n\n        </a>\n\n\n      </li>\n\n      <li class=\"devsite-footer-linkbox-item\">\n\n        <a href=\"//careers.google.com/cloud\" class=\"devsite-footer-linkbox-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Link (index 12)\" track-metadata-position=\"footer\" target=\"_blank\" track-metadata-eventdetail=\"careers.google.com/cloud\" track-name=\"we are hiring join google cloud\" track-metadata-child_headline=\"engage\" track-metadata-module=\"footer\" track-type=\"footer link\">\n\n\n          We're hiring. Join Google Cloud!\n\n        </a>\n\n\n      </li>\n\n      <li class=\"devsite-footer-linkbox-item\">\n\n        <a href=\"https://www.googlecloudcommunity.com/\" class=\"devsite-footer-linkbox-link gc-analytics-event\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Link (index 13)\" track-metadata-position=\"footer\" track-type=\"footer link\" track-metadata-module=\"footer\" rel=\"noopener\" track-name=\"google cloud community\" target=\"_blank\" track-metadata-child_headline=\"engage\" track-metadata-eventdetail=\"www.googlecloudcommunity.com\">\n\n\n\n\n\n          Google Cloud Community\n\n        </a>\n\n\n      </li>\n\n    </ul>\n  </li>\n\n</ul>\n\n</nav>\n\n      </devsite-footer-linkboxes>\n      <devsite-footer-utility class=\"devsite-footer\">\n\n\n\n<div class=\"devsite-footer-utility nocontent\">\n\n\n\n<nav class=\"devsite-footer-utility-links\" aria-label=\"Utility links\">\n\n  <ul class=\"devsite-footer-utility-list\">\n\n    <li class=\"devsite-footer-utility-item\n               \">\n\n\n      <a class=\"devsite-footer-utility-link gc-analytics-event\" href=\"//about.google/\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer About Google link\" track-type=\"footer link\" target=\"_blank\" track-metadata-module=\"utility footer\" track-name=\"about google\" track-metadata-position=\"footer\" track-metadata-eventdetail=\"//about.google/\">\n        About Google\n      </a>\n\n    </li>\n\n    <li class=\"devsite-footer-utility-item\n               devsite-footer-privacy-link\">\n\n\n      <a class=\"devsite-footer-utility-link gc-analytics-event\" href=\"//policies.google.com/privacy\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Privacy link\" track-name=\"privacy\" track-metadata-eventdetail=\"//policies.google.com/privacy\" track-metadata-module=\"utility footer\" track-type=\"footer link\" track-metadata-position=\"footer\" target=\"_blank\">\n        Privacy\n      </a>\n\n    </li>\n\n    <li class=\"devsite-footer-utility-item\n               \">\n\n\n      <a class=\"devsite-footer-utility-link gc-analytics-event\" href=\"//www.google.com/intl/en/policies/terms/regional.html\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Site terms link\" track-metadata-eventdetail=\"//www.google.com/intl/en/policies/terms/regional.html\" track-metadata-position=\"footer\" track-metadata-module=\"utility footer\" track-name=\"site terms\" track-type=\"footer link\" target=\"_blank\">\n        Site terms\n      </a>\n\n    </li>\n\n    <li class=\"devsite-footer-utility-item\n               \">\n\n\n      <a class=\"devsite-footer-utility-link gc-analytics-event\" href=\"/product-terms/\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Google Cloud terms link\" track-metadata-eventdetail=\"/product-terms/\" track-metadata-module=\"utility footer\" track-name=\"google cloud terms\" track-type=\"footer link\" track-metadata-position=\"footer\">\n        Google Cloud terms\n      </a>\n\n    </li>\n\n    <li class=\"devsite-footer-utility-item\n               glue-cookie-notification-bar-control\">\n\n\n      <a class=\"devsite-footer-utility-link gc-analytics-event\" href=\"#\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Manage cookies link\" track-type=\"footer link\" track-metadata-module=\"utility footer\" track-metadata-eventdetail=\"#\" track-metadata-position=\"footer\" track-name=\"Manage cookies\" aria-hidden=\"true\">\n        Manage cookies\n      </a>\n\n    </li>\n\n    <li class=\"devsite-footer-utility-item\n               devsite-footer-carbon-button\">\n\n\n      <a class=\"devsite-footer-utility-link gc-analytics-event\" href=\"/sustainability\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Our third decade of climate action: join us link\" track-type=\"footer link\" track-name=\"Our third decade of climate action: join us\" track-metadata-position=\"footer\" track-metadata-module=\"utility footer\" track-metadata-eventdetail=\"/sustainability/\">\n        Our third decade of climate action: join us\n      </a>\n\n    </li>\n\n    <li class=\"devsite-footer-utility-item\n               devsite-footer-utility-button\">\n\n      <span class=\"devsite-footer-utility-description\">Sign up for the Google Cloud newsletter</span>\n\n\n      <a class=\"devsite-footer-utility-link gc-analytics-event\" href=\"/newsletter/\" data-category=\"Site-Wide Custom Events\" data-label=\"Footer Subscribe link\" track-metadata-module=\"utility footer\" track-type=\"footer link\" track-name=\"subscribe\" track-metadata-position=\"footer\" track-metadata-eventdetail=\"/newsletter/\">\n        Subscribe\n      </a>\n\n    </li>\n\n  </ul>\n\n\n<devsite-language-selector aria-label=\"Select your language preference.\">\n<ul role=\"presentation\">\n\n\n  <li role=\"presentation\">\n    <a role=\"menuitem\" lang=\"en\" aria-current=\"true\" href=\"https://cloud.google.com/data-fusion/docs/version-support-policy\">English</a>\n  </li>\n\n  <li role=\"presentation\">\n    <a role=\"menuitem\" lang=\"de\" href=\"https://cloud.google.com/data-fusion/docs/version-support-policy?hl=de\">Deutsch</a>\n  </li>\n\n  <li role=\"presentation\">\n    <a role=\"menuitem\" lang=\"es-419\" href=\"https://cloud.google.com/data-fusion/docs/version-support-policy?hl=es-419\">Español – América Latina</a>\n  </li>\n\n  <li role=\"presentation\">\n    <a role=\"menuitem\" lang=\"fr\" href=\"https://cloud.google.com/data-fusion/docs/version-support-policy?hl=fr\">Français</a>\n  </li>\n\n  <li role=\"presentation\">\n    <a role=\"menuitem\" lang=\"id\" href=\"https://cloud.google.com/data-fusion/docs/version-support-policy?hl=id\">Indonesia</a>\n  </li>\n\n  <li role=\"presentation\">\n    <a role=\"menuitem\" lang=\"it\" href=\"https://cloud.google.com/data-fusion/docs/version-support-policy?hl=it\">Italiano</a>\n  </li>\n\n  <li role=\"presentation\">\n    <a role=\"menuitem\" lang=\"pt-br\" href=\"https://cloud.google.com/data-fusion/docs/version-support-policy?hl=pt-br\">Português – Brasil</a>\n  </li>\n\n  <li role=\"presentation\">\n    <a role=\"menuitem\" lang=\"zh-cn\" href=\"https://cloud.google.com/data-fusion/docs/version-support-policy?hl=zh-cn\">中文 – 简体</a>\n  </li>\n\n  <li role=\"presentation\">\n    <a role=\"menuitem\" lang=\"ja\" href=\"https://cloud.google.com/data-fusion/docs/version-support-policy?hl=ja\">日本語</a>\n  </li>\n\n  <li role=\"presentation\">\n    <a role=\"menuitem\" lang=\"ko\" href=\"https://cloud.google.com/data-fusion/docs/version-support-policy?hl=ko\">한국어</a>\n  </li>\n\n</ul>\n</devsite-language-selector>\n\n</nav>\n</div>\n\n      </devsite-footer-utility>\n      <devsite-panel always-on-top=\"\" height-visual-offset=\"24\" style=\"height: auto;\">\n<cloud-shell-pane always-on-top=\"\" enable-fte-user-flow=\"\" height-visual-offset=\"24\">\n<!---->\n  <div class=\"resizer\" role=\"separator\" aria-valuemin=\"0\" aria-valuemax=\"0\">\n    <!--?lit$997324233$-->\n    <div class=\"grabber-focus\">\n      <div class=\"grabber\"></div>\n    </div>\n  </div>\n  <devsite-shell>\n  </devsite-shell>\n  <!--?lit$997324233$--> <div class=\"free-trial-banner\">\n  <a class=\"close-btn button-white material-icons\" aria-label=\"Close Cloud Shell\">close</a>\n  <div class=\"banner-text\">\n    <h3><!--?lit$997324233$-->Welcome to Cloud Shell</h3>\n    <p><!--?lit$997324233$-->Cloud Shell is a development environment that you can use in the browser:</p>\n    <ul>\n      <li><!--?lit$997324233$-->Activate Cloud Shell to explore Google Cloud with a terminal and an editor</li>\n      <li><!--?lit$997324233$-->Start a free trial to get $300 in free credits</li>\n    </ul>\n    <div class=\"row\">\n      <button class=\"button-blue\"><!--?lit$997324233$-->Activate Cloud Shell\n      </button>\n      <button>\n        <!--?lit$997324233$-->Start a free trial</button>\n    </div>\n  </div>\n  <!--?lit$997324233$--><img src=\"https://www.gstatic.com/devrel-devsite/prod/v937c5f592532c0ad2ebbf299686fcceed4f5934a648172aa45e00618ae0982d7/cloud/images/cloud-shell-cta-art.png\">\n</div>\n</cloud-shell-pane>\n</devsite-panel>\n\n    </section></section>\n  <devsite-sitemask></devsite-sitemask>\n  <devsite-snackbar style=\"bottom: 0px;\">\n</devsite-snackbar>\n  <devsite-tooltip></devsite-tooltip>\n  <devsite-heading-link></devsite-heading-link>\n  <devsite-analytics analytics-iframe=\"\" enable-cb=\"\">\n\n      <script type=\"application/json\" analytics=\"\">[]</script>\n<script type=\"application/json\" tag-management=\"\">{&#34;ga4&#34;: [], &#34;ga4p&#34;: [], &#34;gtm&#34;: [{&#34;id&#34;: &#34;GTM-5CVQBG&#34;, &#34;purpose&#34;: 1}], &#34;parameters&#34;: {&#34;internalUser&#34;: &#34;True&#34;, &#34;language&#34;: {&#34;machineTranslated&#34;: &#34;False&#34;, &#34;requested&#34;: &#34;en&#34;, &#34;served&#34;: &#34;en&#34;}, &#34;pageType&#34;: &#34;article&#34;, &#34;projectName&#34;: &#34;Cloud Data Fusion Documentation&#34;, &#34;signedIn&#34;: &#34;True&#34;, &#34;tenant&#34;: &#34;cloud&#34;, &#34;recommendations&#34;: {&#34;sourcePage&#34;: &#34;&#34;, &#34;sourceType&#34;: 0, &#34;sourceRank&#34;: 0, &#34;sourceIdenticalDescriptions&#34;: 0, &#34;sourceTitleWords&#34;: 0, &#34;sourceDescriptionWords&#34;: 0, &#34;experiment&#34;: &#34;&#34;}, &#34;experiment&#34;: {&#34;ids&#34;: &#34;&#34;}}}</script>\n\n  <iframe sandbox=\"allow-same-origin allow-scripts allow-forms allow-popups allow-popups-to-escape-sandbox allow-storage-access-by-user-activation\" src=\"https://developers.google.com/_d/analytics-iframe\"></iframe></devsite-analytics>\n\n    <devsite-badger></devsite-badger>\n\n  <cloudx-user></cloudx-user>\n\n\n<cloudx-free-trial-eligible-store freetrialeligible=\"false\"></cloudx-free-trial-eligible-store>\n\n\n<cloudx-pricing-socket></cloudx-pricing-socket>\n<cloudx-experiments type=\"TestAACodivertedExperiment\" path=\"/virtual/TestAACodivertedExperiment/configureExperiment\" location=\"IN\" variant=\"variant1\"></cloudx-experiments>\n<cloudx-experiment-ids usercountry=\"IN\" devsiteexperimentidlist=\"[39300012, 39300022, 39300118, 39300195, 39300241, 39300317, 39300320, 39300324, 39300346, 39300354, 39300364, 39300373, 39300411, 39300422, 39300435, 39300471, 39300487, 39300496, 39300498]\">\n</cloudx-experiment-ids>\n  <script nonce=\"\">\n</script>\n    <devsite-a11y-announce></devsite-a11y-announce>\n  </body>\n</html>\n"
  },
  {
    "path": "test-data/web/static/cloud-google-com-kubernetes-engine-docs-release-schedule",
    "content": "<!doctype html>\n<html lang=\"en\"dir=\"ltr\">\n  <body>\n<h2 id=\"schedule-for-release-channels\" data-text=\"Estimated schedule for release channels\" tabindex=\"-1\">Estimated schedule for release channels</h2>\n\n<p>GKE automatically upgrades clusters in a release channel on or\nafter the dates specified in the <em>Auto Upgrade</em> column of the following\nschedule. The patches of a minor version remain available in all release\nchannels until the <em>end of standard support</em> (formerly known as <em>end of life</em>),\nexcept for clusters enrolled in the Extended channel, where the minor version\nand its patches remain available until the <em>end of extended support</em>. When\nchoosing a version older than the default version for the channel, you can use\n<a href=\"/kubernetes-engine/docs/concepts/maintenance-windows-and-exclusions#exclusions\">maintenance exclusions</a>\nto prevent a cluster from being automatically upgraded until its end of support\ndate.</p>\n\n<p>Dates are best-effort predictions and are updated periodically when new\ninformation becomes available. Consider the <a href=\"/kubernetes-engine/docs/release-schedule?hl=en\">English language\ndocumentation</a> as the source of\ntruth if the dates in other languages differ due to delays in translation.</p>\n\n<p>See the following schedule for clusters enrolled in a <a href=\"/kubernetes-engine/docs/concepts/release-channels#what_versions_are_available_in_a_channel\">release\nchannel</a>\nfollow this schedule:</p>\n\n<table class=\"vertical-rules gke-release-schedule\">\n  <thead>\n    <tr>\n      <th width=\"10%\" rowspan=\"2\">\n        Minor version (<a href=\"https://kubernetes.io/releases/\">release date</a>)</th>\n      <th style=\"text-align:center\" colspan=\"2\">Rapid</th>\n      <th style=\"text-align:center\" colspan=\"2\">Regular</th>\n      <th style=\"text-align:center\" colspan=\"2\">Stable</th>\n      <th style=\"text-align:center\" colspan=\"2\">Extended</th>\n      <th width=\"10%\" rowspan=\"2\">End of standard support (formerly <em>end of life</em>)<sup id=\"fnref3\"><a href=\"#fn3\" rel=\"footnote\">3</a></sup></th>\n      <th width=\"10%\" rowspan=\"2\">End of extended support<sup id=\"fnref3\"><a href=\"#fn3\" rel=\"footnote\">3</a></sup></th>\n    </tr>\n    <tr>\n      <th width=\"10%\">Available<sup id=\"fnref1\"><a href=\"#fn1\" rel=\"footnote\">1</a></sup></th> <! -- Rapid available -->\n      <th width=\"10%\">Auto Upgrade<sup id=\"fnref2\"><a href=\"#fn2\" rel=\"footnote\">2</a></sup></th>   <! -- Rapid auto upgrade -->\n      <th width=\"10%\">Available<sup id=\"fnref1\"><a href=\"#fn1\" rel=\"footnote\">1</a></sup></th> <! -- Regular available -->\n      <th width=\"10%\">Auto Upgrade<sup id=\"fnref2\"><a href=\"#fn2\" rel=\"footnote\">2</a></sup></th>   <! -- Regular auto upgrade -->\n      <th width=\"10%\">Available<sup id=\"fnref1\"><a href=\"#fn1\" rel=\"footnote\">1</a></sup></th> <! -- Stable available -->\n      <th width=\"10%\">Auto Upgrade<sup id=\"fnref2\"><a href=\"#fn2\" rel=\"footnote\">2</a></sup></th>   <! -- Stable auto upgrade -->\n      <th width=\"10%\">Available<sup id=\"fnref1\"><a href=\"#fn1\" rel=\"footnote\">1</a></sup></th> <! -- Extended available -->\n      <th width=\"10%\">Auto Upgrade<sup id=\"fnref2\"><a href=\"#fn2\" rel=\"footnote\">2</a></sup></th>   <! -- Extended auto upgrade -->\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <td>1.26</td>\n      <td>2023-02-21</td> <! -- Rapid available -->\n      <td>2023-06-16</td> <! -- Rapid auto upgrade -->\n      <td>2023-04-07</td> <! -- Regular available -->\n      <td>2023-06-23</td> <! -- Regular auto upgrade -->\n      <td>2023-06-16</td> <! -- Stable available -->\n      <td>2024-01-25</td> <! -- Stable auto upgrade -->\n      <td>N/A<sup id=\"fnref5\"><a href=\"#fn5\" rel=\"footnote\">5</a></sup></td> <! -- Extended not available before 1.27 -->\n      <td>N/A<sup id=\"fnref5\"><a href=\"#fn5\" rel=\"footnote\">5</a></sup></td> <! -- Extended not available before 1.27 -->\n      <td>2024-06-30<sup id=\"fnref4\"><a href=\"#fn4\" rel=\"footnote\">4</a></sup></td> <! -- End of standard support -->\n      <td>N/A<sup id=\"fnref5\"><a href=\"#fn5\" rel=\"footnote\">5</a></sup></td> <! -- Extended not available before 1.27 -->\n    </tr>\n    <tr>\n      <td>1.27</td>\n      <td>2023-06-09</td> <! -- Rapid available -->\n      <td>2023-08-09</td> <! -- Rapid auto upgrade -->\n      <td>2023-06-16</td> <! -- Regular available -->\n      <td>2024-02-03</td> <! -- Regular auto upgrade -->\n      <td>2023-07-06</td> <! -- Stable available -->\n      <td>2024-04-29</td> <! -- Stable auto upgrade -->\n      <td>2023-06-16</td> <! -- Extended available -->\n      <td>2025-04-14</td> <! -- Extended auto upgrade -->\n      <td>2024-10-01</td> <! -- End of standard support -->\n      <td>2025-06-14</td> <! -- End of extended support -->\n    </tr>\n    <tr>\n      <td>1.28</td>\n      <td>2023-09-04</td> <! -- Rapid available -->\n      <td>2024-01-05</td> <! -- Rapid auto upgrade -->\n      <td>2023-11-30</td> <! -- Regular available -->\n      <td>2024-06-11</td> <! -- Regular auto upgrade -->\n      <td>2024-01-05</td> <! -- Stable available -->\n      <td>2024-07-23</td> <! -- Stable auto upgrade -->\n      <td>2023-11-30</td>  <! -- Extended available -->\n      <td>2025-10-04</td> <! -- Extended auto upgrade -->\n      <td>2025-02-04</td> <! -- End of standard support -->\n      <td>2025-12-04</td> <! -- End of extended support -->\n    </tr>\n    <tr>\n      <td>1.29</td>\n      <td>2024-01-05</td> <! -- Rapid available -->\n      <td>2024-04-15</td> <! -- Rapid auto upgrade -->\n      <td>2024-01-25</td> <! -- Regular available -->\n      <td>2024-07-09</td> <! -- Regular auto upgrade -->\n      <td>2024-06-11</td> <! -- Stable available -->\n      <td>2024-08-09</td> <! -- Stable auto upgrade -->\n      <td>2024-01-25</td> <! -- Extended available -->\n      <td>2025-11-25</td> <! -- Extended auto upgrade -->\n      <td>2025-03-21</td> <! -- End of standard support -->\n      <td>2026-01-25</td> <! -- End of extended support -->\n    </tr>\n    <tr>\n      <td>1.30</td>\n      <td>2024-04-29</td> <! -- Rapid available -->\n      <td>2024-07-30</td> <! -- Rapid auto upgrade -->\n      <td>2024-07-30</td> <! -- Regular available -->\n      <td>2024-09-17</td> <! -- Regular auto upgrade -->\n      <td>2024-08-13</td> <! -- Stable available -->\n      <td>2024-09-24</td> <! -- Stable auto upgrade -->\n      <td>2024-07-30</td> <! -- Extended available -->\n      <td>2026-04</td> <! -- Extended auto upgrade -->\n      <td>2025-09-30</td> <! -- End of standard support -->\n      <td>2026-07-30</td> <! -- End of extended support -->\n    </tr>\n    <tr>\n      <td>1.31</td>\n      <td>2024-08-20</td> <! -- Rapid available -->\n      <td>2024-09-17</td> <! -- Rapid auto upgrade -->\n      <td><i>2024-10</i><sup id=\"fnref6\"><a href=\"#fn6\" rel=\"footnote\">6</a></sup></td> <! -- Regular available -->\n      <td><i>2024-11</i><sup id=\"fnref6\"><a href=\"#fn6\" rel=\"footnote\">6</a></sup></td> <! -- Regular auto upgrade -->\n      <td><i>2024-10</i><sup id=\"fnref6\"><a href=\"#fn6\" rel=\"footnote\">6</a></sup></td> <! -- Stable available -->\n      <td><i>2024-12</i><sup id=\"fnref6\"><a href=\"#fn6\" rel=\"footnote\">6</a></sup></td> <! -- Stable auto upgrade -->\n      <td><i>2024-10</i><sup id=\"fnref6\"><a href=\"#fn6\" rel=\"footnote\">6</a></sup></td> <! -- Extended available -->\n      <td>2026-04</td> <! -- Extended auto upgrade -->\n      <td><i>2025-Q4</i><sup id=\"fnref6\"><a href=\"#fn6\" rel=\"footnote\">6</a></sup></td> <! -- End of standard support -->\n      <td><i>2026-Q4</i><sup id=\"fnref6\"><a href=\"#fn6\" rel=\"footnote\">6</a></sup></td> <! -- End of extended support -->\n    </tr>\n  </tbody>\n</table>\n  </nav>\n  </body>\n</html>\n"
  },
  {
    "path": "website/api_render.py",
    "content": "#!/usr/bin/env python3\n\n# Copyright 2021 Google LLC\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n# pylint: disable=cyclic-import\n\"\"\"Generates API documentation for queries modules\"\"\"\nimport textwrap\nfrom pathlib import Path\n\nimport pdoc\n\npwd = Path().parent\nmodules = pwd / '..' / 'gcpdiag'\noutput = pwd / 'content' / 'en' / 'docs' / 'development' / 'api'\n\npdoc.render.configure(template_directory=pwd / 'assets' / 'pdoc_templates',\n                      docformat='google')\n\n\ndef customize_index_file(file_directory, page_title, page_link_title,\n                         page_weight, page_description) -> None:\n  \"\"\"pdoc creates an index.html file per directory, however Hugo expects _index.html file.\n    This method removes the default index.html file and creates a custom one per directory\n\n  Args:\n      file_directory (pathlib.PosixPath): Path to parent directory containing index.html file.\n      page_tile (str): Title for the index page.\n      page_link_title (str): Used for creating a link to the index page.\n      page_weight (int): Used for ordering the index page in lists.\n      page_description (str):\n\n  \"\"\"\n  filename = file_directory / 'index.html'\n  # For backward compartibility with 3.7 without missing_ok flag\n  try:\n    filename.unlink()\n  except FileNotFoundError:\n    pass\n\n  new_filename = file_directory / '_index.html'\n\n  try:\n    new_filename.unlink()\n  except FileNotFoundError:\n    pass\n\n  new_filename.write_text(\n      textwrap.dedent(f'''\n    ---\n    title: {page_title}\n    linkTitle: {page_link_title}\n    weight: {page_weight}\n    description: >\n      {page_description}\n    ---\n    '''))\n\n\n# Generate API documentation for queries module\nqueries_output = output / 'queries'\nqueries = modules / 'queries'\nquery_modules = []\n\nfor module in queries.iterdir():\n  if (module.suffix == '.py' and 'test' not in module.name and\n      'stub' not in module.name and '__init__' not in module.name):\n    query_modules.append(module)\n\n# Create output directory if it does not exist\nif not queries_output.exists():\n  queries_output.mkdir(parents=True)\n\npdoc.pdoc(*query_modules, output_directory=queries_output)\n\n# Generate API documentation for models module\nmodels_output = output / 'models'\nmodels = modules / 'models.py'\n\n# Create output directory if it does not exist\nif not models_output.exists():\n  models_output.mkdir(parents=True)\n\npdoc.pdoc(models, output_directory=models_output)\n\n# Customize api index.html\ntitle = 'API Documentation'\nlink_title = 'API'\nweight = 100\ndescription = 'Documentation for reusable libraries'\ncustomize_index_file(output, title, link_title, weight, description)\n\n# Customize queries index.html\ntitle = 'Queries module'\nlink_title = 'Queries'\nweight = 100\ndescription = 'Documentation for queries module'\ncustomize_index_file(queries_output, title, link_title, weight, description)\n\n# Customize models index.html\ntitle = 'Models module'\nlink_title = 'Models'\nweight = 100\ndescription = 'Documentation for models module'\ncustomize_index_file(models_output, title, link_title, weight, description)\n"
  },
  {
    "path": "website/archetypes/default.md",
    "content": "---\ntitle: \"{{ replace .Name \"-\" \" \" | title }}\"\ndate: {{ .Date }}\ndraft: true\n---\n"
  },
  {
    "path": "website/assets/pdoc_templates/frame.html.jinja2",
    "content": "{% block content %}{% endblock %}\n\n{% filter minify_css %}\n    {% block style %}\n        {# The same CSS files as in pdoc's default template, except for layout.css.\n        You may leave out Bootstrap Reboot, which corrects inconsistences across browsers\n        but may conflict with you website's stylesheet. #}\n        <style>{% include \"resources/bootstrap-reboot.min.css\" %}</style>\n        <style>{% include \"syntax-highlighting.css\" %}</style>\n        <style>{% include \"theme.css\" %}</style>\n        <style>{% include \"content.css\" %}</style>\n        <style>main .pdoc { padding-top: 0.3em; padding-bottom: 0em }</style>\n        <style>.pdoc h1 { margin-bottom: 1em; }</style>\n        <style>.pdoc .attribution { margin-top: 0.5em; }</style>\n    {% endblock %}\n{% endfilter %}\n\n<div class=\"pdoc\" style=\"margin-top: 0.5em\">{% block attribution %}{% endblock %}</div>\n"
  },
  {
    "path": "website/assets/pdoc_templates/module.html.jinja2",
    "content": "{% macro description(var) %}\n    {% if var.docstring %}\n        {{ var.docstring.replace('\\r', '').replace('\\n', ' ') }}\n    {% endif %}\n{% endmacro %}\n\n---\ntitle: {{ module.modulename }}\nlinkTitle: {{ module.name }}\nweight: 2\ndescription: >\n  {{ description(module) }}\n---\n\n{% block module_info %}{% endblock %}\n\n{% extends \"default/module.html.jinja2\" %}\n"
  },
  {
    "path": "website/assets/scss/_variables_project.scss",
    "content": "// based on the great work done by the Agones team: https://agones.dev/site/\n\n// https://coolors.co/ffffff-0e8ec4-0b3954-ff5a5f-c81d25\n$white: #ffffffff;\n$blue-ncs: #0e8ec4ff;\n$prussian-blue: #0b3954ff;\n$sizzling-red: #ff5a5fff;\n$lava: #c81d25ff;\n\n$sapphire-blue: #006b99ff;\n\n$display1-weight: 500 !default;\n$display2-weight: 100 !default;\n\n\n$primary: rgb(255, 255,255)  !default;\n$primary-light: lighten($primary, 75%) !default;\n$secondary: $prussian-blue !default;\n$light: $white !default;\n$grey:  #888 !default;\n$orange: $secondary;\n$td-sidebar-tree-root-color: #222 !default;\n\n\n.td-toc #TableOfContents a { color: #444 !important; }\n.td-toc #TableOfContents a:hover { color: #3176d9 !important; }\n\n\n.nav-shadow {\n    box-shadow: 0 2px 2px -2px rgba(0,0,0,.2);\n}\n\n.navbar-brand {\n    color: black !important\n}\n\n.control-bar {\n    display: none;\n}\n\n.td-navbar .td-search-input {\n    background: rgba(190, 185, 185, 0.3) !important;\n}\n\ninput[type=\"search\"]::placeholder {\n    color:  #9B9595 !important;\n}\n\n.td-box--secondary p > a:hover {\n    color: #121314 !important;\n}\n\n#community a {\n    color: #121314 !important;\n}\n\n.showcase img {\n    margin: 0 30px;\n}\n\nimg#gcpdiag-demo-cover {\n  object-fit: none;\n  /* will not be resized */\n  object-position: 0 0;\n  /* clip to your coordinates*/\n  width: 550px;\n  height: 260px;\n  border-radius: 5px;\n}\n\n@media (min-width: 992px) {\n  .td-content pre {\n    max-width: 99% !important;\n  }\n}\n"
  },
  {
    "path": "website/config.toml",
    "content": "baseURL = \"/\"\ntitle = \"gcpdiag\"\nenableRobotsTXT = true\ncontentDir = \"content/en\"\ndefaultContentLanguage = \"en\"\ndefaultContentLanguageInSubdir = false\nenableMissingTranslationPlaceholders = true\ndisablePathToLower = true\n\n[module]\n  [[module.imports]]\n    path = \"github.com/google/docsy\"\n    version = \"v0.12.0\"\n  [[module.imports]]\n    path = \"github.com/google/docsy/dependencies\"\n\n# disable taxonomies\ndisableKinds = [\"taxonomy\", \"taxonomyTerm\"]\n\n# # Highlighting config\npygmentsCodeFences = true\npygmentsUseClasses = false\n#pygmentsOptions = \"linenos=table\"\npygmentsStyle = \"tango\"\n\n[[menu.main]]\n    name = \"GitHub\"\n    weight = 50\n    pre = \"<i class='fab fa-github'></i>\"\n    url = \"https://github.com/GoogleCloudPlatform/gcpdiag\"\n\n\n[permalinks]\nblog = \"/:section/:year/:month/:day/:slug/\"\n\n# Configuration of Goldmark Markdown parser (Replacing deprecated BlackFriday Markdown)\n[markup.goldmark.renderer]\nunsafe = true\n\n# Image processing configuration.\n[imaging]\nresampleFilter = \"CatmullRom\"\nquality = 75\nanchor = \"smart\"\n\n[services]\n[services.googleAnalytics]\n# Comment out the next line to disable GA tracking. Also disables the feature described in [params.ui.feedback].\nid = \"UA-00000000-0\"\n\n# Language configuration\n[languages]\n[languages.en]\ntitle = \"gcpdiag\"\ndescription = \"Diagnostics for GCP\"\nlanguageName =\"English\"\nweight = 1\n\n[outputs]\nsection = [\"HTML\"]\n\n[params]\ngithub_repo = \"https://github.com/GoogleCloudPlatform/gcpdiag\"\ngithub_subdir = \"website\"\ngithub_branch= \"main\"\ngcs_engine_id = \"b920527de2312a391\"\ncopyright = \"Google LLC\"\nprivacy_policy = \"/privacy/\"\nimages = [\"images/website-preview.jpg\"]\n\n[params.ui]\nnavbar_logo = false\nbreadcrumb_disable = true\nsidebar_search_disable = true\n# sidebar_menu_compact = true\nsidebar_menu_foldable = true\nul_show = 1\n\n[params.ui.feedback]\nenable = false\n\n[params.links]\n[[params.links.developer]]\n\tname = \"GitHub\"\n\turl = \"https://github.com/GoogleCloudPlatform/gcpdiag\"\n\ticon = \"fab fa-github\"\n        desc = \"Development takes place here!\"\n\n[deployment]\norder = [\".jpg$\", \".gif$\"]\n\n[[deployment.targets]]\nname = \"gcs-staging\"\nURL = \"gs://gcpdiag-website-staging\"\n\n[[deployment.targets]]\nname = \"gcs-prod\"\nURL = \"gs://gcpdiag-website-prod\"\n\n[[deployment.matchers]]\n# Cache static assets for 1 year.\npattern = \"^.+\\\\.(js|css|svg|ttf)$\"\ncacheControl = \"max-age=31536000, no-transform, public\"\ngzip = true\n\n[[deployment.matchers]]\npattern = \"^.+\\\\.(png|jpg)$\"\ncacheControl = \"max-age=31536000, no-transform, public\"\ngzip = false\n\n[[deployment.matchers]]\n# Set custom content type for /sitemap.xml\npattern = \"^sitemap\\\\.xml$\"\ncontentType = \"application/xml\"\ngzip = true\n\n[[deployment.matchers]]\npattern = \"^.+\\\\.(html|xml|json)$\"\ngzip = true\n"
  },
  {
    "path": "website/content/en/_index.html",
    "content": "---\ntitle: gcpdiag\nlinkTitle: gcpdiag\n---\n<!-- based on the great work done by the Agones team: https://agones.dev/site/ -->\n\n{{< blocks/cover title=\"\" image_anchor=\"top\" height=\"min\" color=\"white\" >}}\n<div class=\"mx-auto mt-3\">\n\t<a class=\"btn btn-lg btn-secondary mr-3 mb-4\" href=\"{{< relref \"/docs\" >}}\">\n\t\tLearn More <i class=\"fas fa-arrow-alt-circle-right ml-2\"></i>\n\t</a>\n\t<a class=\"btn btn-lg btn-secondary mr-3 mb-4\" href=\"https://github.com/GoogleCloudPlatform/gcpdiag/releases\">\n\t\tReleases <i class=\"fab fa-github ml-2 \"></i>\n\t</a>\n\t<p class=\"lead mt-2\">Helps you smoothly run infrastructure on GCP.</p>\n\t<div class=\"mx-auto mt-5\">\n\t\t{{< blocks/link-down color=\"secondary\" >}}\n\t</div>\n</div>\n{{< /blocks/cover >}}\n\n{{< blocks/lead color=\"secondary\" >}}\n<p class=\"mb-3\"><b>What is gcpdiag?</b></p>\n\n<p>gcpdiag is a command-line diagnostics tool for GCP customers. It\nfinds and helps to fix common issues in Google Cloud Platform projects. It is\nused to test projects against a wide range of best practices and common\nmistakes, based on the troubleshooting experience of the\n<a href=\"https://cloud.google.com/support\" style=\"color: #c9e7f8\">Google Cloud\n  Support</a> team.</p>\n<p>gcpdiag is an open-source community project, and not an\nofficially supported Google product.</p>\n{{< /blocks/lead >}}\n\n{{< blocks/section color=\"dark\" >}}\n\n{{% blocks/feature icon=\"fas fa-scroll\" title=\"A Test Suite for GCP\" url=\"./docs/\" %}}\ngcpdiag works similarly like code testing. The lint command runs a test\nsuite to detect whether the project is deviating from a list of expected\nconditions and creates a report.\n{{% /blocks/feature %}}\n<!-- The tests encompass clear mistakes, but also\n    best practices and optimization hints. -->\n\n{{% blocks/feature icon=\"fas fa-hat-wizard\" title=\"Troubleshooting by Google Cloud Support TSEs\" url=\"./docs/\" %}}\ngcpdiag includes automated diagnostics based on the troubleshooting experience\nof Google Cloud Support's Technical Solution Engineers, solving real customer\nissues.\n{{% /blocks/feature %}}\n\n{{% blocks/feature icon=\"fab fa-github\" title=\"Open Source\" url=\"https://github.com/GoogleCloudPlatform/gcpdiag\" %}}\ngcpdiag is an open-source project hosted on GitHub, and contributors are\nwelcome! We encourage you to file GitHub issues for any idea or problem that\nyou have, and also welcome code contributions.\n{{% /blocks/feature %}}\n\n{{< /blocks/section >}}\n"
  },
  {
    "path": "website/content/en/docs/_index.md",
    "content": "\n---\ntitle: \"Documentation\"\nlinkTitle: \"Documentation\"\nmenu:\n  main:\n    weight: 20\n    pre: <i class='fas fa-book'></i>\ndescription: >\n  User and development guides for gcpdiag.\n---\n"
  },
  {
    "path": "website/content/en/docs/authentication.md",
    "content": "---\ntitle: \"Authentication\"\nlinkTitle: \"Authentication\"\nweight: 5\ndescription: >\n  Authentication mechanisms.\n---\n\ngcpdiag supports authentication using multiple mechanisms:\n\n1. Application default credentials\n\n   gcpdiag can use Cloud SDK's [Application Default\n   Credentials](https://google-auth.readthedocs.io/en/latest/reference/google.auth.html#google.auth.default).\n   This might require that you first run `gcloud auth login --update-adc` to\n   update the cached credentials. This is the default in Cloud Shell because in\n   that environment, ADC credentials are automatically provisioned.\n\n1. Service account key\n\n   You can also use the `--auth-key` parameter to specify the [private\n   key](https://cloud.google.com/iam/docs/creating-managing-service-account-keys)\n   of a service account.\n\nThe credentials that you use with gcpdiag needs to have at minimum the\nfollowing roles granted (both of them):\n\n- `Viewer` on the inspected project\n- `Service Usage Consumer` on the project used for billing/quota enforcement,\n  which is per default the project being inspected, but can be explicitly set\n  using the `--billing-project` option\n\nThe Editor and Owner roles include all the required permissions, but we\nrecommend that if you use service account authentication (`--auth-key`), you\nonly grant the Viewer+Service Usage Consumer on that service account.\n"
  },
  {
    "path": "website/content/en/docs/development/_index.md",
    "content": "---\ntitle: \"Development Guides\"\nlinkTitle: \"Development\"\nweight: 100\ndescription: >\n  How to contribute to gcpdiag.\n---\n"
  },
  {
    "path": "website/content/en/docs/development/architecture.md",
    "content": "---\ntitle: \"gcpdiag Architecture\"\nlinkTitle: \"Architecture\"\nweight: 2\ndescription: >\n  gcpdiag internal code architecture.\n---\n\n## Overview\n\ngcpdiag exclusively uses **public APIs** and is designed to be a sort of test\nsuite or **linter**, where each lint rule verifies a single aspect of a GCP\nproject that might be problematic. Example: the IAM permissions of a service\naccount are not set correctly so a GCE instance can't send logs to Cloud\nLogging.\n\nThe high-level architecture of gcpdiag looks as follows:\n\n![gcpdiag architecture diagram](/images/gcpdiag-architecture.png)\n\nEvery lint rule (e.g. `gce/bp_2021_001` above) is represented as a Python module\nthat registers to the main command gcpdiag with some metadata about the lint\nrule, and the implementation of a `run_rule()` method to run the rule checking\ncode. Writing new rules should be as easy and quick as possible, to foster a\nlively and up-to-date set of rules.\n\n## Queries Modules\n\nAny queries that are done to the GCP API are done via so-called \"queries\"\nmodules, which encapsulate all the queries that are required by gcpdiag lint\nrules. The queries are separated from the lint rules to **facilitate code\nreuse** and also to **improve performance**. Most queries done by the query\nmodules cache their results, so that subsequent queries are very fast. This is\nnecessary because if every rule needs to do GCP API calls every time that it\nneeds to verify something, the lint command would take too long to run.\n\nThe queries modules are also used to make the implementation of the **lint rules\nas simple as possible**. Also, we strive for very good test coverage only for\nthe queries modules and not for lint rules.\n\n## Context Objects\n\ngcpdiag allows users to select the resources that should be inspected by\nspecifying the following criteria:\n\n-   Project id (mandatory, e.g.: `my-project-id`)\n-   Regions list (e.g.: `us-central1`, `europe-west2`)\n-   Labels list (e.g.: `{'environment': 'prod'}`, `{'environment': 'pre-prod'}`\n\nWhen all three are specified, all must match (the values in the lists are ORed).\n\n**`models.Context`** (see:\n[models.py](http://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/models.py#L30)) represents the\nfilter given by the user and is used in queries modules to select resources.\n\n## Resource Objects\n\nQueries modules generally return objects that implement the\n**`models.Resource`** abstract class. A Resource object represents a single\nresource in GCP and must have these three methods:\n\n-   `project_id` (property)\n-   `full_path` (property) - returns the full path of this resource (e.g.:\n    `projects/gcpdiag-gke-1-9b90/zones/europe-west4-a/clusters/gke1`)\n-   `short_path` (property) - returns the short name for this resource (e.g.:\n    `gcpdiag-gke-1-9b90/europe-west4-a/gke1`)\n\nQueries modules provide functions that generally require as input a `Context`\nobject and return a dictionary or list of `Resource`. It is the responsibility\nof those functions to implement the filtering according to the provided context.\nFor example,\n[gke.py](http://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/queries/gke.py)\nprovides:\n\n```python\ndef get_clusters(context: models.Context) -> Mapping[str, gke.Cluster]\n```\n\nResource objects provide abstraction to retrieve attributes of these resources,\nso for example for a `gke.Cluster` object you can for example use the\n`has_logging_enabled()` method to check whether logging is enabled:\n\n```python\nfor c in gke.get_clusters(context).values()\n  if c.has_logging_enabled():\n    ...\n```\n\nNote that we don't strive to have a complete model for all resources in GCP,\nbecause that would be way beyond the scope of this project. We are only\nimplementing the functionality that is needed in linting rules, nothing more.\nLint rules are not allowed to access the APIs directly and are also discouraged\nto access internal resource representations.\n\n## LintReportRuleInterface\n\nLint rules need to report their findings back to the user and we want a way to\ndo that that is both very simple from a rule-implementation point of view, but\nalso allows flexibility in structuring the output in a beautiful way in the\nconsole, or also to provide alternative output formats such as JSON or HTML.\n\nThe way we achieve that is by abstracting all the lint rule reporting into an\nobject, that is passed to the lint rule executor, and that is used to report\nback the findings. The interface looks as follows:\n\n```python\nclass LintReportRuleInterface:\n  def add_skipped(self,\n                  resource: Optional[models.Resource],\n                  reason: str,\n                  short_info: str = None):\n\n  def add_ok(self, resource: models.Resource, short_info: str = ''):\n\n  def add_failed(self,\n                 resource: models.Resource,\n                 reason: str,\n                 short_info: str = None):\n```\n\nRule modules are given a Context object to determine what they should analyze,\nand a LintReportRuleInterface object to report back their findings. The findings\ncan be for any resource one of:\n\n-   Skipped (the rule is not relevant / can't be checked)\n-   OK\n-   Failed\n\nThe following diagram shows the information flow:\n\n![LintReport diagram](/images/lintreport-diagram.png)\n\n## Rule Modules\n\nCreating a new rule should require not more than a page-length of code, because\nall the complex querying logic should be implemented in the reusable queries\nmodules. Each rule implements the rule checking logic as Python functions:\n\n-   **run_rule**(*context*: models.Context, *report*:\n    lint.LintReportRuleInterface):\n\n    This function is the main function used to run the rule logic on a certain\n    *context* (list of projects + resource selectors). The function is supposed\n    to provide results about the rule evaluation using the *report* interface.\n\n-   **prefetch\\_rule**(*context*: models.Context):\n\n    Each run_rule function is called in order of rule execution, one function at\n    a time. To minimize the total runtime of gcpdiag, rules can implement the\n    `prefetch_rule` function to do data collection before the rule is actually\n    started. The difference is that no reporting is possible: that will need to\n    happen in the `run_rule` function. The `prefetch_rule` functions are called\n    in parallel using multiple worker threads.\n\n-   **prepare\\_rule**(*context*: models.Context):\n\n    The `prepare\\_rule` function is similar to `prefetch\\_rule` because it is\n    also used to pre-load data before the rule is executed. The difference is\n    that the `prepare\\_rule` for all rules is called first, and not in parallel.\n    This is useful for tasks that need to run as early as possible, but don't\n    actually take a long time to complete. Currently the only use-case is for\n    defining logs queries.\n\nRule modules should **never access the API directly**, but always use query\nmodules instead. This ensures proper testing and separation of concerns. Also,\nthis way we can make sure that the queries modules cover all the required\nfunctionality, and that the API calls are cached.\n\nYou can see the documentation of this rule [here](https://gcpdiag.dev/rules/gke/ERR/2021_007/) and the github logic for this rule [here](https://github.com/GoogleCloudPlatform/gcpdiag/blob/main/gcpdiag/lint/gke/err_2021_007_gke_sa.py)\n\nExample code:\n```python\n\"\"\"GKE service account permissions.\nVerify that the Google Kubernetes Engine service account exists and has\nthe Kubernetes Engine Service Agent role on the project.\n\"\"\"\nfrom gcpdiag import lint, models\nfrom gcpdiag.queries import crm, gke, iam\n\n# defining role\nROLE = 'roles/container.serviceAgent'\n\n\n# creating rule to report if default SA exists\ndef run_rule(context: models.Context, report: lint.LintReportRuleInterface):\n  clusters = gke.get_clusters(context)\n  if not clusters:\n    report.add_skipped(None, 'no clusters found')\n    return\n\n  project = crm.get_project(context.project_id)\n  sa = 'service-{}@container-engine-robot.iam.gserviceaccount.com'.format(\n      project.number)\n  iam_policy = iam.get_project_policy(context.project_id)\n  if iam_policy.has_role_permissions(f'serviceAccount:{sa}', ROLE):\n    report.add_ok(project)\n  else:\n    report.add_failed(project,\n                      reason=f'service account: {sa}\\nmissing role: {ROLE}')\n```\n\nMetadata about the rule is determined as follows:\n\n-   **Product**: directory where the rule is placed. Example: `gke`.\n-   **Class**: filename, e.g.: `gke/bp_2021_001_cloudops_enabled.py` -> class BP.\n-   **Id**: product+class+id uniquely identify a rule. Also determined by the\n    filename, same as class (see above).\n-   **Short description**: the first line of the module docstring is the rule\n    short description, this is what appears in the rule line in the report.\n-   **Long description**: docstring after the first line. When a rule fails, the\n    long description is printed as well.\n\n## Rule Execution\n\ngcpdiag lint is a general \"broad\" diagnostics tool that runs as many diagnostic\ntest as possible, so that it can detect issues that you are completely unaware\nof. GCP API calls can however take a considerable amount of time to complete, so\nin order for the total runtime not to be too long, two techniques are used:\n**caching** and **parallel execution**.\n\nCaching takes care of making sure that the same query is never executed twice,\nand is explained more in detail in the next section.\n\nParallel execution is implemented as follows:\n\n![rule execution diagram](/images/rule-execution.png)\n\n1.  First, the `prepare_rule` function of each rule is called (if the rule\n    defines one). These are called serially in the main thread, and are supposed\n    to be quick to execute. The main use case is to prepare some aggregated\n    querying that will need to happen later (only for logs at the moment).\n1.  Worker threads are started (currently 10) and execute first all required\n    logging API queries, then all `prefetch_rule` functions that rule can\n    define.\n1.  Immediately after starting the worker threads with logs and prefetch_rules,\n    the main thread continues and starts executing the `run_rules` functions in\n    the right order (alphabetically sorted) and synchronously starting to print\n    the report.\n1.  The rule scheduler makes sure that any dependent logging or prefetch_rule\n    execution that is required by a rule completes, before starting the rule\n    (e.g. this is shown in the diagram where the second `run_rule` is executed\n    only after a certain logs query has finished).\n\n## Caching\n\nEvery rule is independent and uses the queries modules to query for example the\nlist of GKE clusters in a project. This makes the implementation of rules\neasier, but since multiple rules require the same data, this would mean fetching\nfor example the list of GKE clusters multiple times. In order to avoid doing the\nsame query multiple times, the results of API calls are cached either to memory\nor to disk.\n\nConsidering that the amount of data can be significant and in order to keep the\nmemory consumption of gcpdiag at reasonable levels, generally caching will be\ndone to disk, but then most cached data will be deleted once gcpdiag has\nfinished executing.\n\nThe implementation uses the\n[diskcache](http://www.grantjenks.com/docs/diskcache/) Python module, which uses\nSqlite under the hood to provide a very quick and featureful caching\nimplementation.\n\nTo make the implementation as streamlined as possible, we have implemented a\nfunction decorator called `caching.cached_api_call`:\n\n```\n@caching.cached_api_call\ndef get_clusters(context: models.Context) -> Mapping[str, Cluster]:\n```\n\n`cached_api_call` is very similar to functools.lru_cache, with the following\ndifferences:\n\n-   uses diskcache, so that the memory footprint doesn't grow uncontrollably.\n-   uses a lock so that if the function is called from two threads\n    simultaneously, only one API call will be done and the other will wait until\n    the result is available in the cache.\n\nParameters:\n\n-   `expire`: number of seconds until the key expires (default: expire when the\n    process ends)\n-   `in_memory`: if true the result will be kept in memory, similarly to\n    lru_cache (but with the locking).\n\n## API Libraries and Authentication\n\nWe use the low-level\n[google-api-python-client](https://github.com/googleapis/google-api-python-client)\nand not the new \"idiomatic\" client libraries because only the API library has\nfull support for all GCP APIs (through discovery).\n\nAuthentication is done either with the Application Default Credentials (via\ngcloud command-line) or with a key file for a service account.\n\nThe\n[`apis.get_api`](http://github.com/GoogleCloudPlatform/gcpdiag/tree/main/gcpdiag/queries/apis.py)\nfunction is used to retrieve the API interface and also takes care of doing any\nnecessary authentication step.\n"
  },
  {
    "path": "website/content/en/docs/development/environment.md",
    "content": "---\ntitle: \"Development Environment\"\nlinkTitle: \"Dev Environment\"\nweight: 1\ndescription: >\n  How to prepare your environment to do development work.\n---\n\n## Environment setup\n\n-   Make a fork of the official gcpdiag repository\n\n-   Clone your fork\n\n    ```\n    git clone git@github.com:xxxxxx/gcpdiag.git\n    cd gcpdiag\n    git submodule update --init\n    ```\n\n\n-   Install pipenv and all the required Python dependencies:\n\n    ```\n    apt install pipenv\n    pipenv shell\n    pipenv install --dev\n    ```\n\n    or for mac:\n\n    ```\n    brew install pipenv\n    pipenv shell\n    pipenv install --dev\n    ```\n\n-   Install pre-commit (for the \"presubmit\" tests):\n\n    ```\n    pipenv shell\n    pre-commit install\n    ```\n\n-   You can run tests and gcpdiag in the pipenv shell, so that all required\n    modules are installed:\n\n    ```\n    pipenv shell\n    make test\n    bin/gcpdiag lint --project=xxx\n    ```\n"
  },
  {
    "path": "website/content/en/docs/running.md",
    "content": "---\ntitle: \"Running gcpdiag\"\nlinkTitle: \"Running gcpdiag\"\nweight: 3\ndescription: >\n  Prerequisites and how to run gcpdiag.\n---\n\n## Pre-requisites\n\ngcpdiag requires the following in order to be able to run correctly:\n\n#### 1. Permissions\n\nThe credentials that you use with gcpdiag needs to have at minimum the\nfollowing roles granted (both of them):\n\n- `Viewer` on the inspected project\n- `Service Usage Consumer` on the project used for billing/quota enforcement,\n  which is per default the project being inspected, but can be explicitly set\n  using the `--billing-project` option\n\nThe Editor and Owner roles include all the required permissions, but we\nrecommend that if you use service account authentication (`--auth-key`), you\nonly grant the Viewer+Service Usage Consumer on that service account.\n\n#### 2. Required APIs\n\ngcpdiag requires some APIs to be enabled in order for the inspection of\nresources to work correctly:\n\n- `cloudresourcemanager.googleapis.com` *(Cloud Resource Manager API)*\n- `iam.googleapis.com` *(Identity and Access Management API)*\n- `logging.googleapis.com` *(Cloud Logging API)*\n- `serviceusage.googleapis.com` *(Service Usage API)*\n\nYou can enable these APIs using Cloud Console or via command-line:\n\n```\ngcloud --project=MYPROJECT services enable \\\n    cloudresourcemanager.googleapis.com \\\n    iam.googleapis.com \\\n    logging.googleapis.com \\\n    serviceusage.googleapis.com\n\n```\n\n## Running in Cloud Shell\n\ngcpdiag is integrated in Cloud Shell:\n\n```\ngcpdiag lint --project=MYPROJECT\n```\n\n## Running with Docker\n\nYou can run gcpdiag using a shell wrapper that starts gcpdiag in a Docker\ncontainer. This should work on any machine with Docker or Podman installed.\n\n```\ncurl https://gcpdiag.dev/gcpdiag.sh >gcpdiag\nchmod +x gcpdiag\n./gcpdiag lint --project=MYPROJECT\n```\n"
  },
  {
    "path": "website/content/en/docs/usage.md",
    "content": "---\ntitle: \"Usage information\"\nlinkTitle: \"Usage information\"\nweight: 4\ndescription: >\n    gcpdiag command-line usage\n---\n\n## Command Line Options\n\nCurrently gcpdiag mainly supports one subcommand: `lint`, which is used\nto run diagnostics on one or more GCP projects.\n\n```\nusage: gcpdiag lint --project P [OPTIONS]\nRun diagnostics in GCP projects.\noptional arguments:\n  -h, --help            show this help message and exit\n  --auth-adc            Authenticate using Application Default Credentials (default)\n  --auth-key FILE       Authenticate using a service account private key file\n  --universe_domain DOMAIN\n                       Domain for API endpoint (default 'googleapis.com')\n  --project P           Project ID of project to inspect\n  --billing-project P   Project used for billing/quota of API calls done by gcpdiag (default is the inspected project, requires\n                        'serviceusage.services.use' permission)\n  --show-skipped        Show skipped rules\n  --hide-ok             Hide rules with result OK\n  --include INCLUDE     Include rule pattern (e.g.: `gke`, `gke/*/2021*`). Multiple pattern can be specified (comma separated, or with multiple\n                        arguments)\n  --exclude EXCLUDE     Exclude rule pattern (e.g.: `BP`, `*/*/2022*`)\n  --include-extended    Include extended rules. Additional rules might generate false positives (default: False)\n  -v, --verbose         Increase log verbosity\n  --within-days D       How far back to search logs and metrics (default: 3 days)\n  --config FILE         Read configuration from FILE\n  --logging-ratelimit-requests R\n                        Configure rate limit for logging queries (default: 60)\n  --logging-ratelimit-period-seconds S\n                        Configure rate limit period for logging queries (default: 60 seconds)\n  --logging-page-size P\n                        Configure page size for logging queries (default: 500)\n  --logging-fetch-max-entries E\n                        Configure max entries to fetch by logging queries (default: 10000)\n  --logging-fetch-max-time-seconds S\n                        Configure timeout for logging queries (default: 120 seconds)\n  --output FORMATTER    Format output as one of [terminal, json, csv] (default: terminal)\n```\n\n## Configuration File\n\nThe configuration for the gcpdiag run can be provided as a local configuration file via the `--config path/to/file` CLI flag written in YAML format.\n\nIf a value is provided on both the command line and via a configuration file, the values from the configuration file will be preferred.\n\n### Example configuration which will be applied to any projects\n```\n---\nbilling_project: sample\ninclude:\n- '*BP*'\nexclude:\n- '*SEC*'\n- '*ERR*'\ninclude_extended: True\nverbose: 3\nwithin_days: 5\n```\n\n### Example configuration which will be applied to specific project\n```\n---\nlogging_fetch_max_time_seconds: 300\nverbose: 3\nwithin_days: 5\n\nprojects:\n  myproject:\n    billing_project: perproject\n    include:\n    - '*BP*'\n    exclude:\n    - '*SEC*'\n    - '*ERR*'\n    include_extended: True\n```\n\nIf values are provided via a configuration file for any projects and specific project, the values from the configuration defined to specific project will be preferred.\n\n> All values are supported (except `--project` and `-config`) and function identically to their CLI counterparts.\n\n## Output formats\n\nThe output format for the gcpdiag run can be configured via `--output formatter` CLI flag, where `formatter` can be one of the following options:\n- `terminal` - which is default output format designed to be human readable\n- `json` - can be helpful as a machine readable format used for example with CI/CD pipelines\n- `csv` - can be helpful as a machine readable format used for example with analytic tools\n\nFinal report can be easily streamed to file by using file redirection. Result will contain only a report of the lint execution with configured output format.\n\nFor example:\n```\ngcpdiag lint --project example-project --output csv > gcpdiag.report.csv\n```\n\nwill generate file `gcpdiag.report.csv` with following content:\n```\nrule,resource,status,message,doc_url\ngcs/BP/2022_001,b/example-project/artifacts.example-project.appspot.com,FAIL,it is recommend to use uniform access on your bucket,https://gcpdiag.dev/rules/gcs/BP/2022_001\ngcs/BP/2022_001,b/example-project/example-project.appspot.com,FAIL,it is recommend to use uniform access on your bucket,https://gcpdiag.dev/rules/gcs/BP/2022_001\ngcs/BP/2022_001,b/example-project/staging.example-project.appspot.com,FAIL,it is recommend to use uniform access on your bucket,https://gcpdiag.dev/rules/gcs/BP/2022_001\niam/SEC/2021_001,projects/example-project,OK,-,https://gcpdiag.dev/rules/iam/SEC/2021_001\n```\n\n> Value can be also provided as a yaml configuration file via the `--config path/to/file` CLI flag.\n\n### Example of the terminal (default) output format\n\n```\ngcpdiag 🩺 0.54-test\n\nStarting lint inspection (project: example-project)...\n\n🔎 gcs/BP/2022_001: Buckets are using uniform access\n   - example-project/artifacts.example-project.appspot.com        [FAIL]\n     it is recommend to use uniform access on your bucket\n   - example-project/example-project.appspot.com                  [FAIL]\n     it is recommend to use uniform access on your bucket\n   - example-project/staging.example-project.appspot.com          [FAIL]\n     it is recommend to use uniform access on your bucket\n\n   Google recommends using uniform access for a Cloud Storage bucket IAM policy\n   https://cloud.google.com/storage/docs/access-\n   control#choose_between_uniform_and_fine-grained_access\n\n   https://gcpdiag.dev/rules/gcs/BP/2022_001\n\n🔎 iam/SEC/2021_001: No service accounts have the Owner role\n   - example-project                                                  [ OK ]\n\nRules summary: 64 skipped, 1 ok, 1 failed\nHow good were the results? https://forms.gle/jG1dUdkxhP2s5ced6\n```\n### Example of the json output format\n\n```\ngcpdiag 0.54-test\n\nStarting lint inspection (project: example-project)...\n\n[\n{\n  \"rule\": \"gcs/BP/2022_001\",\n  \"resource\": \"b/artifacts.example-project.appspot.com\",\n  \"status\": \"FAIL\",\n  \"message\": \"it is recommend to use uniform access on your bucket\",\n  \"doc_url\": \"https://gcpdiag.dev/rules/gcs/BP/2022_001\"\n},\n{\n  \"rule\": \"gcs/BP/2022_001\",\n  \"resource\": \"b/example-project.appspot.com\",\n  \"status\": \"FAIL\",\n  \"message\": \"it is recommend to use uniform access on your bucket\",\n  \"doc_url\": \"https://gcpdiag.dev/rules/gcs/BP/2022_001\"\n},\n{\n  \"rule\": \"gcs/BP/2022_001\",\n  \"resource\": \"b/staging.example-project.appspot.com\",\n  \"status\": \"FAIL\",\n  \"message\": \"it is recommend to use uniform access on your bucket\",\n  \"doc_url\": \"https://gcpdiag.dev/rules/gcs/BP/2022_001\"\n},\n{\n  \"rule\": \"iam/SEC/2021_001\",\n  \"resource\": \"projects/example-project\",\n  \"status\": \"OK\",\n  \"message\": \"-\",\n  \"doc_url\": \"https://gcpdiag.dev/rules/iam/SEC/2021_001\"\n},\n]\n\nRules summary: 64 skipped, 1 ok, 1 failed\nHow good were the results? https://forms.gle/jG1dUdkxhP2s5ced6\n```\n\n### Example of the csv output format\n\n```\ngcpdiag 0.54-test\n\nStarting lint inspection (project: example-project)...\n\nrule,resource,status,message,doc_url\ngcs/BP/2022_001,b/artifacts.example-project.appspot.com,FAIL,it is recommend to use uniform access on your bucket,https://gcpdiag.dev/rules/gcs/BP/2022_001\ngcs/BP/2022_001,b/example-project.appspot.com,FAIL,it is recommend to use uniform access on your bucket,https://gcpdiag.dev/rules/gcs/BP/2022_001\ngcs/BP/2022_001,b/staging.example-project.appspot.com,FAIL,it is recommend to use uniform access on your bucket,https://gcpdiag.dev/rules/gcs/BP/2022_001\niam/SEC/2021_001,projects/example-project,OK,-,https://gcpdiag.dev/rules/iam/SEC/2021_001\n\nRules summary: 64 skipped, 1 ok, 1 failed\nHow good were the results? https://forms.gle/jG1dUdkxhP2s5ced6\n```\n"
  },
  {
    "path": "website/content/en/privacy.md",
    "content": "---\ntitle: \"gcpdiag Privacy Policy\"\nlinkTitle: \"Privacy Policy\"\ntype: docs\nhide_summary: true\n---\n\n## gcpdiag tool\n\n### Data collected via public APIs\n\ngcpdiag is a command-line tool that uses credentials provided by you (via\nservice account key or application default credentials) to access your data in\nGoogle Cloud Platform via public APIs.\n\nThe collected data is never stored or transmitted anywhere except on the\nenvironment where you run it:\n\n- gcpdiag caches data (credentials and certain API call results) under\n  `$HOME/.cache/gcpdiag` or `$HOME/.cache/gcpdiag-dockerized`, which\n  you can delete at any time.\n\n- gcpdiag will display findings to stdout/stderr (console) or to local files\n  you specify.\n\nIn other words: the data collected by gcpdiag always stays with you.\n\n### User-agent\n\nThe gcpdiag command-line tool sets a specific User-agent string for the GCP API\ncalls, which makes it possible to identify them as originating from the gcpdiag\ntool. The [Google Cloud Privacy\nNotice](https://cloud.google.com/terms/cloud-privacy-notice) describes how\nGoogle collects and processes personal information in relation to Google Cloud\nPlatform and Google’s other Cloud Services.\n\n## Website\n\nFor the website http://gcpdiag.dev, the privacy policy at\nhttps://policies.google.com/privacy applies.\n"
  },
  {
    "path": "website/content/en/rules/_index.md",
    "content": "\n---\ntitle: \"Lint Rules\"\nlinkTitle: \"Rules\"\ntype: docs\nmenu:\n  main:\n    weight: 30\n---\n\n\nIn this section you find documentation for the gcpdiag lint rules implemented\nfor the following GCP products:\n"
  },
  {
    "path": "website/content/en/rules/apigee/ERR/2022_001.md",
    "content": "---\ntitle: \"apigee/ERR/2022_001\"\nlinkTitle: \"ERR/2022_001\"\nweight: 1\ntype: docs\ndescription: >\n  Apigee Service Agent permissions\n---\n\n**Product**: [Apigee API Management](https://cloud.google.com/apigee)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n\n### Description\n\nApigee uses a Google-managed service account, which is called Apigee\nService Agent, to authenticate Apigee API requests sent by the Apigee\nruntime components to the Management plane.\n\nThe `apigee.serviceAgent` role should be assigned to this account and\nshouldn’t be revoked.\n\n\n### Remediation\n\nEnsure that you’ve the following binding in the IAM policy for the project:\n\n- Principal: `service-PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com`\n- Role: `roles/apigee.serviceAgent`\n\n### Further information\n\n- [About Google-managed service accounts ](https://cloud.google.com/iam/docs/service-agents)\n"
  },
  {
    "path": "website/content/en/rules/apigee/ERR/2022_002.md",
    "content": "---\ntitle: \"apigee/ERR/2022_002\"\nlinkTitle: \"ERR/2022_002\"\nweight: 1\ntype: docs\ndescription: >\n  Cloud KMS key is enabled and could be accessed by Apigee Service Agent\n---\n\n**Product**: [Apigee API Management](https://cloud.google.com/apigee)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n\n### Description\n\nApigee X uses a database encryption key, to encrypts the application-level data stored in the database\nand a disk encryption key to encrypts runtime instance data before it is written to disk.\n\nVerify that the runtime database encryption key and disk encryption key are not disabled or destroyed and\nthe Apigee Service Agent account has the `cloudkms.cryptoKeyEncrypterDecrypter` role to access the KMS keys.\n\n\n### Remediation\n\n[View current IAM policy on the kms keys](https://cloud.google.com/kms/docs/iam#viewing_permissions_on_a_resource) and ensure that you have the following binding in the IAM policy for the kms keys:\n- Principal: `service-PROJECT_NUMBER@gcp-sa-apigee.iam.gserviceaccount.com`\n- Role: `roles/cloudkms.cryptoKeyEncrypterDecrypter`\n\nIf not, please [grant the above role](https://cloud.google.com/kms/docs/iam#granting_roles_on_a_resource) on the kms key.\n\n### Further information\n\n- [About the Apigee encryption keys](https://cloud.google.com/apigee/docs/api-platform/security/encryption-keys)\n"
  },
  {
    "path": "website/content/en/rules/apigee/ERR/2023_001.md",
    "content": "---\ntitle: \"apigee/ERR/2023_001\"\nlinkTitle: \"ERR/2023_001\"\nweight: 1\ntype: docs\ndescription: >\n  Customer's network is peered to Apigee's network\n---\n\n**Product**: [Apigee API Management](https://cloud.google.com/apigee)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n\n### Description\n\nApigee X instance runs in a Google managed tenant project. It is required\nto connect Apigee X instance's network with the user's VPC network through\nVPC peering to enable communication with Apigee X instance from the user's\nVPC network.\n\n\n### Remediation\n\n[View existing VPC peering connections](https://cloud.google.com/vpc/docs/using-vpc-peering#list-peer-connections)\nfor your VPC network which needs to be connected to Apigee and ensure that you have an active VPC peering connection\nconnected with `servicenetworking.googleapis.com`\n\n\n### Further information\n\n- - You can find step-by-step details in the [Configure service networking](https://cloud.google.com/apigee/docs/api-platform/get-started/install-cli#service-networking) step from Apigee X provisioning guide.\n"
  },
  {
    "path": "website/content/en/rules/apigee/ERR/2023_002.md",
    "content": "---\ntitle: \"apigee/ERR/2023_002\"\nlinkTitle: \"ERR/2023_002\"\nweight: 1\ntype: docs\ndescription: >\n  Network bridge managed instance group is correctly configured.\n---\n\n**Product**: [Apigee API Management](https://cloud.google.com/apigee)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n\n### Description\n\nYou could choose to use a managed instance group (MIG) or Private Service Connect to send API traffic from\nyour network to Apigee X instances. If the API traffic is being sent through a MIG, the MIG should be created\nin the network which is peered to the Apigee X instance, the MIG should also point to the correct Apigee X\ninstance IP.\n\n\n### Remediation\n\n[Check the status of managed instances in the MIG](https://cloud.google.com/compute/docs/instance-groups/getting-info-about-migs#verify_instances)\ncreated in the project which contains VPC network which needs to be connected to Apigee and ensure that the instances\nhave the following metadata configured:\n- startup-script-url: gs://apigee-5g-saas/apigee-envoy-proxy-release/latest/conf/startup-script.sh\n- ENDPOINT: $APIGEE_INSTANCE_ENDPOINT\n\n\n### Further information\n\n- - You can find step-by-step details in the [Configure routing](https://cloud.google.com/apigee/docs/api-platform/get-started/install-cli#externalmig) step from Apigee X provisioning guide.\n"
  },
  {
    "path": "website/content/en/rules/apigee/ERR/2023_003.md",
    "content": "---\ntitle: \"apigee/ERR/2023_003\"\nlinkTitle: \"ERR/2023_003\"\nweight: 1\ntype: docs\ndescription: >\n  Private Google Access (PGA) for subnet of Managed Instance Group is enabled.\n---\n\n**Product**: [Apigee API Management](https://cloud.google.com/apigee)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nIf a managed instance group (MIG) is being used to route traffic to Apigee X instance\nrunning in a Google managed tenant project, the MIG's subnet should have Private\nGoogle Access (PGA) enabled.\n\n### Remediation\n\n[Enable Private Google Access](https://cloud.google.com/vpc/docs/configure-private-google-access#enabling-pga) in the MIG's subnet as described in the\ndocumentation.\n\n### Further information\n\n- [Enable Private Google Access](https://cloud.google.com/vpc/docs/configure-private-google-access#enabling-pga)\n"
  },
  {
    "path": "website/content/en/rules/apigee/ERR/2023_004.md",
    "content": "---\ntitle: \"apigee/ERR/2023_004\"\nlinkTitle: \"ERR/2023_004\"\nweight: 1\ntype: docs\ndescription: >\n  Apigee Networking Service Agent account requires the servicenetworking.serviceAgent role\n---\n\n**Product**: [Apigee API Management](https://cloud.google.com/apigee)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n\n### Description\n\nApigee uses a Google-managed service account, which is called Networking Service Agent which is used to create/modify\nthe Apigee runtime networking. Service Networking enables you to offer your managed services on internal IP addresses\nto service consumers. Service consumers use private services access to privately connect to your service.\n\nThe `servicenetworking.serviceAgent` role should be assigned to this account and shouldn’t be revoked.\n\n\n### Remediation\n\nEnsure that you’ve the following binding in the IAM policy for the project:\n\n- Principal: `service-PROJECT_NUMBER@service-networking.iam.gserviceaccount.com`\n- Role: `roles/servicenetworking.serviceAgent`\n\nSteps to validate:\n\n- Verify if Service Networking is enabled, if not, enable it using the below command\n\n   `gcloud services enable servicenetworking.googleapis.com --project={PROJECT_ID}`\n\n- Create a service account for service networking\n\n   `gcloud beta services identity create --service=servicenetworking.googleapis.com --project={PROJECT_ID}`\n\n- Bind the service account created with the role servicenetworking.serviceAgent\n\n  ```\n  gcloud projects add-iam-policy-binding {PROJECT_ID} \\\n  --member=serviceAccount:service-{PROJECT_NUMBER}@service-networking.iam.gserviceaccount.com \\\n  --role=roles/servicenetworking.serviceAgent\n  ```\n\n\n### Further information\n\n- [ About Google-managed service accounts ](https://cloud.google.com/iam/docs/service-agents)\n- [ About Enabling the Networking Service ](https://cloud.google.com/service-infrastructure/docs/service-networking/getting-started#enabling_the_service)\n"
  },
  {
    "path": "website/content/en/rules/apigee/ERR/2023_005.md",
    "content": "---\ntitle: \"apigee/ERR/2023_005\"\nlinkTitle: \"ERR/2023_005\"\nweight: 1\ntype: docs\ndescription: >\n  Apigee connectivity: Load balancer to Managed Instance Group connectivity.\n---\n\n**Product**: [Apigee API Management](https://cloud.google.com/apigee)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nIn order for the Apigee Managed Instance Group (MIG) to work correctly, network connection from\nthe External Load Balancer (XLB) to the MIG must be allowed by the firewall rules\n\n### Remediation\n\nEnsure that the following firewall rules are present on the project:\n\n- By default during the installation of ApigeeX a firewall rule is created with the name: `k8s-allow-lb-to-apigee-proxy`\n\n- IP address ranges `130.211.0.0/22` and `35.191.0.0/16` are the source IP address ranges for Google Load Balancing\n\n- The target parameters needs to have the `target-tags` of the MIG which can be identified from the MIG template.\n\n- By default `gke-apigee-proxy` is the tag used by the MIG instance template.\n\nRecreation Steps :\n\n- Identify the Managed Instance Group name and list out the configuration for it.\n\n   `gcloud compute instance-templates describe {INSTANCE_NAME}`\n\n- Identify the tags used for the instance template from the above configuration\n\n\n- Create the firewall rule with the target tag identified from the Instance Template\n\n  ```\n  gcloud compute firewall-rules create FIREWALL_RULE_NAME \\\n    --description \"Allow incoming from GLB on TCP port 443 to Apigee Proxy\" \\\n    --project {PROJECT_ID} --network {VPC_NAME} --allow=tcp:443 \\\n    --source-ranges=130.211.0.0/22,35.191.0.0/16 --target-tags={MIG_INSTANCE_TAGS}\n  ```\n\n### Further information\n\n- [ Creating Apigee Firewall Rule ](https://cloud.google.com/apigee/docs/api-platform/get-started/install-cli#:~:text=Create%20a%20firewall%20rule)\n- [ About Firewall Rules ](https://cloud.google.com/load-balancing/docs/https#firewall-rules)\n- [About Using VPC Firewall Rules](https://cloud.google.com/firewall/docs/using-firewalls)\n"
  },
  {
    "path": "website/content/en/rules/apigee/ERR/2023_006.md",
    "content": "---\ntitle: \"apigee/ERR/2023_006\"\nlinkTitle: \"ERR/2023_006\"\nweight: 1\ntype: docs\ndescription: >\n  A multi-region setup requires a separate MIG for each region.\n---\n\n**Product**: [Apigee API Management](https://cloud.google.com/apigee)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nIf Apigee X instances exist in multiple regions, then a MIG should be created\nin each region. Otherwise the traffic will only be routed to one region.\n\n### Remediation\n\nIf you are provisioning Apigee X with VPC peering by using MIGs (Managed Instance Groups),\nyou need to create a MIG for each of the region where you created an Apigee X instance. You\ncan follow the documentation for [External routing (MIG)](https://cloud.google.com/apigee/docs/api-platform/get-started/install-cli-paygo#external-routing-mig)\nand repeat Steps 8b and 8c for each region.\n\n### Further information\n\n- [Provision a paid org with VPC peering](https://cloud.google.com/apigee/docs/api-platform/get-started/install-cli-paygo)\n- [External routing (MIG)](https://cloud.google.com/apigee/docs/api-platform/get-started/install-cli-paygo#external-routing-mig)\n"
  },
  {
    "path": "website/content/en/rules/apigee/WARN/2021_001.md",
    "content": "---\ntitle: \"apigee/WARN/2021_001\"\nlinkTitle: \"WARN/2021_001\"\nweight: 1\ntype: docs\ndescription: >\n  Every environment group contains at least one environment.\n---\n\n**Product**: [Apigee API Management](https://cloud.google.com/apigee)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nEvery environment group contains at least one environment.\n\nAn environment must be a member of at least one environment group before you can access resources defined within it.\nIn other words, you must assign an environment to a group before you can use it. Or you would receive 404 errors while accessing every hostname in the environment group.\n\n### Remediation\n\nMake sure that you have attached at least one environment to every environment group.\n\nYou can use the following steps to add environments to an environment group:\nhttps://cloud.google.com/apigee/docs/api-platform/fundamentals/environmentgroups-working-with#adding\n\n### Further information\n\n- [Overview of environments and environment groups](https://cloud.google.com/apigee/docs/api-platform/fundamentals/environments-overview)\n"
  },
  {
    "path": "website/content/en/rules/apigee/WARN/2022_001.md",
    "content": "---\ntitle: \"apigee/WARN/2022_001\"\nlinkTitle: \"WARN/2022_001\"\nweight: 1\ntype: docs\ndescription: >\n  Environment groups are created in the Apigee runtime plane.\n---\n\n**Product**: [Apigee API Management](https://cloud.google.com/apigee)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nEvery environment group needs to be created in both management plane and runtime plane.\n\nFor Apigee hybrid users: please make sure that every environment group you create with an\nattached environment is included in all override files where the environment is used.\n\n### Remediation\n\nPlease [apply virtualhosts changes](https://cloud.google.com/apigee/docs/hybrid/v1.7/base-path-routing?hl=en#applying) to create an environment group in the runtime plane.\n\nYou can use the following Cloud Logging filter to find matching log lines:\n\n```\nresource.type= \"k8s_container\"\nlog_id(\"stdout\")\nresource.labels.container_name= \"apigee-watcher\"\nseverity=ERROR\njsonPayload.error:\"INTERNAL: NOT_FOUND: failed to create ApigeeRoute\"\n```\n\n### Further information\n\n- [Working with environment groups](https://cloud.google.com/apigee/docs/api-platform/fundamentals/environmentgroups-working-with)\n"
  },
  {
    "path": "website/content/en/rules/apigee/WARN/2022_002.md",
    "content": "---\ntitle: \"apigee/WARN/2022_002\"\nlinkTitle: \"WARN/2022_002\"\nweight: 1\ntype: docs\ndescription: >\n  Environments are attached to Apigee X instances\n---\n\n**Product**: [Apigee API Management](https://cloud.google.com/apigee)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nEach environment must be attached to an Apigee instance.\n\nAn environment must be attached to at least one Apigee X instance before you can deploy API proxies within it.\nYou will get the API proxy deployments fail with **No active runtime pods** warning in a specific environment if this environment is not being attached to any Apigee X instances.\n\n### Remediation\n\nMake sure that you have attached all environments to at least one Apigee X instance.\n\nYou can use the following steps to attach environments to an instance:\nhttps://cloud.google.com/apigee/docs/api-platform/system-administration/instances#add-envs\n\n### Further information\n\n- [About environments](https://cloud.google.com/apigee/docs/api-platform/fundamentals/environments-working-with#about-environments)\n"
  },
  {
    "path": "website/content/en/rules/apigee/_index.md",
    "content": "---\ntitle: \"APIGEE\"\nlinkTitle: \"apigee\"\ntype: docs\ndescription: Apigee API Management\n---\n"
  },
  {
    "path": "website/content/en/rules/asm/ERR/2023_001.md",
    "content": "---\ntitle: \"asm/ERR/2023_001\"\nlinkTitle: \"ERR/2023_001\"\nweight: 1\ntype: docs\ndescription: >\n  ASM traffic indicates Client side requests failure\n---\n\n**Product**: [Anthos Service Mesh](https://cloud.google.com/anthos)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n\n### Description\n\nIstio proxies are responsible for sending data plane traffic from one\nworkload to another. These proxies log the status codes of requests proxied.\n4XX response code indicate client side issue such as malformed headers,\npage not found etc\n\n### Remediation\n\nIdentify the source and destination workload for request failing and inspect the failed request for client side issues.\nInspect the client failing.\n\n### Further information\n\n- [How to collect access logs ](https://cloud.google.com/service-mesh/docs/troubleshooting/troubleshoot-collect-logs)\n"
  },
  {
    "path": "website/content/en/rules/asm/ERR/2023_002.md",
    "content": "---\ntitle: \"asm/ERR/2023_002\"\nlinkTitle: \"ERR/2023_002\"\nweight: 1\ntype: docs\ndescription: >\n  ASM traffic indicates Client side requests failure\n---\n\n**Product**: [Anthos Service Mesh](https://cloud.google.com/anthos)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n\n### Description\n\nIstio proxies are responsible for sending data plane traffic from one\nworkload to another. These proxies log the status codes of requests proxied.\n5XX response code indicate server side issue such as no upstream resources,\nTLS handshake failure etc.\n\n### Remediation\n\nIdentify the source and destination workload for request failing and inspect the failed request for server side issues.\nInspect the destination workload pod logs for issue with failing request.\n\n### Further information\n\n- [How to collect access logs ](https://cloud.google.com/service-mesh/docs/troubleshooting/troubleshoot-collect-logs)\n"
  },
  {
    "path": "website/content/en/rules/asm/ERR/2024_001.md",
    "content": "---\ntitle: \"asm/ERR/2024_001\"\nlinkTitle: \"ERR/2024_001\"\nweight: 1\ntype: docs\ndescription: >\n  Getting timed out error for secret not found for ingress gateway\n---\n\n**Product**: [Anthos Service Mesh](https://cloud.google.com/anthos)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nWhen deploying Ingress gateway which is using a secret, you may get the\nfollowing error:\ngRPC config: initial fetch timed out for type.googleapis.com/envoy.extensions.\ntransport_sockets.tls.v3.Secret\n\nThis means Ingress gateway is trying to get certs but failing. This could mean\nistiod is denying the requests or otherwise cannot access them.\n\n### Remediation\n\nOne possible solution is to confirm if the secret exists in the given namespace.\nYou can use the command `kubectl get secrets -n <namespace>` to verify the\nexistence of secret. One way to check is by looking at the audit logs to confirm\nif the secret was deleted somehow.\n\n### Further information\n\n- Further, checking the Istiod logs will likely give more info.\n"
  },
  {
    "path": "website/content/en/rules/asm/ERR/2024_002.md",
    "content": "---\ntitle: \"asm/ERR/2024_002\"\nlinkTitle: \"ERR/2024_002\"\nweight: 1\ntype: docs\ndescription: >\n  Sufficient resources (CPU and memory) then Istiod pods are scheduled.\n---\n\n**Product**: [Anthos Service Mesh](https://cloud.google.com/anthos)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nWhen provisioning ASM, make sure that the istiod ods have sufficient resources\nso that they can be scheduled properly.\n\nInsufficient memory or CPU resources can prevent Istiod pods from being\nscheduled, potentially leading to control plane malfunctions and disruptions in\nAnthos Service Mesh (ASM) functionality.\n\n### Remediation\n\nIf the Istiod pods are not getting enough resources, you may need to increase\ntheir resource requests in the Istio configuration. Also, ensure that your GKE nodes\nhave enough allocatable CPU and memory resources to accommodate the increased\nrequests for Istiod pods.\n\n### Further information\n\n- Further, checking the Istiod logs will likely give more info.\n"
  },
  {
    "path": "website/content/en/rules/asm/WARN/2023_001.md",
    "content": "---\ntitle: \"asm/WARN/2023_001\"\nlinkTitle: \"WARN/2023_001\"\nweight: 1\ntype: docs\ndescription: >\n  gRCP Config stream reset event detected in istio proxies\n---\n\n**Product**: [Anthos Service Mesh](https://cloud.google.com/anthos)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nEnvoy proxies running as istio side car proxies in Anthos Service mesh communicate to control plane\nwith gRPC stream. These streams are regulalry closed every 30secs if there is no update from the control plane.\nThese connections are flused and log entries are created in proxies.\n\nIn an event where these warning are quite often within 30sec, it indicate a possible issue with control plane.\n\n### Remediation\n\nYou can use the following step by step guide to troubleshoot Anthos service mesh\nhttps://cloud.google.com/service-mesh/docs/troubleshooting/troubleshoot-intro\n\n### Further information\n\n- [OSS Istio issue](https://github.com/istio/istio/issues/19321)\n"
  },
  {
    "path": "website/content/en/rules/asm/WARN/2024_001.md",
    "content": "---\ntitle: \"asm/WARN/2024_001\"\nlinkTitle: \"WARN/2024_001\"\nweight: 1\ntype: docs\ndescription: >\n  No webhook creation failures were found.\n---\n\n**Product**: [Anthos Service Mesh](https://cloud.google.com/anthos)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nError occurred while calling the webhook \"namespace.sidecar-injector.istio.io\".\n\n### Remediation\n\nMake sure that endpoints are available for the service istiod-asm-ASM-version\n"
  },
  {
    "path": "website/content/en/rules/asm/WARN/2025_001.md",
    "content": "---\ntitle: \"asm/WARN/2025_001\"\nlinkTitle: \"WARN/2025_001\"\nweight: 1\ntype: docs\ndescription: >\n  ASM: Envoy doesn't report connection failure\n---\n**Product**: [Anthos Service Mesh](https://cloud.google.com/anthos \\\n**Rule class**: WARN - Something that is very likely to be wrong\n\n### Description\n\nThe error code 111 typically corresponds to the ECONNREFUSED error in Linux\nwhich means that the connection was refused by the server(sidecar). This\ngenerally indicates that no process is listening on the IP:Port combination that\nthe client is trying to connect to\n\n### Remediation\n\nVerify that the application port in the pod is correctly configured and\nresponding to the defined server port. Use tools like curl or netcat to test\nconnectivity to the application port from within the pod. Ensure there are no\nmisconfigurations or firewall rules blocking the connection.\n"
  },
  {
    "path": "website/content/en/rules/asm/WARN/2025_002.md",
    "content": "---\ntitle: \"asm/WARN/2025_002\"\nlinkTitle: \"WARN/2025_002\"\nweight: 1\ntype: docs\ndescription: >\n  ASM: Upstream connection established successfully with no protocol errors\n---\n**Product**: [Anthos Service Mesh](https://cloud.google.com/anthos)\\\n**Rule class**: WARN - Something that is very likely to be wrong\n\n### Description\nThe error \"upstream connect error or disconnect/reset before headers.\nreset reason: protocol error\" typically indicates a invalid headers during\nthe connection establishment between Envoy and the upstream service.\nThis could occur when Envoy receives headers that are not properly formatted\ncontain duplicates, or conflict with each other\n(e.g., multiple Transfer-Encoding headers) leading to a protocol error.\n\n### Remediation\nTo remediate the \"upstream connect error or disconnect/reset before headers\nreset reason: protocol error\": Ensure the upstream service is not sending\nduplicate or conflicting headers, such as multiple Transfer-Encoding headers\nValidate the headers are properly formatted and comply with HTTP standards\nYou can also perform a PCAP capture on the application pod to check the\nresponse headers being sent by application.\n"
  },
  {
    "path": "website/content/en/rules/asm/_index.md",
    "content": "---\ntitle: \"ASM\"\nlinkTitle: \"asm\"\ntype: docs\ndescription: Anthos Service Mesh\n---\n"
  },
  {
    "path": "website/content/en/rules/bigquery/ERR/2022_001.md",
    "content": "---\ntitle: \"bigquery/ERR/2022_001\"\nlinkTitle: \"ERR/2022_001\"\nweight: 1\ntype: docs\ndescription: >\n  BigQuery jobs not failing due to concurrent DML updates on the same table\n---\n\n**Product**: [BigQuery](https://cloud.google.com/bigquery)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nMultiple DML queries running concurrently are conflicting with each other.\n\n### Remediation\n\nConsider spacing out the DML operations to a single table enough so that they\ndon't overlap, or start another one only after the earlier one is completed.\n\n### Further information\n\n- [Learn how BigQuery handles DML statements](https://cloud.google.com/blog/products/data-analytics/dml-without-limits-now-in-bigquery)\n"
  },
  {
    "path": "website/content/en/rules/bigquery/ERR/2022_002.md",
    "content": "---\ntitle: \"bigquery/ERR/2022_002\"\nlinkTitle: \"ERR/2022_002\"\nweight: 1\ntype: docs\ndescription: >\n  BigQuery jobs are not failing due to results being larger than the maximum response size\n---\n\n**Product**: [BigQuery](https://cloud.google.com/bigquery)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nQuery results for SQL queries in BigQuery that generate excessively large results and don't\nset a destination table fail with job error \"responseTooLarge\"\n\n### Remediation\n\nAdding a **LIMIT** clause can sometimes help, or removing the **ORDER BY** clause.\nIf you want to ensure that large results can return, you can specify a destination table\nand also set the **allowLargeResults** option to true if using Legacy SQL.\n\n### Further information\n\n- [Learn how to write large query results in BigQuery](https://cloud.google.com/bigquery/docs/writing-results#large-results)\n"
  },
  {
    "path": "website/content/en/rules/bigquery/ERR/2022_003.md",
    "content": "---\ntitle: \"bigquery/ERR/2022_003\"\nlinkTitle: \"ERR/2022_003\"\nweight: 1\ntype: docs\ndescription: >\n  BigQuery jobs are not failing while accessing data in Drive due to a permission issue\n---\n\n**Product**: [BigQuery](https://cloud.google.com/bigquery)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nBigQuery jobs are failing because the authentication token is missing the Google\nDrive access scope or the user/service account is not granted at least the Viewer\nrole on the Drive file\n\n### Remediation\n\n- Make sure the user/service account has at least the **Viewer** access to the\n  Drive file\n- Make sure that the Drive scope (\"https://www.googleapis.com/auth/drive\") is applied\nwhen using a client library\n- If a scheduled query is failing, you might need to [refresh credentials](https://cloud.google.com/bigquery/docs/scheduling-queries#updating_the_credentials_of_a_scheduled_query)\n\n### Further information\n\nThe drive scope can be applied at a different level as well:\n\n- When running [`gcloud auth login`](https://cloud.google.com/sdk/gcloud/reference/auth/login#--enable-gdrive-access):\n\n```\ngcloud auth login --enable-gdrive-access\n```\n- If you user credentials are used as Application Default Credentials, you can specify scopes the following way (`--scopes` can be used to add any scope, not limited to `drive` or `bigquery`):\n\n```\ngcloud auth application-default login --scopes openid,https://www.googleapis.com/auth/userinfo.email,https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/drive,https://www.googleapis.com/auth/bigquery\n```\n\n- Using the [bq tool](https://cloud.google.com/bigquery/docs/reference/bq-cli-reference#global_flags) when running `bq query`:\n\n```\nbq query --enable_gdrive=true 'SELECT ....'\n```\n- For a [GKE node pool](https://cloud.google.com/sdk/gcloud/reference/container/node-pools/create#--scopes) during creation:\n\n```\ngcloud container node-pools create {POOL-NAME} \\\n--cluster={CLUSTER-NAME} \\\n--disk-type=pd-ssd --machine-type=n1-standard-16 --enable-autoscaling --max-nodes=3 --min-nodes=0 --num-nodes=0 --preemptible --zone=us-west1-a \\\n--scopes=cloud-platform,https://www.googleapis.com/auth/drive\n```\n- For a [GCE instance](https://cloud.google.com/sdk/gcloud/reference/compute/instances/create#--scopes) during creation:\n\n```\ngcloud compute instances create {INSTANCE-NAME} \\\n--zone=us-west1-a --image-family=debian-9 --image-project=debian-cloud --machine-type=n1-standard-16 \\\n--scopes=cloud-platform,https://www.googleapis.com/auth/drive\n```\n"
  },
  {
    "path": "website/content/en/rules/bigquery/ERR/2022_004.md",
    "content": "---\ntitle: \"bigquery/ERR/2022_004\"\nlinkTitle: \"ERR/2022_004\"\nweight: 1\ntype: docs\ndescription: >\n  BigQuery jobs are not failing due to shuffle operation resources exceeded\n---\n\n**Product**: [BigQuery](https://cloud.google.com/bigquery)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nThe query job failed because the maximum disk and memory limit available for shuffle\noperations was exceeded for the project or organization.\n\n### Remediation\n\nThe limit cannot be increased for users - it is linearly correlated to the\nnumber of slots available in the project. Provision more slots for this to be\nincreased.\n\nFurther recommendations that can help:\n\n- Reduce query concurrency\n- Optimize the query to use less shuffle resources\n- Query less data within a single query job\n- Materialize intermediate results\n\n### Further information\n\n- [Read more about avoiding SQL anti-patterns in BigQuery](https://cloud.google.com/bigquery/docs/best-practices-performance-patterns)\n- [Read more about optimizing communication between slots](https://cloud.google.com/bigquery/docs/best-practices-performance-communication)\n"
  },
  {
    "path": "website/content/en/rules/bigquery/ERR/2023_001.md",
    "content": "---\ntitle: \"bigquery/ERR/2023_001\"\nlinkTitle: \"ERR/2023_001\"\nweight: 1\ntype: docs\ndescription: >\n  There was an API call via the getQueryResults method that returned \"Not Found Job: {job ID}\"\n---\n\n**Product**: [BigQuery](https://cloud.google.com/bigquery)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nThis happens when BigQuery jobs have been requested via the API but cannot be found. This can be due to incorrect information being provided in the call, such as the jobID or location. For example, if the jobID is misspelled or the location is not specified (especially if it is not a US or a EU multi-regional location), the job will not be found.\n\n\nTo avoid this error, make sure to provide accurate information in the API call. You can also check the BigQuery job history to see if the job has been completed or deleted.\n\n\n### Remediation\nTo ensure that your API calls are correct, verify that they include the necessary information, such as a job ID, project ID, and location (if applicable).\n\nYou must specify the location to run the job in the following cases:\n  - If the location to run a job is not in the US or the EU multi-regional location.\n  - If the job's location is in a single region (for example, us-central1).\n\n### Further\n- [Read more about how to use the getQueryResult API Method](https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs/getQueryResults)\n"
  },
  {
    "path": "website/content/en/rules/bigquery/ERR/2023_002.md",
    "content": "---\ntitle: \"bigquery/ERR/2023_002\"\nlinkTitle: \"ERR/2023_002\"\nweight: 1\ntype: docs\ndescription: >\n  Dataset not found during copy table operation\n---\n\n**Product**: [BigQuery](https://cloud.google.com/bigquery)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nWhile trying to copy a table, either the destination or source dataset was not found.\nThis could be due to a few things.\n  - When you copy a table, the name of the destination table must adhere to the same naming conventions as when you create a table.\n  - Table copies are subject to BigQuery limits on copy jobs.\n  - The Google Cloud console supports copying only one table at a time. You cannot overwrite an existing table in the destination dataset. The table must have a unique name in the destination dataset.\n  - Copying multiple source tables into a destination table is not supported by the Google Cloud console.\n  - When copying multiple source tables to a destination table using the API, bq command-line tool, or the client libraries, all source tables must have identical schemas, including any partitioning or clustering.\n  - The time that BigQuery takes to copy tables might vary significantly across different runs because the underlying storage is managed dynamically.\n  - You cannot copy and append a source table to a destination table that has more columns than the source table, and the additional columns have default values. Instead, you can run INSERT destination_table SELECT * FROM source_table to copy over the data.\n  - When copying tables, the destination dataset must reside in the same location as the dataset containing the table being copied. For example, you cannot copy a table from an EU-based dataset and write it to a US-based dataset.\n\n### Remediation\n  When copying a table make sure that the destination table is in the same region as the source table.\n  if you want to copy cross-region we recommend to copy a dataset cross region.\n  Make sure the source and destination datasets exist.\n\n### Further information\n- [Read more about the best practices for copying a table](https://cloud.google.com/bigquery/docs/managing-tables#copy-table)\n- [Read more about the best practices for copying a dataset](https://cloud.google.com/bigquery/docs/copying-datasets)\n"
  },
  {
    "path": "website/content/en/rules/bigquery/ERR/2023_003.md",
    "content": "---\ntitle: \"bigquery/ERR/2023_003\"\nlinkTitle: \"ERR/2023_003\"\nweight: 1\ntype: docs\ndescription: >\n  BigQuery query job do not encounter resource exceeded error\n---\n\n**Product**: [BigQuery](https://cloud.google.com/bigquery)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nA BigQuery query sometimes could not be executed in the allotted memory\n\n```\nresource.type=\"bigquery_resource\"\nseverity=ERROR\nprotoPayload.methodName=\"jobservice.jobcompleted\"\nprotoPayload.status.message:\"Resources exceeded during query execution: The query could not be executed\"\n```\n\n### Remediation\n\nThe common root causes for resources getting exceeded are data skew, join operations,\ntable creating more partitions after query completion , too many subqueries or query complexity\n\n### Further information\n\nPlease follow the best practices mentioned here http://cloud/bigquery/docs/best-practices-performance-patterns\nto avoid Data skew and https://cloud.google.com/bigquery/docs/best-practices-performance-compute\n"
  },
  {
    "path": "website/content/en/rules/bigquery/ERR/2023_004.md",
    "content": "---\ntitle: \"bigquery/ERR/2023_004\"\nlinkTitle: \"ERR/2023_004\"\nweight: 1\ntype: docs\ndescription: >\n  BigQuery query job do not encounter dml concurrency issue when mutating concurrently.\n---\n\n**Product**: [BigQuery](https://cloud.google.com/bigquery)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nMutating DML Queries that run concurrently, end up conflicting with each other. For these DML queries to maintain consistency, in case there are multiple queries that run at roughly the same time, it's possible that one of them failed.\n\n```\nresource.type=\"bigquery_resource\"\nseverity=ERROR\nprotoPayload.methodName=\"jobservice.jobcompleted\"\nprotoPayload.status.message:\"Could not serialize access to\"\n```\n\n### Remediation\n\nThe failure here is due to the concurrent DML updates. Such kind of failure is by design if there are multiple conflict DML running against the same table. The BigQuery system retries internally for up to 3 times.\n\nRecommendation:\n\nThe best way to avoid the failure is by trying to issue such kind of jobs in a serialized way. For this suggestion would be to either space out the concurrent dml or serialize dml updates such that subsequent dml updates are triggered after the previous one completes.\n\nAnother suggestion to have parallelism along with less chance of conflict is for the users to use Partitioned table. In such a case, if the parallel running DMLs touch separate partition tables then they would not lead to conflicts .\n\nMore information on how [BQ handles DML queries](https://cloud.google.com/blog/products/data-analytics/dml-without-limits-now-in-bigquery)\n"
  },
  {
    "path": "website/content/en/rules/bigquery/ERR/2023_005.md",
    "content": "---\ntitle: \"bigquery/ERR/2023_005\"\nlinkTitle: \"ERR/2023_005\"\nweight: 1\ntype: docs\ndescription: >\n  Scheduled query not failing due to outdated credentials.\n---\n**Product**: [BigQuery](https://cloud.google.com/bigquery)\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\nIf you're scheduling an existing query, you might need to update the user\ncredentials on the query. Credentials are automatically up to date for new\nscheduled queries.\nSome other situations that could require updating credentials include the\nfollowing:\n\n* You want to query Google Drive data in a scheduled query.\n* You receive an INVALID_USER error when you attempt to schedule the query:\n\n```\nError code 5 : Authentication failure: User Id not found. Error code: INVALID_USERID\n```\n\n### Remediation\nScheduled queries are a kind of transfer. To update the credentials of a\nscheduled query, you can use the bq_cli to update the transfer configuration.\n\nEnter the `bq update` command and supply the transfer flag `--transfer_config`.\nThe following flags are also required:\n* `--update_credentials`\n\nOptional flag:\n* `--service_account_name` is for authenticating your scheduled query with a\nservice account instead of your individual user account.\n\n### Further information\n[Update scheduled query credentials](https://cloud.google.com/bigquery/docs/scheduling-queries#update_scheduled_query_credentials)\n"
  },
  {
    "path": "website/content/en/rules/bigquery/ERR/2023_006.md",
    "content": "---\ntitle: \"bigquery/ERR/2023_006\"\nlinkTitle: \"ERR/2023_006\"\nweight: 1\ntype: docs\ndescription: >\n  An organization's policy doesn't block the BigQuery user domain\n---\n\n**Product**: [BigQuery](https://cloud.google.com/bigquery)\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nThere can be domain restriction policies applied to customer's organization.\nThe domain of the user (the part after '@' in the user's email) that you are\ntrying to share the BigQuery dataset with should be present in the list of\n\"Allowed\" fields for the constraint constraints/iam.allowedPolicyMemberDomains.\n\nUsing the below logs filter, you can see the IAM policy bindings for the\ndataset. Please go through the list of bindings to identify the user whose\ndomain is not allowed within your organization policies:\n\n```\nresource.type=\"bigquery_dataset\"\nprotoPayload.methodName=\"google.iam.v1.IAMPolicy.SetIamPolicy\"\nseverity=ERROR\nprotoPayload.status.message:\"One or more users named in the policy do not belong\nto a permitted customer.\"\n```\n\n### Remediation\n\nIf the domain of the user is not present in the \"Allowed\" fields for the\nconstraint constraints/iam.allowedPolicyMemberDomains, please add it to resolve\nthe error.\n\n### Further information\n\n[Restricting Domains - Setting the Organization Policy](https://cloud.google.com/resource-manager/docs/organization-policy/restricting-domains#setting_the_organization_policy)\n"
  },
  {
    "path": "website/content/en/rules/bigquery/ERR/2023_007.md",
    "content": "---\ntitle: \"bigquery/ERR/2023_007\"\nlinkTitle: \"ERR/2023_007\"\nweight: 1\ntype: docs\ndescription: >\n  Data Transfer Service Agent exists and has the required roles.\n---\n\n**Product**: [BigQuery](https://cloud.google.com/bigquery)\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nTo verify that the BigQuery Data Transfer service agent exists and has been granted the\nIAM role roles/bigquerydatatransfer.serviceAgent, please navigate to the IAM page\nand click on the 'Include Google-provided role grants' check box. In the\n'VIEW BY PRINCIPALS' tab, please check if a service account with the email\naddress format service-<project_id>@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com\nexists and has the IAM role roles/bigquerydatatransfer.serviceAgent.\n\n### Remediation\n\nIf the Data Transfer service agent does not exist when the Data Transfer service\nAPI is enabled, then please create the service agent manually by following\n[Manual Service Agent Creation](https://cloud.google.com/bigquery/docs/enable-transfer-service#manual_service_agent_creation)\n\nWhen you manually trigger service agent creation, Google doesn't grant the\npredefined service agent role automatically. You must manually grant the service\nagent the predefined role using the following Google Cloud CLI command:\n\n```\ngcloud projects add-iam-policy-binding project_number \\\n--member serviceAccount:service-project_number@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com \\\n--role roles/bigquerydatatransfer.serviceAgent\n```\n### Further information\n[Read more about BigQuery Data Transfer Service](https://cloud.google.com/bigquery/docs/dts-introduction)\n"
  },
  {
    "path": "website/content/en/rules/bigquery/ERR/2023_008.md",
    "content": "---\ntitle: \"bigquery/ERR/2023_008\"\nlinkTitle: \"ERR/2023_008\"\nweight: 1\ntype: docs\ndescription: >\n  User has the required roles to create or modify scheduled queries.\n---\n\n**Product**: [BigQuery](https://cloud.google.com/bigquery)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nTo verify that the user trying to create or modify scheduled queries has the role\nroles/bigquery.admin. If pub sub notification is configured, then user should\nalso have permission pubsub.topics.getIamPolicy which is part of the role\nroles/pubsub.admin.\n\n### Remediation\n\nIf the user trying to create or modify scheduled queries doesn't have the role roles/bigquery.admin, then please add it by following [Grant an IAM role](https://cloud.google.com/iam/docs/grant-role-console#grant_an_iam_role)\n\nIf pub sub notification is also configured and user doesn't have permission pubsub.topics.getIamPolicy, then please add the permission using a [custom role](https://cloud.google.com/iam/docs/creating-custom-roles#creating) or add role roles/pubsub.admin which contains this permission.\n\n### Further information\n\n[Read more about scheduled queries in BigQuery](https://cloud.google.com/bigquery/docs/scheduling-queries)\n"
  },
  {
    "path": "website/content/en/rules/bigquery/ERR/2023_009.md",
    "content": "---\ntitle: \"bigquery/ERR/2023_009\"\nlinkTitle: \"ERR/2023_009\"\nweight: 1\ntype: docs\ndescription: >\n  BigQuery job not failed due to Scheduled query with multiple DML\n---\n\n**Product**: [BigQuery](https://cloud.google.com/bigquery)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nDestination/Target dataset can only be set up for scheduled queries with one\nsingle DML statement. When two DML statements are present the second DML\nstatement will not pick up the correct destination/target dataset and will throw\nan error.\n\n### Remediation\nRecreate the scheduled query and make sure that the Target/Destination dataset\n`(--target_dataset)` value is not explicitly being set.\n\n### Further information\n- [BigQuery Scheduled Query error](https://cloud.google.com/knowledge/kb/bigquery-scheduled-query-error-dataset-specified-in-the-query-is-not-consistent-with-destination-dataset-000004330)\n"
  },
  {
    "path": "website/content/en/rules/bigquery/ERR/2024_001.md",
    "content": "---\ntitle: \"bigquery/ERR/2024_001\"\nlinkTitle: \"ERR/2024_001\"\nweight: 1\ntype: docs\ndescription: >\n  BigQuery query job do not encounter query is too complex\n---\n\n**Product**: [BigQuery](https://cloud.google.com/bigquery)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nA BigQuery query has too many subqueries or query is too complex\n\n```\nresource.type=\"bigquery_resource\"\nseverity=ERROR\nprotoPayload.methodName=\"jobservice.jobcompleted\"\nprotoPayload.status.message:\"Resources exceeded during query execution: Not enough resources for query planning - too many subqueries or query is too complex\"\n```\n\n### Remediation\n\nThis error occurs when a query is too complex. The primary causes of complexity are:\n\n* WITH clauses that are deeply nested or used repeatedly.\n* Views that are deeply nested or used repeatedly.\n* Repeated use of the [UNION ALL operator](https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax#union_example).\n\n\nTo address this error, try the following options:\n\n* Split the query into multiple queries, then use procedural language to run those queries in a sequence with shared state.\n* Use temporary tables instead of WITH clauses.\n* Rewrite your query to reduce the number of referenced objects and comparisons.\n\n\n### Further information\n\nPlease follow the best practices mentioned here http://cloud/bigquery/docs/best-practices-performance-patterns\n\nFor additional information on how to resolve these issues, see Troubleshoot [resources exceeded issues](https://cloud.google.com/bigquery/docs/troubleshoot-queries#ts-resources-exceeded)\n"
  },
  {
    "path": "website/content/en/rules/bigquery/WARN/2022_001.md",
    "content": "---\ntitle: \"bigquery/ERR/2022_001\"\nlinkTitle: \"ERR/2022_001\"\nweight: 1\ntype: docs\ndescription: >\n  BigQuery does not exceed rate limits\n---\n\n**Product**: [BigQuery](https://cloud.google.com/bigquery)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nBigQuery has various quotas that limit the rate and volume of incoming\nrequests. These quotas exist both to protect the backend systems, and to help\nguard against unexpected billing if you submit large jobs.\n\n### Remediation\n\nSlow down the request rate. To resolve these limit issues, retry the operation\nafter few seconds. Use exponential backoff between retry attempts. If you\nconsistently reach one of these longer-term quota limits, you should analyze\nyour workload for ways to mitigate the issue. Mitigations can include optimizing\nyour workload or requesting a quota increase.\n\n### Further information\n\nTo diagnose issues, do the following:\n* Use INFORMATION_SCHEMA views to analyze the underlying issue. These views\ncontain metadata about your BigQuery resources, including jobs, reservations,\nand streaming inserts. For example, the following query uses the\nINFORMATION_SCHEMA.JOBS view to list all quota-related errors within the past\nday:\n\n```\nSELECT\n job_id,\n creation_time,\n error_result\nFROM `region-us`.INFORMATION_SCHEMA.JOBS\nWHERE creation_time > TIMESTAMP_SUB(CURRENT_TIMESTAMP, INTERVAL 1 DAY) AND\n      error_result.reason IN ('rateLimitExceeded', 'quotaExceeded')\n```\n\n* View errors in Cloud Audit Logs\nUsing Logs Explorer, the following query returns errors with either Quota\nexceeded or limit in the message string:\n\n```\nresource.type = (\"bigquery_project\" OR \"bigquery_dataset\")\nprotoPayload.status.code =\"7\"\nprotoPayload.status.message: (\"Quota exceeded\" OR \"limit\")\n```\n\n- [Troubleshoot BigQuery quota errors](https://cloud.google.com/bigquery/docs/troubleshoot-quotas#overview)\n"
  },
  {
    "path": "website/content/en/rules/bigquery/WARN/2022_002.md",
    "content": "---\ntitle: \"bigquery/WARN/2022_002\"\nlinkTitle: \"WARN/2022_002\"\nweight: 1\ntype: docs\ndescription: >\n  BigQuery does not violate column level security\n---\n\n**Product**: [BigQuery](https://cloud.google.com/bigquery)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nBigQuery provides fine-grained access to sensitive columns using policy tags.\nUsing BigQuery column-level security, you can create policies that check, at\nquery time, whether a user has proper access.\n\n### Remediation\n\nThe Data Catalog Fine-Grained Reader role is required for users who need access\nto data in secured columns. You can find who violates the access permission by\ntaking a look the \"authenticationInfo\" from Cloud Logging and grant proper role\nto the user if needed.\n\n### Further information\n\n- [Introduction to column-level access\n  control](https://cloud.google.com/bigquery/docs/column-level-security-intro)\n- [Data Catalog IAM](https://cloud.google.com/data-catalog/docs/concepts/iam)\n"
  },
  {
    "path": "website/content/en/rules/bigquery/WARN/2022_003.md",
    "content": "---\ntitle: \"bigquery/WARN/2022_003\"\nlinkTitle: \"WARN/2022_003\"\nweight: 1\ntype: docs\ndescription: >\n  BigQuery copy job does not exceed the daily copy quota\n---\n\n**Product**: [BigQuery](https://cloud.google.com/bigquery)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nThe copy job fails because the number of copy jobs running in a project has\nexceeded the daily limit.\nYou can search in the Logs Explorer with the logging query:\n```\nresource.type=\"bigquery_resource\"\nseverity=ERROR\n\"Quota exceeded: Your project exceeded quota for copies per project.\"\n```\n\n### Remediation\n\n- Retry after the daily quota is refreshed\n- If the goal of the frequent copy operations is to create a snapshot of data, consider using\n  [table snapshots](https://cloud.google.com/bigquery/docs/table-snapshots-intro) instead.\n  Table snapshots are cheaper and faster alternative to copying full tables.\n- You can request a quota increase by contacting support or sales. It might take several days to\n  review and process the request. We recommend stating the priority, use case, and the project ID\n  in the request.\n\n### Further information\n\n- [Quotas and limitations - Copy quotas](https://cloud.google.com/bigquery/docs/copying-datasets#copy_quotas)\n- [Maximum number of copy jobs per day per project quota errors](https://cloud.google.com/bigquery/docs/troubleshoot-quotas#ts-maximum-number-of-copy-jobs-per-day-per-project-quota)\n- [Quickly, easily and affordably back up your data with BigQuery table snapshots](https://cloud.google.com/blog/products/data-analytics/google-bigquery-table-snapshots-for-data-backups)\n"
  },
  {
    "path": "website/content/en/rules/bigquery/WARN/2022_004.md",
    "content": "---\ntitle: \"bigquery/WARN/2022_004\"\nlinkTitle: \"WARN/2022_004\"\nweight: 1\ntype: docs\ndescription: >\n  BigQuery copy job does not exceed the cross-region daily copy quota\n---\n\n**Product**: [BigQuery](https://cloud.google.com/bigquery)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nThe copy job fails because the number of cross-region copy jobs running in a project has\nexceeded the daily limit.\nYou can search in the Logs Explorer with the logging query:\n```\nresource.type=\"bigquery_resource\"\nseverity=ERROR\n(\"Quota exceeded: Your project exceeded quota for cross region copies per project.\"\nOR\n\"Quota exceeded: Your table exceeded quota for cross region copies per table.\")\n```\n\n### Remediation\n\n- Retry after the daily quota is refreshed\n- You can request a quota increase by contacting support or sales. It might take several days to\n  review and process the request. We recommend stating the priority, use case, and the project ID\n  in the request.\n\n### Further information\n\n- [Quotas and limitations - Copy quotas](https://cloud.google.com/bigquery/docs/copying-datasets#copy_quotas)\n"
  },
  {
    "path": "website/content/en/rules/bigquery/WARN/2023_001.md",
    "content": "---\ntitle: \"bigquery/WARN/2023_001\"\nlinkTitle: \"WARN/2023_001\"\nweight: 1\ntype: docs\ndescription: >\n  BigQuery query job does not time out during execution\n---\n\n**Product**: [BigQuery](https://cloud.google.com/bigquery)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nA BigQuery query or multi-statement query job  can execute for up to six hours, after which it times out and fails.\n\nYou can search in the Logs Explorer for such jobs with the logging query:\n```\nresource.type=\"bigquery_resource\"\nseverity=ERROR\nprotoPayload.methodName=\"jobservice.jobcompleted\"\nprotoPayload.status.message:\"Operation timed out after 6.0 hours\"\n```\n\n### Remediation\n\n- If the exact query is being run for the first time or has never succeeded before, optimize the query being run by following [documented best practices for BigQuery jobs](https://cloud.google.com/bigquery/docs/best-practices-performance-compute).\n- If the same query used to succeed before, make sure that there were enough [computational resources (slots)](https://cloud.google.com/bigquery/docs/slots) available for the job to run and check whether the amount of data being queried has changed significantly since the last successful run. You can reach out to [Support](https://cloud.google.com/support) if you are not able to determine why the job fails.\n\n### Further information\n\n- [Optimizing query performance](https://cloud.google.com/bigquery/docs/best-practices-performance-overview)\n- [Quotas and Limits - Query Jobs](https://cloud.google.com/bigquery/quotas#query_jobs)\n"
  },
  {
    "path": "website/content/en/rules/bigquery/WARN/2023_002.md",
    "content": "---\ntitle: \"bigquery/WARN/2023_005\"\nlinkTitle: \"WARN/2023_005\"\nweight: 1\ntype: docs\ndescription: >\n  Erratic failure with wildcard table\n---\n\n**Product**: [BigQuery](https://cloud.google.com/bigquery)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nIn order to execute a GoogleSQL query that uses a wildcard table, BigQuery automatically infers the schema for that table. BigQuery uses the schema for the most recently created table that matches the wildcard as the schema for the wildcard table. Even if you restrict the number of tables that you want to use from the wildcard table using the `_TABLE_SUFFIX` pseudo column in a `WHERE` clause, BigQuery uses the schema for the most recently created table that matches the wildcard.\n\nIf the schema is inconsistent across the tables matched by the wildcard query, then BigQuery returns an error. This is the case when the columns of the matched tables have different data types, or when the columns which are not present in all of the matched tables cannot be assumed to have a null value.\n\n### Remediation\n\nYou will need to either rewrite the query, or change the schema in the wildcard tables you are querying, or not use a wildcard.\n\n### Further information\n- [Read more about Wildcard tables in BigQuery](https://cloud.google.com/bigquery/docs/querying-wildcard-tables)\n- [Read more about Querying a Wildcard Table](https://cloud.google.com/bigquery/docs/reference/standard-sql/wildcard-table-reference)\n- [Read more about best practices for writing a query for a Wildcard table](https://cloud.google.com/bigquery/docs/querying-wildcard-tables#schema_used_for_query_evaluation)\n"
  },
  {
    "path": "website/content/en/rules/bigquery/WARN/2023_003.md",
    "content": "---\ntitle: \"bigquery/WARN/2023_003\"\nlinkTitle: \"WARN/2023_003\"\nweight: 1\ntype: docs\ndescription: >\n  BigQuery query job does not fail with too many output columns error\n---\n\n**Product**: [BigQuery](https://cloud.google.com/bigquery)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nThis issue is caused when a job cannot be completed within a memory budget because of the possibility of user's schema being too large and nested.\n\n### Remediation\n\nThe number of columns is the highest contributor to memory footprint and reducing the number of columns would be the best workaround for this issue.\n"
  },
  {
    "path": "website/content/en/rules/bigquery/WARN/2023_004.md",
    "content": "---\ntitle: \"bigquery/WARN/2023_004\"\nlinkTitle: \"WARN/2023_004\"\nweight: 1\ntype: docs\ndescription: >\n  BigQuery CMEK-related operations do not fail due to missing permissions\n---\n\n**Product**: [BigQuery](https://cloud.google.com/bigquery)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nBigQuery CMEK-related operations will fail if the BigQuery encryption service account for that project does not have the permission to encrypt and decrypt using\nthat CMEK KMS key.\n\nYou can search in the Logs Explorer for such failing operations with the logging query:\n```\nresource.type=\"bigquery_resource\"\nseverity=ERROR\nprotoPayload.serviceName=\"bigquery.googleapis.com\"\nprotoPayload.status.message=~\"Access Denied: BigQuery BigQuery: Cloud KMS Error: Permission .* Please grant Cloud KMS CryptoKey Encrypter/Decrypter role to BigQuery service account.*\"\n```\n\n### Remediation\n\nTo protect your BigQuery data with a CMEK key, grant the BigQuery\nencryption service account permission to encrypt and decrypt using\nthat key via the Cloud KMS CryptoKey Encrypter/Decrypter IAM role. The BigQuery encryption service account is of the form `bq-PROJECT_NUMBER@bigquery-encryption.iam.gserviceaccount.com`\n\n### Further information\n\n- [Grant encryption and decryption permission to BigQuery encryption service account](https://cloud.google.com/bigquery/docs/customer-managed-encryption#grant_permission)\n"
  },
  {
    "path": "website/content/en/rules/bigquery/WARN/2024_001.md",
    "content": "---\ntitle: \"bigquery/WARN/2024_001\"\nlinkTitle: \"WARN/2024_001\"\nweight: 1\ntype: docs\ndescription: >\n  BigQuery table does not exceeds the limit for imports or query appends\n---\n\n**Product**: [BigQuery](https://cloud.google.com/bigquery)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nBigQuery returns this error message when your table reaches the limit for table operations per day for Standard tables. Table operations include the combined total of all load jobs, copy jobs, and query jobs that append or overwrite a destination table.\n\nYou can search in the Logs Explorer with the logging query:\n```\nresource.type=\"bigquery_resource\"\nseverity>=ERROR\n\"Your table exceeded quota for imports or query appends per table\"\n```\n\n### Remediation\n\nIf you have not identified the source from where most table operations are originating, do the following:\n1. Make a note of the project, dataset, and table that the failed query, load, or the copy job is writing to.\n\n2. Use `INFORMATION_SCHEMA.JOBS_BY_*` tables to learn more about jobs that modify the table.\n\nThe following example finds the hourly count of jobs grouped by job type for a 24-hour period using `JOBS_BY_PROJECT`. If you expect multiple projects to write to the table, replace `JOBS_BY_PROJECT` with `JOBS_BY_ORGANIZATION`.\n\n```\nSELECT\n  TIMESTAMP_TRUNC(creation_time, HOUR),\n  job_type,\n  count(1)\nFROM `region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT\n#Adjust time\nWHERE creation_time BETWEEN \"2021-06-20 00:00:00\" AND \"2021-06-21 00:00:00\"\nAND destination_table.project_id = \"my-project-id\"\nAND destination_table.dataset_id = \"my_dataset\"\nAND destination_table.table_id = \"my_table\"\nGROUP BY 1, 2\nORDER BY 1 DESC\n```\n\n\n**This quota cannot be increased. To resolve this quota error, do the following:**\n\n* If you frequently load data from multiple small files stored in Cloud Storage that uses a job per file, then combine multiple load jobs into a single job. You can load from multiple Cloud Storage URIs with a comma-separated list (for example, `gs://my_path/file_1,gs://my_path/file_2`), or by using wildcards (for example, `gs://my_path/*`).\nFor more information, see [Batch loading data](https://cloud.google.com/bigquery/docs/batch-loading-data#permissions-load-data-from-cloud-storage)\n* If you use load, select or copy jobs to append single rows of data to a table, for example, then you should consider batching multiple jobs into one job. BigQuery doesn't perform well when used as a relational database. As a best practice, avoid running frequent, single-row append actions.\n* To append data at a high rate, consider using [BigQuery Storage Write API](https://cloud.google.com/bigquery/docs/write-api). It is a recommended solution for high-performance data ingestion. The BigQuery Storage Write API has robust features, including exactly-once delivery semantics. To learn about limits and quotas, see [Storage Write API](https://cloud.google.com/bigquery/quotas#write-api-limits) and to see costs of using this API, see [BigQuery data ingestion pricing.](https://cloud.google.com/bigquery/pricing#data_ingestion_pricing)\n\n### Further information\n\n- [Quotas and limitations - Table modifications per day](https://cloud.google.com/bigquery/quotas#standard_tables)\n"
  },
  {
    "path": "website/content/en/rules/bigquery/WARN/2024_002.md",
    "content": "---\ntitle: \"bigquery/WARN/2024_002\"\nlinkTitle: \"WARN/2024_002\"\nweight: 1\ntype: docs\ndescription: >\n  BigQuery external connection with Cloud SQL does not fail\n---\n\n**Product**: [BigQuery](https://cloud.google.com/bigquery)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nWhen connecting with Cloud SQL external connection using bigquery the BigQuery\nConnection Service Agent is automatically created and given an IAM role as Cloud\nSQL client. If the role doesn't exists, query over the associated data source\nconnection fails.\n\n### Remediation\n\nEnsure that valid credentials were used and all prerequisites were followed to\ncreate the connection for Cloud SQL. Check if the service account that is\nautomatically created when a connection to Cloud SQL is created has the Cloud\nSQL Client (roles/cloudsql.client) role. The service account is of the\nfollowing format:\nservice-PROJECT_NUMBER@gcp-sa-bigqueryconnection.iam.gserviceaccount.com\n\n### Further information\n[1] https://cloud.google.com/bigquery/docs/cloud-sql-federated-queries#troubleshooting\n[2] https://cloud.google.com/bigquery/docs/connect-to-sql#access-sql\n"
  },
  {
    "path": "website/content/en/rules/bigquery/WARN/2024_003.md",
    "content": "---\ntitle: \"bigquery/WARN/2024_003\"\nlinkTitle: \"WARN/2024_003\"\nweight: 1\ntype: docs\ndescription: >\n  BigQuery job does not fail due to Maximum API requests per user per method exceeded.\n---\n\n**Product**: [BigQuery](https://cloud.google.com/bigquery)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nBigQuery returns Quota exceeded or Exceeded rate limits error when you hit the\nrate limit for the number of API requests to a BigQuery API per user per method.\n\n### Remediation\n\nThe quota for a few calls for example, the ```tables.get``` method calls from a service account, or the ```jobs.insert``` method calls. The default quota considered for these calls is 100 calls per second and is enforced per user and not per project.\nThe error thrown when this limit is breached is as follows:\n```Exceeded rate limits: too many api requests per user per method for this user_method```\nWhen you encounter this error, [diagnose](https://cloud.google.com/bigquery/docs/troubleshoot-quotas#ts-maximum-api-request-limit-diagnose) the issue and then follow the [recommended](https://cloud.google.com/bigquery/docs/troubleshoot-quotas#ts-maximum-api-request-limit-resolution) steps to resolve it.\n\n### Further information\n\n- [API quotas and limits](https://cloud.google.com/bigquery/quotas#api_quotas_and_limits)\n"
  },
  {
    "path": "website/content/en/rules/bigquery/WARN/2024_004.md",
    "content": "---\ntitle: \"bigquery/WARN/2024_004\"\nlinkTitle: \"WARN/2024_004\"\nweight: 1\ntype: docs\ndescription: >\n  BigQuery job not exceeding the concurrent queries limit for remote functions.\n---\n\n**Product**: [BigQuery](https://cloud.google.com/bigquery)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nBigQuery encountered a \"Exceeded rate limits\" error. This means the number of\nqueries simultaneously using remote functions surpassed a predefined\nthreshold to ensure system stability. To avoid overloading the system,\nBigQuery restricts the number of concurrent operations.\n\n### Remediation\n\n[Maximum number of concurrent queries that contain remote functions](https://cloud.google.com/bigquery/docs/troubleshoot-quotas#ts-maximum-number-of-concurrent-remote-functions)\n\n### Further information\n\n[Remote function limits.](https://cloud.google.com/bigquery/quotas#remote_function_limits)\n"
  },
  {
    "path": "website/content/en/rules/bigquery/WARN/2024_005.md",
    "content": "---\ntitle: \"bigquery/WARN/2024_005\"\nlinkTitle: \"WARN/2024_005\"\nweight: 1\ntype: docs\ndescription: >\n  BigQuery table does not exceed quota for Number of partition modifications to a column partitioned table\n---\n**Product**: [BigQuery](https://cloud.google.com/bigquery)\\\n**Rule class**: WARN - Something that is possibly wrong\n### Description\nBigQuery returns this error when your column-partitioned table reaches the quota\nof the number of partition modifications permitted per day. Partition modifications\ninclude the total of all load jobs, copy jobs, and query jobs that append or\noverwrite a destination partition.\nTo see the value of the Number of partition modifications per column-partitioned\ntable per day limit, see [Partitioned tables](https://cloud.google.com/bigquery/quotas#partitioned_tables).\n### Remediation\n**This quota cannot be increased. To resolve this quota error, do the following:**\n* Change the partitioning on the table to have more data in each partition, in\norder to decrease the total number of partitions. For example, change from [partitioning by day to partitioning by month](https://cloud.google.com/bigquery/docs/partitioned-tables#choosing_daily_hourly_monthly_or_yearly_partitioning) or\nchange [how you partition the table.](https://cloud.google.com/bigquery/docs/partitioned-tables)\n* Use [clustering](https://cloud.google.com/bigquery/docs/clustered-tables#when_to_use_clustering) instead of partitioning.\n* If you frequently load data from multiple small files stored in Cloud Storage\nthat uses a job per file, then combine multiple load jobs into a single job. You\ncan load from multiple Cloud Storage URIs with a comma-separated list\n(for example, gs://my_path/file_1,gs://my_path/file_2), or by using wildcards\n(for example, gs://my_path/*).\nFor more information, see [Batch loading data.](https://cloud.google.com/bigquery/docs/batch-loading-data#permissions-load-data-from-cloud-storage)\n* If you use load, select or copy jobs to append single rows of data to a table,\nfor example, then you should consider batching multiple jobs into one job.\nBigQuery doesn't perform well when used as a relational database. As a best\npractice, avoid running frequent, single-row append actions.\n* To append data at a high rate, consider using [BigQuery Storage Write API.](https://cloud.google.com/bigquery/docs/write-api)\nIt is a recommended solution for high-performance data ingestion. The BigQuery\nStorage Write API has robust features, including exactly-once delivery semantics.\nTo learn about limits and quotas, see Storage Write API and to see costs of using\nthis API, see BigQuery data ingestion pricing.\n### Further information\n- [Quotas and limitations - Partitioned tables](https://cloud.google.com/bigquery/quotas#partitioned_tables)\n"
  },
  {
    "path": "website/content/en/rules/bigquery/WARN/2024_006.md",
    "content": "---\ntitle: \"bigquery/WARN/2024_006\"\nlinkTitle: \"WARN/2024_006\"\nweight: 1\ntype: docs\ndescription: >\n  BigQuery project does not exceed maximum tabledata.list bytes per second per project\n---\n\n**Product**: [BigQuery](https://cloud.google.com/bigquery)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nBigQuery returns this error when the project number mentioned in the error message reaches the maximum size of data that can be read through the tabledata.list API call in a project per second. Your project can return a maximum of 7.5 GB of table row data per minute via tabledata.list in the us and eu multi-regions, and 3.7 GB of table row data per minute in all other regions. This quota applies to the project that contains the table being read. Other APIs including jobs.getQueryResults and fetching results from jobs.query and jobs.insert can also consume this quota.\n\n\n\n### Remediation\n\nTo resolve this error, do the following:\n\n* In general, we recommend trying to stay below this limit. For example, by spacing out requests over a longer period with delays. If the error doesn't happen frequently, implementing retries with exponential backoff solves this issue.\n* If the use case expects fast and frequent reading of large amount of data from a table, we recommend using [BigQuery Storage Read API](https://cloud.google.com/bigquery/docs/reference/storage) instead of the `tabledata.list` API.\n* If the preceding suggestions do not work, you can request a quota increase from Google Cloud console API dashboard by doing the following:\n\n  1. Go to the Google Cloud console API dashboard.\n  2. In the dashboard, filter for Quota: `Tabledata list bytes per minute (default quota)`.\n  3. Select the quota and follow the instruction in [Requesting higher quota limit.](https://cloud.google.com/docs/quotas/view-manage#requesting_higher_quota)\n\nIt might take several days to review and process the request.\n\n\n### Further information\n\nThe [BigQuery Storage Read API](https://cloud.google.com/bigquery/docs/reference/storage) can sustain significantly higher throughput than `tabledata.list`. If you need more throughput than allowed under this quota, consider using the BigQuery Storage Read API.\n"
  },
  {
    "path": "website/content/en/rules/bigquery/_index.md",
    "content": "---\ntitle: \"BIGQUERY\"\nlinkTitle: \"bigquery\"\ntype: docs\n---\n"
  },
  {
    "path": "website/content/en/rules/billing/WARN/2022_001.md",
    "content": "---\ntitle: \"billing/WARN/2022_001\"\nlinkTitle: \"WARN/2022_001\"\nweight: 1\ntype: docs\ndescription: >\n  Projects have billing enabled\n---\n\n**Product**: [Cloud Billing](https://cloud.google.com/billing)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nCheck whether all projects the user has permission to view have billing enabled.\n\nGCP services, require an active billing account attached to the project in order to be activated, and remain active.\n\nDisabling billing for a project will stop all the active paid resources immediately.\n\nIf the project continues without a Billing Account attached for a long time, some resources may be deleted unrecoverably after an undertemined but short amount of time.\n\n### Remediation\n\n- [How to enable billing](https://cloud.google.com/billing/docs/how-to/modify-project#how-to-enable-billing)\n\n### Further information\n"
  },
  {
    "path": "website/content/en/rules/billing/WARN/2022_002.md",
    "content": "---\ntitle: \"billing/WARN/2022_002\"\nlinkTitle: \"WARN/2022_002\"\nweight: 1\ntype: docs\ndescription: >\n  Billing Accounts have at least one project associated with them\n---\n\n**Product**: [Cloud Billing](https://cloud.google.com/billing)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nCheck whether all active billing accounts the user has permission to view have\nat least one project associated with them.\n\n### Remediation\n\n### Further information\n"
  },
  {
    "path": "website/content/en/rules/billing/WARN/2022_003.md",
    "content": "---\ntitle: \"billing/WARN/2022_003\"\nlinkTitle: \"WARN/2022_003\"\nweight: 1\ntype: docs\ndescription: >\n  Check for any billing anomalies using cost insights\n---\n\n**Product**: [Cloud Billing](https://cloud.google.com/billing)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nCost insights are part of the Recommender service, and you can use them to find important patterns in your costs. For example, you see a cost insight in the Insights API if your costs for a day are significantly higher or lower than your typical daily costs. You can use this information to find out if some of your resources are getting more usage than expected, and take action to optimize your costs.\n\nNote, cost insights are calculated before any credits (such as promotional credits or Committed Use Discounts (CUDs)) are applied to your Cloud Billing account.\n\n### Remediation\n\nThe details of the WARNING will let you know if the costs are higher or lower\nthan expected. For lower than expected costs, check whether all services you expect to be running are indeed running. For higher than expected costs, take\na look at the Billing Console to see what product is causing the spike.\n\n### Further information\n\n- [How to view your billing reports](https://cloud.google.com/billing/docs/how-to/reports)\n- [Understanding cost insights](https://cloud.google.com/billing/docs/how-to/get-cost-insights)\n"
  },
  {
    "path": "website/content/en/rules/billing/_index.md",
    "content": "---\ntitle: \"BILLING\"\nlinkTitle: \"billing\"\ntype: docs\n---\n"
  },
  {
    "path": "website/content/en/rules/cloudrun/ERR/2022_001.md",
    "content": "---\ntitle: \"cloudrun/ERR/2022_001\"\nlinkTitle: \"ERR/2022_001\"\nweight: 1\ntype: docs\ndescription: >\n  Cloud Run service agent has the run.serviceAgent role.\n---\n\n**Product**: [Cloud Run](https://cloud.google.com/run)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nThe Cloud Run Service Agent is missing the run.serviceAgent role,\nwhich gives Cloud Run service account access to managed resources.\nYou can resolve this error by granting the run.serviceAgent IAM role\nto service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com.\n\n### Remediation\n\n### Further information\n\n- [Troubleshooting permission errors](https://cloud.google.com/run/docs/troubleshooting#service-agent)\n"
  },
  {
    "path": "website/content/en/rules/cloudrun/_index.md",
    "content": "---\ntitle: \"CLOUDRUN\"\nlinkTitle: \"cloudrun\"\ntype: docs\ndescription: \"Cloud Run\"\n---\n"
  },
  {
    "path": "website/content/en/rules/cloudsql/BP/2023_001.md",
    "content": "---\ntitle: \"cloudsql/BP/2023_001\"\nlinkTitle: \"BP/2023_001\"\nweight: 1\ntype: docs\ndescription: >\n  Cloud SQL is not assigned Public IP.\n---\n\n**Product**: [CloudSQL](https://cloud.google.com/sql)\\\n**Rule class**: Best practices\n\n### Description\n\nTo lower your attack surface, Cloud SQL databases should not have public IPs.\nPrivate IPs provide improved network security and lower latency for your application.\n\n### Remediation\n\nMake sure that you do not assign Public IP to CloudSQL instances.\n\n### Further information\n\n - [Configure private IP](https://cloud.google.com/sql/docs/mysql/configure-private-ip)\n"
  },
  {
    "path": "website/content/en/rules/cloudsql/BP/2023_002.md",
    "content": "---\ntitle: \"cloudsql/BP/2023_002\"\nlinkTitle: \"BP/2023_002\"\nweight: 1\ntype: docs\ndescription: >\n  Cloud SQL is configured with automated backup\n---\n\n**Product**: [CloudSQL](https://cloud.google.com/sql)\\\n**Rule class**: Best practices\n\n### Description\n\nBackups help you restore lost data to your Cloud SQL instance. Additionally,\nif an instance is having a problem, you can restore it to a previous state by\nusing the backup to overwrite it. Enable automated backups for any instance that\ncontains necessary data. Backups protect your data from loss or damage.\n\n### Remediation\n\nYou can set the autoamted backup option when you create an instance.\nAdditionally, you can [set this option on an existing\ninstance](https://cloud.google.com/sql/docs/mysql/edit-instance#edit_an_instance).\n\n### Further information\n\n - [Instance configuration and administration](https://cloud.google.com/sql/docs/best-practices.md#backup-recovery)\n - [About Cloud SQL backups](https://cloud.google.com/sql/docs/mysql/backup-recovery/backups)\n"
  },
  {
    "path": "website/content/en/rules/cloudsql/BP/2023_003.md",
    "content": "---\ntitle: \"cloudsql/WARN/2023_001\"\nlinkTitle: \"WARN/2023_001\"\nweight: 1\ntype: docs\ndescription: >\n  Cloud SQL instance's log_output flag is not configured as TABLE\n---\n\n**Product**: [CloudSQL](https://cloud.google.com/sql)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nIf you set log_output to TABLE, the log output is placed in a table in the mysql\nsystem database. It might consume a considerable amount of disk space. If this\ntable becomes large, it can affect instance restart time or cause the instance\nto lose its SLA coverage. For this reason, the TABLE option is not recommended.\n\n### Remediation\n\nChange the `log_output` flag to `FILE` or `NONE`. Note that to minimize instance\nstorage cost, logs on the instance disk are rotated when the log file is older\nthan 24 hours (and no changes have been made within that duration) or greater\nthan 100MB in size. Old log files are automatically deleted after the rotation.\n\n### Further information\n\n - [Tips for working with flags](https://cloud.google.com/sql/docs/mysql/flags#tips)\n"
  },
  {
    "path": "website/content/en/rules/cloudsql/BP_EXT/2023_001.md",
    "content": "---\ntitle: \"cloudsql/BP_EXT/2023_001\"\nlinkTitle: \"BP_EXT/2023_001\"\nweight: 1\ntype: docs\ndescription: >\n  Cloud SQL is defined with Maintenance Window as any.\n---\n\n**Product**: [CloudSQL](https://cloud.google.com/sql)\\\n**Rule class**: BP_EXT - (Extended) Best practice, opinionated recommendation\n\n### Description\n\nConfigure a maintenance window for your primary instance to control when disruptive updates can occur.\n\n### Remediation\n\n### Further information\n"
  },
  {
    "path": "website/content/en/rules/cloudsql/BP_EXT/2023_002.md",
    "content": "---\ntitle: \"cloudsql/BP_EXT/2023_002\"\nlinkTitle: \"BP_EXT/2023_002\"\nweight: 1\ntype: docs\ndescription: >\n  Cloud SQL is not configured with Deletion Protection.\n---\n\n**Product**: [CloudSQL](https://cloud.google.com/sql)\\\n**Rule class**: BP_EXT - (Extended) Best practice, opinionated recommendation\n\n### Description\n\nProtect your CloudSQL instance and backups from accidental deletion.\n\n### Remediation\n\nYou can set the deletion protection option when you create an instance. Additionally, you can set this option on an existing instance. In both cases, deletion is prevented at the instance level. By default, the deletion protection option is disabled unless you use the Google Cloud console or Terraform to create an instance.\n\n### Further information\n\n- [Deletion Protection](https://cloud.google.com/sql/docs/mysql/deletion-protection)\n"
  },
  {
    "path": "website/content/en/rules/cloudsql/BP_EXT/2023_003.md",
    "content": "---\ntitle: \"cloudsql/BP_EXT/2023_003\"\nlinkTitle: \"BP_EXT/2023_003\"\nweight: 1\ntype: docs\ndescription: >\n  Cloud SQL enables automatic storage increases feature\n---\n\n**Product**: [CloudSQL](https://cloud.google.com/sql)\\\n**Rule class**: BP_EXT - (Extended) Best practice, opinionated recommendation\n\n### Description\n\nConfigure storage to accommodate critical database maintennance by enabling the\nautomatic storage increases feature. Otherwise, ensure that you have at least\n20% available space to accommodate any critical database maintenance operations\nthat Cloud SQL may perform. Keep in mind that when an instance becomes unable to\nadd storage that it needs, the instance likely stops accepting incoming\nconnections and could go offline.\n\n### Remediation\n\nYou can set the automatic storage increases option when you create an instance.\nAdditionally, you can [set this option on an existing\ninstance](https://cloud.google.com/sql/docs/mysql/edit-instance#edit_an_instance).\n\n### Further information\n\n- [Instance configuration and administration](https://cloud.google.com/sql/docs/best-practices.md#admin)\n- [Enable automatic storage increases](https://cloud.google.com/sql/docs/mysql/instance-settings#automatic-storage-increase-2ndgen)\n"
  },
  {
    "path": "website/content/en/rules/cloudsql/BP_EXT/2023_004.md",
    "content": "---\ntitle: \"cloudsql/BP_EXT/2023_004\"\nlinkTitle: \"BP_EXT/2023_004\"\nweight: 1\ntype: docs\ndescription: >\n  Cloud SQL instance is covered by the SLA\n---\n\n**Product**: [CloudSQL](https://cloud.google.com/sql)\\\n**Rule class**: BP_EXT - (Extended) Best practice, opinionated recommendation\n\n### Description\n\nOnly Cloud SQL instances configured for high availability with at least one\ndedicated CPU are covered by the Cloud SQL SLA. Shared-core instances and\nsingle-zone instances are not covered by the SLA. These machine types are\nconfigured to use a shared-core CPU, and are designed to provide low-cost test\nand development instances only. Don't use them for production instances.\n\n### Remediation\n\nYou can change the machine type and high availability configurations when you\ncreate an instance. Otherwise, you can [set this option on an existing\ninstance](https://cloud.google.com/sql/docs/mysql/edit-instance#edit_an_instance).\n\n### Further information\n\n- [Operational guidelines](https://cloud.google.com/sql/docs/operational-guidelines#general_configuration_requirements)\n- [About instance settings](https://cloud.google.com/sql/docs/mysql/instance-settings#machine-type-2ndgen)\n"
  },
  {
    "path": "website/content/en/rules/cloudsql/ERR/2023_001.md",
    "content": "---\ntitle: \"cloudsql/ERR/2023_001\"\nlinkTitle: \"ERR/2023_001\"\nweight: 1\ntype: docs\ndescription: >\n  Cloud SQL instance should not be in SUSPENDED state\n---\n\n**Product**: [CloudSQL](https://cloud.google.com/sql)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nThe SUSPENDED state indicates a billing issue with your Google Cloud account.\nYou can determine your billing status by filing a Billing Support Request.\nAfter the billing issue is resolved, the instance returns to runnable status\nwithin a few hours. Note that suspended MySQL instances are deleted after 90\ndays.\n\n### Remediation\n\nMake sure that your billing status is not disabled and has no issue by filing a [Billing Support\nRequest](https://cloud.google.com/support/billing/?visit_id=638223058593313080-26640928&rd=1).\n\n### Further information\n\n- [FAQ: Why is my instance suspended?](https://cloud.google.com/sql/faq)\n"
  },
  {
    "path": "website/content/en/rules/cloudsql/SEC/2023_001.md",
    "content": "---\ntitle: \"cloudsql/SEC/2023_001\"\nlinkTitle: \"SEC/2023_001\"\nweight: 1\ntype: docs\ndescription: >\n  Cloud SQL is not publicly accessible.\n---\n\n**Product**: [CloudSQL](https://cloud.google.com/sql)\\\n**Rule class**: SEC - Potential security issue\n\n### Description\n\nYour SQL instance has 0.0.0.0/0 as an allowed network.\nThis occurrence means that any IPv4 client can pass the network firewall\nand make login attempts to your instance,\nincluding clients you might not have intended to allow.\nClients still need valid credentials to successfully log in to your instance.\n\n### Remediation\n\n### Further information\n"
  },
  {
    "path": "website/content/en/rules/cloudsql/WARN/2022_001.md",
    "content": "---\ntitle: \"cloudsql/WARN/2022_001\"\nlinkTitle: \"WARN/2022_001\"\nweight: 1\ntype: docs\ndescription: >\n  Cloud SQL is not using Docker bridge network.\n---\n\n**Product**: [CloudSQL](https://cloud.google.com/sql)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nThe IP range 172.17.0.0/16 is reserved for the Docker bridge network.\nAny Cloud SQL instances created with an IP in that range will be unreachable.\nConnections from any IP within that range to Cloud SQL instances using private\nIP fail.\n\n### Remediation\n\nMake sure that you do not use Docker bridge network for instances that need to\nget accessed via private ip.\n\n### Further information\n\n - [Configure private IP](https://cloud.google.com/sql/docs/mysql/configure-private-ip)\n"
  },
  {
    "path": "website/content/en/rules/cloudsql/WARN/2023_002.md",
    "content": "---\ntitle: \"cloudsql/WARN/2023_002\"\nlinkTitle: \"WARN/2023_002\"\nweight: 1\ntype: docs\ndescription: >\n  Cloud SQL instance's avg CPU utilization is not over 98% for 6 hours\n---\n\n**Product**: [CloudSQL](https://cloud.google.com/sql)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nIf CPU utilization is over 98% for six hours, your instance is not properly\nsized for your workload, and it is not covered by the SLA.\n\n### Remediation\n\n[Increase the number of CPUs for your\ninstance](https://cloud.google.com/sql/docs/mysql/edit-instance). Note that changing CPUs requires\nan instance restart. If your instance is already at the maximum number of CPUs,\nshard your database to multiple instances.\n\n### Further information\n\n - [Optimize high CPU utilization](https://cloud.google.com/sql/docs/mysql/optimize-cpu-usage)\n - [Operational guidelines](https://cloud.google.com/sql/docs/mysql/operational-guidelines#resource_constraints)\n"
  },
  {
    "path": "website/content/en/rules/cloudsql/WARN/2023_003.md",
    "content": "---\ntitle: \"cloudsql/WARN/2023_003\"\nlinkTitle: \"WARN/2023_003\"\nweight: 1\ntype: docs\ndescription: >\n  Cloud SQL instance's memory usage does not exceed 90%\n---\n\n**Product**: [CloudSQL](https://cloud.google.com/sql)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nIf you have less than 10% memory in database/memory/components.cache and\ndatabase/memory/components.free combined, the risk of an OOM event is high.\n\n### Remediation\n\n[Calculate the maximum memory usage](https://cloud.google.com/sql/docs/mysql/optimize-high-memory-usage#calculate_memory_consumption)\nby your MySQL database to select the appropriate instance type for your MySQL\ndatabase. After you analyze the memory usage by different components, set the\nappropriate flag in your MySQL database. Lastly, if the memory usage is still\nhigh and you feel running queries and flag values are optimized, then consider\n[increasing the instance size](https://cloud.google.com/sql/docs/mysql/edit-instance)\nto avoid OOM.\n\n### Further information\n\n - [Optimize high memory consumption in instances](https://cloud.google.com/sql/docs/mysql/optimize-high-memory-usage#recommendations)\n"
  },
  {
    "path": "website/content/en/rules/cloudsql/_index.md",
    "content": "---\ntitle: \"CLOUDSQL\"\nlinkTitle: \"cloudsql\"\ntype: docs\ndescription: Cloud SQL\n---\n"
  },
  {
    "path": "website/content/en/rules/composer/BP/2023_001.md",
    "content": "---\ntitle: \"composer/BP/2023_001\"\nlinkTitle: \"BP/2023_001\"\nweight: 1\ntype: docs\ndescription: >\n  Cloud Composer logging level is set to INFO\n---\n\n**Product**: [Cloud Composer](https://cloud.google.com/composer)\\\n**Rule class**: BP - Best practice, opinionated recommendation\n\n### Description\n\nLogging level of Airflow may have been set to DEBUG for troubleshooting\npurposes. However, it is highly recommended to revert the logging level\nback to INFO after the troubleshooting is completed. Leaving the logging\nlevel at DEBUG might increase costs associated with Cloud Storage. Logging\nlevels higher than INFO (WARNING, ERROR) could suppress logs that are useful\nto troubleshooting, so it also not recommended.\n\n### Remediation\n\nRevert the logging level back to INFO.\n\n### Further information\n\n- [Logging Level of\n  Airflow](https://cloud.google.com/composer/docs/composer-2/troubleshooting-dags#troubleshooting-workflow)\n"
  },
  {
    "path": "website/content/en/rules/composer/BP/2023_002.md",
    "content": "---\ntitle: \"composer/BP/2023_002\"\nlinkTitle: \"BP/2023_002\"\nweight: 1\ntype: docs\ndescription: >\n  Cloud Composer's worker concurrency is not limited by parallelism parameter\n---\n\n**Product**: [Cloud Composer](https://cloud.google.com/composer)\\\n**Rule class**: BP - Best practice, opinionated recommendation\n\n### Description\n\nThe parallelism defines the maximum number of task instances that can run\nconcurrently in Airflow. Generally, the parameter should be equal or higher than\na product of maximum number of workers and worker_concurrency. Otherwise,\nresources in workers could not be fully-utilized.\n\n### Remediation\n\nObserve your environment's performance and adjust `parallelism` or\n`worker_concurrency` parameter properly.\n\n### Further information\n\n- [Optimize environment performance and costs](https://cloud.google.com/composer/docs/composer-2/optimize-environments)\n- [Scaling Airflow configuration](https://cloud.google.com/composer/docs/composer-2/troubleshooting-scheduling#scaling_airflow_configuration)\n- [Worker concurrency](https://cloud.google.com/composer/docs/composer-2/optimize-environments#override-worker-concurrency)\n"
  },
  {
    "path": "website/content/en/rules/composer/BP/2023_003.md",
    "content": "---\ntitle: \"composer/BP/2023_003\"\nlinkTitle: \"BP/2023_003\"\nweight: 1\ntype: docs\ndescription: >\n  Cloud Composer does not override the StatsD configuration\n---\n\n**Product**: [Cloud Composer](https://cloud.google.com/composer)\\\n**Rule class**: BP - Best practice, opinionated recommendation\n\n### Description\n\nMetrics from Cloud Composer like scheduler heartbeat, number of completed tasks\nand pods are collected via the StatsD daemon. If you override the default StatsD\nconfiguration, it will cause missing metrics in the monitoring pages and\ncomponents including airflow-scheduler that depend on Statsd metrics for\nhealthcheck will be marked as unhealthy.\n\n### Remediation\n\nRemove the overridden StatsD Airflow configurations, otherwise the monitoring page\nwill never work.\n\nNote that there is no way to make both the composer default settings and your\ncustomized StatsD settings work.\n\n### Further information\n\n- [StatsD plugin](https://cloud.google.com/monitoring/agent/plugins/statsd)\n- [Airflow Metrics](https://airflow.apache.org/docs/apache-airflow/stable/administration-and-deployment/logging-monitoring/metrics.html)\n"
  },
  {
    "path": "website/content/en/rules/composer/BP_EXT/2023_001.md",
    "content": "---\ntitle: \"composer/BP_EXT/2023_001\"\nlinkTitle: \"BP_EXT/2023_001\"\nweight: 1\ntype: docs\ndescription: >\n  Cloud Composer has no more than 2 Airflow schedulers\n---\n\n**Product**: [Cloud Composer](https://cloud.google.com/composer)\\\n**Rule class**: BP_EXT - (Extended) Best practice, opinionated recommendation\n\n### Description\n\nCloud Composer is configured more than 2 Airflow schedulers.\n\nIn general, extra schedulers more than 2 consumes resources of your environment\nwithout contributing to overall performance. We recommend starting with two\nschedulers and then monitoring the performance of your environment.\n\n### Remediation\n\nEnsure that having more than 2 schedulers doesn't affect the performance\nnegatively. Otherwise adjust the schedulers less or equal to 2.\n\n### Further information\n\n- [Adjust the number of schedulers](https://cloud.google.com/composer/docs/composer-2/scale-environments#scheduler-count)\n"
  },
  {
    "path": "website/content/en/rules/composer/BP_EXT/2023_002.md",
    "content": "---\ntitle: \"composer/BP_EXT/2023_002\"\nlinkTitle: \"BP_EXT/2023_002\"\nweight: 1\ntype: docs\ndescription: >\n  Cloud Composer has higher version than airflow-2.2.3\n---\n\n**Product**: [Cloud Composer](https://cloud.google.com/composer)\\\n**Rule class**: BP_EXT - (Extended) Best practice, opinionated recommendation\n\n### Description\n\nCloud Composer has higher version than airflow-2.2.3\n\nAirflow UI in Airflow 2.2.3 or earlier versions is vulnerable to CVE-2021-45229.\n\"Trigger DAG with config\" screen was susceptible to XSS attacks through the\norigin query argument.\n\n### Remediation\n\nUpgrade to the latest Cloud Composer version that supports Airflow 2.2.5.\n\n### Further information\n\n- [Known\nIssue](https://cloud.google.com/composer/docs/composer-2/known-issues#airflow_ui_in_airflow_223_or_earlier_versions_is_vulnerable_to_cve-2021-45229)\n"
  },
  {
    "path": "website/content/en/rules/composer/ERR/2022_001.md",
    "content": "---\ntitle: \"composer/ERR/2022_001\"\nlinkTitle: \"ERR/2022_001\"\nweight: 1\ntype: docs\ndescription: >\n  Composer Service Agent permissions\n---\n\n**Product**: [Cloud Composer](https://cloud.google.com/composer)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nCloud Composer uses a Google-managed service account, which is called Cloud\nComposer Service Agent, to provision resources in the project.\n\n`composer.serviceAgent` role is automatically assigned to this account during\nComposer API activation and shouldn't be revoked.\n\n### Remediation\n\nEnsure that you've the following binding in the IAM policy for the project:\n\n- Principal: `service-PROJECT_NUMBER@cloudcomposer-accounts.iam.gserviceaccount.com`\n- Role: `roles/composer.serviceAgent`\n\n### Further information\n\n- [About Cloud Composer Service Agent account](https://cloud.google.com/composer/docs/how-to/access-control#about-composer-sa)\n"
  },
  {
    "path": "website/content/en/rules/composer/ERR/2022_002.md",
    "content": "---\ntitle: \"composer/ERR/2022_002\"\nlinkTitle: \"ERR/2022_002\"\nweight: 1\ntype: docs\ndescription: >\n  Composer Environment Service Account permissions\n---\n\n**Product**: [Cloud Composer](https://cloud.google.com/composer)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nThe service account used by a Cloud Composer environment is required to have\n`composer.worker` role. In addition to that, in Private IP environments\ntemporary GKE node pools can be created and the environment's service account\nneeds to impersonate to itself.\n\n### Remediation\n\nEnsure that you've the following binding in the IAM policy for the project:\n\n- Principal: service account of a Composer environment\n- Role: `roles/composer.worker`\n\nPrivate IP environments additionally require the following binding in the IAM\npolicy for the environment's service account or for the whole project:\n\n- Principal: service account of a Composer environment\n- Role: `roles/iam.serviceAccountUser`\n\n### Further information\n\n- [Assign roles to a user-managed service account](https://cloud.google.com/composer/docs/composer-2/access-control#service-account)\n"
  },
  {
    "path": "website/content/en/rules/composer/ERR/2023_001.md",
    "content": "---\ntitle: \"composer/ERR/2023_001\"\nlinkTitle: \"ERR/2023_001\"\nweight: 1\ntype: docs\ndescription: >\n  Cloud Composer is not in ERROR state\n---\n\n**Product**: [Cloud Composer](https://cloud.google.com/composer)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nThe ERROR state indicates that the environment has encountered an error and\ncannot be used. Creating/updating environment through misconfigured Terraform\nconfig, errors in PyPI Package or etc could be the cause of the issue.\n\n### Remediation\n\nThe cause of the issue could be various. To narrow down the scope, see the\nfollowing troubleshooting documentations.\n\n### Further information\n\n- [Troubleshooting environment\n  creation](https://cloud.google.com/composer/docs/composer-2/troubleshooting-environment-creation)\n- [Troubleshooting environment updates and\n  upgrades](https://cloud.google.com/composer/docs/composer-2/troubleshooting-updates-upgrades)\n- [Troubleshooting PyPI package\n  installation](https://cloud.google.com/composer/docs/composer-2/troubleshooting-package-installation)\n"
  },
  {
    "path": "website/content/en/rules/composer/ERR/2023_002.md",
    "content": "---\ntitle: \"composer/ERR/2023_002\"\nlinkTitle: \"ERR/2023_002\"\nweight: 1\ntype: docs\ndescription: >\n Cloud Composer private IP Cluster non-RFC1918 IP range\n---\n\n**Product**: [Cloud Composer](https://cloud.google.com/composer)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nPrivate IP cluster (Pods, Services) Should use ALLOWED IP RANGES\nto create the environment.Make sure you are using ALLOWED IP RANGES\nduring environment Creation.\n\n### Remediation\n\n  Use Private IP Range or Non-RFC1918 AllOWED IP RANGES to\n  create private IP cluster in Composer Environment.\n\n  ALLOWED_IP_RANGES :\n\n  Private IP Range\n  ```\n     ['10.0.0.0/8','172.16.0.0/12','192.168.0.0/16']\n  ```\n\n  Non-RFC1918 IP Range\n  ```\n    ['100.64.0.0/10','192.0.0.0/24','192.0.2.0/24','192.88.99.0/24','198.18.0.0/15','198.51.100.0/24','203.0.113.0/24','240.0.0.0/4' ]\n  ```\n\n### Further information\n\n- [Non-RFC 1918 address ranges are partially supported for Pods and Services](https://cloud.google.com/composer/docs/known-issues#non-rfc_1918_address_ranges_are_partially_supported_for_pods_and_services)\n- [Valid IPv4 ranges](https://cloud.google.com/vpc/docs/subnets#valid-ranges)\n"
  },
  {
    "path": "website/content/en/rules/composer/ERR/2023_003.md",
    "content": "---\ntitle: \"composer/ERR/2023_003\"\nlinkTitle: \"ERR/2023_003\"\nweight: 1\ntype: docs\ndescription: >\n  Cloud Composer Dags are not getting timed out by the Dag Processor\n---\n\n**Product**: [Cloud Composer](https://cloud.google.com/composer)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nSometimes we can see dag processor logs with task time out error. \"Processor\nfor/home/airflow/gcs/dags/exampledagname.py with PID 12345678 started at\n<DataTime>has timed out, killing it.\" In an ideal composer environment this\nerror shouldnot occur as it is a cause of scheduler resource constraint and\ncomplex DAGparsing implementation.\n\n### Remediation\nUse the dag code [best practices](https://airflow.apache.org/docs/apache-airflow/stable/best-practices.html#top-level-python-code) so that parse time get improved.\nMake sure scheduler is working at its best in terms of the resources.\nYou may start reducing the schdeuler's work by increasing the [min_file_process_interval](https://airflow.apache.org/docs/apache-airflow/stable/configurations-ref.html#min-file-process-interval)\n[This page](https://cloud.google.com/composer/docs/composer-2/troubleshooting-dags#dag-processor) will help to mask the issue by increasing the parsing timeout value, but it will not prevent the issue. Please follow the above points to identify and fix the DAG parsing issue.\n\n\n### Further information\nPlease visit [this page](https://cloud.google.com/composer/docs/composer-2/troubleshooting-scheduling#inspect-dag-processor-logs) for more information about DAG parsing inspection.\n"
  },
  {
    "path": "website/content/en/rules/composer/ERR/2023_004.md",
    "content": "---\ntitle: \"composer/ERR/2023_004\"\nlinkTitle: \"ERR/2023_004\"\nweight: 1\ntype: docs\ndescription: >\n  Cloud Composer Dags are getting zombie error\n---\n\n**Product**: [Cloud Composer](https://cloud.google.com/composer)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nBased on heartbeats, the Airflow scheduler is able to detect abnormally terminated tasks - if they're missing for extended period of time, a task will be detected as a zombie and the following message will be written in logs:\n```\nDetected zombie job: {'full_filepath': '/home/airflow/gcs/dags/xxxx.py', 'processor_subdir': '/home/airflow/gcs/dags', 'msg': \"{'DAG Id': 'DAGName', 'Task Id': 'TaskName', 'Run Id': 'scheduled__2023-12-12Txx:xx:xx.xx+00:00', 'Hostname': 'airflow-worker-xxxxx', 'External Executor Id': 'xxxx-xxxx-xxxx'}\", 'simple_task_instance': <airflow.models.taskinstance.SimpleTaskInstance object at xxxxx>, 'is_failure_callback': True}\n```\n\nThis could be verified from Cloud Logging using following logging filter:\n\n```\nresource.type=\"cloud_composer_environment\"\nseverity>=ERROR\nlog_id(\"airflow-scheduler\")\ntextPayload:\"Detected zombie job\"\n\n```\n\n### Remediation\n\nThe usual reason for Zombie tasks is the resource pressure in your environment's cluster.\nAs a result, an Airflow worker might not be able to report the status of a task. Hence, the scheduler marks the task as a Zombie.\nTo avoid Zombie tasks, assign more resources to your environment by using the [optimization](https://cloud.google.com/composer/docs/composer-2/optimize-environments) and [scaling](https://cloud.google.com/composer/docs/composer-2/environment-scaling steps).\nAs a temporary workaround, you may consider increasing [scheduler]scheduler_zombie_task_threshold [Airflow configuration](https://cloud.google.com/composer/docs/composer-2/override-airflow-configurations), however, it will only change when zombies are detected and not going to prevent them.\n\n\n### Further information\n\n[Troubleshooting Zombie tasks](https://cloud.google.com/composer/docs/composer-2/troubleshooting-dags#zombie-tasks)\n[Zombie tasks](https://airflow.apache.org/docs/apache-airflow/stable/core-concepts/tasks.html#zombie-undead-tasks_)\n"
  },
  {
    "path": "website/content/en/rules/composer/ERR/2023_005.md",
    "content": "---\ntitle: \"composer/ERR/2023_005\"\nlinkTitle: \"ERR/2023_005\"\nweight: 1\ntype: docs\ndescription: >\n  Composer environment deletion not failed due to NAT configuration\n---\n\n**Product**: [Cloud Composer](https://cloud.google.com/composer)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nHaving Composer automatically create pods and services' secondary IP ranges and\nthen configuring Cloud NAT for the subnet and these ranges makes it so the\nenvironment deletion will fail. Verify a Composer environment deletion attempt\nfailed due to a Cloud NAT configuration.\n\n### Remediation\n\n- Identify the relevant NAT Gateway ID(From the error message)\n- Find the NAT Gateway `(Network services > Cloud NAT)` and remove the IP ranges that are no longer needed (ranges that are used by the environment's GKE cluster) in NAT mapping.\n- Delete the Composer Environment again.\n\n### Further information\n\n- [Cloud NAT prevents Composer environment deletion](https://cloud.google.com/knowledge/kb/cloud-nat-prevents-composer-environment-deletion-000004225)\n"
  },
  {
    "path": "website/content/en/rules/composer/ERR/2024_001.md",
    "content": "---\ntitle: \"composer/ERR/2024_001\"\nlinkTitle: \"ERR/2024_001\"\nweight: 1\ntype: docs\ndescription: >\n  Composer Creation not failed due to 'no error was surfaced' Error.\n---\n\n**Product**: [Cloud Composer](https://cloud.google.com/composer)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\n'no error was surfaced' error when creating a private IP composer\nenvironment. This can happen due to a number of different reasons, possibly\nmissing IAM permissions, misconfigured firewall rules or\ninsufficient/incompatible IP ranges used in GKE clusters.\n\n### Remediation\nTo overcome the error, please check the following in the  project\n- IAM permissions : As mentioned in the error message description, it can be caused by lack of permissions. Check all the required [IAM Permission](https://cloud.google.com/composer/docs/how-to/access-control)(not only the composer worker role mentioned in the message) for creating private IP environment.\n- Firewall rules: Lack or misconfiguration of firewall rules can cause such failure as well. Make sure all the [requiresd firewall rules](https://cloud.google.com/composer/docs/how-to/managing/configuring-private-ip#private-ip-firewall-rules) are in\nplace, and there is no deny rule with higher priority to block the communication within GKE clusters.\n- Exhausted IP addresses : In some cases, you may find error messages like ‘IP_SPACE_EXHAUSTED’. This usually means that the IP range\nassigned is not sufficient to bring up the component. It is important to check which component is failed. General recommendations of the IP ranges [Configure private IP networking](https://cloud.google.com/composer/docs/how-to/managing/configuring-private-ip#step_1_check_network_requirements), and also [understand CIDR ranges for a GKE cluster](https://cloud.google.com/kubernetes-engine/docs/how-to/flexible-pod-cidr)\n- Invalid secondary IP ranges used in GKE clusters : This error can also be as a result of using invalid non-RFC 1918 addresses for\nPods and Services of the GKE cluster. You should only use RFC 1918 address, or [supported non-RFC 1918 ranges](https://cloud.google.com/composer/docs/composer-2/known-issues#non-rfc_1918_address_ranges_are_partially_supported_for_pods_and_services) for these secondary addresses.\n- Private Service Connect : This error can also occur when You choose VPC Peerings instead of Private Service Connect (PSC) as the\nconnection type in Composer environment configuration in Shared VPC setup. [Configuring Private Service Connect](https://cloud.google.com/composer/docs/composer-2/configure-private-service-connect)\n\n\n### Further information\n"
  },
  {
    "path": "website/content/en/rules/composer/WARN/2022_001.md",
    "content": "---\ntitle: \"composer/WARN/2022_001\"\nlinkTitle: \"WARN/2022_001\"\nweight: 1\ntype: docs\ndescription: >\n  Composer Service Agent permissions for Composer 2.x\n---\n\n**Product**: [Cloud Composer](https://cloud.google.com/composer)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nCloud Composer 2 uses Workload Identity and requires additional permissions in\norder to successfully create an environment. Those permissions are provided by\n`composer.ServiceAgentV2Ext` role and must be granted manually.\n\n### Remediation\n\nEnsure that you've the following binding in the IAM policy for the project:\n\n- Principal: `service-PROJECT_NUMBER@cloudcomposer-accounts.iam.gserviceaccount.com`\n- Role: `roles/composer.ServiceAgentV2Ext`\n\n### Further information\n- [Grant required permissions to Cloud Composer service account](https://cloud.google.com/composer/docs/composer-2/create-environments#grant-permissions)\n"
  },
  {
    "path": "website/content/en/rules/composer/WARN/2022_002.md",
    "content": "---\ntitle: \"composer/WARN/2022_002\"\nlinkTitle: \"WARN/2022_002\"\nweight: 1\ntype: docs\ndescription: >\n  fluentd pods in Composer environments are not crashing\n---\n\n**Product**: [Cloud Composer](https://cloud.google.com/composer)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nThe fluentd runs as a daemonset and collects logs from all environment\ncomponents and uploads the logs to Cloud Logging. All fluentd pods in an\nenvironment could be stuck in a CrashLoopBackOff state after upgrading the\nenviromennt and no logs appear in the Cloud Logging.\n\n### Remediation\n\nThis could be caused by configuration settings in the tenant project, please\nopen a support case and share the detailed issue description.\n\n### Further information\n\n- [Composer environment components](https://cloud.google.com/composer/docs/composer-2/environment-architecture#other_environment_components)\n"
  },
  {
    "path": "website/content/en/rules/composer/WARN/2022_003.md",
    "content": "---\ntitle: \"composer/WARN/2022_003\"\nlinkTitle: \"WARN/2022_003\"\nweight: 1\ntype: docs\ndescription: >\n  Composer scheduler parses all DAG files without overloading\n---\n\n**Product**: [Cloud Composer](https://cloud.google.com/composer)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nThe schedulers parse DAGs before scheduling DAG runs. If DAGs take a long time to parse,\nthis consumes scheduler's capacity and might reduce the performance of DAG runs.\n\nIf the total DAG parse time exceeds about 10 seconds, the schedulers might\nbe overloaded with DAG parsing and cannot run DAGs effectively.\nThe default DAG parsing frequency in Airflow is 30 seconds;\nif DAG parsing time exceeds this threshold, parsing cycles start to overlap,\nwhich then exhausts scheduler's capacity.\n\nTo check on the Monitoring dashboard, observe graphs for the total DAG\nparse time in the Composer Monitoring - DAG Statistics section.\n\n### Remediation\n\nAccording to your observations, you might want to:\n- Simplify your DAGs, including their Python dependencies.\n- [Increase the DAG file parsing interval](https://cloud.google.com/composer/docs/composer-2/optimize-environments#override-file-process) and [increase the DAG directory listing interval](https://cloud.google.com/composer/docs/composer-2/optimize-environments#override-dir-list).\n- [Increase the number of schedulers](https://cloud.google.com/composer/docs/composer-2/optimize-environments#scheduler-count).\n- [Increase the CPU of schedulers](https://cloud.google.com/composer/docs/composer-2/optimize-environments#workloads-scheduler).\n\n### Further information\n\n- [Monitor the total parse time for all DAG files](https://cloud.google.com/composer/docs/composer-2/optimize-environments#monitor_the_total_parse_time_for_all_dag_files)\n"
  },
  {
    "path": "website/content/en/rules/composer/WARN/2023_001.md",
    "content": "---\ntitle: \"composer/WARN/2023_001\"\nlinkTitle: \"WARN/2023_001\"\nweight: 1\ntype: docs\ndescription: >\n  Cloud Composer does not override Kerberos configurations\n---\n\n**Product**: [Cloud Composer](https://cloud.google.com/composer)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nCloud Composer does not support Airflow Kerberos configuration yet.\n\n### Remediation\n\nRemove Kerberos configurations from the environment.\n\n### Further information\n\n- [Support for\n  Kerberos](https://cloud.google.com/composer/docs/composer-2/known-issues#kerberos-support)\n"
  },
  {
    "path": "website/content/en/rules/composer/WARN/2023_002.md",
    "content": "---\ntitle: \"composer/WARN/2023_002\"\nlinkTitle: \"WARN/2023_002\"\nweight: 1\ntype: docs\ndescription: >\n  Cloud Composer tasks are not interrupted by SIGKILL\n---\n\n**Product**: [Cloud Composer](https://cloud.google.com/composer)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nSometimes your task might be using more memory than Airflow worker is allocated.\nIn such a situation it might be interrupted by Negsignal.SIGKILL. The system\nsends this signal to avoid further memory consumption which might impact the\nexecution of other Airflow tasks.\n\nYou can find the issue from Cloud Logging with the filter below:\n```\nresource.type=\"cloud_composer_environment\"\nlog_id(\"airflow-worker\")\ntextPayload=\"Task exited with return code Negsignal.SIGKILL\"\nresource.labels.environment_name=\"<COMPOSER_ENV_NAME>\"\nseverity=INFO\n```\n\n### Remediation\n\nPossible solutions:\n- Lower worker_concurrency of Airflow worker\n- In the case of Cloud Composer 2, increase memory of Airflow workers\n- In the case of Cloud Composer 1, upgrade to bigger machine type used in Composer cluster\n- Optimize your tasks to use less memory\n\n### Further information\n\n- [Troubleshooting DAGs](https://cloud.google.com/composer/docs/composer-2/troubleshooting-dags#task-fails-with-negsignalsigkill)\n"
  },
  {
    "path": "website/content/en/rules/composer/WARN/2023_003.md",
    "content": "---\ntitle: \"composer/WARN/2023_003\"\nlinkTitle: \"WARN/2023_003\"\nweight: 1\ntype: docs\ndescription: >\n  Cloud Composer tasks are not failed due to resource pressure\n---\n\n**Product**: [Cloud Composer](https://cloud.google.com/composer)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nDuring execution of a task, Airflow worker's subprocess responsible for Airflow\ntask execution could be interrupted abruptly due to resource pressure. In this\ncase, the task would be failed without emitting logs.\n\n### Remediation\n\nPossible solutions:\n- In Cloud Composer 1, create a new environment with a larger [machine type](https://cloud.google.com/compute/docs/machine-resource) than the current machine type.\nConsider adding more nodes to your environment and lower [[celery]worker_concurrency](https://airflow.apache.org/docs/apache-airflow/stable/configurations-ref.html#worker-concurrency) for your workers.\n- In Cloud Composer 2, [increase memory\n  limits](https://cloud.google.com/composer/docs/composer-2/scale-environments#autoscaling-workers) for Airflow workers.\n\n### Further information\n\n- [Troubleshooting\n  DAGs](https://cloud.google.com/composer/docs/composer-2/troubleshooting-dags#task-fails-without-logs-resource-pressure)\n"
  },
  {
    "path": "website/content/en/rules/composer/WARN/2023_004.md",
    "content": "---\ntitle: \"composer/WARN/2023_004\"\nlinkTitle: \"WARN/2023_004\"\nweight: 1\ntype: docs\ndescription: >\n  Cloud Composer database CPU usage does not exceed 80%\n---\n\n**Product**: [Cloud Composer](https://cloud.google.com/composer)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nAirflow database performance issues can lead to overall DAG execution issues. If the database CPU usage exceeds 80% for more than a few percent of the total time, the database is overloaded and requires scaling.\n\n### Remediation\n\nDatabase size settings are controlled by the environment size property of your environment. To scale the database up or down, [change the environment size](https://cloud.google.com/composer/docs/composer-2/optimize-environments#env-size) to a different tier (Small, Medium, or Large). Increasing the environment size increases the costs of your environment.\n\n### Further information\n\n- [Monitor the database CPU and memory usage](https://cloud.google.com/composer/docs/composer-2/optimize-environments#monitor_the_database_cpu_and_memory_usage)\n"
  },
  {
    "path": "website/content/en/rules/composer/WARN/2023_005.md",
    "content": "---\ntitle: \"composer/WARN/2023_005\"\nlinkTitle: \"WARN/2023_005\"\nweight: 1\ntype: docs\ndescription: >\n  Cloud Composer is consistently in healthy state\n---\n\n**Product**: [Cloud Composer](https://cloud.google.com/composer)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nCloud Composer runs a liveness DAG named airflow_monitoring, which runs on a\nschedule and reports environment health. If the liveness DAG run finishes\nsuccessfully, the health status is True, which means healthy. Otherwise, the\nhealth status is False. Note that the environment health could be intermittently\nunhealthy due to events like scheduled maintenances. However, overall it should\nbe healthy.\n\n### Remediation\n\nThe environment health metric depends on a Composer-managed DAG named\nairflow_monitoring that is triggered periodically by the airflow-monitoring pod.\nIf the DAG isn't deleted and doesn't report failures in the Airflow UI, check\nthe airflow-monitoring logs to see if there are any problems related to reading\nthe DAG's run statuses.\n\nOtherwise, you can check if there was a maintenance operation aligned with the\nunhealthy time frame from the [monitoring dashboard](https://cloud.google.com/composer/docs/composer-2/use-monitoring-dashboard#environment-overview).\nNote that maintenance operations happen during the configured maintenance\nwindow. If your current maintenance window does not fit to your business\nrequirements, please consider changing it.\n\n### Further information\n\n- [Monitor environments with Cloud Monitoring](https://cloud.google.com/composer/docs/composer-2/monitor-environments#environment-health)\n- [Specify maintenance windows](https://cloud.google.com/composer/docs/composer-2/specify-maintenance-windows)\n"
  },
  {
    "path": "website/content/en/rules/composer/WARN/2023_006.md",
    "content": "---\ntitle: \"composer/WARN/2023_006\"\nlinkTitle: \"WARN/2023_006\"\nweight: 1\ntype: docs\ndescription: >\n  Airflow schedulers are healthy for the last hour\n---\n\n**Product**: [Cloud Composer](https://cloud.google.com/composer)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nAirflow schedulers report heartbeat signals every predefined interval called\nscheduler_heartbeat_sec (default: 5 seconds). If any heartbeats are received\nwithin the threshold time (default: 30 seconds), the Scheduler heartbeat from\nthe monitoring dashboard is marked as Green, which means healthy. Otherwise the\nstatus is unhealthy. Note that if your environment has more than one scheduler,\nthen the status is healthy as long as at least one of schedulers is responding.\n\n### Remediation\n\nIdentify if the issue happens at DAG parse time or while processing tasks at\nexecution time. For more information about symptoms, see [Troubleshooting Airflow scheduler issues](https://cloud.google.com/composer/docs/composer-2/troubleshooting-scheduling).\n\nFor issues at DAG parse time, inspect DAG Processor logs and increase parameters\nrelated to DAG parsing (dagbag-import-timeout, dag-file-processor-timeout) if\nthere are DAGs not parsed properly. Otherwise, fix or remove DAGs that cause\nproblems to the DAG processor.\n\nFor issues at execution time, make sure that airflow-scheduler pods of the GKE\ncluster are not overloaded. If you can find singns of being overloaded like CPU\nusage hitting limit, restarting due to OOMKilled or ephemeral storage usage is\nreaching its limit, [adjust scheduler scale and performance\nparameters](https://cloud.google.com/composer/docs/composer-2/scale-environments#workloads-configuration) properly.\n\n\n### Further information\n\n- [Troubleshooting Airflow scheduler issues](https://cloud.google.com/composer/docs/composer-2/troubleshooting-scheduling)\n- [Known issues](https://cloud.google.com/composer/docs/composer-2/known-issues)\n- [scheduler_heartbeat_sec](https://airflow.apache.org/docs/apache-airflow/stable/configurations-ref.html#scheduler-heartbeat-sec)\n- [scheduler_health_check_threshold](https://airflow.apache.org/docs/apache-airflow/stable/configurations-ref.html#scheduler-health-check-threshold)\n- [dagbag_import_timeout](https://airflow.apache.org/docs/apache-airflow/stable/configurations-ref.html#dagbag-import-timeout)\n- [dag_file_processor_timeout](https://airflow.apache.org/docs/apache-airflow/stable/configurations-ref.html#dag-file-processor-timeout)\n"
  },
  {
    "path": "website/content/en/rules/composer/WARN/2023_007.md",
    "content": "---\ntitle: \"composer/WARN/2023_007\"\nlinkTitle: \"WARN/2023_007\"\nweight: 1\ntype: docs\ndescription: >\n  Cloud Composer Scheduler CPU limit exceeded\n---\n\n**Product**: [Cloud Composer](https://cloud.google.com/composer)\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nAirflow scheduler's CPU and memory metrics help you check whether the\nscheduler's performance is a bottleneck in the overall Airflow performance.\n\n### Remediation\n\nIf Scheduler CPU usage exceeds 80% for longer than a few percent of the total\ntime, you might want to:\n\n[Increase the DAG file parsing interval](https://cloud.google.com/composer/docs/composer-2/optimize-environments#override-file-process)\nand [increase the DAG directory listing interval](https://cloud.google.com/composer/docs/composer-2/optimize-environments#override-dir-list)\n[Increase the number of schedulers.](https://cloud.google.com/composer/docs/composer-2/optimize-environments#scheduler-count)\n[Increase the CPU of schedulers.](https://cloud.google.com/composer/docs/composer-2/optimize-environments#workloads-scheduler)\n\n\n\n### Further information\n\n- [Monitor scheduler CPU and memory metrics](https://cloud.google.com/composer/docs/composer-2/optimize-environments#monitor-scheduler)\n"
  },
  {
    "path": "website/content/en/rules/composer/WARN/2023_008.md",
    "content": "---\ntitle: \"composer/WARN/2023_008\"\nlinkTitle: \"WARN/2023_008\"\nweight: 1\ntype: docs\ndescription: >\n  Cloud Composer Airflow database is in healthy state\n---\n\n**Product**: [Cloud Composer](https://cloud.google.com/composer)\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nThe Airflow monitoring pod pings the database every minute and reports health\nstatus as True if a SQL connection can be established or False if not. Note that\nthe environment health could be intermittently unhealthy due to events like\nscheduled maintenances. However, overall it should be healthy.\n\n### Remediation\n\nTo check the health of your database, you can use the following health status\nmetric: composer.googleapis.com/environment/database_health.\n\nOtherwise, you can check if there was a maintenance operation aligned with the\nunhealthy time frame from the [monitoring dashboard](https://cloud.google.com/composer/docs/composer-2/use-monitoring-dashboard#environment-overview).\nNote that maintenance operations happen during the configured maintenance\nwindow. If your current maintenance window does not fit to your business\nrequirements, please consider changing it.\n\n### Further information\n\n- [Monitor environments with Cloud Monitoring](https://cloud.google.com/composer/docs/how-to/managing/monitoring-environments#database-metrics)\n- [Specify maintenance windows](https://cloud.google.com/composer/docs/composer-2/specify-maintenance-windows)\n"
  },
  {
    "path": "website/content/en/rules/composer/WARN/2023_009.md",
    "content": "---\ntitle: \"composer/WARN/2023_009\"\nlinkTitle: \"WARN/2023_009\"\nweight: 1\ntype: docs\ndescription: >\n    Cloud Composer Intermittent Task Failure during Scheduling\n---\n\n**Product**: [Cloud Composer](https://cloud.google.com/composer)\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nThe issue is seen in a Airflow Scheduler for the task instance during the execution of task. However, the logs do not explain the cause of task failure and Airflow Worker and Airflow Scheduler looked relatively healthy.\n\nThe error message on Airflow Scheduler may look like the following error:\n\n```\nExecutor reports task instance <TaskInstance: xx.xxxx scheduled__2022-04-21T06:00:00+00:00 [queued]> finished (failed) although the task says its queued. (Info: None) Was the task killed externally?\n```\n\nOr there might be some error on Airflow Worker similar to following error:\n\n```\nLog file is not found: gs://$BUCKET_NAME/logs/$DAG_NAME/$TASK_NAME/2023-01-25T05:01:17.044759+00:00/1.log.\nThe task might not have been executed or worker executing it might have finished abnormally (e.g. was evicted).\n```\n\nThis could be verified from Cloud Logging using following logging filter:\n\n```\nresource.type=\"cloud_composer_environment\"\nseverity>=ERROR\nlog_id(\"airflow-scheduler\")\ntextPayload:\"[queued]> finished (failed) although the task says its queued.\"\n\n```\n\n### Remediation\n\nThere could be multiple reasons for the failure, we strongly recommend to check the below methods to mitigate the issue\n- Could be due to longstanding issue in [Airflow](https://github.com/apache/airflow/issues/10790), Proactively implementing appropriate retry strategies at both the task and DAG levels.\n- [Enable task retries](https://cloud.google.com/composer/docs/release-notes#August_05_2021); starting on Composer version 1.16.13, Airflow 2 performs two retries for a failed task by default.\n- [Provision enough resources for workers](https://cloud.google.com/composer/docs/composer-2/optimize-environments#monitor_workers_cpu_and_memory_usage).\n- Make sure `[celery]worker_concurrency` is not [too high](https://cloud.google.com/composer/docs/composer-2/optimize-environments#override-worker-concurrency).\n- [Optimize top level code](https://airflow.apache.org/docs/apache-airflow/stable/best-practices.html#top-level-python-code) and avoid unnecessary code.\n- Reduce [DAG complexity](https://airflow.apache.org/docs/apache-airflow/stable/best-practices.html#reducing-dag-complexity).\n- Review the Airflow community recommendations for [dynamic DAGs generation](https://airflow.apache.org/docs/apache-airflow/stable/howto/dynamic-dag-generation.html)\n\n### Further information\n\n- [Airflow Known Issue](https://github.com/apache/airflow/issues/10790)\n- [Intermittent Task Failure during Scheduling in Cloud Composer](https://cloud.google.com/composer/docs/known-issues#intermittent_task_failure_during_scheduling_in)\n- [Monitoring running and queued tasks](https://cloud.google.com/composer/docs/troubleshooting-scheduling#monitoring_running_and_queued_tasks)\n"
  },
  {
    "path": "website/content/en/rules/composer/WARN/2024_001.md",
    "content": "---\ntitle: \"composer/WARN/2024_001\"\nlinkTitle: \"WARN/2024_001\"\nweight: 1\ntype: docs\ndescription: >\n  Cloud Composer Scheduler CPU usage above 30%-35%.\n---\n\n**Product**: [Cloud Composer](https://cloud.google.com/composer)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nScheduler CPU usage is consistently below 30%-35%, Recommended to Reduce the\nnumber of schedulers and Reduce the CPU of schedulers for Optimize environment\nperformance and costs\n\n### Remediation\n\nIf the Scheduler CPU usage is consistently below 30%-35%, you might want to:\n- [Reduce the number of schedulers.](https://cloud.google.com/composer/docs/composer-2/optimize-environments#scheduler-count)\n- [Reduce the CPU of schedulers.](https://cloud.google.com/composer/docs/composer-2/optimize-environments#workloads-scheduler)\n\n### Further information\n\n- Learn More about [Optimize environment performance and costs](https://cloud.google.com/composer/docs/composer-2/optimize-environments)\n- [Monitor scheduler CPU and memory metrics](https://cloud.google.com/composer/docs/composer-2/optimize-environments#monitor-scheduler)\n"
  },
  {
    "path": "website/content/en/rules/composer/WARN/2024_002.md",
    "content": "---\ntitle: \"composer/WARN/2024_002\"\nlinkTitle: \"WARN/2024_002\"\nweight: 1\ntype: docs\ndescription: >\n  Cloud Composer Airflow Worker Pods not in Eviction state.\n---\n\n**Product**: [Cloud Composer](https://cloud.google.com/composer)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nPod eviction can happen when a particular pod in your environment's cluster\nreaches its resource limits.If an Airflow worker pod is evicted, all task\ninstances running on that pod are interrupted, and later marked as failed by\nAirflow.\n\n### Remediation\n\nIf you observe Airflow Worker Pod eviction in Composer environment, you might want to:\n\n- [Increase the memory available to workers](https://cloud.google.com/composer/docs/composer-2/optimize-environments#workloads-workers).\n- [Reduce worker concurrency](https://cloud.google.com/composer/docs/composer-2/optimize-environments#override-worker-concurrency). In this way, a single worker handles fewer tasks at once.\n- If you change worker concurrency, you might also want to [increase the maximum number of workers](https://cloud.google.com/composer/docs/composer-2/optimize-environments#worker-count).\n\n### Further information\n\n- Learn More about [Optimize environment performance and costs](https://cloud.google.com/composer/docs/composer-2/optimize-environments)\n- [Monitor worker pod evictions](https://cloud.google.com/composer/docs/composer-2/optimize-environments#monitor-evictions)\n"
  },
  {
    "path": "website/content/en/rules/composer/WARN/2024_003.md",
    "content": "---\ntitle: \"composer/WARN/2024_003\"\nlinkTitle: \"WARN/2024_003\"\nweight: 1\ntype: docs\ndescription: >\n  Having the composer API enabled ensures the environment remains in a healthy state.\n---\n\n**Product**: [Cloud Composer](https://cloud.google.com/composer)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nDisabling the Cloud Composer's service (API) puts Composer environments into a\npermanent failed state, and permanently deletes the Composer tenant project.\nMake sure that all Cloud Composer environments in your project are deleted.\n\n### Remediation\n\nAny of these error messages may appear as a banner on the Environment details page in Console:\n\n  - ```This environment cannot be edited due to the errors that occurred during environment creation/update. Please investigate the logs to determine the cause, or create a new environment.```\n  - ```An error occurred with retrieving the last operation on this environment```\n  - ```The most recent update failed due to below error.The environment has been set to ERROR state permanently due to deactivation of the Cloud Composer service API.```\n  - ```ERROR: (gcloud.beta.composer.environments.restart-web-server) FAILED_PRECONDITION: Cannot update environment in state ERROR. Environment must be in RUNNING state.```\n\n1. Re-enable the Composer API ([public doc](https://cloud.google.com/composer/docs/composer-2/enable-composer-service)).\n2. Note that re-enabling the API will **NOT** restore old Composer environments which entered into the permanent failed state.\n3. Create a new Composer environment.\n4. Delete the old environment, which cannot be recovered.\n\n### Further information\n"
  },
  {
    "path": "website/content/en/rules/composer/_index.md",
    "content": "---\ntitle: \"COMPOSER\"\nlinkTitle: \"composer\"\ntype: docs\ndescription: \"Cloud Composer\"\n---\n"
  },
  {
    "path": "website/content/en/rules/dataflow/BP/2023_001.md",
    "content": "---\ntitle: \"dataflow/WARN/2023_005\"\nlinkTitle: \"WARN/2023_005\"\nweight: 1\ntype: docs\ndescription: >\n  Dataflow job is using supported Apache Beam SDK version\n---\n\n**Product**: [Dataflow](https://cloud.google.com/dataflow)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nApache Beam SDK versions are supported by Dataflow from their release date until their deprecation date.\n\n### Remediation\n\nWhen an SDK version is deprecated, it continues to work with Dataflow but might be decommissioned in the future. Before an SDK version is decommissioned, customers are notified and given time to upgrade their environments. Requests for jobs submitted from deprecated SDK versions result in a warning message. It's recommended that you update environments that use a deprecated version of an SDK to a supported version, but deprecated SDK versions continue to work with Dataflow.\n\n### Further information\n\n[Dataflow SDK version support status](https://cloud.google.com/dataflow/docs/support/sdk-version-support-status)\n"
  },
  {
    "path": "website/content/en/rules/dataflow/ERR/2023_001.md",
    "content": "---\ntitle: \"dataflow/ERR/2023_001\"\nlinkTitle: \"ERR/2023_001\"\nweight: 1\ntype: docs\ndescription: >\n  Dataflow service account has dataflow.serviceAgent role\n---\n\n**Product**: [Dataflow](https://cloud.google.com/dataflow)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nCheck that the service account\nservice-<project-number>@dataflow-service-producer-prod.iam.gserviceaccount.com\nhas the following role: roles/dataflow.serviceAgent\n\n### Remediation\nThis role is assigned automatically to the service account when you enable the\nDataflow API for your project from the APIs page in the Google Cloud console.\n\n### Further information\nRefer [link](https://cloud.google.com/dataflow/docs/concepts/access-control#:~:text=The%20Dataflow%20Service%20Agent%20role)\nto know more about this.\n"
  },
  {
    "path": "website/content/en/rules/dataflow/ERR/2023_002.md",
    "content": "---\ntitle: \"dataflow/ERR/2023_002\"\nlinkTitle: \"ERR/2023_002\"\nweight: 1\ntype: docs\ndescription: >\n  Dataflow job does not fail during execution due to IP space exhaustion\n---\n\n**Product**: [Dataflow](https://cloud.google.com/dataflow)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nA Dataflow job runs successfully if subnet has enough ip space for all workers in job,\notherwise it fails with IP_SPACE_EXHAUSTED error.\n\nYou can search in the Logs Explorer for such jobs with the logging query:\n```\nresource.type=\"dataflow_step\"\nlog_id(\"dataflow.googleapis.com/job-message\")\nseverity=ERROR\ntextPayload=~\"IP_SPACE_EXHAUSTED\"\n```\n\n### Remediation\n- If dataflow job failed because of IP_SPACE_EXHAUSTED error, then this might be because of exhaustion of subnet IP address space. The possible resolution can be either by reducing the number of workers requesting IP addresses, [increasing the subnet IP address space](https://cloud.google.com/sdk/gcloud/reference/compute/networks/subnets/expand-ip-range), or running enough jobs to not reach this limitation.\n\n### Further information\n\n- [Expand subnet IP range](https://cloud.google.com/sdk/gcloud/reference/compute/networks/subnets/expand-ip-range)\n- [Reason of failure of worker pool startup](https://cloud.google.com/dataflow/docs/guides/common-errors#worker-pool-failure)\n"
  },
  {
    "path": "website/content/en/rules/dataflow/ERR/2023_003.md",
    "content": "---\ntitle: \"dataflow/ERR/2023_003\"\nlinkTitle: \"ERR/2023_003\"\nweight: 1\ntype: docs\ndescription: >\n  Dataflow job does not fail during execution due to incorrect specification of subnet\n---\n\n**Product**: [Dataflow](https://cloud.google.com/dataflow)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nA dataflow job runs successfully if subnet is properly specified while launching the job,\notherwise it fails with Invalid subnetwork specified error.\n\nYou can search in the Logs Explorer for such jobs with the logging query:\n```\nresource.type=\"dataflow_step\"\nlog_id(\"dataflow.googleapis.com/job-message\")\nseverity=ERROR\ntextPayload=~\"Workflow failed. Causes: Invalid subnetwork specified: .* should match regions/REGION/subnetworks/SUBNETWORK.\"\n```\n\n### Remediation\n- If the subnetwork is located in a Shared VPC network, you must use the complete URL. When specifying the subnetwork URL for Shared VPC, ensure that HOST_PROJECT_ID is the project in which the VPC is hosted. Please make sure specified subnet exists in your project if you are not using shared VPC or exists in host project if you are using shared VPC. For best practices, please follow this [doc](https://cloud.google.com/dataflow/docs/guides/specifying-networks).\n\n### Further information\n\n- [Specify a network and subnetwork for dataflow jobs](https://cloud.google.com/dataflow/docs/guides/specifying-networks)\n"
  },
  {
    "path": "website/content/en/rules/dataflow/ERR/2023_004.md",
    "content": "---\ntitle: \"dataflow/ERR/2023_004\"\nlinkTitle: \"ERR/2023_004\"\nweight: 1\ntype: docs\ndescription: >\n  Dataflow job does not fail during execution due to violating an organization policy constraint in project\n---\n\n**Product**: [Dataflow](https://cloud.google.com/dataflow)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nA Dataflow job might fail if there are organization policy constraints (eg: constraints/compute.vmExternalIpAccess, constraints/compute.requireShieldedVm etc.)\nthat might limit VM instance creation in their project.\n\nYou can search in the Logs Explorer for such jobs with the logging query:\n```\nresource_type='dataflow_step',\nseverity=ERROR\nlog_id(\"dataflow.googleapis.com/job-message\")\ntextPayload=~\"Constraint constraints/.* violated for project\"\n```\n\n### Remediation\nThe error occurs because your organization has constraints in place that prohibit some aspect of the VM instance creation process, like the account being used, or the zone being targeted. A possible resolution can be found in [doc](https://cloud.google.com/dataflow/docs/guides/common-errors#worker-pool-failure).\n\nRecommendations for specific constraints violated are as follows:\n\n- **constraints/compute.vmExternalIpAccess** - This indicates that you have a policy that restricts the use of external IP addresses. To fix this error, you can set the [no_use_public_ips](https://cloud.google.com/dataflow/docs/reference/pipeline-options#:~:text=in%20Flex%20Templates.-,no_use_public_ips,-Command%2Dline%20flag) flag to use internal IP addresses for all communication within Dataflow workers.\n\n- **constraints/compute.requireShieldedVm** - This indicates that you have a policy that requires all new Compute Engine VM instances use Shielded disk images with Secure Boot, vTPM, and Integrity Monitoring options enabled. To fix this error, we can specify enable_secure_boot in dataflow_service_options configuration, or through experiment --experiments=enable_secure_boot to be compliant with constraints/compute.requireShieldedVm org policy.\n\nFor jobs affected by other organization policy constraints, please refer the [documentation](https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints) to identify how resource is being restricted and work with your organization admin to overcome these errors.\n\n### Further information\n\n- [Worker pool failure error](https://cloud.google.com/dataflow/docs/guides/common-errors#worker-pool-failure)\n- [Organization policy constraints](https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints)\n"
  },
  {
    "path": "website/content/en/rules/dataflow/ERR/2023_005.md",
    "content": "---\ntitle: \"dataflow/ERR/2023_005\"\nlinkTitle: \"ERR/2023_005\"\nweight: 1\ntype: docs\ndescription: >\n  Dataflow job does not fail during execution due to credential or permission issue\n---\n\n**Product**: [Dataflow](https://cloud.google.com/dataflow)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nA dataflow job runs successfully if dataflow api is enabled and\ndataflow service account and controller service account have sufficient permissiont.\n\nYou can search in the Logs Explorer for such jobs with the logging query:\n```\nresource_type='dataflow_step',\nseverity=ERROR\nlog_id(\"dataflow.googleapis.com/job-message\")\ntextPayload=~\"Workflow failed. Causes: There was a problem refreshing your credentials.\"\n```\n\n### Remediation\n\nComplete error message is:\n```\nWorkflow failed. Causes: There was a problem refreshing your credentials.\nPlease check: 1. The Dataflow API is enabled for your project.\n2. Make sure both the Dataflow service account and the controller service account have sufficient permissions.\nIf you are not specifying a controller service account, ensure the default Compute Engine service account PROJECT_NUMBER-compute@developer.gserviceaccount.com exists and has sufficient permissions.\nIf you have deleted the default Compute Engine service account, you must specify a controller service account\n```\n\nTo resolve this error:\n- Dataflow API should be enabled\n- Worker Service Account should have the roles/dataflow.worker role\n- Dataflow service account of type service-<project-number>@dataflow-service-producer-prod.iam.gserviceaccount.com should have roles/dataflow.serviceAgent role\n\n### Further information\n\n- [Troubleshooting dataflow permission error](https://cloud.google.com/dataflow/docs/guides/troubleshoot-permissions#refresh)\n- [Dataflow security and permissions](https://cloud.google.com/dataflow/docs/concepts/security-and-permissions)\n"
  },
  {
    "path": "website/content/en/rules/dataflow/ERR/2023_006.md",
    "content": "---\ntitle: \"dataflow/ERR/2023_006\"\nlinkTitle: \"ERR/2023_006\"\nweight: 1\ntype: docs\ndescription: >\n  Dataflow job failure when the subnetwork does not have Private Google Access enabled\n---\n\n**Product**: [Dataflow](https://cloud.google.com/dataflow)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nDataflow job fails if Private Google Access is disabled on the Subnetwork used by the job, which is required when Dataflow workers only use Private addresses. Private Google Access allows workers to connect to external Google Api's and Services.\n\nYou can search in the Logs Explorer with the logging query:\n```\nresource.type=\"dataflow_step\"\nseverity=ERROR\n\"does not have Private Google Access, which is required for usage of private IP addresses by the Dataflow workers\"\n```\n\n### Remediation\n\nEnable Private Google Access on the subnetworks used by the Dataflow jobs.\n\n### Further information\n\n[Private Google Access](https://cloud.google.com/vpc/docs/configure-private-google-access#configuring_access_to_google_services_from_internal_ips)\n"
  },
  {
    "path": "website/content/en/rules/dataflow/ERR/2023_007.md",
    "content": "---\ntitle: \"dataflow/ERR/2023_007\"\nlinkTitle: \"ERR/2023_007\"\nweight: 1\ntype: docs\ndescription: >\n  Streaming Dataflow job gets stuck when firewall rules are not configured\n---\n\n**Product**: [Dataflow](https://cloud.google.com/dataflow)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nWhen Streaming Engine is disabled, Dataflow workers communicate\nover port 12345 to shuffle intermediate data. Job will get stuck\nif the required firewall rules are not present to allow communication\nbetween workers. Issue occurs only when a job runs with more than one worker.\n\n### Remediation\n\nConfigure necessary Firewall rules to allow communication between Dataflow workers over port 12345.\n\n### Further information\n\n[Firewall rules for Dataflow](https://cloud.google.com/dataflow/docs/guides/routes-firewall#firewall_rules)\n"
  },
  {
    "path": "website/content/en/rules/dataflow/ERR/2023_008.md",
    "content": "---\ntitle: \"dataflow/ERR/2023_008\"\nlinkTitle: \"ERR/2023_008\"\nweight: 1\ntype: docs\ndescription: >\n  Dataflow worker service account has roles/dataflow.worker role\n---\n\n**Product**: [Dataflow](https://cloud.google.com/dataflow)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nCheck that the worker service account used in dataflow job\nhas the following role: roles/dataflow.worker role\n\n### Remediation\nThe Dataflow Worker role (roles/dataflow.worker role) must be assigned to worker service account that is able\nto request and update work from the Dataflow service.\n\n### Further information\nRefer [link](https://cloud.google.com/dataflow/docs/concepts/access-control#:~:text=The%20Dataflow%20Worker%20role)\nto know more about this.\n"
  },
  {
    "path": "website/content/en/rules/dataflow/ERR/2023_009.md",
    "content": "---\ntitle: \"dataflow/ERR/2023_009\"\nlinkTitle: \"ERR/2023_009\"\nweight: 1\ntype: docs\ndescription: >\n  Splunk HEC endpoint uses a valid public SSL certificate, or a correct root-CA certificate is provided.\n---\n\n**Product**: [Dataflow](https://cloud.google.com/dataflow)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nThe Dataflow job will fail if the root-CA certificate provided is not the\ncorrect one or if the endpoint is not signed by a valid issuer.\nCheck that the issuer for the certificate is\nvalid and the correct certificate is provided.\n\n### Remediation\nUse a valid `rootCaCertificatePath` path parameter as [shown in this template](https://cloud.google.com/dataflow/docs/guides/templates/provided/pubsub-to-splunk#template-parameters).\n\n\n### Further information\n\n- [Pub/Sub to Splunk template parameters](https://cloud.google.com/dataflow/docs/guides/templates/provided/pubsub-to-splunk#template-parameters)\n- [Using Splunk with Dataflow blog](https://cloud.google.com/blog/products/data-analytics/connect-to-splunk-with-a-dataflow-template)\n"
  },
  {
    "path": "website/content/en/rules/dataflow/ERR/2023_010.md",
    "content": "---\ntitle: \"dataflow/ERR/2023_010\"\nlinkTitle: \"ERR/2023_010\"\nweight: 1\ntype: docs\ndescription: >\n  Dataflow job using streaming insert did not fail due to missing required field.\n---\n\n**Product**: [Dataflow](https://cloud.google.com/dataflow)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nThe Dataflow job writing to bigquery using streaming inserts can fail due to missing required field.\n\n### Remediation\n\nBigQuery streaming insert request has wrong rows resulting in Missing required\nfield error. This means a row missed certain column or column is set as null.\nThe missing column value can be found from error message in the logs of\ndataflow job id .\nNeed to fix the pipeline code to put column values correctly.\n\n### Further information\n[Streaming insert errors](https://cloud.google.com/bigquery/docs/error-messages#metadata-errors-for-streaming-inserts)\n"
  },
  {
    "path": "website/content/en/rules/dataflow/ERR/2023_011.md",
    "content": "---\ntitle: \"dataflow/ERR/2023_011\"\nlinkTitle: \"ERR/2023_011\"\nweight: 1\ntype: docs\ndescription: >\n  Dataflow job using streaming insert did not fail due to mismatched column type.\n---\n\n**Product**: [Dataflow](https://cloud.google.com/dataflow)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nThe Dataflow job writing to bigquery using streaming inserts can fail due to mismatched column type.\n\n### Remediation\n\nAs the error indicate, the BigQuery streaming insert request has wrong rows. [BigQuery error messages](https://cloud.google.com/bigquery/docs/error-messages#metadata-errors-for-streaming-inserts)\n\nReview the mismatched columns to fix the pipeline code to put column values correctly.\nMismatched column name can be found from the error message in the logs for the dataflow job.\nFor eg - Cannot convert value to integer (bad value):str_for_int_column\n\n### Further information\n"
  },
  {
    "path": "website/content/en/rules/dataflow/ERR/2023_012.md",
    "content": "---\ntitle: \"dataflow/ERR/2023_012\"\nlinkTitle: \"ERR/2023_012\"\nweight: 1\ntype: docs\ndescription: >\n  Dataflow job writing to spanner did not fail due to OOM.\n---\n\n**Product**: [Dataflow](https://cloud.google.com/dataflow)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nThe Dataflow job writing to spanner can fail in case of out of memory errors.\n\nTo write data to spanner, The SpannerIO package in Beam's Java sdk provides a write transform.\nIt uses SpannerIO.write() transform to execute a collection of input row mutations.\nThe Dataflow connector groups mutations into batches for efficiency.\nGiven a PCollection of Mutations – SpannerIO.Write groups, sorts and batches the\nmutations on the primary key and applies the mutations on Spanner.\n\nSpannerIO uses local memory for creating batches of sorted mutations which can\nlead to high memory consumption\n\n### Remediation\n\nThere are several options to address high memory consumption by SpannerIO.write():\n- increase the machine type/memory [machine types](https://cloud.google.com/compute/docs/machine-resource#recommendations_for_machine_types)\n- reducing the [number_of_worker_harness_threads](https://cloud.google.com/dataflow/docs/reference/pipeline-options#:~:text=numberOfWorkerHarnessThreads)\n- alter the\nSpannerIO.write() parameters to reduce the amount of data that needs to be\nstored in memory\n- disable Sorting by setting .withGroupingFactor(1) (negatively affects performance of SpannerIO.write())\n- disable Sorting and Batching by setting .withMaxNumMutations(0) (negatively affects performance of SpannerIO.write())\n\nThe latter can be done using the SpannerIO.write() parameters. For example: SpannerIO.write().withBatchSizeBytes\n(100_000).withMaxNumMutations(500).withGroupingFactor(100) will use approx\n1/10th of the memory.\n\n### Further information\n\n[SpannerIO code](https://github.com/apache/beam/blob/v2.36.0/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/spanner/SpannerIO.java#L222)\n[javadoc](https://beam.apache.org/releases/javadoc/current/org/apache/beam/sdk/io/gcp/spanner/SpannerIO.Write.html#withMaxNumMutations-long-).\n[Dataflow connector](https://cloud.google.com/spanner/docs/dataflow-connector#write-transform)\n[BeamIO connectors] (https://beam.apache.org/documentation/io/connectors/)\n"
  },
  {
    "path": "website/content/en/rules/dataflow/ERR/2023_013.md",
    "content": "---\ntitle: \"dataflow/ERR/2023_013\"\nlinkTitle: \"ERR/2023_013\"\nweight: 1\ntype: docs\ndescription: >\n  Dataflow job reading from spanner did not fail due to deadline exceeded error.\n---\n\n**Product**: [Dataflow](https://cloud.google.com/dataflow)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nThe Dataflow job reading from spanner, failed with deadline exceeded error\n\na. If the job is not already using shuffle service, try enabling shuffle service.\nb. Timeouts are caused by too large work items.\nTo make sure there are no timeouts, it is recommended trying to tweak\nsome configurations in Spanner Read such as “maxPartittions” and “partitionSizeBytes”.\nc. If the CPU utilization is high, might have to scale up the metadata database.\n\n### Remediation\n\n### Further information\n"
  },
  {
    "path": "website/content/en/rules/dataflow/ERR/2024_001.md",
    "content": "---\ntitle: \"dataflow/ERR/2024_001\"\nlinkTitle: \"ERR/2024_001\"\nweight: 1\ntype: docs\ndescription: >\n  Dataflow job is not facing GCE resource constraints.\n---\n\n**Product**: [Dataflow](https://cloud.google.com/dataflow)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nDataflow jobs may fail due to GCE resource quotas which can inadversedly cause jobs to fail to launch.\n\nYou can search in the Log Explorer for such jobs with the below mentioned logging query:\n\n```\nresource_type='dataflow_step',\nseverity>=WARNING\nlog_id(\"dataflow.googleapis.com/job-message\")\ntextPayload~=\"has insufficient quota(s) to execute this workflow\" OR \"The quota check has failed\" OR \"Quota exceeded\" OR \"Compute Engine API has not fully initialized\" OR \"Throttling logger worker\" OR \"This workload is drawing too much egress bandwidth from Cloud Storage\" OR \"Per-customer shuffle size limit exceeded\" OR \"RESOURCE_EXHAUSTED: Exceeds 'AppendRows throughput' quota\" OR \"RESOURCE_EXHAUSTED: Exceeds 'Concurrent connections'\" OR \"RESOURCE_EXHAUSTED: Exceeds 'CreateWriteStream requests'\"\n```\n\n### Remediation\nBelow are the remediation for different types of errors:\n1. 'has insufficient quota(s) to execute this workflow', 'The quota check has failed', 'Quota exceeded',\n  Please refer to the following [documentation](https://cloud.google.com/compute/resource-usage) to request for a quota increase.\n\n2. \"Compute Engine API has not fully initialized\"\n Please reach out to Cloud Support Team to help increase quota.\n\n3. \"Throttling logger worker\"\n  Dataflow job is running into Dataflow abusive logs quota. This limit is hardcoded and cannot be increased. Possible mitigations include logging only on errors or writing these logs to storage sink (BigQuery, GCS, etc.).\n  [Reference](https://cloud.google.com/dataflow/docs/guides/logging#LogLimits)\n\n4. \"This workload is drawing too much egress bandwidth from Cloud Storage\"\nDataflow job is running into Cloud Storage egress bandwidth quota errors. This quota depends on bucket settings and may be different for single or multi-region buckets.\n\n  Please check the documentation on how to increase the limits for the project.\n  [Reference](https://cloud.google.com/storage/docs/bandwidth-usage#increase)\n\n5. \"Per-customer shuffle size limit exceeded\" OR \"RESOURCE_EXHAUSTED: Exceeds 'AppendRows throughput' quota\" OR \"RESOURCE_EXHAUSTED: Exceeds 'Concurrent connections' quota\" OR \"RESOURCE_EXHAUSTED: Exceeds 'CreateWriteStream requests' quota\"\n  Please reach out to Cloud Support Team to help increase quota.\n\n### Further information\n\n- [GCE Allocation quotas](https://cloud.google.com/compute/resource-usage)\n"
  },
  {
    "path": "website/content/en/rules/dataflow/ERR/2024_002.md",
    "content": "---\ntitle: \"dataflow/ERR/2024_002\"\nlinkTitle: \"ERR/2024_002\"\nweight: 1\ntype: docs\ndescription: >\n  Dataflow job is not returning KeyCommitTooLargeException errors.\n---\n\n**Product**: [Dataflow](https://cloud.google.com/dataflow)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nDataflow streaming jobs may fail due to the following error message:\n\n```\nError message from worker: org.apache.beam.runners.dataflow.worker.StreamingDataflowWorker$KeyCommitTooLargeException: Commit request for stage P59 and key 7460 has size 1422763350 which is more than the limit of 1073741824. This may be caused by grouping a very large amount of data in a single window without using Combine, or by producing a large amount of data from a single input element.\n```\n\nYou can search this in Logs Explorer for such jobs with the below mentioned Logging Query:\n\n      \"\"\"\n      resource.type=\"dataflow_step\"\n      resource.labels.job_id=\"%dataflowJobID%\"\n      \"KeyCommitTooLargeException\" OR \"This may be caused by grouping a very large amount of data in a single window without using Combine, or by producing a large amount of data from a single input element\"\n      severity>=\"WARNING\"\n      \"\"\"\n\n### Remediation\n\nThis error occurs in streaming scenarios if a very large amount of data is grouped without using a Combine transform, or if a large amount of data is produced from a single input element.\n\nTo reduce the possibility of encountering this error, use the following strategies:\n\n1. Ensure that processing a single element cannot result in outputs or state modifications exceeding the limit.\n\n2. If multiple elements were grouped by a key, consider increasing the key space to reduce the elements grouped per key.\n\n3. If elements for a key are emitted at a high frequency over a short time, that might result in many GB of events for that key in windows.\n\n4. Rewrite the pipeline to detect keys like this and only emit an output indicating the key was frequently present in that window.\n\n5. Use sublinear space Combine transforms for commutative and associate operations. Don't use a combiner if it doesn't reduce space. For example, combiner for strings that just appends strings together is worse than not using combiner.\n\n### Further information\n\n- [Streaming Pipelines](https://cloud.google.com/dataflow/docs/concepts/streaming-pipelines)\n- [KeyCommitTooLarge](https://cloud.google.com/dataflow/docs/guides/common-errors#key-commit-too-large-exception)\n"
  },
  {
    "path": "website/content/en/rules/dataflow/ERR/2024_003.md",
    "content": "---\ntitle: \"dataflow/ERR/2024_003\"\nlinkTitle: \"ERR/2024_003\"\nweight: 1\ntype: docs\ndescription: >\n  Streaming Dataflow jobs are not using WRITE_TRUNCATE when working with unbounded PCollections.\n---\n\n**Product**: [Dataflow](https://cloud.google.com/dataflow)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nDataflow jobs when using WRITE_TRUNCATE with unbounded PCollections sources\nwould return the below warning:\n\n```\nWriteDisposition.WRITE_TRUNCATE is not supported for an unbounded PCollection\n```\n\n### Remediation\n\nBigQueryIO doesn't support streaming query (or an unbounded source) to BigQuery with the \"Overwrite table\" (WriteDisposition.WRITE_TRUNCATE) option. If the user selects a Pub/Sub topic as the source, in the Create Dataflow job panel under the path Destination > BigQuery > Write disposition, it will not show `Overwrite table` option but only the options `Write if empty` and `Append to table`.\n\nThis is an intended behavior to prevent the exception mentioned above. If you are manually setting this parameter in your code base, the above warning is thrown, which will lead to stuckness on the job.\n\n### Further information\n\n- [BigQuery job](https://cloud.google.com/bigquery/docs/reference/rest/v2/Job)\n"
  },
  {
    "path": "website/content/en/rules/dataflow/ERR/2024_004.md",
    "content": "---\ntitle: \"dataflow/ERR/2024_004\"\nlinkTitle: \"ERR/2024_004\"\nweight: 1\ntype: docs\ndescription: >\n  The Dataflow job has the necessary GCS permissions for the temporary bucket.\n---\n\n**Product**: [Dataflow](https://cloud.google.com/dataflow)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nTwo primary reasons cause Dataflow jobs to fail when writing to a storage bucket: either the specified bucket does not exist within the targeted Google Cloud project, or the associated service account lacks the necessary permissions to write to it.\n\n### Remediation\n\n- If the bucket is missing, create it in the target project\n- If this is permissions error, assign the role ```storage.objectAdmin``` to the service account. The service account is the same which is managing the Compute Engine instance.\n\n### Further information\n\n- [Cloud Storage Roles](https://cloud.google.com/iam/docs/understanding-roles#cloud-storage-roles)\n- [Create a new bucket](https://cloud.google.com/storage/docs/creating-buckets#create_a_new_bucket)\n"
  },
  {
    "path": "website/content/en/rules/dataflow/ERR/2024_005.md",
    "content": "---\ntitle: \"dataflow/ERR/2024_005\"\nlinkTitle: \"ERR/2024_005\"\nweight: 1\ntype: docs\ndescription: >\n  Dataflow and its controller service account have the necessary permissions to interact with Pub/Sub topics.\n---\n\n**Product**: [Dataflow](https://cloud.google.com/dataflow)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nDataflow jobs rely on IAM permissions to access Pub/Sub topics.While the Dataflow job itself needs the 'pubsub.subscriber' role to receive messages, the controller service account also requires permission to view topic details ('pubsub.topics.get'). This permission is usually included in the broader 'pubsub.viewer' role. If the controller service account lacks 'pubsub.topics.get' permission, it will fail to create subscriptions, resulting in a 'GETTING_PUBSUB_SUBSCRIPTION_FAILED' error.\n### Remediation\n\nThe Controller service account also needs ```pubsub.topics.get```  permission [included in role ```pubsub.viewer```](https://cloud.google.com/pubsub/docs/access-control#pubsub.viewer) in addition to role ```pubsub.subscriber```.\n\n### Further information\n\n[Public documentation - Accessing Pub/Sub topics and subscriptions](https://cloud.google.com/dataflow/docs/concepts/security-and-permissions#accessing_pubsub)\n"
  },
  {
    "path": "website/content/en/rules/dataflow/WARN/2023_001.md",
    "content": "---\ntitle: \"dataflow/WARN/2023_001\"\nlinkTitle: \"WARN/2023_001\"\nweight: 1\ntype: docs\ndescription: >\n  Dataflow job does not have a hot key\n---\n\n**Product**: [Dataflow](https://cloud.google.com/dataflow)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nA Dataflow job might have hot key which can limit the ability of Dataflow to process elements in parallel, which increases execution time.\n\nYou can search in the Logs Explorer for such jobs with the logging query:\n```\nresource.type=\"dataflow_step\"\nlog_id(\"dataflow.googleapis.com/worker\") OR log_id(\"dataflow.googleapis.com/harness\")\nseverity>=WARNING\ntextPayload=~\"A hot key(\\s''.*'')? was detected in step\" OR \"A hot key was detected\"\n```\n\n### Remediation\n\nTo resolve this issue, check that your data is evenly distributed. If a key has disproportionately many values, consider the following courses of action:\n\n- Rekey your data. Apply a [ParDo transform](https://beam.apache.org/documentation/programming-guide/#pardo) to output new key-value pairs.\n- For Java jobs, use the [Combine.PerKey.withHotKeyFanout](https://beam.apache.org/releases/javadoc/current/org/apache/beam/sdk/transforms/Combine.PerKey.html) transform.\n- For Python jobs, use the [CombinePerKey.with_hot_key_fanout](https://beam.apache.org/releases/pydoc/current/apache_beam.transforms.core.html#apache_beam.transforms.core.CombinePerKey.with_hot_key_fanout) transform.\n- Enable Dataflow Shuffle\n\n### Further information\n\n- [Hot key detection](https://cloud.google.com/dataflow/docs/guides/common-errors#hot-key-detected)\n"
  },
  {
    "path": "website/content/en/rules/dataflow/WARN/2023_003.md",
    "content": "---\ntitle: \"dataflow/WARN/2023_002\"\nlinkTitle: \"WARN/2023_002\"\nweight: 1\ntype: docs\ndescription: >\n  Dataflow worker logs are Throttled\n---\n\n**Product**: [Dataflow](https://cloud.google.com/dataflow)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nWorker log messages are limited to 15,000 messages every 30 seconds, per worker. If\nthis limit is reached, a single worker log message is added saying that logging is throttled.\n\n### Remediation\n\n1. Limit the log messages by logging only errors using try/catch blocks within ParDo's.\n2. Write the required logs as Strings, make it a second output PCollection that can be written\nto a storage sink like BigQuery, Cloud Storage.\n\n\n### Further information\n\n[Dataflow Worker Log Limits](https://cloud.google.com/dataflow/docs/guides/logging#LogLimits)\n"
  },
  {
    "path": "website/content/en/rules/dataflow/WARN/2023_004.md",
    "content": "---\ntitle: \"dataflow/WARN/2023_003\"\nlinkTitle: \"WARN/2023_003\"\nweight: 1\ntype: docs\ndescription: >\n  Dataflow job doesn't stuck at draining state for more than 3 hours\n---\n\n**Product**: [Dataflow](https://cloud.google.com/dataflow)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nA Dataflow job might got stuck at draining as draining doesn't fix stuck pipelines.\n\n### Remediation\n\nDraining doesn't fix stuck pipelines. If data movement is blocked, the pipeline remains stuck after the drain command. To address a stuck pipeline, use the update command to update the pipeline with code that resolves the error that is creating the problem. You can also cancel stuck jobs, but canceling jobs might result in data loss.\n\n### Further information\n\n- [Stopping a stuck pipeline](https://cloud.google.com/dataflow/docs/guides/stopping-a-pipeline#stuck)\n- [Important information about draining](https://cloud.google.com/dataflow/docs/guides/stopping-a-pipeline#important_information_about_draining_a_job)\n"
  },
  {
    "path": "website/content/en/rules/dataflow/WARN/2023_006.md",
    "content": "---\ntitle: \"dataflow/WARN/2023_006\"\nlinkTitle: \"WARN/2023_006\"\nweight: 1\ntype: docs\ndescription: >\n  A Dataflow job doesn't stuck in the cancelling state\n---\n\n**Product**: [Dataflow](https://cloud.google.com/dataflow)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nA Dataflow job may get stuck in the cancelling state if\nit is requested to cancel while a snapshot is in progress.\n\n### Remediation\n\nConsider force canceling in this situation as force canceling is only intended for jobs that have become stuck in the regular canceling process. For more information, see [Force cancel a job](https://cloud.google.com/dataflow/docs/guides/stopping-a-pipeline#forcecancel).\n\n### Further information\n\n- [Cancel a Dataflow job](https://cloud.google.com/dataflow/docs/guides/stopping-a-pipeline#cancel)\n- [Important information about cancelling a job](https://cloud.google.com/dataflow/docs/guides/stopping-a-pipeline#important_information_about_canceling_a_job)\n"
  },
  {
    "path": "website/content/en/rules/dataflow/WARN/2024_001.md",
    "content": "---\ntitle: \"dataflow/WARN/2024_001\"\nlinkTitle: \"WARN/2024_001\"\nweight: 1\ntype: docs\ndescription: >\n  Dataflow job is not returning Operation ongoing or Processing Stuck logs.\n---\n\n**Product**: [Dataflow](https://cloud.google.com/dataflow)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nThe Dataflow job will return this warning when your DoFn code is slow, or\nwaiting for some slow external operation to complete or when your DoFn code\nmight be stuck, deadlocked, or abnormally slow to finish processing.\n\nYou can search this in Logs Explorer for such jobs with the below mentioned Logging Query:\n\n      \"\"\"\n      resource.type=\"dataflow_step\"\n      resource.labels.job_id=\"%dataflowJobID%\"\n      \"Operation ongoing in step\" OR \"Processing stuck in step\" OR \"Operation ongoing for over\" OR \"Operation ongoing in transform\" OR \"Operation ongoing in bundle\"\n      severity>=\"WARNING\"\n      \"\"\"\n\n### Remediation\n\nTo determine which is the case, expand the Cloud Monitoring log entry to see a stack trace by running the above log query. Look for messages that indicate that the DoFn code is stuck or otherwise encountering issues. If no messages are present, the issue might be the execution speed of the DoFn code. Consider using Cloud Profiler or other tool to investigate the performance of your code.\n\n### Further information\n\n- [Operation ongoing and Processing Stuck errors](https://cloud.google.com/dataflow/docs/guides/common-errors#processing-stuck)\n"
  },
  {
    "path": "website/content/en/rules/dataflow/WARN/2024_002.md",
    "content": "---\ntitle: \"dataflow/WARN/2024_002\"\nlinkTitle: \"WARN/2024_002\"\nweight: 1\ntype: docs\ndescription: >\n  Dataflow job using Streaming Appliance is not getting stuck due to Commit failed: computation doesn't have the state family.\n---\n\n**Product**: [Dataflow](https://cloud.google.com/dataflow)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nA Dataflow job running with Streaming Appliance may get stuck and return the below warnings during its execution:\n\nCommit failed: computation doesn't have the state family\n\nYou can search this in Logs Explorer for such jobs with the below mentioned Logging Query:\n\n      \"\"\"\n      resource.type=\"dataflow_step\"\n      resource.labels.job_id=\"%dataflowJobID%\"\n      \"Commit failed: computation doesn't have the state family\"\n      severity>=\"WARNING\"\n      \"\"\"\n\nThis warning will not be visible for jobs using Streaming Engine as we proactively reject such problematic pipelines, however in Appliance jobs, it may get into a bad state and become stuck.\n\n### Remediation\n\nThis is a known issue when updating pipelines that have a flatten operation followed by a ParDo that uses a side input. The workaround is to change the pipeline shape to avoid this issue. For example if the pipeline looks something like:\n\n ParDo                     ParDo\n   \\                          /\n    \\                        /\n       A flatten operation\n              |\n              |\n      ParDo using side input\n              |\n            Output\n\n\nThe recommended work-around is to change this to something like:\n\n\n   ParDo                                  ParDo\n      \\                                    /\n       \\                                  /\nParDo using side input          ParDo using side input\n             \\                       /\n              \\                     /\n                A flatten operation\n                        |\n                        |\n                      Output\n\n\n### Further information\n\n- [Streaming Pipelines](https://cloud.google.com/dataflow/docs/concepts/streaming-pipelines)\n- [Streaming Engine](https://cloud.google.com/dataflow/docs/streaming-engine)\n"
  },
  {
    "path": "website/content/en/rules/dataflow/_index.md",
    "content": "---\ntitle: \"DATAFLOW\"\nlinkTitle: \"dataflow\"\ntype: docs\ndescription: \"Cloud Dataflow\"\n---\n"
  },
  {
    "path": "website/content/en/rules/datafusion/ERR/2022_001.md",
    "content": "---\ntitle: \"datafusion/ERR/2022_001\"\nlinkTitle: \"ERR/2022_001\"\nweight: 1\ntype: docs\ndescription: >\n  Firewall rules allow for Data Fusion to communicate to Dataproc VMs.\n---\n\n**Product**: [Cloud Data Fusion](https://cloud.google.com/data-fusion)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nCloud Data Fusion runs in a Google managed tenant project.\nIn Data Fusion versions below 6.2.0 and private Data Fusion instances\nthe Google managed resources in the tenant project need to be able to\ncommunicate to the Dataproc running pipeline jobs in the client project.\n\n\n### Remediation\n\n- If your Cloud Data Fusion is private, create the [allow-ssh firewall rule](https://cloud.google.com/data-fusion/docs/how-to/create-private-ip#create_a_firewall_rule)\nwith a high priority (e.g `--priority=100`) to override any conflicting\nfirewall rules that may be blocking communication.\n\n- If your Cloud Data Fusion is public and has a version below 6.2.0\ncreate the [Default allow ssh firewall rule](https://cloud.google.com/data-fusion/docs/concepts/networking#firewall-rules) with a high priority (e.g `--priority=100`)\nto override any conflicting firewall rules that may be blocking communication.\n\n### Further information\n\n- You can find the firewall version disclaimer\nin the `Creating a Cloud Data Fusion instance` [Before you begin](https://cloud.google.com/data-fusion/docs/how-to/create-instance#before_you_begin) section.\n"
  },
  {
    "path": "website/content/en/rules/datafusion/ERR/2022_002.md",
    "content": "---\ntitle: \"datafusion/ERR/2022_002\"\nlinkTitle: \"ERR/2022_002\"\nweight: 1\ntype: docs\ndescription: >\n  Private Data Fusion instance has valid host VPC IP range.\n---\n\n**Product**: [Cloud Data Fusion](https://cloud.google.com/data-fusion)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nCloud Data Fusion runs in a Google managed tenant project.\nPrivate Data Fusion instances using a shared VPC network\nrequire a large enough internal IP range to create all of\nthe required Data Fusion resources in the tenant project.\n\n\n### Remediation\n\n- If your Cloud Data Fusion is private and uses a shared VPC\nyou must enable the `Service Networking API` in the host project.\n\n- Once `Service Networking API` is enabled, you are then able to\nallocate an IP range of at least size `/22` to be used to create\nthe Data Fusion instance resources in the Google managed project.\n\n### Further information\n\n- You can find step-by-step details in the [Allocate an IP range](https://cloud.google.com/data-fusion/docs/how-to/create-private-ip#shared-vpc-network)\nData Fusion private instance guide.\n"
  },
  {
    "path": "website/content/en/rules/datafusion/ERR/2022_003.md",
    "content": "---\ntitle: \"datafusion/ERR/2022_003\"\nlinkTitle: \"ERR/2022_003\"\nweight: 1\ntype: docs\ndescription: >\n  Private Data Fusion instance is peered to the tenant project.\n---\n\n**Product**: [Cloud Data Fusion](https://cloud.google.com/data-fusion)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nCloud Data Fusion runs in a Google managed tenant project.\nPrivate Data Fusion instances are required to be peered to\nthe user's VPC network to enable communication with jobs.\n\n\n### Remediation\n\n- The name of the tenant project VPC network name to be\n  peered is 'INSTANCE_REGION-INSTANCE_ID'.\n\n- The peered connection needs to import custom routes\n  so that you can access the Data Fusion UI.\n\n- The peered connection needs to export custom routes\n  so that Data Fusion can access any on-prem resources.\n\n\n### Further information\n\n- You can find step-by-step details in the [Create a peering connection](https://cloud.google.com/data-fusion/docs/how-to/create-private-ip#create_a_peering_connection)\n  Data Fusion private instance guide.\n"
  },
  {
    "path": "website/content/en/rules/datafusion/ERR/2022_004.md",
    "content": "---\ntitle: \"datafusion/ERR/2022_004\"\nlinkTitle: \"ERR/2022_004\"\nweight: 1\ntype: docs\ndescription: >\n  Cloud Data Fusion Service Account has necessary permissions\n---\n\n**Product**: [Cloud Data Fusion](https://cloud.google.com/data-fusion)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\nThe Google-managed service account, called the Cloud Data Fusion API Service Agent, is created by Cloud Data Fusion to gain access to customer resources so that it can act on the customer's behalf. It is used in the tenant project to access customer project resources.\n\nThe ``roles/datafusion.serviceAgent`` role is automatically assigned to this account during Cloud Data Fusion API activation and shouldn't be revoked for Cloud Data Fusion to function correctly.\n\n### Remediation\nGrant roles/datafusion.serviceAgent to the Cloud Data Fusion service account. For example, this can be done using the [GCP Console](https://cloud.google.com/data-fusion/docs/how-to/granting-service-account-permission#grant_roles_to_service_accounts) or by running the following gcloud tool command :\n```\ngcloud projects add-iam-policy-binding PROJECT_ID --member='serviceAccount:service-PROJECT_ID@gcp-sa-datafusion.iam.gserviceaccount.com' --role='roles/datafusion.serviceAgent'\n```\nwhere PROJECT_ID could be either host or service project id depending on whether Data Fusion Instance exists at a Service or Host project.\n\n\n### Further information\nLearn more about [Granting service account user permission](https://cloud.google.com/data-fusion/docs/how-to/granting-service-account-permission#grant_roles_to_service_accounts)\n\nLearn more about [Cloud Data Fusion service accounts](https://cloud.google.com/data-fusion/docs/concepts/service-accounts)\n\nLearn more about [Service agents](https://cloud.google.com/iam/docs/service-agents)\n"
  },
  {
    "path": "website/content/en/rules/datafusion/ERR/2022_005.md",
    "content": "---\ntitle: \"datafusion/ERR/2022_005\"\nlinkTitle: \"ERR/2022_005\"\nweight: 1\ntype: docs\ndescription: >\n  Private Data Fusion instance has networking permissions.\n---\n\n**Product**: [Cloud Data Fusion](https://cloud.google.com/data-fusion)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nPrivate Data Fusion instances that use a shared VPC host network\nin another project require permissions in that host project.\n\n### Remediation\n\n- The Cloud Data Fusion API Service Agent\n'service-PROJECT_NUMBER@gcp-sa-datafusion.iam.gserviceaccount.com'\nrequires the 'Compute Network User' role on the host project,\nOR the 'Compute Network Viewer' role on the host project and\nthe 'Compute Network User' role on a subnetwork in the\nData Fusion instance region.\n\n\n- The Dataproc Service Agent service account\n'service-PROJECT_NUMBER@dataproc-accounts.iam.gserviceaccount.com'\nalso requires the 'Compute Network User' role on the host project,\nOR the 'Compute Network Viewer' role on the host project and\nthe 'Compute Network User' role on a subnetwork in the\nData Fusion instance region.\n\n\n### Further information\n\n- You can find details about how to\n[Set up Data Fusion IAM permissions](https://cloud.google.com/data-fusion/docs/how-to/create-private-ip#set_up_iam_permissions)\nand more about the [Service accounts in Cloud Data Fusion](https://cloud.google.com/data-fusion/docs/concepts/service-accounts#service_accounts_in)\nin our Data Fusion guides.\n"
  },
  {
    "path": "website/content/en/rules/datafusion/ERR/2022_006.md",
    "content": "---\ntitle: \"datafusion/ERR/2022_006\"\nlinkTitle: \"ERR/2022_006\"\nweight: 1\ntype: docs\ndescription: >\n  Private Google Access enabled for private Data Fusion instance subnetwork.\n---\n\n**Product**: [Cloud Data Fusion](https://cloud.google.com/data-fusion)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nThe region where you create your private Cloud Data Fusion instance must\nhave a subnet with Private Google Access enabled.\n\nThis allows for your jobs to make API requests to Google services.\n\n### Remediation\n\nBy default Data Fusion uses the very first subnetwork located in the\nconfigured instance network for the region of the Data Fusion instance.\n\n- You may also override the subnetwork used via a [Compute Profile](https://cdap.atlassian.net/wiki/spaces/DOCS/pages/480314016/Creating+Compute+Profiles).\n\nYou are required to enable `Private Google Access` on the\nsubnetwork configured for the private Data Fusion instance.\n\n### Further information\n\n- You can find details about how to [Enable Private Google Access](https://cloud.google.com/vpc/docs/configure-private-google-access#config-pga) in our VPC guide.\n"
  },
  {
    "path": "website/content/en/rules/datafusion/ERR/2022_007.md",
    "content": "---\ntitle: \"datafusion/ERR/2022_007\"\nlinkTitle: \"ERR/2022_007\"\nweight: 1\ntype: docs\ndescription: >\n  Cloud Data Fusion Service Account exists at a Project\n---\n\n**Product**: [Cloud Data Fusion](https://cloud.google.com/data-fusion)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nThe Google-managed service account, called the Cloud Data Fusion API Service Agent, is created by Cloud Data Fusion to gain access to customer resources so that it can act on the customer's behalf. It is used in the tenant project to access customer project resources. It is also know as the Cloud Data Fusion Service Account.\nAlthough a Cloud Data Fusion instance has Cloud Data Fusion Service Account associated with it the Project may or may not contain a Cloud Data Fusion Service Account. The reason could be either an accidental deletion by user via Terraform, CLI or console.\n\nIn this case the Cloud Data Fusion has no way of knowing about this deletion which may to an improper operation of CDF instance.\n\n\n### Remediation\n\nCreate a Cloud Data Fusion service account by specifying a role. The Service Account cannot be created without a role. For example, this can be done using the [GCP Console](https://cloud.google.com/data-fusion/docs/how-to/granting-service-account-permission#grant_roles_to_service_accounts) or by running the following gcloud tool command :\n```\ngcloud projects add-iam-policy-binding PROJECT_ID --member='serviceAccount:service-PROJECT_ID@gcp-sa-datafusion.iam.gserviceaccount.com' --role='roles/datafusion.serviceAgent'\n```\nwhere $PROJECT_ID should be the id of the project in which the Data Fusion instance is running.\n\n\n### Further information\n\n- [Granting service account user permission](https://cloud.google.com/data-fusion/docs/how-to/granting-service-account-permission#grant_roles_to_service_accounts)\n\n- [Cloud Data Fusion service accounts](https://cloud.google.com/data-fusion/docs/concepts/service-accounts)\n\n- [Service agents](https://cloud.google.com/iam/docs/service-agents)\n"
  },
  {
    "path": "website/content/en/rules/datafusion/ERR/2022_008.md",
    "content": "---\ntitle: \"datafusion/ERR/2022_008\"\nlinkTitle: \"ERR/2022_008\"\nweight: 1\ntype: docs\ndescription: >\n  Cloud Data Fusion SA has Service Account User permissions on the Dataproc SA\n---\n\n**Product**: [Cloud Data Fusion](https://cloud.google.com/data-fusion)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nRunning pipelines on your Dataproc clusters that reside in customer project need access to your resources so that they can act on your behalf.\nWhether you use a user-managed service account, or the default Compute Engine service account on the virtual machines in a cluster, you must grant the Service Account User role to Cloud Data Fusion.\nOtherwise, Cloud Data Fusion cannot provision virtual machines in a Dataproc cluster.\n\nPROVISION task failed in REQUESTING_CREATE state for program run [pipeline-name] due to Dataproc operation failure: INVALID_ARGUMENT: User not authorized to act as service account\n'[service-account-name]'\n\n### Remediation\n\nIn order to solve Dataproc operation failure error you can follow one of the following approaches:\n\n1. Service Account level: Grant the Service Account User role for Cloud Data Fusion Service Account on the Data Proc Service Account\n\n2. Project level: Grant the Service Account User role for Cloud Data Fusion Service Agent on the Project. This would lead to an inheritance at the Service Account Level.\n\nFor example, this can be done using the [GCP Console](https://cloud.google.com/data-fusion/docs/how-to/granting-service-account-permission#grant_roles_to_service_accounts) or by running the following gcloud tool commands :\n```\ngcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT --member='serviceAccount:service-PROJECT_ID@gcp-sa-datafusion.iam.gserviceaccount.com' --role='roles/iam.serviceAccountUser'\n```\nwhere SERVICE_ACCOUNT could be either Compute Engine default service account or a custom Service Account\n\n```\ngcloud projects add-iam-policy-binding PROJECT_ID --member='serviceAccount:service-PROJECT_ID@gcp-sa-datafusion.iam.gserviceaccount.com' --role='roles/iam.serviceAccountUser'\n```\n\n### Further information\n\n- [Granting service account user permission](https://cloud.google.com/data-fusion/docs/how-to/granting-service-account-permission#grant_roles_to_service_accounts)\n\n- [Cloud Data Fusion service accounts](https://cloud.google.com/data-fusion/docs/concepts/service-accounts)\n\n- [Service agents](https://cloud.google.com/iam/docs/service-agents)\n"
  },
  {
    "path": "website/content/en/rules/datafusion/ERR/2022_009.md",
    "content": "---\ntitle: \"datafusion/ERR/2022_009\"\nlinkTitle: \"ERR/2022_009\"\nweight: 1\ntype: docs\ndescription: >\n  Cloud Dataproc Service Account has a Cloud Data Fusion Runner role\n---\n\n**Product**: [Cloud Data Fusion](https://cloud.google.com/data-fusion)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nGranted to the Dataproc service account so that Dataproc is authorized to communicate the pipeline runtime information such as status, logs, and metrics to the Cloud Data Fusion services running in the tenant project.\nThe service account used by the Dataproc needs to be granted with the roles/datafusion.runner role. The role is needed in order for the job in Dataproc be able to talk back to Data Fusion\n\n### Remediation\nAdd an IAM policy binding to a Cloud Dataproc service account by specifying a role. The Service Account cannot be created without a role. For example, this can be done using the [GCP Console](https://cloud.google.com/data-fusion/docs/how-to/granting-service-account-permission#grant_roles_to_service_accounts) or by running the following gcloud tool command :\n\n```\ngcloud projects add-iam-policy-binding PROJECT_ID --member='serviceAccount:SERVICE_ACCOUNT' --role='roles/datafusion.runner'\n```\nwhere SERVICE_ACCOUNT could be either Compute Engine default service account or the App Engine default service account or instead a user-specified service account.\n\n\n### Further information\n\n- [Granting service account user permission](https://cloud.google.com/data-fusion/docs/how-to/granting-service-account-permission#grant_roles_to_service_accounts)\n\n- [Cloud Data Fusion service accounts](https://cloud.google.com/data-fusion/docs/concepts/service-accounts)\n\n- [Service agents](https://cloud.google.com/iam/docs/service-agents)\n"
  },
  {
    "path": "website/content/en/rules/datafusion/ERR/2022_010.md",
    "content": "---\ntitle: \"datafusion/ERR/2022_010\"\nlinkTitle: \"ERR/2022_010\"\nweight: 1\ntype: docs\ndescription: >\n  Cloud Dataproc Service Account has a Dataproc Worker role.\n---\n\n**Product**: [Cloud Data Fusion](https://cloud.google.com/data-fusion)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nThe Dataproc Worker role provides the VM service account with the minimum permissions necessary to operate with Dataproc. To create a cluster with a user-specified service account, the specified service account must have all permissions granted by the Dataproc Worker role\n\n### Remediation\n\nAdd an IAM policy binding to a Cloud Dataproc service account by specifying a role. The Service Account cannot be created without a role. For example, this can be done using the [GCP Console](https://cloud.google.com/data-fusion/docs/how-to/granting-service-account-permission#grant_roles_to_service_accounts) or by running the following gcloud tool command:\n\n```\ngcloud projects add-iam-policy-binding PROJECT_ID --member='serviceAccount:<project-id>-compute@developer.gserviceaccount.com' --role='roles/dataproc.worker'\n```\n\n### Further information\n\n- [Dataproc service accounts](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/service-accounts)\n\n- [Granting service account user permission](https://cloud.google.com/data-fusion/docs/how-to/granting-service-account-permission#grant_roles_to_service_accounts)\n\n- [Cloud Data Fusion service accounts](https://cloud.google.com/data-fusion/docs/concepts/service-accounts)\n\n- [Service agents](https://cloud.google.com/iam/docs/service-agents)\n"
  },
  {
    "path": "website/content/en/rules/datafusion/ERR/2022_011.md",
    "content": "---\ntitle: \"datafusion/ERR/2022_011\"\nlinkTitle: \"ERR/2022_011\"\nweight: 1\ntype: docs\ndescription: >\n  Cloud Data Fusion version >= 6.2.0 has a storage admin role\n---\n\n**Product**: [Cloud Data Fusion](https://cloud.google.com/data-fusion)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nGrants full control of buckets and objects. When applied to an individual bucket, control applies only to the specified bucket and objects within the bucket.\nIn Cloud Data Fusion versions 6.2.0 and above, grant the Cloud Storage admin role (roles/storage.admin) to service accounts that are used by Dataproc in your project.\n\n### Remediation\n\nAdd an IAM policy binding to the Cloud Dataproc service account by specifying a role. The Service Account cannot be created without a role. For example, this can be done using the [GCP Console](https://cloud.google.com/data-fusion/docs/how-to/granting-service-account-permission#admin-permission) or by running the following gcloud tool command :\n\n```\ngcloud projects add-iam-policy-binding PROJECT_ID --member='serviceAccount:<project-id>-compute@developer.gserviceaccount.com' --role='roles/storage.admin'\n```\n\n### Further information\n\n- [Dataproc service accounts](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/service-accounts)\n\n- [Granting service account user permission](https://cloud.google.com/data-fusion/docs/how-to/granting-service-account-permission#grant_roles_to_service_accounts)\n\n- [Cloud Storage admin role](https://cloud.google.com/storage/docs/access-control/iam-roles#standard-roles)\n\n- [Service agents](https://cloud.google.com/iam/docs/service-agents)\n"
  },
  {
    "path": "website/content/en/rules/datafusion/ERR/2024_001.md",
    "content": "---\ntitle: \"datafusion/ERR/2024_001\"\nlinkTitle: \"ERR/2024_001\"\nweight: 1\ntype: docs\ndescription: >\n  Datafusion delete operation not failing.\n---\n\n**Product**: [Cloud Data Fusion](https://cloud.google.com/data-fusion)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nDuring the instance deletion process there are cases wherein a networking\nresource (i.e route) in the tenant project might not get deleted due to which\nthe process gets stalled in Deleting, and other reasons include missing IAM\nroles in Google managed datafusion serviceAccount.\n\n### Remediation\n-  [Instance stuck in deleting](https://datafusion.atlassian.net/wiki/spaces/KB/pages/32276574/Instance+stuck+in+deleting), instance deletion can fail due to missing IAM roles on the Cloud Data Fusion P4 service account which is a Google-managed service account, such as Cloud Data Fusion API Service Agent [(roles/datafusion.serviceAgent)](https://cloud.google.com/iam/docs/understanding-roles#datafusion.serviceAgent) IAM role.\n\n- Some other Common problems leading to instances deletion failure\n  - Failure to find expected resources :\n      In this case, clean up the resources manually from the GKE cluster and then re-attempt the delete again with [REST API](https://cloud.google.com/data-fusion/docs/reference/rest/v1beta1/projects.locations.instances/delete).\n  - PVCs stuck in terminating state :\n      This is caused by leftover pods in GKE that is using the PVC, In this case, manually delete the cluster and PVCs and then re-attempt the delete again with [REST API](https://cloud.google.com/data-fusion/docs/reference/rest/v1beta1/projects.locations.instances/delete).\n  - Pods get into crashloop due to secret missing :\n      In this case manually [delete the cluster](https://cloud.google.com/kubernetes-engine/docs/how-to/deleting-a-cluster#deleting_a_cluster)\n\n### Further information\n"
  },
  {
    "path": "website/content/en/rules/datafusion/WARN/2024_001.md",
    "content": "---\ntitle: \"datafusion/WARN/2024_001\"\nlinkTitle: \"WARN/2024_001\"\nweight: 1\ntype: docs\ndescription: >\n  Data Fusion version is supported.\n---\n\n**Product**: [Cloud Data Fusion](https://cloud.google.com/data-fusion)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nA major or minor version of Cloud Data Fusion environment is supported for a\nspecific period of time after it is released.After that period, instances that\ncontinue to use the environment version are no longer supported.\n\n### Remediation\n\n[Upgrade your environment](https://cloud.google.com/data-fusion/docs/how-to/upgrading#upgrade-instances) to the latest version.\n\n### Further information\n\nCheck the [Version support policy](https://cloud.google.com/data-fusion/docs/version-support-policy)\n"
  },
  {
    "path": "website/content/en/rules/datafusion/WARN/2024_002.md",
    "content": "---\ntitle: \"datafusion/WARN/2024_002\"\nlinkTitle: \"WARN/2024_002\"\nweight: 1\ntype: docs\ndescription: >\n  Data Fusion instance is not in a running state, The datafusion state is either Disabled or Failed, The reason for this disabled or Failed state could be due to configuration errors, KMS key disabled/denied access or key revoked etc.\n---\n\n**Product**: [Cloud Data Fusion](https://cloud.google.com/data-fusion)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\nData Fusion instance is not in a running state, The datafusion state is either Disabled or Failed, The reason for this disabled or Failed state could be due to configuration errors, KMS key disabled/denied access or key revoked etc.\n\n### Remediation\nThere are many ways in which a Data Fusion instance might failed to be created.\nReview the [Cloud Logs](https://cloud.google.com/data-fusion/docs/how-to/audit-logging) to identify the cause.\n\nThe reason for disabling the instance if the state is DISABLED.\nhttps://cloud.google.com/data-fusion/docs/reference/rest/v1/projects.locations.instances#disabledreason\n\n### Further information\n- [Instance states](https://cloud.google.com/data-fusion/docs/reference/rest/v1/projects.locations.instances#state)\n\nhttps://cloud.google.com/data-fusion/docs/how-to/customer-managed-encryption-keys\n"
  },
  {
    "path": "website/content/en/rules/datafusion/WARN/2024_003.md",
    "content": "---\ntitle: \"datafusion/WARN/2024_003\"\nlinkTitle: \"WARN/2024_003\"\nweight: 1\ntype: docs\ndescription: >\n  Scaling down is disabled for the Compute Profile for Dataproc.\n---\n\n**Product**: [Cloud Data Fusion](https://cloud.google.com/data-fusion)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nAutoscaling is not recommended for scaling down. Decreasing the cluster\nsize with autoscaling removes nodes that hold intermediate data, which might\ncause your pipelines to run slowly or fail in datafusion.\n\n### Remediation\n\n[Setting scaleDownFactor](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/autoscaling#setting_scaledownfactor)\n\n### Further information\n\n- [Autoscale Dataproc clusters](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/autoscaling)\n- [When to use autoscaling](https://cloud.google.com/data-fusion/docs/concepts/configure-clusters#autoscaling)\n- [Enable Predefined Dataproc Autoscaling](https://cdap.atlassian.net/wiki/spaces/DOCS/pages/480412227/Google+Dataproc#Enable-Predefined-Dataproc-Autoscaling)\n"
  },
  {
    "path": "website/content/en/rules/datafusion/WARN/2024_004.md",
    "content": "---\ntitle: \"datafusion/WARN/2024_004\"\nlinkTitle: \"WARN/2024_004\"\nweight: 1\ntype: docs\ndescription: >\n  Data Fusion version is compatible with Dataproc version from the corresponding compute profiles.\n---\n\n**Product**: [Cloud Data Fusion](https://cloud.google.com/data-fusion)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nThe version of your Cloud Data Fusion environment might not be compatible with\nthe version of your Dataproc cluster from the corresponding compute profiles.\n\n### Remediation\nCheck [Version compatibility](https://cloud.google.com/data-fusion/docs/concepts/configure-clusters#version-compatibility)\n\nUpgrade to the latest Cloud Data Fusion version and use one of the [supported Dataproc versions.](https://cloud.google.com/dataproc/docs/concepts/versioning/dataproc-version-clusters#supported_dataproc_versions)\n\n\n### Further information\n- [Change the Dataproc image version in Compute profile](https://cloud.google.com/data-fusion/docs/how-to/change-dataproc-image#system-compute-profiles)\n- [Dataproc cluster configuration](https://cloud.google.com/data-fusion/docs/concepts/configure-clusters)\n"
  },
  {
    "path": "website/content/en/rules/datafusion/WARN/2024_005.md",
    "content": "---\ntitle: \"datafusion/WARN/2024_005\"\nlinkTitle: \"WARN/2024_005\"\nweight: 1\ntype: docs\ndescription: >\n  Data Fusion version is compatible with Dataproc version from the preferences settings.\n---\n\n**Product**: [Cloud Data Fusion](https://cloud.google.com/data-fusion)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nThe version of your Cloud Data Fusion environment might not be compatible with\nthe version of your Dataproc cluster from the CDAP Preferences settings.Check\nimage version set in the Compute Configurations, Namespace Preferences, or\nPipeline Runtime Arguments.\n\n### Remediation\n\nCheck [Version Compatibility](https://cloud.google.com/data-fusion/docs/concepts/configure-clusters#version-compatibility)\n\nUpgrade to the latest Cloud Data Fusion version and use one of the [supported Dataproc versions](https://cloud.google.com/dataproc/docs/concepts/versioning/dataproc-version-clusters#supported_dataproc_versions)\n\n### Further information\n- [CDAP Preferences](https://cdap.atlassian.net/wiki/x/CgDFRw)\n- [Change the Dataproc image version in Cloud Data Fusion](https://cloud.google.com/data-fusion/docs/how-to/change-dataproc-image)\n"
  },
  {
    "path": "website/content/en/rules/datafusion/_index.md",
    "content": "---\ntitle: \"DATAFUSION\"\nlinkTitle: \"datafusion\"\ntype: docs\ndescription: \"Cloud Data Fusion\"\n---\n"
  },
  {
    "path": "website/content/en/rules/dataproc/BP/2021_001.md",
    "content": "---\ntitle: 'dataproc/BP/2021_001'\nlinkTitle: 'BP/2021_001'\nweight: 1\ntype: docs\ndescription: >\n  Stackdriver Logging is enabled in the cluster\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nEnabling stackdriver logging for your dataproc cluster impacts the ability to troubleshoot any issues that you might have.\n\nIf you are a Google Cloud Support customer, keeping system logging and monitoring enabled is important even if you have your own monitoring solution, because otherwise the support team won’t have access to logs and monitoring data used for troubleshooting. This is the more relevant when creating ephemeral clusters.\n\n### Remediation\n\ndataproc.logging.stackdriver.enable is enabled by default when a cluster is created. If you disabled this during cluster creation by setting the above property to false, please create create a new clsuter without this property.\n\n\n### Further information\n\n- [Dataproc job logs in Logging](https://cloud.google.com/dataproc/docs/guides/logging#job_logs_in)\n"
  },
  {
    "path": "website/content/en/rules/dataproc/BP/2022_001.md",
    "content": "---\ntitle: \"dataproc/BP/2022_001\"\nlinkTitle: \"BP/2022_001\"\nweight: 1\ntype: docs\ndescription: >\n  Cloud Monitoring agent is enabled.\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Rule class**: BP - Best practice, opinionated recommendation\n\n### Description\n\nMemory and disk usage metrics are often useful when troubleshooting,\nhowever, the Cloud Monitoring agent is not enabled by default when a cluster is created.\n\n### Remediation\nEnable [dataproc.monitoring.stackdriver.enable](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/cluster-properties) during cluter creation.\n\n### Further information\n- [Cloud Monitoring cluster metrics](https://cloud.google.com/dataproc/docs/guides/monitoring)\n"
  },
  {
    "path": "website/content/en/rules/dataproc/BP/2022_098.md",
    "content": "---\ntitle: \"dataproc/BP/2022_098\"\nlinkTitle: \"BP/2022_098\"\nweight: 1\ntype: docs\ndescription: >\n  Another dummy async rule\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Rule class**: BP - Best practice, opinionated recommendation\n\n### Description\n\nAnother dummy async rule\n\n### Remediation\n\n### Further information\n"
  },
  {
    "path": "website/content/en/rules/dataproc/BP/2022_099.md",
    "content": "---\ntitle: \"dataproc/BP/2022_099\"\nlinkTitle: \"BP/2022_099\"\nweight: 1\ntype: docs\ndescription: >\n  Dummy async rule\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Rule class**: BP - Best practice, opinionated recommendation\n\n### Description\n\nDummy async rule\n\n### Remediation\n\n### Further information\n"
  },
  {
    "path": "website/content/en/rules/dataproc/ERR/2022_002.md",
    "content": "---\ntitle: \"dataproc/ERR/2022_002\"\nlinkTitle: \"ERR/2022_002\"\nweight: 1\ntype: docs\ndescription: >\n  Dataproc is not using deprecated images\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nIt is better to avoid using deprecated dataproc images.\nThis is not supported and could cause a wide range of problems.\n\n### Remediation\n\nIf possible, recreate Dataproc clusters with the latest image versions.\n\n### Further information\n\n- [Dataproc Image version list](https://cloud.google.com/dataproc/docs/concepts/versioning/dataproc-versions)\n"
  },
  {
    "path": "website/content/en/rules/dataproc/ERR/2022_003.md",
    "content": "---\ntitle: \"dataproc/ERR/2022_003\"\nlinkTitle: \"ERR/2022_003\"\nweight: 1\ntype: docs\ndescription: >\n  Dataproc Service Account permissions\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nVerify that the Dataproc Service Account exists and has the Dataproc Service\nAgent role on the project.\n\n### Remediation\n\nAdd the [Dataproc Service\nAgent](https://cloud.google.com/iam/docs/understanding-roles#dataproc.serviceAgent)\nrole to the Dataproc Service Agent service account (service-[project-number]@dataproc-accounts.iam.gserviceaccount.com)\nor to the Google APIs service agent account ([project-number]@cloudservices.gserviceaccount.com) for control plane operations.\n\n### Further information\n\n- [Dataproc service accounts](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/service-accounts.md#dataproc_service_accounts_2)\n"
  },
  {
    "path": "website/content/en/rules/dataproc/ERR/2022_004.md",
    "content": "---\ntitle: \"dataproc/ERR/2022_004\"\nlinkTitle: \"ERR/2022_004\"\nweight: 1\ntype: docs\ndescription: >\n  Dataproc on GCE master VM is able to communicate with worker VM\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nThe Compute Engine Virtual Machine instances (VMs) in a Dataproc cluster must be able to communicate with each other using ICMP, TCP (all ports), and UDP (all ports) protocols.\n\n### Remediation\nYou must create your own rule that meets [Dataproc connectivity requirements](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/network#dataproc_connectivity_requirements) and apply it to your cluster's VPC network.\n\n### Further information\nhttps://cloud.google.com/dataproc/docs/concepts/configuring-clusters/network\n"
  },
  {
    "path": "website/content/en/rules/dataproc/ERR/2023_001.md",
    "content": "---\ntitle: \"dataproc/ERR/2023_001\"\nlinkTitle: \"ERR/2023_001\"\nweight: 1\ntype: docs\ndescription: >\n  Dataproc cluster initialization  completed by the end of the timeout period.\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\nDataproc cluster initialization action executable or script should be completed\nwithin the timeout value. If the initialization script has not completed,\ndataproc cancels the initialization action and fails with \"Initialization action timed out\" error.\nThe default timeout value is 10 minutes.\n\n### Remediation\n- You can check the output logs of the initialization script for more details. You can find the initialization script output file location\nfrom the log error message ( log query given below).\nThe output file location pattern will be like  'gs://\n<staging-bucket-path>/google-cloud-dataproc-metainfo/<cluster-uuid>/<cluster-node-name>/dataproc-initialization-script-0_output'.\n\n  Log query example :\n\n  resource.type=\"cloud_dataproc_cluster\" \\\n  resource.labels.cluster_name=\"<dataproc-cluster-name>\" \\\n  \"Initialization action timed out\" \\\n  logName: \"projects/<project-name>/logs/google.dataproc.agent\"\n\n\n- You can specify initialization timeout with --initialization-action-timeout flag to change timeout period if required.\n\n### Further information\n[Initialization action timeout](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/init-actions#using_initialization_actions)\n"
  },
  {
    "path": "website/content/en/rules/dataproc/ERR/2023_002.md",
    "content": "---\ntitle: \"dataproc/ERR/2023_002\"\nlinkTitle: \"ERR/2023_002\"\nweight: 1\ntype: docs\ndescription: >\n  Checking if any orphaned YARN application has been killed by dataproc agent in the cluster.\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\nDataproc considers a yarn app to be orphaned if the job driver that submitted the\nyarn app has exited.\nBy default, dataproc:dataproc.yarn.orphaned-app-termination.enable is set to True,\nwhich means Dataproc agent is enabled to kill the orphaned yarn app.\n\n### Remediation\n- You can see the log from dataproc agent if the yarn app became orphaned and\nkilled by dataproc agent.\n\n  Log query example :\n\n  resource.type=\"cloud_dataproc_cluster\" \\\n  resource.labels.cluster_uuid=\"<Datproc_cluster_uuid>\" \\\n  \"<YARN_app_id>\" \\\n  logName: \"projects/<project-name>/logs/google.dataproc.agent\"\n\n- If you use Spark cluster mode (spark.submit.deployMode=cluster) with\nspark.yarn.submit.waitAppCompletion=false, then you should also set\ndataproc:dataproc.yarn.orphaned-app-termination.enable=false\n"
  },
  {
    "path": "website/content/en/rules/dataproc/ERR/2023_003.md",
    "content": "---\ntitle: \"dataproc/ERR/2023_003\"\nlinkTitle: \"ERR/2023_003\"\nweight: 1\ntype: docs\ndescription: >\n  Dataproc cluster check IAM permission to launch cluster\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\nDataproc cluster launch requires set of permissions to be enabled for the service account\nthat is used to create the cluster. If the required set of permissions are not\navailable, the cluster launch operation fails with\n\"Required <permission> permission for <resource>\"\n\n### Remediation\n- You can check the output logs to check on the error. If you want to provide the permission\nyo can navigate to cloud IAM console and provide the permissions.\n\n  Log query example :\n\n  resource.type=\"cloud_dataproc_cluster\" \\\n  resource.labels.cluster_name=\"<dataproc-cluster-name>\" \\\n  \"Required <permission> permission for <resource>\" \\\n  logName: \"projects/<project-name>/logs/google.dataproc.agent\"\n\n\n### Further information\n[DataProc IAM permissions](https://cloud.google.com/dataproc/docs/concepts/iam/iam)\n"
  },
  {
    "path": "website/content/en/rules/dataproc/ERR/2023_004.md",
    "content": "\n---\ntitle: \"dataproc/ERR/2023_004\"\nlinkTitle: \"ERR/2023_004\"\nweight: 1\ntype: docs\ndescription: >\n  Dataproc cluster firewall rules for connectivity between master and worker nodes established!\n---\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n### Description\nThe master node needs to communicate with the worker nodes during cluster\ncreation. Sometimes VM to VM communications are blocked by firewall rules.\n### Remediation\n- You can see the log from dataproc agent if the yarn app became orphaned and\nkilled by dataproc agent.\n  Log query example :\n  resource.type=\"cloud_dataproc_cluster\" \\\n  resource.labels.cluster_uuid=\"<Datproc_cluster_uuid>\" \\\n  \"<YARN_app_id>\" \\\n  logName: \"projects/<project-name>/logs/google.dataproc.agent\"\n- Check for firewall rule warnings.\nMake sure that the user has the correct firewall rule in place. Refer to the public documentation for the correct [Dataproc Cluster Network Configuration](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/network#overview).\nTo see what is blocking the master node from communicating with the worker nodes, a connectivity test can be performed by using the [Ad Hoc Connectivity Test](https://cloud.google.com/dataproc/docs/troubleshooting#cluster_creation_error_messages) found under \"Network Intelligence\" in your GCP console.\n"
  },
  {
    "path": "website/content/en/rules/dataproc/ERR/2023_005.md",
    "content": "---\ntitle: \"dataproc/ERR/2023_005\"\nlinkTitle: \"ERR/2023_005\"\nweight: 1\ntype: docs\ndescription: >\n  Dataproc cluster has sufficient quota\n---\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n### Description\nWhen creating a Dataproc cluster, your project must have available quotas for\nthe resources you request, such as CPU, disk, and IP addresses. If your request\nexceeds your project's quotas, the cluster creation will fail.\n\n### Remediation\n- You can search the logs to check on the quota error.\n\n  Log query example :\n\n  severity=ERROR\n  protoPayload.status.message=~\"Insufficient\"\n  resource.type=\"cloud_dataproc_cluster\"\n\n- You can raise a request to [increase quota limit](https://cloud.google.com/docs/quota)\n\n\n### Further information\n[Quota Exceeded errors](https://cloud.google.com/dataproc/docs/troubleshooting#cluster_creation_error_messages)\n"
  },
  {
    "path": "website/content/en/rules/dataproc/ERR/2023_006.md",
    "content": "---\ntitle: \"dataproc/ERR/2023_006\"\nlinkTitle: \"ERR/2023_006\"\nweight: 1\ntype: docs\ndescription: >\n  Dataproc cluster check permissions on shared Host VPC Project\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\nDataproc cluster launched on a shared VPC requires permission on the Host Subnet\nthat is used to create the cluster. If the required set of permissions are not\navailable, the cluster launch operation fails.\nThe permission is to be set for DataProc service agent from service project.\n\n### Remediation\n- You can check the permissions on Host Project where the Shared VPC exists.\nThe permissions need to be set for DataProc service agent from project where\ncluster is launched.\n\n  Permissions Required : Computer Network User, Compute Network Viewer\n\n\n### Further information\n[DataProc cluster in shared VPC](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/network#create_a_cluster_that_uses_a_network_in_another_project)\n"
  },
  {
    "path": "website/content/en/rules/dataproc/ERR/2023_007.md",
    "content": "---\ntitle: \"dataproc/ERR/2023_007\"\nlinkTitle: \"ERR/2023_007\"\nweight: 1\ntype: docs\ndescription: >\n  Region has sufficient resources for user to create a cluster\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\nUser is attempting to create a dataproc cluster in a region or zone that doesn't have enough/required resources to successfully provision and create the cluster.\n\nResources can include :\n- Certain machine types (compute optimized, memory optimised, GPUs)\n- Multiple very large persistent disks capacity of same disk type\n\n\n### Remediation\n\n- Try a different zone or region: If you are experiencing a zonal stockout, try deploying your workload to a different zone in the same region. If you are experiencing a regional stockout, try deploying your workload to a different region.\n\n- Try retrying your request in a while. This can be anywhere from 15 minutes to an hour, but it depends on the resources, region, and popularity.\n\n- Contact support: If you are unable to resolve the stockout on your own or a specific zone is needed, you can contact Google Cloud support for assistance.\n\n\n\n### Further information\n\n- We recommend to use [autozone](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/auto-zone)  for resource provisioning and reservation\n\n- We recommend also to explore [partial clusters](https://cloud.google.com/dataproc/docs/guides/create-partial-cluster) for increasing availability\n\n\n- An all inclusive guide on  [Managing Capacity, Quota, and Stockouts in the Cloud](https://www.googlecloudcommunity.com/gc/Community-Blogs/Managing-Capacity-Quota-and-Stockouts-in-the-Cloud-Concepts-and/ba-p/464770#:~:text=Stockouts%20can%20happen%20when%20there's,resources%20are%20not%20currently%20available.)\n"
  },
  {
    "path": "website/content/en/rules/dataproc/ERR/2023_008.md",
    "content": "---\ntitle: \"dataproc/ERR/2023_008\"\nlinkTitle: \"ERR/2023_008\"\nweight: 1\ntype: docs\ndescription: >\n  Disk space of YARN NodeManagers is okay.\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nYARN ResourceManager has reported UNHEALTHY YARN NodeManagers due to exceeding the maximum percentage of disk space utilization allowed.\n\n### Remediation\n- The user cache is stored in the directory specified by the `yarn.nodemanager.local-dirs` property in the `yarn-site.xml` file. This file is located at `/etc/hadoop/conf/yarn-site.xml`. You can check the free space in the `/hadoop/yarn/nm-local-dir` path, and free up space by deleting the `/hadoop/yarn/nm-local-dir/usercache` user cache folder.\n- Recreate your cluster with larger disk space, which will increase the [throughput cap](https://cloud.google.com/dataproc/docs/support/spark-job-tuning#optimize_disk_size).\n\n### Further information\n- Check the following documentation to address the issue:\nhttps://cloud.google.com/dataproc/docs/support/spark-job-tuning#yarn_nodes_are_unhealthy.\n- YARN properties: [yarn-default.xml](https://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-common/yarn-default.xml).\n"
  },
  {
    "path": "website/content/en/rules/dataproc/WARN/2021_001.md",
    "content": "---\ntitle: \"dataproc/WARN/2021_001\"\nlinkTitle: \"WARN/2021_001\"\nweight: 1\ntype: docs\ndescription: >\n  Dataproc cluster is in RUNNING state\n---\n\n**Product**: [Dataproc](https://cloud.google.com/dataproc)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nCluster should normally spend most of the time in RUNNING state.\n\n### Remediation\n\n### Further information\n\n- [The cluster state](https://cloud.google.com/dataproc/docs/reference/rest/v1/projects.regions.clusters#state)\n"
  },
  {
    "path": "website/content/en/rules/dataproc/WARN/2022_001.md",
    "content": "---\ntitle: \"dataproc/WARN/2022_001\"\nlinkTitle: \"WARN/2022_001\"\nweight: 1\ntype: docs\ndescription: >\n  Dataproc clusters are not failed to stop due to the local SSDs\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nYou cannot stop clusters with local SSDs attached since it triggers shutdown to\nthe VM. However, if you do shut down a VM using local SSDs, then you can't\nstart the VM again later, and the data on the local SSD is lost.\n\n### Remediation\n\nMake sure that you migrate your critical data from the local SSD to a\npersistent disk or to another VM before stopping the Dataproc clusters.\n\n### Further information\n\n- [Starting and stopping clusters](https://cloud.google.com/dataproc/docs/guides/dataproc-start-stop#limitations)\n- [Stop and start a VM](https://cloud.google.com/compute/docs/instances/stop-start-instance#restrictions)\n"
  },
  {
    "path": "website/content/en/rules/dataproc/WARN/2022_002.md",
    "content": "---\ntitle: \"dataproc/WARN/2022_002\"\nlinkTitle: \"WARN/2022_002\"\nweight: 1\ntype: docs\ndescription: >\n  Job rate limit was not exceeded\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n\n### Description\n\nIf the Dataproc agent reach the job submission rate limit, Dataproc job\nscheduling delays can be observed.\n\n\n### Remediation\n\nBy default, the Dataproc agent job submission is limited at 1.0 QPS,\nwhich you can set to a different value when you create a cluster with the\ndataproc:dataproc.scheduler.job-submission-rate cluster property.\n\n\n### Further information\n- [Troubleshoot job delays](https://cloud.google.com/dataproc/docs/concepts/jobs/troubleshoot-job-delays)\n"
  },
  {
    "path": "website/content/en/rules/dataproc/WARN/2022_003.md",
    "content": "---\ntitle: \"dataproc/WARN/2022_001\"\nlinkTitle: \"WARN/2022_001\"\nweight: 1\ntype: docs\ndescription: >\n  Dataproc VM Service Account has necessary permissions\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nVM Service Account should have required permissions to function correctly.\nThough required permission may be granted via user-managed role or primitive\nroles, it is recommended to grant roles/dataproc.worker on project level.\n\n### Remediation\n\nGrant roles/dataproc.worker to VM Service Account\n\n### Further information\n\n- [Dataproc service accounts](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/service-accounts#dataproc_service_accounts_2)\n- [Dataproc VM Service Account](https://cloud.google.com/dataproc/docs/concepts/iam/dataproc-principals#vm_service_account_data_plane_identity)\n- [Dataproc Roles](https://cloud.google.com/dataproc/docs/concepts/iam/iam#roles)\n"
  },
  {
    "path": "website/content/en/rules/dataproc/WARN/2022_004.md",
    "content": "---\ntitle: \"dataproc/WARN/2022_004\"\nlinkTitle: \"WARN/2022_004\"\nweight: 1\ntype: docs\ndescription: >\n  Dataproc cluster is in RUNNING state\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nCluster should normally spend most of the time in RUNNING state.\n\n### Remediation\n\n### Further information\n\n- [The cluster state](https://cloud.google.com/dataproc/docs/reference/rest/v1/projects.regions.clusters#state)\n"
  },
  {
    "path": "website/content/en/rules/dataproc/WARN/2023_001.md",
    "content": "---\ntitle: \"dataproc/WARN/2023_001\"\nlinkTitle: \"WARN/2023_001\"\nweight: 1\ntype: docs\ndescription: >\n  Concurrent Job limit was not exceeded\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\nIf the Dataproc agent reach the concurrent job submission limit, Dataproc job scheduling delays can be observed.\n\n### Remediation\nThe maximum number of concurrent jobs based on master VM memory is exceeded (the job driver runs on the Dataproc cluster master VM). By default, Dataproc reserves 3.5GB of memory for applications, and allows 1 job per GB.Set the dataproc:dataproc.scheduler.max-concurrent-jobs [cluster property](https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/cluster-properties#service_properties) to a value suited to your job requirements\n\n### Further information\n[Troubleshoot job delays](https://cloud.google.com/dataproc/docs/concepts/jobs/troubleshoot-job-delays)\n"
  },
  {
    "path": "website/content/en/rules/dataproc/WARN/2023_002.md",
    "content": "---\ntitle: \"dataproc/WARN/2023_002\"\nlinkTitle: \"WARN/2023_002\"\nweight: 1\ntype: docs\ndescription: >\n  Master Node High System Memory Usage\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nBy default, the Dataproc agent throttles job submission when memory use reaches 90% (0.9). When this limit is reached, new jobs cannot be scheduled.\nThe amount of free memory needed to schedule another job on the cluster is not sufficient.\n\n### Remediation\n\nWhen you create a cluster Increase the value of the dataproc:dataproc.scheduler.max-memory-used cluster property. For example, set it above the 0.90 default to 0.95. Setting the value to 1.0 disables master-memory-utilization job throttling.\n\n### Further information\n\n[Troubleshoot job delays](https://cloud.google.com/dataproc/docs/concepts/jobs/troubleshoot-job-delays)\n"
  },
  {
    "path": "website/content/en/rules/dataproc/WARN/2024_001.md",
    "content": "---\ntitle: \"dataproc/WARN/2024_001\"\nlinkTitle: \"WARN/2024_001\"\nweight: 1\ntype: docs\ndescription: >\n  HDFS NameNode Safemode is disabled.\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nWhen HDFS NameNode [Safemode](https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HdfsUserGuide.html#Safemode) is enabled,\nthe HDFS filesystem is in read-only mode and no changes are allowed.\n\nThe NameNode enters the Safemode due to different reasons:\n- The DataNode(s) did not send the block report to the NameNode.\n- Not enough space in the NameNode directory specified in `dfs.namenode.resource.du.reserved`.\n- Not enough memory in the NameNode to load the FsImage and EditLog.\n- Unavailable HDFS blocks due to Datanode(s) down.\n- Corrupted HDFS blocks.\n- A user manually enabled the Safemode.\n\n\n### Remediation\nCheck the current Safemode status, use the following command from the Master node:\n`hdfs dfsadmin -safemode get`.\n\nIf Safemode is OFF, HDFS is working as expected.\n\nIf Safemode is ON:\n- Inspect the NameNode logs to understand the cause.\n- Check the HDFS filesystem status by running the following command from the Master node: `hdfs fsck /`.\n- Check HDFS related metrics such as `dataproc.googleapis.com/cluster/hdfs/unhealthy_blocks` and `dataproc.googleapis.com/cluster/hdfs/storage_utilization`.\n\nAfter the cause has been identified and fixed, i.e. the NameNode and all the HDFS DataNodes and blocks are healthy (`hdfs dfsadmin -report`), leave the Safemode using the following command: `hdfs dfsadmin -safemode leave`.\n"
  },
  {
    "path": "website/content/en/rules/dataproc/WARN/2024_002.md",
    "content": "---\ntitle: \"dataproc/WARN/2024_002\"\nlinkTitle: \"WARN/2024_002\"\nweight: 1\ntype: docs\ndescription: >\n  HDFS can write file(s) to DataNode(s).\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nHDFS had issues writing file(s) to DataNode(s). The HDFS NameNode logs show the following message:\n```\njava.io.IOException: File [...] could only be [written/replicated] to x nodes instead of minReplication (=n). There are y datanode(s) running and z node(s) are excluded in this operation.\n```\n\nThis can be caused by different reasons:\n- The HDFS filesystem has no available space.\n\n- The DataNodes may be unavailable or there is no communication between NameNode and Datanode(s).\n\n- The reserved space for non-DFS use is not sufficient (`dfs.datanode.du.reserved`).\n\n\n### Remediation\n\n- Check the [HDFS remaining capacity](https://cloud.google.com/dataproc/docs/guides/dataproc-metrics#hdfs_metrics): dfs/FSNamesystem/CapacityRemainingGB.\n  - If low, free up some HDFS space or add primary worker nodes to the cluster.\n\n- Check the status of NameNode and DataNodes services and the related logs.\n  - Address the issue based on the findings, e.g. network related issues related to the communication between NameNode and Datanodes.\n"
  },
  {
    "path": "website/content/en/rules/dataproc/_index.md",
    "content": "---\ntitle: \"DATAPROC\"\nlinkTitle: \"dataproc\"\ntype: docs\ndescription: \"Dataproc\"\n---\n"
  },
  {
    "path": "website/content/en/rules/gae/ERR/2023_001.md",
    "content": "---\ntitle: \"gae/ERR/2023_001\"\nlinkTitle: \"ERR/2023_001\"\nweight: 1\ntype: docs\ndescription: >\n  App Engine: VPC Connector creation failure due to Org Policy\n---\n\n**Product**: [App Engine](https://cloud.google.com/appengine)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nOrganizational policy is preventing the creation of a Serverless VPC Access Connector.\n\n### Remediation\n\n### Further information\n"
  },
  {
    "path": "website/content/en/rules/gae/ERR/2023_002.md",
    "content": "---\ntitle: \"gae/ERR/2023_001\"\nlinkTitle: \"ERR/2023_001\"\nweight: 1\ntype: docs\ndescription: >\n  App Engine: VPC Connector creation due to subnet overlap\n---\n\n**Product**: [App Engine](https://cloud.google.com/appengine)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nWhen creating a VPC connector it fails to create a subnet overlapping with\nthe auto subnet networks in the range 10.128.0.0/9\n\n### Remediation\n\n### Further information\n"
  },
  {
    "path": "website/content/en/rules/gae/ERR/2025_001.md",
    "content": "---\ntitle: \"gae/ERR/2025_001\"\nlinkTitle: \"ERR/2025_001\"\nweight: 1\ntype: docs\ndescription: >\n  App Engine default service account is deleted\n---\n\n**Product**: [App Engine](https://cloud.google.com/appengine)\\\n**Rule class**: GAE application deployment potentially fail if default service account has been deleted\n\n### Description\n\nApp Engine default service account (@appspot.gserviceaccount.com) by default is used\nfor GAE applications deployment when user-defined service account is not declared\n\nIf it's recently deleted, recover the SA otherwise use user-defined service account\n\nSample logging query to find deleted GAE default service account:\n```\nprotoPayload.methodName=\"google.iam.admin.v1.DeleteServiceAccount\"\nresource.labels.email_id=\"[PROJECT_ID]@appspot.gserviceaccount.com\"\nresource.type=\"service_account\"\n```\n\n### Remediation\n\nThe App Engine default service account was recently deleted (within 30 days). Please follow the steps at https://cloud.google.com/iam/docs/service-accounts-delete-undelete#undeleting to recover it\n\nOtherwise, please use user-defined service account https://cloud.google.com/appengine/docs/legacy/standard/python/user-managed-service-accounts\n\n\n### Further information\n\n- [App Engine Standard default Service Account](https://cloud.google.com/appengine/docs/legacy/standard/python/service-account)\n- [App Engine Flexible default Service Account](https://cloud.google.com/appengine/docs/flexible/configure-service-accounts#assign_an_app-level_default_service_account)\n"
  },
  {
    "path": "website/content/en/rules/gae/WARN/2022_001.md",
    "content": "---\ntitle: \"gae/WARN/2022_001\"\nlinkTitle: \"WARN/2022_001\"\nweight: 1\ntype: docs\ndescription: >\n  App Engine Standard versions don't use deprecated runtimes.\n---\n\n**Product**: [App Engine](https://cloud.google.com/appengine)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nThe following runtimes are deprecated: 'go16', 'go18', 'go19', 'java7', 'php'.\n\n### Remediation\n\n### Further information\n"
  },
  {
    "path": "website/content/en/rules/gae/WARN/2022_002.md",
    "content": "---\ntitle: \"gae/WARN/2022_002\"\nlinkTitle: \"WARN/2022_002\"\nweight: 1\ntype: docs\ndescription: >\n  App Engine Flexible versions don't use deprecated runtimes.\n---\n\n**Product**: [App Engine](https://cloud.google.com/appengine)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nThe following runtimes are deprecated: 'go16', 'go18', 'python27'.\n\n### Remediation\n\n### Further information\n"
  },
  {
    "path": "website/content/en/rules/gae/_index.md",
    "content": "---\ntitle: \"GAE\"\nlinkTitle: \"gae\"\ntype: docs\ndescription: \"Google App Engine\"\n---\n"
  },
  {
    "path": "website/content/en/rules/gcb/ERR/2022_001.md",
    "content": "---\ntitle: \"gcb/ERR/2022_001\"\nlinkTitle: \"ERR/2022_001\"\nweight: 1\ntype: docs\ndescription: >\n  Cloud Build service account has the cloudbuild.builds.editor role.\n---\n\n**Product**: [Cloud Build](https://cloud.google.com/build)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nThe Cloud Build service account is missing the cloudbuild.builds.create IAM permission,\nwhich is required for the service account to run a build trigger.\nYou can resolve this error by granting the Cloud Build Service Account IAM role\nto [PROJECT_NUMBER]@cloudbuild.gserviceaccount.com.\n\n### Remediation\n\n### Further information\n\n[Default permissions of Cloud Build service account](https://cloud.google.com/build/docs/cloud-build-service-account#default_permissions_of_service_account)\n"
  },
  {
    "path": "website/content/en/rules/gcb/ERR/2022_002.md",
    "content": "---\ntitle: \"gcb/ERR/2022_002\"\nlinkTitle: \"ERR/2022_002\"\nweight: 1\ntype: docs\ndescription: >\n  Builds don't fail because its service account did not have registry permissions.\n---\n\n**Product**: [Cloud Build](https://cloud.google.com/build)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nBuilds configured to upload image to Artifact Registry must use service account  that has write\npermission for it.\n\n### Remediation\n\nYou can resolve this error by granting IAM role\nto the used service account. If you did not specify service account for this\nbuild, then it used default one: [PROJECT_NUMBER]@cloudbuild.gserviceaccount.com.\n\n### Further information\n"
  },
  {
    "path": "website/content/en/rules/gcb/ERR/2022_003.md",
    "content": "---\ntitle: \"gcb/ERR/2022_003\"\nlinkTitle: \"ERR/2022_003\"\nweight: 1\ntype: docs\ndescription: >\n  Builds don't fail because of retention policy set on logs bucket.\n---\n\n**Product**: [Cloud Build](https://cloud.google.com/build)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nBuilds that upload logs to bucket with retention policy must do that once build is finished instead\nof streaming them.\n\n### Remediation\n\nYou can resolve this error by\nremoving this retention policy on the bucket, or setting following build\noptions: \"logging: GCS_ONLY\" and \"logStreamingOption: STREAM_OFF\".\n\n### Further information\n\n- https://cloud.google.com/build/docs/api/reference/rest/v1/projects.builds#logstreamingoption\n- https://cloud.google.com/build/docs/api/reference/rest/v1/projects.builds#loggingmode\n- https://cloud.google.com/storage/docs/bucket-lock#retention-policy\n"
  },
  {
    "path": "website/content/en/rules/gcb/ERR/2022_004.md",
    "content": "---\ntitle: \"gcb/ERR/2022_004\"\nlinkTitle: \"ERR/2022_004\"\nweight: 1\ntype: docs\ndescription: >\n  Cloud Build Service Agent has the cloudbuild.serviceAgent role.\n---\n\n**Product**: [Cloud Build](https://cloud.google.com/build)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nThe Cloud Build service account is missing the cloudbuild.builds.builder role,\nwhich gives Cloud Build service account access to managed resources.\nYou can resolve this error by granting the Cloud Build Service Agent (roles/cloudbuild.serviceAgent) IAM role\nto service-[PROJECT_NUMBER]@gcp-sa-cloudbuild.iam.gserviceaccount.com.\n\n### Remediation\n\n### Further information\n\n- https://cloud.google.com/iam/docs/service-agents#:~:text=None-,Cloud%20Build%20Service%20Agent,-cloudbuild.gserviceaccount\n"
  },
  {
    "path": "website/content/en/rules/gcb/_index.md",
    "content": "---\ntitle: \"GCB\"\nlinkTitle: \"gcb\"\ntype: docs\ndescription: \"Cloud Build\"\n---\n"
  },
  {
    "path": "website/content/en/rules/gce/BP/2021_001.md",
    "content": "---\ntitle: \"gce/BP/2021_001\"\nlinkTitle: \"BP/2021_001\"\nweight: 1\ntype: docs\ndescription: >\n  Serial port logging is enabled.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Rule class**: Best practices\n\n### Description\n\nIf this rule failed, it means that some instances have serial output logging\ndisabled, and it is recommended that you enable it.\n\nSerial port output can be often useful for troubleshooting, and enabling serial\nlogging makes sure that you don't lose the information when the VM is restarted.\nAdditionally, serial port logs are timestamped, which is useful to determine\nwhen a particular serial output line was printed.\n\ngcpdiag makes uses of the serial output logs to detect some common issues in\nGCE, which won't work if serial output logging is disabled.\n\n### Remediation\n\nSee *Viewing serial port output* link below for instructions on how to enable\nserial output logging for GCE instances.\n\n### Further information\n\n- [Viewing serial port output](https://cloud.google.com/compute/docs/instances/viewing-serial-port-output)\n"
  },
  {
    "path": "website/content/en/rules/gce/BP/2022_003.md",
    "content": "---\ntitle: \"gce/BP/2022_003\"\nlinkTitle: \"BP/2022_003\"\nweight: 1\ntype: docs\ndescription: >\n  GCE unattached bootable disk.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Rule class**: BP - Something that is possibly wrong\n\n### Description\n\nUnattached bootable disks are abandoned or orphaned resources that are detached\nfrom a instance or service.\n\nYou might want to delete abandoned and unused bootable disks and lowers your overall costs.\n\n### Remediation\n\nFind an unattached disk:\n\n```\ngcloud compute disks list --filter=\"-users:*\"\n```\n\nDelete unattached disk:\n\n```\ngcloud compute disks delete <DISK_NAME> --zone=<ZONE>\n```\n\n### Further information\n\n- [Detaching and reattaching boot disks](https://cloud.google.com/compute/docs/disks/detach-reattach-boot-disk)\n- [List Google Compute Engine disks](https://cloud.google.com/sdk/gcloud/reference/compute/disks/list)\n- [Delete a Compute Engine disk](https://cloud.google.com/sdk/gcloud/reference/compute/disks/delete)\n"
  },
  {
    "path": "website/content/en/rules/gce/BP/2023_001.md",
    "content": "---\ntitle: \"gce/BP/2023_001\"\nlinkTitle: \"BP/2023_001\"\nweight: 1\ntype: docs\ndescription: >\n  Instance time source is configured with Google NTP server\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Rule class**: BP - Best practice, opinionated recommendation\n\n### Description\n\nGoogle recommends Compute Engine instances to be configured with\nGoogle NTP servers to facilitate reliable time sync. Google can't predict how\nexternal NTP services behave. If at all possible, it is recommended that you do\nnot use external NTP sources with Compute Engine virtual machines.\n\n### Remediation\n- [Configure](https://cloud.google.com/compute/docs/instances/configure-ntp#configure_ntp_for_your_instances) VM to use Google NTP Server\n\n### Further information\n- [Configure NTP Server](https://cloud.google.com/compute/docs/instances/configure-ntp) on VM\n"
  },
  {
    "path": "website/content/en/rules/gce/BP/2024_001.md",
    "content": "---\ntitle: \"gce/BP/2024_001\"\nlinkTitle: \"BP/2024_001\"\nweight: 1\ntype: docs\ndescription: >\n Verify that GCE VM Instances Don't Have Legacy Monitoring Agent Installed.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Rule class**: BP - Best practice, opinionated recommendation\n\n### Description\n\nThis rule checks that no GCE VMs in the GCP project use the [legacy Monitoring Agent](https://cloud.google.com/stackdriver/docs/solutions/agents/monitoring/installation).\n\nIt leverages two public GCP APIs for detection:\n1. The [OS Config API](https://cloud.google.com/compute/docs/osconfig/rest) (to check installed packages).\n2. The [Cloud Monitoring API](https://cloud.google.com/monitoring/api/v3) (to examine agent uptime metrics).\n\nThe rule queries the [OS Config API](https://cloud.google.com/compute/docs/osconfig/rest) first, and uses [Cloud Monitoring API](https://cloud.google.com/monitoring/api/v3) as a fallback. If the agent is detected in either location, the rule fails.\nIf neither API is enabled or both APIs return an empty result, the rule skips the VM as it cannot determine the legacy agent installation status.\n\nIt's recommended to [enable VM Manager](https://cloud.google.com/compute/docs/manage-os#automatic) which enables OS Config API automatically to guarantee the rule's ability to detect the legacy monitoring agent.\n\nWe recommend transitioning to the [Ops Agent](https://cloud.google.com/stackdriver/docs/solutions/agents/ops-agent), which consolidates logging and monitoring into a single, actively supported solution. It's designed as the eventual replacement for the [legacy Monitoring Agent](https://cloud.google.com/stackdriver/docs/solutions/agents/monitoring/installation).\n\n\n### Remediation\nTo resolve the rule violation, please [uninstall](https://cloud.google.com/stackdriver/docs/solutions/agents/monitoring/installation#uninstall) the legacy Monitoring Agent from any affected VMs.\nPlease also [install](https://cloud.google.com/stackdriver/docs/solutions/agents/ops-agent/installation#joint-install) the Ops Agent for continued monitoring.\n\n### Further information\n- [Ops Agent](https://cloud.google.com/stackdriver/docs/solutions/agents/ops-agent)\n- [Legacy Monitoring Agent](https://cloud.google.com/stackdriver/docs/solutions/agents/monitoring)\n- [VM Manager](https://cloud.google.com/compute/docs/manage-os#automatic)\n"
  },
  {
    "path": "website/content/en/rules/gce/BP/2024_002.md",
    "content": "---\ntitle: \"gce/BP/2024_002\"\nlinkTitle: \"BP/2024_002\"\nweight: 1\ntype: docs\ndescription: >\n Verify that GCE VM Instances Don't Have Legacy Logging Agent Installed.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Rule class**: BP - Best practice, opinionated recommendation\n\n### Description\n\nThis rule checks that no GCE VMs in the GCP project use the [legacy Logging Agent](https://cloud.google.com/stackdriver/docs/solutions/agents/logging/installation).\n\nIt leverages two public GCP APIs for detection:\n1. The [OS Config API](https://cloud.google.com/compute/docs/osconfig/rest) (to check installed packages).\n2. The [Cloud Monitoring API](https://cloud.google.com/monitoring/api/v3) (to examine agent uptime metrics).\n\nThe rule queries the [OS Config API](https://cloud.google.com/compute/docs/osconfig/rest) first, and uses [Cloud Monitoring API](https://cloud.google.com/monitoring/api/v3) as a fallback. If the agent is detected in either location, the rule fails.\nIf neither API is enabled or both APIs return an empty result, the rule skips the VM as it cannot determine the legacy agent installation status.\n\nIt's recommended to [enable VM Manager](https://cloud.google.com/compute/docs/manage-os#automatic) which enables OS Config API automatically to guarantee the rule's ability to detect the legacy logging agent.\n\nWe recommend transitioning to the [Ops Agent](https://cloud.google.com/stackdriver/docs/solutions/agents/ops-agent), which consolidates logging and monitoring into a single, actively supported solution. It's designed as the eventual replacement for the [legacy Logging Agent](https://cloud.google.com/stackdriver/docs/solutions/agents/logging/installation).\n\n### Remediation\nTo resolve the rule violation, please [uninstall](https://cloud.google.com/stackdriver/docs/solutions/agents/logging/installation#uninstall) the legacy Logging Agent from any affected VMs.\nPlease also [install](https://cloud.google.com/stackdriver/docs/solutions/agents/ops-agent/installation#joint-install) the Ops Agent for continued logging.\n\n### Further information\n- [Ops Agent](https://cloud.google.com/stackdriver/docs/solutions/agents/ops-agent)\n- [Legacy Logging Agent](https://cloud.google.com/stackdriver/docs/solutions/agents/logging)\n- [VM Manager](https://cloud.google.com/compute/docs/manage-os#automatic)\n"
  },
  {
    "path": "website/content/en/rules/gce/BP_EXT/2021_003.md",
    "content": "---\ntitle: \"gce/BP_EXT/2021_003\"\nlinkTitle: \"BP_EXT/2021_003\"\nweight: 1\ntype: docs\ndescription: >\n  Secure Boot is enabled\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Rule class**: BP_EXT - (Extended) Best practice, opinionated recommendation\n\n### Description\n\nGoogle recommends enabling Secure Boot if you can ensure that it doesn't\nprevent a representative test VM from booting and if it is appropriate\nfor your workload. Compute Engine does not enable Secure Boot by default\nbecause unsigned drivers and other low-level software might not be compatible.\n\n### Remediation\n\n### Further information\n\n- [Shielded VM](https://cloud.google.com/compute/shielded-vm/docs/shielded-vm)\n"
  },
  {
    "path": "website/content/en/rules/gce/BP_EXT/2022_001.md",
    "content": "---\ntitle: \"gce/BP_EXT/2022_001\"\nlinkTitle: \"BP_EXT/2022_001\"\nweight: 1\ntype: docs\ndescription: >\n  GCP project has VM Manager enabled\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Rule class**: BP_EXT - (Extended) Best practice, opinionated recommendation\n\n### Description\n\nGoogle recommends enabling VM Manager. It provides visibility on software vulnerabilities,\nmissing updates and enables to set configuration management policies\n\n### Remediation\n\n### Further information\n\n[VM Manager](https://cloud.google.com/compute/docs/vm-manager)\n"
  },
  {
    "path": "website/content/en/rules/gce/BP_EXT/2023_001.md",
    "content": "---\ntitle: \"gce/BP_EXT/2023_001\"\nlinkTitle: \"BP_EXT/2023_001\"\nweight: 1\ntype: docs\ndescription: >\n  Compute Engine scopes best practices\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Rule class**: BP_EXT - (Extended) Best practice, opinionated recommendation\n\n### Description\n\nGoogle recommends enabling a custom service account with very fine-grained permissions\nand a very restricted access scope so that you can ensure that access scopes to connect\nto or from the VM is limited and implements a security-in-depth strategy where multiple\nlayers of security are used for holistic protection.\n\n### Remediation\nPlease consider following the principle of least previlige and avoid using defaults service account for production applications. It is recommended to use a custom service account with restricted permissions that are required to your use case.\n\n### Further information\n\n[Scopes Best Practices](https://cloud.google.com/compute/docs/access/service-accounts#scopes_best_practice)\n"
  },
  {
    "path": "website/content/en/rules/gce/BP_EXT/2024_001.md",
    "content": "---\ntitle: \"gce/BP_EXT/2024_001\"\nlinkTitle: \"BP_EXT/2024_001\"\nweight: 1\ntype: docs\ndescription: >\n  Instance has a public ip address\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Rule class**: BP_EXT - (Extended) Best practice, opinionated recommendation\n\n### Description\n\nIf the Compute Engine instance does not have a public ip address, then\nthe SSH button will be disabled in the SSH in browser UI.\n\nThe SSH button in the Google Cloud Console is disabled if the instance\ndoes not have a public IP address.\n\n### Remediation\nA variety of resolutions are available (especially when assigning a external IP\nis not a option): [Internal IP\noptions](https://cloud.google.com/compute/docs/connect/ssh-internal-ip)\n\n### Further information\nDocumentation for [external\nIP](https://cloud.google.com/compute/docs/instances/connecting-advanced#sshbetweeninstances)\nis also available.\n"
  },
  {
    "path": "website/content/en/rules/gce/BP_EXT/2024_002.md",
    "content": "---\ntitle: \"gce/BP_EXT/2024_002\"\nlinkTitle: \"BP_EXT/2024_002\"\nweight: 1\ntype: docs\ndescription: >\n  Calculate GCE VM's IOPS and Throughput Limits\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Rule class**: BP_EXT - (Extended) Best practice, opinionated recommendation\n\n### Description\n\nThis lint rules provide a easy method to calculate the Instance's\ndisk IOPS and Throughput applicable limits and current usage.\n\n### Remediation\n\nTo understand a VM's storage performance, [view performance metrics](https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-performance#viewing-performance-metrics)\nfor Throughput, Operations (IOPS), I/O Size, I/O Latency, and Queue Length.\n\nDisk throughput and IOPS indicate whether the VM workload is operating as expected.\nIf throughput or IOPS is lower than the expected maximum listed in the [disk type chart](https://cloud.google.com/compute/docs/disks/performance#type_comparison), then I/O size, queue length, or I/O latency performance\nissues might be present.\n\nYou can expect I/O size to be between 4-16 KiB for workloads that require high IOPS and\nlow latency, and 256 KiB-1 MiB for workloads that involve sequential or large write sizes.\nI/O size outside of these ranges indicate disk performance issues.\n\nQueue length, also known as queue depth, is a factor of throughput and IOPS. When a disk\nperforms well, its queue length should be about the same as the queue length recommended\nto achieve a particular throughput or IOPS level, listed in the [Recommended I/O queue depth](https://cloud.google.com/compute/docs/disks/optimizing-pd-performance#io-queue-depth) chart.\n\nI/O latency is dependent on queue length and I/O size. If the queue length or I/O size for\na disk is high, the latency will also be high.\n\nIf any storage performance metrics indicate disk performance issues, do one or more of the following:\n\n- Review [Optimizing Persistent Disk performance](https://cloud.google.com/compute/docs/disks/optimizing-pd-performance) or [Optimize Hyperdisk performance](https://cloud.google.com/compute/docs/disks/optimize-hyperdisk)\nand implement the best practices suggested to improve performance.\n- [Attach a new persistent disk to the VM](https://cloud.google.com/compute/docs/disks/add-persistent-disk) or [Add Hyperdisk storage to a VM](https://cloud.google.com/compute/docs/disks/add-hyperdisk) to increase the disk performance\nlimits. Disk performance is based on the total amount of storage attached to an instance.\nThis option is the least disruptive as it does not require a you to unmount the file system,\nrestart, or shutdown the instance.\n- Modify the [Hyperdisk](https://cloud.google.com/compute/docs/disks/modify-hyperdisks) to increase the per-disk IOPS and throughput limits. For Persistent Disk, you must [increase the size of the disk](https://cloud.google.com/compute/docs/disks/resize-persistent-disk) to increase the per-disk IOPS and throughput limits. Disks don't have any reserved, unusable capacity,\nso you can use the full disk without performance degradation.\n- [Change the disk type](https://cloud.google.com/compute/docs/disks/modify-persistent-disk#disk_type) to a disk type that offers higher performance.\n\n### Further information\n\n- [Review Persistent Disk performance metrics](https://cloud.google.com/compute/docs/disks/review-disk-metrics)\n- [Configure disks to meet performance requirements](https://cloud.google.com/compute/docs/disks/performance)\n- [Troubleshooting compute instance performance issues](https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-performance)\n- [Benchmarking persistent disk performance on a Linux VM](https://cloud.google.com/compute/docs/disks/benchmarking-pd-performance-linux)\n"
  },
  {
    "path": "website/content/en/rules/gce/ERR/2021_001.md",
    "content": "---\ntitle: \"gce/ERR/2021_001\"\nlinkTitle: \"ERR/2021_001\"\nweight: 1\ntype: docs\ndescription: >\n  Managed instance groups are not reporting scaleup failures.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nThe managed instance group autoscaler will report via Cloud Logging any scale up\nfailures, and the logs can help you determine why a scale up didn't succeed.\n\n### Remediation\n\nYou can use the following Cloud Logging query to find matching log entries:\n\n```\nresource.type=\"gce_instance\"\nlog_id(cloudaudit.googleapis.com/activity)\nseverity=ERROR\nprotoPayload.methodName=\"v1.compute.instances.insert\"\nprotoPayload.requestMetadata.callerSuppliedUserAgent=\"GCE Managed Instance Group\"\n```\n\n### Further information\n\n- [Autoscaling groups of instances](https://cloud.google.com/compute/docs/autoscaler)\n"
  },
  {
    "path": "website/content/en/rules/gce/ERR/2021_002.md",
    "content": "---\ntitle: \"gce/ERR/2021_002\"\nlinkTitle: \"ERR/2021_002\"\nweight: 1\ntype: docs\ndescription: >\n  OS Config service account has the required permissions.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nThe OS Config service account must have the osconfig.serviceAgent role.\n\n### Remediation\n\nMake sure that you have the following role binding in the IAM policy:\n\n- Principal: `serviceAccount:service-PROJECTNR@gcp-sa-osconfig.iam.gserviceaccount.com`\n- Role: `roles/osconfig.serviceAgent`\n\n### Further information\n\n- [OS configuration\n  management](https://cloud.google.com/compute/docs/os-config-management)\n"
  },
  {
    "path": "website/content/en/rules/gce/ERR/2021_003.md",
    "content": "---\ntitle: \"gce/ERR/2021_003\"\nlinkTitle: \"ERR/2021_003\"\nweight: 1\ntype: docs\ndescription: >\n  Google APIs service agent has the Editor role.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nThe Google API service agent\nruns internal Google processes on your behalf. It is automatically granted the\nEditor role on the project.\n\n### Remediation\n\nMake sure that you have the following role binding in the IAM policy:\n\n- Principal: `serviceAccount:PROJECTNR@cloudservices.gserviceaccount.com`\n- Role: `roles/editor`\n\n### Further information\n\n- [Google-managed service accounts](https://cloud.google.com/iam/docs/service-accounts#google-managed)\n"
  },
  {
    "path": "website/content/en/rules/gce/ERR/2021_004.md",
    "content": "---\ntitle: \"gce/ERR/2021_004\"\nlinkTitle: \"ERR/2021_004\"\nweight: 1\ntype: docs\ndescription: >\n  Serial logs don't contain Secure Boot error messages.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nThe messages: \"Security Violation\" / \"Binary is blacklisted\" /\n\"UEFI: Failed to start image\" / \"UEFI: Failed to load image\"\nin serial output usually indicate that the Secure Boot doesn't pass its\npre-checks.\n\nGoogle Security team may update the UEFI default dbx to implement blacklists\nbased on UEFI revocation list files in response to published CVEs.\n\n### Remediation\n\nMake sure that you don't use outdated images or images with known security issues.\n\n### Further information\n\n- [Secure Boot](https://cloud.google.com/compute/shielded-vm/docs/shielded-vm#secure-boot)\n- [Default EUFI certificates](https://cloud.google.com/compute/shielded-vm/docs/creating-shielded-images#default_certificates)\n- [UEFI revocation list file](https://www.uefi.org/revocationlistfile)\n- [Security bulletins](https://cloud.google.com/compute/docs/security-bulletins)\n"
  },
  {
    "path": "website/content/en/rules/gce/ERR/2021_005.md",
    "content": "---\ntitle: \"gce/ERR/2021_005\"\nlinkTitle: \"ERR/2021_005\"\nweight: 1\ntype: docs\ndescription: >\n  Serial logs don't contain mount error messages.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nThe messages:\n\"You are in emergency mode\" / \"Failed to mount\" / \"Unrecognized mount option\"\nin serial output usually indicate that a Linux instance cannot mount the root\npartition.\n\n### Remediation\n\nMake sure that root filesistem is healthy and the bootloader (grub)\nconfiguration is correct. Restore the boot disk from a snapshot.\n\n### Further information\n\n- [Troubleshooting VM start up](https://cloud.google.com/compute/docs/troubleshooting/vm-startup#correct_the_boot_issue)\n- [Best practices for persistent disk snapshots](https://cloud.google.com/compute/docs/disks/snapshot-best-practices)\n"
  },
  {
    "path": "website/content/en/rules/gce/ERR/2022_001.md",
    "content": "---\ntitle: \"gce/ERR/2022_001\"\nlinkTitle: \"ERR/2022_001\"\nweight: 1\ntype: docs\ndescription: >\n  Project limits were not exceeded.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nGoogle Cloud establishes various quotas that you can use to track and limit\nthe resources consumed by a project or organization. In most cases, if you run\nout of quota the task that you are trying to perform, such as deploying an\napplication, creating a new project, or calling an API, fails and you get a\nquota error.\n\nThe Cloud Monitoring will record the event when any service in your project is\nreporting a quota exceeded error.\n\n### Remediation\n\nThe task continues to fail until you free up resources (for allocation quota),\nthe time period resets (for rate quota), or you\n[request and are granted a quota adjustment](https://cloud.google.com/docs/quotas/overview#about_increase_requests).\n\n### Further information\n\n- [Working with quota](https://cloud.google.com/docs/quota)\n"
  },
  {
    "path": "website/content/en/rules/gce/ERR/2022_002.md",
    "content": "---\ntitle: \"gce/ERR/2022_002\"\nlinkTitle: \"ERR/2022_002\"\nweight: 1\ntype: docs\ndescription: >\n  Serial logs don't contain Guest OS activation errors\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nPremium Guest OSes need to activate their license when created and\nrefreshed regularly after activation. In an event that the guest OS cannot\ncommunicate with the license servers, the messages:\n\"Could not contact activation server.\" /\n\"Server needs to be activated by a KMS Server\" /\n\"Exiting without registration\" in the serial output would\nindicate license activation failures.\n\n### Remediation\n\n### Further information\n- https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-windows#licensing\n- https://cloud.google.com/compute/docs/instances/windows/creating-managing-windows-instances#kms-server\n"
  },
  {
    "path": "website/content/en/rules/gce/ERR/2024_001.md",
    "content": "---\ntitle: \"gce/ERR/2024_001\"\nlinkTitle: \"ERR/2024_001\"\nweight: 1\ntype: docs\ndescription: >\n  Snapshot creation not failed due to rate limit.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nWhen you try to snapshot your disk more than once during a ten minute period, or\nissue more than six burst snapshot requests in 60 minutes, you will encounter\nrate exceeded error. Follow best practices for disk snapshots.\n\n### Remediation\n\n[To resolve this issue](https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-snapshots#creating_snapshots_from_persistent_disks), take a snapshot of the disk at most once per hour as a best practice. Avoid taking snapshots more often than that. The easiest way to achieve this is to set up a snapshot schedule.\n\n### Further information\n\n- [ Best practices for creating snapshots from persistent disks.](https://cloud.google.com/compute/docs/disks/snapshot-best-practices#freq-create-snaps)\n"
  },
  {
    "path": "website/content/en/rules/gce/ERR/2024_002.md",
    "content": "---\ntitle: \"gce/ERR/2024_002\"\nlinkTitle: \"ERR/2024_002\"\nweight: 1\ntype: docs\ndescription: >\n GCE VM is operating within optimal performance thresholds\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nChecks the performance of the GCE instances in a project -\nCPU Usage, Memory Usage, Disk Usage and Serial port logs errors.\nThreshold for CPU Usage, Memory Usage, Disk Usage is 95%.\n\n### Remediation\n\nTo understand the performance of GCE VM, please [review the instance monitoring\nmetrics](https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-performance#viewing-performance-metrics)\nrelated to CPU, Memory, Network and Disks.\n\n- **CPU and Memory metrics:** Consistently high CPU or memory utilization indicate\nthe need to scale up a VM. If the VM consistently uses greater than 90% of its\nCPU or memory, [change the VM's machine type](https://cloud.google.com/compute/docs/instances/changing-machine-type-of-stopped-instance#changing_a_machine_type)\nto a machine type with more vCPUs or memory.\n\n- **Network metrics:** Consistently high outgoing network traffic might indicate\nthe need to [change the VM's machine type](https://cloud.google.com/compute/docs/instances/changing-machine-type-of-stopped-instance#changing_a_machine_type)\nto a machine type that has a higher egress bandwidth limit. If you notice high\nnumbers of incoming packets denied by firewalls, visit the\n[Network Intelligence Firewall Insights page](https://console.cloud.google.com/net-intelligence/firewalls)\nin the Google Cloud console to learn more about the origins of denied packets.\n\n- **Disk Metrics:** I/O latency is dependent on queue length and I/O size. If the\nqueue length or I/O size for a disk is high, the latency will also be high.\nIf any storage performance metrics indicate disk performance issues, do one\nor more of the following:\n    - Review [Optimizing persistent disk performance](https://cloud.google.com/compute/docs/disks/optimizing-pd-performance)\n    and implement the best practices suggested to improve performance.\n    - [Resize the persistent disks](https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-performance#:~:text=Resize%20the%20persistent%20disks)\n    to increase the per-disk IOPS and throughput limits. Persistent disks do\n    not have any reserved, unusable capacity, so you can use the full disk\n    without performance degradation.\n    - [Change the disk type](https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-performance#:~:text=Change%20the%20disk%20type)\n    to a disk type that offers higher performance. For more information, see\n    [Configure disks to meet performance requirements](https://cloud.google.com/compute/docs/disks/performance).\n\n\n### Further information\n\n- [Troubleshooting VM performance issues](https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-performance)\n\n- [Machine families resource and comparison guide](https://cloud.google.com/compute/docs/machine-resource)\n"
  },
  {
    "path": "website/content/en/rules/gce/ERR/2024_003.md",
    "content": "---\ntitle: \"gce/ERR/2024_003\"\nlinkTitle: \"ERR/2024_003\"\nweight: 1\ntype: docs\ndescription: >\n  GCE Shielded VM secure boot validations\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\n  Identifies if Shielded VMs are facing boot issues due to Secure boot\n  configurations and if there are Secure boot related fail events in\n  cloud logging.\n\n### Remediation\n\n  To determine the cause of boot integrity validation failure, please\n  [review the article](https://cloud.google.com/compute/shielded-vm/docs/integrity-monitoring#diagnosing-failure).\n\n  [Update the baseline](https://cloud.google.com/compute/shielded-vm/docs/integrity-monitoring#updating-baseline)\n  after any planned boot-specific changes in the instance configuration,\n  like kernel updates or kernel driver installation, as these will cause\n  integrity validation failures.\n\n  If you have an unexpected integrity validation failure, you should\n  investigate the reason for the failure and be prepared to stop the\n  instance if necessary.\n\n### Further information\n\n  - [Monitoring integrity on Shielded VMs](https://cloud.google.com/compute/shielded-vm/docs/integrity-monitoring)\n\n  - [Automating responses to integrity validation failures](https://cloud.google.com/compute/shielded-vm/docs/automating-responses-integrity-failures)\n"
  },
  {
    "path": "website/content/en/rules/gce/ERR/2024_004.md",
    "content": "---\ntitle: \"gce/ERR/2024_004\"\nlinkTitle: \"ERR/2024_004\"\nweight: 1\ntype: docs\ndescription: >\n  Verify Ops Agent is installed on GCE VMs and is sending logs and metrics.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\nThis Rule verifies that VMs in the project have the Ops Agent installed and that the agent is successfully sending both logs and metrics to Google Cloud. The rule fails if the agent isn't transmitting these data streams.\n\nSeeing logs and metrics from your GCE VMs in Logs Explorer and Metrics Explorer, respectively, confirms successful Ops Agent telemetry transmission. Conversely, missing logs or metrics on either dashboard indicates a transmission failure with the Ops Agent. This check programmatically analyzes both log and metric transmission and reports the results individually in the final rule report.\n\nThis Rule relies on the OS Config API to check Ops Agent installation on GCE VMs. It's recommended to [enable VM Manager](https://cloud.google.com/compute/docs/manage-os#automatic) which enables OS Config API automatically to guarantee the rule's ability to detect the ops agent installation. Without verifying the installation, the rule can't proceed to check for log and metric transmission.\n\nTop Reasons Why Ops Agent Fails to Transmit Logs and Metrics:\n1. Missing VM Access Scopes: The VM should enable both \"logging.write\" and \"monitoring.write\" scopes. Follow this [instruction](https://cloud.google.com/stackdriver/docs/solutions/agents/ops-agent/authorization#before_you_begin) to update your VM access scopes.\n2. Missing Service Account IAM Roles: The Service Account associated with the VM\nrequires both [\"roles/monitoring.metricWriter\"](https://cloud.google.com/monitoring/access-control#mon_roles_desc) and [\"roles/logging.logWriter\"](https://cloud.google.com/logging/docs/access-control#logging.logWriter). Read [here](https://cloud.google.com/stackdriver/docs/solutions/agents/ops-agent/troubleshoot-install-startup#agent-svc-acct-permissions) for more information.\n3. GCP API Not Enabled: Ops Agent requires both [Cloud Monitoring API](https://cloud.google.com/monitoring/api/enable-api) and [Cloud Logging\nAPI](https://cloud.google.com/logging/docs/api/enable-api) enabled on the project.\n\n\n### Remediation\nWhy isn't the Ops Agent transmitting logs and metrics?\nPlease run the Agent health check:\nhttps://cloud.google.com/stackdriver/docs/solutions/agents/ops-agent/troubleshoot-find-info#start-checks\nto find out,\nand look up the error code table:\nhttps://cloud.google.com/stackdriver/docs/solutions/agents/ops-agent/troubleshoot-find-info#health-checks\nto locate the corresponding fix.\n\nTo install the latest version of Ops Agent, please follow:\nhttps://cloud.google.com/stackdriver/docs/solutions/agents/ops-agent/installation#install-latest-version.\n\nTo troubleshoot Ops Agent installation failure, please follow:\nhttps://cloud.google.com/stackdriver/docs/solutions/agents/ops-agent/troubleshoot-install-startup#install-failed.\n\n### Further information\n- [Ops Agent](https://cloud.google.com/stackdriver/docs/solutions/agents/ops-agent)\n- [VM Manager](https://cloud.google.com/compute/docs/manage-os#automatic)\n"
  },
  {
    "path": "website/content/en/rules/gce/WARN/2021_001.md",
    "content": "---\ntitle: \"gce/WARN/2021_001\"\nlinkTitle: \"WARN/2021_001\"\nweight: 1\ntype: docs\ndescription: >\n  GCE VM Instance Access Scope, GCE VM Attached Service Account Permissions and APIs Required for Logging.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nA GCP project should have Cloud Logging API enabled.\n\nThe service account attached to the GCE VM instances should have the\nlogging.logWriter IAM role permission.\n\nAlso, a GCE instance should have the logging.write access scope.\n\nWithout these, Ops Agent won't be able to collect logs from GCE VMs and\ndisplay on Logs Explorer.\n\n### Remediation\nMake sure that you have [enabled the Cloud Logging API](https://cloud.google.com/logging/docs/api/enable-api) in your GCP project.\n\nMake sure that you have the following role binding in the IAM policy:\n\n- Principal: service account attached to the GCE VM instance\n- Role: [`roles/logging.logWriter`](https://cloud.google.com/logging/docs/access-control#grant-roles)\n\nMake sure that the instance has one of the following [access scopes](https://cloud.google.com/compute/docs/instances/change-service-account#changeserviceaccountandscopes):\n\n- https://www.googleapis.com/auth/cloud-platform (default)\n- https://www.googleapis.com/auth/logging.admin\n- https://www.googleapis.com/auth/logging.write\n\n### Further information\n\n- [Logging access control](https://cloud.google.com/logging/docs/access-control)\n"
  },
  {
    "path": "website/content/en/rules/gce/WARN/2021_002.md",
    "content": "---\ntitle: \"gce/WARN/2021_002\"\nlinkTitle: \"WARN/2021_002\"\nweight: 1\ntype: docs\ndescription: >\n  GCE nodes have good disk performance.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nVerify that the persistent disks used by the GCE instances provide a \"good\"\nperformance, where good is defined to be less than 100ms IO queue time.\n\n### Remediation\n\nIf the disk IO queue time is high, it probably means that the instance would\nbenefit from a faster disk (changing the type or making it larger).\n\n### Further information\n\n- [Block storage\n  performance](https://cloud.google.com/compute/docs/disks/performance)\n"
  },
  {
    "path": "website/content/en/rules/gce/WARN/2021_003.md",
    "content": "---\ntitle: \"gce/WARN/2021_003\"\nlinkTitle: \"WARN/2021_003\"\nweight: 1\ntype: docs\ndescription: >\n  GCE VM Instance Access Scope, GCE VM Attached Service Account Permissions and APIs Required for Monitoring.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nA GCP project should have Cloud Monitoring API enabled.\n\nThe service account attached to the GCE VM instances should have the\nmonitoring.metricWriter IAM role permission.\n\nAlso, a GCE instance should have the monitoring.write access scope.\n\nWithout these, Ops Agent won't be able to collect metrics from GCE VMs and\ndisplay on Metrics Explorer.\n\n### Remediation\nMake sure that you have [enabled the Cloud Monitoring API](https://cloud.google.com/monitoring/api/enable-api) in your GCP project.\n\nMake sure that you have the following role binding in the IAM policy:\n\n- Principal: service account attached to the GCE VM instance\n- Role: [`roles/monitoring.metricWriter`](https://cloud.google.com/monitoring/access-control#grant-monitoring-access)\n\nMake sure that the GCE VM instance has one of the following [access scopes](https://cloud.google.com/compute/docs/instances/change-service-account#changeserviceaccountandscopes):\n\n- https://www.googleapis.com/auth/cloud-platform (default)\n- https://www.googleapis.com/auth/monitoring\n- https://www.googleapis.com/auth/monitoring.write\n\n### Further information\n\n- [Monitoring access\n  control](https://cloud.google.com/monitoring/access-control)\n"
  },
  {
    "path": "website/content/en/rules/gce/WARN/2021_004.md",
    "content": "---\ntitle: \"gce/WARN/2021_004\"\nlinkTitle: \"WARN/2021_004\"\nweight: 1\ntype: docs\ndescription: >\n  Serial logs don't contain disk full messages\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nThe messages:\n\"No space left on device\" / \"I/O error\" / \"No usable temporary directory found\"\nin serial output usually indicate that the disk is full.\n\n### Remediation\n\nDelete some files or increase the size of the disk.\n\nYou can use the following log query to find matching log lines:\n\n```\nresource.type=\"gce_instance\"\nlog_id(\"serialconsole.googleapis.com/serial_port_1_output\")\ntextPayload:(\n  \"No space left on device\"\n  OR\n  \"I/O error\"\n  OR\n  \"No usable temporary directory found\"\n  )\n```\n\n\n### Further information\n\n- [Resizing a persistent disk](https://cloud.google.com/compute/docs/disks/working-with-persistent-disks#resize_pd)\n"
  },
  {
    "path": "website/content/en/rules/gce/WARN/2021_005.md",
    "content": "---\ntitle: \"gce/WARN/2021_005\"\nlinkTitle: \"WARN/2021_005\"\nweight: 1\ntype: docs\ndescription: >\n  Serial logs don't contain out-of-memory messages\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nThe messages:\n\"Out of memory: Kill process\" / \"sacrifice child\" / \"Killed process\" /\n\"Memory cgroup out of memory\" in serial output usually indicate that\na Linux instance is under memory pressure.\n\n### Remediation\n\nScale up the instance (add memory) by adjusting the instance's `machineType`,\ncheck for possible memory leaks in applications.\n\nYou can use the following log query to find matching log lines:\n\n```\nresource.type=\"gce_instance\"\nlog_id(\"serialconsole.googleapis.com/serial_port_1_output\")\ntextPayload:(\n  \"Out of memory: Kill process\"\n  OR\n  \"sacrifice child\"\n  OR\n  \"Killed process\"\n  OR\n  \"Memory cgroup out of memory\"\n  )\n```\n\n### Further information\n\n- [Updating instance properties](https://cloud.google.com/compute/docs/instances/update-instance-properties)\n"
  },
  {
    "path": "website/content/en/rules/gce/WARN/2021_006.md",
    "content": "---\ntitle: \"gce/WARN/2021_006\"\nlinkTitle: \"WARN/2021_006\"\nweight: 1\ntype: docs\ndescription: >\n  Serial logs don't contain \"Kernel panic\" messages\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nThe \"Kernel panic\" messages in serial output usually indicate that some\nfatal error occurred on a Linux instance.\n\n### Remediation\n\nThis issue requires further troubleshooting as root causes vary in this case.\nSome common issues that could cause kernel to panic:\n- Memory pressure\n- Disk pressure\n- Filesystem issues\n- Software (driver) issues\n- Hardware issues\n\nYou can use the following log query to find matching log lines:\n\n```\nresource.type=\"gce_instance\"\nlog_id(\"serialconsole.googleapis.com/serial_port_1_output\")\ntextPayload:(\"Kernel panic\")\n```\n\n### Further information\n\n- [Kernel panic](https://en.wikipedia.org/wiki/Kernel_panic)\n- [What to do in case of a Linux kernel panic](https://www.redhat.com/sysadmin/linux-kernel-panic)\n- [Documentation for /proc/sys/kernel/](https://www.kernel.org/doc/html/latest/admin-guide/sysctl/kernel.html)\n"
  },
  {
    "path": "website/content/en/rules/gce/WARN/2021_007.md",
    "content": "---\ntitle: \"gce/WARN/2021_007\"\nlinkTitle: \"WARN/2021_007\"\nweight: 1\ntype: docs\ndescription: >\n  Serial logs don't contain \"BSOD\" messages\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nThe messages:\n\"Dumping stack trace\" / \"pvpanic.sys\" in serial output usually indicate that some\nfatal error occurred on a Windows instance.\n\n### Remediation\n\nThis issue requires further troubleshooting as root causes vary in this case.\nSome common issues that could cause BSODs:\n- Memory pressure\n- Disk pressure\n- Filesystem issues\n- Software (driver) issues\n- Hardware issues\n\nYou can use the following log query to find matching log lines:\n\n```\nresource.type=\"gce_instance\"\nlog_id(\"serialconsole.googleapis.com/serial_port_1_output\")\ntextPayload:(\n  \"Dumping stack trace\"\n  OR\n  \"pvpanic.sys\"\n  )\n```\n\n### Further information\n\n- [Troubleshooting blue screen errors](https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-windows#blue-screen)\n"
  },
  {
    "path": "website/content/en/rules/gce/WARN/2022_001.md",
    "content": "---\ntitle: \"gce/WARN/2022_001\"\nlinkTitle: \"WARN/2022_001\"\nweight: 1\ntype: docs\ndescription: >\n  GCE connectivity: IAP service can connect to SSH/RDP port on instances.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nTraffic from the IP range 35.235.240.0/20 to VM instances is necessary for\nIAP TCP forwarding to establish an encrypted tunnel over which you can forward\nSSH, RDP traffic to VM instances.\n\n### Further information\n\n[Using IAP for TCP forwarding](https://cloud.google.com/iap/docs/using-tcp-forwarding)\n"
  },
  {
    "path": "website/content/en/rules/gce/WARN/2022_002.md",
    "content": "---\ntitle: \"gce/WARN/2022_002\"\nlinkTitle: \"WARN/2022_002\"\nweight: 1\ntype: docs\ndescription: >\n  Instance groups named ports are using unique names.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nNamed ports are key-value pairs that represent a port's name and number.\nIt is recommended to use unique port name for the same application, so that\nbackend service can only forward traffic to one named port at a time.\n\n### Remediation\n\n### Further information\n\n- [Instance groups](https://cloud.google.com/compute/docs/instance-groups)\n- [Assigning named ports](https://cloud.google.com/compute/docs/instance-groups/adding-an-instance-group-to-a-load-balancer#assign_named_ports)\n"
  },
  {
    "path": "website/content/en/rules/gce/WARN/2022_003.md",
    "content": "---\ntitle: \"gce/WARN/2022_003\"\nlinkTitle: \"WARN/2022_003\"\nweight: 1\ntype: docs\ndescription: >\n  GCE VM instances quota is not near the limit.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nVM instances quota is a regional quota and limits the number of VM instances\nthat can exist in a given region.\n\nRule will start failing if quota usage will be higher then configured threshold (80%).\n\n### Further information\n\n- [Quotas and resource availability](https://cloud.google.com/compute/quotas#quotas_and_resource_availability)\n- [VM instances](https://cloud.google.com/compute/quotas#vm_instance_quota)\n"
  },
  {
    "path": "website/content/en/rules/gce/WARN/2022_004.md",
    "content": "---\ntitle: \"gce/WARN/2022_004\"\nlinkTitle: \"WARN/2022_004\"\nweight: 1\ntype: docs\ndescription: >\n  Cloud SQL Docker bridge network should be avoided.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nThe IP range 172.17.0.0/16 is reserved for the Docker bridge network.\nConnections from any IP within that range to Cloud SQL instances using private\nIP fail.\n\n### Remediation\n\nMake sure that you do not use Docker bridge network for instances that need to\naccess Cloud SQL via private ip.\n\n### Further information\n - [Configure private IP](https://cloud.google.com/sql/docs/mysql/configure-private-ip)\n"
  },
  {
    "path": "website/content/en/rules/gce/WARN/2022_005.md",
    "content": "---\ntitle: \"gce/WARN/2022_005\"\nlinkTitle: \"WARN/2022_005\"\nweight: 1\ntype: docs\ndescription: >\n  GCE CPU quota is not near the limit.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nCPU quota is a regional quota and limits the number of CPU\nthat can exist in a given region.\n\nRule will start failing if quota usage will be higher then configured threshold (80%).\n\n### Further information\n\n- [Quotas and resource availability](https://cloud.google.com/compute/quotas#quotas_and_resource_availability)\n- [CPU quota](https://cloud.google.com/compute/quotas#cpu_quota)\n"
  },
  {
    "path": "website/content/en/rules/gce/WARN/2022_006.md",
    "content": "---\ntitle: \"gce/WARN/2022_006\"\nlinkTitle: \"WARN/2022_006\"\nweight: 1\ntype: docs\ndescription: >\n  GCE GPU quota is not near the limit.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nGPU quota is a regional quota and limits the number of GPU\nthat can exist in a given region.\n\nRule will start failing if quota usage will be higher then configured threshold (80%).\n\n### Further information\n\n- [Quotas and resource availability](https://cloud.google.com/compute/quotas#quotas_and_resource_availability)\n- [GPU quota](https://cloud.google.com/compute/quotas#gpu_quota)\n"
  },
  {
    "path": "website/content/en/rules/gce/WARN/2022_007.md",
    "content": "---\ntitle: \"gce/WARN/2022_007\"\nlinkTitle: \"WARN/2022_007\"\nweight: 1\ntype: docs\ndescription: >\n  Compute Engine VM has the proper scope to connect using the Cloud SQL Admin API\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nThe service account used by Compute Engine VM should have permission\n(roles/cloudsql.client) to connect to the Cloud SQL using the Cloud SQL Admin\nAPI, otherwise connection won't work.\n\n### Remediation\n\nConfigure the service account to have Cloud SQL Client (roles/cloudsql.client)\npermission and set the GCE VM the either of the following access scopes:\n\n- https://www.googleapis.com/auth/sqlservice.admin\n- https://www.googleapis.com/auth/cloud-platform\n\n### Further information\n\n- [Cloud SQL admin API scopes](https://cloud.google.com/sql/docs/mysql/connect-compute-engine.html#prereq)\n- [Cloud SQL roles and permissions](https://cloud.google.com/sql/docs/mysql/roles-and-permissions#introduction)\n"
  },
  {
    "path": "website/content/en/rules/gce/WARN/2022_008.md",
    "content": "---\ntitle: \"gce/WARN/2022_008\"\nlinkTitle: \"WARN/2022_008\"\nweight: 1\ntype: docs\ndescription: >\n  GCE External IP addresses quota is not near the limit.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nRegional IP quota is for assigning IPv4 addresses to VMs in that region.\nGlobal IP quota is for assigning IPv4 addresses to global networking resources\nsuch as load balancers.\n\nRule will start failing if quota usage will be higher then configured threshold (80%).\n\n### Further information\n\n- [Quotas and resource availability](https://cloud.google.com/compute/quotas#quotas_and_resource_availability)\n- [External IP addresses](https://cloud.google.com/compute/quotas#external_ip_addresses)\n"
  },
  {
    "path": "website/content/en/rules/gce/WARN/2022_009.md",
    "content": "---\ntitle: \"gce/WARN/2022_009\"\nlinkTitle: \"WARN/2022_009\"\nweight: 1\ntype: docs\ndescription: >\n  GCE disk quota is not near the limit.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nThe following persistent disk and local SSD quotas apply on a per-region basis:\n- Local SSD (GB)\n- Persistent disk standard (GB)\n- Persistent disk SSD (GB)\n\nRule will start failing if quota usage will be higher then configured threshold (80%).\n\n### Further information\n\n- [Quotas and resource availability](https://cloud.google.com/compute/quotas#quotas_and_resource_availability)\n- [Disk Quota](https://cloud.google.com/compute/quotas#disk_quota)\n"
  },
  {
    "path": "website/content/en/rules/gce/WARN/2022_010.md",
    "content": "---\ntitle: \"gce/WARN/2022_010\"\nlinkTitle: \"WARN/2022_010\"\nweight: 1\ntype: docs\ndescription: >\n  GCE has enough resources available to fulfill requests\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nResource availability errors can occur when using GCE resource on demand and a\nzone cannot accommodate your request due to resource exhaustion for the\nspecific VM configuration. Consider trying your request in other zones,\nrequesting again with a different VM hardware configuration or at a later\ntime. For more information, see the troubleshooting documentation.\n\n### Remediation\n\n- Create [reservations](https://cloud.google.com/compute/docs/instances/reservations-overview) for  workloads\n\n### Further information\n- https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-vm-creation?#resource_availability\n"
  },
  {
    "path": "website/content/en/rules/gce/WARN/2022_011.md",
    "content": "---\ntitle: \"gce/WARN/2022_011\"\nlinkTitle: \"WARN/2022_011\"\nweight: 1\ntype: docs\ndescription: >\n  GCE VM service account is valid\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nDisabling or deleting the service account used by a GCE VM will results in\nauthentication issues for gcloud components and dependent apps.\nRestore/enable the service account use by the VM.\n\n### Remediation\n- Replace attached service account with a new service account or re-enable the account.\nService account deleted less than 30 days ago can be [restored](https://cloud.google.com/iam/docs/service-accounts-delete-undelete#undeleting).\n\n### Further information\n- https://cloud.google.com/iam/docs/creating-managing-service-accounts#disabling\n"
  },
  {
    "path": "website/content/en/rules/gce/WARN/2022_012.md",
    "content": "---\ntitle: \"gce/WARN/2022_012\"\nlinkTitle: \"WARN/2022_012\"\nweight: 1\ntype: docs\ndescription: >\n  PAYG licensed Windows instance can reach KMS to activate\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nValidates if a Microsoft Windows instance is able to activate using GCP PAYG licence.\n\n### Remediation\nhttps://cloud.google.com/compute/docs/troubleshooting/troubleshooting-windows#licensing\n\n### Further information\nhttps://cloud.google.com/compute/docs/instances/windows/ms-licensing\nhttps://cloud.google.com/compute/docs/instances/windows/ms-licensing-faq\n"
  },
  {
    "path": "website/content/en/rules/gce/WARN/2023_001.md",
    "content": "---\ntitle: \"gce/WARN/2023_001\"\nlinkTitle: \"WARN/2023_001\"\nweight: 1\ntype: docs\ndescription: >\n  GCE snapshot policies are defined only for used disks\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\nGCE snapshot policies are defined only for used disks.\nSchedule snapshots on unused disk are unnecessary\nsince disk delta doesn't change.\n\n### Remediation\n1. Verify the disk hasn't been detached by mistake from the VM, else\nremove the schedule snapshot policy from such a disk.\n2. A point in time snapshot should suffice (manual snapshot)\n\n### Further information\nYou can read more about schedule snapshots here:\nhttps://cloud.google.com/compute/docs/disks/scheduled-snapshots\n"
  },
  {
    "path": "website/content/en/rules/gce/WARN/2023_002.md",
    "content": "---\ntitle: \"gce/WARN/2023_002\"\nlinkTitle: \"WARN/2023_002\"\nweight: 1\ntype: docs\ndescription: >\n  Serial logs don't contain out-of-memory message due to Airflow task run\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nSometimes Composer Airflow task might be using more memory and no proper logs\nwill be seen\nin task log. In such cases we can observe out of memory messages in the k8s node\nlog in the following way:\n\"Memory cgroup out of memory: Killed process 123456 (airflow task ru)\".\n\n### Remediation\n\n1. Consider reducing the worker_concurrency and observe the worker performance.\n2. Based on the task usage requirement, consider increasing the airflow-worker memory.\n\n### Further information\n\nYou need to scale the Composer environment based on observation:\nhttps://cloud.google.com/composer/docs/composer-2/optimize-environments\n"
  },
  {
    "path": "website/content/en/rules/gce/_index.md",
    "content": "---\ntitle: \"GCE\"\nlinkTitle: \"gce\"\ntype: docs\ndescription: Compute Engine\n---\n"
  },
  {
    "path": "website/content/en/rules/gcf/ERR/2022_001.md",
    "content": "---\ntitle: \"gcf/ERR/2022_001\"\nlinkTitle: \"ERR/2022_001\"\nweight: 1\ntype: docs\ndescription: >\n  Cloud Functions service agent has the cloudfunctions.serviceAgent role.\n---\n\n**Product**: [Cloud Functions](https://cloud.google.com/functions)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nThe Cloud Functions Service Agent is missing the cloudfunctions.serviceAgent role,\nwhich gives Cloud Functions Service Agent access to managed resources.\nYou can resolve this error by granting the cloudfunctions.serviceAgent IAM role\nto service-PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com.\n\n### Remediation\n\n### Further information\n\n- [Troubleshooting permission errors](https://cloud.google.com/functions/docs/concepts/iam#troubleshooting_permission_errors)\n"
  },
  {
    "path": "website/content/en/rules/gcf/ERR/2022_002.md",
    "content": "---\ntitle: \"gcf/ERR/2022_002\"\nlinkTitle: \"ERR/2022_002\"\nweight: 1\ntype: docs\ndescription: >\n  Cloud Function deployment failure due to Resource Location Constraint.\n---\n\n**Product**: [Cloud Functions](https://cloud.google.com/functions)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nFunction is deployed in a region not allowed by the Organization Policy\n\nThere is an Organization Policy in place for your project with a constraint named Resource Location Restriction. This restricts the physical location of the new resource (in your case Cloud Functions) that you are trying to deploy. Thus you are facing the error The request has violated one or more Org Policies. Please refer to the respective violations for more information.\n\n### Remediation\n\n\n\n\n\n\n### Further information\n- [Troubleshooting Cloud Functions](https://cloud.google.com/functions/docs/troubleshooting#resource-location)\n- [Organization policy constraints](https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints)\n- [Restricting Resource Locations](https://cloud.google.com/resource-manager/docs/organization-policy/defining-locations)\n"
  },
  {
    "path": "website/content/en/rules/gcf/ERR/2022_003.md",
    "content": "---\ntitle: \"gcf/ERR/2022_003\"\nlinkTitle: \"ERR/2022_003\"\nweight: 1\ntype: docs\ndescription: >\n  Function invocation interrupted due to memory limit exceeded.\n---\n\n**Product**: [Cloud Functions](https://cloud.google.com/functions)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nWhen configuring Cloud Functions, you can choose how much memory is allocated to run the function. By default, the memory allocated to each function is 256 MB. You should ensure that the function executes within the amount of memory specified otherwise they will encounter an Out-of-Memory (OOM) error which will interrupt their function invocation.\n\n### Remediation\n\n\n\n### Further information\n\n\n- [Cloud Functions execution environment](https://cloud.google.com/functions/docs/concepts/exec#memory)\n"
  },
  {
    "path": "website/content/en/rules/gcf/WARN/2021_001.md",
    "content": "---\ntitle: \"gcf/WARN/2021_001\"\nlinkTitle: \"WARN/2021_001\"\nweight: 1\ntype: docs\ndescription: >\n  Cloud Functions don't use deprecated runtimes.\n---\n\n**Product**: [Cloud Functions](https://cloud.google.com/functions)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nThe following runtimes are deprecated: Go111, Nodejs6, Nodejs8.\n\n### Remediation\n\nNodejs14 and Go113 are recommended.\n\n### Further information\n\n- [Cloud functions Runtime Support](https://cloud.google.com/functions/docs/runtime-support)\n"
  },
  {
    "path": "website/content/en/rules/gcf/WARN/2021_002.md",
    "content": "---\ntitle: \"gcf/WARN/2021_002\"\nlinkTitle: \"WARN/2021_002\"\nweight: 1\ntype: docs\ndescription: >\n  Cloud Functions have no scale up issues.\n---\n\n**Product**: [Cloud Functions](https://cloud.google.com/functions)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nCloud Functions infrastructure is not able to scale up instances fast enough to handle the incoming load for the function.\n\n### Remediation\n\nYou can use the following filter to find matching log lines:\n\n```\nresource.type=\"cloud_function\"\nlog_id(\"cloudfunctions.googleapis.com/cloud-functions\")\ntextPayload:\"The request was aborted because there was no available instance\"\n```\n\n### Further information\n\nThe additional troubleshooting documentation can be found at https://cloud.google.com/functions/docs/troubleshooting#scalability.\n"
  },
  {
    "path": "website/content/en/rules/gcf/_index.md",
    "content": "---\ntitle: \"GCF\"\nlinkTitle: \"gcf\"\ntype: docs\ndescription: Cloud Functions\n---\n"
  },
  {
    "path": "website/content/en/rules/gcs/BP/2022_001.md",
    "content": "---\ntitle: \"gcs/BP/2022_001\"\nlinkTitle: \"BP/2022_001\"\nweight: 1\ntype: docs\ndescription: >\n  Buckets are using uniform access\n---\n\n**Product**: [Cloud Storage](https://cloud.google.com/storage)\n\n**Rule class**: Best practices\n\n### Description\n\nGoogle recommends using uniform access for a\nCloud Storage bucket IAM policy\n\n### Remediation\n\n### Further information\n\n- [Access Control](https://cloud.google.com/storage/docs/access-control#choose_between_uniform_and_fine-grained_access\n)\n"
  },
  {
    "path": "website/content/en/rules/gcs/_index.md",
    "content": "---\ntitle: \"GCS\"\nlinkTitle: \"gcs\"\ntype: docs\ndescription: \"Cloud Storage\"\n---\n"
  },
  {
    "path": "website/content/en/rules/gke/BP/2021_001.md",
    "content": "---\ntitle: \"gke/BP/2021_001\"\nlinkTitle: \"BP/2021_001\"\nweight: 1\ntype: docs\ndescription: >\n  GKE logging and monitoring enabled.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: BP - Best practice, opinionated recommendation\n\n### Description\n\nDisabling logging (SYSTEM, WORKLOADS) and monitoring (aka \"GKE Cloud Operations\") impacts the\nability to troubleshoot any issues that you might have.\n\nIf you are a Google Cloud Support customer, keeping logging (SYSTEM, WORKLOADS) and\nmonitoring enabled is important even if you have your own monitoring solution,\nbecause otherwise the support team won't have access to logs and monitoring data\nused for troubleshooting.\n\n### Remediation\n\nMake sure that you enable Cloud Monitoring for\nSYSTEM metrics and Cloud Logging for SYSTEM and WORKLOADS logs.\n\n### Further information\n\n- [Managing GKE logs](https://cloud.google.com/stackdriver/docs/solutions/gke/managing-logs)\n- [Managing GKE metrics](https://cloud.google.com/stackdriver/docs/solutions/gke/managing-metrics)\n- [GKE Support](https://cloud.google.com/kubernetes-engine/docs/getting-support)\n"
  },
  {
    "path": "website/content/en/rules/gke/BP/2022_001.md",
    "content": "---\ntitle: \"gke/BP/2022_001\"\nlinkTitle: \"BP/2022_001\"\nweight: 1\ntype: docs\ndescription: >\n  GKE clusters are regional.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: BP - Best practice, opinionated recommendation\n\n### Description\n\nThe availability of regional clusters (both control plane and nodes) is higher\nfor regional clusters as they are replicated across zones in the region. It is\nrecommended to use regional clusters for the production workload.\n\n### Further information\n\n- [GKE Regional clusters](https://cloud.google.com/kubernetes-engine/docs/concepts/regional-clusters)\n"
  },
  {
    "path": "website/content/en/rules/gke/BP/2022_002.md",
    "content": "---\ntitle: \"gke/BP/2022_002\"\nlinkTitle: \"BP/2022_002\"\nweight: 1\ntype: docs\ndescription: >\n  GKE clusters are using unique subnets.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: BP - Best practice, opinionated recommendation\n\n### Description\n\nVerify that the Google Kubernetes Engine clusters are not sharing subnets. It is\nrecommended to use unique subnet for each cluster.\n\nKeep in mind that subnets may be also reused in other projects.\n\n### Further information\n\n- [GKE Networking Best Practicies](https://cloud.google.com/kubernetes-engine/docs/best-practices/networking)\n"
  },
  {
    "path": "website/content/en/rules/gke/BP/2022_003.md",
    "content": "---\ntitle: \"gke/BP/2022_003\"\nlinkTitle: \"BP/2022_003\"\nweight: 1\ntype: docs\ndescription: >\n  GKE cluster is not near to end of life\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: BP - Best practice, opinionated recommendation\n\n### Description\n\nThe GKE clusters should be updated regularly. It is recommended to keep your\nGKE cluster version up to date and avoid reaching end of life.\n\nRule will start failing if scheduled end of life is in less than 30 days.\n\n### Further information\n\n- [GKE release schedule](https://cloud.google.com/kubernetes-engine/docs/release-schedule#schedule_for_static_no_channel_versions)\n- [GKE versioning and support](https://cloud.google.com/kubernetes-engine/versioning#version_support)\n"
  },
  {
    "path": "website/content/en/rules/gke/BP/2022_004.md",
    "content": "---\ntitle: \"gke/BP/2022_004\"\nlinkTitle: \"BP/2022_004\"\nweight: 1\ntype: docs\ndescription: >\n  GKE clusters should have HTTP load balancing enabled to use GKE ingress.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: BP - Best practice, opinionated recommendation\n\n### Description\n\nIf this is disabled GKE ingresses will be stuck in the creating state. Similarly, if this is disabled after GKE ingresses have been created but before they are deleted they will be stuck in the deleting state. It is also recommended to use container-native load balancing on GKE which requires that HTTP load balancing is enabled.\n\n### Remediation\n\nEnable HTTP load balancing on the GKE cluster to allow creation/deletion of GKE ingresses.\n\n### Further information\n\n- [GKE Ingress](https://cloud.google.com/kubernetes-engine/docs/tutorials/http-balancer#ingress)\n- [Container-native load balancing](https://cloud.google.com/kubernetes-engine/docs/concepts/ingress#container-native_load_balancing)\n- [Requirements for container-native load balancing on GKE](https://cloud.google.com/kubernetes-engine/docs/concepts/container-native-load-balancing#requirements)\n"
  },
  {
    "path": "website/content/en/rules/gke/BP/2023_001.md",
    "content": "---\ntitle: \"gke/BP/2023_001\"\nlinkTitle: \"BP/2023_001\"\nweight: 1\ntype: docs\ndescription: >\n  GKE network policy enforcement\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: BP - Best practice, opinionated recommendation\n\n### Description\n\nThe recommended minimum cluster size to run network policy enforcement is three e2-medium instances to ensure redundancy, high\navailability and to avoid down time due to maintenance activities.\n\nNetwork policy is not supported for clusters whose nodes are f1-micro or g1-small instances, as the resource requirements are too high.\nEnabling this feature on such machines might lead to user workloads not getting scheduled or having very little resources available as\nkube-system workloads will be consuming all or most resources.\n\n### Remediation\n\nIt is recommended to have at least three nodes the cluster, increase nodes in the cluster to meet the requirements.\n\nFor nodes with f1-micro or g1-small instances it might be possible to run very light weight user workloads but it is recommended to have at least e2-medium instances.\n\n### Further information\n\n- [Requirements for GKE network policy enforcement](https://cloud.google.com/kubernetes-engine/docs/how-to/network-policy#overhead_limitations_and_caveats)\n"
  },
  {
    "path": "website/content/en/rules/gke/BP/2023_002.md",
    "content": "---\ntitle: \"gke/BP/2023_002\"\nlinkTitle: \"BP/2023_002\"\nweight: 1\ntype: docs\ndescription: >\n  Stateful workloads not run on preemptible node\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: BP - Best practice, opinionated recommendation\n\n### Description\n\nPlease understand the risk of application level disruption or data corruption if you decide to run stateful workloads on preemptible nodes. You can use node taints and tolerations to make stateful Pods not be scheduled onto node pools that use preemptible VMs.\n\n### Further information\n\nSee [public troubleshooting docs](https://cloud.google.com/kubernetes-engine/docs/concepts/spot-vms#best-practices)\nabout the best practices using preemptible nodes in GKE.\n"
  },
  {
    "path": "website/content/en/rules/gke/BP/2023_004.md",
    "content": "---\ntitle: \"gke/BP/2023_004\"\nlinkTitle: \"BP/2023_004\"\nweight: 1\ntype: docs\ndescription: >\n  GKE clusters are VPC-native.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: BP - Best practice, opinionated recommendation\n\n### Description\n\nIt's recommended to use VPC-native clusters.\nVPC-native clusters use alias IP address ranges on GKE nodes and are required\nfor private GKE clusters and for creating clusters on Shared VPCs, as well as\nmany other features.\n\nVPC-native clusters scale more easily than routes-based clusters without consuming\nGoogle Cloud routes and so are less susceptible to hitting routing limits.\n\n### Remediation\n\nMigrate to VPC-Native cluster by recreating the cluster.\n\n### Further information\n\n- [VPC-Native best practice](https://cloud.google.com/kubernetes-engine/docs/best-practices/networking#vpc-native-clusters)\n- [Creating a VPC-Native cluster](https://cloud.google.com/kubernetes-engine/docs/how-to/alias-ips)\n"
  },
  {
    "path": "website/content/en/rules/gke/BP/2023_005.md",
    "content": "---\ntitle: \"gke/BP/2023_005\"\nlinkTitle: \"BP/2023_005\"\nweight: 1\ntype: docs\ndescription: >\n  Enable gateway resources through Gateway API.\n---\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: BP - BP - Best practice, opinionated recommendation\n\n### Description\nThere is a possibility that healthcheckpolicies.networking.gke.io,\ngcpbackendpolicies.networking.gke.io, or gcpgatewaypolicies.networking.gke.io\nCRD are notpresent.\n\nYou can use the following filter to find matching log lines:\n```\njsonPayload.message=~\".*Please enable the gateway API for your cluster using gcloud: https://cloud.google.com/kubernetes-engine/docs/how-to/deploying-gateways#enable-gateway.*\"\nresource.type=\"k8s_cluster\"\nseverity=\"WARNING\"\n```\n### Remediation\nKindly enable the Gateway API on new or existing GKE Autopilot and Standard clusters.\n\n### Further information\nYou may follow the steps in the below guide:\n- https://cloud.devsite.corp.google.com/kubernetes-engine/docs/how-to/deploying-gateways#enable-gateway\n"
  },
  {
    "path": "website/content/en/rules/gke/BP/2025_001.md",
    "content": "---\ntitle: \"gke/BP/2025_001\"\nlinkTitle: \"BP/2025_001\"\nweight: 1\ntype: docs\ndescription: >\n  GKE clusters should have NodeLocal DNSCache enabled for better DNS performance.\n---\n\n**Product**: [Google Kubernetes Networking](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: BP - Best practice, opinionated recommendation\n\n### Description\n\nNodeLocal DNSCache improves DNS reliability and performance within the cluster by running a local DNS cache on each node. This reduces latency and load on kube-dns. It is a recommended best practice for most Standard clusters. Autopilot clusters have this enabled by default.\n\n### Remediation\nEnable NodeLocal DNSCache on an existing Standard cluster using the following `gcloud` command:\n\n```\ngcloud container clusters update ${CLUSTER_NAME} \\\n    --location=${COMPUTE_LOCATION} \\\n    --update-addons=NodeLocalDNS=ENABLED\n```\nReplace ${CLUSTER_NAME} and ${COMPUTE_LOCATION} (e.g., us-central1 for region) with your cluster's details.\n\n### Further information\nSee https://cloud.google.com/kubernetes-engine/docs/how-to/nodelocal-dns-cache\n"
  },
  {
    "path": "website/content/en/rules/gke/BP_EXT/2022_001.md",
    "content": "---\ntitle: \"gke/BP_EXT/2022_001\"\nlinkTitle: \"BP_EXT/2022_001\"\nweight: 1\ntype: docs\ndescription: >\n  Google Groups for RBAC enabled.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: BP_EXT - Best practice, opinionated recommendation\n\n### Description\n\nUser access should be managed with Google Groups so Workspace administrators can maintain the users and group memberships. This allows your teams to follow user account management best practices.\n\n### Remediation\n\nFollow the documentation for steps on [How to enable Google Groups for RBAC](https://cloud.google.com/kubernetes-engine/docs/how-to/google-groups-rbac#enable) on GKE clusters.\n\n### Further information\n\n- [GKE Access Control](https://cloud.google.com/kubernetes-engine/docs/concepts/access-control)\n- [How to enable Google Groups for RBAC](https://cloud.google.com/kubernetes-engine/docs/how-to/role-based-access-control#google-groups-for-gke)\n- [GKE Support](https://cloud.google.com/kubernetes-engine/docs/getting-support)\n"
  },
  {
    "path": "website/content/en/rules/gke/BP_EXT/2023_001.md",
    "content": "---\ntitle: \"gke/BP_EXT/2023_003\"\nlinkTitle: \"BP_EXT/2023_003\"\nweight: 1\ntype: docs\ndescription: >\n  GKE maintenance windows are defined\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: BP - Best practice, opinionated recommendation\n\n### Description\n\nMaintenance windows give you fine-grained control over when automatic\nmaintenance can occur on GKE clusters. They allow administrators to\ncontrol the timing and impact of these updates, ensuring minimal disruption\nto running workloads.\n\n### Further information\n\n- [Maintenance windows and exclusions](https://cloud.google.com/kubernetes-engine/docs/concepts/maintenance-windows-and-exclusions)\n- [Configure maintenance windows and exclusions](https://cloud.google.com/kubernetes-engine/docs/how-to/maintenance-windows-and-exclusions)\n"
  },
  {
    "path": "website/content/en/rules/gke/BP_EXT/2023_002.md",
    "content": "---\ntitle: \"gke/BP_EXT/2023_006\"\nlinkTitle: \"BP_EXT/2023_006\"\nweight: 1\ntype: docs\ndescription: >\n  GKE clusters are private clusters.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: BP_EXT - Best practice, opinionated recommendation\n\n### Description\n\nA private cluster is a type of VPC-native cluster that only depends on internal IP addresses.\nNodes, Pods, and Services in a private cluster require unique subnet IP address ranges.\n\nPrivate clusters are used when the applicationas and services are needed to be isolated from\nthe outside connections completely.\nThis ensures the workloads are private and not exposed to untrusted sources.\n\n### Remediation\n[Create Pirvate Cluster](https://cloud.google.com/kubernetes-engine/docs/how-to/private-clusters)\n\n### Further information\n[Related Doc](https://cloud.google.com/kubernetes-engine/docs/concepts/private-cluster-concept)\n"
  },
  {
    "path": "website/content/en/rules/gke/ERR/2021_001.md",
    "content": "---\ntitle: \"gke/ERR/2021_001\"\nlinkTitle: \"ERR/2021_001\"\nweight: 1\ntype: docs\ndescription: >\n  GKE nodes service account permissions for logging.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nThe service account used by GKE nodes should have the logging.logWriter\nrole, otherwise ingestion of logs won't work.\n\n### Remediation\n\nMake sure that you have the following role binding in the IAM policy:\n\n- Principal: GKE node pool service account\n- Role: `roles/logging.logWriter`\n\n### Further information\n\n- [Hardening your cluster's security](https://cloud.google.com/kubernetes-engine/docs/how-to/hardening-your-cluster)\n"
  },
  {
    "path": "website/content/en/rules/gke/ERR/2021_002.md",
    "content": "---\ntitle: \"gke/ERR/2021_002\"\nlinkTitle: \"ERR/2021_002\"\nweight: 1\ntype: docs\ndescription: >\n  GKE nodes service account permissions for monitoring.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nThe service account used by GKE nodes should have the monitoring.metricWriter\nrole, otherwise ingestion of metrics won't work.\n\n### Remediation\n\nMake sure that you have the following role binding in the IAM policy:\n\n- Principal: GKE node pool service account\n- Role: `roles/monitoring.metricWriter`\n\n### Further information\n\n- [Hardening your cluster's security](https://cloud.google.com/kubernetes-engine/docs/how-to/hardening-your-cluster)\n"
  },
  {
    "path": "website/content/en/rules/gke/ERR/2021_003.md",
    "content": "---\ntitle: \"gke/ERR/2021_003\"\nlinkTitle: \"ERR/2021_003\"\nweight: 1\ntype: docs\ndescription: >\n  App-layer secrets encryption is activated and Cloud KMS key is enabled.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nGKE's default service account cannot use a disabled or destroyed Cloud KMS key\nfor application-level secrets encryption.\n\n### Further information\n\n- [Encrypting secrets at the application\n  layer](https://cloud.google.com/kubernetes-engine/docs/how-to/encrypting-secrets)\n"
  },
  {
    "path": "website/content/en/rules/gke/ERR/2021_004.md",
    "content": "---\ntitle: \"gke/ERR/2021_004\"\nlinkTitle: \"ERR/2021_004\"\nweight: 1\ntype: docs\ndescription: >\n  GKE nodes aren't reporting connection issues to apiserver.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nGKE nodes need to connect to the control plane to register and to report status\nregularly. If connection errors are found in the logs, possibly there is a\nconnectivity issue, like a firewall rule blocking access.\n\n### Remediation\n\nYou can use the following filter to find matching log lines:\n\n```\nresource.type=\"k8s_node\"\nlog_id(\"kubelet\")\njsonPayload.MESSAGE:\"Failed to connect to apiserver\"\n```\n\n### Further information\n\n- [GKE\n  Troubleshooting](https://cloud.google.com/kubernetes-engine/docs/troubleshooting)\n"
  },
  {
    "path": "website/content/en/rules/gke/ERR/2021_005.md",
    "content": "---\ntitle: \"gke/ERR/2021_005\"\nlinkTitle: \"ERR/2021_005\"\nweight: 1\ntype: docs\ndescription: >\n  GKE nodes aren't reporting connection issues to storage.google.com.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\n\nGKE node need to download artifacts from storage.google.com:443 when\nbooting. If a node reports that it can't connect to storage.google.com,\nit probably means that it can't boot correctly.\n\n### Remediation\n\nYou can use the following filter to find matching log lines:\n\n```\nresource.type=\"k8s_node\"\nlog_id(\"kubelet\")\njsonPayload.MESSAGE:\"Failed to connect to storage.googleapis.com\"\n```\n\n### Further information\n\n- [GKE\n  Troubleshooting](https://cloud.google.com/kubernetes-engine/docs/troubleshooting)\n"
  },
  {
    "path": "website/content/en/rules/gke/ERR/2021_006.md",
    "content": "---\ntitle: \"gke/ERR/2021_006\"\nlinkTitle: \"ERR/2021_006\"\nweight: 1\ntype: docs\ndescription: >\n  GKE Autoscaler isn't reporting scaleup failures.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nIf the GKE autoscaler reported a problem when trying to add nodes to a cluster,\nit could mean that you don't have enough resources to accommodate for new nodes.\nE.g. you might not have enough free IP addresses in the GKE cluster network.\n\n### Remediation\n\nYou can use the following filter to find matching log lines:\n\n```\nresource.type=\"gce_instance\"\nlog_id(cloudaudit.googleapis.com/activity)\nseverity=ERROR\nprotoPayload.methodName=\"v1.compute.instances.insert\"\nprotoPayload.requestMetadata.callerSuppliedUserAgent=\"GCE Managed Instance Group for GKE\"\n```\n\n### Further information\n\n- [Troubleshooting Cluster\n  Autoscaler](https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-autoscaler#troubleshooting)\n"
  },
  {
    "path": "website/content/en/rules/gke/ERR/2021_007.md",
    "content": "---\ntitle: \"gke/ERR/2021_007\"\nlinkTitle: \"ERR/2021_007\"\nweight: 1\ntype: docs\ndescription: >\n  GKE service account permissions.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nVerify that the Google Kubernetes Engine service account exists and has\nthe Kubernetes Engine Service Agent role on the project.\n\n### Remediation\n\nMake sure that you have the following role binding in the IAM policy:\n\n- Principal: `serviceAccount:service-PROJECTNR@container-engine-robot.iam.gserviceaccount.com`\n- Role: `roles/container.serviceAgent`\n\n### Further information\n\n- [GKE Troubleshooting](https://cloud.google.com/kubernetes-engine/docs/troubleshooting#gke_service_account_deleted)\n"
  },
  {
    "path": "website/content/en/rules/gke/ERR/2021_008.md",
    "content": "---\ntitle: \"gke/ERR/2021_008\"\nlinkTitle: \"ERR/2021_008\"\nweight: 1\ntype: docs\ndescription: >\n  Google APIs service agent has Editor role.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nThe Google API service agent project-number@cloudservices.gserviceaccount.com\nruns internal Google processes on your behalf. It is automatically granted the\nEditor role on the project.\n\n### Remediation\n\nMake sure that you have the following role binding in the IAM policy:\n\n- Principal: `serviceAccount:PROJECTNR@cloudservices.gserviceaccount.com`\n- Role: `roles/editor`\n\n### Further information\n\n- [Google-managed service accounts](https://cloud.google.com/iam/docs/service-accounts#google-managed)\n"
  },
  {
    "path": "website/content/en/rules/gke/ERR/2021_009.md",
    "content": "---\ntitle: \"gke/ERR/2021_009\"\nlinkTitle: \"ERR/2021_009\"\nweight: 1\ntype: docs\ndescription: >\n  Version skew between cluster and node pool\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nDifference between cluster version and node pools version should be no more than\n2 (K8s <v1.28) or 3 (K8s v1.28+) minor versions.\n\nFor example: Cluster 1.19.12-gke.2101, Node Pool: 1.14.10-gke.36 Such a big\ndifference is not supported.\n\nIn this situation the cluster might be stuck in auto-repair.\n\n### Remediation\n\nUpgrade the problematic node pool or recreate it with a later version.\n\n### Further information\n\n-   [GKE versioning and support](https://cloud.google.com/kubernetes-engine/versioning)\n-   [Kubernetes v1.28 expands the supported skew ](https://kubernetes.io/blog/2023/08/15/kubernetes-v1-28-release/#changes-to-supported-skew-between-control-plane-and-node-versions)\n"
  },
  {
    "path": "website/content/en/rules/gke/ERR/2021_010.md",
    "content": "---\ntitle: \"gke/ERR/2021_010\"\nlinkTitle: \"ERR/2021_010\"\nweight: 1\ntype: docs\ndescription: >\n  Check internal peering forwarding limits which affect GKE.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nInternal Load Balancer creation can fail due to VPC internal forwarding rules limits.\n\n### Remediation\n\nYou can use the following Cloud Logging filter to find matching log lines:\n\n```\nresource.type=\"k8s_cluster\"\nlog_id(\"events\")\njsonPayload.message:\"INTERNAL_FORWARDING_RULES_WITH_PEERING_LIMITS_EXCEEDED\"\njsonPayload.reason:\"SyncLoadBalancerFailed\"\n```\n\n### Further information\n\n- [VPC Quotas and Limits](https://cloud.google.com/vpc/docs/quota)\n"
  },
  {
    "path": "website/content/en/rules/gke/ERR/2021_011.md",
    "content": "---\ntitle: \"gke/ERR/2021_011\"\nlinkTitle: \"ERR/2021_011\"\nweight: 1\ntype: docs\ndescription: >\n  ip-masq-agent not reporting errors\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nIf ip-masq-agent is reporting errors, it is possible that the config received\nis invalid. In that case, it is possible that the applied config is not\nreflecting the desired masquerading behavior, which could lead to unexpected\nconnectivity issues.\n\n### Remediation\n\nFor more details on how to configure ip-masq-agent, please review:\n\nYou can use the following Cloud Logging filter to find matching log lines:\n\n```\nresource.type=\"k8s_container\"\nresource.labels.container_name=\"ip-masq-agent\"\nlog_id(\"stderr\")\n```\n\n### Further information\n\n- [ip-masq-agent configuration](https://cloud.google.com/kubernetes-engine/docs/how-to/ip-masquerade-agent#config_agent_configmap)\n"
  },
  {
    "path": "website/content/en/rules/gke/ERR/2021_012.md",
    "content": "---\ntitle: \"gke/ERR/2021_012\"\nlinkTitle: \"ERR/2021_012\"\nweight: 1\ntype: docs\ndescription: >\n  Node pool service account exists and is not disabled.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nDisabling or deleting the service account used by a node pool will render the\nnode pool not functional.\n\n### Remediation\n\nRestore the default compute account or service account that was specified when\nthe node pool was created.\n\n### Further information\n\n- [gcloud beta iam service-accounts\n  undelete](https://cloud.google.com/sdk/gcloud/reference/beta/iam/service-accounts/undelete)\n"
  },
  {
    "path": "website/content/en/rules/gke/ERR/2021_013.md",
    "content": "---\ntitle: \"gke/ERR/2021_013\"\nlinkTitle: \"ERR/2021_013\"\nweight: 1\ntype: docs\ndescription: >\n  GKE cluster firewall rules are configured.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nGKE automatically creates firewall rules for cluster communication. We verify\nthat the VPC firewall rules are present.\n\n### Remediation\n\nIf the firewall rules are not present, it could be because of one of the\nfollowing reasons:\n\n- The firewall rules couldn't be created (for example in a shared VPC scenario)\n- The firewall rules were disabled or deleted\n\n### Further information\n\n- [Automatically created firewall rules](https://cloud.google.com/kubernetes-engine/docs/concepts/firewall-rules)\n- [Providing the GKE Ingress controller permission to manage host project firewall rules](https://cloud.google.com/kubernetes-engine/docs/concepts/ingress#providing_the_ingress_controller_permission_to_manage_host_project_firewall_rules)\n"
  },
  {
    "path": "website/content/en/rules/gke/ERR/2021_014.md",
    "content": "---\ntitle: \"gke/ERR/2021_014\"\nlinkTitle: \"ERR/2021_014\"\nweight: 1\ntype: docs\ndescription: >\n  GKE masters of private clusters can reach the nodes.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nNodes of private clusters must allow certain connections from the masters\n(tcp:443 and tcp:10250)\n\nThe GKE control plane automatically creates a firewall rule called\n`gke-[cluster-name]-[cluster-hash]-master` to allow these connections, but if the\nconnections get blocked, the following could be the reason:\n\n- The firewall rules couldn't be created (for example in a shared VPC scenario)\n- The firewall rules were disabled or deleted\n- There is a higher priority firewall rule configured for the VPC\n- There is a firewall policy at the organization or folder level which\n  blocks these connections.\n\n### Remediation\n\nThe gcpdiag output should tell you if the connection was blocked by a firewall\nrule or policy.\n\n### Further information\n\n- [Automatically created firewall rules](https://cloud.google.com/kubernetes-engine/docs/concepts/firewall-rules)\n"
  },
  {
    "path": "website/content/en/rules/gke/ERR/2021_015.md",
    "content": "---\ntitle: \"gke/ERR/2021_015\"\nlinkTitle: \"ERR/2021_015\"\nweight: 1\ntype: docs\ndescription: >\n  GKE connectivity: node to pod communication.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nAgents and host-network pods from a node must be able to communicate with all\npods on all nodes.\n\nThe GKE control plane automatically creates a firewall rule called\n`gke-[cluster-name]-[cluster-hash]-vms` to allow these connections, but if the\nconnections get blocked, the following could be the reason:\n\n- The firewall rules couldn't be created (for example in a shared VPC scenario)\n- The firewall rules were disabled or deleted\n- There is a higher priority firewall rule configured for the VPC\n- There is a firewall policy at the organization or folder level which\n  blocks these connections.\n\n### Remediation\n\nThe gcpdiag output should tell you if the connection was blocked by a firewall\nrule or policy.\n\n### Further information\n\n- [Automatically created firewall rules](https://cloud.google.com/kubernetes-engine/docs/concepts/firewall-rules)\n"
  },
  {
    "path": "website/content/en/rules/gke/ERR/2022_001.md",
    "content": "---\ntitle: \"gke/ERR/2022_001\"\nlinkTitle: \"ERR/2022_001\"\nweight: 1\ntype: docs\ndescription: >\n  GKE connectivity: pod to pod communication.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nTraffic between all pods on a cluster is required by the Kubernetes networking\nmodel. Following protocols must be allowed: TCP, UDP, SCTP, ICMP, ESP, AH.\n\n### Further information\n\n- [GKE cluster firewall rules](https://cloud.google.com/kubernetes-engine/docs/concepts/firewall-rules#cluster-fws)\n- [Kubernetes network model](https://kubernetes.io/docs/concepts/cluster-administration/networking/#the-kubernetes-network-model)\n"
  },
  {
    "path": "website/content/en/rules/gke/ERR/2022_002.md",
    "content": "---\ntitle: \"gke/ERR/2022_002\"\nlinkTitle: \"ERR/2022_002\"\nweight: 1\ntype: docs\ndescription: >\n  GKE nodes of private clusters can access Google APIs and services.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nPrivate GKE clusters must have Private Google Access enabled on the subnet where\ncluster is deployed.\n\n### Further information\n\n- [GKE Private Clusters](https://cloud.google.com/kubernetes-engine/docs/how-to/private-clusters)\n- [Private Google Access](https://cloud.google.com/vpc/docs/private-google-access)\n"
  },
  {
    "path": "website/content/en/rules/gke/ERR/2022_003.md",
    "content": "---\ntitle: \"gke/ERR/2022_003\"\nlinkTitle: \"ERR/2022_003\"\nweight: 1\ntype: docs\ndescription: >\n  GKE connectivity: load balancer to node communication (ingress).\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nIn order for the Ingress service to work correctly, the network connection from\nthe load balancer must be allowed.\n\n### Further information\n\n- [GKE Ingress firewall rules](https://cloud.google.com/kubernetes-engine/docs/concepts/firewall-rules#ingress-fws)\n- [GKE Ingress](https://cloud.google.com/kubernetes-engine/docs/concepts/ingress)\n- [Health checks](https://cloud.google.com/load-balancing/docs/health-check-concepts)\n"
  },
  {
    "path": "website/content/en/rules/gke/ERR/2023_001.md",
    "content": "---\ntitle: \"gke/ERR/2023_001\"\nlinkTitle: \"ERR/2023_001\"\nweight: 1\ntype: docs\ndescription: >\n  Container File System API quota not exceeded\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nVerify that Image Streaming has not exceeded the Container File System API quota. That might cause a CrashLoopBackOff error on your pods.\n\n### Remediation\n\nYou can use the following Cloud Logging filter to find matching log lines:\n\n```\nresource.type=\"k8s_node\"\nlog_id(\"gcfsd\")\njsonPayload.MESSAGE:\"Quota exceeded for quota metric\"\n```\n\nTo resolve this issue, [increase the following quotas](https://cloud.google.com/docs/quota#requesting_higher_quota):\n\n- Content requests per project per region per minute per region\n- Content requests per project per region\n\n### Further information\n\nSee [public troubleshooting docs](https://cloud.google.com/kubernetes-engine/docs/how-to/image-streaming#quota_exceeded)\nabout possible issues on image streaming.\n"
  },
  {
    "path": "website/content/en/rules/gke/ERR/2023_002.md",
    "content": "---\ntitle: \"gke/ERR/2023_002\"\nlinkTitle: \"ERR/2023_002\"\nweight: 1\ntype: docs\ndescription: >\n  GKE private clusters are VPC-native.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nPrivate cluster is a type of VPC-native cluster and must not be Routes-based.\nVPC-native clusters use alias IP address ranges on GKE nodes and are required\nfor private GKE clusters and for creating clusters on Shared VPCs, as well as many\nother features.\n\n### Remediation\n\nMigrate to VPC-Native private cluster by recreating the cluster.\n\n### Further information\n\n- [VPC-Native best practices](https://cloud.google.com/kubernetes-engine/docs/best-practices/networking#vpc-native-clusters)\n- [Creating a VPC-Native cluster](https://cloud.google.com/kubernetes-engine/docs/how-to/alias-ips)\n"
  },
  {
    "path": "website/content/en/rules/gke/ERR/2023_003.md",
    "content": "---\ntitle: \"gke/ERR/2023_003\"\nlinkTitle: \"ERR/2023_003\"\nweight: 1\ntype: docs\ndescription: >\n  containerd config.toml is valid.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\n`containerd` container runtime is a crucial component of a GKE cluster that\nruns on all nodes. If its configuration file was customized and became\ninvalid, `containerd` can't be started and its node will stay in `NotReady`\nstate.\n\nThe config file in question is `/etc/containerd/config.toml`.\n\n### Remediation\n\nUsually such a change is introduced via a DaemonSet with a privileged\ncontainer.\n\nA short-term remidiation is to disable (delete) the DaemonSet and\nrecreate all affected nodes by scaling the affected nodepools to 0 nodes and\nthen back, to the original value.\n\nA long-term solution is to fix the issue at the source (the application in the\nDaemonSet).\n\nOne of the known DaemonSets that could cause\nthis issue is `twistlock defender` from [Prizma Cloud security suite](https://docs.paloaltonetworks.com/prisma/prisma-cloud),\nwhich could inject configuration entries in old configuration file format to a\nconfiguration file created with a newer configuration file format.\n\nYou can use the following filter to find matching log lines:\n\n```\nresource.type=\"k8s_node\"\nlog_id(\"container-runtime\")\njsonPayload.MESSAGE:\"containerd: failed to load TOML\"\n```\n\n### Further information\n\n- [config.toml - configuration file for containerd](https://github.com/containerd/containerd/blob/main/docs/man/containerd-config.toml.5.md)\n"
  },
  {
    "path": "website/content/en/rules/gke/ERR/2023_004.md",
    "content": "---\ntitle: \"gke/ERR/2023_004\"\nlinkTitle: \"ERR/2023_004\"\nweight: 1\ntype: docs\ndescription: >\n  GKE ingresses are well configured.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nCheck Kubernetes ingress to avoid potential misconfigurations.\n\n### Further information\n\n- [GKE Ingress Configuration](https://cloud.google.com/kubernetes-engine/docs/how-to/ingress-configuration)\n- [GKE Ingress for HTTP(S) Load Balancing](https://cloud.google.com/kubernetes-engine/docs/concepts/ingress)\n"
  },
  {
    "path": "website/content/en/rules/gke/ERR/2023_005.md",
    "content": "---\ntitle: \"gke/ERR/2023_005\"\nlinkTitle: \"ERR/2023_005\"\nweight: 1\ntype: docs\ndescription: >\n  Workloads not reporting misconfigured CNI plugins\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nWorkloads in cluster are unable to setup pod networking which\nis likely to fail here due to CNI plugin issue.\n\nCheck for any recent changes in your CNI plugin.\nVerify working and non working node's /etc/cni content.\nRebuild the node if CNI is broken.\n\nYou can use the following filter to find matching log lines:\n\n```\njsonPayload.MESSAGE =~\"CreatePodSandbox for pod failed.* failed to setup network for sandbox\"\nresource.type=\"k8s_node\"\n```\n\n### Remediation\n\n- [Workaround for cilium cni failures](https://cloud.google.com/kubernetes-engine/docs/how-to/dataplane-v2#workarounds_for_standard_clusters)\n\n### Further information\n"
  },
  {
    "path": "website/content/en/rules/gke/ERR/2023_006.md",
    "content": "---\ntitle: \"gke/ERR/2023_006\"\nlinkTitle: \"ERR/2023_006\"\nweight: 1\ntype: docs\ndescription: >\n  GKE Gateway controller reporting misconfigured annotations in Gateway resource\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nGateway controller creates loadbalancing resources based on annotations\nspecified in gateway resources.\n\nIt expects the user to use correct set of supported annotations name and values.\n\nIt might be case that annotation name has a typo or mistake.\n\nYou can use the following filter to find matching log entries with gateway resource\ncontaining misconfigured annotations:\n\n```\njsonPayload.MESSAGE =~\"Error GWCER101: Annotation\"\nresource.type=\"k8s_cluster\"\n```\n\n### Remediation\n\n- Fix the annotations in gateway resources obtained from above query\n\n### Further information\n"
  },
  {
    "path": "website/content/en/rules/gke/ERR/2023_007.md",
    "content": "---\ntitle: \"gke/ERR/2023_007\"\nlinkTitle: \"ERR/2023_007\"\nweight: 1\ntype: docs\ndescription: >\n  GKE Gateway controller reporting missing or invalid resource references in Gateway resource\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nGateway controller creates urls maps based on HTTPRoute resources.\nIf the HTTP route has invalid reference to gateway or invalid spec,\ncontroller will not be able create url maps.\n\nYou can use the following filter to find matching log entries with gateway resource\ncontaining misconfigured httproute:\n\n```\njsonPayload.MESSAGE =~\"Error GWCER106: Gateway\"\nresource.type=\"k8s_cluster\"\n```\n\n### Remediation\n\n- Fix the HTTProute resource\n\n### Further information\n"
  },
  {
    "path": "website/content/en/rules/gke/ERR/2023_008.md",
    "content": "---\ntitle: \"gke/ERR/2023_008\"\nlinkTitle: \"ERR/2023_008\"\nweight: 1\ntype: docs\ndescription: >\n  GKE Cluster does not have any pods in Crashloopbackoff state.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nCrashLoopBackOff indicates that a container is repeatedly crashing after restarting.\nA container might crash for many reasons, and checking a Pod's logs might aid in\ntroubleshooting the root cause.\n\n### Remediation\n\nFollow the below document for troubleshooting this issue:\nhttps://cloud.google.com/kubernetes-engine/docs/troubleshooting#CrashLoopBackOff\n\n### Further information\n"
  },
  {
    "path": "website/content/en/rules/gke/ERR/2023_009.md",
    "content": "---\ntitle: \"gke/ERR/2023_007\"\nlinkTitle: \"ERR/2023_007\"\nweight: 1\ntype: docs\ndescription: >\n  Missing request for CPU resources.\n---\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n### Description\nError means that HPA is unable to calculate the number of replicas that should\nbe scaled up or down based on the current metrics because there is no request for\nCPU resources specified in the deployment or pod. The HPA requires at least one\nmetric to be specified to scale the deployment or replica set.\n\nYou can use the following filter to find matching log lines:\n```\njsonPayload.message=\"missing request for cpu\"\nresource.type=\"k8s_cluster\"\nseverity=\"WARNING\"\n```\n### Remediation\nTo add a CPU resource request to your deployment configuration, simply include a\nresources section in your deployment configuration file. You may follow the\nsteps in the below guide:\n- https://cloud.google.com/blog/products/containers-kubernetes/kubernetes-best-practices-resource-requests-and-limits\n### Further information\nIf the cluster is in Autopilot cluster, you may follow the below steps to\nconfigure resource requests:\n- https://cloud.google.com/kubernetes-engine/docs/concepts/autopilot-resource-requests\n"
  },
  {
    "path": "website/content/en/rules/gke/ERR/2023_010.md",
    "content": "---\ntitle: \"gke/ERR/2023_010\"\nlinkTitle: \"ERR/2023_010\"\nweight: 1\ntype: docs\ndescription: >\n  NodeLocal DNSCache timeout errors.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n\n### Description\n\nOn clusters with NodeLocal DNSCache enabled sometimes response to a DNS request was not received from kube-dns in 2 seconds and hence the DNS timeout errors crop up.\n\nYou can use the following filter to find matching log lines:\n```\ntextPayload:\"[ERROR] plugin/errors: 2\"\nresource.type=\"k8s_container\"\n```\n\n### Remediation\n\nIncrease the number of kube-dns replicas.\n\n\n### Further information\n\n- https://cloud.google.com/kubernetes-engine/docs/how-to/nodelocal-dns-cache\n"
  },
  {
    "path": "website/content/en/rules/gke/ERR/2023_011.md",
    "content": "---\ntitle: \"gke/ERR/2023_011\"\nlinkTitle: \"ERR/2023_011\"\nweight: 1\ntype: docs\ndescription: >\n  GKE Metadata Server isn't reporting errors for pod IP not found\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nThe gke-metadata-server DaemonSet uses pod IP addresses to match client\nrequests to Kubernetes Service Accounts. Pod IP not found errors may indicate\na misconfiguration or a workload that is not compatible with GKE Workload Identity.\n\nYou can use the following Cloud Logging filter to find errors in the GKE Metadata Server logs:\n\n```\nresource.type=\"k8s_container\"\nlog_id(\"stderr\")\nresource.labels.container_name=\"gke-metadata-server\"\nseverity=ERROR\n```\n\nExamples from **gke-metadata-server --component-version=0.4.276**:\n> [conn-id:bc54e859ac0e7269] Unable to find pod: generic::not_found: retry budget exhausted (50 attempts): ip \"169.254.123.2\" not recorded in the snapshot\n>\n> [conn-id:bc54e859ac0e7269 rpc-id:29b6f8cbdbdaafb5] Caller is not authenticated\n\nOlder example from **gke-metadata-server --component-version=0.4.275**:\n> [ip:172.17.0.2 pod:/ rpc-id:387a551d4b506f31] Failed to find Workload Identity configuration for pod: while retrieving pod from cache: pod \"\" not found\n\nNote: **172.17.0.0/16** and **169.254.123.0/24** are the default ranges used by the Docker daemon for container networking.\n\n### Remediation\n\nOne known cause of these errors is use of the deprecated legacy logging agent on [COS GKE Nodes](https://cloud.google.com/container-optimized-os/docs/how-to/logging) via project metadata `google-logging-enabled=true` without `google-logging-use-fluentbit=true` which was introduced in COS Milestone 105. Enabling the fluent-bit agent will automatically update all existing nodes and prevent them from generating pod not found error messages. In [COS Milestone 109](https://cloud.google.com/container-optimized-os/docs/concepts/versioning) the fluent-bit agent will become the default when enabling logging via project metadata.\n\nAnother cause could be docker-in-docker pods (often used by CI/CD systems to build containers) running with `hostNetwork: true` or other docker based VM agents running outside Kubernetes. If you identify a workload that is not compatible with the GKE Metadata Server, you can [create a nodepool](https://cloud.google.com/sdk/gcloud/reference/container/node-pools/create#--workload-metadata) with `--workload-metadata=GCE_METADATA` and use [taints/tolerations](https://cloud.google.com/kubernetes-engine/docs/how-to/node-taints) to specify where the workload should run.\n\n### Further information\n\nSee [Workload Identity docs](https://cloud.google.com/kubernetes-engine/docs/concepts/workload-identity) for more restrictions and alternatives.\n"
  },
  {
    "path": "website/content/en/rules/gke/ERR/2023_012.md",
    "content": "---\ntitle: \"gke/ERR/2022_012\"\nlinkTitle: \"ERR/2022_012\"\nweight: 1\ntype: docs\ndescription: >\n  Missing request for memory resources.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\nError means that HPA is unable to calculate the number of replicas that should\nbe scaled up or down based on the current metrics because there is no request for\nmemory resources specified in the deployment or pod. The HPA requires at least one\nmetric to be specified to scale the deployment or replica set.\n\nYou can use the following filter to find matching log lines:\n```\njsonPayload.message=\"missing request for memory\"\nresource.type=\"k8s_cluster\"\nseverity=\"WARNING\"\n```\n### Remediation\nTo add a memory resource request to your deployment configuration, simply include a\nresources section in your deployment configuration file. You may follow the\nsteps in the below guide:\n- https://cloud.google.com/blog/products/containers-kubernetes/kubernetes-best-practices-resource-requests-and-limits\n### Further information\nIf the cluster is in Autopilot cluster, you may follow the below steps to\nconfigure resource requests:\n- https://cloud.google.com/kubernetes-engine/docs/concepts/autopilot-resource-requests\n"
  },
  {
    "path": "website/content/en/rules/gke/ERR/2024_001.md",
    "content": "---\ntitle: \"gke/ERR/2024_001\"\nlinkTitle: \"ERR/2024_001\"\nweight: 1\ntype: docs\ndescription: >\n  Checking for no Pod Security Admission violations in the project.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nThe rule checks the project for no Pod Security Admission violations.\n\nVerify that there are no PSA violations in any namespace of any cluster in the\nproject.\nIf there are any violations inspect the logs to find what caused the violation\nand if required adjust the policy or pod manifest.\n\nUse below logging filter to find the logs:\n\n```\nlog_id(\"cloudaudit.googleapis.com/activity\")\nresource.type=\"k8s_cluster\"\nresource.labels.cluster_name=\"CLUSTER_NAME\"\nseverity=DEFAULT\nprotoPayload.response.message:\"violates PodSecurity\"\nprotoPayload.response.reason=\"Forbidden\"\nprotoPayload.resourceName=\"RESOURCE_NAME\"\n```\n\nReplace\n  * CLUSTER_NAME with the name of the cluster affected\n  * RESOURCE_NAME with the pod resource output generated by the rule\n\n### Remediation\n\nIf the workload is of interest, the fix would be to analyze the violation by inspecting `protoPayload.response.message` of the log and referring to the [Pod Security Standards Profile](https://kubernetes.io/docs/concepts/security/pod-security-standards/) to make the required corrections in the workload manifest.\n\n### Further information\n\n1. https://cloud.google.com/kubernetes-engine/docs/how-to/podsecurityadmission\n2. https://kubernetes.io/docs/concepts/security/pod-security-admission/\n"
  },
  {
    "path": "website/content/en/rules/gke/ERR/2024_002.md",
    "content": "---\ntitle: \"gke/ERR/2024_002\"\nlinkTitle: \"ERR/2024_002\"\nweight: 1\ntype: docs\ndescription: >\n  GKE Webhook failures can seriously impact GKE Cluster.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nImpact typically depends on the webhook failure policy and what type of GKE API\nare handled by the webhook.\n\nIn some cases, a failing customer created webhook can render a cluster unusable\nuntil corrected. Inability to create Pod (and similar)can lead to system pod not\ngetting scheduled / new pod not reaching a healthy state.\n\n### Remediation\n\n### Further information\n"
  },
  {
    "path": "website/content/en/rules/gke/ERR/2024_003.md",
    "content": "---\ntitle: \"gke/ERR/2024_003\"\nlinkTitle: \"ERR/2024_003\"\nweight: 1\ntype: docs\ndescription: >\n  GKE nodes service account permissions fit container.defaultNodeServiceAccount role\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: Something that is very likely to be wrong\n\n### Description\n\nThe service account used by GKE nodes should possess the permissions of the container.defaultNodeServiceAccount role,\notherwise ingestion of logs or metrics won't work.\n\n### Remediation\n\nMake sure your GKE node pool service accounts have the following role binding in the IAM policy\n\n- Principal: GKE node pool service account\n- Role: `container.defaultNodeServiceAccount`\n\nor use a custom role which\ncontains [those permissions](https://cloud.google.com/iam/docs/understanding-roles#container.defaultNodeServiceAccount)\n\n### Further information\n\n- [Hardening your cluster - Use least privilege IAM service Accounts](https://cloud.google.com/linhttps://cloud.google.com/kubernetes-engine/docs/how-to/hardening-your-cluster#use_least_privilege_sa)\n"
  },
  {
    "path": "website/content/en/rules/gke/ERR/2025_001.md",
    "content": "---\ntitle: \"gke/ERR/2025_001\"\nlinkTitle: \"ERR/2025_001\"\nweight: 1\ntype: docs\ndescription: >\n  GKE cluster complies with the serial port logging organization policy.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nWhen the constraints/compute.disableSerialPortLogging organization policy is enabled,\nGKE clusters must be created with logging disabled (serial-port-logging-enable: 'false'),\notherwise the creation will fail.\nIf cluster was initially created with \"serial-port-logging-enable: 'true'\" and the organization policy was enabled after that, all new node pools have to be created with explicit \"serial-port-logging-enable: 'false'\"\n\n\n### Remediation\nCluster metadata and nodepool metadata can be defined only during the creation and they cannot be modified afterwards. To remediate you need to take either of the following steps:\n1) Disable the organization policy ex.  gcloud resource-manager org-policies disable-enforce \"compute.disableSerialPortAccess\" --organization=112233xx4455\n2) Recreate all non-compliant clusters ex. gcloud container clusters create example-cluster \\\n--metadata serial-port-logging-enable=false\n3) Recreate all non-compliant node pools ex. gcloud container node-pools create node-pool-1 \\\n--cluster=example-cluster --metadata serial-port-logging-enable=false\n### Further information\n\n1. https://cloud.google.com/resource-manager/docs/organization-policy/creating-managing-policies\nhttps://cloud.google.com/sdk/gcloud/reference/resource-manager/org-policies/disable-enforce\n2. https://cloud.google.com/sdk/gcloud/reference/container/clusters/create#--metadata\n3. https://cloud.google.com/sdk/gcloud/reference/container/node-pools/create#--metadata\n"
  },
  {
    "path": "website/content/en/rules/gke/SEC/2021_001.md",
    "content": "---\ntitle: \"gke/SEC/2021_001\"\nlinkTitle: \"SEC/2021_001\"\nweight: 1\ntype: docs\ndescription: >\n  GKE nodes don't use the GCE default service account.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: SEC - Potential security issue\n\n### Description\n\nThe GCE default service account has more permissions than are required to run\nyour Kubernetes Engine cluster.\n\n### Remediation\n\nYou should either use GKE Workload Identity or create and use a minimally\nprivileged service account.\n\n### Further information\n\n- [Hardening your cluster's security](https://cloud.google.com/kubernetes-engine/docs/how-to/hardening-your-cluster#use_least_privilege_sa)\n"
  },
  {
    "path": "website/content/en/rules/gke/SEC/2023_001.md",
    "content": "---\ntitle: \"gke/SEC/2023_001\"\nlinkTitle: \"SEC/2023_001\"\nweight: 1\ntype: docs\ndescription: >\n  GKE Workload Identity is enabled\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: SEC - Potential security issue\n\n### Description\n\nWorkload Identity allows a Kubernetes service account in your GKE cluster\nto act as an IAM service account. Pods that use the configured Kubernetes\nservice account automatically authenticate as the IAM service account when\naccessing [Google Cloud APIs](https://cloud.google.com/apis).\nUsing Workload Identity allows you to assign distinct, fine-grained identities\nand authorization for each application in your cluster,\nalong with protecting the node's metadata (GCE MD).\n\nWithout Workload Identity, node's [Service Account](https://cloud.google.com/iam/docs/service-account-overview)\nis used by the pods/containers that has access to subset of GCP APIs.\n\n### Remediation\n[Enable and configure Workload Identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity)\non your Google Kubernetes Engine (GKE) clusters.\n\n### Further information\n\n -  [Workload Identity](https://cloud.google.com/kubernetes-engine/docs/concepts/workload-identity)\n -  [Enabling Workload Identity](https://cloud.google.com/kubernetes-engine/docs/how-to/hardening-your-cluster#workload_identity)\n -  [Metadata concealment](https://cloud.google.com/kubernetes-engine/docs/how-to/protecting-cluster-metadata#concealment)\n"
  },
  {
    "path": "website/content/en/rules/gke/WARN/2021_001.md",
    "content": "---\ntitle: \"gke/WARN/2021_001\"\nlinkTitle: \"WARN/2021_001\"\nweight: 1\ntype: docs\ndescription: >\n  GKE master version available for new clusters.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nThe GKE master version should be a version that is available for new clusters.\nIf a version is not available it could mean that it is deprecated, or possibly\nretired due to issues with it.\n\n### Remediation\n\nUpgrade the GKE master to a supported version.\n\n### Further information\n\n- [Standard cluster\n  upgrades](https://cloud.google.com/kubernetes-engine/docs/concepts/cluster-upgrades)\n"
  },
  {
    "path": "website/content/en/rules/gke/WARN/2021_002.md",
    "content": "---\ntitle: \"gke/WARN/2021_002\"\nlinkTitle: \"WARN/2021_002\"\nweight: 1\ntype: docs\ndescription: >\n  GKE nodes version available for new clusters.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nThe GKE nodes version should be a version that is available for new clusters. If\na version is not available it could mean that it is deprecated, or possibly\nretired due to issues with it.\n\n### Remediation\n\nUpgrade the GKE nodes to a supported version.\n\n### Further information\n\n- [Standard cluster\n  upgrades](https://cloud.google.com/kubernetes-engine/docs/concepts/cluster-upgrades)\n"
  },
  {
    "path": "website/content/en/rules/gke/WARN/2021_003.md",
    "content": "---\ntitle: \"gke/WARN/2021_003\"\nlinkTitle: \"WARN/2021_003\"\nweight: 1\ntype: docs\ndescription: >\n  GKE cluster size close to maximum allowed by pod range\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nThe maximum amount of nodes in a GKE cluster is limited based on its pod CIDR\nrange. This test checks if the cluster is above the threshold of 80% for pod\nCIDR utilization.\n\n### Further information\n\n- [GKE IP address utilization insights](https://cloud.google.com/network-intelligence-center/docs/network-analyzer/insights/kubernetes-engine/gke-ip-utilization)\n- [Optimizing IP address allocation](https://cloud.google.com/kubernetes-engine/docs/how-to/flexible-pod-cidr)\n"
  },
  {
    "path": "website/content/en/rules/gke/WARN/2021_004.md",
    "content": "---\ntitle: \"gke/WARN/2021_004\"\nlinkTitle: \"WARN/2021_004\"\nweight: 1\ntype: docs\ndescription: >\n  GKE system workloads are running stable.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nGKE includes some system workloads running in the user-managed nodes which are\nessential for the correct operation of the cluster. We verify that restart count\nof containers in one of the system namespaces (kube-system, istio-system,\ncustom-metrics) stayed stable in the last 24 hours.\n\n### Remediation\n\nYou can use this Cloud Monitoring query to find what system workloads are\nrestarting:\n\n```\nfetch k8s_container\n| metric 'kubernetes.io/container/restart_count'\n| filter (resource.namespace_name == 'kube-system' ||\n          resource.namespace_name == 'istio-system')\n| align delta(1h)\n| every 1h\n| group_by [resource.pod_name], .sum\n| filter val() > 0\n```\n\n### Further information\n\n- [Observing your GKE\n  clusters](https://cloud.google.com/stackdriver/docs/solutions/gke/observing)\n"
  },
  {
    "path": "website/content/en/rules/gke/WARN/2021_005.md",
    "content": "---\ntitle: \"gke/WARN/2021_005\"\nlinkTitle: \"WARN/2021_005\"\nweight: 1\ntype: docs\ndescription: >\n  GKE nodes have good disk performance.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nDisk performance is essential for the proper operation of GKE nodes. If\ntoo much IO is done and the disk latency gets too high, system components\ncan start to misbehave. Often the boot disk is a bottleneck because it is\nused for multiple things: the operating system, docker images, container\nfilesystems (usually including /tmp, etc.), and EmptyDir volumes.\n\n### Remediation\n\nYou can use the following Cloud Monitoring query to determine the average\ndisk latency for your GKE nodes:\n\n```\nfetch gce_instance\n  | {{ metric 'compute.googleapis.com/guest/disk/operation_time' ;\n      metric 'compute.googleapis.com/guest/disk/operation_count' }}\n  | {within_str}\n  | filter metric.device_name = 'sda'\n  | group_by [resource.instance_id], .sum()\n  | every 1m\n  | ratio\n  | value(val() > cast_units({SLO_LATENCY_MS}, \"ms\"))\n  | group_by 1d, [ .count_true, .count ]\n```\n\n### Further information\n\n- [Block storage performance](https://cloud.google.com/compute/docs/disks/performance)\n"
  },
  {
    "path": "website/content/en/rules/gke/WARN/2021_006.md",
    "content": "---\ntitle: \"gke/WARN/2021_006\"\nlinkTitle: \"WARN/2021_006\"\nweight: 1\ntype: docs\ndescription: >\n  GKE nodes aren't reporting conntrack issues.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nThe following string was found in the serial logs:\n`nf_conntrack: table full`. This indicates that the Linux Kernel connection\ntracking table is full.\n\n### Remediation\n\nSee the *GKE Troubleshooting* guide linked below.\n\nTo find the matching log lines, use the following filter in Cloud Logging:\n\n```\nresource.type=\"gce_instance\"\nlog_id(\"serialconsole.googleapis.com/serial_port_1_output\")\ntextPayload:\"nf_conntrack: table full\"\n```\n\n### Further information\n\n- [GKE Troubleshooting](https://cloud.google.com/kubernetes-engine/docs/troubleshooting)\n"
  },
  {
    "path": "website/content/en/rules/gke/WARN/2021_007.md",
    "content": "---\ntitle: \"gke/WARN/2021_007\"\nlinkTitle: \"WARN/2021_007\"\nweight: 1\ntype: docs\ndescription: >\n  GKE nodes have enough free space on the boot disk.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nGKE nodes need free space on their boot disks to be able to function properly.\nIf /var is getting full, it might be because logs are not being rotated\ncorrectly, or maybe a container is creating too much data in the overlayfs.\n\n### Remediation\n\nYou can use the following Cloud Monitoring query to determine the nodes with\nfull disk:\n\n```\nfetch gce_instance\n  | metric 'compute.googleapis.com/guest/disk/bytes_used'\n  | filter metric.device_name == 'sda1'\n  | {within_str}\n  | next_older 5m\n  | filter_ratio_by [resource.instance_id], metric.state == 'free'\n  | every 5m\n```\n\n### Further information\n"
  },
  {
    "path": "website/content/en/rules/gke/WARN/2021_008.md",
    "content": "---\ntitle: \"gke/WARN/2021_008\"\nlinkTitle: \"WARN/2021_008\"\nweight: 1\ntype: docs\ndescription: >\n  Istio/ASM version not deprecated nor close to deprecation in GKE\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nAt the end of 2021, those Istio/ASM versions of 1.10.2 and below reached\nend of life and not supported. It is recommended that you upgrade to\nASM Managed Control Plane or Istio version 1.10.3+ to avoid outages.\n\n### Remediation\n\nIt is recommended that you upgrade to ASM Managed Control Plane or Istio\nversion 1.10.3+ to avoid outages.\n\n### Further information\n\n- [GitHub issue](https://github.com/istio/istio/issues/34665)\n- [Support status of Istio releases](https://istio.io/latest/docs/releases/supported-releases/#support-status-of-istio-releases)\n"
  },
  {
    "path": "website/content/en/rules/gke/WARN/2021_009.md",
    "content": "---\ntitle: \"gke/WARN/2021_009\"\nlinkTitle: \"WARN/2021_009\"\nweight: 1\ntype: docs\ndescription: >\n  GKE nodes use a containerd image.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nNode images with the Docker runtime are deprecated.\n\n### Remediation\n\nSwitch to the containerd image types.\n\n### Further information\n\n- [GKE node images](https://cloud.google.com/kubernetes-engine/docs/concepts/node-images)\n- [Using containerd](https://cloud.google.com/kubernetes-engine/docs/concepts/using-containerd)\n"
  },
  {
    "path": "website/content/en/rules/gke/WARN/2022_001.md",
    "content": "---\ntitle: \"gke/WARN/2022_001\"\nlinkTitle: \"WARN/2022_001\"\nweight: 1\ntype: docs\ndescription: >\n  GKE clusters with workload identity are regional.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nWorkload Identity is highly dependent of the availability of the cluster control\nplane during token fetches. It is recommended to use regional clusters for the\nproduction workload with Workload Identity enabled.\n\n### Further information\n\n- [GKE Regional clusters](https://cloud.google.com/kubernetes-engine/docs/concepts/regional-clusters)\n- [Workload Identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity)\n- [Hardening your cluster](https://cloud.google.com/kubernetes-engine/docs/how-to/hardening-your-cluster#workload_identity)\n"
  },
  {
    "path": "website/content/en/rules/gke/WARN/2022_002.md",
    "content": "---\ntitle: \"gke/WARN/2022_002\"\nlinkTitle: \"WARN/2022_002\"\nweight: 1\ntype: docs\ndescription: >\n  GKE metadata concealment is not in use\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nMetadata concealment is scheduled to be deprecated and removed in the future.\nWorkload Identity replaces the need to use metadata concealment and the two\napproaches are incompatible. It is recommended that you use Workload Identity\ninstead of metadata concealment.\n\n### Remediation\n\nMigrate your node pools with metadata concealment enabled to node pools with\nWorkload Identity.\n\n### Further information\n\n- [Metadata concealment](https://cloud.google.com/kubernetes-engine/docs/how-to/protecting-cluster-metadata#concealment)\n- [Workload Identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity)\n"
  },
  {
    "path": "website/content/en/rules/gke/WARN/2022_003.md",
    "content": "---\ntitle: \"gke/WARN/2022_003\"\nlinkTitle: \"WARN/2022_003\"\nweight: 1\ntype: docs\ndescription: >\n  GKE service account permissions to manage project firewall rules.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nVerify that the Google Kubernetes Engine service account has the Compute Network\nAdmin role or custom role with [sufficient fine-grained permissions](https://cloud.google.com/kubernetes-engine/docs/concepts/ingress#providing_the_ingress_controller_permission_to_manage_host_project_firewall_rules)\nto manage firewall rules in the current or host project with Shared VPC.\n\n### Remediation\n\n### Further information\n\n- [GKE Ingress](https://cloud.google.com/kubernetes-engine/docs/concepts/ingress#ingress_for_external_and_internal_traffic)\n- [Shared VPC](https://cloud.google.com/kubernetes-engine/docs/concepts/ingress#shared_vpc)\n"
  },
  {
    "path": "website/content/en/rules/gke/WARN/2022_004.md",
    "content": "---\ntitle: \"gke/WARN/2022_004\"\nlinkTitle: \"WARN/2022_004\"\nweight: 1\ntype: docs\ndescription: >\n  Cloud Logging API enabled when GKE logging is enabled\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nIf Cloud Logging API is disabled, while GKE logging is enabled the Workload\nand Node logs won't be ingested, and thus, won't be visible in Logs Explorer.\n\n### Remediation\n\nCloud Logging API can be enabled in the Cloud Console, or by running the\nfollowing command:\n\n```\ngcloud services enable logging.googleapis.com --project={project-id}\n```\n\n### Further information\n"
  },
  {
    "path": "website/content/en/rules/gke/WARN/2022_005.md",
    "content": "---\ntitle: \"gke/WARN/2022_005\"\nlinkTitle: \"WARN/2022_005\"\nweight: 1\ntype: docs\ndescription: >\n  NVIDIA GPU device drivers are installed on GKE nodes with GPU\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nAfter adding GPU nodes to the GKE cluster, the NVIDIA's device drivers should be installed in the nodes. Google provides a DaemonSet that will install for the drivers. This rule detects that if the `nvidia-driver-installer` DaemonSet is missing using the `kubernetes.io/container/uptime` metric.\n\n### Remediation\n\nInstalling NVIDIA GPU device drivers based on the node systems. Refer to the section in [Running GPUs](https://cloud.google.com/kubernetes-engine/docs/how-to/gpus#installing_drivers) for installation instructions for Container-Optimized OS (COS) and Ubuntu nodes.\n\n\n### Further information\n\n[Running GPUs](https://cloud.google.com/kubernetes-engine/docs/how-to/gpus)\n"
  },
  {
    "path": "website/content/en/rules/gke/WARN/2022_006.md",
    "content": "---\ntitle: \"gke/WARN/2022_006\"\nlinkTitle: \"WARN/2022_006\"\nweight: 1\ntype: docs\ndescription: >\n  GKE NAP nodes use a containerd image.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nGKE will stop supporting node images that use Docker as the runtime in GKE version 1.24 and later.\n\n### Remediation\n\nSwitch to the containerd image types.\n\n### Further information\n\n- [GKE NAP node images](https://cloud.google.com/kubernetes-engine/docs/how-to/node-auto-provisioning#default-image-type)\n- [Using containerd](https://cloud.google.com/kubernetes-engine/docs/concepts/using-containerd)\n- [Migrating from Docker to containerd](https://cloud.google.com/kubernetes-engine/docs/deprecations/docker-containerd)\n"
  },
  {
    "path": "website/content/en/rules/gke/WARN/2022_007.md",
    "content": "---\ntitle: \"gke/WARN/2022_007\"\nlinkTitle: \"WARN/2022_007\"\nweight: 1\ntype: docs\ndescription: >\n  GKE nodes need Storage API access scope to retrieve build artifacts\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nGKE nodes must have `storage.googleapis.com` API access scope to retrieve build artifacts.\nThese artifacts can be binaries/configs for node bootstrapping process or images from private Container or Artifact Registry repositories. Nodes may report connection timeouts during node bootstrapping or `401 Unauthorized` if they cannot pull from a private repositories.\n\n### Remediation\n\nThe [best practice](https://cloud.google.com/compute/docs/access/service-accounts#scopes_best_practice) when it comes to access scopes is to set the `cloud-platform` access scope and then control the service account's access by granting it IAM roles. Alternatively, use the `gke-default` alias when creating node pools or clusters to provide all the [scopes required for GKE](https://cloud.google.com/sdk/gcloud/reference/container/clusters/create#--scopes) to run smoothly.\n\n### Further information\n\n- [Cannot pull images from private container registry repository](https://cloud.google.com/kubernetes-engine/docs/troubleshooting#401_unauthorized_cannot_pull_images_from_private_container_registry_repository)\n- [Storage API Scopes](https://cloud.google.com/storage/docs/authentication#oauth-scopes)\n- [Access required for Artifact Registry](https://cloud.google.com/artifact-registry/docs/access-control#gcp)\n- [Access required for Container Registry](https://cloud.google.com/container-registry/docs/access-control#gce)\n"
  },
  {
    "path": "website/content/en/rules/gke/WARN/2022_008.md",
    "content": "---\ntitle: \"gke/WARN/2022_008\"\nlinkTitle: \"WARN/2022_008\"\nweight: 1\ntype: docs\ndescription: >\n  GKE connectivity: possible dns timeout in some gke versions.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nSome GKE versions (starting with 1.18.16-gke.300) have DNS timeout issues\nwhen intranode visibility is enabled and\nif the client Pod and kube-dns Pod are located on the same node.\nSee: https://cloud.google.com/kubernetes-engine/docs/how-to/intranode-visibility#dns_timeouts\n\n### Remediation\n\n### Further information\n"
  },
  {
    "path": "website/content/en/rules/gke/WARN/2023_001.md",
    "content": "---\ntitle: \"gke/WARN/2023_001\"\nlinkTitle: \"WARN/2023_001\"\nweight: 1\ntype: docs\ndescription: >\n  Container File System has the required scopes for Image Streaming\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nVerify GKE nodes have the required scopes to use Image Streaming.\n\n### Remediation\n\nYou can use the following Cloud Logging filter to find matching log lines:\n\n```\nresource.type=\"k8s_node\"\nlog_id(\"gcfsd\")\njsonPayload.MESSAGE:\"Request had insufficient authentication scopes\"\n```\n\nTo resolve this issue, add the `devstorage.read_only` scope to the cluster or node pool\n\n### Further information\n\nSee https://cloud.google.com/kubernetes-engine/docs/how-to/image-streaming#permissiondenied\n"
  },
  {
    "path": "website/content/en/rules/gke/WARN/2023_002.md",
    "content": "---\ntitle: \"gke/WARN/2023_002\"\nlinkTitle: \"WARN/2023_002\"\nweight: 1\ntype: docs\ndescription: >\n  GKE workload timeout to Compute Engine metadata server.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nIf the workload uses a Google Authentication library, the default timeout\nfor requests to the Compute Engine Metadata server might be too aggressive.\n\nFailed requests may return something like 'DefaultCredentialsError'.\n\n### Remediation\n\nCheck if you are possibly using a Google Authentication library and the requests to the\nmetadata server are timing out. If so, try increasing the default timeout.\n\n### Further information\n\nFor google-auth-library-python, it's possible to set the environment variable GCE_METADATA_TIMEOUT\nto increase the [default timeout](https://github.com/googleapis/google-auth-library-python/blob/3fcd31984a019e183debcb6a234821dae0b2af27/google/auth/compute_engine/_metadata.py#L58) of 3 seconds.\n\nRead more about [Workload Identity troubleshooting](https://cloud.google.com/kubernetes-engine/docs/troubleshooting/troubleshooting-security#workload-identity)\n"
  },
  {
    "path": "website/content/en/rules/gke/WARN/2023_003.md",
    "content": "---\ntitle: \"gke/WARN/2023_003\"\nlinkTitle: \"WARN/2023_003\"\nweight: 1\ntype: docs\ndescription: >\n  Cloud Monitoring API enabled when GKE monitoring is enabled\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nIf Cloud Monitoring API is disabled, while GKE monitoring is enabled the\nmonitoring metrics won't be ingested, and thus, won't be visible in Cloud\nMonitoring.\n\n### Remediation\n\nCloud Monitoring API can be [enabled in the Cloud Console](https://cloud.google.com/monitoring/api/enable-api),\nor by running the following command:\n\n```\ngcloud services enable monitoring.googleapis.com --project={project-id}\n```\n\n### Further information\n"
  },
  {
    "path": "website/content/en/rules/gke/WARN/2023_004.md",
    "content": "---\ntitle: \"gke/WARN/2023_004\"\nlinkTitle: \"WARN/2023_004\"\nweight: 1\ntype: docs\ndescription: >\n  A Node Pool doesn't have too low `maxPodsPerNode` number\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nModern GKE clusters could run multiple system DaemonSets, and enabling a GKE\nfeature could add another DaemonSet or two. 7+ DaemonSets is the norm for an\naverage GKE cluster. Keeping a small reserve (1-2 slots) for non-DaemonSet pods\nrequires close attention, as enabling a new GKE feature or adding a new\nDeamonSet could prevent normal workload scheduling as all the available slots\ncould be occupied by system or custom DaemonSet pods. This could also cause the\nCluster Autoscaler to misbehave: it could add new nodes and remove them promptly\nas empty ones, because no pods except DaemonSet ones can be scheduled on the\nnodes.\n\nNote that with new versions of GKE, some features could be enabled by default,\nbringing a DeamonSet along.\n\nHere is an incomplete list of system GKE DaemonSets that are added by a\ncorresponding GKE-feature:\n\n| \\#  | DeamonSet name            | GKE Feature                                                                                |\n| --- | ------------------------- | ------------------------------------------------------------------------------------------ |\n| 1   | kube-proxy                | non-DPv2 clusters                                                                          |\n| 2   | konnectivity-agent        | some GKE <v1.27 clusters, all GKE v1.27+ clusters                                          |\n| 3   | fluentbit-gke             | GKE Logging                                                                                |\n| 4   | gke-metrics-agent         | GKE Monitoring                                                                             |\n| 5   | pdcsi-node                | CSI-enabled clusters == (almost) all v1.18+ clusters                                       |\n| 6   | collector                 | GMP-enabled clusters, enabled by default on v1.25 (Autopilot) and v1.27 (Standard)clusters |\n| 7   | netd                      | Workload Identity, Infra-node visibility, other                                            |\n| 8   | anetd                     | DPv2 clusters                                                                              |\n| 9   | calico-node               | Calico Network Policies                                                                    |\n| 10  | container-watcher         | Container Threat Detection                                                                 |\n| 11  | gke-metadata-server       | Workload Identity                                                                          |\n| 12  | nvidia-gpu-device-plugin  | GKE TPUs/GPUs                                                                              |\n| 13  | nccl-fastsocket-installer | nVidia NCCL Fast Socket                                                                    |\n\n`maxPodsPerNode` >= 16 should be a safer option.\n\n### Remediation\n\nRecreate the Node Pool with higher (>=16) `maxPodsPerNode`. Alternatively, you\ncan create a new Node Pool and migrate your workloads to the new one.\n\n### Further information\n\n-   [Migrate your workloads to another Node Pool](https://cloud.google.com/kubernetes-engine/docs/tutorials/migrating-node-pool#step_4_migrate_the_workloads)\n"
  },
  {
    "path": "website/content/en/rules/gke/WARN/2024_001.md",
    "content": "---\ntitle: \"gke/WARN/2024_001\"\nlinkTitle: \"WARN/2024_001\"\nweight: 1\ntype: docs\ndescription: >\n  GKE Node Auto Provisioning scales nodes to match workload demands.\n---\n\n**Product**:\n[Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nIf a GKE cluster has Node Auto Provisioning (NAP) enabled, resource limits\nare configured to support workload scaling. Increased demand triggers\nsuccessful node creation, ensuring application continuity.\n\nIf NAP resource limits (CPU, memory) are configured too low, the autoscaler\nmay be unable to add new nodes during high demand. This could potentially\ncause application disruptions.  To prevent this, ensure NAP resource limits\nare set appropriately or consider manually scaling node pools as needed.\n\n### Remediation\n\nUse the following search filter to identify the issue in Cloud Logging.\n\n- **Project:** Your Project Name (`<project_id>`)\n- **Cluster:** Your Cluster's Name (`<cluster_name>`)\n- **Filter:**\n\n```lql\nresource.type=\"k8s_cluster\"\nresource.labels.cluster_name=\"<cluster_name>\"\nlogName=\"projects/<project_id>/logs/container.googleapis.com%2Fcluster-autoscaler-visibility\"\njsonPayload.noDecisionStatus.noScaleUp.unhandledPodGroups.napFailureReasons.messageId=\"no.scale.up.nap.pod.zonal.resources.exceeded\"\n```\n\nTo fix the issue, either increase your NAP resource limits or manually scale\nyour node pools.\n\nIncrease NAP resource limits:\n\n1. Review your cluster's typical workload patterns to estimate the appropriate\n   new resource limits for NAP.\n2. Use the Google Cloud Console or gcloud commands to modify the NAP settings,\n   ensuring the new limits provide sufficient headroom for your application's\n   workload spikes.\n\nManually scale your node pools:\n\n- If you cannot confidently increase NAP resource limits or need an immediate\n  workaround, manually add nodes to the affected node pools. This is a temporary\n  solution, and you should still investigate why the cluster needs additional\n  nodes.\n\n### Further information\n\nRead more about configuring Node Auto Provisioning in the\n[documentation](https://cloud.google.com/kubernetes-engine/docs/how-to/node-auto-provisioning).\n"
  },
  {
    "path": "website/content/en/rules/gke/WARN/2024_002.md",
    "content": "---\ntitle: \"gke/WARN/2024_002\"\nlinkTitle: \"WARN/2024_002\"\nweight: 1\ntype: docs\ndescription: >\n  Number of KSAs in the workload Identity-enabled clusters.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nGKE metadata server pods may experience a crash loop scenario when the number of\nKubernetes Service Accounts within the cluster surpasses three thousand.\n\n\n### Remediation\n\nTo restore functionality to the GKE metadata server,\nreduce the number of service accounts in your cluster to less than 3,000.\n\n\n### Further information\n\n- [Metadata Server Crashes](https://cloud.google.com/kubernetes-engine/docs/troubleshooting/authentication#metadata-server-crashes)\n"
  },
  {
    "path": "website/content/en/rules/gke/WARN/2024_003.md",
    "content": "---\ntitle: \"gke/WARN/2024_003\"\nlinkTitle: \"WARN/2024_003\"\nweight: 1\ntype: docs\ndescription: >\n Ingress creation is successful if service is correctly mapped\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nIf the service associated with an existing Ingress is inadvertently deleted,\nthe Ingress is left in a \"dangling\" or orphaned state. This occurs because the\nIngress relies on the presence of the mapped service to route incoming traffic\neffectively. Consequently, the Ingress becomes unable to fulfill its primary\nfunction of directing requests to the intended service.\n\nError Seen in Cloud logging/UI: \"Translation failed: invalid ingress spec:\\\ncould not find service\"\n\n### Remediation\n\nTo fix a dangling or ineffective Ingress in GKE,  recreate the missing service,\nupdate the Ingress to point to the correct service.\n\n### Further information\n"
  },
  {
    "path": "website/content/en/rules/gke/WARN/2024_004.md",
    "content": "---\ntitle: \"gke/WARN/2024_004\"\nlinkTitle: \"WARN/2024_004\"\nweight: 1\ntype: docs\ndescription: >\n Ingress creation is successful if Backendconfig crd is correctly mapped\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nAny custom settings defined in the BackendConfig (like timeouts, health checks, etc.)\nwill no longer apply to the Ingress.\nError Seen in Cloud logging/UI: \"Translation failed: invalid ingress spec: error getting BackendConfig\nfor port\"\n\n### Remediation\n\nIf the BackendConfig linked to your GKE Ingress is deleted, you'll need to recreate it\n(either from a backup or by configuring it anew). Then, update your Ingress resource to reference this new BackendConfig.\n\n### Further information\n"
  },
  {
    "path": "website/content/en/rules/gke/WARN/2024_005.md",
    "content": "---\ntitle: \"gke/WARN/2024_005\"\nlinkTitle: \"WARN/2024_005\"\nweight: 1\ntype: docs\ndescription: >\n GKE Ingress successfully routes external traffic to the service, accessible via a NodePort\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nFor Ingress to work without container-native load balancing,\nthe backend Service must be of type NodePort.\n\nError Seen in Cloud logging/UI: Translation failed: invalid ingress spec:\nservice \"default/whereami\" is type \"ClusterIP\", expected \"NodePort\" or\n\"LoadBalancer\"\n\n### Remediation\n\nIn the Service manifest, you must use type: NodePort unless you're using\ncontainer native load balancing. If using container native load balancing,\nuse the type: ClusterIP.\n\n### Further information\n"
  },
  {
    "path": "website/content/en/rules/gke/WARN/2024_007.md",
    "content": "---\ntitle: \"gke/WARN/2024_007\"\nlinkTitle: \"WARN/2024_007\"\nweight: 1\ntype: docs\ndescription: >\n  Google Kubernetes Engine (GKE) clusters with dual-stack networking and IPv6\n  enabled need internal IP address for Internal LB\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nWhen using a Google Kubernetes Engine (GKE) cluster with a\ndual-stack subnet configured for external IPv6 access, you won't be\nable to create or update an internal load balancer service. Internal\nload balancers require an internal IP address, typically obtained from\nthe GKE subnet. External IPv6 access prevents internal IPallocation.\nWhen your subnet is set up for external IPv6 access, the system\nprioritizes external IPs, making it impossible to get an internal\nIPv6 address for the load balancer. This limitation applies to services\nwith the annotation \"networking.gke.io/load-balancer-type: \"Internal\"\nwhich specifically instructs GKE to create an internal load balancer.\n\n### Remediation\n\nCreate a separate subnet within your VPC specifically for internal resources and services.\nConfigure this subnet with internal IPv6 access only. This ensures that internal IPv6\naddresses are available for your internal load balancer.\nWhen creating your GKE cluster, specify this new subnet for your nodes and internal services.\n\n### References\n\n[Load Balancer subnet](https://cloud.google.com/kubernetes-engine/docs/concepts/service-load-balancer-parameters#custom-subnet)\n[Configuring dual-stack clusters](https://cloud.google.com/kubernetes-engine/docs/how-to/alias-ips#dual-stack)\n"
  },
  {
    "path": "website/content/en/rules/gke/WARN/2025_001.md",
    "content": "---\ntitle: \"gke/WARN/2025_001\"\nlinkTitle: \"WARN/2025_001\"\nweight: 1\ntype: docs\ndescription: >\n GKE External LoadBalancer service fails with subnet configured with ipv6 internal access only\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nGKE cluster in a dual-stack subnet with internal IPs allocated for internal\nload balancers and external IPs for external access.\n\nIf you're using a Google Kubernetes Engine (GKE) cluster with a\ndual-stack subnet configured for internal IPv6 access, you won't be\nable to create or update an external load balancer service. External\nload balancers need an external IP address. This address is normally\ntaken from the GKE subnet. Internal IPv6 access prevents external IP\nallocation. When your subnet is set up for internal IPv6 access, the\nsystem prioritizes internal IPs, making it impossible to get an external\nIPv6 address for the load balancer. This limitation applies to services\nwithout the annotation \"networking.gke.io/load-balancer-type: \"Internal\"\nwhich specifically instructs GKE to create an external load balancer\n\n### Remediation\n\nCreate a separate subnet within your VPC specifically for external resources and services\nConfigure this subnet with external IPv6 access only. This ensures that external IPv6\naddresses are available for your external load balancer\nWhen creating your GKE cluster, specify this new subnet for your nodes and external services\n\n### Further information\n"
  },
  {
    "path": "website/content/en/rules/gke/_index.md",
    "content": "---\ntitle: \"GKE\"\nlinkTitle: \"gke\"\ntype: docs\ndescription: Google Kubernetes Engine\n---\n"
  },
  {
    "path": "website/content/en/rules/iam/BP/2023_001.md",
    "content": "---\ntitle: \"iam/BP/2023_001\"\nlinkTitle: \"BP/2023_001\"\nweight: 1\ntype: docs\ndescription: >\n  Policy constraint 'AutomaticIamGrantsForDefaultServiceAccounts' is enforced\n---\n\n**Product**: [Identity and Access Management (IAM)](https://cloud.google.com/iam)\\\n**Rule class**: BP - Best practice, opinionated recommendation\n\n### Description\nPolicy constraint [AutomaticIamGrantsForDefaultServiceAccounts](https://cloud.google.com/iam/docs/best-practices-service-accounts#automatic-role-grants)\nis strongly recommended to be enforced in production projects according to security best practices.\n\nAccording to security best practices, admins should limit as much as possible the permission set\nof all users and service accounts of a project. This policy Constraint will prevent the automatic\n'editor' role grant to default service accounts [zero trust\napproach](https://cloud.google.com/blog/topics/developers-practitioners/what-zero-trust-identity-security)\n\n### Remediation\nTo improve security, we strongly recommend that you [disable the automatic role grant](https://cloud.google.com/resource-manager/docs/organization-policy/restricting-service-accounts#disable_service_account_default_grants).\nUse the iam.automaticIamGrantsForDefaultServiceAccounts boolean constraint to disable\nthe automatic role grant.\n[Turn on the policy constraint enforcement using gcloud SDK](https://cloud.google.com/sdk/gcloud/reference/resource-manager/org-policies/enable-enforce)\n\n### Further information\nCan read more at-\n\nhttps://cloud.google.com/resource-manager/docs/organization-policy/restricting-service-accounts#disable_service_account_default_grants\n"
  },
  {
    "path": "website/content/en/rules/iam/SEC/2021_001.md",
    "content": "---\ntitle: \"iam/SEC/2021_001\"\nlinkTitle: \"SEC/2021_001\"\nweight: 1\ntype: docs\ndescription: >\n  No service accounts have the Owner role\n---\n\n**Product**: [Identity and Access Management (IAM)](https://cloud.google.com/iam)\\\n**Rule class**: SEC - Potential security issue\n\n### Description\n\nA service account should not have a role that could potentially increase the security risk\nto the project to malicious activity\n\n### Remediation\n\nRestrict the permissions of all service accounts in your project to the minimum\nrequired permissions.\n\n### Further information\n\n- [Best Practices for Securing Service Accounts](https://cloud.google.com/iam/docs/best-practices-for-securing-service-accounts)\n"
  },
  {
    "path": "website/content/en/rules/iam/SEC/2024_001.md",
    "content": "---\ntitle: \"iam/SEC/2024_001\"\nlinkTitle: \"SEC/2024_001\"\nweight: 1\ntype: docs\ndescription: >\n  No Unused Service Accounts Found\n---\n\n**Product**: [Identity and Access Management (IAM)](https://cloud.google.com/iam)\\\n**Rule class**: SEC - Potential security issue\n\n### Description\n\nUnused service accounts create an unnecessary security risk,\nso we recommend disabling unused service accounts then deleting the service\naccounts when you are sure that you no longer need them\n\n### Remediation\n\n[Service accounts overview](https://cloud.google.com/iam/docs/service-account-overview)\n\n### Further information\n\n[View usage metrics for all service accounts](https://cloud.google.com/iam/docs/service-account-monitoring#view-metrics-all)\n"
  },
  {
    "path": "website/content/en/rules/iam/_index.md",
    "content": "---\ntitle: \"IAM\"\nlinkTitle: \"iam\"\ntype: docs\ndescription: Identity and Access Management (IAM)\n---\n"
  },
  {
    "path": "website/content/en/rules/interconnect/BP/2023_001.md",
    "content": "---\ntitle: \"interconnect/BP/2023_001\"\nlinkTitle: \"BP/2023_001\"\nweight: 1\ntype: docs\ndescription: >\n  VLAN attachments deployed in same metro are in different EADs (Edge Availability Domains).\n---\n\n**Product**: [Interconnect](https://cloud.google.com/network-connectivity/docs/interconnect)\\\n**Rule class**: BP - Best practice, opinionated recommendation\n\n### Description\n\nTo establish 99.99% high availability for interconnects, the following conditions are required:\n      - Two metros are required, each metro has two attachments;\n      - Attachments in same metro are in different EADs;\n      - Two regions are required with four cloud router TASKS evenly distributed;\n      - Global routing must be enabled on those cloud routers.\n\n### Remediation\n\nEnsure there are vlan attachments from same metro in different EADs, and ensure the following conditions:\n      - Two metros are required, each metro has two attachments;\n      - Attachments in same metro are in different EADs;\n      - Two regions are required with four cloud router TASKS evenly distributed;\n      - Global routing must be enabled on those cloud routers.\n\n### Further information\n\n- [Interconnect REST resource reference](https://cloud.google.com/compute/docs/reference/rest/v1/interconnects)\n- [VLAN Attachment REST resource reference](https://cloud.google.com/compute/docs/reference/rest/v1/interconnectAttachments)\n"
  },
  {
    "path": "website/content/en/rules/interconnect/WARN/2023_001.md",
    "content": "---\ntitle: \"interconnect/WARN/2023_001\"\nlinkTitle: \"WARN/2023_001\"\nweight: 1\ntype: docs\ndescription: >\n  VLAN attachment is using Dataplane V1.\n---\n\n**Product**: [Interconnect](https://cloud.google.com/network-connectivity/docs/interconnect)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nDataplane V1 doesn't support certain feature such as BFD, consider upgrading to Dataplane V2.\nFor more information:\nhttps://cloud.google.com/network-connectivity/docs/interconnect/concepts/terminology#dataplaneVersion\n\n### Remediation\n\n### Further information\n"
  },
  {
    "path": "website/content/en/rules/interconnect/WARN/2023_002.md",
    "content": "---\ntitle: \"interconnect/WARN/2023_002\"\nlinkTitle: \"WARN/2023_002\"\nweight: 1\ntype: docs\ndescription: >\n  VLAN attachment is in a non-functional state.\n---\n\n**Product**: [Interconnect](https://cloud.google.com/network-connectivity/docs/interconnect)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nThis could be because the associated Interconnect was removed,\nor because the other side of a Partner attachment was deleted..\n\n### Remediation\n\n### Further information\n"
  },
  {
    "path": "website/content/en/rules/interconnect/WARN/2023_003.md",
    "content": "---\ntitle: \"interconnect/WARN/2023_003\"\nlinkTitle: \"WARN/2023_003\"\nweight: 1\ntype: docs\ndescription: >\n  The interconnect link is undergoing a maintenance window.\n---\n\n**Product**: [Interconnect](https://cloud.google.com/network-connectivity/docs/interconnect)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nPlease check the email sent to the technical contacts for further details about the maintenance..\n\n### Remediation\n\n### Further information\n"
  },
  {
    "path": "website/content/en/rules/interconnect/WARN/2025_001.md",
    "content": "---\ntitle: \"interconnect/WARN/2025_001\"\nlinkTitle: \"WARN/2025_001\"\nweight: 1\ntype: docs\ndescription: >\n  VLAN attachment MTU matches VPC MTU\n---\n\n**Product**: [Interconnect](https://cloud.google.com/network-connectivity/docs/interconnect)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nThis rule verifies that the Maximum Transmission Unit (MTU) of your VLAN attachment matches the MTU of your VPC network.\n\nConsistent MTU settings across your VPC network, VLAN attachments, and on-premises networks prevent packet fragmentation or drops, ensuring optimal network performance. Mismatched MTUs can lead to performance issues like increased latency or packet loss, as packets exceeding the smaller MTU will be dropped or fragmented.\n\nFor details on how mismatched MTUs are handled and best practices, see Google's pages about [Mismatched MTUs](https://cloud.google.com/vpc/docs/mtu#mss-clamping-and-pmtud) and [MTU best practices](https://cloud.google.com/network-connectivity/docs/interconnect/concepts/best-practices#mtu-for-vlan-attachments).\n\n### Remediation\n\nThere are two main ways to ensure MTU consistency between a VPC network and VLAN attachments in Google Cloud:\n\n1. **Change the MTU of the VLAN attachment.**: You can adjust the Maximum Transmission Unit (MTU) setting of your Virtual Private Cloud (VPC) network to match the MTU of your VLAN attachments. This can be done by using following commands:\n\nFor each zone in the network, stop all VMs in that zone.\n\n```\ngcloud compute instances stop <INSTANCE_NAMES...> \\\n    --zone=<ZONE>\n```\n\nUpdate network MTU.\n\n```\ngcloud compute networks update <NETWORK> \\\n    --mtu=<MTU>\n```\n\nFor each zone in the network, start all VMs in that zone.\n\n```\ngcloud compute instances start <INSTANCE_NAMES...> \\\n    --zone=<ZONE>\n```\n\n2. **Change the MTU of the VPC network.** : Alternatively, you can configure the MTU of your VLAN attachments to align with the MTU of your VPC network.  This can be done by using this command:\n\n```\ngcloud compute interconnects attachments dedicated update <NAME> \\\n    --region=<REGION> \\\n    --description=<DESCRIPTION> \\\n    --bandwidth=<BANDWIDTH> \\\n    --mtu=<MTU>\n```\n\n### Further information\n\nPlease reference the following documents for MTU update command details.\n\n- [Change VPC network MTU reference](https://cloud.google.com/vpc/docs/change-mtu-vpc-network)\n- [Change VLAN attachment MTU reference](https://cloud.google.com/network-connectivity/docs/interconnect/how-to/dedicated/modifying-vlan-attachments#modify-description-capacity-mtu)\n"
  },
  {
    "path": "website/content/en/rules/interconnect/_index.md",
    "content": "---\ntitle: \"Interconnect\"\nlinkTitle: \"interconnect\"\ntype: docs\ndescription: Interconnect\n---\n"
  },
  {
    "path": "website/content/en/rules/lb/BP/2022_001.md",
    "content": "---\ntitle: \"lb/BP/2022_001\"\nlinkTitle: \"BP/2022_001\"\nweight: 1\ntype: docs\ndescription: >\n  LocalityLbPolicy compatible with sessionAffinity.\n---\n\n**Product**: [Backend services](https://cloud.google.com/load-balancing/docs/backend-service)\\\n**Rule class**: BP - Best practice, opinionated recommendation\n\n### Description\n\nIf sessionAffinity is not NONE, and localityLbPolicy field is not set to MAGLEV\nor RING_HASH, session affinity settings will not take effect.\n\n### Remediation\n\nSet localityLbPolicy to MAGLEV or RING_HASH if sessionAffinity is enabled.\n\n### Further information\n\n- [Backend services REST resource reference](https://cloud.google.com/compute/docs/reference/rest/v1/backendServices)\n"
  },
  {
    "path": "website/content/en/rules/lb/BP/2023_001.md",
    "content": "---\ntitle: \"lb/BP/2023_001\"\nlinkTitle: \"BP/2023_001\"\nweight: 1\ntype: docs\ndescription: >\n  Cloud CDN is enabled on backend services for Global External HTTP(S) load balancers\n---\n\n**Product**: [Backend services](https://cloud.google.com/load-balancing/docs/backend-service)\\\n**Rule class**: BP - Best practice, opinionated recommendation\n\n### Description\n\nIt is recommended to turn on Cloud CDN and caching as part of your default,\nglobal external HTTP(S) load balancer configuration for improved performance.\n\n### Remediation\n\nTurn on Cloud CDN and caching as part of your default,\nglobal external HTTP(S) load balancer configuration\n- [Enabling caching](https://cloud.google.com/cdn/docs/using-cache-modes#cache-mode)\n\n### Further information\n\n- [HTTP(S) Load Balancing Performance Best Practices](https://cloud.google.com/load-balancing/docs/https/http-load-balancing-best-practices#enable_caching_with)\n"
  },
  {
    "path": "website/content/en/rules/lb/BP/2023_002.md",
    "content": "---\ntitle: \"lb/BP/2023_002\"\nlinkTitle: \"BP/2023_002\"\nweight: 1\ntype: docs\ndescription: >\n  Health check logging is enabled on health checks for load balancer backend services\n---\n\n**Product**: [Health checks](https://cloud.google.com/load-balancing/docs/health-check-concepts)\n**Rule class**: BP - Best practice, opinionated recommendation\n\n### Description\n\nIt is recommended to enable logging on health checks associated with load balancer backend services,\nfor easier debugging of health check failures.\n\n### Remediation\n\nTurn on health check logging as part of your default health check configuration\n- [Enabling logging](https://cloud.google.com/load-balancing/docs/health-check-logging)\n\n### Further information\n\n- [Enable and disable health check logging](https://cloud.google.com/load-balancing/docs/\nhealth-check-logging#enable_and_disable_logging)\n"
  },
  {
    "path": "website/content/en/rules/lb/BP/2024_001.md",
    "content": "---\ntitle: \"lb/BP/2024_001\"\nlinkTitle: \"BP/2024_001\"\nweight: 1\ntype: docs\ndescription: >\n  Session Affinity configured on backend services for Global External Application load balancers\n---\n\n**Product**: [Backend services](https://cloud.google.com/load-balancing/docs/backend-service)\\\n**Rule class**: BP - Best practice, opinionated recommendation\n\n### Description\n\nIn some cases, it might be beneficial for the same backend to handle requests that are from the same end users,\nor related to the same end user, at least for a short period of time.\nThis can be configured by using session affinity, a setting configured on the backend service.\n\n### Remediation\n\nDepending on your application, you can use different backend services with different session affinity settings.\nFor example, if a part of your application is serving static content to many users, it is unlikely to benefit from session affinity.You would use a Cloud CDN-enabled backend service to serve cached responses instead.\n- [Configuring session affinity](https://cloud.google.com/load-balancing/docs/backend-service#session_affinity)\n\n### Further information\n\n- [Application Load Balancing Performance Best Practices](https://cloud.google.com/load-balancing/docs/https/http-load-balancing-best-practices#configure_session_affinity)\n"
  },
  {
    "path": "website/content/en/rules/lb/BP/2024_002.md",
    "content": "---\ntitle: \"lb/BP/2024_002\"\nlinkTitle: \"BP/2024_002\"\nweight: 1\ntype: docs\ndescription: >\n  Global Access enabled on Regional Internal Load Balancer\n---\n\n**Product**: [Load Balancing](https://cloud.google.com/load-balancing)\\\n**Rule class**: BP - Best practice, opinionated recommendation\n\n### Description\n\nWhen global access is not on, resources/clients in other location might not be able to visit the Internal Load Balancer(iLB).\nIt's recommended to enable the global access in regional iLB.\n\n### Remediation\n\nBy default global access is not enabled in regional iLB. You have to [enable global access](https://cloud.google.com/load-balancing/docs/l7-internal/setting-up-l7-internal#global-access) to allow clients from any region to access your load balancer. Backends must also be in the same region as the load balancer.\n\n### Further information\n\n- [Forwarding rules](https://cloud.google.com/load-balancing/docs/forwarding-rule-concepts)\n- [Internal Application Load Balancer](https://cloud.google.com/load-balancing/docs/l7-internal)\n- [Internal Proxy Network Load Balancer](https://cloud.google.com/load-balancing/docs/tcp/internal-proxy)\n- [Internal Passthrough Network Load Balancer](https://cloud.google.com/load-balancing/docs/internal)\n"
  },
  {
    "path": "website/content/en/rules/lb/BP/2025_001.md",
    "content": "---\ntitle: \"lb/BP/2025_001\"\nlinkTitle: \"BP/2025_001\"\nweight: 1\ntype: docs\ndescription: >\n  Backend Protocol selection for Global External Application Load Balancers\n---\n\n**Product**: [Load balancing](https://cloud.google.com/load-balancing)\\\n**Rule class**: BP - Best practice, opinionated recommendation\n\n### Description\n\nYour choice of backend protocol (HTTP, HTTPS, or HTTP/2) impacts application latency and the network bandwidth available for your application. For example, using HTTP/2 between the load balancer and the backend instance can require significantly more TCP connections to the instance than HTTP(S). Connection pooling, an optimization that reduces the number of these connections with HTTP(S), is not available with HTTP/2. As a result, you might see high backend latencies because backend connections are made more frequently.\n\n### Remediation\n\nFor typical web applications and APIs, HTTP or HTTPS generally offer better performance due to connection pooling, which reduces the overhead of establishing new TCP connections for each request. This is especially true if your application experiences many small, frequent requests.\n\n\n### Further information\n\nPlease refer https://cloud.google.com/load-balancing/docs/https/http-load-balancing-best-practices#backend_service_protocol_selection for more information\nrelated to backend service protocol selection.\n"
  },
  {
    "path": "website/content/en/rules/lb/BP/2025_002.md",
    "content": "---\ntitle: \"lb/BP/2025_002\"\nlinkTitle: \"BP/2025_002\"\nweight: 1\ntype: docs\ndescription: >\n Backend Service Timeout for Global External Application Load Balancers\n---\n\n**Product**: [Load Balancing](https://cloud.google.com/load-balancing)\\\n**Rule class**: BP - Best practice, opinionated recommendation\n\n### Description\n\nThe default timeout is 30 seconds for external application load balancers\nand we don't recommend backend service timeout values greater than 24 hours\n(86,400 seconds) because Google Cloud periodically restarts GFEs for software\nupdates and other routine maintenance. The longer the backend service timeout\nvalue, the more likely it is that Google Cloud terminates TCP connections for\nmaintenance.\n\n### Remediation\n\nImplement Retry Logic in Client Systems for Long Running Connections:\nEnsure client systems can handle retries if the TCP connection cannot remain open for long periods.\n\n### Further information\n\nPlease refer https://cloud.google.com/load-balancing/docs/https#timeout-bes for more information\nrelated to backend service timeout.\n"
  },
  {
    "path": "website/content/en/rules/lb/BP/2025_003.md",
    "content": "---\ntitle: \"lb/BP/2025_002\"\nlinkTitle: \"BP/2025_002\"\nweight: 1\ntype: docs\ndescription: >\n  LB: Reports the backend services that does not has connection draining\n  configured.\n---\n\n**Product**: [Load Balancing](https://cloud.google.com/load-balancing)\\\n**Rule class**: BP - Best practice, opinionated recommendation\n\n### Description\n\nConnection draining is a process that ensures that existing, in-progress\nrequests are given time to complete when a virtual machine (VM) instance is\nremoved from an instance group or when an endpoint is removed from network\nendpoint groups (NEGs).\n\nPerformance best practices recommend configuring connection draining\ntimeout to allow existing requests to complete when instances are removed\nfrom a backend service.\n\n### Remediation\n\nSet connection draining timeout on an existing backend service.\n\n## Further information\n\n- [Enable Connection Draining](https://cloud.google.com/load-balancing/docs/enabling-connection-draining)\n"
  },
  {
    "path": "website/content/en/rules/lb/_index.md",
    "content": "---\ntitle: \"LB\"\nlinkTitle: \"lb\"\ntype: docs\ndescription: Load balancing (LB)\n---\n"
  },
  {
    "path": "website/content/en/rules/looker/BP/2025_001.md",
    "content": "---\ntitle: \"looker/BP/2025_001\"\nlinkTitle: \"BP/2025_001\"\nweight: 1\ntype: docs\ndescription: >\n List all Looker instances\n\n---\n**Product**: [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/looker-core-overview)\\\n**Rule class**: BP - Best practice, to retrieve about instances.\n### Description\n\nThis rule lists all Looker core instances found in a given GCP Project.\n\n### Remediation\n\nIf the result for a project is \"No instances found,\" it indicates that no Looker core instances were detected in that project. No action is required if this is the expected state.\n\n### Further information\n- [Create Looker core Public IP instance](https://cloud.google.com/looker/docs/looker-core-instance-create)\n\n  [Create Looker core Private IP instance](https://cloud.google.com/looker/docs/looker-core-create-private-ip)\n\n  [Looker Core Edition](https://cloud.google.com/looker/docs/looker-core-overview#editions)\n"
  },
  {
    "path": "website/content/en/rules/looker/BP/2025_002.md",
    "content": "---\ntitle: \"looker/BP/2025_002\"\nlinkTitle: \"BP/2025_002\"\nweight: 1\ntype: docs\ndescription: >\n  Listing number of Expensive BigQuery Jobs in Looker Studio\n---\n**Product**:  [Looker](https://cloud.google.com/looker)\\\n**Rule class**: BP - Best practice, Expensive BigQuery Jobs in Looker Studio\n### Description\nVerifies that there are no high-cost (>1GB) BigQuery jobs originating from Looker Studio.\n### Remediation\nInefficient data filtering in queries, overly large tables, and extensive user exploration in Looker Studio are causing excessive BigQuery scans and queries.\n### Further information\n- [Please follow the best practices  for optimizing BigQuery costs, covering query optimization, data storage, and cost management tools](https://cloud.google.com/bigquery/docs/best-practices-costs)\n- [Visualize your costs with Looker Studio ](https://cloud.google.com/billing/docs/how-to/visualize-data)\n"
  },
  {
    "path": "website/content/en/rules/looker/BP/2025_003.md",
    "content": "---\ntitle: \"looker/BP/2025_003\"\nlinkTitle: \"BP/2025_003\"\nweight: 1\ntype: docs\ndescription: >\n List all Looker instances operations\n\n---\n**Product**: [Looker (Google Cloud core)](https://cloud.google.com/looker/docs/looker-core-overview)\\\n**Rule class**: BP - Best practice, to retrieve operations performed on Looker instances.\n### Description\n\nAll Looker (Google Cloud core) instance operations are inventoried.\n\n\n### Remediation\n\nIf the result for a project is \"No operations found,\" it indicates that no operations have been performed on any Looker (Google Cloud core) instance in that project. No action is required if this is the expected state.\n\n### Further information\n[Looker core Operations Overview](https://cloud.google.com/looker/docs/reference/rest/v1/projects.locations.operations)\n"
  },
  {
    "path": "website/content/en/rules/looker/_index.md",
    "content": "---\ntitle: \"Looker\"\nlinkTitle: \"looker\"\ntype: docs\ndescription: Looker\n---\n"
  },
  {
    "path": "website/content/en/rules/notebooks/BP/2023_001.md",
    "content": "---\ntitle: \"notebooks/BP/2023_001\"\nlinkTitle: \"BP/2023_001\"\nweight: 1\ntype: docs\ndescription: >\n  Vertex AI Workbench instance enables system health report\n---\n\n**Product**: [Vertex AI Workbench](https://cloud.google.com/vertex-ai-workbench)\\\n**Rule class**: BP - Best practice, opinionated recommendation\n\n### Description\n\nUser-managed notebooks instances can report the system health of the core\nservices like Docker service, Docker reverse proxy agent, Jupyter service and\nJupyter API.\n\n### Remediation\n\nTo use system health guest attributes to report on your user-managed notebooks\ninstance's health, you must select the **Enable system health report** checkbox\nwhen you create a user-managed notebooks instance.\n\nYou can enable the system health report by using either the Google Cloud\nconsole or the Google Cloud CLI.\n\n### Further information\n\n- [Monitor health status](https://cloud.google.com/vertex-ai/docs/workbench/user-managed/monitor-health)\n"
  },
  {
    "path": "website/content/en/rules/notebooks/BP/2023_002.md",
    "content": "---\ntitle: \"notebooks/BP/2023_002\"\nlinkTitle: \"BP/2023_002\"\nweight: 1\ntype: docs\ndescription: >\n  Vertex AI Workbench user-managed notebook instances are up to date\n---\n\n**Product**: [Vertex AI Workbench](https://cloud.google.com/vertex-ai-workbench)\\\n**Rule class**: BP - Best practice, opinionated recommendation\n\n### Description\n\nYou might want to upgrade the environment of your user-managed notebooks instance for any of the following reasons:\n\n- To use new capabilities that are only available in a newer version of your environment.\n\n- To benefit from framework updates, package updates, and bug fixes that have been implemented in a newer version of your environment.\n\n### Remediation\n\nThere are two ways to upgrade a user-managed notebooks instance:\n\n- **Automatic upgrade**: Enable auto upgrade when you create a user-managed notebooks instance. During a recurring time period that you specify, Vertex AI Workbench checks whether your instance can be upgraded, and if so, Vertex AI Workbench upgrades your instance.\n\n- **Manual upgrade**: If an existing user-managed notebooks instance meets the requirements for upgrading, you can upgrade the instance manually.\n\n### Further information\n\n- [Upgrade the environment of a user-managed notebook instance](https://cloud.google.com/vertex-ai/docs/workbench/user-managed/upgrade)\n"
  },
  {
    "path": "website/content/en/rules/notebooks/BP/2023_003.md",
    "content": "---\ntitle: \"notebooks/BP/2023_003\"\nlinkTitle: \"BP/2023_003\"\nweight: 1\ntype: docs\ndescription: >\n  Vertex AI Workbench runtimes for managed notebooks are up to date\n---\n\n**Product**: [Vertex AI Workbench](https://cloud.google.com/vertex-ai-workbench)\\\n**Rule class**: BP - Best practice, opinionated recommendation\n\n### Description\n\nMaintaining runtimes up to date is generally beneficial thanks to new\ncapabilities, framework updates, package updates, and bug fixes that have been\nimplemented in newer versions of your environment.\n\n### Remediation\n\nYou can manually upgrade a managed notebooks instance in the Google Cloud\nconsole. Go to the Managed notebooks page and click the `Upgrade all` button if\nyou want to upgrade all upgradeable instances. Otherwise, select the managed\nnotebooks instance that you want to upgrade.\n\n### Further information\n\n- [Upgrade the environment of a managed notebooks instance](https://cloud.google.com/vertex-ai/docs/workbench/managed/upgrade)\n"
  },
  {
    "path": "website/content/en/rules/notebooks/BP/2023_004.md",
    "content": "---\ntitle: \"notebooks/BP/2023_004\"\nlinkTitle: \"BP/2023_004\"\nweight: 1\ntype: docs\ndescription: >\n  Vertex AI Workbench runtimes for managed notebooks enable idle shutdown\n---\n\n**Product**: [Vertex AI Workbench](https://cloud.google.com/vertex-ai-workbench)\\\n**Rule class**: BP - Best practice, opinionated recommendation\n\n### Description\n\nTo help manage costs, you can set your managed notebooks instance to shut down\nafter being idle for a specific time period. You can change the amount of time.\n\n### Remediation\n\nGo to the `SOFTWARE AND SECURITY` tab and mark the `Enable Idle Shutdown`\ncheckbox.\n\n### Further information\n\n- [Idle shutdown](https://cloud.google.com/vertex-ai/docs/workbench/managed/idle-shutdown)\n"
  },
  {
    "path": "website/content/en/rules/notebooks/ERR/2023_001.md",
    "content": "---\ntitle: \"notebooks/ERR/2023_001\"\nlinkTitle: \"ERR/2023_001\"\nweight: 1\ntype: docs\ndescription: >\n  Vertex AI Workbench user-managed notebook instances should be in healthy state\n---\n\n**Product**: [Vertex AI Workbench](https://cloud.google.com/vertex-ai-workbench)\\\n**Rule class**: ERR - Something that is wrong\n\n### Description\n\nThe health state for a Vertex AI Workbench user-managed notebook instance should\nbe \"HEALTHY\" to be correctly used\n\n### Remediation\n\n[Monitoring health status of user-managed notebooks instances](https://cloud.google.com/vertex-ai/docs/general/troubleshooting-workbench#monitoring_health_status_of_instances) and what to do\nin case of failures\n\n### Further information\n\n- [Vertex AI Workbench user-managed notebooks](https://cloud.google.com/vertex-ai/docs/workbench/user-managed/introduction)\n- [Monitor the health state of a user-managed notebook instance](https://cloud.google.com/vertex-ai/docs/workbench/user-managed/monitor-health)\n"
  },
  {
    "path": "website/content/en/rules/notebooks/ERR/2023_002.md",
    "content": "---\ntitle: \"notebooks/ERR/2023_002\"\nlinkTitle: \"ERR/2023_002\"\nweight: 1\ntype: docs\ndescription: >\n  Vertex AI Workbench account has compute.subnetworks permissions to create notebook in VPC\n---\n\n**Product**: [Vertex AI Workbench](https://cloud.google.com/vertex-ai-workbench)\\\n**Rule class**: ERR - Something that is wrong\n\n### Description\n\nCreating notebook inside VPC requires user and service-*@gcp-sa-notebooks.iam.gserviceaccount.com\nto have compute.subnetworks.use and compute.subnetworks.useExternalIp permissions in VPC project\n\n### Remediation\n\n1. Add [“AI Platform Notebooks Service Agent” Role](https://cloud.google.com/iam/docs/understanding-roles?&_ga=2.228497117.-137841820.1685712188#notebooks.serviceAgent) to the Google-provided service account in the format of \"service-%number%@gcp-sa-notebooks.iam.gserviceaccount.com\" in the project which hosts the notebooks\n\n2. Add [“Compute Network User” Role](https://cloud.google.com/iam/docs/understanding-roles?&_ga=2.228497117.-137841820.1685712188#compute.networkUser) to the account or Google-provided service account in the format of \"service-%number%@gcp-sa-notebooks.iam.gserviceaccount.com\" in the project which hosts the VPC\n\n3. It is also possible to only add compute.subnetworks.use and compute.subnetworks.useExternalIp permissions to the Google-provided service account in the format of \"service-%number%@gcp-sa-notebooks.iam.gserviceaccount.com\" in the project which hosts the VPC\n\n### Further information\n\n- [Creating user-managed notebooks instances - Troubleshooting](https://cloud.google.com/vertex-ai/docs/general/troubleshooting-workbench#creating_instances)\n"
  },
  {
    "path": "website/content/en/rules/notebooks/ERR/2023_003.md",
    "content": "---\ntitle: \"notebooks/ERR/2023_003\"\nlinkTitle: \"ERR/2023_003\"\nweight: 1\ntype: docs\ndescription: >\n  Vertex AI Workbench account has required permissions to create and use notebooks\n---\n\n**Product**: [Vertex AI Workbench](https://cloud.google.com/vertex-ai-workbench)\\\n**Rule class**: ERR - Something that is wrong\n\n### Description\n\nCreating and using a notebook requires service-*@gcp-sa-notebooks.iam.gserviceaccount.com\nto have \"AI Platform Notebooks Service Agent\" role and for user to have \"Service Account User\" role\n\n### Remediation\n\n1. Add [“AI Platform Notebooks Service Agent” Role](https://cloud.google.com/iam/docs/understanding-roles?&_ga=2.228497117.-137841820.1685712188#notebooks.serviceAgent) to the Google-provided service account in the format of \"service-%number%@gcp-sa-notebooks.iam.gserviceaccount.com\"\n\n2. Add [“Service Account User” Role](https://cloud.google.com/iam/docs/service-account-permissions#user-role) to the user account creating, owning or using the notebook.\n\n### Further information\n\n- [Creating user-managed notebooks instances - Troubleshooting](https://cloud.google.com/vertex-ai/docs/general/troubleshooting-workbench#creating_instances)\n"
  },
  {
    "path": "website/content/en/rules/notebooks/ERR/2023_004.md",
    "content": "---\ntitle: \"notebooks/ERR/2023_004\"\nlinkTitle: \"ERR/2023_004\"\nweight: 1\ntype: docs\ndescription: >\n  Vertex AI Workbench runtimes for managed notebooks are healthy\n---\n\n**Product**: [Vertex AI Workbench](https://cloud.google.com/vertex-ai-workbench)\\\n**Rule class**: ERR - Something that is wrong\n\n### Description\n\nThe health state for a Vertex AI runtime for a managed notebook should be\n\"HEALTHY\" to be correctly used\n\n### Remediation\n\n- [Troubleshooting Vertex AI Workbench managed notebooks](https://cloud.google.com/vertex-ai/docs/general/troubleshooting-workbench#managed-notebooks)\n- Restart the managed notebook\n- [Upgrade the managed notebook](https://cloud.google.com/vertex-ai/docs/workbench/managed/upgrade)\n- [Migrate data to a new managed notebook](https://cloud.google.com/vertex-ai/docs/workbench/managed/migrate)\n\n### Further information\n\n- [Vertex AI Workbench runtimes for managed notebook health state](https://cloud.google.com/vertex-ai/docs/workbench/reference/rest/v1/projects.locations.runtimes#healthstate)\n- [Run diagnostics command to get more information](https://cloud.google.com/sdk/gcloud/reference/notebooks/runtimes/diagnose)\n"
  },
  {
    "path": "website/content/en/rules/notebooks/ERR/2024_001.md",
    "content": "---\ntitle: \"notebooks/ERR/2024_001\"\nlinkTitle: \"ERR/2024_001\"\nweight: 1\ntype: docs\ndescription: >\n  Vertex AI Workbench Notebooks Executor code uses explicit project selection\n---\n\n**Product**: [Vertex AI Workbench](https://cloud.google.com/vertex-ai-workbench)\\\n**Rule class**: ERR - Something that is wrong\n\n### Description\n\nRunning a notebook code execution requires user to explicitly set client\nlibraries with the user's project to avoid 40X errors with the executor project\n\n### Remediation\n\n- [Troubleshooting Vertex AI Workbench managed notebooks](https://cloud.google.com/vertex-ai/docs/general/troubleshooting-workbench#401-error-executor-managed)\n- Use explicit project selection when initializing Google Cloud client libraries\n\n### Further information\n\n- [Vertex AI Workbench Executor - Use explicit project selection](https://cloud.google.com/vertex-ai/docs/workbench/managed/executor#explicit-project-selection)\n"
  },
  {
    "path": "website/content/en/rules/notebooks/WARN/2023_001.md",
    "content": "---\ntitle: \"notebooks/WARN/2023_001\"\nlinkTitle: \"WARN/2023_001\"\nweight: 1\ntype: docs\ndescription: >\n  Vertex AI Workbench instance is not being OOMKilled\n---\n\n**Product**: [Vertex AI Workbench](https://cloud.google.com/vertex-ai-workbench)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nHigh memory utilization more than 85% in the user-managed notebooks instance\ncould be a cause of 524 (A Timeout Occurred) errors while opening Jupyterlab.\n\n### Remediation\n\nVerify memory utilization in the user-managed notebooks instance.\n\n1. [Connect to your Deep Learning VM instance using SSH](https://cloud.google.com/compute/docs/instances/connecting-to-instance).\n\n2. Run the `free -t -h` command. If the **used** memory is above 85% of the **total**, you should consider [changing the machine type](https://cloud.google.com/vertex-ai/docs/workbench/user-managed/manage-hardware-accelerators).\n\n3. You can [install Cloud Monitoring agent](https://cloud.google.com/monitoring/agent/monitoring/installation#joint-install) to monitor if there is high memory usage in your user-managed notebooks instance. See [pricing information](https://cloud.google.com/stackdriver/pricing#monitoring-costs).\n\n### Further information\n\n- [Opening a notebook results in a 524 error](https://cloud.google.com/vertex-ai/docs/general/troubleshooting-workbench#timeout-524-error-user-managed)\n"
  },
  {
    "path": "website/content/en/rules/notebooks/WARN/2023_002.md",
    "content": "---\ntitle: \"notebooks/WARN/2023_002\"\nlinkTitle: \"WARN/2023_002\"\nweight: 1\ntype: docs\ndescription: >\n  Vertex AI Workbench instance is in healthy data disk space status\n---\n\n**Product**: [Vertex AI Workbench](https://cloud.google.com/vertex-ai-workbench)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nThe data disk space status is unhealthy if the disk space is greater than 85%\nfull.\n\n### Remediation\n\nIf your data disk space status is unhealthy, try the following:\n\n - From a terminal session in the user-managed notebooks instance or [using ssh to connect](https://cloud.google.com/vertex-ai/docs/general/troubleshooting-workbench#ssh-connect), check the amount of free disk space using the command `df -h -T /home/jupyter`.\n - Delete large files to increase the available disk space. Use the command `find . -type d -size +100M` to help you find large files.\n - If the previous steps don't solve your problem, [get support](https://cloud.google.com/vertex-ai/docs/support/getting-support).\n\n### Further information\n\n- [Monitoring health status of user-managed notebooks instances](https://cloud.google.com/vertex-ai/docs/general/troubleshooting-workbench#data_disk_utilization_percent)\n"
  },
  {
    "path": "website/content/en/rules/notebooks/WARN/2023_003.md",
    "content": "---\ntitle: \"notebooks/WARN/2023_003\"\nlinkTitle: \"WARN/2023_003\"\nweight: 1\ntype: docs\ndescription: >\n  Vertex AI Workbench instance is in healthy boot disk space status\n---\n\n**Product**: [Vertex AI Workbench](https://cloud.google.com/vertex-ai-workbench)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nThe boot disk space status is unhealthy if the disk space is greater than 85%\nfull.\n\n### Remediation\n\nIf your boot disk space status is unhealthy, try the following:\n\n - From a terminal session in the user-managed notebooks instance or using ssh to connect, check the amount of free disk space using the command `df -H`.\n - Use the command `find . -type d -size +100M` to help you find large files that you might be able to delete, but don't delete them unless you are sure you can safely do so. If you aren't sure, you can [get help from support](https://cloud.google.com/vertex-ai/docs/support/getting-support).\n - If the previous steps don't solve your problem, [get support](https://cloud.google.com/vertex-ai/docs/support/getting-support).\n\n### Further information\n\n- [Monitoring health status of user-managed notebooks instances](https://cloud.google.com/vertex-ai/docs/general/troubleshooting-workbench#boot_disk_utilization_percent)\n"
  },
  {
    "path": "website/content/en/rules/notebooks/_index.md",
    "content": "---\ntitle: \"NOTEBOOKS\"\nlinkTitle: \"notebooks\"\ntype: docs\ndescription: >\n  Vertex AI Workbench user-managed notebook instances should be in healthy state\n---\n"
  },
  {
    "path": "website/content/en/rules/pubsub/BP/2024_001.md",
    "content": "---\ntitle: \"pubsub/BP/2024_001\"\nlinkTitle: \"BP/2024_001\"\nweight: 1\ntype: docs\ndescription: >\n  Oldest Unacked Message Age Value less than 24 hours.\n---\n\n**Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\\\n**Rule class**: BP - Best practice, opinionated recommendations\n\n### Description\n\nIncreasing Oldest Unacked Message Age indicates presence of a message on the\nsubscription that has not been processed yet; either undelivered, being nacked\nby the subscriber or overall being acked in an untimely manner from the\nsubscriber causing expiring acks.\n\n### Remediation\n\nConfigure subscribers to [pull](https://cloud.google.com/pubsub/docs/pull) from\nthe subscription and ensure messages are successfully processed and acked.\nAlternatively ensure push endpoints or destinations work correctly to receive\nand ack messages.\n\n### Further information\n\n[Pub/Sub Storage Pricing](https://cloud.google.com/pubsub/pricing#storage_costs)\n[Pub/Sub Delivery Latency Health](https://cloud.google.com/pubsub/docs/monitoring#delivery_latency_health)\n"
  },
  {
    "path": "website/content/en/rules/pubsub/ERR/2024_001.md",
    "content": "---\ntitle: \"pubsub/ERR/2024_001\"\nlinkTitle: \"ERR/2024_001\"\nweight: 1\ntype: docs\ndescription: >\n  Pub/Sub Bigquery Subscription Created using Exist BigQuery table.\n---\n\n**Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\\\n**Rule class**: ERR - Something that is possibly wrong\n\n### Description\n\nUnable to Create the BigQuery Subscription using  BigQuery table does not\nalready exist, Check If the table you are trying to use for Bigquery\nSubscription creation  is already existed in the BigQuery or not.\n\n### Remediation\n\nThe BigQuery table does not already exist, which is required for setting up a BigQuery subscription. so please create the BigQuery table before using it.\n\n### Further information\n\nPlease find below for more information about the table creation.\n[BigQuery Table Creation](https://cloud.google.com/bigquery/docs/tables#console)\n"
  },
  {
    "path": "website/content/en/rules/pubsub/ERR/2024_002.md",
    "content": "---\ntitle: \"pubsub/ERR/2024_002\"\nlinkTitle: \"ERR/2024_002\"\nweight: 1\ntype: docs\ndescription: >\n  Creating Pub/Sub Push didn't fail because of organization policy.\n---\n\n**Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\\\n**Rule class**: ERR - Something that is possibly wrong\n\n### Description\n\nCreating New Pub/Sub Push Subscription in VPC-SC enabled project is not allowed.\n\nUnable to create new Push Subscription if the project is VPC-SC enabled. The\nfollowing filter can be used to find the log lines that are matched by the rule:\n\n```\nresource.type='pubsub_subscription'\nlog_name=\"cloudaudit.googleapis.com/activity\"\nseverity=ERROR\nprotoPayload.methodName=\"google.pubsub.v1.Subscriber.CreateSubscription\"\nprotoPayload.status.message=\"Request is prohibited by organization's policy\"\n```\n\n### Remediation\n\nThe workaround is to remove VPC-SC temporarily and create the new Push subscription\nand then reapply VPC-SC again.\n\n### Further information\n\nPlease find below for more information about this limitation.\n[Pub/Sub New Push Subscription](https://cloud.google.com/vpc-service-controls/docs/supported-products#table_pubsub)\n"
  },
  {
    "path": "website/content/en/rules/pubsub/ERR/2024_003.md",
    "content": "---\ntitle: \"pubsub/ERR/2024_003\"\nlinkTitle: \"ERR/2024_003\"\nweight: 1\ntype: docs\ndescription: >\n  Pub/Sub Snapshot creation fails if subscription backlog is too old.\n---\n\n**Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\\\n**Rule class**: ERR - Something that is possibly wrong\n\n### Description\n\nPub/Sub Snapshot creation fails if subscription backlog is too old.\n\nUnable to create snapshot if the subscription backlog is too old and message of\n'subscription's backlog is too old' is displayed on the cloud console.\n\n### Remediation\n\nCreate the snapshot well before its maximum expiry time of 7days. The exact lifetime of snapshot\nis 7 days - (age of oldest unacked message in the subscription).\n\n### Further information\n\nPlease find below for more information about the snapshot creation.\n[Pub/Sub Snapshot Creation](https://cloud.google.com/pubsub/docs/reference/rest/v1/Snapshot)\n"
  },
  {
    "path": "website/content/en/rules/pubsub/ERR/2025_001.md",
    "content": "---\ntitle: \"pubsub/ERR/2025_001\"\nlinkTitle: \"ERR/2025_001\"\nweight: 1\ntype: docs\ndescription: >\n  Pub/Sub push subscription service agent has the Service Account Token Creator Role.\n---\n\n**Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\n**Rule class**: ERR - Something that is very likely to be wrong\n\n### Description\n\nThe Pub/Sub service agent (`service-{project-number}@gcp-sa-pubsub.iam.gserviceaccount.com`) must be granted the Service Account Token Creator Role (`roles/iam.serviceAccountTokenCreator`) on the service account used by a push subscription with authentication enabled.\n\nWithout this role, Pub/Sub cannot generate tokens to authenticate to the push endpoint, leading to message delivery failures.\n\n### Remediation\n\nTo fix this issue, grant the `Service Account Token Creator` role to the Pub/Sub service agent for the service account used in the push subscription.\n\nExecute the following `gcloud` command:\n\n```bash\ngcloud iam service-accounts add-iam-policy-binding \"SERVICE_ACCOUNT_EMAIL\" \\\n  --member=\"serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com\" \\\n  --role=\"roles/iam.serviceAccountTokenCreator\"\n```\n\nReplace the following:\n- `SERVICE_ACCOUNT_EMAIL`: The email address of the service account used in your push subscription.\n- `PROJECT_NUMBER`: Your Google Cloud project number.\n\n### Further information\n\nFor more information, see the official documentation on [push authentication](https://cloud.google.com/pubsub/docs/create-push-subscription#authentication).\n"
  },
  {
    "path": "website/content/en/rules/pubsub/WARN/2023_001.md",
    "content": "---\ntitle: \"pubsub/WARN/2023_001\"\nlinkTitle: \"WARN/2023_001\"\nweight: 1\ntype: docs\ndescription: >\n  Project should not have a detached subscription.\n---\n\n**Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nA detached subscription is one whose reading privilege from the topic\nhas been revoked; it's retained messages are also deleted.\nTo free up the quota, it should be deleted.\n\n### Remediation\n\nDetached subscriptions can be effectively deleted on console, using the gcloud\ncommand `gcloud pubsub subscriptions delete SUBSCRIPTION_ID` or using REST\nAPIs - [doc](https://cloud.google.com/pubsub/docs/delete-subscriptions).\n\nThe deleting user account needs to have the `roles/pubsub.editor` IAM role or a\nrole with similar permissions.\n\n### Further information\n\n[Detached subscriptions](https://cloud.google.com/pubsub/docs/detach-subscriptions)\n"
  },
  {
    "path": "website/content/en/rules/pubsub/WARN/2023_002.md",
    "content": "---\ntitle: \"pubsub/WARN/2023_002\"\nlinkTitle: \"WARN/2023_002\"\nweight: 1\ntype: docs\ndescription: >\n  BigQuery subscription should have a dead-letter topic attached.\n---\n\n**Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nA BigQuery subscription could be configured to forward undeliverable/failed\nmessages to a special dead-letter topic for further analysis/handling.\n\n### Remediation\n\nWhen a Pub/Sub message cannot be written to BigQuery, the message cannot be\nacknowledged. To forward such undeliverable messages,\n[configure a dead-letter topic](https://cloud.google.com/pubsub/docs/handling-failures#dead_letter_topic)\non the [BigQuery subscription](https://cloud.google.com/pubsub/docs/bigquery#handle_message_failures).\n\n### Further information\n\n[BigQuery subscriptions](https://cloud.google.com/pubsub/docs/bigquery)\n"
  },
  {
    "path": "website/content/en/rules/pubsub/WARN/2023_003.md",
    "content": "---\ntitle: \"pubsub/WARN/2023_003\"\nlinkTitle: \"WARN/2023_003\"\nweight: 1\ntype: docs\ndescription: >\n  Each topic has at least one subscription attached.\n---\n\n**Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nWithout a subscription, subscribers cannot pull messages or receive pushed\nmessages published to the topic. At the end of the max message retention period,\nthe messages will be discarded from Pub/Sub regardless, resulting in loss of\ndata published to the topic.\n\n### Remediation\n\n[Attach a subscription](https://cloud.google.com/pubsub/docs/subscriber) to the\ntopic in order to deliver messages published to the topic before they expire\nand are discarded leading to data loss.\n\nOnce the subscription is attached, depending on the type of the subscription,\nsimply pull from it for pull subscriptions, or accept delivered messages to\nyour configured endpoint for push messages.\n\n### Further information\n\nTo determine which subscription is suitable for your use-case:\n[Choose a subscription](https://cloud.google.com/pubsub/docs/subscriber)\n"
  },
  {
    "path": "website/content/en/rules/pubsub/WARN/2023_004.md",
    "content": "---\ntitle: \"pubsub/WARN/2023_004\"\nlinkTitle: \"WARN/2023_004\"\nweight: 1\ntype: docs\ndescription: >\n  Project should not have a subscription without a topic attached.\n---\n\n**Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nFor a subscription whose topic is deleted, it cannot be reattached to a new\ntopic and thus cannot receive new published messages. Messages in the\nsubscription will expire after the message retention period if unacked,\nand discarded from Pub/Sub which may lead to data loss.\nThe subscription is then counting as quota consumed for an unusable resource.\n\n### Remediation\n\n[Delete a subscription](https://cloud.google.com/pubsub/docs/delete-subscriptions)\nwhose topic is deleted to free up [the quota](https://cloud.google.com/pubsub/quotas#resource_limits)\nfor new subscriptions.\n\n### Further information\n\nYou can also set expiration policy for subscriptions to delete inactive\nsubscriptions past their expiry period. By default this value is [31 days](https://cloud.google.com/pubsub/docs/subscription-properties#expiration_period).\nHowever, subscriptions set to `never expire` will not be deleted even if they\nare inactive and count against the project's quota usage.\n"
  },
  {
    "path": "website/content/en/rules/pubsub/WARN/2023_005.md",
    "content": "---\ntitle: \"pubsub/WARN/2023_005\"\nlinkTitle: \"WARN/2023_005\"\nweight: 1\ntype: docs\ndescription: >\n  Pub/Sub service account has BigQuery Permissions if BigQuery Subscription(s) exist.\n---\n\n**Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nFor any BigQuery subscriptions to deliver messages successfully, they should\nhave the appropriate BigQuery Editor permissions to the appropriate service.\n\n### Remediation\n\nAssign the [roles/bigquery.dataEditor](https://cloud.google.com/pubsub/docs/create-bigquery-subscription#assign_bigquery_service_account) role to the\nPub/Sub Service Account to assign BigQuery Editor Permissions.\n\n### Further information\n\nThe full list of permissions available in this role can be found at the\n[Big Query Permissions](https://cloud.google.com/bigquery/docs/access-control#bigquery.dataEditor).\n"
  },
  {
    "path": "website/content/en/rules/pubsub/WARN/2023_006.md",
    "content": "---\ntitle: \"pubsub/WARN/2023_006\"\nlinkTitle: \"WARN/2023_006\"\nweight: 1\ntype: docs\ndescription: >\n  Push delivery requests for push subscriptions are not failing.\n---\n\n**Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nFor any push subscription, delivery to the endpoint should return an ack\nresponse for successfully processed messages.\n\n### Remediation\n\nFor push subscriptions the error code returned by the endpoint if it's not\nlisted in the ack [http status codes](https://cloud.google.com/pubsub/docs/push#receive_push),\nand resolve the occurring issue. Logging within the endpoint system may help in\ndebugging the processing error.\n\nFor [export subscriptions](https://cloud.google.com/pubsub/docs/subscription-overview#push_pull),\nattach a [dead-letter topic](https://cloud.google.com/pubsub/docs/handling-failures#dead_letter_topic)\nand subscription, pull from this dead-letter subscription and check the [attributes](https://cloud.google.com/pubsub/docs/handling-failures#track-delivery-attempts)\nof the resulting messages for the processing error.\n\n### Further information\n\n[Properties of a push subscription](https://cloud.google.com/pubsub/docs/push#properties_of_a_push_subscription)\n[Handling delivery failures](https://cloud.google.com/pubsub/docs/handling-failures)\n"
  },
  {
    "path": "website/content/en/rules/pubsub/WARN/2024_001.md",
    "content": "---\ntitle: \"pubsub/WARN/2024_001\"\nlinkTitle: \"WARN/2024_001\"\nweight: 1\ntype: docs\ndescription: >\n  Pub/Sub Service Account has the Publisher and Subscriber Permissions if DLQ Subscription(s) exist.\n---\n\n**Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nTo forward undeliverable messages to a dead-letter topic, Pub/Sub must have the\n'roles/pubsub.subscriber' and 'roles/pubsub.publisher' permissions enabled on the\nautomatically created Pub/Sub service account.\n\n### Remediation\n\nIn Pub/Sub, access control can be configured at the project level and at the individual resource level.\nPub/Sub creates and maintains a service account for each project: `service-{project-number}@gcp-sa-pubsub.iam.gserviceaccount.com`.\nYou can grant forwarding permissions by assigning publisher and subscriber roles to this service account.\n\n- Project Level: [Access control with IAM](https://cloud.google.com/pubsub/docs/access-control#console)\n\n- Individual resource level: [Grant IAM roles to use dead-letter topics](https://cloud.google.com/pubsub/docs/handling-failures#grant_forwarding_permissions) to the service account.\n\n\n### Further information\n"
  },
  {
    "path": "website/content/en/rules/pubsub/WARN/2024_002.md",
    "content": "---\ntitle: \"pubsub/WARN/2024_002\"\nlinkTitle: \"WARN/2024_002\"\nweight: 1\ntype: docs\ndescription: >\n  Pub/Sub service account has GCS permissions if GCS subscription(s) exist.\n---\n\n**Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nFor any GCS subscriptions to deliver messages successfully, they should\nhave the appropriate permissions at the project or bucket level.\n\n### Remediation\n\nAssign the [`roles/storage.admin`](https://cloud.google.com/pubsub/docs/create-cloudstorage-subscription#assign_roles_cloudstorage)\nrole to the Pub/Sub Service Account to assign GCS Storage Admin Permissions.\nAlternatively, assign the Pub/Sub Service Account `roles/storage.objectCreator`\nand roles/storage.legacyBucketReader roles.\n\n### Further information\n\nThe full list of permissions available in these roles can be found at the\n[GCS Permissions Doc](https://cloud.google.com/storage/docs/access-control/iam-roles).\n"
  },
  {
    "path": "website/content/en/rules/pubsub/WARN/2024_003.md",
    "content": "---\ntitle: \"pubsub/WARN/2024_003\"\nlinkTitle: \"WARN/2024_003\"\nweight: 1\ntype: docs\ndescription: >\n  Pub/Sub service account has the Encrypter and Decrypter Role if CMEK exist.\n---\n\n**Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nAs long as the service account has the CyptoKey Encrypter/Decrypter role, the\nservice can encrypt and decrypt its data. If you revoke this role, or if you\ndisable or destroy the CMEK key, that data can't be accessed.\n\n### Remediation\n\nAssign the [`roles/cloudkms.cryptoKeyEncrypterDecrypter`](https://cloud.google.com/pubsub/docs/encryption#using-cmek)\nrole to the Pub/Sub Service Account to assign CyptoKey Encrypter/Decrypter role Permissions.\n\n### Further information\n\nPlease find below for more information about the role permissions.\n- [Cloud KMS Permissions Doc](https://cloud.google.com/iam/docs/understanding-roles#cloud-kms-roles).\n\n- [Customer-managed encryption keys (CMEK)](https://cloud.google.com/kms/docs/cmek#cmek)\n"
  },
  {
    "path": "website/content/en/rules/pubsub/_index.md",
    "content": "---\ntitle: \"PUBSUB\"\nlinkTitle: \"pubsub\"\ntype: docs\n---\n"
  },
  {
    "path": "website/content/en/rules/tpu/WARN/2022_001.md",
    "content": "---\ntitle: \"tpu/WARN/2022_001\"\nlinkTitle: \"WARN/2022_001\"\nweight: 1\ntype: docs\ndescription: >\n  Cloud TPU resource availability\n---\n\n**Product**: [Cloud TPU](https://cloud.google.com/tpu)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nResource errors occur when you try to request new resources in a zone that\ncannot accommodate your request due to the current unavailability of a Cloud\nTPU resource.\n\n### Remediation\n\nYou can try in another zone where Cloud TPU Nodes are offered or please contact\nyour account or sales team to consider purchasing reserved resources (CUD)\n\n### Further information\n\n- [Cloud TPU Regions](https://cloud.google.com/tpu/docs/regions)\n- [Resource availability](https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-vm-creation#resource_availability)\n- [Committed use discounts](https://cloud.google.com/compute/docs/instances/signing-up-committed-use-discounts)\n"
  },
  {
    "path": "website/content/en/rules/tpu/_index.md",
    "content": "---\ntitle: \"TPU\"\nlinkTitle: \"tpu\"\ntype: docs\ndescription: \"Cloud TPU\"\n---\n"
  },
  {
    "path": "website/content/en/rules/vertex/WARN/2023_001.md",
    "content": "---\ntitle: \"vertex/WARN/2023_001\"\nlinkTitle: \"WARN/2023_001\"\nweight: 1\ntype: docs\ndescription: >\n  Vertex AI Featurestores should have known state\n---\n\n**Product**: [Vertex AI](https://cloud.google.com/vertex-ai)\\\n**Rule class**: WARN -\n\n### Description\n\n- Vertex AI Feature Store documentation can be found [here](https://cloud.google.com/vertex-ai/docs/featurestore)\n- Vertex AI REST API reference for Feature Stores states can be found [here](https://cloud.google.com/vertex-ai/docs/reference/rest/v1/projects.locations.featurestores#state)\n    - STABLE: The featurestore is usable\n    - UPDATING: The featurestore is still usable in this state\n    - STATE_UNSPECIFIED: The featurestore is unusable in this state\n\n### Remediation\n\n- User should investigate in Cloud Logging why the feature store has an unknown state\n"
  },
  {
    "path": "website/content/en/rules/vertex/_index.md",
    "content": "---\ntitle: \"VERTEX\"\nlinkTitle: \"vertex\"\ntype: docs\ndescription: >\n  Vertex AI\n---\n"
  },
  {
    "path": "website/content/en/rules/vpc/BP/2022_001.md",
    "content": "---\ntitle: \"vpc/BP/2022_001\"\nlinkTitle: \"BP/2022_001\"\nweight: 1\ntype: docs\ndescription: >\n  Explicit routes for Google APIs if the default route is modified.\n---\n\n**Product**: [Virtual Private Cloud](https://cloud.google.com/vpc)\\\n**Rule class**: BP - Best practice, opinionated recommendation\n\n### Description\n\nIf you need to modify the default route, then add explicit routes\nfor Google API destination IP ranges.\n\nhttps://cloud.google.com/architecture/best-practices-vpc-design#explicit-routes\n\nNote: This does not consider tagged routes or shadowed default routes.\nValidate with a Connectivity Test.\n\n### Remediation\n\n### Further information\n"
  },
  {
    "path": "website/content/en/rules/vpc/BP/2023_001.md",
    "content": "---\ntitle: \"vpc/BP/2023_001\"\nlinkTitle: \"BP/2023_001\"\nweight: 1\ntype: docs\ndescription: >\n  DNS logging is enabled for public zones.\n---\n\n**Product**: [Virtual Private Cloud](https://cloud.google.com/vpc)\\\n**Rule class**: BP - Best practice, opinionated recommendation\n\n### Description\n\nIf not enabled, customers wouldn't have visibility to what queries are being made to the zone.\n\n### Remediation\n\n### Further information\n"
  },
  {
    "path": "website/content/en/rules/vpc/SEC/2023_001.md",
    "content": "---\ntitle: \"vpc/SEC/2023_001\"\nlinkTitle: \"SEC/2023_001\"\nweight: 1\ntype: docs\ndescription: >\n  DNSSEC is enabled for public zones.\n---\n\n**Product**: [Virtual Private Cloud](https://cloud.google.com/vpc)\\\n**Rule class**: SEC - Potential security issue\n\n### Description\n\nIt is recommended to enable DNSSEC for public zones.\n\n### Remediation\n\n### Further information\n"
  },
  {
    "path": "website/content/en/rules/vpc/WARN/2022_001.md",
    "content": "---\ntitle: \"vpc/WARN/2022_001\"\nlinkTitle: \"WARN/2022_001\"\nweight: 1\ntype: docs\ndescription: >\n  Per-project quotas are not near the limit.\n---\n\n**Product**: [Quotas](https://cloud.google.com/docs/quota)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nGoogle Cloud uses quotas to restrict how much of a particular shared Google\nCloud resource that you can use. Each quota represents a specific countable\nresource.\n\nProject level quota limits the resources you can use in each project, such as\nthe number of VPCs you can create.\n\nRule will start failing if quota usage will be higher then configured threshold\n (80%).\n\n### Further information\n\n- [Working with quotas](https://cloud.google.com/docs/quota)\n"
  },
  {
    "path": "website/content/en/rules/vpc/WARN/2023_001.md",
    "content": "---\ntitle: \"vpc/WARN/2023_001\"\nlinkTitle: \"WARN/2023_001\"\nweight: 1\ntype: docs\ndescription: >\n  On-premises host can communicate with the setvice producer's network\n---\n\n**Product**: [Virtual Private Cloud](https://cloud.google.com/vpc)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nWhen you create a private connection,  the VPC network and service producer's\nnetwork only exchange subnet routes by default.\n\nEnabling the export of custom routes to this private connection allows\non-premises hosts to access the service producer's network via private\nservices access.\n\n### Remediation\n\nIn your VPC network, [update the peering connection](https://cloud.google.com/vpc/docs/using-vpc-peering#update-peer-connection) to export custom routes to the service producer's network.\n\n### Further information\n\nSee [On-premises hosts can't communicate with the service producer's network](https://cloud.google.com/vpc/docs/configure-private-services-access#on-prem).\n"
  },
  {
    "path": "website/content/en/rules/vpc/WARN/2023_002.md",
    "content": "---\ntitle: \"vpc/WARN/2023_002\"\nlinkTitle: \"WARN/2023_002\"\nweight: 1\ntype: docs\ndescription: >\n  Private zone is attached to a VPC.\n---\n\n**Product**: [Virtual Private Cloud](https://cloud.google.com/vpc)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nIf not attached to a VPC, Private zones will not be usable.\n\n### Remediation\n\n### Further information\n"
  },
  {
    "path": "website/content/en/rules/vpc/WARN/2024_001.md",
    "content": "---\ntitle: \"vpc/WARN/2024_001\"\nlinkTitle: \"WARN/2024_001\"\nweight: 1\ntype: docs\ndescription: >\n  No Unused reserved IP addresses are found.\n---\n\n**Product**: [Virtual Private Cloud](https://cloud.google.com/vpc)\\\n**Rule class**: WARN - Something that is possibly wrong\n\n### Description\n\nWe can reserve IP addresses and persists until we explicitly release it.\nUnused reserved IP addresses over the time will cause extra money.\nMake sure you identify and release those IP addresses.\n\n### Remediation\n\n- [Release a static external IP address](https://cloud.google.com/compute/docs/ip-addresses/reserve-static-external-ip-address#release_ip)\n- [Release a static internal IPv4 or IPv6 address](https://cloud.google.com/compute/docs/ip-addresses/reserve-static-internal-ip-address#delete_a_static_internal_ip_address)\n\n### Further information\n"
  },
  {
    "path": "website/content/en/rules/vpc/_index.md",
    "content": "---\ntitle: \"VPC\"\nlinkTitle: \"vpc\"\ntype: docs\ndescription: Virtual Private Cloud (VPC)\n---\n"
  },
  {
    "path": "website/content/en/runbook/_index.md",
    "content": "\n---\ntitle: \"Runbook Rules\"\nlinkTitle: \"Runbook\"\ntype: docs\nmenu:\n  main:\n    weight: 30\n---\n\n\nIn this section you find documentation for the gcpdiag runbook Diagnostic Trees and steps\nimplemented for the following GCP products:\n"
  },
  {
    "path": "website/content/en/runbook/diagnostic-trees/_index.md",
    "content": "---\ntitle: \"Debugging Trees\"\nlinkTitle: \"Debugging Trees\"\ntype: docs\nweight: 1\n---\n"
  },
  {
    "path": "website/content/en/runbook/diagnostic-trees/bigquery/_index.md",
    "content": "---\ntitle: \"BIGQUERY\"\nlinkTitle: \"bigquery\"\ntype: docs\nweight: 2\n---\n\nAll diagnostic tree available in bigquery\n"
  },
  {
    "path": "website/content/en/runbook/diagnostic-trees/bigquery/failed-query.md",
    "content": "---\ntitle: \"bigquery/Failed Query\"\nlinkTitle: \"bigquery/failed-query\"\nweight: 3\ntype: docs\ndescription: >\n  Diagnoses issues with a failed BigQuery query job.\n---\n\n**Product**: [BigQuery](https://cloud.google.com/bigquery)\n**Kind**: Debugging Tree\n\n### Description\n\nThis runbook investigates why a specific BigQuery job failed by verifying the\n  job's status and analyzing the error message against a set of known issues to\n  provide targeted remediation steps.\n\n### Executing this runbook\n\n```shell\ngcpdiag runbook bigquery/failed-query \\\n  -p project_id=value \\\n  -p bigquery_job_region=value \\\n  -p bigquery_job_id=value \\\n  -p bigquery_skip_permission_check=value\n```\n\n#### Parameters\n\n| Name | Required | Default | Type | Help |\n|------|----------|---------|------|------|\n| `project_id` | True | None | str | The Project ID where the BigQuery job was run. |\n| `bigquery_job_region` | True | None | str | The region where the BigQuery job was run. |\n| `bigquery_job_id` | True | None | str | The identifier of the failed BigQuery Job. |\n| `bigquery_skip_permission_check` | False | False | bool | Indicates whether to skip the permission check to speed up the investigation. |\n\nGet help on available commands\n\n```shell\ngcpdiag runbook --help\n```\n\n### Potential Steps\n\n  - [Big Query Failed Query Start](/runbook/steps/bigquery/big-query-failed-query-start)\n\n  - [Run Permission Checks](/runbook/steps/bigquery/run-permission-checks)\n\n  - [Big Query End](/runbook/steps/bigquery/big-query-end)\n\n  - [Big Query End](/runbook/steps/bigquery/big-query-end)\n\n  - [Big Query Job Exists](/runbook/steps/bigquery/big-query-job-exists)\n\n  - [Big Query End](/runbook/steps/bigquery/big-query-end)\n\n  - [Big Query End](/runbook/steps/bigquery/big-query-end)\n\n  - [Confirm Bq Job Is Done](/runbook/steps/bigquery/confirm-bq-job-is-done)\n\n  - [Big Query End](/runbook/steps/bigquery/big-query-end)\n\n  - [Big Query End](/runbook/steps/bigquery/big-query-end)\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT.\n-->\n"
  },
  {
    "path": "website/content/en/runbook/diagnostic-trees/cloudrun/_index.md",
    "content": "---\ntitle: \"CLOUDRUN\"\nlinkTitle: \"cloudrun\"\ntype: docs\nweight: 2\n---\n\nAll diagnostic tree available in cloudrun\n"
  },
  {
    "path": "website/content/en/runbook/diagnostic-trees/cloudrun/service-deployment.md",
    "content": "---\ntitle: \"cloudrun/Service Deployment\"\nlinkTitle: \"cloudrun/service-deployment\"\nweight: 3\ntype: docs\ndescription: >\n  Investigates the necessary GCP components searching for reasons for deployment errors.\n---\n\n**Product**: [Cloud Run](https://cloud.google.com/run)\n**Kind**: Debugging Tree\n\n### Description\n\nThis runbook will examine the following key areas:\n\n  1. Container and code Checks.\n    - Ensures the Container is in correct state to run in Cloud Run\n\n  Scope of Investigation:\n    - Note that this runbook does not provide troubleshooting steps for errors\n      caused by the code running in the container.\n\n### Executing this runbook\n\n```shell\ngcpdiag runbook cloudrun/service-deployment \\\n  -p project_id=value \\\n  -p region=value \\\n  -p service_name=value \\\n  -p cloudrun_service_name=value \\\n  -p start_time=value \\\n  -p end_time=value\n```\n\n#### Parameters\n\n| Name | Required | Default | Type | Help |\n|------|----------|---------|------|------|\n| `project_id` | True | None | str | The Project ID of the resource under investigation |\n| `region` | True | None | str | Region of the service. |\n| `service_name` | False | None | str | Name of the Cloud Run service |\n| `cloudrun_service_name` | True | None | str | Name of the Cloud Run service |\n| `start_time` | False | None | datetime | Start time of the issue |\n| `end_time` | False | None | datetime | End time of the issue |\n\nGet help on available commands\n\n```shell\ngcpdiag runbook --help\n```\n\n### Potential Steps\n\n  - [Service Deployment Start](/runbook/steps/cloudrun/service-deployment-start)\n\n  - [Service Deployment Code Step](/runbook/steps/cloudrun/service-deployment-code-step)\n\n  - [Container Failed To Start Step](/runbook/steps/cloudrun/container-failed-to-start-step)\n\n  - [Image Was Not Found Step](/runbook/steps/cloudrun/image-was-not-found-step)\n\n  - [No Permission For Image Step](/runbook/steps/cloudrun/no-permission-for-image-step)\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT.\n-->\n"
  },
  {
    "path": "website/content/en/runbook/diagnostic-trees/dataflow/_index.md",
    "content": "---\ntitle: \"DATAFLOW\"\nlinkTitle: \"dataflow\"\ntype: docs\nweight: 2\n---\n\nAll diagnostic tree available in dataflow\n"
  },
  {
    "path": "website/content/en/runbook/diagnostic-trees/dataflow/failed-streaming-pipeline.md",
    "content": "---\ntitle: \"dataflow/Failed Streaming Pipeline\"\nlinkTitle: \"dataflow/failed-streaming-pipeline\"\nweight: 3\ntype: docs\ndescription: >\n  Diagnostic checks for failed Dataflow Streaming Pipelines.\n---\n\n**Product**: [Dataflow](https://cloud.google.com/dataflow)\n**Kind**: Debugging Tree\n\n### Description\n\nProvides a DiagnosticTree to check for issues related to failed streaming\n  pipelines.\n\n  - Examples:\n    - Pipeline failed to launch\n    - Workers not starting\n\n### Executing this runbook\n\n```shell\ngcpdiag runbook dataflow/failed-streaming-pipeline \\\n  -p project_id=value \\\n  -p job_id=value \\\n  -p dataflow_job_id=value \\\n  -p job_region=value\n```\n\n#### Parameters\n\n| Name | Required | Default | Type | Help |\n|------|----------|---------|------|------|\n| `project_id` | True | None | str | The Project ID of the resource under investigation |\n| `job_id` | False | None | str | The Job ID returned when the launch command is submitted |\n| `dataflow_job_id` | True | None | str | The Job ID returned when the launch command is submitted |\n| `job_region` | True | None | str | The region configured for the job |\n\nGet help on available commands\n\n```shell\ngcpdiag runbook --help\n```\n\n### Potential Steps\n\n  - [Failed Streaming Pipeline Start](/runbook/steps/dataflow/failed-streaming-pipeline-start)\n\n  - [Job Is Streaming](/runbook/steps/dataflow/job-is-streaming)\n\n  - [Valid Sdk](/runbook/steps/dataflow/valid-sdk)\n\n  - [Job Graph Is Constructed](/runbook/steps/dataflow/job-graph-is-constructed)\n\n  - [Failed Streaming Pipeline End](/runbook/steps/dataflow/failed-streaming-pipeline-end)\n\n  - [Job Logs Visible](/runbook/steps/dataflow/job-logs-visible)\n\n  - [Failed Streaming Pipeline End](/runbook/steps/dataflow/failed-streaming-pipeline-end)\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT.\n-->\n"
  },
  {
    "path": "website/content/en/runbook/diagnostic-trees/dataflow/job-permissions.md",
    "content": "---\ntitle: \"dataflow/Job Permissions\"\nlinkTitle: \"dataflow/job-permissions\"\nweight: 3\ntype: docs\ndescription: >\n  Analysis and Resolution of Dataflow Jobs Permissions issues.\n---\n\n**Product**: [Dataflow](https://cloud.google.com/dataflow)\n**Kind**: Debugging Tree\n\n### Description\n\nThis runbook investigates Dataflow permissions and recommends remediation steps.\n\n  Areas Examined:\n  - Dataflow User Account Permissions: Verify that individual Dataflow users have the necessary\n    permissions to access and manage Dataflow jobs (e.g., create,update,cancel).\n\n  - Dataflow Service Account Permissions: Verify that the Dataflow Service Account has the required\n    permissions to execute and manage the Dataflow jobs\n\n  - Dataflow Worker Service Account: Verify that the Dataflow Worker Service Account has the\n    necessary permissions for worker instances within a Dataflow job to access input and\n    output resources during job execution.\n\n  - Dataflow Resource Permissions: Verify that Dataflow resources (e.g., Cloud Storage buckets,\n    BigQuery datasets) have the necessary permissions to be accessed and used by Dataflow jobs.\n\n  By ensuring that Dataflow resources have the necessary permissions, you\n  can prevent errors and ensure that your jobs run smoothly.\n\n### Executing this runbook\n\n```shell\ngcpdiag runbook dataflow/job-permissions \\\n  -p project_id=value \\\n  -p principal=value \\\n  -p worker_service_account=value \\\n  -p cross_project_id=value\n```\n\n#### Parameters\n\n| Name | Required | Default | Type | Help |\n|------|----------|---------|------|------|\n| `project_id` | True | None | str | The Project ID of the resource under investigation |\n| `principal` | True | None | str | The authenticated user account email. This is the user account that is used to authenticate the user to the console or the gcloud CLI. |\n| `worker_service_account` | True | None | str | Dataflow Worker Service Account used for Dataflow Job Creationand execution |\n| `cross_project_id` | False | None | str | Cross Project ID, where service account is located if it is not in the same project as the Dataflow Job |\n\nGet help on available commands\n\n```shell\ngcpdiag runbook --help\n```\n\n### Potential Steps\n\n  - [Start Step](/runbook/steps/gcpdiag/start-step)\n\n  - [Dataflow User Account Permissions](/runbook/steps/dataflow/dataflow-user-account-permissions)\n\n  - [Iam Policy Check](/runbook/steps/iam/iam-policy-check)\n\n  - [Iam Policy Check](/runbook/steps/iam/iam-policy-check)\n\n  - [Dataflow Worker Service Account Permissions](/runbook/steps/dataflow/dataflow-worker-service-account-permissions)\n\n  - [Iam Policy Check](/runbook/steps/iam/iam-policy-check)\n\n  - [Org Policy Check](/runbook/steps/crm/org-policy-check)\n\n  - [Iam Policy Check](/runbook/steps/iam/iam-policy-check)\n\n  - [Iam Policy Check](/runbook/steps/iam/iam-policy-check)\n\n  - [Iam Policy Check](/runbook/steps/iam/iam-policy-check)\n\n  - [Dataflow Resource Permissions](/runbook/steps/dataflow/dataflow-resource-permissions)\n\n  - [Iam Policy Check](/runbook/steps/iam/iam-policy-check)\n\n  - [Dataflow Permissions End](/runbook/steps/dataflow/dataflow-permissions-end)\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT.\n-->\n"
  },
  {
    "path": "website/content/en/runbook/diagnostic-trees/dataproc/_index.md",
    "content": "---\ntitle: \"DATAPROC\"\nlinkTitle: \"dataproc\"\ntype: docs\nweight: 2\n---\n\nAll diagnostic tree available in dataproc\n"
  },
  {
    "path": "website/content/en/runbook/diagnostic-trees/dataproc/cluster-creation.md",
    "content": "---\ntitle: \"dataproc/Cluster Creation\"\nlinkTitle: \"dataproc/cluster-creation\"\nweight: 3\ntype: docs\ndescription: >\n  Provides a comprehensive analysis of common issues which affect Dataproc cluster creation.\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\n**Kind**: Debugging Tree\n\n### Description\n\nThis runbook focuses on a range of potential problems for Dataproc clusters on\n  Google Cloud Platform. By conducting a series of checks, the runbook aims to\n  pinpoint the root cause of cluster creation difficulties.\n\n  The following areas are examined:\n\n  - Stockout errors: Evaluates Logs Explorer logs regarding stockout in the\n  region/zone.\n\n  - Quota availability: Checks for the quota availability in Dataproc cluster\n  project.\n\n  - Network configuration: Performs GCE Network Connectivity Tests, checks\n  necessary firewall rules, external/internal IP configuration.\n\n  - Cross-project configuration: Checks if the service account is not in the\n  same\n  project and reviews additional\n    roles and organization policies enforcement.\n\n  - Shared VPC configuration: Checks if the Dataproc cluster uses a Shared VPC\n  network and\n  evaluates if right service account roles are added.\n\n  - Init actions script failures: Evaluates Logs Explorer\n  logs regarding init actions script failures or timeouts.\n\n### Executing this runbook\n\n```shell\ngcpdiag runbook dataproc/cluster-creation \\\n  -p project_id=value \\\n  -p cluster_name=value \\\n  -p dataproc_cluster_name=value \\\n  -p region=value \\\n  -p cluster_uuid=value \\\n  -p project_number=value \\\n  -p service_account=value \\\n  -p constraint=value \\\n  -p stackdriver=value \\\n  -p zone=value \\\n  -p network=value \\\n  -p dataproc_network=value \\\n  -p subnetwork=value \\\n  -p internal_ip_only=value \\\n  -p start_time=value \\\n  -p end_time=value \\\n  -p cross_project=value \\\n  -p host_vpc_project=value\n```\n\n#### Parameters\n\n| Name | Required | Default | Type | Help |\n|------|----------|---------|------|------|\n| `project_id` | True | None | str | The Project ID where the Dataproc cluster is located |\n| `cluster_name` | False | None | str | Dataproc cluster Name of an existing/active resource |\n| `dataproc_cluster_name` | True | None | str | Dataproc cluster Name of an existing/active resource |\n| `region` | True | None | str | Dataproc cluster Region |\n| `cluster_uuid` | False | None | str | Dataproc cluster UUID |\n| `project_number` | False | None | str | The Project Number where the Dataproc cluster is located |\n| `service_account` | False | None | str | Dataproc cluster Service Account used to create the resource |\n| `constraint` | False | None | bool | Checks if the Dataproc cluster has an enforced organization policy constraint |\n| `stackdriver` | False | True | str | Checks if stackdriver logging is enabled for further troubleshooting |\n| `zone` | False | None | str | Dataproc cluster Zone |\n| `network` | False | None | str | Dataproc cluster Network |\n| `dataproc_network` | False | None | str | Dataproc cluster Network |\n| `subnetwork` | False | None | str | Dataproc cluster Subnetwork |\n| `internal_ip_only` | False | None | bool | Checks if the Dataproc cluster has been created with only Internal IP |\n| `start_time` | False | None | datetime | Start time of the issue |\n| `end_time` | False | None | datetime | End time of the issue |\n| `cross_project` | False | None | str | Cross Project ID, where service account is located if it is not in the same project as the Dataproc cluster |\n| `host_vpc_project` | False | None | str | Project ID of the Shared VPC network |\n\nGet help on available commands\n\n```shell\ngcpdiag runbook --help\n```\n\n### Potential Steps\n\n  - [Cluster Creation Start](/runbook/steps/dataproc/cluster-creation-start)\n\n  - [Cluster Details Dependency Gateway](/runbook/steps/dataproc/cluster-details-dependency-gateway)\n\n  - [Check Init Script Failure](/runbook/steps/dataproc/check-init-script-failure)\n\n  - [Check Cluster Network](/runbook/steps/dataproc/check-cluster-network)\n\n  - [Internal Ip Gateway](/runbook/steps/dataproc/internal-ip-gateway)\n\n  - [Service Account Exists](/runbook/steps/dataproc/service-account-exists)\n\n  - [Check Shared Vpc Roles](/runbook/steps/dataproc/check-shared-vpc-roles)\n\n  - [Cluster Creation Quota](/runbook/steps/dataproc/cluster-creation-quota)\n\n  - [Cluster Creation Stockout](/runbook/steps/dataproc/cluster-creation-stockout)\n\n  - [Cluster Creation End](/runbook/steps/dataproc/cluster-creation-end)\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT.\n-->\n"
  },
  {
    "path": "website/content/en/runbook/diagnostic-trees/dataproc/spark-job-failures.md",
    "content": "---\ntitle: \"dataproc/Spark Job Failures\"\nlinkTitle: \"dataproc/spark-job-failures\"\nweight: 3\ntype: docs\ndescription: >\n  Provides a comprehensive analysis of common issues which affects Dataproc Spark job failures.\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\n**Kind**: Debugging Tree\n\n### Description\n\nThis runbook focuses on a range of potential problems for Dataproc Spark jobs\n  on\n  Google Cloud Platform. By conducting a series of checks, the runbook aims to\n  pinpoint the root cause of Spark job failures.\n\n  The following areas are examined:\n\n  - Cluster version supportability: Evaluates if the job was run on a supported\n  cluster image version.\n  - Permissions: Checks for permission related issues on the cluster and GCS\n  bucket level.\n  - OOM: Checks Out-Of-Memory issues for the Spark job on master or worker\n  nodes.\n  - Logs: Check other logs related to shuffle failures, broken pipe, YARN\n  runtime exception, import failures.\n  - Throttling: Checks if the job was throttled and provides the exact reason\n  for it.\n  - GCS Connector: Evaluates possible issues with the GCS Connector.\n  - BigQuery Connector: Evaluates possible issues with BigQuery Connector, such\n  as dependency version conflicts.\n\n### Executing this runbook\n\n```shell\ngcpdiag runbook dataproc/spark-job-failures \\\n  -p project_id=value \\\n  -p job_id=value \\\n  -p dataproc_job_id=value \\\n  -p region=value \\\n  -p zone=value \\\n  -p service_account=value \\\n  -p cross_project=value \\\n  -p stackdriver=value\n```\n\n#### Parameters\n\n| Name | Required | Default | Type | Help |\n|------|----------|---------|------|------|\n| `project_id` | True | None | str | The Project ID of the resource under investigation |\n| `job_id` | False | None | str | The Job ID of the resource under investigation |\n| `dataproc_job_id` | True | None | str | The Job ID of the resource under investigation |\n| `region` | True | None | str | Dataproc job/cluster Region |\n| `zone` | False | None | str | Dataproc cluster Zone |\n| `service_account` | False | None | str | Dataproc cluster Service Account used to create the resource |\n| `cross_project` | False | None | str | Cross Project ID, where service account is located if it is not in the same project as the Dataproc cluster |\n| `stackdriver` | False | False | str | Checks if stackdriver logging is enabled for further troubleshooting |\n\nGet help on available commands\n\n```shell\ngcpdiag runbook --help\n```\n\n### Potential Steps\n\n  - [Job Start](/runbook/steps/dataproc/job-start)\n\n  - [Job Details Dependency Gateway](/runbook/steps/dataproc/job-details-dependency-gateway)\n\n  - [Check Task Not Found](/runbook/steps/dataproc/check-task-not-found)\n\n  - [Check Master Oom](/runbook/steps/dataproc/check-master-oom)\n\n  - [Check Worker Oom](/runbook/steps/dataproc/check-worker-oom)\n\n  - [Check Sw Preemption](/runbook/steps/dataproc/check-sw-preemption)\n\n  - [Check Worker Disk Usage Issue](/runbook/steps/dataproc/check-worker-disk-usage-issue)\n\n  - [Check Port Exhaustion](/runbook/steps/dataproc/check-port-exhaustion)\n\n  - [Check Killing Orphaned Application](/runbook/steps/dataproc/check-killing-orphaned-application)\n\n  - [Check Python Import Failure](/runbook/steps/dataproc/check-python-import-failure)\n\n  - [Check Shuffle Service Kill](/runbook/steps/dataproc/check-shuffle-service-kill)\n\n  - [Check Gc Pause](/runbook/steps/dataproc/check-gc-pause)\n\n  - [Check Yarn Runtime Exception](/runbook/steps/dataproc/check-yarn-runtime-exception)\n\n  - [Check Job Throttling](/runbook/steps/dataproc/check-job-throttling)\n\n  - [Check Gcs Connector](/runbook/steps/dataproc/check-gcs-connector)\n\n  - [Check Shuffle Failures](/runbook/steps/dataproc/check-shuffle-failures)\n\n  - [Check Stackdriver Setting](/runbook/steps/dataproc/check-stackdriver-setting)\n\n  - [Check Cluster Version](/runbook/steps/dataproc/check-cluster-version)\n\n  - [Check Permissions](/runbook/steps/dataproc/check-permissions)\n\n  - [Check Cluster Network Connectivity](/runbook/steps/dataproc/check-cluster-network-connectivity)\n\n  - [Check Bq Connector](/runbook/steps/dataproc/check-bq-connector)\n\n  - [Spark Job End](/runbook/steps/dataproc/spark-job-end)\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT.\n-->\n"
  },
  {
    "path": "website/content/en/runbook/diagnostic-trees/gce/_index.md",
    "content": "---\ntitle: \"GCE\"\nlinkTitle: \"gce\"\ntype: docs\nweight: 2\n---\n\nAll diagnostic tree available in gce\n"
  },
  {
    "path": "website/content/en/runbook/diagnostic-trees/gce/guestos-bootup.md",
    "content": "---\ntitle: \"gce/Guestos Bootup\"\nlinkTitle: \"gce/guestos-bootup\"\nweight: 3\ntype: docs\ndescription: >\n  Google Compute Engine VM Guest OS boot-up runbook.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\n**Kind**: Debugging Tree\n\n### Description\n\nThis runbook is designed to investigate the various boot-up stages of a Linux or Windows Guest\n    OS running on Google Compute Engine. It is intended to help you identify and troubleshoot issues\n    that may arise during the boot process. The runbook provides a structured approach to resolve\n    issues.\n\n    Key Investigation Areas:\n\n    Boot Issues:\n        - Check for Boot issues happening due to Kernel panics\n        - Check for GRUB related issues.\n        - Check if system failed to find boot disk.\n        - Check if Filesystem corruption is causing issues with system boot.\n        - Check if \"/\" Filesystem consumption is causing issues with system boot.\n\n    Cloud-init checks:\n        - Check if cloud-init has initialised or started.\n        - Check if NIC has received the IP.\n\n    Network related issues:\n        - Check if metadata server became unreachable since last boot.\n        - Check if there are any time sync related errors.\n\n    Google Guest Agent checks:\n        - Check if there are logs related to successful startup of Google Guest Agent.\n\n### Executing this runbook\n\n```shell\ngcpdiag runbook gce/guestos-bootup \\\n  -p project_id=value \\\n  -p instance_name=value \\\n  -p instance_id=value \\\n  -p zone=value \\\n  -p serial_console_file=value\n```\n\n#### Parameters\n\n| Name | Required | Default | Type | Help |\n|------|----------|---------|------|------|\n| `project_id` | True | None | str | The Project ID associated with the VM |\n| `instance_name` | True | None | str | The name of the VM |\n| `instance_id` | False | None | str | The instance-id of the VM |\n| `zone` | True | None | str | The Google Cloud zone where the VM is located. |\n| `serial_console_file` | False | None | str | Absolute path of files contailing the Serial console logs, in case if gcpdiag is not able to reach the VM Serial logs. i.e -p serial_console_file=\"filepath1,filepath2\"  |\n\nGet help on available commands\n\n```shell\ngcpdiag runbook --help\n```\n\n### Potential Steps\n\n  - [Guestos Bootup Start](/runbook/steps/gce/guestos-bootup-start)\n\n  - [Vm Serial Logs Check](/runbook/steps/gce/vm-serial-logs-check)\n\n  - [Vm Serial Logs Check](/runbook/steps/gce/vm-serial-logs-check)\n\n  - [Cloud Init Checks](/runbook/steps/gce/cloud-init-checks)\n\n  - [Vm Serial Logs Check](/runbook/steps/gce/vm-serial-logs-check)\n\n  - [Vm Serial Logs Check](/runbook/steps/gce/vm-serial-logs-check)\n\n  - [Vm Serial Logs Check](/runbook/steps/gce/vm-serial-logs-check)\n\n  - [Vm Serial Logs Check](/runbook/steps/gce/vm-serial-logs-check)\n\n  - [End Step](/runbook/steps/gcpdiag/end-step)\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT.\n-->\n"
  },
  {
    "path": "website/content/en/runbook/diagnostic-trees/gce/ops-agent.md",
    "content": "---\ntitle: \"gce/Ops Agent\"\nlinkTitle: \"gce/ops-agent\"\nweight: 3\ntype: docs\ndescription: >\n  Investigates the necessary GCP components for the proper functioning of the Ops Agent in a VM\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\n**Kind**: Debugging Tree\n\n### Description\n\nThis runbook will examine the following key areas:\n\n  1. API Service Checks:\n    - Ensures that Cloud APIs for Logging and/or Monitoring are accessible.\n\n  2. Permission Checks:\n    - Verifies that the necessary permissions are in place for exporting logs and/or metrics.\n\n  3. Workload Authentication:\n    - Confirms that the Ops Agent has a service account for authentication.\n    - If using Google Application Credentials, provide the service account\n      with the `gac_service_account` parameter.\n\n  4. Scope of Investigation:\n    - Note that this runbook does not include internal VM checks, such as guest OS investigations.\n\n### Executing this runbook\n\n```shell\ngcpdiag runbook gce/ops-agent \\\n  -p project_id=value \\\n  -p instance_name=value \\\n  -p instance_id=value \\\n  -p zone=value \\\n  -p start_time=value \\\n  -p end_time=value \\\n  -p gac_service_account=value \\\n  -p check_logging=value \\\n  -p check_monitoring=value \\\n  -p check_serial_port_logging=value\n```\n\n#### Parameters\n\n| Name | Required | Default | Type | Help |\n|------|----------|---------|------|------|\n| `project_id` | True | None | str | The Project ID containing the VM |\n| `instance_name` | True | None | str | Name of the GCE instance running the Ops Agent |\n| `instance_id` | False | None | str | ID of the GCE instance running the Ops Agent |\n| `zone` | True | None | str | Zone of the GCE instance running the Ops Agent |\n| `start_time` | False | None | datetime | Start time of the issue |\n| `end_time` | False | None | datetime | End time of the issue |\n| `gac_service_account` | False | None | str | GOOGLE_APPLICATION_CREDENTIALS used by ops agent, if applicable |\n| `check_logging` | False | True | bool | Investigate logging issues |\n| `check_monitoring` | False | True | bool | Investigate monitoring issues |\n| `check_serial_port_logging` | False | True | bool | Check if VM Serial logging is enabled |\n\nGet help on available commands\n\n```shell\ngcpdiag runbook --help\n```\n\n### Potential Steps\n\n  - [Ops Agent Start](/runbook/steps/gce/ops-agent-start)\n\n  - [Vm Has A Service Account](/runbook/steps/gce/vm-has-a-service-account)\n\n  - [Vm Has An Active Service Account](/runbook/steps/iam/vm-has-an-active-service-account)\n\n  - [Investigate Logging Monitoring](/runbook/steps/gce/investigate-logging-monitoring)\n\n  - [Service Api Status Check](/runbook/steps/gcp/service-api-status-check)\n\n  - [Iam Policy Check](/runbook/steps/iam/iam-policy-check)\n\n  - [Vm Scope](/runbook/steps/gce/vm-scope)\n\n  - [Vm Has Ops Agent](/runbook/steps/gce/vm-has-ops-agent)\n\n  - [Check Serial Port Logging](/runbook/steps/gce/check-serial-port-logging)\n\n  - [Service Api Status Check](/runbook/steps/gcp/service-api-status-check)\n\n  - [Iam Policy Check](/runbook/steps/iam/iam-policy-check)\n\n  - [Vm Scope](/runbook/steps/gce/vm-scope)\n\n  - [Vm Has Ops Agent](/runbook/steps/gce/vm-has-ops-agent)\n\n  - [Ops Agent End](/runbook/steps/gce/ops-agent-end)\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT.\n-->\n"
  },
  {
    "path": "website/content/en/runbook/diagnostic-trees/gce/serial-log-analyzer.md",
    "content": "---\ntitle: \"gce/Serial Log Analyzer\"\nlinkTitle: \"gce/serial-log-analyzer\"\nweight: 3\ntype: docs\ndescription: >\n  Google Compute Engine VM Serial log analyzer\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\n**Kind**: Debugging Tree\n\n### Description\n\nThis runbook is designed to assist you in investigating the serial console logs of a vm.\n\n    Key Investigation Areas:\n\n    Boot Issues:\n        - Check for Boot issues happening due to Kernel panics\n        - Check for GRUB related issues.\n        - Check if system failed to find boot disk.\n        - Check if Filesystem corruption is causing issues with system boot.\n        - Check if \"/\" Filesystem consumption is causing issues with system boot.\n\n    Memory crunch issues:\n        - Check if OOM kills happened on the VM or any other memory related issues.\n\n    Cloud-init checks:\n        - Check if cloud-init has initialised or started.\n        - Check if NIC has received the IP.\n\n    Network related issues:\n        - Check if metadata server became unreachable since last boot.\n        - Check if there are any time sync related errors.\n\n    SSHD checks:\n        - Check if there are logs related to successful startup of SSHD service.\n\n    SSHD Auth Failures checks:\n        - Check for SSH issues due to bad permissions of files or directories\n\n    Google Guest Agent checks:\n        - Check if there are logs related to successful startup of Google Guest Agent.\n\n    SSH guard check:\n        - Check if SSHGuard is active and may be blocking IP addresses\n\n### Executing this runbook\n\n```shell\ngcpdiag runbook gce/serial-log-analyzer \\\n  -p project_id=value \\\n  -p name=value \\\n  -p instance_name=value \\\n  -p id=value \\\n  -p zone=value \\\n  -p serial_console_file=value\n```\n\n#### Parameters\n\n| Name | Required | Default | Type | Help |\n|------|----------|---------|------|------|\n| `project_id` | True | None | str | The Project ID associated with the VM for which you want to                 analyse the Serial logs. |\n| `name` | False | None | str | The name of the VM, for which you want to analyse the Serial logs. Or provide the id i.e -p name=<str> |\n| `instance_name` | True | None | str | The name of the VM, for which you want to analyse the Serial logs. Or provide the id i.e -p name=<str> |\n| `id` | False | None | str | The instance-id of the VM, for which you want to analyse the Serial logs. Or provide the id i.e -p id=<int> |\n| `zone` | True | None | str | The Google Cloud zone where the VM is located. |\n| `serial_console_file` | False | None | str | Absolute path of files contailing the Serial console logs, in case if gcpdiag is not able to reach the VM Serial logs. i.e -p serial_console_file=\"filepath1,filepath2\"  |\n\nGet help on available commands\n\n```shell\ngcpdiag runbook --help\n```\n\n### Potential Steps\n\n  - [Serial Log Analyzer Start](/runbook/steps/gce/serial-log-analyzer-start)\n\n  - [Vm Serial Logs Check](/runbook/steps/gce/vm-serial-logs-check)\n\n  - [Vm Serial Logs Check](/runbook/steps/gce/vm-serial-logs-check)\n\n  - [Vm Serial Logs Check](/runbook/steps/gce/vm-serial-logs-check)\n\n  - [Vm Serial Logs Check](/runbook/steps/gce/vm-serial-logs-check)\n\n  - [Vm Serial Logs Check](/runbook/steps/gce/vm-serial-logs-check)\n\n  - [Vm Serial Logs Check](/runbook/steps/gce/vm-serial-logs-check)\n\n  - [Cloud Init Checks](/runbook/steps/gce/cloud-init-checks)\n\n  - [Vm Serial Logs Check](/runbook/steps/gce/vm-serial-logs-check)\n\n  - [Vm Serial Logs Check](/runbook/steps/gce/vm-serial-logs-check)\n\n  - [Vm Serial Logs Check](/runbook/steps/gce/vm-serial-logs-check)\n\n  - [Vm Serial Logs Check](/runbook/steps/gce/vm-serial-logs-check)\n\n  - [Vm Serial Logs Check](/runbook/steps/gce/vm-serial-logs-check)\n\n  - [Vm Serial Logs Check](/runbook/steps/gce/vm-serial-logs-check)\n\n  - [Vm Serial Logs Check](/runbook/steps/gce/vm-serial-logs-check)\n\n  - [Vm Serial Logs Check](/runbook/steps/gce/vm-serial-logs-check)\n\n  - [Analysing Serial Logs End](/runbook/steps/gce/analysing-serial-logs-end)\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT.\n-->\n"
  },
  {
    "path": "website/content/en/runbook/diagnostic-trees/gce/ssh.md",
    "content": "---\ntitle: \"gce/Ssh\"\nlinkTitle: \"gce/ssh\"\nweight: 3\ntype: docs\ndescription: >\n  A comprehensive troubleshooting guide for common issues which affects SSH connectivity to VMs.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\n**Kind**: Debugging Tree\n\n### Description\n\nInvestigates components required for ssh on either Windows and Linux VMs\n  hosted on Google Cloud Platform and pinpoint misconfigurations.\n\n  Areas Examined:\n\n  - VM Instance Status: Evaluates the VM's current state, performance - ensuring that it is running\n    and not impaired by high CPU usage, insufficient memory, or disk space issues that might disrupt\n    normal SSH operations.\n\n  - User Permissions: Checks for the necessary Google Cloud IAM permissions that are required to\n    leverage OS Login features and to use metadata-based SSH keys for authentication.\n\n  - VM Configuration: Analyzes the VM's metadata settings to confirm the inclusion of SSH keys,\n    flags and other essential configuration details that facilitate SSH access.\n\n  - GCE Network Connectivity Tests: Reviews applicable firewall rules to verify that there are no\n    network barriers preventing SSH access to the VM.\n\n  - Internal Guest OS Checks: Analysis available Guest OS metrics or logs to detect any\n    misconfigurations or service disruptions that could be obstructing SSH functionality.\n\n  - SSH in Browser Checks: Checks if the authenticated user has relevant permissions and\n    the organization policies permits SSH in Browser.\n\n### Executing this runbook\n\n```shell\ngcpdiag runbook gce/ssh \\\n  -p project_id=value \\\n  -p name=value \\\n  -p instance_name=value \\\n  -p instance_id=value \\\n  -p id=value \\\n  -p zone=value \\\n  -p principal=value \\\n  -p local_user=value \\\n  -p posix_user=value \\\n  -p tunnel_through_iap=value \\\n  -p proxy=value \\\n  -p check_os_login=value \\\n  -p client=value \\\n  -p src_ip=value \\\n  -p protocol_type=value \\\n  -p port=value \\\n  -p check_ssh_in_browser=value \\\n  -p access_method=value \\\n  -p mfa=value\n```\n\n#### Parameters\n\n| Name | Required | Default | Type | Help |\n|------|----------|---------|------|------|\n| `project_id` | True | None | str | The ID of the project hosting the GCE Instance |\n| `name` | False | None | str | The name of the target GCE Instance |\n| `instance_name` | False | None | str | The name of the target GCE Instance |\n| `instance_id` | False | None | int | The instance ID of the target GCE Instance |\n| `id` | False | None | int | The instance ID of the target GCE Instance |\n| `zone` | True | None | str | The zone of the target GCE Instance |\n| `principal` | False | None | str | The user or service account initiating the SSH connection. This user should be authenticated in gcloud/cloud console when sshing into to a GCE instance. For service account impersonation, it should be the service account's email. (format: user:user@example.com or serviceAccount:service-account-name@project-id.iam.gserviceaccount.com) |\n| `local_user` | False | None | str | Posix User on the VM |\n| `posix_user` | False | None | str | Posix User on the VM |\n| `tunnel_through_iap` | False | True | bool | ('A boolean parameter (true or false) indicating whether ', 'Identity-Aware Proxy should be used for establishing the SSH connection.') |\n| `proxy` | False | None | str | ('A string that specifies the method used to establish the SSH connection, ', 'and indicating whether Identity-Aware Proxy (IAP) or a jumphost is utilized.') |\n| `check_os_login` | False | True | bool | A boolean value (true or false) indicating whether OS Login should be used for SSH authentication |\n| `client` | False | None | str | The SSH client application used to establish SSH connection |\n| `src_ip` | False | None | IPv4Address | The IPv4 address of the workstation connecting to the network, or the IP of the bastion/jumphost if currently logged in through one. |\n| `protocol_type` | False | tcp | str | Protocol used to connect to SSH |\n| `port` | False | 22 | int | The port used to connect to on the remote host (default: 22) |\n| `check_ssh_in_browser` | False | False | bool | Check that SSH in Browser is feasible |\n| `access_method` | False | None | str | The method used to share or restrict access to the instance |\n| `mfa` | False | None | str | Multifactor authentication required to access to the instance |\n\nGet help on available commands\n\n```shell\ngcpdiag runbook --help\n```\n\n### Potential Steps\n\n  - [Ssh Start](/runbook/steps/gce/ssh-start)\n\n  - [Vm Lifecycle State](/runbook/steps/gce/vm-lifecycle-state)\n\n  - [Vm Performance Checks](/runbook/steps/gce/vm-performance-checks)\n\n  - [High Vm Memory Utilization](/runbook/steps/gce/high-vm-memory-utilization)\n\n  - [High Vm Disk Utilization](/runbook/steps/gce/high-vm-disk-utilization)\n\n  - [High Vm Cpu Utilization](/runbook/steps/gce/high-vm-cpu-utilization)\n\n  - [Vm Guest Os Type](/runbook/steps/gce/vm-guest-os-type)\n\n  - [Linux Guest Os Checks](/runbook/steps/gce/linux-guest-os-checks)\n\n  - [Windows Guest Os Checks](/runbook/steps/gce/windows-guest-os-checks)\n\n  - [Gcp Ssh Permissions](/runbook/steps/gce/gcp-ssh-permissions)\n\n  - [Iam Policy Check](/runbook/steps/iam/iam-policy-check)\n\n  - [Iam Policy Check](/runbook/steps/iam/iam-policy-check)\n\n  - [Os Login Status Check](/runbook/steps/gce/os-login-status-check)\n\n  - [Iam Policy Check](/runbook/steps/iam/iam-policy-check)\n\n  - [Gce Firewall Allows Ssh](/runbook/steps/gce/gce-firewall-allows-ssh)\n\n  - [Gce Vpc Connectivity Check](/runbook/steps/gce/gce-vpc-connectivity-check)\n\n  - [Gce Vpc Connectivity Check](/runbook/steps/gce/gce-vpc-connectivity-check)\n\n  - [Gce Vpc Connectivity Check](/runbook/steps/gce/gce-vpc-connectivity-check)\n\n  - [Vm Serial Logs Check](/runbook/steps/gce/vm-serial-logs-check)\n\n  - [Vm Serial Logs Check](/runbook/steps/gce/vm-serial-logs-check)\n\n  - [Ssh In Browser Check](/runbook/steps/gce/ssh-in-browser-check)\n\n  - [Org Policy Check](/runbook/steps/crm/org-policy-check)\n\n  - [Ssh End](/runbook/steps/gce/ssh-end)\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT.\n-->\n"
  },
  {
    "path": "website/content/en/runbook/diagnostic-trees/gce/vm-creation.md",
    "content": "---\ntitle: \"gce/Vm Creation\"\nlinkTitle: \"gce/vm-creation\"\nweight: 3\ntype: docs\ndescription: >\n  Runbook for diagnosing VM creation issues.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\n**Kind**: Debugging Tree\n\n### Description\n\nThis runbook helps identify and resolve issues related to VM creation in Google Cloud.\n\n    - Checks for quota-related issues.\n    - Checks for permission-related issues.\n    - Checks for conflicts such as resource already existing.\n\n### Executing this runbook\n\n```shell\ngcpdiag runbook gce/vm-creation \\\n  -p project_id=value \\\n  -p instance_name=value \\\n  -p zone=value \\\n  -p principal=value \\\n  -p start_time=value \\\n  -p end_time=value \\\n  -p check_zone_separation_policy=value\n```\n\n#### Parameters\n\n| Name | Required | Default | Type | Help |\n|------|----------|---------|------|------|\n| `project_id` | True | None | str | The Project ID which will host the VM to be created. |\n| `instance_name` | True | None | str | The name of the VM to be created. |\n| `zone` | True | None | str | The Google Cloud zone of the VM to be created. |\n| `principal` | False | None | str | The authenticated principal that initiated the VM creation. |\n| `start_time` | False | None | datetime | The start window to investigate vm termination. Format: YYYY-MM-DDTHH:MM:SSZ |\n| `end_time` | False | None | datetime | The end window for the investigation. Format: YYYY-MM-DDTHH:MM:SSZ |\n| `check_zone_separation_policy` | False | False | bool | Check if the zone separation policy is enforced. |\n\nGet help on available commands\n\n```shell\ngcpdiag runbook --help\n```\n\n### Potential Steps\n\n  - [Start Step](/runbook/steps/gcpdiag/start-step)\n\n  - [Investigate Vm Creation Log Failure](/runbook/steps/gce/investigate-vm-creation-log-failure)\n\n  - [Org Policy Check](/runbook/steps/crm/org-policy-check)\n\n  - [End Step](/runbook/steps/gcpdiag/end-step)\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT.\n-->\n"
  },
  {
    "path": "website/content/en/runbook/diagnostic-trees/gce/vm-performance.md",
    "content": "---\ntitle: \"gce/Vm Performance\"\nlinkTitle: \"gce/vm-performance\"\nweight: 3\ntype: docs\ndescription: >\n  Google Compute Engine VM performance checks\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\n**Kind**: Debugging Tree\n\n### Description\n\nThis runbook is designed to assist you in investigating and understanding the underlying reasons\n  behind the performance issues of your Google Compute Engine VMs within Google Cloud Platform.\n\n  Key Investigation Areas:\n\n    - High CPU utilisation\n    - CPU Over-commitment for E2 or Sole-Tenant VMs\n    - High Memory utilisation\n    - Disk space high utilisation\n    - High Disk IOPS utilisation\n    - High Disk Throughput utilisation\n    - Disk Health check\n    - Disk IO latency check\n    - Disk Slowness check\n    - Check for Live Migrations\n    - Usual Error checks in Serial console logs\n\n### Executing this runbook\n\n```shell\ngcpdiag runbook gce/vm-performance \\\n  -p project_id=value \\\n  -p name=value \\\n  -p instance_name=value \\\n  -p zone=value \\\n  -p start_time=value \\\n  -p end_time=value\n```\n\n#### Parameters\n\n| Name | Required | Default | Type | Help |\n|------|----------|---------|------|------|\n| `project_id` | True | None | str | The Project ID associated with the VM having performance issues. |\n| `name` | False | None | str | The name of the VM having performance issues. Or provide the id i.e -p name=<int> |\n| `instance_name` | True | None | str | The name of the VM having performance issues. Or provide the id i.e -p name=<int> |\n| `zone` | True | None | str | The Google Cloud zone where the VM having performance issues, is located. |\n| `start_time` | False | None | datetime | The start window(in UTC) to investigate vm performance issues.Format: YYYY-MM-DDTHH:MM:SSZ |\n| `end_time` | False | None | datetime | The end window(in UTC) for the investigation. Format: YYYY-MM-DDTHH:MM:SSZ |\n\nGet help on available commands\n\n```shell\ngcpdiag runbook --help\n```\n\n### Potential Steps\n\n  - [Vm Performance Start](/runbook/steps/gce/vm-performance-start)\n\n  - [Vm Lifecycle State](/runbook/steps/gce/vm-lifecycle-state)\n\n  - [High Vm Cpu Utilization](/runbook/steps/gce/high-vm-cpu-utilization)\n\n  - [Cpu Overcommitment Check](/runbook/steps/gce/cpu-overcommitment-check)\n\n  - [High Vm Memory Utilization](/runbook/steps/gce/high-vm-memory-utilization)\n\n  - [Vm Serial Logs Check](/runbook/steps/gce/vm-serial-logs-check)\n\n  - [Disk Health Check](/runbook/steps/gce/disk-health-check)\n\n  - [High Vm Disk Utilization](/runbook/steps/gce/high-vm-disk-utilization)\n\n  - [Vm Serial Logs Check](/runbook/steps/gce/vm-serial-logs-check)\n\n  - [Vm Serial Logs Check](/runbook/steps/gce/vm-serial-logs-check)\n\n  - [Vm Serial Logs Check](/runbook/steps/gce/vm-serial-logs-check)\n\n  - [Disk Avg Io Latency Check](/runbook/steps/gce/disk-avg-io-latency-check)\n\n  - [Check Live Migrations](/runbook/steps/gce/check-live-migrations)\n\n  - [Disk Iops Throughput Utilisation Checks](/runbook/steps/gce/disk-iops-throughput-utilisation-checks)\n\n  - [Disk Iops Throughput Utilisation Checks](/runbook/steps/gce/disk-iops-throughput-utilisation-checks)\n\n  - [Vm Performance End](/runbook/steps/gce/vm-performance-end)\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT.\n-->\n"
  },
  {
    "path": "website/content/en/runbook/diagnostic-trees/gce/vm-termination.md",
    "content": "---\ntitle: \"gce/Vm Termination\"\nlinkTitle: \"gce/vm-termination\"\nweight: 3\ntype: docs\ndescription: >\n  GCE Instance unexpected shutdowns and reboots diagnostics\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\n**Kind**: Debugging Tree\n\n### Description\n\nThis runbook assists in investigating and understanding the reasons behind unexpected\n  terminations or reboots of GCE Virtual Machines (VMs).\n\n  Areas investigated:\n\n  - System event-triggered shutdowns and reboots: Identifies terminations initiated by Google Cloud\n    systems due to maintenance events, hardware failures, or resource constraints.\n\n  - Admin activities-triggered shutdown/reboot: Investigates terminations caused by direct actions,\n    such as API calls made by users or service accounts, including manual shutdowns, restarts, or\n    automated processes impacting VM states.\n\n### Executing this runbook\n\n```shell\ngcpdiag runbook gce/vm-termination \\\n  -p project_id=value \\\n  -p instance_name=value \\\n  -p instance_id=value \\\n  -p zone=value \\\n  -p start_time=value \\\n  -p end_time=value \\\n  -p operation_type=value\n```\n\n#### Parameters\n\n| Name | Required | Default | Type | Help |\n|------|----------|---------|------|------|\n| `project_id` | True | None | str | The Project ID hosting the terminated VM. |\n| `instance_name` | True | None | str | The name of the terminated VM. Or provide the id i.e -p id=<int> |\n| `instance_id` | False | None | int | The instance ID of the terminated VM. Or provide name instead i.e -p name=<str> |\n| `zone` | True | None | str | The Google Cloud zone where the terminated VM is located. |\n| `start_time` | False | None | datetime | The start window to investigate vm termination. Format: YYYY-MM-DDTHH:MM:SSZ |\n| `end_time` | False | None | datetime | The end window for the investigation. Format: YYYY-MM-DDTHH:MM:SSZ |\n| `operation_type` | False | None | str | The type of operation to investigate. eg. \"compute.instances.hostError\" |\n\nGet help on available commands\n\n```shell\ngcpdiag runbook --help\n```\n\n### Potential Steps\n\n  - [Vm Termination Start](/runbook/steps/gce/vm-termination-start)\n\n  - [Termination Operation Type](/runbook/steps/gce/termination-operation-type)\n\n  - [Managed Instance Group Recreation](/runbook/steps/gce/managed-instance-group-recreation)\n\n  - [Preemptible Instance](/runbook/steps/gce/preemptible-instance)\n\n  - [Host Error](/runbook/steps/gce/host-error)\n\n  - [Guest Os Issued Shutdown](/runbook/steps/gce/guest-os-issued-shutdown)\n\n  - [Terminate On Host Maintenance](/runbook/steps/gce/terminate-on-host-maintenance)\n\n  - [Stop Operation Gateway](/runbook/steps/gce/stop-operation-gateway)\n\n  - [Vm Termination End](/runbook/steps/gce/vm-termination-end)\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT.\n-->\n"
  },
  {
    "path": "website/content/en/runbook/diagnostic-trees/gcf/_index.md",
    "content": "---\ntitle: \"GCF\"\nlinkTitle: \"gcf\"\ntype: docs\nweight: 2\n---\n\nAll diagnostic tree available in gcf\n"
  },
  {
    "path": "website/content/en/runbook/diagnostic-trees/gcf/failed-deployments.md",
    "content": "---\ntitle: \"gcf/Failed Deployments\"\nlinkTitle: \"gcf/failed-deployments\"\nweight: 3\ntype: docs\ndescription: >\n  Cloud Run function failed deployments check\n---\n\n**Product**: [Cloud Functions](https://cloud.google.com/functions)\n**Kind**: Debugging Tree\n\n### Description\n\nThis runbook will assist users to check reasons for failed deployments of Gen2 cloud functions.\n  Current basic Validations:\n  - Check for existence of Default SA\n  - Check for existence of Cloud function Service Agent\n  - Check for existence of cloud functions Service Agent and its permissions\n  - Check for error logs for global scope code errors and resource location constraint.\n\n### Executing this runbook\n\n```shell\ngcpdiag runbook gcf/failed-deployments \\\n  -p project_id=value \\\n  -p name=value \\\n  -p cloud_function_name=value \\\n  -p region=value \\\n  -p start_time=value \\\n  -p end_time=value \\\n  -p gac_service_account=value\n```\n\n#### Parameters\n\n| Name | Required | Default | Type | Help |\n|------|----------|---------|------|------|\n| `project_id` | True | None | str | The Project ID containing the cloud function |\n| `name` | False | None | str | Name of the cloud function failing deployment |\n| `cloud_function_name` | True | None | str | Name of the cloud function failing deployment |\n| `region` | True | None | str | Region of the cloud function failing deployment |\n| `start_time` | False | None | datetime | Start time of the issue Format: YYYY-MM-DDTHH:MM:SSZ |\n| `end_time` | False | None | datetime | End time of the issue. Format: YYYY-MM-DDTHH:MM:SSZ |\n| `gac_service_account` | False | None | str | Service account used by the user for deployment. |\n\nGet help on available commands\n\n```shell\ngcpdiag runbook --help\n```\n\n### Potential Steps\n\n  - [Failed Deployments Start](/runbook/steps/gcf/failed-deployments-start)\n\n  - [Default Service Account Check](/runbook/steps/gcf/default-service-account-check)\n\n  - [Iam Policy Check](/runbook/steps/iam/iam-policy-check)\n\n  - [User Service Account Check](/runbook/steps/gcf/user-service-account-check)\n\n  - [Function Global Scope Check](/runbook/steps/gcf/function-global-scope-check)\n\n  - [Location Constraint Check](/runbook/steps/gcf/location-constraint-check)\n\n  - [Failed Deployment End Step](/runbook/steps/gcf/failed-deployment-end-step)\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT.\n-->\n"
  },
  {
    "path": "website/content/en/runbook/diagnostic-trees/gke/_index.md",
    "content": "---\ntitle: \"GKE\"\nlinkTitle: \"gke\"\ntype: docs\nweight: 2\n---\n\nAll diagnostic tree available in gke\n"
  },
  {
    "path": "website/content/en/runbook/diagnostic-trees/gke/cluster-autoscaler.md",
    "content": "---\ntitle: \"gke/Cluster Autoscaler\"\nlinkTitle: \"gke/cluster-autoscaler\"\nweight: 3\ntype: docs\ndescription: >\n  Analyses logs in the project where the cluster is running.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\n**Kind**: Debugging Tree\n\n### Description\n\nIf there are log entries that contain messages listed in the public documentation\n  https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-autoscaler-visibility#messages\n  then provide details on how each particular issue can be solved.\n\n  The following ScaleUP logs messages are covered:\n  - scale.up.error.out.of.resources\n  - scale.up.error.quota.exceeded\n  - scale.up.error.waiting.for.instances.timeout\n  - scale.up.error.ip.space.exhausted\n  - scale.up.error.service.account.deleted\n\n  The following ScaleDown logs messages are covered:\n  - scale.down.error.failed.to.evict.pods\n  - no.scale.down.node.node.group.min.size.reached\n  - no.scale.down.node.scale.down.disabled.annotation\n  - no.scale.down.node.minimal.resource.limits.exceeded\n  - no.scale.down.node.no.place.to.move.pods\n  - no.scale.down.node.pod.not.backed.by.controller\n  - no.scale.down.node.pod.not.safe.to.evict.annotation\n  - no.scale.down.node.pod.kube.system.unmovable\n  - no.scale.down.node.pod.not.enough.pdb\n  - no.scale.down.node.pod.controller.not.found\n  - no.scale.down.node.pod.unexpected.error\n\n### Executing this runbook\n\n```shell\ngcpdiag runbook gke/cluster-autoscaler \\\n  -p project_id=value \\\n  -p name=value \\\n  -p gke_cluster_name=value \\\n  -p location=value\n```\n\n#### Parameters\n\n| Name | Required | Default | Type | Help |\n|------|----------|---------|------|------|\n| `project_id` | True | None | str | The ID of the project hosting the GKE Cluster |\n| `name` | False | None | str | The name of the GKE cluster, to limit search only for this cluster |\n| `gke_cluster_name` | True | None | str | The name of the GKE cluster, to limit search only for this cluster |\n| `location` | True | None | str | The zone or region of the GKE cluster |\n\nGet help on available commands\n\n```shell\ngcpdiag runbook --help\n```\n\n### Potential Steps\n\n  - [Cluster Autoscaler Start](/runbook/steps/gke/cluster-autoscaler-start)\n\n  - [Ca Out Of Resources](/runbook/steps/gke/ca-out-of-resources)\n\n  - [Ca Quota Exceeded](/runbook/steps/gke/ca-quota-exceeded)\n\n  - [Ca Instance Timeout](/runbook/steps/gke/ca-instance-timeout)\n\n  - [Ca Ip Space Exhausted](/runbook/steps/gke/ca-ip-space-exhausted)\n\n  - [Ca Service Account Deleted](/runbook/steps/gke/ca-service-account-deleted)\n\n  - [Ca Min Size Reached](/runbook/steps/gke/ca-min-size-reached)\n\n  - [Ca Failed To Evict Pods](/runbook/steps/gke/ca-failed-to-evict-pods)\n\n  - [Ca Disabled Annotation](/runbook/steps/gke/ca-disabled-annotation)\n\n  - [Ca Min Resource Limit Exceeded](/runbook/steps/gke/ca-min-resource-limit-exceeded)\n\n  - [Ca No Place To Move Pods](/runbook/steps/gke/ca-no-place-to-move-pods)\n\n  - [Ca Pods Not Backed By Controller](/runbook/steps/gke/ca-pods-not-backed-by-controller)\n\n  - [Ca Not Safe To Evict Annotation](/runbook/steps/gke/ca-not-safe-to-evict-annotation)\n\n  - [Ca Pod Kube System Unmovable](/runbook/steps/gke/ca-pod-kube-system-unmovable)\n\n  - [Ca Pod Not Enough Pdb](/runbook/steps/gke/ca-pod-not-enough-pdb)\n\n  - [Ca Pod Controller Not Found](/runbook/steps/gke/ca-pod-controller-not-found)\n\n  - [Ca Pod Unexpected Error](/runbook/steps/gke/ca-pod-unexpected-error)\n\n  - [Cluster Autoscaler End](/runbook/steps/gke/cluster-autoscaler-end)\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT.\n-->\n"
  },
  {
    "path": "website/content/en/runbook/diagnostic-trees/gke/gke-ip-masq-standard.md",
    "content": "---\ntitle: \"gke/Gke Ip Masq Standard\"\nlinkTitle: \"gke/gke-ip-masq-standard\"\nweight: 3\ntype: docs\ndescription: >\n  This runbook will analyze symptoms for IP Masquerading issues on GKE Cluster.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\n**Kind**: Debugging Tree\n\n### Description\n\nIt examines the following:\n\n  - Are there any traffic logs to destination IP?\n  - Is ip-masq-agent DaemonSet in kube-system namespace?\n  - Is ip-masq-agent Configmap in kube-system namespace?\n  - Is GKE node IP and Pod IP are under nonMasquerade CIDR?\n  - Is Destination IP is under are under nonMasquerade CIDR?\n\n### Executing this runbook\n\n```shell\ngcpdiag runbook gke/gke-ip-masq-standard \\\n  -p project_id=value \\\n  -p src_ip=value \\\n  -p dest_ip=value \\\n  -p pod_ip=value \\\n  -p name=value \\\n  -p gke_cluster_name=value \\\n  -p location=value \\\n  -p node_ip=value \\\n  -p start_time=value \\\n  -p end_time=value\n```\n\n#### Parameters\n\n| Name | Required | Default | Type | Help |\n|------|----------|---------|------|------|\n| `project_id` | True | None | str | The Project ID of the resource under investigation |\n| `src_ip` | False | None | IPv4Address | The source IP from where connection is generated |\n| `dest_ip` | True | None | IPv4Address | The Destination IP is where the request is sending (Example : 8.8.8.8) |\n| `pod_ip` | False | None | str | GKE Pod IP address or pod address range(Example 192.168.1.0/24) |\n| `name` | False | None | str | The name of the GKE cluster, to limit search only for this cluster |\n| `gke_cluster_name` | False | None | str | The name of the GKE cluster, to limit search only for this cluster |\n| `location` | False | None | str | The zone or region of the GKE cluster |\n| `node_ip` | False | None | str | GKE Node IP address or address range/CIDR (Example 192.168.1.0/24) |\n| `start_time` | False | None | datetime | Start time of the issue |\n| `end_time` | False | None | datetime | End time of the issue |\n\nGet help on available commands\n\n```shell\ngcpdiag runbook --help\n```\n\n### Potential Steps\n\n  - [Gke Ip Masq Standard Start](/runbook/steps/gke/gke-ip-masq-standard-start)\n\n  - [Nodeproblem](/runbook/steps/gke/nodeproblem)\n\n  - [Check Daemon Set](/runbook/steps/gke/check-daemon-set)\n\n  - [Check Config Map](/runbook/steps/gke/check-config-map)\n\n  - [Check Pod Ip](/runbook/steps/gke/check-pod-ip)\n\n  - [Check Node Ip](/runbook/steps/gke/check-node-ip)\n\n  - [Check Destination Ip](/runbook/steps/gke/check-destination-ip)\n\n  - [Gke Ip Masq Standard End](/runbook/steps/gke/gke-ip-masq-standard-end)\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT.\n-->\n"
  },
  {
    "path": "website/content/en/runbook/diagnostic-trees/gke/image-pull.md",
    "content": "---\ntitle: \"gke/Image Pull\"\nlinkTitle: \"gke/image-pull\"\nweight: 3\ntype: docs\ndescription: >\n  Analysis and Resolution of Image Pull Failures on GKE clusters.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\n**Kind**: Debugging Tree\n\n### Description\n\nThis runbook investigates the gke cluster for Image pull failures and recommends remediation\n  steps.\n\n  Areas Examined:\n\n  - GKE cluster\n\n  - Stackdriver logs\n\n### Executing this runbook\n\n```shell\ngcpdiag runbook gke/image-pull \\\n  -p project_id=value \\\n  -p name=value \\\n  -p gke_cluster_name=value \\\n  -p location=value \\\n  -p start_time=value \\\n  -p end_time=value\n```\n\n#### Parameters\n\n| Name | Required | Default | Type | Help |\n|------|----------|---------|------|------|\n| `project_id` | True | None | str | The Project ID of the resource under investigation |\n| `name` | False | None | str | The name of the GKE cluster, to limit search only for this cluster |\n| `gke_cluster_name` | True | None | str | The name of the GKE cluster, to limit search only for this cluster |\n| `location` | True | None | str | The zone or region of the GKE cluster |\n| `start_time` | False | None | datetime | (Optional) The start window to query the logs. Format: YYYY-MM-DDTHH:MM:SSZ |\n| `end_time` | False | None | datetime | (Optional) The end window for the logs. Format: YYYY-MM-DDTHH:MM:SSZ |\n\nGet help on available commands\n\n```shell\ngcpdiag runbook --help\n```\n\n### Potential Steps\n\n  - [Image Pull Start](/runbook/steps/gke/image-pull-start)\n\n  - [Image Not Found](/runbook/steps/gke/image-not-found)\n\n  - [Image Forbidden](/runbook/steps/gke/image-forbidden)\n\n  - [Image Dns Issue](/runbook/steps/gke/image-dns-issue)\n\n  - [Image Connection Timeout Restricted Private](/runbook/steps/gke/image-connection-timeout-restricted-private)\n\n  - [Image Connection Timeout](/runbook/steps/gke/image-connection-timeout)\n\n  - [Image Not Found Insufficient Scope](/runbook/steps/gke/image-not-found-insufficient-scope)\n\n  - [Image Pull End](/runbook/steps/gke/image-pull-end)\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT.\n-->\n"
  },
  {
    "path": "website/content/en/runbook/diagnostic-trees/gke/ip-exhaustion.md",
    "content": "---\ntitle: \"gke/Ip Exhaustion\"\nlinkTitle: \"gke/ip-exhaustion\"\nweight: 3\ntype: docs\ndescription: >\n  Troubleshooting ip exhaustion issues on GKE clusters.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\n**Kind**: Debugging Tree\n\n### Description\n\nThis runbook investigates the gke cluster for ip exhaustion issues and recommends remediation\n  steps.\n\n  Areas Examined:\n  - GKE cluster type.\n  - GKE cluster and nodepool configuration\n  - Stackdriver logs\n\n### Executing this runbook\n\n```shell\ngcpdiag runbook gke/ip-exhaustion \\\n  -p project_id=value \\\n  -p name=value \\\n  -p gke_cluster_name=value \\\n  -p location=value \\\n  -p start_time=value \\\n  -p end_time=value\n```\n\n#### Parameters\n\n| Name | Required | Default | Type | Help |\n|------|----------|---------|------|------|\n| `project_id` | True | None | str | The ID of the project hosting the GKE Cluster |\n| `name` | False | None | str | The name of the GKE cluster, to limit search only for this cluster |\n| `gke_cluster_name` | True | None | str | The name of the GKE cluster, to limit search only for this cluster |\n| `location` | True | None | str | The zone or region of the GKE cluster |\n| `start_time` | False | None | datetime | The start window to investigate the ip exhaustion. Format: YYYY-MM-DDTHH:MM:SSZ |\n| `end_time` | False | None | datetime | The end window to investigate the ip exhaustion. Format: YYYY-MM-DDTHH:MM:SSZ |\n\nGet help on available commands\n\n```shell\ngcpdiag runbook --help\n```\n\n### Potential Steps\n\n  - [Ip Exhaustion Start](/runbook/steps/gke/ip-exhaustion-start)\n\n  - [Node Ip Range Exhaustion](/runbook/steps/gke/node-ip-range-exhaustion)\n\n  - [Pod Ip Range Exhaustion](/runbook/steps/gke/pod-ip-range-exhaustion)\n\n  - [Ip Exhaustion End](/runbook/steps/gke/ip-exhaustion-end)\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT.\n-->\n"
  },
  {
    "path": "website/content/en/runbook/diagnostic-trees/gke/logs.md",
    "content": "---\ntitle: \"gke/Logs\"\nlinkTitle: \"gke/logs\"\nweight: 3\ntype: docs\ndescription: >\n  Provides a methodical approach to troubleshooting GKE logging issues.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\n**Kind**: Debugging Tree\n\n### Description\n\nThis runbook guides you through a systematic investigation of potential\n  causes when logs from the Google Kubernetes Engine (GKE) cluster are missing\n  or incomplete. The focus is on core configuration settings that are essential\n  for proper logging functionality.\n\n  The following areas are examined:\n\n  - **Project-Level Logging:** Ensures that the Google Cloud project housing\n  the GKE cluster has the Cloud Logging API enabled.\n\n  - **Cluster-Level Logging:** Verifies that logging is explicitly enabled\n  within the GKE cluster's configuration.\n\n  - **Node Pool Permissions:** Confirms that the nodes within the cluster's\n  node pools have the 'Cloud Logging Write' scope enabled, allowing them to send\n  log data.\n\n  - **Service Account Permissions:** Validates that the service account used\n  by the node pools possesses the necessary IAM permissions to interact with\n  Cloud Logging. Specifically, the \"roles/logging.logWriter\" role is typically\n  required.\n\n  - **Cloud Logging API Write Quotas:** Verifies that Cloud Logging API Write\n  quotas have not been exceeded within the specified timeframe.\n\n### Executing this runbook\n\n```shell\ngcpdiag runbook gke/logs \\\n  -p project_id=value \\\n  -p name=value \\\n  -p gke_cluster_name=value \\\n  -p location=value\n```\n\n#### Parameters\n\n| Name | Required | Default | Type | Help |\n|------|----------|---------|------|------|\n| `project_id` | True | None | str | The ID of the project hosting the GKE Cluster |\n| `name` | False | None | str | The name of the GKE cluster, to limit search only for this cluster |\n| `gke_cluster_name` | True | None | str | The name of the GKE cluster |\n| `location` | True | None | str | The zone or region of the GKE cluster |\n\nGet help on available commands\n\n```shell\ngcpdiag runbook --help\n```\n\n### Potential Steps\n\n  - [Logs Start](/runbook/steps/gke/logs-start)\n\n  - [Logging Api Enabled](/runbook/steps/gke/logging-api-enabled)\n\n  - [Cluster Level Logging Enabled](/runbook/steps/gke/cluster-level-logging-enabled)\n\n  - [Node Pool Cloud Logging Access Scope](/runbook/steps/gke/node-pool-cloud-logging-access-scope)\n\n  - [Service Account Logging Permission](/runbook/steps/gke/service-account-logging-permission)\n\n  - [Logging Write Api Quota Exceeded](/runbook/steps/gke/logging-write-api-quota-exceeded)\n\n  - [Logs End](/runbook/steps/gke/logs-end)\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT.\n-->\n"
  },
  {
    "path": "website/content/en/runbook/diagnostic-trees/gke/monitoring-configuration.md",
    "content": "---\ntitle: \"gke/Monitoring Configuration\"\nlinkTitle: \"gke/monitoring-configuration\"\nweight: 3\ntype: docs\ndescription: >\n  Verifies that GKE Monitoring and its components are correctly configured and operational.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\n**Kind**: Debugging Tree\n\n### Description\n\nThis runbook guides through a systematic investigation of potential\n  causes when monitoring from the Google Kubernetes Engine (GKE) cluster are missing\n  or incomplete. The focus is on core configuration settings that are essential\n  for proper monitoring functionality.\n\n  The following areas are examined:\n\n  - **Project-Level Monitoring:** Ensures that the Google Cloud project housing\n  the GKE cluster has the Cloud Monitoring API enabled.\n\n  - **Cluster-Level Monitoring:** Verifies that monitoring is explicitly enabled\n  within the GKE cluster's configuration.\n\n  - **Node Pool Permissions:** Confirms that the nodes within the cluster's\n  node pools have the 'Cloud Monitoring Write' scope enabled, allowing them to send\n  metrics data.\n\n  - **Service Account Permissions:** Validates that the service account used\n  by the node pools possesses the necessary IAM permissions to interact with\n  Cloud Monitoring. Specifically, the \"roles/monitoring.metricWriter\" role is typically\n  required.\n\n### Executing this runbook\n\n```shell\ngcpdiag runbook gke/monitoring-configuration \\\n  -p project_id=value \\\n  -p gke_cluster_name=value \\\n  -p location=value\n```\n\n#### Parameters\n\n| Name | Required | Default | Type | Help |\n|------|----------|---------|------|------|\n| `project_id` | True | None | str | The ID of the project hosting the GKE Cluster |\n| `gke_cluster_name` | True | None | str | The name of the GKE cluster, to limit search only for this cluster |\n| `location` | True | None | str | The zone or region of the GKE cluster |\n\nGet help on available commands\n\n```shell\ngcpdiag runbook --help\n```\n\n### Potential Steps\n\n  - [Monitoring Configuration Start](/runbook/steps/gke/monitoring-configuration-start)\n\n  - [Monitoring Api Configuration Enabled](/runbook/steps/gke/monitoring-api-configuration-enabled)\n\n  - [Cluster Level Monitoring Configuration Enabled](/runbook/steps/gke/cluster-level-monitoring-configuration-enabled)\n\n  - [Node Pool Cloud Monitoring Access Scope Configuration](/runbook/steps/gke/node-pool-cloud-monitoring-access-scope-configuration)\n\n  - [Service Account Monitoring Permission Configuration](/runbook/steps/gke/service-account-monitoring-permission-configuration)\n\n  - [Monitoring Configuration End](/runbook/steps/gke/monitoring-configuration-end)\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT.\n-->\n"
  },
  {
    "path": "website/content/en/runbook/diagnostic-trees/gke/node-auto-repair.md",
    "content": "---\ntitle: \"gke/Node Auto Repair\"\nlinkTitle: \"gke/node-auto-repair\"\nweight: 3\ntype: docs\ndescription: >\n  Provides the reason why a Node was auto-repaired\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\n**Kind**: Debugging Tree\n\n### Description\n\nThis runbook checks if:\n  - Node auto-repair is enabled on the cluster\n  - Nodes was repaired because it was in NotReady status for more than 10 minutes\n  - Nodes was repaired because it had disk pressure\n  - Nodes was repaired because of unallocatable GPUs\n  - Nodes was repaired because of unallocatable TPUs\n\n### Executing this runbook\n\n```shell\ngcpdiag runbook gke/node-auto-repair \\\n  -p project_id=value \\\n  -p name=value \\\n  -p gke_cluster_name=value \\\n  -p node=value \\\n  -p location=value\n```\n\n#### Parameters\n\n| Name | Required | Default | Type | Help |\n|------|----------|---------|------|------|\n| `project_id` | True | None | str | The ID of the project hosting the GKE Cluster |\n| `name` | False | None | str | The name of the GKE cluster, to limit search only for this cluster |\n| `gke_cluster_name` | False | None | str | The name of the GKE cluster, to limit search only for this cluster |\n| `node` | True | None | str | The node name with issues. |\n| `location` | False | None | str | The zone or region of the GKE cluster |\n\nGet help on available commands\n\n```shell\ngcpdiag runbook --help\n```\n\n### Potential Steps\n\n  - [Node Auto Repair Start](/runbook/steps/gke/node-auto-repair-start)\n\n  - [Node Not Ready](/runbook/steps/gke/node-not-ready)\n\n  - [Node Disk Full](/runbook/steps/gke/node-disk-full)\n\n  - [Unallocatable Gpu](/runbook/steps/gke/unallocatable-gpu)\n\n  - [Unallocatable Tpu](/runbook/steps/gke/unallocatable-tpu)\n\n  - [Node Auto Repair End](/runbook/steps/gke/node-auto-repair-end)\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT.\n-->\n"
  },
  {
    "path": "website/content/en/runbook/diagnostic-trees/gke/node-bootstrapping.md",
    "content": "---\ntitle: \"gke/Node Bootstrapping\"\nlinkTitle: \"gke/node-bootstrapping\"\nweight: 3\ntype: docs\ndescription: >\n  Analyses issues experienced when adding nodes to your GKE Standard cluster.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\n**Kind**: Debugging Tree\n\n### Description\n\nThis runbook requires at least\n  - location and node parameters. Location here is the zone where the node is\n  running,\n  for example us-central1-c.\n  - location, nodepool and cluster name parameters to be provided. Location is\n  zone or region for\n  a nodepool, if the cluster is a regional cluster, then location for a nodepool\n  will be the\n  cluster region. For example a region could be us-central1.\n\n  If a location/node pair is provided, the runbook will check the Node\n  Registration Checker output\n  for the given location/node pair.\n\n  If a location, nodepool and GKE cluster name parameters are provided, the\n  runbook will check for\n  any errors that might have occurred when the instances.insert method was\n  invoked for the given\n  parameters.\n\n### Executing this runbook\n\n```shell\ngcpdiag runbook gke/node-bootstrapping \\\n  -p project_id=value \\\n  -p location=value \\\n  -p node=value \\\n  -p nodepool=value \\\n  -p name=value \\\n  -p gke_cluster_name=value \\\n  -p start_time=value \\\n  -p end_time=value\n```\n\n#### Parameters\n\n| Name | Required | Default | Type | Help |\n|------|----------|---------|------|------|\n| `project_id` | True | None | str | The ID of the project hosting the GKE Cluster |\n| `location` | True | None | str | The location where the node or nodepool is. For a node, location will be the zone where the node is running (i.e. us-central1-c). For a nodepool, this can be the zone or the region (i.e. us-central1) where the nodepool is configured |\n| `node` | False | None | str | The node name that is failing to register (if available). If node name is not available, please provide the nodepool name where nodes aren't registering |\n| `nodepool` | False | None | str | The nodepool name where nodes aren't registering, if a node name is not available |\n| `name` | False | None | str | The GKE cluster name. When providing nodepool name, please provide the GKE cluster name as well to be able to properly filter events in the logging query. |\n| `gke_cluster_name` | False | None | str | The GKE cluster name. When providing nodepool name, please provide the GKE cluster name as well to be able to properly filter events in the logging query. |\n| `start_time` | False | None | datetime | The start window to investigate vm termination. Format: YYYY-MM-DDTHH:MM:SSZ |\n| `end_time` | False | None | datetime | The end window for the investigation. Format: YYYY-MM-DDTHH:MM:SSZ |\n\nGet help on available commands\n\n```shell\ngcpdiag runbook --help\n```\n\n### Potential Steps\n\n  - [Node Bootstrapping Start](/runbook/steps/gke/node-bootstrapping-start)\n\n  - [Node Insert Check](/runbook/steps/gke/node-insert-check)\n\n  - [Node Registration Success](/runbook/steps/gke/node-registration-success)\n\n  - [Node Bootstrapping End](/runbook/steps/gke/node-bootstrapping-end)\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT.\n-->\n"
  },
  {
    "path": "website/content/en/runbook/diagnostic-trees/gke/node-unavailability.md",
    "content": "---\ntitle: \"gke/Node Unavailability\"\nlinkTitle: \"gke/node-unavailability\"\nweight: 3\ntype: docs\ndescription: >\n  Identifies the reasons for a GKE node being unavailable.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\n**Kind**: Debugging Tree\n\n### Description\n\nThis runbook investigates various factors that may have caused a node to\n  become unavailable,\n  including:\n\n  - Live Migration\n  - Preemption\n  - Removal by the Cluster Autoscaler\n  - Node Pool Upgrade\n\n### Executing this runbook\n\n```shell\ngcpdiag runbook gke/node-unavailability \\\n  -p project_id=value \\\n  -p name=value \\\n  -p gke_cluster_name=value \\\n  -p node=value \\\n  -p location=value\n```\n\n#### Parameters\n\n| Name | Required | Default | Type | Help |\n|------|----------|---------|------|------|\n| `project_id` | True | None | str | The ID of the project hosting the GKE Cluster |\n| `name` | False | None | str | The name of the GKE cluster, to limit search only for this cluster |\n| `gke_cluster_name` | False | None | str | The name of the GKE cluster, to limit search only for this cluster |\n| `node` | True | None | str | The node name that was started. |\n| `location` | False | None | str | The zone or region of the GKE cluster |\n\nGet help on available commands\n\n```shell\ngcpdiag runbook --help\n```\n\n### Potential Steps\n\n  - [Node Unavailability Start](/runbook/steps/gke/node-unavailability-start)\n\n  - [Live Migration](/runbook/steps/gke/live-migration)\n\n  - [Preemption Condition](/runbook/steps/gke/preemption-condition)\n\n  - [Node Removed By Autoscaler](/runbook/steps/gke/node-removed-by-autoscaler)\n\n  - [Node Pool Upgrade](/runbook/steps/gke/node-pool-upgrade)\n\n  - [Node Unavailability End](/runbook/steps/gke/node-unavailability-end)\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT.\n-->\n"
  },
  {
    "path": "website/content/en/runbook/diagnostic-trees/gke/resource-quotas.md",
    "content": "---\ntitle: \"gke/Resource Quotas\"\nlinkTitle: \"gke/resource-quotas\"\nweight: 3\ntype: docs\ndescription: >\n  Analyses logs in the project where the cluster is running.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\n**Kind**: Debugging Tree\n\n### Description\n\nIf there are log entries that contain messages listed in the public documentation\n  https://cloud.google.com/knowledge/kb/google-kubernetes-engine-pods-fail-to-start-due-to-exceeded-quota-000004701\n  then provide details on how this issue can be solved.\n\n### Executing this runbook\n\n```shell\ngcpdiag runbook gke/resource-quotas \\\n  -p project_id=value \\\n  -p name=value \\\n  -p gke_cluster_name=value \\\n  -p location=value \\\n  -p start_time=value \\\n  -p end_time=value\n```\n\n#### Parameters\n\n| Name | Required | Default | Type | Help |\n|------|----------|---------|------|------|\n| `project_id` | True | None | str | The Project ID of the resource under investigation |\n| `name` | False | None | str | The name of the GKE cluster, to limit search only for this cluster |\n| `gke_cluster_name` | True | None | str | The name of the GKE cluster, to limit search only for this cluster |\n| `location` | True | None | str | (Optional) The zone or region of the GKE cluster |\n| `start_time` | False | None | datetime | (Optional) The start window to query the logs. Format: YYYY-MM-DDTHH:MM:SSZ |\n| `end_time` | False | None | datetime | (Optional) The end window for the logs. Format: YYYY-MM-DDTHH:MM:SSZ |\n\nGet help on available commands\n\n```shell\ngcpdiag runbook --help\n```\n\n### Potential Steps\n\n  - [Resource Quotas Start](/runbook/steps/gke/resource-quotas-start)\n\n  - [Service Api Status Check](/runbook/steps/gcp/service-api-status-check)\n\n  - [Cluster Version](/runbook/steps/gke/cluster-version)\n\n  - [Resource Quota Exceeded](/runbook/steps/gke/resource-quota-exceeded)\n\n  - [Resource Quotas End](/runbook/steps/gke/resource-quotas-end)\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT.\n-->\n"
  },
  {
    "path": "website/content/en/runbook/diagnostic-trees/interconnect/_index.md",
    "content": "---\ntitle: \"INTERCONNECT\"\nlinkTitle: \"interconnect\"\ntype: docs\nweight: 2\n---\n\nAll diagnostic tree available in interconnect\n"
  },
  {
    "path": "website/content/en/runbook/diagnostic-trees/interconnect/bgp-down-flap.md",
    "content": "---\ntitle: \"interconnect/Bgp Down Flap\"\nlinkTitle: \"interconnect/bgp-down-flap\"\nweight: 3\ntype: docs\ndescription: >\n  This runbook analyzes BGP down and BGP flap events for a GCP project in a clolud region.\n---\n\n**Product**: [Interconnect](https://cloud.google.com/network-connectivity/docs/interconnect)\n**Kind**: Debugging Tree\n\n### Description\n\nThe following steps are executed:\n\n  - Check BGP down status: Check if any vlan attachment has BGP down state.\n  - Check Interconnect maintenance: Check if there are interconnect maintenance events\n           are associated with the BGP down vlan attachments.\n  - Check BGP flap status: Check if any BGP flaps happened.\n  - Check Cloud Router maintenance: Check if there were Cloud Router maintenance events\n           are associated with the BGP flaps.\n\n### Executing this runbook\n\n```shell\ngcpdiag runbook interconnect/bgp-down-flap \\\n  -p project_id=value \\\n  -p region=value \\\n  -p attachment_name=value \\\n  -p start_time=value \\\n  -p end_time=value\n```\n\n#### Parameters\n\n| Name | Required | Default | Type | Help |\n|------|----------|---------|------|------|\n| `project_id` | True | None | str | The Project ID of the resource under investigation |\n| `region` | True | None | str | The region where the vlan attachment is located |\n| `attachment_name` | True | None | str | The attachment name(s) as comma-separated values or a regular expression. eg: vlan1,vlan2 or vlan.* or .* for all attachments |\n| `start_time` | False | None | datetime | The start window to investigate BGP flap. Format: YYYY-MM-DDTHH:MM:SSZ |\n| `end_time` | False | None | datetime | The end window for the investigation. Format: YYYY-MM-DDTHH:MM:SSZ |\n\nGet help on available commands\n\n```shell\ngcpdiag runbook --help\n```\n\n### Potential Steps\n\n  - [Bgp Down Flap Start](/runbook/steps/interconnect/bgp-down-flap-start)\n\n  - [Check Bgp Down](/runbook/steps/interconnect/check-bgp-down)\n\n  - [Check Interconnect Maintenance](/runbook/steps/interconnect/check-interconnect-maintenance)\n\n  - [Check Bgp Flap](/runbook/steps/interconnect/check-bgp-flap)\n\n  - [Check Cloud Router Maintenance](/runbook/steps/interconnect/check-cloud-router-maintenance)\n\n  - [Bgp Down Flap End](/runbook/steps/interconnect/bgp-down-flap-end)\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT.\n-->\n"
  },
  {
    "path": "website/content/en/runbook/diagnostic-trees/lb/_index.md",
    "content": "---\ntitle: \"LB\"\nlinkTitle: \"lb\"\ntype: docs\nweight: 2\n---\n\nAll diagnostic tree available in lb\n"
  },
  {
    "path": "website/content/en/runbook/diagnostic-trees/lb/latency.md",
    "content": "---\ntitle: \"lb/Latency\"\nlinkTitle: \"lb/latency\"\nweight: 3\ntype: docs\ndescription: >\n  This runbook diagnoses and troubleshoots latency issues with Application Load Balancers.\n---\n\n**Product**: [Load balancing](https://cloud.google.com/load-balancing)\n**Kind**: Debugging Tree\n\n### Description\n\nIt analyzes key metrics to identify potential bottlenecks and performance\n  problems.\n\n  Key Investigation Areas:\n\n  - Backend Latency:\n    - Measures the time taken for backends to respond to requests, checking if\n    it exceeds a configurable threshold.\n  - Request Count Per Second (QPS):\n    - Monitors the rate of incoming requests to the load balancer, checking if\n    it exceeds a configurable threshold.  A high request count coupled with high\n    latency might suggest overload.\n  - 5xx Error Rate:\n    - Calculates the percentage of 5xx server errors, indicating problems on the\n    backend servers.  This check uses a configurable threshold and considers the\n    request count to provide a meaningful error rate.\n\n### Executing this runbook\n\n```shell\ngcpdiag runbook lb/latency \\\n  -p project_id=value \\\n  -p forwarding_rule_name=value \\\n  -p region=value \\\n  -p backend_latency_threshold=value \\\n  -p request_count_threshold=value \\\n  -p error_rate_threshold=value\n```\n\n#### Parameters\n\n| Name | Required | Default | Type | Help |\n|------|----------|---------|------|------|\n| `project_id` | True | None | str | The Project ID where the load balancer is located |\n| `forwarding_rule_name` | True | None | str | The name of the forwarding rule associated with the Load Balancer to check |\n| `region` | False | None | str | The region where the forwarding rule is located |\n| `backend_latency_threshold` | False | None | float | Threshold for backend latency in milliseconds. |\n| `request_count_threshold` | False | None | float | Threshold for average request count per second. |\n| `error_rate_threshold` | False | None | float | Threshold for error rate (percentage of 5xx errors). |\n\nGet help on available commands\n\n```shell\ngcpdiag runbook --help\n```\n\n### Potential Steps\n\n  - [Lb Latency Start](/runbook/steps/lb/lb-latency-start)\n\n  - [Lb Backend Latency Check](/runbook/steps/lb/lb-backend-latency-check)\n\n  - [Lb Request Count Check](/runbook/steps/lb/lb-request-count-check)\n\n  - [Lb Error Rate Check](/runbook/steps/lb/lb-error-rate-check)\n\n  - [Latency End](/runbook/steps/lb/latency-end)\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT.\n-->\n"
  },
  {
    "path": "website/content/en/runbook/diagnostic-trees/lb/ssl-certificates.md",
    "content": "---\ntitle: \"lb/Ssl Certificates\"\nlinkTitle: \"lb/ssl-certificates\"\nweight: 3\ntype: docs\ndescription: >\n  This runbook diagnoses and troubleshoots issues with SSL certificates.\n---\n\n**Product**: [Load balancing](https://cloud.google.com/load-balancing)\n**Kind**: Debugging Tree\n\n### Description\n\nThe supported certificates are Google-managed classic certificates attached to\n  load balancers.\n\n  It helps identify and resolve common problems that prevent certificates from\n  provisioning or functioning correctly.\n\n  Key Investigation Area:\n\n  - Certificate Status:\n    - Checks the certificate's provisioning status and identifies any failed\n    domains.\n  - Domain Validation:\n    - Verifies DNS configuration for each domain, ensuring proper A/AAAA records\n    and the absence of conflicting records.\n  - Load Balancer Configuration:\n    - Confirms the certificate is correctly attached to a target proxy and\n    associated with a forwarding rule using port 443.\n  - Conflicting resources:\n    - Ensures no certificate map is attached to the target proxy, which can\n    interfere with Google-managed certificates.\n  - Provisioning Time:\n    - Checks Cloud Logging to determine when the certificate was attached and\n    allows sufficient time for propagation.\n\n### Executing this runbook\n\n```shell\ngcpdiag runbook lb/ssl-certificates \\\n  -p project_id=value \\\n  -p certificate_name=value\n```\n\n#### Parameters\n\n| Name | Required | Default | Type | Help |\n|------|----------|---------|------|------|\n| `project_id` | True | None | str | The Project ID of the resource under investigation |\n| `certificate_name` | True | None | str | The name of the SSLcertificate that you want to investigate |\n\nGet help on available commands\n\n```shell\ngcpdiag runbook --help\n```\n\n### Potential Steps\n\n  - [Ssl Certificates Start](/runbook/steps/lb/ssl-certificates-start)\n\n  - [Analyze Certificate Status](/runbook/steps/lb/analyze-certificate-status)\n\n  - [Analyze Domain Statuses](/runbook/steps/lb/analyze-domain-statuses)\n\n  - [Analyze Failed Not Visible Domains](/runbook/steps/lb/analyze-failed-not-visible-domains)\n\n  - [Analyze Failed Not Visible Domains](/runbook/steps/lb/analyze-failed-not-visible-domains)\n\n  - [Analyze Failed Not Visible Domains](/runbook/steps/lb/analyze-failed-not-visible-domains)\n\n  - [Analyze Failed Not Visible Domains](/runbook/steps/lb/analyze-failed-not-visible-domains)\n\n  - [Analyze Failed Not Visible Domains](/runbook/steps/lb/analyze-failed-not-visible-domains)\n\n  - [Ssl Certificates End](/runbook/steps/lb/ssl-certificates-end)\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT.\n-->\n"
  },
  {
    "path": "website/content/en/runbook/diagnostic-trees/lb/unhealthy-backends.md",
    "content": "---\ntitle: \"lb/Unhealthy Backends\"\nlinkTitle: \"lb/unhealthy-backends\"\nweight: 3\ntype: docs\ndescription: >\n  Load Balancer Unhealthy Backends Analyzer.\n---\n\n**Product**: [Load balancing](https://cloud.google.com/load-balancing)\n**Kind**: Debugging Tree\n\n### Description\n\nThis runbook helps investigate why backends in a load balancer are unhealthy.\n  It confirms and summarizes the current health status of the backends, aiding\n  in identifying any unhealthy instances.\n\n  Key Investigation Areas:\n\n  - Firewalls:\n      - Verifies if firewall rules are properly configured to allow health check\n      traffic.\n  - Port Configuration:\n      - Checks if health check sends probe requests to the different port than\n      serving port. This may be intentional or a potential configuration error,\n      and the runbook will provide guidance on the implications.\n  - Protocol Configuration:\n      - Checks if health check uses the same protocol as backend service. This\n      may be intentional or a potential configuration error, and the runbook\n      will provide guidance on the implications.\n  - Logging:\n      - Checks if health check logging is enabled to aid in troubleshooting.\n  - Health Check Logs (if enabled):\n      - Analyzes the latest health check logs to identify the specific reasons\n      for backend unhealthiness:\n          - Timeouts: Identifies if the backend is timing out and provides\n          potential causes and remediation steps.\n          - Unhealthy: Indicates that the backend is reachable but doesn't meet\n          the health check's criteria. It provides guidance on the expected\n          health check behavior and suggests configuration checks.\n          - Unknown: Explains the potential reasons for the \"UNKNOWN\" health\n          state and suggests actions like adjusting timeouts or checking for\n          Google Cloud outages.\n  - Past Health Check Success:\n      - Checks if the health check has worked successfully in the past to\n      determine if the issue is recent or ongoing.\n  - VM Performance:\n      - Checks if the instances performance is degraded - disks, memory and cpu\n      utilization are being checked.\n\n### Executing this runbook\n\n```shell\ngcpdiag runbook lb/unhealthy-backends \\\n  -p project_id=value \\\n  -p backend_service_name=value \\\n  -p region=value\n```\n\n#### Parameters\n\n| Name | Required | Default | Type | Help |\n|------|----------|---------|------|------|\n| `project_id` | True | None | str | The Project ID of the resource under investigation |\n| `backend_service_name` | True | None | str | The name of the backend service that you want to investigate |\n| `region` | False | None | str | The region configured for the load balancer (backend service). If not provided, the backend service is assumed to be global. |\n\nGet help on available commands\n\n```shell\ngcpdiag runbook --help\n```\n\n### Potential Steps\n\n  - [Unhealthy Backends Start](/runbook/steps/lb/unhealthy-backends-start)\n\n  - [Verify Health Check Logging Enabled](/runbook/steps/lb/verify-health-check-logging-enabled)\n\n  - [Analyze Latest Health Check Log](/runbook/steps/lb/analyze-latest-health-check-log)\n\n  - [Check Past Health Check Success](/runbook/steps/lb/check-past-health-check-success)\n\n  - [Validate Backend Service Port Configuration](/runbook/steps/lb/validate-backend-service-port-configuration)\n\n  - [Validate Backend Service Protocol Configuration](/runbook/steps/lb/validate-backend-service-protocol-configuration)\n\n  - [Verify Firewall Rules](/runbook/steps/lb/verify-firewall-rules)\n\n  - [Check Vm Performance](/runbook/steps/lb/check-vm-performance)\n\n  - [High Vm Memory Utilization](/runbook/steps/gce/high-vm-memory-utilization)\n\n  - [High Vm Disk Utilization](/runbook/steps/gce/high-vm-disk-utilization)\n\n  - [High Vm Cpu Utilization](/runbook/steps/gce/high-vm-cpu-utilization)\n\n  - [Unhealthy Backends End](/runbook/steps/lb/unhealthy-backends-end)\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT.\n-->\n"
  },
  {
    "path": "website/content/en/runbook/diagnostic-trees/nat/_index.md",
    "content": "---\ntitle: \"NAT\"\nlinkTitle: \"nat\"\ntype: docs\nweight: 2\n---\n\nAll diagnostic tree available in nat\n"
  },
  {
    "path": "website/content/en/runbook/diagnostic-trees/nat/public-nat-ip-allocation-failed.md",
    "content": "---\ntitle: \"nat/Public Nat Ip Allocation Failed\"\nlinkTitle: \"nat/public-nat-ip-allocation-failed\"\nweight: 3\ntype: docs\ndescription: >\n  Troubleshooting for IP Allocation issues for Cloud NAT.\n---\n\n**Product**: [Cloud NAT](https://cloud.google.com/nat)\n**Kind**: Debugging Tree\n\n### Description\n\nThis runbook investigates Cloud NAT for NAT IP Allocation failed issue and proposes\n  remediation steps.\n\n  Areas Examined:\n\n    - Metric check: Checks the NAT Allocation Failed metric for the provided NATGW if it is\n    True or False.\n\n    - NATGW Configuration: Checks the gateway if it is configured with manual or automatic IP\n    allocation.\n\n    - NAT IP and Port calculation: For source nic without an External IP address,\n      verify the VM is served by a Public NAT Gateway and check there are no issues on the NATGW.\n\n### Executing this runbook\n\n```shell\ngcpdiag runbook nat/public-nat-ip-allocation-failed \\\n  -p project_id=value \\\n  -p nat_gateway_name=value \\\n  -p cloud_router_name=value \\\n  -p network=value \\\n  -p nat_network=value \\\n  -p region=value\n```\n\n#### Parameters\n\n| Name | Required | Default | Type | Help |\n|------|----------|---------|------|------|\n| `project_id` | True | None | str | The Project ID of the resource under investigation |\n| `nat_gateway_name` | True | None | str | The name of the NATGW |\n| `cloud_router_name` | True | None | str | The name of the Cloud Router of the NATGW |\n| `network` | False | None | str | The VPC network of the target NATGW |\n| `nat_network` | True | None | str | The VPC network of the target NATGW |\n| `region` | True | None | str | The region of the target NATGW |\n\nGet help on available commands\n\n```shell\ngcpdiag runbook --help\n```\n\n### Potential Steps\n\n  - [Nat Ip Allocation Failed Start](/runbook/steps/nat/nat-ip-allocation-failed-start)\n\n  - [Nat Allocation Failed Check](/runbook/steps/nat/nat-allocation-failed-check)\n\n  - [Nat Ip Allocation Method Check](/runbook/steps/nat/nat-ip-allocation-method-check)\n\n  - [Nat Ip Allocation Auto Only](/runbook/steps/nat/nat-ip-allocation-auto-only)\n\n  - [Nat Ip Allocation Manual Only](/runbook/steps/nat/nat-ip-allocation-manual-only)\n\n  - [Nat Ip Allocation Failed End](/runbook/steps/nat/nat-ip-allocation-failed-end)\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT.\n-->\n"
  },
  {
    "path": "website/content/en/runbook/diagnostic-trees/pubsub/_index.md",
    "content": "---\ntitle: \"PUBSUB\"\nlinkTitle: \"pubsub\"\ntype: docs\nweight: 2\n---\n\nAll diagnostic tree available in pubsub\n"
  },
  {
    "path": "website/content/en/runbook/diagnostic-trees/pubsub/bigquery-subscription-delivery.md",
    "content": "---\ntitle: \"pubsub/Bigquery Subscription Delivery\"\nlinkTitle: \"pubsub/bigquery-subscription-delivery\"\nweight: 3\ntype: docs\ndescription: >\n  Troubleshoot BigQuery Subscription Errors\n---\n\n**Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\n**Kind**: Debugging Tree\n\n### Description\n\nA diagnostic guide to help you resolve common issues\ncausing message delivery failures from Pub/Sub to BigQuery.\n\n### Executing this runbook\n\n```shell\ngcpdiag runbook pubsub/bigquery-subscription-delivery \\\n  -p project_id=value \\\n  -p subscription_name=value \\\n  -p table_id=value\n```\n\n#### Parameters\n\n| Name | Required | Default | Type | Help |\n|------|----------|---------|------|------|\n| `project_id` | True | None | str | The Project ID of the resource under investigation |\n| `subscription_name` | True | None | str | The Pub/Sub subscription ID |\n| `table_id` | True | None | str | The BigQuery table ID in the format \"project_id:dataset.table\" or \"dataset.table\" |\n\nGet help on available commands\n\n```shell\ngcpdiag runbook --help\n```\n\n### Potential Steps\n\n  - [Start Step](/runbook/steps/gcpdiag/start-step)\n\n  - [Subscription Existence Check](/runbook/steps/pubsub/subscription-existence-check)\n\n  - [Big Query Table Existence Check](/runbook/steps/pubsub/big-query-table-existence-check)\n\n  - [Big Query Writer Permission Check](/runbook/steps/pubsub/big-query-writer-permission-check)\n\n  - [Subscription Status Check](/runbook/steps/pubsub/subscription-status-check)\n\n  - [Pubsub Quotas](/runbook/steps/pubsub/pubsub-quotas)\n\n  - [Investigate Bq Push Errors](/runbook/steps/pubsub/investigate-bq-push-errors)\n\n  - [Throughput Qualification](/runbook/steps/pubsub/throughput-qualification)\n\n  - [Dead Letter Topic](/runbook/steps/pubsub/dead-letter-topic)\n\n  - [Dead Letter Topic Permissions](/runbook/steps/pubsub/dead-letter-topic-permissions)\n\n  - [End Step](/runbook/steps/gcpdiag/end-step)\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT.\n-->\n"
  },
  {
    "path": "website/content/en/runbook/diagnostic-trees/pubsub/gcs-subscription-delivery.md",
    "content": "---\ntitle: \"pubsub/Gcs Subscription Delivery\"\nlinkTitle: \"pubsub/gcs-subscription-delivery\"\nweight: 3\ntype: docs\ndescription: >\n  Troubleshoot Pub/Sub to Cloud Storage subscription issues.\n---\n\n**Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\n**Kind**: Debugging Tree\n\n### Description\n\nThis runbook checks for common configuration problems with Pub/Sub subscriptions\n  that are set up to write directly to a Google Cloud Storage bucket.\n\n  Checks performed:\n  - Subscription existence and type.\n  - Cloud Storage bucket existence.\n  - IAM permissions for the Pub/Sub service account on the bucket.\n  - State of the Pub/Sub subscription.\n\n### Executing this runbook\n\n```shell\ngcpdiag runbook pubsub/gcs-subscription-delivery \\\n  -p project_id=value \\\n  -p subscription_name=value\n```\n\n#### Parameters\n\n| Name | Required | Default | Type | Help |\n|------|----------|---------|------|------|\n| `project_id` | True | None | str | The Project ID containing the Pub/Sub subscription |\n| `subscription_name` | True | None | str | The Pub/Sub subscription ID |\n\nGet help on available commands\n\n```shell\ngcpdiag runbook --help\n```\n\n### Potential Steps\n\n  - [Gcs Subscription Delivery Start](/runbook/steps/pubsub/gcs-subscription-delivery-start)\n\n  - [Gcs Subscription Existence Check](/runbook/steps/pubsub/gcs-subscription-existence-check)\n\n  - [Check Gcs Bucket](/runbook/steps/pubsub/check-gcs-bucket)\n\n  - [Check Service Account Permissions](/runbook/steps/pubsub/check-service-account-permissions)\n\n  - [Pubsub Quotas](/runbook/steps/pubsub/pubsub-quotas)\n\n  - [Response Code Step](/runbook/steps/pubsub/response-code-step)\n\n  - [Active Subscription](/runbook/steps/pubsub/active-subscription)\n\n  - [Throughput Qualification](/runbook/steps/pubsub/throughput-qualification)\n\n  - [Dead Letter Topic](/runbook/steps/pubsub/dead-letter-topic)\n\n  - [Dead Letter Topic Permissions](/runbook/steps/pubsub/dead-letter-topic-permissions)\n\n  - [Gcs Subscription Delivery End](/runbook/steps/pubsub/gcs-subscription-delivery-end)\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT.\n-->\n"
  },
  {
    "path": "website/content/en/runbook/diagnostic-trees/pubsub/pull-subscription-delivery.md",
    "content": "---\ntitle: \"pubsub/Pull Subscription Delivery\"\nlinkTitle: \"pubsub/pull-subscription-delivery\"\nweight: 3\ntype: docs\ndescription: >\n  Diagnostic checks for Cloud Pub/Sub pull delivery issues.\n---\n\n**Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\n**Kind**: Debugging Tree\n\n### Description\n\nProvides a DiagnosticTree to check for issues related to delivery issues\n  for subscriptions in Cloud Pub/Sub. Particularly this runbook focuses on common issues\n  experienced while using Pub/Sub pull subscriptions.\n\n  - Areas:\n    - delivery latency\n    - quotas\n    - pull rate\n    - throughput rate\n\n### Executing this runbook\n\n```shell\ngcpdiag runbook pubsub/pull-subscription-delivery \\\n  -p project_id=value \\\n  -p subscription_name=value\n```\n\n#### Parameters\n\n| Name | Required | Default | Type | Help |\n|------|----------|---------|------|------|\n| `project_id` | True | None | str | The Project ID of the resource under investigation |\n| `subscription_name` | True | None | str | The name of subscription to evaluate in the runbook |\n\nGet help on available commands\n\n```shell\ngcpdiag runbook --help\n```\n\n### Potential Steps\n\n  - [Pull Subscription Delivery Start](/runbook/steps/pubsub/pull-subscription-delivery-start)\n\n  - [Pubsub Quotas](/runbook/steps/pubsub/pubsub-quotas)\n\n  - [Pull Rate](/runbook/steps/pubsub/pull-rate)\n\n  - [Throughput Qualification](/runbook/steps/pubsub/throughput-qualification)\n\n  - [Pull Subscription Delivery End](/runbook/steps/pubsub/pull-subscription-delivery-end)\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT.\n-->\n"
  },
  {
    "path": "website/content/en/runbook/diagnostic-trees/pubsub/push-subscription-delivery.md",
    "content": "---\ntitle: \"pubsub/Push Subscription Delivery\"\nlinkTitle: \"pubsub/push-subscription-delivery\"\nweight: 3\ntype: docs\ndescription: >\n  Diagnostic checks for Cloud Pub/Sub push delivery issues.\n---\n\n**Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\n**Kind**: Debugging Tree\n\n### Description\n\nProvides a DiagnosticTree to check for issues related to delivery issues\n  for subscriptions in Cloud Pub/Sub. Particularly this runbook focuses on common issues\n  experienced while using Pub/Sub push subscriptions, including BQ & GCS subscriptions.\n\n  - Areas:\n    - subscription status\n    - quotas\n    - push responses\n    - throughput rate\n    - dead letter topic attachment and permissions\n    - vpcsc enablement\n\n### Executing this runbook\n\n```shell\ngcpdiag runbook pubsub/push-subscription-delivery \\\n  -p project_id=value \\\n  -p subscription_name=value\n```\n\n#### Parameters\n\n| Name | Required | Default | Type | Help |\n|------|----------|---------|------|------|\n| `project_id` | True | None | str | The Project ID of the resource under investigation |\n| `subscription_name` | True | None | str | The name of subscription to evaluate in the runbook |\n\nGet help on available commands\n\n```shell\ngcpdiag runbook --help\n```\n\n### Potential Steps\n\n  - [Push Subscription Delivery Start](/runbook/steps/pubsub/push-subscription-delivery-start)\n\n  - [Active Subscription](/runbook/steps/pubsub/active-subscription)\n\n  - [Pubsub Quotas](/runbook/steps/pubsub/pubsub-quotas)\n\n  - [Response Code Step](/runbook/steps/pubsub/response-code-step)\n\n  - [Throughput Qualification](/runbook/steps/pubsub/throughput-qualification)\n\n  - [Dead Letter Topic](/runbook/steps/pubsub/dead-letter-topic)\n\n  - [Dead Letter Topic Permissions](/runbook/steps/pubsub/dead-letter-topic-permissions)\n\n  - [Vpc Sc Step](/runbook/steps/pubsub/vpc-sc-step)\n\n  - [Push Subscription Delivery End](/runbook/steps/pubsub/push-subscription-delivery-end)\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT.\n-->\n"
  },
  {
    "path": "website/content/en/runbook/diagnostic-trees/vertex/_index.md",
    "content": "---\ntitle: \"VERTEX\"\nlinkTitle: \"vertex\"\ntype: docs\nweight: 2\n---\n\nAll diagnostic tree available in vertex\n"
  },
  {
    "path": "website/content/en/runbook/diagnostic-trees/vertex/workbench-instance-stuck-in-provisioning.md",
    "content": "---\ntitle: \"vertex/Workbench Instance Stuck In Provisioning\"\nlinkTitle: \"vertex/workbench-instance-stuck-in-provisioning\"\nweight: 3\ntype: docs\ndescription: >\n  Runbook to Troubleshoot Issue: Vertex AI Workbench Instance Stuck in Provisioning State\n---\n\n**Product**: [Vertex AI](https://cloud.google.com/vertex-ai)\n**Kind**: Debugging Tree\n\n### Description\n\nThis runbook investigates root causes for the Workbench Instance to be stuck in provisioning state\n\n  Areas Examined:\n\n  - Workbench Instance State: Checks the instance's current state ensuring that it is\n    stuck in provisioning status and not stopped or active.\n\n  - Workbench Instance Compute Engine VM Boot Disk Image: Checks if the instance has been created\n    with a custom container, the official 'workbench-instances' images, deep learning VMs images,\n    or unsupported images that might cause the instance to be stuck in provisioning state.\n\n  - Workbench Instance Custom Scripts: Checks if the instance is not using custom scripts that may\n    affect the default configuration of the instance by changing the Jupyter port or breaking\n    dependencies that might cause the instance to be stuck in provisioning state.\n\n  - Workbench Instance Environment Version: Checks if the instance is using the latest environment\n    version by checking its upgradability. Old versions sometimes are the root cause for the\n    instance to be stuck in provisioning state.\n\n  - Workbench Instance Compute Engine VM Performance: Checks the VM's current performance, ensuring\n    that it is not impaired by high CPU usage, insufficient memory, or disk space issues that might\n    disrupt normal operations.\n\n  - Workbench Instance Compute Engine Serial Port Logging: Checks if the instance has serial port\n    logs which can be analyzed to ensure Jupyter is running on port 127.0.0.1:8080\n    which is mandatory.\n\n  - Workbench Instance Compute Engine SSH and Terminal access: Checks if the instance's\n    compute engine vm is running so the user can ssh and open a terminal to check for space\n    usage in 'home/jupyter'. If no space is left, that may cause the instance to be stuck\n    in provisioning state.\n\n  - Workbench Instance External IP Disabled: Checks if the external IP disabled. Wrong networking\n    configurations may cause the instance to be stuck in provisioning state.\n\n### Executing this runbook\n\n```shell\ngcpdiag runbook vertex/workbench-instance-stuck-in-provisioning \\\n  -p project_id=value \\\n  -p instance_name=value \\\n  -p zone=value \\\n  -p start_time=value \\\n  -p end_time=value\n```\n\n#### Parameters\n\n| Name | Required | Default | Type | Help |\n|------|----------|---------|------|------|\n| `project_id` | True | None | str | The Project ID of the resource under investigation |\n| `instance_name` | True |  | str | Name of the Workbench Instance |\n| `zone` | True | us-central1-a | str | Zone of the Workbench Instance. e.g. us-central1-a |\n| `start_time` | False | None | datetime | Start time of the issue |\n| `end_time` | False | None | datetime | End time of the issue |\n\nGet help on available commands\n\n```shell\ngcpdiag runbook --help\n```\n\n### Potential Steps\n\n  - [Workbench Instance Stuck In Provisioning Start](/runbook/steps/vertex/workbench-instance-stuck-in-provisioning-start)\n\n  - [Check Workbench Instance Using Custom Container](/runbook/steps/vertex/check-workbench-instance-using-custom-container)\n\n  - [Check Workbench Instance Using Official Image](/runbook/steps/vertex/check-workbench-instance-using-official-image)\n\n  - [Check Workbench Instance Custom Scripts](/runbook/steps/vertex/check-workbench-instance-custom-scripts)\n\n  - [Check Workbench Instance Is Using Latest Env Version](/runbook/steps/vertex/check-workbench-instance-is-using-latest-env-version)\n\n  - [Check Workbench Instance Performance](/runbook/steps/vertex/check-workbench-instance-performance)\n\n  - [High Vm Memory Utilization](/runbook/steps/gce/high-vm-memory-utilization)\n\n  - [High Vm Disk Utilization](/runbook/steps/gce/high-vm-disk-utilization)\n\n  - [High Vm Cpu Utilization](/runbook/steps/gce/high-vm-cpu-utilization)\n\n  - [Decision Check Workbench Instance System Logging](/runbook/steps/vertex/decision-check-workbench-instance-system-logging)\n\n  - [Check Workbench Instance Syslogs Jupyter Running On Port 8080](/runbook/steps/vertex/check-workbench-instance-syslogs-jupyter-running-on-port-8080)\n\n  - [Check Workbench Instance Compute Engine Ssh](/runbook/steps/vertex/check-workbench-instance-compute-engine-ssh)\n\n  - [Check Workbench Instance Jupyter Space](/runbook/steps/vertex/check-workbench-instance-jupyter-space)\n\n  - [Check Workbench Instance External Ip Disabled](/runbook/steps/vertex/check-workbench-instance-external-ip-disabled)\n\n  - [Workbench Instance Stuck In Provisioning End](/runbook/steps/vertex/workbench-instance-stuck-in-provisioning-end)\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT.\n-->\n"
  },
  {
    "path": "website/content/en/runbook/diagnostic-trees/vpc/_index.md",
    "content": "---\ntitle: \"VPC\"\nlinkTitle: \"vpc\"\ntype: docs\nweight: 2\n---\n\nAll diagnostic tree available in vpc\n"
  },
  {
    "path": "website/content/en/runbook/diagnostic-trees/vpc/vm-external-ip-connectivity.md",
    "content": "---\ntitle: \"vpc/Vm External Ip Connectivity\"\nlinkTitle: \"vpc/vm-external-ip-connectivity\"\nweight: 3\ntype: docs\ndescription: >\n  Troubleshooting for common issues which affect VM connectivity to external IP addresses.\n---\n\n**Product**: [Virtual Private Cloud](https://cloud.google.com/vpc)\n**Kind**: Debugging Tree\n\n### Description\n\nThis runbook investigates components required for VMs to establish connectivity\n  to external IP addresses\n\n  Areas Examined:\n\n  - VM Instance:\n      - Verify that the VM exists and is running\n\n  - VM Configuration:\n      - Checks the source nic configuration on the VM if it has an\n        External IP address or not.\n\n  - VPC routes checks:\n      - Checks the VPC routing rules are configured to allow external connectivity\n\n  - VPC firewall and firewall policy checks:\n      - Checks the VPC firewall and firewall policies allow external connectivity.\n\n  - GCE Network Connectivity Tests:\n      - Runs a VPC network connectivity test and reports the result.\n\n  - NATGW Checks:\n      - For source nics without an External IP address, verify the VM is served\n        by a Public NAT Gateway and check there are no issues on the NATGW.\n\n### Executing this runbook\n\n```shell\ngcpdiag runbook vpc/vm-external-ip-connectivity \\\n  -p project_id=value \\\n  -p name=value \\\n  -p instance_name=value \\\n  -p dest_ip=value \\\n  -p dest_port=value \\\n  -p protocol_type=value \\\n  -p src_nic=value \\\n  -p zone=value\n```\n\n#### Parameters\n\n| Name | Required | Default | Type | Help |\n|------|----------|---------|------|------|\n| `project_id` | True | None | str | The Project ID of the resource under investigation |\n| `name` | False | None | str | The name of the GCE Instance |\n| `instance_name` | True | None | str | The name of the GCE Instance |\n| `dest_ip` | True | None | IPv4Address | External IP the VM is connecting to |\n| `dest_port` | False | 443 | int | External IP the VM is connecting to |\n| `protocol_type` | False | tcp | str | Protocol used to connect to SSH |\n| `src_nic` | True | None | str | VM source NIC |\n| `zone` | True | None | str | The zone of the target GCE Instance |\n\nGet help on available commands\n\n```shell\ngcpdiag runbook --help\n```\n\n### Potential Steps\n\n  - [Vm External Ip Connectivity Start](/runbook/steps/vpc/vm-external-ip-connectivity-start)\n\n  - [Service Api Status Check](/runbook/steps/gcp/service-api-status-check)\n\n  - [Vm Has External Ip](/runbook/steps/vpc/vm-has-external-ip)\n\n  - [External Interface Check](/runbook/steps/vpc/external-interface-check)\n\n  - [Internal Interface Check](/runbook/steps/vpc/internal-interface-check)\n\n  - [Vm External Ip Connectivity End](/runbook/steps/vpc/vm-external-ip-connectivity-end)\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT.\n-->\n"
  },
  {
    "path": "website/content/en/runbook/diagnostic-trees/vpn/_index.md",
    "content": "---\ntitle: \"VPN\"\nlinkTitle: \"vpn\"\ntype: docs\nweight: 2\n---\n\nAll diagnostic tree available in vpn\n"
  },
  {
    "path": "website/content/en/runbook/diagnostic-trees/vpn/vpn-tunnel-check.md",
    "content": "---\ntitle: \"vpn/Vpn Tunnel Check\"\nlinkTitle: \"vpn/vpn-tunnel-check\"\nweight: 3\ntype: docs\ndescription: >\n  Runbook for diagnosing issues with a Cloud VPN Tunnel.\n---\n\n**Product**: [Vpn](https://cloud.google.com/hybrid-connectivity)\n**Kind**: Debugging Tree\n\n### Description\n\nThis runbook performs several checks on a specified Cloud VPN tunnel:\n-   **VPN Tunnel Status Check**: Verifies if the VPN tunnel is in an\n    'ESTABLISHED' state.\n-   **Tunnel Down Status Reason**: If the tunnel is not established, it queries\n    Cloud Logging for specific error messages and provide remediations .\n-   **Tunnel Packet Drop Check**: If the tunnel is established, it examines\n    monitoring metrics for various types of packet drops (e.g., due to MTU,\n    invalid SA, throttling) and provides remediation based on the drop reason.\n-   **Tunnel Packet Utilization Check**: Analyzes packet rates to identify if\n    the tunnel is hitting max packet per second limits.\n\n### Executing this runbook\n\n```shell\ngcpdiag runbook vpn/vpn-tunnel-check \\\n  -p project_id=value \\\n  -p region=value \\\n  -p name=value \\\n  -p start_time=value \\\n  -p end_time=value \\\n  -p tunnel=value\n```\n\n#### Parameters\n\n| Name | Required | Default | Type | Help |\n|------|----------|---------|------|------|\n| `project_id` | True | None | str | The Project ID of the resource under investigation |\n| `region` | True | None | str | The region where the VPN Tunnel is located |\n| `name` | True | None | str | Name of the VPN Tunnel |\n| `start_time` | False | None | datetime | The start window to investigate BGP flap. Format: YYYY-MM-DDTHH:MM:SSZ |\n| `end_time` | False | None | datetime | The end window for the investigation. Format: YYYY-MM-DDTHH:MM:SSZ |\n| `tunnel` | False | None | str | This Flag will be added Automatically |\n\nGet help on available commands\n\n```shell\ngcpdiag runbook --help\n```\n\n### Potential Steps\n\n  - [Vpn Tunnel Status](/runbook/steps/vpn/vpn-tunnel-status)\n\n  - [Tunnel Down Status Reason](/runbook/steps/vpn/tunnel-down-status-reason)\n\n  - [Tunnel Packets Drop Check](/runbook/steps/vpn/tunnel-packets-drop-check)\n\n  - [Tunnel Packets Utilization Check](/runbook/steps/vpn/tunnel-packets-utilization-check)\n\n  - [Vpn Tunnel Check End](/runbook/steps/vpn/vpn-tunnel-check-end)\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT.\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/_index.md",
    "content": "---\ntitle: \"All Steps\"\nlinkTitle: \"steps\"\ntype: docs\nweight: 1\n---\n\nAll steps available in the runbook by products\n"
  },
  {
    "path": "website/content/en/runbook/steps/bigquery/_index.md",
    "content": "---\ntitle: \"BIGQUERY\"\nlinkTitle: \"bigquery\"\ntype: docs\nweight: 2\n---\n\nAll steps available in bigquery\n"
  },
  {
    "path": "website/content/en/runbook/steps/bigquery/big-query-end.md",
    "content": "---\ntitle: \"bigquery/Big Query End\"\nlinkTitle: \"Big Query End\"\nweight: 3\ntype: docs\ndescription: >\n  End of the runbook.\n---\n\n**Product**: [BigQuery](https://cloud.google.com/bigquery)\\\n**Step Type**: END\n\n### Description\n\nNo more checks to perform.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/bigquery/big-query-error-identification.md",
    "content": "---\ntitle: \"bigquery/Big Query Error Identification\"\nlinkTitle: \"Big Query Error Identification\"\nweight: 3\ntype: docs\ndescription: >\n  Analyzes the job's error message to find a known mitigation.\n---\n\n**Product**: [BigQuery](https://cloud.google.com/bigquery)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nThis is the final diagnostic step. It collects all error messages from the job\n  and compares them against a dictionary of known issues (the ERROR_MAP). If a\n  match is found, it provides a specific cause and remediation. Otherwise, it\n  reports the full error for manual inspection.\n\n### Failure Reason\n\nJob failed with error: {error_message}\n\nJob failure cause: {cause}\n\n### Failure Remediation\n\nSuggested mitigation: {remediation}\n\n### Uncertain Reason\n\nJob {job_id} failed with an error that does not have a publicly documented mitigation and root cause.\nFull error message(s) reported:\n\"{error_message}\"\n\n### Uncertain Remediation\n\nPlease retry the job to confirm whether the error is transient and can be mitigated through a retry with exponential backoff. See <https://cloud.google.com/bigquery/docs/error-messages>.\nIf the issue persists, contact Google Cloud Support at <https://cloud.google.com/support> and provide this report with the full BigQuery Job Id.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/bigquery/big-query-failed-query-start.md",
    "content": "---\ntitle: \"bigquery/Big Query Failed Query Start\"\nlinkTitle: \"Big Query Failed Query Start\"\nweight: 3\ntype: docs\ndescription: >\n  Validates parameters and prerequisites before starting the diagnosis.\n---\n\n**Product**: [BigQuery](https://cloud.google.com/bigquery)\\\n**Step Type**: START\n\n### Description\n\nThis initial step ensures that the provided project exists, valid job\n  identifiers have been provided, the BigQuery API is enabled and also\n  checks whether the user has the necessary permissions to execute the\n  runbook. The runbook will terminate if any of these initial checks fail.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/bigquery/big-query-job-exists.md",
    "content": "---\ntitle: \"bigquery/Big Query Job Exists\"\nlinkTitle: \"Big Query Job Exists\"\nweight: 3\ntype: docs\ndescription: >\n  Gateway that verifies the BigQuery Job exists.\n---\n\n**Product**: [BigQuery](https://cloud.google.com/bigquery)\\\n**Step Type**: GATEWAY\n\n### Description\n\nThis step calls the BigQuery API to fetch the job. If the job is found, the\n  runbook proceeds to the next step. If it is not found (e.g., due to a typo in\n  the job ID or region), the runbook reports this and terminates this path.\n\n### Failure Reason\n\nJob {job_id} does not exist.\n\n### Failure Remediation\n\nPlease check the corresponding job Region and make sure to provide the correct Job and Project identifiers.\n\n### Success Reason\n\nJob {job_id} was successfully located.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/bigquery/check-bq-job-has-error.md",
    "content": "---\ntitle: \"bigquery/Check Bq Job Has Error\"\nlinkTitle: \"Check Bq Job Has Error\"\nweight: 3\ntype: docs\ndescription: >\n  Gateway to verify that a completed job contains an error result.\n---\n\n**Product**: [BigQuery](https://cloud.google.com/bigquery)\\\n**Step Type**: GATEWAY\n\n### Description\n\nThis step inspects the job details to see if an error was reported. If an\n  error is present, the runbook proceeds to the final analysis step. If the job\n  completed successfully, the runbook stops and informs the user.\n\n### Failure Reason\n\nThe completed job `{job_id}` finished successfully without any errors.\n\n### Failure Remediation\n\nThis runbook is designed to analyze failed jobs. Please provide the ID of a job that has completed with an error.\n\n### Success Reason\n\nOK: The completed job `{job_id}` contains an error message, as expected for this analysis.\nThe error reported was: {error_string}\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/bigquery/check-bq-job-has-failed.md",
    "content": "---\ntitle: \"bigquery/Check Bq Job Has Failed\"\nlinkTitle: \"Check Bq Job Has Failed\"\nweight: 3\ntype: docs\ndescription: >\n  Gateway to verify that a completed job contains an error result.\n---\n\n**Product**: [BigQuery](https://cloud.google.com/bigquery)\\\n**Step Type**: GATEWAY\n\n### Description\n\nThis step inspects the job details to see if an error was reported. If an\n  error is present, the runbook proceeds to the final analysis step. If the job\n  completed successfully, the runbook stops and informs the user.\n\n### Failure Reason\n\nJob successfully finished execution without any errors.\n\n### Failure Remediation\n\nOnly failed BigQuery jobs can be analyzed for failure reasons. Restart the investigation and provide a job that failed during execution.\n\n### Success Reason\n\nJob finished execution with an error. Continuing the investigation.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/bigquery/check-permissions.md",
    "content": "---\ntitle: \"bigquery/Check Permissions\"\nlinkTitle: \"Check Permissions\"\nweight: 3\ntype: docs\ndescription: >\n  Checks for necessary IAM permissions to execute the runbook's diagnostic steps.\n---\n\n**Product**: [BigQuery](https://cloud.google.com/bigquery)\\\n**Step Type**: COMPOSITE STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nPrincipal `{principal}` is missing the following required permissions for the {runbook_id}: {missing_permissions_or_roles}.\n\n### Failure Remediation\n\nGrant the principal `{principal}` the necessary permissions, typically by assigning predefined IAM roles like '{required_roles}' at the project level.\n\n### Success Reason\n\nPrincipal `{principal}` has all required permissions for the {runbook_id}: {present_permissions_or_roles}.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/bigquery/confirm-bq-job-is-done.md",
    "content": "---\ntitle: \"bigquery/Confirm Bq Job Is Done\"\nlinkTitle: \"Confirm Bq Job Is Done\"\nweight: 3\ntype: docs\ndescription: >\n  Gateway to confirm that the BigQuery job has finished execution.\n---\n\n**Product**: [BigQuery](https://cloud.google.com/bigquery)\\\n**Step Type**: GATEWAY\n\n### Description\n\nThis step checks the job's status. If the status is 'DONE', the runbook\n  continues to the next check. If the job is still 'RUNNING' or 'PENDING', the\n  runbook will stop and advise the user to wait for completion.\n\n### Failure Reason\n\nJob {job_id} is currently in the {job_state} state and has not yet completed.\n\n### Failure Remediation\n\nWait for the job to finish execution and restart the investigation.\n\n### Success Reason\n\nJob {job_id} has finished execution.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/bigquery/run-permission-checks.md",
    "content": "---\ntitle: \"bigquery/Run Permission Checks\"\nlinkTitle: \"Run Permission Checks\"\nweight: 3\ntype: docs\ndescription: >\n  A comprehensive step to check all mandatory and optional permissions.\n---\n\n**Product**: [BigQuery](https://cloud.google.com/bigquery)\\\n**Step Type**: GATEWAY\n\n### Description\n\nThis step is intended to check mandatory and optional permissions for the\n  given BigQuery runbook type. It will terminate runbook execution if mandatory\n  permissions are missing, or add 'SKIP' notifications for missing optional\n  permissions. The step execution will skip altogether if the user is missing\n  the resourcemanager.projects.get permission. Finally, it populates the global\n  PERMISSION_RESULTS dictionary used throughout the runbook.\n\n### Failure Reason\n\nExecution halted. The principal {principal} is missing the following mandatory IAM permission(s) required to run this runbook: {permissions}.\n\n### Failure Remediation\n\nGrant the principal {principal} the missing permission(s) on the project to proceed.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/cloudrun/_index.md",
    "content": "---\ntitle: \"CLOUDRUN\"\nlinkTitle: \"cloudrun\"\ntype: docs\nweight: 2\n---\n\nAll steps available in cloudrun\n"
  },
  {
    "path": "website/content/en/runbook/steps/cloudrun/container-failed-to-start-step.md",
    "content": "---\ntitle: \"cloudrun/Container Failed To Start Step\"\nlinkTitle: \"Container Failed To Start Step\"\nweight: 3\ntype: docs\ndescription: >\n  Checks if the deployment error was caused by container failed to start error.\n---\n\n**Product**: [Cloud Run](https://cloud.google.com/run)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nThis step will check if the error is present and link to additional troubleshooting steps.\n\n### Failure Reason\n\nContainer failed to start in service {name}.\n\n### Failure Remediation\n\nThe container failed to start. Refer to <https://cloud.google.com/run/docs/troubleshooting#container-failed-to-start> for guidance.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/cloudrun/image-was-not-found-step.md",
    "content": "---\ntitle: \"cloudrun/Image Was Not Found Step\"\nlinkTitle: \"Image Was Not Found Step\"\nweight: 3\ntype: docs\ndescription: >\n  Checks if if specified image exists.\n---\n\n**Product**: [Cloud Run](https://cloud.google.com/run)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nThis step will check if the error is present and link to additional troubleshooting steps.\n\n### Failure Reason\n\nProvided image {image} does not exist.\n\n### Failure Remediation\n\nThe provided image does not exist. Verify that the image name is correct. Refer to <https://cloud.google.com/run/docs/quickstarts> for guidance on specifying image names.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/cloudrun/no-permission-for-image-step.md",
    "content": "---\ntitle: \"cloudrun/No Permission For Image Step\"\nlinkTitle: \"No Permission For Image Step\"\nweight: 3\ntype: docs\ndescription: >\n  Checks if Cloud Run service agent can fetch the image.\n---\n\n**Product**: [Cloud Run](https://cloud.google.com/run)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nThis step will check if the error is present and link to additional troubleshooting steps.\n\n### Failure Reason\n\nCloud Run Service agent {sa} does not have permissions to read image {image}.\n\n### Failure Remediation\n\nGrant {sa} the roles/storage.objectViewer role if the image is stored in Container Registry or the roles/artifactregistry.reader role if in Artifact Registry. Note that the role must be granted in the project where the image is stored.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/cloudrun/service-deployment-code-step.md",
    "content": "---\ntitle: \"cloudrun/Service Deployment Code Step\"\nlinkTitle: \"Service Deployment Code Step\"\nweight: 3\ntype: docs\ndescription: >\n  Checks for container and code issues.\n---\n\n**Product**: [Cloud Run](https://cloud.google.com/run)\\\n**Step Type**: COMPOSITE STEP\n\n### Description\n\nNone\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/cloudrun/service-deployment-start.md",
    "content": "---\ntitle: \"cloudrun/Service Deployment Start\"\nlinkTitle: \"Service Deployment Start\"\nweight: 3\ntype: docs\ndescription: >\n  Prepare the parameters for cloudrun/service-deployment runbook.\n---\n\n**Product**: [Cloud Run](https://cloud.google.com/run)\\\n**Step Type**: START\n\n### Description\n\nLooks up the cloud run service making sure it exists.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/crm/_index.md",
    "content": "---\ntitle: \"CRM\"\nlinkTitle: \"crm\"\ntype: docs\nweight: 2\n---\n\nAll steps available in crm\n"
  },
  {
    "path": "website/content/en/runbook/steps/crm/org-policy-check.md",
    "content": "---\ntitle: \"crm/Org Policy Check\"\nlinkTitle: \"Org Policy Check\"\nweight: 3\ntype: docs\ndescription: >\n  Checks if an organization policy is effective in a project\n---\n\n**Product**: [Cloud Resource Manager](https://cloud.google.com/resource-manager)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nSupports only boolean constraints and not list constraints.\n\n### Failure Reason\n\nThe organization policy {constraint} is set to {actual_state}, but it should be {expected_state}.\n\n### Failure Remediation\n\nFollow Guide [1] to correct the constraint. Search for the constraint in [2] to better understand\nhow it works.\n\nNote: Consider checking with organization administrators for the recommended approach.\n\n[1] <https://cloud.google.com/resource-manager/docs/organization-policy/using-constraints>\n[2] <https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints>\n\n### Success Reason\n\nThe {constraint} is {actual_state}.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataflow/_index.md",
    "content": "---\ntitle: \"DATAFLOW\"\nlinkTitle: \"dataflow\"\ntype: docs\nweight: 2\n---\n\nAll steps available in dataflow\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataflow/dataflow-permissions-end.md",
    "content": "---\ntitle: \"dataflow/Dataflow Permissions End\"\nlinkTitle: \"Dataflow Permissions End\"\nweight: 3\ntype: docs\ndescription: >\n  RUNBOOK COMPLETED.\n---\n\n**Product**: [Dataflow](https://cloud.google.com/dataflow)\\\n**Step Type**: END\n\n### Description\n\nNone\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataflow/dataflow-resource-permissions.md",
    "content": "---\ntitle: \"dataflow/Dataflow Resource Permissions\"\nlinkTitle: \"Dataflow Resource Permissions\"\nweight: 3\ntype: docs\ndescription: >\n  Check the Dataflow Resource permissions.\n---\n\n**Product**: [Dataflow](https://cloud.google.com/dataflow)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nVerify that Dataflow resources have the necessary permissions to be accessed\n  and used by Dataflow jobs.\n  Ensure that the your Dataflow project Worker Service Account have the\n  required permissions to access and modify these resources.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataflow/dataflow-user-account-permissions.md",
    "content": "---\ntitle: \"dataflow/Dataflow User Account Permissions\"\nlinkTitle: \"Dataflow User Account Permissions\"\nweight: 3\ntype: docs\ndescription: >\n  Check the User account permissions.\n---\n\n**Product**: [Dataflow](https://cloud.google.com/dataflow)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\n\"Dataflow Viewer\" role allows the user to view/list the Dataflow jobs. But,\n  cannot submit, update, drain, stop, or cancel the jobs.\n  \"Dataflow Developer\" role does allows the user to create and modify (view,\n  update, cancel etc) the dataflow jobs, but does not provide machine type,\n  storage bucket configuration access.\n  \"Dataflow Admin\" role provides complete access for creating and modifying the\n  jobs along with the machine type and storage bucket configuration access.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataflow/dataflow-worker-service-account-permissions.md",
    "content": "---\ntitle: \"dataflow/Dataflow Worker Service Account Permissions\"\nlinkTitle: \"Dataflow Worker Service Account Permissions\"\nweight: 3\ntype: docs\ndescription: >\n  Check the Dataflow Worker account permissions.\n---\n\n**Product**: [Dataflow](https://cloud.google.com/dataflow)\\\n**Step Type**: GATEWAY\n\n### Description\n\nWorker instances use the worker service account to access input and output\n  resources after you submit your job.\n  For the worker service account to be able to run a job,\n  it must have the roles/dataflow.worker role.\n\n### Failure Reason\n\nService Account `{service_account}` associated with the Dataflow job was not found in project `{project_id}` or the specified cross-project.\n\n### Failure Remediation\n\nSpecify the project where the service account resides using the `cross_project_project` parameter.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataflow/failed-streaming-pipeline-end.md",
    "content": "---\ntitle: \"dataflow/Failed Streaming Pipeline End\"\nlinkTitle: \"Failed Streaming Pipeline End\"\nweight: 3\ntype: docs\ndescription: >\n  End of the runbook.\n---\n\n**Product**: [Dataflow](https://cloud.google.com/dataflow)\\\n**Step Type**: END\n\n### Description\n\nNo more checks to perform.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataflow/failed-streaming-pipeline-start.md",
    "content": "---\ntitle: \"dataflow/Failed Streaming Pipeline Start\"\nlinkTitle: \"Failed Streaming Pipeline Start\"\nweight: 3\ntype: docs\ndescription: >\n  Start step.\n---\n\n**Product**: [Dataflow](https://cloud.google.com/dataflow)\\\n**Step Type**: START\n\n### Description\n\nGets the job and confirms it exists.\n  Usually this will be logged in Dataflow Monitoring Interface, but may not be\n  logged if the job\n  graph is not constructed.\n\n### Failure Reason\n\n  Failed to find job {job_id} in region {region}\n\n### Success Reason\n\n  Successfully found job {job_id} in region {region}\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataflow/job-graph-is-constructed.md",
    "content": "---\ntitle: \"dataflow/Job Graph Is Constructed\"\nlinkTitle: \"Job Graph Is Constructed\"\nweight: 3\ntype: docs\ndescription: >\n  Has common step to check if the job has an error in graph construction.\n---\n\n**Product**: [Dataflow](https://cloud.google.com/dataflow)\\\n**Step Type**: GATEWAY\n\n### Description\n\nIf a job fails during graph construction, it's error is not logged in the\n  Dataflow Monitoring Interface as it never launched. The error appears in the\n  console or terminal window where job is ran and may be language-specific.\n  Manual check if there's any error using the 3 supported languages: Java,\n  Python, Go.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataflow/job-is-streaming.md",
    "content": "---\ntitle: \"dataflow/Job Is Streaming\"\nlinkTitle: \"Job Is Streaming\"\nweight: 3\ntype: docs\ndescription: >\n  Has common step to check if the job is a streaming job.\n---\n\n**Product**: [Dataflow](https://cloud.google.com/dataflow)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataflow/job-logs-visible.md",
    "content": "---\ntitle: \"dataflow/Job Logs Visible\"\nlinkTitle: \"Job Logs Visible\"\nweight: 3\ntype: docs\ndescription: >\n  Has step to check if the project has logs exclusion filter for dataflow logs.\n---\n\n**Product**: [Dataflow](https://cloud.google.com/dataflow)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nThis affects visibility of the error causing job failure. If there are no logs\n  on the\n  Dataflow Monitoring Interface or the launching console/platform, this is a\n  good check\n  to make sure Dataflow logs are visible.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataflow/job-state.md",
    "content": "---\ntitle: \"dataflow/Job State\"\nlinkTitle: \"Job State\"\nweight: 3\ntype: docs\ndescription: >\n  Has common step to check job state is not failed.\n---\n\n**Product**: [Dataflow](https://cloud.google.com/dataflow)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nUsually the specific error is logged in the Dataflow Monitoring Interface.\n\n### Failure Reason\n\n  Job state for job {job_id} is Failed.\n\n### Failure Remediation\n\n  Refer to the Dataflow Monitoring Interface for the specific error.\n  Refer to the common errors documentation [1] to resolve the job errors.\n\n  [1] <https://cloud.google.com/dataflow/docs/guides/common-errors#pipeline_errors>\n\n### Success Reason\n\n   The Dataflow job state is {state}.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataflow/valid-sdk.md",
    "content": "---\ntitle: \"dataflow/Valid Sdk\"\nlinkTitle: \"Valid Sdk\"\nweight: 3\ntype: docs\ndescription: >\n  Has common step to check if the job is running a valid SDK.\n---\n\n**Product**: [Dataflow](https://cloud.google.com/dataflow)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nContains SDK check Step that are likely to be reused for most Dataflow\n  Runbooks.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataproc/_index.md",
    "content": "---\ntitle: \"DATAPROC\"\nlinkTitle: \"dataproc\"\ntype: docs\nweight: 2\n---\n\nAll steps available in dataproc\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataproc/check-autoscaling-policy.md",
    "content": "---\ntitle: \"dataproc/Check Autoscaling Policy\"\nlinkTitle: \"Check Autoscaling Policy\"\nweight: 3\ntype: docs\ndescription: >\n  Verify autoscaling policies.\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nAutoscaling is enabled without graceful decommission timeout on cluster {cluster_name}\n\n### Failure Remediation\n\nEnable graceful decommission timeout in the autoscaling policy to allow executors to fetch shuffle data before nodes are removed.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataproc/check-bq-connector.md",
    "content": "---\ntitle: \"dataproc/Check Bq Connector\"\nlinkTitle: \"Check Bq Connector\"\nweight: 3\ntype: docs\ndescription: >\n  Check for issues related to BigQuery connector such as version dependency conflicts.\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Step Type**: COMPOSITE STEP\n\n### Description\n\nNone\n\n### Success Reason\n\nThe cluster uses image version {image_version} which preinstalls the BigQuery connector, and no conflicting BigQuery JARs were provided. Dependency version conflicts on the BigQuery side are not expected.\n\nRefer to the Dataproc Version page to find out each component version preinstalled on your cluster:\n<https://cloud.google.com/dataproc/docs/concepts/versioning/dataproc-version-clusters>\n\n### Uncertain Reason\n\nThe cluster uses image version {image_version} which preinstalls the BigQuery connector, and a different version of the BigQuery connector is being installed at the cluster or job level. This might cause dependency version conflicts and lead to job failures.\n\n### Uncertain Remediation\n\nResolve potential BigQuery connector version conflicts using one of the following approaches:\n\n- If providing the BigQuery JAR at the cluster level: Create the Dataproc cluster without specifying any BigQuery JAR.\n- If providing the BigQuery JAR at the job level: Run the job without specifying any BigQuery JAR.\n- If installing a BigQuery JAR is necessary: Match the version of the BigQuery JAR to the version preinstalled on the cluster (version {bq_version} for image {image_version}).\n\nRefer to the Dataproc Version page to find out each component version preinstalled on your cluster:\n<https://cloud.google.com/dataproc/docs/concepts/versioning/dataproc-version-clusters>\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataproc/check-cluster-network-connectivity.md",
    "content": "---\ntitle: \"dataproc/Check Cluster Network Connectivity\"\nlinkTitle: \"Check Cluster Network Connectivity\"\nweight: 3\ntype: docs\ndescription: >\n  Verify that the nodes in the cluster can communicate with each other.\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nThe Compute Engine Virtual Machine instances (VMs) in a Dataproc cluster must\n  be able to communicate with each other using ICMP, TCP (all ports), and UDP\n  (all ports) protocols.\n\n### Failure Reason\n\nThe network communication among nodes in cluster {cluster_name} is blocked.\n\n### Failure Remediation\n\nCreate a firewall rule that meets Dataproc connectivity requirements[1] and apply it to the cluster's VPC network.\nReview the documentation[2] for more details.\nReferences:\n[1] <https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/network#dataproc_connectivity_requirements>\n[2] <https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/network>\n\n### Success Reason\n\nThe network communication among nodes in cluster {cluster_name} is working.\n\n### Uncertain Reason\n\nThe cluster has not been found, it may have been deleted. Skipping the connectivity test.\n\n### Uncertain Remediation\n\nVerify that Dataproc connectivity requirements[1] are satisfied.\nReferences:\n[1] <https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/network#dataproc_connectivity_requirements>\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataproc/check-cluster-network.md",
    "content": "---\ntitle: \"dataproc/Check Cluster Network\"\nlinkTitle: \"Check Cluster Network\"\nweight: 3\ntype: docs\ndescription: >\n  Verify that the nodes in the cluster can communicate with each other.\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nThe Compute Engine Virtual Machine instances (VMs) in a Dataproc cluster must\n  be able to communicate with each other using ICMP, TCP (all ports), and UDP\n  (all ports) protocols.\n\n### Failure Reason\n\nThe network communication among nodes in cluster {cluster_name} is blocked.\n\n### Failure Remediation\n\nCreate a firewall rule that meets Dataproc connectivity requirements[1] and apply it to the cluster's VPC network.\nReview the documentation[2] for more details.\nReferences:\n[1] <https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/network#dataproc_connectivity_requirements>\n[2] <https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/network>\n\n### Success Reason\n\nThe network communication among nodes in cluster {cluster_name} is working.\n\n### Uncertain Reason\n\nThe cluster has not been found, it may have been deleted. Skipping the connectivity test.\n\n### Uncertain Remediation\n\nVerify that Dataproc connectivity requirements[1] are satisfied.\nReferences:\n[1] <https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/network#dataproc_connectivity_requirements>\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataproc/check-cluster-quota.md",
    "content": "---\ntitle: \"dataproc/Check Cluster Quota\"\nlinkTitle: \"Check Cluster Quota\"\nweight: 3\ntype: docs\ndescription: >\n  Verify if the Dataproc cluster has quota issues.\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Step Type**: START\n\n### Description\n\nChecks if the Dataproc cluster had creation issues due to quota.\n\n### Failure Reason\n\nThe cluster {cluster_name} in project {project_id} could not be created due to insufficient quota in the project.\n\n### Failure Remediation\n\nThis issue occurs when the requested Dataproc cluster exceeds the project's available quota for resources such as CPU, disk space, or IP addresses.\nTo resolve this issue:\n\n- Request additional quota [1] via the Google Cloud console.\n- Create the cluster in a different project.\n[1] <https://cloud.google.com/docs/quotas/view-manage#managing_your_quota_console>\n\n### Success Reason\n\nNo issues with insufficient quota identified for cluster {cluster_name} in project {project_id}. If the intended cluster does not appear in the Dataproc UI, verify the provided cluster_name parameter.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataproc/check-cluster-stock-out.md",
    "content": "---\ntitle: \"dataproc/Check Cluster Stock Out\"\nlinkTitle: \"Check Cluster Stock Out\"\nweight: 3\ntype: docs\ndescription: >\n  Verify if Dataproc cluster has stockout issue.\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nChecks if the zone being used to create the cluster has sufficient resources.\n\n### Failure Reason\n\nThe cluster {cluster_name} creation in project {project_id} failed due to insufficient resources in the selected zone/region.\n\n### Failure Remediation\n\nDataproc cluster stockout occurs when there are insufficient resources available in a specific zone or region to create the requested cluster.\nTo resolve this issue:\n\n- Create the cluster in a different zone or region.\n- Use the Dataproc Auto Zone placement feature by not specifying the zone [1].\n[1] <https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/auto-zone>\n\n### Success Reason\n\nNo issues with stockouts identified for cluster {cluster_name} in project {project_id}. If the intended cluster does not appear in the Dataproc UI, verify the provided cluster_name parameter.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataproc/check-cluster-version.md",
    "content": "---\ntitle: \"dataproc/Check Cluster Version\"\nlinkTitle: \"Check Cluster Version\"\nweight: 3\ntype: docs\ndescription: >\n  Verify if the cluster version is supported.\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nThe cluster {cluster_name} is using an unsupported Dataproc image version. Run the job on a supported image version.\n\n### Failure Remediation\n\nFind supported Dataproc image versions in this document[1].\n[1] <https://cloud.google.com/dataproc/docs/concepts/versioning/dataproc-version-clusters>\n\n### Success Reason\n\nThe cluster {cluster_name} is using a supported Dataproc image version.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataproc/check-gc-pause.md",
    "content": "---\ntitle: \"dataproc/Check Gc Pause\"\nlinkTitle: \"Check Gc Pause\"\nweight: 3\ntype: docs\ndescription: >\n  Verify if STW GC Pause has happened.\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Step Type**: COMPOSITE STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nLog messages related to \"{log}\" were found on the cluster: {cluster_name}.\n\n### Failure Remediation\n\nTo address potential GC pause issues:\n\n- Increase the `spark.executor.memory` configuration to allocate additional memory if allocated memory appears insufficient [1].\n- If memory allocation seems adequate, investigate potential garbage collection optimization. Refer to the Apache Spark documentation for a comprehensive guide on Garbage Collection Tuning [2].\n- Additionally, tuning the `spark.memory.fraction` property can be effective, particularly for workloads that rely heavily on RDD caching. Refer to the Memory Management Overview [3] for a detailed discussion of this configuration property.\n\n[1] <https://spark.apache.org/docs/latest/configuration.html>\n[2] <https://spark.apache.org/docs/latest/tuning.html#garbage-collection-tuning>\n[3] <https://spark.apache.org/docs/latest/tuning.html#memory-management-overview>\n\n### Success Reason\n\nNo log messages related to \"{log}\" were found on the cluster: {cluster_name}.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataproc/check-gcs-connector.md",
    "content": "---\ntitle: \"dataproc/Check Gcs Connector\"\nlinkTitle: \"Check Gcs Connector\"\nweight: 3\ntype: docs\ndescription: >\n  Check for non-default GCS connector and for errors in logs connected to Cloud Storage.\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Step Type**: COMPOSITE STEP\n\n### Description\n\nNone\n\n### Success Reason\n\nNo user-specified Cloud Storage connector version was identified. The cluster is using the default version.\n\n### Uncertain Reason\n\nA user-specified Cloud Storage connector version was identified for cluster. Using a non-default connector version can lead to issues if not required by the application, as Dataproc clusters include a default pre-installed GCS connector.\n<https://cloud.google.com/dataproc/docs/concepts/versioning/dataproc-version-clusters#supported-dataproc-image-versions>\n\n### Uncertain Remediation\n\nVerify the setup is correct if using a non-default Cloud Storage connector by following:\n<https://cloud.google.com/dataproc/docs/concepts/connectors/cloud-storage#non-default_connector_versions>\n<https://cloud.google.com/dataproc/docs/concepts/connectors/cloud-storage#service_account_permissions>\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataproc/check-if-job-failed.md",
    "content": "---\ntitle: \"dataproc/Check If Job Failed\"\nlinkTitle: \"Check If Job Failed\"\nweight: 3\ntype: docs\ndescription: >\n  Verify if dataproc job failed.\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nJob `{job_id}` completed successfully.\n\n### Failure Remediation\n\nIf the job experienced slow performance, potential causes include data skew, changes in data volume, or network latency.\nIf performance issues persist, open a support case and share the Spark event log for both the fast and slow job runs.\n\n### Success Reason\n\nJob `{job_id}` failed. Continue with the next steps to investigate the failure.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataproc/check-init-script-failure.md",
    "content": "---\ntitle: \"dataproc/Check Init Script Failure\"\nlinkTitle: \"Check Init Script Failure\"\nweight: 3\ntype: docs\ndescription: >\n  Verify if dataproc cluster init script failed.\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nThe initialization action provided during cluster creation failed to install.\n\n### Failure Reason\n\nThe cluster {cluster_name} creation failed because the initialization script encountered an error.\n\n### Failure Remediation\n\nA Dataproc cluster initialization script failure means that a script intended to run during the cluster's setup did not complete successfully.\nTo resolve this issue:\n\n- Review initialization actions considerations and guidelines [1].\n- Examine the output logs. The error message should provide a link to the logs in Cloud Storage.\n[1]<https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/init-actions#important_considerations_and_guidelines>\n\n### Success Reason\n\nThe initialization actions for cluster {cluster_name} in project {project_id} completed successfully without errors.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataproc/check-job-throttling.md",
    "content": "---\ntitle: \"dataproc/Check Job Throttling\"\nlinkTitle: \"Check Job Throttling\"\nweight: 3\ntype: docs\ndescription: >\n  Verify the presence of Job Throttling logs.\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Step Type**: COMPOSITE STEP\n\n### Description\n\nNone\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataproc/check-killing-orphaned-application.md",
    "content": "---\ntitle: \"dataproc/Check Killing Orphaned Application\"\nlinkTitle: \"Check Killing Orphaned Application\"\nweight: 3\ntype: docs\ndescription: >\n  Verify if the killing of Orphaned applications has happened.\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Step Type**: COMPOSITE STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nLog messages related to \"{log}\" were found on the cluster: {cluster_name}.\n\n### Failure Remediation\n\nTo prevent orphaned YARN applications from being killed, set the cluster property `dataproc:dataproc.yarn.orphaned-app-termination.enable` to `false`.\nMore details are available in the documentation [1].\n[1] <https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/cluster-properties>\n\n### Success Reason\n\nNo log messages related to \"{log}\" were found on the cluster: {cluster_name}.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataproc/check-logs-exist.md",
    "content": "---\ntitle: \"dataproc/Check Logs Exist\"\nlinkTitle: \"Check Logs Exist\"\nweight: 3\ntype: docs\ndescription: >\n  Checks if specified logs messages exist in the Dataproc cluster.\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nThis step supports checking for the presence of a concrete log message.\n\n  Attributes:\n    log_message (str): log message that is being looked for.\n\n### Failure Reason\n\nLog messages related to \"{log}\" were found on the cluster: {cluster_name}.\n\n### Failure Remediation\n\nInvestigate the job logs further, focusing on eliminating the observed message.\n\n### Success Reason\n\nNo log messages related to \"{log}\" were found on the cluster: {cluster_name}.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataproc/check-master-oom.md",
    "content": "---\ntitle: \"dataproc/Check Master Oom\"\nlinkTitle: \"Check Master Oom\"\nweight: 3\ntype: docs\ndescription: >\n  Check if OOM has happened on master.\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nFound logs messages related to Master OOM on the cluster: {cluster_name}.\n\n### Failure Remediation\n\nFollow the troubleshooting guide [1] to adjust the driver memory used for the job.\n\n[1] <https://cloud.google.com/dataproc/docs/support/troubleshoot-oom-errors#oom_solutions>\n\n### Success Reason\n\nDidn't find logs messages related to Master OOM on the cluster: {cluster_name}.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataproc/check-permissions.md",
    "content": "---\ntitle: \"dataproc/Check Permissions\"\nlinkTitle: \"Check Permissions\"\nweight: 3\ntype: docs\ndescription: >\n  Check if the permissions are set correctly.\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Step Type**: COMPOSITE STEP\n\n### Description\n\nNone\n\n### Uncertain Reason\n\nService Account {service_account} associated with Dataproc cluster was not found in project {project_id} or cross project (if specified).\n\n### Uncertain Remediation\n\nProvide the project where the service account resides using the `cross_project` parameter.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataproc/check-port-exhaustion.md",
    "content": "---\ntitle: \"dataproc/Check Port Exhaustion\"\nlinkTitle: \"Check Port Exhaustion\"\nweight: 3\ntype: docs\ndescription: >\n  Verify if the port exhaustion has happened.\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Step Type**: COMPOSITE STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nLog messages related to \"{log}\" were found on the cluster: {cluster_name}.\n\n### Failure Remediation\n\nThis issue occurs when Spark jobs cannot find an available port after 1000 retries.\nCLOSE_WAIT connections are a possible cause.\nTo identify CLOSE_WAIT connections, analyze the netstat output:\n\n1. Run `netstat -plant >> open_connections.txt`.\n2. Run `cat open_connections.txt | grep \"CLOSE_WAIT\"`.\n\nIf blocked connections are due to a specific application, restart that application.\nAlternatively, restart the master node to release the affected connections.\n\n### Success Reason\n\nNo log messages related to \"{log}\" were found on the cluster: {cluster_name}.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataproc/check-preemptible.md",
    "content": "---\ntitle: \"dataproc/Check Preemptible\"\nlinkTitle: \"Check Preemptible\"\nweight: 3\ntype: docs\ndescription: >\n  Verify preemptibility.\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nCluster {cluster.name} uses preemptible workers and their count exceeds 50% of the total worker count leading to shuffle fetch failures.\n\n### Failure Remediation\n\nTo improve stability:\n\n- Reduce the number of preemptible workers.\n- Use non-preemptible workers.\n- Explore Enhanced Flexibility Mode (EFM) for better control over preemptible instances.\n\n### Success Reason\n\nCluster {cluster.name} uses preemptible workers. While within the recommended limit, preemptions might still lead to FetchFailedExceptions.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataproc/check-private-google-access.md",
    "content": "---\ntitle: \"dataproc/Check Private Google Access\"\nlinkTitle: \"Check Private Google Access\"\nweight: 3\ntype: docs\ndescription: >\n  Check if the subnetwork of the cluster has private google access enabled.\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nChecking if the subnetwork of the cluster has private google access enabled.\n\n### Failure Reason\n\nGoogle Private Access in subnet: {subnetwork_uri} is disabled.\n\n### Failure Remediation\n\nDataproc clusters isolated from the public internet require Private Google Access enabled on their subnetwork ({subnetwork_uri}) to allow cluster nodes to access Google APIs and services (e.g., Cloud Storage) using internal IPs [cluster VMs are not assigned public IP addresses](1).\nEnable Private Google Access for the subnetwork[2].\nReferences:\n[1] <https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/network#create-a-dataproc-cluster-with-internal-IP-addresses-only>\n[2] <https://cloud.google.com/vpc/docs/configure-private-google-access>\n\n### Success Reason\n\nGoogle Private Access in subnet: {subnetwork_uri} is enabled.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataproc/check-python-import-failure.md",
    "content": "---\ntitle: \"dataproc/Check Python Import Failure\"\nlinkTitle: \"Check Python Import Failure\"\nweight: 3\ntype: docs\ndescription: >\n  Check if the python import failure has happened.\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Step Type**: COMPOSITE STEP\n\n### Description\n\nNone\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataproc/check-shared-vpc-roles.md",
    "content": "---\ntitle: \"dataproc/Check Shared Vpc Roles\"\nlinkTitle: \"Check Shared Vpc Roles\"\nweight: 3\ntype: docs\ndescription: >\n  Verify if dataproc cluster is using Shared VPC.\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nChecks for missing roles.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataproc/check-shuffle-failures.md",
    "content": "---\ntitle: \"dataproc/Check Shuffle Failures\"\nlinkTitle: \"Check Shuffle Failures\"\nweight: 3\ntype: docs\ndescription: >\n  Check for logs indicating shuffle failures.\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nCluster {cluster_name} experienced shuffle failures. Potential root causes: {root_causes}\n\n### Success Reason\n\nNo shuffle failure logs found for cluster {cluster_name}\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataproc/check-shuffle-service-kill.md",
    "content": "---\ntitle: \"dataproc/Check Shuffle Service Kill\"\nlinkTitle: \"Check Shuffle Service Kill\"\nweight: 3\ntype: docs\ndescription: >\n  Verify the presence of shuffle service kill related logs.\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Step Type**: COMPOSITE STEP\n\n### Description\n\nNone\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataproc/check-stackdriver-setting.md",
    "content": "---\ntitle: \"dataproc/Check Stackdriver Setting\"\nlinkTitle: \"Check Stackdriver Setting\"\nweight: 3\ntype: docs\ndescription: >\n  Check if Stackdriver is enabled for the cluster.\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nIf the property is provided manually, It will be used if\n  the cluster does not exist.\n\n### Success Reason\n\nStackdriver: Enabled\n\n### Uncertain Reason\n\nCould not determine if the `dataproc:dataproc.logging.stackdriver.enable` property is enabled for cluster, possibly because the cluster was deleted. Subsequent checks requiring Cloud logging might be affected.\n\n### Uncertain Remediation\n\nEnable Cloud logging by creating a cluster with property dataproc:dataproc.logging.stackdriver.enable = true.\nRefer to the guide for more details:\n<https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/cluster-properties>\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataproc/check-sw-preemption.md",
    "content": "---\ntitle: \"dataproc/Check Sw Preemption\"\nlinkTitle: \"Check Sw Preemption\"\nweight: 3\ntype: docs\ndescription: >\n  Verify if secondary worker preemption has happened.\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Step Type**: COMPOSITE STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nFound logs messages related to secondary worker preemption on the cluster: {cluster_name}.\n\n### Failure Remediation\n\nThis error occurs when secondary worker nodes are preempted. By default, Dataproc secondary workers are preemptible VMs.\nTo resolve this issue:\n\n- Verify if the cluster uses secondary workers with preemptible instances.\n- Recreate the cluster configured with non-preemptible secondary workers to ensure secondary workers are not preempted [1].\n[1] <https://cloud.google.com/dataproc/docs/concepts/compute/secondary-vms#non-preemptible_workers>\n\n### Success Reason\n\nDidn't find logs messages related to secondary worker preemption on the cluster: {cluster_name}.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataproc/check-task-not-found.md",
    "content": "---\ntitle: \"dataproc/Check Task Not Found\"\nlinkTitle: \"Check Task Not Found\"\nweight: 3\ntype: docs\ndescription: >\n  Verify if dataproc job failed due to task not found.\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Step Type**: COMPOSITE STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nJob `{job_id}` failed due to a 'task not found' error. {additional_message}\n\n### Failure Remediation\n\nThis error typically indicates the associated cluster was terminated before job completion.\nReview automation workflows to ensure clusters remain active until all jobs are finalized.\n\n### Success Reason\n\nJob `{job_id}` did not fail due to a 'task not found' error. {additional_message}\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataproc/check-worker-disk-usage-issue.md",
    "content": "---\ntitle: \"dataproc/Check Worker Disk Usage Issue\"\nlinkTitle: \"Check Worker Disk Usage Issue\"\nweight: 3\ntype: docs\ndescription: >\n  Verify if worker disk usage issue has happened.\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Step Type**: COMPOSITE STEP\n\n### Description\n\nNone\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataproc/check-worker-oom.md",
    "content": "---\ntitle: \"dataproc/Check Worker Oom\"\nlinkTitle: \"Check Worker Oom\"\nweight: 3\ntype: docs\ndescription: >\n  Verify if OOM has happened on worker nodes.\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nFound logs messages related to Worker OOM on the cluster: {cluster_name}.\n\n### Failure Remediation\n\nThe logs indicate that worker OOM (out-of-memory) errors may have occurred on the cluster.\nTo resolve this issue:\n\n- Use a high-memory machine type for the worker nodes.\n- Repartition the data to avoid data skew.\n\nRefer to the troubleshooting guide [1] for more details.\nIf the issue persists, contact Google Cloud Support.\n[1] <https://cloud.google.com/dataproc/docs/support/troubleshoot-oom-errors#oom_solutions>\n\n### Success Reason\n\nDidn't find logs messages related to Worker OOM on the cluster: {cluster_name}.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataproc/check-yarn-runtime-exception.md",
    "content": "---\ntitle: \"dataproc/Check Yarn Runtime Exception\"\nlinkTitle: \"Check Yarn Runtime Exception\"\nweight: 3\ntype: docs\ndescription: >\n  Verify presence of CheckYarnRuntimeException logs.\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Step Type**: COMPOSITE STEP\n\n### Description\n\nNone\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataproc/cluster-creation-end.md",
    "content": "---\ntitle: \"dataproc/Cluster Creation End\"\nlinkTitle: \"Cluster Creation End\"\nweight: 3\ntype: docs\ndescription: >\n  The end step of the runbook.\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Step Type**: END\n\n### Description\n\nIt points out all the failed steps to the user.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataproc/cluster-creation-quota.md",
    "content": "---\ntitle: \"dataproc/Cluster Creation Quota\"\nlinkTitle: \"Cluster Creation Quota\"\nweight: 3\ntype: docs\ndescription: >\n  Check for cluster creation errors due to insufficient quota\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataproc/cluster-creation-start.md",
    "content": "---\ntitle: \"dataproc/Cluster Creation Start\"\nlinkTitle: \"Cluster Creation Start\"\nweight: 3\ntype: docs\ndescription: >\n  Initiates diagnostics for SSH Cluster Creation issues.\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Step Type**: START\n\n### Description\n\nThis step interacts with the Dataproc API to get the cluster for investigation.\n  When the cluster is found and it is in `ERROR` state, the cluster details\n  are then used to set variables to be used by the subsequent child steps.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataproc/cluster-creation-stockout.md",
    "content": "---\ntitle: \"dataproc/Cluster Creation Stockout\"\nlinkTitle: \"Cluster Creation Stockout\"\nweight: 3\ntype: docs\ndescription: >\n  Check for cluster creation due to stockout\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataproc/cluster-details-dependency-gateway.md",
    "content": "---\ntitle: \"dataproc/Cluster Details Dependency Gateway\"\nlinkTitle: \"Cluster Details Dependency Gateway\"\nweight: 3\ntype: docs\ndescription: >\n  Decision point for child steps that require cluster details and those that dont.\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Step Type**: GATEWAY\n\n### Description\n\nUses cluster details from the Dataproc API set in the start step to reduce scope of\n  errors from invalid input\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataproc/cluster-details.md",
    "content": "---\ntitle: \"dataproc/Cluster Details\"\nlinkTitle: \"Cluster Details\"\nweight: 3\ntype: docs\ndescription: >\n  Gathers cluster parameters needed for further investigation.\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nAdditional parameters are needed for next steps. If values are provided\n  manually they will be used instead of values gathered here.\n\n### Success Reason\n\nStackdriver: Enabled\n\n### Uncertain Reason\n\nCould not determine if the `dataproc:dataproc.logging.stackdriver.enable` property is enabled for cluster, possibly because the cluster was deleted. Subsequent checks requiring Cloud logging might be affected.\n\n### Uncertain Remediation\n\nEnable Cloud logging by creating a cluster with property dataproc:dataproc.logging.stackdriver.enable = true.\nRefer to the guide for more details:\n<https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/cluster-properties>\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataproc/cluster-exists.md",
    "content": "---\ntitle: \"dataproc/Cluster Exists\"\nlinkTitle: \"Cluster Exists\"\nweight: 3\ntype: docs\ndescription: >\n  Prepares the parameters required for the dataproc/cluster-creation runbook.\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nEnsures both project_id and cluster_name parameters are available.\n\n### Failure Reason\n\nCluster {cluster_name} does not exist in project {project_id}\n\n### Failure Remediation\n\nCreate the cluster again and keep it in the ERROR state in the Dataproc UI, or manually provide additional parameters using the gcpdiag command:\n\n`gcpdiag runbook dataproc/cluster-creation -p cluster_name=CLUSTER_NAME -p cluster_uuid=CLUSTER_UUID -p network=NETWORK_URI -p subnetwork=SUBNETWORK_URI -p service_account=SERVICE_ACCOUNT -p internal_ip_only=True/False --project=PROJECT_ID`\n\nRefer to <https://gcpdiag.dev/runbook/diagnostic-trees/dataproc/> for guidance on specifying additional parameters.\n\n### Success Reason\n\nCluster {cluster_name} exists in project {project_id}\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataproc/cluster-in-error.md",
    "content": "---\ntitle: \"dataproc/Cluster In Error\"\nlinkTitle: \"Cluster In Error\"\nweight: 3\ntype: docs\ndescription: >\n  Verifies if the cluster is in Error state and gathers additional parameters.\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Step Type**: GATEWAY\n\n### Description\n\nThis investigation is needed to identify if the issue is related to cluster\n  creation. The issue happens only when the cluster is not able\n  to provision successfully and ends up in ERROR state.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataproc/data-proc-cluster-exists.md",
    "content": "---\ntitle: \"dataproc/Data Proc Cluster Exists\"\nlinkTitle: \"Data Proc Cluster Exists\"\nweight: 3\ntype: docs\ndescription: >\n  Verify if cluster exists in Dataproc UI.\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nThe cluster `{cluster_name}` does not exist in project `{project_id}`.\n\n### Failure Remediation\n\nVerify that the cluster has not been deleted.\n\n### Success Reason\n\nThe cluster `{cluster_name}` exists in project `{project_id}`.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataproc/internal-ip-gateway.md",
    "content": "---\ntitle: \"dataproc/Internal Ip Gateway\"\nlinkTitle: \"Internal Ip Gateway\"\nweight: 3\ntype: docs\ndescription: >\n  Check if the cluster is using internal IP only.\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Step Type**: GATEWAY\n\n### Description\n\nCheck if the Dataproc cluster that is isolated from the public internet\n  whose VM instances communicate over a private IP subnetwork (cluster VMs are\n  not assigned public IP addresses).\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataproc/job-details-dependency-gateway.md",
    "content": "---\ntitle: \"dataproc/Job Details Dependency Gateway\"\nlinkTitle: \"Job Details Dependency Gateway\"\nweight: 3\ntype: docs\ndescription: >\n  Decision point for child steps that require cluster details and those that dont.\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Step Type**: GATEWAY\n\n### Description\n\nUses cluster details from the Dataproc API set in the start step to reduce scope of\n  errors from invalid input\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataproc/job-exists.md",
    "content": "---\ntitle: \"dataproc/Job Exists\"\nlinkTitle: \"Job Exists\"\nweight: 3\ntype: docs\ndescription: >\n  Prepares the parameters required for the dataproc/spark_job_failures runbook.\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Step Type**: START\n\n### Description\n\nEnsures both project_id, region and job_id parameters are available.\n\n### Failure Reason\n\nThe job `{job_id}` does not exist in project `{project_id}`.\n\n### Failure Remediation\n\nVerify that the job ID and region are correct.\n\n### Success Reason\n\nThe job `{job_id}` exists in project `{project_id}`.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataproc/job-start.md",
    "content": "---\ntitle: \"dataproc/Job Start\"\nlinkTitle: \"Job Start\"\nweight: 3\ntype: docs\ndescription: >\n  Prepares the parameters required for the dataproc/spark_job_failures runbook.\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Step Type**: START\n\n### Description\n\nEnsures both project_id, region and job_id parameters are available.\n\n### Success Reason\n\nThe job `{job_id}` exists in project `{project_id}`.\n\n### Skipped Reason\n\nThe job `{job_id}` not found in project `{project_id}`.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataproc/service-account-exists.md",
    "content": "---\ntitle: \"dataproc/Service Account Exists\"\nlinkTitle: \"Service Account Exists\"\nweight: 3\ntype: docs\ndescription: >\n  Verify service account and permissions in Dataproc cluster project or another project.\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Step Type**: GATEWAY\n\n### Description\n\nDecides whether to check for service account roles\n  - in CROSS_PROJECT_ID, if specified by customer\n  - in PROJECT_ID\n\n### Failure Reason\n\nService Account {service_account} associated with Dataproc cluster was not found in project {project_id} or cross project {cross_project_id}.\n\n### Failure Remediation\n\nProvide the project where the service account resides using the `cross_project` parameter.\n\n### Uncertain Reason\n\nService Account {service_account} associated with Dataproc cluster was not found in project {project_id}. It is possible that the service account is in a different project.\n\n### Uncertain Remediation\n\nProvide the project where the service account resides using the `cross_project` parameter.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/dataproc/spark-job-end.md",
    "content": "---\ntitle: \"dataproc/Spark Job End\"\nlinkTitle: \"Spark Job End\"\nweight: 3\ntype: docs\ndescription: >\n  The end step of the runbook.\n---\n\n**Product**: [Cloud Dataproc](https://cloud.google.com/dataproc)\\\n**Step Type**: END\n\n### Description\n\nPoints out all the failed steps to the user.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/_index.md",
    "content": "---\ntitle: \"GCE\"\nlinkTitle: \"gce\"\ntype: docs\nweight: 2\n---\n\nAll steps available in gce\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/analysing-serial-logs-end.md",
    "content": "---\ntitle: \"gce/Analysing Serial Logs End\"\nlinkTitle: \"Analysing Serial Logs End\"\nweight: 3\ntype: docs\ndescription: >\n  Finalize Serial console Log Analysis.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: END\n\n### Description\n\nNone\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/check-live-migrations.md",
    "content": "---\ntitle: \"gce/Check Live Migrations\"\nlinkTitle: \"Check Live Migrations\"\nweight: 3\ntype: docs\ndescription: >\n  Checking if live migrations happened for the instance\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nLive migrations detected for the VM during mentioned period.\n\n### Failure Remediation\n\nSimulate the migration (move the VM to another host) using the guidance provided here:\n<https://cloud.google.com/compute/docs/instances/simulating-host-maintenance?hl=en#testingpolicies>\nVerify if the issue persists after simulation. If it does, contact Google Cloud Platform Support by creating a support case.\n\nNote: During live migration, VMs might experience a temporary decrease in performance (disk, CPU, memory, network). See the documentation for details:\n<https://cloud.google.com/compute/docs/instances/live-migration-process#how_does_the_live_migration_process_work>\n\n### Success Reason\n\nNo live migrations detected for the VM during mentioned period\n\n### Skipped Reason\n\nThere are no logs to examine !\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/check-serial-port-logging.md",
    "content": "---\ntitle: \"gce/Check Serial Port Logging\"\nlinkTitle: \"Check Serial Port Logging\"\nweight: 3\ntype: docs\ndescription: >\n  Checks if ops agent serial port logging\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: COMPOSITE STEP\n\n### Description\n\nVerifies Organization policy and VM configuration to issue serial port logging\n  to Stackdriver from Compute Engine VMs is feasible.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/cloud-init-checks.md",
    "content": "---\ntitle: \"gce/Cloud Init Checks\"\nlinkTitle: \"Cloud Init Checks\"\nweight: 3\ntype: docs\ndescription: >\n  Cloud init related checks\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: COMPOSITE STEP\n\n### Description\n\nNone\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/compute-cluster-manager-termination.md",
    "content": "---\ntitle: \"gce/Compute Cluster Manager Termination\"\nlinkTitle: \"Compute Cluster Manager Termination\"\nweight: 3\ntype: docs\ndescription: >\n  Investigate termination initiated by GCP GCE Compute Cluster Manager\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nGoogle's Compute Cluster Manager can terminate instances due to billing issues or other reasons.\n  This step investigates the root cause of the termination.\n\n### Failure Reason\n\nInstance {full_resource_path} was terminated by account {stop_account}.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/cpu-overcommitment-check.md",
    "content": "---\ntitle: \"gce/Cpu Overcommitment Check\"\nlinkTitle: \"Cpu Overcommitment Check\"\nweight: 3\ntype: docs\ndescription: >\n  Checking if CPU overcommited beyond threshold\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/disk-avg-io-latency-check.md",
    "content": "---\ntitle: \"gce/Disk Avg Io Latency Check\"\nlinkTitle: \"Disk Avg Io Latency Check\"\nweight: 3\ntype: docs\ndescription: >\n  Check Disk Avg IO Latency\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nThe performance of the disk '{disk_name}' is currently degraded due to high\nIO latency exceeding optimal thresholds. This may result in slower read/write\nspeeds and overall reduced performance.\n\n### Failure Remediation\n\nDisk I/O latency is the time it takes for a read or write operation to complete on a\ndisk.\nHigh disk I/O latency can significantly impact the performance of your applications\nand workloads running on the instance, leading to slow response times, increased\nprocessing time, and overall sluggishness.\n\n**Potential Bottlenecks**\n\n- Disk Type: To optimize disk performance, ensure your disk type is appropriate\nfor your workload and provides acceptable latency for your system architecture.\nChoosing the right disk type can significantly impact performance.\n<https://cloud.google.com/compute/docs/disks>\n\n- Workload: The nature of your workload also influences latency. Workloads with\nmany small, random I/O operations will generally have higher latency than those\nwith sequential I/O\n\n**Optimize Disk Usage**\n\n- Reduce I/O Operations: Optimize your applications and database queries to minimize\nthe number of disk I/O operations.\n- Increase I/O Request Size: Larger I/O requests can be more efficient than many small\nones. Consider adjusting your application or database settings to increase the I/O\nrequest size.\n- Caching: Implement caching mechanisms to reduce the need to access the disk for\nfrequently used data.\n\nChoose the Right Disk Type with lesser IO Latency - <https://cloud.google.com/compute/docs/disks>\n\nYou may also look into Optimizing persistent disk performance -\n<https://cloud.google.com/compute/docs/disks/optimizing-pd-performance>\n\nPlease don't hesitate to reach out to Google Cloud Support if issue is not resolved.\n\n### Success Reason\n\nInstance disk \"{disk_name}\"'s IO latency is within the optimal limits.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/disk-health-check.md",
    "content": "---\ntitle: \"gce/Disk Health Check\"\nlinkTitle: \"Disk Health Check\"\nweight: 3\ntype: docs\ndescription: >\n  Disk Health check\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nYou might experience slower/poor performance with your disk '{disk_name}' due to an\nongoing issue with our Compute Engine or Persistent Disk infrastructure. We're working\nto resolve this as quickly as possible.\n\n### Failure Remediation\n\nTo better understand the situation with your Compute Engine or Persistent Disks,\ncould you please take a look at the Google Cloud Status page:\n\n<https://status.cloud.google.com>\n\nThis page provides real-time updates on the health of Google Cloud services.\n\nAdditionally, it may be helpful to check the Service Health dashboard in your\nGoogle Cloud Console for any reported incidents:\n\n<https://console.cloud.google.com/servicehealth/incidents>\n\nIf you don't find any information about an ongoing issue related to your concern,\nplease don't hesitate to reach out to Google Cloud Support by creating a support case.\nThey'll be happy to investigate further and assist you.\n\n### Success Reason\n\nInstance disk \"{disk_name}\" is healthy.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/disk-iops-throughput-utilisation-checks.md",
    "content": "---\ntitle: \"gce/Disk Iops Throughput Utilisation Checks\"\nlinkTitle: \"Disk Iops Throughput Utilisation Checks\"\nweight: 3\ntype: docs\ndescription: >\n  Checking if the Disk IOPS/throughput usage is within optimal levels\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nDisk IOPS/Throughput usage is NOT within optimal limits\n\n### Failure Remediation\n\nThere can be multiple reasons which can cause Disk IOPS/Throughput usage to increase:\n\n- Application and GuestOS Operations - Unmanaged and untested application workloads can cause the high influx of IOs\nto the disk and cause IO operations to be queued, causing throttling at disk levels.\n\n- CPU Starvation - Small instances(with lesser CPUs) may not have enough CPU to serve all I/Os inflight.\n<https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-performance#cpu_and_memory_performance>\n\n- Network Throttling - High sent/received network traffic can cause network throttling, that can also impacts disk\noperations.\n<https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-performance#network_performance>\n\n- Insufficient Machine Resources - If your machine's IOPS and throughput limits are not enough to serve your workloads,\nthis can also cause CPU or Disk IOPS/throughput Starvation.\n<https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-performance#storage_performance>\n\nTo fix this issue:\n\n- Please optimize your application workloads.\n- If needed, please add more resources(CPU, Memory) to the VM.\n- Please optimize your Disk performance -\n<https://cloud.google.com/compute/docs/disks/optimizing-pd-performance>\n- If needed, please change your disk type to get better Disk IOPS/throughput limits -\n<https://cloud.google.com/compute/docs/disks/modify-persistent-disk#disk_type>\n\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/gce-firewall-allows-ssh.md",
    "content": "---\ntitle: \"gce/Gce Firewall Allows Ssh\"\nlinkTitle: \"Gce Firewall Allows Ssh\"\nweight: 3\ntype: docs\ndescription: >\n  Assesses the VPC network configuration to ensure it allows SSH traffic to the target VM.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: GATEWAY\n\n### Description\n\nThis diagnostic step checks for ingress firewall rules that permit SSH traffic based on\n  the operational context, such as the use of IAP for SSH or direct access from a specified\n  source IP. It helps identify network configurations that might block SSH connections.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/gce-iam-policy-check.md",
    "content": "---\ntitle: \"gce/Gce Iam Policy Check\"\nlinkTitle: \"Gce Iam Policy Check\"\nweight: 3\ntype: docs\ndescription: >\n  Checks IAM policies by calling IamPolicyCheck with support for gce/constants.py.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nThis step is a wrapper around iam.generalized_steps.IamPolicyCheck that adds\n  support for resolving 'roles' or 'permissions' parameters from gce/constants.py\n  if they are prefixed with 'ref:'. It also supports ';;' delimited strings for\n  roles or permissions lists.\n\n  Parameters retrieved via `op.get()`:\n    project_id(str): Project ID to check policy against.\n    principal(str): The principal to check (e.g., user:x@y.com,\n      serviceAccount:a@b.com).\n    roles(Optional[str]): ';;' separated list of roles or 'ref:CONSTANT' to check.\n    permissions(Optional[str]): ';;' separated list of permissions or\n      'ref:CONSTANT' to check.\n    require_all(bool): If True, all roles/permissions must be present.\n      If False (default), at least one must be present.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/gce-log-check.md",
    "content": "---\ntitle: \"gce/Gce Log Check\"\nlinkTitle: \"Gce Log Check\"\nweight: 3\ntype: docs\ndescription: >\n  Executes a Cloud Logging query and checks results against optional patterns.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nThis step queries Cloud Logging using the provided filter string by calling\n  logs.generalized_steps.CheckIssueLogEntry.\n  See CheckIssueLogEntry for logic on FAILED/UNCERTAIN status.\n\n  Parameters retrieved via `op.get()`:\n    project_id(str): Project ID to search for filter.\n    filter_str(str): Filter in Cloud Logging query language:\n      https://cloud.google.com/logging/docs/view/query-library.\n    issue_pattern(Optional[str]): Semicolon-separated ';;' list of regex\n      patterns to search for in `protoPayload.status.message`. If prefixed\n      with 'ref:', it resolves to a list in `gce/constants.py`.\n      If provided, logs matching pattern will result in FAILED status.\n    resource_name(Optional[str]): Resource identifier for template messages.\n    template(Optional[str]): Template name, defaults to\n      'logging::gce_log'.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/gce-vpc-connectivity-check.md",
    "content": "---\ntitle: \"gce/Gce Vpc Connectivity Check\"\nlinkTitle: \"Gce Vpc Connectivity Check\"\nweight: 3\ntype: docs\ndescription: >\n  Checks if ingress or egress traffic is allowed to a GCE Instance from a specified source IP.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nEvaluates VPC firewall rules to verify if a GCE Instance permits ingress or egress traffic from a\n  designated source IP through a specified port and protocol.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/gcp-ssh-permissions.md",
    "content": "---\ntitle: \"gce/Gcp Ssh Permissions\"\nlinkTitle: \"Gcp Ssh Permissions\"\nweight: 3\ntype: docs\ndescription: >\n  Evaluates the user's GCP permissions against the requirements for accessing a VM via SSH.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: COMPOSITE STEP\n\n### Description\n\nThis step checks if the user has the necessary project-level roles\n  for both traditional SSH access and OS Login methods. It does not consider permissions inherited\n  from higher-level resources such as folders, organizations, or groups.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/guest-os-issued-shutdown.md",
    "content": "---\ntitle: \"gce/Guest Os Issued Shutdown\"\nlinkTitle: \"Guest Os Issued Shutdown\"\nweight: 3\ntype: docs\ndescription: >\n  Investigate shutdowns issued from within the guest OS\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nThis step investigates whether the VM termination was initiated by a user or a system fault\n  within the guest OS. It provides insights into the root cause of the termination.\n\n### Failure Reason\n\n{status_message}\n\n### Failure Remediation\n\nInstance {full_resource_path} shutdown was initiated from the operating system.\n\nThis is usually caused by a sudoer posix user issuing a shutdown or reboot command\nReview guest shell history to determine who or what application triggered the shutdown.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/guestos-bootup-start.md",
    "content": "---\ntitle: \"gce/Guestos Bootup Start\"\nlinkTitle: \"Guestos Bootup Start\"\nweight: 3\ntype: docs\ndescription: >\n  Fetches VM details and validates the instance state.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: START\n\n### Description\n\nThis step retrieves the VM instance details based on the provided project ID,\n  zone, and instance name. It checks if the VM is running and updates the\n  instance ID or name if missing. Additionally, it performs sanity checks on\n  the provided serial console log files to ensure they are valid plain text files.\n\n### Failure Reason\n\nThe GCE Instance {full_resource_path} is in {status} state.\n\n### Failure Remediation\n\nRestart VM {full_resource_path} and ensure VM lifecycle transitions from {status} to RUNNING.\n\nConsult the following documentation:\n\n- Restarting a compute instance:\n  <https://cloud.google.com/compute/docs/instances/stop-start-instance#restart-vm>\n- Troubleshooting VM startup issues:\n  <https://cloud.google.com/compute/docs/troubleshooting/vm-startup#identify_the_reason_why_the_boot_disk_isnt_booting>\n\n### Success Reason\n\nThe GCE Instance {full_resource_path} is in {status} state.\n\n### Skipped Reason\n\nCould not validate VM lifecycle for GCE Instance {full_resource_path}.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/high-vm-cpu-utilization.md",
    "content": "---\ntitle: \"gce/High Vm Cpu Utilization\"\nlinkTitle: \"High Vm Cpu Utilization\"\nweight: 3\ntype: docs\ndescription: >\n  Evaluates the CPU of a VM for high utilization that might indicate performance issues.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nThis step determines whether the CPU utilization of the VM exceeds a predefined threshold,\n  indicating potential performance degradation. It utilizes metrics from the Ops Agent if installed,\n  or hypervisor-visible metrics as a fallback, to accurately assess CPU performance and identify any\n  issues requiring attention.\n\n### Failure Reason\n\nCPU utilization on this VM has surpassed recommended operational levels,\nwhich may affect its performance and SSH connectivity.\n\n### Failure Remediation\n\nExcessive CPU usage can lead to performance bottlenecks. Resizing the VM to a machine type with higher CPU capabilities may resolve the issue.\n\nConsult the following documentation for guidance:\n\n- Stopping a VM: <https://cloud.google.com/compute/docs/instances/stop-start-instance>\n- Resizing a VM: <https://cloud.google.com/compute/docs/instances/changing-machine-type-of-stopped-instance#gcloud>\n\nAdditionally, analyze Compute Engine observability metrics to pinpoint high-usage processes:\n\n- Accessing VM observability metrics:\n  <https://cloud.google.com/compute/docs/instances/observe-monitor-vms#access_vm_observability_metrics>\n- Analyzing process utilization:\n  <https://cloud.google.com/compute/docs/instances/observe-monitor-vms#process_utilization>\n\nIf SSH is unavailable, connect via the serial console to stop offending processes:\n<https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-using-serial-console>\n\n### Success Reason\n\nThe Compute Engine VM {full_resource_path},\nhas CPU utilization within the optimal range.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/high-vm-disk-utilization.md",
    "content": "---\ntitle: \"gce/High Vm Disk Utilization\"\nlinkTitle: \"High Vm Disk Utilization\"\nweight: 3\ntype: docs\ndescription: >\n  Assesses disk utilization on a VM, aiming to identify high usage that could impact performance.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nThis step leverages monitoring data if the Ops Agent is exporting disk usage metrics.\n  Alternatively, it scans the VM's serial port output for common disk space error messages.\n  This approach ensures comprehensive coverage across different scenarios,\n  including VMs without metrics data.\n\n### Failure Reason\n\nDisk utilization on this VM's boot disk is critically high,\npotentially affecting application performance.\n\n### Failure Remediation\n\nTo mitigate high disk usage, consider expanding the VM's boot disk capacity.\nThis action can help avoid performance issues and ensure smoother SSH connections.\n\nConsult the following guide to increase disk size:\n<https://cloud.google.com/compute/docs/disks/resize-persistent-disk#increase_the_size_of_a_disk>\n\n### Success Reason\n\nThe boot disk space usage for the Compute Engine VM {full_resource_path}, is within optimal levels.\n\n### Skipped Reason\n\nNo Google Cloud Ops Agent installed on the VM, making it difficult to retrieve disk utilization data via metrics.\nFalling back to checking for filesystem utilization-related messages in the serial logs.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/high-vm-memory-utilization.md",
    "content": "---\ntitle: \"gce/High Vm Memory Utilization\"\nlinkTitle: \"High Vm Memory Utilization\"\nweight: 3\ntype: docs\ndescription: >\n  Diagnoses high memory utilization issues in a Compute Engine VM.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nThis step evaluates memory usage through available monitoring data or, as a fallback, scans serial\n  logs for Out of Memory (OOM) indicators. It distinguishes between VMs which has exported metrics\n  and those without, and employs a different strategy for 'e2' machine types to accurately assess\n  memory utilization.\n\n### Failure Reason\n\nMemory utilization on this VM has reached levels that may compromise its VM application performance.\n\n### Failure Remediation\n\nElevated memory usage can result in slow, unresponsive, or terminated applications.\nEnhance the VM's memory capacity by changing to a machine type with more memory.\n\nConsult the following documentation for guidance:\n\n- Changing machine type:\n  <https://cloud.google.com/compute/docs/instances/changing-machine-type-of-stopped-instance#gcloud>\n\nAdditionally, analyze Compute Engine observability metrics to pinpoint high-usage processes:\n<https://cloud.google.com/compute/docs/instances/observe-monitor-vms#memory_utilization>\n\nIf SSH is unavailable, connect via the serial console to mitigate the issue:\n<https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-using-serial-console>\n\n### Success Reason\n\nMemory utilization on this VM is within optimal range.\n\n### Skipped Reason\n\nSerial logs are not available for examination.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/host-error.md",
    "content": "---\ntitle: \"gce/Host Error\"\nlinkTitle: \"Host Error\"\nweight: 3\ntype: docs\ndescription: >\n  Investigate the cause of a host error\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nHost errors should be rare. This step provides insights into the root cause of the issue.\n\n### Failure Reason\n\n{status_message}\n\n### Failure Remediation\n\nA host error (compute.instances.hostError) means that there was a hardware or software issue\non the physical machine hosting your VM that caused your VM to crash. A host error which\ninvolves total hardware/software failure might prevent a live migration of your VM. If\nyour VM is set to automatically restart, which is the default setting, Google restarts your\nVM, typically within three minutes from the time the error was detected. Depending on the\nissue, the restart might take up to 5.5 minutes.\n\nNote that this is a known behavior that cannot be completely eliminated and should be planned\nfor while designing your systems on GCE.\n\nMitigation Strategies\nThe following mitigation strategies are implemented by Google to prevent & minimize occurrence\nof such events:\n\nLive Migrations. Live migration lets Google Cloud perform maintenance without interrupting a\nworkload, rebooting a VM, or modifying any of the VM's properties, such as IP addresses,\nmetadata, block storage data, application state, and network settings. Additionally our\nsystems proactively monitor for hardware or software failure symptoms on hosts. If a potential\nfailure is detected, we initiate live migration to seamlessly relocate the VM and prevent\ntermination. A 'hostError' will only occur in the rare instance where the failures prevent\nsuccessful live migration.\n\nGoogle reliability engineering. We are continuously monitoring the health of GCP hosts and\ntaking steps to prevent errors from occurring, while using a variety of HA techniques to\ndetect and mitigate hardware failures, such as using redundant components and monitoring for\nsigns of failure.\n\nSoftware Patching: We are continuously implementing a rigorous software patching schedule to\nensure the timely application of security updates and bug fixes. This proactive approach is\nmitigating the risk of software defects, and bugs that could lead to operational instability.\n\nRCA\nKindly note:\nRCA by Google for Host errors is not common practice. Host errors can happen occasionally and\ntypically do not undergo individual RCA. Should you request an RCA for a host error, you must\nprovide a compelling business justification for why further details are necessary.\n\nAny root cause provided will be limited to if the issue was hardware or software related and\nif it was related to a single host or a rack.\n\nReview Logs and Create Log-Based Metrics:\nFor tracking HostErrors: To proactively track host errors within your projects, create a\nlog-based metric dashboard. This will provide a visual representation of error trends.\nFor customer-facing evidence: If you need root cause information as evidence for your own\ncustomers, utilize Cloud Logging to query and export relevant logs. These logs provide\ngranular error messages and timestamps.\n\nFor timely response to errors: To ensure prompt reaction to critical host errors,\nconfigure a log-based alert.\n\nAlerting (2)\n\nFollow the Instructions here using the below query to build a log based alert on your project\nto get notified in case of a hostError.\n\nMake sure to include labels with the information you need exposed on the notification.\n\nresource.type=\"gce_instance\"\nprotoPayload.serviceName=\"compute.googleapis.com\"\n(protoPayload.methodName:\"compute.instances.hostError\" OR\noperation.producer:\"compute.instances.hostError\")\nlog_id(\"cloudaudit.googleapis.com/system_event\")\n\nResources:\n[1]\n<https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-reboots#:~:text=Getting%20support.-,Method,compute.instances.hostError,-System%20event>\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/instance-property-check.md",
    "content": "---\ntitle: \"gce/Instance Property Check\"\nlinkTitle: \"Instance Property Check\"\nweight: 3\ntype: docs\ndescription: >\n  Checks that a Instance property meets a given condition.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nThis step fetches a VM instance and checks if a specified property\n  meets the condition defined by an expected value and an operator.\n  It supports nested properties via getattr and various operators including\n  'eq', 'ne', 'lt', 'le', 'gt', 'ge', 'contains', and 'matches'.\n\n  Parameters:\n  - property_path: The path of the property to check on the Instance object\n    (e.g., 'status', 'boot_disk_licenses').\n  - expected_value: The value to compare against. Supports 'ref:' prefix to\n    resolve constants from gce/constants.py (e.g., 'ref:RHEL_PATTERN').\n  - operator: The comparison operator to use. Supported: 'eq', 'ne',\n    'lt', 'le', 'gt', 'ge', 'contains', 'matches'. Default is 'eq'.\n\n  Operator Notes:\n  - `contains`: Checks for exact membership in lists (e.g., 'item' in ['item'])\n    or substring in strings.\n  - `matches`: Treats `expected_value` as a regex and checks if the pattern is\n    found in the string or in *any* element of a list. Useful for partial\n    matches (e.g., pattern 'sles' matching license 'sles-12-sap').\n\n### Failure Reason\n\nInstance {instance_name} property '{property_path}' with value '{actual_value}' does not meet condition: {operator} '{expected_value}'.\n\n### Failure Remediation\n\nEnsure that property '{property_path}' for instance {instance_name} is configured to meet the condition: {operator} '{expected_value}'.\n\n### Success Reason\n\nInstance  property '{property_path}' with value '{actual_value}' meets condition: {operator} '{expected_value}'.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/investigate-guest-os-issued-shutdown.md",
    "content": "---\ntitle: \"gce/Investigate Guest Os Issued Shutdown\"\nlinkTitle: \"Investigate Guest Os Issued Shutdown\"\nweight: 3\ntype: docs\ndescription: >\n  Analyse Guest OS related logs which would explain a shutdown\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nIt analyzes log entries to identify whether the termination was normal or abnormal\n    from a guest os perspective. Was the shutdown intentially issued by a user or a system fault\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/investigate-logging-monitoring.md",
    "content": "---\ntitle: \"gce/Investigate Logging Monitoring\"\nlinkTitle: \"Investigate Logging Monitoring\"\nweight: 3\ntype: docs\ndescription: >\n  A Decision Point for to check Logging and/or Monitoring related issues\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: GATEWAY\n\n### Description\n\nDecides whether to check for ops agent\n   - logging related issues if CHECK_LOGGING is set to true\n   - monitoring related issues if CHECK_MONITORING is set to true\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/investigate-vm-creation-log-failure.md",
    "content": "---\ntitle: \"gce/Investigate Vm Creation Log Failure\"\nlinkTitle: \"Investigate Vm Creation Log Failure\"\nweight: 3\ntype: docs\ndescription: >\n  Investigate VM creation failure logs.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: GATEWAY\n\n### Description\n\nThis step queries logs to identify the root cause of VM creation failures,\n    such as quota issues, permission errors, or resource conflicts.\n\n### Failure Reason\n\n{error_message}\n\n### Failure Remediation\n\nThe VM creation process failed because the VM `{instance_name}` already exists in zone `{zone}` within project `{project_id}`. Delete the existing VM or choose a different name for the new VM.\n\n\n### Failure Reason [Alternative 2]\n\n{error_message}\n\n### Failure Remediation [Alternative 2]\n\nGrant the user or service account attempting the VM creation the required permissions to create a VM instance.\nConsult the following guide for details on required permissions:\n<https://cloud.google.com/compute/docs/instances/create-start-instance#expandable-1>\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/linux-guest-os-checks.md",
    "content": "---\ntitle: \"gce/Linux Guest Os Checks\"\nlinkTitle: \"Linux Guest Os Checks\"\nweight: 3\ntype: docs\ndescription: >\n  Examines Linux-based guest OS's serial log entries for guest os level issues.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: COMPOSITE STEP\n\n### Description\n\nThis composite step scrutinizes the VM's serial logs for patterns indicative of kernel panics,\n  problems with the SSH daemon, and blocks by SSH Guard - each of which could signify underlying\n  issues affecting the VM's stability and accessibility. By identifying these specific patterns,\n  the step aims to isolate common Linux OS and application issues, facilitating targeted\n  troubleshooting.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/managed-instance-group-recreation.md",
    "content": "---\ntitle: \"gce/Managed Instance Group Recreation\"\nlinkTitle: \"Managed Instance Group Recreation\"\nweight: 3\ntype: docs\ndescription: >\n  Investigate if an instance recreation by MIG was normal\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nDetermines if the instance was recreated as part of a normal Managed Instance Group (MIG) process.\n\n### Failure Reason\n\n{status_message}\n\n### Failure Remediation\n\nInstance \"{full_resource_path}\" was terminated as part of a normal Managed Instance Group recreation process\nand a replacement instance has been created after this termination. No action required.\n[1] <https://cloud.google.com/compute/docs/instance-groups/working-with-managed-instances#autoscaling>\n[2] <https://cloud.google.com/compute/docs/autoscaler>\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/mig-autoscaling-policy-check.md",
    "content": "---\ntitle: \"gce/Mig Autoscaling Policy Check\"\nlinkTitle: \"Mig Autoscaling Policy Check\"\nweight: 3\ntype: docs\ndescription: >\n  Checks MIG autoscaling policy attributes.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nThis step performs checks on attributes within a Managed Instance Group (MIG)'s\n  autoscaling policy. It requires both 'property_path' and 'expected_value' to be\n  specified.\n\n  The MIG can be identified either by providing 'instance_name' and 'zone' (the\n  step will find the MIG associated with the instance) or by providing 'mig_name'\n  and 'location' (zone or region).\n\n  Parameters:\n  - property_path: The nested path of the property to check within the MIG or\n    autoscaler resource (e.g., 'autoscalingPolicy.mode'). If the path starts\n    with 'autoscalingPolicy', the autoscaler resource is queried.\n  - expected_value: The value to compare against. Supports 'ref:' prefix to\n    resolve constants from gce/constants.py (e.g., 'ref:AUTOSCALING_MODE_ON').\n  - operator: The comparison operator to use. Supported: 'eq' (default), 'ne',\n    'lt', 'le', 'gt', 'ge'.\n\n### Failure Reason\n\nMIG {mig_name} property '{property_path}' with value '{actual_value}' does not meet condition: {operator} '{expected_value}'.\n\n### Failure Remediation\n\nReview the autoscaling policy for MIG {mig_name} and ensure it meets the required configuration.\nSee: <https://cloud.google.com/compute/docs/reference/rest/v1/instanceGroupManagers>\n\n### Success Reason\n\nMIG {mig_name} property '{property_path}' with value '{actual_value}' meets condition: {operator} '{expected_value}'.\n\n### Skipped Reason\n\nMIG could not be determined or found.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/multiple-termination-check.md",
    "content": "---\ntitle: \"gce/Multiple Termination Check\"\nlinkTitle: \"Multiple Termination Check\"\nweight: 3\ntype: docs\ndescription: >\n  IInvestigates multiple VM terminations within a given project to determine the causes.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nSimilar to SingleTerminationCheck, it analyzes log entries but for multiple instances,\n    focusing on the first occurring termination per instance to identify normal or abnormal\n    patterns.\n\n    Prepares a Root Cause Analysis (RCA) of the terminations based on the gathered details.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/number-of-terminations.md",
    "content": "---\ntitle: \"gce/Number Of Terminations\"\nlinkTitle: \"Number Of Terminations\"\nweight: 3\ntype: docs\ndescription: >\n  A decision point that determines the scope of VM terminations to investigation.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: GATEWAY\n\n### Description\n\nThis class decides whether an investigation should focus on a single termination or\n    multiple terminations. It makes this determination based on the operational parameters\n    provided to it, specifically checking if the investigation is scoped to a single virtual\n    machine (VM).\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/ops-agent-end.md",
    "content": "---\ntitle: \"gce/Ops Agent End\"\nlinkTitle: \"Ops Agent End\"\nweight: 3\ntype: docs\ndescription: >\n  Finalizes the OpsAgent checks.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: END\n\n### Description\n\nChecks if logs or metrics are currently present after diagnosing the issue.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/ops-agent-start.md",
    "content": "---\ntitle: \"gce/Ops Agent Start\"\nlinkTitle: \"Ops Agent Start\"\nweight: 3\ntype: docs\ndescription: >\n  Prepares the parameters required for the gce/ops-agent runbook.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: START\n\n### Description\n\nLooks up the GCE resource running the ops agent binary\n  Ensures both instance_id and instance_name parameters are available.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/os-login-status-check.md",
    "content": "---\ntitle: \"gce/Os Login Status Check\"\nlinkTitle: \"Os Login Status Check\"\nweight: 3\ntype: docs\ndescription: >\n  Checks for OS Login setup and and non OS login setup on a VM to guide further diagnostics.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: GATEWAY\n\n### Description\n\nIf using OS Login investigates OS Login related configuration and permission and if not\n  Checks Keybased Configuration.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/posix-user-has-valid-ssh-key-check.md",
    "content": "---\ntitle: \"gce/Posix User Has Valid Ssh Key Check\"\nlinkTitle: \"Posix User Has Valid Ssh Key Check\"\nweight: 3\ntype: docs\ndescription: >\n  Verifies the existence of a valid SSH key for the specified local Proxy user on a (VM).\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nEnsures that the local user has at least one valid SSH key configured in the VM's metadata, which\n  is essential for secure SSH access. The check is performed against the SSH keys stored within\n  the VM's metadata. A successful verification indicates that the user is likely able to SSH into\n  the VM using their key.\n\n### Failure Reason\n\nThe local user \"{local_user}\" lacks at least one valid SSH key for VM: \"{full_resource_path}\".\n\n### Failure Remediation\n\nEnsure \"{local_user}\" has a valid SSH key by following the guide:\n<https://cloud.google.com/compute/docs/connect/add-ssh-keys#add_ssh_keys_to_instance_metadata>\n\n### Success Reason\n\nThe local user \"{local_user}\" is confirmed to have at least one valid SSH key\nconfigured on the GCE Instance: \"{full_resource_path}\".\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/preemptible-instance.md",
    "content": "---\ntitle: \"gce/Preemptible Instance\"\nlinkTitle: \"Preemptible Instance\"\nweight: 3\ntype: docs\ndescription: >\n  Investigate the cause of a preemptible VM termination\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nPreemptible VMs are short-lived instances. This step investigates normal or abnormal\n  circumstances leading to termination.\n\n### Failure Reason\n\n{status_message}\n\n### Failure Remediation\n\nInstance {full_resource_path} were preempted as part of a spot VM normal process.\n\nSpot VMs have significant discounts, but Compute Engine might preemptively stop or delete\n(preempt) Spot VMs to reclaim capacity at any time.\n\nRead more on here the preemption process occurs here [1][2]\n\nThis is a normal process and no action is required.\n\n[1] <https://cloud.google.com/compute/docs/instances/spot#preemption>\n[2] <https://cloud.google.com/compute/docs/instances/spot>\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/scheduled-stop-policy.md",
    "content": "---\ntitle: \"gce/Scheduled Stop Policy\"\nlinkTitle: \"Scheduled Stop Policy\"\nweight: 3\ntype: docs\ndescription: >\n  Investigate the cause of a scheduled stop policy\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nThis step investigates whether the VM termination was initiated by a scheduled stop policy.\n\n### Failure Reason\n\nInstance {full_resource_path} was terminated by account {stop_account} due to a scheduled stop policy.\n\n### Failure Remediation\n\nNo action required. VM is currently running.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/serial-log-analyzer-start.md",
    "content": "---\ntitle: \"gce/Serial Log Analyzer Start\"\nlinkTitle: \"Serial Log Analyzer Start\"\nweight: 3\ntype: docs\ndescription: >\n  Fetching VM details.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: START\n\n### Description\n\nNone\n\n### Failure Reason\n\nThe GCE Instance {full_resource_path} is in {status} state.\n\n### Failure Remediation\n\nRestart VM {full_resource_path} and ensure VM lifecycle transitions from {status} to RUNNING.\n\nConsult the following documentation:\n\n- Restarting a compute instance:\n  <https://cloud.google.com/compute/docs/instances/stop-start-instance#restart-vm>\n- Troubleshooting VM startup issues:\n  <https://cloud.google.com/compute/docs/troubleshooting/vm-startup#identify_the_reason_why_the_boot_disk_isnt_booting>\n\n### Success Reason\n\nThe GCE Instance {full_resource_path} is in {status} state.\n\n### Skipped Reason\n\nCould not validate VM lifecycle for GCE Instance {full_resource_path}.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/shielded-vm-integrity-failure.md",
    "content": "---\ntitle: \"gce/Shielded Vm Integrity Failure\"\nlinkTitle: \"Shielded Vm Integrity Failure\"\nweight: 3\ntype: docs\ndescription: >\n  Investigate the cause of a shielded VM integrity failure\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nShielded VMs are hardened VMs that are protected against tampering and boot-time attacks. This\n  step investigates the root cause of the integrity failure.\n\n### Failure Reason\n\nInstance {full_resource_path} was terminated by account {stop_account} due to a scheduled stop policy.\n\n### Failure Remediation\n\nNo action required. VM is currently running.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/single-termination-check.md",
    "content": "---\ntitle: \"gce/Single Termination Check\"\nlinkTitle: \"Single Termination Check\"\nweight: 3\ntype: docs\ndescription: >\n  Investigates the cause of a single VM termination.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nIt analyzes log entries to identify whether the termination was normal or abnormal\n    and prepares a Root Cause Analysis (RCA) based on the findings.\n\n    The investigation focuses on the first occurring termination, assuming that any subsequent\n    terminations are inconsequential\n\n### Success Reason\n\nNo GCE Instance was terminated between {start_time} and {end_time}\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/ssh-end.md",
    "content": "---\ntitle: \"gce/Ssh End\"\nlinkTitle: \"Ssh End\"\nweight: 3\ntype: docs\ndescription: >\n  Concludes the SSH diagnostics process, offering guidance based on the user's feedback.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: END\n\n### Description\n\nIf SSH issues persist, it directs the user to helpful resources and\n  suggests contacting support with a detailed report\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/ssh-in-browser-check.md",
    "content": "---\ntitle: \"gce/Ssh In Browser Check\"\nlinkTitle: \"Ssh In Browser Check\"\nweight: 3\ntype: docs\ndescription: >\n  Investigate SSH in Browser components\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: COMPOSITE STEP\n\n### Description\n\nSSH can be done via SSH in Browser feature, if desired by user,\n  check components required for SSH in browser to work correctly\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/ssh-start.md",
    "content": "---\ntitle: \"gce/Ssh Start\"\nlinkTitle: \"Ssh Start\"\nweight: 3\ntype: docs\ndescription: >\n  Initiates diagnostics for SSH connectivity issues.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: START\n\n### Description\n\nThis step prepares the environment for SSH diagnostics by gathering necessary\n  information about the target VM. It verifies the existence of the VM, checks\n  user-supplied parameters for validity, and sets up initial conditions for further\n  diagnostic steps.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/stop-operation-gateway.md",
    "content": "---\ntitle: \"gce/Stop Operation Gateway\"\nlinkTitle: \"Stop Operation Gateway\"\nweight: 3\ntype: docs\ndescription: >\n  Determine the kind of stop operation\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: GATEWAY\n\n### Description\n\nStop operations can be caused by a user, customer-owned service account, or Google workflows\n  due to billing issues or resource policies.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/terminate-on-host-maintenance.md",
    "content": "---\ntitle: \"gce/Terminate On Host Maintenance\"\nlinkTitle: \"Terminate On Host Maintenance\"\nweight: 3\ntype: docs\ndescription: >\n  Investigate the cause of termination related to host maintenance\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nTermination on host maintenance is normal behavior. This step verifies if it was expected.\n  This will typically happen during a failed live migration.\n\n### Failure Reason\n\n{status_message}\n\n### Failure Remediation\n\nInstance {full_resource_path} maintenance policy is set to TERMINATE, Compute Engine\nstops your VM when there is a maintenance event where Google must move your VM to another host.\n\nIf you want to change your VM's onHostMaintenance policy to restart automatically\nor live migrate [1]. Read more about Host Events [2] and how to set your termination policies[3].\n\n[1] <https://cloud.google.com/compute/docs/instances/live-migration-process>\n[2] <https://cloud.google.com/compute/docs/instances/setting-vm-host-options>\n[3] <https://cloud.google.com/compute/docs/instances/host-maintenance-overview>\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/termination-operation-type.md",
    "content": "---\ntitle: \"gce/Termination Operation Type\"\nlinkTitle: \"Termination Operation Type\"\nweight: 3\ntype: docs\ndescription: >\n  Determine the type of termination\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: GATEWAY\n\n### Description\n\nAnalyzes log entries to identify whether the termination was normal or abnormal\n  from a guest OS perspective. Was the shutdown intentionally issued by a user or a system fault?\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/user-or-service-account-initiated-stop.md",
    "content": "---\ntitle: \"gce/User Or Service Account Initiated Stop\"\nlinkTitle: \"User Or Service Account Initiated Stop\"\nweight: 3\ntype: docs\ndescription: >\n  Investigate the cause of a user-initiated VM termination\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nThis step investigates whether the VM termination was initiated by a user or a system fault.\n\n### Failure Reason\n\nAccount {stop_account} stopped the VM.\n\n### Failure Remediation\n\nInstance {full_resource_path} was intentionally stopped by account {stop_account}.\n\nSimply restart the VM when safe to do so by following [1]\n\n[1] <https://cloud.google.com/compute/docs/instances/stop-start-instance#restart-vm>\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/vm-duplicate-ssh-keys-check.md",
    "content": "---\ntitle: \"gce/Vm Duplicate Ssh Keys Check\"\nlinkTitle: \"Vm Duplicate Ssh Keys Check\"\nweight: 3\ntype: docs\ndescription: >\n  Check if there are duplicate ssh keys in VM metadata.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nVM {instance_name} has {count} duplicate SSH key(s) in its metadata: {keys}\n\n### Failure Remediation\n\nRemove duplicate SSH keys from the instance or project metadata to avoid potential SSH issues and improve security hygiene.\n\n### Success Reason\n\nNo duplicate SSH keys were found in metadata for VM {instance_name}.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/vm-guest-os-type.md",
    "content": "---\ntitle: \"gce/Vm Guest Os Type\"\nlinkTitle: \"Vm Guest Os Type\"\nweight: 3\ntype: docs\ndescription: >\n  Distinguishes between Windows and Linux operating systems on a VM to guide further diagnostics.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: GATEWAY\n\n### Description\n\nBased on the OS type, it directs the diagnostic process towards OS-specific checks,\n  ensuring relevancy and efficiency in troubleshooting efforts.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/vm-has-a-service-account.md",
    "content": "---\ntitle: \"gce/Vm Has A Service Account\"\nlinkTitle: \"Vm Has A Service Account\"\nweight: 3\ntype: docs\ndescription: >\n  Verifies the existence of a service account for the Ops Agent to use.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nThis investigation only happens from the perspective googleapis and\n  user provided input. We don't look inside the VM for cases like\n  GOOGLE_APPLICATION_CREDENTIALS. User will have to know and specify that if\n  They are using the application\n\n### Failure Reason\n\nThe Ops Agent on instance {full_resource_path} is not configured with a service account for exporting logs and metrics.\n\n### Failure Remediation\n\nAttach an active service account to the GCE Instance {full_resource_path}.\nConsult the following documentation for guidance:\n\n- Attaching or changing a service account:\n  <https://cloud.google.com/compute/docs/instances/change-service-account#changeserviceaccountandscopes>\n- Authorizing the Ops Agent:\n  <https://cloud.google.com/stackdriver/docs/solutions/agents/ops-agent/authorization#authorize_with_an_attached_service_account>\n\n### Success Reason\n\nThe Ops Agent on instance {full_resource_path} is configured with service account {sa} for exporting logs and metrics.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/vm-has-ops-agent.md",
    "content": "---\ntitle: \"gce/Vm Has Ops Agent\"\nlinkTitle: \"Vm Has Ops Agent\"\nweight: 3\ntype: docs\ndescription: >\n  Verifies that a GCE Instance has at ops agent installed and\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nYou can check for sub agents for logging and metrics\n\n  Attributes\n   - Set `check_logging` to check for logging sub agent. Defaults is True\n   - Set `check_metrics` to check for metrics sub agent. Default is True\n\n### Failure Reason\n\nGCE Instance \"{full_resource_path}\" does not have {subagent} agent installed and is not exporting data.\n\n### Failure Remediation\n\nInstall the {subagent} agent on GCE Instance \"{full_resource_path}\".\nConsult the following documentation for troubleshooting assistance:\n<https://cloud.google.com/stackdriver/docs/solutions/agents/ops-agent/troubleshoot-run-ingest>\n\n### Success Reason\n\nGCE Instance \"{full_resource_path}\" has {subagent} agent installed and is exporting data.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/vm-lifecycle-state.md",
    "content": "---\ntitle: \"gce/Vm Lifecycle State\"\nlinkTitle: \"Vm Lifecycle State\"\nweight: 3\ntype: docs\ndescription: >\n  Validates that a specified VM is in the 'RUNNING' state.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nThis step is crucial for confirming the VM's availability and operational\n  readiness. It checks the VM's lifecycle state and reports success if the VM\n  is running or fails the check if the VM is in any other state, providing\n  detailed status information for troubleshooting.\n\n### Failure Reason\n\nThe GCE Instance {full_resource_path} is in {status} state.\n\n### Failure Remediation\n\nRestart VM {full_resource_path} and ensure VM lifecycle transitions from {status} to RUNNING.\n\nConsult the following documentation:\n\n- Restarting a compute instance:\n  <https://cloud.google.com/compute/docs/instances/stop-start-instance#restart-vm>\n- Troubleshooting VM startup issues:\n  <https://cloud.google.com/compute/docs/troubleshooting/vm-startup#identify_the_reason_why_the_boot_disk_isnt_booting>\n\n### Success Reason\n\nThe GCE Instance {full_resource_path} is in {status} state.\n\n### Skipped Reason\n\nCould not validate VM lifecycle for GCE Instance {full_resource_path}.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/vm-metadata-check.md",
    "content": "---\ntitle: \"gce/Vm Metadata Check\"\nlinkTitle: \"Vm Metadata Check\"\nweight: 3\ntype: docs\ndescription: >\n  Validates a specific boolean metadata key-value pair on a GCE Instance instance.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nThis step checks if the VM's metadata contains a specified key with the expected boolean value,\n  facilitating configuration verification and compliance checks.\n\n### Failure Reason\n\nGCE Instance metadata `{metadata_key}` doesn't have the expected value: {expected_value}\nof type {expected_value_type}\n\n### Failure Remediation\n\nUpdate the metadata `{metadata_key}` to have the expected value {expected_value}\nFollow guide [1] one to update the a metadata value.\n[1] <https://cloud.google.com/compute/docs/metadata/setting-custom-metadata#gcloud>\n\n### Success Reason\n\nGCE Instance metadata `{metadata_key}` has the expected value: {expected_value}\nof type {expected_value_type}\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/vm-performance-checks.md",
    "content": "---\ntitle: \"gce/Vm Performance Checks\"\nlinkTitle: \"Vm Performance Checks\"\nweight: 3\ntype: docs\ndescription: >\n  Assesses the overall performance of a VM by evaluating its memory, CPU, and disk utilization.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: COMPOSITE STEP\n\n### Description\n\nThis composite diagnostic step sequentially checks for high memory utilization, high disk\n  utilization, and CPU performance issues. It adds specific child steps designed to identify and\n  report potential performance bottlenecks that could impact the VM's operation and efficiency.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/vm-performance-end.md",
    "content": "---\ntitle: \"gce/Vm Performance End\"\nlinkTitle: \"Vm Performance End\"\nweight: 3\ntype: docs\ndescription: >\n  Finalize VM performance diagnostics.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: END\n\n### Description\n\nNone\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/vm-performance-start.md",
    "content": "---\ntitle: \"gce/Vm Performance Start\"\nlinkTitle: \"Vm Performance Start\"\nweight: 3\ntype: docs\ndescription: >\n  Fetching VM details.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: START\n\n### Description\n\nNone\n\n### Failure Reason\n\nThe GCE Instance {full_resource_path} is in {status} state.\n\n### Failure Remediation\n\nRestart VM {full_resource_path} and ensure VM lifecycle transitions from {status} to RUNNING.\n\nConsult the following documentation:\n\n- Restarting a compute instance:\n  <https://cloud.google.com/compute/docs/instances/stop-start-instance#restart-vm>\n- Troubleshooting VM startup issues:\n  <https://cloud.google.com/compute/docs/troubleshooting/vm-startup#identify_the_reason_why_the_boot_disk_isnt_booting>\n\n### Success Reason\n\nThe GCE Instance {full_resource_path} is in {status} state.\n\n### Skipped Reason\n\nCould not validate VM lifecycle for GCE Instance {full_resource_path}.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/vm-scope.md",
    "content": "---\ntitle: \"gce/Vm Scope\"\nlinkTitle: \"Vm Scope\"\nweight: 3\ntype: docs\ndescription: >\n  Verifies that a GCE Instance has at least one of a list of required access scopes\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nConfirms that the VM has the necessary OAuth scope\n  https://cloud.google.com/compute/docs/access/service-accounts#accesscopesiam\n\n  Attributes\n   - Use `access_scopes` to specify eligible access scopes\n   - Set `require_all` to True if the VM should have all the required access. False (default)\n     means to check if it has at least one of the required access scopes\n\n### Failure Reason\n\nGCE Instance {full_resource_path} doesn't have any of the required access scopes:\n{required_access_scope}\n\n### Failure Remediation\n\nAccess scopes are the legacy method of specifying authorization for your VM instance.\nThey define the default OAuth scopes used in requests from the gcloud CLI or the client libraries.\nAccess scopes don't apply for calls made using gRPC.\n\nUpdate `{full_resource_path}` to enable at least one of the following access scopes:\n{required_access_scope}\n\nConsult the following documentation for guidance on changing the service account and scopes:\n<https://cloud.google.com/compute/docs/instances/change-service-account#changeserviceaccountandscopes>\n\n### Success Reason\n\nGCE instance {full_resource_path} has at least one of the required scope:\n{present_access_scopes}\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/vm-serial-logs-check.md",
    "content": "---\ntitle: \"gce/Vm Serial Logs Check\"\nlinkTitle: \"Vm Serial Logs Check\"\nweight: 3\ntype: docs\ndescription: >\n  Searches for predefined good or bad patterns in the serial logs of a GCE Instance.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nThis diagnostic step checks the VM's serial logs for patterns that are indicative of successful\n  operations ('GOOD_PATTERN') or potential issues ('BAD_PATTERN'). Based on the presence of these\n  patterns, the step categorizes the VM's status as 'OK', 'Failed', or 'Uncertain'.\n\n### Failure Reason\n\nAnomalies detected in the serial logs which align with the investigated bad patterns\n\n### Failure Remediation\n\nInvestigate potential issues via the serial console.\nIf GRUB_TIMEOUT is greater than 0, access the interactive session for more insights.\nExplore rescue options for inaccessible VMs or review possible guest OS issues.\n\n- Interactive Serial Console: <https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-using-serial-console>\n- Rescuing VMs: <https://cloud.google.com/compute/docs/troubleshooting/rescue-vm>\n\nIf escalating Guest OS related issues to Google Cloud Support,\nverify that the issue is in line with Google Cloud Platform's Guest OS support policy\n\n- Google Cloud Platform Support Scope:\n<https://cloud.google.com/compute/docs/images/support-maintenance-policy#support-scope>\n\n### Success Reason\n\nThe VM's Linux OS shows no signs of anomalies,\nindicating a *likely* stable operational state.\n\n### Uncertain Reason\n\nLack of serial log data prevented a thorough assessment of the VM's operational state. Result is\ninconclusive\n\n### Uncertain Remediation\n\nVerify the VM's operational status by reviewing available serial logs.\nAddress any detected guest OS issues using the provided documentation,\nkeeping in mind certain guest OS faults may be beyond Google Cloud Platform's support scope.\n\n- Viewing Serial Port Output: <https://cloud.google.com/compute/docs/troubleshooting/viewing-serial-port-output>\n- Resolving Kernel Panic:\n<https://cloud.google.com/compute/docs/troubleshooting/kernel-panic#resolve_the_kernel_panic_error>\n- Google Cloud Platform Support Scope:\n<https://cloud.google.com/compute/docs/images/support-maintenance-policy#support-scope>\n\n### Skipped Reason\n\nThere are no logs to examine.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/vm-termination-end.md",
    "content": "---\ntitle: \"gce/Vm Termination End\"\nlinkTitle: \"Vm Termination End\"\nweight: 3\ntype: docs\ndescription: >\n  Finalize the diagnostics process for VM terminations\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: END\n\n### Description\n\nThis step prompts the user to confirm satisfaction with the Root Cause Analysis (RCA) performed\n  for VM terminations. Depending on the user's response, it may conclude the runbook execution\n  or trigger additional steps, such as generating a report of the findings.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/vm-termination-start.md",
    "content": "---\ntitle: \"gce/Vm Termination Start\"\nlinkTitle: \"Vm Termination Start\"\nweight: 3\ntype: docs\ndescription: >\n  VM termination pre-runbook checks\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: START\n\n### Description\n\nNone\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/vm-termination-type.md",
    "content": "---\ntitle: \"gce/Vm Termination Type\"\nlinkTitle: \"Vm Termination Type\"\nweight: 3\ntype: docs\ndescription: >\n\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: GATEWAY\n\n### Description\n\nIt analyzes log entries to identify whether the termination was normal or abnormal\n    from a guest os perspective. Was the shutdown intentionally issued by a user or a system fault\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gce/windows-guest-os-checks.md",
    "content": "---\ntitle: \"gce/Windows Guest Os Checks\"\nlinkTitle: \"Windows Guest Os Checks\"\nweight: 3\ntype: docs\ndescription: >\n  Diagnoses common issues related to Windows Guest OS, focusing on boot-up processes and SSHD.\n---\n\n**Product**: [Compute Engine](https://cloud.google.com/compute)\\\n**Step Type**: COMPOSITE STEP\n\n### Description\n\nThis composite diagnostic step evaluates the VM's metadata to ensure SSH is enabled for Windows,\n  checks serial logs for successful boot-up patterns, and involves a manual check on the Windows SSH\n  agent status. It aims to identify and help troubleshoot potential issues that could impact the\n  VM's accessibility via SSHD.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gcf/_index.md",
    "content": "---\ntitle: \"GCF\"\nlinkTitle: \"gcf\"\ntype: docs\nweight: 2\n---\n\nAll steps available in gcf\n"
  },
  {
    "path": "website/content/en/runbook/steps/gcf/default-service-account-check.md",
    "content": "---\ntitle: \"gcf/Default Service Account Check\"\nlinkTitle: \"Default Service Account Check\"\nweight: 3\ntype: docs\ndescription: >\n  Check if cloud run function default service account and agent exists and is enabled.\n---\n\n**Product**: [Cloud Functions](https://cloud.google.com/functions)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nThe Cloud Functions service agent or the default runtime service account does not exist or is not enabled:\n<https://cloud.google.com/functions/docs/concepts/iam#access_control_for_service_accounts>\n\n### Failure Remediation\n\nRefer to the IAM roles guide for providing default roles to the Cloud Run function default service account and the service agent:\n<https://cloud.google.com/functions/docs/concepts/iam#serviceaccount>\n\n### Success Reason\n\nThe service agent and default service account exist and are enabled.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gcf/failed-deployment-end-step.md",
    "content": "---\ntitle: \"gcf/Failed Deployment End Step\"\nlinkTitle: \"Failed Deployment End Step\"\nweight: 3\ntype: docs\ndescription: >\n  Finalizing cloud run function deployment failures\n---\n\n**Product**: [Cloud Functions](https://cloud.google.com/functions)\\\n**Step Type**: END\n\n### Description\n\nNone\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gcf/failed-deployments-start.md",
    "content": "---\ntitle: \"gcf/Failed Deployments Start\"\nlinkTitle: \"Failed Deployments Start\"\nweight: 3\ntype: docs\ndescription: >\n  Check for function status and existence of function in project.\n---\n\n**Product**: [Cloud Functions](https://cloud.google.com/functions)\\\n**Step Type**: START\n\n### Description\n\nNone\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gcf/function-global-scope-check.md",
    "content": "---\ntitle: \"gcf/Function Global Scope Check\"\nlinkTitle: \"Function Global Scope Check\"\nweight: 3\ntype: docs\ndescription: >\n  Check for deployment failures due to global scope code errors\n---\n\n**Product**: [Cloud Functions](https://cloud.google.com/functions)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nA problem with the function code was detected. The deployment pipeline completed the function deployment,\nbut failed at the last step- sending a health check to the function. This health check executes the function's global scope,\nwhich may be throwing an exception, crashing, or timing out.\n\n### Failure Remediation\n\nRefer to the following document to address this error:\n<https://cloud.google.com/functions/docs/troubleshooting#global>\n\n### Success Reason\n\nNo issues found with function global scope.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gcf/location-constraint-check.md",
    "content": "---\ntitle: \"gcf/Location Constraint Check\"\nlinkTitle: \"Location Constraint Check\"\nweight: 3\ntype: docs\ndescription: >\n  Check for deployment failures due to resource location constraint\n---\n\n**Product**: [Cloud Functions](https://cloud.google.com/functions)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nAn active resource location constraint policy in the organization restricts function deployment in the regions specified by the policy.\n\n### Failure Remediation\n\nRefer to the following document to address this error:\n<https://cloud.google.com/functions/docs/troubleshooting#resource-location>\n\n### Success Reason\n\nNo resource location constraints blocking function deployment.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gcf/user-service-account-check.md",
    "content": "---\ntitle: \"gcf/User Service Account Check\"\nlinkTitle: \"User Service Account Check\"\nweight: 3\ntype: docs\ndescription: >\n  Check if User/Service account has permissions on Cloud function runtime service account\n---\n\n**Product**: [Cloud Functions](https://cloud.google.com/functions)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nThe user principal '{user_principal}' does not have roles/iam.serviceAccountUser role on the runtime Service Account '{runtime_account}'\n\n### Failure Remediation\n\nAssign the Service Account User role (roles/iam.serviceAccountUser) to the user on the default or non-default runtime service account.\nThis role includes the iam.serviceAccounts.actAs permission.\n<https://cloud.google.com/functions/docs/reference/iam/roles#additional-configuration>\n\n### Success Reason\n\nThe user principal '{user_principal}' has roles/iam.serviceAccountUser role on the runtime Service Account '{runtime_account}'\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gcp/_index.md",
    "content": "---\ntitle: \"GCP\"\nlinkTitle: \"gcp\"\ntype: docs\nweight: 2\n---\n\nAll steps available in gcp\n"
  },
  {
    "path": "website/content/en/runbook/steps/gcp/human-task.md",
    "content": "---\ntitle: \"gcp/Human Task\"\nlinkTitle: \"Human Task\"\nweight: 3\ntype: docs\ndescription: >\n  Defines a manual approach verification step involving human intervention.\n---\n\n**Product**: \\\n**Step Type**: MANUAL STEP\n\n### Description\n\nThis is special step in a runbook designed for situations where automated\n    verification is not possible, and human judgment is required. It prompts\n    the operator (a human user) to manually check and confirm whether an issue is occurring.\n    This can involve accessing a system, reviewing configurations, or validating the state\n    of a resource based on provided instructions.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gcp/resource-attribute-check.md",
    "content": "---\ntitle: \"gcp/Resource Attribute Check\"\nlinkTitle: \"Resource Attribute Check\"\nweight: 3\ntype: docs\ndescription: >\n  Generalized step used to verify the value of a GCP resource's attribute.\n---\n\n**Product**: \\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nThis step enables the flexible verification of attributes within any JSON-viewable GCP\n    resource, such as GCE instances or Cloud Storage buckets. It checks if a specific resource's\n    attribute matches an expected value and optionally supports custom evaluation logic for\n    more complex verification scenarios.\n\n    Attributes:\n      resource_query (Callable): Function to fetch the target GCP resource. Must return\n          a `Resource` object. Typically, this is one of the `gcpdiag.queries.*` methods.\n      query_kwargs (dict): Keyword arguments to pass to `resource_query`.\n      resource (Resource): The GCP resource fetched by `resource_query`.\n      attribute (Optional[tuple]): Path to the nested attribute within the resource to be\n          verified, represented as a tuple of strings. Utilizes `boltons.iterutils.get_path`\n          for navigation.\n      evaluator (Optional[Callable]): A custom function for performing complex evaluations\n          on a resource attribute.\n          Should return a dict:\n            {'success_reason': {'key1': 'value1', ...}, 'failure_reason': {...}}\n      expected_value (str): The expected value of the target attribute.\n      expected_value_type (type): Data type of the expected attribute value. Defaults to `str`.\n      extract_args (dict): Configuration for extracting additional information for message\n          formatting, with keys specifying the argument name and values specifying the source\n          and attribute path.\n      message_args (dict): Extracted arguments used for formatting outcome messages.\n\n    Usage:\n      An example to check the status of a GCE instance:\n\n      ```python\n      status_check = ResourceAttributeCheck()\n      status_check.resource_query = gce.get_instance\n      status_check.query_kwargs = {\n          'project_id': op.get(flags.PROJECT_ID),\n          'zone': op.get(flags.ZONE),\n          'instance_name': op.get(flags.INSTANCE_NAME)\n      }\n      status_check.attribute = ('status',)\n      status_check.expected_value = 'RUNNING'\n      status_check.extract_args = {\n          'vm_name': {'source': models.Resource, 'attribute': 'name'},\n          'status': {'source': models.Resource, 'attribute': 'status'},\n          'resource_project_id': {'source': models.Parameter, 'attribute': 'project_id'}\n      }\n      ```\n\n    `get_path`: https://boltons.readthedocs.io/en/latest/_modules/boltons/iterutils.html#get_path\n\n### Failure Reason\n\nResource doesn't have the expected value\n\n### Failure Remediation\n\nUpdate the resource to have the expected value\n\n### Success Reason\n\nResource has the expected value\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gcp/service-api-status-check.md",
    "content": "---\ntitle: \"gcp/Service Api Status Check\"\nlinkTitle: \"Service Api Status Check\"\nweight: 3\ntype: docs\ndescription: >\n  Check whether or not a service has been enabled for use by a consumer\n---\n\n**Product**: \\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nChecks is a Cloud API service is enabled or not. Guides the user to enable\n  the service if it's expected to be enabled and vice versa.\n\n  Attributes:\n      api_name (str): The name of the service to check.\n      expected_state (str): The expected state of the service, used to verify\n                            against the actual service state retrieved during\n                            execution. API state has to be one of the value of\n                            gcp.constants.APIState\n\n### Failure Reason\n\nThe `{service_name}` service is not in the expected state `{expected_state}`\n\n### Failure Remediation\n\nThis service is expected to be enabled.\nExecute the command below to enable {service_name} in {project_id}\n\ngcloud services enable {service_name} --project={project_id}\n\nResources\n<https://cloud.google.com/service-usage/docs/enable-disable#enabling>\n\n### Success Reason\n\nThe `{service_name}` service is currently in the expected state: `{expected_state}`.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gcpdiag/_index.md",
    "content": "---\ntitle: \"GCPDIAG\"\nlinkTitle: \"gcpdiag\"\ntype: docs\nweight: 2\n---\n\nAll steps available in gcpdiag\n"
  },
  {
    "path": "website/content/en/runbook/steps/gcpdiag/end-step.md",
    "content": "---\ntitle: \"gcpdiag/End Step\"\nlinkTitle: \"End Step\"\nweight: 3\ntype: docs\ndescription: >\n  End Event of a Diagnostic Tree\n---\n\n**Product**: \\\n**Step Type**: END\n\n### Description\n\nNone\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gcpdiag/start-step.md",
    "content": "---\ntitle: \"gcpdiag/Start Step\"\nlinkTitle: \"Start Step\"\nweight: 3\ntype: docs\ndescription: >\n  Start Event of a Diagnostic tree\n---\n\n**Product**: \\\n**Step Type**: START\n\n### Description\n\nNone\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/_index.md",
    "content": "---\ntitle: \"GKE\"\nlinkTitle: \"gke\"\ntype: docs\nweight: 2\n---\n\nAll steps available in gke\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/api-enabled.md",
    "content": "---\ntitle: \"gke/Api Enabled\"\nlinkTitle: \"Api Enabled\"\nweight: 3\ntype: docs\ndescription: >\n  Step to verify if a given Google Cloud API is enabled for the project.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nAttributes:\n      api_name (str): the API service name (e.g. 'monitoring', 'logging').\n      template (str): the runbook template path for this check.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/ca-disabled-annotation.md",
    "content": "---\ntitle: \"gke/Ca Disabled Annotation\"\nlinkTitle: \"Ca Disabled Annotation\"\nweight: 3\ntype: docs\ndescription: >\n  Check for \"no.scale.down.node.scale.down.disabled.annotation\" log entries\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nThe scaleDown event failed because the node is annotated with cluster-autoscaler.kubernetes.io/scale-down-disabled:\ntrue.\nExample log entry that would help identify involved objects:\n\n{log_entry}\n\n### Failure Remediation\n\nCluster autoscaler skips nodes with this annotation without considering their utilization and this message is logged\nregardless of the node's utilization factor.\nIf you want cluster autoscaler to scale down these nodes, remove the annotation.\n\n### Success Reason\n\nNo \"no.scale.down.node.scale.down.disabled.annotation\" errors found between {start_time} and {end_time}\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/ca-failed-to-evict-pods.md",
    "content": "---\ntitle: \"gke/Ca Failed To Evict Pods\"\nlinkTitle: \"Ca Failed To Evict Pods\"\nweight: 3\ntype: docs\ndescription: >\n  Check for \"scale.down.error.failed.to.evict.pods\" log entries\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nThe scaleDown event failed because some of the Pods could not be evicted from a node.\nExample log entry that would help identify involved objects:\n\n{log_entry}\n\n### Failure Remediation\n\nReview best practices for Pod Disruption Budgets to ensure that the rules allow for eviction of application replicas\nwhen acceptable.\n<https://cloud.google.com/architecture/best-practices-for-running-cost-effective-kubernetes-applications-on-gke#add-pod_disruption_budget-to-your-application>\n\n### Success Reason\n\nNo \"scale.down.error.failed.to.evict.pods\" errors found between {start_time} and {end_time}\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/ca-instance-timeout.md",
    "content": "---\ntitle: \"gke/Ca Instance Timeout\"\nlinkTitle: \"Ca Instance Timeout\"\nweight: 3\ntype: docs\ndescription: >\n  Check for \"scale.up.error.waiting.for.instances.timeout\" log entries\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nThe scaleUp event failed because instances in some of the MIGs failed to appear in time.\nExample log entry that would help identify involved objects:\n\n{log_entry}\n\n### Failure Remediation\n\nThis message is transient. If it persists, engage Google Cloud Support for further investigation.\n\n### Success Reason\n\nNo \"scale.up.error.waiting.for.instances.timeout\" errors found between {start_time} and {end_time}\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/ca-ip-space-exhausted.md",
    "content": "---\ntitle: \"gke/Ca Ip Space Exhausted\"\nlinkTitle: \"Ca Ip Space Exhausted\"\nweight: 3\ntype: docs\ndescription: >\n  Check for \"scale.up.error.ip.space.exhausted\" log entries\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nThe scaleUp event failed because the cluster doesn't have enough unallocated IP address space to use to add new nodes or\nPods.\nExample log entry that would help identify involved objects:\n\n{log_entry}\n\n### Failure Remediation\n\nRefer to the troubleshooting steps to address the lack of IP address space for the nodes or pods.\n<https://cloud.google.com/kubernetes-engine/docs/how-to/alias-ips#not_enough_space>\n\n### Success Reason\n\nNo \"scale.up.error.ip.space.exhausted\" errors found between {start_time} and {end_time}\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/ca-min-resource-limit-exceeded.md",
    "content": "---\ntitle: \"gke/Ca Min Resource Limit Exceeded\"\nlinkTitle: \"Ca Min Resource Limit Exceeded\"\nweight: 3\ntype: docs\ndescription: >\n  Check for \"no.scale.down.node.minimal.resource.limits.exceeded\" log entries\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nThe scaleDown event failed because it would violate cluster-wide minimal resource limits.\nThese are the resource limits set for node auto-provisioning.\nExample log entry that would help identify involved objects:\n\n{log_entry}\n\n### Failure Remediation\n\nReview your limits for memory and vCPU and, if you want cluster autoscaler to scale down this node, decrease the limits\nby following the documentation\n<https://cloud.google.com/kubernetes-engine/docs/how-to/node-auto-provisioning#enable>\n\n### Success Reason\n\nNo \"no.scale.down.node.minimal.resource.limits.exceeded\" errors found between {start_time} and {end_time}\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/ca-min-size-reached.md",
    "content": "---\ntitle: \"gke/Ca Min Size Reached\"\nlinkTitle: \"Ca Min Size Reached\"\nweight: 3\ntype: docs\ndescription: >\n  Check for \"no.scale.down.node.node.group.min.size.reached\" log entries\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nNode cannot be removed because its node group is already at its minimum size.\nExample log entry that would help identify involved objects:\n\n{log_entry}\n\n### Failure Remediation\n\nReview and adjust the minimum value set for node pool autoscaling.\n<https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-autoscaler#resizing_a_node_pool>\n\n### Success Reason\n\nNo \"no.scale.down.node.node.group.min.size.reached\" errors found between {start_time} and {end_time}\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/ca-no-place-to-move-pods.md",
    "content": "---\ntitle: \"gke/Ca No Place To Move Pods\"\nlinkTitle: \"Ca No Place To Move Pods\"\nweight: 3\ntype: docs\ndescription: >\n  Check for \"no.scale.down.node.no.place.to.move.pods\" log entries\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nThe scaleDown event failed because there's no place to move Pods.\nExample log entry that would help identify involved objects:\n\n{log_entry}\n\n### Failure Remediation\n\nIf you expect that the Pod should be rescheduled, review the scheduling requirements of the Pods on the underutilized\nnode to determine if they can be moved to another node in the cluster.\nTo learn more, see the link\n<https://cloud.google.com/kubernetes-engine/docs/troubleshooting/cluster-autoscaler-scale-down#no-place-to-move-pods>\n\n### Success Reason\n\nNo \"no.scale.down.node.no.place.to.move.pods\" errors found between {start_time} and {end_time}\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/ca-not-safe-to-evict-annotation.md",
    "content": "---\ntitle: \"gke/Ca Not Safe To Evict Annotation\"\nlinkTitle: \"Ca Not Safe To Evict Annotation\"\nweight: 3\ntype: docs\ndescription: >\n  Check for \"no.scale.down.node.pod.not.safe.to.evict.annotation\" log entries\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nThe scaleDown event failed because a Pod on the node has the safe-to-evict=false annotation\nExample log entry that would help identify involved objects:\n\n{log_entry}\n\n### Failure Remediation\n\nIf the Pod can be safely evicted, edit the manifest of the Pod and update the annotation to\n\"cluster-autoscaler.kubernetes.io/safe-to-evict\": \"true\".\n\n### Success Reason\n\nNo \"no.scale.down.node.pod.not.safe.to.evict.annotation\" errors found between {start_time} and {end_time}\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/ca-out-of-resources.md",
    "content": "---\ntitle: \"gke/Ca Out Of Resources\"\nlinkTitle: \"Ca Out Of Resources\"\nweight: 3\ntype: docs\ndescription: >\n  Check for \"scale.up.error.out.of.resources\" log entries\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nThe scaleUp event failed because some of the MIGs could not be increased due to lack of resources.\nExample log entry that would help identify involved objects:\n\n{log_entry}\n\n### Failure Remediation\n\nFollow the documentation:\n<https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-vm-creation#resource_availability>\n\n### Success Reason\n\nNo \"scale.up.error.out.of.resources\" errors found between {start_time} and {end_time}\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/ca-pod-controller-not-found.md",
    "content": "---\ntitle: \"gke/Ca Pod Controller Not Found\"\nlinkTitle: \"Ca Pod Controller Not Found\"\nweight: 3\ntype: docs\ndescription: >\n  Check for \"no.scale.down.node.pod.controller.not.found\" log entries\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nPod is blocking the ScaleDown event because its controller (for example, a Deployment or ReplicaSet) can't be found.\nExample log entry that would help identify involved objects:\n\n{log_entry}\n\n### Failure Remediation\n\nTo determine what actions were taken that left the Pod running after its controller was removed, review the logs. To\nresolve this issue, manually delete the Pod.\n\n### Success Reason\n\nNo \"no.scale.down.node.pod.controller.not.found\" errors found between {start_time} and {end_time}\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/ca-pod-kube-system-unmovable.md",
    "content": "---\ntitle: \"gke/Ca Pod Kube System Unmovable\"\nlinkTitle: \"Ca Pod Kube System Unmovable\"\nweight: 3\ntype: docs\ndescription: >\n  Check for \"no.scale.down.node.pod.kube.system.unmovable\" log entries\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nThe scaleDown event failed because the pod is a non-DaemonSet, non-mirrored, Pod without a PodDisruptionBudget in the\nkube-system namespace.\nExample log entry that would help identify involved objects:\n\n{log_entry}\n\n### Failure Remediation\n\nBy default, Pods in the kube-system namespace aren't removed by cluster autoscaler.\n\nTo resolve this issue, either add a PodDisruptionBudget for the kube-system Pods or use a combination of node pools\ntaints and tolerations to separate kube-system Pods from your application Pods.\nTo learn more, see\n<https://cloud.google.com/kubernetes-engine/docs/troubleshooting/cluster-autoscaler-scale-down#kube-system-unmoveable>\n\n### Success Reason\n\nNo \"no.scale.down.node.pod.kube.system.unmovable\" errors found between {start_time} and {end_time}\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/ca-pod-not-enough-pdb.md",
    "content": "---\ntitle: \"gke/Ca Pod Not Enough Pdb\"\nlinkTitle: \"Ca Pod Not Enough Pdb\"\nweight: 3\ntype: docs\ndescription: >\n  Check for \"no.scale.down.node.pod.not.enough.pdb\" log entries\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nThe scaleDown event failed the pod doesn't have enough PodDisruptionBudget.\nExample log entry that would help identify involved objects:\n\n{log_entry}\n\n### Failure Remediation\n\nReview the PodDisruptionBudget for the Pod and consider making it less restrictive.\nTo learn more, see\n<https://cloud.google.com/kubernetes-engine/docs/troubleshooting/cluster-autoscaler-scale-down#not-enough-pdb>\n\n### Success Reason\n\nNo \"no.scale.down.node.pod.not.enough.pdb\" errors found between {start_time} and {end_time}\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/ca-pod-unexpected-error.md",
    "content": "---\ntitle: \"gke/Ca Pod Unexpected Error\"\nlinkTitle: \"Ca Pod Unexpected Error\"\nweight: 3\ntype: docs\ndescription: >\n  Check for \"no.scale.down.node.pod.unexpected.error\" log entries\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nPod is blocking the ScaleDown event because of an unexpected error.\nExample log entry that would help identify involved objects:\n\n{log_entry}\n\n### Failure Remediation\n\nThe root cause of this error is unknown. Contact Cloud Customer Care for further investigation.\n\n### Success Reason\n\nNo \"no.scale.down.node.pod.unexpected.error\" errors found between {start_time} and {end_time}\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/ca-pods-not-backed-by-controller.md",
    "content": "---\ntitle: \"gke/Ca Pods Not Backed By Controller\"\nlinkTitle: \"Ca Pods Not Backed By Controller\"\nweight: 3\ntype: docs\ndescription: >\n  Check for \"no.scale.down.node.pod.not.backed.by.controller\" log entries\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nThe scaleDown event failed because a Pod is not backed by a controller such as ReplicationController, DaemonSet, Job,\nStatefulSet, or ReplicaSet.\nExample log entry that would help identify involved objects:\n\n{log_entry}\n\n### Failure Remediation\n\nSet the annotation \"cluster-autoscaler.kubernetes.io/safe-to-evict\": \"true\" for the Pod or define an acceptable\ncontroller\n\n### Success Reason\n\nNo \"no.scale.down.node.pod.not.backed.by.controller\" errors found between {start_time} and {end_time}\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/ca-quota-exceeded.md",
    "content": "---\ntitle: \"gke/Ca Quota Exceeded\"\nlinkTitle: \"Ca Quota Exceeded\"\nweight: 3\ntype: docs\ndescription: >\n  Check for \"scale.up.error.quota.exceeded\" log entries\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nThe scaleUp event failed because some of the MIGs could not be increased, due to exceeded Compute Engine quota.\nExample log entry that would help identify involved objects:\n\n{log_entry}\n\n### Failure Remediation\n\nCheck the Errors tab of the MIG in Google Cloud console to see what quota is being exceeded. Follow the instructions to\nrequest a quota increase:\n<https://cloud.google.com/compute/quotas#requesting_additional_quota>\n\n### Success Reason\n\nNo \"scale.up.error.quota.exceeded errors\" found between {start_time} and {end_time}\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/ca-service-account-deleted.md",
    "content": "---\ntitle: \"gke/Ca Service Account Deleted\"\nlinkTitle: \"Ca Service Account Deleted\"\nweight: 3\ntype: docs\ndescription: >\n  Check for \"scale.up.error.service.account.deleted\" log entries\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nThe scaleUp event failed because a service account used by Cluster Autoscaler has been deleted.\nExample log entry that would help identify involved objects:\n\n{log_entry}\n\n### Failure Remediation\n\nEngage Google Cloud Support for further investigation.\n\n### Success Reason\n\nNo \"scale.up.error.service.account.deleted\" errors found between {start_time} and {end_time}\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/check-config-map.md",
    "content": "---\ntitle: \"gke/Check Config Map\"\nlinkTitle: \"Check Config Map\"\nweight: 3\ntype: docs\ndescription: >\n  This will confirm config map is present as that llow user to make changes on ip-agent.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nThis will check if config map is present ?\n\n### Uncertain Reason\n\nWhen ip-masq-agent daemonset is deployed without a configmap, it uses the default non-masq destinations [1].\n\n[1] <https://cloud.google.com/kubernetes-engine/docs/how-to/ip-masquerade-agent#creating_the_ip-masq-agent_configmap>\n\n### Uncertain Remediation\n\nIf you needs to customize the configmap, then follow the steps [1] to deploy ip-masq-agent ConfigMap in the kube-system\nnamespace.\n[1] <https://cloud.google.com/kubernetes-engine/docs/how-to/ip-masquerade-agent#creating_the_ip-masq-agent_configmap>\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/check-daemon-set.md",
    "content": "---\ntitle: \"gke/Check Daemon Set\"\nlinkTitle: \"Check Daemon Set\"\nweight: 3\ntype: docs\ndescription: >\n  On GKE for ip-masq can be deployed or automatically in cluster.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nThis step will verify if Daemon set present?\n\n### Uncertain Reason\n\nCheck for ip-masq-agent daemonSet is deployed in the Cluster. If yes follow check next step.\n\n### Uncertain Remediation\n\nIf No, please follow [1] to deploy ip-masq-agent DaemonSet in the kube-system namespace and wait for around 5 minutes\nfor the DaemonSet to be ready.\n\n[1] <https://cloud.google.com/kubernetes-engine/docs/how-to/ip-masquerade-agent#checking_the_ip-masq-agent_daemonset>\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/check-destination-ip.md",
    "content": "---\ntitle: \"gke/Check Destination Ip\"\nlinkTitle: \"Check Destination Ip\"\nweight: 3\ntype: docs\ndescription: >\n  GKE is expected not to IP masquerade. If needed then it should be added on nonMasqueradeCIDRs.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nThis will confirm if pod IP is present on the list.\n\n### Uncertain Reason\n\nWhen ip-masq-agent daemonset is deployed without a configmap, it uses the default non-masq destinations [1].\n\n[1] <https://cloud.google.com/kubernetes-engine/docs/how-to/ip-masquerade-agent#creating_the_ip-masq-agent_configmap>\n\n### Uncertain Remediation\n\nFollow the steps for including the Destination IP CIDRs in nonMasqueradeCIDRs [1].\n\n[1] <https://cloud.google.com/kubernetes-engine/docs/how-to/ip-masquerade-agent#edit-ip-masq-agent-configmap>\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/check-node-ip.md",
    "content": "---\ntitle: \"gke/Check Node Ip\"\nlinkTitle: \"Check Node Ip\"\nweight: 3\ntype: docs\ndescription: >\n  When Node IP is present under non-masquerade list, it will allow node IP to not get natted .\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nThis will check node IP address is present default non-masquerade destinations.\n\n### Uncertain Reason\n\nWhen ip-masq-agent daemonset is deployed without a configmap, it uses the default non-masq destinations [1].\n\n[1] <https://cloud.google.com/kubernetes-engine/docs/how-to/ip-masquerade-agent#creating_the_ip-masq-agent_configmap>\n\n### Uncertain Remediation\n\nFollow the steps for including the Node IP CIDRs in nonMasqueradeCIDRs [1].\n\n[1] <https://cloud.google.com/kubernetes-engine/docs/how-to/ip-masquerade-agent#edit-ip-masq-agent-configmap>\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/check-pod-ip.md",
    "content": "---\ntitle: \"gke/Check Pod Ip\"\nlinkTitle: \"Check Pod Ip\"\nweight: 3\ntype: docs\ndescription: >\n  GKE preserves the Pod IP addresses sent to destinations in the nonMasqueradeCIDRs list.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nThis will confirm if pod IP is present on the list.\n\n### Uncertain Reason\n\nWhen ip-masq-agent daemonset is deployed without a configmap, it uses the default non-masq destinations [1].\n\n[1] <https://cloud.google.com/kubernetes-engine/docs/how-to/ip-masquerade-agent#creating_the_ip-masq-agent_configmap>\n\n### Uncertain Remediation\n\nFollow the steps for including the pod IP CIDRs in nonMasqueradeCIDRs [1].\n\n[1] <https://cloud.google.com/kubernetes-engine/docs/how-to/ip-masquerade-agent#edit-ip-masq-agent-configmap>\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/cluster-autoscaler-end.md",
    "content": "---\ntitle: \"gke/Cluster Autoscaler End\"\nlinkTitle: \"Cluster Autoscaler End\"\nweight: 3\ntype: docs\ndescription: >\n  Finalizes the diagnostics process for `Cluster Autoscaler`.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: END\n\n### Description\n\nThis step prompts the user to confirm satisfaction with the Root Cause Analysis (RCA)\n  performed for `Cluster Autoscaler`.\n\n  Depending on the user's response, it may conclude the runbook execution or trigger additional\n  steps, such as generating a report of the findings.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/cluster-autoscaler-start.md",
    "content": "---\ntitle: \"gke/Cluster Autoscaler Start\"\nlinkTitle: \"Cluster Autoscaler Start\"\nweight: 3\ntype: docs\ndescription: >\n  Initiates diagnostics for Cluster Autoscaler.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: START\n\n### Description\n\nCheck\n  - if logging API is enabled\n  - verify that the cluster exists at that location\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/cluster-level-logging-enabled.md",
    "content": "---\ntitle: \"gke/Cluster Level Logging Enabled\"\nlinkTitle: \"Cluster Level Logging Enabled\"\nweight: 3\ntype: docs\ndescription: >\n  Verifies that logging is enabled at the GKE cluster level.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nConfirms that the GKE cluster configuration explicitly enables\n  logging. Even if the project has the Cloud Logging API enabled\n  and other settings are correct, logs won't be collected if\n  cluster-level logging is disabled.\n\n### Failure Reason\n\nThe logging health check failed because cluster-level logging is not enabled.\n\n### Failure Remediation\n\nEnable cluster-level logging for your Kubernetes cluster. This can be done through the Google Cloud Console or\nGKE-specific tools. See instructions:\n<https://cloud.google.com/kubernetes-engine/docs/troubleshooting/logging#verify_logging_is_enabled_on_the_cluster>\n\n### Success Reason\n\nCluster-level logging is enabled for the cluster.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/cluster-level-monitoring-configuration-enabled.md",
    "content": "---\ntitle: \"gke/Cluster Level Monitoring Configuration Enabled\"\nlinkTitle: \"Cluster Level Monitoring Configuration Enabled\"\nweight: 3\ntype: docs\ndescription: >\n  Verifies that monitoring is enabled at the GKE cluster level.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nConfirms that the GKE cluster configuration explicitly enables\n  monitoring. Even if the project has the Cloud Monitoring API enabled\n  and other settings are correct, monitoring won't be collected if\n  cluster-level monitoring is disabled .\n\n### Failure Reason\n\nThe monitoring health check failed because cluster-level monitoring is not enabled.\n\n### Failure Remediation\n\nEnable cluster-level monitoring for the Kubernetes cluster. This can be done through the Google Cloud Console or\nGKE-specific tools. See instructions:\n<https://cloud.google.com/kubernetes-engine/docs/concepts/observability>\n\n### Success Reason\n\nCluster-level monitoring is enabled for the cluster.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/cluster-version.md",
    "content": "---\ntitle: \"gke/Cluster Version\"\nlinkTitle: \"Cluster Version\"\nweight: 3\ntype: docs\ndescription: >\n  Check for cluster version\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/gke-ip-masq-standard-end.md",
    "content": "---\ntitle: \"gke/Gke Ip Masq Standard End\"\nlinkTitle: \"Gke Ip Masq Standard End\"\nweight: 3\ntype: docs\ndescription: >\n  Concludes the the diagnostics process.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: END\n\n### Description\n\nIf connectivity issue presits from pod, it directs the user to helpful\n  resources and suggests contacting support with a detailed report.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/gke-ip-masq-standard-start.md",
    "content": "---\ntitle: \"gke/Gke Ip Masq Standard Start\"\nlinkTitle: \"Gke Ip Masq Standard Start\"\nweight: 3\ntype: docs\ndescription: >\n  Check if the project ID, GKE cluster and its location is valid.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: START\n\n### Description\n\nBased on information provided would direct toward further troubleshooting.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/image-connection-timeout-restricted-private.md",
    "content": "---\ntitle: \"gke/Image Connection Timeout Restricted Private\"\nlinkTitle: \"Image Connection Timeout Restricted Private\"\nweight: 3\ntype: docs\ndescription: >\n  The connection to restricted.googleapis.com or private.googleapis.com is timing out\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nConnections from node to restricted.googleapis.com (199.36.153.4/30) or private.googleapis.com (199.36.153.8/30) timed out, preventing image pulls. This may be caused by a firewall rule blocking egress traffic to these IP ranges.\nExample log entry:\n\n{log_entry}\n\n### Failure Remediation\n\nEnsure firewall rules permit egress traffic to restricted.googleapis.com (199.36.153.4/30) or private.googleapis.com (199.36.153.8/30). Refer to the documentation:\n<https://cloud.google.com/vpc-service-controls/docs/set-up-private-connectivity>\n\n### Success Reason\n\nNo \"Failed to pull image.*dial tcp.*199.36.153.\\d:443: i/o timeout\" errors were found for cluster between {start_time} and {end_time}.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/image-connection-timeout.md",
    "content": "---\ntitle: \"gke/Image Connection Timeout\"\nlinkTitle: \"Image Connection Timeout\"\nweight: 3\ntype: docs\ndescription: >\n  The connection to Google APIs is timing out\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nConnections from node to Google APIs timed out, preventing image pulls. This may be caused by a firewall rule blocking egress traffic to Google APIs. The specific blocked IP range might be indicated in the log entry.\nExample log entry:\n\n{log_entry}\n\n### Failure Remediation\n\nEnsure firewall rules permit egress traffic to Google APIs. Refer to the documentation:\n<https://cloud.google.com/kubernetes-engine/docs/concepts/firewall-rules>\n\n### Success Reason\n\nNo \"Failed to pull image.*dial tcp.*i/o timeout\" errors were found for cluster between {start_time} and {end_time}.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/image-dns-issue.md",
    "content": "---\ntitle: \"gke/Image Dns Issue\"\nlinkTitle: \"Image Dns Issue\"\nweight: 3\ntype: docs\ndescription: >\n  Node DNS sever cannot resolve the IP of the repository\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nThe DNS resolver (metadata server 169.254.169.254:53) on node was unable to resolve the image repository's IP address, preventing image pull. This often indicates issues with networking or DNS configuration.\nExample log entry:\n\n{log_entry}\n\n### Failure Remediation\n\nVerify networking and DNS requirements, particularly for Private Google Access. Refer to the documentation:\n<https://cloud.google.com/vpc/docs/configure-private-google-access#requirements>\n\n### Success Reason\n\nNo \"Failed to pull image.*lookup.*server misbehaving\" errors were found for cluster between {start_time} and {end_time}.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/image-forbidden.md",
    "content": "---\ntitle: \"gke/Image Forbidden\"\nlinkTitle: \"Image Forbidden\"\nweight: 3\ntype: docs\ndescription: >\n  Image cannot be pulled, insufficiente permissions\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nImage cannot be pulled by a container on Pod, because there are not enough permissions to pull it from the repository.\nVerify the node SA has the correct permissions.\nExample log entry that would help identify involved objects:\n\n{log_entry}\n\n### Failure Remediation\n\nEnsure the node service account has the necessary permissions to pull the image. Refer to the documentation:\n<https://cloud.google.com/artifact-registry/docs/integrate-gke#permissions>\n\n### Success Reason\n\nNo \"Failed to pull image.*403 Forbidden\" errors were found for cluster between {start_time} and {end_time}.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/image-not-found-insufficient-scope.md",
    "content": "---\ntitle: \"gke/Image Not Found Insufficient Scope\"\nlinkTitle: \"Image Not Found Insufficient Scope\"\nweight: 3\ntype: docs\ndescription: >\n  Check for Image not found log entries with insufficient_scope server message\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nEither user or service account that's trying to pull the image doesn't have the necessary permissions to access it or\nImage doesn't exist.\nExample log entry that would help identify involved objects:\n\n{log_entry}\n\n### Failure Remediation\n\n\n1. Verify that the image name is correct.\n2. Ensure the node's service account has the necessary permissions. Refer to the documentation:\n<https://cloud.google.com/kubernetes-engine/docs/troubleshooting/deployed-workloads#image-not-found>\n\n### Success Reason\n\nNo \"Failed to pull image.*insufficient_scope\" errors found between {start_time} and {end_time}\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/image-not-found.md",
    "content": "---\ntitle: \"gke/Image Not Found\"\nlinkTitle: \"Image Not Found\"\nweight: 3\ntype: docs\ndescription: >\n  Check for Image not found log entries\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nA container on pod on node failed to pull image because the image was not found in the repository.\nExample log entry:\n\n{log_entry}\n\n### Failure Remediation\n\nRefer to the troubleshooting documentation:\n<https://cloud.google.com/kubernetes-engine/docs/troubleshooting#ImagePullBackOff>\n\n### Success Reason\n\nNo \"Failed to pull image.*not found\" errors were found for cluster between {start_time} and {end_time}.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/image-pull-end.md",
    "content": "---\ntitle: \"gke/Image Pull End\"\nlinkTitle: \"Image Pull End\"\nweight: 3\ntype: docs\ndescription: >\n  Finalizes the diagnostics process for `GKE Image Pull runbbok`.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: END\n\n### Description\n\nThis step prompts the user to confirm satisfaction with the analysis performed for\n  `GKE Image Pull runbbok`.\n\n  Depending on the user's response, it may conclude the runbook execution or trigger additional\n  steps, such as generating a report of the findings.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/image-pull-start.md",
    "content": "---\ntitle: \"gke/Image Pull Start\"\nlinkTitle: \"Image Pull Start\"\nweight: 3\ntype: docs\ndescription: >\n  Initiates diagnostics for Image pull runbook.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: START\n\n### Description\n\nCheck\n  - if logging API is enabled\n  - verify that the cluster exists at that location\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/ip-exhaustion-end.md",
    "content": "---\ntitle: \"gke/Ip Exhaustion End\"\nlinkTitle: \"Ip Exhaustion End\"\nweight: 3\ntype: docs\ndescription: >\n  Concludes the CLuster IP Exhaustion diagnostics process.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: END\n\n### Description\n\nIf the issue persists, it directs the user to helpful\n  resources and suggests contacting support with a detailed report.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/ip-exhaustion-start.md",
    "content": "---\ntitle: \"gke/Ip Exhaustion Start\"\nlinkTitle: \"Ip Exhaustion Start\"\nweight: 3\ntype: docs\ndescription: >\n  Start IP Exhaustion Checks\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: START\n\n### Description\n\nNone\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/live-migration.md",
    "content": "---\ntitle: \"gke/Live Migration\"\nlinkTitle: \"Live Migration\"\nweight: 3\ntype: docs\ndescription: >\n  Checks if the node was unavailable due to a live migration event.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nLive migration check failed for node {node}.\n\n### Failure Remediation\n\nThere was a live migration event for the node {node}.\n\nFor more details about Live migration process during maintenance events, please consult the documentation:\n<https://cloud.google.com/compute/docs/instances/live-migration-process>\n\n### Success Reason\n\nThe node {node} was unavailable for reasons other than live migration.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/logging-api-enabled.md",
    "content": "---\ntitle: \"gke/Logging Api Enabled\"\nlinkTitle: \"Logging Api Enabled\"\nweight: 3\ntype: docs\ndescription: >\n  Verifies if the Cloud Logging API is enabled for the project hosting the GKE cluster.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nThis initial step ensures that the fundamental infrastructure for\n  logging within the project is operational. If the Cloud Logging API\n  is disabled, logs from the GKE cluster won't be collected or stored\n  by Google Cloud.\n\n### Failure Reason\n\nThe logging health check failed because the Cloud Logging API is not enabled for the project.\n\n### Failure Remediation\n\nEnable the Cloud Logging API for your project through the Google Cloud Console or relevant API calls. See instructions:\n<https://cloud.google.com/kubernetes-engine/docs/troubleshooting/logging#verify_logging_is_enabled_in_the_project>\n\n### Success Reason\n\nThe Cloud Logging API is enabled for the project.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/logging-write-api-quota-exceeded.md",
    "content": "---\ntitle: \"gke/Logging Write Api Quota Exceeded\"\nlinkTitle: \"Logging Write Api Quota Exceeded\"\nweight: 3\ntype: docs\ndescription: >\n  Verifies that Cloud Logging API write quotas have not been exceeded.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nChecks if the project has exceeded any Cloud Logging write quotas within\n  the defined timeframe. Exceeding the quota could prevent nodes from sending\n  log data, even if other configurations are correct.\n\n### Failure Reason\n\nThe logging health check failed because your project has exceeded its Cloud Logging Write API quota.\n\n### Failure Remediation\n\nReview logging usage and either reduce log volume or request a quota increase. See instructions:\n<https://cloud.google.com/kubernetes-engine/docs/troubleshooting/logging#verify_that_write_api_quotas_have_not_been_reached>\n\n### Success Reason\n\nThe project is within its Cloud Logging Write API quota between {start_time} and {end_time}.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/logs-end.md",
    "content": "---\ntitle: \"gke/Logs End\"\nlinkTitle: \"Logs End\"\nweight: 3\ntype: docs\ndescription: >\n  Finalizes the 'GKE logs' diagnostic process.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: END\n\n### Description\n\nPrompts the user for satisfaction with the Root Cause Analysis (RCA) and takes appropriate\n  actions based on their response:\n\n  * **Confirmation:** Concludes the runbook execution.\n  * **Further Action:** Triggers additional steps, such as report generation, if necessary.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/logs-start.md",
    "content": "---\ntitle: \"gke/Logs Start\"\nlinkTitle: \"Logs Start\"\nweight: 3\ntype: docs\ndescription: >\n  Initiates diagnostics for GKE Clusters.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: START\n\n### Description\n\n- **Initial Checks:**\n    - Verifies if logging API is enabled for the project.\n    - Validates that there are GKE clusters in the project.\n    - (Optional) If a cluster name is provided, checks if that cluster exists in the project.\n    - (Optional) If a location is provided, verifies there are clusters in that location.\n    - (Optional) If both a location and a name are provided, verifies that the cluster\n    exists at that location.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/monitoring-api-configuration-enabled.md",
    "content": "---\ntitle: \"gke/Monitoring Api Configuration Enabled\"\nlinkTitle: \"Monitoring Api Configuration Enabled\"\nweight: 3\ntype: docs\ndescription: >\n  Verifies if the Cloud Monitoring API is enabled for the project.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nThis initial step ensures that the fundamental infrastructure for\n  monitoring within the project is operational. If the Cloud Monitoring API\n  is disabled, monitoring from the GKE cluster won't be collected or stored\n  by Google Cloud.\n\n### Failure Reason\n\nThe Monitoring health check failed because the Cloud Monitoring API is not enabled for the project.\n\n### Failure Remediation\n\nEnable the Cloud Monitoring API for the project through the Google Cloud Console or relevant API calls. See instructions:\n<https://cloud.google.com/monitoring/api/enable-api#enabling-api-v3>\n\n### Success Reason\n\nThe Cloud Monitoring API is enabled for the project.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/monitoring-configuration-end.md",
    "content": "---\ntitle: \"gke/Monitoring Configuration End\"\nlinkTitle: \"Monitoring Configuration End\"\nweight: 3\ntype: docs\ndescription: >\n  Finalizes diagnostics for GKE Monitoring.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: END\n\n### Description\n\nPrompts the user for satisfaction with the Root Cause Analysis (RCA)\n  and takes appropriate actions based on their response:\n\n  * **Confirmation:** Concludes the runbook execution.\n  * **Further Action:** Triggers additional steps, such as report generation, if necessary.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/monitoring-configuration-start.md",
    "content": "---\ntitle: \"gke/Monitoring Configuration Start\"\nlinkTitle: \"Monitoring Configuration Start\"\nweight: 3\ntype: docs\ndescription: >\n  Initiates diagnostics for GKE Clusters.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: START\n\n### Description\n\n- **Initial Checks:**\n    - Verifies if Monitoring API is enabled for the project.\n    - Validates that there are GKE clusters in the project.\n    - (Optional) If a cluster name is provided, checks if that cluster exists in the project.\n    - (Optional) If a location is provided, verifies there are clusters in that location.\n    - (Optional) If both a location and a name are provided, verifies that the cluster\n    exists at that location.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/node-auto-repair-end.md",
    "content": "---\ntitle: \"gke/Node Auto Repair End\"\nlinkTitle: \"Node Auto Repair End\"\nweight: 3\ntype: docs\ndescription: >\n  Finalizes the diagnostics process for `Node AutoRepair`.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: END\n\n### Description\n\nThis step prompts the user to confirm satisfaction with the Root Cause Analysis (RCA)\n  performed for `Node AutoRepair`.\n\n  Depending on the user's response, it may conclude the runbook execution or trigger additional\n  steps, such as generating a report of the findings.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/node-auto-repair-start.md",
    "content": "---\ntitle: \"gke/Node Auto Repair Start\"\nlinkTitle: \"Node Auto Repair Start\"\nweight: 3\ntype: docs\ndescription: >\n  Check inputs and verify if there actually was a repair event\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: START\n\n### Description\n\nNone\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/node-bootstrapping-end.md",
    "content": "---\ntitle: \"gke/Node Bootstrapping End\"\nlinkTitle: \"Node Bootstrapping End\"\nweight: 3\ntype: docs\ndescription: >\n  Finalizes the diagnostics process for `GKE Node Bootstrapping`.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: END\n\n### Description\n\nThis step prompts the user to confirm satisfaction with the analysis performed for\n  `GKE Node Bootstrapping`.\n\n  Depending on the user's response, it may conclude the runbook execution or trigger additional\n  steps, such as generating a report of the findings.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/node-bootstrapping-start.md",
    "content": "---\ntitle: \"gke/Node Bootstrapping Start\"\nlinkTitle: \"Node Bootstrapping Start\"\nweight: 3\ntype: docs\ndescription: >\n  Initiates diagnostics for Node Bootstrapping.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: START\n\n### Description\n\nCheck\n  - if there are GKE clusters in the project\n  - if the instance provided is a GKE node\n  - if serial logs are enabled\n  - if there are any logs for the provided inputs\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/node-disk-full.md",
    "content": "---\ntitle: \"gke/Node Disk Full\"\nlinkTitle: \"Node Disk Full\"\nweight: 3\ntype: docs\ndescription: >\n  Checks if node disks are full.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nThe node {node} was auto-repaired because it had disk pressure for more than 30 minutes.\n\n### Failure Remediation\n\nThe auto-repair should have fixed the detected disk pressure.\nFor more details check: <https://cloud.google.com/kubernetes-engine/docs/how-to/node-auto-repair>\n\n### Success Reason\n\nThe node {node} was auto-repaired for reasons other than disk pressure.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/node-insert-check.md",
    "content": "---\ntitle: \"gke/Node Insert Check\"\nlinkTitle: \"Node Insert Check\"\nweight: 3\ntype: docs\ndescription: >\n  Check for any errors during instances.insert method\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nThere were {NR_ERRORS} errors found for instances.insert method for nodepool {NODEPOOL} in the cluster {NAME} in\nlocation {location} between {start_time} and {end_time}.\nBelow is the latest log entry found that can help you identify the issue and involved objects:\n\n{log_entry}\n\n### Failure Remediation\n\nPlease refer to the troubleshooting steps to learn how to resolve the errors:\n<https://cloud.google.com/compute/docs/troubleshooting/troubleshooting-vm-creation>\n\n### Success Reason\n\nNo errors found for instances.insert method for nodepool {NODEPOOL} in the cluster {NAME} in location {location} between\n{start_time} and {end_time}.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/node-ip-range-exhaustion.md",
    "content": "---\ntitle: \"gke/Node Ip Range Exhaustion\"\nlinkTitle: \"Node Ip Range Exhaustion\"\nweight: 3\ntype: docs\ndescription: >\n  Check Node IP Range Exhaustion and offer remediation.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nChecks Node IP range exhaustion and offers remediation step.\n\n### Failure Reason\n\nNode IP exhaustion is detected in the cluster {cluster_name} for the subnet {node_subnet}\n\n\n### Failure Remediation\n\nPlease follow the below documentation [1] to expand the ip range of the node subnet.\nThe subnet that has exhausted its IP space is {node_subnet}.\n\n[1] <https://cloud.google.com/vpc/docs/create-modify-vpc-networks#expand-subnet>\n\n### Success Reason\n\nNo Node IP exhaustion detected in the cluster {cluster_name}\n\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/node-not-ready.md",
    "content": "---\ntitle: \"gke/Node Not Ready\"\nlinkTitle: \"Node Not Ready\"\nweight: 3\ntype: docs\ndescription: >\n  Checks if nodes have been in NotReady status for an extended period (e.g., 10 minutes).\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nThe node {node} was auto-repaired because it was in a NotReady state for more than approximately 10 minutes.\n\n### Failure Remediation\n\nThe auto-repair should have fixed the detected NotReady state.\nFor more details check: <https://cloud.google.com/kubernetes-engine/docs/how-to/node-auto-repair>\n\n### Success Reason\n\nThe node {node} was auto-repaired for reasons other than being in a NotReady state.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/node-pool-cloud-logging-access-scope.md",
    "content": "---\ntitle: \"gke/Node Pool Cloud Logging Access Scope\"\nlinkTitle: \"Node Pool Cloud Logging Access Scope\"\nweight: 3\ntype: docs\ndescription: >\n  Verifies that GKE node pools have the required Cloud Logging access scopes.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nConfirms that the nodes within the GKE cluster's node pools have the necessary\n  scopes to write log data to Cloud Logging.  These scopes include\n  'https://www.googleapis.com/auth/logging.write' and  potentially others,\n  such as 'https://www.googleapis.com/auth/cloud-platform' and\n  'https://www.googleapis.com/auth/logging.admin', depending on the configuration.\n\n### Failure Reason\n\nThe logging health check failed because node pools have insufficient access scope for Cloud Logging.\n\n### Failure Remediation\n\nAdjust node pool access scope to grant necessary logging permissions. See instructions:\n<https://cloud.google.com/kubernetes-engine/docs/troubleshooting/logging#verify_nodes_in_the_node_pools_have_access_scope>\n\n### Success Reason\n\nNode pools have sufficient access scope for Cloud Logging.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/node-pool-cloud-monitoring-access-scope-configuration.md",
    "content": "---\ntitle: \"gke/Node Pool Cloud Monitoring Access Scope Configuration\"\nlinkTitle: \"Node Pool Cloud Monitoring Access Scope Configuration\"\nweight: 3\ntype: docs\ndescription: >\n  Verifies that GKE node pools have the required Cloud Monitoring access scopes.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nConfirms that the nodes within the GKE cluster's node pools have the necessary\n  scopes to write metrics data to Cloud Monitoring.  These scopes include\n  'https://www.googleapis.com/auth/monitoring' and potentially others,\n  such as 'https://www.googleapis.com/auth/cloud-platform' and\n  'https://www.googleapis.com/auth/monitoring.write', depending on the configuration.\n\n### Failure Reason\n\nThe monitoring health check failed because node pools have insufficient access scope for Cloud Monitoring.\n\n### Failure Remediation\n\nAdjust node pool access scope to grant necessary monitoring permissions. See instructions:\n<https://cloud.google.com/kubernetes-engine/docs/how-to/access-scopes#default_access_scopes>\n\n### Success Reason\n\nNode pools have sufficient access scope for Cloud Monitoring.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/node-pool-scope.md",
    "content": "---\ntitle: \"gke/Node Pool Scope\"\nlinkTitle: \"Node Pool Scope\"\nweight: 3\ntype: docs\ndescription: >\n  Step to verify that each GKE node pool has at least one of the required OAuth scopes.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nAttributes:\n      required_scopes (list): a list of OAuth scope URLs to check.\n      template (str): the runbook template path for this check.\n      service_name (str) the service whose role need to be check.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/node-pool-upgrade.md",
    "content": "---\ntitle: \"gke/Node Pool Upgrade\"\nlinkTitle: \"Node Pool Upgrade\"\nweight: 3\ntype: docs\ndescription: >\n  Checks if the node was removed by Cluster Upgrade Operation.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nThe node {node} was unavailable due to a node pool upgrade.\n\n### Failure Remediation\n\nThis is expected behavior, when the upgrade is performed, nodes are drained and re-created to match the desired version.\n\nTo list the node upgrade operations, please issue the following gcloud command:\n\n```\ngcloud container operations list --filter=operationType:UPGRADE_NODES\n```\n\nFor more details about node upgrades please consult the documentation:\n<https://cloud.google.com/kubernetes-engine/docs/how-to/node-auto-upgrades>\n\n### Success Reason\n\nThe node {node} was unavailable for reasons other than a node pool upgrade.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/node-registration-success.md",
    "content": "---\ntitle: \"gke/Node Registration Success\"\nlinkTitle: \"Node Registration Success\"\nweight: 3\ntype: docs\ndescription: >\n  Verify Node Registration Checker output\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nNode {node} in zone {location} is currently running, but it failed registration with kube-apiserver, below is the Node\nRegistration Checker summary:\n\n{log_entries[0]}\n\n{log_entries[1]}\n\n{log_entries[2]}\n\n{log_entries[3]}\n\n{log_entries[4]}\n\n{log_entries[5]}\n\n{log_entries[6]}\n\n{log_entries[7]}\n\n{log_entries[8]}\n\n{log_entries[9]}\n\n{log_entries[10]}\n\n{log_entries[11]}\n\n{log_entries[12]}\n\n{log_entries[13]}\n\n{log_entries[14]}\n\n{log_entries[15]}\n\n\n### Failure Remediation\n\nTo understand why the node failed registration with kube-apiserver, please check the following documentation page:\n<https://cloud.google.com/kubernetes-engine/docs/troubleshooting/node-registration#use-nrc>\n\n### Success Reason\n\nNode {node} is currently running and, according to the output from Node Registration Checker, it was registered\nsuccessfully. Below is the log entry that shows successful registration:\n\n{log_entry}\n\n### Uncertain Reason\n\nThe node {node} in the zone {location} is running, but there are no logs generated by Node Registration Checker in the\nprovided time range {start_time} - {end_time}.\n\n### Uncertain Remediation\n\nThis runbook looks for logs generated by Node Registration Checker. Because there are no logs from Node Registration\nChecker for the node {node}, but it is running, there could be a different issue with the node.\nPlease try the runbook with a different node in the same nodepool.\n\n\n### Failure Reason [Alternative 2]\n\nNode {node} in zone {location} is not currently running. While checking logs it was found that it failed registration\nwith kube-apiserver. Below is the Node Registration Checker summary:\n\n{log_entries[0]}\n\n{log_entries[1]}\n\n{log_entries[2]}\n\n{log_entries[3]}\n\n{log_entries[4]}\n\n{log_entries[5]}\n\n{log_entries[6]}\n\n{log_entries[7]}\n\n{log_entries[8]}\n\n{log_entries[9]}\n\n{log_entries[10]}\n\n{log_entries[11]}\n\n{log_entries[12]}\n\n{log_entries[13]}\n\n{log_entries[14]}\n\n{log_entries[15]}\n\n\n\n### Failure Reason [Alternative 3]\n\nCould not find summary from Node Registration Checker for node {node} in zone {location}. The node might have been\ndeleted before Node Registration Checker could finish running.\n\n### Failure Remediation [Alternative 3]\n\nTry to run the runbook with a node that is currently running.\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/node-removed-by-autoscaler.md",
    "content": "---\ntitle: \"gke/Node Removed By Autoscaler\"\nlinkTitle: \"Node Removed By Autoscaler\"\nweight: 3\ntype: docs\ndescription: >\n  Checks if the node was removed by Cluster Autoscaler.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nThe node {node} was removed by the cluster autoscaler.\n\n### Failure Remediation\n\nThis is expected behavior. GKE's cluster autoscaler automatically resizes the number of nodes in a given node pool, based on the demands of your workloads. When demand is low, the cluster autoscaler scales back down to a minimum size that you designate.\n\nFor more details about Cluster Autoscaler ScaleDown events please consult the documentation:\n<https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-autoscaler-visibility#scaledown-event>\n\n### Success Reason\n\nThe node {node} was unavailable for reasons other than scale down by the cluster autoscaler.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/node-unavailability-end.md",
    "content": "---\ntitle: \"gke/Node Unavailability End\"\nlinkTitle: \"Node Unavailability End\"\nweight: 3\ntype: docs\ndescription: >\n  Finalizes the diagnostics process for `Node Unavailability`.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: END\n\n### Description\n\nThis step prompts the user to confirm satisfaction with the Root Cause\n  Analysis (RCA)\n  performed for `Node Unavailability`.\n\n  Depending on the user's response, it may conclude the runbook execution or\n  trigger additional\n  steps, such as generating a report of the findings.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/node-unavailability-start.md",
    "content": "---\ntitle: \"gke/Node Unavailability Start\"\nlinkTitle: \"Node Unavailability Start\"\nweight: 3\ntype: docs\ndescription: >\n  Check inputs and verify if the node was unavailable\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: START\n\n### Description\n\nNone\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/nodeproblem.md",
    "content": "---\ntitle: \"gke/Nodeproblem\"\nlinkTitle: \"Nodeproblem\"\nweight: 3\ntype: docs\ndescription: >\n  This will confirm if there is any VPC flow logs to destination IP.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nThis will either rule out ip-masq issue or points to ip-mas-agent issue.\n\n### Failure Reason\n\nThere are no egress traffic to Destination IP which indicates that GKE NODE is also having issue to connect to\ndestination IP.\n\n### Failure Remediation\n\nEnable VPC flow logs by following the documentation and look if traffic id going out to destination:\n<https://cloud.google.com/vpc/docs/using-flow-logs#enable-logging-existing>\n\n### Success Reason\n\nWhen VPC flow logs shows traffic is going out, then GKE IP masquerading may be working as intended. If the end-to-end\ncase is still failing, the problem is likely to be somewhere in the networking path between Dest-IP and node on which\nimpacted Pod is scheduled.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/pod-ip-range-exhaustion.md",
    "content": "---\ntitle: \"gke/Pod Ip Range Exhaustion\"\nlinkTitle: \"Pod Ip Range Exhaustion\"\nweight: 3\ntype: docs\ndescription: >\n  Check Pod IP Range Exhaustion and offer remediation.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nChecks Pod IP range exhaustion and offers remediation step.\n\n### Failure Reason\n\nPod IP exhaustion is detected in the cluster {cluster_name}\n\n### Failure Remediation\n\nPlease follow the below documentation [1] to add ipv4 range to the autopilot cluster to mitgate the issue.\n\n[1] <https://cloud.google.com/kubernetes-engine/docs/how-to/multi-pod-cidr#add-pod-ipv4-range-in-autopilot-cluster>\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/preemption-condition.md",
    "content": "---\ntitle: \"gke/Preemption Condition\"\nlinkTitle: \"Preemption Condition\"\nweight: 3\ntype: docs\ndescription: >\n  Checks if the node was preempted.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nThe node {node} was preempted.\n\n### Failure Remediation\n\nCompute Engine might stop (preempt) preemptible instances if it needs to reclaim the compute capacity for allocation to other VMs.\n\nFor more details about preemptible VMs in GKE please consult the documentation:\n<https://cloud.google.com/kubernetes-engine/docs/how-to/preemptible-vms>\n\n### Success Reason\n\nThe node {node} was unavailable for reasons other than preemption.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/resource-quota-exceeded.md",
    "content": "---\ntitle: \"gke/Resource Quota Exceeded\"\nlinkTitle: \"Resource Quota Exceeded\"\nweight: 3\ntype: docs\ndescription: >\n  Verify that Kubernetes resource quotas have not been exceeded.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nThe cluster projects/{project}/locations/{location}/clusters/{cluster} has exceeded its Kubernetes resource quota between\n{start_time} and {end_time}.\nExample log entry that would help identify involved objects:\n\n{log_entry}\n\n### Failure Remediation\n\nFor clusters with under 100 nodes, GKE applies a Kubernetes resource quota to every namespace. These quotas protect the\ncluster's control plane from instability caused by potential bugs in applications deployed to the cluster. These quotas cannot\nbe removed because they are enforced by GKE.\nSee details: <https://cloud.google.com/kubernetes-engine/quotas#resource_quotas>\nTo list resource quotas in the cluster, use the following command:\n\n`kubectl get resourcequota --all-namespaces`\n\nRefer to the Kubernetes documentation for more information about resource quotas: <https://kubernetes.io/docs/concepts/policy/resource-quotas/>\n\nFor the GKE resource quotas named \"gke-resource-quotas\", open a\nGCP support case to request either an increase to a specific quota limit or the disabling of GKE resource quotas for the\ncluster.\n\n### Success Reason\n\nThe cluster projects/{project}/locations/{location}/clusters/{cluster} was within its Kubernetes resource quota between\n{start_time} and {end_time}.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/resource-quotas-end.md",
    "content": "---\ntitle: \"gke/Resource Quotas End\"\nlinkTitle: \"Resource Quotas End\"\nweight: 3\ntype: docs\ndescription: >\n  Finalizes the diagnostics process for `Resource Quotas`.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: END\n\n### Description\n\nThis step prompts the user to confirm satisfaction with the Root Cause Analysis (RCA)\n  performed for `Resource Quotas`.\n\n  Depending on the user's response, it may conclude the runbook execution or trigger additional\n  steps, such as generating a report of the findings.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/resource-quotas-start.md",
    "content": "---\ntitle: \"gke/Resource Quotas Start\"\nlinkTitle: \"Resource Quotas Start\"\nweight: 3\ntype: docs\ndescription: >\n  Initiates diagnostics for Resource Quotas.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: START\n\n### Description\n\nCheck\n  - if logging API is enabled\n  - if there are GKE clusters in the project\n  - if a cluster name is provided, verify if that cluster exists in the project\n  - if a location is provided, verify there are clusters in that location\n  - if both a location and a name are provided, verify that the cluster exists at that location\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/service-account-logging-permission.md",
    "content": "---\ntitle: \"gke/Service Account Logging Permission\"\nlinkTitle: \"Service Account Logging Permission\"\nweight: 3\ntype: docs\ndescription: >\n  Verifies the service accounts associated with node pools have 'logging.logWriter' permissions.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nChecks that the service accounts used by nodes in the GKE cluster\n  have the essential \"roles/logging.logWriter\" IAM permission. This\n  permission is required to send log data to Google Cloud Logging.\n\n### Failure Reason\n\nThe logging health check failed because the service account lacks necessary permissions to write logs.\n\n### Failure Remediation\n\nGrant the service account the 'roles/logging.logWriter' role or equivalent permissions. See instructions:\n<https://cloud.google.com/kubernetes-engine/docs/troubleshooting/logging#verify_the_node_pools_service_account_has_a_role_with_the_correct_permissions>\n\n### Success Reason\n\nThe service account has necessary permissions to write logs.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/service-account-monitoring-permission-configuration.md",
    "content": "---\ntitle: \"gke/Service Account Monitoring Permission Configuration\"\nlinkTitle: \"Service Account Monitoring Permission Configuration\"\nweight: 3\ntype: docs\ndescription: >\n  Verifies that service accounts in GKE node pools have monitoring permissions.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nChecks that the service accounts used by nodes in the GKE cluster\n  have the essential \"roles/monitoring.metricWriter\" IAM permission. This\n  permission is required to send metric data to Google Cloud Monitoring.\n\n### Failure Reason\n\nThe monitoring health check failed because the service account lacks necessary permissions to write metrics.\n\n### Failure Remediation\n\nGrant the service account the 'roles/monitoring.metricWriter' role or equivalent permissions. See instructions:\n<https://cloud.google.com/kubernetes-engine/docs/troubleshooting/dashboards#write_permissions>\n\n### Success Reason\n\nThe service account has necessary permissions to write metrics.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/service-account-permission.md",
    "content": "---\ntitle: \"gke/Service Account Permission\"\nlinkTitle: \"Service Account Permission\"\nweight: 3\ntype: docs\ndescription: >\n  Step to verify that service accounts in GKE node pools have the required IAM roles.\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nAttributes:\n      required_roles (list): list of IAM roles to check on each node-pool service account.\n      template (str): the runbook template path for this check.\n      service_name (str) the service for which service account permissions need to be check.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/unallocatable-gpu.md",
    "content": "---\ntitle: \"gke/Unallocatable Gpu\"\nlinkTitle: \"Unallocatable Gpu\"\nweight: 3\ntype: docs\ndescription: >\n  Checks GPU allocation\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nThe node {node} was auto-repaired because it had unallocatable GPU(s) for more than 15 minutes.\n\n### Failure Remediation\n\nThe auto-repair should have fixed the detected unallocatable GPU(s).\nFor more details check: <https://cloud.google.com/kubernetes-engine/docs/how-to/node-auto-repair>\n\n### Success Reason\n\nThe node {node} was auto-repaired for reasons other than unallocatable GPU(s).\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/gke/unallocatable-tpu.md",
    "content": "---\ntitle: \"gke/Unallocatable Tpu\"\nlinkTitle: \"Unallocatable Tpu\"\nweight: 3\ntype: docs\ndescription: >\n  Checks TPU allocation\n---\n\n**Product**: [Google Kubernetes Engine](https://cloud.google.com/kubernetes-engine)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nThe node {node} was auto-repaired because it had unallocatable TPU(s) for more than 10 minutes.\n\n### Failure Remediation\n\nThe auto-repair should have fixed the detected unallocatable TPU(s).\nFor more details check: <https://cloud.google.com/kubernetes-engine/docs/how-to/tpus#node-auto-repair>\n\n### Success Reason\n\nThe node {node} was auto-repaired for reasons other than unallocatable TPU(s).\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/iam/_index.md",
    "content": "---\ntitle: \"IAM\"\nlinkTitle: \"iam\"\ntype: docs\nweight: 2\n---\n\nAll steps available in iam\n"
  },
  {
    "path": "website/content/en/runbook/steps/iam/iam-policy-check.md",
    "content": "---\ntitle: \"iam/Iam Policy Check\"\nlinkTitle: \"Iam Policy Check\"\nweight: 3\ntype: docs\ndescription: >\n  Verify if specificd principal has permissions or roles permission/role in project.\n---\n\n**Product**: [Identity and Access Management (IAM)](https://cloud.google.com/iam)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nThis step supports checking for either all specified permissions/roles are present or\n  at least one for the principal (user or service account). It reports the present and missing\n  permissions/roles accordingly. Also, identifying which permissions or roles\n  are present and which are missing.\n\n  Attributes:\n    principal (str): The identifier for the principal whose permissions are being checked.\n    permissions (Optional[Set[str]]): A set of IAM permissions to check. Specify this or `roles`.\n    roles (Optional[Set[str]]): A set of IAM roles to check. Specify this or `permissions`.\n    require_all (bool): If True, requires all specified permissions or roles to be present. If\n                        False, requires at least one of the specified permissions or roles to be\n                        present.\n    template (str): The template used for generating reports for the step.\n\n### Failure Reason\n\n{principal} does not have at least one of the expected {permissions_or_roles}:\n{missing_permissions_or_roles}.\n\n### Failure Remediation\n\nGrant a role containing the missing permissions by following the instructions in [1].\nRefer to [2] for a list of Google Cloud predefined roles.\n\nNote: Consider consulting with project administrators regarding the most appropriate standard or custom role to grant.\n\n[1] <https://cloud.google.com/iam/docs/grant-role-console>\n[2] <https://cloud.google.com/iam/docs/understanding-roles>\n\n### Success Reason\n\n{principal} has expected {permissions_or_roles}.\n{present_permissions_or_roles}.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/iam/vm-has-an-active-service-account.md",
    "content": "---\ntitle: \"iam/Vm Has An Active Service Account\"\nlinkTitle: \"Vm Has An Active Service Account\"\nweight: 3\ntype: docs\ndescription: >\n  Investigates if a VM's service account is active.\n---\n\n**Product**: [Identity and Access Management (IAM)](https://cloud.google.com/iam)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nThis step checks if the specified service account is neither disabled nor deleted.\n  It verifies the existence of the service account and its active status within\n  the specified project.\n\n  Attributes:\n    template (str): Template identifier for reporting the service account status.\n    service_account (str, optional): The email address of the service account to check.\n                                     If not provided, it is obtained from the operation's context.\n    project_id (str, optional): The ID of the Google Cloud project within which to check\n                                the service account. If not provided, it is obtained from\n                                the operation's context.\n\n### Failure Reason\n\nService account {sa} is deleted.\n\n### Failure Remediation\n\nService account {sa} has been deleted. Deleted service accounts can be undeleted within 30 days of deletion [2]. After 30 days, IAM permanently removes the service account, and it cannot be recovered.\nRefer to [1] for details on deleting service accounts and [2] for undeleting them.\n[1] <https://cloud.google.com/iam/docs/service-accounts-delete-undelete#deleting>\n[2] <https://cloud.google.com/iam/docs/service-accounts-delete-undelete#undeleting>\n\n### Success Reason\n\nService account {sa} is active.\n\n### Uncertain Reason\n\nCould not find service account {sa}.\n\n### Uncertain Remediation\n\nCould not determine the status (e.g., active, disabled, or deleted) for service account `{sa}`.\n\n- To manually verify the service account, refer to the [documentation for listing and checking service accounts](https://cloud.google.com/iam/docs/service-accounts-list-edit#listing).\n- For information on deleted service accounts, see [deleted service account details](https://cloud.google.com/iam/docs/service-accounts-delete-undelete#deleting).\n- If the service account was deleted, review [how to undelete a service account](https://cloud.google.com/iam/docs/service-accounts-delete-undelete#undeleting) to recover it if feasible.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/interconnect/_index.md",
    "content": "---\ntitle: \"INTERCONNECT\"\nlinkTitle: \"interconnect\"\ntype: docs\nweight: 2\n---\n\nAll steps available in interconnect\n"
  },
  {
    "path": "website/content/en/runbook/steps/interconnect/bgp-down-flap-end.md",
    "content": "---\ntitle: \"interconnect/Bgp Down Flap End\"\nlinkTitle: \"Bgp Down Flap End\"\nweight: 3\ntype: docs\ndescription: >\n  Concludes the diagnostics process.\n---\n\n**Product**: [Interconnect](https://cloud.google.com/network-connectivity/docs/interconnect)\\\n**Step Type**: END\n\n### Description\n\nThe following are considered error and need further debugging:\n\n  1> BGP down events found without interconnect maintenance\n  2> BGP flaps with duration over graceful restart timer\n  3> BGP flaps with duration less than graceful restart timer but no Cloud Router maintenance event\n\n  Please contact GCP support for further debugging.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/interconnect/bgp-down-flap-start.md",
    "content": "---\ntitle: \"interconnect/Bgp Down Flap Start\"\nlinkTitle: \"Bgp Down Flap Start\"\nweight: 3\ntype: docs\ndescription: >\n  Check if the project and other parameters are valid and vlan attachments are available.\n---\n\n**Product**: [Interconnect](https://cloud.google.com/network-connectivity/docs/interconnect)\\\n**Step Type**: START\n\n### Description\n\nThis step starts the BGP issue debugging process by\n  verifying the correct input parameters have been provided and checking to ensure\n  that the following resources exist.\n    - The Project\n    - Region\n    - The vlan attachments exist for the given project\n\n### Success Reason\n\n    Total `{total_num}` vlan attachments found in `{region}` in project `{project_id}`.\n\n### Skipped Reason\n\n    Unable to fetch any vlan attachments in any region in project `{project_id}`.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/interconnect/check-bgp-down.md",
    "content": "---\ntitle: \"interconnect/Check Bgp Down\"\nlinkTitle: \"Check Bgp Down\"\nweight: 3\ntype: docs\ndescription: >\n  Check if vlan attachments have BGP down state.\n---\n\n**Product**: [Interconnect](https://cloud.google.com/network-connectivity/docs/interconnect)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nCheck if any vlan attachments have in BGP down state.\n\n### Failure Reason\n\n    Attachment:{attachment_name}, Interconnect:{interconnect_name}, Cloud_Router_Name:{router_name}\n\n### Failure Remediation\n\n     For any interconnects in BGP down state, continue runbook check if the interconnect is in maintenance state. Check the public documentation for guidance. <https://cloud.google.com/network-connectivity/docs/interconnect/support/infrastructure-maintenance-events>\n\n### Success Reason\n\n    No VLAN attachments have BGP down in region `{region}` in project `{project_id}`.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/interconnect/check-bgp-flap.md",
    "content": "---\ntitle: \"interconnect/Check Bgp Flap\"\nlinkTitle: \"Check Bgp Flap\"\nweight: 3\ntype: docs\ndescription: >\n  Check if any BGP flap events, report error flaps with duration over 60 seconds.\n---\n\n**Product**: [Interconnect](https://cloud.google.com/network-connectivity/docs/interconnect)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nCheck if any BGP flap events, report error flaps with duration over 60 seconds.\n\n### Failure Reason\n\n    Abnormal long BGP flaps:  crId:{router_id}, ip:{local_ip}, peerIp:{remote_ip}, crName:{router_name}, vlan:{attachment}, proj:{project_id}, details:{flap_details}\n\n### Failure Remediation\n\n    BGP flaps lasting longer than `{timer}` seconds are unlikely to be caused by Cloud Router maintenance events. Analyze Cloud Router logs to identify the root cause. Check the public documentation for guidance.<https://cloud.google.com/network-connectivity/docs/router/support/troubleshoot-log-messages> or contact GCP support.Logging query example {example_query}\n\n### Success Reason\n\n    No BGP flaps are found in region `{region}` in project `{project_id}`.\n\n### Uncertain Reason\n\n    Short duration BGP flaps: crId:{router_id}, ip:{local_ip}, peerIp:{remote_ip}, crName:{router_name}, vlan:{attachment}, proj:{project_id}, details:{flap_details}\n\n### Uncertain Remediation\n\n    Continue runbook to check if there are `cloud router maintenance` events align with BGP flaps.\n\n### Skipped Reason\n\n    Unable to fetch any vlan attachments to check BGP flap in any region in project `{project_id}`.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/interconnect/check-cloud-router-maintenance.md",
    "content": "---\ntitle: \"interconnect/Check Cloud Router Maintenance\"\nlinkTitle: \"Check Cloud Router Maintenance\"\nweight: 3\ntype: docs\ndescription: >\n  Check if any Cloud Router had maintenance event.\n---\n\n**Product**: [Interconnect](https://cloud.google.com/network-connectivity/docs/interconnect)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nCheck if any Cloud Router had maintenance event.\n  Report BGP flaps without Cloud Router maintenance event.\n\n### Failure Reason\n\n    Error BGP : crId:{router_id}, ip:{local_ip}, peerIp:{remote_ip}, crName:{router_name}, vlan:{attachment}, proj:{project_id}, details:{flap_details}\n\n### Failure Remediation\n\n    BGP flaps lasting less than {timer} seconds have been observed without Cloud Router maintenance. Analyze Cloud Router logs to identify the root cause. Check the public documentation for guidance.Logging query example <https://cloud.google.com/network-connectivity/docs/router/support/troubleshoot-log-messages> or contact GCP support.{example_query}\n\n### Success Reason\n\n    BGP flaps less than {timer} seconds are all caused by Cloud Router maintenance events.\n\n### Skipped Reason\n\n    No BGP flaps, skip cloud router mainteance check in in region `{region}` in project `{project_id}`.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/interconnect/check-interconnect-maintenance.md",
    "content": "---\ntitle: \"interconnect/Check Interconnect Maintenance\"\nlinkTitle: \"Check Interconnect Maintenance\"\nweight: 3\ntype: docs\ndescription: >\n  Check if interconnects with BGP down are in maintenance state.\n---\n\n**Product**: [Interconnect](https://cloud.google.com/network-connectivity/docs/interconnect)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nCheck if any interconnects with BGP down are in maintenance state.\n\n### Failure Reason\n\n    The interconnect `{interconnect_name}` with BGP down status has no planned maintenance.\n\n### Failure Remediation\n\n    Interconnect BGP down can be caused by various reasons. Suggested remediation: {remediation}\n\n### Success Reason\n\n    The interconnects with BGP down status align with the planned interconnect maintenance events.\n\n### Skipped Reason\n\n    No interconnects have BGP down status, skip interconnect mainteance check in in region `{region}` in project `{project_id}`.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/lb/_index.md",
    "content": "---\ntitle: \"LB\"\nlinkTitle: \"lb\"\ntype: docs\nweight: 2\n---\n\nAll steps available in lb\n"
  },
  {
    "path": "website/content/en/runbook/steps/lb/analyze-certificate-status.md",
    "content": "---\ntitle: \"lb/Analyze Certificate Status\"\nlinkTitle: \"Analyze Certificate Status\"\nweight: 3\ntype: docs\ndescription: >\n  Analyze the status of the Google-managed certificate.\n---\n\n**Product**: [Load balancing](https://cloud.google.com/load-balancing)\\\n**Step Type**: GATEWAY\n\n### Description\n\nNone\n\n### Failure Reason\n\nThe Google-managed SSL certificate \"{name}\" is in the PROVISIONING_FAILED_PERMANENTLY state. This is a non-recoverable state.\n\n### Failure Remediation\n\nRecreate the certificate. Refer to the documentation for instructions on creating SSL certificates.\n\n### Success Reason\n\nThe Google-managed SSL certificate \"{name}\" is in {status} state.\n\n### Uncertain Reason\n\nThe Google-managed SSL certificate \"{name}\" is in the {status} state. {context}.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/lb/analyze-domain-statuses.md",
    "content": "---\ntitle: \"lb/Analyze Domain Statuses\"\nlinkTitle: \"Analyze Domain Statuses\"\nweight: 3\ntype: docs\ndescription: >\n  Check the status of each individual domain associated with the SSL certificate.\n---\n\n**Product**: [Load balancing](https://cloud.google.com/load-balancing)\\\n**Step Type**: GATEWAY\n\n### Description\n\nNone\n\n### Success Reason\n\nAll domains associated with the SSL certificate \"{name}\" are in the ACTIVE state. Domain provisioning appears successful.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/lb/analyze-failed-caa-check.md",
    "content": "---\ntitle: \"lb/Analyze Failed Caa Check\"\nlinkTitle: \"Analyze Failed Caa Check\"\nweight: 3\ntype: docs\ndescription: >\n  Analyze domains in \"FAILED_CAA_CHECKING\" or \"FAILED_CAA_FORBIDDEN\" state.\n---\n\n**Product**: [Load balancing](https://cloud.google.com/load-balancing)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nThe following domains are in FAILED_CAA_CHECKING or FAILED_CAA_FORBIDDEN state: {domains} for SSL certificate \"{name}\". This indicates misconfigured CAA records. CAA records authorize specific Certificate Authorities to issue certificates for the domain.\n\n### Failure Remediation\n\nEnsure the CAA records are configured correctly. Refer to the documentation for instructions on configuring CAA records: <https://cloud.google.com/load-balancing/docs/ssl-certificates/google-managed-certs#caa>\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/lb/analyze-failed-not-visible-domains.md",
    "content": "---\ntitle: \"lb/Analyze Failed Not Visible Domains\"\nlinkTitle: \"Analyze Failed Not Visible Domains\"\nweight: 3\ntype: docs\ndescription: >\n  Analyze domains in \"FAILED_NOT_VISIBLE\" state.\n---\n\n**Product**: [Load balancing](https://cloud.google.com/load-balancing)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nThe following domains are in FAILED_NOT_VISIBLE state: {domains} for SSL certificate \"{name}\". This usually means the domain's DNS records are not correctly pointing to the load balancer.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/lb/analyze-latest-health-check-log.md",
    "content": "---\ntitle: \"lb/Analyze Latest Health Check Log\"\nlinkTitle: \"Analyze Latest Health Check Log\"\nweight: 3\ntype: docs\ndescription: >\n  Look for the latest health check logs and based on that decide what to do next.\n---\n\n**Product**: [Load balancing](https://cloud.google.com/load-balancing)\\\n**Step Type**: GATEWAY\n\n### Description\n\nNone\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/lb/analyze-provisioning-domains.md",
    "content": "---\ntitle: \"lb/Analyze Provisioning Domains\"\nlinkTitle: \"Analyze Provisioning Domains\"\nweight: 3\ntype: docs\ndescription: >\n  Analyze domains in \"PROVISIONING\" state.\n---\n\n**Product**: [Load balancing](https://cloud.google.com/load-balancing)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Uncertain Reason\n\nThe following domains are in PROVISIONING state: {domains} for SSL certificate \"{name}\".\n\n### Uncertain Remediation\n\nThe provisioning process can take some time. The diagnostic process will continue checking other potential issues while the domains are provisioning.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/lb/analyze-rate-limited-domains.md",
    "content": "---\ntitle: \"lb/Analyze Rate Limited Domains\"\nlinkTitle: \"Analyze Rate Limited Domains\"\nweight: 3\ntype: docs\ndescription: >\n  Analyze domains in \"FAILED_RATE_LIMITED\" state.\n---\n\n**Product**: [Load balancing](https://cloud.google.com/load-balancing)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nThe following domains are in FAILED_RATE_LIMITED state: {domains} for SSL certificate \"{name}\". This indicates rate limiting by the Certificate Authority. This likely means the allowed number of certificate requests in a short period was exceeded.\n\n### Failure Remediation\n\nWait for a while and then check the certificate status again. If the issue persists, contact Google Cloud Support.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/lb/analyze-timeout-health-check-log.md",
    "content": "---\ntitle: \"lb/Analyze Timeout Health Check Log\"\nlinkTitle: \"Analyze Timeout Health Check Log\"\nweight: 3\ntype: docs\ndescription: >\n  Analyzes logs with the detailed health check state TIMEOUT\n---\n\n**Product**: [Load balancing](https://cloud.google.com/load-balancing)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nHealth check logs for backend service {bs_url} show the detailed health state \"TIMEOUT\".\n\nResponses received from backends: {probe_results_text_str}\n\nThe backend might be timing out because:\n\n1. The application is overloaded and taking too long to respond.\n\n2. The backend service or health check timeout is too low.\n\n3. Connection to the endpoint cannot be established - the backend instance has crashed or is otherwise unresponsive.\n\nThe following responses were received from your backends: {probe_results_text_str}\n\n### Failure Remediation\n\n\n1. Make sure that the backend service timeout (current value: {bs_timeout_sec}s) and health check timeout (current value: {hc_timeout_sec}s) are appropriately configured to accommodate the application's expected response time.\n\n2. Investigate the application's configuration to ensure it is correctly handling health check probe requests. {success_criteria}\n\n3. Check if firewall rules or iptables configurations are blocking the health check probes from reaching the backend instances, resulting in timeouts.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/lb/analyze-unhealthy-health-check-log.md",
    "content": "---\ntitle: \"lb/Analyze Unhealthy Health Check Log\"\nlinkTitle: \"Analyze Unhealthy Health Check Log\"\nweight: 3\ntype: docs\ndescription: >\n  Analyzes logs with detailed health state UNHEALTHY.\n---\n\n**Product**: [Load balancing](https://cloud.google.com/load-balancing)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nHealth check logs for backend service {bs_url} indicate a detailed health state of UNHEALTHY. The backend instances are reachable but are not passing the health check requirements.\n\nResponses received from backends: {probe_results_text_str}\n\n\n### Failure Remediation\n\n{success_criteria}\n\nInvestigate the configuration of the application to ensure it aligns with these health check expectations.\n\nIf a different endpoint should be checked or a different response is expected, adjust the health check settings accordingly.\n\nCommon reasons for UNHEALTHY detailed state:\n* Health check is configured for a path to which application is not responding. In this case, the probes are responded with 404 response. Solution is to either change the health check path or configure the application to provide a successful response on the path configured on the health check.\n* Backend server has received a HTTP request, which is not compliant with the application's expectations, from the health check probers. In this case, the probes are responded with 400 response. The failure message is 'Bad Request [Code: 400]'. Possible reason for the backend server to serve 400 response is:\n    * A missing or wrong Host header received.\n    * The health checker sends a request using a protocol version that the application doesn't support or expects in a different format. Examples:\n        * Client sends HTTP/1.0 but server requires HTTP/1.1+ and interprets the request as invalid.\n        * Client sends HTTP/2 frames to a plain HTTP/1.1 endpoint (without proper upgrade negotiation).\n        * Client sends TLS-encrypted data to an HTTP (non-TLS) port — server tries to parse the Client Hello as an HTTP request, resulting in an improper request, and returns 400.\n    * Unexpected query parameters in the request sent by the health check probers.\n* TLS version mismatch between the health check probers and the backend server. The failure message will be Connect failed.\n* Health check probes are responded with Service Unavailable, Service Temporarily Unavailable, Internal Server Error. In this case, the probes are responded with 5XX. Solution is to check:\n    * if the backend instances are experiencing high CPU, memory, or network utilization, and as a result the customer backends are responding with 5XX.\n    * if the instances are running a bad image. Bad instance images might have missing or improperly configured services, broken or ignored startup scripts, stale environment configurations.\n    * CheckInterval config on the health check might be too short, leading to an excessive number of health checks sent to the backends, leading to high network utilization on the backends\n* Some backends are configured to use a different port/protocol for health checks, than the named port assigned for traffic by the load balancer. In such a case, if the correct port is not configured in the backend, this can become problematic. In the health check logs, the failure explanation is visible as Connection refused, HTTP response: , Error: Connection refused or HTTP response: , Error: Connection reset by peer. Solution is to make the backend application listen on the port that is configured for the health check purposes or to change the health check port to the port on which the application is listening.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/lb/analyze-unknown-health-check-log.md",
    "content": "---\ntitle: \"lb/Analyze Unknown Health Check Log\"\nlinkTitle: \"Analyze Unknown Health Check Log\"\nweight: 3\ntype: docs\ndescription: >\n  Analyze logs with detailed health state UNKNOWN.\n---\n\n**Product**: [Load balancing](https://cloud.google.com/load-balancing)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nHealth check logs for backend service {bs_url} show entries with the detailed health state UNKNOWN. This indicates that the health checking system is aware of the instance, but its health status is undetermined. This situation can arise when a new endpoint is unresponsive to health checks and there's a substantial configured timeout period (approximately 25 seconds or longer). In such cases, the \"UNKNOWN\" state might be published while the health checker waits for the timeout to expire. Additionally, \"UNKNOWN\" could also be published during outage scenarios if the health checkers themselves are crashing. In this critical situation, endpoints that previously had known health states could transition to \"UNKNOWN\".\n\n### Failure Remediation\n\nFor new endpoints: Consider reducing the timeout period for health checks if appropriate, especially during initial setup or testing phases.\n\nFor potential Google Cloud outages: Use Personalized Service Health to check for any ongoing incidents that might be affecting the project or the specific service in question. If an incident is identified, follow any recommended mitigation steps or wait for the issue to be resolved by Google Cloud.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/lb/check-certificate-attachment.md",
    "content": "---\ntitle: \"lb/Check Certificate Attachment\"\nlinkTitle: \"Check Certificate Attachment\"\nweight: 3\ntype: docs\ndescription: >\n  Check if the SSL certificate is attached to a target proxy.\n---\n\n**Product**: [Load balancing](https://cloud.google.com/load-balancing)\\\n**Step Type**: GATEWAY\n\n### Description\n\nThis target proxy needs to be in use by a forwarding rule for the provisioning\n  to succeed.\n\n### Failure Reason\n\nThe SSL certificate \"{name}\" is not attached to any target proxies. Attach the certificate to a target proxy.\n\n### Failure Remediation\n\nFollow the documentation to attach the certificate to a target proxy: <https://cloud.google.com/load-balancing/docs/ssl-certificates/google-managed-certs#load-balancer>\n\n### Success Reason\n\nThe SSL certificate \"{name}\" is attached to target proxies ({target_proxies}) that are in use by forwarding rules.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/lb/check-past-health-check-success.md",
    "content": "---\ntitle: \"lb/Check Past Health Check Success\"\nlinkTitle: \"Check Past Health Check Success\"\nweight: 3\ntype: docs\ndescription: >\n  Checks if the health check has worked successfully in the past.\n---\n\n**Product**: [Load balancing](https://cloud.google.com/load-balancing)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Uncertain Remediation\n\nCheck the logs and monitoring metrics for the instances associated with backend service {bs_url}, focusing on recent timeframes to see if there were any errors, crashes, or resource exhaustion issues. Also inspect any application-specific logs for errors or warnings.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/lb/check-provisioning-time.md",
    "content": "---\ntitle: \"lb/Check Provisioning Time\"\nlinkTitle: \"Check Provisioning Time\"\nweight: 3\ntype: docs\ndescription: >\n  Checks if the SSL certificate associated resources has been updated recently.\n---\n\n**Product**: [Load balancing](https://cloud.google.com/load-balancing)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Success Reason\n\nNo recent changes were detected for forwarding rules and target proxies associated with the SSL certificate \"{name}\".\n\n### Uncertain Reason\n\nThe SSL certificate \"{name}\" has recently had associated resources modified. This might affect DNS validation. Details are below:\n{recently_changed}\n\n### Uncertain Remediation\n\nDNS validation automatically checks the domain's A and AAAA records against the Google Cloud load balancer's IP address. This process includes an automatic retry mechanism with increasing wait times. If {name} was recently attached to a target proxy or the target proxy to a forwarding rule, validation could take up to 24 hours to complete.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/lb/check-vm-performance.md",
    "content": "---\ntitle: \"lb/Check Vm Performance\"\nlinkTitle: \"Check Vm Performance\"\nweight: 3\ntype: docs\ndescription: >\n  Checks if the instances performance is degraded.\n---\n\n**Product**: [Load balancing](https://cloud.google.com/load-balancing)\\\n**Step Type**: COMPOSITE STEP\n\n### Description\n\nNone\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/lb/latency-end.md",
    "content": "---\ntitle: \"lb/Latency End\"\nlinkTitle: \"Latency End\"\nweight: 3\ntype: docs\ndescription: >\n  Concludes the latency diagnostics process.\n---\n\n**Product**: [Load balancing](https://cloud.google.com/load-balancing)\\\n**Step Type**: END\n\n### Description\n\nIf the issue persists, it directs the user to helpful\n  resources and suggests contacting support with a detailed report.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/lb/lb-backend-latency-check.md",
    "content": "---\ntitle: \"lb/Lb Backend Latency Check\"\nlinkTitle: \"Lb Backend Latency Check\"\nweight: 3\ntype: docs\ndescription: >\n  Check if backend latency exceeds the threshold\n---\n\n**Product**: [Load balancing](https://cloud.google.com/load-balancing)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nThe forwarding rule has a backend latency of {average_latency} ms. This is higher than the threshold value of {threshold} ms.\n\n### Failure Remediation\n\nInvestigate the increased backend latency. Check the health and performance of the backend instances, examining metrics such as CPU utilization, memory usage, and disk I/O.\n\n### Success Reason\n\nThe forwarding rule has a backend latency of {average_latency} ms. This is less than the threshold value of {threshold} ms.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/lb/lb-error-rate-check.md",
    "content": "---\ntitle: \"lb/Lb Error Rate Check\"\nlinkTitle: \"Lb Error Rate Check\"\nweight: 3\ntype: docs\ndescription: >\n  Check if error exceeds the threshold\n---\n\n**Product**: [Load balancing](https://cloud.google.com/load-balancing)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nThe forwarding rule has an average error rate of {average_error_rate}% in the last 15 minutes. This is higher than the threshold value of {threshold}%.\n\n### Failure Remediation\n\nA high error rate indicates potential problems with the backend service. Check the logs for 5xx errors and investigate the root cause. Common issues include application errors and resource exhaustion. If the errors correlate with specific requests, examine those requests for patterns or anomalies.\n\n### Success Reason\n\nThe forwarding rule has an average error rate of {average_error_rate}% in the last 15 minutes. This is less than the threshold value of {threshold}%.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/lb/lb-latency-start.md",
    "content": "---\ntitle: \"lb/Lb Latency Start\"\nlinkTitle: \"Lb Latency Start\"\nweight: 3\ntype: docs\ndescription: >\n  Fetch the specified forwarding rule\n---\n\n**Product**: [Load balancing](https://cloud.google.com/load-balancing)\\\n**Step Type**: START\n\n### Description\n\nNone\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/lb/lb-request-count-check.md",
    "content": "---\ntitle: \"lb/Lb Request Count Check\"\nlinkTitle: \"Lb Request Count Check\"\nweight: 3\ntype: docs\ndescription: >\n  Check if request count per second exceeds the threshold\n---\n\n**Product**: [Load balancing](https://cloud.google.com/load-balancing)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nThe forwarding rule has an average request count of {average_request_count} requests/s in the last 15 minutes. This is higher than the threshold value of {threshold}.\n\n### Failure Remediation\n\nThe high request count suggests the backend may be overloaded. Consider scaling up the backend by adding more instances or increasing the resources of existing instances.\n\n### Success Reason\n\nThe forwarding rule has an average request count of {average_request_count} requests/s in the last 15 minutes. This is less than the threshold value of {threshold}.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/lb/ssl-certificates-end.md",
    "content": "---\ntitle: \"lb/Ssl Certificates End\"\nlinkTitle: \"Ssl Certificates End\"\nweight: 3\ntype: docs\ndescription: >\n  Concludes the SSL Certificate diagnostics process.\n---\n\n**Product**: [Load balancing](https://cloud.google.com/load-balancing)\\\n**Step Type**: END\n\n### Description\n\nNone\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/lb/ssl-certificates-start.md",
    "content": "---\ntitle: \"lb/Ssl Certificates Start\"\nlinkTitle: \"Ssl Certificates Start\"\nweight: 3\ntype: docs\ndescription: >\n  Verify the existence type and status of the SSL certificate.\n---\n\n**Product**: [Load balancing](https://cloud.google.com/load-balancing)\\\n**Step Type**: START\n\n### Description\n\nNone\n\n### Failure Reason\n\nThe Google-managed SSL certificate \"{name}\" is not in ACTIVE state.\n\n### Success Reason\n\nThe SSL certificate \"{name}\" is in ACTIVE state.\n\n### Skipped Reason\n\nThe SSL certificate \"{name}\" does not exist or project {project_id} does not exist.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/lb/unhealthy-backends-end.md",
    "content": "---\ntitle: \"lb/Unhealthy Backends End\"\nlinkTitle: \"Unhealthy Backends End\"\nweight: 3\ntype: docs\ndescription: >\n  Concludes the unhealthy backends diagnostics process.\n---\n\n**Product**: [Load balancing](https://cloud.google.com/load-balancing)\\\n**Step Type**: END\n\n### Description\n\nIf the issue persists, it directs the user to helpful\n  resources and suggests contacting support with a detailed report.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/lb/unhealthy-backends-start.md",
    "content": "---\ntitle: \"lb/Unhealthy Backends Start\"\nlinkTitle: \"Unhealthy Backends Start\"\nweight: 3\ntype: docs\ndescription: >\n  Start step for Unhealthy Backends runbook.\n---\n\n**Product**: [Load balancing](https://cloud.google.com/load-balancing)\\\n**Step Type**: START\n\n### Description\n\nNone\n\n### Failure Reason\n\nThe backend service {name} in the {region} scope has unhealthy backends.\n\n{detailed_reason}\nThe backend service {name} uses the following health check: {hc_name}.\n\n{success_criteria}\n\n{timing_and_threshold}\n\n### Success Reason\n\nAll backends are currently healthy in backend service {name} in scope {region}.\n\n### Uncertain Reason\n\nAll backends are currently healthy in backend service {name} in scope {region}.\nHowever, health check logging is disabled, so recent unhealthy events could not be checked.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/lb/validate-backend-service-port-configuration.md",
    "content": "---\ntitle: \"lb/Validate Backend Service Port Configuration\"\nlinkTitle: \"Validate Backend Service Port Configuration\"\nweight: 3\ntype: docs\ndescription: >\n  Checks if health check sends probe requests to the different port than serving port.\n---\n\n**Product**: [Load balancing](https://cloud.google.com/load-balancing)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Success Reason\n\nThe load balancer is performing health checks on the same port used for serving traffic. This is the standard configuration.\n\n{port_mapping}\n\n### Uncertain Reason\n\nThe load balancer is conducting health checks on port {hc_port} for the backend service {bs_resource}. However, this health check port differs from the port used by the load balancer for serving traffic on some backend instance groups. The backend service is configured to use the \"{serving_port_name}\" port, which is then translated to a specific port number based on the \"{serving_port_name}\" port mapping within each backend instance group.\n\nAffected backends:\n\n{formatted_igs}\n\nThis configuration can be problematic unless the load balancer has been configured to use a different port for health checks purposefully.\n\n### Uncertain Remediation\n\n1.  **Verify Intent:** Confirm if the health check port `{hc_port}` is *meant* to be different from the serving port defined by \"{serving_port_name}\" on the backends.\n\n2.  **Test Port on Backend VMs:** Check if port `{hc_port}` is listening on an instance from the affected groups. Run this command from your local machine/Cloud Shell:\n\n    ```bash\n    gcloud compute ssh [INSTANCE_NAME] --zone [ZONE] --project {project_id} --command=\"sudo ss -tlnp | grep ':{hc_port}'\"\n    ```\n    *   Output showing `LISTEN` indicates the port is open and your application is likely listening.\n    *   No output suggests the port is not in a listening state on that VM.\n\n3.  **Adjust Configuration:**\n    *   **If Mismatch is Unintentional:** Align the load balancer's health check port in the backend service `{bs_resource}` to match the actual port number used by \"{serving_port_name}\" in the instance groups.\n    *   **If Mismatch is Intentional:** Ensure your application on the VMs is correctly configured to listen on port `{hc_port}`.\n    *   **If Port Not Listening:** Troubleshoot your application on the VM to ensure it's running and bound to port `{hc_port}`. Check the VM's local firewall as well.\n\nIf the health check port `{hc_port}` is meant to be different from the serving port (e.g., a dedicated management/health endpoint), confirm that your application is correctly configured to listen on the health check port.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/lb/validate-backend-service-protocol-configuration.md",
    "content": "---\ntitle: \"lb/Validate Backend Service Protocol Configuration\"\nlinkTitle: \"Validate Backend Service Protocol Configuration\"\nweight: 3\ntype: docs\ndescription: >\n  Checks if health check uses the same protocol as backend service for serving traffic.\n---\n\n**Product**: [Load balancing](https://cloud.google.com/load-balancing)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Success Reason\n\nThe load balancer is performing health checks using the same protocol ({hc_protocol}) used for serving traffic on backend service {bs_resource}. This is the standard configuration.\n\n### Uncertain Reason\n\nThe load balancer uses {serving_protocol} for traffic but {hc_protocol} for health checks on backend service {bs_resource}. If not intended, this protocol mismatch can lead to incorrect health assessments, potentially causing traffic to be sent to failing backends or triggering unnecessary failovers.\n\nHere are some examples of potentially problematic mismatches:\n\n*   **TLS vs. Non-TLS:**\n    *   Health Check: HTTPS, Backend: HTTP - The health check will try to initiate a TLS handshake, which will fail against a non-TLS server.\n    *   Health Check: HTTP, Backend: HTTPS - The health check sends plaintext, but the server expects TLS, likely resulting in a connection reset or protocol error.\n\n*   **Application Protocol Mismatch:**\n    *   Health Check: GRPC, Backend: HTTP - The health check speaks the GRPC protocol, but the backend expects standard HTTP requests.\n    *   Health Check: HTTP, Backend: SSL - The health check expects an HTTP application response, but the backend is configured for generic SSL, which might not involve HTTP.\n\n*   **Protocol Version/Feature Mismatch (Subtler issues even with the same base protocol):**\n    *   An HTTP/1.0 health check request to a server strictly requiring HTTP/1.1 features.\n    *   An HTTP/2 health check to a server only supporting HTTP/1.1 without proper negotiation.\n\n**Important:** Health checks using {hc_protocol} might be passing while the application serving {serving_protocol} traffic is failing because the success criteria for the two protocols can differ. More details on the health check success criteria can be found in [docs](https://cloud.google.com/load-balancing/docs/health-check-concepts#criteria-protocol-http).\n\n### Uncertain Remediation\n\n1.  Verify if this protocol difference is intentional and well-understood.\n2.  If not, **align the health check protocol with the serving protocol ({serving_protocol})** to ensure health checks accurately represent the backend's ability to serve traffic.\n3.  Consult the [Health Checks Overview](https://cloud.google.com/load-balancing/docs/health-check-concepts) for best practices.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/lb/verify-dns-records.md",
    "content": "---\ntitle: \"lb/Verify Dns Records\"\nlinkTitle: \"Verify Dns Records\"\nweight: 3\ntype: docs\ndescription: >\n  Check the DNS records for specific domain associated with the SSL certificate.\n---\n\n**Product**: [Load balancing](https://cloud.google.com/load-balancing)\\\n**Step Type**: GATEWAY\n\n### Description\n\nNone\n\n### Failure Reason\n\nDNS records for domain {domain} currently resolve to the following IP addresses: {unresolved_ip_addresses}. These IP addresses do not point to any load balancer associated with certificate {name}. Certificate provisioning is therefore blocked.\n\n### Failure Remediation\n\nConfigure DNS records for {domain} to point to the correct load balancer IP address(es) for certificate {name}.\n\nThe following load balancer IP addresses are associated with this certificate:\n\n{fr_ip_message}\n\nCheck: <https://cloud.google.com/load-balancing/docs/ssl-certificates/google-managed-certs#update-dns>\n\n### Success Reason\n\nDNS records for domain {domain} are correctly configured. All resolved IP addresses ({ip_addresses}) point to the load balancer(s) associated with certificate {name}.\n\n### Uncertain Reason\n\nSome DNS records for domain {domain} resolve to the following unexpected IP address(es): {unresolved_ip_addresses}.  While other records point to the expected IP addresses: {resolved_ip_addresses}. The unexpected IP addresses do not point to any load balancer associated with certificate {name}. This can cause certificate provisioning issues.\n\n### Uncertain Remediation\n\nConfigure DNS records for {domain} to point to the correct load balancer IP address(es) for certificate {name}.\n\nThe following load balancer IP addresses are associated with this certificate:\n\n{fr_ip_message}\n\nCheck: <https://cloud.google.com/load-balancing/docs/ssl-certificates/google-managed-certs#update-dns>\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/lb/verify-firewall-rules.md",
    "content": "---\ntitle: \"lb/Verify Firewall Rules\"\nlinkTitle: \"Verify Firewall Rules\"\nweight: 3\ntype: docs\ndescription: >\n  Checks if firewall rules are configured correctly.\n---\n\n**Product**: [Load balancing](https://cloud.google.com/load-balancing)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\n{insight}\nThe health checks are currently failing due to a misconfigured firewall. This prevents Google Cloud probers from connecting to the backends, causing the load balancer to consider them unhealthy.\n\n### Failure Remediation\n\nUpdate the firewall rules to allow inbound traffic from the Google Cloud health check IP ranges (found at <https://cloud.google.com/load-balancing/docs/health-check-concepts#ip-ranges>) to the backends.\n\n### Success Reason\n\nFirewall rules are correctly configured and are not blocking health check probes for backend service {bs_url}.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/lb/verify-forwarding-rules-port.md",
    "content": "---\ntitle: \"lb/Verify Forwarding Rules Port\"\nlinkTitle: \"Verify Forwarding Rules Port\"\nweight: 3\ntype: docs\ndescription: >\n  Checks if the load balancer is configured to listen on port 443.\n---\n\n**Product**: [Load balancing](https://cloud.google.com/load-balancing)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nMore specifically, check if all IP addresses associated with the certificate\n  have forwarding rules that listen on port 443\n\n### Failure Reason\n\n{misconfigured_entities}\nThere must be at least one load balancer's forwarding rule that uses TCP port 443 for the Google-managed certificate to be initially provisioned and automatically renewed.\n\n### Failure Remediation\n\nConfigure the load balancer to listen on port 443 for SSL certificate \"{name}\".\n\n### Success Reason\n\nThe SSL certificate \"{name}\" has forwarding rules configured for HTTPS (port 443) on all associated IP addresses.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/lb/verify-health-check-logging-enabled.md",
    "content": "---\ntitle: \"lb/Verify Health Check Logging Enabled\"\nlinkTitle: \"Verify Health Check Logging Enabled\"\nweight: 3\ntype: docs\ndescription: >\n  Check if health check logging is enabled.\n---\n\n**Product**: [Load balancing](https://cloud.google.com/load-balancing)\\\n**Step Type**: GATEWAY\n\n### Description\n\nNone\n\n### Success Reason\n\nHealth check logging is enabled for health check {hc_url}.\n\n### Uncertain Reason\n\nLogging is not enabled for health check {hc_url}. Lack of logs hinders troubleshooting, as logs provide visibility into health check state changes and probe details needed to diagnose failures.\n\n### Uncertain Remediation\n\nEnable logging for the health check using the following `gcloud` command:\n\n```\ngcloud compute health-checks update {protocol} {hc_name} {additional_flags} --enable-logging\n```\n\nThis will log any future changes in health status, but won't show past activity. Note that new health check logs will only appear when a health state transition occurs.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/lb/verify-no-certificate-map-conflict.md",
    "content": "---\ntitle: \"lb/Verify No Certificate Map Conflict\"\nlinkTitle: \"Verify No Certificate Map Conflict\"\nweight: 3\ntype: docs\ndescription: >\n  Checks for conflicting certificate map set on a target proxy.\n---\n\n**Product**: [Load balancing](https://cloud.google.com/load-balancing)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nThe following target proxies have a conflicting certificate map:\n\n{conflicting_target_proxies}.\n\nIf certificate map is set on a target proxy, the classic SSL certificates are ignored.\n\n### Failure Remediation\n\nIf this configuration is unintended, detach the certificate map from the target proxies.\n\n### Success Reason\n\nAll target proxies associated with the SSL certificate \"{name}\" do not have a certificate map.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/logs/_index.md",
    "content": "---\ntitle: \"LOGS\"\nlinkTitle: \"logs\"\ntype: docs\nweight: 2\n---\n\nAll steps available in logs\n"
  },
  {
    "path": "website/content/en/runbook/steps/logs/check-issue-log-entry.md",
    "content": "---\ntitle: \"logs/Check Issue Log Entry\"\nlinkTitle: \"Check Issue Log Entry\"\nweight: 3\ntype: docs\ndescription: >\n  Checks logs for problematic entry using filter string provided.\n---\n\n**Product**: [Cloud Logging](https://cloud.google.com/logging)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nAttributes:\n    project_id(str): Project ID to search for filter\n    filter_str(str): Filter written in log querying language:\n      https://cloud.google.com/logging/docs/view/query-library.\n      This field required because an empty filter matches all log entries.\n    template(str): Custom template for logging issues related to a resource\n      type\n    resource_name (Optional[str]): Resource identifier that will be used in\n      the custom template provided.\n\n### Failure Reason\n\nProblematic log entries found matching query:\n{query}\n\n### Failure Remediation\n\nRun the following Cloud Logging query in the Google Cloud console to find the log entry indicating the problem:\n\nQuery:\n{query}\n\n### Uncertain Reason\n\nNo problematic log entries found in the time range matching the following query:\n\n{query}\n\n### Uncertain Remediation\n\n\n1. Verify of the time range used in the filter matches that when the issue occurred and adjust it accordingly.\nQuery:\n{query}\n2. Verify that logging for the resource has not been disabled due to cost management: <https://cloud.google.com/blog/products/devops-sre/cloud-logging-cost-management-best-practices>\n\n### Skipped Reason\n\nCould not fetch log entries for the following due to {api_err}.\n\nQuery:\n{query}\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/logs/logs-check.md",
    "content": "---\ntitle: \"logs/Logs Check\"\nlinkTitle: \"Logs Check\"\nweight: 3\ntype: docs\ndescription: >\n  Assess if a given log query is present or not..\n---\n\n**Product**: [Cloud Logging](https://cloud.google.com/logging)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nChecks if a log attribute has a bad or good pattern\n\n### Failure Reason\n\nA known bad value is present within the checked log entry indicating a problem\n\n### Failure Remediation\n\nRun the following Cloud Logging query in the Google Cloud console to find the log entry indicating the problem:\n\nQuery:\n{query}\n\n### Success Reason\n\nThe expected good value is present within the checked log entry.\n\n### Uncertain Reason\n\nThe outcome could not be determined automatically. Manually verify the relevant details in [Cloud Logging](https://cloud.google.com/logging).\n\n### Uncertain Remediation\n\nRun the following Cloud Logging query in the Google Cloud console to manually review the relevant log entries:\n\nQuery:\n{query}\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/monitoring/_index.md",
    "content": "---\ntitle: \"MONITORING\"\nlinkTitle: \"monitoring\"\ntype: docs\nweight: 2\n---\n\nAll steps available in monitoring\n"
  },
  {
    "path": "website/content/en/runbook/steps/monitoring/time-series-check.md",
    "content": "---\ntitle: \"monitoring/Time Series Check\"\nlinkTitle: \"Time Series Check\"\nweight: 3\ntype: docs\ndescription: >\n  Assess if a given metric is has expected values..\n---\n\n**Product**: https://cloud.google.com/monitoring\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nCurrently checks if an attribute\n  - Currently checks if metrics exists indicating a problem\n  - Improve to be more flexible.\n\n### Failure Reason\n\nA known bad value is present within the checked metric collection.\n\n### Failure Remediation\n\nReview the metric data in Cloud Monitoring for more details.\n\nAlternatively, run the following Cloud Logging query:\n\nQuery:\n{query}\n\n### Success Reason\n\nThe expected good value is present within the checked metric collection.\n\n### Uncertain Reason\n\nThe metric data analysis was inconclusive. Manual investigation using Cloud Logging is recommended.\n\n### Uncertain Remediation\n\nReview the metric data in Cloud Monitoring for more details.\n\nAlternatively, run the following Cloud Logging query:\n\nQuery:\n{query}\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/nat/_index.md",
    "content": "---\ntitle: \"NAT\"\nlinkTitle: \"nat\"\ntype: docs\nweight: 2\n---\n\nAll steps available in nat\n"
  },
  {
    "path": "website/content/en/runbook/steps/nat/nat-allocation-failed-check.md",
    "content": "---\ntitle: \"nat/Nat Allocation Failed Check\"\nlinkTitle: \"Nat Allocation Failed Check\"\nweight: 3\ntype: docs\ndescription: >\n  Checks NAT Allocation failed metric for the NATGW.\n---\n\n**Product**: [Cloud NAT](https://cloud.google.com/nat)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nThis step determines whether Cloud NAT has run into issues due to insufficient\n  NAT IP addresses.\n  by checking the NAT Allocation failed metric.\n\n### Failure Reason\n\nNAT IP allocation failure found on the NAT Gateway: {nat_gateway_name}\n\n### Failure Remediation\n\nContinue the runbook for further diagnostic and remediation steps for the\nIP exhaustion issue on {nat_gateway_name}\n\n### Success Reason\n\nNo issues noticed on the NAT allocation failed metric for the NAT Gateway: {nat_gateway_name}\n\n### Uncertain Reason\n\nUnable to fetch the the nat_allocation_failed metric for the gateway: {nat_gateway_name}\n\n### Uncertain Remediation\n\nConfirm that the NAT Gateway name {nat_gateway_name} provided is correct and\nmetric for the gateway is visible on cloud console.\n\n### Skipped Reason\n\nNo issues detected on the nat_allocation_failed metric for the gateway: {nat_gateway_name}.\nChecks on the status of the cloud router for the NAT gateway: {router_name} does not indicate\nextra IPs are needed.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/nat/nat-dropped-received-packet-check.md",
    "content": "---\ntitle: \"nat/Nat Dropped Received Packet Check\"\nlinkTitle: \"Nat Dropped Received Packet Check\"\nweight: 3\ntype: docs\ndescription: >\n  Evaluates NATGW received_packets_dropped metric for issues.\n---\n\n**Product**: [Cloud NAT](https://cloud.google.com/nat)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nThis step determines whether the NATGW is dropping packets. NAT gateways could be dropping\n  packets for various reasons; however, the drops are not always indicative of an issue\n\n### Success Reason\n\n   No received_packet_drop on NAT GW {nat_gateway_name} seen.\n\n### Uncertain Reason\n\n   Elevated received_packet_drop_count metric noticed for NAT GW {nat_gateway_name}\n   dropped_received_packet: {metric_value}\n\n### Uncertain Remediation\n\n   NAT gateways could be dropping packets for various reasons; however, the drops are not always indicative of an issue.\n   Checking received_packet_drop metrics at the VM level as well. Open a case to GCP Support for confirmation\n   of the reason for the drops\n   See more on troubleshooting cloud NAT reducing the drops here [1] and [2]:\n   [1] <https://cloud.google.com/nat/docs/troubleshooting>\n   [2] <https://cloud.google.com/knowledge/kb/reduce-received-packets-dropped-count-on-cloud-nat-000006744>\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/nat/nat-ip-allocation-auto-only.md",
    "content": "---\ntitle: \"nat/Nat Ip Allocation Auto Only\"\nlinkTitle: \"Nat Ip Allocation Auto Only\"\nweight: 3\ntype: docs\ndescription: >\n  Provides recommendations when NAT IP allocation is AUTO_ONLY.\n---\n\n**Product**: [Cloud NAT](https://cloud.google.com/nat)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNAT IP allocation is configured as AUTO_ONLY, either:\n    - Switch to Manual NAT IP assignment or\n    - Add one more gateway in the same network and region\n\n### Failure Reason\n\nThe NAT Gateway {nat_gateway_name} is configured for automatic IP allocation\n\n### Failure Remediation\n\nTo resolve this issue, consider implementing the following options:\n\n1. Add one more NAT gateway in the same network and region.\n2. Switch to Manual NAT IP assignment.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/nat/nat-ip-allocation-failed-end.md",
    "content": "---\ntitle: \"nat/Nat Ip Allocation Failed End\"\nlinkTitle: \"Nat Ip Allocation Failed End\"\nweight: 3\ntype: docs\ndescription: >\n  Concludes the NAT IP allocation failed diagnostics process.\n---\n\n**Product**: [Cloud NAT](https://cloud.google.com/nat)\\\n**Step Type**: END\n\n### Description\n\nIf NAT allocation issues persist, it directs the user to helpful\n  resources and suggests contacting support with a detailed report.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/nat/nat-ip-allocation-failed-start.md",
    "content": "---\ntitle: \"nat/Nat Ip Allocation Failed Start\"\nlinkTitle: \"Nat Ip Allocation Failed Start\"\nweight: 3\ntype: docs\ndescription: >\n  Start Nat IP Allocation Failed Checks.\n---\n\n**Product**: [Cloud NAT](https://cloud.google.com/nat)\\\n**Step Type**: START\n\n### Description\n\nThis step steps starts the NAT IP Allocation Failed Check debugging process by\n  verifying the correct input parameters have been provided and checking to ensure\n  that the following resources exist.\n    - The Project\n    - VPC Network\n    - The NAT Cloud Router\n\n### Skipped Reason\n\nUnable to fetch the network {network} confirm it exists in the project {project_id}.\n\n\n### Skipped Reason [Alternative 2]\n\nCannot find the NAT cloud router: {cloud_router} in the region {region} for the project {project_id}\n\nCheck the cloud router name to ensure it exists in the project and rerun.\n\n\n### Skipped Reason [Alternative 3]\n\nCannot find the NAT Gateway: {nat_gateway} in the region {region} for the project {project_id}\n\nCheck the cloud router name to ensure it exists in the project and rerun.\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/nat/nat-ip-allocation-manual-only.md",
    "content": "---\ntitle: \"nat/Nat Ip Allocation Manual Only\"\nlinkTitle: \"Nat Ip Allocation Manual Only\"\nweight: 3\ntype: docs\ndescription: >\n  Investigates when NAT IP allocation is MANUAL_ONLY.\n---\n\n**Product**: [Cloud NAT](https://cloud.google.com/nat)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nIf the NAT IP allocation is configured as MANUAL_ONLY:\n    - Confirm if the number of NAT IP's required by the gateway is over 300\n    - Follow the NAT IP Quota Increase Process\n\n### Failure Reason\n\nThe number of NAT IPs in use on the NAT Gateway is >= 300 which is above the quota limit [1].\n\n1. <https://cloud.google.com/nat/quota#quotas>\n\n### Failure Remediation\n\nConsider creating additional NAT gateways or optimise port usage [1]:\n\n1. <https://cloud.google.com/nat/docs/troubleshooting#reduce-ports>\n\n### Success Reason\n\nChecking on the status and configuration of the Cloud NAT Router {router_name} and Gateway:\n\n1. Minimum extra NAT IPs Needed: {extra_ips_needed}\n2. Number of VM Endpoints With NAT mappings: {vms_with_nat_mappings}\n3. Dynamic port allocation enabled: {enable_dynamic_port_allocation}\n4. Number of NAT Gateway IPs in use: {nat_gw_ips_in_use}\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/nat/nat-ip-allocation-method-check.md",
    "content": "---\ntitle: \"nat/Nat Ip Allocation Method Check\"\nlinkTitle: \"Nat Ip Allocation Method Check\"\nweight: 3\ntype: docs\ndescription: >\n  Checks the NATGW configuration to determine next troubleshooting steps.\n---\n\n**Product**: [Cloud NAT](https://cloud.google.com/nat)\\\n**Step Type**: GATEWAY\n\n### Description\n\nChecks if the NATGW router is configured with manual or automatic IP allocation\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/nat/nat-ip-exhaustion-check.md",
    "content": "---\ntitle: \"nat/Nat Ip Exhaustion Check\"\nlinkTitle: \"Nat Ip Exhaustion Check\"\nweight: 3\ntype: docs\ndescription: >\n  Evaluates NATGW for NAT IP exhaustion/allocation issues.\n---\n\n**Product**: [Cloud NAT](https://cloud.google.com/nat)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nThis step determines whether Cloud NAT has run into issues due to insufficient NAT IP addresses.\n\n### Failure Reason\n\n   NAT IP allocation failure found on the NAT GW {nat_gateway_name}\n\n### Failure Remediation\n\n   IP exhaustion issues on {nat_gateway_name} can be remediated by taking the following steps in [1]:\n   [1] <https://cloud.google.com/knowledge/kb/cloud-nat-is-dropping-or-limiting-egress-connectivity-000004263#:~:text=If%20the%20metric%20indicates%20that,on%20the%20Port%20reservation%20procedure>\n\n### Success Reason\n\n   No IP exhaustion issues found on the NAT GW {nat_gateway_name}\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/nat/nat-resource-exhaustion-check.md",
    "content": "---\ntitle: \"nat/Nat Resource Exhaustion Check\"\nlinkTitle: \"Nat Resource Exhaustion Check\"\nweight: 3\ntype: docs\ndescription: >\n  Evaluates NATGW for OUT_OF_RESOURCES and ENDPOINT_INDEPENDENCE_CONFLICT issues.\n---\n\n**Product**: [Cloud NAT](https://cloud.google.com/nat)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nThis step determines whether Cloud NAT has run into resource issues.\n\n### Failure Reason\n\n   {metric_reason} issue found on the dropped_sent_packet metric on the NAT GW {nat_gateway_name}\n\n### Failure Remediation\n\n   Resource exhaustion issues can be remediated by taking the following steps in [1]:\n   [1] <https://cloud.google.com/knowledge/kb/cloud-nat-is-dropping-or-limiting-egress-connectivity-000004263#:~:text=If%20the%20metric%20indicates%20that,on%20the%20Port%20reservation%20procedure>\n\n### Success Reason\n\n   No {metric_reason} issues on the dropped_sent_packet metric for the NAT GW {nat_gateway_name} seen.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/pubsub/_index.md",
    "content": "---\ntitle: \"PUBSUB\"\nlinkTitle: \"pubsub\"\ntype: docs\nweight: 2\n---\n\nAll steps available in pubsub\n"
  },
  {
    "path": "website/content/en/runbook/steps/pubsub/active-subscription.md",
    "content": "---\ntitle: \"pubsub/Active Subscription\"\nlinkTitle: \"Active Subscription\"\nweight: 3\ntype: docs\ndescription: >\n  Has common step to validate if the subscription is active.\n---\n\n**Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nThis step checks if the subscription is in active (valid) state.\n\n### Failure Remediation\n\n  Increase subscription throughput to keep it active, or amend the persistence configuration. [1].\n\n  [1] <https://cloud.google.com/pubsub/docs/subscription-overview#lifecycle>.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/pubsub/big-query-table-existence-check.md",
    "content": "---\ntitle: \"pubsub/Big Query Table Existence Check\"\nlinkTitle: \"Big Query Table Existence Check\"\nweight: 3\ntype: docs\ndescription: >\n  Check that the BigQuery table exists.\n---\n\n**Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nBigQuery table {table_full_id} not found.\n### Failure Remediation\n\nPlease ensure the BigQuery table exists.\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/pubsub/big-query-writer-permission-check.md",
    "content": "---\ntitle: \"pubsub/Big Query Writer Permission Check\"\nlinkTitle: \"Big Query Writer Permission Check\"\nweight: 3\ntype: docs\ndescription: >\n  Check that the Pub/Sub service agent has writer permissions on the table.\n---\n\n**Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nThe Pub/Sub service account '{service_account}' does not have required BigQuery permissionson project '{project_id}'\n### Failure Remediation\n\nGrant the \"BigQuery Data Editor\" role (roles/bigquery.dataEditor) to the Pub/Sub service account:\n'{service_account}'\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/pubsub/check-gcs-bucket.md",
    "content": "---\ntitle: \"pubsub/Check Gcs Bucket\"\nlinkTitle: \"Check Gcs Bucket\"\nweight: 3\ntype: docs\ndescription: >\n  Checks if the target Cloud Storage bucket exists.\n---\n\n**Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nThis step checks if the target Cloud Storage bucket exists.\n\n### Failure Reason\n\nBucket not found.\n### Failure Remediation\n\nPlease ensure the Bucket exists.\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/pubsub/check-service-account-permissions.md",
    "content": "---\ntitle: \"pubsub/Check Service Account Permissions\"\nlinkTitle: \"Check Service Account Permissions\"\nweight: 3\ntype: docs\ndescription: >\n  Checks if the Pub/Sub service account has correct permissions on the bucket.\n---\n\n**Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nThis step checks if the Pub/Sub service account has correct permissions on the bucket\n\n### Failure Reason\n\nPub/Sub service account '{service_account}' is MISSING permission on bucket '{bucket_name}'\n### Failure Remediation\n\nGrant the Pub/Sub service account '{service_account}' at least the storage.objects.create and storage.buckets.get permissions on the bucket '{bucket_name}'.\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/pubsub/dead-letter-topic-permissions.md",
    "content": "---\ntitle: \"pubsub/Dead Letter Topic Permissions\"\nlinkTitle: \"Dead Letter Topic Permissions\"\nweight: 3\ntype: docs\ndescription: >\n  \"Verifies that the Pub/Sub service agent has the necessary IAM permissions   for the configured Dead Letter Topic.\n---\n\n**Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nThis step checks if the pubsub agent has the relevant permissions to move\n  messages whose processing has failed continuously to the dead letter topic.\n\n### Failure Remediation\n\n  Please ensure both the publisher role to the dead letter topic/project\n  level and the subscriber role at the subscription/project level to the\n  pubsub agent {} are assigned\n\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/pubsub/dead-letter-topic.md",
    "content": "---\ntitle: \"pubsub/Dead Letter Topic\"\nlinkTitle: \"Dead Letter Topic\"\nweight: 3\ntype: docs\ndescription: >\n  Has common step to check if the subscription has a dead letter topic.\n---\n\n**Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nThis step checks if the subscription has a Dead Letter Topic attached.\n  This is important to remove the messages that have failed processing out of the\n  main subscription.\n\n### Failure Reason\n\n  No dead letter topic attached. [1]\n\n  [1] <https://cloud.google.com/pubsub/docs/handling-failures#dead_letter_topic>\n\n### Failure Remediation\n\n  Add dead letter topic to deliver to the topic any messages whose delivery retries has exceeded the threshold.\n  Be aware that this is on best effort [1] and ensure the proper permissions are assigned [2].\n  Monitor dead-lettered message count[3] and pull from the subscription attached to the dead letter topic to investigate the message processing failures [4].\n\n  [1] <https://cloud.google.com/pubsub/docs/handling-failures#how_dead_letter_topics_work>\n  [2] <https://cloud.google.com/pubsub/docs/handling-failures#grant_forwarding_permissions>\n  [3] <https://cloud.google.com/pubsub/docs/handling-failures#monitor_forwarded_messages>\n  [4] <https://cloud.google.com/pubsub/docs/handling-failures#track-delivery-attempts>\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/pubsub/end-step.md",
    "content": "---\ntitle: \"pubsub/End Step\"\nlinkTitle: \"End Step\"\nweight: 3\ntype: docs\ndescription: >\n  Finalizing the runbook.\n---\n\n**Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\\\n**Step Type**: END\n\n### Description\n\nNone\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/pubsub/gcs-subscription-delivery-end.md",
    "content": "---\ntitle: \"pubsub/Gcs Subscription Delivery End\"\nlinkTitle: \"Gcs Subscription Delivery End\"\nweight: 3\ntype: docs\ndescription: >\n  End Step\n---\n\n**Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\\\n**Step Type**: END\n\n### Description\n\nNo more checks.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/pubsub/gcs-subscription-delivery-start.md",
    "content": "---\ntitle: \"pubsub/Gcs Subscription Delivery Start\"\nlinkTitle: \"Gcs Subscription Delivery Start\"\nweight: 3\ntype: docs\ndescription: >\n  Start GCS Subscription check\n---\n\n**Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\\\n**Step Type**: START\n\n### Description\n\nCheck that the project exists and is reachable.\n\n### Failure Reason\n\nProject '{project_id}' not found or no permission to access it.\n### Failure Remediation\n\nPlease check the project ID and your permissions.\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/pubsub/gcs-subscription-existence-check.md",
    "content": "---\ntitle: \"pubsub/Gcs Subscription Existence Check\"\nlinkTitle: \"Gcs Subscription Existence Check\"\nweight: 3\ntype: docs\ndescription: >\n  Check that the Pub/Sub subscription exists.\n---\n\n**Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nThis step checks that the Pub/Sub subscription exists and is a gcs subscription.\n\n### Failure Reason\n\nPub/Sub subscription '{subscription_name}' not found.\n### Failure Remediation\n\nPlease check the subscription ID and your permissions.\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/pubsub/investigate-bq-push-errors.md",
    "content": "---\ntitle: \"pubsub/Investigate Bq Push Errors\"\nlinkTitle: \"Investigate Bq Push Errors\"\nweight: 3\ntype: docs\ndescription: >\n  Investigate message backlog issues for BigQuery subscriptions using push metrics.\n---\n\n**Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\n  Message failures detected.\n\n  [1] <https://docs.cloud.google.com/pubsub/docs/reference/error-codes>\n\n### Failure Remediation\n\n  Handle message failures\n\n  When a Pub/Sub message cannot be written to BigQuery, the message cannot be acknowledged.\n  The Pub/Sub message forwarded to the dead-letter topic contains an attribute CloudPubSubDeadLetterSourceDeliveryErrorMessage that has the reason that the Pub/Sub message couldn't be written to BigQuery.\n\n  [1] <https://docs.cloud.google.com/pubsub/docs/bigquery#handle_message_failures>.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/pubsub/pubsub-quotas.md",
    "content": "---\ntitle: \"pubsub/Pubsub Quotas\"\nlinkTitle: \"Pubsub Quotas\"\nweight: 3\ntype: docs\ndescription: >\n  Has common step to check if any Pub/Sub quotas are being exceeded in the project.\n---\n\n**Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nThis step checks if any quotas have been exceeded.\n\n### Failure Reason\n\n  Quota exceeded errors found for the Pub/Sub service.\n\n### Failure Remediation\n\n  Refer to [1] for guidance on quota limits and how to resolve quota errors.\n\n  [1] <https://cloud.google.com/pubsub/quotas>.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/pubsub/pull-rate.md",
    "content": "---\ntitle: \"pubsub/Pull Rate\"\nlinkTitle: \"Pull Rate\"\nweight: 3\ntype: docs\ndescription: >\n  Has common step to check the high backlog vs the delivery rate ratio.\n---\n\n**Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\\\n**Step Type**: GATEWAY\n\n### Description\n\nNone\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/pubsub/pull-subscription-delivery-end.md",
    "content": "---\ntitle: \"pubsub/Pull Subscription Delivery End\"\nlinkTitle: \"Pull Subscription Delivery End\"\nweight: 3\ntype: docs\ndescription: >\n  End of this runbook.\n---\n\n**Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\\\n**Step Type**: END\n\n### Description\n\nNo more checks to perform.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/pubsub/pull-subscription-delivery-start.md",
    "content": "---\ntitle: \"pubsub/Pull Subscription Delivery Start\"\nlinkTitle: \"Pull Subscription Delivery Start\"\nweight: 3\ntype: docs\ndescription: >\n  Start step of runbook.\n---\n\n**Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\\\n**Step Type**: START\n\n### Description\n\nGets the subscription and confirms it exists in the project.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/pubsub/push-subscription-delivery-end.md",
    "content": "---\ntitle: \"pubsub/Push Subscription Delivery End\"\nlinkTitle: \"Push Subscription Delivery End\"\nweight: 3\ntype: docs\ndescription: >\n  End Step\n---\n\n**Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\\\n**Step Type**: END\n\n### Description\n\nNo more checks.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/pubsub/push-subscription-delivery-start.md",
    "content": "---\ntitle: \"pubsub/Push Subscription Delivery Start\"\nlinkTitle: \"Push Subscription Delivery Start\"\nweight: 3\ntype: docs\ndescription: >\n  Start step of runbook.\n---\n\n**Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\\\n**Step Type**: START\n\n### Description\n\nGets the subscription and confirms it exists in the project.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/pubsub/push_subscription_delivery-end.md",
    "content": "---\ntitle: \"pubsub/PushSubscriptionDelivery End\"\nlinkTitle: \"Push_subscription_delivery End\"\nweight: 3\ntype: docs\ndescription: >\n  End Step\n---\n\n**Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\\\n**Step Type**: END\n\n### Description\n\nNo more checks.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/pubsub/response-code-step.md",
    "content": "---\ntitle: \"pubsub/Response Code Step\"\nlinkTitle: \"Response Code Step\"\nweight: 3\ntype: docs\ndescription: >\n  Check push request responses from the endpoint.\n---\n\n**Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nThis step checks the responses coming from the endpoint and the\n  success rates.\n\n### Failure Reason\n\n  Non-OK responses from the endpoint detected [1].\n\n  [1] <https://cloud.google.com/pubsub/docs/push#receive_push>\n\n### Failure Remediation\n\n  Resolve the endpoint errors processing messages to enable successful delivery.\n\n  Common errors codes:\n  - 431: payload exceeds allowed header limits. Disable write metadata [1]\n  - 401/403: if enabled, ensure the push subscription authentication abides by the requirements. [2] Otherwise check permission errors at the endpoint.\n  - 400: investigate the correctness of the message attributes & the http endpoint.\n\n  [1] <https://cloud.google.com/pubsub/docs/payload-unwrapping#how_payload_unwrapping_works>.\n  [2] <https://cloud.google.com/pubsub/docs/authenticate-push-subscriptions#configure_for_push_authentication>.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/pubsub/start-step.md",
    "content": "---\ntitle: \"pubsub/Start Step\"\nlinkTitle: \"Start Step\"\nweight: 3\ntype: docs\ndescription: >\n  Check that the project exists and is reachable.\n---\n\n**Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\\\n**Step Type**: START\n\n### Description\n\nNone\n\n### Failure Reason\n\nProject '{project_id}' not found or no permission to access it.\n### Failure Remediation\n\nPlease check the project ID and your permissions.\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/pubsub/subscription-existence-check.md",
    "content": "---\ntitle: \"pubsub/Subscription Existence Check\"\nlinkTitle: \"Subscription Existence Check\"\nweight: 3\ntype: docs\ndescription: >\n  Check that the Pub/Sub subscription exists.\n---\n\n**Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nPub/Sub subscription '{subscription_name}' not found.\n### Failure Remediation\n\nPlease check the subscription ID and your permissions.\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/pubsub/subscription-status-check.md",
    "content": "---\ntitle: \"pubsub/Subscription Status Check\"\nlinkTitle: \"Subscription Status Check\"\nweight: 3\ntype: docs\ndescription: >\n  Check the status of the BigQuery subscription.\n---\n\n**Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Remediation\n\nThe topic schema and the BigQuery table schema might be incompatible.\nPlease check the schemas and ensure they are compatible.\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/pubsub/throughput-qualification.md",
    "content": "---\ntitle: \"pubsub/Throughput Qualification\"\nlinkTitle: \"Throughput Qualification\"\nweight: 3\ntype: docs\ndescription: >\n  Has common step to validate subscription qualification attributes.\n---\n\n**Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nThis step checks if the throughput qualification is in a good state.\n\n### Failure Reason\n\n  Low Health Score for the subscription for metrics {low_health_metrics}.\n\n### Failure Remediation\n\n  Monitor and resolve the health issues of the subscription by referring to [1].\n\n  [1] <https://cloud.google.com/pubsub/docs/monitoring#delivery_latency_health>.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/pubsub/vpc-sc-step.md",
    "content": "---\ntitle: \"pubsub/Vpc Sc Step\"\nlinkTitle: \"Vpc Sc Step\"\nweight: 3\ntype: docs\ndescription: >\n  Check if the VPC-SC api is enabled\n---\n\n**Product**: [Cloud Pub/Sub](https://cloud.google.com/pubsub/)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nThis step highlights caveats of using VPC-SC with push subscriptions\n\n### Failure Remediation\n\n  Beware of limitations when using push subscriptions with VPCSC [1] such as:\n  - You can't update existing push subscriptions, they continue to function but aren't protected by VPC Service Controls\n  - Custom domains don't work, you can only create new push subscriptions for which the push endpoint is set to a Cloud Run service\n  - You can only create new push subscriptions through Eventarc for Eventarc workflows\n  - Use the fully qualified name of the topic if terraform/deployment manager is used to attach dead letter topics\n\n  [1] <https://cloud.google.com/pubsub/docs/create-push-subscription#vpc-service-control>\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/vertex/_index.md",
    "content": "---\ntitle: \"VERTEX\"\nlinkTitle: \"vertex\"\ntype: docs\nweight: 2\n---\n\nAll steps available in vertex\n"
  },
  {
    "path": "website/content/en/runbook/steps/vertex/check-workbench-instance-compute-engine-ssh.md",
    "content": "---\ntitle: \"vertex/Check Workbench Instance Compute Engine Ssh\"\nlinkTitle: \"Check Workbench Instance Compute Engine Ssh\"\nweight: 3\ntype: docs\ndescription: >\n  Check if user is able to SSH to the Workbench Instance Compute Engine VM\n---\n\n**Product**: [Vertex AI](https://cloud.google.com/vertex-ai)\\\n**Step Type**: COMPOSITE STEP\n\n### Description\n\nCompute Engine might be running so the user can ssh to\n  inspect the VM\n\n### Success Reason\n\nOK! User can SHH and open a terminal in the Workbench Instance {instance_name}'s Compute Engine VM.\n\n### Uncertain Reason\n\nWorkbench Instance {instance_name}'s Compute Engine VM is not running.\nStatus: {status}\nYou cannot ssh to use terminal access and check for certain issues in the VM.\nFor example, space in \"/home/jupyter\" directory should remain below 85%\n\n### Uncertain Remediation\n\nTry restarting your instance or start your instance's VM via Compute Engine\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/vertex/check-workbench-instance-custom-scripts.md",
    "content": "---\ntitle: \"vertex/Check Workbench Instance Custom Scripts\"\nlinkTitle: \"Check Workbench Instance Custom Scripts\"\nweight: 3\ntype: docs\ndescription: >\n  Check if the Workbench Instance is using custom scripts\n---\n\n**Product**: [Vertex AI](https://cloud.google.com/vertex-ai)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nUsers have the option to add scripts to a Workbench Instance\n  via the metadata fields. However, scripts may change the\n  default behaviour or install libraries that break dependencies\n\n### Success Reason\n\nOK! Workbench Instance {instance_name} is not using custom post-startup or startup scripts.\n\n### Uncertain Reason\n\nWorkbench Instance {instance_name} has custom post-startup or startup scripts:\n- post-startup-script: {post_startup_script}\n- startup-script: {startup_script}\n- startup-script-url: {startup_script_url}\n\n### Uncertain Remediation\n\nScripts must ensure:\n- Jupyter runs on port 127.0.0.1:8080\n- If packages are installed they should not add breaking changes to the Jupyter configuration\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/vertex/check-workbench-instance-external-ip-disabled.md",
    "content": "---\ntitle: \"vertex/Check Workbench Instance External Ip Disabled\"\nlinkTitle: \"Check Workbench Instance External Ip Disabled\"\nweight: 3\ntype: docs\ndescription: >\n  Check if the Workbench Instance has external IP disabled\n---\n\n**Product**: [Vertex AI](https://cloud.google.com/vertex-ai)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nIf the instance has external IP disabled, user must configure\n  Private networking correctly\n\n### Success Reason\n\nOK! Workbench Instance {instance_name} has an external IP\n\n### Uncertain Reason\n\nWorkbench Instance {instance_name} has external IP disabled.\n\n- network: {network}\n- subnetwork: {subnetwork}\nThis may cause networking issues if configuration was not done correctly.\n\n### Uncertain Remediation\n\nFollow the public documentation to configure Private Networking for a Workbench Instance [1] [2] [3] [4]\n\n[1] <https://cloud.google.com/vertex-ai/docs/workbench/instances/create#network-options>\n[2] <https://cloud.google.com/vpc/docs/access-apis-external-ip#requirements>\n[3] <https://cloud.google.com/vpc/docs/configure-private-google-access>\n[4] <https://cloud.google.com/vpc/docs/configure-private-google-access#requirements>\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/vertex/check-workbench-instance-is-using-latest-env-version.md",
    "content": "---\ntitle: \"vertex/Check Workbench Instance Is Using Latest Env Version\"\nlinkTitle: \"Check Workbench Instance Is Using Latest Env Version\"\nweight: 3\ntype: docs\ndescription: >\n  Check if the Workbench Instance is using the latest environment version\n---\n\n**Product**: [Vertex AI](https://cloud.google.com/vertex-ai)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nWorkbench Instances can be upgraded regularly to have the latest fixes\n\n### Failure Reason\n\nWorkbench Instance {instance_name} is using a previous environment version M{environment_version}\n\n### Failure Remediation\n\nUpgrade the instance to use the latest version {upgrade_version} which has the latest updates and fixes [1]\nUpgrade version image: {upgrade_image}\nRemember to backup your data before an upgrade.\n[1] <https://cloud.google.com/vertex-ai/docs/workbench/instances/upgrade>\n\n### Success Reason\n\nOK! Workbench Instance {instance_name} is using the latest environment version M{environment_version}\n\n### Uncertain Reason\n\nWorkbench Instance {instance_name} should be in STOPPED state to check its upgradability.\nUpgradability info: {upgrade_info}\n\n### Uncertain Remediation\n\nStop the instance.\n\n\n### Uncertain Reason [Alternative 2]\n\nWorkbench Instance {instance_name} upgradability info:\n{upgrade_info}\n\n### Uncertain Remediation [Alternative 2]\n\nMake sure instance has the latest environment version.\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/vertex/check-workbench-instance-jupyter-space.md",
    "content": "---\ntitle: \"vertex/Check Workbench Instance Jupyter Space\"\nlinkTitle: \"Check Workbench Instance Jupyter Space\"\nweight: 3\ntype: docs\ndescription: >\n  Check if Jupyter space in \"home/jupyter\" is below 85%\n---\n\n**Product**: [Vertex AI](https://cloud.google.com/vertex-ai)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nIf Jupyter has ran out of space, the Workbench Instance\n  might not be able to start\n\n### Failure Reason\n\nWorkbench Instance {instance_name}'s space in \"/home/jupyter\" should remain below 85%\nThis will allow the instance to start correctly.\n\n### Failure Remediation\n\nDelete large files in \"/home/jupyter\" and restart the instance.\nYou may also run the following command to list large cache files and then manually delete them.\n- \"du -h /home/jupyter/.cache | sort -h\"\n\n### Success Reason\n\nOK! Workbench Instance {instance_name}'s \"/home/jupyter\" space usage is below 85%\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/vertex/check-workbench-instance-performance.md",
    "content": "---\ntitle: \"vertex/Check Workbench Instance Performance\"\nlinkTitle: \"Check Workbench Instance Performance\"\nweight: 3\ntype: docs\ndescription: >\n  Checks performance of a Workbench Instance by evaluating its memory, CPU, and disk utilization.\n---\n\n**Product**: [Vertex AI](https://cloud.google.com/vertex-ai)\\\n**Step Type**: COMPOSITE STEP\n\n### Description\n\nThis composite diagnostic step sequentially checks for high memory utilization, high disk\n  utilization, and CPU performance issues. It adds specific child steps designed to identify\n  and report potential performance bottlenecks that could impact the instance's operation.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/vertex/check-workbench-instance-syslogs-jupyter-running-on-port-8080.md",
    "content": "---\ntitle: \"vertex/Check Workbench Instance Syslogs Jupyter Running On Port 8080\"\nlinkTitle: \"Check Workbench Instance Syslogs Jupyter Running On Port 8080\"\nweight: 3\ntype: docs\ndescription: >\n  Check Jupyter is running on port 127.0.0.1:8080\n---\n\n**Product**: [Vertex AI](https://cloud.google.com/vertex-ai)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nJupyter should always run on port 127.0.0.1:8080\n  for the Workbench Instance to work correctly\n\n### Failure Reason\n\nWorkbench Instance {instance_name} syslogs indicate Jupyter is NOT running on port 127.0.0.1:8080\n\n### Failure Remediation\n\nIf the instance is stopped, start it and rerun this check.\nYou may also need to extend the logging query start and end times.\nOnly port 8080 is supported. Installed extensions, packages or custom scripts may cause the port to change.\n\n1. Try following documentation [1] [2] [3]\n2. If it doesn't work, recover data by diagnosing the instance with the --enable-copy-home-files [4]\n3. Create a new Instance and migrate your data [5]\n\n[1] <https://cloud.google.com/vertex-ai/docs/general/troubleshooting-workbench?component=any#verify-jupyter-service>\n[2] <https://cloud.google.com/vertex-ai/docs/general/troubleshooting-workbench?component=any#verify-jupyter-internal-api>\n[3] <https://cloud.google.com/vertex-ai/docs/general/troubleshooting-workbench?component=any#restart-jupyter-service>\n[4] <https://cloud.google.com/sdk/gcloud/reference/workbench/instances/diagnose>\n[5] <https://cloud.google.com/vertex-ai/docs/workbench/instances/migrate>\n\n### Success Reason\n\nOK! Workbench Instance {instance_name} syslogs indicate Jupyter is running on port 127.0.0.1:8080\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/vertex/check-workbench-instance-using-custom-container.md",
    "content": "---\ntitle: \"vertex/Check Workbench Instance Using Custom Container\"\nlinkTitle: \"Check Workbench Instance Using Custom Container\"\nweight: 3\ntype: docs\ndescription: >\n  Check if the Workbench Instance is using a custom container\n---\n\n**Product**: [Vertex AI](https://cloud.google.com/vertex-ai)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nUsers have the option to use custom containers to create Workbench Instances\n  If this is the case, this runbook doesn't apply\n\n### Success Reason\n\nOK! Workbench Instance {instance_name} is not using a custom container.\n\n### Uncertain Reason\n\nWARNING: This runbook may not be applicable for Workbench Instances created with a custom container.\n\n### Uncertain Remediation\n\nFollow the documentation to create a Workbench Instance with a custom container [1]\n[1] <https://cloud.google.com/vertex-ai/docs/workbench/instances/create-custom-container>\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/vertex/check-workbench-instance-using-official-image.md",
    "content": "---\ntitle: \"vertex/Check Workbench Instance Using Official Image\"\nlinkTitle: \"Check Workbench Instance Using Official Image\"\nweight: 3\ntype: docs\ndescription: >\n  Check if the Workbench Instance is using the official images\n---\n\n**Product**: [Vertex AI](https://cloud.google.com/vertex-ai)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nUsers have the option to create Workbench Instances with any image\n  However, only 'workbench-instances' official images are supported\n\n### Failure Reason\n\nimage: {image}\nimages without '{images_family}' text in the image name are not supported but might work with Workbench Instances [1]\n[1] <https://cloud.google.com/vertex-ai/docs/workbench/instances/introduction#limitations>\n\n### Failure Remediation\n\nUsers are responsible for customizing unsupported images or custom containers\nCreate a Workbench Instance with the official '{images_family}' family of images.\nOfficially supported images are found in the Google Cloud Console:\nVertex AI Workbench UI > Instances > Create form > Advanced > Environment > Previous versions dropdown.\nYou may also follow the documentation [1] to use Custom Containers\n[1] <https://cloud.google.com/vertex-ai/docs/workbench/instances/create-custom-container>\n\n### Success Reason\n\nOK! Workbench Instance {instance_name} is using an official '{image_family}' image: {image}\n\n### Uncertain Reason\n\nimage: {image}\n'{images_family}' images might work with Workbench Instances, but are unsupported [1]\n[1] <https://cloud.google.com/vertex-ai/docs/workbench/instances/introduction#limitations>\n\n### Uncertain Remediation\n\nOfficially supported images are found in the Google Cloud Console:\nVertex AI Workbench UI > Instances > Create form > Advanced > Environment > Previous versions dropdown.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/vertex/decision-check-workbench-instance-system-logging.md",
    "content": "---\ntitle: \"vertex/Decision Check Workbench Instance System Logging\"\nlinkTitle: \"Decision Check Workbench Instance System Logging\"\nweight: 3\ntype: docs\ndescription: >\n  Decision point to investigate Serial Port Logs\n---\n\n**Product**: [Vertex AI](https://cloud.google.com/vertex-ai)\\\n**Step Type**: GATEWAY\n\n### Description\n\nDecides whether its possible to check syslogs for the\n  Workbench Instance\n\n### Success Reason\n\nOK! Workbench Instance {instance_name} Serial Port Logging is enabled and instance is initializing.\nChecking Workbench Instance syslogs for issues\n\n### Uncertain Reason\n\nWorkbench Instance {instance_name} Serial Port Logging is disabled by org constraint '{constraint}'\n\n### Uncertain Remediation\n\nRemove org constraint '{constraint}' to analyze Workbench Instance system serial port logs.\n\n\n### Uncertain Reason [Alternative 2]\n\nWorkbench Instance {instance_name} not in PROVISIONING, STARTING or INITIALIZING state.\nCurrent state: {state}\n\n### Uncertain Remediation [Alternative 2]\n\nTry to start the instance.\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/vertex/workbench-instance-stuck-in-provisioning-end.md",
    "content": "---\ntitle: \"vertex/Workbench Instance Stuck In Provisioning End\"\nlinkTitle: \"Workbench Instance Stuck In Provisioning End\"\nweight: 3\ntype: docs\ndescription: >\n  Checking if the Workbench Instance is now in ACTIVE state.\n---\n\n**Product**: [Vertex AI](https://cloud.google.com/vertex-ai)\\\n**Step Type**: END\n\n### Description\n\nIf Workbench Instance is still stuck in PROVISIONING state, then\n  Diagnostic Logs should be captured and analyzed by the user or support\n\n### Failure Reason\n\nWorkbench Instance {instance_name} not in PROVISIONING, STARTING or INITIALIZING state.\n\n### Failure Remediation\n\nTry to start the instance.\n\n### Success Reason\n\nOK! Workbench Instance {instance_name} is already in ACTIVE state.\nWARNING: This runbook is intended for instances that are stuck in PROVISIONING state.\n\n### Uncertain Reason\n\nWorkbench Instance {instance_name} not in PROVISIONING, STARTING or INITIALIZING state.\n\n### Uncertain Remediation\n\nTry to start the instance.\n\n\n### Success Reason [Alternative 2]\n\nOK! Workbench Instance {instance_name} is already in ACTIVE state.\nThe issue is solved!!!\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/vertex/workbench-instance-stuck-in-provisioning-start.md",
    "content": "---\ntitle: \"vertex/Workbench Instance Stuck In Provisioning Start\"\nlinkTitle: \"Workbench Instance Stuck In Provisioning Start\"\nweight: 3\ntype: docs\ndescription: >\n  Checking if the Workbench Instance is in PROVISIONING state and gathering its details.\n---\n\n**Product**: [Vertex AI](https://cloud.google.com/vertex-ai)\\\n**Step Type**: START\n\n### Description\n\nIf the instance is stopped, user must try to start it to start the checks\n\n### Failure Reason\n\nWorkbench Instance {instance_name} not in PROVISIONING, STARTING or INITIALIZING state.\n\n### Failure Remediation\n\nTry to start the instance.\n\n### Success Reason\n\nOK! Workbench Instance {instance_name} is already in ACTIVE state.\nWARNING: This runbook is intended for instances that are stuck in PROVISIONING state.\n\n### Uncertain Reason\n\nWorkbench Instance {instance_name} not in PROVISIONING, STARTING or INITIALIZING state.\n\n### Uncertain Remediation\n\nTry to start the instance.\n\n\n### Success Reason [Alternative 2]\n\nOK! Workbench Instance {instance_name} is already in ACTIVE state.\nThe issue is solved!!!\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/vpc/_index.md",
    "content": "---\ntitle: \"VPC\"\nlinkTitle: \"vpc\"\ntype: docs\nweight: 2\n---\n\nAll steps available in vpc\n"
  },
  {
    "path": "website/content/en/runbook/steps/vpc/external-interface-check.md",
    "content": "---\ntitle: \"vpc/External Interface Check\"\nlinkTitle: \"External Interface Check\"\nweight: 3\ntype: docs\ndescription: >\n  Check connectivity to external endpoint when the VM has an external IP address.\n---\n\n**Product**: [Virtual Private Cloud](https://cloud.google.com/vpc)\\\n**Step Type**: COMPOSITE STEP\n\n### Description\n\nThis step checks firewall and routing rules exist to allow for connectivity to the\n  external IP address. It also runs and reports a connectivity test.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/vpc/internal-interface-check.md",
    "content": "---\ntitle: \"vpc/Internal Interface Check\"\nlinkTitle: \"Internal Interface Check\"\nweight: 3\ntype: docs\ndescription: >\n  Check connectivity to external endpoint when the VM source NIC is an internal interface.\n---\n\n**Product**: [Virtual Private Cloud](https://cloud.google.com/vpc)\\\n**Step Type**: COMPOSITE STEP\n\n### Description\n\nThis step checks firewall and routing rules exist to allow for connectivity to the external\n  IP address. It also runs and reports a connectivity test.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/vpc/vm-external-ip-connectivity-end.md",
    "content": "---\ntitle: \"vpc/Vm External Ip Connectivity End\"\nlinkTitle: \"Vm External Ip Connectivity End\"\nweight: 3\ntype: docs\ndescription: >\n  Concludes the VM External IP connectivity diagnostics process.\n---\n\n**Product**: [Virtual Private Cloud](https://cloud.google.com/vpc)\\\n**Step Type**: END\n\n### Description\n\nIf external connectivity issues persist, it directs the user to helpful\n  resources and suggests contacting support with a detailed report.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/vpc/vm-external-ip-connectivity-start.md",
    "content": "---\ntitle: \"vpc/Vm External Ip Connectivity Start\"\nlinkTitle: \"Vm External Ip Connectivity Start\"\nweight: 3\ntype: docs\ndescription: >\n  Start VM external connectivity checks\n---\n\n**Product**: [Virtual Private Cloud](https://cloud.google.com/vpc)\\\n**Step Type**: START\n\n### Description\n\nNone\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/vpc/vm-external-ip-connectivity-test.md",
    "content": "---\ntitle: \"vpc/Vm External Ip Connectivity Test\"\nlinkTitle: \"Vm External Ip Connectivity Test\"\nweight: 3\ntype: docs\ndescription: >\n  Runs a network connectivity test from VM to a destination endpoint.\n---\n\n**Product**: [Virtual Private Cloud](https://cloud.google.com/vpc)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nEvaluates the connectivity test for any issues and reports to the user.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/vpc/vm-has-external-ip.md",
    "content": "---\ntitle: \"vpc/Vm Has External Ip\"\nlinkTitle: \"Vm Has External Ip\"\nweight: 3\ntype: docs\ndescription: >\n  Checks if the source NIC provided has an external IP address or not.\n---\n\n**Product**: [Virtual Private Cloud](https://cloud.google.com/vpc)\\\n**Step Type**: GATEWAY\n\n### Description\n\nBased on the source NIC, IP address type, diagnostic process would be directed towards\n  troubleshooting NATGW or direct external connectivity\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/vpc/vpc-firewall-check.md",
    "content": "---\ntitle: \"vpc/Vpc Firewall Check\"\nlinkTitle: \"Vpc Firewall Check\"\nweight: 3\ntype: docs\ndescription: >\n  Checks if ingress or egress traffic is allowed to a GCE Instance from a specified source IP.\n---\n\n**Product**: [Virtual Private Cloud](https://cloud.google.com/vpc)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nEvaluates VPC firewall rules to verify if a GCE Instance permits ingress or egress traffic from a\n  designated source IP through a specified port and protocol.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/vpc/vpc-route-check.md",
    "content": "---\ntitle: \"vpc/Vpc Route Check\"\nlinkTitle: \"Vpc Route Check\"\nweight: 3\ntype: docs\ndescription: >\n  Checks VPC route for routing rule exists to the destination IP address.\n---\n\n**Product**: [Virtual Private Cloud](https://cloud.google.com/vpc)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nEvaluates the VPC routing rules for the most specific route that\n  - matches the destination IP address on the VPC route selection order.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/vpn/_index.md",
    "content": "---\ntitle: \"VPN\"\nlinkTitle: \"vpn\"\ntype: docs\nweight: 2\n---\n\nAll steps available in vpn\n"
  },
  {
    "path": "website/content/en/runbook/steps/vpn/tunnel-down-status-reason.md",
    "content": "---\ntitle: \"vpn/Tunnel Down Status Reason\"\nlinkTitle: \"Tunnel Down Status Reason\"\nweight: 3\ntype: docs\ndescription: >\n  Checks the status of the tunnel and provides reasons for failure.\n---\n\n**Product**: [Vpn](https://cloud.google.com/hybrid-connectivity)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nVPN tunnel '{tunnel}' in project '{project}' is in status '{tunnel.status}': {issue}\n\n### Failure Remediation\n\n{remediations}\n\n### Success Reason\n\nVPN tunnel '{tunnel}' in project '{project}' is in status '{tunnel.status}': No relevant logs found during the chosen TimeFrame\n\n### Skipped Reason\n\nPlease verify the tunnel and project details provided are accurate.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/vpn/tunnel-packets-drop-check.md",
    "content": "---\ntitle: \"vpn/Tunnel Packets Drop Check\"\nlinkTitle: \"Tunnel Packets Drop Check\"\nweight: 3\ntype: docs\ndescription: >\n  Checking the VPN Tunnel Packet Drop\n---\n\n**Product**: [Vpn](https://cloud.google.com/hybrid-connectivity)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\n{issue}\n\n### Failure Remediation\n\n{remediations}\n\n### Success Reason\n\nVPN tunnel '{tunnel}' in project '{project}' is in status '{tunnel.status}': No Packet drop during the chosen TimeFrame\n\n### Skipped Reason\n\n{issue}\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/vpn/tunnel-packets-utilization-check.md",
    "content": "---\ntitle: \"vpn/Tunnel Packets Utilization Check\"\nlinkTitle: \"Tunnel Packets Utilization Check\"\nweight: 3\ntype: docs\ndescription: >\n  Checking the VPN Tunnel Packet Utilization\n---\n\n**Product**: [Vpn](https://cloud.google.com/hybrid-connectivity)\\\n**Step Type**: AUTOMATED STEP\n\n### Description\n\nNone\n\n### Failure Reason\n\nVPN tunnel '{tunnel}' in project '{project}': {issue}\n\n### Failure Remediation\n\n{remediations}\n\n### Success Reason\n\nVPN tunnel '{tunnel}' in project '{project}' is in status '{tunnel.status}': Packet did not reach max value during the chosen TimeFrame\n\n### Skipped Reason\n\n{issue}\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/vpn/vpn-tunnel-check-end.md",
    "content": "---\ntitle: \"vpn/Vpn Tunnel Check End\"\nlinkTitle: \"Vpn Tunnel Check End\"\nweight: 3\ntype: docs\ndescription: >\n  Concludes the diagnostics process.\n---\n\n**Product**: [Vpn](https://cloud.google.com/hybrid-connectivity)\\\n**Step Type**: END\n\n### Description\n\nNone\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/runbook/steps/vpn/vpn-tunnel-status.md",
    "content": "---\ntitle: \"vpn/Vpn Tunnel Status\"\nlinkTitle: \"Vpn Tunnel Status\"\nweight: 3\ntype: docs\ndescription: >\n  Checking the VPN Tunnel status\n---\n\n**Product**: [Vpn](https://cloud.google.com/hybrid-connectivity)\\\n**Step Type**: START\n\n### Description\n\nNone\n\n### Failure Reason\n\nVPN tunnel '{tunnel}' in project '{project}': {issue}\n\n### Failure Remediation\n\n{remediations}\n\n### Success Reason\n\nVPN tunnel '{tunnel}' in project '{project}' is in status '{tunnel.status}'.\n\n\n\n<!--\nThis file is auto-generated. DO NOT EDIT\n\nMake pages changes in the corresponding jinja template\nor python code\n-->\n"
  },
  {
    "path": "website/content/en/search.md",
    "content": "---\ntitle: Search Results\nlayout: search\nhide_summary: true\n---\n"
  },
  {
    "path": "website/go.mod",
    "content": "module gcpdiag/website\n\ngo 1.24.5\n\nrequire (\ngithub.com/google/docsy v0.12.0 // indirect\ngithub.com/google/docsy/dependencies v0.7.2 // indirect\n)\n"
  },
  {
    "path": "website/go.sum",
    "content": "github.com/FortAwesome/Font-Awesome v0.0.0-20230327165841-0698449d50f2/go.mod h1:IUgezN/MFpCDIlFezw3L8j83oeiIuYoj28Miwr/KUYo=\ngithub.com/FortAwesome/Font-Awesome v0.0.0-20241216213156-af620534bfc3/go.mod h1:IUgezN/MFpCDIlFezw3L8j83oeiIuYoj28Miwr/KUYo=\ngithub.com/google/docsy v0.12.0 h1:CddZKL39YyJzawr8GTVaakvcUTCJRAAYdz7W0qfZ2P4=\ngithub.com/google/docsy v0.12.0/go.mod h1:1bioDqA493neyFesaTvQ9reV0V2vYy+xUAnlnz7+miM=\ngithub.com/google/docsy/dependencies v0.7.2 h1:+t5ufoADQAj4XneFphz4A+UU0ICAxmNaRHVWtMYXPSI=\ngithub.com/google/docsy/dependencies v0.7.2/go.mod h1:gihhs5gmgeO+wuoay4FwOzob+jYJVyQbNaQOh788lD4=\ngithub.com/twbs/bootstrap v5.2.3+incompatible/go.mod h1:fZTSrkpSf0/HkL0IIJzvVspTt1r9zuf7XlZau8kpcY0=\ngithub.com/twbs/bootstrap v5.3.6+incompatible/go.mod h1:fZTSrkpSf0/HkL0IIJzvVspTt1r9zuf7XlZau8kpcY0=\n"
  },
  {
    "path": "website/hugo.sh",
    "content": "#!/bin/bash\nset -eu # set bash strict mode to catch subtle bugs\n\nIMAGE=us-docker.pkg.dev/gcpdiag-dist/common/gcpdiag-hugo:0.3\nSUPPORTED_RUNTIME=\"docker podman\"\n\n# If no arguments are provided, default to 'server' in interactive shells\n# and 'build' in non-interactive (CI/CD) shells.\nif [ \"$#\" -eq 0 ]; then\n  if [ -t 0 ]; then\n    set -- \"server\"\n  else\n    set -- \"build\"\n  fi\nfi\n\n# If the command is 'server', add default arguments for local development\nif [ \"$1\" = \"server\" ]; then\n  shift\n  set -- \"server\" \"--bind\" \"0.0.0.0\" \"-b\" \"http://localhost:1313\" \"$@\"\nfi\n\nmkdir -p \"$HOME/.config/gcloud\"\n\n[ -t 0 ] && USE_TTY=\"-it\"\n\n# Set RUNTIME based on available container runtime cmd\nfor r in $SUPPORTED_RUNTIME; do\n  if command -v \"$r\" >/dev/null; then\n    RUNTIME=\"$r\"\n    break\n  fi\ndone\n\nif [ -z \"$RUNTIME\" ]; then\n  >&2 echo \"No container runtime found - supported: $SUPPORTED_RUNTIME\"\n  exit 1\nfi\n\nif [ \"$RUNTIME\" = podman ]; then\n  export PODMAN_USERNS=keep-id\nfi\n\nexec \"$RUNTIME\" run ${USE_TTY:-} \\\n  --rm \\\n  -u \"$(id -u):$(id -g)\" \\\n  -e \"USER=$(id -n -u)\" \\\n  -e \"GROUP=$(id -n -g)\" \\\n  -e \"SHELL=/bin/bash\" \\\n  -e HOME -e LANG \\\n  -e GOOGLE_APPLICATION_CREDENTIALS \\\n  -w /src \\\n  -v \"$(pwd):/src\" \\\n  -v \"$HOME/.config/gcloud:$HOME/.config/gcloud\" \\\n  -p 1313:1313 \\\n  \"$IMAGE\" \\\n  \"$@\"\n"
  },
  {
    "path": "website/i18n/en.toml",
    "content": "# original version: \"Create documentation issue\"\n# we make it shorter so that it doesn't wrap\n\n[post_create_issue]\nother = \"Create issue\"\n"
  },
  {
    "path": "website/layouts/404.html",
    "content": "{{ define \"main\"}}\n    <main id=\"main\">\n      <div>\n       <h1 id=\"title\">Not found</h1>\n       <p>Oops! This page doesn't exist. Try going back to our <a href=\"{{ \"/\" | relURL }}\">home page</a>.</p>\n      </div>\n    </main>\n{{ end }}\n"
  },
  {
    "path": "website/layouts/docs/baseof.html",
    "content": "<!doctype html>\n<html lang=\"{{ .Site.Language.Lang }}\" class=\"no-js\">\n  <head>\n    {{ partial \"head.html\" . }}\n  </head>\n  <body class=\"td-{{ .Kind }}\">\n    <header>\n      {{ partial \"navbar.html\" . }}\n    </header>\n    <div class=\"container-fluid td-outer\">\n      <div class=\"td-main\">\n        <div class=\"row flex-xl-nowrap\">\n          <aside class=\"col-12 col-md-3 col-xl-2 td-sidebar d-print-none\">\n            {{ partial \"sidebar.html\" . }}\n          </aside>\n          <aside class=\"d-none d-xl-block col-xl-2 td-sidebar-toc d-print-none\">\n            {{ partial \"toc.html\" . }}\n            {{ partial \"page-meta-links.html\" . }}\n            {{ partial \"taxonomy_terms_clouds.html\" . }}\n          </aside>\n          <main class=\"col-12 col-md-9 col-xl-8 pl-md-5\" role=\"main\">\n            {{ partial \"version-banner.html\" . }}\n            {{ if not .Site.Params.ui.breadcrumb_disable }}{{ partial \"breadcrumb.html\" . }}{{ end }}\n            {{ block \"main\" . }}{{ end }}\n          </main>\n        </div>\n      </div>\n      {{ partial \"footer.html\" . }}\n    </div>\n    {{ partial \"scripts.html\" . }}\n  </body>\n</html>\n"
  },
  {
    "path": "website/layouts/partials/navbar.html",
    "content": "{{ $cover := .HasShortcode \"blocks/cover\" }}\n<nav class=\"js-navbar-scroll navbar navbar-expand navbar-light {{ if not $cover }} nav-shadow {{ end }}flex-column flex-md-row td-navbar\">\n\n\t<a id=\"gcpdiag-top\" {{ if $cover }} style=\"display: none;\" {{end}} class=\"navbar-brand\" href=\"{{ .Site.Home.RelPermalink }}\">\n          <img src=\"{{ \"/images/stethoscope.png\" | relURL }}\" height=\"30\"><span class=\"fw-normal\">&nbsp;{{ .Site.Title }}</span>\n\t</a>\n\n\t<div class=\"td-navbar-nav-scroll ms-md-auto me-5\" id=\"main_navbar\">\n\t\t<ul class=\"navbar-nav mt-2 mt-lg-0\">\n\t\t\t{{ $p := . }}\n\t\t\t{{ range .Site.Menus.main }}\n\t\t\t<li class=\"nav-item mr-4 mb-2 mb-lg-0\">\n\t\t\t\t{{ $active := or ($p.IsMenuCurrent \"main\" .) ($p.HasMenuCurrent \"main\" .) }}\n\t\t\t\t{{ with .Page }}\n\t\t\t\t{{ $active = or $active ( $.IsDescendant .)  }}\n\t\t\t\t{{ end }}\n\t\t\t\t<a class=\"nav-link{{if $active }} active{{end}}\" href=\"{{ with .Page }}{{ .RelPermalink }}{{ else }}{{ .URL | relLangURL }}{{ end }}\"><span{{if $active }} class=\"active\"{{end}}>{{ .Name }}</span></a>\n\t\t\t</li>\n\t\t\t{{ end }}\n\t\t\t{{ if  (gt (len .Site.Home.Translations) 0) }}\n\t\t\t<li class=\"nav-item dropdown d-none d-lg-block\">\n\t\t\t\t{{ partial \"navbar-lang-selector.html\" . }}\n\t\t\t</li>\n\t\t\t{{ end }}\n\t\t</ul>\n\t</div>\n\t<div class=\"navbar-nav me-lg-5 d-none d-lg-block\">{{ partial \"search-input.html\" . }}</div>\n</nav>\n"
  },
  {
    "path": "website/layouts/partials/page-meta-links.html",
    "content": "{{ if .Path }}\n  {{ $pathFormatted := replace .Path \"\\\\\" \"/\" }}\n  {{ $gh_repo := ($.Param \"github_repo\") }}\n  {{ $gh_subdir := ($.Param \"github_subdir\") }}\n  {{ $gh_project_repo := ($.Param \"github_project_repo\") }}\n  {{ $gh_branch := (default \"master\" ($.Param \"github_branch\")) }}\n  <div class=\"td-page-meta ml-0 pb-1 pt-0 mb-0\">\n  {{ if $gh_repo }}\n    {{ $gh_repo_path := printf \"%s/content/%s\" $gh_branch $pathFormatted }}\n    {{ if and ($gh_subdir) (.Site.Language.Lang) }}\n      {{ $gh_repo_path = printf \"%s/%s/content/%s/%s\" $gh_branch $gh_subdir ($.Site.Language.Lang) $pathFormatted }}\n    {{ else if .Site.Language.Lang }}\n      {{ $gh_repo_path = printf \"%s/content/%s/%s\" $gh_branch ($.Site.Language.Lang) $pathFormatted }}\n    {{ else if $gh_subdir }}\n      {{ $gh_repo_path = printf \"%s/%s/content/%s\" $gh_branch $gh_subdir $pathFormatted }}\n    {{ end }}\n    {{ $editURL := printf \"%s/edit/%s\" $gh_repo $gh_repo_path }}\n    {{ $createURL := printf \"%s/edit/%s\" $gh_repo $gh_repo_path }}\n    {{ $issuesURL := printf \"%s/issues/new?title=%s\" $gh_repo (htmlEscape $.Title )}}\n    {{ $newPageStub := resources.Get \"stubs/new-page-template.md\" }}\n    {{ $newPageQS := querify \"value\" $newPageStub.Content \"filename\" \"change-me.md\" | safeURL }}\n    {{ $newPageURL := printf \"%s/new/%s?%s\"  $gh_repo $gh_repo_path $newPageQS }}\n\n    <a href=\"{{ $editURL }}\" target=\"_blank\"><i class=\"fa fa-edit fa-fw\"></i> {{ T \"post_edit_this\" }}</a>\n    <a href=\"{{ $issuesURL }}\" target=\"_blank\" class=\"mb-2\"><i class=\"fab fa-github fa-fw\"></i> {{ T \"post_create_issue\" }}</a>\n    {{ if $gh_project_repo }}\n      {{ $project_issueURL := printf \"%s/issues/new\" $gh_project_repo }}\n      <a href=\"{{ $project_issueURL }}\" target=\"_blank\"><i class=\"fas fa-tasks fa-fw\"></i> {{ T \"post_create_project_issue\" }}</a>\n    {{ end }}\n\n  {{ end }}\n  {{ with .CurrentSection.AlternativeOutputFormats.Get \"print\" }}\n    <a id=\"print\" href=\"{{ .Permalink | safeURL }}\"><i class=\"fa fa-print fa-fw\"></i> {{ T \"print_entire_section\" }}</a>\n  {{ end }}\n  </div>\n{{ end }}\n"
  },
  {
    "path": "website/layouts/shortcodes/blocks/cover.html",
    "content": "{{ $col_id := .Get \"color\" | default \"dark\" }}\n{{/* Height can be one of: auto, min, med, max, full. */}}\n{{ $height := .Get \"height\" | default \"max\"  }}\n<section class=\"row td-cover-block td-cover-block--height-{{ $height }} js-td-cover td-overlay td-overlay--light -bg-{{ $col_id }}\">\n  <div class=\"container td-overlay__inner text-center\">\n    <div class=\"row align-items-end justify-content-center\">\n      <div class=\"col-lg-6\">\n        <div class=\"d-inline-block text-start\">\n          <h1 class=\"fw-normal display-3 mt-0 pb-4\">\n            <img alt=\"gcpdiag logo\" width=\"80\" src=\"images/stethoscope.png\" class=\"me-3\" />\n              gcpdiag\n          </h1>\n          <p class=\"display-4 mb-0 pb-3\">Diagnostics for<br>Google Cloud Platform</p>\n        </div>\n      </div>\n      <div class=\"col-lg-6 mt-5 mt-lg-3 d-sm-block\" style=\"display: none\">\n          <img alt=\"gcpdiag demo\" id=\"gcpdiag-demo-cover\" src=\"images/gcpdiag-demo-cover.gif\" />\n      </div>\n      <div class=\"col-12 pt-3\">\n          <div class=\"pt-3 lead text-center\">\n              {{ .Inner }}\n          </div>\n      </div>\n    </div>\n  </div>\n</section>\n"
  },
  {
    "path": "website/layouts/shortcodes/blocks/feature.html",
    "content": "<div class=\"col-md-4 mb-4 text-center\">\n  {{ with .Get \"icon\" }}\n    <div class=\"mb-3 text-primary\">\n        <i class=\"{{ . }} fa-2x\"></i>\n    </div>\n  {{ end }}\n  <h3 class=\"fw-normal\">{{ .Get \"title\" }}</h3>\n  <p>{{ .Inner }}</p>\n\n  {{ with .Get \"url\" }}\n    <a href=\"{{ . }}\" class=\"text-decoration-none\">Read more...</a>\n  {{ end }}\n</div>\n"
  },
  {
    "path": "website/layouts/shortcodes/blocks/section.html",
    "content": "<section class=\"row td-box td-box bg-{{ .Get \"color\" | default \"dark\" }} text-light\">\n  <div class=\"container-fluid\">\n    <div class=\"row\">\n      {{ .Inner }}\n    </div>\n  </div>\n</section>\n"
  }
]